' Windows Installer utility to applay a transform to an installer database
' For use with Windows Scripting Host, CScript.exe or WScript.exe
' Copyright (c) Microsoft Corporation. All rights reserved.
' Demonstrates use of Database.ApplyTransform and MsiDatabaseApplyTransform
'
Option Explicit

' Error conditions that may be suppressed when applying transforms
Const msiTransformErrorAddExistingRow         = 1 'Adding a row that already exists. 
Const msiTransformErrorDeleteNonExistingRow   = 2 'Deleting a row that doesn't exist. 
Const msiTransformErrorAddExistingTable       = 4 'Adding a table that already exists. 
Const msiTransformErrorDeleteNonExistingTable = 8 'Deleting a table that doesn't exist. 
Const msiTransformErrorUpdateNonExistingRow  = 16 'Updating a row that doesn't exist. 
Const msiTransformErrorChangeCodePage       = 256 'Transform and database code pages do not match 

Const msiOpenDatabaseModeReadOnly     = 0
Const msiOpenDatabaseModeTransact     = 1
Const msiOpenDatabaseModeCreate       = 3

If (Wscript.Arguments.Count < 2) Then
	Wscript.Echo "Windows Installer database tranform application utility" &_
		vbNewLine & " 1st argument is the path to an installer database" &_
		vbNewLine & " 2nd argument is the path to the transform file to apply" &_
		vbNewLine & " 3rd argument is optional set of error conditions to suppress:" &_
		vbNewLine & "     1 = adding a row that already exists" &_
		vbNewLine & "     2 = deleting a row that doesn't exist" &_
		vbNewLine & "     4 = adding a table that already exists" &_
		vbNewLine & "     8 = deleting a table that doesn't exist" &_
		vbNewLine & "    16 = updating a row that doesn't exist" &_
		vbNewLine & "   256 = mismatch of database and transform codepages" &_
		vbNewLine &_
		vbNewLine & "Copyright (C) Microsoft Corporation.  All rights reserved."
	Wscript.Quit 1
End If

' Connect to Windows Installer object
On Error Resume Next
Dim installer : Set installer = Nothing
Set installer = Wscript.CreateObject("WindowsInstaller.Installer") : CheckError

' Open database and apply transform
Dim database : Set database = installer.OpenDatabase(Wscript.Arguments(0), msiOpenDatabaseModeTransact) : CheckError
Dim errorConditions:errorConditions = 0
If Wscript.Arguments.Count >= 3 Then errorConditions = CLng(Wscript.Arguments(2))
Database.ApplyTransform Wscript.Arguments(1), errorConditions : CheckError
Database.Commit : CheckError

Sub CheckError
	Dim message, errRec
	If Err = 0 Then Exit Sub
	message = Err.Source & " " & Hex(Err) & ": " & Err.Description
	If Not installer Is Nothing Then
		Set errRec = installer.LastErrorRecord
		If Not errRec Is Nothing Then message = message & vbNewLine & errRec.FormatText
	End If
	Wscript.Echo message
	Wscript.Quit 2
End Sub

