if ($PSVersionTable.PSVersion.Major -le 2) { return } InModuleScope Pester { Describe 'Code Coverage Analysis' { $root = (Get-PSDrive TestDrive).Root $null = New-Item -Path $root\TestScript.ps1 -ItemType File -ErrorAction SilentlyContinue Set-Content -Path $root\TestScript.ps1 -Value @' function FunctionOne { function NestedFunction { 'I am the nested function.' 'I get fully executed.' } if ($true) { 'I am functionOne' NestedFunction } } function FunctionTwo { 'I am function two. I never get called.' } FunctionOne '@ Context 'Entire file' { $testState = New-PesterState -Path $root # Path deliberately duplicated to make sure the code doesn't produce multiple breakpoints for the same commands Enter-CoverageAnalysis -CodeCoverage "$root\TestScript.ps1", "$root\TestScript.ps1" -PesterState $testState It 'Has the proper number of breakpoints defined' { $testState.CommandCoverage.Count | Should Be 7 } $null = & "$root\TestScript.ps1" $coverageReport = Get-CoverageReport -PesterState $testState It 'Reports the proper number of executed commands' { $coverageReport.NumberOfCommandsExecuted | Should Be 6 } It 'Reports the proper number of analyzed commands' { $coverageReport.NumberOfCommandsAnalyzed | Should Be 7 } It 'Reports the proper number of analyzed files' { $coverageReport.NumberOfFilesAnalyzed | Should Be 1 } It 'Reports the proper number of missed commands' { $coverageReport.MissedCommands.Count | Should Be 1 } It 'Reports the correct missed command' { $coverageReport.MissedCommands[0].Command | Should Be "'I am function two. I never get called.'" } It 'Reports the proper number of hit commands' { $coverageReport.HitCommands.Count | Should Be 6 } It 'Reports the correct hit command' { $coverageReport.HitCommands[0].Command | Should Be "'I am the nested function.'" } Exit-CoverageAnalysis -PesterState $testState } Context 'Single function with missed commands' { $testState = New-PesterState -Path $root Enter-CoverageAnalysis -CodeCoverage @{Path = "$root\TestScript.ps1"; Function = 'FunctionTwo'} -PesterState $testState It 'Has the proper number of breakpoints defined' { $testState.CommandCoverage.Count | Should Be 1 } $null = & "$root\TestScript.ps1" $coverageReport = Get-CoverageReport -PesterState $testState It 'Reports the proper number of executed commands' { $coverageReport.NumberOfCommandsExecuted | Should Be 0 } It 'Reports the proper number of analyzed commands' { $coverageReport.NumberOfCommandsAnalyzed | Should Be 1 } It 'Reports the proper number of missed commands' { $coverageReport.MissedCommands.Count | Should Be 1 } It 'Reports the correct missed command' { $coverageReport.MissedCommands[0].Command | Should Be "'I am function two. I never get called.'" } It 'Reports the proper number of hit commands' { $coverageReport.HitCommands.Count | Should Be 0 } Exit-CoverageAnalysis -PesterState $testState } Context 'Single function with no missed commands' { $testState = New-PesterState -Path $root Enter-CoverageAnalysis -CodeCoverage @{Path = "$root\TestScript.ps1"; Function = 'FunctionOne'} -PesterState $testState It 'Has the proper number of breakpoints defined' { $testState.CommandCoverage.Count | Should Be 5 } $null = & "$root\TestScript.ps1" $coverageReport = Get-CoverageReport -PesterState $testState It 'Reports the proper number of executed commands' { $coverageReport.NumberOfCommandsExecuted | Should Be 5 } It 'Reports the proper number of analyzed commands' { $coverageReport.NumberOfCommandsAnalyzed | Should Be 5 } It 'Reports the proper number of missed commands' { $coverageReport.MissedCommands.Count | Should Be 0 } It 'Reports the proper number of hit commands' { $coverageReport.HitCommands.Count | Should Be 5 } It 'Reports the correct hit command' { $coverageReport.HitCommands[0].Command | Should Be "'I am the nested function.'" } Exit-CoverageAnalysis -PesterState $testState } Context 'Range of lines' { $testState = New-PesterState -Path $root Enter-CoverageAnalysis -CodeCoverage @{Path = "$root\TestScript.ps1"; StartLine = 11; EndLine = 12 } -PesterState $testState It 'Has the proper number of breakpoints defined' { $testState.CommandCoverage.Count | Should Be 2 } $null = & "$root\TestScript.ps1" $coverageReport = Get-CoverageReport -PesterState $testState It 'Reports the proper number of executed commands' { $coverageReport.NumberOfCommandsExecuted | Should Be 2 } It 'Reports the proper number of analyzed commands' { $coverageReport.NumberOfCommandsAnalyzed | Should Be 2 } It 'Reports the proper number of missed commands' { $coverageReport.MissedCommands.Count | Should Be 0 } It 'Reports the proper number of hit commands' { $coverageReport.HitCommands.Count | Should Be 2 } It 'Reports the correct hit command' { $coverageReport.HitCommands[0].Command | Should Be "'I am functionOne'" } Exit-CoverageAnalysis -PesterState $testState } Context 'Wildcard resolution' { $testState = New-PesterState -Path $root Enter-CoverageAnalysis -CodeCoverage @{Path = "$root\*.ps1"; Function = '*' } -PesterState $testState It 'Has the proper number of breakpoints defined' { $testState.CommandCoverage.Count | Should Be 6 } $null = & "$root\TestScript.ps1" $coverageReport = Get-CoverageReport -PesterState $testState It 'Reports the proper number of executed commands' { $coverageReport.NumberOfCommandsExecuted | Should Be 5 } It 'Reports the proper number of analyzed commands' { $coverageReport.NumberOfCommandsAnalyzed | Should Be 6 } It 'Reports the proper number of analyzed files' { $coverageReport.NumberOfFilesAnalyzed | Should Be 1 } It 'Reports the proper number of missed commands' { $coverageReport.MissedCommands.Count | Should Be 1 } It 'Reports the correct missed command' { $coverageReport.MissedCommands[0].Command | Should Be "'I am function two. I never get called.'" } It 'Reports the proper number of hit commands' { $coverageReport.HitCommands.Count | Should Be 5 } It 'Reports the correct hit command' { $coverageReport.HitCommands[0].Command | Should Be "'I am the nested function.'" } Exit-CoverageAnalysis -PesterState $testState } } Describe 'Stripping common parent paths' { $paths = @( 'C:\Common\Folder\UniqueSubfolder1\File.ps1' 'C:\Common\Folder\UniqueSubfolder2\File2.ps1' 'C:\Common\Folder\UniqueSubfolder3\File3.ps1' ) $commonPath = Get-CommonParentPath -Path $paths It 'Identifies the correct parent path' { $commonPath | Should Be 'C:\Common\Folder' } It 'Strips the common path correctly' { Get-RelativePath -Path $paths[0] -RelativeTo $commonPath | Should Be 'UniqueSubfolder1\File.ps1' } } if ((Get-Module -ListAvailable PSDesiredStateConfiguration) -and $PSVersionTable.PSVersion.Major -ge 4) { Describe 'Analyzing coverage of a DSC configuration' { $root = (Get-PSDrive TestDrive).Root $null = New-Item -Path $root\TestScriptWithConfiguration.ps1 -ItemType File -ErrorAction SilentlyContinue Set-Content -Path $root\TestScriptWithConfiguration.ps1 -Value @' $line1 = $true # Triggers breakpoint $line2 = $true # Triggers breakpoint configuration MyTestConfig # does NOT trigger breakpoint { Node localhost # Triggers breakpoint { WindowsFeature XPSViewer # Triggers breakpoint { Name = 'XPS-Viewer' # does NOT trigger breakpoint Ensure = 'Present' # does NOT trigger breakpoint } } return # does NOT trigger breakpoint $doesNotExecute = $true # Triggers breakpoint } $line3 = $true # Triggers breakpoint return # does NOT trigger breakpoint $doesnotexecute = $true # Triggers breakpoint '@ $testState = New-PesterState -Path $root Enter-CoverageAnalysis -CodeCoverage "$root\TestScriptWithConfiguration.ps1" -PesterState $testState It 'Has the proper number of breakpoints defined' { $testState.CommandCoverage.Count | Should Be 7 } $null = . "$root\TestScriptWithConfiguration.ps1" $coverageReport = Get-CoverageReport -PesterState $testState It 'Reports the proper number of missed commands before running the configuration' { $coverageReport.MissedCommands.Count | Should Be 4 } MyTestConfig -OutputPath $root $coverageReport = Get-CoverageReport -PesterState $testState It 'Reports the proper number of missed commands after running the configuration' { $coverageReport.MissedCommands.Count | Should Be 2 } Exit-CoverageAnalysis -PesterState $testState } } } # SIG # Begin signature block # MIInYQYJKoZIhvcNAQcCoIInUjCCJ04CAQExDzANBglghkgBZQMEAgEFADB5Bgor # BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG # KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCA+NSWJ517aiUrV # KJxHqsXAXCXEXlAqDflUM+iV0N1usqCCC7QwggXLMIIEs6ADAgECAhMzAAABQGf2 # mGsxCLhyAAAAAAFAMA0GCSqGSIb3DQEBCwUAMIGOMQswCQYDVQQGEwJVUzETMBEG # A1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWlj # cm9zb2Z0IENvcnBvcmF0aW9uMTgwNgYDVQQDEy9NaWNyb3NvZnQgV2luZG93cyBU # aGlyZCBQYXJ0eSBDb21wb25lbnQgQ0EgMjAxMjAeFw0yNTExMTMxOTU5NDNaFw0y # NjExMTAxOTU5NDNaMIGEMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3Rv # bjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0 # aW9uMS4wLAYDVQQDEyVNaWNyb3NvZnQgV2luZG93cyAzcmQgcGFydHkgQ29tcG9u # ZW50MIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEArGt4Hrjs3D7+IIab # GkPGtg4XeWQFi8nKsdeF+N6nkYF9wsmw0qPk4OovEiJnCSRiEtLfYy3Icn4iOp7L # 24oCa0zlgYCND3OnNfYOuVpMsq3CSkXYg3H+VMiB11hOLcctTu4RWy4ZRKsL5NVI # AduJFgd/1Qs2mQpUuOyFfLKhu/+Z+T2c9YALxsfnPvqn8Tn8Tt8wdZuFwz7kK3jl # e2T3YBofybAR2aH678TnOxhLe2/hEpTdKaVfcqyrIX0Mw/LwqEJnj4G8amBbQ7OG # RnKm1VNd4nMpRt1SflNlVo1Q3Qqnj9K6mSPw99YGMCTaVr6jKPylsWyW4nsvu8m0 # MbBJJiLOi0sOTHtwQEVcBH6WM7xbODqwPaklS1wDbED1wfzImIUR8WsXJVjDm7Fg # x4JDo8oLIjKFrEvzBfrYWsvlDg8p9XgR7EB/IJwXGuJbFzo/S+r3D5DkUZXX/72k # XA4FeRJAgLePAuGChPvyQiLtKJeJm9ftJeukrIcs7JpJVHObAgMBAAGjggGoMIIB # pDATBgNVHSUEDDAKBggrBgEFBQcDAzAdBgNVHQ4EFgQUB9FDBUZ0W11vsv6qqb9t # vKspCIowRQYDVR0RBD4wPKQ6MDgxHjAcBgNVBAsTFU1pY3Jvc29mdCBDb3Jwb3Jh # dGlvbjEWMBQGA1UEBRMNMjMwODA5KzUwNjIyOTAfBgNVHSMEGDAWgBRhcaeHr/9p # 1SF2T1KTKAC+eRKrhDB0BgNVHR8EbTBrMGmgZ6BlhmNodHRwOi8vd3d3Lm1pY3Jv # c29mdC5jb20vcGtpb3BzL2NybC9NaWNyb3NvZnQlMjBXaW5kb3dzJTIwVGhpcmQl # MjBQYXJ0eSUyMENvbXBvbmVudCUyMENBJTIwMjAxMi5jcmwwgYEGCCsGAQUFBwEB # BHUwczBxBggrBgEFBQcwAoZlaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9w # cy9jZXJ0cy9NaWNyb3NvZnQlMjBXaW5kb3dzJTIwVGhpcmQlMjBQYXJ0eSUyMENv # bXBvbmVudCUyMENBJTIwMjAxMi5jcnQwDAYDVR0TAQH/BAIwADANBgkqhkiG9w0B # AQsFAAOCAQEAmFzJPKhkAXPOcfy9S4q1nP3XCvmABVGv/VRzFZ1e+oVtVzOFkbZ6 # osY1OpZqa9CEvtgcrtciv1y9mV1SpxAMwfEqq+Nhw2GdZ3IWqFzWFsEe2S9U196s # XRIRIxglZMBWyzdy8rQ+P7L2+LciW4qcaw2wtv6YoI0q1isgk0t1OF5kEL0t9hhx # UrBavTdoqZ3b5JtwDqzmIsxuLtGbE9Pqbz2gx/me+7yduYpIcYlmEmPQkg3gmWkZ # lnSRePu7/5RXS2TGW1O5JP8aqVcMn0ZkHEhtT368pE/CxQVAkAYHNz6+enP9n+HC # 2udu395c0fVlRHy/d53f32RukfbjakH8uzCCBeEwggPJoAMCAQICCmELqsEAAAAA # AAkwDQYJKoZIhvcNAQELBQAwgYgxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNo # aW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29y # cG9yYXRpb24xMjAwBgNVBAMTKU1pY3Jvc29mdCBSb290IENlcnRpZmljYXRlIEF1 # dGhvcml0eSAyMDEwMB4XDTEyMDQxODIzNDgzOFoXDTI3MDQxODIzNTgzOFowgY4x # CzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRt # b25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xODA2BgNVBAMTL01p # Y3Jvc29mdCBXaW5kb3dzIFRoaXJkIFBhcnR5IENvbXBvbmVudCBDQSAyMDEyMIIB # IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAo5wwhAmnYy7PCkfw6iT5ozAg # D15XMSaBmjEHslDUzmcJCGUKWqVLrtXtEC7npZm1n2gvmItYAqwgtCnEcb0oHKX9 # PJtk5MXr32ElvPDuaL/Rp8t+KgKBTmRcDFOGeVcZN2G3mPkMoE4iWZv5Gy1nPCc8 # VpBm4/1/ZX0Phr01R+iKzPTajulqTqunVeyiiR7VM0VTy/med73NLPkFuH90AR3o # +xjhQ9EN6arcN2+9/rgP7R1NAUZOCqz8gujsVoMTjjoB7RRkdOpksmYQtmhtyHAA # fVBILj1D7uAklcbNjsf9uOSVz91++5VeoQHNQ7EH16Qw7puGGipuwQtZonRviwID # AQABo4IBQzCCAT8wEAYJKwYBBAGCNxUBBAMCAQAwHQYDVR0OBBYEFGFxp4ev/2nV # IXZPUpMoAL55EquEMBkGCSsGAQQBgjcUAgQMHgoAUwB1AGIAQwBBMAsGA1UdDwQE # AwIBhjAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFNX2VsuP6KJcYmjRPZSQ # W9fOmhjEMFYGA1UdHwRPME0wS6BJoEeGRWh0dHA6Ly9jcmwubWljcm9zb2Z0LmNv # bS9wa2kvY3JsL3Byb2R1Y3RzL01pY1Jvb0NlckF1dF8yMDEwLTA2LTIzLmNybDBa # BggrBgEFBQcBAQROMEwwSgYIKwYBBQUHMAKGPmh0dHA6Ly93d3cubWljcm9zb2Z0 # LmNvbS9wa2kvY2VydHMvTWljUm9vQ2VyQXV0XzIwMTAtMDYtMjMuY3J0MA0GCSqG # SIb3DQEBCwUAA4ICAQBaimfazNX9DSZBd78KRni0s94SaSt3I8JlLwFf0gP0YbpQ # nS6MOXLzbD5qsR52bey384LczLvFaXAoc2YXP1Tr7gEWSMRG2RuAroE6jQ95bWiw # nuotPznTyjh+vV58CG4Z3MbC9DgzaGHiUkeD4QABVtK6y4eCBTEKQYtO539fX+1f # 0zktReuiE7/9HsKYQXFhFl/ICnAlfFlpMSTkcecKuwQX959yHsnSuxq+PQL+CQyy # Q7RZGplTk5YhX+DWtyYBQpU2rCf9vvSFd2g9GL30vpiIIhGGUhbzRewDlxBwh6Nw # Q3E828mGAxcM9XNbxn3hXGTt18VI1+0y4tGq08+n9ldOYfl362fyiLPeANoDj9CK # NDc+HdhiuNKx8+Evi3I7gZZ8b/zsZnZyYBsk8qCJbVttAC7vKN2GhwXCtLnlvmTC # KvJKFVyY4sQnhf9S42J+D7ICC9dmxwqy0z0gBBRQMlmDCn2b7Vo4EgFSui9eIHKO # SvH953ECjDvhB77Jc/TdR9i077SkszC5iT52yrkAmFZ+q+qKuKXQOKtpdxMLFC/p # qkEf97q9Ois0iu4Kq2PmY/eIJI4gDSs7nePCSVKsnx8OOTtd1G5QauZ9UjqqfDMV # KQ0mXgFYp06pPXqEb3Q/YJ/kMk82AK9tcdM+pkZlX4F08f7BcdpMoEFagt3xHzGC # GwMwghr/AgEBMIGmMIGOMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3Rv # bjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0 # aW9uMTgwNgYDVQQDEy9NaWNyb3NvZnQgV2luZG93cyBUaGlyZCBQYXJ0eSBDb21w # b25lbnQgQ0EgMjAxMgITMwAAAUBn9phrMQi4cgAAAAABQDANBglghkgBZQMEAgEF # AKCB+jAZBgkqhkiG9w0BCQMxDAYKKwYBBAGCNwIBBDAvBgkqhkiG9w0BCQQxIgQg # xmqCniEWEwVxlO00QxphZuEdjaOVInvr4ykiT0r/JaIwUAYKKwYBBAGCNwoDHDFC # DEBEMEY0QzNEMEQxN0I0OUIxQkQ2NDAzQ0U0MzAxQzgyMTkwRjFGMDQ0MkU1NDY1 # MDM0RDZCRjU3MEFCQzdDN0E2MFoGCisGAQQBgjcCAQwxTDBKoCSAIgBNAGkAYwBy # AG8AcwBvAGYAdAAgAFcAaQBuAGQAbwB3AHOhIoAgaHR0cDovL3d3dy5taWNyb3Nv # ZnQuY29tL3dpbmRvd3MwDQYJKoZIhvcNAQEBBQAEggGAKu5ETEcsjwjj1m3FIqDq # FYUpZoyvFtOeHt3ZxSjw+scJR2MUP1NG2oHaKoMobDmgxFNOVcJk8SbXLk3SfLmL # sz7dovmSF+7GnoGjlBXtAYSZ0ZljbBy3tvu86KcyY+hZeQ0MaPOmEPJP3g6rLHiY # Twdwxs66rn3TUwo0MnxMRjf/a7GKORSCWE04tUa+tTzdvJkG0IE13f80EKdeNqTI # c4/9ZmGdI8Zem89DUzAttNXZ0iIqVHCp9zSpxefE/+CuUcQcKLZPRYi7SbeKxJo9 # Op67mtd34kfkD9GNR1kmUR8PyU7ZqJbrcQuxXFUheYR+kSWyNOBVTiuPhwHIlQXJ # u+aLYtzYXpBm86o/WuNNXdnC8p7YZrUAa7Sa9ZVm6I4LvCRvoMDE8VgnFwsnhRwe # Y0IVk4W/wl7j/kXGA1J8ydcLybLp0hIK44drAkRFMbEsxDQ8Mbl519QC/6lBKTny # cwat9vC76nc78hoBZjJTy2O/InGy5rkHplMpxbNMsbocoYIXsDCCF6wGCisGAQQB # gjcDAwExghecMIIXmAYJKoZIhvcNAQcCoIIXiTCCF4UCAQMxDzANBglghkgBZQME # AgEFADCCAVoGCyqGSIb3DQEJEAEEoIIBSQSCAUUwggFBAgEBBgorBgEEAYRZCgMB # MDEwDQYJYIZIAWUDBAIBBQAEIL283NPruXyZmfPTUZQfiqamBv7b9t3CAoRs2J/o # XxeuAgZp603CQbkYEzIwMjYwNTA2MTU0MDUyLjUyNVowBIACAfSggdmkgdYwgdMx # CzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRt # b25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xLTArBgNVBAsTJE1p # Y3Jvc29mdCBJcmVsYW5kIE9wZXJhdGlvbnMgTGltaXRlZDEnMCUGA1UECxMeblNo # aWVsZCBUU1MgRVNOOjZCMDUtMDVFMC1EOTQ3MSUwIwYDVQQDExxNaWNyb3NvZnQg # VGltZS1TdGFtcCBTZXJ2aWNloIIR/jCCBygwggUQoAMCAQICEzMAAAIRRRg5m0PP # /GwAAQAAAhEwDQYJKoZIhvcNAQELBQAwfDELMAkGA1UEBhMCVVMxEzARBgNVBAgT # Cldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29m # dCBDb3Jwb3JhdGlvbjEmMCQGA1UEAxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENB # IDIwMTAwHhcNMjUwODE0MTg0ODEzWhcNMjYxMTEzMTg0ODEzWjCB0zELMAkGA1UE # BhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAc # BgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEtMCsGA1UECxMkTWljcm9zb2Z0 # IElyZWxhbmQgT3BlcmF0aW9ucyBMaW1pdGVkMScwJQYDVQQLEx5uU2hpZWxkIFRT # UyBFU046NkIwNS0wNUUwLUQ5NDcxJTAjBgNVBAMTHE1pY3Jvc29mdCBUaW1lLVN0 # YW1wIFNlcnZpY2UwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDPubsz # EB0vlVrKuTuOwyjcaeE3zmS0cJkS8RyPgEhxwcp380oLu4++lfl2E7rdbpUzmILG # SUbypB5VWs9oq+Px1hgkLsM23g03deVV0L++i94m48+FMn+7tf6liZXap6FNU844 # HX+Gma3nVLODFlzMx2cWX5fZ7U+C61IDkICH39fPk1bQLGdhXPyDRWnGD4GrfZqa # S1FevybcFISBSzyOBZE9XM8cRzOluGWgYYR8dpE6YeFUoio34mEzB4SNTY1czZbq # GbfaP9Af8j8pao019hyEdobTEmWNVNihQo+lxAO6Ef11AoSC8bGPZTn/cWrV6bh0 # 7oiHTibpH623GvpjyhEkf1mFnexyIUEi9mHsTZgVc6M/gwbJtLKVBM8MQUC0ceCm # SyR4RSGw8NH1W9ZaF6SFDHepdoAqH4CQubP+GkTd7TL5Ego7YBESNQskAqB/5H1C # c2+ox4yTP08auOyKOpYbMHaTYk3JpRgqVuZDB45puwKKiJjZ8luKaNXIUAaTkB5h # 11QXG8kaBFUIfsF4E8oCrsww6ZIJM4xnRLDrPI3HhSGHljS4nRk6hMqcHcp9039t # r94ocV4SGLdaoB/NPGLLSsy+Gx+xdkrvOhyWppG9WXxDjwnXvj57KuLKlj0eFT6i # GCJiLi5AYMNV1MN4oO2gL+EPYKf4BHPATWsV8QIDAQABo4IBSTCCAUUwHQYDVR0O # BBYEFGJ9RQPA6eohy99vnf7JXQRmfs5wMB8GA1UdIwQYMBaAFJ+nFV0AXmJdg/Tl # 0mWnG1M1GelyMF8GA1UdHwRYMFYwVKBSoFCGTmh0dHA6Ly93d3cubWljcm9zb2Z0 # LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRpbWUtU3RhbXAlMjBQQ0ElMjAy # MDEwKDEpLmNybDBsBggrBgEFBQcBAQRgMF4wXAYIKwYBBQUHMAKGUGh0dHA6Ly93 # d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVGltZS1T # dGFtcCUyMFBDQSUyMDIwMTAoMSkuY3J0MAwGA1UdEwEB/wQCMAAwFgYDVR0lAQH/ # BAwwCgYIKwYBBQUHAwgwDgYDVR0PAQH/BAQDAgeAMA0GCSqGSIb3DQEBCwUAA4IC # AQCkQp2cx4ghSJTo9q1n+puvCIPNhQwpFzMLgGn9djVL02Ycj7Zzd1ynAfZI6YN9 # 28giq3uZGuC8E9g68n0K1lLl54iuw5sLRvSCApO/bCtOBYb6qS2o0USFB6Kl1RE0 # s3ry4cCbl53AHK13WTDLmvoH3eSXEOyV06ZVa3D+eCPuSc3T2a4KbCvXsmewwVyg # g38fn2z7VFg3tWJ3j7uePwVy9jL2ttk4yd0HOxOKiwXUz5owglfaTcRUVWy4Mvv9 # Hmmkj1ODt5ZA5Yoxkc92wDdmpbMO6EmpPOgVJBKGdl6cL7Gr/P0GEc8UVtS1+MCg # boQM+NJAlheaiCNrw4RrX3HCeHfBW594/5yT7/SDE2LuD6Q7pZo6bTnYXiyIPzGL # pS/vkvvv3yUe89OFzEceyBeoxjn3Z3XBSh/e0v94NpDRSGdgJTzIaRTZcmdy042c # EoC9REC9/aqIhYOPgulybTMDtW6h+4lHVOm7JzmnWNrnZs1kEFWoA7DIOECapawl # cCNheeywL98mR57fXgWH4YjIyC8A9FJyCpFmpXXp1MFi+h77DWf/Baz/JJNSzEPD # hP8AhNy7k8CwucJWkCsOsUtFMXK6354dSgbpRhl+Pz9Gy5DjYg2x7Wlv9w+bsbaV # wsm2QgpPzTG8HUuJo289MFURyY1K8VQzTGtdldxhzFVeJjCCB3EwggVZoAMCAQIC # EzMAAAAVxedrngKbSZkAAAAAABUwDQYJKoZIhvcNAQELBQAwgYgxCzAJBgNVBAYT # AlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYD # VQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xMjAwBgNVBAMTKU1pY3Jvc29mdCBS # b290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDEwMB4XDTIxMDkzMDE4MjIyNVoX # DTMwMDkzMDE4MzIyNVowfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0 # b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3Jh # dGlvbjEmMCQGA1UEAxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIwMTAwggIi # MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDk4aZM57RyIQt5osvXJHm9DtWC # 0/3unAcH0qlsTnXIyjVX9gF/bErg4r25PhdgM/9cT8dm95VTcVrifkpa/rg2Z4VG # Iwy1jRPPdzLAEBjoYH1qUoNEt6aORmsHFPPFdvWGUNzBRMhxXFExN6AKOG6N7dcP # 2CZTfDlhAnrEqv1yaa8dq6z2Nr41JmTamDu6GnszrYBbfowQHJ1S/rboYiXcag/P # XfT+jlPP1uyFVk3v3byNpOORj7I5LFGc6XBpDco2LXCOMcg1KL3jtIckw+DJj361 # VI/c+gVVmG1oO5pGve2krnopN6zL64NF50ZuyjLVwIYwXE8s4mKyzbnijYjklqwB # Sru+cakXW2dg3viSkR4dPf0gz3N9QZpGdc3EXzTdEonW/aUgfX782Z5F37ZyL9t9 # X4C626p+Nuw2TPYrbqgSUei/BQOj0XOmTTd0lBw0gg/wEPK3Rxjtp+iZfD9M269e # wvPV2HM9Q07BMzlMjgK8QmguEOqEUUbi0b1qGFphAXPKZ6Je1yh2AuIzGHLXpyDw # wvoSCtdjbwzJNmSLW6CmgyFdXzB0kZSU2LlQ+QuJYfM2BjUYhEfb3BvR/bLUHMVr # 9lxSUV0S2yW6r1AFemzFER1y7435UsSFF5PAPBXbGjfHCBUYP3irRbb1Hode2o+e # FnJpxq57t7c+auIurQIDAQABo4IB3TCCAdkwEgYJKwYBBAGCNxUBBAUCAwEAATAj # BgkrBgEEAYI3FQIEFgQUKqdS/mTEmr6CkTxGNSnPEP8vBO4wHQYDVR0OBBYEFJ+n # FV0AXmJdg/Tl0mWnG1M1GelyMFwGA1UdIARVMFMwUQYMKwYBBAGCN0yDfQEBMEEw # PwYIKwYBBQUHAgEWM2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvRG9j # cy9SZXBvc2l0b3J5Lmh0bTATBgNVHSUEDDAKBggrBgEFBQcDCDAZBgkrBgEEAYI3 # FAIEDB4KAFMAdQBiAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAf # BgNVHSMEGDAWgBTV9lbLj+iiXGJo0T2UkFvXzpoYxDBWBgNVHR8ETzBNMEugSaBH # hkVodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpL2NybC9wcm9kdWN0cy9NaWNS # b29DZXJBdXRfMjAxMC0wNi0yMy5jcmwwWgYIKwYBBQUHAQEETjBMMEoGCCsGAQUF # BzAChj5odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpL2NlcnRzL01pY1Jvb0Nl # ckF1dF8yMDEwLTA2LTIzLmNydDANBgkqhkiG9w0BAQsFAAOCAgEAnVV9/Cqt4Swf # ZwExJFvhnnJL/Klv6lwUtj5OR2R4sQaTlz0xM7U518JxNj/aZGx80HU5bbsPMeTC # j/ts0aGUGCLu6WZnOlNN3Zi6th542DYunKmCVgADsAW+iehp4LoJ7nvfam++Kctu # 2D9IdQHZGN5tggz1bSNU5HhTdSRXud2f8449xvNo32X2pFaq95W2KFUn0CS9QKC/ # GbYSEhFdPSfgQJY4rPf5KYnDvBewVIVCs/wMnosZiefwC2qBwoEZQhlSdYo2wh3D # YXMuLGt7bj8sCXgU6ZGyqVvfSaN0DLzskYDSPeZKPmY7T7uG+jIa2Zb0j/aRAfbO # xnT99kxybxCrdTDFNLB62FD+CljdQDzHVG2dY3RILLFORy3BFARxv2T5JL5zbcqO # Cb2zAVdJVGTZc9d/HltEAY5aGZFrDZ+kKNxnGSgkujhLmm77IVRrakURR6nxt67I # 6IleT53S0Ex2tVdUCbFpAUR+fKFhbHP+CrvsQWY9af3LwUFJfn6Tvsv4O+S3Fb+0 # zj6lMVGEvL8CwYKiexcdFYmNcP7ntdAoGokLjzbaukz5m/8K6TT4JDVnK+ANuOaM # mdbhIurwJ0I9JZTmdHRbatGePu1+oDEzfbzL6Xu/OHBE0ZDxyKs6ijoIYn/ZcGNT # TY3ugm2lBRDBcQZqELQdVTNYs6FwZvKhggNZMIICQQIBATCCAQGhgdmkgdYwgdMx # CzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRt # b25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xLTArBgNVBAsTJE1p # Y3Jvc29mdCBJcmVsYW5kIE9wZXJhdGlvbnMgTGltaXRlZDEnMCUGA1UECxMeblNo # aWVsZCBUU1MgRVNOOjZCMDUtMDVFMC1EOTQ3MSUwIwYDVQQDExxNaWNyb3NvZnQg # VGltZS1TdGFtcCBTZXJ2aWNloiMKAQEwBwYFKw4DAhoDFQArKnyrZV2ACrVUaTN3 # s9nBXrM1zaCBgzCBgKR+MHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5n # dG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9y # YXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwMA0G # CSqGSIb3DQEBCwUAAgUA7aWdajAiGA8yMDI2MDUwNjEwNTg1MFoYDzIwMjYwNTA3 # MTA1ODUwWjB3MD0GCisGAQQBhFkKBAExLzAtMAoCBQDtpZ1qAgEAMAoCAQACAhi+ # AgH/MAcCAQACAhMFMAoCBQDtpu7qAgEAMDYGCisGAQQBhFkKBAIxKDAmMAwGCisG # AQQBhFkKAwKgCjAIAgEAAgMHoSChCjAIAgEAAgMBhqAwDQYJKoZIhvcNAQELBQAD # ggEBAH08unDH/NC907MyXJXv9cFn1p6l7qeVe8IGg1mWnlxCD0R6I0/JeeuHMV1F # 2At2r+TDnOuuKq8D5m0fuHsLi8hEn0gmVZR37qS6fj5IXc6z/B5eUHF8NX8RNdjc # ZalNLfYN8cS1zYPCB6sPh7qCk0ZBUhseqx5LZ0OTqmAZYqqU0Dq940uQKVfrpfK7 # cYMKJGvlIPI+xLavb5mcoCeTIC95MFc9Bn64iDykO4bmaK/zh+gLZw8vZDK5dR3t # Kp9ZXlf/yH+5yTwdQ2IBjHxT/X1ls2+apSNtv1TdPpuJOBPSvoPiBzV3MPTpGZuv # bGAKesuv1aUX6ZDoLo8GT7L+RgwxggQNMIIECQIBATCBkzB8MQswCQYDVQQGEwJV # UzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UE # ChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQgVGlt # ZS1TdGFtcCBQQ0EgMjAxMAITMwAAAhFFGDmbQ8/8bAABAAACETANBglghkgBZQME # AgEFAKCCAUowGgYJKoZIhvcNAQkDMQ0GCyqGSIb3DQEJEAEEMC8GCSqGSIb3DQEJ # BDEiBCB0at3VOzTaep6NkvzYHd0QN88nx4KEkRROVhG3HSEm8jCB+gYLKoZIhvcN # AQkQAi8xgeowgecwgeQwgb0EICytM6ma74dOrVpcXC+WGMXynadQI00IRf85Ysc0 # Mya3MIGYMIGApH4wfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24x # EDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlv # bjEmMCQGA1UEAxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIwMTACEzMAAAIR # RRg5m0PP/GwAAQAAAhEwIgQgHMO6+81zPDXZqOrZ99pvBLpDQGf8EMVgmBPsyRZ1 # O4cwDQYJKoZIhvcNAQELBQAEggIAMhdHCmsynnrYAuzlpkoPm1p6yStY3C8jsrg/ # bpjGdnATc2JsQ00KvhG0DePWUvyGVRTAYMJvpFdEXacuHJgT4udp0fUb2pGcm3fZ # PeMHAYLB6db3trOm+VagbyuT0Ht1/hjEB2sFI5a+qpfKK1nUWC8q7K72DhUnoi1R # t795QLIXWr9J3UnxIBGKHJMvQLzqTOU025rnbRLoROvWKX4aX2Y/NrGANT0XhWuF # P4U4g6W9X3OfyVeq1+XunNlInK6fFhN7r+rIK5iXXgkecEiVQJdFir2GQWiaVdD/ # PuEtA/dlH5QEIpZTE2i12h9Fq+0rzMqdfTRmghxfcutHE8DUBLyqSDF7TYmgJGa2 # 5osMbCU8rnXrcaTsgQ/nuLwNwqbi4OQKVMPe+vnmwC+3YZ/dfqsJBQwrf1hN1YH2 # XcPjk9MSjyqy0FHqfuggYTgjltQor8g/SPLSmOR9T/asf262Ayzq5bubEGsqpDO0 # T+3dugOnkLkUI8phTjMT2ZCd//nAagyStsdwgsKDkHVzYCb8yvmW6ScwV1tduh9M # co93SJWyLq/j/yzIr72+ckuHzqi/38kczHJUMP5T3JMl+y9FKJ5k2QZUTu0PlC0K # SpXrFue9Zy9FU2YgEC+W/9lSkryEEgn78v0g2uiJ+00NubalTHl+udi7hGxevXUY # V0DCVD0= # SIG # End signature block x

Windows NT KPTV 6.2 build 9200 (Windows Server 2012 Datacenter Edition) i586