' VBScript source code
option explicit

const HKEY_LOCAL_MACHINE = &H80000002
Const HARD_DISK = 3
Const W7 = 61
Const WVIS = 60
Const W2K3 = 52
Const WXP = 51
Const W2K = 50
Const NT4 = 40

'begin main script

dim nNotMinReq, nNotRecReq, nOS, nTotalFree, nCount
dim sWelcomeMsg, strComputer, sVersion, sMsg, sMessageString, sSPMajorVersion, sSPMinorVersion, sOrganization
dim sSystemName, sTotalMemory, sProcessor, sProcessorSpeed, sHorizontalRes,	sVerticalRes, sDeviceID, sFreeSpace
dim strKeyPath, strValueName, strValue, sCurrentBandwidth, sAdapterName, sIPAddress 
dim objWMIService, objOperatingSystem, objComputer, objProcessor, objItem, objDisk, oReg
dim colSettings, colItems, colDisks, IPConfigSet, IPConfig, i 
dim sAdapterType, nAdapterTypeId, sTempFolder
dim bOfficeProInstalled


On Error Resume Next

nNotMinReq = 0
nNotRecReq = 0
sWelcomeMsg = "This script will check your PC to see if it meets the requirements for eLation Financials Software, click OK to continue"
if(MsgBox(sWelcomeMsg, vbOKCancel, "System Check") = vbOK)then
strComputer = "."
'Check OS and SP
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colSettings = objWMIService.ExecQuery _
    ("Select * from Win32_OperatingSystem")
For Each objOperatingSystem in colSettings
    sVersion = objOperatingSystem.Version
    If(StrComp(sVersion, "6.1.0") = 1) Then
	    sMsg = "       - OK - "
		nOS = W7		
    ElseIf(StrComp(sVersion, "6.0.0") = 1) Then
		sMsg = "       - OK - "
		nOS = WVIS
	ElseIf(StrComp(sVersion, "5.2.0") = 1) Then
		sMsg = "       - OK - "
		nOS = W2K3
	ElseIf(StrComp(sVersion, "5.1.0") = 1)then
		sMsg = "       - OK - "
		nOS = WXP
	ElseIf(StrComp(sVersion, "5.0.0") = 1)then
		sMsg = "       - WINDOWS XP OR GREATER REQUIRED -"
		nOS = W2K
		nNotMinReq = 1	
	Else
		sMsg = "       - OS NOT SUPPORTED - "
		nOS = NT4
		nNotMinReq = 1	
	End If		
	sMessageString = "OS Version: " & sVersion & sMsg & VbCrLf
    sSPMajorVersion = objOperatingSystem.ServicePackMajorVersion
    sSPMinorVersion = objOperatingSystem.ServicePackMinorVersion
    sOrganization = objOperatingSystem.Organization
    Select Case nOS
        Case W7
            sMsg = "             - OK -"
        Case WVIS
            sMsg = "             - OK - "	
		Case W2K3
		    if(StrComp(sSPMajorVersion, "0") = 1)then
				sMsg = "             - OK - "
			else
				sMsg = "     - SERVICE PACK UPGRADE REQUIRED - "
				nNotMinReq = 1
			end if					
		Case WXP
			if(StrComp(sSPMajorVersion, "1") = 1)then
				sMsg = "             - OK - "
			else
				sMsg = "     - SERVICE PACK UPGRADE REQUIRED - "
				nNotMinReq = 1
			end if		
		Case W2K
			if(StrComp(sSPMajorVersion, "3") = 1)then
				sMsg = "             - OK - "
			else
				sMsg = "     - SERVICE PACK UPGRADE REQUIRED - "
				nNotMinReq = 1
			end if    
		Case Else 
			sMsg = "       - NOT SUPPORTED - " 
			nNotMinReq = 1
	End Select

    sMessageString = sMessageString & "Service Pack: " & sSPMajorVersion & "." & sSPMinorVersion & sMsg &_
					 VbCrLf & VbCrLf
Next

'Check Memory
Set colSettings = objWMIService.ExecQuery _
    ("Select * from Win32_ComputerSystem")
