' 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 '' MIIpigYJKoZIhvcNAQcCoIIpezCCKXcCAQExDzANBglg
'' SIG '' hkgBZQMEAgEFADB3BgorBgEEAYI3AgEEoGkwZzAyBgor
'' SIG '' BgEEAYI3AgEeMCQCAQEEEE7wKRaZJ7VNj+Ws4Q8X66sC
'' SIG '' AQACAQACAQACAQACAQAwMTANBglghkgBZQMEAgEFAAQg
'' SIG '' QXX+BeRpnj5/3w9MZiLTEbzssoFPyxBqr0/6QcQWjb+g
'' SIG '' gg3lMIIGvTCCBKWgAwIBAgITMwAAABxIn4HfobC3dwAA
'' 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+KpYAm5VE9r5kKZZVdzCCByAwggUIoAMCAQICEzMA
'' SIG '' AACG53GUuU3/CfsAAAAAAIYwDQYJKoZIhvcNAQEMBQAw
'' SIG '' XzELMAkGA1UEBhMCVVMxHjAcBgNVBAoTFU1pY3Jvc29m
'' SIG '' dCBDb3Jwb3JhdGlvbjEwMC4GA1UEAxMnTWljcm9zb2Z0
'' SIG '' IFdpbmRvd3MgQ29kZSBTaWduaW5nIFBDQSAyMDI0MB4X
'' SIG '' DTI1MDUwODE4MjQ1M1oXDTI2MDUwNjE4MjQ1M1owdDEL
'' SIG '' MAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24x
'' SIG '' EDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jv
'' SIG '' c29mdCBDb3Jwb3JhdGlvbjEeMBwGA1UEAxMVTWljcm9z
'' SIG '' b2Z0IENvcnBvcmF0aW9uMIICIjANBgkqhkiG9w0BAQEF
'' SIG '' AAOCAg8AMIICCgKCAgEApH31lbdTfYCtnKM6hm0dcBgl
'' SIG '' L0fUQXvAsjycUQQnTbg9O0ONzUD4l9K0pCaMmLq88Z3P
'' SIG '' NgSZpNFCnR+AfdvW8SZCtaYwDflp/SXnWyEzAGiD9Vps
'' SIG '' OtEgtB7OsFynkTPZ6jk25AYadsClcZA0KaZ36mUTjJ+h
'' SIG '' LS3IBH6U1EJPyB8WiG8amw50S2N9S1Gq3qEZVH9LbizX
'' SIG '' +NmQIFA8hLVTo64uaXuAFcj7Kz7iIRBy18yq6Z7qqyup
'' SIG '' 0n04LK+2+38C+Mandd64RtQ0t9CyuiXwgFcOxz2w/+5v
'' SIG '' 0UDoafmTD4ZWWXy1r56rve3Jqd49/jSkRc2AhelN1Tbr
'' SIG '' XTjfwIS5+DTdPks+jJunosQXEgEbmMFdSutr1M8k4itu
'' SIG '' di0IO10qsFA3HQk167vtm7fWh/JKLEFoA6/Itl3PY8mV
'' SIG '' I4xMDJVCs8bp6s+7UPNDs00gIM9spFtKNegk0xFePz2/
'' SIG '' 4S1hZT4V6YfoycfjJIU9/Mq939rj8FQrj/XjGUrhGnym
'' SIG '' XPkzl9RrK9gRSMMXT/CAiUx+zKb8AL+Bte7KPOMTRhr0
'' SIG '' au06UvS8urm1CeNPe9PSZ6LON3Q+315xOV5kaCC7xQ1A
'' SIG '' qN7Z7fWbIZ8e8HwLIPvKYVxznemImIExu+97NRxj7zJc
'' SIG '' GQk/hzxV+1uc4iHTUAttop9+/6q0O8HSoOFDJmSGOMMC
'' SIG '' AwEAAaOCAb4wggG6MA4GA1UdDwEB/wQEAwIHgDAfBgNV
'' SIG '' HSUEGDAWBgorBgEEAYI3PQYBBggrBgEFBQcDAzAMBgNV
'' SIG '' HRMBAf8EAjAAMB0GA1UdDgQWBBRQoxo91TqmkNu2C06l
'' SIG '' TspQcpQogDBUBgNVHREETTBLpEkwRzEtMCsGA1UECxMk
'' SIG '' TWljcm9zb2Z0IElyZWxhbmQgT3BlcmF0aW9ucyBMaW1p
'' SIG '' dGVkMRYwFAYDVQQFEw0yMzA4NjUrNTA0NTkxMB8GA1Ud
'' SIG '' IwQYMBaAFB6C3w7XjLPXAjSDDtqrrWW5r7jsMGoGA1Ud
'' SIG '' HwRjMGEwX6BdoFuGWWh0dHA6Ly93d3cubWljcm9zb2Z0
'' SIG '' LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFdpbmRv
'' SIG '' d3MlMjBDb2RlJTIwU2lnbmluZyUyMFBDQSUyMDIwMjQu
'' SIG '' Y3JsMHcGCCsGAQUFBwEBBGswaTBnBggrBgEFBQcwAoZb
'' SIG '' aHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9j
'' SIG '' ZXJ0cy9NaWNyb3NvZnQlMjBXaW5kb3dzJTIwQ29kZSUy
'' SIG '' MFNpZ25pbmclMjBQQ0ElMjAyMDI0LmNydDANBgkqhkiG
'' SIG '' 9w0BAQwFAAOCAgEADDlkX+NgsTjRleN8tgJD0V5k5QWc
'' SIG '' rczHYC/AGulvcPtVDcT/LErOmJQvQA6k5XoaoQ1SmY08
'' SIG '' 0Y/+xDcfi877vrnOLFb2H0W+IjWMLI+/fM6KBdNPEQDl
'' SIG '' bydWc+IZy9d5pMlvT3tzgNFpvNuBZZ4YK1dTdzh4o9PU
'' SIG '' tMeMV7+ARlSy+TlcZIh/PpCqrigKbzw6HXPmQ386HBMC
'' SIG '' tDkQAbNdkVw7qHjxEvFwUWf1lAjfwT5Xu2RjIGHHz1kP
'' SIG '' qkRJ+uBnCx77n3SuZmJkJSp2swNgiM78HU8j8H6k0wXl
'' SIG '' JNDJB7YmX3BPfMV1WJTvSdwO6uiu8MUrg6xBoXlcEaBG
'' SIG '' 4WDny6ecTfXBNdSy12ywxdo/DAwU42P7IoB/ZREiCPPb
'' SIG '' wEJoTcds9/+rb6LtNe3sd6RVW9qhImtzjL//uj291F2x
'' SIG '' X9BGLIT405GCAoaWEoGenLSmWcewujxXM7UaJ/iSrMg2
'' SIG '' wI45ozVdFQfeMF8+YXtFVeE6uzVELOUoHwqmasaFxi7k
'' SIG '' 2F/YH6dbTErbCam/8mD6ZijOO+iqSlbLcKM/r8GPpcHz
'' SIG '' 4XEYacSb411dLbeMee04Tv03LU3VeUs7mhPLbTn1Fsyw
'' SIG '' m3L3iidxf+nAXTupyDI+FvH6eEtsbuOQ06Fni29+futP
'' SIG '' H6f8q1SycPjF8LaKe6g8Jvuqm/zGEKMvE5PF76Ixghr9
'' SIG '' MIIa+QIBATB2MF8xCzAJBgNVBAYTAlVTMR4wHAYDVQQK
'' SIG '' ExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xMDAuBgNVBAMT
'' SIG '' J01pY3Jvc29mdCBXaW5kb3dzIENvZGUgU2lnbmluZyBQ
'' SIG '' Q0EgMjAyNAITMwAAAIbncZS5Tf8J+wAAAAAAhjANBglg
'' SIG '' hkgBZQMEAgEFAKCBqDAZBgkqhkiG9w0BCQMxDAYKKwYB
'' SIG '' BAGCNwIBBDAvBgkqhkiG9w0BCQQxIgQgfWTawCFEjkRs
'' SIG '' 0Gg97AK61YDxU0xqytxYlV2TblYKw88wWgYKKwYBBAGC
'' SIG '' NwIBDDFMMEqgJIAiAE0AaQBjAHIAbwBzAG8AZgB0ACAA
'' SIG '' VwBpAG4AZABvAHcAc6EigCBodHRwOi8vd3d3Lm1pY3Jv
'' SIG '' c29mdC5jb20vd2luZG93czANBgkqhkiG9w0BAQEFAASC
'' SIG '' AgAYlkHOVR2haJDfwCzlvDnihou1S2YIAyArNkxECk7N
'' SIG '' RccF6yoEhturAF6r3IMvxN1JKkngPXZ+ExLIvNeJpqeH
'' SIG '' KQOWCPceQ3VeMw78WsYQKB8dbyg3wBsEGTT4q+oRcvlm
'' SIG '' zX52QMeTBnVQeDQTTW8Lmhon/d5CQfOnYdcIfKcKirRA
'' SIG '' 5B0F33T2Kz/ZSA4YlvV1bGXJXaB8lBuO5GbnpVBOnLvn
'' SIG '' Cvls2BVVl9TvRN5BHKbENNQ9kaDK84kTLB3wv+yJ2jCe
'' SIG '' 2YaOHE0aa1U3Pj6sBPr9jYBxn0EvkSXI0OrDxsOH/Gya
'' SIG '' dVH2UXBSr8k0z8tTbvxzdG1BNJJg6MvRV46am71zJVoS
'' SIG '' 7eGAaZ95Wn+KdyfDHP6+FnwUvskUjfK5hM3mn2RAqfYA
'' SIG '' POfMmlKyLu2bBfc49GNiNLBI93WdZhXn+XavPjVxxncv
'' SIG '' ZrKgY5meh29ppiLXhuQbCUY6fYM9+7P5xMFp8LgoZono
'' SIG '' kd93FMkLBszsueZpp9b5Cv3thwEB4pTUSqBje/l5mxUk
'' SIG '' ug+n2b96xhLNjt7kGqXzsmVTVkHYolaBtjKlkIpnlqG5
'' SIG '' /dsxfqhVxi06RUREb5vha+/W5qzkwNGsqjLCaFdxblK7
'' SIG '' gZ1VRVGq4GOf741QEtK5jM1Mc1qRo63S3Gv9DNV60vZn
'' SIG '' nNWpLvskiLsf7Y8v7TFDoNJVsqGCF60wghepBgorBgEE
'' SIG '' AYI3AwMBMYIXmTCCF5UGCSqGSIb3DQEHAqCCF4YwgheC
'' SIG '' AgEDMQ8wDQYJYIZIAWUDBAIBBQAwggFaBgsqhkiG9w0B
'' SIG '' CRABBKCCAUkEggFFMIIBQQIBAQYKKwYBBAGEWQoDATAx
'' SIG '' MA0GCWCGSAFlAwQCAQUABCBwSm1qjJ+sRMxCzF0wDery
'' SIG '' 8V8Rv8ipUe+wPNzXi0ecowIGaXP1sqTEGBMyMDI2MDEy
'' SIG '' NzAxMjEwNS44MzZaMASAAgH0oIHZpIHWMIHTMQswCQYD
'' SIG '' VQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4G
'' SIG '' A1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0
'' SIG '' IENvcnBvcmF0aW9uMS0wKwYDVQQLEyRNaWNyb3NvZnQg
'' SIG '' SXJlbGFuZCBPcGVyYXRpb25zIExpbWl0ZWQxJzAlBgNV
'' SIG '' BAsTHm5TaGllbGQgVFNTIEVTTjo0MzFBLTA1RTAtRDk0
'' SIG '' NzElMCMGA1UEAxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAg
'' SIG '' U2VydmljZaCCEfswggcoMIIFEKADAgECAhMzAAACHUvA
'' SIG '' koc4hX45AAEAAAIdMA0GCSqGSIb3DQEBCwUAMHwxCzAJ
'' SIG '' BgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAw
'' SIG '' DgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3Nv
'' SIG '' ZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29m
'' SIG '' dCBUaW1lLVN0YW1wIFBDQSAyMDEwMB4XDTI1MDgxNDE4
'' SIG '' NDgzM1oXDTI2MTExMzE4NDgzM1owgdMxCzAJBgNVBAYT
'' SIG '' AlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQH
'' SIG '' EwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29y
'' SIG '' cG9yYXRpb24xLTArBgNVBAsTJE1pY3Jvc29mdCBJcmVs
'' SIG '' YW5kIE9wZXJhdGlvbnMgTGltaXRlZDEnMCUGA1UECxMe
'' SIG '' blNoaWVsZCBUU1MgRVNOOjQzMUEtMDVFMC1EOTQ3MSUw
'' SIG '' IwYDVQQDExxNaWNyb3NvZnQgVGltZS1TdGFtcCBTZXJ2
'' SIG '' aWNlMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKC
'' SIG '' AgEAorSgaAA8oOl4ph574zw29egUN8DDepRHLX8FM1zH
'' SIG '' NJmXG6KrSqUKwzcKafopuYdPTETTCvb9aJfESuAU0iGN
'' SIG '' UFI/D6R0kvdfpe2oPX+E3sbTQvGi4JPH5qdIYUaJ45V/
'' SIG '' 4bqe8eNvbWzpC+ZKjH193DeiI1XAI918JoQmBhlEXo/T
'' SIG '' on1721luZJgincsf5LjMY3jX84WyXUSX3dsS7h/7xVI+
'' SIG '' w1yjg7pa+0y3o/me2Tsv6UJUdSTQap5ORGSfCnclnP1z
'' SIG '' 3IiiWIWr3Vo7aIPWsgJzq3m5GxpxUHCQk8qzUhk50y/u
'' SIG '' B+LGE3WIK2C77iy9iFsSfSLUnyMEzGRDW9mXHT4PH7Oz
'' SIG '' z6CHqQEiNvwcHqlvlCh1pHQh1NXQSAqOoVBs5mi6easf
'' SIG '' 6yxWTfe5DrR79503r8pU6VqC2Y9XMRU4wH9QbYXYsIUZ
'' SIG '' 33Jmndy22W1LBDAbxBPQHCBlncGDU3BgdhVUVLe80mgg
'' SIG '' FO98FdkWho67w4kPdCTRkvdvkY8PrQYE/nQjHXCa0g7L
'' SIG '' cMttZb6ejMHfQ+tUWXv6+nZ4Ynkr2OkaxclFCw4RIYNM
'' SIG '' WD26AWbQj/WEdzga18fKtw66L5gzXPza6jFBfPJeKE3H
'' SIG '' 8QAuwpirmH4ms+5nUjNNQOmNgqJn0U1+3Yn7ClswD79Y
'' SIG '' N0r3fdbYBMDApBZJpNlK7q7HXRsCAwEAAaOCAUkwggFF
'' SIG '' MB0GA1UdDgQWBBSEWfBxNEamZtXm8gl92Yq80jfxXTAf
'' SIG '' BgNVHSMEGDAWgBSfpxVdAF5iXYP05dJlpxtTNRnpcjBf
'' SIG '' BgNVHR8EWDBWMFSgUqBQhk5odHRwOi8vd3d3Lm1pY3Jv
'' SIG '' c29mdC5jb20vcGtpb3BzL2NybC9NaWNyb3NvZnQlMjBU
'' SIG '' aW1lLVN0YW1wJTIwUENBJTIwMjAxMCgxKS5jcmwwbAYI
'' SIG '' KwYBBQUHAQEEYDBeMFwGCCsGAQUFBzAChlBodHRwOi8v
'' SIG '' d3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NlcnRzL01p
'' SIG '' Y3Jvc29mdCUyMFRpbWUtU3RhbXAlMjBQQ0ElMjAyMDEw
'' SIG '' KDEpLmNydDAMBgNVHRMBAf8EAjAAMBYGA1UdJQEB/wQM
'' SIG '' MAoGCCsGAQUFBwMIMA4GA1UdDwEB/wQEAwIHgDANBgkq
'' SIG '' hkiG9w0BAQsFAAOCAgEAkdweB4yxvLspLKq0D+miyD4Q
'' SIG '' 0EcxVFpNZuJxiR54gWRkeTDDuymNeB03JhlsBpbwSYJ5
'' SIG '' uZSgDBCvwHED2VL8lJpFlOprJzxsXWC2NTfA+O+PO5Fk
'' SIG '' 5jw6LHh6jeBADDEdQAx3Hqi7Zm0JwvQ93z5f6dtxkm29
'' SIG '' WqOcHYXRXfAQwy1hSrLXyfeblqR66jpP/9n0fCkWU4gg
'' SIG '' sUjQpQ2Ngj1DV09J4Y3y7p9Nd81+Xs6qYo++7RKm8qiB
'' SIG '' /5NDeigOLjlAeFgiEXIRUJW+mJyqpQw+OORlaqcFjR8H
'' SIG '' u0G+/7bMdek68YX+kPpDBk7Ue+I/xgiYJ1xcDRBn/vcz
'' SIG '' LtN72+RIlD4UgXYLuBSCk//pDEPX5z39Cr+rkc6E4Y28
'' SIG '' FPk4BhloAyvp628P4xfElQY8TcxraUbZShypocE6ny95
'' SIG '' D1K1BkltZmrHVKCxmglnuOlM15NKIrXFlXCzdqpCtIwQ
'' SIG '' 417wNAVF/QDPvzzbumPdTi6fb0tLbScYobV6zvbBsMsK
'' SIG '' EME4Tj1b9oIXC8dybJq4nbboEXYpRwi1QAbpSNrn+PxG
'' SIG '' W9uf1q63FnMJu4gm3Oh63njW/iVf723quzyHrSijWMgY
'' SIG '' 0HiRiHQi0Jyu0h8MdhRUp7mxbmLQckPiOFwAlIaUN/k7
'' SIG '' 25y/aLWpkRU6fqmLlEOyH5WpyLd23AYy9r8v+Qoba6sw
'' SIG '' ggdxMIIFWaADAgECAhMzAAAAFcXna54Cm0mZAAAAAAAV
'' SIG '' MA0GCSqGSIb3DQEBCwUAMIGIMQswCQYDVQQGEwJVUzET
'' SIG '' MBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVk
'' SIG '' bW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0
'' SIG '' aW9uMTIwMAYDVQQDEylNaWNyb3NvZnQgUm9vdCBDZXJ0
'' SIG '' aWZpY2F0ZSBBdXRob3JpdHkgMjAxMDAeFw0yMTA5MzAx
'' SIG '' ODIyMjVaFw0zMDA5MzAxODMyMjVaMHwxCzAJBgNVBAYT
'' SIG '' AlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQH
'' SIG '' EwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29y
'' SIG '' cG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1l
'' SIG '' LVN0YW1wIFBDQSAyMDEwMIICIjANBgkqhkiG9w0BAQEF
'' SIG '' AAOCAg8AMIICCgKCAgEA5OGmTOe0ciELeaLL1yR5vQ7V
'' SIG '' gtP97pwHB9KpbE51yMo1V/YBf2xK4OK9uT4XYDP/XE/H
'' SIG '' ZveVU3Fa4n5KWv64NmeFRiMMtY0Tz3cywBAY6GB9alKD
'' SIG '' RLemjkZrBxTzxXb1hlDcwUTIcVxRMTegCjhuje3XD9gm
'' SIG '' U3w5YQJ6xKr9cmmvHaus9ja+NSZk2pg7uhp7M62AW36M
'' SIG '' EBydUv626GIl3GoPz130/o5Tz9bshVZN7928jaTjkY+y
'' SIG '' OSxRnOlwaQ3KNi1wjjHINSi947SHJMPgyY9+tVSP3PoF
'' SIG '' VZhtaDuaRr3tpK56KTesy+uDRedGbsoy1cCGMFxPLOJi
'' SIG '' ss254o2I5JasAUq7vnGpF1tnYN74kpEeHT39IM9zfUGa
'' SIG '' RnXNxF803RKJ1v2lIH1+/NmeRd+2ci/bfV+Autuqfjbs
'' SIG '' Nkz2K26oElHovwUDo9Fzpk03dJQcNIIP8BDyt0cY7afo
'' SIG '' mXw/TNuvXsLz1dhzPUNOwTM5TI4CvEJoLhDqhFFG4tG9
'' SIG '' ahhaYQFzymeiXtcodgLiMxhy16cg8ML6EgrXY28MyTZk
'' SIG '' i1ugpoMhXV8wdJGUlNi5UPkLiWHzNgY1GIRH29wb0f2y
'' SIG '' 1BzFa/ZcUlFdEtsluq9QBXpsxREdcu+N+VLEhReTwDwV
'' SIG '' 2xo3xwgVGD94q0W29R6HXtqPnhZyacaue7e3PmriLq0C
'' SIG '' AwEAAaOCAd0wggHZMBIGCSsGAQQBgjcVAQQFAgMBAAEw
'' SIG '' IwYJKwYBBAGCNxUCBBYEFCqnUv5kxJq+gpE8RjUpzxD/
'' SIG '' LwTuMB0GA1UdDgQWBBSfpxVdAF5iXYP05dJlpxtTNRnp
'' SIG '' cjBcBgNVHSAEVTBTMFEGDCsGAQQBgjdMg30BATBBMD8G
'' SIG '' CCsGAQUFBwIBFjNodHRwOi8vd3d3Lm1pY3Jvc29mdC5j
'' SIG '' b20vcGtpb3BzL0RvY3MvUmVwb3NpdG9yeS5odG0wEwYD
'' SIG '' VR0lBAwwCgYIKwYBBQUHAwgwGQYJKwYBBAGCNxQCBAwe
'' SIG '' CgBTAHUAYgBDAEEwCwYDVR0PBAQDAgGGMA8GA1UdEwEB
'' SIG '' /wQFMAMBAf8wHwYDVR0jBBgwFoAU1fZWy4/oolxiaNE9
'' SIG '' lJBb186aGMQwVgYDVR0fBE8wTTBLoEmgR4ZFaHR0cDov
'' SIG '' L2NybC5taWNyb3NvZnQuY29tL3BraS9jcmwvcHJvZHVj
'' SIG '' dHMvTWljUm9vQ2VyQXV0XzIwMTAtMDYtMjMuY3JsMFoG
'' SIG '' CCsGAQUFBwEBBE4wTDBKBggrBgEFBQcwAoY+aHR0cDov
'' SIG '' L3d3dy5taWNyb3NvZnQuY29tL3BraS9jZXJ0cy9NaWNS
'' SIG '' b29DZXJBdXRfMjAxMC0wNi0yMy5jcnQwDQYJKoZIhvcN
'' SIG '' AQELBQADggIBAJ1VffwqreEsH2cBMSRb4Z5yS/ypb+pc
'' SIG '' FLY+TkdkeLEGk5c9MTO1OdfCcTY/2mRsfNB1OW27DzHk
'' SIG '' wo/7bNGhlBgi7ulmZzpTTd2YurYeeNg2LpypglYAA7AF
'' SIG '' vonoaeC6Ce5732pvvinLbtg/SHUB2RjebYIM9W0jVOR4
'' SIG '' U3UkV7ndn/OOPcbzaN9l9qRWqveVtihVJ9AkvUCgvxm2
'' SIG '' EhIRXT0n4ECWOKz3+SmJw7wXsFSFQrP8DJ6LGYnn8Atq
'' SIG '' gcKBGUIZUnWKNsIdw2FzLixre24/LAl4FOmRsqlb30mj
'' SIG '' dAy87JGA0j3mSj5mO0+7hvoyGtmW9I/2kQH2zsZ0/fZM
'' SIG '' cm8Qq3UwxTSwethQ/gpY3UA8x1RtnWN0SCyxTkctwRQE
'' SIG '' cb9k+SS+c23Kjgm9swFXSVRk2XPXfx5bRAGOWhmRaw2f
'' SIG '' pCjcZxkoJLo4S5pu+yFUa2pFEUep8beuyOiJXk+d0tBM
'' SIG '' drVXVAmxaQFEfnyhYWxz/gq77EFmPWn9y8FBSX5+k77L
'' SIG '' +DvktxW/tM4+pTFRhLy/AsGConsXHRWJjXD+57XQKBqJ
'' SIG '' C4822rpM+Zv/Cuk0+CQ1ZyvgDbjmjJnW4SLq8CdCPSWU
'' SIG '' 5nR0W2rRnj7tfqAxM328y+l7vzhwRNGQ8cirOoo6CGJ/
'' SIG '' 2XBjU02N7oJtpQUQwXEGahC0HVUzWLOhcGbyoYIDVjCC
'' SIG '' Aj4CAQEwggEBoYHZpIHWMIHTMQswCQYDVQQGEwJVUzET
'' SIG '' MBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVk
'' SIG '' bW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0
'' SIG '' aW9uMS0wKwYDVQQLEyRNaWNyb3NvZnQgSXJlbGFuZCBP
'' SIG '' cGVyYXRpb25zIExpbWl0ZWQxJzAlBgNVBAsTHm5TaGll
'' SIG '' bGQgVFNTIEVTTjo0MzFBLTA1RTAtRDk0NzElMCMGA1UE
'' SIG '' AxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAgU2VydmljZaIj
'' SIG '' CgEBMAcGBSsOAwIaAxUAuoO+BKbfXzqyfi9GLEdWHkCL
'' SIG '' eT+ggYMwgYCkfjB8MQswCQYDVQQGEwJVUzETMBEGA1UE
'' SIG '' CBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEe
'' SIG '' MBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSYw
'' SIG '' JAYDVQQDEx1NaWNyb3NvZnQgVGltZS1TdGFtcCBQQ0Eg
'' SIG '' MjAxMDANBgkqhkiG9w0BAQsFAAIFAO0iaJEwIhgPMjAy
'' SIG '' NjAxMjYyMjI2MjVaGA8yMDI2MDEyNzIyMjYyNVowdDA6
'' SIG '' BgorBgEEAYRZCgQBMSwwKjAKAgUA7SJokQIBADAHAgEA
'' SIG '' AgIhFjAHAgEAAgISYDAKAgUA7SO6EQIBADA2BgorBgEE
'' SIG '' AYRZCgQCMSgwJjAMBgorBgEEAYRZCgMCoAowCAIBAAID
'' SIG '' B6EgoQowCAIBAAIDAYagMA0GCSqGSIb3DQEBCwUAA4IB
'' SIG '' AQA8T6F+y1WLEOax9vWQiAJCh3YxjIT337z72jEk47/g
'' SIG '' vs5C1kQ8srFZpfvL053aO8KP/jRVrt5MWR92kws4G7Xb
'' SIG '' LbqRV4d3TyfuZ2CBrSuE0TqvGymW6wD4lCQvGtPFcZ+h
'' SIG '' kxPsj2SJa1URMSfaPw4NcDaRopU3++ts4WZrwvcwwoa6
'' SIG '' UhrIu/w83BFMVJlanQ5SsLYFqcbIDwB8tq3zlaANYdjk
'' SIG '' j3rHOOYmlSQ5aK1Ga+ytLjHN35F+xgU9Uuw/bxb2ituA
'' SIG '' 7+65njsab/UUaZeUbzFT8tGFNLx/ozA3E3pNnQBDPE3Q
'' SIG '' vA9GfCa3a4O7XprZPCr6ESDp45nlIO2yV9BbMYIEDTCC
'' SIG '' BAkCAQEwgZMwfDELMAkGA1UEBhMCVVMxEzARBgNVBAgT
'' SIG '' Cldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAc
'' SIG '' BgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQG
'' SIG '' A1UEAxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIw
'' SIG '' MTACEzMAAAIdS8CShziFfjkAAQAAAh0wDQYJYIZIAWUD
'' SIG '' BAIBBQCgggFKMBoGCSqGSIb3DQEJAzENBgsqhkiG9w0B
'' SIG '' CRABBDAvBgkqhkiG9w0BCQQxIgQgaPBjpFR656zL9lEH
'' SIG '' ZkcM4YU92H3mRbM/t9+V1nJ1pE8wgfoGCyqGSIb3DQEJ
'' SIG '' EAIvMYHqMIHnMIHkMIG9BCCxtpXMXEiLJzrqM77ep4rT
'' SIG '' NwrMOj6gpWN9hZvpj5QFUTCBmDCBgKR+MHwxCzAJBgNV
'' SIG '' BAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYD
'' SIG '' VQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQg
'' SIG '' Q29ycG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBU
'' SIG '' aW1lLVN0YW1wIFBDQSAyMDEwAhMzAAACHUvAkoc4hX45
'' SIG '' AAEAAAIdMCIEIDEgcItQgyLsTlsCOfIimlSq0dj1/Zhd
'' SIG '' faWHiE8Kn/DEMA0GCSqGSIb3DQEBCwUABIICAESC4kCh
'' SIG '' 5RMU1nFS7NNUpc/hOjQirszcIwh/ainCFuMgS/r1Bk2R
'' SIG '' TK6/HRkWnk4Lmfw1sQgGcCJi59k4svH0CihH5S5GcRX3
'' SIG '' IcOiUEjSl/YMBb9b4K7wBWzzADEXo0l5eJ4YHAGyhb7p
'' SIG '' ybwtGKlwPtYQSMi7pz8p4iHPQFNdrPXJt2pCMx3HHvmd
'' SIG '' Ahnh8WgCZTLKNio8psQVMb5rmqg4xEq9FJrzn5RLreEb
'' SIG '' 6sfQgfCV4/GI53AwNZ7m/fJjWUsJJuk7C1fVumTz6+r1
'' SIG '' gmHeb3f1EVVf4PGACZlNeGGQoVliYC8uzK9fLWeJzwrj
'' SIG '' hEWthbcKyUMPsMIYBJjbYCsZheiZk8kqugRDXog4iE5K
'' SIG '' tqAIiPpKLxlD0yBZ6CEkfcK30T98vJsSGJcuTTLItEo/
'' SIG '' jUUlCFIJ7ogZQLNKaYm3YKggxpUCl7IvYD5hkMFGhBfF
'' SIG '' 36n1v3megHDkA3kdtRGZvfD+V5KJSZzntQp58E1cMN7n
'' SIG '' qttppyaww3QqpWwmRfFUylzxXCtnjjiJ0iq5eum76zSB
'' SIG '' Kh5awsXNEdtkqchy7j7OyV3nz9yrEVRJ2Fv86LNlM+JL
'' SIG '' 7dhBwHxZD+Rd5K+wYndOqjoxgukKDeJLf3y7dw5aIlgu
'' SIG '' aRlB1L9emiIiQkc9r0Yf/HqjzYfu0Swc82EiKeAxZjWy
'' SIG '' /mFs2v+C8QBMvBzi
'' SIG '' End signature block
