????

Your IP : 18.190.207.156


Current Path : C:/Windows/System32/Printing_Admin_Scripts/en-US/
Upload File :
Current File : C:/Windows/System32/Printing_Admin_Scripts/en-US/prnqctl.vbs

��'----------------------------------------------------------------------

'

' Copyright (c) Microsoft Corporation. All rights reserved.

'

' Abstract:

' prnqctl.vbs - printer control script for WMI on Windows 

'    used to pause, resume and purge a printer

'    also used to print a test page on a printer

'

' Usage:

' prnqctl [-zmex?] [-s server] [-p printer] [-u user name] [-w password]

'

' Examples:

' prnqctl -m -s server -p printer

' prnqctl -x -s server -p printer

' prnqctl -e -b printer

'----------------------------------------------------------------------



option explicit



'

' Debugging trace flags, to enable debug output trace message

' change gDebugFlag to true.

'

const kDebugTrace = 1

const kDebugError = 2

dim   gDebugFlag



gDebugFlag = false



'

' Operation action values.

'

const kActionUnknown    = 0

const kActionPause      = 1

const kActionResume     = 2

const kActionPurge      = 3

const kActionTestPage   = 4



const kErrorSuccess     = 0

const KErrorFailure     = 1



const kNameSpace        = "root\cimv2"



'

' Generic strings

'

const L_Empty_Text                 = ""

const L_Space_Text                 = " "

const L_Error_Text                 = "Error"

const L_Success_Text               = "Success"

const L_Failed_Text                = "Failed"

const L_Hex_Text                   = "0x"

const L_Printer_Text               = "Printer"

const L_Operation_Text             = "Operation"

const L_Provider_Text              = "Provider"

const L_Description_Text           = "Description"

const L_Debug_Text                 = "Debug:"



'

' General usage messages

'

const L_Help_Help_General01_Text   = "Usage: prnqctl [-zmex?] [-s server][-p printer][-u user name][-w password]"

const L_Help_Help_General02_Text   = "Arguments:"

const L_Help_Help_General03_Text   = "-e     - print test page"

const L_Help_Help_General04_Text   = "-m     - resume the printer"

const L_Help_Help_General05_Text   = "-p     - printer name"

const L_Help_Help_General06_Text   = "-s     - server name"

const L_Help_Help_General07_Text   = "-u     - user name"

const L_Help_Help_General08_Text   = "-w     - password"

const L_Help_Help_General09_Text   = "-x     - purge the printer (cancel all jobs)"

const L_Help_Help_General10_Text   = "-z     - pause the printer"

const L_Help_Help_General11_Text   = "-?     - display command usage"

const L_Help_Help_General12_Text   = "Examples:"

const L_Help_Help_General13_Text   = "prnqctl -e -s server -p printer"

const L_Help_Help_General14_Text   = "prnqctl -m -p printer"

const L_Help_Help_General15_Text   = "prnqctl -x -p printer"



'

' Messages to be displayed if the scripting host is not cscript

'

const L_Help_Help_Host01_Text      = "This script should be executed from the Command Prompt using CScript.exe."

const L_Help_Help_Host02_Text      = "For example: CScript script.vbs arguments"

const L_Help_Help_Host03_Text      = ""

const L_Help_Help_Host04_Text      = "To set CScript as the default application to run .VBS files run the following:"

const L_Help_Help_Host05_Text      = "     CScript //H:CScript //S"

const L_Help_Help_Host06_Text      = "You can then run ""script.vbs arguments"" without preceding the script with CScript."



'

' General error messages

'

const L_Text_Error_General01_Text  = "The scripting host could not be determined."

const L_Text_Error_General02_Text  = "Unable to parse command line."

const L_Text_Error_General03_Text  = "Unable to get printer instance."

const L_Text_Error_General04_Text  = "Win32 error code"

const L_Text_Error_General05_Text  = "Unable to get SWbemLocator object"

const L_Text_Error_General06_Text  = "Unable to connect to WMI service"





'

' Action strings

'

const L_Text_Action_General01_Text = "Pause"

const L_Text_Action_General02_Text = "Resume"

const L_Text_Action_General03_Text = "Purge"

const L_Text_Action_General04_Text = "Print Test Page"



'

' Debug messages

'

const L_Text_Dbg_Msg01_Text        = "In function ExecPrinter"

const L_Text_Dbg_Msg02_Text        = "Server name"

const L_Text_Dbg_Msg03_Text        = "Printer name"

const L_Text_Dbg_Msg04_Text        = "In function ParseCommandLine"



main



'

' Main execution starts here

'

sub main



    dim iAction

    dim iRetval

    dim strServer

    dim strPrinter

    dim strUser

    dim strPassword



    '

    ' Abort if the host is not cscript

    '

    if not IsHostCscript() then



        call wscript.echo(L_Help_Help_Host01_Text & vbCRLF & L_Help_Help_Host02_Text & vbCRLF & _

                          L_Help_Help_Host03_Text & vbCRLF & L_Help_Help_Host04_Text & vbCRLF & _

                          L_Help_Help_Host05_Text & vbCRLF & L_Help_Help_Host06_Text & vbCRLF)



        wscript.quit



    end if



    '

    ' Get command line parameters

    '

    iRetval = ParseCommandLine(iAction, strServer, strPrinter, strUser, strPassword)



    if iRetval = kErrorSuccess then



        select case iAction



            case kActionPause

                 iRetval = ExecPrinter(strServer, strPrinter, strUser, strPassword, L_Text_Action_General01_Text)



            case kActionResume

                 iRetval = ExecPrinter(strServer, strPrinter, strUser, strPassword, L_Text_Action_General02_Text)



            case kActionPurge

                 iRetval = ExecPrinter(strServer, strPrinter, strUser, strPassword, L_Text_Action_General03_Text)



            case kActionTestPage

                 iRetval = ExecPrinter(strServer, strPrinter, strUser, strPassword, L_Text_Action_General04_Text)



            case kActionUnknown

                 Usage(true)

                 exit sub



            case else

                 Usage(true)

                 exit sub



        end select



    end if



