functions/Get-Sensor.ps1

 <#
    .SYNOPSIS
    Get sensor details.
     
    .DESCRIPTION
    List all sensor for a specific sensorhub or get details for a specific sensor.
     
    .PARAMETER Filter
    You can filter the sensors based on the name of the sensor.
 
    .PARAMETER SensorhubId
    The id of the senorhub for wich you want to list the sensors.
 
    .PARAMETER SenorId
    The id of a specifc senor. Only this sensor will be show.
     
    .PARAMETER AuthToken
    Either a session or an API key. If no AuthToken is provided the global Server-Eye session will be used if available.
#>

function Get-Sensor {
    [CmdletBinding(DefaultParameterSetName="bySensorhub")]
    Param(
        [Parameter(Mandatory=$false,ParameterSetName="bySensorhub",Position=0)]
        [string]$Filter,
        [parameter(ValueFromPipelineByPropertyName,ParameterSetName="bySensorhub")]
        $SensorhubId,
        [parameter(ValueFromPipelineByPropertyName,ParameterSetName="bySensor")]
        $SensorId,
        [Parameter(Mandatory=$false,ParameterSetName="bySensor")]
        [Parameter(Mandatory=$false,ParameterSetName="bySensorhub")]
        $AuthToken
    )

    Begin{
        $AuthToken = Test-SEAuth -AuthToken $AuthToken
        cacheSensorTypes -auth $AuthToken
    }
    
    Process {
        if ($SensorhubId) {
            getSensorBySensorhub -sensorhubId $SensorhubId -filter $Filter -auth $AuthToken
        } elseif ($SensorId) {
            getSensorById -sensorId $SensorId -auth $AuthToken
        } else {
            Write-Error "Please provide a SensorhubId or a SensorId."
        }
    }

    End {

    }
}

function cacheSensorTypes ($auth) {
    $Global:SensorTypes = @{}

    $types = Get-SeApiAgentTypeList -AuthToken $auth
    foreach ($type in $types) {
        $Global:SensorTypes.add($type.agentType, $type)
    }

    $avType = New-Object System.Object
    $avType | Add-Member -type NoteProperty -name agentType -value "72AC0BFD-0B0C-450C-92EB-354334B4DAAB"
    $avType | Add-Member -type NoteProperty -name defaultName -value "Managed Antivirus"
    $Global:SensorTypes.add($avType.agentType, $avType)

    $pmType = New-Object System.Object
    $pmType | Add-Member -type NoteProperty -name agentType -value "9537CBB5-9023-4248-AFF3-F1ACCC0CE7A4"
    $pmType | Add-Member -type NoteProperty -name defaultName -value "Patchmanagement"
    $Global:SensorTypes.add($pmType.agentType, $pmType)

    $suType = New-Object System.Object
    $suType | Add-Member -type NoteProperty -name agentType -value "ECD47FE1-36DF-4F6F-976D-AC26BA9BFB7C"
    $suType | Add-Member -type NoteProperty -name defaultName -value "Smart Updates"
    $Global:SensorTypes.add($suType.agentType, $suType)
    
}

function getSensorBySensorhub ($sensorhubId, $filter, $auth) {
    $agents = Get-SeApiContainerAgentList -AuthToken $auth -CId $sensorhubId 
    $sensorhub = Get-SESensorhub -SensorhubId $sensorhubId -AuthToken $auth
    foreach ($sensor in $agents) {
        if ((-not $filter) -or ($sensor.name -like $filter) -or ($sensor.subtype -like $filter)) {
            formatSensor -sensor $sensor -auth $auth -sensorhub $sensorhub
        }
    }


}

function getSensorById ($sensorId, $auth) {
    $sensor = Get-SeApiAgent -AId $sensorId -AuthToken $auth
    $sensorhub = Get-SESensorhub -SensorhubId $sensor.parentId -AuthToken $auth 
    $state = Get-SeApiAgentStateList -AId $sensorId -AuthToken $auth -IncludeMessage "true" -Format plain
    $type = $Global:SensorTypes.Get_Item($sensor.type)
    $notification = Get-SeApiMyNodesList -Filter agent -AuthToken $auth | Where-Object {$_.id -eq $sensor.aId}
    
    [PSCustomObject]@{

        Name = $sensor.name
        SensorType = $type.defaultName
        SensorTypeID = $type.agentType
        SensorId = $sensor.aId
        Interval = $sensor.interval
        Error = $state.state -or $state.forceFailed
        HasNotification = $notification.hasNotification
        Sensorhub = $sensorhub.name
        'OCC-Connector' = $sensorhub.'OCC-Connector'
        Customer = $sensorhub.customer
        Message = $state.message
    }

    
}

