' 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 '' MIIpfwYJKoZIhvcNAQcCoIIpcDCCKWwCAQExDzANBglg
'' SIG '' hkgBZQMEAgEFADB3BgorBgEEAYI3AgEEoGkwZzAyBgor
'' SIG '' BgEEAYI3AgEeMCQCAQEEEE7wKRaZJ7VNj+Ws4Q8X66sC
'' SIG '' AQACAQACAQACAQACAQAwMTANBglghkgBZQMEAgEFAAQg
'' SIG '' QXX+BeRpnj5/3w9MZiLTEbzssoFPyxBqr0/6QcQWjb+g
'' 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+KpYAm5VE9r5kKZZVdzCCByswggUToAMCAQICEzMA
'' SIG '' AACShie/qeRHluIAAAAAAJIwDQYJKoZIhvcNAQEMBQAw
'' SIG '' XzELMAkGA1UEBhMCVVMxHjAcBgNVBAoTFU1pY3Jvc29m
'' SIG '' dCBDb3Jwb3JhdGlvbjEwMC4GA1UEAxMnTWljcm9zb2Z0
'' SIG '' IFdpbmRvd3MgQ29kZSBTaWduaW5nIFBDQSAyMDI0MB4X
'' SIG '' DTI1MDUwODE4MjUwOFoXDTI2MDUwNjE4MjUwOFowfzEL
'' SIG '' MAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24x
'' SIG '' EDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jv
'' SIG '' c29mdCBDb3Jwb3JhdGlvbjEpMCcGA1UEAxMgTWljcm9z
'' SIG '' b2Z0IFdpbmRvd3MgS2l0cyBQdWJsaXNoZXIwggIiMA0G
'' SIG '' CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDdGfD4uxJK
'' SIG '' 9fBTtloggKTNTUm0px90aZugKO9o70AyoCaf+NpSbEnM
'' SIG '' wfw+43LEKGeSHIPmJtUxW0XX9QJAoaYE/lFZWvwQnH2c
'' SIG '' SBTN8ms18nofvRUWTl75IFjivi5BfTFuTAZK/p1nmVpE
'' SIG '' W/ln8sb/SULMLTjS4o7wdj37ODZdMaxlNJiyLwC1tTCu
'' SIG '' /VIeXGC1pjkML2rTG7H2w+JX1aqeMTv0KOm2RkzpllS6
'' SIG '' tirqw7mc6AT7R5Cz2Mry9LIJOIxneyaocQjJ8XQurK0F
'' SIG '' CV2B30FmDt4VgMAL3FpQVjAbHFB+oMCqZkDH/a+TWOun
'' SIG '' NmxqpQ2UmKIfn6ornS/9EQtz0R7xfi7mJK3Rw5f0qF5q
'' SIG '' p4287Nm0G2r8rGPIpzu1uL3Pq9rx0Q7V3fw6YfB5eC0n
'' SIG '' uR6gGaSmv0GY05Y/dxhw7XHpmPy0pbRYMPCMpfHSnqKw
'' SIG '' Tt9/50Ze9EZgQP6X3GXbF4LeKe6RTT9yo0R6GN3o2KAc
'' SIG '' WofUxJuc6+/DWekH1qDt626uqLDB4Hl0a8c+Nu0nEnlv
'' SIG '' v3nq2f9gpjwgdt0PRLv6+bxU0LhNjc88trtiNpAZz+l+
'' SIG '' cQCIvkYi84GIxR8B9rMfDt2WBnjmUgy62gct/g/kyNT0
'' SIG '' oVlcQbF5eVaqqMhQ4nW51uAblSYYiEQS2OwOWmdmpVwE
'' SIG '' CINhdr0vTHNF1wIDAQABo4IBvjCCAbowDgYDVR0PAQH/
'' SIG '' BAQDAgeAMB8GA1UdJQQYMBYGCisGAQQBgjcKAxQGCCsG
'' SIG '' AQUFBwMDMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFIX3
'' SIG '' y/hzzX+xl7e2uFPLdXw6mdmKMFQGA1UdEQRNMEukSTBH
'' SIG '' MS0wKwYDVQQLEyRNaWNyb3NvZnQgSXJlbGFuZCBPcGVy
'' SIG '' YXRpb25zIExpbWl0ZWQxFjAUBgNVBAUTDTIyOTkwMys1
'' SIG '' MDQ1ODYwHwYDVR0jBBgwFoAUHoLfDteMs9cCNIMO2qut
'' SIG '' ZbmvuOwwagYDVR0fBGMwYTBfoF2gW4ZZaHR0cDovL3d3
'' SIG '' dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9z
'' SIG '' b2Z0JTIwV2luZG93cyUyMENvZGUlMjBTaWduaW5nJTIw
'' SIG '' UENBJTIwMjAyNC5jcmwwdwYIKwYBBQUHAQEEazBpMGcG
'' SIG '' CCsGAQUFBzAChltodHRwOi8vd3d3Lm1pY3Jvc29mdC5j
'' SIG '' b20vcGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFdpbmRv
'' SIG '' d3MlMjBDb2RlJTIwU2lnbmluZyUyMFBDQSUyMDIwMjQu
'' SIG '' Y3J0MA0GCSqGSIb3DQEBDAUAA4ICAQAD5/BmWz2mnMR9
'' SIG '' FjI61yM9WWTxoXLACQIsOo6e7jKo0/Mj0FBiYEfv7Qk3
'' SIG '' HkwnpjfXkcVQ1DMmYVNNNCBHFjdrvdDU2GbGEVXgFP14
'' SIG '' gav5jCRUvJAUHL/PFl7/dgqMS8VxWD84MVIEauIje2f+
'' SIG '' BONORSyLA1xrjxUB4JdPm58y+3a6PXCyZ3mVmNxf5KRj
'' SIG '' vve0klF+1TW3JmozEllMYgED0Jb2xP3+zSt0EGnPwJQl
'' SIG '' w9KaVEh/iYj8ihnGGC/qrajC0TUAltLzuiEashqGmO6d
'' SIG '' oqxFQCKc457rmdGI1FDpGhrP7EM8y+uXCJKiWa5g7rAY
'' SIG '' 9C3ECy4YpXX+nkVRmMbC9LArnkZPNBpB5kf8xoceQ5pI
'' SIG '' 7Sxwoo9HBfDWzgsM1qm91cO8md0+TW6aTvDFpP2KcP8F
'' SIG '' 4XAF708f8B6ZqxMHJ+s5ogXQzvR+V0SzsUI9RWPPMKoA
'' SIG '' nNCGYakvpGIuJOlmlBt8bZz+cm4MmBdFif+PJBnpFl7w
'' SIG '' EP0xw8FrzbLAIUh2VDvT0VMC+zFPYI4eh+ITavqo+QKT
'' SIG '' T2uEu7bcCCf5/csMMwl1E1R57Sg89dsX4HhOfJbRYdnn
'' SIG '' HYKPk08X0Frp6AaE30odKcQ2by3Zss9LRchJBxTwh304
'' SIG '' xSf+U1AVZvDBFJsih74cz1/jAUuUXlC6xnXaa3rGc6dc
'' SIG '' fKbZEC+bgjGCGucwghrjAgEBMHYwXzELMAkGA1UEBhMC
'' SIG '' VVMxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlv
'' SIG '' bjEwMC4GA1UEAxMnTWljcm9zb2Z0IFdpbmRvd3MgQ29k
'' SIG '' ZSBTaWduaW5nIFBDQSAyMDI0AhMzAAAAkoYnv6nkR5bi
'' SIG '' AAAAAACSMA0GCWCGSAFlAwQCAQUAoIGoMBkGCSqGSIb3
'' SIG '' DQEJAzEMBgorBgEEAYI3AgEEMC8GCSqGSIb3DQEJBDEi
'' SIG '' BCB9ZNrAIUSORGzQaD3sArrVgPFTTGrK3FiVXZNuVgrD
'' SIG '' zzBaBgorBgEEAYI3AgEMMUwwSqAkgCIATQBpAGMAcgBv
'' SIG '' AHMAbwBmAHQAIABXAGkAbgBkAG8AdwBzoSKAIGh0dHA6
'' SIG '' Ly93d3cubWljcm9zb2Z0LmNvbS93aW5kb3dzMA0GCSqG
'' SIG '' SIb3DQEBAQUABIICAM5fLELmVTn6kI0wHyD+y9Dv4KOD
'' SIG '' Ms0067MvjvpYpwPnH5uNh3yTE3LlrFl1SKjj+6HSVZJU
'' SIG '' UhtVCI0j9mAV8Z3lYpyafUzNW5aSFeE9uznC0lspGhKI
'' SIG '' cq725p0V9SiX++Ok7NWNWys9+Psd5VAotBIXGHQpbwui
'' SIG '' 6kYsYEJpPVQ+D/AaP/y5RgkSzplHJMQsQpCtD6J+Z9xG
'' SIG '' 2Xzf15St2jnIXRPRFwGgmcz4Uymh6qZKzJXVHDBxDDd/
'' SIG '' /QQBbOfJV2F/7HW5pFHW7KjIxOBtDFNerrVcUi7c0Us8
'' SIG '' /S+xGsO4DesR5WJ3r9KVbbL0iC3sffZjkBMJ+66LoeT3
'' SIG '' 9hd83CsECY7okSIVUDPvjG61E5IIOCwbXaKK/Jg1FWzV
'' SIG '' BMqYro6hpq/ALGIj0hdqyrZr+Trh6ttIICAZ6ZRmlzy5
'' SIG '' jysMuBaK7FYRZaEx8aPY+tFC4IVTXt++LwOur4G4pY6O
'' SIG '' v8uxgTzkZi4LP3+cFXEX+llpgtetQkT/VX784PORY5xW
'' SIG '' 3Qm6drXl7uDxw1sKgZp8T4cIDhkcwfixI9erUZAS5Nqo
'' SIG '' q6DP7PZZZ3gy88fCquemZFvhBgyN3VUjRM5bQL5UfkDV
'' SIG '' 4XbSHbApkLlpQa00d7ISGRUtsydQccbA86JjN9Htybh4
'' SIG '' ehuv3Tk8mpndjn/KB7RhKNeV4KODLRa9I2vJ41E3oYIX
'' SIG '' lzCCF5MGCisGAQQBgjcDAwExgheDMIIXfwYJKoZIhvcN
'' SIG '' AQcCoIIXcDCCF2wCAQMxDzANBglghkgBZQMEAgEFADCC
'' SIG '' AVIGCyqGSIb3DQEJEAEEoIIBQQSCAT0wggE5AgEBBgor
'' SIG '' BgEEAYRZCgMBMDEwDQYJYIZIAWUDBAIBBQAEICioerOV
'' SIG '' ur1hTkiQm8M/7XU1wkQiKLauRhbBjclI5luwAgZpaOG/
'' SIG '' 8PoYEzIwMjYwMTI3MDMyMjMyLjUwN1owBIACAfSggdGk
'' SIG '' gc4wgcsxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNo
'' SIG '' aW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQK
'' SIG '' ExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJTAjBgNVBAsT
'' SIG '' HE1pY3Jvc29mdCBBbWVyaWNhIE9wZXJhdGlvbnMxJzAl
'' SIG '' BgNVBAsTHm5TaGllbGQgVFNTIEVTTjo4NjAzLTA1RTAt
'' SIG '' RDk0NzElMCMGA1UEAxMcTWljcm9zb2Z0IFRpbWUtU3Rh
'' SIG '' bXAgU2VydmljZaCCEe0wggcgMIIFCKADAgECAhMzAAAC
'' SIG '' BywROYnNhfvFAAEAAAIHMA0GCSqGSIb3DQEBCwUAMHwx
'' SIG '' CzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9u
'' SIG '' MRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy
'' SIG '' b3NvZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jv
'' SIG '' c29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwMB4XDTI1MDEz
'' SIG '' MDE5NDI1MloXDTI2MDQyMjE5NDI1MlowgcsxCzAJBgNV
'' SIG '' BAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYD
'' SIG '' VQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQg
'' SIG '' Q29ycG9yYXRpb24xJTAjBgNVBAsTHE1pY3Jvc29mdCBB
'' SIG '' bWVyaWNhIE9wZXJhdGlvbnMxJzAlBgNVBAsTHm5TaGll
'' SIG '' bGQgVFNTIEVTTjo4NjAzLTA1RTAtRDk0NzElMCMGA1UE
'' SIG '' AxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAgU2VydmljZTCC
'' SIG '' AiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMU/
'' SIG '' /3p0+Zx+A4N7f+e4W964Gy38mZLFKQ6fz1kXK0dCbfji
'' SIG '' Iug+qRXCz4KJR6NBpsp/79zspTWerACaa2I+cbzObhKX
'' SIG '' 35EllpDgPHeq0D2Z1B1LsKF/phRs/hn77yVo1tNCKAmh
'' SIG '' cKbOVXfi+YLjOkWsRPgoABONdI8rSxC4WEqvuW01owUZ
'' SIG '' yVdKciFydJyP1BQNUtCkCwm2wofIc3tw3vhoRcukUZzU
'' SIG '' j5ZgVHFpOCpI+oZF8R+5DbIasBtaMlg5e555MDUxUqFb
'' SIG '' zPNISl+Mp4r+3Ze4rKSkJRoqfmzyyo1sjdse3+sT+k3P
'' SIG '' BacArP484FFsnEiSYv6f8QxWKvm7y7JY+XW3zwwrnnUA
'' SIG '' ZWH7YfjOJHXhgPHPIIb3biBqicqOJxidZQE61euc8roB
'' SIG '' L8s3pj7wrGHbprq8psVvNqpZcCPMSJDwRj0r2lgj8oLK
'' SIG '' CLGMPAd9SBVJYLJPwrDuYYHJRmZE8/Fc42W4x78/wK0E
'' SIG '' kym6HwIFbKO8V8WY5I1ErwRORSaVNQBHUIg5p4GosbCx
'' SIG '' xKEV/K8NCtsKGaFeJvidExflT1iv13tVxgefp5kmyDLO
'' SIG '' HlAqUhsJAL9i+EUrjZx4IEMxtz463lHpP8zBx7mNXJUK
'' SIG '' apdXFY5pBzisDadXuicw5kLpS8IbwsYVJkGePWWgMMta
'' SIG '' j8j5G5GiTaP9DjNwyfCRAgMBAAGjggFJMIIBRTAdBgNV
'' SIG '' HQ4EFgQUcrVSYsK9etAK9H3wkGrXz/jOjR4wHwYDVR0j
'' SIG '' BBgwFoAUn6cVXQBeYl2D9OXSZacbUzUZ6XIwXwYDVR0f
'' SIG '' BFgwVjBUoFKgUIZOaHR0cDovL3d3dy5taWNyb3NvZnQu
'' SIG '' Y29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVGltZS1T
'' SIG '' dGFtcCUyMFBDQSUyMDIwMTAoMSkuY3JsMGwGCCsGAQUF
'' SIG '' BwEBBGAwXjBcBggrBgEFBQcwAoZQaHR0cDovL3d3dy5t
'' SIG '' aWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3Nv
'' SIG '' ZnQlMjBUaW1lLVN0YW1wJTIwUENBJTIwMjAxMCgxKS5j
'' SIG '' cnQwDAYDVR0TAQH/BAIwADAWBgNVHSUBAf8EDDAKBggr
'' SIG '' BgEFBQcDCDAOBgNVHQ8BAf8EBAMCB4AwDQYJKoZIhvcN
'' SIG '' AQELBQADggIBAOO7Sq49ueLHSyUSMPuPbbbilg48ZOZ0
'' SIG '' O87T5s1EI2RmpS/Ts/Tid/Uh/dj+IkSZRpTvDXYWbnzY
'' SIG '' iakP8rDYKVes0os9ME7qd/G848a1qWkCXjCqgaBnG+nF
'' SIG '' vbIS6cbjJlDoRA6mDV0T245ejN7eAPgeO1xzvmRxrzKK
'' SIG '' +jAQj6uFe5VRYHu+iDhMZTEp2cO+mTkZIZec6E8OF0h3
'' SIG '' 6DqFHJd1mLCARr6r0z1dy3PhMaEOA4oWxjEWFc0lmj0p
'' SIG '' G4arp6+G3I125iuTOMO1ZLqBbxqRHn1SG4saxWr7gCCo
'' SIG '' RjxaVeNAYzY5OTIGeVAukHyoPvH2NGljYKrQ5ZaUrTB8
'' SIG '' f/XN5+tY3n5t7ztLDZM9wi50gmff1tsMbtrAoxVgMd+w
'' SIG '' 8nxm/GBaRm5/plkCSmHR5gaHchXzjm1ouR0s4K/Dj1bG
'' SIG '' qFrkOaLY6OHwaNrm/2TJjcpMXJfdPgLaxzF+Cn/rFF34
'' SIG '' MY6E1U+9U9r/fJFSpjmzlRinLwOdumlXudA7ax7ce8JJ
'' SIG '' utv7I/J6hvWRR8xhr18TZsSygxs5odGAaOLxk+38l3Zs
'' SIG '' 991CgEdxQ6o/CMcFQhxJzvF0lliNFvibzWrGOZrcMuO4
'' SIG '' 4WWMxlNii9GIa8Qwv3FmPakdFTK/6zm/tUbBwzquM1gz
'' SIG '' irNlAzoDZEZgkZTvzQZAbRA73zD6y5y5NWt9MIIHcTCC
'' SIG '' BVmgAwIBAgITMwAAABXF52ueAptJmQAAAAAAFTANBgkq
'' SIG '' hkiG9w0BAQsFADCBiDELMAkGA1UEBhMCVVMxEzARBgNV
'' SIG '' BAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQx
'' SIG '' HjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEy
'' SIG '' MDAGA1UEAxMpTWljcm9zb2Z0IFJvb3QgQ2VydGlmaWNh
'' SIG '' dGUgQXV0aG9yaXR5IDIwMTAwHhcNMjEwOTMwMTgyMjI1
'' SIG '' WhcNMzAwOTMwMTgzMjI1WjB8MQswCQYDVQQGEwJVUzET
'' SIG '' MBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVk
'' SIG '' bW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0
'' SIG '' aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQgVGltZS1TdGFt
'' SIG '' cCBQQ0EgMjAxMDCCAiIwDQYJKoZIhvcNAQEBBQADggIP
'' SIG '' ADCCAgoCggIBAOThpkzntHIhC3miy9ckeb0O1YLT/e6c
'' SIG '' BwfSqWxOdcjKNVf2AX9sSuDivbk+F2Az/1xPx2b3lVNx
'' SIG '' WuJ+Slr+uDZnhUYjDLWNE893MsAQGOhgfWpSg0S3po5G
'' SIG '' awcU88V29YZQ3MFEyHFcUTE3oAo4bo3t1w/YJlN8OWEC
'' SIG '' esSq/XJprx2rrPY2vjUmZNqYO7oaezOtgFt+jBAcnVL+
'' SIG '' tuhiJdxqD89d9P6OU8/W7IVWTe/dvI2k45GPsjksUZzp
'' SIG '' cGkNyjYtcI4xyDUoveO0hyTD4MmPfrVUj9z6BVWYbWg7
'' SIG '' mka97aSueik3rMvrg0XnRm7KMtXAhjBcTyziYrLNueKN
'' SIG '' iOSWrAFKu75xqRdbZ2De+JKRHh09/SDPc31BmkZ1zcRf
'' SIG '' NN0Sidb9pSB9fvzZnkXftnIv231fgLrbqn427DZM9itu
'' SIG '' qBJR6L8FA6PRc6ZNN3SUHDSCD/AQ8rdHGO2n6Jl8P0zb
'' SIG '' r17C89XYcz1DTsEzOUyOArxCaC4Q6oRRRuLRvWoYWmEB
'' SIG '' c8pnol7XKHYC4jMYctenIPDC+hIK12NvDMk2ZItboKaD
'' SIG '' IV1fMHSRlJTYuVD5C4lh8zYGNRiER9vcG9H9stQcxWv2
'' SIG '' XFJRXRLbJbqvUAV6bMURHXLvjflSxIUXk8A8FdsaN8cI
'' SIG '' FRg/eKtFtvUeh17aj54WcmnGrnu3tz5q4i6tAgMBAAGj
'' SIG '' ggHdMIIB2TASBgkrBgEEAYI3FQEEBQIDAQABMCMGCSsG
'' SIG '' AQQBgjcVAgQWBBQqp1L+ZMSavoKRPEY1Kc8Q/y8E7jAd
'' SIG '' BgNVHQ4EFgQUn6cVXQBeYl2D9OXSZacbUzUZ6XIwXAYD
'' SIG '' VR0gBFUwUzBRBgwrBgEEAYI3TIN9AQEwQTA/BggrBgEF
'' SIG '' BQcCARYzaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3Br
'' SIG '' aW9wcy9Eb2NzL1JlcG9zaXRvcnkuaHRtMBMGA1UdJQQM
'' SIG '' MAoGCCsGAQUFBwMIMBkGCSsGAQQBgjcUAgQMHgoAUwB1
'' SIG '' AGIAQwBBMAsGA1UdDwQEAwIBhjAPBgNVHRMBAf8EBTAD
'' SIG '' AQH/MB8GA1UdIwQYMBaAFNX2VsuP6KJcYmjRPZSQW9fO
'' SIG '' mhjEMFYGA1UdHwRPME0wS6BJoEeGRWh0dHA6Ly9jcmwu
'' SIG '' bWljcm9zb2Z0LmNvbS9wa2kvY3JsL3Byb2R1Y3RzL01p
'' SIG '' Y1Jvb0NlckF1dF8yMDEwLTA2LTIzLmNybDBaBggrBgEF
'' SIG '' BQcBAQROMEwwSgYIKwYBBQUHMAKGPmh0dHA6Ly93d3cu
'' SIG '' bWljcm9zb2Z0LmNvbS9wa2kvY2VydHMvTWljUm9vQ2Vy
'' SIG '' QXV0XzIwMTAtMDYtMjMuY3J0MA0GCSqGSIb3DQEBCwUA
'' SIG '' A4ICAQCdVX38Kq3hLB9nATEkW+Geckv8qW/qXBS2Pk5H
'' SIG '' ZHixBpOXPTEztTnXwnE2P9pkbHzQdTltuw8x5MKP+2zR
'' SIG '' oZQYIu7pZmc6U03dmLq2HnjYNi6cqYJWAAOwBb6J6Gng
'' SIG '' ugnue99qb74py27YP0h1AdkY3m2CDPVtI1TkeFN1JFe5
'' SIG '' 3Z/zjj3G82jfZfakVqr3lbYoVSfQJL1AoL8ZthISEV09
'' SIG '' J+BAljis9/kpicO8F7BUhUKz/AyeixmJ5/ALaoHCgRlC
'' SIG '' GVJ1ijbCHcNhcy4sa3tuPywJeBTpkbKpW99Jo3QMvOyR
'' SIG '' gNI95ko+ZjtPu4b6MhrZlvSP9pEB9s7GdP32THJvEKt1
'' SIG '' MMU0sHrYUP4KWN1APMdUbZ1jdEgssU5HLcEUBHG/ZPkk
'' SIG '' vnNtyo4JvbMBV0lUZNlz138eW0QBjloZkWsNn6Qo3GcZ
'' SIG '' KCS6OEuabvshVGtqRRFHqfG3rsjoiV5PndLQTHa1V1QJ
'' SIG '' sWkBRH58oWFsc/4Ku+xBZj1p/cvBQUl+fpO+y/g75LcV
'' SIG '' v7TOPqUxUYS8vwLBgqJ7Fx0ViY1w/ue10CgaiQuPNtq6
'' SIG '' TPmb/wrpNPgkNWcr4A245oyZ1uEi6vAnQj0llOZ0dFtq
'' SIG '' 0Z4+7X6gMTN9vMvpe784cETRkPHIqzqKOghif9lwY1NN
'' SIG '' je6CbaUFEMFxBmoQtB1VM1izoXBm8qGCA1AwggI4AgEB
'' SIG '' MIH5oYHRpIHOMIHLMQswCQYDVQQGEwJVUzETMBEGA1UE
'' SIG '' CBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEe
'' SIG '' MBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSUw
'' SIG '' IwYDVQQLExxNaWNyb3NvZnQgQW1lcmljYSBPcGVyYXRp
'' SIG '' b25zMScwJQYDVQQLEx5uU2hpZWxkIFRTUyBFU046ODYw
'' SIG '' My0wNUUwLUQ5NDcxJTAjBgNVBAMTHE1pY3Jvc29mdCBU
'' SIG '' aW1lLVN0YW1wIFNlcnZpY2WiIwoBATAHBgUrDgMCGgMV
'' SIG '' ANO9VT9iP2VRLJ4MJqInYNrmFSJLoIGDMIGApH4wfDEL
'' SIG '' MAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24x
'' SIG '' EDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jv
'' SIG '' c29mdCBDb3Jwb3JhdGlvbjEmMCQGA1UEAxMdTWljcm9z
'' SIG '' b2Z0IFRpbWUtU3RhbXAgUENBIDIwMTAwDQYJKoZIhvcN
'' SIG '' AQELBQACBQDtIodqMCIYDzIwMjYwMTI3MDAzODAyWhgP
'' SIG '' MjAyNjAxMjgwMDM4MDJaMHcwPQYKKwYBBAGEWQoEATEv
'' SIG '' MC0wCgIFAO0ih2oCAQAwCgIBAAICIiMCAf8wBwIBAAIC
'' SIG '' EcswCgIFAO0j2OoCAQAwNgYKKwYBBAGEWQoEAjEoMCYw
'' SIG '' DAYKKwYBBAGEWQoDAqAKMAgCAQACAwehIKEKMAgCAQAC
'' SIG '' AwGGoDANBgkqhkiG9w0BAQsFAAOCAQEAJdg87T7fqN5I
'' SIG '' JqABuOW6Xk6p8pcsEsTlmP5JmqkCHKitYQKnuiIzg9RE
'' SIG '' 82DrPgAJRgrTXnTKnwF5hW7y4ZHwQDdLSj2KmjxXzyWY
'' SIG '' LXRx8zF5SgFrUy3u00URc73bvkwlJoZ/pWxQXyToyCuz
'' SIG '' 31tJ9sancLWpkuyqLpWKsenrZMQ2t4IJXlcQosCQH6qA
'' SIG '' 0huVrjNkT7Lp6jC8F4yaH30Xt1j1XXhrx56RmZ6ACoS6
'' SIG '' fqat9hDfxq6R7N2ytOwS8p3oyx2rIESPcfK4zxnd9QCP
'' SIG '' jTgypeTnlYaRytkXBRoENgKJeQ0rMAt8cO3Op+4bJrrn
'' SIG '' SXH+/Vj3ZBTInLWIuE2wnjGCBA0wggQJAgEBMIGTMHwx
'' SIG '' CzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9u
'' SIG '' MRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy
'' SIG '' b3NvZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jv
'' SIG '' c29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwAhMzAAACBywR
'' SIG '' OYnNhfvFAAEAAAIHMA0GCWCGSAFlAwQCAQUAoIIBSjAa
'' SIG '' BgkqhkiG9w0BCQMxDQYLKoZIhvcNAQkQAQQwLwYJKoZI
'' SIG '' hvcNAQkEMSIEIBYgF0582o9W6b3VrWxlspcbioYwYQxc
'' SIG '' FtQc0w5EtB2fMIH6BgsqhkiG9w0BCRACLzGB6jCB5zCB
'' SIG '' 5DCBvQQgL/fU0dB2zUhnmw+e/n2n6/oGMEOCgM8jCICa
'' SIG '' fQ8ep7MwgZgwgYCkfjB8MQswCQYDVQQGEwJVUzETMBEG
'' SIG '' A1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9u
'' SIG '' ZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9u
'' SIG '' MSYwJAYDVQQDEx1NaWNyb3NvZnQgVGltZS1TdGFtcCBQ
'' SIG '' Q0EgMjAxMAITMwAAAgcsETmJzYX7xQABAAACBzAiBCCp
'' SIG '' PL1iqb9K7clEXckfZhYi75OIMxeZe4Mc+H8I0TibzjAN
'' SIG '' BgkqhkiG9w0BAQsFAASCAgCKN810EMqyKYUlh34UFKLh
'' SIG '' mdLL39nkSD084EZRud6HI8nJYYqpEeXeGBaw7+HvnQTu
'' SIG '' tS2SzVHA5GkheWT9JJhSdsv8aZhotCPo1Fi73cJpBU05
'' SIG '' j7ajt2rP/8czCAzXVYEKRSCmMXR6G70Tmr//QRIZXGNB
'' SIG '' TVq+hk367lVeR69G/D3nRkkbv3qP+zYbLBa6RzcsWiOU
'' SIG '' y3ihLamjXbq4QRzjxUkt4Tga90JMaWlxELk7ULd/an3g
'' SIG '' eAU57+vM6Q90owNFaaD78fE5D/0nuqARQzPfwiU8Sbjk
'' SIG '' 3ch/Q5YXoVJFysHs2LzMPKgNHG3Y32oUMWDC2I2haoF2
'' SIG '' j5LYQaPCEoIElKEiEGM58B0Vzx5cwJ8cAKEo8sut82v5
'' SIG '' pmbIJbF+9aUIxzRUeMzXGENYZDjrIV5tpbrzyXdwnBft
'' SIG '' wrz8/KztCmOUX4iRA/ZmDxFKTjUJqC0YGj3yoDiREGJA
'' SIG '' cxYl2AzbjHbMzu/905pteJhHbRlXYjEJMQq0njmhrnfP
'' SIG '' ZLUHVa1+iU/P8W8RqJlzKGvqz1CFhypAQsGTJaHmrw7a
'' SIG '' Dka6iCAxUFL1R3xzXntlIXVQzvj4ueGVUGJu/+Uzd2pi
'' SIG '' yiwTuSsM3S4v9T1qGKTAu5XIXk1Gj8mEfp84jy4FnsLx
'' SIG '' 4+nIFvj9HKPFjUNoooKZK81wdMltSnCvyMZitn+wRMpl0Q==
'' SIG '' End signature block