end sub



'

' Pause/Resume/Purge printer and print test page

'

function ExecPrinter(strServer, strPrinter, strUser, strPassword, strCommand)



    on error resume next



    DebugPrint kDebugTrace, L_Text_Dbg_Msg01_Text

    DebugPrint kDebugTrace, L_Text_Dbg_Msg02_Text & L_Space_Text & strServer

    DebugPrint kDebugTrace, L_Text_Dbg_Msg03_Text & L_Space_Text & strPrinter



    dim oPrinter

    dim oService

    dim iRetval

    dim uResult



    iRetval = kErrorFailure



    if WmiConnect(strServer, kNameSpace, strUser, strPassword, oService) then



        set oPrinter = oService.Get("Win32_Printer.DeviceID='" & strPrinter & "'")



    else



        ExecPrinter = kErrorFailure



        exit function



    end if



    '

    ' Check if getting a printer instance succeeded

    '

    if Err.Number = kErrorSuccess then



        select case strCommand



            case L_Text_Action_General01_Text

                 uResult = oPrinter.Pause()



            case L_Text_Action_General02_Text

                 uResult = oPrinter.Resume()



            case L_Text_Action_General03_Text

                 uResult = oPrinter.CancelAllJobs()



            case L_Text_Action_General04_Text

                 uResult = oPrinter.PrintTestPage()



            case else

                 Usage(true)



        end select



        '

        ' Err set by WMI

        '

        if Err.Number = kErrorSuccess then



            '

            ' uResult set by printer methods

            '

            if uResult = kErrorSuccess then



                wscript.echo L_Success_Text & L_Space_Text & strCommand & L_Space_Text _

                             & L_Printer_Text & L_Space_Text & strPrinter



                iRetval = kErrorSuccess



            else



                wscript.echo L_Failed_Text & L_Space_Text & strCommand & L_Space_Text _

                             & L_Text_Error_General04_Text & L_Space_Text & uResult



            end if



        else



            wscript.echo L_Failed_Text & L_Space_Text & strCommand & L_Space_Text & L_Error_Text _

                         & L_Space_Text & L_Hex_Text & hex(Err.Number) & L_Space_Text & Err.Description



        end if



    else



        wscript.echo L_Text_Error_General03_Text & L_Space_Text & L_Error_Text & L_Space_Text _

                     & L_Hex_Text & hex(Err.Number) & L_Space_Text & Err.Description



        '

        ' Try getting extended error information

        '

        call LastError()



    end if



    ExecPrinter = iRetval



end function



'

' Debug display helper function

'

sub DebugPrint(uFlags, strString)



    if gDebugFlag = true then



        if uFlags = kDebugTrace then



            wscript.echo L_Debug_Text & L_Space_Text & strString



        end if



        if uFlags = kDebugError then



            if Err <> 0 then



                wscript.echo L_Debug_Text & L_Space_Text & strString & L_Space_Text _

                             & L_Error_Text & L_Space_Text & L_Hex_Text & hex(Err.Number) _

                             & L_Space_Text & Err.Description



            end if



        end if



    end if



end sub



'

' Parse the command line into its components

'

function ParseCommandLine(iAction, strServer, strPrinter, strUser, strPassword)



    on error resume next



    DebugPrint kDebugTrace, L_Text_Dbg_Msg04_Text



    dim oArgs

    dim iIndex



    iAction = kActionUnknown

    iIndex = 0



    set oArgs = wscript.Arguments



    while iIndex < oArgs.Count



        select case oArgs(iIndex)



            case "-z"

                iAction = kActionPause



            case "-m"

                iAction = kActionResume



            case "-x"

                iAction = kActionPurge



            case "-e"

                iAction = kActionTestPage



            case "-p"

                iIndex = iIndex + 1

                strPrinter = oArgs(iIndex)



            case "-s"

                iIndex = iIndex + 1

                strServer = RemoveBackslashes(oArgs(iIndex))



            case "-u"

                iIndex = iIndex + 1

                strUser = oArgs(iIndex)



            case "-w"

                iIndex = iIndex + 1

                strPassword = oArgs(iIndex)



            case "-?"

                Usage(true)

                exit function



            case else

                Usage(true)

                exit function



        end select



        iIndex = iIndex + 1



    wend



    if Err.Number = kErrorSuccess then



        ParseCommandLine = kErrorSuccess



    else



        wscript.echo L_Text_Error_General02_Text & L_Space_Text & L_Error_Text & L_Space_Text _

                     & L_Hex_Text & hex(Err.Number) & L_Space_text & Err.Description



        ParseCommandLine = kErrorFailure



    end if



end function



'

' Display command usage.

'

