PackageProviderFunctions.psm1
### # ==++== # # Copyright (c) Microsoft Corporation. All rights reserved. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # ### <# Overrides the default Write-Debug so that the output gets routed back thru the $request.Debug() function #> function Write-Debug { param( [Parameter(Mandatory=$true)][string] $message, [parameter(ValueFromRemainingArguments=$true)] [object[]] $args= @() ) if( -not $request ) { if( -not $args ) { Microsoft.PowerShell.Utility\write-verbose $message return } $msg = [system.string]::format($message, $args) Microsoft.PowerShell.Utility\write-verbose $msg return } if( -not $args ) { $null = $request.Debug($message); return } $null = $request.Debug($message,$args); } function Write-Error { param( [Parameter(Mandatory=$true)][string] $Message, [Parameter()][string] $Category, [Parameter()][string] $ErrorId, [Parameter()][string] $TargetObject ) $null = $request.Warning($Message); } <# Overrides the default Write-Verbose so that the output gets routed back thru the $request.Verbose() function #> function Write-Progress { param( [CmdletBinding()] [Parameter(Position=0)] [string] $Activity, # This parameter is not supported by request object [Parameter(Position=1)] [ValidateNotNullOrEmpty()] [string] $Status, [Parameter(Position=2)] [ValidateRange(0,[int]::MaxValue)] [int] $Id, [Parameter()] [int] $PercentComplete=-1, # This parameter is not supported by request object [Parameter()] [int] $SecondsRemaining=-1, # This parameter is not supported by request object [Parameter()] [string] $CurrentOperation, [Parameter()] [ValidateRange(-1,[int]::MaxValue)] [int] $ParentID=-1, [Parameter()] [switch] $Completed, # This parameter is not supported by request object [Parameter()] [int] $SourceID, [object[]] $args= @() ) $params = @{} if ($PSBoundParameters.ContainsKey("Activity")) { $params.Add("Activity", $PSBoundParameters["Activity"]) } if ($PSBoundParameters.ContainsKey("Status")) { $params.Add("Status", $PSBoundParameters["Status"]) } if ($PSBoundParameters.ContainsKey("PercentComplete")) { $params.Add("PercentComplete", $PSBoundParameters["PercentComplete"]) } if ($PSBoundParameters.ContainsKey("Id")) { $params.Add("Id", $PSBoundParameters["Id"]) } if ($PSBoundParameters.ContainsKey("ParentID")) { $params.Add("ParentID", $PSBoundParameters["ParentID"]) } if ($PSBoundParameters.ContainsKey("Completed")) { $params.Add("Completed", $PSBoundParameters["Completed"]) } if( -not $request ) { if( -not $args ) { Microsoft.PowerShell.Utility\Write-Progress @params return } $params["Activity"] = [system.string]::format($Activity, $args) Microsoft.PowerShell.Utility\Write-Progress @params return } if( -not $args ) { $request.Progress($Activity, $Status, $Id, $PercentComplete, $SecondsRemaining, $CurrentOperation, $ParentID, $Completed) } } function Write-Verbose{ param( [Parameter(Mandatory=$true)][string] $message, [parameter(ValueFromRemainingArguments=$true)] [object[]] $args= @() ) if( -not $request ) { if( -not $args ) { Microsoft.PowerShell.Utility\write-verbose $message return } $msg = [system.string]::format($message, $args) Microsoft.PowerShell.Utility\write-verbose $msg return } if( -not $args ) { $null = $request.Verbose($message); return } $null = $request.Verbose($message,$args); } <# Overrides the default Write-Warning so that the output gets routed back thru the $request.Warning() function #> function Write-Warning{ param( [Parameter(Mandatory=$true)][string] $message, [parameter(ValueFromRemainingArguments=$true)] [object[]] $args= @() ) if( -not $request ) { if( -not $args ) { Microsoft.PowerShell.Utility\write-warning $message return } $msg = [system.string]::format($message, $args) Microsoft.PowerShell.Utility\write-warning $msg return } if( -not $args ) { $null = $request.Warning($message); return } $null = $request.Warning($message,$args); } <# Creates a new instance of a PackageSource object #> function New-PackageSource { param( [Parameter(Mandatory=$true)][string] $name, [Parameter(Mandatory=$true)][string] $location, [Parameter(Mandatory=$true)][bool] $trusted, [Parameter(Mandatory=$true)][bool] $registered, [bool] $valid = $false, [System.Collections.Hashtable] $details = $null ) return New-Object -TypeName Microsoft.PackageManagement.MetaProvider.PowerShell.PackageSource -ArgumentList $name,$location,$trusted,$registered,$valid,$details } <# Creates a new instance of a SoftwareIdentity object #> function New-SoftwareIdentity { param( [Parameter(Mandatory=$true)][string] $fastPackageReference, [Parameter(Mandatory=$true)][string] $name, [Parameter(Mandatory=$true)][string] $version, [Parameter(Mandatory=$true)][string] $versionScheme, [Parameter(Mandatory=$true)][string] $source, [string] $summary, [string] $searchKey = $null, [string] $fullPath = $null, [string] $filename = $null, [System.Collections.Hashtable] $details = $null, [System.Collections.ArrayList] $entities = $null, [System.Collections.ArrayList] $links = $null, [bool] $fromTrustedSource = $false, [System.Collections.ArrayList] $dependencies = $null, [string] $tagId = $null, [string] $culture = $null, [string] $destination = $null ) return New-Object -TypeName Microsoft.PackageManagement.MetaProvider.PowerShell.SoftwareIdentity -ArgumentList $fastPackageReference, $name, $version, $versionScheme, $source, $summary, $searchKey, $fullPath, $filename , $details , $entities, $links, $fromTrustedSource, $dependencies, $tagId, $culture, $destination } <# Creates a new instance of a SoftwareIdentity object based on an xml string #> function New-SoftwareIdentityFromXml { param( [Parameter(Mandatory=$true)][string] $xmlSwidtag, [bool] $commitImmediately = $false ) return New-Object -TypeName Microsoft.PackageManagement.MetaProvider.PowerShell.SoftwareIdentity -ArgumentList $xmlSwidtag, $commitImmediately } <# Creates a new instance of a DyamicOption object #> function New-DynamicOption { param( [Parameter(Mandatory=$true)][Microsoft.PackageManagement.MetaProvider.PowerShell.OptionCategory] $category, [Parameter(Mandatory=$true)][string] $name, [Parameter(Mandatory=$true)][Microsoft.PackageManagement.MetaProvider.PowerShell.OptionType] $expectedType, [Parameter(Mandatory=$true)][bool] $isRequired, [System.Collections.ArrayList] $permittedValues = $null ) if( -not $permittedValues ) { return New-Object -TypeName Microsoft.PackageManagement.MetaProvider.PowerShell.DynamicOption -ArgumentList $category,$name, $expectedType, $isRequired } return New-Object -TypeName Microsoft.PackageManagement.MetaProvider.PowerShell.DynamicOption -ArgumentList $category,$name, $expectedType, $isRequired, $permittedValues.ToArray() } <# Creates a new instance of a Feature object #> function New-Feature { param( [Parameter(Mandatory=$true)][string] $name, [System.Collections.ArrayList] $values = $null ) if( -not $values ) { return New-Object -TypeName Microsoft.PackageManagement.MetaProvider.PowerShell.Feature -ArgumentList $name } return New-Object -TypeName Microsoft.PackageManagement.MetaProvider.PowerShell.Feature -ArgumentList $name, $values.ToArray() } <# Duplicates the $request object and overrides the client-supplied data with the specified values. #> function New-Request { param( [System.Collections.Hashtable] $options = $null, [System.Collections.ArrayList] $sources = $null, [PSCredential] $credential = $null ) return $request.CloneRequest( $options, $sources, $credential ) } function New-Entity { param( [Parameter(Mandatory=$true)][string] $name, [Parameter(Mandatory=$true,ParameterSetName="role")][string] $role, [Parameter(Mandatory=$true,ParameterSetName="roles")][System.Collections.ArrayList]$roles, [string] $regId = $null, [string] $thumbprint= $null ) $o = New-Object -TypeName Microsoft.PackageManagement.MetaProvider.PowerShell.Entity $o.Name = $name # support role as a NMTOKENS string or an array of strings if( $role ) { $o.Role = $role } if( $roles ) { $o.Roles = $roles } $o.regId = $regId $o.thumbprint = $thumbprint return $o } function New-Link { param( [Parameter(Mandatory=$true)][string] $HRef, [Parameter(Mandatory=$true)][string] $relationship, [string] $mediaType = $null, [string] $ownership = $null, [string] $use= $null, [string] $appliesToMedia= $null, [string] $artifact = $null ) $o = New-Object -TypeName Microsoft.PackageManagement.MetaProvider.PowerShell.Link $o.HRef = $HRef $o.Relationship =$relationship $o.MediaType =$mediaType $o.Ownership =$ownership $o.Use = $use $o.AppliesToMedia = $appliesToMedia $o.Artifact = $artifact return $o } function New-Dependency { param( [Parameter(Mandatory=$true)][string] $providerName, [Parameter(Mandatory=$true)][string] $packageName, [string] $version= $null, [string] $source = $null, [string] $appliesTo = $null ) $o = New-Object -TypeName Microsoft.PackageManagement.MetaProvider.PowerShell.Dependency $o.ProviderName = $providerName $o.PackageName =$packageName $o.Version =$version $o.Source =$source $o.AppliesTo = $appliesTo return $o } # SIG # Begin signature block # MIIasAYJKoZIhvcNAQcCoIIaoTCCGp0CAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB # gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR # AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQUjKO234+wyrCEMWnBFRlvbf4O # UcSgghWDMIIEwzCCA6ugAwIBAgITMwAAALbYAJUMg2JtoQAAAAAAtjANBgkqhkiG # 9w0BAQUFADB3MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4G # A1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSEw # HwYDVQQDExhNaWNyb3NvZnQgVGltZS1TdGFtcCBQQ0EwHhcNMTYwOTA3MTc1ODQ0 # WhcNMTgwOTA3MTc1ODQ0WjCBszELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hp # bmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jw # b3JhdGlvbjENMAsGA1UECxMETU9QUjEnMCUGA1UECxMebkNpcGhlciBEU0UgRVNO # OjMxQzUtMzBCQS03QzkxMSUwIwYDVQQDExxNaWNyb3NvZnQgVGltZS1TdGFtcCBT # ZXJ2aWNlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAlitSnGveWTDN # e1jrQZjYpA9N4OXmCTtz/jy98iVz0ro/f2ELzjwkrzQycPykmlVlOxzzzaSIBmqK # HiWJXU9m6mU0WS8/O8GV2U8d9PA057wJ/6+3ptVocqSANSNpXip5qKRl5P1Wac0Z # 5oJ1NOXPnu1J4slB7ssE2ifDwS+0kHkTU3FdKeh8dAoC7GoQU0aFQdPFikvh7YRa # gwPzzPVs96zCJdIY4gPGqdi8ajX3xrJI4th7QdO98fpj8f1CBJtlELMDiaMwUu0e # 2VLTFE1sl1cyer4afcTuf+ENNRyiH+LJ5nHRK3/zkTYpjv8G/tfp3swk2ha9tsPP # ddCge17XYQIDAQABo4IBCTCCAQUwHQYDVR0OBBYEFOjzQTSj/oQgLDnBEUwqsxz4 # 7wKyMB8GA1UdIwQYMBaAFCM0+NlSRnAK7UD7dvuzK7DDNbMPMFQGA1UdHwRNMEsw # SaBHoEWGQ2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9wa2kvY3JsL3Byb2R1Y3Rz # L01pY3Jvc29mdFRpbWVTdGFtcFBDQS5jcmwwWAYIKwYBBQUHAQEETDBKMEgGCCsG # AQUFBzAChjxodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpL2NlcnRzL01pY3Jv # c29mdFRpbWVTdGFtcFBDQS5jcnQwEwYDVR0lBAwwCgYIKwYBBQUHAwgwDQYJKoZI # hvcNAQEFBQADggEBAGotNN2Ff2yTVo4VKnHCmG+PxMuqhs1ke1JE5bQu3bGRgIWX # riEZvWVqgDUihF4GmcPRHatBE9qtM5ewhDuSIGBf/5rqskW00Q4Kgb7mDtx/sOV7 # wNXJ0HjFgyNRqVDVxVE6uZ8bCTi+TjhfuIBZj85UbdfG/qtPkQkzgmaK83dgLPEH # T8Je8gd7orVPNkI3lqkQbQ8X4ZISiP+heRsPYtlgeMGvnle5ssGzB2O5Ozt527Fa # Ztpxi32uN1Qk8hV7xM+Z4ujOGqJFxVQfCGlMU0tXTvaRNoNpKWSp2fjYHyasLXAU # y7ZhZHq7qWAilzmqCFYZIDPJmjUtm1/hqhqqqxQwggTtMIID1aADAgECAhMzAAAB # QJap7nBW/swHAAEAAAFAMA0GCSqGSIb3DQEBBQUAMHkxCzAJBgNVBAYTAlVTMRMw # EQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVN # aWNyb3NvZnQgQ29ycG9yYXRpb24xIzAhBgNVBAMTGk1pY3Jvc29mdCBDb2RlIFNp # Z25pbmcgUENBMB4XDTE2MDgxODIwMTcxN1oXDTE3MTEwMjIwMTcxN1owgYMxCzAJ # BgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25k # MR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xDTALBgNVBAsTBE1PUFIx # HjAcBgNVBAMTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjCCASIwDQYJKoZIhvcNAQEB # BQADggEPADCCAQoCggEBANtLi+kDal/IG10KBTnk1Q6S0MThi+ikDQUZWMA81ynd # ibdobkuffryavVSGOanxODUW5h2s+65r3Akw77ge32z4SppVl0jII4mzWSc0vZUx # R5wPzkA1Mjf+6fNPpBqks3m8gJs/JJjE0W/Vf+dDjeTc8tLmrmbtBDohlKZX3APb # LMYb/ys5qF2/Vf7dSd9UBZSrM9+kfTGmTb1WzxYxaD+Eaxxt8+7VMIruZRuetwgc # KX6TvfJ9QnY4ItR7fPS4uXGew5T0goY1gqZ0vQIz+lSGhaMlvqqJXuI5XyZBmBre # ueZGhXi7UTICR+zk+R+9BFF15hKbduuFlxQiCqET92ECAwEAAaOCAWEwggFdMBMG # A1UdJQQMMAoGCCsGAQUFBwMDMB0GA1UdDgQWBBSc5ehtgleuNyTe6l6pxF+QHc7Z # ezBSBgNVHREESzBJpEcwRTENMAsGA1UECxMETU9QUjE0MDIGA1UEBRMrMjI5ODAz # K2Y3ODViMWMwLTVkOWYtNDMxNi04ZDZhLTc0YWU2NDJkZGUxYzAfBgNVHSMEGDAW # gBTLEejK0rQWWAHJNy4zFha5TJoKHzBWBgNVHR8ETzBNMEugSaBHhkVodHRwOi8v # Y3JsLm1pY3Jvc29mdC5jb20vcGtpL2NybC9wcm9kdWN0cy9NaWNDb2RTaWdQQ0Ff # MDgtMzEtMjAxMC5jcmwwWgYIKwYBBQUHAQEETjBMMEoGCCsGAQUFBzAChj5odHRw # Oi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpL2NlcnRzL01pY0NvZFNpZ1BDQV8wOC0z # MS0yMDEwLmNydDANBgkqhkiG9w0BAQUFAAOCAQEAa+RW49cTHSBA+W3p3k7bXR7G # bCaj9+UJgAz/V+G01Nn5XEjhBn/CpFS4lnr1jcmDEwxxv/j8uy7MFXPzAGtOJar0 # xApylFKfd00pkygIMRbZ3250q8ToThWxmQVEThpJSSysee6/hU+EbkfvvtjSi0lp # DimD9aW9oxshraKlPpAgnPWfEj16WXVk79qjhYQyEgICamR3AaY5mLPuoihJbKwk # Mig+qItmLPsC2IMvI5KR91dl/6TV6VEIlPbW/cDVwCBF/UNJT3nuZBl/YE7ixMpT # Th/7WpENW80kg3xz6MlCdxJfMSbJsM5TimFU98KNcpnxxbYdfqqQhAQ6l3mtYDCC # BbwwggOkoAMCAQICCmEzJhoAAAAAADEwDQYJKoZIhvcNAQEFBQAwXzETMBEGCgmS # JomT8ixkARkWA2NvbTEZMBcGCgmSJomT8ixkARkWCW1pY3Jvc29mdDEtMCsGA1UE # AxMkTWljcm9zb2Z0IFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MB4XDTEwMDgz # MTIyMTkzMloXDTIwMDgzMTIyMjkzMloweTELMAkGA1UEBhMCVVMxEzARBgNVBAgT # Cldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29m # dCBDb3Jwb3JhdGlvbjEjMCEGA1UEAxMaTWljcm9zb2Z0IENvZGUgU2lnbmluZyBQ # Q0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCycllcGTBkvx2aYCAg # Qpl2U2w+G9ZvzMvx6mv+lxYQ4N86dIMaty+gMuz/3sJCTiPVcgDbNVcKicquIEn0 # 8GisTUuNpb15S3GbRwfa/SXfnXWIz6pzRH/XgdvzvfI2pMlcRdyvrT3gKGiXGqel # cnNW8ReU5P01lHKg1nZfHndFg4U4FtBzWwW6Z1KNpbJpL9oZC/6SdCnidi9U3RQw # WfjSjWL9y8lfRjFQuScT5EAwz3IpECgixzdOPaAyPZDNoTgGhVxOVoIoKgUyt0vX # T2Pn0i1i8UU956wIAPZGoZ7RW4wmU+h6qkryRs83PDietHdcpReejcsRj1Y8wawJ # XwPTAgMBAAGjggFeMIIBWjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTLEejK # 0rQWWAHJNy4zFha5TJoKHzALBgNVHQ8EBAMCAYYwEgYJKwYBBAGCNxUBBAUCAwEA # ATAjBgkrBgEEAYI3FQIEFgQU/dExTtMmipXhmGA7qDFvpjy82C0wGQYJKwYBBAGC # NxQCBAweCgBTAHUAYgBDAEEwHwYDVR0jBBgwFoAUDqyCYEBWJ5flJRP8KuEKU5VZ # 5KQwUAYDVR0fBEkwRzBFoEOgQYY/aHR0cDovL2NybC5taWNyb3NvZnQuY29tL3Br # aS9jcmwvcHJvZHVjdHMvbWljcm9zb2Z0cm9vdGNlcnQuY3JsMFQGCCsGAQUFBwEB # BEgwRjBEBggrBgEFBQcwAoY4aHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraS9j # ZXJ0cy9NaWNyb3NvZnRSb290Q2VydC5jcnQwDQYJKoZIhvcNAQEFBQADggIBAFk5 # Pn8mRq/rb0CxMrVq6w4vbqhJ9+tfde1MOy3XQ60L/svpLTGjI8x8UJiAIV2sPS9M # uqKoVpzjcLu4tPh5tUly9z7qQX/K4QwXaculnCAt+gtQxFbNLeNK0rxw56gNogOl # VuC4iktX8pVCnPHz7+7jhh80PLhWmvBTI4UqpIIck+KUBx3y4k74jKHK6BOlkU7I # G9KPcpUqcW2bGvgc8FPWZ8wi/1wdzaKMvSeyeWNWRKJRzfnpo1hW3ZsCRUQvX/Ta # rtSCMm78pJUT5Otp56miLL7IKxAOZY6Z2/Wi+hImCWU4lPF6H0q70eFW6NB4lhhc # yTUWX92THUmOLb6tNEQc7hAVGgBd3TVbIc6YxwnuhQ6MT20OE049fClInHLR82zK # wexwo1eSV32UjaAbSANa98+jZwp0pTbtLS8XyOZyNxL0b7E8Z4L5UrKNMxZlHg6K # 3RDeZPRvzkbU0xfpecQEtNP7LN8fip6sCvsTJ0Ct5PnhqX9GuwdgR2VgQE6wQuxO # 7bN2edgKNAltHIAxH+IOVN3lofvlRxCtZJj/UBYufL8FIXrilUEnacOTj5XJjdib # Ia4NXJzwoq6GaIMMai27dmsAHZat8hZ79haDJLmIz2qoRzEvmtzjcT3XAH5iR9HO # iMm4GPoOco3Boz2vAkBq/2mbluIQqBC0N1AI1sM9MIIGBzCCA++gAwIBAgIKYRZo # NAAAAAAAHDANBgkqhkiG9w0BAQUFADBfMRMwEQYKCZImiZPyLGQBGRYDY29tMRkw # FwYKCZImiZPyLGQBGRYJbWljcm9zb2Z0MS0wKwYDVQQDEyRNaWNyb3NvZnQgUm9v # dCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDcwNDAzMTI1MzA5WhcNMjEwNDAz # MTMwMzA5WjB3MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4G # A1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSEw # HwYDVQQDExhNaWNyb3NvZnQgVGltZS1TdGFtcCBQQ0EwggEiMA0GCSqGSIb3DQEB # AQUAA4IBDwAwggEKAoIBAQCfoWyx39tIkip8ay4Z4b3i48WZUSNQrc7dGE4kD+7R # p9FMrXQwIBHrB9VUlRVJlBtCkq6YXDAm2gBr6Hu97IkHD/cOBJjwicwfyzMkh53y # 9GccLPx754gd6udOo6HBI1PKjfpFzwnQXq/QsEIEovmmbJNn1yjcRlOwhtDlKEYu # J6yGT1VSDOQDLPtqkJAwbofzWTCd+n7Wl7PoIZd++NIT8wi3U21StEWQn0gASkdm # EScpZqiX5NMGgUqi+YSnEUcUCYKfhO1VeP4Bmh1QCIUAEDBG7bfeI0a7xC1Un68e # eEExd8yb3zuDk6FhArUdDbH895uyAc4iS1T/+QXDwiALAgMBAAGjggGrMIIBpzAP # BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBQjNPjZUkZwCu1A+3b7syuwwzWzDzAL # BgNVHQ8EBAMCAYYwEAYJKwYBBAGCNxUBBAMCAQAwgZgGA1UdIwSBkDCBjYAUDqyC # YEBWJ5flJRP8KuEKU5VZ5KShY6RhMF8xEzARBgoJkiaJk/IsZAEZFgNjb20xGTAX # BgoJkiaJk/IsZAEZFgltaWNyb3NvZnQxLTArBgNVBAMTJE1pY3Jvc29mdCBSb290 # IENlcnRpZmljYXRlIEF1dGhvcml0eYIQea0WoUqgpa1Mc1j0BxMuZTBQBgNVHR8E # STBHMEWgQ6BBhj9odHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpL2NybC9wcm9k # dWN0cy9taWNyb3NvZnRyb290Y2VydC5jcmwwVAYIKwYBBQUHAQEESDBGMEQGCCsG # AQUFBzAChjhodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpL2NlcnRzL01pY3Jv # c29mdFJvb3RDZXJ0LmNydDATBgNVHSUEDDAKBggrBgEFBQcDCDANBgkqhkiG9w0B # AQUFAAOCAgEAEJeKw1wDRDbd6bStd9vOeVFNAbEudHFbbQwTq86+e4+4LtQSooxt # YrhXAstOIBNQmd16QOJXu69YmhzhHQGGrLt48ovQ7DsB7uK+jwoFyI1I4vBTFd1P # q5Lk541q1YDB5pTyBi+FA+mRKiQicPv2/OR4mS4N9wficLwYTp2OawpylbihOZxn # LcVRDupiXD8WmIsgP+IHGjL5zDFKdjE9K3ILyOpwPf+FChPfwgphjvDXuBfrTot/ # xTUrXqO/67x9C0J71FNyIe4wyrt4ZVxbARcKFA7S2hSY9Ty5ZlizLS/n+YWGzFFW # 6J1wlGysOUzU9nm/qhh6YinvopspNAZ3GmLJPR5tH4LwC8csu89Ds+X57H2146So # dDW4TsVxIxImdgs8UoxxWkZDFLyzs7BNZ8ifQv+AeSGAnhUwZuhCEl4ayJ4iIdBD # 6Svpu/RIzCzU2DKATCYqSCRfWupW76bemZ3KOm+9gSd0BhHudiG/m4LBJ1S2sWo9 # iaF2YbRuoROmv6pH8BJv/YoybLL+31HIjCPJZr2dHYcSZAI9La9Zj7jkIeW1sMpj # tHhUBdRBLlCslLCleKuzoJZ1GtmShxN1Ii8yqAhuoFuMJb+g74TKIdbrHk/Jmu5J # 4PcBZW+JC33Iacjmbuqnl84xKf8OxVtc2E0bodj6L54/LlUWa8kTo/0xggSXMIIE # kwIBATCBkDB5MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4G # A1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSMw # IQYDVQQDExpNaWNyb3NvZnQgQ29kZSBTaWduaW5nIFBDQQITMwAAAUCWqe5wVv7M # BwABAAABQDAJBgUrDgMCGgUAoIGwMBkGCSqGSIb3DQEJAzEMBgorBgEEAYI3AgEE # MBwGCisGAQQBgjcCAQsxDjAMBgorBgEEAYI3AgEVMCMGCSqGSIb3DQEJBDEWBBRY # AVqRiyKDjT7HiTWuWCUStG7V/DBQBgorBgEEAYI3AgEMMUIwQKAWgBQAUABvAHcA # ZQByAFMAaABlAGwAbKEmgCRodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vUG93ZXJT # aGVsbCAwDQYJKoZIhvcNAQEBBQAEggEASt14SIv2D8ro5xi6ayKww9y4Hs4laOZ+ # SlBL0WgGbhr2Nh8W1jN/QW9u7ffwg2mtqhiTlpwHcdwvK+o0jPJwcT0b44qfE5B7 # 7L0M4I0W4EaJPrXBlONx4boxAvGwpYixneY3x/CSiUatYBaX5D2uGXFfJQsVVUOE # /RvLMSSK7WH6lHv47oLCiM0nmD+3XyOz9kLUqeELER9vuQqQt1jcMFgFUmE3Rojf # ZhuHSWl3Xl9/cFInRgbS1aUXVN9fTIPt5IzRM2HhDbd/Hh3TdqazAFv54OlYIfKi # vPp7R0Z6op49KX1hwSKf5lwyURIuSzww66of45o2tWZP0i9nmlC7WqGCAigwggIk # BgkqhkiG9w0BCQYxggIVMIICEQIBATCBjjB3MQswCQYDVQQGEwJVUzETMBEGA1UE # CBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9z # b2Z0IENvcnBvcmF0aW9uMSEwHwYDVQQDExhNaWNyb3NvZnQgVGltZS1TdGFtcCBQ # Q0ECEzMAAAC22ACVDINibaEAAAAAALYwCQYFKw4DAhoFAKBdMBgGCSqGSIb3DQEJ # AzELBgkqhkiG9w0BBwEwHAYJKoZIhvcNAQkFMQ8XDTE3MDIxNjIzNTYzMVowIwYJ # KoZIhvcNAQkEMRYEFOqljb6QmZEiNJf91cOvpnFntn8yMA0GCSqGSIb3DQEBBQUA # BIIBAJVUKUnc/0oMHle/vAjaEjaxrr0+O5SAXmxvS+jH2bqq92FVnv/eIWtKpqrZ # YbujpGpaE+dybL8dlo2holiEpnxI61p0NJHbWWfpN7iNwidg9vYjKdAyMPFappmp # bp16KJ6Ru33/TcUzMgaNmWpKbicIdIIOmkexwjswIV8rsgwIrpUA/GCDFL8ksntL # oYWrjH892G+s2dbKsKZTdSkutMPtwUBKmvRm3AVN/IIRje/EIonyn0JVGXVbi/Ow # 5bodY63kdCbyWRghNOI6Fu8TdZbN8qHKcPyiOr6nC4g51Znp+xhS0xnYE1vhXB5s # RDvMGbqCUNvsxnkxmA4O2Azai9g= # SIG # End signature block |