function formatSensor($sensor, $sensorhub, $auth,$notification) {
    $sensorDetails = Get-SeApiAgent -AuthToken $auth -AId $sensor.id
    $type = $Global:SensorTypes.Get_Item($sensorDetails.type)
    $notification = Get-SeApiMyNodesList -Filter agent -AuthToken $auth | Where-Object {$_.id -eq $sensor.Id}
    [PSCustomObject]@{
        Name = $sensor.name
        SensorType = $type.defaultName
        SensorTypeID = $type.agentType
        SensorId = $sensor.Id
        Interval = $sensorDetails.interval
        Error = $sensor.state -or $sensor.forceFailed
        HasNotification = $notification.hasNotification
        Sensorhub = $sensorhub.name
        'OCC-Connector' = $sensorhub.'OCC-Connector'
        Customer = $sensorhub.customer
        Message = $sensor.message
    }
}
# SIG # Begin signature block
# MIIlRQYJKoZIhvcNAQcCoIIlNjCCJTICAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB
# gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR
# AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQUu8MGdYoBbDzt/0QnKEOlDXYl
# /9Wggh8uMIIFVTCCBD2gAwIBAgIQNi6d2QZSadlgoaqpVGQMODANBgkqhkiG9w0B
# AQsFADB8MQswCQYDVQQGEwJHQjEbMBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVy
# MRAwDgYDVQQHEwdTYWxmb3JkMRgwFgYDVQQKEw9TZWN0aWdvIExpbWl0ZWQxJDAi
# BgNVBAMTG1NlY3RpZ28gUlNBIENvZGUgU2lnbmluZyBDQTAeFw0xOTAzMTQwMDAw
# MDBaFw0yMTAzMTMyMzU5NTlaMIGnMQswCQYDVQQGEwJERTEOMAwGA1UEEQwFNjY1
# NzExETAPBgNVBAgMCFNhYXJsYW5kMRIwEAYDVQQHDAlFcHBlbGJvcm4xGTAXBgNV
# BAkMEEtvc3NtYW5zdHJhc3NlIDcxIjAgBgNVBAoMGUtyw6RtZXIgSVQgU29sdXRp
# b25zIEdtYkgxIjAgBgNVBAMMGUtyw6RtZXIgSVQgU29sdXRpb25zIEdtYkgwggEi
# MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCz5/2ukRz5+MhkBio6esyRFg6h
# W1ehLJre46pO2p19epAe6/gCnjQlMXIAM2Ydpsnt8Z8LEUKrVrGGODQvLQ6fsrNF
# 4FDPhj4zc5H5wHI/SOMBu1u6DNtWvJKJ/UBfnkk9CbrRzkzGeSVZ81TiXT+J43+V
# NhXtJ9jX19tcLE3VnyaCQFn4psVwF6zfQPYOyhP+7iRvSgzEGM0vz5oi9Sp4Uqbw
# sus2e4oZ+fT74iCFj9fYXeP/o1fKOiV2iFbk4cVMBIw1hNCNkW9d88C7yivtH4E5
# 6mYYXl5SOk2k4KOACaPjpEI4IZfcoJ/yLKFjzyzyg2u90poEJ7SZinNScFAJAgMB
# AAGjggGlMIIBoTAfBgNVHSMEGDAWgBQO4TqoUzox1Yq+wbutZxoDha00DjAdBgNV
# HQ4EFgQUkgffFDW7uWc8B0iUnOE4laGEiJcwDgYDVR0PAQH/BAQDAgeAMAwGA1Ud
# EwEB/wQCMAAwEwYDVR0lBAwwCgYIKwYBBQUHAwMwEQYJYIZIAYb4QgEBBAQDAgQQ
# MEAGA1UdIAQ5MDcwNQYMKwYBBAGyMQECAQMCMCUwIwYIKwYBBQUHAgEWF2h0dHBz
# Oi8vc2VjdGlnby5jb20vQ1BTMEMGA1UdHwQ8MDowOKA2oDSGMmh0dHA6Ly9jcmwu
# c2VjdGlnby5jb20vU2VjdGlnb1JTQUNvZGVTaWduaW5nQ0EuY3JsMHMGCCsGAQUF
# BwEBBGcwZTA+BggrBgEFBQcwAoYyaHR0cDovL2NydC5zZWN0aWdvLmNvbS9TZWN0
# aWdvUlNBQ29kZVNpZ25pbmdDQS5jcnQwIwYIKwYBBQUHMAGGF2h0dHA6Ly9vY3Nw
# LnNlY3RpZ28uY29tMB0GA1UdEQQWMBSBEmluZm9Aa3JhZW1lci1pdC5kZTANBgkq
# hkiG9w0BAQsFAAOCAQEABItcE+38EnSo1FiIAtLUfD1pLKcYEjGDoIlsgWuruo1+
# Zgh0+di0uubTvL3p5JKvysy4bydzKyxLiAbU+2M2c6t1NIaZ6yyvxp3Y1RQf72II
# cDqrIprzmfbEKm2VW1wAgqggl3wzsI9hdFNJxIc6/DmB3Z+U63g8aV4yheqifoXE
# tTKLy6wr4OmSMnxp133BOOJ+SwshgyOAkWEOS7I0zz6w7ojTMOizwBP7ExUYPc+N
# KiqbNthrZ3MitfVn2BdAQrq738yd7AZvKKWU8MJjQT5rNY131V4L873FE7ecUi82
# 1egW8R1y7+Y934/RIBRMKFD+KqQG98QMyG6zw92RbDCCBd4wggPGoAMCAQICEAH9
# bTD8o8pRqBu8ZA41Ay0wDQYJKoZIhvcNAQEMBQAwgYgxCzAJBgNVBAYTAlVTMRMw
# EQYDVQQIEwpOZXcgSmVyc2V5MRQwEgYDVQQHEwtKZXJzZXkgQ2l0eTEeMBwGA1UE
# ChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMS4wLAYDVQQDEyVVU0VSVHJ1c3QgUlNB
# IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTEwMDIwMTAwMDAwMFoXDTM4MDEx
# ODIzNTk1OVowgYgxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpOZXcgSmVyc2V5MRQw
# EgYDVQQHEwtKZXJzZXkgQ2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3
# b3JrMS4wLAYDVQQDEyVVU0VSVHJ1c3QgUlNBIENlcnRpZmljYXRpb24gQXV0aG9y
# aXR5MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAgBJlFzYOw9sIs9Cs
# Vw127c0n00ytUINh4qogTQktZAnczomfzD2p7PbPwdzx07HWezcoEStH2jnGvDoZ
# tF+mvX2do2NCtnbyqTsrkfjib9DsFiCQCT7i6HTJGLSR1GJk23+jBvGIGGqQIjy8
# /hPwhxR79uQfjtTkUcYRZ0YIUcuGFFQ/vDP+fmyc/xadGL1RjjWmp2bIcmfbIWax
# 1Jt4A8BQOujM8Ny8nkz+rwWWNR9XWrf/zvk9tyy29lTdyOcSOk2uTIq3XJq0tyA9
# yn8iNK5+O2hmAUTnAU5GU5szYPeUvlM3kHND8zLDU+/bqv50TmnHa4xgk97Exwzf
# 4TKuzJM7UXiVZ4vuPVb+DNBpDxsP8yUmazNt925H+nND5X4OpWaxKXwyhGNVicQN
# wZNUMBkTrNN9N6frXTpsNVzbQdcS2qlJC9/YgIoJk2KOtWbPJYjNhLixP6Q5D9kC
# nusSTJV882sFqV4Wg8y4Z+LoE53MW4LTTLPtW//e5XOsIzstAL81VXQJSdhJWBp/
# kjbmUZIO8yZ9HE0XvMnsQybQv0FfQKlERPSZ51eHnlAfV1SoPv10Yy+xUGUJ5lhC
# LkMaTLTwJUdZ+gQek9QmRkpQgbLevni3/GcV4clXhB4PY9bpYrrWX1Uu6lzGKAgE
# JTm4Diup8kyXHAc/DVL17e8vgg8CAwEAAaNCMEAwHQYDVR0OBBYEFFN5v1qqK0rP
# VIDh2JvAnfKyA2bLMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0G
# CSqGSIb3DQEBDAUAA4ICAQBc1HwNz/cBfUGZZQxzxVKfy/jPmQZ/G9pDFZ+eAlVX
# lhTxUjwnh5Qo7R86ATeidvxTUMCEm8ZrTrqMIU+ijlVikfNpFdi8iOPEqgv976jp
# S1UqBiBtVXgpGe5fMFxLJBFV/ySabl4qK+4LTZ9/9wE4lBSVQwcJ+2Cp7hyrEoyg
# ml6nmGpZbYs/CPvI0UWvGBVkkBIPcyguxeIkTvxY7PD0Rf4is+svjtLZRWEFwZdv
# qHZyj4uMNq+/DQXOcY3mpm8fbKZxYsXY0INyDPFnEYkMnBNMcjTfvNVx36px3eG5
# bIw8El1l2r1XErZDa//l3k1mEVHPma7sF7bocZGM3kn+3TVxohUnlBzPYeMmu2+j
# ZyUhXebdHQsuaBs7gq/sg2eF1JhRdLG5mYCJ/394GVx5SmAukkCuTDcqLMnHYsgO
# Xfc2W8rgJSUBtN0aB5x3AD/Q3NXsPdT6uz/MhdZvf6kt37kC9/WXmrU12sNnsIdK
# qSieI47/XCdr4bBP8wfuAC7UWYfLUkGV6vRH1+5kQVV8jVkCld1incK57loodISl
# m7eQxwwH3/WJNnQy1ijBsLAL4JxMwxzW/ONptUdGgS+igqvTY0RwxI3/LTO6rY97
# tXCIrj4Zz0Ao2PzIkLtdmSL1UuZYxR+IMUPuiB3Xxo48Q2odpxjefT0W8WL5ypCo
# /TCCBfUwggPdoAMCAQICEB2iSDBvmyYY0ILgln0z02owDQYJKoZIhvcNAQEMBQAw
# gYgxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpOZXcgSmVyc2V5MRQwEgYDVQQHEwtK
# ZXJzZXkgQ2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMS4wLAYD
# VQQDEyVVU0VSVHJ1c3QgUlNBIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTE4
# MTEwMjAwMDAwMFoXDTMwMTIzMTIzNTk1OVowfDELMAkGA1UEBhMCR0IxGzAZBgNV
# BAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEYMBYGA1UE
# ChMPU2VjdGlnbyBMaW1pdGVkMSQwIgYDVQQDExtTZWN0aWdvIFJTQSBDb2RlIFNp
# Z25pbmcgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCGIo0yhXoY
# n0nwli9jCB4t3HyfFM/jJrYlZilAhlRGdDFixRDtsocnppnLlTDAVvWkdcapDlBi
# pVGREGrgS2Ku/fD4GKyn/+4uMyD6DBmJqGx7rQDDYaHcaWVtH24nlteXUYam9Cfl
# fGqLlR5bYNV+1xaSnAAvaPeX7Wpyvjg7Y96Pv25MQV0SIAhZ6DnNj9LWzwa0VwW2
# TqE+V2sfmLzEYtYbC43HZhtKn52BxHJAteJf7wtF/6POF6YtVbC3sLxUap28jVZT
# xvC6eVBJLPcDuf4vZTXyIuosB69G2flGHNyMfHEo8/6nxhTdVZFuihEN3wYklX0P
# p6F8OtqGNWHTAgMBAAGjggFkMIIBYDAfBgNVHSMEGDAWgBRTeb9aqitKz1SA4dib
# wJ3ysgNmyzAdBgNVHQ4EFgQUDuE6qFM6MdWKvsG7rWcaA4WtNA4wDgYDVR0PAQH/
# BAQDAgGGMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0lBBYwFAYIKwYBBQUHAwMG
# CCsGAQUFBwMIMBEGA1UdIAQKMAgwBgYEVR0gADBQBgNVHR8ESTBHMEWgQ6BBhj9o
# dHRwOi8vY3JsLnVzZXJ0cnVzdC5jb20vVVNFUlRydXN0UlNBQ2VydGlmaWNhdGlv
# bkF1dGhvcml0eS5jcmwwdgYIKwYBBQUHAQEEajBoMD8GCCsGAQUFBzAChjNodHRw
# Oi8vY3J0LnVzZXJ0cnVzdC5jb20vVVNFUlRydXN0UlNBQWRkVHJ1c3RDQS5jcnQw
# JQYIKwYBBQUHMAGGGWh0dHA6Ly9vY3NwLnVzZXJ0cnVzdC5jb20wDQYJKoZIhvcN
# AQEMBQADggIBAE1jUO1HNEphpNveaiqMm/EAAB4dYns61zLC9rPgY7P7YQCImhtt
# EAcET7646ol4IusPRuzzRl5ARokS9At3WpwqQTr81vTr5/cVlTPDoYMot94v5JT3
# hTODLUpASL+awk9KsY8k9LOBN9O3ZLCmI2pZaFJCX/8E6+F0ZXkI9amT3mtxQJmW
# unjxucjiwwgWsatjWsgVgG10Xkp1fqW4w2y1z99KeYdcx0BNYzX2MNPPtQoOCwR/
# oEuuu6Ol0IQAkz5TXTSlADVpbL6fICUQDRn7UJBhvjmPeo5N9p8OHv4HURJmgyYZ
# SJXOSsnBf/M6BZv5b9+If8AjntIeQ3pFMcGcTanwWbJZGehqjSkEAnd8S0vNcL46
# slVaeD68u28DECV3FTSK+TbMQ5Lkuk/xYpMoJVcp+1EZx6ElQGqEV8aynbG8HAra
# fGd+fS7pKEwYfsR7MUFxmksp7As9V1DSyt39ngVR5UR43QHesXWYDVQk/fBO4+L4
# g71yuss9Ou7wXheSaG3IYfmm8SoKC6W59J7umDIFhZ7r+YMp08Ysfb06dy6LN0Kg
# aoLtO0qqlBCk4Q34F8W2WnkzGJLjtXX4oemOCiUe5B7xn1qHI/+fpFGe+zmAEc3b
# tcSnqIBv5VPU4OOiwtJbGvoyJi1qV3AcPKRYLqPzW0sH3DJZ84enGm1YMIIG7DCC
# BNSgAwIBAgIQMA9vrN1mmHR8qUY2p3gtuTANBgkqhkiG9w0BAQwFADCBiDELMAkG
# A1UEBhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBD
# aXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVT
# RVJUcnVzdCBSU0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTkwNTAyMDAw
# MDAwWhcNMzgwMTE4MjM1OTU5WjB9MQswCQYDVQQGEwJHQjEbMBkGA1UECBMSR3Jl
# YXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRgwFgYDVQQKEw9TZWN0
# aWdvIExpbWl0ZWQxJTAjBgNVBAMTHFNlY3RpZ28gUlNBIFRpbWUgU3RhbXBpbmcg
# Q0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDIGwGv2Sx+iJl9AZg/
# IJC9nIAhVJO5z6A+U++zWsB21hoEpc5Hg7XrxMxJNMvzRWW5+adkFiYJ+9UyUnku
# yWPCE5u2hj8BBZJmbyGr1XEQeYf0RirNxFrJ29ddSU1yVg/cyeNTmDoqHvzOWEnT
# v/M5u7mkI0Ks0BXDf56iXNc48RaycNOjxN+zxXKsLgp3/A2UUrf8H5VzJD0BKLwP
# DU+zkQGObp0ndVXRFzs0IXuXAZSvf4DP0REKV4TJf1bgvUacgr6Unb+0ILBgfrhN
# 9Q0/29DqhYyKVnHRLZRMyIw80xSinL0m/9NTIMdgaZtYClT0Bef9Maz5yIUXx7gp
# GaQpL0bj3duRX58/Nj4OMGcrRrc1r5a+2kxgzKi7nw0U1BjEMJh0giHPYla1IXMS
# Hv2qyghYh3ekFesZVf/QOVQtJu5FGjpvzdeE8NfwKMVPZIMC1Pvi3vG8Aij0bdon
# igbSlofe6GsO8Ft96XZpkyAcSpcsdxkrk5WYnJee647BeFbGRCXfBhKaBi2fA179
# g6JTZ8qx+o2hZMmIklnLqEbAyfKm/31X2xJ2+opBJNQb/HKlFKLUrUMcpEmLQTkU
# Ax4p+hulIq6lw02C0I3aa7fb9xhAV3PwcaP7Sn1FNsH3jYL6uckNU4B9+rY5WDLv
# bxhQiddPnTO9GrWdod6VQXqngwIDAQABo4IBWjCCAVYwHwYDVR0jBBgwFoAUU3m/
# WqorSs9UgOHYm8Cd8rIDZsswHQYDVR0OBBYEFBqh+GEZIA/DQXdFKI7RNV8GEgRV
# MA4GA1UdDwEB/wQEAwIBhjASBgNVHRMBAf8ECDAGAQH/AgEAMBMGA1UdJQQMMAoG
# CCsGAQUFBwMIMBEGA1UdIAQKMAgwBgYEVR0gADBQBgNVHR8ESTBHMEWgQ6BBhj9o
# dHRwOi8vY3JsLnVzZXJ0cnVzdC5jb20vVVNFUlRydXN0UlNBQ2VydGlmaWNhdGlv
# bkF1dGhvcml0eS5jcmwwdgYIKwYBBQUHAQEEajBoMD8GCCsGAQUFBzAChjNodHRw
# Oi8vY3J0LnVzZXJ0cnVzdC5jb20vVVNFUlRydXN0UlNBQWRkVHJ1c3RDQS5jcnQw
# JQYIKwYBBQUHMAGGGWh0dHA6Ly9vY3NwLnVzZXJ0cnVzdC5jb20wDQYJKoZIhvcN
# AQEMBQADggIBAG1UgaUzXRbhtVOBkXXfA3oyCy0lhBGysNsqfSoF9bw7J/RaoLlJ
# WZApbGHLtVDb4n35nwDvQMOt0+LkVvlYQc/xQuUQff+wdB+PxlwJ+TNe6qAcJlhc
# 87QRD9XVw+K81Vh4v0h24URnbY+wQxAPjeT5OGK/EwHFhaNMxcyyUzCVpNb0llYI
# uM1cfwGWvnJSajtCN3wWeDmTk5SbsdyybUFtZ83Jb5A9f0VywRsj1sJVhGbks8Vm
# Bvbz1kteraMrQoohkv6ob1olcGKBc2NeoLvY3NdK0z2vgwY4Eh0khy3k/ALWPncE
# vAQ2ted3y5wujSMYuaPCRx3wXdahc1cFaJqnyTdlHb7qvNhCg0MFpYumCf/RoZSm
# Tqo9CfUFbLfSZFrYKiLCS53xOV5M3kg9mzSWmglfjv33sVKRzj+J9hyhtal1H3G/
# W0NdZT1QgW6r8NDT/LKzH7aZlib0PHmLXGTMze4nmuWgwAxyh8FuTVrTHurwROYy
# bxzrF06Uw3hlIDsPQaof6aFBnf6xuKBlKjTg3qj5PObBMLvAoGMs/FwWAKjQxH/q
# EZ0eBsambTJdtDgJK0kHqv3sMNrxpy/Pt/360KOE2See+wFmd7lWEOEgbsausfm2
# usg1XTN2jvF8IAwqd661ogKGuinutFoAsYyr4/kKyVRd1LlqdJ69SK6YMIIHBjCC
# BO6gAwIBAgIQPRo1cjAVgmMw0BNxfoJBCDANBgkqhkiG9w0BAQwFADB9MQswCQYD
# VQQGEwJHQjEbMBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdT
# YWxmb3JkMRgwFgYDVQQKEw9TZWN0aWdvIExpbWl0ZWQxJTAjBgNVBAMTHFNlY3Rp
# Z28gUlNBIFRpbWUgU3RhbXBpbmcgQ0EwHhcNMTkwNTAyMDAwMDAwWhcNMzAwODAx
# MjM1OTU5WjCBhDELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hl
# c3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEYMBYGA1UECgwPU2VjdGlnbyBMaW1pdGVk
# MSwwKgYDVQQDDCNTZWN0aWdvIFJTQSBUaW1lIFN0YW1waW5nIFNpZ25lciAjMTCC
# AiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMtRUP9W/vx4Y3ABk1qeGPQ7
# U/YHryFs9aIPfR1wLYR0SIucipUFPVmE+ZGAeVEs2Yq3wQuaugqKzWZPA4sBuzDK
# q73bwE8SXvwKzOJFsAE4irtN59QcVJjtOVjPW8IvRZgxCvk1OLgxLm20Hjly4bgq
# vp+MjBqlRq4LK0yZ/ixL/Ci5IjpmF9CqVoohwPOWJLTQhSZruvBvZJh5pq29XNhT
# aysK1nKKhUbjDRgG2sZ7QVY2mxU+8WoRoPdm9RjQgFVjh2hm6w55VYJco+1JuHGG
# npM3sGuj6mJso66W6Ln9i6vG9llbADxXIBgtcAOnnO+S63mhx13sfLSPS9/rXfyj
# IN2SOOVqUTprhZxMoJgIaVsG5yoZ0JWTiztrigUJKdjW2tvjcvpcSi97FVaGMr9/
# BQmdLSrPUOHmYSDbxwaAXE4URr6uV3Giqmwwkxx+d8sG6VfNkfXVM3Ic4drKbuvz
# D+x5W7snnuge/i/yu3/p5dBn67gNfKQrWQOLle0iKM36LDvHFhGv49axUGdpxY71
# edCt/4fM+H+q+aLtYfjIjWnasfRRketnV9FkEetkywO9SVU6RUMYLCVs0S8MLW/1
# QTUkoPJjWRZf2aTpLE7buzESxm34W24D3MsVjxuNcuzbDxWQ1hJO7uIAMSWTNW9q
# W6USY0ABirlpiDqIuA8ZAgMBAAGjggF4MIIBdDAfBgNVHSMEGDAWgBQaofhhGSAP
# w0F3RSiO0TVfBhIEVTAdBgNVHQ4EFgQUb02GB9gyJ54sKdLQEwOAgd0FgykwDgYD
# VR0PAQH/BAQDAgbAMAwGA1UdEwEB/wQCMAAwFgYDVR0lAQH/BAwwCgYIKwYBBQUH
# AwgwQAYDVR0gBDkwNzA1BgwrBgEEAbIxAQIBAwgwJTAjBggrBgEFBQcCARYXaHR0
# cHM6Ly9zZWN0aWdvLmNvbS9DUFMwRAYDVR0fBD0wOzA5oDegNYYzaHR0cDovL2Ny
# bC5zZWN0aWdvLmNvbS9TZWN0aWdvUlNBVGltZVN0YW1waW5nQ0EuY3JsMHQGCCsG
# AQUFBwEBBGgwZjA/BggrBgEFBQcwAoYzaHR0cDovL2NydC5zZWN0aWdvLmNvbS9T
# ZWN0aWdvUlNBVGltZVN0YW1waW5nQ0EuY3J0MCMGCCsGAQUFBzABhhdodHRwOi8v
# b2NzcC5zZWN0aWdvLmNvbTANBgkqhkiG9w0BAQwFAAOCAgEAwGjts9jUUJvv03XL
# Dzv3JNN6N0WNLO8W+1GpLB+1JbWKn10LwhsgdI1mDzbLqvY2DQ9+j0tKdENlrA0q
# 9grta23FCTjtABv45dymCkAFR++Eygm8Q2aDv5/t24490UFksXACLQNXWxhvHCzL
# HrIA6LoJL1uBBDW5qWNtjgjFGNHhIaz5EgoUwBLbfiWdrB0QwFqlg9IfGmZV/Jsq
# 4uw3V47l35Yw+MCTC0MY+QJvqVGvuFcK8xwHaTmPN5xt15GupS5J6Ures9CMvzmQ
# DcCBzvAqBzoMpi1R0nLzU8b5ve/vDGlJd58sVsTpoQg9B67FHtaEIse8fUMbWDhi
# TtEFJYTFQvgfL/bb+quMVOxFimwSTTBaUuWkFwki5u9v9V+GQ9+hLb1KRpKggZYs
# YZd/QG/YP4w1WqvRxqA7hWZUgO8fGvXxm7ChJ32y5wvP9i2cWBOUqYb8RVKiKG1/
# dA9SkUl66RL4qTuwkv19kRTpW21IlPLIlu4FOLPF7DA/4QcgBLHYi7z9sz5v8gJT
# BvSg7cmacqOXXwD7y2PQ6M10/XXJ1DZFunsSWXLt5/J6UAB4+EOaRtjfv1TUXrHH
# 0bwbg/Qr5wvoR8hTnswarPb6inVTbCCFqdW4arokjoorCJGfNwQc9m+i3TSqkf/G
# FS4eQhoJKU/0xs3ikaLTQAyOeOMxggWBMIIFfQIBATCBkDB8MQswCQYDVQQGEwJH
# QjEbMBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3Jk
# MRgwFgYDVQQKEw9TZWN0aWdvIExpbWl0ZWQxJDAiBgNVBAMTG1NlY3RpZ28gUlNB
# IENvZGUgU2lnbmluZyBDQQIQNi6d2QZSadlgoaqpVGQMODAJBgUrDgMCGgUAoHgw
# GAYKKwYBBAGCNwIBDDEKMAigAoAAoQKAADAZBgkqhkiG9w0BCQMxDAYKKwYBBAGC
# NwIBBDAcBgorBgEEAYI3AgELMQ4wDAYKKwYBBAGCNwIBFTAjBgkqhkiG9w0BCQQx
# FgQUw43DX3ktVyguZsUILQCGIJB+RsIwDQYJKoZIhvcNAQEBBQAEggEAn7J7hquT
# 5tlVCI9oz0z0FQ/493YiYoCDrNYYP+8XjI9OIb/V5RxEWoSMPQPupmVcDhPjCI/m
# Fse6pgDC5l9DoKEyrQq7Uku0LMpw2uFdW9ytrbdblLE24UdXdpyTL4adr6g31mqY
# 12oShK8zlGqIljbkYYaR96X2h+en1r5rQVRrbJlD6VUu4b5y6V4ZONlprnUE+AMr
# 2jfIianeBme+arjyFGxSQtNLx1jWCQOI7eQNrBK8umshg9jVDzTSpdG9s0LQBwRW
# dx05SI2wlW0J2/5VkaTusfqKFKn2+LrIVXjfwccq/2ZWsOa0ZxjT9YMdTNgL2N88
# 6n5Ofj42PBTZc6GCA0swggNHBgkqhkiG9w0BCQYxggM4MIIDNAIBATCBkTB9MQsw
# CQYDVQQGEwJHQjEbMBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQH
# EwdTYWxmb3JkMRgwFgYDVQQKEw9TZWN0aWdvIExpbWl0ZWQxJTAjBgNVBAMTHFNl
# Y3RpZ28gUlNBIFRpbWUgU3RhbXBpbmcgQ0ECED0aNXIwFYJjMNATcX6CQQgwDQYJ
# YIZIAWUDBAICBQCgeTAYBgkqhkiG9w0BCQMxCwYJKoZIhvcNAQcBMBwGCSqGSIb3
# DQEJBTEPFw0yMDA3MjgxMjUxMTJaMD8GCSqGSIb3DQEJBDEyBDBh8xBo7UVJHnWZ
# tXt6CG6Be3sJGbx782fzDFeu6XkiLpXK+w7MSu5CzYcuVffkqGUwDQYJKoZIhvcN
# AQEBBQAEggIAEqEstXS6NzmmtCgzqqKR0j5WYfK3RA3LjhTn7CnOQaPkR/RYND7a
# j+DM8ae0iWjHMrz52rkDJw7S7WrUzJLySnhZBWXCpRj54wsjsmfkYE7gT6l2EW9+
# AFTgUgrOoEFshslHeRBBq1mHKm7+nsygIH6xOG7Q+EpIjKAevw6aoGnP+fuTnGuw
# 2F0uaUlD4EOJmuVYMmD1oNBI1ou4C4eIPT9tjrBLs7IyyzDNlUShgsyXKtFxV7R0
# OWAbdjWPP7q803Q+BdN0ch8xmc2f1/xIf0U1ESQ9q8OdUIYhPjD54Qvh0RmS47XT
# bt64zQ5VhRaHILtD5ITfNN8evG8UUmiRhPFr6S1B0A3CW7CG28qmDTnML/LJu4wL
# Nvy7uoyOpfRbZ72adwAH14C09+UsAY/qQ3O7yDayJQ3egsFzH39MA6ForyyKysJF
# 6bi5tGnBYuoU8U0X5xFiAhbJXccyTt5gBw7bo7LEAnSgDgs5rZex4zffbDbt7IC+
# b3fZMLl3Aje6XUEIDvyJKEL1F1Sr/FvVAeBQ75NaOkvevzgg2duVapQe8tomlHz5
# 6T6YCH+6oid8b58SVNpZBPbfmpp4+gbVbZea0J8RZNYE4M/8F2xl3hglnxIcN5oV
# LI4FrT+0hj8r9l/BtiucwKr3fiUPjon6T+mmqOiituRzkmR5mvNEZfQ=
# SIG # End signature block