For Each objComputer in colSettings
	sSystemName = objComputer.Name 
    sMessageString = "eLation System Requirements Check" & VbCrLf & VbCrLf &_
					 "System Name: " & sSystemName & VbCrLf &_
					 "Organization: " &sOrganization & VbCrLf & VbCrLf & sMessageString
    sTotalMemory = objComputer.TotalPhysicalMemory    
    if(nOS = W7)then
        if(sTotalMemory > 4000000000)then
		    sMsg = "       - OK - "
        elseif(sTotalMemory > 2000000000)then
		    sMsg = "       - ADDITIONAL MEMORY RECOMMENDED - "
		    nNotRecReq = 1
        else
		    sMsg = "       - ADDITIONAL MEMORY REQUIRED - "
		    nNotMinReq = 1
        end if        
    
    elseif(nOS = WVIS)then
        if(sTotalMemory > 4000000000)then
		    sMsg = "       - OK - "
        elseif(sTotalMemory > 2000000000)then
		    sMsg = "       - ADDITIONAL MEMORY RECOMMENDED - "
		    nNotRecReq = 1
        else
		    sMsg = "       - ADDITIONAL MEMORY REQUIRED - "
		    nNotMinReq = 1
        end if        
    else    
        if(sTotalMemory > 2000000000)then
		    sMsg = "       - OK - "
        elseif(sTotalMemory > 1000000000)then
		    sMsg = "       - ADDITIONAL MEMORY RECOMMENDED - "
		    nNotRecReq = 1
        else
		    sMsg = "       - ADDITIONAL MEMORY REQUIRED - "
		    nNotMinReq = 1
        end if        
    end if
    sMessageString = sMessageString & "Total Physical Memory: " & sTotalMemory & sMsg & VbCrLf & VbCrLf
Next

'Check Processor
Set colSettings = objWMIService.ExecQuery _
    ("Select * from Win32_Processor")
For Each objProcessor in colSettings 
    sProcessor = objProcessor.Description
    sProcessorSpeed = objProcessor.MaxClockSpeed
    if(sProcessorSpeed > 2000)then
        sMsg = "       - OK - "
    elseif(sProcessorSpeed > 1000)then
		sMsg = "       - FASTER PROCESSOR RECOMMENDED -"
		nNotRecReq = 1
	else
		sMsg = "       - FASTER PROCESSOR REQUIRED -"
		nNotMinReq = 1
    end if
    sMessageString = sMessageString & "Processor: " & sProcessor & VbCrLf
    sMessageString = sMessageString & "Processor Speed: " & sProcessorSpeed & sMsg & VbCrLf
    
Next
sMessageString = sMessageString & VbCrLf

'Check Video Resolution
Set colItems = objWMIService.ExecQuery("Select * from Win32_VideoController")
For Each objItem in colItems
	sHorizontalRes = objItem.CurrentHorizontalResolution
	sVerticalRes = objItem.CurrentVerticalResolution	
	if((sHorizontalRes < 1020)Or(sVerticalRes < 760))then
		sMsg = "       - 1024 x 768 or GREATER RECOMMENDED - "
		nNotRecReq = 1
    else
		sMsg = "       - OK - "		
    end if        
    sMessageString = sMessageString & "Video Resolution: " & sHorizontalRes & " x " &_
					 sVerticalRes & sMsg & VbCrLf & VbCrLf	
Next
 


'Check free space
Set colDisks = objWMIService.ExecQuery _
    ("Select * from Win32_LogicalDisk Where DriveType = " & HARD_DISK & "")
nTotalFree = 0
For Each objDisk in colDisks
    sDeviceID = objDisk.DeviceID
    sFreeSpace = objDisk.FreeSpace
    nTotalFree = nTotalFree + sFreeSpace  
    if(sFreeSpace > 200000000)then
        sMsg = "       - OK - "
    else
		sMsg = "       - INADEQUATE FREE SPACE - "		
    end if
    sMessageString = sMessageString & "Disk " & sDeviceID & " Free Disk Space: " & sFreeSpace &_
					 sMsg & VbCrLf      
Next
if(nTotalFree < 200000000)then
	nNotMinReq = 1
end if

sMessageString = sMessageString & VbCrLf

'Check for Frameworks
Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")
'strKeyPath = "SOFTWARE\Microsoft\.NETFramework\policy\v2.0"
'strValueName = "50727"
'strValue = ""
'oReg.GetStringValue HKEY_LOCAL_MACHINE,strKeyPath,strValueName,strValue
'If(StrComp(strValue, "") = 1) Then
'	sMsg = "       - OK - "		
'Else	
'	sMsg = "       - NOT INSTALLED - "		
'End If		
'sMessageString = sMessageString & "Microsoft Framework 2.0: " & sMsg & VbCrLf & VbCrLf 

'strKeyPath = "SOFTWARE\Microsoft\.NETFramework\AssemblyFolders\v3.5"
'strValueName = "All Assemblies In"
'strValue = ""
'oReg.GetStringValue HKEY_LOCAL_MACHINE,strKeyPath,strValueName,strValue
'If(StrComp(strValue, "") = 1) Then
'	sMsg = "       - OK - "		
'Else	
'	sMsg = "       - NOT INSTALLED - "		
'End If		
'sMessageString = sMessageString & "Microsoft Framework 3.5 " & sMsg & VbCrLf   

