ISOHelper.psm1
|
#Requires -Version 5.1 # the module uses native windows Image Mastering API (IMAPI2) to create ISO images on Windows # https://learn.microsoft.com/en-us/windows/win32/imapi # compile the C# class into a usable .NET type. # the type is only compiled if it is not already loaded in the .NET AppDomain; # Add-Type throws an error if the same type is loaded twice, including on module reload. # Writable IMAPI_MEDIA_PHYSICAL_TYPE values # https://learn.microsoft.com/en-us/windows/win32/api/imapi2/ne-imapi2-imapi_media_physical_type # Non-writable types (UNKNOWN, CDROM, DVDROM, HDDVDROM, HDDVDR, HDDVDRAM, BDROM are excluded as they cannot # be used for the CreateResultImage() process. enum WritableImapiMediaType { IMAPI_MEDIA_TYPE_CDR = 0x02 # Write-once CD IMAPI_MEDIA_TYPE_CDRW = 0x03 # Rewritable CD IMAPI_MEDIA_TYPE_DVDRAM = 0x05 # Random-access DVD-RAM IMAPI_MEDIA_TYPE_DVDPLUSR = 0x06 # Write-once DVD+R IMAPI_MEDIA_TYPE_DVDPLUSRW = 0x07 # Rewritable DVD+RW IMAPI_MEDIA_TYPE_DVDPLUSR_DUALLAYER = 0x08 # Write-once DVD+R DL (8.5GB) IMAPI_MEDIA_TYPE_DVDDASHR = 0x09 # Write-once DVD-R IMAPI_MEDIA_TYPE_DVDDASHRW = 0x0a # Rewritable DVD-RW IMAPI_MEDIA_TYPE_DVDDASHR_DUALLAYER = 0x0b # Write-once DVD-R DL (8.5GB) IMAPI_MEDIA_TYPE_DISK = 0x0c # Generic random-access media IMAPI_MEDIA_TYPE_DVDPLUSRW_DUALLAYER = 0x0d # Rewritable DVD+RW DL IMAPI_MEDIA_TYPE_BDR = 0x12 # Write-once Blu-ray (25GB) IMAPI_MEDIA_TYPE_BDRE = 0x13 # Rewritable Blu-ray IMAPI_MEDIA_TYPE_MAX = 0x13 # } $ModuleRoot = $PSScriptRoot if (-not ('ISOHelper' -as [type])) { $TypeDefinition = Get-Content -LiteralPath (Join-Path -Path $ModuleRoot -ChildPath 'Classes\ISOHelper.cs') -Raw try { Add-Type -TypeDefinition $TypeDefinition -ErrorAction Stop } catch { $ErrorMessage = 'Failed to load ISOHelper C# class: {0}' -f $_.Exception.Message Write-Error -Message $ErrorMessage if ($_.Exception.InnerException) { Write-Error -Message $_.Exception.InnerException.Message } throw } } $ModuleName = 'ISOHelper' $PublicFunctionsPath = Join-Path -Path $ModuleRoot -ChildPath 'Public' # get all public functions in the module Public directory (if it exists) if (Test-Path -Path $PublicFunctionsPath) { $PublicFunctions = Get-ChildItem -Path $PublicFunctionsPath -Filter '*.ps1' -File } # check for command name conflicts for all public functions foreach ($Function in $PublicFunctions) { $FunctionName = $Function.BaseName $ExistingCommand = Get-Command -Name $FunctionName -ErrorAction SilentlyContinue if ($ExistingCommand -and ($ExistingCommand.ModuleName -ne $ModuleName)) { # if a command with the same name is already loaded and if it does not belong to this module, issue a # warning about the conflict and how to use the function from this module to avoid ambiguity $WarningMessage = 'Another command named [{0}] (type: [{1}]) is already loaded in module [{2}]. You may need to use "{3}\{0}" command syntax to run this module''s function [{0}].' -f $FunctionName, $ExistingCommand.CommandType, $ExistingCommand.ModuleName, $ModuleName Write-Warning -Message $WarningMessage } } # dot-source all public functions foreach ($PublicFunction in $PublicFunctions) { . $PublicFunction.FullName } # SIG # Begin signature block # MIIpKAYJKoZIhvcNAQcCoIIpGTCCKRUCAQExDzANBglghkgBZQMEAgIFADCBiQYK # KwYBBAGCNwIBBKB7MHkwNAYKKwYBBAGCNwIBHjAmAgMBAAAEEB/MO2BZSwhOtyTS # xil+81ECAQACAQACAQACAQACAQAwQTANBglghkgBZQMEAgIFAAQwA0jDLhTO9V6l # 4TxC3TjojBj+LGbZawSBNLzQnjWxRPva+QLdg6P1P4Q60/sd+QzIoIIMXTCCBhow # ggQCoAMCAQICEGIdbQxSAZ47kHkVIIkhHAowDQYJKoZIhvcNAQEMBQAwVjELMAkG # A1UEBhMCR0IxGDAWBgNVBAoTD1NlY3RpZ28gTGltaXRlZDEtMCsGA1UEAxMkU2Vj # dGlnbyBQdWJsaWMgQ29kZSBTaWduaW5nIFJvb3QgUjQ2MB4XDTIxMDMyMjAwMDAw # MFoXDTM2MDMyMTIzNTk1OVowVDELMAkGA1UEBhMCR0IxGDAWBgNVBAoTD1NlY3Rp # Z28gTGltaXRlZDErMCkGA1UEAxMiU2VjdGlnbyBQdWJsaWMgQ29kZSBTaWduaW5n # IENBIFIzNjCCAaIwDQYJKoZIhvcNAQEBBQADggGPADCCAYoCggGBAJsrnVP6NT+O # YAZDasDP9X/2yFNTGMjO02x+/FgHlRd5ZTMLER4ARkZsQ3hAyAKwktlQqFZOGP/I # +rLSJJmFeRno+DYDY1UOAWKA4xjMHY4qF2p9YZWhhbeFpPb09JNqFiTCYy/Rv/ze # dt4QJuIxeFI61tqb7/foXT1/LW2wHyN79FXSYiTxcv+18Irpw+5gcTbXnDOsrSHV # JYdPE9s+5iRF2Q/TlnCZGZOcA7n9qudjzeN43OE/TpKF2dGq1mVXn37zK/4oiETk # gsyqA5lgAQ0c1f1IkOb6rGnhWqkHcxX+HnfKXjVodTmmV52L2UIFsf0l4iQ0UgKJ # Uc2RGarhOnG3B++OxR53LPys3J9AnL9o6zlviz5pzsgfrQH4lrtNUz4Qq/Va5MbB # wuahTcWk4UxuY+PynPjgw9nV/35gRAhC3L81B3/bIaBb659+Vxn9kT2jUztrkmep # /aLb+4xJbKZHyvahAEx2XKHafkeKtjiMqcUf/2BG935A591GsllvWwIDAQABo4IB # ZDCCAWAwHwYDVR0jBBgwFoAUMuuSmv81lkgvKEBCcCA2kVwXheYwHQYDVR0OBBYE # FA8qyyCHKLjsb0iuK1SmKaoXpM0MMA4GA1UdDwEB/wQEAwIBhjASBgNVHRMBAf8E # CDAGAQH/AgEAMBMGA1UdJQQMMAoGCCsGAQUFBwMDMBsGA1UdIAQUMBIwBgYEVR0g # ADAIBgZngQwBBAEwSwYDVR0fBEQwQjBAoD6gPIY6aHR0cDovL2NybC5zZWN0aWdv # LmNvbS9TZWN0aWdvUHVibGljQ29kZVNpZ25pbmdSb290UjQ2LmNybDB7BggrBgEF # BQcBAQRvMG0wRgYIKwYBBQUHMAKGOmh0dHA6Ly9jcnQuc2VjdGlnby5jb20vU2Vj # dGlnb1B1YmxpY0NvZGVTaWduaW5nUm9vdFI0Ni5wN2MwIwYIKwYBBQUHMAGGF2h0 # dHA6Ly9vY3NwLnNlY3RpZ28uY29tMA0GCSqGSIb3DQEBDAUAA4ICAQAG/4Lhd2M2 # bnuhFSCbE/8E/ph1RGHDVpVx0ZE/haHrQECxyNbgcv2FymQ5PPmNS6Dah66dtgCj # BsULYAor5wxxcgEPRl05pZOzI3IEGwwsepp+8iGsLKaVpL3z5CmgELIqmk/Q5zFg # R1TSGmxqoEEhk60FqONzDn7D8p4W89h8sX+V1imaUb693TGqWp3T32IKGfIgy9jk # d7GM7YCa2xulWfQ6E1xZtYNEX/ewGnp9ZeHPsNwwviJMBZL4xVd40uPWUnOJUoSi # ugaz0yWLODRtQxs5qU6E58KKmfHwJotl5WZ7nIQuDT0mWjwEx7zSM7fs9Tx6N+Q/ # 3+49qTtUvAQsrEAxwmzOTJ6Jp6uWmHCgrHW4dHM3ITpvG5Ipy62KyqYovk5O6cC+ # 040Si15KJpuQ9VJnbPvqYqfMB9nEKX/d2rd1Q3DiuDexMKCCQdJGpOqUsxLuCOuF # OoGbO7Uv3RjUpY39jkkp0a+yls6tN85fJe+Y8voTnbPU1knpy24wUFBkfenBa+pR # FHwCBB1QtS+vGNRhsceP3kSPNrrfN2sRzFYsNfrFaWz8YOdU254qNZQfd9O/VjxZ # 2Gjr3xgANHtM3HxfzPYF6/pKK8EE4dj66qKKtm2DTL1KFCg/OYJyfrdLJq1q2/HX # ntgr2GVw+ZWhrWgMTn8v1SjZsLlrgIfZHDCCBjswggSjoAMCAQICEQCOb5nN9RcU # vOdHUaKd3s+pMA0GCSqGSIb3DQEBDAUAMFQxCzAJBgNVBAYTAkdCMRgwFgYDVQQK # Ew9TZWN0aWdvIExpbWl0ZWQxKzApBgNVBAMTIlNlY3RpZ28gUHVibGljIENvZGUg # U2lnbmluZyBDQSBSMzYwHhcNMjQxMDMxMDAwMDAwWhcNMjcxMDMxMjM1OTU5WjBR # MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxGDAWBgNVBAoMD1NlcnZlcnMu # Y29tIEluYzEYMBYGA1UEAwwPU2VydmVycy5jb20gSW5jMIICIjANBgkqhkiG9w0B # AQEFAAOCAg8AMIICCgKCAgEAvp24We3pIGAO3Vgmlu1/s/FmAOPUHB54iVPzo7rt # 8OnKaNrf6rrACGGmy+/PAhG3S/pVhIcE3dMAMbsKy9OZzvhTOFpu7eNy2nox/NV4 # 3+4ohdhs395u4M884wCGBt34LFL6lAcxjMBiYD4F9eJ4SPzy1z4s7eeWeqmkrVpu # C5w0J5UC9DcNkz1phxTLD5ZH4XVbBavHMWi2eMWr+SIB80NVrNpk5Zokx3PoHC92 # Ny5fFPE+xQqgVYokVmLA9/IAtw8kyMxS6uy1b7l9y435RTceHUUjCCQJx/DB73bv # tZ4mLdUVGCMtAdjHrf//ZqzXEJODoYr0Be6GALtWzItEtNgLCwzEs3MbyLZ2o4jS # aVNOUCZJT0Ybr3jGrjH40HiWtDKJkM5o21vHhXSwEj6FbP59WXZgz1wFwobGpwsy # 16u0S6MtAErVTrFqjNU1QTBqQRngtN+1dUmzxbnCOOOM/J/EQHCILWuDqSSW+3Xm # XIBmhOH6JNgRBYefFUOkXOzKHYWhou4e01Ek0iIXnIEevnX0Ot2W/EzPDnpBk0BE # nroE9eV68lyIJPM6V0v5UTCtU84ueNCyRVwfrgFt/LpDt2k0c5MM913S+4CiX2NV # 8CAO98ziPcrZKvoQ9Td6CQd1dWXl8WS4Elqdd1XFemVcukMmvbHqNUqKuWzsyVyb # GN0CAwEAAaOCAYkwggGFMB8GA1UdIwQYMBaAFA8qyyCHKLjsb0iuK1SmKaoXpM0M # MB0GA1UdDgQWBBSv2va0R2h+vgq1aXEU2nHKmS3m5DAOBgNVHQ8BAf8EBAMCB4Aw # DAYDVR0TAQH/BAIwADATBgNVHSUEDDAKBggrBgEFBQcDAzBKBgNVHSAEQzBBMDUG # DCsGAQQBsjEBAgEDAjAlMCMGCCsGAQUFBwIBFhdodHRwczovL3NlY3RpZ28uY29t # L0NQUzAIBgZngQwBBAEwSQYDVR0fBEIwQDA+oDygOoY4aHR0cDovL2NybC5zZWN0 # aWdvLmNvbS9TZWN0aWdvUHVibGljQ29kZVNpZ25pbmdDQVIzNi5jcmwweQYIKwYB # BQUHAQEEbTBrMEQGCCsGAQUFBzAChjhodHRwOi8vY3J0LnNlY3RpZ28uY29tL1Nl # Y3RpZ29QdWJsaWNDb2RlU2lnbmluZ0NBUjM2LmNydDAjBggrBgEFBQcwAYYXaHR0 # cDovL29jc3Auc2VjdGlnby5jb20wDQYJKoZIhvcNAQEMBQADggGBAHEbul2S+/ox # 9Ircz1n8YqKwbk6T6YyCUcIn7Bz91BhIpgJVRd5n5pukFimCo6jWuLdCRkerv8bB # NYkrjkWeg3tUwI2oT/yxuSbwmkfS5DQZ2WBBg4GEIDCRRfdyipJMQ8fk1/afHM8H # 38edvzwfcXdqRbDxJODuZyU4ZOU7Witf8wrzOXhXUyg+4hr6gV24EZz8UbCqyKJP # sxzqmON7TZg61uypGIcA8P0NUBatE3TDD9cJesv5t8+fDkiW/Hym9ziWiYIlw0N+ # 7nkiFUHrIJCtBCv7U4zz+xv9l40LglasVuEIornU0lt02XUOYNKc9vkx9V0wGeBW # wKNDMln6f9LNZY3GNE+2lmY5UQq7LyMRQZABdkVq5sIEFy2STBmAN33NVoxZbmul # 5uama9f8+maPbLQBkqPJLpnXT898DYiOl8ndZ9bfVnKFtv1KU5n637cdZNzt+gYz # 9oV4YVZO0Wuwd5CYSNwmviz0fyLKtK5VsAA6/2W7fsdCePVedw502DGCHBAwghwM # AgEBMGkwVDELMAkGA1UEBhMCR0IxGDAWBgNVBAoTD1NlY3RpZ28gTGltaXRlZDEr # MCkGA1UEAxMiU2VjdGlnbyBQdWJsaWMgQ29kZSBTaWduaW5nIENBIFIzNgIRAI5v # mc31FxS850dRop3ez6kwDQYJYIZIAWUDBAICBQCggYwwEAYKKwYBBAGCNwIBDDEC # MAAwGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwHAYKKwYBBAGCNwIBCzEOMAwG # CisGAQQBgjcCARUwPwYJKoZIhvcNAQkEMTIEMI5PATwMm7JghzyDZvSfVXQ8fuIe # QjmupWn8mZt7VpT1jRumRv5SJbwBF3E3jLxg+zANBgkqhkiG9w0BAQEFAASCAgCr # DfhIh+E2uA/Z8tZGMaQx0nJK4wkzC9pto/H8oDPvepjh0cNgX5xftNo+ucFOtbie # vVTrVy2rDMJ2Re3N5QQM4m26cJYDH44G/AXs1nfzNTJmhMKUhWnZUv610jjmg4/R # dXToClAly/KaMD37UTDhXJBEblHcc2L4G08gl/0D/ykCTuz3MItcm5MGyBgYefbU # BQMpW7dfJ2vJHvyU+Qpa9+eBnTcxtzOMR+sftgA5ffBViTvCw3uMdEAJU2CCD3E2 # sUJPqir3ZUoC7vcOJsAFqYgWsK1M8brKNiodKrLnyXb7MAWAS1xK/ypCw7tj+lqz # 6ZLHaKhcgCiyAB+vcP2QzLsxry/Y3WHRmqr42trtEDtLVKj7dNXAy88OD4QAe9BC # cLORMB9RO1+stVyg+zBWxPbqhWKlfn5+jloJkcTdDvRAbYe/WpE8XUWB3MisJrTc # u91Dpk4xv9WkARqt1JrgtHHmPW7ooYovaPOl+/5fNimL0V41/0Gy0xAkh69FBrbk # NDkl02ytiHCZJXY5LhHC90M/nAPIDZMZtcwJZNHuaw31fklA1NgTNkn71NGnkQn1 # 4gA6BtCxffZIWo4ZS2O6OiI3BpOr0en6E7t14avA4zkRB3RFf0IiDPzJIEvbeCea # A5VuKgLI4Hxo5Pm/YuMPEFk/QGq2L9cgVtJEH9pwCKGCGOkwghjlBgorBgEEAYI3 # AwMBMYIY1TCCGNEGCSqGSIb3DQEHAqCCGMIwghi+AgEDMQ8wDQYJYIZIAWUDBAIC # BQAwggEIBgsqhkiG9w0BCRABBKCB+ASB9TCB8gIBAQYKKwYBBAGyMQIBATBBMA0G # CWCGSAFlAwQCAgUABDCKQhtRqbBvl7ZuMQHYILsaNVWhGuTPTrYzgL5rXWaldGLv # qRciQtSflNhRdBCoQPMCFQCurw4r3xnKFhx2px6+qwx7Rb/edRgPMjAyNjA1MTEw # OTI0MDNaoHakdDByMQswCQYDVQQGEwJHQjEXMBUGA1UECBMOV2VzdCBZb3Jrc2hp # cmUxGDAWBgNVBAoTD1NlY3RpZ28gTGltaXRlZDEwMC4GA1UEAxMnU2VjdGlnbyBQ # dWJsaWMgVGltZSBTdGFtcGluZyBTaWduZXIgUjM2oIITBDCCBmIwggTKoAMCAQIC # EQCkKTtuHt3XpzQIh616TrckMA0GCSqGSIb3DQEBDAUAMFUxCzAJBgNVBAYTAkdC # MRgwFgYDVQQKEw9TZWN0aWdvIExpbWl0ZWQxLDAqBgNVBAMTI1NlY3RpZ28gUHVi # bGljIFRpbWUgU3RhbXBpbmcgQ0EgUjM2MB4XDTI1MDMyNzAwMDAwMFoXDTM2MDMy # MTIzNTk1OVowcjELMAkGA1UEBhMCR0IxFzAVBgNVBAgTDldlc3QgWW9ya3NoaXJl # MRgwFgYDVQQKEw9TZWN0aWdvIExpbWl0ZWQxMDAuBgNVBAMTJ1NlY3RpZ28gUHVi # bGljIFRpbWUgU3RhbXBpbmcgU2lnbmVyIFIzNjCCAiIwDQYJKoZIhvcNAQEBBQAD # ggIPADCCAgoCggIBANOElfRupFN48j0QS3gSBzzclIFTZ2Gsn7BjsmBF659/kpA2 # Ey7NXK3MP6JdrMBNU8wdmkf+SSIyjX++UAYWtg3Y/uDRDyg8RxHeHRJ+0U1jHEyH # 5uPdk1ttiPC3x/gOxIc9P7Gn3OgW7DQc4x07exZ4DX4XyaGDq5LoEmk/BdCM1Iel # VMKB3WA6YpZ/XYdJ9JueOXeQObSQ/dohQCGyh0FhmwkDWKZaqQBWrBwZ++zqlt+z # /QYTgEnZo6dyIo2IhXXANFkCHutL8765NBxvolXMFWY8/reTnFxk3MajgM5NX6wz # WdWsPJxYRhLxtJLSUJJ5yWRNw+NBqH1ezvFs4GgJ2ZqFJ+Dwqbx9+rw+F2gBdgo4 # j7CVomP49sS7CbqsdybbiOGpB9DJhs5QVMpYV73TVV3IwLiBHBECrTgUfZVOMF0K # SEq2zk/LsfvehswavE3W4aBXJmGjgWSpcDz+6TqeTM8f1DIcgQPdz0IYgnT3yFTg # iDbFGOFNt6eCidxdR6j9x+kpcN5RwApy4pRhE10YOV/xafBvKpRuWPjOPWRBlKdm # 53kS2aMh08spx7xSEqXn4QQldCnUWRz3Lki+TgBlpwYwJUbR77DAayNwAANE7taB # rz2v+MnnogMrvvct0iwvfIA1W8kp155Lo44SIfqGmrbJP6Mn+Udr3MR2oWozAgMB # AAGjggGOMIIBijAfBgNVHSMEGDAWgBRfWO1MMXqiYUKNUoC6s2GXGaIymzAdBgNV # HQ4EFgQUiGGMoSo3ZIEoYKGbMdCM/SwCzk8wDgYDVR0PAQH/BAQDAgbAMAwGA1Ud # EwEB/wQCMAAwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwgwSgYDVR0gBEMwQTA1Bgwr # BgEEAbIxAQIBAwgwJTAjBggrBgEFBQcCARYXaHR0cHM6Ly9zZWN0aWdvLmNvbS9D # UFMwCAYGZ4EMAQQCMEoGA1UdHwRDMEEwP6A9oDuGOWh0dHA6Ly9jcmwuc2VjdGln # by5jb20vU2VjdGlnb1B1YmxpY1RpbWVTdGFtcGluZ0NBUjM2LmNybDB6BggrBgEF # BQcBAQRuMGwwRQYIKwYBBQUHMAKGOWh0dHA6Ly9jcnQuc2VjdGlnby5jb20vU2Vj # dGlnb1B1YmxpY1RpbWVTdGFtcGluZ0NBUjM2LmNydDAjBggrBgEFBQcwAYYXaHR0 # cDovL29jc3Auc2VjdGlnby5jb20wDQYJKoZIhvcNAQEMBQADggGBAAKBPqSGclEh # +WWpLj1SiuHlm8xLE0SThI2yLuq+75s11y6SceBchpnKpxWaGtXc8dya1Aq3RuW/ # /y3wMThsvT4fSba2AoSWlR67rA4fTYGMIhgzocsids0ct/pHaocLVJSwnTYxY2pE # 0hPoZAvRebctbsTqENmZHyOVjOFlwN2R3DRweFeNs4uyZN5LRJ5EnVYlcTOq3bl1 # tI5poru9WaQRWQ4eynXp7Pj0Fz4DKr86HYECRJMWiDjeV0QqAcQMFsIjJtrYTw7m # U81qf4FBc4u4swphLeKRNyn9DDrd3HIMJ+CpdhSHEGleeZ5I79YDg3B3A/fmVY2G # aMik1Vm+FajEMv4/EN2mmHf4zkOuhYZNzVm4NrWJeY4UAriLBOeVYODdA1GxFr1y # cbcUEGlUecc4RCPgYySs4d00NNuicR4a9n7idJlevAJbha/arIYMEuUqTeRRbWkh # JwMKmb9yEvppRudKyu1t6l21sIuIZqcpVH8oLWCxHS0LpDRF9Y4jijCCBhQwggP8 # oAMCAQICEHojrtpTaZYPkcg+XPTH4z8wDQYJKoZIhvcNAQEMBQAwVzELMAkGA1UE # BhMCR0IxGDAWBgNVBAoTD1NlY3RpZ28gTGltaXRlZDEuMCwGA1UEAxMlU2VjdGln # byBQdWJsaWMgVGltZSBTdGFtcGluZyBSb290IFI0NjAeFw0yMTAzMjIwMDAwMDBa # Fw0zNjAzMjEyMzU5NTlaMFUxCzAJBgNVBAYTAkdCMRgwFgYDVQQKEw9TZWN0aWdv # IExpbWl0ZWQxLDAqBgNVBAMTI1NlY3RpZ28gUHVibGljIFRpbWUgU3RhbXBpbmcg # Q0EgUjM2MIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAzZjYQ0GrboIr # 7PYzfiY05ImM0+8iEoBUPu8mr4wOgYPjoiIz5vzf7d5wu8GFK1JWN5hciN9rdqOh # bdxLcSVwnOTJmUGfAMQm4eXOls3iQwfapEFWuOsYmBKXPNSpwZAFoLGl5y1EaGGc # 5LByM8wjcbSF52/Z42YaJRsPXY545E3QAPN2mxDh0OLozhiGgYT1xtjXVfEzYBVm # fQaI5QL35cTTAjsJAp85R+KAsOfuL9Z7LFnjdcuPkZWjssMETFIueH69rxbFOUD6 # 4G+rUo7xFIdRAuDNvWBsv0iGDPGaR2nZlY24tz5fISYk1sPY4gir99aXAGnoo0vX # 3Okew4MsiyBn5ZnUDMKzUcQrpVavGacrIkmDYu/bcOUR1mVBIZ0X7P4bKf38JF7M # p7tY3LFF/h7hvBS2tgTYXlD7TnIMPrxyXCfB5yQq3FFoXRXM3/DvqQ4shoVWF/mw # wz9xoRku05iphp22fTfjKRIVpm4gFT24JKspEpM8mFa9eTgKWWCvAgMBAAGjggFc # MIIBWDAfBgNVHSMEGDAWgBT2d2rdP/0BE/8WoWyCAi/QCj0UJTAdBgNVHQ4EFgQU # X1jtTDF6omFCjVKAurNhlxmiMpswDgYDVR0PAQH/BAQDAgGGMBIGA1UdEwEB/wQI # MAYBAf8CAQAwEwYDVR0lBAwwCgYIKwYBBQUHAwgwEQYDVR0gBAowCDAGBgRVHSAA # MEwGA1UdHwRFMEMwQaA/oD2GO2h0dHA6Ly9jcmwuc2VjdGlnby5jb20vU2VjdGln # b1B1YmxpY1RpbWVTdGFtcGluZ1Jvb3RSNDYuY3JsMHwGCCsGAQUFBwEBBHAwbjBH # BggrBgEFBQcwAoY7aHR0cDovL2NydC5zZWN0aWdvLmNvbS9TZWN0aWdvUHVibGlj # VGltZVN0YW1waW5nUm9vdFI0Ni5wN2MwIwYIKwYBBQUHMAGGF2h0dHA6Ly9vY3Nw # LnNlY3RpZ28uY29tMA0GCSqGSIb3DQEBDAUAA4ICAQAS13sgrQ41WAyegR0lWP1M # LWd0r8diJiH2VVRpxqFGhnZbaF+IQ7JATGceTWOS+kgnMAzGYRzpm8jIcjlSQ8Jt # cqymKhgx1s6cFZBSfvfeoyigF8iCGlH+SVSo3HHr98NepjSFJTU5KSRKK+3nVSWY # kSVQgJlgGh3MPcz9IWN4I/n1qfDGzqHCPWZ+/Mb5vVyhgaeqxLPbBIqv6cM74Nvy # o1xNsllECJJrOvsrJQkajVz4xJwZ8blAdX5umzwFfk7K/0K3fpjgiXpqNOpXaJ+K # SRW0HdE0FSDC7+ZKJJSJx78mn+rwEyT+A3z7Ss0gT5CpTrcmhUwIw9jbvnYuYRKx # FVWjKklW3z83epDVzoWJttxFpujdrNmRwh1YZVIB2guAAjEQoF42H0BA7WBCueHV # MDyV1e4nM9K4As7PVSNvQ8LI1WRaTuGSFUd9y8F8jw22BZC6mJoB40d7SlZIYfai # ldlgpgbgtu6SDsek2L8qomG57Yp5qTqof0DwJ4Q4HsShvRl/59T4IJBovRwmqWaf # H0cIPEX7cEttS5+tXrgRtMjjTOp6A9l0D6xcKZtxnLqiTH9KPCy6xZEi0UDcMTww # 5Fl4VvoGbMG2oonuX3f1tsoHLaO/Fwkj3xVr3lDkmeUqivebQTvGkx5hGuJaSVQ+ # x60xJ/Y29RBr8Tm9XJ59AjCCBoIwggRqoAMCAQICEDbCsL18Gzrno7PdNsvJdWgw # DQYJKoZIhvcNAQEMBQAwgYgxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpOZXcgSmVy # c2V5MRQwEgYDVQQHEwtKZXJzZXkgQ2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVT # VCBOZXR3b3JrMS4wLAYDVQQDEyVVU0VSVHJ1c3QgUlNBIENlcnRpZmljYXRpb24g # QXV0aG9yaXR5MB4XDTIxMDMyMjAwMDAwMFoXDTM4MDExODIzNTk1OVowVzELMAkG # A1UEBhMCR0IxGDAWBgNVBAoTD1NlY3RpZ28gTGltaXRlZDEuMCwGA1UEAxMlU2Vj # dGlnbyBQdWJsaWMgVGltZSBTdGFtcGluZyBSb290IFI0NjCCAiIwDQYJKoZIhvcN # AQEBBQADggIPADCCAgoCggIBAIid2LlFZ50d3ei5JoGaVFTAfEkFm8xaFQ/ZlBBE # tEFAgXcUmanU5HYsyAhTXiDQkiUvpVdYqZ1uYoZEMgtHES1l1Cc6HaqZzEbOOp6Y # iTx63ywTon434aXVydmhx7Dx4IBrAou7hNGsKioIBPy5GMN7KmgYmuu4f92sKKjb # xqohUSfjk1mJlAjthgF7Hjx4vvyVDQGsd5KarLW5d73E3ThobSkob2SL48LpUR/O # 627pDchxll+bTSv1gASn/hp6IuHJorEu6EopoB1CNFp/+HpTXeNARXUmdRMKbnXW # flq+/g36NJXB35ZvxQw6zid61qmrlD/IbKJA6COw/8lFSPQwBP1ityZdwuCysCKZ # 9ZjczMqbUcLFyq6KdOpuzVDR3ZUwxDKL1wCAxgL2Mpz7eZbrb/JWXiOcNzDpQsmw # GQ6Stw8tTCqPumhLRPb7YkzM8/6NnWH3T9ClmcGSF22LEyJYNWCHrQqYubNeKolz # qUbCqhSqmr/UdUeb49zYHr7ALL8bAJyPDmubNqMtuaobKASBqP84uhqcRY/pjnYd # +V5/dcu9ieERjiRKKsxCG1t6tG9oj7liwPddXEcYGOUiWLm742st50jGwTzxbMpe # pmOP1mLnJskvZaN5e45NuzAHteORlsSuDt5t4BBRCJL+5EZnnw0ezntk9R8QJyAk # L6/bAgMBAAGjggEWMIIBEjAfBgNVHSMEGDAWgBRTeb9aqitKz1SA4dibwJ3ysgNm # yzAdBgNVHQ4EFgQU9ndq3T/9ARP/FqFsggIv0Ao9FCUwDgYDVR0PAQH/BAQDAgGG # MA8GA1UdEwEB/wQFMAMBAf8wEwYDVR0lBAwwCgYIKwYBBQUHAwgwEQYDVR0gBAow # CDAGBgRVHSAAMFAGA1UdHwRJMEcwRaBDoEGGP2h0dHA6Ly9jcmwudXNlcnRydXN0 # LmNvbS9VU0VSVHJ1c3RSU0FDZXJ0aWZpY2F0aW9uQXV0aG9yaXR5LmNybDA1Bggr # BgEFBQcBAQQpMCcwJQYIKwYBBQUHMAGGGWh0dHA6Ly9vY3NwLnVzZXJ0cnVzdC5j # b20wDQYJKoZIhvcNAQEMBQADggIBAA6+ZUHtaES45aHF1BGH5Lc7JYzrftrIF5Ht # 2PFDxKKFOct/awAEWgHQMVHol9ZLSyd/pYMbaC0IZ+XBW9xhdkkmUV/KbUOiL7g9 # 8M/yzRyqUOZ1/IY7Ay0YbMniIibJrPcgFp73WDnRDKtVutShPSZQZAdtFwXnuiWl # 8eFARK3PmLqEm9UsVX+55DbVIz33Mbhba0HUTEYv3yJ1fwKGxPBsP/MgTECimh7e # XomvMm0/GPxX2uhwCcs/YLxDnBdVVlxvDjHjO1cuwbOpkiJGHmLXXVNbsdXUC2xB # rq9fLrfe8IBsA4hopwsCj8hTuwKXJlSTrZcPRVSccP5i9U28gZ7OMzoJGlxZ5384 # OKm0r568Mo9TYrqzKeKZgFo0fj2/0iHbj55hc20jfxvK3mQi+H7xpbzxZOFGm/yV # Qkpo+ffv5gdhp+hv1GDsvJOtJinJmgGbBFZIThbqI+MHvAmMmkfb3fTxmSkop2mS # JL1Y2x/955S29Gu0gSJIkc3z30vU/iXrMpWx2tS7UVfVP+5tKuzGtgkP7d/doqDr # LF1u6Ci3TpjAZdeLLlRQZm867eVeXED58LXd1Dk6UvaAhvmWYXoiLz4JA5gPBcz7 # J311uahxCweNxE+xxxR3kT0WKzASo5G/PyDez6NHdIUKBeE3jDPs2ACc6CkJ1Sji # 4PKWVT0/MYIEkjCCBI4CAQEwajBVMQswCQYDVQQGEwJHQjEYMBYGA1UEChMPU2Vj # dGlnbyBMaW1pdGVkMSwwKgYDVQQDEyNTZWN0aWdvIFB1YmxpYyBUaW1lIFN0YW1w # aW5nIENBIFIzNgIRAKQpO24e3denNAiHrXpOtyQwDQYJYIZIAWUDBAICBQCgggH5 # MBoGCSqGSIb3DQEJAzENBgsqhkiG9w0BCRABBDAcBgkqhkiG9w0BCQUxDxcNMjYw # NTExMDkyNDAzWjA/BgkqhkiG9w0BCQQxMgQwryfB1izP3EMIGFIFjMsMuqg/TmuT # FD111C11lywx5aP9aKIlBcNV0JVzqjr+S4ejMIIBegYLKoZIhvcNAQkQAgwxggFp # MIIBZTCCAWEwFgQUOMkUgRBEtNxmPpPUdEuBQYaptbEwgYcEFMauVOR4hvF8PVUS # SIxpw0p6+cLdMG8wW6RZMFcxCzAJBgNVBAYTAkdCMRgwFgYDVQQKEw9TZWN0aWdv # IExpbWl0ZWQxLjAsBgNVBAMTJVNlY3RpZ28gUHVibGljIFRpbWUgU3RhbXBpbmcg # Um9vdCBSNDYCEHojrtpTaZYPkcg+XPTH4z8wgbwEFIU9Yy2TgoJhfNCQNcSR3pLB # QtrHMIGjMIGOpIGLMIGIMQswCQYDVQQGEwJVUzETMBEGA1UECBMKTmV3IEplcnNl # eTEUMBIGA1UEBxMLSmVyc2V5IENpdHkxHjAcBgNVBAoTFVRoZSBVU0VSVFJVU1Qg # TmV0d29yazEuMCwGA1UEAxMlVVNFUlRydXN0IFJTQSBDZXJ0aWZpY2F0aW9uIEF1 # dGhvcml0eQIQNsKwvXwbOuejs902y8l1aDANBgkqhkiG9w0BAQEFAASCAgBXuhtr # txXeudsH+5N/7IewCvLPa2AeGBlYrZ5VX2llLu27LGL0HoJVANb/UqaSFja1ai9N # stgcnHo/6KD3wOp8Jodu0ld6jaThalgqnH+WddakZ08+6sylfORyn2RrOT8tlvaZ # 2Cnv0s5XSV4Kms0nDOA9h6n1HkJYtVXleaUv3J14b+/Y5hfdt5yGPv2Jk/LaTXiS # qfuFd9OxDip82pTD/U37KuHcpfkwkv48cFuDAuKiKv58teaEYmqyWOGPJneWCx/8 # wlci0ZHwou+sxxgevtEBH3D5IofgbBnjBMunkZqPSJnmZbVG0I/pa+YOd6LVb5AU # LoiiMIapacbgmLwGcdZ1v5m/ajy7zv0cLObe9890SwVsBRr/ahwuZ+0JA1j7dRrY # SpFf0rUxGyrpEd8kOpdLuzSqElswUS4poqSSa1uWVjYLIN0fly/qrN7bLq3Xxzk4 # z/HQfHTQFWTdSw7c1rZrWG+9cedXKzR3iEu4eqagY2l7h5+DQ/7M74mn0nSR5Xzf # jTufxR3mD4NOc6/FoAmPjohpIgKWD22bVYjNxR0LO/0HKWbv0cSVYim23TgukDjA # ICZtnecfRAHHzyO3arG3XQ94thYoknzETI0ctieCX+b1U5Wj6nJEUwJvCP7tJLva # I6XVy6zW1gu7K4xD+Z8+Dpspsgc845xUuievPQ== # SIG # End signature block |