' Windows Installer database utility to merge data from another database              
' For use with Windows Scripting Host, CScript.exe or WScript.exe
' Copyright (c) Microsoft Corporation. All rights reserved.
' Demonstrates the use of the Database.Merge method and MsiDatabaseMerge API
'
Option Explicit

Const msiOpenDatabaseModeReadOnly     = 0
Const msiOpenDatabaseModeTransact     = 1
Const msiOpenDatabaseModeCreate       = 3
Const ForAppending = 8
Const ForReading = 1
Const ForWriting = 2
Const TristateTrue = -1

Dim argCount:argCount = Wscript.Arguments.Count
Dim iArg:iArg = 0
If (argCount < 2) Then
	Wscript.Echo "Windows Installer database merge utility" &_
		vbNewLine & " 1st argument is the path to MSI database (installer package)" &_
		vbNewLine & " 2nd argument is the path to database containing data to merge" &_
		vbNewLine & " 3rd argument is the optional table to contain the merge errors" &_
		vbNewLine & " If 3rd argument is not present, the table _MergeErrors is used" &_
		vbNewLine & "  and that table will be dropped after displaying its contents." &_
		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 merge data
Dim database1 : Set database1 = installer.OpenDatabase(WScript.Arguments(0), msiOpenDatabaseModeTransact) : CheckError
Dim database2 : Set database2 = installer.OpenDatabase(WScript.Arguments(1), msiOpenDatabaseModeReadOnly) : CheckError
Dim errorTable : errorTable = "_MergeErrors"
If argCount >= 3 Then errorTable = WScript.Arguments(2)
Dim hasConflicts:hasConflicts = database1.Merge(database2, errorTable) 'Old code returns void value, new returns boolean
If hasConflicts <> True Then hasConflicts = CheckError 'Temp for old Merge function that returns void
If hasConflicts <> 0 Then
	Dim message, line, view, record
	Set view = database1.OpenView("Select * FROM `" & errorTable & "`") : CheckError
	view.Execute
	Do
		Set record = view.Fetch
		If record Is Nothing Then Exit Do
		line = record.StringData(1) & " table has " & record.IntegerData(2) & " conflicts"
		If message = Empty Then message = line Else message = message & vbNewLine & line
	Loop
	Set view = Nothing
	Wscript.Echo message
End If
If argCount < 3 And hasConflicts Then database1.OpenView("DROP TABLE `" & errorTable & "`").Execute : CheckError
database1.Commit : CheckError
Quit 0

Function CheckError
	Dim message, errRec
	CheckError = 0
	If Err = 0 Then Exit Function
	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 : CheckError = errRec.IntegerData(1)
	End If
	If CheckError = 2268 Then Err.Clear : Exit Function
	Wscript.Echo message
	Wscript.Quit 2
End Function