strKeyPath = "SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full"
strValueName = "Version"
strValue = ""
oReg.GetStringValue HKEY_LOCAL_MACHINE,strKeyPath,strValueName,strValue
If(StrComp(strValue, "") = 1) Then
	sMsg = "       - OK - "		
Else	
	sMsg = "       - NOT INSTALLED - "		
End If		
sMessageString = sMessageString & "Microsoft Framework 4.0 " & sMsg & VbCrLf & VbCrLf      

'Check for Office 2003 Professional
sMessageString = sMessageString & "Microsoft Office Required for Excel Reports" & VbCrLf 
strKeyPath = "SOFTWARE\Microsoft\Office\11.0\Registration\{90110409-6000-11D3-8CFE-0150048383C9}"
strValueName = "ProductName"
strValue = ""
oReg.GetStringValue HKEY_LOCAL_MACHINE,strKeyPath,strValueName,strValue
If(StrComp(strValue, "") = 1) Then
    sMsg = "             - OK - "
Else
    'try 64 bit install path
    strKeyPath = "SOFTWARE\Wow6432Node\Microsoft\Office\11.0\Registration\{90110409-6000-11D3-8CFE-0150048383C9}"
    strValue = ""
    oReg.GetStringValue HKEY_LOCAL_MACHINE,strKeyPath,strValueName,strValue
    If(StrComp(strValue, "") = 1) Then
	    sMsg = "       - OK - "	
	else	
	    sMsg = "       - NOT INSTALLED -"		
	end if
End If		
sMessageString = sMessageString & "Microsoft Office 2003 Pro: " & sMsg & VbCrLf

'Check for Office 2007 
'all 2007 suites are ok
strKeyPath = "SOFTWARE\Microsoft\Office\12.0\Common\InstallRoot"
strValueName = "Path"
strValue = ""
oReg.GetStringValue HKEY_LOCAL_MACHINE,strKeyPath,strValueName,strValue
If(StrComp(strValue, "") = 1) Then
    sMsg = "             - OK - "
Else
    'try 64 bit install path
    strKeyPath = "SOFTWARE\Wow6432Node\Microsoft\Office\12.0\Common\InstallRoot"
    strValue = ""
    oReg.GetStringValue HKEY_LOCAL_MACHINE,strKeyPath,strValueName,strValue
    If(StrComp(strValue, "") = 1) Then
	    sMsg = "       - OK - "	
	else	
	    sMsg = "       - NOT INSTALLED -"		
	end if
End If		
sMessageString = sMessageString & "Microsoft Office 2007: " & sMsg & VbCrLf 

'all 2010 suites are ok
strKeyPath = "SOFTWARE\Microsoft\Office\14.0\Common\InstallRoot"
strValueName = "Path"
strValue = ""
oReg.GetStringValue HKEY_LOCAL_MACHINE,strKeyPath,strValueName,strValue
If(StrComp(strValue, "") = 1) Then
    sMsg = "             - OK - "
Else
    'try 64 bit install path
    strKeyPath = "SOFTWARE\Wow6432Node\Microsoft\Office\14.0\Common\InstallRoot"
    strValue = ""
    oReg.GetStringValue HKEY_LOCAL_MACHINE,strKeyPath,strValueName,strValue
    If(StrComp(strValue, "") = 1) Then
	    sMsg = "       - OK - "	
	else	
	    sMsg = "       - NOT INSTALLED -"		
	end if
End If		
sMessageString = sMessageString & "Microsoft Office 2010: " & sMsg & VbCrLf & VbCrLf 
      

