' Windows Installer utility to generate a transform from two databases
' For use with Windows Scripting Host, CScript.exe or WScript.exe
' Copyright (c) Microsoft Corporation. All rights reserved.
' Demonstrates use of Database.GenerateTransform and MsiDatabaseGenerateTransform
'
Option Explicit

Const msiOpenDatabaseModeReadOnly     = 0
Const msiOpenDatabaseModeTransact     = 1
Const msiOpenDatabaseModeCreate       = 3

If Wscript.Arguments.Count < 2 Then
	Wscript.Echo "Windows Installer database tranform generation utility" &_
		vbNewLine & " 1st argument is the path to the original installer database" &_
		vbNewLine & " 2nd argument is the path to the updated installer database" &_
		vbNewLine & " 3rd argument is the path to the transform file to generate" &_
		vbNewLine & " If the 3rd argument is omitted, the databases are only compared" &_
		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 databases and generate transform
Dim database1 : Set database1 = installer.OpenDatabase(Wscript.Arguments(0), msiOpenDatabaseModeReadOnly) : CheckError
Dim database2 : Set database2 = installer.OpenDatabase(Wscript.Arguments(1), msiOpenDatabaseModeReadOnly) : CheckError
Dim transform:transform = ""  'Simply compare if no output transform file supplied
If Wscript.Arguments.Count >= 3 Then transform = Wscript.Arguments(2)
Dim different:different = Database2.GenerateTransform(Database1, transform) : CheckError
If Not different Then Wscript.Echo "Databases are identical" Else If transform = Empty Then Wscript.Echo "Databases are different"

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 '' MIIpfgYJKoZIhvcNAQcCoIIpbzCCKWsCAQExDzANBglg
'' SIG '' hkgBZQMEAgEFADB3BgorBgEEAYI3AgEEoGkwZzAyBgor
'' SIG '' BgEEAYI3AgEeMCQCAQEEEE7wKRaZJ7VNj+Ws4Q8X66sC
'' SIG '' AQACAQACAQACAQACAQAwMTANBglghkgBZQMEAgEFAAQg
'' SIG '' LEOvI1OL4Ms+i8VD+9Lv0JnljZ8+Z42whrFijf9Ua/Cg
'' 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 '' xmQSypcC8rO8KRYarzsxghsAMIIa/AIBATB2MF8xCzAJ
'' SIG '' BgNVBAYTAlVTMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29y
'' SIG '' cG9yYXRpb24xMDAuBgNVBAMTJ01pY3Jvc29mdCBXaW5k
'' SIG '' b3dzIENvZGUgU2lnbmluZyBQQ0EgMjAyNAITMwAAAIe8
'' SIG '' gm6Foa5TqAAAAAAAhzANBglghkgBZQMEAgEFAKCBqDAZ
'' SIG '' BgkqhkiG9w0BCQMxDAYKKwYBBAGCNwIBBDAvBgkqhkiG
'' SIG '' 9w0BCQQxIgQggN866NpS7HixjtjP92kpjmQFYaHpBAuj
'' SIG '' o7+KZVwNlocwWgYKKwYBBAGCNwIBDDFMMEqgJIAiAE0A
'' SIG '' aQBjAHIAbwBzAG8AZgB0ACAAVwBpAG4AZABvAHcAc6Ei
'' SIG '' gCBodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vd2luZG93
'' SIG '' czANBgkqhkiG9w0BAQEFAASCAgBf3mvVMVyPA/zSPJwU
'' SIG '' Dyxl7kyZ/UMAV1FZKUnEcr4PCOvxhYp8GyMAr3KfgAid
'' SIG '' LbMO/oT3K6SWCPPYtFS7fh0A6w53SWeF8slVCXz6zS6f
'' SIG '' qwMlCcq3qUPe5HoJ9OJcepAJ7ftt51o1sjY60+MoCIMF
'' SIG '' UDj3/SpDAr197NnLWT+L84pQg63Te1XZfSjvsjPwc9tY
'' SIG '' +txDk35faQCJIsMeblmbMpoTnccB3szmG1Rryipkm320
'' SIG '' FqamUjfWLZzWc98odEprorjIsZ6OVLMrsvQPPU6WOD4T
'' SIG '' cJPaQSqxxuq2RK3rrL1lkA5xkHw5OFg/vFGkPQxlmW0t
'' SIG '' 7ZUPOPW2m1xJ888ijP0/UylAh17a2cv30Pj18wFguTFn
'' SIG '' b7NW2tSBkNPDUMIxb1fJDC6D/sd5D6bz2AQmbPlubbQx
'' SIG '' KliNFY11Mmad6Yd/abI9g7oz/7nzTi8MtTWw6LT6HGb1
'' SIG '' rftiJjoujZaLC6DhmMyMHWMizOgBfXgX0dLMZJYtjkQw
'' SIG '' kBNQRDl6vgBVpKvfMWTdJpV/VZGHmBzxuUZn+NY0AXY1
'' SIG '' DpcXPdLaDPNRtOCev6COI2qo5dbgynLzbierJV3+/8sm
'' SIG '' cKPbCxJKzkP7s7/C7cWG5b6CpxctYoGb7J0x7inVCHQb
'' SIG '' /ZKljMXUQ6EUFg7preiW3eyEMsl7PscQ7OcwbdFw9SHM
'' SIG '' 4lmaXqGCF7AwghesBgorBgEEAYI3AwMBMYIXnDCCF5gG
'' SIG '' CSqGSIb3DQEHAqCCF4kwgheFAgEDMQ8wDQYJYIZIAWUD
'' SIG '' BAIBBQAwggFaBgsqhkiG9w0BCRABBKCCAUkEggFFMIIB
'' SIG '' QQIBAQYKKwYBBAGEWQoDATAxMA0GCWCGSAFlAwQCAQUA
'' SIG '' BCBnGTrU9aJIazPXmxOnosyq9PjHhCOq+3cTVxpFhWFd
'' SIG '' pgIGaXOK4hWmGBMyMDI2MDEyNzAyMTY0OS4zMzRaMASA
'' SIG '' AgH0oIHZpIHWMIHTMQswCQYDVQQGEwJVUzETMBEGA1UE
'' SIG '' CBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEe
'' SIG '' MBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMS0w
'' SIG '' KwYDVQQLEyRNaWNyb3NvZnQgSXJlbGFuZCBPcGVyYXRp
'' SIG '' b25zIExpbWl0ZWQxJzAlBgNVBAsTHm5TaGllbGQgVFNT
'' SIG '' IEVTTjoyRDFBLTA1RTAtRDk0NzElMCMGA1UEAxMcTWlj
'' SIG '' cm9zb2Z0IFRpbWUtU3RhbXAgU2VydmljZaCCEf4wggco
'' SIG '' MIIFEKADAgECAhMzAAACEtEIBjzKGE+qAAEAAAISMA0G
'' SIG '' CSqGSIb3DQEBCwUAMHwxCzAJBgNVBAYTAlVTMRMwEQYD
'' SIG '' VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25k
'' SIG '' MR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24x
'' SIG '' JjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBD
'' SIG '' QSAyMDEwMB4XDTI1MDgxNDE4NDgxNVoXDTI2MTExMzE4
'' SIG '' NDgxNVowgdMxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpX
'' SIG '' YXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYD
'' SIG '' VQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xLTArBgNV
'' SIG '' BAsTJE1pY3Jvc29mdCBJcmVsYW5kIE9wZXJhdGlvbnMg
'' SIG '' TGltaXRlZDEnMCUGA1UECxMeblNoaWVsZCBUU1MgRVNO
'' SIG '' OjJEMUEtMDVFMC1EOTQ3MSUwIwYDVQQDExxNaWNyb3Nv
'' SIG '' ZnQgVGltZS1TdGFtcCBTZXJ2aWNlMIICIjANBgkqhkiG
'' SIG '' 9w0BAQEFAAOCAg8AMIICCgKCAgEAr0zToDkpWQtsZekS
'' SIG '' 0cV0quDdKSTGkovvBaZH0OAIEi0O3CcO77JiX8c4Epq9
'' SIG '' uibHVZZ1W/LoufE172vkRXO+QYNtWWorECJ2AcZQ10bp
'' SIG '' AltkhZNiXlVJ8L3QzhKgrXrmMkm2J+/g81U23JPcO4wX
'' SIG '' HEftonT3wpd//936rjmwxMm7NkbsygbJf+4AVBMNr4aM
'' SIG '' PQhBd76od0KMB6WrvyEGOOU0893OFufS5EDey4n44Wga
'' SIG '' xJE0Vnv3/OOvuOw5Kp1KPqjjYJ+L9ywLuBMtcDfLpNQO
'' SIG '' /h1eFEoMrbiEM67TOfNlXfxbDz4MlsYvLioxgd2Xzey1
'' SIG '' QxrV1+i+JyVDJMiSe9gKOuzpiQQFE19DUPgsidyjLTzX
'' SIG '' EhSVLBlRor0eCVf7gC6Rfk8NY3rO2sggOL79vU5FuDKT
'' SIG '' h/sIOtcUHeHC42jBGB+tfdKC1KOBR+UlN9aOzg8mpUNI
'' SIG '' 2FgqQvirVP9ppbeMUfvp2wA9voyTiRWvDgzCxo8xlJ1n
'' SIG '' scYTHIQrmkF9j/Ca0IDmt8fvOn64nnlJOGUYZYHMC1l0
'' SIG '' xtgkYTE1ESUqqkawKk7iqbxdnLyycS+dR+zaxPudMDLr
'' SIG '' QFz8lgfy9obk0D8HC2dzhWpYNn5hdkoPEzgCqQUOp8v3
'' SIG '' Qj/sd4anyupe5KoCkjABOP3yhSQ4W9Z+DrJnhM/rbsXC
'' SIG '' 7oTv26cCAwEAAaOCAUkwggFFMB0GA1UdDgQWBBRSBblS
'' SIG '' xb5cYKYOwvd/VfoXOfu33jAfBgNVHSMEGDAWgBSfpxVd
'' SIG '' AF5iXYP05dJlpxtTNRnpcjBfBgNVHR8EWDBWMFSgUqBQ
'' SIG '' hk5odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3Bz
'' SIG '' L2NybC9NaWNyb3NvZnQlMjBUaW1lLVN0YW1wJTIwUENB
'' SIG '' JTIwMjAxMCgxKS5jcmwwbAYIKwYBBQUHAQEEYDBeMFwG
'' SIG '' CCsGAQUFBzAChlBodHRwOi8vd3d3Lm1pY3Jvc29mdC5j
'' SIG '' b20vcGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRpbWUt
'' SIG '' U3RhbXAlMjBQQ0ElMjAyMDEwKDEpLmNydDAMBgNVHRMB
'' SIG '' Af8EAjAAMBYGA1UdJQEB/wQMMAoGCCsGAQUFBwMIMA4G
'' SIG '' A1UdDwEB/wQEAwIHgDANBgkqhkiG9w0BAQsFAAOCAgEA
'' SIG '' XnSAkmX79Rc7lxS1wOozXJ7V0ou5DntVcOJplIkDjvEN
'' SIG '' 8BIQph4U+gSOLZuVReP/z9YdUiUkcPwL1PM245/kEX1E
'' SIG '' egpxNc8HDA6hKCHg0ALNEcuxnGOlgKLokXfUer1D5hiW
'' SIG '' 8PABM9R+neiteTgPaaRlJFvGTYvotc0uqGiES5hMQhL8
'' SIG '' RNFhpS9RcIWHtnQGEnrdOUvCAhs4FeViawcmLTKv+187
'' SIG '' 0c/MeTHi0QDdeR+7/Wg4qhkJ2k1iEHJdmYf8rIV0NRBZ
'' SIG '' cdRTTdHee35SXP5neNCfAkjDIuZycRud6jzPLCNLiNYz
'' SIG '' GXBswzJygj4EeSORT7wMvaFuKeRAXoXC3wwYvgIsI1zn
'' SIG '' 3DGY625Y+yZSi8UNSNHuri36Zv9a+Q4vJwDpYK36S0TB
'' SIG '' 2pf7xLiiH32nk7YK73Rg98W6fZ2INuzYzZ7Ghgvfffkj
'' SIG '' 4EUXg1E0EffY1pEqkbpDTP7h/DBqtzoPXsyw2MUh+7yv
'' SIG '' Wcq2BGZSuca6CY6X4ioMuc5PWpsmvOOli7ARNA7Ab8kK
'' SIG '' dCc2gNDLacglsweZEc9/VQB6hls/b6Kk32nkwuHExKla
'' SIG '' eoSVrKB5U9xlp1+c8J/7GJj4Rw7AiQ8tcp+WmfyD8KxX
'' SIG '' 2QlKbDi4SUjnglv4617R8+a/cDWJyaMt8279Wn7f2yMe
'' SIG '' dN7kfGIQ5SZj66RdhdlZOq8wggdxMIIFWaADAgECAhMz
'' SIG '' AAAAFcXna54Cm0mZAAAAAAAVMA0GCSqGSIb3DQEBCwUA
'' SIG '' MIGIMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGlu
'' SIG '' Z3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMV
'' SIG '' TWljcm9zb2Z0IENvcnBvcmF0aW9uMTIwMAYDVQQDEylN
'' SIG '' aWNyb3NvZnQgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3Jp
'' SIG '' dHkgMjAxMDAeFw0yMTA5MzAxODIyMjVaFw0zMDA5MzAx
'' SIG '' ODMyMjVaMHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpX
'' SIG '' YXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYD
'' SIG '' VQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJjAkBgNV
'' SIG '' BAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEw
'' SIG '' MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA
'' SIG '' 5OGmTOe0ciELeaLL1yR5vQ7VgtP97pwHB9KpbE51yMo1
'' SIG '' V/YBf2xK4OK9uT4XYDP/XE/HZveVU3Fa4n5KWv64NmeF
'' SIG '' RiMMtY0Tz3cywBAY6GB9alKDRLemjkZrBxTzxXb1hlDc
'' SIG '' wUTIcVxRMTegCjhuje3XD9gmU3w5YQJ6xKr9cmmvHaus
'' SIG '' 9ja+NSZk2pg7uhp7M62AW36MEBydUv626GIl3GoPz130
'' SIG '' /o5Tz9bshVZN7928jaTjkY+yOSxRnOlwaQ3KNi1wjjHI
'' SIG '' NSi947SHJMPgyY9+tVSP3PoFVZhtaDuaRr3tpK56KTes
'' SIG '' y+uDRedGbsoy1cCGMFxPLOJiss254o2I5JasAUq7vnGp
'' SIG '' F1tnYN74kpEeHT39IM9zfUGaRnXNxF803RKJ1v2lIH1+
'' SIG '' /NmeRd+2ci/bfV+AutuqfjbsNkz2K26oElHovwUDo9Fz
'' SIG '' pk03dJQcNIIP8BDyt0cY7afomXw/TNuvXsLz1dhzPUNO
'' SIG '' wTM5TI4CvEJoLhDqhFFG4tG9ahhaYQFzymeiXtcodgLi
'' SIG '' Mxhy16cg8ML6EgrXY28MyTZki1ugpoMhXV8wdJGUlNi5
'' SIG '' UPkLiWHzNgY1GIRH29wb0f2y1BzFa/ZcUlFdEtsluq9Q
'' SIG '' BXpsxREdcu+N+VLEhReTwDwV2xo3xwgVGD94q0W29R6H
'' SIG '' XtqPnhZyacaue7e3PmriLq0CAwEAAaOCAd0wggHZMBIG
'' SIG '' CSsGAQQBgjcVAQQFAgMBAAEwIwYJKwYBBAGCNxUCBBYE
'' SIG '' FCqnUv5kxJq+gpE8RjUpzxD/LwTuMB0GA1UdDgQWBBSf
'' SIG '' pxVdAF5iXYP05dJlpxtTNRnpcjBcBgNVHSAEVTBTMFEG
'' SIG '' DCsGAQQBgjdMg30BATBBMD8GCCsGAQUFBwIBFjNodHRw
'' SIG '' Oi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL0RvY3Mv
'' SIG '' UmVwb3NpdG9yeS5odG0wEwYDVR0lBAwwCgYIKwYBBQUH
'' SIG '' AwgwGQYJKwYBBAGCNxQCBAweCgBTAHUAYgBDAEEwCwYD
'' SIG '' VR0PBAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0j
'' SIG '' BBgwFoAU1fZWy4/oolxiaNE9lJBb186aGMQwVgYDVR0f
'' SIG '' BE8wTTBLoEmgR4ZFaHR0cDovL2NybC5taWNyb3NvZnQu
'' SIG '' Y29tL3BraS9jcmwvcHJvZHVjdHMvTWljUm9vQ2VyQXV0
'' SIG '' XzIwMTAtMDYtMjMuY3JsMFoGCCsGAQUFBwEBBE4wTDBK
'' SIG '' BggrBgEFBQcwAoY+aHR0cDovL3d3dy5taWNyb3NvZnQu
'' SIG '' Y29tL3BraS9jZXJ0cy9NaWNSb29DZXJBdXRfMjAxMC0w
'' SIG '' Ni0yMy5jcnQwDQYJKoZIhvcNAQELBQADggIBAJ1Vffwq
'' SIG '' reEsH2cBMSRb4Z5yS/ypb+pcFLY+TkdkeLEGk5c9MTO1
'' SIG '' OdfCcTY/2mRsfNB1OW27DzHkwo/7bNGhlBgi7ulmZzpT
'' SIG '' Td2YurYeeNg2LpypglYAA7AFvonoaeC6Ce5732pvvinL
'' SIG '' btg/SHUB2RjebYIM9W0jVOR4U3UkV7ndn/OOPcbzaN9l
'' SIG '' 9qRWqveVtihVJ9AkvUCgvxm2EhIRXT0n4ECWOKz3+SmJ
'' SIG '' w7wXsFSFQrP8DJ6LGYnn8AtqgcKBGUIZUnWKNsIdw2Fz
'' SIG '' Lixre24/LAl4FOmRsqlb30mjdAy87JGA0j3mSj5mO0+7
'' SIG '' hvoyGtmW9I/2kQH2zsZ0/fZMcm8Qq3UwxTSwethQ/gpY
'' SIG '' 3UA8x1RtnWN0SCyxTkctwRQEcb9k+SS+c23Kjgm9swFX
'' SIG '' SVRk2XPXfx5bRAGOWhmRaw2fpCjcZxkoJLo4S5pu+yFU
'' SIG '' a2pFEUep8beuyOiJXk+d0tBMdrVXVAmxaQFEfnyhYWxz
'' SIG '' /gq77EFmPWn9y8FBSX5+k77L+DvktxW/tM4+pTFRhLy/
'' SIG '' AsGConsXHRWJjXD+57XQKBqJC4822rpM+Zv/Cuk0+CQ1
'' SIG '' ZyvgDbjmjJnW4SLq8CdCPSWU5nR0W2rRnj7tfqAxM328
'' SIG '' y+l7vzhwRNGQ8cirOoo6CGJ/2XBjU02N7oJtpQUQwXEG
'' SIG '' ahC0HVUzWLOhcGbyoYIDWTCCAkECAQEwggEBoYHZpIHW
'' SIG '' MIHTMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGlu
'' SIG '' Z3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMV
'' SIG '' TWljcm9zb2Z0IENvcnBvcmF0aW9uMS0wKwYDVQQLEyRN
'' SIG '' aWNyb3NvZnQgSXJlbGFuZCBPcGVyYXRpb25zIExpbWl0
'' SIG '' ZWQxJzAlBgNVBAsTHm5TaGllbGQgVFNTIEVTTjoyRDFB
'' SIG '' LTA1RTAtRDk0NzElMCMGA1UEAxMcTWljcm9zb2Z0IFRp
'' SIG '' bWUtU3RhbXAgU2VydmljZaIjCgEBMAcGBSsOAwIaAxUA
'' SIG '' 5VHBr4h00EN7jUdQ33SE+qbk/8CggYMwgYCkfjB8MQsw
'' SIG '' CQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQ
'' SIG '' MA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9z
'' SIG '' b2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNyb3Nv
'' SIG '' ZnQgVGltZS1TdGFtcCBQQ0EgMjAxMDANBgkqhkiG9w0B
'' SIG '' AQsFAAIFAO0h/bYwIhgPMjAyNjAxMjYxNDUwMzBaGA8y
'' SIG '' MDI2MDEyNzE0NTAzMFowdzA9BgorBgEEAYRZCgQBMS8w
'' SIG '' LTAKAgUA7SH9tgIBADAKAgEAAgIT7AIB/zAHAgEAAgIT
'' SIG '' QzAKAgUA7SNPNgIBADA2BgorBgEEAYRZCgQCMSgwJjAM
'' SIG '' BgorBgEEAYRZCgMCoAowCAIBAAIDB6EgoQowCAIBAAID
'' SIG '' AYagMA0GCSqGSIb3DQEBCwUAA4IBAQB/ZstvNcRzvT20
'' SIG '' ka9ZtjNG0/CQu+0mpxqvPA0cc1e5P7JcBwWdU3cPGT2a
'' SIG '' RBN4VaUEmpCs37K9fPqMJY7uY8L2tyEVLFju+jGJoSks
'' SIG '' XW9VJn2Gg6VPEISxS/a6zbp5KyWG9c/qKs+n5UdSq+2X
'' SIG '' i5jz3qHYF5dGvaNP8LYTSOnPV9pSni6k6H6xXu80P8VO
'' SIG '' uIZES5d+HHp8wscE5cnhzIG3q1t2dQYxxRqotTJtLdNx
'' SIG '' 8PuI+YAvOsSqbBYqPGgNXSrm+Y0WXeha6rrgA/giCoPk
'' SIG '' C2qi6u72KqOuzasrYS8SBlLaLuqDzZDP58wrRUFGuicb
'' SIG '' gZM5Qar+2yOFdmczJHi1MYIEDTCCBAkCAQEwgZMwfDEL
'' SIG '' MAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24x
'' SIG '' EDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jv
'' SIG '' c29mdCBDb3Jwb3JhdGlvbjEmMCQGA1UEAxMdTWljcm9z
'' SIG '' b2Z0IFRpbWUtU3RhbXAgUENBIDIwMTACEzMAAAIS0QgG
'' SIG '' PMoYT6oAAQAAAhIwDQYJYIZIAWUDBAIBBQCgggFKMBoG
'' SIG '' CSqGSIb3DQEJAzENBgsqhkiG9w0BCRABBDAvBgkqhkiG
'' SIG '' 9w0BCQQxIgQgHPLHN8rQUnNLR035KF5hB9/FKHpGfdMc
'' SIG '' IMmyxGyPvCAwgfoGCyqGSIb3DQEJEAIvMYHqMIHnMIHk
'' SIG '' MIG9BCBz+X5GvO7WngknH4BZeYU+BzBL1Jy5oJ8wVlTN
'' SIG '' IxfYgzCBmDCBgKR+MHwxCzAJBgNVBAYTAlVTMRMwEQYD
'' SIG '' VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25k
'' SIG '' MR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24x
'' SIG '' JjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBD
'' SIG '' QSAyMDEwAhMzAAACEtEIBjzKGE+qAAEAAAISMCIEIPg4
'' SIG '' T34S5Nuk2++ouNBWwVYNv/a4uNs9/ihbMtxJhiXVMA0G
'' SIG '' CSqGSIb3DQEBCwUABIICADlkekgIAY4HRdJINjmitOBH
'' SIG '' gHanGjJ4FCSC5oLkeEabm8QBpPBSXNX9M0wpfc9us2oN
'' SIG '' KyNWTwYdzGCOCszqPKn05skd9VehuW8r7QH8HXTWLvr5
'' SIG '' 3659C4v9WoeVmIpP3J895mkZbd2f3M/A4nrYTA+Z8Q+J
'' SIG '' +SQfBjd2FD89m2CN0acTdNJ/R7CC6N4D5ePByWZ6lKO4
'' SIG '' WO3e1YKhsfYLjEEuDAkj9f8MzQxvEc9AfDs2pbHigPnP
'' SIG '' 2++NHlVVZ4XvuXebPBRvLxlqRfbUT0QOo+3lQRmXCu8O
'' SIG '' L6dkwN+YlJvMtujBGkneaGQF6Enuyu8IAbiaw/wcbA61
'' SIG '' HENatkHVivxvnorOhZHE8R4nJeiLWnLN0ehMiDBlmFsB
'' SIG '' ssSInE4+NZ7Ud4+ybCyq/XNtzJk39p2nMnQu/Lo06N3W
'' SIG '' /D7QzE9nMsaD8W8zFjF2/JsD1ok4pzCimorfantPPGBF
'' SIG '' jHXImSkBYGnQOSLzcX+0EDkuHaVhCW/wFSXow4GPZ8aY
'' SIG '' F07TIvK8IOJqp3SYeLvXobxOHutRr89KLNmqkoh+qbQj
'' SIG '' JsPwzXQa5E/cOerd1Wcnfr7Vm5uNsFt57nQIGAYp/W0q
'' SIG '' mTyFMJPH8uEWZD0uyi2zlzXucb6zughjtGOhK55kFc62
'' SIG '' ePQEisH2mRkeDVvqdy2XWdjEM8UBMcZd/RAadoThQ/m1
'' SIG '' End signature block
