' 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 '' MIImSwYJKoZIhvcNAQcCoIImPDCCJjgCAQExDzANBglg
'' SIG '' hkgBZQMEAgEFADB3BgorBgEEAYI3AgEEoGkwZzAyBgor
'' SIG '' BgEEAYI3AgEeMCQCAQEEEE7wKRaZJ7VNj+Ws4Q8X66sC
'' SIG '' AQACAQACAQACAQACAQAwMTANBglghkgBZQMEAgEFAAQg
'' SIG '' ocXRzPIBsTOs40BugTYvo1tESbFrFB3U6AbYVQhStNmg
'' SIG '' gguBMIIFCTCCA/GgAwIBAgITMwAABdNJ7yAuHeJq4AAA
'' SIG '' AAAF0zANBgkqhkiG9w0BAQsFADB+MQswCQYDVQQGEwJV
'' SIG '' UzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMH
'' SIG '' UmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBv
'' SIG '' cmF0aW9uMSgwJgYDVQQDEx9NaWNyb3NvZnQgQ29kZSBT
'' SIG '' aWduaW5nIFBDQSAyMDEwMB4XDTI1MDIyMDE5NTA1NloX
'' SIG '' DTI1MDcwNTE5NTA1NlowfzELMAkGA1UEBhMCVVMxEzAR
'' SIG '' BgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1v
'' SIG '' bmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlv
'' SIG '' bjEpMCcGA1UEAxMgTWljcm9zb2Z0IFdpbmRvd3MgS2l0
'' SIG '' cyBQdWJsaXNoZXIwggEiMA0GCSqGSIb3DQEBAQUAA4IB
'' SIG '' DwAwggEKAoIBAQD0Wl4ckL4Pgvj/i43yTAn7hHem8aWu
'' SIG '' EGKU/7ugPTVlAoFb63FtnFhZSnP5vl25JaLdMqJjCo1v
'' SIG '' Q4nRJWDSxUj8Lt2Jv0Oc9zrFdLzW/NkvVpOh3CZtcfXp
'' SIG '' KA7xLyk9yraMcXzHwkioMnkQFkOMSJZyE11bExZQKPH0
'' SIG '' FE6UvFjTjDniFJMTZqf6NGLQGKGXsqQ7E1WLed/NtGb6
'' SIG '' snS8yDHEQULwySwn9HQRpX7BYxMTfyNGgoW4hPQy52YD
'' SIG '' ulo98Dasb2z2F+KrHXKlm7tdyrVVlHw5acFvJAWr50SC
'' SIG '' ocfcybKB3JZj0t77JyFoBHCMafhfk80PXPgMMB9ZFkEp
'' SIG '' /F83AgMBAAGjggF9MIIBeTAfBgNVHSUEGDAWBgorBgEE
'' SIG '' AYI3CgMUBggrBgEFBQcDAzAdBgNVHQ4EFgQUmdKpC9al
'' SIG '' /yLSfIRQHasNlQslk7MwVAYDVR0RBE0wS6RJMEcxLTAr
'' SIG '' BgNVBAsTJE1pY3Jvc29mdCBJcmVsYW5kIE9wZXJhdGlv
'' SIG '' bnMgTGltaXRlZDEWMBQGA1UEBRMNMjI5OTAzKzUwMzcz
'' SIG '' NjAfBgNVHSMEGDAWgBTm/F97uyIAWORyTrX0IXQjMubv
'' SIG '' rDBWBgNVHR8ETzBNMEugSaBHhkVodHRwOi8vY3JsLm1p
'' SIG '' Y3Jvc29mdC5jb20vcGtpL2NybC9wcm9kdWN0cy9NaWND
'' SIG '' b2RTaWdQQ0FfMjAxMC0wNy0wNi5jcmwwWgYIKwYBBQUH
'' SIG '' AQEETjBMMEoGCCsGAQUFBzAChj5odHRwOi8vd3d3Lm1p
'' SIG '' Y3Jvc29mdC5jb20vcGtpL2NlcnRzL01pY0NvZFNpZ1BD
'' SIG '' QV8yMDEwLTA3LTA2LmNydDAMBgNVHRMBAf8EAjAAMA0G
'' SIG '' CSqGSIb3DQEBCwUAA4IBAQAFYonDVZox/pA4fIqsspoI
'' SIG '' FCKdv6wHCMkLpv6yF09MqyeuVpwCkaxLqNi40mjBJNFZ
'' SIG '' z//arjgnGTfNWKY4o2K5MgAyEVY/eI1kLR2jle/7y5kE
'' SIG '' bmdIqZRwHfbcXOvpRK62av/MrBE9uCYjiNDXkoaFVdzh
'' SIG '' EGGCwJQsMEtuUeq4230ZFLkksf7uP8Q1oRpbJECEtBsz
'' SIG '' Je82VcRh3LFVFINbEaud49Rfc6+v0LGQp/Jv3DTeBUf3
'' SIG '' sPGAxVvFi57jd3tOU+HH/zltAOc1Lpf8XvXnaQy8WwEc
'' SIG '' 09AUvHFHE3f2WoMV2Bc05m5zBdYPcTceJHPUQGJ2G6NY
'' SIG '' Hx6edvXsQzI9MIIGcDCCBFigAwIBAgIKYQxSTAAAAAAA
'' SIG '' AzANBgkqhkiG9w0BAQsFADCBiDELMAkGA1UEBhMCVVMx
'' SIG '' EzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1Jl
'' SIG '' ZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3Jh
'' SIG '' dGlvbjEyMDAGA1UEAxMpTWljcm9zb2Z0IFJvb3QgQ2Vy
'' SIG '' dGlmaWNhdGUgQXV0aG9yaXR5IDIwMTAwHhcNMTAwNzA2
'' SIG '' MjA0MDE3WhcNMjUwNzA2MjA1MDE3WjB+MQswCQYDVQQG
'' SIG '' EwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UE
'' SIG '' BxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENv
'' SIG '' cnBvcmF0aW9uMSgwJgYDVQQDEx9NaWNyb3NvZnQgQ29k
'' SIG '' ZSBTaWduaW5nIFBDQSAyMDEwMIIBIjANBgkqhkiG9w0B
'' SIG '' AQEFAAOCAQ8AMIIBCgKCAQEA6Q5kUHlntcTj/QkATJ6U
'' SIG '' rPdWaOpE2M/FWE+ppXZ8bUW60zmStKQe+fllguQX0o/9
'' SIG '' RJwI6GWTzixVhL99COMuK6hBKxi3oktuSUxrFQfe0dLC
'' SIG '' iR5xlM21f0u0rwjYzIjWaxeUOpPOJj/s5v40mFfVHV1J
'' SIG '' 9rIqLtWFu1k/+JC0K4N0yiuzO0bj8EZJwRdmVMkcvR3E
'' SIG '' VWJXcvhnuSUgNN5dpqWVXqsogM3Vsp7lA7Vj07IUyMHI
'' SIG '' iiYKWX8H7P8O7YASNUwSpr5SW/Wm2uCLC0h31oVH1RC5
'' SIG '' xuiq7otqLQVcYMa0KlucIxxfReMaFB5vN8sZM4BqiU2j
'' SIG '' amZjeJPVMM+VHwIDAQABo4IB4zCCAd8wEAYJKwYBBAGC
'' SIG '' NxUBBAMCAQAwHQYDVR0OBBYEFOb8X3u7IgBY5HJOtfQh
'' SIG '' dCMy5u+sMBkGCSsGAQQBgjcUAgQMHgoAUwB1AGIAQwBB
'' SIG '' MAsGA1UdDwQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB8G
'' SIG '' A1UdIwQYMBaAFNX2VsuP6KJcYmjRPZSQW9fOmhjEMFYG
'' SIG '' A1UdHwRPME0wS6BJoEeGRWh0dHA6Ly9jcmwubWljcm9z
'' SIG '' b2Z0LmNvbS9wa2kvY3JsL3Byb2R1Y3RzL01pY1Jvb0Nl
'' SIG '' ckF1dF8yMDEwLTA2LTIzLmNybDBaBggrBgEFBQcBAQRO
'' SIG '' MEwwSgYIKwYBBQUHMAKGPmh0dHA6Ly93d3cubWljcm9z
'' SIG '' b2Z0LmNvbS9wa2kvY2VydHMvTWljUm9vQ2VyQXV0XzIw
'' SIG '' MTAtMDYtMjMuY3J0MIGdBgNVHSAEgZUwgZIwgY8GCSsG
'' SIG '' AQQBgjcuAzCBgTA9BggrBgEFBQcCARYxaHR0cDovL3d3
'' SIG '' dy5taWNyb3NvZnQuY29tL1BLSS9kb2NzL0NQUy9kZWZh
'' SIG '' dWx0Lmh0bTBABggrBgEFBQcCAjA0HjIgHQBMAGUAZwBh
'' SIG '' AGwAXwBQAG8AbABpAGMAeQBfAFMAdABhAHQAZQBtAGUA
'' SIG '' bgB0AC4gHTANBgkqhkiG9w0BAQsFAAOCAgEAGnTvV08p
'' SIG '' e8QWhXi4UNMi/AmdrIKX+DT/KiyXlRLl5L/Pv5PI4zSp
'' SIG '' 24G43B4AvtI1b6/lf3mVd+UC1PHr2M1OHhthosJaIxrw
'' SIG '' jKhiUUVnCOM/PB6T+DCFF8g5QKbXDrMhKeWloWmMIpPM
'' SIG '' dJjnoUdD8lOswA8waX/+0iUgbW9h098H1dlyACxphnY9
'' SIG '' UdumOUjJN2FtB91TGcun1mHCv+KDqw/ga5uV1n0oUbCJ
'' SIG '' SlGkmmzItx9KGg5pqdfcwX7RSXCqtq27ckdjF/qm1qKm
'' SIG '' huyoEESbY7ayaYkGx0aGehg/6MUdIdV7+QIjLcVBy78d
'' SIG '' TMgW77Gcf/wiS0mKbhXjpn92W9FTeZGFndXS2z1zNfM8
'' SIG '' rlSyUkdqwKoTldKOEdqZZ14yjPs3hdHcdYWch8ZaV4XC
'' SIG '' v90Nj4ybLeu07s8n07VeafqkFgQBpyRnc89NT7beBVaX
'' SIG '' evfpUk30dwVPhcbYC/GO7UIJ0Q124yNWeCImNr7KsYxu
'' SIG '' qh3khdpHM2KPpMmRM19xHkCvmGXJIuhCISWKHC1g2TeJ
'' SIG '' QYkqFg/XYTyUaGBS79ZHmaCAQO4VgXc+nOBTGBpQHTiV
'' SIG '' mx5mMxMnORd4hzbOTsNfsvU9R1O24OXbC2E9KteSLM43
'' SIG '' Wj5AQjGkHxAIwlacvyRdUQKdannSF9PawZSOB3slcUSr
'' SIG '' Bmrm1MbfI5qWdcUxghoiMIIaHgIBATCBlTB+MQswCQYD
'' SIG '' VQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4G
'' SIG '' A1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0
'' SIG '' IENvcnBvcmF0aW9uMSgwJgYDVQQDEx9NaWNyb3NvZnQg
'' SIG '' Q29kZSBTaWduaW5nIFBDQSAyMDEwAhMzAAAF00nvIC4d
'' SIG '' 4mrgAAAAAAXTMA0GCWCGSAFlAwQCAQUAoIHGMBkGCSqG
'' SIG '' SIb3DQEJAzEMBgorBgEEAYI3AgEEMBwGCisGAQQBgjcC
'' SIG '' AQsxDjAMBgorBgEEAYI3AgEVMC8GCSqGSIb3DQEJBDEi
'' SIG '' BCAtCfqj2RQ4MBMohL6yaM08VY23bHcHDmDORloFMrix
'' SIG '' uDBaBgorBgEEAYI3AgEMMUwwSqAkgCIATQBpAGMAcgBv
'' SIG '' AHMAbwBmAHQAIABXAGkAbgBkAG8AdwBzoSKAIGh0dHA6
'' SIG '' Ly93d3cubWljcm9zb2Z0LmNvbS93aW5kb3dzMA0GCSqG
'' SIG '' SIb3DQEBAQUABIIBAHp8ILK1pLqXI00op+oRjr7h/gvf
'' SIG '' BG/FyiZtiucvHNV9L+imF2buNdMalopiZqOzwlLHbBpl
'' SIG '' lM4N+yL1MAZ6MNFpzIVA0C6MGnlgqc3rm+lPw27qTXzp
'' SIG '' 5Ia7KAdQ9s00ctZqE7ApPWn6k08XmLqOZSKHhs0qPzHv
'' SIG '' WsteQ0wFLDx51xOQESuzHUPcj6C516/VNhxo0LvNTrMt
'' SIG '' RC0zpfmLWh6b6YdIPaoC/HVWS9h7bDOKCwubl/ULNkO8
'' SIG '' fAWVCraQg0s0cliFAHpT0uqn3Gq19hy75QAKX6hnvhCq
'' SIG '' sjvDW7sh97PsMFdwMM4zshuOaPTZovUPHQt/hL4DeUIL
'' SIG '' Sis/xkahgheUMIIXkAYKKwYBBAGCNwMDATGCF4Awghd8
'' SIG '' BgkqhkiG9w0BBwKgghdtMIIXaQIBAzEPMA0GCWCGSAFl
'' SIG '' AwQCAQUAMIIBUgYLKoZIhvcNAQkQAQSgggFBBIIBPTCC
'' SIG '' ATkCAQEGCisGAQQBhFkKAwEwMTANBglghkgBZQMEAgEF
'' SIG '' AAQgxkdqVGkAZ+/Cl1zwydVrplZSjInJ2XC1o1mk4M5H
'' SIG '' cXACBmf3+YPzUhgTMjAyNTA0MjMxNjAwMjIuOTE5WjAE
'' SIG '' gAIB9KCB0aSBzjCByzELMAkGA1UEBhMCVVMxEzARBgNV
'' SIG '' BAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQx
'' SIG '' HjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEl
'' SIG '' MCMGA1UECxMcTWljcm9zb2Z0IEFtZXJpY2EgT3BlcmF0
'' SIG '' aW9uczEnMCUGA1UECxMeblNoaWVsZCBUU1MgRVNOOkRD
'' SIG '' MDAtMDVFMC1EOTQ3MSUwIwYDVQQDExxNaWNyb3NvZnQg
'' SIG '' VGltZS1TdGFtcCBTZXJ2aWNloIIR6jCCByAwggUIoAMC
'' SIG '' AQICEzMAAAIDux5cADhsdMoAAQAAAgMwDQYJKoZIhvcN
'' SIG '' AQELBQAwfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldh
'' SIG '' c2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNV
'' SIG '' BAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQGA1UE
'' SIG '' AxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIwMTAw
'' SIG '' HhcNMjUwMTMwMTk0MjQ2WhcNMjYwNDIyMTk0MjQ2WjCB
'' SIG '' yzELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0
'' SIG '' b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1p
'' SIG '' Y3Jvc29mdCBDb3Jwb3JhdGlvbjElMCMGA1UECxMcTWlj
'' SIG '' cm9zb2Z0IEFtZXJpY2EgT3BlcmF0aW9uczEnMCUGA1UE
'' SIG '' CxMeblNoaWVsZCBUU1MgRVNOOkRDMDAtMDVFMC1EOTQ3
'' SIG '' MSUwIwYDVQQDExxNaWNyb3NvZnQgVGltZS1TdGFtcCBT
'' SIG '' ZXJ2aWNlMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
'' SIG '' CgKCAgEAoZdDB+cAJzsfFIfEbYnRdCdMmhQxyWB06T70
'' SIG '' Udel9SsRg2H0/D63BowiwomjrtytQ5lCFOEXOaJZ3Y2q
'' SIG '' aTbjoM8FKI+N1W2yceTxU2P2tWfNLaalT9DqCiZVJHwz
'' SIG '' 0gSxYF1o+lYGskQiDbS7FGrMtMOYMrA+yCz2bokI2nHu
'' SIG '' SsQEoyn9jFV9anxM2AW0xjRIo0kAisMMnNHmr6+BaN1/
'' SIG '' /rArrgLZE1orLFOuJPKyutI7BkQKYhEnX7h69MlgJnO4
'' SIG '' 0zjzXhgMeigi9pLaZxnoCw3dSJROgbugUsACBR6+8zsC
'' SIG '' JRaskLgntEkACwmyYbE/cvYsutUSQF7FNLtEwuWGJk0m
'' SIG '' xCO4NdHWMfFI/r4fSJy6CmAuQ6Sm99dW2FXdG8rW85X0
'' SIG '' 0bJUUyYKLZ3wgCBjC6hKpPf9lURrvZJSYtY/Z1X6smB2
'' SIG '' KzDzgV3K0GFtI5ijYzi+OwmhAKzc4QwYmtcF3SQDSqjL
'' SIG '' yfKUHtpvP3Im8gzPtQVWarjQKL/TeLSReAArY19I41zQ
'' SIG '' 1DLUmaFRUB/hZFnXz1sdbgSJHPe0fsUS7j41MqR2eQNw
'' SIG '' AC0pHuE2kQb270wWMlth3pzk+52CykzuI8OUKunMN2fc
'' SIG '' 0ykj0Og+ZcomKXrOUUdjHTLyUuHwnDyRXmlTr7lhUkPx
'' SIG '' BrVQUoYZiwfuXsMxc3aX9VLiZrjkE08CAwEAAaOCAUkw
'' SIG '' ggFFMB0GA1UdDgQWBBSyKVlAfhHnkNvbFntFXc8VkBiS
'' SIG '' fTAfBgNVHSMEGDAWgBSfpxVdAF5iXYP05dJlpxtTNRnp
'' SIG '' cjBfBgNVHR8EWDBWMFSgUqBQhk5odHRwOi8vd3d3Lm1p
'' SIG '' Y3Jvc29mdC5jb20vcGtpb3BzL2NybC9NaWNyb3NvZnQl
'' SIG '' MjBUaW1lLVN0YW1wJTIwUENBJTIwMjAxMCgxKS5jcmww
'' SIG '' bAYIKwYBBQUHAQEEYDBeMFwGCCsGAQUFBzAChlBodHRw
'' SIG '' Oi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NlcnRz
'' SIG '' L01pY3Jvc29mdCUyMFRpbWUtU3RhbXAlMjBQQ0ElMjAy
'' SIG '' MDEwKDEpLmNydDAMBgNVHRMBAf8EAjAAMBYGA1UdJQEB
'' SIG '' /wQMMAoGCCsGAQUFBwMIMA4GA1UdDwEB/wQEAwIHgDAN
'' SIG '' BgkqhkiG9w0BAQsFAAOCAgEAkBDG3rA+kwtPEdKGAnUg
'' SIG '' uOdgEKxn/zvPRkOeArYBLG8c8Bg1VHJo1xXJ2iUkzXnQ
'' SIG '' SlV5AYGsEaJz9S4MR+G881Y9nljZsxiMDtRZYZXQDzhw
'' SIG '' MywRB0aEmeKXXRbWkMaGm1Pzdb1siAojetCLfOYJxeSQ
'' SIG '' +DDF8neqUvHgAyIuk7Y34Cj6LplmtARUP2hM41K3zzda
'' SIG '' +3KyvqpJi87cPxDUu83pn8seJBkYMGNVgXxapv5xZSQz
'' SIG '' 0AYnKnlN3TqfYY+1qg9EXPv+FWesEI3rCMgpL+boVDct
'' SIG '' i4TQ4tpXmLQIiBaZo3zZOBp4C7wtk4/SKzjL9tEq8puS
'' SIG '' fxYe8lgIj3hrN8gN0GqY2U7X6+zX86QSCUOMU/4nOFhl
'' SIG '' qoRpUZVQSObujo8N2cUmQi4N70QuCmMqZIfBXSFqCoq4
'' SIG '' 4nRBpV7DTqPlD/2BuSoXm4rnUwcRnnHyQrrlLKSHUYUr
'' SIG '' RwELI7/3QKlgS5YaK6tjgmj/sBYRN1j4J58eaX5b5bo6
'' SIG '' HD4LDduPvnXR65dztRRWm1vJtFJAx0igofEE8E5GDsLv
'' SIG '' fYhMQVVpW2GUc9qjiAYy/6MxIbQgdGrioX0yy3rjRgVG
'' SIG '' gc/qGWfl/VABAqDIZBE42+mHzWiNU+71QGoroQaFfyQj
'' SIG '' kE/kWGa4MpMj6c6ZsDDRQQ9b3Vv9vavZ5E1qBIXBDjtC
'' SIG '' /TcwggdxMIIFWaADAgECAhMzAAAAFcXna54Cm0mZAAAA
'' SIG '' AAAVMA0GCSqGSIb3DQEBCwUAMIGIMQswCQYDVQQGEwJV
'' SIG '' UzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMH
'' SIG '' UmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBv
'' SIG '' cmF0aW9uMTIwMAYDVQQDEylNaWNyb3NvZnQgUm9vdCBD
'' SIG '' ZXJ0aWZpY2F0ZSBBdXRob3JpdHkgMjAxMDAeFw0yMTA5
'' SIG '' MzAxODIyMjVaFw0zMDA5MzAxODMyMjVaMHwxCzAJBgNV
'' SIG '' BAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYD
'' SIG '' VQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQg
'' SIG '' Q29ycG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBU
'' SIG '' aW1lLVN0YW1wIFBDQSAyMDEwMIICIjANBgkqhkiG9w0B
'' SIG '' AQEFAAOCAg8AMIICCgKCAgEA5OGmTOe0ciELeaLL1yR5
'' SIG '' vQ7VgtP97pwHB9KpbE51yMo1V/YBf2xK4OK9uT4XYDP/
'' SIG '' XE/HZveVU3Fa4n5KWv64NmeFRiMMtY0Tz3cywBAY6GB9
'' SIG '' alKDRLemjkZrBxTzxXb1hlDcwUTIcVxRMTegCjhuje3X
'' SIG '' D9gmU3w5YQJ6xKr9cmmvHaus9ja+NSZk2pg7uhp7M62A
'' SIG '' W36MEBydUv626GIl3GoPz130/o5Tz9bshVZN7928jaTj
'' SIG '' kY+yOSxRnOlwaQ3KNi1wjjHINSi947SHJMPgyY9+tVSP
'' SIG '' 3PoFVZhtaDuaRr3tpK56KTesy+uDRedGbsoy1cCGMFxP
'' SIG '' LOJiss254o2I5JasAUq7vnGpF1tnYN74kpEeHT39IM9z
'' SIG '' fUGaRnXNxF803RKJ1v2lIH1+/NmeRd+2ci/bfV+Autuq
'' SIG '' fjbsNkz2K26oElHovwUDo9Fzpk03dJQcNIIP8BDyt0cY
'' SIG '' 7afomXw/TNuvXsLz1dhzPUNOwTM5TI4CvEJoLhDqhFFG
'' SIG '' 4tG9ahhaYQFzymeiXtcodgLiMxhy16cg8ML6EgrXY28M
'' SIG '' yTZki1ugpoMhXV8wdJGUlNi5UPkLiWHzNgY1GIRH29wb
'' SIG '' 0f2y1BzFa/ZcUlFdEtsluq9QBXpsxREdcu+N+VLEhReT
'' SIG '' wDwV2xo3xwgVGD94q0W29R6HXtqPnhZyacaue7e3Pmri
'' SIG '' Lq0CAwEAAaOCAd0wggHZMBIGCSsGAQQBgjcVAQQFAgMB
'' SIG '' AAEwIwYJKwYBBAGCNxUCBBYEFCqnUv5kxJq+gpE8RjUp
'' SIG '' zxD/LwTuMB0GA1UdDgQWBBSfpxVdAF5iXYP05dJlpxtT
'' SIG '' NRnpcjBcBgNVHSAEVTBTMFEGDCsGAQQBgjdMg30BATBB
'' SIG '' MD8GCCsGAQUFBwIBFjNodHRwOi8vd3d3Lm1pY3Jvc29m
'' SIG '' dC5jb20vcGtpb3BzL0RvY3MvUmVwb3NpdG9yeS5odG0w
'' SIG '' EwYDVR0lBAwwCgYIKwYBBQUHAwgwGQYJKwYBBAGCNxQC
'' SIG '' BAweCgBTAHUAYgBDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud
'' SIG '' EwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAU1fZWy4/oolxi
'' SIG '' aNE9lJBb186aGMQwVgYDVR0fBE8wTTBLoEmgR4ZFaHR0
'' SIG '' cDovL2NybC5taWNyb3NvZnQuY29tL3BraS9jcmwvcHJv
'' SIG '' ZHVjdHMvTWljUm9vQ2VyQXV0XzIwMTAtMDYtMjMuY3Js
'' SIG '' MFoGCCsGAQUFBwEBBE4wTDBKBggrBgEFBQcwAoY+aHR0
'' SIG '' cDovL3d3dy5taWNyb3NvZnQuY29tL3BraS9jZXJ0cy9N
'' SIG '' aWNSb29DZXJBdXRfMjAxMC0wNi0yMy5jcnQwDQYJKoZI
'' SIG '' hvcNAQELBQADggIBAJ1VffwqreEsH2cBMSRb4Z5yS/yp
'' SIG '' b+pcFLY+TkdkeLEGk5c9MTO1OdfCcTY/2mRsfNB1OW27
'' SIG '' DzHkwo/7bNGhlBgi7ulmZzpTTd2YurYeeNg2LpypglYA
'' SIG '' A7AFvonoaeC6Ce5732pvvinLbtg/SHUB2RjebYIM9W0j
'' SIG '' VOR4U3UkV7ndn/OOPcbzaN9l9qRWqveVtihVJ9AkvUCg
'' SIG '' vxm2EhIRXT0n4ECWOKz3+SmJw7wXsFSFQrP8DJ6LGYnn
'' SIG '' 8AtqgcKBGUIZUnWKNsIdw2FzLixre24/LAl4FOmRsqlb
'' SIG '' 30mjdAy87JGA0j3mSj5mO0+7hvoyGtmW9I/2kQH2zsZ0
'' SIG '' /fZMcm8Qq3UwxTSwethQ/gpY3UA8x1RtnWN0SCyxTkct
'' SIG '' wRQEcb9k+SS+c23Kjgm9swFXSVRk2XPXfx5bRAGOWhmR
'' SIG '' aw2fpCjcZxkoJLo4S5pu+yFUa2pFEUep8beuyOiJXk+d
'' SIG '' 0tBMdrVXVAmxaQFEfnyhYWxz/gq77EFmPWn9y8FBSX5+
'' SIG '' k77L+DvktxW/tM4+pTFRhLy/AsGConsXHRWJjXD+57XQ
'' SIG '' KBqJC4822rpM+Zv/Cuk0+CQ1ZyvgDbjmjJnW4SLq8CdC
'' SIG '' PSWU5nR0W2rRnj7tfqAxM328y+l7vzhwRNGQ8cirOoo6
'' SIG '' CGJ/2XBjU02N7oJtpQUQwXEGahC0HVUzWLOhcGbyoYID
'' SIG '' TTCCAjUCAQEwgfmhgdGkgc4wgcsxCzAJBgNVBAYTAlVT
'' SIG '' MRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdS
'' SIG '' ZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9y
'' SIG '' YXRpb24xJTAjBgNVBAsTHE1pY3Jvc29mdCBBbWVyaWNh
'' SIG '' IE9wZXJhdGlvbnMxJzAlBgNVBAsTHm5TaGllbGQgVFNT
'' SIG '' IEVTTjpEQzAwLTA1RTAtRDk0NzElMCMGA1UEAxMcTWlj
'' SIG '' cm9zb2Z0IFRpbWUtU3RhbXAgU2VydmljZaIjCgEBMAcG
'' SIG '' BSsOAwIaAxUAza8UV/4s+rLNZQQlxvD9SxcQ9HuggYMw
'' SIG '' gYCkfjB8MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2Fz
'' SIG '' aGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UE
'' SIG '' ChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQD
'' SIG '' Ex1NaWNyb3NvZnQgVGltZS1TdGFtcCBQQ0EgMjAxMDAN
'' SIG '' BgkqhkiG9w0BAQsFAAIFAOuy8a4wIhgPMjAyNTA0MjMw
'' SIG '' NDU3MThaGA8yMDI1MDQyNDA0NTcxOFowdDA6BgorBgEE
'' SIG '' AYRZCgQBMSwwKjAKAgUA67LxrgIBADAHAgEAAgIgCjAH
'' SIG '' AgEAAgITbzAKAgUA67RDLgIBADA2BgorBgEEAYRZCgQC
'' SIG '' MSgwJjAMBgorBgEEAYRZCgMCoAowCAIBAAIDB6EgoQow
'' SIG '' CAIBAAIDAYagMA0GCSqGSIb3DQEBCwUAA4IBAQBi7jtE
'' SIG '' VHaQqEvRy3bQVc3tqvfaj3fWKbptSawaG0N+je0TGVx/
'' SIG '' yQOW159btUt1SI8tuxXq8Qgie80NbIYv4rkpLjGbnFen
'' SIG '' IWlYqyT/RaSrf8F0wHv5aOo33Of9wS9+Cey8mLUbaNjH
'' SIG '' UpEzjdAZ9AOdRE6Ksa1FRynTOKoxQtFGfW4DC1ZRmucU
'' SIG '' SGZErS8SZ9GvGD/Dua47PDneGc9HUEZ911/f7+gN2SOE
'' SIG '' TB15IBmp6fkQtsadJ0h2PoK6SwxMy4/lbWQPfCorQQp8
'' SIG '' QhQgUS46W438VxP0cBHKYy8DnzMGhtleIIifiUS9DEKH
'' SIG '' dB4lZLSye7rjx7V6nXItuJxtVRxBMYIEDTCCBAkCAQEw
'' SIG '' gZMwfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hp
'' SIG '' bmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoT
'' SIG '' FU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQGA1UEAxMd
'' SIG '' TWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIwMTACEzMA
'' SIG '' AAIDux5cADhsdMoAAQAAAgMwDQYJYIZIAWUDBAIBBQCg
'' SIG '' ggFKMBoGCSqGSIb3DQEJAzENBgsqhkiG9w0BCRABBDAv
'' SIG '' BgkqhkiG9w0BCQQxIgQgX83j9SuNUYBvpajoPXLAyiQU
'' SIG '' 0B3hBjmIY04uDlxmAKkwgfoGCyqGSIb3DQEJEAIvMYHq
'' SIG '' MIHnMIHkMIG9BCBLA90bcZb2k8RTmWZ6UMNA5LD5lXbq
'' SIG '' OUsivYfcPvoTLTCBmDCBgKR+MHwxCzAJBgNVBAYTAlVT
'' SIG '' MRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdS
'' SIG '' ZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9y
'' SIG '' YXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0
'' SIG '' YW1wIFBDQSAyMDEwAhMzAAACA7seXAA4bHTKAAEAAAID
'' SIG '' MCIEICxOna1eA2k/8uhGZ0NYm6DdLwgTOa7qPPizjDmO
'' SIG '' 0RWcMA0GCSqGSIb3DQEBCwUABIICAE2ILDXu+QdX+rRo
'' SIG '' 39d/rr1NhBGwDolauQhWekPb0hu99fB7w2qqM4rxAHb5
'' SIG '' vlYu2vv9VvQVnYNXCMU1+NZb/+WIuJ2WIKpcKZbv+EmO
'' SIG '' a8/p0Tn8wnmluiV+5EoTUNwKy0p7b9CSXzlHK6tLPXJ0
'' SIG '' aH8taVEH8nu3oIc3UKI8AEKLsI6W6BBR2bz77OWUPxeN
'' SIG '' lEHMY2Y2mMaZE5X44kkpuC71VUyVjkZRhcGRawU7MdKA
'' SIG '' nJ4l9ZUynttTgyzRvMxHxcyXGvtGbhmmBhawoslXNpHR
'' SIG '' MREyx53wWWAE3HrMOBq4essGYvPRmE9lbyhKmR9We/mV
'' SIG '' Agc8F6KZnREy40G2HIIy/ic5BK+rYrRbRym2676woqZJ
'' SIG '' QZqq2TSXXt+8z2hyuISXGuIzBRAeKxLS4LhQNsGp6PT6
'' SIG '' juloaTUw7KTiLV2YaKIgRdLZlZ16PszzUHgIMzro39Og
'' SIG '' ozDY6JxWnwvou4SSZPAzY01gSRR6sblBmybBXs1PNNvt
'' SIG '' ukYFRueO5qnFjWLy+CuwohfxGSiHIJtl3sY/fnCU38oh
'' SIG '' 7b/r0Uauvae1uthThtpVBZmfC+cQIKUye3117xfeFs5b
'' SIG '' C2yWGJmyBGX6bSWJWfNfayDCWZuNWtbKMcRtH9FPK18x
'' SIG '' yIcK84z22SQlQLYkHbgm4n1dkB4JiV00KRc40V/4BHT3
'' SIG '' pWv9e8LX
'' SIG '' End signature block