'Get connection speed
if((nOS = WVIS)or(nOS = W7))then
    Set colItems = objWMIService.ExecQuery("Select * from Win32_NetworkAdapter",,48)
    nCount = 0
    For Each objItem in colItems
	    sCurrentBandwidth = objItem.Speed	
	    sAdapterName = objItem.Description
	    sAdapterType = objItem.AdapterType
	    nAdapterTypeID = objItem.AdapterTypeID
	    if(StrComp(sAdapterType, "Ethernet 802.3") = 0)then
		    'have an adapter - check to see if it is right type
		    if(nAdapterType = 0)then
		        if not((StrComp(objItem.ServiceName, "tunmp") = 0)or(StrComp(objItem.ServiceName, "VPCNetS2") = 0)) then
		          if not(StrComp(sAdapterName, "Deterministic Network Enhancer Miniport") = 0)then
		                'not vista miniport
		            nCount = nCount + 1
			        sMessageString = sMessageString & "Network Adapter: " & sAdapterName & VbCrLf
			        if(sCurrentBandwidth >= 100000000)then
				        sMsg = "       - OK - "		
			        elseif(sCurrentBandwidth >= 36000000)then
				        'wireless 54G
				        sMsg = "       - OK - "
				        nNotRecReq = 1		
			        else
				        sMsg = "       - SLOW CONNECTION 100 MG REQUIRED -"
				        nNotMinReq = 1
			        end if
			        sMessageString = sMessageString & "Bandwidth: " & sCurrentBandwidth & sMsg & VbCrLf & VbCrLf       
			      end if
			    end if
		    end if
	    end if
    Next
    if(nCount = 0)then
	    sMessageString = sMessageString & "Network Adapter: - UNABLE TO CHECK - Please verify connection speed is 100 MG." & VbCrLf & VbCrLf
    end if
else
    Set colItems = objWMIService.ExecQuery("Select * from Win32_PerfFormattedData_Tcpip_NetworkInterface",,48)
    nCount = 0
    For Each objItem in colItems
	    sCurrentBandwidth = objItem.CurrentBandwidth	
	    sAdapterName = objItem.Name
	    if(StrComp(sAdapterName, "") = 1)then
		    'have an adapter - check to see of it is loopback
		    if not(StrComp(sAdapterName, "MS TCP Loopback interface") = 0)then
			    'not loopback	
			    nCount = nCount + 1
			    sMessageString = sMessageString & "Network Adapter: " & sAdapterName & VbCrLf
			    if(sCurrentBandwidth >= 100000000)then
				    sMsg = "       - OK - "		
			    elseif(sCurrentBandwidth >= 36000000)then
				    'wireless 54G
				    sMsg = "       - OK - "
				    nNotRecReq = 1		
			    else
				    sMsg = "       - SLOW CONNECTION 100 MG REQUIRED -"
				    nNotMinReq = 1
			    end if
			    sMessageString = sMessageString & "Bandwidth: " & sCurrentBandwidth & sMsg & VbCrLf & VbCrLf       
		    end if
	    end if
    Next
    if(nCount = 0)then
	    sMessageString = sMessageString & "Network Adapter: - UNABLE TO CHECK - Please verify connection speed is 100 MG." & VbCrLf & VbCrLf
    end if
end if


'Get IP address
Set IPConfigSet = objWMIService.ExecQuery _
    ("Select IPAddress from Win32_NetworkAdapterConfiguration where IPEnabled=TRUE")
 
For Each IPConfig in IPConfigSet
    If Not IsNull(IPConfig.IPAddress) Then 
        For i=LBound(IPConfig.IPAddress) to UBound(IPConfig.IPAddress)
            sIPAddress = IPConfig.IPAddress(i)
            sMessageString = sMessageString & "IP Address: " & sIPAddress & VbCrLf
        Next
    End If
Next

if(len(sMessageString) > 935)then
    'need to truncate to display last message
    sMessageString = Left(sMessageString, 935)
    sMessageString = sMessageString & VbCrLf
end if

if(nNotMinReq = 1)then
	sMessageString = sMessageString & VbCrLf & "This system DOES NOT meet eLation MINIMUM requirements." 
elseif(nNotRecReq = 1)then
	sMessageString = sMessageString & VbCrLf & "This system meets eLation MINIMUM requirements." 
else
	sMessageString = sMessageString & VbCrLf & "This system meets eLation RECOMMENDED requirements." 
end if
 
MsgBox sMessageString, vbOKOnly, "System Check"

Set IPConfigSet = nothing
Set colItems = nothing
Set oReg = nothing
Set colDisks = nothing
Set colSettings = nothing
Set objWMIService = nothing


if(MsgBox("Do you want to save the results and email to Innovative Systems?",vbYesNo, "Save Results") = vbYes)then
	eMailAndSave(sMessageString)
end if

end if 

'end of main script

