' Windows Installer database table import for use with Windows Scripting Host
' Copyright (c) Microsoft Corporation. All rights reserved.
' Demonstrates the use of the Database.Import method and MsiDatabaseImport 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 < 3) Then
	Wscript.Echo "Windows Installer database table import utility" &_
		vbNewLine & " 1st argument is the path to MSI database (installer package)" &_
		vbNewLine & " 2nd argument is the path to folder containing the imported files" &_
		vbNewLine & " Subseqent arguments are names of archive files to import" &_
		vbNewLine & " Wildcards, such as *.idt, can be used to import multiple files" &_
		vbNewLine & " Specify /c or -c anywhere before file list to create new database" &_
		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

Dim openMode:openMode = msiOpenDatabaseModeTransact
Dim databasePath:databasePath = NextArgument
Dim folder:folder = NextArgument

Dim WshShell, fileSys
Set WshShell = Wscript.CreateObject("Wscript.Shell") : CheckError
Set fileSys = CreateObject("Scripting.FileSystemObject") : CheckError

' Open database and process list of files
Dim database, table
Set database = installer.OpenDatabase(databasePath, openMode) : CheckError
While iArg < argCount
	table = NextArgument
	' Check file name for wildcard specification
	If (InStr(1,table,"*",vbTextCompare) <> 0) Or (InStr(1,table,"?",vbTextCompare) <> 0) Then
		' Obtain list of files matching wildcard specification
		Dim file, tempFilePath
		tempFilePath = WshShell.ExpandEnvironmentStrings("%TEMP%") & "\dir.tmp"
		WshShell.Run "cmd.exe /U /c dir /b " & folder & "\" & table & ">" & tempFilePath, 0, True : CheckError
		Set file = fileSys.OpenTextFile(tempFilePath, ForReading, False, TristateTrue) : CheckError
		' Import each file in directory list
		Do While file.AtEndOfStream <> True
			table = file.ReadLine
			database.Import folder, table : CheckError
		Loop
		file.Close
		fileSys.DeleteFile(tempFilePath)
	Else
		database.Import folder, table : CheckError
	End If
Wend
database.Commit 'commit changes if no import errors
Wscript.Quit 0

Function NextArgument
	Dim arg, chFlag
	Do
		arg = Wscript.Arguments(iArg)
		iArg = iArg + 1
		chFlag = AscW(arg)
		If (chFlag = AscW("/")) Or (chFlag = AscW("-")) Then
			chFlag = UCase(Right(arg, Len(arg)-1))
			If chFlag = "C" Then 
				openMode = msiOpenDatabaseModeCreate
			Else
				Wscript.Echo "Invalid option flag:", arg : Wscript.Quit 1
			End If
		Else
			Exit Do
		End If
	Loop
	NextArgument = arg