'' SIG '' Begin signature block
'' SIG '' MIIpZQYJKoZIhvcNAQcCoIIpVjCCKVICAQExDzANBglg
'' SIG '' hkgBZQMEAgEFADB3BgorBgEEAYI3AgEEoGkwZzAyBgor
'' SIG '' BgEEAYI3AgEeMCQCAQEEEE7wKRaZJ7VNj+Ws4Q8X66sC
'' SIG '' AQACAQACAQACAQACAQAwMTANBglghkgBZQMEAgEFAAQg
'' SIG '' ocXRzPIBsTOs40BugTYvo1tESbFrFB3U6AbYVQhStNmg
'' SIG '' gg3WMIIGvTCCBKWgAwIBAgITMwAAABxIn4HfobC3dwAA
'' SIG '' AAAAHDANBgkqhkiG9w0BAQwFADCBiDELMAkGA1UEBhMC
'' SIG '' VVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
'' SIG '' B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jw
'' SIG '' b3JhdGlvbjEyMDAGA1UEAxMpTWljcm9zb2Z0IFJvb3Qg
'' SIG '' Q2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTAwHhcNMjQw
'' SIG '' ODA4MjEzNjIzWhcNMzUwNjIzMjIwNDAxWjBfMQswCQYD
'' SIG '' VQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBv
'' SIG '' cmF0aW9uMTAwLgYDVQQDEydNaWNyb3NvZnQgV2luZG93
'' SIG '' cyBDb2RlIFNpZ25pbmcgUENBIDIwMjQwggIiMA0GCSqG
'' SIG '' SIb3DQEBAQUAA4ICDwAwggIKAoICAQCafWt9J8F2Ki6u
'' SIG '' 49U0/8wrbe78VPggo/uwZIn0vwdoFyhlOzlfUl0SRj9c
'' SIG '' hbOaeo6bGIuHGMxeegFdABJphI1fME9pbz1OQYTd8Fd9
'' SIG '' B6mDyGBI+T91l39JFw/X741H9RgLVxK4ifMOwCzWlRJv
'' SIG '' UbOHjwNGbGB2gm1OZAVCUA17++oWnznEIHRQgNyN82LX
'' SIG '' 819rzsMfO7gzmgrsijkWYofXN803/kywuUGC8oVTAZw1
'' SIG '' xBwzq72sPdg0siKqXYEVqbn86gxctXoFY5KF2YW/vaWf
'' SIG '' YXlMzV014TqF83sYemMwC+H5QVpvgXNYUMhEnpxLwSc5
'' SIG '' 1ftubt4e+444DFGOOPll0OLvanXQ3v1OUngGikb74m5o
'' SIG '' uM+0EaS72bJWtAj4jlBs9NA6ObH5AtBMJbEs3zN/vAPa
'' SIG '' 7MhVToFg1T87ffDiT9hKGhDqvBhPRgqDdou/+AthQsH3
'' SIG '' 9QUgkyVmTtVnK9jLXiROlMRlfooQPJzedWDyg9nWBqHs
'' SIG '' K170cwv9R6FHkr5WX9Jn/RhxLb75GyVUUaOjwX9Jnebf
'' SIG '' O1W9ZjP3yKdXsqcmsZl5IKXAcLspbDqtpElTiecAT6Gh
'' SIG '' LLCZHjHCpxLrrvvlCnQx5UtA7bGIzdEJzrnL03UrHb4c
'' SIG '' yjkoyRd11aq/X9gveOS10+a8SiB1CBAwXDWFOgSgwx+q
'' SIG '' 36SjjgkopQIDAQABo4IBRjCCAUIwDgYDVR0PAQH/BAQD
'' SIG '' AgGGMBAGCSsGAQQBgjcVAQQDAgEAMB0GA1UdDgQWBBQe
'' SIG '' gt8O14yz1wI0gw7aq61lua+47DAZBgkrBgEEAYI3FAIE
'' SIG '' DB4KAFMAdQBiAEMAQTAPBgNVHRMBAf8EBTADAQH/MB8G
'' SIG '' A1UdIwQYMBaAFNX2VsuP6KJcYmjRPZSQW9fOmhjEMFYG
'' SIG '' A1UdHwRPME0wS6BJoEeGRWh0dHA6Ly9jcmwubWljcm9z
'' SIG '' b2Z0LmNvbS9wa2kvY3JsL3Byb2R1Y3RzL01pY1Jvb0Nl
'' SIG '' ckF1dF8yMDEwLTA2LTIzLmNybDBaBggrBgEFBQcBAQRO
'' SIG '' MEwwSgYIKwYBBQUHMAKGPmh0dHA6Ly93d3cubWljcm9z
'' SIG '' b2Z0LmNvbS9wa2kvY2VydHMvTWljUm9vQ2VyQXV0XzIw
'' SIG '' MTAtMDYtMjMuY3J0MA0GCSqGSIb3DQEBDAUAA4ICAQBD
'' SIG '' X/jfP7vplIw7XPW7aAOdkQXNF1Q0gTEATKsbueoVxwcL
'' SIG '' nLVFrNVwagwzCBQh7vXOmP1BfkzfBCII57owKSmJhz+H
'' SIG '' +BDNwEUppc66ReaMzicdAQORVL9Y5qXX/9mW6qbwsZcb
'' SIG '' /xtUeCo60ppqjx87OooMN2+0U24+wcSEvHziJMGFkIQd
'' SIG '' ny45YPtx0qwxjxSIaSCVlWpjCEe2u9jhqJ43X+Oa7KcK
'' SIG '' iB7sp2VOGr8va7gf0YYW8JvnzG/ATHnCGk5pKIcfxGWe
'' SIG '' RjVnDeqE2FtxtgTNwd2M51pJfbeLIT+tHzLnvtpLHRxl
'' SIG '' khPBFU3UphlHY9I61HOOpRlRSSEhd/zMXMZ5TXj9Socq
'' SIG '' /mc0+BLbPyO5rn6Wi5y2pczEdsyLoRjgFlrMHrG47Rc5
'' SIG '' FVBYA0dklvdNyNFypWzxAOqvHqRxifa6MYfOZ7BCnATV
'' SIG '' MOEnKevCgqkqRQWiosldbJHfpfFOdFjXjzG/Qc89DnwE
'' SIG '' mpfL+bEBvg1tNZDfiPkSlCGzOSOdMCY4h8pkBTQ7G6Gx
'' SIG '' cfSPeZghBD1O31Gd1U/xzlFW5Jl+5bSAv3kALuRjvH7v
'' SIG '' nHhEzMm726MVDOHWDQvj86KFMX5gtA7ikcAdtW1/fmnL
'' SIG '' iAZMSJuBHdztfcNVS6AO1DTlLie8+jUNlv/qu3J3zj5d
'' SIG '' kFS+KpYAm5VE9r5kKZZVdzCCBxEwggT5oAMCAQICEzMA
'' SIG '' AACHvIJuhaGuU6gAAAAAAIcwDQYJKoZIhvcNAQEMBQAw
'' SIG '' XzELMAkGA1UEBhMCVVMxHjAcBgNVBAoTFU1pY3Jvc29m
'' SIG '' dCBDb3Jwb3JhdGlvbjEwMC4GA1UEAxMnTWljcm9zb2Z0
'' SIG '' IFdpbmRvd3MgQ29kZSBTaWduaW5nIFBDQSAyMDI0MB4X
'' SIG '' DTI1MDUwODE4MjQ1NFoXDTI2MDUwNjE4MjQ1NFowdDEL
'' SIG '' MAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24x
'' SIG '' EDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jv
'' SIG '' c29mdCBDb3Jwb3JhdGlvbjEeMBwGA1UEAxMVTWljcm9z
'' SIG '' b2Z0IENvcnBvcmF0aW9uMIICIjANBgkqhkiG9w0BAQEF
'' SIG '' AAOCAg8AMIICCgKCAgEAtCb7zQqvXhNLC7dFnQK7CLbh
'' SIG '' GaW7kyNFtxFTEouj05GNcZ4mYbJvK7BM6/zYKu+x5Jyl
'' SIG '' fBmGDZFcYaacHaEIpYf0dChC12YttkKouIxFLDmIJAxz
'' SIG '' yG51BHEL22htUdoozpnv7hhPQ190QcfT5G4vE2HnNXdo
'' SIG '' g4cxf8aH8qGRz1E7y9j8w2nu53AI40QoRu5As6G0oZHD
'' SIG '' KVGT8mDFyragjAMeDgWHXgRejxn37eGdenK1gJkhBjAn
'' SIG '' F0OxFcVo9Vu0ebDqOE4pVkAUKfcmMrymFDm6YkMFIzWW
'' SIG '' +MAC3mOprJiaIKeywuTesGqy2E24cCSW5ZoWUCIWg/FA
'' SIG '' Abj9N9J1KH1ZBg6iusQv0RJzhCk57BPimkW/CQzgV1kr
'' SIG '' HDTEEke8G19jRfoSv0uHYOjVB869KdJNtMmPC2YNDjzn
'' SIG '' mx4OVnV1KpBRzQeApNmjk+K4bu2GImAXsH1WVxeP1xfw
'' SIG '' XppDCoJ0E6CbxSWCzD2TN7aLDdSFtDsNzct0b8EHxzxk
'' SIG '' NZEqqazpdeCRUyPQjvwmc4WW4HkQfWd3VnF7dUWKbjSA
'' SIG '' JDFpe4A00WMuIFoZIJsxNcdXM9YQPISmSLw9FZjYsKjd
'' SIG '' Rx0Qx59q8sZi4GYC4ZLYeCv4twkfsUoqbTZ2J6TJBNEa
'' SIG '' 3vPa+OTClB8rc9M9MqkrHsvwbCfUYZ076oja1wMtEwcC
'' SIG '' AwEAAaOCAa8wggGrMA4GA1UdDwEB/wQEAwIHgDAfBgNV
'' SIG '' HSUEGDAWBgorBgEEAYI3PQYBBggrBgEFBQcDAzAMBgNV
'' SIG '' HRMBAf8EAjAAMB0GA1UdDgQWBBQmBkeooj1VeFa1e/hy
'' SIG '' jZGQTX+kqDBFBgNVHREEPjA8pDowODEeMBwGA1UECxMV
'' SIG '' TWljcm9zb2Z0IENvcnBvcmF0aW9uMRYwFAYDVQQFEw0y
'' SIG '' MzA4NjUrNTA0NTgxMB8GA1UdIwQYMBaAFB6C3w7XjLPX
'' SIG '' AjSDDtqrrWW5r7jsMGoGA1UdHwRjMGEwX6BdoFuGWWh0
'' SIG '' dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
'' SIG '' L01pY3Jvc29mdCUyMFdpbmRvd3MlMjBDb2RlJTIwU2ln
'' SIG '' bmluZyUyMFBDQSUyMDIwMjQuY3JsMHcGCCsGAQUFBwEB
'' SIG '' BGswaTBnBggrBgEFBQcwAoZbaHR0cDovL3d3dy5taWNy
'' SIG '' b3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQl
'' SIG '' MjBXaW5kb3dzJTIwQ29kZSUyMFNpZ25pbmclMjBQQ0El
'' SIG '' MjAyMDI0LmNydDANBgkqhkiG9w0BAQwFAAOCAgEAfsvy
'' SIG '' zZE4Anv72F4x8SK0v+9/hU7oLTDhu5f37olRcN6aC2hh
'' SIG '' rXJ+yxebPP4erKM+Ek/NkHmQN8vwA75eVV3jteZkTnBC
'' SIG '' 5BWfJG3c6l058rlqQzk05ueA19l1cMUHxSMWCagYo/Kc
'' SIG '' L5TQAea9yTgTgH3oDmndTbgqD9P2gOYYLuHIt3dIvi2g
'' SIG '' VR5tkZRzOOLItSshIPEbPYP0kD0oo8ETLQ2u07Fps+xd
'' SIG '' SfT/lFd+sjpsEOI3qReYfIRVEqwid8e7RKgNK7ostsgk
'' SIG '' 9eRXGiXZ0N7WfEUVHaAif6cbQyN2MkjCwNl2C7OKh86B
'' SIG '' f0zzzbWlg076+GvqwW1GZufKVfkteI4bZEAKDvtu+f2v
'' SIG '' hEnkUhHj/fh3XtxM9OlNTESrvronEz3w4VIIEl83GgyJ
'' SIG '' p0UuohYxK8iRh4UcmWKDKYQoy5/jwSXufJ7y/x1rj+5A
'' SIG '' jG0iTmM9YIVVP5OXIE2Kqv1dxMsyKNitDLcKFEHGcoJE
'' SIG '' 3QkVL+hLahVm8bSun8jOpmwqEYLNrSnTJfBDeZ0jEV2R
'' SIG '' K7MemxujOwYE4kj+ehf/x73S8hinwEduOzbuP9Z8YHAw
'' SIG '' WVXLwico+hZmCp70BFosW2lxZabwjL2oVBVdW/9RSpNh
'' SIG '' BeJ7TEnAo8kylF0k7fHIJlX0vBQdWJGZuyLAowZLmhlm
'' SIG '' xmQSypcC8rO8KRYarzsxghrnMIIa4wIBATB2MF8xCzAJ
'' SIG '' BgNVBAYTAlVTMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29y
'' SIG '' cG9yYXRpb24xMDAuBgNVBAMTJ01pY3Jvc29mdCBXaW5k
'' SIG '' b3dzIENvZGUgU2lnbmluZyBQQ0EgMjAyNAITMwAAAIe8
'' SIG '' gm6Foa5TqAAAAAAAhzANBglghkgBZQMEAgEFAKCBqDAZ
'' SIG '' BgkqhkiG9w0BCQMxDAYKKwYBBAGCNwIBBDAvBgkqhkiG
'' SIG '' 9w0BCQQxIgQgLQn6o9kUODATKIS+smjNPFWNt2x3Bw5g
'' SIG '' zkZaBTK4sbgwWgYKKwYBBAGCNwIBDDFMMEqgJIAiAE0A
'' SIG '' aQBjAHIAbwBzAG8AZgB0ACAAVwBpAG4AZABvAHcAc6Ei
'' SIG '' gCBodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vd2luZG93
'' SIG '' czANBgkqhkiG9w0BAQEFAASCAgCKJBK+Oj4zrmSV6m7c
'' SIG '' 760VxDJzwxOf9KvUTYb1+WvEwyZvr0K0BhDvDgsJDGPZ
'' SIG '' 339Oi7+fTSOEfU0LSiZ7hyHzxlXwlNhuBuS+PUWZAxhK
'' SIG '' +t8HSSAyeuUG936Y4TsTVbb9G0e40kuVfd5yrRdxqNMv
'' SIG '' nlVYvb5dGYlk8DqGrcK85jhpcnu3VHZLzRsWYZlbVHKG
'' SIG '' U45sVZj3EgKwYHIAfmBmJVcexhWR9m76dxdqS15KgLkp
'' SIG '' QtciQlg6JpOWMOVx7eUs3MF2Lp75H66M96HIxvxBiCO6
'' SIG '' xkISf9kex3kftTmohnl9RnQ+dAW6AK7F3f70XaRF0j2x
'' SIG '' AWcFyRxdCi1B2FpEwdGwss3Q69Z3AHkrF6nAwegi2CIL
'' SIG '' 1H5cfXsI0Dd4fwHPUqDELHYlVqB2BFnMttoKQpJOfn/T
'' SIG '' aU/4ESCieIrW/SKHQVWDnSLutuLOBLh+AJhsVWYJqtXf
'' SIG '' 2lv5J0wrdzQeF4xs9fyeMdS/Wj+OSyhg0Eb65xFfsv98
'' SIG '' jmVqfZGHhk4LZDiitnx4+PYIjyLBXTywqEXxdPj0AJGC
'' SIG '' NytVd9YNGmNuPPJ9R1QoSM7p12jJ0dkSKa7PbBRNpS5M
'' SIG '' mGyo3tcFHp0s5aEYC9G5nDl2eM2Qh7/8JV1O65ckopug
'' SIG '' Qne+fl7j3nvppVOreCm/SYV9UKfVh2y+PNOADfqmzxl8
'' SIG '' 298QeqGCF5cwgheTBgorBgEEAYI3AwMBMYIXgzCCF38G
'' SIG '' CSqGSIb3DQEHAqCCF3AwghdsAgEDMQ8wDQYJYIZIAWUD
'' SIG '' BAIBBQAwggFSBgsqhkiG9w0BCRABBKCCAUEEggE9MIIB
'' SIG '' OQIBAQYKKwYBBAGEWQoDATAxMA0GCWCGSAFlAwQCAQUA
'' SIG '' BCD8RyTorNuvIiNniTOU0n6GJbHo8lGctsh+wTZUToPO
'' SIG '' YwIGaWj1WbZFGBMyMDI2MDEyNzAyMTY0OS45OTZaMASA
'' SIG '' AgH0oIHRpIHOMIHLMQswCQYDVQQGEwJVUzETMBEGA1UE
'' SIG '' CBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEe
'' SIG '' MBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSUw
'' SIG '' IwYDVQQLExxNaWNyb3NvZnQgQW1lcmljYSBPcGVyYXRp
'' SIG '' b25zMScwJQYDVQQLEx5uU2hpZWxkIFRTUyBFU046REMw
'' SIG '' MC0wNUUwLUQ5NDcxJTAjBgNVBAMTHE1pY3Jvc29mdCBU
'' SIG '' aW1lLVN0YW1wIFNlcnZpY2WgghHtMIIHIDCCBQigAwIB
'' SIG '' AgITMwAAAgO7HlwAOGx0ygABAAACAzANBgkqhkiG9w0B
'' SIG '' AQsFADB8MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2Fz
'' SIG '' aGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UE
'' SIG '' ChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQD
'' SIG '' Ex1NaWNyb3NvZnQgVGltZS1TdGFtcCBQQ0EgMjAxMDAe
'' SIG '' Fw0yNTAxMzAxOTQyNDZaFw0yNjA0MjIxOTQyNDZaMIHL
'' SIG '' MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3Rv
'' SIG '' bjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWlj
'' SIG '' cm9zb2Z0IENvcnBvcmF0aW9uMSUwIwYDVQQLExxNaWNy
'' SIG '' b3NvZnQgQW1lcmljYSBPcGVyYXRpb25zMScwJQYDVQQL
'' SIG '' Ex5uU2hpZWxkIFRTUyBFU046REMwMC0wNUUwLUQ5NDcx
'' SIG '' JTAjBgNVBAMTHE1pY3Jvc29mdCBUaW1lLVN0YW1wIFNl
'' SIG '' cnZpY2UwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK
'' SIG '' AoICAQChl0MH5wAnOx8Uh8RtidF0J0yaFDHJYHTpPvRR
'' SIG '' 16X1KxGDYfT8PrcGjCLCiaOu3K1DmUIU4Rc5olndjapp
'' SIG '' NuOgzwUoj43VbbJx5PFTY/a1Z80tpqVP0OoKJlUkfDPS
'' SIG '' BLFgXWj6VgayRCINtLsUasy0w5gysD7ILPZuiQjace5K
'' SIG '' xASjKf2MVX1qfEzYBbTGNEijSQCKwwyc0eavr4Fo3X/+
'' SIG '' sCuuAtkTWissU64k8rK60jsGRApiESdfuHr0yWAmc7jT
'' SIG '' OPNeGAx6KCL2ktpnGegLDd1IlE6Bu6BSwAIFHr7zOwIl
'' SIG '' FqyQuCe0SQALCbJhsT9y9iy61RJAXsU0u0TC5YYmTSbE
'' SIG '' I7g10dYx8Uj+vh9InLoKYC5DpKb311bYVd0bytbzlfTR
'' SIG '' slRTJgotnfCAIGMLqEqk9/2VRGu9klJi1j9nVfqyYHYr
'' SIG '' MPOBXcrQYW0jmKNjOL47CaEArNzhDBia1wXdJANKqMvJ
'' SIG '' 8pQe2m8/cibyDM+1BVZquNAov9N4tJF4ACtjX0jjXNDU
'' SIG '' MtSZoVFQH+FkWdfPWx1uBIkc97R+xRLuPjUypHZ5A3AA
'' SIG '' LSke4TaRBvbvTBYyW2HenOT7nYLKTO4jw5Qq6cw3Z9zT
'' SIG '' KSPQ6D5lyiYpes5RR2MdMvJS4fCcPJFeaVOvuWFSQ/EG
'' SIG '' tVBShhmLB+5ewzFzdpf1UuJmuOQTTwIDAQABo4IBSTCC
'' SIG '' AUUwHQYDVR0OBBYEFLIpWUB+EeeQ29sWe0VdzxWQGJJ9
'' SIG '' MB8GA1UdIwQYMBaAFJ+nFV0AXmJdg/Tl0mWnG1M1Gely
'' SIG '' MF8GA1UdHwRYMFYwVKBSoFCGTmh0dHA6Ly93d3cubWlj
'' SIG '' cm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUy
'' SIG '' MFRpbWUtU3RhbXAlMjBQQ0ElMjAyMDEwKDEpLmNybDBs
'' SIG '' BggrBgEFBQcBAQRgMF4wXAYIKwYBBQUHMAKGUGh0dHA6
'' SIG '' Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMv
'' SIG '' TWljcm9zb2Z0JTIwVGltZS1TdGFtcCUyMFBDQSUyMDIw
'' SIG '' MTAoMSkuY3J0MAwGA1UdEwEB/wQCMAAwFgYDVR0lAQH/
'' SIG '' BAwwCgYIKwYBBQUHAwgwDgYDVR0PAQH/BAQDAgeAMA0G
'' SIG '' CSqGSIb3DQEBCwUAA4ICAQCQEMbesD6TC08R0oYCdSC4
'' SIG '' 52AQrGf/O89GQ54CtgEsbxzwGDVUcmjXFcnaJSTNedBK
'' SIG '' VXkBgawRonP1LgxH4bzzVj2eWNmzGIwO1FlhldAPOHAz
'' SIG '' LBEHRoSZ4pddFtaQxoabU/N1vWyICiN60It85gnF5JD4
'' SIG '' MMXyd6pS8eADIi6TtjfgKPoumWa0BFQ/aEzjUrfPN1r7
'' SIG '' crK+qkmLztw/ENS7zemfyx4kGRgwY1WBfFqm/nFlJDPQ
'' SIG '' BicqeU3dOp9hj7WqD0Rc+/4VZ6wQjesIyCkv5uhUNy2L
'' SIG '' hNDi2leYtAiIFpmjfNk4GngLvC2Tj9IrOMv20Srym5J/
'' SIG '' Fh7yWAiPeGs3yA3QapjZTtfr7NfzpBIJQ4xT/ic4WGWq
'' SIG '' hGlRlVBI5u6Ojw3ZxSZCLg3vRC4KYypkh8FdIWoKirji
'' SIG '' dEGlXsNOo+UP/YG5KhebiudTBxGecfJCuuUspIdRhStH
'' SIG '' AQsjv/dAqWBLlhorq2OCaP+wFhE3WPgnnx5pflvlujoc
'' SIG '' PgsN24++ddHrl3O1FFabW8m0UkDHSKCh8QTwTkYOwu99
'' SIG '' iExBVWlbYZRz2qOIBjL/ozEhtCB0auKhfTLLeuNGBUaB
'' SIG '' z+oZZ+X9UAECoMhkETjb6YfNaI1T7vVAaiuhBoV/JCOQ
'' SIG '' T+RYZrgykyPpzpmwMNFBD1vdW/29q9nkTWoEhcEOO0L9
'' SIG '' NzCCB3EwggVZoAMCAQICEzMAAAAVxedrngKbSZkAAAAA
'' SIG '' ABUwDQYJKoZIhvcNAQELBQAwgYgxCzAJBgNVBAYTAlVT
'' SIG '' MRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdS
'' SIG '' ZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9y
'' SIG '' YXRpb24xMjAwBgNVBAMTKU1pY3Jvc29mdCBSb290IENl
'' SIG '' cnRpZmljYXRlIEF1dGhvcml0eSAyMDEwMB4XDTIxMDkz
'' SIG '' MDE4MjIyNVoXDTMwMDkzMDE4MzIyNVowfDELMAkGA1UE
'' SIG '' BhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNV
'' SIG '' BAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBD
'' SIG '' b3Jwb3JhdGlvbjEmMCQGA1UEAxMdTWljcm9zb2Z0IFRp
'' SIG '' bWUtU3RhbXAgUENBIDIwMTAwggIiMA0GCSqGSIb3DQEB
'' SIG '' AQUAA4ICDwAwggIKAoICAQDk4aZM57RyIQt5osvXJHm9
'' SIG '' DtWC0/3unAcH0qlsTnXIyjVX9gF/bErg4r25PhdgM/9c
'' SIG '' T8dm95VTcVrifkpa/rg2Z4VGIwy1jRPPdzLAEBjoYH1q
'' SIG '' UoNEt6aORmsHFPPFdvWGUNzBRMhxXFExN6AKOG6N7dcP
'' SIG '' 2CZTfDlhAnrEqv1yaa8dq6z2Nr41JmTamDu6GnszrYBb
'' SIG '' fowQHJ1S/rboYiXcag/PXfT+jlPP1uyFVk3v3byNpOOR
'' SIG '' j7I5LFGc6XBpDco2LXCOMcg1KL3jtIckw+DJj361VI/c
'' SIG '' +gVVmG1oO5pGve2krnopN6zL64NF50ZuyjLVwIYwXE8s
'' SIG '' 4mKyzbnijYjklqwBSru+cakXW2dg3viSkR4dPf0gz3N9
'' SIG '' QZpGdc3EXzTdEonW/aUgfX782Z5F37ZyL9t9X4C626p+
'' SIG '' Nuw2TPYrbqgSUei/BQOj0XOmTTd0lBw0gg/wEPK3Rxjt
'' SIG '' p+iZfD9M269ewvPV2HM9Q07BMzlMjgK8QmguEOqEUUbi
'' SIG '' 0b1qGFphAXPKZ6Je1yh2AuIzGHLXpyDwwvoSCtdjbwzJ
'' SIG '' NmSLW6CmgyFdXzB0kZSU2LlQ+QuJYfM2BjUYhEfb3BvR
'' SIG '' /bLUHMVr9lxSUV0S2yW6r1AFemzFER1y7435UsSFF5PA
'' SIG '' PBXbGjfHCBUYP3irRbb1Hode2o+eFnJpxq57t7c+auIu
'' SIG '' rQIDAQABo4IB3TCCAdkwEgYJKwYBBAGCNxUBBAUCAwEA
'' SIG '' ATAjBgkrBgEEAYI3FQIEFgQUKqdS/mTEmr6CkTxGNSnP
'' SIG '' EP8vBO4wHQYDVR0OBBYEFJ+nFV0AXmJdg/Tl0mWnG1M1
'' SIG '' GelyMFwGA1UdIARVMFMwUQYMKwYBBAGCN0yDfQEBMEEw
'' SIG '' PwYIKwYBBQUHAgEWM2h0dHA6Ly93d3cubWljcm9zb2Z0
'' SIG '' LmNvbS9wa2lvcHMvRG9jcy9SZXBvc2l0b3J5Lmh0bTAT
'' SIG '' BgNVHSUEDDAKBggrBgEFBQcDCDAZBgkrBgEEAYI3FAIE
'' SIG '' DB4KAFMAdQBiAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0T
'' SIG '' AQH/BAUwAwEB/zAfBgNVHSMEGDAWgBTV9lbLj+iiXGJo
'' SIG '' 0T2UkFvXzpoYxDBWBgNVHR8ETzBNMEugSaBHhkVodHRw
'' SIG '' Oi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpL2NybC9wcm9k
'' SIG '' dWN0cy9NaWNSb29DZXJBdXRfMjAxMC0wNi0yMy5jcmww
'' SIG '' WgYIKwYBBQUHAQEETjBMMEoGCCsGAQUFBzAChj5odHRw
'' SIG '' Oi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpL2NlcnRzL01p
'' SIG '' Y1Jvb0NlckF1dF8yMDEwLTA2LTIzLmNydDANBgkqhkiG
'' SIG '' 9w0BAQsFAAOCAgEAnVV9/Cqt4SwfZwExJFvhnnJL/Klv
'' SIG '' 6lwUtj5OR2R4sQaTlz0xM7U518JxNj/aZGx80HU5bbsP
'' SIG '' MeTCj/ts0aGUGCLu6WZnOlNN3Zi6th542DYunKmCVgAD
'' SIG '' sAW+iehp4LoJ7nvfam++Kctu2D9IdQHZGN5tggz1bSNU
'' SIG '' 5HhTdSRXud2f8449xvNo32X2pFaq95W2KFUn0CS9QKC/
'' SIG '' GbYSEhFdPSfgQJY4rPf5KYnDvBewVIVCs/wMnosZiefw
'' SIG '' C2qBwoEZQhlSdYo2wh3DYXMuLGt7bj8sCXgU6ZGyqVvf
'' SIG '' SaN0DLzskYDSPeZKPmY7T7uG+jIa2Zb0j/aRAfbOxnT9
'' SIG '' 9kxybxCrdTDFNLB62FD+CljdQDzHVG2dY3RILLFORy3B
'' SIG '' FARxv2T5JL5zbcqOCb2zAVdJVGTZc9d/HltEAY5aGZFr
'' SIG '' DZ+kKNxnGSgkujhLmm77IVRrakURR6nxt67I6IleT53S
'' SIG '' 0Ex2tVdUCbFpAUR+fKFhbHP+CrvsQWY9af3LwUFJfn6T
'' SIG '' vsv4O+S3Fb+0zj6lMVGEvL8CwYKiexcdFYmNcP7ntdAo
'' SIG '' GokLjzbaukz5m/8K6TT4JDVnK+ANuOaMmdbhIurwJ0I9
'' SIG '' JZTmdHRbatGePu1+oDEzfbzL6Xu/OHBE0ZDxyKs6ijoI
'' SIG '' Yn/ZcGNTTY3ugm2lBRDBcQZqELQdVTNYs6FwZvKhggNQ
'' SIG '' MIICOAIBATCB+aGB0aSBzjCByzELMAkGA1UEBhMCVVMx
'' SIG '' EzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1Jl
'' SIG '' ZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3Jh
'' SIG '' dGlvbjElMCMGA1UECxMcTWljcm9zb2Z0IEFtZXJpY2Eg
'' SIG '' T3BlcmF0aW9uczEnMCUGA1UECxMeblNoaWVsZCBUU1Mg
'' SIG '' RVNOOkRDMDAtMDVFMC1EOTQ3MSUwIwYDVQQDExxNaWNy
'' SIG '' b3NvZnQgVGltZS1TdGFtcCBTZXJ2aWNloiMKAQEwBwYF
'' SIG '' Kw4DAhoDFQDNrxRX/iz6ss1lBCXG8P1LFxD0e6CBgzCB
'' SIG '' gKR+MHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNo
'' SIG '' aW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQK
'' SIG '' ExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMT
'' SIG '' HU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwMA0G
'' SIG '' CSqGSIb3DQEBCwUAAgUA7SKbDTAiGA8yMDI2MDEyNzAy
'' SIG '' MDE0OVoYDzIwMjYwMTI4MDIwMTQ5WjB3MD0GCisGAQQB
'' SIG '' hFkKBAExLzAtMAoCBQDtIpsNAgEAMAoCAQACAg4PAgH/
'' SIG '' MAcCAQACAhIlMAoCBQDtI+yNAgEAMDYGCisGAQQBhFkK
'' SIG '' BAIxKDAmMAwGCisGAQQBhFkKAwKgCjAIAgEAAgMHoSCh
'' SIG '' CjAIAgEAAgMBhqAwDQYJKoZIhvcNAQELBQADggEBAFqZ
'' SIG '' msoRR5TpB/TaRBr/01rQCBhwkVEz1ZacJeXUOPh8XDeN
'' SIG '' e3N2WRZC45NWD2L9qzg715ajYxgL8hTLM+Wp2ORP8saY
'' SIG '' oq2onwa+Ud/0hCF9XGZTLgdFRNOu0mRUbH6J+IhEzBXd
'' SIG '' tIfTv+eKlQKLDoWEiGUG250bpNZa8nL1+Z8WeYgMnT48
'' SIG '' akNRQd4B6+V8KmdKY1n3KVN2SnwXuwT0Xmkcq/JNpVUv
'' SIG '' nG34YgQk8gItvNDhW3ZZXG2usm0bgW7A19jruLxpiRTF
'' SIG '' wO2q254epTOOdExuot1c+Rul45LKpUVBOZCzBY3jaMdO
'' SIG '' 7y333qco+WtbyMQV2IjIcfvSJmMcS+oxggQNMIIECQIB
'' SIG '' ATCBkzB8MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2Fz
'' SIG '' aGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UE
'' SIG '' ChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQD
'' SIG '' Ex1NaWNyb3NvZnQgVGltZS1TdGFtcCBQQ0EgMjAxMAIT
'' SIG '' MwAAAgO7HlwAOGx0ygABAAACAzANBglghkgBZQMEAgEF
'' SIG '' AKCCAUowGgYJKoZIhvcNAQkDMQ0GCyqGSIb3DQEJEAEE
'' SIG '' MC8GCSqGSIb3DQEJBDEiBCBAyZEFsRp0LqSgEUUvdsTH
'' SIG '' ieUa9a8+HiJL8KpAkoTNjjCB+gYLKoZIhvcNAQkQAi8x
'' SIG '' geowgecwgeQwgb0EIEsD3RtxlvaTxFOZZnpQw0DksPmV
'' SIG '' duo5SyK9h9w++hMtMIGYMIGApH4wfDELMAkGA1UEBhMC
'' SIG '' VVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
'' SIG '' B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jw
'' SIG '' b3JhdGlvbjEmMCQGA1UEAxMdTWljcm9zb2Z0IFRpbWUt
'' SIG '' U3RhbXAgUENBIDIwMTACEzMAAAIDux5cADhsdMoAAQAA
'' SIG '' AgMwIgQgfwN2iAS6fVZtIlmJwKuVfvay/0+AYWIVQtPw
'' SIG '' 64m0UJYwDQYJKoZIhvcNAQELBQAEggIAUMP8lbWA9SUN
'' SIG '' j+yFayCnbZkOuxcSCfBeHzyggkIYESca8tpE9WDpADwl
'' SIG '' ghzC5V1dA/KUYQjMb+cAO1f7+B63bhfTFFd934UjV+OQ
'' SIG '' QN8W6Th0uCvtVvc24Z0yTkSWuBsayDj0ya1rZJBEcp2W
'' SIG '' 4uX3Syi1GBPmAejrA0ztIeX6R+KmWMQG6PCcyFV+04Jq
'' SIG '' T9fPEKuvxiQN1p32vLQ542uFj708A2yhryCmE3MlcGeH
'' SIG '' Tq6ZtTNIy83ftylaMzJ7AxYbF6N5/f2ZR+RbIRhb0GxR
'' SIG '' u85gv+97WHk5Q7FQYVejflgXqcMQTT0sYKhnLIbghUah
'' SIG '' 40nm8lHN2A/5Wsz81HgukXwqs5iqaQSlPkUAKwvM9NLN
'' SIG '' 8QTuWp8T3Q9O5hOvWKHBFoLPRmOgIA00oZVIX5n0zI5B
'' SIG '' JrLpfIJcIvWI8MYF81shrx7CTWPKTgd9Pah2gnxJpZZ0
'' SIG '' hFSdZX6S6snGjEDdUBwYmW64LgKyZ7nqzse44+50MwWc
'' SIG '' Ta4d7Ai6aQzjOitx2eDSG08iHRBLn9Tk5MHmZP3a2C2S
'' SIG '' 3RLKQYU4R9T99jsLWoFn7RK417GjCKXzfRF7EPuhBNiH
'' SIG '' TxIc0uzdZ93YDPoRC/LgYL+6pqRzKgRbn4tK5p1/GLAG
'' SIG '' KVCZQOrxxL+Ga0KhpnSoC6JHSnarf071xDwmU70Xceu6
'' SIG '' DbWV5qBG7NE=
'' SIG '' End signature block
