Private/Get-MsrcCvrfProductVulnerability.ps1

Function Get-MsrcCvrfProductVulnerability {
<#
    .SYNOPSIS
        Get product vulnerability details from a CVRF document
 
    .DESCRIPTION
       CVRF documents next products into several places, including:
       -Vulnerabilities
       -Threats
       -Remediations
       -Product Tree
       This function gathers the details for each product identified in a CVRF document.
       It provides a list of Threats, Remediations and CVSS Score Sets for each product.
 
    .PARAMETER Vulnerability
 
    .PARAMETER ProductTree
 
    .PARAMETER DocumentTracking
 
    .PARAMETER DocumentTitle
 
    .EXAMPLE
        Get-MsrcCvrfDocument -ID 2016-Nov | Get-MsrcCvrfProductVulnerability
 
        Get product vulnerability details from a CVRF document using the pipeline
 
    .EXAMPLE
        $cvrfDocument = Get-MsrcCvrfDocument -ID 2016-Nov
        Get-MsrcCvrfProductVulnerability -Vulnerability $cvrfDocument.Vulnerability -ProductTree $cvrfDocument.ProductTree -DocumentTracking $cvrfDocument.DocumentTracking -DocumentTitle $cvrfDocument.DocumentTitle
 
        Get product vulnerability details from a CVRF document using a variable and parameters
 
#>
        
    Param (

    [Parameter(Mandatory,ValueFromPipelineByPropertyName)]
    $Vulnerability,

    [Parameter(Mandatory,ValueFromPipelineByPropertyName)]
    $ProductTree,

    [Parameter(Mandatory,ValueFromPipelineByPropertyName)]
    $DocumentTracking,


    [Parameter(Mandatory,ValueFromPipelineByPropertyName)]
    $DocumentTitle
)
Begin {}
Process {

    $ProductTree.Branch.Items | 
    ForEach-Object {
        $b = $_

        $b.Items | ForEach-Object {

            # $CvrfRelatedProducts += [PSCustomObject]@{
            [PSCustomObject]@{
                CvrfAlias   = $DocumentTracking.Identification.Alias.Value ;
                CvrfTitle   = $DocumentTitle.Value ;
                BranchName  = $b.Name ;
                ProductName = $_.Value ;
                ProductID   = $_.ProductID ;
            }
        }

    } | 
    ForEach-Object {

        $Remediations  = $Threats = $CVSSScoreSets = @()
        $MaximumSeverity = $RestartRequired = $null
        $o = $_

        $Vulnerability | ForEach-Object {

            $v = $_

            $v.Remediations | Where-Object {$_.ProductID -Contains $o.ProductID } | ForEach-Object {

                $_ | Add-Member -NotePropertyName VulnerabilityCVE   -NotePropertyValue $v.CVE -Force
                $_ | Add-Member -NotePropertyName VulnerabilityTitle -NotePropertyValue $v.Title.Value -Force
                $Remediations += $_
            }

             $v.Threats | Where-Object { $_.ProductID -Contains $ot.ProductID } | ForEach-Object {

                $_ | Add-Member -NotePropertyName VulnerabilityCVE   -NotePropertyValue $v.CVE -Force
                $_ | Add-Member -NotePropertyName VulnerabilityTitle -NotePropertyValue $v.Title.Value -Force
                $Threats += $_
             }

             $v.CVSSScoreSets | Where-Object {$_.ProductID -Contains $o.ProductID } | ForEach-Object {
                $_ | Add-Member -NotePropertyName VulnerabilityCVE   -NotePropertyValue $v.CVE -Force
                $_ | Add-Member -NotePropertyName VulnerabilityTitle -NotePropertyValue $v.Title.Value -Force
                $CVSSScoreSets += $_
             }

             $o | Add-Member -NotePropertyName Remediations  -NotePropertyValue $Remediations  -Force
             $o | Add-Member -NotePropertyName Threats       -NotePropertyValue $Threats       -Force
             $o | Add-Member -NotePropertyName CVSSScoreSets -NotePropertyValue $CVSSScoreSets -Force
             
        }

        $MaximumSeverity = Switch (
            (
            $v.Threats | 
            Where-Object {$_.ProductID -Contains $o.ProductID } |
            Where-Object {$_.Type -eq 3 } 
            ).Description.Value | Select-Object -Unique
        ) {
            'Critical'  { 'Critical'  ; break }
            'Important' { 'Important' ; break }
            'Moderate'  { 'Moderate'  ; break }
            'Low'       { 'Low'       ; break }
            default { 'Unkwown'}
        }

        $o | Add-Member -NotePropertyName MaximumSeverity -NotePropertyValue $MaximumSeverity -Force

        $RestartRequired = Switch ($Vulnerability.Remediations.RestartRequired.Value) {
            'Yes'   { 'Yes'   ; break }
            'Maybe' { 'Maybe' ; break }
            default { 'Unknown' }
        }

        $o | Add-Member -NotePropertyName RestartRequired -NotePropertyValue $RestartRequired -Force

        $o
    }
}
End {}
}
# SIG # Begin signature block
# MIIdlgYJKoZIhvcNAQcCoIIdhzCCHYMCAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB
# gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR
# AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQUvYFKPaK7JAWadmDXVg/mJ/Ar
# dpqgghhyMIIE3jCCA8agAwIBAgITMwAAAVjKMdMUtYtZtAAAAAABWDANBgkqhkiG
# 9w0BAQUFADB3MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4G
# A1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSEw
# HwYDVQQDExhNaWNyb3NvZnQgVGltZS1TdGFtcCBQQ0EwHhcNMTkxMjE5MDExMzAz
# WhcNMjEwMzE3MDExMzAzWjCBzjELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hp
# bmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jw
# b3JhdGlvbjEpMCcGA1UECxMgTWljcm9zb2Z0IE9wZXJhdGlvbnMgUHVlcnRvIFJp
# Y28xJjAkBgNVBAsTHVRoYWxlcyBUU1MgRVNOOjREMkYtRTNERC1CRUVGMSUwIwYD
# VQQDExxNaWNyb3NvZnQgVGltZS1TdGFtcCBTZXJ2aWNlMIIBIjANBgkqhkiG9w0B
# AQEFAAOCAQ8AMIIBCgKCAQEAtQMwxP0C4VM+2np6qZ2LMkBSnpsdgfXpS9vypMyc
# 6F6iIaOKEzkE2HO7LAFZ2/NysvqIM4mA2MydavR6PxW6qg+w1TiL76cOeWm1jukd
# y8aKIUrFiaDIwlwnR+0utphYo68RazKjVd+pQiEp/dYcUPxasRbLhcDBhpEXPYUL
# Cvpe7X1Rc1ClrcxaFWSCT+MwreVgtZVfl3SacqxyzbrVu9UJrlPsCt0rMMJmlbis
# kGifP/D2FCxfNDLStRAS2RA+Bh9cQMZbwI3M2ASqweiZt7/ZsCcTKEobHswPlIHF
# lNUTSp2bgNz7p3Eq0sF40T2Ub3N0D/JEMt90+w1BhzBEiwIDAQABo4IBCTCCAQUw
# HQYDVR0OBBYEFFYFWgPDHlS7KpIvBSx8SCrTWYnsMB8GA1UdIwQYMBaAFCM0+NlS
# RnAK7UD7dvuzK7DDNbMPMFQGA1UdHwRNMEswSaBHoEWGQ2h0dHA6Ly9jcmwubWlj
# cm9zb2Z0LmNvbS9wa2kvY3JsL3Byb2R1Y3RzL01pY3Jvc29mdFRpbWVTdGFtcFBD
# QS5jcmwwWAYIKwYBBQUHAQEETDBKMEgGCCsGAQUFBzAChjxodHRwOi8vd3d3Lm1p
# Y3Jvc29mdC5jb20vcGtpL2NlcnRzL01pY3Jvc29mdFRpbWVTdGFtcFBDQS5jcnQw
# EwYDVR0lBAwwCgYIKwYBBQUHAwgwDQYJKoZIhvcNAQEFBQADggEBAIPUGai7Yg9P
# E10tjpWomfkNM6x/yH20Rlp6iO6dSR7dG+6XZB2AdaRYKSOzktlV3Z3AmvZFv7Z3
# F7kwQsKadCC1I9DPa1X3bdSQ4vpt65L916jyrXiH7R42FUbRSYDnJNerbpeaOVse
# 4OIapQeu5kg2Trzutbt0kuMSgDWTzZZKqCGEPHyYXDN234OgxuspgkmWtbQGXRPA
# stbLW2AlT9qxk71zaGrcaK99tMqjD/GboeZQbojFx3nrEer7hSsZacNKncE74gXo
# glC7zA73FHHfCuEgv1km7YtiIa0Wz0iivJOxZFt0LpLZEUbBzDMZmg7HvdbwAA+N
# KTKp8IzktqQwggYDMIID66ADAgECAhMzAAABiK9S1rmSbej5AAAAAAGIMA0GCSqG
# SIb3DQEBCwUAMH4xCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAw
# DgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24x
# KDAmBgNVBAMTH01pY3Jvc29mdCBDb2RlIFNpZ25pbmcgUENBIDIwMTEwHhcNMjAw
# MzA0MTgzOTQ4WhcNMjEwMzAzMTgzOTQ4WjB0MQswCQYDVQQGEwJVUzETMBEGA1UE
# CBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9z
# b2Z0IENvcnBvcmF0aW9uMR4wHAYDVQQDExVNaWNyb3NvZnQgQ29ycG9yYXRpb24w
# ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCSCNryE+Cewy2m4t/a74wZ
# 7C9YTwv1PyC4BvM/kSWPNs8n0RTe+FvYfU+E9uf0t7nYlAzHjK+plif2BhD+Ngdh
# IUQ8sVwWO39tjvQRHjP2//vSvIfmmkRoML1Ihnjs9kQiZQzYRDYYRp9xSQYmRwQj
# k5hl8/U7RgOiQDitVHaU7BT1MI92lfZRuIIDDYBdvXtbclYJMVOwqZtv0O9zQCre
# t6R+fRSGaDNfEEpcILL+D7RV3M4uaJE4Ta6KAOdvV+MVaJp1YXFTZPKtpjHO6d9p
# HQPZiG7NdC6QbnRGmsa48uNQrb6AfmLKDI1Lp31WMogTaX5tZf+CZT9PSuvjOCLN
# AgMBAAGjggGCMIIBfjAfBgNVHSUEGDAWBgorBgEEAYI3TAgBBggrBgEFBQcDAzAd
# BgNVHQ4EFgQUj9RJL9zNrPcL10RZdMQIXZN7MG8wVAYDVR0RBE0wS6RJMEcxLTAr
# BgNVBAsTJE1pY3Jvc29mdCBJcmVsYW5kIE9wZXJhdGlvbnMgTGltaXRlZDEWMBQG
# A1UEBRMNMjMwMDEyKzQ1ODM4NjAfBgNVHSMEGDAWgBRIbmTlUAXTgqoXNzcitW2o
# ynUClTBUBgNVHR8ETTBLMEmgR6BFhkNodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
# cGtpb3BzL2NybC9NaWNDb2RTaWdQQ0EyMDExXzIwMTEtMDctMDguY3JsMGEGCCsG
# AQUFBwEBBFUwUzBRBggrBgEFBQcwAoZFaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
# L3BraW9wcy9jZXJ0cy9NaWNDb2RTaWdQQ0EyMDExXzIwMTEtMDctMDguY3J0MAwG
# A1UdEwEB/wQCMAAwDQYJKoZIhvcNAQELBQADggIBACnXo8hjp7FeT+H6iQlV3CcG
# nkSbFvIpKYafgzYCFo3UHY1VHYJVb5jHEO8oG26QqBELmak6MTI+ra3WKMTGhE1s
# EIlowTcp4IAs8a5wpCh6Vf4Z/bAtIppP3p3gXk2X8UXTc+WxjQYsDkFiSzo/OBa5
# hkdW1g4EpO43l9mjToBdqEPtIXsZ7Hi1/6y4gK0PmMiwG8LMpSn0n/oSHGjrUNBg
# HJPxgs63Slf58QGBznuXiRaXmfTUDdrvhRocdxIMi8nXQwWACMiQzJSRzBP5S2wU
# q7nMAqjaTbeXhJqD2SFVHdUYlKruvtPSwbnqSRWTGI8s4FEXt+TL3w5JnwVZmZkU
# FoioQDMMjFyaKurdJ6pnzbr1h6QW0R97fWc8xEIzLIOiU2rjwWAtlQqFO8KNiykj
# YGyEf5LyAJKAO+rJd9fsYR+VBauIEQoYmjnUbTXMSY2Lf5KMluWlDOGVh8q6XjmB
# ccpaT+8tCfxpaVYPi1ncnwTwaPQvVq8RjWDRB7Pa8ruHgj2HJFi69+hcq7mWx5nT
# UtzzFa7RSZfE5a1a5AuBmGNRr7f8cNfa01+tiWjVKk1a+gJUBSP0sIxecFbVSXTZ
# 7bqeal45XSDIisZBkWb+83TbXdTGMDSUFKTAdtC+r35GfsN8QVy59Hb5ZYzAXczh
# gRmk7NyE6jD0Ym5TKiW5MIIGBzCCA++gAwIBAgIKYRZoNAAAAAAAHDANBgkqhkiG
# 9w0BAQUFADBfMRMwEQYKCZImiZPyLGQBGRYDY29tMRkwFwYKCZImiZPyLGQBGRYJ
# bWljcm9zb2Z0MS0wKwYDVQQDEyRNaWNyb3NvZnQgUm9vdCBDZXJ0aWZpY2F0ZSBB
# dXRob3JpdHkwHhcNMDcwNDAzMTI1MzA5WhcNMjEwNDAzMTMwMzA5WjB3MQswCQYD
# VQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEe
# MBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSEwHwYDVQQDExhNaWNyb3Nv
# ZnQgVGltZS1TdGFtcCBQQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
# AQCfoWyx39tIkip8ay4Z4b3i48WZUSNQrc7dGE4kD+7Rp9FMrXQwIBHrB9VUlRVJ
# lBtCkq6YXDAm2gBr6Hu97IkHD/cOBJjwicwfyzMkh53y9GccLPx754gd6udOo6HB
# I1PKjfpFzwnQXq/QsEIEovmmbJNn1yjcRlOwhtDlKEYuJ6yGT1VSDOQDLPtqkJAw
# bofzWTCd+n7Wl7PoIZd++NIT8wi3U21StEWQn0gASkdmEScpZqiX5NMGgUqi+YSn
# EUcUCYKfhO1VeP4Bmh1QCIUAEDBG7bfeI0a7xC1Un68eeEExd8yb3zuDk6FhArUd
# DbH895uyAc4iS1T/+QXDwiALAgMBAAGjggGrMIIBpzAPBgNVHRMBAf8EBTADAQH/
# MB0GA1UdDgQWBBQjNPjZUkZwCu1A+3b7syuwwzWzDzALBgNVHQ8EBAMCAYYwEAYJ
# KwYBBAGCNxUBBAMCAQAwgZgGA1UdIwSBkDCBjYAUDqyCYEBWJ5flJRP8KuEKU5VZ
# 5KShY6RhMF8xEzARBgoJkiaJk/IsZAEZFgNjb20xGTAXBgoJkiaJk/IsZAEZFglt
# aWNyb3NvZnQxLTArBgNVBAMTJE1pY3Jvc29mdCBSb290IENlcnRpZmljYXRlIEF1
# dGhvcml0eYIQea0WoUqgpa1Mc1j0BxMuZTBQBgNVHR8ESTBHMEWgQ6BBhj9odHRw
# Oi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpL2NybC9wcm9kdWN0cy9taWNyb3NvZnRy
# b290Y2VydC5jcmwwVAYIKwYBBQUHAQEESDBGMEQGCCsGAQUFBzAChjhodHRwOi8v
# d3d3Lm1pY3Jvc29mdC5jb20vcGtpL2NlcnRzL01pY3Jvc29mdFJvb3RDZXJ0LmNy
# dDATBgNVHSUEDDAKBggrBgEFBQcDCDANBgkqhkiG9w0BAQUFAAOCAgEAEJeKw1wD
# RDbd6bStd9vOeVFNAbEudHFbbQwTq86+e4+4LtQSooxtYrhXAstOIBNQmd16QOJX
# u69YmhzhHQGGrLt48ovQ7DsB7uK+jwoFyI1I4vBTFd1Pq5Lk541q1YDB5pTyBi+F
# A+mRKiQicPv2/OR4mS4N9wficLwYTp2OawpylbihOZxnLcVRDupiXD8WmIsgP+IH
# GjL5zDFKdjE9K3ILyOpwPf+FChPfwgphjvDXuBfrTot/xTUrXqO/67x9C0J71FNy
# Ie4wyrt4ZVxbARcKFA7S2hSY9Ty5ZlizLS/n+YWGzFFW6J1wlGysOUzU9nm/qhh6
# YinvopspNAZ3GmLJPR5tH4LwC8csu89Ds+X57H2146SodDW4TsVxIxImdgs8Uoxx
# WkZDFLyzs7BNZ8ifQv+AeSGAnhUwZuhCEl4ayJ4iIdBD6Svpu/RIzCzU2DKATCYq
# SCRfWupW76bemZ3KOm+9gSd0BhHudiG/m4LBJ1S2sWo9iaF2YbRuoROmv6pH8BJv
# /YoybLL+31HIjCPJZr2dHYcSZAI9La9Zj7jkIeW1sMpjtHhUBdRBLlCslLCleKuz
# oJZ1GtmShxN1Ii8yqAhuoFuMJb+g74TKIdbrHk/Jmu5J4PcBZW+JC33Iacjmbuqn
# l84xKf8OxVtc2E0bodj6L54/LlUWa8kTo/0wggd6MIIFYqADAgECAgphDpDSAAAA
# AAADMA0GCSqGSIb3DQEBCwUAMIGIMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2Fz
# aGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENv
# cnBvcmF0aW9uMTIwMAYDVQQDEylNaWNyb3NvZnQgUm9vdCBDZXJ0aWZpY2F0ZSBB
# dXRob3JpdHkgMjAxMTAeFw0xMTA3MDgyMDU5MDlaFw0yNjA3MDgyMTA5MDlaMH4x
# CzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRt
# b25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01p
# Y3Jvc29mdCBDb2RlIFNpZ25pbmcgUENBIDIwMTEwggIiMA0GCSqGSIb3DQEBAQUA
# A4ICDwAwggIKAoICAQCr8PpyEBwurdhuqoIQTTS68rZYIZ9CGypr6VpQqrgGOBoE
# Sbp/wwwe3TdrxhLYC/A4wpkGsMg51QEUMULTiQ15ZId+lGAkbK+eSZzpaF7S35tT
# sgosw6/ZqSuuegmv15ZZymAaBelmdugyUiYSL+erCFDPs0S3XdjELgN1q2jzy23z
# OlyhFvRGuuA4ZKxuZDV4pqBjDy3TQJP4494HDdVceaVJKecNvqATd76UPe/74yta
# EB9NViiienLgEjq3SV7Y7e1DkYPZe7J7hhvZPrGMXeiJT4Qa8qEvWeSQOy2uM1jF
# tz7+MtOzAz2xsq+SOH7SnYAs9U5WkSE1JcM5bmR/U7qcD60ZI4TL9LoDho33X/DQ
# Ur+MlIe8wCF0JV8YKLbMJyg4JZg5SjbPfLGSrhwjp6lm7GEfauEoSZ1fiOIlXdMh
# Sz5SxLVXPyQD8NF6Wy/VI+NwXQ9RRnez+ADhvKwCgl/bwBWzvRvUVUvnOaEP6SNJ
# vBi4RHxF5MHDcnrgcuck379GmcXvwhxX24ON7E1JMKerjt/sW5+v/N2wZuLBl4F7
# 7dbtS+dJKacTKKanfWeA5opieF+yL4TXV5xcv3coKPHtbcMojyyPQDdPweGFRInE
# CUzF1KVDL3SV9274eCBYLBNdYJWaPk8zhNqwiBfenk70lrC8RqBsmNLg1oiMCwID
# AQABo4IB7TCCAekwEAYJKwYBBAGCNxUBBAMCAQAwHQYDVR0OBBYEFEhuZOVQBdOC
# qhc3NyK1bajKdQKVMBkGCSsGAQQBgjcUAgQMHgoAUwB1AGIAQwBBMAsGA1UdDwQE
# AwIBhjAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFHItOgIxkEO5FAVO4eqn
# xzHRI4k0MFoGA1UdHwRTMFEwT6BNoEuGSWh0dHA6Ly9jcmwubWljcm9zb2Z0LmNv
# bS9wa2kvY3JsL3Byb2R1Y3RzL01pY1Jvb0NlckF1dDIwMTFfMjAxMV8wM18yMi5j
# cmwwXgYIKwYBBQUHAQEEUjBQME4GCCsGAQUFBzAChkJodHRwOi8vd3d3Lm1pY3Jv
# c29mdC5jb20vcGtpL2NlcnRzL01pY1Jvb0NlckF1dDIwMTFfMjAxMV8wM18yMi5j
# cnQwgZ8GA1UdIASBlzCBlDCBkQYJKwYBBAGCNy4DMIGDMD8GCCsGAQUFBwIBFjNo
# dHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2RvY3MvcHJpbWFyeWNwcy5o
# dG0wQAYIKwYBBQUHAgIwNB4yIB0ATABlAGcAYQBsAF8AcABvAGwAaQBjAHkAXwBz
# AHQAYQB0AGUAbQBlAG4AdAAuIB0wDQYJKoZIhvcNAQELBQADggIBAGfyhqWY4FR5
# Gi7T2HRnIpsLlhHhY5KZQpZ90nkMkMFlXy4sPvjDctFtg/6+P+gKyju/R6mj82nb
# Y78iNaWXXWWEkH2LRlBV2AySfNIaSxzzPEKLUtCw/WvjPgcuKZvmPRul1LUdd5Q5
# 4ulkyUQ9eHoj8xN9ppB0g430yyYCRirCihC7pKkFDJvtaPpoLpWgKj8qa1hJYx8J
# aW5amJbkg/TAj/NGK978O9C9Ne9uJa7lryft0N3zDq+ZKJeYTQ49C/IIidYfwzIY
# 4vDFLc5bnrRJOQrGCsLGra7lstnbFYhRRVg4MnEnGn+x9Cf43iw6IGmYslmJaG5v
# p7d0w0AFBqYBKig+gj8TTWYLwLNN9eGPfxxvFX1Fp3blQCplo8NdUmKGwx1jNpeG
# 39rz+PIWoZon4c2ll9DuXWNB41sHnIc+BncG0QaxdR8UvmFhtfDcxhsEvt9Bxw4o
# 7t5lL+yX9qFcltgA1qFGvVnzl6UJS0gQmYAf0AApxbGbpT9Fdx41xtKiop96eiL6
# SJUfq/tHI4D1nvi/a7dLl+LrdXga7Oo3mXkYS//WsyNodeav+vyL6wuA6mk7r/ww
# 7QRMjt/fdW1jkT3RnVZOT7+AVyKheBEyIXrvQQqxP/uozKRdwaGIm1dxVk5IRcBC
# yZt2WwqASGv9eZ/BvW1taslScxMNelDNMYIEjjCCBIoCAQEwgZUwfjELMAkGA1UE
# BhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAc
# BgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEoMCYGA1UEAxMfTWljcm9zb2Z0
# IENvZGUgU2lnbmluZyBQQ0EgMjAxMQITMwAAAYivUta5km3o+QAAAAABiDAJBgUr
# DgMCGgUAoIGiMBkGCSqGSIb3DQEJAzEMBgorBgEEAYI3AgEEMBwGCisGAQQBgjcC
# AQsxDjAMBgorBgEEAYI3AgEVMCMGCSqGSIb3DQEJBDEWBBSKq65uQnMuX521Ilkp
# 47zdt/w5LjBCBgorBgEEAYI3AgEMMTQwMqAUgBIATQBpAGMAcgBvAHMAbwBmAHSh
# GoAYaHR0cDovL3d3dy5taWNyb3NvZnQuY29tMA0GCSqGSIb3DQEBAQUABIIBAIDd
# hLcsj2AqMg6Mt0kMcSmzZQxvhI1qeVSR9wkFG2F4QOHrsbA6cywH8WKM7fkqfqpu
# fjyXt0XitdHX42XE7ZUogCCG8s/JHfFNZcQlez6yTl59m2cTVc0imHnraMqLw8Yg
# Ia3PNw2CK4pthI+3CIXMs/4uLpnihI2wpu5GoTrlwtyZqAJDKW/lSP5doMfKaQ2s
# 7kukv9ui7rdfSUWLiKxpwONzrsPvdqZDvGHiCErVg/sJecWN1/R62mp3ot+gYfLU
# nlBagEr8svSDlgvIVGNst2cu7oMjx/+r9p2rhBia1OnD3NjrFtnYdXFM34h+sGSG
# 0XoziXO85DZh8jqFb/qhggIoMIICJAYJKoZIhvcNAQkGMYICFTCCAhECAQEwgY4w
# dzELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1Jl
# ZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEhMB8GA1UEAxMY
# TWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBAhMzAAABWMox0xS1i1m0AAAAAAFYMAkG
# BSsOAwIaBQCgXTAYBgkqhkiG9w0BCQMxCwYJKoZIhvcNAQcBMBwGCSqGSIb3DQEJ
# BTEPFw0yMDExMDMxNzQ1MTdaMCMGCSqGSIb3DQEJBDEWBBS0kS2nWBdkuyFnVaf6
# AVybqMJ0tzANBgkqhkiG9w0BAQUFAASCAQB9KRMgT/b2hjVjUkvNGj3d4vXIACh+
# akNm4mILEXrwV0hZnAUSEogESGHZlNpBLil+lP6+jpfJ7wsf/Z2GU5pzAEebiXVS
# 7Y4SBrsH05O3+qpekTHNI40GuFRUW9o+FPe0baj21sHWMn+GeoEH06Qnz1rsniVm
# B9MjRWsEbCBJidJVG7RyO4RXcaOsZRyDsDwMAO7AMC+3JiLfeZclOrtFv+yiW0RX
# 0waN2iH2jOZHNKGIzoQAd+X7n8dtDPawNNZ3+rzvRJ3FWV2LvHOMh+QRq8CT/vuY
# NLVMUxCUvLOVVr6iYJj0zQ4hk01VR3wYd+q6K9gW3XSrcWjHJHwJ1LAh
# SIG # End signature block