DSCResources/Cisco_UcsSyncMoWithReference/Cisco_UcsSyncMoWithReference.psm1
# DSC uses the Get-TargetResource function to fetch the status of the resource instance specified in the parameters for the target machine function Get-TargetResource { [CmdletBinding()] [OutputType([System.Collections.Hashtable])] param ( [parameter(Mandatory = $true)] [System.String] $Identifier, [parameter(Mandatory = $true)] [System.String] $UcsConnectionString, [parameter(Mandatory = $true)] [System.Management.Automation.PSCredential] $UcsCredentials, [parameter(Mandatory = $true)] [System.String] $RefUcsConnectionString, [parameter(Mandatory = $true)] [System.Management.Automation.PSCredential] $RefUcsCredentials, [System.String] $Dn, [System.String] $ClassId, [System.Boolean] $Hierarchy=$false, [ValidateSet("Present", "Absent")] [string]$Ensure = "Present", [System.Management.Automation.PSCredential] $WebProxyCredentials, [System.UInt32[]] $DiffCount=0, [System.Boolean] $DeleteNotPresent=$false ) try { Write-Verbose("Started execution of Get() method") $getTargetResourceResult = $null; Write-Verbose("Connecting to target UCS...") $handle= Get-UcsConnection -UcsConnectionString $UcsConnectionString -UcsCredentials $UcsCredentials -WebProxyCredentials $WebProxyCredentials if($handle -eq $null) { Write-Verbose("Failed to connect to Target UCS " +$UcsConnectionString) throw "Failed to connect to Target Ucs $UcsConnectionString" } Write-Verbose("Connecting to reference UCS...") $refHandle= Get-UcsConnection -UcsConnectionString $RefUcsConnectionString -UcsCredentials $RefUcsCredentials -WebProxyCredentials $RefWebProxyCredentials if($refHandle -eq $null) { Write-Verbose("Failed to connect to reference UCS " +$RefUcsConnectionString) throw "Failed to connect to Reference Ucs $RefUcsConnectionString" } if($PSBoundParameters.ContainsKey("ClassId")) { Write-Verbose("Getting moList from " +$handle.Name) $moList= Get-UcsMo -ClassId $ClassId -Ucs $handle Write-Verbose("Getting moList from reference UCS " +$refHandle.Name) $refMoList= Get-UcsMo -ClassId $ClassId -Ucs $refHandle } else { if(!$PSBoundParameters.ContainsKey(("Dn"))) { $Dn= "sys" } if($Hierarchy) { Write-Verbose("Getting moList from " +$handle.Name) $moList= Get-UcsMo -Dn $Dn -Hierarchy -Ucs $handle Write-Verbose("Getting moList from reference UCS " +$refHandle.Name) $refMoList= Get-UcsMo -Dn $Dn -Hierarchy -Ucs $refHandle } else { Write-Verbose("Getting moList from " +$handle.Name) $moList= Get-UcsMo -Dn $Dn -Ucs $handle Write-Verbose("Getting moList from reference UCS " +$refHandle.Name) $refMoList= Get-UcsMo -Dn $Dn -Ucs $refHandle } } Write-Verbose("Disconnecting Reference UCS...") Disconnect-Ucs -Ucs $refHandle Write-Verbose("Reference UCS Disconnected") Write-Verbose("Comparing reference UCS:"+$refHandle.Name+ "moList with UCS:" +$handle.Name+"moList") $diffMos= Compare-UcsManagedObject -ReferenceObject $moList -DifferenceObject $refMoList -ErrorAction SilentlyContinue $diffCount=0 if($diffMos -ne $null) { if($DeleteNotPresent) { $diffCount= $diffMos.Count } else { $diffCount= (($diffMos | %{$_.SideIndicator -eq "=>"} ) | where { $_ -eq $true } | measure).Count } if($diffCount -gt 0) { $Ensure= "Absent" } else { $Ensure= "Present" } } else { Write-Verbose("Difference is null.") $Ensure= "Present" } Write-Verbose("Disconnecting Target UCS...") Disconnect-Ucs -Ucs $handle Write-Verbose("Target UCS Disconnected") $result = @{ Ensure=$Ensure; Identifier = $Identifier; ClassId = $ClassId; Dn = $Dn; Hierarchy= $Hierarchy; DeleteNotPresent=$DeleteNotPresent; DiffCount=$diffCount; UcsConnectionString = $UcsConnectionString; UcsCredentials = $null; RefUcsConnectionString = $RefUcsConnectionString; RefUcsCredentials = $null; WebProxyCredentials = $null; } } catch { Write-Verbose("Error occured in Get-TargetResoucrce. Disconnecting UCS(s)...") if($handle -ne $null) {$temp = Disconnect-Ucs -Ucs $handle} if($refHandle -ne $null) {$temp = Disconnect-Ucs -Ucs $refHandle} throw } Write-Verbose("Completed execution of Get() method") $result; } # The Set-TargetResource function. function Set-TargetResource { [CmdletBinding(SupportsShouldProcess=$true)] param ( [parameter(Mandatory = $true)] [System.String] $Identifier, [parameter(Mandatory = $true)] [System.String] $UcsConnectionString, [parameter(Mandatory = $true)] [System.Management.Automation.PSCredential] $UcsCredentials, [parameter(Mandatory = $true)] [System.String] $RefUcsConnectionString, [parameter(Mandatory = $true)] [System.Management.Automation.PSCredential] $RefUcsCredentials, [System.String] $Dn, [System.String] $ClassId, [System.Boolean] $Hierarchy=$false, [ValidateSet("Present", "Absent")] [string]$Ensure = "Present", [System.Management.Automation.PSCredential] $WebProxyCredentials= $null, [System.UInt32[]] $DiffCount=0, [System.Boolean] $DeleteNotPresent=$false ) Write-Verbose("Started execution of Set() method") try { if($Ensure -eq "Present" ) { Write-Verbose("Connecting to target UCS...") $handle= Get-UcsConnection -UcsConnectionString $UcsConnectionString -UcsCredentials $UcsCredentials -WebProxyCredentials $WebProxyCredentials Write-Verbose("Connecting to Reference UCS...") $refHandle= Get-UcsConnection -UcsConnectionString $RefUcsConnectionString -UcsCredentials $RefUcsCredentials -WebProxyCredentials $RefWebProxyCredentials if($PSBoundParameters.ContainsKey("ClassId")) { Write-Verbose("Getting moList from " +$handle.Name) $moList= Get-UcsMo -ClassId $ClassId -Ucs $handle Write-Verbose("Getting moList from reference UCS " +$refHandle.Name) $refMoList= Get-UcsMo -ClassId $ClassId -Ucs $refHandle } else { if(!$PSBoundParameters.ContainsKey(("Dn"))) { $Dn= "sys" } if($Hierarchy) { Write-Verbose("Getting moList from " +$handle.Name) $moList= Get-UcsMo -Dn $Dn -Hierarchy -Ucs $handle Write-Verbose("Getting moList from reference UCS " +$refHandle.Name) $refMoList= Get-UcsMo -Dn $Dn -Hierarchy -Ucs $refHandle } else { Write-Verbose("Getting moList from " +$handle.Name) $moList= Get-UcsMo -Dn $Dn -Ucs $handle Write-Verbose("Getting moList from reference UCS " +$refHandle.Name) $refMoList= Get-UcsMo -Dn $Dn -Ucs $refHandle } } Write-Verbose("Disconnecting Reference UCS...") Disconnect-Ucs -Ucs $refHandle Write-Verbose("Reference UCS Disconnected") Write-Verbose("Comparing reference UCS:"+$refHandle.Name+ "moList with UCS:" +$handle.Name+"moList") $diffMos= Compare-UcsManagedObject -ReferenceObject $moList -DifferenceObject $refMoList -ErrorAction SilentlyContinue if($diffMos -ne $null -and $diffMos.Count -gt 0) { Write-Verbose("Executing Sync-UcsManagedObject cmdlet.") if($DeleteNotPresent) { $temp= Sync-UcsManagedObject -Difference $diffMos -DeleteNotPresent -Ucs $handle -Force } else { $temp= Sync-UcsManagedObject -Difference $diffMos -Ucs $handle -Force } } else { Write-Verbose("DiffCount is zero or null.") } Write-Verbose("Disconnecting Target UCS...") Disconnect-Ucs -Ucs $handle Write-Verbose("Target UCS Disconnected") } elseif($Ensure -eq "Absent" ) { Write-Verbose("Ensure ='Absent'. No further processing required.") } } catch { Write-Verbose("Error occurred in Set-TargetResoucrce. Disconnecting UCS(s)...") if($handle -ne $null) {$temp = Disconnect-Ucs -Ucs $handle} if($refHandle -ne $null) {$temp = Disconnect-Ucs -Ucs $refHandle} throw } Write-Verbose("Completed execution of Set() method") } function Test-TargetResource { [CmdletBinding()] [OutputType([System.Boolean])] param ( [parameter(Mandatory = $true)] [System.String] $Identifier, [parameter(Mandatory = $true)] [System.String] $UcsConnectionString, [parameter(Mandatory = $true)] [System.Management.Automation.PSCredential] $UcsCredentials, [parameter(Mandatory = $true)] [System.String] $RefUcsConnectionString, [parameter(Mandatory = $true)] [System.Management.Automation.PSCredential] $RefUcsCredentials, [System.String] $Dn, [System.String] $ClassId, [System.Boolean] $Hierarchy=$false, [ValidateSet("Present", "Absent")] [string]$Ensure = "Present", [System.Management.Automation.PSCredential] $WebProxyCredentials= $null, [System.UInt32[]] $DiffCount=0, [System.Boolean] $DeleteNotPresent=$false ) #Write-Debug "Use this cmdlet to write debug information while troubleshooting." Write-Verbose("Started execution of Test-TargetResource method") $result = [System.Boolean] try { if($Ensure -eq "Present") { if($PSBoundParameters.ContainsKey("ClassId")) { $getTargetResult= Get-TargetResource -Identifier $Identifier -UcsConnectionString $UcsConnectionString -UcsCredentials $UcsCredentials -RefUcsConnectionString $RefUcsConnectionString -RefUcsCredentials $RefUcsCredentials -WebProxyCredentials $WebProxyCredentials -ClassId $ClassId -DeleteNotPresent $DeleteNotPresent } elseif( $PSBoundParameters.ContainsKey("Dn")) { $getTargetResult= Get-TargetResource -Identifier $Identifier -UcsConnectionString $UcsConnectionString -UcsCredentials $UcsCredentials -RefUcsConnectionString $RefUcsConnectionString -RefUcsCredentials $RefUcsCredentials -WebProxyCredentials $WebProxyCredentials -Dn $Dn -DeleteNotPresent $DeleteNotPresent -Hierarchy $Hierarchy } else { $getTargetResult= Get-TargetResource -Identifier $Identifier -UcsConnectionString $UcsConnectionString -UcsCredentials $UcsCredentials -RefUcsConnectionString $RefUcsConnectionString -RefUcsCredentials $RefUcsCredentials -WebProxyCredentials $WebProxyCredentials $Identifier -DeleteNotPresent $DeleteNotPresent -Hierarchy $Hierarchy } if($getTargetResult.Ensure -eq "Present") { $result= $true } else { $result= $false } } else { $result= $true } } catch { Write-Verbose("Error occurred in Test-TargetResoucrce. ") $result=$true throw } Write-Verbose("Completed execution of Test-TargetResource method") # Clear-UcsConnection Write-Verbose("Output: "+$result) return $result } # SIG # Begin signature block # MIIeQAYJKoZIhvcNAQcCoIIeMTCCHi0CAQExDzANBglghkgBZQMEAgEFADB5Bgor # BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG # KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCAKgFvieKWAqG// # RPFwrivFqsqn6yV4MMH4F9aVkrpjlqCCDIYwggXCMIIEqqADAgECAhAFsKypxaqA # 4gfxbvm70Ew5MA0GCSqGSIb3DQEBCwUAMGwxCzAJBgNVBAYTAlVTMRUwEwYDVQQK # EwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xKzApBgNV # BAMTIkRpZ2lDZXJ0IEVWIENvZGUgU2lnbmluZyBDQSAoU0hBMikwHhcNMTkwMzA1 # MDAwMDAwWhcNMjEwMzE5MTIwMDAwWjCB1TETMBEGCysGAQQBgjc8AgEDEwJVUzEb # MBkGCysGAQQBgjc8AgECEwpDYWxpZm9ybmlhMR0wGwYDVQQPDBRQcml2YXRlIE9y # Z2FuaXphdGlvbjERMA8GA1UEBRMIQzExODM0NzcxCzAJBgNVBAYTAlVTMRMwEQYD # VQQIEwpDYWxpZm9ybmlhMREwDwYDVQQHEwhTYW4gSm9zZTEcMBoGA1UEChMTQ0lT # Q08gU1lTVEVNUywgSU5DLjEcMBoGA1UEAxMTQ0lTQ08gU1lTVEVNUywgSU5DLjCC # ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALVsxgp7cSBymDSAFTz4uPcU # dcp8ef7lqubpfbCvmiK5BaQOcF6pL2Ekl1o2BiiMOXQfKLO706Ji1lfdZVh/1eDz # zThFUTJ5LgQv5YrFnYu27TuAoXJ2Qs6pj/DJX+R7Mw+5fweicf0DSK9XiV6C9FCK # gT7Z7g0WSYH22qZpBzJf766j2sXo84qEzgR683xfCbTQMbg7I2MzuIvMGT4Qs447 # Uzb5lR1DVwMcAdXZD0lXS+0h1C4xl3B+MseIH2mtQTo1+pLhlqSK8xCwixEf1ERL # 3zmUTLw3G/gM4ccyvlWUaorNAiZw7JSAk3eqojmiAp9fuqRuuDhOHl13MzCxh1UC # AwEAAaOCAfQwggHwMB8GA1UdIwQYMBaAFI/ofvBtMmoABSPHcJdqOpD/a+rUMB0G # A1UdDgQWBBSqPgNg7Q9VW7yFRq0K9ceayo35uzAxBgNVHREEKjAooCYGCCsGAQUF # BwgDoBowGAwWVVMtQ0FMSUZPUk5JQS1DMTE4MzQ3NzAOBgNVHQ8BAf8EBAMCB4Aw # EwYDVR0lBAwwCgYIKwYBBQUHAwMwewYDVR0fBHQwcjA3oDWgM4YxaHR0cDovL2Ny # bDMuZGlnaWNlcnQuY29tL0VWQ29kZVNpZ25pbmdTSEEyLWcxLmNybDA3oDWgM4Yx # aHR0cDovL2NybDQuZGlnaWNlcnQuY29tL0VWQ29kZVNpZ25pbmdTSEEyLWcxLmNy # bDBLBgNVHSAERDBCMDcGCWCGSAGG/WwDAjAqMCgGCCsGAQUFBwIBFhxodHRwczov # L3d3dy5kaWdpY2VydC5jb20vQ1BTMAcGBWeBDAEDMH4GCCsGAQUFBwEBBHIwcDAk # BggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEgGCCsGAQUFBzAC # hjxodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20vRGlnaUNlcnRFVkNvZGVTaWdu # aW5nQ0EtU0hBMi5jcnQwDAYDVR0TAQH/BAIwADANBgkqhkiG9w0BAQsFAAOCAQEA # MLeT7V16i8TpC3++bRSUEajW355sfKiuWEPnc1RIEGMSekaTJKSVDDgaGdPt22qE # wRrJztKYca2N6ZpOOE477yTiuYMCCVUIcwhaWezA/4Wgs9TpW0QBe53qIJj6t0uH # M+gZg7Bp0KM65Z+Kh5teHZ6kzs8evRGsH3cgKtfrwwRRdJCgqBz3KmkNhqRQ6/Hl # SS7GV+wRoGAeqnCGL6IOY7bLl2NC+ItUh1D6bP/9UR0MtVFU6nqY7Lj3Z5xmje8t # N6sZ1p+FTGaHDwSZX7DDtff766Bl5om/IixIfOPQtZoe12lxZqlAn33JMflIZgNt # 8ckoE13Gh8lJeoFIFBzgsjCCBrwwggWkoAMCAQICEAPxtOFfOoLxFJZ4s9fYR1ww # DQYJKoZIhvcNAQELBQAwbDELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0 # IEluYzEZMBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNl # cnQgSGlnaCBBc3N1cmFuY2UgRVYgUm9vdCBDQTAeFw0xMjA0MTgxMjAwMDBaFw0y # NzA0MTgxMjAwMDBaMGwxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJ # bmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xKzApBgNVBAMTIkRpZ2lDZXJ0 # IEVWIENvZGUgU2lnbmluZyBDQSAoU0hBMikwggEiMA0GCSqGSIb3DQEBAQUAA4IB # DwAwggEKAoIBAQCnU/oPsrUT8WTPhID8roA10bbXx6MsrBosrPGErDo1EjqSkbpX # 5MTJ8y+oSDy31m7clyK6UXlhr0MvDbebtEkxrkRYPqShlqeHTyN+w2xlJJBVPqHK # I3zFQunEemJFm33eY3TLnmMl+ISamq1FT659H8gTy3WbyeHhivgLDJj0yj7QRap6 # HqVYkzY0visuKzFYZrQyEJ+d8FKh7+g+03byQFrc+mo9G0utdrCMXO42uoPqMKhM # 3vELKlhBiK4AiasD0RaCICJ2615UOBJi4dJwJNvtH3DSZAmALeK2nc4f8rsh82zb # 2LMZe4pQn+/sNgpcmrdK0wigOXn93b89OgklAgMBAAGjggNYMIIDVDASBgNVHRMB # Af8ECDAGAQH/AgEAMA4GA1UdDwEB/wQEAwIBhjATBgNVHSUEDDAKBggrBgEFBQcD # AzB/BggrBgEFBQcBAQRzMHEwJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmRpZ2lj # ZXJ0LmNvbTBJBggrBgEFBQcwAoY9aHR0cDovL2NhY2VydHMuZGlnaWNlcnQuY29t # L0RpZ2lDZXJ0SGlnaEFzc3VyYW5jZUVWUm9vdENBLmNydDCBjwYDVR0fBIGHMIGE # MECgPqA8hjpodHRwOi8vY3JsMy5kaWdpY2VydC5jb20vRGlnaUNlcnRIaWdoQXNz # dXJhbmNlRVZSb290Q0EuY3JsMECgPqA8hjpodHRwOi8vY3JsNC5kaWdpY2VydC5j # b20vRGlnaUNlcnRIaWdoQXNzdXJhbmNlRVZSb290Q0EuY3JsMIIBxAYDVR0gBIIB # uzCCAbcwggGzBglghkgBhv1sAwIwggGkMDoGCCsGAQUFBwIBFi5odHRwOi8vd3d3 # LmRpZ2ljZXJ0LmNvbS9zc2wtY3BzLXJlcG9zaXRvcnkuaHRtMIIBZAYIKwYBBQUH # AgIwggFWHoIBUgBBAG4AeQAgAHUAcwBlACAAbwBmACAAdABoAGkAcwAgAEMAZQBy # AHQAaQBmAGkAYwBhAHQAZQAgAGMAbwBuAHMAdABpAHQAdQB0AGUAcwAgAGEAYwBj # AGUAcAB0AGEAbgBjAGUAIABvAGYAIAB0AGgAZQAgAEQAaQBnAGkAQwBlAHIAdAAg # AEMAUAAvAEMAUABTACAAYQBuAGQAIAB0AGgAZQAgAFIAZQBsAHkAaQBuAGcAIABQ # AGEAcgB0AHkAIABBAGcAcgBlAGUAbQBlAG4AdAAgAHcAaABpAGMAaAAgAGwAaQBt # AGkAdAAgAGwAaQBhAGIAaQBsAGkAdAB5ACAAYQBuAGQAIABhAHIAZQAgAGkAbgBj # AG8AcgBwAG8AcgBhAHQAZQBkACAAaABlAHIAZQBpAG4AIABiAHkAIAByAGUAZgBl # AHIAZQBuAGMAZQAuMB0GA1UdDgQWBBSP6H7wbTJqAAUjx3CXajqQ/2vq1DAfBgNV # HSMEGDAWgBSxPsNpA/i/RwHUmCYaCALvY2QrwzANBgkqhkiG9w0BAQsFAAOCAQEA # GTNKDIEzN9utNsnkyTq7tRsueqLi9ENCF56/TqFN4bHb6YHdnwHy5IjV6f4J/SHB # 7F2A0vDWwUPC/ncr2/nXkTPObNWyGTvmLtbJk0+IQI7N4fV+8Q/GWVZy6OtqQb0c # 1UbVfEnKZjgVwb/gkXB3h9zJjTHJDCmiM+2N4ofNiY0/G//V4BqXi3zabfuoxrI6 # Zmt7AbPN2KY07BIBq5VYpcRTV6hg5ucCEqC5I2SiTbt8gSVkIb7P7kIYQ5e7pTcG # r03/JqVNYUvsRkG4Zc64eZ4IlguBjIo7j8eZjKMqbphtXmHGlreKuWEtk7jrDgRD # 1/X+pvBi1JlqpcHB8GSUgDGCERAwghEMAgEBMIGAMGwxCzAJBgNVBAYTAlVTMRUw # EwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20x # KzApBgNVBAMTIkRpZ2lDZXJ0IEVWIENvZGUgU2lnbmluZyBDQSAoU0hBMikCEAWw # rKnFqoDiB/Fu+bvQTDkwDQYJYIZIAWUDBAIBBQCggZowGQYJKoZIhvcNAQkDMQwG # CisGAQQBgjcCAQQwHAYKKwYBBAGCNwIBCzEOMAwGCisGAQQBgjcCARUwLgYKKwYB # BAGCNwIBDDEgMB6gHIAaAFMAQQBTAEQALQBQAGgAMwAtADEAMAAyADIwLwYJKoZI # hvcNAQkEMSIEIOy+He0vh+GieY8H9sOYxQSYpiP89LNc0iCwPaNJXfR+MA0GCSqG # SIb3DQEBAQUABIIBADSzyMTOkzbBS2GpQGKcZK7TFQRYQ1nPHUQ7fpb+YUXpriSC # eOo2vrkp1fZq5KkhhTnywNSOgLOSPdj9H7m61YAjeTLQ2T1L8iPGHwHGuDNM2PVr # 1XOmZpOf9arwrmu92BjKHDX64Q1fWpfXo53PZ199kixeIAYcm6MIAqoSB63eO74B # WmFtlYCThfMIrvpDeAKnWYRg7m1MRR30ixvZpCoQxiW2LN3/FlQp6ZXWLD2rmAXW # nSGIy+zwGxHAzgzb+uGTywORtRY1Kn1imJ1kPH5gQqaOnGPQtUOkHmxaNkvGnCOR # km6Fvh1xNCStXDDMd+ld/7rnUMcfkDQV2uIvXQuhgg7DMIIOvwYKKwYBBAGCNwMD # ATGCDq8wgg6rBgkqhkiG9w0BBwKggg6cMIIOmAIBAzEPMA0GCWCGSAFlAwQCAQUA # MIHxBgsqhkiG9w0BCRABBKCB4QSB3jCB2wIBAQYJYIZIhvpsCgMFMDEwDQYJYIZI # AWUDBAIBBQAEIMsn/FaTrovsRG0S9claF7KhKU8ELI4aFM1/iSBMlD6LAgZdrm9A # Ek0YEjIwMTkxMTA2MTkwNDE2LjY4WjAEgAIB9KB2pHQwcjELMAkGA1UEBhMCQ0Ex # EDAOBgNVBAgTB09udGFyaW8xDzANBgNVBAcTBk90dGF3YTEWMBQGA1UEChMNRW50 # cnVzdCwgSW5jLjEoMCYGA1UEAxMfRW50cnVzdCBUaW1lIFN0YW1waW5nIEF1dGhv # cml0eaCCCiQwggUJMIID8aADAgECAhEAq91nZfJa71AAAAAAVZHpDDANBgkqhkiG # 9w0BAQsFADCBsjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4x # KDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVybXMxOTA3BgNV # BAsTMChjKSAyMDE1IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ug # b25seTEmMCQGA1UEAxMdRW50cnVzdCBUaW1lc3RhbXBpbmcgQ0EgLSBUUzEwHhcN # MTgxMDA1MjAzMDI3WhcNMzAwMTA1MjEwMDI3WjByMQswCQYDVQQGEwJDQTEQMA4G # A1UECBMHT250YXJpbzEPMA0GA1UEBxMGT3R0YXdhMRYwFAYDVQQKEw1FbnRydXN0 # LCBJbmMuMSgwJgYDVQQDEx9FbnRydXN0IFRpbWUgU3RhbXBpbmcgQXV0aG9yaXR5 # MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAq72ujI9Cy5VZXGIn+UC4 # /1WiQEpl/9vtp6GIbkAaLtlr1UrtAVliVMRzFqPWhG7ugELqVQiYcBk/Jp7E1qao # 66upJD0LV1hk/PDaGDLZsde6cwFLDpEx771ImonDguIJePOiGy6NzQ7vibN6uvIc # mDOlcPh7TuwSCOyzn0+MS77XfIBnVv5cPgfahqIpQBswyo/NF0mi1OvNXlByGRlw # RyudCuCAwykHASUkXM32BtQdEYbKNfYUpL+vbkGDKWuSf0SHjNuEUKCRvAlTf/Ss # vsM3h6PESgsQM223AYPxxUdpnxTDz838fQEp40XOj5mOZKkNPIsg4gOGy1REQTe1 # 6QIDAQABo4IBVzCCAVMwDgYDVR0PAQH/BAQDAgeAMBYGA1UdJQEB/wQMMAoGCCsG # AQUFBwMIMEEGA1UdIAQ6MDgwNgYKYIZIAYb6bAoDBTAoMCYGCCsGAQUFBwIBFhpo # dHRwOi8vd3d3LmVudHJ1c3QubmV0L3JwYTAJBgNVHRMEAjAAMGgGCCsGAQUFBwEB # BFwwWjAjBggrBgEFBQcwAYYXaHR0cDovL29jc3AuZW50cnVzdC5uZXQwMwYIKwYB # BQUHMAKGJ2h0dHA6Ly9haWEuZW50cnVzdC5uZXQvdHMxLWNoYWluMjU2LmNlcjAx # BgNVHR8EKjAoMCagJKAihiBodHRwOi8vY3JsLmVudHJ1c3QubmV0L3RzMWNhLmNy # bDAfBgNVHSMEGDAWgBTDwnHSe9doBa47OZs0JQxiA8dXaDAdBgNVHQ4EFgQUIJB5 # 3ibLFdoHQvuKFQ1xnhloiCwwDQYJKoZIhvcNAQELBQADggEBAMSyYtmyy6moYNtB # ptNAPWG9+u/3lLVIzW5y1YblGKmxQYmYrwQVq32r9RUCxGvAqUkoLVjXUwxZBzbO # qgt46WXAxCMRNNTAapj7gfOsmGC09z4AdHCFcjC2wmkxWzwGbgT/QeRFlF5wilI7 # DsqHYWxASFYPHcEn6vJeYCD8hvo0V8Q/4qVKi7sG82sdCQJQ3fgXS9J0Iaz5n0n3 # 7ErYOlX5VenFj20iBFlKUz0dU6KqM3ttARW+fqW6n7JR3Xdx2LGC6ll9ja0+TUaM # /jglp/yk3hO+/hDS8JY35Y8cqazT2GpupVbcJlrpX4HdkE+YaYhNz4KUqmL1nwTm # /b9mmsIwggUTMIID+6ADAgECAgxY2hP/AAAAAFHODfcwDQYJKoZIhvcNAQELBQAw # gbQxFDASBgNVBAoTC0VudHJ1c3QubmV0MUAwPgYDVQQLFDd3d3cuZW50cnVzdC5u # ZXQvQ1BTXzIwNDggaW5jb3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYD # VQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBMaW1pdGVkMTMwMQYDVQQDEypFbnRy # dXN0Lm5ldCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAoMjA0OCkwHhcNMTUwNzIy # MTkwMjU0WhcNMjkwNjIyMTkzMjU0WjCBsjELMAkGA1UEBhMCVVMxFjAUBgNVBAoT # DUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVn # YWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDE1IEVudHJ1c3QsIEluYy4gLSBmb3Ig # YXV0aG9yaXplZCB1c2Ugb25seTEmMCQGA1UEAxMdRW50cnVzdCBUaW1lc3RhbXBp # bmcgQ0EgLSBUUzEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDZI+YU # pOh8S4VxWPv4geZyi11Gw4gAHzjQiuHWblYw5a/aZFB9whM5+71mtNqE+4PQKB/L # duhgUGmb885PE+LBPsHfEssyo/heRCIOzDrpjUm5YHTI3lQ9QV5DXyhGqaa3yhAr # IrxbTVuMF2UShv0sd9XFoIzKwoPgR1d853CuYkUnMRgK1MCkGFVS92DGBEuz3Wgy # bhAfNBG4Enhk8e6p4PfjsSKPNFply4r04UVQdN+Tl6Y05tBMO583SVKnU06fLmdc # 7Zb8pb90UYjjqo692bEvX1AwFvRRYCJrmcv/4VQ7uftEOKUIOSObaUf6PMTQ56rf # RrLs8ooZrCmyOJV1AgMBAAGjggEjMIIBHzASBgNVHRMBAf8ECDAGAQH/AgEAMA4G # A1UdDwEB/wQEAwIBBjA7BgNVHSAENDAyMDAGBFUdIAAwKDAmBggrBgEFBQcCARYa # aHR0cDovL3d3dy5lbnRydXN0Lm5ldC9ycGEwMwYIKwYBBQUHAQEEJzAlMCMGCCsG # AQUFBzABhhdodHRwOi8vb2NzcC5lbnRydXN0Lm5ldDAyBgNVHR8EKzApMCegJaAj # hiFodHRwOi8vY3JsLmVudHJ1c3QubmV0LzIwNDhjYS5jcmwwEwYDVR0lBAwwCgYI # KwYBBQUHAwgwHQYDVR0OBBYEFMPCcdJ712gFrjs5mzQlDGIDx1doMB8GA1UdIwQY # MBaAFFXkgdERgL7YibkIozH5oSQJFrlwMA0GCSqGSIb3DQEBCwUAA4IBAQAdJOea # dFuqcPyxDjFF1ywAf2Y6K6CaNKqsY22J+Z/fDXf9JCP8T5y3b4/z9B+2wf3WHMSM # iGbBY426V3fTuBoeyFGtzGA2GodqKOoRZd7MPCyMdLfoUEPTzCjoFWwRKp8UlSnJ # BVe1ZzboPKmD70HBIRbTfvctEUdmdmCCEmmMdlVzD98vS13pbCP4B/a1fdZpRZxY # fWEu/HhLQ06JkUZELKBTqEWh9hZYu5ET8kvF3wvA564per1Fs+dwMOc0jut69tO1 # 0d5rE5lGs4vSTZN1tfFvv9wAKMIlv7zno2U07D8NHZeM+qqIIqQYNdsFjnbjEMgp # j2PQrqwY2drEn1ESMYIDZDCCA2ACAQEwgcgwgbIxCzAJBgNVBAYTAlVTMRYwFAYD # VQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3QubmV0 # L2xlZ2FsLXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxNSBFbnRydXN0LCBJbmMuIC0g # Zm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJjAkBgNVBAMTHUVudHJ1c3QgVGltZXN0 # YW1waW5nIENBIC0gVFMxAhEAq91nZfJa71AAAAAAVZHpDDANBglghkgBZQMEAgEF # AKCCAWwwGgYJKoZIhvcNAQkDMQ0GCyqGSIb3DQEJEAEEMC8GCSqGSIb3DQEJBDEi # BCB94rlGr61XQmtt+uWweajzUMzf0oubIvPMMR9TPjP3ADCCARsGCyqGSIb3DQEJ # EAIMMYIBCjCCAQYwggECMIHnBBTA9ZQXZWnXgKsOz9/b4qnBr2RO3jCBzjCBuKSB # tTCBsjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNV # BAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVybXMxOTA3BgNVBAsTMChj # KSAyMDE1IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25seTEm # MCQGA1UEAxMdRW50cnVzdCBUaW1lc3RhbXBpbmcgQ0EgLSBUUzECEQCr3Wdl8lrv # UAAAAABVkekMMBYEFJeenaf3liM/IQyO7RZt7zYEDEaOMA0GCSqGSIb3DQEBCwUA # BIIBAJ3SqKYKjNtxm4bz6smQ0IMTGyP/OtrIqDcy/HL9GNSWCqUx+upzkqbGzHEt # lm86sozbT/7Wf1AIfeGxcpOMxIfF65lrYaeUN7RZZDwe8NLgJT4KJW9P1yXEtT2e # BOET37JzrtOSn5t1lQ9MofdrFCN1GOY5IzwylG2ELcCviwbzNjYHQuOKiJQRfdyl # xs8HuDyvAORuotbfznVoX+/5eA88RKzlIVIKNMkErDYEq2FxyzkgVZnnkRUw0r9d # DJpRTtSYoZ+mCX/DkhgpxuKLMOCqQjOHMziJsZ+fW8qh5eI+wPKR60RAlUgXdv24 # UE/iiaCxXcoWvdXGtwZNm3kZdow= # SIG # End signature block |