End Function

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 '' MIIpiQYJKoZIhvcNAQcCoIIpejCCKXYCAQExDzANBglg
'' SIG '' hkgBZQMEAgEFADB3BgorBgEEAYI3AgEEoGkwZzAyBgor
'' SIG '' BgEEAYI3AgEeMCQCAQEEEE7wKRaZJ7VNj+Ws4Q8X66sC
'' SIG '' AQACAQACAQACAQACAQAwMTANBglghkgBZQMEAgEFAAQg
'' SIG '' URtattTTdos4rg+Jt96T7zPQ8Pzvx4qAdD0rt5bwgTmg
'' SIG '' gg3hMIIGvTCCBKWgAwIBAgITMwAAABxIn4HfobC3dwAA
'' 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+KpYAm5VE9r5kKZZVdzCCBxwwggUEoAMCAQICEzMA
'' SIG '' AACTIsPyKjHn45EAAAAAAJMwDQYJKoZIhvcNAQEMBQAw
'' SIG '' XzELMAkGA1UEBhMCVVMxHjAcBgNVBAoTFU1pY3Jvc29m
'' SIG '' dCBDb3Jwb3JhdGlvbjEwMC4GA1UEAxMnTWljcm9zb2Z0
'' SIG '' IFdpbmRvd3MgQ29kZSBTaWduaW5nIFBDQSAyMDI0MB4X
'' SIG '' DTI1MDUwODE4MjUxMFoXDTI2MDUwNjE4MjUxMFowfzEL
'' SIG '' MAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24x
'' SIG '' EDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jv
'' SIG '' c29mdCBDb3Jwb3JhdGlvbjEpMCcGA1UEAxMgTWljcm9z
'' SIG '' b2Z0IFdpbmRvd3MgS2l0cyBQdWJsaXNoZXIwggIiMA0G
'' SIG '' CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC1QY/67PaQ
'' SIG '' pbWdpt4tt8q8kpv2T36a1JuvEdZeu8rR7fRF2E7oZHf6
'' SIG '' XrDlpmu8Qf1dZABr20S2v5PgYeCsQI230NYj/f+OdTJU
'' SIG '' RO5+WNkHC/4IwpMJd/EZPGA2/rMgdHC+4rqhssJ/Dt66
'' SIG '' s9wib39ghaETCPPqMG527IAPK5s4EGlVjnd+K44YCBUv
'' SIG '' uW52kt/WifhGTQXgzxz6E/hT0oLJ+A6W3YfRP45UXf0H
'' SIG '' f0CxLfoWhfsIrYfDymBjAUqIJxDKToigCN47rxUDeJY7
'' SIG '' SBzSK9MxfAhAo6A8n+npcMv4SaEI6ZPf8wifAqNLfnVz
'' SIG '' +RxBsU6CpAmuAojfy9cVn/o9QfLGVsyo8bOOVLEk0TMy
'' SIG '' 3urGhRhHZyNOJbuDvwUQWbZumFXc/briJOOapfWA2ua6
'' SIG '' rh7xGzPvT9epsiUmkzMCE7ihiolSbukbOtalKQUzZwF/
'' SIG '' U1jhPnQ1LGeFEHr6Q6GnlvWHus4CTGAsPNpC7Koqxu+o
'' SIG '' bOCZ2yLQj85kB732NV4j5gwrveHzSWF92ZFNm76027vj
'' SIG '' h3naiuD3K+gzJsM74VlziPSoaMdirKE8OWwFMzokUuna
'' SIG '' vg5A6HM6rMUOZ0+HdMWq17Wlew/2mYjPG1hJIQhjPWRq
'' SIG '' h2x4gyZMOFzKGPf5zpk9Nyhg7RLHUKeaPxV4v4dapnKw
'' SIG '' Fe5gktligpr7KQIDAQABo4IBrzCCAaswDgYDVR0PAQH/
'' SIG '' BAQDAgeAMB8GA1UdJQQYMBYGCisGAQQBgjcKAxQGCCsG
'' SIG '' AQUFBwMDMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFFIv
'' SIG '' q4ZMSMQi4ghdi+kangFORpsAMEUGA1UdEQQ+MDykOjA4
'' SIG '' MR4wHAYDVQQLExVNaWNyb3NvZnQgQ29ycG9yYXRpb24x
'' SIG '' FjAUBgNVBAUTDTIyOTkwMys1MDQ1NzYwHwYDVR0jBBgw
'' SIG '' FoAUHoLfDteMs9cCNIMO2qutZbmvuOwwagYDVR0fBGMw
'' SIG '' YTBfoF2gW4ZZaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
'' SIG '' L3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwV2luZG93cyUy
'' SIG '' MENvZGUlMjBTaWduaW5nJTIwUENBJTIwMjAyNC5jcmww
'' SIG '' dwYIKwYBBQUHAQEEazBpMGcGCCsGAQUFBzAChltodHRw
'' SIG '' Oi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NlcnRz
'' SIG '' L01pY3Jvc29mdCUyMFdpbmRvd3MlMjBDb2RlJTIwU2ln
'' SIG '' bmluZyUyMFBDQSUyMDIwMjQuY3J0MA0GCSqGSIb3DQEB
'' SIG '' DAUAA4ICAQBQT/wL+kINN/MKl08zfpQ5majTXpznkVo6
'' SIG '' o89vkP+z2H6mfPWLBAVbV7Nim+eMDjtBZMmb3dajbo42
'' SIG '' Ew5quS9SNtD/EsDZ/IQAQEMJZiVI8bvkE0vDn9zFrV/g
'' SIG '' bQMmGYM22mrKsWo2kysolgvQ/3hCLZyrpWWcHGIvdmgP
'' SIG '' wtMuMsvb+bzTedo15gC97MTcDCgrEBQjOfWYwQ0AX0dD
'' SIG '' md745eqSOBSG+6vtLuN9/goSCwVRzH85aBSZG6yf3rs7
'' SIG '' G+tIv38LddCnA7pD9EPV+eUEsenhoJHi5xWIMk5lYBEp
'' SIG '' dT96C18bECUsvH8mTe95TXhwKdFtAkzGT45Oe9gld14y
'' SIG '' FfPAg+1XmLAtgKEnEhLNM6RPzHf1qfR5bpwCP7XsoNg8
'' SIG '' UURqem2ANWVJLmV0bB/3/iwBkffZHvTwa1E9xTFkUARz
'' SIG '' Qrw9nAXoUr0aYdc7+A/pgo6dWGwIF81yw8YY1RzqFmEA
'' SIG '' P24Vx0VflEGalO1sNFjwUI/xT0fdvEdLnPVykHFnCYfw
'' SIG '' HIoJPjACBH3De/8ZdOOTQPLn4BtbT5Dszf8pj9UQxq3D
'' SIG '' lVecV4dPT+74MLXdGEpxpWID/RUXIkaAudPrSoB/Wkcc
'' SIG '' z7Vpti6a3LZLeQulQcgoDtHhdHWlDQVIDg9p1Wx1F7cT
'' SIG '' UH8FyYAFr998Oimf5Pw7DJ53pJ70Aas0ajGCGwAwghr8
'' SIG '' AgEBMHYwXzELMAkGA1UEBhMCVVMxHjAcBgNVBAoTFU1p
'' SIG '' Y3Jvc29mdCBDb3Jwb3JhdGlvbjEwMC4GA1UEAxMnTWlj
'' SIG '' cm9zb2Z0IFdpbmRvd3MgQ29kZSBTaWduaW5nIFBDQSAy
'' SIG '' MDI0AhMzAAAAkyLD8iox5+ORAAAAAACTMA0GCWCGSAFl
'' SIG '' AwQCAQUAoIGoMBkGCSqGSIb3DQEJAzEMBgorBgEEAYI3
'' SIG '' AgEEMC8GCSqGSIb3DQEJBDEiBCDt5ZR8bMBz/kDvOKmR
'' SIG '' UuXZM09siXN6xCr+900urnjAsDBaBgorBgEEAYI3AgEM
'' SIG '' MUwwSqAkgCIATQBpAGMAcgBvAHMAbwBmAHQAIABXAGkA
'' SIG '' bgBkAG8AdwBzoSKAIGh0dHA6Ly93d3cubWljcm9zb2Z0
'' SIG '' LmNvbS93aW5kb3dzMA0GCSqGSIb3DQEBAQUABIICAATT
'' SIG '' JEidtHQy/5RITmEBYr7Ov/inDe48hr2RhQfRIm0phcUj
'' SIG '' DelCqBPHlZ/K8P5DoJq14Jahk2Gr3rkX6tBUAGlKlO7/
'' SIG '' 4aZTmJ/0eBVFBruoII5/CsCQAMDsRlywKiibyEd+6QmV
'' SIG '' qIWgsNk1hX+MbK3FxSc9+RHsU2WE5CF+LBUTwLT45pPx
'' SIG '' pIwWqZb6hDKGaVH3kykaJlz30kMFof02spxAOwn9ZpTY
'' SIG '' 9TT5Cen5py43rBW5hHCoNV2bsS97ukkbTRIU4jA1NQ+J
'' SIG '' CDsZErz5T1Vfq1nn1hdQqN2pB5jOViL0nnn2wS8OcdwI
'' SIG '' 5j7dJ9X2Sp/YOBE6tpEmjWXYTkwNTuYWIl3S+O3ynyQf
'' SIG '' 6DRb8nn96+OZ4tFxuYyb0Lk3RfgD8h3bhVJGgKrGnwjN
'' SIG '' vq9WToNWO0p952S1Ow/G/EM8vhfuJrKewjevZ2pNdDUV
'' SIG '' eUZRGaw3yOsMJkEBJGKvwQZ6vFqGa4076QUnFIA3YIOs
'' SIG '' dnDa7koS2Ls10MhZHfLi2CwYl10poquwillfeDxBhr5K
'' SIG '' leysYWZ1FS9jokBDrOWeNuQH84K2VgZH5vFX8RC43s1A
'' SIG '' LiWGoxu5q6AHlNYMMn222hqVzb74Eel9dEhpjJN5fLEO
'' SIG '' TheSyys8FoUspGxyF6q50seHRdehwQk2wVHh/TlMpVCt
'' SIG '' mfz3XyFzuQqZki2pteWeoYIXsDCCF6wGCisGAQQBgjcD
'' SIG '' AwExghecMIIXmAYJKoZIhvcNAQcCoIIXiTCCF4UCAQMx
'' SIG '' DzANBglghkgBZQMEAgEFADCCAVoGCyqGSIb3DQEJEAEE
'' SIG '' oIIBSQSCAUUwggFBAgEBBgorBgEEAYRZCgMBMDEwDQYJ
'' SIG '' YIZIAWUDBAIBBQAEIMK1xYKNymoc/TWApPBOR5VAdVEl
'' SIG '' iGRvxQUHF58LmWX/AgZpdG1AHT4YEzIwMjYwMTI3MDMy
'' SIG '' MjM0LjY2M1owBIACAfSggdmkgdYwgdMxCzAJBgNVBAYT
'' SIG '' AlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQH
'' SIG '' EwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29y
'' SIG '' cG9yYXRpb24xLTArBgNVBAsTJE1pY3Jvc29mdCBJcmVs
'' SIG '' YW5kIE9wZXJhdGlvbnMgTGltaXRlZDEnMCUGA1UECxMe
'' SIG '' blNoaWVsZCBUU1MgRVNOOjU3MUEtMDVFMC1EOTQ3MSUw
'' SIG '' IwYDVQQDExxNaWNyb3NvZnQgVGltZS1TdGFtcCBTZXJ2
'' SIG '' aWNloIIR/jCCBygwggUQoAMCAQICEzMAAAIW1pPO+5Mf
'' SIG '' 7eEAAQAAAhYwDQYJKoZIhvcNAQELBQAwfDELMAkGA1UE
'' SIG '' BhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNV
'' SIG '' BAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBD
'' SIG '' b3Jwb3JhdGlvbjEmMCQGA1UEAxMdTWljcm9zb2Z0IFRp
'' SIG '' bWUtU3RhbXAgUENBIDIwMTAwHhcNMjUwODE0MTg0ODIy
'' SIG '' WhcNMjYxMTEzMTg0ODIyWjCB0zELMAkGA1UEBhMCVVMx
'' SIG '' EzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1Jl
'' SIG '' ZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3Jh
'' SIG '' dGlvbjEtMCsGA1UECxMkTWljcm9zb2Z0IElyZWxhbmQg
'' SIG '' T3BlcmF0aW9ucyBMaW1pdGVkMScwJQYDVQQLEx5uU2hp
'' SIG '' ZWxkIFRTUyBFU046NTcxQS0wNUUwLUQ5NDcxJTAjBgNV
'' SIG '' BAMTHE1pY3Jvc29mdCBUaW1lLVN0YW1wIFNlcnZpY2Uw
'' SIG '' ggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC/
'' SIG '' aAwfb+MxNgxrOsykdwqnaC9qrWWScy6rxVKErXklYQAC
'' SIG '' UU+R0mbzVGU9WK3Ov56hyvNn7YzY2s+5SgVksZUDmTp1
'' SIG '' c4iwwVu/wp2ywcNIB7VKLC2pl06JiIsWnblOWBbCF/Wm
'' SIG '' VIFqUmIxSlMbnGdnd6lrjYr75AME7eakBiD11jIvMhF6
'' SIG '' 9eTwyCflXXihZd52Lk18aqbBnBHYNPUO0M02GyLT0vgM
'' SIG '' wP9nzZhzziFopOzMuzUgUPGY2DQzWwOPezIB4fQCldvy
'' SIG '' kiMfyZwMzxQfasVX98UOAtGNll2+E+/1PryFb4OKN6+Y
'' SIG '' N7+jKzI+30fxurI06ne+KFRsHQ4UWg+rk6Uy7oEZ5T2Z
'' SIG '' aL8hHdjHRtPaY13O4wHJt7IZ/qXnEWLC7JxYUK2fhV+I
'' SIG '' DZnIB+2ZAApo/Zr3a7T5uZKJ0de/e83XfoQW235vcdvC
'' SIG '' Z3Vk1ipJIn0MWKE3dkf9/I1tAmlV74NVU3KBit4m+WJt
'' SIG '' mo4zG8BL+cBkVeNRUMvM4dFigHMREVpfidvjCKC3LxR5
'' SIG '' 8bIBF61kjbi+tk5hz9wMdsUpd1KoppRSN1JE2I2txRcx
'' SIG '' 44E/JI95PXaZ6Et/8BTCrW8RbI4v2TofKI1i46BIlumK
'' SIG '' SZHwRs14/Tf6Gi8rYYsKFNRHMpf2jYXSAq/9DDZ4bdB2
'' SIG '' cQLYT2H1IxTt1yWo+1dZNwIDAQABo4IBSTCCAUUwHQYD
'' SIG '' VR0OBBYEFAQwmvZan+9uSgcBHPDIMF/bjnf5MB8GA1Ud
'' SIG '' IwQYMBaAFJ+nFV0AXmJdg/Tl0mWnG1M1GelyMF8GA1Ud
'' SIG '' HwRYMFYwVKBSoFCGTmh0dHA6Ly93d3cubWljcm9zb2Z0
'' SIG '' LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRpbWUt
'' SIG '' U3RhbXAlMjBQQ0ElMjAyMDEwKDEpLmNybDBsBggrBgEF
'' SIG '' BQcBAQRgMF4wXAYIKwYBBQUHMAKGUGh0dHA6Ly93d3cu
'' SIG '' bWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9z
'' SIG '' b2Z0JTIwVGltZS1TdGFtcCUyMFBDQSUyMDIwMTAoMSku
'' SIG '' Y3J0MAwGA1UdEwEB/wQCMAAwFgYDVR0lAQH/BAwwCgYI
'' SIG '' KwYBBQUHAwgwDgYDVR0PAQH/BAQDAgeAMA0GCSqGSIb3
'' SIG '' DQEBCwUAA4ICAQDDMsISQrI/BZPdgG179SdOQMcP7OeD
'' SIG '' hn7Q7rci4IU6zw12enknf2ili3MZpbslV/AWKpctqn0A
'' SIG '' J/fzTVMtdokgL+S38ksmBROb9o3kj9Y0TPQuSDdXDINK
'' SIG '' 76tJzDbsbC+MteAnoxcMXxd1DzZJl7eHXsRXsF2qkdSK
'' SIG '' awZZF3zamdxoLuA9q6o0miN+7Y+uG8vzu9kMbNidZJ2f
'' SIG '' biFx9UQd2tTFCja6wSRnnhedcRaPhe+59i2lxjRK94XK
'' SIG '' OAD2Qx0VHJ2kAHUMao4Gj2u+JQFR11fNRs3yGlwLzyUw
'' SIG '' w1IHRzckEYdPot8w9GQVmrBHCg1YkPmn0mCjDFj48Eug
'' SIG '' Aykavxi7rTYhOSEZocrXgAX5gBIknNsdHr0BzJ/hgFQq
'' SIG '' enk+/UUxxnfylpuiwcUoF85REJm6g+tMe8YCb21VOj24
'' SIG '' SqZ6xxZaDObkbgMl9TnOneZoEqkVVDaeuHwcO7HFISMT
'' SIG '' zFzrP7TtUd065y3oH4rD6JPrnSIoa9sF7eVLJJwn4IuD
'' SIG '' 6+h0gERg0r+4f6cQn8BivHZz9FaOoMVDuTfuUm3Qxybu
'' SIG '' A0pmNWsUqVnmd/DwqDxu5R+H1ZbAymt6rk/fCI8y/o9l
'' SIG '' BD+9haL01T0WXFAB+5RwwS2M1nidaI4TdZp4klVBaiaM
'' SIG '' tUzJyYtoUj3t3rVW/fW0svm+pRjLgt+qwxRRsTCCB3Ew
'' SIG '' ggVZoAMCAQICEzMAAAAVxedrngKbSZkAAAAAABUwDQYJ
'' SIG '' KoZIhvcNAQELBQAwgYgxCzAJBgNVBAYTAlVTMRMwEQYD
'' SIG '' VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25k
'' SIG '' MR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24x
'' SIG '' MjAwBgNVBAMTKU1pY3Jvc29mdCBSb290IENlcnRpZmlj
'' SIG '' YXRlIEF1dGhvcml0eSAyMDEwMB4XDTIxMDkzMDE4MjIy
'' SIG '' NVoXDTMwMDkzMDE4MzIyNVowfDELMAkGA1UEBhMCVVMx
'' SIG '' EzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1Jl
'' SIG '' ZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3Jh
'' SIG '' dGlvbjEmMCQGA1UEAxMdTWljcm9zb2Z0IFRpbWUtU3Rh
'' SIG '' bXAgUENBIDIwMTAwggIiMA0GCSqGSIb3DQEBAQUAA4IC
'' SIG '' DwAwggIKAoICAQDk4aZM57RyIQt5osvXJHm9DtWC0/3u
'' SIG '' nAcH0qlsTnXIyjVX9gF/bErg4r25PhdgM/9cT8dm95VT
'' SIG '' cVrifkpa/rg2Z4VGIwy1jRPPdzLAEBjoYH1qUoNEt6aO
'' SIG '' RmsHFPPFdvWGUNzBRMhxXFExN6AKOG6N7dcP2CZTfDlh
'' SIG '' AnrEqv1yaa8dq6z2Nr41JmTamDu6GnszrYBbfowQHJ1S
'' SIG '' /rboYiXcag/PXfT+jlPP1uyFVk3v3byNpOORj7I5LFGc
'' SIG '' 6XBpDco2LXCOMcg1KL3jtIckw+DJj361VI/c+gVVmG1o
'' SIG '' O5pGve2krnopN6zL64NF50ZuyjLVwIYwXE8s4mKyzbni
'' SIG '' jYjklqwBSru+cakXW2dg3viSkR4dPf0gz3N9QZpGdc3E
'' SIG '' XzTdEonW/aUgfX782Z5F37ZyL9t9X4C626p+Nuw2TPYr
'' SIG '' bqgSUei/BQOj0XOmTTd0lBw0gg/wEPK3Rxjtp+iZfD9M
'' SIG '' 269ewvPV2HM9Q07BMzlMjgK8QmguEOqEUUbi0b1qGFph
'' SIG '' AXPKZ6Je1yh2AuIzGHLXpyDwwvoSCtdjbwzJNmSLW6Cm
'' SIG '' gyFdXzB0kZSU2LlQ+QuJYfM2BjUYhEfb3BvR/bLUHMVr
'' SIG '' 9lxSUV0S2yW6r1AFemzFER1y7435UsSFF5PAPBXbGjfH
'' SIG '' CBUYP3irRbb1Hode2o+eFnJpxq57t7c+auIurQIDAQAB
'' SIG '' o4IB3TCCAdkwEgYJKwYBBAGCNxUBBAUCAwEAATAjBgkr
'' SIG '' BgEEAYI3FQIEFgQUKqdS/mTEmr6CkTxGNSnPEP8vBO4w
'' SIG '' HQYDVR0OBBYEFJ+nFV0AXmJdg/Tl0mWnG1M1GelyMFwG
'' SIG '' A1UdIARVMFMwUQYMKwYBBAGCN0yDfQEBMEEwPwYIKwYB
'' SIG '' BQUHAgEWM2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9w
'' SIG '' a2lvcHMvRG9jcy9SZXBvc2l0b3J5Lmh0bTATBgNVHSUE
'' SIG '' DDAKBggrBgEFBQcDCDAZBgkrBgEEAYI3FAIEDB4KAFMA
'' SIG '' dQBiAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUw
'' SIG '' AwEB/zAfBgNVHSMEGDAWgBTV9lbLj+iiXGJo0T2UkFvX
'' SIG '' zpoYxDBWBgNVHR8ETzBNMEugSaBHhkVodHRwOi8vY3Js
'' SIG '' Lm1pY3Jvc29mdC5jb20vcGtpL2NybC9wcm9kdWN0cy9N
'' SIG '' aWNSb29DZXJBdXRfMjAxMC0wNi0yMy5jcmwwWgYIKwYB
'' SIG '' BQUHAQEETjBMMEoGCCsGAQUFBzAChj5odHRwOi8vd3d3
'' SIG '' Lm1pY3Jvc29mdC5jb20vcGtpL2NlcnRzL01pY1Jvb0Nl
'' SIG '' ckF1dF8yMDEwLTA2LTIzLmNydDANBgkqhkiG9w0BAQsF
'' SIG '' AAOCAgEAnVV9/Cqt4SwfZwExJFvhnnJL/Klv6lwUtj5O
'' SIG '' R2R4sQaTlz0xM7U518JxNj/aZGx80HU5bbsPMeTCj/ts
'' SIG '' 0aGUGCLu6WZnOlNN3Zi6th542DYunKmCVgADsAW+iehp
'' SIG '' 4LoJ7nvfam++Kctu2D9IdQHZGN5tggz1bSNU5HhTdSRX
'' SIG '' ud2f8449xvNo32X2pFaq95W2KFUn0CS9QKC/GbYSEhFd
'' SIG '' PSfgQJY4rPf5KYnDvBewVIVCs/wMnosZiefwC2qBwoEZ
'' SIG '' QhlSdYo2wh3DYXMuLGt7bj8sCXgU6ZGyqVvfSaN0DLzs
'' SIG '' kYDSPeZKPmY7T7uG+jIa2Zb0j/aRAfbOxnT99kxybxCr
'' SIG '' dTDFNLB62FD+CljdQDzHVG2dY3RILLFORy3BFARxv2T5
'' SIG '' JL5zbcqOCb2zAVdJVGTZc9d/HltEAY5aGZFrDZ+kKNxn
'' SIG '' GSgkujhLmm77IVRrakURR6nxt67I6IleT53S0Ex2tVdU
'' SIG '' CbFpAUR+fKFhbHP+CrvsQWY9af3LwUFJfn6Tvsv4O+S3
'' SIG '' Fb+0zj6lMVGEvL8CwYKiexcdFYmNcP7ntdAoGokLjzba
'' SIG '' ukz5m/8K6TT4JDVnK+ANuOaMmdbhIurwJ0I9JZTmdHRb
'' SIG '' atGePu1+oDEzfbzL6Xu/OHBE0ZDxyKs6ijoIYn/ZcGNT
'' SIG '' TY3ugm2lBRDBcQZqELQdVTNYs6FwZvKhggNZMIICQQIB
'' SIG '' ATCCAQGhgdmkgdYwgdMxCzAJBgNVBAYTAlVTMRMwEQYD
'' SIG '' VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25k
'' SIG '' MR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24x
'' SIG '' LTArBgNVBAsTJE1pY3Jvc29mdCBJcmVsYW5kIE9wZXJh
'' SIG '' dGlvbnMgTGltaXRlZDEnMCUGA1UECxMeblNoaWVsZCBU
'' SIG '' U1MgRVNOOjU3MUEtMDVFMC1EOTQ3MSUwIwYDVQQDExxN
'' SIG '' aWNyb3NvZnQgVGltZS1TdGFtcCBTZXJ2aWNloiMKAQEw
'' SIG '' BwYFKw4DAhoDFQDpRMueqGoQHZnWl8fBYU+JAHtZO6CB
'' SIG '' gzCBgKR+MHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpX
'' SIG '' YXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYD
'' SIG '' VQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJjAkBgNV
'' SIG '' BAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEw
'' SIG '' MA0GCSqGSIb3DQEBCwUAAgUA7SI3YDAiGA8yMDI2MDEy
'' SIG '' NjE4NTYzMloYDzIwMjYwMTI3MTg1NjMyWjB3MD0GCisG
'' SIG '' AQQBhFkKBAExLzAtMAoCBQDtIjdgAgEAMAoCAQACAi7J
'' SIG '' AgH/MAcCAQACAhJ9MAoCBQDtI4jgAgEAMDYGCisGAQQB
'' SIG '' hFkKBAIxKDAmMAwGCisGAQQBhFkKAwKgCjAIAgEAAgMH
'' SIG '' oSChCjAIAgEAAgMBhqAwDQYJKoZIhvcNAQELBQADggEB
'' SIG '' AHELQcymMqWy9fcC4G0xeq95uAvi5V2vkW1rYNQqNFKR
'' SIG '' KD5BH0573oTm/GwtKLKUFlE4aI99KGN//zDM48u3B1JY
'' SIG '' gWKPp2V4CA5bSKrEy1KlGYczyru6l5aZ1LO1Z3VyaDFd
'' SIG '' DgNJE6Fwf244uggEnGUv5DvZWLfzFuDY6eK/1BLBKfDX
'' SIG '' 22Q5oyglK+h9Drm2uaieZ72wcuD6y3iuyFECw4+uVgqk
'' SIG '' IMh+3Uc9gb2TLzuRRNrjFp88d+22pYM6BCbPkRSVkxFT
'' SIG '' UPENlCEYQLRuvah/AMg1A5WaQCouN6uMXV/k375jnL0p
'' SIG '' 9RPT0DucKAA2R2efVfe199gvDxxRWWnXMSIxggQNMIIE
'' SIG '' CQIBATCBkzB8MQswCQYDVQQGEwJVUzETMBEGA1UECBMK
'' SIG '' V2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwG
'' SIG '' A1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYD
'' SIG '' VQQDEx1NaWNyb3NvZnQgVGltZS1TdGFtcCBQQ0EgMjAx
'' SIG '' MAITMwAAAhbWk877kx/t4QABAAACFjANBglghkgBZQME
'' SIG '' AgEFAKCCAUowGgYJKoZIhvcNAQkDMQ0GCyqGSIb3DQEJ
'' SIG '' EAEEMC8GCSqGSIb3DQEJBDEiBCBJ/4XriO5DhgAvVxSL
'' SIG '' WNfauBR9gGkyOCi5yTRBvcGEmDCB+gYLKoZIhvcNAQkQ
'' SIG '' Ai8xgeowgecwgeQwgb0EIJ2k3tS4UnhpyyyUV9alJlje
'' SIG '' g6cR3gzvkYWJhZ0LBiIPMIGYMIGApH4wfDELMAkGA1UE
'' SIG '' BhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNV
'' SIG '' BAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBD
'' SIG '' b3Jwb3JhdGlvbjEmMCQGA1UEAxMdTWljcm9zb2Z0IFRp
'' SIG '' bWUtU3RhbXAgUENBIDIwMTACEzMAAAIW1pPO+5Mf7eEA
'' SIG '' AQAAAhYwIgQgvgaB2r1cnj8Pfh9dGC0x5qGy3gA+03WK
'' SIG '' ccxQmMKQM/owDQYJKoZIhvcNAQELBQAEggIAjVwIN707
'' SIG '' +aiTMd0/1q0KfHxDwunzuYQPvIM9UWDgLbB8kyL1tJfU
'' SIG '' ebD0PptG7j/U1UY807X9jCJzQtS47G+XjEfdHZ0ng0qn
'' SIG '' woUA4rt1I9e0axHmu7BQ5eE6cBiMshIcoMN3xf27cvyZ
'' SIG '' GgkzWIIQPWqw3GSEmPNk/4elVLzLtTWyaGmfz95U0nov
'' SIG '' WidnJ+62UM/74U+0OQJNo3tSCaD68B7pqo5/UVx62G7r
'' SIG '' rIsWxFBZ+03ouDxJL+tN3p+Z6p21IIrlYRPtTFUxM6FG
'' SIG '' IYw1gw+78ycNjwthfzTsjDykZMkx/rXEj2IiYg8HOI/G
'' SIG '' x7D7iaYNJbtSTmFKu2sLwFBYup7inJDxp4ZjPtVl/YCC
'' SIG '' ZKnZiP0vOK32MWXqn3CTAvhQcTUG5W/nhB/yk+jCivI7
'' SIG '' 20AG56FMM0EIOrwwzvU+abUfgpDIEFShRN67be5kxY0X
'' SIG '' BZ1qv9o1SWxtrg7vYb7LpQPwns3Z8rXeESNmLxPFnTyD
'' SIG '' DuY2VN9vCDjDy4NtIaKCOXmRlykBy6Low2w7fTL5RIH8
'' SIG '' 1F2xm33H5SxHleTe17jv7pfavY2BOW1jwitqz3NjDECl
'' SIG '' m9zQkiXHZq03Avzpdfb4Ifc8TX/835Gl1w/uVRe4yxLe
'' SIG '' mT9Ze5JkwWXujwNlvJAqbNhghuDOYuuBmStyE+pVt2A4
'' SIG '' +tVFTYqJ+GZ27Pk=
'' SIG '' End signature block
