' Windows Installer utility to preview dialogs from a install database
' For use with Windows Scripting Host, CScript.exe or WScript.exe
' Copyright (c) Microsoft Corporation. All rights reserved.
' Demonstrates the use of preview APIs
'
Option Explicit

Const msiOpenDatabaseModeReadOnly = 0

' Show help if no arguments or if argument contains ?
Dim argCount : argCount = Wscript.Arguments.Count
If argCount > 0 Then If InStr(1, Wscript.Arguments(0), "?", vbTextCompare) > 0 Then argCount = 0
If argCount = 0 Then
	Wscript.Echo "Windows Installer utility to preview dialogs from an install database." &_
		vbLf & " The 1st argument is the path to an install database, relative or complete path" &_
		vbLf & " Subsequent arguments are dialogs to display (primary key of Dialog table)" &_
		vbLf & " To show a billboard, append the Control name (Control table key) and Billboard" &_
		vbLf & "       name (Billboard table key) to the Dialog name, separated with colons." &_
		vbLf & " If no dialogs specified, all dialogs in Dialog table are displayed sequentially" &_
		vbLf & " Note: The name of the dialog, if provided,  is case-sensitive" &_
		vblf &_
		vblf & "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 database
Dim databasePath : databasePath = Wscript.Arguments(0)
Dim database : Set database = installer.OpenDatabase(databasePath, msiOpenDatabaseModeReadOnly) : CheckError

' Create preview object
Dim preview : Set preview = Database.EnableUIpreview : CheckError

' Get properties from Property table and put into preview object
Dim record, view : Set view = database.OpenView("SELECT `Property`,`Value` FROM `Property`") : CheckError
view.Execute : CheckError
Do
	Set record = view.Fetch : CheckError
	If record Is Nothing Then Exit Do
	preview.Property(record.StringData(1)) = record.StringData(2) : CheckError
Loop

' Loop through list of dialog names and display each one
If argCount = 1 Then ' No dialog name, loop through all dialogs
	Set view = database.OpenView("SELECT `Dialog` FROM `Dialog`") : CheckError
	view.Execute : CheckError
	Do
		Set record = view.Fetch : CheckError
		If record Is Nothing Then Exit Do
		preview.ViewDialog(record.StringData(1)) : CheckError
		Wait
	Loop
Else ' explicit dialog names supplied
	Set view = database.OpenView("SELECT `Dialog` FROM `Dialog` WHERE `Dialog`=?") : CheckError
	Dim paramRecord, argNum, argArray, dialogName, controlName, billboardName
	Set paramRecord = installer.CreateRecord(1)
	For argNum = 1 To argCount-1
		dialogName = Wscript.Arguments(argNum)
		argArray = Split(dialogName,":",-1,vbTextCompare)
		If UBound(argArray) <> 0 Then  ' billboard to add to dialog
			If UBound(argArray) <> 2 Then Fail "Incorrect billboard syntax, must specify 3 values"
			dialogName    = argArray(0)
			controlName   = argArray(1) ' we could validate that controlName is in the Control table
			billboardName = argArray(2) ' we could validate that billboard is in the Billboard table
		End If
		paramRecord.StringData(1) = dialogName
		view.Execute paramRecord : CheckError
		If view.Fetch Is Nothing Then Fail "Dialog not found: " & dialogName
		preview.ViewDialog(dialogName) : CheckError
		If UBound(argArray) = 2 Then preview.ViewBillboard controlName, billboardName : CheckError
		Wait
	Next
End If
preview.ViewDialog ""  ' clear dialog, must do this to release object deadlock

' Wait until user input to clear dialog. Too bad there's no function to wait for keyboard input
Sub Wait
	Dim shell : Set shell = Wscript.CreateObject("Wscript.Shell")
	MsgBox "Next",0,"Drag me away"