sub Usage(bExit)



    wscript.echo L_Help_Help_General01_Text

    wscript.echo L_Empty_Text

    wscript.echo L_Help_Help_General02_Text

    wscript.echo L_Help_Help_General03_Text

    wscript.echo L_Help_Help_General04_Text

    wscript.echo L_Help_Help_General05_Text

    wscript.echo L_Help_Help_General06_Text

    wscript.echo L_Help_Help_General07_Text

    wscript.echo L_Help_Help_General08_Text

    wscript.echo L_Help_Help_General09_Text

    wscript.echo L_Help_Help_General10_Text

    wscript.echo L_Help_Help_General11_Text

    wscript.echo L_Empty_Text

    wscript.echo L_Help_Help_General12_Text

    wscript.echo L_Help_Help_General13_Text

    wscript.echo L_Help_Help_General14_Text

    wscript.echo L_Help_Help_General15_Text



    if bExit then



        wscript.quit(1)



    end if



end sub



'

' Determines which program is being used to run this script.

' Returns true if the script host is cscript.exe

'

function IsHostCscript()



    on error resume next



    dim strFullName

    dim strCommand

    dim i, j

    dim bReturn



    bReturn = false



    strFullName = WScript.FullName



    i = InStr(1, strFullName, ".exe", 1)



    if i <> 0 then



        j = InStrRev(strFullName, "\", i, 1)



        if j <> 0 then



            strCommand = Mid(strFullName, j+1, i-j-1)



            if LCase(strCommand) = "cscript" then



                bReturn = true



            end if



        end if



    end if



    if Err <> 0 then



        wscript.echo L_Text_Error_General01_Text & L_Space_Text & L_Error_Text & L_Space_Text _

                     & L_Hex_Text & hex(Err.Number) & L_Space_Text & Err.Description



    end if



    IsHostCscript = bReturn



end function



'

' Retrieves extended information about the last error that occurred

' during a WBEM operation. The methods that set an SWbemLastError

' object are GetObject, PutInstance, DeleteInstance

'

sub LastError()



    on error resume next



    dim oError



    set oError = CreateObject("WbemScripting.SWbemLastError")



    if Err = kErrorSuccess then



        wscript.echo L_Operation_Text            & L_Space_Text & oError.Operation

        wscript.echo L_Provider_Text             & L_Space_Text & oError.ProviderName

        wscript.echo L_Description_Text          & L_Space_Text & oError.Description

        wscript.echo L_Text_Error_General04_Text & L_Space_Text & oError.StatusCode



    end if



end sub



'

' Connects to the WMI service on a server. oService is returned as a service

' object (SWbemServices)

'

function WmiConnect(strServer, strNameSpace, strUser, strPassword, oService)



   on error resume next



   dim oLocator

   dim bResult



   oService = null



   bResult  = false



   set oLocator = CreateObject("WbemScripting.SWbemLocator")



   if Err = kErrorSuccess then



      set oService = oLocator.ConnectServer(strServer, strNameSpace, strUser, strPassword)



      if Err = kErrorSuccess then



          bResult = true



          oService.Security_.impersonationlevel = 3



          Err.Clear



      else



          wscript.echo L_Text_Error_General06_Text & L_Space_Text & L_Error_Text _

                       & L_Space_Text & L_Hex_Text & hex(Err.Number) & L_Space_Text _

                       & Err.Description



      end if



   else



       wscript.echo L_Text_Error_General05_Text & L_Space_Text & L_Error_Text _

                    & L_Space_Text & L_Hex_Text & hex(Err.Number) & L_Space_Text _

                    & Err.Description



   end if



   WmiConnect = bResult



end function



'

' Remove leading "\\" from server name

'

function RemoveBackslashes(strServer)



    dim strRet



    strRet = strServer



    if Left(strServer, 2) = "\\" and Len(strServer) > 2 then



        strRet = Mid(strServer, 3)



    end if



    RemoveBackslashes = strRet



end function



'' SIG '' Begin signature block

'' SIG '' MIIhXAYJKoZIhvcNAQcCoIIhTTCCIUkCAQExDzANBglg

'' SIG '' hkgBZQMEAgEFADB3BgorBgEEAYI3AgEEoGkwZzAyBgor

'' SIG '' BgEEAYI3AgEeMCQCAQEEEE7wKRaZJ7VNj+Ws4Q8X66sC

'' SIG '' AQACAQACAQACAQACAQAwMTANBglghkgBZQMEAgEFAAQg

'' SIG '' bC2hk3cvC4yTgr8z1VD7j98e4AUJNisLu9VlGTQcB1Gg

'' SIG '' ggrlMIIFBjCCA+6gAwIBAgITMwAAAu0sReTBRc9IRAAA

'' SIG '' AAAC7TANBgkqhkiG9w0BAQsFADCBhDELMAkGA1UEBhMC

'' SIG '' VVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT

'' SIG '' B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jw

'' SIG '' b3JhdGlvbjEuMCwGA1UEAxMlTWljcm9zb2Z0IFdpbmRv

'' SIG '' d3MgUHJvZHVjdGlvbiBQQ0EgMjAxMTAeFw0yMDEyMTUy

'' SIG '' MTI5MTRaFw0yMTEyMDIyMTI5MTRaMHAxCzAJBgNVBAYT

'' SIG '' AlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQH

'' SIG '' EwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29y

'' SIG '' cG9yYXRpb24xGjAYBgNVBAMTEU1pY3Jvc29mdCBXaW5k

'' SIG '' b3dzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC

'' SIG '' AQEA1/mOTaZIAMdvXd/Uq3DhEpREugbVndaHjzafKgYv

'' SIG '' XqdiboW0UGKgYBgiM+f66zVMFxocrP4gxe33290l7UFD

'' SIG '' 6iVt6t7BkJDi91lzCGFZMsjlKfRwvDC64ucGyhaS64N5

'' SIG '' uQlvjwH8a8YjNwPwfF2IOU8r1MStiYVtBS6cQPAGT9HK

'' SIG '' FsuKOkieubIYQMwh6F05jPheTP0NvbxlISpy9LEbUYoB

'' SIG '' bbOjZ+GJbjOil7USxnbYK+bEQ+qSCnrHfolbLX5Ajmk3

'' SIG '' uFC11bjuJxA9opD6cmwi2QAs+V4HFuDjAhvJojb8lP/v

'' SIG '' qiZRe4mRvp0xsaQWI2y/Jv5czI7ZBiI6v+0d1QIDAQAB

'' SIG '' o4IBgjCCAX4wHwYDVR0lBBgwFgYKKwYBBAGCNwoDBgYI

'' SIG '' KwYBBQUHAwMwHQYDVR0OBBYEFBX5vmhcu8syt5gpQoPf

'' SIG '' BQEaWSozMFQGA1UdEQRNMEukSTBHMS0wKwYDVQQLEyRN

'' SIG '' aWNyb3NvZnQgSXJlbGFuZCBPcGVyYXRpb25zIExpbWl0

'' SIG '' ZWQxFjAUBgNVBAUTDTIyOTg3OSs0NjMzNDQwHwYDVR0j

'' SIG '' BBgwFoAUqSkCOY4WxJd4zZD5nk+a4XxVr1MwVAYDVR0f

'' SIG '' BE0wSzBJoEegRYZDaHR0cDovL3d3dy5taWNyb3NvZnQu

'' SIG '' Y29tL3BraW9wcy9jcmwvTWljV2luUHJvUENBMjAxMV8y

'' SIG '' MDExLTEwLTE5LmNybDBhBggrBgEFBQcBAQRVMFMwUQYI

'' SIG '' KwYBBQUHMAKGRWh0dHA6Ly93d3cubWljcm9zb2Z0LmNv

'' SIG '' bS9wa2lvcHMvY2VydHMvTWljV2luUHJvUENBMjAxMV8y

'' SIG '' MDExLTEwLTE5LmNydDAMBgNVHRMBAf8EAjAAMA0GCSqG

'' SIG '' SIb3DQEBCwUAA4IBAQAeDDbpx7pwpcs42ObZbp01JdBL

'' SIG '' Ul1/8L2+4IaJVeTRbjYc5hRcGbh3wjkNLBP90gXISlh8

'' SIG '' ZsC7k22x+k89M8JnDPp47a81uAE0kO3eEq9M90XvusY1

'' SIG '' B+2Q2N62wRJAjlvrj8jsX5RPGD69Hf9Tl0+TXE2aZ+FU

'' SIG '' o1vH9WsKRHorLLASNzOO+VrSx+iPN4ht2sHppvFK749M

'' SIG '' fSiTpnwMv1YTQ9gj/AiT+Htn+DYj8k/siV96lsHRhgE8

'' SIG '' xuTSyl306rKlfiuoCI/Q2o1vPpbPMz30r2q9Yd3823uc

'' SIG '' uN9CoFTpeOjSnvjz7uLjnrxDSSoKopMFZgvnGGcLWNEV

'' SIG '' nlxc/H+/MIIF1zCCA7+gAwIBAgIKYQd2VgAAAAAACDAN

'' SIG '' BgkqhkiG9w0BAQsFADCBiDELMAkGA1UEBhMCVVMxEzAR

'' SIG '' BgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1v

'' SIG '' bmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlv

'' SIG '' bjEyMDAGA1UEAxMpTWljcm9zb2Z0IFJvb3QgQ2VydGlm

'' SIG '' aWNhdGUgQXV0aG9yaXR5IDIwMTAwHhcNMTExMDE5MTg0

'' SIG '' MTQyWhcNMjYxMDE5MTg1MTQyWjCBhDELMAkGA1UEBhMC

'' SIG '' VVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT

'' SIG '' B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jw

'' SIG '' b3JhdGlvbjEuMCwGA1UEAxMlTWljcm9zb2Z0IFdpbmRv

'' SIG '' d3MgUHJvZHVjdGlvbiBQQ0EgMjAxMTCCASIwDQYJKoZI

'' SIG '' hvcNAQEBBQADggEPADCCAQoCggEBAN0Mu6LkLgnj58X3

'' SIG '' lmm8ACG9aTMz760Ey1SA7gaDu8UghNn30ovzOLCrpK0t

'' SIG '' fGJ5Bf/jSj8ENSBw48Tna+CcwDZ16Yox3Y1w5dw3tXRG

'' SIG '' lihbh2AjLL/cR6Vn91EnnnLrB6bJuR47UzV85dPsJ7mH

'' SIG '' HP65ySMJb6hGkcFuljxB08ujP10Cak3saR8lKFw2//1D

'' SIG '' FQqU4Bm0z9/CEuLCWyfuJ3gwi1sqCWsiiVNgFizAaB1T

'' SIG '' uuxJ851hjIVoCXNEXX2iVCvdefcVzzVdbBwrXM68nCOL

'' SIG '' b261Jtk2E8NP1ieuuTI7QZIs4cfNd+iqVE73XAsEh2W0

'' SIG '' QxiosuBtGXfsWiT6SAMCAwEAAaOCAUMwggE/MBAGCSsG

'' SIG '' AQQBgjcVAQQDAgEAMB0GA1UdDgQWBBSpKQI5jhbEl3jN

'' SIG '' kPmeT5rhfFWvUzAZBgkrBgEEAYI3FAIEDB4KAFMAdQBi

'' SIG '' AEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB

'' SIG '' /zAfBgNVHSMEGDAWgBTV9lbLj+iiXGJo0T2UkFvXzpoY

'' SIG '' xDBWBgNVHR8ETzBNMEugSaBHhkVodHRwOi8vY3JsLm1p

'' SIG '' Y3Jvc29mdC5jb20vcGtpL2NybC9wcm9kdWN0cy9NaWNS

'' SIG '' b29DZXJBdXRfMjAxMC0wNi0yMy5jcmwwWgYIKwYBBQUH

'' SIG '' AQEETjBMMEoGCCsGAQUFBzAChj5odHRwOi8vd3d3Lm1p

'' SIG '' Y3Jvc29mdC5jb20vcGtpL2NlcnRzL01pY1Jvb0NlckF1

'' SIG '' dF8yMDEwLTA2LTIzLmNydDANBgkqhkiG9w0BAQsFAAOC

'' SIG '' AgEAFPx8cVGlecJusu85Prw8Ug9uKz8QE3P+qGjQSKY0

'' SIG '' TYqWBSbuMUaQYXnW/zguRWv0wOUouNodj4rbCdcax0wK

'' SIG '' NmZqjOwb1wSQqBgXpJu54kAyNnbEwVrGv+QEwOoW06zD

'' SIG '' aO9irN1UbFAwWKbrfP6Up06O9Ox8hnNXwlIhczRa86OK

'' SIG '' VsgE2gcJ7fiL4870fo6u8PYLigj7P8kdcn9TuOu+Y+Dj

'' SIG '' PTFlsIHl8qzNFqSfPaixm8JC0JCEX1Qd/4nquh1HkG+w

'' SIG '' c05Bn0CfX+WhKrIRkXOKISjwzt5zOV8+q1xg7N8DEKjT

'' SIG '' Cen09paFtn9RiGZHGY2isBI9gSpoBXe7kUxie7bBB8e6

'' SIG '' eoc0Aw5LYnqZ6cr8zko3yS2kV3wc/j3cuA9a+tbEswKF

'' SIG '' Ajrqs9lu5GkhN96B0fZ1GQVn05NXXikbOcjuLeHN5EVz

'' SIG '' W9DSznqrFhmCRljQXp2Bs2evbDXyvOU/JOI1ogp1BvYY

'' SIG '' VpnUeCzRBRvr0IgBnaoQ8QXfun4sY7cGmyMhxPl4bOJY

'' SIG '' FwY2K5ESA8yk2fItuvmUnUDtGEXxzopcaz6rA9NwGCoK

'' SIG '' auBfR9HVYwoy8q/XNh8qcFrlQlkIcUtXun6DgfAhPPQc

'' SIG '' wcW5kJMOiEWThumxIJm+mMvFlaRdYtagYwggvXUQd309

'' SIG '' 80W5n5efy1eAbzOpBM93pGIcWX4xghXPMIIVywIBATCB

'' SIG '' nDCBhDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hp

'' SIG '' bmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoT

'' SIG '' FU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEuMCwGA1UEAxMl

'' SIG '' TWljcm9zb2Z0IFdpbmRvd3MgUHJvZHVjdGlvbiBQQ0Eg

'' SIG '' MjAxMQITMwAAAu0sReTBRc9IRAAAAAAC7TANBglghkgB

'' SIG '' ZQMEAgEFAKCCAQQwGQYJKoZIhvcNAQkDMQwGCisGAQQB

'' SIG '' gjcCAQQwHAYKKwYBBAGCNwIBCzEOMAwGCisGAQQBgjcC

'' SIG '' ARUwLwYJKoZIhvcNAQkEMSIEIKTor5MQacZAOIOaZqdA

'' SIG '' M2TQy2vnErwbew9MUPFEam7PMDwGCisGAQQBgjcKAxwx

'' SIG '' LgwsUTd3QVhnMVRkL2NjRUUyVzVOTnJnK0ZGNk5ZR2RH

'' SIG '' VWxjTi9OTWx2T1hlMD0wWgYKKwYBBAGCNwIBDDFMMEqg

'' SIG '' JIAiAE0AaQBjAHIAbwBzAG8AZgB0ACAAVwBpAG4AZABv

'' SIG '' AHcAc6EigCBodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v

'' SIG '' d2luZG93czANBgkqhkiG9w0BAQEFAASCAQBJETWPTsNC

'' SIG '' QpdX+WZY3x8DaJw2Dig0hIG0E+8+y16FHOKSb7cRCAo5

'' SIG '' atfsNS8ho8aMX0TjSWG6beRVDW95pTI8xmhK01q9j5sE

'' SIG '' YuTC7Hrp2dJY3fFU7OEkDDNnDhswtzAMkpXlFi8YnRQJ

'' SIG '' uvbhkNBwpadw62QZmdIziXhcz79Gc5Lo+37p68V/Xd1u

'' SIG '' yFkw8ZewTaLvdXr/UI62rmFOhNgPyb/BlYSbsngfLK5l

'' SIG '' sXh6xzhTdDJnx8SfU9tvFnl97LDBvhmpr6+XTrLrsN7F

'' SIG '' r2vosaASfrreNrTlt7vwp9QTCwqXzYKIrTflUUlxdWv7

'' SIG '' SLIC3dfING4NbJEaF3KXOOLwoYIS+zCCEvcGCisGAQQB

'' SIG '' gjcDAwExghLnMIIS4wYJKoZIhvcNAQcCoIIS1DCCEtAC

'' SIG '' AQMxDzANBglghkgBZQMEAgEFADCCAVkGCyqGSIb3DQEJ

'' SIG '' EAEEoIIBSASCAUQwggFAAgEBBgorBgEEAYRZCgMBMDEw

'' SIG '' DQYJYIZIAWUDBAIBBQAEIBpjA269i6q8aVx6yWNNDPRY

'' SIG '' aJWgrIprtUEXLGkZb+ikAgZgfmMzKtkYEzIwMjEwNTA4

'' SIG '' MDUxMzU1LjY0M1owBIACAfSggdikgdUwgdIxCzAJBgNV

'' SIG '' BAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYD

'' SIG '' VQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQg

'' SIG '' Q29ycG9yYXRpb24xLTArBgNVBAsTJE1pY3Jvc29mdCBJ

'' SIG '' cmVsYW5kIE9wZXJhdGlvbnMgTGltaXRlZDEmMCQGA1UE

'' SIG '' CxMdVGhhbGVzIFRTUyBFU046RDA4Mi00QkZELUVFQkEx

'' SIG '' JTAjBgNVBAMTHE1pY3Jvc29mdCBUaW1lLVN0YW1wIFNl

'' SIG '' cnZpY2Wggg5KMIIE+TCCA+GgAwIBAgITMwAAAUGvf1KX

'' SIG '' XPLcRQAAAAABQTANBgkqhkiG9w0BAQsFADB8MQswCQYD

'' SIG '' VQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4G

'' SIG '' A1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0

'' SIG '' IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQg

'' SIG '' VGltZS1TdGFtcCBQQ0EgMjAxMDAeFw0yMDEwMTUxNzI4

'' SIG '' MjdaFw0yMjAxMTIxNzI4MjdaMIHSMQswCQYDVQQGEwJV

'' SIG '' UzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMH

'' SIG '' UmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBv

'' SIG '' cmF0aW9uMS0wKwYDVQQLEyRNaWNyb3NvZnQgSXJlbGFu

'' SIG '' ZCBPcGVyYXRpb25zIExpbWl0ZWQxJjAkBgNVBAsTHVRo

'' SIG '' YWxlcyBUU1MgRVNOOkQwODItNEJGRC1FRUJBMSUwIwYD

'' SIG '' VQQDExxNaWNyb3NvZnQgVGltZS1TdGFtcCBTZXJ2aWNl

'' SIG '' MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA

'' SIG '' 8irLqL28dal+PJUmUJOwvYn/sOCEzQzZyj94XbFPtRhD

'' SIG '' hPjagvvKOv1GgMoOuXvkpM3uM5E67vyOCPxqhTAzq7Ak

'' SIG '' 3zkEXXBv7JoM8Xm0x5UcnAkpUiEo0eycRl6bnYIB3KlZ

'' SIG '' W3uz4Jc2v2FV0KCGkLrvqfKP8V/i2hVyN854OejWpx8w

'' SIG '' GUazM4CYUVowcgEDc76OY+Xa4W27DCZJm2f9ol4BjSL+

'' SIG '' b2L/T8n/LEGknaUxwSQTN1LQCt+uBDCASd6VQR5CLLJV

'' SIG '' t6MBL0W1NlaWxEAJwlIdyBnS1ihLvRg1jc/KUZe0sRFd

'' SIG '' D3fhKrjPac3hoy007Fvr6Go0WJ4pr2rJdQIDAQABo4IB

'' SIG '' GzCCARcwHQYDVR0OBBYEFC0oPyxuLpD9RXBr9c8NO0EF

'' SIG '' EsbEMB8GA1UdIwQYMBaAFNVjOlyKMZDzQ3t8RhvFM2ha

'' SIG '' hW1VMFYGA1UdHwRPME0wS6BJoEeGRWh0dHA6Ly9jcmwu

'' SIG '' bWljcm9zb2Z0LmNvbS9wa2kvY3JsL3Byb2R1Y3RzL01p

'' SIG '' Y1RpbVN0YVBDQV8yMDEwLTA3LTAxLmNybDBaBggrBgEF

'' SIG '' BQcBAQROMEwwSgYIKwYBBQUHMAKGPmh0dHA6Ly93d3cu

'' SIG '' bWljcm9zb2Z0LmNvbS9wa2kvY2VydHMvTWljVGltU3Rh

'' SIG '' UENBXzIwMTAtMDctMDEuY3J0MAwGA1UdEwEB/wQCMAAw

'' SIG '' EwYDVR0lBAwwCgYIKwYBBQUHAwgwDQYJKoZIhvcNAQEL

'' SIG '' BQADggEBAFJ63yJ92ChqCgpexD48okviGuC4ikNsvmwl

'' SIG '' CSet1sFpvJEzLJB8cTF4z4qQTz8AsQtcew6mAVmQCYDu

'' SIG '' 9f5ee11xXj1LwHYsZGnSs/OfRul1VKmY51OQpqvK5O/C

'' SIG '' t4fs0Iblzo8eyOLJygTk97aXVA4Uzq8GblL7LQ5XiwAY

'' SIG '' 446MOALnNXFo/Kq9tvzipwY1YcRn/nlMQ+b92OiLLmHV

'' SIG '' Mi2wAUORiKFvaAfYWjhQd+2qHLMsdpNluwBbWe7FF5AB

'' SIG '' sDo0HROMWyCgxdLQ3vqr3DMSH3ZWKiirFsvWJmchfZPG

'' SIG '' RObwqszvSXPFmPBZ9o+er+4UoLV+50GWnnQky7HVgLkw

'' SIG '' ggZxMIIEWaADAgECAgphCYEqAAAAAAACMA0GCSqGSIb3

'' SIG '' DQEBCwUAMIGIMQswCQYDVQQGEwJVUzETMBEGA1UECBMK

'' SIG '' V2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwG

'' SIG '' A1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTIwMAYD

'' SIG '' VQQDEylNaWNyb3NvZnQgUm9vdCBDZXJ0aWZpY2F0ZSBB

'' SIG '' dXRob3JpdHkgMjAxMDAeFw0xMDA3MDEyMTM2NTVaFw0y

'' SIG '' NTA3MDEyMTQ2NTVaMHwxCzAJBgNVBAYTAlVTMRMwEQYD

'' SIG '' VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25k

'' SIG '' MR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24x

'' SIG '' JjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBD

'' SIG '' QSAyMDEwMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB

'' SIG '' CgKCAQEAqR0NvHcRijog7PwTl/X6f2mUa3RUENWlCgCC

'' SIG '' hfvtfGhLLF/Fw+Vhwna3PmYrW/AVUycEMR9BGxqVHc4J

'' SIG '' E458YTBZsTBED/FgiIRUQwzXTbg4CLNC3ZOs1nMwVyaC

'' SIG '' o0UN0Or1R4HNvyRgMlhgRvJYR4YyhB50YWeRX4FUsc+T

'' SIG '' TJLBxKZd0WETbijGGvmGgLvfYfxGwScdJGcSchohiq9L

'' SIG '' ZIlQYrFd/XcfPfBXday9ikJNQFHRD5wGPmd/9WbAA5ZE

'' SIG '' fu/QS/1u5ZrKsajyeioKMfDaTgaRtogINeh4HLDpmc08

'' SIG '' 5y9Euqf03GS9pAHBIAmTeM38vMDJRF1eFpwBBU8iTQID

'' SIG '' AQABo4IB5jCCAeIwEAYJKwYBBAGCNxUBBAMCAQAwHQYD

'' SIG '' VR0OBBYEFNVjOlyKMZDzQ3t8RhvFM2hahW1VMBkGCSsG

'' SIG '' AQQBgjcUAgQMHgoAUwB1AGIAQwBBMAsGA1UdDwQEAwIB

'' SIG '' hjAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFNX2

'' SIG '' VsuP6KJcYmjRPZSQW9fOmhjEMFYGA1UdHwRPME0wS6BJ

'' SIG '' oEeGRWh0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9wa2kv

'' SIG '' Y3JsL3Byb2R1Y3RzL01pY1Jvb0NlckF1dF8yMDEwLTA2

'' SIG '' LTIzLmNybDBaBggrBgEFBQcBAQROMEwwSgYIKwYBBQUH

'' SIG '' MAKGPmh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2kv

'' SIG '' Y2VydHMvTWljUm9vQ2VyQXV0XzIwMTAtMDYtMjMuY3J0

'' SIG '' MIGgBgNVHSABAf8EgZUwgZIwgY8GCSsGAQQBgjcuAzCB

'' SIG '' gTA9BggrBgEFBQcCARYxaHR0cDovL3d3dy5taWNyb3Nv

'' SIG '' ZnQuY29tL1BLSS9kb2NzL0NQUy9kZWZhdWx0Lmh0bTBA

'' SIG '' BggrBgEFBQcCAjA0HjIgHQBMAGUAZwBhAGwAXwBQAG8A

'' SIG '' bABpAGMAeQBfAFMAdABhAHQAZQBtAGUAbgB0AC4gHTAN

'' SIG '' BgkqhkiG9w0BAQsFAAOCAgEAB+aIUQ3ixuCYP4FxAz2d

'' SIG '' o6Ehb7Prpsz1Mb7PBeKp/vpXbRkws8LFZslq3/Xn8Hi9

'' SIG '' x6ieJeP5vO1rVFcIK1GCRBL7uVOMzPRgEop2zEBAQZvc

'' SIG '' XBf/XPleFzWYJFZLdO9CEMivv3/Gf/I3fVo/HPKZeUqR

'' SIG '' UgCvOA8X9S95gWXZqbVr5MfO9sp6AG9LMEQkIjzP7QOl

'' SIG '' lo9ZKby2/QThcJ8ySif9Va8v/rbljjO7Yl+a21dA6fHO

'' SIG '' mWaQjP9qYn/dxUoLkSbiOewZSnFjnXshbcOco6I8+n99

'' SIG '' lmqQeKZt0uGc+R38ONiU9MalCpaGpL2eGq4EQoO4tYCb

'' SIG '' IjggtSXlZOz39L9+Y1klD3ouOVd2onGqBooPiRa6YacR

'' SIG '' y5rYDkeagMXQzafQ732D8OE7cQnfXXSYIghh2rBQHm+9

'' SIG '' 8eEA3+cxB6STOvdlR3jo+KhIq/fecn5ha293qYHLpwms

'' SIG '' ObvsxsvYgrRyzR30uIUBHoD7G4kqVDmyW9rIDVWZeodz

'' SIG '' OwjmmC3qjeAzLhIp9cAvVCch98isTtoouLGp25ayp0Ki

'' SIG '' yc8ZQU3ghvkqmqMRZjDTu3QyS99je/WZii8bxyGvWbWu

'' SIG '' 3EQ8l1Bx16HSxVXjad5XwdHeMMD9zOZN+w2/XU/pnR4Z

'' SIG '' OC+8z1gFLu8NoFA12u8JJxzVs341Hgi62jbb01+P3nSI

'' SIG '' SRKhggLUMIICPQIBATCCAQChgdikgdUwgdIxCzAJBgNV

'' SIG '' BAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYD

'' SIG '' VQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQg

'' SIG '' Q29ycG9yYXRpb24xLTArBgNVBAsTJE1pY3Jvc29mdCBJ

'' SIG '' cmVsYW5kIE9wZXJhdGlvbnMgTGltaXRlZDEmMCQGA1UE

'' SIG '' CxMdVGhhbGVzIFRTUyBFU046RDA4Mi00QkZELUVFQkEx

'' SIG '' JTAjBgNVBAMTHE1pY3Jvc29mdCBUaW1lLVN0YW1wIFNl

'' SIG '' cnZpY2WiIwoBATAHBgUrDgMCGgMVAKrlvym1CquIoQcr

'' SIG '' zncLvkD1WpUDoIGDMIGApH4wfDELMAkGA1UEBhMCVVMx

'' SIG '' EzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1Jl

'' SIG '' ZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3Jh

'' SIG '' dGlvbjEmMCQGA1UEAxMdTWljcm9zb2Z0IFRpbWUtU3Rh

'' SIG '' bXAgUENBIDIwMTAwDQYJKoZIhvcNAQEFBQACBQDkQJvz

'' SIG '' MCIYDzIwMjEwNTA4MTMxMTE1WhgPMjAyMTA1MDkxMzEx

'' SIG '' MTVaMHQwOgYKKwYBBAGEWQoEATEsMCowCgIFAORAm/MC

'' SIG '' AQAwBwIBAAICEWswBwIBAAICErEwCgIFAORB7XMCAQAw

'' SIG '' NgYKKwYBBAGEWQoEAjEoMCYwDAYKKwYBBAGEWQoDAqAK

'' SIG '' MAgCAQACAwehIKEKMAgCAQACAwGGoDANBgkqhkiG9w0B

'' SIG '' AQUFAAOBgQBoRPKJduCR44n5/1IcKWKmLdaeBKsZbyXq

'' SIG '' DfXowZWme9kiK51xiMyX9osOZeLpGxQwoGj9tALpv8NS

'' SIG '' WjI2rj0Es1rhRPZUY77TP5kmKgW8H3Wrldbx1IvYReW3

'' SIG '' PhL5qwukxW1iWYY/iWM8ArumuOFuQzVCCVXqHV7Y6bmU

'' SIG '' BcZanjGCAw0wggMJAgEBMIGTMHwxCzAJBgNVBAYTAlVT

'' SIG '' MRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdS

'' SIG '' ZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9y

'' SIG '' YXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0

'' SIG '' YW1wIFBDQSAyMDEwAhMzAAABQa9/Updc8txFAAAAAAFB

'' SIG '' MA0GCWCGSAFlAwQCAQUAoIIBSjAaBgkqhkiG9w0BCQMx

'' SIG '' DQYLKoZIhvcNAQkQAQQwLwYJKoZIhvcNAQkEMSIEIGA5

'' SIG '' aM/TlyW9NXSEHjFqoGdyu+mTxcSUf45tl84jdZUBMIH6

'' SIG '' BgsqhkiG9w0BCRACLzGB6jCB5zCB5DCBvQQgUT8BPIzq

'' SIG '' c3SecHRPLKBtW0vOOnT+78haWo+XcxVerd4wgZgwgYCk

'' SIG '' fjB8MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGlu

'' SIG '' Z3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMV

'' SIG '' TWljcm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1N

'' SIG '' aWNyb3NvZnQgVGltZS1TdGFtcCBQQ0EgMjAxMAITMwAA

'' SIG '' AUGvf1KXXPLcRQAAAAABQTAiBCAdIgULWIrpv9lidYdJ

'' SIG '' Z/HsOssJ5nsBzkAYmiAsqaApGjANBgkqhkiG9w0BAQsF

'' SIG '' AASCAQAHudCIp+kAE2r5y/L8UMsEzEv1ywWFg10IuA/F

'' SIG '' 6VwIqMS9L0/cyKGx+SGQyaRRbuNic7yFRwZFJ4NRSfd7

'' SIG '' oaPCSkcsz9yAlCCiLqZsg9lpn1pEw2rPxbiW63nMTOUq

'' SIG '' Xj/eB06j92bCR4t5W/pJx3FOMK2nMN+GxgAwyMgBHI8H

'' SIG '' 8cIhvhVaefHgMQzJgXeuORTMEr6wu+E72Ky19RuCpGSn

'' SIG '' 9LY6sYeXAfZEdeumPZc8Zjr/Iepno7OpjnsHWFyLOZm+

'' SIG '' jteyx7k2BoocvLEzhnYOFkT0C/fcM7SwC1IMX0v8FEzy

'' SIG '' awq94qCAiLjDWSlrEteycL7sys2zaW9u2lwOLOp2

'' SIG '' End signature block