'' SIG '' Begin signature block
'' SIG '' MIImZwYJKoZIhvcNAQcCoIImWDCCJlQCAQExDzANBglg
'' SIG '' hkgBZQMEAgEFADB3BgorBgEEAYI3AgEEoGkwZzAyBgor
'' SIG '' BgEEAYI3AgEeMCQCAQEEEE7wKRaZJ7VNj+Ws4Q8X66sC
'' SIG '' AQACAQACAQACAQACAQAwMTANBglghkgBZQMEAgEFAAQg
'' SIG '' QXX+BeRpnj5/3w9MZiLTEbzssoFPyxBqr0/6QcQWjb+g
'' 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 '' Bmrm1MbfI5qWdcUxgho+MIIaOgIBATCBlTB+MQswCQYD
'' SIG '' VQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4G
'' SIG '' A1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0
'' SIG '' IENvcnBvcmF0aW9uMSgwJgYDVQQDEx9NaWNyb3NvZnQg
'' SIG '' Q29kZSBTaWduaW5nIFBDQSAyMDEwAhMzAAAF00nvIC4d
'' SIG '' 4mrgAAAAAAXTMA0GCWCGSAFlAwQCAQUAoIHGMBkGCSqG
'' SIG '' SIb3DQEJAzEMBgorBgEEAYI3AgEEMBwGCisGAQQBgjcC
'' SIG '' AQsxDjAMBgorBgEEAYI3AgEVMC8GCSqGSIb3DQEJBDEi
'' SIG '' BCB9ZNrAIUSORGzQaD3sArrVgPFTTGrK3FiVXZNuVgrD
'' SIG '' zzBaBgorBgEEAYI3AgEMMUwwSqAkgCIATQBpAGMAcgBv
'' SIG '' AHMAbwBmAHQAIABXAGkAbgBkAG8AdwBzoSKAIGh0dHA6
'' SIG '' Ly93d3cubWljcm9zb2Z0LmNvbS93aW5kb3dzMA0GCSqG
'' SIG '' SIb3DQEBAQUABIIBADDVF3gSQ82o5yOKZk7W7elS1vac
'' SIG '' nPEo3gLN5zJW6denJxZUfO5IYm/BAAZhPbN3DgBEG+8n
'' SIG '' brtgSlzLyHTtvMlpSmiK3WWVI0XK9KpWpNHhxv16KMUH
'' SIG '' 1FbAdWU0JZ7Lq9y5Tmszj+Aa7Q4v7FQPCyeJNMSnw2nN
'' SIG '' zacwdMXMfwkan26D2cJJrkLznHiv0LN7LLnKIBCiH5tu
'' SIG '' Od3ikNFQ2M8xcJaCThLt8/qPeK6OhIDIaGgdnWOo8xts
'' SIG '' 7rExfUmcopOpk++k4uCyz6sw6/+rCcI9A8GQu9MC/8ic
'' SIG '' KYpWxsjSoMueKZYkT4W1+F4oZNC0N/IqBYFXjguCyjVT
'' SIG '' 4vXUvy+hghewMIIXrAYKKwYBBAGCNwMDATGCF5wwgheY
'' SIG '' BgkqhkiG9w0BBwKggheJMIIXhQIBAzEPMA0GCWCGSAFl
'' SIG '' AwQCAQUAMIIBWgYLKoZIhvcNAQkQAQSgggFJBIIBRTCC
'' SIG '' AUECAQEGCisGAQQBhFkKAwEwMTANBglghkgBZQMEAgEF
'' SIG '' AAQg20zWA33a3WQJ6vN71L32FYYIiguqcIacLt9p+0fd
'' SIG '' KBQCBmftJtVMGhgTMjAyNTA0MjMxNjAwMTcuNjI0WjAE
'' SIG '' gAIB9KCB2aSB1jCB0zELMAkGA1UEBhMCVVMxEzARBgNV
'' SIG '' BAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQx
'' SIG '' HjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEt
'' SIG '' MCsGA1UECxMkTWljcm9zb2Z0IElyZWxhbmQgT3BlcmF0
'' SIG '' aW9ucyBMaW1pdGVkMScwJQYDVQQLEx5uU2hpZWxkIFRT
'' SIG '' UyBFU046NTIxQS0wNUUwLUQ5NDcxJTAjBgNVBAMTHE1p
'' SIG '' Y3Jvc29mdCBUaW1lLVN0YW1wIFNlcnZpY2WgghH+MIIH
'' SIG '' KDCCBRCgAwIBAgITMwAAAgAL16p/GyoXVgABAAACADAN
'' SIG '' BgkqhkiG9w0BAQsFADB8MQswCQYDVQQGEwJVUzETMBEG
'' SIG '' A1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9u
'' SIG '' ZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9u
'' SIG '' MSYwJAYDVQQDEx1NaWNyb3NvZnQgVGltZS1TdGFtcCBQ
'' SIG '' Q0EgMjAxMDAeFw0yNDA3MjUxODMxMjFaFw0yNTEwMjIx
'' SIG '' ODMxMjFaMIHTMQswCQYDVQQGEwJVUzETMBEGA1UECBMK
'' SIG '' V2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwG
'' SIG '' A1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMS0wKwYD
'' SIG '' VQQLEyRNaWNyb3NvZnQgSXJlbGFuZCBPcGVyYXRpb25z
'' SIG '' IExpbWl0ZWQxJzAlBgNVBAsTHm5TaGllbGQgVFNTIEVT
'' SIG '' Tjo1MjFBLTA1RTAtRDk0NzElMCMGA1UEAxMcTWljcm9z
'' SIG '' b2Z0IFRpbWUtU3RhbXAgU2VydmljZTCCAiIwDQYJKoZI
'' SIG '' hvcNAQEBBQADggIPADCCAgoCggIBAK9V2mnSpD9k5Lp6
'' SIG '' Exee9/7ReyiTPQ6Ir93HL9upqp1IZr9gzOfYpBE+Fp0X
'' SIG '' 6OW4hSB3Oi6qyHqgoE/X0/xpLOVSjvdGUFtmr4fzzB55
'' SIG '' dJGX1/yOc3VaKFx23VFJD4mXzV7M1rMJi/VJVqPJs8r/
'' SIG '' S6fUwLcP6FzmEwMXWEqjgeVM89UNwPLgqTZbpkDQyRg2
'' SIG '' OnEp9DJWLpF5JQKwoaupfimK5eq/1pzql0pJwAaYIErC
'' SIG '' d96C96J5g4jfWFAKWcI5zYfTOpA2p3ks+/P2LQ/9qRqc
'' SIG '' ffy1xC6GsxFBcYcoOCnZqFhjWMHUe/4nfNYHjhEevZeX
'' SIG '' Sb+9Uv5h/i8W+i+vdp/LhJgFcOn1bxPnPMI4GGW5WQjT
'' SIG '' wMpwpw3bkS3ZNY7MAqo6jXN1/1iMwOxhrOB1EuGCKwFM
'' SIG '' fB9gPeLwzYgPAFmu2fx0sEwsiIHlW5XV2DNgbcTCqt5J
'' SIG '' 3kaE9uzUO2O5/GU2gI3uwZX47vN7KRj/0FmDWdcGM2FR
'' SIG '' kcjqXQPFpsauVfH+a+B2hvcz3MpDsiaUWcvld0RooIRZ
'' SIG '' rAiVwHDM4ju+h4p8AiIyJpwhShifyGy4x+ie3yV6kT24
'' SIG '' Ph+q2C2fFwaZlwRR+D02pGVWMQfz/hEGy+SzcNGSDPnr
'' SIG '' n8QpY1eDvpx5DPs4EsfPtOwVWTwSrJaKHm7JoSHATtO+
'' SIG '' /ZHoXImDAgMBAAGjggFJMIIBRTAdBgNVHQ4EFgQUgCUk
'' SIG '' 2r4JIyqoHucUDl59+X13dzowHwYDVR0jBBgwFoAUn6cV
'' SIG '' XQBeYl2D9OXSZacbUzUZ6XIwXwYDVR0fBFgwVjBUoFKg
'' SIG '' UIZOaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9w
'' SIG '' cy9jcmwvTWljcm9zb2Z0JTIwVGltZS1TdGFtcCUyMFBD
'' SIG '' QSUyMDIwMTAoMSkuY3JsMGwGCCsGAQUFBwEBBGAwXjBc
'' SIG '' BggrBgEFBQcwAoZQaHR0cDovL3d3dy5taWNyb3NvZnQu
'' SIG '' Y29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUaW1l
'' SIG '' LVN0YW1wJTIwUENBJTIwMjAxMCgxKS5jcnQwDAYDVR0T
'' SIG '' AQH/BAIwADAWBgNVHSUBAf8EDDAKBggrBgEFBQcDCDAO
'' SIG '' BgNVHQ8BAf8EBAMCB4AwDQYJKoZIhvcNAQELBQADggIB
'' SIG '' ACjwhvZ40bSKkPn7hAoMc1jLEDiNx71u7FfT5hFggjlp
'' SIG '' U7hgiMzYt4m3S2UtG9iAx4NMi67XVbgYtxcVXXrCF7s2
'' SIG '' MqHyHv2pUwXVeA4Yoy017QezYDp6Oxtdojt7eo8tYT0q
'' SIG '' rsxi68v9phGQcCLEqEtg/h/txwicTw8oczBaj/qZZbTw
'' SIG '' Agf0DcGe6vhxsmb97/Hrfq0GIPLBdz07lng4N3Uf85NT
'' SIG '' WsCf3XxQg2JVjXggQi7zT0AXHjGFxURSoXElMLO5hXSA
'' SIG '' w4WacasiCg9lg8BcjSBhHs5/p3eJF0bqXjRMfnkqSV8p
'' SIG '' UQ/tXeOYW+j8ziBewZHD7UbRVtsF4JIy6rU1lpQZL85d
'' SIG '' rjX2Cdwj2VWg8jA2ml4Dvh+g4q7CeCBvYpCHfeNfplg3
'' SIG '' o5I+WmJ/UDekTn6PxzR4NbYpsKRaFIr6gBbuoq1mRcOV
'' SIG '' fsi6/BS3O52zGtpRUosc7ves3Zw7DyJs9HOkrW2MoSkp
'' SIG '' TN7g0YvVFsnUiqpxG7SejJPmLsb86a5LlkCWFn6T77oP
'' SIG '' sE54qMpFcHNMkVXLHeMTM5550bWQxjElBJfbTFZ3m2Eb
'' SIG '' IcGSMiU7AYC2ZhzO6tkxSv1/feOEpCKsmNtgHLi3tBqq
'' SIG '' DXwEgiHGbc22f8z+JU9vzdKQ259n3wM42ZISPkK6q/fN
'' SIG '' 5kGVsGXa905NTGBJQ04c9g9DMIIHcTCCBVmgAwIBAgIT
'' SIG '' MwAAABXF52ueAptJmQAAAAAAFTANBgkqhkiG9w0BAQsF
'' SIG '' ADCBiDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hp
'' SIG '' bmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoT
'' SIG '' FU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEyMDAGA1UEAxMp
'' SIG '' TWljcm9zb2Z0IFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9y
'' SIG '' aXR5IDIwMTAwHhcNMjEwOTMwMTgyMjI1WhcNMzAwOTMw
'' SIG '' MTgzMjI1WjB8MQswCQYDVQQGEwJVUzETMBEGA1UECBMK
'' SIG '' V2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwG
'' SIG '' A1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYD
'' SIG '' VQQDEx1NaWNyb3NvZnQgVGltZS1TdGFtcCBQQ0EgMjAx
'' SIG '' MDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB
'' SIG '' AOThpkzntHIhC3miy9ckeb0O1YLT/e6cBwfSqWxOdcjK
'' SIG '' NVf2AX9sSuDivbk+F2Az/1xPx2b3lVNxWuJ+Slr+uDZn
'' SIG '' hUYjDLWNE893MsAQGOhgfWpSg0S3po5GawcU88V29YZQ
'' SIG '' 3MFEyHFcUTE3oAo4bo3t1w/YJlN8OWECesSq/XJprx2r
'' SIG '' rPY2vjUmZNqYO7oaezOtgFt+jBAcnVL+tuhiJdxqD89d
'' SIG '' 9P6OU8/W7IVWTe/dvI2k45GPsjksUZzpcGkNyjYtcI4x
'' SIG '' yDUoveO0hyTD4MmPfrVUj9z6BVWYbWg7mka97aSueik3
'' SIG '' rMvrg0XnRm7KMtXAhjBcTyziYrLNueKNiOSWrAFKu75x
'' SIG '' qRdbZ2De+JKRHh09/SDPc31BmkZ1zcRfNN0Sidb9pSB9
'' SIG '' fvzZnkXftnIv231fgLrbqn427DZM9ituqBJR6L8FA6PR
'' SIG '' c6ZNN3SUHDSCD/AQ8rdHGO2n6Jl8P0zbr17C89XYcz1D
'' SIG '' TsEzOUyOArxCaC4Q6oRRRuLRvWoYWmEBc8pnol7XKHYC
'' SIG '' 4jMYctenIPDC+hIK12NvDMk2ZItboKaDIV1fMHSRlJTY
'' SIG '' uVD5C4lh8zYGNRiER9vcG9H9stQcxWv2XFJRXRLbJbqv
'' SIG '' UAV6bMURHXLvjflSxIUXk8A8FdsaN8cIFRg/eKtFtvUe
'' SIG '' h17aj54WcmnGrnu3tz5q4i6tAgMBAAGjggHdMIIB2TAS
'' SIG '' BgkrBgEEAYI3FQEEBQIDAQABMCMGCSsGAQQBgjcVAgQW
'' SIG '' BBQqp1L+ZMSavoKRPEY1Kc8Q/y8E7jAdBgNVHQ4EFgQU
'' SIG '' n6cVXQBeYl2D9OXSZacbUzUZ6XIwXAYDVR0gBFUwUzBR
'' SIG '' BgwrBgEEAYI3TIN9AQEwQTA/BggrBgEFBQcCARYzaHR0
'' SIG '' cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9Eb2Nz
'' SIG '' L1JlcG9zaXRvcnkuaHRtMBMGA1UdJQQMMAoGCCsGAQUF
'' SIG '' BwMIMBkGCSsGAQQBgjcUAgQMHgoAUwB1AGIAQwBBMAsG
'' SIG '' A1UdDwQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB8GA1Ud
'' SIG '' IwQYMBaAFNX2VsuP6KJcYmjRPZSQW9fOmhjEMFYGA1Ud
'' SIG '' HwRPME0wS6BJoEeGRWh0dHA6Ly9jcmwubWljcm9zb2Z0
'' SIG '' LmNvbS9wa2kvY3JsL3Byb2R1Y3RzL01pY1Jvb0NlckF1
'' SIG '' dF8yMDEwLTA2LTIzLmNybDBaBggrBgEFBQcBAQROMEww
'' SIG '' SgYIKwYBBQUHMAKGPmh0dHA6Ly93d3cubWljcm9zb2Z0
'' SIG '' LmNvbS9wa2kvY2VydHMvTWljUm9vQ2VyQXV0XzIwMTAt
'' SIG '' MDYtMjMuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQCdVX38
'' SIG '' Kq3hLB9nATEkW+Geckv8qW/qXBS2Pk5HZHixBpOXPTEz
'' SIG '' tTnXwnE2P9pkbHzQdTltuw8x5MKP+2zRoZQYIu7pZmc6
'' SIG '' U03dmLq2HnjYNi6cqYJWAAOwBb6J6Gngugnue99qb74p
'' SIG '' y27YP0h1AdkY3m2CDPVtI1TkeFN1JFe53Z/zjj3G82jf
'' SIG '' ZfakVqr3lbYoVSfQJL1AoL8ZthISEV09J+BAljis9/kp
'' SIG '' icO8F7BUhUKz/AyeixmJ5/ALaoHCgRlCGVJ1ijbCHcNh
'' SIG '' cy4sa3tuPywJeBTpkbKpW99Jo3QMvOyRgNI95ko+ZjtP
'' SIG '' u4b6MhrZlvSP9pEB9s7GdP32THJvEKt1MMU0sHrYUP4K
'' SIG '' WN1APMdUbZ1jdEgssU5HLcEUBHG/ZPkkvnNtyo4JvbMB
'' SIG '' V0lUZNlz138eW0QBjloZkWsNn6Qo3GcZKCS6OEuabvsh
'' SIG '' VGtqRRFHqfG3rsjoiV5PndLQTHa1V1QJsWkBRH58oWFs
'' SIG '' c/4Ku+xBZj1p/cvBQUl+fpO+y/g75LcVv7TOPqUxUYS8
'' SIG '' vwLBgqJ7Fx0ViY1w/ue10CgaiQuPNtq6TPmb/wrpNPgk
'' SIG '' NWcr4A245oyZ1uEi6vAnQj0llOZ0dFtq0Z4+7X6gMTN9
'' SIG '' vMvpe784cETRkPHIqzqKOghif9lwY1NNje6CbaUFEMFx
'' SIG '' BmoQtB1VM1izoXBm8qGCA1kwggJBAgEBMIIBAaGB2aSB
'' SIG '' 1jCB0zELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hp
'' SIG '' bmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoT
'' SIG '' FU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEtMCsGA1UECxMk
'' SIG '' TWljcm9zb2Z0IElyZWxhbmQgT3BlcmF0aW9ucyBMaW1p
'' SIG '' dGVkMScwJQYDVQQLEx5uU2hpZWxkIFRTUyBFU046NTIx
'' SIG '' QS0wNUUwLUQ5NDcxJTAjBgNVBAMTHE1pY3Jvc29mdCBU
'' SIG '' aW1lLVN0YW1wIFNlcnZpY2WiIwoBATAHBgUrDgMCGgMV
'' SIG '' AIyTny2W94r4qS97Ei5VhWy61o5koIGDMIGApH4wfDEL
'' SIG '' MAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24x
'' SIG '' EDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jv
'' SIG '' c29mdCBDb3Jwb3JhdGlvbjEmMCQGA1UEAxMdTWljcm9z
'' SIG '' b2Z0IFRpbWUtU3RhbXAgUENBIDIwMTAwDQYJKoZIhvcN
'' SIG '' AQELBQACBQDrs1NsMCIYDzIwMjUwNDIzMTE1NDIwWhgP
'' SIG '' MjAyNTA0MjQxMTU0MjBaMHcwPQYKKwYBBAGEWQoEATEv
'' SIG '' MC0wCgIFAOuzU2wCAQAwCgIBAAICAWwCAf8wBwIBAAIC
'' SIG '' EnUwCgIFAOu0pOwCAQAwNgYKKwYBBAGEWQoEAjEoMCYw
'' SIG '' DAYKKwYBBAGEWQoDAqAKMAgCAQACAwehIKEKMAgCAQAC
'' SIG '' AwGGoDANBgkqhkiG9w0BAQsFAAOCAQEAkH8aF9FaPA5U
'' SIG '' OLouv2QTknE/igaLTFauPRBgROvsSHFFlPAZGv+eSqlZ
'' SIG '' /puC/qcYq9Lh6o1596Dzag7Adh5U+CWpz2brmr+3RQjm
'' SIG '' Y5e5Ae5WAeVNfGwZZFBTb1zlUxh243R3uLEhedcuMkJA
'' SIG '' 0MCY/qi+5+f9aU4GRWfElrb7XqyodHd/Es6L3cCVO5IP
'' SIG '' vxCDHTIJfwBtalGfxriBpZSbGZI48Haxwr497ytrQdF7
'' SIG '' yekWL4CVUkILMSLD0BZuY18XgpyKpVaVFn/EoMAg5Le3
'' SIG '' p06/a6qsUN6s8YD9/F2SujN8AAUXksut3x5FkRhaMdNW
'' SIG '' xzamSIjjB2ssehASfKlBJjGCBA0wggQJAgEBMIGTMHwx
'' SIG '' CzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9u
'' SIG '' MRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy
'' SIG '' b3NvZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jv
'' SIG '' c29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwAhMzAAACAAvX
'' SIG '' qn8bKhdWAAEAAAIAMA0GCWCGSAFlAwQCAQUAoIIBSjAa
'' SIG '' BgkqhkiG9w0BCQMxDQYLKoZIhvcNAQkQAQQwLwYJKoZI
'' SIG '' hvcNAQkEMSIEIJiDV9jyMEg6E1MyZZERwZVFJc2/HOK8
'' SIG '' lMNtRAFjWqAtMIH6BgsqhkiG9w0BCRACLzGB6jCB5zCB
'' SIG '' 5DCBvQQg1Mjt7DWd27qwTQxlAleDXzNoB+GlrkbnSJP/
'' SIG '' SgJP2ScwgZgwgYCkfjB8MQswCQYDVQQGEwJVUzETMBEG
'' SIG '' A1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9u
'' SIG '' ZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9u
'' SIG '' MSYwJAYDVQQDEx1NaWNyb3NvZnQgVGltZS1TdGFtcCBQ
'' SIG '' Q0EgMjAxMAITMwAAAgAL16p/GyoXVgABAAACADAiBCAQ
'' SIG '' zCp4kA7a7Sr2f9enJK7rUH4zxFRdSYtjeTXK2A+9JTAN
'' SIG '' BgkqhkiG9w0BAQsFAASCAgCjrIRLpl3AV4cyh6dqs0N7
'' SIG '' Ue3sO8SlnVLbdoxa5MfRCv+L16xtmV+3u3lvn6AyXTDN
'' SIG '' d/yPufkbs0kqYzd93/vXtFOY1/dxYyFxM92jBnZpLvub
'' SIG '' 5oUNw2COctYHfrCOf+nANPOkohvVH00bjo45d62ptcwh
'' SIG '' eQYHNvUGeyMsYNsl1ED7eYdpXVODRr+0wfefN9W18LGd
'' SIG '' 4LygZ18fAc3P2SXRxM+yRph2GkD2CaOAW6gXI4cWbDca
'' SIG '' HRKZmwXtSZPV+yrGAJiUy+5++YXFmkOIxULb9n0FwHIZ
'' SIG '' ygkLWu+/lBH7P8PsgTUryktzjXWIBuN42t67I2xCcwHV
'' SIG '' 7HsTMqyD6PXzSfBplsek0DAZNkGivqRpDI0CpHW+QqqG
'' SIG '' dOpBODusgKpvVNcmw+ukb6klk9853xdDcmGVBWEfWmDo
'' SIG '' JgUKbnXDhSOU50Wt7MtiH7K/jtkgHw/iaE4cu9VhWLMT
'' SIG '' qgM6z1VnZAi/jvh7VoxS2m693w/CllK5LKroufOBH54R
'' SIG '' FnYKdGQTrEOFjyhi0ONwghu4EUEFwLssWscA6Oam1+/R
'' SIG '' XZ4GTGJZjn3JHgnkAhfYjE2mhavN8+d5awvB/87ImCAu
'' SIG '' DZbEBOE5Othqv8lrRKK8dowEKERIKtCvnzbqjurOKuZj
'' SIG '' qhoV6de9oX1YO1irRGZkGgTcgA8yM5qN1XHEzOEMoh15cA==
'' SIG '' End signature block