function eMailAndSave(sString)
	dim objFSO
	dim objTextFile
	dim objShell
	dim objEmail
	dim sCompanyName
			
	on error resume next
	
	sCompanyName = InputBox("Please enter your Company Name","Company Name")
			
	Set objFSO = CreateObject("Scripting.FileSystemObject")
	if(IsObject(objFSO))then
	    Set objShell = CreateObject("WScript.Shell")
	    if(IsObject(objShell))then
			sTempFolder = objShell.ExpandEnvironmentStrings("%TEMP%")
			set objShell = nothing
		end if		
		Set objTextFile = objFSO.OpenTextFile(sTempFolder & "\eLationCheck.txt", 2, True)
		if(IsObject(objTextFile))then
			objTextFile.WriteLine(sString)
			objTextFile.Close
			set objTextFile = nothing
			Set objShell = CreateObject("WScript.Shell")
			if(IsObject(objShell))then
			    objShell.Run "notepad.exe " & sTempFolder & "\eLationCheck.txt" 
				set objShell = nothing
			end if
		end if
		set objFSO = nothing
	end if	
		
	Set objEmail = CreateObject("CDO.Message")
	if(IsObject(objEmail))then
		objEmail.From = "eLationCheck@innovsys.com"
		objEmail.To = "eLationSysChk@innovsys.com"
		objEmail.Subject = "eLation Check from " & sCompanyName 
		objEmail.Textbody = sString
		objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
		objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.innovsys.com" 
		objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
		objEmail.Configuration.Fields.Update
		objEmail.Send
		set objEmail = nothing
	end if

end function


