'Freshstart.vbs - Open remote backup database and remove all catalog and audit table entries. 'This is a client-side soft fresh-start. ' 4/15/2010 - MDR ' 11/23/2012 - support cloud and local mirror storage folder rename ' 11/25/2014 - initial support for SQL database backend ' 12/29/2014 - compatible with both MS Access and SQL/Express databases ' 1/6/2017 - Longfilename support added using local SHARES including security to set AB ' 8/17/2020 - Cleared out the BBCatalog table (and set AB if required) ' 10/15/2020 - Error handling of split and rsplit_data tables in older catalogs. ' 11/29/2021 - clean up split and rsplit tables. CONST RBSProvider = "Dr.Backup" CONST Version = "(v3.0.4)" CONST YESNO = 4 '** standard pre-amble for all interactive scripts ** 'get OS volume (do not assume it's C:\) Set OSobj = CreateObject("Scripting.FileSystemObject") OSfolder = OSobj.getspecialfolder(0) objStartFolder = Left(OSfolder, 3) 'root of search file tree OSVolume = Left(OSfolder, 1) '** first time through with modern OS, re-run script to elevate privs (first time args = 0) If WScript.Arguments.count = 0 AND NewOS() Then Set objShell = CreateObject("Shell.Application") 'Pass a bogus argument with leading blank space, say [ uac] objShell.ShellExecute "wscript.exe", Chr(34) & _ WScript.ScriptFullName & Chr(34) & " uac", "", "runas", 1 Wscript.Quit End If 'find location of 32-bit script processing program - in syswow64 on 64-bit machines ScriptEXE = OSFolder & "\SYSTEM32\Cscript.exe" Set objFSOexe = CreateObject("Scripting.FileSystemObject") If objFSOexe.FileExists(OSFolder & "\SYSWOW64\Cscript.exe") Then '64-bit system found. switch to 32-bit cscript engine for database drivers for MS Access ScriptEXE = OSFolder & "\SYSWOW64\Cscript.exe" End If '** if we have UAC escalated count will be 1, otherwise 0 on legacy machines ** '** force use of cscript by re-running so we get console display ** If Wscript.Arguments.Count < 2 Then strPath = Wscript.ScriptFullName 'use psexec? Response = Msgbox("Use SYSTEM account? (PSEXEC) ", YESNO + 256, "PSEXEC-SYSTEM") If Response = VbYes Then PSEXEC = TRUE If Instr(ScriptEXE, "SYSWOW64") <> 0 Then '64-bit machine If objFSOexe.FileExists(OSVolume & ":\Program Files (x86)\Remote Backup\Custom\psexec.exe") Then ScriptEXE = """" & OSVolume & ":\Program Files (x86)\Remote Backup\Custom\psexec.exe"" -sid " & ScriptEXE & "" Else PSEXEC = False End If Else '32-bit machine If objFSOexe.FileExists(OSVolume & ":\Program Files\Remote Backup\Custom\psexec.exe") Then ScriptEXE = """" & OSVolume & ":\Program Files\Remote Backup\Custom\psexec.exe"" -sid " & ScriptEXE & " " Else PSEXEC = False End If End If Else PSEXEC = FALSE End If If PSEXEC Then strCommand = "%comspec% /k " & """" & ScriptEXE & " //nologo """ & strPath & """" & " 1 2" & """" Else strCommand = "%comspec% /k " & ScriptEXE & " //nologo """ & strPath & """" & " 1 2" End If 'Wscript.Echo "strCommand = " & strCommand Set objShell = CreateObject("Wscript.Shell") objShell.Run(strCommand), 1, True Wscript.Quit End If Wscript.StdOut.Write(RBSProvider & " - Client Fresh Start Utility " & Version & VbCrLF & VbCrLF) Wscript.StdOut.WriteLine("Start: " & Now()) On Error GoTo 0 Err.Clear 'Get program file location from Registry Const HKEY_LOCAL_MACHINE = &H80000002 strComputer = "." strKeyPath = "SOFTWARE\Quantum Tech, Inc.\Remote Backup\Settings" strEntryName = "ClientDB" Set objReg = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv") status = objReg.GetStringValue( HKEY_LOCAL_MACHINE, strKeyPath, strEntryName, strValue) 'Sometimes security products block access to the registry. If so, we'll quit here. If (status <> 0) or (Err.Number <> 0) Then WScript.StdOut.Writeline ("Unable to access registry. Quitting." & VbCr) Wscript.Quit End If 'assume Access database - generally in C:\Program Files (x86)\Remote Backup\backup.mdb DBPath = strValue Database = strValue & "\" & "backup.mdb" 'INITIALIZE DATABASE 'grab Database type field from registry strEntryName = "DBType" err.clear Set objReg = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv") status = objReg.GetStringValue( HKEY_LOCAL_MACHINE, strKeyPath, strEntryName, strValue) If (status = 0) and (Err.Number = 0) Then 'dbtype field found. DBType = strValue Else DBType = "0" 'default to MS Access db End If 'Assume SQL information in registry, otherwise its legacy MS Access database strEntryName = "DBServer" Err.Clear Set objReg = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv") status = objReg.GetStringValue( HKEY_LOCAL_MACHINE, strKeyPath, strEntryName, strValue) If (status = 0) and (Err.Number = 0) and (DBType <> "0") Then DBServer = strValue WScript.StdOut.Writeline (VbCrLf& "Processing SQL Server Database: " & DBServer & " (RBBACKUP)" & VbCrLf) SQLDb = True NullSub = "IsNull([LongPath],[Filename])" 'complex query string for MSSQL Else WScript.StdOut.Writeline (VbCrLf & "Processing Access Database: " & Database & VbCrLf) SQLDb = False NULLSub = "IIf(IsNull([LongPath]),[Filename],[LongPath])" 'complex query string for MS Access End If 'End setup and database initialization - begin script function here 'grab local mirror path from registry LocalTransferPath = "" strEntryName = "LocalTransferPath" err.clear Set objReg = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv") status = objReg.GetStringValue( HKEY_LOCAL_MACHINE, strKeyPath, strEntryName, strValue) If (status = 0) and (Err.Number = 0) Then LocalTransferPath = strValue Else WScript.StdOut.Writeline ("Local Mirror location not available.") End If 'grab cloud storage path from registry CSPath = "" strEntryName = "CSPath" Err.Clear Set objReg = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv") status = objReg.GetStringValue( HKEY_LOCAL_MACHINE, strKeyPath, strEntryName, strValue) If (status = 0) and (Err.Number = 0) Then CSPath = strValue Else WScript.StdOut.Writeline ("Cloud Storage location not available.") End If 'last chance to abort here status = MsgBox("Warning: This script will delete all entries from your local catalog.", vbOkCancel + vbInformation + vbDefaultButton2, "Freshstart Catalog?") If status = vbCancel Then Wscript.Quit End If 'prompt here to see if we should clear archive flags on all files Touched = 0 status = MsgBox("Set the Archive Flag on files purged from Catalog? ", vbYesNoCancel + vbInformation + vbDefaultButton1, "Set Archive Flags?") If status = VbCancel Then Wscript.Quit ElseIF status = vbYes Then TouchAB = True Else TouchAB = False End If 'BACKUP DATABASE 'create date/timestamp backup of database dt = Now() Set FSO = CreateObject("Scripting.FileSystemObject") If SQLDb = False Then 'make backup of backup.mdb Access database oldDB = Database bakDB = Database & "-" & month(dt) & day(dt) & year(dt) & hour(dt) & minute(dt) & second(dt) 'copy existing database Wscript.StdOut.WriteLine("Making backup: " & bakDB) Err.Clear FSO.CopyFile oldDB, bakDB, TRUE 'If backup copy fails, then we quit right here. If Err.Number <> 0 Then WScript.StdOut.Writeline ("Unable to backup database. Quitting." & VbCrLF) Wscript.Quit End If Else 'make backup copy of SQL database Wscript.StdOut.WriteLine("Making backup: " & DBServer & "(RBackup) as" & " " & DBPath & "\" & "RBBackup.bak" & "-" & month(dt) & day(dt) & year(dt) & hour(dt) & minute(dt) & second(dt) ) BackupSQL DBServer, "RBBACKUP", DBPath & "\" & "RBBackup.bak" & "-" & month(dt) & day(dt) & year(dt) & hour(dt) & minute(dt) & second(dt) End If 'CONNECT TO DATABASE If SQLDb = FALSE Then Err.Clear Set conn = CreateObject("ADODB.Connection") Set backupset = CreateObject("ADODB.Recordset") strConnect = "Provider=MSDASQL; DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & DataBase & ";UID=admin;PWD=;" conn.CommandTimeout = 0 conn.Open strConnect If Err.Number <> 0 Then Wscript.StdOut.WriteLine(VbCrLf & "Unable to Open Access Database.") Wscript.StdOut.WriteLine(VbCrLf & "Can't continue." & VbCr) Wscript.Quit End If Else Err.Clear 'SQL database Open goes here Set conn = CreateObject("ADODB.Connection") Set backupset = CreateObject("ADODB.Recordset") Const adUseServer = 2 '8/13/2017 - let the server do the heavy lifting on this one backupset.Cursorlocation = adUseServer strConnect = "Provider=SQLOLEDB;Data Source=" & DBSERVER & ";Trusted_Connection=Yes;" & _ "Initial Catalog=RBBACKUP;" conn.CommandTimeout = 0 conn.Open strConnect If Err.Number <> 0 Then Wscript.StdOut.WriteLine(VbCrLf & "Unable to Open SQL Database.") Wscript.StdOut.WriteLine(VbCrLf & "Can't continue." & VbCr) Wscript.Quit End If End If 'Query to touch all filenames if required If TouchAB = True Then 'put in advanced SQL query to handle long filenames sqlStmt = "SELECT Catalog.ID, Catalog.SetNameID, Catalog.Extension," & _ " Catalog.[Restore], Catalog.Status, " & _ " Catalog.[Filename], Catalog.StoreMethod, Catalog.LongPathID," & _ " Catalog.OrigSize, Catalog.PrepSize, Catalog.TrfResult, Catalog.PrepResult," & _ " Catalog.Patch, Catalog.FullPFolder, Catalog.LPathID, LongPaths.LongPath, " & NullSub & _ " AS OrigName, SetNames.[Name] AS SetName, Catalog.SubFolder, Catalog.EncryptMethod," & _ " Catalog.Plugin, Catalog.ModifiedDate, Catalog.PatchName, Catalog.DependentFolder," & _ " Catalog.BackupLocation, Catalog.LPathID FROM SetNames INNER JOIN" & _ " (LongPaths RIGHT JOIN [Catalog] ON LongPaths.PathID = Catalog.LongPathID)" & _ " ON SetNames.ID = Catalog.SetNameID;" backupset.open sqlStmt, conn, 3, 3 Total = backupset.RecordCount LongFiles = 0 FNF = 0 'Wscript.StdOut.WriteLine("Total Records to Set Archive Flag = " & backupset.recordcount) 'loop through all files and delete from catalog table Set objFSO = CreateObject("Scripting.FileSystemObject") Do Until backupset.EOF 'Wscript.StdOut.Writeline("Processing file = " & backupset("Filename")) 'Lets see if a file really exists and if so, touch it to set archive flag for future incremental backups If Len(backupset("Filename") & " ") = 1 Then 'This is an old-style long filename. Let' fetch upto 512 characters of that name FullFilename = backupset("Longpath").Getchunk(512) LongFiles = LongFiles + 1 Else 'Need to check if this is a regular file, or an alias to a long filename and handle appropriately 'Wscript.Echo "LPATHID = " & Backupset("LPATHID") If Backupset("LPATHID") = "0" OR Len(Backupset("LPATHID") & " ") = 1 Then 'This is a plain olde filename - simple case. 'Wscript.Echo "FullFileName (NormalFile) = " & FullFilename FullFilename = backupset("Filename") Else 'Wscript.StdOut.Writeline("Processing long256 file = " & backupset("Filename")) 'We are processing an alias to a longfile. 'Need to lookup the actual filename and map an internal share to it 'CONNECT TO DATABASE Err.Clear If SQLDb = FALSE Then Set objLongConn = CreateObject("ADODB.Connection") strLongConnect = "Provider=MSDASQL; DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & DataBase & ";UID=admin;PWD=;" objLongConn.Open strLongConnect, 3, 3 If Err.Number <> 0 Then Wscript.StdOut.WriteLine(VbCrLf & "Unable to Open Access Database for longfile lookup.") Wscript.StdOut.WriteLine(VbCrLf & "Can't continue." & VbCr) Wscript.Quit End If Else Err.Clear 'SQL database Open goes here Set ObjLongConn = CreateObject("ADODB.Connection") strLongConnect = "Provider=SQLOLEDB;Data Source=" & DBSERVER & ";Trusted_Connection=Yes;" & _ "Initial Catalog=RBBACKUP;" ObjLongConn.Open strLongConnect, 3, 3 If Err.Number <> 0 Then Wscript.StdOut.WriteLine(VbCrLf & "Unable to Open SQL Database for longfile lookup.") Wscript.StdOut.WriteLine(VbCrLf & "Can't continue." & VbCr) Wscript.Quit End If End If 'begin looking up longfile alias CleanUpLongFile = False Set rsLongFileEntry = CreateObject("ADODB.Recordset") sqlLongStmt = "Select SourceFolder, SourceFile from [LongPaths256] WHERE LPathID = " & Backupset("LPathID") rsLongFileEntry.open sqlLongStmt, objLongConn, 3, 3 'Wscript.StdOut.WriteLine(VbCrLf & "LPATHID Query Status = " & rsLongFileEntry.EOF) If rsLongFileEntry.EOF = FALSE Then 'Wscript.StdOut.Writeline("Creating SHARE for file = " & backupset("Filename")) 'Found the record. Process it here. MyDrive = FreeDrive() 'Wscript.Echo "MyDrive = " & MyDrive MyPC = MyComputerName() 'Wscript.Echo "MyComputerName = " & MyPC MySourceFolder = rsLongFileEntry("SourceFolder") If Len(MySourceFolder) = 2 Then 'root of drive, ignore share mapping. use actual file. FullFilename = MysourceFolder & "\" & rsLongFileEntry("SourceFile") 'Wscript.Echo "FullFileName (Long-Root) = " & FullFilename Else MakeShare MySourceFolder, "DRBACKUP" 'Wscript.Echo "SourceFolder = " & rsLongFileEntry("SourceFolder") MapStatus = MapDrive(MyDrive, "\\" & MyPC & "\" & "DRBACKUP") 'Wscript.Echo "MapStatus = " & MapStatus FullFilename = MyDrive & ":\" & rsLongFileEntry("SourceFile") OriginalFullFilename = rsLongFileEntry("SourceFolder") & "\" & rsLongFileEntry("SourceFile") 'Wscript.Echo "FullFileName (Long) = " & FullFilename CleanupLongFile = TRUE End If rsLongFileEntry.Close 'rsLongFileEntry = Nothing Else Wscript.Echo "Failed to lookup long filename - some sort of database corruption/mismatch likely" 'error looking up longfilename rcord End If objLongConn.Close 'objLongConn = Nothing End If End If 'by here, we are either using the normal filename, the legacy long filename (upto 259 characters) or a share-mounted version of the real long filename as looked up in the alias long256 table On Error Resume Next If objFSO.FileExists(FullFilename) Then Err.Clear Set objFile = objFSO.GetFile(FullFilename) 'Wscript.Echo "Trying to set AB on file = " & FullFilename objFile.Attributes = objFile.Attributes OR 32 If Err.Number <> 0 Then Wscript.StdOut.WriteLine("Archive Flag Set Error on: " & FullFilename) 'status = MsgBox("Archive Flag Set Error on: " & FullFilename, vbOKONLY, "Set Archive Flag Error") Else Touched = Touched + 1 End If 'lite object cleanup. If IsObject(objFile) Then If Not objFile Is Nothing Then Set objFile = Nothing End If End If 'objFile = nothing Else 'file cannot be found on disk FNF = FNF +1 End If On Error GoTo 0 'since catalog could be large, provide feedback here If (Touched Mod 100) = 0 Then Wscript.StdOut.Write("Archive Flag Processing: " & Touched & "/" & Total & VbCr) End If If CleanUpLongFile = TRUE Then 'Free up drive letter & remove local share UnmapDrive(MyDrive) RemoveShare("DRBACKUP") End If On Error Resume Next backupset.MoveNext On Error GoTo 0 Loop 'done touching files in catalog. wrap up and display stats. Wscript.StdOut.WriteLine("Archive Flag Processing: " & Touched & "/" & Total & " Cleared [" & FNF & "]") backupset.close End If ''11/29/2021 - Elevate processing of split files and reverse split files to prevent constraint conflicts. 'Query to get the files from the RSplit table - Not used by Dr.Backup '10/15/2020 - error handling table not present On Error Resume Next sqlStmt = "Select RsplitID FROM Rsplit" backupset.open sqlStmt, conn, 3, 3 If err.number = 0 Then 'loop through all files and delete from RSplit table Total = backupset.RecordCount Removed = 0 Do Until backupset.EOF backupset.delete Removed = Removed + 1 'since long path could be large, provide feedback here If (Removed Mod 100) = 0 Then Wscript.StdOut.Write("RSplit Table Processing: " & Removed & "/" & Total & VbCr) End If backupset.MoveNext Loop 'done removing files from patch table. wrap up and display stats. Wscript.StdOut.WriteLine("Rsplit Table Processing: " & Removed & "/" & Total & " Deleted") backupset.close Else Wscript.StdOut.WriteLine("Rsplit Table Processing: NOT PERFORMED - TABLE NOT PRESENT") Err.clear End IF '10/15/2020 - error handling table not present On Error Resume Next 'Query to get the files from the Split_Data table sqlStmt = "Select SplitID FROM Split_Data" backupset.open sqlStmt, conn, 3, 3 If err.number = 0 Then 'loop through all files and delete from Split_Data table Total = backupset.RecordCount Removed = 0 Do Until backupset.EOF backupset.delete Removed = Removed + 1 'since long path could be large, provide feedback here If (Removed Mod 100) = 0 Then Wscript.StdOut.Write("Split_Data Table Processing: " & Removed & "/" & Total & VbCr) End If backupset.MoveNext Loop 'done removing files from Split_Data table. wrap up and display stats. Wscript.StdOut.WriteLine("Split_Data Table Processing: " & Removed & "/" & Total & " Deleted") backupset.close Else Wscript.StdOut.WriteLine("Split_Data Table Processing: NOT PERFORMED - TABLE NOT PRESENT") Err.clear End If ''11/29/2021 - resume normal processsing of individual files. 'Query to get the files from the catalog sqlStmt = "Select Catalog.ID FROM Catalog" 'Basic query, ignores longfilename touches backupset.open sqlStmt, conn, 3, 3 'loop through all files and delete from catalog table Total = backupset.RecordCount 'Wscript.StdOut.WriteLine("Total Records Selected = " & backupset.recordcount) Removed = 0 Set objFSO = CreateObject("Scripting.FileSystemObject") Do Until backupset.EOF backupset.delete Removed = Removed + 1 'since catalog could be large, provide feedback here If (Removed Mod 100) = 0 Then Wscript.StdOut.Write("Catalog Processing: " & Removed & "/" & Total & VbCr) End If On Error Resume Next backupset.MoveNext On Error GoTo 0 Loop FilesRemoved = Removed 'done removing files from catalog. wrap up and display stats. Wscript.StdOut.WriteLine("Catalog Processing: " & Removed & "/" & Total & " Deleted") backupset.close 'Query to get the files from the BBcatalog sqlStmt = "Select [Filename] FROM BBCatalog" 'Basic query, ignores longfilename touches backupset.open sqlStmt, conn, 3, 3 'loop through all files and delete from BBcatalog table Total = backupset.RecordCount 'Wscript.StdOut.WriteLine("Total Records Selected = " & backupset.recordcount) Removed = 0 Set objFSO = CreateObject("Scripting.FileSystemObject") Do Until backupset.EOF 'Touch the BBCatalog filename if AB touch set. If TouchAB = True Then On Error Resume Next If objFSO.FileExists(backupset("Filename")) Then Err.Clear Set objFile = objFSO.GetFile(backupset("Filename")) 'Wscript.Echo "Trying to set AB on file = " & FullFilename objFile.Attributes = objFile.Attributes OR 32 If Err.Number <> 0 Then Wscript.StdOut.WriteLine("Archive Flag Set Error on: " & backupset("Filename")) 'status = MsgBox("Archive Flag Set Error on: " & Backupset("Filename"), vbOKONLY, "Set Archive Flag Error") Else Touched = Touched + 1 End If 'lite object cleanup. If IsObject(objFile) Then If Not objFile Is Nothing Then Set objFile = Nothing End If End If 'objFile = nothing End If On Error GoTo 0 End If backupset.delete Removed = Removed + 1 'since catalog could be large, provide feedback here If (Removed Mod 100) = 0 Then Wscript.StdOut.Write("BBCatalog Processing: " & Removed & "/" & Total & VbCr) End If On Error Resume Next backupset.MoveNext On Error GoTo 0 Loop FilesRemoved = Removed 'done removing files from catalog. wrap up and display stats. Wscript.StdOut.WriteLine("BBCatalog Processing: " & Removed & "/" & Total & " Deleted") backupset.close 'Query to get the files from the audit table sqlStmt = "Select * FROM BackupAudit" backupset.open sqlStmt, conn, 3, 3 'loop through all files and delete from audit table Total = backupset.RecordCount Removed = 0 Do Until backupset.EOF backupset.delete Removed = Removed + 1 'since audit could be large, provide feedback here If (Removed Mod 100) = 0 Then Wscript.StdOut.Write("Audit Table Processing: " & Removed & "/" & Total & VbCr) End If On Error Resume Next backupset.MoveNext On Error GoTo 0 Loop 'done removing files from audit table. wrap up and display stats. Wscript.StdOut.WriteLine("Audit Table Processing: " & Removed & "/" & Total & " Deleted") backupset.close 'Query to get the LongPaths sqlStmt = "Select * FROM LongPaths" backupset.open sqlStmt, conn, 3, 3 'loop through all files and delete from Long Path table Total = backupset.RecordCount Removed = 0 Do Until backupset.EOF backupset.delete Removed = Removed + 1 'since long path could be large, provide feedback here If (Removed Mod 100) = 0 Then Wscript.StdOut.Write("Long Path Processing: " & Removed & "/" & Total & VbCr) End If On Error Resume Next backupset.MoveNext On Error GoTo 0 Loop 'done removing files from long path table. wrap up and display stats. Wscript.StdOut.WriteLine("Long Path Processing: " & Removed & "/" & Total & " Deleted") backupset.close 'Query to get the LongPaths256 sqlStmt = "Select * FROM LongPaths256" backupset.open sqlStmt, conn, 3, 3 'loop through all files and delete from Long Path table Total = backupset.RecordCount Removed = 0 Do Until backupset.EOF backupset.delete Removed = Removed + 1 'since long path could be large, provide feedback here If (Removed Mod 100) = 0 Then Wscript.StdOut.Write("Long Path256 Processing: " & Removed & "/" & Total & VbCr) End If On Error Resume Next backupset.MoveNext On Error GoTo 0 Loop 'done removing files from long path256 table. wrap up and display stats. Wscript.StdOut.WriteLine("Long Path256 Processing: " & Removed & "/" & Total & " Deleted") backupset.close 'Query to get the files from the patch table sqlStmt = "Select * FROM Patch" backupset.open sqlStmt, conn, 3, 3 'loop through all files and delete from patch table Total = backupset.RecordCount Removed = 0 Do Until backupset.EOF backupset.delete Removed = Removed + 1 'since long path could be large, provide feedback here If (Removed Mod 100) = 0 Then Wscript.StdOut.Write("Patch Table Processing: " & Removed & "/" & Total & VbCr) End If On Error Resume Next backupset.MoveNext On Error GoTo 0 Loop 'done removing files from patch table. wrap up and display stats. Wscript.StdOut.WriteLine("Patch Table Processing: " & Removed & "/" & Total & " Deleted") backupset.close 'get path to bitbackup cache for info dialog box sqlStmt = "Select TempPath, PatchRefPath FROM Preferences" backupset.open sqlStmt, conn, 3, 3 BitBackupPath = "" RecordCount = 0 Do Until backupset.EOF BitBackupPath = backupset("PatchRefPath") If Len(BitBackupPath & " ") <> 1 Then If Right(BitBackupPath,1) <> "\" Then BitBackupPath = BitBackupPath & "\" & "BitBackup" Else BitBackupPath = BitBackupPath & "BitBackup" End If End If On Error Resume Next backupset.MoveNext On Error GoTo 0 Loop backupset.close If Len(BitBackupPath & " ") <> 1 Then If FSO.FolderExists(BitBackupPath) Then FSO.MoveFolder BitBackupPath , BitBackupPath & "-" & month(dt) & day(dt) & year(dt) & hour(dt) & minute(dt) & second(dt) Else status = MsgBox("Cannot find BitBackup folder. Make sure to manually delete", vbOKONLY, "No BitBackup Folder") End If Else status = MsgBox("No BitBackup Path found in Catalog. Please use Admin mode to fix", vbOKONLY, "No BitBackup Path Found") End If If Len(LocalTransferPath & " ") <> 1 Then If FSO.FolderExists(LocalTransferPath) Then FSO.MoveFolder LocalTransferPath , LocalTransferPath & "-" & month(dt) & day(dt) & year(dt) & hour(dt) & minute(dt) & second(dt) FSO.CreateFolder LocalTransferPath Else status = MsgBox("Cannot find Local Mirror folder. Make sure to manually delete", vbOKONLY, "No Mirror Folder") End If End If If Len(CSPath & " ") <> 1 Then If FSO.FolderExists(CSPath) Then FSO.MoveFolder CSPath , CSPath & "-" & month(dt) & day(dt) & year(dt) & hour(dt) & minute(dt) & second(dt) FSO.CreateFolder CSPath Else status = MsgBox("Cannot find Map Cloud Storage folder. Make sure to manually delete", vbOKONLY, "No Cloud Folder") End If End If 'show report Wscript.StdOut.Writeline(" ") Wscript.StdOut.Write(RBSProvider & " - Client Fresh Start Utility Summary " & Version & VbCrLF) Wscript.StdOut.Writeline("All client-side catalog entries cleared. (" & FilesRemoved & ")" & vbCRLF & vbCRLF & _ "Next Steps: " & vbCRLF & _ "1. Remove Prior Bitbackup Folder" & " (" & BitBackupPath & "-" & month(dt) & day(dt) & year(dt) & hour(dt) & minute(dt) & second(dt) & ")" & vbCRLF & _ "2. Remove Prior Disk Mirror Folder (if in use)" & VbCrLf & _ "3. Initialize Public Cloud Storage Bucket (if in use)" & VbCrLf & _ "4. IMMEDIATELY Contact Technical Support to Reset Cloud Backup Account." & VbCrLf) 'all done Wscript.StdOut.WriteLine("Complete: " & Now()) & VBCrLF Pause "press ENTER to close this command box..." Wscript.quit Function NewOS() On Error Resume Next strComputer = "." OScaption = "" NewOS = False Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") Set colOperatingSystems = objWMIService.ExecQuery _ ("Select * from Win32_OperatingSystem") For Each objOperatingSystem in colOperatingSystems OScaption = objOperatingSystem.Caption Next If Instr(OScaption,"XP") > 0 OR _ Instr(OScaption, "2003") > 0 OR _ instr(OScaption, "2000") > 0 OR _ len(OScaption) = 0 Then NewOS = False Else NewOS = True End If Exit Function End Function Sub BackupSQL(strServerName, strDatabaseName, strBackupFile) 'Backup SQL database to strDatabaseName.bak in folder strBackupfolder 'Example: BackupSQL ".\SQLEXPRESS", "RBBACKUP", "C:\SQLBackup\RBBACKUP.bak" Dim adoCommand Dim strConnectionstring Dim strfileName ' Specify backup path to save the .bak file. 'strBackupPath = "C:\SQLBackup" 'Specify the name of server and instance if present to which backup file need to be created . 'strServerName =".\SQLEXPRESS " 'Specify the database name to which backup file need to be generated. 'strDatabaseName ="RBBACKUP" 'Specify connection string to Master Database on SQL server as best practise. strConnectionstring= "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=MASTER;Data Source=" & strServerName ' Backup the database . Set adoCommand = CreateObject("ADODB.Command") On Error Resume Next adoCommand.ActiveConnection = strConnectionstring If (Err.Number <> 0) Then Wscript.Echo "BackupSQL: Unable to connect to SQL database." Wscript.Echo Err.Description Wscript.Quit End If strfileName = strBackupFile adoCommand.CommandText = " Create database " & strDatabaseName adoCommand.CommandText = "Backup DATABASE " & strDatabaseName & " to disk='" & strBackupFile & "'" & " With INIT" adoCommand.CommandTimeout = 6000 adoCommand.Execute If (Err.Number <> 0) Then Wscript.Echo "BackupSQL: Unable to write SQL database." Wscript.Echo Err.Description Wscript.Quit End If 'MsgBox "BackUp Completed Successfully" Set adoCommand = Nothing End Sub Function GetMachineNameString() 'get a string representation of machine name with timestamp Set wshShell = WScript.CreateObject( "WScript.Shell" ) strComputerName = wshShell.ExpandEnvironmentStrings( "%COMPUTERNAME%" ) strComputerName = Replace(strComputerName, " ", "_") 'WScript.Echo "Computer Name: " & strComputerName GetMachineNameString = strComputerName Exit Function End Function Function FreeDrive() 'find a free drive letter not in use CONST DefaultStart = "A" Ltr = DefaultStart With CreateObject("Scripting.FileSystemObject") Do While .DriveExists(Ltr) and UCase(Ltr) <= "Z" Ltr = Chr(ASC(Ltr) + 1) If Ltr = "[" Then Wscript.Echo "Drive letter allocation failed." FreeDrive = "" Exit Function End If Loop End With FreeDrive = Ltr Exit Function End Function Function MyComputerName 'fetch the name of the computer Set wshShell = CreateObject( "WScript.Shell" ) strComputerName = wshShell.ExpandEnvironmentStrings( "%COMPUTERNAME%" ) 'WScript.Echo "Computer Name: " & strComputerName MyComputerName = strComputerName Exit Function End Function Function MapDrive(DriveLetter, UNCPath) 'attempt to map a network drive Set objNetwork = CreateObject("Wscript.Network") On Error Resume Next objNetwork.MapNetworkDrive DriveLetter & ":", UNCPath, FALSE If NOT (Err = 0 OR Err = 22) Then 'Wscript.Echo "Error = " & Err & " MAP Description: " & Err.Description Err.Clear On Error Resume Next 'Wscript.Echo "Failed to establish path mapping: " & DriveLetter & ": to " & UNCPath & " " & Err.Description MapDrive = FALSE Exit Function End If MapDrive = TRUE 'Wscript.Echo "Mapped: " & DriveLetter & ": " & UNCPath End Function Function UnMapDrive(DriveLetter) 'attempt to unmap a network drive Set objNetwork = CreateObject("Wscript.Network") On Error Resume Next objNetwork.RemoveNetworkDrive DriveLetter & ":", TRUE, TRUE If Err <> 0 Then Err.Clear On Error Resume Next 'Wscript.Echo "Failed to remove path mapping: " & DriveLetter & ":" UnMapDrive = FALSE Exit Function End If UnMapDrive = TRUE 'Wscript.Sleep(100) End Function Function MakeShare(sSharePath, sShareName) Const FILE_SHARE = 0 Const MAX_CONNECT = 2 RemoveShare sShareName 'create security descriptor - sd Set wmi = GetObject("winmgmts://./root/cimv2") Set trustee = wmi.Get("Win32_Trustee").SpawnInstance_() trustee.Domain = Null trustee.Name = "Everyone" trustee.SID = Array(1,1,0,0,0,0,0,1,0,0,0,0) 'SID S-1-1-0 (binary) Set ace = wmi.Get("Win32_Ace").SpawnInstance_() ace.AccessMask = 2032127 'full access ace.AceFlags = 3 'object inheritance + container inheritance ace.AceType = 0 'allow access ace.Trustee = trustee Set sd = wmi.Get("Win32_SecurityDescriptor").SpawnInstance_() sd.DACL = Array(ace) With GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2") With .Get("Win32_Share") On Error Resume Next MakeShare = .Create(sSharePath, sShareName, FILE_SHARE, MAX_CONNECT, sShareName, "", sd) 'Wscript.Echo "create share status=" & Err & " Description: " & Err.Description If NOT (Err = 0 OR Err = 22) Then Wscript.Echo "Failed to create share: " & sSharePath & " (" & Err.Description & ")" Exit Function End If End With End With 'Wscript.Echo "Created share: " & sShareName End Function Sub RemoveShare(sShareName) Dim cShares, oShare With GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2") Set cShares = .ExecQuery _ ("Select * from Win32_Share Where Name = '" & sShareName & "'") For Each oShare in cShares oShare.Delete Next End With End Sub Sub Pause(strPause) WScript.Echo (strPause) z = WScript.StdIn.ReadLine End Sub '' SIG '' Begin signature block '' SIG '' MIIk7gYJKoZIhvcNAQcCoIIk3zCCJNsCAQExCzAJBgUr '' SIG '' DgMCGgUAMGcGCisGAQQBgjcCAQSgWTBXMDIGCisGAQQB '' SIG '' gjcCAR4wJAIBAQQQTvApFpkntU2P5azhDxfrqwIBAAIB '' SIG '' AAIBAAIBAAIBADAhMAkGBSsOAwIaBQAEFAe/9oI8ORCr '' SIG '' gWNr7pYFoVIIrPpZoIIeojCCBSUwggQNoAMCAQICEQC5 '' SIG '' oMkB8/HzaJWCExAMHIDEMA0GCSqGSIb3DQEBCwUAMHwx '' SIG '' CzAJBgNVBAYTAkdCMRswGQYDVQQIExJHcmVhdGVyIE1h '' SIG '' bmNoZXN0ZXIxEDAOBgNVBAcTB1NhbGZvcmQxGDAWBgNV '' SIG '' BAoTD1NlY3RpZ28gTGltaXRlZDEkMCIGA1UEAxMbU2Vj '' SIG '' dGlnbyBSU0EgQ29kZSBTaWduaW5nIENBMB4XDTIxMDQw '' SIG '' MTAwMDAwMFoXDTIzMDQwMTIzNTk1OVowazELMAkGA1UE '' SIG '' BhMCVVMxETAPBgNVBAgMCE1hcnlsYW5kMQ8wDQYDVQQH '' SIG '' DAZMYXVyZWwxGzAZBgNVBAoMEkRvY3RvciBCYWNrdXAs '' SIG '' IExMQzEbMBkGA1UEAwwSRG9jdG9yIEJhY2t1cCwgTExD '' SIG '' MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA '' SIG '' tM/hT+5itHHS13dShxD82in/HUCl6lci5bPmivyH76cJ '' SIG '' dsQW2carMVq65URfr8LgzVGoRIWcdZufv5F91SZxuBA6 '' SIG '' KPgug7Y7obuDnhZ0TXa6Q3uWnh6RXwpQuz7Z35VbTdAe '' SIG '' k82twGLwAg5qljuehLYckRXlQ4+Ffn+ilfZGijqGGwVZ '' SIG '' HKnjNPiZjz1VIrOW/Y1ESWON8IUJu05HQhxTV9vaNsKu '' SIG '' WWk7wZ/ANZ/V3Q0QKA+vAqxZQSCMD05YxrKK1Dfonyjo '' SIG '' rFRfKO+EECVrnb+/B73VJ818SWyOVTD5Ww5yMAnXZWKN '' SIG '' MvaZNbUkF4MFG9TgK1JlS3K7CTRZiwd8sQIDAQABo4IB '' SIG '' sTCCAa0wHwYDVR0jBBgwFoAUDuE6qFM6MdWKvsG7rWca '' SIG '' A4WtNA4wHQYDVR0OBBYEFDEQykYmJXGfw0FHUronVNz3 '' SIG '' vdUMMA4GA1UdDwEB/wQEAwIHgDAMBgNVHRMBAf8EAjAA '' SIG '' MBMGA1UdJQQMMAoGCCsGAQUFBwMDMBEGCWCGSAGG+EIB '' SIG '' AQQEAwIEEDBKBgNVHSAEQzBBMDUGDCsGAQQBsjEBAgED '' SIG '' AjAlMCMGCCsGAQUFBwIBFhdodHRwczovL3NlY3RpZ28u '' SIG '' Y29tL0NQUzAIBgZngQwBBAEwQwYDVR0fBDwwOjA4oDag '' SIG '' NIYyaHR0cDovL2NybC5zZWN0aWdvLmNvbS9TZWN0aWdv '' SIG '' UlNBQ29kZVNpZ25pbmdDQS5jcmwwcwYIKwYBBQUHAQEE '' SIG '' ZzBlMD4GCCsGAQUFBzAChjJodHRwOi8vY3J0LnNlY3Rp '' SIG '' Z28uY29tL1NlY3RpZ29SU0FDb2RlU2lnbmluZ0NBLmNy '' SIG '' dDAjBggrBgEFBQcwAYYXaHR0cDovL29jc3Auc2VjdGln '' SIG '' by5jb20wHwYDVR0RBBgwFoEUc3VwcG9ydEBkcmJhY2t1 '' SIG '' cC5uZXQwDQYJKoZIhvcNAQELBQADggEBAGG8CB9UvO/t '' SIG '' GjAb1S6EQB7Dc1FMeAzfUeRfeAVYwEJThbAUkEzJplK1 '' SIG '' gnVOcf666HEGrwSERCtoW4ctn43Ba8swVEjalcw42EPp '' SIG '' bBEHPQ8BTBUAbmKeQ2FFCV8J6FXTUmtpTeHMhc+StyPl '' SIG '' HjVu//sGsKOm8CMN8NamSNA8Hl/+6NyM4Jerf6WIhkE1 '' SIG '' 2TrY+nLD37OsKXxvDIrycDQXlZKauMwpZmLpqDH0VRaL '' SIG '' gcH64eVG8sQWyDj5/ndUMjI8hbL2xQvKYXCeG3/Au8hN '' SIG '' ZKNQzEZpjJAY1XtV9lrFmimImC1kCALr6dMdjbGBA8mA '' SIG '' IIG763b/Hh+j1qoP+AlXOXcwggWBMIIEaaADAgECAhA5 '' SIG '' ckQ6+SK3UdfTbBDdMTWVMA0GCSqGSIb3DQEBDAUAMHsx '' SIG '' CzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1h '' SIG '' bmNoZXN0ZXIxEDAOBgNVBAcMB1NhbGZvcmQxGjAYBgNV '' SIG '' BAoMEUNvbW9kbyBDQSBMaW1pdGVkMSEwHwYDVQQDDBhB '' SIG '' QUEgQ2VydGlmaWNhdGUgU2VydmljZXMwHhcNMTkwMzEy '' SIG '' MDAwMDAwWhcNMjgxMjMxMjM1OTU5WjCBiDELMAkGA1UE '' SIG '' BhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNV '' SIG '' BAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVUaGUgVVNF '' SIG '' UlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVz '' SIG '' dCBSU0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIi '' SIG '' MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCAEmUX '' SIG '' Ng7D2wiz0KxXDXbtzSfTTK1Qg2HiqiBNCS1kCdzOiZ/M '' SIG '' Pans9s/B3PHTsdZ7NygRK0faOca8Ohm0X6a9fZ2jY0K2 '' SIG '' dvKpOyuR+OJv0OwWIJAJPuLodMkYtJHUYmTbf6MG8YgY '' SIG '' apAiPLz+E/CHFHv25B+O1ORRxhFnRghRy4YUVD+8M/5+ '' SIG '' bJz/Fp0YvVGONaanZshyZ9shZrHUm3gDwFA66Mzw3Lye '' SIG '' TP6vBZY1H1dat//O+T23LLb2VN3I5xI6Ta5MirdcmrS3 '' SIG '' ID3KfyI0rn47aGYBROcBTkZTmzNg95S+UzeQc0PzMsNT '' SIG '' 79uq/nROacdrjGCT3sTHDN/hMq7MkztReJVni+49Vv4M '' SIG '' 0GkPGw/zJSZrM233bkf6c0Plfg6lZrEpfDKEY1WJxA3B '' SIG '' k1QwGROs0303p+tdOmw1XNtB1xLaqUkL39iAigmTYo61 '' SIG '' Zs8liM2EuLE/pDkP2QKe6xJMlXzzawWpXhaDzLhn4ugT '' SIG '' ncxbgtNMs+1b/97lc6wjOy0AvzVVdAlJ2ElYGn+SNuZR '' SIG '' kg7zJn0cTRe8yexDJtC/QV9AqURE9JnnV4eeUB9XVKg+ '' SIG '' /XRjL7FQZQnmWEIuQxpMtPAlR1n6BB6T1CZGSlCBst6+ '' SIG '' eLf8ZxXhyVeEHg9j1uliutZfVS7qXMYoCAQlObgOK6ny '' SIG '' TJccBz8NUvXt7y+CDwIDAQABo4HyMIHvMB8GA1UdIwQY '' SIG '' MBaAFKARCiM+lvEH7OKvKe+CpX/QMKS0MB0GA1UdDgQW '' SIG '' BBRTeb9aqitKz1SA4dibwJ3ysgNmyzAOBgNVHQ8BAf8E '' SIG '' BAMCAYYwDwYDVR0TAQH/BAUwAwEB/zARBgNVHSAECjAI '' SIG '' MAYGBFUdIAAwQwYDVR0fBDwwOjA4oDagNIYyaHR0cDov '' SIG '' L2NybC5jb21vZG9jYS5jb20vQUFBQ2VydGlmaWNhdGVT '' SIG '' ZXJ2aWNlcy5jcmwwNAYIKwYBBQUHAQEEKDAmMCQGCCsG '' SIG '' AQUFBzABhhhodHRwOi8vb2NzcC5jb21vZG9jYS5jb20w '' SIG '' DQYJKoZIhvcNAQEMBQADggEBABiHUdx0IT2ciuAntzPQ '' SIG '' Lszs8ObLXhHeIm+bdY6ecv7k1v6qH5yWLe8DSn6u9I1v '' SIG '' cjxDO8A/67jfXKqpxq7y/Njuo3tD9oY2fBTgzfT3P/7e '' SIG '' uLSK8JGW/v1DZH79zNIBoX19+BkZyUIrE79Yi7qkomYE '' SIG '' doiRTgyJFM6iTckys7roFBq8cfFb8EELmAAKIgMQ5Qyx '' SIG '' +c2SNxntO/HkOrb5RRMmda+7qu8/e3c70sQCkT0ZANMX '' SIG '' XDnbP3sYDUXNk4WWL13fWRZPP1G91UUYP+1KjugGYXQj '' SIG '' FrUNUHMnREd/EF2JKmuFMRTE6KlqTIC8anjPuH+OdnKZ '' SIG '' DJ3+15EIFqGjX5UwggX1MIID3aADAgECAhAdokgwb5sm '' SIG '' GNCC4JZ9M9NqMA0GCSqGSIb3DQEBDAUAMIGIMQswCQYD '' SIG '' VQQGEwJVUzETMBEGA1UECBMKTmV3IEplcnNleTEUMBIG '' SIG '' A1UEBxMLSmVyc2V5IENpdHkxHjAcBgNVBAoTFVRoZSBV '' SIG '' U0VSVFJVU1QgTmV0d29yazEuMCwGA1UEAxMlVVNFUlRy '' SIG '' dXN0IFJTQSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe '' SIG '' Fw0xODExMDIwMDAwMDBaFw0zMDEyMzEyMzU5NTlaMHwx '' SIG '' CzAJBgNVBAYTAkdCMRswGQYDVQQIExJHcmVhdGVyIE1h '' SIG '' bmNoZXN0ZXIxEDAOBgNVBAcTB1NhbGZvcmQxGDAWBgNV '' SIG '' BAoTD1NlY3RpZ28gTGltaXRlZDEkMCIGA1UEAxMbU2Vj '' SIG '' dGlnbyBSU0EgQ29kZSBTaWduaW5nIENBMIIBIjANBgkq '' SIG '' hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAhiKNMoV6GJ9J '' SIG '' 8JYvYwgeLdx8nxTP4ya2JWYpQIZURnQxYsUQ7bKHJ6aZ '' SIG '' y5UwwFb1pHXGqQ5QYqVRkRBq4Etirv3w+Bisp//uLjMg '' SIG '' +gwZiahse60Aw2Gh3GllbR9uJ5bXl1GGpvQn5Xxqi5Ue '' SIG '' W2DVftcWkpwAL2j3l+1qcr44O2Pej79uTEFdEiAIWeg5 '' SIG '' zY/S1s8GtFcFtk6hPldrH5i8xGLWGwuNx2YbSp+dgcRy '' SIG '' QLXiX+8LRf+jzhemLVWwt7C8VGqdvI1WU8bwunlQSSz3 '' SIG '' A7n+L2U18iLqLAevRtn5RhzcjHxxKPP+p8YU3VWRbooR '' SIG '' Dd8GJJV9D6ehfDrahjVh0wIDAQABo4IBZDCCAWAwHwYD '' SIG '' VR0jBBgwFoAUU3m/WqorSs9UgOHYm8Cd8rIDZsswHQYD '' SIG '' VR0OBBYEFA7hOqhTOjHVir7Bu61nGgOFrTQOMA4GA1Ud '' SIG '' DwEB/wQEAwIBhjASBgNVHRMBAf8ECDAGAQH/AgEAMB0G '' SIG '' A1UdJQQWMBQGCCsGAQUFBwMDBggrBgEFBQcDCDARBgNV '' SIG '' HSAECjAIMAYGBFUdIAAwUAYDVR0fBEkwRzBFoEOgQYY/ '' SIG '' aHR0cDovL2NybC51c2VydHJ1c3QuY29tL1VTRVJUcnVz '' SIG '' dFJTQUNlcnRpZmljYXRpb25BdXRob3JpdHkuY3JsMHYG '' SIG '' CCsGAQUFBwEBBGowaDA/BggrBgEFBQcwAoYzaHR0cDov '' SIG '' L2NydC51c2VydHJ1c3QuY29tL1VTRVJUcnVzdFJTQUFk '' SIG '' ZFRydXN0Q0EuY3J0MCUGCCsGAQUFBzABhhlodHRwOi8v '' SIG '' b2NzcC51c2VydHJ1c3QuY29tMA0GCSqGSIb3DQEBDAUA '' SIG '' A4ICAQBNY1DtRzRKYaTb3moqjJvxAAAeHWJ7Otcywvaz '' SIG '' 4GOz+2EAiJobbRAHBE++uOqJeCLrD0bs80ZeQEaJEvQL '' SIG '' d1qcKkE6/Nb06+f3FZUzw6GDKLfeL+SU94Uzgy1KQEi/ '' SIG '' msJPSrGPJPSzgTfTt2SwpiNqWWhSQl//BOvhdGV5CPWp '' SIG '' k95rcUCZlrp48bnI4sMIFrGrY1rIFYBtdF5KdX6luMNs '' SIG '' tc/fSnmHXMdATWM19jDTz7UKDgsEf6BLrrujpdCEAJM+ '' SIG '' U100pQA1aWy+nyAlEA0Z+1CQYb45j3qOTfafDh7+B1ES '' SIG '' ZoMmGUiVzkrJwX/zOgWb+W/fiH/AI57SHkN6RTHBnE2p '' SIG '' 8FmyWRnoao0pBAJ3fEtLzXC+OrJVWng+vLtvAxAldxU0 '' SIG '' ivk2zEOS5LpP8WKTKCVXKftRGcehJUBqhFfGsp2xvBwK '' SIG '' 2nxnfn0u6ShMGH7EezFBcZpLKewLPVdQ0srd/Z4FUeVE '' SIG '' eN0B3rF1mA1UJP3wTuPi+IO9crrLPTru8F4XkmhtyGH5 '' SIG '' pvEqCgulufSe7pgyBYWe6/mDKdPGLH29OncuizdCoGqC '' SIG '' 7TtKqpQQpOEN+BfFtlp5MxiS47V1+KHpjgolHuQe8Z9a '' SIG '' hyP/n6RRnvs5gBHN27XEp6iAb+VT1ODjosLSWxr6MiYt '' SIG '' aldwHDykWC6j81tLB9wyWfOHpxptWDCCBuwwggTUoAMC '' SIG '' AQICEDAPb6zdZph0fKlGNqd4LbkwDQYJKoZIhvcNAQEM '' SIG '' BQAwgYgxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpOZXcg '' SIG '' SmVyc2V5MRQwEgYDVQQHEwtKZXJzZXkgQ2l0eTEeMBwG '' SIG '' A1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMS4wLAYD '' SIG '' VQQDEyVVU0VSVHJ1c3QgUlNBIENlcnRpZmljYXRpb24g '' SIG '' QXV0aG9yaXR5MB4XDTE5MDUwMjAwMDAwMFoXDTM4MDEx '' SIG '' ODIzNTk1OVowfTELMAkGA1UEBhMCR0IxGzAZBgNVBAgT '' SIG '' EkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2Fs '' SIG '' Zm9yZDEYMBYGA1UEChMPU2VjdGlnbyBMaW1pdGVkMSUw '' SIG '' IwYDVQQDExxTZWN0aWdvIFJTQSBUaW1lIFN0YW1waW5n '' SIG '' IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKC '' SIG '' AgEAyBsBr9ksfoiZfQGYPyCQvZyAIVSTuc+gPlPvs1rA '' SIG '' dtYaBKXOR4O168TMSTTL80VlufmnZBYmCfvVMlJ5Lslj '' SIG '' whObtoY/AQWSZm8hq9VxEHmH9EYqzcRaydvXXUlNclYP '' SIG '' 3MnjU5g6Kh78zlhJ07/zObu5pCNCrNAVw3+eolzXOPEW '' SIG '' snDTo8Tfs8VyrC4Kd/wNlFK3/B+VcyQ9ASi8Dw1Ps5EB '' SIG '' jm6dJ3VV0Rc7NCF7lwGUr3+Az9ERCleEyX9W4L1GnIK+ '' SIG '' lJ2/tCCwYH64TfUNP9vQ6oWMilZx0S2UTMiMPNMUopy9 '' SIG '' Jv/TUyDHYGmbWApU9AXn/TGs+ciFF8e4KRmkKS9G493b '' SIG '' kV+fPzY+DjBnK0a3Na+WvtpMYMyou58NFNQYxDCYdIIh '' SIG '' z2JWtSFzEh79qsoIWId3pBXrGVX/0DlULSbuRRo6b83X '' SIG '' hPDX8CjFT2SDAtT74t7xvAIo9G3aJ4oG0paH3uhrDvBb '' SIG '' fel2aZMgHEqXLHcZK5OVmJyXnuuOwXhWxkQl3wYSmgYt '' SIG '' nwNe/YOiU2fKsfqNoWTJiJJZy6hGwMnypv99V9sSdvqK '' SIG '' QSTUG/xypRSi1K1DHKRJi0E5FAMeKfobpSKupcNNgtCN '' SIG '' 2mu32/cYQFdz8HGj+0p9RTbB942C+rnJDVOAffq2OVgy '' SIG '' 728YUInXT50zvRq1naHelUF6p4MCAwEAAaOCAVowggFW '' SIG '' MB8GA1UdIwQYMBaAFFN5v1qqK0rPVIDh2JvAnfKyA2bL '' SIG '' MB0GA1UdDgQWBBQaofhhGSAPw0F3RSiO0TVfBhIEVTAO '' SIG '' BgNVHQ8BAf8EBAMCAYYwEgYDVR0TAQH/BAgwBgEB/wIB '' SIG '' ADATBgNVHSUEDDAKBggrBgEFBQcDCDARBgNVHSAECjAI '' SIG '' MAYGBFUdIAAwUAYDVR0fBEkwRzBFoEOgQYY/aHR0cDov '' SIG '' L2NybC51c2VydHJ1c3QuY29tL1VTRVJUcnVzdFJTQUNl '' SIG '' cnRpZmljYXRpb25BdXRob3JpdHkuY3JsMHYGCCsGAQUF '' SIG '' BwEBBGowaDA/BggrBgEFBQcwAoYzaHR0cDovL2NydC51 '' SIG '' c2VydHJ1c3QuY29tL1VTRVJUcnVzdFJTQUFkZFRydXN0 '' SIG '' Q0EuY3J0MCUGCCsGAQUFBzABhhlodHRwOi8vb2NzcC51 '' SIG '' c2VydHJ1c3QuY29tMA0GCSqGSIb3DQEBDAUAA4ICAQBt '' SIG '' VIGlM10W4bVTgZF13wN6MgstJYQRsrDbKn0qBfW8Oyf0 '' SIG '' WqC5SVmQKWxhy7VQ2+J9+Z8A70DDrdPi5Fb5WEHP8ULl '' SIG '' EH3/sHQfj8ZcCfkzXuqgHCZYXPO0EQ/V1cPivNVYeL9I '' SIG '' duFEZ22PsEMQD43k+ThivxMBxYWjTMXMslMwlaTW9JZW '' SIG '' CLjNXH8Blr5yUmo7Qjd8Fng5k5OUm7Hcsm1BbWfNyW+Q '' SIG '' PX9FcsEbI9bCVYRm5LPFZgb289ZLXq2jK0KKIZL+qG9a '' SIG '' JXBigXNjXqC72NzXStM9r4MGOBIdJIct5PwC1j53BLwE '' SIG '' NrXnd8ucLo0jGLmjwkcd8F3WoXNXBWiap8k3ZR2+6rzY '' SIG '' QoNDBaWLpgn/0aGUpk6qPQn1BWy30mRa2Coiwkud8Tle '' SIG '' TN5IPZs0lpoJX47997FSkc4/ifYcobWpdR9xv1tDXWU9 '' SIG '' UIFuq/DQ0/yysx+2mZYm9Dx5i1xkzM3uJ5rloMAMcofB '' SIG '' bk1a0x7q8ETmMm8c6xdOlMN4ZSA7D0GqH+mhQZ3+sbig '' SIG '' ZSo04N6o+TzmwTC7wKBjLPxcFgCo0MR/6hGdHgbGpm0y '' SIG '' XbQ4CStJB6r97DDa8acvz7f9+tCjhNknnvsBZne5VhDh '' SIG '' IG7GrrH5trrINV0zdo7xfCAMKneutaIChrop7rRaALGM '' SIG '' q+P5CslUXdS5anSevUiumDCCBwcwggTvoAMCAQICEQCM '' SIG '' d6AAj/TRsMY9nzpIg41rMA0GCSqGSIb3DQEBDAUAMH0x '' SIG '' CzAJBgNVBAYTAkdCMRswGQYDVQQIExJHcmVhdGVyIE1h '' SIG '' bmNoZXN0ZXIxEDAOBgNVBAcTB1NhbGZvcmQxGDAWBgNV '' SIG '' BAoTD1NlY3RpZ28gTGltaXRlZDElMCMGA1UEAxMcU2Vj '' SIG '' dGlnbyBSU0EgVGltZSBTdGFtcGluZyBDQTAeFw0yMDEw '' SIG '' MjMwMDAwMDBaFw0zMjAxMjIyMzU5NTlaMIGEMQswCQYD '' SIG '' VQQGEwJHQjEbMBkGA1UECBMSR3JlYXRlciBNYW5jaGVz '' SIG '' dGVyMRAwDgYDVQQHEwdTYWxmb3JkMRgwFgYDVQQKEw9T '' SIG '' ZWN0aWdvIExpbWl0ZWQxLDAqBgNVBAMMI1NlY3RpZ28g '' SIG '' UlNBIFRpbWUgU3RhbXBpbmcgU2lnbmVyICMyMIICIjAN '' SIG '' BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAkYdLLIvB '' SIG '' 8R6gntMHxgHKUrC+eXldCWYGLS81fbvA+yfaQmpZGyVM '' SIG '' 6u9A1pp+MshqgX20XD5WEIE1OiI2jPv4ICmHrHTQG2K8 '' SIG '' P2SHAl/vxYDvBhzcXk6Th7ia3kwHToXMcMUNe+zD2eOX '' SIG '' 6csZ21ZFbO5LIGzJPmz98JvxKPiRmar8WsGagiA6t+/n '' SIG '' 1rglScI5G4eBOcvDtzrNn1AEHxqZpIACTR0FqFXTbVKA '' SIG '' g+ZuSKVfwYlYYIrv8azNh2MYjnTLhIdBaWOBvPYfqnzX '' SIG '' wUHOrat2iyCA1C2VB43H9QsXHprl1plpUcdOpp0pb+d5 '' SIG '' kw0yY1OuzMYpiiDBYMbyAizE+cgi3/kngqGDUcK8yYIa '' SIG '' IYSyl7zUr0QcloIilSqFVK7x/T5JdHT8jq4/pXL0w1oB '' SIG '' qlCli3aVG2br79rflC7ZGutMJ31MBff4I13EV8gmBXr8 '' SIG '' gSNfVAk4KmLVqsrf7c9Tqx/2RJzVmVnFVmRb945SD2b8 '' SIG '' mD9EBhNkbunhFWBQpbHsz7joyQu+xYT33Qqd2rwpbD1W '' SIG '' 7b94Z7ZbyF4UHLmvhC13ovc5lTdvTn8cxjwE1jHFfu89 '' SIG '' 6FF+ca0kdBss3Pl8qu/CdkloYtWL9QPfvn2ODzZ1RluT '' SIG '' dsSD7oK+LK43EvG8VsPkrUPDt2aWXpQy+qD2q4lQ+s6g '' SIG '' 8wiBGtFEp8z3uDECAwEAAaOCAXgwggF0MB8GA1UdIwQY '' SIG '' MBaAFBqh+GEZIA/DQXdFKI7RNV8GEgRVMB0GA1UdDgQW '' SIG '' BBRpdTd7u501Qk6/V9Oa258B0a7e0DAOBgNVHQ8BAf8E '' SIG '' BAMCBsAwDAYDVR0TAQH/BAIwADAWBgNVHSUBAf8EDDAK '' SIG '' BggrBgEFBQcDCDBABgNVHSAEOTA3MDUGDCsGAQQBsjEB '' SIG '' AgEDCDAlMCMGCCsGAQUFBwIBFhdodHRwczovL3NlY3Rp '' SIG '' Z28uY29tL0NQUzBEBgNVHR8EPTA7MDmgN6A1hjNodHRw '' SIG '' Oi8vY3JsLnNlY3RpZ28uY29tL1NlY3RpZ29SU0FUaW1l '' SIG '' U3RhbXBpbmdDQS5jcmwwdAYIKwYBBQUHAQEEaDBmMD8G '' SIG '' CCsGAQUFBzAChjNodHRwOi8vY3J0LnNlY3RpZ28uY29t '' SIG '' L1NlY3RpZ29SU0FUaW1lU3RhbXBpbmdDQS5jcnQwIwYI '' SIG '' KwYBBQUHMAGGF2h0dHA6Ly9vY3NwLnNlY3RpZ28uY29t '' SIG '' MA0GCSqGSIb3DQEBDAUAA4ICAQBKA3iQQjPsexqDCTYz '' SIG '' mFW7nUAGMGtFavGUDhlQ/1slXjvhOcRbuumVkDc3vd/7 '' SIG '' ZOzlgreVzFdVcEtO9KiH3SKFple7uCEn1KAqMZSKByGe '' SIG '' ir2nGvUCFctEUJmM7D66A3emggKQwi6Tqb4hNHVjueAt '' SIG '' D88BN8uNovq4WpquoXqeE5MZVY8JkC7f6ogXFutp1uEl '' SIG '' vUUIl4DXVCAoT8p7s7Ol0gCwYDRlxOPFw6XkuoWqemnb '' SIG '' daQ+eWiaNotDrjbUYXI8DoViDaBecNtkLwHHwaHHJJSj '' SIG '' sjxusl6i0Pqo0bglHBbmwNV/aBrEZSk1Ki2IvOqudNaC '' SIG '' 58CIuOFPePBcysBAXMKf1TIcLNo8rDb3BlKao0AwF7Ap '' SIG '' FpnJqreISffoCyUztT9tr59fClbfErHD7s6Rd+ggE+lc '' SIG '' JMfqRAtK5hOEHE3rDbW4hqAwp4uhn7QszMAWI8mR5UID '' SIG '' S4DO5E3mKgE+wF6FoCShF0DV29vnmBCk8eoZG4BU+keJ '' SIG '' 6JiBqXXADt/QaJR5oaCejra3QmbL2dlrL03Y3j4yHiDk '' SIG '' 7JxNQo2dxzOZgjdE1CYpJkCOeC+57vov8fGP/lC4eN0U '' SIG '' lt4cDnCwKoVqsWxo6SrkECtuIf3TfJ035CoG1sPx12jj '' SIG '' Twd5gQgT/rJkXumxPObQeCOyCSziJmK/O6mXUczHRDKB '' SIG '' sq/P3zGCBbgwggW0AgEBMIGRMHwxCzAJBgNVBAYTAkdC '' SIG '' MRswGQYDVQQIExJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAO '' SIG '' BgNVBAcTB1NhbGZvcmQxGDAWBgNVBAoTD1NlY3RpZ28g '' SIG '' TGltaXRlZDEkMCIGA1UEAxMbU2VjdGlnbyBSU0EgQ29k '' SIG '' ZSBTaWduaW5nIENBAhEAuaDJAfPx82iVghMQDByAxDAJ '' SIG '' BgUrDgMCGgUAoIGsMBkGCSqGSIb3DQEJAzEMBgorBgEE '' SIG '' AYI3AgEEMBwGCisGAQQBgjcCAQsxDjAMBgorBgEEAYI3 '' SIG '' AgEVMCMGCSqGSIb3DQEJBDEWBBSlL088wNR+/UxNbul0 '' SIG '' uDT9+T7SqzBMBgorBgEEAYI3AgEMMT4wPKAegBwARgBy '' SIG '' AGUAcwBoAFMAdABhAHIAdABfAFMAUQBMoRqAGGh0dHA6 '' SIG '' Ly93d3cuZHJiYWNrdXAubmV0IDANBgkqhkiG9w0BAQEF '' SIG '' AASCAQAGTdhdNkxSlC0O5+6Z2TYdQFbkdzOOlBSxkvDf '' SIG '' gR+LdSONARCTfdTgU99EmAPws59YpKs1z5s0XWSzOyzo '' SIG '' jVmV3OEvvB39rF93uDpP6sVCSFa6UOGn6jEoFCDEFbzN '' SIG '' Vt+zNLnW1Q/w4+Ajda9IoqozpFpkbiuzz2r1ck+XJ9uZ '' SIG '' JyPqLdisR4CyPi4dmC5R1wfPAhProYNmre58I4iTZLaK '' SIG '' tB2IaPSqUZihquB04H8JjOMXIGfQDmohj8ukc7zI6KPB '' SIG '' gNda1yzLQUeCq3rGPJmsPOfzZtwAZvw20+yD+8wqL0C/ '' SIG '' NJn+/Xk5jcEIVHw/4NQhrS0DzsHzDeU5o5sAFwtKoYID '' SIG '' TDCCA0gGCSqGSIb3DQEJBjGCAzkwggM1AgEBMIGSMH0x '' SIG '' CzAJBgNVBAYTAkdCMRswGQYDVQQIExJHcmVhdGVyIE1h '' SIG '' bmNoZXN0ZXIxEDAOBgNVBAcTB1NhbGZvcmQxGDAWBgNV '' SIG '' BAoTD1NlY3RpZ28gTGltaXRlZDElMCMGA1UEAxMcU2Vj '' SIG '' dGlnbyBSU0EgVGltZSBTdGFtcGluZyBDQQIRAIx3oACP '' SIG '' 9NGwxj2fOkiDjWswDQYJYIZIAWUDBAICBQCgeTAYBgkq '' SIG '' hkiG9w0BCQMxCwYJKoZIhvcNAQcBMBwGCSqGSIb3DQEJ '' SIG '' BTEPFw0yMTExMjkxOTIzMjJaMD8GCSqGSIb3DQEJBDEy '' SIG '' BDCLUuQJLFTJ78ISR7JdLPKEqkZAhrEEZeYoG/XwtY0L '' SIG '' HFi67lkQq98pkd+z7InNaVowDQYJKoZIhvcNAQEBBQAE '' SIG '' ggIAiXoILCK90nCq7+dYZGPCclWiMy2dKXK1k+uW9CtU '' SIG '' AzXFEPbKS9mVu5xdjBs6sQ7p6S0hfJkUfn9KVWNsJAIL '' SIG '' OEgSwcjxKTyIFnBFqIkkmZygm8WnTf6kcku6GxRz8aTs '' SIG '' +UilbL6G9IVx/Ko/+hx/eeitb8UfkC9RX/D2ddHxF/qy '' SIG '' 8I5u+z0lRrzujEHWsN0fuphw4h2OOvQQnYbDfJVo0KzH '' SIG '' +MP3GhAE1T0gUcP5BP6ZC03SS0B6jVI6NYGShSUbMbxO '' SIG '' PsE2RWqz6MIJtTWDddSg7hU5xIir8Y5ZiL+3xXGfblyx '' SIG '' 8kO0bDMH3cyKQiLzBmfpRtk7uDA5r38TlMEGDhiuR3De '' SIG '' 93JXUJbErfMS+smK0O+fLMpjokwR5TfDCRayFSnkNEeK '' SIG '' Lj9YX/QgeP6nQxq8Gx/uV5+Ruzf76bg0mUsKjxPLLVmm '' SIG '' XKvhVGKcis3GEe3QmQmlxlBQu1UVhQ5LESTfLFfRQOZ4 '' SIG '' R1eFoSucxd2WVUMXtnu3zlLGpPpAY0cVAxFeFkLs6iDi '' SIG '' DHFINSMKqLM8VvF2IUac1rH/w/QUy0PeIf02XlnBchUS '' SIG '' vxkbcRPBIEbD0xjVT28aZBwddeAoDPmSn+T8oPDCPz3n '' SIG '' SM0PrDzJcMRsurvUF5P8Mle6VXtR0m/atynSDrclFXCH '' SIG '' PEMDuAJgfSPNc2YWgWfanoRd5g0= '' SIG '' End signature block