'---------------------------------------------------------------------- ' ' Copyright (c) Microsoft Corporation. All rights reserved. ' ' Abstract: ' ' prncnfg.vbs - printer configuration script for WMI on Windows used to get ' and set printer configuration also used to rename a printer ' ' Usage: ' prncnfg [-gtx?] [-s server] [-p printer] [-u user name] [-w password] ' [-z new printer name] [-r port name] [-l location] [-m comment] ' [-h share name] [-f sep-file] [-y data-type] [-st start time] ' [-ut until time] [-o priority] [-i default priority] ' [<+|->rawonly][<+|->keepprintedjobs][<+|->queued][<+|->workoffline] ' [<+|->enabledevq][<+|->docompletefirst][<+|->enablebidi] ' ' Examples: ' prncnfg -g -s server -p printer ' prncnfg -x -p printer -w "new Printer" ' prncnfg -t -s server -p Printer -l "Building A/Floor 100/Office 1" -m "Color Printer" ' prncnfg -t -p printer -h "Share" +shared -direct ' prncnfg -t -p printer +rawonly +keepprintedjobs ' prncnfg -t -p printer -st 2300 -ut 0215 -o 10 -i 5 ' '---------------------------------------------------------------------- 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 const kFlagUpdateOnly = 1 ' ' Operation action values. ' const kActionUnknown = 0 const kActionSet = 1 const kActionGet = 2 const kActionRename = 3 const kErrorSuccess = 0 const kErrorFailure = 1 ' ' Constants for the parameter dictionary ' const kServerName = 1 const kPrinterName = 2 const kNewPrinterName = 3 const kShareName = 4 const kPortName = 5 const kDriverName = 6 const kComment = 7 const kLocation = 8 const kSepFile = 9 const kPrintProc = 10 const kDataType = 11 const kParameters = 12 const kPriority = 13 const kDefaultPriority = 14 const kStartTime = 15 const kUntilTime = 16 const kQueued = 17 const kDirect = 18 const kDefault = 19 const kShared = 20 const kNetwork = 21 const kHidden = 23 const kLocal = 24 const kEnableDevq = 25 const kKeepPrintedJobs = 26 const kDoCompleteFirst = 27 const kWorkOffline = 28 const kEnableBidi = 29 const kRawOnly = 30 const kPublished = 31 const kUserName = 32 const kPassword = 33 const kNameSpace = "root\cimv2" ' ' Generic strings ' const L_Empty_Text = "" const L_Space_Text = " " const L_Error_Text = "Error" const L_Success_Text = "Correcto" const L_Failed_Text = "Error" const L_Hex_Text = "0x" const L_Printer_Text = "Impresora" const L_Operation_Text = "Operación" const L_Provider_Text = "Proveedor" const L_Description_Text = "Descripción" const L_Debug_Text = "Depurar:" ' ' General usage messages ' const L_Help_Help_General01_Text = "Uso: prncnfg [-gtx?] [-s servidor][-p impresora][-z nombre nuevo de impresora]" const L_Help_Help_General02_Text = " [-u usuario][-w contraseña][-r nombre de puerto][-l ubicación]" const L_Help_Help_General03_Text = " [-m comentario][-h nombre de recurso][-f archivo][-y tipo de dato]" const L_Help_Help_General04_Text = " [-st hora_inicio][-ut hora_final][-i prioridad predet,]" const L_Help_Help_General05_Text = " [-o priority][<+|->shared][<+|->direct][<+|->hidden]" const L_Help_Help_General06_Text = " [<+|->published][<+|->rawonly][<+|->queued][<+|->enablebidi]" const L_Help_Help_General07_Text = " [<+|->keepprintedjobs][<+|->workoffline][<+|->enabledevq]" const L_Help_Help_General08_Text = " [<+|->docompletefirst]" const L_Help_Help_General09_Text = "Argumentos:" const L_Help_Help_General10_Text = "-f - nombre del archivo separador" const L_Help_Help_General11_Text = "-g - obtener configuración" const L_Help_Help_General12_Text = "-h - compartir nombre" const L_Help_Help_General13_Text = "-i - prioridad predeterminada" const L_Help_Help_General14_Text = "-l - cadena de ubicación" const L_Help_Help_General15_Text = "-m - cadena de comentario" const L_Help_Help_General16_Text = "-o - prioridad" const L_Help_Help_General17_Text = "-p - nombre de la impresora" const L_Help_Help_General18_Text = "-r - nombre del puerto" const L_Help_Help_General19_Text = "-s - nombre del sevidor" const L_Help_Help_General20_Text = "-st - tiempo de inicio" const L_Help_Help_General21_Text = "-t - establecer configuración" const L_Help_Help_General22_Text = "-u - nombre de usuario" const L_Help_Help_General23_Text = "-ut - tiempo final" const L_Help_Help_General24_Text = "-w - contraseña" const L_Help_Help_General25_Text = "-x - cambiar nombre de impresora" const L_Help_Help_General26_Text = "-y - cadena de tipo de datos" const L_Help_Help_General27_Text = "-z - nombre nuevo de impresora" const L_Help_Help_General28_Text = "-? - muestra el uso del comando" const L_Help_Help_General29_Text = "Ejemplos:" const L_Help_Help_General30_Text = "prncnfg -g -s servidor -p impresora" const L_Help_Help_General31_Text = "prncnfg -x -s servidor -p impresora -z ""impresora nueva""" const L_Help_Help_General32_Text = "prncnfg -t -p printer -l ""Edificio A/piso 100/Oficina 1"" -m ""Impresora a color""" const L_Help_Help_General33_Text = "prncnfg -t -p impresora -h ""recurso"" +shared -direct" const L_Help_Help_General34_Text = "prncnfg -t -p impresora +rawonly +keepprintedjobs" const L_Help_Help_General35_Text = "prncnfg -t -p impresora -st 2300 -ut 0215 -o 1 -i 5" ' ' Messages to be displayed if the scripting host is not cscript ' const L_Help_Help_Host01_Text = "Este script se debe ejecutar desde el símbolo del sistema por medio del comando CScript.exe." const L_Help_Help_Host02_Text = "Por ejemplo: CScript script.vbs argumentos" const L_Help_Help_Host03_Text = "" const L_Help_Help_Host04_Text = "Para establecer a CScript como la aplicación predeterminada para ejecutar archivos .VBS, ejecute lo siguiente:" const L_Help_Help_Host05_Text = " CScript //H:CScript //S" const L_Help_Help_Host06_Text = "Podrá entonces ejecutar ""script.vbs argumentos"" sin necesidad de agregar CScript antes del script." ' ' General error messages ' const L_Text_Error_General01_Text = "No se pudo determinar el host de scripting." const L_Text_Error_General02_Text = "No se puede analizar la línea de comandos." const L_Text_Error_General03_Text = "Código de error de Win32" ' ' Miscellaneous messages ' const L_Text_Msg_General01_Text = "Impresora que se cambió de nombre" const L_Text_Msg_General02_Text = "Modelo de impresora nuevo" const L_Text_Msg_General03_Text = "No se puede cambiar de nombre a la impresora" const L_Text_Msg_General04_Text = "No se puede obtener la configuración de la impresora" const L_Text_Msg_General05_Text = "Impresora siempre disponible" const L_Text_Msg_General06_Text = "Impresora configurada" const L_Text_Msg_General07_Text = "No se puede configurar la impresora" const L_Text_Msg_General08_Text = "No se puede obtener el objeto SWbemLocator" const L_Text_Msg_General09_Text = "No se puede conectar con el servicio WMI" const L_Text_Msg_General10_Text = "Estado de la impresora" const L_Text_Msg_General11_Text = "Estado de impresora extendido" const L_Text_Msg_General12_Text = "Estado de error detectado" const L_Text_Msg_General13_Text = "Estado de error detectado extendido" ' ' Printer properties ' const L_Text_Msg_Printer01_Text = "Nombre de servidor" const L_Text_Msg_Printer02_Text = "Nombre de impresora" const L_Text_Msg_Printer03_Text = "Nombre del recurso compartido" const L_Text_Msg_Printer04_Text = "Nombre de controlador" const L_Text_Msg_Printer05_Text = "Nombre del puerto" const L_Text_Msg_Printer06_Text = "Comentario" const L_Text_Msg_Printer07_Text = "Ubicación" const L_Text_Msg_Printer08_Text = "Archivo separador" const L_Text_Msg_Printer09_Text = "Procesador de impresión" const L_Text_Msg_Printer10_Text = "Tipo de datos" const L_Text_Msg_Printer11_Text = "Parámetros" const L_Text_Msg_Printer12_Text = "Atributos" const L_Text_Msg_Printer13_Text = "Prioridad" const L_Text_Msg_Printer14_Text = "Prioridad predeterminada" const L_Text_Msg_Printer15_Text = "Hora de inicio" const L_Text_Msg_Printer16_Text = "Tiempo final" const L_Text_Msg_Printer17_Text = "Estado" const L_Text_Msg_Printer18_Text = "Cuenta de trabajos" const L_Text_Msg_Printer19_Text = "Número medio de páginas por minuto" ' ' Printer attributes ' const L_Text_Msg_Attrib01_Text = "direct" const L_Text_Msg_Attrib02_Text = "raw_only" const L_Text_Msg_Attrib03_Text = "local" const L_Text_Msg_Attrib04_Text = "shared" const L_Text_Msg_Attrib05_Text = "keep_printed_jobs" const L_Text_Msg_Attrib06_Text = "published" const L_Text_Msg_Attrib07_Text = "queued" const L_Text_Msg_Attrib08_Text = "default" const L_Text_Msg_Attrib09_Text = "network" const L_Text_Msg_Attrib10_Text = "enable_bidi" const L_Text_Msg_Attrib11_Text = "do_complete_first" const L_Text_Msg_Attrib12_Text = "work_offline" const L_Text_Msg_Attrib13_Text = "hidden" const L_Text_Msg_Attrib14_Text = "enable_devq_print" ' ' Printer status ' const L_Text_Msg_Status01_Text = "Otros" const L_Text_Msg_Status02_Text = "Desconocido" const L_Text_Msg_Status03_Text = "Inactivo" const L_Text_Msg_Status04_Text = "Imprimiendo" const L_Text_Msg_Status05_Text = "Calentamiento" const L_Text_Msg_Status06_Text = "Impresión detenida" const L_Text_Msg_Status07_Text = "Sin conexión" const L_Text_Msg_Status08_Text = "Pausado" const L_Text_Msg_Status09_Text = "Error" const L_Text_Msg_Status10_Text = "Ocupado" const L_Text_Msg_Status11_Text = "No disponible" const L_Text_Msg_Status12_Text = "En espera" const L_Text_Msg_Status13_Text = "Procesando" const L_Text_Msg_Status14_Text = "Inicializando" const L_Text_Msg_Status15_Text = "Ahorro de energía" const L_Text_Msg_Status16_Text = "Eliminación pendiente" const L_Text_Msg_Status17_Text = "E/S activa" const L_Text_Msg_Status18_Text = "Alimentación manual" const L_Text_Msg_Status19_Text = "Sin errores" const L_Text_Msg_Status20_Text = "Falta papel" const L_Text_Msg_Status21_Text = "No hay papel" const L_Text_Msg_Status22_Text = "Falta tóner" const L_Text_Msg_Status23_Text = "Sin tóner" const L_Text_Msg_Status24_Text = "Puerta abierta" const L_Text_Msg_Status25_Text = "Atascado" const L_Text_Msg_Status26_Text = "Servicio solicitado" const L_Text_Msg_Status27_Text = "Bandeja de salida llena" const L_Text_Msg_Status28_Text = "Problema con el papel" const L_Text_Msg_Status29_Text = "No se puede imprimir la página" const L_Text_Msg_Status30_Text = "Intervención del usuario requerida" const L_Text_Msg_Status31_Text = "Memoria insuficiente" const L_Text_Msg_Status32_Text = "Servidor desconocido" ' ' Debug messages ' const L_Text_Dbg_Msg01_Text = "En la función RenamePrinter" const L_Text_Dbg_Msg02_Text = "Modelo de impresora nuevo" const L_Text_Dbg_Msg03_Text = "En la función GetPrinter" const L_Text_Dbg_Msg04_Text = "En la función SetPrinter" const L_Text_Dbg_Msg05_Text = "En la función ParseCommandLine" main ' ' Main execution starts here ' sub main dim iAction dim iRetval dim oParamDict ' ' 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 set oParamDict = CreateObject("Scripting.Dictionary") iRetval = ParseCommandLine(iAction, oParamDict) if iRetval = kErrorSuccess then select case iAction case kActionSet iRetval = SetPrinter(oParamDict) case kActionGet iRetval = GetPrinter(oParamDict) case kActionRename iRetval = RenamePrinter(oParamDict) case else Usage(True) exit sub end select end if end sub ' ' Rename printer ' function RenamePrinter(oParamDict) on error resume next DebugPrint kDebugTrace, L_Text_Dbg_Msg01_Text DebugPrint kDebugTrace, L_Text_Msg_Printer01_Text & L_Space_Text & oParamDict.Item(kServerName) DebugPrint kDebugTrace, L_Text_Msg_Printer02_Text & L_Space_Text & oParamDict.Item(kPrinterName) DebugPrint kDebugTrace, L_Text_Dbg_Msg02_Text & L_Space_Text & oParamDict.Item(kNewPrinterName) dim oPrinter dim oService dim iRetval dim uResult dim strServer dim strPrinter dim strNewName dim strUser dim strPassword iRetval = kErrorFailure strServer = oParamDict.Item(kServerName) strPrinter = oParamDict.Item(kPrinterName) strNewName = oParamDict.Item(kNewPrinterName) strUser = oParamDict.Item(kUserName) strPassword = oParamDict.Item(kPassword) if WmiConnect(strServer, kNameSpace, strUser, strPassword, oService) then set oPrinter = oService.Get("Win32_Printer.DeviceID='" & strPrinter & "'") else RenamePrinter = kErrorFailure exit function end if ' ' Check if Get was successful ' if Err.Number = kErrorSuccess then uResult = oPrinter.RenamePrinter(strNewName) if Err.Number = kErrorSuccess then if uResult = kErrorSuccess then wscript.echo L_Text_Msg_General01_Text & L_Space_Text & strPrinter wscript.echo L_Text_Msg_General02_Text & L_Space_Text & strNewName iRetval = kErrorSuccess else wscript.echo L_Text_Msg_General03_Text & L_Space_Text & strPrinter & L_Space_Text _ & L_Text_Error_General03_Text & L_Space_Text & uResult end if else wscript.echo L_Text_Msg_General04_Text & L_Space_Text & strPrinter & 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_Msg_General04_Text & L_Space_Text & strPrinter & 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 RenamePrinter = iRetval end function ' ' Get printer configuration ' function GetPrinter(oParamDict) on error resume next DebugPrint kDebugTrace, L_Text_Dbg_Msg03_Text DebugPrint kDebugTrace, L_Text_Msg_Printer01_Text & L_Space_Text & oParamDict.Item(kServerName) DebugPrint kDebugTrace, L_Text_Msg_Printer02_Text & L_Space_Text & oParamDict.Item(kPrinterName) dim oPrinter dim oService dim iRetval dim uResult dim strServer dim strPrinter dim strAttributes dim strStart dim strEnd dim strUser dim strPassword iRetval = kErrorFailure strServer = oParamDict.Item(kServerName) strPrinter = oParamDict.Item(kPrinterName) strUser = oParamDict.Item(kUserName) strPassword = oParamDict.Item(kPassword) if WmiConnect(strServer, kNameSpace, strUser, strPassword, oService) then set oPrinter = oService.Get("Win32_Printer='" & strPrinter & "'") else GetPrinter = kErrorFailure exit function end if ' ' Check if Get was successful ' if Err.Number = kErrorSuccess then wscript.echo L_Text_Msg_Printer01_Text & L_Space_Text & strServer wscript.echo L_Text_Msg_Printer02_Text & L_Space_Text & oPrinter.DeviceID wscript.echo L_Text_Msg_Printer03_Text & L_Space_Text & oPrinter.ShareName wscript.echo L_Text_Msg_Printer04_Text & L_Space_Text & oPrinter.DriverName wscript.echo L_Text_Msg_Printer05_Text & L_Space_Text & oPrinter.PortName wscript.echo L_Text_Msg_Printer06_Text & L_Space_Text & oPrinter.Comment wscript.echo L_Text_Msg_Printer07_Text & L_Space_Text & oPrinter.Location wscript.echo L_Text_Msg_Printer08_Text & L_Space_Text & oPrinter.SeparatorFile wscript.echo L_Text_Msg_Printer09_Text & L_Space_Text & oPrinter.PrintProcessor wscript.echo L_Text_Msg_Printer10_Text & L_Space_Text & oPrinter.PrintJobDatatype wscript.echo L_Text_Msg_Printer11_Text & L_Space_Text & oPrinter.Parameters wscript.echo L_Text_Msg_Printer13_Text & L_Space_Text & CStr(oPrinter.Priority) wscript.echo L_Text_Msg_Printer14_Text & L_Space_Text & CStr(oPrinter.DefaultPriority) strStart = Mid(CStr(oPrinter.StartTime), 9, 4) strEnd = Mid(CStr(oPrinter.UntilTime), 9, 4) if strStart <> "" and strEnd <> "" then wscript.echo L_Text_Msg_Printer15_Text & L_Space_Text & Mid(strStart, 1, 2) & "h" & Mid(strStart, 3, 2) wscript.echo L_Text_Msg_Printer16_Text & L_Space_Text & Mid(strEnd, 1, 2) & "h" & Mid(strEnd, 3, 2) else wscript.echo L_Text_Msg_General05_Text end if strAttributes = L_Text_Msg_Printer12_Text if oPrinter.Direct then strAttributes = strAttributes + L_Space_Text + L_Text_Msg_Attrib01_Text end if if oPrinter.RawOnly then strAttributes = strAttributes + L_Space_Text + L_Text_Msg_Attrib02_Text end if if oPrinter.Local then strAttributes = strAttributes + L_Space_Text + L_Text_Msg_Attrib03_Text end if if oPrinter.Shared then strAttributes = strAttributes + L_Space_Text + L_Text_Msg_Attrib04_Text end if if oPrinter.KeepPrintedJobs then strAttributes = strAttributes + L_Space_Text + L_Text_Msg_Attrib05_Text end if if oPrinter.Published then strAttributes = strAttributes + L_Space_Text + L_Text_Msg_Attrib06_Text end if if oPrinter.Queued then strAttributes = strAttributes + L_Space_Text + L_Text_Msg_Attrib07_Text end if if oPrinter.Default then strAttributes = strAttributes + L_Space_Text + L_Text_Msg_Attrib08_Text end if if oPrinter.Network then strAttributes = strAttributes + L_Space_Text + L_Text_Msg_Attrib09_Text end if if oPrinter.EnableBiDi then strAttributes = strAttributes + L_Space_Text + L_Text_Msg_Attrib10_Text end if if oPrinter.DoCompleteFirst then strAttributes = strAttributes + L_Space_Text + L_Text_Msg_Attrib11_Text end if if oPrinter.WorkOffline then strAttributes = strAttributes + L_Space_Text + L_Text_Msg_Attrib12_Text end if if oPrinter.Hidden then strAttributes = strAttributes + L_Space_Text + L_Text_Msg_Attrib13_Text end if if oPrinter.EnableDevQueryPrint then strAttributes = strAttributes + L_Space_Text + L_Text_Msg_Attrib14_Text end if wscript.echo strAttributes wscript.echo wscript.echo L_Text_Msg_General10_Text & L_Space_Text & PrnStatusToString(oPrinter.PrinterStatus) wscript.echo L_Text_Msg_General11_Text & L_Space_Text & ExtPrnStatusToString(oPrinter.ExtendedPrinterStatus) wscript.echo L_Text_Msg_General12_Text & L_Space_Text & DetectedErrorStateToString(oPrinter.DetectedErrorState) wscript.echo L_Text_Msg_General13_Text & L_Space_Text & ExtDetectedErrorStateToString(oPrinter.ExtendedDetectedErrorState) iRetval = kErrorSuccess else wscript.echo L_Text_Msg_General04_Text & L_Space_Text & oParamDict.Item(kPrinterName) & 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 GetPrinter = iRetval end function ' ' Configure a printer ' function SetPrinter(oParamDict) on error resume next DebugPrint kDebugTrace, L_Text_Dbg_Msg04_Text DebugPrint kDebugTrace, L_Text_Msg_Printer01_Text & L_Space_Text & oParamDict.Item(kServerName) DebugPrint kDebugTrace, L_Text_Msg_Printer02_Text & L_Space_Text & oParamDict.Item(kPrinterName) dim oPrinter dim oService dim iRetval dim uResult dim strServer dim strPrinter dim strUser dim strPassword iRetval = kErrorFailure strServer = oParamDict.Item(kServerName) strPrinter = oParamDict.Item(kPrinterName) strNewName = oParamDict.Item(kNewPrinterName) strUser = oParamDict.Item(kUserName) strPassword = oParamDict.Item(kPassword) if WmiConnect(strServer, kNameSpace, strUser, strPassword, oService) then set oPrinter = oService.Get("Win32_Printer='" & strPrinter & "'") else SetPrinter = kErrorFailure exit function end if ' ' Check if Get was successful ' if Err.Number = kErrorSuccess then if oParamdict.Exists(kPortName) then oPrinter.PortName = oParamDict.Item(kPortName) end if if oParamdict.Exists(kDriverName) then oPrinter.DriverName = oParamDict.Item(kDriverName) end if if oParamdict.Exists(kShareName) then oPrinter.ShareName = oParamDict.Item(kShareName) end if if oParamdict.Exists(kLocation) then oPrinter.Location = oParamDict.Item(kLocation) end if if oParamdict.Exists(kComment) then oPrinter.Comment = oParamDict.Item(kComment) end if if oParamdict.Exists(kDataType) then oPrinter.PrintJobDataType = oParamDict.Item(kDataType) end if if oParamdict.Exists(kSepFile) then oPrinter.SeparatorFile = oParamDict.Item(kSepfile) end if if oParamdict.Exists(kParameters) then oPrinter.Parameters = oParamDict.Item(kParameters) end if if oParamdict.Exists(kPriority) then oPrinter.Priority = oParamDict.Item(kPriority) end if if oParamdict.Exists(kDefaultPriority) then oPrinter.DefaultPriority = oParamDict.Item(kDefaultPriority) end if if oParamdict.Exists(kPrintProc) then oPrinter.PrintProc = oParamDict.Item(kPrintProc) end if if oParamdict.Exists(kStartTime) then oPrinter.StartTime = oParamDict.Item(kStartTime) end if if oParamdict.Exists(kUntilTime) then oPrinter.UntilTime = oParamDict.Item(kUntilTime) end if if oParamdict.Exists(kQueued) then oPrinter.Queued = oParamDict.Item(kQueued) end if if oParamdict.Exists(kDirect) then oPrinter.Direct = oParamDict.Item(kDirect) end if if oParamdict.Exists(kShared) then oPrinter.Shared = oParamDict.Item(kShared) end if if oParamdict.Exists(kHidden) then oPrinter.Hidden = oParamDict.Item(kHidden) end if if oParamdict.Exists(kEnabledevq) then oPrinter.EnableDevQueryPrint = oParamDict.Item(kEnabledevq) end if if oParamdict.Exists(kKeepPrintedJobs) then oPrinter.KeepPrintedJobs = oParamDict.Item(kKeepPrintedJobs) end if if oParamdict.Exists(kDoCompleteFirst) then oPrinter.DoCompleteFirst = oParamDict.Item(kDoCompleteFirst) end if if oParamdict.Exists(kWorkOffline) then oPrinter.WorkOffline = oParamDict.Item(kWorkOffline) end if if oParamdict.Exists(kEnableBidi) then oPrinter.EnableBidi = oParamDict.Item(kEnableBidi) end if if oParamdict.Exists(kRawonly) then oPrinter.RawOnly = oParamDict.Item(kRawonly) end if if oParamdict.Exists(kPublished) then oPrinter.Published = oParamDict.Item(kPublished) end if oPrinter.Put_(kFlagUpdateOnly) if Err.Number = kErrorSuccess then wscript.echo L_Text_Msg_General06_Text & L_Space_Text & strPrinter iRetval = kErrorSuccess else wscript.echo L_Text_Msg_General07_Text & L_Space_Text & strPrinter & 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 else wscript.echo L_Text_Msg_General04_Text & L_Space_Text & strPrinter & 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 SetPrinter = iRetval end function ' ' Converts the printer status to a string ' function PrnStatusToString(Status) dim str str = L_Empty_Text select case Status case 1 str = str + L_Text_Msg_Status01_Text + L_Space_Text case 2 str = str + L_Text_Msg_Status02_Text + L_Space_Text case 3 str = str + L_Text_Msg_Status03_Text + L_Space_Text case 4 str = str + L_Text_Msg_Status04_Text + L_Space_Text case 5 str = str + L_Text_Msg_Status05_Text + L_Space_Text case 6 str = str + L_Text_Msg_Status06_Text + L_Space_Text case 7 str = str + L_Text_Msg_Status07_Text + L_Space_Text end select PrnStatusToString = str end function ' ' Converts the extended printer status to a string ' function ExtPrnStatusToString(Status) dim str str = L_Empty_Text select case Status case 1 str = str + L_Text_Msg_Status01_Text + L_Space_Text case 2 str = str + L_Text_Msg_Status02_Text + L_Space_Text case 3 str = str + L_Text_Msg_Status03_Text + L_Space_Text case 4 str = str + L_Text_Msg_Status04_Text + L_Space_Text case 5 str = str + L_Text_Msg_Status05_Text + L_Space_Text case 6 str = str + L_Text_Msg_Status06_Text + L_Space_Text case 7 str = str + L_Text_Msg_Status07_Text + L_Space_Text case 8 str = str + L_Text_Msg_Status08_Text + L_Space_Text case 9 str = str + L_Text_Msg_Status09_Text + L_Space_Text case 10 str = str + L_Text_Msg_Status10_Text + L_Space_Text case 11 str = str + L_Text_Msg_Status11_Text + L_Space_Text case 12 str = str + L_Text_Msg_Status12_Text + L_Space_Text case 13 str = str + L_Text_Msg_Status13_Text + L_Space_Text case 14 str = str + L_Text_Msg_Status14_Text + L_Space_Text case 15 str = str + L_Text_Msg_Status15_Text + L_Space_Text case 16 str = str + L_Text_Msg_Status16_Text + L_Space_Text case 17 str = str + L_Text_Msg_Status17_Text + L_Space_Text case 18 str = str + L_Text_Msg_Status18_Text + L_Space_Text end select ExtPrnStatusToString = str end function ' ' Converts the detected error state to a string ' function DetectedErrorStateToString(Status) dim str str = L_Empty_Text select case Status case 0 str = str + L_Text_Msg_Status02_Text + L_Space_Text case 1 str = str + L_Text_Msg_Status01_Text + L_Space_Text case 2 str = str + L_Text_Msg_Status01_Text + L_Space_Text case 3 str = str + L_Text_Msg_Status20_Text + L_Space_Text case 4 str = str + L_Text_Msg_Status21_Text + L_Space_Text case 5 str = str + L_Text_Msg_Status22_Text + L_Space_Text case 6 str = str + L_Text_Msg_Status23_Text + L_Space_Text case 7 str = str + L_Text_Msg_Status24_Text + L_Space_Text case 8 str = str + L_Text_Msg_Status25_Text + L_Space_Text case 9 str = str + L_Text_Msg_Status07_Text + L_Space_Text case 10 str = str + L_Text_Msg_Status26_Text + L_Space_Text case 11 str = str + L_Text_Msg_Status27_Text + L_Space_Text end select DetectedErrorStateToString = str end function ' ' Converts the extended detected error state to a string ' function ExtDetectedErrorStateToString(Status) dim str str = L_Empty_Text select case Status case 0 str = str + L_Text_Msg_Status02_Text + L_Space_Text case 1 str = str + L_Text_Msg_Status01_Text + L_Space_Text case 2 str = str + L_Text_Msg_Status01_Text + L_Space_Text case 3 str = str + L_Text_Msg_Status20_Text + L_Space_Text case 4 str = str + L_Text_Msg_Status21_Text + L_Space_Text case 5 str = str + L_Text_Msg_Status22_Text + L_Space_Text case 6 str = str + L_Text_Msg_Status23_Text + L_Space_Text case 7 str = str + L_Text_Msg_Status24_Text + L_Space_Text case 8 str = str + L_Text_Msg_Status25_Text + L_Space_Text case 9 str = str + L_Text_Msg_Status07_Text + L_Space_Text case 10 str = str + L_Text_Msg_Status26_Text + L_Space_Text case 11 str = str + L_Text_Msg_Status27_Text + L_Space_Text case 12 str = str + L_Text_Msg_Status28_Text + L_Space_Text case 13 str = str + L_Text_Msg_Status29_Text + L_Space_Text case 14 str = str + L_Text_Msg_Status30_Text + L_Space_Text case 15 str = str + L_Text_Msg_Status31_Text + L_Space_Text case 16 str = str + L_Text_Msg_Status32_Text + L_Space_Text end select ExtDetectedErrorStateToString = str 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, oParamdict) on error resume next DebugPrint kDebugTrace, L_Text_Dbg_Msg05_Text dim oArgs dim iIndex iAction = kActionUnknown iIndex = 0 set oArgs = wscript.Arguments while iIndex < oArgs.Count select case oArgs(iIndex) case "-g" iAction = kActionGet case "-t" iAction = kActionSet case "-x" iAction = kActionRename case "-p" iIndex = iIndex + 1 oParamdict.Add kPrinterName, oArgs(iIndex) case "-s" iIndex = iIndex + 1 oParamdict.Add kServerName, RemoveBackslashes(oArgs(iIndex)) case "-r" iIndex = iIndex + 1 oParamdict.Add kPortName, oArgs(iIndex) case "-h" iIndex = iIndex + 1 oParamdict.Add kShareName, oArgs(iIndex) case "-m" iIndex = iIndex + 1 oParamdict.Add kComment, oArgs(iIndex) case "-l" iIndex = iIndex + 1 oParamdict.Add kLocation, oArgs(iIndex) case "-y" iIndex = iIndex + 1 oParamdict.Add kDataType, oArgs(iIndex) case "-f" iIndex = iIndex + 1 oParamdict.Add kSepFile, oArgs(iIndex) case "-z" iIndex = iIndex + 1 oParamdict.Add kNewPrinterName, oArgs(iIndex) case "-u" iIndex = iIndex + 1 oParamdict.Add kUserName, oArgs(iIndex) case "-w" iIndex = iIndex + 1 oParamdict.Add kPassword, oArgs(iIndex) case "-st" iIndex = iIndex + 1 oParamdict.Add kStartTime, "********" & oArgs(iIndex) & "00.000000+000" case "-o" iIndex = iIndex + 1 oParamdict.Add kPriority, oArgs(iIndex) case "-i" iIndex = iIndex + 1 oParamdict.Add kDefaultPriority, oArgs(iIndex) case "-ut" iIndex = iIndex + 1 oParamdict.Add kUntilTime, "********" & oArgs(iIndex) & "00.000000+000" case "-queued" oParamdict.Add kQueued, false case "+queued" oParamdict.Add kQueued, true case "-direct" oParamdict.Add kDirect, false case "+direct" oParamdict.Add kDirect, true case "-shared" oParamdict.Add kShared, false case "+shared" oParamdict.Add kShared, true case "-hidden" oParamdict.Add kHidden, false case "+hidden" oParamdict.Add kHidden, true case "-enabledevq" oParamdict.Add kEnabledevq, false case "+enabledevq" oParamdict.Add kEnabledevq, true case "-keepprintedjobs" oParamdict.Add kKeepprintedjobs, false case "+keepprintedjobs" oParamdict.Add kKeepprintedjobs, true case "-docompletefirst" oParamdict.Add kDocompletefirst, false case "+docompletefirst" oParamdict.Add kDocompletefirst, true case "-workoffline" oParamdict.Add kWorkoffline, false case "+workoffline" oParamdict.Add kWorkoffline, true case "-enablebidi" oParamdict.Add kEnablebidi, false case "+enablebidi" oParamdict.Add kEnablebidi, true case "-rawonly" oParamdict.Add kRawonly, false case "+rawonly" oParamdict.Add kRawonly, true case "-published" oParamdict.Add kPublished, false case "+published" oParamdict.Add kPublished, true case "-?" Usage(true) exit function case else Usage(true) exit function end select iIndex = iIndex + 1 wend if Err = 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_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_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 wscript.echo L_Help_Help_General16_Text wscript.echo L_Help_Help_General17_Text wscript.echo L_Help_Help_General18_Text wscript.echo L_Help_Help_General19_Text wscript.echo L_Help_Help_General20_Text wscript.echo L_Help_Help_General21_Text wscript.echo L_Help_Help_General22_Text wscript.echo L_Help_Help_General23_Text wscript.echo L_Help_Help_General24_Text wscript.echo L_Help_Help_General25_Text wscript.echo L_Help_Help_General26_Text wscript.echo L_Help_Help_General27_Text wscript.echo L_Empty_Text wscript.echo L_Help_Help_General28_Text wscript.echo L_Help_Help_General29_Text wscript.echo L_Help_Help_General30_Text wscript.echo L_Help_Help_General31_Text wscript.echo L_Help_Help_General32_Text wscript.echo L_Help_Help_General33_Text wscript.echo L_Help_Help_General34_Text wscript.echo L_Help_Help_General35_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_General03_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 ' ' Required to perform administrative tasks on the spooler service ' oService.Security_.Privileges.AddAsString "SeLoadDriverPrivilege" Err.Clear else wscript.echo L_Text_Msg_General08_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_Msg_General09_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 '' MIIZMAYJKoZIhvcNAQcCoIIZITCCGR0CAQExDjAMBggq '' SIG '' hkiG9w0CBQUAMGYGCisGAQQBgjcCAQSgWDBWMDIGCisG '' SIG '' AQQBgjcCAR4wJAIBAQQQTvApFpkntU2P5azhDxfrqwIB '' SIG '' AAIBAAIBAAIBAAIBADAgMAwGCCqGSIb3DQIFBQAEEOLm '' SIG '' 4j+9BLdGEED7+fyvFSygghQ4MIICvDCCAiUCEEoZ0jiM '' SIG '' glkcpV1zXxVd3KMwDQYJKoZIhvcNAQEEBQAwgZ4xHzAd '' SIG '' BgNVBAoTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxFzAV '' SIG '' BgNVBAsTDlZlcmlTaWduLCBJbmMuMSwwKgYDVQQLEyNW '' SIG '' ZXJpU2lnbiBUaW1lIFN0YW1waW5nIFNlcnZpY2UgUm9v '' SIG '' dDE0MDIGA1UECxMrTk8gTElBQklMSVRZIEFDQ0VQVEVE '' SIG '' LCAoYyk5NyBWZXJpU2lnbiwgSW5jLjAeFw05NzA1MTIw '' SIG '' MDAwMDBaFw0wNDAxMDcyMzU5NTlaMIGeMR8wHQYDVQQK '' SIG '' ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMRcwFQYDVQQL '' SIG '' Ew5WZXJpU2lnbiwgSW5jLjEsMCoGA1UECxMjVmVyaVNp '' SIG '' Z24gVGltZSBTdGFtcGluZyBTZXJ2aWNlIFJvb3QxNDAy '' SIG '' BgNVBAsTK05PIExJQUJJTElUWSBBQ0NFUFRFRCwgKGMp '' SIG '' OTcgVmVyaVNpZ24sIEluYy4wgZ8wDQYJKoZIhvcNAQEB '' SIG '' BQADgY0AMIGJAoGBANMuIPBofCwtLoEcsQaypwu3EQ1X '' SIG '' 2lPYdePJMyqy1PYJWzTz6ZD+CQzQ2xtauc3n9oixncCH '' SIG '' Jet9WBBzanjLcRX9xlj2KatYXpYE/S1iEViBHMpxlNUi '' SIG '' WC/VzBQFhDa6lKq0TUrp7jsirVaZfiGcbIbASkeXarSm '' SIG '' NtX8CS3TtDmbAgMBAAEwDQYJKoZIhvcNAQEEBQADgYEA '' SIG '' YVUOPnvHkhJ+ERCOIszUsxMrW+hE5At4nqR+86cHch7i '' SIG '' We/MhOOJlEzbTmHvs6T7Rj1QNAufcFb2jip/F87lY795 '' SIG '' aQdzLrCVKIr17aqp0l3NCsoQCY/Os68olsR5KYSS3P+6 '' SIG '' Z0JIppAQ5L9h+JxT5ZPRcz/4/Z1PhKxV0f0RY2MwggQC '' SIG '' MIIDa6ADAgECAhAIem1cb2KTT7rE/UPhFBidMA0GCSqG '' SIG '' SIb3DQEBBAUAMIGeMR8wHQYDVQQKExZWZXJpU2lnbiBU '' SIG '' cnVzdCBOZXR3b3JrMRcwFQYDVQQLEw5WZXJpU2lnbiwg '' SIG '' SW5jLjEsMCoGA1UECxMjVmVyaVNpZ24gVGltZSBTdGFt '' SIG '' cGluZyBTZXJ2aWNlIFJvb3QxNDAyBgNVBAsTK05PIExJ '' SIG '' QUJJTElUWSBBQ0NFUFRFRCwgKGMpOTcgVmVyaVNpZ24s '' SIG '' IEluYy4wHhcNMDEwMjI4MDAwMDAwWhcNMDQwMTA2MjM1 '' SIG '' OTU5WjCBoDEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4x '' SIG '' HzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsx '' SIG '' OzA5BgNVBAsTMlRlcm1zIG9mIHVzZSBhdCBodHRwczov '' SIG '' L3d3dy52ZXJpc2lnbi5jb20vcnBhIChjKTAxMScwJQYD '' SIG '' VQQDEx5WZXJpU2lnbiBUaW1lIFN0YW1waW5nIFNlcnZp '' SIG '' Y2UwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB '' SIG '' AQDAemGH67KnA2MbKxph3oC3FR2gi5A9uyeShBQ564XO '' SIG '' KZIGZkikA0+N6E+n8K9e0S8Zx5HxtZ57kSHO6f/jTvD8 '' SIG '' r5VYuGMt5o72KRjNcI5Qw+2Wu0DbviXoQlXW9oXyBueL '' SIG '' mRwx8wMP1EycJCrcGxuPgvOw76dN4xSn4I/Wx2jCYVip '' SIG '' ctT4MEhP2S9vYyDZicqCe8JLvCjFgWjn5oJArEY6oPk/ '' SIG '' Ns1Mu1RCWnple/6E5MdHVKy5PeyAxxr3xDOBgckqlft/ '' SIG '' XjqHkBTbzC518u9r5j2pYL5CAapPqluoPyIxnxIV+XOh '' SIG '' HoKLBCvqRgJMbY8fUC6VSyp4BoR0PZGPLEcxAgMBAAGj '' SIG '' gbgwgbUwQAYIKwYBBQUHAQEENDAyMDAGCCsGAQUFBzAB '' SIG '' hiRodHRwOi8vb2NzcC52ZXJpc2lnbi5jb20vb2NzcC9z '' SIG '' dGF0dXMwCQYDVR0TBAIwADBEBgNVHSAEPTA7MDkGC2CG '' SIG '' SAGG+EUBBwEBMCowKAYIKwYBBQUHAgEWHGh0dHBzOi8v '' SIG '' d3d3LnZlcmlzaWduLmNvbS9ycGEwEwYDVR0lBAwwCgYI '' SIG '' KwYBBQUHAwgwCwYDVR0PBAQDAgbAMA0GCSqGSIb3DQEB '' SIG '' BAUAA4GBAC3zT2NgLBja9SQPUrMM67O8Z4XCI+2PRg3P '' SIG '' Gk2+83x6IDAyGGiLkrsymfCTuDsVBid7PgIGAKQhkoQT '' SIG '' CsWY5UBXxQUl6K+vEWqp5TvL6SP2lCldQFXzpVOdyDY6 '' SIG '' OWUIc3OkMtKvrL/HBTz/RezD6Nok0c5jrgmn++Ib4/1B '' SIG '' CmqWMIIEEjCCAvqgAwIBAgIPAMEAizw8iBHRPvZj7N9A '' SIG '' MA0GCSqGSIb3DQEBBAUAMHAxKzApBgNVBAsTIkNvcHly '' SIG '' aWdodCAoYykgMTk5NyBNaWNyb3NvZnQgQ29ycC4xHjAc '' SIG '' BgNVBAsTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEhMB8G '' SIG '' A1UEAxMYTWljcm9zb2Z0IFJvb3QgQXV0aG9yaXR5MB4X '' SIG '' DTk3MDExMDA3MDAwMFoXDTIwMTIzMTA3MDAwMFowcDEr '' SIG '' MCkGA1UECxMiQ29weXJpZ2h0IChjKSAxOTk3IE1pY3Jv '' SIG '' c29mdCBDb3JwLjEeMBwGA1UECxMVTWljcm9zb2Z0IENv '' SIG '' cnBvcmF0aW9uMSEwHwYDVQQDExhNaWNyb3NvZnQgUm9v '' SIG '' dCBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IB '' SIG '' DwAwggEKAoIBAQCpAr3BcOY78k4bKJ+XeF4w6qKpjSVf '' SIG '' +P6VTKO3/p2iID58UaKboo9gMmvRQmR57qx2yVTa8uuc '' SIG '' hhyPn4Rms8VremIj1h083g8BkuiWxL8tZpqaaCaZ0Dos '' SIG '' vwy1WCbBRucKPjiWLKkoOajsSYNC44QPu5psVWGsgnyh '' SIG '' YC13TOmZtGQ7mlAcMQgkFJ+p55ErGOY9mGMUYFgFZZ8d '' SIG '' N1KH96fvlALGG9O/VUWziYC/OuxUlE6u/ad6bXROrxjM '' SIG '' lgkoIQBXkGBpN7tLEgc8Vv9b+6RmCgim0oFWV++2O14W '' SIG '' gXcE2va+roCV/rDNf9anGnJcPMq88AijIjCzBoXJsyB3 '' SIG '' E4XfAgMBAAGjgagwgaUwgaIGA1UdAQSBmjCBl4AQW9Bw '' SIG '' 72lyniNRfhSyTY7/y6FyMHAxKzApBgNVBAsTIkNvcHly '' SIG '' aWdodCAoYykgMTk5NyBNaWNyb3NvZnQgQ29ycC4xHjAc '' SIG '' BgNVBAsTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEhMB8G '' SIG '' A1UEAxMYTWljcm9zb2Z0IFJvb3QgQXV0aG9yaXR5gg8A '' SIG '' wQCLPDyIEdE+9mPs30AwDQYJKoZIhvcNAQEEBQADggEB '' SIG '' AJXoC8CN85cYNe24ASTYdxHzXGAyn54Lyz4FkYiPyTrm '' SIG '' IfLwV5MstaBHyGLv/NfMOztaqTZUaf4kbT/JzKreBXzd '' SIG '' MY09nxBwarv+Ek8YacD80EPjEVogT+pie6+qGcgrNyUt '' SIG '' vmWhEoolD2Oj91Qc+SHJ1hXzUqxuQzIH/YIX+OVnbA1R '' SIG '' 9r3xUse958Qw/CAxCYgdlSkaTdUdAqXxgOADtFv0sd3I '' SIG '' V+5lScdSVLa0AygS/5DW8AiPfriXxas3LOR65Kh343ag '' SIG '' ANBqP8HSNorgQRKoNWobats14dQcBOSoRQTIWjM4bk0c '' SIG '' DWK3CqKM09VUP0bNHFWmcNsSOoeTdZ+n0qAwggSLMIID '' SIG '' c6ADAgECAgphBiqNAAAAAAALMA0GCSqGSIb3DQEBBQUA '' SIG '' MIGmMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGlu '' SIG '' Z3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMV '' SIG '' TWljcm9zb2Z0IENvcnBvcmF0aW9uMSswKQYDVQQLEyJD '' SIG '' b3B5cmlnaHQgKGMpIDIwMDAgTWljcm9zb2Z0IENvcnAu '' SIG '' MSMwIQYDVQQDExpNaWNyb3NvZnQgQ29kZSBTaWduaW5n '' SIG '' IFBDQTAeFw0wMTAzMjkyMTI3MjZaFw0wMjA1MjkyMTM3 '' SIG '' MjZaMIGhMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2Fz '' SIG '' aGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UE '' SIG '' ChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSswKQYDVQQL '' SIG '' EyJDb3B5cmlnaHQgKGMpIDIwMDEgTWljcm9zb2Z0IENv '' SIG '' cnAuMR4wHAYDVQQDExVNaWNyb3NvZnQgQ29ycG9yYXRp '' SIG '' b24wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAI4W '' SIG '' b9oX0+NFlbKs0+XPMT0dxIe7TkgF+YtWqSuHY8hE2jDJ '' SIG '' FLzreBq6xOricgBMRmab3mJGbp73RLrous/C1fU7lke4 '' SIG '' UV7Rd2cie1MqLeoij3xO/wK1GzOg6pXrGLp2+WHSAAuU '' SIG '' YDQ7SYYss9mOky4ta/3jVaq4qm7gcPSiYAYvAgMBAAGj '' SIG '' ggFAMIIBPDAOBgNVHQ8BAf8EBAMCBsAwEwYDVR0lBAww '' SIG '' CgYIKwYBBQUHAwMwHQYDVR0OBBYEFO+QQN5P4BuzRdgH '' SIG '' A3uZ+XUZZjUaMIGpBgNVHSMEgaEwgZ6AFClcuRu2zTPu '' SIG '' u55Zffflyi7EDTQooXSkcjBwMSswKQYDVQQLEyJDb3B5 '' SIG '' cmlnaHQgKGMpIDE5OTcgTWljcm9zb2Z0IENvcnAuMR4w '' SIG '' HAYDVQQLExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xITAf '' SIG '' BgNVBAMTGE1pY3Jvc29mdCBSb290IEF1dGhvcml0eYIQ '' SIG '' aguZT8AA3qoR1NhAmqi+5jBKBgNVHR8EQzBBMD+gPaA7 '' SIG '' hjlodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpL2Ny '' SIG '' bC9wcm9kdWN0cy9Db2RlU2lnblBDQS5jcmwwDQYJKoZI '' SIG '' hvcNAQEFBQADggEBAARnzM/dcU1Hwo6DaRJrol+WJgfo '' SIG '' j9jTnlrbJ2kdHfQ8VShT3REkJ5KuWVZA6cRNnezbq36U '' SIG '' mz0gLDXyJ07AyDm3ZWPRNWbaU71BfllKpFK39f3IvaF7 '' SIG '' BriY2Jju0Qs0dWYN3EGPw7CShFfBQnqFxpET21St3n5B '' SIG '' 3CCv6RvJwjIxxY3py/qDS8FYkzLE1+PNeqvffQicxoU7 '' SIG '' 6EGBOLF4Gbw4981rws6qTJAdg8bmAYloqueP6AdQKjLd '' SIG '' 18+9zHrZOg//skSKV8gaN2QHF317cktGBqEoWyNXHmr9 '' SIG '' kSIzQNF1SxIBbgYhhDZvqCoMfz6uNSv2t30LCBPlV/NL '' SIG '' rY8gv7gwggTJMIIDsaADAgECAhBqC5lPwADeqhHU2ECa '' SIG '' qL7mMA0GCSqGSIb3DQEBBAUAMHAxKzApBgNVBAsTIkNv '' SIG '' cHlyaWdodCAoYykgMTk5NyBNaWNyb3NvZnQgQ29ycC4x '' SIG '' HjAcBgNVBAsTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEh '' SIG '' MB8GA1UEAxMYTWljcm9zb2Z0IFJvb3QgQXV0aG9yaXR5 '' SIG '' MB4XDTAwMTIxMDA4MDAwMFoXDTA1MTExMjA4MDAwMFow '' SIG '' gaYxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5n '' SIG '' dG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVN '' SIG '' aWNyb3NvZnQgQ29ycG9yYXRpb24xKzApBgNVBAsTIkNv '' SIG '' cHlyaWdodCAoYykgMjAwMCBNaWNyb3NvZnQgQ29ycC4x '' SIG '' IzAhBgNVBAMTGk1pY3Jvc29mdCBDb2RlIFNpZ25pbmcg '' SIG '' UENBMIIBIDANBgkqhkiG9w0BAQEFAAOCAQ0AMIIBCAKC '' SIG '' AQEAooQVU9gLMA40lf86G8LzL3ttNyNN89KM5f2v/cUC '' SIG '' NB8kx+Wh3FTsfgJ0R6vbMlgWFFEpOPF+srSMOke1OU5u '' SIG '' VMIxDDpt+83Ny1CcG66n2NlKJj+1xcuPluJJ8m3Y6ZY+ '' SIG '' 3gXP8KZVN60vYM2AYUKhSVRKDxi3S9mTmTBaR3VktNO7 '' SIG '' 3barDJ1PuHM7GDqqtIeMsIiwTU8fThG1M4DfDTpkb0TH '' SIG '' NL1Kk5u8ph35BSNOYCmPzCryhJqZrajbCnB71jRBkKW3 '' SIG '' ZsdcGx2jMw6bVAMaP5iQuMznPQR0QxyP9znms6xIemsq '' SIG '' DmIBYTl2bv0+mAdLFPEBRv0VAOBH2k/kBeSAJQIBA6OC '' SIG '' ASgwggEkMBMGA1UdJQQMMAoGCCsGAQUFBwMDMIGiBgNV '' SIG '' HQEEgZowgZeAEFvQcO9pcp4jUX4Usk2O/8uhcjBwMSsw '' SIG '' KQYDVQQLEyJDb3B5cmlnaHQgKGMpIDE5OTcgTWljcm9z '' SIG '' b2Z0IENvcnAuMR4wHAYDVQQLExVNaWNyb3NvZnQgQ29y '' SIG '' cG9yYXRpb24xITAfBgNVBAMTGE1pY3Jvc29mdCBSb290 '' SIG '' IEF1dGhvcml0eYIPAMEAizw8iBHRPvZj7N9AMBAGCSsG '' SIG '' AQQBgjcVAQQDAgEAMB0GA1UdDgQWBBQpXLkbts0z7rue '' SIG '' WX335couxA00KDAZBgkrBgEEAYI3FAIEDB4KAFMAdQBi '' SIG '' AEMAQTALBgNVHQ8EBAMCAUYwDwYDVR0TAQH/BAUwAwEB '' SIG '' /zANBgkqhkiG9w0BAQQFAAOCAQEARVjimkF//J2/SHd3 '' SIG '' rozZ5hnFV7QavbS5XwKhRWo5Wfm5J5wtTZ78ouQ4ijhk '' SIG '' IkLfuS8qz7fWBsrrKr/gGoV821EIPfQi09TAbYiBFURf '' SIG '' ZINkxKmULIrbkDdKD7fo1GGPdnbh2SX/JISVjQRWVJSh '' SIG '' HDo+grzupYeMHIxLeV+1SfpeMmk6H1StdU3fZOcwPNtk '' SIG '' SUT7+8QcQnHmoD1F7msAn6xCvboRs1bk+9WiKoHYH06i '' SIG '' Vb4nj3Cmomwb/1SKgryBS6ahsWZ6qRenywbAR+ums+kx '' SIG '' FVM9KgS//3NI3IsnQ/xj6O4kh1u+NtHoMfUy2V7feXq6 '' SIG '' MKxphkr7jBG/G41UWTGCBGIwggReAgEBMIG1MIGmMQsw '' SIG '' CQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQ '' SIG '' MA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9z '' SIG '' b2Z0IENvcnBvcmF0aW9uMSswKQYDVQQLEyJDb3B5cmln '' SIG '' aHQgKGMpIDIwMDAgTWljcm9zb2Z0IENvcnAuMSMwIQYD '' SIG '' VQQDExpNaWNyb3NvZnQgQ29kZSBTaWduaW5nIFBDQQIK '' SIG '' YQYqjQAAAAAACzAMBggqhkiG9w0CBQUAoIGwMBkGCSqG '' SIG '' SIb3DQEJAzEMBgorBgEEAYI3AgEEMBwGCisGAQQBgjcC '' SIG '' AQsxDjAMBgorBgEEAYI3AgEVMB8GCSqGSIb3DQEJBDES '' SIG '' BBDuywKV2zhUda/eUBoNMzbLMFQGCisGAQQBgjcCAQwx '' SIG '' RjBEoCaAJABXAE0ASQAgAHAAcgBpAG4AdABlAHIAIABz '' SIG '' AGMAcgBpAHAAdKEagBhodHRwOi8vd3d3Lm1pY3Jvc29m '' SIG '' dC5jb20wDQYJKoZIhvcNAQEBBQAEgYB2Vi7Wgjx8BqH2 '' SIG '' 46YWLB+EfmuDlcWOg0IQzJ11Taz0p3SyKPoFM0tpYPvA '' SIG '' /NjorlO5qMEuUtKXXn5hXAU+6IfA1kW7rWjRyMoYf6BN '' SIG '' Mnuzk+L3ZYM095hAFNy6YOtIH0msH52t/J3rgJdVcnB1 '' SIG '' IHDGvl9K0iT0+wvHCfC1cm0BKaGCAkwwggJIBgkqhkiG '' SIG '' 9w0BCQYxggI5MIICNQIBATCBszCBnjEfMB0GA1UEChMW '' SIG '' VmVyaVNpZ24gVHJ1c3QgTmV0d29yazEXMBUGA1UECxMO '' SIG '' VmVyaVNpZ24sIEluYy4xLDAqBgNVBAsTI1ZlcmlTaWdu '' SIG '' IFRpbWUgU3RhbXBpbmcgU2VydmljZSBSb290MTQwMgYD '' SIG '' VQQLEytOTyBMSUFCSUxJVFkgQUNDRVBURUQsIChjKTk3 '' SIG '' IFZlcmlTaWduLCBJbmMuAhAIem1cb2KTT7rE/UPhFBid '' SIG '' MAwGCCqGSIb3DQIFBQCgWTAYBgkqhkiG9w0BCQMxCwYJ '' SIG '' KoZIhvcNAQcBMBwGCSqGSIb3DQEJBTEPFw0wMTEyMDcy '' SIG '' MDIzMDRaMB8GCSqGSIb3DQEJBDESBBBQcr7gc8/T5Jz/ '' SIG '' zs4YUE0FMA0GCSqGSIb3DQEBAQUABIIBAFgRB0KNh4S6 '' SIG '' v84cecsMH9B8Edq6fSmFxYXHK1T/OBG0SvODIdjhRf5D '' SIG '' 0rod1rKYugta35C3QRW6URZ/qL/nqgnadJ240vFw1ANS '' SIG '' KhIEatmSr34A0FbNEMEZsspxaG8JI91nv5NgayArbURR '' SIG '' x8CV5M+LkaesZyVldDOZ88BdbAFcALMR860d/CXgVa6p '' SIG '' Qz8w3lrIQGUzXnuuxaTtRAf22Ba/NSg4FOWz+U4DHUq3 '' SIG '' Ed0vbzAuzUOLo0EwEB+PPf4yZ2Had3xAkUQfbmb89yK9 '' SIG '' FMZL1A6aksyHdNB2HB4vgyzXW+KTRbQ4MKttbACrugLn '' SIG '' vSRK4Mpa/gWTKBapOlzdKcI= '' SIG '' End signature block