Library/New-ARMParameterObjects.ps1
# Copyright (c) Microsoft Corporation. # Licensed under the MIT License. Function New-ARMParameterObjects { <# .SYNOPSIS Creates the parameter files, and an object which points to both the created parameter and template files. .DESCRIPTION Creates a new PowerShell object that contains the Azure Resource type, name, and parameter values. Once created it'll output the parameter files into a *.json file that can be used in combination with with template files to build Azure resources required for hosting a Windows Package Manager REST source. Returns the PowerShell object. .PARAMETER ParameterFolderPath Path to the directory where the Parameter files will be created. .PARAMETER TemplateFolderPath Path to the directory containing the Template files. .PARAMETER Name The name of the objects to be created. .PARAMETER Region The Azure location where objects will be created in. .PARAMETER ImplementationPerformance ["Developer", "Basic", "Enhanced"] specifies the performance of the resources to be created for the Windows Package Manager REST source. .PARAMETER PublisherName [Optional] The WinGet rest source publisher name .PARAMETER PublisherEmail [Optional] The WinGet rest source publisher email .PARAMETER RestSourceAuthentication [Optional] ["None", "MicrosoftEntraId"] The WinGet rest source authentication type. (Default: None) .PARAMETER MicrosoftEntraIdResource [Optional] Microsoft Entra Id authentication resource .PARAMETER MicrosoftEntraIdResourceScope [Optional] Microsoft Entra Id authentication resource scope .PARAMETER ForUpdate [Optional] The operation is for update. (Default: False) .EXAMPLE New-ARMParameterObjects -ParameterFolderPath "C:\WinGet\Parameters" -TemplateFolderPath "C:\WinGet\Templates" -Name "contosorestsource" -AzLocation "westus" -ImplementationPerformance "Developer" Creates the Parameter files required for the creation of the ARM objects. #> PARAM( [Parameter(Position=0, Mandatory=$true)] [string]$ParameterFolderPath, [Parameter(Position=1, Mandatory=$true)] [string]$TemplateFolderPath, [Parameter(Position=2, Mandatory=$true)] [string]$Name, [Parameter(Position=3, Mandatory=$true)] [string]$Region, [Parameter(Position=4, Mandatory=$true)] [string]$ImplementationPerformance, [Parameter(Mandatory=$false)] [string]$PublisherName = "", [Parameter(Mandatory=$false)] [string]$PublisherEmail = "", [ValidateSet("None", "MicrosoftEntraId")] [Parameter(Mandatory=$false)] [string]$RestSourceAuthentication = "None", [Parameter(Mandatory=$false)] [string]$MicrosoftEntraIdResource = "", [Parameter(Mandatory=$false)] [string]$MicrosoftEntraIdResourceScope = "", [Parameter()] [switch]$ForUpdate ) $ARMObjects = @() ## The Names that are to be assigned to each resource. $AppInsightsName = "appi-" + $Name -replace "[^a-zA-Z0-9-]", "" $KeyVaultName = "kv-" + $Name -replace "[^a-zA-Z0-9-]", "" $StorageAccountName = "st" + $Name.ToLower() -replace "[^a-z0-9]", "" $AspName = "asp-" + $Name -replace "[^a-zA-Z0-9-]", "" $CDBAccountName = "cosmos-" + $Name.ToLower() -replace "[^a-z0-9-]", "" $FunctionName = "func-" + $Name -replace "[^a-zA-Z0-9-]", "" $AppConfigName = "appcs-" + $Name -replace "[^a-zA-Z0-9-]", "" $ApiManagementName = "apim-" + $Name -replace "[^a-zA-Z0-9-]", "" $ServerIdentifier = "WinGetRestSource-" + $Name -replace "[^a-zA-Z0-9-]", "" ## Not supported in deployment script ## $FrontDoorName = "" ## $AspGenevaName = "" ## The names of the Azure Cosmos Database and Container - Do not change (Must match with the values in the compiled ## Windows Package Manager Functions [WinGet.RestSource.Functions.zip]) $CDBDatabaseName = "WinGet" $CDBContainerName = "Manifests" if ($RestSourceAuthentication -eq "MicrosoftEntraId") { $ServerAuthenticationType = "microsoftEntraId" $QueryApiValidationEnabled = $true } else { $ServerAuthenticationType = "none" $MicrosoftEntraIdResource = "" $MicrosoftEntraIdResourceScope = "" $QueryApiValidationEnabled = $false } ## The values required for Function ARM Template. But not supported in deployment script. $ManifestCacheEndpoint = "" $MonitoringTenant = "" $MonitoringRole = "" $MonitoringMetricsAccount = "" $RunFromPackageUrl = "" ## Relative Path from the Working Directory to the Azure ARM Template Files $TemplateAppInsightsPath = "$TemplateFolderPath\applicationinsights.json" $TemplateKeyVaultPath = "$TemplateFolderPath\keyvault.json" $TemplateStorageAccountPath = "$TemplateFolderPath\storageaccount.json" $TemplateASPPath = "$TemplateFolderPath\asp.json" $TemplateCDBAccountPath = "$TemplateFolderPath\cosmosdb.json" $TemplateCDBPath = "$TemplateFolderPath\cosmosdb-sql.json" $TemplateCDBContainerPath = "$TemplateFolderPath\cosmosdb-sql-container.json" $TemplateFunctionPath = "$TemplateFolderPath\azurefunction.json" $TemplateAppConfigPath = "$TemplateFolderPath\appconfig.json" $TemplateApiManagementPath = "$TemplateFolderPath\apimanagement.json" $ParameterAppInsightsPath = "$ParameterFolderPath\applicationinsights.json" $ParameterKeyVaultPath = "$ParameterFolderPath\keyvault.json" $ParameterStorageAccountPath = "$ParameterFolderPath\storageaccount.json" $ParameterASPPath = "$ParameterFolderPath\asp.json" $ParameterCDBAccountPath = "$ParameterFolderPath\cosmosdb.json" $ParameterCDBPath = "$ParameterFolderPath\cosmosdb-sql.json" $ParameterCDBContainerPath = "$ParameterFolderPath\cosmosdb-sql-container.json" $ParameterFunctionPath = "$ParameterFolderPath\azurefunction.json" $ParameterAppConfigPath = "$ParameterFolderPath\appconfig.json" $ParameterApiManagementPath = "$ParameterFolderPath\apimanagement.json" Write-Verbose -Message "ARM Parameter Resource performance is based on the: $ImplementationPerformance." $PrimaryRegionName = $(Get-AzLocation).Where({$_.Location -eq $Region}).DisplayName $SecondaryRegion = Get-PairedAzureRegion -Region $Region $SecondaryRegionName = $(Get-AzLocation).Where({$_.Location -eq $SecondaryRegion}).DisplayName Write-Verbose -Message "Retrieving the Azure Tenant and User Information" $AzContext = Get-AzContext $AzTenantID = $AzContext.Tenant.Id $AzTenantDomain = $AzContext.Tenant.Domains[0] if ($AzContext.Account.Type -eq "User") { $LocalDeployment = $true $AzObjectID = $(Get-AzADUser -SignedIn).Id if (!$PublisherEmail) { $PublisherEmail = $AzContext.Account.Id } if (!$PublisherName) { $PublisherName = $AzContext.Account.Id } } else { $LocalDeployment = $false $AzObjectID = $(Get-AzADServicePrincipal -ApplicationId $AzContext.Account.ID).Id if (!$PublisherEmail) { $PublisherEmail = "WinGetRestSource@$AzTenantDomain" } if (!$PublisherName) { $PublisherName = "WinGetRestSource@$AzTenantDomain" } } Write-Verbose -Message "Retrieved the Azure Object Id: $AzObjectID" switch ($ImplementationPerformance) { "Developer" { $AppConfigSku = "Free" $KeyVaultSKU = "Standard" $StorageAccountPerformance = "Standard_LRS" $AspSku = "B1" $CosmosDBAEnableFreeTier = $true ## To enable Serverless then set CosmosDBACapatilities to "[{"name": ""EnableServerless""}]" $CosmosDBACapabilities = "[]" $CosmosDBAConsistency = "ConsistentPrefix" $CosmosDBALocations = @( @{ locationName = $PrimaryRegionName failoverPriority = 0 isZoneRedundant = $false } ) $ApiManagementSku = "Developer" } "Basic" { $AppConfigSku = "Standard" $KeyVaultSKU = "Standard" $StorageAccountPerformance = "Standard_GRS" $AspSku = "S1" $CosmosDBAEnableFreeTier = $false ## To enable Serverless then set CosmosDBACapatilities to "[{"name": ""EnableServerless""}]" $CosmosDBACapabilities = "[]" $CosmosDBAConsistency = "Session" $CosmosDBALocations = @( @{ locationName = $PrimaryRegionName failoverPriority = 0 isZoneRedundant = $false } @{ locationName = $SecondaryRegionName failoverPriority = 1 isZoneRedundant = $false } ) $ApiManagementSku = "Basic" } "Enhanced" { $AppConfigSku = "Standard" $KeyVaultSKU = "Standard" $StorageAccountPerformance = "Standard_GRS" $AspSku = "P1V2" $CosmosDBAEnableFreeTier = $false ## To enable Serverless then set CosmosDBACapatilities to "[{"name": ""EnableServerless""}]" $CosmosDBACapabilities = "[]" $CosmosDBAConsistency = "Session" $CosmosDBALocations = @( @{ locationName = $PrimaryRegionName failoverPriority = 0 isZoneRedundant = $false } @{ locationName = $SecondaryRegionName failoverPriority = 1 isZoneRedundant = $false } ) $ApiManagementSku = "Standard" } } ## This is specific to the JSON file creation $JSONContentVersion = "1.0.0.0" $JSONSchema = "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#" ## Creates a PowerShell object array to contain the details of the Parameter files. $ARMObjects = @( @{ ObjectType = "AppInsight" ObjectName = $AppInsightsName ParameterPath = "$ParameterAppInsightsPath" TemplatePath = "$TemplateAppInsightsPath" Error = "" Parameters = @{ '$Schema' = $JSONSchema contentVersion = $JSONContentVersion Parameters = @{ name = @{ value = $AppInsightsName } location = @{ value = $Region } } } }, @{ ObjectType = "Keyvault" ObjectName = $KeyVaultName ParameterPath = "$ParameterKeyVaultPath" TemplatePath = "$TemplateKeyVaultPath" Error = "" Parameters = @{ '$Schema' = $JSONSchema contentVersion = $JSONContentVersion Parameters = @{ name = @{ value = $KeyVaultName } location = @{ value = $Region } sku = @{ value = $KeyVaultSKU } accessPolicies = @{ value = @( @{ tenantId = $AzTenantID objectID = $AzObjectID permissions = @{ keys = @() secrets = @( "Get", "Set" ) certificates = @() } } ) } } } }, @{ ObjectType = "AppConfig" ObjectName = $FunctionName ParameterPath = "$ParameterAppConfigPath" TemplatePath = "$TemplateAppConfigPath" Error = "" Parameters = @{ '$Schema' = $JSONSchema contentVersion = $JSONContentVersion Parameters = @{ appConfigName = @{ value = $appConfigName } # Name used to contain the Storage Account connection string in the Key Value location = @{ value = $Region } # Azure hosting location sku = @{ value = $AppConfigSku } localDeployment = @{ value = $LocalDeployment } } } }, @{ ObjectType = "StorageAccount" ObjectName = $StorageAccountName ParameterPath = "$ParameterStorageAccountPath" TemplatePath = "$TemplateStorageAccountPath" Error = "" Parameters = @{ '$Schema' = $JSONSchema contentVersion = $JSONContentVersion Parameters = @{ location = @{ value = $Region } storageAccountName = @{ value = $StorageAccountName } accountType = @{ value = $StorageAccountPerformance } } } }, @{ ObjectType = "asp" ObjectName = $aspName ParameterPath = "$ParameterASPPath" TemplatePath = "$TemplateASPPath" Error = "" Parameters = @{ '$Schema' = $JSONSchema contentVersion = $JSONContentVersion Parameters = @{ aspName = @{ value = $aspName } location = @{ value = $Region } skuCode = @{ value = $AspSku } } } }, @{ ObjectType = "CosmosDBAccount" ObjectName = $CDBAccountName ParameterPath = "$ParameterCDBAccountPath" TemplatePath = "$TemplateCDBAccountPath" Error = "" Parameters = @{ '$Schema' = $JSONSchema contentVersion = $JSONContentVersion Parameters = @{ name = @{ value = $CDBAccountName } location = @{ value = $Region } enableFreeTier = @{ value = $CosmosDBAEnableFreeTier } consistencyPolicy = @{ value = @{ defaultConsistencyLevel = $CosmosDBAConsistency maxIntervalInSeconds = 5 maxStalenessPrefix = 100 } } locations = @{ value = $CosmosDBALocations } # Allows requests from azure portal and Azure datacenter ip range (0.0.0.0) ipRules = @{ value = @( @{ ipAddressOrRange = "13.91.105.215" } @{ ipAddressOrRange = "4.210.172.107" } @{ ipAddressOrRange = "13.88.56.148" } @{ ipAddressOrRange = "40.91.218.243" } @{ ipAddressOrRange = "0.0.0.0" } ) } backupPolicy = @{ value = @{ type = "Periodic" periodicModeProperties = @{ backupIntervalInMinutes = 240 backupRetentionIntervalInHours = 720 } } } } } }, @{ ObjectType = "CosmosDBDatabase" ObjectName = $CDBDatabaseName ParameterPath = "$ParameterCDBPath" TemplatePath = "$TemplateCDBPath" Error = "" Parameters = @{ '$Schema' = $JSONSchema contentVersion = $JSONContentVersion Parameters = @{ cosmosName = @{ value = $CDBAccountName } sqlname = @{ value = $CDBDatabaseName } options = @{ Value = @{ autoscaleSettings = @{ maxThroughput = 4000 } } } } } }, @{ ObjectType = "CosmosDBContainer" ObjectName = $CDBContainerName ParameterPath = "$ParameterCDBContainerPath" TemplatePath = "$TemplateCDBContainerPath" Error = "" Parameters = @{ '$Schema' = $JSONSchema contentVersion = $JSONContentVersion Parameters = @{ cosmosName = @{ Value = $CDBAccountName } sqlname = @{ Value = $CDBDatabaseName } containerName = @{ value = $CDBContainerName} indexingPolicy = @{ Value = @{ IndexingMode = "consistent" automatic = $true includedPaths = @(@{ path = "/*" }) excludePaths = @(@{ path = '/"_etag"/?' }) }} partitionKey = @{ value = @{ paths = @("/id") kind = "Hash" } } conflictResolutionPolicy = @{ value = @{ mode = "LastWriterWins" conflictResolutionPath = "/_ts" } } } } }, @{ ObjectType = "Function" ObjectName = $FunctionName ParameterPath = "$ParameterFunctionPath" TemplatePath = "$TemplateFunctionPath" Error = "" Parameters = @{ '$Schema' = $JSONSchema contentVersion = $JSONContentVersion Parameters = @{ location = @{ value = $Region } # Azure hosting location cosmosDatabase = @{ value = $CDBDatabaseName } # Cosmos Database Name cosmosContainer = @{ value = $CDBContainerName } # Cosmos Container Name serverIdentifier = @{ value = $ServerIdentifier } # Azure Function Server Identifier functionName = @{ value = $FunctionName } # Azure Function Name appServiceName = @{ value = $aspName } # Azure App Service Name keyVaultName = @{ value = $KeyVaultName } # Azure Keyvault Name azFuncStorageName = @{ value = $StorageAccountName } # Azure Storage Account Name appInsightName = @{ value = $AppInsightsName } # Azure App Insights Name manifestCacheEndpoint = @{ value = $manifestCacheEndpoint } # Not suported monitoringTenant = @{ value = $monitoringTenant } # Not suported monitoringRole = @{ value = $monitoringRole } # Not suported monitoringMetricsAccount = @{ value = $monitoringMetricsAccount } # Not suported runFromPackageUrl = @{ value = $RunFromPackageUrl } # Not suported serverAuthenticationType = @{ value = $ServerAuthenticationType } # Server authentication type microsoftEntraIdResource = @{ value = $MicrosoftEntraIdResource } # Microsoft Entra Id Resource microsoftEntraIdResourceScope = @{ value = $MicrosoftEntraIdResourceScope } # Microsoft Entra Id Resource Scope } } }, @{ ObjectType = "ApiManagement" ObjectName = $ApiManagementName ParameterPath = "$ParameterApiManagementPath" TemplatePath = "$TemplateApiManagementPath" Error = "" Parameters = @{ '$Schema' = $JSONSchema contentVersion = $JSONContentVersion Parameters = @{ serviceName = @{ value = $ApiManagementName } publisherEmail = @{ value = $PublisherEmail } publisherName = @{ value = $PublisherName } sku = @{ value = $ApiManagementSku } location = @{ value = $Region } keyVaultName = @{ value = $KeyVaultName } backendUrls = @{ value = @() } # Value to be populated after Azure Function is created queryApiValidationEnabled = @{ value = $QueryApiValidationEnabled } microsoftEntraIdResource = @{ value = $MicrosoftEntraIdResource } } } } ) ## Uses the newly created ARMObjects[#].Parameters to create new JSON Parameter files. Write-Verbose -Message "Creating JSON Parameter files for Azure Object Creation:" ## Creates each JSON Parameter file inside of a Parameter folder in the working directory foreach ($object in $ARMObjects) { ## Converts the structure of the variable to a JSON file. Write-Verbose -Message "Creating the Parameter file for $($Object.ObjectType) in the following location: $($Object.ParameterPath)" if ($ForUpdate -and (Test-Path -Path $Object.ParameterPath)) { $Object.Parameters = Get-Content -Path $Object.ParameterPath -Raw | ConvertFrom-Json } else { $ParameterFileContent = $Object.Parameters | ConvertTo-Json -Depth 8 $ParameterFileContent | Out-File -FilePath $Object.ParameterPath -Force } } ## Returns the completed object. return $ARMObjects } # SIG # Begin signature block # MIIoQwYJKoZIhvcNAQcCoIIoNDCCKDACAQExDzANBglghkgBZQMEAgEFADB5Bgor # BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG # KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCD95naQX3jqjE3b # 66r/w3dHkLOy0CvsFrjE4yTOK1Uss6CCDXYwggX0MIID3KADAgECAhMzAAAEBGx0 # Bv9XKydyAAAAAAQEMA0GCSqGSIb3DQEBCwUAMH4xCzAJBgNVBAYTAlVTMRMwEQYD # VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy # b3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01pY3Jvc29mdCBDb2RlIFNpZ25p # bmcgUENBIDIwMTEwHhcNMjQwOTEyMjAxMTE0WhcNMjUwOTExMjAxMTE0WjB0MQsw # CQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9u # ZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMR4wHAYDVQQDExVNaWNy # b3NvZnQgQ29ycG9yYXRpb24wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB # AQC0KDfaY50MDqsEGdlIzDHBd6CqIMRQWW9Af1LHDDTuFjfDsvna0nEuDSYJmNyz # NB10jpbg0lhvkT1AzfX2TLITSXwS8D+mBzGCWMM/wTpciWBV/pbjSazbzoKvRrNo # DV/u9omOM2Eawyo5JJJdNkM2d8qzkQ0bRuRd4HarmGunSouyb9NY7egWN5E5lUc3 # a2AROzAdHdYpObpCOdeAY2P5XqtJkk79aROpzw16wCjdSn8qMzCBzR7rvH2WVkvF # HLIxZQET1yhPb6lRmpgBQNnzidHV2Ocxjc8wNiIDzgbDkmlx54QPfw7RwQi8p1fy # 4byhBrTjv568x8NGv3gwb0RbAgMBAAGjggFzMIIBbzAfBgNVHSUEGDAWBgorBgEE # AYI3TAgBBggrBgEFBQcDAzAdBgNVHQ4EFgQU8huhNbETDU+ZWllL4DNMPCijEU4w # RQYDVR0RBD4wPKQ6MDgxHjAcBgNVBAsTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEW # MBQGA1UEBRMNMjMwMDEyKzUwMjkyMzAfBgNVHSMEGDAWgBRIbmTlUAXTgqoXNzci # tW2oynUClTBUBgNVHR8ETTBLMEmgR6BFhkNodHRwOi8vd3d3Lm1pY3Jvc29mdC5j # b20vcGtpb3BzL2NybC9NaWNDb2RTaWdQQ0EyMDExXzIwMTEtMDctMDguY3JsMGEG # CCsGAQUFBwEBBFUwUzBRBggrBgEFBQcwAoZFaHR0cDovL3d3dy5taWNyb3NvZnQu # Y29tL3BraW9wcy9jZXJ0cy9NaWNDb2RTaWdQQ0EyMDExXzIwMTEtMDctMDguY3J0 # MAwGA1UdEwEB/wQCMAAwDQYJKoZIhvcNAQELBQADggIBAIjmD9IpQVvfB1QehvpC # Ge7QeTQkKQ7j3bmDMjwSqFL4ri6ae9IFTdpywn5smmtSIyKYDn3/nHtaEn0X1NBj # L5oP0BjAy1sqxD+uy35B+V8wv5GrxhMDJP8l2QjLtH/UglSTIhLqyt8bUAqVfyfp # h4COMRvwwjTvChtCnUXXACuCXYHWalOoc0OU2oGN+mPJIJJxaNQc1sjBsMbGIWv3 # cmgSHkCEmrMv7yaidpePt6V+yPMik+eXw3IfZ5eNOiNgL1rZzgSJfTnvUqiaEQ0X # dG1HbkDv9fv6CTq6m4Ty3IzLiwGSXYxRIXTxT4TYs5VxHy2uFjFXWVSL0J2ARTYL # E4Oyl1wXDF1PX4bxg1yDMfKPHcE1Ijic5lx1KdK1SkaEJdto4hd++05J9Bf9TAmi # u6EK6C9Oe5vRadroJCK26uCUI4zIjL/qG7mswW+qT0CW0gnR9JHkXCWNbo8ccMk1 # sJatmRoSAifbgzaYbUz8+lv+IXy5GFuAmLnNbGjacB3IMGpa+lbFgih57/fIhamq # 5VhxgaEmn/UjWyr+cPiAFWuTVIpfsOjbEAww75wURNM1Imp9NJKye1O24EspEHmb # DmqCUcq7NqkOKIG4PVm3hDDED/WQpzJDkvu4FrIbvyTGVU01vKsg4UfcdiZ0fQ+/ # V0hf8yrtq9CkB8iIuk5bBxuPMIIHejCCBWKgAwIBAgIKYQ6Q0gAAAAAAAzANBgkq # hkiG9w0BAQsFADCBiDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24x # EDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlv # bjEyMDAGA1UEAxMpTWljcm9zb2Z0IFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5 # IDIwMTEwHhcNMTEwNzA4MjA1OTA5WhcNMjYwNzA4MjEwOTA5WjB+MQswCQYDVQQG # EwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwG # A1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSgwJgYDVQQDEx9NaWNyb3NvZnQg # Q29kZSBTaWduaW5nIFBDQSAyMDExMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC # CgKCAgEAq/D6chAcLq3YbqqCEE00uvK2WCGfQhsqa+laUKq4BjgaBEm6f8MMHt03 # a8YS2AvwOMKZBrDIOdUBFDFC04kNeWSHfpRgJGyvnkmc6Whe0t+bU7IKLMOv2akr # rnoJr9eWWcpgGgXpZnboMlImEi/nqwhQz7NEt13YxC4Ddato88tt8zpcoRb0Rrrg # OGSsbmQ1eKagYw8t00CT+OPeBw3VXHmlSSnnDb6gE3e+lD3v++MrWhAfTVYoonpy # 4BI6t0le2O3tQ5GD2Xuye4Yb2T6xjF3oiU+EGvKhL1nkkDstrjNYxbc+/jLTswM9 # sbKvkjh+0p2ALPVOVpEhNSXDOW5kf1O6nA+tGSOEy/S6A4aN91/w0FK/jJSHvMAh # dCVfGCi2zCcoOCWYOUo2z3yxkq4cI6epZuxhH2rhKEmdX4jiJV3TIUs+UsS1Vz8k # A/DRelsv1SPjcF0PUUZ3s/gA4bysAoJf28AVs70b1FVL5zmhD+kjSbwYuER8ReTB # w3J64HLnJN+/RpnF78IcV9uDjexNSTCnq47f7Fufr/zdsGbiwZeBe+3W7UvnSSmn # Eyimp31ngOaKYnhfsi+E11ecXL93KCjx7W3DKI8sj0A3T8HhhUSJxAlMxdSlQy90 # lfdu+HggWCwTXWCVmj5PM4TasIgX3p5O9JawvEagbJjS4NaIjAsCAwEAAaOCAe0w # ggHpMBAGCSsGAQQBgjcVAQQDAgEAMB0GA1UdDgQWBBRIbmTlUAXTgqoXNzcitW2o # ynUClTAZBgkrBgEEAYI3FAIEDB4KAFMAdQBiAEMAQTALBgNVHQ8EBAMCAYYwDwYD # VR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBRyLToCMZBDuRQFTuHqp8cx0SOJNDBa # BgNVHR8EUzBRME+gTaBLhklodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpL2Ny # bC9wcm9kdWN0cy9NaWNSb29DZXJBdXQyMDExXzIwMTFfMDNfMjIuY3JsMF4GCCsG # AQUFBwEBBFIwUDBOBggrBgEFBQcwAoZCaHR0cDovL3d3dy5taWNyb3NvZnQuY29t # L3BraS9jZXJ0cy9NaWNSb29DZXJBdXQyMDExXzIwMTFfMDNfMjIuY3J0MIGfBgNV # HSAEgZcwgZQwgZEGCSsGAQQBgjcuAzCBgzA/BggrBgEFBQcCARYzaHR0cDovL3d3 # dy5taWNyb3NvZnQuY29tL3BraW9wcy9kb2NzL3ByaW1hcnljcHMuaHRtMEAGCCsG # AQUFBwICMDQeMiAdAEwAZQBnAGEAbABfAHAAbwBsAGkAYwB5AF8AcwB0AGEAdABl # AG0AZQBuAHQALiAdMA0GCSqGSIb3DQEBCwUAA4ICAQBn8oalmOBUeRou09h0ZyKb # C5YR4WOSmUKWfdJ5DJDBZV8uLD74w3LRbYP+vj/oCso7v0epo/Np22O/IjWll11l # hJB9i0ZQVdgMknzSGksc8zxCi1LQsP1r4z4HLimb5j0bpdS1HXeUOeLpZMlEPXh6 # I/MTfaaQdION9MsmAkYqwooQu6SpBQyb7Wj6aC6VoCo/KmtYSWMfCWluWpiW5IP0 # wI/zRive/DvQvTXvbiWu5a8n7dDd8w6vmSiXmE0OPQvyCInWH8MyGOLwxS3OW560 # STkKxgrCxq2u5bLZ2xWIUUVYODJxJxp/sfQn+N4sOiBpmLJZiWhub6e3dMNABQam # ASooPoI/E01mC8CzTfXhj38cbxV9Rad25UAqZaPDXVJihsMdYzaXht/a8/jyFqGa # J+HNpZfQ7l1jQeNbB5yHPgZ3BtEGsXUfFL5hYbXw3MYbBL7fQccOKO7eZS/sl/ah # XJbYANahRr1Z85elCUtIEJmAH9AAKcWxm6U/RXceNcbSoqKfenoi+kiVH6v7RyOA # 9Z74v2u3S5fi63V4GuzqN5l5GEv/1rMjaHXmr/r8i+sLgOppO6/8MO0ETI7f33Vt # Y5E90Z1WTk+/gFcioXgRMiF670EKsT/7qMykXcGhiJtXcVZOSEXAQsmbdlsKgEhr # /Xmfwb1tbWrJUnMTDXpQzTGCGiMwghofAgEBMIGVMH4xCzAJBgNVBAYTAlVTMRMw # EQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVN # aWNyb3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01pY3Jvc29mdCBDb2RlIFNp # Z25pbmcgUENBIDIwMTECEzMAAAQEbHQG/1crJ3IAAAAABAQwDQYJYIZIAWUDBAIB # BQCgga4wGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwHAYKKwYBBAGCNwIBCzEO # MAwGCisGAQQBgjcCARUwLwYJKoZIhvcNAQkEMSIEINtsHHDyEXkplQvt5Z9KcGeB # 3NoeJikyZR2uUYbo9TiRMEIGCisGAQQBgjcCAQwxNDAyoBSAEgBNAGkAYwByAG8A # cwBvAGYAdKEagBhodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20wDQYJKoZIhvcNAQEB # BQAEggEASQJeJdVum+GEn1ZZsykHnRyg20o6c92fH0fzoWRySsrdV6OLAQiWalzA # RLoFTfc0SCpQFjROe21SpfOykbURYpyEF4i8IkY5EyvkO7G9mMUAtehzL5bl33XH # 87yXn3sdlAV3xQ0p7d7iKuPnO3KfgyeUeje88pWkrbN3LH4HG5kMSyEiVrx8svPV # OVAk7StcwPZb+N5QpH7TJaDYMxNFrUaNKTYDlzGzKyInIk9Z8IRaYWO7pXrI4DG7 # o7YI8JJX8xwxmeS90XwFTmD8KcWbsnd9Zx3zkL6a0ikwxlayF1y/u/R+l3i90E4I # mBAi/TAond4VaI7PdG8zkoVetkb0ZqGCF60wghepBgorBgEEAYI3AwMBMYIXmTCC # F5UGCSqGSIb3DQEHAqCCF4YwgheCAgEDMQ8wDQYJYIZIAWUDBAIBBQAwggFaBgsq # hkiG9w0BCRABBKCCAUkEggFFMIIBQQIBAQYKKwYBBAGEWQoDATAxMA0GCWCGSAFl # AwQCAQUABCCmuOjZfR+SVag8P04Uw/K8Xnk8WPQaO99IBNZpV88HSQIGZ2L4pPBD # GBMyMDI0MTIyMDIyMjcyNS4xMTRaMASAAgH0oIHZpIHWMIHTMQswCQYDVQQGEwJV # UzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UE # ChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMS0wKwYDVQQLEyRNaWNyb3NvZnQgSXJl # bGFuZCBPcGVyYXRpb25zIExpbWl0ZWQxJzAlBgNVBAsTHm5TaGllbGQgVFNTIEVT # Tjo1NTFBLTA1RTAtRDk0NzElMCMGA1UEAxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAg # U2VydmljZaCCEfswggcoMIIFEKADAgECAhMzAAACAdFFWZgQzEJPAAEAAAIBMA0G # CSqGSIb3DQEBCwUAMHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9u # MRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRp # b24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwMB4XDTI0 # MDcyNTE4MzEyMloXDTI1MTAyMjE4MzEyMlowgdMxCzAJBgNVBAYTAlVTMRMwEQYD # VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy # b3NvZnQgQ29ycG9yYXRpb24xLTArBgNVBAsTJE1pY3Jvc29mdCBJcmVsYW5kIE9w # ZXJhdGlvbnMgTGltaXRlZDEnMCUGA1UECxMeblNoaWVsZCBUU1MgRVNOOjU1MUEt # MDVFMC1EOTQ3MSUwIwYDVQQDExxNaWNyb3NvZnQgVGltZS1TdGFtcCBTZXJ2aWNl # MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtWrf+HzDu7sk50y5YHhe # CIJG0uxRSFFcHNek+Td9ZmyJj20EEjaU8JDJu5pWc4pPAsBI38NEAJ1b+KBnlStq # U8uvXF4qnEShDdi8nPsZZQsTZDKWAgUM2iZTOiWIuZcFs5ZC8/+GlrVLM5h1Y9nf # Mh5B4DnUQOXMremAT9MkvUhg3uaYgmqLlmYyODmba4lXZBu104SLAFsXOfl/TLhp # ToT46y7lI9sbI9uq3/Aerh3aPi2knHvEEazilXeooXNLCwdu+Is6o8kQLouUn3Kw # UQm0b7aUtsv1X/OgPmsOJi6yN3LYWyHISvrNuIrJ4iYNgHdBBumQYK8LjZmQaTKF # acxhmXJ0q2gzaIfxF2yIwM+V9sQqkHkg/Q+iSDNpMr6mr/OwknOEIjI0g6ZMOymi # vpChzDNoPz9hkK3gVHZKW7NV8+UBXN4G0aBX69fKUbxBBLyk2cC+PhOoUjkl6UC8 # /c0huqj5xX8m+YVIk81e7t6I+V/E4yXReeZgr0FhYqNpvTjGcaO2WrkP5XmsYS7I # vMPIf4DCyIJUZaqoBMToAJJHGRe+DPqCHg6bmGPm97MrOWv16/Co6S9cQDkXp9vM # SSRQWXy4KtJhZfmuDz2vr1jw4NeixwuIDGw1mtV/TdSI+vpLJfUiLl/b9w/tJB92 # BALQT8e1YH8NphdOo1xCwkcCAwEAAaOCAUkwggFFMB0GA1UdDgQWBBSwcq9blqLo # PPiVrym9mFmFWbyyUjAfBgNVHSMEGDAWgBSfpxVdAF5iXYP05dJlpxtTNRnpcjBf # BgNVHR8EWDBWMFSgUqBQhk5odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3Bz # L2NybC9NaWNyb3NvZnQlMjBUaW1lLVN0YW1wJTIwUENBJTIwMjAxMCgxKS5jcmww # bAYIKwYBBQUHAQEEYDBeMFwGCCsGAQUFBzAChlBodHRwOi8vd3d3Lm1pY3Jvc29m # dC5jb20vcGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRpbWUtU3RhbXAlMjBQQ0El # MjAyMDEwKDEpLmNydDAMBgNVHRMBAf8EAjAAMBYGA1UdJQEB/wQMMAoGCCsGAQUF # BwMIMA4GA1UdDwEB/wQEAwIHgDANBgkqhkiG9w0BAQsFAAOCAgEAOjQAyz0cVztT # FGqXX5JLRxFK/O/oMe55uDqEC8Vd1gbcM28KBUPgvUIPXm/vdDN2IVBkWHmwCp4A # Icy4dZtkuUmd0fnu6aT9Mvo1ndsLp2YJcMoFLEt3TtriLaO+i4Grv0ZULtWXUPAW # /Mn5Scjgn0xZduGPBD/Xs3J7+get9+8ZvBipsg/N7poimYOVsHxLcem7V5XdMNsy # tTm/uComhM/wgR5KlDYTVNAXBxcSKMeJaiD3V1+HhNkVliMl5VOP+nw5xWF55u9h # 6eF2G7eBPqT+qSFQ+rQCQdIrN0yG1QN9PJroguK+FJQJdQzdfD3RWVsciBygbYaZ # lT1cGJI1IyQ74DQ0UBdTpfeGsyrEQ9PI8QyqVLqb2q7LtI6DJMNphYu+jr//0spr # 1UVvyDPtuRnbGQRNi1COwJcj9OYmlkFgKNeCfbDT7U3uEOvWomekX60Y/m5utRcU # PVeAPdhkB+DxDaev3J1ywDNdyu911nAVPgRkyKgMK3USLG37EdlatDk8FyuCrx4t # iHyqHO3wE6xPw32Q8e/vmuQPoBZuX3qUeoFIsyZEenHq2ScMunhcqW32SUVAi5oZ # 4Z3nf7dAgNau21NEPwgW+2wkrNqDg7Hp8yHyoOKbgEBu6REQbvSfZ5Kh4PV+S2gx # f2uq6GoYDnlqABOMYwz309ISi0bPMh8wggdxMIIFWaADAgECAhMzAAAAFcXna54C # m0mZAAAAAAAVMA0GCSqGSIb3DQEBCwUAMIGIMQswCQYDVQQGEwJVUzETMBEGA1UE # CBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9z # b2Z0IENvcnBvcmF0aW9uMTIwMAYDVQQDEylNaWNyb3NvZnQgUm9vdCBDZXJ0aWZp # Y2F0ZSBBdXRob3JpdHkgMjAxMDAeFw0yMTA5MzAxODIyMjVaFw0zMDA5MzAxODMy # MjVaMHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQH # EwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJjAkBgNV # BAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwMIICIjANBgkqhkiG9w0B # AQEFAAOCAg8AMIICCgKCAgEA5OGmTOe0ciELeaLL1yR5vQ7VgtP97pwHB9KpbE51 # yMo1V/YBf2xK4OK9uT4XYDP/XE/HZveVU3Fa4n5KWv64NmeFRiMMtY0Tz3cywBAY # 6GB9alKDRLemjkZrBxTzxXb1hlDcwUTIcVxRMTegCjhuje3XD9gmU3w5YQJ6xKr9 # cmmvHaus9ja+NSZk2pg7uhp7M62AW36MEBydUv626GIl3GoPz130/o5Tz9bshVZN # 7928jaTjkY+yOSxRnOlwaQ3KNi1wjjHINSi947SHJMPgyY9+tVSP3PoFVZhtaDua # Rr3tpK56KTesy+uDRedGbsoy1cCGMFxPLOJiss254o2I5JasAUq7vnGpF1tnYN74 # kpEeHT39IM9zfUGaRnXNxF803RKJ1v2lIH1+/NmeRd+2ci/bfV+AutuqfjbsNkz2 # K26oElHovwUDo9Fzpk03dJQcNIIP8BDyt0cY7afomXw/TNuvXsLz1dhzPUNOwTM5 # TI4CvEJoLhDqhFFG4tG9ahhaYQFzymeiXtcodgLiMxhy16cg8ML6EgrXY28MyTZk # i1ugpoMhXV8wdJGUlNi5UPkLiWHzNgY1GIRH29wb0f2y1BzFa/ZcUlFdEtsluq9Q # BXpsxREdcu+N+VLEhReTwDwV2xo3xwgVGD94q0W29R6HXtqPnhZyacaue7e3Pmri # Lq0CAwEAAaOCAd0wggHZMBIGCSsGAQQBgjcVAQQFAgMBAAEwIwYJKwYBBAGCNxUC # BBYEFCqnUv5kxJq+gpE8RjUpzxD/LwTuMB0GA1UdDgQWBBSfpxVdAF5iXYP05dJl # pxtTNRnpcjBcBgNVHSAEVTBTMFEGDCsGAQQBgjdMg30BATBBMD8GCCsGAQUFBwIB # FjNodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL0RvY3MvUmVwb3NpdG9y # eS5odG0wEwYDVR0lBAwwCgYIKwYBBQUHAwgwGQYJKwYBBAGCNxQCBAweCgBTAHUA # YgBDAEEwCwYDVR0PBAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAU # 1fZWy4/oolxiaNE9lJBb186aGMQwVgYDVR0fBE8wTTBLoEmgR4ZFaHR0cDovL2Ny # bC5taWNyb3NvZnQuY29tL3BraS9jcmwvcHJvZHVjdHMvTWljUm9vQ2VyQXV0XzIw # MTAtMDYtMjMuY3JsMFoGCCsGAQUFBwEBBE4wTDBKBggrBgEFBQcwAoY+aHR0cDov # L3d3dy5taWNyb3NvZnQuY29tL3BraS9jZXJ0cy9NaWNSb29DZXJBdXRfMjAxMC0w # Ni0yMy5jcnQwDQYJKoZIhvcNAQELBQADggIBAJ1VffwqreEsH2cBMSRb4Z5yS/yp # b+pcFLY+TkdkeLEGk5c9MTO1OdfCcTY/2mRsfNB1OW27DzHkwo/7bNGhlBgi7ulm # ZzpTTd2YurYeeNg2LpypglYAA7AFvonoaeC6Ce5732pvvinLbtg/SHUB2RjebYIM # 9W0jVOR4U3UkV7ndn/OOPcbzaN9l9qRWqveVtihVJ9AkvUCgvxm2EhIRXT0n4ECW # OKz3+SmJw7wXsFSFQrP8DJ6LGYnn8AtqgcKBGUIZUnWKNsIdw2FzLixre24/LAl4 # FOmRsqlb30mjdAy87JGA0j3mSj5mO0+7hvoyGtmW9I/2kQH2zsZ0/fZMcm8Qq3Uw # xTSwethQ/gpY3UA8x1RtnWN0SCyxTkctwRQEcb9k+SS+c23Kjgm9swFXSVRk2XPX # fx5bRAGOWhmRaw2fpCjcZxkoJLo4S5pu+yFUa2pFEUep8beuyOiJXk+d0tBMdrVX # VAmxaQFEfnyhYWxz/gq77EFmPWn9y8FBSX5+k77L+DvktxW/tM4+pTFRhLy/AsGC # onsXHRWJjXD+57XQKBqJC4822rpM+Zv/Cuk0+CQ1ZyvgDbjmjJnW4SLq8CdCPSWU # 5nR0W2rRnj7tfqAxM328y+l7vzhwRNGQ8cirOoo6CGJ/2XBjU02N7oJtpQUQwXEG # ahC0HVUzWLOhcGbyoYIDVjCCAj4CAQEwggEBoYHZpIHWMIHTMQswCQYDVQQGEwJV # UzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UE # ChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMS0wKwYDVQQLEyRNaWNyb3NvZnQgSXJl # bGFuZCBPcGVyYXRpb25zIExpbWl0ZWQxJzAlBgNVBAsTHm5TaGllbGQgVFNTIEVT # Tjo1NTFBLTA1RTAtRDk0NzElMCMGA1UEAxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAg # U2VydmljZaIjCgEBMAcGBSsOAwIaAxUA1+26cR/yH100DiNFGWhuAv2rYBqggYMw # gYCkfjB8MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UE # BxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYD # VQQDEx1NaWNyb3NvZnQgVGltZS1TdGFtcCBQQ0EgMjAxMDANBgkqhkiG9w0BAQsF # AAIFAOsQGgEwIhgPMjAyNDEyMjAxNjI5NTNaGA8yMDI0MTIyMTE2Mjk1M1owdDA6 # BgorBgEEAYRZCgQBMSwwKjAKAgUA6xAaAQIBADAHAgEAAgIkWzAHAgEAAgITuzAK # AgUA6xFrgQIBADA2BgorBgEEAYRZCgQCMSgwJjAMBgorBgEEAYRZCgMCoAowCAIB # AAIDB6EgoQowCAIBAAIDAYagMA0GCSqGSIb3DQEBCwUAA4IBAQCv5MU7s5EPcRN4 # nItnXBWo86ZJx7lD9sc0/2xpCLdN9pkUEK6mcsW21Wt6fq/1gM9M26CNanlaQSuZ # RNf1Ra+jaY7hiT43OR26k5LHCj71aYqI8/63OpFX1uAYY6sCB+EUMS5C6kMTw7mf # eOL6UUuUN6qWZIT3wL84BcBHY2m1kHsBoUSBJyg4Uw4DMw/Tvh8AUVh+/2fbD5QO # RF04SkgwoVdf5jDCRu8khbxHSkFvv4dUUkBXnq65qSu3fHQSJ46/7hNZlE5iYSTm # jiXjcFpU/DwG4J9ySp50Fboqr8BO3hMSf7rahCGIXn+OU8KWILzpAPsyEn0pv0Lc # PKEoMf7WMYIEDTCCBAkCAQEwgZMwfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldh # c2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBD # b3Jwb3JhdGlvbjEmMCQGA1UEAxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIw # MTACEzMAAAIB0UVZmBDMQk8AAQAAAgEwDQYJYIZIAWUDBAIBBQCgggFKMBoGCSqG # SIb3DQEJAzENBgsqhkiG9w0BCRABBDAvBgkqhkiG9w0BCQQxIgQgWx4nAN6Yf+RL # 6iHjfMMwoXBDJWRnTceZdh6udkRPIaUwgfoGCyqGSIb3DQEJEAIvMYHqMIHnMIHk # MIG9BCBYa7I6TJQRcmx0HaSTWZdJgowdrl9+Zrr0pIdqHtc4IzCBmDCBgKR+MHwx # CzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRt # b25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1p # Y3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwAhMzAAACAdFFWZgQzEJPAAEAAAIB # MCIEIO0aV9omEXd0B8aVFuggjiw1MySaZ6NdPZlIZqlECzmHMA0GCSqGSIb3DQEB # CwUABIICAAb1b880kZZn4I5TTv2q/XbnDBZehV+qNDcCt7PJYpQqDdPkuMOR9Pdp # NrYOqLPNZavMRvCkoRsjcbopl9QBPtUjA5M17nWkmo2WmB5tcVy4Fx5HgwFf5zC/ # sWTP7mJadJHl4xmr2I1rnUma+Iju/ceL9uNMjXVBOzh9F16DaNU+PfiSaKHbF71N # +cggfxOvx1Z5q5McISgTBCpOkJonBCMlU827eh1UH3W//RtTSUvyRSWI1B4saRQY # +u47V6BtMlmv8M8UDQwIN9+hsNq5HdpbTC0nRzAF3vOWe0h66+IYZoeu133zvbIO # 9sGagJXWgPD9T9k7XEHcBsaL0VCE3QYMMDB89AwU9FtrMl01DYXfep8w567YLjN3 # yzlGP/6A6/PJA7x0VzKOnvZUuWlzyA/14v/yGsQ4isyuAeT7iQleEM0wfDLFGP4f # NXKapCfZFTWRkyfsFUhXSBEhFARu0cBMHVIHHl5nDD4FJnL5RtkfnMnjnuGQmwN0 # V1LqNVl3GhtYjLAa8raHy2kXNAPMJBhEqJkSrHOOAZ1kYXHLohltXPVGwJhxhadU # wttLnfPLZ7i80fqP5f75iMc7NFNYH2NKVzuI4eFrrdmxD6Gdt1v3m1U76bm9u+30 # ENIMjtVmX1QA8grdPP04zFD3yPTqZVZHegzYDlO2+SjWozv2lxjP # SIG # End signature block |