File: C:/Program Files/Docker/Docker/frontend/resources/regedit/vbs/regUtil.vbs
' TODO: consider incorporating a json writer of some sort instead of adhoc solution like the following
' e.g: http://demon.tw/my-work/vbs-json.html
const HKEY_CLASSES_ROOT = &H80000000
const HKEY_CURRENT_USER = &H80000001
const HKEY_LOCAL_MACHINE = &H80000002
const HKEY_USERS = &H80000003
const HKEY_CURRENT_CONFIG = &H80000005
Sub LoadRegistryImplementationByOSArchitecture()
If IsNull(OSArchitecture) Then
WriteLineErr "missing OSArchitecture global. did not call util.DetermineOSArchitecture? or Forgot to load util.vbs?"
WScript.Quit 25125
End If
If OSArchitecture = "A" Then
Include "ArchitectureAgnosticRegistry.vbs"
Else
Include "ArchitectureSpecificRegistry.vbs"
End If
End Sub
Function PutValue(constHive, strSubKey, strValueName, strValue, strType)
Select Case UCase(strType)
Case "REG_SZ"
PutValue = SetStringValue(constHive, strSubKey, strValueName, strValue)
Case "REG_EXPAND_SZ"
PutValue = SetExpandedStringValue(constHive, strSubKey, strValueName, strValue)
Case "REG_BINARY"
PutValue = SetBinaryValue(constHive, strSubKey, strValueName, ToBinaryValue(strValue))
Case "REG_NONE"
PutValue = SetBinaryValue(constHive, strSubKey, strValueName, ToBinaryValue(strValue))
' TODO: need to check that indeed int is the right type here
Case "REG_DWORD"
PutValue = SetDWORDValue(constHive, strSubKey, strValueName, CDbl(strValue))
Case "REG_MULTI_SZ"
PutValue = SetMultiStringValue(constHive, strSubKey, strValueName, Split(strValue, ","))
Case "REG_QWORD"
PutValue = SetQWORDValue(constHive, strSubKey, strValueName, strValue)
Case "REG_DEFAULT"
PutValue = SetStringValue(constHive, strSubKey, "", strValue)
Case Else
PutValue = SetStringValue(constHive, strSubKey, strValueName, strValue)
End Select
End Function
' render the child of a sub path strSubKey in hive constHive
' as json.
Sub ListChildrenAsJson(constHive, strSubKey)
' start outputting json to stdout
Write "{"
Dim e1: e1 = EnumKey (constHive, strSubKey, arrKeyNames)
If e1 <> 0 Then
Write """exists"": false,"
Dim arrValueNames: arrValueNames = null
Else
Write """exists"": true,"
Dim e2: e2 = EnumValues (constHive, strSubKey, arrValueNames, arrValueTypes)
If e2 <> 0 Then
WScript.Quit e2
End If
End If
Write """keys"": ["
If Not IsNull(arrKeyNames) Then
For x = 0 To UBound(arrKeyNames)
If (x > 0) Then
Write ","
End If
Write """" & JsonSafe(arrKeyNames(x)) & """"
Next
End If
Write "],"
' TODO: some duplicity of code between the two paths of this condition, this needs to be address at some point
Write """values"":{"
If Not IsNull(arrValueNames) Then
For y = 0 To UBound(arrValueNames)
If y > 0 Then
Write ","
End If
strValueName = arrValueNames(y)
intValueType = arrValueTypes(y)
' assign the value to varValue
GetValueByType constHive, strSubKey, strValueName, intValueType, varValue
WriteValue strValueName, intValueType, varValue
Next
Else
' fix for keys with only default values in them
' see http://stackoverflow.com/questions/8840343/how-to-read-the-default-value-from-registry-in-vbscript
GetStringValue constHive, strSubKey, "", strDefaultValue
If IsNull(strDefaultValue) = false and strDefaultValue <> "" Then
' write the default value with REG_SZ
WriteValue "", 1, strDefaultValue
End If
End If
Write "}}"
End Sub
Sub WriteValue (strValueName, intValueType, varValue)
Write """"
Write JsonSafe(strValueName)
Write """:{"
Write """type"": """
Write RenderType(intValueType)
Write ""","
Write """value"":"
Write RenderValueByType(intValueType, varValue)
Write "}"
End Sub
' give a raw HKLM\something\somewhere
' output the hive constant and the subkey, in this case:
' HKEY_LOCAL_MACHINE will be assigned to outConstHive
' and something\somewhere will be assigned to outStrSubKey
Sub ParseHiveAndSubKey(strRawKey, outConstHive, outStrSubKey)
' split into two parts to deduce the hive and the sub key
arrSplitted = Split(strRawKey, "\", 2, 1)
If UBound(arrSplitted) > 0 Then
strHive = arrSplitted(0)
outStrSubKey = arrSplitted(1)
Else
strHive = strRawKey
outStrSubKey = ""
End If
outConstHive = StringToHiveConst(UCase(strHive))
End Sub
Function ArrayRemoveAt(arr, pos)
Dim i
If IsArray(arr) Then
If pos >= 0 And pos <= UBound(arr) Then
For i = pos To UBound(arr) - 1
arr(i) = arr(i + 1)
Next
ReDim Preserve arr(UBound(arr) - 1)
End If
End If
End Function
Sub ParseHiveAndSubKeyAndValue(strRawKey, outConstHive, outStrSubKey, outStrValue)
' split into two parts to deduce the hive and the sub key
arrSplitted = Split(strRawKey, "\", -1, 1)
If UBound(arrSplitted) > 0 Then
strHive = arrSplitted(0)
outStrValue = arrSplitted(UBound(arrSplitted))
test = ArrayRemoveAt(arrSplitted, UBound(arrSplitted))
test = ArrayRemoveAt(arrSplitted, 0)
outStrSubKey = Join(arrSplitted, "\")
Else
strHive = strRawKey
outStrSubKey = ""
End If
outConstHive = StringToHiveConst(UCase(strHive))
End Sub
Function StringToHiveConst(strHive)
Select Case strHive
Case "HKCR"
StringToHiveConst = HKEY_CLASSES_ROOT
Case "HKCU"
StringToHiveConst = HKEY_CURRENT_USER
Case "HKLM"
StringToHiveConst = HKEY_LOCAL_MACHINE
Case "HKU"
StringToHiveConst = HKEY_USERS
Case "HKCC"
StringToHiveConst = HKEY_CURRENT_CONFIG
Case Else
StringToHiveConst = Null
End Select
End Function
' TODO: this entire "by type" should be transformed into OOP style
' where each type will have a class with render(), getValue() etc...
' convert a value type number into a string label
Function RenderType(intType)
RenderType = "REG_UNKNOWN"
Select Case intType
Case 0
RenderType = "REG_NONE"
Case 1
RenderType = "REG_SZ"
Case 2
RenderType = "REG_EXPAND_SZ"
Case 3
RenderType = "REG_BINARY"
Case 4
RenderType = "REG_DWORD"
Case 7
RenderType = "REG_MULTI_SZ"
Case 11
RenderType = "REG_QWORD"
Case Else
' TODO: should report / throw an error here
WriteErr("invalid Registry Value Type " & intType)
End Select
End Function
' render by value type:
' string will return as a string with double quotes, e.g "value"
' multi string values which return as an array ot strings "["1", "2"]" (double quotes included ofc)
' numeric values like DWORD and QWORD just return as the number e.g. 1
' byte arrays such as reg_binary return as an array of ints, e.g [1,2,3]
Function RenderValueByType(intType, varValue)
Select Case intType
' REG_NONE
Case 0
RenderValueByType = "0"
' REG_SZ
Case 1
RenderValueByType = """" & JsonSafe(varValue) & """"
' REG_EXPAND_SZ
Case 2
RenderValueByType = """" & JsonSafe(varValue) & """"
' REG_BINARY
Case 3
RenderValueByType = RenderByteArray(varValue)
' REG_DWORD
Case 4
RenderValueByType= varValue
' REG_MULYI_SZ'
Case 7
RenderValueByType = RenderStringArray(varValue)
' REG_QWORD
Case 11
RenderValueByType = varValue
Case Else
' TODO: should report / throw an error here
WriteErr("invalid Registry Value Type " & intType)
End Select
End Function
' get the value of a registry based on its value type and assign it to out parameter outVarValue
Sub GetValueByType(constHive, strKey, strValueName, intType, outVarValue)
Select Case intType
' REG_NONE
Case 0
GetStringValue constHive, strKey, strValueName, "0"
Exit Sub
' REG_SZ
Case 1
GetStringValue constHive, strKey, strValueName, outVarValue
Exit Sub
' REG_EXPAND_SZ
Case 2
GetExpandedStringValue constHive, strKey, strValueName, outVarValue
Exit Sub
' REG_BINARY
Case 3
GetBinaryValue constHive, strKey, strValueName, outVarValue
Exit Sub
' REG_DWORD
Case 4
GetDWORDValue constHive, strKey, strValueName, outVarValue
' #21 - VBS does not support UInt32. This is the workaround
If outVarValue < 0 Then outVarValue = 4294967296 + outVarValue
Exit Sub
' REG_MULYI_SZ'
Case 7
GetMultiStringValue constHive, strKey, strValueName, outVarValue
Exit Sub
' REG_QWORD
Case 11
GetQWORDValue constHive, strKey, strValueName, outVarValue
Exit Sub
Case Else
' TODO: should report / throw an error here
WriteErr("invalid Registry Value Type " & intType)
End Select
End Sub
' render a byte array as a json array of numbers
Function RenderByteArray(arr)
RenderByteArray = "[]"
If Not IsNull(arr) Then
RenderByteArray = "[" & Join(arr, ",") & "]"
End If
End Function
' render a string array as json string array
Function RenderStringArray(arr)
Result = "["
If Not IsNull(arr) Then
For t = 0 To UBound(arr)
If (t > 0) Then
Result = Result & ","
End If
Result = Result & """" & JsonSafe(arr(t)) & """"
Next
End If
Result = Result & "]"
RenderStringArray = Result
End Function
Function ToBinaryValue(strValue)
arrValue = Split(strValue, ",")
If IsNull(arrValue) Then
ToBinaryValue = Array()
Exit Function
End If
For i = 0 To UBound(arrValue)
arrValue(i) = CInt(arrValue(i))
Next
ToBinaryValue = arrValue
End Function
'' SIG '' Begin signature block
'' SIG '' MIIpuQYJKoZIhvcNAQcCoIIpqjCCKaYCAQExDzANBglg
'' SIG '' hkgBZQMEAgEFADB3BgorBgEEAYI3AgEEoGkwZzAyBgor
'' SIG '' BgEEAYI3AgEeMCQCAQEEEE7wKRaZJ7VNj+Ws4Q8X66sC
'' SIG '' AQACAQACAQACAQACAQAwMTANBglghkgBZQMEAgEFAAQg
'' SIG '' yptZy53TFVceCQfVt+0zut1ObY8B4HCkalMEz3a4VqGg
'' SIG '' gg5xMIIGsDCCBJigAwIBAgIQCK1AsmDSnEyfXs2pvZOu
'' SIG '' 2TANBgkqhkiG9w0BAQwFADBiMQswCQYDVQQGEwJVUzEV
'' SIG '' MBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
'' SIG '' d3cuZGlnaWNlcnQuY29tMSEwHwYDVQQDExhEaWdpQ2Vy
'' SIG '' dCBUcnVzdGVkIFJvb3QgRzQwHhcNMjEwNDI5MDAwMDAw
'' SIG '' WhcNMzYwNDI4MjM1OTU5WjBpMQswCQYDVQQGEwJVUzEX
'' SIG '' MBUGA1UEChMORGlnaUNlcnQsIEluYy4xQTA/BgNVBAMT
'' SIG '' OERpZ2lDZXJ0IFRydXN0ZWQgRzQgQ29kZSBTaWduaW5n
'' SIG '' IFJTQTQwOTYgU0hBMzg0IDIwMjEgQ0ExMIICIjANBgkq
'' SIG '' hkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA1bQvQtAorXi3
'' SIG '' XdU5WRuxiEL1M4zrPYGXcMW7xIUmMJ+kjmjYXPXrNCQH
'' SIG '' 4UtP03hD9BfXHtr50tVnGlJPDqFX/IiZwZHMgQM+TXAk
'' SIG '' ZLON4gh9NH1MgFcSa0OamfLFOx/y78tHWhOmTLMBICXz
'' SIG '' ENOLsvsI8IrgnQnAZaf6mIBJNYc9URnokCF4RS6hnyzh
'' SIG '' GMIazMXuk0lwQjKP+8bqHPNlaJGiTUyCEUhSaN4QvRRX
'' SIG '' XegYE2XFf7JPhSxIpFaENdb5LpyqABXRN/4aBpTCfMjq
'' SIG '' GzLmysL0p6MDDnSlrzm2q2AS4+jWufcx4dyt5Big2MEj
'' SIG '' R0ezoQ9uo6ttmAaDG7dqZy3SvUQakhCBj7A7CdfHmzJa
'' SIG '' wv9qYFSLScGT7eG0XOBv6yb5jNWy+TgQ5urOkfW+0/tv
'' SIG '' k2E0XLyTRSiDNipmKF+wc86LJiUGsoPUXPYVGUztYuBe
'' SIG '' M/Lo6OwKp7ADK5GyNnm+960IHnWmZcy740hQ83eRGv7b
'' SIG '' UKJGyGFYmPV8AhY8gyitOYbs1LcNU9D4R+Z1MI3sMJN2
'' SIG '' FKZbS110YU0/EpF23r9Yy3IQKUHw1cVtJnZoEUETWJrc
'' SIG '' JisB9IlNWdt4z4FKPkBHX8mBUHOFECMhWWCKZFTBzCEa
'' SIG '' 6DgZfGYczXg4RTCZT/9jT0y7qg0IU0F8WD1Hs/q27Iwy
'' SIG '' CQLMbDwMVhECAwEAAaOCAVkwggFVMBIGA1UdEwEB/wQI
'' SIG '' MAYBAf8CAQAwHQYDVR0OBBYEFGg34Ou2O/hfEYb7/mF7
'' SIG '' CIhl9E5CMB8GA1UdIwQYMBaAFOzX44LScV1kTN8uZz/n
'' SIG '' upiuHA9PMA4GA1UdDwEB/wQEAwIBhjATBgNVHSUEDDAK
'' SIG '' BggrBgEFBQcDAzB3BggrBgEFBQcBAQRrMGkwJAYIKwYB
'' SIG '' BQUHMAGGGGh0dHA6Ly9vY3NwLmRpZ2ljZXJ0LmNvbTBB
'' SIG '' BggrBgEFBQcwAoY1aHR0cDovL2NhY2VydHMuZGlnaWNl
'' SIG '' cnQuY29tL0RpZ2lDZXJ0VHJ1c3RlZFJvb3RHNC5jcnQw
'' SIG '' QwYDVR0fBDwwOjA4oDagNIYyaHR0cDovL2NybDMuZGln
'' SIG '' aWNlcnQuY29tL0RpZ2lDZXJ0VHJ1c3RlZFJvb3RHNC5j
'' SIG '' cmwwHAYDVR0gBBUwEzAHBgVngQwBAzAIBgZngQwBBAEw
'' SIG '' DQYJKoZIhvcNAQEMBQADggIBADojRD2NCHbuj7w6mdNW
'' SIG '' 4AIapfhINPMstuZ0ZveUcrEAyq9sMCcTEp6QRJ9L/Z6j
'' SIG '' fCbVN7w6XUhtldU/SfQnuxaBRVD9nL22heB2fjdxyyL3
'' SIG '' WqqQz/WTauPrINHVUHmImoqKwba9oUgYftzYgBoRGRjN
'' SIG '' YZmBVvbJ43bnxOQbX0P4PpT/djk9ntSZz0rdKOtfJqGV
'' SIG '' WEjVGv7XJz/9kNF2ht0csGBc8w2o7uCJob054ThO2m67
'' SIG '' Np375SFTWsPK6Wrxoj7bQ7gzyE84FJKZ9d3OVG3ZXQIU
'' SIG '' H0AzfAPilbLCIXVzUstG2MQ0HKKlS43Nb3Y3LIU/Gs4m
'' SIG '' 6Ri+kAewQ3+ViCCCcPDMyu/9KTVcH4k4Vfc3iosJocsL
'' SIG '' 6TEa/y4ZXDlx4b6cpwoG1iZnt5LmTl/eeqxJzy6kdJKt
'' SIG '' 2zyknIYf48FWGysj/4+16oh7cGvmoLr9Oj9FpsToFpFS
'' SIG '' i0HASIRLlk2rREDjjfAVKM7t8RhWByovEMQMCGQ8M4+u
'' SIG '' KIw8y4+ICw2/O/TOHnuO77Xry7fwdxPm5yg/rBKupS8i
'' SIG '' bEH5glwVZsxsDsrFhsP2JjMMB0ug0wcCampAMEhLNKhR
'' SIG '' ILutG4UI4lkNbcoFUCvqShyepf2gpx8GdOfy1lKQ/a+F
'' SIG '' SCH5Vzu0nAPthkX0tGFuv2jiJmCG6sivqf6UHedjGzqG
'' SIG '' VnhOMIIHuTCCBaGgAwIBAgIQCnsc1K1pEsyUUas2dqg1
'' SIG '' ZzANBgkqhkiG9w0BAQsFADBpMQswCQYDVQQGEwJVUzEX
'' SIG '' MBUGA1UEChMORGlnaUNlcnQsIEluYy4xQTA/BgNVBAMT
'' SIG '' OERpZ2lDZXJ0IFRydXN0ZWQgRzQgQ29kZSBTaWduaW5n
'' SIG '' IFJTQTQwOTYgU0hBMzg0IDIwMjEgQ0ExMB4XDTI0MTEw
'' SIG '' ODAwMDAwMFoXDTI1MTEwNzIzNTk1OVowgcExEzARBgsr
'' SIG '' BgEEAYI3PAIBAxMCVVMxGTAXBgsrBgEEAYI3PAIBAhMI
'' SIG '' RGVsYXdhcmUxHTAbBgNVBA8MFFByaXZhdGUgT3JnYW5p
'' SIG '' emF0aW9uMRAwDgYDVQQFEwc0ODE3NDY0MQswCQYDVQQG
'' SIG '' EwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTESMBAGA1UE
'' SIG '' BxMJUGFsbyBBbHRvMRMwEQYDVQQKEwpEb2NrZXIgSW5j
'' SIG '' MRMwEQYDVQQDEwpEb2NrZXIgSW5jMIICIjANBgkqhkiG
'' SIG '' 9w0BAQEFAAOCAg8AMIICCgKCAgEA2bkcKnV+V48j+M8N
'' SIG '' qipIuAgFwMYVv9kAwVNy25KuSJ1WfgO0jGGVFgYtzpMf
'' SIG '' YG0Y8G6DaO7lSuIju73e3ylt0fqXW12Wszl+BvAjIGou
'' SIG '' 1qwPJMuyrr5Ne8uT7fd1xNbtbZrsm1MW6nNNHvQBapB8
'' SIG '' p6ggGILkpxfdt7O4f+7t0sQpBuHrr9ZG9HATm+VM4hbw
'' SIG '' +tONQf7uBNvogqWYy0g5X99c0XAUcYwn1lpaLr4aUuiv
'' SIG '' xHerVYEayZRY6Hev4NkrJMJaGarqmxX3tl1ZyH3SQn5t
'' SIG '' qx5HNDHaebh593K7dam7piNZ9gmDOF0bkKA9anuaG8JH
'' SIG '' leW19sXjtvzP7LOgH8g510jaQkOC0GuSzli7UZh74k6R
'' SIG '' kuZoWgCWIc8hQmDfM1AXD/Sn8mRsmsuqNdr8+bX1b+Jb
'' SIG '' ojrnFZSUNehUl/+HNABduQNJhl74JBZsZr0gJg+bclVU
'' SIG '' 13S4pnDQy4PPXD2mKy//KhrpimVgtzbuOCHNMO7f3AY1
'' SIG '' K+QA1rekaBz7XBBtLA9pPIw7pCaZMdZemOkiLImIGWqd
'' SIG '' QuCB4sfmcHdpQMi/FAq9ev/sPdDZD3ig4dlQ1e9t/Buc
'' SIG '' gaEsO69rLbclF9jHb/gL75UECtzjsAUAk1JXE52nkMey
'' SIG '' f9Ryusm55fUIQAXozay1BwPK3HcuNc7X4aZrYA0EZNFj
'' SIG '' 9pkRdJsCAwEAAaOCAgIwggH+MB8GA1UdIwQYMBaAFGg3
'' SIG '' 4Ou2O/hfEYb7/mF7CIhl9E5CMB0GA1UdDgQWBBTsCjbX
'' SIG '' 88tCqZ6UaqBFia6/kIqURDA9BgNVHSAENjA0MDIGBWeB
'' SIG '' DAEDMCkwJwYIKwYBBQUHAgEWG2h0dHA6Ly93d3cuZGln
'' SIG '' aWNlcnQuY29tL0NQUzAOBgNVHQ8BAf8EBAMCB4AwEwYD
'' SIG '' VR0lBAwwCgYIKwYBBQUHAwMwgbUGA1UdHwSBrTCBqjBT
'' SIG '' oFGgT4ZNaHR0cDovL2NybDMuZGlnaWNlcnQuY29tL0Rp
'' SIG '' Z2lDZXJ0VHJ1c3RlZEc0Q29kZVNpZ25pbmdSU0E0MDk2
'' SIG '' U0hBMzg0MjAyMUNBMS5jcmwwU6BRoE+GTWh0dHA6Ly9j
'' SIG '' cmw0LmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRH
'' SIG '' NENvZGVTaWduaW5nUlNBNDA5NlNIQTM4NDIwMjFDQTEu
'' SIG '' Y3JsMIGUBggrBgEFBQcBAQSBhzCBhDAkBggrBgEFBQcw
'' SIG '' AYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMFwGCCsG
'' SIG '' AQUFBzAChlBodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5j
'' SIG '' b20vRGlnaUNlcnRUcnVzdGVkRzRDb2RlU2lnbmluZ1JT
'' SIG '' QTQwOTZTSEEzODQyMDIxQ0ExLmNydDAJBgNVHRMEAjAA
'' SIG '' MA0GCSqGSIb3DQEBCwUAA4ICAQBonrdB+g0ATLlnIJR+
'' SIG '' +kEzYMFsWGlYAUnpIvB7HD6g4qKr4QveLBVgQB3itR99
'' SIG '' /jlTq2nuAD5LijDm5UBNxErcDsMpKy9nYMEqDZumfern
'' SIG '' DUHgifueXOYVOLiD9th957tOu716gZLMTs6IDnvtEaIl
'' SIG '' IFq2EBgJHESQmOPnoyTYzF4JZscUjAcKMMX4QMtx7A28
'' SIG '' 1ATUVA73kIzgs8TQVr9Ci0Ju8BtToSjYT6mDeHx64Zjo
'' SIG '' Y/00J3lEwzaklphadGkLdShP72GyadeMBCewI+zBxzkM
'' SIG '' dv9Eha5hobQd9rH+gGzcx9EGgXJakxL7EiGDDLLl+EMq
'' SIG '' ei/pG5kMbpZbwMjLL9KgD64mdIkGQKylyWnvEHjoB1kR
'' SIG '' YWMY66AX6BRqXzFve1qmlFoKJ6c69uf2zNuOgaQIcDuA
'' SIG '' ddSLzHfdbAS9/2HQX5iPy33VRhzqJaF3fsbh5iUJhH0p
'' SIG '' F7OwC7JhJmGhgYggcC9hPa1Bx5QXLk8eycDmitir0YXh
'' SIG '' RoI2sLsIev/dPq96bi3cuhDPXoN8je2EfvxbumYW03T5
'' SIG '' +ITUj93NNuRIUP/3mt+V6X54E96z1f37nemB3WOtB84c
'' SIG '' RMZcbCWd2cuO9Peiyw5kmudo8/1yAQveWV6Q990mz8BD
'' SIG '' 85AN4gAzEHpiJ3at1PZuUh+gKVgMvuFF0xV6gvdYsnka
'' SIG '' b7Sd5zGCGqAwghqcAgEBMH0waTELMAkGA1UEBhMCVVMx
'' SIG '' FzAVBgNVBAoTDkRpZ2lDZXJ0LCBJbmMuMUEwPwYDVQQD
'' SIG '' EzhEaWdpQ2VydCBUcnVzdGVkIEc0IENvZGUgU2lnbmlu
'' SIG '' ZyBSU0E0MDk2IFNIQTM4NCAyMDIxIENBMQIQCnsc1K1p
'' SIG '' EsyUUas2dqg1ZzANBglghkgBZQMEAgEFAKB8MBAGCisG
'' SIG '' AQQBgjcCAQwxAjAAMBkGCSqGSIb3DQEJAzEMBgorBgEE
'' SIG '' AYI3AgEEMBwGCisGAQQBgjcCAQsxDjAMBgorBgEEAYI3
'' SIG '' AgEVMC8GCSqGSIb3DQEJBDEiBCDvH8oT5Odj/DlVA1Lg
'' SIG '' J8VxUZd1rOqghuIi3mhvu06RvzANBgkqhkiG9w0BAQEF
'' SIG '' AASCAgCrxGIaOFMfZZTtB97okBnrzyF+TeL0Q8/MENJJ
'' SIG '' pJ7nvhrgTGn0x4PQAa8uBgRc8bLfTExNWA+gAXXJ9T9z
'' SIG '' u5oCTBm6cM5GeqjwKO828FJyzEhEHkmwbV1wCWXQoHwU
'' SIG '' BTlr5CbMGK03AtpVjCURP2FrVDdaOEUR35mitrugqNAx
'' SIG '' 8PgP8wzsZUIj+5YP2x/u2NAD3P5ZCS/lbjL9rIYsXlcr
'' SIG '' fcVLt3scE4lUOT/4VymjGipzlmSm4FJLN92kOz71Pgat
'' SIG '' y3Vg11MwPtbLSZibQwOgqlEIOMHX0/V+hd+Gbf/Zo7GM
'' SIG '' ckONz85XiZf+jhVat6numg8Hz+K4jypZB6jbByjfo+8o
'' SIG '' cLTCf3ecgGn/IzNI3wGvJs/87Xr++zlwlCPJsHiaeuNf
'' SIG '' 1v2/FCtzWWdcA4pQ81UcDUb0Fj/KMoaiXy13YFQmiiDt
'' SIG '' C8klOQe+pS43bTIU93ZiqA/jEX21bAwpdsgjKvrX0cd3
'' SIG '' z95pFdOsLg96cUYSMVyO5HR+yR+7O4mQsdNVzx/pxt4M
'' SIG '' gQPBYfOG1wBv8DjKrwUdla00f+hhsx5DABw/x93SR974
'' SIG '' kVpXYVfuZQgYTkkGjigZ3eGCdvmbDayKsj1uKjr4aIvQ
'' SIG '' 9aC4FGVYIdTBtchkSWlTbwctHIWdKlPg6bls/A7gmqLn
'' SIG '' Wf5OJC3/bRPzPQwJd9BKFvCZ6PsA1KGCF3YwghdyBgor
'' SIG '' BgEEAYI3AwMBMYIXYjCCF14GCSqGSIb3DQEHAqCCF08w
'' SIG '' ghdLAgEDMQ8wDQYJYIZIAWUDBAIBBQAwdwYLKoZIhvcN
'' SIG '' AQkQAQSgaARmMGQCAQEGCWCGSAGG/WwHATAxMA0GCWCG
'' SIG '' SAFlAwQCAQUABCAJyWIAZqUCEg9OANf1U0+DbKjGVqJK
'' SIG '' iTz2eg54jp+UBAIQCBsDfMCpdMcp7+Fbsb6wgBgPMjAy
'' SIG '' NTA5MTEwNzIyNTdaoIITOjCCBu0wggTVoAMCAQICEAqA
'' SIG '' 7xhLjfEFgtHEdqeVdGgwDQYJKoZIhvcNAQELBQAwaTEL
'' SIG '' MAkGA1UEBhMCVVMxFzAVBgNVBAoTDkRpZ2lDZXJ0LCBJ
'' SIG '' bmMuMUEwPwYDVQQDEzhEaWdpQ2VydCBUcnVzdGVkIEc0
'' SIG '' IFRpbWVTdGFtcGluZyBSU0E0MDk2IFNIQTI1NiAyMDI1
'' SIG '' IENBMTAeFw0yNTA2MDQwMDAwMDBaFw0zNjA5MDMyMzU5
'' SIG '' NTlaMGMxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdp
'' SIG '' Q2VydCwgSW5jLjE7MDkGA1UEAxMyRGlnaUNlcnQgU0hB
'' SIG '' MjU2IFJTQTQwOTYgVGltZXN0YW1wIFJlc3BvbmRlciAy
'' SIG '' MDI1IDEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK
'' SIG '' AoICAQDQRqwtEsae0OquYFazK1e6b1H/hnAKAd/KN8wZ
'' SIG '' QjBjMqiZ3xTWcfsLwOvRxUwXcGx8AUjni6bz52fGTfr6
'' SIG '' PHRNv6T7zsf1Y/E3IU8kgNkeECqVQ+3bzWYesFtkepEr
'' SIG '' vUSbf+EIYLkrLKd6qJnuzK8Vcn0DvbDMemQFoxQ2Dsw4
'' SIG '' vEjoT1FpS54dNApZfKY61HAldytxNM89PZXUP/5wWWUR
'' SIG '' K+IfxiOg8W9lKMqzdIo7VA1R0V3Zp3DjjANwqAf4lEkT
'' SIG '' lCDQ0/fKJLKLkzGBTpx6EYevvOi7XOc4zyh1uSqgr6Un
'' SIG '' bksIcFJqLbkIXIPbcNmA98Oskkkrvt6lPAw/p4oDSRZr
'' SIG '' eiwB7x9ykrjS6GS3NR39iTTFS+ENTqW8m6THuOmHHjQN
'' SIG '' C3zbJ6nJ6SXiLSvw4Smz8U07hqF+8CTXaETkVWz0dVVZ
'' SIG '' w7knh1WZXOLHgDvundrAtuvz0D3T+dYaNcwafsVCGZKU
'' SIG '' hQPL1naFKBy1p6llN3QgshRta6Eq4B40h5avMcpi54wm
'' SIG '' 0i2ePZD5pPIssoszQyF4//3DoK2O65Uck5Wggn8O2klE
'' SIG '' TsJ7u8xEehGifgJYi+6I03UuT1j7FnrqVrOzaQoVJOee
'' SIG '' StPeldYRNMmSF3voIgMFtNGh86w3ISHNm0IaadCKCkUe
'' SIG '' 2LnwJKa8TIlwCUNVwppwn4D3/Pt5pwIDAQABo4IBlTCC
'' SIG '' AZEwDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQU5Dv88jHt
'' SIG '' /f3X85FxYxlQQ89hjOgwHwYDVR0jBBgwFoAU729TSunk
'' SIG '' Bnx6yuKQVvYv1Ensy04wDgYDVR0PAQH/BAQDAgeAMBYG
'' SIG '' A1UdJQEB/wQMMAoGCCsGAQUFBwMIMIGVBggrBgEFBQcB
'' SIG '' AQSBiDCBhTAkBggrBgEFBQcwAYYYaHR0cDovL29jc3Au
'' SIG '' ZGlnaWNlcnQuY29tMF0GCCsGAQUFBzAChlFodHRwOi8v
'' SIG '' Y2FjZXJ0cy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVz
'' SIG '' dGVkRzRUaW1lU3RhbXBpbmdSU0E0MDk2U0hBMjU2MjAy
'' SIG '' NUNBMS5jcnQwXwYDVR0fBFgwVjBUoFKgUIZOaHR0cDov
'' SIG '' L2NybDMuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0VHJ1c3Rl
'' SIG '' ZEc0VGltZVN0YW1waW5nUlNBNDA5NlNIQTI1NjIwMjVD
'' SIG '' QTEuY3JsMCAGA1UdIAQZMBcwCAYGZ4EMAQQCMAsGCWCG
'' SIG '' SAGG/WwHATANBgkqhkiG9w0BAQsFAAOCAgEAZSqt8Rwn
'' SIG '' BLmuYEHs0QhEnmNAciH45PYiT9s1i6UKtW+FERp8FgXR
'' SIG '' GQ/YAavXzWjZhY+hIfP2JkQ38U+wtJPBVBajYfrbIYG+
'' SIG '' Dui4I4PCvHpQuPqFgqp1PzC/ZRX4pvP/ciZmUnthfAEP
'' SIG '' 1HShTrY+2DE5qjzvZs7JIIgt0GCFD9ktx0LxxtRQ7vll
'' SIG '' KluHWiKk6FxRPyUPxAAYH2Vy1lNM4kzekd8oEARzFAWg
'' SIG '' eW3az2xejEWLNN4eKGxDJ8WDl/FQUSntbjZ80FU3i54t
'' SIG '' px5F/0Kr15zW/mJAxZMVBrTE2oi0fcI8VMbtoRAmaasl
'' SIG '' NXdCG1+lqvP4FbrQ6IwSBXkZagHLhFU9HCrG/syTRLLh
'' SIG '' Aezu/3Lr00GrJzPQFnCEH1Y58678IgmfORBPC1JKkYaE
'' SIG '' t2OdDh4GmO0/5cHelAK2/gTlQJINqDr6JfwyYHXSd+V0
'' SIG '' 8X1JUPvB4ILfJdmL+66Gp3CSBXG6IwXMZUXBhtCyIaeh
'' SIG '' r0XkBoDIGMUG1dUtwq1qmcwbdUfcSYCn+OwncVUXf53V
'' SIG '' JUNOaMWMts0VlRYxe5nK+At+DI96HAlXHAL5SlfYxJ7L
'' SIG '' a54i71McVWRP66bW+yERNpbJCjyCYG2j+bdpxo/1Cy4u
'' SIG '' PcU3AWVPGrbn5PhDBf3Froguzzhk++ami+r3Qrx5bIbY
'' SIG '' 3TVzgiFI7Gq3zWcwgga0MIIEnKADAgECAhANx6xXBf8h
'' SIG '' mS5AQyIMOkmGMA0GCSqGSIb3DQEBCwUAMGIxCzAJBgNV
'' SIG '' BAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAX
'' SIG '' BgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNVBAMT
'' SIG '' GERpZ2lDZXJ0IFRydXN0ZWQgUm9vdCBHNDAeFw0yNTA1
'' SIG '' MDcwMDAwMDBaFw0zODAxMTQyMzU5NTlaMGkxCzAJBgNV
'' SIG '' BAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjFB
'' SIG '' MD8GA1UEAxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBUaW1l
'' SIG '' U3RhbXBpbmcgUlNBNDA5NiBTSEEyNTYgMjAyNSBDQTEw
'' SIG '' ggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC0
'' SIG '' eDHTCphBcr48RsAcrHXbo0ZodLRRF51NrY0NlLWZloMs
'' SIG '' VO1DahGPNRcybEKq+RuwOnPhof6pvF4uGjwjqNjfEvUi
'' SIG '' 6wuim5bap+0lgloM2zX4kftn5B1IpYzTqpyFQ/4Bt0mA
'' SIG '' xAHeHYNnQxqXmRinvuNgxVBdJkf77S2uPoCj7GH8BLux
'' SIG '' BG5AvftBdsOECS1UkxBvMgEdgkFiDNYiOTx4OtiFcMSk
'' SIG '' qTtF2hfQz3zQSku2Ws3IfDReb6e3mmdglTcaarps0wjU
'' SIG '' jsZvkgFkriK9tUKJm/s80FiocSk1VYLZlDwFt+cVFBUR
'' SIG '' Jg6zMUjZa/zbCclF83bRVFLeGkuAhHiGPMvSGmhgaTzV
'' SIG '' yhYn4p0+8y9oHRaQT/aofEnS5xLrfxnGpTXiUOeSLsJy
'' SIG '' goLPp66bkDX1ZlAeSpQl92QOMeRxykvq6gbylsXQskBB
'' SIG '' BnGy3tW/AMOMCZIVNSaz7BX8VtYGqLt9MmeOreGPRdtB
'' SIG '' x3yGOP+rx3rKWDEJlIqLXvJWnY0v5ydPpOjL6s36czwz
'' SIG '' sucuoKs7Yk/ehb//Wx+5kMqIMRvUBDx6z1ev+7psNOdg
'' SIG '' JMoiwOrUG2ZdSoQbU2rMkpLiQ6bGRinZbI4OLu9BMIFm
'' SIG '' 1UUl9VnePs6BaaeEWvjJSjNm2qA+sdFUeEY0qVjPKOWu
'' SIG '' g/G6X5uAiynM7Bu2ayBjUwIDAQABo4IBXTCCAVkwEgYD
'' SIG '' VR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQU729TSunk
'' SIG '' Bnx6yuKQVvYv1Ensy04wHwYDVR0jBBgwFoAU7NfjgtJx
'' SIG '' XWRM3y5nP+e6mK4cD08wDgYDVR0PAQH/BAQDAgGGMBMG
'' SIG '' A1UdJQQMMAoGCCsGAQUFBwMIMHcGCCsGAQUFBwEBBGsw
'' SIG '' aTAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNl
'' SIG '' cnQuY29tMEEGCCsGAQUFBzAChjVodHRwOi8vY2FjZXJ0
'' SIG '' cy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkUm9v
'' SIG '' dEc0LmNydDBDBgNVHR8EPDA6MDigNqA0hjJodHRwOi8v
'' SIG '' Y3JsMy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVk
'' SIG '' Um9vdEc0LmNybDAgBgNVHSAEGTAXMAgGBmeBDAEEAjAL
'' SIG '' BglghkgBhv1sBwEwDQYJKoZIhvcNAQELBQADggIBABfO
'' SIG '' +xaAHP4HPRF2cTC9vgvItTSmf83Qh8WIGjB/T8ObXAZz
'' SIG '' 8OjuhUxjaaFdleMM0lBryPTQM2qEJPe36zwbSI/mS83a
'' SIG '' fsl3YTj+IQhQE7jU/kXjjytJgnn0hvrV6hqWGd3rLAUt
'' SIG '' 6vJy9lMDPjTLxLgXf9r5nWMQwr8Myb9rEVKChHyfpzee
'' SIG '' 5kH0F8HABBgr0UdqirZ7bowe9Vj2AIMD8liyrukZ2iA/
'' SIG '' wdG2th9y1IsA0QF8dTXqvcnTmpfeQh35k5zOCPmSNq1U
'' SIG '' H410ANVko43+Cdmu4y81hjajV/gxdEkMx1NKU4uHQcKf
'' SIG '' ZxAvBAKqMVuqte69M9J6A47OvgRaPs+2ykgcGV00TYr2
'' SIG '' Lr3ty9qIijanrUR3anzEwlvzZiiyfTPjLbnFRsjsYg39
'' SIG '' OlV8cipDoq7+qNNjqFzeGxcytL5TTLL4ZaoBdqbhOhZ3
'' SIG '' ZRDUphPvSRmMThi0vw9vODRzW6AxnJll38F0cuJG7uEB
'' SIG '' YTptMSbhdhGQDpOXgpIUsWTjd6xpR6oaQf/DJbg3s6KC
'' SIG '' LPAlZ66RzIg9sC+NJpud/v4+7RWsWCiKi9EOLLHfMR2Z
'' SIG '' yJ/+xhCx9yHbxtl5TPau1j/1MIDpMPx0LckTetiSuEtQ
'' SIG '' vLsNz3Qbp7wGWqbIiOWCnb5WqxL3/BAPvIXKUjPSxyZs
'' SIG '' q8WhbaM2tszWkPZPubdcMIIFjTCCBHWgAwIBAgIQDpsY
'' SIG '' jvnQLefv21DiCEAYWjANBgkqhkiG9w0BAQwFADBlMQsw
'' SIG '' CQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5j
'' SIG '' MRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQwIgYD
'' SIG '' VQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0Ew
'' SIG '' HhcNMjIwODAxMDAwMDAwWhcNMzExMTA5MjM1OTU5WjBi
'' SIG '' MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQg
'' SIG '' SW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSEw
'' SIG '' HwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQw
'' SIG '' ggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC/
'' SIG '' 5pBzaN675F1KPDAiMGkz7MKnJS7JIT3yithZwuEppz1Y
'' SIG '' q3aaza57G4QNxDAf8xukOBbrVsaXbR2rsnnyyhHS5F/W
'' SIG '' BTxSD1Ifxp4VpX6+n6lXFllVcq9ok3DCsrp1mWpzMpTR
'' SIG '' EEQQLt+C8weE5nQ7bXHiLQwb7iDVySAdYyktzuxeTsiT
'' SIG '' +CFhmzTrBcZe7FsavOvJz82sNEBfsXpm7nfISKhmV1ef
'' SIG '' VFiODCu3T6cw2Vbuyntd463JT17lNecxy9qTXtyOj4Da
'' SIG '' tpGYQJB5w3jHtrHEtWoYOAMQjdjUN6QuBX2I9YI+EJFw
'' SIG '' q1WCQTLX2wRzKm6RAXwhTNS8rhsDdV14Ztk6MUSaM0C/
'' SIG '' CNdaSaTC5qmgZ92kJ7yhTzm1EVgX9yRcRo9k98FpiHaY
'' SIG '' dj1ZXUJ2h4mXaXpI8OCiEhtmmnTK3kse5w5jrubU75KS
'' SIG '' Op493ADkRSWJtppEGSt+wJS00mFt6zPZxd9LBADMfRyV
'' SIG '' w4/3IbKyEbe7f/LVjHAsQWCqsWMYRJUadmJ+9oCw++hk
'' SIG '' pjPRiQfhvbfmQ6QYuKZ3AeEPlAwhHbJUKSWJbOUOUlFH
'' SIG '' dL4mrLZBdd56rF+NP8m800ERElvlEFDrMcXKchYiCd98
'' SIG '' THU/Y+whX8QgUWtvsauGi0/C1kVfnSD8oR7FwI+isX4K
'' SIG '' Jpn15GkvmB0t9dmpsh3lGwIDAQABo4IBOjCCATYwDwYD
'' SIG '' VR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU7NfjgtJxXWRM
'' SIG '' 3y5nP+e6mK4cD08wHwYDVR0jBBgwFoAUReuir/SSy4Ix
'' SIG '' LVGLp6chnfNtyA8wDgYDVR0PAQH/BAQDAgGGMHkGCCsG
'' SIG '' AQUFBwEBBG0wazAkBggrBgEFBQcwAYYYaHR0cDovL29j
'' SIG '' c3AuZGlnaWNlcnQuY29tMEMGCCsGAQUFBzAChjdodHRw
'' SIG '' Oi8vY2FjZXJ0cy5kaWdpY2VydC5jb20vRGlnaUNlcnRB
'' SIG '' c3N1cmVkSURSb290Q0EuY3J0MEUGA1UdHwQ+MDwwOqA4
'' SIG '' oDaGNGh0dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdp
'' SIG '' Q2VydEFzc3VyZWRJRFJvb3RDQS5jcmwwEQYDVR0gBAow
'' SIG '' CDAGBgRVHSAAMA0GCSqGSIb3DQEBDAUAA4IBAQBwoL9D
'' SIG '' XFXnOF+go3QbPbYW1/e/Vwe9mqyhhyzshV6pGrsi+Ica
'' SIG '' aVQi7aSId229GhT0E0p6Ly23OO/0/4C5+KH38nLeJLxS
'' SIG '' A8hO0Cre+i1Wz/n096wwepqLsl7Uz9FDRJtDIeuWcqFI
'' SIG '' tJnLnU+nBgMTdydE1Od/6Fmo8L8vC6bp8jQ87PcDx4eo
'' SIG '' 0kxAGTVGamlUsLihVo7spNU96LHc/RzY9HdaXFSMb++h
'' SIG '' UD38dglohJ9vytsgjTVgHAIDyyCwrFigDkBjxZgiwbJZ
'' SIG '' 9VVrzyerbHbObyMt9H5xaiNrIv8SuFQtJ37YOtnwtoeW
'' SIG '' /VvRXKwYw02fc7cBqZ9Xql4o4rmUMYIDfDCCA3gCAQEw
'' SIG '' fTBpMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNl
'' SIG '' cnQsIEluYy4xQTA/BgNVBAMTOERpZ2lDZXJ0IFRydXN0
'' SIG '' ZWQgRzQgVGltZVN0YW1waW5nIFJTQTQwOTYgU0hBMjU2
'' SIG '' IDIwMjUgQ0ExAhAKgO8YS43xBYLRxHanlXRoMA0GCWCG
'' SIG '' SAFlAwQCAQUAoIHRMBoGCSqGSIb3DQEJAzENBgsqhkiG
'' SIG '' 9w0BCRABBDAcBgkqhkiG9w0BCQUxDxcNMjUwOTExMDcy
'' SIG '' MjU3WjArBgsqhkiG9w0BCRACDDEcMBowGDAWBBTdYjCs
'' SIG '' hgotMGvaOLFoeVIwB/tBfjAvBgkqhkiG9w0BCQQxIgQg
'' SIG '' lwR6bOD7ZnjDuj4THtjsnEQ7Om8/7pcBh+sVXpjG1PIw
'' SIG '' NwYLKoZIhvcNAQkQAi8xKDAmMCQwIgQgSqA/oizXXITF
'' SIG '' XJOPgo5na5yuyrM/420mmqM08UYRCjMwDQYJKoZIhvcN
'' SIG '' AQEBBQAEggIAPVIwhlJ5EF2UROlcdh0/N3gGug4w4biH
'' SIG '' HmIbSX+1Lxh0CUUdsiWl903oG/Ip8Q90ES6hegsNz7/4
'' SIG '' O8KGlFYV9foNZKtjc0pNvttJtHGl22Atp3htomMkVttw
'' SIG '' lVx4/Ac8xwRemx2mrdIC2ZpAXoittFi1sFNfdjIHAcG6
'' SIG '' /GdubyfIy9AtOuIHuaxhNmYSIb1muIudZknphYzej508
'' SIG '' oyazr2xL/2YOdZ4WaIuC1IwJA5piA6xvwojKLyiQ9svE
'' SIG '' /h6raXC6WqGoMSApMuJYJi/mPp+6zKnv8g0J8qS57K0Z
'' SIG '' JCp+KOVPSArSODg8JW3nCkpN/bF9W3UpLKSEi8x5+Ot/
'' SIG '' 9eY6fNiW0H8ednsVdOkXd40jT5woFnmabslRbiLuSqCh
'' SIG '' rO1edkBm/3Wg/M4dgML8aypMHDe6m9NQuvnZ+9svnWOR
'' SIG '' Yp+oJFq5bQVwTyYZ7lDRkRB1O698bG1MvZXyljggbuBf
'' SIG '' OlS48xXnot5eVMSQEMZf/EbPR0S6KdkM18Liukl7qEVM
'' SIG '' LUOUYGTLrNATPRCjHyebPxA7KFPW3zUySPLCCUzHcD7f
'' SIG '' ajOtHaWnCTZiJQIbwRGgcOAQT25CJO5IT9Xl1w0nIF4E
'' SIG '' 4n4lXiSr3nJjVdB6AuyEDnQDiMd6+rjuhLKU+NQoIUcR
'' SIG '' dqHgDuw04CRYICfv6PIHLb2IvBYnl3WPah4=
'' SIG '' End signature block