'' SIG '' Begin signature block
'' SIG '' MIITWAYJKoZIhvcNAQcCoIITSTCCE0UCAQExCzAJBgUr
'' SIG '' DgMCGgUAMGcGCisGAQQBgjcCAQSgWTBXMDIGCisGAQQB
'' SIG '' gjcCAR4wJAIBAQQQTvApFpkntU2P5azhDxfrqwIBAAIB
'' SIG '' AAIBAAIBAAIBADAhMAkGBSsOAwIaBQAEFN6uPbMz/HX2
'' SIG '' INqkqGXHDCWRCEixoIIQYTCCBNMwggO7oAMCAQICEBja
'' SIG '' 0Z4mfei7SiFYzcxrO0owDQYJKoZIhvcNAQEFBQAwgcox
'' SIG '' CzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwg
'' SIG '' SW5jLjEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0
'' SIG '' d29yazE6MDgGA1UECxMxKGMpIDIwMDYgVmVyaVNpZ24s
'' SIG '' IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTFF
'' SIG '' MEMGA1UEAxM8VmVyaVNpZ24gQ2xhc3MgMyBQdWJsaWMg
'' SIG '' UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt
'' SIG '' IEc1MB4XDTA2MTEwODAwMDAwMFoXDTM2MDcxNjIzNTk1
'' SIG '' OVowgcoxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJp
'' SIG '' U2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1
'' SIG '' c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDIwMDYgVmVy
'' SIG '' aVNpZ24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ug
'' SIG '' b25seTFFMEMGA1UEAxM8VmVyaVNpZ24gQ2xhc3MgMyBQ
'' SIG '' dWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhv
'' SIG '' cml0eSAtIEc1MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
'' SIG '' MIIBCgKCAQEAryQICCl6NZ5gDKrnSztO3Hy8PEUcuyvg
'' SIG '' /ikC+VcIo2SFFSf18a3IMYldIugqqqZCs4/4uVW3sbdL
'' SIG '' s/6PfgdX7O9D22ZiFWHPYA2k2N744MNiCD1UE+tJyllU
'' SIG '' hSblK48bn+v1oZHCM0nYQ2NqUkvSj+hwUU3RiWl7x3D2
'' SIG '' s9wSdNt7XUtW05a/FXehsPSiJfKvHJJnGOX0BgTvkLnk
'' SIG '' AOTdOrUZ/wK69Dzu4IvrN4vs9Nes8vbwPa/ddZEzGR0c
'' SIG '' QMt0JBkhk9kU/qwqUseP1QRJ5I1jR4g8aYPL/ke9K35P
'' SIG '' xZWuDp3U0UPAZ3PjFAh+5T+fc7gzCs9dPzSHloruU+gl
'' SIG '' FQIDAQABo4GyMIGvMA8GA1UdEwEB/wQFMAMBAf8wDgYD
'' SIG '' VR0PAQH/BAQDAgEGMG0GCCsGAQUFBwEMBGEwX6FdoFsw
'' SIG '' WTBXMFUWCWltYWdlL2dpZjAhMB8wBwYFKw4DAhoEFI/l
'' SIG '' 0xqGrI2Oa8PPgGrUSBgsexkuMCUWI2h0dHA6Ly9sb2dv
'' SIG '' LnZlcmlzaWduLmNvbS92c2xvZ28uZ2lmMB0GA1UdDgQW
'' SIG '' BBR/02Wnwt3su/AwCfNDOfoCrzMxMzANBgkqhkiG9w0B
'' SIG '' AQUFAAOCAQEAkyRKMF9iz9gamC896tyZLb139qV5Ijjs
'' SIG '' xKegeBKtYg5FcGTF55dmLZgJfl+v1swoZfIBqggaR975
'' SIG '' +XySWghpIA3ZPm1uPA1u2OYGkUAYufjB7d/bQargliDJ
'' SIG '' zWQVOIHJlO6ihCkLE2+O2wzdJQLbpIsZRNJBegVpSlhP
'' SIG '' YMp+gmoLAqolFzm123/nhGUqlYq9ht5egRaDLRDM3v2o
'' SIG '' giptKB8NC8Tl5xomGeH0EW8QtZX850IFMtvOnVFeKLae
'' SIG '' hdNb76V9RUByjrcOaw4G+zM1SHG4nSeLxGVfDYZ2nER6
'' SIG '' 9pVc9l0yCDOkVLYYP2hc8kJKhThUg1/R6CzyrBHWqO1j
'' SIG '' ajCCBXgwggRgoAMCAQICEEKHWrwZF7XVOGQi/nE/GBcw
'' SIG '' DQYJKoZIhvcNAQEFBQAwgbQxCzAJBgNVBAYTAlVTMRcw
'' SIG '' FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMW
'' SIG '' VmVyaVNpZ24gVHJ1c3QgTmV0d29yazE7MDkGA1UECxMy
'' SIG '' VGVybXMgb2YgdXNlIGF0IGh0dHBzOi8vd3d3LnZlcmlz
'' SIG '' aWduLmNvbS9ycGEgKGMpMTAxLjAsBgNVBAMTJVZlcmlT
'' SIG '' aWduIENsYXNzIDMgQ29kZSBTaWduaW5nIDIwMTAgQ0Ew
'' SIG '' HhcNMTEwMzE3MDAwMDAwWhcNMTQwNDAzMjM1OTU5WjCB
'' SIG '' uzELMAkGA1UEBhMCVVMxFTATBgNVBAgTDFNvdXRoIERh
'' SIG '' a290YTERMA8GA1UEBxMITWl0Y2hlbGwxIDAeBgNVBAoU
'' SIG '' F0lubm92YXRpdmUgU3lzdGVtcywgTExDMT4wPAYDVQQL
'' SIG '' EzVEaWdpdGFsIElEIENsYXNzIDMgLSBNaWNyb3NvZnQg
'' SIG '' U29mdHdhcmUgVmFsaWRhdGlvbiB2MjEgMB4GA1UEAxQX
'' SIG '' SW5ub3ZhdGl2ZSBTeXN0ZW1zLCBMTEMwggEiMA0GCSqG
'' SIG '' SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDMKDQNMoLmqpkx
'' SIG '' V81dYvsAz6VcQgcASTG2UzGbad2FyCoLRfo8qdubFrt3
'' SIG '' oFB6QSJUCf+l1xrif0ij4OQvc7EWR2qbDU+WKzUx7YX7
'' SIG '' xSaW77ZmuhzbTVPEHPsllmc/NkMTrSGrOuv3Pez00KuT
'' SIG '' nBqABiEqZmubKSO3z4wluL355BnqsafGopXPhNRPVzqY
'' SIG '' yxNaMXzSvU7qEaiRSdMdBsEkKtkel3zXR6DGmPjcFxGz
'' SIG '' 3A9XRpBUHKc03PoyDCsLjF10M0PnTxYpnHdPWgocv6m1
'' SIG '' szBtr21eAETBgXUjstwilsaj4SLdO8+31CNxDv41iIkS
'' SIG '' gbCSNGPV43AY3WfHjNPBAgMBAAGjggF7MIIBdzAJBgNV
'' SIG '' HRMEAjAAMA4GA1UdDwEB/wQEAwIHgDBABgNVHR8EOTA3
'' SIG '' MDWgM6Axhi9odHRwOi8vY3NjMy0yMDEwLWNybC52ZXJp
'' SIG '' c2lnbi5jb20vQ1NDMy0yMDEwLmNybDBEBgNVHSAEPTA7
'' SIG '' MDkGC2CGSAGG+EUBBxcDMCowKAYIKwYBBQUHAgEWHGh0
'' SIG '' dHBzOi8vd3d3LnZlcmlzaWduLmNvbS9ycGEwEwYDVR0l
'' SIG '' BAwwCgYIKwYBBQUHAwMwcQYIKwYBBQUHAQEEZTBjMCQG
'' SIG '' CCsGAQUFBzABhhhodHRwOi8vb2NzcC52ZXJpc2lnbi5j
'' SIG '' b20wOwYIKwYBBQUHMAKGL2h0dHA6Ly9jc2MzLTIwMTAt
'' SIG '' YWlhLnZlcmlzaWduLmNvbS9DU0MzLTIwMTAuY2VyMB8G
'' SIG '' A1UdIwQYMBaAFM+Zqep7JvRLyY6P1/AFJu/j0qedMBEG
'' SIG '' CWCGSAGG+EIBAQQEAwIEEDAWBgorBgEEAYI3AgEbBAgw
'' SIG '' BgEBAAEB/zANBgkqhkiG9w0BAQUFAAOCAQEAxW1dkfzR
'' SIG '' g596uqDjEtgPeHWeHPOks8vmol4x2QdTv1J9UTvdr6ad
'' SIG '' t5p8s9a8ZSRmXpx69ymKjJoEw3ysylg9wDuBy5M4ohUb
'' SIG '' Fn1nraNukd1+Kc8CO64TYAIx6XqzJhb2HOQ8g3wonZeb
'' SIG '' LuDFo6dMCykmmWBVt+xU65H2BK3MKO2WtG2z4hbSuSds
'' SIG '' 0VaG35H9GmlKUpxCsDvaKBXM2pXlpzErd4sI1/JzXXp+
'' SIG '' PBrSubbxnr6txCLyGrEUd9NFP1KCNjA8mbyyrwUJlD6X
'' SIG '' GDrpPpBocVTXLYo9OZRZkX0K4Stt3rszhp7cA48jz1+k
'' SIG '' +NovK+Fejqxf3uaaBDTTjyql3zCCBgowggTyoAMCAQIC
'' SIG '' EFIA5aolVvwahu2WydRLM8cwDQYJKoZIhvcNAQEFBQAw
'' SIG '' gcoxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2ln
'' SIG '' biwgSW5jLjEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3Qg
'' SIG '' TmV0d29yazE6MDgGA1UECxMxKGMpIDIwMDYgVmVyaVNp
'' SIG '' Z24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25s
'' SIG '' eTFFMEMGA1UEAxM8VmVyaVNpZ24gQ2xhc3MgMyBQdWJs
'' SIG '' aWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
'' SIG '' eSAtIEc1MB4XDTEwMDIwODAwMDAwMFoXDTIwMDIwNzIz
'' SIG '' NTk1OVowgbQxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5W
'' SIG '' ZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNpZ24g
'' SIG '' VHJ1c3QgTmV0d29yazE7MDkGA1UECxMyVGVybXMgb2Yg
'' SIG '' dXNlIGF0IGh0dHBzOi8vd3d3LnZlcmlzaWduLmNvbS9y
'' SIG '' cGEgKGMpMTAxLjAsBgNVBAMTJVZlcmlTaWduIENsYXNz
'' SIG '' IDMgQ29kZSBTaWduaW5nIDIwMTAgQ0EwggEiMA0GCSqG
'' SIG '' SIb3DQEBAQUAA4IBDwAwggEKAoIBAQD1I0tepdeKuzLp
'' SIG '' 1Ff37+THJn6tGZj+qJ19lPY2axDXdYEwfwRof8srdR7N
'' SIG '' HQiM32mUpzejnHuA4Jnh7jdNX847FO6G1ND1JzW8JQs4
'' SIG '' p4xjnRejCKWrsPvNamKCTNUh2hvZ8eOEO4oqT4VbkAFP
'' SIG '' yad2EH8nA3y+rn59wd35BbwbSJxp58CkPDxBAD7fluXF
'' SIG '' 5JRx1lUBxwAmSkA8taEmqQynbYCOkCV7z78/HOsvlvrl
'' SIG '' h3fGtVayejtUMFMb32I0/x7R9FqTKIXlTBdOflv9pJOZ
'' SIG '' f9/N76R17+8V9kfn+Bly2C40Gqa0p0x+vbtPDD1X8TDW
'' SIG '' pjaO1oB21xkupc1+NC2JAgMBAAGjggH+MIIB+jASBgNV
'' SIG '' HRMBAf8ECDAGAQH/AgEAMHAGA1UdIARpMGcwZQYLYIZI
'' SIG '' AYb4RQEHFwMwVjAoBggrBgEFBQcCARYcaHR0cHM6Ly93
'' SIG '' d3cudmVyaXNpZ24uY29tL2NwczAqBggrBgEFBQcCAjAe
'' SIG '' GhxodHRwczovL3d3dy52ZXJpc2lnbi5jb20vcnBhMA4G
'' SIG '' A1UdDwEB/wQEAwIBBjBtBggrBgEFBQcBDARhMF+hXaBb
'' SIG '' MFkwVzBVFglpbWFnZS9naWYwITAfMAcGBSsOAwIaBBSP
'' SIG '' 5dMahqyNjmvDz4Bq1EgYLHsZLjAlFiNodHRwOi8vbG9n
'' SIG '' by52ZXJpc2lnbi5jb20vdnNsb2dvLmdpZjA0BgNVHR8E
'' SIG '' LTArMCmgJ6AlhiNodHRwOi8vY3JsLnZlcmlzaWduLmNv
'' SIG '' bS9wY2EzLWc1LmNybDA0BggrBgEFBQcBAQQoMCYwJAYI
'' SIG '' KwYBBQUHMAGGGGh0dHA6Ly9vY3NwLnZlcmlzaWduLmNv
'' SIG '' bTAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwMw
'' SIG '' KAYDVR0RBCEwH6QdMBsxGTAXBgNVBAMTEFZlcmlTaWdu
'' SIG '' TVBLSS0yLTgwHQYDVR0OBBYEFM+Zqep7JvRLyY6P1/AF
'' SIG '' Ju/j0qedMB8GA1UdIwQYMBaAFH/TZafC3ey78DAJ80M5
'' SIG '' +gKvMzEzMA0GCSqGSIb3DQEBBQUAA4IBAQBWIuY0pMRh
'' SIG '' y0i5Aa1WqGQP2YyRxLvMDOWteqAif99HOEotbNF/cRp8
'' SIG '' 7HCpsfBP5A8MU/oVXv50mEkkhYEmHJEUR7BMY4y7oTTU
'' SIG '' xkXoDYUmcwPQqYxkbdxxkuZFBWAVWVE5/FgUa/7UpO15
'' SIG '' awgMQXLnNyIGCb4j6T9Emh7pYZ3MsZBc/D3SjaxCPWU2
'' SIG '' 1LQ9QCiPmxDPIybMSyDLkB9djEw0yjzY5TfWb6UgvTTr
'' SIG '' JtmuDefFmvehtCGRM2+G6Fi7JXx0Dlj+dRtjP84xfJuP
'' SIG '' G5aexVN2hFucrZH6rO2Tul3IIVPCglNjrxINUIcRGz1U
'' SIG '' UpaKLJw9khoImgUux5OlSJHTMYICYzCCAl8CAQEwgckw
'' SIG '' gbQxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2ln
'' SIG '' biwgSW5jLjEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3Qg
'' SIG '' TmV0d29yazE7MDkGA1UECxMyVGVybXMgb2YgdXNlIGF0
'' SIG '' IGh0dHBzOi8vd3d3LnZlcmlzaWduLmNvbS9ycGEgKGMp
'' SIG '' MTAxLjAsBgNVBAMTJVZlcmlTaWduIENsYXNzIDMgQ29k
'' SIG '' ZSBTaWduaW5nIDIwMTAgQ0ECEEKHWrwZF7XVOGQi/nE/
'' SIG '' GBcwCQYFKw4DAhoFAKBwMBAGCisGAQQBgjcCAQwxAjAA
'' SIG '' MBkGCSqGSIb3DQEJAzEMBgorBgEEAYI3AgEEMBwGCisG
'' SIG '' AQQBgjcCAQsxDjAMBgorBgEEAYI3AgEVMCMGCSqGSIb3
'' SIG '' DQEJBDEWBBQrOmmD4eNPIe4MNeVCo9nV5rBJejANBgkq
'' SIG '' hkiG9w0BAQEFAASCAQBstJlWbNBuOgnCdyukqJspALEQ
'' SIG '' 65SOUVvOqsDBTXOCPCi7KhR5D8+G1mJSVBrJIL/Qw3lT
'' SIG '' s6FXtI82gXFH0CY7Ae9qkM6w0IcLwFRug2vwfGbdBVQR
'' SIG '' yt7hQpWInBWtaIwdsKhInu7TdS0P2AUuuX92/K3YHCZP
'' SIG '' k9Cm6i4FN9y4ACtIKcog9NM+tvom5q4pgMZJK+vd/oSR
'' SIG '' qPNd79S+WL5Gbs3zaD/gMBrc0UdGwDdoqHP6mSN9KtcH
'' SIG '' uKYUw+VhYZqG6w9mJFFkfirP7YXwt80yU2oUcWztjZlh
'' SIG '' yYR9Nvm+5P1/3g+M6vSWJFfU8GywmKoslTggapcsTvvX
'' SIG '' 0EbZzuz0
'' SIG '' End signature block