End Sub

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 '' MIImMwYJKoZIhvcNAQcCoIImJDCCJiACAQExDzANBglg
'' SIG '' hkgBZQMEAgEFADB3BgorBgEEAYI3AgEEoGkwZzAyBgor
'' SIG '' BgEEAYI3AgEeMCQCAQEEEE7wKRaZJ7VNj+Ws4Q8X66sC
'' SIG '' AQACAQACAQACAQACAQAwMTANBglghkgBZQMEAgEFAAQg
'' SIG '' mOr7DzNLA7B3kQygPHKkFo0lJ4ImjipM2G/ZKh4w1cKg
'' SIG '' ggtnMIIE7zCCA9egAwIBAgITMwAABae4j/uXXTWE7AAA
'' SIG '' AAAFpzANBgkqhkiG9w0BAQsFADB+MQswCQYDVQQGEwJV
'' SIG '' UzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMH
'' SIG '' UmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBv
'' SIG '' cmF0aW9uMSgwJgYDVQQDEx9NaWNyb3NvZnQgQ29kZSBT
'' SIG '' aWduaW5nIFBDQSAyMDEwMB4XDTI0MDgyMjE5MjU1N1oX
'' SIG '' DTI1MDcwNTE5MjU1N1owdDELMAkGA1UEBhMCVVMxEzAR
'' SIG '' BgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1v
'' SIG '' bmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlv
'' SIG '' bjEeMBwGA1UEAxMVTWljcm9zb2Z0IENvcnBvcmF0aW9u
'' SIG '' MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
'' SIG '' lhpUyo2LetKwfKDcj1iVBkFdjRsJUVyiYN+POKtpyYr/
'' SIG '' fha8/enxqF5W5SHid8akMRKAhA2I422ApYMd9TGXKEai
'' SIG '' Q9LCozbWAygNDYknTiULrd/hzdK0se+MqqGwwT/ACgMl
'' SIG '' gDWYrVEB5zx9RJE1zHUZZyZw9UbRZYzGDiZ68X6qwHbT
'' SIG '' TcVNaSGGJmOqA/HcnvNYvUR8UiRhIHzJxCKZ/9ckpIpE
'' SIG '' 1fjThxY9UB+/kh2VmDXHYC+PEEmtYwt9AIujCi4fdRTr
'' SIG '' ArLjVNHEwus+kJD+dZfXVPAfsZ72Wtv1s7yYQcmZ410v
'' SIG '' rVXjdigeRKdLHjrbhcLyOiqDl6xEygg4OwIDAQABo4IB
'' SIG '' bjCCAWowHwYDVR0lBBgwFgYKKwYBBAGCNz0GAQYIKwYB
'' SIG '' BQUHAwMwHQYDVR0OBBYEFFIVus1TcIc5i27HKM2KacHf
'' SIG '' HysSMEUGA1UdEQQ+MDykOjA4MR4wHAYDVQQLExVNaWNy
'' SIG '' b3NvZnQgQ29ycG9yYXRpb24xFjAUBgNVBAUTDTIzMDg2
'' SIG '' NSs1MDI3MDMwHwYDVR0jBBgwFoAU5vxfe7siAFjkck61
'' SIG '' 9CF0IzLm76wwVgYDVR0fBE8wTTBLoEmgR4ZFaHR0cDov
'' SIG '' L2NybC5taWNyb3NvZnQuY29tL3BraS9jcmwvcHJvZHVj
'' SIG '' dHMvTWljQ29kU2lnUENBXzIwMTAtMDctMDYuY3JsMFoG
'' SIG '' CCsGAQUFBwEBBE4wTDBKBggrBgEFBQcwAoY+aHR0cDov
'' SIG '' L3d3dy5taWNyb3NvZnQuY29tL3BraS9jZXJ0cy9NaWND
'' SIG '' b2RTaWdQQ0FfMjAxMC0wNy0wNi5jcnQwDAYDVR0TAQH/
'' SIG '' BAIwADANBgkqhkiG9w0BAQsFAAOCAQEAJdXECEPhQ/7m
'' SIG '' 2liIjIPMELRMd0pLEOa+qgIH3qznuk2eW5k3DI9lVJBy
'' SIG '' 675oUnKEXvaUPwqsGeu+mLjPdLYqj6zA41zvJCwgPpE3
'' SIG '' g2aCkC9DCNkoWw4V6wyLLovYRjYXfD8Bk1kJLJ6DuB8a
'' SIG '' hhtjH4qrJzoDKPR4ppkxdvx9Vy3P4Nkz6RfBslwHKO5I
'' SIG '' XIeJdYSCKZlRGTemRQpNv5Dn+5trApfIefgVkA5kmhAr
'' SIG '' SNsXOUi26qLdYrFrxYhEbWsPcUG99TFmGrNpdv13XGx+
'' SIG '' 0BWKSqRuHQ2YSiHZUVZmKVMkWjTmVjcDXOxum8yiAtxw
'' SIG '' BhTiBHOGg0Ltsk/6tMie1jCCBnAwggRYoAMCAQICCmEM
'' SIG '' UkwAAAAAAAMwDQYJKoZIhvcNAQELBQAwgYgxCzAJBgNV
'' SIG '' BAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYD
'' SIG '' VQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQg
'' SIG '' Q29ycG9yYXRpb24xMjAwBgNVBAMTKU1pY3Jvc29mdCBS
'' SIG '' b290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDEwMB4X
'' SIG '' DTEwMDcwNjIwNDAxN1oXDTI1MDcwNjIwNTAxN1owfjEL
'' SIG '' MAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24x
'' SIG '' EDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jv
'' SIG '' c29mdCBDb3Jwb3JhdGlvbjEoMCYGA1UEAxMfTWljcm9z
'' SIG '' b2Z0IENvZGUgU2lnbmluZyBQQ0EgMjAxMDCCASIwDQYJ
'' SIG '' KoZIhvcNAQEBBQADggEPADCCAQoCggEBAOkOZFB5Z7XE
'' SIG '' 4/0JAEyelKz3VmjqRNjPxVhPqaV2fG1FutM5krSkHvn5
'' SIG '' ZYLkF9KP/UScCOhlk84sVYS/fQjjLiuoQSsYt6JLbklM
'' SIG '' axUH3tHSwokecZTNtX9LtK8I2MyI1msXlDqTziY/7Ob+
'' SIG '' NJhX1R1dSfayKi7VhbtZP/iQtCuDdMorsztG4/BGScEX
'' SIG '' ZlTJHL0dxFViV3L4Z7klIDTeXaallV6rKIDN1bKe5QO1
'' SIG '' Y9OyFMjByIomCll/B+z/Du2AEjVMEqa+Ulv1ptrgiwtI
'' SIG '' d9aFR9UQucboqu6Lai0FXGDGtCpbnCMcX0XjGhQebzfL
'' SIG '' GTOAaolNo2pmY3iT1TDPlR8CAwEAAaOCAeMwggHfMBAG
'' SIG '' CSsGAQQBgjcVAQQDAgEAMB0GA1UdDgQWBBTm/F97uyIA
'' SIG '' WORyTrX0IXQjMubvrDAZBgkrBgEEAYI3FAIEDB4KAFMA
'' SIG '' dQBiAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUw
'' SIG '' AwEB/zAfBgNVHSMEGDAWgBTV9lbLj+iiXGJo0T2UkFvX
'' SIG '' zpoYxDBWBgNVHR8ETzBNMEugSaBHhkVodHRwOi8vY3Js
'' SIG '' Lm1pY3Jvc29mdC5jb20vcGtpL2NybC9wcm9kdWN0cy9N
'' SIG '' aWNSb29DZXJBdXRfMjAxMC0wNi0yMy5jcmwwWgYIKwYB
'' SIG '' BQUHAQEETjBMMEoGCCsGAQUFBzAChj5odHRwOi8vd3d3
'' SIG '' Lm1pY3Jvc29mdC5jb20vcGtpL2NlcnRzL01pY1Jvb0Nl
'' SIG '' ckF1dF8yMDEwLTA2LTIzLmNydDCBnQYDVR0gBIGVMIGS
'' SIG '' MIGPBgkrBgEEAYI3LgMwgYEwPQYIKwYBBQUHAgEWMWh0
'' SIG '' dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9QS0kvZG9jcy9D
'' SIG '' UFMvZGVmYXVsdC5odG0wQAYIKwYBBQUHAgIwNB4yIB0A
'' SIG '' TABlAGcAYQBsAF8AUABvAGwAaQBjAHkAXwBTAHQAYQB0
'' SIG '' AGUAbQBlAG4AdAAuIB0wDQYJKoZIhvcNAQELBQADggIB
'' SIG '' ABp071dPKXvEFoV4uFDTIvwJnayCl/g0/yosl5US5eS/
'' SIG '' z7+TyOM0qduBuNweAL7SNW+v5X95lXflAtTx69jNTh4b
'' SIG '' YaLCWiMa8IyoYlFFZwjjPzwek/gwhRfIOUCm1w6zISnl
'' SIG '' paFpjCKTzHSY56FHQ/JTrMAPMGl//tIlIG1vYdPfB9XZ
'' SIG '' cgAsaYZ2PVHbpjlIyTdhbQfdUxnLp9Zhwr/ig6sP4Gub
'' SIG '' ldZ9KFGwiUpRpJpsyLcfShoOaanX3MF+0Ulwqratu3JH
'' SIG '' Yxf6ptaipobsqBBEm2O2smmJBsdGhnoYP+jFHSHVe/kC
'' SIG '' Iy3FQcu/HUzIFu+xnH/8IktJim4V46Z/dlvRU3mRhZ3V
'' SIG '' 0ts9czXzPK5UslJHasCqE5XSjhHamWdeMoz7N4XR3HWF
'' SIG '' nIfGWleFwr/dDY+Mmy3rtO7PJ9O1Xmn6pBYEAackZ3PP
'' SIG '' TU+23gVWl3r36VJN9HcFT4XG2Avxju1CCdENduMjVngi
'' SIG '' Jja+yrGMbqod5IXaRzNij6TJkTNfcR5Ar5hlySLoQiEl
'' SIG '' ihwtYNk3iUGJKhYP12E8lGhgUu/WR5mggEDuFYF3Ppzg
'' SIG '' UxgaUB04lZseZjMTJzkXeIc2zk7DX7L1PUdTtuDl2wth
'' SIG '' PSrXkizON1o+QEIxpB8QCMJWnL8kXVECnWp50hfT2sGU
'' SIG '' jgd7JXFEqwZq5tTG3yOalnXFMYIaJDCCGiACAQEwgZUw
'' SIG '' fjELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0
'' SIG '' b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1p
'' SIG '' Y3Jvc29mdCBDb3Jwb3JhdGlvbjEoMCYGA1UEAxMfTWlj
'' SIG '' cm9zb2Z0IENvZGUgU2lnbmluZyBQQ0EgMjAxMAITMwAA
'' SIG '' Bae4j/uXXTWE7AAAAAAFpzANBglghkgBZQMEAgEFAKCB
'' SIG '' xjAZBgkqhkiG9w0BCQMxDAYKKwYBBAGCNwIBBDAcBgor
'' SIG '' BgEEAYI3AgELMQ4wDAYKKwYBBAGCNwIBFTAvBgkqhkiG
'' SIG '' 9w0BCQQxIgQgQEDcxtKduE1DdS/GQ0Sp90VjaMMkhCrw
'' SIG '' muQvbvZ44LowWgYKKwYBBAGCNwIBDDFMMEqgJIAiAE0A
'' SIG '' aQBjAHIAbwBzAG8AZgB0ACAAVwBpAG4AZABvAHcAc6Ei
'' SIG '' gCBodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vd2luZG93
'' SIG '' czANBgkqhkiG9w0BAQEFAASCAQAIvt8CioWFMWG2n1Ah
'' SIG '' JT4jvOxrGkkppLOk59jeJ5L5j3CJVrWjaAY97XpmfouF
'' SIG '' D7JA03Hy+ksD5/45ayhfP0IzByMqZ/fJpVexulkOdun2
'' SIG '' W4rf0e5JDmRmN40d9PCIdDAQfbV1rvg70HZka4OxxN9S
'' SIG '' w+jqrhNs22qXmW1WHFk75FNTn6WBj8xHP9jLqwlmhOtP
'' SIG '' s/OhBZWuzubMPzbPMrQliZDjJBoFqOS5TG2YlhEhX0e0
'' SIG '' t6VCHv90TXjVTfpcqehYx8KnGeswSTLwV/EERK50j8aP
'' SIG '' G+6pjUQ7GDJ8jzmc48GIz+J/A/W1taMtFhP46T8TuXdV
'' SIG '' ZR4NINQZ0BQjzj6CoYIXljCCF5IGCisGAQQBgjcDAwEx
'' SIG '' gheCMIIXfgYJKoZIhvcNAQcCoIIXbzCCF2sCAQMxDzAN
'' SIG '' BglghkgBZQMEAgEFADCCAVEGCyqGSIb3DQEJEAEEoIIB
'' SIG '' QASCATwwggE4AgEBBgorBgEEAYRZCgMBMDEwDQYJYIZI
'' SIG '' AWUDBAIBBQAEIJmAhZdrvLCqu7AtKEvkXEN6Lxze2pkT
'' SIG '' kyP5cLkihjy7AgZnt6nlYsMYEjIwMjUwMzEyMTAyOTU3
'' SIG '' Ljg3WjAEgAIB9KCB0aSBzjCByzELMAkGA1UEBhMCVVMx
'' SIG '' EzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1Jl
'' SIG '' ZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3Jh
'' SIG '' dGlvbjElMCMGA1UECxMcTWljcm9zb2Z0IEFtZXJpY2Eg
'' SIG '' T3BlcmF0aW9uczEnMCUGA1UECxMeblNoaWVsZCBUU1Mg
'' SIG '' RVNOOjM3MDMtMDVFMC1EOTQ3MSUwIwYDVQQDExxNaWNy
'' SIG '' b3NvZnQgVGltZS1TdGFtcCBTZXJ2aWNloIIR7TCCByAw
'' SIG '' ggUIoAMCAQICEzMAAAIKR7IU2e6ysw8AAQAAAgowDQYJ
'' SIG '' KoZIhvcNAQELBQAwfDELMAkGA1UEBhMCVVMxEzARBgNV
'' SIG '' BAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQx
'' SIG '' HjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEm
'' SIG '' MCQGA1UEAxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENB
'' SIG '' IDIwMTAwHhcNMjUwMTMwMTk0MjU3WhcNMjYwNDIyMTk0
'' SIG '' MjU3WjCByzELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldh
'' SIG '' c2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNV
'' SIG '' BAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjElMCMGA1UE
'' SIG '' CxMcTWljcm9zb2Z0IEFtZXJpY2EgT3BlcmF0aW9uczEn
'' SIG '' MCUGA1UECxMeblNoaWVsZCBUU1MgRVNOOjM3MDMtMDVF
'' SIG '' MC1EOTQ3MSUwIwYDVQQDExxNaWNyb3NvZnQgVGltZS1T
'' SIG '' dGFtcCBTZXJ2aWNlMIICIjANBgkqhkiG9w0BAQEFAAOC
'' SIG '' Ag8AMIICCgKCAgEAsuzc8BKW+wacAJPSydNF6t9E3E43
'' SIG '' MDWfNE8QLQG4UmidpMJyQNQLvw6Pf3xAYwB7+jJrbd35
'' SIG '' jw3iCZ0O1QXiKvEXH43I62zyIN8AOb+TEH5TzUgTTr3F
'' SIG '' 0T/n2ZwMtBCw835yR5wpGTbEFGexhey8VC0yjmGNmCcO
'' SIG '' E65nB6IZGOg4wmcsYaphkMMHW46D1kW2Lv6MxXpv8nyT
'' SIG '' 8o1QapddOvG3FYefAPHOQg+k1jfy97vjcvuzvPg73q+q
'' SIG '' gU+OBMu6Xz2TGdR4u8rwi7+Sxs0geqNjg+RiGcu8+JIf
'' SIG '' FGB3c45/VsfkGdtt90iUCrWYaSO7h396DE4NM2p0H8+5
'' SIG '' oLnXn5hga0BINaMd5/t04s4dA/c1ZjUD/bBY7D0LTRmf
'' SIG '' SA/R/APpBSJ8eJq0sQNkshjDkHMZRjN9JLSCjN4qgrhR
'' SIG '' FPQh1TKTfeP9X5eE+j6Jyfv6FiahZWrWLjCr9mfLoqa5
'' SIG '' xXAMQqTrAyFQTvStbx3gDIkEFJXBPQg+d+iNWC55jtqh
'' SIG '' 2oDz5l4XThqx1JwlLaKdtXpbpB4e+av+cx/jpzXpKebn
'' SIG '' aY0DWQr4mAGXR7C55FNDX1AK+q9VKg3Eqtcn+UYsIpgf
'' SIG '' Eo7HZh5ZeID45qlYtP65pzNaABEJtz8lnE0EIm2C4rij
'' SIG '' e2OIqOWyU1cJvr0UW6SeVC/w99wv/+6px23qFgUCAwEA
'' SIG '' AaOCAUkwggFFMB0GA1UdDgQWBBQCrxdBBI+AMj32PFv6
'' SIG '' q7AL37WcJDAfBgNVHSMEGDAWgBSfpxVdAF5iXYP05dJl
'' SIG '' pxtTNRnpcjBfBgNVHR8EWDBWMFSgUqBQhk5odHRwOi8v
'' SIG '' d3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NybC9NaWNy
'' SIG '' b3NvZnQlMjBUaW1lLVN0YW1wJTIwUENBJTIwMjAxMCgx
'' SIG '' KS5jcmwwbAYIKwYBBQUHAQEEYDBeMFwGCCsGAQUFBzAC
'' SIG '' hlBodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3Bz
'' SIG '' L2NlcnRzL01pY3Jvc29mdCUyMFRpbWUtU3RhbXAlMjBQ
'' SIG '' Q0ElMjAyMDEwKDEpLmNydDAMBgNVHRMBAf8EAjAAMBYG
'' SIG '' A1UdJQEB/wQMMAoGCCsGAQUFBwMIMA4GA1UdDwEB/wQE
'' SIG '' AwIHgDANBgkqhkiG9w0BAQsFAAOCAgEAsJNz1tAsozmq
'' SIG '' lwjDrrE3Xu3qdgsD/8VdSd6PSgIiknavGtlEeUQh2IZy
'' SIG '' bHnpsHjFB9pDXn6ZwIdgZ/B9qKQ87QyZI/DmEXfykMrB
'' SIG '' NdjcGmNyjsAFvEYPDnV7+X1GSLDloKa5AkDNFaBR3V2B
'' SIG '' MZCTdxMwW1AlMN8m+IABTyuek/unD6SPDCSyQkFxzTIL
'' SIG '' YtkGYV/SpH0QH3xWDBXKbGyPqM4guQa65N9+tXCRR4YB
'' SIG '' CUdCeNp6mUxkoFKQxh0mQERqjXAFeYfjkAy3hdqd1Ecf
'' SIG '' z+jHFINZydoDD2AbA/m8HfQdHP1yGfTLd7o5RCz6ZIo4
'' SIG '' wnUmcYc7tjN0mVia+e7mPhQvi7KbyDh9TqaH2p4dyRg6
'' SIG '' LDXABLvclDFirBATJ4A+lVkEkGGel/RfNMwqHmcE6tIv
'' SIG '' QLo52M88eVtnxIGXo0buitRggEps7TZWCZQAo6mn1kaH
'' SIG '' 06pCYVfydr/e1967g736bjrkKFLVQMF6w7BtjTgbr1bK
'' SIG '' OSnVueIQUrM/+PjkQeKi56uPxjbWo1B6KykShxjoBaPA
'' SIG '' ymlxvlDQDcIRjcR2yC0mufT8RMTIAowUT9/NvMhirKrk
'' SIG '' hM8yzVp8+Wn/WZnh+PNPX8CLbSONSZLomPV+oZjJi2L/
'' SIG '' DmN+L7zivs8sZEvvQVC1QD+oLfsmh2gZa5Z/BouP3Qa9
'' SIG '' sukq6/+eoNAwggdxMIIFWaADAgECAhMzAAAAFcXna54C
'' SIG '' m0mZAAAAAAAVMA0GCSqGSIb3DQEBCwUAMIGIMQswCQYD
'' SIG '' VQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4G
'' SIG '' A1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0
'' SIG '' IENvcnBvcmF0aW9uMTIwMAYDVQQDEylNaWNyb3NvZnQg
'' SIG '' Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgMjAxMDAe
'' SIG '' Fw0yMTA5MzAxODIyMjVaFw0zMDA5MzAxODMyMjVaMHwx
'' SIG '' CzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9u
'' SIG '' MRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy
'' SIG '' b3NvZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jv
'' SIG '' c29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwMIICIjANBgkq
'' SIG '' hkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA5OGmTOe0ciEL
'' SIG '' eaLL1yR5vQ7VgtP97pwHB9KpbE51yMo1V/YBf2xK4OK9
'' SIG '' uT4XYDP/XE/HZveVU3Fa4n5KWv64NmeFRiMMtY0Tz3cy
'' SIG '' wBAY6GB9alKDRLemjkZrBxTzxXb1hlDcwUTIcVxRMTeg
'' SIG '' Cjhuje3XD9gmU3w5YQJ6xKr9cmmvHaus9ja+NSZk2pg7
'' SIG '' uhp7M62AW36MEBydUv626GIl3GoPz130/o5Tz9bshVZN
'' SIG '' 7928jaTjkY+yOSxRnOlwaQ3KNi1wjjHINSi947SHJMPg
'' SIG '' yY9+tVSP3PoFVZhtaDuaRr3tpK56KTesy+uDRedGbsoy
'' SIG '' 1cCGMFxPLOJiss254o2I5JasAUq7vnGpF1tnYN74kpEe
'' SIG '' HT39IM9zfUGaRnXNxF803RKJ1v2lIH1+/NmeRd+2ci/b
'' SIG '' fV+AutuqfjbsNkz2K26oElHovwUDo9Fzpk03dJQcNIIP
'' SIG '' 8BDyt0cY7afomXw/TNuvXsLz1dhzPUNOwTM5TI4CvEJo
'' SIG '' LhDqhFFG4tG9ahhaYQFzymeiXtcodgLiMxhy16cg8ML6
'' SIG '' EgrXY28MyTZki1ugpoMhXV8wdJGUlNi5UPkLiWHzNgY1
'' SIG '' GIRH29wb0f2y1BzFa/ZcUlFdEtsluq9QBXpsxREdcu+N
'' SIG '' +VLEhReTwDwV2xo3xwgVGD94q0W29R6HXtqPnhZyacau
'' SIG '' e7e3PmriLq0CAwEAAaOCAd0wggHZMBIGCSsGAQQBgjcV
'' SIG '' AQQFAgMBAAEwIwYJKwYBBAGCNxUCBBYEFCqnUv5kxJq+
'' SIG '' gpE8RjUpzxD/LwTuMB0GA1UdDgQWBBSfpxVdAF5iXYP0
'' SIG '' 5dJlpxtTNRnpcjBcBgNVHSAEVTBTMFEGDCsGAQQBgjdM
'' SIG '' g30BATBBMD8GCCsGAQUFBwIBFjNodHRwOi8vd3d3Lm1p
'' SIG '' Y3Jvc29mdC5jb20vcGtpb3BzL0RvY3MvUmVwb3NpdG9y
'' SIG '' eS5odG0wEwYDVR0lBAwwCgYIKwYBBQUHAwgwGQYJKwYB
'' SIG '' BAGCNxQCBAweCgBTAHUAYgBDAEEwCwYDVR0PBAQDAgGG
'' SIG '' MA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAU1fZW
'' SIG '' y4/oolxiaNE9lJBb186aGMQwVgYDVR0fBE8wTTBLoEmg
'' SIG '' R4ZFaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraS9j
'' SIG '' cmwvcHJvZHVjdHMvTWljUm9vQ2VyQXV0XzIwMTAtMDYt
'' SIG '' MjMuY3JsMFoGCCsGAQUFBwEBBE4wTDBKBggrBgEFBQcw
'' SIG '' AoY+aHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraS9j
'' SIG '' ZXJ0cy9NaWNSb29DZXJBdXRfMjAxMC0wNi0yMy5jcnQw
'' SIG '' DQYJKoZIhvcNAQELBQADggIBAJ1VffwqreEsH2cBMSRb
'' SIG '' 4Z5yS/ypb+pcFLY+TkdkeLEGk5c9MTO1OdfCcTY/2mRs
'' SIG '' fNB1OW27DzHkwo/7bNGhlBgi7ulmZzpTTd2YurYeeNg2
'' SIG '' LpypglYAA7AFvonoaeC6Ce5732pvvinLbtg/SHUB2Rje
'' SIG '' bYIM9W0jVOR4U3UkV7ndn/OOPcbzaN9l9qRWqveVtihV
'' SIG '' J9AkvUCgvxm2EhIRXT0n4ECWOKz3+SmJw7wXsFSFQrP8
'' SIG '' DJ6LGYnn8AtqgcKBGUIZUnWKNsIdw2FzLixre24/LAl4
'' SIG '' FOmRsqlb30mjdAy87JGA0j3mSj5mO0+7hvoyGtmW9I/2
'' SIG '' kQH2zsZ0/fZMcm8Qq3UwxTSwethQ/gpY3UA8x1RtnWN0
'' SIG '' SCyxTkctwRQEcb9k+SS+c23Kjgm9swFXSVRk2XPXfx5b
'' SIG '' RAGOWhmRaw2fpCjcZxkoJLo4S5pu+yFUa2pFEUep8beu
'' SIG '' yOiJXk+d0tBMdrVXVAmxaQFEfnyhYWxz/gq77EFmPWn9
'' SIG '' y8FBSX5+k77L+DvktxW/tM4+pTFRhLy/AsGConsXHRWJ
'' SIG '' jXD+57XQKBqJC4822rpM+Zv/Cuk0+CQ1ZyvgDbjmjJnW
'' SIG '' 4SLq8CdCPSWU5nR0W2rRnj7tfqAxM328y+l7vzhwRNGQ
'' SIG '' 8cirOoo6CGJ/2XBjU02N7oJtpQUQwXEGahC0HVUzWLOh
'' SIG '' cGbyoYIDUDCCAjgCAQEwgfmhgdGkgc4wgcsxCzAJBgNV
'' SIG '' BAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYD
'' SIG '' VQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQg
'' SIG '' Q29ycG9yYXRpb24xJTAjBgNVBAsTHE1pY3Jvc29mdCBB
'' SIG '' bWVyaWNhIE9wZXJhdGlvbnMxJzAlBgNVBAsTHm5TaGll
'' SIG '' bGQgVFNTIEVTTjozNzAzLTA1RTAtRDk0NzElMCMGA1UE
'' SIG '' AxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAgU2VydmljZaIj
'' SIG '' CgEBMAcGBSsOAwIaAxUA0QDFSZQOmyqvd1Z7t1JCYJuR
'' SIG '' 5WGggYMwgYCkfjB8MQswCQYDVQQGEwJVUzETMBEGA1UE
'' SIG '' CBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEe
'' SIG '' MBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSYw
'' SIG '' JAYDVQQDEx1NaWNyb3NvZnQgVGltZS1TdGFtcCBQQ0Eg
'' SIG '' MjAxMDANBgkqhkiG9w0BAQsFAAIFAOt73DkwIhgPMjAy
'' SIG '' NTAzMTIxMDExMDVaGA8yMDI1MDMxMzEwMTEwNVowdzA9
'' SIG '' BgorBgEEAYRZCgQBMS8wLTAKAgUA63vcOQIBADAKAgEA
'' SIG '' AgIIxgIB/zAHAgEAAgITuzAKAgUA630tuQIBADA2Bgor
'' SIG '' BgEEAYRZCgQCMSgwJjAMBgorBgEEAYRZCgMCoAowCAIB
'' SIG '' AAIDB6EgoQowCAIBAAIDAYagMA0GCSqGSIb3DQEBCwUA
'' SIG '' A4IBAQCNBQsobUa8Cl8arT096LfzJApDD5H8Qh8Kt3YL
'' SIG '' Ax2Lg2T7D88pHcpkFbc1XedP0QJ2CkK8qkYFJM08Y6Sy
'' SIG '' +KWsykmndMK5nUaeBFcbJkNlAyAL5cAMBkPNienH6ItJ
'' SIG '' jZHWIj7PEwuyTSIcnUJFGllrAat6gBl9OiOp4E6rfMcc
'' SIG '' YuKfwpI9v3C1G8yzgMPDAW8clIbRIFVkrSPknmTilWvE
'' SIG '' /JiSEzBdnqfEuU2nafeS67oEVUBBPK4bFivjowLCtBD3
'' SIG '' as7ypI/PvTvsP4x71xQcxVUj7bjLSe7Sq8TQWPgkewid
'' SIG '' zBRC4zJBUlmFJNE9vJdvOHSVEvgrH7nLoCSsmnzyMYIE
'' SIG '' DTCCBAkCAQEwgZMwfDELMAkGA1UEBhMCVVMxEzARBgNV
'' SIG '' BAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQx
'' SIG '' HjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEm
'' SIG '' MCQGA1UEAxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENB
'' SIG '' IDIwMTACEzMAAAIKR7IU2e6ysw8AAQAAAgowDQYJYIZI
'' SIG '' AWUDBAIBBQCgggFKMBoGCSqGSIb3DQEJAzENBgsqhkiG
'' SIG '' 9w0BCRABBDAvBgkqhkiG9w0BCQQxIgQglBsSxCPO51HZ
'' SIG '' i258id/9xhqS0mdpnGiiwlqoPOKY8ccwgfoGCyqGSIb3
'' SIG '' DQEJEAIvMYHqMIHnMIHkMIG9BCBNmsv8tHqSv192dNyk
'' SIG '' 3JaKhPLvSF0bXTuzHsdIcPfkmjCBmDCBgKR+MHwxCzAJ
'' SIG '' BgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAw
'' SIG '' DgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3Nv
'' SIG '' ZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29m
'' SIG '' dCBUaW1lLVN0YW1wIFBDQSAyMDEwAhMzAAACCkeyFNnu
'' SIG '' srMPAAEAAAIKMCIEIB87ODtvK799eRSg52k5uhTEfmYV
'' SIG '' RHOC8U8JKSZ20KTUMA0GCSqGSIb3DQEBCwUABIICAGsk
'' SIG '' 5tMClve4UR/LcdXF/T42DCupTGNgxyEeV3o2UZhNM1bh
'' SIG '' bmZgBvYMztC8HJUkleKNdEPUqTFexxj3eCY/H3lDsjeY
'' SIG '' GuUNyTEcUBASn5SbE0xeWnpBxJgoq+v0SAqyEy6GxAzz
'' SIG '' +VsF2p/TDc9wQ4IcEVha8FBvaR5uiLsequ0oS/E90whC
'' SIG '' 30z92qGj71Y1Mw/VxL3b2fEXmpVbrVUhswR/kfO84Ass
'' SIG '' YVldgvTboPZt57FrzIgTAtrxrADMuT50ZRSheWcMfKdj
'' SIG '' +Z5xhOksEiB0zRLw3aCrdroiWuWSw/izFl3EomSf7Rop
'' SIG '' +uJnFQqThwmSnSSzRcAJGs8L/ylZztfcVHK3kzUGAASe
'' SIG '' zd+5hEHkOFmMSMLW2i9o1uvzpUOLgGRXBySz7HLD38ik
'' SIG '' SgHAGSMbwEAXmsMfeAeo/3zWIXE8XEVOMDGvMGzuvDpz
'' SIG '' 9lY15uvrrRdmx6ZCuqjB/5M8sSMgB1a4c9oPW3PS/DAs
'' SIG '' T0k9CniqRbhxJwY8AmjrQj+plD47e9FL0fMz+OLaOOqP
'' SIG '' KsLytpHnYQx1xBpreC9Bo74IlCJc53E+9ZYFvek3B1ZM
'' SIG '' 9zUkpiFnYuuUzH7H0Yg1JegdegifYAxURzN038qK3Uel
'' SIG '' biwlC8pi3UQEgqD4j9pY8/JzPOx5LGRlNGkXrYF+9++o
'' SIG '' 2g4AgwvsbZjt+f7v6Hos
'' SIG '' End signature block
