Scem.Support.psm1
<#
.Synopsis Short description .DESCRIPTION Long description .EXAMPLE Example of how to use this cmdlet .EXAMPLE Another example of how to use this cmdlet #> function Export-SCVMMInfo { [CmdletBinding()] Param( [parameter(Mandatory = $false, Position=0)] [string] $ComputerName = $env:COMPUTERNAME ) if($null -eq (Get-Module virtualmachinemanager)){ try{ Import-Module virtualmachinemanager -ErrorAction Stop } catch [FileNotFoundException]{ Write-Error "This does not appear to be a System Center Virtual Machine Manager." } } # Get our VMM Server [Microsoft.SystemCenter.VirtualMachineManager.Remoting.ServerConnection]$vmmServer = $null $vmmServer = virtualmachinemanager\Get-SCVMMServer -ComputerName $ComputerName # Get the .NET Framework Version & add a property $dotNetFrameworkVersion = Get-DotNetFrameworkVersion -ComputerName $vmmServer.FQDN $vmmServer | Add-Member -NotePropertyName DotNetFrameworkVersion -NotePropertyValue $dotNetFrameworkVersion # Write the json to a file $vmmServer | ConvertTo-Json | Out-File .\vmmServer.json # Get VMM Host Groups & write json $vmmHostGroups = Get-SCVMHostGroup -VMMServer $vmmServer $vmmHostGroups | ConvertTo-Json | Out-File .\vmmHostGroups.json $vmmHostCollection = Get-SCVMHost -VMMServer $vmmServer $vmmHostCollection | ConvertTo-Json | Out-File .\vmmHosts.json if ($null -ne $vmmServer) { if ($vmmServer.IsConnected) { $vmmServer.Disconnect() } $vmmServer = $null } } <# .Synopsis Exports SCOM Management Server information to json .DESCRIPTION Exports SCOM Management Server information to json .EXAMPLE PS C:\> Get-SCOMManagementServer | Export-SCOMManagementServerInfo .EXAMPLE PS C:\> $managementServerCollection = Get-SCOMManagementServer PS C:\> Export-SCOMManagementServerInfo -ManagementServer $managementServerCollection #> function Export-SCOMManagementServerInfo { [CmdletBinding()] [OutputType([string])] Param ( [Parameter(Mandatory=$true, ValueFromPipeline=$true, Position=0)] [ValidateNotNull()] [Microsoft.EnterpriseManagement.Administration.ManagementServer[]] $ManagementServer ) Begin{ $jsonOutput = @() } Process{ # This is a hack because ConvertTo-Json does not like converting ManagmentServers. # When you pipe to ConvertTo-Json, you get this error: # "ConvertTo-Json : An item with the same key has already been added." # The multiple pipes below seem to convert to json as currently desired. $tmpMgmtServer = $ManagementServer | ConvertTo-Csv | ConvertFrom-Csv # Get the .NET Framework version and add a new property to the Management Server object. $dotNetFrameworkVersion = Get-DotNetFrameworkVersion -ComputerName $tmpMgmtServer.ComputerName $tmpMgmtServer | Add-Member -NotePropertyName DotNetFrameworkVersion -NotePropertyValue $dotNetFrameworkVersion # Add the temporary object to the output array $jsonOutput += $tmpMgmtServer } End{ $jsonOutput | ConvertTo-Json | Out-File .\SCOMManagementServerInfo.json } } <# .Synopsis Returns the friendly version of the .NET Framework. .DESCRIPTION Converts the value of 'SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full' Release to a string. #> function ConvertTo-DotNetFrameworkFriendlyVersionName { [CmdletBinding()] [OutputType([string])] Param ( [System.UInt32]$Release ) [string]$FriendlyVersionValue = switch ($Release) { 378389 { ".NET Framework 4.5" } 378675 { ".NET Framework 4.5.1" } 378758 { ".NET Framework 4.5.1" } 379893 { ".NET Framework 4.5.2" } 393295 { ".NET Framework 4.6" } 393297 { ".NET Framework 4.6" } 394254 { ".NET Framework 4.6.1" } 394271 { ".NET Framework 4.6.1" } 394802 { ".NET Framework 4.6.2" } 394806 { ".NET Framework 4.6.2" } 460798 { ".NET Framework 4.7" } 460805 { ".NET Framework 4.7" } 461308 { ".NET Framework 4.7.1" } 461310 { ".NET Framework 4.7.1" } 461808 { ".NET Framework 4.7.2" } 461814 { ".NET Framework 4.7.2" } 528040 { ".NET Framework 4.8" } 528049 { ".NET Framework 4.8" } 528372 { ".NET Framework 4.8" } default { "Unknown .NET version: $Release" } } return $FriendlyVersionValue } <# .Synopsis Returns the .NET Framework Version .DESCRIPTION Returns the .NET Framework Version #> function Get-DotNetFrameworkVersion { [CmdletBinding()] [OutputType([string])] Param ( [parameter(Mandatory = $false)] [string] $ComputerName = $env:COMPUTERNAME ) $arguments = @{sSubKeyName = "SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full"; sValueName ='Release'}; # Invoke-CimMethod seems to not like FQDNs when $ComputerName is the current machine. # For example: assume $ComputerName -eq 'ms1.contoso.com' and $env:COMPUTERNAME -eq 'ms1'. # Then Invoke-CimMethod will throw this: ######################################################################################## # Invoke-CimMethod : Access is denied. # At line:1 char:1 # + Invoke-CimMethod -ClassName StdRegProv -MethodName GetDWORDValue -Arg ... # + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # + CategoryInfo : PermissionDenied: (root\cimv2:StdRegProv:String) [Invoke-CimMethod], CimException # + FullyQualifiedErrorId : HRESULT 0x80070005,Microsoft.Management.Infrastructure.CimCmdlets.InvokeCimMethodCommand # + PSComputerName : OpsMgr-1.contoso.com ######################################################################################## # # This split ensures we always call Invoke-CimMethod with the NetBIOS name even if # $ComputerName is already a NetBIOS name. [string]$tmpComputerName = $ComputerName.Split('.')[0] # https://docs.microsoft.com/en-us/previous-versions/windows/desktop/regprov/stdregprov $output = Invoke-CimMethod -ClassName StdRegProv -MethodName GetDWORDValue -Arguments $arguments -ComputerName $tmpComputerName $friendlyVersion = ConvertTo-DotNetFrameworkFriendlyVersionName $output.uValue return $friendlyVersion } <# .Synopsis Gets the SQL Server Version Information .DESCRIPTION This returns the T-SQL @@VERSION .EXAMPLE Example of how to use this cmdlet .EXAMPLE Another example of how to use this cmdlet #> function Get-SqlVersion { [CmdletBinding()] [Alias()] [OutputType([string])] Param ( [Parameter(Mandatory=$true, Position=0)] [string] $ComputerName, [Parameter(Mandatory=$false, Position=1)] [string] $InstanceName ) $connectionStringBuilder = New-Object System.Data.SqlClient.SqlConnectionStringBuilder if ($InstanceName) { $connectionStringBuilder['Data Source'] = $ComputerName + "\" + $InstanceName } else { $connectionStringBuilder['Data Source'] = $ComputerName } $connectionStringBuilder['Initial Catalog'] = 'master' $connectionStringBuilder['Application Name'] = 'Scem.Support Module' $connectionStringBuilder['Trusted_Connection'] = $true [System.Data.SqlClient.SqlCommand]$sqlCommand = $null [System.Data.SqlClient.SqlDataReader]$sqlReader = $null [string]$sqlVersion = 'Unknown' try{ $sqlConnection = New-Object System.Data.SqlClient.SqlConnection $connectionStringBuilder.ConnectionString $sqlConnection.Open() [System.Data.SqlClient.SqlCommand]$sqlCommand = $sqlConnection.CreateCommand() $sqlCommand.CommandText = 'SELECT @@VERSION' $sqlCommand.CommandType = [System.Data.CommandType]::Text [System.Data.SqlClient.SqlDataReader]$sqlReader = $sqlCommand.ExecuteReader() while($sqlReader.Read()){ $sqlVersion = $sqlReader.GetString(0) break } } finally{ if($null -ne $sqlReader){ $sqlReader.Dispose() } if($null -ne $sqlCommand){ $sqlCommand.Dispose() } if($null -ne $sqlConnection){ $sqlConnection.Dispose() } } return $sqlVersion } <# .Synopsis Gets the TLS Settings Information .DESCRIPTION This returns the TLS Settings .EXAMPLE Example of how to use this cmdlet .EXAMPLE Another example of how to use this cmdlet .OWNER AndyDesmond #> function Get-TLSSetting { [CmdletBinding()] Param( [parameter(Mandatory = $false,Position=0)] [string]$ComputerName = $env:COMPUTERNAME ) $ProtocolList = @("SSL 2.0", "SSL 3.0", "TLS 1.0", "TLS 1.1", "TLS 1.2") $ProtocolSubKeyList = @("Client", "Server") #Initialize the results set $TLSSetting = [Ordered]@{} # Invoke-CimMethod seems to not like FQDNs when $ComputerName is the current machine. # For example: assume $ComputerName -eq 'ms1.contoso.com' and $env:COMPUTERNAME -eq 'ms1'. # Then Invoke-CimMethod will throw this: ######################################################################################## # Invoke-CimMethod : Access is denied. # At line:1 char:1 # + Invoke-CimMethod -ClassName StdRegProv -MethodName GetDWORDValue -Arg ... # + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # + CategoryInfo : PermissionDenied: (root\cimv2:StdRegProv:String) [Invoke-CimMethod], CimException # + FullyQualifiedErrorId : HRESULT 0x80070005,Microsoft.Management.Infrastructure.CimCmdlets.InvokeCimMethodCommand # + PSComputerName : OpsMgr-1.contoso.com ######################################################################################## # # This split ensures we always call Invoke-CimMethod with the NetBIOS name even if # $ComputerName is already a NetBIOS name. [string]$Target = $ComputerName.Split('.')[0] $Protocols = @{} ForEach ($Protocol in $ProtocolList) { ForEach ($ProtocolSubKey in $ProtocolSubKeyList) { $sSubKeyName = "SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\$($Protocol)\$($ProtocolSubKey)" $CIMMethod = Invoke-CimMethod -ClassName 'StdRegProv' -MethodName GetDWORDValue -ComputerName $Target -Arguments @{sSubKeyName = $sSubKeyName; sValueName = "DisabledByDefault" } $Protocols.add("$Protocol.$ProtocolSubKey", $CIMMethod) } } $TLSSetting.Add($Target, $Protocols) Return (ConvertTo-Json $TLSSetting) } <# .Synopsis Gets the Registry Keys from System Center Product .DESCRIPTION This gets the Registry Keys from System Center Product .EXAMPLE Example of how to use this cmdlet .EXAMPLE Another example of how to use this cmdlet .OWNER blakedrumm #> function Get-SystemCenterSetupRegKeyInfo { [CmdletBinding()] [OutputType([Microsoft.EnterpriseManagement.Support.Common.SystemCenterSetupRegKeyInfo])] Param( [parameter(Mandatory = $false,Position=0)] [string]$ComputerName = $env:COMPUTERNAME ) # This split ensures we always call Invoke-CimMethod with the NetBIOS name even if # $ComputerName is already a NetBIOS name. [string]$Target = $ComputerName.Split('.')[0] $sSubKeyName = "SOFTWARE\Microsoft\Microsoft Operations Manager\3.0\Setup" # construct a new object $setuplocation = New-Object -TypeName Microsoft.EnterpriseManagement.Support.Common.SystemCenterSetupRegKeyInfo #set the object values from the registry key $CIMMethod = Invoke-CimMethod -ClassName 'StdRegProv' -MethodName GetStringValue -ComputerName $Target -Arguments @{sSubKeyName = $sSubKeyName; sValueName = "CurrentVersion" } $setuplocation.CurrentVersion = $CIMMethod.sValue $CIMMethod = Invoke-CimMethod -ClassName 'StdRegProv' -MethodName GetStringValue -ComputerName $Target -Arguments @{sSubKeyName = $sSubKeyName; sValueName = "DatabaseName" } $setuplocation.DatabaseName = $CIMMethod.sValue $CIMMethod = Invoke-CimMethod -ClassName 'StdRegProv' -MethodName GetStringValue -ComputerName $Target -Arguments @{sSubKeyName = $sSubKeyName; sValueName = "DatabaseServerName" } $setuplocation.DatabaseServerName = $CIMMethod.sValue $CIMMethod = Invoke-CimMethod -ClassName 'StdRegProv' -MethodName GetStringValue -ComputerName $Target -Arguments @{sSubKeyName = $sSubKeyName; sValueName = "DatabaseVersion" } $setuplocation.DatabaseVersion = $CIMMethod.sValue $CIMMethod = Invoke-CimMethod -ClassName 'StdRegProv' -MethodName GetStringValue -ComputerName $Target -Arguments @{sSubKeyName = $sSubKeyName; sValueName = "DataWarehouseDBName" } $setuplocation.DataWarehouseDBName = $CIMMethod.sValue $CIMMethod = Invoke-CimMethod -ClassName 'StdRegProv' -MethodName GetStringValue -ComputerName $Target -Arguments @{sSubKeyName = $sSubKeyName; sValueName = "DataWarehouseDBServerName" } $setuplocation.DataWarehouseDBServerName = $CIMMethod.sValue $CIMMethod = Invoke-CimMethod -ClassName 'StdRegProv' -MethodName GetStringValue -ComputerName $Target -Arguments @{sSubKeyName = $sSubKeyName; sValueName = "InstallDirectory" } $setuplocation.InstallDirectory = $CIMMethod.sValue $CIMMethod = Invoke-CimMethod -ClassName 'StdRegProv' -MethodName GetStringValue -ComputerName $Target -Arguments @{sSubKeyName = $sSubKeyName; sValueName = "InstalledOn" } $setuplocation.InstalledOn = $CIMMethod.sValue $CIMMethod = Invoke-CimMethod -ClassName 'StdRegProv' -MethodName GetStringValue -ComputerName $Target -Arguments @{sSubKeyName = $sSubKeyName; sValueName = "ManagementServerPort" } $setuplocation.ManagementServerPort = $CIMMethod.sValue $CIMMethod = Invoke-CimMethod -ClassName 'StdRegProv' -MethodName GetStringValue -ComputerName $Target -Arguments @{sSubKeyName = $sSubKeyName; sValueName = "Product" } $setuplocation.Product = $CIMMethod.sValue $CIMMethod = Invoke-CimMethod -ClassName 'StdRegProv' -MethodName GetStringValue -ComputerName $Target -Arguments @{sSubKeyName = $sSubKeyName; sValueName = "ServerVersion" } $setuplocation.ServerVersion = $CIMMethod.sValue $CIMMethod = Invoke-CimMethod -ClassName 'StdRegProv' -MethodName GetStringValue -ComputerName $Target -Arguments @{sSubKeyName = $sSubKeyName; sValueName = "UIVersion" } $setuplocation.UIVersion = $CIMMethod.sValue return $setuplocation } <# .Synopsis Gets the resource pools used in SCOM Cross Platform Monitoring .DESCRIPTION Gets the resource pools used in SCOM Cross Platform Monitoring .EXAMPLE Example of how to use this cmdlet .EXAMPLE Another example of how to use this cmdlet .OWNER udmudiar #> function Get-SCXResourcePool { [CmdletBinding()] [OutputType([String[]])] Param() $UnixLinuxComputers = Get-SCOMClass -DisplayName "UNIX/Linux Computer" | Get-SCOMClassInstance $relationshipType = Get-SCOMRelationship -Name "Microsoft.SystemCenter.ManagementActionPointShouldManageEntity" $instances=Get-SCOMRelationshipInstance -TargetInstance $UnixLinuxComputers | Where-Object { $_.RelationshipId -eq $relationshipType.Id } return $instances.SourceObject.DisplayName | Get-Unique } <# .Synopsis Tests whether the current user is running with elevated privileges .DESCRIPTION Tests whether the current user is running with elevated privileges .NOTES Returns $true if user is running with elevated privileges. $false otherwise. .OWNER cgreene #> function Test-IsCurrentUserAdministrator { [CmdletBinding()] [OutputType([bool])] Param() [Security.Principal.WindowsPrincipal]$currentPrincipal = New-Object Security.Principal.WindowsPrincipal([Security.Principal.WindowsIdentity]::GetCurrent()) [bool] $IsAdministrator = $currentPrincipal.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator) return $IsAdministrator } <# .Synopsis Return globally installed programs .DESCRIPTION Queries the registry using the "HKLM\SOFTWARE[\WOW6432Node]\Microsoft\Windows\CurrentVersion\Uninstall" registry keys and returns installed products for the system. Does not return programs installed under user profiles. .EXAMPLE [LocalHost] Get-InstalledPrograms .EXAMPLE [RemoteComputer] Get-InstalledPrograms -ComputerName Server007.Contoso.com, Server008.Contoso.com .NOTES If running against a remote machine, the console must be elevated to administrator with remote permissions. Inspired by the works of: Marc Carter - https://devblogs.microsoft.com/scripting/use-powershell-to-quickly-find-installed-software/ XKLN.net - https://xkln.net/blog/please-stop-using-win32product-to-find-installed-software-alternatives-inside/ Uninstall Registry Property List: https://docs.microsoft.com/en-us/windows/win32/msi/uninstall-registry-key .OWNER LorneSepaugh #> Function Get-InstalledPrograms { [CmdletBinding()] Param ( [parameter(Mandatory = $false)] [String[]] $ComputerName = $env:COMPUTERNAME ) If ($ComputerName -notlike $env:COMPUTERNAME) { If (Test-IsCurrentUserAdministrator) { Write-Debug "$($env:USERNAME) is Administrator, continuing" } Else { Write-Warning "To query remote machines, you must run as Administrator" Return $null } } # Define variables for uninstall key locations $UninstallKeys = @( "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall", #64bit "SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall" #32bit ) ForEach ($Machine in $ComputerName) { # Create an instance of the KHEY_LOCAL_MACHINE registry hive $reg=[Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine',$Machine) # Iterate through the HKLM\Software...\Uninstall hives and extract properties into a PSObject $GlobalInstalledPrograms = ForEach ($UninstallKey in $UninstallKeys) { # Drill down into the Uninstall key using the OpenSubKey Method, retrieve an array of string that contain all the subkey names $regkey = $reg.OpenSubKey($UninstallKey) $subkeys = $regkey.GetSubKeyNames() # Open each Subkey and use GetValue method to return desired properties for each program ForEach ($key in $subkeys){ # Concat the full path to the subkey, then open it $thisKey = $UninstallKey + "\\" + $key $thisSubKey = $reg.OpenSubKey($thisKey) # Grab relevant properties from each key as we read it, add to main object. Avoids things like patches by filtering on DisplayName if ($($thisSubKey.GetValue("DisplayName"))) { # Adds properties pulled from the registry into a PSCustomObject, which will get added into the main $GlobalInstalledPrograms object [pscustomobject]@{ 'ComputerName' = $Machine 'DisplayName' = $($thisSubKey.GetValue("DisplayName")) 'DisplayVersion' = $($thisSubKey.GetValue("DisplayVersion")) 'InstallLocation' = $($thisSubKey.GetValue("InstallLocation")) # Reformats a string date like 19990101 to 1999-Jan-01. If the InstallDate field is null, an error is thrown regardless of any other error handling, hence the try/catch 'InstallDate' = try{([System.DateTime]::ParseExact(($($thisSubKey.GetValue("InstallDate"))-replace "[^0-9]"),"yyyyMMdd",[CultureInfo]::InvariantCulture)).ToString('yyyy-MMM-dd')} catch { $null }; 'ProductCode' = ([regex]::Matches($($thisSubKey.GetValue("UninstallString")),'{.*}').value) 'Publisher' = $($thisSubKey.GetValue("Publisher")) 'URLInfoAbout' = $($thisSubKey.GetValue("URLInfoAbout")) } } } } # Close open registry keys $reg.Dispose() $GlobalInstalledPrograms | Sort-Object DisplayName | Format-Table -auto } #End of per-machine loop } # SIG # Begin signature block # MIInngYJKoZIhvcNAQcCoIInjzCCJ4sCAQExDzANBglghkgBZQMEAgEFADB5Bgor # BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG # KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCCEwW/6wdAlsyvJ # 7V5+S8USECbEGtp/43ie544XTo/7EKCCDYEwggX/MIID56ADAgECAhMzAAACUosz # qviV8znbAAAAAAJSMA0GCSqGSIb3DQEBCwUAMH4xCzAJBgNVBAYTAlVTMRMwEQYD # VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy # b3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01pY3Jvc29mdCBDb2RlIFNpZ25p # bmcgUENBIDIwMTEwHhcNMjEwOTAyMTgzMjU5WhcNMjIwOTAxMTgzMjU5WjB0MQsw # CQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9u # ZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMR4wHAYDVQQDExVNaWNy # b3NvZnQgQ29ycG9yYXRpb24wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB # AQDQ5M+Ps/X7BNuv5B/0I6uoDwj0NJOo1KrVQqO7ggRXccklyTrWL4xMShjIou2I # sbYnF67wXzVAq5Om4oe+LfzSDOzjcb6ms00gBo0OQaqwQ1BijyJ7NvDf80I1fW9O # L76Kt0Wpc2zrGhzcHdb7upPrvxvSNNUvxK3sgw7YTt31410vpEp8yfBEl/hd8ZzA # v47DCgJ5j1zm295s1RVZHNp6MoiQFVOECm4AwK2l28i+YER1JO4IplTH44uvzX9o # RnJHaMvWzZEpozPy4jNO2DDqbcNs4zh7AWMhE1PWFVA+CHI/En5nASvCvLmuR/t8 # q4bc8XR8QIZJQSp+2U6m2ldNAgMBAAGjggF+MIIBejAfBgNVHSUEGDAWBgorBgEE # AYI3TAgBBggrBgEFBQcDAzAdBgNVHQ4EFgQUNZJaEUGL2Guwt7ZOAu4efEYXedEw # UAYDVR0RBEkwR6RFMEMxKTAnBgNVBAsTIE1pY3Jvc29mdCBPcGVyYXRpb25zIFB1 # ZXJ0byBSaWNvMRYwFAYDVQQFEw0yMzAwMTIrNDY3NTk3MB8GA1UdIwQYMBaAFEhu # ZOVQBdOCqhc3NyK1bajKdQKVMFQGA1UdHwRNMEswSaBHoEWGQ2h0dHA6Ly93d3cu # bWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY0NvZFNpZ1BDQTIwMTFfMjAxMS0w # Ny0wOC5jcmwwYQYIKwYBBQUHAQEEVTBTMFEGCCsGAQUFBzAChkVodHRwOi8vd3d3 # Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NlcnRzL01pY0NvZFNpZ1BDQTIwMTFfMjAx # MS0wNy0wOC5jcnQwDAYDVR0TAQH/BAIwADANBgkqhkiG9w0BAQsFAAOCAgEAFkk3 # uSxkTEBh1NtAl7BivIEsAWdgX1qZ+EdZMYbQKasY6IhSLXRMxF1B3OKdR9K/kccp # kvNcGl8D7YyYS4mhCUMBR+VLrg3f8PUj38A9V5aiY2/Jok7WZFOAmjPRNNGnyeg7 # l0lTiThFqE+2aOs6+heegqAdelGgNJKRHLWRuhGKuLIw5lkgx9Ky+QvZrn/Ddi8u # TIgWKp+MGG8xY6PBvvjgt9jQShlnPrZ3UY8Bvwy6rynhXBaV0V0TTL0gEx7eh/K1 # o8Miaru6s/7FyqOLeUS4vTHh9TgBL5DtxCYurXbSBVtL1Fj44+Od/6cmC9mmvrti # yG709Y3Rd3YdJj2f3GJq7Y7KdWq0QYhatKhBeg4fxjhg0yut2g6aM1mxjNPrE48z # 6HWCNGu9gMK5ZudldRw4a45Z06Aoktof0CqOyTErvq0YjoE4Xpa0+87T/PVUXNqf # 7Y+qSU7+9LtLQuMYR4w3cSPjuNusvLf9gBnch5RqM7kaDtYWDgLyB42EfsxeMqwK # WwA+TVi0HrWRqfSx2olbE56hJcEkMjOSKz3sRuupFCX3UroyYf52L+2iVTrda8XW # esPG62Mnn3T8AuLfzeJFuAbfOSERx7IFZO92UPoXE1uEjL5skl1yTZB3MubgOA4F # 8KoRNhviFAEST+nG8c8uIsbZeb08SeYQMqjVEmkwggd6MIIFYqADAgECAgphDpDS # AAAAAAADMA0GCSqGSIb3DQEBCwUAMIGIMQswCQYDVQQGEwJVUzETMBEGA1UECBMK # V2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0 # IENvcnBvcmF0aW9uMTIwMAYDVQQDEylNaWNyb3NvZnQgUm9vdCBDZXJ0aWZpY2F0 # ZSBBdXRob3JpdHkgMjAxMTAeFw0xMTA3MDgyMDU5MDlaFw0yNjA3MDgyMTA5MDla # MH4xCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdS # ZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMT # H01pY3Jvc29mdCBDb2RlIFNpZ25pbmcgUENBIDIwMTEwggIiMA0GCSqGSIb3DQEB # AQUAA4ICDwAwggIKAoICAQCr8PpyEBwurdhuqoIQTTS68rZYIZ9CGypr6VpQqrgG # OBoESbp/wwwe3TdrxhLYC/A4wpkGsMg51QEUMULTiQ15ZId+lGAkbK+eSZzpaF7S # 35tTsgosw6/ZqSuuegmv15ZZymAaBelmdugyUiYSL+erCFDPs0S3XdjELgN1q2jz # y23zOlyhFvRGuuA4ZKxuZDV4pqBjDy3TQJP4494HDdVceaVJKecNvqATd76UPe/7 # 4ytaEB9NViiienLgEjq3SV7Y7e1DkYPZe7J7hhvZPrGMXeiJT4Qa8qEvWeSQOy2u # M1jFtz7+MtOzAz2xsq+SOH7SnYAs9U5WkSE1JcM5bmR/U7qcD60ZI4TL9LoDho33 # X/DQUr+MlIe8wCF0JV8YKLbMJyg4JZg5SjbPfLGSrhwjp6lm7GEfauEoSZ1fiOIl # XdMhSz5SxLVXPyQD8NF6Wy/VI+NwXQ9RRnez+ADhvKwCgl/bwBWzvRvUVUvnOaEP # 6SNJvBi4RHxF5MHDcnrgcuck379GmcXvwhxX24ON7E1JMKerjt/sW5+v/N2wZuLB # l4F77dbtS+dJKacTKKanfWeA5opieF+yL4TXV5xcv3coKPHtbcMojyyPQDdPweGF # RInECUzF1KVDL3SV9274eCBYLBNdYJWaPk8zhNqwiBfenk70lrC8RqBsmNLg1oiM # CwIDAQABo4IB7TCCAekwEAYJKwYBBAGCNxUBBAMCAQAwHQYDVR0OBBYEFEhuZOVQ # BdOCqhc3NyK1bajKdQKVMBkGCSsGAQQBgjcUAgQMHgoAUwB1AGIAQwBBMAsGA1Ud # DwQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFHItOgIxkEO5FAVO # 4eqnxzHRI4k0MFoGA1UdHwRTMFEwT6BNoEuGSWh0dHA6Ly9jcmwubWljcm9zb2Z0 # LmNvbS9wa2kvY3JsL3Byb2R1Y3RzL01pY1Jvb0NlckF1dDIwMTFfMjAxMV8wM18y # Mi5jcmwwXgYIKwYBBQUHAQEEUjBQME4GCCsGAQUFBzAChkJodHRwOi8vd3d3Lm1p # Y3Jvc29mdC5jb20vcGtpL2NlcnRzL01pY1Jvb0NlckF1dDIwMTFfMjAxMV8wM18y # Mi5jcnQwgZ8GA1UdIASBlzCBlDCBkQYJKwYBBAGCNy4DMIGDMD8GCCsGAQUFBwIB # FjNodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2RvY3MvcHJpbWFyeWNw # cy5odG0wQAYIKwYBBQUHAgIwNB4yIB0ATABlAGcAYQBsAF8AcABvAGwAaQBjAHkA # XwBzAHQAYQB0AGUAbQBlAG4AdAAuIB0wDQYJKoZIhvcNAQELBQADggIBAGfyhqWY # 4FR5Gi7T2HRnIpsLlhHhY5KZQpZ90nkMkMFlXy4sPvjDctFtg/6+P+gKyju/R6mj # 82nbY78iNaWXXWWEkH2LRlBV2AySfNIaSxzzPEKLUtCw/WvjPgcuKZvmPRul1LUd # d5Q54ulkyUQ9eHoj8xN9ppB0g430yyYCRirCihC7pKkFDJvtaPpoLpWgKj8qa1hJ # Yx8JaW5amJbkg/TAj/NGK978O9C9Ne9uJa7lryft0N3zDq+ZKJeYTQ49C/IIidYf # wzIY4vDFLc5bnrRJOQrGCsLGra7lstnbFYhRRVg4MnEnGn+x9Cf43iw6IGmYslmJ # aG5vp7d0w0AFBqYBKig+gj8TTWYLwLNN9eGPfxxvFX1Fp3blQCplo8NdUmKGwx1j # NpeG39rz+PIWoZon4c2ll9DuXWNB41sHnIc+BncG0QaxdR8UvmFhtfDcxhsEvt9B # xw4o7t5lL+yX9qFcltgA1qFGvVnzl6UJS0gQmYAf0AApxbGbpT9Fdx41xtKiop96 # eiL6SJUfq/tHI4D1nvi/a7dLl+LrdXga7Oo3mXkYS//WsyNodeav+vyL6wuA6mk7 # r/ww7QRMjt/fdW1jkT3RnVZOT7+AVyKheBEyIXrvQQqxP/uozKRdwaGIm1dxVk5I # RcBCyZt2WwqASGv9eZ/BvW1taslScxMNelDNMYIZczCCGW8CAQEwgZUwfjELMAkG # A1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQx # HjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEoMCYGA1UEAxMfTWljcm9z # b2Z0IENvZGUgU2lnbmluZyBQQ0EgMjAxMQITMwAAAlKLM6r4lfM52wAAAAACUjAN # BglghkgBZQMEAgEFAKCBrjAZBgkqhkiG9w0BCQMxDAYKKwYBBAGCNwIBBDAcBgor # BgEEAYI3AgELMQ4wDAYKKwYBBAGCNwIBFTAvBgkqhkiG9w0BCQQxIgQgC2Ykqa33 # i1Xri5irN4fS2BG1FezoIgi23Iaxm4cygDkwQgYKKwYBBAGCNwIBDDE0MDKgFIAS # AE0AaQBjAHIAbwBzAG8AZgB0oRqAGGh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbTAN # BgkqhkiG9w0BAQEFAASCAQBT4Dk4tyHe2qEzRBNONpZqzFj5N2D5G9Q27OyfCZY2 # f7jR4Qj+6MpmaPmOL7GzKETqITtgshpO2lmOb1v27wDG26z5PS77IGbUi9SegxWH # scXE7YNmpzPk8b6/LqJsceye8O/GOPb3ZhFDrkRerJ8uAeRpwbizC+zK2WSbbzHv # xtMdFgockhGwguqQ2mrTARqt6E5OSvKBcOFfcin/KDa3RxnSOG2lmfbJ+Qy0MQO0 # sWe7I7Cbl0d6gPYPdBqlF5eiGJui9LWQ+iMqWtCSn6uhcczvpbvUAULm6tsP3caA # RWb2vjFzixlJXuTO/QpmW6Ynw9YzCWv1mugV3SHAIc3ZoYIW/TCCFvkGCisGAQQB # gjcDAwExghbpMIIW5QYJKoZIhvcNAQcCoIIW1jCCFtICAQMxDzANBglghkgBZQME # AgEFADCCAVEGCyqGSIb3DQEJEAEEoIIBQASCATwwggE4AgEBBgorBgEEAYRZCgMB # MDEwDQYJYIZIAWUDBAIBBQAEICmynKAUjO5l4jXxdyqBfu4+s5uqg9Ulcmg8XUFQ # 4ztvAgZiYbKhnxAYEzIwMjIwNDI3MTgwMDM4LjYwNFowBIACAfSggdCkgc0wgcox # CzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRt # b25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJTAjBgNVBAsTHE1p # Y3Jvc29mdCBBbWVyaWNhIE9wZXJhdGlvbnMxJjAkBgNVBAsTHVRoYWxlcyBUU1Mg # RVNOOjdCRjEtRTNFQS1CODA4MSUwIwYDVQQDExxNaWNyb3NvZnQgVGltZS1TdGFt # cCBTZXJ2aWNloIIRVDCCBwwwggT0oAMCAQICEzMAAAGfK0U1FQguS10AAQAAAZ8w # DQYJKoZIhvcNAQELBQAwfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0 # b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3Jh # dGlvbjEmMCQGA1UEAxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIwMTAwHhcN # MjExMjAyMTkwNTIyWhcNMjMwMjI4MTkwNTIyWjCByjELMAkGA1UEBhMCVVMxEzAR # BgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1p # Y3Jvc29mdCBDb3Jwb3JhdGlvbjElMCMGA1UECxMcTWljcm9zb2Z0IEFtZXJpY2Eg # T3BlcmF0aW9uczEmMCQGA1UECxMdVGhhbGVzIFRTUyBFU046N0JGMS1FM0VBLUI4 # MDgxJTAjBgNVBAMTHE1pY3Jvc29mdCBUaW1lLVN0YW1wIFNlcnZpY2UwggIiMA0G # CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCk9Xl8TVGyiZAvzm8tB4fLP0znL883 # YDIG03js1/WzCaICXDs0kXlJ39OUZweBFa/V8l27mlBjyLZDtTg3W8dQORDunfn7 # SzZEoFmlXaSYcQhyDMV5ghxi6lh8y3NV1TNHGYLzaoQmtBeuFSlEH9wp6rC/sRK7 # GPrOn17XAGzo+/yFy7DfWgIQ43X35ut20TShUeYDrs5GOVpHp7ouqQYRTpu+lAaC # Hfq8tr+LFqIyjpkvxxb3Hcx6Vjte0NPH6GnICT84PxWYK7eoa5AxbsTUqWQyiWtr # GoyQyXP4yIKfTUYPtsTFCi14iuJNr3yRGjo4U1OHZU2yGmWeCrdccJgkby6k2N5A # hRYvKHrePPh5oWHY01g8TckxV4h4iloqvaaYGh3HDPWPw4KoKyEy7QHGuZK1qAkh # eWiKX2qE0eNRWummCKPhdcF3dcViVI9aKXhty4zM76tsUjcdCtnG5VII6eU6dzcL # 6YFp0vMl7JPI3y9Irx9sBEiVmSigM2TDZU4RUIbFItD60DJYzNH0rGu2Dv39P/0O # wox37P3ZfvB5jAeg6B+SBSD0awi+f61JFrVc/UZ83W+5tgI/0xcLGWHBNdEibSF1 # NFfrV0KPCKfi9iD2BkQgMYi02CY8E3us+UyYA4NFYcWJpjacBKABeDBdkY1BPfGg # zskaKhIGhdox9QIDAQABo4IBNjCCATIwHQYDVR0OBBYEFGI08tUeExYrSA4u6N/Z # asfWHchhMB8GA1UdIwQYMBaAFJ+nFV0AXmJdg/Tl0mWnG1M1GelyMF8GA1UdHwRY # MFYwVKBSoFCGTmh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01p # Y3Jvc29mdCUyMFRpbWUtU3RhbXAlMjBQQ0ElMjAyMDEwKDEpLmNybDBsBggrBgEF # BQcBAQRgMF4wXAYIKwYBBQUHMAKGUGh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9w # a2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVGltZS1TdGFtcCUyMFBDQSUyMDIwMTAo # MSkuY3J0MAwGA1UdEwEB/wQCMAAwEwYDVR0lBAwwCgYIKwYBBQUHAwgwDQYJKoZI # hvcNAQELBQADggIBAB2KKCk8O+kZ8+m9bPXQIAmo+6xbKDaKkMR3/82A8XVAMa9R # pItYJkdkta+C6ZIVBsZEARJkKnWpYJiiyGBV3PmPoIMP5zFbr0BYLMolDJZMtH3M # ifVBD9NknYNKg+GbWyaAPs8VZ6UD3CRzjoVZ2PbHRH+UOl2Yc/cm1IR3BlvjlcNw # ykpzBGUndARefuzjfRSfB+dBzmlFY+dME8+J3OvveMraIcznSrlr46GXMoWGJt0h # BJNf4G5JZqyXe8n8z2yR5poL2uiMRzqIXX1rwCIXhcLPFgSKN/vJxrxHiF9ByVio # uf4jCcD8O2mO94toCSqLERuodSe9dQ7qrKVBonDoYWAx+W0XGAX2qaoZmqEun7Qb # 8hnyNyVrJ2C2fZwAY2yiX3ZMgLGUrpDRoJWdP+tc5SS6KZ1fwyhL/KAgjiNPvUBi # u7PF4LHx5TRFU7HZXvgpZDn5xktkXZidA4S26NZsMSygx0R1nXV3ybY3JdlNfRET # t6SIfQdCxRX5YUbI5NdvuVMiy5oB3blfhPgNJyo0qdmkHKE2pN4c8iw9SrajnWcM # 0bUExrDkNqcwaq11Dzwc0lDGX14gnjGRbghl6HLsD7jxx0+buzJHKZPzGdTLMFKo # SdJeV4pU/t3dPbdU21HS60Ex2Ip2TdGfgtS9POzVaTA4UucuklbjZkQihfg2MIIH # cTCCBVmgAwIBAgITMwAAABXF52ueAptJmQAAAAAAFTANBgkqhkiG9w0BAQsFADCB # iDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1Jl # ZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEyMDAGA1UEAxMp # TWljcm9zb2Z0IFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTAwHhcNMjEw # OTMwMTgyMjI1WhcNMzAwOTMwMTgzMjI1WjB8MQswCQYDVQQGEwJVUzETMBEGA1UE # CBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9z # b2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQgVGltZS1TdGFtcCBQ # Q0EgMjAxMDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAOThpkzntHIh # C3miy9ckeb0O1YLT/e6cBwfSqWxOdcjKNVf2AX9sSuDivbk+F2Az/1xPx2b3lVNx # WuJ+Slr+uDZnhUYjDLWNE893MsAQGOhgfWpSg0S3po5GawcU88V29YZQ3MFEyHFc # UTE3oAo4bo3t1w/YJlN8OWECesSq/XJprx2rrPY2vjUmZNqYO7oaezOtgFt+jBAc # nVL+tuhiJdxqD89d9P6OU8/W7IVWTe/dvI2k45GPsjksUZzpcGkNyjYtcI4xyDUo # veO0hyTD4MmPfrVUj9z6BVWYbWg7mka97aSueik3rMvrg0XnRm7KMtXAhjBcTyzi # YrLNueKNiOSWrAFKu75xqRdbZ2De+JKRHh09/SDPc31BmkZ1zcRfNN0Sidb9pSB9 # fvzZnkXftnIv231fgLrbqn427DZM9ituqBJR6L8FA6PRc6ZNN3SUHDSCD/AQ8rdH # GO2n6Jl8P0zbr17C89XYcz1DTsEzOUyOArxCaC4Q6oRRRuLRvWoYWmEBc8pnol7X # KHYC4jMYctenIPDC+hIK12NvDMk2ZItboKaDIV1fMHSRlJTYuVD5C4lh8zYGNRiE # R9vcG9H9stQcxWv2XFJRXRLbJbqvUAV6bMURHXLvjflSxIUXk8A8FdsaN8cIFRg/ # eKtFtvUeh17aj54WcmnGrnu3tz5q4i6tAgMBAAGjggHdMIIB2TASBgkrBgEEAYI3 # FQEEBQIDAQABMCMGCSsGAQQBgjcVAgQWBBQqp1L+ZMSavoKRPEY1Kc8Q/y8E7jAd # BgNVHQ4EFgQUn6cVXQBeYl2D9OXSZacbUzUZ6XIwXAYDVR0gBFUwUzBRBgwrBgEE # AYI3TIN9AQEwQTA/BggrBgEFBQcCARYzaHR0cDovL3d3dy5taWNyb3NvZnQuY29t # L3BraW9wcy9Eb2NzL1JlcG9zaXRvcnkuaHRtMBMGA1UdJQQMMAoGCCsGAQUFBwMI # MBkGCSsGAQQBgjcUAgQMHgoAUwB1AGIAQwBBMAsGA1UdDwQEAwIBhjAPBgNVHRMB # Af8EBTADAQH/MB8GA1UdIwQYMBaAFNX2VsuP6KJcYmjRPZSQW9fOmhjEMFYGA1Ud # HwRPME0wS6BJoEeGRWh0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9wa2kvY3JsL3By # b2R1Y3RzL01pY1Jvb0NlckF1dF8yMDEwLTA2LTIzLmNybDBaBggrBgEFBQcBAQRO # MEwwSgYIKwYBBQUHMAKGPmh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2kvY2Vy # dHMvTWljUm9vQ2VyQXV0XzIwMTAtMDYtMjMuY3J0MA0GCSqGSIb3DQEBCwUAA4IC # AQCdVX38Kq3hLB9nATEkW+Geckv8qW/qXBS2Pk5HZHixBpOXPTEztTnXwnE2P9pk # bHzQdTltuw8x5MKP+2zRoZQYIu7pZmc6U03dmLq2HnjYNi6cqYJWAAOwBb6J6Gng # ugnue99qb74py27YP0h1AdkY3m2CDPVtI1TkeFN1JFe53Z/zjj3G82jfZfakVqr3 # lbYoVSfQJL1AoL8ZthISEV09J+BAljis9/kpicO8F7BUhUKz/AyeixmJ5/ALaoHC # gRlCGVJ1ijbCHcNhcy4sa3tuPywJeBTpkbKpW99Jo3QMvOyRgNI95ko+ZjtPu4b6 # MhrZlvSP9pEB9s7GdP32THJvEKt1MMU0sHrYUP4KWN1APMdUbZ1jdEgssU5HLcEU # BHG/ZPkkvnNtyo4JvbMBV0lUZNlz138eW0QBjloZkWsNn6Qo3GcZKCS6OEuabvsh # VGtqRRFHqfG3rsjoiV5PndLQTHa1V1QJsWkBRH58oWFsc/4Ku+xBZj1p/cvBQUl+ # fpO+y/g75LcVv7TOPqUxUYS8vwLBgqJ7Fx0ViY1w/ue10CgaiQuPNtq6TPmb/wrp # NPgkNWcr4A245oyZ1uEi6vAnQj0llOZ0dFtq0Z4+7X6gMTN9vMvpe784cETRkPHI # qzqKOghif9lwY1NNje6CbaUFEMFxBmoQtB1VM1izoXBm8qGCAsswggI0AgEBMIH4 # oYHQpIHNMIHKMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4G # A1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSUw # IwYDVQQLExxNaWNyb3NvZnQgQW1lcmljYSBPcGVyYXRpb25zMSYwJAYDVQQLEx1U # aGFsZXMgVFNTIEVTTjo3QkYxLUUzRUEtQjgwODElMCMGA1UEAxMcTWljcm9zb2Z0 # IFRpbWUtU3RhbXAgU2VydmljZaIjCgEBMAcGBSsOAwIaAxUAdF2umB/yywxFLFTC # 8rJ9Fv9c9reggYMwgYCkfjB8MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGlu # Z3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBv # cmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQgVGltZS1TdGFtcCBQQ0EgMjAxMDAN # BgkqhkiG9w0BAQUFAAIFAOYTcUYwIhgPMjAyMjA0MjcxNTM3NDJaGA8yMDIyMDQy # ODE1Mzc0MlowdDA6BgorBgEEAYRZCgQBMSwwKjAKAgUA5hNxRgIBADAHAgEAAgIU # zDAHAgEAAgITlDAKAgUA5hTCxgIBADA2BgorBgEEAYRZCgQCMSgwJjAMBgorBgEE # AYRZCgMCoAowCAIBAAIDB6EgoQowCAIBAAIDAYagMA0GCSqGSIb3DQEBBQUAA4GB # AEDV7w0kItvV4B5JNsTh0C/dy0yOGyNvJmIATpDwvKD8lvs3+ckAkROuWhV4OGs2 # qeehauO62TsupLDpEcHe1eM7L8mermFhQ9VcOFKXszTYJ1l6CMMuD+Mki4Qh92GH # KypapG6hbz9d9JXfp0qtY4/ruoTki4XqsceUITdEmJGRMYIEDTCCBAkCAQEwgZMw # fDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1Jl # ZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQGA1UEAxMd # TWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIwMTACEzMAAAGfK0U1FQguS10AAQAA # AZ8wDQYJYIZIAWUDBAIBBQCgggFKMBoGCSqGSIb3DQEJAzENBgsqhkiG9w0BCRAB # BDAvBgkqhkiG9w0BCQQxIgQg1mhSZTp+uJ83/vOswFBfdtQ4800Y5Oe0RI6b7DVO # kA0wgfoGCyqGSIb3DQEJEAIvMYHqMIHnMIHkMIG9BCCG8V4poieJnqXnVzwNUeje # KgLJfEH7P+jspyw3S3xc2jCBmDCBgKR+MHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQI # EwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3Nv # ZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBD # QSAyMDEwAhMzAAABnytFNRUILktdAAEAAAGfMCIEIBJIXEn0Mkg0nLEWg8axW8vq # hheGPXio/xlhFA1vCJsEMA0GCSqGSIb3DQEBCwUABIICAEs3ujWETZshboPkrUlQ # YWiobr1lKk316FUfVg7xc8tAAD62zposlgZypmc0wQx3giruxBNGsclcn5XCvthw # AF+b+z6Tkg9qPMA6MjbobObh7md+FENQbC09xkoLwmAgxI64anTV3d2qkLEmrN5k # 0gV5fL7KfOagGSy5rHMHD8YzzO8sPYJMQb97QrxKW4Z/FgeGx3wzehgurs2248+8 # w6/G8dnlR2Ug8NhH3fC6xjvXMYDP5IyAc604Wl1mo0FT5j6pUnMjWVIWWRwYvr70 # AosFGdFou4VBVEuJu1uLqP+WzcBvKDT+zehJJqUzbkJafqVa0ZGi9Z6iczW5aRWy # TJu06QtmBpzlaFVLq0DdAD0rJDrPx5HygXZNq1953EZEIWX2xHYwRbNxBQCmYtaf # nMej2R48Om66WayyYTMRX+m2ETYYCA2EIcm6yAeytLalhPS3W4w/lWiKF7L25rOD # ggl3szmt6+godTes8AxLRmj7atnFLW6JB8b0uGSpVsuMMI+A6Ot7b3QB2mT8i8DS # PBEK/1vN12zWZkO9pGuULS83huSKI40+oqy67qRJU4TIKGEcRs68le5lIhrqGkZR # dECJWFyWwuHHpY7pLcHGR1ittGnT54FG8iFrRN3LxQh9Fe1V7VQ5WcYvTm/TpmLX # SGzAtQjq3eQkIDJwLICGYO4U # SIG # End signature block |