Dell.Connections.0013.1.0.118Dell.Connections.001System.ApplicationLog.Library6.0.6278.031bf3856ad364e35Microsoft.SystemCenter.NetworkDevice.Library6.0.6278.031bf3856ad364e35Microsoft.SystemCenter.DataWarehouse.Library6.0.6278.031bf3856ad364e35System.Snmp.Library6.0.6278.031bf3856ad364e35Microsoft.Windows.Library6.0.6278.031bf3856ad364e35System.Library6.0.6278.031bf3856ad364e35Microsoft.SystemCenter.Library6.0.6278.031bf3856ad364e35System.Health.Library6.0.6278.031bf3856ad364e35Dell.Connections.DellServerGroupDell.Connections.DellPrinterGroupDell.Connections.DellDRACDell.Connections.DellUnknownGroupDell.Connections.DellMonolithicServerGroupDell.Connections.DellModularSystemGroupDell.Connections.DellMonolithicServerDell.Connections.DellModularBladeDell.Connections.DellChassisDell.Connections.ChassisFansDell.Connections.ChassisFansUnitDell.Connections.ChassisPowerSuppliesDell.Connections.ChassisPowerSuppliesUnitDell.Connections.DellPrinterDell.Connections.DellUnknownDell.Connections.ServerHWComponentsDell.Connections.ServerServicesDell.Connections.ServerBMCDell.Connections.ServerHWComponentsSensorsDell.Connections.ServerSensorTemperatureDell.Connections.ServerSensorTemperatureUnitDell.Connections.ServerSensorVoltageDell.Connections.ServerSensorVoltageNumericUnitDell.Connections.ServerSensorVoltageDiscreteUnitDell.Connections.ServerSensorCurrentsDell.Connections.ServerSensorCurrentsNumericUnitDell.Connections.ServerSensorBatteriesDell.Connections.ServerSensorBatteriesDiscreteUnitDell.Connections.ServerFansDell.Connections.ServerFansUnitDell.Connections.ServerPowerSuppliesDell.Connections.ServerPowerSuppliesUnitDell.Connections.ServerMemoryDell.Connections.ServerMemoryUnitDell.Connections.ServerProcessorsDell.Connections.ServerProcessorsUnitDell.Connections.ServerIntrusionDell.Connections.ServerServices.DSMEventManagerDell.Connections.ServerServices.DSMSharedServicesDell.Connections.ServerServices.DSMConnServiceDell.Connections.ServerServices.DSMDataManagerDell.Connections.DellStorageDell.Connections.DellStorageControllerDell.Connections.ControllerBatteryDell.Connections.ControllerVirtualDiskDell.Connections.ControllerConnectorDell.Connections.ControllerEnclosureDell.Connections.ConnectorPhysicalDiskDell.Connections.EnclosurePhysicalDiskDell.Connections.EnclosureTemperatureDell.Connections.EnclosureFanDell.Connections.EnclosurePowerSupplyDell.Connections.EnclosureEMMDell.Connections.OOB_DRAC_GroupDell.Connections.OOB_CMC_GroupDell.Connections.DRAC_5Dell.Connections.DRACMCDell.Connections.DellServer.BIOSDell.Connections.CMC$Config/IntervalSeconds$DellServerHWComponentDiscovery.vbs$MPElement$ $Target/Id$ $Config/Computer$
'**********************************************************************************
' Script Name - Dell Server HW Component Discovery
' Author: Vignesh Pandian, Muralidhar L
'
' Description:
' Discover all hardware components for a Dell server with instrumentation using CIM
'
' (c) Copyright Dell Inc. 2007 - All rights reserved
'**********************************************************************************
Option Explicit
On Error Resume Next
Dim oArgs
Set oArgs = WScript.Arguments
if oArgs.Count < 3 Then
Wscript.Quit -1
End If
Dim SourceID, ManagedEntityId, TargetComputer
Dim FanFlag, MemFlag, PSFlag, ProcFlag, BaseboardType, TempFlag, VoltageFlag, CurrentFlag, BatteryFlag, IntrusionFlag
SourceId = oArgs(0)
ManagedEntityId = oArgs(1)
TargetComputer = oArgs(2)
FanFlag = 0
MemFlag = 0
PSFlag = 0
ProcFlag = 0
TempFlag = 0
VoltageFlag = 0
CurrentFlag = 0
BatteryFlag = 0
IntrusionFlag = 0
Dim oAPI, oDiscoveryData, oInst, strComputer, objDellConnection, LogMessage
Set oAPI = CreateObject("MOM.ScriptAPI")
set oDiscoveryData = oAPI.CreateDiscoveryData(0, SourceId, ManagedEntityId)
strComputer = TargetComputer
set objDellConnection = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2\Dell")
If Err.Number <> 0 Then
LogMessage = "WMI Cimv2Dell Error Number : " & Err.Number & ". Description :" & Err.Description
Err.Clear
Else
If IsEmpty(objDellConnection) Then
LogMessage = "Unable to open WMI Namespace root-cimv2-dell. Check to see if the WMI service is enabled and running, and Install/Re-Install ServerAdministrator to ensure this WMI namespace exists. " & Err
Else
TempDiscover()
VoltageDiscover()
CurrentDiscover()
BatteryDiscover()
DiscoverProc()
DiscoverMem()
DiscoverIntrusion()
GetBaseBoardType()
If (BaseboardType = "10") Then
DiscoverFans()
DiscoverPS()
End If
End If
End If
set oInst = oDiscoveryData.CreateClassInstance("$MPElement[Name='Dell.Connections.ServerHWComponents']$")
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.LogicalDevice']/DeviceID$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", "Hardware Components")
call oDiscoveryData.AddInstance(oInst)
If TempFlag = 1 Then
set oInst = oDiscoveryData.CreateClassInstance("$MPElement[Name='Dell.Connections.ServerSensorTemperature']$")
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.LogicalDevice']/DeviceID$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", "Temperature")
call oDiscoveryData.AddInstance(oInst)
End If
set oInst = oDiscoveryData.CreateClassInstance("$MPElement[Name='Dell.Connections.ServerHWComponentsSensors']$")
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.LogicalDevice']/DeviceID$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", "Sensors")
call oDiscoveryData.AddInstance(oInst)
If VoltageFlag = 1 Then
set oInst = oDiscoveryData.CreateClassInstance("$MPElement[Name='Dell.Connections.ServerSensorVoltage']$")
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.LogicalDevice']/DeviceID$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", "Voltage")
call oDiscoveryData.AddInstance(oInst)
End If
If CurrentFlag = 1 Then
set oInst = oDiscoveryData.CreateClassInstance("$MPElement[Name='Dell.Connections.ServerSensorCurrents']$")
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.LogicalDevice']/DeviceID$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", "Currents")
call oDiscoveryData.AddInstance(oInst)
End If
If BatteryFlag = 1 Then
set oInst = oDiscoveryData.CreateClassInstance("$MPElement[Name='Dell.Connections.ServerSensorBatteries']$")
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.LogicalDevice']/DeviceID$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", "Batteries")
call oDiscoveryData.AddInstance(oInst)
End If
If FanFlag = 1 Then
set oInst = oDiscoveryData.CreateClassInstance("$MPElement[Name='Dell.Connections.ServerFans']$")
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.LogicalDevice']/DeviceID$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", "Fans")
call oDiscoveryData.AddInstance(oInst)
End If
If PSFlag = 1 Then
set oInst = oDiscoveryData.CreateClassInstance("$MPElement[Name='Dell.Connections.ServerPowerSupplies']$")
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.LogicalDevice']/DeviceID$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", "Power Supplies")
call oDiscoveryData.AddInstance(oInst)
End If
If ProcFlag = 1 Then
set oInst = oDiscoveryData.CreateClassInstance("$MPElement[Name='Dell.Connections.ServerProcessors']$")
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.LogicalDevice']/DeviceID$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", "Processors")
call oDiscoveryData.AddInstance(oInst)
End If
If MemFlag = 1 Then
set oInst = oDiscoveryData.CreateClassInstance("$MPElement[Name='Dell.Connections.ServerMemory']$")
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.LogicalDevice']/DeviceID$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", "Memory")
call oDiscoveryData.AddInstance(oInst)
End If
If IntrusionFlag = 1 Then
set oInst = oDiscoveryData.CreateClassInstance("$MPElement[Name='Dell.Connections.ServerIntrusion']$")
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.LogicalDevice']/DeviceID$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", "Intrusion")
call oDiscoveryData.AddInstance(oInst)
End If
' Submit the data
Call oAPI.Return(oDiscoveryData)
Set oDiscoveryData = Nothing
Set oAPI = Nothing
objDellConnection = Nothing
Function BatteryDiscover()
On Error Resume next
Dim sQuery, colItems, objItemSensor
sQuery = "Select * from CIM_DiscreteSensor WHERE SensorType = '13'"
Set colItems = objDellConnection.ExecQuery(sQuery)
If Err.Number <> 0 Then
LogMessage = sQuery & " Error Number:" & Err.Number & "Description:" & Err.Description
If Err.Number = -2147023169 Then
LogMessage = "RPC Failure occurred for namespace root-cimv2-dell"
End If
Err.Clear
End If
If colItems is Nothing Then
LogMessage = "Unable to retrieve object" & sQuery
Else
For Each objItemSensor in colItems
If Err.Number <> 0 Then
If Err.Number = -2147023169 Then
LogMessage = "RPC Failure occurred for cimv2\dell info : " & Err.Number
Else
LogMessage = "Object RetrievalLoop Error Number:" & Err.Number & "Description:" & Err.Description
End If
Err.Clear
ElseIf Not objItemSensor is Nothing Then
Set oInst = oDiscoveryData.CreateClassInstance("$MPElement[Name='Dell.Connections.ServerSensorBatteriesDiscreteUnit']$")
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.LogicalDevice']/DeviceID$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", objItemSensor.Name)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ServerDiscreteSensor']/DeviceID$", objItemSensor.DeviceID)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ServerDiscreteSensor']/CurrentReading$", objItemSensor.CurrentReading)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ServerDiscreteSensor']/OtherSensorTypeDescription$", objItemSensor.OtherSensorTypeDescription)
call oDiscoveryData.AddInstance(oInst)
BatteryFlag = 1
End If
Next
End If 'colItems is nothing
set colItems = Nothing
On Error Goto 0
End Function
Function CurrentDiscover()
On Error Resume next
Dim sQuery, colItems, objItemSensor
sQuery = "Select * from CIM_CurrentSensor"
Set colItems = objDellConnection.ExecQuery(sQuery)
If Err.Number <> 0 Then
LogMessage = sQuery & " Error Number:" & Err.Number & "Description:" & Err.Description
If Err.Number = -2147023169 Then
LogMessage = "RPC Failure occurred for namespace root-cimv2-dell"
End If
Err.Clear
End If
If colItems is Nothing Then
LogMessage = "Unable to retrieve object" & sQuery
Else
For Each objItemSensor in colItems
If Err.Number <> 0 Then
If Err.Number = -2147023169 Then
LogMessage = "RPC Failure occurred for cimv2\dell info : " & Err.Number
Else
LogMessage = "Object RetrievalLoop Error Number:" & Err.Number & "Description:" & Err.Description
End If
Err.Clear
ElseIf Not objItemSensor is Nothing Then
Set oInst = oDiscoveryData.CreateClassInstance("$MPElement[Name='Dell.Connections.ServerSensorCurrentsNumericUnit']$")
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.LogicalDevice']/DeviceID$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", objItemSensor.Name)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ServerNumericSensor']/DeviceID$", objItemSensor.DeviceID)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ServerNumericSensor']/CurrentReading$", objItemSensor.CurrentReading)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ServerNumericSensor']/LowerThresholdCritical$", objItemSensor.LowerThresholdCritical)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ServerNumericSensor']/LowerThresholdNonCritical$", objItemSensor.LowerThresholdNonCritical)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ServerNumericSensor']/UpperThresholdCritical$", objItemSensor.UpperThresholdCritical)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ServerNumericSensor']/UpperThresholdNonCritical$", objItemSensor.UpperThresholdNonCritical)
call oDiscoveryData.AddInstance(oInst)
CurrentFlag = 1
End If
Next
End If 'colItems is nothing
set colItems = Nothing
On Error Goto 0
End Function
Function TempDiscover()
On Error Resume next
Dim sQuery, colItems, objItemSensor
Dim CurrentReading, LTCritical, LTNonCritical, UTCritical, UTNonCritical
sQuery = "Select * from CIM_TemperatureSensor"
Set colItems = objDellConnection.ExecQuery(sQuery)
If Err.Number <> 0 Then
LogMessage = sQuery & " Error Number:" & Err.Number & "Description:" & Err.Description
If Err.Number = -2147023169 Then
LogMessage = "RPC Failure occurred for namespace root-cimv2-dell"
End If
Err.Clear
End If
If colItems is Nothing Then
LogMessage = "Unable to retrieve object" & sQuery
Else
For Each objItemSensor in colItems
If Err.Number <> 0 Then
If Err.Number = -2147023169 Then
LogMessage = "RPC Failure occurred for cimv2\dell info : " & Err.Number
Else
LogMessage = "Object RetrievalLoop Error Number:" & Err.Number & "Description:" & Err.Description
End If
Err.Clear
ElseIf Not objItemSensor is Nothing Then
CurrentReading = objItemSensor.CurrentReading
LTCritical = objItemSensor.LowerThresholdCritical
LTNonCritical = objItemSensor.LowerThresholdNonCritical
UTCritical = objItemSensor.UpperThresholdCritical
UTNonCritical = objItemSensor.UpperThresholdNonCritical
If Instr(CurrentReading, "-") Then
CurrentReading = "N/A"
Else
CurrentReading = CurrentReading/10 & " C"
End If
If Instr(LTCritical, "-") Then
LTCritical = "N/A"
Else
LTCritical = LTCritical/10 & " C"
End If
If Instr(LTNonCritical, "-") Then
LTNonCritical = "N/A"
Else
LTNonCritical = LTNonCritical/10 & " C"
End If
If Instr(UTCritical, "-") Then
UTCritical = "N/A"
Else
UTCritical = UTCritical/10 & " C"
End If
If Instr(UTNonCritical, "-") Then
UTNonCritical = "N/A"
Else
UTNonCritical = UTNonCritical/10 & " C"
End If
Set oInst= oDiscoveryData.CreateClassInstance("$MPElement[Name='Dell.Connections.ServerSensorTemperatureUnit']$")
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.LogicalDevice']/DeviceID$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", objItemSensor.Name)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ServerNumericSensor']/DeviceID$", objItemSensor.DeviceID)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ServerNumericSensor']/CurrentReading$", CurrentReading)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ServerNumericSensor']/LowerThresholdCritical$", LTCritical)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ServerNumericSensor']/LowerThresholdNonCritical$", LTNonCritical)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ServerNumericSensor']/UpperThresholdCritical$", UTCritical)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ServerNumericSensor']/UpperThresholdNonCritical$", UTNonCritical)
call oDiscoveryData.AddInstance(oInst)
TempFlag = 1
End If
Next
End If 'colItems is nothing
set colItems = Nothing
On Error Goto 0
End Function
Function VoltageDiscover()
On Error Resume next
Dim sQuery, sQuery1, colItems, colItems1, objItemSensor, objItemSensor1
Dim CurrentReading, LTCritical, LTNonCritical, UTCritical, UTNonCritical
sQuery = "Select * from CIM_VoltageSensor"
sQuery1 = "Select * from CIM_DiscreteSensor WHERE SensorType = '3'"
Set colItems = objDellConnection.ExecQuery(sQuery)
If Err.Number <> 0 Then
LogMessage = sQuery & " Error Number:" & Err.Number & "Description:" & Err.Description
If Err.Number = -2147023169 Then
LogMessage = "RPC Failure occurred for namespace root-cimv2-dell"
End If
Err.Clear
End If
Set colItems1 = objDellConnection.ExecQuery(sQuery1)
If Err.Number <> 0 Then
LogMessage = sQuery & " Error Number:" & Err.Number & "Description:" & Err.Description
If Err.Number = -2147023169 Then
LogMessage = "RPC Failure occurred for namespace root-cimv2-dell"
End If
Err.Clear
End If
If colItems is Nothing Then
LogMessage = "Unable to retrieve object" & sQuery
Else
For Each objItemSensor in colItems
If Err.Number <> 0 Then
If Err.Number = -2147023169 Then
LogMessage = "RPC Failure occurred for cimv2\dell info : " & Err.Number
Else
LogMessage = "Object RetrievalLoop Error Number:" & Err.Number & "Description:" & Err.Description
End If
Err.Clear
ElseIf Not objItemSensor is Nothing Then
CurrentReading = objItemSensor.CurrentReading
If Instr(CurrentReading, "-") Then
CurrentReading = "N/A"
Else
CurrentReading = CurrentReading/1000 & " V"
End If
LTCritical = objItemSensor.LowerThresholdCritical
If Instr(LTCritical, "-") Then
LTCritical = "N/A"
Else
LTCritical = LTCritical/1000 & " V"
End If
LTNonCritical = objItemSensor.LowerThresholdNonCritical
If Instr(LTNonCritical, "-") Then
LTNonCritical = "N/A"
Else
LTNonCritical = LTNonCritical/1000 & " V"
End If
UTCritical = objItemSensor.UpperThresholdCritical
If Instr(UTCritical, "-") Then
UTCritical = "N/A"
Else
UTCritical = UTCritical/1000 & " V"
End If
UTNonCritical = objItemSensor.UpperThresholdNonCritical
If Instr(UTNonCritical, "-") Then
UTNonCritical = "N/A"
Else
UTNonCritical = UTNonCritical/1000 & " V"
End If
Set oInst = oDiscoveryData.CreateClassInstance("$MPElement[Name='Dell.Connections.ServerSensorVoltageNumericUnit']$")
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.LogicalDevice']/DeviceID$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", objItemSensor.Name)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ServerNumericSensor']/DeviceID$", objItemSensor.DeviceID)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ServerNumericSensor']/CurrentReading$", CurrentReading)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ServerNumericSensor']/LowerThresholdCritical$", LTCritical)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ServerNumericSensor']/LowerThresholdNonCritical$", LTNonCritical)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ServerNumericSensor']/UpperThresholdCritical$", UTCritical)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ServerNumericSensor']/UpperThresholdNonCritical$", UTNonCritical)
call oDiscoveryData.AddInstance(oInst)
VoltageFlag = 1
End If
Next
End If 'colItems is nothing
If (colItems1 is Nothing) Then
LogMessage = "Unable to retrieve object" & sQuery1
Else
For Each objItemSensor1 in colItems1
If Err.Number <> 0 Then
If Err.Number = -2147023169 Then
LogMessage = "RPC Failure occurred for cimv2\dell info : " & Err.Number
Else
LogMessage = "Object RetrievalLoop Error Number:" & Err.Number & "Description:" & Err.Description
End If
Err.Clear
ElseIf (Not objItemSensor1 is Nothing) Then
Set oInst = oDiscoveryData.CreateClassInstance("$MPElement[Name='Dell.Connections.ServerSensorVoltageDiscreteUnit']$")
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.LogicalDevice']/DeviceID$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", objItemSensor1.Name)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ServerDiscreteSensor']/DeviceID$", objItemSensor1.DeviceID)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ServerDiscreteSensor']/CurrentReading$", objItemSensor1.CurrentReading)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ServerDiscreteSensor']/OtherSensorTypeDescription$", objItemSensor1.OtherSensorTypeDescription)
call oDiscoveryData.AddInstance(oInst)
VoltageFlag = 1
End If
Next
End If 'colItems1 is Nothing
set colItems = Nothing
set colItems1 = Nothing
On Error Goto 0
End Function
Function DiscoverFans()
'Retrieving Fan Units
On Error resume next
Dim sQuery, colItems, objItemFans
sQuery = "Select * from CIM_Fan"
Set colItems = objDellConnection.ExecQuery(sQuery)
If Err.Number <> 0 Then
LogMessage = sQuery & " Error Number:" & Err.Number & "Description:" & Err.Description
If Err.Number = -2147023169 Then
LogMessage = "RPC Failure occurred for namespace root-cimv2-dell"
End If
Err.Clear
End If
If (colItems is Nothing) or (IsNull(colItems)) Then
LogMessage = "Unable to retrieve Fan Unit"
Else
LogMessage = "Fan Unit query retrieved successfully"
For Each objItemFans in colItems
'Error checking
If Err.Number <> 0 Then
LogMessage = "Number:" & Err.Number & "Description:" & Err.Description
End If
'Object Retrieval
If not objItemFans is nothing Then
Set oInst = oDiscoveryData.CreateClassInstance("$MPElement[Name='Dell.Connections.ServerFansUnit']$")
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.LogicalDevice']/DeviceID$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ServerFansUnit']/DeviceID$", objItemFans.DeviceID)
call oInst.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", objItemFans.Name)
call oDiscoveryData.AddInstance(oInst)
FanFlag = 1
End If
Next
End If
Set colItems = Nothing
End Function
Function DiscoverPS()
'Retrieving PS Units
On Error resume next
Dim sQuery, colItems, objItemPS, TotalOutputPower
sQuery = "Select * from CIM_PowerSupply"
Set colItems = objDellConnection.ExecQuery(sQuery)
If Err.Number <> 0 Then
LogMessage = sQuery & " Error Number:" & Err.Number & "Description:" & Err.Description
If Err.Number = -2147023169 Then
LogMessage = "RPC Failure occurred for namespace root-cimv2-dell"
End If
Err.Clear
End If
If (colItems is Nothing) or (IsNull(colItems)) Then
LogMessage = "Unable to retrieve PS Unit"
Else
LogMessage = "PS Unit query retrieved successfully"
For Each objItemPS in colItems
'Error checking
If Err.Number <> 0 Then
LogMessage = "Number:" & Err.Number & "Description:" & Err.Description
End If
'Object Retrieval
If not objItemPS is nothing Then
TotalOutputPower = objItemPS.TotalOutputPower
If (TotalOutputPower <= 0) Then
TotalOutputPower = "N/A"
Else
TotalOutputPower = TotalOutputPower/10
End If
Set oInst = oDiscoveryData.CreateClassInstance("$MPElement[Name='Dell.Connections.ServerPowerSuppliesUnit']$")
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.LogicalDevice']/DeviceID$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ServerPowerSuppliesUnit']/DeviceID$", objItemPS.DeviceID)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ServerPowerSuppliesUnit']/TotalOutputPower$", TotalOutputPower)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ServerPowerSuppliesUnit']/IsSwitchingSupply$", objItemPS.IsSwitchingSupply)
call oInst.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", objItemPS.Name)
call oDiscoveryData.AddInstance(oInst)
PSFlag = 1
End If
Next
End If
Set colItems = Nothing
End Function
Function DiscoverMem()
'Retrieving Mem Units
On Error resume next
Dim sQuery, colItems, objItemMem, MemoryType
sQuery = "Select * from CIM_PhysicalMemory"
Set colItems = objDellConnection.ExecQuery(sQuery)
If Err.Number <> 0 Then
LogMessage = sQuery & " Error Number:" & Err.Number & "Description:" & Err.Description
If Err.Number = -2147023169 Then
LogMessage = "RPC Failure occurred for namespace root-cimv2-dell"
End If
Err.Clear
End If
If (colItems is Nothing) or (IsNull(colItems)) Then
LogMessage = "Unable to retrieve Mem Unit"
Else
LogMessage = "Mem Unit query retrieved successfully"
For Each objItemMem in colItems
'Error checking
If Err.Number <> 0 Then
LogMessage = "Number:" & Err.Number & "Description:" & Err.Description
End If
'Object Retrieval
If not objItemMem is nothing Then
MemoryType = objItemMem.MemoryType
If (MemoryType = 0) Then
MemoryType = "Unknown"
ElseIf (MemoryType = 1) Then
MemoryType = "Other"
ElseIf (MemoryType = 2) Then
MemoryType = "DRAM"
ElseIf (MemoryType = 3) Then
MemoryType = "Synchronous DRAM"
ElseIf (MemoryType = 4) Then
MemoryType = "Cache DRAM"
ElseIf (MemoryType = 5) Then
MemoryType = "EDO"
ElseIf (MemoryType = 6) Then
MemoryType = "EDRAM"
ElseIf (MemoryType = 7) Then
MemoryType = "VRAM"
ElseIf (MemoryType = 8) Then
MemoryType = "SRAM"
ElseIf (MemoryType = 9) Then
MemoryType = "RAM"
ElseIf (MemoryType = 10) Then
MemoryType = "ROM"
ElseIf (MemoryType = 11) Then
MemoryType = "Flash"
ElseIf (MemoryType = 12) Then
MemoryType = "EEPROM"
ElseIf (MemoryType = 13) Then
MemoryType = "FEPROM"
ElseIf (MemoryType = 14) Then
MemoryType = "EPROM"
ElseIf (MemoryType = 15) Then
MemoryType = "CDRAM"
ElseIf (MemoryType = 16) Then
MemoryType = "3DRAM"
ElseIf (MemoryType = 17) Then
MemoryType = "SDRAM"
ElseIf (MemoryType = 18) Then
MemoryType = "SGRAM"
ElseIf (MemoryType = 19) Then
MemoryType = "RDRAM"
ElseIf (MemoryType = 20) Then
MemoryType = "DDR"
ElseIf (MemoryType = 21) Then
MemoryType = "DDR2"
ElseIf (MemoryType = 22) Then
MemoryType = "DDR2 FB-DIMM"
End If
Set oInst = oDiscoveryData.CreateClassInstance("$MPElement[Name='Dell.Connections.ServerMemoryUnit']$")
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.LogicalDevice']/DeviceID$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ServerMemoryUnit']/Tag$", objItemMem.Tag)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ServerMemoryUnit']/MemoryType$", MemoryType)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ServerMemoryUnit']/Capacity$", (objItemMem.Capacity)/(1024*1024) & " MB")
call oInst.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", objItemMem.Name)
call oDiscoveryData.AddInstance(oInst)
MemFlag = 1
End If
Next
End If
Set colItems = Nothing
End Function
Function DiscoverProc()
'Retrieving Proc Units
On Error resume next
Dim sQuery, colItems, objItemProc, a
sQuery = "Select * from CIM_Processor"
Set colItems = objDellConnection.ExecQuery(sQuery)
If Err.Number <> 0 Then
LogMessage = sQuery & " Error Number:" & Err.Number & "Description:" & Err.Description
If Err.Number = -2147023169 Then
LogMessage = "RPC Failure occurred for namespace root-cimv2-dell"
End If
Err.Clear
End If
If (colItems is Nothing) or (IsNull(colItems)) Then
LogMessage = "Unable to retrieve Proc Unit"
Else
LogMessage = "Proc Unit query retrieved successfully"
For Each objItemProc in colItems
'Error checking
If Err.Number <> 0 Then
LogMessage = "Number:" & Err.Number & "Description:" & Err.Description
End If
'Object Retrieval
If not objItemProc is nothing Then
a = objItemProc.Status 'CR194360
If Not IsNull(a) Then 'CR194360
Set oInst = oDiscoveryData.CreateClassInstance("$MPElement[Name='Dell.Connections.ServerProcessorsUnit']$")
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.LogicalDevice']/DeviceID$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ServerProcessorsUnit']/DeviceID$", objItemProc.DeviceID)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ServerProcessorsUnit']/CurrentClockSpeed$", objItemProc.CurrentClockSpeed & " MHz")
call oInst.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", objItemProc.Name)
call oDiscoveryData.AddInstance(oInst)
End If 'CR194360
ProcFlag = 1
End If
Next
End If
Set colItems = Nothing
End Function
Function DiscoverIntrusion()
'Retrieving Security Breach parameter
On Error resume next
Dim sQuery, colItems, objItem
sQuery = "Select * from DELL_Chassis"
Set colItems = objDellConnection.ExecQuery(sQuery)
If Err.Number <> 0 Then
LogMessage = sQuery & " Error Number:" & Err.Number & "Description:" & Err.Description
If Err.Number = -2147023169 Then
LogMessage = "RPC Failure occurred for namespace root-cimv2-dell"
End If
Err.Clear
End If
If (colItems is Nothing) or (IsNull(colItems)) Then
LogMessage = "Unable to retrieve Security Breach parameter"
Else
LogMessage = "Security Breach parameter retrieved successfully"
For Each objItem in colItems
'Error checking
If Err.Number <> 0 Then
LogMessage = "Number:" & Err.Number & "Description:" & Err.Description
End If
'Object Retrieval
If not objItem is nothing Then
If objItem.SecurityBreach <> 2 Then
IntrusionFlag = 1
End If
End If
Next
End If
Set colItems = Nothing
End Function
Public Function GetBaseBoardType ()
'Retrieving Base board type
On Error resume next
Dim sQuery, colItems, objItem
sQuery = "Select * from DELL_Baseboard"
Set colItems = objDellConnection.ExecQuery(sQuery)
If Err.Number <> 0 Then
LogMessage = sQuery & " Error Number:" & Err.Number & "Description:" & Err.Description
If Err.Number = -2147023169 Then
LogMessage = "RPC Failure occurred for namespace root-cimv2-dell"
End If
Err.Clear
End If
If (colItems is Nothing) or (IsNull(colItems)) Then
LogMessage = "Unable to retrieve Base board type"
Else
LogMessage = "Base board type retrieved successfully"
For Each objItem in colItems
'Error checking
If Err.Number <> 0 Then
LogMessage = "Number:" & Err.Number & "Description:" & Err.Description
End If
'Object Retrieval
If not objItem is nothing Then
BaseBoardType = objItem.BaseboardType
End If
Next
End If
Set colItems = Nothing
End Function
300System!System.Discovery.Data$Config/IntervalSeconds$DellServerBIOSDiscovery.vbs$MPElement$ $Target/Id$ $Config/Computer$
Option Explicit
On Error Resume Next
Dim oArgs
Set oArgs = WScript.Arguments
if oArgs.Count < 3 Then
Wscript.Quit -1
End If
Dim SourceID, ManagedEntityId, TargetComputer
SourceId = oArgs(0)
ManagedEntityId = oArgs(1)
TargetComputer = oArgs(2)
Dim oAPI, oDiscoveryData, oInst, strComputer, LogMessage, objConnection, wbemObjectSet, objItemBIOS
Set oAPI = CreateObject("MOM.ScriptAPI")
set oDiscoveryData = oAPI.CreateDiscoveryData(0, SourceId, ManagedEntityId)
strComputer = TargetComputer
Set objConnection = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
If Err.Number <> 0 Then
LogMessage = "WMI Cimv2Dell Error Number : " & Err.Number & ". Description :" & Err.Description
Err.Clear
Else
If IsEmpty(objConnection) Then
LogMessage = "Unable to open WMI Namespace root-cimv2. Check to see if the WMI service is enabled and running " & Err
Else
'Retrieving the BIOS Information
Set wbemObjectSet = objConnection.ExecQuery("Select * from Win32_BIOS")
If Err.Number <> 0 Then
LogMessage = "Number:" & Err.Number & "Description:" & Err.Description
End If
If (wbemObjectSet is Nothing) Or (isNull(wbemObjectSet)) Then
LogMessage = "Unable to retrieve BIOS information"
Else
LogMessage = "BIOS Information retrieved successfully"
For Each objItemBIOS in wbemObjectSet
'Error checking
If Err.Number <> 0 Then
LogMessage = "Number:" & Err.Number & "Description:" & Err.Description
End If
'Object Retrieval
If not objItemBIOS is nothing Then
set oInst = oDiscoveryData.CreateClassInstance("$MPElement[Name='Dell.Connections.DellServer.BIOS']$")
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.LogicalDevice']/DeviceID$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", objItemBIOS.SerialNumber)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.DellServer.BIOS']/Version$", objItemBIOS.Version)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.DellServer.BIOS']/Manufacturer$", objItemBIOS.Manufacturer)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.DellServer.BIOS']/Name$", objItemBIOS.Name)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.DellServer.BIOS']/SerialNumber$", objItemBIOS.SerialNumber)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.DellServer.BIOS']/SMBIOSBIOSVersion$", objItemBIOS.SMBIOSBIOSVersion)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.DellServer.BIOS']/SMBIOSMajorVersion$", objItemBIOS.SMBIOSMajorVersion)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.DellServer.BIOS']/SMBIOSMinorVersion$", objItemBIOS.SMBIOSMinorVersion)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.DellServer.BIOS']/SMBIOSPresent$", objItemBIOS.SMBIOSPresent)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.DellServer.BIOS']/PrimaryBIOS$", objItemBIOS.PrimaryBIOS)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.DellServer.BIOS']/Status$", objItemBIOS.Status)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.DellServer.BIOS']/CurrentLanguage$", objItemBIOS.CurrentLanguage)
call oDiscoveryData.AddInstance(oInst)
End If
Next
End If
Set wbemObjectSet = Nothing
End If
End If
' Submit the data
Call oAPI.Return(oDiscoveryData)
Set oDiscoveryData = Nothing
Set oAPI = Nothing
Set objConnection = Nothing
300System!System.Discovery.Data$Config/IntervalSeconds$DellServerBMCDiscovery.vbs$MPElement$ $Target/Id$ $Config/Computer$
'**********************************************************************************
' Script Name - Dell Server BMC Discovery
' Author: Vignesh Pandian
'
' Description:
' Discover BMC and DRAC components for a Dell server with instrumentation using CIM
' A02 revision - Fix for BSOD given racadm not being terminated.
'
' (c) Copyright Dell Inc. 2007 - All rights reserved
'**********************************************************************************
Option Explicit
On Error Resume Next
Dim oArgs, bmcip, SourceID, ManagedEntityId, TargetComputer, msg, version, Message
Dim blsRacType, blsRacInstalled , blsRacGen4, RegError, rc, blsRacGen4Plus
Dim WshShell, oShell, objStdOut, oFile, fso, strLine, nPos, RacadmErrStream
Dim strRACURL, strRacType, strRacIpAddress, strRacPortNumber, strRacPortDec
Dim RacPath, drive, wintemp_path, filespec, filespec5Plus, filespec4
Dim Command10, Command11, Command2, Command3, a, b, RacExitFlag
Dim WshShell2, oShell2, objStdOut2 ' Exec cfgLan
Dim WshShell3, oShell3, objStdOut3 ' Run cfgLan
Const WAIT_LOOP = 1000000
Set oArgs = WScript.Arguments
if oArgs.Count < 3 Then
Wscript.Quit -1
End If
SourceId = oArgs(0)
ManagedEntityId = oArgs(1)
TargetComputer = oArgs(2)
bmcip = getBMC_IP()
strracUrl = GetRACUrl()
Dim vAPI
Set vAPI = CreateObject("MOM.ScriptAPI")
Dim oAPI, oDiscoveryData, oInst
Set oAPI = CreateObject("MOM.ScriptAPI")
set oDiscoveryData = oAPI.CreateDiscoveryData(0, SourceId, ManagedEntityId)
If Instr(bmcip,".") > 0 Then
set oInst = oDiscoveryData.CreateClassInstance("$MPElement[Name='Dell.Connections.ServerBMC']$")
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.LogicalDevice']/DeviceID$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", "BMC")
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ServerBMC']/BMCIPAddress$", bmcip)
call oDiscoveryData.AddInstance(oInst)
Else
msg = "No BMC object will be created"
End If
If Instr(strracUrl,".") > 0 Then
set oInst = oDiscoveryData.CreateClassInstance("$MPElement[Name='Dell.Connections.DellDRAC']$")
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.LogicalDevice']/DeviceID$", TargetComputer)
If Instr(strracUrl,"i") > 0 Then
call oInst.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", "iDRAC")
strracUrl = Replace(strracUrl,"i","")
Else
call oInst.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", "DRAC")
End If
call oInst.AddProperty("$MPElement[Name='Dell.Connections.DellDRAC']/DracURL$", strracUrl)
call oDiscoveryData.AddInstance(oInst)
Else
msg = "No RAC object will be created"
End If
' Submit the data
Call oAPI.Return(oDiscoveryData)
Set oDiscoveryData = Nothing
Set oAPI = Nothing
Set vAPI = Nothing
Function getBMC_IP
Dim objItemBmcIP, colItems, objDellConnection, strComputer, sBmcQuery, sBmcIP, UpdateBMC_IP, GetBmcIP, LogMessage
strComputer="."
set objDellConnection = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2\Dell")
If Err.Number <> 0 Then
LogMessage = "WMI Cimv2Dell Error Number : " & Err.Number & ". Description :" & Err.Description
UpdateBMC_IP = 0
Err.Clear
Else
If IsEmpty(objDellConnection) Then
LogMessage = "Unable to open WMI Namespace root-cimv2-dell. Check to see if the WMI service is enabled and running, and Install/Re-Install ServerAdministrator to ensure this WMI namespace exists. " & Err
UpdateBMC_IP = 0
Else
sBmcQuery = "Select * from Dell_RemoteAccessServicePort"
Set colItems = objDellConnection.ExecQuery(sBmcQuery)
If Err.Number <> 0 Then
LogMessage = sBmcQuery & " Error Number:" & Err.Number & "Description:" & Err.Description
If Err.Number = -2147023169 Then
LogMessage = "RPC Failure occurred for namespace root-cimv2-dell"
UpdateBMC_IP = 0
End If
Err.Clear
End If
If colItems is Nothing Then
LogMessage = "Unable to retrieve RemoteAccessServicePort object"
Else
LogMessage = "RemoteAccessServicePort object retrieved successfully"
For Each objItemBmcIP in colItems
If Err.Number <> 0 Then
If Err.Number = -2147023169 Then
LogMessage = "RPC Failure occurred for cimv2\dell - bmc info : " & Err.Number
UpdateBMC_IP = 0
ElseIf Err.Number = -2147217389 Then
LogMessage = "If BMC present, Please Install/Re-Install ServerAdministrator on Dell Server : " & fqdn2 & Err.Number
Msg = 1
UpdateBMC_IP = 1
Else
LogMessage = "Object RetrievalLoop Error Number:" & Err.Number & "Description:" & Err.Description
UpdateBMC_IP = 0
End If
Err.Clear
End If
If Not objItemBmcIP is Nothing Then
sBmcIP = objItemBmcIP.AccessInfo
End If
Next
End If 'colItems is nothing
Set colItems = Nothing
End If 'dellconnection is noting
On Error GoTo 0
End If 'error on dellconnection
'Check sBmcIP values
If sBmcIP = "" Then
GetBmcIP = -1
If Msg <> 1 AND UpdateBMC_IP = 1 Then
LogMessage = "BMC physically not present for the Dell Server / Invalid Configuration of BMC / OMSA ReInstallation needed"
End If
Else ' if sBmcIP contains an ip
getBMC_IP = sBmcIP
End If
Set objItemBmcIP = Nothing
Set colItems = Nothing
Set objDellConnection = Nothing
End Function
'***************************************************************
' Function Additions for RAC
' Functions:
' ExecRacUrl() - Exec racadm and Parse StdOut
' RunRacUrl() - Run racadm and Parse File
' CheckVBScriptEngine() - Check VBScript Version
' GetRACADMPath() - Get racadm.exe path
' GetRACInstallRoot() - Get Drive letter of path
' bFileExists() - Check whether file exists
' HexToDec() - convert Hex to Decimal number
' MOMDebugLog() - Send LogMessage to MOMDebugLog
' GetPathParameter() - Get RACADM path and drive letter
' GetTempFolderPath() - Get Win Temp Folder path
' GetRACFileGUID() - Get 2 GUIDs for IP, Port File
'***************************************************************
Public Function GetRACUrl
Dim objAlert, strLaunchRACURL, RACAgentExist, strAlertDesc
Dim version, rc, rac, RegError, sRACUrl
Dim LogMessage, Message
RACAgentExist = 0
RacExitFlag = 0
sRACUrl = 0
Dim version1
version1 = CheckVBScriptEngine()'Check VBScript engine version
If version1 = True Then
' Exec , Read from Standard Output
rc = ExecRACURL (RACAgentExist, strLaunchRACURL)
If rc <> 0 Then
Message = "Main: ExecRACURL error : " & rc
RacExitFlag = 1
Exit Function
End If
ElseIf version1 = False Then
' Run , Redirect to file and Read from File
rc =RunRACURL (RACAgentExist, strLaunchRACURL)
If rc <> 0 Then
Message = "Main: RunRACURL error : " & rc
RacExitFlag = 1
Exit Function
End If
Else
Message = "CheckVBScriptEngine Error : " & version1
RacExitFlag = 1
Exit Function
End If
Message = "Main:RACURL (AgentExist,URL) - " & RACAgentExist & "," & strLaunchRACURL
If RacExitFlag = 0 Then
If RACAgentExist = 1 Then ' If RAC Agent exists
sRACUrl = strLaunchRACURL
End If
End If
Set objAlert = Nothing
Set strLaunchRACURL = Nothing
Set strAlertDesc = Nothing
Set rc = Nothing
GetRACUrl = sRACUrl
End Function
'*****************************************************************
' ExecRacUrl
' Routine to Exec Cmd and Read From Standard Output
'*****************************************************************
Function ExecRacUrl(ByRef RacAgent, ByRef RacUrl)
blsRacInstalled = 0 ' IP address Existence
blsRacGen4Plus = 0 ' Port Existence (subset of RacInstalled)
RegError = 0
a = 0
b = 0
Command10 = "racadm.exe getconfig -g cfgCurrentLanNetworking"
Command11 = "racadm.exe getconfig -g cfgLanNetworking"
Command2 = "racadm.exe getconfig -g cfgRacTuning"
Command3 = "racadm.exe getconfig -g idRacInfo"
GetPathParameter RacPath, drive
If RacExitFlag = 1 Then
ExecRacUrl = -1
Exit Function
End If
'''
Set WshShell = CreateObject("WScript.Shell")
Command3 = RacPath & "\" & Command3
Message = "ExecRacUrl: Cmd for RACType - " & Command3
Set oShell = WshShell.Exec(Command3)
WScript.Sleep(5000)
Do While oShell.Status <> 1
WScript.Sleep(0)
a = a + 1
b = a Mod WAIT_LOOP
If b = 0 Then
Message = "Exit ExecCmd. Reason: RACADM idRacInfo not responding for " & WAIT_LOOP & " loops."
oShell.Terminate()
Exit Do
End If
Loop
Set objStdOut = oShell.StdOut
If Not oShell.StdErr.AtEndOfStream Then
RacadmErrStream = "STDERR: " + oShell.StdErr.ReadAll
Message = "RACADM Standard Error - " & RacadmErrStream
ExecRacUrl = -1
Exit Function
Else
Do While Not objStdOut.AtEndOfStream
strLine = objStdOut.ReadLine
If Instr(Lcase(strLine),"error") Then
RacAgent = 0
Message = "Error in Racadm Output for RACType " & strLine
ExecRacUrl = -1
Exit Function
ElseIf Instr(LCase(strLine),Lcase("idRacType")) Then
nPos = Instr(LCase(strLine), "=")
strRacType = Trim(strLine)
strRacType = Mid(strRacType,nPos+1,5)
strRacType = Trim(strRacType)
blsRacType = 1
Message = "Detected DRAC Type (hex)= " & strRacType
End If
Loop
End If
oShell.Terminate()
Set oShell = Nothing
Set WshShell = Nothing
If blsRacType = 1 Then
If Instr(Lcase(strRacType),"3") OR Instr(Lcase(strRacType),"4") OR Instr(Lcase(strRacType),"5") OR Instr(Lcase(strRacType),"7")Then
'Method1 for DRAC4 or below
Set WshShell = CreateObject("WScript.Shell")
Command10 = RacPath & "\" & Command10
Message = "ExecRacUrl: Cmd for IPAddress (DRAC4 or lesser) - " & Command10
Set oShell = WshShell.Exec(Command10)
WScript.Sleep(5000)
Do While oShell.Status <> 1
WScript.Sleep(0)
a = a + 1
b = a Mod WAIT_LOOP
If b = 0 Then
Message = "Exit ExecCmd. Reason: RACADM cfgCurrentlanNetworking not responding for " & WAIT_LOOP & " loops."
oShell.Terminate()
Exit Do
End If
Loop
Set objStdOut = oShell.StdOut
Do While Not objStdOut.AtEndOfStream
strLine = objStdOut.ReadLine
If Instr(Lcase(strLine),"error") Then
RacAgent = 0
Message = "Error in Racadm Output for IPaddr (DRAC4 or lesser)" & strLine
ExecRacUrl = -1
Exit Function
End If
If Instr(LCase(strLine),Lcase("cfgNicCurrentIpAddress")) Then
nPos = Instr(LCase(strLine), "=")
strRacIpAddress = Trim(strLine)
strRacIpAddress = Mid(strRacIpAddress,nPos+1,16)
blsRacInstalled = 1
End If
Loop
oShell.Terminate()
Set oShell = Nothing
Set WshShell = Nothing
ElseIf (Instr(Lcase(strRacType),"6") OR Instr(Lcase(strRacType),"8")) Then
'Method2
Set WshShell2 = CreateObject("WScript.Shell")
Command11 = RacPath & "\" & Command11
Message = "ExecRacUrl: Cmd for IPAddress (DRAC5/iDRAC) - " & Command11
Set oShell2 = WshShell2.Exec(Command11)
WScript.Sleep(5000)
Do While oShell2.Status <> 1
WScript.Sleep(0)
a = a + 1
b = a Mod WAIT_LOOP
If b = 0 Then
Message = "Exit ExecCmd. Reason: RACADM cfgLanNetworking not responding for " & WAIT_LOOP & " loops."
oShell.Terminate()
Exit Do
End If
Loop
Set objStdOut2 = oShell2.StdOut
Do While Not objStdOut2.AtEndOfStream
strLine = objStdOut2.ReadLine
If Instr(Lcase(strLine),"error") Then
RacAgent = 0
Message = "Error in Racadm Output for IPaddr " & strLine
ExecRacUrl = -1
Exit Function
End If
If Instr(LCase(strLine),Lcase("cfgNicIpAddress")) Then
nPos = Instr(LCase(strLine), "=")
strRacIpAddress = Trim(strLine)
strRacIpAddress = Mid(strRacIpAddress,nPos+1,16)
blsRacInstalled = 1
End If
Loop
oShell2.Terminate()
Set oShell2 = Nothing
Set WshShell2 = Nothing
Else ' When DRAC Type is nether 3,4,5,6,7
Message = "Unsupported DRAC Type = " & strRacType
End If
End If
'''
Set oShell = Nothing
Set objStdOut = Nothing
If blsRacInstalled = 1 Then
' If Command10 runs and IpAddress was found
Set WshShell = CreateObject("WScript.Shell")
Command2 = RacPath & "\" & Command2
Message = "ExecRacUrl: Cmd for PortNumber - " & Command2
Set oShell = WshShell.Exec(trim(Command2))
WScript.Sleep(5000)
Do While oShell.Status <> 1
WScript.Sleep(0)
a = a + 1
b = a Mod WAIT_LOOP
If b = 0 Then
Message = "Exit ExecCmd. Reason: RACADM port cmd not responding for " & WAIT_LOOP & " loops."
oShell.Terminate()
Exit Do
End If
Loop
Set objStdOut = oShell.StdOut
Do While Not objStdOut.AtEndOfStream
strLine = objStdOut.ReadLine
If Instr(Lcase(strLine),"error") Then
RacAgent = 0
Message = "Error in Racadm Output for Port " & strLine
Exit Function
End If
If Instr(LCase(strLine),LCase("cfgRacTuneHttpsPort")) Then
nPos = Instr(LCase(strLine), "=")
strRacPortNumber= Trim(strLine)
If Instr(strRacPortNumber,"0x") Then
strRacPortNumber= Mid(strRacPortNumber,nPos+1+2,16) '+2 to compensate 0x
Message = "Hex httpsPort value from cfgRacTuning = " & strRacPortNumber
strRacPortNumber = HexToDec(strRacPortNumber)
Message = "Hex to Dec convert result in = " & strRacPortNumber
Else
strRacPortNumber= Mid(strRacPortNumber,nPos+1,16) '
Message = "RAC5Plus Decimal Port = " & strRacPortNumber
End If
blsRacGen4Plus = 1
End If
Loop
oShell.Terminate()
Set oShell = Nothing
Set WshShell = Nothing
If blsRacGen4Plus = 1 Then
strRACURL = "https://" & strRacIpAddress & ":" & strRacPortNumber
Else
strRACURL = "https://" & strRacIpAddress
End If
If Instr(strRacType,"8") Then
strRACURL = "i" & strRACURL
End If
End If ' If blsRacInstalled = 1
RacAgent = blsRacInstalled
RacUrl = strRACURL
Set objStdOut = Nothing
If Err <> 0 Then
ExecRacUrl = Err.Number
Message = "ExecRACUrl ErrorNo= " & Err.No & ", Description: " & Err.Desc
Err.Clear
End If
End Function
'**********************************************************
' CheckVBScriptEngine()
' Check VBScript engine version:
'**********************************************************
Function CheckVBScriptEngine()
Dim bIsCompatV, var
Const VBSCRIPT_MIN_VERSION = 5.6
Err.Clear
var = ScriptEngineMajorVersion & "." & ScriptEngineMinorVersion
If (CInt(var)) < VBSCRIPT_MIN_VERSION Then
bIsCompatV = False
Else
bIsCompatV = True
End If
If Err <> 0 Then
CheckVBScriptEngine = Err.Number
Message = "VBScriptEngine Error = " & Err.Number
Else
CheckVBScriptEngine = bIsCompatV
End If
End Function
'*****************************************************************
'GetRacadmPath
'Routine to read the registry to query the OMSA Install Path
'*****************************************************************
Function GetRACADMPath(ByRef o_sPath)
Const DEF_RACADM_PATH = "C:\Program Files\Dell\OpenManage\RAC\MN"
Const RACADM_REG_INTALL_PATH = "HKEY_LOCAL_MACHINE\SOFTWARE\Dell Computer Corporation\OpenManage\Remote Access Card Managed Node\PATH"
Const RACADM64_REG_INTALL_PATH = "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432node\Dell Computer Corporation\OpenManage\Remote Access Card Managed Node\PATH"
Dim strRacadmKey, tmp
strRacadmKey = RACADM_REG_INTALL_PATH
Set oShell = CreateObject ("WScript.Shell")
o_sPath = ""
On Error Resume Next
o_sPath = oShell.RegRead(strRacadmKey)
If o_sPath = "" Then
o_sPath = oShell.RegRead(RACADM64_REG_INTALL_PATH)
If Err <> 0 Then
Err.Clear
End If
End If
If o_sPath = "" Then
tmp = DEF_RACADM_PATH & "\racadm.exe"
If(bFileExists(tmp)) Then
o_sPath = DEF_RACADM_PATH
Message = "RACADM Registry is empty, Using Default Path" & DEF_RACADM_PATH
Err.Clear
Else
RegError = 1
End If
End If
If Err <> 0 Then
GetRACADMPath = Err.Number
End If
Set oShell = Nothing
End Function
'*****************************************************************
'GetOMInstallRoot
'Routine to determine the Drive letter where OMSA is installed
'*****************************************************************
Private Function GetRACInstallRoot(ByRef path, ByVal RACInstallPath)
On Error Resume Next
Err.Clear
' Return the root drive of the OMInstall Path
path = Left(RACInstallPath, 2)
If Err <> 0 Then
GetRACInstallRoot = Err.Number
End If
End Function
'*****************************************************************
' RunRacUrl
'Routine to use Run - Redirect to file and Read from File,Del File
'*****************************************************************
Function RunRacUrl(ByRef RacAgent, ByRef RacUrl)
RegError = 0
Const ForReading = 1
Dim guid1, guid2, guid3, guid4
Command10 = " getconfig -g cfgCurrentLanNetworking"
Command11 = " getconfig -g cfgLanNetworking"
Command2 = " getconfig -g cfgRacTuning"
Command3 = " getconfig -g idRacInfo"
blsRacInstalled = 0 ' will have IP address
blsRacGen4Plus = 0 ' will have Port (subset of RacInstalled)
GetPathParameter RacPath, drive
GetTempFolderPath wintemp_path, drive
GetRACFileGUID guid1, guid2
If RacExitFlag = 1 Then
Exit Function
End If
filespec = wintemp_path & "\" & guid1 & ".txt"
Command3 = "cmd /c " & chr(34) & RacPath & "\racadm.exe" & Chr(34) & Command3 & " > " & filespec
Message = "Run: Command for DRAC Type - " & Command3
Set oShell3 = CreateObject ("WScript.Shell")
rc = oShell3.run(Command3,0,true)
WScript.Sleep(5000)
Do While bFileExists(filespec) <> -1
WScript.Sleep(0)
Loop
Set fso = CreateObject("Scripting.FileSystemObject")
Set oFile = fso.OpenTextFile(filespec, ForReading, False)
Do While Not oFile.AtEndOfStream
strLine = Trim(oFile.ReadLine)
If Instr(Lcase(strLine),"error") Then
RacAgent = 0
Message = "Error in Racadm Output for idRacInfo " & strLine
rc = DelFile(filespec)
If rc <> 0 Then
Message = "Error! - DelFile " & filespec
End If
RunRacUrl = -1
Exit Function 'Add MP22UT.X01
End If
If Instr(LCase(strLine),Lcase("idRacType")) Then
nPos = Instr(LCase(strLine), "=")
strRacType = Trim(strLine)
strRacType = Mid(strRacType,nPos+1,5)
strRacType = Trim(strRacType)
Message = "Detected DRAC Type (hex)= " & strRacType
blsRacType = 1
End If
Loop
Set oShell3 = Nothing
'Set objStdOut = Nothing
oFile.close
'Clean up the CLI Output : Delete %WINTEMP% \ %Guid1% .txt
rc = DelFile(filespec)
If rc <> 0 Then
Message = "Error! - DelFile " & filespec
End If
Set filespec = Nothing
'''''''
If blsRacType = 1 Then
GetRACFileGUID guid3, guid4
If Instr(Lcase(strRacType),"3") OR Instr(Lcase(strRacType),"4") OR Instr(Lcase(strRacType),"5") OR Instr(Lcase(strRacType),"7")Then
'Method1 for DRAC4 or below
filespec4 = wintemp_path & "\" & guid4 & ".txt"
'Set WshShell3 = CreateObject("WScript.Shell")
Command10 = "cmd /c " & chr(34) & RacPath & "\racadm.exe" & Chr(34) & Command10 & " > " & filespec4
Set oShell3 = CreateObject ("WScript.Shell")
rc = oShell3.run(Command10,0,true)
WScript.Sleep(5000)
Message = "IPADDR: RunRacUrl: Run " & Command10
' Loop Until file RAC1Guid.txt is created
Do While bFileExists(filespec4) <> -1
WScript.Sleep(0)
Loop
Set fso = CreateObject("Scripting.FileSystemObject")
Set oFile = fso.OpenTextFile(filespec4, ForReading, False)
Do While Not oFile.AtEndOfStream
strLine = Trim(oFile.ReadLine)
If Instr(Lcase(strLine),"error") Then
RacAgent = 0
Message = "Error in Racadm Output for IPaddr " & strLine
rc = DelFile(filespec4)
If rc <> 0 Then
Message = "Error! - DelFile " & filespec4
End If
RunRacUrl = -1
Exit Function
End If
If Instr(LCase(strLine),Lcase("cfgNicCurrentIpAddress")) Then
nPos = Instr(LCase(strLine), "=")
strRacIpAddress = Trim(strLine)
strRacIpAddress = Mid(strRacIpAddress,nPos+1,16)
blsRacInstalled = 1
End If
Loop
Set oShell3 = Nothing
'Set objStdOut = Nothing
oFile.close
'Clean up the CLI Output : Delete %WINTEMP% \ %Guid1% .txt
rc = DelFile(filespec4)
If rc <> 0 Then
Message = "Error! - DelFile " & filespec4
End If
Set filespec4 = Nothing
ElseIf Instr(Lcase(strRacType),"6") Then
' Method for DRAC5
filespec5Plus = wintemp_path & "\" & guid3 & ".txt"
'Set WshShell3 = CreateObject("WScript.Shell")
Command11 = "cmd /c " & chr(34) & RacPath & "\racadm.exe" & Chr(34) & Command11 & " > " & filespec5Plus
Set oShell3 = CreateObject ("WScript.Shell")
rc = oShell3.run(Command11,0,true)
WScript.Sleep(5000)
' Infinite Loop Until file RAC3Guid.txt is created
Do While bFileExists(filespec5Plus) <> -1
WScript.Sleep(0)
Loop
Set fso = CreateObject("Scripting.FileSystemObject")
Set oFile = fso.OpenTextFile(filespec5Plus, ForReading, False)
Do While Not oFile.AtEndOfStream
strLine = Trim(oFile.ReadLine)
If Instr(Lcase(strLine),"error") Then
RacAgent = 0
Message = "Error in Racadm Output for IPaddr cfgLan " & strLine
rc = DelFile(filespec5Plus)
If rc <> 0 Then
Message = "Error! - DelFile " & filespec5Plus
End If
RunRacUrl = -1
Exit Function
End If
If Instr(LCase(strLine),Lcase("cfgNicIpAddress")) Then
nPos = Instr(LCase(strLine), "=")
strRacIpAddress = Trim(strLine)
strRacIpAddress = Mid(strRacIpAddress,nPos+1,16)
blsRacInstalled = 1
End If
Loop
Set oShell3 = Nothing
'Set WshShell3 = Nothing
'Set objStdOut = Nothing
oFile.close
'Clean up the CLI Output : Delete %WINTEMP% \ %Guid1% .txt
rc = DelFile(filespec5Plus)
If rc <> 0 Then
Message = "Error! - DelFile " & filespec5Plus
End If
Set filespec5Plus = Nothing
' End of RAC5+ If clause
Else ' When DRAC Type is nether 3,4,5,6,7
Message = "Unsupported DRAC Type = " & strRacType
End If
Else
Message = "DRAC Type not found via idRacInfo command. "
End If ' End of blsRacType IF clause
' Output OMSA CLI to file RACGuid1.txt, wait until RUN Command is completed
' RAC5+ cfgLanNetworking in place of cfgCurrentLanNetworking (Invalid Group)
If blsRacInstalled = 1 Then
' If Command10/Command11 runs and IpAddress was found
Set oShell = CreateObject("WScript.Shell")
filespec = wintemp_path & "\" & guid2 & ".txt"
Command2 = "cmd /c " & chr(34) & RacPath & "\racadm.exe" & Chr(34) & Command2 & " > " & filespec
rc = oShell.run(Command2,0,true)
WScript.Sleep(5000)
If rc <> 0 Then
Message = "PORT: RunRacUrl: OShellRun ERROR: " & rc & " for " & Command2
rc = DelFile(filespec)
If rc <> 0 Then
Message = "Error! - DelFile " & filespec
End If
Exit Function
Else
Message = "PORT: RunRacUrl: Run " & Command2
' Infinite Loop Until file RAC2Guid is created
Do While bFileExists(filespec) <> -1
WScript.Sleep(0)
Loop
Set fso = CreateObject("Scripting.FileSystemObject")
Set oFile = fso.OpenTextFile(filespec, ForReading, False)
Do While Not oFile.AtEndOfStream
strLine = Trim(oFile.ReadLine)
If Instr(Lcase(strLine),"error") Then
RacAgent = 0
Message = "Error in Racadm Output for Port " & strLine
rc = DelFile(filespec)
If rc <> 0 Then
Message = "Error! - DelFile " & filespec
End If
Exit Function
End If
If Instr(LCase(strLine),LCase("cfgRacTuneHttpsPort")) Then
nPos = Instr(LCase(strLine), "=")
strRacPortNumber= Trim(strLine)
If Instr(strRacPortNumber,"0x") Then
strRacPortNumber= Mid(strRacPortNumber,nPos+1+2,16) '+2 to compensate 0x
Message = "Hex httpsPort value from cfgRacTuning = " & strRacPortNumber
strRacPortNumber = HexToDec(strRacPortNumber)
Message = "Hex to Dec convert result in = " & strRacPortNumber
Else
strRacPortNumber= Mid(strRacPortNumber,nPos+1,16)
Message = "RAC5Plus decimal number = " & strRacPortNumber
End If
blsRacGen4Plus = 1
End If
Loop
oFile.close
'Clean up the CLI Output : Delete racGuid2.txt
rc = DelFile(filespec)
If rc <> 0 Then
Message = "Error! - DelFile " & filespec
End If
Set filespec = Nothing
End If 'PORT oShellCommand executed
Set oShell = Nothing
End If ' if blsRacInstalled = 1
If blsRacGen4Plus = 1 Then
strRACURL = "https://" & strRacIpAddress & ":" & strRacPortNumber
Else
strRACURL = "https://" & strRacIpAddress
End If
RacAgent = blsRacInstalled
RacUrl = strRACURL
If Err <> 0 Then
RunRacUrl = Err.Number
End If
End Function
'*****************************************************************
'bFileExists
'Routine to determine if the OMSA Report file is created
'*****************************************************************
Function bFileExists(ByVal filespec1)
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
bFileExists = (fso.FileExists(filespec1))
Set fso = Nothing
End Function
'*****************************************************************
' HexToDec
' Routine to Convert Hex Number to Decimal value
'*****************************************************************
Function HexToDec(ByVal Number)
Dim lngResult,intIndex
Dim strDigit, intDigit, intValue
lngResult=0
For intIndex=len(Number) to 1 step -1
strDigit=Mid(Number,intIndex,1)
intDigit=Instr("0123456789ABCDEF",ucase(strDigit))-1
If intDigit>=0 Then
intValue=intDigit*(16^(len(Number)-intIndex))
lngResult=lngResult+intValue
Else
lngResult=0
int intIndex=0
End If
Next
Number=Trim(lngResult)
HexToDec = Number
End Function
'*****************************************************************
' Function MOMDebugLog
' Add LogMessage Header - ScriptName and Time and Logging it.
'*****************************************************************
Function MOMDebugLog (ByVal strMessage)
LogMessage = "(" & SCRIPT_NAME & ")" & "-" & "[" & Now() & "] --- "
LogMessage = LogMessage & strMessage
' ScriptContext.echo LogMessage
End Function
'*****************************************************************
'DeleteFile
'Routine to delete the OMSA Report file
'*****************************************************************
Function DelFile(ByVal filespec2)
Dim fso, oFile
If bFileExists(filespec2) Then
Set fso = CreateObject("Scripting.FileSystemObject")
fso.DeleteFile filespec2, True
Set fso = Nothing
Message = "OMREPORT Output File deleted - " & filespec2
End If
If Err <> 0 Then
DelFile = Err.Number
End If
End Function
'*****************************************************************
'GetPathParameter - Common to RunRacUrl and ExecRacUrl
'Routine to get RACADM path and drive letter
'*****************************************************************
Function GetPathParameter(ByRef o_racpath, ByRef o_drive)
Dim rac_path, drive_letter
rc = GetRACADMPath(rac_path)
If rc <> 0 Then
Message = "GetPathParameter:GetRACADMPath Error - " & rc
RacExitFlag = 1
Exit Function
Else
Message = "GetPathParameter:GetRACADMPath - " & rac_path
End If
rc = GetRACInstallRoot(drive_letter, rac_path)
If rc <> 0 Then
Message = "GetPathParameter:GetRACInstallRoot Error - " & rc
RacExitFlag = 1
Exit Function
Else
Message = "GetPathParameter:GetRACInstallRoot - " & drive_letter
End If
If RegError = 1 Then
Message = "RAC Hardware / Agent not installed on Server"
RacExitFlag = 1
Exit Function
End If
o_racpath = rac_path
o_drive = drive_letter
If Err <> 0 Then
GetPathParameter = Err.Number
End If
End Function
'*****************************************************************
'GetTempFolderPath
'Routine to Get Win Temp Folder path
'*****************************************************************
Function GetTempFolderPath(ByRef WinTempFolder, ByVal drive_letter)
Dim FldrExistFlag, fso
FldrExistFlag = False
dim wshShell : Set wshShell = Createobject("WScript.Shell")
dim wshSysEnv : Set wshSysEnv = wshShell.Environment
dim strSysTempFolder : strSysTempFolder = wshSysEnv("TEMP")
dim wshPrcEnv : Set wshPrcEnv = wshShell.Environment("Process")
strSysTempFolder = Replace(strSysTempFolder, "%SystemRoot%", wshPrcEnv("SYSTEMROOT"), 1, -1, vbTextCompare)
WinTempFolder = strSysTempFolder
Set fso = CreateObject("Scripting.FileSystemObject")
If (fso.FolderExists(WinTempFolder)) Then
FldrExistFlag = True
Else
FldrExistFlag = False
End If
If WinTempFolder = "" OR FldrExistFlag = False Then
WinTempFolder = drive_letter
End If
Message = "Current CLI output will be stored in Folder - " & WinTempFolder
Set wshShell = Nothing
Set wshSysEnv = Nothing
Set strSysTempFolder = Nothing
Set wshPrcEnv = Nothing
If Err <> 0 Then
GetTempFolderPath = Err.Number
End If
End Function
'*****************************************************************
'GetRACFileGUID
'Routine to generate 2 unique GUIDs for ip and port info files
'*****************************************************************
Function GetRACFileGUID(ByRef guid3, ByRef guid4)
Dim TypeLib, NewGUID
Set TypeLib = CreateObject("Scriptlet.TypeLib")
NewGUID = TypeLib.Guid
guid3 = (left(NewGUID, len(NewGUID)-2))
Set TypeLib = Nothing
Set TypeLib = CreateObject("Scriptlet.TypeLib")
NewGUID = TypeLib.Guid
guid4 = (left(NewGUID, len(NewGUID)-2))
Set TypeLib = Nothing
End Function
300System!System.Discovery.Data$Config/IntervalSeconds$DellServerServicesDiscovery.vbs$MPElement$ $Target/Id$ $Config/Computer$
'**********************************************************************************
' Script Name - Dell Server Services Discovery
' Author: Vignesh Pandian
'
' Description:
' Discover all OpenManage Windows services for a Dell server with instrumentation.
'
' (c) Copyright Dell Inc. 2007 - All rights reserved
'**********************************************************************************
Option Explicit
On Error Resume Next
Dim oArgs
Set oArgs = WScript.Arguments
if oArgs.Count < 3 Then
Wscript.Quit -1
End If
Dim SourceID, ManagedEntityId, TargetComputer
Dim ServiceFlag
Dim DSMEventMgrFlag, DSMDataMgrFlag, DSMConnServiceFlag, DSMSharedServicesFlag
Dim DSMEventMgrDesc, DSMDataMgrDesc, DSMConnServiceDesc, DSMSharedServicesDesc
Dim DSMEventMgrDispName, DSMDataMgrDispName, DSMConnServiceDispName, DSMSharedServicesDispName
Dim DSMEventMgrStartMode, DSMDataMgrStartMode, DSMConnServiceStartMode, DSMSharedServicesStartMode
Dim LogMessage, ErrorMessage
SourceId = oArgs(0)
ManagedEntityId = oArgs(1)
TargetComputer = oArgs(2)
Dim oAPI, oDiscoveryData, oInst
Set oAPI = CreateObject("MOM.ScriptAPI")
set oDiscoveryData = oAPI.CreateDiscoveryData(0, SourceId, ManagedEntityId)
ServiceFlag = getOMServices()
If ServiceFlag=1 Then
set oInst = oDiscoveryData.CreateClassInstance("$MPElement[Name='Dell.Connections.ServerServices']$")
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.LogicalDevice']/DeviceID$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", "OMServices")
call oDiscoveryData.AddInstance(oInst)
' Call oAPI.LogScriptEvent("VigServices2True",999,1,"Executed" + DSMEventMgrDispName + DSMDataMgrDispName + DSMConnServiceDispName + DSMSharedServicesDispName)
If DSMEventMgrFlag = 1 Then
set oInst = oDiscoveryData.CreateClassInstance("$MPElement[Name='Dell.Connections.ServerServices.DSMEventManager']$")
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.LogicalDevice']/DeviceID$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", DSMEventMgrDispName)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ServerServices.DSMEventManager']/Description$", DSMEventMgrDesc)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ServerServices.DSMEventManager']/StartMode$", DSMEventMgrStartMode)
call oDiscoveryData.AddInstance(oInst)
End If
If DSMDataMgrFlag = 1 Then
set oInst = oDiscoveryData.CreateClassInstance("$MPElement[Name='Dell.Connections.ServerServices.DSMDataManager']$")
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.LogicalDevice']/DeviceID$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", DSMDataMgrDispName)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ServerServices.DSMDataManager']/Description$", DSMDataMgrDesc)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ServerServices.DSMDataManager']/StartMode$", DSMDataMgrStartMode)
call oDiscoveryData.AddInstance(oInst)
End If
If DSMConnServiceFlag = 1 Then
set oInst = oDiscoveryData.CreateClassInstance("$MPElement[Name='Dell.Connections.ServerServices.DSMConnService']$")
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.LogicalDevice']/DeviceID$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", DSMConnServiceDispName)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ServerServices.DSMConnService']/Description$", DSMConnServiceDesc)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ServerServices.DSMConnService']/StartMode$", DSMConnServiceStartMode)
call oDiscoveryData.AddInstance(oInst)
End If
If DSMSharedServicesFlag = 1 Then
set oInst = oDiscoveryData.CreateClassInstance("$MPElement[Name='Dell.Connections.ServerServices.DSMSharedServices']$")
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.LogicalDevice']/DeviceID$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", DSMSharedServicesDispName)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ServerServices.DSMSharedServices']/Description$", DSMSharedServicesDesc)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ServerServices.DSMSharedServices']/StartMode$", DSMSharedServicesStartMode)
call oDiscoveryData.AddInstance(oInst)
End If
Else
' Call oAPI.LogScriptEvent("VigServices2",999,1,"False")
End If
' Submit the data
Call oAPI.Return(oDiscoveryData)
Set oDiscoveryData = Nothing
Set oAPI = Nothing
Function getOMServices
Dim strComputer, WbemServices, wbemObjectSet, wbemObject, sQuery, OMServicesFlag
strComputer="."
Set WbemServices = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
If IsEmpty(WbemServices) Then
MOMDebugLog "Unable to open WMI Namespace root-cimv2. Check to see if the WMI service is enabled and running, and ensure this WMI namespace exists." & Err.Description
Else
sQuery = "SELECT * FROM Win32_Service WHERE Name = 'omsad'"
Set wbemObjectSet = wbemServices.ExecQuery(sQuery)
If IsEmpty(wbemObjectSet) Or Err.Number <> 0 Then
MOMDebugLog "The Query '" & sQuery & "' returned an invalid result set. Please check to see if this is a valid WMI Query." & Err.Description
Else
For Each wbemObject In wbemObjectSet
If Err.Number <> 0 Then
ErrorMessage = "Win32_Service SubObjectQuery Error Number:" & Err.Number & "Description:" & Err.Description
MOMDebugLog (ErrorMessage)
Err.Clear
End If
DSMSharedServicesFlag = 1
DSMSharedServicesDispName = wbemObject.DisplayName
DSMSharedServicesDesc = wbemObject.Description
DSMSharedServicesStartMode = wbemObject.StartMode
Next
End If
Set wbemObjectSet = Nothing
sQuery = "SELECT * FROM Win32_Service WHERE Name = 'Server Administrator'"
Set wbemObjectSet = wbemServices.ExecQuery(sQuery)
If IsEmpty(wbemObjectSet) Or Err.Number <> 0 Then
MOMDebugLog "The Query '" & sQuery & "' returned an invalid result set. Please check to see if this is a valid WMI Query." & Err.Description
Else
For Each wbemObject In wbemObjectSet
If Err.Number <> 0 Then
ErrorMessage = "Win32_Service SubObjectQuery Error Number:" & Err.Number & "Description:" & Err.Description
MOMDebugLog (ErrorMessage)
Err.Clear
End If
DSMConnServiceFlag = 1
DSMConnServiceDispName = wbemObject.DisplayName
DSMConnServiceDesc = wbemObject.Description
DSMConnServiceStartMode = wbemObject.StartMode
Next
End If
Set wbemObjectSet = Nothing
sQuery = "SELECT * FROM Win32_Service WHERE Name = 'dcstor32'"
Set wbemObjectSet = wbemServices.ExecQuery(sQuery)
If IsEmpty(wbemObjectSet) Or Err.Number <> 0 Then
MOMDebugLog "The Query '" & sQuery & "' returned an invalid result set. Please check to see if this is a valid WMI Query." & Err.Description
Else
For Each wbemObject In wbemObjectSet
If Err.Number <> 0 Then
ErrorMessage = "Win32_Service SubObjectQuery Error Number:" & Err.Number & "Description:" & Err.Description
MOMDebugLog (ErrorMessage)
Err.Clear
End If
DSMDataMgrFlag = 1
DSMDataMgrDispName = wbemObject.DisplayName
DSMDataMgrDesc = wbemObject.Description
DSMDataMgrStartMode = wbemObject.StartMode
Next
End If
Set wbemObjectSet = Nothing
sQuery = "SELECT * FROM Win32_Service WHERE Name = 'dcevt32'"
Set wbemObjectSet = wbemServices.ExecQuery(sQuery)
If IsEmpty(wbemObjectSet) Or Err.Number <> 0 Then
MOMDebugLog "The Query '" & sQuery & "' returned an invalid result set. Please check to see if this is a valid WMI Query." & Err.Description
Else
For Each wbemObject In wbemObjectSet
If Err.Number <> 0 Then
ErrorMessage = "Win32_Service SubObjectQuery Error Number:" & Err.Number & "Description:" & Err.Description
MOMDebugLog (ErrorMessage)
Err.Clear
End If
DSMEventMgrFlag = 1
DSMEventMgrDispName = wbemObject.DisplayName
DSMEventMgrDesc = wbemObject.Description
DSMEventMgrStartMode = wbemObject.StartMode
Next
End If
Set wbemObjectSet = Nothing
End If
getOMServices = DSMEventMgrFlag OR DSMDataMgrFlag OR DSMConnServiceFlag OR DSMSharedServicesFlag
End Function
300System!System.Discovery.Data$Config/IntervalSeconds$DellChassisDiscovery.vbs$MPElement$ $Target/Id$ $Config/Computer$
'**********************************************************************************
' Script Name - Dell Chassis Discovery
' Author: Muralidhar L
'
' Description:
' Discover all Chassis hardware components for a Dell server with instrumentation using CIM
'
' (c) Copyright Dell Inc. 2007 - All rights reserved
'**********************************************************************************
Option Explicit
On Error Resume Next
Dim oArgs
Set oArgs = WScript.Arguments
if oArgs.Count < 3 Then
Wscript.Quit -1
End If
Dim SourceID, ManagedEntityId, TargetComputer
SourceId = oArgs(0)
ManagedEntityId = oArgs(1)
TargetComputer = oArgs(2)
Dim oAPI, oDiscoveryData, oInst
Set oAPI = CreateObject("MOM.ScriptAPI")
set oDiscoveryData = oAPI.CreateDiscoveryData(0, SourceId, ManagedEntityId)
Dim strComputer, WbemServices, wbemObjectSet, wbemObject, sQuery
Dim ChassisSerialNumber, FanFlag, PSFlag
strComputer="."
FanFlag = 0
PSFlag = 0
Set WbemServices = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2\dell")
If IsEmpty(WbemServices) Then
MOMDebugLog "Unable to open WMI Namespace root-cimv2-dell. Check to see if the WMI service is enabled and running, and ensure this WMI namespace exists." & Err.Description
Else
GetChassisSerialNumber()
DiscoverFans()
DiscoverPS()
set oInst = oDiscoveryData.CreateClassInstance("$MPElement[Name='Dell.Connections.DellChassis']$")
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.LogicalDevice']/DeviceID$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", "Chassis: " & ChassisSerialNumber)
call oDiscoveryData.AddInstance(oInst)
If FanFlag = 1 Then
set oInst = oDiscoveryData.CreateClassInstance("$MPElement[Name='Dell.Connections.ChassisFans']$")
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.LogicalDevice']/DeviceID$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", "Fans")
call oDiscoveryData.AddInstance(oInst)
End If
If PSFlag = 1 Then
set oInst = oDiscoveryData.CreateClassInstance("$MPElement[Name='Dell.Connections.ChassisPowerSupplies']$")
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.LogicalDevice']/DeviceID$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", "Power Supplies")
call oDiscoveryData.AddInstance(oInst)
End If
End If
' Submit the data
Call oAPI.Return(oDiscoveryData)
Set oDiscoveryData = Nothing
Set oAPI = Nothing
Public Function GetChassisSerialNumber()
'Retrieving the Chassis Serial Number
On Error resume next
Set wbemObjectSet = wbemServices.ExecQuery("Select SerialNumber from DELL_BaseBoard WHERE BaseboardType = '13'")
If Err.Number <> 0 Then
ErrorMessage = "Number:" & Err.Number & "Description:" & Err.Description
MOMDebugLog (ErrorMessage)
End If
If wbemObjectSet is Nothing Then
LogMessage = "Unable to retrieve Chassis Serial Number"
MOMDebugLog (LogMessage)
Else
LogMessage = "Chassis Serial Number retrieved successfully"
MOMDebugLog (LogMessage)
Dim objItem
For Each objItem in wbemObjectSet
'Error checking
If Err.Number <> 0 Then
ErrorMessage = "Number:" & Err.Number & "Description:" & Err.Description
MOMDebugLog (ErrorMessage)
End If
'Object Retrieval
If not objItem is nothing Then
ChassisSerialNumber = objItem.SerialNumber
End If
Next
LogMessage = "Chassis Serial Number : " & ChassisSerialNumber
MOMDebugLog (LogMessage)
End If
Set wbemObjectSet = Nothing
End Function
Function DiscoverFans()
'Retrieving Fan Units
On Error resume next
Set wbemObjectSet = wbemServices.ExecQuery("Select * from CIM_Fan")
If Err.Number <> 0 Then
ErrorMessage = "Number:" & Err.Number & "Description:" & Err.Description
MOMDebugLog (ErrorMessage)
End If
If wbemObjectSet is Nothing Then
LogMessage = "Unable to retrieve Chassis Fan Unit"
MOMDebugLog (LogMessage)
Else
LogMessage = "Chassis Fan Unit retrieved successfully"
MOMDebugLog (LogMessage)
Dim objItem
For Each objItem in wbemObjectSet
'Error checking
If Err.Number <> 0 Then
ErrorMessage = "Number:" & Err.Number & "Description:" & Err.Description
MOMDebugLog (ErrorMessage)
End If
'Object Retrieval
If not objItem is nothing Then
Set oInst = oDiscoveryData.CreateClassInstance("$MPElement[Name='Dell.Connections.ChassisFansUnit']$")
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.LogicalDevice']/DeviceID$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ChassisFansUnit']/DeviceID$", objItem.DeviceID)
call oInst.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", objItem.Name)
call oDiscoveryData.AddInstance(oInst)
FanFlag = 1
End If
Next
End If
Set wbemObjectSet = Nothing
End Function
Function DiscoverPS()
'Retrieving PS Units
On Error resume next
Set wbemObjectSet = wbemServices.ExecQuery("Select * from CIM_PowerSupply")
If Err.Number <> 0 Then
ErrorMessage = "Number:" & Err.Number & "Description:" & Err.Description
MOMDebugLog (ErrorMessage)
End If
If wbemObjectSet is Nothing Then
LogMessage = "Unable to retrieve Chassis Power supply unit"
MOMDebugLog (LogMessage)
Else
LogMessage = "Chassis power supply Unit retrieved successfully"
MOMDebugLog (LogMessage)
Dim objItem, TotalOutputPower
For Each objItem in wbemObjectSet
'Error checking
If Err.Number <> 0 Then
ErrorMessage = "Number:" & Err.Number & "Description:" & Err.Description
MOMDebugLog (ErrorMessage)
End If
'Object Retrieval
If not objItem is nothing Then
TotalOutputPower = objItem.TotalOutputPower
If (TotalOutputPower <= 0) Then
TotalOutputPower = "N/A"
Else
TotalOutputPower = TotalOutputPower/10
End If
Set oInst = oDiscoveryData.CreateClassInstance("$MPElement[Name='Dell.Connections.ChassisPowerSuppliesUnit']$")
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.LogicalDevice']/DeviceID$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ChassisPowerSuppliesUnit']/DeviceID$", objItem.DeviceID)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ChassisPowerSuppliesUnit']/TotalOutputPower$", TotalOutputPower)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ChassisPowerSuppliesUnit']/IsSwitchingSupply$", objItem.IsSwitchingSupply)
call oInst.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", objItem.Name)
call oDiscoveryData.AddInstance(oInst)
PSFlag = 1
End If
Next
End If
Set wbemObjectSet = Nothing
End Function
300System!System.Discovery.Data$Config/IntervalSeconds$DellStorageDiscovery.vbs$MPElement$ $Target/Id$ $Config/Computer$
'**********************************************************************************
' Script Name - Dell Storage Discovery
' Author: Muralidhar
'
' Description:
' Discover all storage components for a Dell server with instrumentation using OMSS ClI
'
' (c) Copyright Dell Inc. 2007 - All rights reserved
'**********************************************************************************
Option Explicit
On Error Resume Next
Dim oArgs
Set oArgs = WScript.Arguments
if oArgs.Count < 3 Then
Wscript.Quit -1
End If
Dim SourceID, ManagedEntityId, TargetComputer
SourceId = oArgs(0)
ManagedEntityId = oArgs(1)
TargetComputer = oArgs(2)
Dim oAPI, oDiscoveryData, oInst
Dim strComputer, WbemServices, wbemObjectSet
strComputer=TargetComputer
Set oAPI = CreateObject("MOM.ScriptAPI")
set oDiscoveryData = oAPI.CreateDiscoveryData(0, SourceId, ManagedEntityId)
Const WAIT_LOOP = 1000000
Const SCRIPT_NAME = "Dell Agents State Monitoring"
Const OM_REPORT_STORAGE_CONTR = "Storage"
Const DEF_OMSA_BIN_PATH = "C:\Program Files\Dell\OpenManage\oma\bin"
Const OMSA_REG_INTALL_PATH = "HKEY_LOCAL_MACHINE\SOFTWARE\Dell Computer Corporation\Dell OMA\InstallPath"
Const OMSA64_REG_INTALL_PATH = "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Dell Computer Corporation\Dell OMA\InstallPath"
'Dell Hardware Instrumentation
Dim StorageStatus
Dim s
Set s = New DellStorage
s.DiscoverStorageControllers()
If s.StorageControllerFlag = 1 Then
set oInst = oDiscoveryData.CreateClassInstance("$MPElement[Name='Dell.Connections.DellStorage']$")
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.LogicalDevice']/DeviceID$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", "Storage")
call oDiscoveryData.AddInstance(oInst)
' Submit the data
Call oAPI.Return(oDiscoveryData)
End If
Set oDiscoveryData = Nothing
Set oAPI = Nothing
Class DellStorage
Dim arrServerStatus, arrStorageStatus
Dim StorageControllerFlag
Dim RegError, LogMessage, Message, Message1
Dim a, b
Dim strLine, rc, LogMesg
Dim fso, oFile, filespec
Dim oShell, WshShell, objStdOut
Dim strCommand, strRepFilePath, wintemp_path
Dim ParseStartPos, ParseEndPos
Dim Index, StatusIndex, StatusValue
Dim AttrFlag, ValueFlag, PrevStatus, StorageStatusValue
Dim g_omsaBinPath, g_drive, g_tempFolder
Function DiscoverStorageControllers()
Dim OMSABinPath ' Store Path from Registry key
Dim drive ' Drive letter
Dim version
RegError = 0
' Get OMSA Lib Path
rc = GetOMABinPath(OMSABinPath)
If rc <> 0 Then
' Message = "GetOMSAHealth:GetOMABinPath Error"
' MOMDebugLog Message
WScript.Quit()
Else
' Message = "GetOMSAHealth:OMSABinPath = " & OMSABinPath
' MOMDebugLog Message
End If
' Get Install root path
rc = GetOMInstallRoot(drive, OMSABinPath) ' return the current absolute path or the root path for the OMSA Install
If rc <> 0 Then
' Message = "GetOMSAHealth:GetOMInstallRoot Error"
' MOMDebugLog Message
WScript.Quit()
Else
' Message = "GetOMSAHealth:GetOMInstallRoot = " & drive
' MOMDebugLog Message
End If
If RegError = 1 Then
Message = "Task Fail: OMSA not installed / OMSA Registry Value not found."
MOMDebugLog Message
WScript.Quit()
End If
' Check VBScript engine version
version = CheckVBScriptEngine()
If version = True OR version = False Then
RunCLI drive, OMSABinPath
Else
Message = "Error: VBScript corrupted/absent. Please Re-Install Windows Script 5.6 on the Agent"
MOMDebugLog Message
WScript.Quit()
End If
End Function
'*****************************************************************
'Function RunCLI
'Routine For CLI VB.Run (For Version < 5.6)
'*****************************************************************
Function RunCLI(ByVal targetDrive, ByVal strOMSABinPath)
Dim guid1,guid3
GetTempFolderPath wintemp_path, targetDrive
GetOMReportFileGUID guid1
RunStorageCLI targetDrive, strOMSABinPath
End Function
'*****************************************************************
'GetOMABinPath
'Routine to read the registry to query the OMA Install Path
'*****************************************************************
Function GetOMABinPath(o_sPath)
Dim strOMAKey
Dim oShell, tmp
Set oShell = CreateObject ("WScript.Shell")
o_sPath = ""
On Error Resume Next
o_sPath = oShell.RegRead(OMSA_REG_INTALL_PATH)
If o_sPath = "" Then
o_sPath = oShell.RegRead(OMSA64_REG_INTALL_PATH)
End If
If o_sPath = "" Then
tmp = DEF_OMSA_BIN_PATH & "\omreport.exe"
If(bFileExists(tmp)) Then
o_sPath = DEF_OMSA_BIN_PATH
Message = "GetOMABinPath - OMSABinPath is empty, Using Default Existing Path" & DEF_OMSA_BIN_PATH
MOMDebugLog Message
Else
RegError = 1
End If
Else
o_sPath = o_sPath & "\bin"
End If
g_omsaBinPath = o_sPath
If Err <> 0 Then
GetOMSABinPath = Err.Number
End If
End Function
'*****************************************************************
'GetOMInstallRoot
'Routine to determine the Drive letter where OMSA is installed
'*****************************************************************
Private Function GetOMInstallRoot(ByRef path, ByVal OMSAInstallPath)
On Error Resume Next
Err.Clear
' Return the root drive of the OMInstall Path
path = Left(OMSAInstallPath, 2)
g_drive = path
End Function
'*****************************************************************
'bFileExists
'Routine to determine if the OMSA Report file is created
'*****************************************************************
Function bFileExists(filespec1)
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
bFileExists = (fso.FileExists(filespec1))
Set fso = Nothing
End Function
'*****************************************************************
'DelFile
'Routine to delete the OMSA Report file
'*****************************************************************
Function DelFile(ByVal filespec2)
Dim fso, oFile
If bFileExists(filespec2) Then
Set fso = CreateObject("Scripting.FileSystemObject")
fso.DeleteFile filespec2, True
Set fso = Nothing
End If
If Err <> 0 Then
DelFile = Err.Number
End If
End Function
'**********************************************************
' CheckVBScriptEngine()
' Check VBScript engine version:
'**********************************************************
Function CheckVBScriptEngine()
Dim bIsCompatV, var
Const VBSCRIPT_MIN_VERSION = 5.6
var = ScriptEngineMajorVersion & "." & ScriptEngineMinorVersion
If (CInt(var)) < VBSCRIPT_MIN_VERSION Then
bIsCompatV = False
Else
bIsCompatV = True
End If
If Err <> 0 Then
CheckVBScriptEngine = Err.Number
Else
CheckVBScriptEngine = bIsCompatV
End If
End Function
'*****************************************************************
'Function RunStorageCLI - Called from RunCLI If StorageArrayManagerFlag = 0
'Routine For VB.Run (For Version < 5.6)
'*****************************************************************
Function RunStorageCLI (ByVal Drive2, ByVal OMSABinPath)
Dim guid22
GetTempFolderPath wintemp_path, Drive2
GetOMReportFileGUID guid22
a = 1
b = 0
strRepFilePath = wintemp_path & "\" & OM_REPORT_STORAGE_CONTR & guid22 & ".txt"
strCommand = "cmd /C " & chr(34) & OMSABinPath & "\" & "omreport.exe" & Chr(34) & " storage controller -fmt ssv -outc " & strRepFilePath
filespec = strRepFilePath
Set oShell = CreateObject ("WScript.Shell")
rc = oShell.run (strCommand,0,true)
If rc <> 0 Then
DelFile(strRepFilePath)
Else
' Infinite Loop Until file OM_REPORT_FILE_NAME is created
Do While bFileExists(filespec) <> -1
WScript.Sleep(0)
a = a + 1
b = a Mod WAIT_LOOP
If b = 0 Then
MOMDebugLog "Exit RunCmd. Reason: OMREPORT STORAGE not responding for " & WAIT_LOOP & " loops."
Exit Do
End If
Loop
' Parse TXT File
ParseStorageFile filespec
' Clean up the CLI Output : Delete OM_REPORT_FILE_NAME for STORAGE
DelFile(strRepFilePath)
End If ' End of If Condition for rc<>0 for oshell.run(omreport storage controller)
Set strRepFilePath = Nothing
Set strCommand = Nothing
Set oShell = Nothing
Set filespec = Nothing
End Function
'*****************************************************************
' Function ParseStorageFile
' Rollup GlobalStorageHealth from OMSS StorageController TXT Output
'*****************************************************************
Function ParseStorageFile(ByVal storagefilepath)
Dim objFSO, objFile, strLine, strTempLine, strLineSearchCriteria, valueArray, valueSeperator
strLineSearchCriteria = "ID;"
valueSeperator = ";"
If(bFileExists(storagefilepath)) Then
Set objFSO = CreateObject("Scripting.FileSystemObject")
If (IsObject(objFSO) = True) Then
Set objFile = objFSO.OpenTextFile(storagefilepath, 1)
Do Until objFile.AtEndOfStream
strLine = objFile.ReadLine
If (InStr(strLine, strLineSearchCriteria) = 1) Then
Do Until objFile.AtEndOfStream
strLine = objFile.ReadLine
valueArray = split(strLine, valueSeperator, -1)
If (UBound(valueArray) <> 21) Then
strTempLine = objFile.ReadLine
strLine = strLine & strTempLine
valueArray = split(strLine, valueSeperator, -1)
End If
set oInst = oDiscoveryData.CreateClassInstance("$MPElement[Name='Dell.Connections.DellStorageController']$")
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.LogicalDevice']/DeviceID$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.DellStorageController']/DeviceID$", valueArray(0))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.DellStorageController']/Status$", valueArray(1))
call oInst.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", valueArray(2))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.DellStorageController']/SlotID$", valueArray(3))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.DellStorageController']/State$", valueArray(4))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.DellStorageController']/FirmwareVer$", valueArray(5))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.DellStorageController']/MinReqFirmwareVer$", valueArray(6))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.DellStorageController']/DriverVer$", valueArray(7))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.DellStorageController']/MinReqDriverVer$", valueArray(8))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.DellStorageController']/NumOfConnectors$", valueArray(9))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.DellStorageController']/RebuildRate$", valueArray(10))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.DellStorageController']/BGIRate$", valueArray(11))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.DellStorageController']/CheckConsistencyRate$", valueArray(12))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.DellStorageController']/ReConstructRate$", valueArray(13))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.DellStorageController']/AlarmState$", valueArray(14))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.DellStorageController']/ClusterMode$", valueArray(15))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.DellStorageController']/SCSIInitiatorID$", valueArray(16))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.DellStorageController']/CacheMemorySize$", valueArray(17))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.DellStorageController']/PatrolReadMode$", valueArray(18))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.DellStorageController']/PatrolReadState$", valueArray(19))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.DellStorageController']/PatrolReadRate$", valueArray(20))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.DellStorageController']/PatrolReadIterations$", valueArray(21))
call oDiscoveryData.AddInstance(oInst)
StorageControllerFlag = 1
DiscoverControllerBattery valueArray(0)
DiscoverControllerConnector valueArray(0)
DiscoverControllerVirtualDisk valueArray(0)
Loop
End If
Loop
objFile.Close
Else
Message = "Error: FileSystem object not created using CreateObject - Scripting.FileSystemObject"
MOMDebugLog Message
End If
Set objFSO = Nothing
Else
Message = "Storage CLI TXT Output File does not exist - " & storagefilepath
MOMDebugLog Message
End If
End Function
'*****************************************************************
' Function MOMDebugLog
' Add LogMessage Header - ScriptName and Time and Logging it.
'*****************************************************************
Function MOMDebugLog (ByVal strMessage)
LogMessage = "(" & SCRIPT_NAME & ")" & "-" & "[" & Now() & "] --- "
LogMessage = LogMessage & strMessage
End Function
'*****************************************************************
'GetTempFolderPath
'Routine to Get Win Temp Folder path
'*****************************************************************
Function GetTempFolderPath(ByRef WinTempFolder, ByVal drive_letter)
Dim FldrExistFlag, fso
FldrExistFlag = False
dim wshShell : Set wshShell = Createobject("WScript.Shell")
dim wshSysEnv : Set wshSysEnv = wshShell.Environment
dim strSysTempFolder : strSysTempFolder = wshSysEnv("TEMP")
dim wshPrcEnv : Set wshPrcEnv = wshShell.Environment("Process")
strSysTempFolder = Replace(strSysTempFolder, "%SystemRoot%", wshPrcEnv("SYSTEMROOT"), 1, -1, vbTextCompare)
WinTempFolder = strSysTempFolder
Set fso = CreateObject("Scripting.FileSystemObject")
If (fso.FolderExists(WinTempFolder)) Then
FldrExistFlag = True
Else
FldrExistFlag = False
End If
If WinTempFolder = "" OR FldrExistFlag = False Then
WinTempFolder = drive_letter
End If
g_tempFolder = WinTempFolder
Set wshShell = Nothing
Set wshSysEnv = Nothing
Set strSysTempFolder = Nothing
Set wshPrcEnv = Nothing
If Err <> 0 Then
GetTempFolderPath = Err.Number
End If
End Function
'*****************************************************************
'GetOMReportFileGUID
'Routine to generate unique GUIDs for OMREPORT FILE
'*****************************************************************
Function GetOMReportFileGUID(ByRef o_guid)
Dim TypeLib, NewGUID
Set TypeLib = CreateObject("Scriptlet.TypeLib")
NewGUID = TypeLib.Guid
o_guid = (left(NewGUID, len(NewGUID)-2))
Set TypeLib = Nothing
End Function
Function DiscoverControllerBattery (ByVal controllerID)
Dim file_path, command, file_spec, x, y, o_Shell, result
Dim objFSO, objFile, strLine, strLineSearchCriteria, valueArray, valueSeperator
x = 1
y = 0
file_path = g_tempFolder & "\" & OM_REPORT_STORAGE_CONTR & "controller_" & controllerID & "_battery.txt"
command = "cmd /C " & chr(34) & g_omsaBinPath & "\" & "omreport.exe" & Chr(34) & " storage battery controller=" & controllerID & " -fmt ssv -outc " & file_path
file_spec = file_path
Set o_Shell = CreateObject ("WScript.Shell")
result = o_Shell.run (command,0,true)
If result <> 0 Then
DelFile(file_path)
Else
' Infinite Loop Until file OM_REPORT_FILE_NAME is created
Do While bFileExists(file_spec) <> -1
WScript.Sleep(0)
x = x + 1
y = x Mod WAIT_LOOP
If y = 0 Then
MOMDebugLog "Exit RunCmd. Reason: OMREPORT STORAGE not responding for " & WAIT_LOOP & " loops."
Exit Do
End If
Loop
strLineSearchCriteria = "ID;"
valueSeperator = ";"
If(bFileExists(file_spec)) Then
Set objFSO = CreateObject("Scripting.FileSystemObject")
If (IsObject(objFSO) = True) Then
Set objFile = objFSO.OpenTextFile(file_spec, 1)
Do Until objFile.AtEndOfStream
strLine = objFile.ReadLine
If (InStr(strLine, strLineSearchCriteria) = 1) Then
Do Until objFile.AtEndOfStream
strLine = objFile.ReadLine
valueArray = split(strLine, valueSeperator, -1)
set oInst = oDiscoveryData.CreateClassInstance("$MPElement[Name='Dell.Connections.ControllerBattery']$")
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.LogicalDevice']/DeviceID$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.DellStorageController']/DeviceID$", controllerID)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ControllerBattery']/ID$", valueArray(0))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ControllerBattery']/Status$", valueArray(1))
call oInst.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", valueArray(2))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ControllerBattery']/State$", valueArray(3))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ControllerBattery']/RechargeCount$", valueArray(4))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ControllerBattery']/MaxRechargeCount$", valueArray(5))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ControllerBattery']/PredictedCapacityStatus$", valueArray(6))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ControllerBattery']/LearnState$", valueArray(7))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ControllerBattery']/NextLearnTime$", valueArray(8))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ControllerBattery']/MaxLearnDelay$", valueArray(9))
call oDiscoveryData.AddInstance(oInst)
Loop
End If
Loop
objFile.Close
Else
Message = "Error: FileSystem object not created using CreateObject - Scripting.FileSystemObject"
MOMDebugLog Message
End If
Set objFSO = Nothing
Else
Message = "Storage CLI TXT Output File does not exist - " & file_spec
MOMDebugLog Message
End If
' Clean up the CLI Output : Delete OM_REPORT_FILE_NAME for STORAGE
DelFile(file_path)
End If ' End of If Condition for rc<>0 for oshell.run(omreport storage controller)
Set file_path = Nothing
Set command = Nothing
Set o_Shell = Nothing
Set file_spec = Nothing
End Function
Function DiscoverControllerVirtualDisk (ByVal controllerID)
Dim file_path, command, file_spec, x, y, o_Shell, result
Dim objFSO, objFile, strLine, strLineSearchCriteria, valueArray, valueSeperator
x = 1
y = 0
file_path = g_tempFolder & "\" & OM_REPORT_STORAGE_CONTR & "controller_" & controllerID & "_vdisk.txt"
command = "cmd /C " & chr(34) & g_omsaBinPath & "\" & "omreport.exe" & Chr(34) & " storage vdisk controller=" & controllerID & " -fmt ssv -outc " & file_path
file_spec = file_path
Set o_Shell = CreateObject ("WScript.Shell")
result = o_Shell.run (command,0,true)
If result <> 0 Then
DelFile(file_path)
Else
' Infinite Loop Until file OM_REPORT_FILE_NAME is created
Do While bFileExists(file_spec) <> -1
WScript.Sleep(0)
x = x + 1
y = x Mod WAIT_LOOP
If y = 0 Then
MOMDebugLog "Exit RunCmd. Reason: OMREPORT STORAGE not responding for " & WAIT_LOOP & " loops."
Exit Do
End If
Loop
strLineSearchCriteria = "ID;"
valueSeperator = ";"
If(bFileExists(file_spec)) Then
Set objFSO = CreateObject("Scripting.FileSystemObject")
If (IsObject(objFSO) = True) Then
Set objFile = objFSO.OpenTextFile(file_spec, 1)
Do Until objFile.AtEndOfStream
strLine = objFile.ReadLine
If (InStr(strLine, strLineSearchCriteria) = 1) Then
Do Until objFile.AtEndOfStream
strLine = objFile.ReadLine
valueArray = split(strLine, valueSeperator, -1)
set oInst = oDiscoveryData.CreateClassInstance("$MPElement[Name='Dell.Connections.ControllerVirtualDisk']$")
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.LogicalDevice']/DeviceID$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.DellStorageController']/DeviceID$", controllerID)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ControllerVirtualDisk']/ID$", valueArray(0))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ControllerVirtualDisk']/Status$", valueArray(1))
call oInst.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", valueArray(2))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ControllerVirtualDisk']/State$", valueArray(3))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ControllerVirtualDisk']/Progress$", valueArray(4))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ControllerVirtualDisk']/Layout$", valueArray(5))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ControllerVirtualDisk']/Size$", valueArray(6))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ControllerVirtualDisk']/DeviceName$", valueArray(7))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ControllerVirtualDisk']/Type$", valueArray(8))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ControllerVirtualDisk']/ReadPolicy$", valueArray(9))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ControllerVirtualDisk']/WritePolicy$", valueArray(10))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ControllerVirtualDisk']/CachePolicy$", valueArray(11))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ControllerVirtualDisk']/StripeElementSize$", valueArray(12))
call oDiscoveryData.AddInstance(oInst)
Loop
End If
Loop
objFile.Close
Else
Message = "Error: FileSystem object not created using CreateObject - Scripting.FileSystemObject"
MOMDebugLog Message
End If
Set objFSO = Nothing
Else
Message = "Storage CLI TXT Output File does not exist - " & file_spec
MOMDebugLog Message
End If
' Clean up the CLI Output : Delete OM_REPORT_FILE_NAME for STORAGE
DelFile(file_path)
End If ' End of If Condition for rc<>0 for oshell.run(omreport storage controller)
Set file_path = Nothing
Set command = Nothing
Set o_Shell = Nothing
Set file_spec = Nothing
End Function
Function DiscoverControllerConnector (ByVal controllerID)
Dim file_path, command, file_spec, x, y, o_Shell, result
Dim objFSO, objFile, strLine, strLineSearchCriteria, valueArray, valueSeperator
x = 1
y = 0
file_path = g_tempFolder & "\" & OM_REPORT_STORAGE_CONTR & "controller_" & controllerID & "_connector.txt"
command = "cmd /C " & chr(34) & g_omsaBinPath & "\" & "omreport.exe" & Chr(34) & " storage connector controller=" & controllerID & " -fmt ssv -outc " & file_path
file_spec = file_path
Set o_Shell = CreateObject ("WScript.Shell")
result = o_Shell.run (command,0,true)
If result <> 0 Then
DelFile(file_path)
Else
' Infinite Loop Until file OM_REPORT_FILE_NAME is created
Do While bFileExists(file_spec) <> -1
WScript.Sleep(0)
x = x + 1
y = x Mod WAIT_LOOP
If y = 0 Then
MOMDebugLog "Exit RunCmd. Reason: OMREPORT STORAGE not responding for " & WAIT_LOOP & " loops."
Exit Do
End If
Loop
strLineSearchCriteria = "ID;"
valueSeperator = ";"
If(bFileExists(file_spec)) Then
Set objFSO = CreateObject("Scripting.FileSystemObject")
If (IsObject(objFSO) = True) Then
Set objFile = objFSO.OpenTextFile(file_spec, 1)
Do Until objFile.AtEndOfStream
strLine = objFile.ReadLine
If (InStr(strLine, strLineSearchCriteria) = 1) Then
Do Until objFile.AtEndOfStream
strLine = objFile.ReadLine
valueArray = split(strLine, valueSeperator, -1)
set oInst = oDiscoveryData.CreateClassInstance("$MPElement[Name='Dell.Connections.ControllerConnector']$")
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.LogicalDevice']/DeviceID$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.DellStorageController']/DeviceID$", controllerID)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ControllerConnector']/ID$", valueArray(0))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ControllerConnector']/Status$", valueArray(1))
call oInst.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", valueArray(2))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ControllerConnector']/State$", valueArray(3))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ControllerConnector']/ConnectorType$", valueArray(4))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ControllerConnector']/Termination$", valueArray(5))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ControllerConnector']/SCSIRate$", valueArray(6))
call oDiscoveryData.AddInstance(oInst)
DiscoverEnclosure controllerID, valueArray(0)
DiscoverConnectorPhysicalDisk controllerID, valueArray(0)
Loop
End If
Loop
objFile.Close
Else
Message = "Error: FileSystem object not created using CreateObject - Scripting.FileSystemObject"
MOMDebugLog Message
End If
Set objFSO = Nothing
Else
Message = "Storage CLI TXT Output File does not exist - " & file_spec
MOMDebugLog Message
End If
' Clean up the CLI Output : Delete OM_REPORT_FILE_NAME for STORAGE
DelFile(file_path)
End If ' End of If Condition for rc<>0 for oshell.run(omreport storage controller)
Set file_path = Nothing
Set command = Nothing
Set o_Shell = Nothing
Set file_spec = Nothing
End Function
Function DiscoverEnclosure (ByVal controllerID, ByVal connectorID)
Dim file_path, command, file_spec, x, y, o_Shell, result
Dim objFSO, objFile, strLine, strLineSearchCriteria, valueArray, valueSeperator
x = 1
y = 0
file_path = g_tempFolder & "\" & OM_REPORT_STORAGE_CONTR & "controller_" & controllerID & "_enclosure.txt"
command = "cmd /C " & chr(34) & g_omsaBinPath & "\" & "omreport.exe" & Chr(34) & " storage enclosure controller=" & controllerID & " -fmt ssv -outc " & file_path
file_spec = file_path
Set o_Shell = CreateObject ("WScript.Shell")
result = o_Shell.run (command,0,true)
If result <> 0 Then
DelFile(file_path)
Else
' Infinite Loop Until file OM_REPORT_FILE_NAME is created
Do While bFileExists(file_spec) <> -1
WScript.Sleep(0)
x = x + 1
y = x Mod WAIT_LOOP
If y = 0 Then
MOMDebugLog "Exit RunCmd. Reason: OMREPORT STORAGE not responding for " & WAIT_LOOP & " loops."
Exit Do
End If
Loop
strLineSearchCriteria = "ID;"
valueSeperator = ";"
If(bFileExists(file_spec)) Then
Set objFSO = CreateObject("Scripting.FileSystemObject")
If (IsObject(objFSO) = True) Then
Set objFile = objFSO.OpenTextFile(file_spec, 1)
Do Until objFile.AtEndOfStream
strLine = objFile.ReadLine
If (InStr(strLine, strLineSearchCriteria) = 1) Then
Do Until objFile.AtEndOfStream
strLine = objFile.ReadLine
valueArray = split(strLine, valueSeperator, -1)
If (StrComp(Trim(connectorID), Trim(valueArray(4))) = 0) Then
set oInst = oDiscoveryData.CreateClassInstance("$MPElement[Name='Dell.Connections.ControllerEnclosure']$")
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.LogicalDevice']/DeviceID$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.DellStorageController']/DeviceID$", controllerID)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ControllerConnector']/ID$", connectorID)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ControllerEnclosure']/ID$", valueArray(0))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ControllerEnclosure']/Status$", valueArray(1))
call oInst.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", valueArray(2))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ControllerEnclosure']/State$", valueArray(3))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ControllerEnclosure']/Connector$", valueArray(4))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ControllerEnclosure']/TargetID$", valueArray(5))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ControllerEnclosure']/Configuration$", valueArray(6))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ControllerEnclosure']/FirmwareVersion$", valueArray(7))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ControllerEnclosure']/ServiceTag$", valueArray(8))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ControllerEnclosure']/AssetTag$", valueArray(9))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ControllerEnclosure']/AssetName$", valueArray(10))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ControllerEnclosure']/BackplanePartNum$", valueArray(11))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ControllerEnclosure']/SplitbusPartNum$", valueArray(12))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ControllerEnclosure']/EnclosurePartNum$", valueArray(13))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ControllerEnclosure']/SASAddress$", valueArray(14))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ControllerEnclosure']/EnclosureAlarm$", valueArray(15))
call oDiscoveryData.AddInstance(oInst)
DiscoverEnclosurePhysicalDisk controllerID, connectorID, valueArray(0)
DiscoverTemperature controllerID, connectorID, valueArray(0)
DiscoverFan controllerID, connectorID, valueArray(0)
DiscoverPowerSupply controllerID, connectorID, valueArray(0)
DiscoverEMM controllerID, connectorID, valueArray(0)
End If
Loop
End If
Loop
objFile.Close
Else
Message = "Error: FileSystem object not created using CreateObject - Scripting.FileSystemObject"
MOMDebugLog Message
End If
Set objFSO = Nothing
Else
Message = "Storage CLI TXT Output File does not exist - " & file_spec
MOMDebugLog Message
End If
' Clean up the CLI Output : Delete OM_REPORT_FILE_NAME for STORAGE
DelFile(file_path)
End If ' End of If Condition for rc<>0 for oshell.run(omreport storage controller)
Set file_path = Nothing
Set command = Nothing
Set o_Shell = Nothing
Set file_spec = Nothing
End Function
Function DiscoverEnclosurePhysicalDisk (ByVal controllerID, ByVal connectorID, ByVal enclosureID)
Dim file_path, command, file_spec, x, y, o_Shell, result
Dim objFSO, objFile, strLine, strLineSearchCriteria, valueArray, valueSeperator
x = 1
y = 0
file_path = g_tempFolder & "\" & OM_REPORT_STORAGE_CONTR & "controller_" & controllerID & "enclosure_pdisk.txt"
command = "cmd /C " & chr(34) & g_omsaBinPath & "\" & "omreport.exe" & Chr(34) & " storage pdisk controller=" & controllerID & " connector=" & connectorID & " -fmt ssv -outc " & file_path
file_spec = file_path
Set o_Shell = CreateObject ("WScript.Shell")
result = o_Shell.run (command,0,true)
If result <> 0 Then
DelFile(file_path)
Else
' Infinite Loop Until file OM_REPORT_FILE_NAME is created
Do While bFileExists(file_spec) <> -1
WScript.Sleep(0)
x = x + 1
y = x Mod WAIT_LOOP
If y = 0 Then
MOMDebugLog "Exit RunCmd. Reason: OMREPORT STORAGE not responding for " & WAIT_LOOP & " loops."
Exit Do
End If
Loop
strLineSearchCriteria = "ID;"
valueSeperator = ";"
Dim tempArray, tempSeperator, tempEnclosureID, encIDArray
tempSeperator = ":"
If(bFileExists(file_spec)) Then
Set objFSO = CreateObject("Scripting.FileSystemObject")
If (IsObject(objFSO) = True) Then
Set objFile = objFSO.OpenTextFile(file_spec, 1)
Do Until objFile.AtEndOfStream
strLine = objFile.ReadLine
If (InStr(strLine, strLineSearchCriteria) = 1) Then
Do Until objFile.AtEndOfStream
strLine = objFile.ReadLine
valueArray = split(strLine, valueSeperator, -1)
tempArray = split(valueArray(0), tempSeperator, -1)
If (UBound(tempArray) = 2) Then
encIDArray = split(enclosureID, tempSeperator, -1)
If (UBound(encIDArray) = 1) Then
tempEnclosureID = encIDArray(1)
Else
tempEnclosureID = encIDArray(0)
End If
If (StrComp(Trim(tempEnclosureID), Trim(tempArray(1))) = 0) Then
set oInst = oDiscoveryData.CreateClassInstance("$MPElement[Name='Dell.Connections.EnclosurePhysicalDisk']$")
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.LogicalDevice']/DeviceID$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.DellStorageController']/DeviceID$", controllerID)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ControllerConnector']/ID$", connectorID)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ControllerEnclosure']/ID$", enclosureID)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.EnclosurePhysicalDisk']/ID$", valueArray(0))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.EnclosurePhysicalDisk']/Status$", valueArray(1))
call oInst.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", valueArray(2))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.EnclosurePhysicalDisk']/State$", valueArray(3))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.EnclosurePhysicalDisk']/FailurePredicted$", valueArray(4))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.EnclosurePhysicalDisk']/Progress$", valueArray(5))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.EnclosurePhysicalDisk']/Type$", valueArray(6))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.EnclosurePhysicalDisk']/Capacity$", valueArray(7))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.EnclosurePhysicalDisk']/UsedRaidDiskSpace$", valueArray(8))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.EnclosurePhysicalDisk']/AvailableRaidDiskSpace$", valueArray(9))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.EnclosurePhysicalDisk']/HotSpare$", valueArray(10))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.EnclosurePhysicalDisk']/VendorID$", valueArray(11))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.EnclosurePhysicalDisk']/ProductID$", valueArray(12))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.EnclosurePhysicalDisk']/Revision$", valueArray(13))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.EnclosurePhysicalDisk']/SerialNumber$", valueArray(14))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.EnclosurePhysicalDisk']/NegotiatedSpeed$", valueArray(15))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.EnclosurePhysicalDisk']/CapableSpeed$", valueArray(16))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.EnclosurePhysicalDisk']/ManufactureDay$", valueArray(17))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.EnclosurePhysicalDisk']/ManufactureWeek$", valueArray(18))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.EnclosurePhysicalDisk']/ManufactureYear$", valueArray(19))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.EnclosurePhysicalDisk']/SASAddress$", valueArray(20))
call oDiscoveryData.AddInstance(oInst)
End If
End If
Loop
End If
Loop
objFile.Close
Else
Message = "Error: FileSystem object not created using CreateObject - Scripting.FileSystemObject"
MOMDebugLog Message
End If
Set objFSO = Nothing
Else
Message = "Storage CLI TXT Output File does not exist - " & file_spec
MOMDebugLog Message
End If
' Clean up the CLI Output : Delete OM_REPORT_FILE_NAME for STORAGE
DelFile(file_path)
End If ' End of If Condition for rc<>0 for oshell.run(omreport storage controller)
Set file_path = Nothing
Set command = Nothing
Set o_Shell = Nothing
Set file_spec = Nothing
End Function
Function DiscoverConnectorPhysicalDisk (ByVal controllerID, ByVal connectorID)
Dim file_path, command, file_spec, x, y, o_Shell, result
Dim objFSO, objFile, strLine, strLineSearchCriteria, valueArray, valueSeperator
x = 1
y = 0
file_path = g_tempFolder & "\" & OM_REPORT_STORAGE_CONTR & "controller_" & controllerID & "_connector_pdisk.txt"
command = "cmd /C " & chr(34) & g_omsaBinPath & "\" & "omreport.exe" & Chr(34) & " storage pdisk controller=" & controllerID & " connector=" & connectorID & " -fmt ssv -outc " & file_path
file_spec = file_path
Set o_Shell = CreateObject ("WScript.Shell")
result = o_Shell.run (command,0,true)
If result <> 0 Then
DelFile(file_path)
Else
' Infinite Loop Until file OM_REPORT_FILE_NAME is created
Do While bFileExists(file_spec) <> -1
WScript.Sleep(0)
x = x + 1
y = x Mod WAIT_LOOP
If y = 0 Then
MOMDebugLog "Exit RunCmd. Reason: OMREPORT STORAGE not responding for " & WAIT_LOOP & " loops."
Exit Do
End If
Loop
strLineSearchCriteria = "ID;"
valueSeperator = ";"
Dim tempArray, tempSeperator
tempSeperator = ":"
If(bFileExists(file_spec)) Then
Set objFSO = CreateObject("Scripting.FileSystemObject")
If (IsObject(objFSO) = True) Then
Set objFile = objFSO.OpenTextFile(file_spec, 1)
Do Until objFile.AtEndOfStream
strLine = objFile.ReadLine
If (InStr(strLine, strLineSearchCriteria) = 1) Then
Do Until objFile.AtEndOfStream
strLine = objFile.ReadLine
valueArray = split(strLine, valueSeperator, -1)
tempArray = split(valueArray(0), tempSeperator, -1)
If (UBound(tempArray) <> 2) Then
set oInst = oDiscoveryData.CreateClassInstance("$MPElement[Name='Dell.Connections.ConnectorPhysicalDisk']$")
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.LogicalDevice']/DeviceID$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.DellStorageController']/DeviceID$", controllerID)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ControllerConnector']/ID$", connectorID)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ConnectorPhysicalDisk']/ID$", valueArray(0))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ConnectorPhysicalDisk']/Status$", valueArray(1))
call oInst.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", valueArray(2))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ConnectorPhysicalDisk']/State$", valueArray(3))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ConnectorPhysicalDisk']/FailurePredicted$", valueArray(4))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ConnectorPhysicalDisk']/Progress$", valueArray(5))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ConnectorPhysicalDisk']/Type$", valueArray(6))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ConnectorPhysicalDisk']/Capacity$", valueArray(7))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ConnectorPhysicalDisk']/UsedRaidDiskSpace$", valueArray(8))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ConnectorPhysicalDisk']/AvailableRaidDiskSpace$", valueArray(9))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ConnectorPhysicalDisk']/HotSpare$", valueArray(10))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ConnectorPhysicalDisk']/VendorID$", valueArray(11))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ConnectorPhysicalDisk']/ProductID$", valueArray(12))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ConnectorPhysicalDisk']/Revision$", valueArray(13))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ConnectorPhysicalDisk']/SerialNumber$", valueArray(14))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ConnectorPhysicalDisk']/NegotiatedSpeed$", valueArray(15))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ConnectorPhysicalDisk']/CapableSpeed$", valueArray(16))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ConnectorPhysicalDisk']/ManufactureDay$", valueArray(17))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ConnectorPhysicalDisk']/ManufactureWeek$", valueArray(18))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ConnectorPhysicalDisk']/ManufactureYear$", valueArray(19))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ConnectorPhysicalDisk']/SASAddress$", valueArray(20))
call oDiscoveryData.AddInstance(oInst)
End If
Loop
End If
Loop
objFile.Close
Else
Message = "Error: FileSystem object not created using CreateObject - Scripting.FileSystemObject"
MOMDebugLog Message
End If
Set objFSO = Nothing
Else
Message = "Storage CLI TXT Output File does not exist - " & file_spec
MOMDebugLog Message
End If
' Clean up the CLI Output : Delete OM_REPORT_FILE_NAME for STORAGE
DelFile(file_path)
End If ' End of If Condition for rc<>0 for oshell.run(omreport storage controller)
Set file_path = Nothing
Set command = Nothing
Set o_Shell = Nothing
Set file_spec = Nothing
End Function
Function DiscoverTemperature (ByVal controllerID, ByVal connectorID, ByVal enclosureID)
Dim file_path, command, file_spec, x, y, o_Shell, result
Dim objFSO, objFile, strLine, strLineSearchCriteria, valueArray, valueSeperator
x = 1
y = 0
file_path = g_tempFolder & "\" & OM_REPORT_STORAGE_CONTR & "controller_" & controllerID & "enclosure_temps.txt"
command = "cmd /C " & chr(34) & g_omsaBinPath & "\" & "omreport.exe" & Chr(34) & " storage enclosure controller=" & controllerID & " enclosure=" & enclosureID & " info=temps -fmt ssv -outc " & file_path
file_spec = file_path
Set o_Shell = CreateObject ("WScript.Shell")
result = o_Shell.run (command,0,true)
If result <> 0 Then
DelFile(file_path)
Else
' Infinite Loop Until file OM_REPORT_FILE_NAME is created
Do While bFileExists(file_spec) <> -1
WScript.Sleep(0)
x = x + 1
y = x Mod WAIT_LOOP
If y = 0 Then
MOMDebugLog "Exit RunCmd. Reason: OMREPORT STORAGE not responding for " & WAIT_LOOP & " loops."
Exit Do
End If
Loop
strLineSearchCriteria = "ID;"
valueSeperator = ";"
If(bFileExists(file_spec)) Then
Set objFSO = CreateObject("Scripting.FileSystemObject")
If (IsObject(objFSO) = True) Then
Set objFile = objFSO.OpenTextFile(file_spec, 1)
Do Until objFile.AtEndOfStream
strLine = objFile.ReadLine
If (InStr(strLine, strLineSearchCriteria) = 1) Then
Do Until objFile.AtEndOfStream
strLine = objFile.ReadLine
valueArray = split(strLine, valueSeperator, -1)
set oInst = oDiscoveryData.CreateClassInstance("$MPElement[Name='Dell.Connections.EnclosureTemperature']$")
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.LogicalDevice']/DeviceID$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.DellStorageController']/DeviceID$", controllerID)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ControllerConnector']/ID$", connectorID)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ControllerEnclosure']/ID$", enclosureID)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.EnclosureTemperature']/ID$", valueArray(0))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.EnclosureTemperature']/Status$", valueArray(1))
call oInst.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", valueArray(2))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.EnclosureTemperature']/State$", valueArray(3))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.EnclosureTemperature']/Reading$", valueArray(4))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.EnclosureTemperature']/MinWarningThreshold$", valueArray(5))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.EnclosureTemperature']/MaxWarningThreshold$", valueArray(6))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.EnclosureTemperature']/MinFailureThreshold$", valueArray(7))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.EnclosureTemperature']/MaxFailureThreshold$", valueArray(8))
call oDiscoveryData.AddInstance(oInst)
Loop
End If
Loop
objFile.Close
Else
Message = "Error: FileSystem object not created using CreateObject - Scripting.FileSystemObject"
MOMDebugLog Message
End If
Set objFSO = Nothing
Else
Message = "Storage CLI TXT Output File does not exist - " & file_spec
MOMDebugLog Message
End If
' Clean up the CLI Output : Delete OM_REPORT_FILE_NAME for STORAGE
DelFile(file_path)
End If ' End of If Condition for rc<>0 for oshell.run(omreport storage controller)
Set file_path = Nothing
Set command = Nothing
Set o_Shell = Nothing
Set file_spec = Nothing
End Function
Function DiscoverFan (ByVal controllerID, ByVal connectorID, ByVal enclosureID)
Dim file_path, command, file_spec, x, y, o_Shell, result
Dim objFSO, objFile, strLine, strLineSearchCriteria, valueArray, valueSeperator
x = 1
y = 0
file_path = g_tempFolder & "\" & OM_REPORT_STORAGE_CONTR & "controller_" & controllerID & "enclosure_fans.txt"
command = "cmd /C " & chr(34) & g_omsaBinPath & "\" & "omreport.exe" & Chr(34) & " storage enclosure controller=" & controllerID & " enclosure=" & enclosureID & " info=fans -fmt ssv -outc " & file_path
file_spec = file_path
Set o_Shell = CreateObject ("WScript.Shell")
result = o_Shell.run (command,0,true)
If result <> 0 Then
DelFile(file_path)
Else
' Infinite Loop Until file OM_REPORT_FILE_NAME is created
Do While bFileExists(file_spec) <> -1
WScript.Sleep(0)
x = x + 1
y = x Mod WAIT_LOOP
If y = 0 Then
MOMDebugLog "Exit RunCmd. Reason: OMREPORT STORAGE not responding for " & WAIT_LOOP & " loops."
Exit Do
End If
Loop
strLineSearchCriteria = "ID;"
valueSeperator = ";"
If(bFileExists(file_spec)) Then
Set objFSO = CreateObject("Scripting.FileSystemObject")
If (IsObject(objFSO) = True) Then
Set objFile = objFSO.OpenTextFile(file_spec, 1)
Do Until objFile.AtEndOfStream
strLine = objFile.ReadLine
If (InStr(strLine, strLineSearchCriteria) = 1) Then
Do Until objFile.AtEndOfStream
strLine = objFile.ReadLine
valueArray = split(strLine, valueSeperator, -1)
set oInst = oDiscoveryData.CreateClassInstance("$MPElement[Name='Dell.Connections.EnclosureFan']$")
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.LogicalDevice']/DeviceID$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.DellStorageController']/DeviceID$", controllerID)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ControllerConnector']/ID$", connectorID)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ControllerEnclosure']/ID$", enclosureID)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.EnclosureFan']/ID$", valueArray(0))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.EnclosureFan']/Status$", valueArray(1))
call oInst.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", valueArray(2))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.EnclosureFan']/State$", valueArray(3))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.EnclosureFan']/PartNumber$", valueArray(4))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.EnclosureFan']/Speed$", valueArray(5))
call oDiscoveryData.AddInstance(oInst)
Loop
End If
Loop
objFile.Close
Else
Message = "Error: FileSystem object not created using CreateObject - Scripting.FileSystemObject"
MOMDebugLog Message
End If
Set objFSO = Nothing
Else
Message = "Storage CLI TXT Output File does not exist - " & file_spec
MOMDebugLog Message
End If
' Clean up the CLI Output : Delete OM_REPORT_FILE_NAME for STORAGE
DelFile(file_path)
End If ' End of If Condition for rc<>0 for oshell.run(omreport storage controller)
Set file_path = Nothing
Set command = Nothing
Set o_Shell = Nothing
Set file_spec = Nothing
End Function
Function DiscoverPowerSupply (ByVal controllerID, ByVal connectorID, ByVal enclosureID)
Dim file_path, command, file_spec, x, y, o_Shell, result
Dim objFSO, objFile, strLine, strLineSearchCriteria, valueArray, valueSeperator
x = 1
y = 0
file_path = g_tempFolder & "\" & OM_REPORT_STORAGE_CONTR & "controller_" & controllerID & "enclosure_ps.txt"
command = "cmd /C " & chr(34) & g_omsaBinPath & "\" & "omreport.exe" & Chr(34) & " storage enclosure controller=" & controllerID & " enclosure=" & enclosureID & " info=pwrsupplies -fmt ssv -outc " & file_path
file_spec = file_path
Set o_Shell = CreateObject ("WScript.Shell")
result = o_Shell.run (command,0,true)
If result <> 0 Then
DelFile(file_path)
Else
' Infinite Loop Until file OM_REPORT_FILE_NAME is created
Do While bFileExists(file_spec) <> -1
WScript.Sleep(0)
x = x + 1
y = x Mod WAIT_LOOP
If y = 0 Then
MOMDebugLog "Exit RunCmd. Reason: OMREPORT STORAGE not responding for " & WAIT_LOOP & " loops."
Exit Do
End If
Loop
strLineSearchCriteria = "ID;"
valueSeperator = ";"
If(bFileExists(file_spec)) Then
Set objFSO = CreateObject("Scripting.FileSystemObject")
If (IsObject(objFSO) = True) Then
Set objFile = objFSO.OpenTextFile(file_spec, 1)
Do Until objFile.AtEndOfStream
strLine = objFile.ReadLine
If (InStr(strLine, strLineSearchCriteria) = 1) Then
Do Until objFile.AtEndOfStream
strLine = objFile.ReadLine
valueArray = split(strLine, valueSeperator, -1)
set oInst = oDiscoveryData.CreateClassInstance("$MPElement[Name='Dell.Connections.EnclosurePowerSupply']$")
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.LogicalDevice']/DeviceID$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.DellStorageController']/DeviceID$", controllerID)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ControllerConnector']/ID$", connectorID)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ControllerEnclosure']/ID$", enclosureID)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.EnclosurePowerSupply']/ID$", valueArray(0))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.EnclosurePowerSupply']/Status$", valueArray(1))
call oInst.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", valueArray(2))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.EnclosurePowerSupply']/State$", valueArray(3))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.EnclosurePowerSupply']/PartNumber$", valueArray(4))
call oDiscoveryData.AddInstance(oInst)
Loop
End If
Loop
objFile.Close
Else
Message = "Error: FileSystem object not created using CreateObject - Scripting.FileSystemObject"
MOMDebugLog Message
End If
Set objFSO = Nothing
Else
Message = "Storage CLI TXT Output File does not exist - " & file_spec
MOMDebugLog Message
End If
' Clean up the CLI Output : Delete OM_REPORT_FILE_NAME for STORAGE
DelFile(file_path)
End If ' End of If Condition for rc<>0 for oshell.run(omreport storage controller)
Set file_path = Nothing
Set command = Nothing
Set o_Shell = Nothing
Set file_spec = Nothing
End Function
Function DiscoverEMM (ByVal controllerID, ByVal connectorID, ByVal enclosureID)
Dim file_path, command, file_spec, x, y, o_Shell, result
Dim objFSO, objFile, strLine, strLineSearchCriteria, valueArray, valueSeperator
x = 1
y = 0
file_path = g_tempFolder & "\" & OM_REPORT_STORAGE_CONTR & "controller_" & controllerID & "enclosure_emms.txt"
command = "cmd /C " & chr(34) & g_omsaBinPath & "\" & "omreport.exe" & Chr(34) & " storage enclosure controller=" & controllerID & " enclosure=" & enclosureID & " info=emms -fmt ssv -outc " & file_path
file_spec = file_path
Set o_Shell = CreateObject ("WScript.Shell")
result = o_Shell.run (command,0,true)
If result <> 0 Then
DelFile(file_path)
Else
' Infinite Loop Until file OM_REPORT_FILE_NAME is created
Do While bFileExists(file_spec) <> -1
WScript.Sleep(0)
x = x + 1
y = x Mod WAIT_LOOP
If y = 0 Then
MOMDebugLog "Exit RunCmd. Reason: OMREPORT STORAGE not responding for " & WAIT_LOOP & " loops."
Exit Do
End If
Loop
strLineSearchCriteria = "ID;"
valueSeperator = ";"
If(bFileExists(file_spec)) Then
Set objFSO = CreateObject("Scripting.FileSystemObject")
If (IsObject(objFSO) = True) Then
Set objFile = objFSO.OpenTextFile(file_spec, 1)
Do Until objFile.AtEndOfStream
strLine = objFile.ReadLine
If (InStr(strLine, strLineSearchCriteria) = 1) Then
Do Until objFile.AtEndOfStream
strLine = objFile.ReadLine
valueArray = split(strLine, valueSeperator, -1)
set oInst = oDiscoveryData.CreateClassInstance("$MPElement[Name='Dell.Connections.EnclosureEMM']$")
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.LogicalDevice']/DeviceID$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.DellStorageController']/DeviceID$", controllerID)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ControllerConnector']/ID$", connectorID)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.ControllerEnclosure']/ID$", enclosureID)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.EnclosureEMM']/ID$", valueArray(0))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.EnclosureEMM']/Status$", valueArray(1))
call oInst.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", valueArray(2))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.EnclosureEMM']/State$", valueArray(3))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.EnclosureEMM']/PartNumber$", valueArray(4))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.EnclosureEMM']/FirmwareVersion$", valueArray(5))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.EnclosureEMM']/SCSIRate$", valueArray(6))
call oInst.AddProperty("$MPElement[Name='Dell.Connections.EnclosureEMM']/Type$", valueArray(7))
call oDiscoveryData.AddInstance(oInst)
Loop
End If
Loop
objFile.Close
Else
Message = "Error: FileSystem object not created using CreateObject - Scripting.FileSystemObject"
MOMDebugLog Message
End If
Set objFSO = Nothing
Else
Message = "Storage CLI TXT Output File does not exist - " & file_spec
MOMDebugLog Message
End If
' Clean up the CLI Output : Delete OM_REPORT_FILE_NAME for STORAGE
DelFile(file_path)
End If ' End of If Condition for rc<>0 for oshell.run(omreport storage controller)
Set file_path = Nothing
Set command = Nothing
Set o_Shell = Nothing
Set file_spec = Nothing
End Function
End Class
300System!System.Discovery.Data$Config/IntervalSeconds$DellSystemDiscovery.vbs$MPElement$ $Target/Id$ $Config/Computer$
'**********************************************************************************
' Script Name - Dell System Discovery
' Author: Muralidhar L
'
' Description:
' Progressive discovery from Microsoft.Win.Computer to Dell System based on BIOS manufacturer (using CIM)
'
' (c) Copyright Dell Inc. 2007 - All rights reserved
'**********************************************************************************
Option Explicit
On Error resume next
Dim oArgs
Set oArgs = WScript.Arguments
if oArgs.Count < 3 Then
Wscript.Quit -1
End If
Dim SourceID, ManagedEntityId, TargetComputer
SourceId = oArgs(0)
ManagedEntityId = oArgs(1)
TargetComputer = oArgs(2)
Dim oAPI, oDiscoveryData, oInst
Set oAPI = CreateObject("MOM.ScriptAPI")
set oDiscoveryData = oAPI.CreateDiscoveryData(0, SourceId, ManagedEntityId)
Dim strComputer, WbemServices, wbemObjectSet, wbemObject, sQuery
Dim Manufacturer
strComputer="."
Set WbemServices = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
If IsEmpty(WbemServices) Then
MOMDebugLog "Unable to open WMI Namespace root-cimv2. Check to see if the WMI service is enabled and running, and ensure this WMI namespace exists." & Err.Description
Else
GetManufacturerName()
If Instr(Manufacturer, "Dell") Then
set oInst = oDiscoveryData.CreateClassInstance("$MPElement[Name='Dell.Connections.DellSystem']$")
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.LogicalDevice']/DeviceID$", TargetComputer)
call oDiscoveryData.AddInstance(oInst)
End If
End If
' Submit the data
Call oAPI.Return(oDiscoveryData)
Set oDiscoveryData = Nothing
Set oAPI = Nothing
Public Function GetManufacturerName ()
'Retrieving ManufactuferName
On Error resume next
Set wbemObjectSet = wbemServices.ExecQuery("select * from win32_bios")
If Err.Number <> 0 Then
ErrorMessage = "Number:" & Err.Number & "Description:" & Err.Description
MOMDebugLog (ErrorMessage)
End If
If (wbemObjectSet is Nothing) or (IsNull(wbemObjectSet)) Then
LogMessage = "Unable to retrieve Manufacturer"
MOMDebugLog (LogMessage)
Else
LogMessage = "Manufacturer Name retrieved successfully"
MOMDebugLog (LogMessage)
Dim objItem
For Each objItem in wbemObjectSet
'Error checking
If Err.Number <> 0 Then
ErrorMessage = "Number:" & Err.Number & "Description:" & Err.Description
MOMDebugLog (ErrorMessage)
End If
'Object Retrieval
If not objItem is nothing Then
Manufacturer = objItem.Manufacturer
End If
Next
End If
Set wbemObjectSet = Nothing
End Function
300System!System.Discovery.Data$Config/IntervalSeconds$DellServerDiscovery.vbs$MPElement$ $Target/Id$ $Config/Computer$
'**********************************************************************************
' Script Name - Dell Server Discovery
' Author: Muralidhar L
'
' Description:
' Progressive discovery from DellSystem to DellServer using CIM and adding attributes.
'
' (c) Copyright Dell Inc. 2007 - All rights reserved
'**********************************************************************************
Option Explicit
On Error resume next
Dim oArgs
Set oArgs = WScript.Arguments
if oArgs.Count < 3 Then
Wscript.Quit -1
End If
Dim SourceID, ManagedEntityId, TargetComputer,LogMessage
SourceId = oArgs(0)
ManagedEntityId = oArgs(1)
TargetComputer = oArgs(2)
Dim oAPI, oDiscoveryData, oInst
Set oAPI = CreateObject("MOM.ScriptAPI")
set oDiscoveryData = oAPI.CreateDiscoveryData(0, SourceId, ManagedEntityId)
Dim strComputer, WbemServices, wbemObjectSet, wbemObject, sQuery
Dim arrURL, arrURL1
Dim Model, AssetTag, ServiceTag, OperatingSystem,OperatingSystemVersion, OMSAURL, BIOSVersion, OMSAVersion, IPMIVersion
Dim IPAddresses, TOECapable, TOEEnable, RequiredOMSAVersion
strComputer="."
Set WbemServices = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
If IsEmpty(WbemServices) Then
LogMessage = "Unable to open WMI Namespace root-cimv2. Check to see if the WMI service is enabled and running, and ensure this WMI namespace exists." & Err.Description
Else
Dim tModel
GetSystemModelType()
tModel = Model
Model = LCase(Model)
If ((Instr(Model, "poweredge")) OR (Instr(Model, "powervault"))) Then
GetCIM_OperatingSystemAttributes()
GetCIM_OperatingSystemType()
GetWin32_BIOSAttributes()
GetIPAddress()
On Error Resume Next
Set WbemServices = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2\dell")
If Err.Number = -2147217394 Then
set oInst = oDiscoveryData.CreateClassInstance("$MPElement[Name='Dell.Connections.DellUnknown']$")
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.LogicalDevice']/DeviceID$", "Unknown: " & TargetComputer)
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.LogicalDevice']/Name$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.LogicalDevice']/Description$", "Please install OMSA 5.3 or above from support.dell.com")
call oInst.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", TargetComputer)
call oDiscoveryData.AddInstance(oInst)
Err.Clear
Else
If IsEmpty(WbemServices) Then
LogMessage = "Unable to open WMI Namespace root-cimv2-dell. Check to see if the WMI service is enabled and running, and ensure this WMI namespace exists." & Err.Description
Else
GetDell_SoftwareFeatureAttributes()
RequiredOMSAVersion = "5.3"
If OMSAVersion<RequiredOMSAVersion Then
set oInst = oDiscoveryData.CreateClassInstance("$MPElement[Name='Dell.Connections.DellUnknown']$")
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.LogicalDevice']/DeviceID$", "Unknown: " & TargetComputer)
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.LogicalDevice']/Name$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.LogicalDevice']/Description$", "Please upgrade OMSA to 5.3 or above from support.dell.com")
call oInst.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", TargetComputer)
call oDiscoveryData.AddInstance(oInst)
Else
GetDell_ChassisAttributes()
GetDell_RemoteAccessServicePortAttributes()
GetDell_NetworkPortAttributes()
CollectESMlogEvent()
If AssetTag="" Then
AssetTag = "Not Available"
End If
set oInst = oDiscoveryData.CreateClassInstance("$MPElement[Name='Dell.Connections.DellServer']$")
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.LogicalDevice']/DeviceID$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.DellServer']/IPAddress$", IPAddresses)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.DellServer']/OMSAURL$", OMSAURL)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.DellServer']/AssetTag$", AssetTag)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.DellServer']/ServiceTag$", ServiceTag)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.DellServer']/Model$", tModel)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.DellServer']/OperatingSystem$", OperatingSystem)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.DellServer']/OperatingSystemVersion$", OperatingSystemVersion)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.DellServer']/BiosVersion$", BIOSVersion)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.DellServer']/OMSAVersion$", OMSAVersion)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.DellServer']/IPMIVersion$", IPMIVersion)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.DellServer']/TOECapable$", TOECapable)
call oInst.AddProperty("$MPElement[Name='Dell.Connections.DellServer']/TOEEnable$", TOEEnable)
call oDiscoveryData.AddInstance(oInst)
End If
End If
End If
On Error Goto 0
End If
End If
' Submit the data
Call oAPI.Return(oDiscoveryData)
Set oDiscoveryData = Nothing
Set oAPI = Nothing
Public Function GetDell_NetworkPortAttributes ()
'Retrieving TOE Attributes
On Error resume next
TOECapable = ""
TOEEnable = ""
Set wbemObjectSet = wbemServices.ExecQuery("Select * from DELL_NetworkPort")
If Err.Number <> 0 Then
ErrorMessage = "Number:" & Err.Number & "Description:" & Err.Description
MOMDebugLog (ErrorMessage)
End If
If (wbemObjectSet is Nothing) or (IsNull(wbemObjectSet)) Then
LogMessage = "Unable to retrieve TOE Attributes"
MOMDebugLog (LogMessage)
Else
LogMessage = "TOE Attributes retrieved successfully"
MOMDebugLog (LogMessage)
Dim objItem
For Each objItem in wbemObjectSet
'Error checking
If Err.Number <> 0 Then
ErrorMessage = "Number:" & Err.Number & "Description:" & Err.Description
MOMDebugLog (ErrorMessage)
End If
'Object Retrieval
If not objItem is nothing Then
TOECapable = objItem.NicTOECapability
TOEEnable = objItem.IsTOEEnable
If TOECapable = "0" Then
TOECapable = "None"
ElseIf TOECapable = "1" Then
TOECapable = "Unknown"
ElseIf TOECapable = "2" Then
TOECapable = "Available"
ElseIf TOECapable = "4" Then
TOECapable = "Not Available"
ElseIf TOECapable = "8" Then
TOECapable = "Can't be determined"
ElseIf TOECapable = "16" Then
TOECapable = "Driver Not Responding"
End If
End If
Next
LogMessage = "TOECapable : " & TOECapable & " TOEEnable : " & TOEEnable
MOMDebugLog (LogMessage)
End If
Set wbemObjectSet = Nothing
End Function
Public Function GetIPAddress ()
'Retrieving the IP Address
On Error resume next
Set wbemObjectSet = wbemServices.ExecQuery("Select * from Win32_NetworkAdapterConfiguration")
If Err.Number <> 0 Then
ErrorMessage = "Number:" & Err.Number & "Description:" & Err.Description
MOMDebugLog (ErrorMessage)
End If
If (wbemObjectSet is Nothing) or (IsNull(wbemObjectSet)) Then
LogMessage = "Unable to retrieve IP address of the system"
MOMDebugLog (LogMessage)
Else
LogMessage = "IP address object retrieved successfully"
MOMDebugLog (LogMessage)
Dim objItemIPAddress
Dim STR
IPAddresses = ""
For Each objItemIPAddress in wbemObjectSet
'Error Handling
If Err.Number <> 0 Then
ErrorMessage = "Number:" & Err.Number & "Description:" & Err.Description
MOMDebugLog (ErrorMessage)
End If
'Object Retrieval
If not objItemIPAddress is nothing Then
If isarray(objItemIPAddress.IPAddress) Then
For each STR in objItemIPAddress.IPAddress
If ((STR <> "") AND (STR <> "0.0.0.0")) Then
If IPAddresses = "" Then
IPAddresses = STR
Else
IPAddresses = IPAddresses & ", " & STR
End If
End If
Next
End If
End If
Next
LogMessage = "Function: IP address(es) of the system : " & IPAddresses
MOMDebugLog (LogMessage)
End If
Set wbemObjectSet = Nothing
End Function
Public Function GetSystemModelType ()
' Retrieving the System Model Type
On Error resume next
Set wbemObjectSet = wbemServices.ExecQuery("Select * from Win32_ComputerSystem")
If Err.Number <> 0 Then
ErrorMessage = "Number:" & Err.Number & "Description:" & Err.Description
MOMDebugLog (ErrorMessage)
End If
If (wbemObjectSet is Nothing) or (IsNull(wbemObjectSet)) Then
LogMessage = "Unable to retrieve system model type information"
MOMDebugLog (LogMessage)
Else
LogMessage = "System model type object retrieved successfully"
MOMDebugLog (LogMessage)
Dim objItemModel
For Each objItemModel in wbemObjectSet
'Error checking
If Err.Number <> 0 Then
ErrorMessage = "Number:" & Err.Number & "Description:" & Err.Description
MOMDebugLog (ErrorMessage)
End If
'Object Retrieval
If not objItemModel is nothing Then
Model = objItemModel.Model
End If
Next
LogMessage = "Function: Dell System Model : " & Model
MOMDebugLog (LogMessage)
End If
Set wbemObjectSet = Nothing
End Function
Public Function GetDell_SoftwareFeatureAttributes ()
'Retrieving Dell_SoftwareFeature Attributes
On Error resume next
Set wbemObjectSet = wbemServices.ExecQuery("select * from Dell_SoftwareFeature")
If Err.Number <> 0 Then
ErrorMessage = "Number:" & Err.Number & "Description:" & Err.Description
MOMDebugLog (ErrorMessage)
End If
If wbemObjectSet is Nothing Then
LogMessage = "Unable to retrieve Dell_SoftwareFeature Attributes"
MOMDebugLog (LogMessage)
Else
LogMessage = "Dell_SoftwareFeature attributes retrieved successfully"
MOMDebugLog (LogMessage)
Dim objItem
For Each objItem in wbemObjectSet
'Error checking
If Err.Number <> 0 Then
ErrorMessage = "Number:" & Err.Number & "Description:" & Err.Description
MOMDebugLog (ErrorMessage)
End If
'Object Retrieval
If not objItem is nothing Then
arrURL = Split(objItem.OmsaURL, ",")
arrURL1 = Split(arrURL(0), "?")
OMSAURL = Trim(arrURL1(0))
OMSAVersion = objItem.Version
End If
Next
LogMessage = "OMSA URL : " & OMSAURL & " OMSA Version : " & OMSAVersion
MOMDebugLog (LogMessage)
End If
Set wbemObjectSet = Nothing
End Function
Public Function GetDell_ChassisAttributes ()
'Retrieving the Dell_Chassis Attributes
On Error resume next
Set wbemObjectSet = wbemServices.ExecQuery("Select * from Dell_Chassis")
If Err.Number <> 0 Then
ErrorMessage = "Number:" & Err.Number & "Description:" & Err.Description
MOMDebugLog (ErrorMessage)
End If
If wbemObjectSet is Nothing Then
LogMessage = "Unable to retrieve Dell_Chassis Attributes"
MOMDebugLog (LogMessage)
Else
LogMessage = "Dell_Chassis Attributes retrieved successfully"
MOMDebugLog (LogMessage)
Dim objItem
For Each objItem in wbemObjectSet
'Error checking
If Err.Number <> 0 Then
ErrorMessage = "Number:" & Err.Number & "Description:" & Err.Description
MOMDebugLog (ErrorMessage)
End If
'Object Retrieval
If not objItem is nothing Then
AssetTag = objItem.AssetTag
ServiceTag = objItem.SerialNumber
End If
Next
LogMessage = "Asset Tag : " & AssetTag & " Service Tag : " & ServiceTag
MOMDebugLog (LogMessage)
End If
Set wbemObjectSet = Nothing
End Function
Public Function GetCIM_OperatingSystemAttributes()
' Retrieving the Operating System
On Error resume next
Set wbemObjectSet = wbemServices.ExecQuery("Select * from CIM_OperatingSystem")
'Code for adding Storage Server in OS Name
Dim regOSProductSuiteName,objShell,arrOSProductSuiteName,ProductSuiteStrValue
regOSProductSuiteName = "HKLM\SYSTEM\CurrentControlSet\Control\ProductOptions\ProductSuite"
Set objShell = CreateObject("WScript.Shell")
arrOSProductSuiteName = objShell.RegRead(regOSProductSuiteName)
If Err.Number <> 0 Then
ErrorMessage = "Number:" & Err.Number & "Description:" & Err.Description
MOMDebugLog (ErrorMessage)
End If
If (wbemObjectSet is Nothing) Or (isNull(wbemObjectSet)) Then
LogMessage = "Unable to retrieve Operating system information"
MOMDebugLog (LogMessage)
Else
LogMessage = "Operating system object retrieved successfully"
MOMDebugLog (LogMessage)
Dim objItemOperatingSystem
For Each objItemOperatingSystem in wbemObjectSet
'Error checking
If Err.Number <> 0 Then
ErrorMessage = "Number:" & Err.Number & "Description:" & Err.Description
MOMDebugLog (ErrorMessage)
End If
'Object Retrieval
If not objItemOperatingSystem is nothing Then
OperatingSystem = objItemOperatingSystem.Caption
Dim OperatingSystemVersionArray
OperatingSystemVersionArray=split(objItemOperatingSystem.Version,".")
OperatingSystemVersion = "Version " & OperatingSystemVersionArray(0) & "." & OperatingSystemVersionArray(1) &" (Build " & OperatingSystemVersionArray(2) & ":" & objItemOperatingSystem.CSDVersion & ")"
'Code for adding Storage Server in OS Name
if Not isnull(arrOSProductSuiteName) Then
For Each ProductSuiteStrValue in arrOSProductSuiteName
If Instr(ProductSuiteStrValue,"Storage") And Instr(OperatingSystem,"Server 2003") Then
OperatingSystem = Replace(OperatingSystem,"Server 2003","Storage Server 2003")
Exit For
End If
Next
End If
End If
Next
LogMessage = "Function: Dell Server OS : " & OperatingSystem
MOMDebugLog (LogMessage)
End If
Set wbemObjectSet = Nothing
End Function
Public Function GetCIM_OperatingSystemType()
' Retrieving the Operating System Type
On Error resume next
Dim wbemObjectSet_CIM_ComputerSystem
Set wbemObjectSet_CIM_ComputerSystem = wbemServices.ExecQuery("Select * from CIM_ComputerSystem")
If Err.Number <> 0 Then
ErrorMessage = "Number:" & Err.Number & "Description:" & Err.Description
MOMDebugLog (ErrorMessage)
End If
If (wbemObjectSet_CIM_ComputerSystem is Nothing) Or (isNull(wbemObjectSet_CIM_ComputerSystem)) Then
LogMessage = "Unable to retrieve Computer System information"
MOMDebugLog (LogMessage)
Else
LogMessage = "Computer System object retrieved successfully"
MOMDebugLog (LogMessage)
Dim objItemComputerSystem
For Each objItemComputerSystem in wbemObjectSet_CIM_ComputerSystem
'Error checking
If Err.Number <> 0 Then
ErrorMessage = "Number:" & Err.Number & "Description:" & Err.Description
MOMDebugLog (ErrorMessage)
End If
'Object Retrieval
If not objItemComputerSystem is nothing Then
if Instr(LCase(objItemComputerSystem.SystemType), "x86") Then
OperatingSystemVersion = OperatingSystemVersion & " (x86)"
End if
if Instr(LCase(objItemComputerSystem.SystemType), "x64") Then
OperatingSystemVersion = OperatingSystemVersion & " (x64)"
End if
End If
Next
End If
if Instr(OperatingSystem,"Server") And Instr(OperatingSystem,"2008") Then
'to check if the Operating System is Server Core / Full Installation
GetLonghornVersion()
End if
Set wbemObjectSet = Nothing
End Function
Public Function GetLonghornVersion()
On Error resume next
Dim wbemObjectSet_WIN32_OperatingSystem
Set wbemObjectSet_WIN32_OperatingSystem = wbemServices.ExecQuery("Select * from Win32_OperatingSystem")
If Err.Number <> 0 Then
ErrorMessage = "Number:" & Err.Number & "Description:" & Err.Description
MOMDebugLog (ErrorMessage)
End If
If (wbemObjectSet_WIN32_OperatingSystem is Nothing) Or (isNull(wbemObjectSet_WIN32_OperatingSystem)) Then
LogMessage = "Unable to retrieve Operating System information"
MOMDebugLog (LogMessage)
Else
LogMessage = "Operating System object retrieved successfully"
MOMDebugLog (LogMessage)
Dim objItemOperatingSystem
For Each objItemOperatingSystem in wbemObjectSet_WIN32_OperatingSystem
'Error checking
If Err.Number <> 0 Then
ErrorMessage = "Number:" & Err.Number & "Description:" & Err.Description
MOMDebugLog (ErrorMessage)
End If
'Object Retrieval
If not objItemOperatingSystem is nothing Then
Dim OS_SKU
OS_SKU = objItemOperatingSystem.OperatingSystemSKU
if (OS_SKU=12) or (OS_SKU=13) or (OS_SKU=14) Then
OperatingSystemVersion = OperatingSystemVersion & " Server Core Installation"
Else
OperatingSystemVersion = OperatingSystemVersion & " Server Full Installation"
End if
End If
Next
End If
End Function
Public Function GetWin32_BIOSAttributes()
On Error resume next
'Retrieving the BIOSVersion
Set wbemObjectSet = wbemServices.ExecQuery("Select * from Win32_BIOS")
If Err.Number <> 0 Then
ErrorMessage = "Number:" & Err.Number & "Description:" & Err.Description
MOMDebugLog (ErrorMessage)
End If
If (wbemObjectSet is Nothing) Or (isNull(wbemObjectSet)) Then
LogMessage = "Unable to retrieve BIOSVersion information"
MOMDebugLog (LogMessage)
Else
LogMessage = "BIOSVersion object retrieved successfully"
MOMDebugLog (LogMessage)
Dim objItemBIOSVersion
For Each objItemBIOSVersion in wbemObjectSet
'Error checking
If Err.Number <> 0 Then
ErrorMessage = "Number:" & Err.Number & "Description:" & Err.Description
MOMDebugLog (ErrorMessage)
End If
'Object Retrieval
If not objItemBIOSVersion is nothing Then
BIOSVersion = objItemBIOSVersion.SMBIOSBIOSVersion
End If
Next
LogMessage = "Function: BIOS Version : " & BIOSVersion
MOMDebugLog (LogMessage)
End If
Set wbemObjectSet = Nothing
End Function
Public Function GetDell_RemoteAccessServicePortAttributes()
On Error resume next
'Retrieving IPMI Version
Set wbemObjectSet = wbemServices.ExecQuery("Select * from Dell_RemoteAccessServicePort")
If Err.Number <> 0 Then
ErrorMessage = "Number:" & Err.Number & "Description:" & Err.Description
MOMDebugLog (ErrorMessage)
End If
If (wbemObjectSet is Nothing) Or (isNull(wbemObjectSet)) Then
LogMessage = "Unable to retrieve IPMI Version"
MOMDebugLog (LogMessage)
Else
LogMessage = "IPMI Version retrieved successfully"
MOMDebugLog (LogMessage)
Dim objItemIPMIVersion
For Each objItemIPMIVersion in wbemObjectSet
'Error checking
If Err.Number <> 0 Then
ErrorMessage = "Number:" & Err.Number & "Description:" & Err.Description
MOMDebugLog (ErrorMessage)
End If
'Object Retrieval
If not objItemIPMIVersion is nothing Then
IPMIVersion = objItemIPMIVersion.VersionString
End If
Next
LogMessage = "Function: IPMI Version : " & IPMIVersion
MOMDebugLog (LogMessage)
End If
Set wbemObjectSet = Nothing
End Function
Function CollectESMlogEvent()
Dim wbemServicesESM,OutputFileName,OutputFolderName
OutputFileName = "C:\DellReports\dellesm.log"
OutputFolderName = "C:\DellReports\"
On Error resume next
Set wbemServicesESM = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2\dell")
Set wbemObjectSet = wbemServicesESM.ExecQuery("Select * from DELL_EsmLog")
If Err.Number <> 0 Then
ErrorMessage = "Number:" & Err.Number & "Description:" & Err.Description
MOMDebugLog (ErrorMessage)
End If
On Error Goto 0
Err.Clear
If wbemObjectSet is Nothing Then
LogMessage = "Unable to retrieve ESM Log"
MOMDebugLog (LogMessage)
Else
LogMessage = "ESM Log retrieved successfully"
MOMDebugLog (LogMessage)
Dim objItem
On Error Resume Next
For Each objItem in wbemObjectSet
'Error checking
If Err.Number <> 0 Then
ErrorMessage = "Number:" & Err.Number & "Description:" & Err.Description
MOMDebugLog (ErrorMessage)
End If
'Object Retrieval
If not objItem is nothing Then
WriteToFile OutputFolderName,OutputFileName,objItem.LogRecord
End If
Next
On Error Goto 0
End If
Set wbemObjectSet = Nothing
End Function
Public Function WriteToFile(strFolderName,strFileName,strMsg)
Dim objFSO, objTextFile, objFile
Set objFSO = CreateObject("Scripting.FileSystemObject")
If not objFSO.FolderExists(strFolderName) Then
objFSO.CreateFolder (strFolderName)
End If
Set objFSO = nothing
Set objFSO = CreateObject("Scripting.FileSystemObject")
If objFSO.FileExists(strFileName) Then
Else
Set objFile = objFSO.CreatetextFile(strFileName)
End If
Set objFile = Nothing
Const ForAppending = 8
Set objTextFile = objFSO.OpentextFile(strFileName, ForAppending, True)
objTextFile.WriteLine(strMsg)
objTextFile.Close
Set objTextFile = Nothing
Set objFSO = Nothing
End Function
Function MOMDebugLog (ByVal str1)
End Function
300System!System.Discovery.Data$Config/IntervalSeconds$DellServerClassificationDiscovery.vbs$MPElement$ $Target/Id$ $Config/Computer$
'**********************************************************************************
' Script Name - Dell Server Classification Discovery
' Author: Muralidhar L
'
' Description:
' Classify Dell Monolithic and Modular Servers using CIM
'
' (c) Copyright Dell Inc. 2007 - All rights reserved
'**********************************************************************************
Option Explicit
Dim oArgs
Set oArgs = WScript.Arguments
if oArgs.Count < 3 Then
Wscript.Quit -1
End If
Dim SourceID, ManagedEntityId, TargetComputer
SourceId = oArgs(0)
ManagedEntityId = oArgs(1)
TargetComputer = oArgs(2)
Dim oAPI, oDiscoveryData, oInst
Set oAPI = CreateObject("MOM.ScriptAPI")
set oDiscoveryData = oAPI.CreateDiscoveryData(0, SourceId, ManagedEntityId)
Dim strComputer, WbemServices, wbemObjectSet, wbemObject, sQuery
Dim BaseBoardType, DescModel
strComputer="."
Set WbemServices = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2\dell")
If IsEmpty(WbemServices) Then
MOMDebugLog "Unable to open WMI Namespace root-cimv2-dell. Check to see if the WMI service is enabled and running, and ensure this WMI namespace exists." & Err.Description
Else
GetBaseBoardType()
AddModelDesc()
If (BaseboardType = "13") Then
set oInst = oDiscoveryData.CreateClassInstance("$MPElement[Name='Dell.Connections.DellModularBlade']$")
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.LogicalDevice']/DeviceID$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.LogicalDevice']/Name$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.LogicalDevice']/Description$", "Dell Modular Blade - " & DescModel)
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", TargetComputer)
call oDiscoveryData.AddInstance(oInst)
ElseIf (BaseboardType = "10") Then
set oInst = oDiscoveryData.CreateClassInstance("$MPElement[Name='Dell.Connections.DellMonolithicServer']$")
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.LogicalDevice']/DeviceID$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.LogicalDevice']/Name$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.LogicalDevice']/Description$", "Dell Monolithic Server - " & DescModel)
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", TargetComputer)
call oDiscoveryData.AddInstance(oInst)
End If
End If
' Submit the data
Call oAPI.Return(oDiscoveryData)
Set oDiscoveryData = Nothing
Set oAPI = Nothing
Public Function GetBaseBoardType ()
'Retrieving the BaseBoardType
On Error resume next
Set wbemObjectSet = wbemServices.ExecQuery("Select * from DELL_Baseboard")
If Err.Number <> 0 Then
ErrorMessage = "Number:" & Err.Number & "Description:" & Err.Description
MOMDebugLog (ErrorMessage)
End If
If wbemObjectSet is Nothing Then
LogMessage = "Unable to retrieve BaseBoardType"
MOMDebugLog (LogMessage)
Else
LogMessage = "Base board type retrieved successfully"
MOMDebugLog (LogMessage)
Dim objItem
For Each objItem in wbemObjectSet
'Error checking
If Err.Number <> 0 Then
ErrorMessage = "Number:" & Err.Number & "Description:" & Err.Description
MOMDebugLog (ErrorMessage)
End If
'Object Retrieval
If not objItem is nothing Then
BaseBoardType = objItem.BaseboardType
End If
Next
LogMessage = "BaseBoardType : " & BaseBoardType
MOMDebugLog (LogMessage)
End If
Set wbemObjectSet = Nothing
End Function
Public Function AddModelDesc ()
'Retrieving the ModelType
On Error resume next
Set wbemObjectSet = wbemServices.ExecQuery("Select * from Dell_Chassis")
If Err.Number <> 0 Then
ErrorMessage = "Number:" & Err.Number & "Description:" & Err.Description
MOMDebugLog (ErrorMessage)
End If
If wbemObjectSet is Nothing Then
LogMessage = "Unable to retrieve Dell_Chassis"
MOMDebugLog (LogMessage)
Else
LogMessage = "Dell_chassis retrieved successfully"
MOMDebugLog (LogMessage)
Dim objItem
For Each objItem in wbemObjectSet
'Error checking
If Err.Number <> 0 Then
ErrorMessage = "Number:" & Err.Number & "Description:" & Err.Description
MOMDebugLog (ErrorMessage)
End If
'Object Retrieval
If not objItem is nothing Then
DescModel = objItem.Model
End If
Next
LogMessage = "ModelType : " & DescModel
MOMDebugLog (LogMessage)
End If
Set wbemObjectSet = Nothing
End Function
300System!System.Discovery.DataSystem!System.Discovery.MapperSchemaSystem!System.ExpressionEvaluatorSchema300$Config/IPStart$$Config/IPEnd$$Config/CommunityString$$Config/Timeout$$Config/OIDProps$$Config/Expression$$Config/ClassId$$Config/InstanceSettings$System!System.Discovery.DataSystem!System.Discovery.MapperSchemaSystem!System.ExpressionEvaluatorSchema300$Config/IPStart$$Config/IPEnd$$Config/CommunityString$$Config/Timeout$$Config/OIDProps$$Config/Expression$$Config/ClassId$$Config/InstanceSettings$System!System.Discovery.DataSystem!System.ExpressionEvaluatorSchema$Config/ComputerName$$Config/LogName$$Config/EventExpression$$Config/ScriptName$$Config/Arguments$$Config/ScriptBody$$Config/TimeoutSeconds$$Config/SuccessExpression$$Config/WarningExpression$$Config/CriticalExpression$$Config/Interval$false$Config/IP$$Config/CommunityString$$Config/SnmpVarBinds$SnmpVarBinds/SnmpVarBind[1]/ValueEqual3SnmpVarBinds/SnmpVarBind[1]/ValueEqual5SnmpVarBinds/SnmpVarBind[1]/ValueEqual4$Config/Interval$false$Config/IP$$Config/CommunityString$$Config/SnmpVarBinds$SnmpVarBinds/SnmpVarBind[1]/ValueEqual2SnmpVarBinds/SnmpVarBind[1]/ValueEqual5SnmpVarBinds/SnmpVarBind[1]/ValueEqual3$Config/Interval$false$Config/IP$$Config/CommunityString$$Config/SnmpVarBinds$SnmpVarBinds/SnmpVarBind[1]/ValueEqual3SnmpVarBinds/SnmpVarBind[1]/ValueEqual5SnmpVarBinds/SnmpVarBind[1]/ValueEqual4Discovery$MPElement$$Target/Id$$MPElement[Name="Dell.Connections.DellServerGroup"]$$MPElement[Name="DellHWGroup.Contains.DellServerGroup"]$$MPElement[Name="Dell.Connections.DellPrinterGroup"]$$MPElement[Name="DellHWGroup.Contains.DellPrinterGroup"]$$MPElement[Name="Dell.Connections.DellUnknownGroup"]$$MPElement[Name="DellHWGroup.Contains.DellUnknownGroup"]$Discovery$MPElement$$Target/Id$$MPElement[Name="Dell.Connections.DellMonolithicServerGroup"]$$MPElement[Name="DellServerGroup.Contains.DellMonolithicServerGroup"]$$MPElement[Name="Dell.Connections.DellModularSystemGroup"]$$MPElement[Name="DellServerGroup.Contains.DellModularSystemGroup"]$$MPElement[Name="Dell.Connections.OOB_DRAC_Group"]$$MPElement[Name="DellServerGroup.Contains.DellOOB_DRAC_Group"]$$MPElement[Name="Dell.Connections.OOB_CMC_Group"]$$MPElement[Name="DellServerGroup.Contains.DellOOB_CMC_Group"]$Discovery$MPElement$$Target/Id$$MPElement[Name="Dell.Connections.DellUnknown"]$$MPElement[Name="DellUnknownGroup.Contains.DellUnknown"]$Discovery21600$Target/Property[Type="Windows!Microsoft.Windows.Computer"]/PrincipalName$Discovery21600$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$Discovery$MPElement$$Target/Id$$MPElement[Name="Dell.Connections.DellMonolithicServer"]$$MPElement[Name="DellMonolithicServerGroup.Contains.DellMonolithicServer"]$Discovery21600$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$Discovery$MPElement$$Target/Id$$MPElement[Name="Dell.Connections.DellModularBlade"]$$MPElement[Name="DellModularSystemGroup.Contains.DellModularBlade"]$Discovery$Target/Property[Type="NetworkDevice!Microsoft.SystemCenter.NetworkDevice"]/IPAddress$$Target/Property[Type="NetworkDevice!Microsoft.SystemCenter.NetworkDevice"]/IPAddress$$Target/Property[Type="NetworkDevice!Microsoft.SystemCenter.NetworkDevice"]/CommunityString$300.1.3.6.1.2.1.43.11.1.1.6.1.1.1.3.6.1.2.1.43.11.1.1.5.1.1.1.3.6.1.2.1.43.11.1.1.9.1.1.1.3.6.1.2.1.43.11.1.1.8.1.1.1.3.6.1.2.1.43.8.2.1.14.1.1.1.3.6.1.2.1.43.8.2.1.15.1.1.1.3.6.1.2.1.43.8.2.1.18.1.1.1.3.6.1.2.1.43.8.2.1.9.1.1.1.3.6.1.2.1.43.8.2.1.13.1.4.1.3.6.1.2.1.43.9.2.1.8.1.1.1.3.6.1.2.1.43.9.2.1.9.1.1.1.3.6.1.2.1.43.9.2.1.12.1.1.1.3.6.1.2.1.43.9.2.1.4.1.1.1.3.6.1.2.1.43.9.2.1.7.1.1.1.3.6.1.2.1.43.6.1.1.2.1.1.1.3.6.1.2.1.43.6.1.1.3.1.1.1.3.6.1.2.1.25.3.2.1.5.1.1.3.6.1.2.1.1.5.0.1.3.6.1.2.1.1.1.0.1.3.6.1.2.1.1.4.0.1.3.6.1.2.1.1.6.0.1.3.6.1.2.1.1.2.0.1.3.6.1.2.1.2.1.0$MPElement[Name="Dell.Connections.DellPrinter"]$$MPElement[Name="Dell.Connections.DellPrinter"]/Status$$data/SnmpVarBinds/SnmpVarBind[7]/Value$$MPElement[Name="Dell.Connections.DellPrinter"]/SupplyType$$data/SnmpVarBinds/SnmpVarBind[22]/Value$$MPElement[Name="Dell.Connections.DellPrinter"]/SupplyDescription$$data/SnmpVarBinds/SnmpVarBind[23]/Value$$MPElement[Name="Dell.Connections.DellPrinter"]/SupplyLevel$$data/SnmpVarBinds/SnmpVarBind[21]/Value$$MPElement[Name="Dell.Connections.DellPrinter"]/SupplyMaxLevel$$data/SnmpVarBinds/SnmpVarBind[20]/Value$$MPElement[Name="Dell.Connections.DellPrinter"]/InputName$$data/SnmpVarBinds/SnmpVarBind[15]/Value$$MPElement[Name="Dell.Connections.DellPrinter"]/InputVendorName$$data/SnmpVarBinds/SnmpVarBind[19]/Value$$MPElement[Name="Dell.Connections.DellPrinter"]/InputModel$$data/SnmpVarBinds/SnmpVarBind[18]/Value$$MPElement[Name="Dell.Connections.DellPrinter"]/InputDescription$$data/SnmpVarBinds/SnmpVarBind[17]/Value$$MPElement[Name="Dell.Connections.DellPrinter"]/InputMaxCapacity$$data/SnmpVarBinds/SnmpVarBind[16]/Value$$MPElement[Name="Dell.Connections.DellPrinter"]/OutputName$$data/SnmpVarBinds/SnmpVarBind[10]/Value$$MPElement[Name="Dell.Connections.DellPrinter"]/OutputVendorName$$data/SnmpVarBinds/SnmpVarBind[14]/Value$$MPElement[Name="Dell.Connections.DellPrinter"]/OutputModel$$data/SnmpVarBinds/SnmpVarBind[13]/Value$$MPElement[Name="Dell.Connections.DellPrinter"]/OutputDescription$$data/SnmpVarBinds/SnmpVarBind[12]/Value$$MPElement[Name="Dell.Connections.DellPrinter"]/OutputMaxCapacity$$data/SnmpVarBinds/SnmpVarBind[11]/Value$$MPElement[Name="Dell.Connections.DellPrinter"]/CoverDescription$$data/SnmpVarBinds/SnmpVarBind[9]/Value$$MPElement[Name="Dell.Connections.DellPrinter"]/CoverStatus$$data/SnmpVarBinds/SnmpVarBind[8]/Value$$MPElement[Name="NetworkDevice!Microsoft.SystemCenter.NetworkDevice"]/IPAddress$$Target/Property[Type="NetworkDevice!Microsoft.SystemCenter.NetworkDevice"]/IPAddress$$MPElement[Name="NetworkDevice!Microsoft.SystemCenter.NetworkDevice"]/Name$$data/SnmpVarBinds/SnmpVarBind[6]/Value$$MPElement[Name="NetworkDevice!Microsoft.SystemCenter.NetworkDevice"]/SystemDescription$$data/SnmpVarBinds/SnmpVarBind[5]/Value$$MPElement[Name="NetworkDevice!Microsoft.SystemCenter.NetworkDevice"]/SystemContact$$data/SnmpVarBinds/SnmpVarBind[4]/Value$$MPElement[Name="NetworkDevice!Microsoft.SystemCenter.NetworkDevice"]/SystemLocation$$data/SnmpVarBinds/SnmpVarBind[3]/Value$$MPElement[Name="NetworkDevice!Microsoft.SystemCenter.NetworkDevice"]/SystemOID$$data/SnmpVarBinds/SnmpVarBind[2]/Value$SnmpVarBinds/SnmpVarBind[2]/ValueContainsSubstring1.3.6.1.4.1.674.100.1.1094471969SnmpVarBinds/SnmpVarBind[2]/ValueContainsSubstring1.3.6.1.4.1.674.10898.10.51.1094472978SnmpVarBinds/SnmpVarBind[2]/ValueContainsSubstring1.3.6.1.4.1.236.11.5.1SnmpVarBinds/SnmpVarBind[2]/ValueContainsSubstring1.3.6.1.4.1.674.10898.10.51.1094472982SnmpVarBinds/SnmpVarBind[2]/ValueContainsSubstring1.3.6.1.4.1.11.2.3.9.1SnmpVarBinds/SnmpVarBind[2]/ValueContainsSubstring1.3.6.1.4.1.641.1SnmpVarBinds/SnmpVarBind[2]/ValueContainsSubstring1.3.6.1.4.1.674.100.1.1094472232SnmpVarBinds/SnmpVarBind[2]/ValueContainsSubstring1.3.6.1.4.1.674.10898.10.3SnmpVarBinds/SnmpVarBind[2]/ValueContainsSubstring1.3.6.1.4.1.674.10898.10.51.1094473222SnmpVarBinds/SnmpVarBind[2]/ValueContainsSubstring1.3.6.1.4.1.674.10898.10.1SnmpVarBinds/SnmpVarBind[2]/ValueContainsSubstring1.3.6.1.4.1.674.10898.10.51.1094473221SnmpVarBinds/SnmpVarBind[2]/ValueContainsSubstring1.3.6.1.4.1.674.10898.10.52.1094473223SnmpVarBinds/SnmpVarBind[2]/ValueContainsSubstring1.3.6.1.4.1.674.10898.10.2SnmpVarBinds/SnmpVarBind[2]/ValueContainsSubstring1.3.6.1.4.1.674.100.1.1094471968Discovery$MPElement$$Target/Id$$MPElement[Name="Dell.Connections.DellPrinter"]$$MPElement[Name="DellPrinterGroup.Contains.DellPrinter"]$Discovery21600$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$Discovery21600$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$Discovery21600$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$Discovery21600$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$Discovery21600$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$Discovery21600$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$Discovery$Target/Property[Type="NetworkDevice!Microsoft.SystemCenter.NetworkDevice"]/IPAddress$$Target/Property[Type="NetworkDevice!Microsoft.SystemCenter.NetworkDevice"]/IPAddress$$Target/Property[Type="NetworkDevice!Microsoft.SystemCenter.NetworkDevice"]/CommunityString$300.1.3.6.1.2.1.1.1.0.1.3.6.1.2.1.1.2.0.1.3.6.1.2.1.1.3.0.1.3.6.1.2.1.1.5.0.1.3.6.1.4.1.674.10892.2.1.1.1.0.1.3.6.1.4.1.674.10892.2.1.1.2.0.1.3.6.1.4.1.674.10892.2.1.1.3.0.1.3.6.1.4.1.674.10892.2.1.1.4.0.1.3.6.1.4.1.674.10892.2.1.1.5.0.1.3.6.1.4.1.674.10892.2.1.1.7.0.1.3.6.1.4.1.674.10892.2.1.1.11.0.1.3.6.1.4.1.674.10892.2.1.2.1.0$MPElement[Name="Dell.Connections.DRAC_5"]$$MPElement[Name="Dell.Connections.DRAC_5"]/FirmwareVer$$data/SnmpVarBinds/SnmpVarBind[1]/Value$$MPElement[Name="Dell.Connections.DRAC_5"]/SysServiceTag$$data/SnmpVarBinds/SnmpVarBind[2]/Value$$MPElement[Name="Dell.Connections.DRAC_5"]/ProdUrl$$data/SnmpVarBinds/SnmpVarBind[3]/Value$$MPElement[Name="Dell.Connections.DRAC_5"]/ProdVer$$data/SnmpVarBinds/SnmpVarBind[4]/Value$$MPElement[Name="Dell.Connections.DRAC_5"]/ProdManf$$data/SnmpVarBinds/SnmpVarBind[5]/Value$$MPElement[Name="Dell.Connections.DRAC_5"]/ProdDesc$$data/SnmpVarBinds/SnmpVarBind[6]/Value$$MPElement[Name="Dell.Connections.DRAC_5"]/ProdShortName$$data/SnmpVarBinds/SnmpVarBind[7]/Value$$MPElement[Name="Dell.Connections.DRAC_5"]/ProdName$$data/SnmpVarBinds/SnmpVarBind[8]/Value$$MPElement[Name="NetworkDevice!Microsoft.SystemCenter.NetworkDevice"]/IPAddress$$Target/Property[Type="NetworkDevice!Microsoft.SystemCenter.NetworkDevice"]/IPAddress$$MPElement[Name="Dell.Connections.DRAC_5"]/System_UpTime$$data/SnmpVarBinds/SnmpVarBind[10]/Value$SnmpVarBinds/SnmpVarBind[11]/ValueContainsSubstring1.3.6.1.4.1.8072.3.2.10SnmpVarBinds/SnmpVarBind[7]/ValueContainsSubstringDRACDiscovery$MPElement$$Target/Id$$MPElement[Name="Dell.Connections.DRAC_5"]$$MPElement[Name="OOB_DRAC_Group.Contains.DRAC_5"]$Discovery$Target/Property[Type="NetworkDevice!Microsoft.SystemCenter.NetworkDevice"]/IPAddress$$Target/Property[Type="NetworkDevice!Microsoft.SystemCenter.NetworkDevice"]/IPAddress$$Target/Property[Type="NetworkDevice!Microsoft.SystemCenter.NetworkDevice"]/CommunityString$300.1.3.6.1.2.1.1.1.0.1.3.6.1.2.1.1.2.0.1.3.6.1.2.1.1.3.0.1.3.6.1.2.1.1.5.0.1.3.6.1.4.1.674.10892.2.1.1.1.0.1.3.6.1.4.1.674.10892.2.1.1.2.0.1.3.6.1.4.1.674.10892.2.1.1.3.0.1.3.6.1.4.1.674.10892.2.1.1.4.0.1.3.6.1.4.1.674.10892.2.1.1.5.0.1.3.6.1.4.1.674.10892.2.1.1.7.0.1.3.6.1.4.1.674.10892.2.1.1.6.0.1.3.6.1.4.1.674.10892.2.1.2.1.0$MPElement[Name="Dell.Connections.DRACMC"]$$MPElement[Name="Dell.Connections.DRACMC"]/FirmwareVer$$data/SnmpVarBinds/SnmpVarBind[1]/Value$$MPElement[Name="Dell.Connections.DRACMC"]/SysServiceTag$$data/SnmpVarBinds/SnmpVarBind[2]/Value$$MPElement[Name="Dell.Connections.DRACMC"]/ProdUrl$$data/SnmpVarBinds/SnmpVarBind[3]/Value$$MPElement[Name="Dell.Connections.DRACMC"]/ProdVer$$data/SnmpVarBinds/SnmpVarBind[4]/Value$$MPElement[Name="Dell.Connections.DRACMC"]/ProdManf$$data/SnmpVarBinds/SnmpVarBind[5]/Value$$MPElement[Name="Dell.Connections.DRACMC"]/ProdDesc$$data/SnmpVarBinds/SnmpVarBind[6]/Value$$MPElement[Name="Dell.Connections.DRACMC"]/ProdShortName$$data/SnmpVarBinds/SnmpVarBind[7]/Value$$MPElement[Name="Dell.Connections.DRACMC"]/ProdName$$data/SnmpVarBinds/SnmpVarBind[8]/Value$$MPElement[Name="NetworkDevice!Microsoft.SystemCenter.NetworkDevice"]/IPAddress$$Target/Property[Type="NetworkDevice!Microsoft.SystemCenter.NetworkDevice"]/IPAddress$$MPElement[Name="Dell.Connections.DRACMC"]/System_UpTime$$data/SnmpVarBinds/SnmpVarBind[10]/Value$SnmpVarBinds/SnmpVarBind[11]/ValueContainsSubstring1.3.6.1.4.1.674.10892.2SnmpVarBinds/SnmpVarBind[7]/ValueContainsSubstringMCDiscovery$MPElement$$Target/Id$$MPElement[Name="Dell.Connections.DRACMC"]$$MPElement[Name="OOB_DRAC_Group.Contains.DRACMC"]$Discovery$Target/Property[Type="NetworkDevice!Microsoft.SystemCenter.NetworkDevice"]/IPAddress$$Target/Property[Type="NetworkDevice!Microsoft.SystemCenter.NetworkDevice"]/IPAddress$$Target/Property[Type="NetworkDevice!Microsoft.SystemCenter.NetworkDevice"]/CommunityString$300.1.3.6.1.4.1.674.10892.2.3.1.9.0.1.3.6.1.2.1.1.5.0.1.3.6.1.2.1.1.1.0.1.3.6.1.2.1.1.4.0.1.3.6.1.2.1.1.6.0.1.3.6.1.2.1.1.2.0.1.3.6.1.2.1.2.1.0.1.3.6.1.4.1.674.10892.2.1.1.1.0.1.3.6.1.4.1.674.10892.2.1.1.2.0.1.3.6.1.4.1.674.10892.2.1.1.3.0.1.3.6.1.4.1.674.10892.2.1.1.4.0.1.3.6.1.4.1.674.10892.2.1.1.5.0.1.3.6.1.4.1.674.10892.2.1.1.6.0.1.3.6.1.4.1.674.10892.2.1.1.7.0.1.3.6.1.4.1.674.10892.2.1.1.8.0.1.3.6.1.4.1.674.10892.2.1.2.1.0$MPElement[Name="Dell.Connections.CMC"]$$MPElement[Name="NetworkDevice!Microsoft.SystemCenter.NetworkDevice"]/IPAddress$$Target/Property[Type="NetworkDevice!Microsoft.SystemCenter.NetworkDevice"]/IPAddress$$MPElement[Name="Dell.Connections.CMC"]/Name$$data/SnmpVarBinds/SnmpVarBind[9]/Value$$MPElement[Name="Dell.Connections.CMC"]/ShortProductName$$data/SnmpVarBinds/SnmpVarBind[8]/Value$$MPElement[Name="Dell.Connections.CMC"]/Description$$data/SnmpVarBinds/SnmpVarBind[7]/Value$$MPElement[Name="Dell.Connections.CMC"]/Manufacturer$$data/SnmpVarBinds/SnmpVarBind[6]/Value$$MPElement[Name="Dell.Connections.CMC"]/Version$$data/SnmpVarBinds/SnmpVarBind[5]/Value$$MPElement[Name="Dell.Connections.CMC"]/ServiceTag$$data/SnmpVarBinds/SnmpVarBind[4]/Value$$MPElement[Name="Dell.Connections.CMC"]/OOBURL$$data/SnmpVarBinds/SnmpVarBind[3]/Value$$MPElement[Name="Dell.Connections.CMC"]/ChassisName$$data/SnmpVarBinds/SnmpVarBind[2]/Value$$MPElement[Name="Dell.Connections.CMC"]/Firmware$$data/SnmpVarBinds/SnmpVarBind[1]/Value$SnmpVarBinds/SnmpVarBind[6]/ValueContainsSubstringDellSnmpVarBinds/SnmpVarBind[9]/ValueContainsSubstringChassis Management ControllerDiscovery$MPElement$$Target/Id$$MPElement[Name="Dell.Connections.CMC"]$$MPElement[Name="OOB_CMC_Group.Contains.CMC"]$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2048PublisherNameEqualServer Administrator12Dell OMSS Device failed$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2049PublisherNameEqualServer Administrator11Dell OMSS Physical Disk removed$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2050PublisherNameEqualServer Administrator11Dell OMSS Physical disk offline$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2051PublisherNameEqualServer Administrator11Dell OMSS Physical disk degraded$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2054PublisherNameEqualServer Administrator11Dell OMSS Virtual disk deleted$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2056PublisherNameEqualServer Administrator12Dell OMSS Virtual disk failed$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2057PublisherNameEqualServer Administrator11Dell OMSS Virtual disk degraded$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2076PublisherNameEqualServer Administrator12Dell OMSS Virtual disk check consistency failed$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2077PublisherNameEqualServer Administrator12Dell OMSS Virtual disk format failed$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2079PublisherNameEqualServer Administrator12Dell OMSS Virtual disk initialization failed$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2080PublisherNameEqualServer Administrator12Dell OMSS Physical disk initialize failed$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2081PublisherNameEqualServer Administrator12Dell OMSS Virtual disk reconfiguration failed $Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2082PublisherNameEqualServer Administrator12Dell OMSS Virtual disk rebuild failed $Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2083PublisherNameEqualServer Administrator12Dell OMSS Physical disk rebuild failed $Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2094PublisherNameEqualServer Administrator11Dell OMSS Predictive failure reported$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2100PublisherNameEqualServer Administrator11Dell OMSS Temperature max warning threshold exceed$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2101PublisherNameEqualServer Administrator11Dell OMSS Temperature below min warning threshold$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2102PublisherNameEqualServer Administrator12Dell OMSS Temperature max failure threshold exceed$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2103PublisherNameEqualServer Administrator12Dell OMSS Temperature below min failure threshold$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2106PublisherNameEqualServer Administrator11Dell OMSS Smart FPT exceeded$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2107PublisherNameEqualServer Administrator12Dell OMSS Smart config change$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2108PublisherNameEqualServer Administrator11Dell OMSS Smart warning$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2109PublisherNameEqualServer Administrator11Dell OMSS Smart warning temperature$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2110PublisherNameEqualServer Administrator11Dell OMSS Smart warning degraded$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2111PublisherNameEqualServer Administrator11Dell OMSS Failure prediction threshold exceeded$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2112PublisherNameEqualServer Administrator12Dell OMSS Enclosure was shutdown$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2120PublisherNameEqualServer Administrator11Dell OMSS Enclosure firmware mismatch$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2122PublisherNameEqualServer Administrator11Dell OMSS Redundancy degraded$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2123PublisherNameEqualServer Administrator11Dell OMSS Redundancy lost$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2129PublisherNameEqualServer Administrator12Dell OMSS BGI failed$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2131PublisherNameEqualServer Administrator11Dell OMSS Firmware version mismatch$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2132PublisherNameEqualServer Administrator11Dell OMSS Driver version mismatch$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2135PublisherNameEqualServer Administrator11Dell OMSS Array Manager is installed on the system$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2137PublisherNameEqualServer Administrator11Dell OMSS Communication timeout$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2145PublisherNameEqualServer Administrator11Dell OMSS Controller battery low$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2146PublisherNameEqualServer Administrator11Dell OMSS Bad block replacement error$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2147PublisherNameEqualServer Administrator11Dell OMSS Bad block sense error$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2148PublisherNameEqualServer Administrator11Dell OMSS Bad block medium error$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2149PublisherNameEqualServer Administrator11Dell OMSS Bad block extended sense error$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2150PublisherNameEqualServer Administrator11Dell OMSS Bad block extended medium error$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2163PublisherNameEqualServer Administrator12Dell OMSS Rebuild completed with errors$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2165PublisherNameEqualServer Administrator11Dell OMSS RAID controller config file can't be opened.$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2166PublisherNameEqualServer Administrator11Dell OMSS RAID controller config file out of date or corrupted$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2167PublisherNameEqualServer Administrator11Dell OMSS Current kernel and SCSI driver version are older$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2168PublisherNameEqualServer Administrator11Dell OMSS Non-RAID SCSI driver version is older$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2169PublisherNameEqualServer Administrator12Dell OMSS Controller battery needs to be replaced$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2171PublisherNameEqualServer Administrator11Dell OMSS Controller battery temperature is above normal$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2173PublisherNameEqualServer Administrator11Dell OMSS Unsupported configuration detected$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2174PublisherNameEqualServer Administrator11Dell OMSS Controller battery has been removed$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2178PublisherNameEqualServer Administrator11Dell OMSS Controller battery Learn cycle timed out$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2182PublisherNameEqualServer Administrator12Dell OMSS Invalid SAS configuration detected$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2186PublisherNameEqualServer Administrator11Dell OMSS Controller cache has been discarded$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2187PublisherNameEqualServer Administrator11Dell OMSS Single-bit ECC error limit exceeded$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2191PublisherNameEqualServer Administrator12Dell OMSS Multiple enclosures are attached to the controller$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2201PublisherNameEqualServer Administrator11Dell OMSS Global hot spare failed. $Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2203PublisherNameEqualServer Administrator11Dell OMSS Dedicated hot spare failed$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2206PublisherNameEqualServer Administrator11Dell OMSS Only hot spare available is a SATA disk$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2207PublisherNameEqualServer Administrator11Dell OMSS Only hot spare available is a SAS disk$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2211PublisherNameEqualServer Administrator11Dell OMSS Physical disk is not supported$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2213PublisherNameEqualServer Administrator11Dell OMSS Recharge count maximum exceeded$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2246PublisherNameEqualServer Administrator11Dell OMSS Controller battery degraded$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2264PublisherNameEqualServer Administrator11Dell OMSS Device is missing$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2265PublisherNameEqualServer Administrator11Dell OMSS Device is in an unknown state$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2268PublisherNameEqualServer Administrator12Dell OMSS Storage Management has lost communication with the controller$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2270PublisherNameEqualServer Administrator12Dell OMSS Physical disk Clear operation failed$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2272PublisherNameEqualServer Administrator12Dell OMSS Patrol Read found an uncorrectable media error$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2273PublisherNameEqualServer Administrator12Dell OMSS A block on the physical disk has been punctured by the controller$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2276PublisherNameEqualServer Administrator11Dell OMSS Dedicated hot spare is too small$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2277PublisherNameEqualServer Administrator11Dell OMSS Global hot spare is too small$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2282PublisherNameEqualServer Administrator12Dell OMSS Hot spare SMART polling failed$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2283PublisherNameEqualServer Administrator11Dell OMSS Redundant path is broken$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2289PublisherNameEqualServer Administrator12Dell OMSS Multi-bit ECC error$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2290PublisherNameEqualServer Administrator11Dell OMSS Single-bit ECC error$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2292PublisherNameEqualServer Administrator12Dell OMSS Communication with the enclosure has been lost$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2293PublisherNameEqualServer Administrator12Dell OMSS EMM has failed$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2295PublisherNameEqualServer Administrator12Dell OMSS A device has been removed$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2297PublisherNameEqualServer Administrator12Dell OMSS An EMM has been removed$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2298PublisherNameEqualServer Administrator11Dell OMSS Bad sensor on an enclosure$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2299PublisherNameEqualServer Administrator12Dell OMSS Bad PHY$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2300PublisherNameEqualServer Administrator12Dell OMSS Enclosure is unstable$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2301PublisherNameEqualServer Administrator12Dell OMSS Enclosure has a hardware error$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2302PublisherNameEqualServer Administrator12Dell OMSS Enclosure is not responding$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2305PublisherNameEqualServer Administrator11Dell OMSS Physical disk is too small to be used for a rebuild$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2306PublisherNameEqualServer Administrator11Dell OMSS Bad block table is 80% full$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2307PublisherNameEqualServer Administrator12Dell OMSS Bad block table is full$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2309PublisherNameEqualServer Administrator11Dell OMSS A physical disk is incompatible$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2310PublisherNameEqualServer Administrator12Dell OMSS A virtual disk is permanently degraded$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2311PublisherNameEqualServer Administrator11Dell OMSS The firmware on the EMMs is not the same version$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2312PublisherNameEqualServer Administrator11Dell OMSS Power supply in the enclosure has an AC failure$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2313PublisherNameEqualServer Administrator11Dell OMSS Power supply in the enclosure has a DC failure$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2314PublisherNameEqualServer Administrator12Dell OMSS Initialization sequence of SAS components failed during system startup$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2316PublisherNameEqualServer Administrator12Dell OMSS Diagnostic message$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2318PublisherNameEqualServer Administrator11Dell OMSS Problems with the battery or the battery charger$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2319PublisherNameEqualServer Administrator11Dell OMSS Single-bit ECC error$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2320PublisherNameEqualServer Administrator12Dell OMSS Single-bit ECC error$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2321PublisherNameEqualServer Administrator12Dell OMSS Single-bit ECC error$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2322PublisherNameEqualServer Administrator12Dell OMSS The DC power supply is switched off$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2324PublisherNameEqualServer Administrator12Dell OMSS AC power supply cable has been removed$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2327PublisherNameEqualServer Administrator11Dell OMSS NVRAM has corrupted data$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2328PublisherNameEqualServer Administrator11Dell OMSS NVRAM has corrupt data$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2329PublisherNameEqualServer Administrator11Dell OMSS SAS port report$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2335PublisherNameEqualServer Administrator11Dell OMSS Controller event log$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2336PublisherNameEqualServer Administrator12Dell OMSS Controller event log$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2337PublisherNameEqualServer Administrator12Dell OMSS Controller was unable to recover data from the cache$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2340PublisherNameEqualServer Administrator12Dell OMSS BGI completed with uncorrectable errors$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2342PublisherNameEqualServer Administrator11Dell OMSS Check Consistency found inconsistent parity data$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2343PublisherNameEqualServer Administrator11Dell OMSS Check Consistency logging of inconsistent parity data is disabled$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2344PublisherNameEqualServer Administrator11Dell OMSS Virtual disk initialization cancelled$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2345PublisherNameEqualServer Administrator12Dell OMSS Virtual disk initialization failed$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2346PublisherNameEqualServer Administrator11Dell OMSS Error occurred$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2347PublisherNameEqualServer Administrator12Dell OMSS Rebuild failed due to errors on the source physical disk$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2348PublisherNameEqualServer Administrator12Dell OMSS Rebuild failed due to errors on the target physical disk$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2349PublisherNameEqualServer Administrator12Dell OMSS A bad disk block error during a write operation$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2350PublisherNameEqualServer Administrator12Dell OMSS Unrecoverable disk media error during the rebuild$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2355PublisherNameEqualServer Administrator11Dell OMSS Enclosure firmware download failed$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2356PublisherNameEqualServer Administrator12Dell OMSS SAS SMP communications error $Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2357PublisherNameEqualServer Administrator12Dell OMSS SAS expander error$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2359PublisherNameEqualServer Administrator11Dell OMSS Physical disk is not certified$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2367PublisherNameEqualServer Administrator11Dell OMSS Physical disk is using an incompatible technology$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2052PublisherNameEqualServer Administrator10Dell OMSS Physical disk inserted$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2053PublisherNameEqualServer Administrator10Dell OMSS Virtual disk created$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2055PublisherNameEqualServer Administrator10Dell OMSS Virtual disk config changed$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2058PublisherNameEqualServer Administrator10Dell OMSS Virtual disk check consistency started$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2059PublisherNameEqualServer Administrator10Dell OMSS Virtual disk format started$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2061PublisherNameEqualServer Administrator10Dell OMSS Virtual disk initialization started$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2062PublisherNameEqualServer Administrator10Dell OMSS Physical disk initialization started$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2063PublisherNameEqualServer Administrator10Dell OMSS Virtual disk reconfiguration started$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2064PublisherNameEqualServer Administrator10Dell OMSS Virtual disk rebuild started$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2065PublisherNameEqualServer Administrator10Dell OMSS Physical disk rebuild started$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2067PublisherNameEqualServer Administrator10Dell OMSS Virtual disk check consistency cancelled$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2070PublisherNameEqualServer Administrator10Dell OMSS Virtual disk initialization cancelled$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2074PublisherNameEqualServer Administrator10Dell OMSS Physical disk rebuild cancelled$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2085PublisherNameEqualServer Administrator10Dell OMSS Virtual disk check consistency completed$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2086PublisherNameEqualServer Administrator10Dell OMSS Virtual disk format completed$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2088PublisherNameEqualServer Administrator10Dell OMSS Virtual disk initialization completed$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2089PublisherNameEqualServer Administrator10Dell OMSS Physical disk initialize completed$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2090PublisherNameEqualServer Administrator10Dell OMSS Virtual disk reconfiguration completed$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2091PublisherNameEqualServer Administrator10Dell OMSS Virtual disk rebuild completed$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2092PublisherNameEqualServer Administrator10Dell OMSS Physical disk rebuild completed$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2095PublisherNameEqualServer Administrator10Dell OMSS SCSI sense data$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2098PublisherNameEqualServer Administrator10Dell OMSS Global hot spare assigned$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2099PublisherNameEqualServer Administrator10Dell OMSS Global hot spare unassigned$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2104PublisherNameEqualServer Administrator10Dell OMSS Controller battery is reconditioning$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2105PublisherNameEqualServer Administrator10Dell OMSS Controller battery recondition is completed$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2114PublisherNameEqualServer Administrator10Dell OMSS A consistency check on a virtual disk has been paused$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2115PublisherNameEqualServer Administrator10Dell OMSS A consistency check on a virtual disk has been resumed$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2116PublisherNameEqualServer Administrator10Dell OMSS A virtual disk and its mirror have been split$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2117PublisherNameEqualServer Administrator10Dell OMSS A mirrored virtual disk has been unmirrored$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2118PublisherNameEqualServer Administrator10Dell OMSS Change write policy$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2121PublisherNameEqualServer Administrator10Dell OMSS Device returned to normal$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2124PublisherNameEqualServer Administrator10Dell OMSS Redundancy normal$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2127PublisherNameEqualServer Administrator10Dell OMSS BGI Started$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2128PublisherNameEqualServer Administrator10Dell OMSS BGI Cancelled$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2130PublisherNameEqualServer Administrator10Dell OMSS BGI completed$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2136PublisherNameEqualServer Administrator10Dell OMSS Virtual disk initialization$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2138PublisherNameEqualServer Administrator10Dell OMSS Enclosure alarm enabled$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2139PublisherNameEqualServer Administrator10Dell OMSS Enclosure alarm disabled$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2140PublisherNameEqualServer Administrator10Dell OMSS Dead disk segments restored$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2141PublisherNameEqualServer Administrator10Dell OMSS Physical disk dead segments recovered$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2142PublisherNameEqualServer Administrator10Dell OMSS Controller rebuild rate has changed$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2143PublisherNameEqualServer Administrator10Dell OMSS Controller alarm enabled$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2144PublisherNameEqualServer Administrator10Dell OMSS Controller alarm disabled$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2151PublisherNameEqualServer Administrator10Dell OMSS Asset tag changed$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2152PublisherNameEqualServer Administrator10Dell OMSS Asset name changed$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2153PublisherNameEqualServer Administrator10Dell OMSS Service tag changed$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2154PublisherNameEqualServer Administrator10Dell OMSS Max temperature warning threshold changed$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2155PublisherNameEqualServer Administrator10Dell OMSS Minimum temperature warning threshold changed$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2156PublisherNameEqualServer Administrator10Dell OMSS Controller alarm has been tested$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2157PublisherNameEqualServer Administrator10Dell OMSS Controller config has been reset$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2158PublisherNameEqualServer Administrator10Dell OMSS Physical disk online$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2159PublisherNameEqualServer Administrator10Dell OMSS Virtual disk renamed$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2160PublisherNameEqualServer Administrator10Dell OMSS Dedicated hot spare assigned$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2161PublisherNameEqualServer Administrator10Dell OMSS Dedicated hot spare unassigned$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2162PublisherNameEqualServer Administrator10Dell OMSS Communication regained$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2164PublisherNameEqualServer Administrator10Dell OMSS See Readme file for controller driver versions$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2170PublisherNameEqualServer Administrator10Dell OMSS Controller battery charge level is normal$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2172PublisherNameEqualServer Administrator10Dell OMSS Controller battery temperature is normal$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2175PublisherNameEqualServer Administrator10Dell OMSS Controller battery has been replaced$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2176PublisherNameEqualServer Administrator10Dell OMSS Controller battery Learn cycle has started$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2177PublisherNameEqualServer Administrator10Dell OMSS Controller battery Learn cycle has completed$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2179PublisherNameEqualServer Administrator10Dell OMSS Controller battery Learn cycle has been postponed$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2180PublisherNameEqualServer Administrator10Dell OMSS Controller battery Learn cycle will start (in days)$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2181PublisherNameEqualServer Administrator10Dell OMSS Controller battery Learn cycle will start (in hours)$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2188PublisherNameEqualServer Administrator10Dell OMSS Controller write policy has been changed to Write Through$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2189PublisherNameEqualServer Administrator10Dell OMSS Controller write policy has been changed to Write Back$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2192PublisherNameEqualServer Administrator10Dell OMSS Virtual disk Check Consistency completed with corrections$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2193PublisherNameEqualServer Administrator10Dell OMSS Virtual disk reconfiguration has resumed$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2194PublisherNameEqualServer Administrator10Dell OMSS Virtual disk Read policy has changed$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2195PublisherNameEqualServer Administrator10Dell OMSS Dedicated hot spare assigned$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2196PublisherNameEqualServer Administrator10Dell OMSS Dedicated hot spare unassigned$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2199PublisherNameEqualServer Administrator10Dell OMSS Virtual disk cache policy has changed$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2202PublisherNameEqualServer Administrator10Dell OMSS Global hot spare has been removed$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2204PublisherNameEqualServer Administrator10Dell OMSS A dedicated hot spare has been removed$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2205PublisherNameEqualServer Administrator10Dell OMSS A dedicated hot spare has been unassigned$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2212PublisherNameEqualServer Administrator10Dell OMSS Controller battery temperature is above normal$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2214PublisherNameEqualServer Administrator10Dell OMSS Battery charge in progress$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2215PublisherNameEqualServer Administrator10Dell OMSS Battery charge process interrupted$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2232PublisherNameEqualServer Administrator10Dell OMSS Controller alarm is silenced$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2233PublisherNameEqualServer Administrator10Dell OMSS BGI rate has changed$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2234PublisherNameEqualServer Administrator10Dell OMSS Patrol read rate has changed$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2235PublisherNameEqualServer Administrator10Dell OMSS Check Consistency rate has changed$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2238PublisherNameEqualServer Administrator10Dell OMSS Controller debug log file has been exported$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2239PublisherNameEqualServer Administrator10Dell OMSS A foreign configuration has been cleared$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2240PublisherNameEqualServer Administrator10Dell OMSS A foreign configuration has been imported$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2241PublisherNameEqualServer Administrator10Dell OMSS Patrol Read mode has changed$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2242PublisherNameEqualServer Administrator10Dell OMSS Patrol Read has started$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2243PublisherNameEqualServer Administrator10Dell OMSS Patrol Read has stopped$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2244PublisherNameEqualServer Administrator10Dell OMSS Virtual disk blink has been initiated$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2245PublisherNameEqualServer Administrator10Dell OMSS Virtual disk blink has ceased$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2247PublisherNameEqualServer Administrator10Dell OMSS Controller battery is charging$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2248PublisherNameEqualServer Administrator10Dell OMSS Controller battery is executing a Learn cycle$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2249PublisherNameEqualServer Administrator10Dell OMSS Physical disk Clear operation has started$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2251PublisherNameEqualServer Administrator10Dell OMSS Physical disk blink has initiated$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2252PublisherNameEqualServer Administrator10Dell OMSS Physical disk blink has ceased$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2254PublisherNameEqualServer Administrator10Dell OMSS Clear operation has cancelled$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2255PublisherNameEqualServer Administrator10Dell OMSS Physical disk has been started$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2259PublisherNameEqualServer Administrator10Dell OMSS Enclosure blink operation has initiated$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2260PublisherNameEqualServer Administrator10Dell OMSS Enclosure blink has ceased$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2262PublisherNameEqualServer Administrator10Dell OMSS SMART thermal shutdown is enabled$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2263PublisherNameEqualServer Administrator10Dell OMSS SMART thermal shutdown is disabled$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2266PublisherNameEqualServer Administrator10Dell OMSS Controller log file entry$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2267PublisherNameEqualServer Administrator10Dell OMSS Controller reconstruct rate has changed$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2269PublisherNameEqualServer Administrator10Dell OMSS Physical disk Clear operation has completed$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2271PublisherNameEqualServer Administrator10Dell OMSS Patrol Read corrected a media error$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2274PublisherNameEqualServer Administrator10Dell OMSS Physical disk rebuild has resumed$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2278PublisherNameEqualServer Administrator10Dell OMSS Controller battery charge level is below a normal threshold$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2279PublisherNameEqualServer Administrator10Dell OMSS Controller battery charge level is within normal limits$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2280PublisherNameEqualServer Administrator10Dell OMSS A disk media error has been corrected$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2281PublisherNameEqualServer Administrator10Dell OMSS Virtual disk has inconsistent data$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2284PublisherNameEqualServer Administrator10Dell OMSS A redundant path has been restored$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2285PublisherNameEqualServer Administrator10Dell OMSS A disk media error was corrected during recovery$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2291PublisherNameEqualServer Administrator10Dell OMSS An EMM has been discovered$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2294PublisherNameEqualServer Administrator10Dell OMSS A device has been inserted$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2296PublisherNameEqualServer Administrator10Dell OMSS An EMM has been inserted$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2303PublisherNameEqualServer Administrator10Dell OMSS Enclosure cannot support both SAS and SATA physical disks$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2304PublisherNameEqualServer Administrator10Dell OMSS An attempt to hot plug an EMM has been detected$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2315PublisherNameEqualServer Administrator10Dell OMSS Diagnostic message $Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2323PublisherNameEqualServer Administrator10Dell OMSS The power supply is switched on$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2325PublisherNameEqualServer Administrator10Dell OMSS The power supply cable has been inserted$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2326PublisherNameEqualServer Administrator10Dell OMSS A foreign configuration has been detected$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2330PublisherNameEqualServer Administrator10Dell OMSS SAS port report$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2331PublisherNameEqualServer Administrator10Dell OMSS A bad disk block has been reassigned$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2332PublisherNameEqualServer Administrator10Dell OMSS A controller hot plug has been detected$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2334PublisherNameEqualServer Administrator10Dell OMSS Controller event log$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2338PublisherNameEqualServer Administrator10Dell OMSS Controller has recovered cached data from the BBU$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2339PublisherNameEqualServer Administrator10Dell OMSS The factory default settings have been restored$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2341PublisherNameEqualServer Administrator10Dell OMSS Check Consistency made corrections and completed$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2351PublisherNameEqualServer Administrator10Dell OMSS A physical disk is marked as missing$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2352PublisherNameEqualServer Administrator10Dell OMSS A physical disk that was marked as missing has been replaced$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2353PublisherNameEqualServer Administrator10Dell OMSS The enclosure temperature has returned to normal$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2354PublisherNameEqualServer Administrator10Dell OMSS Enclosure firmware download in progress$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2358PublisherNameEqualServer Administrator10Dell OMSS The battery charge cycle is complete$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2360PublisherNameEqualServer Administrator10Dell OMSS A user has discarded data from the controller cache$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2361PublisherNameEqualServer Administrator10Dell OMSS Physical disks removed while the system was shut down.$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2362PublisherNameEqualServer Administrator10Dell OMSS Physical disks have been removed from a virtual disk$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2364PublisherNameEqualServer Administrator10Dell OMSS All virtual disks are missing from the controller$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2366PublisherNameEqualServer Administrator10Dell OMSS Dedicated spare imported as global due to missing arrays$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2368PublisherNameEqualServer Administrator10Dell OMSS SEP has been rebooted$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2369PublisherNameEqualServer Administrator10Dell OMSS Virtual Disk Redundancy has been degraded$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual2371PublisherNameEqualServer Administrator10Dell OMSS Attempted import of Unsupported Virtual Disk type$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual1004PublisherNameEqualServer Administrator12Dell OMSA Thermal shutdown protection initiated $Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual1005PublisherNameEqualServer Administrator11Dell OMSA SMBIOS data is absent$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual1006PublisherNameEqualServer Administrator12Dell OMSA ASR action performed$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual1011PublisherNameEqualServer Administrator11Dell OMSA RCI table is corrupt$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual1053PublisherNameEqualServer Administrator11Dell OMSA Temperature sensor detected a warning value$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual1054PublisherNameEqualServer Administrator12Dell OMSA Temperature sensor detected a failure value$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual1055PublisherNameEqualServer Administrator12Dell OMSA Temperature sensor detected a non-recoverable value$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual1103PublisherNameEqualServer Administrator11Dell OMSA Fan sensor detected a warning value$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual1104PublisherNameEqualServer Administrator12Dell OMSA Fan sensor detected a failure value$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual1105PublisherNameEqualServer Administrator12Dell OMSA Fan sensor detected a non-recoverable value$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual1153PublisherNameEqualServer Administrator11Dell OMSA Voltage sensor detected a warning value$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual1154PublisherNameEqualServer Administrator12Dell OMSA Voltage sensor detected a failure value$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual1155PublisherNameEqualServer Administrator12Dell OMSA Voltage sensor detected a non-recoverable value$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual1203PublisherNameEqualServer Administrator11Dell OMSA Current sensor detected a warning value$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual1204PublisherNameEqualServer Administrator12Dell OMSA Current sensor detected a failure value$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual1205PublisherNameEqualServer Administrator12Dell OMSA Current sensor detected a non-recoverable value$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual1253PublisherNameEqualServer Administrator11Dell OMSA Chassis intrusion in progress$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual1254PublisherNameEqualServer Administrator12Dell OMSA Chassis intrusion detected$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual1255PublisherNameEqualServer Administrator12Dell OMSA Chassis intrusion detected a non-recoverable value$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual1305PublisherNameEqualServer Administrator11Dell OMSA Redundancy degraded$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual1306PublisherNameEqualServer AdministratorEventLevelEqual111Dell OMSA Redundancy lost$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual1306PublisherNameEqualServer AdministratorEventLevelEqual212Dell OMSA Redundancy lost$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual1353PublisherNameEqualServer Administrator11Dell OMSA Power supply detected a warning sensor$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual1354PublisherNameEqualServer Administrator12Dell OMSA Power supply detected a failure sensor$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual1355PublisherNameEqualServer Administrator12Dell OMSA Power supply sensor detected a non-recoverable value$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual1403PublisherNameEqualServer Administrator11Dell OMSA Memory device correction rate exceeded$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual1404PublisherNameEqualServer Administrator12Dell OMSA Memory spare bank was activated or a multibit ECC error occurred. $Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual1453PublisherNameEqualServer Administrator11Dell OMSA Fan enclosure removed from system$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual1454PublisherNameEqualServer Administrator12Dell OMSA Fan enclosure removed from system for an extended amount of time$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual1455PublisherNameEqualServer Administrator12Dell OMSA Fan enclosure sensor detected a non-recoverable value$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual1503PublisherNameEqualServer Administrator11Dell OMSA AC power has been lost$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual1504PublisherNameEqualServer Administrator12Dell OMSA An AC power cord has lost its power$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual1505PublisherNameEqualServer Administrator12Dell OMSA An AC power cord sensor in the system failed$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual1553PublisherNameEqualServer Administrator11Dell OMSA Log size is near or at capacity$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual1554PublisherNameEqualServer Administrator12Dell OMSA Log size is full$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual1555PublisherNameEqualServer Administrator12Dell OMSA Log sensor has failed$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual1603PublisherNameEqualServer Administrator11Dell OMSA Processor sensor detected a warning value$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual1604PublisherNameEqualServer Administrator12Dell OMSA Processor sensor detected a failure value$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual1605PublisherNameEqualServer Administrator12Dell OMSA Processor sensor detected a non-recoverable value$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual1653PublisherNameEqualServer Administrator12Dell OMSA Device configuration error detected$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual1703PublisherNameEqualServer Administrator11Dell OMSA Battery sensor detected a warning value$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual1704PublisherNameEqualServer Administrator12Dell OMSA Battery sensor detected a failure value$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual1705PublisherNameEqualServer Administrator12Dell OMSA Battery sensor detected a non-recoverable value$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual0000PublisherNameEqualServer Administrator10Dell OMSA Log was cleared$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual0001PublisherNameEqualServer Administrator10Dell OMSA Log backup created$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual1000PublisherNameEqualServer Administrator10Dell OMSA Server Administrator starting$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual1001PublisherNameEqualServer Administrator10Dell OMSA Server Administrator startup complete$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual1002PublisherNameEqualServer Administrator10Dell OMSA A system BIOS update has been scheduled for the next reboot$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual1003PublisherNameEqualServer Administrator10Dell OMSA A previously scheduled system BIOS update has been canceled$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual1007PublisherNameEqualServer Administrator10Dell OMSA User initiated host system control action$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual1008PublisherNameEqualServer Administrator10Dell OMSA System management data manager started$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual1009PublisherNameEqualServer Administrator10Dell OMSA System management data manager stopped$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual1012PublisherNameEqualServer Administrator10Dell OMSA IPMI status$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual1050PublisherNameEqualServer Administrator10Dell OMSA Temperature sensor has failed$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual1051PublisherNameEqualServer Administrator10Dell OMSA Temperature sensor value unknown$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual1052PublisherNameEqualServer Administrator10Dell OMSA Temperature sensor returned to a normal value$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual1100PublisherNameEqualServer Administrator10Dell OMSA Fan sensor has failed$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual1101PublisherNameEqualServer Administrator10Dell OMSA Fan sensor value unknown$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual1102PublisherNameEqualServer Administrator10Dell OMSA Fan sensor returned to a normal value$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual1150PublisherNameEqualServer Administrator10Dell OMSA Voltage sensor has failed$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual1151PublisherNameEqualServer Administrator10Dell OMSA Voltage sensor value unknown$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual1152PublisherNameEqualServer Administrator10Dell OMSA Voltage sensor returned to a normal value$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual1200PublisherNameEqualServer Administrator10Dell OMSA Current sensor has failed$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual1201PublisherNameEqualServer Administrator10Dell OMSA Current sensor value unknown$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual1202PublisherNameEqualServer Administrator10Dell OMSA Current sensor returned to a normal value$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual1250PublisherNameEqualServer Administrator10Dell OMSA Chassis intrusion sensor has failed$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual1251PublisherNameEqualServer Administrator10Dell OMSA Chassis intrusion sensor value unknown$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual1252PublisherNameEqualServer Administrator10Dell OMSA Chassis intrusion returned to normal$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual1300PublisherNameEqualServer Administrator10Dell OMSA Redundancy sensor has failed$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual1301PublisherNameEqualServer Administrator10Dell OMSA Redundancy sensor value unknown$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual1302PublisherNameEqualServer Administrator10Dell OMSA Redundancy not applicable$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual1303PublisherNameEqualServer Administrator10Dell OMSA Redundancy is offline$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual1304PublisherNameEqualServer Administrator10Dell OMSA Redundancy regained$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual1350PublisherNameEqualServer Administrator10Dell OMSA Power supply sensor has failed$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual1351PublisherNameEqualServer Administrator10Dell OMSA Power supply sensor value unknown$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual1352PublisherNameEqualServer Administrator10Dell OMSA Power supply returned to normal$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual1450PublisherNameEqualServer Administrator10Dell OMSA Fan enclosure sensor has failed$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual1451PublisherNameEqualServer Administrator10Dell OMSA Fan enclosure sensor value unknown$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual1452PublisherNameEqualServer Administrator10Dell OMSA Fan enclosure inserted into system$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual1500PublisherNameEqualServer Administrator10Dell OMSA AC power cord sensor has failed$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual1501PublisherNameEqualServer Administrator10Dell OMSA AC power cord is not being monitored$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual1502PublisherNameEqualServer Administrator10Dell OMSA AC power has been restored$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual1550PublisherNameEqualServer Administrator10Dell OMSA Log monitoring has been disabled$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual1551PublisherNameEqualServer Administrator10Dell OMSA Log status is unknown$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual1552PublisherNameEqualServer Administrator10Dell OMSA Log size is no longer near or at capacity$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual1600PublisherNameEqualServer Administrator10Dell OMSA Processor sensor has failed$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual1601PublisherNameEqualServer Administrator10Dell OMSA Processor sensor value unknown$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual1602PublisherNameEqualServer Administrator10Dell OMSA Processor sensor returned to a normal value$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual1650PublisherNameEqualServer Administrator10Dell OMSA A pluggable device event$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual1651PublisherNameEqualServer Administrator10Dell OMSA Device added to system$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual1652PublisherNameEqualServer Administrator10Dell OMSA Device removed from system$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual1700PublisherNameEqualServer Administrator10Dell OMSA Battery sensor has failed$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual1701PublisherNameEqualServer Administrator10Dell OMSA Battery sensor value unknown$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Alert$Target/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberEqual1702PublisherNameEqualServer Administrator10Dell OMSA Battery sensor returned to a normal value$Data/EventDescription$$Data/EventDisplayNumber$$Data/Channel$$Data/PublisherName$$Data/LoggingComputer$$Data/EventCategory$$Data/EventLevel$$Data/UserName$$Data/EventNumber$$Data/EventDescription$Customc:\DellReports\dellbmc.logfalseParams/Param[1]MatchesWildcard*Customc:\DellReports\dellesm.logfalseParams/Param[1]MatchesWildcard*Custom360BMCLogGet.vbs
Dim BMCExecFilePath,objFSO,oShell,strCommand,rc,oAPI
Set oAPI = CreateObject("MOM.ScriptAPI")
BMCExecFilePath = "c:\DellReports\DellBMCLog.exe"
strCommand = "cmd /c " & BMCExecFilePath
Set objFSO = CreateObject("Scripting.FileSystemObject")
If objFSO.FileExists(BMCExecFilePath) Then
Set oShell = CreateObject ("WScript.Shell")
rc = oShell.run(strCommand,0,true)
End If
Set objFSO = Nothing
Set oShell = Nothing
60CustomDell.Connections.ClearESMLog.vbs
'**********************************************************************************
' Script Name - Dell Clear ESM Log
' Author: Vignesh Pandian
'
' Description:
' Backups and clear the ESM log for Dell server using CLI
'
' (c) Copyright Dell Inc. 2007 - All rights reserved
'**********************************************************************************
Option Explicit
Const SCRIPT_NAME = "Dell Clear Agent ESM Log 2.2"
Const ForReading = 1
Const ForWriting = 2
Const OMA_REG_INTALL_PATH = "HKEY_LOCAL_MACHINE\SOFTWARE\Dell Computer Corporation\Dell OMA\InstallPath"
Const OMA64_REG_INTALL_PATH = "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Dell Computer Corporation\Dell OMA\InstallPath"
Const OMSA_REG_INTALL_PATH = "HKEY_LOCAL_MACHINE\SOFTWARE\Dell Computer Corporation\Dell OMSA\InstallPath"
Const DEF_OMA_BIN_PATH = "C:\Program Files\Dell\OpenManage\oma\bin"
Const DEF_OMSA_ESMLOG_PATH = "C:\DellMP"
Dim OMABinPath, ESMLogPath, CreateFlag, version
Dim WshShell, oShell, objStdOut, rc
Dim Message, LogMessage, strLine
'MAIN BEGIN
' Get OMA Bin Path for omconfig and omreport CLI
GetOMPath OMABinPath, ESMLogPath
BackupESM OMABinPath, ESMLogPath
ClearESMLog OMABinPath
'MAIN END
'*****************************************************************
'GetOMABinPath
'Routine to read the registry to query the OMA Install Path
'*****************************************************************
Function GetOMPath(omaPath, esmPath)
On Error Resume Next
Dim strOMAKey
Dim oShell, tmp1, tmp2, currentTime
Set oShell = CreateObject ("WScript.Shell")
omaPath = ""
On Error Resume Next
omaPath = oShell.RegRead(OMA_REG_INTALL_PATH)
If omaPath = "" Then
omaPath = oShell.RegRead(OMA64_REG_INTALL_PATH)
End If
On Error Goto 0
If omaPath = "" Then
tmp1 = DEF_OMA_BIN_PATH & "\omconfig.exe"
tmp2 = DEF_OMA_BIN_PATH & "\omreport.exe"
If(bFileExists(tmp1) and bFileExists(tmp2)) Then
omaPath = DEF_OMA_BIN_PATH
' Message = "GetOMABinPath - OMSABinPath is empty, Using Default Existing Path" & DEF_OMA_BIN_PATH
' MOMDebugLog Message
Else
Message = "RegError=1 - OMSA not installed / OMSA Registry Value not found."
MOMDebugLog Message
Wscript.Quit()
End If
Else
omaPath = omaPath & "\bin"
End If
esmPath = Left (omaPath, 2)
esmPath = esmPath & "\DellMP"
If (bFolderExists(esmPath)) Then
' Message = esmPath & " folder exists"
' MOMDebugLog Message
Else
Dim fso, fldr
Set fso = CreateObject("Scripting.FileSystemObject")
Set fldr = fso.CreateFolder(esmPath)
' Message = "Created folder - " & fldr.Name & " for " & esmPath
' MOMDebugLog Message
End If
currentTime = Now()
currentTime = Replace(currentTime,"/","_")
currentTime = Replace(currentTime,":","-")
esmPath = esmPath & "\ESMData---" & currentTime & ".log"
Message = "Agent system backup location for ESM Log --- " & esmPath
MOMDebugLog Message
If Err <> 0 Then
Message = "OpenManage Path Error --- " & Err.Number & "," & Err.Description
MOMDebugLog Message
Wscript.Quit()
Else
' Message = "OMABinPath = " & omaPath & " + ESMDataLog Path = " & esmPath
' MOMDebugLog Message
End If
End Function
'*****************************************************************
'bFileExists
'Routine to determine if a file exists (omconfig/omreport)
'*****************************************************************
Function bFileExists(filespec1)
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
bFileExists = (fso.FileExists(filespec1))
Set fso = Nothing
End Function
'*****************************************************************
'bFolderExists
'Routine to determine if a folder exists for ESMData log
'*****************************************************************
Function bFolderExists(folder1)
Dim filesys, newfolder
Set filesys=CreateObject("Scripting.FileSystemObject")
bFolderExists = (filesys.FolderExists(folder1))
End Function
'*****************************************************************
' Function MOMDebugLog
' Add LogMessage Header - ScriptName and Time and Logging it.
'*****************************************************************
Function MOMDebugLog (ByVal strMessage)
' LogMessage = "(" & SCRIPT_NAME & ")" & "-" & "[" & Now() & "] --- "
LogMessage = "[" & Now() & "] --- "
LogMessage = LogMessage & strMessage
' WScript.echo strMessage
End Function
'**********************************************************
' CheckVBScriptEngine()
' Check VBScript engine version:
'**********************************************************
Function CheckVBScriptEngine()
Dim bIsCompatV, var
Const VBSCRIPT_MIN_VERSION = 5.6
var = ScriptEngineMajorVersion & "." & ScriptEngineMinorVersion
If (CInt(var)) < VBSCRIPT_MIN_VERSION Then
bIsCompatV = False
Else
bIsCompatV = True
End If
If Err <> 0 Then
CheckVBScriptEngine = Err.Number
Else
CheckVBScriptEngine = bIsCompatV
End If
End Function
'*****************************************************************
'DelFile
'Routine to delete the OMSA Report file
'*****************************************************************
Function DelFile(ByVal filespec2)
Dim fso, oFile
On Error Resume Next
If bFileExists(filespec2) Then
Set fso = CreateObject("Scripting.FileSystemObject")
fso.DeleteFile filespec2, True
Set fso = Nothing
' Message = "Temp Output File deleted - " & filespec2
' MOMDebugLog Message
End If
If Err <> 0 Then
DelFile = Err.Number
End If
End Function
'**********************************************************
' BackupESM()
' Make backup of ESM Log
'**********************************************************
Function BackupESM (ByVal OMABinPath, ByVal ESMLogPath)
' Check VBScript engine version
version = CheckVBScriptEngine()
If version = True Then
' Message = "BackupESM: ExecCLI - VBVersion >=5.6"
' MOMDebugLog Message
ExecESMBackup OMABinPath, ESMLogPath
ElseIf version = False Then
' Message = "BackupESM: RunCLI - VBVersion < 5.6"
' MOMDebugLog Message
RunESMBackup OMABinPath, ESMLogPath
Else
Message = "Please Re-install Windows Script 5.6 for the Agent (VBScriptVersion error occurred)"
MOMDebugLog Message
Wscript.Quit()
End If
End Function
'**********************************************************
' ExecESMBackup()
' Exec - VBScript >= 5.6
'**********************************************************
Function ExecESMBackup (ByVal OMSABinPath, ByVal ESMLogPath)
Dim fso, esmfile, ESMArchive, strCommand, a, b
strCommand = "cmd /C " & chr(34) & OMABinPath & "\" & "omreport.exe" & Chr(34) & " system esmlog "
Set fso = CreateObject("Scripting.FileSystemObject")
Set esmfile = fso.OpenTextFile(ESMLogPath, ForWriting, True)
esmfile.WriteLine("************************************************")
esmfile.WriteLine(" ESM Log backup --- " & Now())
esmfile.WriteLine("************************************************")
' Message = "Exec str = " & strCommand
' MOMDebugLog Message
a = 0
Set WshShell = CreateObject("WScript.Shell")
Set oShell = WshShell.Exec(trim(strCommand))
Do While oShell.Status <> 1
Wscript.Sleep(0)
a = a + 1
b = a Mod 100000
If b = 0 Then
Exit Do
End If
Loop
Set objStdOut = oShell.StdOut
Do While Not objStdOut.AtEndOfStream
strLine = objStdOut.ReadLine
esmfile.WriteLine strLine
Loop
esmfile.close
Set fso = Nothing
Set esmfile = Nothing
End Function
'**********************************************************
' RunESMBackup()
' Run - VBScript < 5.6
'**********************************************************
Function RunESMBackup (ByVal OMSABinPath, ByVal ESMLogPath)
On Error Resume Next
Dim fso, esmfile, strCommand, tmpESM, rc, guid1, sysTmpFldr, driveLetter
driveLetter = Left(ESMLogPath, 2)
GetOMReportFileGUID guid1
GetTempFolderPath sysTmpFldr, driveLetter
tmpESM = sysTmpFldr & "\" & guid1
strCommand = "cmd /C " & chr(34) & OMABinPath & "\" & "omreport.exe" & chr(34) & " system esmlog -outc " & tmpESM
Set fso = CreateObject("Scripting.FileSystemObject")
Set esmfile = fso.OpenTextFile(ESMLogPath, ForWriting, True)
esmfile.WriteLine("************************************************")
esmfile.WriteLine(" ESM Log backup --- " & Now())
esmfile.WriteLine("************************************************")
' Message = "RUN str=" & strCommand
' MOMDebugLog Message
Set oShell = CreateObject ("WScript.Shell")
rc = oShell.run(Trim(strCommand),0,true)
If rc <> 0 Then
Message = "Failed Backup of ESM Log. oShell.run(strCommand) Error : " & rc
MOMDebugLog Message
esmfile.WriteLine("Failed Backup of ESM Log")
DelFile tmpESM
Wscript.Quit()
Else
Do While bFileExists(tmpESM) <> -1
Wscript.Sleep(0)
Loop
Dim tmpfso, otmpFile
Set tmpfso = CreateObject("Scripting.FileSystemObject")
Set otmpFile = tmpfso.OpenTextFile(tmpESM, ForReading, False)
Do While Not otmpFile.AtEndOfStream
strLine = otmpFile.ReadLine
esmfile.WriteLine strLine
Loop
otmpFile.Close()
DelFile tmpESM
Set tmpfso = Nothing
Set otmpFile = Nothing
End If
esmfile.close
Set fso = Nothing
Set esmfile = Nothing
End Function
'**********************************************************
' ClearESMLog()
' Clear ESM Log
'**********************************************************
Function ClearESMLog (ByVal OMABinPath)
' Check VBScript engine version
version = CheckVBScriptEngine()
Dim strCommand1
strCommand1 = "cmd /C " & chr(34) & OMABinPath & "\" & "omconfig.exe" & Chr(34) & " system esmlog action=clear"
' Message = "str = " & strCommand1
' MOMDebugLog Message
If version = True Then
' Message = "ClearESMLog: ExecCLI - VBVersion >=5.6"
' MOMDebugLog Message
ExecESMClear strCommand1
ElseIf version = False Then
' Message = "ClearESMLog: RunCLI - VBVersion < 5.6"
' MOMDebugLog Message
RunESMClear strCommand1
Else
Message = "Please Re-Install Windows Script 5.6 for Agent Server. (VBScriptVersion error occurred)"
MOMDebugLog Message
Wscript.Quit()
End If
End Function
'**********************************************************
' ExecESMClear()
' Exec - VBScript >= 5.6
'**********************************************************
Function ExecESMClear (ByVal strCommand2)
Set WshShell = CreateObject("WScript.Shell")
Set oShell = WshShell.Exec(trim(strCommand2))
Do While oShell.Status <> 1
Wscript.Sleep(0)
Loop
Set objStdOut = oShell.StdOut
Do While Not objStdOut.AtEndOfStream
Message = objStdOut.ReadLine
MOMDebugLog Message
Loop
Set WshShell = Nothing
Set oShell = Nothing
End Function
'**********************************************************
' RunESMClear()
' Run - VBScript < 5.6
'**********************************************************
Function RunESMClear (ByVal strCommand2)
Set oShell = CreateObject ("WScript.Shell")
rc = oShell.run(Trim(strCommand2),0,true)
If rc <> 0 Then
Message = "Failed Clearing ESM Log. oShell.run(strCommand) Error : " & rc
MOMDebugLog Message
Else
Message = "Embedded System Management Log cleared Successfully "
MOMDebugLog Message
End If
Set WshShell = Nothing
Set oShell = Nothing
End Function
'*****************************************************************
'GetOMReportFileGUID
'Routine to generate unique GUIDs for OMREPORT FILE
'*****************************************************************
Function GetOMReportFileGUID(ByRef o_guid)
Dim TypeLib, NewGUID
Set TypeLib = CreateObject("Scriptlet.TypeLib")
NewGUID = TypeLib.Guid
o_guid = (left(NewGUID, len(NewGUID)-2))
Set TypeLib = Nothing
End Function
'*****************************************************************
'GetTempFolderPath
'Routine to Get Win Temp Folder path
'*****************************************************************
Function GetTempFolderPath(ByRef WinTempFolder, ByVal drive_letter)
On Error Resume Next
Dim FldrExistFlag, fso
FldrExistFlag = False
dim wshShell : Set wshShell = Createobject("WScript.Shell")
dim wshSysEnv : Set wshSysEnv = wshShell.Environment
dim strSysTempFolder : strSysTempFolder = wshSysEnv("TEMP")
dim wshPrcEnv : Set wshPrcEnv = wshShell.Environment("Process")
strSysTempFolder = Replace(strSysTempFolder, "%SystemRoot%", wshPrcEnv("SYSTEMROOT"), 1, -1, vbTextCompare)
WinTempFolder = strSysTempFolder
Set fso = CreateObject("Scripting.FileSystemObject")
If (fso.FolderExists(WinTempFolder)) Then
FldrExistFlag = True
Else
FldrExistFlag = False
End If
If WinTempFolder = "" OR FldrExistFlag = False Then
WinTempFolder = drive_letter
End If
' Message = "Current CLI output will be stored in Folder - " & WinTempFolder
' MOMDebugLog Message
Set wshShell = Nothing
Set wshSysEnv = Nothing
Set strSysTempFolder = Nothing
Set wshPrcEnv = Nothing
If Err <> 0 Then
GetTempFolderPath = Err.Number
End If
End Function
300Custom3600DellStorageControllerUnitMonitor.vbs$MPElement$ $Target/Id$ $Config/Computer$ $Target/Property[Type="Dell.Connections.DellStorageController"]/DeviceID$
'**********************************************************************************
' Script Name - DellStorageControllerUnitMonitor
' Author: Vignesh Pandian
'
' Description:
' Determine Unit Monitor health for ServerStorageController
'
' (c) Copyright Dell Inc. 2007 - All rights reserved
'**********************************************************************************
Option Explicit
Dim oArgs
Set oArgs = WScript.Arguments
if oArgs.Count < 4 Then
Wscript.Quit -1
End If
Dim SourceID, ManagedEntityId, TargetComputer, prmDevice, ControllerStatus
SourceId = oArgs(0)
ManagedEntityId = oArgs(1)
TargetComputer = oArgs(2)
prmDevice = oArgs(3)
Dim oAPI, oDiscoveryData, oInst
Dim strComputer, WbemServices, wbemObjectSet
strComputer=TargetComputer
Set oAPI = CreateObject("MOM.ScriptAPI")
Const WAIT_LOOP = 1000000
Const SCRIPT_NAME = "Dell Agents State Monitoring"
Const OM_REPORT_STORAGE_CONTR = "Storage"
Const DEF_OMSA_BIN_PATH = "C:\Program Files\Dell\OpenManage\oma\bin"
Const OMSA_REG_INTALL_PATH = "HKEY_LOCAL_MACHINE\SOFTWARE\Dell Computer Corporation\Dell OMA\InstallPath"
Const OMSA64_REG_INTALL_PATH = "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Dell Computer Corporation\Dell OMA\InstallPath"
'Dell Hardware Instrumentation
Dim StorageStatus
Dim s
Set s = New DellStorage
s.DiscoverStorageControllerHealth()
'Call oAPI.LogScriptEvent("Storage",399,2,s.StorageControllerFlag)
Dim cAPI, oBag
Set cAPI = CreateObject("MOM.ScriptAPI")
Set oBag = cAPI.CreatePropertyBag()
Call oBag.AddValue("Status",StorageStatus)
Call cAPI.Return(oBag)
Set cAPI = Nothing
Set oBag = Nothing
Class DellStorage
Dim arrServerStatus, arrStorageStatus
Dim StorageControllerFlag
Dim RegError, LogMessage, Message, Message1
Dim a, b
Dim strLine, rc, LogMesg
Dim fso, oFile, filespec
Dim oShell, WshShell, objStdOut
Dim strCommand, strRepFilePath, wintemp_path
Dim ParseStartPos, ParseEndPos
Dim Index, StatusIndex, StatusValue
Dim AttrFlag, ValueFlag, PrevStatus, StorageStatusValue
Function DiscoverStorageControllerHealth()
Dim OMSABinPath ' Store Path from Registry key
Dim drive ' Drive letter
Dim version
RegError = 0
' Get OMSA Lib Path
rc = GetOMABinPath(OMSABinPath)
If rc <> 0 Then
' Message = "GetOMSAHealth:GetOMABinPath Error"
' MOMDebugLog Message
WScript.Quit()
Else
' Message = "GetOMSAHealth:OMSABinPath = " & OMSABinPath
' MOMDebugLog Message
End If
' Get Install root path
rc = GetOMInstallRoot(drive, OMSABinPath) ' return the current absolute path or the root path for the OMSA Install
If rc <> 0 Then
' Message = "GetOMSAHealth:GetOMInstallRoot Error"
' MOMDebugLog Message
WScript.Quit()
Else
' Message = "GetOMSAHealth:GetOMInstallRoot = " & drive
' MOMDebugLog Message
End If
If RegError = 1 Then
Message = "Task Fail: OMSA not installed / OMSA Registry Value not found."
MOMDebugLog Message
WScript.Quit()
End If
' Check VBScript engine version
version = CheckVBScriptEngine()
If version = True OR version = False Then
RunCLI drive, OMSABinPath
Else
Message = "Error: VBScript corrupted/absent. Please Re-Install Windows Script 5.6 on the Agent"
MOMDebugLog Message
WScript.Quit()
End If
End Function
'*****************************************************************
'Function RunCLI
'Routine For CLI VB.Run (For Version < 5.6)
'*****************************************************************
Function RunCLI(ByVal targetDrive, ByVal strOMSABinPath)
Dim guid1,guid3
GetTempFolderPath wintemp_path, targetDrive
GetOMReportFileGUID guid1
RunStorageCLI targetDrive, strOMSABinPath
' If StorageStatus <> "" Then
' Message = "RunCLI: OMSS StorageController Health = " & StorageStatus
' MOMDebugLog Message
' Else
' Message = "RunCLI: Storage Health N/A for ArrayManager and OMSS"
' MOMDebugLog Message
' End If
End Function
'*****************************************************************
'GetOMABinPath
'Routine to read the registry to query the OMA Install Path
'*****************************************************************
Function GetOMABinPath(o_sPath)
Dim strOMAKey
Dim oShell, tmp
Set oShell = CreateObject ("WScript.Shell")
o_sPath = ""
On Error Resume Next
o_sPath = oShell.RegRead(OMSA_REG_INTALL_PATH)
If o_sPath = "" Then
o_sPath = oShell.RegRead(OMSA64_REG_INTALL_PATH)
End If
If o_sPath = "" Then
tmp = DEF_OMSA_BIN_PATH & "\omreport.exe"
If(bFileExists(tmp)) Then
o_sPath = DEF_OMSA_BIN_PATH
Message = "GetOMABinPath - OMSABinPath is empty, Using Default Existing Path" & DEF_OMSA_BIN_PATH
MOMDebugLog Message
Else
RegError = 1
End If
Else
o_sPath = o_sPath & "\bin"
End If
If Err <> 0 Then
GetOMSABinPath = Err.Number
End If
End Function
'*****************************************************************
'GetOMInstallRoot
'Routine to determine the Drive letter where OMSA is installed
'*****************************************************************
Private Function GetOMInstallRoot(ByRef path, ByVal OMSAInstallPath)
On Error Resume Next
Err.Clear
' Return the root drive of the OMInstall Path
path = Left(OMSAInstallPath, 2)
End Function
'*****************************************************************
'bFileExists
'Routine to determine if the OMSA Report file is created
'*****************************************************************
Function bFileExists(filespec1)
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
bFileExists = (fso.FileExists(filespec1))
Set fso = Nothing
End Function
'*****************************************************************
'DelFile
'Routine to delete the OMSA Report file
'*****************************************************************
Function DelFile(ByVal filespec2)
Dim fso, oFile
If bFileExists(filespec2) Then
Set fso = CreateObject("Scripting.FileSystemObject")
fso.DeleteFile filespec2, True
Set fso = Nothing
' Message = "OMREPORT Output File deleted - " & filespec2
' MOMDebugLog Message
End If
If Err <> 0 Then
DelFile = Err.Number
End If
End Function
'**********************************************************
' CheckVBScriptEngine()
' Check VBScript engine version:
'**********************************************************
Function CheckVBScriptEngine()
Dim bIsCompatV, var
Const VBSCRIPT_MIN_VERSION = 5.6
var = ScriptEngineMajorVersion & "." & ScriptEngineMinorVersion
If (CInt(var)) < VBSCRIPT_MIN_VERSION Then
bIsCompatV = False
Else
bIsCompatV = True
End If
If Err <> 0 Then
CheckVBScriptEngine = Err.Number
Else
CheckVBScriptEngine = bIsCompatV
End If
End Function
'*****************************************************************
'Function RunStorageCLI - Called from RunCLI If StorageArrayManagerFlag = 0
'Routine For VB.Run (For Version < 5.6)
'*****************************************************************
Function RunStorageCLI (ByVal Drive2, ByVal OMSABinPath)
Dim guid22
GetTempFolderPath wintemp_path, Drive2
GetOMReportFileGUID guid22
a = 1
b = 0
strRepFilePath = wintemp_path & "\" & OM_REPORT_STORAGE_CONTR & guid22 & ".xml"
strCommand = "cmd /C " & chr(34) & OMSABinPath & "\" & "omreport.exe" & Chr(34) & " storage controller -fmt xml -outc " & strRepFilePath
filespec = strRepFilePath
Set oShell = CreateObject ("WScript.Shell")
rc = oShell.run (strCommand,0,true)
If rc <> 0 Then
' Message = "RunStorageCLI: OShellRun ERROR: " & rc & " for " & strCommand
' MOMDebugLog Message
DelFile(strRepFilePath)
Else
' Message = "RunStorageCLI: Run " & strCommand
' MOMDebugLog Message
' Infinite Loop Until file OM_REPORT_FILE_NAME is created
Do While bFileExists(filespec) <> -1
WScript.Sleep(0)
a = a + 1
b = a Mod WAIT_LOOP
If b = 0 Then
MOMDebugLog "Exit RunCmd. Reason: OMREPORT STORAGE not responding for " & WAIT_LOOP & " loops."
Exit Do
End If
Loop
' Parse XML File
ParseStorageXML filespec
' Clean up the CLI Output : Delete OM_REPORT_FILE_NAME for STORAGE
DelFile(strRepFilePath)
End If ' End of If Condition for rc<>0 for oshell.run(omreport storage controller)
Set strRepFilePath = Nothing
Set strCommand = Nothing
Set oShell = Nothing
Set filespec = Nothing
End Function
'*****************************************************************
' Function ParseStorageXML
' Rollup GlobalStorageHealth from OMSS StorageController XML Output
'*****************************************************************
Function ParseStorageXML(ByVal storagefilepath)
Dim StorageHealth, contr_health, controller_arr, controller_name, contr_name
Dim firmware_ver, driver_ver, firmware_val, driver_val, obj, obj_val
Dim xmlDoc, i, str
If(bFileExists(storagefilepath)) Then
Set xmlDoc = CreateObject("Microsoft.XMLDOM")
If (IsObject(xmlDoc) = True) Then
xmlDoc.async = "false"
xmlDoc.load(storagefilepath)
If (xmlDoc.parseError.errorCode <> 0) Then
Dim myErr
Set myErr = xmlDoc.parseError
Message = "XML Parse Error Reason: " & myErr.reason
MOMDebugLog Message
Message = "XML Parse Error Line: " & myErr.line
MOMDebugLog Message
Message = "XML Parse Error Character: " & myErr.linepos
MOMDebugLog Message
Message = "XML Parse Error Text: " & myErr.srcText
MOMDebugLog Message
DelFile(storagefilepath)
Exit Function
End If
Set controller_arr = xmlDoc.getElementsByTagName("TreeStatus")
Set obj = xmlDoc.getElementsByTagName("ObjID")
contr_health = 0
For i = 0 To (controller_arr.length - 1)
contr_health = controller_arr.Item(i).nodeTypedValue
obj_val = obj.Item(i).nodeTypedValue
If StrComp(prmDevice,obj_val,1)=0 Then
If contr_health = 2 Then
StorageStatus = "OK"
ElseIf contr_health = 3 Then
StorageStatus = "Warning"
ElseIf contr_health = 4 Then
StorageStatus = "Error"
End If
End If
StorageControllerFlag = 1
Next
' If contr_health <> 0 Then
' Message = "GlobalStorageHealth = " & StorageHealth & " - " & StorageStatus
' MOMDebugLog Message
' End If
Else
Message = "Error: DOM object not created using CreateObject - Microsoft.XMLDOM"
MOMDebugLog Message
End If
Else
Message = "Storage CLI XML Output File does not exist - " & storagefilepath
MOMDebugLog Message
End If
End Function
'*****************************************************************
' Function MOMDebugLog
' Add LogMessage Header - ScriptName and Time and Logging it.
'*****************************************************************
Function MOMDebugLog (ByVal strMessage)
LogMessage = "(" & SCRIPT_NAME & ")" & "-" & "[" & Now() & "] --- "
LogMessage = LogMessage & strMessage
End Function
'*****************************************************************
'GetTempFolderPath
'Routine to Get Win Temp Folder path
'*****************************************************************
Function GetTempFolderPath(ByRef WinTempFolder, ByVal drive_letter)
Dim FldrExistFlag, fso
FldrExistFlag = False
dim wshShell : Set wshShell = Createobject("WScript.Shell")
dim wshSysEnv : Set wshSysEnv = wshShell.Environment
dim strSysTempFolder : strSysTempFolder = wshSysEnv("TEMP")
dim wshPrcEnv : Set wshPrcEnv = wshShell.Environment("Process")
strSysTempFolder = Replace(strSysTempFolder, "%SystemRoot%", wshPrcEnv("SYSTEMROOT"), 1, -1, vbTextCompare)
WinTempFolder = strSysTempFolder
Set fso = CreateObject("Scripting.FileSystemObject")
If (fso.FolderExists(WinTempFolder)) Then
FldrExistFlag = True
Else
FldrExistFlag = False
End If
If WinTempFolder = "" OR FldrExistFlag = False Then
WinTempFolder = drive_letter
End If
' Message = "Current CLI output will be stored in Folder - " & WinTempFolder
' MOMDebugLog Message
Set wshShell = Nothing
Set wshSysEnv = Nothing
Set strSysTempFolder = Nothing
Set wshPrcEnv = Nothing
If Err <> 0 Then
GetTempFolderPath = Err.Number
End If
End Function
'*****************************************************************
'GetOMReportFileGUID
'Routine to generate unique GUIDs for OMREPORT FILE
'*****************************************************************
Function GetOMReportFileGUID(ByRef o_guid)
Dim TypeLib, NewGUID
Set TypeLib = CreateObject("Scriptlet.TypeLib")
NewGUID = TypeLib.Guid
o_guid = (left(NewGUID, len(NewGUID)-2))
Set TypeLib = Nothing
End Function
End Class
300Property[@Name='Status']EqualErrorProperty[@Name='Status']EqualWarningProperty[@Name='Status']EqualOKAvailabilityHealthErrortrueNormalError$Target/Host/Host/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$dcstor32AvailabilityHealthErrortrueNormalError$Target/Host/Host/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$dcevt32AvailabilityHealthErrortrueNormalError$Target/Host/Host/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$Server AdministratorAvailabilityHealthErrortrueNormalError$Target/Host/Host/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$omsadCustom3600ChassisFansUnitUnitMonitor.vbs$MPElement$ $Target/Id$ $Config/Computer$ $Target/Property[Type="Dell.Connections.ChassisFansUnit"]/DeviceID$
'**********************************************************************************
' Script Name - ChassisFansUnitUnitMonitor
' Author: Vignesh Pandian
'
' Description:
' Determine Unit Monitor health for Chassis fans
'
' (c) Copyright Dell Inc. 2007 - All rights reserved
'**********************************************************************************
Option Explicit
On Error Resume Next
Dim oArgs
Set oArgs = WScript.Arguments
if oArgs.Count < 4 Then
Wscript.Quit -1
End If
Dim strComputer, objDellConnection, LogMessage, sQuery, colItems, objItemFan, FanStatus, TargetComputer, prmDeviceID
TargetComputer = oArgs(2)
strComputer = "."
prmDeviceID = oArgs(3)
set objDellConnection = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2\Dell")
If Err.Number <> 0 Then
LogMessage = "WMI Cimv2Dell Error Number : " & Err.Number & ". Description :" & Err.Description
Err.Clear
Else
If IsEmpty(objDellConnection) Then
LogMessage = "Unable to open WMI Namespace root-cimv2-dell. Check to see if the WMI service is enabled and running, and Install/Re-Install ServerAdministrator to ensure this WMI namespace exists. " & Err
Else
sQuery = "Select * from CIM_CoolingDevice WHERE DeviceID = '" & prmDeviceID & "'"
Set colItems = objDellConnection.ExecQuery(sQuery)
If Err.Number <> 0 Then
LogMessage = sQuery & " Error Number:" & Err.Number & "Description:" & Err.Description
If Err.Number = -2147023169 Then
LogMessage = "RPC Failure occurred for namespace root-cimv2-dell"
End If
Err.Clear
End If
If colItems is Nothing Then
LogMessage = "Unable to retrieve CIM_CoolingDevice object"
Else
LogMessage = "CIM_CoolingDevice object retrieved"
For Each objItemFan in colItems
If Err.Number <> 0 Then
If Err.Number = -2147023169 Then
LogMessage = "RPC Failure occurred for cimv2\dell - bmc info : " & Err.Number
ElseIf Err.Number = -2147217389 Then
LogMessage = "If PWS present, Please Install/Re-Install ServerAdministrator on Dell Server : " & Err.Number
Else
LogMessage = "Object RetrievalLoop Error Number:" & Err.Number & "Description:" & Err.Description
End If
Err.Clear
End If
If Not objItemFan is Nothing Then
FanStatus = objItemFan.Status
End If
Next
End If 'colItems is nothing
Set colItems = Nothing
End If 'dellconnection is noting
On Error GoTo 0
End If
If FanStatus = "Stressed" OR FanStatus = "Degraded" Then
FanStatus = "Warning"
ElseIf FanStatus = "Non-recover" Then
FanStatus = "Error"
End If
Dim oAPI, oBag
Set oAPI = CreateObject("MOM.ScriptAPI")
Set oBag = oAPI.CreatePropertyBag()
Call oBag.AddValue("Status",FanStatus)
Call oAPI.Return(oBag)
300Property[@Name='Status']EqualErrorProperty[@Name='Status']EqualWarningProperty[@Name='Status']EqualOKAvailabilityHealth$Target/Host/Host/Host/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberGreaterEqual1100EventDisplayNumberLessEqual1105PublisherNameEqualServer AdministratorChassisFansUnitUnitMonitorEventTrigger1.vbs$MPElement$ $Target/Id$ $Config/Computer$ $Target/Property[Type="Dell.Connections.ChassisFansUnit"]/DeviceID$
'**********************************************************************************
' Script Name - ChassisFansUnitUnitMonitor
' Author: Vignesh Pandian
'
' Description:
' Determine Unit Monitor health for Chassis fans
'
' (c) Copyright Dell Inc. 2007 - All rights reserved
'**********************************************************************************
Option Explicit
On Error Resume Next
Dim oArgs
Set oArgs = WScript.Arguments
if oArgs.Count < 4 Then
Wscript.Quit -1
End If
Dim strComputer, objDellConnection, LogMessage, sQuery, colItems, objItemFan, FanStatus, TargetComputer, prmDeviceID
TargetComputer = oArgs(2)
strComputer = "."
prmDeviceID = oArgs(3)
set objDellConnection = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2\Dell")
If Err.Number <> 0 Then
LogMessage = "WMI Cimv2Dell Error Number : " & Err.Number & ". Description :" & Err.Description
Err.Clear
Else
If IsEmpty(objDellConnection) Then
LogMessage = "Unable to open WMI Namespace root-cimv2-dell. Check to see if the WMI service is enabled and running, and Install/Re-Install ServerAdministrator to ensure this WMI namespace exists. " & Err
Else
sQuery = "Select * from CIM_CoolingDevice WHERE DeviceID = '" & prmDeviceID & "'"
Set colItems = objDellConnection.ExecQuery(sQuery)
If Err.Number <> 0 Then
LogMessage = sQuery & " Error Number:" & Err.Number & "Description:" & Err.Description
If Err.Number = -2147023169 Then
LogMessage = "RPC Failure occurred for namespace root-cimv2-dell"
End If
Err.Clear
End If
If colItems is Nothing Then
LogMessage = "Unable to retrieve CIM_CoolingDevice object"
Else
LogMessage = "CIM_CoolingDevice object retrieved"
For Each objItemFan in colItems
If Err.Number <> 0 Then
If Err.Number = -2147023169 Then
LogMessage = "RPC Failure occurred for cimv2\dell - bmc info : " & Err.Number
ElseIf Err.Number = -2147217389 Then
LogMessage = "If PWS present, Please Install/Re-Install ServerAdministrator on Dell Server : " & Err.Number
Else
LogMessage = "Object RetrievalLoop Error Number:" & Err.Number & "Description:" & Err.Description
End If
Err.Clear
End If
If Not objItemFan is Nothing Then
FanStatus = objItemFan.Status
End If
Next
End If 'colItems is nothing
Set colItems = Nothing
End If 'dellconnection is noting
On Error GoTo 0
End If
If FanStatus = "Stressed" OR FanStatus = "Degraded" Then
FanStatus = "Warning"
ElseIf FanStatus = "Non-recover" Then
FanStatus = "Error"
End If
Dim oAPI, oBag
Set oAPI = CreateObject("MOM.ScriptAPI")
Set oBag = oAPI.CreatePropertyBag()
Call oBag.AddValue("Status",FanStatus)
Call oAPI.Return(oBag)
300Property[@Name='Status']EqualOKProperty[@Name='Status']EqualWarningProperty[@Name='Status']EqualCriticalAvailabilityHealth$Target/Host/Host/Host/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberGreaterEqual1450EventDisplayNumberLessEqual1455PublisherNameEqualServer AdministratorChassisFansUnitUnitMonitorEventTrigger2.vbs$MPElement$ $Target/Id$ $Config/Computer$ $Target/Property[Type="Dell.Connections.ChassisFansUnit"]/DeviceID$
'**********************************************************************************
' Script Name - ChassisFansUnitUnitMonitor
' Author: Vignesh Pandian
'
' Description:
' Determine Unit Monitor health for Chassis fans
'
' (c) Copyright Dell Inc. 2007 - All rights reserved
'**********************************************************************************
Option Explicit
On Error Resume Next
Dim oArgs
Set oArgs = WScript.Arguments
if oArgs.Count < 4 Then
Wscript.Quit -1
End If
Dim strComputer, objDellConnection, LogMessage, sQuery, colItems, objItemFan, FanStatus, TargetComputer, prmDeviceID
TargetComputer = oArgs(2)
strComputer = "."
prmDeviceID = oArgs(3)
set objDellConnection = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2\Dell")
If Err.Number <> 0 Then
LogMessage = "WMI Cimv2Dell Error Number : " & Err.Number & ". Description :" & Err.Description
Err.Clear
Else
If IsEmpty(objDellConnection) Then
LogMessage = "Unable to open WMI Namespace root-cimv2-dell. Check to see if the WMI service is enabled and running, and Install/Re-Install ServerAdministrator to ensure this WMI namespace exists. " & Err
Else
sQuery = "Select * from CIM_CoolingDevice WHERE DeviceID = '" & prmDeviceID & "'"
Set colItems = objDellConnection.ExecQuery(sQuery)
If Err.Number <> 0 Then
LogMessage = sQuery & " Error Number:" & Err.Number & "Description:" & Err.Description
If Err.Number = -2147023169 Then
LogMessage = "RPC Failure occurred for namespace root-cimv2-dell"
End If
Err.Clear
End If
If colItems is Nothing Then
LogMessage = "Unable to retrieve CIM_CoolingDevice object"
Else
LogMessage = "CIM_CoolingDevice object retrieved"
For Each objItemFan in colItems
If Err.Number <> 0 Then
If Err.Number = -2147023169 Then
LogMessage = "RPC Failure occurred for cimv2\dell - bmc info : " & Err.Number
ElseIf Err.Number = -2147217389 Then
LogMessage = "If PWS present, Please Install/Re-Install ServerAdministrator on Dell Server : " & Err.Number
Else
LogMessage = "Object RetrievalLoop Error Number:" & Err.Number & "Description:" & Err.Description
End If
Err.Clear
End If
If Not objItemFan is Nothing Then
FanStatus = objItemFan.Status
End If
Next
End If 'colItems is nothing
Set colItems = Nothing
End If 'dellconnection is noting
On Error GoTo 0
End If
If FanStatus = "Stressed" OR FanStatus = "Degraded" Then
FanStatus = "Warning"
ElseIf FanStatus = "Non-recover" Then
FanStatus = "Error"
End If
Dim oAPI, oBag
Set oAPI = CreateObject("MOM.ScriptAPI")
Set oBag = oAPI.CreatePropertyBag()
Call oBag.AddValue("Status",FanStatus)
Call oAPI.Return(oBag)
300Property[@Name='Status']EqualOKProperty[@Name='Status']EqualWarningProperty[@Name='Status']EqualCriticalCustom3600ChassisPowerSupplyUnit.vbs$MPElement$ $Target/Id$ $Config/Computer$ $Target/Property[Type="Dell.Connections.ChassisPowerSuppliesUnit"]/DeviceID$
'**********************************************************************************
' Script Name - ChassisPowerSupplyUnit
' Author: Vignesh Pandian
'
' Description:
' Determine Unit Monitor health for Chassis PowerSupplies
'
' (c) Copyright Dell Inc. 2007 - All rights reserved
'**********************************************************************************
Option Explicit
On Error Resume Next
Dim oArgs
Set oArgs = WScript.Arguments
if oArgs.Count < 4 Then
Wscript.Quit -1
End If
Dim strComputer, objDellConnection, LogMessage, sQuery, colItems, objItemPower, PowerStatus, TargetComputer, PowerValue, prmDeviceID, i
Dim bAPI
Set bAPI = CreateObject("MOM.ScriptAPI")
TargetComputer = oArgs(2)
prmDeviceID = ""
For i=3 to (oArgs.Count-1)
prmDeviceID = prmDeviceID & " " & oArgs(i)
Next
strComputer = "."
PowerValue = -1
set objDellConnection = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2\Dell")
If Err.Number <> 0 Then
LogMessage = "WMI Cimv2Dell Error Number : " & Err.Number & ". Description :" & Err.Description
Err.Clear
Else
If IsEmpty(objDellConnection) Then
LogMessage = "Unable to open WMI Namespace root-cimv2-dell. Check to see if the WMI service is enabled and running, and Install/Re-Install ServerAdministrator to ensure this WMI namespace exists. " & Err
Else
sQuery = "Select * from CIM_PowerSupply"
Set colItems = objDellConnection.ExecQuery(sQuery)
If Err.Number <> 0 Then
LogMessage = sQuery & " Error Number:" & Err.Number & "Description:" & Err.Description
If Err.Number = -2147023169 Then
LogMessage = "RPC Failure occurred for namespace root-cimv2-dell"
End If
Err.Clear
End If
If colItems is Nothing Then
LogMessage = "Unable to retrieve CIM_PowerSupply object"
Else
LogMessage = "CIM_PowerSupply object retrieved"
For Each objItemPower in colItems
If Err.Number <> 0 Then
If Err.Number = -2147023169 Then
LogMessage = "RPC Failure occurred for cimv2\dell - bmc info : " & Err.Number
ElseIf Err.Number = -2147217389 Then
LogMessage = "If Power present, Please Install/Re-Install ServerAdministrator on Dell Server : " & fqdn2 & Err.Number
Else
LogMessage = "Object RetrievalLoop Error Number:" & Err.Number & "Description:" & Err.Description
End If
Err.Clear
End If
If Not (objItemPower is Nothing) Then
If (StrComp(Trim(objItemPower.DeviceID),Trim(prmDeviceID),1)=0) Then
PowerStatus = objItemPower.Status
End If
End If
Next
End If 'colItems is nothing
Set colItems = Nothing
End If 'dellconnection is noting
On Error GoTo 0
End If
Set bAPI = Nothing
If PowerStatus = "Stressed" OR PowerStatus = "Degraded" Then
PowerStatus = "Warning"
ElseIf PowerStatus = "Non-recover" Then
PowerStatus = "Error"
End If
Dim oAPI, oBag
Set oAPI = CreateObject("MOM.ScriptAPI")
Set oBag = oAPI.CreatePropertyBag()
Call oBag.AddValue("Status",PowerStatus)
Call oAPI.Return(oBag)
Set oAPI = Nothing
300Property[@Name='Status']EqualErrorProperty[@Name='Status']EqualWarningProperty[@Name='Status']EqualOKAvailabilityHealth$Target/Host/Host/Host/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberGreaterEqual1300EventDisplayNumberLessEqual1306PublisherNameEqualServer AdministratorChassisPowerSupplyUnitEventTrigger.vbs$MPElement$ $Target/Id$ $Config/Computer$ $Target/Property[Type="Dell.Connections.ChassisPowerSuppliesUnit"]/DeviceID$
'**********************************************************************************
' Script Name - ChassisPowerSupplyUnit
' Author: Vignesh Pandian
'
' Description:
' Determine Unit Monitor health for Chassis PowerSupplies
'
' (c) Copyright Dell Inc. 2007 - All rights reserved
'**********************************************************************************
Option Explicit
On Error Resume Next
Dim oArgs
Set oArgs = WScript.Arguments
if oArgs.Count < 4 Then
Wscript.Quit -1
End If
Dim strComputer, objDellConnection, LogMessage, sQuery, colItems, objItemPower, PowerStatus, TargetComputer, PowerValue, prmDeviceID, i
Dim bAPI
Set bAPI = CreateObject("MOM.ScriptAPI")
TargetComputer = oArgs(2)
prmDeviceID = ""
For i=3 to (oArgs.Count-1)
prmDeviceID = prmDeviceID & " " & oArgs(i)
Next
strComputer = "."
PowerValue = -1
set objDellConnection = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2\Dell")
If Err.Number <> 0 Then
LogMessage = "WMI Cimv2Dell Error Number : " & Err.Number & ". Description :" & Err.Description
Err.Clear
Else
If IsEmpty(objDellConnection) Then
LogMessage = "Unable to open WMI Namespace root-cimv2-dell. Check to see if the WMI service is enabled and running, and Install/Re-Install ServerAdministrator to ensure this WMI namespace exists. " & Err
Else
sQuery = "Select * from CIM_PowerSupply"
Set colItems = objDellConnection.ExecQuery(sQuery)
If Err.Number <> 0 Then
LogMessage = sQuery & " Error Number:" & Err.Number & "Description:" & Err.Description
If Err.Number = -2147023169 Then
LogMessage = "RPC Failure occurred for namespace root-cimv2-dell"
End If
Err.Clear
End If
If colItems is Nothing Then
LogMessage = "Unable to retrieve CIM_PowerSupply object"
Else
LogMessage = "CIM_PowerSupply object retrieved"
For Each objItemPower in colItems
If Err.Number <> 0 Then
If Err.Number = -2147023169 Then
LogMessage = "RPC Failure occurred for cimv2\dell - bmc info : " & Err.Number
ElseIf Err.Number = -2147217389 Then
LogMessage = "If Power present, Please Install/Re-Install ServerAdministrator on Dell Server : " & fqdn2 & Err.Number
Else
LogMessage = "Object RetrievalLoop Error Number:" & Err.Number & "Description:" & Err.Description
End If
Err.Clear
End If
If Not (objItemPower is Nothing) Then
If (StrComp(Trim(objItemPower.DeviceID),Trim(prmDeviceID),1)=0) Then
PowerStatus = objItemPower.Status
End If
End If
Next
End If 'colItems is nothing
Set colItems = Nothing
End If 'dellconnection is noting
On Error GoTo 0
End If
Set bAPI = Nothing
If PowerStatus = "Stressed" OR PowerStatus = "Degraded" Then
PowerStatus = "Warning"
ElseIf PowerStatus = "Non-recover" Then
PowerStatus = "Error"
End If
Dim oAPI, oBag
Set oAPI = CreateObject("MOM.ScriptAPI")
Set oBag = oAPI.CreatePropertyBag()
Call oBag.AddValue("Status",PowerStatus)
Call oAPI.Return(oBag)
Set oAPI = Nothing
300Property[@Name='Status']EqualOKProperty[@Name='Status']EqualWarningProperty[@Name='Status']EqualCriticalCustom3600DellServerFansUnitUnitMonitor.vbs$MPElement$ $Target/Id$ $Config/Computer$ $Target/Property[Type="Dell.Connections.ServerFansUnit"]/DeviceID$
'**********************************************************************************
' Script Name - DellServerFansUnitUnitMonitor
' Author: Vignesh Pandian
'
' Description:
' Determine Unit Monitor health for ServerFans
'
' (c) Copyright Dell Inc. 2007 - All rights reserved
'**********************************************************************************
Option Explicit
On Error Resume Next
Dim oArgs
Set oArgs = WScript.Arguments
if oArgs.Count < 4 Then
Wscript.Quit -1
End If
Dim strComputer, objDellConnection, LogMessage, sQuery, colItems, objItemFan, FanStatus, TargetComputer, prmDeviceID
TargetComputer = oArgs(2)
strComputer = "."
prmDeviceID = oArgs(3)
set objDellConnection = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2\Dell")
If Err.Number <> 0 Then
LogMessage = "WMI Cimv2Dell Error Number : " & Err.Number & ". Description :" & Err.Description
Err.Clear
Else
If IsEmpty(objDellConnection) Then
LogMessage = "Unable to open WMI Namespace root-cimv2-dell. Check to see if the WMI service is enabled and running, and Install/Re-Install ServerAdministrator to ensure this WMI namespace exists. " & Err
Else
sQuery = "Select * from CIM_CoolingDevice WHERE DeviceID = '" & prmDeviceID & "'"
Set colItems = objDellConnection.ExecQuery(sQuery)
If Err.Number <> 0 Then
LogMessage = sQuery & " Error Number:" & Err.Number & "Description:" & Err.Description
If Err.Number = -2147023169 Then
LogMessage = "RPC Failure occurred for namespace root-cimv2-dell"
End If
Err.Clear
End If
If colItems is Nothing Then
LogMessage = "Unable to retrieve CIM_CoolingDevice object"
Else
LogMessage = "CIM_CoolingDevice object retrieved"
For Each objItemFan in colItems
If Err.Number <> 0 Then
If Err.Number = -2147023169 Then
LogMessage = "RPC Failure occurred for cimv2\dell - bmc info : " & Err.Number
ElseIf Err.Number = -2147217389 Then
LogMessage = "If PWS present, Please Install/Re-Install ServerAdministrator on Dell Server : " & Err.Number
Else
LogMessage = "Object RetrievalLoop Error Number:" & Err.Number & "Description:" & Err.Description
End If
Err.Clear
End If
If Not objItemFan is Nothing Then
FanStatus = objItemFan.Status
End If
Next
End If 'colItems is nothing
Set colItems = Nothing
End If 'dellconnection is noting
On Error GoTo 0
End If
If FanStatus = "Stressed" OR FanStatus = "Degraded" Then
FanStatus = "Warning"
ElseIf FanStatus = "Non-recover" Then
FanStatus = "Error"
End If
Dim oAPI, oBag
Set oAPI = CreateObject("MOM.ScriptAPI")
Set oBag = oAPI.CreatePropertyBag()
Call oBag.AddValue("Status",FanStatus)
Call oAPI.Return(oBag)
300Property[@Name='Status']EqualErrorProperty[@Name='Status']EqualWarningProperty[@Name='Status']EqualOKAvailabilityHealth$Target/Host/Host/Host/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberGreaterEqual1100EventDisplayNumberLessEqual1105PublisherNameEqualServer AdministratorDellServerFansUnitUnitMonitorEventTrigger1.vbs$MPElement$ $Target/Id$ $Config/Computer$ $Target/Property[Type="Dell.Connections.ServerFansUnit"]/DeviceID$
'**********************************************************************************
' Script Name - DellServerFansUnitUnitMonitor
' Author: Vignesh Pandian
'
' Description:
' Determine Unit Monitor health for ServerFans
'
' (c) Copyright Dell Inc. 2007 - All rights reserved
'**********************************************************************************
Option Explicit
On Error Resume Next
Dim oArgs
Set oArgs = WScript.Arguments
if oArgs.Count < 4 Then
Wscript.Quit -1
End If
Dim strComputer, objDellConnection, LogMessage, sQuery, colItems, objItemFan, FanStatus, TargetComputer, prmDeviceID
TargetComputer = oArgs(2)
strComputer = "."
prmDeviceID = oArgs(3)
set objDellConnection = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2\Dell")
If Err.Number <> 0 Then
LogMessage = "WMI Cimv2Dell Error Number : " & Err.Number & ". Description :" & Err.Description
Err.Clear
Else
If IsEmpty(objDellConnection) Then
LogMessage = "Unable to open WMI Namespace root-cimv2-dell. Check to see if the WMI service is enabled and running, and Install/Re-Install ServerAdministrator to ensure this WMI namespace exists. " & Err
Else
sQuery = "Select * from CIM_CoolingDevice WHERE DeviceID = '" & prmDeviceID & "'"
Set colItems = objDellConnection.ExecQuery(sQuery)
If Err.Number <> 0 Then
LogMessage = sQuery & " Error Number:" & Err.Number & "Description:" & Err.Description
If Err.Number = -2147023169 Then
LogMessage = "RPC Failure occurred for namespace root-cimv2-dell"
End If
Err.Clear
End If
If colItems is Nothing Then
LogMessage = "Unable to retrieve CIM_CoolingDevice object"
Else
LogMessage = "CIM_CoolingDevice object retrieved"
For Each objItemFan in colItems
If Err.Number <> 0 Then
If Err.Number = -2147023169 Then
LogMessage = "RPC Failure occurred for cimv2\dell - bmc info : " & Err.Number
ElseIf Err.Number = -2147217389 Then
LogMessage = "If PWS present, Please Install/Re-Install ServerAdministrator on Dell Server : " & Err.Number
Else
LogMessage = "Object RetrievalLoop Error Number:" & Err.Number & "Description:" & Err.Description
End If
Err.Clear
End If
If Not objItemFan is Nothing Then
FanStatus = objItemFan.Status
End If
Next
End If 'colItems is nothing
Set colItems = Nothing
End If 'dellconnection is noting
On Error GoTo 0
End If
If FanStatus = "Stressed" OR FanStatus = "Degraded" Then
FanStatus = "Warning"
ElseIf FanStatus = "Non-recover" Then
FanStatus = "Error"
End If
Dim oAPI, oBag
Set oAPI = CreateObject("MOM.ScriptAPI")
Set oBag = oAPI.CreatePropertyBag()
Call oBag.AddValue("Status",FanStatus)
Call oAPI.Return(oBag)
300Property[@Name='Status']EqualOKProperty[@Name='Status']EqualWarningProperty[@Name='Status']EqualCriticalAvailabilityHealth$Target/Host/Host/Host/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberGreaterEqual1450EventDisplayNumberLessEqual1455PublisherNameEqualServer AdministratorDellServerFansUnitUnitMonitorEventTrigger1.vbs$MPElement$ $Target/Id$ $Config/Computer$ $Target/Property[Type="Dell.Connections.ServerFansUnit"]/DeviceID$
'**********************************************************************************
' Script Name - DellServerFansUnitUnitMonitor
' Author: Vignesh Pandian
'
' Description:
' Determine Unit Monitor health for ServerFans
'
' (c) Copyright Dell Inc. 2007 - All rights reserved
'**********************************************************************************
Option Explicit
On Error Resume Next
Dim oArgs
Set oArgs = WScript.Arguments
if oArgs.Count < 4 Then
Wscript.Quit -1
End If
Dim strComputer, objDellConnection, LogMessage, sQuery, colItems, objItemFan, FanStatus, TargetComputer, prmDeviceID
TargetComputer = oArgs(2)
strComputer = "."
prmDeviceID = oArgs(3)
set objDellConnection = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2\Dell")
If Err.Number <> 0 Then
LogMessage = "WMI Cimv2Dell Error Number : " & Err.Number & ". Description :" & Err.Description
Err.Clear
Else
If IsEmpty(objDellConnection) Then
LogMessage = "Unable to open WMI Namespace root-cimv2-dell. Check to see if the WMI service is enabled and running, and Install/Re-Install ServerAdministrator to ensure this WMI namespace exists. " & Err
Else
sQuery = "Select * from CIM_CoolingDevice WHERE DeviceID = '" & prmDeviceID & "'"
Set colItems = objDellConnection.ExecQuery(sQuery)
If Err.Number <> 0 Then
LogMessage = sQuery & " Error Number:" & Err.Number & "Description:" & Err.Description
If Err.Number = -2147023169 Then
LogMessage = "RPC Failure occurred for namespace root-cimv2-dell"
End If
Err.Clear
End If
If colItems is Nothing Then
LogMessage = "Unable to retrieve CIM_CoolingDevice object"
Else
LogMessage = "CIM_CoolingDevice object retrieved"
For Each objItemFan in colItems
If Err.Number <> 0 Then
If Err.Number = -2147023169 Then
LogMessage = "RPC Failure occurred for cimv2\dell - bmc info : " & Err.Number
ElseIf Err.Number = -2147217389 Then
LogMessage = "If PWS present, Please Install/Re-Install ServerAdministrator on Dell Server : " & Err.Number
Else
LogMessage = "Object RetrievalLoop Error Number:" & Err.Number & "Description:" & Err.Description
End If
Err.Clear
End If
If Not objItemFan is Nothing Then
FanStatus = objItemFan.Status
End If
Next
End If 'colItems is nothing
Set colItems = Nothing
End If 'dellconnection is noting
On Error GoTo 0
End If
If FanStatus = "Stressed" OR FanStatus = "Degraded" Then
FanStatus = "Warning"
ElseIf FanStatus = "Non-recover" Then
FanStatus = "Error"
End If
Dim oAPI, oBag
Set oAPI = CreateObject("MOM.ScriptAPI")
Set oBag = oAPI.CreatePropertyBag()
Call oBag.AddValue("Status",FanStatus)
Call oAPI.Return(oBag)
300Property[@Name='Status']EqualOKProperty[@Name='Status']EqualWarningProperty[@Name='Status']EqualCriticalCustom3600DellServerTempUnitMonitor.vbs$MPElement$ $Target/Id$ $Config/Computer$ $Target/Property[Type="Dell.Connections.ServerNumericSensor"]/DeviceID$
'**********************************************************************************
' Script Name - DellServerTempUnitMonitor
' Author: Vignesh Pandian
'
' Description:
' Determine Unit Monitor health for ServerTemp
'
' (c) Copyright Dell Inc. 2007 - All rights reserved
'**********************************************************************************
Option Explicit
On Error Resume Next
Dim oArgs
Set oArgs = WScript.Arguments
if oArgs.Count < 4 Then
Wscript.Quit -1
End If
Dim strComputer, objDellConnection, LogMessage, sQuery, colItems, objItemTemp, TempStatus, TargetComputer, TempValue, prmDeviceID
Dim bAPI
Set bAPI = CreateObject("MOM.ScriptAPI")
TargetComputer = oArgs(2)
prmDeviceID = oArgs(3)
strComputer = "."
TempValue = -1
set objDellConnection = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2\Dell")
If Err.Number <> 0 Then
LogMessage = "WMI Cimv2Dell Error Number : " & Err.Number & ". Description :" & Err.Description
Err.Clear
Else
If IsEmpty(objDellConnection) Then
LogMessage = "Unable to open WMI Namespace root-cimv2-dell. Check to see if the WMI service is enabled and running, and Install/Re-Install ServerAdministrator to ensure this WMI namespace exists. " & Err
Else
sQuery = "Select * from CIM_TemperatureSensor WHERE DeviceID = '" & prmDeviceID & "'"
Set colItems = objDellConnection.ExecQuery(sQuery)
If Err.Number <> 0 Then
LogMessage = sQuery & " Error Number:" & Err.Number & "Description:" & Err.Description
If Err.Number = -2147023169 Then
LogMessage = "RPC Failure occurred for namespace root-cimv2-dell"
End If
Err.Clear
End If
If colItems is Nothing Then
LogMessage = "Unable to retrieve CIM_TemperatureSensor object"
Else
LogMessage = "CIM_TemperatureSensor object retrieved"
For Each objItemTemp in colItems
If Err.Number <> 0 Then
If Err.Number = -2147023169 Then
LogMessage = "RPC Failure occurred for cimv2\dell - bmc info : " & Err.Number
ElseIf Err.Number = -2147217389 Then
LogMessage = "If Temp present, Please Install/Re-Install ServerAdministrator on Dell Server : " & fqdn2 & Err.Number
Else
LogMessage = "Object RetrievalLoop Error Number:" & Err.Number & "Description:" & Err.Description
End If
Err.Clear
End If
If Not objItemTemp is Nothing Then
TempStatus = objItemTemp.Status
' Call bAPI.LogScriptEvent("Vig2",772,2,"TempStatusLoop=" + TempStatus)
End If
Next
End If 'colItems is nothing
Set colItems = Nothing
End If 'dellconnection is noting
On Error GoTo 0
End If
Set bAPI = Nothing
If TempStatus = "Stressed" OR TempStatus = "Degraded" Then
TempStatus = "Warning"
ElseIf TempStatus = "Non-recover" Then
TempStatus = "Error"
End If
Dim oAPI, oBag
Set oAPI = CreateObject("MOM.ScriptAPI")
Set oBag = oAPI.CreatePropertyBag()
Call oBag.AddValue("Status",TempStatus)
Call oAPI.Return(oBag)
Set oAPI = Nothing
300Property[@Name='Status']EqualErrorProperty[@Name='Status']EqualWarningProperty[@Name='Status']EqualOKAvailabilityHealth$Target/Host/Host/Host/Host/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberGreaterEqual1050EventDisplayNumberLessEqual1055PublisherNameEqualServer AdministratorDellTempUnitHealthEventTrigger.vbs$MPElement$ $Target/Id$ $Config/Computer$ $Target/Property[Type="Dell.Connections.ServerNumericSensor"]/DeviceID$
'**********************************************************************************
' Script Name - DellServerTempUnitMonitor
' Author: Vignesh Pandian
'
' Description:
' Determine Unit Monitor health for ServerTemp
'
' (c) Copyright Dell Inc. 2007 - All rights reserved
'**********************************************************************************
Option Explicit
On Error Resume Next
Dim oArgs
Set oArgs = WScript.Arguments
if oArgs.Count < 4 Then
Wscript.Quit -1
End If
Dim strComputer, objDellConnection, LogMessage, sQuery, colItems, objItemTemp, TempStatus, TargetComputer, TempValue, prmDeviceID
Dim bAPI
Set bAPI = CreateObject("MOM.ScriptAPI")
TargetComputer = oArgs(2)
prmDeviceID = oArgs(3)
strComputer = "."
TempValue = -1
set objDellConnection = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2\Dell")
If Err.Number <> 0 Then
LogMessage = "WMI Cimv2Dell Error Number : " & Err.Number & ". Description :" & Err.Description
Err.Clear
Else
If IsEmpty(objDellConnection) Then
LogMessage = "Unable to open WMI Namespace root-cimv2-dell. Check to see if the WMI service is enabled and running, and Install/Re-Install ServerAdministrator to ensure this WMI namespace exists. " & Err
Else
sQuery = "Select * from CIM_TemperatureSensor WHERE DeviceID = '" & prmDeviceID & "'"
Set colItems = objDellConnection.ExecQuery(sQuery)
If Err.Number <> 0 Then
LogMessage = sQuery & " Error Number:" & Err.Number & "Description:" & Err.Description
If Err.Number = -2147023169 Then
LogMessage = "RPC Failure occurred for namespace root-cimv2-dell"
End If
Err.Clear
End If
If colItems is Nothing Then
LogMessage = "Unable to retrieve CIM_TemperatureSensor object"
Else
LogMessage = "CIM_TemperatureSensor object retrieved"
For Each objItemTemp in colItems
If Err.Number <> 0 Then
If Err.Number = -2147023169 Then
LogMessage = "RPC Failure occurred for cimv2\dell - bmc info : " & Err.Number
ElseIf Err.Number = -2147217389 Then
LogMessage = "If Temp present, Please Install/Re-Install ServerAdministrator on Dell Server : " & fqdn2 & Err.Number
Else
LogMessage = "Object RetrievalLoop Error Number:" & Err.Number & "Description:" & Err.Description
End If
Err.Clear
End If
If Not objItemTemp is Nothing Then
TempStatus = objItemTemp.Status
' Call bAPI.LogScriptEvent("Vig2",772,2,"TempStatusLoop=" + TempStatus)
End If
Next
End If 'colItems is nothing
Set colItems = Nothing
End If 'dellconnection is noting
On Error GoTo 0
End If
'Call bAPI.LogScriptEvent("Vig5",201,2,"TempUnitEventTrigger" + TempStatus + prmDeviceID)
If TempStatus = "Stressed" OR TempStatus = "Degraded" Then
TempStatus = "Warning"
ElseIf TempStatus = "Non-recover" Then
TempStatus = "Error"
End If
Dim oAPI, oBag
Set oAPI = CreateObject("MOM.ScriptAPI")
Set oBag = oAPI.CreatePropertyBag()
Call oBag.AddValue("Status",TempStatus)
Call oAPI.Return(oBag)
Set oAPI = Nothing
Set bAPI = Nothing
300Property[@Name='Status']EqualOKProperty[@Name='Status']EqualWarningProperty[@Name='Status']EqualCriticalCustom3600DellServerNumericVoltUnitMonitor.vbs$MPElement$ $Target/Id$ $Config/Computer$ $Target/Property[Type="Dell.Connections.ServerNumericSensor"]/DeviceID$
'**********************************************************************************
' Script Name - DellServerNumericVoltUnitMonitor
' Author: Vignesh Pandian
'
' Description:
' Determine Unit Monitor health for ServerVolt
'
' (c) Copyright Dell Inc. 2007 - All rights reserved
'**********************************************************************************
Option Explicit
On Error Resume Next
Dim oArgs
Set oArgs = WScript.Arguments
if oArgs.Count < 4 Then
Wscript.Quit -1
End If
Dim strComputer, objDellConnection, LogMessage, sQuery, colItems, objItemVolt, VoltStatus, TargetComputer, VoltValue, prmDeviceID
prmDeviceID = oArgs(3)
TargetComputer = oArgs(2)
strComputer = "."
VoltValue = -1
set objDellConnection = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2\Dell")
If Err.Number <> 0 Then
LogMessage = "WMI Cimv2Dell Error Number : " & Err.Number & ". Description :" & Err.Description
Err.Clear
Else
If IsEmpty(objDellConnection) Then
LogMessage = "Unable to open WMI Namespace root-cimv2-dell. Check to see if the WMI service is enabled and running, and Install/Re-Install ServerAdministrator to ensure this WMI namespace exists. " & Err
Else
sQuery = "Select * from CIM_VoltageSensor WHERE DeviceID = '" & prmDeviceID & "'"
Set colItems = objDellConnection.ExecQuery(sQuery)
If Err.Number <> 0 Then
LogMessage = sQuery & " Error Number:" & Err.Number & "Description:" & Err.Description
If Err.Number = -2147023169 Then
LogMessage = "RPC Failure occurred for namespace root-cimv2-dell"
End If
Err.Clear
End If
If colItems is Nothing Then
LogMessage = "Unable to retrieve CIM_VoltageSensor object"
Else
LogMessage = "CIM_VoltageSensor object retrieved"
For Each objItemVolt in colItems
If Err.Number <> 0 Then
If Err.Number = -2147023169 Then
LogMessage = "RPC Failure occurred for cimv2\dell - bmc info : " & Err.Number
ElseIf Err.Number = -2147217389 Then
LogMessage = "If PWS present, Please Install/Re-Install ServerAdministrator on Dell Server : " & fqdn2 & Err.Number
Else
LogMessage = "Object RetrievalLoop Error Number:" & Err.Number & "Description:" & Err.Description
End If
Err.Clear
End If
If Not objItemVolt is Nothing Then
VoltStatus = objItemVolt.Status
End If
Next
End If 'colItems is nothing
Set colItems = Nothing
End If 'dellconnection is noting
On Error GoTo 0
End If
If VoltStatus = "Stressed" OR VoltStatus = "Degraded" Then
VoltStatus = "Warning"
ElseIf VoltStatus = "Non-recover" Then
VoltStatus = "Error"
End If
Dim oAPI, oBag
Set oAPI = CreateObject("MOM.ScriptAPI")
Set oBag = oAPI.CreatePropertyBag()
Call oBag.AddValue("Status",VoltStatus)
Call oAPI.Return(oBag)
300Property[@Name='Status']EqualErrorProperty[@Name='Status']EqualWarningProperty[@Name='Status']EqualOKCustom3600DellServerDiscreteVoltUnitMonitor.vbs$MPElement$ $Target/Id$ $Config/Computer$ $Target/Property[Type="Dell.Connections.ServerDiscreteSensor"]/DeviceID$
'**********************************************************************************
' Script Name - DellServerNumericVoltUnitMonitor
' Author: Vignesh Pandian
'
' Description:
' Determine Unit Monitor health for ServerVolt
'
' (c) Copyright Dell Inc. 2007 - All rights reserved
'**********************************************************************************
Option Explicit
On Error Resume Next
Dim oArgs
Set oArgs = WScript.Arguments
if oArgs.Count < 4 Then
Wscript.Quit -1
End If
Dim strComputer, objDellConnection, LogMessage, sQuery, colItems, objItemVolt, VoltStatus, TargetComputer, VoltValue, prmDeviceID
prmDeviceID = oArgs(3)
TargetComputer = oArgs(2)
strComputer = "."
VoltValue = -1
set objDellConnection = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2\Dell")
If Err.Number <> 0 Then
LogMessage = "WMI Cimv2Dell Error Number : " & Err.Number & ". Description :" & Err.Description
Err.Clear
Else
If IsEmpty(objDellConnection) Then
LogMessage = "Unable to open WMI Namespace root-cimv2-dell. Check to see if the WMI service is enabled and running, and Install/Re-Install ServerAdministrator to ensure this WMI namespace exists. " & Err
Else
sQuery = "Select * from CIM_DiscreteSensor WHERE DeviceID = '" & prmDeviceID & "'" 'not req - WHERE SensorType = '3'
Set colItems = objDellConnection.ExecQuery(sQuery)
If Err.Number <> 0 Then
LogMessage = sQuery & " Error Number:" & Err.Number & "Description:" & Err.Description
If Err.Number = -2147023169 Then
LogMessage = "RPC Failure occurred for namespace root-cimv2-dell"
End If
Err.Clear
End If
If colItems is Nothing Then
LogMessage = "Unable to retrieve CIM_VoltageSensor object"
Else
LogMessage = "CIM_VoltageSensor object retrieved"
For Each objItemVolt in colItems
If Err.Number <> 0 Then
If Err.Number = -2147023169 Then
LogMessage = "RPC Failure occurred for cimv2\dell - bmc info : " & Err.Number
ElseIf Err.Number = -2147217389 Then
LogMessage = "If PWS present, Please Install/Re-Install ServerAdministrator on Dell Server : " & fqdn2 & Err.Number
Else
LogMessage = "Object RetrievalLoop Error Number:" & Err.Number & "Description:" & Err.Description
End If
Err.Clear
End If
If Not objItemVolt is Nothing Then
VoltStatus = objItemVolt.Status
End If
Next
End If 'colItems is nothing
Set colItems = Nothing
End If 'dellconnection is noting
On Error GoTo 0
End If
If VoltStatus = "Stressed" OR VoltStatus = "Degraded" Then
VoltStatus = "Warning"
ElseIf VoltStatus = "Non-recover" Then
VoltStatus = "Error"
End If
Dim oAPI, oBag
Set oAPI = CreateObject("MOM.ScriptAPI")
Set oBag = oAPI.CreatePropertyBag()
Call oBag.AddValue("Status",VoltStatus)
Call oAPI.Return(oBag)
300Property[@Name='Status']EqualErrorProperty[@Name='Status']EqualWarningProperty[@Name='Status']EqualOKAvailabilityHealth$Target/Host/Host/Host/Host/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberGreaterEqual1150EventDisplayNumberLessEqual1155PublisherNameEqualServer AdministratorDellServerNumericVoltUnitMonitorEventTrigger.vbs$MPElement$ $Target/Id$ $Config/Computer$ $Target/Property[Type="Dell.Connections.ServerNumericSensor"]/DeviceID$
'**********************************************************************************
' Script Name - DellServerNumericVoltUnitMonitor
' Author: Vignesh Pandian
'
' Description:
' Determine Unit Monitor health for ServerVolt
'
' (c) Copyright Dell Inc. 2007 - All rights reserved
'**********************************************************************************
Option Explicit
On Error Resume Next
Dim oArgs
Set oArgs = WScript.Arguments
if oArgs.Count < 4 Then
Wscript.Quit -1
End If
Dim strComputer, objDellConnection, LogMessage, sQuery, colItems, objItemVolt, VoltStatus, TargetComputer, VoltValue, prmDeviceID
prmDeviceID = oArgs(3)
TargetComputer = oArgs(2)
strComputer = "."
VoltValue = -1
set objDellConnection = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2\Dell")
If Err.Number <> 0 Then
LogMessage = "WMI Cimv2Dell Error Number : " & Err.Number & ". Description :" & Err.Description
Err.Clear
Else
If IsEmpty(objDellConnection) Then
LogMessage = "Unable to open WMI Namespace root-cimv2-dell. Check to see if the WMI service is enabled and running, and Install/Re-Install ServerAdministrator to ensure this WMI namespace exists. " & Err
Else
sQuery = "Select * from CIM_VoltageSensor WHERE DeviceID = '" & prmDeviceID & "'"
Set colItems = objDellConnection.ExecQuery(sQuery)
If Err.Number <> 0 Then
LogMessage = sQuery & " Error Number:" & Err.Number & "Description:" & Err.Description
If Err.Number = -2147023169 Then
LogMessage = "RPC Failure occurred for namespace root-cimv2-dell"
End If
Err.Clear
End If
If colItems is Nothing Then
LogMessage = "Unable to retrieve CIM_VoltageSensor object"
Else
LogMessage = "CIM_VoltageSensor object retrieved"
For Each objItemVolt in colItems
If Err.Number <> 0 Then
If Err.Number = -2147023169 Then
LogMessage = "RPC Failure occurred for cimv2\dell - bmc info : " & Err.Number
ElseIf Err.Number = -2147217389 Then
LogMessage = "If PWS present, Please Install/Re-Install ServerAdministrator on Dell Server : " & fqdn2 & Err.Number
Else
LogMessage = "Object RetrievalLoop Error Number:" & Err.Number & "Description:" & Err.Description
End If
Err.Clear
End If
If Not objItemVolt is Nothing Then
VoltStatus = objItemVolt.Status
End If
Next
End If 'colItems is nothing
Set colItems = Nothing
End If 'dellconnection is noting
On Error GoTo 0
End If
If VoltStatus = "Stressed" OR VoltStatus = "Degraded" Then
VoltStatus = "Warning"
ElseIf VoltStatus = "Non-recover" Then
VoltStatus = "Error"
End If
Dim oAPI, oBag
Set oAPI = CreateObject("MOM.ScriptAPI")
Set oBag = oAPI.CreatePropertyBag()
Call oBag.AddValue("Status",VoltStatus)
Call oAPI.Return(oBag)
300Property[@Name='Status']EqualOKProperty[@Name='Status']EqualWarningProperty[@Name='Status']EqualCriticalAvailabilityHealth$Target/Host/Host/Host/Host/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberGreaterEqual1150EventDisplayNumberLessEqual1155PublisherNameEqualServer AdministratorDellServerDiscreteVoltUnitMonitorEventTrigger.vbs$MPElement$ $Target/Id$ $Config/Computer$ $Target/Property[Type="Dell.Connections.ServerDiscreteSensor"]/DeviceID$
'**********************************************************************************
' Script Name - DellServerNumericVoltUnitMonitor
' Author: Vignesh Pandian
'
' Description:
' Determine Unit Monitor health for ServerVolt
'
' (c) Copyright Dell Inc. 2007 - All rights reserved
'**********************************************************************************
Option Explicit
On Error Resume Next
Dim oArgs
Set oArgs = WScript.Arguments
if oArgs.Count < 4 Then
Wscript.Quit -1
End If
Dim strComputer, objDellConnection, LogMessage, sQuery, colItems, objItemVolt, VoltStatus, TargetComputer, VoltValue, prmDeviceID
prmDeviceID = oArgs(3)
TargetComputer = oArgs(2)
strComputer = "."
VoltValue = -1
set objDellConnection = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2\Dell")
If Err.Number <> 0 Then
LogMessage = "WMI Cimv2Dell Error Number : " & Err.Number & ". Description :" & Err.Description
Err.Clear
Else
If IsEmpty(objDellConnection) Then
LogMessage = "Unable to open WMI Namespace root-cimv2-dell. Check to see if the WMI service is enabled and running, and Install/Re-Install ServerAdministrator to ensure this WMI namespace exists. " & Err
Else
sQuery = "Select * from CIM_DiscreteSensor WHERE DeviceID = '" & prmDeviceID & "'" 'not req - WHERE SensorType = '3'
Set colItems = objDellConnection.ExecQuery(sQuery)
If Err.Number <> 0 Then
LogMessage = sQuery & " Error Number:" & Err.Number & "Description:" & Err.Description
If Err.Number = -2147023169 Then
LogMessage = "RPC Failure occurred for namespace root-cimv2-dell"
End If
Err.Clear
End If
If colItems is Nothing Then
LogMessage = "Unable to retrieve CIM_VoltageSensor object"
Else
LogMessage = "CIM_VoltageSensor object retrieved"
For Each objItemVolt in colItems
If Err.Number <> 0 Then
If Err.Number = -2147023169 Then
LogMessage = "RPC Failure occurred for cimv2\dell - bmc info : " & Err.Number
ElseIf Err.Number = -2147217389 Then
LogMessage = "If PWS present, Please Install/Re-Install ServerAdministrator on Dell Server : " & fqdn2 & Err.Number
Else
LogMessage = "Object RetrievalLoop Error Number:" & Err.Number & "Description:" & Err.Description
End If
Err.Clear
End If
If Not objItemVolt is Nothing Then
VoltStatus = objItemVolt.Status
End If
Next
End If 'colItems is nothing
Set colItems = Nothing
End If 'dellconnection is noting
On Error GoTo 0
End If
If VoltStatus = "Stressed" OR VoltStatus = "Degraded" Then
VoltStatus = "Warning"
ElseIf VoltStatus = "Non-recover" Then
VoltStatus = "Error"
End If
Dim oAPI, oBag
Set oAPI = CreateObject("MOM.ScriptAPI")
Set oBag = oAPI.CreatePropertyBag()
Call oBag.AddValue("Status",VoltStatus)
Call oAPI.Return(oBag)
300Property[@Name='Status']EqualOKProperty[@Name='Status']EqualWarningProperty[@Name='Status']EqualCriticalCustom3600DellServerCurrentsNumericUnitMonitor.vbs$MPElement$ $Target/Id$ $Config/Computer$ $Target/Property[Type="Dell.Connections.ServerNumericSensor"]/DeviceID$
'**********************************************************************************
' Script Name - DellServerCurrentsNumericUnitMonitor
' Author: Vignesh Pandian
'
' Description:
' Determine Unit Monitor health for ServerCurrents
'
' (c) Copyright Dell Inc. 2007 - All rights reserved
'**********************************************************************************
Option Explicit
On Error Resume Next
Dim oArgs
Set oArgs = WScript.Arguments
if oArgs.Count < 4 Then
Wscript.Quit -1
End If
Dim strComputer, objDellConnection, LogMessage, sQuery, colItems, objItemCurrent, CurrentStatus, TargetComputer, prmDeviceID
prmDeviceID = oArgs(3)
TargetComputer = oArgs(2)
strComputer = "."
set objDellConnection = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2\Dell")
If Err.Number <> 0 Then
LogMessage = "WMI Cimv2Dell Error Number : " & Err.Number & ". Description :" & Err.Description
Err.Clear
Else
If IsEmpty(objDellConnection) Then
LogMessage = "Unable to open WMI Namespace root-cimv2-dell. Check to see if the WMI service is enabled and running, and Install/Re-Install ServerAdministrator to ensure this WMI namespace exists. " & Err
Else
sQuery = "Select * from CIM_CurrentSensor WHERE DeviceID = '" & prmDeviceID & "'"
Set colItems = objDellConnection.ExecQuery(sQuery)
If Err.Number <> 0 Then
LogMessage = sQuery & " Error Number:" & Err.Number & "Description:" & Err.Description
If Err.Number = -2147023169 Then
LogMessage = "RPC Failure occurred for namespace root-cimv2-dell"
End If
Err.Clear
End If
If colItems is Nothing Then
LogMessage = "Unable to retrieve CIM_CurrentSensor object"
Else
LogMessage = "CIM_CurrentSensor object retrieved"
For Each objItemCurrent in colItems
If Err.Number <> 0 Then
If Err.Number = -2147023169 Then
LogMessage = "RPC Failure occurred for cimv2\dell - bmc info : " & Err.Number
ElseIf Err.Number = -2147217389 Then
LogMessage = "If PWS present, Please Install/Re-Install ServerAdministrator on Dell Server : " & fqdn2 & Err.Number
Else
LogMessage = "Object RetrievalLoop Error Number:" & Err.Number & "Description:" & Err.Description
End If
Err.Clear
End If
If Not objItemCurrent is Nothing Then
CurrentStatus = objItemCurrent.Status
End If
Next
End If 'colItems is nothing
Set colItems = Nothing
End If 'dellconnection is noting
On Error GoTo 0
End If
If CurrentStatus = "Stressed" OR CurrentStatus = "Degraded" Then
CurrentStatus = "Warning"
ElseIf CurrentStatus = "Non-recover" Then
CurrentStatus = "Error"
End If
Dim oAPI, oBag
Set oAPI = CreateObject("MOM.ScriptAPI")
Set oBag = oAPI.CreatePropertyBag()
Call oBag.AddValue("Status",CurrentStatus)
Call oAPI.Return(oBag)
300Property[@Name='Status']EqualErrorProperty[@Name='Status']EqualWarningProperty[@Name='Status']EqualOKAvailabilityHealth$Target/Host/Host/Host/Host/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberGreaterEqual1200EventDisplayNumberLessEqual1205PublisherNameEqualServer AdministratorDellServerSensorCurrentsNumericUnitMonitorEventTrigger.vbs$MPElement$ $Target/Id$ $Config/Computer$ $Target/Property[Type="Dell.Connections.ServerNumericSensor"]/DeviceID$
'**********************************************************************************
' Script Name - DellServerCurrentsNumericUnitMonitor
' Author: Vignesh Pandian
'
' Description:
' Determine Unit Monitor health for ServerCurrents
'
' (c) Copyright Dell Inc. 2007 - All rights reserved
'**********************************************************************************
Option Explicit
On Error Resume Next
Dim oArgs
Set oArgs = WScript.Arguments
if oArgs.Count < 4 Then
Wscript.Quit -1
End If
Dim strComputer, objDellConnection, LogMessage, sQuery, colItems, objItemCurrent, CurrentStatus, TargetComputer, prmDeviceID
prmDeviceID = oArgs(3)
TargetComputer = oArgs(2)
strComputer = "."
set objDellConnection = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2\Dell")
If Err.Number <> 0 Then
LogMessage = "WMI Cimv2Dell Error Number : " & Err.Number & ". Description :" & Err.Description
Err.Clear
Else
If IsEmpty(objDellConnection) Then
LogMessage = "Unable to open WMI Namespace root-cimv2-dell. Check to see if the WMI service is enabled and running, and Install/Re-Install ServerAdministrator to ensure this WMI namespace exists. " & Err
Else
sQuery = "Select * from CIM_CurrentSensor WHERE DeviceID = '" & prmDeviceID & "'"
Set colItems = objDellConnection.ExecQuery(sQuery)
If Err.Number <> 0 Then
LogMessage = sQuery & " Error Number:" & Err.Number & "Description:" & Err.Description
If Err.Number = -2147023169 Then
LogMessage = "RPC Failure occurred for namespace root-cimv2-dell"
End If
Err.Clear
End If
If colItems is Nothing Then
LogMessage = "Unable to retrieve CIM_CurrentSensor object"
Else
LogMessage = "CIM_CurrentSensor object retrieved"
For Each objItemCurrent in colItems
If Err.Number <> 0 Then
If Err.Number = -2147023169 Then
LogMessage = "RPC Failure occurred for cimv2\dell - bmc info : " & Err.Number
ElseIf Err.Number = -2147217389 Then
LogMessage = "If PWS present, Please Install/Re-Install ServerAdministrator on Dell Server : " & fqdn2 & Err.Number
Else
LogMessage = "Object RetrievalLoop Error Number:" & Err.Number & "Description:" & Err.Description
End If
Err.Clear
End If
If Not objItemCurrent is Nothing Then
CurrentStatus = objItemCurrent.Status
End If
Next
End If 'colItems is nothing
Set colItems = Nothing
End If 'dellconnection is noting
On Error GoTo 0
End If
If CurrentStatus = "Stressed" OR CurrentStatus = "Degraded" Then
CurrentStatus = "Warning"
ElseIf CurrentStatus = "Non-recover" Then
CurrentStatus = "Error"
End If
Dim oAPI, oBag
Set oAPI = CreateObject("MOM.ScriptAPI")
Set oBag = oAPI.CreatePropertyBag()
Call oBag.AddValue("Status",CurrentStatus)
Call oAPI.Return(oBag)
300Property[@Name='Status']EqualOKProperty[@Name='Status']EqualWarningProperty[@Name='Status']EqualCriticalCustom3600DellServerBatteriesDiscreteUnitMonitor.vbs$MPElement$ $Target/Id$ $Config/Computer$ $Target/Property[Type="Dell.Connections.ServerDiscreteSensor"]/DeviceID$
'**********************************************************************************
' Script Name - DellServerBatteriesDiscreteUnitMonitor
' Author: Vignesh Pandian
'
' Description:
' Determine Unit Monitor health for Serverbatteries
'
' (c) Copyright Dell Inc. 2007 - All rights reserved
'**********************************************************************************
Option Explicit
On Error Resume Next
Dim oArgs
Set oArgs = WScript.Arguments
if oArgs.Count < 4 Then
Wscript.Quit -1
End If
Dim strComputer, objDellConnection, LogMessage, sQuery, colItems, objItemBatt, BattStatus, TargetComputer, BattValue, prmDeviceID
prmDeviceID = oArgs(3)
TargetComputer = oArgs(2)
strComputer = "."
BattValue = -1
set objDellConnection = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2\Dell")
If Err.Number <> 0 Then
LogMessage = "WMI Cimv2Dell Error Number : " & Err.Number & ". Description :" & Err.Description
Err.Clear
Else
If IsEmpty(objDellConnection) Then
LogMessage = "Unable to open WMI Namespace root-cimv2-dell. Check to see if the WMI service is enabled and running, and Install/Re-Install ServerAdministrator to ensure this WMI namespace exists. " & Err
Else
sQuery = "Select * from CIM_DiscreteSensor WHERE DeviceID = '" & prmDeviceID & "'"
Set colItems = objDellConnection.ExecQuery(sQuery)
If Err.Number <> 0 Then
LogMessage = sQuery & " Error Number:" & Err.Number & "Description:" & Err.Description
If Err.Number = -2147023169 Then
LogMessage = "RPC Failure occurred for namespace root-cimv2-dell"
End If
Err.Clear
End If
If colItems is Nothing Then
LogMessage = "Unable to retrieve CIM_DiscreteSensor object"
Else
LogMessage = "CIM_DiscreteSensor object retrieved"
For Each objItemBatt in colItems
If Err.Number <> 0 Then
If Err.Number = -2147023169 Then
LogMessage = "RPC Failure occurred for cimv2\dell - bmc info : " & Err.Number
ElseIf Err.Number = -2147217389 Then
LogMessage = "If PWS present, Please Install/Re-Install ServerAdministrator on Dell Server : " & fqdn2 & Err.Number
Else
LogMessage = "Object RetrievalLoop Error Number:" & Err.Number & "Description:" & Err.Description
End If
Err.Clear
End If
If Not objItemBatt is Nothing Then
BattStatus = objItemBatt.Status
End If
Next
End If 'colItems is nothing
Set colItems = Nothing
End If 'dellconnection is noting
On Error GoTo 0
End If
If BattStatus = "Stressed" OR BattStatus = "Degraded" Then
BattStatus = "Warning"
ElseIf BattStatus = "Non-recover" Then
BattStatus = "Error"
End If
Dim oAPI, oBag
Set oAPI = CreateObject("MOM.ScriptAPI")
Set oBag = oAPI.CreatePropertyBag()
Call oBag.AddValue("Status",BattStatus)
Call oAPI.Return(oBag)
300Property[@Name='Status']EqualErrorProperty[@Name='Status']EqualWarningProperty[@Name='Status']EqualOKAvailabilityHealth$Target/Host/Host/Host/Host/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberGreaterEqual1700EventDisplayNumberLessEqual1705PublisherNameEqualServer AdministratorDellServerSensorBatteriesDiscreteUnitEventTrigger.vbs$MPElement$ $Target/Id$ $Config/Computer$ $Target/Property[Type="Dell.Connections.ServerDiscreteSensor"]/DeviceID$
'**********************************************************************************
' Script Name - DellServerBatteriesDiscreteUnitMonitor
' Author: Vignesh Pandian
'
' Description:
' Determine Unit Monitor health for Serverbatteries
'
' (c) Copyright Dell Inc. 2007 - All rights reserved
'**********************************************************************************
Option Explicit
On Error Resume Next
Dim oArgs
Set oArgs = WScript.Arguments
if oArgs.Count < 4 Then
Wscript.Quit -1
End If
Dim strComputer, objDellConnection, LogMessage, sQuery, colItems, objItemBatt, BattStatus, TargetComputer, BattValue, prmDeviceID
prmDeviceID = oArgs(3)
TargetComputer = oArgs(2)
strComputer = "."
BattValue = -1
set objDellConnection = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2\Dell")
If Err.Number <> 0 Then
LogMessage = "WMI Cimv2Dell Error Number : " & Err.Number & ". Description :" & Err.Description
Err.Clear
Else
If IsEmpty(objDellConnection) Then
LogMessage = "Unable to open WMI Namespace root-cimv2-dell. Check to see if the WMI service is enabled and running, and Install/Re-Install ServerAdministrator to ensure this WMI namespace exists. " & Err
Else
sQuery = "Select * from CIM_DiscreteSensor WHERE DeviceID = '" & prmDeviceID & "'"
Set colItems = objDellConnection.ExecQuery(sQuery)
If Err.Number <> 0 Then
LogMessage = sQuery & " Error Number:" & Err.Number & "Description:" & Err.Description
If Err.Number = -2147023169 Then
LogMessage = "RPC Failure occurred for namespace root-cimv2-dell"
End If
Err.Clear
End If
If colItems is Nothing Then
LogMessage = "Unable to retrieve CIM_DiscreteSensor object"
Else
LogMessage = "CIM_DiscreteSensor object retrieved"
For Each objItemBatt in colItems
If Err.Number <> 0 Then
If Err.Number = -2147023169 Then
LogMessage = "RPC Failure occurred for cimv2\dell - bmc info : " & Err.Number
ElseIf Err.Number = -2147217389 Then
LogMessage = "If PWS present, Please Install/Re-Install ServerAdministrator on Dell Server : " & fqdn2 & Err.Number
Else
LogMessage = "Object RetrievalLoop Error Number:" & Err.Number & "Description:" & Err.Description
End If
Err.Clear
End If
If Not objItemBatt is Nothing Then
BattStatus = objItemBatt.Status
End If
Next
End If 'colItems is nothing
Set colItems = Nothing
End If 'dellconnection is noting
On Error GoTo 0
End If
If BattStatus = "Stressed" OR BattStatus = "Degraded" Then
BattStatus = "Warning"
ElseIf BattStatus = "Non-recover" Then
BattStatus = "Error"
End If
Dim oAPI, oBag
Set oAPI = CreateObject("MOM.ScriptAPI")
Set oBag = oAPI.CreatePropertyBag()
Call oBag.AddValue("Status",BattStatus)
Call oAPI.Return(oBag)
300Property[@Name='Status']EqualOKProperty[@Name='Status']EqualWarningProperty[@Name='Status']EqualCriticalCustom3600DellServerPowerSupplyUnit.vbs$MPElement$ $Target/Id$ $Config/Computer$ $Target/Property[Type="Dell.Connections.ServerPowerSuppliesUnit"]/DeviceID$
'**********************************************************************************
' Script Name - DellServerPowerSupplyUnit
' Author: Vignesh Pandian
'
' Description:
' Determine Unit Monitor health for ServerPowerSupplies
'
' (c) Copyright Dell Inc. 2007 - All rights reserved
'**********************************************************************************
Option Explicit
On Error Resume Next
Dim oArgs
Set oArgs = WScript.Arguments
if oArgs.Count < 4 Then
Wscript.Quit -1
End If
Dim strComputer, objDellConnection, LogMessage, sQuery, colItems, objItemPower, PowerStatus, TargetComputer, PowerValue, prmDeviceID, i
Dim bAPI
Set bAPI = CreateObject("MOM.ScriptAPI")
TargetComputer = oArgs(2)
prmDeviceID = ""
For i=3 to (oArgs.Count-1)
prmDeviceID = prmDeviceID & " " & oArgs(i)
Next
strComputer = "."
PowerValue = -1
set objDellConnection = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2\Dell")
If Err.Number <> 0 Then
LogMessage = "WMI Cimv2Dell Error Number : " & Err.Number & ". Description :" & Err.Description
Err.Clear
Else
If IsEmpty(objDellConnection) Then
LogMessage = "Unable to open WMI Namespace root-cimv2-dell. Check to see if the WMI service is enabled and running, and Install/Re-Install ServerAdministrator to ensure this WMI namespace exists. " & Err
Else
sQuery = "Select * from CIM_PowerSupply"
Set colItems = objDellConnection.ExecQuery(sQuery)
If Err.Number <> 0 Then
LogMessage = sQuery & " Error Number:" & Err.Number & "Description:" & Err.Description
If Err.Number = -2147023169 Then
LogMessage = "RPC Failure occurred for namespace root-cimv2-dell"
End If
Err.Clear
End If
If colItems is Nothing Then
LogMessage = "Unable to retrieve CIM_PowerSupply object"
Else
LogMessage = "CIM_PowerSupply object retrieved"
For Each objItemPower in colItems
If Err.Number <> 0 Then
If Err.Number = -2147023169 Then
LogMessage = "RPC Failure occurred for cimv2\dell - bmc info : " & Err.Number
ElseIf Err.Number = -2147217389 Then
LogMessage = "If Power present, Please Install/Re-Install ServerAdministrator on Dell Server : " & fqdn2 & Err.Number
Else
LogMessage = "Object RetrievalLoop Error Number:" & Err.Number & "Description:" & Err.Description
End If
Err.Clear
End If
If Not (objItemPower is Nothing) Then
If (StrComp(Trim(objItemPower.DeviceID),Trim(prmDeviceID),1)=0) Then
PowerStatus = objItemPower.Status
End If
End If
Next
End If 'colItems is nothing
Set colItems = Nothing
End If 'dellconnection is noting
On Error GoTo 0
End If
Set bAPI = Nothing
If PowerStatus = "Stressed" OR PowerStatus = "Degraded" Then
PowerStatus = "Warning"
ElseIf PowerStatus = "Non-recover" Then
PowerStatus = "Error"
End If
Dim oAPI, oBag
Set oAPI = CreateObject("MOM.ScriptAPI")
Set oBag = oAPI.CreatePropertyBag()
Call oBag.AddValue("Status",PowerStatus)
Call oAPI.Return(oBag)
'Call oAPI.LogScriptEvent("Vig4",101,2,prmDeviceID & sQuery & "PowerStatus=" & PowerStatus)
Set oAPI = Nothing
300Property[@Name='Status']EqualErrorProperty[@Name='Status']EqualWarningProperty[@Name='Status']EqualOKAvailabilityHealth$Target/Host/Host/Host/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberGreaterEqual1350EventDisplayNumberLessEqual1355PublisherNameEqualServer AdministratorDellServerPowerSuppliesUnitEventTrigger1.vbs$MPElement$ $Target/Id$ $Config/Computer$ $Target/Property[Type="Dell.Connections.ServerPowerSuppliesUnit"]/DeviceID$
'**********************************************************************************
' Script Name - DellServerPowerSupplyUnit
' Author: Vignesh Pandian
'
' Description:
' Determine Unit Monitor health for ServerPowerSupplies
'
' (c) Copyright Dell Inc. 2007 - All rights reserved
'**********************************************************************************
Option Explicit
On Error Resume Next
Dim oArgs
Set oArgs = WScript.Arguments
if oArgs.Count < 4 Then
Wscript.Quit -1
End If
Dim strComputer, objDellConnection, LogMessage, sQuery, colItems, objItemPower, PowerStatus, TargetComputer, PowerValue, prmDeviceID, i
Dim bAPI
Set bAPI = CreateObject("MOM.ScriptAPI")
TargetComputer = oArgs(2)
prmDeviceID = ""
For i=3 to (oArgs.Count-1)
prmDeviceID = prmDeviceID & " " & oArgs(i)
Next
strComputer = "."
PowerValue = -1
set objDellConnection = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2\Dell")
If Err.Number <> 0 Then
LogMessage = "WMI Cimv2Dell Error Number : " & Err.Number & ". Description :" & Err.Description
Err.Clear
Else
If IsEmpty(objDellConnection) Then
LogMessage = "Unable to open WMI Namespace root-cimv2-dell. Check to see if the WMI service is enabled and running, and Install/Re-Install ServerAdministrator to ensure this WMI namespace exists. " & Err
Else
sQuery = "Select * from CIM_PowerSupply"
Set colItems = objDellConnection.ExecQuery(sQuery)
If Err.Number <> 0 Then
LogMessage = sQuery & " Error Number:" & Err.Number & "Description:" & Err.Description
If Err.Number = -2147023169 Then
LogMessage = "RPC Failure occurred for namespace root-cimv2-dell"
End If
Err.Clear
End If
If colItems is Nothing Then
LogMessage = "Unable to retrieve CIM_PowerSupply object"
Else
LogMessage = "CIM_PowerSupply object retrieved"
For Each objItemPower in colItems
If Err.Number <> 0 Then
If Err.Number = -2147023169 Then
LogMessage = "RPC Failure occurred for cimv2\dell - bmc info : " & Err.Number
ElseIf Err.Number = -2147217389 Then
LogMessage = "If Power present, Please Install/Re-Install ServerAdministrator on Dell Server : " & fqdn2 & Err.Number
Else
LogMessage = "Object RetrievalLoop Error Number:" & Err.Number & "Description:" & Err.Description
End If
Err.Clear
End If
If Not (objItemPower is Nothing) Then
If (StrComp(Trim(objItemPower.DeviceID),Trim(prmDeviceID),1)=0) Then
PowerStatus = objItemPower.Status
End If
End If
Next
End If 'colItems is nothing
Set colItems = Nothing
End If 'dellconnection is noting
On Error GoTo 0
End If
Set bAPI = Nothing
If PowerStatus = "Stressed" OR PowerStatus = "Degraded" Then
PowerStatus = "Warning"
ElseIf PowerStatus = "Non-recover" Then
PowerStatus = "Error"
End If
Dim oAPI, oBag
Set oAPI = CreateObject("MOM.ScriptAPI")
Set oBag = oAPI.CreatePropertyBag()
Call oBag.AddValue("Status",PowerStatus)
Call oAPI.Return(oBag)
'Call oAPI.LogScriptEvent("Vig4",101,2,prmDeviceID & sQuery & "PowerStatus=" & PowerStatus)
Set oAPI = Nothing
300Property[@Name='Status']EqualOKProperty[@Name='Status']EqualWarningProperty[@Name='Status']EqualCriticalAvailabilityHealth$Target/Host/Host/Host/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberGreaterEqual1500EventDisplayNumberLessEqual1505PublisherNameEqualServer AdministratorDellServerPowerSuppliesUnitEventTrigger2.vbs$MPElement$ $Target/Id$ $Config/Computer$ $Target/Property[Type="Dell.Connections.ServerPowerSuppliesUnit"]/DeviceID$
'**********************************************************************************
' Script Name - DellServerPowerSupplyUnit
' Author: Vignesh Pandian
'
' Description:
' Determine Unit Monitor health for ServerPowerSupplies
'
' (c) Copyright Dell Inc. 2007 - All rights reserved
'**********************************************************************************
Option Explicit
On Error Resume Next
Dim oArgs
Set oArgs = WScript.Arguments
if oArgs.Count < 4 Then
Wscript.Quit -1
End If
Dim strComputer, objDellConnection, LogMessage, sQuery, colItems, objItemPower, PowerStatus, TargetComputer, PowerValue, prmDeviceID, i
Dim bAPI
Set bAPI = CreateObject("MOM.ScriptAPI")
TargetComputer = oArgs(2)
prmDeviceID = ""
For i=3 to (oArgs.Count-1)
prmDeviceID = prmDeviceID & " " & oArgs(i)
Next
strComputer = "."
PowerValue = -1
set objDellConnection = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2\Dell")
If Err.Number <> 0 Then
LogMessage = "WMI Cimv2Dell Error Number : " & Err.Number & ". Description :" & Err.Description
Err.Clear
Else
If IsEmpty(objDellConnection) Then
LogMessage = "Unable to open WMI Namespace root-cimv2-dell. Check to see if the WMI service is enabled and running, and Install/Re-Install ServerAdministrator to ensure this WMI namespace exists. " & Err
Else
sQuery = "Select * from CIM_PowerSupply"
Set colItems = objDellConnection.ExecQuery(sQuery)
If Err.Number <> 0 Then
LogMessage = sQuery & " Error Number:" & Err.Number & "Description:" & Err.Description
If Err.Number = -2147023169 Then
LogMessage = "RPC Failure occurred for namespace root-cimv2-dell"
End If
Err.Clear
End If
If colItems is Nothing Then
LogMessage = "Unable to retrieve CIM_PowerSupply object"
Else
LogMessage = "CIM_PowerSupply object retrieved"
For Each objItemPower in colItems
If Err.Number <> 0 Then
If Err.Number = -2147023169 Then
LogMessage = "RPC Failure occurred for cimv2\dell - bmc info : " & Err.Number
ElseIf Err.Number = -2147217389 Then
LogMessage = "If Power present, Please Install/Re-Install ServerAdministrator on Dell Server : " & fqdn2 & Err.Number
Else
LogMessage = "Object RetrievalLoop Error Number:" & Err.Number & "Description:" & Err.Description
End If
Err.Clear
End If
If Not (objItemPower is Nothing) Then
If (StrComp(Trim(objItemPower.DeviceID),Trim(prmDeviceID),1)=0) Then
PowerStatus = objItemPower.Status
End If
End If
Next
End If 'colItems is nothing
Set colItems = Nothing
End If 'dellconnection is noting
On Error GoTo 0
End If
Set bAPI = Nothing
If PowerStatus = "Stressed" OR PowerStatus = "Degraded" Then
PowerStatus = "Warning"
ElseIf PowerStatus = "Non-recover" Then
PowerStatus = "Error"
End If
Dim oAPI, oBag
Set oAPI = CreateObject("MOM.ScriptAPI")
Set oBag = oAPI.CreatePropertyBag()
Call oBag.AddValue("Status",PowerStatus)
Call oAPI.Return(oBag)
'Call oAPI.LogScriptEvent("Vig4",101,2,prmDeviceID & sQuery & "PowerStatus=" & PowerStatus)
Set oAPI = Nothing
300Property[@Name='Status']EqualOKProperty[@Name='Status']EqualWarningProperty[@Name='Status']EqualCriticalAvailabilityHealth$Target/Host/Host/Host/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberGreaterEqual1300EventDisplayNumberLessEqual1306PublisherNameEqualServer AdministratorDellServerPowerSuppliesUnitEventTrigger3.vbs$MPElement$ $Target/Id$ $Config/Computer$ $Target/Property[Type="Dell.Connections.ServerPowerSuppliesUnit"]/DeviceID$
'**********************************************************************************
' Script Name - DellServerPowerSupplyUnit
' Author: Vignesh Pandian
'
' Description:
' Determine Unit Monitor health for ServerPowerSupplies
'
' (c) Copyright Dell Inc. 2007 - All rights reserved
'**********************************************************************************
Option Explicit
On Error Resume Next
Dim oArgs
Set oArgs = WScript.Arguments
if oArgs.Count < 4 Then
Wscript.Quit -1
End If
Dim strComputer, objDellConnection, LogMessage, sQuery, colItems, objItemPower, PowerStatus, TargetComputer, PowerValue, prmDeviceID, i
Dim bAPI
Set bAPI = CreateObject("MOM.ScriptAPI")
TargetComputer = oArgs(2)
prmDeviceID = ""
For i=3 to (oArgs.Count-1)
prmDeviceID = prmDeviceID & " " & oArgs(i)
Next
strComputer = "."
PowerValue = -1
set objDellConnection = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2\Dell")
If Err.Number <> 0 Then
LogMessage = "WMI Cimv2Dell Error Number : " & Err.Number & ". Description :" & Err.Description
Err.Clear
Else
If IsEmpty(objDellConnection) Then
LogMessage = "Unable to open WMI Namespace root-cimv2-dell. Check to see if the WMI service is enabled and running, and Install/Re-Install ServerAdministrator to ensure this WMI namespace exists. " & Err
Else
sQuery = "Select * from CIM_PowerSupply"
Set colItems = objDellConnection.ExecQuery(sQuery)
If Err.Number <> 0 Then
LogMessage = sQuery & " Error Number:" & Err.Number & "Description:" & Err.Description
If Err.Number = -2147023169 Then
LogMessage = "RPC Failure occurred for namespace root-cimv2-dell"
End If
Err.Clear
End If
If colItems is Nothing Then
LogMessage = "Unable to retrieve CIM_PowerSupply object"
Else
LogMessage = "CIM_PowerSupply object retrieved"
For Each objItemPower in colItems
If Err.Number <> 0 Then
If Err.Number = -2147023169 Then
LogMessage = "RPC Failure occurred for cimv2\dell - bmc info : " & Err.Number
ElseIf Err.Number = -2147217389 Then
LogMessage = "If Power present, Please Install/Re-Install ServerAdministrator on Dell Server : " & fqdn2 & Err.Number
Else
LogMessage = "Object RetrievalLoop Error Number:" & Err.Number & "Description:" & Err.Description
End If
Err.Clear
End If
If Not (objItemPower is Nothing) Then
If (StrComp(Trim(objItemPower.DeviceID),Trim(prmDeviceID),1)=0) Then
PowerStatus = objItemPower.Status
End If
End If
Next
End If 'colItems is nothing
Set colItems = Nothing
End If 'dellconnection is noting
On Error GoTo 0
End If
Set bAPI = Nothing
If PowerStatus = "Stressed" OR PowerStatus = "Degraded" Then
PowerStatus = "Warning"
ElseIf PowerStatus = "Non-recover" Then
PowerStatus = "Error"
End If
Dim oAPI, oBag
Set oAPI = CreateObject("MOM.ScriptAPI")
Set oBag = oAPI.CreatePropertyBag()
Call oBag.AddValue("Status",PowerStatus)
Call oAPI.Return(oBag)
'Call oAPI.LogScriptEvent("Vig4",101,2,prmDeviceID & sQuery & "PowerStatus=" & PowerStatus)
Set oAPI = Nothing
300Property[@Name='Status']EqualOKProperty[@Name='Status']EqualWarningProperty[@Name='Status']EqualCriticalCustom3600DellServerMemoryUnit.vbs$MPElement$ $Target/Id$ $Config/Computer$ $Target/Property[Type="Dell.Connections.ServerMemoryUnit"]/Tag$
'**********************************************************************************
' Script Name - DellServerMemoryUnit
' Author: Vignesh Pandian
'
' Description:
' Determine Unit Monitor health for ServerMemory
'
' (c) Copyright Dell Inc. 2007 - All rights reserved
'**********************************************************************************
Option Explicit
On Error Resume Next
Dim oArgs
Set oArgs = WScript.Arguments
if oArgs.Count < 4 Then
Wscript.Quit -1
End If
Dim strComputer, objDellConnection, LogMessage, sQuery, colItems, objItemMemory, MemoryStatus, TargetComputer, prmDeviceID
TargetComputer = oArgs(2)
prmDeviceID = oArgs(3)
strComputer = "."
set objDellConnection = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2\Dell")
If Err.Number <> 0 Then
LogMessage = "WMI Cimv2Dell Error Number : " & Err.Number & ". Description :" & Err.Description
Err.Clear
Else
If IsEmpty(objDellConnection) Then
LogMessage = "Unable to open WMI Namespace root-cimv2-dell. Check to see if the WMI service is enabled and running, and Install/Re-Install ServerAdministrator to ensure this WMI namespace exists. " & Err
Else
sQuery = "Select * from CIM_PhysicalMemory WHERE Tag = '" & prmDeviceID & "'"
Set colItems = objDellConnection.ExecQuery(sQuery)
If Err.Number <> 0 Then
LogMessage = sQuery & " Error Number:" & Err.Number & "Description:" & Err.Description
If Err.Number = -2147023169 Then
LogMessage = "RPC Failure occurred for namespace root-cimv2-dell"
End If
Err.Clear
End If
If colItems is Nothing Then
LogMessage = "Unable to retrieve CIM_PhysicalMemory object"
Else
LogMessage = "CIM_PhysicalMemory object retrieved"
For Each objItemMemory in colItems
If Err.Number <> 0 Then
If Err.Number = -2147023169 Then
LogMessage = "RPC Failure occurred for cimv2\dell - bmc info : " & Err.Number
ElseIf Err.Number = -2147217389 Then
LogMessage = "If PWS present, Please Install/Re-Install ServerAdministrator on Dell Server : " & Err.Number
Else
LogMessage = "Object RetrievalLoop Error Number:" & Err.Number & "Description:" & Err.Description
End If
Err.Clear
End If
If Not objItemMemory is Nothing Then
MemoryStatus = objItemMemory.Status
End If
Next
End If 'colItems is nothing
Set colItems = Nothing
End If 'dellconnection is noting
On Error GoTo 0
End If
If MemoryStatus = "Stressed" OR MemoryStatus = "Degraded" Then
MemoryStatus = "Warning"
ElseIf MemoryStatus = "Non-recover" Then
MemoryStatus = "Error"
End If
Dim oAPI, oBag
Set oAPI = CreateObject("MOM.ScriptAPI")
Set oBag = oAPI.CreatePropertyBag()
Call oBag.AddValue("Status",MemoryStatus)
Call oAPI.Return(oBag)
300Property[@Name='Status']EqualErrorProperty[@Name='Status']EqualWarningProperty[@Name='Status']EqualOKAvailabilityHealth$Target/Host/Host/Host/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberGreaterEqual1403EventDisplayNumberLessEqual1404PublisherNameEqualServer AdministratorDellServerMemoryUnitEventTrigger.vbs$MPElement$ $Target/Id$ $Config/Computer$ $Target/Property[Type="Dell.Connections.ServerMemoryUnit"]/Tag$
'**********************************************************************************
' Script Name - DellServerMemoryUnit
' Author: Vignesh Pandian
'
' Description:
' Determine Unit Monitor health for ServerMemory
'
' (c) Copyright Dell Inc. 2007 - All rights reserved
'**********************************************************************************
Option Explicit
On Error Resume Next
Dim oArgs
Set oArgs = WScript.Arguments
if oArgs.Count < 4 Then
Wscript.Quit -1
End If
Dim strComputer, objDellConnection, LogMessage, sQuery, colItems, objItemMemory, MemoryStatus, TargetComputer, prmDeviceID
TargetComputer = oArgs(2)
prmDeviceID = oArgs(3)
strComputer = "."
set objDellConnection = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2\Dell")
If Err.Number <> 0 Then
LogMessage = "WMI Cimv2Dell Error Number : " & Err.Number & ". Description :" & Err.Description
Err.Clear
Else
If IsEmpty(objDellConnection) Then
LogMessage = "Unable to open WMI Namespace root-cimv2-dell. Check to see if the WMI service is enabled and running, and Install/Re-Install ServerAdministrator to ensure this WMI namespace exists. " & Err
Else
sQuery = "Select * from CIM_PhysicalMemory WHERE Tag = '" & prmDeviceID & "'"
Set colItems = objDellConnection.ExecQuery(sQuery)
If Err.Number <> 0 Then
LogMessage = sQuery & " Error Number:" & Err.Number & "Description:" & Err.Description
If Err.Number = -2147023169 Then
LogMessage = "RPC Failure occurred for namespace root-cimv2-dell"
End If
Err.Clear
End If
If colItems is Nothing Then
LogMessage = "Unable to retrieve CIM_PhysicalMemory object"
Else
LogMessage = "CIM_PhysicalMemory object retrieved"
For Each objItemMemory in colItems
If Err.Number <> 0 Then
If Err.Number = -2147023169 Then
LogMessage = "RPC Failure occurred for cimv2\dell - bmc info : " & Err.Number
ElseIf Err.Number = -2147217389 Then
LogMessage = "If PWS present, Please Install/Re-Install ServerAdministrator on Dell Server : " & Err.Number
Else
LogMessage = "Object RetrievalLoop Error Number:" & Err.Number & "Description:" & Err.Description
End If
Err.Clear
End If
If Not objItemMemory is Nothing Then
MemoryStatus = objItemMemory.Status
End If
Next
End If 'colItems is nothing
Set colItems = Nothing
End If 'dellconnection is noting
On Error GoTo 0
End If
If MemoryStatus = "Stressed" OR MemoryStatus = "Degraded" Then
MemoryStatus = "Warning"
ElseIf MemoryStatus = "Non-recover" Then
MemoryStatus = "Error"
End If
Dim oAPI, oBag
Set oAPI = CreateObject("MOM.ScriptAPI")
Set oBag = oAPI.CreatePropertyBag()
Call oBag.AddValue("Status",MemoryStatus)
Call oAPI.Return(oBag)
300Property[@Name='Status']EqualOKProperty[@Name='Status']EqualWarningProperty[@Name='Status']EqualCriticalCustom3600DellServerProcessorsUnit.vbs$MPElement$ $Target/Id$ $Config/Computer$ $Target/Property[Type="Dell.Connections.ServerProcessorsUnit"]/DeviceID$
'**********************************************************************************
' Script Name - DellServerProcessorsUnit
' Author: Vignesh Pandian
'
' Description:
' Determine Unit Monitor health for ServerProcessor
'
' (c) Copyright Dell Inc. 2007 - All rights reserved
'**********************************************************************************
Option Explicit
On Error Resume Next
Dim oArgs
Set oArgs = WScript.Arguments
if oArgs.Count < 4 Then
Wscript.Quit -1
End If
Dim strComputer, objDellConnection, LogMessage, sQuery, colItems, objItemProcessors, ProcessorsStatus, TargetComputer, prmDeviceID
TargetComputer = oArgs(2)
prmDeviceID = oArgs(3)
strComputer = "."
set objDellConnection = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2\Dell")
If Err.Number <> 0 Then
LogMessage = "WMI Cimv2Dell Error Number : " & Err.Number & ". Description :" & Err.Description
Err.Clear
Else
If IsEmpty(objDellConnection) Then
LogMessage = "Unable to open WMI Namespace root-cimv2-dell. Check to see if the WMI service is enabled and running, and Install/Re-Install ServerAdministrator to ensure this WMI namespace exists. " & Err
Else
sQuery = "Select * from CIM_Processor WHERE DeviceID = '" & prmDeviceID & "'"
Set colItems = objDellConnection.ExecQuery(sQuery)
If Err.Number <> 0 Then
LogMessage = sQuery & " Error Number:" & Err.Number & "Description:" & Err.Description
If Err.Number = -2147023169 Then
LogMessage = "RPC Failure occurred for namespace root-cimv2-dell"
End If
Err.Clear
End If
If colItems is Nothing Then
LogMessage = "Unable to retrieve CIM_Processors object"
Else
LogMessage = "CIM_Processors object retrieved"
For Each objItemProcessors in colItems
If Err.Number <> 0 Then
If Err.Number = -2147023169 Then
LogMessage = "RPC Failure occurred for cimv2\dell - bmc info : " & Err.Number
ElseIf Err.Number = -2147217389 Then
LogMessage = "If PWS present, Please Install/Re-Install ServerAdministrator on Dell Server : " & Err.Number
Else
LogMessage = "Object RetrievalLoop Error Number:" & Err.Number & "Description:" & Err.Description
End If
Err.Clear
End If
If Not objItemProcessors is Nothing Then
ProcessorsStatus = objItemProcessors.Status
End If
Next
End If 'colItems is nothing
Set colItems = Nothing
End If 'dellconnection is noting
On Error GoTo 0
End If
If ProcessorsStatus = "Stressed" OR ProcessorsStatus = "Degraded" Then
ProcessorsStatus = "Warning"
ElseIf ProcessorsStatus = "Non-recover" Then
ProcessorsStatus = "Error"
End If
Dim oAPI, oBag
Set oAPI = CreateObject("MOM.ScriptAPI")
Set oBag = oAPI.CreatePropertyBag()
Call oBag.AddValue("Status",ProcessorsStatus)
Call oAPI.Return(oBag)
300Property[@Name='Status']EqualErrorProperty[@Name='Status']EqualWarningProperty[@Name='Status']EqualOKAvailabilityHealth$Target/Host/Host/Host/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberGreaterEqual1600EventDisplayNumberLessEqual1605PublisherNameEqualServer AdministratorDellServerProcessorsUnitEventTrigger.vbs$MPElement$ $Target/Id$ $Config/Computer$ $Target/Property[Type="Dell.Connections.ServerProcessorsUnit"]/DeviceID$
'**********************************************************************************
' Script Name - DellServerProcessorsUnit
' Author: Vignesh Pandian
'
' Description:
' Determine Unit Monitor health for ServerProcessor
'
' (c) Copyright Dell Inc. 2007 - All rights reserved
'**********************************************************************************
Option Explicit
On Error Resume Next
Dim oArgs
Set oArgs = WScript.Arguments
if oArgs.Count < 4 Then
Wscript.Quit -1
End If
Dim strComputer, objDellConnection, LogMessage, sQuery, colItems, objItemProcessors, ProcessorsStatus, TargetComputer, prmDeviceID
TargetComputer = oArgs(2)
prmDeviceID = oArgs(3)
strComputer = "."
set objDellConnection = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2\Dell")
If Err.Number <> 0 Then
LogMessage = "WMI Cimv2Dell Error Number : " & Err.Number & ". Description :" & Err.Description
Err.Clear
Else
If IsEmpty(objDellConnection) Then
LogMessage = "Unable to open WMI Namespace root-cimv2-dell. Check to see if the WMI service is enabled and running, and Install/Re-Install ServerAdministrator to ensure this WMI namespace exists. " & Err
Else
sQuery = "Select * from CIM_Processor WHERE DeviceID = '" & prmDeviceID & "'"
Set colItems = objDellConnection.ExecQuery(sQuery)
If Err.Number <> 0 Then
LogMessage = sQuery & " Error Number:" & Err.Number & "Description:" & Err.Description
If Err.Number = -2147023169 Then
LogMessage = "RPC Failure occurred for namespace root-cimv2-dell"
End If
Err.Clear
End If
If colItems is Nothing Then
LogMessage = "Unable to retrieve CIM_Processors object"
Else
LogMessage = "CIM_Processors object retrieved"
For Each objItemProcessors in colItems
If Err.Number <> 0 Then
If Err.Number = -2147023169 Then
LogMessage = "RPC Failure occurred for cimv2\dell - bmc info : " & Err.Number
ElseIf Err.Number = -2147217389 Then
LogMessage = "If PWS present, Please Install/Re-Install ServerAdministrator on Dell Server : " & Err.Number
Else
LogMessage = "Object RetrievalLoop Error Number:" & Err.Number & "Description:" & Err.Description
End If
Err.Clear
End If
If Not objItemProcessors is Nothing Then
ProcessorsStatus = objItemProcessors.Status
End If
Next
End If 'colItems is nothing
Set colItems = Nothing
End If 'dellconnection is noting
On Error GoTo 0
End If
If ProcessorsStatus = "Stressed" OR ProcessorsStatus = "Degraded" Then
ProcessorsStatus = "Warning"
ElseIf ProcessorsStatus = "Non-recover" Then
ProcessorsStatus = "Error"
End If
Dim oAPI, oBag
Set oAPI = CreateObject("MOM.ScriptAPI")
Set oBag = oAPI.CreatePropertyBag()
Call oBag.AddValue("Status",ProcessorsStatus)
Call oAPI.Return(oBag)
300Property[@Name='Status']EqualOKProperty[@Name='Status']EqualWarningProperty[@Name='Status']EqualCriticalCustom3600DellServerIntrusion.vbs$MPElement$ $Target/Id$ $Config/Computer$
'**********************************************************************************
' Script Name - DellServerIntrusion
' Author: Vignesh Pandian
'
' Description:
' Determine Unit Monitor health for ServerIntrusion
'
' (c) Copyright Dell Inc. 2007 - All rights reserved
'**********************************************************************************
Option Explicit
On Error Resume Next
Dim oArgs
Set oArgs = WScript.Arguments
if oArgs.Count < 3 Then
Wscript.Quit -1
End If
Dim strComputer, objDellConnection, LogMessage, sQuery, colItems, objItemIntrusion, IntrusionStatus, TargetComputer, prmDeviceID
TargetComputer = oArgs(2)
strComputer = "."
set objDellConnection = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2\Dell")
If Err.Number <> 0 Then
LogMessage = "WMI Cimv2Dell Error Number : " & Err.Number & ". Description :" & Err.Description
Err.Clear
Else
If IsEmpty(objDellConnection) Then
LogMessage = "Unable to open WMI Namespace root-cimv2-dell. Check to see if the WMI service is enabled and running, and Install/Re-Install ServerAdministrator to ensure this WMI namespace exists. " & Err
Else
sQuery = "Select * from Dell_Chassis"
Set colItems = objDellConnection.ExecQuery(sQuery)
If Err.Number <> 0 Then
LogMessage = sQuery & " Error Number:" & Err.Number & "Description:" & Err.Description
If Err.Number = -2147023169 Then
LogMessage = "RPC Failure occurred for namespace root-cimv2-dell"
End If
Err.Clear
End If
If colItems is Nothing Then
LogMessage = "Unable to retrieve CIM_Intrusion object"
Else
LogMessage = "CIM_Intrusion object retrieved"
For Each objItemIntrusion in colItems
If Err.Number <> 0 Then
If Err.Number = -2147023169 Then
LogMessage = "RPC Failure occurred for cimv2\dell - bmc info : " & Err.Number
ElseIf Err.Number = -2147217389 Then
LogMessage = "If PWS present, Please Install/Re-Install ServerAdministrator on Dell Server : " & Err.Number
Else
LogMessage = "Object RetrievalLoop Error Number:" & Err.Number & "Description:" & Err.Description
End If
Err.Clear
End If
If Not objItemIntrusion is Nothing Then
IntrusionStatus = objItemIntrusion.SecurityBreach
End If
Next
End If 'colItems is nothing
Set colItems = Nothing
End If 'dellconnection is noting
On Error GoTo 0
End If
If IntrusionStatus = "3" OR IntrusionStatus = "1" Then
IntrusionStatus = "OK"
ElseIf IntrusionStatus = "4" Then
IntrusionStatus = "Warning"
ElseIf IntrusionStatus = "5" Then
IntrusionStatus = "Error"
End If
Dim oAPI, oBag
Set oAPI = CreateObject("MOM.ScriptAPI")
Set oBag = oAPI.CreatePropertyBag()
Call oBag.AddValue("Status",IntrusionStatus)
Call oAPI.Return(oBag)
'Call oAPI.LogScriptEvent("Vig5",399,1,"IntrusionStatus=" & IntrusionStatus)
300Property[@Name='Status']EqualErrorProperty[@Name='Status']EqualWarningProperty[@Name='Status']EqualOKAvailabilityHealth$Target/Host/Host/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberGreaterEqual1250EventDisplayNumberLessEqual1255PublisherNameEqualServer AdministratorDellServerIntrusionEventTrigger.vbs$MPElement$ $Target/Id$ $Config/Computer$
'**********************************************************************************
' Script Name - DellServerIntrusion
' Author: Vignesh Pandian
'
' Description:
' Determine Unit Monitor health for ServerIntrusion
'
' (c) Copyright Dell Inc. 2007 - All rights reserved
'**********************************************************************************
Option Explicit
On Error Resume Next
Dim oArgs
Set oArgs = WScript.Arguments
if oArgs.Count < 3 Then
Wscript.Quit -1
End If
Dim strComputer, objDellConnection, LogMessage, sQuery, colItems, objItemIntrusion, IntrusionStatus, TargetComputer, prmDeviceID
TargetComputer = oArgs(2)
strComputer = "."
set objDellConnection = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2\Dell")
If Err.Number <> 0 Then
LogMessage = "WMI Cimv2Dell Error Number : " & Err.Number & ". Description :" & Err.Description
Err.Clear
Else
If IsEmpty(objDellConnection) Then
LogMessage = "Unable to open WMI Namespace root-cimv2-dell. Check to see if the WMI service is enabled and running, and Install/Re-Install ServerAdministrator to ensure this WMI namespace exists. " & Err
Else
sQuery = "Select * from Dell_Chassis"
Set colItems = objDellConnection.ExecQuery(sQuery)
If Err.Number <> 0 Then
LogMessage = sQuery & " Error Number:" & Err.Number & "Description:" & Err.Description
If Err.Number = -2147023169 Then
LogMessage = "RPC Failure occurred for namespace root-cimv2-dell"
End If
Err.Clear
End If
If colItems is Nothing Then
LogMessage = "Unable to retrieve CIM_Intrusion object"
Else
LogMessage = "CIM_Intrusion object retrieved"
For Each objItemIntrusion in colItems
If Err.Number <> 0 Then
If Err.Number = -2147023169 Then
LogMessage = "RPC Failure occurred for cimv2\dell - bmc info : " & Err.Number
ElseIf Err.Number = -2147217389 Then
LogMessage = "If PWS present, Please Install/Re-Install ServerAdministrator on Dell Server : " & Err.Number
Else
LogMessage = "Object RetrievalLoop Error Number:" & Err.Number & "Description:" & Err.Description
End If
Err.Clear
End If
If Not objItemIntrusion is Nothing Then
IntrusionStatus = objItemIntrusion.SecurityBreach
End If
Next
End If 'colItems is nothing
Set colItems = Nothing
End If 'dellconnection is noting
On Error GoTo 0
End If
If IntrusionStatus = "3" OR IntrusionStatus = "1" Then
IntrusionStatus = "OK"
ElseIf IntrusionStatus = "4" Then
IntrusionStatus = "Warning"
ElseIf IntrusionStatus = "5" Then
IntrusionStatus = "Error"
End If
Dim oAPI, oBag
Set oAPI = CreateObject("MOM.ScriptAPI")
Set oBag = oAPI.CreatePropertyBag()
Call oBag.AddValue("Status",IntrusionStatus)
Call oAPI.Return(oBag)
'Call oAPI.LogScriptEvent("Vig5",399,1,"IntrusionStatus=" & IntrusionStatus)
300Property[@Name='Status']EqualOKProperty[@Name='Status']EqualWarningProperty[@Name='Status']EqualCriticalCustom3600ControllerBatteryUnitMonitor.vbs$MPElement$ $Target/Id$ $Config/Computer$ $Target/Host/Property[Type="Dell.Connections.DellStorageController"]/DeviceID$ $Target/Property[Type="Dell.Connections.ControllerBattery"]/ID$
'**********************************************************************************
' Script Name - ControllerBatteryUnitMonitor
' Author: Muralidhar
'
' Description:
' Determine Unit Monitor health for ControllerBattery
'
' (c) Copyright Dell Inc. 2007 - All rights reserved
'**********************************************************************************
Option Explicit
Dim oArgs
Set oArgs = WScript.Arguments
if oArgs.Count < 5 Then
Wscript.Quit -1
End If
Dim oAPI, prmDevice, controllerID
controllerID = oArgs(3)
prmDevice = oArgs(4)
Set oAPI = CreateObject("MOM.ScriptAPI")
Const WAIT_LOOP = 1000000
Const SCRIPT_NAME = "Dell Agents State Monitoring"
Const OM_REPORT_STORAGE_CONTR = "Storage"
Const DEF_OMSA_BIN_PATH = "C:\Program Files\Dell\OpenManage\oma\bin"
Const OMSA_REG_INTALL_PATH = "HKEY_LOCAL_MACHINE\SOFTWARE\Dell Computer Corporation\Dell OMA\InstallPath"
Const OMSA64_REG_INTALL_PATH = "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Dell Computer Corporation\Dell OMA\InstallPath"
Dim ObjectStatus
Dim s
Set s = New DellStorage
s.GetObjectHealth()
Dim cAPI, oBag
Set cAPI = CreateObject("MOM.ScriptAPI")
Set oBag = cAPI.CreatePropertyBag()
Call oBag.AddValue("Status",ObjectStatus)
Call cAPI.Return(oBag)
Set cAPI = Nothing
Set oBag = Nothing
Class DellStorage
Dim RegError, LogMessage, Message
Dim a, b
Dim rc, filespec, oShell
Dim strCommand, strRepFilePath, wintemp_path
Function GetObjectHealth()
Dim OMSABinPath ' Store Path from Registry key
Dim drive ' Drive letter
Dim version
RegError = 0
' Get OMSA Lib Path
rc = GetOMABinPath(OMSABinPath)
If rc <> 0 Then
WScript.Quit()
End If
' Get Install root path
rc = GetOMInstallRoot(drive, OMSABinPath) ' return the current absolute path or the root path for the OMSA Install
If rc <> 0 Then
WScript.Quit()
End If
If RegError = 1 Then
Message = "Task Fail: OMSA not installed / OMSA Registry Value not found."
MOMDebugLog Message
WScript.Quit()
End If
' Check VBScript engine version
version = CheckVBScriptEngine()
If version = True OR version = False Then
RunCLI drive, OMSABinPath
Else
Message = "Error: VBScript corrupted/absent. Please Re-Install Windows Script 5.6 on the Agent"
MOMDebugLog Message
WScript.Quit()
End If
End Function
'*****************************************************************
'Function RunCLI
'Routine For CLI VB.Run (For Version < 5.6)
'*****************************************************************
Function RunCLI(ByVal targetDrive, ByVal strOMSABinPath)
Dim guid1
GetTempFolderPath wintemp_path, targetDrive
GetOMReportFileGUID guid1
RunStorageCLI targetDrive, strOMSABinPath
End Function
'*****************************************************************
'GetOMABinPath
'Routine to read the registry to query the OMA Install Path
'*****************************************************************
Function GetOMABinPath(o_sPath)
Dim oShell, tmp
Set oShell = CreateObject ("WScript.Shell")
o_sPath = ""
On Error Resume Next
o_sPath = oShell.RegRead(OMSA_REG_INTALL_PATH)
If o_sPath = "" Then
o_sPath = oShell.RegRead(OMSA64_REG_INTALL_PATH)
End If
If o_sPath = "" Then
tmp = DEF_OMSA_BIN_PATH & "\omreport.exe"
If(bFileExists(tmp)) Then
o_sPath = DEF_OMSA_BIN_PATH
Message = "GetOMABinPath - OMSABinPath is empty, Using Default Existing Path" & DEF_OMSA_BIN_PATH
MOMDebugLog Message
Else
RegError = 1
End If
Else
o_sPath = o_sPath & "\bin"
End If
If Err <> 0 Then
GetOMSABinPath = Err.Number
End If
End Function
'*****************************************************************
'GetOMInstallRoot
'Routine to determine the Drive letter where OMSA is installed
'*****************************************************************
Private Function GetOMInstallRoot(ByRef path, ByVal OMSAInstallPath)
On Error Resume Next
Err.Clear
' Return the root drive of the OMInstall Path
path = Left(OMSAInstallPath, 2)
End Function
'*****************************************************************
'bFileExists
'Routine to determine if the OMSA Report file is created
'*****************************************************************
Function bFileExists(filespec1)
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
bFileExists = (fso.FileExists(filespec1))
Set fso = Nothing
End Function
'*****************************************************************
'DelFile
'Routine to delete the OMSA Report file
'*****************************************************************
Function DelFile(ByVal filespec2)
Dim fso
If bFileExists(filespec2) Then
Set fso = CreateObject("Scripting.FileSystemObject")
fso.DeleteFile filespec2, True
Set fso = Nothing
End If
If Err <> 0 Then
DelFile = Err.Number
End If
End Function
'**********************************************************
' CheckVBScriptEngine()
' Check VBScript engine version:
'**********************************************************
Function CheckVBScriptEngine()
Dim bIsCompatV, var
Const VBSCRIPT_MIN_VERSION = 5.6
var = ScriptEngineMajorVersion & "." & ScriptEngineMinorVersion
If (CInt(var)) < VBSCRIPT_MIN_VERSION Then
bIsCompatV = False
Else
bIsCompatV = True
End If
If Err <> 0 Then
CheckVBScriptEngine = Err.Number
Else
CheckVBScriptEngine = bIsCompatV
End If
End Function
'*****************************************************************
'Function RunStorageCLI - Called from RunCLI
'Routine For VB.Run (For Version < 5.6)
'*****************************************************************
Function RunStorageCLI (ByVal Drive2, ByVal OMSABinPath)
Dim guid22
GetTempFolderPath wintemp_path, Drive2
GetOMReportFileGUID guid22
a = 1
b = 0
strRepFilePath = wintemp_path & "\" & OM_REPORT_STORAGE_CONTR & guid22 & ".xml"
strCommand = "cmd /C " & chr(34) & OMSABinPath & "\" & "omreport.exe" & Chr(34) & " storage battery controller=" & controllerID & " -fmt xml -outc " & strRepFilePath
filespec = strRepFilePath
Set oShell = CreateObject ("WScript.Shell")
rc = oShell.run (strCommand,0,true)
If rc <> 0 Then
DelFile(strRepFilePath)
Else
' Infinite Loop Until file OM_REPORT_FILE_NAME is created
Do While bFileExists(filespec) <> -1
WScript.Sleep(0)
a = a + 1
b = a Mod WAIT_LOOP
If b = 0 Then
MOMDebugLog "Exit RunCmd. Reason: OMREPORT STORAGE not responding for " & WAIT_LOOP & " loops."
Exit Do
End If
Loop
' Parse XML File
ParseStorageXML filespec
' Clean up the CLI Output : Delete OM_REPORT_FILE_NAME for STORAGE
DelFile(strRepFilePath)
End If ' End of If Condition for rc<>0 for oshell.run(omreport storage controller)
Set strRepFilePath = Nothing
Set strCommand = Nothing
Set oShell = Nothing
Set filespec = Nothing
End Function
'*****************************************************************
' Function ParseStorageXML
' Rollup GlobalStorageHealth from OMSS StorageController XML Output
'*****************************************************************
Function ParseStorageXML(ByVal storagefilepath)
Dim object_health, object_arr
Dim obj, obj_val
Dim xmlDoc, i
If(bFileExists(storagefilepath)) Then
Set xmlDoc = CreateObject("Microsoft.XMLDOM")
If (IsObject(xmlDoc) = True) Then
xmlDoc.async = "false"
xmlDoc.load(storagefilepath)
If (xmlDoc.parseError.errorCode <> 0) Then
Dim myErr
Set myErr = xmlDoc.parseError
Message = "XML Parse Error Reason: " & myErr.reason
MOMDebugLog Message
Message = "XML Parse Error Line: " & myErr.line
MOMDebugLog Message
Message = "XML Parse Error Character: " & myErr.linepos
MOMDebugLog Message
Message = "XML Parse Error Text: " & myErr.srcText
MOMDebugLog Message
DelFile(storagefilepath)
Exit Function
End If
Set object_arr = xmlDoc.getElementsByTagName("TreeStatus")
Set obj = xmlDoc.getElementsByTagName("BatteryID")
object_health = 0
For i = 0 To (object_arr.length - 1)
object_health = object_arr.Item(i).nodeTypedValue
If (obj.length > 0) Then
obj_val = obj.Item(i).nodeTypedValue
If (StrComp(prmDevice,obj_val,1)=0) Then
If object_health = 2 Then
ObjectStatus = "OK"
ElseIf object_health = 3 Then
ObjectStatus = "Warning"
ElseIf object_health = 4 Then
ObjectStatus = "Error"
End If
End If
Else
ObjectStatus = "OK"
End If
Next
Else
Message = "Error: DOM object not created using CreateObject - Microsoft.XMLDOM"
MOMDebugLog Message
End If
Else
Message = "Storage CLI XML Output File does not exist - " & storagefilepath
MOMDebugLog Message
End If
End Function
'*****************************************************************
' Function MOMDebugLog
' Add LogMessage Header - ScriptName and Time and Logging it.
'*****************************************************************
Function MOMDebugLog (ByVal strMessage)
LogMessage = "(" & SCRIPT_NAME & ")" & "-" & "[" & Now() & "] --- "
LogMessage = LogMessage & strMessage
End Function
'*****************************************************************
'GetTempFolderPath
'Routine to Get Win Temp Folder path
'*****************************************************************
Function GetTempFolderPath(ByRef WinTempFolder, ByVal drive_letter)
Dim FldrExistFlag, fso
FldrExistFlag = False
dim wshShell : Set wshShell = Createobject("WScript.Shell")
dim wshSysEnv : Set wshSysEnv = wshShell.Environment
dim strSysTempFolder : strSysTempFolder = wshSysEnv("TEMP")
dim wshPrcEnv : Set wshPrcEnv = wshShell.Environment("Process")
strSysTempFolder = Replace(strSysTempFolder, "%SystemRoot%", wshPrcEnv("SYSTEMROOT"), 1, -1, vbTextCompare)
WinTempFolder = strSysTempFolder
Set fso = CreateObject("Scripting.FileSystemObject")
If (fso.FolderExists(WinTempFolder)) Then
FldrExistFlag = True
Else
FldrExistFlag = False
End If
If WinTempFolder = "" OR FldrExistFlag = False Then
WinTempFolder = drive_letter
End If
Set wshShell = Nothing
Set wshSysEnv = Nothing
Set strSysTempFolder = Nothing
Set wshPrcEnv = Nothing
If Err <> 0 Then
GetTempFolderPath = Err.Number
End If
End Function
'*****************************************************************
'GetOMReportFileGUID
'Routine to generate unique GUIDs for OMREPORT FILE
'*****************************************************************
Function GetOMReportFileGUID(ByRef o_guid)
Dim TypeLib, NewGUID
Set TypeLib = CreateObject("Scriptlet.TypeLib")
NewGUID = TypeLib.Guid
o_guid = (left(NewGUID, len(NewGUID)-2))
Set TypeLib = Nothing
End Function
End Class
300Property[@Name='Status']EqualErrorProperty[@Name='Status']EqualWarningProperty[@Name='Status']EqualOKCustom3600ControllerVirtualDiskUnitMonitor.vbs$MPElement$ $Target/Id$ $Config/Computer$ $Target/Host/Property[Type="Dell.Connections.DellStorageController"]/DeviceID$ $Target/Property[Type="System!System.Entity"]/DisplayName$
'**********************************************************************************
' Script Name - ControllerVirtualDiskUnitMonitor
' Author: Muralidhar
'
' Description:
' Determine Unit Monitor health for ControllerVirtualDisk
'
' (c) Copyright Dell Inc. 2007 - All rights reserved
'**********************************************************************************
Option Explicit
Dim oArgs
Set oArgs = WScript.Arguments
if oArgs.Count < 5 Then
Wscript.Quit -1
End If
Dim oAPI, prmDevice, controllerID
controllerID = oArgs(3)
prmDevice = oArgs(4)
Set oAPI = CreateObject("MOM.ScriptAPI")
Const WAIT_LOOP = 1000000
Const SCRIPT_NAME = "Dell Agents State Monitoring"
Const OM_REPORT_STORAGE_CONTR = "Storage"
Const DEF_OMSA_BIN_PATH = "C:\Program Files\Dell\OpenManage\oma\bin"
Const OMSA_REG_INTALL_PATH = "HKEY_LOCAL_MACHINE\SOFTWARE\Dell Computer Corporation\Dell OMA\InstallPath"
Const OMSA64_REG_INTALL_PATH = "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Dell Computer Corporation\Dell OMA\InstallPath"
Dim ObjectStatus
Dim s
Set s = New DellStorage
s.GetObjectHealth()
Dim cAPI, oBag
Set cAPI = CreateObject("MOM.ScriptAPI")
Set oBag = cAPI.CreatePropertyBag()
Call oBag.AddValue("Status", ObjectStatus)
Call cAPI.Return(oBag)
Set cAPI = Nothing
Set oBag = Nothing
Class DellStorage
Dim RegError, LogMessage, Message
Dim a, b
Dim rc, filespec, oShell
Dim strCommand, strRepFilePath, wintemp_path
Function GetObjectHealth()
Dim OMSABinPath ' Store Path from Registry key
Dim drive ' Drive letter
Dim version
RegError = 0
' Get OMSA Lib Path
rc = GetOMABinPath(OMSABinPath)
If rc <> 0 Then
WScript.Quit()
End If
' Get Install root path
rc = GetOMInstallRoot(drive, OMSABinPath) ' return the current absolute path or the root path for the OMSA Install
If rc <> 0 Then
WScript.Quit()
End If
If RegError = 1 Then
Message = "Task Fail: OMSA not installed / OMSA Registry Value not found."
MOMDebugLog Message
WScript.Quit()
End If
' Check VBScript engine version
version = CheckVBScriptEngine()
If version = True OR version = False Then
RunCLI drive, OMSABinPath
Else
Message = "Error: VBScript corrupted/absent. Please Re-Install Windows Script 5.6 on the Agent"
MOMDebugLog Message
WScript.Quit()
End If
End Function
'*****************************************************************
'Function RunCLI
'Routine For CLI VB.Run (For Version < 5.6)
'*****************************************************************
Function RunCLI(ByVal targetDrive, ByVal strOMSABinPath)
Dim guid1
GetTempFolderPath wintemp_path, targetDrive
GetOMReportFileGUID guid1
RunStorageCLI targetDrive, strOMSABinPath
End Function
'*****************************************************************
'GetOMABinPath
'Routine to read the registry to query the OMA Install Path
'*****************************************************************
Function GetOMABinPath(o_sPath)
Dim oShell, tmp
Set oShell = CreateObject ("WScript.Shell")
o_sPath = ""
On Error Resume Next
o_sPath = oShell.RegRead(OMSA_REG_INTALL_PATH)
If o_sPath = "" Then
o_sPath = oShell.RegRead(OMSA64_REG_INTALL_PATH)
End If
If o_sPath = "" Then
tmp = DEF_OMSA_BIN_PATH & "\omreport.exe"
If(bFileExists(tmp)) Then
o_sPath = DEF_OMSA_BIN_PATH
Message = "GetOMABinPath - OMSABinPath is empty, Using Default Existing Path" & DEF_OMSA_BIN_PATH
MOMDebugLog Message
Else
RegError = 1
End If
Else
o_sPath = o_sPath & "\bin"
End If
If Err <> 0 Then
GetOMSABinPath = Err.Number
End If
End Function
'*****************************************************************
'GetOMInstallRoot
'Routine to determine the Drive letter where OMSA is installed
'*****************************************************************
Private Function GetOMInstallRoot(ByRef path, ByVal OMSAInstallPath)
On Error Resume Next
Err.Clear
' Return the root drive of the OMInstall Path
path = Left(OMSAInstallPath, 2)
End Function
'*****************************************************************
'bFileExists
'Routine to determine if the OMSA Report file is created
'*****************************************************************
Function bFileExists(filespec1)
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
bFileExists = (fso.FileExists(filespec1))
Set fso = Nothing
End Function
'*****************************************************************
'DelFile
'Routine to delete the OMSA Report file
'*****************************************************************
Function DelFile(ByVal filespec2)
Dim fso
If bFileExists(filespec2) Then
Set fso = CreateObject("Scripting.FileSystemObject")
fso.DeleteFile filespec2, True
Set fso = Nothing
End If
If Err <> 0 Then
DelFile = Err.Number
End If
End Function
'**********************************************************
' CheckVBScriptEngine()
' Check VBScript engine version:
'**********************************************************
Function CheckVBScriptEngine()
Dim bIsCompatV, var
Const VBSCRIPT_MIN_VERSION = 5.6
var = ScriptEngineMajorVersion & "." & ScriptEngineMinorVersion
If (CInt(var)) < VBSCRIPT_MIN_VERSION Then
bIsCompatV = False
Else
bIsCompatV = True
End If
If Err <> 0 Then
CheckVBScriptEngine = Err.Number
Else
CheckVBScriptEngine = bIsCompatV
End If
End Function
'*****************************************************************
'Function RunStorageCLI - Called from RunCLI
'Routine For VB.Run (For Version < 5.6)
'*****************************************************************
Function RunStorageCLI (ByVal Drive2, ByVal OMSABinPath)
Dim guid22
GetTempFolderPath wintemp_path, Drive2
GetOMReportFileGUID guid22
a = 1
b = 0
strRepFilePath = wintemp_path & "\" & OM_REPORT_STORAGE_CONTR & guid22 & ".xml"
strCommand = "cmd /C " & chr(34) & OMSABinPath & "\" & "omreport.exe" & Chr(34) & " storage vdisk controller=" & controllerID & " -fmt xml -outc " & strRepFilePath
filespec = strRepFilePath
Set oShell = CreateObject ("WScript.Shell")
rc = oShell.run (strCommand,0,true)
If rc <> 0 Then
DelFile(strRepFilePath)
Else
' Infinite Loop Until file OM_REPORT_FILE_NAME is created
Do While bFileExists(filespec) <> -1
WScript.Sleep(0)
a = a + 1
b = a Mod WAIT_LOOP
If b = 0 Then
MOMDebugLog "Exit RunCmd. Reason: OMREPORT STORAGE not responding for " & WAIT_LOOP & " loops."
Exit Do
End If
Loop
' Parse XML File
ParseStorageXML filespec
' Clean up the CLI Output : Delete OM_REPORT_FILE_NAME for STORAGE
DelFile(strRepFilePath)
End If ' End of If Condition for rc<>0 for oshell.run(omreport storage controller)
Set strRepFilePath = Nothing
Set strCommand = Nothing
Set oShell = Nothing
Set filespec = Nothing
End Function
'*****************************************************************
' Function ParseStorageXML
' Rollup GlobalStorageHealth from OMSS StorageController XML Output
'*****************************************************************
Function ParseStorageXML(ByVal storagefilepath)
Dim object_health, object_arr
Dim obj, obj_val
Dim xmlDoc, i
If(bFileExists(storagefilepath)) Then
Set xmlDoc = CreateObject("Microsoft.XMLDOM")
If (IsObject(xmlDoc) = True) Then
xmlDoc.async = "false"
xmlDoc.load(storagefilepath)
If (xmlDoc.parseError.errorCode <> 0) Then
Dim myErr
Set myErr = xmlDoc.parseError
Message = "XML Parse Error Reason: " & myErr.reason
MOMDebugLog Message
Message = "XML Parse Error Line: " & myErr.line
MOMDebugLog Message
Message = "XML Parse Error Character: " & myErr.linepos
MOMDebugLog Message
Message = "XML Parse Error Text: " & myErr.srcText
MOMDebugLog Message
DelFile(storagefilepath)
Exit Function
End If
Set object_arr = xmlDoc.getElementsByTagName("TreeStatus")
Set obj = xmlDoc.getElementsByTagName("Name")
object_health = 0
For i = 0 To (object_arr.length - 1)
object_health = object_arr.Item(i).nodeTypedValue
If (obj.length > 0) Then
obj_val = obj.Item(i).nodeTypedValue
If (StrComp(prmDevice,obj_val,1)=0) Then
If object_health = 2 Then
ObjectStatus = "OK"
ElseIf object_health = 3 Then
ObjectStatus = "Warning"
ElseIf object_health = 4 Then
ObjectStatus = "Error"
End If
End If
Else
ObjectStatus = "OK"
End If
Next
Else
Message = "Error: DOM object not created using CreateObject - Microsoft.XMLDOM"
MOMDebugLog Message
End If
Else
Message = "Storage CLI XML Output File does not exist - " & storagefilepath
MOMDebugLog Message
End If
End Function
'*****************************************************************
' Function MOMDebugLog
' Add LogMessage Header - ScriptName and Time and Logging it.
'*****************************************************************
Function MOMDebugLog (ByVal strMessage)
LogMessage = "(" & SCRIPT_NAME & ")" & "-" & "[" & Now() & "] --- "
LogMessage = LogMessage & strMessage
End Function
'*****************************************************************
'GetTempFolderPath
'Routine to Get Win Temp Folder path
'*****************************************************************
Function GetTempFolderPath(ByRef WinTempFolder, ByVal drive_letter)
Dim FldrExistFlag, fso
FldrExistFlag = False
dim wshShell : Set wshShell = Createobject("WScript.Shell")
dim wshSysEnv : Set wshSysEnv = wshShell.Environment
dim strSysTempFolder : strSysTempFolder = wshSysEnv("TEMP")
dim wshPrcEnv : Set wshPrcEnv = wshShell.Environment("Process")
strSysTempFolder = Replace(strSysTempFolder, "%SystemRoot%", wshPrcEnv("SYSTEMROOT"), 1, -1, vbTextCompare)
WinTempFolder = strSysTempFolder
Set fso = CreateObject("Scripting.FileSystemObject")
If (fso.FolderExists(WinTempFolder)) Then
FldrExistFlag = True
Else
FldrExistFlag = False
End If
If WinTempFolder = "" OR FldrExistFlag = False Then
WinTempFolder = drive_letter
End If
Set wshShell = Nothing
Set wshSysEnv = Nothing
Set strSysTempFolder = Nothing
Set wshPrcEnv = Nothing
If Err <> 0 Then
GetTempFolderPath = Err.Number
End If
End Function
'*****************************************************************
'GetOMReportFileGUID
'Routine to generate unique GUIDs for OMREPORT FILE
'*****************************************************************
Function GetOMReportFileGUID(ByRef o_guid)
Dim TypeLib, NewGUID
Set TypeLib = CreateObject("Scriptlet.TypeLib")
NewGUID = TypeLib.Guid
o_guid = (left(NewGUID, len(NewGUID)-2))
Set TypeLib = Nothing
End Function
End Class
300Property[@Name='Status']EqualErrorProperty[@Name='Status']EqualWarningProperty[@Name='Status']EqualOKCustom3600ConnectorPhysicalDiskUnitMonitor.vbs$MPElement$ $Target/Id$ $Config/Computer$ $Target/Host/Host/Property[Type="Dell.Connections.DellStorageController"]/DeviceID$ $Target/Property[Type="Dell.Connections.ConnectorPhysicalDisk"]/SerialNumber$
'**********************************************************************************
' Script Name - ConnectorPhysicalDiskUnitMonitor
' Author: Muralidhar
'
' Description:
' Determine Unit Monitor health for ConnectorPhysicalDisk
'
' (c) Copyright Dell Inc. 2007 - All rights reserved
'**********************************************************************************
Option Explicit
Dim oArgs
Set oArgs = WScript.Arguments
if oArgs.Count < 5 Then
Wscript.Quit -1
End If
Dim oAPI, prmDevice, controllerID
controllerID = oArgs(3)
prmDevice = oArgs(4)
Set oAPI = CreateObject("MOM.ScriptAPI")
Const WAIT_LOOP = 1000000
Const SCRIPT_NAME = "Dell Agents State Monitoring"
Const OM_REPORT_STORAGE_CONTR = "Storage"
Const DEF_OMSA_BIN_PATH = "C:\Program Files\Dell\OpenManage\oma\bin"
Const OMSA_REG_INTALL_PATH = "HKEY_LOCAL_MACHINE\SOFTWARE\Dell Computer Corporation\Dell OMA\InstallPath"
Const OMSA64_REG_INTALL_PATH = "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Dell Computer Corporation\Dell OMA\InstallPath"
Dim ObjectStatus
Dim s
Set s = New DellStorage
s.GetObjectHealth()
Dim cAPI, oBag
Set cAPI = CreateObject("MOM.ScriptAPI")
Set oBag = cAPI.CreatePropertyBag()
Call oBag.AddValue("Status", ObjectStatus)
Call cAPI.Return(oBag)
Set cAPI = Nothing
Set oBag = Nothing
Class DellStorage
Dim RegError, LogMessage, Message
Dim a, b
Dim rc, filespec, oShell
Dim strCommand, strRepFilePath, wintemp_path
Function GetObjectHealth()
Dim OMSABinPath ' Store Path from Registry key
Dim drive ' Drive letter
Dim version
RegError = 0
' Get OMSA Lib Path
rc = GetOMABinPath(OMSABinPath)
If rc <> 0 Then
WScript.Quit()
End If
' Get Install root path
rc = GetOMInstallRoot(drive, OMSABinPath) ' return the current absolute path or the root path for the OMSA Install
If rc <> 0 Then
WScript.Quit()
End If
If RegError = 1 Then
Message = "Task Fail: OMSA not installed / OMSA Registry Value not found."
MOMDebugLog Message
WScript.Quit()
End If
' Check VBScript engine version
version = CheckVBScriptEngine()
If version = True OR version = False Then
RunCLI drive, OMSABinPath
Else
Message = "Error: VBScript corrupted/absent. Please Re-Install Windows Script 5.6 on the Agent"
MOMDebugLog Message
WScript.Quit()
End If
End Function
'*****************************************************************
'Function RunCLI
'Routine For CLI VB.Run (For Version < 5.6)
'*****************************************************************
Function RunCLI(ByVal targetDrive, ByVal strOMSABinPath)
Dim guid1
GetTempFolderPath wintemp_path, targetDrive
GetOMReportFileGUID guid1
RunStorageCLI targetDrive, strOMSABinPath
End Function
'*****************************************************************
'GetOMABinPath
'Routine to read the registry to query the OMA Install Path
'*****************************************************************
Function GetOMABinPath(o_sPath)
Dim oShell, tmp
Set oShell = CreateObject ("WScript.Shell")
o_sPath = ""
On Error Resume Next
o_sPath = oShell.RegRead(OMSA_REG_INTALL_PATH)
If o_sPath = "" Then
o_sPath = oShell.RegRead(OMSA64_REG_INTALL_PATH)
End If
If o_sPath = "" Then
tmp = DEF_OMSA_BIN_PATH & "\omreport.exe"
If(bFileExists(tmp)) Then
o_sPath = DEF_OMSA_BIN_PATH
Message = "GetOMABinPath - OMSABinPath is empty, Using Default Existing Path" & DEF_OMSA_BIN_PATH
MOMDebugLog Message
Else
RegError = 1
End If
Else
o_sPath = o_sPath & "\bin"
End If
If Err <> 0 Then
GetOMSABinPath = Err.Number
End If
End Function
'*****************************************************************
'GetOMInstallRoot
'Routine to determine the Drive letter where OMSA is installed
'*****************************************************************
Private Function GetOMInstallRoot(ByRef path, ByVal OMSAInstallPath)
On Error Resume Next
Err.Clear
' Return the root drive of the OMInstall Path
path = Left(OMSAInstallPath, 2)
End Function
'*****************************************************************
'bFileExists
'Routine to determine if the OMSA Report file is created
'*****************************************************************
Function bFileExists(filespec1)
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
bFileExists = (fso.FileExists(filespec1))
Set fso = Nothing
End Function
'*****************************************************************
'DelFile
'Routine to delete the OMSA Report file
'*****************************************************************
Function DelFile(ByVal filespec2)
Dim fso
If bFileExists(filespec2) Then
Set fso = CreateObject("Scripting.FileSystemObject")
fso.DeleteFile filespec2, True
Set fso = Nothing
End If
If Err <> 0 Then
DelFile = Err.Number
End If
End Function
'**********************************************************
' CheckVBScriptEngine()
' Check VBScript engine version:
'**********************************************************
Function CheckVBScriptEngine()
Dim bIsCompatV, var
Const VBSCRIPT_MIN_VERSION = 5.6
var = ScriptEngineMajorVersion & "." & ScriptEngineMinorVersion
If (CInt(var)) < VBSCRIPT_MIN_VERSION Then
bIsCompatV = False
Else
bIsCompatV = True
End If
If Err <> 0 Then
CheckVBScriptEngine = Err.Number
Else
CheckVBScriptEngine = bIsCompatV
End If
End Function
'*****************************************************************
'Function RunStorageCLI - Called from RunCLI
'Routine For VB.Run (For Version < 5.6)
'*****************************************************************
Function RunStorageCLI (ByVal Drive2, ByVal OMSABinPath)
Dim guid22
GetTempFolderPath wintemp_path, Drive2
GetOMReportFileGUID guid22
a = 1
b = 0
strRepFilePath = wintemp_path & "\" & OM_REPORT_STORAGE_CONTR & guid22 & ".xml"
strCommand = "cmd /C " & chr(34) & OMSABinPath & "\" & "omreport.exe" & Chr(34) & " storage pdisk controller=" & controllerID & " -fmt xml -outc " & strRepFilePath
filespec = strRepFilePath
Set oShell = CreateObject ("WScript.Shell")
rc = oShell.run (strCommand,0,true)
If rc <> 0 Then
DelFile(strRepFilePath)
Else
' Infinite Loop Until file OM_REPORT_FILE_NAME is created
Do While bFileExists(filespec) <> -1
WScript.Sleep(0)
a = a + 1
b = a Mod WAIT_LOOP
If b = 0 Then
MOMDebugLog "Exit RunCmd. Reason: OMREPORT STORAGE not responding for " & WAIT_LOOP & " loops."
Exit Do
End If
Loop
' Parse XML File
ParseStorageXML filespec
' Clean up the CLI Output : Delete OM_REPORT_FILE_NAME for STORAGE
DelFile(strRepFilePath)
End If ' End of If Condition for rc<>0 for oshell.run(omreport storage controller)
Set strRepFilePath = Nothing
Set strCommand = Nothing
Set oShell = Nothing
Set filespec = Nothing
End Function
'*****************************************************************
' Function ParseStorageXML
' Rollup GlobalStorageHealth from OMSS StorageController XML Output
'*****************************************************************
Function ParseStorageXML(ByVal storagefilepath)
Dim object_health, object_arr
Dim obj, obj_val
Dim xmlDoc, i
If(bFileExists(storagefilepath)) Then
Set xmlDoc = CreateObject("Microsoft.XMLDOM")
If (IsObject(xmlDoc) = True) Then
xmlDoc.async = "false"
xmlDoc.load(storagefilepath)
If (xmlDoc.parseError.errorCode <> 0) Then
Dim myErr
Set myErr = xmlDoc.parseError
Message = "XML Parse Error Reason: " & myErr.reason
MOMDebugLog Message
Message = "XML Parse Error Line: " & myErr.line
MOMDebugLog Message
Message = "XML Parse Error Character: " & myErr.linepos
MOMDebugLog Message
Message = "XML Parse Error Text: " & myErr.srcText
MOMDebugLog Message
DelFile(storagefilepath)
Exit Function
End If
Set object_arr = xmlDoc.getElementsByTagName("TreeStatus")
Set obj = xmlDoc.getElementsByTagName("DeviceSerialNumber")
object_health = 0
For i = 0 To (object_arr.length - 1)
object_health = object_arr.Item(i).nodeTypedValue
If (obj.length > 0) Then
obj_val = obj.Item(i).nodeTypedValue
If (StrComp(prmDevice,obj_val,1)=0) Then
If object_health = 2 Then
ObjectStatus = "OK"
ElseIf object_health = 3 Then
ObjectStatus = "Warning"
ElseIf object_health = 4 Then
ObjectStatus = "Error"
End If
End If
Else
ObjectStatus = "OK"
End If
Next
Else
Message = "Error: DOM object not created using CreateObject - Microsoft.XMLDOM"
MOMDebugLog Message
End If
Else
Message = "Storage CLI XML Output File does not exist - " & storagefilepath
MOMDebugLog Message
End If
End Function
'*****************************************************************
' Function MOMDebugLog
' Add LogMessage Header - ScriptName and Time and Logging it.
'*****************************************************************
Function MOMDebugLog (ByVal strMessage)
LogMessage = "(" & SCRIPT_NAME & ")" & "-" & "[" & Now() & "] --- "
LogMessage = LogMessage & strMessage
End Function
'*****************************************************************
'GetTempFolderPath
'Routine to Get Win Temp Folder path
'*****************************************************************
Function GetTempFolderPath(ByRef WinTempFolder, ByVal drive_letter)
Dim FldrExistFlag, fso
FldrExistFlag = False
dim wshShell : Set wshShell = Createobject("WScript.Shell")
dim wshSysEnv : Set wshSysEnv = wshShell.Environment
dim strSysTempFolder : strSysTempFolder = wshSysEnv("TEMP")
dim wshPrcEnv : Set wshPrcEnv = wshShell.Environment("Process")
strSysTempFolder = Replace(strSysTempFolder, "%SystemRoot%", wshPrcEnv("SYSTEMROOT"), 1, -1, vbTextCompare)
WinTempFolder = strSysTempFolder
Set fso = CreateObject("Scripting.FileSystemObject")
If (fso.FolderExists(WinTempFolder)) Then
FldrExistFlag = True
Else
FldrExistFlag = False
End If
If WinTempFolder = "" OR FldrExistFlag = False Then
WinTempFolder = drive_letter
End If
Set wshShell = Nothing
Set wshSysEnv = Nothing
Set strSysTempFolder = Nothing
Set wshPrcEnv = Nothing
If Err <> 0 Then
GetTempFolderPath = Err.Number
End If
End Function
'*****************************************************************
'GetOMReportFileGUID
'Routine to generate unique GUIDs for OMREPORT FILE
'*****************************************************************
Function GetOMReportFileGUID(ByRef o_guid)
Dim TypeLib, NewGUID
Set TypeLib = CreateObject("Scriptlet.TypeLib")
NewGUID = TypeLib.Guid
o_guid = (left(NewGUID, len(NewGUID)-2))
Set TypeLib = Nothing
End Function
End Class
300Property[@Name='Status']EqualErrorProperty[@Name='Status']EqualWarningProperty[@Name='Status']EqualOKCustom3600EnclosurePhysicalDiskUnitMonitor.vbs$MPElement$ $Target/Id$ $Config/Computer$ $Target/Host/Host/Host/Property[Type="Dell.Connections.DellStorageController"]/DeviceID$ $Target/Property[Type="Dell.Connections.EnclosurePhysicalDisk"]/SerialNumber$
'**********************************************************************************
' Script Name - EnclosurePhysicalDiskUnitMonitor
' Author: Muralidhar
'
' Description:
' Determine Unit Monitor health for EnclosurePhysicalDisk
'
' (c) Copyright Dell Inc. 2007 - All rights reserved
'**********************************************************************************
Option Explicit
Dim oArgs
Set oArgs = WScript.Arguments
if oArgs.Count < 5 Then
Wscript.Quit -1
End If
Dim oAPI, prmDevice, controllerID
controllerID = oArgs(3)
prmDevice = oArgs(4)
Set oAPI = CreateObject("MOM.ScriptAPI")
Const WAIT_LOOP = 1000000
Const SCRIPT_NAME = "Dell Agents State Monitoring"
Const OM_REPORT_STORAGE_CONTR = "Storage"
Const DEF_OMSA_BIN_PATH = "C:\Program Files\Dell\OpenManage\oma\bin"
Const OMSA_REG_INTALL_PATH = "HKEY_LOCAL_MACHINE\SOFTWARE\Dell Computer Corporation\Dell OMA\InstallPath"
Const OMSA64_REG_INTALL_PATH = "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Dell Computer Corporation\Dell OMA\InstallPath"
Dim ObjectStatus
Dim s
Set s = New DellStorage
s.GetObjectHealth()
Dim cAPI, oBag
Set cAPI = CreateObject("MOM.ScriptAPI")
Set oBag = cAPI.CreatePropertyBag()
Call oBag.AddValue("Status", ObjectStatus)
Call cAPI.Return(oBag)
Set cAPI = Nothing
Set oBag = Nothing
Class DellStorage
Dim RegError, LogMessage, Message
Dim a, b
Dim rc, filespec, oShell
Dim strCommand, strRepFilePath, wintemp_path
Function GetObjectHealth()
Dim OMSABinPath ' Store Path from Registry key
Dim drive ' Drive letter
Dim version
RegError = 0
' Get OMSA Lib Path
rc = GetOMABinPath(OMSABinPath)
If rc <> 0 Then
WScript.Quit()
End If
' Get Install root path
rc = GetOMInstallRoot(drive, OMSABinPath) ' return the current absolute path or the root path for the OMSA Install
If rc <> 0 Then
WScript.Quit()
End If
If RegError = 1 Then
Message = "Task Fail: OMSA not installed / OMSA Registry Value not found."
MOMDebugLog Message
WScript.Quit()
End If
' Check VBScript engine version
version = CheckVBScriptEngine()
If version = True OR version = False Then
RunCLI drive, OMSABinPath
Else
Message = "Error: VBScript corrupted/absent. Please Re-Install Windows Script 5.6 on the Agent"
MOMDebugLog Message
WScript.Quit()
End If
End Function
'*****************************************************************
'Function RunCLI
'Routine For CLI VB.Run (For Version < 5.6)
'*****************************************************************
Function RunCLI(ByVal targetDrive, ByVal strOMSABinPath)
Dim guid1
GetTempFolderPath wintemp_path, targetDrive
GetOMReportFileGUID guid1
RunStorageCLI targetDrive, strOMSABinPath
End Function
'*****************************************************************
'GetOMABinPath
'Routine to read the registry to query the OMA Install Path
'*****************************************************************
Function GetOMABinPath(o_sPath)
Dim oShell, tmp
Set oShell = CreateObject ("WScript.Shell")
o_sPath = ""
On Error Resume Next
o_sPath = oShell.RegRead(OMSA_REG_INTALL_PATH)
If o_sPath = "" Then
o_sPath = oShell.RegRead(OMSA64_REG_INTALL_PATH)
End If
If o_sPath = "" Then
tmp = DEF_OMSA_BIN_PATH & "\omreport.exe"
If(bFileExists(tmp)) Then
o_sPath = DEF_OMSA_BIN_PATH
Message = "GetOMABinPath - OMSABinPath is empty, Using Default Existing Path" & DEF_OMSA_BIN_PATH
MOMDebugLog Message
Else
RegError = 1
End If
Else
o_sPath = o_sPath & "\bin"
End If
If Err <> 0 Then
GetOMSABinPath = Err.Number
End If
End Function
'*****************************************************************
'GetOMInstallRoot
'Routine to determine the Drive letter where OMSA is installed
'*****************************************************************
Private Function GetOMInstallRoot(ByRef path, ByVal OMSAInstallPath)
On Error Resume Next
Err.Clear
' Return the root drive of the OMInstall Path
path = Left(OMSAInstallPath, 2)
End Function
'*****************************************************************
'bFileExists
'Routine to determine if the OMSA Report file is created
'*****************************************************************
Function bFileExists(filespec1)
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
bFileExists = (fso.FileExists(filespec1))
Set fso = Nothing
End Function
'*****************************************************************
'DelFile
'Routine to delete the OMSA Report file
'*****************************************************************
Function DelFile(ByVal filespec2)
Dim fso
If bFileExists(filespec2) Then
Set fso = CreateObject("Scripting.FileSystemObject")
fso.DeleteFile filespec2, True
Set fso = Nothing
End If
If Err <> 0 Then
DelFile = Err.Number
End If
End Function
'**********************************************************
' CheckVBScriptEngine()
' Check VBScript engine version:
'**********************************************************
Function CheckVBScriptEngine()
Dim bIsCompatV, var
Const VBSCRIPT_MIN_VERSION = 5.6
var = ScriptEngineMajorVersion & "." & ScriptEngineMinorVersion
If (CInt(var)) < VBSCRIPT_MIN_VERSION Then
bIsCompatV = False
Else
bIsCompatV = True
End If
If Err <> 0 Then
CheckVBScriptEngine = Err.Number
Else
CheckVBScriptEngine = bIsCompatV
End If
End Function
'*****************************************************************
'Function RunStorageCLI - Called from RunCLI
'Routine For VB.Run (For Version < 5.6)
'*****************************************************************
Function RunStorageCLI (ByVal Drive2, ByVal OMSABinPath)
Dim guid22
GetTempFolderPath wintemp_path, Drive2
GetOMReportFileGUID guid22
a = 1
b = 0
strRepFilePath = wintemp_path & "\" & OM_REPORT_STORAGE_CONTR & guid22 & ".xml"
strCommand = "cmd /C " & chr(34) & OMSABinPath & "\" & "omreport.exe" & Chr(34) & " storage pdisk controller=" & controllerID & " -fmt xml -outc " & strRepFilePath
filespec = strRepFilePath
Set oShell = CreateObject ("WScript.Shell")
rc = oShell.run (strCommand,0,true)
If rc <> 0 Then
DelFile(strRepFilePath)
Else
' Infinite Loop Until file OM_REPORT_FILE_NAME is created
Do While bFileExists(filespec) <> -1
WScript.Sleep(0)
a = a + 1
b = a Mod WAIT_LOOP
If b = 0 Then
MOMDebugLog "Exit RunCmd. Reason: OMREPORT STORAGE not responding for " & WAIT_LOOP & " loops."
Exit Do
End If
Loop
' Parse XML File
ParseStorageXML filespec
' Clean up the CLI Output : Delete OM_REPORT_FILE_NAME for STORAGE
DelFile(strRepFilePath)
End If ' End of If Condition for rc<>0 for oshell.run(omreport storage controller)
Set strRepFilePath = Nothing
Set strCommand = Nothing
Set oShell = Nothing
Set filespec = Nothing
End Function
'*****************************************************************
' Function ParseStorageXML
' Rollup GlobalStorageHealth from OMSS StorageController XML Output
'*****************************************************************
Function ParseStorageXML(ByVal storagefilepath)
Dim object_health, object_arr
Dim obj, obj_val
Dim xmlDoc, i
If(bFileExists(storagefilepath)) Then
Set xmlDoc = CreateObject("Microsoft.XMLDOM")
If (IsObject(xmlDoc) = True) Then
xmlDoc.async = "false"
xmlDoc.load(storagefilepath)
If (xmlDoc.parseError.errorCode <> 0) Then
Dim myErr
Set myErr = xmlDoc.parseError
Message = "XML Parse Error Reason: " & myErr.reason
MOMDebugLog Message
Message = "XML Parse Error Line: " & myErr.line
MOMDebugLog Message
Message = "XML Parse Error Character: " & myErr.linepos
MOMDebugLog Message
Message = "XML Parse Error Text: " & myErr.srcText
MOMDebugLog Message
DelFile(storagefilepath)
Exit Function
End If
Set object_arr = xmlDoc.getElementsByTagName("TreeStatus")
Set obj = xmlDoc.getElementsByTagName("DeviceSerialNumber")
object_health = 0
For i = 0 To (object_arr.length - 1)
object_health = object_arr.Item(i).nodeTypedValue
If (obj.length > 0) Then
obj_val = obj.Item(i).nodeTypedValue
If (StrComp(prmDevice,obj_val,1)=0) Then
If object_health = 2 Then
ObjectStatus = "OK"
ElseIf object_health = 3 Then
ObjectStatus = "Warning"
ElseIf object_health = 4 Then
ObjectStatus = "Error"
End If
End If
Else
ObjectStatus = "OK"
End If
Next
Else
Message = "Error: DOM object not created using CreateObject - Microsoft.XMLDOM"
MOMDebugLog Message
End If
Else
Message = "Storage CLI XML Output File does not exist - " & storagefilepath
MOMDebugLog Message
End If
End Function
'*****************************************************************
' Function MOMDebugLog
' Add LogMessage Header - ScriptName and Time and Logging it.
'*****************************************************************
Function MOMDebugLog (ByVal strMessage)
LogMessage = "(" & SCRIPT_NAME & ")" & "-" & "[" & Now() & "] --- "
LogMessage = LogMessage & strMessage
End Function
'*****************************************************************
'GetTempFolderPath
'Routine to Get Win Temp Folder path
'*****************************************************************
Function GetTempFolderPath(ByRef WinTempFolder, ByVal drive_letter)
Dim FldrExistFlag, fso
FldrExistFlag = False
dim wshShell : Set wshShell = Createobject("WScript.Shell")
dim wshSysEnv : Set wshSysEnv = wshShell.Environment
dim strSysTempFolder : strSysTempFolder = wshSysEnv("TEMP")
dim wshPrcEnv : Set wshPrcEnv = wshShell.Environment("Process")
strSysTempFolder = Replace(strSysTempFolder, "%SystemRoot%", wshPrcEnv("SYSTEMROOT"), 1, -1, vbTextCompare)
WinTempFolder = strSysTempFolder
Set fso = CreateObject("Scripting.FileSystemObject")
If (fso.FolderExists(WinTempFolder)) Then
FldrExistFlag = True
Else
FldrExistFlag = False
End If
If WinTempFolder = "" OR FldrExistFlag = False Then
WinTempFolder = drive_letter
End If
Set wshShell = Nothing
Set wshSysEnv = Nothing
Set strSysTempFolder = Nothing
Set wshPrcEnv = Nothing
If Err <> 0 Then
GetTempFolderPath = Err.Number
End If
End Function
'*****************************************************************
'GetOMReportFileGUID
'Routine to generate unique GUIDs for OMREPORT FILE
'*****************************************************************
Function GetOMReportFileGUID(ByRef o_guid)
Dim TypeLib, NewGUID
Set TypeLib = CreateObject("Scriptlet.TypeLib")
NewGUID = TypeLib.Guid
o_guid = (left(NewGUID, len(NewGUID)-2))
Set TypeLib = Nothing
End Function
End Class
300Property[@Name='Status']EqualErrorProperty[@Name='Status']EqualWarningProperty[@Name='Status']EqualOKCustom3600EnclosureTemperatureUnitMonitor.vbs$MPElement$ $Target/Id$ $Config/Computer$ $Target/Host/Host/Host/Property[Type="Dell.Connections.DellStorageController"]/DeviceID$ $Target/Host/Property[Type="Dell.Connections.ControllerEnclosure"]/ID$ $Target/Property[Type="Dell.Connections.EnclosureTemperature"]/ID$
'**********************************************************************************
' Script Name - EnclosureTemperatureUnitMonitor
' Author: Muralidhar
'
' Description:
' Determine Unit Monitor health for EnclosureTemperature
'
' (c) Copyright Dell Inc. 2007 - All rights reserved
'**********************************************************************************
Option Explicit
Dim oArgs
Set oArgs = WScript.Arguments
if oArgs.Count < 6 Then
Wscript.Quit -1
End If
Dim oAPI, prmDevice, controllerID, enclosureID
controllerID = oArgs(3)
enclosureID = oArgs(4)
prmDevice = oArgs(5)
Set oAPI = CreateObject("MOM.ScriptAPI")
Const WAIT_LOOP = 1000000
Const SCRIPT_NAME = "Dell Agents State Monitoring"
Const OM_REPORT_STORAGE_CONTR = "Storage"
Const DEF_OMSA_BIN_PATH = "C:\Program Files\Dell\OpenManage\oma\bin"
Const OMSA_REG_INTALL_PATH = "HKEY_LOCAL_MACHINE\SOFTWARE\Dell Computer Corporation\Dell OMA\InstallPath"
Const OMSA64_REG_INTALL_PATH = "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Dell Computer Corporation\Dell OMA\InstallPath"
Dim ObjectStatus
Dim s
Set s = New DellStorage
s.GetObjectHealth()
Dim cAPI, oBag
Set cAPI = CreateObject("MOM.ScriptAPI")
Set oBag = cAPI.CreatePropertyBag()
Call oBag.AddValue("Status", ObjectStatus)
Call cAPI.Return(oBag)
Set cAPI = Nothing
Set oBag = Nothing
Class DellStorage
Dim RegError, LogMessage, Message
Dim a, b
Dim rc, filespec, oShell
Dim strCommand, strRepFilePath, wintemp_path
Function GetObjectHealth()
Dim OMSABinPath ' Store Path from Registry key
Dim drive ' Drive letter
Dim version
RegError = 0
' Get OMSA Lib Path
rc = GetOMABinPath(OMSABinPath)
If rc <> 0 Then
WScript.Quit()
End If
' Get Install root path
rc = GetOMInstallRoot(drive, OMSABinPath) ' return the current absolute path or the root path for the OMSA Install
If rc <> 0 Then
WScript.Quit()
End If
If RegError = 1 Then
Message = "Task Fail: OMSA not installed / OMSA Registry Value not found."
MOMDebugLog Message
WScript.Quit()
End If
' Check VBScript engine version
version = CheckVBScriptEngine()
If version = True OR version = False Then
RunCLI drive, OMSABinPath
Else
Message = "Error: VBScript corrupted/absent. Please Re-Install Windows Script 5.6 on the Agent"
MOMDebugLog Message
WScript.Quit()
End If
End Function
'*****************************************************************
'Function RunCLI
'Routine For CLI VB.Run (For Version < 5.6)
'*****************************************************************
Function RunCLI(ByVal targetDrive, ByVal strOMSABinPath)
Dim guid1
GetTempFolderPath wintemp_path, targetDrive
GetOMReportFileGUID guid1
RunStorageCLI targetDrive, strOMSABinPath
End Function
'*****************************************************************
'GetOMABinPath
'Routine to read the registry to query the OMA Install Path
'*****************************************************************
Function GetOMABinPath(o_sPath)
Dim oShell, tmp
Set oShell = CreateObject ("WScript.Shell")
o_sPath = ""
On Error Resume Next
o_sPath = oShell.RegRead(OMSA_REG_INTALL_PATH)
If o_sPath = "" Then
o_sPath = oShell.RegRead(OMSA64_REG_INTALL_PATH)
End If
If o_sPath = "" Then
tmp = DEF_OMSA_BIN_PATH & "\omreport.exe"
If(bFileExists(tmp)) Then
o_sPath = DEF_OMSA_BIN_PATH
Message = "GetOMABinPath - OMSABinPath is empty, Using Default Existing Path" & DEF_OMSA_BIN_PATH
MOMDebugLog Message
Else
RegError = 1
End If
Else
o_sPath = o_sPath & "\bin"
End If
If Err <> 0 Then
GetOMSABinPath = Err.Number
End If
End Function
'*****************************************************************
'GetOMInstallRoot
'Routine to determine the Drive letter where OMSA is installed
'*****************************************************************
Private Function GetOMInstallRoot(ByRef path, ByVal OMSAInstallPath)
On Error Resume Next
Err.Clear
' Return the root drive of the OMInstall Path
path = Left(OMSAInstallPath, 2)
End Function
'*****************************************************************
'bFileExists
'Routine to determine if the OMSA Report file is created
'*****************************************************************
Function bFileExists(filespec1)
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
bFileExists = (fso.FileExists(filespec1))
Set fso = Nothing
End Function
'*****************************************************************
'DelFile
'Routine to delete the OMSA Report file
'*****************************************************************
Function DelFile(ByVal filespec2)
Dim fso
If bFileExists(filespec2) Then
Set fso = CreateObject("Scripting.FileSystemObject")
fso.DeleteFile filespec2, True
Set fso = Nothing
End If
If Err <> 0 Then
DelFile = Err.Number
End If
End Function
'**********************************************************
' CheckVBScriptEngine()
' Check VBScript engine version:
'**********************************************************
Function CheckVBScriptEngine()
Dim bIsCompatV, var
Const VBSCRIPT_MIN_VERSION = 5.6
var = ScriptEngineMajorVersion & "." & ScriptEngineMinorVersion
If (CInt(var)) < VBSCRIPT_MIN_VERSION Then
bIsCompatV = False
Else
bIsCompatV = True
End If
If Err <> 0 Then
CheckVBScriptEngine = Err.Number
Else
CheckVBScriptEngine = bIsCompatV
End If
End Function
'*****************************************************************
'Function RunStorageCLI - Called from RunCLI
'Routine For VB.Run (For Version < 5.6)
'*****************************************************************
Function RunStorageCLI (ByVal Drive2, ByVal OMSABinPath)
Dim guid22
GetTempFolderPath wintemp_path, Drive2
GetOMReportFileGUID guid22
a = 1
b = 0
strRepFilePath = wintemp_path & "\" & OM_REPORT_STORAGE_CONTR & guid22 & ".xml"
strCommand = "cmd /C " & chr(34) & OMSABinPath & "\" & "omreport.exe" & Chr(34) & " storage enclosure controller=" & controllerID & " enclosure=" & enclosureID & " info=temps -fmt xml -outc " & strRepFilePath
filespec = strRepFilePath
Set oShell = CreateObject ("WScript.Shell")
rc = oShell.run (strCommand,0,true)
If rc <> 0 Then
DelFile(strRepFilePath)
Else
' Infinite Loop Until file OM_REPORT_FILE_NAME is created
Do While bFileExists(filespec) <> -1
WScript.Sleep(0)
a = a + 1
b = a Mod WAIT_LOOP
If b = 0 Then
MOMDebugLog "Exit RunCmd. Reason: OMREPORT STORAGE not responding for " & WAIT_LOOP & " loops."
Exit Do
End If
Loop
' Parse XML File
ParseStorageXML filespec
' Clean up the CLI Output : Delete OM_REPORT_FILE_NAME for STORAGE
DelFile(strRepFilePath)
End If ' End of If Condition for rc<>0 for oshell.run(omreport storage controller)
Set strRepFilePath = Nothing
Set strCommand = Nothing
Set oShell = Nothing
Set filespec = Nothing
End Function
'*****************************************************************
' Function ParseStorageXML
' Rollup GlobalStorageHealth from OMSS StorageController XML Output
'*****************************************************************
Function ParseStorageXML(ByVal storagefilepath)
Dim object_health, object_arr
Dim obj, obj_val
Dim xmlDoc, i
If(bFileExists(storagefilepath)) Then
Set xmlDoc = CreateObject("Microsoft.XMLDOM")
If (IsObject(xmlDoc) = True) Then
xmlDoc.async = "false"
xmlDoc.load(storagefilepath)
If (xmlDoc.parseError.errorCode <> 0) Then
Dim myErr
Set myErr = xmlDoc.parseError
Message = "XML Parse Error Reason: " & myErr.reason
MOMDebugLog Message
Message = "XML Parse Error Line: " & myErr.line
MOMDebugLog Message
Message = "XML Parse Error Character: " & myErr.linepos
MOMDebugLog Message
Message = "XML Parse Error Text: " & myErr.srcText
MOMDebugLog Message
DelFile(storagefilepath)
Exit Function
End If
Set object_arr = xmlDoc.getElementsByTagName("TreeStatus")
Set obj = xmlDoc.getElementsByTagName("Index")
object_health = 0
For i = 0 To (object_arr.length - 1)
object_health = object_arr.Item(i).nodeTypedValue
obj_val = obj.Item(i).nodeTypedValue
If StrComp(prmDevice,obj_val,1)=0 Then
If object_health = 2 Then
ObjectStatus = "OK"
ElseIf object_health = 3 Then
ObjectStatus = "Warning"
ElseIf object_health = 4 Then
ObjectStatus = "Error"
End If
End If
Next
Else
Message = "Error: DOM object not created using CreateObject - Microsoft.XMLDOM"
MOMDebugLog Message
End If
Else
Message = "Storage CLI XML Output File does not exist - " & storagefilepath
MOMDebugLog Message
End If
End Function
'*****************************************************************
' Function MOMDebugLog
' Add LogMessage Header - ScriptName and Time and Logging it.
'*****************************************************************
Function MOMDebugLog (ByVal strMessage)
LogMessage = "(" & SCRIPT_NAME & ")" & "-" & "[" & Now() & "] --- "
LogMessage = LogMessage & strMessage
End Function
'*****************************************************************
'GetTempFolderPath
'Routine to Get Win Temp Folder path
'*****************************************************************
Function GetTempFolderPath(ByRef WinTempFolder, ByVal drive_letter)
Dim FldrExistFlag, fso
FldrExistFlag = False
dim wshShell : Set wshShell = Createobject("WScript.Shell")
dim wshSysEnv : Set wshSysEnv = wshShell.Environment
dim strSysTempFolder : strSysTempFolder = wshSysEnv("TEMP")
dim wshPrcEnv : Set wshPrcEnv = wshShell.Environment("Process")
strSysTempFolder = Replace(strSysTempFolder, "%SystemRoot%", wshPrcEnv("SYSTEMROOT"), 1, -1, vbTextCompare)
WinTempFolder = strSysTempFolder
Set fso = CreateObject("Scripting.FileSystemObject")
If (fso.FolderExists(WinTempFolder)) Then
FldrExistFlag = True
Else
FldrExistFlag = False
End If
If WinTempFolder = "" OR FldrExistFlag = False Then
WinTempFolder = drive_letter
End If
Set wshShell = Nothing
Set wshSysEnv = Nothing
Set strSysTempFolder = Nothing
Set wshPrcEnv = Nothing
If Err <> 0 Then
GetTempFolderPath = Err.Number
End If
End Function
'*****************************************************************
'GetOMReportFileGUID
'Routine to generate unique GUIDs for OMREPORT FILE
'*****************************************************************
Function GetOMReportFileGUID(ByRef o_guid)
Dim TypeLib, NewGUID
Set TypeLib = CreateObject("Scriptlet.TypeLib")
NewGUID = TypeLib.Guid
o_guid = (left(NewGUID, len(NewGUID)-2))
Set TypeLib = Nothing
End Function
End Class
300Property[@Name='Status']EqualErrorProperty[@Name='Status']EqualWarningProperty[@Name='Status']EqualOKCustom3600EnclosureFanUnitMonitor.vbs$MPElement$ $Target/Id$ $Config/Computer$ $Target/Host/Host/Host/Property[Type="Dell.Connections.DellStorageController"]/DeviceID$ $Target/Host/Property[Type="Dell.Connections.ControllerEnclosure"]/ID$ $Target/Property[Type="Dell.Connections.EnclosureFan"]/ID$
'**********************************************************************************
' Script Name - EnclosureFanUnitMonitor
' Author: Muralidhar
'
' Description:
' Determine Unit Monitor health for EnclosureFan
'
' (c) Copyright Dell Inc. 2007 - All rights reserved
'**********************************************************************************
Option Explicit
Dim oArgs
Set oArgs = WScript.Arguments
if oArgs.Count < 6 Then
Wscript.Quit -1
End If
Dim oAPI, prmDevice, controllerID, enclosureID
controllerID = oArgs(3)
enclosureID = oArgs(4)
prmDevice = oArgs(5)
Set oAPI = CreateObject("MOM.ScriptAPI")
Const WAIT_LOOP = 1000000
Const SCRIPT_NAME = "Dell Agents State Monitoring"
Const OM_REPORT_STORAGE_CONTR = "Storage"
Const DEF_OMSA_BIN_PATH = "C:\Program Files\Dell\OpenManage\oma\bin"
Const OMSA_REG_INTALL_PATH = "HKEY_LOCAL_MACHINE\SOFTWARE\Dell Computer Corporation\Dell OMA\InstallPath"
Const OMSA64_REG_INTALL_PATH = "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Dell Computer Corporation\Dell OMA\InstallPath"
Dim ObjectStatus
Dim s
Set s = New DellStorage
s.GetObjectHealth()
Dim cAPI, oBag
Set cAPI = CreateObject("MOM.ScriptAPI")
Set oBag = cAPI.CreatePropertyBag()
Call oBag.AddValue("Status", ObjectStatus)
Call cAPI.Return(oBag)
Set cAPI = Nothing
Set oBag = Nothing
Class DellStorage
Dim RegError, LogMessage, Message
Dim a, b
Dim rc, filespec, oShell
Dim strCommand, strRepFilePath, wintemp_path
Function GetObjectHealth()
Dim OMSABinPath ' Store Path from Registry key
Dim drive ' Drive letter
Dim version
RegError = 0
' Get OMSA Lib Path
rc = GetOMABinPath(OMSABinPath)
If rc <> 0 Then
WScript.Quit()
End If
' Get Install root path
rc = GetOMInstallRoot(drive, OMSABinPath) ' return the current absolute path or the root path for the OMSA Install
If rc <> 0 Then
WScript.Quit()
End If
If RegError = 1 Then
Message = "Task Fail: OMSA not installed / OMSA Registry Value not found."
MOMDebugLog Message
WScript.Quit()
End If
' Check VBScript engine version
version = CheckVBScriptEngine()
If version = True OR version = False Then
RunCLI drive, OMSABinPath
Else
Message = "Error: VBScript corrupted/absent. Please Re-Install Windows Script 5.6 on the Agent"
MOMDebugLog Message
WScript.Quit()
End If
End Function
'*****************************************************************
'Function RunCLI
'Routine For CLI VB.Run (For Version < 5.6)
'*****************************************************************
Function RunCLI(ByVal targetDrive, ByVal strOMSABinPath)
Dim guid1
GetTempFolderPath wintemp_path, targetDrive
GetOMReportFileGUID guid1
RunStorageCLI targetDrive, strOMSABinPath
End Function
'*****************************************************************
'GetOMABinPath
'Routine to read the registry to query the OMA Install Path
'*****************************************************************
Function GetOMABinPath(o_sPath)
Dim oShell, tmp
Set oShell = CreateObject ("WScript.Shell")
o_sPath = ""
On Error Resume Next
o_sPath = oShell.RegRead(OMSA_REG_INTALL_PATH)
If o_sPath = "" Then
o_sPath = oShell.RegRead(OMSA64_REG_INTALL_PATH)
End If
If o_sPath = "" Then
tmp = DEF_OMSA_BIN_PATH & "\omreport.exe"
If(bFileExists(tmp)) Then
o_sPath = DEF_OMSA_BIN_PATH
Message = "GetOMABinPath - OMSABinPath is empty, Using Default Existing Path" & DEF_OMSA_BIN_PATH
MOMDebugLog Message
Else
RegError = 1
End If
Else
o_sPath = o_sPath & "\bin"
End If
If Err <> 0 Then
GetOMSABinPath = Err.Number
End If
End Function
'*****************************************************************
'GetOMInstallRoot
'Routine to determine the Drive letter where OMSA is installed
'*****************************************************************
Private Function GetOMInstallRoot(ByRef path, ByVal OMSAInstallPath)
On Error Resume Next
Err.Clear
' Return the root drive of the OMInstall Path
path = Left(OMSAInstallPath, 2)
End Function
'*****************************************************************
'bFileExists
'Routine to determine if the OMSA Report file is created
'*****************************************************************
Function bFileExists(filespec1)
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
bFileExists = (fso.FileExists(filespec1))
Set fso = Nothing
End Function
'*****************************************************************
'DelFile
'Routine to delete the OMSA Report file
'*****************************************************************
Function DelFile(ByVal filespec2)
Dim fso
If bFileExists(filespec2) Then
Set fso = CreateObject("Scripting.FileSystemObject")
fso.DeleteFile filespec2, True
Set fso = Nothing
End If
If Err <> 0 Then
DelFile = Err.Number
End If
End Function
'**********************************************************
' CheckVBScriptEngine()
' Check VBScript engine version:
'**********************************************************
Function CheckVBScriptEngine()
Dim bIsCompatV, var
Const VBSCRIPT_MIN_VERSION = 5.6
var = ScriptEngineMajorVersion & "." & ScriptEngineMinorVersion
If (CInt(var)) < VBSCRIPT_MIN_VERSION Then
bIsCompatV = False
Else
bIsCompatV = True
End If
If Err <> 0 Then
CheckVBScriptEngine = Err.Number
Else
CheckVBScriptEngine = bIsCompatV
End If
End Function
'*****************************************************************
'Function RunStorageCLI - Called from RunCLI
'Routine For VB.Run (For Version < 5.6)
'*****************************************************************
Function RunStorageCLI (ByVal Drive2, ByVal OMSABinPath)
Dim guid22
GetTempFolderPath wintemp_path, Drive2
GetOMReportFileGUID guid22
a = 1
b = 0
strRepFilePath = wintemp_path & "\" & OM_REPORT_STORAGE_CONTR & guid22 & ".xml"
strCommand = "cmd /C " & chr(34) & OMSABinPath & "\" & "omreport.exe" & Chr(34) & " storage enclosure controller=" & controllerID & " enclosure=" & enclosureID & " info=fans -fmt xml -outc " & strRepFilePath
filespec = strRepFilePath
Set oShell = CreateObject ("WScript.Shell")
rc = oShell.run (strCommand,0,true)
If rc <> 0 Then
DelFile(strRepFilePath)
Else
' Infinite Loop Until file OM_REPORT_FILE_NAME is created
Do While bFileExists(filespec) <> -1
WScript.Sleep(0)
a = a + 1
b = a Mod WAIT_LOOP
If b = 0 Then
MOMDebugLog "Exit RunCmd. Reason: OMREPORT STORAGE not responding for " & WAIT_LOOP & " loops."
Exit Do
End If
Loop
' Parse XML File
ParseStorageXML filespec
' Clean up the CLI Output : Delete OM_REPORT_FILE_NAME for STORAGE
DelFile(strRepFilePath)
End If ' End of If Condition for rc<>0 for oshell.run(omreport storage controller)
Set strRepFilePath = Nothing
Set strCommand = Nothing
Set oShell = Nothing
Set filespec = Nothing
End Function
'*****************************************************************
' Function ParseStorageXML
' Rollup GlobalStorageHealth from OMSS StorageController XML Output
'*****************************************************************
Function ParseStorageXML(ByVal storagefilepath)
Dim object_health, object_arr
Dim obj, obj_val
Dim xmlDoc, i
If(bFileExists(storagefilepath)) Then
Set xmlDoc = CreateObject("Microsoft.XMLDOM")
If (IsObject(xmlDoc) = True) Then
xmlDoc.async = "false"
xmlDoc.load(storagefilepath)
If (xmlDoc.parseError.errorCode <> 0) Then
Dim myErr
Set myErr = xmlDoc.parseError
Message = "XML Parse Error Reason: " & myErr.reason
MOMDebugLog Message
Message = "XML Parse Error Line: " & myErr.line
MOMDebugLog Message
Message = "XML Parse Error Character: " & myErr.linepos
MOMDebugLog Message
Message = "XML Parse Error Text: " & myErr.srcText
MOMDebugLog Message
DelFile(storagefilepath)
Exit Function
End If
Set object_arr = xmlDoc.getElementsByTagName("TreeStatus")
Set obj = xmlDoc.getElementsByTagName("Index")
object_health = 0
For i = 0 To (object_arr.length - 1)
object_health = object_arr.Item(i).nodeTypedValue
obj_val = obj.Item(i).nodeTypedValue
If StrComp(prmDevice,obj_val,1)=0 Then
If object_health = 2 Then
ObjectStatus = "OK"
ElseIf object_health = 3 Then
ObjectStatus = "Warning"
ElseIf object_health = 4 Then
ObjectStatus = "Error"
End If
End If
Next
Else
Message = "Error: DOM object not created using CreateObject - Microsoft.XMLDOM"
MOMDebugLog Message
End If
Else
Message = "Storage CLI XML Output File does not exist - " & storagefilepath
MOMDebugLog Message
End If
End Function
'*****************************************************************
' Function MOMDebugLog
' Add LogMessage Header - ScriptName and Time and Logging it.
'*****************************************************************
Function MOMDebugLog (ByVal strMessage)
LogMessage = "(" & SCRIPT_NAME & ")" & "-" & "[" & Now() & "] --- "
LogMessage = LogMessage & strMessage
End Function
'*****************************************************************
'GetTempFolderPath
'Routine to Get Win Temp Folder path
'*****************************************************************
Function GetTempFolderPath(ByRef WinTempFolder, ByVal drive_letter)
Dim FldrExistFlag, fso
FldrExistFlag = False
dim wshShell : Set wshShell = Createobject("WScript.Shell")
dim wshSysEnv : Set wshSysEnv = wshShell.Environment
dim strSysTempFolder : strSysTempFolder = wshSysEnv("TEMP")
dim wshPrcEnv : Set wshPrcEnv = wshShell.Environment("Process")
strSysTempFolder = Replace(strSysTempFolder, "%SystemRoot%", wshPrcEnv("SYSTEMROOT"), 1, -1, vbTextCompare)
WinTempFolder = strSysTempFolder
Set fso = CreateObject("Scripting.FileSystemObject")
If (fso.FolderExists(WinTempFolder)) Then
FldrExistFlag = True
Else
FldrExistFlag = False
End If
If WinTempFolder = "" OR FldrExistFlag = False Then
WinTempFolder = drive_letter
End If
Set wshShell = Nothing
Set wshSysEnv = Nothing
Set strSysTempFolder = Nothing
Set wshPrcEnv = Nothing
If Err <> 0 Then
GetTempFolderPath = Err.Number
End If
End Function
'*****************************************************************
'GetOMReportFileGUID
'Routine to generate unique GUIDs for OMREPORT FILE
'*****************************************************************
Function GetOMReportFileGUID(ByRef o_guid)
Dim TypeLib, NewGUID
Set TypeLib = CreateObject("Scriptlet.TypeLib")
NewGUID = TypeLib.Guid
o_guid = (left(NewGUID, len(NewGUID)-2))
Set TypeLib = Nothing
End Function
End Class
300Property[@Name='Status']EqualErrorProperty[@Name='Status']EqualWarningProperty[@Name='Status']EqualOKCustom3600EnclosureEMMUnitMonitor.vbs$MPElement$ $Target/Id$ $Config/Computer$ $Target/Host/Host/Host/Property[Type="Dell.Connections.DellStorageController"]/DeviceID$ $Target/Host/Property[Type="Dell.Connections.ControllerEnclosure"]/ID$ $Target/Property[Type="Dell.Connections.EnclosureEMM"]/ID$
'**********************************************************************************
' Script Name - EnclosureEMMUnitMonitor
' Author: Muralidhar
'
' Description:
' Determine Unit Monitor health for EnclosureEMM
'
' (c) Copyright Dell Inc. 2007 - All rights reserved
'**********************************************************************************
Option Explicit
Dim oArgs
Set oArgs = WScript.Arguments
if oArgs.Count < 6 Then
Wscript.Quit -1
End If
Dim oAPI, prmDevice, controllerID, enclosureID
controllerID = oArgs(3)
enclosureID = oArgs(4)
prmDevice = oArgs(5)
Set oAPI = CreateObject("MOM.ScriptAPI")
Const WAIT_LOOP = 1000000
Const SCRIPT_NAME = "Dell Agents State Monitoring"
Const OM_REPORT_STORAGE_CONTR = "Storage"
Const DEF_OMSA_BIN_PATH = "C:\Program Files\Dell\OpenManage\oma\bin"
Const OMSA_REG_INTALL_PATH = "HKEY_LOCAL_MACHINE\SOFTWARE\Dell Computer Corporation\Dell OMA\InstallPath"
Const OMSA64_REG_INTALL_PATH = "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Dell Computer Corporation\Dell OMA\InstallPath"
Dim ObjectStatus
Dim s
Set s = New DellStorage
s.GetObjectHealth()
Dim cAPI, oBag
Set cAPI = CreateObject("MOM.ScriptAPI")
Set oBag = cAPI.CreatePropertyBag()
Call oBag.AddValue("Status", ObjectStatus)
Call cAPI.Return(oBag)
Set cAPI = Nothing
Set oBag = Nothing
Class DellStorage
Dim RegError, LogMessage, Message
Dim a, b
Dim rc, filespec, oShell
Dim strCommand, strRepFilePath, wintemp_path
Function GetObjectHealth()
Dim OMSABinPath ' Store Path from Registry key
Dim drive ' Drive letter
Dim version
RegError = 0
' Get OMSA Lib Path
rc = GetOMABinPath(OMSABinPath)
If rc <> 0 Then
WScript.Quit()
End If
' Get Install root path
rc = GetOMInstallRoot(drive, OMSABinPath) ' return the current absolute path or the root path for the OMSA Install
If rc <> 0 Then
WScript.Quit()
End If
If RegError = 1 Then
Message = "Task Fail: OMSA not installed / OMSA Registry Value not found."
MOMDebugLog Message
WScript.Quit()
End If
' Check VBScript engine version
version = CheckVBScriptEngine()
If version = True OR version = False Then
RunCLI drive, OMSABinPath
Else
Message = "Error: VBScript corrupted/absent. Please Re-Install Windows Script 5.6 on the Agent"
MOMDebugLog Message
WScript.Quit()
End If
End Function
'*****************************************************************
'Function RunCLI
'Routine For CLI VB.Run (For Version < 5.6)
'*****************************************************************
Function RunCLI(ByVal targetDrive, ByVal strOMSABinPath)
Dim guid1
GetTempFolderPath wintemp_path, targetDrive
GetOMReportFileGUID guid1
RunStorageCLI targetDrive, strOMSABinPath
End Function
'*****************************************************************
'GetOMABinPath
'Routine to read the registry to query the OMA Install Path
'*****************************************************************
Function GetOMABinPath(o_sPath)
Dim oShell, tmp
Set oShell = CreateObject ("WScript.Shell")
o_sPath = ""
On Error Resume Next
o_sPath = oShell.RegRead(OMSA_REG_INTALL_PATH)
If o_sPath = "" Then
o_sPath = oShell.RegRead(OMSA64_REG_INTALL_PATH)
End If
If o_sPath = "" Then
tmp = DEF_OMSA_BIN_PATH & "\omreport.exe"
If(bFileExists(tmp)) Then
o_sPath = DEF_OMSA_BIN_PATH
Message = "GetOMABinPath - OMSABinPath is empty, Using Default Existing Path" & DEF_OMSA_BIN_PATH
MOMDebugLog Message
Else
RegError = 1
End If
Else
o_sPath = o_sPath & "\bin"
End If
If Err <> 0 Then
GetOMSABinPath = Err.Number
End If
End Function
'*****************************************************************
'GetOMInstallRoot
'Routine to determine the Drive letter where OMSA is installed
'*****************************************************************
Private Function GetOMInstallRoot(ByRef path, ByVal OMSAInstallPath)
On Error Resume Next
Err.Clear
' Return the root drive of the OMInstall Path
path = Left(OMSAInstallPath, 2)
End Function
'*****************************************************************
'bFileExists
'Routine to determine if the OMSA Report file is created
'*****************************************************************
Function bFileExists(filespec1)
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
bFileExists = (fso.FileExists(filespec1))
Set fso = Nothing
End Function
'*****************************************************************
'DelFile
'Routine to delete the OMSA Report file
'*****************************************************************
Function DelFile(ByVal filespec2)
Dim fso
If bFileExists(filespec2) Then
Set fso = CreateObject("Scripting.FileSystemObject")
fso.DeleteFile filespec2, True
Set fso = Nothing
End If
If Err <> 0 Then
DelFile = Err.Number
End If
End Function
'**********************************************************
' CheckVBScriptEngine()
' Check VBScript engine version:
'**********************************************************
Function CheckVBScriptEngine()
Dim bIsCompatV, var
Const VBSCRIPT_MIN_VERSION = 5.6
var = ScriptEngineMajorVersion & "." & ScriptEngineMinorVersion
If (CInt(var)) < VBSCRIPT_MIN_VERSION Then
bIsCompatV = False
Else
bIsCompatV = True
End If
If Err <> 0 Then
CheckVBScriptEngine = Err.Number
Else
CheckVBScriptEngine = bIsCompatV
End If
End Function
'*****************************************************************
'Function RunStorageCLI - Called from RunCLI
'Routine For VB.Run (For Version < 5.6)
'*****************************************************************
Function RunStorageCLI (ByVal Drive2, ByVal OMSABinPath)
Dim guid22
GetTempFolderPath wintemp_path, Drive2
GetOMReportFileGUID guid22
a = 1
b = 0
strRepFilePath = wintemp_path & "\" & OM_REPORT_STORAGE_CONTR & guid22 & ".xml"
strCommand = "cmd /C " & chr(34) & OMSABinPath & "\" & "omreport.exe" & Chr(34) & " storage enclosure controller=" & controllerID & " enclosure=" & enclosureID & " info=emms -fmt xml -outc " & strRepFilePath
filespec = strRepFilePath
Set oShell = CreateObject ("WScript.Shell")
rc = oShell.run (strCommand,0,true)
If rc <> 0 Then
DelFile(strRepFilePath)
Else
' Infinite Loop Until file OM_REPORT_FILE_NAME is created
Do While bFileExists(filespec) <> -1
WScript.Sleep(0)
a = a + 1
b = a Mod WAIT_LOOP
If b = 0 Then
MOMDebugLog "Exit RunCmd. Reason: OMREPORT STORAGE not responding for " & WAIT_LOOP & " loops."
Exit Do
End If
Loop
' Parse XML File
ParseStorageXML filespec
' Clean up the CLI Output : Delete OM_REPORT_FILE_NAME for STORAGE
DelFile(strRepFilePath)
End If ' End of If Condition for rc<>0 for oshell.run(omreport storage controller)
Set strRepFilePath = Nothing
Set strCommand = Nothing
Set oShell = Nothing
Set filespec = Nothing
End Function
'*****************************************************************
' Function ParseStorageXML
' Rollup GlobalStorageHealth from OMSS StorageController XML Output
'*****************************************************************
Function ParseStorageXML(ByVal storagefilepath)
Dim object_health, object_arr
Dim obj, obj_val
Dim xmlDoc, i
If(bFileExists(storagefilepath)) Then
Set xmlDoc = CreateObject("Microsoft.XMLDOM")
If (IsObject(xmlDoc) = True) Then
xmlDoc.async = "false"
xmlDoc.load(storagefilepath)
If (xmlDoc.parseError.errorCode <> 0) Then
Dim myErr
Set myErr = xmlDoc.parseError
Message = "XML Parse Error Reason: " & myErr.reason
MOMDebugLog Message
Message = "XML Parse Error Line: " & myErr.line
MOMDebugLog Message
Message = "XML Parse Error Character: " & myErr.linepos
MOMDebugLog Message
Message = "XML Parse Error Text: " & myErr.srcText
MOMDebugLog Message
DelFile(storagefilepath)
Exit Function
End If
Set object_arr = xmlDoc.getElementsByTagName("TreeStatus")
Set obj = xmlDoc.getElementsByTagName("Index")
object_health = 0
For i = 0 To (object_arr.length - 1)
object_health = object_arr.Item(i).nodeTypedValue
obj_val = obj.Item(i).nodeTypedValue
If StrComp(prmDevice,obj_val,1)=0 Then
If object_health = 2 Then
ObjectStatus = "OK"
ElseIf object_health = 3 Then
ObjectStatus = "Warning"
ElseIf object_health = 4 Then
ObjectStatus = "Error"
End If
End If
Next
Else
Message = "Error: DOM object not created using CreateObject - Microsoft.XMLDOM"
MOMDebugLog Message
End If
Else
Message = "Storage CLI XML Output File does not exist - " & storagefilepath
MOMDebugLog Message
End If
End Function
'*****************************************************************
' Function MOMDebugLog
' Add LogMessage Header - ScriptName and Time and Logging it.
'*****************************************************************
Function MOMDebugLog (ByVal strMessage)
LogMessage = "(" & SCRIPT_NAME & ")" & "-" & "[" & Now() & "] --- "
LogMessage = LogMessage & strMessage
End Function
'*****************************************************************
'GetTempFolderPath
'Routine to Get Win Temp Folder path
'*****************************************************************
Function GetTempFolderPath(ByRef WinTempFolder, ByVal drive_letter)
Dim FldrExistFlag, fso
FldrExistFlag = False
dim wshShell : Set wshShell = Createobject("WScript.Shell")
dim wshSysEnv : Set wshSysEnv = wshShell.Environment
dim strSysTempFolder : strSysTempFolder = wshSysEnv("TEMP")
dim wshPrcEnv : Set wshPrcEnv = wshShell.Environment("Process")
strSysTempFolder = Replace(strSysTempFolder, "%SystemRoot%", wshPrcEnv("SYSTEMROOT"), 1, -1, vbTextCompare)
WinTempFolder = strSysTempFolder
Set fso = CreateObject("Scripting.FileSystemObject")
If (fso.FolderExists(WinTempFolder)) Then
FldrExistFlag = True
Else
FldrExistFlag = False
End If
If WinTempFolder = "" OR FldrExistFlag = False Then
WinTempFolder = drive_letter
End If
Set wshShell = Nothing
Set wshSysEnv = Nothing
Set strSysTempFolder = Nothing
Set wshPrcEnv = Nothing
If Err <> 0 Then
GetTempFolderPath = Err.Number
End If
End Function
'*****************************************************************
'GetOMReportFileGUID
'Routine to generate unique GUIDs for OMREPORT FILE
'*****************************************************************
Function GetOMReportFileGUID(ByRef o_guid)
Dim TypeLib, NewGUID
Set TypeLib = CreateObject("Scriptlet.TypeLib")
NewGUID = TypeLib.Guid
o_guid = (left(NewGUID, len(NewGUID)-2))
Set TypeLib = Nothing
End Function
End Class
300Property[@Name='Status']EqualErrorProperty[@Name='Status']EqualWarningProperty[@Name='Status']EqualOKCustom3600EnclosurePowerSupplyUnitMonitor.vbs$MPElement$ $Target/Id$ $Config/Computer$ $Target/Host/Host/Host/Property[Type="Dell.Connections.DellStorageController"]/DeviceID$ $Target/Host/Property[Type="Dell.Connections.ControllerEnclosure"]/ID$ $Target/Property[Type="Dell.Connections.EnclosurePowerSupply"]/ID$
'**********************************************************************************
' Script Name - EnclosurePowerSupplyUnitMonitor
' Author: Muralidhar
'
' Description:
' Determine Unit Monitor health for EnclosurePowerSupply
'
' (c) Copyright Dell Inc. 2007 - All rights reserved
'**********************************************************************************
Option Explicit
Dim oArgs
Set oArgs = WScript.Arguments
if oArgs.Count < 6 Then
Wscript.Quit -1
End If
Dim oAPI, prmDevice, controllerID, enclosureID
controllerID = oArgs(3)
enclosureID = oArgs(4)
prmDevice = oArgs(5)
Set oAPI = CreateObject("MOM.ScriptAPI")
Const WAIT_LOOP = 1000000
Const SCRIPT_NAME = "Dell Agents State Monitoring"
Const OM_REPORT_STORAGE_CONTR = "Storage"
Const DEF_OMSA_BIN_PATH = "C:\Program Files\Dell\OpenManage\oma\bin"
Const OMSA_REG_INTALL_PATH = "HKEY_LOCAL_MACHINE\SOFTWARE\Dell Computer Corporation\Dell OMA\InstallPath"
Const OMSA64_REG_INTALL_PATH = "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Dell Computer Corporation\Dell OMA\InstallPath"
Dim ObjectStatus
Dim s
Set s = New DellStorage
s.GetObjectHealth()
Dim cAPI, oBag
Set cAPI = CreateObject("MOM.ScriptAPI")
Set oBag = cAPI.CreatePropertyBag()
Call oBag.AddValue("Status", ObjectStatus)
Call cAPI.Return(oBag)
Set cAPI = Nothing
Set oBag = Nothing
Class DellStorage
Dim RegError, LogMessage, Message
Dim a, b
Dim rc, filespec, oShell
Dim strCommand, strRepFilePath, wintemp_path
Function GetObjectHealth()
Dim OMSABinPath ' Store Path from Registry key
Dim drive ' Drive letter
Dim version
RegError = 0
' Get OMSA Lib Path
rc = GetOMABinPath(OMSABinPath)
If rc <> 0 Then
WScript.Quit()
End If
' Get Install root path
rc = GetOMInstallRoot(drive, OMSABinPath) ' return the current absolute path or the root path for the OMSA Install
If rc <> 0 Then
WScript.Quit()
End If
If RegError = 1 Then
Message = "Task Fail: OMSA not installed / OMSA Registry Value not found."
MOMDebugLog Message
WScript.Quit()
End If
' Check VBScript engine version
version = CheckVBScriptEngine()
If version = True OR version = False Then
RunCLI drive, OMSABinPath
Else
Message = "Error: VBScript corrupted/absent. Please Re-Install Windows Script 5.6 on the Agent"
MOMDebugLog Message
WScript.Quit()
End If
End Function
'*****************************************************************
'Function RunCLI
'Routine For CLI VB.Run (For Version < 5.6)
'*****************************************************************
Function RunCLI(ByVal targetDrive, ByVal strOMSABinPath)
Dim guid1
GetTempFolderPath wintemp_path, targetDrive
GetOMReportFileGUID guid1
RunStorageCLI targetDrive, strOMSABinPath
End Function
'*****************************************************************
'GetOMABinPath
'Routine to read the registry to query the OMA Install Path
'*****************************************************************
Function GetOMABinPath(o_sPath)
Dim oShell, tmp
Set oShell = CreateObject ("WScript.Shell")
o_sPath = ""
On Error Resume Next
o_sPath = oShell.RegRead(OMSA_REG_INTALL_PATH)
If o_sPath = "" Then
o_sPath = oShell.RegRead(OMSA64_REG_INTALL_PATH)
End If
If o_sPath = "" Then
tmp = DEF_OMSA_BIN_PATH & "\omreport.exe"
If(bFileExists(tmp)) Then
o_sPath = DEF_OMSA_BIN_PATH
Message = "GetOMABinPath - OMSABinPath is empty, Using Default Existing Path" & DEF_OMSA_BIN_PATH
MOMDebugLog Message
Else
RegError = 1
End If
Else
o_sPath = o_sPath & "\bin"
End If
If Err <> 0 Then
GetOMSABinPath = Err.Number
End If
End Function
'*****************************************************************
'GetOMInstallRoot
'Routine to determine the Drive letter where OMSA is installed
'*****************************************************************
Private Function GetOMInstallRoot(ByRef path, ByVal OMSAInstallPath)
On Error Resume Next
Err.Clear
' Return the root drive of the OMInstall Path
path = Left(OMSAInstallPath, 2)
End Function
'*****************************************************************
'bFileExists
'Routine to determine if the OMSA Report file is created
'*****************************************************************
Function bFileExists(filespec1)
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
bFileExists = (fso.FileExists(filespec1))
Set fso = Nothing
End Function
'*****************************************************************
'DelFile
'Routine to delete the OMSA Report file
'*****************************************************************
Function DelFile(ByVal filespec2)
Dim fso
If bFileExists(filespec2) Then
Set fso = CreateObject("Scripting.FileSystemObject")
fso.DeleteFile filespec2, True
Set fso = Nothing
End If
If Err <> 0 Then
DelFile = Err.Number
End If
End Function
'**********************************************************
' CheckVBScriptEngine()
' Check VBScript engine version:
'**********************************************************
Function CheckVBScriptEngine()
Dim bIsCompatV, var
Const VBSCRIPT_MIN_VERSION = 5.6
var = ScriptEngineMajorVersion & "." & ScriptEngineMinorVersion
If (CInt(var)) < VBSCRIPT_MIN_VERSION Then
bIsCompatV = False
Else
bIsCompatV = True
End If
If Err <> 0 Then
CheckVBScriptEngine = Err.Number
Else
CheckVBScriptEngine = bIsCompatV
End If
End Function
'*****************************************************************
'Function RunStorageCLI - Called from RunCLI
'Routine For VB.Run (For Version < 5.6)
'*****************************************************************
Function RunStorageCLI (ByVal Drive2, ByVal OMSABinPath)
Dim guid22
GetTempFolderPath wintemp_path, Drive2
GetOMReportFileGUID guid22
a = 1
b = 0
strRepFilePath = wintemp_path & "\" & OM_REPORT_STORAGE_CONTR & guid22 & ".xml"
strCommand = "cmd /C " & chr(34) & OMSABinPath & "\" & "omreport.exe" & Chr(34) & " storage enclosure controller=" & controllerID & " enclosure=" & enclosureID & " info=pwrsupplies -fmt xml -outc " & strRepFilePath
filespec = strRepFilePath
Set oShell = CreateObject ("WScript.Shell")
rc = oShell.run (strCommand,0,true)
If rc <> 0 Then
DelFile(strRepFilePath)
Else
' Infinite Loop Until file OM_REPORT_FILE_NAME is created
Do While bFileExists(filespec) <> -1
WScript.Sleep(0)
a = a + 1
b = a Mod WAIT_LOOP
If b = 0 Then
MOMDebugLog "Exit RunCmd. Reason: OMREPORT STORAGE not responding for " & WAIT_LOOP & " loops."
Exit Do
End If
Loop
' Parse XML File
ParseStorageXML filespec
' Clean up the CLI Output : Delete OM_REPORT_FILE_NAME for STORAGE
DelFile(strRepFilePath)
End If ' End of If Condition for rc<>0 for oshell.run(omreport storage controller)
Set strRepFilePath = Nothing
Set strCommand = Nothing
Set oShell = Nothing
Set filespec = Nothing
End Function
'*****************************************************************
' Function ParseStorageXML
' Rollup GlobalStorageHealth from OMSS StorageController XML Output
'*****************************************************************
Function ParseStorageXML(ByVal storagefilepath)
Dim object_health, object_arr
Dim obj, obj_val
Dim xmlDoc, i
If(bFileExists(storagefilepath)) Then
Set xmlDoc = CreateObject("Microsoft.XMLDOM")
If (IsObject(xmlDoc) = True) Then
xmlDoc.async = "false"
xmlDoc.load(storagefilepath)
If (xmlDoc.parseError.errorCode <> 0) Then
Dim myErr
Set myErr = xmlDoc.parseError
Message = "XML Parse Error Reason: " & myErr.reason
MOMDebugLog Message
Message = "XML Parse Error Line: " & myErr.line
MOMDebugLog Message
Message = "XML Parse Error Character: " & myErr.linepos
MOMDebugLog Message
Message = "XML Parse Error Text: " & myErr.srcText
MOMDebugLog Message
DelFile(storagefilepath)
Exit Function
End If
Set object_arr = xmlDoc.getElementsByTagName("TreeStatus")
Set obj = xmlDoc.getElementsByTagName("Index")
object_health = 0
For i = 0 To (object_arr.length - 1)
object_health = object_arr.Item(i).nodeTypedValue
obj_val = obj.Item(i).nodeTypedValue
If StrComp(prmDevice,obj_val,1)=0 Then
If object_health = 2 Then
ObjectStatus = "OK"
ElseIf object_health = 3 Then
ObjectStatus = "Warning"
ElseIf object_health = 4 Then
ObjectStatus = "Error"
End If
End If
Next
Else
Message = "Error: DOM object not created using CreateObject - Microsoft.XMLDOM"
MOMDebugLog Message
End If
Else
Message = "Storage CLI XML Output File does not exist - " & storagefilepath
MOMDebugLog Message
End If
End Function
'*****************************************************************
' Function MOMDebugLog
' Add LogMessage Header - ScriptName and Time and Logging it.
'*****************************************************************
Function MOMDebugLog (ByVal strMessage)
LogMessage = "(" & SCRIPT_NAME & ")" & "-" & "[" & Now() & "] --- "
LogMessage = LogMessage & strMessage
End Function
'*****************************************************************
'GetTempFolderPath
'Routine to Get Win Temp Folder path
'*****************************************************************
Function GetTempFolderPath(ByRef WinTempFolder, ByVal drive_letter)
Dim FldrExistFlag, fso
FldrExistFlag = False
dim wshShell : Set wshShell = Createobject("WScript.Shell")
dim wshSysEnv : Set wshSysEnv = wshShell.Environment
dim strSysTempFolder : strSysTempFolder = wshSysEnv("TEMP")
dim wshPrcEnv : Set wshPrcEnv = wshShell.Environment("Process")
strSysTempFolder = Replace(strSysTempFolder, "%SystemRoot%", wshPrcEnv("SYSTEMROOT"), 1, -1, vbTextCompare)
WinTempFolder = strSysTempFolder
Set fso = CreateObject("Scripting.FileSystemObject")
If (fso.FolderExists(WinTempFolder)) Then
FldrExistFlag = True
Else
FldrExistFlag = False
End If
If WinTempFolder = "" OR FldrExistFlag = False Then
WinTempFolder = drive_letter
End If
Set wshShell = Nothing
Set wshSysEnv = Nothing
Set strSysTempFolder = Nothing
Set wshPrcEnv = Nothing
If Err <> 0 Then
GetTempFolderPath = Err.Number
End If
End Function
'*****************************************************************
'GetOMReportFileGUID
'Routine to generate unique GUIDs for OMREPORT FILE
'*****************************************************************
Function GetOMReportFileGUID(ByRef o_guid)
Dim TypeLib, NewGUID
Set TypeLib = CreateObject("Scriptlet.TypeLib")
NewGUID = TypeLib.Guid
o_guid = (left(NewGUID, len(NewGUID)-2))
Set TypeLib = Nothing
End Function
End Class
300Property[@Name='Status']EqualErrorProperty[@Name='Status']EqualWarningProperty[@Name='Status']EqualOKAvailabilityHealth$Target/Host/Host/Host/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberGreaterEqual2048EventDisplayNumberLessEqual2900PublisherNameEqualServer AdministratorControllerBatteryEventTrigger.vbs$MPElement$ $Target/Id$ $Config/Computer$ $Target/Host/Property[Type="Dell.Connections.DellStorageController"]/DeviceID$ $Target/Property[Type="Dell.Connections.ControllerBattery"]/ID$
'**********************************************************************************
' Script Name - ControllerBatteryEventTrigger
' Author: Muralidhar
'
' Description:
' Determine Unit Monitor health for ControllerBattery
'
' (c) Copyright Dell Inc. 2007 - All rights reserved
'**********************************************************************************
Option Explicit
Dim oArgs
Set oArgs = WScript.Arguments
if oArgs.Count < 5 Then
Wscript.Quit -1
End If
Dim oAPI, prmDevice, controllerID
controllerID = oArgs(3)
prmDevice = oArgs(4)
Set oAPI = CreateObject("MOM.ScriptAPI")
Const WAIT_LOOP = 1000000
Const SCRIPT_NAME = "Dell Agents State Monitoring"
Const OM_REPORT_STORAGE_CONTR = "Storage"
Const DEF_OMSA_BIN_PATH = "C:\Program Files\Dell\OpenManage\oma\bin"
Const OMSA_REG_INTALL_PATH = "HKEY_LOCAL_MACHINE\SOFTWARE\Dell Computer Corporation\Dell OMA\InstallPath"
Const OMSA64_REG_INTALL_PATH = "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Dell Computer Corporation\Dell OMA\InstallPath"
Dim ObjectStatus
Dim s
Set s = New DellStorage
s.GetObjectHealth()
Dim cAPI, oBag
Set cAPI = CreateObject("MOM.ScriptAPI")
Set oBag = cAPI.CreatePropertyBag()
Call oBag.AddValue("Status",ObjectStatus)
Call cAPI.Return(oBag)
Set cAPI = Nothing
Set oBag = Nothing
Class DellStorage
Dim RegError, LogMessage, Message
Dim a, b
Dim rc, filespec, oShell
Dim strCommand, strRepFilePath, wintemp_path
Function GetObjectHealth()
Dim OMSABinPath ' Store Path from Registry key
Dim drive ' Drive letter
Dim version
RegError = 0
' Get OMSA Lib Path
rc = GetOMABinPath(OMSABinPath)
If rc <> 0 Then
WScript.Quit()
End If
' Get Install root path
rc = GetOMInstallRoot(drive, OMSABinPath) ' return the current absolute path or the root path for the OMSA Install
If rc <> 0 Then
WScript.Quit()
End If
If RegError = 1 Then
Message = "Task Fail: OMSA not installed / OMSA Registry Value not found."
MOMDebugLog Message
WScript.Quit()
End If
' Check VBScript engine version
version = CheckVBScriptEngine()
If version = True OR version = False Then
RunCLI drive, OMSABinPath
Else
Message = "Error: VBScript corrupted/absent. Please Re-Install Windows Script 5.6 on the Agent"
MOMDebugLog Message
WScript.Quit()
End If
End Function
'*****************************************************************
'Function RunCLI
'Routine For CLI VB.Run (For Version < 5.6)
'*****************************************************************
Function RunCLI(ByVal targetDrive, ByVal strOMSABinPath)
Dim guid1
GetTempFolderPath wintemp_path, targetDrive
GetOMReportFileGUID guid1
RunStorageCLI targetDrive, strOMSABinPath
End Function
'*****************************************************************
'GetOMABinPath
'Routine to read the registry to query the OMA Install Path
'*****************************************************************
Function GetOMABinPath(o_sPath)
Dim oShell, tmp
Set oShell = CreateObject ("WScript.Shell")
o_sPath = ""
On Error Resume Next
o_sPath = oShell.RegRead(OMSA_REG_INTALL_PATH)
If o_sPath = "" Then
o_sPath = oShell.RegRead(OMSA64_REG_INTALL_PATH)
End If
If o_sPath = "" Then
tmp = DEF_OMSA_BIN_PATH & "\omreport.exe"
If(bFileExists(tmp)) Then
o_sPath = DEF_OMSA_BIN_PATH
Message = "GetOMABinPath - OMSABinPath is empty, Using Default Existing Path" & DEF_OMSA_BIN_PATH
MOMDebugLog Message
Else
RegError = 1
End If
Else
o_sPath = o_sPath & "\bin"
End If
If Err <> 0 Then
GetOMSABinPath = Err.Number
End If
End Function
'*****************************************************************
'GetOMInstallRoot
'Routine to determine the Drive letter where OMSA is installed
'*****************************************************************
Private Function GetOMInstallRoot(ByRef path, ByVal OMSAInstallPath)
On Error Resume Next
Err.Clear
' Return the root drive of the OMInstall Path
path = Left(OMSAInstallPath, 2)
End Function
'*****************************************************************
'bFileExists
'Routine to determine if the OMSA Report file is created
'*****************************************************************
Function bFileExists(filespec1)
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
bFileExists = (fso.FileExists(filespec1))
Set fso = Nothing
End Function
'*****************************************************************
'DelFile
'Routine to delete the OMSA Report file
'*****************************************************************
Function DelFile(ByVal filespec2)
Dim fso
If bFileExists(filespec2) Then
Set fso = CreateObject("Scripting.FileSystemObject")
fso.DeleteFile filespec2, True
Set fso = Nothing
End If
If Err <> 0 Then
DelFile = Err.Number
End If
End Function
'**********************************************************
' CheckVBScriptEngine()
' Check VBScript engine version:
'**********************************************************
Function CheckVBScriptEngine()
Dim bIsCompatV, var
Const VBSCRIPT_MIN_VERSION = 5.6
var = ScriptEngineMajorVersion & "." & ScriptEngineMinorVersion
If (CInt(var)) < VBSCRIPT_MIN_VERSION Then
bIsCompatV = False
Else
bIsCompatV = True
End If
If Err <> 0 Then
CheckVBScriptEngine = Err.Number
Else
CheckVBScriptEngine = bIsCompatV
End If
End Function
'*****************************************************************
'Function RunStorageCLI - Called from RunCLI
'Routine For VB.Run (For Version < 5.6)
'*****************************************************************
Function RunStorageCLI (ByVal Drive2, ByVal OMSABinPath)
Dim guid22
GetTempFolderPath wintemp_path, Drive2
GetOMReportFileGUID guid22
a = 1
b = 0
strRepFilePath = wintemp_path & "\" & OM_REPORT_STORAGE_CONTR & guid22 & ".xml"
strCommand = "cmd /C " & chr(34) & OMSABinPath & "\" & "omreport.exe" & Chr(34) & " storage battery controller=" & controllerID & " -fmt xml -outc " & strRepFilePath
filespec = strRepFilePath
Set oShell = CreateObject ("WScript.Shell")
rc = oShell.run (strCommand,0,true)
If rc <> 0 Then
DelFile(strRepFilePath)
Else
' Infinite Loop Until file OM_REPORT_FILE_NAME is created
Do While bFileExists(filespec) <> -1
WScript.Sleep(0)
a = a + 1
b = a Mod WAIT_LOOP
If b = 0 Then
MOMDebugLog "Exit RunCmd. Reason: OMREPORT STORAGE not responding for " & WAIT_LOOP & " loops."
Exit Do
End If
Loop
' Parse XML File
ParseStorageXML filespec
' Clean up the CLI Output : Delete OM_REPORT_FILE_NAME for STORAGE
DelFile(strRepFilePath)
End If ' End of If Condition for rc<>0 for oshell.run(omreport storage controller)
Set strRepFilePath = Nothing
Set strCommand = Nothing
Set oShell = Nothing
Set filespec = Nothing
End Function
'*****************************************************************
' Function ParseStorageXML
' Rollup GlobalStorageHealth from OMSS StorageController XML Output
'*****************************************************************
Function ParseStorageXML(ByVal storagefilepath)
Dim object_health, object_arr
Dim obj, obj_val
Dim xmlDoc, i
If(bFileExists(storagefilepath)) Then
Set xmlDoc = CreateObject("Microsoft.XMLDOM")
If (IsObject(xmlDoc) = True) Then
xmlDoc.async = "false"
xmlDoc.load(storagefilepath)
If (xmlDoc.parseError.errorCode <> 0) Then
Dim myErr
Set myErr = xmlDoc.parseError
Message = "XML Parse Error Reason: " & myErr.reason
MOMDebugLog Message
Message = "XML Parse Error Line: " & myErr.line
MOMDebugLog Message
Message = "XML Parse Error Character: " & myErr.linepos
MOMDebugLog Message
Message = "XML Parse Error Text: " & myErr.srcText
MOMDebugLog Message
DelFile(storagefilepath)
Exit Function
End If
Set object_arr = xmlDoc.getElementsByTagName("TreeStatus")
Set obj = xmlDoc.getElementsByTagName("BatteryID")
object_health = 0
For i = 0 To (object_arr.length - 1)
object_health = object_arr.Item(i).nodeTypedValue
If (obj.length > 0) Then
obj_val = obj.Item(i).nodeTypedValue
If (StrComp(prmDevice,obj_val,1)=0) Then
If object_health = 2 Then
ObjectStatus = "OK"
ElseIf object_health = 3 Then
ObjectStatus = "Warning"
ElseIf object_health = 4 Then
ObjectStatus = "Error"
End If
End If
Else
ObjectStatus = "OK"
End If
Next
Else
Message = "Error: DOM object not created using CreateObject - Microsoft.XMLDOM"
MOMDebugLog Message
End If
Else
Message = "Storage CLI XML Output File does not exist - " & storagefilepath
MOMDebugLog Message
End If
End Function
'*****************************************************************
' Function MOMDebugLog
' Add LogMessage Header - ScriptName and Time and Logging it.
'*****************************************************************
Function MOMDebugLog (ByVal strMessage)
LogMessage = "(" & SCRIPT_NAME & ")" & "-" & "[" & Now() & "] --- "
LogMessage = LogMessage & strMessage
End Function
'*****************************************************************
'GetTempFolderPath
'Routine to Get Win Temp Folder path
'*****************************************************************
Function GetTempFolderPath(ByRef WinTempFolder, ByVal drive_letter)
Dim FldrExistFlag, fso
FldrExistFlag = False
dim wshShell : Set wshShell = Createobject("WScript.Shell")
dim wshSysEnv : Set wshSysEnv = wshShell.Environment
dim strSysTempFolder : strSysTempFolder = wshSysEnv("TEMP")
dim wshPrcEnv : Set wshPrcEnv = wshShell.Environment("Process")
strSysTempFolder = Replace(strSysTempFolder, "%SystemRoot%", wshPrcEnv("SYSTEMROOT"), 1, -1, vbTextCompare)
WinTempFolder = strSysTempFolder
Set fso = CreateObject("Scripting.FileSystemObject")
If (fso.FolderExists(WinTempFolder)) Then
FldrExistFlag = True
Else
FldrExistFlag = False
End If
If WinTempFolder = "" OR FldrExistFlag = False Then
WinTempFolder = drive_letter
End If
Set wshShell = Nothing
Set wshSysEnv = Nothing
Set strSysTempFolder = Nothing
Set wshPrcEnv = Nothing
If Err <> 0 Then
GetTempFolderPath = Err.Number
End If
End Function
'*****************************************************************
'GetOMReportFileGUID
'Routine to generate unique GUIDs for OMREPORT FILE
'*****************************************************************
Function GetOMReportFileGUID(ByRef o_guid)
Dim TypeLib, NewGUID
Set TypeLib = CreateObject("Scriptlet.TypeLib")
NewGUID = TypeLib.Guid
o_guid = (left(NewGUID, len(NewGUID)-2))
Set TypeLib = Nothing
End Function
End Class
300Property[@Name='Status']EqualOKProperty[@Name='Status']EqualWarningProperty[@Name='Status']EqualCriticalAvailabilityHealth$Target/Host/Host/Host/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberGreaterEqual2048EventDisplayNumberLessEqual2900PublisherNameEqualServer AdministratorControllerVirtualDiskEventTrigger.vbs$MPElement$ $Target/Id$ $Config/Computer$ $Target/Host/Property[Type="Dell.Connections.DellStorageController"]/DeviceID$ $Target/Property[Type="System!System.Entity"]/DisplayName$
'**********************************************************************************
' Script Name - ControllerVirtualDiskEventTrigger
' Author: Muralidhar
'
' Description:
' Determine Unit Monitor health for ControllerVirtualDisk
'
' (c) Copyright Dell Inc. 2007 - All rights reserved
'**********************************************************************************
Option Explicit
Dim oArgs
Set oArgs = WScript.Arguments
if oArgs.Count < 5 Then
Wscript.Quit -1
End If
Dim oAPI, prmDevice, controllerID
controllerID = oArgs(3)
prmDevice = oArgs(4)
Set oAPI = CreateObject("MOM.ScriptAPI")
Const WAIT_LOOP = 1000000
Const SCRIPT_NAME = "Dell Agents State Monitoring"
Const OM_REPORT_STORAGE_CONTR = "Storage"
Const DEF_OMSA_BIN_PATH = "C:\Program Files\Dell\OpenManage\oma\bin"
Const OMSA_REG_INTALL_PATH = "HKEY_LOCAL_MACHINE\SOFTWARE\Dell Computer Corporation\Dell OMA\InstallPath"
Const OMSA64_REG_INTALL_PATH = "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Dell Computer Corporation\Dell OMA\InstallPath"
Dim ObjectStatus
Dim s
Set s = New DellStorage
s.GetObjectHealth()
Dim cAPI, oBag
Set cAPI = CreateObject("MOM.ScriptAPI")
Set oBag = cAPI.CreatePropertyBag()
Call oBag.AddValue("Status", ObjectStatus)
Call cAPI.Return(oBag)
Set cAPI = Nothing
Set oBag = Nothing
Class DellStorage
Dim RegError, LogMessage, Message
Dim a, b
Dim rc, filespec, oShell
Dim strCommand, strRepFilePath, wintemp_path
Function GetObjectHealth()
Dim OMSABinPath ' Store Path from Registry key
Dim drive ' Drive letter
Dim version
RegError = 0
' Get OMSA Lib Path
rc = GetOMABinPath(OMSABinPath)
If rc <> 0 Then
WScript.Quit()
End If
' Get Install root path
rc = GetOMInstallRoot(drive, OMSABinPath) ' return the current absolute path or the root path for the OMSA Install
If rc <> 0 Then
WScript.Quit()
End If
If RegError = 1 Then
Message = "Task Fail: OMSA not installed / OMSA Registry Value not found."
MOMDebugLog Message
WScript.Quit()
End If
' Check VBScript engine version
version = CheckVBScriptEngine()
If version = True OR version = False Then
RunCLI drive, OMSABinPath
Else
Message = "Error: VBScript corrupted/absent. Please Re-Install Windows Script 5.6 on the Agent"
MOMDebugLog Message
WScript.Quit()
End If
End Function
'*****************************************************************
'Function RunCLI
'Routine For CLI VB.Run (For Version < 5.6)
'*****************************************************************
Function RunCLI(ByVal targetDrive, ByVal strOMSABinPath)
Dim guid1
GetTempFolderPath wintemp_path, targetDrive
GetOMReportFileGUID guid1
RunStorageCLI targetDrive, strOMSABinPath
End Function
'*****************************************************************
'GetOMABinPath
'Routine to read the registry to query the OMA Install Path
'*****************************************************************
Function GetOMABinPath(o_sPath)
Dim oShell, tmp
Set oShell = CreateObject ("WScript.Shell")
o_sPath = ""
On Error Resume Next
o_sPath = oShell.RegRead(OMSA_REG_INTALL_PATH)
If o_sPath = "" Then
o_sPath = oShell.RegRead(OMSA64_REG_INTALL_PATH)
End If
If o_sPath = "" Then
tmp = DEF_OMSA_BIN_PATH & "\omreport.exe"
If(bFileExists(tmp)) Then
o_sPath = DEF_OMSA_BIN_PATH
Message = "GetOMABinPath - OMSABinPath is empty, Using Default Existing Path" & DEF_OMSA_BIN_PATH
MOMDebugLog Message
Else
RegError = 1
End If
Else
o_sPath = o_sPath & "\bin"
End If
If Err <> 0 Then
GetOMSABinPath = Err.Number
End If
End Function
'*****************************************************************
'GetOMInstallRoot
'Routine to determine the Drive letter where OMSA is installed
'*****************************************************************
Private Function GetOMInstallRoot(ByRef path, ByVal OMSAInstallPath)
On Error Resume Next
Err.Clear
' Return the root drive of the OMInstall Path
path = Left(OMSAInstallPath, 2)
End Function
'*****************************************************************
'bFileExists
'Routine to determine if the OMSA Report file is created
'*****************************************************************
Function bFileExists(filespec1)
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
bFileExists = (fso.FileExists(filespec1))
Set fso = Nothing
End Function
'*****************************************************************
'DelFile
'Routine to delete the OMSA Report file
'*****************************************************************
Function DelFile(ByVal filespec2)
Dim fso
If bFileExists(filespec2) Then
Set fso = CreateObject("Scripting.FileSystemObject")
fso.DeleteFile filespec2, True
Set fso = Nothing
End If
If Err <> 0 Then
DelFile = Err.Number
End If
End Function
'**********************************************************
' CheckVBScriptEngine()
' Check VBScript engine version:
'**********************************************************
Function CheckVBScriptEngine()
Dim bIsCompatV, var
Const VBSCRIPT_MIN_VERSION = 5.6
var = ScriptEngineMajorVersion & "." & ScriptEngineMinorVersion
If (CInt(var)) < VBSCRIPT_MIN_VERSION Then
bIsCompatV = False
Else
bIsCompatV = True
End If
If Err <> 0 Then
CheckVBScriptEngine = Err.Number
Else
CheckVBScriptEngine = bIsCompatV
End If
End Function
'*****************************************************************
'Function RunStorageCLI - Called from RunCLI
'Routine For VB.Run (For Version < 5.6)
'*****************************************************************
Function RunStorageCLI (ByVal Drive2, ByVal OMSABinPath)
Dim guid22
GetTempFolderPath wintemp_path, Drive2
GetOMReportFileGUID guid22
a = 1
b = 0
strRepFilePath = wintemp_path & "\" & OM_REPORT_STORAGE_CONTR & guid22 & ".xml"
strCommand = "cmd /C " & chr(34) & OMSABinPath & "\" & "omreport.exe" & Chr(34) & " storage vdisk controller=" & controllerID & " -fmt xml -outc " & strRepFilePath
filespec = strRepFilePath
Set oShell = CreateObject ("WScript.Shell")
rc = oShell.run (strCommand,0,true)
If rc <> 0 Then
DelFile(strRepFilePath)
Else
' Infinite Loop Until file OM_REPORT_FILE_NAME is created
Do While bFileExists(filespec) <> -1
WScript.Sleep(0)
a = a + 1
b = a Mod WAIT_LOOP
If b = 0 Then
MOMDebugLog "Exit RunCmd. Reason: OMREPORT STORAGE not responding for " & WAIT_LOOP & " loops."
Exit Do
End If
Loop
' Parse XML File
ParseStorageXML filespec
' Clean up the CLI Output : Delete OM_REPORT_FILE_NAME for STORAGE
DelFile(strRepFilePath)
End If ' End of If Condition for rc<>0 for oshell.run(omreport storage controller)
Set strRepFilePath = Nothing
Set strCommand = Nothing
Set oShell = Nothing
Set filespec = Nothing
End Function
'*****************************************************************
' Function ParseStorageXML
' Rollup GlobalStorageHealth from OMSS StorageController XML Output
'*****************************************************************
Function ParseStorageXML(ByVal storagefilepath)
Dim object_health, object_arr
Dim obj, obj_val
Dim xmlDoc, i
If(bFileExists(storagefilepath)) Then
Set xmlDoc = CreateObject("Microsoft.XMLDOM")
If (IsObject(xmlDoc) = True) Then
xmlDoc.async = "false"
xmlDoc.load(storagefilepath)
If (xmlDoc.parseError.errorCode <> 0) Then
Dim myErr
Set myErr = xmlDoc.parseError
Message = "XML Parse Error Reason: " & myErr.reason
MOMDebugLog Message
Message = "XML Parse Error Line: " & myErr.line
MOMDebugLog Message
Message = "XML Parse Error Character: " & myErr.linepos
MOMDebugLog Message
Message = "XML Parse Error Text: " & myErr.srcText
MOMDebugLog Message
DelFile(storagefilepath)
Exit Function
End If
Set object_arr = xmlDoc.getElementsByTagName("TreeStatus")
Set obj = xmlDoc.getElementsByTagName("Name")
object_health = 0
For i = 0 To (object_arr.length - 1)
object_health = object_arr.Item(i).nodeTypedValue
If (obj.length > 0) Then
obj_val = obj.Item(i).nodeTypedValue
If (StrComp(prmDevice,obj_val,1)=0) Then
If object_health = 2 Then
ObjectStatus = "OK"
ElseIf object_health = 3 Then
ObjectStatus = "Warning"
ElseIf object_health = 4 Then
ObjectStatus = "Error"
End If
End If
Else
ObjectStatus = "OK"
End If
Next
Else
Message = "Error: DOM object not created using CreateObject - Microsoft.XMLDOM"
MOMDebugLog Message
End If
Else
Message = "Storage CLI XML Output File does not exist - " & storagefilepath
MOMDebugLog Message
End If
End Function
'*****************************************************************
' Function MOMDebugLog
' Add LogMessage Header - ScriptName and Time and Logging it.
'*****************************************************************
Function MOMDebugLog (ByVal strMessage)
LogMessage = "(" & SCRIPT_NAME & ")" & "-" & "[" & Now() & "] --- "
LogMessage = LogMessage & strMessage
End Function
'*****************************************************************
'GetTempFolderPath
'Routine to Get Win Temp Folder path
'*****************************************************************
Function GetTempFolderPath(ByRef WinTempFolder, ByVal drive_letter)
Dim FldrExistFlag, fso
FldrExistFlag = False
dim wshShell : Set wshShell = Createobject("WScript.Shell")
dim wshSysEnv : Set wshSysEnv = wshShell.Environment
dim strSysTempFolder : strSysTempFolder = wshSysEnv("TEMP")
dim wshPrcEnv : Set wshPrcEnv = wshShell.Environment("Process")
strSysTempFolder = Replace(strSysTempFolder, "%SystemRoot%", wshPrcEnv("SYSTEMROOT"), 1, -1, vbTextCompare)
WinTempFolder = strSysTempFolder
Set fso = CreateObject("Scripting.FileSystemObject")
If (fso.FolderExists(WinTempFolder)) Then
FldrExistFlag = True
Else
FldrExistFlag = False
End If
If WinTempFolder = "" OR FldrExistFlag = False Then
WinTempFolder = drive_letter
End If
Set wshShell = Nothing
Set wshSysEnv = Nothing
Set strSysTempFolder = Nothing
Set wshPrcEnv = Nothing
If Err <> 0 Then
GetTempFolderPath = Err.Number
End If
End Function
'*****************************************************************
'GetOMReportFileGUID
'Routine to generate unique GUIDs for OMREPORT FILE
'*****************************************************************
Function GetOMReportFileGUID(ByRef o_guid)
Dim TypeLib, NewGUID
Set TypeLib = CreateObject("Scriptlet.TypeLib")
NewGUID = TypeLib.Guid
o_guid = (left(NewGUID, len(NewGUID)-2))
Set TypeLib = Nothing
End Function
End Class
300Property[@Name='Status']EqualOKProperty[@Name='Status']EqualWarningProperty[@Name='Status']EqualCriticalAvailabilityHealth$Target/Host/Host/Host/Host/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberGreaterEqual2048EventDisplayNumberLessEqual2900PublisherNameEqualServer AdministratorConnectorPhysicalDiskEventTrigger.vbs$MPElement$ $Target/Id$ $Config/Computer$ $Target/Host/Host/Property[Type="Dell.Connections.DellStorageController"]/DeviceID$ $Target/Property[Type="Dell.Connections.ConnectorPhysicalDisk"]/SerialNumber$
'**********************************************************************************
' Script Name - ConnectorPhysicalDiskEventTrigger
' Author: Muralidhar
'
' Description:
' Determine Unit Monitor health for ConnectorPhysicalDisk
'
' (c) Copyright Dell Inc. 2007 - All rights reserved
'**********************************************************************************
Option Explicit
Dim oArgs
Set oArgs = WScript.Arguments
if oArgs.Count < 5 Then
Wscript.Quit -1
End If
Dim oAPI, prmDevice, controllerID
controllerID = oArgs(3)
prmDevice = oArgs(4)
Set oAPI = CreateObject("MOM.ScriptAPI")
Const WAIT_LOOP = 1000000
Const SCRIPT_NAME = "Dell Agents State Monitoring"
Const OM_REPORT_STORAGE_CONTR = "Storage"
Const DEF_OMSA_BIN_PATH = "C:\Program Files\Dell\OpenManage\oma\bin"
Const OMSA_REG_INTALL_PATH = "HKEY_LOCAL_MACHINE\SOFTWARE\Dell Computer Corporation\Dell OMA\InstallPath"
Const OMSA64_REG_INTALL_PATH = "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Dell Computer Corporation\Dell OMA\InstallPath"
Dim ObjectStatus
Dim s
Set s = New DellStorage
s.GetObjectHealth()
Dim cAPI, oBag
Set cAPI = CreateObject("MOM.ScriptAPI")
Set oBag = cAPI.CreatePropertyBag()
Call oBag.AddValue("Status", ObjectStatus)
Call cAPI.Return(oBag)
Set cAPI = Nothing
Set oBag = Nothing
Class DellStorage
Dim RegError, LogMessage, Message
Dim a, b
Dim rc, filespec, oShell
Dim strCommand, strRepFilePath, wintemp_path
Function GetObjectHealth()
Dim OMSABinPath ' Store Path from Registry key
Dim drive ' Drive letter
Dim version
RegError = 0
' Get OMSA Lib Path
rc = GetOMABinPath(OMSABinPath)
If rc <> 0 Then
WScript.Quit()
End If
' Get Install root path
rc = GetOMInstallRoot(drive, OMSABinPath) ' return the current absolute path or the root path for the OMSA Install
If rc <> 0 Then
WScript.Quit()
End If
If RegError = 1 Then
Message = "Task Fail: OMSA not installed / OMSA Registry Value not found."
MOMDebugLog Message
WScript.Quit()
End If
' Check VBScript engine version
version = CheckVBScriptEngine()
If version = True OR version = False Then
RunCLI drive, OMSABinPath
Else
Message = "Error: VBScript corrupted/absent. Please Re-Install Windows Script 5.6 on the Agent"
MOMDebugLog Message
WScript.Quit()
End If
End Function
'*****************************************************************
'Function RunCLI
'Routine For CLI VB.Run (For Version < 5.6)
'*****************************************************************
Function RunCLI(ByVal targetDrive, ByVal strOMSABinPath)
Dim guid1
GetTempFolderPath wintemp_path, targetDrive
GetOMReportFileGUID guid1
RunStorageCLI targetDrive, strOMSABinPath
End Function
'*****************************************************************
'GetOMABinPath
'Routine to read the registry to query the OMA Install Path
'*****************************************************************
Function GetOMABinPath(o_sPath)
Dim oShell, tmp
Set oShell = CreateObject ("WScript.Shell")
o_sPath = ""
On Error Resume Next
o_sPath = oShell.RegRead(OMSA_REG_INTALL_PATH)
If o_sPath = "" Then
o_sPath = oShell.RegRead(OMSA64_REG_INTALL_PATH)
End If
If o_sPath = "" Then
tmp = DEF_OMSA_BIN_PATH & "\omreport.exe"
If(bFileExists(tmp)) Then
o_sPath = DEF_OMSA_BIN_PATH
Message = "GetOMABinPath - OMSABinPath is empty, Using Default Existing Path" & DEF_OMSA_BIN_PATH
MOMDebugLog Message
Else
RegError = 1
End If
Else
o_sPath = o_sPath & "\bin"
End If
If Err <> 0 Then
GetOMSABinPath = Err.Number
End If
End Function
'*****************************************************************
'GetOMInstallRoot
'Routine to determine the Drive letter where OMSA is installed
'*****************************************************************
Private Function GetOMInstallRoot(ByRef path, ByVal OMSAInstallPath)
On Error Resume Next
Err.Clear
' Return the root drive of the OMInstall Path
path = Left(OMSAInstallPath, 2)
End Function
'*****************************************************************
'bFileExists
'Routine to determine if the OMSA Report file is created
'*****************************************************************
Function bFileExists(filespec1)
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
bFileExists = (fso.FileExists(filespec1))
Set fso = Nothing
End Function
'*****************************************************************
'DelFile
'Routine to delete the OMSA Report file
'*****************************************************************
Function DelFile(ByVal filespec2)
Dim fso
If bFileExists(filespec2) Then
Set fso = CreateObject("Scripting.FileSystemObject")
fso.DeleteFile filespec2, True
Set fso = Nothing
End If
If Err <> 0 Then
DelFile = Err.Number
End If
End Function
'**********************************************************
' CheckVBScriptEngine()
' Check VBScript engine version:
'**********************************************************
Function CheckVBScriptEngine()
Dim bIsCompatV, var
Const VBSCRIPT_MIN_VERSION = 5.6
var = ScriptEngineMajorVersion & "." & ScriptEngineMinorVersion
If (CInt(var)) < VBSCRIPT_MIN_VERSION Then
bIsCompatV = False
Else
bIsCompatV = True
End If
If Err <> 0 Then
CheckVBScriptEngine = Err.Number
Else
CheckVBScriptEngine = bIsCompatV
End If
End Function
'*****************************************************************
'Function RunStorageCLI - Called from RunCLI
'Routine For VB.Run (For Version < 5.6)
'*****************************************************************
Function RunStorageCLI (ByVal Drive2, ByVal OMSABinPath)
Dim guid22
GetTempFolderPath wintemp_path, Drive2
GetOMReportFileGUID guid22
a = 1
b = 0
strRepFilePath = wintemp_path & "\" & OM_REPORT_STORAGE_CONTR & guid22 & ".xml"
strCommand = "cmd /C " & chr(34) & OMSABinPath & "\" & "omreport.exe" & Chr(34) & " storage pdisk controller=" & controllerID & " -fmt xml -outc " & strRepFilePath
filespec = strRepFilePath
Set oShell = CreateObject ("WScript.Shell")
rc = oShell.run (strCommand,0,true)
If rc <> 0 Then
DelFile(strRepFilePath)
Else
' Infinite Loop Until file OM_REPORT_FILE_NAME is created
Do While bFileExists(filespec) <> -1
WScript.Sleep(0)
a = a + 1
b = a Mod WAIT_LOOP
If b = 0 Then
MOMDebugLog "Exit RunCmd. Reason: OMREPORT STORAGE not responding for " & WAIT_LOOP & " loops."
Exit Do
End If
Loop
' Parse XML File
ParseStorageXML filespec
' Clean up the CLI Output : Delete OM_REPORT_FILE_NAME for STORAGE
DelFile(strRepFilePath)
End If ' End of If Condition for rc<>0 for oshell.run(omreport storage controller)
Set strRepFilePath = Nothing
Set strCommand = Nothing
Set oShell = Nothing
Set filespec = Nothing
End Function
'*****************************************************************
' Function ParseStorageXML
' Rollup GlobalStorageHealth from OMSS StorageController XML Output
'*****************************************************************
Function ParseStorageXML(ByVal storagefilepath)
Dim object_health, object_arr
Dim obj, obj_val
Dim xmlDoc, i
If(bFileExists(storagefilepath)) Then
Set xmlDoc = CreateObject("Microsoft.XMLDOM")
If (IsObject(xmlDoc) = True) Then
xmlDoc.async = "false"
xmlDoc.load(storagefilepath)
If (xmlDoc.parseError.errorCode <> 0) Then
Dim myErr
Set myErr = xmlDoc.parseError
Message = "XML Parse Error Reason: " & myErr.reason
MOMDebugLog Message
Message = "XML Parse Error Line: " & myErr.line
MOMDebugLog Message
Message = "XML Parse Error Character: " & myErr.linepos
MOMDebugLog Message
Message = "XML Parse Error Text: " & myErr.srcText
MOMDebugLog Message
DelFile(storagefilepath)
Exit Function
End If
Set object_arr = xmlDoc.getElementsByTagName("TreeStatus")
Set obj = xmlDoc.getElementsByTagName("DeviceSerialNumber")
object_health = 0
For i = 0 To (object_arr.length - 1)
object_health = object_arr.Item(i).nodeTypedValue
If (obj.length > 0) Then
obj_val = obj.Item(i).nodeTypedValue
If (StrComp(prmDevice,obj_val,1)=0) Then
If object_health = 2 Then
ObjectStatus = "OK"
ElseIf object_health = 3 Then
ObjectStatus = "Warning"
ElseIf object_health = 4 Then
ObjectStatus = "Error"
End If
End If
Else
ObjectStatus = "OK"
End If
Next
Else
Message = "Error: DOM object not created using CreateObject - Microsoft.XMLDOM"
MOMDebugLog Message
End If
Else
Message = "Storage CLI XML Output File does not exist - " & storagefilepath
MOMDebugLog Message
End If
End Function
'*****************************************************************
' Function MOMDebugLog
' Add LogMessage Header - ScriptName and Time and Logging it.
'*****************************************************************
Function MOMDebugLog (ByVal strMessage)
LogMessage = "(" & SCRIPT_NAME & ")" & "-" & "[" & Now() & "] --- "
LogMessage = LogMessage & strMessage
End Function
'*****************************************************************
'GetTempFolderPath
'Routine to Get Win Temp Folder path
'*****************************************************************
Function GetTempFolderPath(ByRef WinTempFolder, ByVal drive_letter)
Dim FldrExistFlag, fso
FldrExistFlag = False
dim wshShell : Set wshShell = Createobject("WScript.Shell")
dim wshSysEnv : Set wshSysEnv = wshShell.Environment
dim strSysTempFolder : strSysTempFolder = wshSysEnv("TEMP")
dim wshPrcEnv : Set wshPrcEnv = wshShell.Environment("Process")
strSysTempFolder = Replace(strSysTempFolder, "%SystemRoot%", wshPrcEnv("SYSTEMROOT"), 1, -1, vbTextCompare)
WinTempFolder = strSysTempFolder
Set fso = CreateObject("Scripting.FileSystemObject")
If (fso.FolderExists(WinTempFolder)) Then
FldrExistFlag = True
Else
FldrExistFlag = False
End If
If WinTempFolder = "" OR FldrExistFlag = False Then
WinTempFolder = drive_letter
End If
Set wshShell = Nothing
Set wshSysEnv = Nothing
Set strSysTempFolder = Nothing
Set wshPrcEnv = Nothing
If Err <> 0 Then
GetTempFolderPath = Err.Number
End If
End Function
'*****************************************************************
'GetOMReportFileGUID
'Routine to generate unique GUIDs for OMREPORT FILE
'*****************************************************************
Function GetOMReportFileGUID(ByRef o_guid)
Dim TypeLib, NewGUID
Set TypeLib = CreateObject("Scriptlet.TypeLib")
NewGUID = TypeLib.Guid
o_guid = (left(NewGUID, len(NewGUID)-2))
Set TypeLib = Nothing
End Function
End Class
300Property[@Name='Status']EqualOKProperty[@Name='Status']EqualWarningProperty[@Name='Status']EqualCriticalAvailabilityHealth$Target/Host/Host/Host/Host/Host/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberGreaterEqual2048EventDisplayNumberLessEqual2900PublisherNameEqualServer AdministratorEnclosurePhysicalDiskEventTrigger.vbs$MPElement$ $Target/Id$ $Config/Computer$ $Target/Host/Host/Host/Property[Type="Dell.Connections.DellStorageController"]/DeviceID$ $Target/Property[Type="Dell.Connections.EnclosurePhysicalDisk"]/SerialNumber$
'**********************************************************************************
' Script Name - EnclosurePhysicalDiskEventTrigger
' Author: Muralidhar
'
' Description:
' Determine Unit Monitor health for EnclosurePhysicalDisk
'
' (c) Copyright Dell Inc. 2007 - All rights reserved
'**********************************************************************************
Option Explicit
Dim oArgs
Set oArgs = WScript.Arguments
if oArgs.Count < 5 Then
Wscript.Quit -1
End If
Dim oAPI, prmDevice, controllerID
controllerID = oArgs(3)
prmDevice = oArgs(4)
Set oAPI = CreateObject("MOM.ScriptAPI")
Const WAIT_LOOP = 1000000
Const SCRIPT_NAME = "Dell Agents State Monitoring"
Const OM_REPORT_STORAGE_CONTR = "Storage"
Const DEF_OMSA_BIN_PATH = "C:\Program Files\Dell\OpenManage\oma\bin"
Const OMSA_REG_INTALL_PATH = "HKEY_LOCAL_MACHINE\SOFTWARE\Dell Computer Corporation\Dell OMA\InstallPath"
Const OMSA64_REG_INTALL_PATH = "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Dell Computer Corporation\Dell OMA\InstallPath"
Dim ObjectStatus
Dim s
Set s = New DellStorage
s.GetObjectHealth()
Dim cAPI, oBag
Set cAPI = CreateObject("MOM.ScriptAPI")
Set oBag = cAPI.CreatePropertyBag()
Call oBag.AddValue("Status", ObjectStatus)
Call cAPI.Return(oBag)
Set cAPI = Nothing
Set oBag = Nothing
Class DellStorage
Dim RegError, LogMessage, Message
Dim a, b
Dim rc, filespec, oShell
Dim strCommand, strRepFilePath, wintemp_path
Function GetObjectHealth()
Dim OMSABinPath ' Store Path from Registry key
Dim drive ' Drive letter
Dim version
RegError = 0
' Get OMSA Lib Path
rc = GetOMABinPath(OMSABinPath)
If rc <> 0 Then
WScript.Quit()
End If
' Get Install root path
rc = GetOMInstallRoot(drive, OMSABinPath) ' return the current absolute path or the root path for the OMSA Install
If rc <> 0 Then
WScript.Quit()
End If
If RegError = 1 Then
Message = "Task Fail: OMSA not installed / OMSA Registry Value not found."
MOMDebugLog Message
WScript.Quit()
End If
' Check VBScript engine version
version = CheckVBScriptEngine()
If version = True OR version = False Then
RunCLI drive, OMSABinPath
Else
Message = "Error: VBScript corrupted/absent. Please Re-Install Windows Script 5.6 on the Agent"
MOMDebugLog Message
WScript.Quit()
End If
End Function
'*****************************************************************
'Function RunCLI
'Routine For CLI VB.Run (For Version < 5.6)
'*****************************************************************
Function RunCLI(ByVal targetDrive, ByVal strOMSABinPath)
Dim guid1
GetTempFolderPath wintemp_path, targetDrive
GetOMReportFileGUID guid1
RunStorageCLI targetDrive, strOMSABinPath
End Function
'*****************************************************************
'GetOMABinPath
'Routine to read the registry to query the OMA Install Path
'*****************************************************************
Function GetOMABinPath(o_sPath)
Dim oShell, tmp
Set oShell = CreateObject ("WScript.Shell")
o_sPath = ""
On Error Resume Next
o_sPath = oShell.RegRead(OMSA_REG_INTALL_PATH)
If o_sPath = "" Then
o_sPath = oShell.RegRead(OMSA64_REG_INTALL_PATH)
End If
If o_sPath = "" Then
tmp = DEF_OMSA_BIN_PATH & "\omreport.exe"
If(bFileExists(tmp)) Then
o_sPath = DEF_OMSA_BIN_PATH
Message = "GetOMABinPath - OMSABinPath is empty, Using Default Existing Path" & DEF_OMSA_BIN_PATH
MOMDebugLog Message
Else
RegError = 1
End If
Else
o_sPath = o_sPath & "\bin"
End If
If Err <> 0 Then
GetOMSABinPath = Err.Number
End If
End Function
'*****************************************************************
'GetOMInstallRoot
'Routine to determine the Drive letter where OMSA is installed
'*****************************************************************
Private Function GetOMInstallRoot(ByRef path, ByVal OMSAInstallPath)
On Error Resume Next
Err.Clear
' Return the root drive of the OMInstall Path
path = Left(OMSAInstallPath, 2)
End Function
'*****************************************************************
'bFileExists
'Routine to determine if the OMSA Report file is created
'*****************************************************************
Function bFileExists(filespec1)
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
bFileExists = (fso.FileExists(filespec1))
Set fso = Nothing
End Function
'*****************************************************************
'DelFile
'Routine to delete the OMSA Report file
'*****************************************************************
Function DelFile(ByVal filespec2)
Dim fso
If bFileExists(filespec2) Then
Set fso = CreateObject("Scripting.FileSystemObject")
fso.DeleteFile filespec2, True
Set fso = Nothing
End If
If Err <> 0 Then
DelFile = Err.Number
End If
End Function
'**********************************************************
' CheckVBScriptEngine()
' Check VBScript engine version:
'**********************************************************
Function CheckVBScriptEngine()
Dim bIsCompatV, var
Const VBSCRIPT_MIN_VERSION = 5.6
var = ScriptEngineMajorVersion & "." & ScriptEngineMinorVersion
If (CInt(var)) < VBSCRIPT_MIN_VERSION Then
bIsCompatV = False
Else
bIsCompatV = True
End If
If Err <> 0 Then
CheckVBScriptEngine = Err.Number
Else
CheckVBScriptEngine = bIsCompatV
End If
End Function
'*****************************************************************
'Function RunStorageCLI - Called from RunCLI
'Routine For VB.Run (For Version < 5.6)
'*****************************************************************
Function RunStorageCLI (ByVal Drive2, ByVal OMSABinPath)
Dim guid22
GetTempFolderPath wintemp_path, Drive2
GetOMReportFileGUID guid22
a = 1
b = 0
strRepFilePath = wintemp_path & "\" & OM_REPORT_STORAGE_CONTR & guid22 & ".xml"
strCommand = "cmd /C " & chr(34) & OMSABinPath & "\" & "omreport.exe" & Chr(34) & " storage pdisk controller=" & controllerID & " -fmt xml -outc " & strRepFilePath
filespec = strRepFilePath
Set oShell = CreateObject ("WScript.Shell")
rc = oShell.run (strCommand,0,true)
If rc <> 0 Then
DelFile(strRepFilePath)
Else
' Infinite Loop Until file OM_REPORT_FILE_NAME is created
Do While bFileExists(filespec) <> -1
WScript.Sleep(0)
a = a + 1
b = a Mod WAIT_LOOP
If b = 0 Then
MOMDebugLog "Exit RunCmd. Reason: OMREPORT STORAGE not responding for " & WAIT_LOOP & " loops."
Exit Do
End If
Loop
' Parse XML File
ParseStorageXML filespec
' Clean up the CLI Output : Delete OM_REPORT_FILE_NAME for STORAGE
DelFile(strRepFilePath)
End If ' End of If Condition for rc<>0 for oshell.run(omreport storage controller)
Set strRepFilePath = Nothing
Set strCommand = Nothing
Set oShell = Nothing
Set filespec = Nothing
End Function
'*****************************************************************
' Function ParseStorageXML
' Rollup GlobalStorageHealth from OMSS StorageController XML Output
'*****************************************************************
Function ParseStorageXML(ByVal storagefilepath)
Dim object_health, object_arr
Dim obj, obj_val
Dim xmlDoc, i
If(bFileExists(storagefilepath)) Then
Set xmlDoc = CreateObject("Microsoft.XMLDOM")
If (IsObject(xmlDoc) = True) Then
xmlDoc.async = "false"
xmlDoc.load(storagefilepath)
If (xmlDoc.parseError.errorCode <> 0) Then
Dim myErr
Set myErr = xmlDoc.parseError
Message = "XML Parse Error Reason: " & myErr.reason
MOMDebugLog Message
Message = "XML Parse Error Line: " & myErr.line
MOMDebugLog Message
Message = "XML Parse Error Character: " & myErr.linepos
MOMDebugLog Message
Message = "XML Parse Error Text: " & myErr.srcText
MOMDebugLog Message
DelFile(storagefilepath)
Exit Function
End If
Set object_arr = xmlDoc.getElementsByTagName("TreeStatus")
Set obj = xmlDoc.getElementsByTagName("DeviceSerialNumber")
object_health = 0
For i = 0 To (object_arr.length - 1)
object_health = object_arr.Item(i).nodeTypedValue
If (obj.length > 0) Then
obj_val = obj.Item(i).nodeTypedValue
If (StrComp(prmDevice,obj_val,1)=0) Then
If object_health = 2 Then
ObjectStatus = "OK"
ElseIf object_health = 3 Then
ObjectStatus = "Warning"
ElseIf object_health = 4 Then
ObjectStatus = "Error"
End If
End If
Else
ObjectStatus = "OK"
End If
Next
Else
Message = "Error: DOM object not created using CreateObject - Microsoft.XMLDOM"
MOMDebugLog Message
End If
Else
Message = "Storage CLI XML Output File does not exist - " & storagefilepath
MOMDebugLog Message
End If
End Function
'*****************************************************************
' Function MOMDebugLog
' Add LogMessage Header - ScriptName and Time and Logging it.
'*****************************************************************
Function MOMDebugLog (ByVal strMessage)
LogMessage = "(" & SCRIPT_NAME & ")" & "-" & "[" & Now() & "] --- "
LogMessage = LogMessage & strMessage
End Function
'*****************************************************************
'GetTempFolderPath
'Routine to Get Win Temp Folder path
'*****************************************************************
Function GetTempFolderPath(ByRef WinTempFolder, ByVal drive_letter)
Dim FldrExistFlag, fso
FldrExistFlag = False
dim wshShell : Set wshShell = Createobject("WScript.Shell")
dim wshSysEnv : Set wshSysEnv = wshShell.Environment
dim strSysTempFolder : strSysTempFolder = wshSysEnv("TEMP")
dim wshPrcEnv : Set wshPrcEnv = wshShell.Environment("Process")
strSysTempFolder = Replace(strSysTempFolder, "%SystemRoot%", wshPrcEnv("SYSTEMROOT"), 1, -1, vbTextCompare)
WinTempFolder = strSysTempFolder
Set fso = CreateObject("Scripting.FileSystemObject")
If (fso.FolderExists(WinTempFolder)) Then
FldrExistFlag = True
Else
FldrExistFlag = False
End If
If WinTempFolder = "" OR FldrExistFlag = False Then
WinTempFolder = drive_letter
End If
Set wshShell = Nothing
Set wshSysEnv = Nothing
Set strSysTempFolder = Nothing
Set wshPrcEnv = Nothing
If Err <> 0 Then
GetTempFolderPath = Err.Number
End If
End Function
'*****************************************************************
'GetOMReportFileGUID
'Routine to generate unique GUIDs for OMREPORT FILE
'*****************************************************************
Function GetOMReportFileGUID(ByRef o_guid)
Dim TypeLib, NewGUID
Set TypeLib = CreateObject("Scriptlet.TypeLib")
NewGUID = TypeLib.Guid
o_guid = (left(NewGUID, len(NewGUID)-2))
Set TypeLib = Nothing
End Function
End Class
300Property[@Name='Status']EqualOKProperty[@Name='Status']EqualWarningProperty[@Name='Status']EqualCriticalAvailabilityHealth$Target/Host/Host/Host/Host/Host/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberGreaterEqual2048EventDisplayNumberLessEqual2900PublisherNameEqualServer AdministratorEnclosureTemperatureEventTrigger.vbs$MPElement$ $Target/Id$ $Config/Computer$ $Target/Host/Host/Host/Property[Type="Dell.Connections.DellStorageController"]/DeviceID$ $Target/Host/Property[Type="Dell.Connections.ControllerEnclosure"]/ID$ $Target/Property[Type="Dell.Connections.EnclosureTemperature"]/ID$
'**********************************************************************************
' Script Name - EnclosureTemperatureEventTrigger
' Author: Muralidhar
'
' Description:
' Determine Unit Monitor health for EnclosureTemperature
'
' (c) Copyright Dell Inc. 2007 - All rights reserved
'**********************************************************************************
Option Explicit
Dim oArgs
Set oArgs = WScript.Arguments
if oArgs.Count < 6 Then
Wscript.Quit -1
End If
Dim oAPI, prmDevice, controllerID, enclosureID
controllerID = oArgs(3)
enclosureID = oArgs(4)
prmDevice = oArgs(5)
Set oAPI = CreateObject("MOM.ScriptAPI")
Const WAIT_LOOP = 1000000
Const SCRIPT_NAME = "Dell Agents State Monitoring"
Const OM_REPORT_STORAGE_CONTR = "Storage"
Const DEF_OMSA_BIN_PATH = "C:\Program Files\Dell\OpenManage\oma\bin"
Const OMSA_REG_INTALL_PATH = "HKEY_LOCAL_MACHINE\SOFTWARE\Dell Computer Corporation\Dell OMA\InstallPath"
Const OMSA64_REG_INTALL_PATH = "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Dell Computer Corporation\Dell OMA\InstallPath"
Dim ObjectStatus
Dim s
Set s = New DellStorage
s.GetObjectHealth()
Dim cAPI, oBag
Set cAPI = CreateObject("MOM.ScriptAPI")
Set oBag = cAPI.CreatePropertyBag()
Call oBag.AddValue("Status", ObjectStatus)
Call cAPI.Return(oBag)
Set cAPI = Nothing
Set oBag = Nothing
Class DellStorage
Dim RegError, LogMessage, Message
Dim a, b
Dim rc, filespec, oShell
Dim strCommand, strRepFilePath, wintemp_path
Function GetObjectHealth()
Dim OMSABinPath ' Store Path from Registry key
Dim drive ' Drive letter
Dim version
RegError = 0
' Get OMSA Lib Path
rc = GetOMABinPath(OMSABinPath)
If rc <> 0 Then
WScript.Quit()
End If
' Get Install root path
rc = GetOMInstallRoot(drive, OMSABinPath) ' return the current absolute path or the root path for the OMSA Install
If rc <> 0 Then
WScript.Quit()
End If
If RegError = 1 Then
Message = "Task Fail: OMSA not installed / OMSA Registry Value not found."
MOMDebugLog Message
WScript.Quit()
End If
' Check VBScript engine version
version = CheckVBScriptEngine()
If version = True OR version = False Then
RunCLI drive, OMSABinPath
Else
Message = "Error: VBScript corrupted/absent. Please Re-Install Windows Script 5.6 on the Agent"
MOMDebugLog Message
WScript.Quit()
End If
End Function
'*****************************************************************
'Function RunCLI
'Routine For CLI VB.Run (For Version < 5.6)
'*****************************************************************
Function RunCLI(ByVal targetDrive, ByVal strOMSABinPath)
Dim guid1
GetTempFolderPath wintemp_path, targetDrive
GetOMReportFileGUID guid1
RunStorageCLI targetDrive, strOMSABinPath
End Function
'*****************************************************************
'GetOMABinPath
'Routine to read the registry to query the OMA Install Path
'*****************************************************************
Function GetOMABinPath(o_sPath)
Dim oShell, tmp
Set oShell = CreateObject ("WScript.Shell")
o_sPath = ""
On Error Resume Next
o_sPath = oShell.RegRead(OMSA_REG_INTALL_PATH)
If o_sPath = "" Then
o_sPath = oShell.RegRead(OMSA64_REG_INTALL_PATH)
End If
If o_sPath = "" Then
tmp = DEF_OMSA_BIN_PATH & "\omreport.exe"
If(bFileExists(tmp)) Then
o_sPath = DEF_OMSA_BIN_PATH
Message = "GetOMABinPath - OMSABinPath is empty, Using Default Existing Path" & DEF_OMSA_BIN_PATH
MOMDebugLog Message
Else
RegError = 1
End If
Else
o_sPath = o_sPath & "\bin"
End If
If Err <> 0 Then
GetOMSABinPath = Err.Number
End If
End Function
'*****************************************************************
'GetOMInstallRoot
'Routine to determine the Drive letter where OMSA is installed
'*****************************************************************
Private Function GetOMInstallRoot(ByRef path, ByVal OMSAInstallPath)
On Error Resume Next
Err.Clear
' Return the root drive of the OMInstall Path
path = Left(OMSAInstallPath, 2)
End Function
'*****************************************************************
'bFileExists
'Routine to determine if the OMSA Report file is created
'*****************************************************************
Function bFileExists(filespec1)
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
bFileExists = (fso.FileExists(filespec1))
Set fso = Nothing
End Function
'*****************************************************************
'DelFile
'Routine to delete the OMSA Report file
'*****************************************************************
Function DelFile(ByVal filespec2)
Dim fso
If bFileExists(filespec2) Then
Set fso = CreateObject("Scripting.FileSystemObject")
fso.DeleteFile filespec2, True
Set fso = Nothing
End If
If Err <> 0 Then
DelFile = Err.Number
End If
End Function
'**********************************************************
' CheckVBScriptEngine()
' Check VBScript engine version:
'**********************************************************
Function CheckVBScriptEngine()
Dim bIsCompatV, var
Const VBSCRIPT_MIN_VERSION = 5.6
var = ScriptEngineMajorVersion & "." & ScriptEngineMinorVersion
If (CInt(var)) < VBSCRIPT_MIN_VERSION Then
bIsCompatV = False
Else
bIsCompatV = True
End If
If Err <> 0 Then
CheckVBScriptEngine = Err.Number
Else
CheckVBScriptEngine = bIsCompatV
End If
End Function
'*****************************************************************
'Function RunStorageCLI - Called from RunCLI
'Routine For VB.Run (For Version < 5.6)
'*****************************************************************
Function RunStorageCLI (ByVal Drive2, ByVal OMSABinPath)
Dim guid22
GetTempFolderPath wintemp_path, Drive2
GetOMReportFileGUID guid22
a = 1
b = 0
strRepFilePath = wintemp_path & "\" & OM_REPORT_STORAGE_CONTR & guid22 & ".xml"
strCommand = "cmd /C " & chr(34) & OMSABinPath & "\" & "omreport.exe" & Chr(34) & " storage enclosure controller=" & controllerID & " enclosure=" & enclosureID & " info=temps -fmt xml -outc " & strRepFilePath
filespec = strRepFilePath
Set oShell = CreateObject ("WScript.Shell")
rc = oShell.run (strCommand,0,true)
If rc <> 0 Then
DelFile(strRepFilePath)
Else
' Infinite Loop Until file OM_REPORT_FILE_NAME is created
Do While bFileExists(filespec) <> -1
WScript.Sleep(0)
a = a + 1
b = a Mod WAIT_LOOP
If b = 0 Then
MOMDebugLog "Exit RunCmd. Reason: OMREPORT STORAGE not responding for " & WAIT_LOOP & " loops."
Exit Do
End If
Loop
' Parse XML File
ParseStorageXML filespec
' Clean up the CLI Output : Delete OM_REPORT_FILE_NAME for STORAGE
DelFile(strRepFilePath)
End If ' End of If Condition for rc<>0 for oshell.run(omreport storage controller)
Set strRepFilePath = Nothing
Set strCommand = Nothing
Set oShell = Nothing
Set filespec = Nothing
End Function
'*****************************************************************
' Function ParseStorageXML
' Rollup GlobalStorageHealth from OMSS StorageController XML Output
'*****************************************************************
Function ParseStorageXML(ByVal storagefilepath)
Dim object_health, object_arr
Dim obj, obj_val
Dim xmlDoc, i
If(bFileExists(storagefilepath)) Then
Set xmlDoc = CreateObject("Microsoft.XMLDOM")
If (IsObject(xmlDoc) = True) Then
xmlDoc.async = "false"
xmlDoc.load(storagefilepath)
If (xmlDoc.parseError.errorCode <> 0) Then
Dim myErr
Set myErr = xmlDoc.parseError
Message = "XML Parse Error Reason: " & myErr.reason
MOMDebugLog Message
Message = "XML Parse Error Line: " & myErr.line
MOMDebugLog Message
Message = "XML Parse Error Character: " & myErr.linepos
MOMDebugLog Message
Message = "XML Parse Error Text: " & myErr.srcText
MOMDebugLog Message
DelFile(storagefilepath)
Exit Function
End If
Set object_arr = xmlDoc.getElementsByTagName("TreeStatus")
Set obj = xmlDoc.getElementsByTagName("Index")
object_health = 0
For i = 0 To (object_arr.length - 1)
object_health = object_arr.Item(i).nodeTypedValue
obj_val = obj.Item(i).nodeTypedValue
If StrComp(prmDevice,obj_val,1)=0 Then
If object_health = 2 Then
ObjectStatus = "OK"
ElseIf object_health = 3 Then
ObjectStatus = "Warning"
ElseIf object_health = 4 Then
ObjectStatus = "Error"
End If
End If
Next
Else
Message = "Error: DOM object not created using CreateObject - Microsoft.XMLDOM"
MOMDebugLog Message
End If
Else
Message = "Storage CLI XML Output File does not exist - " & storagefilepath
MOMDebugLog Message
End If
End Function
'*****************************************************************
' Function MOMDebugLog
' Add LogMessage Header - ScriptName and Time and Logging it.
'*****************************************************************
Function MOMDebugLog (ByVal strMessage)
LogMessage = "(" & SCRIPT_NAME & ")" & "-" & "[" & Now() & "] --- "
LogMessage = LogMessage & strMessage
End Function
'*****************************************************************
'GetTempFolderPath
'Routine to Get Win Temp Folder path
'*****************************************************************
Function GetTempFolderPath(ByRef WinTempFolder, ByVal drive_letter)
Dim FldrExistFlag, fso
FldrExistFlag = False
dim wshShell : Set wshShell = Createobject("WScript.Shell")
dim wshSysEnv : Set wshSysEnv = wshShell.Environment
dim strSysTempFolder : strSysTempFolder = wshSysEnv("TEMP")
dim wshPrcEnv : Set wshPrcEnv = wshShell.Environment("Process")
strSysTempFolder = Replace(strSysTempFolder, "%SystemRoot%", wshPrcEnv("SYSTEMROOT"), 1, -1, vbTextCompare)
WinTempFolder = strSysTempFolder
Set fso = CreateObject("Scripting.FileSystemObject")
If (fso.FolderExists(WinTempFolder)) Then
FldrExistFlag = True
Else
FldrExistFlag = False
End If
If WinTempFolder = "" OR FldrExistFlag = False Then
WinTempFolder = drive_letter
End If
Set wshShell = Nothing
Set wshSysEnv = Nothing
Set strSysTempFolder = Nothing
Set wshPrcEnv = Nothing
If Err <> 0 Then
GetTempFolderPath = Err.Number
End If
End Function
'*****************************************************************
'GetOMReportFileGUID
'Routine to generate unique GUIDs for OMREPORT FILE
'*****************************************************************
Function GetOMReportFileGUID(ByRef o_guid)
Dim TypeLib, NewGUID
Set TypeLib = CreateObject("Scriptlet.TypeLib")
NewGUID = TypeLib.Guid
o_guid = (left(NewGUID, len(NewGUID)-2))
Set TypeLib = Nothing
End Function
End Class
300Property[@Name='Status']EqualOKProperty[@Name='Status']EqualWarningProperty[@Name='Status']EqualCriticalAvailabilityHealth$Target/Host/Host/Host/Host/Host/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberGreaterEqual2048EventDisplayNumberLessEqual2900PublisherNameEqualServer AdministratorEnclosureFanEventTrigger.vbs$MPElement$ $Target/Id$ $Config/Computer$ $Target/Host/Host/Host/Property[Type="Dell.Connections.DellStorageController"]/DeviceID$ $Target/Host/Property[Type="Dell.Connections.ControllerEnclosure"]/ID$ $Target/Property[Type="Dell.Connections.EnclosureFan"]/ID$
'**********************************************************************************
' Script Name - EnclosureFanEventTrigger
' Author: Muralidhar
'
' Description:
' Determine Unit Monitor health for EnclosureFan
'
' (c) Copyright Dell Inc. 2007 - All rights reserved
'**********************************************************************************
Option Explicit
Dim oArgs
Set oArgs = WScript.Arguments
if oArgs.Count < 6 Then
Wscript.Quit -1
End If
Dim oAPI, prmDevice, controllerID, enclosureID
controllerID = oArgs(3)
enclosureID = oArgs(4)
prmDevice = oArgs(5)
Set oAPI = CreateObject("MOM.ScriptAPI")
Const WAIT_LOOP = 1000000
Const SCRIPT_NAME = "Dell Agents State Monitoring"
Const OM_REPORT_STORAGE_CONTR = "Storage"
Const DEF_OMSA_BIN_PATH = "C:\Program Files\Dell\OpenManage\oma\bin"
Const OMSA_REG_INTALL_PATH = "HKEY_LOCAL_MACHINE\SOFTWARE\Dell Computer Corporation\Dell OMA\InstallPath"
Const OMSA64_REG_INTALL_PATH = "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Dell Computer Corporation\Dell OMA\InstallPath"
Dim ObjectStatus
Dim s
Set s = New DellStorage
s.GetObjectHealth()
Dim cAPI, oBag
Set cAPI = CreateObject("MOM.ScriptAPI")
Set oBag = cAPI.CreatePropertyBag()
Call oBag.AddValue("Status", ObjectStatus)
Call cAPI.Return(oBag)
Set cAPI = Nothing
Set oBag = Nothing
Class DellStorage
Dim RegError, LogMessage, Message
Dim a, b
Dim rc, filespec, oShell
Dim strCommand, strRepFilePath, wintemp_path
Function GetObjectHealth()
Dim OMSABinPath ' Store Path from Registry key
Dim drive ' Drive letter
Dim version
RegError = 0
' Get OMSA Lib Path
rc = GetOMABinPath(OMSABinPath)
If rc <> 0 Then
WScript.Quit()
End If
' Get Install root path
rc = GetOMInstallRoot(drive, OMSABinPath) ' return the current absolute path or the root path for the OMSA Install
If rc <> 0 Then
WScript.Quit()
End If
If RegError = 1 Then
Message = "Task Fail: OMSA not installed / OMSA Registry Value not found."
MOMDebugLog Message
WScript.Quit()
End If
' Check VBScript engine version
version = CheckVBScriptEngine()
If version = True OR version = False Then
RunCLI drive, OMSABinPath
Else
Message = "Error: VBScript corrupted/absent. Please Re-Install Windows Script 5.6 on the Agent"
MOMDebugLog Message
WScript.Quit()
End If
End Function
'*****************************************************************
'Function RunCLI
'Routine For CLI VB.Run (For Version < 5.6)
'*****************************************************************
Function RunCLI(ByVal targetDrive, ByVal strOMSABinPath)
Dim guid1
GetTempFolderPath wintemp_path, targetDrive
GetOMReportFileGUID guid1
RunStorageCLI targetDrive, strOMSABinPath
End Function
'*****************************************************************
'GetOMABinPath
'Routine to read the registry to query the OMA Install Path
'*****************************************************************
Function GetOMABinPath(o_sPath)
Dim oShell, tmp
Set oShell = CreateObject ("WScript.Shell")
o_sPath = ""
On Error Resume Next
o_sPath = oShell.RegRead(OMSA_REG_INTALL_PATH)
If o_sPath = "" Then
o_sPath = oShell.RegRead(OMSA64_REG_INTALL_PATH)
End If
If o_sPath = "" Then
tmp = DEF_OMSA_BIN_PATH & "\omreport.exe"
If(bFileExists(tmp)) Then
o_sPath = DEF_OMSA_BIN_PATH
Message = "GetOMABinPath - OMSABinPath is empty, Using Default Existing Path" & DEF_OMSA_BIN_PATH
MOMDebugLog Message
Else
RegError = 1
End If
Else
o_sPath = o_sPath & "\bin"
End If
If Err <> 0 Then
GetOMSABinPath = Err.Number
End If
End Function
'*****************************************************************
'GetOMInstallRoot
'Routine to determine the Drive letter where OMSA is installed
'*****************************************************************
Private Function GetOMInstallRoot(ByRef path, ByVal OMSAInstallPath)
On Error Resume Next
Err.Clear
' Return the root drive of the OMInstall Path
path = Left(OMSAInstallPath, 2)
End Function
'*****************************************************************
'bFileExists
'Routine to determine if the OMSA Report file is created
'*****************************************************************
Function bFileExists(filespec1)
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
bFileExists = (fso.FileExists(filespec1))
Set fso = Nothing
End Function
'*****************************************************************
'DelFile
'Routine to delete the OMSA Report file
'*****************************************************************
Function DelFile(ByVal filespec2)
Dim fso
If bFileExists(filespec2) Then
Set fso = CreateObject("Scripting.FileSystemObject")
fso.DeleteFile filespec2, True
Set fso = Nothing
End If
If Err <> 0 Then
DelFile = Err.Number
End If
End Function
'**********************************************************
' CheckVBScriptEngine()
' Check VBScript engine version:
'**********************************************************
Function CheckVBScriptEngine()
Dim bIsCompatV, var
Const VBSCRIPT_MIN_VERSION = 5.6
var = ScriptEngineMajorVersion & "." & ScriptEngineMinorVersion
If (CInt(var)) < VBSCRIPT_MIN_VERSION Then
bIsCompatV = False
Else
bIsCompatV = True
End If
If Err <> 0 Then
CheckVBScriptEngine = Err.Number
Else
CheckVBScriptEngine = bIsCompatV
End If
End Function
'*****************************************************************
'Function RunStorageCLI - Called from RunCLI
'Routine For VB.Run (For Version < 5.6)
'*****************************************************************
Function RunStorageCLI (ByVal Drive2, ByVal OMSABinPath)
Dim guid22
GetTempFolderPath wintemp_path, Drive2
GetOMReportFileGUID guid22
a = 1
b = 0
strRepFilePath = wintemp_path & "\" & OM_REPORT_STORAGE_CONTR & guid22 & ".xml"
strCommand = "cmd /C " & chr(34) & OMSABinPath & "\" & "omreport.exe" & Chr(34) & " storage enclosure controller=" & controllerID & " enclosure=" & enclosureID & " info=fans -fmt xml -outc " & strRepFilePath
filespec = strRepFilePath
Set oShell = CreateObject ("WScript.Shell")
rc = oShell.run (strCommand,0,true)
If rc <> 0 Then
DelFile(strRepFilePath)
Else
' Infinite Loop Until file OM_REPORT_FILE_NAME is created
Do While bFileExists(filespec) <> -1
WScript.Sleep(0)
a = a + 1
b = a Mod WAIT_LOOP
If b = 0 Then
MOMDebugLog "Exit RunCmd. Reason: OMREPORT STORAGE not responding for " & WAIT_LOOP & " loops."
Exit Do
End If
Loop
' Parse XML File
ParseStorageXML filespec
' Clean up the CLI Output : Delete OM_REPORT_FILE_NAME for STORAGE
DelFile(strRepFilePath)
End If ' End of If Condition for rc<>0 for oshell.run(omreport storage controller)
Set strRepFilePath = Nothing
Set strCommand = Nothing
Set oShell = Nothing
Set filespec = Nothing
End Function
'*****************************************************************
' Function ParseStorageXML
' Rollup GlobalStorageHealth from OMSS StorageController XML Output
'*****************************************************************
Function ParseStorageXML(ByVal storagefilepath)
Dim object_health, object_arr
Dim obj, obj_val
Dim xmlDoc, i
If(bFileExists(storagefilepath)) Then
Set xmlDoc = CreateObject("Microsoft.XMLDOM")
If (IsObject(xmlDoc) = True) Then
xmlDoc.async = "false"
xmlDoc.load(storagefilepath)
If (xmlDoc.parseError.errorCode <> 0) Then
Dim myErr
Set myErr = xmlDoc.parseError
Message = "XML Parse Error Reason: " & myErr.reason
MOMDebugLog Message
Message = "XML Parse Error Line: " & myErr.line
MOMDebugLog Message
Message = "XML Parse Error Character: " & myErr.linepos
MOMDebugLog Message
Message = "XML Parse Error Text: " & myErr.srcText
MOMDebugLog Message
DelFile(storagefilepath)
Exit Function
End If
Set object_arr = xmlDoc.getElementsByTagName("TreeStatus")
Set obj = xmlDoc.getElementsByTagName("Index")
object_health = 0
For i = 0 To (object_arr.length - 1)
object_health = object_arr.Item(i).nodeTypedValue
obj_val = obj.Item(i).nodeTypedValue
If StrComp(prmDevice,obj_val,1)=0 Then
If object_health = 2 Then
ObjectStatus = "OK"
ElseIf object_health = 3 Then
ObjectStatus = "Warning"
ElseIf object_health = 4 Then
ObjectStatus = "Error"
End If
End If
Next
Else
Message = "Error: DOM object not created using CreateObject - Microsoft.XMLDOM"
MOMDebugLog Message
End If
Else
Message = "Storage CLI XML Output File does not exist - " & storagefilepath
MOMDebugLog Message
End If
End Function
'*****************************************************************
' Function MOMDebugLog
' Add LogMessage Header - ScriptName and Time and Logging it.
'*****************************************************************
Function MOMDebugLog (ByVal strMessage)
LogMessage = "(" & SCRIPT_NAME & ")" & "-" & "[" & Now() & "] --- "
LogMessage = LogMessage & strMessage
End Function
'*****************************************************************
'GetTempFolderPath
'Routine to Get Win Temp Folder path
'*****************************************************************
Function GetTempFolderPath(ByRef WinTempFolder, ByVal drive_letter)
Dim FldrExistFlag, fso
FldrExistFlag = False
dim wshShell : Set wshShell = Createobject("WScript.Shell")
dim wshSysEnv : Set wshSysEnv = wshShell.Environment
dim strSysTempFolder : strSysTempFolder = wshSysEnv("TEMP")
dim wshPrcEnv : Set wshPrcEnv = wshShell.Environment("Process")
strSysTempFolder = Replace(strSysTempFolder, "%SystemRoot%", wshPrcEnv("SYSTEMROOT"), 1, -1, vbTextCompare)
WinTempFolder = strSysTempFolder
Set fso = CreateObject("Scripting.FileSystemObject")
If (fso.FolderExists(WinTempFolder)) Then
FldrExistFlag = True
Else
FldrExistFlag = False
End If
If WinTempFolder = "" OR FldrExistFlag = False Then
WinTempFolder = drive_letter
End If
Set wshShell = Nothing
Set wshSysEnv = Nothing
Set strSysTempFolder = Nothing
Set wshPrcEnv = Nothing
If Err <> 0 Then
GetTempFolderPath = Err.Number
End If
End Function
'*****************************************************************
'GetOMReportFileGUID
'Routine to generate unique GUIDs for OMREPORT FILE
'*****************************************************************
Function GetOMReportFileGUID(ByRef o_guid)
Dim TypeLib, NewGUID
Set TypeLib = CreateObject("Scriptlet.TypeLib")
NewGUID = TypeLib.Guid
o_guid = (left(NewGUID, len(NewGUID)-2))
Set TypeLib = Nothing
End Function
End Class
300Property[@Name='Status']EqualOKProperty[@Name='Status']EqualWarningProperty[@Name='Status']EqualCriticalAvailabilityHealth$Target/Host/Host/Host/Host/Host/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberGreaterEqual2048EventDisplayNumberLessEqual2900PublisherNameEqualServer AdministratorEnclosureEMMEventTrigger.vbs$MPElement$ $Target/Id$ $Config/Computer$ $Target/Host/Host/Host/Property[Type="Dell.Connections.DellStorageController"]/DeviceID$ $Target/Host/Property[Type="Dell.Connections.ControllerEnclosure"]/ID$ $Target/Property[Type="Dell.Connections.EnclosureEMM"]/ID$
'**********************************************************************************
' Script Name - EnclosureEMMEventTrigger
' Author: Muralidhar
'
' Description:
' Determine Unit Monitor health for EnclosureEMM
'
' (c) Copyright Dell Inc. 2007 - All rights reserved
'**********************************************************************************
Option Explicit
Dim oArgs
Set oArgs = WScript.Arguments
if oArgs.Count < 6 Then
Wscript.Quit -1
End If
Dim oAPI, prmDevice, controllerID, enclosureID
controllerID = oArgs(3)
enclosureID = oArgs(4)
prmDevice = oArgs(5)
Set oAPI = CreateObject("MOM.ScriptAPI")
Const WAIT_LOOP = 1000000
Const SCRIPT_NAME = "Dell Agents State Monitoring"
Const OM_REPORT_STORAGE_CONTR = "Storage"
Const DEF_OMSA_BIN_PATH = "C:\Program Files\Dell\OpenManage\oma\bin"
Const OMSA_REG_INTALL_PATH = "HKEY_LOCAL_MACHINE\SOFTWARE\Dell Computer Corporation\Dell OMA\InstallPath"
Const OMSA64_REG_INTALL_PATH = "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Dell Computer Corporation\Dell OMA\InstallPath"
Dim ObjectStatus
Dim s
Set s = New DellStorage
s.GetObjectHealth()
Dim cAPI, oBag
Set cAPI = CreateObject("MOM.ScriptAPI")
Set oBag = cAPI.CreatePropertyBag()
Call oBag.AddValue("Status", ObjectStatus)
Call cAPI.Return(oBag)
Set cAPI = Nothing
Set oBag = Nothing
Class DellStorage
Dim RegError, LogMessage, Message
Dim a, b
Dim rc, filespec, oShell
Dim strCommand, strRepFilePath, wintemp_path
Function GetObjectHealth()
Dim OMSABinPath ' Store Path from Registry key
Dim drive ' Drive letter
Dim version
RegError = 0
' Get OMSA Lib Path
rc = GetOMABinPath(OMSABinPath)
If rc <> 0 Then
WScript.Quit()
End If
' Get Install root path
rc = GetOMInstallRoot(drive, OMSABinPath) ' return the current absolute path or the root path for the OMSA Install
If rc <> 0 Then
WScript.Quit()
End If
If RegError = 1 Then
Message = "Task Fail: OMSA not installed / OMSA Registry Value not found."
MOMDebugLog Message
WScript.Quit()
End If
' Check VBScript engine version
version = CheckVBScriptEngine()
If version = True OR version = False Then
RunCLI drive, OMSABinPath
Else
Message = "Error: VBScript corrupted/absent. Please Re-Install Windows Script 5.6 on the Agent"
MOMDebugLog Message
WScript.Quit()
End If
End Function
'*****************************************************************
'Function RunCLI
'Routine For CLI VB.Run (For Version < 5.6)
'*****************************************************************
Function RunCLI(ByVal targetDrive, ByVal strOMSABinPath)
Dim guid1
GetTempFolderPath wintemp_path, targetDrive
GetOMReportFileGUID guid1
RunStorageCLI targetDrive, strOMSABinPath
End Function
'*****************************************************************
'GetOMABinPath
'Routine to read the registry to query the OMA Install Path
'*****************************************************************
Function GetOMABinPath(o_sPath)
Dim oShell, tmp
Set oShell = CreateObject ("WScript.Shell")
o_sPath = ""
On Error Resume Next
o_sPath = oShell.RegRead(OMSA_REG_INTALL_PATH)
If o_sPath = "" Then
o_sPath = oShell.RegRead(OMSA64_REG_INTALL_PATH)
End If
If o_sPath = "" Then
tmp = DEF_OMSA_BIN_PATH & "\omreport.exe"
If(bFileExists(tmp)) Then
o_sPath = DEF_OMSA_BIN_PATH
Message = "GetOMABinPath - OMSABinPath is empty, Using Default Existing Path" & DEF_OMSA_BIN_PATH
MOMDebugLog Message
Else
RegError = 1
End If
Else
o_sPath = o_sPath & "\bin"
End If
If Err <> 0 Then
GetOMSABinPath = Err.Number
End If
End Function
'*****************************************************************
'GetOMInstallRoot
'Routine to determine the Drive letter where OMSA is installed
'*****************************************************************
Private Function GetOMInstallRoot(ByRef path, ByVal OMSAInstallPath)
On Error Resume Next
Err.Clear
' Return the root drive of the OMInstall Path
path = Left(OMSAInstallPath, 2)
End Function
'*****************************************************************
'bFileExists
'Routine to determine if the OMSA Report file is created
'*****************************************************************
Function bFileExists(filespec1)
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
bFileExists = (fso.FileExists(filespec1))
Set fso = Nothing
End Function
'*****************************************************************
'DelFile
'Routine to delete the OMSA Report file
'*****************************************************************
Function DelFile(ByVal filespec2)
Dim fso
If bFileExists(filespec2) Then
Set fso = CreateObject("Scripting.FileSystemObject")
fso.DeleteFile filespec2, True
Set fso = Nothing
End If
If Err <> 0 Then
DelFile = Err.Number
End If
End Function
'**********************************************************
' CheckVBScriptEngine()
' Check VBScript engine version:
'**********************************************************
Function CheckVBScriptEngine()
Dim bIsCompatV, var
Const VBSCRIPT_MIN_VERSION = 5.6
var = ScriptEngineMajorVersion & "." & ScriptEngineMinorVersion
If (CInt(var)) < VBSCRIPT_MIN_VERSION Then
bIsCompatV = False
Else
bIsCompatV = True
End If
If Err <> 0 Then
CheckVBScriptEngine = Err.Number
Else
CheckVBScriptEngine = bIsCompatV
End If
End Function
'*****************************************************************
'Function RunStorageCLI - Called from RunCLI
'Routine For VB.Run (For Version < 5.6)
'*****************************************************************
Function RunStorageCLI (ByVal Drive2, ByVal OMSABinPath)
Dim guid22
GetTempFolderPath wintemp_path, Drive2
GetOMReportFileGUID guid22
a = 1
b = 0
strRepFilePath = wintemp_path & "\" & OM_REPORT_STORAGE_CONTR & guid22 & ".xml"
strCommand = "cmd /C " & chr(34) & OMSABinPath & "\" & "omreport.exe" & Chr(34) & " storage enclosure controller=" & controllerID & " enclosure=" & enclosureID & " info=emms -fmt xml -outc " & strRepFilePath
filespec = strRepFilePath
Set oShell = CreateObject ("WScript.Shell")
rc = oShell.run (strCommand,0,true)
If rc <> 0 Then
DelFile(strRepFilePath)
Else
' Infinite Loop Until file OM_REPORT_FILE_NAME is created
Do While bFileExists(filespec) <> -1
WScript.Sleep(0)
a = a + 1
b = a Mod WAIT_LOOP
If b = 0 Then
MOMDebugLog "Exit RunCmd. Reason: OMREPORT STORAGE not responding for " & WAIT_LOOP & " loops."
Exit Do
End If
Loop
' Parse XML File
ParseStorageXML filespec
' Clean up the CLI Output : Delete OM_REPORT_FILE_NAME for STORAGE
DelFile(strRepFilePath)
End If ' End of If Condition for rc<>0 for oshell.run(omreport storage controller)
Set strRepFilePath = Nothing
Set strCommand = Nothing
Set oShell = Nothing
Set filespec = Nothing
End Function
'*****************************************************************
' Function ParseStorageXML
' Rollup GlobalStorageHealth from OMSS StorageController XML Output
'*****************************************************************
Function ParseStorageXML(ByVal storagefilepath)
Dim object_health, object_arr
Dim obj, obj_val
Dim xmlDoc, i
If(bFileExists(storagefilepath)) Then
Set xmlDoc = CreateObject("Microsoft.XMLDOM")
If (IsObject(xmlDoc) = True) Then
xmlDoc.async = "false"
xmlDoc.load(storagefilepath)
If (xmlDoc.parseError.errorCode <> 0) Then
Dim myErr
Set myErr = xmlDoc.parseError
Message = "XML Parse Error Reason: " & myErr.reason
MOMDebugLog Message
Message = "XML Parse Error Line: " & myErr.line
MOMDebugLog Message
Message = "XML Parse Error Character: " & myErr.linepos
MOMDebugLog Message
Message = "XML Parse Error Text: " & myErr.srcText
MOMDebugLog Message
DelFile(storagefilepath)
Exit Function
End If
Set object_arr = xmlDoc.getElementsByTagName("TreeStatus")
Set obj = xmlDoc.getElementsByTagName("Index")
object_health = 0
For i = 0 To (object_arr.length - 1)
object_health = object_arr.Item(i).nodeTypedValue
obj_val = obj.Item(i).nodeTypedValue
If StrComp(prmDevice,obj_val,1)=0 Then
If object_health = 2 Then
ObjectStatus = "OK"
ElseIf object_health = 3 Then
ObjectStatus = "Warning"
ElseIf object_health = 4 Then
ObjectStatus = "Error"
End If
End If
Next
Else
Message = "Error: DOM object not created using CreateObject - Microsoft.XMLDOM"
MOMDebugLog Message
End If
Else
Message = "Storage CLI XML Output File does not exist - " & storagefilepath
MOMDebugLog Message
End If
End Function
'*****************************************************************
' Function MOMDebugLog
' Add LogMessage Header - ScriptName and Time and Logging it.
'*****************************************************************
Function MOMDebugLog (ByVal strMessage)
LogMessage = "(" & SCRIPT_NAME & ")" & "-" & "[" & Now() & "] --- "
LogMessage = LogMessage & strMessage
End Function
'*****************************************************************
'GetTempFolderPath
'Routine to Get Win Temp Folder path
'*****************************************************************
Function GetTempFolderPath(ByRef WinTempFolder, ByVal drive_letter)
Dim FldrExistFlag, fso
FldrExistFlag = False
dim wshShell : Set wshShell = Createobject("WScript.Shell")
dim wshSysEnv : Set wshSysEnv = wshShell.Environment
dim strSysTempFolder : strSysTempFolder = wshSysEnv("TEMP")
dim wshPrcEnv : Set wshPrcEnv = wshShell.Environment("Process")
strSysTempFolder = Replace(strSysTempFolder, "%SystemRoot%", wshPrcEnv("SYSTEMROOT"), 1, -1, vbTextCompare)
WinTempFolder = strSysTempFolder
Set fso = CreateObject("Scripting.FileSystemObject")
If (fso.FolderExists(WinTempFolder)) Then
FldrExistFlag = True
Else
FldrExistFlag = False
End If
If WinTempFolder = "" OR FldrExistFlag = False Then
WinTempFolder = drive_letter
End If
Set wshShell = Nothing
Set wshSysEnv = Nothing
Set strSysTempFolder = Nothing
Set wshPrcEnv = Nothing
If Err <> 0 Then
GetTempFolderPath = Err.Number
End If
End Function
'*****************************************************************
'GetOMReportFileGUID
'Routine to generate unique GUIDs for OMREPORT FILE
'*****************************************************************
Function GetOMReportFileGUID(ByRef o_guid)
Dim TypeLib, NewGUID
Set TypeLib = CreateObject("Scriptlet.TypeLib")
NewGUID = TypeLib.Guid
o_guid = (left(NewGUID, len(NewGUID)-2))
Set TypeLib = Nothing
End Function
End Class
300Property[@Name='Status']EqualOKProperty[@Name='Status']EqualWarningProperty[@Name='Status']EqualCriticalAvailabilityHealth$Target/Host/Host/Host/Host/Host/Property[Type="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$SystemEventDisplayNumberGreaterEqual2048EventDisplayNumberLessEqual2900PublisherNameEqualServer AdministratorEnclosurePowerSupplyEventTrigger.vbs$MPElement$ $Target/Id$ $Config/Computer$ $Target/Host/Host/Host/Property[Type="Dell.Connections.DellStorageController"]/DeviceID$ $Target/Host/Property[Type="Dell.Connections.ControllerEnclosure"]/ID$ $Target/Property[Type="Dell.Connections.EnclosurePowerSupply"]/ID$
'**********************************************************************************
' Script Name - EnclosurePowerSupplyEventTrigger
' Author: Muralidhar
'
' Description:
' Determine Unit Monitor health for EnclosurePowerSupply
'
' (c) Copyright Dell Inc. 2007 - All rights reserved
'**********************************************************************************
Option Explicit
Dim oArgs
Set oArgs = WScript.Arguments
if oArgs.Count < 6 Then
Wscript.Quit -1
End If
Dim oAPI, prmDevice, controllerID, enclosureID
controllerID = oArgs(3)
enclosureID = oArgs(4)
prmDevice = oArgs(5)
Set oAPI = CreateObject("MOM.ScriptAPI")
Const WAIT_LOOP = 1000000
Const SCRIPT_NAME = "Dell Agents State Monitoring"
Const OM_REPORT_STORAGE_CONTR = "Storage"
Const DEF_OMSA_BIN_PATH = "C:\Program Files\Dell\OpenManage\oma\bin"
Const OMSA_REG_INTALL_PATH = "HKEY_LOCAL_MACHINE\SOFTWARE\Dell Computer Corporation\Dell OMA\InstallPath"
Const OMSA64_REG_INTALL_PATH = "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Dell Computer Corporation\Dell OMA\InstallPath"
Dim ObjectStatus
Dim s
Set s = New DellStorage
s.GetObjectHealth()
Dim cAPI, oBag
Set cAPI = CreateObject("MOM.ScriptAPI")
Set oBag = cAPI.CreatePropertyBag()
Call oBag.AddValue("Status", ObjectStatus)
Call cAPI.Return(oBag)
Set cAPI = Nothing
Set oBag = Nothing
Class DellStorage
Dim RegError, LogMessage, Message
Dim a, b
Dim rc, filespec, oShell
Dim strCommand, strRepFilePath, wintemp_path
Function GetObjectHealth()
Dim OMSABinPath ' Store Path from Registry key
Dim drive ' Drive letter
Dim version
RegError = 0
' Get OMSA Lib Path
rc = GetOMABinPath(OMSABinPath)
If rc <> 0 Then
WScript.Quit()
End If
' Get Install root path
rc = GetOMInstallRoot(drive, OMSABinPath) ' return the current absolute path or the root path for the OMSA Install
If rc <> 0 Then
WScript.Quit()
End If
If RegError = 1 Then
Message = "Task Fail: OMSA not installed / OMSA Registry Value not found."
MOMDebugLog Message
WScript.Quit()
End If
' Check VBScript engine version
version = CheckVBScriptEngine()
If version = True OR version = False Then
RunCLI drive, OMSABinPath
Else
Message = "Error: VBScript corrupted/absent. Please Re-Install Windows Script 5.6 on the Agent"
MOMDebugLog Message
WScript.Quit()
End If
End Function
'*****************************************************************
'Function RunCLI
'Routine For CLI VB.Run (For Version < 5.6)
'*****************************************************************
Function RunCLI(ByVal targetDrive, ByVal strOMSABinPath)
Dim guid1
GetTempFolderPath wintemp_path, targetDrive
GetOMReportFileGUID guid1
RunStorageCLI targetDrive, strOMSABinPath
End Function
'*****************************************************************
'GetOMABinPath
'Routine to read the registry to query the OMA Install Path
'*****************************************************************
Function GetOMABinPath(o_sPath)
Dim oShell, tmp
Set oShell = CreateObject ("WScript.Shell")
o_sPath = ""
On Error Resume Next
o_sPath = oShell.RegRead(OMSA_REG_INTALL_PATH)
If o_sPath = "" Then
o_sPath = oShell.RegRead(OMSA64_REG_INTALL_PATH)
End If
If o_sPath = "" Then
tmp = DEF_OMSA_BIN_PATH & "\omreport.exe"
If(bFileExists(tmp)) Then
o_sPath = DEF_OMSA_BIN_PATH
Message = "GetOMABinPath - OMSABinPath is empty, Using Default Existing Path" & DEF_OMSA_BIN_PATH
MOMDebugLog Message
Else
RegError = 1
End If
Else
o_sPath = o_sPath & "\bin"
End If
If Err <> 0 Then
GetOMSABinPath = Err.Number
End If
End Function
'*****************************************************************
'GetOMInstallRoot
'Routine to determine the Drive letter where OMSA is installed
'*****************************************************************
Private Function GetOMInstallRoot(ByRef path, ByVal OMSAInstallPath)
On Error Resume Next
Err.Clear
' Return the root drive of the OMInstall Path
path = Left(OMSAInstallPath, 2)
End Function
'*****************************************************************
'bFileExists
'Routine to determine if the OMSA Report file is created
'*****************************************************************
Function bFileExists(filespec1)
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
bFileExists = (fso.FileExists(filespec1))
Set fso = Nothing
End Function
'*****************************************************************
'DelFile
'Routine to delete the OMSA Report file
'*****************************************************************
Function DelFile(ByVal filespec2)
Dim fso
If bFileExists(filespec2) Then
Set fso = CreateObject("Scripting.FileSystemObject")
fso.DeleteFile filespec2, True
Set fso = Nothing
End If
If Err <> 0 Then
DelFile = Err.Number
End If
End Function
'**********************************************************
' CheckVBScriptEngine()
' Check VBScript engine version:
'**********************************************************
Function CheckVBScriptEngine()
Dim bIsCompatV, var
Const VBSCRIPT_MIN_VERSION = 5.6
var = ScriptEngineMajorVersion & "." & ScriptEngineMinorVersion
If (CInt(var)) < VBSCRIPT_MIN_VERSION Then
bIsCompatV = False
Else
bIsCompatV = True
End If
If Err <> 0 Then
CheckVBScriptEngine = Err.Number
Else
CheckVBScriptEngine = bIsCompatV
End If
End Function
'*****************************************************************
'Function RunStorageCLI - Called from RunCLI
'Routine For VB.Run (For Version < 5.6)
'*****************************************************************
Function RunStorageCLI (ByVal Drive2, ByVal OMSABinPath)
Dim guid22
GetTempFolderPath wintemp_path, Drive2
GetOMReportFileGUID guid22
a = 1
b = 0
strRepFilePath = wintemp_path & "\" & OM_REPORT_STORAGE_CONTR & guid22 & ".xml"
strCommand = "cmd /C " & chr(34) & OMSABinPath & "\" & "omreport.exe" & Chr(34) & " storage enclosure controller=" & controllerID & " enclosure=" & enclosureID & " info=pwrsupplies -fmt xml -outc " & strRepFilePath
filespec = strRepFilePath
Set oShell = CreateObject ("WScript.Shell")
rc = oShell.run (strCommand,0,true)
If rc <> 0 Then
DelFile(strRepFilePath)
Else
' Infinite Loop Until file OM_REPORT_FILE_NAME is created
Do While bFileExists(filespec) <> -1
WScript.Sleep(0)
a = a + 1
b = a Mod WAIT_LOOP
If b = 0 Then
MOMDebugLog "Exit RunCmd. Reason: OMREPORT STORAGE not responding for " & WAIT_LOOP & " loops."
Exit Do
End If
Loop
' Parse XML File
ParseStorageXML filespec
' Clean up the CLI Output : Delete OM_REPORT_FILE_NAME for STORAGE
DelFile(strRepFilePath)
End If ' End of If Condition for rc<>0 for oshell.run(omreport storage controller)
Set strRepFilePath = Nothing
Set strCommand = Nothing
Set oShell = Nothing
Set filespec = Nothing
End Function
'*****************************************************************
' Function ParseStorageXML
' Rollup GlobalStorageHealth from OMSS StorageController XML Output
'*****************************************************************
Function ParseStorageXML(ByVal storagefilepath)
Dim object_health, object_arr
Dim obj, obj_val
Dim xmlDoc, i
If(bFileExists(storagefilepath)) Then
Set xmlDoc = CreateObject("Microsoft.XMLDOM")
If (IsObject(xmlDoc) = True) Then
xmlDoc.async = "false"
xmlDoc.load(storagefilepath)
If (xmlDoc.parseError.errorCode <> 0) Then
Dim myErr
Set myErr = xmlDoc.parseError
Message = "XML Parse Error Reason: " & myErr.reason
MOMDebugLog Message
Message = "XML Parse Error Line: " & myErr.line
MOMDebugLog Message
Message = "XML Parse Error Character: " & myErr.linepos
MOMDebugLog Message
Message = "XML Parse Error Text: " & myErr.srcText
MOMDebugLog Message
DelFile(storagefilepath)
Exit Function
End If
Set object_arr = xmlDoc.getElementsByTagName("TreeStatus")
Set obj = xmlDoc.getElementsByTagName("Index")
object_health = 0
For i = 0 To (object_arr.length - 1)
object_health = object_arr.Item(i).nodeTypedValue
obj_val = obj.Item(i).nodeTypedValue
If StrComp(prmDevice,obj_val,1)=0 Then
If object_health = 2 Then
ObjectStatus = "OK"
ElseIf object_health = 3 Then
ObjectStatus = "Warning"
ElseIf object_health = 4 Then
ObjectStatus = "Error"
End If
End If
Next
Else
Message = "Error: DOM object not created using CreateObject - Microsoft.XMLDOM"
MOMDebugLog Message
End If
Else
Message = "Storage CLI XML Output File does not exist - " & storagefilepath
MOMDebugLog Message
End If
End Function
'*****************************************************************
' Function MOMDebugLog
' Add LogMessage Header - ScriptName and Time and Logging it.
'*****************************************************************
Function MOMDebugLog (ByVal strMessage)
LogMessage = "(" & SCRIPT_NAME & ")" & "-" & "[" & Now() & "] --- "
LogMessage = LogMessage & strMessage
End Function
'*****************************************************************
'GetTempFolderPath
'Routine to Get Win Temp Folder path
'*****************************************************************
Function GetTempFolderPath(ByRef WinTempFolder, ByVal drive_letter)
Dim FldrExistFlag, fso
FldrExistFlag = False
dim wshShell : Set wshShell = Createobject("WScript.Shell")
dim wshSysEnv : Set wshSysEnv = wshShell.Environment
dim strSysTempFolder : strSysTempFolder = wshSysEnv("TEMP")
dim wshPrcEnv : Set wshPrcEnv = wshShell.Environment("Process")
strSysTempFolder = Replace(strSysTempFolder, "%SystemRoot%", wshPrcEnv("SYSTEMROOT"), 1, -1, vbTextCompare)
WinTempFolder = strSysTempFolder
Set fso = CreateObject("Scripting.FileSystemObject")
If (fso.FolderExists(WinTempFolder)) Then
FldrExistFlag = True
Else
FldrExistFlag = False
End If
If WinTempFolder = "" OR FldrExistFlag = False Then
WinTempFolder = drive_letter
End If
Set wshShell = Nothing
Set wshSysEnv = Nothing
Set strSysTempFolder = Nothing
Set wshPrcEnv = Nothing
If Err <> 0 Then
GetTempFolderPath = Err.Number
End If
End Function
'*****************************************************************
'GetOMReportFileGUID
'Routine to generate unique GUIDs for OMREPORT FILE
'*****************************************************************
Function GetOMReportFileGUID(ByRef o_guid)
Dim TypeLib, NewGUID
Set TypeLib = CreateObject("Scriptlet.TypeLib")
NewGUID = TypeLib.Guid
o_guid = (left(NewGUID, len(NewGUID)-2))
Set TypeLib = Nothing
End Function
End Class
300Property[@Name='Status']EqualOKProperty[@Name='Status']EqualWarningProperty[@Name='Status']EqualCriticalAvailabilityHealthErrorfalseNormalError300false$Target/Property[Type="NetworkDevice!Microsoft.SystemCenter.NetworkDevice"]/IPAddress$$Target/Property[Type="NetworkDevice!Microsoft.SystemCenter.NetworkDevice"]/CommunityString$.1.3.6.1.2.1.25.3.2.1.5.10AvailabilityHealthWorstOfAvailabilityHealthWorstOfAvailabilityHealthWorstOfAvailabilityHealthWorstOfAvailabilityHealthWorstOfAvailabilityHealthWorstOfAvailabilityHealthWorstOfAvailabilityHealthWorstOfAvailabilityHealthWorstOfAvailabilityHealthWorstOfAvailabilityHealthWorstOfAvailabilityHealthWorstOfAvailabilityHealthWorstOfAvailabilityHealthWorstOfAvailabilityHealthWorstOfAvailabilityHealthWorstOfAvailabilityHealthWorstOfAvailabilityHealthWorstOfAvailabilityHealthWorstOfAvailabilityHealthWorstOfAvailabilityHealthWorstOfAvailabilityHealthWorstOfAvailabilityHealthWorstOfAvailabilityHealthWorstOfAvailabilityHealthWorstOfAvailabilityHealthWorstOfAvailabilityHealthWorstOfAvailabilityHealthWorstOfAvailabilityHealthWorstOfAvailabilityHealthWorstOfAvailabilityHealthWorstOfAvailabilityHealthWorstOfAvailabilityHealthWorstOfAvailabilityHealthWorstOfAvailabilityHealthWorstOfAvailabilityHealthWorstOfAvailabilityHealthWorstOfAvailabilityHealthWorstOfAvailabilityHealthWorstOfAvailabilityHealthWorstOfAvailabilityHealthWorstOfAvailabilityHealthWorstOfAvailabilityHealthWorstOfAvailabilityHealthWorstOfAvailabilityHealthWorstOfAvailabilityHealthWorstOfAvailabilityHealthWorstOfAvailabilityHealthWorstOfAvailabilityHealthWorstOfAvailabilityHealthWorstOfAvailabilityHealthWorstOffalse89504E470D0A1A0A0000000D49484452000000500000005008060000008E11F2AD000000017352474200AECE1CE90000000467414D410000B18F0BFC6105000000206348524D00007A26000080840000FA00000080E8000075300000EA6000003A98000017709CBA513C000041CF49444154785EEDBD05745CD999EF5BDD994E8793A1642099CCBC4C66920E7427337728E9E074BADB6C8B4DB2650B0C32C816581633586431B3C5CC64A1C5CCCCCC9225DBB254F57FFF7D4A769CA42770DF7B77EE5BEBF65ADF3AA78E2CA85F7DBCBFBDFB3500B2ADF941D92FFF7B4D06C59EECF9D327B2D75F7F5DA6D8DD964D3766C83EF1D93F937DEE6FBE2B7BEDF58FC96EB944CBE4F23D19BF55F6DA6BAFC95E936EC44FE0F5D5FF5E3C7FF198FF56FC43F133F6BF59BCFE985CBE73FE35C88C5EFFD81B7FA950C8FB5E7BFDF5CBAFBDF67ABBF8DBC47FBEF6375E9BA88AFEDCEE938DCFF3477C96CF3FF989CF7DF1139FF8FC173FCD7BF08F907EFF6B789D2FF83DFBBF57FC6DBBBB7BCF9FADCD4ECB9FAEAF7EF547DA8FFFE29D0FF7A6EA12656B234DB2BFFCFE61D9DA688BECE9DA8C4CBEB72BFBCC17BF2AFBC257BE239B6D2B90FDD1273E2DDBDD5E95BDFE476FCA3EF7E5B764F2DD1D994C2197C99F3F937DE9BBEFC996FAAB654F9627C5EF82ECF1DCC02B3228DB9CE9952D0F37CB56475B65CB03D5B2F65823597FA6936CB6355736D75E203BA9A929D3505395A9ABAAF2AA26D3E45593AF35D5547E55544FF035455CA57BF17555999686864C4B5D5D5CDFE03303D5A307E7742FDFC4955BD6D03EABFDFCEAC533FD05BED7025AC2F4033BE26E670E15F9360E64BBF50F15DE9F187D18B23C5E11BE39551DF36CA63E49315D9FA8943A210972496A1FEC4DD6C4EC4E5647ED8C57466E0E9704F6F767BBD60C17DECF192D0B79D09978D7A62BE18EFA547DDA7F76255BBDD51A71F5F34DA1061F1FC875972D7697C95A230D659D097764FCFDB2B6A86BB291D220D960818F6C30CF53D697E1245B25FC01DEB745DFF8EF0118E170F94DFB3BD7EDCFAA1F9FD53E771156BEA988A859434A2FE093520B63330BDCB8AC2FCF4E8CC0EA44171E4F77616BBA135B93ADD81A6FC4E3915A6C0C562A56BAF215CBAD698AA58678C5626D947CBE2642BE501B295FA88FDD5BAC8F79BED898B0B3D291B5BDD65DB0B2DA9537B3DC9E35B4DC55D0BAD2575EB5D8919F3B539F1847CDF61D290930EF49B3D3EE4BB7FBF14096CB375A220DFFAC3DEEF69B4D21172580A30FC36483F9DEFFBD007B321CBF305211FDB324CF5BA9C606A7D6CF9DD7C35DAF6404952DE241BB028934D8645E7306819C815D78C6E4C1E8A6114C6F5CDEAD490FC2524B3216EAA23157158CD9877E9829F1504C15BA2A26F31D151379768AC95C1BF9443625CB7A6F3CCB6A6F22CB6A7722CB7287D7AD894CCBD5896CEBE9C95CBBC1A942E7767E6FE55C857F3621C7ADB4A6FBAEF6143A6E0C551BAFF6955F9C6FCD529BAC89FD6030C7ED5FBA12EF7CAD2DCAF04F7AD3EDDF1C2CB8FFDA60BE97520369F6FF4B3470B1A7F2B33DC9D607DBA2AF87958599CC38185F78AE73F1128C5D63E1953F83C82620A6498EB8A6E7486A9323AD13C8EC01F208B1748AD7FE4D38F884C1E8C675B9F3DDEBBB6DB97E987F148EB98A40C54C998F62BA580971AAC0493195EF209FCCB5A7D8ED4DE4D80AD9A53C9BCCB1D9A2AC52A6097190D23E916D553D9E65993B9E65114FC8BEFC9AC354BEE3EDD9F2FB1717EBA235D63AB20FAC0F96FF7075A0FC9D85B6AC7F182DF1FBEA408EEB9F7425987DB227CDFE638B7D55D446AFFFEF4CB827D5E6FB9DC9564EDD29B6234D699EF0B5BFB57BE6EC795C778C8273DA1802AA1408AA798EB09A6DC4D43F437CF32E523A1412BC9C3E209F008B4680878458B304A4348EC2DCC6098697F4E461AEC672FA42C5CCC3FB0478EF0540F9641E01E6D9C927087092002773EC9E4FE4D83CA310A0ED0A6586F703BCB6512A092D871A1BCB7B3F3E7724586342D5A3B66A10EA017E10EFCE94787D6FBE36E2EB2BEDE95F5DE9CCFBD27C73EA17C64A033EDD9B6AFD267DE81FB5465D7FFDFFB520325216F2C9FEDC7BC73A1EDCC9E9CFF57CDA911F0C2FEBEB3BE7CEE9282EDD0D84456C1FEE95ECC0BB741BF74B371154B18588474F11D7B883C4D63DA4750159FBF08A4781B20902DC97EA39A0725E8EE0AC6A98DDB581A1AEF65EAAAF9962B2C843315DE4460D74562801DACB2772240D14DA4780D4C06CDBADC96C1B01709A2201E4F32A5EB3297184E74B908EBC379ECCB5D5A568F0EB07F9FC07D4D4EFD31DFC03DDC057A8A17F3157EEF7C74B8DF19F5D6A4DFBD4CCA3A8378772DD3EF5FF18E07C47E12708EF64578A755D5F9E0FDA0A22E06D79F9B9F6A9530A7D331F988476C3366B1B8E398FE19CB30C8FC255F8966D22B86A1B11B54F11DB44806D0AA47753FBFA818221A0640C289F04AAA695524E90A5948A797E7DE4099C839371EDEA558599A1CE6E758C956220D38126EC289930DF3CB55032E11D42A106DA6E11C60A45001C24A03602A306DAE6500BE32934615B477EDD84A24B51E7EB0F78FD21E57BFCFE7FA0FC1D35F42F08F44FC6B3AD3F3D99EFF0A9B90ABF8F2FD6C7FECF03EC4E77FCF85091FFF1EE54DBDA1E826BCE0D8187B91EC19D545C32F1C0CD8026DC495A8545CA2A2C93E66197BE00A79C15025C5302ACFE4D80D9BF0D20A116126EAE10DE67B52FC2C1D90D7AE7CE287CAC2E816F4AD2409A9E8028CCF8F92F01DAD207DACEFC9A06EE03B4F52750277E8F31459FD0D4284203DFE5EBEFF17BFE7122DBF6ABBC7E91B0FF98D7CF4C64D97C923029369FFE833470AE2D5FB6D055221B2AB8FF4E6BD48D82AEAC7B68CD0B85BBE9C5DD0B674FCAAFDE71C79DF06658A4AEE14EE22A4CE36670E7C10C2C92E7619BBEA80458B0A634E14A02A409C7363E47422B03C82B265CB46FC242F38408732EE4B35CFAC6B23105DA67E58AD6C9BD3D8FC41EE89E3BAD70B87D0192F94A262C20DAEF519E537668DA5BBC5203ED44141EA2B4510BABF9E673293461092035D0961A2800DA6AF2F58704F503DE7F9FF20D82FB3B021500FF94303FCD679FA4BC49D7F0FB02BC291BC876914D37A451EB7C4DDA132DB65BF282E16D61F0FCAC9686C2DCDE031EA9EDF0A08FB3CB7A0CF3845998C44EC1246E9A00E760993C07DBB4453866ADE09E0058B28940020C7FF404B10D3B78D0B28754118199070A33169A564260C29405CC4206944A06949E6585BC73EAE96E58DEA4FCA8653BBEAB9D8B4B3AA7E46E77F43025E049515868A2E3DE54BED30EA3F3CE64BED3D6649ED30A41CED0CC87296D4C7D2AF93A8F12C7EF6110B173245853061E7D027A01F05D82FCA7F11C1B9AB0CDDF2835D05602C8EBA7F8EC4DBA8ADFCF843B626FB11271FC3B66ED851D599EC88D70DA31BC707ACFCED901298F9A19399F23A5750721E51BB04D5DC4EDD81918C74EC39800CDE2A98149B3B0495D8063E632DCF257E15DBC8180F22D84563F4114A3B048639299C6083F9845887903D4368AC809CB2714029CA277F6993CA6784AAE61D7A2F89E6E0DBEA35B877FB9988F2B174ECBDD0950F27F428419E73910A0E373CA0E657B2ACF6185D769821B225801B09A6073197CE2F8DA9FA01D79BDCDE7BAFC5E756AF387220A53CBDE21C4AF53FE96B0BE38916BF32704F73902FC24E513BCFFDD005787EB65ED5186EFB6C5DC1AEC2C08478E9F112E9F3ABCE3119A8AA1B5C7A08F47C5821C51751B0829994744F9129CD2E7713D720A37A2A6604A807713E66095B200FBCC25B8E6ADC0AB681D7E658FA540125EF314319219339561222D343185E65C34ACD4B881F99DBDA487B3F2B34E1D8A7FD27B8477741FE15F2FD7E19F2F37E2DF0C0A7195003DCCF509D04E4A63A4AB1489ED68C2763BBC6E13C42A01CF10CE10A59D42808E3993058E04E8E83755E0E8C0D7C612C002274DC2FD90407FC0D7DFA746FF237FCE57F833BE48F902CD5868DF2718DD69C2BF4303D727BB6493D531EA2D7166EBAD055178607B0AAE5A7F8FF32755D7AE870CC2B37053F170F0A9BC6519F27C9A5A40D553DCCB994348E134FC0AE6086F1AD722266116370BCB14FAC10CFAC1ECE597661C50FE18A1221AD73D4374C3734437EE22A34B8E965901EEB93CB37A4EAEEFD1A510C0BE6F508B1F5E6FC07F18D6E37FF0F53F5D6DC27F5C2A614A7366CFF32E01EE07106A06018A286CC354C64644E26D9148F37E96E6374408FB79A06D1EC1C411AC1F813A526E532E109A1A85001DDFA5667E9FD76F50BEC2AF7D91BFE38FA772ED3FC30FE85342038529FF97416475A25B365A117DB52DD17AB7212714E12647E1ACFE35B89FFA06CE6BA9AC1906F5E046FC1AB56B16D1551B7BA5FDBB7BD9BD50843C52C035771D5ED9D3082D9A8173C62C6EC54C13A63063464E6AA14B2EB55044E3D22DF8D394FDCAB7115DBF83AAD13D79F7F48E3CFBD1FCDE55EF6EC57F5CADC73F5FAAC38F6E36E227B7088C00FFE56A03FED5B011FF7ABD15EF5E29C335BD337B5E16FA6002ADA048690C81EDE782363B34BF2D8A00C844DA7690579107564A4124673F88E4D83AF0D96D82B9C000A34EA8EF13D80F68FAEF10DED779FF650960BEC31FF3D9A7A9959F207CFA40BB1700FBD98D518A686D6D2F8ECAC6AAE24EB624582B2A93BDE17BF9277050FB7BB89D7E0B1E67DE82CE29F535C3FB8F703BAC0756696BB0C958835FF19A3CAB6D67AFA07B4F9ED4245784543CC7FD8245F8E54EC123679691788EC1651E3669F485D94A5376CBA7293FDC54E476518BC79FC9F3EA97F66EF9F72A7E728390084F407BCFA4053FBBDD4C7834D96B4DF8F7EB4DF8C18D66FCC0A81D3FB9F610D7F5CEEEF9581A80A6BA6FBE92060AD925486A20010A0DCC26C05CA506F27515AF3994383E17958803FFDD2DBEBE20F2403EFB80DAFAEF84F436E5EFA9797F3D956F2F34F00B2C199500F3ECDFE4D79400B7168695B238428043B2E9A6F41FB4C499AE552478C04DE75F60A7FA75B89C7C0BEEFB00CF9F545BBB13D60E13B707B8EA940CC7F4297897EDC0BF621B49CD4FE465BD4F77CB7B77F68A7B18189A9F208CBEF15ED634EC52676195BC40735E840B4D39B161535E3BB0B5975DB7B0671CD8AF78DFB409EF52CB7E6ED28C5FDC69C607775AF19E690B7E7843406BC20F8D9AF1C35BCD78F7760B7E64DC819FDDAAC00D7DEDBDFB220F14262C81133E90C9B400982B25D34F78BFF6220F141AC8FB2AA620CC036DE3282291B6A3185174282AFC37BFE0F5DFF8A17C87DFFB75C2FDB2148573ED3ECFDFF3299AF12719F53FFE12E0F3ED759990BDE74F99E795FE794BB451475DBA1FBC2EFF0CD62A7F0F47ADB7E04C804203EF9DF926B43555D69C9347E09FDA045D8734E89AFBC332A41C41F467516C1024B7EE2ACA0776F65A279EEF75CFECC93BA7E528EB7A8CC0A25906981945E8C3557949C7FA5E46F5DCAE5970AFFC2061FDD4A809EF9B35E380792B3EB8DB8A0377DBF081591BDE15D06E36E34704F763E356FCC48462DA8A9FDDE9C27BB72B6164A0AD0C22920F14915804137BF974BEE36EACABA1DCDDF482BC33D96673BAD07966A6C079907EAD8D01A2722ACF3187E6481F68E74F910012960EB5EF04EF7F4EF90FCA77285FE7F3BFDECF03A508CC7B9107320AEF6BE0F6D2B86C7B6942F674754636907BCFBB35D3179136E76071EC6BB0D77C0B8E84F702A0A7F67770564365CD2B7308D179EDB04C63B511DB832BB691B86E1706AF8C6E2477ED21A34F81A241B9A26D7A573EBAF47C6F6E43A1985A79AEA8EE597D1E5732B9671ADC233F7C97266ADC8483775B70C4AA15872CDB70C8A28DF71D7CD68E1F0B4DA3FCD4B44D929F9BB6E33FEFB4E33D738A650F3E30ADC66D83B37B0156BA3BED11976BDA2325A96E09BFDC126E756EE58CA69AFCF4E9B3B0BD766AB33EE2E6CC40CA9DFEE174CBB6D12CDBAAF15C872CA63131D345AEF7678ADCECA60B5D6E4C17389DA3AF3B41A03F27A07F27AC6F13D6D708950099034A5158CA01098F51F84510A1D6C9967A2B65630FC3FFA325DEE24961B42B6CD4DF82B5DA379400A981AEA7BE857B67BF03AFF36FE32C35F07ECE180AEB86E0913E08F7C22D3609B6601D5183CB967EB0BC9F84B847B3C81F6712CCCAA16652AE185B93CB0716F6E4BE3933F28326D57CF34D386AD982E3366D386EDD86A39463D6ED386EDB81A336344F02FBB1711B7E66466802D89D0EBC6FD1815F5876E203CB6E7C68338083E6B5D0D4D2DE38A57638A821F0FCEB8D148D13C78CD48E1F5AD5D137844D70111C621A70F5B6034EA9ABEE5E3D7BBCB8D4EB9C6653F08533CDA1BA06AD1106B73BA20D2D7BE38DCC0753CC6F8E66D99C9FC87352992A70F93981FE3BE55B0C22FF1781FE1521FE39C17D96E6FC492985C9B1FDB8D044C907EE6C2ECB9E6FADCABA526C621BB202E173FD20EE1EFF7BD86ABC2501743EF96DB89DFD2E3CCFBD0DEFF3DF8536A3B047FA28EBD1E7C8AB1B477C710FFC0AE7115E0F84542CC336280FB7EC03E19558CEF26B0BC5AC22EA6615486852E094F7180E99D640D3AE13AAB6ED50B16BA37450F8DABE132AF65DD4B2369A6A9B121CE57D8B7D68563D3860D3878336BD38683F8C23960DD03C796EE3A4EAE1402E15BCAF76ECC8C0D9733AB0F44966509B4568DD1E82AA77587B6FC1DCAF00172F1B8380D735544F988A658586C073AF35059D7F83D73FA37C8D60BFDD1AA6FF2F1D5186FFDA9770FB9FA9AD6F4DE43AFC1D41FEE57491CB9F122601DA091316F0DE20CC4F4800271BD264E3D571DF694B755ACB0EB18585CA3761A9FA0D6AE13769BE02DEDB70D77E1B1EDA8478F6DB38A3A1BA56D93E8DE90DA0B86707B9ADEB28A81FC183B221F6F71E4B7DBDB88A493805A6C1CA3302B115FDA042B2EE052E064CE084651DB41C3BA1F152BA78DF0D0D276A16B5ECA734D5F7CC098DE03EB4EAC6016B0223B843B67D38E23080638EFD38EE3CCA0FA0115A27B537D58E1D6ED4D2505F33750860D4EF474C0B10C63231B09C51BE54948EEBF02D7F06F7EC39DCB48BC019ED0B0A8D13474634554E1CD554D79069AAAB718D464DD6147441D61CA423A326FF5163C0B94F3505EBFC3135F58B1DD157FFBC3FD9F44FA8A19F21C44FD2D43F4EFFF906CD58198597FA2A6503396EC60DA91E0834D580E991AFC14AED9BB03BF91D389F795BD23E21EE84778F81445B5375ADA8690A4B5BC0C2C61E3A66F650D4FD1CC51DCB04398CF4DA2914B32D5FC32640CA43D6C891397838F60C097C637A819350B5AEC729974E9C74EEA2F440CBA507A75C7B70D8A65332D9F7CC3B68A65D84D783838476C8BE5F09CD6900279C07A1E23A0835D761A8DD8C84DA89137BD7CDEC1198D785245630716C4C44D488047D833DC70DF83F5C874FC92AF34E51016DD0D5ECC23ABA03974C3D70EAD4E95DF5E347CA09F06D02FC940430F80241EABC146AA6AC31E8FC6B0D01E7DFA086BED91E79E5CDFE44E38F8F6559BFC1845BA9815375496F7667BA64562679C141FBDF70E7F83FC056F33B703CF30E5CCEBE03D733DF85CB696A2273C07B94B3041859328ED6D16DF44D3F26C45DCC6FCAD134214751CF7394772EA1A871040F7B96D1BBC8522DBF09F97DDB48244083A02968D836E0AC6B37CE10DC19B71E9CBDD70355872E46D676FCE26EC7BED6D1546DFB71C47180DA360015825315D0DC87A06E558A13DA26B86860086FBA89F4DEE748EB55B0A67EC2849C8DDA5A5167B365C6DA3C80007D4BD6086F151EF92BD4C245B8E76F3207DD86894F09B42F5EA7591F19D63871D4802B856FFC0AC0606A63D07919C149DA497317DA29016D0EBDF87A67B4E1C725808C605F694BB0E8CE0EB5C39D13DF8495FA77607FEA1D389D16F25D389FFAB69407BA9DFEA604F0BC96DA9A57D628F25A5751D1B584CEC967985C9563655B8EE935396A4799B6F4EFA0B26B0E356D43084EA9404ECF13769E812B21D3D0B46FC2B97BBDD026BCF39E7D38EDD68BF709EE3DCA07FB267BD88E5AE7446D7311E086A0EA3E020D873AA8EA39E0CC595DB8B0A99ADEB5895C766A5218F51F30DF8C17001BB6114980610260E52635708326BC06EF7D806E6CEABA64B1A46445E49CBB0DFBB415DC74CFC6696DDD1DB5A31FA469AA1CFFB7971AF82AC040A1958429B493401BF99AC24574029CEF2EFF5163BCF5D3141F33989FF8066C4FBE0307027438F95D38687E8B51F89BFB00951AA8C344DA2D6304916C11A7D2B99574ACA0756A1783F37B98A349AF12E4D09202957C73E5BD6B88CA6D4656274DB8990043A771DAB11917BDFAA14378177DA86534DDFFA4D97E684D93B5E16B07E1E306A0EA22348EE05CBBA076239401E3022C5CFC91D4308D6276AC7306E448ED78C60529E11E9EFE56803EBF0250343C5856A6B1D19BB6CC16DC36EEC68EC3E06E30B4343497D58F1D746550FA327DE02F35F0D701EE8394002E0ED41FAE8BB5428CD36558A87E0BB65A6FC34EEBBB8CC2DF823D23F18B44DAFDF4B7E0413F7881A59C7BE6284BB519D6BB1378503185FCB675B4CD28D0B7A0C0E8D22E961FCBB1BCAD4017DBF039BDECF7B5EF524B806B913338EBDC023D8233F01D947C9F88B42FFC9D807742982CE1A9BB0E40DD34116AA72EE1A6992DA24BBB50CCF65621FB8499FC99695D3BECDEFC12A030E1987D0D7C61C2C207BE6AC24A0DDC07C82EB92D9B1CD62C33AD535658966EC238B81D17AF3B808300839A270E5FD652D7F88C64C2BF0DE0CA50FDE1DA98BB08B5D48685DAB760A3F95D58ABF3CA5CD04102480D64F0703BF36DF8EBFF0FE8696BAE79310FF4CA9B864FCE28020BC6115B3987E0CC1614B4CCA19311B77F7E17932B3BD4C63D2C3C061E8DEEF2CD812DAE599C736BC565FF41E8DF1FC021AB4EA629DD52943DC260217C9D9A0BFD9C651154CEDE84DEA56B084AAF42C9F8AE72A9735081EC5E766DE86B53BB77B89AF78CAEE129B55B74B7D95FAC139D6E1144D8F5A60F14008509BFF48139345D0274A006DAB32E1700ADD831B76053E42E9BBF77935771377109D73DCBA0AD6B04F5E387AA34548E1D3CA9A125521EC984A974AF35BEAA81EB238D876AC28C1064A685BB4C612C54DF92A2B02D018A3CD0810005C4C81BEF22D7456BFAE2B9332BF7F3C6E05330CBAECB287C72C711503CC76A2414A159CD28EEDE4665EF3A1A8736D03BF518F36BCF30BABC27A53102A08E7B1BAE050D49BEEFBDBB5D386C5282E337E3A07A2B1E6A5655F4738E38734E0F6E11695C1B7E8C87335C4C1A56B0C9BAC78EF52E9BAEFB003B09B05D0950F8400960FD2B005F4661FA402E6679B081E1BA0FD0F12301CEC29C2D3873768EEE267359824B1257ED9371FA8CCE338D6387E28F1CF8F0ED973EF055801C9D385415A00F2FC303303BFE0D02641E280052FB6CD44535F20D24DE796FAF25E4A2A7B6DA21AFD3A7CF2C07144EC2AF680EDE5CE1F1CCA63CA842425A1EA20BBA10F1701629B573C86F5E4075DF0ADA46D7A5A012C73AF956CC2C2E7A74E06AC0100EDB76E37DCB5E685C3083B6CE655C60A2ABA67E0A2676DEC8EC5CC4432E6716D08F2AC1ED21BB4F092F93DA97D6C52E36B52FB98DDA47FFF7D27CA981E18F3611C2001250211AB74C638A451AB38A7B79CB706527C83993CB0B345FA18136D43EEBA43958240A7842B88E23D67228E6090B04B909D38861E89BF9415D4575E5A4FA713B26E17FA5A6A22299B6E40307B29D0FD605E8C0E5C20F612A01641947EDB354FD470691B7906B7F74BD3DC2E0427B989E4CE5F0872E026070C914024B17D8389D800701BA07C4A1B7BD1E2D9D0308606330A46486C9F434B21AE790DDBCC82AE4899407DE8E9D838157072E780FB02CA3E932CFD3D2BD834B77FDE19841DF145B0B97F82A0417F510DA368AE9EFB2FBE512B8179A97CE9C3395DA97BCAF7DF1FBDA172D699F4861D8EDA6F6053002FBEE03F4641EE84E80A20BE444800E84F702A05522D76D2413FE55802F40DE4D5C613B6E1D2641CD387FC51CAC643A1864825F02EC49B33D48EDC2FD4B3F82C9D17FA4F6BD4553169AF72D143AA9CC75465DFA694BA8AEAC35544F76621F6058D92CD7409610503489FBF953F04BAA42C5C312E466242228F9A164DE01F963882C9B4460E10462A919C99C7F31899F87817717D49DFBF00B26CA22689CD4B7E427EC8F3B91437048E1F7955273329880C71523A6B417C543CF91CF85A6546A9D3270FC12DE8396275C9C57068FA8BA2D6ADF6384ECFBBF00C2130144325FE680228008FFE7C8CEB8806797AA0C2056D4C0FF0A9EA489625DE7C1ACDCF8C1FAEE0577968F9AA77635558ED5BC04B836D1796820D914590EAA303EFA0F4CA44519F72D1438ABCE75461AFC48FCC3664E2ABD0A30AA621611552B082E9E26C429F8164E21A3B40DCD2D2D08CB6EA5564EC293B9E27DFA4797B45109600A019A3D98C7059AF061D6B307ACFB58610CE0A49E050CEE04C0246A1C379D9270DBA714F7B96E92D4B08EE8FC6604269721AB61020F47F7187DE54810698B081C8427723F012F9A3F3F92F0C2AAF6B58F659C6F19CB3861BE055C0DDC375F27E6800EC27C094F8AC08467C9351B01F085C6BD7A95824BFCCCDED5D0C9BD737ED38AD38E0DD0D23AF3444BF5D8C3970017076A0F8FE638A127C582F9DFDBD4C2AF23DBEED84A47A4C18F9B832F4A89E3AB00CFD084636AE6105DBB0A49134BA611543A0723B70484E474C0BF44195C3C3287718FE2983A8C18BEC1D40EC09C8BECA79C45C2DC8BC3767D5269764ADF0297CC03703D6C12BEE2FB22B3A16B1185BB91BD88E7B26769F71A128BEA119F57838AEE395432514F622323BA91B335021EAB0F913C87D374A5E82B82C7BEF689FCCFF35580C27C45FAB20F50689F00480D83F9BEEF33E395D0609D38BB671A33BD6B1038AE38EF3B0E6DBF599C71AAFF4D806BE3ED87460870B12E0A491607117DEBE77B2DFE274F35F89E9409A9F7D59235F89D9235076A4B262C003E783487F8FA554454CE209C4123F4E13CEEFAA4C03FB303F70B67E0CD34E71E7345F7F41138136034DF601A01DEE5A77EC2AE9549B352FB5499B20880060478236C1CD60F467027A88A834889B0F68E8381CD03B866CCA06448814783B3482AA84076593D9A865750CA67D18D4F115AB3C941A54DA97C0BA9DC402053173FA17D45C27CB9989FBF0CF75C65FEF7C27C6DF87788006249FF67B1AF81A65C8E15106D9366E57649B37B46915372BD8009C545FF099CF72340FF3996A0A28171F6A996EAF1F2971AD89FED7E7028DB11AB1D991848B302A7ABA2C6AB63389919221B2D0B938D9485CA46CBC3196C5C65C70F290126D6CF21B17115D1D51C53AB984378C5022C7C521198DDC9E84C8034DD7B992370CF188653CA30A2E8DCD3B96479977FF441F60145F010CD01553702345002BC193E811B217D3863950143D76CA4B66CE0B643382E9887E38A6B2122D920685B04AA7B8691985382E2EA56D40C6C8A0E38271DB61048CD93723FFA50A97CA3EFF3A4EF13E6EB26D2977DED7B91FF49E64B8022FA0A78D689730AB7F4F93D1B6A9E61D814F4D9F8D00F9AC4455E75FC790D5E808E9BD0C0539B5A2AC78A5F02ACF3D13C3894E32C015C6C7C80DE648BBE8DB9E1BF7DFE6C5BB6B3BD217BB6C5763F6784D7C7DB2580220A2733BA2637AF229600A3994447542EC2D2370D41399DF0672FCE8779A2077DA028F91C0830B28600D92D11007F61DE8CC3F6CACE8A9AFB30015AE2127DE0CDF0711806F5C1C0251FFAB619308D19C559130E2B2535C3CE3B12172DE26116C4C6049B07DDCB4F9157DB8E98B422E4547521B37D1BA18F76A4D6D5FD6265EDEB592052972598079643DFC81906371D70EB5E0E6C9367A87D4A7862C9D58A298C57F682DC2767618F1AA8B8143C89CBC153B8C4BAFD229B1FBA41D3D00F9E8641F80A2EBA55B3DC539BD05439FCE02540F6BE0E0CE7BA106016563AB3315D1982F6989B457DD9EE9F1F2AF495F565B9C8665AF32480C7F601A636CF711A611571353388A99AA3762CC2CA2F15C10418200032027B64090D1C81230146D03FBD0AF02801AA3AB3E260AD7B5A0014261C3A067D9F0EE839B3F96993819B11235037BC0FCFDC59B82734E1BA730A6C7C12A06715CBE47D1675CC13EBC6D7B8B4F00881F1058AB892418598B7B9CFEEB807272044DAE2903088CB1CAF333476C0CD3B2ED0BBC5F91D2E8889AA4398AE57CE823CA26C49EE9E3927A70F5618044DE05AF8340CC366A0478802DCA5D0595C0E9BC595A835E8DFAB015B5F630418FB126043C0B9E3C3796E58EDCAC54A7B16AF399828F64667FCADB4A122BF2FD1C439B99E4F806D124061C2E92CD952DB57115F3B432D9C4354F522AC093044002C99636A33C1284C80E90C222943ECD1D107D2842D53E6B868D482A3FBFE4FE3DE08CE10A0789337C278EF50055D023C67958A5B11A338732B1846A1BD386B9D81EB6EF948A4DFBDE5140903CB08DC70CFE307B88606D6E0D92DB3728F9862856B683E384A2EAD3B1BB971C1EBCA1DF8735CB874608709B81C9EF115D03334C7759B0845244745C24B97E477A975FA04773984D31411331C0698813EB54F9FE0AE84CFE36AC43C0C23E77123761397BD1E0980E3AC93E35FD140ED0B2379EE58EB29C06A2721521385368EE6BBA1F381493D017E598CFEBF0A30B3750EE9049840807122220B80FE694A0DE432E6FD3C26D8FB266C9F3CC894871A4880568C7E1F5AB44A01448D6D2A4D0F42BA64892B9641B819360A0DCB5268DBE5E3A4493C810ED3844370937E51CF290F971CB3713B7200E7CC2219AC7A60E713834B36F1B00BAB4746FB8EBC988B58C105FDB866E1AD387BE13ADCFD62D030B84273E770122B9A0CFEFE0C0E7126373F86A37F2AF4AF59E0826D2684C95E0B9BC6CDC859490C426724AD13E0AE452DE07ACC22E12DC228F1310C7DD84D27408D5701360468EB0CE7DDC35A6F11560971859AC8294C2C35276224DB016D9157FB673B8ADFD998EA7EA9812F003ED8072834D0CAEF05C059021C671AC3284C13B64F1E4278E56326C2AF02649FCF6D189A9E4A8057AD82702D7414C6412D08CE68C189ABA138EBD6869346C12CFBBAA0EB980F5DBE59A370E68D37039967CEC23EA20A46EE99EC0DA6336A3F807354ADC2C8E21EEED8B8A3A26D14D3DBC0D83A1B1B0B40EBC42E2AFA9990F728E76FC424580CBB4826363E387BD90E573C1FE156344D95F0F469AE4AAD5BC0CD9825DC8A5BC6ED07CB304DD9C60DDF7A68AA11E0F15FD5409D910201B098008BB0D29D0F6E1FC07C5D0CE6AB433092658DEE44B395C94709678E1F3E2099709AE40357F0A07616B155B3F481AC1B99C604330A07B08C1341444461D7B461D8250E72B1691329FB1A7880EBBEC7D92C55731B21C03109A021019A444FC122A60F56C10F093004261103386F168AF3CEB5B8EC5E0C1D9B746AE920CEDC0EC66D823C6D99829B9E8508CE1B62E7E436AE185921F3610B2636149827BC59AED98C2CC991D3B2C9F4641A96F193C86A5A47F5C81EB2F8618ABC54800CCEE9C6D55BF63873C307BA3E5DB812312769DECDE825DC8E5F867102671D39EF689EF61446FE4CA4D5543F0260FE3DACEF035CED2E20C074CC3D8AC04CA93738CC8DD14C4B74445E4651B473B7BEAEFE7A2EED22AB7B8B01649AB331F481352B700CC991A2B06FD1342B100170980087609B3884A0874C37588958D3847F13A0150CAD8398D0CED05CE9EFA869A7CDE2F0A06E8D6BCDE1386A52889356793865FA80698E30E17009E045BB749CBDEA88F397CC109A5880BEC51D2CEC00F35CAB99A6E655F6B2E3CC54E5DCFD09E8054CE24AD01803D318424A175133F80CE56C8D71AC518298C132D133A644AA757518EDAF874F49F0043833D6C1E629EBB0CADAA1853411E04768E0703E7D606F2156BB0B69C279586E49C55C4D18A68ADC304E789C60E7FC892D7AE36FA234C4783739A7888390CF91D1CBDA945D91940E8E71B4B132604A2392686F3618DC328638953F081B6AA028EC13DBFE6B8037D80ABBC3B4E5B24F0B2E33E7D3B34F27D071681A7AC3D0FB113C121BA17A2D1CA79DF90618582E582542F3DC3538DF8F462393EAE9F52D6995707C5981AABE272C1FE771CE670CDADEE35C4698C22DB6D16E30CF348D9DE0C8F10CB7592C21B76D0B8F867791DF4D90D4C61CCE2426B27CB4F18C81F6A5BBB8E2568A3B8477978D56D16CB5CBDD8569480BB80835AEFEAA09B7045FD419CE75C51A4D97BB7F184472E8FF923047F3E52233C6524D30FCE00A46126F7012D41163B90EE88ABFA5288CBD87F4AA6EE4D1416771B2546C96896BDA65976611769155B009AF62041E6475D1CF49AC75D6AF4A801FD2848F39FED2079EBD6C8D5B8ED1B04E1893F2ACB37605CC03D360C43446EDAA0FEC1FF4728DB90EC7E9178D68B21AA70C6066EB8D92B6094C50DB26D6F7D09AE686C6A67604B2F6356220B816CE81A6C445E67B4B2CDB965981ACE056E4A464CA2E5C5812AB7422678C610593DBFE04F95D6C93758A66AD724A36AA6C1CB7AC3C70FEBA336E8776C2266B0B0E05729885B62A83C8AB00DB22AF9C1FCC6225D29923E5812BED4CA81BE2315BE12F263F319A721B43B1FA18083F83C1C8F318CBB82B7D6DACC01D1D89168AEC07C1487B34825446B87842F2CAE8C785AB66386F701B77832A6115D7C79EDC1AE2D8D297008A282CAA109671228D3979D104BA376CD8E19E45114742EEC55440E58A1FFDDD30B48D83611CDE8B0B0E392CF96C7083B95C62711BFA1959C737810106883EAEC574E7784BB57C69D304E2396798D64E8BA0886B2AA75F13B917C59D6375D6ECF6B8E7B28BC45A59F40C8339A3E8C791633F26DE415C438EE5C46C2A770D4866CD8959DF94065C36B2C525CB484E96B1EDCF25D19342038FBD12441AFCCFBCDB9368FA5C8013B2D49C8285DA28CC947983E3FDD4BCEB188ABE88FEB053E80D5295440015FE71B1250D9395E1E84A775514A544C02F3C0106576FC12B2A177E5C72D4BD62043D937B704B1F432C01DAA4CEE1004B39D1C612CB94A7FCE671D62A0DA71904B42F5E815B740592AAA76047ED358D1E86D6753FDC0AEE801135D4EA5E2CAAD99119A3A9F671ADA56B568EAE19397A667631501E83AD8531704F1B9A7AA659DED12CC5EEA77D88E99C7E4DE7669E180E7306D19D0433A88555B377C812D0AF6483651EA32D276AAF868CD1A76F32C828FD63068704523B38BE9CF410B7ADBDE012F388FD4095592EE6273772CD58B9AC197BFB6F39033D39C7A8BBDC9ACA722E01F335A1E026168CA79B6338EEB2A479FD219A4A808127D01B709C404F4ABE71A92505AB83D5986DC90237D9A0AD2C092DBDA3CCBDE8235B5699AFC542C7E026EC820BD97B9BC261CEC01C719962049EC269BB329CD435136BB3DD9408B5E347BBF56F3922AE7C042D73725CB70EC029B3045C317143011D3D871F504F889D04D73EBD87B6295EB922D8571A89E74FB7F07473857F83075A7A26914680C95C6817202598620E9B10C5BDE8F24470A7540837FC7815AEB3AC636381EDFCD8CA3514B15494B4B6458E3C026CE08C4F2A35F8D26D77685FB8B2CB9DAA49F483B7C5464409605F86E3C7B8B12E69B2CC8F3092B0501FAD34DF3C61BEB73018A3877E9A6F5FB006FAF635B02F581D7DA15A1888384BFF7815538CD4AB3D25D89AEBC7CA4823266A12D05D1C81C6AA52D4F6AF20BE7400B72CDDA173D502C78D33A072A7189A7A968C682AC35A2A874DB5D455BF24FE162E6EFFA9DAD1C336EAEA1A4B36DED15C89EB8799BD2F5CC28A5044784DE372540EEDA28AD2C485A6C6F13D348D3D475F5934B87F174F1647B0B53C85FE3C4FF40C4E239723C3298428E405C8179A99CCDD0161D54F1950D6B80CB12A8DA914D00D3D68565073198CE8DBCBBAB9B18793B53ABEAC546EBB2938F17587DB7DDF986DCE924DD526ECB7F4B94FB63BC5526730C396DA172F45DF99522F49BB8613AE6240685FE82BDA47887D7C2DE00DD2B487E22F6324E906A3B505662B83B03E58058ECAE1C9EA2C96871A3056198B9ED218345717233D231BB60E2E387F4A634B4BE5A8171DF25F0A70BF2E1A278EBF7DF4C00729E774AFEC1A5EBFCD8642239218290BF826FBE7088ED0C41BAE187C8EBAE167E8E5CFE764ADE47AD687AAB1BD328DFE1C77429C4209FD6A06B304B11320655F1B93A85D29F475154C656AF8338AD9A815AF1308AF84D1583C0B2D5EC6A5C029CEF3B0A40B66A7C8C411BADAA77F3AD3982E1332DB94A10438D994239B68CCFA5C57BCF1F84C4520E60981DB4231CAE83B14AB8781B0D392E9F6D06C8508EDEB0F3D25811D26BCD1E49B184BBF23F94B4E85D2F45DF8218433212FE25EDF6E3C5D9BC53681AE8EB563A62D1F230FC3D191ED8DD278CF6739D11E0FEB533D75A61A52BFB7F76CFB53AF823CA9A5F986CAB1436AEAC7551E7B25D623813E29AA761B39ED4FD137BB8B6EFABE929EA79CCB79829E12FAC0C531CC940788897DAC0FD7521327D097CD72B47F1A0FB9089FDBADD442A18DD9D4CC476CCCD68CC89149B3165A2792EB477C9D5EBF09B3A8199CBF2FBA32D3B8C18AC4306402D78DED7151FBF48F5F00145709E0F6F68EECC933B96CB038C8B23FC984DB49FD39B46D4BADBA2EF9BEBE100D82137EEF28BA09B037489D501991A97D2309D730966622C1E3F427936E774C977848C9F77411EF799D79E88BF9DA18ACF414636B7E00CF3697F1646D0E6B131D12D0894709E0EF7E32F230B467B8D8AF989B79FCE73B8B6F2CF6569CD89CEDFF67433D9D06FFC40A2437B1FB5CB321759DE31BB6D030F20CC38BCFD1C0C1A5CEE268490367AB4224BFCD29546A62257FDF107A339DD1DA3BC5954125B8546E6E2CE52A5F1EEF1F340BCD54A09CEEA1B48BF923839C0EC1E9FA4FB1B49C61738143F2D18B6CB54DE286E97F017079A44DB632DA219B6ECEF95247ECCD81893C0726CD36188ABB82016A9AD0BA6EBF23E8F13FCAFB63E8A5060AF31DA26F1C668416DA273E75117444E49E2DF7A52650782F807212149CB193C0CE55874A517EADB7049BE3CDD21B7CB6314F59C2D6D224D66706B034508B99E62C8C57C7831B1915436561F2A1D210F49644A1A9240DD5A505A8AE6B43757D075ADABA31D4D980FE427F3C5999540214893FDD09A74DB13E500E1E6180DE2C6734F7CE20470014C185262CCCB8903EAF92E61A52B40C03364DB5BDE9EBA875D7580FDF6449671435C70D43AC859943DE3475C0C5B31FA181D3F5A93221732DB9EC42079FEC88E4B601E1FF983C4BDAE747707E87288448802298F40B807106184D32C238F3426E019000711FAFA4C1A286E6D67BA921B1DC9626D5D68B4D8CEE2C0FC5D76725B842532965F7F93C920D8C0CFACF6A3C9EE9C6F6C2309E2C8D637B698CE9C908B6698E5B8B13D898E9C7FA64279607EBB024A4AF0A0BBD15589FEEC5D65437A64A3CE9BBADC05D9512C8C97C368AFBCAB0325085EE146BD475CF4A913993694AC520CDB97613B7D88939ED310E5DBF29562D6C6749F084E6115ECC3C17C296611233052333075CF828802B437532A5D44BD7DE5C9FA0EE28C2493662F43DABD43CFFC39209F706AAD0FF6949A63DC4F44624D9DC4F2BF94C6EA5A7E6F9495D6D9E5380D5FE8792A6AD76E731BF4CC75253A2B46D7FBE9ADBF6CB7C257893D44E6ED1925C8078C3A25C14D15F3C9F2E74C33473CD19029FA35F9E7F148525A658A24E5FEDE4CF64C9B9227E0F01ADF2F7CC5604F0E758297D718EB5F4B3C6B36D252B99E4EF9A6B4A050F9C402335B1A8EB291CD8913EE93E86B39EE3D00F20BC60253CA175B709CE346E0177E217B9556D85D719027422C053BFE90337A77B642F449CE0A17FE15C6141F05DF444EA320A5F23449A31218ADC4F986F3F838AF07FC30F0CA532EF85FF139AB5CC6581358213A6B3D657CA1E6311D6A4462DAB1B9687224512DA395BEE4F389EACB569E2F92E84E6A804C9372DDC8704945D20098864924A1196216998747D21FC377C2644681EE799C5BE11C98487F837B6B9FD10ED9EFF89B11C0726FD21E88837811F1362359711FABB09C263B060DB5ED2BCC8396E94A4D6C52F703261897533CBC1542EACB3836D64E6F8D10037A6BA642F4480D43EAF3B99503989C61477456FF42549CB442ED817A225E57EFD11E730C84A6424910124DD8C7FAC35B5CF5382B4466D5817D2AFBC0A803C3163BFC249020F7A60400997F24C9E7BA00C38D4345173738F9A045212D6DBA28C7C2902C8FE6B25646AAA247CFEF25E68AF033F107E18FC104496D0EEFE13B4BABF8B169777D1E6F13E8652CC3092E782F6E86B084B7A043D068B973E8FF08C63172478168467C53ADA8675B43D3712597315EFD69DDF13E0196DDD81FB854B88CAEB51D4A778287A62AE48416234D514035117293A92FF1B49BE81D13453E90D8BE6836883ADF514126289045232DF1E3627448D4D3F28FECDA2D040E699225F9C65749E29F3FA65C426C8490192E63B45DF25017D71CD1370C56B71155F276449F89AFF7E5204A9425709F248D24DC957B77BFC84F23382FB395AEFFD1CCD6E3F418BE707EC28DD405FB2395A22AE202CA10686EC3EDF64B7C62446982CFB9A9CCEB24EE6B0BC981DCCE02848F686344B78DBDCF1A383C8AF6BE0F90BFA032E6913708B6F8467440E1A8B93D1136BF832A24ACD85787667F8870A0D143044134268DA1ABB3902A468CCF23811A5FFE3F28008224B0C2292063E0AE3F1250448339E65D011D17A86E63C53C29447A43F221512299024F4839429A1A5C2274AE2AA7C2EFDDB7BD45E578C65594839696F900ABABC3F4027A5CBE7003A7D3E40BBD70768A3B450031BDDDF4393E72170D607ED51D7D0126E80A8D447CA6021FC1D3B38D62904C7C68163C62A9CB256B9F76F134E1C0731B9EB0C2DD513BFE9037F1DA0CE458301FBF8217873AF9B5344196C030B919741071C7D153CE841F26113D40CA17D225F5C6470108B5142D3847397004A22B44FE9FF96592F8BE0C27306B0C0A34B44AD2D69A104D19741C54712D1A010559052085502EBA98CF0C2DC4BBCA4082EEE859F131FA248A944AAD5CB2CA1570A78C7D0BD2F9DBE47D07EFF08DA7C8EA0C5EB309ABC0EA1CEFD206AEF1D4553F04534871AF0AA8B98F45AA5E671D0D22E7D859B2257E09CBDCE71B875EE2E7D0C572ECADF34B1C555BD8BBF1F40D7D451B6D8C770CE3A15B6A1D5084CAF43545C2A5A126D3098698B39964C22E7922A8EB674AC50C384A6BD84C8C021B5C784F6B5654800250D6C8853466291CE54EF6B6265A01441450417BE511CAC2341652EA9847B5FD25429FDE1D784790FC75F95B201A92617353AD32D516EF6F3DACBD73D946E26FC9D016AE8F457439B9F2A5AEEABA2D14705F55EC709F018AA3D5450EBAF83DA800B6808D6435C7AB552F33257E192B30637EE3A75E78648AFE22D69B241EF8A0966A7277F3C278EC0DA17A912F9750DBCA87B694000348E1EE7AA553A4CFCAA39A7D2CE0373521094F8100FB3E2D193C4DCAFD497665ACCB2A946D238A997D84191FA8A39581657D1221300A5452AFA40A6210BF54A880B84384F8842A3E72A99DA50A4938928928913EC9C902AA5884A473475850F1E60201B8838AFBC460AD1DE7FA62DE5A87D22FD0A3D8BEED033E80A3E858EC09368F53F89463F2D709000359E1AA8F25043B5B716EA09AF31489710F5E1C3A6A633E1B9139E47FE063B351C522FDBE670E632AEDCB480AF97C78FC59095985215F2910075F52E0F387325ED520087C0EDB370DDAB12FA1E35B86497C85E19D709DC1310159F859A78078846EC52176BDEC9366C8CD64BA98B04508014DA47D3161AB8C436D95273B2940B2E36D09485260A7FC8169A6800088D9CA7362F50E659AD08B0A26A11A63E4FA02285198ABBC4E86F2005B041E9FE126B7571CF67E2CACC6030461FFDD194285D497A222EA23BFC023A4375D01E720E6DC14A69A77484B2C7C980329C740B9D117AC8CC2AE2FC0CC7E072372478DE459B9C721093FE4FE053B402630691D3EAAA3F7EE4FAA1EC857CB406EA5D1EF6E7D62D7D9F6EC9842FBB97C1F07E03F46D92B8D83D843326611C6B9BC2BDA822A4E594A3859B13478AEE1364311E4F754825DAFA4085A495CB124402145158F41A7906D66213355180143E919DEFC5FA78492B25FF28804A420D15AB82B591525E2792E111563DA2F21949BC2969E270029F25F0BA7F2F72D6E10443E6A7D718E4286CB30DD2D487E228E2CAC02744041B9182899C5224DCDDD197919A962F99AE2BB5EFDEBEE6F9143FE67CE1639EEFF004BEECA89B5A3A738F8CFA8FEBEE1D91BD908F04C851FFA17B31A58862D3D134B801E76CB946C175533DEB449A3593CF3B11B8133D085DAE8A398657C23FA11491B1A968CCF407773C61AE39031BE34DD2896B9B630D524A232D54896EB73065E10F095268A480B9B40FF4C55598B910F15A542B227D1A67BD2D6AEEB1343349C629228889AF89AED14B493166DEAA9411660BA3C914E97A4B9231F121F06B22FD992A7245578C2132328B99EBAD305D51FA3D8F820D2E416C721DE731C7E41E735CEE2921722B84ED3D91C6FCFC7702D45055FD85FA891335B72C9C105E34C8EEC7166E07B7E2947114AE06F5439B9301C6118338679904EBC856387221E416FDA3575C39A2120AD05496859E4CA6160F83B1D4538A4D1E5BF778AA5D82292A14A56666634968A6002ACC5BD24E826D1570F99A662FB450AA4A246192CCB2EC97150A2B8E17D5C78B8A44AA56588DB09130B62FA24E1FCF30277C738C8A0F80CFA58607035277DC4DA4A617C126458CBD317030EABAE76DF02C08B13987EB24841758F10C911C8E0FE588ACB1B1F9FA4975F56FFD4E80CBC34D32F6FD3FA37AF490C129AD938336DC3018C983ACBC39756AC2315C61C2D702BBB9D09D8A9B7E75B8E05C0A43E70C0471A4C3F45E32EC42CA78CE5517AA9BFAD09C15805E3636272AC2C033FBB03ED688CDE976026D23D0469E0358ADD450118444C9274C9EE5A010118545922EBA392280085126D7BC1749B4F89A7465F788A2AC62C495150C452A0D590048C20F41343CE69839CCD3E7F6249AD06C0BA46A436CB671CA5C53A62CC27CB9A7EE7EC916826BE45CB5E3AC6164164CCCED1E5D3030FAC5ABF0C4FD479AB000385C1224E3A98F3CA552E5CB278E1C743D774177ED5E24877978BC897D4C2BAEF876E2BC55320CBDAA71D5AB0A06F669B81EDA278DA385178FC33E2013165C91734B6843FAA319D4D4B7A0A620156D19F7305CC8EAA38E4D81BE729A7A0BB6667BB035D3C3E6AB30F9266C8C3C6273A0588AC422B59996F2437E8FC80769D2CA64FBD5A49B8935936B1E85B79F788B3EA4F2F5142B14A99DC6EF137E5668776F8A3952530B60CEA4D98ADAA704A84C5DDC09F07EB968F53FE368712DCC4CEF0E6B73D0E692B1CBA77F1DDEEF0570AC2A5AB6C87EA1BACA897F52397A28C9E08AD18E5F4ABD74DE8B71C0235C74A980AE5B39F4A88DB72307398A11C185F43118D825C1ED410BBC620A611EDEC2C1A21D2E5BCE73776627CC835BE83373901B178CDAF4400C14FA62BC9253108D6C7BF5946163AC199BA38DCA7290515DAA68443D4DB35F66CE294573B6C944205A10C148A447FBEBD8D35202CE445BB4CBF6937191432E73F550F8E1BE346B2425E7F314914526CEA2EA58E2C039D78D09D02DFF094F10D9835F661F8FDB73DB38ADA9E1A97A42EBAB1F05EEB706915735F005C0E1EA44D940BE8F8C667D58F5E8E12A2386F4E0BC7EE90422B1D87CCA240657027BA0631EC5B18B419C358F854564272C426B288FA4BD1CAE99B3DC8DA4DC79F942CE790EC0CCAF16EEDCC69491578DBAA234D1C4407B8ABD82AB6B7BC305DE8AF1322E31544762BA360EB3F589986D48C45C23A1B5D2D459F92C338D5A630B7F95B0E7448523126E49FCA4E1009EFD277588FA33ECA879F9308A163D3E8E240B80C28433D6E156BCCB59410E5DBA46E0AC9666C6F18307FEFDB781FB9F06B831DDCBC363D53F7DE2C881AB273534862DDC2311C483761C93B96610D48DD31CFCB911C28D849609B8EEC74D85CE45B00AADE314FD634EC54F4B1BA65F02E44E4C71AFE5CD1D41110B30F52D8781A189FCA4DAB15C475BCB13DBCB93DF9EA8893BD29BEE70A337C3D189839EF77B331C42FA735C93386E9C4917533998EB5E3B90E9D8CA67BBEB2375526A24A009112990E813AE0FD76120D309450505ECF1CDB3DF475F2DB5ABD830C8DC66C9B6C1630A72A1734EB7E7F8810FCE1DFDF0FD3FFA7DE0FD4126FC420305C0C5DE72C947AAAB1CFF8ACA9103F7CEE9E8AE3986E4716F082799027846817F37CE7340E78A77232E7B3CC4DD905A1EF3B4C1B994711C7550423BC1E9AC13AE6338E5330B3DF73A5CBC612F9638EBB960ADA6A1A6F271058F591627894C37A6C9FAB35CE98FDD249FDC9FE3C653741BA5E38BD900FEF8EA48C39BDD95197FC3436497042861DEA259B1D0108B35E6A21BF4A9848DE2A2020686A57D80733C5D8E2D2ACEBB9807D5B244335D533B72C0EEF8C10FFFAC9103F5B56E875EE679BF0BE4EF0C22BF6EC2AF029CEB2E976DCE0FCBD48E1FF93E4D3B55FFEA6D3847D7320D788C1B5E65D071667061126E115ACB6C7E4D4C46298E51034FB88C42DD6306675CDBA16DE40DAEB38E681C3F748DBB7F3E3F5E9B229BEB2CE6B9CDCF653B3CC761BA21F51580844880CB0335B25576CED7866A654D2529B2F470AF2FF6A63B2EAD8F3448B9A3584A581FAA61FAD421E5A545F9393CAF901308659CB47AB004E3075C75E3E8DC25134F85E689E3A9270E7DF0FDFEC2000ED247C8FE5B00AE8DB58A05F1D7D54E1C3BCE6DA275574D9DE010DBC69D408B1C5CAC82254DF87EC98AE21A87C88FBB4C42CBB517A78D2370F28CCE0A17D5DDA9797F33D7512C5BE5CFF97D00AE0C3C921196ACA5344D96151B2CCB8BF3FBABBE4CA7E5F5D10629595F636AB439D585414E28148559959F3DA73F6E1D98CFBD738F791C1F2B2CAB787E68A7DB550F7DA8AE7EFCD8EBE30C94FFED00FB723DA503ABA9459FA5195EE79AEE88915D30ECE2FA99A0AEC09B9350372327A06E928293DA977708EE8196DA89B7C5912BDC5621FB7D010EE6BA115E9DACF5613AE105CAF212C25E02DC9860C23EC9847DBA0703843754E0ED335D9FF231D5C387FE8E1278C9C80EE7F58DB7540EBE6FA176E4E09F8D9647CAB8462DFBDF0AE018FF2871CA254F28FFAADAD1839EDAE774D74D3CB36115568D0B1C5ED454395ACA6D520778A2B8741EF31F0430CB49D69EEE2EAB2F4892A547FAC9B262022941B2AC48EFBF161AC873BFB84C3A82A17C2F3164E43BD3982A9BE4F8C5C4A30732B5A347BFA472E8C328B5C307EC5965BD315E194D93FDDF18E0E64C9F0448836710A89F389AC4CAA686C3437ADC2AFAA991D60A6EE0F9C300727E870BFFC1B286D22C594D61BAACAE38635F3265B579095FA6AF5B793CDB076ECB203C1FBFA9C6B4D7C5ECCA0B801335F1E26817D958650C255AF6FF1B808C8E322E92CB9892F074A4725957CE7DD91F0ED08566162B7BC2FF69C0CEE3251E14B4F0529EF3F5F6D2E8177B52AD97FBB9783E48B39D6A48FBD8646D124F2349FC3F004514EE49B1E6C9E11EB2616EFA19E2FF14E057E53ECFB9F7FA42A3FF99273CB2DD9D3E8FD004B8FF035099C67080A72DE2AAF2C8110E347EA4049DFF4CFD7DAD84819C7BDF9BAA4F92E0FDAF02F87F0350190A7807FCBE0B0000000049454E44AE42608289504E470D0A1A0A0000000D49484452000000500000005008060000008E11F2AD000000017352474200AECE1CE90000000467414D410000B18F0BFC6105000000206348524D00007A26000080840000FA00000080E8000075300000EA6000003A98000017709CBA513C00002A3949444154785EED9D0750D6699EE77B676BE3EDDDCEEDD65D5DD8ABBBDBBAADABDAABDD9DD43DDDD33DA9A7DB5111C939E7A82859729424A880E4209273161044405092044966C92288A082A8F0BEDFFB3EFF179476B5B5ED99DDEE9DE9AAA7DE9724F0E1FBCBBFE7ED3F00F0DEEFFFFB1A0404C0DF9F7767F07B785F534012403D1D5D1E1D1EEDCDA3FB9EAEB678BEF57E3EEA8A8F6FBD2D9E6F3FAF7ABFF87A1DFE3B3AFF555B43CD475355B9454753539FEFFBE32F7EADE2F35E79BEF47BBEFA6BFEA5ADE9B709F0AFB4D5540E6AABABDEB43FE803EF23593031B79169A8ECA9D7D1D2F8C917FF68BF07B84D41DA7F4D680E5A6ACA23E6D6FB119C5287535D8F51320A64B6CEC033241EBA5A5AAB1A7BF71CA7CAFFD76BD52754F93BA6C0BFD45157B5D45255BE4C7072BFC45AA49E5F46FE6520BF5F86229E8A31A0E6A61C19678670C023085A2A2A939A6A7B5D09F1AF5FE91E7E27006A6B7F57475DC5544B55A9D3C4CC061ED145883F7B1F27FB80533D32E4F63E43419F0C2597E5281F06AAAF004D5340C3ED673851D40C2B1B07A8EDD9DDADA5AEA6AEF08FDBFCE9BF7180FF4E57434D475B4DA9C3C8CC46EE125980A8EA39247500A9ED4F91D6FE18A7BA9F527D1B281E24BC11A08AF04E5FE5B90E34DE06DAE6C5DB4B884829849191C933F53DBBCB18687EFCDCACFF8D02FC735D4D756D1D55A5560343F30DC7C04C04954CE2E8B90DC4363FC189E64748697B8CCC0B4F90D3F3148504584AF555D007D61060C30DE0CC2DAA9000CF8E03ADB340FB0250D23D09EFB078686B6A2CAAEF558AA17FFCDFFABA7A5F12F9BF7D51F88F74B5D4F768AB2AD5EB1B98C8EC7DD3E095750D21B58F115EFB1051A7EFE378C303249C5BA1EF23C08B04D8BB8EC20139CA68BA55F47F427D0D021EC1B54C121E4DB9958FCD137CFB0E1FA76548ABED8383B33718ADAF69AAEE75601AF41FBE34D0BC94027DB3D2185D91FFE9FDA1AE96C64E9A6AA5BEBEE1532B8F38B8A45C866FC903F897DD4750D93C0E57DEC31101F0CCEB01560B80D714009B85F208EFFC341F79CE11A23069F1B1463EAF187986F08C069898D9424753BD8D00DF7F5B88DF20803ADFD1D1D4F844536557A19EAEEE335BCF58821B8067E1220E152CC02BFF0E7C8AEE209000C3085028F018019E7849814503322A50AE50E026C0B34271427D9B670B601D7DA330F50A9A7AE71CE417AFDD93EF73F280A6AA4AA89E48ECDFE27C0300EAFC01F3B40FD59495F275B4B557F67945C32F6B1001E5CBF02ABC078F9C19B8E74EE350DE2C7C0AE710583A8FD09700A60813967CE0339A307DE0901C9504532B4CF8A6426D4285E7085298AF30E93AFAC65A026E9F84FCEA02363AC61E6D04E64EC9B52C03A0ABA9E2FFA24ADAAA965EFDF8AF0A504B43E307AA7B94B2B435B51E7B85C422951E3FBEE529426B1FC1B7781E9EB93370CB9926C4693EA7020BEF20A0F42E422A1610597B1F47EB9799C23C4272EB2AD2DBD79840330A5F5A47C96614DE32E37A421481448014CFC5B93803F98D25C87A6FAC6C4415DC92FDDAA3077F6F7E01BB0CBC60A8A3EAF78D0678EBE64D511D24981AEA3D0C898E42CDE0284EDF5847F1A535E477AE209AE6E9993F0777AACF2D7B5A82E849157A17CCC2BFF82E420930BCE63E62EA9610D7F408890498CA3426ABF3097209B090665C3AA4304F91070A250AB59DA6EA3AE80305B8C1F1C71B27CA27E47BBD7BF17DEB0EFCC0E602BE67DB0525436F1868ABFAFD4B2BEB6DBF9F540B9715174247D750965CDE859975396851B8781F281C5A4352E33CB25A16907466917E6F164E27A7E09A3D25A950BCED5B34A70824558B385227FCE043FA4191CAAC22E30255C85C30EF12734109A222220B90ADFC26571621BB3CF17823B16A4AA6EED7871FD95DC0FB7617F1A1E345BC6FDF891FDAF5608FB1CFB703A0BEB1D5DAC1CC09C4352ECBCEDF7E22EB5F845C44C46C96604281C76BA690756E0E61158498390997AC291CA2490B3F28CC38B4E21ECD7811471B961177F62155B882B48EC73849156613A248694449D7781DF2D179C88626D736526B2765DA41FDF8C0FE023E70B8884F9CBAF0D1BE4EBCCFE73F72E8E4E985B291EFB703A081B1E5DAFEF49B38983D079FFC597976FB838DE6EBEB1B4C7EE5593D404CE31A42CB6690523F85A486BBF029988133217A5285FE2577115CBE80C3D54C6768C6523466429D4C1526B7AD51894F5031B48E4BD3F28D81DB8F3732EAA664FAA103F28F1CBBF01302FBB973377EEED28D9F10E0077CFBC77CFF8FF777F3F461AFF1B704A0A189D5DA81D411B8D33C7D4A97E057328FE3F58BB28ABEB5F5BA61D946C125C853DBE588AE5DC6D1CA692437CC20AA720E9E7933F02A10C184D198BE30822A3C52BF8498FA0738DEB4829CAE27F28E9BEBF2FE5B8F374E354CCB8CC306F0F1BE8BF8D8A9139FBAF6E033B75EFC92E7632702DBD7850F09EE23A71EC2ECC54F0E0E60AFA9DF375B815AEAAA920F3434B55D7349ECC1BE906CB8257620AC86D545C30A8E373E447EF7EA46E3E8B3F5FAE10D59D52050C4F424F9CC3C62ABA771A46A168125738CD277A59C30A8FC1E42E80F93CE3D90378D3E91F5DC58DDC86D9A9159440DC97F4685FDEC40173E73EFC50ECF1EFCFA501F9F5FC2C707088BD03E3ED0834F0EF6E213975EFCCCE5127EEA7619AAE6FE30D0125158B4B7A446C39F3E7BF60CE2B0F1F0078AE6C3D6D96CFABE430DBD95A8EBB2A9ACA9AEFEDEA3478FA4F820F888F3BAA0227D5000D433B25C3B5C3E8728560046CE3104998BF0B25B48382F4352DB53E452498D5736363A6FAD6F5CBC2593778A3464780D9967E71051312541F429BA8BC8EA05545C5A915DB8BAB291777646661B33845FB976E31734D15F13DACE4397F06BAF3EECE2D9E1D98F9F3A536D84F65301CDF5127EEE264E1F7EE1DE8F5F7A0C418D00F525805255C47252535B4B6DEF90B6BA4AAB9EB6D62FBE3100750D2DD762AA6690557D09EE27AFC12EBC1C966ED1F04E38CDBCEE2172FB81820151CFCAE53D53F28D2B7764EB371798BB2DC8D136F608E94D73C869BFBFD13CF4603DB76976C3E1D8B07C871B4D9466AAE475094A3E7D3CE2B11F4ADEFDD8EDD54F95516DCE0427A05189BF24B44F3DFAF12B8F01FCCA73109F790D417D13209B0B1F68ECDD5DAAABADF9EC80DF71387844801DEF87DA6ACA0954CFDFBDFDF8E135DDEFCD9AFA9D15A86D60B59678E60E0A4E7752497388AC5F817FF6101C0233E0E8178F98E24B281EDA90CAAC1AE6711D93905D5D906FCC2CCBE5F71F437E6B7E7D23ABE1F686FDB121F96ECF5EECF4E8C55EDF3EA8F8F5F3B11FCA9B8F2A7E0350F61DA4C2FA08AE8FD0FA14D03C07F0D9A1017CEE35801D5E83F8B5F765ECF01B83A6B917A8B68B5AAA7BEEDB71341091DF87948E750629FE7CC9CD30B77182A6CAEEDBAC995D08F23F2994FA65F39BDF12405D43ABB5F8BABB68E99F445AF500CD7286EDA9A7886F7E88C0CC0E38FA27C02B3A1B27D93E39CDCAA18E47B4A486A9C2913B90C537AE300966E5E0D10D0DFF7EA807F4432D90C77F00AA0183501327903E8D8FBFA2E90A33FD54288DD03E13D0BC09CDE73276FA0E6197DF3076FB0C40C5311D9A6A6AB0B4D98F90B406292D4AEF9423F1DC03563C6C5CB46D20A6761EAEE17930303081B68A52B7AEA6A61A7DE5775E3F00FB2D01147960020196F73D435DDF02EADAC7905433C6BFF443883426AD795E9A6FB804C723E2641D2A871FA28955440BCFE91139F6673F8000A81DD007ADC04168060E4033988FE2045DE6A33843043520C1DB529C029C8036221D25FF11A8BA94434DCF1E8646C6F03B9E8FD4D67B3875893FC385C7486E594642F303E6AB4B6C9F313F6D64A06B5A4348FE18EC3DA345F7E6A9B6DA9E023D6D9DEFBD6D0767FBE7BDB3098B34A6F7C632EEADB2D139FA8420D7D03C3087CAB63164344D4A356D2541E5B091179E520E9FA83464D4F74B1D95DA51395CF31F42D3BF133A4C8C75432F4B472774083A2143D03D3C046D9E5DC274A93A61AA1238AA6D27A1EDF61B8552E018543C9BA06EEA053631E016CC5A9C6D1BE177B3D998CDE860627E5ED4D94CD285029B96117B86950F21C69C5E444CC32344D53D84774A3B2CEC3DA0A5BE775E47532D8C70FEFB5701F9EE004DADD6CE0DDFC7DC830D2CAE6CE0FADD0D34B02F577779152D0353286FBB8292AE7B3847B33D7F8B43A2E62144A596A2E1FA439C66ABCABDE02195D709BDD07E18840D413F6C9867087AE1C3308818810A55F84B9AEEE784A730552ACE5F801BA59FBC0875DB48686A68619FAB2F12AA0751CC1658114BBFEC6E5153AF301957004C790E9075F71926ED04185DC7DCB3862DB59A45425C61C27F172E51E53036B566A051BEC67EA63521FEC9DB807C67807AC6D66BF9ED773138FE1023938F3073FF19EEADC83034BD8EBA91759C1B5D414BDF386A2EDEC4F96BABB8720FC8AAB988CAA17BA825408FC247D00EEA8661F8208C228661143E223D1A478D403B74F87980D8B969AE4A01A3D82B7CA5530634B40D6165BB0F31B94D1C3E3D41196BE5C2FE27C8EB7DBC097095ED31026C1735F64391634A0AFC02C05A9692AC84C22B457F7291B5F943F8E5DC80BD6F32F4F5F41988949B99F6FCFC4D10DF19A0A189F55A42C31D340CDC47DBD00258E463FC9E0C0B8438FF68033DE31B3833B681F363CB68B974131D4353C8AC6C47F9E5FB3461E050F10A74437A601C7119268426C099468FC13072143B69AE9F33B28A00B15BA8CE7F186AAEC550D7B783898919C2920A5136F81035ECCE940D6F7004FA8493BC35025C438EA4C09700B6B0543C2B4C58E107638402B7013C5C3E8F1026F5C1658B6C742CE150EA202C0F1E665F517D4D5743259B10FFEFEB40BE334023539BB5E8EA59E4B4DE4179E71D345F5E44FFC4135CA5294FDFDFC0D2AA0CD34B329CBF29C3D96B1BE8189D437241034A069650C3899B57C90AF40FF7C22C6A1866D1A3308FE1394ABF1648F531CAEEF46564253C158F06A89BB8830323F81D496155C33F1A9BAAD5D7D8B91E7AC601D4D36D001F7F0D807739EC62A3832959204B53FFE245381F6D82A98D2B743554EFEA6AAA89EA8669CF17A3F23B033431B75D8BAE99457CDD144E9E9D44210716670697D17D7B1DA3B332DC5CD8C0DC43399657E5B8362F43EB0D1903CD43140D3C452587E7DE65ABF47D9760193D024B82B33E7E45F27D427922CAEE39D40635CB50E86A1BC0D52F1CD9AD63D2FCA39E3EB59ACA167390F2E167346131C9DB52E0BB99B0428102E05D09A01F1BBFBE057C2C5E82173BE98E21453034B6828EC6DE61FA47B1AFF3675FBB9433B3B05D3B56770731D51388AFBD8D94864946DC69545F5A44DBB52718E0C44CA871F2BE9C41468645821CE448B2925D9632F6FAFCCA5761448056474761137B05D6B157A11CC060E1D90D15FB44A86B1AC26EBF0B52AADAD134B92E0DD76BA9BAEA2BEB04B82E012C7B25C0D5B70B229209B3B14B1F2801648B6D0BA03F6737BE9CE178139E171BC33EC50FE09E791DB6874E80392374D4F7D6D03F7E222D43BD6B2D6C4605C635CC21A6660247AB6F21B6E63673BF391C2BE99772B1B363ABE81E7F8AC1C9358CCDAC62E2DE133C782CC3ED45AE6C0C1260C52A4CC22EC22AFC3C1C4E5C8501A3EF9E7D7950D3B181A9B9158E6494B30C7C846642AFE37A472DDD40CDD50D0E9B7846D725F5950E3DE510FEA9E4FFF2D90DCFEDA102BB5671F222A370C72346E187AF4D63840F8C20C030020C25C0E0ED00D92D7A0E903DCC43A219CCC19877D1129C4F5C84C57E3177D178A4A3A17A82A383FFA3A2BCF7BD898989F7A6A6A6DEBE9940053E4968BC8B63B553385A750BC7AA6F23A16116DE4967E0137D12051DF3A8E89E4743FF3C3AC696D07FEB016ECEAD4AE94E05671EFBC24A606041FFA2630023C7C3D030F386B14884A39251DC3B87B333629D43A13A01AF56C0A3FA2A094F521FE109F32DDE325F02CC21C0539B00D309305502C80A645B227DAC9E69CC6991C21060150156BC0018C80E9130617FC984A9C05C2A5002B879F8B680E8957717FB236A606CB18F6A541E57DAF1995380BFFF772DCDCDDF06A0CADF886E8C99858D3CB979017175D3EC3EDF46ECE96984649D47456D239A2FF4219933C774961E05E76750DDBB80734C5F7A9878D7B2ED5FD42F8789F54118718EEB1A590C2B07375611663892D7228113E65A7D5561AE029C505EF515A13E053C497D021ED5274560C27B398549670A932A521846E08466A630AC44621B9638C8BACF99F4EB01FA0B1F48783EC2845F0628811413C639825C8667D638EC7C3398F618B007A976415B4363F71BDB599A9A5A37B434D460CC7422A3ED1E121B19484E8F239E8D8520966E258579989EB885BAD64BF48D3791D238C500308BD20B33A8A422B3695EE5EC119AD9B9C1C4D69369C322226846474A471192D984C8DC1614F5DEC319A1BEEB62C543A1BAE7CA7B6EBA4F9E078F5CE67FDBD5F7B2F926308589135508E1891426EA790AC3AEF8B6001258FC427D3EC2FF517D5F50E0961237417AE5CFD33F1264FA284CF78530C8A88FBC11209507779F5046250B1C8A3AC526E9359AEE2412CE4C239AA3B4F29A06B4369FC1A98C5424540E5199936CE94F22BD71825D69361EA88A2A4EDCCC1D0E11A2275C932E4B3F40E4E955A4502909157D084DAB427CD9459C6632DEC494A5627403254C5984D92A4CF789A4BCC24DDF27723FE1FB4405221268A13E2981A6FA12F96F9E10651C15788CF0A259C649E62BF9BF05FA3F8E1724FFA748614404F6DB0A20DBCDF70BF01426ED25268DB9333297DC07EBE6D103D0D533BEFE4680965636B27323F7D17299D3B58838D83879C3332A17B15C258867DB3EAD6E0CFD43A3686AED403CD7ABA2AB6EE378ED388ED34F1E29BF259955354B2E0B0234B5F38047D66D1C3C7A16F6FE27E1C5BE6272CB1314F72C21A3A61B91E995C83E3380F3E3CF7086DD9CC20142E329128F9BF084E9E610DE96EF53A84F51C2890A4432DF264509779453C0E700B7FC1FD317015034785FA4309B11F84B00FAE6CDCA3DB3A79F39248F6F98C44DCB0D0FF7404FDFF4CD002D2C6D64555D334C90D7D125F2B2CE9BF00D3E02EBFD5EF08D2D835F663B82138A91DD7687E026105D7993A9CE6D44955D4778E9CD6D003DA940023C358303496348286C8573401C1C23EB995E2CA1941B0A8DC38B3859D986B8EC1A9CEEBA8E9E193923B38C13BB35A964135137A79BF0E8165E44DE17EA13F0E2094F54204737D5A7A84044FA42F3650009E16C46A42F0AF355F83F5F0EBE84FF7B1E3CA836CFCDE343A87E79D332D7CCA90DAB13E332D3D8DB3089BFC392F42B026C1A7B8C336C51B55C7F829E49EEB2B40CC1C3F730CCD9D938E0770C89346901308600A3ABC611418061A537A88C07A862E16FE94880F69E70CBA4233ED68F4242399ADD0C5B9F349E74CE597AD9967A8CB65B72B48FCD21A3AC09992567D07D650EFDDCCC125548E645A62C2CDB04BC2DD355445E450746946F427DC70970AB7C7B1E7D25F3DDCAFFA8BE4D8022FA72CA48F37C01D0335BE10B03B818E09B3B89036913B04A188779FC38CCE2C66172E20E8C227BA1FF551478F6CA9A04B0814702796D0DDD13F455672EC1D9C317360703E09FD288189A6E743501965EA302150085094B00A940B79313D8173FC0BFF82DD88596C126A00489653D38E01303BB90720415CDA0B47F1D435CAE6C1D1E474A7E0D4A4FB7606CFA3EBA19AD85EF4BA5C94A5197F024D3DD8CBC5BEA933A309BBE4FD14050A82F54D4BFC27C09EFB9F9129E00289268014E9C80C2591C16331CAAD0217902D6093C8993303F3101D3F8099825DE8569541FF40DBE82096F0114F02490438AC7B6EB4FD1C5722EBFA6034EAE3EB0720E867F7A8B0430ACE40692A98C2A02B4DAA700E89E3501FBD87E3867DE84892FD323EF5CA625EC1CE7B4C2CE2F8B6A4C8543D41926EC0B6865427D6D6903F55D2348CAA9447D6B2706C65750CDC89C7A7E45529D38C274A5C021DA5722F2D6BF88BC52EEB7993C7FA1FA10C1639BFA3C08CE8F202339380B2FBD03B7AC69D8264DC236798A6712160902201F13A76095B2008B23BDF48146B36F0C225B3EF06580CF416E026DA3697772AF398B66E770C01396CE61F04D6D675424406EA05A6D2AD08300ADA3FBE80B6FC32AA81416BE79DCA199864D4829ECF8764A25E1FAC6C0C63F0FEE1CA39EA4DA06A8C69179E68167FB90985D8EDAB641367557E9179FB075AFF07B52079AA98BC8FBA4D4454A9C37D547D3153D4085FA5ED4BF22F73B44D315294C54C51C4ED4D1C459D6ED4F9B821DA1D9A74EC13E85C092A614E012A7619DCC9F35630996911D625F48C66DD90642FCD56BC79A6F02B81D64E3C823069B67E864144D3C5902BB7DAE70094A4076CB2C2C993C0B057A9EE20F13D50DC7E4EB30F62BA502F3E0C6F719538DE654A3D8D63F92D302DB803C788667C2C62B1941B9D7A49A7A64913B39B7979154D28CD8CC32949E1B93169C125B569F475D85EF5B7C1E38A4CA83F014EA5398AEA83CBCF3149137AAE22E32CEDE435CED5D5AC734EC053842DB97362D1D1B2AD02A49809B814DCA2C6C5369D62797601D5C21373030DA30373581969A2A13B5575F077BEF6D01BE30ED073843901DB7D91BBCFA1011C75360BBCF859768ECD82A728737337B93D05638268CC021B206469E39D25A9C5550192CA9461F9A95857F3E9FE7D35465083B910B2BCF44381D3DC7F2711667AFCB244556764F239CF96334539F4CEEC2A570E3EB285788A308EF45D9B6993813DE96EF934A36C20B23D4ACE645E4B6B0B95A72078E2913541DC151754E19D3D89F218029C0D9A5CEC23E8D5D9AF43BACE38760E61C053B8703C8AB69A25574415D790F87BABF2180DB7DA450E48571199A0759B584C5C0C4C21156BEA760E85B07DDC076E87997C2C83D0B4EE91330F12F85B90FD5983D0B236F0190B92657E17C131BE1C419B457C44958B9C5C02BA51BA768D66DAC5CCEDDDC4072ED087C8E162238B106C718FDC510298ABB8861549688BA427D410428A2AE6859055385190457DEB584C4FA79B8709BCC3669028E04B73F6D060733996665CEC22E45009C21384223B87D29B761E99D012BBB03884DCE42C70DE69F179EC1FAC879EE6B2BF1D2C6570248956DFABE373D360C3D903A359D13729CE99D807F48248CAC5C61EC9E4EBF5701EDFDC9704AB9CEC0510BE34339523BC932A098BE31176EF44FFA1E59B0F42B400D3BD191C9C570F0CF80BD5F26424E0DA2B4EF29B7B93690DFF38075793B9C434FE2506C1DC2CB6758E9AC48BBD94279BE226030E74B3CC3F1C2A50728E9E0EE7621E150750E2993704AE3499F96E01D3C29D4362399AA509D039FDB8456C29CA568705824CE5D9E414EE79A145C348FDE817E480B3893FEAA001511F8AB9C7A826C22C80B0459DD7E155E7E21AC4E3CA16D170583900B30F02EA31A4FE100CDC7D8B708668479A880E9826F01ACFCF2589A71A276A21E76C1A5482AEBC201DFA338187D1A890DF32867D3B684D54A5CC3345C8FD5C0D62F0D6EF1E7084FAC1773D9A9760155DDFCA3F77356523B27E575F649E354DC04BFDF94F43D053C972C9A723A81D1641D32EEC02EE63CCC1C7CE1E6E98BEAF39759B33F21F00928875C8166247D78D23C5B74ADBF7D804285E2D45D7E80DA013E1F798CF6DB721437F4F287F387899D372CBC33A123D49876138E51D5124C0FB691CCFD0B61459FE89E330B43FA4B0BFAC61236276218681C7807C5D63B193E89AD1CE82FF3175C93E6C20179A3049D4F95A72038B31B2D23AB28EEB807DF1C46D7C4DBF4730497CE04397D8AE9D434CD7806AEA766B14FC04B66A038D607B383117070724576591DAAF8C7119FBF430CBC0247A015751D06C76EC1347901A6EC6FFED61528E0D5336FACE360A896A7AA6F990B46CBA8E3F251CBF57564959DC341572F1859BBD31756C124A01C062E6974E4D330F32FA16FCC55A8D1AF08D601053449E6684CC21D0E9723B9A21B4E5E91700A2B4344DE30722F723BA1953E90BB8A1E293DB0F24A655EDA076742724C1E2788091C240C672ACF39738AAAE3523CE11DC8988555FC152A3F0D56F6CE38919A89DA3E0E9CE893C590FF67AEDCDDE1FC4623FC2A748EDC80E1F1DB30633EF8468096D676B23A4EE29AAF3EA5C9BEBDEFDB1E4CEA2F73362CD437C8AA846654D9F700E5BDCB286513A1B86B997F61563954654A5E1DF61D7087A9A32FF4F745C33EE12A1C23AA18A9B3A51D6CCBC022293ABBB14230A6690BDF2816D4A3B35B60179003F7B04C388715E044ED2C0A3B165177751D7E6934C3906602BC03978C09829B800B37685D4F72979B698B3B011D4C6799C63F9499AD1B42236350D5398910069D5F712FE7470E5DD226D82EBF21A8848C4233E21AF4626EC28835B145EA3D98452814585555F5DEABCE7BC6464648CC6B6020788C164EDC1AD9727A5B90A25A6910F0A84061BAD53C0A780F50D64380DD4B28EA5C420117AEF32EF06DE674A707577082399E9DFD7EA97F684E4518B965603FCDCD3CB014A65E22F1BE2325E13601850C0E544E10C1FA1731617F82E06359B08F388BBC8B6B686225E399DC0AABB07384350B57AE282BE0F148F098EB4537C3C4DE079EDE81286FB98C38365F77724AF8FFCCDBF10137617FCE95BACF3976DDC551ABEAE13168D1F7E91FBD0513D6C496A90B6F06A8A1AA9CC12BA78FF6BB7822A3A2034D5708F23ADB4D4C51BE2C88087892F284D9125C0D95B765BA025E49377D165389828B4B84775FACBE21ABED3E32687E05BC3F5CC9CF894ECC234827D839F9E0E0B156EC17BE916A3C401519FB9530B81410C28C94F658F9E573F79A694F7C2D9CA29BD8FC5DE5DAF053B8C69D854568136B70054037A62DE238275E828D5B14CB4F6F6457B42085D58C66F0307E60DDCE5B000A789F1CEC91B6C37670136C0F7D9F7AF895E7E66BCABAD8326DF1CD0045AD47801FABEED959C4BB6932670F7F9CAAEDC1D9AB4FD07C4D98F5CBD1581130EA69B20A9FA7505E55BFC2EF49F0084EA1BC17F04E9DE715D8D6456430B14D39BB88E4A6FB38D5BE8A928BF710762C1DD6B68EEC0207D247316F64DAE3C8B4C794558CB809601958A2306DC234A5BF74397E0EE92D2BECF8ACE0C0B1B3300F695098AC505EDA55B6E5D361BBDF0389592538D9728F9D952BF891ED05FC905727C42D801F71A9FD43AE138B2D58E1FF76FA5EC6DEE05168445C95CCD738965D193618ACD2DF12E056C14C903B5595769EE5DBF0F00F477EE3107D2341F288A459D1AD11014311714F13DE96F22A997F09BF5742802F94B7841CE6640A78541FE1A535DF23BC458E0E585EB1368D636320A36D05791C130486C773C5C311369E6CEC1EE690E750366F043009F72D96CA404FCE2E2C9843BA1C6F96BEE6D48507D87FAC11A6417570A69FDB1756C9A68637C2629290738ED136FE96B4F52FE0FD94EBC5E2FAC40FF8FC7DFB8BF888BBD8C27CC5A2D36EAED3A98408F3BD46F325409AAF39BB3396195F11E026C83F22487582BCC0D736804F700C8A58934A10E92785F2A48021CC7680018211F7393CFA3C113414CA233C9AED16BC74C24B658590C2BA54C03BC1A437B67E8123820544D7CCF3AEF13D247169329377C17C83A309723FEC3C8FC12DFD1A9BB2D530F4C88607136FABA012381F23405EA348E5BF691BD900538F4C583805E1907F04B2EAC7E09C36AE00E67041DAFEFF854B0FE175E2FB361DF82101FE98CFC552FB2FB86627FC9F12CD57EDF015681F61FA729CE90B5B5A166C3058BD23C0AD51DE1F6BA8289BA9ECDE31C0592902221250D276138D579EA27E648DF0B67CDE56C05826BC25140A7854DD16BC4C9AAD021E95C793D4B8C05101A77F0DF738D358901624A3D9518EACE25210E719E1BC6F924090A9DC4D74F30A82B59D139C82D268C20570607E671E5806D7D866A6325C672BBACC88EE277587524B5AE1CFEECBA784F221EF997C4A703B3C69A25C68FF3195A7B8FDD421A9F143E1FFB8D0FE29A3AFD81453E686984618D39718A62F345F53B6B624805FD584B74CF9A5C7BF64A0394090578C0C8D101A7B12C5BC115837FA94BE8F133961B60C184279025E3E0346AE501E8FE4F3CED16CCFDD93949744E525105C1C95775C82B7A9BEAABBDC889D678976975335454334B86C813DC055BE2C40370EBAF94820DDA22BE016D7848331A7E11B53807D2E3E88492D4624EB622526C1E2CEC90EDEB1DBC99DEC5DDE7D5C6ABF841F13E6163C015061BE5D5C6EEFC5A7F47F52FA42FF27A52FD13798BE28CCF739C0C8F62F4F635E03EDF94079DBC7FF9BFADE3D3E7B777D366E6A6A8EF0C442145D98636AC17D969E4728EC14A9CA26BCCD802194277C5E4AD396D95279021ECD563454A3AB69BA841759795752DF61A92D45783C41ECEB89895A5029BFF6EC2A624E364A39A405D77D6DF67920948127B6720A3A4C3D3ED9DF29ED642B73275B59EC63FBD2AF71895D28EF7B56ED92F2C411E6FB016F4089EB1452FA7288E61BC04D319AAF485F0C44FAB269BE966C345865AD320AB7C3D440E72E73C0EFBE320FFC0A00B7A0FEAD9AF2AE28D5DD3B16CCADEC10955E439FB788924BBC5848A79E7D9E83A3369A2D95277C5EB2501E010A9FB7A5BCA3345B01F008CD3642C0A38284F2144D51454725882ADC6ACD8B165568C5322781D3088B3D8593E5ED7048BC255D0DDBC5AB13D23E36770D55B88F2D76B1F7FA0D327874E17B4C57B6E0490079174FF83F91BE08FFA7485F86A17E98E61B25AA0FFA3F9AAF65FA02CF3CCCC2CE42CFDC1916264620BC511E559EEF6C07F9A59748BEECC622C1FF23539F2435E59DCBD6F6071199D988ECF625E4B29391D1BAC499B088B69BCADB345BE1F3043C296808B3652B3E7C139E509E38A2292AC0290E2F746F03293ACCE9E7D7B83CB98A9DEEDCC7E612BB1677B03582B88F1D2476B1C5F32129406C57DE16C4F799BE08B092F9F26680D85794D297F06BD015E67B621AE62CDFCC632EC1D031948D546598E8A923EC70A80028CE064F1ECFDF6E417C67805B7035D5543E5251DA914F553EB6A569459C6A638AC1A1102F5D27315D39C180114B70C74FCF4BF08E08B3E511CA0BA7DF3B5CA6001722C06D8E235F00FC22CC00024D6E7984A0CA552EB1F7403798C3EFCD5D6C3DEE60EB71A5585C1B7B153CC9FFD11FFE8470A5FCEF10EFAAF80F4155A42F51B7A01F3707E3E35759152543474B1BBA6ABBE07DC81DD9D9D95BF0B63F2E10A007CFBFFFDA0015D7A1D4FE90A9CFE76A4A3B2A19709ED93B072022A74B9A9724B0692A5295A3549DC2E7111ED5B7A5BC50029436099EAB6E3BB49700729E91C0EB0DA1D52BD00AEAE142E780B4056620D6898F8C3078F4FD33B3FD82FF13E64BFFF74BC97C15E98B7AE424748FDC8281571178D503DAAABB7070BF235253525E056EFBFB2608D0E43702704B8D34EB3FE48B8CED51DBBD8383181538BA87212C7780D3B4150EC21F30555198AD1430784224782F9BEDEB002A661D71BC091A56BDCA75E24BDCC11E82315788CD62C6A0CE6B14029628D3B6FBBDE7E64BFF27455FDE8E12D17787DF55EC09B909CD43D5D03577E332BA126CCC8D11177B1C151515AF83F780D07278D478FE5A98F16F14E036907F4E90DAEA4A3B3AF9B225D8E77D1CA1ECE11DE1EDA788EAFB9B014361BAC1E292E21BD5A7802A00C61360385F6AC520AC1FE65C27166BC402E0C70C282F078DED2045FA22AED3FED46D009FFA101E3766B56C82791D4205A6FA9AF47321282E2E7E15381941B5F0B8F2FCE79723F16F05E036907FA1A9B2C75A5D79E71067ACD81F9082A03C6E34543F44086F75BE2DB8ADCF139BA6B167961159C76DD8880158C68CC026EEAA7471F19FB6A52B2F2BF087B61D52F3E023E72126DA17A1621B0B1D1D3DE86B2AC3C7FB107273725E056E96B06279DEE7F9E3D7B6B3BEEC2AE7DBBE6EC09B3E8FDFE3AF389871D350DE39AE6F6886FD213908C89F4048E543E6790B6F0D5228F0386FC41FA97FCCCD8141D8C55D916E0388FCEE75A62B5E7BE107F6BDD23DE41D3699D0D4B3808EDA6EFA397BA4A5A5BD0ADC39C2B2E6F98FE2F7E26B1F4A22FB5705B84D917FA3A9BA274463EFAE3BBC56C12E7311FC0BA610CC1C2F9017BCDFA44809205F19E448C31ACC8E5CC6FEC4AB4C985FAFBEEFDB74E1FB76ECF959154145DF89DBA77B606B692AF9B9CACACAEDF0E6082883E743A1B6ED82F846017C0152E5EF78C3F218412E1B9AD9E3406405028B66F9B201CBCC03B7837C91076EF9C058711BBEF131AC8E0DF326C09894187F6FB3CEDD32DDEFDBB07160DB838F2CABB047DF9D8B92AA3033D4416444184A4B4BB7831B2030279EFFF13A2BFA4602DCA6C87FE21DE00C9E55B122EC125327AD660890AF52A44281DC8FE1EB37D8C5B27E65E2FC4F568A324D8AC0362CDD08EE03EB46FCDAE830B4343561A8AD023F1F6FE4E7E56D815B25B0521E659E3F7993FBF94603DCA6485EA6DE55A4A9A2F4442C69BAC59D9394185C7EFF0BC9B50028F6A2E3F82A71B604F88B835D9BC143BCC64C0F1BA66DF8D494572AB44DB875AF04379783387932730BDC388185F0FC3DCF77DE046EEBE3DF0A802FAA9ABD9FABEFD951473FC9FE5E00E71D5DD275ADE0F22509A43FE723C284135A9FC0247A88DDE50EFCA34D37CDB51B3FB528808AAE232B88DD70B0B14442C209014EA420CD3CA63CDF7D5B68DF781FF8861AFB4FF89A08BC1BF8EB166D0D7558BB46C22B7D401168D8998965144EE60B3CAA860CE31FACD928B5AA915EDD48474305566606888A88107E4E0485749E8F78FEE85DC07D2B15B8FD1765EAF0174CC6CDD4F77CD6A3C3645CBC7ADCA18C61BE3EE13364F4825764F9B229FA7CDD04D6ADA67A6A08F4F7455E6EEEC86650F89F5F07DAB75A812FFFE2ACB3FF8ABED1497DCFE75775740DE01E9E03BFC43AE673E6D053DF057797031BC94949A25250E1F9D3DF14B86FBD02FF3948D5FFA2BE77B7B7A18EC692818E06ACCD8C5668AEE5252525FFF05582C25705FCAD0A226FFAE5549595FE6C69690937F96A73E291E0FEF24D5FF3753FFE46805FF71BFCAE7FFDEFFF67045FF37F46F0FF01B0AE21757D418A210000000049454E44AE42608289504E470D0A1A0A0000000D49484452000000500000005008060000008E11F2AD000000017352474200AECE1CE90000000467414D410000B18F0BFC6105000000206348524D00007A26000080840000FA00000080E8000075300000EA6000003A98000017709CBA513C000023E649444154785EED9C0750D56B9AE6EDEE9DEE99DDEEED9DD9DADAAA9D9DADD9A99AA9D999DDE938F7DEBEDD7D3BDD7B55909CCD6246316750511401450189122429928348101410949C41C08008224816C9E9D9E7FD0E07D1ABF68D1DB5EAAD433C9CF33BCF1B9EF7FB1FBF0660DEDB7F5F8080007C1B9F9FC15B785F50406F01BE05F8F9D3EFCB285D6F15F856817F200A5C6A65356FDFEEDDF38E1C3C344F6FC1C2791626A62ACC8D4D54CCFD5CFBB1BA95EFA99F31D6FCCCCCCFAACF8D4DFEA2B8B01012162626DFD5DC9FE63E67EFCF44F3FB73EF73EEF735F73DE7E78DE4EFBCF8F3737FF7CB48CBCF721FB329FCA5033432FAB691EEC26D8B2D96B42F5BB262D07891CE317323E3FFAA7D51DE029C51E82B14F80D63BD45A6468BF42B76EC3F8EC89C2644DC68C71E070F981919DD335EA4BB92EAFCE65B807301AAD4349E676AA0FF4383850B93D66DDC3E159A7C0B452D53B8F10048AE031219BE8955D8B4CD1E54639689BEDE2F3410FF8C53585B2BCC0C0DFFB7FEC2855E4B97AD1EF10EBD8CAAD661DCEB038A9A818CFA29C4574E21BA621AC9F5405CE5384E9DCF82F56A9B31820CE4EFFED3AB6ACE6C5DFB53AE81E6AC73863A0BF7981A9B771C730B44616337DA878107BD40D5A369D43F013A06A6D1DC3D8542C28C2E9F426C1515D90044163E85C3E970589A5976B256EE677A7F672EC83F59803335EF1B267A8BCC8DF40C2A76D9B920ADE01E5A0780B667C0FDAE6934F5005D834073D738CE5FEB86FBE5C7A879388207DDD354E4342E955195354CEBDB4070E643ECB43B095303832ADEA70553FAEB02F24F16A0899EDE4F0D7474D2D66FDE337521B598A93A8DF621AA8ED01E5279DD04D7D63B81A4A27E6CF26FC51AEF166CF47B80DD21CD4828EAC183CE0954B54D3395A711553EAD2026D64EE36C4C09366CDE3DC5B4BE62AAAFF78E8589D9EC58F4073DC698191BCE3363317FD31823AA333330FC073608BF254B578F9E0DBD82CAD631B4115C33A109BC765160DF24B26B9F616F581B569D7D081B02DC1AD486AD81CDD871BE197BC25B70E64A078AEF0FA389699D7B8F104B99D61553AA3EC6968FC1F95C0A962F5B3564A4B3C083F5F1EF3E31F6FC9639503D9FAF285E55AB357FECB500CDE67176FB1BD6B903E666564F1C4F8720EF762F5A98AA02EE7E3755C766F1A06B12F9F5833816D381959E0FB1DEB745A94FE0ED09EBC0B6A066EC0A6DC1A1A8361C4F780297CB5D88620DAC7D348E1AAAF14ADDB4AA8F71AC8F490479E16637EC9C0361696AFEC86491CE5676F86FCF8E3D7F2C00655663715F62AC6F50B3CBFE24520A9A71FF2981F503773BA7D1F8641AD5AD1328681C86E7954E426B85CDB94704C5992F8C11DE0EFBC84E38C6F76067480BF6527D47621EE3E4E54E7866F4C233B31F7ED94F915635848A8713C8BF3785C46A4D6A27D46A4006A43562EBDE6360D9283659A4ABCF4CF89AC6F1BCDE897C55EA93FBFDD40AD4FDF0A3EF991A1A5FDBB8E500C2524A51D7499511DC1D42ABEFD0C02B7D3885888211F85E1F827FCE30C20AC610593281A8B24915974A271151C426923F8AC351EDD87FA195EAEBC0E9D46E7865F6F177061090FB0CDED79FC1EFDA5324943CC3F5FA11A4D54D684072EC49E2EC9850338D3317F2B066DDD649133DDD6853FD45DF7BD9FACDB572BF5780FBF7EE99E76067F79E99E9E247BE51F9287B3489FB028E00EBDAA7719B51D73EA53EAE7D3C8DE2E669A4B3ABC655699413CF90DB38CE7DEA737E3D8130224BC671F6EA539C4CE98207D5E7779DF06E3C43E08D41F8673F53DF734AECC6F1B8768464F72224EF997A11E2581BE57EA43E46970EC1C93F052B566DEC3337367222B4EFBCE0C96706FBDF1BC0154B97CEDB6263F39FD7AFDB04AF9852E4726E6B54E0A658A73451CDA89A896AD62EA95F159CF772EE4E21A18AC332EB580C9FB43485B9A18579A1684CA9EE1C23286F90008798C6CFE09ED14F805DD817F1186BBD9B6017F61069D523BCCF69757F3172BF0499D288E96BD53DD8B5E7208CF5F4DEE71CFA75766C2B369CCB74410604FAB5E74DE7A505089718AF5C88C8D7D5B262E6E7D512646631C21765EE0BF2DA14D67E232136160E672EE2DA1D20FDF634B21A2639104FA1924AAC689944F96C4CA18C36AD8C695CD63A850A4611D528AE4354234FF86588F2B928546E2F148D32B587087308BED79E31ADFB70F05207F684B62228AB1B371AC791C2D1460B2F8A73E3F5C6E9A9B2E689B1889BA3D36BF6FA4E9B1AE8AD3420389B2D7B269D7CE3B076FDD67163DD8561ECDCFF67D622CED92859FC2E008AFA02D2EE23A311287938891B772790593F8EE207138435C9949D501F173F98243086DC320A19C5CD532AA5F3D80C2EB36EA927FF0A350A40811C5D3E8950D6508F8C01382574C327BD0B57AB8771FD8E76469C621A4F11241F0BFF6E7A793F0E5D7C0CEBD3B7616AB9164B975A8FBA072721AB7E18994D7436450338E27E018B2D97741BE92C74303332FCEB1714F7BB02189AD7C301770A5709AEA16392CD820FBE6E1CB9544561D3046EDDD7C4CDD998E4C7DA98C2ADA6297E3E8DCC064D5ABF0EA2801440891563C8A81E42CE9D4924D39DC8D72462A9D69B045378771467593BD77ADEC3B2DD21B05CB21E8EB48DB9B59DA8EB026EDCE7205ECD17A55AD3B943AF73743AECCECD8FF16D6E7E967208FFE69BBDF69798C22B56ACED09BBF914174BD8410B4790513B863B1D13A86FA7126F8F21AD7614398D63B871679C4F784C41CD511F4F2057E2EEA4AA873718A2C49C3B53B8522B8DE045900248160CC50F5947D98CA41149FD8C1678F2E235B2CB53759137FAB0E55C0B961E8887D9121BECB23B81F4A27B6A0EBDCFE1BDB2755ACDA27709328F2F5A0C3BB76C7D923857FA2454C2669BDD342172F3B3E8A72F437C6E15BF4C80CBD7F484E4F5E142F138426E0E21949158318C1A0EBCCDDD9CF9EE8F21B97204A935A3C822D06BF5634C21B91D67BD9CC035C675D6CDEB8D1253C8264089ABAC8DA2126D5A5FA53ACBF8E4B399AE5AC529355281524BB3381B1E66BA2E77CC81D98A3D5867B31317AF1412DA94B28D02ED1107F81E2E2E1A1E8F23BDE229EADBC6D5F222852F98FC1D51A36C7E5C03D341618CB2D1F8B23EFEBD16E4570270F9F2D53D41393D082B1C4348FE2082F307D82D0770B17010797746D1D4C9B46E1F273076C8F261C21C56AACCA86350AD92EA198CABF5130A5AA604616531D26F6BBA745215ED1EA12632BD15BC99CE9D435B778BE9EA95D2096BD732586C74C1B2951BE11D7605D58F86D14158E2B51F71ACEA1F11BF3D89E8FC3EBA9C4758E7F3008E512DC8AD7B86262E33E44550B5965D5C405E2CE8C7C19321B032B7ECA0D7DEC331E8BF7C650003AE7721F8D608470C99D59EB253F673E87D8AC0DCA7482C7B86CA96513CEC99A02A09AC6618B165C30AE6E5CA515CA91953914A8869759304CA203889D43A4DF39027A6D29521F052F904A5295D62BADA7ADD8585AD1FCCAD56C3F174306E36F4A08DE05A08AD854B0B515CD73376FBCA0176EC47CA366EF06BC596C016D80634D101B5E07C76272DE2281A38ECCB8B287F479C8DCC92C1579BB0E3803338FA94D3D918717CF9FAF3739C2F618CA1027BCF09C09BC39CD5049C380606875BBFEBBD741D7D389FD78F8C9A41A6CC185A98D655AD545DED08620832A67418890479B97A0C29351C456A26550D1478925A520BB50065C0966673B56A1087C35B61B52716A68B6DB0D3DE05570A1E28E7D342EBD8C41558076B9E80CB6F1882C3A576ACE6A262BD4F2B36D33A6E0B7ACC68C5B6E066E5760E463D861BADE5D59A67689426D8C2BA28CD8C20A53E26B04C78461762FDC69D53C6BABA499C1F7FA49901BF1C8013FED704E0D0738084E77BBD073E0CDF6BBCBD4698D9FD906673EDF6101ADBC7F088EBABDBAC45D7EB47115F3E42D730CACDCA38614E20B97A822065B4790EEF1A9B447E23BB6B7227961CBE06E3A53BB1C1761F22524BD1D035A5768BF7D8181EB0D63DEE9F567EFB584C3B567A346395A88ECB0AB5E9096CC3818B4FE8BBDBD4B6C73E52B3AC3875A51BA7D3C5D13CC54D96053101D2DC64A097EE2E691DC3C7E9E4978CE54B573D657D74373334FA9F6A85F63906E91F191B19E51B1BE8832B79F85FEB44900064FAFAE78A02E700244CAFCC2E2E045AB90C20507E7EA140400E73E419E7939D649D9CE0B8334EE58D298831E5137CE0934A05A2C0028E39D154F18693A530B13E8A65CB37C033348D83F9B8EAAEF7084DBC763D43BAFC792E1C6429611FD505E7A43E0EDD4F393BD2BDA40FC03D6D407D7C38AA033B09F070F463B8243F8147BABCD8FD7C7C4FF9E20F20E2D600B259B70B387AA9615F6C263320899BF1F0BC4EEC3FEE070EDA2DC6BA3A36E68686DF7E9D1D7CA5133131D0F35A67BB1FD61B76C27CD55EB8273721900D446A9F368D7DB3A93CC23A4B789E17B3905B548D90ACFBF0CC12B8BD2ACD2F143EC3D53A4DC77EC4BD606BAFD83F360C76E4A4EA49D5190B1F4CC13FAD13A6BB13B164F92638D34164D7F52ABF2DE01AB8A8B8CDA89FF1DAD7D8D1654111CDC5ABD8BA44CE7A7343CA80B89BE03C2A34EE098EC5B7337DBB66971581B9ACE339CFE095350037BA1DAFF46E24960E20B96A5CFD9E8C3D92D2495CEA9E4BA9C7B6BDC7616E6452C003AF8FC416BE0CF295008DF4747C9D4EFBA380A7406EE7E2B161970BB6BA26C23BB303E7666AA09FD4407EEC79B513AE67CFA3BAF416AAAA6BE197760FDED7FA341099D681546DF8AD41A4548DA0E4C138EE7552915C9C96D2C5E4702E4C65135AED5CCC176B37CEA7DF4383EC1419B76541F1780AB50457C35BE5BD795BC719B1AC550EA634CE469DA97CC267B34910640C9D4D60EE201713F278E4B168FC7640CE20BCB36491D1C37DA4EC265B583B9BE19FD5CFC15D531B4591023196A396775C1976ECDC07A6F42E0EE3FFEBB77A6102F47670F1467ED324D36B0499A50FE1EC1D898D7BDCB0F34C2A7CB23A153C091F42F24B2AC78D9CEB488C8980DFA54C7E6D40D547817C2EA79F0FFA19CEB30444148DB01E8E719499A00AA7907F7F0A27B8505DB1C5150197AB9071171CBE098DA06449514DCFADF1DD9AA890A0C7AEE4F7646121BF2F4F582D2C5E0352B63F51A51308BD354C550E2288CB0A7F02946D8F4B72B75A566C0978883349EDC8AA1B617D9E5954CCB8A28C7A4C557762CC974DC6C4D0C4876734FFF75303BC7E97F35B2D6B45C320FD2D5D4851138EB98761C3DED3D8EB95C52EDCAD52D59B6A4B2FEF44694D234232EA345045A13321AA1588F224C4CD5C2C1E53BE37BEA017EB9DAE61C7612F6EA0A116A8322F66374E1094665951467F5DC65B51AC78F112F1D75C58C8EEB194CB0BF1DA590D92B66FDAFC68C62559A19DE734E1C77DE3E9D47ED6C72770668A27973EA34B825AB5C90B21B36802EFAFA86972FA46DDE0A44B62DFB4B5530E2C4CCDDC2C0C16FDF3A706983D0330831005648E80BC3F82CBF90D38EC1A880DFB3D611F705303919D38800D46EAA480934623E054F06BF27549677132B2C28AA998846B7821166FF6C48973A96A2E13E752F3984701F7F9C2DD1E57055E9606E2B7352119C145C5CCED2DF5319F28EBA8D8B6548E4592CEAF5D5828C8937C3147E099DE871836BB1BB49BF2E2C9FC2911CDDFCF21CC52969B606E8136F93FC2FA735D58772C8D4DC5C8DBDC50EF5F3F334081272120330564E3201F389D47760DEC9DCFC1C6DE17C72E54119C66463CA7525780CE80137812F9AC418CF36C48974A46B1C7350EE6D6F6700BBF81689E7D44168F507D9A3A59D632414733461B3846658EABC8E30B9AC76D908A7B93EAF6066F6F50B992CEF98428E3909AF16640CE8529BE5A9458F08075940B910CAEE762D934D400CFEF094851760A9BCAFEB0C758EDA53992D81ADA8BB547136166B0A8CDCCC8600B01FE072DC4D735115503B50AD4029C0B523ECE25C822828CC928C5FE633ED8EC100CE798FA19E511E00CC4405A3F0DB8E7115E38842DC7A2D9E50FE064582EA22AB935B93584F0C2616503EF3C99E0D04B8BD8C0219C0D28F3F628E18EB19C8C330896A025D5B3A9A06C6E6DC40ACAA2E2C65D2E73799BC6415DD25ADB6004521ADD8FD452D90EC9F8A454275065CB43A8790D233815DF81D59E2DB482AD74323C3DE421D8F6F05EAC3B120F2BCB65D3A6FABAE3C67A0BAE981AE97FF4DA33116D13791DC059903554649D2872889E75106149F9D873E42C0E9C8E8257DA43A62EEDDE0D4DEA067180151F1D4C88C1546044D110363946C3C2DA0E2E21D9882C079715832ACEDF7CC666334C8BA85958943EA08BA9D2F8EC74FA6C81299BA04CA6B90AD64D59F46A628A2AE4B295B762DB04A2D4B56BFC5C52FD329BC4251E9BAA5AC7C8E4F2A298E5218475DC868760D667797A48D569E0D1D1043FC6CE08CEA88E0958B7C3656ABD7DF0F0B295EBA62D4C4DC6A9C684CFA5C057293293A6FDC69D2114DCA1DAA232B1EFA807EC3D12B8146D63E7D382EC6727D4A8309CCB884D47A36149804E41D7105E2AB31B013304B878EE3082146773EFC938EE7318CFA78348281F527053B8DE4FE306289D699EAA5D5ADC9E64ED9C646A6AE049C8FE519D31139CD4376DBA5E66BA16B2215D2E19C0BE90362C3FD38CB5549D82172856B01DDBCFB7634708B7E217FB61733C1E6BB73860EB7E5778875F86939B17743FFE3557189FBC9873DEA755E09B40E6D4F6C0EB7C222F6173C721EF14F870860CA40A05A66C73C20A0460142C57DB2B80A1C593842635F3A96A3A6A60E7ECE6CF31289A9BE56236AF87DDE3B8439B9843CB2710C5672754B0A9556B9616A935138439C9DAC920444963A987AAB1CC2C2B24756FB056AA74E5A0BD82E0567AC895128F08AF8D4B088DEA7610DE2E9E5FEF0EA7A3F1AB86CDDE5338EE1E82ECCAC7DCCE4F63CFA95818CCFF2527D6CF04F0A96A266F0A6934194CEDAC19455E2DE19507E7A298DA9E70F0CB805FE693996E3CA052D88A008F0765218C0067C1CD8C3F328C6BBD76406E2F12CB07785E3C8A961E82A42A659D26BBC9E8D211C4958F2289BBBEE4EA717A6C7A6D4294503BC7997495256D019B5148560FD673F9B0E41455C746B1D1F71107E9368DF22465A93A81B7C3AF0EB647C370908D3239B796E56A54B99B65BE5D30DF150A33BD5F7F56806F863717AC40D482CC636AA716DEC729EF0855238F065E6783E9C6663691C56B0FE278F07584144D2805FA8BF26600CA30AE16169C2BCFD2C77A71540AE28AEB72A56685F6A86F42D5487138B2D08DE1901E5D36C64ECBA505778C97B9F9911A283BC09BECD2294CD7BDC1ADB0707DA052769D772B9710541E471551DE7681174AC505DD87AD538C7AAC9129793CD01A816B6207AC4EDF8391CB5D0570D9BE70982EFAD55707500B339D20D3AA9FAA112887ABA7CB798D70F6388FBDC77CB17EAF2701DAE35860D62C40ADD79659521613BE1C8D3CD35AE0155FCA7390FB0429B64C56684FD95406398E7085C65D641B7D76DD638E353C4E1015C6564C306461C1652A0FBD3CB95058E2DA84C584B79ADB9B755E2D0A9E8DBF266D55BD0B6EC1969369D8667F06BEA109BCA6875E3FB51356271BB1C0E1364C5CEE60A94713569DEBC6B2FD04A8FB1503CCA82138015835C02ECA275CD18F2B954FB9E26223B8568D434E67B161FB31EC3D1989602AF01C07716D1A8B4D9495993FED976340060AF3B371F7412BCE6536CF786DD949F6B3210DB01E720AB837A6E6C7B6FE29DECA9242A3405956F870A36D748C07506E02AF85694B783EA23C6DDAB6C3D62D175BECCFC2CD27029965CD08E4257896CEB7F1C1EE0A2C385C0363E74658B8DDC352CF07B00EE8C1B2031A80C9C9C9F35E0ED5448EB8FA2297276BBFADE67DE2FB04A6866EDEA6537969D503B8C2DBCB049754CECB354AFB1157D287A432A9A783B8985288C32E7ED875FC3C5CA2AA94779E5D5888DFE602E0D4A56244455E40EEF50C5C4ABCCACDCA13A6B6C62A06F0E7654920E735520BB3781623D64F3CB4B8932C6EC857BA35B1DEF189B35908BCF533F04479B69EE5D874D01F475CFD9092578BC89B7D58EA7A1BEF6E29C6CF769461E1A11A181EAF872953D7EAF47D2C3BCBFB09FCED00030E9FF024409EAE71DAFFAC10153CAA2F55E0115C0A43D49750D68FF8927EC416F7F34AAC3E5C2AE8531F5F29E3994B623E8BB52F763B87E17462A3AA83E26AFC08C89B6A48A30FAFAD2A4758640C97194FD4B64714EAC71088325F8AD70EA7D78EA2CB89670A8B470ECAEC858533D3CEE321D670C6DBC05145D276934F0336395CC081635E884EBF85B8826EAC39538F7FB729C00F3716E0835D65F8C8AE12BA0EB530726A80F9C9BB58E2FE002BBC783F41BD4A8126AF532007C43D96E666D86DE788888C4A7A4399F439B07268BE5AFBE64EAC555E2A5527F02E135C320FC013A9B878C28A2DEE4334E109C08B377BB9BCEC45E88D5E44F290E772592F8263AE63BFA327F69D8A84C7E5264D432120A98709255D882ED0C0D32E2A146851229B8F8C47E266E42A878BDCC02471F37DE8423B969C6C82B5D43D360D1B9F87D8E29C8C5D87CE2024E62AE7C04EEC0AB8879F6E29C4BF5AE71160217EBEA314BFDE5B8E8FEDABA077E4368C4F307D4F49FA72FB4D806B83FBB0FC40C41B001A1B7ED3D450DFD04077418E859919EC8EBA213ABB81173FCAD1E4E86B15298D42DB3494F2143C3978D2282FAE88F018A2BC8BB77A1191DF8B3001C81125880BDA735453184FD5E20B3BE17F31037B8F78C0CE3D96859CAE4694C8B9501A88007B7951A17CB70CEC02916E26921B9F4B0C5BAEF9979FE6933ECB71C53517DB0E79C12B380E29C56D3814D18C5FEF2CC6F7D7E6E3C71B6EE1DF3715E0275B8AF0C1CE52FC665F25161CAC8181A3A4EF1D4DFA0A40BE009F06A0F6029A6F713BBDD840777EB195B939C41FC7E53F605A4FD21A8DBC00521A86A6E6699497C27359ADF2A4EE49AA8AF25E8077A307E7092F98C7A681D230389FF96474C33BA30B414CDFD8FC3678872463E781E3B03B1DA98671EDA1965A56F067B45B1E6517954DD4389D502E71FDB9975CC7B4B57629C196C30170720F4252DE5DB8C63FC2C2FD65F8E1BA9B788729FBDEE602FC78E32DBC43803FDD568C5FEE66FA1EA882CEE15AD63F4DFA2E3E735FA5AF35CF5ED69E1705BE29853F7939EC774C0C166D305C34FFF6D2254B38910723A9F091AA8F721D8A82C7906E9B2A1D576A1ED33689CA53F0D83462787DB4C08BBCD537ABBC9019E509BC735C1DF931BCAF76E12CAF89714FEDC269764F7F1E115CCA69817B40ACAA57C7CF673F5F95A9AE4D881C6944795A780230AC6008A793A9BAC3E1B03FEE85A8F412F8653C81C9912A42BB85F76D0BF1C1F662BCCFD4FDD1869BF81101BEBBB95003704F193EB6AB86EE913A55FF54FABA376185F743ACE691A928F0CD35F0F5D713FF372A72AFA1EEFC872B56AC842B07E3E4A236166B390F7E862B1C5534F03469AB3A2E9527F0A2246D59F32ECCA46D486E8F525E80288F277BBE9902AF7B16DE191E43BAF1FA1797A44E06BB2EBF1791D58453BE91B03BE10BD78B85CAF629E5CD786DB915AF1D48A8CEE7337180B53438963631BB034B9D6B95D27EBEB510BFD9CD1465FC84F07E4015FE70FD4DD53C7E62CBF465FDFB0DEBDF02FB6AE81DAD8789F31D58CEA66F0BD67C4180DAD4FE5B637D5D4782EC586DBD0E6E0171482AEDE461B96C4D0635356F266D6358F3A2D8205EAB3C7658058F693BAB3C1E02B9A53C5197FEBA12E089C427708CEB5036CA2BA30721E9F570F60C85BD4B00DC62CAD5817F1043609E24583B271FA67E1C2EE4B4629D47031B8406DC477B4B319FA93B7F7FB982F5038213783FD20264FDFBC5CE327CB8BF023A1C5F0C8ECDD43FA6EF72D63F49DF35ACA95F44812F5FEDFE0F04E96EB46861DFBA0DB6F0084B434271AF32F7F165031AE5B1EE09BC59E5B1EE05B361CCA62D4FF5445D02CF23AD8B57EC0BBC2E9CE2F9B0C0734EECE4A56E72BA26109FC021BA0347639F1038EF27A992576505E0F0E930B884DFC421BE49E7A4570822AFDDC576FF3BF8E50E02D95E04DD0365D0B52B878E1DC17034799FA0B4CA5300D94066D37737BBAF5D157459FF8C54FDBB373BBE48FA2A8021CFB0CC2E1296861F4F70887EF71383F467BD24D6D4C8E07B8418C418DC68BB139E17B21153FC94067F04970AFB9FD73C8137D330CE29E57529E579093CD63C6DDA8AF2246D9DA9BC5978B11D70641CE155FF02F110AFB1968F7DAFF6F0EFE5C0E15400222E17C1E142333EDC55825F6D2F84817D390C0E5740FF50050C0E55F2B692354EE0E52BE5A960FD9306F21E15F9B3ED256A7C99AFD2B76E667C61F7F5788095AC7F6BFC79B56C10E7459FFB58B2E9382C8C744078438C938CEF6A417EEEF75410E4CF99D6B1C6FA8BC636EFB4C7D9A802BE7D8B2345D130427985D7EB6A9E5679D23466E111A0C03BCE0DB1803BAAE28982A60D0179909775C8CF24568EE150643B3ED89C0B2302333B5A01E32315303A52A91A87C9D11AFC624709BE3F17DE0C4455FF647C91FAB7AF82EEA31AFA8EF4BEAC7F32BE2CE7E6C6FA5C2701F2DA9BC3F1B05CBA9AEFA2D2C1A68D1B9094942410251A18668C6F7C6E8033CAFD0641EA1AE87C94CE59726A2B0FA6DDA34B10CA2DB49C859C530D4394A7495B4F1EAA6B94D789534A7952F334697B5CD53D0DBCB9E05E8048A0521FFD7347B129A803C6076FC1F25835CC8F5531E4B61A964E35F8909DF555F0247DDFD95488F7B79528F7F1E17E8DFB10FB66E67A078B3D1F61852F2F2139918325EBE46C58076B562CC149971388BC108EF8D8681509B131484A4CE82140EB2F0A70E6F78DBE6562A8676EB0F0C39BA6C686D876E024CEC4D66AAE81E67C7696003DB8E97027BCD30427F04EB2EEB9109EF30C3C8DF25E54DD8B20DB553A0BE4A0BC516C0F7D02E34305584C608B9D6A61C558E65A8745072B54C3985BF7B4293C5BFF98BEBF62FD9BCFFAA77794F5CFF93E2CCEB4D117976309CFADCDF91C965918E2E8E183B8181E8AF898A8D948888B2D4E4C4CDC4D78FFC8F8DA970470E6ED552646FF89A38FB5A1CE47A5E26AB61F3E8B53B10DF4B743BC5EA51F6E024FDB3098B62754DAB26928E511DE1B016A947934B65DBD2F65675827CC1D8AB0CC85E09CEBB0F214AF9D76AC5633DEABE0A9F185BEF73DDB62DAB7328E2FDCBC1CAC839E53334C9CEA60B9331016964B6169AC8B7DBB772038C07F2EB8CE84B8984B89F1B1EF5279FF31392969762BF3E5027C3E53FEB58981AE2D41565B592DC18EA30170896DC2998C419CBCD24B701D2FD5BC3729EFC594D6001CC19E882E581D2D25B87AACE285E72BDDEAF1D3AD45F8DE9A394D43DB3C66C61795BEFC995FEC2AC76FEC1BA1237BBF5D97783DA235CC0D16C076E35AF89CF5780E2E36BA353E26DA8E69FB8F52B21213E2E611E0BCDF0540ED0BF33F4CF4750F182FFAB869E9F235D8E97C114EB12D704D1D24C02E35AAA886A19A85A6D3FEF668E759F408F6467661E9F132B555597F9630EC2BF03DFADCD98E3B079E767C798FEEE3FD1D15F8C5FEDBD0DD990AB395BBD95D75B17A85154EB1CEC55CBAA885574170B604F75D3313A379E68CDF17402DC8BF3731D07136D15BD8B5CC9A17519E4C50697B3CF9E9A74ADB976BA11F53F8401437C527CA61E375074B5CEAD47CF7BAD415803FE6E6E59D6D55F8D5D6EB305A7D94976E1863B995311C9FD7B909D6BA5C8609E3AF049802F707025003D2C8E05F7850EDC7F41E5EB1761B769D49C751BE19F158E2532AB1F353A84FE6C276AEB786611FDD8395AE15B0F5B9A35CC7BFBD26757FB0BE00DFDF588E776DF2B0C0DA1DA6E656B0629DDBCF3A171214208A9B642432E6CF85F68709505B238D0CDE35D1D709E789FFF0AA8D7BB1FB6C364176C331B18F10DF5C0F1D7811A55FCE100EC6F462CDE92AAC716F6473B8F5CAB1E5FB1B4A9475FBD5AA2018F1CD39320C6FDDB401FE3E5E026E8011C6F831E3EB5A43A155DD1F36C05990FA1F98E82F4820C8696BDB83D8EB93AFDE1EEB9820205F5D0F1DE84AFCA9C0C371BDD8E8510D4387AA4FA8EF071BE840183F5F1D05032B5B55E7D6AF5E0E0FB793888BBED443602719FF6266F23C4DFF3801CE8024C045267A0B72F884B076BB13F60794E26842AF82F95C919A2623292C638CA875F5A92AFC8C2B296DF3F8C1FA4288EADE5B9B0A9DA587C0FA85554BCDE1E4E880A88B110F09ED08E36F67EDEB9F0AC09927F42D33237D33822C323335C5BA3DA77020A88A107B7134AEEBB9A5A302037287E194DC4F1752CEA159D2974170EFACCBC647CBDD606AB6184BCC0D60B76F37C2CE07DD21B4CD8CFF6E61623CDB5135EFD4FF1351E04B0B8DBF3235D45B6BB2E8E35A0B734B6C38E00DFBD07A2AAE5F351C496101E89CD2CF555531FEDF5AA973B7F04BEB20185B58F3BABE85D86E6B036F4F8F1A425BC1F84BEDFDFFB900D48E3E7F43907B8CF5E6DFB55CBC9C97D39DC7C188BB4C6D2E2A6E8EC1256D888EA2043F5915CD3AB7950E621136AC5931E5EAEC54C5743524B8BF3037A5E2187FAE00B54FFCEF4C0D741D8C177DD4B2986FC3B0758C545BEDA397EE426FB91DAFAA37C0EAE5E6D387EDF65704F8F9E810DCECD5F56F01BE78DCF04FA6FA3AEE7A0B7ED3B162B50DAC162F8395890E766DB3AD763E7E6CBEB9D43751DB8C6B5063C85B05BEF87FC0E8EB2E9CE7EBED756AF776DB3A8783071E335DCF1AEAE92AA5FEDE007E96FF6CF0EDCFBEE2FAC0B750BED87F21FAF63FA17DFB9FD07E31057DD10C7CABC0B70A7CABC03FEA2CF8A37EF05FB47E7D19BFFFFF0193544B3C8EFEE9D60000000049454E44AE42608289504E470D0A1A0A0000000D49484452000000500000005008060000008E11F2AD000000017352474200AECE1CE90000000467414D410000B18F0BFC6105000000206348524D00007A26000080840000FA00000080E8000075300000EA6000003A98000017709CBA513C0000289D49444154785EED9D075495699AE7DD9EE9E9DD3DD53BB3DDBB7B66E7CCCCCE9939DBBD333DDD95BAAA2B4EA52E23484E4A960C0246A2E49C4510414194288228A8A0A2A02239891143992388595484FFFE9FF7DECFA228ABCAEAAEEA58F79CE77CF75E2F17EEEFFB3FF17DBFEB7F0230E5BBDB6F4140007E67BF3983AF8467636535658EB5F51439DAF038471EABFB342B795EFBB7898FF5CFC9EB9EDA84D77EE679F59A1F58999B995998CC6EB230367C64616A54606369F9AF9FFEEC84F791BF45FB7BD4FBE8DF57FE9E09CFFFAE44F1FB06F857D61616332C8C67D75A5B5A3C59189E8ED8D55BE0E6BD186646B32E5B9A998611E2DF7E06E47700959ABE4F60D3A9B85A6B73B387DE8B229156D183B28363A81A004A3B6F213A6B03ECED9D08D2E030D5E9282AD5BCE0CF5A8104F72B4B93D955D6E6A6A39E0BC3115FDC8AC2F6C728EF07CABA9FA0BC670C9B8E025B4F032507CE23382E0B5429CC661B6CE7F1031B6B9B3F4717669CB2B47C9BE0565B99990CBBFA2C45747E13F2F63FC0BA2E605DC7288A3B09B1E7092A0F8E63D32160F311A08E10779E05D6D677C33F201C1626C677CC8C666733FEFEDBE762EB9F660C54E05EB6329D9D67696A34ECECB110A159F5C86CB883D56DC0EA038F50D03282A28E4728ED1E45451FD577781C5B4481C7806DC7811D84D874056838FF08D9950D7071F38689C18C7316A6C6C184F83FFE849388E54BD666C62B2C4D0C071DE6F96049C636246D1D4256D31364358E60D5DE7B58D3FC0085AD0F95FA36D075AB0EE9E111DC76C6C21DA7805D6774B6E73CD03C28606F206E6509ECEC1DE9D6B33AADCCCDE7DA58D9FC4055057FFC5998F1C9CAEADFADCC8CB2A8BA6BF6CEDEF08DAF4044C54524EF7C88D49DF790B1F336B2F6DCC3AA7DF7917F6004EBDB1EA1A44BA7BE2A519F288FF0EA096FE727541E5D78CF39A0517FDC7B19D87B15D8D07A1E41B11920C031C6C71A6B2B8BF76C6CD4EF57F64756C6A8BAEF5FACCC8C632D8D669CB7757083777439828ACE2062CB5DC4D4DC4242ED0D246FBFA1006637DE431E011608C0F6872825C08DCCC0D5045843F7AD3B4180745D515E2395D77481D06872DC43904A911775F131B7A6035E7E81A2C63BE626B353F877FCD31F1BC07F656288B7349975D6D6C105EE610558527012A1557710B67190760DD1D5D7112F00EB87B17C970E60EEFE090055FC63F2380CD4D27DEB4ED27D457D04D54480026FFF251E09AD896A1480025854BA8310ABFA1F202EBF0E0EF33CA948D353D65656F67FD80A54C5ACD53F5A31905B18CD3C6367EF0CEF88422C593B80A08DB710543E84A092CB0829BF84B04A02DC34A81498B27DF84B1528094414B85DAF40716151E0D6FE416414D5C2D5DB1F06868698366D1A3EFAE8237CF0C10778EFBDF794BDFFFEFBEAB9A953A762D6AC598F8C8C8C8A2C2C2C665A5A5A4EB192EE69CE9C2973E7CE9D626B6BABCCCECE6E8A8383C36FEDEA5FF906935BB9B936D67F67616A12686A3873C0DECE01FED16B10567A0A619B6E13DC2096165F4440F105042A80971156710D5104280AD4006651819F8B81BD9F8D8175545745FB45D6819930353585B1B131F88111151585F5EBD7A3AEAE0EEDEDEDE8EFEF476F6F2F9A9B9BB179F366646666C2D7D717262626983973260C0D0D2F9A9B9BBB4A7C148893017ED118E17915FCDC00D90FFF88E07C664F9FA6C0452E2F465AED79A4358C30C6DD46E886AB8476094B084F2006965C41489900BC4A8074E12D4348620C4CDF710B2B76DF7D46167E4257D465E15A2692E8AC52CC9B374F999B9B1B929393B173E74E1C3C78100303033876EC18CE9E3D8B9B376F627474949FF7D3DBC3870F71F4E85164656581D0449102B497103FD054A829F05B074870FFD3DAD2D263F6CC191DB6FC63E257ACC2FAC6D3A83DCCA297DD435AFD2D15E782CBAF20B058005E54164098C16597B06CC31544565D471C01266EBBA15E9FD97017394D4C242CA4551DD8F9691D5874E03A1607472860B1B1B1888888407979395A5A5AD0D6D686A6A6263436362AF59D3E7D1A376EDCC09D3B7770F7EE5D7514BB7FFF3E9E3C79A2C00A70512DDD592999402305E2EF0C20DBA7243B5B7BACC85B8D8EF3674071A0F516DBAEAEDBC86FBC86723E58D97053296ED1BA0B585C448045A2C24B082ABD8450828D601C8CDD3C88C4DA21A4D6310EAA447217B97BEFAB5A705D9BAE165C517D10E1E1114A69AB56AD427474348A8B8BB17DFB76D4D4D42817ADADAD457D7DBD02D9D5D58513274EE0D2A54BB87AF52AAE5CB9A2EE9F3F7F1E172F5E54CFDDBA754B81CECFCF5721402012E03A71658981DFBA022D4D0DD73BFB45A3A8FDF1F8C06D8C9D1DC3781701EE60665CD7F90069DBAEA060D71594ECBF81A8AAABF029388F0504292A0C2CB9889052BA31151A55CD385833A44A99896E9CC76CBCB6E521D237F628689F7CF2898A710B162C502E2800E5716969294A4A4AD47D8121B66EDD3A6CDAB4090D0D0D4A91870F1FC6C993271530390ADCE3C78FABC77D7D7D58B3660D9C9D9D951A09B0DCDEDEFEDB0768656698EFE8170FBFA221446EBC82EA9EBB63BDD7C6C69A2F61BC8A254761D73812D96124549E41097BAED50D8358B4FE22E613640095184C80A18C83918C83B15BA8C2ADE2C63791B9EB8E4E85AC07576C3F8FD4B40CE57A5BB66C81939313222323919797A7A0CA71C58A15CA15FDFCFC545C2400D00DD56BFDFDFDD5BFE5E6E62A85767676AAE472E8D021F4F4F4A82423AEBC67CF1E95641C1D1D4585A2C8EC6F5D81D604E844808B4A6F6021951540D7CCAA1F1EAB3BF27074CFA9F1271B0F026BDA81E50D0F55C791597306A5FB18EF6AAE62C1DAF3CAA5253E8A1B4B3289532A1C46BA8A8577542C0C8B49C6BD7BF7548C1328AEAEAE48494941464606D2D2D2141C777777181818E09D77DE518921353555B9B124943367CE28B795C4B26FDF3E056AEFDEBDE8E8E850EF29195A4C9EDFB06103424343D57B508102D1F959109F3B0BB3299F626E613DC5C2DC7C8A8599E914793CD1AC4D0DF39D17246049F9306BBB4B08615290DA8E7DED7849EBDD27F5471E8F6EEE1F1F5B4F886B0E30A9D4DD465CE579E4D65DC0AA9DD7551259CA9F5BC67226A24A170B13B60E2385B15012CA82D842E566E7CE9D8387870758B721282808898989888F8F47707030983DF1F6DB6FE3F5D75F475252924A1C5F759318286E2D20059CB8B9C4D68D1B372A557B7B7BAB9345353EA0FD7832C4C91CBE08A882F56500AD08701E010656DC6456BD8CF0CAABEC2CA4AE1B6642B88935FBEE8D6FED7FF8B8E1D8E8684DDFD8F8C66ED66F5D63843784B4EA7374CFCB48A21A9795D336EA4A1AC9C871AC0BA3CA8FA1B0B010636363CA6559AF29A589422481083CF9906FBCF1065E7EF965F5E1BFCE4DCA1951A1D48C5BB76E55565656A67EA7BCBFB8B2840086839A6F1D60283B0C5153B8A888B12C791BDD90355D166B3AC9A49B0F3E1ADB7F7274B4E5D4E893C68127D8CB766CD7914758D37015C90499B8E50A93CC7584126244253B0BB6756109592AD80B18519EC093223830305041F4F4F454DDC54F7FFA538484843C93DDD0D01076ECD8A1DC796464E473AF191C1C54002B2B2BD5EF914424002516CAFBBBB8B8A898FAEEBBEFFE6C22C46F54812E8B12B06C93F4B6FAA298E5887415CB9908723896CA27C0F5ED8F380C1D1B6F3A3DFEA4F7E2D868FF85D1F17EF6AFC7AEB18F3D7E1FB93B2F23AEEA22926AAFA38CA54F5DFB7995652573FAF8F8A8EC28C940B2EFD2A54BB178F162585B5BE395575E51AE2B1975F2EDD4A95358B97225C2C2C2949B2F5AB44815D6936FFBF7EF57E08A8A8A54E62E282850F1555E2FF1560A75FE7C2501FEA506F11B05E8BA28514D552486C5D07DA5AF4D954C2A49406AB9030FD450B44C26CA9CE9ED38398EAE0B4F70FCDA139C191AC305963D176E8EE3C0F1BBA8EB1E4279E365782D2B5419539284C093EC2A1F48C089C963A9D97EFEF39FAB603FF926195B9424B172D9B2650AA0801638936F52C268A58FFC7B7676B6FA3989B51277C5087288F0FEE95B0318557B4FC5AF4F4B91DBBA8E820065AE2700CB7BD98EE987A2325139C0E9C9D1EBE3B84C80E786818ED3A308C9EB874170273C16842B5588FAE6CF9FAFE089F2C4C4854589526ABCF9E69B2A994CBE49AB26712C3C3C5C25041930086C79EE59002571AC5EBD1A393939484848503157C284FCAC97979772670E27E611E0F705E237AA40B7C58988DD769FEAD3CA90CFF7B432D72BEB197DDACFCA505420CA40F4C8106777479E30FEDDC18CA5FB6112D6A5DC4E3EACC013C5050404A8A421AA1093C7A2425196B8B6B466DA4DEE575454A8F7901320BDEE4B2FBDA460B7B6B67E0EA0B48152230A44298FA43D14F0A25CF91D12770524434601D9FDC3370AD0D2C420DF7D491212B63FE040404A10FD54459F4074A3F911D58E95763DC646B5AEA19BEBC9586ABB289153E4A2B6C7F02FB903E39003B08AEC5190162E5CA84C8326CA1393C702534C40CA6BA4033972E488AAF5A49593DA503EF8ECD9B3558616939030F9363ECE1119DB408127714FE0494212787294932326279259B98DF05432F9C61428003D0830A97E84F0385161F64D63F9B27CE71D8EE6B5A9CA080A09B04456D6BA656D83AB6A6C9AB75285A24471E532AEBC2D2EBF03D3B0165847F73E8D77E2B2F241C4C4A5E428CA1213371395CA5021262646B9B2C4AEB8B8380595333FBCFAEAAB5F084F604A8DB976ED5A95B0E4FDE4FDE5C4C889D24E8EBC97289155C020D9BD447BE11B05E8B93409C9BB1E297829DB6F228DEA930C2CAD984E81D2CFEAE32013C946992E13A2AC6F6CA512F773285A4A804BCAEFC22CBC057362FBD41FBC64C992CF0013B7128588BA049880136812B3A48016F793A328546AC6D75E7B4D258E6DDBB63DB3C491625A7A686903E5BD34556B2A97D021F0E424CA51E2A01EE0FFFE46017A0524217DF7A3A7DD4306D5A7F5B20270B57E2050C452461688CA391CAD648B574D57DEC4F5DDA6333A80011BEEC222A215B6093A80F2410498064DD426F04461024DD426632D69DBD2D3D3950BCABF49DDF6D65B6FA91247DCF3593799CA48925ABE7CB93A19A26E71DB89EA9313A88510B92F71500FF05FBE2980FFCDC2C4A0DD2B2819994D8F95F234783214CD6ED22950E67AF92C65240E16753C563B0C2A042207A49554E21E8EE64B3B9F20A8E21EE35F3BEC13FB55DC910FA3A94DC0682E2A4AD37A618126EEA799BC5ED42749437EE6593729CEA5C4911249E089EB6A274A4283C0D41296A850736DC9C67A803FFB6D017ECFD274B69995C9F4767353637807A5206BDFA8725B897D52BE88FBAED4BBF0EA7D0F542291B194522163A140DCD03B8E0D7DEC48389E2F6D1F43F0C67B8C7F1D704C3AA4008A2B0A044D699ADA049A064E0A65AD0491A3A848B2AE28F0C00136DF136ED2124AA2919F91F712156BF15353B780D4208A0788FB8A4AE5C4D08547F5005FFA2D001ABD6365326313B7988DCE98138899568BE04305AE6C7E82CCDD77D4383E9BEBBA324511937194B8B000CC671C946452448025CCC852D69470C1BC8E71B0AC630C2155F7611DDB81792947144009E8024FE29A961C448593D5282EAC4D66C4E53EFEF863B578245398893719A04A9D27AF178062A264796F0129262045717222049EA851FA6301C88EE4C46F08D046A6313FE1E020CBD274D65D032B1FBCED5486973CBA30CD66197C839391D73AAA96235736DE478E2C0AD17573F7C9FAEE03E5C2D20FAF61412D237AA9098B39A6175BDF398AAD47C714C0D0EA07981BD70997D4A32A068A02E5C3886909447BAC655F0DB0801030A21A59309279A08CC026DEA4E3901E5792861C05BAC44EF95951A3A648796F51A100143797898D80E4E0A2F6370068F4F76666E6C12C57CE9A5838E03D875578C5BD052F7A74ABE3749B10F885A6A0800064042F8A5346D5C951E0AD16780A20D7380422B76B483C94FEB89056739889A5731C6104681BDF09B7F463F05F14A03E8056BEC8071288025053A0A620012140C444AD12B7A48096E9B57613F7959195B8B9B46A620252DC53206AAA14881217C595A58CD9BD7B37BABBB979891EC1D6314A0FF0C5E7766173738B5366EC39A759F8E165B7FDF885671FC1B5D20E289B260097A570F23C4657D5C15247755FB7A6B1465320EFE7D395458552D6C8BE1781B9B99F7D327F3E7CF308EC12BAE1B1FC187CC356A90FA0D57D024FDC48DC4C542726EA1000024280887B4A32910F2F015F604B1C94B64E06A73228909E575A3699626B203535CA0991132027481427BF4FDC5ED65C64A8F0939FFCE4233DC0FFF7DC009DE6B923267535641FCB749B20BCEA58835FB877E365F7B6A700FDA9C0F52C90A5E7956C2B4771D735CD0F95EA641AA340129EE6CACA9D6979FB4750D93342058E7120F19019B80B9E59C7303F65B702281F64223C01281F521423F00498240569C5048A56C648EF2B7150D428AF933826DD8A645F299C35909A2205A2285120CA7B68EA1305CB09E240A35F735F1EFFF1B901BAB8BA8F351E1946533F4755F119B075F0A0EA42F1CABC7ABAB1C4C0602C0C4B4529B3E9BAD64734BA276D6DAB4E69F9071E3E05AB83A857A9FE7E0E636445D70836748F23AAE61133700F7C560EC02BFB04FC16EBDA295182C4252D236B49433E98A84EC00910394ADC14783264957E78E24DD63EA4F613256A632B51E36488A25C898B327095B565196430AE064D00F8E3E70638CFC57DACA6FD12F67352C2111DEADB4E63596402E6D8BBE3E33951F8D87A191685A7A28245711113824C5DC424BEAD63B22814900251C114058EE8DC9C26F17165D37D94771020179FA26B1FC129B907BE3903704A3B0E9BC04D0A889630243EC90713A588AA049E284FE089B204A02411C9C2324D9E7C93B561E987458DDA0A9EA85156E304A29C103939120325EEC94D40B385BBFBC20B2FBC3101E05F7E6D800DC71E60E7E13B683AF9109DE7D980371D42407024AC6DDD60EDC1ED14DC0054CA3856DACD1285658A14CC3A9002918A9CA0465D8C64826192C926C00D5D5421FFDE1802744EE9855FCE0998C71DC1B46547E01718FF99D8272E26EE26F14B3EB4064F1B864A6CE45E1715F427DF242B6BEB1E1397416506282742DE53E00960AD4F960EC4D4C478ECFD777ED5FFEACB2F06FDF0872FFCFBD71A26680ADC7D7C4401DC4153204F8CA0E31C07A43BBBB12860196C5D166061FA4E5DA7C17E57EA3CB162425CD7A1776B4D850428F0244BCB5EC0F28E0790B592D8AD8FE092D607AFACE33088388219E147D99934A99242EA3F81278943E29E7C58519C28485B17961D0A02435E2F4A94766DE2EDF2E5CB6ADD4316E065842F2B701A7851A1285B8E32E617B54A6CF50F4E846D40C123434BB7471F7DF8FED8ACE91FB5507D16B41F4C54217FCF33B7C14C990C50E029908774C77D271FA1FDCC28CAB61E80EF8200D8BB072238EF00CAD8AAC9B65CD951C04577E5CE121BF35B74713097B14FCA9E150458D67E9F890488DBF6086E197D74DFA3984EF519441E8571DC71CC0B59A79421EEA5A94FDC57E0898B893B0A8CAAAA2AB590AE2D0CC9160F01216B21B252270B48325890FEB8BABA5A4194D70A443919120F65AD58B67FC87B2D0D0C8677521DBCD2F7C133A571CC3E70ED889D47F0135E19F0C46CF68C063613861AC4AF0DF029483DD07D74EDB6330455B9135EF317C1C13B1CB1A5877410A9C4F5A244295BA8421D402A500FB05400F60209F53A8096710418761486D1C760123700B38493F00EC95285AE00D41287A84D3EBC284F6088B24461B248B46BD72E55C3C992A580944525B92F0B4CDA56108128E0B5A42225CF850B1714E4909050F82454C333B94167AC0A424ACE2162E3B5D105E9BBEFDA7B043D343536BA673A7BD60E42FCE837063811E4AE2377996C1EA3EDEC63E41456C2C3CB170B5923666F3BAD3608AD6362510055F9A2736169FD4ADA0890593C69E723CC4BEFC3ECC82398197E0C4631C7611A3F00F3C453308B3D0CDF652B941B8B6B89AB4D549F284F1284064F5B3C978574CD04A214D3025120C92E070128260B4B522FCA7331B171DC7A5CF9293C02F4CF6AE7CE0B59B21D466CED03CC4FAC79626BE734EAECE82057077024F2355D580337F9B8E3D06D8EE7EFE2C09927D83F700789CBF3D4CE79BF656CA1EACEB3BC79C8DDF704A85CF89E0258DC760F550498C299A25D722F66861DC6ACA8E3308E1D20C013B0483E0DEBB44F6016D589F961B9AA0513971380E282A23E519340912421CA132062A22A19D96BBB0F448DF21A012D8A15600258FE5D124B5C42327C13377F069E57CA1EEEAAE0B26BF54D2C5DD90A27AF6078723367E9D6066CDCDD0E534303FACF370470628C1445B670B7D19E83571097920557F7F95810CD7D2CF597551259451796C94D51AB0E60DAEEC7B08EEB66FC3B4CF71D50EE6B9E781296299FC026FD0CEC32CEC222BA15AEE1C5484ECD50314BDC57539F8CF235B71528B2FE21714F4C200A4C795E5E23AF1537973E57C0CB7B452471474272FD67E031F6218CEBDD2185C721AB8FAE1E3EC8CC5D8703A7B8DEDDF2186E29FBE5B23346F0AF05902AD3C7BEAF3A8A22771FBB8FB673E3D8D9750EE1314970F1E01265FC7A2CAFBBC23D3377B1BEE59E8A81E904681EC3E29C008D94FA066041F7B5A2FAE610A07DE639CCCB390FEB8456D844D421287EB5CAC6120705A24011D715E5093CD94424F59C986CE3D09428AEAC4194049492B1128B933FEBB29EC9BBE19DDE8CA0C2017884E6619EDB7C44C727A1918BD9C56D23F0C8BD00F3F42B9813D3040B6383AF0B509781BF8ED513640341B610646DF30082C362E0EAB550FDE1AB775FD701DCF31816B154205DD898EA13F735D7BBEF5CAACF218B00F987BBAFB904BBD45E584735C2316E2742538AB122678DDAEA2620254948ACD354A8294F9E13B5498615E8A9D98508489D0CAE015EA97BE19371003EBC92C0C9CD8FD93814B5FBFBD9313D8477DE391832369B279D84FDAAEB7088DFFBED0314158AD5F5DFC6B63EDE3FF200CD67C6B1714717FFB870B8F92C4174DE4E64EC1E811501CE083FF234FB2AF74D3B03DBE567E198751EAE791709900BEF6BAFC18D05B75DDC3E3826EC6501BE1F7E69F5085F5185D4DC32E4E6AF5731524089AD2D5C87DCC23244C626C1672133EC64574D2238BAAB37C1B98697C2C17D31E6FB2E40D1A63AD4F43D847FFE794C0D3D84194C7016C9273137E31338E60EF277EFFFDD00AC67DD5877F00EB6D16A7A6E617337B76F1C1E6167338A759B1AB16071105CE707C336642366B08836A1FAA47CB148D5C7BFE5E7E0B45207D08300BD0BAFC3977B12FDD75F8547D6410E619BE19A7E00EECBDBE09DD506DF95ED6C093BB020B70B8BF37B1059DA8BD82AAAD66521ACECBD08AB016E890DF020384F2609EF8C66B8C7D5C0DE33046E1EDEC85EBD16DB7A6EF25A96CBF828B00FFFB1B807B3220FF36F1A8055CA299ED03370CA7B0E802E6E9E63757DC3D833F0882EFBFCB16F6232A9EFBF83EDA2BE83B751DB7B1B5B7A6EA39ADB58AB3A6F6263FB2D9E61763954655E691D7CFD17C3D69D5BD6C277AAF2C58A0027C63FD7BC4BF02CB8029FC241F8AD1FC2E2D26104726353E0C61BF05B731C5E2BBBE19DDDAECC6F5507C28B7B90B1B91749ACD47D934A616466031B3B672415352320BB11F333F6D39AE1BC3009F35C3D119B948A9AB6F38861C9F2D1D21EFCD2BB1DEF2FEDC58CB0432CAB8EF26F3A418F380DBBCC3398B77A084E893A05B2389FF22C9B62CFED6339A53B98081EA0E9F418761D653FF99C20A55BD921F0E8BEE2BAB5341DBCDBD8C46B7EAB3A6EA2A2ED26F7510FA3B4858FBB47B0FDE03D64AFDDC432C10FF6DE91B08DD9FF19806EAB2FC1A3805B8509D09F0A5C5C7603010418527D17CBB6DC4758ED7D2C934DEBD5E7B985EE14566C3D84C5E955B0745E88691F4F858D833BC2B32B51BAFF1C7FFF7504A796C1C9C51BC1A1E1A86EEAE776BB214C0FEEC3CF9C9BF1BA4F3BDE5BDC8D8F430E32AC485C3E060BC6BE39E99FC061C559B8AC1EFC6A8066C68605BC44EAAEEFA240146C3E8086E30479F2B1AAF5BE2C89083CA53C715B82DB4AE569AE2BF02A3B6EF13A0F817793F08651DC3C8C75FB8651B07718E5ED0FB085AF49CD2985BB973F1CFD9318E3BA99812FC095003D09D0773D0116DFD029B09217EF70775848F53D24ED1A4109FB6AD983B3BCE6383C025260696E056FFF40A495367235F03E36713D7A79A55C02C665CBC54B51B49997D67223BC79F461BCE2D6CCC1B10EDE3B0B3AF10155383584FB7518FB4C138E3F755FC7EC73705973E3AB01AA0D9626B3DF3636985E616E3C7B6C21AFCB5DBFAD13BB071E62CF0971EBC9D9589730EAE9B2BA98A7535E4DAF2EEE297804A753DEA7F0D6EF1F46E1DE1B2868BA81BCDD3790DB308CF59C6857B60E213E239FF517F73E2FC9841B67859F0158328C006EEE94CD4D39CDE328E2F5C5699BE9CAA12B606169030F9F05482FDFCB1D1177504D7005BBCF73C213032F1F5FE4ACAB4461D310EC928EE3971E2D78954B14AF79B6E2975E2D78637E3BFE6351B78A7FD397F56376F45198250E28F7B5CF3CCB787C0EAEF9CF09506B980972BAF1ACE9BBF91801E10928DB7588B19120695234EBA63584A7CFB8DB094F53DE966E5DDCAB24C04F957713C507084AC1A3FA086FCD9E21C2BB819C5D43EC5CAEB3E826542E4E95F232CC486EB874F5F4E7F57685F02DB8A836B6076EB8C55D11A358D502246E3E0BCFD02C585ACD818BBB3712F3B772C17E9857B88FA3ACF32E8212F3E0EEE98384F41C14730B9D47D62778737E9B82F7AE5F3BDEF0E15205EFBFE6D58A377D3B94FBFE3AA84F75464631E2BE27E8BE0448F775663DEA52F03501EA417E9F204D09B2C5CAC20CA1D169A8683CA683C83829CA530943DCB68F098219F7293CC63C491A3AE5111EDD5683974F78ABF788FA8614BC6C6E01CEAC1F44E6F641A46EBD8E646EDA5CC5C9CD5A5E61BD2C3A95D7C52DC182E46A5E9C7307511B4EC3332C0FD673ECE1ECE28ED8DCCD2CCE075175640C1BFB1F2326671343811F422362B1AEFE1816AE39AB03E6DD82F71675E0FD459D84D7C6658A037895007FC5FB6FFBF1F9253D2AFECDA2FB9A702A6499C2F26539CB17A94757319CFC8600B59D497F656664E86434736A9F8D9525221257A272DF69EC3AFE08F54746084F8B795AC2B8457837791D2FE151751ABCB5745B1D3C2A8FB66AD720B2760C62C58E2164D40DF23A93EB48AD1DE43E6A5E0E567D0D099B87B0922057F392F525C151AA1877669730CFC5035139D58CA15750D1CFCB630F8D217D432BE3DC522C58B404AB2BF722BCEC0A3E249437BC5BF121C14D0DA48B2EED22B056C63DDD2299A8F10D897FFE9DF890D9775A683F0C39563363576495C6F285EEEBC8724A01FCBA2E3C798CAD7FFCD74C34FE0479DCCED60EB19985D8D87C1E75471F31F6DDD3B92D1386284FE09531619488F2682AE635D26D1B8794F25651792B096E0595B75CC1D3ABAFE61ADDF33A1208308EA6A622BC4031BB8113ED8A0EF82F0E66EDE683C82CEE71E6747B15AF73F5679CF399EF878C351B91B4F91A66B1087E8BEE3A35A0935996C57A480FA611E0AF085383270075EEDB8E771776E143C63F55BE30FEA9F225F514CB179DFB3E0598D4FCE565CC1740FBDCFE38BEEEEF4C671B84CE9EF1EBB38E8ECE48C8D9808A96ABA8A10B5532FE6C689352450F4F9F30447912F3F21A34B7A5F2041EDD366D2BE171BF7432E1256DB9A6D417B7895B8879B553342D8A573749931F55C59FDD7D1F6985BB30DF7F29938DAF2A81E2527390B9E502AC587ABCE3DB86E9015D305CD643EBA531AE05F72AE5BDE4DAFC748956DCF7756FBA2FD5A7CA9720BA6FC461E5BE52BECC95F245EFBE2EAC475DD7DD67166E86E35CAB6BAC01FFE69975E0D700A841FD6713C319C9C633A70E3AB3304D66202F6FBD81CA6EEE0F6CB98D225EF255B88F6E4BE549CCCB15E511A0C43C4D79E9745B019842B74D14785490282F9600055E342FA588A20A458911BCCA69192FD489DDCC2D753517119FC9A5CBEA6678E77C827718E7660476C234A21726E1BD300AEF8349C441CC0E3BC8E4D18E9758AE68EBDB727CD55317FFA47C91F8A72B5F0EC3947DB955B2741F8C7F745F97FC41DA7538C5EF860DEBCB790E7632E53E4A33A67D6F22C86729ED799FFB054B9F552686D36FB9792D40D2DA5D286ABEC9E12957E9F6DE449ECAB67AE5E9DD56629EC0534943DC760BDD560F4F9427164578024E67BCD27302C850C6B87CAE33C7D5DCC7F4A52DB08CECE5F8EB20E7887D308F3AA8CC2CEA904A101395A7417C8DE58B8055EE1BD0CBF2E590AE7C4938016B71DFEC8B7066FBE69CD60D5B9F580E520DE160638AF8B858B54C407B422BA5FDB306F179617DC1EB4C58431ABD69346B6A1955F9C0637E0012D7EF635972971F94B18AE54A36134626C12DDF7E5DC14B11B7A589F21218F7E236E9C0C508385E01F529BC892075302368B9DC5217C58EC43CB2933BBDFAB859A99F038A43B089A3C51FC2074BBA9E094FC53FC6C3B70857D57F411CEC861F82B1942FC96C27575C85FDF201D82DC985958525AC4D66202488453807157A78138F837C2E80F6C3DF12A0765998C95FB0F4F9D864D6D42D4C388FBD164620B1B81D397B6EF352D8BBAA5449A7EA74318FF0A83E4D79B10418CDCB273497FD52809C1AAFDC7D9B23F77BB0E0F47A4E5C1FE6261CA61D811D777C4D0FEEF99CDB6AEA53F14FDC97F1EF03E5BEBAF2C53489F3474E84E606577009D71596C633B0C0D707AB39117F06B889CF9DE3BF3B7C43009F5E5FF717E6C686062633A77221C6083E4BE3115FC21D53FCBA93745E4397A4775B953068310ADE64B79DACBC4F1F8733A9ACE0B77EC4B31FB68EE9865DE221D8271DE52ADF319846F7AB78276DDAC4B8F7D47D19FF54F65DA4CBBE53C3066010731AE641B5B0765E027E6906DC9D795D74E672B514F005F06EF3F9629A09EDC7E2C6DF3440EDFDFE2B4172A7DCD4366B4B2BCC0F59CE15BCA348A9BFC78BAE87F50943E7BAD1CCB65FACBACFC21480590498B08DDBE4E27BE19C7C18CEDCE92500DF6642999C34268294F2E52DBEE6DD257DF83094F082F6C1C23D1A72A21DE79833CEC5A84BC19E016E8CCF35D116D3FED7E44CFC6D01D4DEF7057323033753C3E9876CE6D8C137220F51A527A9A03BBCE644AE3FFE62B53DEBDFC2E9C2993B6F21A9EE3ED5D7C745FA23705F31801974DD1727942B9315F8AAC701353C7873E12116DAAD30F2C8E4EE061BCC3137446848104A38E97E06B8CB7C2E93F61AEDAF9E55C27C9B0A9C7C627EC48599256686D3CFCEB175826F4C3122CACE21660BDBB4AAC1E706290A5CCE7DDA29F50FE0987C109E2B8EC33EF9886ACFBEC875658FE32B5E5D7883BDEF54F7B530B799072B93998C735E6AE9F419E01AF99C1BEDBF5B9A994C119352EFF70D5003FAF7E6C606315CF5BF22DF6EE4C7AF850A2FBF8068D6789195D7BF12A402C86B8C53768CC029A55F6D529AF925EA7BD9BD1D2F7B72E6E75A01A3397EB0323580878BA38A73B2DC3901DE55DE2FA0BD216A13601ABC3F34807A9046FFD7DC68660641DEB275F2827FD26644565CE6A2F62DD68113417E5A078A4B0BC04C5EE498B6EB015C330EC38D1B35A5307E49DFE76AAE2B7B1B5FF6E8C49B2E353098B314FC4A2A38D95A2129315E2D384D00D7C7FB7EB47FB010A54D50DC1F38C0A759FB45B3D9330B68F71DDC1660515A1D55285F15F56C45EA147893DFFA3102CF4CF6AF2C9C5F74D50D095406E6CEDA9708EE75B75D98661707EEFB86ADA511C2424350C645753DB8FB3C56D10C693F50E0E42AFD3F52809A225FA71A2BCC8D663D74F40CC092158D4A89B2CD626271AD14B8E326372C3D840701BEBFA05D9F3C5A14B857DDF7E143C71C985A3AC0DA7C16962C5AC07D856B357067092C86F66FB4EF4D84F6270050A74829C64D0DA6D6314E629E5F040273DB3995B941903715C8F00D97950BAFDCFB100EA987385D3EC0EDC81D74D70EBC3BAF1C46D63EEC2066C2DBDD85FB6BB2059C94207B688EB4BFD154F6B4FFD7ABEE4F06A0FE83FD805F4ECBAFAB99D6C46FF185DBE22404E7F7E9120D273399CCC2B9CD8FD8821DC6CFDD382875DD8A59B6218C734670759A8B646EC0649C93A4904F7B93F67D5D6CE3176A4C0436C16DFFD4007E5A431A1B3A991AFCBAD38AC5B8476026820A0EF33A95C728E0BA8851581B3E9C93084BF6AD8E3626880C5F86D2929223FAA4F07F2CCD4DA7589A9B4CE1D7E1E993C39F1F403D48931F3136FA991A7C3C60653D174B138A119653C77ACE1936A633B07491FF93DC55ABA45330A2FD67953D15BCEF004E2EC6FFD674F6CC105B2BB39B73ADCCE0E664778FEE5ACDAD6F3F97A4A080E9CB90EF004EFAF21F2DE81B1BCEFA2F8971D169916121DDD959995B08EEAF059AB8E9EF0DE017ED7BFBEEF9E7FB0F0ABEF20B18BF03F9E520FF3F4D674B8F11185EEF0000000049454E44AE42608289504E470D0A1A0A0000000D49484452000000500000005008060000008E11F2AD000000017352474200AECE1CE90000000467414D410000B18F0BFC6105000000206348524D00007A26000080840000FA00000080E8000075300000EA6000003A98000017709CBA513C00002BE249444154785EED7C7950957996A5D33DD331D3FF4C4CD74C444F4747CCF416351D135D95595DB9EFA9E9CAFED8171114544441111004D965DF37515651F67D4745360564DFC10D6513901D044579EFCCF97D0F34CD36B3AB32ABA6AB3A33237EF15E3E041EE73BF7DE73EEBDDFFB0F00B6FCF4DF0F404000F8D3F9FE18FC04DE0F24D04F00FE04E0F70FBFDF45EAFA8981BF4B061AE8E96DD1D7D1D9A2A3A9B945474B738BAE9686F2686B6CD1D7D5E5D1DEA2AF2DE3D1DAA227E3D735D5A4473D6D3E17FF2F53FE5BF15C5B537D8B01BF47FC4C037DBD2D86FAFAFCB7FC5E5D9D8D9FC5DF253DD7D962A0C39FCBDF6BA0C3AFF3483F93AF89EF175FDF64CAEAEA2A06FAFB201E375FD3E3F7E9EBE9F277F23DF17D89E7D27BE3FB977EA6F8193AE2EB1ACAAF8BDFC5D7A4EFE311BF47FC0EF128DEB7F46FF8F5DF949DAFFDC33F5400F578D1743454DEE363A6F9C1A3CBFA7A7A95DA1AAA1FEB6A11B49F00FC2E068A68507B5747533D7EFFA1E3CBBEC955B8DCBA8CF09C061C3C726259A6A612A9ADA9F1F704F42706BE1EC21A82716FE968A8C6985BDACC799EAF4462E322B27A81EC6EA0F83E90DFBB84C0C402989AEE7FA0A9BAC74EA6A1F6177A2205FCB8439821A9A5F68FBAEA2AA1A6FBAD269D42F21155358F9476E052DB3AD25AD791D3A540411F5041106B2680DCB611B8F8474157A67D53536597969EAEF69FEA311FFEF872A04CE31FF534547C8CF7598EDAFA66C0AF680A313780F3F5CF90787315975A9E23AB538E7C8257721BA8BC0B5C1D02EA0862FD63E0724D0F6C1DDDD7646AAA9932D5DD1F8AA2F2A32822AC8EFF4B577D8F8791B1D9B0955B125CD286E057F10CC1579E20E2EA12CED53E4152E333E6BE17C826FB0AFB81F23B04EF01503D4C168A3306DC2088571F3E4764D675EC3F683DA7BE7B57288BCCDF1A4ACAE2DF61152643FEA78EC69ED386467B872C9DCFE1647C3F5C7317E1913F0FEF82690496CD22E21A01AC5BF99700927DD73600AC2378B5A3CAFFBFC253C9E7999D8B08B9900673D3BDFDDA9A9A7F2D6489AE4CFDDF838CD1A6BED4F82B2DB53D8E468626B78FBA9F87F3C5BB70CE9AC7A9CC6938A74FE04CF6D4068073082703636B0960C3335C6A5586B0C87F650C6111BE550FC9C211E03A4F25C12B23B0357CAD7706F2CABEE7B038EEBFA4A5BAFB1F990F7F2153DBE5CFC2F495D099FABA7A7F5C3A508868035D9D9F69A8EC3E666468D4E716780151650FE15FB946D6CDC3F1D2181C2E8DC239ED9104A057FE34024AE7102600AC7982849B4F9903D790D921471E2B71F1208B08C3B892204A87E0DD1C27708F15F2DABE25F9E9A407F2778EB661AB8EC3929EFA575916874F4CB84564E1908DE332F363942EA5CF1F859016AADF408F0E44477BDB5E93BDDD51F171A87F308C4AE6ADF4E655C45E9B836BD604EC52C67032750CA7D2C6E09235098FBC69F895CC22A47201D1D79771A17E1529B79807DB947950B050E4C212825847F6F53E86FCC6C0F2BA7BCA90FC53DB56FCD228175FE8B8C0D4C2066E91D948BAB9803CB236B37D19BE7139D8B7EFC08896EA9E134C23FF4302F20FD28968089BA7450075B668ABEF743DE4148952FE11F7D6A0689E0752DB56107DE531CE554EC027771CC7058817C7703A7D12EE398FE15B3883E0F23944320FC6D5AE22A16115A9CD6B2C26EBC8EC62BE23F33A26A0A81F5C91FBA48DC8BFB46F57BC6D928B2F75CFC0C4DC1AAEA1A988AB7E8C34EAC6F44E208BC01789D0678ECC6D27D30363A1AFABDFAAA9B25B97F6EDCFFEA0AC1C6DD67B32B53D0E3A1A6ABFD4D3D6DEA2A7B1F3D83E87181C4D5D4060F1B4BCB4F7A9FCEA7D28126FAD2390A11A5D368ED0E2719C26031D2E8DC32573520A63FFD259845E594474D51386F20A2EDC7886DCAE75343C54C86F10B8A09C31F96EE72EFCF3BE426C35F02270B670F04DE4CF1A417C3390D8F41C17C9DCCCF675E4F600451B15FC3A0B4F1DAB767A7D37EC4E7BBDA0F7CFA1ABF9F8DFD00B0BE1AAB145A6BEFB9FB45477855A1E3939E9129C04730BEB112D95DD4764BBB77A5838C7CAED521EC2216D02DE850B8A8B3796E4253DEBEBD9ED50C45E5F4574C56344958EC1337B0C4EE98FE0963B85B364E1D9923904952F320FAEA26A704D5EDBFF643DBC605CAEEED68377F697E02B236F189959E3A85B343CB31E22AC1688AA59C339E6CE24B256C89FAC4E65D88B0810CCBDB6517C1A6608E4E4739C2FACA535B49B93A9ED0EE5C5FF07BDDFA699C0AA28755E74D8ADF87ECD040D86E89E9F3339FB9B9A1F1A730DCF64CE9941019DC2E5C671B8FAC7817EF6B1C96157B95364056C020BE096711F21579F519EACC9CB7A9EADD7DC56B06A2A14B9CDCC77D72619D26370260B5DB21F4B619CD7F6445ED5BD288F297EA4D0F3E9C7FB9695D866EC0B7DD323B03A150AA7E47E78953C836FD90A02287FC2AF2E224EC89F86A748A383C9611817907DA24A0B0045E5AE270B8586949E13C8E2813978C566C164EFFEDBECE658FFC6DD981F02A08EDAEE9F6BABEDF432DE7BE0A1534806E26AA691C12A99C9379CCDAB5E728F6F986F30B5BA0F762E3EB03C6C037387081CF6BE0CD7F83AC45C9F471AF353F98042D13CAC581F9C82BC677C1D95D471B157A6905433272F6E9E9347178D294CFC07F1F191EBD86A120403536B1C39158C93E7DAE09CBD08979C39B8651378A11FCBE725FDF84D0045D111000A015EC3F724B4A338420A096753C20BCEEB8EAAEE111C3DE6F0E4F704202B165B4B7A9A7BFEB78EDA4E576313B37B277C531154328EC41620A5452125FA8C76CA0D864CD100E506DF74ED24DFD8C853446796C2CAD619A647DC70E8CC053884E6202CBF9B80AFA1E201144DA3903F98857C6E158AEE9167EBA1790FE4A681B7F1F9B17A7CA61F04BDBDD638E11A08F7940EB817AEC089FAD18112C8396D9CF247003823E554E160E2847E6C24032507A3646029ABB660601541BC4EE084962CE7211B157DD48E8D7757D6BDA902742CFD7E1F00527CCAD4FF5A476D9793A1A1499F95EB392914C3ABE588A97DC137BC9173DA9E23BB87964B085E61B944CEE11BAE65C834B0FA960DB0C2465F8485953D0E9EF485BD5F0A7C12CA9052F700150F15A81F2778935004972C60977D0D765B5E8091B90D3C02FC905CDEC1907C8EA0AB6B943C13B04F1D910074A27E74E51FEEB95178C2AE2EB0E82C23E186D2434BFA91EF495C50610305134B191DC2C50CCE43DE36B4220FC97E28DFE1D0827F306DC057066E4BBF4306323F6AEEF92B5DF55D3606FAFA7D968E917048E88357F12AFC9873823743A67E05C94DCF90C68A97232A9E78B31B966B336444BE111D941A3232ADFE2EEC3DC3B19F403AFB5D807B442642D2AB503AC86241D0EDD296A06E198283878FA1B6A31BD4C9A02A41F28D05E6C929F8174E49D2C73679044E04D1357382FA9117A798F2A7629E957B9961BCAA7C4FE2A2D2C5885C98C314232E68DF1CE49D23ABF2E88261B9AA530BFEC9BC1EBF38D080B70FB5628F89C7EF064056A49FC954761E624BBEDDD23E04276299731836AE390BAC928FE153F89815725EA9D598B45F03704332888A2700DCF4AC2207950A06082F4B06649557E3A88D234A3B2671A9B49115B109758F00D78235681FF0C201874844B2B2D6DC7B8696690572FBE4FC7D8B74328F105E3A4EF68D13C451385D66E5A67E147950B89870CA9F1856E278B230B9690D179B9F4B95B86D02F28EE1A7F2B8E251B9CCAD1D6F5B36E09DC30D78CFBA09EF5ADFC2AFADDBA162EAF9C300D45253FBAF1A7B76591A1A18B4DAB884C335B50767F297E85767E078799C9E55BCD929023883A0B28DA4CD9C932CBA26E26A772BBB269B212C12F575563C015E3993B5E8A2744D31A4EFAD527A3C82E1410FE45DBD89A8F814585AD920202E93C03C86FE911098DB87C1266D01A733A69150BB80F23E214B8088AA67082D99A2F4199784B823F5A37306C3386F0A7EC5B364E182E4A523AFAF20852CACBE279737DD5B95C7978DCA0DBD3B15EF1E6EC407479BF0A95D0B3EB26DC67B479BF1FEB156BC7FBC0BAAFBBCBE37803FD3D352373234D0BDE1E2178AC4CA41A434CBE15BBECA9C330987D45165D22680AE4CDA5ED2D59EE71B5D963C6BE28667CDEA5048454478569173CA996F04708285FDAC742D432B08CD1BC38E533DF8B9412154B4F6E1A085251CFD531051D00907CF08981C3C054DDD83B060CAB08FEF8263F200BC8A9625519DDBF614253D7264342B90C85C175BFE080105B48119CAF7E5C15CE85DC86E0EE54C51E72AEA0796150915637293B39D8A8F8E3612B05BD8E6D0CAD3860F6D5B085C335F6BC3472778EC7AA066EEFDFD00A41EF4B6717093D7F7F5E39E827F349992543787F3571FC33B7712B629A338C1738A6123DC8227738E7FC90C3DAB32E75C60CE119E356DC3B30AF59F47260AE6754F03EDC3ACC4858FA0E2D2835F9856E0636D5FE89958C3E16C3C224BEF2383D552FCFBC24105CE9734E3D8096718B380D8FB26E3B0E74538C6D622A47C06F10DEBC8EB7C8EDA3BEB681417E6F63AF2E90FC34B1FD14B3F925CCCC59B4BA8E8A0002F1FC5FEC06E7C61770B9F9F68C6F6536DD8E5DCCEC70E7C7C5CB0AF159FD8B5E1D393EDF8CC9EE7541F34F67F4F00F53454E38FF81682164BD134B626BF3503455AD70B8457CCF22A8F238476CB9EA65F80285A4F22E7F816318C297695CDCF15C9312431E7A434BF90C2983947D1F6F0A922B674021AEE0378DBFC0A3ED63D0B1D232B9C700B4358D11D24B7B2A8302CD3297F7218FEA2005D65DEBC32B486E8AC721C3E7A1C7BADDC607926012782721090DD83547A62E16D6B7971FA2714189EE3E3F81ACA3AE6907963067125233818DC8DAF4E36639B3D0BC3E936EC71ED80AA6B279F773274DBF00919F7B9433BBE2498DBC471EAC2369701685AF87C3F06EA6BAAC6587864E1D8A56578E4CC28326E2DAD5FB9BDBE7EB90D8A908A27082B992053C699B7C625CF7A5AF2AC82857308AD5C2488CBCC394FC842B263482E6F7DF06C3DE9CA94C2D0EF0EDE3D781D1FEB074246E08E3A05E16C7A2FA2EBE4B8D0C83064E8A78A96FD46A7A594A12F5AF6558C801B646E49FF047C6392718015FB809D3F6C7D92E171A192D1318E12566CD191EE654E9DA47ABBD6F3049641EDD8E1700BBB4EB542E34C3B34DC3AA5A3E9DE0535B72E7C41D03EB367BB8BA07D4530B7BB7461A76B3776BAF46287FB5DC82CCF7E4F00B5D4620E79A4E2786C0BC5E9307C4A69E06B96E4C5DD6B2F4A7A15F28B8DEB88AB5A400C2BE059DAADD3196C80B2988890F12A121DE4659474AF291AEEACC82F5E9B54EC0BBA8B0F8FD4E133A370681B1DC121BBB370A6CBF7AB788AD06B6B8814524312BCA2652F2CD72BAD26F4A3283CA282D78BB907814CBF3180539E211290C75C23E0CA1E5F705A2DF27BE651CBCA5DCB6265777186E0DD848E7B07743C3BA1EDD50599671774BCBA21E3D9E6D481CF1C089C338F4B27769EE9C52EB77EEC6174A878DC86AACF03E81CF2FB7E00EA69AAC5D8FAE7C13BA10696A7E3F8C736218C463FB959AE28EE595BBF714FFEA2815D946B7D6BEC64CC20205F18FF090AD8195C6A585654F52CAD5FAC9A5258840FE1135B5638E34868195861FFB133B0A31639C396BD67D10ACE126C11F69BF2E715801BCD52161D497C0BF028008567952A39812CBDFF02613937617FDA03A73C8211915605EFE84C64DF1A969A04272FCD42EBCC2DE87B7741D7A7077A677B61C0A3E7DB831D04EC73C70E6C3F4DC6310FEF74EBC31E8F01A87A0E40DD7B109ABE77A015300CDDC301DF0F40318775082E4032FD8EDDF9767AD6341C0F4867727E804C2A797633146C25ADDF7E0CC510F363EBD02AF26ECDCA731A67D7132AC6E5569143D876B2059FEE8D858681350E9D70837D540D4EA54FE154D61C7B7DA2653F29755982CA98375F9B79AC4BF2E735014EE0845F152C1416AC88A12D80ED5FA6446A618E3BE288EADB93B8DAFE1089A5ADB836A4E0059D87B6C72D18FA76C3C8AF8FA71726817D5073672161C86E77E9C6AE3304CE8D8CF31A80C6D9DBD0628A91F9DF834EE07DE8858E513E05F237FC664B4B6246F1B21BA3A3AE1A732AAC10C58D23F02B18C6D9D225B82636C3C63B111E7125F49533A810A278048ADBF48ED3AB58AFE858905B86320C9CDAF1C9DE78A8C80EC3CED10D7EA937E053344FFDB80C47DA2E47B6EC85E53A43CB25997EF6FA84CC108527915D139103B3BBE49205947220ABEBE6A048D28EFCBD7DB36CA28EAC22AA7014BB9D9BA177C01535ED77D13CF808A957FB289914ACC20BD0F36A85897F2F4C03FAB02FA80F3A3EBD2C129DD8715A80D70F15CF41A8FB1038DFDBD0F6BF2B01A71F3204C3D06118474CC0D0DA7F5DA6AE62A8ADAEFA9FFF3520370014208A6D00D518A75002D8F51CB9F5F791C8CB1E53CDCE71D52CC3FA2A9C835229436ED1473E95F2520DB5CEB1C4296C3F9C01037347787A9F41564D1DF2BB9F209D392D8485C581C2DBEE22F523ABB7139F0BCF2A354BD9B20FBBC27CCA96BD700B17A52604E5492F5928DAF504B198555684256D17FA269E21A162143A740FBFB468C0FFD97B1D0607DD50C30253D1324C9FDC8D327E8F6BF6020CBDDB6146E0F6870E605F703FC3B58BC582E031D7A9305C35CF0E4246D6E904DC835EF00318843E8471D843EC8D1C85D9B929181DF1814C4B53C105A966E2F2C57781F81A809A6A2A31B1A925985861EEB9F30CC5645CC18D21FAD6096475BC60129F405062297C2FE4A388C2AE82B9CA3A691AAA4676B03B138AF6A935B020A29A5E37A19E3DB9AB938828A300A7F83E9634024782280A8F076DA0903FC2478B422258287A7797397913C63F53B4DF09462B7F4E37A549CA957182D22959AEB70FDEC4AF0F37E36D8B7A985AB96364EA313A1E2990D3F994170E70CB5B84B16F3B2C08DEC108B28C79701BC1DB4DF054BD6E33CF09D611B820C1BA07300E1F8669D428CC634671E0DC382C621FC0ECA81B8E3B7A7108E5027D99DACB4DB03701F91A805A043034B118638B0A4CCCAFE1F6D43A6A6E3F4379DB6394343E4479D73C1A46D8D9A8E942EAB55E09C0E3176721DB7B12166EE93853F41CE98D0BB839BA8E623A90A8EA556AC74956ED310AF171493F0ACBE5268D2E598424162E21BAFA8964FCE339BE4C6703B49EACEB18798ECB558F60EAD78DF78FD0A75A35E1C363B7E8591BE9575BF0EB4337A90DDD31343E89B9A70A3C244BCB050359A84C033A6115751B6621032FC356CD5B19B23A0177A14BE00CC9BABDE123308B267071A3B0881B828577218EBA4421EA62190A3880B27239F7DB01C8988F718B2E9240EB189AC7D8DC0B4C2DC9D1332E47F5C0535CA3E1BFD1F708F53DC3B85C7D576A91DBA5CE42DBF4142C5D1371328D85228B1D617643F2DB9FA2808C88BF214798601AF5637021B5236DA093C4C229A97322BC74708598FFAEA2A4F7051AEFAE21AD7A8A22B8079F1DBF858F08DA17F4AB9FD24508CB25CE0736ED789F401A1D76E37B19C3EDF1558CCFAEA186DAD1256F89E1DB09EB983BD0F6E963D1E895729E281622DFE9050FC1286C1826912364DD0819F710167E15B03E1D85C0B85C64B0628594CFC23A751E86C7237E3B0075450E0C2FA224594449F3046EDD7F827B8FD709E23A260964FBA802750CEDD29BFD48B93A28E529FBCB73909939C3CA3D0927C3AFE14464357CD8CB0BBF4E36717459D1FB1C65CC6BD92C12C9D767105A380637DA2D31BE949C4CF11C2E373DE1055AE19B9F8455582FBE3C710B9FD2AF6EA55FDDE1D486CF4EB6E2439B169E56DA2F9E139D9449ACB487DC9053770F354C92D57D4B1C38C9E155B80C8B906E1C0C1F64C1E865E86EE63C328FE009E6994610BCD86198FB56E2B053387C222E21E33A7B9B15734C3513D8173306B30B3330FA3E009E8E2C42F4B519245C7D88DCC609DC2423D803C5C89C1CB32B0A8C2CB08BF280AEA17D15B9649853C61C344D1D7132200B11F903B0744BC151B6EC7D736E23BE89C0319F5DBF23472B9BA55DE202DCA6AEBCCE10CE7BC4DF338F92B625A45D7F049BA87EEC706CC197F6CD04AD55F2AB7B2876BFA463F8889E55F2ABF4AA9FF37CE1D8CDD75BD8C571C385B201294727D73E4636F3A76FC9131CE445300A18C076CA1511BA32BFDBD065A5350A7D00D37002E85B85831CB3BA0526E272651FC7AB73389AC474114DE062C718D2E33890F05B02C891DEDFE86AA8B4BAC59620E2CA34C28BEEB37139866496C1B46B83681B956370528EF1B9E704528EDB8F1528A6E470CA14009E82535006D2AB1F32BF3144133B60ED9900D7E81224D6CFA280F9F01A755CE7B802A3EC4A4F30C736DE59C6F9B251D844B2323AB7623BD9A6E2D20ED533F4AB673AA146CFFAD5294A23B2EF733A872F2943B63AF3359EED2E7DD841800D0FB9238C6D9FA8D2618433CFE675CB391379028BB01EA87BF66117DD85281A3A01F76110721FC65ED5B0708AC169DFF3B858DC8EE84A866AE2388CA3584844118913E0BD19C0A2A2A22D6F3A4203FE9DA6EAEE336ABBB6DED7D2D486675C2962C8C090827B1C353E82774A239C43D250D4B6886B5D7368BA3D8F3BE3CB2C322F7095C03866CE436B9F231C8232C9A679C49311A1DC281012C6F5FC35D8714E1B96DD888281355CA3286E6365BD433D17C9E9D99E530D2FFDAA96BBD2AB8A23F3E8C12E822918F7259D83B05D3BE81E76D0AF8AB0DCE5761BBBF8DCF0B03B82D9F2092C1862B11A453E4338845B5DA641FC7EB24FD58B72C59779CFA30E668EE7E0E0158BA4822644954FC13A6194F2E5018CC8C87DCC85FBCF298BC96F0D20056387E95E13985ADA618FFE71785F28E34C55B48686E19FDD878B59A5A86FEE45FC95615CA46B2F6A9E421D2730D5B40339ECA088AA2742D8273A0BD4DF286D9B91F25272D5A8D49549A0FFF28E2B86677436526AEEE03A992C064D872F4C42FD742345AFF0A93CDEDD7CA4F5A2EC5023885F10B8AD649DF0AB3BCE2801D92DFC2A0B829AF75DA89161C6473C10C81E7D40FE108209A0C881A15757A07B96568DFF5EF30C2BB5633C4EB847E342F60D76B12770E43CAD1A258C5EE810F6463C6415662526FBF69FDB64DF6FC9C03D5F7DB11C9D9485BCBA1E583BFAE3B0631099F790671441B903B894918BAEE67AA4E4D7903523486058A7B30B925237234DBB3CA8BBD4F63AE17C4A0E56D943BC3DB98EEAC13594B74EA1E026F368CB1CC7967264D7DD87FFB92C64D4DF93064DB6295390B9DDA24FED863EBDAA3EDD82B05DDA3EDDD84AC3BFCD89C0D1760920F678F4438D6C12EE4184A48C2129F31D80C9114F04E6F6C29F00061511408E52C3AEAD40C3A5167AB6E771CC390C31E9D711CD81BD55DC43A565A38C312078C6610F289C87099EB21A2B19F83D4278CFF62F6622530AD1C17650CB83555EA96AD8B0D3E1149A8B70F68A522A07D0D470036905D7105CF4506266145F8FE44E4B3E1BA69E058B90ED739218D837C92233BD82C9454A1F8ADB2A4A9FCAD647740A23681E7986FAFE47B87C7D50DAACB2BB38053DCF1682D60363FF3E98D07619F17107DB4BDB98E776BAF628C52FCDBE86700E34FA4200EB04DE63351D865EC01DECB5F6E44556323090F6EE32C77E4EE10538441284275720A6781856E786A446811A8FD080FAC1F758898760C286C7DE483250025030F00700189A98875AFACD2A8665132BEC4DE6B990F8021CE33C44BCA1B0D44A86DF38820A996B8A86E09F7B07A1E54A00BD8B97A0B3DF99799239B0FB19EA7AA731F8680D532C148F1694D2A7AA7F05F56CD85D6DE8456AD580342BB14F9D66C7A40DFB24BFDA0FB3607645B8AEB18DBB2E92D967B88A3F5A8BFA4DC74FE95785ED3224738CC247611C720FFB8E7A4939D0376B80173C0F2EBEB1084D2C4174F1031C8ABE47E68AB0EF8726992BAC9BEE068046616460C4036A4165FE338BFD21214C068611C03AB167D7B3C8B3C4105C41CBF0735CEFA46B084A601FCF1B01E92D5CDA7940314C0073EE208C3DC13C02E853B224E9C053C199B46F4BC8A81BE5747F0E5D63EB740772CC3C91638495B799F9B1ACED112EB113514CAFEB983603E3B31DD84FAF6A41CD66C0CEC957044F19B214BEE28F16AC63B80AF12B12BEB05DCAB01B8779F410CC6D3C713A3C1B27CE8421E05C0E220BEFC322F28E14FA5B9D69DFDCFBC83EA50ED4A694799D810C6129072AC3F87B171111C29B005EE95DC415DE3E2040148FB5D46C2DC32F5050D30D27EF289C6057C637A3137E646008E70F79D481678B17A161EA0497B06C4451D7C5940E2195C5A6AC731E8D6CC90F50FA3C5A5060FA8902773950AA1CA41594F4E30CF6FA75D0AF0EE040D820C3B59B55B65719B21BE0E904DD8381E41C68BB22C41F2AFCEA282C2F3CA208AE82E55116AFF05444E40EF222DC962AF6E7F6ACD80470B71B1D081928F5F90480FE9B00DE9742D85884709432847F581179038002BC4D202BBA9768ED56D13ABC864B85755CAD08C609BF3429EF480092816A264E3813410670D725B8E02ECE5D7D84104EB1FD932AF9BD4F29A29FA17F8CB971610D8F97E5A8A405744C9F85193DABB05CFA7EFDD4763D52D8BE048FB94E5FB08EE009B3BF9F02D7E23C010CBA89832E7138ED9F84B0F4361C60D3E09313742A9CAE7DE1D8FEB2F848007AF6BF64E0CB1066E81B8551138653546F1691D8115E986FAFC2D47F7FF1AD3AF03506328437C1FB3A80A59D0B28EB5A94806CBCCBA176723E6C5DC3109ED5C2EEF21CD409A047542E479B5CEE2EBC87B0D287084EBD8EC8D40A86EC049BAE930CEB1974DC5FE0E06715A50C6121C00F0477D1F4DF818A3B6711ECD3894AABB511B606ECCF9908F0283304EB0E8434C1C2251E0EDEE7117AA951B26A1FDA34E3D76C327C44F03EE788529A716C546F258064A01773E0D901364C450EBC033D0A6AC35025805FAFC2AF01787E0216294F60641723796182278EC61B85F49B4258028FCC13EC13478057CC116141DB82F4584B565DEF18857F542A6C3C2E40D388FA31369F8D836544708CE89BD18DACEC3C0CF6F723A9BC1F715C9D4FAB7FC41C3885FCD605AE59503FE6CCE3101DC3DEE041869C32EF4905833D3A7D86ADB110B804CF3CB819FB5D9360472D1772B116D6D183F8800D86B7B851F0DE51361B08DEA764A000504CD7441E7D3D843772A008E14056618981E2E70B004508B3954506EE974434DB59F1D3B0A046DDE757077DF3135F07504100D378FEFEEB406EF92680951B39B0A27B5102AE94A784EB66851D0B1280792D0BC8BA35C7E78BA8E7BE6E515D374E9E3E0B5BE7B3B45477A91FD9CD60A54E2DA846534D39857831C28A1F722CCAADD12B0F11C7BD1611FA1E5C2E179E55C67DBF9D942B227445B744028F95D634A00D66CE4992A40A4CB8C2B5920136189AF07FB9C3F2AB430D789FE009068AAD0211C29FD3334BAE850CDC29DAF664A02A19A8C19FAFE9BB910309A0C16608B30A4B212C2E12ABF0010277206116E6416C521CF102170C606B7D10F1F117909676799385E27182C79AE74F0590AF0128AA70050B8800AFBC8BCC2370A53CC5ED04B07D41624F6ECB3CB239C4CE686417E5E61C5F63D51E58466A7E359CBD23703A98499D03DBA812B6BBAA9A9071B51B41B45AA1043128FF1EC2B9455020AA77E102DB4ECC7BACBAA24B2C2AAE6E20ABAD7F274C9C2FB3BD14C985F012D89FEBC556CE59DEB2BC815FB199FA8E5503DE3DD228B1EF031B3250341A5E0370C3F20900A522F28A81BA8281C10CE18D1C2885F0B949985F603E0EE984916D3074B5B5617DD00C5111E1C8CF67E35819BE6F3A2D7CFDA39700D672202301C7902D7FC93C65C816926D059BE0DD9A4756D30201E47264C31C2ED6CD22992797408A3C1777A9188E1E61B0E79AC699A802C4B02B2D18298EDF86FC11FAD1AF6411FA1CFCEC7425FBD831D166C759CF311D071DC3E1CDEF3B15D7C506430B416B907658DE2768BF26F3DEE14ECB3B7CFE3E5F13A1FC328437E7BC942F62C6FB3207FA0C48A9415BCA81642085B49110D25163D87B6E1AA69CE7885CA7ABA38F436646080B09425E6EEE770127BE36C613C6F3D9161556E1D0843CD45048976F84AD085D11B6C564DD2BE62D2087CCCB6A12EC9B473AC1BB44065EAC9F238073B8707D16F1ECF7E5F176D48AB6310446A7C2F69437CE26574BEC0B2E7A00DF6C0A70CA1FC140BFD245A87B7462F719360F4E66C1CC2E04674233713ABE032ADC22100D53D1F313CDD4F7089660DF3F0B00AD1AC94002BA01E0C70CE14FC5868108E18D41F9CB1C288A8804A052070A061A707064143549100761649F085D7D13EC37D145A0DF59E4E4E47C1770F3042C9D479BE7CF37F3A012C0F83C6E2F716C299847E04AC8BA2211B6CC79F9AD8BC861DEFB3A7869B44C02BC5409BC592EF810BCEA599C631727A6629A326616F96D4F507CE30EBC4313B8FB721E3EA98DEC11523F961040E6403F8E36D56C3360742C084E0197E11EDF0E4D37EEABD834E17382B6833B2C62014884EBDB9604EF350005039539F0E3E30490BD4201A054858518A724120C9472204358B4F2652C4EBA1C591A040EC0C0E122740DCD616EAC83B35E1EC8CCCCFC36E09E11A8361E4B9E9FBFB10A0B00C3920A514D275242B952CC6221CE2678A268643364B318BA194D734823709BCC4BD9048FEC8B2378E2C45E9D4664F934819A92FA6D851D2BC8AC68C1E9B3D1DC464DA5EDEA431C1B89B6EEB138E1194FE06E718ECB5D15D181669374A768A48A0E0C01146C7B8BE009F6490C3C2C72A060A012C00FA4AD2AD16C551611D1845002283AD1BD52C746DDE70E34392CD766F341CF219D3B3907B1575F139E6E2EDF2C0E5F0771866045F37CB93948FA561DA8BA73EB8277780A7B7B0A94F73E55E63C86AEC879792C18827999226C7944CEBB7443C9BC14866D52ED1CDB55B3B8C0B1E7B96BB388612336AA724602309C27B8987B33859388BAC2A66A0B17942E57707A170C8FA07878C43740976DACAD6CDFEFE40E8B9A58FC613355345277B3A12040FA3A78AF87F006801B454430F08B0D066EE7F78A2A2C3CB0AAF73D16917E68D9E74267EF3118EB69C2C5C91E975253BF8D71CD04EA08CF5F29E7E51A2F3F12E15B01D4D6541BE2ED4E70740FE6A4ED0E4A39C328EA5C91E48A002FFBD602F3DD2BF02E12B894DA57617BA16A460ADDD82B336C8D2BD91756460696F2144FB3CDC4FB3DF2B93F93338973DC978BAA7E8EA3FE15F8DCE6263BD16D90718745345335D803D4F2EC96967FDEE7B6E85B16CAAAFBF5F37A0E545661B1A2F6328425068A958DBB92AB51B72F82CCF4040C75D470EAA42D929393DE04DC12C149E4F96A13B4373D7E2B803A32CD8FB535D4CEB323BD64646402AFC87464DC984461F773E6BE65296CD345D8DE9857160CB22E91008A9C779EEC93C0BB3A43E64D5344CF90798F114A008325F01E23806BC0629FD9276F1201FC7F01A07E0059E17A8BCD54D144653395CB3FBA6CA86A7BF748CB8F6F024F029273E15721CC31A7940305801B6DFFD3035C4FE3A2905D19BBE44E14C1EAB03B7618E7E3CEBD09B86E82E2C6F3B7D27D32D2D9583078F9FCD56BDF0EA0F8581399E69FE86ACBBEE4ADA1C5EABBB6CBCD2DAD1194720D99B71691CD6DD0CB044FE43B015E4235171C0578649EC87931CC79127815331C5F927D645E70C963DED2A504CEAF80933732D09B63CC70027CA17E1DA661DC0A706F86E1D91E36537B60C0C51F23AE627CCE3DBE6F86EDD71928C918E6C0F7A42ACC2222C9182E48DA774B8B91DB8F5740C3CC15BC9B00B6470E20262AF29B5A6E994054F268F1FCC52BD07E38805B74F87929BADA5AFF85772CEDD3D8FD55BBA6EA2E58DBB9232287B716F056D34B4DABACB642AE4CBF2C18310C5B25F31E7303615A625E1099279816C0D0F52380023C1FEE2D7B11C0D03201E00B9887B381B0B1BF62CC2EB458BFD8C5B9C77781F72B0ED237017CF788D2897C60DB850FED3806B5BD0A957DDE6034E1A8E55E4484857E13B8F10DDDF6CEEBE1B9C9B0DF1580FCE019BE0901E45F6A6BA9BBA9EFDA36CAABC4C641089B94F790D2C019472D3751AF4D4B05239A004A39AF9461FB0DE6F916BC02CF9BE1EBC1ADACE0926909C00391F760ECD30E536E4DED0F6375E41CE49F0990902BDFCC7B2F2BB02463944EE49DA39437365DF8C4FA3A769B05405B5B17470E1823343810B9AF6BB9460267C5F3976FCE6FBF270025109540FE13EFBA8C55DBF9E5B2BEBE014EF95F4254C514CED73D9366A982798275A26088B015AC1339CF8FE009D609E0C46EB52820EE1CA4077113219E216C19739F2B1B9D1C3F0E10C0417C422DF7CB37148DD70A8824636EE157D62C3256F5D8BE2F1C5ADAC638B84F5F12C15959599B794E846912CF369E3F79B97DF632BF6DE6B98DADB4CDEDB41F98039521BCC1C04D00C5A38EF8081199D636DE8559A2B967DB8BBD07782F6ECC15364F9779561052C61B02095ED046B110394F545D51347C089E2737583DC93E016040D134E26FCA7198730AB3802E1C89BE0335CE80BF1BBC1B5C2862553EDCC1A5A2067C6916074DBDFD14C1DA38EBE986F4748E5C955EB587C7FDBB8BC2D7C1FBFF06A0928D04F8CF75780B84A6CAF66699FA1E58DA7AC0EB622B978396B94BB2A8CC7964DE2678A268780BF0C83E11BEEEBC335DB033E1E63AACE31EE060488FD4CA171EF72D8B3784EE2102C7A2F1D6A13602D8884FCD12A1A67708FB8C74E0EEEA84CB972E09D004DB2A7864AF8AC2663E7B5355FDB704F0153BFF3BB5A3BDE6EEAF86A4CE856B34BC33EE22A86205FE6CAE0AE609E03C089C27B7B004785F0730B1418EA3E71FE24824171F2963DECC3E822A803B449D6776192A7A472982B52882ED90929CBCD9521266FEDD5721FA75E0BEAD28FC21002872869423B57ECE3BD2C3B554762C1A1818C1C627155ED9E35C165A86173FF36013B86F0298C47B3C6C13877138A20F9FD1F3BE0EA0605C8B04DC47E6991CF4DBC1505746116C83848478015CD3ABA2F04D86FDF101287DE017194021BE274F4B7587DCD8CC0A76C125F0CC15770A2D91858F092457D9C8423786B0D085C98D7238704FD0C0A7436A8C6EF6F9DE3EC4A54982F7C1FE3CEC3274625F4E0B276D0E23EE5CEC6A616161B2700A3C7FFA2FC5EE662EFBE30590D55AF69F7897B70E3F9BA599076656CEBCABA889B7822D88DBFBA542B209604A931CA7B864B9DBA9997747DE9018F7D6E136BC77A00CDB8D3CA1ADA583A387CC101E1A32CCBE9C1741FB3BE6DED757915F56CEAF3B873F6A00951F7EC89CF8DFF82137C718D677F847C3C22E10CE497D049137EEE4CE4AAE24F5969C1F73322A75527E61D98A772CAEE02B133F68C9F46175C044EEEBE3D573F9F2655302F7B3576CFBD1002893C29AE76FB4355583B4F66C7DACA767082BB7647E26D608EF0D79CADB25B817736906BFB6A8C217C62190691BC2729FDE0B5767C7DAD898989D6F16BC3F320037DC8C10E2EF313F5ED652DDBE62606A05FBF04ADEF93483839E1950D534819991F6333B1BAB221767A76F58AC6F56CB1F25802FDDCC7F24AB5464AA3BAB0D7575B0DFE2B090244B56074C730CF5B4FFFEBB5A483FDA10563270F38369B5B6C834D4B758EE37FFC585D8E8F6F0E08076277B5B3375955D7FF69B8127D8F86FCFC06FBB57E437FEB4DA7FED8E9D1FEBD77F02F037BC27EE2706FE40A07E02F0F704E0FF03DB7A28DF950E532A0000000049454E44AE42608289504E470D0A1A0A0000000D49484452000000500000005008060000008E11F2AD000000017352474200AECE1CE90000000467414D410000B18F0BFC6105000000206348524D00007A26000080840000FA00000080E8000075300000EA6000003A98000017709CBA513C0000235049444154785EED9C0770D4679AE6E5D9DB999DDDBD9ADAADBDBAB075B75B77B75B577B7593D7F678C61ECF8C6D404228B73212CA390BE58012CA39E79CB384320A20945040421202913308099133CF3DDFBFBB05D886C163AFC7DEC1555F352E84D4FDD3F3A6E77BBBDF02A0F2E6BF2F4140007C73FE70066FE07D4901BD01F806E01F1E7E5F45EA7AA3C0370A7CA3C06F75147CAB9FFC5791C3BEECF77803F0ABCE818632998ABEB6968AA14C5FC5C8C050C5D0D040C540A6ABA2A7ADA1A2ABB94D455F4F5745C6BF1747FA5AFEBF018FA1BE3E1F65FC5A99F46743031E99EC3B326D0D5D3D1DCD3699B666A0819EF6DF4A7FA7CFAF13873F43FC5B03999EF4BD0C74B57974E48F7A7AD2F732D0E3FF8BAFE57351DDBC49656868DF37EA97FE9927F3550194E968BEA3BB4DB5C6D2DEE3517056175C029240300709D49060BEFB06E067142894AA4F656AFEA38EFA96145353F3F5A0941A640FAE237F02C81C7A80D0FC6158D8793CD2D550ADA7A2DF7DA3C0E74298A1FC773AEAAA1E86FA06C77D77E720AFFF22CA0E0179C37791DEB786B4BE1B84F818097BAEC133BA1AC6C6E6AB7A9AAA09FA3A9AFFF0A71BC206062AFABA3ADFD75657D5D3D3D29C70F78F4256D711D42C00E5D38F51B0EF267206096E601D69BD6B48EEBE86E4DE5B48EE7F8C889A9370F04B0673E0B24C53CD9E8F7F2DCF7FDFB21CA8A7ADA9A2A7A3ABA2AB6BA0A2A7CB62F0BA45444B53455743FD6DADADAAF5B68E9E0F526AF7A361F111EA1781B2897B281AB98582E15BC81DBA89AC7E01F03A527AD690D8710D71EDD710DF7507319D77E09F3B0E4BA7802732ADAD7B659AAA9B5934BEC362F35A45447AEE5FE3F9BC9647FE045E1BA086F4C208EE7F6BA86E4A3237B75C8D2D6C44D3FC4DEC390ED4CE3E42E5E41D944FDC45F1D81D141C2040AA308B7950004CED26C0CE5509604CEB55EC6E5E4154C71D8435AEC23DAE0D26E6F67765DB3615E96BA9FFF075AAF0D7094FFCAC2F07504753454B5DED6F34B67CECA8AFA7772C242117F55317D17B01683BF604F5871EA066FA3E2AA7EE51817751B201F0C64B00125ED35584375C26C06B086FBB8FC0CA73B00FCA075B9D4B7ADB3E09657EFCAF529B235AA4CF6963BEF1000D9FF5817FA1A1FAB1B6A6DA967D1EFEE14FCB86E6B197E0BA4F032D0B8FD178F801EA660970E63EAA26EF12E01D2AF0B65C81CF85F08B0A94038C68BC8A5D7597115C7311C1F5AB0869BC8D9D79F3B0F2D80D7D6DF56986F50E7D99DE5F191A1A7DA60FFCC602642BA262A46F2035D23A1A5BDFDBB6F9A37A2B3BA7FB59CD43E83BFB107B2F021DCB4FD1CA9CD7BCF05002587BE83EAAA7EFA1F2E03D948EDF45D12873E0FE9B04A82C22CC81DDABCC81AB88650847B7AE209200C31AAE4800436A2E21A8EA0202AA2E22B0EE06026BD7E1963C00331BF7C732CD2DADFADA1A1FAA6ED9F2565FDF5E114A6FDDBB77EF6BCD7FAF1FC2FAFA667CB2CDBA1A6A218417656E6EB112935F8FB62337307009E83AF9146D4B8FD17AE4115A08B069FE211AE69E012C3F789700EF4800F309304700641149ED21C0AE352408806D04D8A20058FF3CC08B08A8B808BFB2F3F0ABBC449037E1577E018E61556C7BB6AF6B6FFD3869BB91D1FFB2B7B593F2D13753810646D38E01C970F68FBF63E5E8FD34A7730E4357819E33CC75479E48E0C411CA6BE211F0EA84FA18BE950C5F51404A18BE85ACC2792C20A29196035C4352D7AA02E00A7613A008DFF0FACB08954298C0A83E0920A1C9CF79F8575E857FCD7578E72FC27A670A0C657AC70CF5B483BEB1008D8C4C26DD13BB10D771E37246D78595A4DAF107698D63689C5E45D709A075E929C13D42E3FC03E9D44BB98FA1CBF015EA2BA3FA8A476F237F98E1BBEF06B2450BD3779D3D2001B202C7B3918E61F8CA01CAD5B7AB9600AB09B0F222FC5F00A804C9D0AEBE86A0DA3538270E42DFC412323D9D03DF48053254C69CA25BE1953505BF9CF13B597DEB57CB06CFDCCCAADBF7B8A873061D0BB7D1790CA83FFC88798FA14BE5098015930428D4477885076E7302B945F5DD94D4270164F88AFC275A1891FFA29A4505BE82B0BA2B08F93D00032A2EC09F6A74C93F0FF3D49330B4F687A1A1F10267EBFFC1993BD9C4C4EC3AA7991EE6EEF7451FCB6948322C9E191C34268439A1343E685EC87B4DC5D1D763BE3750D9AABA49E5DCF9F32F4D0FAFD5C6181B9B8C39C776C1A7F834E2F25BE11A51F534BCFAF4ADA6438F6F348F1E7F54DC3288A6A1450C2DDF453BD5583E755F6A5BE4A12B729F509FBCFFCBEEBF81F4BDEBF2069AEA13639CC87F427DA2800880A1842715102A304052A05C75BE3C428DA2B0F83227DA679F8679DA1998262EC3C8CA07325D9DA78472DB2B3C1BC96D271194D589EDE636B7F434D4720C7474FECF1F0DA089B1E99873743B3C0A4F23BFFF3276C656C13E301F6E31AD4F33BB2EA27FE90E3A460FA3B663100353C7B1FFA4C8818F50307247525E8150DFFE5B1CE1A83EC24B171308C3374134D0227CDB18BE545F24F35F180B8832FF0529F29F6F99007681217D81A17D11DEC5E76093791A16E902E069980436415F6608E79D61486A9C43E1F853E4ECBF8FAC61CED96D17E116960BAAE914E76C6F2AEEEFE416DBD7AA40D331971802CC3F05E7CC4330F22A4456FB12E2F21A60EE5304AFCC09E6C37B183F7D036D43E368E9D98F91F973E83AF21085A37C219C7DC5FC2B1ED3F6CAC737513C44EE8B233C297C15EA13F92FB4469EFFFCA9BE9D041748D5ED66731D4E78AE05E7609D7906D65967611E3900039B10D83AFB20BE6A3F95FF00A5534F58E5156982B376FADE3B481B7C82F0CA45D87A45B28FD49A9269AAEB13E0F724905F4F080B807BE0927B0AEEB9F330F5CE4370E53178650C61677C3302E28A601D528B98DA133870F629C64F5C465DE7109ABA47D039730515071F2263802F84792F85AD8BB2F2C631746345F1A0FA44F10817EA93729FA8BA3C0417DD7419C9AD5710CCB0B5CF390BBB1C024C9A81A17302CC2C1D1191D388AAA95BA8E5BC5D3C76976DD20DF9A838C05F96F879A2CFA4D293FA1E20BEE73E7C3306606E2BFA48B57AFA90EF7E1D007F6064647CDA35760F1C3297E1943107339F62B8652FC028A0163B330651B4F7249CC3CAE0BDBB1C6EB1AD283D701D93979FA2EBD0291436F4A1B4751CE5FBAF216BDF3D2475DF90F25EBC987D45E8B65C7D4E7D57D8B65C92836BBC8C9C9E1524B65D8647D139D8669F8143D63149F186660E088CCD46F9C805B42C03D5B30F51CA36A9987D6621271DD12A658A5C4B80A2D74CEC5C431CE7EC9856F69B5DF7A536C935A21226263B847D1665A0A3F50F92FBFDD516119DEFEAD17837D0561D6775835B7C276C920FC3326E0C667E2570C99A874D441B1C627AE1943E4905D610D215F8C414C32AB0148159C368674B33CC29A5BC770E0905ED48AA1A473AEDABA49E3B9C3C5625E589D015B94FE43D7F36CA910CD5C2FE6B28E60963CEB32738FBAC53B0096F8691853B3C032250BC771E9DA7C4BC4DB342D16B9671D211AD920098CB665D2830BD4FDEAC6F9815D22FEB0AA25AAF23A2FD1E024B8EC2C62711867A3A4BFA1A5BEC0C7435FFDA4046EB4C80FC9255F867DA5A5AC39A1A9AF858C715BAA6AEF04CEA8665C22118EC1A80A177216C932761BB7B0FECA27BE19C3105CBA072F8961E87557025418D2124A108F6BB6A1157BB805EBA32ADB3EB88291D826F522376154FB2785C47EC9E5B52E31CC87C17527B05F97B57D134C6BCD571196E0567619B75063671FB606C1B083B672F64B7EC43F79947E83E0BA96117CDBA005825CC8AD701A8689522F84B12B936ACE926E7EC5BF04A3F801D76BE6058F7C8B454377D915EF273DB181D0DF5741B673F583BF942D3310F5A266E04D84505CE21ADE538BC63AAA0E9D305E3E0265845F06E237306E60115702F38CA029387B8E633082FDC07AFD80684A7D7C233BE15C543AB683F0A64F79C8557722B9CA3EB115034473570AC63556E9BBC8E9AE16B08AE380F3B56587BFE824C9D63606EE580A4D22636ECB740431B7B386F4BB336D55D372BFA4DE1F6C84745A1C00DB34252A022E73E679749668562D616664550357BCEFA5B08A859814B740B4CCC6C6FD3F5C9D3D7D5F8E1EB80FC5C805AEAAA59518939183D7E1D09B98DFCEDEC84E5CE0C78E61D4174FD322CFDF26016DE0FCFD45E18F9D5C12165520E30EF28CC7C8BA542631CD408DFCCFDC8EF3B0D87E05C380517202C7F0855130F389D3C4268E90C760455C323BE1D2D632BACA2F370CC3C0ABBF423D8E14BFBCAD406217C0E4DB31731748563235D9EF62531363E9400364866C53DC9ACA8E0B828F59B2304C86947546161D84AED9268D659F1E5B336D385A2DA876D9815A2CF3CCFA986F9B7E1367C4A4EC32E205B8C87E7F4353E09DEBAE593FFF22A902F0398111A9381E1938F317AF21E7A27CF202AB502D69EF130E78BD6714E4744C502D2EA47A0E95A0AE3C8FD30F22C6481618E64287BE42EC036AA0D4E71DD843BCE50AE46490FAB7664015C22AA91503D8362D158F7ADC027AD07169E4930B5708289F54E9858796267680CCA07E7D1771EE83B4770479FD0AC78249D9645393CB9FAEEA14A1A1785FA44CF29CC0AF69B0AB34218B662DA49A0E31D2BDAA50D80625464DA50CCDAA25D92CC0A4E36623C14868557F60CACDCC2A1B36DF3C1F7DFF9A9999686E65F7E1EC85702EC5F7E881E3ACB034BB7317EEA1EBAC74F222CB104E68EA1B00B6F826D64338C7DAB91D17E9CAD4D3E0CC20EC07867311CD30EC1266A0F6CA3BBE1C202631958C676E5226C432A115F39CAB0AE4450FE34FA981BE39BE661B8DD0E6E51559C1CFAE0CD2922BDFD10BA4E3F402FCD8A569A15C2E1919B15C2E9E1ACAD707A44EE13EA135EA35C7D4AB3E20632D8B08B022200C6EF5955CCDAF276294C981504B861560880CF9B15159C806AD60993AE38ED334B3B8FC74632BDDA2F0C704001B09B1005C84101F2C43DB40D2F21283A0FDB9D2361E15F8284A62518BAE720A46C510261C442631DB90796111D7024408B8072B8E71F85A1472E76D79FC4AEFC7E78A70DD3B17E8CF08A2918EF70864B4C1BC25950D27A98BBDA969050D98F92BD47D0B5FC00ED6C551A3867371C164ECF7DA978D4089F51CCDA0AAB4C4C3C427DC26B5456E0E71B76C9AC90CC5A3940A13EA559F1A2DBF3CCF509A8664F4A1FD225E7040CCC5D1F10E09F7F1AE22B15A80428E0892340F60A90476F638CA1DD3470187E9159D8C1103472CB444AFB59B88497C120A81776319D30F4A9653118874560053C0B8EB37F2C846BD6615845B6C33F7B14D5071F20B06002C6E6CE708EA159913D0D4FDE8344D79F41C9FE351477CD22A7711F1AC7CF62EFF127683EF2981699FC9A60437DCAE231CC71F1F91B3F85DBA36C6184D718D5CC665D69D65281CF66EDE715284C8A0B08A22A7D4ACFC12EFB2CCC52CFD1ACF085EEB62DFD04B88DE73F28417E2180CF83147F1E22C87182ACEB9E8477480A2C7DB3A1E7948CA0C219A4D68D42D3A51496B1C33061583B651D81B9D43F1E666877C23F670CE563F7B0938F46E64EACCAEDF02A3A8BDCE683F008CF8747EA01E4B019EE98BB89DABD93A8683F80FEB94BE827C81ACED9256C5B4A084FF88C227CC5AC2DD497CDEBD20C8559FB82D728A61DF68062DA79E676D36BFC945D26ECB360CEE01E85E76099718AB3F6596C4F3D0363BBE0A7A6363B1FEB6C537BA0ADBE798FAED6B68F5FEA48B30A4B45E4D30A5402DC0079988A5C108ABC8391E5DB286D19865B403C5CC38A09847372603DF2BBA83CEF0218458EC19853845DD241D8447721206F1CC50C3BF7F41102A402A3DBE0967F12B16C81DCA2EBE01B5F0BB7881204162FA065EE31BFFF553470C66EDD3B8EF163D7D07DF4318AC7EFD3E591E73E71CF92CDD645586552FBA2B8ED537A8DF2BB9667F94FA84F98B5C2DDF1E1BC2DECB130CEDA4279CE79676125CC8A0C9A15E9E76096760EDB1DC345CE7CE818D57CDBD4DCE629EFBE1FEA696934FD410AFC0C4811DA0BB7B0EFD81D8C1EBB89829A5EB8FBC7C221301BBB4A272073C98467EE1CAB713964013DD8C1DC1852348102BE68A764567002741100F36856641F863E73655AFB1924570DC2CA3707B6618D4C0F1731C6AA3CBA740A8D9D03E8199EC6E0E275B6310F913D745BCA7B4A78A9DDF2795B140FE9AE4561D48ADB3E31F1C8AD32F9AC2D2CB23086736C230B07DB197BCEDAB6342A84596191711696D9176199791E267601EC18FAE1B52B0319656D884A4887DA27BFBDF795007C21472A400ECEAF22BDA819AE7E7130778F4356E76978C75640CFBF0BF6713D082E9AE4AAC73AECE2061445A41D4ED927D8432EB2972C9280DB44772020BD0F69655DB0F0C9866B423FEA266E60EEDA43744E2CA0A2B90FCD6C771A6826E40EDF476A2F7D469A0749CF19B5A278BCE0F4D0AC10F3B62FE109D73BA5FD0AE25B2EC3ABF83C6C695638E4B1912744AB4C5A6659CC81F9576015378A1DB6EED89D5A8A814317A9FEA73451EAA1B1E9C3B52F08F086544C5E7544A1E96668F72940F61C3C8BC4EC6AB80725C3D4350E412C1A994D132C1E07912B00C60F49005D63DB619FB12499152257BA66CEC27C57133C52FAA5E2E4C4E13FA6908646501E424BD8232E3FC1D8B93BA8EC9E4076652F0BCE128BC82DA4F4DD96EE58E2DA571466058DDAE74257CCDB21B4CBD23AAF22AF7705E19C461C09CE3E9705B0E0021C72CF131C61E65D806DEA1CAC83CBE1B92B0B4DFDB38CB2FBD214639AB502995709F4D47FFB4501BE1ADEF360054425C8FD0CED8EB11388492B855B60121C428BD8078E226FE0261C92F64B00DDE3F7C09AA3A249E40198FA94B2979C917A49BB981E5827B292FB97A19095D93FA91EF69C6A9CC2B9E5D5751E43EC15F71C5A4152F95E44E67620A17119C93DB710D77953E172B37010A098B785F252F65C45D5FE55EEEB5CA1EA688F31549DA83AF7A20B70CA27B41C9ECC63B00AAD8573602ACA5AF663DFD17BCCCD976198781C5A31CB124053DF32E86EFDCDBF1D4025CC2E82EC9CBB21B5408374AEDBF61F456462810432A66C1C2E2954A0B9233C133B6195380B6B112E01A5D811BD9F4645074F0F5B9F69EC2040CFC26330A0999BDEB288F8C216D80614C22FA51395A3EBE861539ED3BD0CFF9456F8A57521A2F614623A6E22B2798D0DF165C4720AA93DB08EBA036BFC3BE12DD21EA3EA5C0BCFC3B3F8029C0B2E32EF9D66FFCA9FE99384C4BC460CCC7383ACE32A0CE38E6273E82274628EC124E52476E45E83A91F01AAFD1B03EC3E4C7002E0EC4DB4CFDE40EBCC3AD57203FD47EEA071EF1C2208D23530452A229E499DB04F5B4466C729F8C5D740DDAB1D4641CDB008A3919B390D73FF5278179D8031279EE0F22578A7F7C337AD1B19557B396B1722927B73752C28D593F759B8C6E1C091D135B19B17541750C539B96B7A9D8ABD4297E70C557706AEF9E724D579965CE4230BC5EE7E58FBA4223CB914BD53BCBAD87B0D06D18BF8C07B069B430E433BFA28F4138EC324F5142CF25661CA5FA800D8DADAAAF2E9C37D17D58C5DB159183AF1F8F7E6BCCFE44302939A6E3E7651799DECE3F6F0B18DE05AA66FA069721D0D07AFA3654AE4D3DBA86C1FC3CE907858B8C7C239691FFC4B8EC0D833074E89FBB1BB74187A9E55F42047B19D26855BDE32410A3397A66E682BC7ACBD48683E09179AB9BEB1E5F0A24B94D6760615138F90D4CE7CC68B30A7B04A14779E4478DD25BA3CACF2549D3B7B3C8FA2F3F02AA1F2D2A658A0B2B0333C136DFBE6514533D8247611EFB84CE0571E53D8127C189A9147A0CBD0354C3C01D33402CCFFFD00F34276A712E0430C2E3FFAC2102578549F688285E2DA7984FA9AA6D6D178701DF513EBA819630B327A5DFAF39EA95594360FC32B285E0A1F03D754BA3587115DBA0F5AAE25EC1DD96C7BE4D1CA3F841D9CAB5DB366A5FCE810D3455F721C561C152B475609B182CE782942333B90DB7B158D6CB823CB266016D6C70241A5517DA259F7E2A59447EE12EC42CBA508A8683B8086D16BB04A3A827F7518C54FED47F181D7143E0E3804B5D07968452D4116B70CE3E453304B3F03AB823549813A2F53201BC49DBC7481774038CABB0F61F0F8630C1C7B2835CD3DF3AFAEC44AE5755075025E1BC1B5327C9AA9B846C2AA9FB88E5AC213002B998FCA58184AF6ADA18A79AC6D6A0D85759C9383E2E01C9A0FB3C02A26F30694F49F818967360CC24798BC4B609F3801FBD86ED8ECEE869B941F8B39519CA6535E46BFF208E28BDA78D5302A19B9094D0BB088E0F7A4DA44D1F0E4CD229B6138FB2520BBA20B6D07AFC22BEF387EE93286FF6BB19F00C7F0BEC7247EEB338D4F0267A1BE6B11DABB19BEF1227C4F6307015A175EC776FFF25700D4D6FC2EB7EF3535D4360F726D0D016109A81D58C21041F61FBDFF52458A42A12C1A92F2247837084FAEBC8671C2E311CAAB1C5943F9F01A4A05C0A135140CACB2ADA11287AFA371EC2A722ABBE111180BC7C04C4E2DA3D073E6ACDD7A060189B5D0F1EBC2F65DEDB0D84563966EF80EE647CF42BE404E3C01258BF0CEE8875FD6081A0E3D4158D9241BF75E295C5D1206B8019B8AD8AC5AB44FF09AB4FC347EEB39811F5B0FE3E77623F857C751FCC2651C1F784EE277BE87B039E83034C245F81E9387AF00286E045F03A07249E77B74A78D34D4364DF0D20562BC6B183EC5B07E8CBD4BF75E00290A863CE7C995D73EC3B055284FE43D11AA42792FC0DBB78A22C22B1C5CE57DF32A72FA5691C93B938CEE15140C32BC872F20BDB89520E361ED9D84E8BAE3B0092A823943D227730032EF4A58C41E60DF58CAF05C6603CEFE31631656511D08E4966BCDD42304168EB3628A7BEC1C04C6E4A179DF32A78EF3D8E237859FDA1CC0DB0CD9779D46F173FB11BC4D80BF749BC087DE0C5FFF59A886CC33FFC9C3D728E98414BE16624A29120A7C55087F7645F63F722BCB4E73EBA645136363442617D2453E2FE5C7BE23775930088F4754DB0E517145CE23BC162A4F82C7A25137BE2EC1AB1AB9BEA1BC6285F204BCDCBE6BC8E6C9E04D5C5AD70A923B7823D74E257219BD7AF02C9272EBE045C3C2CC239163E00C926B46A0E35E06B7CC4949790EE9F3747DCA699FCD48BD630001160FAEC03E200D2EBED128DFC386BBFB0A7476CD12DA08DE731EC307EE13788FA1FB33BB03F81901BEE3342607B8730A9F04CC416DD78294FFA4F04D3E09B38C331CED78AD4A05BE3A07BE7CC7F83F51913E9A6A9BCE9899992336A31CADE317D0B7F480006F610F5B15393C79D84A1597CA13F06A44D832E75528C256DC9108E5E509E5F13229AB57C0BBB6012F890D6F829826D8BFC5B45C4126FFAEBC8F66433AADB1D054CED5A5B0DAD588825EBE30AF5CE8333F1AF1BAD52A6E84F9B1076EE1C5F0094B4516F35CC9C0659844CF4B4A7BDF750CBFF36688F2FC82F07E4215FED4F680543C7EE1CCF065FEFB1DF3DFE6C039A8871D814E347BCF8DF0A5C9F025012A43FBEFB5B7A98513E4654B0B1B247043A165F22ABA16697ECEDE96E73C45D8D631E7D5B040BC5479ECB724780CDB0DE5ED5921BC2BDC5AB82A35C0BB251FEFB23446A573D62DE6D67F6452113C8212E195DA0D19F36378D55178C5D542DB254FB2E2E3B22A5131C87936658905420EEE639F496C62E86EF29B9660FD84E004BC9F290132FFFDDA730A1FF9CD4095ED8B468422FF317CB733FF89F0B51217FB5F42819F5E60FC9F0499ACB575CB751B3B67A49476A269620D6D748D1BA76ECA95C7BC27E06D288F79AF900563236C398F0A750978299D1CC92478BC64E245B880172DDD1D5F916F2E28168FC4FE4C064116B61C42282FD89D7CE31096D7071BB710F84564A0A2F728DC738EE1430F02711F879AFF14D402A6A11A40306C4DDE2328A5F224802C201BE1EBCDEA1B300B35E63F2D29FF1DDF685F44F84A008B6FC134A00A069A9F3C6213FDCE671AE9D7B9CE7BFE6B74B5347E4488053CB7ED9D3D915A3120B9260DB4DDABC7D69FE53C014F51307225E5AD48CA4B17F098F394612B9427C2369ACADB80471B5E6C1448BB3362FD839694F873560F6DABC22E7887652232BD0621E5A7F091D741FCC67D0C1A81D3D00899C1B6E01968041FE2E321E638016F58529E7498FF440179978AFC95FB41A97DD92485EF82A27D61F54DA1B1CAFC6795C371AF80FD6226272247EED968A982F0EEF0C4F1FC4009F20F5E9325C8F719D6F5DADBB63E70F20C445ACD28C7A8DBA812EEF1FEEB2FCD794AE589A2B1018F0005BC48AE780870E21E43284F5ABE541C015218A3E26B9AB997184CB3E003A7216811985ED80CB477CD406BD721A970E8841DC6AF3D0EE2C7CFC3534094F29F685F44FEF39DE1F431876DE19C7D99FF44FBB29D2B7416B9570990BB88218D30E03227DF9A06477B3BB4B4B40888E22CF1E8F1FCD91F0C50A1CA3F2348356EF077B1977CE2EA1389E4DA8328A1735CC4932B150CA13C79D8A6D256922BEF2AE225E5899C270F5BB1E621B60804BCE7C1BD009130457ECC19BA0FC782CBD00E1A8141C41C6411B33CE2710E065187F1112BEBE7C113E1FBB6E318DE733B284D1F1FF9C9A70F31BEE9C51E8351EA7998655D82F9EE4118DBF882BB34B03233465CCC6E545594A1B1BE563A4DF57568696E5A25408B2F0B50F1EFB5BEA7A3A92ED3D8F2D1015D6D4DB8F9C721A97E1E794377E81EDF441A01A6D0E94826BC448213F0A40520C28B56C0932BEF45D5BD08F29214CE027201F701DD4BAE403B781446046614C5EB521ED3D8056C0D9A910AC6F3794F19C21BF98FE1FB1BE6BF4DCC7FEA61CC7FD127A09F748173F1348C5D62C14D5798EA6B222C240895652568ACABD9384D0DF513CDCDCDDE84F74F3C6F7D4500156FB9D2D1FA2BB63E169AAA1F4F8AA9C63D240DF1F54BBCB7BDC3AD81752E40129EB260306C774B61CBA221298FF05E0950B1E3527F89FB8777E1597A15B25036CE310417BD00F3F845E886CF493DDEE7C193DA17CEBDEF3A4F707C9B62FB42E7256801EA51A7A113B50003CF7CE81B98C0405B0DBEDE1E28CCCB791EDCD5A686BAEAE6C6FA77A8BCBF6C6D69D97065BE5A80CF7ACABFD1D1507326C839B1EDE511968718DE112775DFE6A2D11AC15DFE54CE7B95F25E0CE93009206FF8CA576018C6359378AE87242EC23CE1087EE93A8E1F593D573494C543D1BE48E1CBAFF9B5D7347E177814AAC2F7F3AA86CCD002328DCD70B6B746665ACA3370F5B5E71AEB6A0318B6FF2452567353830A01AA7C1D0095BF98FFC6AB417FEDAD9F9C34D96EC5B7B95622AAFE2C623B6E13202D76B1642E42572A14F24AFBFBCF25E40EDC834FD50A1DED29C955B14D238CC019FC8873EE46C57D0E9EB27D7997D3C77B1E33F8B5DF22D43C3BA067EECDEAAA064B3343C433CFD555572AE1CD109C33C1FD404F87EFCEE7F963015482FC471D0DD568BE117BC5D4C28117EA4D52D846725BEB75C2F6D3B9309B21EC5F43A778F734C7BA63308E5990FABB9785AE00F8733A2F6FBBCDE237AEFDD0B20C83BEAE36B61B6A23FC599E7BC45C37C4A3C3F37D014C02F70D012807A9A5F12FBCA8CE6678DF35B3768317D7E8C43B35239A6F5089F2F7CCFDBE23F65CB207EEF2AD60AB308F9DE11EF73169EAF8E14B42F727B6A3F8B1FD34DE71D88FCD16C9D0E582BA21F39C1FF35C71419E50DC639E661E69575009ED9B09509923B534DED1D9A65AC61BFFBB3BEC7DB83B33207FC766F375027C753E0CE58578F6E01D04D5AD49F72A56C947591C463EB76DF9B1DD416974FBCD8E026819584BCDB0ABA31D7232D305B89B3CA53C3FE7F98E7258F87600DC00B9ED03AE943511E4530BE720DA56C3BC555B45789300F9F96A0CE5549243058634ACC13E650E9AA1B39F51DF4FEC3881F0BC6F59030D436729CFD95A6E474A421C1A6AAB57092C8EE75FF869222F28EEDBA3C04F394004B855477DF3205F10ACDDA3E09737C995DC3509E63345CA8B8C0861D1C608B55AC6CFE257B4A494C5E327B66310AA7BD7BA03AA26C160FEC20E1319A2C2435153597E86D076F1FCFDC668FAEF05A0E2057D4F4F6B9B1E418EF3A30760B3331EFE05B384B8C6B7C4AE3C1BE9A8C0BCA1BB5C175EE71432CDA659842F0FC1BD6D33808FB7274057CF08C6320D04F87AA3B4A8E018A139F1FC677D1DED8D8A2AFDCC7F67009515FBFBBA9AEAD63A5B3F99D79719C0CE3F831BF647A8B875A9E088101600A3DBD769554DE0FF598B3C37820F2D0AA0AD6FC137D76C81BBB3033252530E139A19CF5F2815F7A7025009F26F0972A7B6FAA66503A3ED70121B0EE5CB0C6D1A15071E481F58F13E0D835FECA8659E73E504B1157656664F62A3A36619AE9A04F7E7327E0292387FAA00952FFCBFF3CDDFA17CB3F55923534B38875749AE7658F532D4B70740A6A501CBEDB2A721017E3379D999AA04F7D646457D03F0858F35F9677E9454B2FAE6DF5D36B37480A191290C7554E1E5E63C171D19B14926F29B509B626A902AEA1B802F7E2ECC36B52D2A5919E9F1DEEECE0BA141FE1719AE699AEA6A9252FF6800BFECE7E7FDA9FFFB6FD447C97D1B7F196F007ED51FC0F86D54C11FF339BF51E01B05BEF918E46F75147CAB9FFC1F33F7297FF6FF07839231BDDE858C520000000049454E44AE42608289504E470D0A1A0A0000000D49484452000000500000005008060000008E11F2AD000000017352474200AECE1CE90000000467414D410000B18F0BFC6105000000206348524D00007A26000080840000FA00000080E8000075300000EA6000003A98000017709CBA513C0000267A49444154785EED9C777055679AE635D3B3B97676A76AB77636D56EEDFCB1FFCDF6F6B4DD6DB7DDC638E00898A89C23CA39E7ACAB9C73CE39A38404982C11448E2683098D0D180C48BACF3EEF77EE11346DB74D8F47EDE9D9AE7AEA08492DE9FEFCBCF17CE7FE1900B3FFFFBFBF070101F84DB2D8B8D1EC8FACFFC9DF9F6F696EF115AFE0758AD75FFC907FD3B7BDF617F9FC37C2931FF043FEA12FF8B3FE13BF3FC162A3F9D702CE2B38613E24B904961696F3FCB7A882FA9B17FC99DFF87A5E04D4B77DEF7702ACD9FDC8AC76CF23B3F2ED0FCC0AB6DC37CB1AF9C22CA5EFB6595CD74DB388B6EB66A14D57CD821AAE9805D65F310BAABF6C16DC78C52C8C9F8B68B96E16DDF1B9597CD70DB3C49E5B6629FDB7CDD287EE98656DFEC22C77ECAE59FEC47DB3A2C9FB66255BBF322BE3CF2690BFA622ADAD6C6E121A0263F3160CCD7B51BFE7219A669EA074F367F0094D7C2C5009F70EAF81D45F0E9F869968E814CC064EC2ACEF38CC7A8EC2ACF330CC5A0F2E9835CDCC9935CE3CF9D3054808FF918A66880A14F846662E140E5D40EDEE8768D8F744C16B39308FF6830BE8989D4741C75EB86EF253EEA44E52ABFF4902E40BFF7794ABA585C53515AAA1A90B7983E751BDF36BD4EF7D8CC6E967E01D5A40E76123BA8F02BDC780EEC38F915135005B3B8727269063BCFE9F7F120EE40BFDD794071D77515EBCBB7FEC4266F72954EC7888EA5D2678745DF3FE793004D17EC888CE5913BCE340FF496090A2EBD0317D1B5169C59217C58D7354BEA4823FC910E60BFBE79413C15D9617ECE617BB90D6760CCC8128FF548357B7F791729E0EAF83E0BA8E184120CA79FD2700E63A0C9F0146CE6A1A3D07346D3B0BDF9018CD8DE6E63779F5A6FED59F440EE40BF997D40656D123F2029DBD2316929A8F227FE29E066FFB4354326C59A8D030FD98396F0EAD0798EFE8BCAE23400FC1F511DC0035487843749E801BFB0C183FFF54A3671750D2BD03CE6E9E5AA13137DFCFEB7BD49FFFA32C22FCC3FF82DA487087E505397A041BA3AAA791B9F90E58855138799F001FD07D5FA37AB716BA52349A59303A98F3C479DD028F61CBDCA69CB7D9046F84AE13E74D10E0E405600B251F8B068E3F405A59076CAC6DF5FCD829F991FA9D4AFCA36C634CE0DE25B84302CEDE3D7821AC6C2F92FB6EC1307C0739A35F227FFC1E8AA7BE02DB1754EE30B94F55DC39B431EF2D160C81F74CD88EEACEA3FB7460729DBAA8493E16678A435B775F4758621E219A4BDB233033243F3E0BF24707907FDC3B961656DB059C8DA3A731B06807E23A3F4752EF6DA40EFC0686CD5F2077F42E0A2674F731F799C257725FCBFE397410A0CA7BA69C2761BB99394F8737216EA326094CD71682130940096BF95E2932E2DCB2A1A3F00C887AA4151AF3EBBC3A503FF921E0A931F8BB46B9EF6AA4F9C7FC19B5DCD2D27A87FC91B6CE7E46DF9C2D8868BE8AE8F61B88EFBAA900A60DFE86E14B800CDF82C5F095E2F188CDB296FB5A0E10E02C011E35AAA2A142D714B67AC84AB80A38DD755397B47F8FD379024E0F6F1D602F5D2CFDA3A17E0A8ECE1E2A3F5A59584EFD2800F28FF9B99595CD90EE389F9C4984345C4678F31544B55C474CC70D2474DF44B20E70440328F9AF74DB0354A8EA4B80CC7F8BC543F57B46F411A0DEAEA8A221394F8747685B2F6BD2018AFB04B2546871ADFC7F25FCE53F84FCAC2902DE7DF601FC421225AC17F837F7FC1010FF2007F297BF646D6DD72FF9C5C661137CB347114C70C10D5710DA785573DFF701A87A3F02DC670228D38609603F9DA3009A5A9671C2913055EE1380268913E5730AA0842EBF5F9C2BE07A8E19B18D9F3F7CCDF8E4F0A5474F3AB6DF9CB74EDCC57036979EB16BC901F297FED4C6C67EC0D2DCDC68EBE08190C22D88A4DB421BAF8033B0BA8609C0966B886EFD1E0E14803BBF1960DF71A3729084A2DEEFE955570F6195034D39512F1E12F20270FC2C8C7B2F19170E5F7EFCA46FF7ADB94DB947175EF1DC89BF75FEF4FE920324B8BFB1B3776E64659DB377F6426CC55686E54D16881B8824A8F0A6AB0A5E68E36505309C00E5F3D1CF87B02907FE56080BC067439839504258DCA357E0CDA6A659F29C2A18D2BA88EB7895A23146E98DF5243F3E700DF327AF3D999B38F8C593E0D213C6657EBB096E077EEAB203FFD775C79201FC0FBB77ED82B3AB473393EEBC939B2F0C4DDB51B6ED4BE48C7DC9AA7A9B05C20490211BCAF00D69D24238BCF91AA204E077149132C98102501511591ACCA9A58156858DE8A70B259F49583E5B8905A42E719EE4BEAD047AE09A71FEE4F5274FA666BF980BAF3C657C3B782F7EE6B6137F47119C26B79D4B03D06B93A7CC97F00A4F47D9F00934CF3C5089BE82BD9B1402694BA4C246B5690E0C21400963AEB208F0BA2A22D16D9F2BC8493DB71470039B68D507720A29E614227D6095F481BB4D5308DB98364E21D2070AC4DE672132341548931B555853CC81C6FDD7B120E0761EBF3B1F5B7BDAF85EE83EFCDC7D277EB16997D2CFDC76E0EFDC77E95A1A809BDC3D606D658D80C44A63507A0B72DA7661E4D843827C84BC89BB482340EE0411A9035CCC835711460746B6320FF26BB10C73EE03C17DE0EF34D2A50458C14984AD12A7106E604CAB2B19E33A651251ED0C9D7882E12C4B0471A309A4E4C37D57317F9CA1BAEBC4DDB9E4C6B3C68F2266F03281FDD273375EF1DE8357BCF6E0258FDD04B80B3FE7F5E79B94960EA038308FAB90B281A308CB6C4378561BAA868E609CE352C5B6BBAA4589A4D34219BA5281B958D58A09FF2D9538AAF573C4106042F72D4E22B7C1852AB8905D6C6534173E44159BE93A99854DD558A69176E6423591989CA8179551BA70E7452C1CBD3A37B7FBC4DDF9F496730BABA3F713D66EBC4A68A25FF9101EAF2F6FDA4327121AE1BD44A82F7BF2739E7B9616A05D64ADD139B917451C4A8B3AF722D4D08288DC4EF4EDBE842D271E227FF40E43F6AA82C78DB40219C230168002F7692F780BE9AA99D666616EB7B530DEF690AB2CCD8575FB9EDBC62CEE01A5A0183175CEB8307B796E6EDFE9FB73D91DE78D6B620FE055BA4C80BDEEB70FAFFBEFC56BBE84E8B397A034C7BD2422B85F78EFA5F6899616A0737C1301F6C035B105013983689A3A8FDCA62904A73721AEB81F53476E62FCD857300CDD24C4CBE06A5F410CA70B23A598B47FAE425DE5418671C6F06F903DF225F2C6EE2D2E149EE6C2A7CB547DA5D57978019B4F1A8DFB2F3C79228ECBEBBEB0B021E1205E23A4D7FDF66299FF3EBC11B00FBFA6E4FA2A61FE82505F16890B2981F78AEF345ED524006522F987ED0325074A08139AD1337B0C16E1F5D894D206BFF47644974DA077CF15A4570E2220A511E9D563D873FA1EFA0FDE67BEBBA19AEA3005F16918C7F73C3391A86272571593C249BAD0B413AC625F58C3CD8C5A6B7136EE3D3C67DC79F6F1DCF4E97B73853D178C164987F03AC1BDE93F8DE541FBB03C701A6F06EEA3A6B18C7AC5671F81D169BC2AB7F1FA8AAF681AAFF9CDE035FF19FCCA7FE6BEB9B9E5DD2503985D376ECC6DDE05978416AC0FA9817D6C2382B33A119EDBCDC2328DFE3D17105FD405DFE44614B6EDC0CE530F50BFE34BC4775C4708F3A16AAA553B63AAC6CA8577940B2594797349DBCC3C33DA354F3F324E1CFF7A7EF7C97B7325FD1717AC92675588BE4987BD1D3C8DB7A8E5C133782B880A99C1325E5FF59BC62F09EC973E04F9D46DF8153FFF2BC27B3D800ADA8F5F07ED5F5A80DE296DC690825164D54F20B67810D6E1B55813580EDFF456E5C0A48A11344E9E41EB162934ADF0496A44CDE02C36CF12CCC41DC4126424DB19AD98880B6FA90A9EA943E46A4BDB0D7EC5D5D6030C1E7AC0AA7A6FAE74E092D12675166F10DC5B74D7BB2154E88CD23B720DDB8F77A8E5C1FB09487399801289D374297081FBF146F001BC1172006F861C585A80EB82CA8D9F84346043583DC20A069059378E4043173EF12F856D542D12CB8690DF3881B4DAEDE8DE7D15E53D7BE04737FAA5B6A061E22CDAF6DE43E6D06DD5CE68B9F0A66A69D207EFA8ED8CF4850513F78CED7BEFCD6F3B7AF749C5E065A36DDA61E5B677E8B41561334A026C05A55D0FE0BDF083783BF4004353C069F05E232C910013B7BD2132815B1E7A106F85292D2DC0E092EDF0CEDF8675E1CD78CFB308E6A1D588291A401AF39E6B7C3D3C132B115BD88DEC5ABAB46E14E9F53B31789015B776021EB17508CCE844FD96CB289FFA826BAD5B84A885B240CC18FA0D6AB77F393FB2FF0B71DCBC7DFA2CC3721FDE25B80FC3F7E3C388FD789FBDDDFBBCBE177100EF476AFA20F220411E5461A901338527DDF886D2012C23DC37094DB49CDFFB4EF821BC13219A5D5A8081F185F08AC8826FD620EC12FBF1B67B11DE74CA844D543D82D2EBD1D7D787E943C71096D38ED0DC2E64540F21A27010D91D87D03BCD3E31BF07CE5135FCDA202AB6684E148055DBEECDF7EFB93157D87BDE684770E2B815CC671F471DC04AF6751FF1FA21617D187590D7830A9A5C3F8E3A84151107F16B427B8DB94F398DD096313C97E9C016DD76086F875184F76EE42CDE8D3A82155147EE5B2C6511296DDF65ACEDDF874443297CE24AE09EDE8795813578D52E036F3AA4A2AEA903270EED41696D0BAC422BE118538F88BC6E84B1C8F8660FA36CF4026A38B0FAA6B4C039B206B12D178CE3471FCDF5CD3C9877361C6225DD8BF718A2ABA30F28AD5C1461451FC4CA9843F8985A19CD6BF42C3EE45572198B019629A73D75D95B0425B074B7BD1B41680ADC61BC177314EFC71C132D2D40BFAC01DE0C9A41C3D415D4764D222C268D39AE0156D16DF895631EEC23AB30B97D0F1ADA07905C3EC4E2D20EF3902A826C546D8F6B7217FC8B76A272CB0D2437CD60437003A26ACF61391DF741F834D6C51DC4DAD883F8E419AD8C3D845571A259AC8E9DC52A0294EB47FCFC7286A6807B33440BCD45680CCF772375A7CD6245F411BC273281FB20EE383E543A4180564BD7C6D8465419EDE3DBE06D18445AEB11746E3F8FBC925A84C41AE01EDF808FFCAAF1B14F3156FB14610D0B4B54611F522A36C32DB1191B43EB6017DB0EFB841E38A58D237BF02AAC2C6DF9F10CD613DC868443581F4F80D41AFE7B0DA1893E893F4CCDF2F3B3EAE335D42A4A8A8080D3F29AC96D5A5E532E5B114DA7451F253471DA71BC1F7B1C1F98F471E249ACA256269D5C5A80EEA9DD46D7F42138C535C33BAD1D41B99B51D47F0A43BB4EC09053009F08032CC26AB1C2BB02CB1CB3B1CC211376ACCEE935A3ACD0C3708CA32323DBE1943E8E8CBECBB0B2B2C3EA889DB0489C5500358814AFEB12664D3ACCEB617E8E4A3A82754987F12E43F34D025CAE87A9C9712B18D6E234159E26589AD38EE3A38413F85844709FA49CC21AEA93D4D34B0B30BA78B331A468924D742D1C629B55880664B2912E9E44D3D6F31898DC8DC4D42CB84514C03AAA191FFA10A45336DEDF5484C0EC7EE4366E4554F16686ED3164B1EA2A80910498340B739336F0BA81903610D6464AAEEB93794D11D15151B30C5DB62D749D5452C96B2BF83909532DAFD169022DFE043E1289D3C471C927B19A12786B534F635DDA19D1D202CCAC193316B5EF51AD8B4D5403D60555C123B985AD4B0FA28B0691DCB01743D397D1D9BF1901E1097089AA80754C073E0EA85115DB32A209D9ED339CA12F22B7FFE22240EB94C3B0E48461997A0416FC78236159109639C199A7F24A59A41D65DE93D0D52B292BB0140486A98093F07CD66D026D75F229AC16A789E3084DB436ED34D6679CC506C339D1D202B408AD345AC7B421B26808D90D5B1094D985B501650C5BF67F457DAA894EA99E4261FF518C4D9F4359753DCFBDC4D1AD75B0491CC0EAE02658C676237FE81A4A274C0E8CDA099B5402A4AC08C992B02C09D0CA04CD929FB3CE38C6BC77944582CE93CAAA5C2745C1E4388147B77D9C204E33414B7D0A4EA029C711DCFA8C73D898FD192C28F3ECCFEE5B582C6111B18B69365AC6F5E0435F3A8BBD5F5CC910D2AB46E196D088B541E570E7E8965E398CBCC64924546D433DA78F893DC7909A550007DF14B8A60EC23E6D8CE2D73B2E2807AE89DA053BC311D808A8F4A3EA6A937E8CD034707686132A74DF560542739D1EAECA7526702B25449F71DB5A01967E06EBD3CF617D26DD26CAFA0C1B29CB9CF3B012E59E5F5A8021794308C81B8143EA103EF2ADC4DBAEF9AA4824578E223CBB0D99652D286B9B400CAB6F6EFD08124B3723A16E37B73557D137BE0B0161F1700E2B827BD6364E1F773480D1BB616F380A5B02B355C08EC1D62481679DC10ACA1C276D89E43A53FFA615068197A485EA2774DC626E13A749889A80D169B0C821B8ECF30A9E4DDE45D88AF22F2D2DC0F8CC72842764C237A11C9E8621AC096DC2EBACB46FBBE6C136B408FD3DDD3875F228928ADB601FCD46B9A8972EED4710C167751E47FFEECB28AC6C82BB5F2C3C533A3480317BE190791C0E84E66038AE00DA651D877DD609A555F147546BA2E53B2DD7499190E2B04AE099F29B82276E1370749B384DC2548029C7E55E804DEE45D8E45F845DE12538145D8263D11203CC6D9B31D64D48133D858838037C93EA609FD88DE56E4578D922890E6CE324328DE6B60EF8708160C126DA2DA1892BAF2E78A57522207F0AA5235730C00D76626AA602B836762F9C09CC89722430C76C7E9C73024EB927B131F5985665D9D3E985E2A338A9AC044BD7A9C290764A0B55290CE23895DB7468E7619D477084665B700976943DC139955E864B19557E65691DE810DB60744B1F66137D146DDB2EA0B0AA15FE1169D894D48C9501B5789F0B86CCEA41241675A81D6152F9305CE29BB874A881435C0B5C123BE0983288B0AA59346E39A700AE2340170213398B724FC035EF241C08F3FD18C977D2DB69CE9390950678558ADE8E482B22E14A70999AE32C086F119AB88DD04C6E8323C139975E816BF955B8555C835BE5B5FB969636B7976CA1EA185B6F744CEA846B522B73E1280A07CEA063FC20B20BCBE01799A5960A6F7994E075FB2C36D259B0E5BC9B52B99961CCE2114D90912DB04BE8865DD220527B2E29801BE2F7C14D00E6894E2A78AEF9CC67494755D82E3ACF044F6B49F875D58E68E1AA721CC1B1282878B6054FC139955C8693E63605CEB5E22ADCABAEC383DA54FDF97D4B2BDBCF970CA06FE6A0D1237354F580DE695CE967D06925939C8D2FA2677C276213D2E01A5E40504D78DFBB0CBF26C8B7DD72E1CB35564E23C33E7F103631EDF0CCDF8DACC11B0AE0C6C469B8E79F841BE55E700A1E941DDDA78D62A6FE8EF0562668ED898227F94EE03164059EE4386BC971E2384A1C27E09CCBAE28702E02AE52394EC1F3AAB901EFDA9BF0AABB4580764B07D0503D664CAFFB1436915CAA72B6959B4BB2B60ACDED4352FD1E0CEEBB8C8EFE11044725736D55818D6C9C3F20C8E5CEB96A7A892F1B437EDB4E64769C84A1FFBA026891348D4D8527E151487885A71544719F0CFE5A734C78FAF84578D2CFE9F94ECF75CA75F9CC6F2C0E8EC59708CEE438BA4D87E651FD393C6B6EC293E07CEB6F696AB8BDB400C3737B8C899553C8E64A3F38BB1BEB832AB131A492003BD90F0E21BE7C0285BCE5393E731605A595F00E49E126A601E6319DF8C8BF86A35D2542B894EDD8750BA5A3571440F3A41978159D8667D12978159F8643F64986AD36962D565B93F3049E4C10AA113655566BB6237A9E73961C278ED3C155334CE9368146B7C1474470FE8DBF414093E8CED2025C175866FC24B81EF62C0809E5235C988EC29D9B9655BE25AADA1AB834C8E5849254FB2957F8E730B2731629E93970094E836342176C9386B131B21321558791337C5B01B44A25C0E2330AA25CD725B3EF33CDB31F99260B35BF4A636CEAEDA45858E73064A597A3EB162BAB1487722D4C3DAA3570DE2670BEF5B7E14770A2A0E63B0869A15A9718A07FD156B8676FC1AAC05A7CE055C2AD4C238BC408E24B8755C1708EA9404C4137F2EAC7B9E61F450AC3BA6FEF15F48EEE406864129CC38BE166D80247C3A7886BD76661AB9419F8949C816FE9191690534FE75A291AECF3B4822161ABE7BCA7CDB0F4738E2AD76921AB85AB84EA0D78D56A6E639812DA6DF837DD51E082082EACFD0B84777C81B0CE2FEFF36F58BA1C1894CCB08C2B8777F6082CA23BF0A64B3EDE75CBE3B2B49D473D9AD1D1D58BA95D87B8D2EF407C719F1AEBC20A8791D571186307AE7353DD0A37DF4838453722A1F39A09E07EF8119E6FD91958A44BEBF234EFE9454385AE545BD31826612B7D9DC0937E4E5557C253798EE0BCEB24CF698E93500D24B8E0D63B0815115E44D75D4476DFA3EE2F2DC0C2C6316349D308A2925859B989764AE9C30AAF52BC629381152E19686EEDC0C9C3D328607FB831B85CF5873185BD08CEE94660FE04CA37B35A6F3DC1B6A7068E5E510AA075EA01F8979D8527C377558269CAE0DE4EC633699455D160E8EAD5D6265F6B53A4D2EACE73177835024F0B595FE53813380955420BA3E3C2092EA2FB2EA27AEE23BA57E9BE95F5123A30BC68C298D27A1C6D3C805758DD8EC0A834B5135C17D6885FD818E09D5C877DFB66D0DAD98F849201DEA96B8405EFDC7924B6C22BB51DAE293D08ABDC8FBAAD37D1D8BB5501B4493F80A0CAB370CC65F89A9603DC142FEEEDF48AAB1A64B62A76ACB60E0C5D29187A7BA239CF94EF9E09D790363ACE042E5C1C27E0A898DEAF10DBFF00B1030F9616A05D44B5D19E5B65FFDC31140C9C45C7E47124A5E52020364F6DA9577895C332AC02565C6FD944542389F789657768C706DB9CC7411C133A38FAF16C4DE656540E9F54006D0D0710584987A59F520B02D9182F866E3AC733D384214DB23EC7AA514C0A86E43C537BB2E83CC9735224DA548EA3EB04DC3DE5B898BEAFA807881B7C80F8A187481C7EB808B0BFBFDFEC45F5FCB9EA6F3D64AE9F8D714BEE30BAA40DA8A31DDEE91D88289DE27DDE0BE81EDBCD263A1D1E9185581B52A766E337B86478C73587CE6B5537E0C3F2FA6015D5024BE64E87D411A4F56A93889DE12073E03936CA27D46A4AD6528B85C3D4B2A84699BD9EB42B8EC55A83ECC656C5430A86384F8A85384FC1FB42C10BEFFA92E17A0F515AA88ADB08EEA10E0E29230FA9AF97166068C1B0D137771C1BD814BB322C030C1D5CD5F722B16EAF3AE2D6D23D80A0886438465562437813567814E30DC74CAC09A8405CE908FBC749F865F523B87216593C9925001D3267E15E78CE74DF425BBBABDCA7DCA7E53ED9A4FC76DEA3FBD8AA48B55505839556729E382F549CA7C39370A5E3049EC971481E26B8CD5F2375F411D2461F2F2DC0BC860963311F720ECCEAE62452CB3B6D352A07CADA2AAA7804797CA06DCBFECF505EDD008FA044D847D56143442BC7BA72BCEB5EAC9609455D33A8E541E6AC3EAD8D71CC9AE5E876464D1CFA0D1F7DCE55CB4FB51CD09A6519CF54BBC24580F4797AAB12A0F776ED6C519E719E84ACB82E81E19A34FCF55370638437F61886F1C78FF888866A635E347CE5FB5F38841DA2EB8CAE3C1F985C390643ED38AB6C0B56FB95C2912BFBE4F241E4B0FF4BA9DDA136D1C39F1E447A56219CFCD3601BD70A8BD81E7CEC5F0BFBE401DE17BE89F22DB714407B0234E74A4A6D5A6431CAA659ADA7E83E6998F5DCA7555D2E044CCB00095DD5E7119EB4296C8A55CE8BE8BAAFAAAC96EB98E7082F79B384EB23CD75634F902EF0B63C41CEE423383ABA3C76B0B3DBB22400AD22EB8C1BA2DA08A2126E496D48E33A3F814DB4350BC6FAE00AF867B6238BE7620CB593486513DDB3F302FA46B723323E1D0EC1F9704DE722227118CE866D48EED66E6BDAF24482DC629405A9BE1C5D2FE1ABF77C5279177B3EAD5996AAAB8A064357FABC60B62AAADA9A5A141D9E382F99E12AF0C4713AB8AC2D73C8DA3A8FBCAD8FE1ECEC86E0C0C027049848FDD58B807C61070664F618FD0B276115DFCDC34525F880FB3FAFD43664D48C2320A305D1D975C8E27998E432BAB16E04B125A33C17338BD199CBA86FEDC5A68058B8727A71CBDEA14E66A9368600E57EADBE30904D8BF47D12BE72DF422AAF2C09B49594B68A52EE23406994C57DD21C4B8FA7575B69513478741E5D973AAAC215595373C8A6B2B62E207BFB02F2B7CF29802141412038D12CF5E1F785F8C200C3E2738C419169F04F6B867BC6304F225471F767C047DE9C8563CA31D8DF8793274F20B6A01D1E494D0439C0DB9D7D082E1C4305CFC5F47F7A1249E97970F4894760C194D64867F09806675EADFA4AF1D0A60E3D7C65CBB218BE26F779C946A5E1962C03D484A1DA1553C58D213C291849522C4CCE5B84477039DB8DC8DD46783B80C24F7F07A0409CA36AA9FFF15D205F186071D77E63231F0F2AAAED62139DA10A8805CFC5FCDA3107BFB44CE204D28EE307F7F090512B9C99172DC3AAE0CBBD61684E273CD3BA115EBE078DDB3E47EFD6A3080C0E37013CA4002E4E1E5CCDEBF733AC790F43CDBBAAEFD3C257B62B12BECA7D0418D2FAD47DAA41668F97A0E06995367DFC093227E93CC2CBA5EBF23E05F208AF781701EE9C83FB269F671DA83B51AE972937EA2FBE0DE40B03744B6C337AF3F1D582FE7368DB7282B72B8BE11B95CB0D753BDEF52C6741294143CF24F26A7A390BF7D37DFD6CA86B6115CEDD2173A66B52075C9807135A4FA185275975077E9CA82D4B7FABFA3E1BBE0428F3EE62F8B278A8AD8A9EFB18BEAA70F47FA5DC27A1AB158CC784F70459DBE695F3747855FB80DAFD02710E1E9EBE080D0E7E16DCF31F8F11E0CFBE09E20B03748CA9353AB21571E71DB5F0B2EDA8E5436A8DBD534848CD864F4C29368637E02DF7429E19CCC63BDC446FE23136597985F0FE88254FB55A44B5AA49C43E99F7554C8DB40D4378659276566511A069CB6C2BF9CF34F34AF595C659C2D7C7D4F749F108EB60E5354D1AD2EFE9EE4B23C00CBA4FE53D866C2E9D5733A3BDEF02771B28DF4D67F69C84B38B1B3CDCDC7E1F40F9DA5D2A99FAB7CF827C61805E19FD4637C3883A5CEE9BC1912EB34735D183D39FA3A6B91381BCEFEB10598135218D78C7BD802B7D0356FA16F394D600B21A26E16BE88145641B5762DB9139A06DA405E0AA6701EACD33F77D0250DF30BBB2F7DBC485C1D3EA6B1AD7D8F7A91997E11B47805AEEFB5A731F5B956C56DBF23D7CB6848FCC8EF0C9A6069EF88FAE9884A38BF6F89A9BAB1B626362BE0BA0FEF5A304B89AFAF33FA80F4CA91C35C6576E5347D5E451074F5660393C199ACFD3087C279CB1E9CF5056D500AFB0343844D7630DCFFFBDE35188B75CF278BC836EACDD820C3E2D9ED47C1C8601AD0A5BF144AA005C2BFD9FBEB67A66FA10802EE5974DF9EF2940D5FBA9914D5B1248F18893E2A1C2F76B95FBA448C8134E9BF9685803DF362AA66A2B1CF9A0A480737270842123035D5D5DDF179EFE7D57086F3DF52F5ED881892583C6ACC61D2A2CE5C0E49AC00A2E526B11C5256A720557FA955B51B7E5338CED9A45625A163CC2B2E8D636AC0D6FC17B5C34ACF2AF467CCD6E74EEBC8EA2616D1616809F249F56270BF4F14DBF35A9CFBEFAE26013EF69C8DCAB6F95656C7BB6FA4AEB92428099137CD78FBD4FD077641E4D7CD39ED89A5D70F20850E01C1D1C90919E8E8E8E8E17012721DC49D9537FAD87F10B035CCF95FEDA509E36E54DF274F67E72E68F8F7FA953FA7E0CE95C4E2206BA2CB5519AE88BE8DEBC15A15129700AE3D998A47EDE1BE9C506AEF4E39BCFA060549B85ADD278E25442F87B00949B42327D7C1B40291E659F3E420B9F24ADE16312B1357BE0EC15AEC0D9DBDA213525E545C07D49505394A7A9A5F9C9F385E48501BA721BE398AAF57FABFCF97C086F6B1A08322CB787477979263AB68A0FDAF420BF6102891563C8E1E1F2D1039779E4B7179E817170896D808B6112766953886BD30E1759A5F3142A1DB8F65980CF6C5FB4F9575B5D3D0F5056F3B27189EDBB8F9C71ED2D032A763C4254F55E3899C0D9F029D3C4F878B4B4B47C1FC72D10D21E2A88FADB1FBC0F74F60AC3A6F04CF8E48CB050D46399731E567A17B3CAF62132A715752D5DE89DD843A09D48E38337724E3AAC688C9B689ED29A398F8C9C6238FBC6730CEC5F9C442CE9C03F1820C7B7E4A1FB289C7AC007161F22A2E6005CFC1395E3AC2DAD10171B8BB6D6D6EF02374F5087A874EA25EA779CF6F7EE03F907FD2FBE374295F67E2B4CC06EBEC6C802F6783CF3FC965B3E4FE91BB0CA339BE1D189D3C70E22ABBC958EACE0BAAB9D0F21F6A9ED4D44F90E346FBF8696A19D88E60125E720ED6C8C0EF04542586E4B46115EC6D05D1846BFE251910370E27F1879E30BBE1F17A22223D1505FFFFBC01909E5229543BD49FDE577B9ED9BBEFEBD4358BE512052BFA43ED3417A06C51A03730618D29578C9320511D9CD387460066D9D3DEA99101BDEA99346DA87E7A9E54CB53B97B189ACC01DBB6EA3A2A147BBB19EAA3950FAC0E78B88BA71A4AAF0D32924B089CF9774DF4162EF97DC2B1E8653509602676541701111686C68F87DE0AE1144B5A91591778E5B7C0BA8A50068969B912ABFF0275430C54745F9C63596D6084C28866362175B962278F3894DCFA406DE2F6E446AD508827832CB32AC0656918D70E1630E8E49BDF02ED8859ACDC7B51BEBA90739C66900E5F6E5E212F5B93ED09337C9435A6E22A2ED37F02D99854340A6BC15A88A88602E03EA6A6BBF0DDC2DC2E9A33650FF85923707FA9DF7CE5A1280C18656B380D43AB390AC4EF903FE2B554BA9F7ECB3B57736FA25556375501D67E35CAD89F62E42785E0F0C7563746107B7D4CDB0E22905FBE421A4F5680B55F3E467016A9B18B5853601742ABD04EF9AABF0AFE7FABE94E707037395E37470D5D5D5DF04EE11810C53EE5241BF09D8F39F5B728001D1596661C9A502F2A7D45E3DAC1DDDFC16BCD2BBF1099F607A8BF78D9739F1D456443DD26AB6F0F8C7B87AD8C6AF643FB24D271336A6106012FBC0E7666159A43A317C3DE45455DE21D804F2903ADD2EBFC7C7DB1B555555CF837B4808BBA850EA7F53F28E71DFFB0D74FF6800C333EAF5B05ECB3FF88A02696E0E17DF28A34B62A772A49CD0FFC08B47E0783FA4A47B1A65836790697A4E64031DB8561A69D37D60398120F0EC0BCEC38EC7DE2C038A09CE66115C6969A97A268F2F5824C540C6AB18EAE51785B6E439F0D910D61D2800C3B23BCC82536A05E4BFA1A228F5C65E92A33CA28A8C0ECC8FEBC25BF1810F4FAC1A46D1F8E96D948F7FAE9D0FA4033730F77DC27DA02C132C32CFC292D3897940252CAD1DB4B75BF1F442D9537002ED045548BD46C9BB617E6FA77DDBF7FE511DA803F40A379879C594C88BF96F54B71ED6D676CE0B9B12EAE19CC62321B17D70CFDD85B43E6D99B021F9002CB8035C2DE760F818FF7A1FDE5BB67652E0DC39E817E4E7A3A7A747A04905ADA2DEA3FEEA8780F6A373A00ED023BAD4CCD9374A40BE4CCDEA20EDDD02E6BDD2FB398D6CE3DB0068F7443624EFE74334C7B0DEBF0EE6D62E1A38AE97F2F3F2D0DBDB7B83B05A286BEADFFFD0D07EF400DD4332CCD8300B4847EA861ED62E81E9F3B10D3C54EE110C3B1EC2B473D2564B8EDC9070D0BFCB417F82C02CA9FF4EFDF93F2438FD67FFA8425877A00ED031345F208A830C7A7EB4B175365ADB68398E1B12637C5CDC34E7555FBE90FFBC14C09EFF1D3F7A804E3EB166AE41690292EF7D6F3E2A05C6D6D67121382A75477959D9CFF902FED91F03DC9239F0877883C23FF59FF1FF00388B76464A61C2030000000049454E44AE42608289504E470D0A1A0A0000000D49484452000000500000005008060000008E11F2AD000000017352474200AECE1CE90000000467414D410000B18F0BFC6105000000206348524D00007A26000080840000FA00000080E8000075300000EA6000003A98000017709CBA513C00001FF849444154785EED9C776C9DE972DEAF0DA722C530ECD8815381C4499020F9C3FEC34E60C437D7866124F7FAFA36AAB0F7DE7BEF4DACA2D87B112952EC4594488A5461A72869298A12A9CA5E458A92D879CEE499F7FDBEA3235EAD96E46A77B58016181C9E653BE7A767669E99F7FBF81B44F483CFFF7D0D020CF0731C9FC167785F53409F017E0678FCF4FB18A5EBB3023F2BF0B302BFD759F0BD7EF11FA3867DDD9FF119E0C7A881270D0C7EF089C4BFC6EB4842A420FEDDA7F09ABE4AA142819FC00BFDE7780DCE270D4EACE091449C38B1844727C43FFD2E5FDFF701E04F01E836433331B5DA0B3CD74481E79AC9C4CC7A4F813984C7BFFBAE207ECA00FF1850EA19D2E953A735DE3105947A699AD2AFBEA4B4F6354AA87F4E1E518574EAE4498D02B2028FFFEDDB06F92902FC978090AAA6AA8B7F9C36A96694B2AFBFA2CCAE75CAE87C49E73AD6E82C20A65C59A5C8B23B64EF1DAB403CC1AA8C41FCEEB705F2530228EADCA913B2CED9B9F8ED255C18A4FCEED7947BE315E50060961E4056612A00265F5EA5C44B2F2830F32A99D9B82A697D620A3FC314F18FBE69909F0A400334881106676669BB1B9D77998A7A5F5161EF1B2AE8794D7937011010B3AEAD0B158A34860A53DB56290500930030A1E505C5D6CF91677C25191A9AAAF5B1073FF32FBF4988DF35C03FC39B6B627086A78DF68393CBA8E8E632950D6C5049FFC63B005985EF05081526B5BE102A3CD3BC42714DCB145E31410EFEA95A5DC73630C8C7C7FFE99B00F95D01FC377833E9EA1BF40E4FD9CF6B7F42176E6F51F9AD4D2A1D0440402CEE7B2320E629699CADA7405107DB641DD407180F80B10DCB1453BF4401B9FD64E91CBC2B7FCF89D778F441FC938F09F2DB06F8DB78F19EF070ABFCA61C3D02F6D3EB86E8E217DB5479675B07B04C0158D4275528EA20D238FBFABAA8839CC25F0E70450730AA7689226B16C823B1898CCDED7714900FF1F8F38F05F1DB02F89B78C1BF44DCE737616E65BB9754D64E355F6C52CDC80E00EEBC03F0FC2054080516290A7C072054982100BE140A148D442F85E39BF400D60160ED2285572F5050D913720C2DD09E3A65B8AF28BF158F7FF275417E1B00FF148ABBC22FDAC8D0683F32FD3C55DF5EA3FAFBBB5437BA2B00561F15A0B0324703185AB5402155F3E49B3742561EB16A93E1A9E62CE25F1D17E43709F0DFEAD739FFE8B4FDF29E696A7AB8478D0FF6BE3380C117E62908E171F63A995A7B6C29693D8B478C8A06FFF0A820BF0980BF8317E10ED5ADF38B73F109D92FB8FC05B54CEC53F3F8FE7B017E1B29AC2A500518583E4701E767C829EA22191A5B6C2B69CD63E1DF1C05E2C704F85BF8C5860037CE2FC6CAD669E75C5527353FD8A64B8F34D402780C90D5D730B6477548E15AA470B5A881DF6013516AE07B0102A2FFF959F2CABB4F367E197B78EDEA58588EF7F0DF0F03F26301FC73FCB23659E78CF7E372AAA871F4155D7EAC11F02E4D6804BCE6877A0001EFCB007E2C1B1305789135B289BC03B0629E0258810A40BFB259E2F0481F2473C710558DFC1881F8FD0F813C2AC0BF7FE087FD473CCF4608D31A1C9FA9A9EC9FA156806B6570AC3CA42E4713E071FD63F57103617835F76407AEBA2B2D4CC5F0169D1FDAFCDA463A063E301A3E50766009308C9B48A5AC7F411512DE41800264E934B99C6925634BE70D25AD27F16886F807EA7B07B4DFE0E0E78705F82FF0C521884E841BE23F20BC21F957A2CE7907ED155C1911D0D4509577B0F6E900DE53016E5395EA01873705C0D2814D2A3E30891C66948B5726117D80110018F621808AFA5415AA8FBEC5CFC83EB4547BFAB4B1E21F0DBAF05E7FA8403B1A4043230BFE663A75425D1D49236CE3E0BA9D56D98574DDD4294D559C5AF354E5E9D73E9D7D41FD63F5B18966F5F11452C61E10F0780AE139F8B0CB84849615620F18D728A79068C503462085C32E427D1C8A020355059E9F13A9FBA1F0CA1D252BAF2435ADD9F6E41B1B1AFEFB2329D0C8D476D3C8CC763F30E7E6B47B641E067EFB3D0B471F6D5CE500358EED08D5096048530E86A6DF711B91B60D485BD5FBD52275D9FB1D6C1E427D98428A07DE08135DD0A337C6610A51D759BC4850D759C997E51CCC00790E8E05404EDFA83A59FF7400E101831920EA9F0AD0FF100055B86EA937C8D4CEF78D92D6ABD81AF158F85F0E95C24666F6DBA6B6DE9A900B732F525AE6EFA5343C5A0ACEEAD837754BD43A84E468B3AF4C685BC777D12C649D53BD9EAA3AB5EB0AE5019E9C3E90BA6AED43FD3BCFEA1B9233B0FE089777F3B55865F11CCCBB4075A12AE660DEC4600AE14D8C582400DE5B804B021ED740A140C09300E7F4007E587DBF96D62553E49A78596B686CA9F84783AEC3013407401B2F8D4FD1530A3C3F4DC94D8BD305D7969F145E9B7BE5115BA60148728F2DD1560D2D53FB63340DA8B1616CF7ADEAC4D40170FAF090B66F53770BF014F5BD53FBE42E90E1895DA032C2895D205659AC3E0970E52D406E20485F9E832540A50333403410569FF480D2C27C550AAB9FE7AF0D2C9FDDF72C9AD69A465E95E73206064F0F0F100AF42E1827C7A85A74A9160ACC1DD8CD6E5F9ABD38F872AEB8E3E98E4B78BED6CC3D9182CFD56BDB1F6C52E753A8F181ECB6B5DC307864D3539E6E79C09D57AD7DEA0646A97FEFDB03AA4B84F7CEC05CFF00304AAFFEA900597DFA00397D0F0B30A87C56E35B3AAB71C879BE6B7AF6A9F674F83515E0A3C3038402FDCA66C8ABE031DC7B25D979C791E7B95E4A6C587C55D9B7B6D836BAB15ADEF150631790AEB5F04CA6E4B2ABD4F77C87BA9E48DBA2A62C83ABBC232D4BB96A5BD038C4FA4A515F3E2F51B181E1CE7B7095AF6EA2D545AABA07D45F63892D8C6AA091BEEC01751388D24018DE57010CC0D70455CCEE79144CEDDA643ED7989C7D4AC6A94FE97478D7F100FAC22359C60F5048D13DCAABEF237BAF28728E6BA1A0E2094D6EC7CACB2BA36F5EF43FDBD9CAADEFD75A79A7909D7F1A955DBA4D776776E9DA634C1D4ACD137B3FFDAECB8D03F074DB17750BADD4BE4CD43EAE7FEF360FB9CA7FA7FBEAF93F357D85FF43030951666091BE070CF4C13466758654CCED07944DEF3AE74EED5BA63F27B3B467228C539F91E17115C800CD637B28ECFC385D45E73DED5B466EE706C821BC949C636A28A66676B77660EDF5C0B3AD5723F37B9AA4A256AD39D2DA2D2C9BAEDD9DA2078B7B747562972A00906B1E5B165579075757D2F7C98324B9FFC3F64557FBD4E6A1D4BE77BAAF54DFFBECCB070D34EC0C2B32B8624E1B5A39B7EB533AB3679F334996E9CFC8FCDC73C42499A63D074044D4F5E32BD022AE97028BC728A9654E0074CD7A405EC997C8C5379AE749F2C818A28CCBCBBB371EBED9189DDFDFFE6266531B7EEE2299BA25505042298D4DBEA08700D93AB62D767EAC3C75F32CCE3F3875F90C443944CAEC929DF760ED7B6FF310F6E5DDEE2BD2F710FE0FE028BC6A6E37B46266DFBD704A6B9B35455699936495314916E9129EC95944DA249944DDF87A00FD0BEE934BEEB800681AD34371179F51F36DACD0CF1421A59BC809691D503441177BD776466676769EAC6AF76F3D5D233EDB659089B9B534F3625BA4F6C5DB9BD83A4BC3AC5BDDF3E659DFB6BCE3FBE421D27B6BDF7B9A07A7AFA87F5F625F02A1BAA8EAF9BDD8DAF93D348B7DE7BC69B2C99C221B00B4C946C9C2C766E794489F22738459CC4D15E0E32335114E6156A067CE3D7243336180FC3CBC7C821A47B6C573EFE249728B6F2487E03C724DEEA4B89A194DD7FD37BB138BBBBB93EB5ACD955B4FC931289D2CBD92A9E062073D5FD9A38E075B0222AFED85F214D32C94A71CA4ABBE4FDF38EB260FA5F6BD6D1ED2FBA9EA7B5FF7E5748DA89AD726362CECC6D5CDEFFB95CE6AED73A68895670B707608AB4C942C00B3C8E0609832CC63641371757606BF0F5F7F28866523C5070A80B1BDE474EE0BF8A7673A8021A50FC9BF0CDD0900ED5286292CBF9FC2538AC8DAF30C3A7635799CEBA7DCAB2BFB7726B7F69EADEEEF3F7B4554DC32201A8DAD6F2AD5750CD3F0E43655DFDAD0294F3D40573D9F7A78248F300FF83E2575F56BDF3BE699FD9FD23C02CA6729AC728E529A16F7D22F2DED475C9CD3B816CC901DE0D9E54C9343EE0CD9236CB267146833649525C33A7B56847958E3F1019A2165AD928629A85C02B48402FD90D2CEB913E2397F3EA97E1A5D573619EFC247E41C5E84F38822F2CF1FA5BAC175CDF8C2EEFED3558DE6E10A5142D165E11F5D8233A8B96782DAEE6F520194A89B38942B10D4A9E36DEAE2EC83270FD538BFA7F689E9434D5F000CC5C7B05DFBF9EDCBBBA94D0B5AB6290EB953C4CA73C89D2647A4AF63BE84C7EA93D0F8F92CD9E6207267C92E778E2CC31B8E0FD024F23A99039A6DA6046611DF4B1E39A3E45AF044028DEFA3A8CAC7947F7D55A7C8E892410A4B2E242BB748724B6AA3F89A69EDB5076FF69F2CEF69C65734D4FF7C4BEB9F5CA935754D20CFC87C6AEC9BA68AFED7485FF5EA03BD89437F69F09ED47DDFEE8F2126342E6A8BBB56768B3A97355135F35AD702A80D8A7354C039039C73BE84C4E0189A8D803627A0D9E7CD937DFE3C3920AC228EA940BFB2693A15D241A783DB90B26F15E890F60566CD4901CC0A00C3CEE3603B5B36190BD89E3474EC2E45911E6937C9058A744FBE4CB9ED2B34FC7C4BF368694F7B770E6725B716B44EA1B9C420FD132AA8A26795B2E0FFD473DF7752F73D5B17B1F7536A9F3AFBC6D52F6A0B3B57F6AA7B57F7335A97C8A76406E0A6C85181E704D5313CD742A80BC084E2F0C8D0ECF2E604300EC78205722C5C2027847564D3D114686CEE2066617F9C219C086EA75FF8349151CC900E9065D22DBC305903ADCEF4917FD143BC28D964ACF13CB6FA29E55E938AF4C3D779C595939D4F3CBCE3450A2E1AA3EA81979AFBB3DB9AFB73BBDA1B4FB6B4594DA31A6BDF73A263FBA736504E275FC2F1F6CA03F5E09C2D0B6F9DF5970662F38CD48DAA59D4E6B62F6B9A865EEE95DF58D18657CD924BFE143921659DA03AE7BC193C9F15E0381CF0B148553D700C8D8139172D920BC2B978895C10B6D1CDC70318500E8081EDF473AF06B24CBA2380984476416537C93E5BA6B075421F52FA3E79953C17CF6D12FA29E2C263B2CB7CA85368E6A51939C978C7924B5C1DB9C7545044C95D6A1F79AD7D30B7AD1D9ADCD236DC7D459145373566EE49C41190715540E4CE1BD3807D9F5EE308579706501FAB30AB6D45D37C6B6DEFD2F09A26BD6591B0002027986286C736C5251F81C6E15A304BEE4573A87D6FD395539515C7E0385C8A010FD05C4B96C8AD7489DC4B97C92EE638006DBD34411766E944501BFDAD7BBDA8730CE87468079D0868C596462A9015679F3642E117A77500034BC6F1E2DF024E6B99A5768CE1FCF5FE254FC82B3A9F6C3C22C9EBEC55CA6E5BD2F64E6C684667B7A863EC351577AF683D121BB426486B33CF140ACC1F126BABE8FAE5B7FB3E406370672F2D6BEB06D6F63AEFAD6BCE5F5FD18654A0AEE54D8A70C99B12E0B8E372B815E10CA4788E5C0AE74483E074E51AA7AA8EC1B9029C1B8031348FB215F23C8F285F2187B84B4757A019000657026070071985B6D3C50199925C137FE9DB443F0D19506C4D3759260E0198046A03457AE5625A5114699BD84F71D5CF50AB2460AE99F91D0B945BD74B769E51E41ADF40A1452374A167553BF864433BFC6C43FCAEE49629AD5D6889D6D8E50C997BA7631A7AA05B5925342F5345F7EAFECDB157FB509D36A16E8E5CF3012E5709C0734608708552790CCF5581C7692B1A44012B4FA6AB54DC5B705EE52FC8BB428663FC3101865D9C23637461E7D401CAEA5894005113FFCEB3817C8A1EC9948EE824F3E8EBE40DCFC8CF6D01D0217D9422AA67E4F32478C48A2764932153DA26B18F32AFCC51DBB8546440D17D728F2A21B7B81A8ABFF8849A865F6A6F3DDBD0768DAD6B73003AA4F49EC6DC279318A47D743D9D6D9AD674DE7BB57F63F495B600AFC91FBFD739F73914F79C5C59750C0ECA73E780EADC8B67C9B3640E8F509E624B386D59795CEB84EA4A7E1D9CCF8555F2AD5C25BFCA35724E683DA2022D1CB65981E1D5F3F07D3DE49D7D5737CA9D0CE1A6D24C9997670500C3B00E32F06B21E72CD985ADE2A56F74CA938AB44D1AA0809209D41D99D2ACC833B5CFE1D7A6C4738FEC518ACA6C2427EF28B20BCC24DF8C9B94756591DABE58D70E3F7D4D0D4330D10D53E49D3FA239ED9EA131764DDCCF691C47A382B200CD05F05C45CA62222A98424CCB40A3F000404F80F300407BC0B351EC89AC79800780EE0C0FCAF342BA7A43750CCE87C155BD24BF8B6BE47F719D5C122E1F0DA009009ADB7969226B1700A49B3CB3EE927BA1AC8146E19D6497D04D8D7737740039A54FC5DD15CF4D4593B9413E30ADFCDC0E0AF4C87D88E345A9503B008DB8F094ACD325704BF8CAB29E756A18940AF73AD74D2E61791494DB4BA5D75F68BB46D7B5FD13D8D2B4CE68D35B675F985BBB90654433B9A1C6BAE74B786E485FF7028E29F2289C06380EEC3201CF0BF01C94A6C156C541E9B4DC28DC90B66AADF3AE0038C0F3AB62682F29A0FA2505D6AC5310026B7D1DC0C6C6C61F7C28C428A7028CAE5B20F3A8ABE494D24F3EA5AA0FBC49DE39B751D3A40F344453E1948EAE95808CC2AFD209FF4BE4942D8D3703B44BBB07ABA1004C66453EC62420156903459E6B9DA54AEC0BF9B94BC617149DDD440E5EE1E410944B09755354D7FF42DB766F7DA7656C7B8F019A8735933B26210F0687C002540064789EC5D300C7F0665056E6C80976C53A4BFA3C4E5D2700E49AC7F0DCCBDE2ACF97E1215D03002FB0E6A500175C8BA87B45EE29578E0ED0C2CE5B13DBB048464175641AD1869493C06C1230CAE5DFD38D72866157C938BC83AAFA5FEA00FECAAF990C13EE29297D93AC9386B0ED90FF00F6C95064DEB84E919CD2B16832F64A09E051F142FF1BAA5714E999DE4B675B96B46DF737F6ABEE6C6819A0596823B9C1B87B08681C53E4C901E579A2E679C33CFB94C207A279582B53866A9245D350BAAD07D2D60B4D425F794275B5AF2804E042EA5F5368C36B006C3B1A4053A4B085BDB726BE69897EEA9C4F3FF7B880958F6C1AB667BAC90B29ED9A2F15641E739D3C336FD185A1D70AC00EFA997723C537CECB2613D9496648EB481C3BAA8AB43F771F3B3BA5E920A543CB9F622B2215CB5D3CE3CA3C5560012B521A00939B97B4CD775FED9D1F5C17004D82EBC935FB017902A027007AB2F200CF5B519E4F19AE9D06486B6C58587D6C5B54CBA27A3C4E5DEEB42A3C356559712175AF29ACE10D8537BEA188A60DF23CDB7E3C8009975628BDE101155D1AC31B965DD532AA8D1C127BB16F934DC00E1F0714DC431197808D91C216D15D543BFC463E8FB84A06FE2DF4ABA811F9FD71ACC861BC31A9484E715F74749702F99C15190345DA66CA1AE99DD947494D8BDAFAE197BB85DDAB1A1DC0AC311D402F010F01E5C940C3C892AB28DEA6B06D51CDB2BEFAD8A2F8226DB9EE0556CB7AC7F042A13C155E64F30679A71D11A08985FDAB53A74E6B7D936B29B3738D1AEFBCA1A7CBFBE20D9DF4C555F1C158A096CB9476447D0C281C83EF924DC6120DC42FEF2E550C4A4532504E698F22098815691E7D8DA2608C0540A4B46BCE439DEDE19A185AFE44A7489FAC7E4A6C5AD2D60EADEE66772D4B80282B4EE9F700F019943685B152AA8FE75E1FC073C0F4C13B3DB124504CB330CC8ADFE3DAE7A9AF3ED43D51F3A0BE30A42CC38B84F2229B3729BA6553DC52A1EE030FD5448C8CCD4D7059C7347F93B573C07E74E920E5DD58A781899764117A91CCC39BB17894296C9F7803298C2EAD007248EEC3A1D31886779992ACC013019728BBF3850EA8019ACC2FA2A522B9A6DA9C1D410ACA51D016A3A06FF1632852DA205F00E414AEEE7FB173F6CA8200681C584BBCD060803E0A40868725A9B02F7C9E6181C5A8042897043ADF273C1F9A870EA0ECB8C14ADD535397E125B56D5361CF0EC514C98D342F540F0550B92AE90FF1C897C38A6F760F4BA792EBF354776B0D20D7603D64D3B08A6A259B3337A12059D39CCEF603E003AC8DA4224DA3BAC46564577066AC2AF20452DAB3442A98D5689B3C84CEA88E827DB0286F15E997DD4FA96822953D2B3B09CD333A053A9CBD834EFC48A8CF17E1A7A42F9F69F04ADE02AB7906680B80C2382B4B0275DAE0E6C146992D0BA72FAB4F4DDDF8D64D2A1FD8A6FA3BBB182056C8DE37515DE983DF216CCC814BDA706FC7896B0CD1C4D4722F3CAB89CAFAD6686C5E0231F02AA193018D485125A593A0C8EC11387F455189DD9826EE5322867C5591A783AF50FE0DF90FC0296E0C331E8CB30CF10F02236E737614BE537EBF5F0E140880E5379776A26B277535D03EE536B9E78C0B781C0138C376C4F2800F8204402585C5D8760020CFB8ECFB740045ED7B45514DAFA9B07B8B1AEEEC50D1F535F249692213737B01CFC6D6FE8D9B8B4BFC7100F2EDAF7F0F618E0B6C16F987E1B6ACFDD4DABBD431BE4DB1A5D8BE140CA0504B80D63197D0087AB0729246DA09636048D9388CB31CE54CA33AC92FF736B5E182247ECEBED10029FE937099D2C6180DED53873162C9A6E59F338013C165EDF91B4B3BE195CFF639854DD1856DB15273C91895EA2B65DF37AD3B499300E5865905A86E5A58816F014AD31C52870B993ADF50D5E01695F66EE32A8C1E3277F011E04CCD2C283E21896A6A6A387DB7104988DFFB32905F75BF30DF18C8692D2EB03C9355A1AD1998A7B1853DBAF55C6932DE2558C0B6A2264AA0CEA97D1458C429AD18674C3161E50FE84CD382F83CFBC89381AD3A9B731AA3A229A69D60ACAA5480290CF0FAE27670F96361A44D4318E010EAE008EAE5A4006893F19C8C7008FE650A7C1F40FFAA554A687D4525DD1B54706383424A4670AE132BC0E18E510A0D8FA60B172E30B883318EFF77E27D10BF0AA07A33F69FBE4D6B8BBD33C557E8C6931DBA363446C955B728BA7418855BDA1C8744D4403419FF7259E31C53D165B1C1B63A271569048076676E502D0EDFF9F9496CBF0DB02EFBB1A2C880DC01DCF6BAAC2DED5AD8F62F197FABC0C4411C68DDC652E39930D246C94FDF05F8811AE8090F1851BF86ED374E043B615BCA1F93AD5F9A5AE7C8CB37904A4A4ADE07EEE0FFAB02C4FFAC0FF2B00019245FF26A0190A25BE32EA4DDCA1B3824C2950813B03CB726E5219345581DEADA4D0A57533A055D1AFB42871CA94833B634171EE88E494F62FF68187285C2B179E6CF0764E3D00A5DB80400BD8B1E0A059A29296C933C8C0BC61F09F59D4A02C0145C8A71B0068A2622BB308F7081952B38677E891B76D0382A26C93EBC9C7055AA80E7E0EC4E3939398701A7FF352B00E885F86D06791480AA1AF9A69534B55B079DC9D1560E2C53EF24CE7F7BEF92917F29EA5C3BEA916C0AF6673AC93D6B84FC2B944984EB65C5389A8604CA0A7449E9A13A5C902900428149CDACC0F96DAFC20772160E450AA373DB26DF22878C313284FA4E230C19202EC530651B73C0077A94E228A096AF295CA580CA45B28F6D2123730701CECAC6915252D3A8A1A1E1A8F0F4BF3E07007FF738005590FF132FE686ECD616BB092597E9CA4374B4A1456AEAC7A1769D34CEA621B5E21820BC5A3619F68D21E71F434572F2E0A672A6E611D5E3824C3D809AB26B0BDB3E858A02B90602A055D2209D8AFF820C126099F401E2720CF3749E44D099F371595BF92285562F936FC512D9275C23133B3F01CEC8C894A263E2A9B6B6F6B8E0EE035A06E2AF10FF0CF19B5F072083E42BDBAD7031FA829AD67997EF53CFF33D9A7CA9A588F41A32F42BC592B60BE7B08A22136F926FE143DDFED02AAE5BDCBEEAA21C5205E60DB20235A5D716B67C8BC777E532A11E13CC1099E3CAB1FF177C9B7E19372152D830F999AC830068852ECC8747BEE771F361F13CD9A4DE2653E768010E4302050485537979F971C0CD035409E2C7883F38D848BE2E40558D7FA06FC203E2B234177A66A97B6C89EA0616A965709E22EB5784C22CA32F936BC65D5C592F15699BD0432128EAEA069B012632C0AE85ADC0D2C73A800E29B7C820A28F7EE43B483F8B792800B20AF97234BE54C315AB7C5E655924DF25138FB3BA06E1EEE54F4545454705F702A02A11E688DFF99017FC5800F5BAB5B85D40A4755E5D3795F5AF53D7C436E14A0501EC8437A6119C25FBE10450F8C8B8EBE45788432965A3AD2AF0FC8DC5ADB00B4F0540AE81ACC0FF1BD8437FE1DD4F3F8918A593094FC8F42CE0654D8A0B854C53C6C9D8B7984E199A0B78B6F6AE949975A406B106509D082BC41FA9C3C5718DF4D7FD5B32E8D606FC770DC8CED56F2BA57A982EE0BA988E3B38AB486AC5F8374866E8A4A24686E1D2B9CC119D2285029B963530D25B91D5CF74002DCF0CD0FFF1EEA5BFF0EAA3BF8D1801BCA7E28248C314A472503D9D3273528CB0352527A7527D7DFD6155C7D0FC10FFF5C04426187C5700F997735A73B716F7EFFA4667EF96772F50EDADD7343AB54915B8769001FECCB588188E0F2E6EE7E70C3041005CDE8AAB9FDA5115782AB29F7E08787FE5D74F3F0EBD43BF8A7F442743DAE89495AF00676868426111B1545585DBD07EDD08EBFFBF6D7C7E04118EF863C43F7E1FB8EF5A81FA0AFE5F78317C071419199BED846434690B3117DF9B965DD735110A4CBFAD53640000C6372C6ACA6EAE6C265D9A150A3409AEA59F85F5D38FBCFBE87F7BF6D08F7CFAC8C0364A57E7BCFD420ED32026002B19F1D7DC3D3F044DFF73DFA502F521CA6E6D60C0F7ED92B5A3CF466CF93095DC5CA38A5EC09CDAC036442AD21F3E30B61E00BB5F6C67B42F888DB461600DFDB55F0FFDB93BE03955D3CF4D3C053C27571F2A2828FC90E29E291DF46FF0C8B7B31DB9347D2A00D517CEB3B5CE843B079DDD89A97A44E9ED2FE8F67339DAF965F5514CDDA2A6B47B753BF7DA3231C05FFA36D00F5D2FD34FCCC274AA8B8D89FD3270EB78D3A50863C4EF1D07DAA7A8C083FFF2FCE750C4CACCD0C874DB3BA94E1387AB0DB2DAF0274DAAA671E20705F6AE6E17E1EA2D06F80B8B203A71CA54C0737672A6DC5F1FBF78BC6A435820F82FC01D59695FF63D9F9A02F5DF18D7214BB55B9BDB7ABEF1CB82A9C6AD5BB8035353D2B3BE757E685D0064709696D6949696765075D7F006DD11FFE36342FB3E28501FA4DAADC5DDE4F6FE699B01382228E85EDFC4B1A600E8ECE8A8EEE77601EB36228AA1218EFC37108E0AFA5356E0C134E3D9BA9D219E3634D98C2DB9B61F5FD02436D25E9E9EAFF14662107F89E03F3DF0D152F4AB7ED6F709204361383698AD6718A48079F2D49A99A929FFA1B16F0DDAF72D85DF07E60F719C10686D65E5889B9FF9EEF9EF041EFFDE4329F0ABEE85F8FCF92FBF57E42BFFA8C267781FBED1E6FF03CFD98FEE39F6AD700000000049454E44AE42608289504E470D0A1A0A0000000D49484452000000500000005008060000008E11F2AD000000017352474200AECE1CE90000000467414D410000B18F0BFC6105000000206348524D00007A26000080840000FA00000080E8000075300000EA6000003A98000017709CBA513C0000226949444154785EED9C796C557996DF5F4FF774269AC936D1244A9496469AFC118D34A36965468AA2288912655ADD5401C6EBF3BEEF1BDEF0BEE21D63C036DEF715EF3665F67DA962A70A8A62C760B0C1C6601B03C6067CF2FDFEEEBDE6614C15B54D53339474F4CC2B6FEF73BFE79CEF39BFFBFC3311317DF8EF7B1020C00FF1DD197C80F73D05F401E00780DF3DFD7E88D2F541811F14F89E29D06C6F6FFAD1C2C1E19BBEF71FE167FBB939398ABD8D751B3EFE9B1FED7759EA75DAD99A5C724F995C8B6E9B5C370EBE53BC91C23FEA2FFCCD00C3F0F3C5CDD35F08D16ED5CA297B5B9B7C3CF7AB1FF5F73260FEA40002A6E322A00EB6B6998E4E6E129EDD7E7D43C7C9E9ECD276F1F4F6139B95CB6F39D8DA0402E21FFEA8207FEA000127DB010AB4B7B39F850A1F65566E9FA8DE75653639BF5C9CCC8E00B9E298839DEDB21F0DE24F18E0BF323B38C4D9ADB21A353BD84BE89A0CF1F20B9155CB973DF70B8B9B2EE93DF3A466C78597B1198502958AEDAA95BD80F8EB1F1CE44F11A0A3BDBD839DF5AAB3B6562B2420748D14B61F9796332FA4EAC098C4E5D58AD9DE81CA9B5B93B1E949F3E1A167157D2724342A8169FD0C5FB71110FFE30F06F22706F0BF99ED6CB7DBAE5C8E3AE72F39D503D272EAB1B49F9B97A6934F11CFA4E1E49C6CDC7A4542E2B201EC6371767299CDAFEE9BED3C36F26263E376F1F4427DB45A31EC60671702887FF2BD41FE4400FE39EA5885ADD5F23917675749DBD42C4D4747A5F79248C717CFA5F5F48C349F02C0134FA4FE18E2F8AC541F9D91AC86A3E2E9BF5AAC96FD66DE3F306CAE66EB89B99E1323F3998595824E4D902700D0EA7B417CCF01FE291A442CEADC18EB584C5A81D4ED1B94BECB223D17E601EF99B47FFE4CDACECC48CB692AF0A9025873F4B1541D9996AAA3B352BC7B5CE20A3BC4D1C9158AFCE8657C5ADE8B81E3832FFA0E9D93A8D844B1B65A29B6D6AB3A00F1BF7E2790EF29C05FE2C5B8A25E7D65676D25C1910952FEC959E9BB382FFD505DF797B3D2757E563ACFCD2A885BCE3E935640A40A1B8F3F91DA4F1F4B3500561C9C92D2038F64F3C119C9EB1994D0E462A8CE4A9C1CEC5F6EAA697B79E8C2BDF9E6FE7DE2EB1720D62B574EE122ADC3CFFD0FDF0AE47B08F0FF60A2D865B3E263F1F60D92F58DBBA417C006AE8AF47DF5427ABE9C53D1AD03ECFC6256DA01B0EDCC33D44300441AD77DA6033CF4484AF74F4AD19E09D9B47B5A0A774E4B6ADD69F10E4D16AB8F7E2BBE3EBE2F5B070EBF3C76E5BE94D4B4898B9393AC5AB19CF531F49DFDE37B04F02FCD76765BD9295D5DDD25A3A849B69C7C20DBAE8BF45F7C21BD17E654F4300810D1050552855A1A03206AA106F089A6401D60F19E49D9B0E3A1ACDFF6400AB63F929CBEFB125DB84D5C3D83C57AF9B2F998B8A4F99DC72FCDEF3F3B28A959EBC4CEDA1AB6C7EA2C20AEF84635BE0700FF1DC065C392DC87F224366383341CBC29DB6E886C45ADEBBDF01CCA7B2EBD5FBD0EAFFBBC0E900A34EAE0A99985465273745A2A0D80BB2764E3CE87520080795BC725B7FF81E46C9D92B42DB72538BD4E6C6DCD62BF6A85E46E2C9F3F726954BAF79D96F0C83562BD6239610E7CED7CFD7B04F84700E78B067183752E6C4DAA94F61E97AD97E6F574D5C10120215AAA4F4B614381168D44EFC45420012E287001E0B80298D33726993DA3B2B6675CD27B2624BEE64BF189CC15ABE51F8BABB3E37C65EBD6F9C39727A4B479AB78787801E4C7B3A88F0500F99FDE50E4EF01E02FF04B58436DA7301D887F488414771E518006AEA1CE215DA9382334781610550D9C5DA881AF7562BD89A81A0880E587D04450038B510399C20503E3920F80D93AC08CAE5149EDB827A99DF725A5735C228B0E899B5F34A719090A0E9B6FDE7E5C064EDD968CF595E268360BB2E4167E77CED77FBC00F21F18E07F07B801D439F1F0F491DCAA5E80782A03AC73975EEAD0E62C006A75CFB2FEB103B3812C7461A4AFEAC2BA1764172640DA987274E1CDFB26D14026A4500798D77F7F4181199D1AC094F6BB92BCE59E24773C90C496BB1292D52D0E4E1E62B3FC77129B9C291D87AF4BC3AEF312119B8694B642AC3A0A801F29880498FFF98FBECEFA0B74B6625CC1C7980C24657DADB47C36BAD0590D407DA87396C1BA6759FBB4E6A1C16303E9B0AC7F00481FD870ECB1B23155871F49F981D701AE83020970B10253B610E05D496A1D91C4563CB68F4B6CDD55F14F28133B1B5B71B4B791F4C21A69466D5EDFB05BBCFD42395BBF405A6F31DB5AFF9573DA2E936BE94393EBA65B889BDFB813FC36FBC07F8DAB9402C73F8A4942D6A4174ADDDE6BD27F858A6383D01A83A5CA96FA989FC3AEAB42C17B269DBA89D6D4F7549A01CF501FD3D7A87F257B616176A1036F7F20F99FA0FE016056EF98ACED1E152A308D0A24C0B6BB8047802392D08268BD27895BC625AAECB47886A6096D95BB87A7E4567F2215BBAE4B52618B383BBB88DDCA8F1E9BCD2EF94E611BFECC75DD9726D7C22B04F8B3AF5BAEBE0BC09FAB0661BDEAB22D9C7E6854926CEED11A043B2B6B98E1E7BE09E0023C348D579DF79974E8A9ABA610DDFF710AA9FD1413C861A62F3C20D2971E70A1031320EA5F568F06309D29ACD2970035781AC061896FD622A1ED3EFE7D57C20B768A8B6728D2FAB7E2171229EB5A3E9582AEF3121A5F806D8F8DD8AFFCED6DB3BDD9DFD133E297AE25A348E9E1B72AF1EB00FE8CB50173E641F828F10D0893C296BD80F54C3E8111568A53F050C72C21EAE67801AAC5BF35E5BDAA7934CE5AE39851D307E119239C9A4090BA1584B77F4A350FAAAF70C7035937400BA3D53F2A900D84002D159884F44DA4FA9A5F453C3E8E6FC6F350635CC34D094A6FC158E82676561F4B487C9EE46C3927C99507C42B305AECB11D42A93AE6E897F8F74E11253F772DBAB3A412DF06F06F01AE8B0DC2CDCD53B2CABBA5FDD4A46C25384E101766015083677451A6A302097519E6D8485363DA301A86AA79485D7ABE2D0047E531759B4E3E9186E35ADDA379A6F72B03BC92BD6C1E0F95FAD66F43F785FA7261A073002F130A7C1D201A0852580144A814B688787CAC40B68C4AC2968712537D517C620A797C2066A82F626DB5A4B77E2591F95DE2ECEA2DF6CBFF5E1CBDA2D35D8BEF2EA9C2A50026999D3CA7DDFDA22421B75CEA0E0C3DEFBB24CF7B2EBC98D794865880F7EC758084B828D824B45AA74D1A2AA03A236DD9715B946946D340D7ADD76D4BA545E328D6BD1FD55740F5A9F4450301BCCC6E0084FAD269618C1AC826A2EAA0A642A5448233422911D1C4E7C624BEF5BE44147D2A1E4149626FBD425C3D7C25B6F4F07C72DDD9594F380CD780C4CF5C8B4796AC876F004483E8327B8449CBFE5B72F4DA33D97E659E2FFE2503205E02E2BCA13CA6B3A50A09497555231680E9D016C0CD28E569F0B4B4253C63EEA5F2D87559F738BAA9D445E3E0F4A1D4C7EE0BF5A9FAA7D2F79E4ADF5736466B2449AFD5425D893ABC383CAA681A460024EB63DBB8F8A6756019B1428262F39ED79F9C7D161A1D0F80F10775806F407C13A0AD4DABA3ABAFD8E65D9314FC1267079FC8916BB3D277616E1E605E3200126A24BC57F186CA2CD5A6835329AB960516F030EF1AF06A2C2C8BAA7BAAEBEABE0FF0D629789AFA58FBA83ED540004F014413A10F343A31012A3BB358854A7DC312ABE0690D664DC31D09AA1E118F0D97C5CEEC296109F92F1A4FCDBC0C8E8805C00403E01B757049804ED8B795EC1815FFB221B1C9BB219B778CC917B79ECA81AB48C773B3F3501A603E534190DDE7B5606AAAF4D481314D096D2970CAAAA8A5A956F3D4BCCBB4E5DA4A294F6B1AC6E280F0D4E8A6BCDFFD85DAC7FA97A63790D47640D47DA0A6408B5AA8D743A323131E213256D7DE169FCD37C5AD68485CD79D173B474F6CC1F39E571E997E11B89A00130FE90AFC83C5B6E6AD00ABF68C4AE3E149C9EF1F13FB7537C4B970507A4F4CC8A9C119D97D59A5E43C1AC17CE7F999F9EE7333803A83E76650DB909E676754676DD71B441BFEDD86746D43AD23B866806B44CDD3ACCADBE069231B3D9F32CDAAEB6AC699E99B49EF67D17D35056A3E70C14C2B43ADD7421D20D356294F599B11595D33249E45830230E2BA4903680F80416B729F97EC9B7CE11F1E07804906C09F5B00546A5C12A0B77FB854EDBD8F06F250CA763D90E21DE3125D3F2C2BB2AE4B50F9901CB9F8584EDC78265BD14CDA090D003B1184A7001AE0F454658765AD233CAEEA699217E071DBACECCA9445C7053C74DCC5756F217575EF47804A817A0AA775DC5D4863E5077553AD4D25A8777A07E6BF130030AC6A48BC4B08EFC622805E1210933387A6F5C22F0C353030D900F80B403354F876804EAB378B3BAE4A1AEA49F57E0CEEFDA392838D470A6A4AEFC9295CB15B4AFA67501F8F5E67FA3E85E210679F02DE53A80DB0006C019A0E8EB58EE3199B8566551E29ABA2C19B5476A5C8E8B86C1A5C18184DC350DE2278AF03346A21AC8C510B0151196A045FCF5A408E6B1C96C0F29B781D37C583EADB30286E9B104861B7822FA1402FF18BCE9ECBD97AFF856F6882B805A61CD653F80FDF0D206A6066D788B8E01B7BE087AC1FB82FEB91426E9B6E4A56D73D693B3AA13E667D2CDE3E26E7866664EF65C00340A5364369BADAA8B8061E10015C9D4AD9573EAF025B16C3EBB1EE6DD49B0617A62A750DCBA2775DA6AE1ADDA83EDA17BD031B29ACEAA04A654044B00EB2C9E4F5DE93ECAEBB1255877A57A2C163B8039CEB46D43FBC1EB7E2DB1A4027008CCC9E4BEF1A79EE1918236EC16906402AF0B5347E6B0DACD83D2A3548E135B85A8EEB6F48005237A7775449DD67F32DD9B47D5C9A8E4CA086DC1627D4C79EE39372E6E653D97A9E29FA58C13282D0A8B85A340A1A6495B28655D18DB2E5A451B050F734CBF25AEAEA696BD43F4E20846880331E93DAF8DC282EFC9894E02267B48F4850C52DF12ABE89B8A584E10E680CC273E7BF4B6E8B7BC1796C6F3CB9539C4B6C197CEEEA1924EE2119960A3400BE3D853DBC02A47CE728EADF38BAF1B814E097F02FBB2566808C01D0F59F8C49C3A109A5D07C406D0468730120A36B1FFA6A5A8E5D830A0191B05EC52305CEE8B465F47984079FC7B47DADE35AA42EC7356598B9343594A77B3F825BAC40B5CA42306BEAF63F90926DA312537F477C71D1BD11ECB69E80A8E0119A1E04EAB179583CF24E8A838359FC13CB6763EBAF3E77F10CB404F84B08882A243CD6C2A59B883B16919EC58352F8C97DD9B0EDBEE40252367E797A26D6C008B4FDEE1378ACBB232E903FD3A0FE006A163AF6AA9CEBCA779D197C2AFB2E629B8C3AC77956290EE9AA6C0AEA1D777B9635EFF58E0BE5A96DB36E98D5C8F676808602D934F200BCF9D043693B82557FF75D09AE40A30038DFD221C42DBCAE5B0A9A07EAB8079588E0735E2543E25576573CF34F88190003926B67A36B2E2F06C81A48052A7804B9B49176F144FBBFA35293A95B88AB497F655903DB3F9D506EBFF1C824EAE528EAE17595CE5B8E4EAA2B6E05909B06501FE11FFBCE3C5E80A6819B58F0791B615538A21976854D63C1B2B0EEE9F3EEEBEAD3D25681437D639DCB406D6E04B8ED67A6A466CF7D89813156D0901501E5B7C50FAFC3B384F05E87E6BD1935B1548F8A51F12E38A503AC998DA8BA34E7EC1140051E59D4440C804B2B9007D70D87C6A5FDD89484010A6B60146C4C2ABA306BA0378A70F3E187F05323AA4BD71C9C908ABD0F24BCE68E58E75E97CCCEBBD284B4669A3820B53B3F9B90933760613E9DD2BA2C1A05C3509DD130347816CA53A9FBCAF359360EC24B61B34054EE19977DE71FC9C0E9494D759543E207788115B725A8F2B6F8E3D11BFFF6A4CA10DE9BB5F029BB2DBEE5008DF0AB189680EA31F12B3C6D009488AA8BE2ECEE0F1B9372E05B77E19A7D63D20235351E9E9022D4416F5C3D2A92568085B905CF73402FDFF3009EF1A17AA467640AB900328D77E98EFBB8B7654C756BA6CFC10B8FE420D2BA140A64A3E06CCB4EAB1965A6AD6E9617298FF3AEE1F90CD52503DC4694973DE71FCD1FBB8CCE0E8851282D7EF839041752C5B82381957794C2BC0D95E1D1B70CC000CDBF1276A60ACDA5EAAE04D560FD5F3F2E019BCEEA00AB25A2F22B7176F31547DFF89D3A40CB06F2353E100A2C671786BA2A018760DA00B360EBA8F24B2CC24D00188B86520C48A5F8FF25782CDA0E6048F70D683274FC54632052A709A9C52E680B90F48FA7AE3F916D9F3F9242AEA6004EA52CBB2DA31773AEAE3CA6AD65EAD2AA24225D73FA7084707A6AFEC2D0D3F9ED6726257D0BD4A3527548A92F18F0C2900DC1D5501754E65336AC8019A1C02138FB86D4DE93D0BA5109AF47344D4870C9E70A6060728D44564281586939FAC4EDD0D759EF34CAB57016DE34705736EF1C974DB8CA8500D206CBD2741030F15C225C3C15C82DC646D4397E0EC1B1E9B063AFC30B6477EE41A361D8E5DF9002F8B0E87A96834159997D5D36E27B7E0EDBD3F2E9A49A6DB5D0362CF47AAFF93D28909D95EA6BC1EFF1D5ED99F9D3B808A598D1C3318A2970505D2814170A68E1B57724A41AD02AA032A666E5880AAA8D110CB585D6DD9330826B189388C6FB12D98C69AB754AC2CBCE8B2301A6D4484C0D017A0160AC0190AA7B6DA1F0461371B4B7DB4280F9BDC30A461E4064756B75866096675D83191DC681393C220A753E5E346D0D3B701EFE7FAE32ACF7B4D1086140ACD93BAE56ED1178719BA158878241589F41551F8F5D7D2265B871682DB62B8BE1A57570553F8A8C78206750470747B1CC3D8EF2D18CF42CBFA514175AADC10BAFC16200BF5B78ED8802C750295ACD14BDA7D4C608A3DA1A01AE097735B43C50B1A6EDA1C4753E96C88A2F71ECE92841A9B5125B7F595CD0500170BBAEC06FDEC6C446479DF2F0F297BCEE61598B6690CEF9122F7C33523417203FCABCA63C213B1E01D2DE10722E6C4636949209781948B574A4AC01918F04C8316A3500B6A2997051C1619EB687E9C7FAB8E7FCB4ACC345D3CC314647D4B92C7CFF5D5F4CBFBC3B3127C7AE3C869251AB2A6F29531CCA54053C362FC6EA5A02A4CAA03A1D1CD51642B5111AD4B61A110970512DE380F64062B1958E6BC7817C072E4AF71389AEBA8014769490B45A64DA157171F500C0359600BF5E81F16B62CE7A05AE519D96EA4AC10CC9BA454BC2518800690F58C0E90BD954084DC1C60B4ED76750CECDC96A1737AC52BE1A0AE6FF5B83AF61E7AED8F310B5735C7D1F7F7C3FA6353FF7D4B5C7D28DA9261D17A372EF83E7472F3D9E3C79F5F1F3C6FD78C1280121153701EE96841BE07041082E02CA8BAC6743D0E1517108A629A1314DA9B828A46A4CABAE38804BE89C94444452D79424F7CEC81AA42D6B60286E13496BBB2EAE0068F65E006852CD84074D7ABC91C20078C6C5DD0F16451BD1826103B2F06236214DB300E97719D7D42847680D30CF7C3E0D1E914168049EB47098F36AE74680B437BE502F8D2DC115426DF9487B2E2A787AD6F1D9A44A717456AAEDE5A5E199273DC71EBE4885270D03B408D4BBC8DA217CCE90F29C91F85C7EBE82D700A5A1EEA95A8794355255C1D3C12DA42A54170F780497DC0D703D5392D2F34852FB9E495CDD25A5C0F08C7A0806650837472D00C4C1927342A7C929A2D4E41455A96269802EEED20C27DF82540B428D7104482A2713453C12BF78142690220008C7C7550043BB42955141493C3EE4AECD6261C98FF979D928019C5E7836C18B43ABC1F4374C3A6D51E7313415287D008758E558EAC6350CA1160DE1F136147F4762F11883888259A7378D4444378C48688D56F702614994F2EAA93AA62B9A03D315AA33D25529AE734A92008FE0527A71AB1C63EBACC4A1EE5181AB33EBB10BC576C60D00BD62B6B9954D9A9CD3F798CCAB96FDCCBCEA2393D9FA63154B027406C0FA83F7A515D6A519C14984B3225F345F641180751D075C743E072C5B39DAD158674361B18D00B4081EFF5D892691DB4380C3B838932A85399FF27BC63468AB7537D44AFE9CB5A89F9C26082E09CD22A505D13A2CC9EA02DD510D844BD118805BD338A29A8632C2A87B0B698B947D3D5D1F4A42C7A44A5943710A5CDFB4A4A9782CE99F102015689688AC06D9B07D58DCDD90C23E71DBDD4A274CF08326B38DD53FB3BC29E9AD00B991AE3D302155FB6092D101691F320088E39C1FD2904A61FD6BFB0CD2C7A32DAC0A01D5A2567161C99D9B25C82A00A4B58906ACCA7D34DDE3CA26B1E1D05B3A6331C1A6C2AF65D3AADA8DF1B1ED8E64C0E3A5B7A1D6E291C1744E46682AC77A0A1035AB025FA71A86D62C34E54175ECAEED48593489C42E284F575D6AEF231D9C068F910180F10D1AC0C8EC4629D97D0F77307889D92D709B734217DEA666C7780780CEEE30C6F75491D7CCF11866DC09C443A9DD877B4D00A70DB3305F302715AA94B0E9C7B8A129DD89BB44B1425207367A54ECBAAFD295291780019F756F1DAC0FBB37778C212815AC81D148CD3400AC8502D7B60F4B56C7887ACC5031A24C732A22198AA40A03E1F5FCCAF1A84CF1A89EBA9A3D51D644AF7584A7D53B5C70C053CAEB9F96F47E280FA1200260428396C251398D52B17F0CEF200810079B55DB54CA2EF1FEBAA515E8EC81714D1BD958E459BB58C3E803AD736FA86D0B9709544B2DFC601D565BB5988739B9F06B38FF86625D5E0BA5E5E06BA946A6309B06676B36128E7BB420FC1E6C3E5436CB433B8C351558872385ACCE11940544072C15420104482A3105AAA4FFE358E65F01738CC6C189824D230AEA8B21BC2DE8B2485BD5611794A7D53BA6AD82B7F531606A91B7EBB9E477DD8091769498FC162C7FA7C4CB07006D6DB6BDEDEED6370026C5C75D74767491B5CD5F2A039D411F880E4B5531453F5E7B0D56E2B6B422A57930C35A46704C757E5C8674676A726F688B0D4DDA1640866AD96868CC6350B3FACF3E565B162FCCD7542C3B69249A8B51030D8039D88AABD04166528D0882E4C687A7861CCF58FB82171A07D587A60178ECB4096816C9DD68144A79AFE0517D690098D2FB5872B7735B3E2B5B3E17C96E3A85BBB86C243C6513A6AE6BAA0BE3160FDED9FA6E0AF4F1F24EC7CD4493BC0A5139CD4899DB928054E1EA9E13067D20BB672B529A4A649AB346F2B104E08AB0A936C63F630A617D3326111AE9AE938FA41D4DA80EAA8D000805128A2448A63D01D64281B9D8ACE421720191413532A593D15482512EFCB1A6529D57B72DE1E8BC34C9F479B186FAA83C02343A2D94970A68C988AC011C31E0ED137DE7441DA245E4B68993AB0F52D69A6FEA111FFF507533A6B3A363EB3B03B4B7B525E9FF823B145AEDAC968B8BBBA72494EE9302A46F3AD4A426118C504D485BAEFBE9E7B8B53616096A1E466D5B3CCA95ED1C533687A697F6889388D1A4D8E54390F23ED8A470EB43D53285F37BEEAAC8EB064004D54815D20B06427D041800801CD5B4E6C199560318D7AE75DC244BF5015E3240664079650766A40B8AABC79B78124AF78AB35798BA3F26D0DF6FA6A4A44472B2B324222C54F27273A5B5B5F5627F7FFFCA77AA81FC24ECFF54E0E3DF20FF8FDAE2A66DDF9078496F3CA71A08EB58339A079B080F9BD422018F6C0AAC994CF51C8C6096A35C3DD6EB547034BEBED66212294693AA8082397D70540C428321C00674F37518DB14400B888930F8C1B8806C58FE6A25A5CDBA5AFDD3AC0B47B478D4BE44D63E3D75A9C07400DCB4E709CEA55F2265E724B5F6A4B807C62365ADC5CBDD75667D4181F474F708602D15F378BE05F19FBFD6C65802D421FE1CCF05E0EADCB2B75E85DA5004D33C08C9234DE0F9380BAFC3B1A73151B0E1D07073EEE5E846186C124C61CED534BF6ACBC3933E4C31FC3AAA97930AD75FF49496000991000992EA5B8D89240800FD0150DBE9590084F753F50F0D241E0A24404D81D3B27E27EBDC1CDE3A2692D1F2957847E5F3F65E7172747C9991B1563A3B3BDF066EF1F3C380188C2097378DF46280166AE4BB22F37193E5A4B38B9B64D61D8553D73635D9501C41AE0538FA3AFAC334147AD632CEC31CED8C8ECCE6C28501CF59685FF8F93C772EC4AEF1233428D64302AC47E3213C438504188F0B160278DCC2F8E9DB6402D41A081448F3AC038CDBC219774A72067883E62CDE2A368FDF131B9CD41A1C1A398AD9CE46E29333E69A5ADADE15DCE2CF3B0288FF63C9FB030D684B3D02E2AF91D6DD7C97A56F50B464B77E01838D2502D4C57938152F9E6B2BEDA61E6DAC4BC0DE90469AC03875B0E950A95426E17274CBC745B00468A4B0013113F685EA63FAB2FB72CBCC55BCA6C0570069A0635A1F4A6AF7248E0DB0333CF802E0502333D920BCC4013796AF8E8E9BADAE6BFCAEE0F875538852C4FFFAD60009957F6F856F6F400A7C81F78620AD37C0B3DD54D092D59D5004A7DF7FA71BE94A4C1634D2215878B22B737AA1AD2160032037D63CEC5E9CC284188FF93714F098BE3ED8DE70456F09900BD2702890F52FABFF91ACDFF54C32FB27256CDD3671C272C41E77A17AFBF8CD159556495F5FDF7781F714C07A1141883F35EAE07706F8E2E53C21FE1B8C3631B8CB1DEF34374B6C4127A688B7CCC2FA2412877B9479284F883C5E640DA44167CDE4D4C26ECC49840A2CE88399EFBFAB0C75B8AE3E9EADA8832105104B53B569C67DCFF5DA8DE4ECB0A9681CE14547C52D2016378E2F139FA0C8B9BCF545B2A5BDE3DB82A3D28E237C117FF5ADBBF0DB52990A24C0E8BA3BA6DFA55F25C83FC7DB042AF0A6E87957771F49A93AAA52D37216A602D7A3D6C5209D7B4E4D2B1FC82EAEEE7A40E7A59561BD543B4600ACDF87CF87F20A01909D37147BC0C032DE5580335D9EE3F23812530867E048C08BA771EE7824A1A5E7C4232C477939FC510BC92D6E9CEFECDDF66DC19D04B078C437FE5981EFA54003E06FD2AE984AB68D11E4FF447DDCCDB7EFFBAF4E96D4A68B0BAB2DCEC23C5B21C0D6CFA6705BC8A4BABBA10CA779B42404C9D996CD45A5309A482114980FFF17893D603000FAE2AE02ED4E020D200F86563760C3D33C25C16557C533B642FD8900B33DDE86919C3DDBD8FACE9D9580CF228A117F83F8176F33CE8B9FFF41007EB4F6AA69E4E1DCC2F7C20F71C6BB802EF39D40ABD32BB18ABAA98E04366029411FC809449DF6A199D084D312718BC32D38473B026C3C302E1BFAD1D15112B8850ED2D5E706803CD3E5716570EDB8B2339EC9EDE2E8C209C24A422213662B6ADEB941DC05AC02C43284FA932A385052F17B05A837997F8B91301D6A9CE4214D5AC57E1C77D24863AEE696479DF669E6BB043E90F3B2134EEC222D7CE0FABE7B58E30FC1BADCC4DA1FE070BB8937EB1F6EC1F02A1D11F7B5BBC5C93B0A9D75B9787BFBCD6E286B92DEBE254DB0650ADF03AC66842DE28F7DC3934D4E8ECE0BC0FE4100E2360E136A96A9FFECB40973ADA9FBD42353EFE9E9250357F2AF31163602E4734FDF50892FD9A394C8133C5A99B5F081AC8DDCD42CB3F0816C229C7DC32AA1BEF241F1DF3C88E681DBCF8A87C535E7B838076600DC0A7171767EBE3677031AC4D7A6EB2860ED46D820FEC277758AC9372CC9E4131A6F7AEF011A60017299BDCDAA4F591FBD832225BDE18C32D1B43EB9F069EB701CBAE003F52E9C82C529E1F9517D9B71BF226EBF750C2F526716669B9592905DF6B2B1B9FDEB46AF6D00B61AF1ABC0F88D2677EF6093EFEA54C44F1020410222DF5A1A646F6DC53FE584B712E44B2A8E0EB933A491E60D49ECB2DA2482B10CE91C00ABE251885B2CE25AC48C3A67B6459D0B8F99ABA8AA5B0ADC73C0FA0C91C29915F18BB8CA63A6C4862F4CFF2800F69F9936C1C711E4AFB0635B6FB76AC58C93D949D6E4B560D38255161A8CB14CA8C33296771B78A46E1547F710348895E2E3E33FB7B1B87C31B8170075059188F8DFE145874C9E4109269FE87C53404289E91F2540FB75D74DB8599320FF8EDB5E801437AF4089DAB043DD96460556EEC0ED7501A9D8065BE30F4838BF589BBD4E3ABBBA2DE15D06B072C4FF45FC73F7A024935F6285E99F0C40D815136C0B21FE0162158CEF39BE8DD63FB1527C73F68B8B6F0C067EDB97710929D2D4BC30F0DF062CAE94FE1FE2DFFB646F37794417995CFDD798DE2B80EFEA817EE0CFFB13D89E18349A31FAC79090D55251554BC5DD4414217C10FFD2C93BD2E4EC176B72F20A377D00B8E45F91B4FB756E6E5EEBC0C04037807D84F8333BD72093D9D5DFE4E8116A7AEF01FE107FD9F6FB7E0F40FB4B3D4C787CAFE3C35FF1FDF0577CDFB3BFE2FB7DD3EF9FDAD77F48E10F29FCFB4DE1FF0F8D65D4BE7A1CBB4F0000000049454E44AE42608289504E470D0A1A0A0000000D49484452000000500000005008060000008E11F2AD000000017352474200AECE1CE90000000467414D410000B18F0BFC6105000000206348524D00007A26000080840000FA00000080E8000075300000EA6000003A98000017709CBA513C0000224349444154785EED9D696C55E976A673EBA6958E94742B8AA2EE24CA95D2EA56471D293F22454977A73BC99F6E458AFA4FAA8A792EE62AA0180D1830663066F43C4FD86083E779B6B1B1198D316083193DCFB38DC733AD7EDFEFDBFBF8D8656330D42D4ABA575ADAC7C786E23C7ED75AEF5ADF3EE7FE42447EEB37FFFB080204F89B583C03056FC9BF7EF993C69A351BFF7EDDFAAD77D7AEDD94B3ECEBA57FF953FE7B3E544C3F35C03F03ACF0A55F7E6559FAE5D78E25FFFA95038F47F0DC69C4BFFB2940FE5C00FE7BC0D90F686F71957D472F3A122ABA24B2B049BEDD7DD4C2E700B20DD7D588DFF97582FC3900FC1A709A0869EB776E96C8CC4772E3A55D0AEBED925C6397A48736B974B552D66FD836C99F41DC44FCFDAF0BE2E70CF06F977EB5A4825050F36CBE71C572FBB54DEE3739E4E66B87E43FB34B0A001222E37AD5849C0C4C9195CB5729452262117FFE6383FC1C01FE0A2F3A82F56DC5D215B65301898E1B75C3F2B4D3218FDB1D72B7D1216550A002F8681AA009F27269871C38EE6F856A591F47F177B923FEED8F05F27302F8477891878C170D087E8EEC7B1DF2B2DB216F7A1DF20C006B5A0D80AFEC720F4ACC7FE6702AD004685E43B3EA65DBCE4353BA3E7EFD1AD72F7F0C889F03C05FE285ADC38B7CC317BBFD7B775B5C5EAD3CEBB04BCB80431AFA1C0A2215F8A8CD2155CD0E798078DD6393171D9392FEC40125CE0D32F1C1A45C8C2B9775EB362B90885CC45F2FF4A23F04F4427FD7ECEF7F6A1BF30FCBBE5AC2A2CF17690D48289787CD5669063813DE6BA8EF0500D67739A41629DCD06B97E65E8BA4DC1D94943BFD0A62E51BBBA43E9E5F8DF1B787E4B84F822C5FB2DC6680F4C5F557F3BDF89F03C0FF8C548DE38B619D3B1D942A654F8795DA5A071DD2D4AF95F706D1D027F2B24790C676691FB0496EF5887C1BD6223B23DB645764A378A5B449C5B31180B44AC98BF9D5C8D48E2A6A96BD472E2888F8EFF7E3BA83F57136C8CF19E01FE01FE781741DE78B703B1120D90F7A94C2A838131CE1311AFB45A8C0967E9B54D68F895B5CBB6C0D6995EDA1ADB20300774634CAEEE82671BBD222D1A53D52D732214FDA6C92F3747E35126450EA63D9BC6DAF5581FC6AC9335CFF19F14B13E4E708F00BFCA3D6035C27FFD130BFB6D8BCA7F20429D90CB5CD541CBF86E2A0BCA65ED89657E37236AD1BE05A642BC06D33626764BBEC086F94EFA39A647F6C8BB8C7B78A575AA7E43F1A96E63EAB5435CDDDA5CD2693F8604ABC23F264D5CA750A242219F1571F3AAAFE3A6AE03FA1CEDD57756EFD565BE0F5DB52D568539D95E078A5CA18541CE365B74D1E374F4A606EAF6C096E51D0A83AC6B7616DF26D781BC01900230D80096DE299DC21A7D3BB24ACA44F1E368EA35E5A95E599CBEE9820591FDDBDA3D8A9391AD2439E41FCF1FBAAF0C704F817F8475C51756ED92ADB2998DCE25AD42AA46BA32BB81E5DE7182FBAEC003725B13706641B14B70DE96A2A6E3BC1217644005E7487EC8BED9CA1C02309ED7222A553CEA477CB4580F7CDEF97D4AA1179D96591BA76A475DD0F3DA3ABF5892C809ADDBCEC465A732CDC8AF8370B81FC3100D2CF9D40919EE46FF5D0E930C9BCDF27751DBAAE5169AF004D051E33559F03DC83C629B97A7350F65F669DD3AA734658AB7C0770BBA0BA3D973BC5ED6AB71CBDDE8D1AD8841AD88CDAD82A47AEB5CBC9D42E399BD9233E797DE25F382041258312766348F29E8C4B3D9ACC9D069BA43F9E1F24C742DF6B7765E3E69D2AAD913955B8FE23E217F381FC94007F97BF35AC979AF91FDFB9FF8423AEF09554B74CA7E84B40A3A7A30AF998D73BAFA7241169B437BA4D360735CB56A42CD39610096C774CA7EC85DA76C7B42BD51D8EEF41AAF6895746BFEC46FDDB77B9450EC5B7894722D217B5F25C4EAFF815F44B60F1A004970C49F88D61092B1B515154372E77DF4CA9B49E6DBC5DBFBE7E7F5C4E05A5C9CA156B8CFAF855225ED37F990BE2A700C8DFCEFFC56FAB9EE0BED9B4C316947C5F6E616E7D0E40A68F232C7EFD1C7E8E8FAB9BED92F6604C7C7307E454FA805CC81D16BFC2B712523A2E5115131277674AAEDCB5C8D5FB1689475CBD67515F47944F00CE287E7644F6C434CB01A8EF28D4C7F4A5FA2EE6F6E17BFD50DF9084125EF9888497BF05C0B7125C3A2291374624E5FE8814D64D48E613DB3B41C695F7C801CF00D44635CD4CE07A1431636DF6B100BF58F6F5B2F3F84B1D1BB7EC9AF40ECF91E267932A5D99A20A1A80D1049BC1918C8F1FA04BE6D6D994014E43F03A6760CA4865F0FBE6635CAF3DB0897766AFB8A3F6517D5E681E17B259FB0624B0685042018BAA23BCF0B2510905C0203CE75F3824E7B307E43CFE6C304027DE1FC3DFFB6E4586663F97EFF67AA8FA880C6BC07585A9C645034CBA7E1DF096F8B1CE795CBC2A5935A36A5635954650663C05508E626610301FF37AABC10125BCFB05CC956E6A1303905115637221A74FCE66F5CAA5BC7E092844EA96EAB48DB8F956851360C9B0F8160CE267FBA1D81E3974B503F5B34DCEA4F5C8953B13EF54236D8F7F6215566A07B0CCFDCA06E1E4AF5AB9F6BF2F0A20FED017AB96AFDC8E2962C22B2453726A6D520B1884678279DA69973A049FAFC55CCB314C871DFE8FE150C1EF137CE90B8C630B28614E908098F41053C6CD31286F08A93B8CD4053C282FB2027173142A1C95103C1758340CC8837226A34F8E2775CBC1ABA8B1D1ECF68DB225A841428A06240F5B9E85EAA34F6C91AC5FB76962C5F2D568811F763EA266E175AB56FFF9EA55EB1B3D7DAE48D6132B3A9B4D8AB0E024A8A70A960909D7365813977884C72A5AED0A5C0D1ED7E03117055C55E53DFD7035F20573A170FD8155A26F8D1BF046953A230156037C8BF41D865A07D06C7A51373B653FD4B723BC19FEB251D2AB86A5B10F6B3263513B1744941A7BD92BFBF89B1EDB70507E9F2C5FB9716C51006953B6ED70EB8D2D7CAD36C385F536A4A1558A9FDBB4BA6640D2801E2A60B8B6D8A51AD76A5CD56315682AFC5A3DAF17A659B58B04099809683A3100195531AE0086016070C908D277783A7DE33B60C6DBC42FBB475EC1B8D362CDE715597BF3EBC556DB6A1D7ADE3E391698D767FBEEC24D59BE7ADBE200C218DF397629DE92F6C82A854FAD72FB8D4D2AD075736A09D10A5036150F5A6CE8B6B81A51856B15BA6F5513AE2AECD83023D473DCF1198FB1AEA21A8B9FA353BFC3B7BD2BD598D657EF4D218D01104D24A8E4ADF8E40F8937ECCFB1C42E3991D429F75E8DA969E86EE3FCBFAC8C3AB1E1FBA38D3DD6B1ACAA91A9DDB05634F41AE0F6D14529100007FC121F4862B55529AF12F06A31C41354C1538BE403EABD462B3A2D57F0561DF8FA3E46B87B88BBC6D57C7C1706F76E835DBD10676061CAA569C51B87E422AD5DD7F7EF0237FB7BD71F5824BA7242028A4654FA9E4CED95DC9AB7D28474A543489BA7EEB2EB97BC744CBEEAB28E3E6C98983C09E85C64708C6428802B374D2C0A203AAF35AAB85D12AAA65077A6906E16058C332CC7A6D2E716D4468B94BFB02870771AA052C61B238CC7B7D4D736B93567D8F1BC1D7FCEA1A214E67731DDDA041A77774A92EE8DAA7F6323D295357BBEA6945D87E56DAB6DEC45C7D4547449BF8563E5F6508E92505F443BA6A20E0570D9B235964501A41F8ABB358C5A3305933B0590930036A56035F6D9D4B6F8F66BAB643D9E94C2671628D402636D419AE3F12B5C9D61C563047EF62654CC3250F1CA88D7767C8D0044462594C8DA588017FEA1694D05131A57660F502EE653701AB6DBFCEFBCE8B448410D8C3AD2756B701B46CA3651B33894B70300771800972E59695D34C0D8CA41D498094C07938809809C90F49A0928CA0280D82A6387F7B0C5227975939201902530D8E5AFA6A4FCA55666D90B8C54EA8A50CF717362C5F78D2B40A2E3A928E7150A2C7FA921D2F2646339F03E694DEB44701C1DE703CF742DA887A56A43FD6E98903329DD182B318B8718E0A0BCEFC209AE1D8B5C86A1C0A5AB6C8B0678B96240E2002EEECEB88A58751D93E407E3803229CFF15B6CE9B762C30285BD9C92B49A712872428AEB27E5C6F32929AD9F92125C4B8C2BD3BE04518A26A402404B5EA01C0056A971BD81C73C1336830E20631E137E13D0A93A3609F30C79B6F2B8E6CAAC45AD454D46BA4A5CE9806C096CC52CDE8A7AD76EA42DEA9D092EAA43764577224C802B170F30BABC5F418BBD3D26971131B746555C46C4DF1B93FCDA0979D432A9969B8C8758531560FE4CA9D6200B9E4EAAB1AF0851C800C8C26753A84D163C87C0B5B85E5BA3E9B003AA0E7668F3EA6A79A8B287B0423C57A1357A57BAF21751DF8E5FDC9351D98774DD14007080C794D57B47EE1C3BB0F50138C0FB1EF0F630B0E0504D64E947008CB8D12B31951A5AF4ADB778FC56A2CCC0041083E752AB47A5F2E5046ACA94B40D58556ADF798D7AF9785C2935E3D1B8024D98F94875A67B7EDD14BA383B39EA1040163C83550248167DED391180677E5D84C7AC7126A81CCCD795A89DF329939E2E0FC7A13538BCAA699C90F3D8E06CF06B964D48D92D4C5BD63B0254F50EE09CF03AD466684F4C97ECC54AEDA301869574C36361BB0158512A387B0E233846F13A0C133B8CFA3822394FC6A41AFFD8269CA6B5F45BB09BB3C84D804D7D388E617E5CD21F4EE0672624F7C924624A726B110099C720CC3A2B80C2223DA34DE2D5AE9A8919330DF0DC1B16A66B06D2951DFF69EB945CC3EE712BD2F59B8016D914C8151AD467745AD63BC6CEC84EA53A82D36B35C08BEBC21142D7A703180170E1E5D8BB015618221CF0F87558199E43F01A55312CD7EF8D48E9B37179DA3629AD80D80A45D6B54DC98DFA09497B38264955E39202A0198F26241B4D271B30B301330730736093720191DB9B3C0620726665F00E05027C5743E1B687295FDB8A8655372A6E316DB2CEA759BEF1273C2ACFECB404D7A19567A62C557719E0006D5F5C37D667DD18013F01C0D062DC1D45600A1A402142CBB00156C15DDC808A1014E6D01BFAF9CB15439256FD164D655C9EA36833ADD9686A01B2EC8506790D8A4C04CC34A8321330698FB21E23E02BB331E9646371C1E505A1E5207599BEAA23CF6188D95DE9E9EEC319B0BB5EC2BA7FCD852659EFDBE2549EB229AADB6A7FC70E4B78BBA374AD23BC7D54DD15C043701BEE16DFFDF10A0C31003255094F0520116208C121824BFB15C0E0123ED630F933B1B7862403D3C01D9CB8BDEC9A92F6412A12A985825EF10A3512B531E9C104604E4852F524A68529C97C6C811D82B7C4E4C3E9872055001E9B880930C9B8D988772C94BFC46C8EE69504CBB539A049D65E6A46BD033C57E5019E1ACDD82C00EF7BC46E360A537580B61FAA73C3F520B6E10713704DE8F93400CD5AA7D2D7509F0930180083009010098FD7A0623C2ED15F8797C10661959FFDE8ADDC05C857DD16E91CB201262C05ACCFDD06341374EDD48793589E4E60E299448A4F61F3C3ED8F4541CCC046398B0180E62A8CE95A8026518D3396B2DA51398C3396D550DD5AA4EC065F97B465B7A55551F074BDA33DD14D42AB8E8A3B70B507AAC3EE10F00E03DCE16B3DE28ED04D64D5D4A27D604871379AC5900A059029AC5448F5019201901067048E1C1548067E26A21C86FCF60854378AE965429DA2750064D730462E9C0B3F8219A7E9CE462D4CA9C1F949B545921F5A00CC06636C53DD96231E0166D40A261E5826A46B40568FACF46E90D5179B50EF9A004F2B6F336A9E36C9F479BAE629E52165A93CD63A2AEE0053F58A018FE010EED77BE4C8F55E3992D8AB012E5931B9688041459D0A9A6A203F4861A4EE2C88E7939F487E659DBC6868955B4F9A25AA1C0A254423B5236F0E612B0C90D86C57BE9A509D9A6AEC1EB1A356C2AF75429518158B606B32A1C2941A2B16A9566CA56D485F9CB63D11B9875A57F96C54B60634CBCA738DB2C680B7DEB709F05A65237C1EADCA56D63C054F4F15BB54BDD3CA53B5CEA8734CD9430A1CA019E08E25F5CAB1A43ED9C15978C9F2C52BD004684274AD81D369AC53980AFCFE44B064E5164A5757B754D73C969094DB5A99A88FD38D061D9BD60720D950CA9E4FC863744E8E855DC376E944F0E6220CFA7213A31EBB3197B9C9501F170FF75E8EC9FA4B8DB2EA3C95078097D83058F7E0F3006F33BAAD131EA70B340D658E0D8BC2EECA26A16A1D5316A93A139C86E791D2FFF100030B3B66340F13206B6188D14C98A22A4AFB649B9B978486854B7575B5582C1679D3D028C11935E29FD7A440126208BA35AD4F04D41855390290A36A72E1C452D568416DB461AEB5A3E1D861CAB97CC5261CF6A4F0390EE5A158F7D8765971AE41565DD0EA5BEF83B445D3D848AF4778E8B8AADB326D695398B6545E2C1A053BACD1280E27E0B04AA9AE4F8E0218A11D4BEE95E329380A003CCF540D10777B2D5E81810500489F67745FB389383BB101D284782C2059C2226324222242A2A3A3A5BCBC5C32728B2421BB022A445D4450ADB43E2C099130E434E89C74AEDC854FAC863F8437E4B2817BC65AACCD1E6107C9718CB7B7E53D1C916567DE407D66EAEA8ECBB465DDDBA2B62A66CDD30699CADB879A476F672ACF847714758EE08EE30C9AE109789E69388C4AC54E316DE0E301060020FD1DD395CD435D6785B2330648FFDC464928AC91E72F5ECAFDFBF725343454BCCE9C11DFC030A353EB5457D6C7840893AEE66BCCDA9CBBAF6279711DABB3F447DA58176232A10F2C479309C6ED1CD375AF59D6D3AE40790A9E32CAD8E571B6357D1E6DCA6543794C5BD89343D774AD233C0F82A3E252FB00AD5F413B89F36B9E619FCE30002E5DB1F87DA07F7EBB4A390D91005D20D2449B305D20124C4251AD7474F5C8EB376F243D3B5F92736F3A019AF04C1FC9BF83930E2172E3C3A347AED0E2EF4FC2D658D4469C5DB800B3F5FEC856D571D7B2EEA1E699754FCDB7E8B8FABE1ADD30F45866F83BA3E61D36E1B1C63955877485EA4EA6F72B680CAF8C41F1CAFC1400F3DA9D2F5C4D1DB02F84682A4E017405692891DD39BAAC430AAADBE55A65BBC49477AB8EED84664C30D3530DEA221A0B171584481512A0DA860320ADCC75D8A08DE8B46B55D765DD6BD61D57793DB3E31A1306AD0ABB6D1C2C0A6ADE214C15BA59E87AE791DCAFEADC098243988A3BADC00DC999AC41F1CE1ED229FC310AF403C0209862154568F717AF897F6E8B52A413A209C34C754395E1D8E424DDE99468DC3A1151D6A700EA5F80390A1A57179BC4BA483546239DB9C0BD66004C819509C2813A4734AD3ED43D84AE7BED33EA1E77799C30F6437DB42ABAD3EAB455DDD5509E4A5943755E99384756E07020C5C81EC4FD37839F00606EAB04021E23A010E9E0152DC782B2E542CA53676A9B20A92EAA31CC50A4D9A535348E777AC45361784AD35F9A669DF022A0C24844342216CB5BAA90C6FA74728F4A5F5A169A65EDF7F45A4A2F078CA6C10983F060900F2AE5D114BB288FE054BD83F290AE1A1C15476843460CCBF95CA70217DF857D7300B0B817C10E8A5A115E2C470333E56840BA9C8A415DC373AE6A54D04C908612A73BB786CBF12E1CDF6338C1A91519C2051E0132A5756D1C9303B873CB9C7337C230ABA6A1665CBD2050CB01B3EEA985C0B44136D3D693698B0E7BCA509E0287388B743DABE0697017F387557C740AFB00604051AF0A42649C49A806C04C39E297261EC139E293F95AD536B35B3B15A900CE4E5943A58488F14E6D79A83ADE9E61002338D788B9CDBB0FDECA4E3408AA8F7E6F73106F8D33FD9E9E717747EB2528D751D3F07AD06DE9EF74B73D812E4B785E4A79BACE2970B86B8CE078F718C15DC25D619770404F802B96A98DF42F8CF882B7BC188FE77D4BB0F9360721407FC06368880878B94B598D722C3857DC7D53E4887F9A9C89AF127A46A7E571B53AC6FCAC6668337561A2A94C5DF3B09405442E6BA9B8190079844080B879682B3A2D675DB5DB3357F22E63DA6EB51C30BC1EEC0A5397F0A83EE5F154CDD35D96CA633065CF33F2703B08E21243011C169F8291D9004D782640429D13A20BC01627C09920B51A4FC7DD167728F1686016D4982B17D35F189DD6F48B7AD9AA8DF8F44C6D6E78D415CF472A538D2E6C408CC23142943A46D0002370FF1F1B066B9FB62CC659868B655166594D19DAEBB9238E25B1DB6A8F77C24C5BD813C2A3F2088FE02E1AE07CA03C861F0EE8193B2E3A154826A60A4D70CEAF3333337FCB35A60166BB002CC48D8D50DEEC94BE94D5201EA1F91A62489E9CBA5C89B47EA3D3DA58BCAAE5AB09D2D9758DBAC76301A8901B1BA6351539238571EE126E0064FA6AF54D4F1BE65E4FADA6D075D562809605EA338D320DF229DCEE416F67C2A3FA143C2A2E1FE0A0385FDCD9E557841B9418C56F5D15F8CE77F0CF0BF01200FA019C3FC2371F45FA789078253C74A6B44A6DA3367AE3F9A3E8D0C78272549C06C880C22E63FE9D86195E661C09B069000CCF5738D29969CC8D0DD5180D90AC7D3CCC0AC39FE151A4B9A2528D039D576F5838AAE94DF2F47240CFB6541F53973E4FD73D5A14D43DD4BA0B6C16541E6A9D2F54C730C105E01E9B40844B0DFC388084E8078007CE5E9523509A6754B9F8C2239AB5D16C32BE392D7212DD990D861DFB389479E6EA7DE5214D459AAAD41646C3D407553CA0D220CDE0390BD548803C8A548B0297FD1E3D9F5E8C6A8087B820306A9F87018F76454F16ECB8DAA6A86661A62D9587DB8E092F00AAD3F04625B01400550A2F7CB0BEA0021540C4A9B8BB72C82745DCFD3310E97231B361BAC9A0C1508D8C0BA9CF91CEF92AB58F8715E171AE9CBBFE086A343732D35D3B0C69EBBA73045807BAB3034019AC8B8ED01B43F66D804780541FC735BD28D007410A1E0C33E171DAF050EB285DFB74D765D360C71DD4DD5629CF485B2A0FE01801801684082EC5AD72B8DB4B2BF023007A5F7FACC0B9C605403B82143DEC9B2A87A1B453B177548A3BD56840A4F1F6BE5683B4CE911391A52A8E8716C85980548A54AB2D1790D306DBA12022D0641C4867470800D230B37938D7540640537D4C5FF76BE8BA46EDE36645D73EA6EE80F27AAA691020EB1E01AAB41D315407E5015CD00DC04384948D69052E5F655F68233DAF02792A7FE07C3CDE93D13E03A26F41974AE3831713E510401E0B2D94F3E92F67AAD1A88F847B2AF6B66A32A72FDF52A9CDCEED1DFFC03847D1CB56C20CBB31E86020CD1DB03908821C7604950EDACC3BA7D4BD2B30CDCE05294D33270EA4AF39EB6ACF67A84F8D6934CB505F9EA1BE3C5DF3FC8AA93E04D396CA233846F9189ADE98ECBC5421AB57AE7100D0DFBD0BE27C00FF37DE16F5887769ADDFB473CA33BAE2076A3C97F25CDC61AA0FFBA5ABB43E79F9B6F86056765A1E97B4F6C158780A003D82F3E464549978469420BDB52203A148B5F6BF3100B50D3A43812C1F7460A36DF90EA9CB45A979B6A19A87D1790FC69BB54FCFBB5A7D66F3D093C639069B07D2D7878D030A243C55F354EA1AF0002E1400C3107B7C2B65C3BA8D024023082FC41FCE05723E80FCDC98DF436CC3BD825D04F9DDC1738EB3C9F533411674CB098071F7C78817942BC7420AE4F4D52A40EC41174698296D5C7DF3DAE404D4EB81742650C23C1E5E88F3DC1700D5EFC0BACB0C3B1EDB311ADA038AFBA77684B73B10EA360C655D8C83213D75F0AD10D33B3E4FECF70890DB15AD3E3DA6B179D0282BF52175FD714B3001F2CE5655F794FA4671F300EE038203F03C13287B76EF2740336AF0F8FFCD86F82E80E687EFF0B35C820911696D75BB700DAEBD6306C88B99984E004F3598802C390AA59D4DAC457DECFE617D04CC4BD9CD50EC2DA47F011B8E03930D00F62988083BE66C15683CD30091BE7AD7C785816E1E6E3C14726E5BF49254370F5817A6AF31EB9E736D1E0A20BB2E01A2E3E2E674C2A3F27803FBD5C27AF1F10F97ED5BB6CA418FF3AE00F9D88A8846FCA7D9E0CCAFDFF58EF57F00C472825CF7CD77939ED1377F90D667D078D85C0890B591AA3C9FF64AFD9C522495E9A24ADAA1E3E1C50EAFAB550E3CEFC08483E8B7330892E157D43F81DAE750E98B9957ABCFE8BE867156EB799C69B8360FA7753115689A66A7E7C3DB220090F0C2F156896B37DB252E31573C8E1C95CD9BB78B977FAC24E6DD9B0DD0FCBA0DC0B6227EF93E0A74FD18287E3AC6E6255F7E354090DFBA795BCFC1B6B876EA4BB96DAA1E528D1EE125AA6B1F8F2C03C897DA9803A24A71971A6940254428AE0F0055D8A04A9B7F51DF046E7A5400CD1B80F4E99ABE8BE0B0B9A237CC33D755A602E9FD685F2EA081D0FBA989C348E140A430E1C5F34EDCACDB72FEEC05D9BCE11B71F3B828F149CEB49D0FA0F97C1100FECD5CA3DC429F9DF5A70018C4B7802D5BB2CCEA76FEDA0FBAF5C5AC26A542A636419A8F4D45B2434FABD204DA6B42B4C1A05B8310FE053DE37853A243A52F362E34CF07B86D560BD36E7518CEB35C35BA71EE857D51AB79659EF5D2C0AC7F6ADE65FD43FAB2CEC5173E15BFC070D9B17D3BDEA1B45F82A3AE2D046CAEEF8F01E059C49F10E4877CE804DF84F8BFD0ADEFA86EBD71C7E48939BAF5D9947A95D28448FB43334EA8264853BD0AA8B1F94127B71320C2E25BD0FB76576487436F9BF5CACA39BA1987E2474D80ECC0DCF9992B2BA540EDFF38F7B203F30D39B1254D12109E20BB77EE94B56B37CAD94B61929A96B11878E69F9902BC4076EA0F0168AA949F65C5B4D66FF7773B6B3D0768B34DB877529D0619562CAC9F54241F9F4FD735D215A44E73B546B301E0D0F7511D7684011035D0B9AED777154C1B68A4AF6161CEA00B2B05AA063284D4C564730347AB570AE4C0DEFDB266E56A713BE22D8989891F03AE02D08E20FE1AF18B0F55E0EC34E7271219DD7A85C5ED7C825A42B8C2A109F74E7CE24CEB1331957214631FADCF6CE05A91005BD063E33BD87948EE7A53905ED9771BC794FAB0E804B6CEE6BADEECC21CDF828BA1BCD487E27EF4B4AC5DB94AB66CDF2B1151971703CE0248CF8D94FD5B5C7FFF439BC842B591DF475AAB0F0893B51BBE9D381E51FA033884454532950FFBA6291F3917402A110A043CEDFF9C37411AE7BCE6AD19EACE0275C6AB0F8BCC26E203E50565BD128F3341F2CDDA75B266ED26B9E013B818702F8C14FD175C7F7B3E0BF3B10A7485CB77B733ADFB0872FBBED3B6B34928D8B3666B2A92D6C7ECD0E6FACC9CAF99C6BE85BD0A9EF9CE766561AE76E90E6CDCDB32B389F4E37DC6831290D32927FD9364E3BA0D7C0FB01C39761AE99AF421F0BA01249EE619F1A7EF82B6982EFC3E4AE4CFFC8991D60EBCFFD6BADF3B0EE31EDE00380BE40F6AA0B1A020403F0254F730EB730F0510E9CB9B20B9BA777739EFF54CC336086FF7F2428DDDBAED7B7EF88E6CDFFEBD5C8E89795F700380918CD88CF8234E1DEF0BCEFCB9C53491F781C96E5DA9D27AFDB649FA423F4C2973A7AD3E8731432950DD3DAFEF73D97FC5F4802E67BE30D26C1E5EF175B263DF2959FEF51259BBE61B090A0C92F4F4F485E00DE3C5DF406C42FCC542A3DA42407F2C8084CC0F21DB0290AA5B6FDB77CAC23A38A3FBBA28CF04A815882662025453085258ADB07AF0C66A58976B8DB2D7335281C31D5572C2F3A4A4A6A62E04AE0C308E22FEF243B62D3F25C0D9B335D3DA76C0486BD3BAB8AA8FBE109388CBDB108C14460D3C8C1AE899840F8DF0C94773D8CC4F26925DBBF6CA95B8B8F9C0B183D6234E20FE0EF1BB0BEDFA3EA7149E2BCDFF275EF4745A63C5E50ACF5CD2FA1702206C8C6A22EA0E53C083F20E86DC970DDB0EAB3AB771C3660946BA02CA5C516774D0FF83ABF3F3B3DE07DEE70E9050D9AD99D63D46B7B69E4B7E36E3BC8500F720855903F7C775CA81A857B2E5802F3F540C29BB544E9F3E23C9C9C9B3C1B183C620683BFEF87D61BDCFBEEF7348E1B9D4F81F4C13CED9FAC0D9387CDE0CEE8CC0C28100D97DF7C4E0B3B54E26CBF2E56B54BAEEDBB35712E2135CC1115A126203E20F3E069AEB9F5D08D8ECEFFF984DE47DBA355766EA8369D7AEDF8AD9BA5CD5C06FCF97CBEA8D7B55BA6EDEB845424342242343CDAE1CE44B8C0EFADF3E15B49F334042E647E96D36BBF5FA4DBB2661C865D5F2558E73DEDE929696C666508A7047FC57FCECFBFC6216FD333F3705BABED05FAD5CB13601470AB6D5DFECBE151D73250F2FC613F13F100B7EEADAA702BB28803F462A2CF6EFC40BF802C1F9F33F22D4C6E3738EDFFC3F397CE02715CD16C6FF071DE247BDE498D53C0000000049454E44AE42608289504E470D0A1A0A0000000D49484452000000500000005008060000008E11F2AD000000017352474200AECE1CE90000000467414D410000B18F0BFC6105000000206348524D00007A26000080840000FA00000080E8000075300000EA6000003A98000017709CBA513C0000331D49444154785EED9C0750DC697AE67B76B77C677B7D57F696D7E52B5FD9BEBAF355F9CA3E9FB76E83677766479AD18C6646110142202424011242049104889C73CE889C1139E79C931002444612410491248424C273CFF76F40A0D1844DE5F19EA7EA9BA69B06BA7FFDC6E77DFF7A0780EC5BFBDFF64B836C4BF68EEC3B32FE4F265E2FC02FB6FFFBCE3B5B3271F71DF0FB7BFE031F97FFF78EF433EF6CFFC83BD29365B2CDAD4DD9E2C292F4BDBDFF7DEF7BDF93F5F7F5C986878665FFF0BFFF51363C3CFC3F16E6E70DFEEAAFFEEBBD1FFCE007115BC0C6DFFCED5FCB7EF8C3BF907DE7BBDFDD7941E2457D0BCF165F13CF16DFACB815AF716B6B4BB6B989DD037E6F0BDBDFDF7EBEF4337C4C7EF8FCEDE7C89F47E07C6C63735D363737279B999991CEECECAC6C7E7E5EB6B4B4246B696E96C5C5C57E3F263ADA4A5B536BC1D6D61E46D78D60A8A7DF525A52F2715E5EAE6C6A724A0EFF5B096EE7C3FC1D0314C05E9F39D9C8C8886C7272F29DA2A2A293972F6BDDBDA2A38BEC8272CC2E3DC7F4DC22A2A3E3A0ADA5056BAB9B29D353D37F4E7672F3FED69EDF21C097AFD664CF5657248B16E7D5AB97B2B4B4349993A3D31F5CBDA2331B181A8EB67BA368ED1D47F7E0030C3F9AC1E2B317E8E8EE85E6252D0C0C0CBCFBFFB5050A80ABCF9F6E1B0F5D9B6E2D40161716C9E8B60FC39373D1333A838107D3B8737F1C6313B3E81D9F467943072E5DD4C4C8F0D0CFF7013C7D565D76FAECD9EDB3F7EBB332C5D3CAEA2AEAEA2317AF1943E98C4AB3D299D387DEFA5CF5FDBF43F98DDFA92CFD7EF19C9DE7A9CBE48FED3DAF7F8714F77E4731F0E5FA0BD9F2F2A214FF04BC3D5EF88F662626336754D5616C618FDCCA16DC1D9E407E4D07DC02227141E312BC3C3C0B1E3D9AFC33119B777FF06D0015554EBF7B4A59B15CC7D4069EE95D08A95A864D6405CE5F31C02925857465D533FF6BDFCFFD1B02B8BEF94A3631F150161515259B793C2B7178F4E0C13F05FA7A8D695CB808D790045838B8414343031EA18970F40D87D6C54B0F52929234261E4D30564ED16237DE0E504955F56F4E2A2A445CD4355CF74EAE4272C70BC4B6AD23BCEE19C21A5E22A06C0E377C92A1AA71F12901BB2AABA9FD50B2A27F6300A7A62664C9C929B2EE3B777E181AE8E74BD77D61E21C8CAC8E09B42F00852380D60D1F985ADAC2DCC10B9161A1C11B1B1BB22722F9CCCD13FA1B16A8ACAAFAFD138A0A66672F69CDBA456520EBEE0A720781E4CE35C4363FC3AD86A708AB5DE67986C8A675F8E58F41DFCE1FCAAA2AA38AA795CE11E077F6BAF6B7D785E5897376F6F1F7BDDC5C8CF575AF4E5D30708057CE00F28781A22120A07205D7929671C6341A96B68EB074F645706040C8AB57AF642F5FAEC9D6D656F79731CA6A674FA86968F4DBF94721AB6B1E158F8082814D64F4BC20C0E7886F5D4574E35344D6AF20B26E0511754F71ABF10541BE847B6A072E1B5B83106B1923DF974314F1EDCD98F8AF1703D76939DB71EEC7BC35696F6D52B23433BAA7AA65025DBF6A78943FA797BDA2713C8545FA2CAE443FC6E5F845A8994511A0139C7DC2A1A6A21272594B5B268EE6C54B323F5F9FD72E7C4A59693234A3167768BA3502DEE00672FB5FE2F6DD1748A105C6B71160F3534435AD48475863648300B94C882F105ABB02DB88129CBB7C6D4B4149E116ADF96FBF2D0045769562DCF803597363C3292F3727A8A86B42DD3A0546C973F02C7B8EB0EA65B8E42FF0FE2CF4131F432F7E06BA894B04784B02E8EA1F8153C78F879C3AA9201347F1E429D9B123475F035454511EF3C9EC46F6DD0DD48EBE42DD830DE4DF7F85B46E01901648803174E3E8A66D88B4C6280191161951BFCCF8C8FB2DEB08AB9C83857702CE9CD798575056BC795A4DED4F5E5BE4EFD002DF2CBEB1F90E3B8F7776B2EBC8D0D03F04787BA4A99C515B3F6B1A06FDD807702A5C45243FF890AA25D8662FC02C6D1E26A9B3B89E3403BD84195C23C0B3E651B86927004642F1E4C990D34ACAB2BD67370B13E0A817336D345D329660F2EF3E97401611A2B0C038BA701C01C6340988DBB78DCF1025DC5A024997E6896E5E435217105A3A06437B1F3093F79E3AADA42277E9DF0D4051863C7FB1265B677CDA06F69D1D7073B3B37F191112E876E9C285A7EA066E308ABE0FB7E2352436AF229546E15FB10287DC4558653E8145C61398A52FC1387511068973D04B5E86BAF92D09A08B5F04012A84A8289F96ED3D5F0018D7FC0A5122BEF124D1658B7BD7507AFF056E773DDF06F89410797661121A814609B0E2319EB896E748EEDA447A0F1098DD812BC637A1A074AA4CF18CCACF7E1775A080353DF358D677AF4FEA655FBE78C15E77F34F33D2528DF5AE5E9956BD7C03C6916DF02A5FE3FB788192BE17486C5F854FE553B8162FC291AE6B9BB70CF3DB4FA0EDD7880BEEC5D08B7B84EB692B386FB10330FCEB009E962C30AEE515A28525098B2244719BD6F60C2504997FEF3912F9B5482602546C8B1C9804940045A68E6B5945023FD9E48EE748BBF30239FD40E6DD7578C495E0BCF6D54D964781CAAA6AFF65BF5BFF6685B40038F7645ED6D8D02C2B2E2E968506052A5A9A990CAB6B19C034B802FED5CF91C3D7D038F612A583AF982CD610C292CCB76A05EEE5CFE050B002835B3DB8E49008D7B01404C46540CBAF0126996BB86019050B666167D681DFC0853BF7019483A47535D07D1B9F239B56284066DDA135129EB0380131B6E5A9743F9EF044AC4C22BCD42E7EDA8C9F59BD2F91D7BF89E25120E3CE22EC02E2402B7C4C8B3426C43FFC553B11A1A6ECF4AF5B9B5BDF91AB2B903D7BBE2A2B292E7E8FE04ACE5DBC02139F4C04D7ACA0A06F0B5D93EB689BDC40DEFD7524DF7989E8D635D6B3CF1150FB0256E963B8EC9E099B80781454B7E09EE83A2A1B698975B0C879094DEBE85D804A0A5FE3C2DEE9AF01C63408202F11C34C1B563E85C0C27184963F4622337051EF2B943036A613682CA10988F1ADCF6879B4D076BA2F63663AE165F4BCA405BE6439B48E429644C52C4C45799450370A233B0F9C3AADDCC973F41BB772924C458042967A2D82FCCFF9B9B95F86050524685CBC0863B71884D6CCA390F56BCFF4067AE73651F37093F75955F43129DE7D89B8CE75F894CEC328B81CD6FE0928A86AC2287BDDC9D9452C2C3F23C8666812A075FE2B5CB68981858DDC02BF1940C6C0D8A6E788A95F82435415CEDE88C519B338A859A640412F10EA379361E85B8AB0C221293E16F633C974D042996404C0A4F6355A1F636637E1DD13D6C74434B48E92E12D941060E9E816CAC759ACB2600DCA6E819681A9888F59AC1FFF71C7AD77807EA117DE0628E06DACAFCB56579FFD655A4AC2C02582D3BBE981B08A71E96FDC9BD9C2D0C2265AA7F8818D6FA16C8C1F1E01E60F0071FC80ED93DA601D94869CD23A3C9C9EC3E2CA73AC3C5BC3D3D5353C597C86B4C22A5C09A8877DF13A74EC63BF39402F5A6042DB1622CA27A145F23F550DC127D70B11503A2BC5395D8F021847DCC1159F3A5C70C884895F016E950CA18456967B6F4D2AB8133BD6A4D89729AC8F9FB8B0BEE2E10D94135CD91850CE533AB289A2411EBE59E1E64E91B9387B49FB05EB471FB6857FF11680EF10E66E66DDDCDCF8C3DCEC4C3D3D5D9D47DA06160829B827FDEE7BB3C0D8D226EEF0B69A965EF3600BD50F365136BA017EDE08265DDBD06C02AAC6F8A3692C3D7D8E659EB5B55778B6FA02B30BCB189FE27BCD28C1B5A046B8946F40CF294E02E8F24D62A0F7ED3BCCB4ABD0B449C08FD4E271DAA1494A1AB9FD1BC8A0E967B12BA97A4008B420E122F18D33708CA98453740D6EB7ADA09820B3F9BC34C6998CBBAFE832EB12C09211021CDBA235EC00DC92008AD898CD1895C94413593D0363977010E004CB9EAB84F82794CFE9AE10B5DC77775CB6A2AC44D1DCD4A8E7928E017CD36A258BBE370F3C58DA42EFFC16EA1E6DA196A7FE216FE9BAE5631BFC00B710593381C8F4620C8E3EC293A5A7987DB282A5E5553CA5C627DCF6F1FC22C6A6E6D033F410612905D00F6982770D60E8F21AE0D7BAB05F560F9C125AF12FE7E370C4BC1A498497D3BB8EF43B6B7453790616B1AC74648B47B8871C6674593F6CC38B1151318D5C5A940099DFBF2EFD6CFE00DF002D4E58A0B0BE72269312FE7CA100787F0359F73608FC15123B3711D5BA85C0BC7E5CBFE940D9EC4CCC8E8CBFB1B1291BE8EF7BCFC9CEA6E2FC456D384766F175BC4237C18D135C3FE35CFD2311EB086E4240DC442DADAF5C581E5D378F1FB61F3FF18AC60E5ADD2AC627673133BF249DC9D905C98D871F4E33813C4443D7008213F36114D184C006C0D8239E4964A790FE8A24C21834EA99D28C4B4E45F8E05A21C2AAE6E9821B12BC64C6B8F816B66FF58BB4AC1728233C29A64987201F5270689A8255483EFCF2C691C092A6A8E7392A87E9BE43C27D36F8BC4D099CE4BE439B04BB490BA565F730337612603BA1D3EDF33B9FC122A01C4AAA678B84D58D8F8DFD9DBB8B531C75B84D0BCF5BCCE44BE89C13E080FB04273AA64A5A590D5DB58E0005C4EA71BA2DADBE801F5E0EBD20B37713BE054388CE2C25A8C7E8197C8881F1290CF2F48F4EA097E0BAFAC7D0746700C50D771090900BD3A81684B702665E092CA49DE11E704B2A635494955948BF3EBBD94C59EDCCA8C3AD721C372D82791C5589FB9B48632992CC8253C08B22BCE0CA592698A57D008B87B690C75897798F7257E54398F967C1AFE021226A9691DAB28C8A8117A86610172E9BCF232C2F9F969723C202E1A575D34A09B2A2975259F60054ACAB7040330EECA3F30440BDABBA4B26B69E88AD7B80A6C7C028C10DCC11D8283F9CC175548EACA38A5F571162256F2B84CBF203CBA50764DE13ADE84B962E1BF0C81D82777426BAA82E5734F7A0F5DEB0745A7A86D1D87D1FB5EDBD2869EC4276450B8208D022A615D19D605B9A086B7B67780645E1D4891321C78F1E931D3F7A9447DC1EDBA307AAA98E5AF8E7E3AC53A3D4FB8A3224A99D8571F3322D6F01A15573F02B9D964E213F59E1C2024A0EEBBC145A4D74E302C26A1660157F07971D92105C3683A0F20544543D4176E753540DB1F4E11BCBA65B67F6B004628CCCEEDD40D520E365DD04337B033EBD5E845F5E2BC6C1CB8CBFDB00CF5D31E3CF6E616C191899DF40F5B0F8B99752F62F61762F15195EFADDBC25D0029657A27C12E052580DC4B32A886D7B0997CC01B886A74BC072ABDB50DA7407E52D7751C623BE2EACEB404E552BB208303CB5105671AD48BC0B58F924C1D6D105DE21D12C634E85383B39C9DC5DDD76CF6B459A1678DD3D1B7A213DD29B146E1B2BE0D52DB0D996C3F3287804C7CC71A476AE4AEE2B924A52BBE8819F50647D0C0ADD3088ECC321DD6418F96413FA221F17DF9B4774ED13E4DF798652C6470150D491259DF3F04CEAC619EB0A7C6E5282CF8C4BF0815E313ED64920C07392052A5EBA09EDC8C70C0B2BF48817FCDB6BC815AEDEFB8296CB5B91E909539C2C5A5C0A2B8004D1BB135C345BCAC8C6558435AEC12EED3EDC233318E3EE13523361B551A66F47416D3B0AEB796A3B5054DF29C10C8ACF820D73415A1F60E397087B6737780545C2D4E87AC89B03B87D000D09F0C88D6ADC88BD2FC18B6A94BBAD5F09E1E53F8253D6386EA60C2290B084E525B65289A99DE7F7A7E092330EBBDB23D0F06AC24183521CD18F835D741DE1AFB00CE207503227DD26330454F7B3C3614CD2F3AA83E2CD329CB22C8722CF2786B43E83121CD64DDAB540156D2BA8044EC1297F516A0F3358BC6775AF31DBBF904E164F0E3FC8DB8CD5B1EC30A208ED162B09012EB46E1581354FD9CAADC232A90F7EB139A8EDE847466923B239EB10008B1B3A51412B6CA21B973776C22B3A1B66A1E508A97E828CFB60E794044757770444C441E3DCD990BADA1A594B4B0B4FB3747601AAA8A98C9A78E749003F362CC145CF565AD40402D87DB8139E63D6186CD386619E701F36BC15B130AC660E3E4593FCDE285FE0008C62FA6011D58C6386C9F8A55E094E1946C22B8BC0E9CAFE25E28398853FC701BE194350B32E839A6D1554A55389E337CAF877697DC6E5F85C3F6517E0992BD6381F3ECDD7B18C34C6E3DB5D7BCF7349E44866711C4165288C6D6728FBF7608AA20104E75BB90CAFB265B897ADC234AE5772CD9A8E5EA4953422A7B20D45759D68E8EC47CBDD7EC46797C39421EC66F2104238B6886FE707C4ECED109402570F6F84C72433069E0C090E0C92458487CB22C2E4678F05AA8C5A0414E194751D8E9957E2A8593994ED6A6116DB07A7EC71099A45E27D18C7F5C338FAAE647502AC6DBAFC718BA4FB70C97D8002C62387A8325844B4B1C81E81BE1B9B73B64D7EC5B3F0E511EE6CC5DF799A9677C1B906E71DABA16A578DCF4C4AF129CF6766FCDB86A9BB00D574ACA14D75389C49299965541A434B2A4126B1E74E117D375BC82002F3A5B2E24F19DE97F29437617B96ADC0B56419CE85ECA80AE56241626E15AADBFA905CD4204DD96ADAEF21ABB41E56C139B816DA0E87FC25497888A0F5267733C4B018B7F58B819B87174222E3E0606B1BFAA52EACC4B986D32D5A8363234EDEAC86924D2D61D6F0EB2A5CF26E85494CAF04CF30A812A1B99DC8E9A688D0B420B9797AF77366D87594B3C816254DE3C357E89A7A8576961B1E49F5B0896EA0E52DD25A67240BB489EFA7F55540D3AD16175DF977AC2A7198F08ED00A8F5A54E3B871FA2EC0B33A36B8163F47896D050994D7125B29EE321EA6B7AF208656E75B410B2B598247E912DC8B97284F51592E5AA258BA04FBBC45D8E630B1E52C4337FC2EF22A9A248069250D482DAA81637826B47C2A713D711276F94FE146E041B4DC843B5B48BDB30A97D034A89C398BE0A8448444442332223C4C02B8BD1E2274C85D0B1475A047420334BDDAA0685383D3767538E7DAC4EC350EEBC4411845F64237A8195EF1A5A8A595D50FBDA43CB48E3AD65C150457B65D54B74E6EA18D3D6815EF8B3819CCE2FABA57067C0A262580C28D6DE2FBA06E5F091DCF0602AC93C01DB9518E6396953869550B05D3DBBB00D5756D709DB2BB00184D8123AE6A02B577C6F1888D7FD783558E145624500E053CD4F5EC04B4DC05D8E43C8155D613585224B5C85C827670170A2AEA51DD7A17B641C9D076CBC3E5F02198A42FE266E6027F961F70E57344B56FC233A5015A3AFA503B7711BAD63E482E6E46F8AD18B8BBBA848AA9DC9634AB96AB427B00520F4C69C58DC87B50223C55C7068456CC821D102A0948B44C1145BD4829BD835656F92DA32FD0C6D33CC2F68EA58568D55AD80588164A14CD2253FB144FC23C69083ADEC5B08D69846FC913C99585056AD075F57C9B70D6A1460278428257855376F550B2C8DC05789E0085D0798BF12DA67410F787C707A766E68B96D9FCCF2F2C20A1F23E2CB316609DFD443A3733E7E5D06ECFE306257AD3D43918A7505D8E9F827E4025F4BDB371C1BF137A894F38FF78227D5FA8D12EC574FDE22918D8F84159E138B4AF5BC0D23F1937FC939056D68C885BB104E81CBA2901E4D21267C2FBE6C294DE473D395DF3C818C319C2D309E8DAADF744C922AC2CA17A08191577D04D2BEB187F89360A948DC32F5033B0860AD6739584984FCD2DA66911CED9634C2AF76010D503FDF04E187867C2BB605A8A8302E025E76AE8FB35334C54E1B84525DDB80ACAF6B538EDD40C15AB9C5D801A7AB6B0C95E94C4DD98FC0E4C3C9ECD9F5B787AACB2B97B4BD7CA1D3723AB0870590266CE639636274131E1B9CE019141E2AC34DFD04B98854EDC1C2EC73CE6B0E889343412B30FF15CBBBC05269D97D0B1F0869F87336E9898E0BA5330EC426F53B54946164B1E01D0D3C33D747393F036697DDBE7B50512A05B4A07C2CA66A1E9D10CC3B01EA9D6137D6F315B2F31E28CAD9B447C6E2DFAD811743E7889565A60DDE01A2AFB29FB538DC9642C0C675963CF72C698F0AE47132083B741542FDD35078EC9DDF0299997006A33FEE97A37E1B8650514043C873A9C71AA87AA6B0BD46C7277015ED0B7A5E42EEA51CE5DF23AD137348ED69E11A8E858E0174755E010D7006331C7A09519A7CC4A533501C63049809B65FC9C856EEC0CAEC63EC615C2D391BEE6C0288E50F93D87DC2792E29EC3A2FE92910B1A6AABE0686F8F0B574DE010761BEE31B928A8EB4644541CBC3C3D0B37D6391E152B275CB11367CF4CE4F4A80B75B2688E29CD28590980456CC445D79129469B1DCF186FE6119054827B8FD624804D74DFEAFB6B28EB7D2EF5BE191D4F1158F1185E858F9891C799BD1FE09A7F0D8E1B25E298191B74FF42F8963E91005EF1AC87A67B3D5DB782D9BE86F01AA0E6DA80735EED38E75880D3EAF242FA92819D14DC6F89AD08CE57BAFB4751D17A0FEA7A563879410FAEC96DD04F7A424B9B813E2D4D9FD08475094002D49598195C8E9E865694388FA1CD5BED28018FF1B87411395DCF5043232861C9A265EA86CAB252949494C0E28619CEAA5F80B9B33F4A5BFB111412C9F5B6A8CDDCDCDC189EBFFE620CA4050A80917CA11E1983B81EDEC3E25448F31C67B2E60BAD9A8577C90CAC23CA50D3398A6EC6BB86A11792F50978797C6E0E9F1BC88EC58975A128AAED321FE2AA673E0E5F8DC5472C90CF5B27D28D2761CB5A5224107527260CBAB08A631DE135E21C2DFFA24F27CB1B39C04F3942D434B4835F1547A68C81C1196D68ECEA436E1507F9669CED6AE9C2D0D60DC67C93E72CC3611CCFBF474BD3A1A589C1B8368169DD9A8626CFA5C86968844D4133720A37D3E7E84DCBC823BC927BAB548FA808DDDDC4B9AB16282AC80701213F3F1F599999D0D7BB866B0646D0D4D4427E5E9EF43D9E473CDA3CDFDBE7C22E89AD94C39F219C12BE25CB9660269108B660BE52A7F100379306A113D40ADFB822743F5A9732B1B0BE7CBA6E3693460E8BDA2002B460312A6AC36B3E8550308AC12746C5F8C4B88C5FC7C325BD8F8AF020AE783540C5B68609AB166A2EB43C018FE59276C01D9637C504A82E01D4BE6E8B50C213193830BD158535ADF0088F87C6B5EBF04F2AA282B38CA2FEE708CDACC64DB74018F81613D2436813DA45C2BA18C1133E89B321939CB43DE67B59405AF30AB2580689D71BD7BA01E7F47E9CBF660D270707E4BD8624C12A2C2C040B67A4A6A4ECC0DB7B1BF306C016B630CF1052390FFFBC3138668C4AFDAF28968D18CFB403DA713DAA1F56B7584795B4A18949A384B12F973553260BDC6CF6A151758B30A40E74C52599AE9B8C43D78B71D8B85402F8B9410A6C988D1D528609A91ECAB6D5146DEB70D6BD0917BC28EFFBB5E16A680F2E7B95ED5AE015237B443573C4C0E2D62E2417D7CCAD60E71F8DDBCD13EC7FF9C1752F22F7EE228A99C8B23B1EC33B2613670D6CA1E250000D012E7402EAA19370C89AA7D52D219D0A513A876062DE63973185F3E661B844EBBA9D9EB617CC12E139F298F06C6C5BDDDEEF57F0B1A3D8BB9DA5C4C1BA73A200C836889D4364E563B8660EE346423FAE857573C8D206D3E83E38678CC3396B020E31B5482CEE945CA08052560E371A92EA1E23B373514A36663177A0E1DD8E8F2580EC6F0544FD0CC6C12238A58DE0BC732D146981AACE72EB13BF5F87B59A5E442FAEFA96EF02D43126C0862730F68CC7757B77C497DF435EEF2AFBE1654E079FB0A05F9000E6F52C52A1798AF2118E12DA1FC2D6270C0ABA8EB4EA6604B3954C6A5C460A0BF0387E106EACF9CE39E4E094AAB6D8B8A2BBEEBAE61382B1E4F9CF8715956487959464FCFA7D9E699EA73CC13C7F2FC0ED9C3D16A83CEA24004ACDFF3C05833944944D4037A44B7A73371306E0C6A4E096FD90DADA04BC5892382734C3E55621BC12AAE0CA5B0DEE9AE8F8B7A08ADD8828A245363E7EB312870C8B2480870C72A1EB9E4380C352FC13658B9A1B07D9DE2DB81CD4095D7E5086D1FDD00BA890001E525078E7EC6503E85A392328BD9A164E68DD2BC8A08A93D545998C8B3CB97779082FFF1E01F62EA1A86F89B3DF55EA83D4026BEFC1C4C11D868E21082F198757F1335CF66FC5517563DC3437454E4ECE8E55CD12CC759EEF0B6812BC6D80E2968FFF27F1BDD9D93939AFB7033C4D80AD545F56E0CF21922FD59348260ED7DB43B06231EC9EFB081E398FE095CF8EA2600A7E451C7596CFF3F107546F3B60115C88E306B178EF6A21CCA9E650E243290B6A27860101F0108582438605B8E29A05C79401763AEC76983CD485F5F9D2FA42EE403FB2072614730D83AAA074F66CBDD2798D0ED78874A4B7CEB0447ACAF66D9E997E1E99842700CAAD6F81F096E8054B7280FDCB28BEBF4CB96C85105FA27A94B2565E2DB44D6CF199BA21D4D5CF232B237D27D64D108C2ECF1F7EA2A8B80FDA5E809F9C5294299F3BCF75B8AF04A83CE92C920887CD02A068B944D11B573B43397C029E7913523BE6574465A4E4312D7406211542A2A2AB136E60F91CDC921A71C2300ABFD4CD837BCE43096219EB4897CC31492838A8C7F6C9258B31F0BE5438ABB0EE3BEFD9C2D8DA01BDF06EC6D77BB8C1B6D138A41A1774AE6D26D58E31C6D1E2BA16709BE032D85CBF697DC27577E1F5111E010A78A5032B28E3291F7A4AB99F7DFA7D0A05D4F9748D4DE0E1E3FD98D0B478FEE030C10978BF3940D533459AFAA67089AB471065A09DE63F90A54B7C1D81164F53927A8C20820B262C9168C2A9998557CF2194F132B862469A0BFB67757229310A0775B3F8DC59A91017B3613FB6490A372BA0ED2C2C70506ADB54997D2F30F35E6198D08FBC2B091696C98CBB11B530B47123B4055A9CDCDA44BC13B7999DC275E5D697C7D8972F00D2F20A77E01160E90EC041421C7C2A9D8AE1554EE958D7764DC0313012275455B30F1C3DF2A34F4E9DFAED0064D9F01F15CF9CD6E7B6E984818D173C33FA1040A5C3AB88B0A80926D4CF51A29F25AC39426392A95D6071CB8421D4988E658E389F50FE5F61DDC8D589EA0730F0C860164E957E368302A8A8270D433BA1E9940DC7D461B670D538CBDAEFA24F2B744259B8B3E5338BEB8375FA082CA3EA71CDD205494D33B84DB715B14E00938E80B71DFB24783BAEBB6B7D0428AC4F82B703F0F56D255DBAF6E13A32EAFB60EAE0FAFCB0C249DF03478FFED5C704B9D76D7F651796F69BD5CFCA3897FD4BEE3DFBAA695C7875C3230EDED4FCBC4B1639DB984572F302753939B8E88625CE4196A8CF31F371705474EF1912397C12E3CF742EF208687E595DB8EE9DC39DC14916E3CBD070AD606D582A6561459B6AA8BB3549094A240F63964916CCF8F6547F6E52FEBA6CEAC8959287124461753B16B70352645E29F6498963C775B7E1490085E57D1164F936D4EAEDF8185B508FCB46A6131F1D3F76FDC31327FEE86D49E41BC5C01D80BB5B53AAAA3F56543E55AC71450FD621CCB4859CD873DD23BD7D99E096256B1327877B84AD131B68A10698D9292C70672F8683754AE2E99D4B88617913CCE192817F31ADAB190EB44045D680EAACFFB4FCDBA5F867C2DED93279406AFF6CE21AA169E400772AD721A50F90D0402B660C1409636FD922B9EE3E80DBB16FDB6DF75BE036D45DB8FCE087D9C6313E560C2C213031076734B5DA0F1E3D72FC1037507F6D0B7C733F85D7849C628D78F732B3986D4C13B7B596A51984187726500D2EEA7F81BEB92DDCE7564069DF33699A27D63AC480470CA772B97DC0F1079FBB0C63FF5CD8A78FC23E79901D488D54FF890422E29F90DCAD5207E19CF71076F19C4FB380B64BEA870BAB00FF827144D74C724C3A2BB9B480F8DAFA96A4C421CE6EE2D807F04D57DE7B9F10A5F8C865D2EDF8E8BC131F8F1CF9D18E5BFF5A16F8C6C6D41F7381DCF4B49AEACC556B7F0492480167B9D9842406ED6D6CEBC4A0BB99F145DC17E0C4405BCC7EC55A482187EFE145776119D9C8A9DE245BB9FB12C0F3047839500EF006E39F0D01BA32643824CA01DA24F649109DD206E1993D8CA0E20712C8B4B639A97816D627CFBAF2CC2BB2EE9BAE2B00ED776566E67DF151FEFD523E4F8A8F0FE849F5BD30B5777DFEE9A953BE07457C5438F5F565CC9B2EFCB69533C6C7BF513CAD1879464373DDDC2705A9CD4F388FE5423A35C08EC94DB48CB09DEB592338CE8B053C0EE7C5524F74E5082CC22A61973E0E878C07BB00CF7912200B68030234A74A6D476BF32864964C6AD906C8959144C6C5E47E261ECE5C6E0FC2276F845DD284648DD9DD4FE80184487825DB65CB5E58A284D971E3D7D0E4905F837DFD9C9DE78AFAB18630E3191F754C2D260E9D3C61C0BAF4CFBEB20EFC260077DC5B49F5CC2F9868AACEEB18C32DAE8A59728DF184B31056FF555CA990D63838442FE02A6D38773F44DCB34B1B6367322E3F3B1648805724803D9CF61154C6303C8B26E09C2C07684BEBB3E373ED08D09EB5A3238F80E89533C24DAB87886F986651CD5D40761F9205EE295BF67E2D60C981ED3D6F3EFFCDEFCBE363FBE40B44DF2E86A2BA46CC9B032571FFF5546E3B0BBF1903BFEA3E57C7354E9D3E3DA26DEA04B7942E699D238AEA4D740DCB1D2A3AEED9A3B0A132637F9B718D9BA0BB1009456880E7B72DD090A2EB5E802E1C2D882422E00970E288E2DB8156E8983640456710EEECD3FD0AC6D82DD11A5B67D90B2F48EE5C36B0D7A25E83DB6F717BDD5A3C677FB616EE5CF780C9719C53C0DA2978DD1E86868185A44F7EF960FDD7002887ABF603BAB51D573196AEDA851218DF70E63467C8E3D2B14F7FB00B6F17209FB31303250B244051C2D8D285BD39C4F7CFEB81A6B11CA01D9F2BC11316983A200174DA86E8C62C2D592333757CC31457909F6C437C6D5D72EB7B5D50BF190FF7DE1749A87A7415ED148C0B5A1FC33EE62E0C58A3BA670D41CBC42AEB7704F0ACECE393277E70F4B47290DA45CD97EA14394D7CD86D504C75CC9A26406E2C6C5BDF5E8042891159F872A0DC856F50A5F6667F9DD2380D9760EA7D06372578F6DB00450C14009DD3C519945C590014C9C5377F9435E3235E55F05852654452F9629CDB71D137613E951248F9F05396636BA8EE7DC2516C2F25B566984476C32D670CE15593D036B5FEED03FC5449E99D43278EAB9ED337EF7788AEA0254C51E6AAC6C56B46B86860098B70CE5EB3A618DB1E49EEFB3680A28C318AB90FAFBC07F04B2CC7D5EB2638AB6D08D38042099E705F27018E9958829629B73A3F420B2C1A473807D122332772754BB47AA2A896BBF1DB0A69B94BEFC44379C7F2144DB4B8E6115E07C86BE5B43856D0A23669CDE4E55DF0008195536C1C3806F86D037470777B5F43CFA8C822209B6203FF10556BFFC20708E09B0A2C1A835540BAB8AC013A37BD611DDF4D908F698974E7DB4C26042362A0BA7B0BAE85F751A0AD8781A533542F6841CF398E99B78F2E2BA071A34AB2B211F8E68DF2778F4996268025353E96CA19D1238B025B14D525FDA2949183FB62F9B2DF024B449C1B7F8EF6871C5B706EABEBD18833F40A03F6E58EB470DFE28794F6A610C413CD46C0CCDE6D80E2C39FFE5662E03FBFFF9ECE1115D5E7D6AEBE48A8A0FB50FAF721C400020C64AD2632644829159A7CAE823872315DF30A0C5CE261C70EC4219B6ECD8EE38C338B682E175DB50AC0D98B9770D9D2971D48279C69651EB4326F5A5980B832A04C0E4C58586AEB1CBB1D762454A105B0D7C533E108E5655F79F2F6AC2CCA9DAA9167CCAE6B286E2798C05628702E7D817DB905BB21D7AC110A298F28A84CF24CF10A842524354CC08C572B116037CF677B21FE4A5958E3B2F68F3E387A34D7372A0575FD1C6A1734C2C6C513DEE1A988E3A7184A4526A088004B1F4A6F3CBC7C0211ACD97C6EB740F7861DCEE95C87696009B32825FD9BD138A7A5834B86D6B0BE55070F5A99B87C56FCEC2D66D6F8FA69A4489DC7B69531CB4A7DAFD475BCD9B2EDB5BAFD96B60355B86BF9D03329CED5F52FC225B61B274CCBB815564901B79D457B3F3CB85D1BC0D72CE0453550B4BDC3F59142B69ABC5ED8CBCF6F477C5DDF99CCF1F69B97318909090AFC14D6CADA86708717AD34F1536C1A7BC1CD528E3A79658F00199252CA6B406668918F1152C62DD50A2E7633004755534CA86159135F0E4D7D1368E99B4143C710378373A5EE229C9063582E243281889244687F3B6AB3505C0A291A0870F28E63476DF96287F13AEEBD19039F725F670D6D2C4BC27306A1CC55BAC31478359CEB61127E07F68CB1DE22FC54F0B5D6CFB2C3E180AC6914D61E8130B3B2426252D2DB064AD264EE0B75CD9B3E7EE0F8B13FD2BC7AD9E0EA75C3999AEE87E8E335186DA30CBC432BA81F5C462DE34DC3282F736819834BE02DD8BBFB21A6A0832E27B653A72580D1842700C5D1AA84302014965B7C5C82C662587415E9B434A1BA64513C15314D645321D3CBD596D72DDB6BA96A7FBDB75FBE92270AE1AE3563ABE8A0D565D43EE2FE770D0E5CCD870267D1577C5A7023EA2E9C583AF930DE85D67041FEEE335471E5DF2F3A0D0637CC111619F13670FB1EFB5A80078F9F8834750F475EDB24AA065639C65C422DD50B01B17978859B09CBA8A2DA5BC9E05D35C4AB20CB3A61E3E107F7C028A4D68CB0B45864713DCD41D334DD92573AF1D2080130B979467251014E92E9F708A57BA5AA9D39C74ECFBB9339F75ADB9B6D99784E059516D1455474CF49714E8013FB87EA0EB592CBDEA478E1C2B0E1CFB94F5A07973EEF735297530503F39BF0F2F5FD5A70B43E6932F7B50039D80936F58A857D7C03EC63EB29B4F6480A7432B36015FBD02642AC1D58E6809DCBE7B494F2415E4FC71815925E062BBA75507C36325A68752D8B88DBB63E014EB8AAC8A2425D1189411A126DCF38E4D6F7A6D6B713F7E4C9E1ED9D85DC759B6971E2757925DDC3A79CC7BCAF9307058B725C6289729D59D69A2DA23BC7B6318D7394B2B81050C33AD4C105B64E8EC8C8C8F82A78AF2773DB5DC9D702FCF9E1C3FFE12707DF3FF2B1AA519F82491E540C83E09EDCC045C9490AA5531C4E2F7135827D2321968B9EB497335ADE5670BC58D03D0B8FC814D8BA72CB3EA78E9DC212972217687D02A080B7D7FAE45A9F046F57A6978BA53B71EFCB94E652A1A6D00344FBD5F188979D958C42957BD7BFB89C8BC31CAB8ACD7F6DCF26984474B31218E0FC6692D7FBADA2BC8B2B2801E130B1B4447C62E257817BB03D23FECF5F5AC6BCAD4D118FBDF7D9E7B283274EC98E683AA62ADB34E3885E224B0E4F2AD35CF5C8A604CF7F06C53FA79B1768F39206BA41192DB1449418A22EE3FD2A5EB49DD1340C27FF30B8F80421BD9AAB193DEC31F9CF62088052DCDB9DEF0A9D4FC8F4AF4794FB12C71EB96A6F315C39FA8C6A102FC76D99E6DE75230EE8E6E3433D4E09CDB846CC7AF3AA2FD7F6A27BA41225B58DE186DD46484216F4CDCC11C2AD83B70CCE771E136E7A62475CFDCA56EECB00FEEC934F6497AE68FFB18A8E7D8D8205D77F0D33A06EECC2EC3982334661387891FF96805E044CB9951F5939CE0CC6D648644C7184F5F056089642224A286D839D870F7CC2E390DB3EC90D7BB134BEB09B717712C77E9599BF83E0A43264BBA715F0246B649C6B639CABED5B806354173EA7B57D78AD80974B14E3A479B99465F5A8375A25F47182C8CB33EE2E213EAF0E8696D670F3F2DC3B17DE0BF139A1458A01FA9BF2FEAF05F0DDC39FBC775AEB6A8DBE5328CE59C4E333DD445C307345282F9D523048C5CF75B8F7C2C521754B8E2B8332E09AD840EB122D957893AF2764E20D578DBF420535BAE0B46258D3AD23D30B514A4B2DE85B9504D27D43A29DB2651BDEDEDE56F4AE8DEC205AC7B62FCEE18AF0C706DC8020B8CF789458DB5DE2C0FE7A68175C38971615414A652F6E387AF0AA233BA4A5A7BFCDEA76DCF4CFDE1CACFF461678FCBC56855F6E1F03EE320272EFE2A2A9271CA3CB38799B8639374C8F736DE30A837370CE28BC537BF1F99548AE61A421B47880C370B952BC6B3122F8B398ADE154ACF0EE0CDC2312604F8B4C2B6B43253378413FAFD5DD3BA21442E99E11E5DEB224BDE621FF6E3D8E8ADD6A9E43FA85386254C28DFF6A4908308FE6721467D6715563B0F1898091852562E3E3DF06AE6ED74D773612DED84CF88D00BE7FF498A28A8ED1BD8B86E623178DAC468D5C42105A34C0C11227736CD722B30690CD02B896A58C3E276C27B924FEF9B50C761ADCE84CACE2B8F3312F8AD9993DF096004516AD1891CF21D21B2818F804C323281CF9ADC352CC2CBAFF6CDF807C6F5952C66B592D42DA98552BA0C8D9B2B83847B8ED71D352A944B9C612C585FDF62DF6CCEE51D9D0BF6181C090E037C1EDB8E93F7D6194B917E21B6B1EBF960BFFFCD34F653F3BF4D1F77FFAD1877FF4938F0EF2F6E091CF5554AB2C7CE2D9613C4221572E7A98F9CAEECCC13E813BD4B5933009EA60A6A6BE175C824B6CD90272BA7875FB3293C302E3E3E2364479212CE61062C418CDB6D0DA959713C4A5A1A27F9EEECE4BB798594BF81CA19634B2DEF44EBEC7AB9AAA70863B354A3655384870C2F21459185FE090FEC6AD5ECE6B1EC13FA506FA963670F5F4407676F65E786295436C5CBD76D33D3B30BBAEFBDBB4C05F7CF699ECCDF3B38F0F7DE7671F1D38A774E9F27DE79812EEAE100CB370EBD0327A269E4B3558F9DD27D0A2DA72582F17CA86B7F88FF29422A4A81FAEA171521C2C63E9B35B0CF37E358739658C99011C2F5ABB78B0CFAE4213DB2FA196C431615D641771C69E177ABB37D2654BF04BD67622DE891245C7BB0DCEA9A3F04BEF8089BD072CED6C91929ABA179C7053659EEF7E01D2BF06C01DA03FF9E8C33FFDC5E18F6D2F18592D0470FD368FD6D84430FD93CCAE8D53FC37093A29240CF29A903A9878E4F002E93A587A86A2F0CEA49499F7CF2884B0F98CD7FB6E72F3954B4DBE21B0760B8619AD59995B0C57588A9CE532D2072C510E5CCDC331C6BDB3DC2D3409EF855B320B61F7485C373747544CF40EB8FD6EFA667CFB3257FD6DBBF0DB2C70EF63C2C57F72F083BFFBF0F8B1180307FFCDC8D22154DE271C0E7B84BADB450B2A62A791CDD6CDC0DA17D6DEA12C785F4819B48E965ACAB65014C16282D6CA5AAE656405E179C3B8C09DE95FAAB9700D8E1A1D3F88938C79EFB1303EC4FA4E81258A960757EEC428C0271DBAA6E6F00B0CDC012776F9C48EDF9F7F657CFBB600DC81F92FAC177F7CF0835F7EA6A25A6115902C49F3B56CEB3A47573038CBEB83EBC7A076C504F9ED43DCEE5FDDB48BEC7C455969A3832EDFC2D6AB9D4A49548100572B2586CF4D78F1A1560017D1EB7094B2D37B9773A8A01441C5A60E7AFE5D30F32B828E990D9CDC5C91959525E0BDDD4DF726822FB3C22F7BCE6F23897C9D05EEB7C6CF648C8FDF65A2D150D6BC7ADF83127D6627159B3E5E35E4EC81DBB59D681E5A7DA56E5DF9EA63C3A275CA5C9B656CFD32EA8452528B13E6DCD8E7CECC5166D433B6BCAF178CCF8D0BF1814E3ECB953216C62D30F4E6154E16EE30B7B541724ACA2B828BE3F9F15B63DB57C5B76F9B050A903FFF549E70DEE5F9C9871FFEE0179F7EE27CCDDAE3A9894B2022338BC5954D9B6A5615AFFE4533076AF635EB1195939BD2C0866BB8A729A79F263CD1459C6679A21FD40525E3307CAA9F07A59B75D0E6357557AC4260C83817712B72FEB59B6E2F46FEAAD6F56D06F87391B909F3DD4F0FCBFEF9BD778F5EB372D8EA9858C755F786CDF7AFE4E124AF8BBBEAD3B27E8B1618593DC5CBCBBA258D4EC43715260C5D260C7BAE799CB78E85262F05D37348868EB139DCBD3C8708EEAC944D857B290978BF4700DF3DFC29ADF05382E3E1D7E2FCF8C081BF0FBB5D8894FAF98D4F0D8AD695B8337D91F307CBE89EF5A89A2909A0614887D48629D3F274598C5BF3128990DA25E83884E1B4A6FECA0D1BABF6E8D8D8F7859BEEDB24FD7D03F8CB23C76487B888F331778A77CE07478EFC7733678FCDE8AAE97535BBBAE7D2BC95B2927BCEE87A74EDB404F01A17BFC56CE22A77A5EDD246B9C8390DD78472285CD01CD6D2D3FDBF7BADECF713E076EC3BAEA62E53D4B8283B75FEC2BE73E0D811332D0BAF0DC3E0AE2D2BEE40BBF04AA688BAB9F5D886D94D21F99B8475E2B24F07E5F53138C7D540C3D062E6FDCF0EDBFEF4D0473F3870ECB88CF3E7DDCDF9DF7B80029EC2398DDD23EE7FC07F1EE427070F9C3CA969DCEF98DA8D200E9B5CD39B11523C88385E46E6C62B44CD436BA069E6F8ECC091CF037F7CF0C07F13A1409C7F074880028280F12F1F7FF4C343A74E5B1F39A719E5E8E5EDA3AE63D06F1796037DE7C8CD8F4E9C48FDE98707FECFBB9F1CDECDE6BF1700BF4C68FDF7C7E59B5AFF0F9D2B87070BD59BA00000000049454E44AE42608289504E470D0A1A0A0000000D49484452000000500000005008060000008E11F2AD000000017352474200AECE1CE90000000467414D410000B18F0BFC6105000000206348524D00007A26000080840000FA00000080E8000075300000EA6000003A98000017709CBA513C0000352149444154785EED7C05745487D6EEB4B4A5E5D6FFF6D6EEBDB55BA750A058712B0E81522814897B26EEEEEE9E40840081182146848484408CB8122248704B0281E8CCF7F63E4928B7B70695F7D6BF1E6BED3543C6CE7C67CBB7BFBDCF3C0640F4FFFFFD0E0418C0FFAD360ACB33CF3C237AE18517A66CFC76A3FD96CD9BED5F7BEDB5692FBFF4D27FA1F62838FCAF05EFC1C87AE9A597A64546469EB978A103E7CE9E4164C4AE8E37DE7863F68F11FCCB01FC39C77FECB1C7C6BFFFFEFB161BBED9E0B668E122B7975F7E79073DF7855F0B9447F902BFF49AC7863F708C89B151CED0E0203ACE9FC399F6765CBF7E0D2626C627E9B1971E7F7CCCFDC37A94CFFF5D1EF85380507868F9FAFADE6A69398D4B172FE04247074E969562FBB66D458F3FF6D8C45F02F151BEC02FBD66EC934FF0C73D171F77A0FDFAF5EB68A5636A6B6B136EE30FEC1F24F0BE1DFBF433FFEF00F8DC73CF6D4E39746888BE146E7777D3C1B6E0EC99765CB9724938FB4A8A8A5574B46F8D1CF18883FC00E91F0DE0938F89C6BCFAC6DB9B0302436E5FBA701EA79B9B5157578BD6E626EC3D90085DE7985BD3E77C6D4E4720A0F8289FFF482F1AFDA01F79D38B2ACACA553D77EEE0E2850B387FFEFCF0196F6D415B4B0BEAE9C0D913DF79E71D6F7ADDD89FF2C447F902BFF49A451BD4BCBC12EAE0BA331D490971A8A928437D75057273B2E0BD3B13A1395720EF9C83175FF9C7F7FF57001C33668CE889279E103DFEF8E322CA7B53E3E3E2EE5DBF764D38D31CC26D6DAD04602BDADBDB5059518196D3A7B169E3C6163AD80FFE0A00BF773C986B74E01C9CE29BE0B22B0BEE4131F00A8D8573441674028A31432B03139593F0CA9BEFEBF1497D9413F8BB3CF0E9B163454F3DF594681CD18467FF366E4A7656E6BDAB57AEA095BD4EB0564ADA6D046633CA4F9609808A35357BE960B9A8FCD7BF5FFB020AAA6AA25153D214D37D75919C92B24855DF54A4696C2B52D4108B8CBCE345A64199227D9768D146AB98749D3DAD50DD5907FD9826B82736C1E3401D94DC8E63AA5A0A3E5549C774AD430CA00E03284FEF2FAFA242A6FAAB763F0A7FEDA07F314913784F0A1E28A4B33551111183D7AE5EB90F1C83D74AE15B5D5589CAF272B450EED135B28682A1EFED0F3F9BE241AF79F341147FED587E0B80C6BE8922D3E06C91BEEB6ED126CB3D19DB763661956F05167995637350258C834AF1ADF911CC1167E00BB50CCCD24D2500DF63009FFECB012402F0D4E322D1FF7CF0C91776AAE62137F54CED50535986AAAA2A21E7D5D7D652E89653EE2B13BC323727133A8EE1D85BD2859D992DD8AA6CDC32EE6FCF2E1F05F1F703A845C045898C7D93457A8E3B3F596F14786D995F2D967A96E36BEF0AACF32BA79C57805546D998AE9186495A59986B94C51EA82BB355FD83EDF20A2AB28A8A8BC803C7FE9A17FE211E386DC1AA90955B34AA830F9D42FCC91E18FB24C1CDCD8D1275396AAAAB056BACAFC3D9F656549F2C86B18D07FC539B1095D30697D85A287B55E083F1B3A208C0E7C99E7854005538844DEC458AEA9A2239651591AE5D8048DB2E70DD169BDD5811D28265E47D4B7D2A20E35B8E65869998A19E8A2F545330C3BC188BAD8E62FCE459FBE5D4759B8C2CEDA0A0A6D5B979DBF6C41D0A0A5B08C4377E0EC83F04C06FF4FC8AB7B9A44ACCE2CEC133A11651791D30F68A83858D1312E30FE028795C5EF661C4C4C4C0C0C61B5EF11508493B0D25975C4C5249C6648D0C7CF0F9577104DE8764E31E05C0EDF2F2DFEE50568F92D734D0DEA1ACF6B9ACA2D238CE634ADAC64BBF51D097AE70CCC68A807A2CF3ADC61AEF32CCD44AC378CA7DD3F473304F6BF7C094F96BAEC87C270BAF985CD49EBB87A29A36F8EF8A85A68199545649E92401F8F14F81F88700B84ACD397FA3556CAFE69E33500DAF81D9EE1A84659E854F6235C4763BA165E5074D4B5F98F9272338BD05963B4F62B1EE217C247F101F2BA5E12BBD1C0270563C81F729D9DF1E12C0B1DBE4642D0DCCAD7AF61F4C875FC82E681B995F955552CDDCB26DABF57639D92C23E760E8FBA460A5C12EACF22CC25ADF2A4CD7CEC474B5FD58A41989F9ABB741DB310AAE07CFC32BFB2E42F3EF20FB9414A7AE03013BF7405659B598F2EE6BECD56C0F02F9C700A8EE94BFD13AB65727F60CB4A21AA016D100ED881AB82750981E398FC8BC0B08CF390FDFC45350713D8AAF340E6182720A25EF14F28234CC36CCC587136633809F30803F559947FE368E6E573FFBECB31A93274DD69C3C798AC797D3A6D769185820ABFE3A6A6F00CD37A5A86EBB82D4DC62F846252128A9142119A7601D9884E5863BB1CC36156B2CE3315F29045F7C1F80D97A5958F69D262CC20BE1967E0BAE99BDB039D40DBB83D7611F180F5D43C342755DFDF7E4959505F0FE1C00D55C08C0FDBD7A04A076543D5477D54336AC96AA5D35347756C233AE0E8ED127A1E25280D594B8E7EB1CC634CD544C620055D330CFE42879E0AF02F83C714CC56953A79D5054543C6B6F6B77CEC4C4E4DA77DF7D2759BA6A1D1C22D290D60A1C6A92209B6E8BAF00A9D59D700E4B82A6A1E5150AF1BD8BC5FE175784B563855D26BE54DA8B4F540E639E410E264C9B5FB075C78E0C357DCB1E93804C789017EECE3B07650DCD01394505A5EF6565DF219BF2BDACDCB46D72F2F3E495553E18F5C23FC40357ABBBE47F67B3BF5735A61D32FE9558E64DD58E1236DB7C8F93D0D85945B4A1040ACE85D8609E8B45BA87315D331D93545331412D1D0B2D8EE1C3CF672790777DF6331EF8D1C71F7F9447EA89D053777777A1BBABF3FE6D63431D0CF4F5252B37CA635F5917929B8198FC76884DAC07E49515831555353E6382354BCE3E7755680B56799411EF4BC367E4FDF3F5D2F0DABF3EB2F87CE284E7E414E5E6CB2ACAE719B846A3F25C3FE2D2F224EA7A46D7F44D2DAE1859D9DE32B2B2EBD232B4ECA3903E42F9F57906F10F01708DBA73FE3796FB7A5705356109573AA20ACB7DA8D2D1ED62FABF72482574BC4F60874301D69AE60C7BA006554095144CD6C9C242EBE304E0AC9F03F05FD3A64DAB696CACE7D61A3D3D3D02393F7D9ABA1CEA68F8FE95CB97C09D4F68700836A91823BBF1162C6C1DFB94D5D5B439F49F7DE955D1B8679F134DFFCE68DFEAB016AC742BA6137888BC3F030BB413065F7EF54D75AEFEFC5CE2802F118D49F7DD9D81FACBC0F1C69B385A770B476A3A5174BA07956D37A0636A739B3C7A0A87F31F02E04ACA81ABCDF7F42E0B6CC472F23E36068F6D09DD970B2CC70EBB3CAC23F0BED6CFC4575AE998A2C6142215D38DF3B0C8AAF0673DF0D5575E892C292EC63D026E607000434383821425B488DC1E9250C13D7639F5D79748E7B3B1B686A1A53D14555592FEF1CF7F09A04C59B44E3479DE4AD1F4F51A7EAB829BB1C2B58800A41CAC918505EABBEF3DFBEC739BE969F7450D3945F9992AFAD6FDEEA937E093D307F7AC7E38A4DE856FCE1DD45FB80727EF606C9595D7A250BEDFF6FDAE566E85AA53FE2AD33DBDCB031A85F0150024BE25843281B8D5B78C48EB612CA4D09D2D4EC75422AF13A9884C254FFCCA3C1F0B6C8AF1D1A4F9077F228467EAEAE8F4DEEDB923785B47C77974909AF2608B28B4896DEDA8AAAC440591F5BA9A1AAC5CB51A4B57AC605EC962C5631F7C3649F4FE879F88262DDE64B926EC2C963A9FA00848C67483422C528FE81EFBE498150F162E3925850F55744D7BACE32FC12AFE2AF4FD0E43CB210A1AE6DE30B074E8A4A2D24CE1BB8EECC99FF4C09F238D725489D488AC8ACD1C85524EF942A461EA245A2BF62E96B149922C0B3E4D64F52401381CC27CBBD4A7129BBC4A886B91B711705FAAA70D872EDD9F617A14B36D4E62A5650EDEFB7812F3C0FFC88124C15B515F8D6B57AF0A1EC7200A61CB5E47C03D2852D41270C5C54544D6DBA1A9AE86A9D3675E9EB3600157F5275F7CE145D1F37F1B277AEB9D0F57AEB04EB9B7DAA716738C8F522E4EC62733561D66277DD0037728CAB9683B842338BF17B601719053D851ADADA7ADAE2916CB50DF4DA1ABFA3A7DFFC77E36073E2C8053E6AE0898B341BD7C43701D317E0271C4FB463DF15B8F624C533F24148D892A8730512D0DD34D8F610185EE1225EFBBEF7E303E91E2673B7D09165A9FA16A2B38C47BEFBDE7D5D8D8401AE2F91F001B51760400478C559EAAEA2A949614A39DFEE6E7EB8B254B9763A5CCFA23AB64D64D7AE6A927456C4F52AFFEDC0B2FCE99FD9DFE89D99B2DCFBCF2F77FD8D0C77C49260C46E455355EA0DC66AE6660D96F77A01547A8A2C725A7638B9CF2E92D3B76C8CB292B8D55545317840C7915B69F29220F03A0A6990B7FF6D8B1639F7E6DCACC85A92BB40307563380FEC4FA390F92076E702FC264D5648C5726FEA77E18B34CF2B054770F667EBDF9D2334F3DA14FAF5FC85F64F6BCF9F3E94027D3E7536B2D128D1F3FDE8B159C7367CFDE57750475E73E882D940349E5A182525E7E52D019F9F1C88808CC5FB000EEBE8150D2D0EED8B25DD665ABBCC2FC6DF2F2AF6D91957BEAC5E79FFD9FA79F7A6AEA0B2FBEF8CEB235EBDE9055569FB25D5E569D68CB71339710B8279F8363C63DEC3E711BADD7069053D2083BCF60CAAB9A65D4956C18F5BEDF0D209D1191B28EB1E02D5A569E63348C6C4F2E5BB906325A9E58639588557E350290DFB89F20CFA3A42DCEA1B089C3BC2DD658A41488CF67C914D34BE7BFFDFEC773BE53D40BDB2AA7D04A5FB28D0ED2870E6EC1EBAFFFDDA5963CEBF2A54B0250A3D2D8F06D0BE53EFA1B594D4D35159132416B3C4F8AB79B8B33667FFD2DB6298AE11D108A88BDF1B077F7ED3130B3A85113EB64CA2A29C7EF50524E242A92ADA1AD73D2C0D4F2868B7F04761D2A857752136CE3CEC229BD0B4E87EF49438E0DA09CAA7145F36518985A835E174EAF7B9C0A8888ED2173A0D2E36A0666CF89CD9D84170B7950415E00D0322CFB092D73D74A757D33AC75C9C662A368ACD024209D8E6023F59F73B492B050D60D53D69BE3B31DBBA923384900AECE9B35FF6B8FEFE454DBB48DCC10101107479F70C8AB8BB178E9D25BEF7FF069E7BEBD7B691C70068D0D0D8220CBD2D819F2C061CF6B21F06A049587D51ECE83E7CFB5434D430C236ADDA28F5C80BAA90F14B50C10B52F1169398548C92D42725E1962D30A109B5982B8BC462496DDC2EE236D30750E18D0D4373EADAE6F7C51C5D40D5A6E09308D6E844D6411744DADFA0DCDACBC35740D5F965552A48E843B13E58702F0EFC47BFC6555D4CB94C446214A9A3A6B049582801CFDA76E6C7F5C49CF0A320EA9581EDA86C54EB958A2E58B75621FCCDA40C06DF2C7A7AA873191E8C3728BA3983677F9D5F59BB640CFD65F50661A2E495054DD464A882E7D715F580665E3FB6DB268A8AD46D18913A8202D91E5B106527618B80A216C4936A30A5C555149E09D13448BCD2A26D43A9EC5CE9C33D85D700D7EFB4F62FD66C57E4A118D86560E3D71659D486C20B27D5282A0C241EA5E8003A947B1435E36C5DACEF69F87520F7D1218E8A761E7607F5043D7E0A2AA96F8949A9678AB95A39B8800143D1480ACF612B99C24ABA452A06B6281D0E858D838BB4345AC2F9153D5682797DE4521A1446F6A43F76FA91A3B42C63296940FE28414C24BC95698C463A2423CC613709F531199AC9E8195669998BFEC1B1878C4C135F90235F177B0DDC01FDB55CDE0B5B718D147AF6077E17522C696F0F17015BCEEC4F1E304E471302F2C2B2D11C29641AD22A1F674F3295C20EF53D5D08665480EA28E5E4438698DA1E9CDF0A59EDC3AB21E5366AFAE5AB97AF52E3DE70884970E2198C0F3C9EB436E1B70A4A018DB1514776ED921274A3A94224A3F9C29AAA9AD1D7B202E6EBCA2AADA3B6203239195C3C303F8A2A286D6560515B54BD66EFEC8AABA88B64EA0F56A2F4AEBDAB127311D0E5E01D0323483AE8523CD1B52E11E5B82F5A63BB122E894C003977A5562BDEB0922CE5C44A8F7A542F2A5380B2B8D0E61B5AC09CCA31BE09C7A13CE69B7B05ED90CDE87AF2238AD0DE1874F23E2C85984669EC19AEFD5E1EFED81D34D0D68A28EA49AF445F6BA5ACA7DCDA79A7081B861436D157474F44855D98D98E3D7117AB805FE344832F2A76AAF4D9C4F3B1B93E7AC2B1F3F61C286EF64156E98FAC4C1C427117A2E91B0F58986B5A33BE45454776E575412195B588AE212134475F5F5A28304A6223991D8C0F0E101A4721DB84351118EBEE1C86DA16AD40E649C1A447E9B14E59748F920F5A38E987956CD352455766357760BCC3D22B142D91AAB439A4700ACC07AE763F852F520292FACBE1CC274DD1CACD0DD8F398B5742D1D80B56D195703B7C07321ACE90DF4D82C4AE6A38EFAB41484A03698BE71194D14A9E680655557524C5C5A2E264099AEA6AC878C2578CB0D020A21AEAD073DB8FE86357C8EB4EC129AA149BAC3230412911EFCB25638E412EA6CC59534DE96689B79F9F2A277FFA37E6A7A433594A4BFBE3E344B57575A2A4E4438F0EA086AEDE5A751DDD5A6D634B7844A723EEE42DA451A39E543F88A4DA7E24D50D808E15B1C72FC2CA331CCA5ABA4314EE850BB7889BD73080446758506000A7AA260D03481E38DBF0289669EC1C206F4891F9667D89BC9A58A2E71C85D52AB650274D5123B2114AE1B5308EAA82E7811A92FD5B05606C77E661A3920956C86CC6E61D4AD8B059162BBED90E35AB60F81F6AA4B0BD048FD82A68B81DC16CCD83F890F4C6CFC8EB3F554AC11CC33C4C9E2B5343A02DFB35BDF1511EFF8F568EAB2B37CAEA626D91969E3E170F139A11B48B4DACE077E09834A1EA1E126B8790DC0844653740CBC8020A2A2A65AA5A3A9B94B4749F9CBE72FB5E99E02681032E213546C68900541BFE329F13880B4C0BB048DEB36BECD827E55E7BFDF58F64E5E5B750FFD9B052DE98006C872E553ED6151577D64385045AABDD55083CD84879F102158673F04F39055FFA70062D38FD34761DE94050CA6958861E878C711A262826E1332522EC4CDC49B2FF8C009C679C8F2973D7FD75003288A3D32F3992C63574F45EA41E315A414D1DBB729A41C232D2CB2F80946068E8E8242BAA69BCFECE7BEF8AFEF98FD7455FCC5BE92313D8406D5C1516B99709004E1B01701289084B2C8E63F626CB2B4F3C2EDA481EC11B0ADC167DB07C877E1F7BA0F60880620251F0461A47EAEEAA81CBBE2A0AEB26ECCC6EA7633883B0AC76014CD7987268BA1339D74BA58E27957A6D122BE87622E98D7CC2F8C42D34A33432EFAF03F071FA42CF92E77D40B385C55481D5B72B2A3B6D95952DD531B793C65774E3F8B92184EDDE4FEC5CADD2C4DCE2EF2FBFF8AC88EDF967C6883EFA6286F9BA806AAAC2D558E85A82B534019BAE7E9042E910A66AA661B9D509CC58A3D946EDC66A02EFB5511AB46CBBD115B51100C5910DD0896A14BC91015521955B21AC06C69155F08DAF4320710FCF03D5B08F2885AA4B3E561B6763897E16E6E96490D2922600C88AF704CAB9E3C913175B1EC79773D7FF551EA8E647009E9457D3B8A6A66330A46F610B2B176FB887EDA3906D443695FDFA8E1ED8383A81688ED173E39E128DDA332420BDF7D1670AEB7C4F5208D7608163316428074ED760002917E96562854D09A62E93AB1D69E15E190570E976A30E06506F7713C4A46CCB87D5E13B52B5D793482BE35789D5BE2CD692BA43735DA7BD55B0DF55062DCF139075384605238F2A3B6B8D19B46940A205F5DB2C9731801348B858625DF4D78530795E99999D330EE6D1FE4875078E9DEAC4F1F67EE451154E6D92228FAA70DBE53B30B7B6C3367945F527C995468D6580D7DF786BCD773EC7F1B5EF29CCB32F820C49F9D3D492487D4EC3D71627B0C622071F7F313B8B9EFAD56823CF202EDD6ED8A1B1F70C947635602D0136AA6A8FDE2E1D51B917D07C573F9A8657C165D0F02E86A24B213659E6622579218BB533486FFC72D403A9684DD1C9C412DBA2BF2E84750CF42D4CEC5C51781628BC4024F30C409C1469547129052187660E976E0FD1042C1CD49C6790B73EC1C08D2A92631E13BD307EEAEC90B5A6D1032BBCEBB19A7AE1A9F4A5E69BE4639982FBDDF73E1CBF9F30DF422F994AF6DCA807AED861745536AA0D2BB8F81058A3A2ACA0310AF218FFAD1C4B08403D1A5A19D25E8B2ABDB71C29DD1B2C72B15C98B73C10C25440B8904C373C82253604E05F554448B2994B3B27D208AAB0876AEF22A1E2160DCC6F22A1BC13B125D79058492A0511EACA8616D0F386284F1A8F2A28F7FB3AD6E19E7F76D32C19C5F26D9ECCFBF648277EB5F2F8B8A7C7EAD0731691B18CC42B1DC266A3829AC6272B650DFAD785360B22ACA0290AAAF6B0AE387A7F2903488378EDF02A2A1CC7B0C3B1009BAD73B1D624074B0C32315B3B83C4D2344CA662C593BF29F4FF19A4FE2CA610FE72DE377F4D0E4C4E4D7B8BF85CBBA68129B44C6C20269AA26D6A45662D50166D73072415B5A16B80BCF2C83162F06A4314CA3B09449EEBFEC73FF2CA77FEF9CE7B8EAFBDF696333DC0EB1BD3C97880CE5B085CAC9E5154D7DA2CA7A4786A35D198B5A14DC33315C17E180F8C82C8007E4DA61E5A4163825CC1F3646854B094C09BAF934E037356BC87370E84AD03E323A43D8E0038FF2F02D0C2C646A4676EBBC926F040BCFFEE437BED83E3A3ED420FEDB2F0D91D661B92ECA8A26354AE61608E82FA4BB82701F24B6A6064E588ED4AAA1DD40AF9534BB48E54DB7FF1CC6024B29FA6DBB7C93E210DEEAD751BBF7F4B5E4D7306F5D0BAB45555401293D4D6770FD611915E1B724A00707434302ACA2E1744DA1FC6042A4144D0A99F5E6698459E972584EE2C1A174CA3691F7B1FCB6753753331CB2C17D3FF6A0F24522C32B0B217F967B489CEDD86685F59B728BCF096C82E3C4D64E412F296AA9E69958E8503F65338975F90E26A0FD07EB91B712939B076F684A6BEC9A0BCAA7AFB3605A5FCED8A2A09741BB94D4179F7564595C41D4A2AB954B9EB55B4C4770D2D6CE04712564CCE6904665D858C8A1DD6500FCDFB2B3F0EDD1FE62C3426F0AE84A27F19F1BE74CCA3109D43C6AB1A1CBA02FFA3C23189B8E057A6B9984536DD24170B493E9BBEF8FB7A3A897F7E27A2ACAE2E32B0B413F9A6358BCE7543E4B3EF8848CFC64B64EE15F599AA9E498D9E853DF61476E060BD140935FDC869EE473D0DB22FDD013A6E0DA2A6F93C8E965413A099888C4D84877FA8609E246E0647C6223A311B713935482ABD86B0D41AA995770C54754DB15AC19C7AE8160268B858FC471EE431E98817B287CAF996D29C2585F8258D0746662D93E93E0FEB99FFCD30CCC65782F7D1260455FE6F6CB23171EAFCBF26070A00920706659C16F945278BB6EFD8229253517F4359D7AC495DD750185A732772B07E88001CC081EA01C4D74A71A8E62EF61D2E85AB7720FCC22205E9EB7051234ACF4A90DFDC8BAC865EA452FF1C7BB21F316543882BBE061D630BA99A96E6494B5B5BEBE5DFCA756F09ADC7F2E016CA73C4F98401D53098C39578D83397D163DBBD4B3193564426539EE311297738DCB64D209B46847A26E5BD19E627B0D4E618F5D86E928F3F9D5044CB9FA66FBEF9E662EA759F21E391244FD5781B4C18103DAC3DD833FF472FCC009AD8BB89EC439244DF6FDF2EDA41128F8EA1F14BFEE151C13495EB31730D80776C3EF695DC4032099309D5FDB44C740A468E7E5050D71A52D6D24EA03075DF2A279FAFAA6F81B0A3D7B1B3A80F210577119077073E476EE340791F6A5AAF42CFC8046A62F1F77430E3E6CCFE6AF5826532C7375AEDC737A1349C224D71341F0AC03D00E0366F22E324914DA07015083301F7394B65C4F9665A14629E4501D6E84449BF5AB8FACC6BAFBEECFFE9A79F7EAFA2A232B3ABABEB5DFAACB7C9FE41F677B217470065301F7F18307F1380B20A0AA26D0A8A225B077B51D5A9B3227D7BBFF78D1D7C8CCD6D1D1BD48D6DE1189A003BBF68A869EB415D47AF4055ACB786E60C63787AA5A6ADF326158A76EBA083D8553C80B0E304E2B13E04E4F7E1608D04AD14F386D44B5321D936F245261FCDCFF75DB67C79EF92F53BB0C13103AB68A6B2D497662BDEA3DEC85E58896D44A0BFA4FE9A4163F018C8492493CD25F096EBC562D50E337CFCF1C78DFFFEF7BF35C462F1B2CB972F4FA5CF98D3D8D4B4816ED90BE791F1DF3E21FB27D9FF903D3BE2992C73FDAA573E1480D67676A292EA5322038700916BE80151796DF398C803299BCDEC5D539435B5EA093C7535B1F65323EB0E8F8D84C6580B5B3B6B45B121ED0DD6C08B16309DF796C22EB2001EBB8F2082E614EABA7ABCC4A3C2DE303030A04A22E66505155598DB3862F99A0DD820F62441F6E8B040EB43FD3579E20A6EE7BCA8352300C7537F3D5E85440483022C33A31D40591B7CB552198B958330F1CBD9850E0E0E9BE8BD975FB878D1303024F484969E6197A5BD53E3A1B4B49D128944891E5B3F02E604BA7D87EC15325EB17B8A3DF297C2FA1101F4173907EF131596D588DA3BAE8A2AEA9AC7641D3DF6BC9EB1A9A0DE8C84017F389FCD571A4F9DFA92A4FE36454D3DD0F62799F6A09CAAB853594BEFBC8AB67E938AB641B68995F557F4DCB7C976B69F39734955AC2309482CC1060D072C378FC7E2AD0658AF1B00190EE30092C908C06D5EC5C2A8F43335E27F445356ABFB63F60A797CBADA02B3493C5D6B750433672F2C3A78F0A05D724A6AB189A5D580AE9189347CDF21A95B689C44C7C4AADFC0CCB23366DFBE9CE6D3A76DE8B3D933E7907D4CF6DAC8F1FF627EFCDD0036B75F10D534348B0A4B4E8A18C011F03839735EE11C339E6C564949A931CD19828BCB6BECCBAA1AF46A1A5BBFCFC93FBEF05851D917B7EFF4BC4ECF79936C1259D2D973E72E523A90782754E23BB11336843763B1E749CC5371C7F26D04A4C501ACF16FA075912ACCD23E8C653A7BB1E41B4D8CFF5A131F6EDB8D8962A22C245DAD318AC79A75EB3A0C4CCDEE5264C02768A7F470E939345D1AC095EE2154B75E47C8FE1CA9A1B5EB204D04EF397B7856E71E3D6A435E398F8EE3DF642F93F177F9D950FE59001F7CE097EEFF685393F3067FE04B64EF91CD2053AAAEA94930B375BCA96F6AD9E91F145C987D2437F4F2952B627A6C1DD942B2E923CF5D49B72957AF5DBBAE26D695F8245563AB9E2B36FA91AA4379703985F002DB4CCCDB6682D54A3650704DC7F2ED5698B458161F6DF0C178F51C7CAE9E25509805A6F958258EC2CC59B3604083B0F823B5D855781B2E3477F1C8E8C4BEE23B2869EDC545A25CE7AFF72129B71AB65E11836223F33BFA66560D11D1D172742C6F90F1BAF1CF86F11F0620BDD128787CD6F8ECCD2533CBC9CB3BAF6368247572F742684C02F4CCACA5942B870CCDCCBB3C7C7CAAE21393F651F898D07395C90CBABABB8BC90B7AE9C4C03BFE24E44D7CF0ADF731527528F751FFBB3CA04E0073AEC11E2CDCA88DCFD6DAE01392C8266AD2922415121E177017B2983C7095460036CBAAC02FB91E9E873B093C5AB624009D526EC13185865834C80ACEEBC2E1DA1E345FEAC7E5AE21788744833FDBC73F80439A238873E19F0B20BB3819E78AE7C8FE4536B3BBBBDB3932664F171F8C7F442C2ACFF6E0EA1D296EDCEEC7F1CA2684521EB274741FD0D2371CD0D233E8757273BB10141676D9D8DC52A2A1A30B33072F4928C9F46AB6E1D8E8467DAE508599FF5125264D70A95F0336BB1592389B21ECF84D50A54A4CAD1BABCF5388547F6D5E88158AAE94439D61B5F7345CD247004CED1C0630F5161C0EDD841D99EDC19B3409EC44F8BE54A8686A616F7C72C54844705AF9F33D7004400E5DA6019F9F6A6EF67676F7B8C740C4A41622AD7110C9F50338DC34885252B1DB6F4870AD474AE1D387D2C60E1C482F1872F1F21DB2757291EE4D4CA53C758638620FA24BEE41C7652F36381C24006BEFF7C1C2CE218D09B6B8B2C69820C8F502071C19584D23316199D5712CDD6E8D0D5A5EB0896D812B034826782081E748203280F6C93709D09BF0884C070DCF919492467346E8907D39E281A31C91BF1F174676148E36812FFE21213CF246CFF40F0CFC33362E6E1F25ED417B570F495AD959A430780D64D47D1C244BAC1D10C0CC69A67D938E41B4DF1CC2D5DB1274744A50D2D683B4FA7EEC3DD98B98D27B084CA359889E8D74834514856DC37FEC1DF2A06AB31B8F0912EF03C820F2206906F5C52B48BE5FFCAD366414CC60BBB711EE94F7EE87F003003A12A0FE7B7389C86B838A1C75F48820634ECA29E8F39174F4F608985CECD84938D29E1E01F33E888FB46039B29DC467631C85ED5A574F4F216CBD230FE260F55DA41078871840028D47A00C201BF7CFDCBD24D7F523AB69F836B6BC177B4AEEC0EBC00918DA7A30319712C1967CA31F8095B4F93A1CC2BC77486BC3EC81EE8574A10C4DDF468934E74092EFBFA225CE9556055828232F59B27CA54441535F62EC9D28714E3A479EF8830732A0519934675155437844642F7D8722326F322D32E68EABC896922D1A01948B1DB30A069481E4F0BE7F51D0EF0190CF02BF99F8FA8D1B17F6C4EEBF40B3E43E9AA3F4052515490E92209BDC30EC810C62D20880F104605C551F0E54F6613F59501A2D8A5BBB42454B1B7EC1A1FD65E515DD959595E7B61879F6AD0A1A6EE9467BE145AE0420E5C0AF7E14C2EC8573A80F5E657914DF6E53EFF3F1F1B9EE1F1C729DF65B06D5F44C25A621F942187308FB1FE9A456F23A1C3D7CA4DA86C6034525A5B5947EB2CB2B2B0F149796EE3A5E54B4B3A4B42C34FF5861C891BCBC80F4C387DDF71D88B3ADAAA961B6F0FE088802CD217BB48B8C473C90DF80F3C36432AE5EA5172F5EBA18141A769374BE210B67AFBEF0C3B543FF05208910028055BDF0DE9BC3C32950B51E6A6A3E7D9BDEA392CCAFBEAE4E9566C567D6063F002079E04297526C260FFC8A42F853CE81C2C6C3B00AB380549855E6D958B46C7D2B5D1975F4F6EDDB2DC42DCFF90404DDA491AC54DF3546E24CBBCF4C6798CA745CBF0B6B575FA992BA86544D5B978A98BE445D5B574AA04BC88835E84BD58997AA12B5226F953AB8BA67D1B131F1E7AEE5793261BBE1513C9081E3F06537660F640AC38DFA0A325FB286FA86C65B6E5E5EF7C823876C7DA30663497C48A48D065670E249C1E130F68F49A170D5E11CD43F3838C8ABF801641BF9849494947CBA68A352C9FA60EA87599D61419566250B9C4BF01D01384B837220E5BD612161B8022F24057A8D693A3EFF625A365D43227F6598731E964AA557C893CE2A6B8A25BAAE7B052A1398DB8D9AF37DE8B8D643A270358E95D5A380ACB0FC140A4E36D1FD46620DA7C99A51D17896AE33DE0DB181493709122C7E30F1673142F0C28701F07E9F4B2F649EC4C49949279367EE27B91D5A4B664D5648D6191513738756626959A8651840028FC3393EA71C243A203D338BBD2E9E4C9E6CDAC87BBD4A97C83E3F63B14CF286A0610079B0245C7B42A352F6C059C2A8740440CA7F3348915E446DDD2A8378FCE39FEFED2721E1EBA3478F329F638FD94B76352F3FBF85F39E696801ECA912FBE77462EF896E5A48BA8DC8C26E441474218CF861506E170273D83A052B68BA87E3E58D54AD75864E1415BBD37BCD277B9B8C9DE73703C8E08D92E6174680FB906EB9EC2F18016E2B9D6DAD5BB76EB951E864D5D4D57592A03064E91E2C49AAED4522791FEFD514B5DE81A59D03A8C1BF4BCF67AF63D0F904F0C9E04AC76776CC84E9B3433706F2B23A9169DEB5A18B64E639140B1E385B234998350B1C908AC95CBDC3584C8BEBABF562F0CAAB7F0F7BFAE9A7E7B8BABAF27BF1499E49964DD6EEE91F7C5DD5C05A6A7FF08A4065EC880BDA24DD8475D28D614BB8012B320BB6F8EB8285E675E2D4B91B101B9A492377C764D0FB702EFC60E458C7FC560F64005937E38362A239BEB3ABEB6B02493727372FFC4042E2D1D05D912DCE1E5E5DA6563603DA0646943F7440D2BD3422B3563A5C8949C13E3D8063A5D5A0BD1B694363631ABDCFF69193C04D3C8B9D4213CFD3A90F3FFBC27E935F09BEA6EB7D5710804B68D38101DCE4710C7334398499039294451DC822BAE67711B5712BD482F0C2F3CFBBD1CB674E9932858F9773F4AB646A6467A9FBA953D6D49158449E841D01687BF08640A86D18BCC4EBB04ABC01CB8461E02CE2874164BE58DFD1275C2362E9E0D6DE7D7788C507161E982B3EF15B01E49C374A9A271655D406DB38B95C2521813B0A29ED204BAD1D9D1110B613070EA621ABA00405556DC86EE8A44A4CDB5C5481D9AA2E0CD2E3A930B6B4EABB73E78E2BBDE79A07CFE673CF8E13B13DF3F413A277DEFF406B93C711EA3EEA04897F9153F1088085B4363C0C201790E914BE4B4C68BDC38C642D45B781BF8D7BC68C009CC163537A6F3E6E3EE91C2999B73A3BCFEA18990D18F8A6DDF740067118C061630FB424E0866FAFC07C5F3B0E1C3D0DAFC0705A5CD71A8A4E2EB27C540099447298299756D6DCE27CB26BCF7E549E3A87AAB6EBA8B9D04B8326090ACF0C21A76570B813A91B24F97F38EF31A93E7D4D827D89A930B1B2EDA57F4EF45ECCB9381C58027B7CDCD827446C4FD1C4F8AD375FDFB4D125134B599DA6F05DE85084F9820716622E01F809E5C0CF49919E4F63CD45B499B0D8B204CB76D8F53EFDE4E362026F1A8F4E1F0090D38DCF8D9B37AFE91A3380E923000E832758DC059845D5C220301F3AB4232DB60D916A183B4AD5F54CB9324B591223C1E1D6EEE47C4D7AAFD14AFCD01EF829BD38F4FACDCEEBE6768EF77CA29391DB3A84CC5343486B1A422A8196DA38F403916600C98679603F6A2F0D219B566A35F50C87284F46D27B6D26E3FCC70495C3ED31FE0D01DA7010BDF8DCB8AFB7DAC4605D581BE63996620103E8582484F05C71223E5624199FDAB74574C9D812F3E3F886D68927CD5858472FE59F30F9302E2E6E3467B350CA95D3BDB6AEBE53554B5B6A1E517E1F40CE851681E9525A9267CA22D01852CB871CDD3CFB2276EFB993999DD3595D5B7B8B285A3389B35CD9397CB90A731179A81CC85F90E98AF390447A363432A65DD7C25E9A46219ACE0092A552DFCB20A6340C0D772264EC810217A4102E6C2319E94A27530269C4EE18DA32843ED91232567238A708058481A46B6E9E7FE7DD779DD6AB5A756D74A7BD42970ACCB62FC606AF5CCC1327E02302702E2D6CAE352511E13B83EEB7FFF5F67E026FE3B871E338478F522C3E311F912D238F4FF0F6F71FD0B7741A12AE0926E05CA9BD8B2BBC081DF2AE8090D001A25FF73A2E5CB8DD7DFBF625D207F9F88E932591313D63A6C00EF460B17BFCB7E6C0510AC3558D137F4B41E1F10A3E63074A2E117814B282178E00288048ED1C81C7ED9CE08504601A752617BA24D87F280B4AEA9A5262FE87E8BD38C173DBC46796FBCED14A2C1414F2C8355FCE9C7D6C8B55145DB25F8D0D7E273057378DC0CB838CA6BFF4F349D38A9E7EE271A3BFFDED6F13BCBCBCB810B167F071328DE1BE96E7C11624A1DD24D20C8798522977244C65A289BEA466170852565E3EADF503B405844C327F32F6B6B564DCCAF1B1F1FBFDD7FCE4B70238AA3A73AEE2373C4144B55C53DFA8DF8B2AFB8192CBD87B8C96CF0BDA119DD72258546E0B22B2682932EB9434EC7083349EB65BB9172E393B845B3D0370F609A6665E57422D1357633E582E28CC053927F2597EA9BCBCFC056B6BEB17E997D63E7EFDEF2F5B2D58BFA345952E00DC6CBA1F33176F68FDFB2B2F79D12FB32DDFBA752B3F9F3D9843EB6D32EE5D5918D874AFB7D79F58C20D96AC7CA352254ED4D28D2A320C60F5A9F370F00CA4565247E2EA13788346114C55B8503069E6F7F8C9134B7F7FE8568E5FC021C694C39F385CAB9DB36B075526295DC5C8ED8F844453A12522BD8FFEAF2FD124A3F64842A459EA1CB4B7379100E462527F7908D7BBEF3188422B15BA2BAAE9DCF9F39EF4BE0A645C5866914DE8EBEBFBB0AEAEEEFDB4B4B4F7E807CD3E983871E2AA4F3EFDECC0071F7C18F7EEBBEF2ACACACA4EBD77EF1E4FD698CC7F36720278F2C61D8D714D6D5D898BA7F720AB2E81FBB2E19DD5755FD2621AE34E224376DD5D74DCE847467E190CAD9CA0AAAD2FF10C086F6C6D6B6310D97B396CF9C4B0770B222BDDFEF485360F3EF033F7393F7117B296AC8C24FA33D4785FAAA8ACBC5A595D7D8392EDCD86C6A69B3442BC410DFA753A9B37E840EE502BD5433AE1909D5F547F5C450F5228AC9BAE0CA1EBEE10F61ECC025DC422D535311FD815135B437928885A3BF648F600F6CA454479E6D2A55DB30B0A0AE60605052DF7F4F45CD5DADACA5D069364EE0CB88D64D0946FDEBCE94AC754E817147297B54973DA770C4BAD13A4AD61557AC40359581DD105238F75A3B8A5176D97BAB127898E47CF988A89E1BDA0B09DD1C457BFA6F7E5F0E5E81BF37B011C1510B8B2F1996611C1878C93AC17990719D3133B32DB91FBDCAADD7471F7E8A70A28D973E232F5C3C35256E9592A2AA409D6B75E4210AD7E68EA1949B5F48D86EC9CDDAF8547ED3E4932FFDED32D2DCE74A28CFBFBFB55EEDEBDAB48C5409612BC2C8D42958896E853D2B7A713B727F570D6C9C0B05D37CCACED8618385B670F8427142038E7C68F44D59BC3213C022013695BA231FCB73D749161F5B93E9C3A7F0BCE7E3B85DCA8676251D2D6DECE5EC802C213BF17C0D15CC82C9F9335E71D0EE9B7C858D6677EC4920F7F200F97BE21C1D59BA4AEBB5ABAFAD2E88C9392849A3E01C07852645895492531B5E40C5D8D7E5382968E9B3894750C2E3E41CCB9A424009027E80FD2FD7B16B60E3789BC5F767475BF60EFE27AD5C6D1B9CBC4CAA6973627863475F5A4744B17CDB82064773CF6E5D4537F7B1B1E995D7017E622D709C40755E91FF2A0D0891099E6568E3B11CF8C5B483A4A57693A39831A84012FFFA088DBB7EF304BF8C30064101F546498DE706E64A2CDA0BE300228732F159ABF5EE6B62E2EB3589A4255980585614DB05FD003472DB9B60FC7DB06D07079106749B16EBFDC45CB4AE77038EF386293321012B94FEA171625F50E0A97068445488946217A7F229232F290515883F4B20E2494752324EF363C29D7B9A55D864D54110C9C42A55A26F643FA2E9112B3B042D8C6D315993458123C90C0FBCF7EF83A6C823378D3029EBEFE839497397A381FB38370EAFADD212C24CF9F9BDAD363824ACD1F48A1B68EAA5F3B57BF7DE985C4174794692A240CE0811100632BFAB1AFA20F7B6967664F592FF695DF43CC891B883D761E394D7D38D6D28FAA0E2A3C34D76DB93A882602B8FC6C3F2D2DF521ADF61EF695F6083F98E34B12954F7617BCB2BAE1465BFCF4031112D2F9A43473198CDEB3B7873CF69E8AA6B65455D744A261E90F43BF0C58ED6914806441C12EBE03E66EE182529D7030F91E15B0FDF43D64C89847327D6127F9DD45E4D700E422C33C6E565C62523DE790B0D814697AE30FD23E53995100051009BCD88ADEE199C8090A39FA0926B1B195548D044DDA8A95E85ABA484CDD7649C3E922C4A8A2BBD8756218B0A0A3771048E69F7B1B7EB4B4E47BA41BDE3954048A7BB03F359FAE61D1455D43430FE54EDAECC6292A4C97DBCF9C3D9F9492DAE1E8E1D7AD65683E485B1252756347095F3B6768E50C4E0545A5B47B37AC4D7205E6CACE298ABDEFFEB6023BD1A83D0C0FBCFFDC5FF040FE1026C36E94D86F583BB9F7EA5A38481D42E2E87ABA66A19D4B20421DCF208EE4C06100FBE8FA8F6A18DAB84295284744744C3F55D2DBC9A9A99DA11151DD8A4475ACE81788C20B7B684989ACE001002964FD08445F02D1279B8871F53DE41E2BA6FC652921C58855642B32DE8531254B20ABA522D44E83FCB6C2A2E2B33E41A1D7758D4D07DDBD7D878831D4D0E37A64AC6D72FFCC4ACEE80CE4FEA6C29F09207BE0DB643BC92ED081E61F2BA928B3F70CEC161B5B4A8C9D02E097504261472D543517917E441E3D3F7CBD9DA6181EBEFE430D4D4D5DF45A6EA19860D3157AB8B63F3EE1828A584F1A947D11A1A300E6DF16BC308000642F143C904238A9E22EB2F28BE877B4CC24D46F7347F12D196F6331416752CC3CD3826C1F190BBFAD777A7ACE139F8CA5FBDF904D1CF90EDCCD705EFFAF8DAD3F1340CE81ECEE53C88CC9D803B83DAA6B3B73BE36EA40F2557D0BFB415D4B27A9335D22EBBA2B993920CCAC6D25C74E14DD256A524ECF75205B4D368F8CB7B7EAA80A3692003160EE138BB06377863D90C238F0E86D61EFD09FF21F03E843217C807262F6B13212404D24A79A85E521E689DCC3BF40C65C6E5449E7F5367E8CF926B7A75F8C00C75EC769E867B7B4FE4C00477B66767B4EBC0C248F0BB99AD14A265A291755A4E714B4D8B9FBDDD533319324241FEA23804ED3632164EC2D3CA4E2CE82C92BDF32B73C47BD6C3D89A152FF0CBA9698400C7E0044BF23B4659071096E075B1148BF4F18B92F814E8C81B4BAAE81C3918F81D38A5004C838CDF07D3E4606EA0532A6634C53F86FFCD8FD7CF753E9EA4F03F081691D1F00BB3F1F1C1F3CF7A60C8E3759015913D959CA51B4308C68B21D641C66CC21B96D624FE1D689BF14D3887C22D1357A26E6DDBAB6BEB00D49959A79EE9618390549F4ACDC243AE60E12B111AD87E8194BA83F97E890226E61E7D4458A3977279CCB78F0F5E48F96A2F8648FD2B151ED50F8DBAFADFCFEA9008E7EF8C8C18D9E6D3ED3DCBD70DFCA095A9BCC8D8C436722197B1A03CD808D4A5AFCA5388C38E474C9CE514B584BC266BFB185751FF5E1BD9EBE01F76894D04374E976D691235D452525B7A8FFBD45D5F61CE53F6B7A0D5751161AEE73B85F03E7B73CFE9700F82320190CEE5ED8AB46873D0C288739870F7BDC7F850EFD8D5FC7AF612EE64AE15F75E1D295F3D76EDC3AD37DBBA7B9AF7FA05A3A5C705882E234B18B8C439E253226F20CDEE849F9C5ADD3DF02DC03DFE9F7D19807CFC043DE1F0D19AE6CEC9D6CA3B30B411EFA091B1547D94339E973A55C4BC6D3311663D9A339CFB1B771CBC52D253F97C3963DEFBE48FB90C7FA9B28DEFF0186B250E07EF45F620000000049454E44AE42608289504E470D0A1A0A0000000D49484452000000500000005008060000008E11F2AD000000017352474200AECE1CE90000000467414D410000B18F0BFC6105000000206348524D00007A26000080840000FA00000080E8000075300000EA6000003A98000017709CBA513C000032F949444154785EE59C07509EF975EEBFC419CFCD9DCCDDDC927B33736792DC3BCE8DEB6ED665EDD8DE78E324CE1655BAE8BD0921092410450804480881E85DF4DE7BEF202440742190E85DF45E05E8B9CFFFFD408BD6ABB53DD126B6B33367DE0FC4527EDF29CF39E7FFBE7F0040F67BF0DF9F2D2F2F07E4E6E6AA961617C9DE7AEB4F654A4ACAFB3FFB870F02FFE88FFEE81AFFBE952FED6F14007F97EDF9F3E7AAA5A5A5B32646C63875E224AE39BBE0E2858BF8E4A38F61677B051DEDEDCFF8F7697D597FE3EF32BC3FEBECECCC727470C0B18F3E82B1B109720B4A30B7BC8ED9F92524A7A442E3CC199C3C761C3E77EE606464B88610BFF9A641FE4E02DCD8D8500F0F0F5F3E7DEA24D45455E1131086FBED4F3030318F91A9793C5B58C1CAC60E1E3F19C0EDDBBE5038750A5A9A1A6868B8BF47807FFE2621FE2E027CEBD1A347384528AEAED751DBD88A9AD6A768E8E8434BCF301E0F8EA37FF419FA68E3338B5859DF42697935C3FB34121212C90E6FFD4707F8E7DD04A8A2A48280BB0918995EC1E8B3793476F7A3E6610F1E74F5A19520C7A66631B7B48CBEF11934F1739A1A5A484E4C1000DFA8D3BCD16FF6A67FB9D77CBFBF101E784645156E3E61482C6D467D7B3F9ECD2D61607C9A5E388467B38B18E4EBEA9627A86CEE465C523A4EB2C02426C4AFBDE9DF51A674EAC41B35BCE03B7CC45EF01D17267EF1DCEC5CD92F3EF867597D4D9DFC8DDB7FF1AA615FFA7C4E4EAE4C535543B290C010E9737BFB72E3EBBFE87BFA041A6A67606E61054B6B3BDC0A8E455A45331E0D4E628AF0EEB53F454AF103C46695E28AA30B4EB09018EAEBA3FB51F7C4ECECACECB3B6B0B0202B2C2894858586CACACA4A658D8D8DB2BCBC3CD9DD880859425CEC57BD6F7BC996161665E5A565B2D2E212596B5BDB4BC77BA3F0C49BF16503DCDDDDFD69667A2A941415A0C83CA8464F543A7D0A172ED921283E0749C5F711995D050FBF0868AA6B4191FF161C148485F98562C2FFDAAF03B0B9B99920CBBEEAE3E3A36CA0AFDB666E6A96DBDEDAF67E657985ACBCAC5CD6DADA2AEBEAEC902D2E2ECA7E67008AE4DFDEDA72C7C2CC78976F14B4B574109E5583F4C63E5C6728ABAB2A425D4D15B782627137B31C5ADA3AB03C6B21BCEE09FFDF0F3F0FDCE1E70E3D303C2C5456594948E5E5EF5FB6B6CE54387D7AF3E2452B18191AE1F4C9535B0E76F6B72BCA2BBED6D7D7274B4F4B9595D01B7F27008E8E8E1A5CB5B75B15E094151571D53318795D0B6898019AE7800734AFE4069C3E7D1A0E2E1E88CCAA80DA194D040704889CF7D5F5F5759980F43A6317232B29299125C4C7FD95838383AB9AB2F2AA86BA06E2129231314369343681C0C0207ABD7893CEF427272559272725FEF7AAAAAADF6E80F3F30B3FF3F3F179A2A2700A4AD47C96F63790D8B880B231A06A14A81B7B819C47DB702F5C8349D02328AB6AC2D1ED1643B8126AEA9A08F4F35DCECBCD938D8C8CC8F826C88686863ED7C6C7C7BF12111161ACA3A3DDA3A4A00057F75BA87ED08EC1C9058C4D2F6276691DABD495CD2DED7074B88693C78F434F4FA7A2AAAAFAFDDF4A0FDCDADAFA5A7C5C6C89868A12C1315C8D2FC033FB2962DB80F4472F50F8741779DD3BF0295BC1B9B8191845CFC1D0BF132AAA5AB8EAE68528E6C033CC7FFE04A874425166A0A32FB3BB6227BB79F3A664376EDC90B95E7795AEC23C3C3CFE59475B7BDFD6C60679A555A87AF8048D8F06D1D63B82DEA1090C8C4DB3AACF60726E05F38BABC8CCCA95AA7A5C5C82D56F15C0DDBDDDB75805FD0D74B5F704B8339AFAB00EAEC1CD9235F8D66E21FAC12632DAB61056BB0ABBB45998C74CE36CEC0C4C63E7601CD0450F14006F136035CE9CD142809FDFB2AA82AA4C8DA6A1A22E33313091991999CAAEBB5C97F9FBFBCB9C9D9D25737575D5D3D1D24648742226E6D7253954DFF104B5ADBD68EE1E20C8610CF17342570EB3D379F8A81F5A1ADA48888BD1FDED00087CA5A3ADEDEC050BF37529CF29ABC2C43505B6E98B70CC5D8367C932A21A561159BF0AD7BC055C489CC1F9F8695826CCC0821E6816370FE3C02E2831849DE88131B9042879A01CA0BAF21999969AA6CC50C7407A7DCDC189C5A25276E9D2A5432FD4D2D3D185BB6F38D22BDBA9254731B3B02C79DFFDAE7E4C4CCF4BD6D049B14EA8E93945387D4A0171B131C6FFEE00999B7E76CDD17E5880137244EFB2372C63866095B60A87CC0504952F2196F0FC4A976097390FEBE4395C4A9AC185240224C47371D3B0885F90002AAB684A21FC3A8046BA8692B67476BC26E9BED3C74EC9CA4A4A65BE3EBEAAFA7A7AB8606D8F2BCE37E11B9581FC7B9DE81B9BC12CFBEA367636E9E5CD482EAC85BBA7AFD4057150315E5D5DFBEF9703171716BFE6E3E555A9AA282F10DA671D71FE6E0FAC53566193B6803B250B4878B08CBBB52B70CB5F845DC63C3D721E97D30830659A0067087006E76802A049901CA093FB6DC4E6D7CA3DD0F7550F3C0AB0A8B04876FA9353B2ECCCACFF69637529404D5585438793FC5DA82D955570E5DA0DDCCD28457A45939412EE8426C0C0C0982A4061C7F9DAB5C89EC73D7F3D323CFA6F5F85B7B7B6DF8A8B890ED75055DE175EA7AE6B8A8B21CDB89CBE4A404BF02A5E424AE32AD29A371050B98AEB0CD9AB59F370C85A805DFA1C6C52E7087906D689B352089F135E98B008D360F6C7CC81D708304600A48CF1F7F57D25840F01BA5C75161AEE0FD595CE6869A8A88D2A9D3C094D4D2DDC89CA444C69232E3BB943F9D427D0D1D1817778B2A42B7575F561616AF2302E26F6171DED1DB299E919597FDFC0BF1DC0BDBDBDAF9414155AB1406C0A706A67B471D1AF04F60C5387AC55DC2E5A44C6C335143DDA42DCFD357895AEC2BD6899396F094E398B52385FA107DAD2032FA7CEC38AA17C214140A4252EC04C02A8410F6408E7D548000F8BC8610E1400F5347565C67A46BFB0303D7B4FF9E4096851903BDE0A44DA8361DC9B96EBCA86672FE0195BCA3C77120ED7298BA82BB5B475412D1A999498C82EA44B363539251B1C18FAB701D8D6DAFEB1E559B329014E85E161E91E8FABD9B37029D8C49DB26564B5ADA3B66F0BD95D9B08A923BC8A557832E7DD285AC27586EFB59C793866CE11F612212EE15CD4102C63C77021791EE7E98517931771369421AC7600501491CF014870EF6AAB6BA7ABB20D5466A85ABBDC4174F528CAA829ABC781FA09A0F8E973F8546EC13CF4319498120E75A5A19129944E9E88D3D5D490B95F77913DED7D22EB7EF4F8CB0538363EF6357B5BDBC6C302616EEF0397EC71B897105CC59A04AE69781BD5FDCF91D8B285A0FA7504D4ACE20E43570E7011AE04E84C2FBC9AB706EBB81168BBA443C7C60B9A7681CC7B2DF4C4795C4C598445589714C24E943152113902504359FD7F6BAA697868AAAAACA99E3E09434B07B8273623A66517198F415DB987E227CF298FF8339266298BE66114D8C1EF278A929045553020C0334A8A71679495648A274FC8F4B434659A6AAA5F0EC0A5A5A5B76E7BDE8A53513CFD42C033B9E8841B194FE153BD03BFEA7564135CFBE80E5A269E23BFE739E25AB711498D175EBF814009E00A6E95C943D8AD781D8E19CF60EC5D0A4D1B5FD8DC0A4372513DC2D38AA0713505D6698BB894BA84F3110C61359103BD109D532DB5727E3EBE2BDA67B42DD594944754954E43DBC002177D8BA437C6AF7E07510FB690D9417DC994E19435078B187A333DDA86DFCF2C98B248E5505756C1D0D04402A8A1AA22132640AAAB28BF5980CF7777BF1275F7AEC31915A51DBE4BD031388B9B296D08A8DB46307FE1ECF60D748EEFA077761FD523BBC8EC7E8EA4F66DC4D1FBA21A3711768F1E4891EC4B0FF4AEDC846BE1322C821AA0752510E7AFFB239AC9BC5E4C9E1F0F22B9A0125ACE69B0A156B44D5F86D5DD6EA8129AE431395530323081BEA6F69E9AE2096868EAC1D8251E36C9CFE098B7018FE21544DC5B452CC1DD629AB06645BF486D793979965F33CB3CBBC4A224000A5D795B7A4344081F057808F28DE9C0C2FC02457D1DAD39E1711A9A3A708FA94248FD1AC21B7791DD4170633B185ADC47EBB37D940CEC21B77707593DBB48EF141EB88548020C25C0A0BA4DF8556DE34A7C17F4AF45E29C8B3F42530AD04841DB3B34898E2723E81B9E4266492D349C537125731976596BB81CD52301B475BC0E5B3B67A8B00068A8A9419FE17E2EBC1B56A9ABCC9F0BF02D594434E10556ACC091D5DD3A8945E9009C80770850EE819FEACA2F0D606BCBC36F9E33337D2CC0A972C1E3E49F86BBF75711DDFA02999DDB681FDBC6D8CA0BF4CCEDA366641FA583CC377DEC657B7791CB7E36955F132B3CB06913110F9EE346CE184C3C9271CED91FC19CEFDDEF7C8231EE36862767D12F09DB552CAEAC2139BF0AEA2E69B0CF22881C6AC7D0068A5B4DA82A9C860A4DF7BC33BDB789397219D6A98BF0289847CC3D7634CCB33EA5F3704E9B60B84EE3720A2B7BCA1C8D9E776057D296611E72E08107BA5200543B12C2FF6A0F1C1B1F7FCBF6F2A55C827B213A88CBAE7E6CB76691D809643EE2E4821E37B9BC87A1258E9B265FA072640FE5C32F503E440FECDB47C1933D64136052C73612DBF71154C36210588AB32E41F08B4E475D4B37A638A69F5D5CC314012E2EAF617D630BCB2B1B187F368798EC12685E27C094095CBA9DCEDE540BA24088C1C3399F0A8A6D8A6E86B67BDE22C1AD20EDE106C2985FC3CBA750D632CA71FF20FCB3BA6019D10BABF8895701F2FF330F15D31D16A5370D706565F92B37DDAEDFE4886957915E77CEC61951D5C348ED01B21FEFA391C56172651FE3AB2FD032FD02D51C3D558F08DB4795802879208BC7E3E7C8EE7981B8875B708E7F80736E11B87D3719D58D9D9CC12D61696D13D3F39C7E2CAF6273E739D6B7B6B1B4BA8E69B6564F19C291E985D0BE781BDAFAE7A142705ABA26B0F4CC805DEA9414D2EEF94BEC645651C8715752E33A226BE69056DD8728169FBBC93968EF1DC2834743700848930AC695540A758A74C93296E881AFEA4A0316917FB5078604076AABAB282D0B700626671156D881DCA74001AD81702696F630BDF9025D14A335E3847730B3ABE7DC4E846FE5F01E4A0677F9F5FBCC8180774E372C3D6270333811E50DAD18E5A463956BC8398E8C440FBAB1B98D9D9D5DACF3BAB422E02D4B03CEE28A3A1831A484C7A973EE6771FD2E1C5246E04C5D79930522B1710DD54FB751F09805EADE22526A86905450CBDD4914FCA252905FD584D2FBFCDD6B1EE2825BA0D4C5D8B1180978F6C2A8372DA82B958EE8CA7F15404E5F7FA8A7AD3924F29C50EE7E2995C8794210FD149FC3CF314270B304D7BB08DC1BDF472D81D54F8AD7FC77BEAE1D13DEB78F327A9F98E565F10FBB915807873B51C8AB6890C6474BAB1BD2AC6D92E12AC274736B5702B8BAB6C5F025BCF9653C6CEF8297A70F4E7F724C5AA89BDBDF8153722FDC8B3770AB748DE056D130B88D7AA689B49655C4540D22BEA0019E2171B872C30F7E3199C82C6F426AE97D1437B47163F708E75D83702EEC311C5860044007763A0E046819266F0D0F75A59031BFB107D65457FF373363C35AA940282BE356783A0799EB281EE63498400617F631BBF102834B2FF0604A0EAA9E001B98F31A2478FB9C1A53B28C1EC0EB7B21796B70E5286E04C531B72D71C6C6A2C0301D99E4C8482CC25737256802E802F3DEECE20ABA9FF423282814A2831005C2EC920B5CE25BE0CD6AED5DB981A4A63534135CC734F32BAB7B6CED1842B3EAE1EA1F03733B77D8DF0A46446A315BB22A44665620BFBA196D4F86D0C45DB225015E88EA873D013AB0D776A45D6561BA102E9F700B5924C998DF04E00447DC56E72DC3086E4F14083BBE7B59ED0B2811B96C941575760FF30427AA6BD314BD6B740F750C5909DC841CA2F0BC3A7EADC87D6583FB2862E5CDA7D7E63074832BC6702732035B5B3B04B88227CC69621D394F58730C5DE16DCF78BE656064028949693031E41484B2C4C0DC1AD723ABE05B4D1952470DD9B48E667632FD0BC07DFEFCA4C669F8A73FA067474393DD869E950BBC22D2109E5E8E3BB1F9084D2B465E759304AEA2B11D769E613875EE36AE243D83438600C89691539FAB59ACDC91DD5039D09502A03C84155E0AE9D7566167A7ABE755154E6D08AF3B6FE38464BA5229735925E13DE23B3CBBFE02E32C12CD0427725A2D21DDE32F2FC2555CEB69E273B5F4BAEA61CA166ABEA2BE3DE4F7EE317477D83A3DE78C6F142E0109189C98E1CE610E4F87A6304A0F1CA554199D9AC3083F9F91918B0B961758204E53909BC239240F41D5F3086BDA474ACB069A86B6314C5DD9FE6C0FE90FE7E097FD1057BC63A16C7219C775CEC1E6663042524BE015930FB7B03404271721A7AA11E50F3AE01D9906250B77A8DA27E372FC38A1715821BC2F83DE47804ED92BD4958F5F11E69FED447E09A097E7AD7F648198523C799C05C20251259D281A04CA09AE8DB0A6D75EE019775CAD537BA8187C8E4A7A552DBDAB56781F61C94D545D160C018FFF56D2CF3C49AF139A2F9B5D477A97D07DCF11C0AD90AD6704C5711F06A9ED1A7830A8874BF11E9E6B2928A9C2B5ABCED22E44534B0B765EB108A99E4654CB0B24B7EDE001C18DAF404A1BB5C3FCFEAD53F04E28858E952BDE3FA1090D0B07F844E72028A514D78353E11C948240C2CBAC7C80C88C6298D87B43F15238870FDDD214C83193F098F79C38ED71C9E6E0826333E7DC15D8C6F6424DEDD3CEE6B50063A3A3FE4A574BB343EA2038E7F74BAE920A4429F3DC7D86A208D3197A5DC7C42EF5DBAE2441AA867651C35FBE9A57214D4485955ED3238557960FC9C5723EC1E5B0DB102D5B7AE70E52DA77904008BE259CA4B885A28C95507415650D1DA879D006279E22505556E240531997AFFB20B46210091D90A0D70DEE607449E4DD3DD4F36746376EE04EF13C5A9E8E73623C80C0B85C5CF38B434446056E4566C3D12F11D70293252F4C2AA881B35F34346C8260E2779FFB9405E6BC25D88B8241AFBB46704EE9B3D0BEDD0413FF36B816ACC33E8E9D0D7BEBC3D6F0B500798461EBC4271FC3C33712E5FD9B92D75553F08E2CEE619195F5F13443F0C90E72197AA584573EC0D06535ADA217565192544846AF1CD8A5C6E3D7306485D765335CB31F131E45756A0705B3E879D9B2C5B630F1178DE2ECF560E4543F4453470F42C263A0ABA1C193064C1BF66E082EE8404AF73E32BAE9650437B6FC0213AB8C84D10D94B74F523E3D8143C2005C3912AB7F34C2C5CF13B43F1D460C7395534012EC7D13E0169A8EA8AC7249941B3B0642E746312E253EA35C59A6E69B274411B272AFBB10D98F6357ABF19E793E7409D1BD68038E894FA499E55557796FFD5A80753535F8F89393F060D3DF3505760FFB5862811898938F7884E7E41246095F97508294705E564AEF2AE508AAA48F9FEFDFE1C7D477FC37314B135F9BC95015E19AC22E23A98D9D860047C11C45AF896CDC8667FE08CE3AF9C38FBACC48DF10C73FFC17189B9F875F6A0DF324439E95BA8A6FC8F002BD7F13E89CD84271F308E2736BB9AFED40D7C0244233EFC32AA4014D3D133C99F5041D04E89F50003B9F785E0B11CEFEF9D28D10683925C122A25F1A10D8486DDB2CE58A28144B70489D86E6AD467C6055821F5F28C7F74CF2A0E7DD482DB9816B294F0950E7D700585B8363C74F43C3BD8EBDE102B25A565041119AC411534AEB2672BAB6904F2F2AE8D94121ADA0671B85BDCFE995BB282454F15A5801C3354BF4B6F4B6E4038F8B273C012E9AE3F9BB1C1684376C7060BA8E2BFE79D0D631629E3B0D3D56B7DB51B9C8E85A47C100C1D1A3FB18A6F35BA0F76FA18C1E97CC8342DEE109F08B4C4151ED43D4B53D613E2B822137775EF11514E1CD783A3685048AE570CA95EB01B1D0718C84A15F0B2E252FD0D8D671CE27C14B139576819D460F3EBC52819F5C28C58F2C4BF15DE35CBC639005FD3B4DF02CDB845BFA53CE14B53950F5A467D3035F378DA923C0E302E08D5A2805CEC08A0DF6DDFBEB486AD9447AEB06A7C4F4C0CE2D36FE04494079DDDB9289562C8FB92D9F26860269F454E169F1041FCBFF3786D0A29B377157CCF91AD611CA26FE0687981697B96FE00E421C9D70E31F9AF1701645CCB7954C1BBDB32F304770C34B4C0B8F9E21B9BC153E91A970B81580A0841C14D6B523934B9ECAE62E04C667D2BB926114D001A3EBF188CD2C618B960B43C72068DF28E7C47A9A9396455873BE67CD51950DE1D9B3DBB89C300125D77BF8C9F922C9EBBE6F5E88778DB2E5000DB3604880B7CBD9D1640A805ABF1A60FD0140CD9BF5500F9965359A43D4FD0D4A05026CDB4456C726B209309B5313E18DB9340135BB4BFE710EAFC9F4D4E826026B92CFF52219AA771FACF38D60037F6F033EF983B075154258493A0074C5CD0749F78625415EC12ADFC111D73C437562959AB2671631C5AD927EBBE8EC053B8F20DC652188CBAB452C27CDC5F52DE81C18918609BA9C4E9BC52DC22C6A9239AE8C1F67C0346C80B33DEE8EB9ADB3A259D3216CC4B42599F3BE8471E8F8764BD07E74BE14EF1AE7101E8DF0BE6B928BBF2540039F26AE14B6E099DBC7369139500C13726B0E74E0A703D59732E610A0F6AD7BD0089DE1D887D38B8635099EB00C0E41330F8D3033DB69CC6D19BC0A4BE29443786C386185135638677A62301A4CF32B63D2BE150B8ED3A1CC332717ED5C1055DA8D128213F2A895F2686603986695BFD7BF84C8A276B804D1AB6CDC6078E93A3CC3B811CB2847401207001CA616D6B5A0B57790C7797B71C9DD0FAA57D371368EE118CDDD304F279C8B9B832517ED9671CF7091DB3A2B315D66DEB38C1AC131C76A285EAB849E7F0FDE3B574258D91240E179C2BE7700D088007D2A59E8F20724804E37BC981AEAA510FE5C212D42F804CF0FEBDE6E8076C40CFCCB387064C8A5B7D2DA3668E22AB7347E2E8DDE96C6D0161647AF134BA060E63591DB8405D6AC20A06A0197EF644147FF2C5418AEA667AD1090562D75226504F740C8235656E175ADA3EB88ADEC8153503AB42F5CC329FD0BB0BAEE47E15B0CDFF842DCBC9BC9F17D090AE979B5AD8F11969C0F354B379CB0628E0BEE8779D4346D0A67A3A738929FC239DA792EDBAD382815DEA7E5DD867FB02EC1F7CF1643C1B91606013DF82101CA3DEF0020E11D0234F46D62A7B30DBFC24102D482F30D6F2416DEFBD500F5BDEF412F720E11D5F4049E04486B59472A157FEACBEB26929BD7914C8F4B79B82EC10BE4F8DDAF7A4D6E553CBF52C58F4BA66073F536375827A1AB6F04CFC83C4A997594129CE85006165F608179AE7F6E178935FD700CC986C6F96BF8B9A21ECE98DB71A49541ED5606D79034C9848ECB61EF9A985F290D593F31F785866713CCA26719BA3C171339F50A404B012F710EA6A103F8D8AE127F67592C01FBB67E364E39B1250B3C0078004F803BB4778DB260ECD70CFF9A1D04140DE18C8626AE7B78493B985FE9818604681C3D8FD8FA15DCA5A5105C9200C66290C46210CFBC16CBB95A02FBCF788E8B02D88F7A952FC3BB82C653525EB4DBB4CBFE85DCDE2BC1DD2B04391D7352652D1F029E5216AD6CB340B0FD4A636A486B9C45330FE984D2A354CDEC60EB11823086EBEDE85C4904BB04A7202CAD1469A5F570E3E041F5E21DA8BA94C2286212A684677A770A2677F93A729221FC4C5A089D8B7986F3F44015F726FCD4B288D5B50CDF332BC477585DBFA59785D3D7AAA17FE8814742F7284013BF87748C1D04970C491EE87ACB9BBFC3FD5F0DD0C8A7810999C729B82F08A767A534AF4AB012581862EBE651D436C7A5F73A62B888F1E5DEF646C9126EF1D08F07770C1EBCDEE489821BB4CB0125DC8E69C027A383551518E2C46681BA520C598B1E6F7189C32D5A225BB3AA293CEAE711324E457229A803934B98FF52E0E09720799E58668726E6C2CC29106A5733A01F3C04137A9C51C4048C697278533015E1CB535AC6618330091FC6CF2F95E187164578CFA214EF18E5E23BFA5978DB20FB2540C3A05E79087F06E0F74D7319D659EC549AA505583893B400E8E6798723B007303236FBFC71963C072AC09C2D8E05AB57C2FD1584308F25724711C3508EAF18421D4FC14F729039CBB153FBC82A4F0E105C31578E054BDC9C09E30902BEBECE0264E5574C01AA054DF77A36E88BA87CCCA579FF16BC09D7965BB12B4953B0E5F423B17E16ED1C5335763F4535E772B61C045CF54F820FA726773935B163AFACE5C80EC5A71386CCCD86E193B409C98C85D113CDA367086D0C275D1AF14F978AA0E5D38D1F10DCF7CC8BF06D7ADC7718B6029E30F1B1023DD0308821CCB0968AC791F01500BF4B3963EAFF1021F79EE36EC5B004F086972FDFE0669898987F7111B10868C0052EA8C5503298392DBE6E8AAEDB82B6474F78B46B4E1AB34F72CCB4B9BDCDA5CE2A422AA6703567092EDC39380BCB5DE0110CCA07EE5DC552FB50578A93542E39DC7C254C727F31C5C9312B33CFB6F8522634B475A2BD6F08554D8FE0CAD6EB6E46193C421261E018C637F41E2C585D0DC29EC120749C575AF8B804D084E12BBC4FEB4E37FEC9A68240CAF081751974FC08E77C39DE36CC25B0EC5701D21345081B8A1CF83A80C6D93023C0F0FBBBD29A429D39D0C3DB9FD5BF15A602A0E2E78CB30EABF0F9A0FBB8C43E319579CFA76C896D533DEF399BE39D3EDCAA71D42E069B1B5BCFF184ABC548F698A2D571224027F69257B3D91A652F486B42CB3B85D2C9A8A3BAD22D8FBD67F29404D09E001DD9B8DB71DA71C1231E09B96568E9EE837F4C0647F3A130F4288443F20425C81C7443C6A147D30F9D80BE001826E01168C8303E71BA4721CC2E82C0DE312EC44F298C0F01BE639427158DEF1C78DFDB8639F8D6214086F08F2C4B5E912FC2FB240F2440E181110FF6105BC310E6A2EA968F1F4AEEB5C93DF08B005E0C79C01DEB8A74C0C7BB7801D1D9B5181C9DE4607305DBDC4BCC70D09956D2C03DEB0DD8DEBE0BB78C21EE0E96A541A43D6768E2F8D915CED42CBCE400B53C0E74258F66B8E7CE317427E9797280F65CFC38A4CDE04A225798B70A60793D0C06CE09B08A7A0267BE11363CFB27E0E9848CC901D2043C5140546F75E0EF2FCAC189707DDB308F7072F0BE00E82BBCAB4CCA7D473DF09D8310161E68147800F0307C0FE0BD0CE180876C0676115F3F26E9402FDF400E5FBB606A7A564CC47F79A07AE881D6E14D70E07E359300BD8AE6791EA4168F0746F1B89F363081A0C4427CA86E8AEFFF4211576E47C035638467F5782A80BDA54DAAD8E6334CD92E997B164800753C79A2205CAE2BDDE9811240C90B09503211CED3B84AE8B67103B89A368D6B1C2DD9F1DF8CE86DDAC16384280768183EC53C38890F1DEB5820284B08EF5D13515D732580DFE65578A0F65180473D501411E181CE0478E88104783407FEC02C0F7F2B640C756074F32E921A04401E79F30B46EDC36E98BD1620A73142485F8E68C6B5FC359E5BD98067E13CC3B4168F38E1E8EE1BE399E041CED362F1771FAAE067A734E1E21F0797F411E9508F15B7F9E2D4A835DB252BE63B337A9400A8EF552FE9CABBD495EEF9071E4880722F949B83B8A632A4E98D0E69BCF2B539DB32EDA031E810A05ED824018E41C1BD199A84F363AB1AC9EBBE23729C419E04EF2540CA1601F0BDCFF1C057AAF0673DF000E4BBEC4CDE3F970BBBC4012471B79DDE3CC393FE541301A1CCD5BD30377B9D0712E04902B48B6A866B911CE0CDFC790E266BD0C9FBCE5A9F0CA3A6E531DC8312F1F3D33AF848C30C1EE169DCEC8FF05CDEBC745EF9539B6548CA4358E84AA3E805C45153BAE5CD4AD55778A06447201E1696AB0468153F092DC2D30E66EE0B9B82BA4F2FFEF14A358477A87AB6E37D9B7AFC2D3DEFDBFA94278427EC2840AD03806F7F26845F023C10D24773E03B04F703E34CA85135DCCA9F414A17F7DB5D3C8BED17C57B8D3F817F701827E74F616EFE45004F9E8663CC43DC2C5B472EFBDD1BB9F36C9FAAD142A1FBA0A31F45759DB815968A8FD58CA0627A05FEF179704A1BE6D15AF69FE2B0F7C15965E996839BF992EB0B5D691ABB8044EA46377EBFC3107E09F16538CB3DD19680F5596DB58327E881EC5D294D7E7C9E2DD839CEE92886D53C3B2480EF9A52A21C00FCAC076AF9C83DF0B500A52ACC1CC8EFFB0E0B8BD07D1F5F29630AE94704F35EEAA33D0464D4C1909A4FAC36340DCC11C3294F73672FCE9EFD1500AFC53DE49A90232B1E7274CD9E431877BF0F782E452CA0B3AB9AB988C98482DE3936FAEED229A9ABA943308B3DBCD540DC6E40A3A03574CFA7076AC34CE84ACE1793783AC08D324602F8592F3C84C8D03D2B262AC19350F1ECA624A9901AFEEF9E2D95F2DBDBF41255CF4EB9071E01F8D2030954741E5A3E8FE50019E2DF620E3CACC4A21A1F76227AFE8F5964E4E16AECDF2E755131ED40406E3B2C6DAE716D7A8AB75768C1F2AA27ACBDE2905CF2002D9D3D0478EE35454484303DD025E121FC782F4671F726AE67CDF24454256A3977CB286BA035C29F3B072D0B5B6EBB4290CE6AEC9042E5CFCE404033671B65C6AB29759BBE04500B42579EE7303399BAF23A01DA1E023C0AF100A075FC1434FD07F1916383D445FC805EF70E43F59B7A39F826E1BCC3C65F0278590EF05B47425840141EF91302D43CF44001903A50027820A6BFA59B85934E1C8C063E968A8963DA14FCEB7611C614E31C9846EDAA0A552525985E7480CDED183804A6C286E25E288F562EBFCE5A5810E0E9CFA9C20700DD925A10748F7777B3DDBA96398BE0A44A14D434239E07B6934AEE2324A9904B6A57DCE488A9B8BE0D8E2943308A6427C0698891B048564F9A8E6BAE14C292AEE429A7740E1E5CE8D1B68993F23C78D40E72A210C6FF602B0F4FE175DFD2CF93E0095002A0D0712A0CE19FBE0498C30ACC1C284C923187008F78E01180C203BFAE9D8E63F6655C24CD48E7AE7D6A36712BAD0DFAA617A078E2132EB2146061E70687A054380624C331308593F304DE46DB8436EA540B02E481D1CF0778EAA482741032AC710765BDDBDC8DCE72AF50CE438CB5D2363FAEB01E113C94E3C0C3D8C10429C64A0E49C3D0132D5624BB054A0C83084A0D8A5C9DEB728087BA32934309E72CA1F9A624802F8B095FDB13E08558E6BC90097C70E501DE352B79094E409100EA7D0AF0530FCC91AAF02B00CFF1C42A3B93F7CE1D8430018A30FE263DEF9B3A69F8E06211CE46F4B1635AE2C89E52AD70121ADA86B86C751E494989D0E152CBD2D11357E979629BE712C22B071AD93C47D3FE4800B4FCE210F64C6F4764F373547003273A855B5145D21C2E94FBD5286EBB6232CBE01D9182047AA4D8ECDB270E53E73D833EBD479F3A4DEFC0345DE4000F756576EB9AE4D1B647001E7AA2F89C3E658A66D004FEC1EE81149EDF3808DB57001AE44099025AEE818592703E0428AEE26B7F4C80EA04F8030214FAF01B04F775AD74BC679603358F87BC398732895D53441D4775DC10DECE1F8592B206F27373F9308A06F0FC34CE33EF398765E37A483A6E4464C13D8237DCD4B29D65BF7ECE42E4C02FF040EFCC36C4B67261FE5400E4A239204BAAB662D32576AD09B955BC03BC4C9ACD89A361F64923D00C9D822E7B53014F97AF358258080E3CF05057E6709AED9439F34B0085F79D8B9EC099805168B1F27E214086B0B2473B7E72A9EE656E9403A49CE15578E9DF3177AA7977E37B166512BC6FEBA6E143FB1A694263C55CEC51B8C85BC556786A6B0B15DC26DE2E1CE3D44813B9D9D9B877AF41CA7F9A3A063C8414889B9C617A71A8E11593CB3EB803ADC20359448CF5F56A0F47F92F47FAB5CC8122847DB23B10DFCE8390DCC839F09492B815C12B2A07DEB179D25033BDB8015995CD28E7E4A4AB7F8C213C4A6053D0A6F4D06408EA844EB23233BF8497481E782552E84ACA2202BC9A2E0728A4CA61188B8F45A7A1E627008EFF124091FB8E86F04B80EC7BA5FC4878A2420B93032C80CAAD2E168F4CFCFD851286F363AA04A60E1E1ABA53BC88CCD65594F56CA2AA97C6B5AC4FC9B87478283D359500EFF12849060C78BF9C78448A99E565B807C62180D157D2F8881E38004B86F065AB8B2FB847F7A2FDC9A94F3E9609931D02F4CBED44326F25ADEEDFE6BC6E067AF6E174E30C6EF973242F2CBBDFC5DB407B28AA7B39C71B67C3CF3F9EA1A749886232E2C3B96078ED3A4CDDB3A426DC21FA216E94AE23BF7393632D9E3D6611390428B4A0E47D8477C69F9ECCEFF3815DE32B212C004A769003953C18C297EA5F7AE061888BEBD77572F0432EC5CFDCE9C169F7164E6D267913E21CFB6AB6A4BC55ACF23197635C47941360CD13715B05F55E1907AF049892CCA2585C8CC2C242D4D7D72332229C0545098A0A8AB07670432ECFD31496D5F273AA3C5AE709C213769FF6ADBADABA4F0106E5754A2701EA0676A4C9AEFAE530B885A4F0604E3A5D398F6A7C9027A9D6F074749A002708701CAA0193D25D935E45AB3C1A318D331C7CAAA8EB4A00AFC5B6C0AB6A93274437D9AE71B973C40385A4112D9A9ADFC801C0F12F06C81CA87493216CFD69080B70225F7E9DE1FA03B37C9C726B651AE1CC9045ED127BF2DB9C53963DE214BD6105A59466D90458FD648BB7CB721ADEF502FEDC79282A2823293E4E02780006BC735D02E9E9E9C10EED1874F8E80071739081BE1EF82880975FC7AF5FA399BCF4C090822E64F3E902F778C6454C3D142F0410602A47EBA9CC093968623F2CA6328B3CFC587ABF1B172307611C296EB99A8781F70328EBDB72DC731AEA94031A042874A5B8C7B794EFFE15CEFF84F7491E48EF3B1F330175C29300D20B358304C08322A22BD77EC2F3C4F51B871E78B383003FF54091E7441BF60BFB3A68050CB1F5E3BD249453E23EE282766E092B9750DEBD8618E6BD2A0E7553B88E486F7BCE0ABC82AB6165D0D237C3E9E3C7505C542479DF21C0C36B450517F6046673E932F8D40EE4E7E71FFD9A257E5D314DED25C0F0A247C8EBE3515D1E1AD28F98C649AB689C73BA4D91992025D366F6C5BDC3931CBD5742E51A2B5E20BD88FB05D5735E50A0103F6B66C4A763F0EE21437D09A05B12C7F4F53C59C0B0B13D02D096000DC346A1EA2B877786103503E500DF11555897D2E3009EB80A80DF6111111EF8637AE0778CF2294B3238D22A87AA570FF4E8753AA1EC6428E4331FAE72FAB3804A7A5C7005AF3DEB88AE5B410EABAE732153497C3B0C2CAFE2E4271FF281146692E7F1E91CBF04EF284C3E1741F2CA83CF35F17A99F67FF6F968176172803C621159F208455C00DDE7915D7D4E41547C8771DA913DE8F9DB70F40E475AD94398DF2EC087571BA0E2C3692DCFD629A969F350901A0203025E868199B19104F0663275E5831D94336CC47CEFD0FBAC3930D060E55523405140D498033508F067D481928C111EF81260CE2B00BF675E8A1F9E2DC449D71669DCA51E2CAAFF34626A975828E871DCD9F8F33659710DAD5C4431DB52C79C3516B011183B044391CB2E1D7535A4A7A5A1FC57803B00268AC6202D98F61EED8FC5336C0EE1BD0428EEBE8EE4C25B1C696B1C7D2ECDE094FCC77026681A8A9E3CB97439051FDBE6E113F71EA8BB9543459B6DCDE9637077754126ABD7E13B969393C3B999E90B01D0334DAE2B852CBA4C0D26555F7A9F792473E741F88A101626000A212D3CF0EBF44091DB84E71D7AE0B7990315DC5B71DCB58DA13F20557F8DC029DCE6BD1FB738392AE3B91A3F022CEE5A837FE9228F85F0D6AD6CDE3B42CFD777CBE29DECBA52B7E1CBA7B8D5D6D57E361C3FCF03457ECBA029D3FEEBCACA8AACA8A848269EEEF15A803165DDD26981A6B1E7941713F440F1878E13E20C948317A072A3997B5B379C3EF6114BBA31CB7E260A0A0A0E7FF8167F5009F38499B79777BE00E895D18618EACA2A6AAE4BF440517985178AE221C2F7109E14C2CC81C2038F0214524580FC7FDA59D2D99533777AA1C33CA71E32C5B32E1CC472809BDFB6CAD3AE0BBCAEC08FDBBE8AEE0DDCE0ED0D4E9C94EB7AD642C5E00A4E139C8DB515AA2AAB40085F14AE7BFC1BEED16C687FC907FC480FD611D07E2D80F1958F51C963BA8D63BB1240657F020C9AC319EF5E685A87424141157A9A6A4864D51209963FE439AD8B7685F6F6E0E0A0F478115515152D0D4D6DEACA76EA4A9E75E913B2888B2402B48A9B847AC0C8E77AA004D0E4530FFC1B4A936FE864E2FD8B659C0B3E8582E7537CE4D605F5A06748E1E6309A619BD9BC428F9B4349E73AEE10A01B4F96EA72DAA266E94D6D7B02463AEA5284545557BF0EDCFE41887AF3FA23DA7FE27DCDB29D9D1DD9AF0DB09A49F2389F2D1557D1858679E0219FF7A81B3E4F2F1985BA633694D50DA174E223BABFF761329D3CC8091FF2FA87F1D131B2523E7740001C1E1E960314275D733A9144B92074A575827C026D1EF5CBE17B18C27280C5F81B9D2C7A5D26BE6F5600058F47D260F503FB46FC953AD3886B3B01F2181BD7AAE1554BC8E6FA2184CF54B843BD691241617C391E279534A0A67002212141921CF96C753DF85854D1249A22ED3F1F7D20D96F0CB0B5A5D5574951694B47CF107E713954EA73D0E7391965035B96F98F606F6B83B292E24D56A272FEB033B43FDF585F933537B5CAFA9EF6C97E19A0B2043090C23C5D9C3025C08B71F20EC420ECD5F09587F1B09403FFDEE63EBE29B566592C548D1CAAB243F1A88286E125FC58D106EF5DA8E07A7382DE3B81A4FB4B88AE594260F90A8FB0CD43C9B91C8A3A9CAA1CFF1857ED6C212A67D1116D77006D83D73A9A05ED2F687F303E3E265B5E5A7CE50976BF31C0A5C525D97567E79F5A5B5F2C140FF312B7B68B471C19EA6A233D3D6DB1B6B646B42EDF7EBEFB5CD6D5D5259B9E9E96FD2A809A0C61A12BB3784B431D8FFD9E8F9D94F6C2DA8172F97298FF8E16919F5AD7E027172BF8EFD4740C438D731ECC5FC7A1AE700C0ABA565C2C0D73F7322BE5E6B0AA155CCF5D86F2CD162899BAF34942C7289F74A4E220E07DC6EB9EF06357DA0F685F999D7F26DBDED9E21DE7BDB237027076665666676BCB47BAB5FF417E5E819F9BABCB6A809FFF62676787337FE057878707642B8B73FCA1DBBF11C0B042B9AEACA730B78C958FAD44DBF65978D2C7ACF8CA3E14D47EFDD0BC124BB9A106751505444586E3A2E559689D75E231120E3EB9B8570E9CE3DE6404CA565138C5AF3BC3708D080DC3BD57C3F5197FF778DA71DA1FAF3162F69EEFCAFA7A9FCADE38403E055716121CCC67E635C91E77F7CA7A7B7AFEF4D9B399FF21DEADCD8D35E6B6BEDF10A08A9678024664F12314F256B07B43CF097092237BE6BFCFF13EB580294E64C6A1EE5C08551D0B9E5E3D060F7737F0C9BC5287E0EC680FE38BD7A49B19FDF8980025877C286A59F0F4D771DE0EE1288DA20EC4F03A7FE74A9AAE08D1B5F50DD9CEF68EF460882F15E09B7EA2A38A8AB21CE081AEBC3F42803CBB67CC332CAF00641FAD16C8FEF9E67DA819394281F9D6C2DC08C585452FBB03A12BCF7199A3C2B33662A871D1F1368E7FFC2F3035645F5A562EC123AC4E9A8896B7D7373664FBFB7BB2A9A94942FB9D06A88D9872B9AE7C40612E1646FAA1070019AE6A81CFA0E6D58D3317FCA5F191B6863252F9D8E2CF34EB22A70DD0BB062F585AEC7EF8CF3F877818594C4C0CDADBDB96D9868910FD39ED4F761945335353B2DF1B805A2C22F115D495BC57F80175A5198FA28945B96A00C1B14868D8A74051458777971F87BF8FB724378E8872118AE93435DA9FADADADF101374FFFB1BAAAC2FBE1C387357C7AA4F0B6FF7518393BDBDBB2DF2B808A8A0ABA1ABC8737B1F609EE515736F1B657A3BBB314D02C22AE5550D5B786C2B10F6177D91AD514B8479AF97A8271A0FDDFB5D5359904AEBF5F363F3F2F1BE8EF7B2935F618A2A28AFEDE023432343CA67E461DE6E72FE16E5E3DA73B1BD0F3E5B3FDCEDEE4D4E6044C0DF4909395897A4E81096B8826BA801F8B8A3F323C229B9C60FEFA0C407AA06C7F6F970FB37DC107D1FE9E032CE253D1AC2E5CE47D8B8A2D278E1D83B9A59574D39EBA8A22C2C242C007BC6E335C930F42F44F66F854DDB5D515D9DEDEBE6C7868583639FE1F1C606A728A6C60A08F8F1A9EFBEBB8D8F80E6D2D4DD8DBD9A1B1F1FEECFDFB0D42D0FEE5DAF292A42BF7F7F7096E4FF6E2051F87CC31919054A207159F5F5D5D958987BD8A10FE0FE5815F248B08EFBFD0A467347FD9F6A6E5D9EBBEDFFF0716E9C8940A5A38970000000049454E44AE426082iexplore.exe$Target/Property[Type="Dell.Connections.DellServer"]/OMSAURL$iexplore.exe$Target/Property[Type="Dell.Connections.DellDRAC"]/DracURL$C:\Program Files\Dell\SysMgt\bmc\ipmish.exe-ip$Target/Property[Type="Dell.Connections.ServerBMC"]/BMCIPAddress$-uroot-pcalvin-k00powerstatusC:\Program Files\Dell\SysMgt\bmcC:\Program Files\Dell\SysMgt\bmc\ipmish.exe-ip$Target/Property[Type="Dell.Connections.ServerBMC"]/BMCIPAddress$-uroot-pcalvin-k00poweronC:\Program Files\Dell\SysMgt\bmcC:\Program Files\Dell\SysMgt\bmc\ipmish.exe-ip$Target/Property[Type="Dell.Connections.ServerBMC"]/BMCIPAddress$-uroot-pcalvin-k00poweroffC:\Program Files\Dell\SysMgt\bmcC:\Program Files\Dell\SysMgt\bmc\ipmish.exe-ip$Target/Property[Type="Dell.Connections.ServerBMC"]/BMCIPAddress$-uroot-pcalvin-k00poweroff-forceC:\Program Files\Dell\SysMgt\bmcC:\Program Files\Dell\SysMgt\bmc\ipmish.exe-ip$Target/Property[Type="Dell.Connections.ServerBMC"]/BMCIPAddress$-uroot-pcalvin-k00powercycleC:\Program Files\Dell\SysMgt\bmcC:\Program Files\Dell\SysMgt\bmc\ipmish.exe-ip$Target/Property[Type="Dell.Connections.ServerBMC"]/BMCIPAddress$-uroot-pcalvin-k00powerresetC:\Program Files\Dell\SysMgt\bmcC:\Program Files\Dell\SysMgt\bmc\ipmish.exe-ip$Target/Property[Type="Dell.Connections.ServerBMC"]/BMCIPAddress$-uroot-pcalvin-k00identifyonC:\Program Files\Dell\SysMgt\bmcC:\Program Files\Dell\SysMgt\bmc\ipmish.exe-ip$Target/Property[Type="Dell.Connections.ServerBMC"]/BMCIPAddress$-uroot-pcalvin-k00identifyoffC:\Program Files\Dell\SysMgt\bmcOperationsOperations33NoAnchorArrowAnchorNoAnchorArrowAnchorDashDotDot$MPElement[Name="Dell.Connections.DellServer.BIOS"]$Operations32NoAnchorArrowAnchorNoAnchorArrowAnchorDashDotDot$MPElement[Name="Dell.Connections.DellServer.BIOS"]$Operations32NoAnchorArrowAnchorNoAnchorArrowAnchorDashDotDot$MPElement[Name="Dell.Connections.DellServer.BIOS"]$Operations0Dell%SeveritySeverityIconIconPathMonitoringObjectPathSourceMonitoringObjectDisplayNameMaintenance ModeMonitoringObjectInMaintenanceModeNameNameResolution StateResolutionStateCreatedTimeRaisedAgeAgeTypeCategoryAssigned ToOwnerPriorityPriorityLatencyLatencyDescriptionDescriptionConnectorConnectorIdForwarding StatusConnectorStatusClassClassFull Source NameFullyQualifiedSourceNameTime in StateTimeInStateCustom Field 1CustomField1Custom Field 2CustomField2Custom Field 3CustomField3Custom Field 4CustomField4Custom Field 5CustomField5Custom Field 6CustomField6Custom Field 7CustomField7Custom Field 8CustomField8Custom Field 9CustomField9Custom Field 10CustomField10Resolved ByResolvedByTime ResolvedTimeResolvedLast State ChangeTimeResolutionStateLastModifiedLast ModifiedLastModifiedLast Modified ByLastModifiedByManagement GroupManagementGroupSiteSiteNameRepeat CountRepeatCountTicket IDTicketId
IF NOT EXISTS (SELECT * FROM sysobjects WHERE type = 'P' AND name = 'Dell_Connections_Report_WindowsEventReportDataGet')
BEGIN
EXECUTE ('CREATE PROCEDURE dbo.[Dell_Connections_Report_WindowsEventReportDataGet] AS RETURN 1')
END
GO
ALTER PROCEDURE dbo.[Dell_Connections_Report_WindowsEventReportDataGet]
@StartDate datetime,
@EndDate datetime,
@ObjectList xml,
@SelectedType nvarchar(255),
@LanguageCode varchar(10)
AS
BEGIN
SET NOCOUNT ON
DECLARE @Error int
DECLARE @ExecError int
CREATE TABLE #ObjectList (ManagedEntityRowId int)
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
INSERT INTO #ObjectList (ManagedEntityRowId)
EXECUTE @ExecError = [Dell_Connections_Report_ReportObjectListParse]
@ObjectList = @ObjectList,
@StartDate = @StartDate,
@EndDate = @EndDate
SET @Error = @@ERROR
IF @Error <> 0 OR @ExecError <> 0 GOTO QuitError
/* -------------------------------------- */
DECLARE @SelectedTypeId int
SELECT @SelectedTypeId = EventLevelId from vEventLevel WHERE EventLevelTitle = @SelectedType
DECLARE @SelectedSourceId int
SELECT @SelectedSourceId = EventPublisherRowId from vEventPublisher WHERE EventPublisherName = 'Server Administrator'
SELECT
_vEvent.EventDisplayNumber,_vEvent.FirstOccuranceTime,
_vEvent.LastOccuranceTime,_vEvent.RepeatCount,
vRule.RuleDefaultName,
vEventLevel.EventLevelTitle,
vEventCategory.EventCategoryTitle,
vEventPublisher.EventPublisherName,
Event.vEventDetail.RenderedDescription,
vManagedEntity.ManagedEntityDefaultName,
vManagedEntity.ManagedEntityGuid,
vManagedEntity.Path,
vManagedEntityType.ManagedEntityTypeDefaultName,
vManagementGroup.ManagementGroupDefaultName,vManagementGroup.ManagementGroupGuid,
vManagedEntityTypeImage.Image
FROM
(
SELECT
Event.vEventRule.RuleRowId,
Event.vEventRule.ManagedEntityRowId,
EventPublisherRowId,
EventCategoryRowId,EventLevelId,EventDisplayNumber,
MIN(DateTime) AS FirstOccuranceTime,
MAX(DateTime) AS LastOccuranceTime,
MIN(CONVERT(NVARCHAR(50),Event.vEvent.EventOriginId)) AS SampleEventOriginId,
COUNT(*)-1 AS RepeatCount
FROM
Event.vEvent INNER JOIN
Event.vEventRule ON Event.vEvent.EventOriginId = Event.vEventRule.EventOriginId INNER JOIN
#ObjectList ON Event.vEventRule.ManagedEntityRowId = #ObjectList.ManagedEntityRowId
WHERE
( Event.vEvent.DateTime >= @StartDate) AND (Event.vEvent.DateTime < @EndDate) AND
( @SelectedType = '' OR @SelectedTypeId =Event.vEvent.EventLevelId)
GROUP BY
RuleRowId,Event.vEventRule.ManagedEntityRowId,EventPublisherRowId,
EventCategoryRowId,EventLevelId,EventDisplayNumber
)AS _vEvent INNER JOIN
vRule ON vRule.RuleRowId = _vEvent.RuleRowId INNER JOIN
vEventPublisher ON vEventPublisher.EventPublisherRowId = _vEvent.EventPublisherRowId
AND vEventPublisher.EventPublisherRowId = @SelectedSourceId INNER JOIN
vEventCategory ON vEventCategory.EventCategoryRowId = _vEvent.EventCategoryRowId INNER JOIN
vEventLevel ON vEventLevel.EventLevelId = _vEvent.EventLevelId INNER JOIN
Event.vEventDetail ON Event.vEventDetail.EventOriginId = _vEvent.SampleEventOriginId INNER JOIN
vManagedEntity ON _vEvent.ManagedEntityRowId = vManagedEntity.ManagedEntityRowId INNER JOIN
vManagedEntityType ON vManagedEntityType.ManagedEntityTypeRowId = vManagedEntity.ManagedEntityTypeRowId INNER JOIN
vManagementGroup ON vManagementGroup.ManagementGroupRowId = vManagedEntity.ManagementGroupRowId LEFT OUTER JOIN
vManagedEntityTypeImage ON vManagedEntityTypeImage.ManagedEntityTypeRowId = vManagedEntity.ManagedEntityTypeRowId
AND vManagedEntityTypeImage.ImageCategory ='u16x16Icon'
/* --------------------------------------- */
SET @Error = @@ERROR
QuitError:
DROP TABLE #ObjectList
RETURN @Error
END
GO
GRANT EXECUTE ON dbo.[Dell_Connections_Report_WindowsEventReportDataGet] TO OpsMgrReader
GO
IF EXISTS (SELECT * FROM sysobjects WHERE type = 'P' AND name = 'Dell_Connections_Report_WindowsEventReportDataGet')
BEGIN
DROP PROCEDURE dbo.[Dell_Connections_Report_WindowsEventReportDataGet]
END
GO
IF NOT EXISTS (SELECT * FROM sysobjects WHERE type = 'P' AND name = 'Dell_Connections_Report_WindowsEventReportDataGet')
BEGIN
EXECUTE ('CREATE PROCEDURE dbo.[Dell_Connections_Report_WindowsEventReportDataGet] AS RETURN 1')
END
GO
ALTER PROCEDURE dbo.[Dell_Connections_Report_WindowsEventReportDataGet]
@StartDate datetime,
@EndDate datetime,
@ObjectList xml,
@SelectedType nvarchar(255),
@LanguageCode varchar(10)
AS
BEGIN
SET NOCOUNT ON
DECLARE @Error int
DECLARE @ExecError int
CREATE TABLE #ObjectList (ManagedEntityRowId int)
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
INSERT INTO #ObjectList (ManagedEntityRowId)
EXECUTE @ExecError = [Dell_Connections_Report_ReportObjectListParse]
@ObjectList = @ObjectList,
@StartDate = @StartDate,
@EndDate = @EndDate
SET @Error = @@ERROR
IF @Error <> 0 OR @ExecError <> 0 GOTO QuitError
/* -------------------------------------- */
DECLARE @SelectedTypeId int
SELECT @SelectedTypeId = EventLevelId from vEventLevel WHERE EventLevelTitle = @SelectedType
DECLARE @SelectedSourceId int
SELECT @SelectedSourceId = EventPublisherRowId from vEventPublisher WHERE EventPublisherName = 'Server Administrator'
SELECT
_vEvent.EventDisplayNumber,_vEvent.FirstOccuranceTime,
_vEvent.LastOccuranceTime,_vEvent.RepeatCount,
vRule.RuleDefaultName,
vEventLevel.EventLevelTitle,
vEventCategory.EventCategoryTitle,
vEventPublisher.EventPublisherName,
Event.vEventDetail.RenderedDescription,
vManagedEntity.ManagedEntityDefaultName,
vManagedEntity.ManagedEntityGuid,
vManagedEntity.Path,
vManagedEntityType.ManagedEntityTypeDefaultName,
vManagementGroup.ManagementGroupDefaultName,vManagementGroup.ManagementGroupGuid,
vManagedEntityTypeImage.Image
FROM
(
SELECT
Event.vEventRule.RuleRowId,
Event.vEventRule.ManagedEntityRowId,
EventPublisherRowId,
EventCategoryRowId,EventLevelId,EventDisplayNumber,
MIN(DateTime) AS FirstOccuranceTime,
MAX(DateTime) AS LastOccuranceTime,
MIN(CONVERT(NVARCHAR(50),Event.vEvent.EventOriginId)) AS SampleEventOriginId,
COUNT(*)-1 AS RepeatCount
FROM
Event.vEvent INNER JOIN
Event.vEventRule ON Event.vEvent.EventOriginId = Event.vEventRule.EventOriginId INNER JOIN
#ObjectList ON Event.vEventRule.ManagedEntityRowId = #ObjectList.ManagedEntityRowId
WHERE
( Event.vEvent.DateTime >= @StartDate) AND (Event.vEvent.DateTime < @EndDate) AND
( @SelectedType = '' OR @SelectedTypeId =Event.vEvent.EventLevelId)
GROUP BY
RuleRowId,Event.vEventRule.ManagedEntityRowId,EventPublisherRowId,
EventCategoryRowId,EventLevelId,EventDisplayNumber
)AS _vEvent INNER JOIN
vRule ON vRule.RuleRowId = _vEvent.RuleRowId INNER JOIN
vEventPublisher ON vEventPublisher.EventPublisherRowId = _vEvent.EventPublisherRowId
AND vEventPublisher.EventPublisherRowId = @SelectedSourceId INNER JOIN
vEventCategory ON vEventCategory.EventCategoryRowId = _vEvent.EventCategoryRowId INNER JOIN
vEventLevel ON vEventLevel.EventLevelId = _vEvent.EventLevelId INNER JOIN
Event.vEventDetail ON Event.vEventDetail.EventOriginId = _vEvent.SampleEventOriginId INNER JOIN
vManagedEntity ON _vEvent.ManagedEntityRowId = vManagedEntity.ManagedEntityRowId INNER JOIN
vManagedEntityType ON vManagedEntityType.ManagedEntityTypeRowId = vManagedEntity.ManagedEntityTypeRowId INNER JOIN
vManagementGroup ON vManagementGroup.ManagementGroupRowId = vManagedEntity.ManagementGroupRowId LEFT OUTER JOIN
vManagedEntityTypeImage ON vManagedEntityTypeImage.ManagedEntityTypeRowId = vManagedEntity.ManagedEntityTypeRowId
AND vManagedEntityTypeImage.ImageCategory ='u16x16Icon'
/* --------------------------------------- */
SET @Error = @@ERROR
QuitError:
DROP TABLE #ObjectList
RETURN @Error
END
GO
GRANT EXECUTE ON dbo.[Dell_Connections_Report_WindowsEventReportDataGet] TO OpsMgrReader
GO
IF NOT EXISTS (SELECT * FROM sysobjects WHERE type = 'P' AND name = 'Dell_Connections_Report_ReportObjectListParse')
BEGIN
EXECUTE ('CREATE PROCEDURE dbo.[Dell_Connections_Report_ReportObjectListParse] AS RETURN 1')
END
GO
ALTER PROCEDURE dbo.[Dell_Connections_Report_ReportObjectListParse]
@StartDate datetime,
@EndDate datetime,
@ObjectList xml,
@ContainmentLevelCount int = 0,
@ContainmentStartLevel int = 0
AS
BEGIN
SET NOCOUNT ON
DECLARE @Error int
DECLARE @ExecError int
DECLARE @RowCount int
CREATE TABLE #ObjectList (ManagedEntityRowId int)
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
CREATE TABLE #ContainmentObjectList (
ManagedEntityRowId int,
[Level] int
)
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
CREATE TABLE #RelationshipType (
RelationshipTypeRowId int,
[Level] int
)
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
INSERT INTO #ObjectList (ManagedEntityRowId)
SELECT ObjectList.ManagedEntityRowId.value('.', 'int')
FROM @ObjectList.nodes('/Data/Objects/Object') AS ObjectList(ManagedEntityRowId)
WHERE ISNULL(ObjectList.ManagedEntityRowId.value('@Use', 'nvarchar(255)'), 'Self') = 'Self'
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
INSERT INTO #ContainmentObjectList (ManagedEntityRowId, [Level])
SELECT ObjectList.ManagedEntityRowId.value('.', 'int'), 0
FROM @ObjectList.nodes('/Data/Objects/Object') AS ObjectList(ManagedEntityRowId)
WHERE ISNULL(ObjectList.ManagedEntityRowId.value('@Use', 'nvarchar(255)'), 'Self') = 'Containment'
SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT
IF @Error <> 0 GOTO QuitError
IF @RowCount > 0
BEGIN
DECLARE @ContainmentRelationshipTypeRowId int
SELECT @ContainmentRelationshipTypeRowId = RelationshipTypeRowId FROM vRelationshipType WHERE RelationshipTypeSystemName = 'System.Containment'
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
INSERT #RelationshipType(RelationshipTypeRowId, [Level])
SELECT RelationshipTypeRowId, [Level]
FROM dbo.RelationshipDerivedTypeHierarchy(@ContainmentRelationshipTypeRowId, 0)
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
DECLARE @CurrentLevel int
SET @CurrentLevel = 1
WHILE (((@ContainmentLevelCount >= @CurrentLevel) OR (@ContainmentLevelCount = 0)) AND (@RowCount > 0))
BEGIN
INSERT INTO #ContainmentObjectList (ManagedEntityRowId, [Level])
SELECT DISTINCT r.TargetManagedEntityRowId, @CurrentLevel
FROM Relationship r
JOIN RelationshipManagementGroup rmg ON (r.RelationshipRowId = rmg.RelationshipRowId)
JOIN #RelationshipType rt ON (r.RelationshipTypeRowId = rt.RelationshipTypeRowId)
JOIN #ContainmentObjectList me ON (me.ManagedEntityRowId = r.SourceManagedEntityRowId) AND (me.[Level] = @CurrentLevel - 1)
WHERE (rmg.FromDateTime <= @EndDate) AND (ISNULL(rmg.ToDateTime, '99991231') >= @StartDate)
SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT
SET @CurrentLevel = @CurrentLevel + 1
IF @Error <> 0 OR @ExecError <> 0 GOTO QuitError
END
END
/* ------------------------------ */
SELECT ManagedEntityRowId
FROM #ObjectList
UNION
SELECT ManagedEntityRowId
FROM #ContainmentObjectList
WHERE [Level] >= @ContainmentStartLevel
SET @Error = @@ERROR
QuitError:
DROP TABLE #ObjectList
DROP TABLE #ContainmentObjectList
DROP TABLE #RelationshipType
RETURN @Error
END
GO
GRANT EXECUTE ON dbo.[Dell_Connections_Report_ReportObjectListParse] TO OpsMgrReader
GO
IF EXISTS (SELECT * FROM sysobjects WHERE type = 'P' AND name = 'Dell_Connections_Report_ReportObjectListParse')
BEGIN
DROP PROCEDURE dbo.[Dell_Connections_Report_ReportObjectListParse]
END
GO
IF NOT EXISTS (SELECT * FROM sysobjects WHERE type = 'P' AND name = 'Dell_Connections_Report_ReportObjectListParse')
BEGIN
EXECUTE ('CREATE PROCEDURE dbo.[Dell_Connections_Report_ReportObjectListParse] AS RETURN 1')
END
GO
ALTER PROCEDURE dbo.[Dell_Connections_Report_ReportObjectListParse]
@StartDate datetime,
@EndDate datetime,
@ObjectList xml,
@ContainmentLevelCount int = 0,
@ContainmentStartLevel int = 0
AS
BEGIN
SET NOCOUNT ON
DECLARE @Error int
DECLARE @ExecError int
DECLARE @RowCount int
CREATE TABLE #ObjectList (ManagedEntityRowId int)
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
CREATE TABLE #ContainmentObjectList (
ManagedEntityRowId int,
[Level] int
)
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
CREATE TABLE #RelationshipType (
RelationshipTypeRowId int,
[Level] int
)
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
INSERT INTO #ObjectList (ManagedEntityRowId)
SELECT ObjectList.ManagedEntityRowId.value('.', 'int')
FROM @ObjectList.nodes('/Data/Objects/Object') AS ObjectList(ManagedEntityRowId)
WHERE ISNULL(ObjectList.ManagedEntityRowId.value('@Use', 'nvarchar(255)'), 'Self') = 'Self'
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
INSERT INTO #ContainmentObjectList (ManagedEntityRowId, [Level])
SELECT ObjectList.ManagedEntityRowId.value('.', 'int'), 0
FROM @ObjectList.nodes('/Data/Objects/Object') AS ObjectList(ManagedEntityRowId)
WHERE ISNULL(ObjectList.ManagedEntityRowId.value('@Use', 'nvarchar(255)'), 'Self') = 'Containment'
SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT
IF @Error <> 0 GOTO QuitError
IF @RowCount > 0
BEGIN
DECLARE @ContainmentRelationshipTypeRowId int
SELECT @ContainmentRelationshipTypeRowId = RelationshipTypeRowId FROM vRelationshipType WHERE RelationshipTypeSystemName = 'System.Containment'
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
INSERT #RelationshipType(RelationshipTypeRowId, [Level])
SELECT RelationshipTypeRowId, [Level]
FROM dbo.RelationshipDerivedTypeHierarchy(@ContainmentRelationshipTypeRowId, 0)
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
DECLARE @CurrentLevel int
SET @CurrentLevel = 1
WHILE (((@ContainmentLevelCount >= @CurrentLevel) OR (@ContainmentLevelCount = 0)) AND (@RowCount > 0))
BEGIN
INSERT INTO #ContainmentObjectList (ManagedEntityRowId, [Level])
SELECT DISTINCT r.TargetManagedEntityRowId, @CurrentLevel
FROM Relationship r
JOIN RelationshipManagementGroup rmg ON (r.RelationshipRowId = rmg.RelationshipRowId)
JOIN #RelationshipType rt ON (r.RelationshipTypeRowId = rt.RelationshipTypeRowId)
JOIN #ContainmentObjectList me ON (me.ManagedEntityRowId = r.SourceManagedEntityRowId) AND (me.[Level] = @CurrentLevel - 1)
WHERE (rmg.FromDateTime <= @EndDate) AND (ISNULL(rmg.ToDateTime, '99991231') >= @StartDate)
SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT
SET @CurrentLevel = @CurrentLevel + 1
IF @Error <> 0 OR @ExecError <> 0 GOTO QuitError
END
END
/* ------------------------------ */
SELECT ManagedEntityRowId
FROM #ObjectList
UNION
SELECT ManagedEntityRowId
FROM #ContainmentObjectList
WHERE [Level] >= @ContainmentStartLevel
SET @Error = @@ERROR
QuitError:
DROP TABLE #ObjectList
DROP TABLE #ContainmentObjectList
DROP TABLE #RelationshipType
RETURN @Error
END
GO
GRANT EXECUTE ON dbo.[Dell_Connections_Report_ReportObjectListParse] TO OpsMgrReader
GO
IF NOT EXISTS (SELECT * FROM sysobjects WHERE type = 'P' AND name = 'Dell_Connections_Report_ReportObjectList')
BEGIN
EXECUTE ('CREATE PROCEDURE dbo.[Dell_Connections_Report_ReportObjectList] AS RETURN 1')
END
GO
ALTER PROCEDURE dbo.[Dell_Connections_Report_ReportObjectList]
@ObjectList xml
AS
BEGIN
SET NOCOUNT ON
SELECT vManagedEntity.ManagedEntityDefaultName, vManagedEntity.Path, vManagedEntityType.ManagedEntityTypeDefaultName,
vManagedEntity.ManagedEntityRowId, vManagementGroup.ManagementGroupDefaultName,
ObjectList.ManagedEntity.value('@Use', 'nvarchar(255)') As ManagedEntityUse
FROM @ObjectList.nodes('/Data/Objects/Object') AS ObjectList(ManagedEntity) INNER JOIN
vManagedEntity ON vManagedEntity.ManagedEntityRowId = ObjectList.ManagedEntity.value('.', 'int') INNER JOIN
vManagedEntityType ON vManagedEntity.ManagedEntityTypeRowId = vManagedEntityType.ManagedEntityTypeRowId INNER JOIN
vManagementGroup ON vManagedEntity.ManagementGroupRowId = vManagementGroup.ManagementGroupRowId WHERE
vManagedEntityType.ManagedEntityTypeSystemName='Dell.Connections.DellSystem'
END
GO
GRANT EXECUTE ON dbo.[Dell_Connections_Report_ReportObjectList] TO OpsMgrReader
GO
IF EXISTS (SELECT * FROM sysobjects WHERE type = 'P' AND name = 'Dell_Connections_Report_ReportObjectList')
BEGIN
DROP PROCEDURE dbo.[Dell_Connections_Report_ReportObjectList]
END
GO
IF NOT EXISTS (SELECT * FROM sysobjects WHERE type = 'P' AND name = 'Dell_Connections_Report_ReportObjectList')
BEGIN
EXECUTE ('CREATE PROCEDURE dbo.[Dell_Connections_Report_ReportObjectList] AS RETURN 1')
END
GO
ALTER PROCEDURE dbo.[Dell_Connections_Report_ReportObjectList]
@ObjectList xml
AS
BEGIN
SET NOCOUNT ON
SELECT vManagedEntity.ManagedEntityDefaultName, vManagedEntity.Path, vManagedEntityType.ManagedEntityTypeDefaultName,
vManagedEntity.ManagedEntityRowId, vManagementGroup.ManagementGroupDefaultName,
ObjectList.ManagedEntity.value('@Use', 'nvarchar(255)') As ManagedEntityUse
FROM @ObjectList.nodes('/Data/Objects/Object') AS ObjectList(ManagedEntity) INNER JOIN
vManagedEntity ON vManagedEntity.ManagedEntityRowId = ObjectList.ManagedEntity.value('.', 'int') INNER JOIN
vManagedEntityType ON vManagedEntity.ManagedEntityTypeRowId = vManagedEntityType.ManagedEntityTypeRowId INNER JOIN
vManagementGroup ON vManagedEntity.ManagementGroupRowId = vManagementGroup.ManagementGroupRowId WHERE
vManagedEntityType.ManagedEntityTypeSystemName='Dell.Connections.DellSystem'
END
GO
GRANT EXECUTE ON dbo.[Dell_Connections_Report_ReportObjectList] TO OpsMgrReader
GO
IF NOT EXISTS (SELECT * FROM sysobjects WHERE type = 'P' AND name = 'Dell_Connections_Report_FirmwareamdDriverVerDataGet')
BEGIN
EXECUTE ('CREATE PROCEDURE dbo.[Dell_Connections_Report_FirmwareamdDriverVerDataGet] AS RETURN 1')
END
GO
ALTER PROCEDURE dbo.[Dell_Connections_Report_FirmwareamdDriverVerDataGet]
@StartDate datetime,
@EndDate datetime,
@ObjectList xml,
@LanguageCode varchar(10)
AS
BEGIN
SET NOCOUNT ON
DECLARE @Error int
DECLARE @ExecError int
---------------------------------------------------------------------
--Create a list of Managed Entities
---------------------------------------------------------------------
CREATE TABLE #ObjectList (ManagedEntityRowId int)
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
INSERT INTO #ObjectList (ManagedEntityRowId)
EXECUTE @ExecError = [Dell_Connections_Report_ReportObjectListParse]
@ObjectList = @ObjectList,
@StartDate = @StartDate,
@EndDate = @EndDate,
@ContainmentLevelCount = 1,
@ContainmentStartLevel = 1
SET @Error = @@ERROR
IF @Error <> 0 OR @ExecError <> 0 GOTO QuitError
---------------------------------------------------------------------
--Create list of all relationships derived from 'DellServer.Hosts.DellStorage'
---------------------------------------------------------------------
CREATE TABLE #RelationshipList_1(RelationshipTypeRowId int)
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
INSERT #RelationshipList_1
SELECT RelationshipTypeRowId
FROM dbo.vRelationshipType
WHERE RelationshipTypeSystemName = 'DellServer.Hosts.DellStorage'
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
---------------------------------------------------------------------
--Create list of all entities above the selected objects in their respective hosting chains
---------------------------------------------------------------------
CREATE TABLE #Entity_Tree_1 (ManagedEntityRowId int)
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
INSERT #Entity_Tree_1
SELECT r.TargetManagedEntityRowId AS ManagedEntityRowId
FROM vRelationship AS r
JOIN #ObjectList AS ol ON r.SourceManagedEntityRowId = ol.ManagedEntityRowId
JOIN #RelationshipList_1 rl ON r.RelationshipTypeRowId = rl.RelationshipTypeRowId
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
---------------------------------------------------------------------
--Create list of all relationships derived from 'DellStorage.Hosts.DellStorageController'
---------------------------------------------------------------------
CREATE TABLE #RelationshipList_2(RelationshipTypeRowId int)
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
INSERT #RelationshipList_2
SELECT RelationshipTypeRowId
FROM dbo.vRelationshipType
WHERE RelationshipTypeSystemName = 'DellStorage.Hosts.DellStorageController'
CREATE TABLE #Entity_Tree_2(ManagedEntityRowId int not null)
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
INSERT #Entity_Tree_2
SELECT r.TargetManagedEntityRowId AS ManagedEntityRowId
FROM vRelationship AS r
JOIN #Entity_Tree_1 AS et ON r.SourceManagedEntityRowId = et.ManagedEntityRowId
JOIN #RelationshipList_2 rl ON r.RelationshipTypeRowId = rl.RelationshipTypeRowId
CREATE TABLE #ColumnPicker
(
PropertyGuid nvarchar(255)
)
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
INSERT INTO #ColumnPicker
SELECT distinct t.PropertyGuid AS PropertyGuid
FROM vManagedEntityTypeProperty AS t
JOIN vManagedEntity AS mt ON t.ManagedEntityTypeRowId = mt.ManagedEntityTypeRowId
JOIN #Entity_Tree_2 AS et ON mt.ManagedEntityRowId = et.ManagedEntityRowId
WHERE t.PropertySystemName='DriverVer' OR t.PropertySystemName='FirmwareVer'
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
---------------------------------------------------------------------
--Create List of Selected Properties and values for selected Objects
---------------------------------------------------------------------
CREATE TABLE #PropertyList
(
ManagedEntityRowId int
,PropertyValue nvarchar(256)
,DWLastModifiedDateTime datetime
,FromDateTime datetime
,TypeGuid uniqueidentifier
,TypeName nvarchar(256)
,PropertyGuid uniqueidentifier
)
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
INSERT INTO #PropertyList
SELECT
PropertyTable.ManagedEntityRowId
,PropertyTable.PropertyValue
,PropertyTable.DWLastModifiedDateTime
,PropertyTable.FromDateTime
,vManagedEntityType.ManagedEntityTypeGuid
,vManagedEntityType.ManagedEntityTypeDefaultName
,#ColumnPicker.PropertyGuid
FROM
(
#ColumnPicker
INNER JOIN
(Select
vManagedEntityProperty.ManagedEntityRowId
,DWLastModifiedDateTime
,FromDateTime
,T.PropertyXML.value('@Guid','uniqueidentifier') AS PropertyGuid
,T.PropertyXML.value('.','nvarchar(256)') AS PropertyValue
FROM
vManagedEntityProperty INNER JOIN
#Entity_Tree_2 ON vManagedEntityProperty.ManagedEntityRowId = #Entity_Tree_2.ManagedEntityRowId
CROSS APPLY PropertyXml.nodes('/Root/Property') AS T(PropertyXML)
WHERE DWLastModifiedDateTime > @StartDate AND DWLastModifiedDateTime <= @EndDate
)AS PropertyTable
ON PropertyTable.PropertyGuid = #ColumnPicker.PropertyGuid
INNER JOIN vManagedEntity ON PropertyTable.ManagedEntityRowId = vManagedEntity.ManagedEntityRowId
INNER JOIN vManagedEntityType ON vManagedEntityType.ManagedEntityTypeRowId = vManagedEntity.ManagedEntityTypeRowId
)
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
---------------------------------------------------------------------
--Select Filtered list of properties for selected objects
---------------------------------------------------------------------
SELECT
#PropertyList.TypeGuid
,#PropertyList.TypeName
,#PropertyList.PropertyGuid
,#PropertyList.DWLastModifiedDateTime
,#PropertyList.FromDateTime
,#PropertyList.PropertyValue
,#PropertyList.ManagedEntityRowId
,vManagedEntity.ManagedEntityDefaultName AS RelatedManagedEntityDefaultName
,vManagedEntity.ManagedEntityRowId AS RelatedManagedEntityRowId
,vManagedEntity.ManagedEntityGuid
,vManagedEntity.ManagedEntityDefaultName
,vManagedEntity.Path
,vManagementGroup.ManagementGroupDefaultName
,vManagementGroup.ManagementGroupGuid
,vManagedEntityType.ManagedEntityTypeDefaultName
,vManagedEntityTypeImage.Image
,vManagedEntityTypeProperty.PropertyDefaultName
FROM
(
#PropertyList
INNER JOIN vManagedEntity ON #PropertyList.ManagedEntityRowId = vManagedEntity.ManagedEntityRowId
INNER JOIN vManagementGroup ON vManagedEntity.ManagementGroupRowId = vManagementGroup.ManagementGroupRowId
INNER JOIN vManagedEntityType ON vManagedEntity.ManagedEntityTypeRowId = vManagedEntityType.ManagedEntityTypeRowId
INNER JOIN vManagedEntityTypeProperty ON vManagedEntityTypeProperty.PropertyGuid = #PropertyList.PropertyGuid
INNER JOIN vManagedEntityTypeImage ON vManagedEntity.ManagedEntityTypeRowId = vManagedEntityTypeImage.ManagedEntityTypeRowId AND
vManagedEntityTypeImage.ImageCategory = N'u16x16Icon'
INNER JOIN #ColumnPicker ON #ColumnPicker.PropertyGuid = #PropertyList.PropertyGuid
)
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
---------------------------------------------------------------------
--Error Handling & Cleanup code
---------------------------------------------------------------------
QuitError:
IF ((@Error = 0) AND (@ExecError <> 0)) SET @Error = @ExecError
DROP TABLE #PropertyList
DROP TABLE #ObjectList
DROP TABLE #RelationshipList_1
DROP TABLE #Entity_Tree_1
DROP TABLE #RelationshipList_2
DROP TABLE #Entity_Tree_2
DROP TABLE #ColumnPicker
RETURN @Error
END
GO
GRANT EXECUTE ON dbo.[Dell_Connections_Report_FirmwareamdDriverVerDataGet] TO OpsMgrReader
GO
IF EXISTS (SELECT * FROM sysobjects WHERE type = 'P' AND name = 'Dell_Connections_Report_FirmwareamdDriverVerDataGet')
BEGIN
DROP PROCEDURE dbo.[Dell_Connections_Report_FirmwareamdDriverVerDataGet]
END
GO
IF NOT EXISTS (SELECT * FROM sysobjects WHERE type = 'P' AND name = 'Dell_Connections_Report_FirmwareamdDriverVerDataGet')
BEGIN
EXECUTE ('CREATE PROCEDURE dbo.[Dell_Connections_Report_FirmwareamdDriverVerDataGet] AS RETURN 1')
END
GO
ALTER PROCEDURE dbo.[Dell_Connections_Report_FirmwareamdDriverVerDataGet]
@StartDate datetime,
@EndDate datetime,
@ObjectList xml,
@LanguageCode varchar(10)
AS
BEGIN
SET NOCOUNT ON
DECLARE @Error int
DECLARE @ExecError int
---------------------------------------------------------------------
--Create a list of Managed Entities
---------------------------------------------------------------------
CREATE TABLE #ObjectList (ManagedEntityRowId int)
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
INSERT INTO #ObjectList (ManagedEntityRowId)
EXECUTE @ExecError = [Dell_Connections_Report_ReportObjectListParse]
@ObjectList = @ObjectList,
@StartDate = @StartDate,
@EndDate = @EndDate,
@ContainmentLevelCount = 1,
@ContainmentStartLevel = 1
SET @Error = @@ERROR
IF @Error <> 0 OR @ExecError <> 0 GOTO QuitError
---------------------------------------------------------------------
--Create list of all relationships derived from 'DellServer.Hosts.DellStorage'
---------------------------------------------------------------------
CREATE TABLE #RelationshipList_1(RelationshipTypeRowId int)
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
INSERT #RelationshipList_1
SELECT RelationshipTypeRowId
FROM dbo.vRelationshipType
WHERE RelationshipTypeSystemName = 'DellServer.Hosts.DellStorage'
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
---------------------------------------------------------------------
--Create list of all entities above the selected objects in their respective hosting chains
---------------------------------------------------------------------
CREATE TABLE #Entity_Tree_1 (ManagedEntityRowId int)
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
INSERT #Entity_Tree_1
SELECT r.TargetManagedEntityRowId AS ManagedEntityRowId
FROM vRelationship AS r
JOIN #ObjectList AS ol ON r.SourceManagedEntityRowId = ol.ManagedEntityRowId
JOIN #RelationshipList_1 rl ON r.RelationshipTypeRowId = rl.RelationshipTypeRowId
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
---------------------------------------------------------------------
--Create list of all relationships derived from 'DellStorage.Hosts.DellStorageController'
---------------------------------------------------------------------
CREATE TABLE #RelationshipList_2(RelationshipTypeRowId int)
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
INSERT #RelationshipList_2
SELECT RelationshipTypeRowId
FROM dbo.vRelationshipType
WHERE RelationshipTypeSystemName = 'DellStorage.Hosts.DellStorageController'
CREATE TABLE #Entity_Tree_2(ManagedEntityRowId int not null)
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
INSERT #Entity_Tree_2
SELECT r.TargetManagedEntityRowId AS ManagedEntityRowId
FROM vRelationship AS r
JOIN #Entity_Tree_1 AS et ON r.SourceManagedEntityRowId = et.ManagedEntityRowId
JOIN #RelationshipList_2 rl ON r.RelationshipTypeRowId = rl.RelationshipTypeRowId
CREATE TABLE #ColumnPicker
(
PropertyGuid nvarchar(255)
)
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
INSERT INTO #ColumnPicker
SELECT distinct t.PropertyGuid AS PropertyGuid
FROM vManagedEntityTypeProperty AS t
JOIN vManagedEntity AS mt ON t.ManagedEntityTypeRowId = mt.ManagedEntityTypeRowId
JOIN #Entity_Tree_2 AS et ON mt.ManagedEntityRowId = et.ManagedEntityRowId
WHERE t.PropertySystemName='DriverVer' OR t.PropertySystemName='FirmwareVer'
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
---------------------------------------------------------------------
--Create List of Selected Properties and values for selected Objects
---------------------------------------------------------------------
CREATE TABLE #PropertyList
(
ManagedEntityRowId int
,PropertyValue nvarchar(256)
,DWLastModifiedDateTime datetime
,FromDateTime datetime
,TypeGuid uniqueidentifier
,TypeName nvarchar(256)
,PropertyGuid uniqueidentifier
)
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
INSERT INTO #PropertyList
SELECT
PropertyTable.ManagedEntityRowId
,PropertyTable.PropertyValue
,PropertyTable.DWLastModifiedDateTime
,PropertyTable.FromDateTime
,vManagedEntityType.ManagedEntityTypeGuid
,vManagedEntityType.ManagedEntityTypeDefaultName
,#ColumnPicker.PropertyGuid
FROM
(
#ColumnPicker
INNER JOIN
(Select
vManagedEntityProperty.ManagedEntityRowId
,DWLastModifiedDateTime
,FromDateTime
,T.PropertyXML.value('@Guid','uniqueidentifier') AS PropertyGuid
,T.PropertyXML.value('.','nvarchar(256)') AS PropertyValue
FROM
vManagedEntityProperty INNER JOIN
#Entity_Tree_2 ON vManagedEntityProperty.ManagedEntityRowId = #Entity_Tree_2.ManagedEntityRowId
CROSS APPLY PropertyXml.nodes('/Root/Property') AS T(PropertyXML)
WHERE DWLastModifiedDateTime > @StartDate AND DWLastModifiedDateTime <= @EndDate
)AS PropertyTable
ON PropertyTable.PropertyGuid = #ColumnPicker.PropertyGuid
INNER JOIN vManagedEntity ON PropertyTable.ManagedEntityRowId = vManagedEntity.ManagedEntityRowId
INNER JOIN vManagedEntityType ON vManagedEntityType.ManagedEntityTypeRowId = vManagedEntity.ManagedEntityTypeRowId
)
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
---------------------------------------------------------------------
--Select Filtered list of properties for selected objects
---------------------------------------------------------------------
SELECT
#PropertyList.TypeGuid
,#PropertyList.TypeName
,#PropertyList.PropertyGuid
,#PropertyList.DWLastModifiedDateTime
,#PropertyList.FromDateTime
,#PropertyList.PropertyValue
,#PropertyList.ManagedEntityRowId
,vManagedEntity.ManagedEntityDefaultName AS RelatedManagedEntityDefaultName
,vManagedEntity.ManagedEntityRowId AS RelatedManagedEntityRowId
,vManagedEntity.ManagedEntityGuid
,vManagedEntity.ManagedEntityDefaultName
,vManagedEntity.Path
,vManagementGroup.ManagementGroupDefaultName
,vManagementGroup.ManagementGroupGuid
,vManagedEntityType.ManagedEntityTypeDefaultName
,vManagedEntityTypeImage.Image
,vManagedEntityTypeProperty.PropertyDefaultName
FROM
(
#PropertyList
INNER JOIN vManagedEntity ON #PropertyList.ManagedEntityRowId = vManagedEntity.ManagedEntityRowId
INNER JOIN vManagementGroup ON vManagedEntity.ManagementGroupRowId = vManagementGroup.ManagementGroupRowId
INNER JOIN vManagedEntityType ON vManagedEntity.ManagedEntityTypeRowId = vManagedEntityType.ManagedEntityTypeRowId
INNER JOIN vManagedEntityTypeProperty ON vManagedEntityTypeProperty.PropertyGuid = #PropertyList.PropertyGuid
INNER JOIN vManagedEntityTypeImage ON vManagedEntity.ManagedEntityTypeRowId = vManagedEntityTypeImage.ManagedEntityTypeRowId AND
vManagedEntityTypeImage.ImageCategory = N'u16x16Icon'
INNER JOIN #ColumnPicker ON #ColumnPicker.PropertyGuid = #PropertyList.PropertyGuid
)
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
---------------------------------------------------------------------
--Error Handling & Cleanup code
---------------------------------------------------------------------
QuitError:
IF ((@Error = 0) AND (@ExecError <> 0)) SET @Error = @ExecError
DROP TABLE #PropertyList
DROP TABLE #ObjectList
DROP TABLE #RelationshipList_1
DROP TABLE #Entity_Tree_1
DROP TABLE #RelationshipList_2
DROP TABLE #Entity_Tree_2
DROP TABLE #ColumnPicker
RETURN @Error
END
GO
GRANT EXECUTE ON dbo.[Dell_Connections_Report_FirmwareamdDriverVerDataGet] TO OpsMgrReader
GO
IF NOT EXISTS (SELECT * FROM sysobjects WHERE type = 'P' AND name = 'Dell_Connections_Report_ESMLogDataGet')
BEGIN
EXECUTE ('CREATE PROCEDURE dbo.[Dell_Connections_Report_ESMLogDataGet] AS RETURN 1')
END
GO
ALTER PROCEDURE dbo.[Dell_Connections_Report_ESMLogDataGet]
@StartDate datetime,
@EndDate datetime,
@ObjectList xml,
@LanguageCode varchar(10)
AS
BEGIN
SET NOCOUNT ON
DECLARE @Error int
DECLARE @ExecError int
CREATE TABLE #ObjectList (ManagedEntityRowId int)
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
INSERT INTO #ObjectList (ManagedEntityRowId)
EXECUTE @ExecError = [Dell_Connections_Report_ReportObjectListParse]
@ObjectList = @ObjectList,
@StartDate = @StartDate,
@EndDate = @EndDate
SET @Error = @@ERROR
IF @Error <> 0 OR @ExecError <> 0 GOTO QuitError
/* -------------------------------------- */
SELECT
_vEvent.FirstOccuranceTime,
_vEvent.LastOccuranceTime,
vRule.RuleDefaultName,
vEventPublisher.EventPublisherName,
vEventDetail.EventData.value('/EventData[1]/DataItem[1]/Params[1]/Param[1]','nvarchar(1000)') AS RenderedDescription,
vManagedEntity.ManagedEntityDefaultName,
vManagedEntity.ManagedEntityGuid,
vManagedEntity.Path,
vManagedEntityType.ManagedEntityTypeDefaultName,
vManagementGroup.ManagementGroupDefaultName,
vManagementGroup.ManagementGroupGuid,
vManagedEntityTypeImage.Image
FROM
(
SELECT
Event.vEventRule.RuleRowId,
Event.vEventRule.ManagedEntityRowId,
EventPublisherRowId,
MIN(DateTime) AS FirstOccuranceTime,
MAX(DateTime) AS LastOccuranceTime,
Event.vEvent.EventOriginId
FROM
Event.vEvent INNER JOIN
Event.vEventRule ON Event.vEvent.EventOriginId = Event.vEventRule.EventOriginId INNER JOIN
#ObjectList ON Event.vEventRule.ManagedEntityRowId = #ObjectList.ManagedEntityRowId
WHERE
( Event.vEvent.DateTime >= @StartDate) AND (Event.vEvent.DateTime < @EndDate)
GROUP BY
RuleRowId,Event.vEventRule.ManagedEntityRowId,EventPublisherRowId,Event.vEvent.EventOriginId
)AS _vEvent INNER JOIN
vRule ON vRule.RuleRowId = _vEvent.RuleRowId AND vRule.RuleSystemName = 'Dell.Connections.ESMLog.Events' INNER JOIN
vEventPublisher ON vEventPublisher.EventPublisherRowId = _vEvent.EventPublisherRowId INNER JOIN
Event.vEventDetail ON Event.vEventDetail.EventOriginId = _vEvent.EventOriginId INNER JOIN
vManagedEntity ON _vEvent.ManagedEntityRowId = vManagedEntity.ManagedEntityRowId INNER JOIN
vManagedEntityType ON vManagedEntityType.ManagedEntityTypeRowId = vManagedEntity.ManagedEntityTypeRowId INNER JOIN
vManagementGroup ON vManagementGroup.ManagementGroupRowId = vManagedEntity.ManagementGroupRowId LEFT OUTER JOIN
vManagedEntityTypeImage ON vManagedEntityTypeImage.ManagedEntityTypeRowId = vManagedEntity.ManagedEntityTypeRowId
AND vManagedEntityTypeImage.ImageCategory ='u16x16Icon'
/* --------------------------------------- */
SET @Error = @@ERROR
QuitError:
DROP TABLE #ObjectList
RETURN @Error
END
GO
GRANT EXECUTE ON dbo.[Dell_Connections_Report_ESMLogDataGet] TO OpsMgrReader
GO
IF EXISTS (SELECT * FROM sysobjects WHERE type = 'P' AND name = 'Dell_Connections_Report_ESMLogDataGet')
BEGIN
DROP PROCEDURE dbo.[Dell_Connections_Report_ESMLogDataGet]
END
GO
IF NOT EXISTS (SELECT * FROM sysobjects WHERE type = 'P' AND name = 'Dell_Connections_Report_ESMLogDataGet')
BEGIN
EXECUTE ('CREATE PROCEDURE dbo.[Dell_Connections_Report_ESMLogDataGet] AS RETURN 1')
END
GO
ALTER PROCEDURE dbo.[Dell_Connections_Report_ESMLogDataGet]
@StartDate datetime,
@EndDate datetime,
@ObjectList xml,
@LanguageCode varchar(10)
AS
BEGIN
SET NOCOUNT ON
DECLARE @Error int
DECLARE @ExecError int
CREATE TABLE #ObjectList (ManagedEntityRowId int)
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
INSERT INTO #ObjectList (ManagedEntityRowId)
EXECUTE @ExecError = [Dell_Connections_Report_ReportObjectListParse]
@ObjectList = @ObjectList,
@StartDate = @StartDate,
@EndDate = @EndDate
SET @Error = @@ERROR
IF @Error <> 0 OR @ExecError <> 0 GOTO QuitError
/* -------------------------------------- */
SELECT
_vEvent.FirstOccuranceTime,
_vEvent.LastOccuranceTime,
vRule.RuleDefaultName,
vEventPublisher.EventPublisherName,
vEventDetail.EventData.value('/EventData[1]/DataItem[1]/Params[1]/Param[1]','nvarchar(1000)') AS RenderedDescription,
vManagedEntity.ManagedEntityDefaultName,
vManagedEntity.ManagedEntityGuid,
vManagedEntity.Path,
vManagedEntityType.ManagedEntityTypeDefaultName,
vManagementGroup.ManagementGroupDefaultName,
vManagementGroup.ManagementGroupGuid,
vManagedEntityTypeImage.Image
FROM
(
SELECT
Event.vEventRule.RuleRowId,
Event.vEventRule.ManagedEntityRowId,
EventPublisherRowId,
MIN(DateTime) AS FirstOccuranceTime,
MAX(DateTime) AS LastOccuranceTime,
Event.vEvent.EventOriginId
FROM
Event.vEvent INNER JOIN
Event.vEventRule ON Event.vEvent.EventOriginId = Event.vEventRule.EventOriginId INNER JOIN
#ObjectList ON Event.vEventRule.ManagedEntityRowId = #ObjectList.ManagedEntityRowId
WHERE
( Event.vEvent.DateTime >= @StartDate) AND (Event.vEvent.DateTime < @EndDate)
GROUP BY
RuleRowId,Event.vEventRule.ManagedEntityRowId,EventPublisherRowId,Event.vEvent.EventOriginId
)AS _vEvent INNER JOIN
vRule ON vRule.RuleRowId = _vEvent.RuleRowId AND vRule.RuleSystemName = 'Dell.Connections.ESMLog.Events' INNER JOIN
vEventPublisher ON vEventPublisher.EventPublisherRowId = _vEvent.EventPublisherRowId INNER JOIN
Event.vEventDetail ON Event.vEventDetail.EventOriginId = _vEvent.EventOriginId INNER JOIN
vManagedEntity ON _vEvent.ManagedEntityRowId = vManagedEntity.ManagedEntityRowId INNER JOIN
vManagedEntityType ON vManagedEntityType.ManagedEntityTypeRowId = vManagedEntity.ManagedEntityTypeRowId INNER JOIN
vManagementGroup ON vManagementGroup.ManagementGroupRowId = vManagedEntity.ManagementGroupRowId LEFT OUTER JOIN
vManagedEntityTypeImage ON vManagedEntityTypeImage.ManagedEntityTypeRowId = vManagedEntity.ManagedEntityTypeRowId
AND vManagedEntityTypeImage.ImageCategory ='u16x16Icon'
/* --------------------------------------- */
SET @Error = @@ERROR
QuitError:
DROP TABLE #ObjectList
RETURN @Error
END
GO
GRANT EXECUTE ON dbo.[Dell_Connections_Report_ESMLogDataGet] TO OpsMgrReader
GO
IF NOT EXISTS (SELECT * FROM sysobjects WHERE type = 'P' AND name = 'Dell_Connections_Report_BMCLogDataGet')
BEGIN
EXECUTE ('CREATE PROCEDURE dbo.[Dell_Connections_Report_BMCLogDataGet] AS RETURN 1')
END
GO
ALTER PROCEDURE dbo.[Dell_Connections_Report_BMCLogDataGet]
@StartDate datetime,
@EndDate datetime,
@LanguageCode varchar(10)
AS
BEGIN
SET NOCOUNT ON
DECLARE @Error int
DECLARE @ExecError int
IF @Error <> 0 GOTO QuitError
/* -------------------------------------- */
SELECT
_vEvent.FirstOccuranceTime,
_vEvent.LastOccuranceTime,
vRule.RuleDefaultName,
vEventPublisher.EventPublisherName,
vEventDetail.EventData.value('/EventData[1]/DataItem[1]/Params[1]/Param[1]','nvarchar(1000)') AS RenderedDescription,
vManagedEntity.ManagedEntityDefaultName,
vManagedEntity.ManagedEntityGuid,
vManagedEntity.Path,
vManagedEntityType.ManagedEntityTypeDefaultName,
vManagementGroup.ManagementGroupDefaultName,
vManagementGroup.ManagementGroupGuid,
vManagedEntityTypeImage.Image
FROM
(
SELECT
Event.vEventRule.RuleRowId,
Event.vEventRule.ManagedEntityRowId,
EventPublisherRowId,
MIN(DateTime) AS FirstOccuranceTime,
MAX(DateTime) AS LastOccuranceTime,
Event.vEvent.EventOriginId
FROM
Event.vEvent INNER JOIN
Event.vEventRule ON Event.vEvent.EventOriginId = Event.vEventRule.EventOriginId
WHERE
( Event.vEvent.DateTime >= @StartDate) AND (Event.vEvent.DateTime < @EndDate)
GROUP BY
RuleRowId,Event.vEventRule.ManagedEntityRowId,EventPublisherRowId,Event.vEvent.EventOriginId
)AS _vEvent INNER JOIN
vRule ON vRule.RuleRowId = _vEvent.RuleRowId AND vRule.RuleSystemName = 'Dell.Connections.BMCLog.Events' INNER JOIN
vEventPublisher ON vEventPublisher.EventPublisherRowId = _vEvent.EventPublisherRowId INNER JOIN
Event.vEventDetail ON Event.vEventDetail.EventOriginId = _vEvent.EventOriginId INNER JOIN
vManagedEntity ON _vEvent.ManagedEntityRowId = vManagedEntity.ManagedEntityRowId INNER JOIN
vManagedEntityType ON vManagedEntityType.ManagedEntityTypeRowId = vManagedEntity.ManagedEntityTypeRowId INNER JOIN
vManagementGroup ON vManagementGroup.ManagementGroupRowId = vManagedEntity.ManagementGroupRowId LEFT OUTER JOIN
vManagedEntityTypeImage ON vManagedEntityTypeImage.ManagedEntityTypeRowId = vManagedEntity.ManagedEntityTypeRowId
AND vManagedEntityTypeImage.ImageCategory ='u16x16Icon'
/* --------------------------------------- */
SET @Error = @@ERROR
QuitError:
RETURN @Error
END
GO
GRANT EXECUTE ON dbo.[Dell_Connections_Report_BMCLogDataGet] TO OpsMgrReader
GO
IF EXISTS (SELECT * FROM sysobjects WHERE type = 'P' AND name = 'Dell_Connections_Report_BMCLogDataGet')
BEGIN
DROP PROCEDURE dbo.[Dell_Connections_Report_BMCLogDataGet]
END
GO
IF NOT EXISTS (SELECT * FROM sysobjects WHERE type = 'P' AND name = 'Dell_Connections_Report_BMCLogDataGet')
BEGIN
EXECUTE ('CREATE PROCEDURE dbo.[Dell_Connections_Report_BMCLogDataGet] AS RETURN 1')
END
GO
ALTER PROCEDURE dbo.[Dell_Connections_Report_BMCLogDataGet]
@StartDate datetime,
@EndDate datetime,
@LanguageCode varchar(10)
AS
BEGIN
SET NOCOUNT ON
DECLARE @Error int
DECLARE @ExecError int
IF @Error <> 0 GOTO QuitError
/* -------------------------------------- */
SELECT
_vEvent.FirstOccuranceTime,
_vEvent.LastOccuranceTime,
vRule.RuleDefaultName,
vEventPublisher.EventPublisherName,
vEventDetail.EventData.value('/EventData[1]/DataItem[1]/Params[1]/Param[1]','nvarchar(1000)') AS RenderedDescription,
vManagedEntity.ManagedEntityDefaultName,
vManagedEntity.ManagedEntityGuid,
vManagedEntity.Path,
vManagedEntityType.ManagedEntityTypeDefaultName,
vManagementGroup.ManagementGroupDefaultName,
vManagementGroup.ManagementGroupGuid,
vManagedEntityTypeImage.Image
FROM
(
SELECT
Event.vEventRule.RuleRowId,
Event.vEventRule.ManagedEntityRowId,
EventPublisherRowId,
MIN(DateTime) AS FirstOccuranceTime,
MAX(DateTime) AS LastOccuranceTime,
Event.vEvent.EventOriginId
FROM
Event.vEvent INNER JOIN
Event.vEventRule ON Event.vEvent.EventOriginId = Event.vEventRule.EventOriginId
WHERE
( Event.vEvent.DateTime >= @StartDate) AND (Event.vEvent.DateTime < @EndDate)
GROUP BY
RuleRowId,Event.vEventRule.ManagedEntityRowId,EventPublisherRowId,Event.vEvent.EventOriginId
)AS _vEvent INNER JOIN
vRule ON vRule.RuleRowId = _vEvent.RuleRowId AND vRule.RuleSystemName = 'Dell.Connections.BMCLog.Events' INNER JOIN
vEventPublisher ON vEventPublisher.EventPublisherRowId = _vEvent.EventPublisherRowId INNER JOIN
Event.vEventDetail ON Event.vEventDetail.EventOriginId = _vEvent.EventOriginId INNER JOIN
vManagedEntity ON _vEvent.ManagedEntityRowId = vManagedEntity.ManagedEntityRowId INNER JOIN
vManagedEntityType ON vManagedEntityType.ManagedEntityTypeRowId = vManagedEntity.ManagedEntityTypeRowId INNER JOIN
vManagementGroup ON vManagementGroup.ManagementGroupRowId = vManagedEntity.ManagementGroupRowId LEFT OUTER JOIN
vManagedEntityTypeImage ON vManagedEntityTypeImage.ManagedEntityTypeRowId = vManagedEntity.ManagedEntityTypeRowId
AND vManagedEntityTypeImage.ImageCategory ='u16x16Icon'
/* --------------------------------------- */
SET @Error = @@ERROR
QuitError:
RETURN @Error
END
GO
GRANT EXECUTE ON dbo.[Dell_Connections_Report_BMCLogDataGet] TO OpsMgrReader
GO
IF NOT EXISTS (SELECT * FROM sysobjects WHERE type = 'P' AND name = 'Dell_Connections_Report_BIOSInfoDataGet')
BEGIN
EXECUTE ('CREATE PROCEDURE dbo.[Dell_Connections_Report_BIOSInfoDataGet] AS RETURN 1')
END
GO
ALTER PROCEDURE dbo.[Dell_Connections_Report_BIOSInfoDataGet]
@StartDate datetime,
@EndDate datetime,
@ObjectList xml,
@Properties xml,
@LanguageCode varchar(10)
AS
BEGIN
SET NOCOUNT ON
DECLARE @Error int
DECLARE @ExecError int
---------------------------------------------------------------------
--Create a list of Managed Entities
---------------------------------------------------------------------
CREATE TABLE #ObjectList (ManagedEntityRowId int)
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
INSERT INTO #ObjectList (ManagedEntityRowId)
EXECUTE @ExecError = [Dell_Connections_Report_ReportObjectListParse]
@ObjectList = @ObjectList,
@StartDate = @StartDate,
@EndDate = @EndDate,
@ContainmentLevelCount = 1,
@ContainmentStartLevel = 1
SET @Error = @@ERROR
IF @Error <> 0 OR @ExecError <> 0 GOTO QuitError
---------------------------------------------------------------------
--Create list of all relationships derived from 'DellServer.Hosts.DellServerBIOS'
---------------------------------------------------------------------
CREATE TABLE #RelationshipList_BIOS(RelationshipTypeRowId int)
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
INSERT #RelationshipList_BIOS
SELECT RelationshipTypeRowId
FROM dbo.vRelationshipType
WHERE RelationshipTypeSystemName = 'DellServer.Hosts.DellServerBIOS'
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
---------------------------------------------------------------------
--Create list of all entities above the selected objects in their respective hosting chains
---------------------------------------------------------------------
CREATE TABLE #ObjectList_BIOS (ManagedEntityRowId int)
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
INSERT #ObjectList_BIOS
SELECT r.TargetManagedEntityRowId AS ManagedEntityRowId
FROM vRelationship AS r
JOIN #ObjectList AS ol ON r.SourceManagedEntityRowId = ol.ManagedEntityRowId
JOIN #RelationshipList_BIOS rl ON r.RelationshipTypeRowId = rl.RelationshipTypeRowId
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
---------------------------------------------------------------------
--Parse Column Picker XML
---------------------------------------------------------------------
CREATE TABLE #ColumnPicker (PropertyGuid nvarchar(255))
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
INSERT INTO #ColumnPicker
SELECT PropertiesList.Properties.value('.','nvarchar(255)') AS PropertyGuid
FROM @Properties.nodes('/Data/Value') AS PropertiesList(Properties)
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
---------------------------------------------------------------------
--Create List of Selected Properties and values for selected Objects
---------------------------------------------------------------------
CREATE TABLE #PropertyList
(
ManagedEntityRowId int
,PropertyValue nvarchar(256)
,DWLastModifiedDateTime datetime
,FromDateTime datetime
,TypeGuid uniqueidentifier
,TypeName nvarchar(256)
,PropertyGuid uniqueidentifier
)
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
INSERT INTO #PropertyList
SELECT
PropertyTable.ManagedEntityRowId
,PropertyTable.PropertyValue
,PropertyTable.DWLastModifiedDateTime
,PropertyTable.FromDateTime
,vManagedEntityType.ManagedEntityTypeGuid
,vManagedEntityType.ManagedEntityTypeDefaultName
,#ColumnPicker.PropertyGuid
FROM
(
#ColumnPicker
INNER JOIN
(Select
vManagedEntityProperty.ManagedEntityRowId
,DWLastModifiedDateTime
,FromDateTime
,T.PropertyXML.value('@Guid','uniqueidentifier') AS PropertyGuid
,T.PropertyXML.value('.','nvarchar(256)') AS PropertyValue
FROM
vManagedEntityProperty INNER JOIN
#ObjectList_BIOS ON vManagedEntityProperty.ManagedEntityRowId = #ObjectList_BIOS.ManagedEntityRowId
CROSS APPLY PropertyXml.nodes('/Root/Property') AS T(PropertyXML)
WHERE DWLastModifiedDateTime > @StartDate AND DWLastModifiedDateTime <= @EndDate
)AS PropertyTable
ON PropertyTable.PropertyGuid = #ColumnPicker.PropertyGuid
INNER JOIN vManagedEntity ON PropertyTable.ManagedEntityRowId = vManagedEntity.ManagedEntityRowId
INNER JOIN vManagedEntityType ON vManagedEntityType.ManagedEntityTypeRowId = vManagedEntity.ManagedEntityTypeRowId
)
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
---------------------------------------------------------------------
--Select Filtered list of properties for selected objects
---------------------------------------------------------------------
SELECT
#PropertyList.TypeGuid
,#PropertyList.TypeName
,#PropertyList.PropertyGuid
,#PropertyList.DWLastModifiedDateTime
,#PropertyList.FromDateTime
,#PropertyList.ManagedEntityRowId
,#PropertyList.PropertyValue
,vManagedEntity.ManagedEntityDefaultName AS RelatedManagedEntityDefaultName
,vManagedEntity.ManagedEntityRowId AS RelatedManagedEntityRowId
,vManagedEntity.ManagedEntityGuid
,vManagedEntity.ManagedEntityDefaultName
,vManagedEntity.Path
,vManagementGroup.ManagementGroupDefaultName
,vManagementGroup.ManagementGroupGuid
,vManagedEntityType.ManagedEntityTypeDefaultName
,vManagedEntityTypeImage.Image
,vManagedEntityTypeProperty.PropertyDefaultName
FROM
#PropertyList
INNER JOIN vManagedEntity ON #PropertyList.ManagedEntityRowId = vManagedEntity.ManagedEntityRowId
INNER JOIN vManagementGroup ON vManagedEntity.ManagementGroupRowId = vManagementGroup.ManagementGroupRowId
INNER JOIN vManagedEntityType ON vManagedEntity.ManagedEntityTypeRowId = vManagedEntityType.ManagedEntityTypeRowId
INNER JOIN vManagedEntityTypeProperty ON vManagedEntityTypeProperty.PropertyGuid = #PropertyList.PropertyGuid
INNER JOIN vManagedEntityTypeImage ON vManagedEntity.ManagedEntityTypeRowId = vManagedEntityTypeImage.ManagedEntityTypeRowId AND
vManagedEntityTypeImage.ImageCategory = N'u16x16Icon'
INNER JOIN #ColumnPicker ON #ColumnPicker.PropertyGuid = #PropertyList.PropertyGuid
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
---------------------------------------------------------------------
--Error Handling & Cleanup code
---------------------------------------------------------------------
QuitError:
IF ((@Error = 0) AND (@ExecError <> 0)) SET @Error = @ExecError
DROP TABLE #PropertyList
DROP TABLE #ObjectList
DROP TABLE #ColumnPicker
DROP TABLE #RelationshipList_BIOS
DROP TABLE #ObjectList_BIOS
RETURN @Error
END
GO
GRANT EXECUTE ON dbo.[Dell_Connections_Report_BIOSInfoDataGet] TO OpsMgrReader
GO
IF EXISTS (SELECT * FROM sysobjects WHERE type = 'P' AND name = 'Dell_Connections_Report_BIOSInfoDataGet')
BEGIN
DROP PROCEDURE dbo.[Dell_Connections_Report_BIOSInfoDataGet]
END
GO
IF NOT EXISTS (SELECT * FROM sysobjects WHERE type = 'P' AND name = 'Dell_Connections_Report_BIOSInfoDataGet')
BEGIN
EXECUTE ('CREATE PROCEDURE dbo.[Dell_Connections_Report_BIOSInfoDataGet] AS RETURN 1')
END
GO
ALTER PROCEDURE dbo.[Dell_Connections_Report_BIOSInfoDataGet]
@StartDate datetime,
@EndDate datetime,
@ObjectList xml,
@Properties xml,
@LanguageCode varchar(10)
AS
BEGIN
SET NOCOUNT ON
DECLARE @Error int
DECLARE @ExecError int
---------------------------------------------------------------------
--Create a list of Managed Entities
---------------------------------------------------------------------
CREATE TABLE #ObjectList (ManagedEntityRowId int)
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
INSERT INTO #ObjectList (ManagedEntityRowId)
EXECUTE @ExecError = [Dell_Connections_Report_ReportObjectListParse]
@ObjectList = @ObjectList,
@StartDate = @StartDate,
@EndDate = @EndDate,
@ContainmentLevelCount = 1,
@ContainmentStartLevel = 1
SET @Error = @@ERROR
IF @Error <> 0 OR @ExecError <> 0 GOTO QuitError
---------------------------------------------------------------------
--Create list of all relationships derived from 'DellServer.Hosts.DellServerBIOS'
---------------------------------------------------------------------
CREATE TABLE #RelationshipList_BIOS(RelationshipTypeRowId int)
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
INSERT #RelationshipList_BIOS
SELECT RelationshipTypeRowId
FROM dbo.vRelationshipType
WHERE RelationshipTypeSystemName = 'DellServer.Hosts.DellServerBIOS'
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
---------------------------------------------------------------------
--Create list of all entities above the selected objects in their respective hosting chains
---------------------------------------------------------------------
CREATE TABLE #ObjectList_BIOS (ManagedEntityRowId int)
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
INSERT #ObjectList_BIOS
SELECT r.TargetManagedEntityRowId AS ManagedEntityRowId
FROM vRelationship AS r
JOIN #ObjectList AS ol ON r.SourceManagedEntityRowId = ol.ManagedEntityRowId
JOIN #RelationshipList_BIOS rl ON r.RelationshipTypeRowId = rl.RelationshipTypeRowId
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
---------------------------------------------------------------------
--Create list of all relationships derived from 'System.Hosting'
-- Assumes a MAX depth of 9999
---------------------------------------------------------------------
CREATE TABLE #RelationshipList(RelationshipTypeRowId int)
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
INSERT #RelationshipList
SELECT RelationshipTypeRowId
from RelationshipDerivedTypeHierarchy
(
(
SELECT RelationshipTypeRowId
FROM dbo.vRelationshipType
WHERE RelationshipTypeSystemName = 'System.Hosting'
)
,0
)
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
---------------------------------------------------------------------
--Create list of all entities above the selected objects in their respective hosting chains
---------------------------------------------------------------------
CREATE TABLE #Entity_Tree (ManagedEntityRowId int ,GroupManagedEntityRowId int,Level int )
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
INSERT #Entity_Tree
SELECT ManagedEntityRowId AS ManagedEntityRowId
,ManagedEntityRowId AS GroupManagedEntityRowId
,0 AS Level
FROM #ObjectList_BIOS
INSERT #Entity_Tree
SELECT r.SourceManagedEntityRowId
,et.GroupManagedEntityRowId
,et.Level +1
FROM vRelationship AS r
JOIN #Entity_Tree AS et
ON r.TargetManagedEntityRowId = et.ManagedEntityRowId
AND
RelationshipTypeRowId IN (SELECT * FROM #RelationshipList)
AND et.Level < 9999
WHERE r.SourceManagedEntityRowId NOT IN (SELECT ManagedEntityRowId FROM #Entity_Tree)
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
---------------------------------------------------------------------
--Parse Column Picker XML
---------------------------------------------------------------------
CREATE TABLE #ColumnPicker (PropertyGuid nvarchar(255))
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
INSERT INTO #ColumnPicker
SELECT PropertiesList.Properties.value('.','nvarchar(255)') AS PropertyGuid
FROM @Properties.nodes('/Data/Value') AS PropertiesList(Properties)
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
---------------------------------------------------------------------
--Create List of Selected Properties and values for selected Objects
---------------------------------------------------------------------
CREATE TABLE #PropertyList
(
ManagedEntityRowId int
,GroupManagedEntityRowId int
,Level int
,PropertyValue nvarchar(256)
,DWLastModifiedDateTime datetime
,FromDateTime datetime
,TypeGuid uniqueidentifier
,TypeName nvarchar(256)
,PropertyGuid uniqueidentifier
)
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
INSERT INTO #PropertyList
SELECT
PropertyTable.ManagedEntityRowId
,PropertyTable.GroupManagedEntityRowId
,PropertyTable.Level
,PropertyTable.PropertyValue
,PropertyTable.DWLastModifiedDateTime
,PropertyTable.FromDateTime
,vManagedEntityType.ManagedEntityTypeGuid
,vManagedEntityType.ManagedEntityTypeDefaultName
,#ColumnPicker.PropertyGuid
FROM
(
#ColumnPicker
INNER JOIN
(Select
vManagedEntityProperty.ManagedEntityRowId
,#Entity_Tree.GroupManagedEntityRowId
,#Entity_Tree.Level
,DWLastModifiedDateTime
,FromDateTime
,T.PropertyXML.value('@Guid','uniqueidentifier') AS PropertyGuid
,T.PropertyXML.value('.','nvarchar(256)') AS PropertyValue
FROM
vManagedEntityProperty INNER JOIN
#Entity_Tree ON vManagedEntityProperty.ManagedEntityRowId = #Entity_Tree.ManagedEntityRowId
CROSS APPLY PropertyXml.nodes('/Root/Property') AS T(PropertyXML)
WHERE DWLastModifiedDateTime > @StartDate AND DWLastModifiedDateTime <= @EndDate
)AS PropertyTable
ON PropertyTable.PropertyGuid = #ColumnPicker.PropertyGuid
INNER JOIN vManagedEntity ON PropertyTable.ManagedEntityRowId = vManagedEntity.ManagedEntityRowId
INNER JOIN vManagedEntityType ON vManagedEntityType.ManagedEntityTypeRowId = vManagedEntity.ManagedEntityTypeRowId
)
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
---------------------------------------------------------------------
--Select Filtered list of properties for selected objects
---------------------------------------------------------------------
SELECT
#PropertyList.TypeGuid
,#PropertyList.TypeName
,#PropertyList.PropertyGuid
,#PropertyList.DWLastModifiedDateTime
,#PropertyList.FromDateTime
,#PropertyList.GroupManagedEntityRowId AS ManagedEntityRowId
,#PropertyList.PropertyValue
,vManagedEntity.ManagedEntityDefaultName AS RelatedManagedEntityDefaultName
,vManagedEntity.ManagedEntityRowId AS RelatedManagedEntityRowId
,GroupEntity.ManagedEntityGuid
,GroupEntity.ManagedEntityDefaultName
,GroupEntity.Path
,vManagementGroup.ManagementGroupDefaultName
,vManagementGroup.ManagementGroupGuid
,vManagedEntityType.ManagedEntityTypeDefaultName
,vManagedEntityTypeImage.Image
,vManagedEntityTypeProperty.PropertyDefaultName
FROM
#PropertyList
INNER JOIN
-- PropertyMinTable filters #PropertyList to only the
-- first occurance of a property in a hosting chain.
(
Select
GroupManagedEntityRowId
,MIN(Level) as Level
,PropertyGuid
From #PropertyList
Group By
GroupManagedEntityRowId
,PropertyGuid
)As PropertyMinTable
ON
#PropertyList.PropertyGuid = PropertyMinTable.PropertyGuid
AND #PropertyList.Level = PropertyMinTable.Level
AND #PropertyList.GroupManagedEntityRowId = PropertyMinTable.GroupManagedEntityRowId
INNER JOIN vManagedEntity ON #PropertyList.ManagedEntityRowId = vManagedEntity.ManagedEntityRowId
INNER JOIN vManagedEntity AS GroupEntity ON #PropertyList.GroupManagedEntityRowId = GroupEntity.ManagedEntityRowId
INNER JOIN vManagementGroup ON GroupEntity.ManagementGroupRowId = vManagementGroup.ManagementGroupRowId
INNER JOIN vManagedEntityType ON GroupEntity.ManagedEntityTypeRowId = vManagedEntityType.ManagedEntityTypeRowId
INNER JOIN vManagedEntityTypeProperty ON vManagedEntityTypeProperty.PropertyGuid = #PropertyList.PropertyGuid
INNER JOIN vManagedEntityTypeImage ON GroupEntity.ManagedEntityTypeRowId = vManagedEntityTypeImage.ManagedEntityTypeRowId AND
vManagedEntityTypeImage.ImageCategory = N'u16x16Icon'
INNER JOIN #ColumnPicker ON #ColumnPicker.PropertyGuid = #PropertyList.PropertyGuid
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
---------------------------------------------------------------------
--Error Handling & Cleanup code
---------------------------------------------------------------------
QuitError:
IF ((@Error = 0) AND (@ExecError <> 0)) SET @Error = @ExecError
DROP TABLE #PropertyList
DROP TABLE #ObjectList
DROP TABLE #RelationshipList
DROP TABLE #Entity_Tree
DROP TABLE #ColumnPicker
DROP TABLE #RelationshipList_BIOS
DROP TABLE #ObjectList_BIOS
RETURN @Error
END
GO
GRANT EXECUTE ON dbo.[Dell_Connections_Report_BIOSInfoDataGet] TO OpsMgrReader
GO
IF NOT EXISTS (SELECT * FROM sysobjects WHERE type = 'P' AND name = 'Dell_Connections_Report_RAIDConfigDataGet')
BEGIN
EXECUTE ('CREATE PROCEDURE dbo.[Dell_Connections_Report_RAIDConfigDataGet] AS RETURN 1')
END
GO
ALTER PROCEDURE dbo.[Dell_Connections_Report_RAIDConfigDataGet]
@StartDate datetime,
@EndDate datetime,
@ObjectList xml,
@Properties xml,
@LanguageCode varchar(10)
AS
BEGIN
SET NOCOUNT ON
DECLARE @Error int
DECLARE @ExecError int
---------------------------------------------------------------------
--Create a list of Managed Entities
---------------------------------------------------------------------
CREATE TABLE #ObjectList (ManagedEntityRowId int)
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
INSERT INTO #ObjectList (ManagedEntityRowId)
EXECUTE @ExecError = [Dell_Connections_Report_ReportObjectListParse]
@ObjectList = @ObjectList,
@StartDate = @StartDate,
@EndDate = @EndDate,
@ContainmentLevelCount = 1,
@ContainmentStartLevel = 1
SET @Error = @@ERROR
IF @Error <> 0 OR @ExecError <> 0 GOTO QuitError
---------------------------------------------------------------------
--Create list of all relationships derived from 'DellServer.Hosts.DellStorage'
---------------------------------------------------------------------
CREATE TABLE #RelationshipList_1(RelationshipTypeRowId int)
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
INSERT #RelationshipList_1
SELECT RelationshipTypeRowId
FROM dbo.vRelationshipType
WHERE RelationshipTypeSystemName = 'DellServer.Hosts.DellStorage'
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
---------------------------------------------------------------------
--Create list of all entities above the selected objects in their respective hosting chains
---------------------------------------------------------------------
CREATE TABLE #Entity_Tree_1 (ManagedEntityRowId int)
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
INSERT #Entity_Tree_1
SELECT r.TargetManagedEntityRowId AS ManagedEntityRowId
FROM vRelationship AS r
JOIN #ObjectList AS ol ON r.SourceManagedEntityRowId = ol.ManagedEntityRowId
JOIN #RelationshipList_1 rl ON r.RelationshipTypeRowId = rl.RelationshipTypeRowId
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
---------------------------------------------------------------------
--Create list of all relationships derived from 'DellStorage.Hosts.DellStorageController'
---------------------------------------------------------------------
CREATE TABLE #RelationshipList_2(RelationshipTypeRowId int)
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
INSERT #RelationshipList_2
SELECT RelationshipTypeRowId
FROM dbo.vRelationshipType
WHERE RelationshipTypeSystemName = 'DellStorage.Hosts.DellStorageController'
CREATE TABLE #Entity_Tree_2(ManagedEntityRowId int not null)
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
INSERT #Entity_Tree_2
SELECT r.TargetManagedEntityRowId AS ManagedEntityRowId
FROM vRelationship AS r
JOIN #Entity_Tree_1 AS et ON r.SourceManagedEntityRowId = et.ManagedEntityRowId
JOIN #RelationshipList_2 rl ON r.RelationshipTypeRowId = rl.RelationshipTypeRowId
---------------------------------------------------------------------
--Create list of all relationships derived from 'DellStorageController.Hosts.ControllerVirtualDisk'
---------------------------------------------------------------------
CREATE TABLE #RelationshipList_RAID(RelationshipTypeRowId int)
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
INSERT #RelationshipList_RAID
SELECT RelationshipTypeRowId
FROM dbo.vRelationshipType
WHERE RelationshipTypeSystemName = 'DellStorageController.Hosts.ControllerVirtualDisk'
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
---------------------------------------------------------------------
--Create list of all entities above the selected objects in their respective hosting chains
---------------------------------------------------------------------
CREATE TABLE #ObjectList_RAID (ManagedEntityRowId int)
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
INSERT #ObjectList_RAID
SELECT r.TargetManagedEntityRowId AS ManagedEntityRowId
FROM vRelationship AS r
JOIN #Entity_Tree_2 AS ol ON r.SourceManagedEntityRowId = ol.ManagedEntityRowId
JOIN #RelationshipList_RAID rl ON r.RelationshipTypeRowId = rl.RelationshipTypeRowId
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
---------------------------------------------------------------------
--Parse Column Picker XML
---------------------------------------------------------------------
CREATE TABLE #ColumnPicker (PropertyGuid nvarchar(255))
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
INSERT INTO #ColumnPicker
SELECT PropertiesList.Properties.value('.','nvarchar(255)') AS PropertyGuid
FROM @Properties.nodes('/Data/Value') AS PropertiesList(Properties)
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
---------------------------------------------------------------------
--Create List of Selected Properties and values for selected Objects
---------------------------------------------------------------------
CREATE TABLE #PropertyList
(
ManagedEntityRowId int
,PropertyValue nvarchar(256)
,DWLastModifiedDateTime datetime
,FromDateTime datetime
,TypeGuid uniqueidentifier
,TypeName nvarchar(256)
,PropertyGuid uniqueidentifier
)
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
INSERT INTO #PropertyList
SELECT
PropertyTable.ManagedEntityRowId
,PropertyTable.PropertyValue
,PropertyTable.DWLastModifiedDateTime
,PropertyTable.FromDateTime
,vManagedEntityType.ManagedEntityTypeGuid
,vManagedEntityType.ManagedEntityTypeDefaultName
,#ColumnPicker.PropertyGuid
FROM
(
#ColumnPicker
INNER JOIN
(Select
vManagedEntityProperty.ManagedEntityRowId
,DWLastModifiedDateTime
,FromDateTime
,T.PropertyXML.value('@Guid','uniqueidentifier') AS PropertyGuid
,T.PropertyXML.value('.','nvarchar(256)') AS PropertyValue
FROM
vManagedEntityProperty INNER JOIN
#ObjectList_RAID ON vManagedEntityProperty.ManagedEntityRowId = #ObjectList_RAID.ManagedEntityRowId
CROSS APPLY PropertyXml.nodes('/Root/Property') AS T(PropertyXML)
WHERE DWLastModifiedDateTime > @StartDate AND DWLastModifiedDateTime <= @EndDate
)AS PropertyTable
ON PropertyTable.PropertyGuid = #ColumnPicker.PropertyGuid
INNER JOIN vManagedEntity ON PropertyTable.ManagedEntityRowId = vManagedEntity.ManagedEntityRowId
INNER JOIN vManagedEntityType ON vManagedEntityType.ManagedEntityTypeRowId = vManagedEntity.ManagedEntityTypeRowId
)
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
---------------------------------------------------------------------
--Select Filtered list of properties for selected objects
---------------------------------------------------------------------
SELECT
#PropertyList.TypeGuid
,#PropertyList.TypeName
,#PropertyList.PropertyGuid
,#PropertyList.DWLastModifiedDateTime
,#PropertyList.FromDateTime
,#PropertyList.ManagedEntityRowId
,#PropertyList.PropertyValue
,vManagedEntity.ManagedEntityDefaultName AS RelatedManagedEntityDefaultName
,vManagedEntity.ManagedEntityRowId AS RelatedManagedEntityRowId
,vManagedEntity.ManagedEntityGuid
,vManagedEntity.ManagedEntityDefaultName
,vManagedEntity.Path
,vManagementGroup.ManagementGroupDefaultName
,vManagementGroup.ManagementGroupGuid
,vManagedEntityType.ManagedEntityTypeDefaultName
,vManagedEntityTypeImage.Image
,vManagedEntityTypeProperty.PropertyDefaultName
FROM
#PropertyList
INNER JOIN vManagedEntity ON #PropertyList.ManagedEntityRowId = vManagedEntity.ManagedEntityRowId
INNER JOIN vManagementGroup ON vManagedEntity.ManagementGroupRowId = vManagementGroup.ManagementGroupRowId
INNER JOIN vManagedEntityType ON vManagedEntity.ManagedEntityTypeRowId = vManagedEntityType.ManagedEntityTypeRowId
INNER JOIN vManagedEntityTypeProperty ON vManagedEntityTypeProperty.PropertyGuid = #PropertyList.PropertyGuid
INNER JOIN vManagedEntityTypeImage ON vManagedEntity.ManagedEntityTypeRowId = vManagedEntityTypeImage.ManagedEntityTypeRowId AND
vManagedEntityTypeImage.ImageCategory = N'u16x16Icon'
INNER JOIN #ColumnPicker ON #ColumnPicker.PropertyGuid = #PropertyList.PropertyGuid
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
---------------------------------------------------------------------
--Error Handling & Cleanup code
---------------------------------------------------------------------
QuitError:
IF ((@Error = 0) AND (@ExecError <> 0)) SET @Error = @ExecError
DROP TABLE #PropertyList
DROP TABLE #ObjectList
DROP TABLE #RelationshipList_1
DROP TABLE #Entity_Tree_1
DROP TABLE #RelationshipList_2
DROP TABLE #Entity_Tree_2
DROP TABLE #ColumnPicker
DROP TABLE #RelationshipList_RAID
DROP TABLE #ObjectList_RAID
RETURN @Error
END
GO
GRANT EXECUTE ON dbo.[Dell_Connections_Report_RAIDConfigDataGet] TO OpsMgrReader
GO
IF EXISTS (SELECT * FROM sysobjects WHERE type = 'P' AND name = 'Dell_Connections_Report_RAIDConfigDataGet')
BEGIN
DROP PROCEDURE dbo.[Dell_Connections_Report_RAIDConfigDataGet]
END
GO
IF NOT EXISTS (SELECT * FROM sysobjects WHERE type = 'P' AND name = 'Dell_Connections_Report_RAIDConfigDataGet')
BEGIN
EXECUTE ('CREATE PROCEDURE dbo.[Dell_Connections_Report_RAIDConfigDataGet] AS RETURN 1')
END
GO
ALTER PROCEDURE dbo.[Dell_Connections_Report_RAIDConfigDataGet]
@StartDate datetime,
@EndDate datetime,
@ObjectList xml,
@Properties xml,
@LanguageCode varchar(10)
AS
BEGIN
SET NOCOUNT ON
DECLARE @Error int
DECLARE @ExecError int
---------------------------------------------------------------------
--Create a list of Managed Entities
---------------------------------------------------------------------
CREATE TABLE #ObjectList (ManagedEntityRowId int)
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
INSERT INTO #ObjectList (ManagedEntityRowId)
EXECUTE @ExecError = [Dell_Connections_Report_ReportObjectListParse]
@ObjectList = @ObjectList,
@StartDate = @StartDate,
@EndDate = @EndDate,
@ContainmentLevelCount = 1,
@ContainmentStartLevel = 1
SET @Error = @@ERROR
IF @Error <> 0 OR @ExecError <> 0 GOTO QuitError
---------------------------------------------------------------------
--Create list of all relationships derived from 'DellServer.Hosts.DellStorage'
---------------------------------------------------------------------
CREATE TABLE #RelationshipList_1(RelationshipTypeRowId int)
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
INSERT #RelationshipList_1
SELECT RelationshipTypeRowId
FROM dbo.vRelationshipType
WHERE RelationshipTypeSystemName = 'DellServer.Hosts.DellStorage'
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
---------------------------------------------------------------------
--Create list of all entities above the selected objects in their respective hosting chains
---------------------------------------------------------------------
CREATE TABLE #Entity_Tree_1 (ManagedEntityRowId int)
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
INSERT #Entity_Tree_1
SELECT r.TargetManagedEntityRowId AS ManagedEntityRowId
FROM vRelationship AS r
JOIN #ObjectList AS ol ON r.SourceManagedEntityRowId = ol.ManagedEntityRowId
JOIN #RelationshipList_1 rl ON r.RelationshipTypeRowId = rl.RelationshipTypeRowId
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
---------------------------------------------------------------------
--Create list of all relationships derived from 'DellStorage.Hosts.DellStorageController'
---------------------------------------------------------------------
CREATE TABLE #RelationshipList_2(RelationshipTypeRowId int)
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
INSERT #RelationshipList_2
SELECT RelationshipTypeRowId
FROM dbo.vRelationshipType
WHERE RelationshipTypeSystemName = 'DellStorage.Hosts.DellStorageController'
CREATE TABLE #Entity_Tree_2(ManagedEntityRowId int not null)
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
INSERT #Entity_Tree_2
SELECT r.TargetManagedEntityRowId AS ManagedEntityRowId
FROM vRelationship AS r
JOIN #Entity_Tree_1 AS et ON r.SourceManagedEntityRowId = et.ManagedEntityRowId
JOIN #RelationshipList_2 rl ON r.RelationshipTypeRowId = rl.RelationshipTypeRowId
---------------------------------------------------------------------
--Create list of all relationships derived from 'DellStorageController.Hosts.ControllerVirtualDisk'
---------------------------------------------------------------------
CREATE TABLE #RelationshipList_RAID(RelationshipTypeRowId int)
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
INSERT #RelationshipList_RAID
SELECT RelationshipTypeRowId
FROM dbo.vRelationshipType
WHERE RelationshipTypeSystemName = 'DellStorageController.Hosts.ControllerVirtualDisk'
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
---------------------------------------------------------------------
--Create list of all entities above the selected objects in their respective hosting chains
---------------------------------------------------------------------
CREATE TABLE #ObjectList_RAID (ManagedEntityRowId int)
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
INSERT #ObjectList_RAID
SELECT r.TargetManagedEntityRowId AS ManagedEntityRowId
FROM vRelationship AS r
JOIN #Entity_Tree_2 AS ol ON r.SourceManagedEntityRowId = ol.ManagedEntityRowId
JOIN #RelationshipList_RAID rl ON r.RelationshipTypeRowId = rl.RelationshipTypeRowId
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
---------------------------------------------------------------------
--Create list of all relationships derived from 'System.Hosting'
-- Assumes a MAX depth of 9999
---------------------------------------------------------------------
CREATE TABLE #RelationshipList(RelationshipTypeRowId int)
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
INSERT #RelationshipList
SELECT RelationshipTypeRowId
from RelationshipDerivedTypeHierarchy
(
(
SELECT RelationshipTypeRowId
FROM dbo.vRelationshipType
WHERE RelationshipTypeSystemName = 'System.Hosting'
)
,0
)
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
---------------------------------------------------------------------
--Create list of all entities above the selected objects in their respective hosting chains
---------------------------------------------------------------------
CREATE TABLE #Entity_Tree (ManagedEntityRowId int ,GroupManagedEntityRowId int,Level int )
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
INSERT #Entity_Tree
SELECT ManagedEntityRowId AS ManagedEntityRowId
,ManagedEntityRowId AS GroupManagedEntityRowId
,0 AS Level
FROM #ObjectList_RAID
INSERT #Entity_Tree
SELECT r.SourceManagedEntityRowId
,et.GroupManagedEntityRowId
,et.Level +1
FROM vRelationship AS r
JOIN #Entity_Tree AS et
ON r.TargetManagedEntityRowId = et.ManagedEntityRowId
AND
RelationshipTypeRowId IN (SELECT * FROM #RelationshipList)
AND et.Level < 9999
WHERE r.SourceManagedEntityRowId NOT IN (SELECT ManagedEntityRowId FROM #Entity_Tree)
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
---------------------------------------------------------------------
--Parse Column Picker XML
---------------------------------------------------------------------
CREATE TABLE #ColumnPicker (PropertyGuid nvarchar(255))
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
INSERT INTO #ColumnPicker
SELECT PropertiesList.Properties.value('.','nvarchar(255)') AS PropertyGuid
FROM @Properties.nodes('/Data/Value') AS PropertiesList(Properties)
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
---------------------------------------------------------------------
--Create List of Selected Properties and values for selected Objects
---------------------------------------------------------------------
CREATE TABLE #PropertyList
(
ManagedEntityRowId int
,GroupManagedEntityRowId int
,Level int
,PropertyValue nvarchar(256)
,DWLastModifiedDateTime datetime
,FromDateTime datetime
,TypeGuid uniqueidentifier
,TypeName nvarchar(256)
,PropertyGuid uniqueidentifier
)
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
INSERT INTO #PropertyList
SELECT
PropertyTable.ManagedEntityRowId
,PropertyTable.GroupManagedEntityRowId
,PropertyTable.Level
,PropertyTable.PropertyValue
,PropertyTable.DWLastModifiedDateTime
,PropertyTable.FromDateTime
,vManagedEntityType.ManagedEntityTypeGuid
,vManagedEntityType.ManagedEntityTypeDefaultName
,#ColumnPicker.PropertyGuid
FROM
(
#ColumnPicker
INNER JOIN
(Select
vManagedEntityProperty.ManagedEntityRowId
,#Entity_Tree.GroupManagedEntityRowId
,#Entity_Tree.Level
,DWLastModifiedDateTime
,FromDateTime
,T.PropertyXML.value('@Guid','uniqueidentifier') AS PropertyGuid
,T.PropertyXML.value('.','nvarchar(256)') AS PropertyValue
FROM
vManagedEntityProperty INNER JOIN
#Entity_Tree ON vManagedEntityProperty.ManagedEntityRowId = #Entity_Tree.ManagedEntityRowId
CROSS APPLY PropertyXml.nodes('/Root/Property') AS T(PropertyXML)
WHERE DWLastModifiedDateTime > @StartDate AND DWLastModifiedDateTime <= @EndDate
)AS PropertyTable
ON PropertyTable.PropertyGuid = #ColumnPicker.PropertyGuid
INNER JOIN vManagedEntity ON PropertyTable.ManagedEntityRowId = vManagedEntity.ManagedEntityRowId
INNER JOIN vManagedEntityType ON vManagedEntityType.ManagedEntityTypeRowId = vManagedEntity.ManagedEntityTypeRowId
)
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
---------------------------------------------------------------------
--Select Filtered list of properties for selected objects
---------------------------------------------------------------------
SELECT
#PropertyList.TypeGuid
,#PropertyList.TypeName
,#PropertyList.PropertyGuid
,#PropertyList.DWLastModifiedDateTime
,#PropertyList.FromDateTime
,#PropertyList.GroupManagedEntityRowId AS ManagedEntityRowId
,#PropertyList.PropertyValue
,vManagedEntity.ManagedEntityDefaultName AS RelatedManagedEntityDefaultName
,vManagedEntity.ManagedEntityRowId AS RelatedManagedEntityRowId
,GroupEntity.ManagedEntityGuid
,GroupEntity.ManagedEntityDefaultName
,GroupEntity.Path
,vManagementGroup.ManagementGroupDefaultName
,vManagementGroup.ManagementGroupGuid
,vManagedEntityType.ManagedEntityTypeDefaultName
,vManagedEntityTypeImage.Image
,vManagedEntityTypeProperty.PropertyDefaultName
FROM
#PropertyList
INNER JOIN
-- PropertyMinTable filters #PropertyList to only the
-- first occurance of a property in a hosting chain.
(
Select
GroupManagedEntityRowId
,MIN(Level) as Level
,PropertyGuid
From #PropertyList
Group By
GroupManagedEntityRowId
,PropertyGuid
)As PropertyMinTable
ON
#PropertyList.PropertyGuid = PropertyMinTable.PropertyGuid
AND #PropertyList.Level = PropertyMinTable.Level
AND #PropertyList.GroupManagedEntityRowId = PropertyMinTable.GroupManagedEntityRowId
INNER JOIN vManagedEntity ON #PropertyList.ManagedEntityRowId = vManagedEntity.ManagedEntityRowId
INNER JOIN vManagedEntity AS GroupEntity ON #PropertyList.GroupManagedEntityRowId = GroupEntity.ManagedEntityRowId
INNER JOIN vManagementGroup ON GroupEntity.ManagementGroupRowId = vManagementGroup.ManagementGroupRowId
INNER JOIN vManagedEntityType ON GroupEntity.ManagedEntityTypeRowId = vManagedEntityType.ManagedEntityTypeRowId
INNER JOIN vManagedEntityTypeProperty ON vManagedEntityTypeProperty.PropertyGuid = #PropertyList.PropertyGuid
INNER JOIN vManagedEntityTypeImage ON GroupEntity.ManagedEntityTypeRowId = vManagedEntityTypeImage.ManagedEntityTypeRowId AND
vManagedEntityTypeImage.ImageCategory = N'u16x16Icon'
INNER JOIN #ColumnPicker ON #ColumnPicker.PropertyGuid = #PropertyList.PropertyGuid
SET @Error = @@ERROR
IF @Error <> 0 GOTO QuitError
---------------------------------------------------------------------
--Error Handling & Cleanup code
---------------------------------------------------------------------
QuitError:
IF ((@Error = 0) AND (@ExecError <> 0)) SET @Error = @ExecError
DROP TABLE #PropertyList
DROP TABLE #ObjectList
DROP TABLE #RelationshipList
DROP TABLE #Entity_Tree
DROP TABLE #RelationshipList_1
DROP TABLE #Entity_Tree_1
DROP TABLE #RelationshipList_2
DROP TABLE #Entity_Tree_2
DROP TABLE #ColumnPicker
DROP TABLE #RelationshipList_RAID
DROP TABLE #ObjectList_RAID
RETURN @Error
END
GO
GRANT EXECUTE ON dbo.[Dell_Connections_Report_RAIDConfigDataGet] TO OpsMgrReader
GO
FFD8FFE000104A46494600010101004800480000FFDB0043000604040405040605050609060506090B080606080B0C0A0A0B0A0A0C100C0C0C0C0C0C100C0E0F100F0E0C1313141413131C1B1B1B1C20202020202020202020FFDB0043010707070D0C0D181010181A1511151A20202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020FFC0001108003E03F503011100021101031101FFC4001C0001010002030101000000000000000000010200030405060708FFC4005610000103020206040A040809090900000001000203040506111213215193D31453549407151622314152556191233292D4172542717481D1D22433346472B1B3B4E10835364345758283C118446273A1A3B2C2F1FFC4001B01010100030101010000000000000000000001020405060307FFC4003D110100000204080B070402030000000000000102031112E104051552627292A113141632335191A2C1C2E221223142616371234181D2243406B1D1FFDA000C03010002110311003F00FD0571B9C95121646ECA9C6C007AFE2507073415994199941D5E2DFF00446F3FA38FEDA35A98774337E1BF8AFF00D893F2F8400BC7BF44580B11B035628B0D41DEE1D6FF0002BEFE80DFEFB4CB62879B3EAF9A569617CEA3D7F2CCE2862D67D1B03111618AA56B0C552B7D0BC153728AE9FD3A6FEA9977F11FCFFC78BCDE3FF93F9F07BD5DF79D520C40A0E2CC4EBFFE1FFA941399DE82B3281CCA0CCCA0E34C4EB4ED41199DE82B33BD0399DE82813BD0209DE82B49DBD021CEDE8104EF41609DE82B33BD0399DE810E3BD056677A0ACCEF41599DE81CCEF408277A0A04EF41599DE82B48EF40873B7A0749DBCA0749DBCA0749DBD03A477A0413BD039940E65039A0C40A01019941999406650199DE83333BD066677A0333BD0399DE83333BD0399DE81CCA0CCCA0506205008024A033280CCEF406677A0CD276F40693B7A0349DBCA092E76F2824B9DBD04973B7A092E76F4125CEDE824B9DBD04973B7A092E76F4125CEDE824B9DBD04973B7A092E76F40173B7A092E76F413A4EDE82749DBD005CEDE82349DBD01A4EDE82749DBD04693B7A00B9DBD04973B7A092E76F4125CEDE824B9DBD005CEDE820B9DBD049277A0093BD049277A0824EF41249DE8024EF41049DE82733BD0049DE82733BD04E677A0924EF41399DE82493BD04E677A09CCEF401277A0192C91BC3D8E2D7B76870391083D9E1FC571494A63B94994D165A327B40EFCBD68386CFAA105A050620EB7167FA2579FD1C7F6D1AD4C3FA19BF0DFC59FEC49F97C2805E31FA23600A2360083635A88EF70E8FE077CFD05BFDF2996C50F367D5F34AD2C2F9D47AFE599C76B56BB36C0C558B6B58AA56B11AA95BDF78316E515CBFA74FF00D532EF624F9FF8F179DC7DF27F3E0F70BBCF3C50620A41C49BF8FF00F87FEA5008140A0507166FE34A0940A0505041410281081082C20A40A0420A4148290281082C20A40A04205028140A0420502814084188041880418500831008040A050620506205028140200A010080401402010494125049412504941250494125049412504941250050494128250050420104A0840141250790C4F8B2AAC989ED514A58DB1CD0CA6E72B86D8899238A1933F53759206BBF3E7EA41E7AD1E12AE8F6D556DCE178632A6ABA1D0C418D261D551BE96394B86624FE1833398CB6E683B9B863AB9DBEB5D4757660258A0A79A6D0AA6B807D6D4BE969A36931B73D2918DD23B3441F86D0897C223A9AA9B4B5F6EE8AF8EA24A5AD94CDA50B1EC8E299AD8E40CC9EF923A805AD3A24E447A50702F18DB10CF490535150F8BEBEB5D452C326BE279E8D5736AFD2E8A56364CFCD20B5C0679827241DD614BEE22BAB04B70B6C34D4C7A4B7A4C33E9F9F0D4189ACD59683E8073767EAF8E483D1141250414125005049412824A09412824A09412504A0104941083753B5A74B319A0E8C7860A3F72CBDF19F765C4CB1A3BEE7A9E4DE9F76F50F0C147EE697BE37EECA659D1DF71C9BD3EEDEAFC2FD27B9A5EF8DFBBA9967477DC726F4FBB7A8785DA4F734BDF1BF77532D68EFB93937A7DDBDCD831CDBAFD68BCD34D6C9A2863A41249A354D2E70D7C4DC81D40D1DAECF3C8ACB28429A49A1197D90875DCF9C7154706A492684D5C63355F0BDE284983FDDB5DDFA2FBAAE2DBA1CD9B6BD2EFD584674BB31FECB6BF087BB6BBBEC5F7552DD0E6CDB5E94AB08CE97663FD9B5A708FBBABBBEC5F7556DD0E6CDB5E94FF233A5D98FF66D6F925EEFADEF917DD94B7439B36D7A53FC8CE97663FD9DADA64C351D0DE1F150D58028DBAC0EAB8CE6DE9706C07A38C8E96473DBFF0055B145351599BDD8F373B4A1A2D6A685346692B9A5E766E8CDA4EB85C70D7BB6AFBEC7F755F1B7439B36D7A5B3C05367CBB3EA6C171C37EEDABEF91FDD95B7459B36D7A5380A6CF9767D4D82E3877DDD57DF23FBB2B6E8B363B5E94E029B3A5D9F52C5C70F7BBAABBE47F764B7459B1DAF4A7014D9D2ECFA9E930CE21B65BEDB5F534D4130FA6A763D8FA86BB3D26CC410442DCB2D12BA1826172D14B34D2CB1F8C3F7FCFD1CBC3F029E9279659A687C23FB7E3EAECBF08B0FBBDFC76F297DF2CE8EFB9A99134B75E7F0890FBBDFC76F2932CE8EFB9322696EBCFE10E1F77BF8EDE52B963477DC645D2DD79FC21C3EEF7F19BCB4CB1A3BEE322E96EBDDB59EEA2F313EA5919A7D076AF45C7599FAF3CC066F5D1C1309E1A5B5555ED7330CC17819ACD75FB1D8EA1FED8F97F8ADA6AB350FF6C7CBFC503A993DB1F2FF00140EA24F6C7D9FF141C49C653381DA77FA3D4823620AD881D88286482049F0415ACF82043FE08283FE08283FE082B4FE081D3F820A0F415A482B49056920AD2408720A0E415A482B34140A05028140A0420502814084188041880418500831008040A050620506205028140200A010080401402010494125049412504941250494125049412504941250050494128250050420104A0840141250783F08389AD74173A0B232C4FC457FBD413434F6E63991034ADC9F2EB25948635B9B07C9076360A0A4BD5BE7ABBC61BF15575449332B686A4B26D2D36C71BDDA4CCD8F6BD9130663720E6F9338669E9E663A8E16C13C429E7D66D0E8C3DCF6B5C5E4FA1F2123E2507552D3E05A2C436AC3C68982E52326AEA18B41C5A03082F91EE3B0BB4B2CB4B3283B1A3C3186288BA1A3A28227694529633D2352ED28BE21AC3B5A3D01072E9282DD6D6BD94B1B29DB5333A57341C83A5936B8807D672CF208391AC617960702F6ED7373DA33F820F398D31CDAF0B434BD2229AB6E37093536DB652374EA2793D7A2366C6E63327D0834E19C4B89AE75B253DE70C4F62608B5B0CF2544350C7ED0343E8BEABB6E79141E88491B9CE0D707166C7007D07E280D63359ABD21A79696867B72DF920EAED788ED775AFB9D0D1BDCF9ED130A7ADCDA5A048E6E96409F4EC41D83648DCE706B838B4E4E00FA0FC50198CC8CF68DA47E740209412504A09282500824A082837D2FE57EA41F180BC4BF51505058588B0B11E97097F21C41FEEF1FDEA05B7827369357C5CBC63CEA3D7F08BA60B41D06D6A8C5B9888DCD558BB5B5FF009B6F9FA137FBE53AD9A1E6CFABE695AD4BCFA3D6F2CCE99A17C1BCDA02A8D8D0AA3600AA3BDB4B7F105C3F4AA4FECEA16CC9D1475A5FFA99CFC23A597566F2A0357C955A288745515A088F71810656E9FF00F3BFFA85E8B157471FCF841E6F1BF4B0D5F18BD2AE9B94420C41483AEAAFE50FFD5FD4835A050282820D41050414102105840A0A41410520A41482905041410520A414105040A05028108140A0502106201062010614020C402010281418814188140A050080280402010050080412504941250494125049412504941250494125049401412504A094014108041282100504941F3CF09B66C2571AFB7CD55889986315D046F9ACF73D73227863BCD7873642D6CB19FCA6E7FF00A13987CE6D38DAE2C9AC5E13AF0D698E9AA2AB0C5FEBA99B943554DF5E9AAD806C0DD76C27D19EE41D5D6619969AD3438CEF46DD74ABAC8EAAFD7AC2972A8D417C758E263969C7B6C85A18039BB0EC1B50761896DF846A717619BC535B22A5172C372D6504157B09AA829D82858ED33E73D81AD68DBB5075781EC770B851E1BBE505758296F5D3E39EAAE725C2A7C6B52F7BC89A96788C6417499E5A1F2D9B504C7856C75BE0F3C23DFAA602FBADBEFB5E682A34DE0C063744F0E8C0203492EF38FAF66E41EB7C9CB65871AF836B95B9AF8EE5786D4B6F3585EF7C9565D48D91CE98B8BB4897927FFC083B3F0815B0D83C2D615C4977CE3B0745A8A0E9AE19C54F53267939E7F234DAECB3FCFEA050769E10F1A514D81EFF00E4B5DA9EAEF1050BA768A29993491C3A4D6C92FD193A3931C48283E395F8765870CB6E969AAC3F4909B45632B63B7D7D44B577089F4A49D745246039F1BBCF39FA0A0F4D4F86ED165A0F0537CB6C460BB5C27B7C35B581EF2F962A8A5CDF1BB32736FA80F50D81075CDB6DA6C2CF099258208A92FF006D90C76A6C6729E2A57C6DD7189B9E96419A4ECC7A107515F8765870D36E96AAAB052426D358CAC8EDF5F512D5D7C4FA624EB6292301CF63BCF39FA0A0FB1F825C3166B4E0DB557D1425B5B76B750CB5F50F7BDEE908874983CE2400CD610D03D0107B4412824A09412504A01049410506FA5FCAFD483E342197D877C978AB317E9D6E1D6B10CBEC3BE4A59896E1D6A114BEC3BE4A59896E1D6D82297D877C9636625B97ADE9309B24143883369FF378FEF502DBC1658D99F57C5CCC61342D51EBF845D2B58FF64AD0B31742D41B1AD76E2A598A5A83731AEDC9662C6D41B9A1DB92CC52D41DBDA9AF36EBD80092689BB07E994EB668658D99F57CD2B569A685B935BCB33A96D3D4754EF915F1B13753778597AE0DADA7A8EA9DF22AD88F531E165EB836B69EA3AB77C8AB623D49C2CBD706C14F3F56EF9159588F531E165EB83BCB545236C35F9B08CEA697D5FF0082A16CC92C7838EB43CCD1C227870B2FB7E59BCA80C77B257CAC456DC1618EDC55B114B703AB76E2962296E0AD5BB7156C44B707B3C13932DF3E96CFA5F5FF00442EFE2B87E9C7F3FF008F3B8DA3FA90D5F18BD169B3DA0BA4E590F67B4103A6CF682074D9ED041D7D491D21DB777F520D7984159840A0ACC20D41050414102105840A0A41410520A41482905041410520A414105040A05028108140A0502106201062010614020C402010281418814188140A050080280402010050080412504941250494125049412504941250494125049401412504A094014108041282100504941E0BC27DE30950F8B292E987A2C4F7BB8C8E8ACD697410CD238B466F7694C1C236341F39DFE283C2E25B9E27BF5E2C9807145869F07617BB3E33A31C8DACE92EA6935BD12396111C516990DF4B73D9B33CF241F56BB5A70557C94D2DDE8ADB55242ED4523EAE3824731C36EAE3320391F8041B6F56DC3150CA692F74B452B695E0D1BEB591384727AB56641E6BB60F420E3BAC383296E4FBB1B75BA0B98FA592BF530327DBE9799720FDA7D79A0DBD130D34CF6A10D183565D354D068C5F4A5DF59EF8BF289CB69210747E5358EE9E368ACB4B0565E70C694548CA8D5C5189CC5981149B745A4640B86483B77CD49516181F88A2A589B53147D329E67B25A71239A0B981CFC9AF00FA0FAD045B2C585ACE34AD56FA1B70A9C8674B0C506B33F40F303749071A830CE080FA896DF6AB6694BA50D5C94F4F066ECFEBB242C6EDF88283990C161AB8A06411D2D4456F737A3358237B6073064DD0CB30C2D1B065E841E1709E39C317FF0008D7BB6F88A2A3BE5B5D514CCBBB9B1BA5A96D2CBA991A24D06BC640B4E8E91D8838D7BC438170EE3AA0C31498628E4ABBC98E1AFAC861823118AA739AD64B9464BF4835CED127D083E8514F6D82465BA19218A48D804546C2D696C6D1B03631E868037205F5D42C2D0FA88DBA6FD53337B466FF00647C7E080A9ADA3A5D1E933C70699D166B1C1999DC33CB341353574B4C1AEA89990B5C745A64706E6770CF2419AF8341EFD637423CC48ECC64DCBD399F564835B6B291F00A864F1BA03E89838167DAF420E2D75F6CD40CD3ACAD8606E998869BDA3E900CCB32F4E606DC9069A9C4D8769A969EAE7B953474B56D2FA699D2B742468199734E791680769F40415577EB25254C34B555D0435151A26189F23439C1EED16900FB4ED837941C3A3C6185EB6AE2A3A4BA53CF5536622858F05CEC8171C87C0025077F4BF95FA907CB9D8D318699FC7B70F4F6A9BF79790E334B9D376C5FA3C301A0CC97B20C18D3187BF2E1DEA6FDE538CD2E74DDB15E2341992F6415E59E2FF7E5C3BD4DFBCB1E334B9D376C4E2341992ECC1431962FF7E5C3BD4DFBCA71AA5CE9BB62BC4683324D983BEC398A7134D417E74B77AD91D0D007C45D51292C774A81BA4DCDDB0E4E2335B383E11491967F7A3CDEBFAC1CFC3704A184D475492FB67EA87545D50C618B3DF55FDE66FDE5A7C6A973A6ED8B7788D0664BD906C18BF15FBEABBBCCDFBCB1E374B9D376C5388D0664BD906C6E2EC55EF9AEEF32FEF2BC6E973A6ED8A711A0CC97B20DADC5B8A3DF15BDE65FDE538DD2E74DDB14E2541992F641ECBC19DF6F75979AC8EAEE15350C6D1B9ED6CB33DE03B5D10CC0713B72257571453CF352C6134631F77AFEB07171E60F47250C232CB0846D7ED0FA45F44E9151D63BE657A379622A27EB1DF32811513F58EF99419AF9FAC77CCA08A9A8A814D9895E0EB1A33D23ECB90713A655F5D27DA282BA5D5F5CFF00B450674BAAEB9FF68A0AE9755D73FED141D7574B23E6CDEE2E39659939A0D082820A41482820A41410520420A082820A081082C2050520A08290520A41482820A08290520A0828205028140840A05028108310083100830A0106201008140A0C40A0C40A050280401402010080280402092824A092824A092824A092824A092824A092824A00A09282504A00A0840209410802824A0F93F844AB661BF0AB85F17DD439B877A2CF6CA8AC00B994B3CA4963E4CB3C83F4B473F820E1F843C4365C6B7FC1F8770B564575ADA6BC53DDEB6AA8DC258E9A96943B4DCF9199B413A7B0697A465EB083C2D962F055261FF084713C94C6F515D2E8EA58AA1E05435A7644691A4ED71906D2D19E79696CC9071A8997AABBEDAE9B17BAD5A4CB05278B22C52E959016BC7D2BA3C881AFCC64E2EF3BE48397E0F7045B2E1E11A96CB7FA9A6C454149871F2534B4F2C92D348C6DC0B236E91C8BDB18790DCF66C197A020EB313E20B557DBA3C516FA6B2DA2E2EBDEBE1A58C48FBEEB5B55E7BEA24D366834FD62DD1236803241DCBAD3846DB0F858A48A9E8E92E94CC9DB6DA7018C99B4CEA5CDC216EC7687ACE4836E19185AA2FF0065831F3A9FC591E16B53B0EB2E2E6B68FCEA7674970D6111EB34C65B76E5FA90744EA386AE86D1430E9BF08CD8E99058BCE78CE8DC745E217EC76AFD923D79FAD07A9BD619B0D0635C5D61A1A98B0CDA2BF0EC0F9E667D1D3C72BAA444D7B8661A01FAAEF46C2507A1F0315F4226BCD922B65BA9AB2D22963ABB9D99C1F45599B1DAB7823FD6019E967B7341E320A59A860C438D28D9A55785F1ADCE7A80DFACFA09B551D5B3EC1D2F864837744A89CE12C555CC2CB8629C5305796BBD2CA511BD94717E66C433FD683A0BD5E6D374829B105153D9ED35D35F5B2454D169BEF9ACE95E7BE7934DBA00E65C46891B401920E6D0616B057E00F09176ACA364F71A4BADCFA2543F32E8B54D648D31FB2748EDCBD3EB41C8BEDE2D377D2A4B8D3D9E2ABB7D82875F74BD87CB51389E0D6E54518747E735D21F383B3D2283818166C355D75A06E3F961751C361A5F11B6E4E029CB33226734BC861782DCB7E43E083A9A770187F5146F6330BCB8C2B4541B8994531636184D236B1CDF3F40E5E767EBF4A0E6E2BB4BA8B03E2F9A9AE1689ADF5525B9E6DB6491EFA7A7984A069069CDACD6346DC8FA907D76AA5C2B80EDB0D1D0C5053D4D7C8EE890CD288F5B368B4492CB3484E4035AD323FF00ADC4021D35A5F62B0DDC3EE171A696D93D9CEA2B5CE6086694D5CF35788B696E44CACF301272FCC83A1B7365A0C17882CF797B597FAEB4D1456EA49081512136E6410C6C0722E736AC3C6CF43B6A0F7941ACB96299AA653A7058E214513B2F35D593B5B254BC7F419A0C1F9DC107ABA5FCAFD483E28E3E7BBF3AF1517EA30605154162AA0541E8F0B1FC5D88FF00DDC3FBE53ADAC1B9B3EAF8C1CDC3F9F45AFE1174C0AD16FB607283635CB146D6B9547BAF04A73BED6FE82EFEDE15D7C4BD2C757C60E0FF00C83A086B7845F515EA1E3C840840A0D755FC97FE637FF8BD070820A40A0A41C1ABFE3506A41410520A41410520A082902105041410504084161028290504148290520A41410504148290504141028140A0420502814084188041880418500831008040A050620506205028140200A010080401402010494125049412504941250494125049412504941250050494128250050420104A08401412506A9E086785D0CF1B6585E327C6F01CD2371076141C5B7DA2D36C63A3B6D14144C79CDECA78991027790C03341E3B02783682C715DFC710D1DC27ADBCD55D68A5D5890C2CA811E88CE46E6D7831EDC907ADB8DA2D3728DB1DC68A0AD630E6C6D444C9403BC0783920A8E8282190490D345148D66A9AF631AD2231B740103EAFC10718D86C5AE9A6F1752EBAA4875449A98F4A4703982F3966E39EF40CD66B44B54EAB96869E4AB919AA7D43A26191D1FB05C4665BF04135B66B3D653C74D59434F534D0E5AA825898F6372190D16B810320829F4344E6C2C753C6594E43A9DA58DCA32DFAA59EC91EAC904545BADF50643514B14C6566AA5D3635DA4CCF3D076636B73F52028ADD6FA083A3D0534549067A5AA818D8D999F49D1680101D0A8DAC9A36C1188EA0B9D3B03464F2FD8E2F1F945DEBCD00FA4A578883E16384043A105A0E811B016EECBE0838DE23B289A69C505309E7707CF2EA99A4F703982E3966483BD06C14344D8A585B4F188A725D34618DD17977D62E1E824FAF341A25B3DA259A29E5A1A7926A76E8412BA261746DF65848CDA3E01079AC5787B13D554D336C7158CDBE08C064373A47CAE865D239C9098C803668ECCBD4839584705D2D8B0FC96BAB905D25AC9A5ABB9D44D1B43679E77693DC63F39A06C032F820ED62B2D9A1A43470D053C748E3A4EA7644C6C64EF2C03241BA5A7826CB5B1B64CBD1A401CBE680D441A0D6EADBA2C39B1B90C81DE3720C746C2E6BCB41733EAB88DA33F4E482435ADCF440199CCE5BD072297F2BF520E98FF93FDFB327C674BF664FD8B8B9234B75EF53CA5FB7DEB99FF67FBEFBCE97ECC9FB14C8FA5BAF394BF6FBD71FC00DF7DE74BF293F62646D2DD79CA5FB7DEB8FE00AFBEF3A5F949FB14C8DA5BAF394BF6FBD73B1B5F81ABED0535C61E9B4B278C29BA3697D20D0FA68E5D2FAA73FE2B2CBE2BEB458AACC23EF73A157C2F6B53E3DE1232C6C556635FC6E704F80ABE8FF0068D37CA4FD8BE39134B75EFBF297EDF7AE23C06DF3DE34DF293F62990F4F75EBCA4D0EF5CB1E03AFA3FDA14BF293F62C721E9EEBCE526877AE23C09DF7DE14DFFB9FBAA643D3DD79CA4D0EF5CEFB08F83CBEE1EAF9EAF5D4D55AE80C1A1A7247966F63F3CF56FF00616EE058BB809ED5AAFD957C2F73F18636E31259B367DB5FC6BF07AAE897DEA2978F272574EB71CF44BEF514BC79392958CE8B7DEA2978F27252B5A8747BE7514DC79392AA325A2BEC90E86A69479C1D9EBE4F5023A9F8A95AD4D1E2ABEF574BC6939295951F165F7AAA5E349C94ACA99E2CBEF554BC6939295951F175F7AAA5E349C94ACA9A25B2DF647E968528FF009D27292B2A4F886FDECD2F164E525654CF11DF47E4D2F164E52CAA635A858AFD97D5A5E2C9CA5155E23BF7B14BC69394833C4B7EF62978D272905789AFDEC52F1A4E5207C4F7EEAE978D272903E28BF7574BC69394833C557EEAE978D2729022D77EEAA978D272903E2DBF7554BC6939481F175FBAAA5E349CA419E2FBF7554BC6939481E837DEA6978D272903D0EFBD4D2F1A4E5207A1DF7A9A5E349CA40F45BEF534BC7939481E8F7DEA2978F272912B3A8BF7514BC79392A56ACD4DF7A8A5E3C9C954222BEF67A5E3C9C940E85F7B3D2F1E4E4A0AD1BEF67A5E3C9C952B0817DECD4BC793929587F1E8FF00BB52F1E4E4AA303AFBD9A978F272503ACBEF66A5E3C9C940EB2FBD9697BC49C9419ADBEF65A5EF1272503AEBEF65A5EF12725066BEFBD9697BC49C940EBEFBD9697BC49C940EBEFBD9697BC49C9419D22FDD9297BC49C940F48BF764A5EF1272506749BF764A5EF1272501D22FDD9297BC49C9419D22FDD9697BC49C9419AFBF765A5EF12725066BEFDD9697BC49C9406BAFDD9697BC49C9419AEBEF65A5EF1272501AEBEF65A5EF12725066B6FDD9697BC49C940EBEFBD9697BC49C9419AFBEF65A5EF12725066BAFDD9697BC49C940EBEFDD9697BC49C940748BEF65A5EF1272503D22FDD9297BC49C940EBEFDD9697BC49C940F48BF765A5EF1272501AFBF765A5EF12725006A2FDD9697BC49C9406BEFBD9697BC49C9419AEBF765A5EF1272501ADBF765A5E3C9C9406B6FDD96978F272501ACBF766A5E3C9C9419ACBEF66A5E3C9C9419A77EECD4BC79392802EBEF66A5E3C9C9407E3DECD4BC7939280FC7BD9A978F272506685F7B3D2F1E4E4A0931DFB3FE4F4BC79392833557E3FEA2978F272501A8BF7514BC7939280E8D7DEA2978F2725049A4BF7534BC79392833A1DFBA9A5E349C940743BF7534BC6939280E857DEA6978D272901D02FDD552F1A4E5200DBEFDD552F1A4E5200DBAFF00D552F1A4E5203C5B7EEAA978D272901E2ABF7574BC6939480F14DFBABA5E349CA419E28BF7574BC6939480F13DFBD8A5E349CA413E25BF7B14BC69394833C497EF62978D272901E23BF1FC8A5E2C9CA407886FDECD2F164E5203C417EF66978B272906793D7EDD4BC59394825D87AFDBA978B272904F93D7EDD4BC5939480F272FDBA978B27290679357EFE6BC59394803866FDFCD78B272D04F9317EFE6BC49396833C96BF7F35E249CA40792B7EFE6BC4939480384EFE7D74BC4939480F246FF00BE9789272901E48DFB7D2F124E5A03C8FBF6FA5E249CA419E475F8FAE9789272D01E465FBDAA5E249CB419E45DFF00DAA5E249CB41AFC8BBF7B549F6E4E5A0CF22AFDED527DB939680F226FDED52FDB9396833C88BF7B74BC4939683641826FADCFCFA5FB7272D07FFD9FFD8FFE000104A46494600010101004800480000FFDB0043000604040405040605050609060506090B080606080B0C0A0A0B0A0A0C100C0C0C0C0C0C100C0E0F100F0E0C1313141413131C1B1B1B1C20202020202020202020FFDB0043010707070D0C0D181010181A1511151A20202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020FFC0001108003E030403011100021101031101FFC4001C0001010002030101000000000000000000020100030405060708FFC40055100000050202030A0808090909010000000001020304050611121321940714223141515354D3D415163252559193D217232533617174923462647273A3B3B4E1243642447581B2D1F008182635638284A1B1C2FFC4001B01010100030101010000000000000000000001040506020307FFC4003D110100000204080C040602030000000000000102031112E104051551526292A1131416323361717291A2C1E2213163C22223244181D2063442B1D1FFDA000C03010002110311003F00FD0551A9B921C3436AC2396A222E5FA4C0707100B130198980EAEEDFE68D67ECE5FB66C6261DD0CDD8CFC57FEC49DAF84110E3DFA21910F23612479432480F476EA7E47AEFD913FBE4619943D14FD9EB2B5B85F4B47DBF6CCEBC9030992D848043240A95992054ADF4FDCC0B0A3C9FD323FC2B1D4627E8BF97258EFA5FE1ED06D9A6600A02900E2AFF000957D44028040280A0343BF386030802008020088032014803200880220088022014805201405201480618080200C010043010020180280A403002004040100101004004C003004C003000C013000C013000C013000C013004C003004C003004C003004C003004C003004C003000C013000C013000C013000C013000C013015992FC7734AC38A69C4F12D27800F7148BAE1BF092739CC9253C15618E0787280EB11E490060280C01D6DD9FCD2ACFD9CBF6CD8C4C3FA19BB19F8B3FD893B5F0A221C63F446C22111B08806C4A411E8ADD2F926B9F644FEF7186650F453F67ACAD6E17D2D1F6FDB3384948C364361205796D4A054ACC9B152B7D277362C29527F4A8FF000AC74F8A3A2FE5CA63AE97F87B11B569D80280A4038ABFC255F5100A0100A0280D0EFCE180C20080200802200C805200C802200880220088052014805014805201860200803004010C040080600A02900C008010100400404010013000C013000C003004C003004C003004C003004C0784AEDFB2285774D8D3D04AA2220A1718D05F19BF8C9D712CE3CBA6432A24FE3161CA03AAB73741AF2E146F0A33BE6B52318C509934351CE47842547F2CD2A52492DC5D6789E386A2C4076ABBF6A89AA3D4CF0296FA6E4B3011FCA8B2AA5BD10A69A31D1EA421ACFC3E5322D5AF507157BA936DFCFD316CE0D3E664A7538B92233CEC77188E7868DD34B8C6B3CC581192B0C0071EB3795D2AA844A7C382989363CA515419DF0DA92B4A62AA52104E2995F01645C2C12956AC08CB1CC03D05A558AED569CCCBAA406A1A1E8D1DF65C65ED29386EA4D4BE01A5268CBC1D4667C7C7A807786001802600180260018006009800600980060098006009800600980060080EA8B76087E85776C47761A4CB1ABBEE753C9BD7F2DE45BB043F433BB627BB09967577DC726F5FCB797C2FC4F433BB627BB89967577DC726F5FCB7916EBB13D0CEED89EEE265AD5DF72726F5FCB7B9AC5F34EAF522B319EA63CD32DC4271CCB2926A5169DA4E047A02CBAD58E3818F594214D24D08CBF08433DCF9C7154706A492684D5C63355F2BDE289CB3FD1B3B6E6BBA8D2DBA1D19B6BDADFD584694BB31FECD895DA1E8D9DB6B5DD44B743A336D7B52AC234A5D98FF0066C4AAD1F474EDB5AEEA2DBA1D19B6BDA9FA8D297663FD9B527697A3E6ED8D77612DD0E8CDB5ED4FD4694BB31FECEDE92FDB6DD3AB1A2812C9251126E12A5B66669DF4C16047BDCB03C703C7031934349476278598FCB4BAE1AAC4A6929A33C95CD2F3B47566D6758551B6BD1B2F6D6FBA8F85BA1D19B6BDACBE029B4E5D9F7369546DBF46CBDB1BEEC2DBA2D19B6BDA9C05369CBB3EE32A8DBBE8E97B637DD85B745A31DAF6A7014DA72ECFB8CAA36F7A3A56D8DF760B745A31DAF6A7014DA52ECFB9EA2DABA29F029131C8D01D2421F612695C84A8CCDC4BA78E24CA70C32730D960D874B47471AA5FDE1FBE7AFABA9A8C37174D49490AE68571847F6CD575F5B9FF0008ECFA397EDCBB21F5CB3ABBEE63E44D6DD7AFC2333E8F5FB72ECC32CEAEFB93226B6EBCBE119AF47AFDB17662E58D5DF719175B75ECF8466BD1EBF6C5D98658D5DF719175B75EEDE8956F0CA1C9286F7BE53C86951E931C0B1C71224738D8E0984F0D2DAAAAF8B598660BC0CD66BAFE0ED342EF9E5F77F88CA62B342EF9E5F77F8805A177CF2FBBFC405D0BDD217DDFE2038EE160E192B59F396AFF00301858007A805D4016A0184A00C940112803250044A0088C03230148C05230088C05014805201860200803004010C040080600A02900C008010100400404010013000C013000C003004C003004C003004C003004C07CE2EFBBE233772ADDA35AEE5CD71130C5466B697598C865B8EE631D4A75F324E64AD58A48B9C077B48A0D12A74369E9B412A7B92D39A453DFC0DC697A75BE646A49F193CE2964A4F380E53B6BDAE98CB88E42649992E36B5215C6A759425B6D4478E399284111196B01D3331373F91723F6DB74F69751A6C14E958535F1488D233209258F00CD44A563816381EB01DBC1B7ADC8A44DC388CA740E29CD5C25138B6F46A3519E26666D9E5E17200E440854FA645669F0D096186C8F40C11F116389E5C75E05880DE4E36ACC495128D2782888F1C0F98C0791BC7743876FD42251A2C1915AB8A7A4DC8B4987867D1A78DD756AC12DB7896198C0732D6AF57EAA9949AD5BEF505F8E68C8875E6A425D25E3AD0E338A7561AC0772871B7138B6A2596386293C7590084E214B5209446A4796923D658F16203AAB7EE4A55C10DD994C5A9C8ED3EEC652D49347C632ACABC08F5E1880E7A5C6DC4E28512CB1C3149E3AC04C48CCF03E2D46009802600180260018026001802600180203E4043897EA24420643C8643C8F4B697E0370FF006797EF4C0CBC139B49DDF56AF18F3A8FBFE9174C4301B06D488F2DC8046E48AF2ED697FF002DAE7D893FBE4719143CD9FBBF74AC6A5E7D1F7BED99D32487C59CDA442A36248546C22151DED24BE40A87DAA27ECE40C993A28F7A5FFA99AFC23A597BB37DA0491F252CA08B9450B2023DCD8458407FF4BFFE523A2C55D1C7B7D20E6F1BF4B0EEFAC5EA46CDAA50140501C27FE795FEB900420080200801200C802200C8032008803201480220148052008805201860200802180C010C040080600A02900C008010100400404010013000C013000C003004C003004C003004C003004C07C93750816CB75C9170D2AEB62D8BEE971387A479B24498E45A4435223B87F189561A945FFBC0807888F7FD52806CEE86F4238C77DD11C4AE3212793C354FCC88AB22E1706437E41719E3CA03ACAB5A14CB09316A35C453EE9890A1C662B3447E564A843952564EBAF44463C2D238E66F38CBE801BB742A6D1A957D5F33E9B19A8B5A45218A952947C078A4BEE9EFA7DA23323D2645294787100E5D956D3ECD4ADFAB51A5DB90D9386FA27374EA8497A654595C7335699A71A22538DA8B39E3860603CE53AD2A3B7B86DAD72C74B91EE15D510DA2A8DBAE13CD2153DD672B7AF04A70D78172EBE501F4CA35B746B5B772629F406378C19F6FADE97190A5290E3ADCAC12E2B39A8CD5872FF9980D726AB06D7DDDE7CEB85D28502BD4B659A4D45F3CAC129932D2306E1F0506669CDACF9B9C802DDA6ED8D36C2968B72AB1E436997118AD3F19ECC9662C85191E95C6739A0946444AC35E1C803E51BA0DBB229B6E55A5C191408B4A911232645228739E93A45265B7A3946DB88496A23C99B1E501F4AA859B6ED1B758B7A9D4F8BA3875EA6D4A3D6DA35AD7BED096F1F8ECC6799466A3C4F8CC07CF59629F4BDCAEB0E51B4316A4ED69506B4EA166875BA6EF9CA44EE4CCE21BC72A4CC93C4603897FDBD229D6ED5A5C191418B4B911232645268935E93A45265B7A3946871045A88F266C79407E8EB72D7A35B90970E94C9B4D3CE1C890A5AD6E2DC79494A54EAD4B3333528905880ECCC013000C013000C013000C013000C0101F22265DF315EA1C5598BF4EB70CE64CBBE62BD4259896E19C89977CC57A84B312DC33B6134EF98AF50F36625B8677A4B4DB70A0DC18A4CBE4F2E4FCA9819782CB1B33F77D5ACC61342D51F7FD22E95285F9A6302CC5B0B506C4A17CC62598A5A837252AE60B3179B506E4A55CC166296A0EDE94859D3AB644466670938117DB238C9A1963667EEFDD2B169A685B93BDF6CCEA531A4744BFBA63E3626CCCDE165CF06D4C691D12BD462D88E679E165CF06D4C691D1ABD462D89B3270B2E783614691D1ABD463D588E64E165CF077B4A65D4D067E285163262F27E24819124B1E0E3DE87DCC0A79E1C2CBF1FF008CDF6B5936BF34FD43E7622B6E064DAFCD3F50B62296E05A35F9A7EA0B112D41744BF34FD42D88A5B83DAD8FC182FE6D5F19CBF9A437F8AE1F971EDFFC73B8DA3F9B0ECF58BD312D1CE4364D5B33A79C802CC9E720173279C8070DF32D32BFD720024018044028084019004401900640110064029004402900A401100A4030C040100430180218080100C0140520180100202008008080200260018026001800600980060098006009800600980F99EE8D5AB55BB9A0D1DAB3E3DE17948677C478CB6637C4C742B0271E94FA57A24E62D5F4FF007621E5D152B82EEDD36936D5EB4C66D98544526B549A3A55BE4E6BAC20D0932949CAD1A593352B2924B56A32D5880FA8CBA3D912EAF1AA12A153645617F824B75A61724F47D1B8A235F07E83D403654A9D6BAEA91275463415555BE04095210D1C84FE2B2B59672E3FE880E343B7ACAA5CC72441A65360CC74C9A79E65861A7546EF1214A49128CD5CC7C601A225AA71CE92DB304E3C23D29C04A59C8C992B3E7D116A460A3C71C38C079CF1BE1D6A8B2AE2B4E0469F5886F2A037BF54DC651A10F125D2D2F09448E332E7301E8AB6C5BD2A3222D75B88F477958223CD26D6852BE84BBA8CF580D716876C52E2B9021C085062C825696232D34CB6E161C2CC849112B571EA01C1856C5888A7BA706934B4D3E4709F3623C7265790F1C5795395594CB940764DA29339D66A0D25894EB24A4C7969C8E2904AD4A243858E18F2E0603E77B94DEB695F07589516DE6295507329CF23434A5CB65D351675AC908370B3A14479B101A21DC361A374276C0A7DAD092D3C4ADF735A658430A798689F536A6C9BE19A314F2EA301F4744E84E3EE30DC86D6FB5F3AD256935A7F393C64006FE846E36D9486F48F626CA33A715E5E3CA5CB87D000BD361B4F36C3AFB6DBEEFCD34A511295F9A47ACC017A5C469D6DA75E436EBDA9A6D4A22528FF00148F59802E4C8888FBE16FB698E5C6F1A8891CDE571009BE23E542F489C8EE1A3562582B1E2CBCF880EBAA1735BD012854DA946609C251A0D6EA4B1241E0A3E3E249EA33E40192AE0A1C590C46933D86644924A986D6E248D44B3CA832D7C4A56A4F3980D72EE5B7E24B5C393518ED4A6939DC656E24944448373597E611AB0E6D6034D3AE9B76A724E2D3EA2C4A9248370DA6D64A56423223561CD8A88076603E6CABD2F0CE7F2ED438FAD3DEF0E438CD2E94DE317E8F0C0683425F0830AF4BC3D3950DA9EF784E334BA5378C5788D0684BE102F1CEEFF4E5436A7BDE1E78CD2E94DE31388D0684BB3022BCAEFF004E5436A7BDE138D52E94DE315E2341A126CC1DF5B774DCCF40AF29DABCD714CC025B4A54874CD0ADF4C27327156A3C146432707C229232CFF8A3CDCFD706BF0DC12861351D524BF19F343345D515E1767A6A7ED2F7BC30F8D52E94DE3166F11A0D097C20D8577DD7E9A9DB4BDEF0F3C6E974A6F18A711A0D097C20D89BBAEAF4CCEDA5DF785E374BA5378C5388D0684BE106D4DDB747A626ED2EFBC271BA5D29BC629C4A83425F083D96E655DAD4DACCB6E5D424C86D30D4B4A1D756B225699A2C489467AF0331B5C514F3CD4B184D18C7F0E7EB834B8F307A392861196584236BF687545F46D3BFD22BD663A372CA4FBFD22BD6602E9DEE915EB30174EF748AF59808FBEF947332714479D3AF13E6500E2EFA93D2AFEF180A52A4F4ABFBC6016F993D2AFEF180A526474ABFBC603852DC5ADEC56A351E1CA7880D640100440180401100601100601100640110064019004401900A401100A4029004402900C301004010C060086020040300501480600400808020020200800980060098006001802600180260018026001802603E3B51AB42B337759D56B8DCDE946B929AC314EAABBAA3B6FC632CEC2DC3D48C72E7D7AB88070EE3AC536F6DD56DE5DB121150876AC4A948AC55231E7613BED8D134C93A5C15A8CD3C4467A8CF98C07CC694D6E62ADC0DB750E32BBF50BC9089B5FCA6896730CD94B0823D212329E3C12C38CFCA01D94D8336B1735DF16EC93408F58326D869CB8DC75A7D88DA1C5B7209A4C9B491199A8CD3AF1E301D96E6743A6A2E5BD6B77020AE19F6BC4A4CD8B21B52D64F3ACC253A4FB79B0CCE2B409CAA5163ACF9CC074B0DCA0C9ADD8522146B7E2B7569251E4526944E3928A1CC41B4F3551754BE1E295643252359E3AF0C407127C3B6636E21753711B8AD575AAB29996DA321494B089C9D12569F2C905C98EA01EDDA46E7F2EF9BE0B74A5C5F0832FA514D4D4D64824D33478B5BD33196B3C4CCF47C2C7E901E56D5A53D59AA6E5702E26952613CDD677BB523366721A10A5B04E7119A4C925AB88D187200ECE5DB34A52AFF00B6A35462DBF4D66AF4E760312D5A380A794C1BA71DC2C4B043A69E22E62FA807D1771CACC0A9DBD38A25222D20E1CF7A3494538C9505E79B4A094F4634E05914587100F92DA529EB3EC0B3B7438AC1BCD32CD429559651C6E34ECB7D718FFED90922C7E9201DD46A7C8B46E2B366D41B548AA9D3AB958ABA53F38ECA758D3B89FCE2D482FA8079F832694AAC59750A5A2894F725ADCFE4347D22A636CBAC2C9489CF1AF847FD1C148C71C7580D706DBA231B81D22E56A2A535E6E6A16DD44B1D3230A8A9A224AB91397FA25AB1D7C60399BA5D528B56F1C9F38B46A7CCA7C8DE86E4B25B95890EC74250872360B6F4683CA594CB12C08CCC8072EDE5D973EAB73C8DD01D42EB49D0140296ACAF944DEE46CAA1E26466E28CF1F8BE16387380F2F42390E50AC08D3550134438F517194D64D69A72A614D788F4B9351A89B32CB9B500ED2A36F9374AB7E9AED4214FA54DBBD9265BA4BCE2D88C97CBE3586967AD2459B12CA7A8CF9C07D4EB73EDBB6A1B36AD2CE15364CB657A043CB434CC7616B5677979CCB12CEB56541794AE62CC641E72A08A653E9178514A436B913204662DE6D4B49BB21ADE088F1745C59CF7C92B0CBC467880DBA42F06C9A32DF6CEE755CADBE4C11969B29541B7C9EC9C794A1271C70C3296003D45BC7E11AAD4EBCAD6D2D7E0FA7625FD5E2A8C9C597E91F35FD692480F4003E38A3E1ABEB1C545FA8C18422910F2A44620F476A9FC9B71FF006717EF71C6560DCD9FBBEB06B70FE75177FD22E988C60B3DB09420D8950F28DA950A8F77B921E35E9BF6157EDD91B7C4BD2C7BBEB0687FC83A0877BD22FA98EA1C7B08020140191F829FE7A7FF008A01C4014802008807124FCE80040180440180401100601100601100640110064019004401900A401100A4029004402900C301004010C0600860200403005014806004008080200202008009800600980060018026001802600180260018026038D3A0C29D1D51A6C76E5475F96CBC84B883FAD2AC480715348831698EC0A746661B2B4AC92D3284B6D9296586395044403CA6E63B9C46B52D2A4536A6C439959A613E45516DB252889D90E3C591C5A49C2C09CC007A6A850A895175B76A14F8D31D6BE69C7D96DD52797826B2332D60373512232EB8EB2CA1B75EC34CB42492A5E5D49CC65C78726203871EDFA0C53C635362B07A4D362DB2DA3E33CFD445C2FA4015506866E4874E9D14DD9781CA70D96F33B9759690F0C5587D20327D1A8F5071B727C18F2DC675B2B7DA43868FCD3511E1FDC036B9162ADE6DF5B2853ECE24CBA69235233160794F8CB12E601C59547A44A43A895063BE87CC94FA5C690B259A7C9359191E265C9880DB1A2C588C223C56511E3B65836CB49242125CC494E044034F83E0262EF44C668A296B28E484E8FCACDE4E18795AFEB018B8F1D6F21F534853CDE24DBA692352495C781F19620388C50A871BF06A7C66787A4F8B65B4F0CF566D445AF0E500CE9D4FDEA5137B35BD53ACA3E44E8C8F1CDE4E1871EB01A1EA2D1DD94B96EC18EE4A713A371F534837148F34D4658996AE201E42E8B62F6A85596AA63B446209A49B89364435BB50889C849568544A241992B15271C0077542B3A8B4AB5A0DB86CA26C184D92709084AC96BC4D4A59A558962A528CC07608A5D31B65961B88CA198EACEC3496D2496D45C468222C127F5006F458CEAB33AD21C57162A4919E1FDE021B4D6283C89C5BF9B3C3C9E4D5CC021B68D2693296930CB9F0D78736200925294E54912525C4440200EB4FFD9FEE13333F0944F539EE8D2E48D6DD7BA9E52FD3F35CCFF77FB87D2513D4E7BA2647D6DD79CA5FA7E6B97E002E1F4944FD67BA191B5B75E7297E9F9AE5F802B87D2513F59EE8991B5B75E7297E9F9AE7614BDC72E0811EA4C6FC88E6FF008FBDB362E2727C736EE6F20F1F9BC301F6A2C556611FC5CE855F2BD8D4F8FB848CB1B15598D7F3EAEC70CB709B83D2113F59EE8C7C8BADBAF64729353CD733E036E0F4845FD67BA2644D7DD79CA4FA7E6B88B70FB83AFC4FD67BA2644D7DD79CA4D4F35C65B88DC3D7E27EB3DC1321EBEEBD3949A9E6B9DF5A1B9DDC16ECF7E5E9624AD3306C64D238DE18AD0BC71D1AFCC19B8162EE027B56ABF855F2BD838C31AF1892CD9B3F1AFE75FA3D5146AF9FF568BB4B9D80DA34C5BD2E0EAD136973B012B5A99BDAE0EAD136973B00ACA977BDC1D5A26D2E76015950B91EBEB68D1BDA216B23C77CB9C98FFD0FA42B2A6AF075C1D044DA1CEC02B2A66F0AFE3F31176873B01EAA79844FC1F70741136873B01159BC6E0EAF136973B001A9CA4DC0B566D0C42FFC873B0010A8F70745136873B0017C1170743136873B0014A9770743136873B0017C1970741136873B0017C1D70741136873B0014A05C1D5E26D0E76002EF2B83ABC4DA5CEC0022877075789B4B9D800BBD6E0EAD136973B004AD77B5C1D5A26D2E77712B55D0DC1D5626D2E777142D15C05FD5626D2E77701725C1D5626D2E77712B0B2DC1D5226D4E7770AC6178C1D5226D4E777142CD7075389B539DDC0667B83A9C4DA9CEEE02E92E0EA7136A73BB80BA5B83A9C4DA9CEEE0334D7075389B539DDC02D35C1D4A26D4E777019A7B83A944DA9CEEE0334F7075289B539DDC0669EE0EA5136A73BB809A6B83A944DA9CEEE0334B7075389B539DDC06696E0EA7136A73BB809A5B83A9C4DA9CEEE033497075389B539DDC0669AE0EA7136A73BB80BA5B83A9C4DA9CEEE0334D7075289B539DDC0669EE0EA5136A73BB80BA6B83A944DA9CEEE02E9EE0EA5136A73BB809A6B83A944DA9CEEE0269EE0EA5136A73BB809A5B87A9C4DA9CEEE0267B87A9C4DA9CEEE0267B83A9C4DA9CEEE03335C1D4E26D4E7770198DC3D5226D4E777007FE20EA9136973BB80396E0EA9136973BB80CD15C1D5626D4E7770074370F5689B4B9DDC0438F70F5689B4B9DDC04DEB7075689B4B9DDC04DE570F5789B4B9DDC04DE370F5789B4B9DDC01DE37075789B439D8009E0FB83A089B439D8009E0EB87A089B439D8003E0CB83A089B439D8009E09B83A189B439D8009E08B83A189B439D8009E06B87A289B439D8003E04B83A289B439D8009E03B83A289EDDCEC004F00DC3D1C4F6EE7600278BF7074713DBB9D800CF176E1F3227B773B0003C5DB83CC89EDDCEC401F16EE0F3227B773B1019E2CDC1E6C4F6EE76200F8B17079B13DB39D8809E2ADC3CD13DB39D8809E2A5C3CD13DB39D8809E28DC3F927B673B1007C50B83F24F6CE76202789D707E49ED5CEC404F136BFF927B573B1013C4BB879E27B573B1003C4BB839E27B573B2013C49AFF3C4F6AE764033C47B83CE89ED5CEC801F116BFE744F6AE76403FFD9474946383961F5030500A20000C0C0C2F4F4F4ECECECE1E1E2FFFFFF00000000000000000021F904000700FF002C00000000F50305000003C908BADCFE30CA49ABBD38EBCDBBFF60288E64699E68AAAE6CEBBE702CCFF437DC78AEEF7CEFFFC0A070482C1A8FC8A472C96C3A9FD0A8744AAD5AAFD8AC76CBED7ABFE03053402E9BCFE8B47ACD6EBBDFF0B87C4EAFDBEFF8BC7ECFEFFBFF808182838485868788898A8B8C8D8E79019192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBA604BEBFC0C1C2C3C4C5C6C7C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8D309003B474946383961EF020500A20000C0C0C2F4F4F4ECECECE1E1E2FFFFFF00000000000000000021F904000700FF002C00000000EF0205000003AB08BADCFE30CA49ABBD38EBCDBBFF60288E64699E68AAAE6CEB4A432CCF746DDF78AEEF7CEFFFC0A070482C1A8FC8A472C96C3A9FD0A8744AADE604D8AC76CBED7ABFE0B0784C2E9BCFE8B47ACD6EBBDFF0B87C4EAFDBEFF8BC7ECF0707FE808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9FA0A1A2A38704A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7C8C9CAAE09003B89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF610000000467414D410000AFC837058AE90000001974455874536F6674776172650041646F626520496D616765526561647971C9653C000002084944415478DA62FCFFFF3F0325002080981828040001C40263303232A2481CDEDCF6FFD7AF3F0C9F3F7D6708486C47914476354000B1204B6C3C78FDFFDFBF7F193E9E6F67D03195676065F8C6F0EEED4786A6F284FFF296690CFFFEFD65480CB245310C2080E0066C3870EDBFAFAD3A98BDE4A604C3BB37EF187E7DFBC4F0FFDB2386A78FEF3144A74932282ACA33DCE8D904B21E6E084000C10DF8F7EF1FDCD4BB779E325CBD749FE10FD0357F7FFF8578F1EF6F863FCBFB185C4F6E07F27CE16A0102086E00C8E93050DBB188E1E1A327608BFEFCF9CFC0F4F31B83CCE1D50CD776AE6778A0EA86125600018430E0CF1F0604FB1FD0B90A9000FBF896E1CFD2590C97B6AE65102AEE61B876F8018A0100010437E0CF5FA801178E32B03E7FC8C060ECC0C0C0C9C9F067DD2C863B0777323007A4303C15346238727A338A0100018430E037C48047739A1964050518FEDEBFCAC0C8C2C2F0F4D83E860FAAA60C229E190CD7AFBEC04807000184E1829F7A760CB737CF65507CFB8AE1D1ABD70CCFD8451884430A191EBDFC0E0C12CC540B10404CE861A09A56C5C099DDC370F2DA7586473F7E33F006E531BC6512060728231366C20508208C58F8F0F133C36F4D4B0686D47E86EF9FBF30FC92D46578F7FC35C3BFFF8C0C3F7FFEC4300020801861C91294949DC2F2FF7FF9F2156FDA3FB56D0E237252060820464A73234000519C1B01020C002388CEFE369D53580000000049454E44AE42608289504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF610000000467414D410000AFC837058AE90000001974455874536F6674776172650041646F626520496D616765526561647971C9653C000003214944415478DA62FCFFFF3F032500200009736C03200CC450D491583E73A44D8DC40ED9E76C27080E527CBDEE1FFD1ACF5A373C9D4D88062D9042640CFE06B74C25E36CB57C835700B1FCFDF79721D4C394E1DFBFFF0C7FFEFE650019F6E7CF3F865F7FFE30FC06D2BF7F83E8BF401A88A162556D93E12E0008201690867F406FF42FBFC0C02D200997F8F5E73FC3F79F7F80F81FC337280DD2EC6FC406360806000288E52FD080BFFFFE8135F3094AC125BEFD6260F8F39D81E10B1303C30F60307D01BAE0DBCF4F0C8C8CAFC12E82018000620139F12FD0646400D2FC09A8F9C33706868F5F19183E7F036AFEF289E1EBA7B740AFFE037A15E102800062FAFDE737C39F7FFF3034BF076AFE00D2FCF51FC357A0E66F9FDE307CFFFC9AE13F30CCFEFD45B8002080587E815D008A05905F191878BE1F63E0021A28CAF28FE12F0FD07B9C7F18FE08020310682BC8B5D76E3F63F0F37461A8EF5BF21F1416000104F402D0057FFF03A30EE8B41F0C0C5CC0005DB57A1103289C7E03A3969D8D0D68C11F865FC0A8159465646064FACBF0F0CC3B066959090635033B06800062FAF9EB3738EA40210D7236C88F1F3EBE676064636610B7FF0C8CF73F40FFFF64F8FCF61B03B3E23B863F02EF185EBE7C0DC67FFFFE630008202650E2F903F457B60B2B43B6E563A0FFFE31B0B2B03170ABBD636015FACEC0ABF189E10FD092FF0CBF19B824FE313073002D017A0784415E070820965FC054D53F7B0D3C95D95A9900D3C53F062EB9CF0CEF4F0B32F0687E60F8BE9B9941D4E437C3EF2F0C0C6CFC40EF7EF9C6F0FDEB7770C203082046F4BC306BE5DEFF573FAD6578F1F511C3CB3DBC0CF2619F18DE5CF8C720A8FD9FE1F686AF0C8A9E1C0C8CCCFF193E5C60615010F6620008202664CD3B0E9CFAFF1768EA4FA6CF0C4F76B3337CFFF283E1D6AA7F0C7C8AFF197E3E67647873F70BC3F1FE270C1F1E7F6310D0FCCFF00F987E0002880559F3E7AFBF194006BCD927C4F0E6F9330666C6BF0CDF9F7D6778F3F417C37FE65F0CEF5E7F62F8FDEB07C38ED6DB0C92520A0CDED1FF18000208C30B13176C05C7EF1F60E0823311980DCA44A0D882642C50B4FE010636C83280000300F54CE7A2A21C3E630000000049454E44AE42608289504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF610000000467414D410000AFC837058AE90000001974455874536F6674776172650041646F626520496D616765526561647971C9653C0000024D4944415478DA248A410D002010C376D6508116A4A0051DB8B9952C2C69FAE80AD0DC833803CBC1A18551D37287B4EFB36EE5FF04100B4C93BF731458C39FBFBF197E03F19F3F20FA17C3AF3FBF187EFFF9C9F0EBF70F2006D240F6E9B3C71804DC18FF7FD8F59F11208098189E16FF9FC27F9061C6C626B046B066A04688E69F604D3F819A7F823503E95F3F18FE025D03030001C4B263D17286597C560C878A8F32CCBEDCC370EEF2498633E78E8225999898C05E81013945050611095186BFFF10060004108B47E533C61993CCFFCF026A06D90AD2BC28E31203361037438F815788071C1E300010402C202FCC163BC510BCEB2943907D325C42534504AB21A0B0407601400081BD3091D580E150C97986AEE3150CDADAFA609BC080911114C270C5C292C2E070F887640040003182A2CFBD53F7BFB3AD17C34F6088836CF80D0A3858C843695020826303A8E6C9DD270CF72FBC6500C502400081636189FC15862DC79782431BA4F8C7EFEF40F677300D61FF00DB0C360C88FF23B90A208098405E08BDA30A8C852740CD200D10C53F61F10EB21DA8E9F7EF9FD034F10B254C00028809140B7FFFFE6128DB1E0F8EE35F40FC034A83BDF00B493390FE836600400081BDB04EFD3EC3896B7BA17E85E23F08678334FE0627AEDFC018F8836200400081BDE073459A614BE225861F200D406FFC8286C52F70C0010316A81964F3DF7FBF51A21004000208EC0550B4E4EF8A046BFE09B7159A0FFEFE04E78B3F409B9153250C000410383381242E5DB800CC79C0DCC6F01F25EE0901800062844509287731900840E90020C0002F5EC8810FF8949C0000000049454E44AE42608289504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF610000000467414D410000B18E7CFB5193000000206348524D00007A25000080830000F9FF000080E8000075300000EA6000003A970000176F97A999D40000032849444154789C62FCFFFF3F032500208058D005229647447172B0A730B33289FFF9F7EFF7CF5F3FBF317C6578CAFC9965C1929C255BD1D503041023CC05210B439938B95957F2F0727AE929197089B18933FCFFCFC8F0EBE70F86671F9E335CBB7FF9EBFBD79FCEFEFFCE18B5A16CC353980100010436206841301B0F1FE76E751555DB18C55846395E45064620FCF8F713D0907F0C022C020C575E5D66587F691DC3855B67DFFFFAF0CF6673D5966B2003000288016440F8D2B0C9E5A78BFFFFFBF7EF3F0C3CFFF6E2BFE571F7FF26BB1DFFBFFEFC062EDEB6BDEDBF4F8FE713AF264F71905E8000620A9A1D2CCFCDC511ED29EECDC0C8C808F79B30BB10830F9F1B43A0980F032F070F5CBCCCBE9881979B47EA0FC3AF4A101F2080985898190B050484046C65EC5002E7CDCFF70CDE62AE0CF18AE10CEC2CEC60B15FBF7E3330333231B8AB7A313233332580C4000288E9EFDFBF9A9C8C9C8C4C8CCC28069C7C798A21F4443E43D0A11C86575F5E83C598989918FEFE6164D010D56660FCFB0FEC2C800062017AFBDD9F3F7F31E257865392E1DB2F26861FFF3F33FCFDFD13620030607FFDFBC9C0CDCC0934E81F580C20809818FE33BCFFF1FB3BC3DFFFA886B032B130000395E10F30165899592101CE00E4FFFEC3F0E3F70FA0A17FC0010610404C6C7FD86E7CF9F4E9EFB7DFDF500C60636603D31C8C6C0C7C1CDC60F6F7EFDF1998FF3231DC7A719BE1DFDFFFBF41620001C4C4CBCCBBECEB87AF9FD65D588F62C087BF9F198091CAF0FBCF6F86B73F3F4002F11B50CFEFFF0C1B2FAF67F8CFC47401240610404C7332E7BE01A6AE863D97B6FF7DFDF915DC80FBEF1E3170FF0526A25F7F198E3F3DCFC0F0E90F83D07F7E8645A79732BC7CFEE4173B076726481D40008113120887F404CE899F1EFDEFF4F513FFFFFF0286C8E73FFF7FBE7BFFFFCB9B0FFF3FBDF8FCFFC793AFFF67AC99F1DFB1CCF6B763B543394C1F40003122E746EF16CF7A86FF7F2A2484A4393C343C19D40495197E0263E0DCE38B0CBBAFED6278FBE1F567664EB6D6BDADFB3B617A000288113D3BBB36B858FCFFFBAFF9EFEF5F667FFFFC61FA0F0C082626962F2C6CAC1BFF3333F6ED6BDE7F1B593D40800100401473ED28EF8F730000000049454E44AE42608289504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF610000000467414D410000B18E7CFB5193000000206348524D00007A25000080830000F9FF000080E8000075300000EA6000003A970000176F97A999D40000030949444154789C62F8FFFF3F032EFCF2BC1D0F3E791006082026061CE0EA6A46E99F3FBEBD7D7ECEEAFFEEC5EC27DB73B962B1A90308209C0630B13004F1497F6013D29460905262336165F9D39718A8C98AAE0E2080B01A707717233FA7105F169F942C033BE70F066D6B5E26760E063E0D99BB49E86A010208AB01AC9C0CC90272066A0CCC220C8F1F5E61F8F79FE5BFB10303132BDBFF5274B500018461C0C3438C52CCCCE24902F2464C8B16FF64B0B7E76398D82BCC68E5CEC9C2C6F65FB63C513C02593D40006118F0EB2343009F94993603132FC3C183EF18EE3F546238B69F1B28C3C2A063F29F4D98EF6323B27A80004231E0FA1A463E162EC9541E695320EF0D8396F257062606610637C73740FE5F06335B4E0656D67F8A25F15276303D0001846200070F43189F9CB101232BC8C63B0CFA3A6F19E4F81519CC2D7F03F57F65E0E0E3615051F9CB24C0F3A90BA6072080E0067CBDCCC8C7C82E9CC427A30E0A0930E612F8CEC023701788DF33307CF9C3F0F7E73F062B0716662E8E9F465961CA1A207D00018430E013833797B8B2312B27D036864B0C0CFF5E3208F27D6530D13AC7C0C5FA9581E11B03C3FF4F3F180424F918A4A5FEB1488ABC6A03E9030820465072FC7A9E91FFCD07AE8DE2A60EF61C3C7F80B6010DF8F6968181EB2FC3F3DBEC0C92F2DF1918808EF8F5838981515A9CE1F5830F0C2B16FFF9F1ED27BB244000815DF0EE3583079700BF253B0F50D5E76B0C0C6FDF33FC67FEC7B06431134366FD3F86CD5BD88186313030FEFAC7F0FBF5670609391E0671917F6CBFFFB0CC050820A69E026685D7AF598A79F998D818BF00FDFEE215D0AA3F0C3F7FFD65983EFF2FC3C6CDE10C070F4701D336D0A6FF40EACB5786FFDFFF30385AFF67FAF3974D152000004100BEFF0356480323010303790C04FA04F8ECF400F1EDFC00F1EE0000FBF3000017100100271F16005948E300FCF2E600EEF00100F6F40000F5EEF9000501FF00F9F8000A02888593F5FF752EF67F4BB6EEFB99F8FB370323C8AAFFA0C001626616060669D1BD0C474E03C3F41F13589411167DCCA0ECCCF00E20C000518710F60C235EFC0000000049454E44AE42608289504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF610000000467414D410000B18E7CFB5193000000206348524D00007A25000080830000F9FF000080E8000075300000EA6000003A970000176F97A999D4000003FD49444154789C62FCFFFF3F030C1C8E8AE70472ED383838C2D879B88CFFFFFBCFF4E3F3D7FF1FDFBCBBF0E7F7EFF52CCCCCDBDD77ACFFC980040002881166C0FEF018663616967C09658542212539416646468E7FEF3E317C7EF18AE1E5D3E73FDFBDFFF4F1D7AF9FD3999898DABD766EFC0333002080C0061C8D8CE3E4E4E19E2F676618246C6DC0CAC8C8C4C070FF19C31F20FEF8EC05C3972F5F18BE7EFBC6F0E6FDC7DF9F3E7EDECEC8C810EFBD6BD30790010001C4B4C72F94899995A542C1DA345CC4C78EF5D7BFDF0CDFAEDF61F8FDEA0DC3D7F7EF197EFCFCC1F0EDEB57862F1F3F32F07073B0F2F2F3F8FDF9F77FCE4ECF404690010001C4C2C8C46429AEA15A23E460C2F0E5E94B867BBB8F33FC7DFB814188858181E52F03C3FB972F193EB3B03270999A317CB97E8D819585998193933DE8F7CF5F3940FD930102004100BEFF020408085F10282102FEFAF700ECCCD5001A4D5000236C6900EBF6FB00E0D6D900F0FCFE0021615F002F756F00153F3E00FCF9F90007060501FDFFFE66B84750100288898983C39D93958581E9E17306613616069EEF5F18F8E4E518D4F3B2185874B41954B3D21924ECAC193E9D3BCFF0E3D4290616A00B188081C0CCC42CF7FBCF1F7B8000004100BEFF0402FCFB0C05EDF200FEFFFD00FDE6E900EFD4A80007E3E600144C48003686820000030200ECC1C300E49EA200FAF2F1000107070000FCFD0001030302FEFCFD1D0288E9EFF75FFFBF3E06FAF3C94B86AF9FBE32BC7FF49CE1DEBA0D0C5F1E3E042A6262F8F7E70FC3A39D7B183E3E7DCAC0C8C6C6008AB57F8864C00C10404C3F7EFE7CF9EAE56B86CF1F3E33BC7FF19AE12BD006C9A830066E492986CFD76E303000FDAC9A9EC2C06369CEF0EDF357867FFFFE015DFB9FE1FFBF7FA058F8051040CCE1F2CA5240AE1D0B90FB975F804126298E41C6D19EE1DDE1A30C0FA64C67F8014C076276560CC266A60CFF817EFF74EB36C36FA0177EFFFAFD0198D826010410133079CEF9F8F1F3E34F9FBE30B00B0B3288686930BC3D7088E1E102A09F81E9E0F59EBD0CB77A2632B0303332F06BA832FCFEFB07A8F91703E33F86136C2CAC670102089C12B7B90724B0B231CF17141562E0109760F8F1FA0DC3AF376F1998393918FEFDFECD00CC070C5C6A2A0C3F81967C7CF68CE1F78FDFAFD99898233D766ED80B10402CE0F4CCC0B0FAE7CFDFD2AF5FBC6EE178FB9E8185959581918395E12FD0B6FF40C97FC0687E7BFD26C31FA0FF7FFFFEFB959591B90AA8E920482F4000C133D356373F6EA051BEC000AA02FA4B979595898191891918EAFF80B106C4BF81F9E7EFBF4B2C2C2C6D8CFFFEAFF7DCB5F117481F4000312267E7AD6EFE20BE20132393F79F7F7F5D8186C9021DF01F98705E00D3FC7E1616A6AD40B1E79E3B36C03501041800EDE1A9F42E9EDD000000000049454E44AE42608289504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF610000000467414D410000B18E7CFB5193000000206348524D00007A25000080830000F9FF000080E8000075300000EA6000003A970000176F97A999D4000002E849444154789C62FCFFFF3F0325002080584044F1E65C069041BF987E31FF64F8E9FEEBFFAF7476565617867F4C3FFFFFFDC7F0EFEF5FE6DF3F7FFFFAFDFB4F3F3B13C7225E36DE27CC4CCC0CACACAC0C000104368011088148E4DBBF6F6D1CEC1CA93652760C5632B60C7C6C7C5CFFFEFF6360F8F79FE1FACBEB0CFB6EEE6ABDFAEC4A261B1F6B292F27DF0A905E8000021BF09FF93FEBA7DF1FDBA404A553137493185404D5319C2AC927CD60216FC5B0EEF46A99B56757CCFF2FF4FF191F2FFF218000620249FEFCFFD391859D35394E2711AB6618E062E36208378A66B09575E078F2F4F1943F7FFE48000410D880EF7FBF3BE98AE831A90969E00D305038FD67FCCFE0A1E3CD20C02CA4FBF4D1635D8000021BF0E7DFAF787D3123A242FDCFDFDF0CD242720C8AFC4A0C6F5FBF73000820B0012CFF59B95504558932001CDE8C8C0C6AE21A0C4CFF19630002086CC0DFDFFFFE001D4750EFBF7FFFC0F8CFDF3F0C029C820C7FBFFFE5070820B001BF7EFC62F9F1FB0741034061F0E7CF5F86FF4043AEDCBBCCF0E7FF9FCB0001040983DFBF9E9E7B7006AFE6BF7FFF32FCFCF993E1F7AF5F0CEF3FBD67B8FDE426C3EF6FBF67000410240C9858671FBF7984E1DBCFAF70A782431C88C14EFEF307ACF9EBD7AF40CBFE309CB9768AE1D6B31BBFB5CDF46E000410D8003626F62DD79E5C7EBAFCC012865FDF7F3100932DC3B76FDF18BE7FFF0EA6BF7CF902C6BF7FFD6178F2E231C3921DF319F824F96689488A9C030820704A646361BB252FAF9CB7FAE48A85EFDEBEE3F134F6619015956300E5B3BFFFFE308052F38FEF3F19CEDF38CBB060EB6C861FDCDF4E2AABA977FEFAF9EB3F4000B1C09CCCC5C9B54E5145E9EB8E6B5BFB8E5D3BACA52763C460A369C3C0CCCCC270EBE14D867337CF305C7F7285814980799992AA522D070FFB63507800041023C89F298BE3187879F9C0FEFFF9E387D8D3074FEC5E3E7C91CDFC87D9E2DFAFFF3F19D919FE3032332C17939358C9C9C3751218FFBF85A48481B9F41F0340800100EE7547D2AB0B401B0000000049454E44AE426082Dell.Connections.Report.Script.WindowsEventsDell.Connections.Report.Script.ObjectListParseDell.Connections.Report.Script.ObjectListDell.Connections.Report.ParameterControl.RelativeDateTimePickerDell.Connections.Report.ParameterControl.MonitoringObjectXmlPickerDell.Connections.Report.ParameterControl.ComboBoxDell.Connections.Report.ParameterPrompt.TimeZoneDell.Connections.Report.ParameterPrompt.StartDateTimeDell.Connections.Report.ParameterPrompt.EndDateTimeDell.Connections.Report.ParameterPrompt.ObjectListDell.Connections.Report.ParameterPrompt.EventTypeData Warehouse Maine4235c51-407f-4065-8519-a1e57374bc4511inStringLT_Report_QueryValueXmlLT_Report_QueryValueXmlValueNametrueStringLT_Table_QueryValueXmlLT_Table_QueryValueXmlValueNametrueStringtrueSeverityEventTypeListEventLevelIdEventLevelTitleStringNeighborManagementGroupsManagementGroupGuid[ManagementGroupId]NeighborManagementGroupsManagementGroupGuidManagementGroupNametruetrueString[Start Date Base]DateTimeFromString[Start Date Offset Type]Integertrue[Start Date Offset]String[End Date Base]DateTimeToString[End Date Offset Type]Integertrue[End Date Offset]StringTime ZoneStringtruetrue[Time Zone Name]Booleantrue=FalseInteractivetrueStringObjectstrue8.5in0.05intrue0.15in1.5in510.55in0.05in0.15inNoOutput0.3in110.35intrue0.2in=Code.GetLocTable("LT_Report").GetString("R.DescriptionTitle", "[Report Description Title]")0.2inOutput0.05in10.15inElementNormaltrueTitle0.25in=Code.GetLocTable("LT_Report").GetString("R.Title", "[Report Title]")0.75in410.55in0.55in0.15in0.2inNoOutput10.15intrue=Code.GetLocTable("LT_Report").GetString("R.Description", "[Report Description]")1.3in3reportDescriptionTitletrue10.55in0.2inAutoSize0.15in0.1in210.55208in0.64583in../banner_landscape.jpg
0.15in1.95in0.04in18.45in0in=Fields!ManagementGroupDefaultName.ValueAscending=Fields!ManagedEntityTypeDefaultName.ValueAscending=Fields!ManagedEntityDefaultName.ValueAscending1.95intrue3=Fields!ManagedEntityUse.Value <> "Containment"8.45intrue0.2in=Code.GetLocTable("LT_Report").GetString("R.ObjectUseContainment", "[All objects contained by:]")1.95in0.6in28.45in0in1.95intrue0.4in18.45intrue0.19in=Code.FormatString(Code.GetLocTable("LT_Report").GetString("R.ObjectFormatLine2", "{0} {1}"), Fields!ManagementGroupDefaultName.Value, Code.NullFormatString(Code.GetLocTable("LT_Report").GetString("R.ObjectFormatLine2Path", "| {0}"), Fields!Path.Value))1.95intrue0.2in8.45intrue0.2in=Code.FormatString(Code.GetLocTable("LT_Report").GetString("R.ObjectFormatLine1", "{0}: {1}"), Fields!ManagedEntityTypeDefaultName.Value, Fields!ManagedEntityDefaultName.Value)ObjectList0.05inobjectsParameterTitletrueNoOutput0.65in25objectsParameterTitletrue0.7in1.95inNoOutputtrue0.25in248.45intrue0.2in
=Code.FormatString(
Code.GetLocTable("LT_Report").GetString("R.StartEndTimeFormat", "{0} - {1}"),
Code.FormatDateTime("g", Code.GetReportStartDate()),
Code.FormatDateTime("g", Code.GetReportEndDate())
)
0.1inOutputtrue0.25in14true0.05inElementNormaltrueTimeZone0.2in=Parameters!TimeZoneName.Value0.05inOutputtrue0.25in13true0.05inElementNormaltrueEndDate0.2in=Code.FormatDateTime("g", Code.GetReportEndDate())1.95inOutputtrue1.35in128.45inElementNormaltrueType0.2in=Parameters!EventType.Label0.2inNoOutputtrue1.35in111.65intrue0.2in=Code.GetLocTable("LT_Report").GetString("R.EventTypeLabel", "[Event Type Label]")1.85inNoOutputtrue1.35in100.1intrue0.2in:AutoSize2.2in9../gradient_landscape.gif1.95inNoOutputtrue0.45in88.45intrue0.2in=Code.FormatString(Code.GetLocTable("LT_Report").GetString("R.ObjectsFormat", "{0}"), Code.FormatNumber("G", CountRows("ObjectList")))1.85inNoOutputtrue0.45in70.1intrue0.2in:NoOutputtrue0.45in61.85intrue0.2in=Code.GetLocTable("LT_Report").GetString("R.ObjectsLabel", "[Report Objects Label]")1.95inOutputtrue0.05in58.45inElementNormaltrueCreated0.2in=Code.FormatDateTime("g", Code.ToReportDate(DateTime.UtcNow))1.85inNoOutputtrue0.25in40.1intrue0.2in:1.85inNoOutputtrue0.05in30.1intrue0.2in:0.2inNoOutputtrue0.05in21.65intrue0.2in=Code.GetLocTable("LT_Report").GetString("R.GeneratedTimeLabel", "[Report Generated Time Label]")0.2inNoOutputtrue0.25in11.65intrue0.2in=Code.GetLocTable("LT_Report").GetString("R.StartEndTimeLabel", "[Report Start/End Time Label]")Outputtrue0.25intextbox4true0.05inElementNormaltrueStartDate0.2in=Code.FormatDateTime("g", Code.GetReportStartDate())1.55in10.55in2.25in5.70416inab518a51-343d-46c4-b1f8-4ec65faafd95StoredProcedureReportDisplayStringGet=Code.GetCallingManagementGroupId()Dell.Connections.001Dell.Connections.Report.WindowsEvents=Code.GetReportLocLanguageCode()R.%DataWarehouseMainXML_F52E2B61-18A1-11d1-B105-00805F49916B="LT"trueStoredProcedureReportDisplayStringGet=Code.GetCallingManagementGroupId()Dell.Connections.001Dell.Connections.Report.WindowsEvents=Code.GetReportLocLanguageCode()RT.%DataWarehouseMainSystem.StringXML_F52E2B61-18A1-11d1-B105-00805F49916B="LT"true
SELECT '' AS EventLevelId,@AllLabelText AS EventLevelTitle
UNION
SELECT DISTINCT vEventLevel.EventLevelTitle AS EventLevelId, vEventLevel.EventLevelTitle
FROM vEventLevel where vEventLevel.EventLevelId>0 and vEventLevel.EventLevelId<5
=Code.GetLocTable("LT_Report").GetString("R.AllLabel", "[All]")DataWarehouseMainSystem.StringEventLevelIdSystem.ObjectEventLevelTitleStoredProcedureDell_Connections_Report_ReportObjectList=Parameters!ObjectList.ValueDataWarehouseMainSystem.StringManagedEntityDefaultNameSystem.StringPathSystem.StringManagedEntityTypeDefaultNameSystem.Int32ManagedEntityRowIdSystem.StringManagementGroupDefaultNameSystem.StringManagedEntityUse
SELECT ManagementGroupGuid, ManagementGroupDefaultName AS ManagementGroupName
FROM vManagementGroup
DataWarehouseMainSystem.GuidManagementGroupGuidSystem.StringManagementGroupNameStoredProcedureDell_Connections_Report_WindowsEventReportDataGet=Code.ToDbDate(Code.GetReportStartDate())=Code.ToDbDate(Code.GetReportEndDate())=Parameters!ObjectList.Value=Parameters!EventType.Value=Code.GetReportLocLanguageCode()DataWarehouseMainSystem.Int32EventDisplayNumberSystem.DateTimeFirstOccuranceTimeSystem.DateTimeLastOccuranceTimeSystem.Int32RepeatCountSystem.StringRuleDefaultNameSystem.StringEventLevelTitleSystem.StringEventCategoryTitleSystem.StringEventPublisherNameSystem.StringRenderedDescriptionSystem.StringManagedEntityDefaultNameSystem.GuidManagedEntityGuidSystem.StringPathSystem.StringManagedEntityTypeDefaultNameSystem.StringManagementGroupDefaultNameSystem.GuidManagementGroupGuidSystem.Byte[]ImageMicrosoft.EnterpriseManagement.Reporting.Code, Version=6.0.0.0, Culture=neutral
Const LocTableStringQuery As String = "R/S[@N='{0}']/text()"
Const TimeZoneParameterName As String = "TimeZone"
Const SD_BaseTypeParameterName As String = "StartDate_BaseType"
Const SD_BaseValueParameterName As String = "StartDate_BaseValue"
Const SD_OffsetTypeParameterName As String = "StartDate_OffsetType"
Const SD_OffsetValueParameterName As String = "StartDate_OffsetValue"
Const ED_BaseTypeParameterName As String = "EndDate_BaseType"
Const ED_BaseValueParameterName As String = "EndDate_BaseValue"
Const ED_OffsetTypeParameterName As String = "EndDate_OffsetType"
Const ED_OffsetValueParameterName As String = "EndDate_OffsetValue"
Const IsRelativeTimeSupported As Boolean = False
Const TimeTypeParameterName As String = "TimeType"
Const TimeWeekMapParameterName As String = "TimeWeekMap"
Dim LocTables As System.Collections.Generic.Dictionary(Of String, Microsoft.EnterpriseManagement.Reporting.XmlStringTable)
Dim ReportTimeZone As Microsoft.EnterpriseManagement.Reporting.TimeZoneCoreInformation
Dim ReportStartDate As DateTime
Dim ReportEndDate As DateTime
Dim ReportTime As Microsoft.EnterpriseManagement.Reporting.ParameterProcessor.RelativeTime
Dim ReportCulture As System.Globalization.CultureInfo
Dim ParameterProcessor As Microsoft.EnterpriseManagement.Reporting.ParameterProcessor
Protected Overrides Sub OnInit()
LocTables = new System.Collections.Generic.Dictionary(Of String, Microsoft.EnterpriseManagement.Reporting.XmlStringTable)()
ReportTimeZone = Nothing
ReportStartDate = DateTime.MinValue
ReportEndDate = DateTime.MinValue
ReportTime = Nothing
ReportCulture = System.Globalization.CultureInfo.GetCultureInfo(Report.User("Language"))
ParameterProcessor = New Microsoft.EnterpriseManagement.Reporting.ParameterProcessor(ReportCulture)
End Sub
Public Function GetCallingManagementGroupId() As String
Return Microsoft.EnterpriseManagement.Reporting.ReportingConfiguration.ManagementGroupId
End Function
Public Function GetReportLocLanguageCode() As String
Return ReportCulture.ThreeLetterWindowsLanguageName
End Function
Public Function GetLocTable(Name As String) As Microsoft.EnterpriseManagement.Reporting.XmlStringTable
Dim LocTable As Microsoft.EnterpriseManagement.Reporting.XmlStringTable
If Not LocTables.TryGetValue(Name, LocTable) Then
LocTable = New Microsoft.EnterpriseManagement.Reporting.XmlStringTable(LocTableStringQuery, Report.Parameters(Name).Value)
LocTables.Add(Name, LocTable)
End If
Return LocTable
End Function
Public Function GetReportTimeZone() As Microsoft.EnterpriseManagement.Reporting.TimeZoneCoreInformation
If IsNothing(ReportTimeZone) Then ReportTimeZone = Microsoft.EnterpriseManagement.Reporting.TimeZoneCoreInformation.FromValueString(Report.Parameters(TimeZoneParameterName).Value)
Return ReportTimeZone
End Function
Public Function ToDbDate(ByVal DateValue As DateTime) As DateTime
return GetReportTimeZone.ToUniversalTime(DateValue)
End Function
Public Function ToReportDate(ByVal DateValue As DateTime) As DateTime
return GetReportTimeZone.ToLocalTime(DateValue)
End Function
Public Function GetReportStartDate() As DateTime
If (ReportStartDate = DateTime.MinValue) Then
If (IsRelativeTimeSupported) Then
ReportStartDate = ParameterProcessor.GetDateTime(ToReportDate(DateTime.UtcNow), Report.Parameters(SD_BaseTypeParameterName).Value, Report.Parameters(SD_BaseValueParameterName).Value, Report.Parameters(SD_OffsetTypeParameterName).Value, Report.Parameters(SD_OffsetValueParameterName).Value, Report.Parameters(TimeTypeParameterName).Value)
Else
ReportStartDate = ParameterProcessor.GetDateTime(ToReportDate(DateTime.UtcNow), Report.Parameters(SD_BaseTypeParameterName).Value, Report.Parameters(SD_BaseValueParameterName).Value, Report.Parameters(SD_OffsetTypeParameterName).Value, Report.Parameters(SD_OffsetValueParameterName).Value)
End if
End If
return ReportStartDate
End Function
Public Function GetReportEndDate() As DateTime
If (ReportEndDate = DateTime.MinValue) Then
If (IsRelativeTimeSupported) Then
ReportEndDate = ParameterProcessor.GetDateTime(ToReportDate(DateTime.UtcNow), Report.Parameters(ED_BaseTypeParameterName).Value, Report.Parameters(ED_BaseValueParameterName).Value, Report.Parameters(ED_OffsetTypeParameterName).Value, Report.Parameters(ED_OffsetValueParameterName).Value, Report.Parameters(TimeTypeParameterName).Value)
If IsBusinessHours(GetReportTimeFilter()) Then ReportEndDate = ReportCulture.Calendar.AddDays(ReportEndDate, 1)
Else
ReportEndDate = ParameterProcessor.GetDateTime(ToReportDate(DateTime.UtcNow), Report.Parameters(ED_BaseTypeParameterName).Value, Report.Parameters(ED_BaseValueParameterName).Value, Report.Parameters(ED_OffsetTypeParameterName).Value, Report.Parameters(ED_OffsetValueParameterName).Value)
End if
End If
return ReportEndDate
End Function
Public Function GetReportTimeFilter() As Microsoft.EnterpriseManagement.Reporting.ParameterProcessor.RelativeTime
If IsNothing(ReportTime) Then ReportTime = New Microsoft.EnterpriseManagement.Reporting.ParameterProcessor.RelativeTime(Report.Parameters(TimeTypeParameterName).Value, Report.Parameters(SD_BaseValueParameterName).Value, Report.Parameters(ED_BaseValueParameterName).Value, CStr(Join(Report.Parameters(TimeWeekMapParameterName).Value, ",")))
return ReportTime
End Function
Public Function IsBusinessHours(Value As Microsoft.EnterpriseManagement.Reporting.ParameterProcessor.RelativeTime) As Boolean
return (Not IsNothing(Value)) And (Value.TimeType = Microsoft.EnterpriseManagement.Reporting.ParameterProcessor.RelativeTimeType.Business)
End Function
Public Function FormatDateTime(Format As String, Value As DateTime) As String
return Value.ToString(Format, ReportCulture)
End Function
Public Function FormatNumber(Format As String, Value As Decimal) As String
return Value.ToString(Format, ReportCulture)
End Function
Public Function FormatString(Format As String, ParamArray Values() as Object) As String
return String.Format(ReportCulture, Format, Values)
End Function
Public Function NullFormatString(Format As String, Value as String) As String
return IIF(String.IsNullOrEmpty(Value), String.Empty, String.Format(ReportCulture, Format, Value))
End Function
Public Function FormatBusinessHours(Format As String, Value As Microsoft.EnterpriseManagement.Reporting.ParameterProcessor.RelativeTime) As String
Dim result As String
If IsBusinessHours(Value) Then
Dim firstDay As DayOfWeek
Dim days As System.Collections.Generic.List(Of String)
firstDay = ReportCulture.DateTimeFormat.FirstDayOfWeek
days = new System.Collections.Generic.List(Of String)()
For loopDay As DayOfWeek = DayOfWeek.Sunday To DayOfWeek.Saturday
Dim day As DayOfWeek
day = CType((CInt(loopDay) + CInt(firstDay)) Mod 7, DayOfWeek)
If value.WeekMap.Contains(day) Then days.Add(ReportCulture.DateTimeFormat.GetAbbreviatedDayName(day))
Next loopDay
result = FormatString(Format, DateTime.Today.Add(Value.StartTime).ToString(ReportCulture.DateTimeFormat.ShortTimePattern), DateTime.Today.Add(Value.EndTime).ToString(ReportCulture.DateTimeFormat.ShortTimePattern), String.Join(",", days.ToArray()))
Else
result = String.Empty
End if
return result
End Function
Public Function BuildXmlValueList(ByVal ValueList() As Object) As String
Return Microsoft.EnterpriseManagement.Reporting.MultiValueParameter.ToXml("Data", "Value", ValueList)
End Function
10.9in11inen-US8.95in0.1in11.7intrue0.1875in=string.Format(Code.GetLocTable("LT_Report").GetString("R.PageFormat", "{0}/{1}"), Globals!PageNumber, Globals!TotalPages)0.15in0.1in8.75intrue0.1875in=string.Format(Code.GetLocTable("LT_Report").GetString("R.TimeZoneFormat", "{0}"), Parameters!TimeZoneName.Value)0.35intruetrue8.5inDell.Connections.Report.Script.FirmwareAndDriverVerDataGetDell.Connections.Report.Script.ObjectListParseDell.Connections.Report.Script.ObjectListDell.Connections.Report.ParameterControl.RelativeDateTimePickerDell.Connections.Report.ParameterControl.MonitoringObjectXmlPickerDell.Connections.Report.ParameterPrompt.TimeZoneDell.Connections.Report.ParameterPrompt.StartDateTimeDell.Connections.Report.ParameterPrompt.EndDateTimeDell.Connections.Report.ParameterPrompt.ObjectListData Warehouse Maine4235c51-407f-4065-8519-a1e57374bc4511inStringLT_Report_QueryValueXmlLT_Report_QueryValueXmlValueNametrueStringLT_Table_QueryValueXmlLT_Table_QueryValueXmlValueNametrueStringNeighborManagementGroupsManagementGroupGuidManagementGroupIdNeighborManagementGroupsManagementGroupGuidManagementGroupNametruetrueString[Start Date Base]DateTimeFromString[Start Date Offset Type]Integertrue[Start Date Offset]String[End Date Base]DateTimeToString[End Date Offset Type]Integertrue[End Date Offset]StringTime ZoneStringtruetrue[Time Zone Name]Booleantrue=FalseInteractivetrueStringObjectstrue8.5in0.05intrueAutoSize0.15in0.1in610.55208in0.64583in../banner_landscape.jpg0.15in1.5in510.55in0.05in0.15inNoOutput0.3in110.35intrue0.2in=Code.GetLocTable("LT_Report").GetString("R.DescriptionTitle", "[Report Description Title]")0.2inOutput0.05in10.15inElementNormaltrueTitle0.25in=Code.GetLocTable("LT_Report").GetString("R.Title", "[Report Title]")0.75in410.55in0.55in0.15in0.2inNoOutput10.15intrue=Code.GetLocTable("LT_Report").GetString("R.Description", "[Report Description]")1.3in3reportDescriptionTitletrue10.55in0.2in0.15in0.00104in1.95in0.04in18.45in0in=Fields!ManagementGroupDefaultName.ValueAscending=Fields!ManagedEntityTypeDefaultName.ValueAscending=Fields!ManagedEntityDefaultName.ValueAscending1.95intrue3=Fields!ManagedEntityUse.Value <> "Containment"8.45intrue0.2in=Code.GetLocTable("LT_Report").GetString("R.ObjectUseContainment", "[All objects contained by:]")1.95in0.6in28.45in0in1.95intrue0.4in18.45intrue0.19in=Code.FormatString(Code.GetLocTable("LT_Report").GetString("R.ObjectFormatLine2", "{0} {1}"), Fields!ManagementGroupDefaultName.Value, Code.NullFormatString(Code.GetLocTable("LT_Report").GetString("R.ObjectFormatLine2Path", "| {0}"), Fields!Path.Value))1.95intrue0.2in8.45intrue0.2in=Code.FormatString(Code.GetLocTable("LT_Report").GetString("R.ObjectFormatLine1", "{0}: {1}"), Fields!ManagedEntityTypeDefaultName.Value, Fields!ManagedEntityDefaultName.Value)ObjectList0.05inobjectsParameterTitletrueNoOutput0.65in16objectsParameterTitletrue0.7in1.95inNoOutputtrue0.45in148.4intrue0.2in=Code.FormatString(Code.GetLocTable("LT_Report").GetString("R.ObjectsFormat", "{0}"), Code.FormatNumber("G", CountRows("ObjectList")))1.85inNoOutputtrue0.45in130.1intrue0.2in:NoOutputtrue0.45in121.85intrue0.2in=Code.GetLocTable("LT_Report").GetString("R.ObjectsLabel", "[Report Objects Label]")AutoSize1.65in9../gradient_landscape.gif0.1inOutputtrue0.25in8true0.05inElementNormaltrueTimeZone0.2in=Parameters!TimeZoneName.Value0.05inOutputtrue0.25in7true0.05inElementNormaltrueEndDate0.2in=Code.FormatDateTime("g", Code.GetReportEndDate())Outputtrue0.25in6true0.05inElementNormaltrueStartDate0.2in=Code.FormatDateTime("g", Code.GetReportStartDate())1.95inOutputtrue0.05in58.4inElementNormaltrueCreated0.2in=Code.FormatDateTime("g", Code.ToReportDate(DateTime.UtcNow))1.85inNoOutputtrue0.25in40.1intrue0.2in:1.85inNoOutputtrue0.05in30.1intrue0.2in:0.2inNoOutputtrue0.05in21.65intrue0.2in=Code.GetLocTable("LT_Report").GetString("R.GeneratedTimeLabel", "[Report Generated Time Label]")1.95inNoOutputtrue0.25in18.4intrue0.2in=Code.FormatString(Code.GetLocTable("LT_Report").GetString("R.StartEndTimeFormat", "{0} - {1}"), Code.FormatDateTime("g", Code.GetReportStartDate()), Code.FormatDateTime("g", Code.GetReportEndDate()))0.2inNoOutputtrue0.25in1.65intrue0.2in=Code.GetLocTable("LT_Report").GetString("R.StartEndTimeLabel", "[Report Start/End Time Label]")1.55in210.55208in1.70208in1.39375inOutput0.15in2.95in0.2inOutputtrue7true0.05inElementNormaltrueLastModified0.2in=Code.FormatDateTime("g", Code.ToReportDate(Fields!DWLastModifiedDateTime.Value))0.35inOutputtrue6true0.05inElementNormaltrueManagementGroup0.2in=Fields!ManagementGroupDefaultName.Value0.4inOutputtrue5true0.04792inElementNormaltrueName0.2in=Fields!ManagedEntityDefaultName.Value0.3inOutputtrue4true0.05inElementNormaltruePath0.2in=Fields!Path.Value0.25inOutputtrue3true0.05inElementNormaltrueType0.2in=Fields!ManagedEntityTypeDefaultName.Value0.3inNoOutputtrue2ElementNormaltrueDisplayName10.2in=Code.FormatString(Code.GetLocTable("LT_Report").GetString("R.ObjectFormatLine1", "{0}: {1}"), Fields!ManagedEntityTypeDefaultName.Value, Fields!ManagedEntityDefaultName.Value)0.3inNoOutputtrue0.2in1ElementNormaltrueDisplayName2=Code.FormatString(Code.GetLocTable("LT_Report").GetString("R.ObjectFormatLine2", "{0} {1}"), Fields!ManagementGroupDefaultName.Value, Code.NullFormatString(Code.GetLocTable("LT_Report").GetString("R.ObjectFormatLine2Path", "| {0}"), Fields!Path.Value))AutoSizeimage/png0.3in0.4in=Fields!Image.Value1=Fields!ManagedEntityTypeDefaultName.ValueAscending=Fields!ManagedEntityDefaultName.ValueAscending=Fields!ManagementGroupDefaultName.ValueAscending=Fields!Path.ValueAscendingObjectsObject=Fields!ManagedEntityRowId.ValuePropertyDefaultName1ElementNormaltruePropertyName0.2in=Fields!PropertyDefaultName.ValueOutput0.2in=IIF(Fields!RelatedManagedEntityRowId.Value = Fields!ManagedEntityRowId.Value, True, False)ElementNormaltrueTypeName=Fields!TypeName.Value2PropertiesProperty=Fields!PropertyGuid.Value0.4inPropertyTableList4.25inPropertyValue4.34375inNoOutput3true=Fields!ManagedEntityTypeDefaultName.Value + Fields!ManagedEntityDefaultName.Value + Fields!ManagementGroupDefaultName.Value + Fields!Path.ValueRow=Code.GetLocTable("LT_Table").GetString("RT.Column.ObjectLabel", "[Objects]")0.80208in0.40208inOutputPropertyValueElementNormaltrueValue=Fields!PropertyValue.Value5.11042inab518a51-343d-46c4-b1f8-4ec65faafd95StoredProcedureReportDisplayStringGet=Code.GetCallingManagementGroupId()Dell.Connections.001Dell.Connections.Report.FirmwareAndDriverVersion=Code.GetReportLocLanguageCode()R.%DataWarehouseMainSystem.StringXML_F52E2B61-18A1-11d1-B105-00805F49916B="LT"StoredProcedureReportDisplayStringGet=Code.GetCallingManagementGroupId()Dell.Connections.001Dell.Connections.Report.FirmwareAndDriverVersion=Code.GetReportLocLanguageCode()RT.%DataWarehouseMainSystem.StringXML_F52E2B61-18A1-11d1-B105-00805F49916B="LT"trueStoredProcedureDell_Connections_Report_ReportObjectList=Parameters!ObjectList.ValueDataWarehouseMainSystem.StringManagedEntityDefaultNameSystem.StringPathSystem.StringManagedEntityTypeDefaultNameSystem.Int32ManagedEntityRowIdSystem.StringManagementGroupDefaultNameSystem.StringManagedEntityUse
SELECT ManagementGroupGuid, ManagementGroupDefaultName AS ManagementGroupName
FROM vManagementGroup
DataWarehouseMainSystem.GuidManagementGroupGuidSystem.StringManagementGroupNameStoredProcedureDell_Connections_Report_FirmwareamdDriverVerDataGet=Code.GetReportLocLanguageCode()=Code.ToDbDate(Code.GetReportStartDate())=Code.ToDbDate(Code.GetReportEndDate())=Parameters!ObjectList.ValueDataWarehouseMainSystem.GuidTypeGuidSystem.StringTypeNameSystem.GuidPropertyGuidSystem.DateTimeDWLastModifiedDateTimeSystem.DateTimeFromDateTimeSystem.Int32ManagedEntityRowIdSystem.StringPropertyValueSystem.StringRelatedManagedEntityDefaultNameSystem.Int32RelatedManagedEntityRowIdSystem.GuidManagedEntityGuidSystem.StringManagedEntityDefaultNameSystem.StringPathSystem.StringManagementGroupDefaultNameSystem.GuidManagementGroupGuidSystem.StringManagedEntityTypeDefaultNameSystem.Byte[]ImageSystem.StringPropertyDefaultNameSystem.StringPropertyDefaultDescriptionMicrosoft.EnterpriseManagement.Reporting.Code, Version=6.0.0.0, Culture=neutral
Const LocTableStringQuery As String = "R/S[@N='{0}']/text()"
Const TimeZoneParameterName As String = "TimeZone"
Const SD_BaseTypeParameterName As String = "StartDate_BaseType"
Const SD_BaseValueParameterName As String = "StartDate_BaseValue"
Const SD_OffsetTypeParameterName As String = "StartDate_OffsetType"
Const SD_OffsetValueParameterName As String = "StartDate_OffsetValue"
Const ED_BaseTypeParameterName As String = "EndDate_BaseType"
Const ED_BaseValueParameterName As String = "EndDate_BaseValue"
Const ED_OffsetTypeParameterName As String = "EndDate_OffsetType"
Const ED_OffsetValueParameterName As String = "EndDate_OffsetValue"
Const IsRelativeTimeSupported As Boolean = False
Const TimeTypeParameterName As String = "TimeType"
Const TimeWeekMapParameterName As String = "TimeWeekMap"
Dim LocTables As System.Collections.Generic.Dictionary(Of String, Microsoft.EnterpriseManagement.Reporting.XmlStringTable)
Dim ReportTimeZone As Microsoft.EnterpriseManagement.Reporting.TimeZoneCoreInformation
Dim ReportStartDate As DateTime
Dim ReportEndDate As DateTime
Dim ReportTime As Microsoft.EnterpriseManagement.Reporting.ParameterProcessor.RelativeTime
Dim ReportCulture As System.Globalization.CultureInfo
Dim ParameterProcessor As Microsoft.EnterpriseManagement.Reporting.ParameterProcessor
Protected Overrides Sub OnInit()
LocTables = new System.Collections.Generic.Dictionary(Of String, Microsoft.EnterpriseManagement.Reporting.XmlStringTable)()
ReportTimeZone = Nothing
ReportStartDate = DateTime.MinValue
ReportEndDate = DateTime.MinValue
ReportTime = Nothing
ReportCulture = System.Globalization.CultureInfo.GetCultureInfo(Report.User("Language"))
ParameterProcessor = New Microsoft.EnterpriseManagement.Reporting.ParameterProcessor(ReportCulture)
End Sub
Public Function GetCallingManagementGroupId() As String
Return Microsoft.EnterpriseManagement.Reporting.ReportingConfiguration.ManagementGroupId
End Function
Public Function GetReportLocLanguageCode() As String
Return ReportCulture.ThreeLetterWindowsLanguageName
End Function
Public Function GetLocTable(Name As String) As Microsoft.EnterpriseManagement.Reporting.XmlStringTable
Dim LocTable As Microsoft.EnterpriseManagement.Reporting.XmlStringTable
If Not LocTables.TryGetValue(Name, LocTable) Then
LocTable = New Microsoft.EnterpriseManagement.Reporting.XmlStringTable(LocTableStringQuery, Report.Parameters(Name).Value)
LocTables.Add(Name, LocTable)
End If
Return LocTable
End Function
Public Function GetReportTimeZone() As Microsoft.EnterpriseManagement.Reporting.TimeZoneCoreInformation
If IsNothing(ReportTimeZone) Then ReportTimeZone = Microsoft.EnterpriseManagement.Reporting.TimeZoneCoreInformation.FromValueString(Report.Parameters(TimeZoneParameterName).Value)
Return ReportTimeZone
End Function
Public Function ToDbDate(ByVal DateValue As DateTime) As DateTime
return GetReportTimeZone.ToUniversalTime(DateValue)
End Function
Public Function ToReportDate(ByVal DateValue As DateTime) As DateTime
return GetReportTimeZone.ToLocalTime(DateValue)
End Function
Public Function GetReportStartDate() As DateTime
If (ReportStartDate = DateTime.MinValue) Then
If (IsRelativeTimeSupported) Then
ReportStartDate = ParameterProcessor.GetDateTime(ToReportDate(DateTime.UtcNow), Report.Parameters(SD_BaseTypeParameterName).Value, Report.Parameters(SD_BaseValueParameterName).Value, Report.Parameters(SD_OffsetTypeParameterName).Value, Report.Parameters(SD_OffsetValueParameterName).Value, Report.Parameters(TimeTypeParameterName).Value)
Else
ReportStartDate = ParameterProcessor.GetDateTime(ToReportDate(DateTime.UtcNow), Report.Parameters(SD_BaseTypeParameterName).Value, Report.Parameters(SD_BaseValueParameterName).Value, Report.Parameters(SD_OffsetTypeParameterName).Value, Report.Parameters(SD_OffsetValueParameterName).Value)
End if
End If
return ReportStartDate
End Function
Public Function GetReportEndDate() As DateTime
If (ReportEndDate = DateTime.MinValue) Then
If (IsRelativeTimeSupported) Then
ReportEndDate = ParameterProcessor.GetDateTime(ToReportDate(DateTime.UtcNow), Report.Parameters(ED_BaseTypeParameterName).Value, Report.Parameters(ED_BaseValueParameterName).Value, Report.Parameters(ED_OffsetTypeParameterName).Value, Report.Parameters(ED_OffsetValueParameterName).Value, Report.Parameters(TimeTypeParameterName).Value)
If IsBusinessHours(GetReportTimeFilter()) Then ReportEndDate = ReportCulture.Calendar.AddDays(ReportEndDate, 1)
Else
ReportEndDate = ParameterProcessor.GetDateTime(ToReportDate(DateTime.UtcNow), Report.Parameters(ED_BaseTypeParameterName).Value, Report.Parameters(ED_BaseValueParameterName).Value, Report.Parameters(ED_OffsetTypeParameterName).Value, Report.Parameters(ED_OffsetValueParameterName).Value)
End if
End If
return ReportEndDate
End Function
Public Function GetReportTimeFilter() As Microsoft.EnterpriseManagement.Reporting.ParameterProcessor.RelativeTime
If IsNothing(ReportTime) Then ReportTime = New Microsoft.EnterpriseManagement.Reporting.ParameterProcessor.RelativeTime(Report.Parameters(TimeTypeParameterName).Value, Report.Parameters(SD_BaseValueParameterName).Value, Report.Parameters(ED_BaseValueParameterName).Value, CStr(Join(Report.Parameters(TimeWeekMapParameterName).Value, ",")))
return ReportTime
End Function
Public Function IsBusinessHours(Value As Microsoft.EnterpriseManagement.Reporting.ParameterProcessor.RelativeTime) As Boolean
return (Not IsNothing(Value)) And (Value.TimeType = Microsoft.EnterpriseManagement.Reporting.ParameterProcessor.RelativeTimeType.Business)
End Function
Public Function FormatDateTime(Format As String, Value As DateTime) As String
return Value.ToString(Format, ReportCulture)
End Function
Public Function FormatNumber(Format As String, Value As Decimal) As String
return Value.ToString(Format, ReportCulture)
End Function
Public Function FormatString(Format As String, ParamArray Values() as Object) As String
return String.Format(ReportCulture, Format, Values)
End Function
Public Function NullFormatString(Format As String, Value as String) As String
return IIF(String.IsNullOrEmpty(Value), String.Empty, String.Format(ReportCulture, Format, Value))
End Function
Public Function FormatBusinessHours(Format As String, Value As Microsoft.EnterpriseManagement.Reporting.ParameterProcessor.RelativeTime) As String
Dim result As String
If IsBusinessHours(Value) Then
Dim firstDay As DayOfWeek
Dim days As System.Collections.Generic.List(Of String)
firstDay = ReportCulture.DateTimeFormat.FirstDayOfWeek
days = new System.Collections.Generic.List(Of String)()
For loopDay As DayOfWeek = DayOfWeek.Sunday To DayOfWeek.Saturday
Dim day As DayOfWeek
day = CType((CInt(loopDay) + CInt(firstDay)) Mod 7, DayOfWeek)
If value.WeekMap.Contains(day) Then days.Add(ReportCulture.DateTimeFormat.GetAbbreviatedDayName(day))
Next loopDay
result = FormatString(Format, DateTime.Today.Add(Value.StartTime).ToString(ReportCulture.DateTimeFormat.ShortTimePattern), DateTime.Today.Add(Value.EndTime).ToString(ReportCulture.DateTimeFormat.ShortTimePattern), String.Join(",", days.ToArray()))
Else
result = String.Empty
End if
return result
End Function
Public Function BuildXmlValueList(ByVal ValueList() As Object) As String
Return Microsoft.EnterpriseManagement.Reporting.MultiValueParameter.ToXml("Data", "Value", ValueList)
End Function
10.8in11inen-US8.95in0.1in11.7intrue0.1875in=string.Format(Code.GetLocTable("LT_Report").GetString("R.PageFormat", "{0}/{1}"), Globals!PageNumber, Globals!TotalPages)0.15in0.1in8.75intrue0.1875in=string.Format(Code.GetLocTable("LT_Report").GetString("R.TimeZoneFormat", "{0}"), Parameters!TimeZoneName.Value)0.35intruetrue8.5inDell.Connections.Report.Script.ESMLogDataGetDell.Connections.Report.Script.ObjectListParseDell.Connections.Report.Script.ObjectListDell.Connections.Report.ParameterControl.RelativeDateTimePickerDell.Connections.Report.ParameterControl.MonitoringObjectXmlPickerDell.Connections.Report.ParameterControl.ComboBoxDell.Connections.Report.ParameterPrompt.TimeZoneDell.Connections.Report.ParameterPrompt.StartDateTimeDell.Connections.Report.ParameterPrompt.EndDateTimeDell.Connections.Report.ParameterPrompt.ObjectListData Warehouse Maine4235c51-407f-4065-8519-a1e57374bc4511inStringLT_Report_QueryValueXmlLT_Report_QueryValueXmlValueNametrueStringLT_Table_QueryValueXmlLT_Table_QueryValueXmlValueNametrueStringNeighborManagementGroupsManagementGroupGuid[ManagementGroupId]NeighborManagementGroupsManagementGroupGuidManagementGroupNametruetrueString[Start Date Base]DateTimeFromString[Start Date Offset Type]Integertrue[Start Date Offset]String[End Date Base]DateTimeToString[End Date Offset Type]Integertrue[End Date Offset]StringTime ZoneStringtruetrue[Time Zone Name]Booleantrue=FalseInteractivetrueStringObjectstrue8.5in0.05intrue0.15in1.5in510.55in0.05in0.15inNoOutput0.3in110.35intrue0.2in=Code.GetLocTable("LT_Report").GetString("R.DescriptionTitle", "[Report Description Title]")0.2inOutput0.05in10.15inElementNormaltrueTitle0.25in=Code.GetLocTable("LT_Report").GetString("R.Title", "[Report Title]")0.75in410.55in0.55in0.15in0.2inNoOutput10.15intrue=Code.GetLocTable("LT_Report").GetString("R.Description", "[Report Description]")1.3in3reportDescriptionTitletrue10.55in0.2inAutoSize0.15in0.1in210.55208in0.64583in../banner_landscape.jpg
0.15in1.95in0.04in18.45in0in=Fields!ManagementGroupDefaultName.ValueAscending=Fields!ManagedEntityTypeDefaultName.ValueAscending=Fields!ManagedEntityDefaultName.ValueAscending1.95intrue3=Fields!ManagedEntityUse.Value <> "Containment"8.45intrue0.2in=Code.GetLocTable("LT_Report").GetString("R.ObjectUseContainment", "[All objects contained by:]")1.95in0.6in28.45in0in1.95intrue0.4in18.45intrue0.19in=Code.FormatString(Code.GetLocTable("LT_Report").GetString("R.ObjectFormatLine2", "{0} {1}"), Fields!ManagementGroupDefaultName.Value, Code.NullFormatString(Code.GetLocTable("LT_Report").GetString("R.ObjectFormatLine2Path", "| {0}"), Fields!Path.Value))1.95intrue0.2in8.45intrue0.2in=Code.FormatString(Code.GetLocTable("LT_Report").GetString("R.ObjectFormatLine1", "{0}: {1}"), Fields!ManagedEntityTypeDefaultName.Value, Fields!ManagedEntityDefaultName.Value)ObjectList0.05inobjectsParameterTitletrueNoOutput0.65in25objectsParameterTitletrue0.7in1.95inNoOutputtrue0.25in248.45intrue0.2in
=Code.FormatString(
Code.GetLocTable("LT_Report").GetString("R.StartEndTimeFormat", "{0} - {1}"),
Code.FormatDateTime("g", Code.GetReportStartDate()),
Code.FormatDateTime("g", Code.GetReportEndDate())
)
0.1inOutputtrue0.25in14true0.05inElementNormaltrueTimeZone0.2in=Parameters!TimeZoneName.Value0.05inOutputtrue0.25in13true0.05inElementNormaltrueEndDate0.2in=Code.FormatDateTime("g", Code.GetReportEndDate())AutoSize2.2in9../gradient_landscape.gif1.95inNoOutputtrue0.45in88.45intrue0.2in=Code.FormatString(Code.GetLocTable("LT_Report").GetString("R.ObjectsFormat", "{0}"), Code.FormatNumber("G", CountRows("ObjectList")))1.85inNoOutputtrue0.45in70.1intrue0.2in:NoOutputtrue0.45in61.85intrue0.2in=Code.GetLocTable("LT_Report").GetString("R.ObjectsLabel", "[Report Objects Label]")1.95inOutputtrue0.05in58.45inElementNormaltrueCreated0.2in=Code.FormatDateTime("g", Code.ToReportDate(DateTime.UtcNow))1.85inNoOutputtrue0.25in40.1intrue0.2in:1.85inNoOutputtrue0.05in30.1intrue0.2in:0.2inNoOutputtrue0.05in21.65intrue0.2in=Code.GetLocTable("LT_Report").GetString("R.GeneratedTimeLabel", "[Report Generated Time Label]")0.2inNoOutputtrue0.25in11.65intrue0.2in=Code.GetLocTable("LT_Report").GetString("R.StartEndTimeLabel", "[Report Start/End Time Label]")Outputtrue0.25intextbox4true0.05inElementNormaltrueStartDate0.2in=Code.FormatDateTime("g", Code.GetReportStartDate())1.55in10.55in2.25in4.70416inab518a51-343d-46c4-b1f8-4ec65faafd95StoredProcedureReportDisplayStringGet=Code.GetCallingManagementGroupId()Dell.Connections.001Dell.Connections.Report.ESMLog=Code.GetReportLocLanguageCode()R.%DataWarehouseMainXML_F52E2B61-18A1-11d1-B105-00805F49916B="LT"trueStoredProcedureReportDisplayStringGet=Code.GetCallingManagementGroupId()Dell.Connections.001Dell.Connections.Report.ESMLog=Code.GetReportLocLanguageCode()RT.%DataWarehouseMainSystem.StringXML_F52E2B61-18A1-11d1-B105-00805F49916B="LT"StoredProcedureDell_Connections_Report_ReportObjectList=Parameters!ObjectList.ValueDataWarehouseMainSystem.StringManagedEntityDefaultNameSystem.StringPathSystem.StringManagedEntityTypeDefaultNameSystem.Int32ManagedEntityRowIdSystem.StringManagementGroupDefaultNameSystem.StringManagedEntityUse
SELECT ManagementGroupGuid, ManagementGroupDefaultName AS ManagementGroupName
FROM vManagementGroup
DataWarehouseMainSystem.GuidManagementGroupGuidSystem.StringManagementGroupNameStoredProcedureDell_Connections_Report_ESMLogDataGet=Code.ToDbDate(Code.GetReportStartDate())=Code.ToDbDate(Code.GetReportEndDate())=Parameters!ObjectList.Value=Code.GetReportLocLanguageCode()DataWarehouseMainSystem.DateTimeFirstOccuranceTimeSystem.DateTimeLastOccuranceTimeSystem.StringRuleDefaultNameSystem.StringEventPublisherNameSystem.StringRenderedDescriptionSystem.StringManagedEntityDefaultNameSystem.GuidManagedEntityGuidSystem.StringPathSystem.StringManagedEntityTypeDefaultNameSystem.StringManagementGroupDefaultNameSystem.GuidManagementGroupGuidSystem.Byte[]ImageMicrosoft.EnterpriseManagement.Reporting.Code, Version=6.0.0.0, Culture=neutral
Const LocTableStringQuery As String = "R/S[@N='{0}']/text()"
Const TimeZoneParameterName As String = "TimeZone"
Const SD_BaseTypeParameterName As String = "StartDate_BaseType"
Const SD_BaseValueParameterName As String = "StartDate_BaseValue"
Const SD_OffsetTypeParameterName As String = "StartDate_OffsetType"
Const SD_OffsetValueParameterName As String = "StartDate_OffsetValue"
Const ED_BaseTypeParameterName As String = "EndDate_BaseType"
Const ED_BaseValueParameterName As String = "EndDate_BaseValue"
Const ED_OffsetTypeParameterName As String = "EndDate_OffsetType"
Const ED_OffsetValueParameterName As String = "EndDate_OffsetValue"
Const IsRelativeTimeSupported As Boolean = False
Const TimeTypeParameterName As String = "TimeType"
Const TimeWeekMapParameterName As String = "TimeWeekMap"
Dim LocTables As System.Collections.Generic.Dictionary(Of String, Microsoft.EnterpriseManagement.Reporting.XmlStringTable)
Dim ReportTimeZone As Microsoft.EnterpriseManagement.Reporting.TimeZoneCoreInformation
Dim ReportStartDate As DateTime
Dim ReportEndDate As DateTime
Dim ReportTime As Microsoft.EnterpriseManagement.Reporting.ParameterProcessor.RelativeTime
Dim ReportCulture As System.Globalization.CultureInfo
Dim ParameterProcessor As Microsoft.EnterpriseManagement.Reporting.ParameterProcessor
Protected Overrides Sub OnInit()
LocTables = new System.Collections.Generic.Dictionary(Of String, Microsoft.EnterpriseManagement.Reporting.XmlStringTable)()
ReportTimeZone = Nothing
ReportStartDate = DateTime.MinValue
ReportEndDate = DateTime.MinValue
ReportTime = Nothing
ReportCulture = System.Globalization.CultureInfo.GetCultureInfo(Report.User("Language"))
ParameterProcessor = New Microsoft.EnterpriseManagement.Reporting.ParameterProcessor(ReportCulture)
End Sub
Public Function GetCallingManagementGroupId() As String
Return Microsoft.EnterpriseManagement.Reporting.ReportingConfiguration.ManagementGroupId
End Function
Public Function GetReportLocLanguageCode() As String
Return ReportCulture.ThreeLetterWindowsLanguageName
End Function
Public Function GetLocTable(Name As String) As Microsoft.EnterpriseManagement.Reporting.XmlStringTable
Dim LocTable As Microsoft.EnterpriseManagement.Reporting.XmlStringTable
If Not LocTables.TryGetValue(Name, LocTable) Then
LocTable = New Microsoft.EnterpriseManagement.Reporting.XmlStringTable(LocTableStringQuery, Report.Parameters(Name).Value)
LocTables.Add(Name, LocTable)
End If
Return LocTable
End Function
Public Function GetReportTimeZone() As Microsoft.EnterpriseManagement.Reporting.TimeZoneCoreInformation
If IsNothing(ReportTimeZone) Then ReportTimeZone = Microsoft.EnterpriseManagement.Reporting.TimeZoneCoreInformation.FromValueString(Report.Parameters(TimeZoneParameterName).Value)
Return ReportTimeZone
End Function
Public Function ToDbDate(ByVal DateValue As DateTime) As DateTime
return GetReportTimeZone.ToUniversalTime(DateValue)
End Function
Public Function ToReportDate(ByVal DateValue As DateTime) As DateTime
return GetReportTimeZone.ToLocalTime(DateValue)
End Function
Public Function GetReportStartDate() As DateTime
If (ReportStartDate = DateTime.MinValue) Then
If (IsRelativeTimeSupported) Then
ReportStartDate = ParameterProcessor.GetDateTime(ToReportDate(DateTime.UtcNow), Report.Parameters(SD_BaseTypeParameterName).Value, Report.Parameters(SD_BaseValueParameterName).Value, Report.Parameters(SD_OffsetTypeParameterName).Value, Report.Parameters(SD_OffsetValueParameterName).Value, Report.Parameters(TimeTypeParameterName).Value)
Else
ReportStartDate = ParameterProcessor.GetDateTime(ToReportDate(DateTime.UtcNow), Report.Parameters(SD_BaseTypeParameterName).Value, Report.Parameters(SD_BaseValueParameterName).Value, Report.Parameters(SD_OffsetTypeParameterName).Value, Report.Parameters(SD_OffsetValueParameterName).Value)
End if
End If
return ReportStartDate
End Function
Public Function GetReportEndDate() As DateTime
If (ReportEndDate = DateTime.MinValue) Then
If (IsRelativeTimeSupported) Then
ReportEndDate = ParameterProcessor.GetDateTime(ToReportDate(DateTime.UtcNow), Report.Parameters(ED_BaseTypeParameterName).Value, Report.Parameters(ED_BaseValueParameterName).Value, Report.Parameters(ED_OffsetTypeParameterName).Value, Report.Parameters(ED_OffsetValueParameterName).Value, Report.Parameters(TimeTypeParameterName).Value)
If IsBusinessHours(GetReportTimeFilter()) Then ReportEndDate = ReportCulture.Calendar.AddDays(ReportEndDate, 1)
Else
ReportEndDate = ParameterProcessor.GetDateTime(ToReportDate(DateTime.UtcNow), Report.Parameters(ED_BaseTypeParameterName).Value, Report.Parameters(ED_BaseValueParameterName).Value, Report.Parameters(ED_OffsetTypeParameterName).Value, Report.Parameters(ED_OffsetValueParameterName).Value)
End if
End If
return ReportEndDate
End Function
Public Function GetReportTimeFilter() As Microsoft.EnterpriseManagement.Reporting.ParameterProcessor.RelativeTime
If IsNothing(ReportTime) Then ReportTime = New Microsoft.EnterpriseManagement.Reporting.ParameterProcessor.RelativeTime(Report.Parameters(TimeTypeParameterName).Value, Report.Parameters(SD_BaseValueParameterName).Value, Report.Parameters(ED_BaseValueParameterName).Value, CStr(Join(Report.Parameters(TimeWeekMapParameterName).Value, ",")))
return ReportTime
End Function
Public Function IsBusinessHours(Value As Microsoft.EnterpriseManagement.Reporting.ParameterProcessor.RelativeTime) As Boolean
return (Not IsNothing(Value)) And (Value.TimeType = Microsoft.EnterpriseManagement.Reporting.ParameterProcessor.RelativeTimeType.Business)
End Function
Public Function FormatDateTime(Format As String, Value As DateTime) As String
return Value.ToString(Format, ReportCulture)
End Function
Public Function FormatNumber(Format As String, Value As Decimal) As String
return Value.ToString(Format, ReportCulture)
End Function
Public Function FormatString(Format As String, ParamArray Values() as Object) As String
return String.Format(ReportCulture, Format, Values)
End Function
Public Function NullFormatString(Format As String, Value as String) As String
return IIF(String.IsNullOrEmpty(Value), String.Empty, String.Format(ReportCulture, Format, Value))
End Function
Public Function FormatBusinessHours(Format As String, Value As Microsoft.EnterpriseManagement.Reporting.ParameterProcessor.RelativeTime) As String
Dim result As String
If IsBusinessHours(Value) Then
Dim firstDay As DayOfWeek
Dim days As System.Collections.Generic.List(Of String)
firstDay = ReportCulture.DateTimeFormat.FirstDayOfWeek
days = new System.Collections.Generic.List(Of String)()
For loopDay As DayOfWeek = DayOfWeek.Sunday To DayOfWeek.Saturday
Dim day As DayOfWeek
day = CType((CInt(loopDay) + CInt(firstDay)) Mod 7, DayOfWeek)
If value.WeekMap.Contains(day) Then days.Add(ReportCulture.DateTimeFormat.GetAbbreviatedDayName(day))
Next loopDay
result = FormatString(Format, DateTime.Today.Add(Value.StartTime).ToString(ReportCulture.DateTimeFormat.ShortTimePattern), DateTime.Today.Add(Value.EndTime).ToString(ReportCulture.DateTimeFormat.ShortTimePattern), String.Join(",", days.ToArray()))
Else
result = String.Empty
End if
return result
End Function
Public Function BuildXmlValueList(ByVal ValueList() As Object) As String
Return Microsoft.EnterpriseManagement.Reporting.MultiValueParameter.ToXml("Data", "Value", ValueList)
End Function
10.9in11inen-US8.95in0.1in11.7intrue0.1875in=string.Format(Code.GetLocTable("LT_Report").GetString("R.PageFormat", "{0}/{1}"), Globals!PageNumber, Globals!TotalPages)0.15in0.1in8.75intrue0.1875in=string.Format(Code.GetLocTable("LT_Report").GetString("R.TimeZoneFormat", "{0}"), Parameters!TimeZoneName.Value)0.35intruetrue8.5inDell.Connections.Report.Script.BMCLogDataGetDell.Connections.Report.Script.ObjectListParseDell.Connections.Report.Script.ObjectListDell.Connections.Report.ParameterControl.RelativeDateTimePickerDell.Connections.Report.ParameterControl.ComboBoxDell.Connections.Report.ParameterPrompt.TimeZoneDell.Connections.Report.ParameterPrompt.StartDateTimeDell.Connections.Report.ParameterPrompt.EndDateTimeData Warehouse Maine4235c51-407f-4065-8519-a1e57374bc4511inStringLT_Report_QueryValueXmlLT_Report_QueryValueXmlValueNametrueStringLT_Table_QueryValueXmlLT_Table_QueryValueXmlValueNametrueStringNeighborManagementGroupsManagementGroupGuid[ManagementGroupId]NeighborManagementGroupsManagementGroupGuidManagementGroupNametruetrueString[Start Date Base]DateTimeFromString[Start Date Offset Type]Integertrue[Start Date Offset]String[End Date Base]DateTimeToString[End Date Offset Type]Integertrue[End Date Offset]StringTime ZoneStringtruetrue[Time Zone Name]Booleantrue=FalseInteractivetruetrue8.5in0.05intrue0.15in1.5in510.55in0.05in0.15inNoOutput0.3in110.35intrue0.2in=Code.GetLocTable("LT_Report").GetString("R.DescriptionTitle", "[Report Description Title]")0.2inOutput0.05in10.15inElementNormaltrueTitle0.25in=Code.GetLocTable("LT_Report").GetString("R.Title", "[Report Title]")0.75in410.55in0.55in0.15in0.2inNoOutput10.15intrue=Code.GetLocTable("LT_Report").GetString("R.Description", "[Report Description]")1.3in3reportDescriptionTitletrue10.55in0.2inAutoSize0.15in0.1in210.55208in0.64583in../banner_landscape.jpg
0.15in1.95inNoOutputtrue0.25in248.45intrue0.2in
=Code.FormatString(
Code.GetLocTable("LT_Report").GetString("R.StartEndTimeFormat", "{0} - {1}"),
Code.FormatDateTime("g", Code.GetReportStartDate()),
Code.FormatDateTime("g", Code.GetReportEndDate())
)
0.1inOutputtrue0.25in14true0.05inElementNormaltrueTimeZone0.2in=Parameters!TimeZoneName.Value0.05inOutputtrue0.25in13true0.05inElementNormaltrueEndDate0.2in=Code.FormatDateTime("g", Code.GetReportEndDate())AutoSize2.2in9../gradient_landscape.gif1.95inOutputtrue0.05in58.45inElementNormaltrueCreated0.2in=Code.FormatDateTime("g", Code.ToReportDate(DateTime.UtcNow))1.85inNoOutputtrue0.25in40.1intrue0.2in:1.85inNoOutputtrue0.05in30.1intrue0.2in:0.2inNoOutputtrue0.05in21.65intrue0.2in=Code.GetLocTable("LT_Report").GetString("R.GeneratedTimeLabel", "[Report Generated Time Label]")0.2inNoOutputtrue0.25in11.65intrue0.2in=Code.GetLocTable("LT_Report").GetString("R.StartEndTimeLabel", "[Report Start/End Time Label]")Outputtrue0.25intextbox4true0.05inElementNormaltrueStartDate0.2in=Code.FormatDateTime("g", Code.GetReportStartDate())1.55in10.55in2.25in4.70416inab518a51-343d-46c4-b1f8-4ec65faafd95StoredProcedureReportDisplayStringGet=Code.GetCallingManagementGroupId()Dell.Connections.001Dell.Connections.Report.BMCLog=Code.GetReportLocLanguageCode()R.%DataWarehouseMainXML_F52E2B61-18A1-11d1-B105-00805F49916B="LT"trueStoredProcedureReportDisplayStringGet=Code.GetCallingManagementGroupId()Dell.Connections.001Dell.Connections.Report.BMCLog=Code.GetReportLocLanguageCode()RT.%DataWarehouseMainSystem.StringXML_F52E2B61-18A1-11d1-B105-00805F49916B="LT"
SELECT ManagementGroupGuid, ManagementGroupDefaultName AS ManagementGroupName
FROM vManagementGroup
DataWarehouseMainSystem.GuidManagementGroupGuidSystem.StringManagementGroupNameStoredProcedureDell_Connections_Report_BMCLogDataGet=Code.ToDbDate(Code.GetReportStartDate())=Code.ToDbDate(Code.GetReportEndDate())=Code.GetReportLocLanguageCode()DataWarehouseMainSystem.DateTimeFirstOccuranceTimeSystem.DateTimeLastOccuranceTimeSystem.StringRuleDefaultNameSystem.StringEventPublisherNameSystem.StringRenderedDescriptionSystem.StringManagedEntityDefaultNameSystem.GuidManagedEntityGuidSystem.StringPathSystem.StringManagedEntityTypeDefaultNameSystem.StringManagementGroupDefaultNameSystem.GuidManagementGroupGuidSystem.Byte[]ImageMicrosoft.EnterpriseManagement.Reporting.Code, Version=6.0.0.0, Culture=neutral
Const LocTableStringQuery As String = "R/S[@N='{0}']/text()"
Const TimeZoneParameterName As String = "TimeZone"
Const SD_BaseTypeParameterName As String = "StartDate_BaseType"
Const SD_BaseValueParameterName As String = "StartDate_BaseValue"
Const SD_OffsetTypeParameterName As String = "StartDate_OffsetType"
Const SD_OffsetValueParameterName As String = "StartDate_OffsetValue"
Const ED_BaseTypeParameterName As String = "EndDate_BaseType"
Const ED_BaseValueParameterName As String = "EndDate_BaseValue"
Const ED_OffsetTypeParameterName As String = "EndDate_OffsetType"
Const ED_OffsetValueParameterName As String = "EndDate_OffsetValue"
Const IsRelativeTimeSupported As Boolean = False
Const TimeTypeParameterName As String = "TimeType"
Const TimeWeekMapParameterName As String = "TimeWeekMap"
Dim LocTables As System.Collections.Generic.Dictionary(Of String, Microsoft.EnterpriseManagement.Reporting.XmlStringTable)
Dim ReportTimeZone As Microsoft.EnterpriseManagement.Reporting.TimeZoneCoreInformation
Dim ReportStartDate As DateTime
Dim ReportEndDate As DateTime
Dim ReportTime As Microsoft.EnterpriseManagement.Reporting.ParameterProcessor.RelativeTime
Dim ReportCulture As System.Globalization.CultureInfo
Dim ParameterProcessor As Microsoft.EnterpriseManagement.Reporting.ParameterProcessor
Protected Overrides Sub OnInit()
LocTables = new System.Collections.Generic.Dictionary(Of String, Microsoft.EnterpriseManagement.Reporting.XmlStringTable)()
ReportTimeZone = Nothing
ReportStartDate = DateTime.MinValue
ReportEndDate = DateTime.MinValue
ReportTime = Nothing
ReportCulture = System.Globalization.CultureInfo.GetCultureInfo(Report.User("Language"))
ParameterProcessor = New Microsoft.EnterpriseManagement.Reporting.ParameterProcessor(ReportCulture)
End Sub
Public Function GetCallingManagementGroupId() As String
Return Microsoft.EnterpriseManagement.Reporting.ReportingConfiguration.ManagementGroupId
End Function
Public Function GetReportLocLanguageCode() As String
Return ReportCulture.ThreeLetterWindowsLanguageName
End Function
Public Function GetLocTable(Name As String) As Microsoft.EnterpriseManagement.Reporting.XmlStringTable
Dim LocTable As Microsoft.EnterpriseManagement.Reporting.XmlStringTable
If Not LocTables.TryGetValue(Name, LocTable) Then
LocTable = New Microsoft.EnterpriseManagement.Reporting.XmlStringTable(LocTableStringQuery, Report.Parameters(Name).Value)
LocTables.Add(Name, LocTable)
End If
Return LocTable
End Function
Public Function GetReportTimeZone() As Microsoft.EnterpriseManagement.Reporting.TimeZoneCoreInformation
If IsNothing(ReportTimeZone) Then ReportTimeZone = Microsoft.EnterpriseManagement.Reporting.TimeZoneCoreInformation.FromValueString(Report.Parameters(TimeZoneParameterName).Value)
Return ReportTimeZone
End Function
Public Function ToDbDate(ByVal DateValue As DateTime) As DateTime
return GetReportTimeZone.ToUniversalTime(DateValue)
End Function
Public Function ToReportDate(ByVal DateValue As DateTime) As DateTime
return GetReportTimeZone.ToLocalTime(DateValue)
End Function
Public Function GetReportStartDate() As DateTime
If (ReportStartDate = DateTime.MinValue) Then
If (IsRelativeTimeSupported) Then
ReportStartDate = ParameterProcessor.GetDateTime(ToReportDate(DateTime.UtcNow), Report.Parameters(SD_BaseTypeParameterName).Value, Report.Parameters(SD_BaseValueParameterName).Value, Report.Parameters(SD_OffsetTypeParameterName).Value, Report.Parameters(SD_OffsetValueParameterName).Value, Report.Parameters(TimeTypeParameterName).Value)
Else
ReportStartDate = ParameterProcessor.GetDateTime(ToReportDate(DateTime.UtcNow), Report.Parameters(SD_BaseTypeParameterName).Value, Report.Parameters(SD_BaseValueParameterName).Value, Report.Parameters(SD_OffsetTypeParameterName).Value, Report.Parameters(SD_OffsetValueParameterName).Value)
End if
End If
return ReportStartDate
End Function
Public Function GetReportEndDate() As DateTime
If (ReportEndDate = DateTime.MinValue) Then
If (IsRelativeTimeSupported) Then
ReportEndDate = ParameterProcessor.GetDateTime(ToReportDate(DateTime.UtcNow), Report.Parameters(ED_BaseTypeParameterName).Value, Report.Parameters(ED_BaseValueParameterName).Value, Report.Parameters(ED_OffsetTypeParameterName).Value, Report.Parameters(ED_OffsetValueParameterName).Value, Report.Parameters(TimeTypeParameterName).Value)
If IsBusinessHours(GetReportTimeFilter()) Then ReportEndDate = ReportCulture.Calendar.AddDays(ReportEndDate, 1)
Else
ReportEndDate = ParameterProcessor.GetDateTime(ToReportDate(DateTime.UtcNow), Report.Parameters(ED_BaseTypeParameterName).Value, Report.Parameters(ED_BaseValueParameterName).Value, Report.Parameters(ED_OffsetTypeParameterName).Value, Report.Parameters(ED_OffsetValueParameterName).Value)
End if
End If
return ReportEndDate
End Function
Public Function GetReportTimeFilter() As Microsoft.EnterpriseManagement.Reporting.ParameterProcessor.RelativeTime
If IsNothing(ReportTime) Then ReportTime = New Microsoft.EnterpriseManagement.Reporting.ParameterProcessor.RelativeTime(Report.Parameters(TimeTypeParameterName).Value, Report.Parameters(SD_BaseValueParameterName).Value, Report.Parameters(ED_BaseValueParameterName).Value, CStr(Join(Report.Parameters(TimeWeekMapParameterName).Value, ",")))
return ReportTime
End Function
Public Function IsBusinessHours(Value As Microsoft.EnterpriseManagement.Reporting.ParameterProcessor.RelativeTime) As Boolean
return (Not IsNothing(Value)) And (Value.TimeType = Microsoft.EnterpriseManagement.Reporting.ParameterProcessor.RelativeTimeType.Business)
End Function
Public Function FormatDateTime(Format As String, Value As DateTime) As String
return Value.ToString(Format, ReportCulture)
End Function
Public Function FormatNumber(Format As String, Value As Decimal) As String
return Value.ToString(Format, ReportCulture)
End Function
Public Function FormatString(Format As String, ParamArray Values() as Object) As String
return String.Format(ReportCulture, Format, Values)
End Function
Public Function NullFormatString(Format As String, Value as String) As String
return IIF(String.IsNullOrEmpty(Value), String.Empty, String.Format(ReportCulture, Format, Value))
End Function
Public Function FormatBusinessHours(Format As String, Value As Microsoft.EnterpriseManagement.Reporting.ParameterProcessor.RelativeTime) As String
Dim result As String
If IsBusinessHours(Value) Then
Dim firstDay As DayOfWeek
Dim days As System.Collections.Generic.List(Of String)
firstDay = ReportCulture.DateTimeFormat.FirstDayOfWeek
days = new System.Collections.Generic.List(Of String)()
For loopDay As DayOfWeek = DayOfWeek.Sunday To DayOfWeek.Saturday
Dim day As DayOfWeek
day = CType((CInt(loopDay) + CInt(firstDay)) Mod 7, DayOfWeek)
If value.WeekMap.Contains(day) Then days.Add(ReportCulture.DateTimeFormat.GetAbbreviatedDayName(day))
Next loopDay
result = FormatString(Format, DateTime.Today.Add(Value.StartTime).ToString(ReportCulture.DateTimeFormat.ShortTimePattern), DateTime.Today.Add(Value.EndTime).ToString(ReportCulture.DateTimeFormat.ShortTimePattern), String.Join(",", days.ToArray()))
Else
result = String.Empty
End if
return result
End Function
Public Function BuildXmlValueList(ByVal ValueList() As Object) As String
Return Microsoft.EnterpriseManagement.Reporting.MultiValueParameter.ToXml("Data", "Value", ValueList)
End Function
10.9in11inen-US8.95in0.1in11.7intrue0.1875in=string.Format(Code.GetLocTable("LT_Report").GetString("R.PageFormat", "{0}/{1}"), Globals!PageNumber, Globals!TotalPages)0.15in0.1in8.75intrue0.1875in=string.Format(Code.GetLocTable("LT_Report").GetString("R.TimeZoneFormat", "{0}"), Parameters!TimeZoneName.Value)0.35intruetrue8.5inDell.Connections.Report.Script.BIOSInfoDataGetDell.Connections.Report.Script.ObjectListParseDell.Connections.Report.Script.ObjectListDell.Connections.Report.ParameterControl.RelativeDateTimePickerDell.Connections.Report.ParameterControl.MonitoringObjectXmlPickerDell.Connections.Report.ParameterControl.CheckedListBoxDell.Connections.Report.ParameterPrompt.TimeZoneDell.Connections.Report.ParameterPrompt.StartDateTimeDell.Connections.Report.ParameterPrompt.EndDateTimeDell.Connections.Report.ParameterPrompt.ObjectListData Warehouse Maine4235c51-407f-4065-8519-a1e57374bc4511inStringLT_Report_QueryValueXmlLT_Report_QueryValueXmlValueNametrueStringLT_Table_QueryValueXmlLT_Table_QueryValueXmlValueNametrueStringNeighborManagementGroupsManagementGroupGuidManagementGroupIdNeighborManagementGroupsManagementGroupGuidManagementGroupNametruetrueString[Start Date Base]DateTimeFromString[Start Date Offset Type]Integertrue[Start Date Offset]String[End Date Base]DateTimeToString[End Date Offset Type]Integertrue[End Date Offset]StringTime ZoneStringtruetrue[Time Zone Name]Booleantrue=FalseInteractivetrueStringObjectsStringColumnListPropertyGuidPropertiesColumnListPropertyGuidPropertyDefaultNametruetrue8.5in0.05intrueAutoSize0.15in0.1in610.55208in0.64583in../banner_landscape.jpg0.15in1.5in510.55in0.05in0.15inNoOutput0.3in110.35intrue0.2in=Code.GetLocTable("LT_Report").GetString("R.DescriptionTitle", "[Report Description Title]")0.2inOutput0.05in10.15inElementNormaltrueTitle0.25in=Code.GetLocTable("LT_Report").GetString("R.Title", "[Report Title]")0.75in410.55in0.55in0.15in0.2inNoOutput10.15intrue=Code.GetLocTable("LT_Report").GetString("R.Description", "[Report Description]")1.3in3reportDescriptionTitletrue10.55in0.2in0.15in0.00104in1.95in0.04in18.45in0in=Fields!ManagementGroupDefaultName.ValueAscending=Fields!ManagedEntityTypeDefaultName.ValueAscending=Fields!ManagedEntityDefaultName.ValueAscending1.95intrue3=Fields!ManagedEntityUse.Value <> "Containment"8.45intrue0.2in=Code.GetLocTable("LT_Report").GetString("R.ObjectUseContainment", "[All objects contained by:]")1.95in0.6in28.45in0in1.95intrue0.4in18.45intrue0.19in=Code.FormatString(Code.GetLocTable("LT_Report").GetString("R.ObjectFormatLine2", "{0} {1}"), Fields!ManagementGroupDefaultName.Value, Code.NullFormatString(Code.GetLocTable("LT_Report").GetString("R.ObjectFormatLine2Path", "| {0}"), Fields!Path.Value))1.95intrue0.2in8.45intrue0.2in=Code.FormatString(Code.GetLocTable("LT_Report").GetString("R.ObjectFormatLine1", "{0}: {1}"), Fields!ManagedEntityTypeDefaultName.Value, Fields!ManagedEntityDefaultName.Value)ObjectList0.05inobjectsParameterTitletrueNoOutput0.65in16objectsParameterTitletrue0.7in1.95inNoOutputtrue0.45in148.4intrue0.2in=Code.FormatString(Code.GetLocTable("LT_Report").GetString("R.ObjectsFormat", "{0}"), Code.FormatNumber("G", CountRows("ObjectList")))1.85inNoOutputtrue0.45in130.1intrue0.2in:NoOutputtrue0.45in121.85intrue0.2in=Code.GetLocTable("LT_Report").GetString("R.ObjectsLabel", "[Report Objects Label]")AutoSize1.65in9../gradient_landscape.gif0.1inOutputtrue0.25in8true0.05inElementNormaltrueTimeZone0.2in=Parameters!TimeZoneName.Value0.05inOutputtrue0.25in7true0.05inElementNormaltrueEndDate0.2in=Code.FormatDateTime("g", Code.GetReportEndDate())Outputtrue0.25in6true0.05inElementNormaltrueStartDate0.2in=Code.FormatDateTime("g", Code.GetReportStartDate())1.95inOutputtrue0.05in58.4inElementNormaltrueCreated0.2in=Code.FormatDateTime("g", Code.ToReportDate(DateTime.UtcNow))1.85inNoOutputtrue0.25in40.1intrue0.2in:1.85inNoOutputtrue0.05in30.1intrue0.2in:0.2inNoOutputtrue0.05in21.65intrue0.2in=Code.GetLocTable("LT_Report").GetString("R.GeneratedTimeLabel", "[Report Generated Time Label]")1.95inNoOutputtrue0.25in18.4intrue0.2in=Code.FormatString(Code.GetLocTable("LT_Report").GetString("R.StartEndTimeFormat", "{0} - {1}"), Code.FormatDateTime("g", Code.GetReportStartDate()), Code.FormatDateTime("g", Code.GetReportEndDate()))0.2inNoOutputtrue0.25in1.65intrue0.2in=Code.GetLocTable("LT_Report").GetString("R.StartEndTimeLabel", "[Report Start/End Time Label]")1.55in210.55208in1.70208in1.39375inOutput0.15in2.95in0.2inOutputtrue7true0.05inElementNormaltrueLastModified0.2in=Code.FormatDateTime("g", Code.ToReportDate(Fields!DWLastModifiedDateTime.Value))0.35inOutputtrue6true0.05inElementNormaltrueManagementGroup0.2in=Fields!ManagementGroupDefaultName.Value0.4inOutputtrue5true0.04792inElementNormaltrueName0.2in=Fields!ManagedEntityDefaultName.Value0.3inOutputtrue4true0.05inElementNormaltruePath0.2in=Fields!Path.Value0.25inOutputtrue3true0.05inElementNormaltrueType0.2in=Fields!ManagedEntityTypeDefaultName.Value0.3inNoOutputtrue2ElementNormaltrueDisplayName10.2in=Fields!ManagedEntityDefaultName.Value0.3inNoOutputtrue0.2in1ElementNormaltrueDisplayName2=Code.FormatString(Code.GetLocTable("LT_Report").GetString("R.ObjectFormatLine2", "{0} {1}"), Fields!ManagementGroupDefaultName.Value, Code.NullFormatString(Code.GetLocTable("LT_Report").GetString("R.ObjectFormatLine2Path", "| {0}"), Fields!Path.Value))AutoSizeimage/png0.3in0.4in=Fields!Image.Value1=Fields!ManagedEntityTypeDefaultName.ValueAscending=Fields!ManagedEntityDefaultName.ValueAscending=Fields!ManagementGroupDefaultName.ValueAscending=Fields!Path.ValueAscendingObjectsObject=Fields!ManagedEntityRowId.ValuePropertyDefaultName1ElementNormaltruePropertyName0.2in=Fields!PropertyDefaultName.ValueOutput0.2in=IIF(Fields!RelatedManagedEntityRowId.Value = Fields!ManagedEntityRowId.Value, True, False)ElementNormaltrueTypeName=Fields!TypeName.Value2PropertiesProperty=Fields!PropertyGuid.Value0.4inPropertyTableList4.25inPropertyValue4.34375inNoOutput3true=Fields!ManagedEntityTypeDefaultName.Value + Fields!ManagedEntityDefaultName.Value + Fields!ManagementGroupDefaultName.Value + Fields!Path.ValueRow=Code.GetLocTable("LT_Table").GetString("RT.Column.ObjectLabel", "[Objects]")0.80208in0.40208inOutputPropertyValueElementNormaltrueValue=Fields!PropertyValue.Value5.11042inab518a51-343d-46c4-b1f8-4ec65faafd95StoredProcedureReportDisplayStringGet=Code.GetCallingManagementGroupId()Dell.Connections.001Dell.Connections.Report.BIOSConfig=Code.GetReportLocLanguageCode()R.%DataWarehouseMainSystem.StringXML_F52E2B61-18A1-11d1-B105-00805F49916B="LT"StoredProcedureReportDisplayStringGet=Code.GetCallingManagementGroupId()Dell.Connections.001Dell.Connections.Report.BIOSConfig=Code.GetReportLocLanguageCode()RT.%DataWarehouseMainSystem.StringXML_F52E2B61-18A1-11d1-B105-00805F49916B="LT"trueStoredProcedureDell_Connections_Report_ReportObjectList=Parameters!ObjectList.ValueDataWarehouseMainSystem.StringManagedEntityDefaultNameSystem.StringPathSystem.StringManagedEntityTypeDefaultNameSystem.Int32ManagedEntityRowIdSystem.StringManagementGroupDefaultNameSystem.StringManagedEntityUse
SELECT ManagementGroupGuid, ManagementGroupDefaultName AS ManagementGroupName
FROM vManagementGroup
DataWarehouseMainSystem.GuidManagementGroupGuidSystem.StringManagementGroupNameStoredProcedureDell_Connections_Report_BIOSInfoDataGet=Code.GetReportLocLanguageCode()=Code.ToDbDate(Code.GetReportStartDate())=Code.ToDbDate(Code.GetReportEndDate())=Parameters!ObjectList.Value=Code.BuildXmlValueList(Parameters!Properties.Value)DataWarehouseMainSystem.GuidTypeGuidSystem.StringTypeNameSystem.GuidPropertyGuidSystem.DateTimeDWLastModifiedDateTimeSystem.DateTimeFromDateTimeSystem.Int32ManagedEntityRowIdSystem.StringPropertyValueSystem.StringRelatedManagedEntityDefaultNameSystem.Int32RelatedManagedEntityRowIdSystem.GuidManagedEntityGuidSystem.StringManagedEntityDefaultNameSystem.StringPathSystem.StringManagementGroupDefaultNameSystem.GuidManagementGroupGuidSystem.StringManagedEntityTypeDefaultNameSystem.Byte[]ImageSystem.StringPropertyDefaultNameSystem.StringPropertyDefaultDescription
SELECT prop.PropertyGuid as PropertyGuid, prop.PropertyDefaultName as PropertyDefaultName
FROM vManagedEntityTypeProperty AS prop INNER JOIN
vManagedEntityType ON prop.ManagedEntityTypeRowId = vManagedEntityType.ManagedEntityTypeRowId WHERE
vManagedEntityType.ManagedEntityTypeSystemName='Dell.Connections.DellServer.BIOS'
DataWarehouseMainSystem.GuidPropertyGuidSystem.StringPropertyDefaultNameMicrosoft.EnterpriseManagement.Reporting.Code, Version=6.0.0.0, Culture=neutral
Const LocTableStringQuery As String = "R/S[@N='{0}']/text()"
Const TimeZoneParameterName As String = "TimeZone"
Const SD_BaseTypeParameterName As String = "StartDate_BaseType"
Const SD_BaseValueParameterName As String = "StartDate_BaseValue"
Const SD_OffsetTypeParameterName As String = "StartDate_OffsetType"
Const SD_OffsetValueParameterName As String = "StartDate_OffsetValue"
Const ED_BaseTypeParameterName As String = "EndDate_BaseType"
Const ED_BaseValueParameterName As String = "EndDate_BaseValue"
Const ED_OffsetTypeParameterName As String = "EndDate_OffsetType"
Const ED_OffsetValueParameterName As String = "EndDate_OffsetValue"
Const IsRelativeTimeSupported As Boolean = False
Const TimeTypeParameterName As String = "TimeType"
Const TimeWeekMapParameterName As String = "TimeWeekMap"
Dim LocTables As System.Collections.Generic.Dictionary(Of String, Microsoft.EnterpriseManagement.Reporting.XmlStringTable)
Dim ReportTimeZone As Microsoft.EnterpriseManagement.Reporting.TimeZoneCoreInformation
Dim ReportStartDate As DateTime
Dim ReportEndDate As DateTime
Dim ReportTime As Microsoft.EnterpriseManagement.Reporting.ParameterProcessor.RelativeTime
Dim ReportCulture As System.Globalization.CultureInfo
Dim ParameterProcessor As Microsoft.EnterpriseManagement.Reporting.ParameterProcessor
Protected Overrides Sub OnInit()
LocTables = new System.Collections.Generic.Dictionary(Of String, Microsoft.EnterpriseManagement.Reporting.XmlStringTable)()
ReportTimeZone = Nothing
ReportStartDate = DateTime.MinValue
ReportEndDate = DateTime.MinValue
ReportTime = Nothing
ReportCulture = System.Globalization.CultureInfo.GetCultureInfo(Report.User("Language"))
ParameterProcessor = New Microsoft.EnterpriseManagement.Reporting.ParameterProcessor(ReportCulture)
End Sub
Public Function GetCallingManagementGroupId() As String
Return Microsoft.EnterpriseManagement.Reporting.ReportingConfiguration.ManagementGroupId
End Function
Public Function GetReportLocLanguageCode() As String
Return ReportCulture.ThreeLetterWindowsLanguageName
End Function
Public Function GetLocTable(Name As String) As Microsoft.EnterpriseManagement.Reporting.XmlStringTable
Dim LocTable As Microsoft.EnterpriseManagement.Reporting.XmlStringTable
If Not LocTables.TryGetValue(Name, LocTable) Then
LocTable = New Microsoft.EnterpriseManagement.Reporting.XmlStringTable(LocTableStringQuery, Report.Parameters(Name).Value)
LocTables.Add(Name, LocTable)
End If
Return LocTable
End Function
Public Function GetReportTimeZone() As Microsoft.EnterpriseManagement.Reporting.TimeZoneCoreInformation
If IsNothing(ReportTimeZone) Then ReportTimeZone = Microsoft.EnterpriseManagement.Reporting.TimeZoneCoreInformation.FromValueString(Report.Parameters(TimeZoneParameterName).Value)
Return ReportTimeZone
End Function
Public Function ToDbDate(ByVal DateValue As DateTime) As DateTime
return GetReportTimeZone.ToUniversalTime(DateValue)
End Function
Public Function ToReportDate(ByVal DateValue As DateTime) As DateTime
return GetReportTimeZone.ToLocalTime(DateValue)
End Function
Public Function GetReportStartDate() As DateTime
If (ReportStartDate = DateTime.MinValue) Then
If (IsRelativeTimeSupported) Then
ReportStartDate = ParameterProcessor.GetDateTime(ToReportDate(DateTime.UtcNow), Report.Parameters(SD_BaseTypeParameterName).Value, Report.Parameters(SD_BaseValueParameterName).Value, Report.Parameters(SD_OffsetTypeParameterName).Value, Report.Parameters(SD_OffsetValueParameterName).Value, Report.Parameters(TimeTypeParameterName).Value)
Else
ReportStartDate = ParameterProcessor.GetDateTime(ToReportDate(DateTime.UtcNow), Report.Parameters(SD_BaseTypeParameterName).Value, Report.Parameters(SD_BaseValueParameterName).Value, Report.Parameters(SD_OffsetTypeParameterName).Value, Report.Parameters(SD_OffsetValueParameterName).Value)
End if
End If
return ReportStartDate
End Function
Public Function GetReportEndDate() As DateTime
If (ReportEndDate = DateTime.MinValue) Then
If (IsRelativeTimeSupported) Then
ReportEndDate = ParameterProcessor.GetDateTime(ToReportDate(DateTime.UtcNow), Report.Parameters(ED_BaseTypeParameterName).Value, Report.Parameters(ED_BaseValueParameterName).Value, Report.Parameters(ED_OffsetTypeParameterName).Value, Report.Parameters(ED_OffsetValueParameterName).Value, Report.Parameters(TimeTypeParameterName).Value)
If IsBusinessHours(GetReportTimeFilter()) Then ReportEndDate = ReportCulture.Calendar.AddDays(ReportEndDate, 1)
Else
ReportEndDate = ParameterProcessor.GetDateTime(ToReportDate(DateTime.UtcNow), Report.Parameters(ED_BaseTypeParameterName).Value, Report.Parameters(ED_BaseValueParameterName).Value, Report.Parameters(ED_OffsetTypeParameterName).Value, Report.Parameters(ED_OffsetValueParameterName).Value)
End if
End If
return ReportEndDate
End Function
Public Function GetReportTimeFilter() As Microsoft.EnterpriseManagement.Reporting.ParameterProcessor.RelativeTime
If IsNothing(ReportTime) Then ReportTime = New Microsoft.EnterpriseManagement.Reporting.ParameterProcessor.RelativeTime(Report.Parameters(TimeTypeParameterName).Value, Report.Parameters(SD_BaseValueParameterName).Value, Report.Parameters(ED_BaseValueParameterName).Value, CStr(Join(Report.Parameters(TimeWeekMapParameterName).Value, ",")))
return ReportTime
End Function
Public Function IsBusinessHours(Value As Microsoft.EnterpriseManagement.Reporting.ParameterProcessor.RelativeTime) As Boolean
return (Not IsNothing(Value)) And (Value.TimeType = Microsoft.EnterpriseManagement.Reporting.ParameterProcessor.RelativeTimeType.Business)
End Function
Public Function FormatDateTime(Format As String, Value As DateTime) As String
return Value.ToString(Format, ReportCulture)
End Function
Public Function FormatNumber(Format As String, Value As Decimal) As String
return Value.ToString(Format, ReportCulture)
End Function
Public Function FormatString(Format As String, ParamArray Values() as Object) As String
return String.Format(ReportCulture, Format, Values)
End Function
Public Function NullFormatString(Format As String, Value as String) As String
return IIF(String.IsNullOrEmpty(Value), String.Empty, String.Format(ReportCulture, Format, Value))
End Function
Public Function FormatBusinessHours(Format As String, Value As Microsoft.EnterpriseManagement.Reporting.ParameterProcessor.RelativeTime) As String
Dim result As String
If IsBusinessHours(Value) Then
Dim firstDay As DayOfWeek
Dim days As System.Collections.Generic.List(Of String)
firstDay = ReportCulture.DateTimeFormat.FirstDayOfWeek
days = new System.Collections.Generic.List(Of String)()
For loopDay As DayOfWeek = DayOfWeek.Sunday To DayOfWeek.Saturday
Dim day As DayOfWeek
day = CType((CInt(loopDay) + CInt(firstDay)) Mod 7, DayOfWeek)
If value.WeekMap.Contains(day) Then days.Add(ReportCulture.DateTimeFormat.GetAbbreviatedDayName(day))
Next loopDay
result = FormatString(Format, DateTime.Today.Add(Value.StartTime).ToString(ReportCulture.DateTimeFormat.ShortTimePattern), DateTime.Today.Add(Value.EndTime).ToString(ReportCulture.DateTimeFormat.ShortTimePattern), String.Join(",", days.ToArray()))
Else
result = String.Empty
End if
return result
End Function
Public Function BuildXmlValueList(ByVal ValueList() As Object) As String
Return Microsoft.EnterpriseManagement.Reporting.MultiValueParameter.ToXml("Data", "Value", ValueList)
End Function
10.8in11inen-US8.95in0.1in11.7intrue0.1875in=string.Format(Code.GetLocTable("LT_Report").GetString("R.PageFormat", "{0}/{1}"), Globals!PageNumber, Globals!TotalPages)0.15in0.1in8.75intrue0.1875in=string.Format(Code.GetLocTable("LT_Report").GetString("R.TimeZoneFormat", "{0}"), Parameters!TimeZoneName.Value)0.35intruetrue8.5inDell.Connections.Report.Script.RAIDConfigDataGetDell.Connections.Report.Script.ObjectListParseDell.Connections.Report.Script.ObjectListDell.Connections.Report.ParameterControl.RelativeDateTimePickerDell.Connections.Report.ParameterControl.MonitoringObjectXmlPickerDell.Connections.Report.ParameterControl.CheckedListBoxDell.Connections.Report.ParameterPrompt.TimeZoneDell.Connections.Report.ParameterPrompt.StartDateTimeDell.Connections.Report.ParameterPrompt.EndDateTimeDell.Connections.Report.ParameterPrompt.ObjectListData Warehouse Maine4235c51-407f-4065-8519-a1e57374bc4511inStringLT_Report_QueryValueXmlLT_Report_QueryValueXmlValueNametrueStringLT_Table_QueryValueXmlLT_Table_QueryValueXmlValueNametrueStringNeighborManagementGroupsManagementGroupGuidManagementGroupIdNeighborManagementGroupsManagementGroupGuidManagementGroupNametruetrueString[Start Date Base]DateTimeFromString[Start Date Offset Type]Integertrue[Start Date Offset]String[End Date Base]DateTimeToString[End Date Offset Type]Integertrue[End Date Offset]StringTime ZoneStringtruetrue[Time Zone Name]Booleantrue=FalseInteractivetrueStringObjectsStringColumnListPropertyGuidPropertiesColumnListPropertyGuidPropertyDefaultNametruetrue8.5in0.05intrueAutoSize0.15in0.1in610.55208in0.64583in../banner_landscape.jpg0.15in1.5in510.55in0.05in0.15inNoOutput0.3in110.35intrue0.2in=Code.GetLocTable("LT_Report").GetString("R.DescriptionTitle", "[Report Description Title]")0.2inOutput0.05in10.15inElementNormaltrueTitle0.25in=Code.GetLocTable("LT_Report").GetString("R.Title", "[Report Title]")0.75in410.55in0.55in0.15in0.2inNoOutput10.15intrue=Code.GetLocTable("LT_Report").GetString("R.Description", "[Report Description]")1.3in3reportDescriptionTitletrue10.55in0.2in0.15in0.00104in1.95in0.04in18.45in0in=Fields!ManagementGroupDefaultName.ValueAscending=Fields!ManagedEntityTypeDefaultName.ValueAscending=Fields!ManagedEntityDefaultName.ValueAscending1.95intrue3=Fields!ManagedEntityUse.Value <> "Containment"8.45intrue0.2in=Code.GetLocTable("LT_Report").GetString("R.ObjectUseContainment", "[All objects contained by:]")1.95in0.6in28.45in0in1.95intrue0.4in18.45intrue0.19in=Code.FormatString(Code.GetLocTable("LT_Report").GetString("R.ObjectFormatLine2", "{0} {1}"), Fields!ManagementGroupDefaultName.Value, Code.NullFormatString(Code.GetLocTable("LT_Report").GetString("R.ObjectFormatLine2Path", "| {0}"), Fields!Path.Value))1.95intrue0.2in8.45intrue0.2in=Code.FormatString(Code.GetLocTable("LT_Report").GetString("R.ObjectFormatLine1", "{0}: {1}"), Fields!ManagedEntityTypeDefaultName.Value, Fields!ManagedEntityDefaultName.Value)ObjectList0.05inobjectsParameterTitletrueNoOutput0.65in16objectsParameterTitletrue0.7in1.95inNoOutputtrue0.45in148.4intrue0.2in=Code.FormatString(Code.GetLocTable("LT_Report").GetString("R.ObjectsFormat", "{0}"), Code.FormatNumber("G", CountRows("ObjectList")))1.85inNoOutputtrue0.45in130.1intrue0.2in:NoOutputtrue0.45in121.85intrue0.2in=Code.GetLocTable("LT_Report").GetString("R.ObjectsLabel", "[Report Objects Label]")AutoSize1.65in9../gradient_landscape.gif0.1inOutputtrue0.25in8true0.05inElementNormaltrueTimeZone0.2in=Parameters!TimeZoneName.Value0.05inOutputtrue0.25in7true0.05inElementNormaltrueEndDate0.2in=Code.FormatDateTime("g", Code.GetReportEndDate())Outputtrue0.25in6true0.05inElementNormaltrueStartDate0.2in=Code.FormatDateTime("g", Code.GetReportStartDate())1.95inOutputtrue0.05in58.4inElementNormaltrueCreated0.2in=Code.FormatDateTime("g", Code.ToReportDate(DateTime.UtcNow))1.85inNoOutputtrue0.25in40.1intrue0.2in:1.85inNoOutputtrue0.05in30.1intrue0.2in:0.2inNoOutputtrue0.05in21.65intrue0.2in=Code.GetLocTable("LT_Report").GetString("R.GeneratedTimeLabel", "[Report Generated Time Label]")1.95inNoOutputtrue0.25in18.4intrue0.2in=Code.FormatString(Code.GetLocTable("LT_Report").GetString("R.StartEndTimeFormat", "{0} - {1}"), Code.FormatDateTime("g", Code.GetReportStartDate()), Code.FormatDateTime("g", Code.GetReportEndDate()))0.2inNoOutputtrue0.25in1.65intrue0.2in=Code.GetLocTable("LT_Report").GetString("R.StartEndTimeLabel", "[Report Start/End Time Label]")1.55in210.55208in1.70208in1.39375inOutput0.15in2.95in0.2inOutputtrue7true0.05inElementNormaltrueLastModified0.2in=Code.FormatDateTime("g", Code.ToReportDate(Fields!DWLastModifiedDateTime.Value))0.35inOutputtrue6true0.05inElementNormaltrueManagementGroup0.2in=Fields!ManagementGroupDefaultName.Value0.4inOutputtrue5true0.04792inElementNormaltrueName0.2in=Fields!ManagedEntityDefaultName.Value0.3inOutputtrue4true0.05inElementNormaltruePath0.2in=Fields!Path.Value0.25inOutputtrue3true0.05inElementNormaltrueType0.2in=Fields!ManagedEntityTypeDefaultName.Value0.3inNoOutputtrue2ElementNormaltrueDisplayName10.2in=Code.FormatString(Code.GetLocTable("LT_Report").GetString("R.ObjectFormatLine1", "{0}: {1}"), Fields!ManagedEntityTypeDefaultName.Value, Fields!ManagedEntityDefaultName.Value)0.3inNoOutputtrue0.2in1ElementNormaltrueDisplayName2=Code.FormatString(Code.GetLocTable("LT_Report").GetString("R.ObjectFormatLine2", "{0} {1}"), Fields!ManagementGroupDefaultName.Value, Code.NullFormatString(Code.GetLocTable("LT_Report").GetString("R.ObjectFormatLine2Path", "| {0}"), Fields!Path.Value))AutoSizeimage/png0.3in0.4in=Fields!Image.Value1=Fields!ManagedEntityTypeDefaultName.ValueAscending=Fields!ManagedEntityDefaultName.ValueAscending=Fields!ManagementGroupDefaultName.ValueAscending=Fields!Path.ValueAscendingObjectsObject=Fields!ManagedEntityRowId.ValuePropertyDefaultName1ElementNormaltruePropertyName0.2in=Fields!PropertyDefaultName.ValueOutput0.2in=IIF(Fields!RelatedManagedEntityRowId.Value = Fields!ManagedEntityRowId.Value, True, False)ElementNormaltrueTypeName=Fields!TypeName.Value2PropertiesProperty=Fields!PropertyGuid.Value0.4inPropertyTableList4.25inPropertyValue4.34375inNoOutput3true=Fields!ManagedEntityTypeDefaultName.Value + Fields!ManagedEntityDefaultName.Value + Fields!ManagementGroupDefaultName.Value + Fields!Path.ValueRow=Code.GetLocTable("LT_Table").GetString("RT.Column.ObjectLabel", "[Objects]")0.80208in0.40208inOutputPropertyValueElementNormaltrueValue=Fields!PropertyValue.Value5.11042inab518a51-343d-46c4-b1f8-4ec65faafd95StoredProcedureReportDisplayStringGet=Code.GetCallingManagementGroupId()Dell.Connections.001Dell.Connections.Report.RAIDConfig=Code.GetReportLocLanguageCode()R.%DataWarehouseMainSystem.StringXML_F52E2B61-18A1-11d1-B105-00805F49916B="LT"StoredProcedureReportDisplayStringGet=Code.GetCallingManagementGroupId()Dell.Connections.001Dell.Connections.Report.RAIDConfig=Code.GetReportLocLanguageCode()RT.%DataWarehouseMainSystem.StringXML_F52E2B61-18A1-11d1-B105-00805F49916B="LT"trueStoredProcedureDell_Connections_Report_ReportObjectList=Parameters!ObjectList.ValueDataWarehouseMainSystem.StringManagedEntityDefaultNameSystem.StringPathSystem.StringManagedEntityTypeDefaultNameSystem.Int32ManagedEntityRowIdSystem.StringManagementGroupDefaultNameSystem.StringManagedEntityUse
SELECT ManagementGroupGuid, ManagementGroupDefaultName AS ManagementGroupName
FROM vManagementGroup
DataWarehouseMainSystem.GuidManagementGroupGuidSystem.StringManagementGroupNameStoredProcedureDell_Connections_Report_RAIDConfigDataGet=Code.GetReportLocLanguageCode()=Code.ToDbDate(Code.GetReportStartDate())=Code.ToDbDate(Code.GetReportEndDate())=Parameters!ObjectList.Value=Code.BuildXmlValueList(Parameters!Properties.Value)DataWarehouseMainSystem.GuidTypeGuidSystem.StringTypeNameSystem.GuidPropertyGuidSystem.DateTimeDWLastModifiedDateTimeSystem.DateTimeFromDateTimeSystem.Int32ManagedEntityRowIdSystem.StringPropertyValueSystem.StringRelatedManagedEntityDefaultNameSystem.Int32RelatedManagedEntityRowIdSystem.GuidManagedEntityGuidSystem.StringManagedEntityDefaultNameSystem.StringPathSystem.StringManagementGroupDefaultNameSystem.GuidManagementGroupGuidSystem.StringManagedEntityTypeDefaultNameSystem.Byte[]ImageSystem.StringPropertyDefaultNameSystem.StringPropertyDefaultDescription
SELECT prop.PropertyGuid as PropertyGuid, prop.PropertyDefaultName as PropertyDefaultName
FROM vManagedEntityTypeProperty AS prop INNER JOIN
vManagedEntityType ON prop.ManagedEntityTypeRowId = vManagedEntityType.ManagedEntityTypeRowId WHERE
vManagedEntityType.ManagedEntityTypeSystemName='Dell.Connections.ControllerVirtualDisk'
DataWarehouseMainSystem.GuidPropertyGuidSystem.StringPropertyDefaultNameMicrosoft.EnterpriseManagement.Reporting.Code, Version=6.0.0.0, Culture=neutral
Const LocTableStringQuery As String = "R/S[@N='{0}']/text()"
Const TimeZoneParameterName As String = "TimeZone"
Const SD_BaseTypeParameterName As String = "StartDate_BaseType"
Const SD_BaseValueParameterName As String = "StartDate_BaseValue"
Const SD_OffsetTypeParameterName As String = "StartDate_OffsetType"
Const SD_OffsetValueParameterName As String = "StartDate_OffsetValue"
Const ED_BaseTypeParameterName As String = "EndDate_BaseType"
Const ED_BaseValueParameterName As String = "EndDate_BaseValue"
Const ED_OffsetTypeParameterName As String = "EndDate_OffsetType"
Const ED_OffsetValueParameterName As String = "EndDate_OffsetValue"
Const IsRelativeTimeSupported As Boolean = False
Const TimeTypeParameterName As String = "TimeType"
Const TimeWeekMapParameterName As String = "TimeWeekMap"
Dim LocTables As System.Collections.Generic.Dictionary(Of String, Microsoft.EnterpriseManagement.Reporting.XmlStringTable)
Dim ReportTimeZone As Microsoft.EnterpriseManagement.Reporting.TimeZoneCoreInformation
Dim ReportStartDate As DateTime
Dim ReportEndDate As DateTime
Dim ReportTime As Microsoft.EnterpriseManagement.Reporting.ParameterProcessor.RelativeTime
Dim ReportCulture As System.Globalization.CultureInfo
Dim ParameterProcessor As Microsoft.EnterpriseManagement.Reporting.ParameterProcessor
Protected Overrides Sub OnInit()
LocTables = new System.Collections.Generic.Dictionary(Of String, Microsoft.EnterpriseManagement.Reporting.XmlStringTable)()
ReportTimeZone = Nothing
ReportStartDate = DateTime.MinValue
ReportEndDate = DateTime.MinValue
ReportTime = Nothing
ReportCulture = System.Globalization.CultureInfo.GetCultureInfo(Report.User("Language"))
ParameterProcessor = New Microsoft.EnterpriseManagement.Reporting.ParameterProcessor(ReportCulture)
End Sub
Public Function GetCallingManagementGroupId() As String
Return Microsoft.EnterpriseManagement.Reporting.ReportingConfiguration.ManagementGroupId
End Function
Public Function GetReportLocLanguageCode() As String
Return ReportCulture.ThreeLetterWindowsLanguageName
End Function
Public Function GetLocTable(Name As String) As Microsoft.EnterpriseManagement.Reporting.XmlStringTable
Dim LocTable As Microsoft.EnterpriseManagement.Reporting.XmlStringTable
If Not LocTables.TryGetValue(Name, LocTable) Then
LocTable = New Microsoft.EnterpriseManagement.Reporting.XmlStringTable(LocTableStringQuery, Report.Parameters(Name).Value)
LocTables.Add(Name, LocTable)
End If
Return LocTable
End Function
Public Function GetReportTimeZone() As Microsoft.EnterpriseManagement.Reporting.TimeZoneCoreInformation
If IsNothing(ReportTimeZone) Then ReportTimeZone = Microsoft.EnterpriseManagement.Reporting.TimeZoneCoreInformation.FromValueString(Report.Parameters(TimeZoneParameterName).Value)
Return ReportTimeZone
End Function
Public Function ToDbDate(ByVal DateValue As DateTime) As DateTime
return GetReportTimeZone.ToUniversalTime(DateValue)
End Function
Public Function ToReportDate(ByVal DateValue As DateTime) As DateTime
return GetReportTimeZone.ToLocalTime(DateValue)
End Function
Public Function GetReportStartDate() As DateTime
If (ReportStartDate = DateTime.MinValue) Then
If (IsRelativeTimeSupported) Then
ReportStartDate = ParameterProcessor.GetDateTime(ToReportDate(DateTime.UtcNow), Report.Parameters(SD_BaseTypeParameterName).Value, Report.Parameters(SD_BaseValueParameterName).Value, Report.Parameters(SD_OffsetTypeParameterName).Value, Report.Parameters(SD_OffsetValueParameterName).Value, Report.Parameters(TimeTypeParameterName).Value)
Else
ReportStartDate = ParameterProcessor.GetDateTime(ToReportDate(DateTime.UtcNow), Report.Parameters(SD_BaseTypeParameterName).Value, Report.Parameters(SD_BaseValueParameterName).Value, Report.Parameters(SD_OffsetTypeParameterName).Value, Report.Parameters(SD_OffsetValueParameterName).Value)
End if
End If
return ReportStartDate
End Function
Public Function GetReportEndDate() As DateTime
If (ReportEndDate = DateTime.MinValue) Then
If (IsRelativeTimeSupported) Then
ReportEndDate = ParameterProcessor.GetDateTime(ToReportDate(DateTime.UtcNow), Report.Parameters(ED_BaseTypeParameterName).Value, Report.Parameters(ED_BaseValueParameterName).Value, Report.Parameters(ED_OffsetTypeParameterName).Value, Report.Parameters(ED_OffsetValueParameterName).Value, Report.Parameters(TimeTypeParameterName).Value)
If IsBusinessHours(GetReportTimeFilter()) Then ReportEndDate = ReportCulture.Calendar.AddDays(ReportEndDate, 1)
Else
ReportEndDate = ParameterProcessor.GetDateTime(ToReportDate(DateTime.UtcNow), Report.Parameters(ED_BaseTypeParameterName).Value, Report.Parameters(ED_BaseValueParameterName).Value, Report.Parameters(ED_OffsetTypeParameterName).Value, Report.Parameters(ED_OffsetValueParameterName).Value)
End if
End If
return ReportEndDate
End Function
Public Function GetReportTimeFilter() As Microsoft.EnterpriseManagement.Reporting.ParameterProcessor.RelativeTime
If IsNothing(ReportTime) Then ReportTime = New Microsoft.EnterpriseManagement.Reporting.ParameterProcessor.RelativeTime(Report.Parameters(TimeTypeParameterName).Value, Report.Parameters(SD_BaseValueParameterName).Value, Report.Parameters(ED_BaseValueParameterName).Value, CStr(Join(Report.Parameters(TimeWeekMapParameterName).Value, ",")))
return ReportTime
End Function
Public Function IsBusinessHours(Value As Microsoft.EnterpriseManagement.Reporting.ParameterProcessor.RelativeTime) As Boolean
return (Not IsNothing(Value)) And (Value.TimeType = Microsoft.EnterpriseManagement.Reporting.ParameterProcessor.RelativeTimeType.Business)
End Function
Public Function FormatDateTime(Format As String, Value As DateTime) As String
return Value.ToString(Format, ReportCulture)
End Function
Public Function FormatNumber(Format As String, Value As Decimal) As String
return Value.ToString(Format, ReportCulture)
End Function
Public Function FormatString(Format As String, ParamArray Values() as Object) As String
return String.Format(ReportCulture, Format, Values)
End Function
Public Function NullFormatString(Format As String, Value as String) As String
return IIF(String.IsNullOrEmpty(Value), String.Empty, String.Format(ReportCulture, Format, Value))
End Function
Public Function FormatBusinessHours(Format As String, Value As Microsoft.EnterpriseManagement.Reporting.ParameterProcessor.RelativeTime) As String
Dim result As String
If IsBusinessHours(Value) Then
Dim firstDay As DayOfWeek
Dim days As System.Collections.Generic.List(Of String)
firstDay = ReportCulture.DateTimeFormat.FirstDayOfWeek
days = new System.Collections.Generic.List(Of String)()
For loopDay As DayOfWeek = DayOfWeek.Sunday To DayOfWeek.Saturday
Dim day As DayOfWeek
day = CType((CInt(loopDay) + CInt(firstDay)) Mod 7, DayOfWeek)
If value.WeekMap.Contains(day) Then days.Add(ReportCulture.DateTimeFormat.GetAbbreviatedDayName(day))
Next loopDay
result = FormatString(Format, DateTime.Today.Add(Value.StartTime).ToString(ReportCulture.DateTimeFormat.ShortTimePattern), DateTime.Today.Add(Value.EndTime).ToString(ReportCulture.DateTimeFormat.ShortTimePattern), String.Join(",", days.ToArray()))
Else
result = String.Empty
End if
return result
End Function
Public Function BuildXmlValueList(ByVal ValueList() As Object) As String
Return Microsoft.EnterpriseManagement.Reporting.MultiValueParameter.ToXml("Data", "Value", ValueList)
End Function
10.8in11inen-US8.95in0.1in11.7intrue0.1875in=string.Format(Code.GetLocTable("LT_Report").GetString("R.PageFormat", "{0}/{1}"), Globals!PageNumber, Globals!TotalPages)0.15in0.1in8.75intrue0.1875in=string.Format(Code.GetLocTable("LT_Report").GetString("R.TimeZoneFormat", "{0}"), Parameters!TimeZoneName.Value)0.35intruetrue8.5inMicrosoft.EnterpriseManagement.UI.ReportingMicrosoft.EnterpriseManagement.Mom.Internal.UI.Reporting.Parameters.Controls.ReportComboBoxEditorMicrosoft.EnterpriseManagement.UI.ReportingMicrosoft.EnterpriseManagement.Mom.Internal.UI.Reporting.Parameters.Controls.RelativeDateTimePickerMicrosoft.EnterpriseManagement.UI.ReportingMicrosoft.EnterpriseManagement.Mom.Internal.UI.Reporting.Parameters.Controls.Monitoring.ReportMonitoringObjectXmlEditorMicrosoft.EnterpriseManagement.UI.ReportingMicrosoft.EnterpriseManagement.Mom.Internal.UI.Reporting.Parameters.Controls.ReportCheckedListEditorDell Server and Printer Management Pack v3.1 A01
Dell Server and Printer Management Pack Version 3.1 for Microsoft System Center Operations Manager and System Center Essentials.
The Dell Server and Printer Management Pack enables SC Operations Manager and Essentials to more accurately depict the status of Dell systems on a defined network segment. This improved representation, which includes the receipt of alerts and pre-failure alerts with the ability to drill down to each hardware component from the overall Dell hardware health, allows Dell customers to assess, respond to, and better insure availability of Dell systems monitored in the SC environment. In addition to improved availability, the Management Pack enhances the ability to monitor and manage the hardware in a single management solution.
Copyright Dell Inc. 2007-2008.
Dell HardwareDell Hardware GroupDell ServersDell Server GroupDell PrintersDell Printer GroupDell UnknownDell Unknown GroupDell Monolithic ServersDell Monolithic Server GroupDell Modular SystemsDell Modular System GroupDell Systems InstancesDell System InstancesDell Server instanceDell Server instancesIPAddressOMSA URLAsset TagService TagOperating SystemOperating System VersionModelBIOS VersionOMSA VersionIPMI VersionTOE CapableTOE EnableDell Monolithic Server instanceDell Monolithic Server instancesDell Modular Blade instanceDell Modular Blade instancesDell Chassis instance for Modular BladeDell Chassis instance for Modular BladeDell PrinterDell PrinterInput NameOutput NameCover StatusStatusInput Vendor NameInput ModelInput DescriptionInput Maximum CapacityOutput Vendor NameOutput ModelOutput DescriptionOutput Maximum CapacityCover DescriptionSupply TypeSupply DescriptionSupply LevelSupply Maximum LevelDRACDRACDRAC URLHardware Components of Dell ServerHardware Components of Dell ServerServices of Dell ServerServices of Dell ServerSensors of Dell ServerSensors of Dell ServerNumeric Sensors of Dell ServerNumeric Sensors of Dell ServerSensor Device IDSensor Current ReadingSensor base unitsSensor TypeSensor Critical - Lower ThresholdSensor Warning - Lower ThresholdSensor Critical - Upper ThresholdSensor Warning - Upper ThresholdDiscrete Sensors of Dell ServerDiscrete Sensors of Dell ServerDiscrete Sensor Device IDDiscrete Sensor Current ReadingDiscrete Sensor DescriptionTemperature Sensors of Dell ServerTemperature Sensors of Dell ServerTemperature Unit instanceTemperature Unit instanceVoltage Sensors of Dell ServerVoltage Sensors of Dell ServerNumeric Voltage Unit instanceNumeric Voltage Unit instanceDiscrete Voltage Unit instanceDiscrete Voltage Unit instanceCurrent Sensors of Dell ServerCurrent Sensors of Dell ServerNumeric Current Unit instanceNumeric Current Unit instanceBattery Sensors of Dell ServerBattery Sensors of Dell ServerDiscrete Batteries Unit instanceDiscrete Batteries Unit instanceFan group for Dell ServerFan group for Dell ServerFan unit instanceFan unit instanceFan Device IDMemory group for Dell ServerMemory group for Dell ServerMemory unit instanceMemory unit instanceMemory TagMemory TypeMemory CapacityProcessor group for Dell ServerProcessor group for Dell ServerProcessor unit instanceProcessor unit instanceProcessor Device IDProcessor Current Clock SpeedPower Supply group for Dell ServerPower Supply group for Dell ServerPower Supplies unit instancePower Supplies unit instancePower Supply Device IDPower Supply Total Output Power (Wattage)Power Supply Switching SupplyIntrusion for Dell ServerIntrusion for Dell ServerDSM Event Manager service instanceDSM Event Manager service instanceDescritptionStart ModeDSM Data Manager service instanceDSM Data Manager service instanceDescritptionStart ModeDSM Connection service instanceDSM Connection service instanceDescritptionStart ModeDSM Shared service instanceDSM Shared service instanceDescritptionStart ModeBMC for Dell ServerBMC for Dell ServerBMC IP AddressStorage health for Dell ServerOpenManage Storage Management Health for Dell ServerStorage Controller instanceStorage Controller instanceIDStatusSlot IDStateFirmware VersionMinimum Required Firmware VersionDriver VersionMinimum Required Driver VersionNumber of ConnectorsRebuild RateBGI RateCheck Consistency RateRe Construct RateAlarm StateCluster ModeSCSI Initiator IDCache Memory SizePatrol Read ModePatrol Read StatePatrol Read RatePatrol Read IterationsStorage Controller Battery instanceStorage Controller Battery instanceIDStatusStateRecharge CountMaximum Recharge CountPredicted Capacity StatusLearn StateNext Learn TimeMaximum Learn DelayStorage Controller Virtual Disk instanceStorage Controller Virtual Disk instanceIDStatusStateProgressLayoutSizeDevice NameTypeRead PolicyWrite PolicyCache PolicyStripe Element SizeStorage Controller Connector instanceStorage Controller Connector instanceIDStatusStateConnector TypeTerminationSCSI RateStorage Controller Enclosure instanceStorage Controller Enclosure instanceIDStatusStateConnectorTarget IDConfigurationFirmware VersionService TagAsset TagAsset NameBack Plane Part NumberSplit Bus Part NumberEnclosure Part NumberSAS AddressEnclosure AlarmStorage Controller Physical Disk instanceStorage Controller Physical Disk instanceIDStatusStateFailure PredictedProgressTypeCapacityUsed Raid Disk SpaceAvailable Raid Disk SpaceHot SpareVendor IDProduct IDRevisionSerial NumberNegotiated SpeedCapable SpeedManufacture DayManufacture WeekManufacture YearSAS AddressStorage Controller Physical Disk instanceStorage Controller Physical Disk instanceIDStatusStateFailure PredictedProgressTypeCapacityUsed Raid Disk SpaceAvailable Raid Disk SpaceHot SpareVendor IDProduct IDRevisionSerial NumberNegotiated SpeedCapable SpeedManufacture DayManufacture WeekManufacture YearSAS AddressStorage Controller Temperature instanceStorage Controller Temperature instanceIDStatusStateReadingMinimum Warning ThresholdMaximum Warning ThresholdMinimum Failure ThresholdMaximum Failure ThresholdStorage Controller Fan instanceStorage Controller Fan instanceIDStatusStatePart NumberSpeedStorage Controller Power Supply instanceStorage Controller Power Supply instanceIDStatusStatePart NumberStorage Controller EMM instanceStorage Controller EMM instanceIDStatusStatePart NumberFirmware VersionSCSI RateTypeFan group for Dell ChassisFan group for Dell ChassisFan unit instanceFan unit instanceDevice IDPower Supply group for Dell ChassisPower Supply group for Dell ChassisChassis Power Supplies unit instanceChassis Power Supplies unit instancePower Supply Device IDPower Supply Total Output Power (Wattage)Power Supply Switching SupplyDell Unknown instanceDell Unknown instanceDellHardware Group Contains DellServer GroupDellHardware Group contains Dell Server GroupDellHardware Group Contains DellPrinter GroupDell Hardware Group contains Dell Printer GroupDell Printer Group Contains Dell PrinterDell Printer Group Contains Dell PrinterDellServer Hosts DellRACDellServer Hosts DellRACDellHardware Group Contains DellUnknown GroupDell Hardware Group contains Dell Unknown GroupDellServerGroup Contains DellMonolithicServerGroupDellServerGroup Contains DellMonolithicServerGroupDellServerGroup Contains DellModularSystemGroupDellServerGroup Contains DellModularSystemGroupDell Monolithic Server Group Contains Dell Monolithic ServerDell Monolithic Server Group Contains Dell Monolithic ServerDell Modular System Group Contains Dell Modular BladeDell Modular System Group Contains Dell Modular BladeDell Modular Blade Hosts Dell ChassisDell Modular Blade Hosts Dell ChassisDell Chassis Hosts Chassis FansDell Chassis Hosts Chassis FansChassis Fans Hosts Chassis Fan UnitChassis Fans Hosts Chassis Fan UnitDell Chassis Hosts Chassis Power SuppliesDell Chassis Hosts Chassis Power SuppliesChassis PowerSupplies Hosts Chassis Power Supplies UnitChassis PowerSupplies Hosts Chassis Power Supplies UnitDell Unknown Group Contains Dell UnknownDell Unknown Group Contains Dell UnknownDell Server Hosts HardwareComponentsDell Server Hosts HardwareComponentsDell Server Hosts ServicesDell Server Hosts ServicesDell Server Hosts BMCDell Server Hosts BMCDell Hardware Components Hosts SensorsDell Hardware Components Hosts SensorsServer HardwareComponents Sensors Hosts Temperature ComponentServer HardwareComponents Sensors Hosts Temperature ComponentTemperature Hosts Temperature UnitTemperature Hosts Temperature UnitServer HardwareComponents Sensors Hosts Voltage ComponentServer HardwareComponents Sensors Hosts Voltage ComponentVoltage Hosts Voltage Numeric UnitVoltage Hosts Voltage Numeric UnitVoltage Hosts Voltage Discrete UnitVoltage Hosts Voltage Discrete UnitServer HardwareComponents Sensors Hosts Currents ComponentServer HardwareComponents Sensors Hosts Currents ComponentCurrents Hosts Currents Numeric UnitCurrents Hosts Currents Numeric UnitServer HardwareComponents Sensors Hosts Batteries ComponentServer HardwareComponents Sensors Hosts Batteries ComponentBatteries Hosts Batteries Discrete UnitBatteries Hosts Batteries Discrete UnitServer HardwareComponents Hosts Fans ComponentServer HardwareComponents Hosts Fans ComponentFans Hosts Fans UnitFans Hosts Fans UnitServer HardwareComponents Hosts Power Supplies ComponentServer HardwareComponents Hosts Power Supplies ComponentPower Supplies Hosts Power Supplies UnitPower Supplies Hosts Power Supplies UnitServer HardwareComponents Hosts Memory ComponentServer HardwareComponents Hosts Memory ComponentMemory Hosts Memory UnitMemory Hosts Memory UnitServer HardwareComponents Hosts Fans ProcessorsServer HardwareComponents Hosts Fans ProcessorsProcessors Hosts Fans Processors UnitProcessors Hosts Fans Processors UnitServer HardwareComponents Hosts Intrusion ComponentServer HardwareComponents Hosts Intrusion ComponentServices Hosts DSM Event ManagerServices Hosts DSM Event ManagerServices Hosts DSM Shared ServicesServices Hosts DSM Shared ServicesServices Hosts DSM Connection ServicesServices Hosts DSM Connection ServicesServices Hosts DSM Data ManagerServices Hosts DSM Data ManagerDell Server Hosts DSM Dell StorageDell Server Hosts DSM Dell StorageDell Storage Hosts Dell Storage ControllerDell Storage Hosts Dell Storage ControllerDell Hardware Components discovery data sourceDell Hardware Components discovery data sourceBMC discovery data sourceBMC discovery data sourceServices discovery data sourceServices discovery data sourceChassis discovery data sourceChassis discovery data sourceDell Storage discovery data sourceDell Storage discovery data sourceDell System discovery data sourceDell System discovery data sourceDell Server discovery data sourceDell Server discovery data sourceDell Server classification discovery data sourceDell Server classification discovery data sourceDell Printer discovery data sourceDell Printer discovery data sourceEvent Triggered Script 3 State Unit Monitor TypeEvent Triggered Script 3 State Unit Monitor TypePrinter Operation State Unit Monitor TypePrinter Operation State Unit Monitor TypeDell printer discoveryDell printer group population discoveryDell Hardware Group population discoveryDell Server Group population discoveryDell Unknown Group population discoveryDell System discoveryDell Server discoveryDell Monolithic Server Group population discoveryDiscovery and Classification of Dell Server to Modular and Monolithic ServersDell Modular System Group population discoveryDell Chassis discoveryDiscover Hardware Components for Dell ServersServices discoveryBMC DRAC discoveryDell Storage discoveryDell OMSS Device failedDell OMSS Physical Disk removedDell OMSS Physical disk offlineDell OMSS Physical disk degradedDell OMSS Virtual disk deletedDell OMSS Virtual disk failedDell OMSS Virtual disk degradedDell OMSS Virtual disk check consistency failedDell OMSS Virtual disk format failedDell OMSS Virtual disk initialization failedDell OMSS Physical disk initialize failedDell OMSS Virtual disk reconfiguration failed Dell OMSS Virtual disk rebuild failed Dell OMSS Physical disk rebuild failed Dell OMSS Predictive failure reportedDell OMSS Temperature max warning threshold exceedDell OMSS Temperature below min warning thresholdDell OMSS Temperature max failure threshold exceedDell OMSS Temperature below min failure thresholdDell OMSS Smart FPT exceededDell OMSS Smart config changeDell OMSS Smart warningDell OMSS Smart warning temperatureDell OMSS Smart warning degradedDell OMSS Failure prediction threshold exceededDell OMSS Enclosure was shutdownDell OMSS Enclosure firmware mismatchDell OMSS Redundancy degradedDell OMSS Redundancy lostDell OMSS BGI failedDell OMSS Firmware version mismatchDell OMSS Driver version mismatchDell OMSS Array Manager is installed on the systemDell OMSS Communication timeoutDell OMSS Controller battery lowDell OMSS Bad block replacement errorDell OMSS Bad block sense errorDell OMSS Bad block medium errorDell OMSS Bad block extended sense errorDell OMSS Bad block extended medium errorDell OMSS Rebuild completed with errorsDell OMSS RAID controller config file can't be opened.Dell OMSS RAID controller config file out of date or corruptedDell OMSS Current kernel and SCSI driver version are olderDell OMSS Non-RAID SCSI driver version is olderDell OMSS Controller battery needs to be replacedDell OMSS Controller battery temperature is above normalDell OMSS Unsupported configuration detectedDell OMSS Controller battery has been removedDell OMSS Controller battery Learn cycle timed outDell OMSS Invalid SAS configuration detectedDell OMSS Controller cache has been discardedDell OMSS Single-bit ECC error limit exceededDell OMSS Multiple enclosures are attached to the controllerDell OMSS Global hot spare failed. Dell OMSS Dedicated hot spare failedDell OMSS Only hot spare available is a SATA diskDell OMSS Only hot spare available is a SAS diskDell OMSS Physical disk is not supportedDell OMSS Recharge count maximum exceededDell OMSS Controller battery degradedDell OMSS Device is missingDell OMSS Device is in an unknown stateDell OMSS Storage Management has lost communication with the controllerDell OMSS Physical disk Clear operation failedDell OMSS Patrol Read found an uncorrectable media errorDell OMSS A block on the physical disk has been punctured by the controllerDell OMSS Dedicated hot spare is too smallDell OMSS Global hot spare is too smallDell OMSS Hot spare SMART polling failedDell OMSS Redundant path is brokenDell OMSS Multi-bit ECC errorDell OMSS Single-bit ECC errorDell OMSS Communication with the enclosure has been lostDell OMSS EMM has failedDell OMSS A device has been removedDell OMSS An EMM has been removedDell OMSS Bad sensor on an enclosureDell OMSS Bad PHYDell OMSS Enclosure is unstableDell OMSS Enclosure has a hardware errorDell OMSS Enclosure is not respondingDell OMSS Physical disk is too small to be used for a rebuildDell OMSS Bad block table is 80% fullDell OMSS Bad block table is fullDell OMSS A physical disk is incompatibleDell OMSS A virtual disk is permanently degradedDell OMSS The firmware on the EMMs is not the same versionDell OMSS Power supply in the enclosure has an AC failureDell OMSS Power supply in the enclosure has a DC failureDell OMSS Initialization sequence of SAS components failed during system startupDell OMSS Diagnostic messageDell OMSS Problems with the battery or the battery chargerDell OMSS Single-bit ECC errorDell OMSS Single-bit ECC errorDell OMSS Single-bit ECC errorDell OMSS The DC power supply is switched offDell OMSS AC power supply cable has been removedDell OMSS NVRAM has corrupted dataDell OMSS NVRAM has corrupt dataDell OMSS SAS port reportDell OMSS Controller event logDell OMSS Controller event logDell OMSS Controller was unable to recover data from the cacheDell OMSS BGI completed with uncorrectable errorsDell OMSS Check Consistency found inconsistent parity dataDell OMSS Check Consistency logging of inconsistent parity data is disabledDell OMSS Virtual disk initialization cancelledDell OMSS Virtual disk initialization failedDell OMSS Error occurredDell OMSS Rebuild failed due to errors on the source physical diskDell OMSS Rebuild failed due to errors on the target physical diskDell OMSS A bad disk block error during a write operationDell OMSS Unrecoverable disk media error during the rebuildDell OMSS Enclosure firmware download failedDell OMSS SAS SMP communications error Dell OMSS SAS expander errorDell OMSS Physical disk is not certifiedDell OMSS Physical disk is using an incompatible technologyDell OMSS Physical disk insertedDell OMSS Virtual disk createdDell OMSS Virtual disk config changedDell OMSS Virtual disk check consistency startedDell OMSS Virtual disk format startedDell OMSS Virtual disk initialization startedDell OMSS Physical disk initialization startedDell OMSS Virtual disk reconfiguration startedDell OMSS Virtual disk rebuild startedDell OMSS Physical disk rebuild startedDell OMSS Virtual disk check consistency cancelledDell OMSS Virtual disk initialization cancelledDell OMSS Physical disk rebuild cancelledDell OMSS Virtual disk check consistency completedDell OMSS Virtual disk format completedDell OMSS Virtual disk initialization completedDell OMSS Physical disk initialize completedDell OMSS Virtual disk reconfiguration completedDell OMSS Virtual disk rebuild completedDell OMSS Physical disk rebuild completedDell OMSS SCSI sense dataDell OMSS Global hot spare assignedDell OMSS Global hot spare unassignedDell OMSS Controller battery is reconditioningDell OMSS Controller battery recondition is completedDell OMSS A consistency check on a virtual disk has been pausedDell OMSS A consistency check on a virtual disk has been resumedDell OMSS A virtual disk and its mirror have been splitDell OMSS A mirrored virtual disk has been unmirroredDell OMSS Change write policyDell OMSS Device returned to normalDell OMSS Redundancy normalDell OMSS BGI StartedDell OMSS BGI CancelledDell OMSS BGI completedDell OMSS Virtual disk initializationDell OMSS Enclosure alarm enabledDell OMSS Enclosure alarm disabledDell OMSS Dead disk segments restoredDell OMSS Physical disk dead segments recoveredDell OMSS Controller rebuild rate has changedDell OMSS Controller alarm enabledDell OMSS Controller alarm disabledDell OMSS Asset tag changedDell OMSS Asset name changedDell OMSS Service tag changedDell OMSS Max temperature warning threshold changedDell OMSS Minimum temperature warning threshold changedDell OMSS Controller alarm has been testedDell OMSS Controller config has been resetDell OMSS Physical disk onlineDell OMSS Virtual disk renamedDell OMSS Dedicated hot spare assignedDell OMSS Dedicated hot spare unassignedDell OMSS Communication regainedDell OMSS See Readme file for controller driver versionsDell OMSS Controller battery charge level is normalDell OMSS Controller battery temperature is normalDell OMSS Controller battery has been replacedDell OMSS Controller battery Learn cycle has startedDell OMSS Controller battery Learn cycle has completedDell OMSS Controller battery Learn cycle has been postponedDell OMSS Controller battery Learn cycle will start (in days)Dell OMSS Controller battery Learn cycle will start (in hours)Dell OMSS Controller write policy has been changed to Write ThroughDell OMSS Controller write policy has been changed to Write BackDell OMSS Virtual disk Check Consistency completed with correctionsDell OMSS Virtual disk reconfiguration has resumedDell OMSS Virtual disk Read policy has changedDell OMSS Dedicated hot spare assignedDell OMSS Dedicated hot spare unassignedDell OMSS Virtual disk cache policy has changedDell OMSS Global hot spare has been removedDell OMSS A dedicated hot spare has been removedDell OMSS A dedicated hot spare has been unassignedDell OMSS Controller battery temperature is above normalDell OMSS Battery charge in progressDell OMSS Battery charge process interruptedDell OMSS Controller alarm is silencedDell OMSS BGI rate has changedDell OMSS Patrol read rate has changedDell OMSS Check Consistency rate has changedDell OMSS Controller debug log file has been exportedDell OMSS A foreign configuration has been clearedDell OMSS A foreign configuration has been importedDell OMSS Patrol Read mode has changedDell OMSS Patrol Read has startedDell OMSS Patrol Read has stoppedDell OMSS Virtual disk blink has been initiatedDell OMSS Virtual disk blink has ceasedDell OMSS Controller battery is chargingDell OMSS Controller battery is executing a Learn cycleDell OMSS Physical disk Clear operation has startedDell OMSS Physical disk blink has initiatedDell OMSS Physical disk blink has ceasedDell OMSS Clear operation has cancelledDell OMSS Physical disk has been startedDell OMSS Enclosure blink operation has initiatedDell OMSS Enclosure blink has ceasedDell OMSS SMART thermal shutdown is enabledDell OMSS SMART thermal shutdown is disabledDell OMSS Controller log file entryDell OMSS Controller reconstruct rate has changedDell OMSS Physical disk Clear operation has completedDell OMSS Patrol Read corrected a media errorDell OMSS Physical disk rebuild has resumedDell OMSS Controller battery charge level is below a normal thresholdDell OMSS Controller battery charge level is within normal limitsDell OMSS A disk media error has been correctedDell OMSS Virtual disk has inconsistent dataDell OMSS A redundant path has been restoredDell OMSS A disk media error was corrected during recoveryDell OMSS An EMM has been discoveredDell OMSS A device has been insertedDell OMSS An EMM has been insertedDell OMSS Enclosure cannot support both SAS and SATA physical disksDell OMSS An attempt to hot plug an EMM has been detectedDell OMSS Diagnostic message Dell OMSS The power supply is switched onDell OMSS The power supply cable has been insertedDell OMSS A foreign configuration has been detectedDell OMSS SAS port reportDell OMSS A bad disk block has been reassignedDell OMSS A controller hot plug has been detectedDell OMSS Controller event logDell OMSS Controller has recovered cached data from the BBUDell OMSS The factory default settings have been restoredDell OMSS Check Consistency made corrections and completedDell OMSS A physical disk is marked as missingDell OMSS A physical disk that was marked as missing has been replacedDell OMSS The enclosure temperature has returned to normalDell OMSS Enclosure firmware download in progressDell OMSS The battery charge cycle is completeDell OMSS A user has discarded data from the controller cacheDell OMSS Physical disks removed while the system was shut down.Dell OMSS Physical disks have been removed from a virtual diskDell OMSS All virtual disks are missing from the controllerDell OMSS Dedicated spare imported as global due to missing arraysDell OMSS SEP has been rebootedDell OMSS Virtual Disk Redundancy has been degradedDell OMSS Attempted import of Unsupported Virtual Disk typeDell OMSA Thermal shutdown protection initiated Dell OMSA SMBIOS data is absentDell OMSA ASR action performedDell OMSA RCI table is corruptDell OMSA Temperature sensor detected a warning valueDell OMSA Temperature sensor detected a failure valueDell OMSA Temperature sensor detected a non-recoverable valueDell OMSA Fan sensor detected a warning valueDell OMSA Fan sensor detected a failure valueDell OMSA Fan sensor detected a non-recoverable valueDell OMSA Voltage sensor detected a warning valueDell OMSA Voltage sensor detected a failure valueDell OMSA Voltage sensor detected a non-recoverable valueDell OMSA Current sensor detected a warning valueDell OMSA Current sensor detected a failure valueDell OMSA Current sensor detected a non-recoverable valueDell OMSA Chassis intrusion in progressDell OMSA Chassis intrusion detectedDell OMSA Chassis intrusion detected a non-recoverable valueDell OMSA Redundancy degradedDell OMSA Redundancy lostDell OMSA Redundancy lostDell OMSA Power supply detected a warning sensorDell OMSA Power supply detected a failure sensorDell OMSA Power supply sensor detected a non-recoverable valueDell OMSA Memory device correction rate exceededDell OMSA Memory spare bank was activated or a multibit ECC error occurred. Dell OMSA Fan enclosure removed from systemDell OMSA Fan enclosure removed from system for an extended amount of timeDell OMSA Fan enclosure sensor detected a non-recoverable valueDell OMSA AC power has been lostDell OMSA An AC power cord has lost its powerDell OMSA An AC power cord sensor in the system failedDell OMSA Log size is near or at capacityDell OMSA Log size is fullDell OMSA Log sensor has failedDell OMSA Processor sensor detected a warning valueDell OMSA Processor sensor detected a failure valueDell OMSA Processor sensor detected a non-recoverable valueDell OMSA Device configuration error detectedDell OMSA Battery sensor detected a warning valueDell OMSA Battery sensor detected a failure valueDell OMSA Battery sensor detected a non-recoverable valueDell OMSA Log was clearedDell OMSA Log backup createdDell OMSA Server Administrator startingDell OMSA Server Administrator startup completeDell OMSA A system BIOS update has been scheduled for the next rebootDell OMSA A previously scheduled system BIOS update has been canceledDell OMSA User initiated host system control actionDell OMSA System management data manager startedDell OMSA System management data manager stoppedDell OMSA IPMI statusDell OMSA Temperature sensor has failedDell OMSA Temperature sensor value unknownDell OMSA Temperature sensor returned to a normal valueDell OMSA Fan sensor has failedDell OMSA Fan sensor value unknownDell OMSA Fan sensor returned to a normal valueDell OMSA Voltage sensor has failedDell OMSA Voltage sensor value unknownDell OMSA Voltage sensor returned to a normal valueDell OMSA Current sensor has failedDell OMSA Current sensor value unknownDell OMSA Current sensor returned to a normal valueDell OMSA Chassis intrusion sensor has failedDell OMSA Chassis intrusion sensor value unknownDell OMSA Chassis intrusion returned to normalDell OMSA Redundancy sensor has failedDell OMSA Redundancy sensor value unknownDell OMSA Redundancy not applicableDell OMSA Redundancy is offlineDell OMSA Redundancy regainedDell OMSA Power supply sensor has failedDell OMSA Power supply sensor value unknownDell OMSA Power supply returned to normalDell OMSA Fan enclosure sensor has failedDell OMSA Fan enclosure sensor value unknownDell OMSA Fan enclosure inserted into systemDell OMSA AC power cord sensor has failedDell OMSA AC power cord is not being monitoredDell OMSA AC power has been restoredDell OMSA Log monitoring has been disabledDell OMSA Log status is unknownDell OMSA Log size is no longer near or at capacityDell OMSA Processor sensor has failedDell OMSA Processor sensor value unknownDell OMSA Processor sensor returned to a normal valueDell OMSA A pluggable device eventDell OMSA Device added to systemDell OMSA Device removed from systemDell OMSA Battery sensor has failedDell OMSA Battery sensor value unknownDell OMSA Battery sensor returned to a normal valueClear ESM LogsLaunch Server AdministratorLaunch InBand Dell Remote Access ConsoleCheck Power StatusPower OnPower Off GracefullyForced Power OffPower CyclePower ResetLED Identification OnLED Identification OffUnit Monitor for DSM Data Manager ServiceRunningNot RunningUnit Monitor for DSM Event Manager ServiceRunningNot RunningUnit Monitor for DSM Connection ServiceRunningNot RunningUnit Monitor for DSM Shared ServiceRunningNot RunningUnit Monitor for Chassis Fan UnitHealthyDegradedUnhealthyEvent Monitor for Chassis Fan UnitHealthyWarningCriticalEvent Monitor for Chassis Fan UnitHealthyWarningCriticalUnit Monitor for Chassis Power Supply UnitHealthyDegradedUnhealthyEvent Monitor for Chassis Power Supply UnitHealthyWarningCriticalUnit Monitor for Server Fan UnitHealthyDegradedUnhealthyEvent Monitor for Server Fan UnitHealthyWarningCriticalEvent Monitor for Server Fan UnitHealthyWarningCriticalUnit Monitor for Temperature UnitSuccessWarningErrorEvent Monitor for Temperature UnitSuccessWarningCriticalUnit Monitor for Numeric Voltage UnitHealthyDegradedUnhealthyUnit Monitor for Discrete Voltage UnitHealthyDegradedUnhealthyEvent Monitor for Numeric Voltage UnitSuccessWarningCriticalEvent Monitor for Discrete Voltage UnitSuccessWarningCriticalUnit Monitor for Numeric Current UnitHealthyDegradedUnhealthyEvent Monitor for Numeric Current UnitSuccessWarningCriticalUnit Monitor for Discrete Batteries UnitHealthyDegradedUnhealthyEvent Monitor for Discrete Battery UnitSuccessWarningCriticalUnit Monitor for Server Power SupplyHealthyDegradedUnhealthyEvent Monitor for Server Power Supply UnitSuccessWarningCriticalEvent Monitor for Server Power Supply UnitSuccessWarningCriticalEvent Monitor for Server Power Supply UnitSuccessWarningCriticalUnit Monitor for Memory UnitSuccessWarningErrorEvent Monitor for Server Memory UnitSuccessWarningCriticalUnit Monitor for Processor UnitSuccessWarningErrorEvent Monitor for Server Processor UnitSuccessWarningCriticalUnit Monitor for IntrusionSuccessWarningErrorEvent Monitor for Server IntrusionSuccessWarningCriticalUnit Monitor for Controller BatterySuccessWarningErrorUnit Monitor for Controller Virtual DiskSuccessWarningErrorUnit Monitor for Connector Physical DiskSuccessWarningErrorUnit Monitor for Enclosure Physical DiskSuccessWarningErrorUnit Monitor for Enclosure TemperatureSuccessWarningErrorUnit Monitor for Enclosure FanSuccessWarningErrorUnit Monitor for Enclosure EMMSuccessWarningErrorUnit Monitor for Enclosure Power SupplySuccessWarningErrorEvent Monitor for Controller BatterySuccessWarningCriticalEvent Monitor for Controller Virtual DiskSuccessWarningCriticalEvent Monitor for Connector Physical DiskSuccessWarningCriticalEvent Monitor for Enclosure Physical DiskSuccessWarningCriticalEvent Monitor for Enclosure TemperatureSuccessWarningCriticalEvent Monitor for Enclosure FanSuccessWarningCriticalEvent Monitor for Enclosure EMMSuccessWarningCriticalEvent Monitor for Enclosure Power SupplySuccessWarningCriticalUnit Monitor for Printer AvailabilityOKCriticalWarningDependency Monitor for Dell Hardware Group from Server GroupDependency Monitor for Dell Hardware Group from Printer GroupDependency Monitor for Dell PrinterDependency Monitor for Dell Server Group from Monolithic Server GroupDependency Monitor for Dell Server Group from Modular System GroupDependency Monitor for Dell Monolithic Server GroupDependency Monitor for Dell Modular System GroupDependency Monitor for Chassis FansDependency Monitor for Chassis Fan UnitDependency Monitor for Chassis Power SupplyDependency Monitor for Chassis Power Supply UnitDependency Monitor for Hardware ComponentsDependency Monitor for Sever Power SupplyDependency Monitor for Sever Power Supply UnitDependency Monitor for Sever FansDependency Monitor for Sever Fan UnitDependency Monitor for MemoryDependency Monitor for Memory UnitDependency Monitor for ProcessorDependency Monitor for Processor UnitDependency Monitor for Sensor GroupDependency Monitor for TemperatureDependency Monitor for Temperature UnitDependency Monitor for VoltageDependency Monitor for Numeric VoltageDependency Monitor for Discrete VoltageDependency Monitor for CurrentDependency Monitor for Numeric CurrentDependency Monitor for BatteriesDependency Monitor for Discrete BatteriesDependency Monitor for IntrusionDependency Monitor for Dell Server from Storage groupHealth roll up from controller to storage groupHealth roll up from controller battery to controllerHealth roll up from controller connector to controllerHealth roll up from controller virtual disk to controllerHealth roll up from enclosure to connectorHealth roll up from physical disk to connectorHealth roll up from physical disk to enclosureHealth roll up from temperature to enclosureHealth roll up from fan to enclosureHealth roll up from emm to enclosureHealth roll up from power supply to enclosureDependency Monitor for ServicesDependency Monitor for DSM Event Manager ServiceDependency Monitor for DSM Data Manager ServiceDependency Monitor for DSM Connection ServiceDependency Monitor for DSM Shared ServiceDell ServersState View of Monolithic and Modular bladesAll Groups DiagramDiagram view for complete hierarchy of Dell hardware componentsDell Monolithic Servers DiagramDiagram View of Monolithic ServersDell Modular Systems DiagramDiagram View of Modular BladesDell Server AlertsDell Events Alert ViewDell Server and PrinterFolder for Dell Server Management PackDiagram ViewFolder for Dell Management Pack Diagram ViewState ViewFolder for Dell Management Pack State ViewAlert ViewFolder for Dell Management Pack Alert ViewSystem uptimeDRAC5 Product NameDRAC5 Product ShortnameDRAC5 Product DescriptionDRAC5 Product ManufacturerDRAC5 Product VersionDRAC5 Chassis TagDRAC5 Product UrlDRAC5 System ServiceTagDRAC5 Firmware VersionDell Out of Band DRAC GroupSystem uptimeDRAC MC Product NameDRAC MC Product ShortnameDRAC MC Product DescriptionDRAC MC Product ManufacturerDRAC MC Product VersionDRAC MC Chassis TagDRAC MC Product UrlDRAC MC System ServiceTagDRAC MC Firmware VersionDell Out of Band CMC GroupNameShort Product NameDescriptionManufacturerVersionService TagOut Of Band URLChassis NameFirmwareDell ESM LogLogDSDell BMC LogLogDSBIOS Config InstanceDell Server BIOS ConfigurationDell Windows EventsDell related windows event ReportDell Windows EventsThis report shows a table of all dell related windows events and a count by Server filtered by Severity.Click on plus sign to see a full description for this reportPage {0} of {1}All dates and times are shown in {0}Report TimeReport DurationFrom {0} to {1}{2} from {0} to {1}Object(s){0} Dell Servers included in this report{0}: {1}{0} {1}| {0}All objects contained by:MonitorEvent TypeEvent CategoryEvent IDSourceActions(All)TimeEvent IDSample DescriptionRepeat CountObjectEvent TypeSourceRuleViews:State view...Event view...Health configuration...Alert view...Reports:Event Detail Report...Custom Event Report...Rule Report...Firmware and Driver VersionsFirmware and Driver Versions Report Of Dell SereversFirmware and Driver Versions ReportThis report shows Firmware and Driver Versions Of Dell Serevers.Click on plus sign to see a full description for this reportPage {0} of {1}All dates and times are shown in {0}Report TimeReport DurationFrom {0} to {1}{2} from {0} to {1}Object(s){0} Dell Servers Included in this report{0}: {1}{0} {1}| {0}All objects contained by:Objects Filtered ByGroup ByActions(All)DeviceESM Log ReportESM Log ReportESM Log ReportThis report shows events collected from ESM Log and a count by Server.Click on plus sign to see a full description for this reportPage {0} of {1}All dates and times are shown in {0}Report TimeReport DurationFrom {0} to {1}{2} from {0} to {1}Object(s){0} Dell Servers Included in this report{0}: {1}{0} {1}| {0}All objects contained by:MonitorEvent TypeEvent CategoryEvent IDSourceActions(All)TimeEvent IDDescriptionRepeat CountObjectEvent TypeSourceRuleViews:State view...Event view...Health configuration...Alert view...Reports:Event Detail Report...Custom Event Report...Rule Report...BMC Log ReportBMC Log ReportBMC Log ReportThis report shows events collected from BMC Log and a count by Server.Click on plus sign to see a full description for this reportPage {0} of {1}All dates and times are shown in {0}Report TimeReport DurationFrom {0} to {1}{2} from {0} to {1}Object(s){0} Dell Servers Included in this report{0}: {1}{0} {1}| {0}All objects contained by:MonitorEvent TypeEvent CategoryEvent IDSourceActions(All)TimeEvent IDDescriptionRepeat CountObjectEvent TypeSourceRuleViews:State view...Event view...Health configuration...Alert view...Reports:Event Detail Report...Custom Event Report...Rule Report...BIOS ConfigurationBIOS Configuration Report Of Dell SereversBIOS Configuration ReportThis report shows BIOS Configuration Of Dell Serevers.Click on plus sign to see a full description for this reportPage {0} of {1}All dates and times are shown in {0}Report TimeReport DurationFrom {0} to {1}{2} from {0} to {1}Object(s){0} Dell Servers Included in this report{0}: {1}{0} {1}| {0}All objects contained by:Objects Filtered ByGroup ByActions(All)DeviceRAID ConfigurationRAID Configuration Report Of Dell SereversRAID Configuration ReportThis report shows RAID Configuration Of Dell Serevers.Click on plus sign to see a full description for this reportPage {0} of {1}All dates and times are shown in {0}Report TimeReport DurationFrom {0} to {1}{2} from {0} to {1}Object(s){0} Dell Servers Included in this report{0}: {1}{0} {1}| {0}All objects contained by:Objects Filtered ByGroup ByActions(All)DeviceObjectsColumnsTime ZoneFromToTypeEvent IDManagement PackManagement GroupDell.Connections.DRACMC.DiscoveryDell.Connections.CMC.DiscoveryDell.Connections.DRAC_5.DiscoveryDell.Connections.DRACMC.PopulateGroupDell.Connections.DRAC_5.PopulateGroupDell.Connections.CMC.PopulateGroupSummaryDevice failedCausesA storage component such as a physical disk or an enclosure has failed. The failed component may have been identified by the controller or channelResolutionsReplace the failed component. Using Dell OpenManage Storage Management, you can identify which disk has failed by locating the disk that has a red "X" for its status. Perform a rescan after replacing the disk. SummaryPhysical disk removedCausesA physical disk has been removed from the disk group. This alert can also be caused by loose or defective cables or by problems with the enclosure.ResolutionsIf a physical disk was removed from the array, either replace the disk or restore the original disk. Using Dell OpenManage Storage Management, you can identify which disk has been removed by locating the disk that has a red "X" for its status. Perform a rescan after replacing or restoring the disk. If a disk has not been removed from the array, then check for problems with the cables. See the Dell OpenManage Storage Management User Guide Troubleshooting - Cables Attached Correctly section for more information on checking the cables. Make sure that the enclosure is powered on. If the problem persists, check the enclosure documentation for further diagnostic information.SummaryPhysical disk offlineCausesA physical disk in the disk group is offline. A user may have manually put the physical disk offline.ResolutionsUsing Dell OpenManage Storage Management, perform a rescan. You can also select the offline disk and perform a Make Online operation.SummaryPhysical disk degradedCausesA physical disk has reported an error condition and may be degraded. The physical disk may have reported the error condition in response to a consistency check or other operation.ResolutionsReplace the degraded physical disk. You can identify which disk is degraded using Dell OpenManage Storage Management by locating the disk that has a red "X" for its status. Perform a rescan after replacing the disk.SummaryVirtual disk deletedCausesA virtual disk has been deleted. "Performing a Reset Configuration" may detect that a virtual disk has been deleted and generate this alert.ResolutionsNoneSummaryVirtual disk failedCausesOne or more physical disks included in the virtual disk have failed. If the virtual disk is non-redundant (does not use mirrored or parity data), then the failure of a single physical disk can cause the virtual disk to fail. If the virtual disk is redundant, then more physical disks have failed than can be rebuilt using mirrored or parity information.ResolutionsCreate a new virtual disk and restore from a backup.SummaryVirtual disk degradedCausesCause 1: This alert message occurs when a physical disk included in a redundant virtual disk fails. Because the virtual disk is redundant (uses mirrored or parity information) and only one physical disk has failed, the virtual disk can be rebuilt.Cause 2: A physical disk in the disk group has been removed.ResolutionsAction 1: Configure a hot spare for the virtual disk if one is not already configured. Rebuild the virtual disk. When using an Expandable RAID Controller (PERC) PERC 3/SC, 3/DCL, 3/DC, 3/QC, 4/SC, 4/DC, 4e/DC, 4/Di, CERC ATA100/4ch, PERC 5/E, PERC 5/i or a Serial Attache SCSI (SAS) 5/iR controller, rebuild the virtual disk by first configuring a hot spare for the disk, and then initiating a write operation to the disk. The write operation will initiate a rebuild of the disk. Action 2: If a physical disk was removed from the disk group, either replace the disk or restore the original disk. You can identify which disk has been removed using Dell OpenManage Storage Management by locating the disk that has a red "X" for its status. Perform a rescan after replacing the disk.SummaryVirtual disk check consistency failedCausesA physical disk included in the virtual disk failed or there is an error in the parity information. A failed physical disk can cause errors in parity information.ResolutionsReplace the failed physical disk. You can identify which disk has failed using Dell OpenManage Storage Management by locating the disk that has a red "X" for its status. Rebuild the physical disk. When finished, restart the check consistency operation. SummaryVirtual disk format failed.CausesA physical disk included in the virtual disk failed.ResolutionsReplace the failed physical disk. You can identify which physical disk has failed using Dell OpenManage Storage Management by locating the disk that has a red "X" for its status. Rebuild the physical disk. When finished, restart the virtual disk format operation. SummaryVirtual disk initialization failedCausesA physical disk included in the virtual disk has failed or a user has cancelled the initialization. ResolutionsIf a physical disk has failed, then replace the physical disk.SummaryPhysical disk initialize failedCausesThe physical disk has failed or is corrupt.ResolutionsReplace the failed or corrupt disk. You can identify a disk that has failed using Dell OpenManage Storage Management by locating the disk that has a red "X" for its status. Restart the initialization.SummaryVirtual disk reconfiguration failedCausesA physical disk included in the virtual disk has failed or is corrupt. A user may also have cancelled the reconfiguration.ResolutionsReplace the failed or corrupt disk. You can identify a disk that has failed using Dell OpenManage Storage Management by locating the disk that has a red "X" for its status.If the physical disk is part of a redundant array, then rebuild the physical disk. When finished, restart the reconfiguration.SummaryVirtual disk rebuild failedCausesA physical disk included in the virtual disk has failed or is corrupt. A user may also have cancelled the rebuild.ResolutionsReplace the failed or corrupt disk. You can identify a disk that has failed using Dell OpenManage Storage Management by locating the disk that has a red "X" for its status. Restart the virtual disk rebuild.SummaryPhysical disk rebuild failedCausesA physical disk included in the virtual disk has failed or is corrupt. A user may also have cancelled the rebuild.ResolutionsReplace the failed or corrupt disk. You can identify a disk that has failed using Dell OpenManage Storage Management by locating the disk that has a red "X" for its status. Rebuild the virtual disk rebuild.SummaryPredictive Failure reported.CausesThe physical disk is predicted to fail. Many physical disks contain Self Monitoring Analysis and Reporting Technology (SMART). When enabled, SMART monitors the health of the disk based on indications such as the number of write operations that have been performed on the disk.ResolutionsReplace the physical disk. Even though the disk may not have failed yet, it is strongly recommended that you replace the disk.If this disk is part of a redundant virtual disk, perform the Offline task on the disk; replace the disk; and then assign a hot spare and the rebuild will start automatically.If this disk is a hot spare, then unassign the hot spare; perform the Prepare to Remove task on the disk; replace the disk; and assign the new disk as a hot spare.NoticeIf this disk is part of a nonredundant disk, back up your data immediately. If the disk fails, you will not be able to recover the data.SummaryTemperature exceeded the maximum warning thresholdCausesThe physical disk enclosure is too hot. A variety of factors can cause the excessive temperature. For example, a fan may have failed, the thermostat may be set too high, or the room temperature may be too hot. ResolutionsCheck for factors that may cause overheating. For example, verify that the enclosure fan is working. You should also check the thermostat settings and examine whether the enclosure is located near a heat source. Make sure the enclosure has enough ventilation and that the room temperature is not too hot. See the physical disk documentation for more diagnostic information. SummaryTemperature dropped below the minimum warning thresholdCausesThe physical disk enclosure is too cool. ResolutionsCheck if the thermostat setting is too low and if the room temperature is too cool. SummaryTemperature exceeded the maximum failure thresholdCausesThe physical disk enclosure is too hot. A variety of factors can cause the excessive temperature. For example, a fan may have failed, the thermostat may be set too high, or the room temperature may be too hot. ResolutionsCheck for factors that may cause overheating. For example, verify that the enclosure fan is working. You should also check the thermostat settings and examine whether the enclosure is located near a heat source. Make sure the enclosure has enough ventilation and that the room temperature is not too hot. See the physical disk documentation for more diagnostic information. SummaryTemperature dropped below the minimum failure thresholdCausesThe physical disk enclosure is too cool. ResolutionsCheck if the thermostat setting is too low and if the room temperature is too cool. SummarySmart FPT exceededCausesA disk on the specified controller has received a SMART alert (predictive failure) indicating that the disk is likely to fail in the near future. ResolutionsReplace the disk that has received the SMART alert. If the physical disk is a member of a non-redundant virtual disk, then back up the data before replacing the disk. NoticeRemoving a physical disk that is included in a non-redundant virtual disk will cause the virtual disk to fail and may cause data loss. SummarySmart configuration changeCausesA disk has received a SMART alert (predictive failure) after a configuration change. The disk is likely to fail in the near future. ResolutionsReplace the disk that has received the SMART alert. If the physical disk is a member of a non-redundant virtual disk, then back up the data before replacing the disk. NoticeRemoving a physical disk that is included in a non-redundant virtual disk will cause the virtual disk to fail and may cause data loss. SummarySmart warningCausesA disk has received a SMART alert (predictive failure). The disk is likely to fail in the near future. ResolutionsReplace the disk that has received the SMART alert. If the physical disk is a member of a non-redundant virtual disk, then back up the data before replacing the disk. NoticeRemoving a physical disk that is included in a non-redundant virtual disk will cause the virtual disk to fail and may cause data loss. SummarySMART warning temperatureCausesA disk has reached an unacceptable temperature and received a SMART alert (predictive failure). The disk is likely to fail in the near future. ResolutionsAction 1: Determine why the physical disk has reached an unacceptable temperature. A variety of factors can cause the excessive temperature. For example, a fan may have failed, the thermostat may be set too high, or the room temperature may be too hot or cold. Verify that the fans in the server or enclosure are working. If the physical disk is in an enclosure, you should check the thermostat settings and examine whether the enclosure is located near a heat source. Make sure the enclosure has enough ventilation and that the room temperature is not too hot. See the physical disk documentation for more diagnostic information. Action 2: If you cannot identify why the disk has reached an unacceptable temperature, then replace the disk. If the physical disk is a member of a non-redundant virtual disk, then back up the data before replacing the disk.NoticeRemoving a physical disk that is included in a non-redundant virtual disk will cause the virtual disk to fail and may cause data loss. SummarySMART warning degradedCausesA disk is degraded and has received a SMART alert (predictive failure). The disk is likely to fail in the near future. ResolutionsReplace the disk that has received the SMART alert. If the physical disk is a member of a non-redundant virtual disk, then back up the data before replacing the disk. NoticeRemoving a physical disk that is included in a non-redundant virtual disk will cause the virtual disk to fail and may cause data loss. SummaryFailure prediction threshold exceeded due to test - No action neededCausesA disk has received a SMART alert (predictive failure) due to test conditions. ResolutionsNone SummaryEnclosure was shut downCausesThe physical disk enclosure is either hotter or cooler than the maximum or minimum allowable temperature range. ResolutionsCheck for factors that may cause overheating or excessive cooling. For example, verify that the enclosure fan is working. You should also check the thermostat settings and examine whether the enclosure is located near a heat source. Make sure the enclosure has enough ventilation and that the room temperature is not too hot or too cold. See the documentation for more diagnostic information. SummaryEnclosure firmware mismatchCausesThe firmware on the EMM is not the same version. It is required that both modules have the same version of the firmware. This alert may be caused when a user attempts to insert an EMM module that has a different firmware version than an existing module. ResolutionsDownload the same version of the firmware to both EMM modules. SummaryRedundancy degradedCausesOne or more of the enclosure components has failed. For example, a fan or power supply may have failed. Although the enclosure is currently operational, the failure of additional components could cause the enclosure to fail.ResolutionsIdentify and replace the failed component. To identify the failed component, select the enclosure in the tree view and click the Health subtab. Any failed component will be identified using Dell OpenManage Storage Management with a red "X" on the enclosure's Health subtab. Alternatively, using Dell OpenManage Storage Management, you can select the Storage object and click the Health subtab. The controller status displayed on the Health subtab indicates whether a controller has a failed or degraded component. SummaryRedundancy lostCausesA virtual disk or an enclosure has lost data redundancy. In the case of a virtual disk, one or more physical disks included in the virtual disk have failed. Due to the failed physical disk or disks, the virtual disk is no longer maintaining redundant (mirrored or parity) data. The failure of an additional physical disk will result in lost data. In the case of an enclosure, more than one enclosure component has failed. For example, the enclosure may have suffered the loss of all fans or all power supplies. ResolutionsIdentify and replace the failed components. To identify the failed component, use Dell OpenManage Storage Management to select the Storage object and click the Health subtab. The controller status displayed on the Health subtab indicates whether a controller has a failed or degraded component. Click the controller that displays a Warning or Failed status. This action displays the controller Health subtab which displays the status of the individual controller components. Continue clicking the components with a Warning or Health status until you identify the failed component. SummaryBGI failedCausesBGI of a virtual disk has failed. ResolutionsNoneSummaryFirmware version mismatchCausesThe firmware on the controller is not a supported version. ResolutionsInstall a supported version of the firmware. If you do not have a supported version of the firmware available, it can be downloaded from the Dell support site at support.dell.com. If you do not have a supported version of the firmware available, check with your support provider for information on how to obtain the most current firmware. SummaryDriver version mismatchCausesThe controller driver is not a supported version. ResolutionsInstall a supported version of the driver. If you do not have a supported driver version available, it can be downloaded from the Dell support site at support.dell.com. If you do not have a supported version of the driver available, check with your support provider for information on how to obtain the most current driver. SummaryArray Manager is installed on the systemCausesStorage Management has been installed on a system that has an Array Manager installation. ResolutionsInstalling Storage Management and Array Manager on the same system is not a supported configuration. Uninstall either Storage Management or Array Manager. SummaryCommunication timeoutCausesThe controller is unable to communicate with an enclosure. There are several reasons why communication may be lost. For example, there may be a bad or loose cable. An unusual amount of I/O may also interrupt communication with the enclosure. In addition, communication loss may be caused by software, hardware, or firmware problems, bad or failed power supplies, and enclosure shutdown. When viewed in the Alert Log, the description for this event displays several variables. These variables are: Controller and enclosure names, type of communication problem, return code, and SCSI status.ResolutionsCheck for problems with the cables. See the online help for more information on checking the cables. You should also check to see if the enclosure has degraded or failed components. To do so, use Dell OpenManage Storage Management to select the enclosure object in the tree view and click the Health subtab. The Health subtab displays the status of the enclosure components. Verify that the controller has supported driver and firmware versions installed and that the EMMs are each running the same version of supported firmware. SummaryController battery lowCausesThe controller battery charge is low. ResolutionsRecondition the battery. See the online help for more information SummaryBad block replacement errorCausesA portion of a physical disk is damaged. ResolutionsSee the Dell OpenManage Server Administrator Storage Management online help or the Dell OpenManage Server Administrator Storage Management User's Guide for more information. SummaryBad block sense errorCausesA portion of a physical disk is damaged. ResolutionsSee the Dell OpenManage Server Administrator Storage Management online help for more information. SummaryBad block medium errorCausesA portion of a physical disk is damaged. ResolutionsSee the Dell OpenManage Server Administrator Storage Management online help for more information. SummaryBad block extended sense errorCausesA portion of a physical disk is damaged. ResolutionsSee the Dell OpenManage Server Administrator Storage Management online help for more information. SummaryBad block extended medium errorCausesA portion of a physical disk is damaged. ResolutionsSee the Dell OpenManage Server Administrator Storage Management online help for more information. SummaryRebuild completed with errorsCausesThis alert is documented in the Storage Management online help. ResolutionsSee the Storage Management online help for more information. SummaryThe RAID controller firmware and driver validation was not performed. The configuration file cannot be opened.CausesStorage Management is unable to determine whether the system has the minimum required versions of the RAID controller firmware and drivers. This situation may occur for a variety of reasons. For example, the installation directory path to the configuration file may not be correct. The configuration file may also have been removed or renamed. ResolutionsReinstall Storage Management.SummaryThe RAID controller firmware and driver validation was not performed. The configuration file is out of date or corrupted.CausesStorage Management is unable to determine whether the system has the minimum required versions of the RAID controller firmware and drivers. This situation has occurred because a configuration file is unreadable or missing data. The configuration file may be corrupted. ResolutionsReinstall Storage Management. SummaryThe current kernel version and the non-RAID SCSI driver version are older than the minimum required levels. See Dell OpenManage Server Administrator Storage Management readme.txt for a list of validated kernel and driver versions.CausesThe version of the kernel and the driver do not meet the minimum requirements. Storage Management may not be able to display the storage or perform storage management functions until you have updated the system to meet the minimum requirements. ResolutionsSee the Storage Managment Readme file for kernel and driver requirements. Update the system to meet the minimum requirements and then reinstall Storage Management.SummaryThe non-RAID SCSI driver version is older than the minimum required level. See Dell OpenManage Server Administrator Storage Management readme.txt for the validated driver version.CausesThe version of the driver does not meet the minimum requirements. Storage Management may not be able to display the storage or perform storage management functions until you have updated the system to meet the minimum requirements. ResolutionsSee the Storage Management Readme file for the validated driver version. Update the system to meet the minimum requirements and then reinstall Storage Management. SummaryThe controller battery needs to be replaced.CausesThe controller battery cannot recharge. The battery may be old or it may have been already recharged the maximum number of times. In addition, the battery charger may not be working. ResolutionsReplace the battery pack.SummaryThe controller battery temperature is above normal.CausesThe battery may be recharging, the room temperature may be too hot, or the fan in the system may be degraded or failed. ResolutionsIf this alert was generated due to a battery recharge, the situation will correct when the recharge is complete. You should also check if the room temperature is normal and that the system components are functioning properly. SummaryUnsupported configuration detected. The SCSI rate of the enclosure management modules (EMMs) is not the same. EMM0 %1 EMM1 %2CausesThe EMMs in the enclosure have a different SCSI rate. This is an unsupported configuration. All EMMs in the enclosure should have the same SCSI rate. The % (percent sign) indicates a substitution variable. The text for this substitution variable is displayed with the alert in the Alert Log and can vary depending on the situation. ResolutionsThe EMMs in the enclosure have a different SCSI rate. This is an unsupported configuration. All EMMs in the enclosure should have the same SCSI rate. SummaryThe controller battery has been removed.CausesThe controller cannot communicate with the battery, the battery may be removed, or the contact point between the controller and the battery may be burnt or corroded.ResolutionsReplace the battery if it has been removed. If the contact point between the battery and the controller is burnt or corroded, you will need to replace either the battery or the controller, or both. See the hardware documentation for information on how to safely access, remove, and replace the battery. SummaryThe controller battery Learn cycle has timed out.CausesThe controller battery must be fully charged before the Learn cycle can begin. The battery may be unable to maintain a full charge causing the Learn cycle to timeout. Additionally, the battery must be able to maintain cached data for a specified period of time in the event of a power loss. For example, some batteries maintain cached data for 24 hours. If the battery is unable to maintain cached data for the required period of time, then the Learn cycle will timeout. ResolutionsReplace the battery pack as the battery is unable to maintain a full charge. SummaryAn invalid SAS configuration has been detected.CausesThe controller and attached enclosures are not cabled correctly. ResolutionsSee the hardware documentation for information on correct cabling configurations. SummaryThe controller cache has been discarded.CausesThe controller has flushed the cache and any data in the cache has been lost. This may happen if the system has memory or battery problems that cause the controller to distrust the cache. Although user data may have been lost, this alert does not always indicate that relevant or user data has been lost.ResolutionsVerify that the battery and memory are functioning properly. SummarySingle-bit ECC error limit exceeded.CausesThe system memory is malfunctioning. ResolutionsReplace the battery pack. SummaryMultiple enclosures are attached to the controller. This is an unsupported configuration.CausesMany enclosures are attached to the controller port. When the enclosure limit is exceeded, the controller loses contact with all enclosures attached to the port. ResolutionsRemove the last enclosure. You must remove the enclosure that has been added last and is causing the enclosure limit to exceed. SummaryA global hot spare failed.CausesThe controller is not able to communicate with a disk that is assigned as a dedicated hot spare. The disk may have been removed. There may also be a bad or loose cable. ResolutionsCheck if the disk is healthy and that it has not been removed. Check the cables. If necessary, replace the disk and reassign the hot spare. SummaryA dedicated hot spare failed.CausesThe controller is unable to communicate with a disk that is assigned as a dedicated hot spare. The disk may have failed or been removed. There may also be a bad or loose cable. ResolutionsCheck if the disk is healthy and that it has not been removed. Check the cables. If necessary, replace the disk and reassign the hot spare. SummaryThe only hot spare available is a SATA disk. SATA disks cannot replace SAS disks.CausesThe only physical disk available to be assigned as a hot spare is using SATA technology. The physical disks in the virtual disk are using SAS technology. Because of this difference in technology, the hot spare cannot rebuild data if one of the physical disks in the virtual disk fails. ResolutionsAdd a SAS disk that is large enough to be used as the hot spare and assign the new disk as a hot spare. SummaryThe only hot spare available is a SAS disk. SAS disks cannot replace SATA disks.CausesThe only physical disk available to be assigned as a hot spare is using SAS technology. The physical disks in the virtual disk are using SATA technology. Because of this difference in technology, the hot spare cannot rebuild data if one of the physical disks in the virtual disk fails. ResolutionsAdd a SATA disk that is large enough to be used as the hot spare and assign the new disk as a hot spare. SummaryThe physical disk is not supported.CausesThe physical disk may not have a supported version of the firmware or the disk may not be supported by Dell. ResolutionsIf the disk is supported by Dell, update the firmware to a supported version. If the disk is not supported by Dell, replace the disk with one that is supported. SummaryRecharge count maximum exceededCausesThe battery has been recharged more times than the battery recharge limit allows. ResolutionsReplace the battery pack. SummaryThe controller battery is degraded.CausesThe controller battery charge is weak. ResolutionsAs the charge weakens, the charger should automatically recharge the battery. If the battery has reached its recharge limit, replace the battery pack. Monitor the battery to make sure that it recharges successfully. If the battery does not recharge, replace the battery pack. SummaryA device is missing.CausesThe controller cannot communicate with a device. The device may be removed. There may also be a bad or loose cable. ResolutionsCheck if the device is in and not removed. If it is in, check the cables. You should also check the connection to the controller battery and the battery health. A battery with a weak or depleted charge may cause this alert SummaryA device is in an unknown state.CausesThe controller cannot communicate with a device. The state of the device cannot be determined. There may be a bad or loose cable. The system may also be experiencing problems with the application programming interface (API). There could also be a problem with the driver or firmware ResolutionsCheck the cables. Check if the controller has a supported version of the driver and firmware. You can download the most current version of the driver and firmware from support.dell.com. Rebooting the system may also resolve this problem Summary%1, Storage Management has lost communication with the controller. An immediate reboot is strongly recommended to avoid further problems. If the reboot does not restore communication, then contact technical support for more information.CausesStorage Management has lost communication with a controller. This may occur if the controller driver or firmware is experiencing a problem. The %1 indicates a substitution variable. ResolutionsReboot the system. If the problem is not resolved, contact technical support. See your system documentation for information about contacting technical support by using telephone, fax, and Internet services SummaryThe physical disk Clear operation failed.CausesA Clear task was being performed on a physical disk but the task was interrupted and did not complete successfully. The controller may have lost communication with the disk. The disk may have been removed or the cables may be loose or defective ResolutionsVerify that the disk is present and not in a Failed state. Make sure the cables are attached securely. See the Dell OpenManage Storage Management User Guide Troubleshooting section - Cables Attached Correctly section for more information on checking the cables. Restart the Clear taskSummaryPatrol Read found an uncorrectable media error.CausesThe Patrol Read task has encountered an error that cannot be corrected. There may be a bad disk block that cannot be remapped ResolutionsBack up your data. If you are able to back up the data successfully, then fully initialize the disk and then restore from back up SummaryA block on the physical disk has been punctured by the controller.CausesThe controller encountered an unrecoverable medium error when attempting to read a block on the physical disk and marked that block as invalid. If the controller encountered the unrecoverable medium error on a source physical disk during a rebuild or reconfigure operation, it will also puncture the corresponding block on the target physical disk. The invalid block will be cleared on a write operation ResolutionsBack up your data. If you are able to back up the data successfully, then fully initialize the disk and then restore from back up SummaryThe dedicated hot spare is too small.CausesThe dedicated hot spare is not large enough to protect all virtual disks that reside on the disk group ResolutionsAssign a larger disk as the dedicated hot spare SummaryThe global hot spare is too small.CausesThe global hot spare is not large enough to protect all virtual disks that reside on the controller ResolutionsAssign a larger disk as the global hot spare SummaryHot spare SMART polling failed.CausesThe controller firmware attempted a SMART polling on the hot spare but was unable to complete it. The controller has lost communication with the hot spare ResolutionsCheck the health of the disk assigned as a hot spare. You may need to replace the disk and reassign the hot spare. Make sure the cables are attached securely. See the Cables Attached Correctly section in the Dell OpenManage Server Administrator Storage Management User's Guide for more information on checking the cables SummaryA redundant path is broken.CausesThe controller has two connectors that are connected to the same enclosure. The communication path on one connector has lost connection with the enclosure. The communication path on the other connector is reporting this loss ResolutionsMake sure the cables are attached securely. Make sure both EMMs are healthy SummaryMulti-bit ECC error.CausesAn error involving multiple bits has been encountered during a read or write operation. The error correction algorithm recalculates parity data during read and write operations. If an error involves only a single bit, it may be possible for the error correction algorithm to correct the error and maintain parity data. An error involving multiple bits, however, usually indicates data loss. In some cases, if the multi-bit error occurs during a read operation, the data on the disk may be correct/valid. If the multi-bit error occurs during a write operation, data loss has occurred ResolutionsReplace the dual in-line memory module (DIMM). The DIMM is a part of the controller battery pack. See your hardware documentation for information on replacing the DIMM. You may need to restore data from backup SummarySingle-bit ECC error.CausesAn error involving a single bit has been encountered during a read or write operation. The error correction algorithm has corrected this error ResolutionsNone SummaryCommunication with the enclosure has been lost.CausesThe controller has lost communication with an EMM. The cables may be loose or defective ResolutionsMake sure the cables are attached securely. Reboot the system SummaryThe EMM has failed.CausesThe failure may be caused by a loss of power to the EMM. The EMM self test may also have identified a failure. There could also be a firmware problem or a multi-bit error ResolutionsReplace the EMM. See the hardware documentation for information on replacing the EMM SummaryA device has been removed.CausesA device has been removed and the system is no longer functioning in optimal condition ResolutionsReplace the device SummaryAn EMM has been removed.CausesAn EMM has been removed ResolutionsReplace the EMM. See the hardware documentation for information on replacing the EMM SummaryThere is a bad sensor on an enclosure.CausesThe enclosure has a bad sensor. The enclosure sensors monitor the fan speeds, temperature probes, etc ResolutionsSee the hardware documentation for more information SummaryBad PHY %1CausesThere is a problem with a physical connection or PHY. The %1 indicates a substitution variable. The text for this substitution variable is displayed with the alert and can vary depending on the situation.ResolutionsRun the PHY integrity test diagnostics. Replace the EMM that contains the bad PHY if necessary. See the hardware documentation for information on replacing the EMM. Make sure the cables are attached securely. See the Dell OpenManage Storage Management User Guide Troubleshooting - Cables Attached Correctly section for more information on checking the cables. If necessary, attach the storage to a different connector if one is available.SummaryThe enclosure is unstable.CausesThe controller is not receiving a consistent response from the enclosure. There could be a firmware problem or an invalid cabling configuration. If the cables are too long, they will degrade the signal ResolutionsPower down all enclosures attached to the system and reboot the system. If the problem persists, upgrade the firmware to the latest supported version. You can download the most current version of the driver and firmware from support.dell.com. Make sure the cable configuration is valid. See the hardware documentation for valid cabling configurations SummaryThe enclosure has a hardware error.CausesThe enclosure or an enclosure component is in a Failed or Degraded state. ResolutionsCheck the health of the enclosure and its components. Replace any hardware that is in a Failed state. See the hardware documentation for more information SummaryThe enclosure is not responding.CausesThe enclosure or an enclosure component is in a Failed or Degraded state ResolutionsCheck the health of the enclosure and its components. Replace any hardware that is in a Failed state. See the hardware documentation for more information SummaryThe physical disk is too small to be used for a rebuild.CausesThis alert is for informational purposes ResolutionsUse a physical disk that is the same size or larger than the physical disk being replaced. See the Replacing a Failed Disk section in the Dell OpenManage Server Administrator Storage Management User's Guide for more information SummaryBad block table is 80% full.CausesThe bad block table is used for remapping bad disk blocks. This table fills, as bad disk blocks are remapped. When the table is full, bad disk blocks can no longer be remapped, and disk errors can no longer be corrected. At this point, data loss can occur. The bad block table is now 80% full ResolutionsBack up your data. Replace the disk generating this alert and restore from back up SummaryBad block table is full. Unable to log block %1CausesThe bad block table is used for remapping bad disk blocks. This table fills, as bad disk blocks are remapped. When the table is full, bad disk blocks can no longer be remapped and disk errors can no longer be corrected. At this point, data loss can occur. The %1 indicates a substitution variable. ResolutionsReplace the disk generating this alert. If necessary, restore your data from backup SummaryA physical disk is incompatible.CausesYou have attempted to replace a disk with another disk that is using an incompatible technology. For example, you may have replaced one side of a mirror with a SAS disk when the other side of the mirror is using SATA technology ResolutionsSee the hardware documentation for information on replacing disks SummaryA virtual disk is permanently degraded.CausesA redundant virtual disk has lost redundancy. This may occur when the virtual disk suffers the failure of multiple physical disks. In this case, both the source physical disk and the target disk with redundant data have failed. A rebuild is not possible because there is no redundancy ResolutionsReplace the failed disks and restore from backup SummaryThe firmware on the EMMs is not the same version. EMM0 %1 EMM1 %2CausesThe firmware on the EMM modules is not the same version. It is required that both modules have the same version of the firmware. This alert may be caused if you attempt to insert an EMM module that has a different firmware version than an existing module. The %1 and %2 indicate a substitution variable. ResolutionsUpgrade to the same version of the firmware on both EMM modules SummaryA power supply in the enclosure has an AC failure.CausesThe power supply has an AC failure ResolutionsReplace the power supply SummaryA power supply in the enclosure has a DC failure.CausesThe power supply has a DC failure ResolutionsReplace the power supply SummaryThe initialization sequence of SAS components failed during system startup. SAS management and monitoring is not possible.CausesStorage Management is unable to monitor or manage SAS devices. ResolutionsReboot the system. If problem persists, make sure you have supported versions of the drivers and firmware. Also, you may need to reinstall Storage Management or Server Administrator because of some missing installation components SummaryDiagnostic message %1CausesA diagnostics test failed. The %1 indicates a substitution variable. The text for this substitution variable is generated by the utility that ran the diagnostics.ResolutionsSee the documentation for the utility that ran the diagnostics for more information SummaryProblems with the battery or the battery charger have been detected. The battery health is poor.CausesThe battery or the battery charger is not functioning properly ResolutionsReplace the battery pack SummarySingle-bit ECC error. The DIMM is degrading.CausesThe DIMM is beginning to malfunction ResolutionsReplace the DIMM to avoid data loss or data corruption. The DIMM is a part of the controller battery pack. See your hardware documentation for information on replacing the DIMM SummarySingle-bit ECC error. The DIMM is critically degraded.CausesThe DIMM is malfunctioning. Data loss or data corruption may be imminent ResolutionsReplace the DIMM immediately to avoid data loss or data corruption. The DIMM is a part of the controller battery pack. See your hardware documentation for information on replacing the DIMM SummarySingle-bit ECC error. The DIMM is critically degraded. There will be no further reporting.CausesThe DIMM is malfunctioning. Data loss or data corruption is imminent. The DIMM must be replaced immediately. No further alerts will be generated ResolutionsReplace the DIMM immediately. The DIMM is a part of the controller battery pack. See your hardware documentation for information on replacing the DIMM SummaryThe DC power supply is switched off.CausesThe power supply unit is switched off. Either a user switched off the power supply unit or it is defective ResolutionsCheck if the power switch is turned off. If it is turned off, turn it on. If the problem persists, check if the power cord is attached and functional. If the problem is still not corrected or if the power switch is already turned on, replace the power supply unit SummaryThe AC power supply cable has been removed.CausesThe power cable may be pulled out or removed. The power cable may also have overheated and become warped and nonfunctionalResolutionsReplace the power cable SummaryThe NVRAM has corrupted data. The controller is reinitializing the NVRAM.CausesThe NVRAM has corrupted data. This may occur after a power surge, a battery failure, or for other reasons. The controller is reinitializing the NVRAM ResolutionsNone. The controller is taking the required corrective action. If this alert is generated often (such as during each reboot), replace the controller SummaryThe NVRAM has corrupt data.CausesThe NVRAM has corrupt data. The controller is unable to correct the situation ResolutionsReplace the controller SummarySAS port report: %1CausesThe text for this alert is generated by the controller and can vary depending on the situation. The %1 indicates a substitution variable. The text for this substitution variable is generated by the controller. This text can vary depending on the situation ResolutionsMake sure the cables are attached securely. If the problem persists, replace the cable with a valid cable according to SAS specifications. If the problem still persists, you may need to replace some devices such as the controller or EMM. See the hardware documentation for more information SummaryController event log: %1CausesThe text for this alert is generated by the controller and can vary depending on the situation. This text is from events in the controller event log that were generated while Dell OpenManage Storage Management was not running.ResolutionsIf there is a problem, review the controller event log and the Dell OpenManage Server Administrator Alert Log for significant events or alerts that may assist in diagnosing the problem. Verify the health of the storage components. See the hardware documentation for more information.SummaryController event log: %1CausesThe text for this alert is generated by the controller and can vary depending on the situation. This text is from events in the controller event log that were generated while Dell OpenManage Storage Management was not running.ResolutionsSee the hardware documentation for more information SummaryThe controller is unable to recover cached data from the battery backup unit (BBU).CausesThe controller was unable to recover data from the cache ResolutionsCheck if the battery is charged and in good health. When the battery charge is unacceptably low, it cannot maintain cached data. Check if the battery has reached its recharge limit. The battery may need to be recharged or replaced SummaryThe BGI completed with uncorrectable errors.CausesThe BGI task encountered errors that cannot be corrected. The virtual disk contains physical disks that have unusable disk space or disk errors that cannot be corrected ResolutionsReplace the physical disk that contains the disk errors. Review other alert messages to identify the physical disk that has errors. If the virtual disk is redundant, you can replace the physical disk and continue using the virtual disk. If the virtual disk is non-redundant, you may need to recreate the virtual disk after replacing the physical disk. After replacing the physical disk, run Check Consistency to check the data SummaryThe Check Consistency found inconsistent parity data. Data redundancy may be lost.CausesThe data on a source disk and the redundant data on a target disk is inconsistent ResolutionsRestart the Check Consistency task. If you receive this alert again, check the health of the physical disks included in the virtual disk. Review the alert messages for significant alerts related to the physical disks. If you suspect that a physical disk has a problem, replace it and restore from backup SummaryThe Check Consistency logging of inconsistent parity data is disabled.CausesThe Check Consistency can no longer report errors in the parity data ResolutionsSee the hardware documentation for more information SummaryCausesResolutionsSummaryCausesResolutionsSummaryError occurred: %1CausesA physical device may have an error. The %1 indicates a substitution variable. The text for this substitution variable is generated by the firmware. This text can vary depending on the situation ResolutionsVerify the health of attached devices. Review the Dell OpenManage Server Administrator Storage Management alert Log for significant events. Run the PHY integrity diagnostic tests. You may need to replace faulty hardware. Make sure the cables are attached securely. See the hardware documentation for more information SummaryThe rebuild failed due to errors on the source physical disk.CausesYou are attempting to rebuild data that resides on a defective disk ResolutionsReplace the source disk and restore from backup SummaryThe rebuild failed due to errors on the target physical disk.CausesYou are attempting to rebuild data on a disk that is defective ResolutionsReplace the target disk. If a rebuild does not automatically start after replacing the disk, initiate the Rebuild task. You may need to assign the new disk as a hot spare to initiate the rebuild SummaryA bad disk block could not be reassigned during a write operation.CausesA write operation could not complete because the disk contains bad disk blocks that could not be reassigned. Data loss may have occurred and data redundancy may also be lost ResolutionsReplace the disk SummaryThere was an unrecoverable disk media error during the rebuild.CausesThe rebuild encountered an unrecoverable disk media error ResolutionsReplace the disk SummaryCausesResolutionsSummarySAS SMP communications error %1.CausesThe %1 indicates a substitution variable. The text for this substitution variable is generated by the firmware.. This text can vary depending on the situation. The reference to SMP in this text refers to SAS Management Protocol ResolutionsThere may be a SAS topology error. See the hardware documentation for information on correct SAS topology configurations. There may be problems with the cables such as a loose connection or an invalid cabling configuration. See the hardware documentation for information on correct cabling configurations. Check if the firmware is a supported version SummarySAS expander error: %1CausesThe %1 indicates a substitution variable. The text for this substitution variable is generated by the firmware. This text can vary depending on the situation ResolutionsThere may be a problem with the enclosure. Verify the health of the enclosure and its components. To verify the health of the enclosure, using Dell OpenManage Storage Management, select the enclosure object in the tree view. The Health subtab displays a red X or yellow exclamation point for enclosure components that are failed or degraded. See the enclosure documentation for more information.SummaryThe physical disk is not certified.CausesThe physical disk does not comply with the standards set by Dell and is not supported ResolutionsReplace the physical disk with a physical disk that is supported SummaryRebuild not possible as SAS/SATA is not supported in the same virtual disk.CausesThis alert is for informational purposes ResolutionsMake sure that all physical disks in the virtual disk are using the same technology. For example, all physical disks must be either SAS or SATA. You cannot use both SAS and SATA physical disks in the same virtual disk SummaryPhysical disk insertedCausesThis alert is for informational purposes.ResolutionsNoneSummaryVirtual disk createdCausesThis alert is for informational purposes.ResolutionsNoneSummaryVirtual disk configuration changedCausesThis alert is for informational purposes. ResolutionsNoneSummaryVirtual disk check consistency startedCausesThis alert is for informational purposes.ResolutionsNoneSummaryVirtual disk format startedCausesThis alert is for informational purposes.ResolutionsNoneSummaryVirtual disk initialization started CausesThis alert is for informational purposes.ResolutionsNoneSummaryPhysical disk initialization started CausesThis alert is for informational purposes.ResolutionsNoneSummaryVirtual disk reconfiguration startedCausesThis alert is for informational purposes.ResolutionsNoneSummaryVirtual disk rebuild started CausesThis alert is for informational purposes.ResolutionsNoneSummaryPhysical disk rebuild started CausesThis alert is for informational purposes.ResolutionsNoneSummaryVirtual disk check consistency cancelledCausesThe check consistency operation cancelled because a physical disk in the array has failed or because a user cancelled the check consistency operation.ResolutionsIf the physical disk failed, then replace the physical disk. You can identify which disk failed by locating the disk that has a red "X" for its status. Perform a rescan after replacing the disk. When performing a consistency check, be aware that the consistency check can take a long time. The time it takes depends on the size of the physical disk or the virtual disk.SummaryVirtual disk initialization cancelled CausesThe virtual disk initialization cancelled because a physical disk included in the virtual disk has failed or because a user cancelled the virtual disk initialization.ResolutionsIf a physical disk failed, then replace the physical disk. You can identify which disk has failed by locating the disk that has a red "X" for its status. Perform a rescan after replacing the disk. Restart the format physical disk operation. Restart the virtual disk initialization.SummaryPhysical disk rebuild cancelledCausesA user has cancelled the rebuild operation. ResolutionsRestart the rebuild operation.SummaryVirtual disk check consistency completed CausesThis alert is for informational purposes.ResolutionsNoneSummaryVirtual disk format completed CausesThis alert is for informational purposes.ResolutionsNoneSummaryVirtual disk initialization completedCausesThis alert is for informational purposes.ResolutionsNoneSummaryPhysical disk initialize completedCausesThis alert is for informational purposes.ResolutionsNoneSummaryVirtual disk reconfiguration completedCausesThis alert is for informational purposes.ResolutionsNoneSummaryVirtual disk rebuild completed CausesThis alert is for informational purposes.ResolutionsNoneSummaryPhysical disk rebuild completed CausesThis alert is for informational purposes.ResolutionsNoneSummarySCSI sense data.CausesA SCSI device experienced an error, but may have recovered.ResolutionsNoneSummaryGlobal hot spare assigned CausesA user has assigned a physical disk as a global hot spare. This alert is for informational purposes. ResolutionsNoneSummaryGlobal hot spare unassigned CausesA user has unassigned a physical disk as a global hot spare. This alert is for informational purposes.ResolutionsNoneSummaryController battery is reconditioningCausesThis alert is for informational purposes.ResolutionsNoneSummaryController battery recondition is completedCausesThis alert is for informational purposes.ResolutionsNoneSummaryA consistency check on a virtual disk has been paused (suspended)CausesThe check consistency operation on a virtual disk was paused by a user. ResolutionsTo resume the check consistency operation, right-click the virtual disk in the tree view and select Resume Check Consistency.SummaryA consistency check on a virtual disk has been resumedCausesThis alert is for informational purposes. The check consistency operation on a virtual disk has resumed processing after being paused by a userResolutionsNoneSummaryA virtual disk and its mirror have been split CausesThis alert is for informational purposes. A user has caused a mirrored virtual disk to be split. When a virtual disk is mirrored, its data is copied to another virtual disk in order to maintain redundancy. After being split, both virtual disks retain a copy of the data, although because the mirror is no longer intact, updates to the data are no longer copied to the mirror. ResolutionsNoneSummaryA mirrored virtual disk has been unmirrored CausesThis alert is for informational purposes. A user has caused a mirrored virtual disk to be unmirrored. When a virtual disk is mirrored, its data is copied to another virtual disk in order to maintain redundancy. After being unmirrored, the disk formerly used as the mirror returns to being a physical disk and becomes available for inclusion in another virtual disk. ResolutionsNoneSummaryChange write policy CausesThis alert is for informational purposes. A user has changed the write policy for a virtual disk. ResolutionsNoneSummaryDevice returned to normal CausesThis alert is for informational purposes. A device that was previously in an error state has returned to a normal state.For example, if an enclosure became too hot and subsequently cooled down, then you may receive this alert. ResolutionsNoneSummaryRedundancy normal CausesThis alert is for informational purposes. Data redundancy has been restored to a virtual disk or an enclosure that previously suffered a loss of redundancy. ResolutionsNoneSummaryBackground initialization (BGI) started CausesBGI of a virtual disk has started. This alert is for informational purposes. ResolutionsNoneSummaryBGI cancelled CausesBGI of a virtual disk has been cancelled. A user or the firmware may have stopped BGI. ResolutionsNoneSummaryBGI completed CausesBGI of a virtual disk has completed. This alert is for informational purposes. ResolutionsNoneSummaryVirtual disk initialization CausesThis alert is for informational purposes. Virtual disk initialization is in progress. ResolutionsNoneSummaryEnclosure alarm enabled CausesThis alert is for informational purposes. A user has enabled the enclosure alarm. ResolutionsNoneSummaryEnclosure alarm disabledCausesA user has disabled the enclosure alarm. ResolutionsNoneSummaryDead disk segments restored CausesThis alert is for informational purposes. Disk space that was formerly "dead" or inaccessible to a redundant virtual disk has been restored. ResolutionsNoneSummaryPhysical disk dead segments recovered CausesThis alert is for informational purposes. Portions of the physical disk were formerly inaccessible. The disk space from these dead segments has been recovered and is now usable. Any data residing on these dead segments has been lost. ResolutionsNoneSummaryController rebuild rate has changed CausesThis alert is for informational purposes. A user has changed the controller rebuild rate.ResolutionsNoneSummaryController alarm enabled CausesThis alert is for informational purposes. A user has enabled the controller alarm. ResolutionsNoneSummaryController alarm disabled CausesThis alert is for informational purposes. A user has disabled the controller alarm. ResolutionsNoneSummaryAsset tag changed CausesThis alert is for informational purposes. A user has changed the enclosure asset tag. ResolutionsNoneSummaryAsset name changed CausesThis alert is for informational purposes. A user has changed the enclosure asset name. ResolutionsNoneSummaryService tag changed CausesAn enclosure service tag was changed. In most circumstances, this service tag should only be changed by Dell™ support or your service provider. ResolutionsEnsure that the tag was changed under authorized circumstances.SummaryMaximum temperature probe warning threshold value changed CausesThis alert is for informational purposes. A user has changed the value for the maximum temperature probe warning threshold. ResolutionsNoneSummaryMinimum temperature probe warning threshold value changed CausesThis alert is for informational purposes. A user has changed the value for the minimum temperature probe warning threshold. ResolutionsNoneSummaryController alarm has been tested CausesThis alert is for informational purposes. The controller alarm test has run successfully. ResolutionsNoneSummaryController configuration has been reset CausesThis alert is for informational purposes. A user has reset the controller configuration. See the online help for more information. ResolutionsNoneSummaryPhysical disk online CausesThis alert is for informational purposes. An offline physical disk has been made online. ResolutionsNoneSummaryVirtual disk renamedCausesThis alert is for informational purposes. A user has renamed a virtual disk.When renaming a virtual disk on a PERC 3/SC, 3/DCL, 3/DC, 3/QC, 4/SC, 4/DC, 4e/DC, 4/Di, CERC ATA100/4ch, PERC 5/E, PERC 5/i or SAS 5/iR controller, this alert displays the new virtual disk name.On the PERC 3/SC, 3/DCL, 3/DC, 3/QC, 4/SC, 4/DC, 4e/DC, 4/Di, 4/IM, 4e/Si, 4e/Di, and CERC ATA 100/4ch controllers, this alert displays the original virtual disk name. ResolutionsNoneSummaryCausesResolutionsSummaryCausesResolutionsSummaryCommunication regainedCausesThis alert is for informational purposes. Communication with an enclosure has been restored. ResolutionsNoneSummarySee the OMSS Readme file for a list of validated controller driver versions CausesThis alert is for informational purposes. Storage Management is unable to determine whether the system has the minimum required versions of the RAID controller drivers. ResolutionsSee the Readme file for driver and firmware requirements. In particular, if Storage Management experiences performance problems, you should verify that you have the minimum supported versions of the drivers and firmware installed.SummaryThe controller battery charge level is normal. CausesThis alert is for informational purposes.ResolutionsNoneSummaryThe controller battery temperature is normal. CausesThis alert is for informational purposes.ResolutionsNoneSummaryThe controller battery has been replaced.CausesThis alert is for informational purposes. ResolutionsNoneSummaryThe controller battery Learn cycle has started. CausesThis alert is for informational purposes. ResolutionsNoneSummaryThe controller battery Learn cycle has completed. CausesThis alert is for informational purposes.ResolutionsNoneSummaryThe controller battery Learn cycle has been postponed. CausesThis alert is for informational purposes. ResolutionsNoneSummaryThe controller battery Learn cycle will start in %1 days. CausesThis alert is for informational purposes. The %1 indicates a substitution variable. The text for this substitution variable is displayed with the alert in the Alert Log and can vary depending on the situation. ResolutionsNoneSummaryThe controller battery Learn cycle will start in %1 hours. CausesThis alert is for informational purposes. The %1 indicates a substitution variable. The text for this substitution variable is displayed with the alert in the Alert Log and can vary depending on the situation. ResolutionsNoneSummaryThe controller write policy has been changed to Write Through. CausesThe controller battery is unable to maintain cached data for the required period of time. For example, if the required period of time is 24 hours, the battery is unable to maintain cached data for 24 hours. It is normal to receive this alert during the battery Learn cycle as the Learn cycle discharges the battery before recharging it. When discharged, the battery cannot maintain cached dataResolutionsCheck the health of the battery. If the battery is weak, replace the battery pack.SummaryThe controller write policy has been changed to Write Back.CausesThis alert is for informational purposes.ResolutionsNoneSummaryThe virtual disk Check Consistency has made corrections and completed. CausesThis alert is for informational purposes. The virtual disk Check Consistency has identified errors and made corrections. For example, the Check Consistency may have encountered a bad disk block and remapped the disk block to restore data consistency. ResolutionsThis alert is for informational purposes only and no additional action is required. As a precaution, monitor the Alert Log for other errors related to this virtual disk. If problems persist, contact Dell Technical Support.SummaryThe virtual disk reconfiguration has resumed. CausesThis alert is for informational purposes. ResolutionsNoneSummaryThe virtual disk Read policy has changed. CausesThis alert is for informational purposes. ResolutionsNoneSummaryDedicated hot spare assigned. Physical disk %1 CausesThis alert is for informational purposes. ResolutionsNoneSummaryDedicated hot spare unassigned. Physical disk %1 CausesThis alert is for informational purposes. ResolutionsNoneSummaryThe virtual disk cache policy has changed. CausesThis alert is for informational purposes. ResolutionsNoneSummaryA global hot spare has been removed. CausesThe controller is unable to communicate with a disk that is assigned as a global hot spare. The disk may have been removed. There may also be a bad or loose cable. ResolutionsCheck if the disk is healthy and that it has not been removed. Check the cables. If necessary, replace the disk and reassign the hot spare.SummaryA dedicated hot spare has been removed. CausesThe controller is unable to communicate with a disk that is assigned as a dedicated hot spare. The disk may have been removed. There may also be a bad or loose cable. ResolutionsCheck if the disk is healthy and that it has not been removed. Check the cables. If necessary, replace the disk and reassign the hot spare.SummaryA dedicated hot spare has been automatically unassigned. CausesThe hot spare is no longer required because the virtual disk it was assigned to has been deleted.ResolutionsNoneSummaryThe controller battery temperature is above normal. CausesThis alert is for informational purposes. ResolutionsNoneSummaryBattery charge in progressCausesThis alert is for informational purposes. ResolutionsNoneSummaryBattery charge process interrupted CausesThis alert is for informational purposes. ResolutionsNoneSummaryThe controller alarm is silenced. CausesThis alert is for informational purposes. ResolutionsNoneSummaryThe background initialization (BGI) rate has changed. CausesThis alert is for informational purposes. ResolutionsNoneSummaryThe Patrol Read rate has changed. CausesThis alert is for informational purposes. ResolutionsNoneSummaryThe Check Consistency rate has changed. CausesThis alert is for informational purposes. ResolutionsNoneSummaryThe controller debug log file has been exported.CausesThis alert is for informational purposes. ResolutionsNoneSummaryA foreign configuration has been cleared. CausesThis alert is for informational purposes. ResolutionsNoneSummaryA foreign configuration has been imported. CausesThis alert is for informational purposes. ResolutionsNoneSummaryThe Patrol Read mode has changed.CausesThis alert is for informational purposes. ResolutionsNoneSummaryThe Patrol Read has started. CausesThis alert is for informational purposes. ResolutionsNoneSummaryThe Patrol Read has stopped.CausesThis alert is for informational purposes. ResolutionsNoneSummaryA virtual disk blink has been initiated. CausesThis alert is for informational purposes. ResolutionsNoneSummaryA virtual disk blink has ceased. CausesThis alert is for informational purposes. ResolutionsNoneSummaryThe controller battery is charging. CausesThis alert is for informational purposes. ResolutionsNoneSummaryThe controller battery is executing a Learn cycle. CausesThis alert is for informational purposes. ResolutionsNoneSummaryThe physical disk Clear operation has started. CausesThis alert is for informational purposes. ResolutionsNoneSummaryThe physical disk blink has initiated. CausesThis alert is for informational purposes. ResolutionsNoneSummaryThe physical disk blink has ceased.CausesThis alert is for informational purposes. ResolutionsNoneSummaryThe Clear operation has cancelled. CausesThis alert is for informational purposes. ResolutionsNoneSummaryThe physical disk has been started.CausesThis alert is for informational purposes. ResolutionsNoneSummaryAn enclosure blink operation has initiated. CausesThis alert is for informational purposes. ResolutionsNoneSummaryAn enclosure blink has ceased CausesThis alert is for informational purposes. ResolutionsNoneSummarySMART thermal shutdown is enabled. CausesThis alert is for informational purposes. ResolutionsNoneSummarySMART thermal shutdown is disabled.CausesThis alert is for informational purposes. ResolutionsNoneSummaryController log file entry: %1 CausesThis alert is for informational purposes. The %1 indicates a substitution variable. The text for this substitution variable is generated by the controller and is displayed with the alert in the Alert Log. This text can vary depending on the situation. ResolutionsNoneSummaryThe controller reconstruct rate has changed.CausesThis alert is for informational purposes. ResolutionsNoneSummaryThe physical disk Clear operation has completed. CausesThis alert is for informational purposes. ResolutionsNoneSummaryThe Patrol Read corrected a media error. CausesThis alert is for informational purposes. ResolutionsNoneSummaryThe physical disk rebuild has resumed. CausesThis alert is for informational purposes. ResolutionsNoneSummaryThe controller battery charge level is below a normal threshold.CausesThe battery is discharging. A battery discharge is a normal activity during the battery Learn cycle. Before completing, the battery Learn cycle recharges the battery. You should receive alert 2179 when the recharge occurs. ResolutionsCheck if the battery Learn cycle is in progress. Alert 2176 indicates that the battery Learn cycle has initiated. The battery also displays the Learn state while the Learn cycle is in progress. If a Learn cycle is not in progress, replace the battery pack.SummaryThe controller battery charge level is operating within normal limits. CausesThis alert is provided for informational purposes. This alert indicates that the battery is recharging during the battery Learn cycle. ResolutionsNoneSummaryA disk media error has been corrected.CausesA disk media error was detected while the controller was completing a background task. A bad disk block was identified. The disk block has been remapped. ResolutionsConsider replacing the disk. If you receive this alert frequently, be sure to replace the disk. You should also routinely back up your data.SummaryVirtual disk has inconsistent data. CausesThis alert is for informational purposes. ResolutionsNoneSummaryA redundant path has been restored. CausesThis alert is for informational purposes. ResolutionsNoneSummaryA disk media error was corrected during recovery. CausesThis alert is for informational purposes. ResolutionsNoneSummaryAn EMM has been discovered. CausesThis alert is for informational purposes. ResolutionsNoneSummaryA device has been inserted. CausesThis alert is for informational purposes. ResolutionsNoneSummaryAn EMM has been inserted. CausesThis alert is for informational purposes. ResolutionsNoneSummaryThe enclosure cannot support both SAS and SATA physical disks. Physical disks may be disabled. CausesThis alert is for informational purposes. ResolutionsNoneSummaryAn attempt to hot plug an EMM has been detected. This type of hot plug is not supported. CausesThis alert is for informational purposes. ResolutionsNoneSummaryDiagnostic message %1 CausesThis alert is for informational purposes. The %1 indicates a substitution variable. The text for this substitution variable is generated by the utility that ran the diagnostics and is displayed with the alert in the Alert Log. This text can vary depending on the situation. ResolutionsNoneSummaryThe power supply is switched on.CausesThis alert is for informational purposes. ResolutionsNoneSummaryThe power supply cable has been inserted. CausesThis alert is for informational purposes. ResolutionsNoneSummaryA foreign configuration has been detected. CausesThis alert is for informational purposes. The controller has physical disks that were moved from another controller. These physical disks contain virtual disks that were created on the other controller. See the Import Foreign Configuration and Clear Foreign Configuration section in the Dell OpenManage Server Administrator Storage Management User's Guide for more information. ResolutionsNoneSummarySAS port report: %1 CausesThis alert is for informational purposes. The %1 indicates a substitution variable. The text for this substitution variable is generated by the controller and is displayed with the alert in the Alert Log. This text can vary depending on the situation.ResolutionsNoneSummaryA bad disk block has been reassigned. CausesThe disk has a bad block. Data has been readdressed to another disk block and no data loss has occurred.ResolutionsMonitor the disk for other alerts or indications of poor health. For example, you may receive alert 2306. Replace the disk if you suspect there is a problem.SummaryA controller hot plug has been detected. CausesThis alert is for informational purposes. ResolutionsNoneSummaryController event log: %1 CausesThis alert is for informational purposes. The %1 indicates a substitution variable. The text for this substitution variable is generated by the controller and is displayed with the alert in the Alert Log. This text is from events in the controller event log that were generated while Storage Management was not running. This text can vary depending on the situation. ResolutionsNoneSummaryThe controller has recovered cached data from the BBU. CausesThis alert is for informational purposes. ResolutionsNoneSummaryThe factory default settings have been restored. CausesThis alert is for informational purposes. ResolutionsNoneSummaryThe Check Consistency made corrections and completed. CausesThis alert is for informational purposes. ResolutionsNoneSummaryA physical disk is marked as missing. CausesThis alert is for informational purposes. ResolutionsNoneSummaryA physical disk that was marked as missing has been replaced. CausesThis alert is for informational purposes. ResolutionsNoneSummaryThe enclosure temperature has returned to normal.CausesThis alert is for informational purposes. ResolutionsNoneSummaryCausesResolutionsSummaryThe battery charge cycle is complete. CausesThis alert is for informational purposes. ResolutionsNoneSummaryA user has discarded data from the controller cache. CausesThis alert is for informational purposes. ResolutionsNoneSummaryPhysical disk(s) that are part of a virtual disk have been removed while the system was shut down. This removal was discovered during system start-up. CausesThis alert is for informational purposes. ResolutionsNoneSummaryPhysical disk(s) have been removed from a virtual disk. The virtual disk will be in Failed state during the next system reboot. CausesThis alert is for informational purposes. ResolutionsNoneSummaryAll virtual disks are missing from the controller. This situation was discovered during system start-up. CausesThis alert is for informational purposes. ResolutionsNoneSummaryDedicated spare imported as global due to missing arraysCausesThis alert is for informational purposes. ResolutionsNoneSummaryThe SCSI Enclosure Processor (SEP) has been rebooted as part of the firmware download operation and will be unavailable until the operation completes. CausesThis alert is for informational purposes. ResolutionsNoneSummaryVirtual Disk Redundancy has been degraded. CausesA physical disk in a RAID 6 virtual disk has either failed or been removed.ResolutionsReplace the missing or failed physical disk.SummaryAttempted import of Unsupported Virtual Disk type RAID%1 CausesThis alert is for informational purposes. ResolutionsNoneSummary
Thermal shutdown protection has been initiated
Causes
This message is generated when a system is configured for thermal shutdown due to an error event. If a temperature sensor reading exceeds the error threshold for which the system is configured, the operating system shuts down and the system powers off. This event may also be initiated on certain systems when a fan enclosure is removed from the system for an extended period of time.
ResolutionsA Critical message refers to a significant event that indicates actual or imminent loss of data or loss of function. Replace the failed component or change the environment, such as cooling or power appropriately. Summary
SMBIOS data is absent
Causes
The system does not contain the required systems management BIOS version 2.2 or higher, or the BIOS is corrupted.
ResolutionsEnsure that the system contains a valid system management BIOS version. Summary
Automatic System Recovery (ASR) action was performed
Action performed was: %Action%
Date and time of action: %Date and time%
Causes
This message is generated when an automatic system recovery action is performed due to a hung operating system. The action performed and the time of action are provided.
ResolutionsA Critical message refers to a significant event that indicates actual or imminent loss of data or loss of function. The Windows event log may contain the information that caused the Operating system to hang. Summary
RCI table is corrupt
Causes
This message is generated when the BIOS Remote Configuration Interface (RCI) table is corrupted or cannot be read by the systems management software.
ResolutionsSummary
Temperature sensor detected a warning value
Sensor location: %Location in chassis%
Chassis location: %Name of chassis%
Previous state was: %State%
If sensor type is not discrete:
Temperature sensor value (in degrees Celsius): %Reading%
If sensor type is discrete:
Discrete temperature state: %State%
Causes
A temperature sensor on the backplane board, system board, CPU, or drive carrier in the specified system exceeded its warning threshold. The sensor location, chassis location, previous state, and temperature sensor value are provided.
ResolutionsA Warning message refers to an event that is not necessarily significant, but may indicate a possible future problem. Plan to pro-actively change the environment, such as power or cooling, based on the pattern of occurrence, or replace the failed component, based on the impact to operations, if the temperature sensor goes to a critical state. Summary
Temperature sensor detected a failure value
Sensor location: %Location in chassis%
Chassis location: %Name of chassis%
Previous state was: %State%
If sensor type is not discrete:
Temperature sensor value (in degrees Celsius): %Reading%
If sensor type is discrete:
Discrete temperature state: %State%
Causes
A temperature sensor on the backplane board, system board, or drive carrier in the specified system exceeded its failure threshold. The sensor location, chassis location, previous state, and temperature sensor value are provided.
ResolutionsA Critical message refers to a significant event that indicates actual or imminent loss of data or loss of function. Change the environment, such as cooling or power as appropriate, or replace the failed component. Summary
Temperature sensor detected a non-recoverable value
Sensor location: %Location in chassis%
Chassis location: %Name of chassis%
Previous state was: %State%
If sensor type is not discrete:
Temperature sensor value (in degrees Celsius): %Reading%
If sensor type is discrete:
Discrete temperature state: %State%
Causes
A temperature sensor on the backplane board, system board, or drive carrier in the specified system detected an error from which it cannot recover. The sensor location, chassis location, previous state, and temperature sensor value are provided.
ResolutionsA Critical message refers to a significant event that indicates actual or imminent loss of data or loss of function. Change the environment, such as cooling or power as appropriate, or replace the failed component. Summary
Fan sensor detected a warning value
Sensor location: %Location in chassis%
Chassis location: %Name of chassis%
Previous state was: %State%
Fan sensor value: %Reading%
Causes
A fan sensor reading in the specified system exceeded a warning threshold. The sensor location, chassis location, previous state, and fan sensor value are provided.
ResolutionsA Warning message refers to an event that is not necessarily significant, but may indicate a possible future problem. Plan to pro-actively replace the failed fan or change the environment, such as power or cooling based on the pattern of occurrence, as well as the impact to operations if the fan goes to a critical state. Summary
Fan sensor detected a failure value
Sensor location: %Location in chassis%
Chassis location: %Name of chassis%
Previous state was: %State%
Fan sensor value: %Reading%
Causes
A fan sensor in the specified system detected the failure of one or more fans. The sensor location, chassis location, previous state, and fan sensor value are provided.
ResolutionsA Critical message refers to a significant event that indicates actual or imminent loss of data or loss of function. Replace the failed fan or change the environment, such as cooling or power appropriately. Summary
Fan sensor detected a non-recoverable value
Sensor location: %Location in chassis%
Chassis location: %Name of chassis%
Previous state was: %State%
Fan sensor value: %Reading%
Causes
A fan sensor detected an error from which it cannot recover. The sensor location, chassis location, previous state, and fan sensor value are provided.
ResolutionsA Critical message refers to a significant event that indicates actual or imminent loss of data or loss of function. Replace the failed fan or change the environment, such as cooling or power appropriately. Summary
Voltage sensor detected a warning value
Sensor location: %Location in chassis%
Chassis location: %Name of chassis%
Previous state was: %State%
If sensor type is not discrete:
Voltage sensor value (in Volts): %Reading%
If sensor type is discrete:
Discrete voltage state: %State%
Causes
A voltage sensor in the specified system exceeded its warning threshold. The sensor location, chassis location, previous state, and voltage sensor value are provided.
ResolutionsA Warning message refers to an event that is not necessarily significant, but may indicate a possible future problem. Plan to pro-actively change the environment, such as power or cooling, based on the pattern of occurrence, or replace the failed component, based on the impact to operations, if the voltage sensor goes to a critical state. Summary
Voltage sensor detected a failure value
Sensor location: %Location in chassis%
Chassis location: %Name of chassis%
Previous state was: %State%
If sensor type is not discrete:
Voltage sensor value (in Volts): %Reading%
If sensor type is discrete:
Discrete voltage state: %State%
Causes
A voltage sensor in the specified system exceeded its failure threshold. The sensor location, chassis location, previous state, and voltage sensor value are provided.
ResolutionsA Critical message refers to a significant event that indicates actual or imminent loss of data or loss of function. Change the environment, such as cooling or power as appropriate, or replace the failed component. Summary
Voltage sensor detected a non-recoverable value.
Sensor location: %Location in chassis%
Chassis location: %Name of chassis%
Previous state was: %State%
If sensor type is not discrete:
Voltage sensor value (in Volts): %Reading%
If sensor type is discrete:
Discrete voltage state: %State%
Causes
A voltage sensor in the specified system detected an error from which it cannot recover. The sensor location, chassis location, previous state, and voltage sensor value are provided.
ResolutionsA Critical message refers to a significant event that indicates actual or imminent loss of data or loss of function. Change the environment, such as cooling or power as appropriate, or replace the failed component. Summary
Current sensor detected a warning value
Sensor location: %Location in chassis%
Chassis location: %Name of chassis%
Previous state was: %State%
If sensor type is not discrete:
Current sensor value (in Amps): %Reading%
If sensor type is discrete:
Discrete current state: %State%
Causes
A current sensor on the power supply for the specified system exceeded its warning threshold. The sensor location, chassis location, previous state, and current sensor value are provided.
ResolutionsA Warning message refers to an event that is not necessarily significant, but may indicate a possible future problem. Plan to pro-actively replace the failed component or change the environment, such as power or cooling, based on the pattern of occurrence, as well as the impact to operations if the component goes to a critical state. Summary
Current sensor detected a failure value
Sensor location: %Location in chassis%
Chassis location: %Name of chassis%
Previous state was: %State%
If sensor type is not discrete:
Current sensor value (in Amps): %Reading%
If sensor type is discrete:
Discrete current state: %State%
Causes
A current sensor on the power supply for the specified system exceeded its failure threshold. The sensor location, chassis location, previous state, and current sensor value are provided.
ResolutionsA Critical message refers to a significant event that indicates actual or imminent loss of data or loss of function. Replace the failed component or change the environment, such as cooling or power as appropriate. Summary
Current sensor detected a non-recoverable value
Sensor location: %Location in chassis%
Chassis location: %Name of chassis%
Previous state was: %State%
If sensor type is not discrete:
Current sensor value(in Amps): %Reading%
If sensor type is discrete:
Discrete current state: %State%
Causes
A current sensor in the specified system detected an error from which it cannot recover. The sensor location, chassis location, previous state, and current sensor value are provided.
ResolutionsA Critical message refers to a significant event that indicates actual or imminent loss of data or loss of function. Replace the failed component or change the environment, such as cooling or power as appropriate. Summary
Chassis intrusion in progress.
Sensor location: %Location in chassis%
Chassis location: %Name of chassis%
Previous state was: %State%
Chassis intrusion state: %Intrusion state%
Causes
A chassis intrusion sensor in the specified system detected that a system cover is currently being opened and the system is operating. The sensor location, chassis location, previous state, and chassis intrusion state are provided.
ResolutionsA Warning message refers to an event that is not necessarily significant, but may indicate a possible future problem. Plan to pro-actively close the system cover, based on the impact to operations if the chassis intrusion sensor goes to a critical state. Summary
Chassis intrusion detected
Sensor location: %Location in chassis%
Chassis location: %Name of chassis%
Previous state was: %State%
Chassis intrusion state: %Intrusion state%
Causes
A chassis intrusion sensor in the specified system detected that the system cover was opened while the system was operating. The sensor location, chassis location, previous state, and chassis intrusion state are provided.
ResolutionsA Critical message refers to a significant event that indicates actual or imminent loss of data or loss of function. Close the system cover. Summary
Chassis intrusion sensor detected a non-recoverable value
Sensor location: %Location in chassis%
Chassis location: %Name of chassis%
Previous state was: %State%
Chassis intrusion state: %Intrusion state%
Causes
A chassis intrusion sensor in the specified system detected an error from which it cannot recover. The sensor location, chassis location, previous state, and chassis intrusion state are provided.
ResolutionsA Critical message refers to a significant event that indicates actual or imminent loss of data or loss of function. Close the system cover. Summary
Redundancy degraded
Redundancy unit: %Redundancy location in chassis%
Chassis location: %Name of chassis%
Previous redundancy state was: %State%
Causes
A redundancy sensor in the specified system detected that one of the components of the redundancy unit has failed but the unit is still redundant. The redundancy unit location, chassis location, previous redundancy state, and the number of devices required for full redundancy are provided.
ResolutionsA Warning message refers to an event that is not necessarily significant, but may indicate a possible future problem. Plan to pro-actively reconnect the unplugged power supply or change the failed power supply, based on the the impact to operations if the power supply sensor goes to a critical state. Summary
Redundancy lost
Redundancy unit: %Redundancy location in chassis%
Chassis location: %Name of chassis%
Previous redundancy state was: %State%
CausesResolutionsA Warning message refers to an event that is not necessarily significant, but may indicate a possible future problem. Plan to pro-actively reconnect the unplugged power supply or change the failed power supply, based on the the impact to operations if the power supply sensor goes to a critical state. Summary
Redundancy lost
Redundancy unit: %Redundancy location in chassis%
Chassis location: %Name of chassis%
Previous redundancy state was: %State%
CausesResolutionsA Critical message refers to a significant event that indicates actual or imminent loss of data or loss of function. Reconnect the unplugged power supply or change the failed power supply.Summary
Power supply detected a warning
Sensor location: %Location in chassis%
Chassis location: %Name of chassis%
Previous state was: %State%
Power Supply type: %type of power supply%
%Additional power supply status information%
If in configuration error state:
Configuration error type: %type of configuration error%
Causes
A power supply sensor reading in the specified system exceeded a user-definable warning threshold. The sensor location, chassis location, previous state, and additional power supply status information are provided.
ResolutionsA Warning message refers to an event that is not necessarily significant, but may indicate a possible future problem. Plan to pro-actively reconnect the unplugged power supply or change the failed power supply, based on the the impact to operations if the power supply sensor goes to a critical state. Summary
Power supply detected a failure
Sensor location: %Location in chassis%
Chassis location: %Name of chassis%
Previous state was: %State%
Power Supply type: %type of power supply%
%Additional power supply status information%
If in configuration error state:
Configuration error type: %type of configuration error%
Causes
A power supply has been disconnected or has failed. The sensor location, chassis location, previous state, and additional power supply status information are provided.
ResolutionsA Critical message refers to a significant event that indicates actual or imminent loss of data or loss of function. Reconnect the unplugged power supply or change the failed power supply. Summary
Power supply sensor detected a non-recoverable value
Sensor location: %Location in chassis%
Chassis location: %Name of chassis%
Previous state was: %State%
Power Supply type: %type of power supply%
%Additional power supply status information%
If in configuration error state:
Configuration error type:
%type of configuration error%
Causes
A power supply sensor in the specified system detected an error from which it cannot recover. The sensor location, chassis location, previous state, and additional power supply status information are provided.
ResolutionsA Critical message refers to a significant event that indicates actual or imminent loss of data or loss of function. Reconnect the unplugged power supply or change the failed power supply. Summary
Memory device status is %status%
Memory device location: %location in chassis%
Possible memory module event cause: %list of causes%
Causes
A memory device correction rate exceeded an acceptable value. The memory device status and location are provided.
ResolutionsReplace the memory module identified in the message during the system’s next scheduled maintenance. Clear the memory error on multibit ECC error. Once the issue has been resolved, the status of the alert changes to Success. Summary
Memory device status is %status%
Memory device location: %location in chassis%
Possible memory module event cause: %list of causes%
Causes
A memory device correction rate exceeded an acceptable value, a memory spare bank was activated, or a multibit ECC error occurred. The system continues to function normally (except for a multibit error). Replace the memory module identified in the message during the system's next scheduled maintenance. Clear the memory error on multibit ECC error. The memory device status and location are provided.
ResolutionsReplace the memory module identified in the message during the system’s next scheduled maintenance. Clear the memory error on multibit ECC error. Once the issue has been resolved, the status of the alert changes to Success. Summary
Fan enclosure removed from system
Sensor location: %Location in chassis%
Chassis location: %Name of chassis%
Causes
A fan enclosure has been removed from the specified system. The sensor location and chassis location are provided.
ResolutionsA Warning message refers to an event that is not necessarily significant, but may indicate a possible future problem. Plan to pro-actively replace the failed component or change the environment, such as power or cooling based on the pattern of occurrence, as well as the impact to operations if the component goes to a critical state. Summary
Fan enclosure removed from system for an extended amount of time
Sensor location: %Location in chassis%
Chassis location: %Name of chassis%
Causes
A fan enclosure has been removed from the specified system for a user-definable length of time. The sensor location and chassis location are provided.
ResolutionsA Critical message refers to a significant event that indicates actual or imminent loss of data or loss of function. Replace the failed component or change the environment, such as cooling or power appropriately. Summary
Fan enclosure sensor detected a non-recoverable value
Sensor location: %Location in chassis%
Chassis location: %Name of chassis%
Causes
A fan enclosure sensor in the specified system detected an error from which it cannot recover. The sensor location and chassis location are provided.
ResolutionsA Critical message refers to a significant event that indicates actual or imminent loss of data or loss of function. Replace the failed component or change the environment, such as cooling or power appropriately. Summary
AC power has been lost
Sensor location: %Location in chassis%
Chassis location: %Name of chassis%
Causes
An AC power cord has lost its power, but there is sufficient redundancy to classify this as a warning. The sensor location and chassis location information are provided.
ResolutionsA Warning message refers to an event that is not necessarily significant, but may indicate a possible future problem. Plan to pro-actively replace the AC Power Cord or change the environment, such as power or cooling, based on the pattern of occurrence, as well as the impact to operations if the component goes to a critical state. Summary
AC power has been lost
Sensor location: %Location in chassis%
Chassis location: %Name of chassis%
Causes
An AC power cord has lost its power, and lack of redundancy requires this to be classified as an error. The sensor location and chassis location information are provided.
ResolutionsA Critical message refers to a significant event that indicates actual or imminent loss of data or loss of function. Replace the failed AC Power Cord or change the environment, such as cooling or power as appropriate. Summary
AC power has been lost
Sensor location: %Location in chassis%
Chassis location: %Name of chassis%
Causes
An AC power cord sensor in the specified system failed. The AC power cord status cannot be monitored. The sensor location and chassis location information are provided.
ResolutionsA Critical message refers to a significant event that indicates actual or imminent loss of data or loss of function. Replace the failed AC Power Cord or change the environment, such as cooling or power as appropriate. Summary
Log size is near or at capacity
Log type: %Log type%
Causes
The size of a hardware log on the specified system is near or at the capacity of the hardware log. The log type information is provided.
ResolutionsA Warning message refers to an event that is not necessarily significant, but may indicate a possible future problem. Plan to pro-actively clear the hardware log, based on the impact to operations if the hardware log goes to a critical state. Summary
Log size is full
Log type: %Log type%
Causes
The size of a hardware log on the specified system is full. The log type information is provided.
ResolutionsA Critical message refers to a significant event that indicates actual or imminent loss of error information. Export the hardware log and clear it to allow new entries. Summary
Log sensor has failed
Log type: %Log type%
Causes
A hardware log sensor in the specified system failed. The hardware log status cannot be monitored. The log type information is provided.
ResolutionsA Critical message refers to a significant event that indicates actual or imminent loss of error information. Export the hardware log and clear it to allow new entries. Summary
Processor sensor detected a warning value
Sensor Location: %Location in chassis%
Chassis Location: %Name of chassis%
Previous state was: %State%
Processor sensor status: %status%
Causes
A processor sensor in the specified system is in a throttled state. The sensor location, chassis location, previous state and processor sensor status are provided.
ResolutionsA Warning message refers to an event that is not necessarily significant, but may indicate a possible future problem. Plan to pro-actively replace the failed processor, based on the impact to operations, if the processor sensor goes to a critical state. Summary
Processor sensor detected a failure value
Sensor Location: %Location in chassis%
Chassis Location: %Name of chassis%
Previous state was: %State%
Processor sensor status: %status%
Causes
A processor sensor in the specified system is disabled, has a configuration error, or experienced a thermal trip. The sensor location, chassis location, previous state and processor sensor status are provided.
ResolutionsA Critical message refers to a significant event that indicates actual or imminent loss of data or loss of function. Change the failed processor. Summary
Processor sensor detected a non-recoverable value
Sensor Location: %Location in chassis%
Chassis Location: %Name of chassis%
Previous state was: %State%
Processor sensor status: %status%
Causes
A processor sensor in the specified system has failed. The sensor location, chassis location, previous state and processor sensor status are provided.
ResolutionsA Critical message refers to a significant event that indicates actual or imminent loss of data or loss of function. Change the failed processor. Summary
Device configuration error detected
Device location: %Location in chassis%
Chassis location: %Name of chassis%
Additional details: %Additional details for the events%
Causes
A configuration error was detected for a pluggable device in the specified system. The device may have been added to the system incorrectly.
ResolutionsEnsure that the device is plugged into the system correctly. Summary
Battery sensor detected a warning value
Sensor Location: %Location in chassis%
Chassis Location: %Name of chassis%
Previous state was: %State%
Battery sensor status: %status%
Causes
A battery sensor in the specified system detected that a battery is in a predictive failure state. The sensor location, chassis location, previous state, and battery sensor status are provided.
ResolutionsA Warning message refers to an event that is not necessarily significant, but may indicate a possible future problem. Plan to pro-actively replace the identified battery sensor in the message, based on the the impact to operations if the battery sensor goes to a critical state. Summary
Battery sensor detected a failure value
Sensor Location: %Location in chassis%
Chassis Location: %Name of chassis%
Previous state was: %State%
Battery sensor status: %status%
Causes
A battery sensor in the specified system detected that a battery has failed. The sensor location, chassis location, previous state, and battery sensor status are provided.
ResolutionsA Critical message refers to a significant event that indicates actual or imminent loss of data or loss of function. Replace the battery sensor identified in the message during the system’s next scheduled maintenance. Summary
Battery sensor detected a non-recoverable value
Sensor Location: %Location in chassis%
Chassis Location: %Name of chassis%
Previous state was: %State%
Battery sensor status: %status%
Causes
A battery sensor in the specified system detected that a battery has failed. The sensor location, chassis location, previous state, and battery sensor status are provided.
ResolutionsA Critical message refers to a significant event that indicates actual or imminent loss of data or loss of function. Replace the battery sensor identified in the message during the system’s next scheduled maintenance. SummaryLog was clearedCausesUser cleared the log from Server Administrator.ResolutionsNoneSummaryLog backup createdCausesThe log was full, copied to backup, and cleared.ResolutionsNoneSummaryServer Administrator startingCausesServer Administrator is beginning to initialize.ResolutionsNoneSummaryServer Administrator startup complete CausesServer Administrator completed its initialization.ResolutionsNoneSummaryA system BIOS update has been scheduled for the next rebootCausesThe user has chosen to update the flash basic input/output system (BIOS).ResolutionsNoneSummaryA previously scheduled system BIOS update has been canceledCausesThe user decides to cancel the flash BIOS update, or an error occurs during the flash.ResolutionsNoneSummaryUser initiated host system control actionCausesUser requested a host system control action to reboot, power off, or power cycle the system. Alternatively the user had indicated protective measures to be initiated in the event of a thermal shutdown.ResolutionsNoneSummarySystems Management Data Manager StartedCausesSystems Management Data Manager services were started.ResolutionsNoneSummarySystems Management Data Manager StoppedCausesSystems Management Data Manager services were stopped.ResolutionsNoneSummaryIPMI StatusCausesThis message is generated to indicate the Intelligent Platform Management Interface (IPMI)) status of the system. Additional information, when available, includes Baseboard Management Controller (BMC) not present, BMC not responding, System Event Log (SEL) not present, and SEL Data Record (SDR)not present. ResolutionsNoneSummaryTemperature sensor has failedCausesA temperature sensor on the backplane board, system board, or the carrier in the specified system failed. The sensor location, chassis location, previous state, and temperature sensor value are provided.ResolutionsNoneSummaryTemperature sensor value unknownCausesA temperature sensor on the backplane board, system board, or drive carrier in the specified system could not obtain a reading. The sensor location, chassis location, previous state, and a nominal temperature sensor value are provided.ResolutionsNoneSummaryTemperature sensor returned to a normal value CausesA temperature sensor on the backplane board, system board, or drive carrier in the specified system returned to a valid range after crossing a failure threshold. The sensor location, chassis location, previous state, and temperature sensor value are provided.ResolutionsNoneSummaryFan sensor has failedCausesA fan sensor in the specified system is not functioning. The sensor location, chassis location, previous state, and fan sensor value are provided. ResolutionsNoneSummaryFan sensor value unknownCausesA fan sensor in the specified system could not obtain a reading. The sensor location, chassis location, previous state, and a nominal fan sensor value are provided.ResolutionsNoneSummaryFan sensor returned to a normal value CausesA fan sensor reading on the specified system returned to a valid range after crossing a warning threshold. The sensor location, chassis location, previous state, and fan sensor value are provided.ResolutionsNoneSummaryVoltage sensor has failedCausesA voltage sensor in the specified system failed. The sensor location, chassis location, previous state, and voltage sensor value are provided. ResolutionsNoneSummaryVoltage sensor value unknownCausesA voltage sensor in the specified system could not obtain a reading. The sensor location, chassis location, previous state, and a nominal voltage sensor value are provided.ResolutionsNoneSummaryVoltage sensor returned to a normal value CausesA voltage sensor in the specified system returned to a valid range after crossing a failure threshold. The sensor location, chassis location, previous state, and voltage sensor value are provided.ResolutionsNoneSummaryCurrent sensor has failedCausesA current sensor in the specified system failed. The sensor location, chassis location, previous state, and current sensor value are provided. ResolutionsNoneSummaryCurrent sensor value unknownCausesA current sensor in the specified system could not obtain a reading. The sensor location, chassis location, previous state, and a nominal current sensor value are provided. ResolutionsNoneSummaryCurrent sensor returned to a normal value CausesA current sensor in the specified system returned to a valid range after crossing a failure threshold. The sensor location, chassis location, previous state, and current sensor value are provided. ResolutionsNoneSummaryChassis intrusion sensor has failed CausesA chassis intrusion sensor in the specified system failed. The sensor location, chassis location, previous state, and chassis intrusion state are provided. ResolutionsNoneSummaryChassis intrusion sensor value unknownCausesA chassis intrusion sensor in the specified system could not obtain a reading. The sensor location, chassis location, previous state, and chassis intrusion state are provided.ResolutionsNoneSummaryChassis intrusion returned to normalCausesA chassis intrusion sensor in the specified system detected that a cover was opened while the system was operating but has since been replaced. The sensor location, chassis location, previous state, and chassis intrusion state are provided. ResolutionsNoneSummaryRedundancy sensor has failedCausesA redundancy sensor in the specified system failed. The redundancy unit location, chassis location, previous redundancy state, and the number of devices required for full redundancy are provided.ResolutionsNoneSummaryRedundancy sensor value unknown CausesA redundancy sensor in the specified system could not obtain a reading. The redundancy unit location, chassis location, previous redundancy state, and the number of devices required for full redundancy are provided. ResolutionsNoneSummaryRedundancy not applicableCausesA redundancy sensor in the specified system detected that a unit was not redundant. The redundancy location, chassis location, previous redundancy state, and the number of devices required for full redundancy are provided.ResolutionsNoneSummaryRedundancy is offlineCausesA redundancy sensor in the specified system detected that a redundant unit is offline. The redundancy unit location, chassis location, previous redundancy state, and the number of devices required for full redundancy are provided.ResolutionsNoneSummaryRedundancy regainedCausesA redundancy sensor in the specified system detected that a “lost” redundancy device has been reconnected or replaced; full redundancy is in effect. The redundancy unit location, chassis location, previous redundancy state, and the number of devices required for full redundancy are provided. ResolutionsNoneSummaryPower supply sensor has failedCausesA power supply sensor in the specified system failed. The sensor location, chassis location, previous state, and additional power supply status information are provided.ResolutionsNoneSummaryPower supply sensor value unknown CausesA power supply sensor in the specified system could not obtain a reading. The sensor location, chassis location, previous state, and additional power supply status information are provided. ResolutionsNoneSummaryPower supply returned to normalCausesA power supply has been reconnected or replaced. The sensor location, chassis location, previous state, and additional power supply status information are provided. ResolutionsNoneSummaryFan enclosure sensor has failedCausesThe fan enclosure sensor in the specified system failed. The sensor location and chassis location are provided.ResolutionsNoneSummaryFan enclosure sensor value unknownCausesThe fan enclosure sensor in the specified system could not obtain a reading. The sensor location and chassis location are provided. ResolutionsNoneSummaryFan enclosure inserted into system CausesA fan enclosure has been inserted into the specified system. The sensor location and chassis location are provided. ResolutionsNoneSummaryAC power cord sensor has failed CausesAn AC power cord sensor in the specified system failed. The AC power cord status cannot be monitored. The sensor location and chassis location information are provided. ResolutionsNoneSummaryAC power cord is not being monitored CausesThe AC power cord status is not being monitored. This occurs when a system’s expected AC power configuration is set to nonredundant. The sensor location and chassis location information are provided. ResolutionsNoneSummaryAC power has been restoredCausesAn AC power cord that did not have AC power has had the power restored. The sensor location and chassis location information are provided. ResolutionsNoneSummaryLog monitoring has been disabled CausesA hardware log sensor in the specified system is disabled. The log type information is provided. ResolutionsNoneSummaryLog status is unknownCausesA hardware log sensor in the specified system could not obtain a reading. The log type information is provided. ResolutionsNoneSummaryLog size is no longer near or at capacityCausesThe hardware log on the specified system is no longer near or at its capacity, usually as the result of clearing the log. The log type information is provided ResolutionsNoneSummaryProcessor sensor has failedCausesA processor sensor in the specified system is not functioning. The sensor location, chassis location, previous state and processor sensor status are provided. ResolutionsNoneSummaryProcessor sensor value unknownCausesA processor sensor in the specified system could not obtain a reading. The sensor location, chassis location, previous state and processor sensor status are provided. ResolutionsNoneSummaryProcessor sensor returned to a normal value CausesA processor sensor in the specified system transitioned back to a normal state. The sensor location, chassis location, previous state and processor sensor status are provided. ResolutionsNoneSummaryDevice plug event type unknown CausesA pluggable device event message of unknown type was received. The device location, chassis location, and additional event details, if available, are provided. ResolutionsNoneSummaryDevice added to systemCausesA device was added in the specified system. The device location, chassis location, and additional event details, if available, are provided. ResolutionsNoneSummaryDevice removed from systemCausesA device was removed from the specified system. The device location, chassis location, and additional event details, if available, are provided. ResolutionsNoneSummaryBattery sensor has failedCausesA battery sensor in the specified system is not functioning. The sensor location, chassis location, previous state, and battery sensor status are provided. ResolutionsNoneSummaryBattery sensor value unknownCausesA battery sensor in the specified system could not retrieve a reading. The sensor location, chassis location, previous state, and battery sensor status are provided. ResolutionsNoneSummaryBattery sensor returned to a normal value CausesA battery sensor in the specified system detected that a battery transitioned back to a normal state. The sensor location, chassis location, previous state, and battery sensor status are provided. ResolutionsNoneSummaryThe Dell Systems Management Server Administrator Data Manager provides infrastructure support for system management functions. This service is referred as Systems Management Data Manager in Windows Services for Dell OpenManage releases before 5.0.This is a result of a service state change and shows the status of the Service:Success: The service is running.Warning: The service is paused.Critical: The service has been stopped.CausesWarning: A Warning status may display if a service in the specified system is reporting a paused state.Critical: A Critical staus may display if the service in the specified system is reporting a stopped state. This state can also occur during installing or uninstalling the Dell OpenManage Server Administrator.ResolutionsPerform the following steps for the Warning and Critical status:Warning: A Warning status indicates the Dell OpenManage service is paused. Resume the service on the managed node.Critical: A Critical status indicates actual or imminent loss of data or loss of function. Restart the service on the agent managed node. If the restart fails, re-install OpenManage Server Administrator on the agent managed node. This state can also occur during installing or uninstalling the Dell OpenManage Server Administrator. The Monitor changes to Success in the next polling cycle after the issue is resolved.SummaryThe Dell Systems Management Server Administrator Event Manager provides infrastructure support for system management functions. This service is referred as Systems Management Event Manager in Windows Services for Dell OpenManage releases before 5.0.This status is a result of a service state change and displays the status of the Service:Success: The service is running.Warning: The service is paused.Critical: The service has been stopped.CausesWarning: A Warning status may display if a service in the specified system is reporting a paused state.Critical: A Critical status may display if the service in the specified system is reporting a stopped state. This state can also occur during installing or uninstalling the Dell OpenManage Server Administrator.ResolutionsPerform the following steps for the Warning and Critical status:Warning: A Warning status indicates the that Dell OpenManage service is paused. Resume the service on the managed node.Critical: A Critical status indicates actual or imminent loss of data or loss of function. Restart the service on the agent managed node. If the restart fails, re-install Dell OpenManage Server Administrator on the agent managed node. This state can also occur during installing or uninstalling the Dell OpenManage Server Administrator.The Monitor changes to Success in the next polling cycle after the issue is resolved.SummaryThe Dell Systems Management Server Administrator Connection Service provides infrastructure support for system management functions. This service is referred as Secure Port Server in Windows Services for Dell OpenManage releases before 5.0.This is a result of a service state change and shows the status of the Service:Success: The service is running.Warning: The service is paused.Critical: The service has been stopped.CausesWarning: A Warning status may display if a service in the specified system is reporting a paused state.Critical: A Critical status may display if the service in the specified system is reporting a stopped state. This state can also occur during installing or uninstalling the Dell OpenManage Server Administrator.ResolutionsPerform the following steps for the Warning and Critical status:Warning: A Warning status indicates the Dell OpenManage service is paused. Resume the service on the managed node.Critical: A Critical status indicates actual or imminent loss of data or loss of function. Restart the service on the agent managed node. If the restart fails, re-install OpenManage Server Administrator on the agent managed node. This state can also occur during installing or uninstalling the Dell OpenManage Server Administrator. The Monitor changes to Success in the next polling cycle after the issue is resolved.SummaryThe Dell Systems Management Server Administrator Shared Service provides infrastructure support for system management functions. This service is referred as OM Common Services in Windows Services for the Dell OpenManage releases before 5.0. This is a result of a service state change and displays the status of the Service:Success: The service is running.Warning: The service is paused.Critical: The service has been stopped.CausesWarning: A Warning status may display if a service in the specified system is reporting a paused state.Critical: A Critical status may display if the service in the specified system is reporting a stopped state. This state can also occur during installing or uninstalling the Dell OpenManage Server Administrator.ResolutionsPerform the following steps for the Warning and Critical status:Warning: A Warning status indicates that the Dell OpenManage service is paused. Resume the service on the managed node.Critical: A Critical status indicates actual or imminent loss of data or loss of function. Restart the service on the agent managed node. If the restart fails, re-install Dell OpenManage Server Administrator on the agent managed node. This state can also occur during installing or uninstalling the Dell OpenManage Server Administrator.The Monitor changes to Success in the next polling cycle after the issue is resolved.SummaryThis message is a result of a state change and shows the status of the fan sensor. The status can be one of the following three types:Success: If the status is success, the fan sensor has returned to a normal state.Warning: If the status is warning, the fan sensor is reporting a warning state.Critical: If the status is critical, the fan sensor has detected a failure or a nonrecoverable state. CausesWarning: The cause for a Warning status may be that a fan sensor reading in the specified system has exceeded its warning threshold.Critical: The cause for a Critical status may be that a fan sensor in the specified system detected the failure of one or more fans or detected an error from which it cannot recover. Additional details are available in the product knowledge of the last modified Dell OpenManage alert that caused the state change.ResolutionsPerform the following steps for the Warning and Critical messages:Warning: A Warning message refers to an event that is not necessarily significant, but may indicate a possible future problem. Plan to proactively replace the failed fan or change the environment, such as power or cooling, based on the pattern of occurrence, as well as the impact to operations if the fan goes to a critical state.Critical: A Critical message refers to a significant event that indicates actual or imminent loss of data or loss of function. Change the environment, such as cooling or power, as appropriate; or replace the failed component. Additional details are available in the product knowledge of the last modified Dell OpenManage alert that caused the state change.When the issue has been resolved, the status changes to Success in the next polling cycle.SummaryThis message is a result of a state change and shows the status of the fan sensor. The status can be one of the following three types:Success: If the status is success, the fan sensor has returned to a normal state.Warning: If the status is warning, the fan sensor is reporting a warning state.Critical: If the status is critical, the fan sensor has detected a failure or a nonrecoverable state. CausesWarning: The cause for a Warning status may be that a fan sensor reading in the specified system has exceeded its warning threshold. Critical: The cause for a Critical status may be that a fan sensor in the specified system detected the failure of one or more fans or detected an error from which it cannot recover. Additional details are available in the product knowledge of the last modified Dell OpenManage alert that caused the state change.ResolutionsPerform the following steps for the Warning and Critical messages:Warning: A Warning message refers to an event that is not necessarily significant, but may indicate a possible future problem. Plan to proactively replace the failed fan or change the environment, such as power or cooling, based on the pattern of occurrence, as well as the impact to operations if the fan goes to a critical state. Critical: A Critical message refers to a significant event that indicates actual or imminent loss of data or loss of function. Change the environment, such as cooling or power, as appropriate; or replace the failed component. Additional details are available in the product knowledge of the last modified Dell OpenManage alert that caused the state change.When the issue has been resolved, the status changes to Success.SummaryThis message is a result of a state change and shows the status of the fan sensor. The status can be one of the following three types:Success: If the status is success, the fan sensor has returned to a normal state. Warning: If the status is warning, the fan sensor is reporting a warning state.Critical: If the status is critical, the fan sensor has detected a failure or a nonrecoverable state. CausesWarning: The cause for a Warning status may be that a fan sensor reading in the specified system has exceeded its warning threshold. Critical: The cause for a Critical status may be that a fan sensor in the specified system detected the failure of one or more fans or detected an error from which it cannot recover. Additional details are available in the product knowledge of the last modified Dell OpenManage alert that caused the state change.ResolutionsPerform the following steps for the Warning and Critical messages:Warning: A Warning message refers to an event that is not necessarily significant, but may indicate a possible future problem. Plan to proactively replace the failed fan or change the environment, such as power or cooling, based on the pattern of occurrence, as well as the impact to operations if the fan goes to a critical state. Critical: A Critical message refers to a significant event that indicates actual or imminent loss of data or loss of function. Change the environment, such as cooling or power, as appropriate; or replace the failed component. Additional details are available in the product knowledge of the last modified Dell OpenManage alert that caused the state change.When the issue has been resolved, the status changes to Success.SummaryThis message is a result of a state change and shows the status of the power supply sensor. The status can be one of the following three types:Success: If the status is success, the power supply sensor returned to a normal state. Warning: If the status is warning, the power supply sensor is reporting a warning state. Critical: If the status is critical, the power supply sensor detected a failure state. CausesWarning: The cause for a Warning status may be that a power supply sensor reading in the specified system has exceeded a user-defined warning threshold. Critical: The cause for a Critical status may be that a power supply sensor in the specified system has been disconnected, has failed, or has detected an error from which it cannot recover. Additional details are available in the product knowledge of the last modified Dell OpenManage alert that caused the state change.ResolutionsPerform the following steps for the Warning and Critical messages:Warning: A Warning message refers to an event that is not necessarily significant, but may indicate a possible future problem. Plan to proactively reconnect the unplugged power supply or change the failed power supply, based on the impact to operations, if the power supply sensor goes to a critical state. Critical: A Critical message refers to a significant event that indicates actual or imminent loss of data or loss of function. Reconnect the unplugged power supply or change the failed power supply. Additional details are available in the product knowledge of the last modified Dell OpenManage alert that caused the state change.When the issue has been resolved, the status changes to Success. SummaryThis message is a result of a state change and shows the status of the fan sensor. The status can be one of the following three types:Success: If the status is success, the fan sensor has returned to a normal state. Warning: If the status is warning, the fan sensor is reporting a warning state. Critical: If the status is critical, the fan sensor has detected a failure or a nonrecoverable state. CausesWarning: The cause for a Warning status may be that a fan sensor reading in the specified system has exceeded its warning threshold. Critical: The cause for a Critical status may be that a fan sensor in the specified system detected the failure of one or more fans or detected an error from which it cannot recover. Additional details are available in the product knowledge of the last modified Dell OpenManage alert that caused the state change.ResolutionsPerform the following steps for the Warning and Critical messages:Warning: A Warning message refers to an event that is not necessarily significant, but may indicate a possible future problem. Plan to proactively replace the failed fan or change the environment, such as power or cooling, based on the pattern of occurrence, as well as the impact to operations if the fan goes to a critical state. Critical: A Critical message refers to a significant event that indicates actual or imminent loss of data or loss of function. Change the environment, such as cooling or power, as appropriate; or replace the failed component. Additional details are available in the product knowledge of the last modified Dell OpenManage alert that caused the state change.When the issue has been resolved, the status changes to Success in the next polling cycle.SummaryThis message is a result of a state change and shows the status of the fan sensor. The status can be one of the following three types:Success: If the status is success, the fan sensor has returned to a normal state. Warning: If the status is warning, the fan sensor is reporting a warning state. Critical: If the status is critical, the fan sensor has detected a failure or a nonrecoverable state. CausesWarning: The cause for a Warning status may be that a fan sensor reading in the specified system has exceeded its warning threshold. Critical: The cause for a Critical status may be that a fan sensor in the specified system detected the failure of one or more fans or detected an error from which it cannot recover. Additional details are available in the product knowledge of the last modified Dell OpenManage alert that caused the state change.ResolutionsPerform the following steps for the Warning and Critical messages:Warning: A Warning message refers to an event that is not necessarily significant, but may indicate a possible future problem. Plan to proactively replace the failed fan or change the environment, such as power or cooling, based on the pattern of occurrence, as well as the impact to operations if the fan goes to a critical state. Critical: A Critical message refers to a significant event that indicates actual or imminent loss of data or loss of function. Change the environment, such as cooling or power, as appropriate; or replace the failed component. Additional details are available in the product knowledge of the last modified Dell OpenManage alert that caused the state change.When the issue has been resolved, the status changes to Success.SummaryThis message is a result of a state change and shows the status of the fan sensor. The status can be one of the following three types:Success: If the status is success, the fan sensor has returned to a normal state. Warning: If the status is warning, the fan sensor is reporting a warning state. Critical: If the status is critical, the fan sensor has detected a failure or a nonrecoverable state. CausesWarning: The cause for a Warning status may be that a fan sensor reading in the specified system has exceeded its warning threshold. Critical: The cause for a Critical status may be that a fan sensor in the specified system detected the failure of one or more fans or detected an error from which it cannot recover. Additional details are available in the product knowledge of the last modified Dell OpenManage alert that caused the state change.ResolutionsPerform the following steps for the Warning and Critical messages:Warning: A Warning message refers to an event that is not necessarily significant, but may indicate a possible future problem. Plan to proactively replace the failed fan or change the environment, such as power or cooling, based on the pattern of occurrence, as well as the impact to operations if the fan goes to a critical state. Critical: A Critical message refers to a significant event that indicates actual or imminent loss of data or loss of function. Change the environment, such as cooling or power, as appropriate; or replace the failed component. Additional details are available in the product knowledge of the last modified Dell OpenManage alert that caused the state change.When the issue has been resolved, the status changes to Success.SummaryThis message is a result of a state change and shows the status of the temperature sensor. The status can be one of the following three types:Success: If the status is success, the temperature sensor returned to a normal state. Warning: If the status is warning, the temperature sensor is reporting a warning state. Critical: If the status is critical, the temperature sensor detected a failure state. CausesWarning: The cause for a Warning status may be that a temperature sensor on the backplane board, system board, or drive carrier in the specified system has exceeded its warning threshold. Critical: The cause for a Critical status may be that a temperature sensor on the backplane board, system board, or drive carrier in the specified system has exceeded its failure threshold or detected an error from which it cannot recover. Additional details are available in the product knowledge of the last modified Dell OpenManage alert that caused the state change.ResolutionsPerform the following steps for the Warning and Critical messages:Warning: A Warning message refers to an event that is not necessarily significant, but may indicate a possible future problem. Plan to proactively change the environment, such as power or cooling, based on the pattern of occurrence; or replace the failed component, based on the impact to operations, if the temperature sensor goes to a critical state. Critical: A Critical message refers to a significant event that indicates actual or imminent loss of data or loss of function. Change the environment, such as cooling or power, as appropriate; or replace the failed component. Additional details are available in the product knowledge of the last modified Dell OpenManage alert that caused the state change.When the issue has been resolved, the status changes to Success in the next polling cycle.SummaryThis message is a result of a state change and shows the status of the temperature sensor. The status can be one of the following three types:Success: If the status is success, the temperature sensor returned to a normal state. Warning: If the status is warning, the temperature sensor is reporting a warning state. Critical: If the status is critical, the temperature sensor detected a failure state. CausesWarning: The cause for a Warning status may be that a temperature sensor on the backplane board, system board, or drive carrier in the specified system has exceeded its warning threshold. Critical: The cause for a Critical status may be that a temperature sensor on the backplane board, system board, or drive carrier in the specified system has exceeded its failure threshold or detected an error from which it cannot recover. Additional details are available in the product knowledge of the last modified Dell OpenManage alert that caused the state change.ResolutionsPerform the following steps for the Warning and Critical messages:Warning: A Warning message refers to an event that is not necessarily significant, but may indicate a possible future problem. Plan to proactively change the environment, such as power or cooling, based on the pattern of occurrence; or replace the failed component, based on the impact to operations, if the temperature sensor goes to a critical state. Critical: A Critical message refers to a significant event that indicates actual or imminent loss of data or loss of function. Change the environment, such as cooling or power, as appropriate; or replace the failed component. Additional details are available in the product knowledge of the last modified Dell OpenManage alert that caused the state change.When the issue has been resolved, the status changes to Success.SummaryThis message is a result of a state change and shows the status of the voltage sensor. The status can be one of the following three types:Success: If the status is success, the voltage sensor has returned to a normal state. Warning: If the status is warning, the voltage sensor is reporting a warning state. Critical: If the status is critical, the voltage sensor has detected a failure or nonrecoverable state.CausesWarning: The cause for a Warning status may be that a voltage sensor in the specified system has exceeded its warning threshold. Critical: The cause for a Critical status may be that a voltage sensor in the specified system has exceeded its failure threshold or detected an error from which it cannot recover. Additional details are available in the product knowledge of the last modified Dell OpenManage alert that caused the state change.ResolutionsPerform the following steps for the Warning and Critical messages:Warning: A Warning message refers to an event that is not necessarily significant, but may indicate a possible future problem. Plan to proactively change the environment, such as power or cooling, based on the pattern of occurrence; or replace the failed component, based on the impact to operations, if the voltage sensor goes to a critical state. Critical: A Critical message refers to a significant event that indicates actual or imminent loss of data or loss of function. Change the environment, such as cooling or power, as appropriate; or replace the failed component. Additional details are available in the product knowledge of the last modified Dell OpenManage alert that caused the state change.When the issue has been resolved, the status changes to Success in the next polling cycle.SummaryThis message is a result of a state change and shows the status of the voltage sensor. The status can be one of the following three types:Success: If the status is success, the voltage sensor has returned to a normal state. Warning: If the status is warning, the voltage sensor is reporting a warning state. Critical: If the status is critical, the voltage sensor has detected a failure or nonrecoverable state.CausesWarning: The cause for a Warning status may be that a voltage sensor in the specified system has exceeded its warning threshold. Critical: The cause for a Critical status may be that a voltage sensor in the specified system has exceeded its failure threshold or detected an error from which it cannot recover. Additional details are available in the product knowledge of the last modified Dell OpenManage alert that caused the state change.ResolutionsPerform the following steps for the Warning and Critical messages:Warning: A Warning message refers to an event that is not necessarily significant, but may indicate a possible future problem. Plan to proactively change the environment, such as power or cooling, based on the pattern of occurrence; or replace the failed component, based on the impact to operations, if the voltage sensor goes to a critical state. Critical: A Critical message refers to a significant event that indicates actual or imminent loss of data or loss of function. Change the environment, such as cooling or power, as appropriate; or replace the failed component. Additional details are available in the product knowledge of the last modified Dell OpenManage alert that caused the state change.When the issue has been resolved, the status changes to Success in the next polling cycle.SummaryThis message is a result of a state change and shows the status of the voltage sensor. The status can be one of the following three types:Success: If the status is success, the voltage sensor has returned to a normal state.Warning: If the status is warning, the voltage sensor is reporting a warning state. Critical: If the status is critical, the voltage sensor has detected a failure or nonrecoverable state.CausesWarning: The cause for a Warning status may be that a voltage sensor in the specified system has exceeded its warning threshold. Critical: The cause for a Critical status may be that a voltage sensor in the specified system has exceeded its failure threshold or detected an error from which it cannot recover. Additional details are available in the product knowledge of the last modified Dell OpenManage alert that caused the state change.ResolutionsPerform the following steps for the Warning and Critical messages:Warning: A Warning message refers to an event that is not necessarily significant, but may indicate a possible future problem. Plan to proactively change the environment, such as power or cooling, based on the pattern of occurrence; or replace the failed component, based on the impact to operations, if the voltage sensor goes to a critical state. Critical: A Critical message refers to a significant event that indicates actual or imminent loss of data or loss of function. Change the environment, such as cooling or power, as appropriate; or replace the failed component. Additional details are available in the product knowledge of the last modified Dell OpenManage alert that caused the state change.When the issue has been resolved, the status changes to Success.SummaryThis message is a result of a state change and shows the status of the voltage sensor. The status can be one of the following three types:Success: If the status is success, the voltage sensor has returned to a normal state. Warning: If the status is warning, the voltage sensor is reporting a warning state. Critical: If the status is critical, the voltage sensor has detected a failure or nonrecoverable state.CausesWarning: The cause for a Warning status may be that a voltage sensor in the specified system has exceeded its warning threshold. Critical: The cause for a Critical status may be that a voltage sensor in the specified system has exceeded its failure threshold or detected an error from which it cannot recover. Additional details are available in the product knowledge of the last modified Dell OpenManage alert that caused the state change.ResolutionsPerform the following steps for the Warning and Critical messages:Warning: A Warning message refers to an event that is not necessarily significant, but may indicate a possible future problem. Plan to proactively change the environment, such as power or cooling, based on the pattern of occurrence; or replace the failed component, based on the impact to operations, if the voltage sensor goes to a critical state. Critical: A Critical message refers to a significant event that indicates actual or imminent loss of data or loss of function. Change the environment, such as cooling or power, as appropriate; or replace the failed component. Additional details are available in the product knowledge of the last modified Dell OpenManage alert that caused the state change.When the issue has been resolved, the status changes to Success.SummaryThis message is a result of a state change and shows the status of the current sensor. The status can be one of the following three types:Success: If the status is success, the current sensor returned to a normal state. Warning: If the status is warning, the current sensor is reporting a warning state. Critical: If the status is critical, the current sensor detected a failure or nonrecoverable state. CausesWarning: The cause for a Warning status may be that a current sensor on the power supply has exceeded its warning threshold. Critical: The cause for a Critical status may be that a current sensor on the power supply has exceeded its failure threshold or detected an error from which it cannot recover. Additional details are available in the product knowledge of the last modified Dell OpenManage alert that caused the state change.ResolutionsPerform the following steps for the Warning and Critical messages:Warning: A Warning message refers to an event that is not necessarily significant, but may indicate a possible future problem. Plan to proactively replace the failed component or change the environment, such as power or cooling, based on the pattern of occurrence, as well as the impact to operations if the component goes to a critical state. Critical: A Critical message refers to a significant event that indicates actual or imminent loss of data or loss of function. Change the environment, such as cooling or power, as appropriate; or replace the failed component. Additional details are available in the product knowledge of the last modified Dell OpenManage alert that caused the state change.When the issue has been resolved, the status changes to Success in the next polling cycle.SummaryThis message is a result of a state change and shows the status of the current sensor. The status can be one of the following three types:Success: If the status is success, the current sensor returned to a normal state. Warning: If the status is warning, the current sensor is reporting a warning state. Critical: If the status is critical, the current sensor detected a failure or nonrecoverable state. CausesWarning: The cause for a Warning status may be that a current sensor on the power supply has exceeded its warning threshold. Critical: The cause for a Critical status may be that a current sensor on the power supply has exceeded its failure threshold or detected an error from which it cannot recover. Additional details are available in the product knowledge of the last modified Dell OpenManage alert that caused the state change.ResolutionsPerform the following steps for the Warning and Critical messages:Warning: A Warning message refers to an event that is not necessarily significant, but may indicate a possible future problem. Plan to proactively replace the failed component or change the environment, such as power or cooling, based on the pattern of occurrence, as well as the impact to operations if the component goes to a critical state. Critical: A Critical message refers to a significant event that indicates actual or imminent loss of data or loss of function. Change the environment, such as cooling or power, as appropriate; or replace the failed component. Additional details are available in the product knowledge of the last modified Dell OpenManage alert that caused the state change.When the issue has been resolved, the status changes to Success.SummaryThis message is a result of a state change and displays the status of the battery sensor:Success: The battery sensor has returned to a normal state. Warning: The battery sensor is reporting a warning state. Critical: The battery sensor has failed. CausesWarning: A Warning status may display if a battery sensor in the specified system is in a throttled state. Critical: A Critical status may display if a battery in the specified system has failed, is disabled, has a configuration error, or experienced a thermal trip. See the product knowledge of the last modified Dell OpenManage alert that caused the state change for additional details. ResolutionsPerform the following steps for the Warning and Critical messages: Warning: A Warning message indicates a possible future problem. Plan to replace the failed battery sensor, based on the impact to operations, if the battery sensor status goes to a critical state. Critical: A Critical message indicates actual or imminent loss of data or loss of function. Change the failed battery sensor. See the product knowledge of the last modified Dell OpenManage alert that caused the state change for additional details.When the issue has been resolved, the status changes to Success in the next polling cycle.SummaryThis message is a result of a state change and displays the status of the battery sensor:Success: The battery sensor has returned to a normal state. Warning: The battery sensor is reporting a warning state. Critical: The battery sensor has failed. CausesWarning: A Warning status may display if a battery sensor in the specified system is in a throttled state. Critical: A Critical status may display if a battery in the specified system has failed, is disabled, has a configuration error, or experienced a thermal trip. See the product knowledge of the last modified Dell OpenManage alert that caused the state change for additional details. ResolutionsPerform the following steps for the Warning and Critical messages: Warning: A Warning message indicates a possible future problem. Plan to replace the failed battery sensor, based on the impact to operations, if the battery sensor status goes to a critical state. Critical: A Critical message indicates actual or imminent loss of data or loss of function. Change the failed battery sensor. See the product knowledge of the last modified Dell OpenManage alert that caused the state change for additional details.The status changes to Success after the issue is resolved.SummaryThis message is a result of a state change and shows the status of the power supply sensor. The status can be one of the following three types:Success: If the status is success, the power supply sensor returned to a normal state. Warning: If the status is warning, the power supply sensor is reporting a warning state. Critical: If the status is critical, the power supply sensor detected a failure state. CausesWarning: The cause for a Warning status may be that a power supply sensor reading in the specified system has exceeded a user-defined warning threshold. Critical: The cause for a Critical status may be that a power supply sensor in the specified system has been disconnected, has failed, or has detected an error from which it cannot recover. Additional details are available in the product knowledge of the last modified Dell OpenManage alert that caused the state change.ResolutionsPerform the following steps for the Warning and Critical messages:Warning: A Warning message refers to an event that is not necessarily significant, but may indicate a possible future problem. Plan to proactively reconnect the unplugged power supply or change the failed power supply, based on the impact to operations, if the power supply sensor goes to a critical state. Critical: A Critical message refers to a significant event that indicates actual or imminent loss of data or loss of function. Reconnect the unplugged power supply or change the failed power supply. Additional details are available in the product knowledge of the last modified Dell OpenManage alert that caused the state change.When the issue has been resolved, the status changes to Success in the next polling cycle.SummaryThis message is a result of a state change and shows the status of the power supply sensor. The status can be one of the following three types:Success: If the status is success, the power supply sensor returned to a normal state. Warning: If the status is warning, the power supply sensor is reporting a warning state. Critical: If the status is critical, the power supply sensor detected a failure state. CausesWarning: The cause for a Warning status may be that a power supply sensor reading in the specified system has exceeded a user-defined warning threshold. Critical: The cause for a Critical status may be that a power supply sensor in the specified system has been disconnected, has failed, or has detected an error from which it cannot recover. Additional details are available in the product knowledge of the last modified Dell OpenManage alert that caused the state change.ResolutionsPerform the following steps for the Warning and Critical messages:Warning: A Warning message refers to an event that is not necessarily significant, but may indicate a possible future problem. Plan to proactively reconnect the unplugged power supply or change the failed power supply, based on the impact to operations, if the power supply sensor goes to a critical state. Critical: A Critical message refers to a significant event that indicates actual or imminent loss of data or loss of function. Reconnect the unplugged power supply or change the failed power supply. Additional details are available in the product knowledge of the last modified Dell OpenManage alert that caused the state change.When the issue has been resolved, the status changes to Success. SummaryThis message is a result of a state change and shows the status of the power supply sensor. The status can be one of the following three types:Success: If the status is success, the power supply sensor returned to a normal state. Warning: If the status is warning, the power supply sensor is reporting a warning state. Critical: If the status is critical, the power supply sensor detected a failure state. CausesWarning: The cause for a Warning status may be that a power supply sensor reading in the specified system has exceeded a user-defined warning threshold. Critical: The cause for a Critical status may be that a power supply sensor in the specified system has been disconnected, has failed, or has detected an error from which it cannot recover. Additional details are available in the product knowledge of the last modified Dell OpenManage alert that caused the state change.ResolutionsPerform the following steps for the Warning and Critical messages:Warning: A Warning message refers to an event that is not necessarily significant, but may indicate a possible future problem. Plan to proactively reconnect the unplugged power supply or change the failed power supply, based on the impact to operations, if the power supply sensor goes to a critical state. Critical: A Critical message refers to a significant event that indicates actual or imminent loss of data or loss of function. Reconnect the unplugged power supply or change the failed power supply. Additional details are available in the product knowledge of the last modified Dell OpenManage alert that caused the state change.When the issue has been resolved, the status changes to Success. SummaryThis message is a result of a state change and shows the status of the power supply sensor. The status can be one of the following three types:Success: If the status is success, the power supply sensor returned to a normal state. Warning: If the status is warning, the power supply sensor is reporting a warning state. Critical: If the status is critical, the power supply sensor detected a failure state. CausesWarning: The cause for a Warning status may be that a power supply sensor reading in the specified system has exceeded a user-defined warning threshold. Critical: The cause for a Critical status may be that a power supply sensor in the specified system has been disconnected, has failed, or has detected an error from which it cannot recover. Additional details are available in the product knowledge of the last modified Dell OpenManage alert that caused the state change.ResolutionsPerform the following steps for the Warning and Critical messages:Warning: A Warning message refers to an event that is not necessarily significant, but may indicate a possible future problem. Plan to proactively reconnect the unplugged power supply or change the failed power supply, based on the impact to operations, if the power supply sensor goes to a critical state. Critical: A Critical message refers to a significant event that indicates actual or imminent loss of data or loss of function. Reconnect the unplugged power supply or change the failed power supply. Additional details are available in the product knowledge of the last modified Dell OpenManage alert that caused the state change.When the issue has been resolved, the status changes to Success. SummaryShows the status of the memory sensor. The status can be one of the following three types:Success: If the status is success, the memory device status has returned to a normal value. Warning: If the status is warning, the memory device status is noncritical. Critical: If the status is critical, the memory device status is critical. CausesWarning: The cause for a Warning status may be that a memory device correction rate has exceeded an acceptable value. Critical: The cause for a Critical status may be that a memory device correction rate exceeded an acceptable value, a memory spare bank was activated, or a multibit ECC error has occurred. ResolutionsReplace the memory module identified in the message during the system’s next scheduled maintenance. Clear the memory error or the multibit ECC error. When the issue has been resolved, the status changes to Success in the next polling cycle.SummaryShows the status of the memory sensor. The status can be one of the following three types:Success: If the status is success, the memory device status has returned to a normal value. Warning: If the status is warning, the memory device status is noncritical. Critical: If the status is critical, the memory device status is critical. CausesWarning: The cause for a Warning status may be that a memory device correction rate has exceeded an acceptable value. Critical: The cause for a Critical status may be that a memory device correction rate exceeded an acceptable value, a memory spare bank was activated, or a multibit ECC error has occurred. ResolutionsReplace the memory module identified in the message during the system’s next scheduled maintenance. Clear the memory error or the multibit ECC error. When the issue has been resolved, the status changes to Success.SummaryThis message is a result of a state change and shows the status of the processor sensor. The status can be one of the following three types:Success: If the status is success, the processor sensor has returned to a normal state. Warning: If the status is warning, the processor sensor is reporting a warning state. Critical: If the status is critical, the processor sensor has failed. CausesWarning: The cause for a Warning status may be that a processor sensor in the specified system is in a throttled state. Critical: The cause for a Critical status may be that a processor sensor in the specified system has failed, is disabled, has a configuration error, or experienced a thermal trip. Additional details are available in the product knowledge of the last modified Dell OpenManage alert that caused the state change.ResolutionsPerform the following steps for the Warning and Critical messages:Warning: A Warning message refers to an event that is not necessarily significant, but may indicate a possible future problem. Plan to proactively replace the failed processor, based on the impact to operations, if the processor sensor goes to a critical state. Critical: A Critical message refers to a significant event that indicates actual or imminent loss of data or loss of function. Change the failed processor. Additional details are available in the product knowledge of the last modified Dell OpenManage alert that caused the state change.When the issue has been resolved, the status changes to Success in the next polling cycle.SummaryThis message is a result of a state change and shows the status of the processor sensor. The status can be one of the following three types:Success: If the status is success, the processor sensor has returned to a normal state. Warning: If the status is warning, the processor sensor is reporting a warning state. Critical: If the status is critical, the processor sensor has failed. CausesWarning: The cause for a Warning status may be that a processor sensor in the specified system is in a throttled state. Critical: The cause for a Critical status may be that a processor sensor in the specified system has failed, is disabled, has a configuration error, or experienced a thermal trip. Additional details are available in the product knowledge of the last modified Dell OpenManage alert that caused the state change.ResolutionsPerform the following steps for the Warning and Critical messages:Warning: A Warning message refers to an event that is not necessarily significant, but may indicate a possible future problem. Plan to proactively replace the failed processor, based on the impact to operations, if the processor sensor goes to a critical state. Critical: A Critical message refers to a significant event that indicates actual or imminent loss of data or loss of function. Change the failed processor. Additional details are available in the product knowledge of the last modified Dell OpenManage alert that caused the state change.When the issue has been resolved, the status changes to Success.SummaryThis message is a result of a state change and shows the status of the chassis intrusion sensor. The status can be one of the following three types:Success: If the status is success, the chassis intrusion returned to normal. Warning: If the status is warning, the chassis intrusion is in progress. Critical: If the status is critical, it may indicate one of the following: Chassis intrusion sensor has failed. Chassis intrusion sensor detected a nonrecoverable value. CausesWarning: The cause for a Warning status may be that a chassis intrusion sensor in the specified system has detected a system cover being opened while the system is still operating. Critical: The cause for a Critical status may indicate one of the following: A chassis intrusion sensor in the specified system detected that the system cover was opened while the system was operating. A chassis intrusion sensor in the specified system detected an error from which it cannot recover. Additional details are available in the product knowledge of the last modified Dell OpenManage alert that caused the state change.ResolutionsPerform the following steps for the Warning and Critical messages:Warning: A Warning message refers to an event that is not necessarily significant, but may indicate a possible future problem. Plan to proactively close the system cover, based on the impact to operations, if the chassis intrusion sensor goes to a critical state. Critical: A Critical message refers to a significant event that indicates actual or imminent loss of data or loss of function. Close the system cover. Additional details are available in the product knowledge of the last modified Dell OpenManage alert that caused the state change.When the issue has been resolved, the status changes to Success in the next polling cycle. SummaryThis message is a result of a state change and shows the status of the chassis intrusion sensor. The status can be one of the following three types:Success: If the status is success, the chassis intrusion returned to normal. Warning: If the status is warning, the chassis intrusion is in progress. Critical: If the status is critical, it may indicate one of the following: Chassis intrusion sensor has failed. Chassis intrusion sensor detected a nonrecoverable value. CausesWarning: The cause for a Warning status may be that a chassis intrusion sensor in the specified system has detected a system cover being opened while the system is still operating. Critical: The cause for a Critical state may indicate one of the following: A chassis intrusion sensor in the specified system detected that the system cover was opened while the system was operating. A chassis intrusion sensor in the specified system detected an error from which it cannot recover. Additional details are available in the product knowledge of the last modified Dell OpenManage alert that caused the state change.ResolutionsPerform the following steps for the Warning and Critical messages:Warning: A Warning message refers to an event that is not necessarily significant, but may indicate a possible future problem. Plan to proactively close the system cover, based on the impact to operations, if the chassis intrusion sensor goes to a critical state. Critical: A Critical message refers to a significant event that indicates actual or imminent loss of data or loss of function. Close the system cover. Additional details are available in the product knowledge of the last modified Dell OpenManage alert that caused the state change.When the issue has been resolved, the status changes to Success.SummaryThis message is a result of a state change and shows the status of the controller battery component. The status can be one of the following three types:Success: If the status is success, the controller battery component has returned to a normal state. Warning: A Warning message refers to an event that is not necessarily significant, but may indicate a possible future problem. If the status is warning, the controller battery component is reporting a warning state. Critical: A Critical message refers to a significant event that indicates actual or imminent loss of data or loss of function. If the status is critical, the controller battery component has detected a failure state. CausesWarning: The cause for a Warning status may be that a storage agent is reporting a warning state. Critical: The cause for a Critical status may be that a storage agent has detected a failure state. Additional details are available in the product knowledge of the last modified Dell OpenManage alert that caused the state change.ResolutionsThe resolution details are available in the product knowledge of the last modified Dell OpenManage alert that caused the state change.When the issue has been resolved, the status changes to Success.SummaryThis message is a result of a state change and shows the status of the storage virtual disk component. The status can be one of the following three types:Success: If the status is success, the storage virtual disk component has returned to a normal state. Warning: A Warning message refers to an event that is not necessarily significant, but may indicate a possible future problem. If the status is warning, the storage virtual disk component is reporting a warning state. Critical: A Critical message refers to a significant event that indicates actual or imminent loss of data or loss of function. If the status is critical, the storage virtual disk component has detected a failure state. CausesWarning: The cause for a Warning status may be that a storage agent is reporting a warning state. Critical: The cause for a Critical status may be that a storage agent has detected a failure state. Additional details are available in the product knowledge of the last modified Dell OpenManage alert that caused the state change.ResolutionsThe resolution details are available in the product knowledge of the last modified Dell OpenManage alert that caused the state change.When the issue has been resolved, the status changes to Success.SummaryThis message is a result of a state change and shows the status of the storage physical disk component. The status can be one of the following three types:Success: If the status is success, the storage physical disk component has returned to a normal state. Warning: A Warning message refers to an event that is not necessarily significant, but may indicate a possible future problem. If the status is warning, the storage physical disk component is reporting a warning state. Critical: A Critical message refers to a significant event that indicates actual or imminent loss of data or loss of function. If the status is critical, the storage physical disk component has detected a failure state. CausesWarning: The cause for a Warning status may be that a storage agent is reporting a warning state. Critical: The cause for a Critical status may be that a storage agent has detected a failure state. Additional details are available in the product knowledge of the last modified Dell OpenManage alert that caused the state change.ResolutionsThe resolution details are available in the product knowledge of the last modified Dell OpenManage alert that caused the state change.When the issue has been resolved, the status changes to Success.SummaryThis message is a result of a state change and shows the status of the storage physical disk component. The status can be one of the following three types:Success: If the status is success, the storage physical disk component has returned to a normal state. Warning: A Warning message refers to an event that is not necessarily significant, but may indicate a possible future problem. If the status is warning, the storage physical disk component is reporting a warning state. Critical: A Critical message refers to a significant event that indicates actual or imminent loss of data or loss of function. If the status is critical, the storage physical disk component has detected a failure state. CausesWarning: The cause for a Warning status may be that a storage agent is reporting a warning state. Critical: The cause for a Critical status may be that a storage agent has detected a failure state. Additional details are available in the product knowledge of the last modified Dell OpenManage alert that caused the state change.ResolutionsThe resolution details are available in the product knowledge of the last modified Dell OpenManage alert that caused the state change.When the issue has been resolved, the status changes to Success.SummaryThis message is a result of a state change and shows the status of the storage temperature component. The status can be one of the following three types:Success: If the status is success, the storage temperature component has returned to a normal state. Warning: A Warning message refers to an event that is not necessarily significant, but may indicate a possible future problem. If the status is warning, the storage temperature component is reporting a warning state. Critical: A Critical message refers to a significant event that indicates actual or imminent loss of data or loss of function. If the status is critical, the storage temperature component has detected a failure state. CausesWarning: The cause for a Warning status may be that a storage agent is reporting a warning state. Critical: The cause for a Critical status may be that a storage agent has detected a failure state. Additional details are available in the product knowledge of the last modified Dell OpenManage alert that caused the state change.ResolutionsThe resolution details are available in the product knowledge of the last modified Dell OpenManage alert that caused the state change.When the issue has been resolved, the status changes to Success.SummaryThis message is a result of a state change and shows the status of the storage fan component. The status can be one of the following three types:Success: If the status is success, the storage fan component has returned to a normal state. Warning: A Warning message refers to an event that is not necessarily significant, but may indicate a possible future problem. If the status is warning, the storage fan component is reporting a warning state. Critical: A Critical message refers to a significant event that indicates actual or imminent loss of data or loss of function. If the status is critical, the storage fan component has detected a failure state. CausesWarning: The cause for a Warning status may be that a storage agent is reporting a warning state. Critical: The cause for a Critical status may be that a storage agent has detected a failure state. Additional details are available in the product knowledge of the last modified Dell OpenManage alert that caused the state change.ResolutionsThe resolution details are available in the product knowledge of the last modified Dell OpenManage alert that caused the state change.When the issue has been resolved, the status changes to Success.SummaryThis message is a result of a state change and shows the status of the storage emm component. The status can be one of the following three types:Success: If the status is success, the storage emm component has returned to a normal state. Warning: A Warning message refers to an event that is not necessarily significant, but may indicate a possible future problem. If the status is warning, the storage emm component is reporting a warning state. Critical: A Critical message refers to a significant event that indicates actual or imminent loss of data or loss of function. If the status is critical, the storage emm component has detected a failure state. CausesWarning: The cause for a Warning status may be that a storage agent is reporting a warning state. Critical: The cause for a Critical status may be that a storage agent has detected a failure state. Additional details are available in the product knowledge of the last modified Dell OpenManage alert that caused the state change.ResolutionsThe resolution details are available in the product knowledge of the last modified Dell OpenManage alert that caused the state change.When the issue has been resolved, the status changes to Success.SummaryThis message is a result of a state change and shows the status of the storage power supply component. The status can be one of the following three types:Success: If the status is success, the storage power supply component has returned to a normal state. Warning: A Warning message refers to an event that is not necessarily significant, but may indicate a possible future problem. If the status is warning, the storage power supply component is reporting a warning state. Critical: A Critical message refers to a significant event that indicates actual or imminent loss of data or loss of function. If the status is critical, the storage power supply component has detected a failure state. CausesWarning: The cause for a Warning status may be that a storage agent is reporting a warning state. Critical: The cause for a Critical status may be that a storage agent has detected a failure state. Additional details are available in the product knowledge of the last modified Dell OpenManage alert that caused the state change.ResolutionsThe resolution details are available in the product knowledge of the last modified Dell OpenManage alert that caused the state change.When the issue has been resolved, the status changes to Success.SummaryThis message is a result of a state change and shows the status of the controller battery component. The status can be one of the following three types:Success: If the status is success, the controller battery component has returned to a normal state. Warning: A Warning message refers to an event that is not necessarily significant, but may indicate a possible future problem. If the status is warning, the controller battery component is reporting a warning state. Critical: A Critical message refers to a significant event that indicates actual or imminent loss of data or loss of function. If the status is critical, the controller battery component has detected a failure state. CausesWarning: The cause for a Warning status may be that a storage agent is reporting a warning state. Critical: The cause for a Critical status may be that a storage agent has detected a failure state. Additional details are available in the product knowledge of the last modified Dell OpenManage alert that caused the state change.ResolutionsThe resolution details are available in the product knowledge of the last modified Dell OpenManage alert that caused the state change.When the issue has been resolved, the status changes to Success.SummaryThis message is a result of a state change and shows the status of the storage virtual disk component. The status can be one of the following three types:Success: If the status is success, the storage virtual disk component has returned to a normal state. Warning: A Warning message refers to an event that is not necessarily significant, but may indicate a possible future problem. If the status is warning, the storage virtual disk component is reporting a warning state. Critical: A Critical message refers to a significant event that indicates actual or imminent loss of data or loss of function. If the status is critical, the storage virtual disk component has detected a failure state. CausesWarning: The cause for a Warning status may be that a storage agent is reporting a warning state. Critical: The cause for a Critical status may be that a storage agent has detected a failure state. Additional details are available in the product knowledge of the last modified Dell OpenManage alert that caused the state change.ResolutionsThe resolution details are available in the product knowledge of the last modified Dell OpenManage alert that caused the state change.When the issue has been resolved, the status changes to Success.SummaryThis message is a result of a state change and shows the status of the storage physical disk component. The status can be one of the following three types:Success: If the status is success, the storage physical disk component has returned to a normal state. Warning: A Warning message refers to an event that is not necessarily significant, but may indicate a possible future problem. If the status is warning, the storage physical disk component is reporting a warning state. Critical: A Critical message refers to a significant event that indicates actual or imminent loss of data or loss of function. If the status is critical, the storage physical disk component has detected a failure state. CausesWarning: The cause for a Warning status may be that a storage agent is reporting a warning state. Critical: The cause for a Critical status may be that a storage agent has detected a failure state. Additional details are available in the product knowledge of the last modified Dell OpenManage alert that caused the state change.ResolutionsThe resolution details are available in the product knowledge of the last modified Dell OpenManage alert that caused the state change.When the issue has been resolved, the status changes to Success.SummaryThis message is a result of a state change and shows the status of the storage physical disk component. The status can be one of the following three types:Success: If the status is success, the storage physical disk component has returned to a normal state. Warning: A Warning message refers to an event that is not necessarily significant, but may indicate a possible future problem. If the status is warning, the storage physical disk component is reporting a warning state. Critical: A Critical message refers to a significant event that indicates actual or imminent loss of data or loss of function. If the status is critical, the storage physical disk component has detected a failure state. CausesWarning: The cause for a Warning status may be that a storage agent is reporting a warning state. Critical: The cause for a Critical status may be that a storage agent has detected a failure state. Additional details are available in the product knowledge of the last modified Dell OpenManage alert that caused the state change.ResolutionsThe resolution details are available in the product knowledge of the last modified Dell OpenManage alert that caused the state change.When the issue has been resolved, the status changes to Success.SummaryThis message is a result of a state change and shows the status of the storage temperature component. The status can be one of the following three types:Success: If the status is success, the storage temperature component has returned to a normal state. Warning: A Warning message refers to an event that is not necessarily significant, but may indicate a possible future problem. If the status is warning, the storage temperature component is reporting a warning state. Critical: A Critical message refers to a significant event that indicates actual or imminent loss of data or loss of function. If the status is critical, the storage temperature component has detected a failure state. CausesWarning: The cause for a Warning status may be that a storage agent is reporting a warning state. Critical: The cause for a Critical status may be that a storage agent has detected a failure state. Additional details are available in the product knowledge of the last modified Dell OpenManage alert that caused the state change.ResolutionsThe resolution details are available in the product knowledge of the last modified Dell OpenManage alert that caused the state change.When the issue has been resolved, the status changes to Success.SummaryThis message is a result of a state change and shows the status of the storage fan component. The status can be one of the following three types:Success: If the status is success, the storage fan component has returned to a normal state. Warning: A Warning message refers to an event that is not necessarily significant, but may indicate a possible future problem. If the status is warning, the storage fan component is reporting a warning state. Critical: A Critical message refers to a significant event that indicates actual or imminent loss of data or loss of function. If the status is critical, the storage fan component has detected a failure state. CausesWarning: The cause for a Warning status may be that a storage agent is reporting a warning state. Critical: The cause for a Critical status may be that a storage agent has detected a failure state. Additional details are available in the product knowledge of the last modified Dell OpenManage alert that caused the state change.ResolutionsThe resolution details are available in the product knowledge of the last modified Dell OpenManage alert that caused the state change.When the issue has been resolved, the status changes to Success.SummaryThis message is a result of a state change and shows the status of the storage emm component. The status can be one of the following three types:Success: If the status is success, the storage emm component has returned to a normal state. Warning: A Warning message refers to an event that is not necessarily significant, but may indicate a possible future problem. If the status is warning, the storage emm component is reporting a warning state. Critical: A Critical message refers to a significant event that indicates actual or imminent loss of data or loss of function. If the status is critical, the storage emm component has detected a failure state. CausesWarning: The cause for a Warning status may be that a storage agent is reporting a warning state. Critical: The cause for a Critical status may be that a storage agent has detected a failure state. Additional details are available in the product knowledge of the last modified Dell OpenManage alert that caused the state change.ResolutionsThe resolution details are available in the product knowledge of the last modified Dell OpenManage alert that caused the state change.When the issue has been resolved, the status changes to Success.SummaryThis message is a result of a state change and shows the status of the storage power supply component. The status can be one of the following three types:Success: If the status is success, the storage power supply component has returned to a normal state. Warning: A Warning message refers to an event that is not necessarily significant, but may indicate a possible future problem. If the status is warning, the storage power supply component is reporting a warning state. Critical: A Critical message refers to a significant event that indicates actual or imminent loss of data or loss of function. If the status is critical, the storage power supply component has detected a failure state. CausesWarning: The cause for a Warning status may be that a storage agent is reporting a warning state. Critical: The cause for a Critical status may be that a storage agent has detected a failure state. Additional details are available in the product knowledge of the last modified Dell OpenManage alert that caused the state change.ResolutionsThe resolution details are available in the product knowledge of the last modified Dell OpenManage alert that caused the state change.When the issue has been resolved, the status changes to Success.SummaryThis message is a result of a state change and shows the status of the printer. The status can be one of the following three types:Success: If the status is success, the printer has returned to a normal state. Warning: A Warning message refers to an event that is not necessarily significant, but may indicate a possible future problem. If the status is warning, the printer is reporting a warning state. Critical: A Critical message refers to a significant event that indicates actual or imminent loss of data or loss of function. If the status is critical, the printer has detected a failure state. CausesWarning: The cause for a Warning status may be that a printer agent is reporting a warning state.Critical: The cause for a Critical status may be that a printer agent has detected a failure state. ResolutionsLaunch the printer console to troubleshoot the problem. When the issue has been resolved, the status changes to Success in the next polling cycle.