Advertisement
Guest User

Async

a guest
Aug 15th, 2019
765
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #requires -Version 2
  2.  
  3. function Test-ConnectionAsync
  4. {    
  5.     <#
  6.     .Synopsis
  7.        Proxy function for Test-Connection that pings multiple hosts at a time.
  8.     .DESCRIPTION
  9.        Proxy function for Test-Connection that pings multiple hosts at a time, using the -AsJob parameter of Test-Connection.  The Test-Connection cmdlet performs these jobs in multiple threads of a single process, unlike Start-Job.
  10.     .PARAMETER MaxConcurrent
  11.        Specifies the maximum number of Test-Connection commands to run at a time.
  12.     .EXAMPLE
  13.        Get-Content .\IPAddresses.txt | Test-ConnectionAsync -MaxConcurrent 250 -Quiet
  14.  
  15.        Pings the devices listed in the IPAddresses.txt file, up to 250 at a time.
  16.     .INPUTS
  17.        Either an array of strings, or of objects containing a property named one of:
  18.        ComputerName, CN, IPAddress, __SERVER, Server, or Destination.
  19.     .OUTPUTS
  20.        If the -Quiet parameter is not specified, the function outputs a collection of Win32_PingStatus objects, one for each ping result.
  21.    
  22.        If the -Quiet parameter is specified, the function outputs a collection of PSCustomObjects containing the properties "ComputerName" (a string with the address that was pinged) and "Success" (a boolean value indicating whether the computer responded to at least one ping successfully).
  23.     .NOTES
  24.        If found, this function makes use of Get-CallerPreference from http://gallery.technet.microsoft.com/Inherit-Preference-82343b9d .  This can be useful if you want to place Test-ConnectionAsync in a Script Module (psm1 file), and have it behave according to the caller's settings for variables like $ErrorActionPreference.
  25.        Other than the MaxConcurrent and Quiet parameters, all other parameters behave identically to the Test-Connection cmdlet; refer to its help file for more details.
  26.        Unlike Test-Connection, Test-ConnectionAsync does not have an AsJob parameter.
  27.     .LINK
  28.        Test-Connection
  29.     #>
  30.    
  31.     [CmdletBinding(DefaultParameterSetName='Default')]
  32.     param(
  33.         [System.Management.AuthenticationLevel]
  34.         ${Authentication},
  35.  
  36.         [Alias('Size','Bytes','BS')]
  37.         [ValidateRange(0, 65500)]
  38.         [System.Int32]
  39.         ${BufferSize},
  40.  
  41.         [Parameter(Mandatory=$true, Position=0, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true)]
  42.         [Alias('CN','IPAddress','__SERVER','Server','Destination')]
  43.         [ValidateNotNullOrEmpty()]
  44.         [System.String[]]
  45.         ${ComputerName},
  46.  
  47.         [ValidateRange(1, 4294967295)]
  48.         [System.Int32]
  49.         ${Count},
  50.  
  51.         [Parameter(ParameterSetName='Source')]
  52.         [ValidateNotNullOrEmpty()]
  53.         [System.Management.Automation.PSCredential]
  54.         ${Credential},
  55.  
  56.         [Parameter(ParameterSetName='Source', Mandatory=$true, Position=1)]
  57.         [Alias('FCN','SRC')]
  58.         [ValidateNotNullOrEmpty()]
  59.         [System.String[]]
  60.         ${Source},
  61.  
  62.         [System.Management.ImpersonationLevel]
  63.         ${Impersonation},
  64.  
  65.         [Parameter(ParameterSetName='Default')]
  66.         [Parameter(ParameterSetName='Source')]
  67.         [ValidateRange(-2147483648, 1000)]
  68.         [System.Int32]
  69.         ${ThrottleLimit},
  70.  
  71.         [Alias('TTL')]
  72.         [ValidateRange(1, 255)]
  73.         [System.Int32]
  74.         ${TimeToLive},
  75.  
  76.         [ValidateRange(1, 60)]
  77.         [System.Int32]
  78.         ${Delay},
  79.  
  80.         [ValidateScript({$_ -ge 1})]
  81.         [System.UInt32]
  82.         $MaxConcurrent = 20,
  83.  
  84.         [Parameter(ParameterSetName='Quiet')]
  85.         [Switch]
  86.         $Quiet
  87.     )
  88.  
  89.     begin
  90.     {
  91.         if ($null -ne ${function:Get-CallerPreference})
  92.         {
  93.             Get-CallerPreference -Cmdlet $PSCmdlet -SessionState $ExecutionContext.SessionState
  94.         }
  95.  
  96.         $null = $PSBoundParameters.Remove('MaxConcurrent')
  97.         $null = $PSBoundParameters.Remove('Quiet')
  98.        
  99.         $jobs = @{}
  100.         $i = -1
  101.  
  102.         function ProcessCompletedJob
  103.         {
  104.             [CmdletBinding()]
  105.             param (
  106.                 [Parameter(Mandatory = $true)]
  107.                 [hashtable]
  108.                 $Jobs,
  109.  
  110.                 [Parameter(Mandatory = $true)]
  111.                 [int]
  112.                 $Index,
  113.  
  114.                 [switch]
  115.                 $Quiet
  116.             )
  117.  
  118.             $quietStatus = New-Object psobject -Property @{ComputerName = $Jobs[$Index].Target; Success = $false}
  119.                    
  120.             if ($Jobs[$Index].Job.HasMoreData)
  121.             {
  122.                 foreach ($ping in (Receive-Job $Jobs[$Index].Job))
  123.                 {
  124.                     if ($Quiet)
  125.                     {
  126.                         $quietStatus.ComputerName = $ping.Address
  127.                         if ($ping.StatusCode -eq 0)
  128.                         {
  129.                             $quietStatus.Success = $true
  130.                             break
  131.                         }
  132.                     }
  133.                            
  134.                     else
  135.                     {
  136.                         Write-Output $ping
  137.                     }
  138.                 }
  139.             }
  140.  
  141.             if ($Quiet)
  142.             {
  143.                 Write-Output $quietStatus
  144.             }
  145.  
  146.             Remove-Job -Job $Jobs[$Index].Job -Force
  147.             $Jobs[$Index] = $null
  148.  
  149.         } # function ProcessCompletedJob
  150.  
  151.     } # begin
  152.  
  153.     process
  154.     {
  155.         $null = $PSBoundParameters.Remove('ComputerName')
  156.  
  157.         foreach ($target in $ComputerName)
  158.         {
  159.             while ($true)
  160.             {
  161.                 if (++$i -eq $MaxConcurrent)
  162.                 {
  163.                     Start-Sleep -Milliseconds 100
  164.                     $i = 0
  165.                 }
  166.  
  167.                 if ($null -ne $jobs[$i] -and $jobs[$i].Job.JobStateInfo.State -ne [System.Management.Automation.JobState]::Running)
  168.                 {
  169.                     ProcessCompletedJob -Jobs $jobs -Index $i -Quiet:$Quiet
  170.                 }
  171.  
  172.                 if ($null -eq $jobs[$i])
  173.                 {
  174.                     Write-Verbose "Job ${i}: Pinging ${target}."
  175.  
  176.                     $job = Test-Connection -ComputerName $target -AsJob @PSBoundParameters
  177.                     $jobs[$i] = New-Object psobject -Property @{Target = $target; Job = $job}
  178.  
  179.                     break
  180.                 }
  181.             }
  182.         }
  183.     }
  184.  
  185.     end
  186.     {
  187.         while ($true)
  188.         {
  189.             $foundActive = $false
  190.  
  191.             for ($i = 0; $i -lt $MaxConcurrent; $i++)
  192.             {
  193.                 if ($null -ne $jobs[$i])
  194.                 {
  195.                     if ($jobs[$i].Job.JobStateInfo.State -ne [System.Management.Automation.JobState]::Running)
  196.                     {
  197.                         ProcessCompletedJob -Jobs $jobs -Index $i -Quiet:$Quiet
  198.                     }                    
  199.                     else
  200.                     {
  201.                         $foundActive = $true
  202.                     }
  203.                 }
  204.             }
  205.  
  206.             if (-not $foundActive)
  207.             {
  208.                 break
  209.             }
  210.  
  211.             Start-Sleep -Milliseconds 100
  212.         }
  213.     }
  214.  
  215. } # function Test-ConnectionAsync
  216.  
  217. New-Variable -Scope Script -Force -Option ReadOnly -Name "PingQuickSelectPropertyList" -Value 'PSComputerName',
  218.     'Address','BufferSize','NoFragmentation','PrimaryAddressResolutionStatus',
  219.     'ProtocolAddress','ProtocolAddressResolved','RecordRoute','ReplyInconsistency','ReplySize','ResolveAddressNames',
  220.     'ResponseTime','ResponseTimeToLive','RouteRecord','RouteRecordResolved','SourceRoute','SourceRouteType','StatusCode',
  221.     'Timeout','TimeStampRecord','TimeStampRecordAddress','TimeStampRecordAddressResolved','TimestampRoute','TimeToLive',
  222.     'TypeofService','__CLASS','__DERIVATION','__DYNASTY','__GENUS','__NAMESPACE','__PATH','__PROPERTY_COUNT','__RELPATH',
  223.     '__SERVER','__SUPERCLASS'
  224.  
  225. New-Variable -Scope Script -Force -Option ReadOnly -Name "PingQuickFormatPropertyList" -Value @{"Name"="Source";"Expression"={$_.__SERVER}},
  226.     @{"Name"="Destination";"Expression"={$_.Address}},@{"Name"="Bytes";"Expression"={$_.ReplySize}},
  227.     @{"Name"="Time(ms)";Expression={$_.ResponseTime}}
  228.  
  229. Export-ModuleMember -Function Test-ConnectionAsync -Variable 'PingQuickSelectPropertyList', 'PingQuickFormatPropertyList'
  230. # SIG # Begin signature block
  231. # MIIhfgYJKoZIhvcNAQcCoIIhbzCCIWsCAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB
  232. # gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR
  233. # AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQUSw+wWAscyXWM4ODOxLItN1oT
  234. # Ci+gghywMIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0B
  235. # AQUFADBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYD
  236. # VQQLExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVk
  237. # IElEIFJvb3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzExMTEwMDAwMDAwWjBlMQsw
  238. # CQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cu
  239. # ZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3Qg
  240. # Q0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg
  241. # +XESpa7cJpSIqvTO9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lT
  242. # XDGEKvYPmDI2dsze3Tyoou9q+yHyUmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5
  243. # a3/UsDg+wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW/lmci3Zt1/GiSw0r/wty2p5g
  244. # 0I6QNcZ4VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpyoeb6pNnVFzF1
  245. # roV9Iq4/AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whf
  246. # GHdPAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0G
  247. # A1UdDgQWBBRF66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLL
  248. # gjEtUYunpyGd823IDzANBgkqhkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3
  249. # cmbYMuRCdWKuh+vy1dneVrOfzM4UKLkNl2BcEkxY5NM9g0lFWJc1aRqoR+pWxnmr
  250. # EthngYTffwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38FnSbNd67IJKusm7Xi+
  251. # fT8r87cmNW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i8b5Q
  252. # Z7dsvfPxH2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu
  253. # 838fYxAe+o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw
  254. # 8jCCBQswggPzoAMCAQICEAOiV15N2F/TLPzy+oVrWjMwDQYJKoZIhvcNAQEFBQAw
  255. # bzELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQ
  256. # d3d3LmRpZ2ljZXJ0LmNvbTEuMCwGA1UEAxMlRGlnaUNlcnQgQXNzdXJlZCBJRCBD
  257. # b2RlIFNpZ25pbmcgQ0EtMTAeFw0xNDA1MDUwMDAwMDBaFw0xNTA1MTMxMjAwMDBa
  258. # MGExCzAJBgNVBAYTAkNBMQswCQYDVQQIEwJPTjERMA8GA1UEBxMIQnJhbXB0b24x
  259. # GDAWBgNVBAoTD0RhdmlkIExlZSBXeWF0dDEYMBYGA1UEAxMPRGF2aWQgTGVlIFd5
  260. # YXR0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvcX51YAyViQE16mg
  261. # +IVQCQ0O8QC/wXBzTMPirnoGK9TThmxQIYgtcekZ5Xa/dWpW0xKKjaS6dRwYYXET
  262. # pzozoMWZbFDVrgKaqtuZNu9TD6rqK/QKf4iL/eikr0NIUL4CoSEQDeGLXDw7ntzZ
  263. # XKM86RuPw6MlDapfFQQFIMjsT7YaoqQNTOxhbiFoHVHqP7xL3JTS7TApa/RnNYyl
  264. # O7SQ7TSNsekiXGwUNxPqt6UGuOP0nyR+GtNiBcPfeUi+XaqjjBmpqgDbkEIMLDuf
  265. # fDO54VKvDLl8D2TxTFOcKZv61IcToOs+8z1sWTpMWI2MBuLhRR3A6iIhvilTYRBI
  266. # iX5FZQIDAQABo4IBrzCCAaswHwYDVR0jBBgwFoAUe2jOKarAF75JeuHlP9an90WP
  267. # NTIwHQYDVR0OBBYEFDS4+PmyUp+SmK2GR+NCMiLd+DpvMA4GA1UdDwEB/wQEAwIH
  268. # gDATBgNVHSUEDDAKBggrBgEFBQcDAzBtBgNVHR8EZjBkMDCgLqAshipodHRwOi8v
  269. # Y3JsMy5kaWdpY2VydC5jb20vYXNzdXJlZC1jcy1nMS5jcmwwMKAuoCyGKmh0dHA6
  270. # Ly9jcmw0LmRpZ2ljZXJ0LmNvbS9hc3N1cmVkLWNzLWcxLmNybDBCBgNVHSAEOzA5
  271. # MDcGCWCGSAGG/WwDATAqMCgGCCsGAQUFBwIBFhxodHRwczovL3d3dy5kaWdpY2Vy
  272. # dC5jb20vQ1BTMIGCBggrBgEFBQcBAQR2MHQwJAYIKwYBBQUHMAGGGGh0dHA6Ly9v
  273. # Y3NwLmRpZ2ljZXJ0LmNvbTBMBggrBgEFBQcwAoZAaHR0cDovL2NhY2VydHMuZGln
  274. # aWNlcnQuY29tL0RpZ2lDZXJ0QXNzdXJlZElEQ29kZVNpZ25pbmdDQS0xLmNydDAM
  275. # BgNVHRMBAf8EAjAAMA0GCSqGSIb3DQEBBQUAA4IBAQBbzAp8wys0A5LcuENslW0E
  276. # oz7rc0A8h+XgjJWdJOFRohE1mZRFpdkVxM0SRqw7IzlSFtTMCsVVPNwU6O7y9rCY
  277. # x5agx3CJBkJVDR/Y7DcOQTmmHy1zpcrKAgTznZuKUQZLpoYz/bA+Uh+bvXB9woCA
  278. # IRbchos1oxC+7/gjuxBMKh4NM+9NIvWs6qpnH5JeBidQDQXp3flPkla+MKrPTL/T
  279. # /amgna5E+9WHWnXbMFCpZ5n1bI1OvgNVZlYC/JTa4fjPEk8d16jYVP4GlRz/QUYI
  280. # y6IAGc/z6xpkdtpXWVCbW0dCd5ybfUYTaeCJumGpS/HSJ7JcTZj694QDOKNvhfrm
  281. # MIIGajCCBVKgAwIBAgIQA5/t7ct5W43tMgyJGfA2iTANBgkqhkiG9w0BAQUFADBi
  282. # MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
  283. # d3cuZGlnaWNlcnQuY29tMSEwHwYDVQQDExhEaWdpQ2VydCBBc3N1cmVkIElEIENB
  284. # LTEwHhcNMTMwNTIxMDAwMDAwWhcNMTQwNjA0MDAwMDAwWjBHMQswCQYDVQQGEwJV
  285. # UzERMA8GA1UEChMIRGlnaUNlcnQxJTAjBgNVBAMTHERpZ2lDZXJ0IFRpbWVzdGFt
  286. # cCBSZXNwb25kZXIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC6aUqB
  287. # TW+lFBaqis1nvku/xmmPWBzgeegenVgmmNpc1Hyj+dsrjBI2w/z5ZAaxu8KomAoX
  288. # DeGV60C065ZtmL+mj3nPvIqSe22cGAZR2KUYUzIBJxlh6IRB38bw6Mr+d61f2J57
  289. # jGBvhVxGvWvnD4DO5wPDfDHPt2VVxvvgmQjkc1r7l9rQTL60tsYPfyaSqbj8OO60
  290. # 5DqkSNBM6qlGJ1vPkhGTnBan/tKtHyLFHqzBce+8StsBCUTfmBwtZ7qoigMzyVG1
  291. # 9wJNCaRN/oBexddFw30IqgEzzDPYTzAW5P8iMi7rfjvw+R4y65Ul0vL+bVSEutXl
  292. # 1NHdG6+9WXuUhTABAgMBAAGjggM1MIIDMTAOBgNVHQ8BAf8EBAMCB4AwDAYDVR0T
  293. # AQH/BAIwADAWBgNVHSUBAf8EDDAKBggrBgEFBQcDCDCCAb8GA1UdIASCAbYwggGy
  294. # MIIBoQYJYIZIAYb9bAcBMIIBkjAoBggrBgEFBQcCARYcaHR0cHM6Ly93d3cuZGln
  295. # aWNlcnQuY29tL0NQUzCCAWQGCCsGAQUFBwICMIIBVh6CAVIAQQBuAHkAIAB1AHMA
  296. # ZQAgAG8AZgAgAHQAaABpAHMAIABDAGUAcgB0AGkAZgBpAGMAYQB0AGUAIABjAG8A
  297. # bgBzAHQAaQB0AHUAdABlAHMAIABhAGMAYwBlAHAAdABhAG4AYwBlACAAbwBmACAA
  298. # dABoAGUAIABEAGkAZwBpAEMAZQByAHQAIABDAFAALwBDAFAAUwAgAGEAbgBkACAA
  299. # dABoAGUAIABSAGUAbAB5AGkAbgBnACAAUABhAHIAdAB5ACAAQQBnAHIAZQBlAG0A
  300. # ZQBuAHQAIAB3AGgAaQBjAGgAIABsAGkAbQBpAHQAIABsAGkAYQBiAGkAbABpAHQA
  301. # eQAgAGEAbgBkACAAYQByAGUAIABpAG4AYwBvAHIAcABvAHIAYQB0AGUAZAAgAGgA
  302. # ZQByAGUAaQBuACAAYgB5ACAAcgBlAGYAZQByAGUAbgBjAGUALjALBglghkgBhv1s
  303. # AxUwHwYDVR0jBBgwFoAUFQASKxOYspkH7R7for5XDStnAs0wHQYDVR0OBBYEFGMv
  304. # yd95knu1I8q74aTuM37j4p36MH0GA1UdHwR2MHQwOKA2oDSGMmh0dHA6Ly9jcmwz
  305. # LmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEFzc3VyZWRJRENBLTEuY3JsMDigNqA0hjJo
  306. # dHRwOi8vY3JsNC5kaWdpY2VydC5jb20vRGlnaUNlcnRBc3N1cmVkSURDQS0xLmNy
  307. # bDB3BggrBgEFBQcBAQRrMGkwJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmRpZ2lj
  308. # ZXJ0LmNvbTBBBggrBgEFBQcwAoY1aHR0cDovL2NhY2VydHMuZGlnaWNlcnQuY29t
  309. # L0RpZ2lDZXJ0QXNzdXJlZElEQ0EtMS5jcnQwDQYJKoZIhvcNAQEFBQADggEBAKt0
  310. # vUAATHYVJVc90xwD/31FyEUSZucoZWDY3zuz+g3BrDOP9IG5YfGd+5hV195HQ7qA
  311. # PfFIzD9nMFYfzvTQTIS9h6SexeEPqAZd0C9uXtwZ6PCH6uBOrz1sII5zb37Whxjg
  312. # htOa/J7qjHLpQQ+4cbU4LPgpstUcop0b7F8quNw3IOHLu/DQbGyls8ufSvZU4yY0
  313. # PS64wSsct/bDPf7RLR5Q9JTI+P3uc9tJtRv09f+lkME5FBvY7XEbapj7+kCaRKkp
  314. # DlVeeLi3pIPDcAHwZkDlrnk04StNA6Et5ttUYhjt1QmLoqrWDMhPGr6ZJXhpmYnU
  315. # WYne34jw02dedKWdpkQwggajMIIFi6ADAgECAhAPqEkGFdcAoL4hdv3F7G29MA0G
  316. # CSqGSIb3DQEBBQUAMGUxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJ
  317. # bmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xJDAiBgNVBAMTG0RpZ2lDZXJ0
  318. # IEFzc3VyZWQgSUQgUm9vdCBDQTAeFw0xMTAyMTExMjAwMDBaFw0yNjAyMTAxMjAw
  319. # MDBaMG8xCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNV
  320. # BAsTEHd3dy5kaWdpY2VydC5jb20xLjAsBgNVBAMTJURpZ2lDZXJ0IEFzc3VyZWQg
  321. # SUQgQ29kZSBTaWduaW5nIENBLTEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
  322. # AoIBAQCcfPmgjwrKiUtTmjzsGSJ/DMv3SETQPyJumk/6zt/G0ySR/6hSk+dy+PFG
  323. # hpTFqxf0eH/Ler6QJhx8Uy/lg+e7agUozKAXEUsYIPO3vfLcy7iGQEUfT/k5mNM7
  324. # 629ppFwBLrFm6aa43Abero1i/kQngqkDw/7mJguTSXHlOG1O/oBcZ3e11W9mZJRr
  325. # u4hJaNjR9H4hwebFHsnglrgJlflLnq7MMb1qWkKnxAVHfWAr2aFdvftWk+8b/HL5
  326. # 3z4y/d0qLDJG2l5jvNC4y0wQNfxQX6xDRHz+hERQtIwqPXQM9HqLckvgVrUTtmPp
  327. # P05JI+cGFvAlqwH4KEHmx9RkO12rAgMBAAGjggNDMIIDPzAOBgNVHQ8BAf8EBAMC
  328. # AYYwEwYDVR0lBAwwCgYIKwYBBQUHAwMwggHDBgNVHSAEggG6MIIBtjCCAbIGCGCG
  329. # SAGG/WwDMIIBpDA6BggrBgEFBQcCARYuaHR0cDovL3d3dy5kaWdpY2VydC5jb20v
  330. # c3NsLWNwcy1yZXBvc2l0b3J5Lmh0bTCCAWQGCCsGAQUFBwICMIIBVh6CAVIAQQBu
  331. # AHkAIAB1AHMAZQAgAG8AZgAgAHQAaABpAHMAIABDAGUAcgB0AGkAZgBpAGMAYQB0
  332. # AGUAIABjAG8AbgBzAHQAaQB0AHUAdABlAHMAIABhAGMAYwBlAHAAdABhAG4AYwBl
  333. # ACAAbwBmACAAdABoAGUAIABEAGkAZwBpAEMAZQByAHQAIABDAFAALwBDAFAAUwAg
  334. # AGEAbgBkACAAdABoAGUAIABSAGUAbAB5AGkAbgBnACAAUABhAHIAdAB5ACAAQQBn
  335. # AHIAZQBlAG0AZQBuAHQAIAB3AGgAaQBjAGgAIABsAGkAbQBpAHQAIABsAGkAYQBi
  336. # AGkAbABpAHQAeQAgAGEAbgBkACAAYQByAGUAIABpAG4AYwBvAHIAcABvAHIAYQB0
  337. # AGUAZAAgAGgAZQByAGUAaQBuACAAYgB5ACAAcgBlAGYAZQByAGUAbgBjAGUALjAS
  338. # BgNVHRMBAf8ECDAGAQH/AgEAMHkGCCsGAQUFBwEBBG0wazAkBggrBgEFBQcwAYYY
  339. # aHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEMGCCsGAQUFBzAChjdodHRwOi8vY2Fj
  340. # ZXJ0cy5kaWdpY2VydC5jb20vRGlnaUNlcnRBc3N1cmVkSURSb290Q0EuY3J0MIGB
  341. # BgNVHR8EejB4MDqgOKA2hjRodHRwOi8vY3JsMy5kaWdpY2VydC5jb20vRGlnaUNl
  342. # cnRBc3N1cmVkSURSb290Q0EuY3JsMDqgOKA2hjRodHRwOi8vY3JsNC5kaWdpY2Vy
  343. # dC5jb20vRGlnaUNlcnRBc3N1cmVkSURSb290Q0EuY3JsMB0GA1UdDgQWBBR7aM4p
  344. # qsAXvkl64eU/1qf3RY81MjAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYunpyGd823I
  345. # DzANBgkqhkiG9w0BAQUFAAOCAQEAe3IdZP+IyDrBt+nnqcSHu9uUkteQWTP6K4fe
  346. # qFuAJT8Tj5uDG3xDxOaM3zk+wxXssNo7ISV7JMFyXbhHkYETRvqcP2pRON60Jcvw
  347. # q9/FKAFUeRBGJNE4DyahYZBNur0o5j/xxKqb9to1U0/J8j3TbNwj7aqgTWcJ8zqA
  348. # PTz7NkyQ53ak3fI6v1Y1L6JMZejg1NrRx8iRai0jTzc7GZQY1NWcEDzVsRwZ/4/I
  349. # a5ue+K6cmZZ40c2cURVbQiZyWo0KSiOSQOiG3iLCkzrUm2im3yl/Brk8Dr2fxIac
  350. # gkdCcTKGCZlyCXlLnXFp9UH/fzl3ZPGEjb6LHrJ9aKOlkLEM/zCCBs0wggW1oAMC
  351. # AQICEAb9+QOWA63qAArrPye7uhswDQYJKoZIhvcNAQEFBQAwZTELMAkGA1UEBhMC
  352. # VVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3LmRpZ2ljZXJ0
  353. # LmNvbTEkMCIGA1UEAxMbRGlnaUNlcnQgQXNzdXJlZCBJRCBSb290IENBMB4XDTA2
  354. # MTExMDAwMDAwMFoXDTIxMTExMDAwMDAwMFowYjELMAkGA1UEBhMCVVMxFTATBgNV
  355. # BAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTEhMB8G
  356. # A1UEAxMYRGlnaUNlcnQgQXNzdXJlZCBJRCBDQS0xMIIBIjANBgkqhkiG9w0BAQEF
  357. # AAOCAQ8AMIIBCgKCAQEA6IItmfnKwkKVpYBzQHDSnlZUXKnE0kEGj8kz/E1FkVyB
  358. # n+0snPgWWd+etSQVwpi5tHdJ3InECtqvy15r7a2wcTHrzzpADEZNk+yLejYIA6sM
  359. # NP4YSYL+x8cxSIB8HqIPkg5QycaH6zY/2DDD/6b3+6LNb3Mj/qxWBZDwMiEWicZw
  360. # iPkFl32jx0PdAug7Pe2xQaPtP77blUjE7h6z8rwMK5nQxl0SQoHhg26Ccz8mSxSQ
  361. # rllmCsSNvtLOBq6thG9IhJtPQLnxTPKvmPv2zkBdXPao8S+v7Iki8msYZbHBc63X
  362. # 8djPHgp0XEK4aH631XcKJ1Z8D2KkPzIUYJX9BwSiCQIDAQABo4IDejCCA3YwDgYD
  363. # VR0PAQH/BAQDAgGGMDsGA1UdJQQ0MDIGCCsGAQUFBwMBBggrBgEFBQcDAgYIKwYB
  364. # BQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCDCCAdIGA1UdIASCAckwggHFMIIBtAYK
  365. # YIZIAYb9bAABBDCCAaQwOgYIKwYBBQUHAgEWLmh0dHA6Ly93d3cuZGlnaWNlcnQu
  366. # Y29tL3NzbC1jcHMtcmVwb3NpdG9yeS5odG0wggFkBggrBgEFBQcCAjCCAVYeggFS
  367. # AEEAbgB5ACAAdQBzAGUAIABvAGYAIAB0AGgAaQBzACAAQwBlAHIAdABpAGYAaQBj
  368. # AGEAdABlACAAYwBvAG4AcwB0AGkAdAB1AHQAZQBzACAAYQBjAGMAZQBwAHQAYQBu
  369. # AGMAZQAgAG8AZgAgAHQAaABlACAARABpAGcAaQBDAGUAcgB0ACAAQwBQAC8AQwBQ
  370. # AFMAIABhAG4AZAAgAHQAaABlACAAUgBlAGwAeQBpAG4AZwAgAFAAYQByAHQAeQAg
  371. # AEEAZwByAGUAZQBtAGUAbgB0ACAAdwBoAGkAYwBoACAAbABpAG0AaQB0ACAAbABp
  372. # AGEAYgBpAGwAaQB0AHkAIABhAG4AZAAgAGEAcgBlACAAaQBuAGMAbwByAHAAbwBy
  373. # AGEAdABlAGQAIABoAGUAcgBlAGkAbgAgAGIAeQAgAHIAZQBmAGUAcgBlAG4AYwBl
  374. # AC4wCwYJYIZIAYb9bAMVMBIGA1UdEwEB/wQIMAYBAf8CAQAweQYIKwYBBQUHAQEE
  375. # bTBrMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdpY2VydC5jb20wQwYIKwYB
  376. # BQUHMAKGN2h0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEFzc3Vy
  377. # ZWRJRFJvb3RDQS5jcnQwgYEGA1UdHwR6MHgwOqA4oDaGNGh0dHA6Ly9jcmwzLmRp
  378. # Z2ljZXJ0LmNvbS9EaWdpQ2VydEFzc3VyZWRJRFJvb3RDQS5jcmwwOqA4oDaGNGh0
  379. # dHA6Ly9jcmw0LmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEFzc3VyZWRJRFJvb3RDQS5j
  380. # cmwwHQYDVR0OBBYEFBUAEisTmLKZB+0e36K+Vw0rZwLNMB8GA1UdIwQYMBaAFEXr
  381. # oq/0ksuCMS1Ri6enIZ3zbcgPMA0GCSqGSIb3DQEBBQUAA4IBAQBGUD7Jtygkpzgd
  382. # tlspr1LPUukxR6tWXHvVDQtBs+/sdR90OPKyXGGinJXDUOSCuSPRujqGcq04eKx1
  383. # XRcXNHJHhZRW0eu7NoR3zCSl8wQZVann4+erYs37iy2QwsDStZS9Xk+xBdIOPRqp
  384. # FFumhjFiqKgz5Js5p8T1zh14dpQlc+Qqq8+cdkvtX8JLFuRLcEwAiR78xXm8TBJX
  385. # /l/hHrwCXaj++wc4Tw3GXZG5D2dFzdaD7eeSDY2xaYxP+1ngIw/Sqq4AfO6cQg7P
  386. # kdcntxbuD8O9fAqg7iwIVYUiuOsYGk38KiGtSTGDR5V3cdyxG0tLHBCcdxTBnU8v
  387. # WpUIKRAmMYIEODCCBDQCAQEwgYMwbzELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERp
  388. # Z2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTEuMCwGA1UEAxMl
  389. # RGlnaUNlcnQgQXNzdXJlZCBJRCBDb2RlIFNpZ25pbmcgQ0EtMQIQA6JXXk3YX9Ms
  390. # /PL6hWtaMzAJBgUrDgMCGgUAoHgwGAYKKwYBBAGCNwIBDDEKMAigAoAAoQKAADAZ
  391. # BgkqhkiG9w0BCQMxDAYKKwYBBAGCNwIBBDAcBgorBgEEAYI3AgELMQ4wDAYKKwYB
  392. # BAGCNwIBFTAjBgkqhkiG9w0BCQQxFgQUNRLXHioCV2u8A4XfTS/0SEGceKIwDQYJ
  393. # KoZIhvcNAQEBBQAEggEANKTCLwkds+ujmEB9cAKer0ud3AUQ2+lZgRz1Te9ZTXPG
  394. # 5fUq382jETwEJ3pgVQ4PJ39C6tjHRwsoDPaqnYfKU87K1fx7pX3wpkbM39gRUK1z
  395. # nm4zx6K1sZbR/rYL61KevoS+Y9N/d4JYWqOMprfikhAld2cCY4oBbYPYekB0d3rz
  396. # 2SZu/lIGmQhMyosUlHEKhb4mu+1feACXM7dZi8NT1mrcj3C+JKKBmcGteqVBrVcp
  397. # PLIMzM/nrn4vogKaT17Npi4W+63nAwo2lO6Dz1fapIwRmqQ3n+lfNrtyTl4cZUr6
  398. # j/vUzqvQ/I8/QNoLeZrZdoAiZONLUapK8PTIFc7SMqGCAg8wggILBgkqhkiG9w0B
  399. # CQYxggH8MIIB+AIBATB2MGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2Vy
  400. # dCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNVBAMTGERpZ2lD
  401. # ZXJ0IEFzc3VyZWQgSUQgQ0EtMQIQA5/t7ct5W43tMgyJGfA2iTAJBgUrDgMCGgUA
  402. # oF0wGAYJKoZIhvcNAQkDMQsGCSqGSIb3DQEHATAcBgkqhkiG9w0BCQUxDxcNMTQw
  403. # NTA4MTY0NjUwWjAjBgkqhkiG9w0BCQQxFgQUPpHPdsJO8K5ycH9mbvbvB87MTeUw
  404. # DQYJKoZIhvcNAQEBBQAEggEAN6dAp7neE8KuYpdBYnUGTVTiTneNXo9ezPBe1SQU
  405. # ah5PEmBxARfwd9ZPFpViPk2K+MCwTrjNrISA16ix184ufeEBtqDYIrxjP+o2/nFh
  406. # Qfvj0U/h1iHtAZlYPz0/iqTXrZnNaIdH6AUKtNZIpS+TQgP5gcEYoYkkWv9a4DI4
  407. # IV43jgr5hX0Zzh2rBQW84PFbdnH6v4hPLweDPwtxw2SPobQ90jPOEdsEIdYeH24O
  408. # wJ7m4W6x6hnJe7QyI8F0JQCeMK+98Nl4ni2duNVzQRSEvUc17U619glhBGGtDXGD
  409. # 4McZlL5Hf59fP+OAYlCE+LC5ljr77L/6y0WSNrzv6ix81g==
  410. # SIG # End signature block
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement