' Windows Installer utility to execute SQL statements against an installer database
' For use with Windows Scripting Host, CScript.exe or WScript.exe
' Copyright (c) Microsoft Corporation. All rights reserved.
' Demonstrates the script-driven database queries and updates
'
Option Explicit

Const msiOpenDatabaseModeReadOnly = 0
Const msiOpenDatabaseModeTransact = 1

Dim argNum, argCount:argCount = Wscript.Arguments.Count
If (argCount < 2) Then
	Wscript.Echo "Windows Installer utility to execute SQL queries against an installer database." &_
		vbLf & " The 1st argument specifies the path to the MSI database, relative or full path" &_
		vbLf & " Subsequent arguments specify SQL queries to execute - must be in double quotes" &_
		vbLf & " SELECT queries will display the rows of the result list specified in the query" &_
		vbLf & " Binary data columns selected by a query will not be displayed" &_
		vblf &_
		vblf & "Copyright (C) Microsoft Corporation.  All rights reserved."
	Wscript.Quit 1
End If

' Scan arguments for valid SQL keyword and to determine if any update operations
Dim openMode : openMode = msiOpenDatabaseModeReadOnly
For argNum = 1 To argCount - 1
	Dim keyword : keyword = Wscript.Arguments(argNum)
	Dim keywordLen : keywordLen = InStr(1, keyword, " ", vbTextCompare)
	If (keywordLen) Then keyword = UCase(Left(keyword, keywordLen - 1))
	If InStr(1, "UPDATE INSERT DELETE CREATE ALTER DROP", keyword, vbTextCompare) Then
		openMode = msiOpenDatabaseModeTransact
	ElseIf keyword <> "SELECT" Then
		Fail "Invalid SQL statement type: " & keyword
	End If
Next

' Connect to Windows installer object
On Error Resume Next
Dim installer : Set installer = Nothing
Set installer = Wscript.CreateObject("WindowsInstaller.Installer") : CheckError

' Open database
Dim databasePath:databasePath = Wscript.Arguments(0)
Dim database : Set database = installer.OpenDatabase(databasePath, openMode) : CheckError

' Process SQL statements
Dim query, view, record, message, rowData, columnCount, delim, column
For argNum = 1 To argCount - 1
	query = Wscript.Arguments(argNum)
	Set view = database.OpenView(query) : CheckError
	view.Execute : CheckError
	If Ucase(Left(query, 6)) = "SELECT" Then
		Do
			Set record = view.Fetch
			If record Is Nothing Then Exit Do
			columnCount = record.FieldCount
			rowData = Empty
			delim = "  "
			For column = 1 To columnCount
				If column = columnCount Then delim = vbLf
				rowData = rowData & record.StringData(column) & delim
			Next
			message = message & rowData
		Loop
	End If
Next
If openMode = msiOpenDatabaseModeTransact Then database.Commit
If Not IsEmpty(message) Then Wscript.Echo message
Wscript.Quit 0

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 & vbLf & errRec.FormatText
	End If
	Fail message
End Sub

Sub Fail(message)
	Wscript.Echo message
	Wscript.Quit 2
End Sub

'' SIG '' Begin signature block
'' SIG '' MIIpfAYJKoZIhvcNAQcCoIIpbTCCKWkCAQExDzANBglg
'' SIG '' hkgBZQMEAgEFADB3BgorBgEEAYI3AgEEoGkwZzAyBgor
'' SIG '' BgEEAYI3AgEeMCQCAQEEEE7wKRaZJ7VNj+Ws4Q8X66sC
'' SIG '' AQACAQACAQACAQACAQAwMTANBglghkgBZQMEAgEFAAQg
'' SIG '' 4Xv5+5ronXWl5cvPsyZzr63fsdqLVPGyNx2CnUPSw9mg
'' 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+bgjGCGuQwghrgAgEBMHYwXzELMAkGA1UEBhMC
'' SIG '' VVMxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlv
'' SIG '' bjEwMC4GA1UEAxMnTWljcm9zb2Z0IFdpbmRvd3MgQ29k
'' SIG '' ZSBTaWduaW5nIFBDQSAyMDI0AhMzAAAAkoYnv6nkR5bi
'' SIG '' AAAAAACSMA0GCWCGSAFlAwQCAQUAoIGoMBkGCSqGSIb3
'' SIG '' DQEJAzEMBgorBgEEAYI3AgEEMC8GCSqGSIb3DQEJBDEi
'' SIG '' BCCTomCWupXq/cO2dABBvp7plEiaCHSbP9k/KqOmsPL9
'' SIG '' uzBaBgorBgEEAYI3AgEMMUwwSqAkgCIATQBpAGMAcgBv
'' SIG '' AHMAbwBmAHQAIABXAGkAbgBkAG8AdwBzoSKAIGh0dHA6
'' SIG '' Ly93d3cubWljcm9zb2Z0LmNvbS93aW5kb3dzMA0GCSqG
'' SIG '' SIb3DQEBAQUABIICAFaWT2QWjJ6IrCaOoO0JBRzGROtL
'' SIG '' z7QF3T5DcX98aTK3hbdC7DJXxCIDmo6QWJL5PESREicH
'' SIG '' H5REQj56k9DyEtSNE0N1ghGLV5K90htCfRevmAe8PAjn
'' SIG '' eHHLnCApNZtqZ1NbYc4RLcj8zuvS3WhNTDDHmV4C7eqs
'' SIG '' trJNyuq5MLXAJidMp9Vu+e7fFFGzAG2+3SekGwz+wvv7
'' SIG '' 4Co5rCdmEctlTva+j51Tqhr4DldEl+lVo/rQ09geLH6k
'' SIG '' gmE1JgA93pCkKQNmqfkBCDCxYjw9fxpoJOOHZyu3xqqq
'' SIG '' WKSMRhVBct4fng5NWK2Sm1vSd09e/Zp63rNMvFclecRx
'' SIG '' mh5kfEhSmQ2DeKBlCByKWU5+jNJbUH1R5tko55Gi7vc1
'' SIG '' nS1FRf9rCcFZRWENAtHeOKiCtFSdeFMHNkpAAl8nuH+M
'' SIG '' /Yp5YyFGlanqjyhP5ix9CfcJlC+FAMzXFXM90Lp07+Un
'' SIG '' YtgsbAt7t2DykWAcyu9Jph4vfikJNQ1g0KYBqASlyCV1
'' SIG '' VgSCeJ1X0POrt2pZ3kAD37nBlV4wBX0kwzeUlPNpX+jw
'' SIG '' K6sqnE5lqAl+cd5aNStcMpudSK1i/k1BHT+R1lLdLQYo
'' SIG '' 2Id0bA3N7nnqQ+i0HOg1oKsjrHk4MbzcokAoVIMYvfKE
'' SIG '' WPy2dFgK3GGZAvLm1aA0x0EhF9NfgkULBM/hEBFGoYIX
'' SIG '' lDCCF5AGCisGAQQBgjcDAwExgheAMIIXfAYJKoZIhvcN
'' SIG '' AQcCoIIXbTCCF2kCAQMxDzANBglghkgBZQMEAgEFADCC
'' SIG '' AVIGCyqGSIb3DQEJEAEEoIIBQQSCAT0wggE5AgEBBgor
'' SIG '' BgEEAYRZCgMBMDEwDQYJYIZIAWUDBAIBBQAEIMbLTJ9s
'' SIG '' 0padnDLdhoK4R4JmlVPqr+sfZX+C5QOSLpBAAgZpaPhc
'' SIG '' AMAYEzIwMjYwMTI3MDMyMzUxLjU5M1owBIACAfSggdGk
'' SIG '' gc4wgcsxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNo
'' SIG '' aW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQK
'' SIG '' ExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJTAjBgNVBAsT
'' SIG '' HE1pY3Jvc29mdCBBbWVyaWNhIE9wZXJhdGlvbnMxJzAl
'' SIG '' BgNVBAsTHm5TaGllbGQgVFNTIEVTTjo5MjAwLTA1RTAt
'' SIG '' RDk0NzElMCMGA1UEAxMcTWljcm9zb2Z0IFRpbWUtU3Rh
'' SIG '' bXAgU2VydmljZaCCEeowggcgMIIFCKADAgECAhMzAAAC
'' SIG '' CQgH4PlcjOZVAAEAAAIJMA0GCSqGSIb3DQEBCwUAMHwx
'' SIG '' CzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9u
'' SIG '' MRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy
'' SIG '' b3NvZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jv
'' SIG '' c29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwMB4XDTI1MDEz
'' SIG '' MDE5NDI1NVoXDTI2MDQyMjE5NDI1NVowgcsxCzAJBgNV
'' SIG '' BAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYD
'' SIG '' VQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQg
'' SIG '' Q29ycG9yYXRpb24xJTAjBgNVBAsTHE1pY3Jvc29mdCBB
'' SIG '' bWVyaWNhIE9wZXJhdGlvbnMxJzAlBgNVBAsTHm5TaGll
'' SIG '' bGQgVFNTIEVTTjo5MjAwLTA1RTAtRDk0NzElMCMGA1UE
'' SIG '' AxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAgU2VydmljZTCC
'' SIG '' AiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMKU
'' SIG '' SjD3Lgzd/VL3PXG00QRPBYvW8SKLDSgPtJcR2/ix0/TG
'' SIG '' xXKJ2/ojauYSXw9iz0txmPOxY4cjt1CREvbwY/cJdy9j
'' SIG '' RmrqdawdjZBqYJkUsXYiVEfoEfHZGQ3tlEMqazsE6jgg
'' SIG '' YFGUIyRS/033+3A7MCSlY2wzdv8FDFzCFWCxCq1Dw0Q9
'' SIG '' S6JH4ZXmt1AdRPimOKFlOQnCtqWLPRltilRMfk6SLd3c
'' SIG '' GnH2qI+uIHqGE18Y+OXQ8inbcPnv2ulbpmY+o9PyPXYp
'' SIG '' fvJJnA27Gzc9i8X/DXcaxFeTMhsjIsoQ/OP2XOaasXbC
'' SIG '' O+9SvH0BnDsYtJeTbwOfVdJ/raFuQW5QbA8UuncRtGoh
'' SIG '' WYFnjbBzPmZIggLLdCz+HCERiFSd2cAGA2kPlq8As5Xu
'' SIG '' xR8mscNldfp/2CBuMgDqPaeFIBIiqXwXkuwoHDRE+0O7
'' SIG '' LePYI/G1OZmjNssrxMy3EOIwKDFOl+DmJhS/KFXhqpoM
'' SIG '' vBEGygFGE7/6HDJsqdjBfEp546uw7BAudo4TkGYUlhYE
'' SIG '' 4XPd3zwsEr1BEGB0QfkItWHvCSAwh6H3pwfn4fTES+aD
'' SIG '' q3u7O2VdfZJXvF1Rg/EDe+ONXcSRXtptIcPkcdBlOt3c
'' SIG '' WqwP9U5gAJRUE+vEX6RStkZfFgidlOmtgxgSrpQgbUNP
'' SIG '' ikJU/0NxoIsYg5gQnWDTAgMBAAGjggFJMIIBRTAdBgNV
'' SIG '' HQ4EFgQUSYvo0cRdOOW98C9AzbV3MxaTytIwHwYDVR0j
'' SIG '' BBgwFoAUn6cVXQBeYl2D9OXSZacbUzUZ6XIwXwYDVR0f
'' SIG '' BFgwVjBUoFKgUIZOaHR0cDovL3d3dy5taWNyb3NvZnQu
'' SIG '' Y29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVGltZS1T
'' SIG '' dGFtcCUyMFBDQSUyMDIwMTAoMSkuY3JsMGwGCCsGAQUF
'' SIG '' BwEBBGAwXjBcBggrBgEFBQcwAoZQaHR0cDovL3d3dy5t
'' SIG '' aWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3Nv
'' SIG '' ZnQlMjBUaW1lLVN0YW1wJTIwUENBJTIwMjAxMCgxKS5j
'' SIG '' cnQwDAYDVR0TAQH/BAIwADAWBgNVHSUBAf8EDDAKBggr
'' SIG '' BgEFBQcDCDAOBgNVHQ8BAf8EBAMCB4AwDQYJKoZIhvcN
'' SIG '' AQELBQADggIBAFxefG84PCTiH+NtQGycWUW2tK4EFlvv
'' SIG '' BJl9rmUpExM182WZoALht3tajQjmEzGwQlTK6kfCHiQP
'' SIG '' mqRFlzMhzSMgAFBDXENQFr5ZPGun9QCoLXuKMUJ49kph
'' SIG '' WM2sd/8GaPPsVo4jjWTG55GHAs0hxDaCYGoNHlbhNLaG
'' SIG '' 1EljJkCzuN8mZsO1NxQ4yESXU5aXH8We9xBui3lU/NpT
'' SIG '' CJPo2J7yXo9mOhCy7GJqy5ICbEohB2wecnlCiSrB3Kpe
'' SIG '' LUVkO0RNW9td8Oyh/NO1rh6fap/jyHMRnBS9uTPmya3z
'' SIG '' 3SdUAruTPZyuvM3eGmd8W5+2n+tctZO/E9Bx9ZeIS4hR
'' SIG '' 3YaDt5HxC3Iq0kNTz48PAQKTOhomNsYIqrH0RKAUnPOt
'' SIG '' c3CGFfpFzyDYRT/7reaapZ4IX+Qk4WDZ4nDtq79psRKC
'' SIG '' rcRrPIPVWUv4dpf4wEcbNCYe286bdCXjBVM3darxfxsJ
'' SIG '' HryqIXmsVqybhHEXrNqNl5IcL+pLnffr/howOqxXo7zp
'' SIG '' GU88JgYk4+1/Yxso7tckl4v9RA3Rze6LHlExOjrp1sBP
'' SIG '' E9QUQbk+Hg8fMaNRsQ7sPfku4QGKIbxiuUxE6QaXd8FC
'' SIG '' X1tZuDD0IhRBvCrlxNoTGV8Skx1KjJ0miVRNAPkQsobP
'' SIG '' VMlqFOJ13bTCXCLkGTfpcibOwfhizXmJdF8CMIIHcTCC
'' 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 '' je6CbaUFEMFxBmoQtB1VM1izoXBm8qGCA00wggI1AgEB
'' SIG '' MIH5oYHRpIHOMIHLMQswCQYDVQQGEwJVUzETMBEGA1UE
'' SIG '' CBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEe
'' SIG '' MBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSUw
'' SIG '' IwYDVQQLExxNaWNyb3NvZnQgQW1lcmljYSBPcGVyYXRp
'' SIG '' b25zMScwJQYDVQQLEx5uU2hpZWxkIFRTUyBFU046OTIw
'' SIG '' MC0wNUUwLUQ5NDcxJTAjBgNVBAMTHE1pY3Jvc29mdCBU
'' SIG '' aW1lLVN0YW1wIFNlcnZpY2WiIwoBATAHBgUrDgMCGgMV
'' SIG '' AHzvras9NB3sicMJB1vWSAUpCQJEoIGDMIGApH4wfDEL
'' SIG '' MAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24x
'' SIG '' EDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jv
'' SIG '' c29mdCBDb3Jwb3JhdGlvbjEmMCQGA1UEAxMdTWljcm9z
'' SIG '' b2Z0IFRpbWUtU3RhbXAgUENBIDIwMTAwDQYJKoZIhvcN
'' SIG '' AQELBQACBQDtIp4LMCIYDzIwMjYwMTI3MDIxNDM1WhgP
'' SIG '' MjAyNjAxMjgwMjE0MzVaMHQwOgYKKwYBBAGEWQoEATEs
'' SIG '' MCowCgIFAO0ingsCAQAwBwIBAAICBbowBwIBAAICE04w
'' SIG '' CgIFAO0j74sCAQAwNgYKKwYBBAGEWQoEAjEoMCYwDAYK
'' SIG '' KwYBBAGEWQoDAqAKMAgCAQACAwehIKEKMAgCAQACAwGG
'' SIG '' oDANBgkqhkiG9w0BAQsFAAOCAQEAguia22/iV2fbM3a/
'' SIG '' AtTbM/pllIz45cpnIaoL7ENZj9QWQXAyXhT5FRTrEJBy
'' SIG '' h5nMC9c1nhF007JpJh5857YY0UqJhkvIhOkMVurDbZGC
'' SIG '' LqTTsEG7I6gEqdTuntnqTA+SliKhwjZc98Tdtx/rP9ff
'' SIG '' Cltk2mIEx92SsMLr0zGJO5LWM9HhXmCGB+N24f+0j54f
'' SIG '' Cz95656xiZdL4k30wlNG2QulpMv41G+b36mBEGlvmNrt
'' SIG '' I2BqWf57axN06j2atv8VSw2kJITYmS6/bYLveuMHWmK1
'' SIG '' o9+4f0a1pk4Ijcko/exusa1HD5+QfOxlHLQNiVX4+Hhq
'' SIG '' XMkIdJZqqDIIkKHRQzGCBA0wggQJAgEBMIGTMHwxCzAJ
'' SIG '' BgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAw
'' SIG '' DgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3Nv
'' SIG '' ZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29m
'' SIG '' dCBUaW1lLVN0YW1wIFBDQSAyMDEwAhMzAAACCQgH4Plc
'' SIG '' jOZVAAEAAAIJMA0GCWCGSAFlAwQCAQUAoIIBSjAaBgkq
'' SIG '' hkiG9w0BCQMxDQYLKoZIhvcNAQkQAQQwLwYJKoZIhvcN
'' SIG '' AQkEMSIEIAlh37LHzbhcB5cwTYPrju5CDaFCzqIhd9AT
'' SIG '' FJoYjF1DMIH6BgsqhkiG9w0BCRACLzGB6jCB5zCB5DCB
'' SIG '' vQQgaBssHsi99AIuZQ5RmGN1SorxuKR8HplVV2hOM3CF
'' SIG '' Ez4wgZgwgYCkfjB8MQswCQYDVQQGEwJVUzETMBEGA1UE
'' SIG '' CBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEe
'' SIG '' MBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSYw
'' SIG '' JAYDVQQDEx1NaWNyb3NvZnQgVGltZS1TdGFtcCBQQ0Eg
'' SIG '' MjAxMAITMwAAAgkIB+D5XIzmVQABAAACCTAiBCBEJkhs
'' SIG '' 48qmeU1iNQwgjbaxD2lGLHKZq39s5lDwCum1WjANBgkq
'' SIG '' hkiG9w0BAQsFAASCAgA6Qf4WelCm0khDd2uwWk6+7ah7
'' SIG '' CM7Dm++az3X+vuM/ysa8VdpFOyofTmZH+QRtswvrPwSI
'' SIG '' XCZAzO0FxbeSGpVsYFKgdKeml2WRoVEXW58BdyYMcBnt
'' SIG '' attnq3XdUFlFpslsM0mdI7ARxN49Y2tYflGn3vPZf2Zq
'' SIG '' 4Ntn/u8jpz5aHGXLmqfo40T1juAWjBuvHK4UNEmnWRip
'' SIG '' yS0r8RFnm87qLrXGGONYvgMMyV164iTQUskgz6GzMxYa
'' SIG '' MIb3YH+7HqM2PPPnRGhGEyfyjh7Y5q8vrIqFnxJV5n42
'' SIG '' N5dzINVZqotzp6iMoFNGrEpniWhw6ba+/0B4bHkAeYRo
'' SIG '' lSUvcPmEm0l5pld0gLC4WWeWWOwfsSKcGrMV4obgnPpy
'' SIG '' DVul4PjUtigJ+F+wzIwDvgvWQmIEI+YKjEgYjfRSm1im
'' SIG '' m0laj3DRoTQBFJtnXTWILoxrLD1uxy3T5ERzg2wH9//g
'' SIG '' ikYdy1Ryvdg5oze/lbY1DSAtDdFkIsnvlU03V+Y7DkmA
'' SIG '' jFz4+QgzTqW+WHWbTENjW/fnNKXAMvA7nMlc+A2PUL19
'' SIG '' zsg8jvSyeA9K2BPQ+DPVREWoQCz4YJyw7jG+Lvw8/wzz
'' SIG '' YGyiK0pM8uUsnyhbAArQttudYpFAQvgPnR0y0vxmRN0g
'' SIG '' nwF48rb9oTDgss8fGwP8KaCPZKWmLVOx4u0poyIsWg==
'' SIG '' End signature block
