diff --git a/app/src/main/java/io/xpipe/app/beacon/api/SecretDecryptExchange.java b/app/src/main/java/io/xpipe/app/beacon/api/SecretDecryptExchange.java index 26514e0f6..88b81fe74 100644 --- a/app/src/main/java/io/xpipe/app/beacon/api/SecretDecryptExchange.java +++ b/app/src/main/java/io/xpipe/app/beacon/api/SecretDecryptExchange.java @@ -21,11 +21,8 @@ public class SecretDecryptExchange extends BeaconInterface { @@ -26,35 +28,42 @@ public class SecretEncryptExchange extends BeaconInterface encryptionPrincipal.getName().equals(msg.getPrincipal())) - .findFirst(); - if (byName.isPresent()) { - p = byName.get(); - } else { - var uuid = UuidHelper.parse(msg.getPrincipal()); - if (uuid.isPresent()) { - var principal = DataStorageAccessHandler.getInstance().getEncryptionPrincipal(uuid.get()); - p = principal.orElse(null); + Set resolvedPrincipals = new LinkedHashSet<>(); + if (msg.getPrincipals() != null) { + EncryptionPrincipal p; + for (String pr : msg.getPrincipals()) { + var byName = DataStorageAccessHandler.getInstance().getAllEncryptionPrincipals().stream() + .filter(encryptionPrincipal -> encryptionPrincipal.getName().equals(pr)) + .findFirst(); + if (byName.isPresent()) { + p = byName.get(); } else { - p = null; + var uuid = UuidHelper.parse(pr); + if (uuid.isPresent()) { + var principal = DataStorageAccessHandler.getInstance().getEncryptionPrincipal(uuid.get()); + p = principal.orElse(null); + } else { + p = null; + } } - } - if (p == null) { - throw new BeaconClientException("Unknown principal " + msg.getPrincipal()); - } + if (p == null) { + throw new BeaconClientException("Unknown principal " + pr); + } - if (!p.isAccessible()) { - throw new BeaconClientException("Principal " + p.getName() + " is not accessible"); + if (!p.isAccessible()) { + throw new BeaconClientException("Principal " + p.getName() + " is not accessible"); + } + + resolvedPrincipals.add(p); } - } else { - p = DataStorageAccessHandler.getInstance().getEncryptAllPrincipal(); } - var secret = DataStorageSecret.of(InPlaceSecretValue.of(msg.getValue()), Set.of(p)); + if (resolvedPrincipals.isEmpty()) { + resolvedPrincipals.add(DataStorageAccessHandler.getInstance().getEncryptAllPrincipal()); + } + + var secret = DataStorageSecret.of(InPlaceSecretValue.of(msg.getValue()), resolvedPrincipals); return Response.builder().encrypted(secret.serialize()).build(); } @@ -65,7 +74,7 @@ public class SecretEncryptExchange extends BeaconInterface principals; } @Jacksonized diff --git a/app/src/main/java/io/xpipe/app/beacon/api/StoreInfoExchange.java b/app/src/main/java/io/xpipe/app/beacon/api/StoreInfoExchange.java index 8707aa3b1..52e354109 100644 --- a/app/src/main/java/io/xpipe/app/beacon/api/StoreInfoExchange.java +++ b/app/src/main/java/io/xpipe/app/beacon/api/StoreInfoExchange.java @@ -59,6 +59,7 @@ public class StoreInfoExchange extends BeaconInterface { try { - var exists = Files.exists(e.getDirectory()); - var dirty = e.isDirty(); - e.writeDataToDisk(); - dataStorageSyncHandler.handleCategory(e, exists, dirty); + synchronized (dir) { + var exists = Files.exists(e.getDirectory()); + var dirty = e.isDirty(); + e.writeDataToDisk(); + dataStorageSyncHandler.handleCategory(e, exists, dirty); + } } catch (IOException ex) { // IO exceptions are not expected exception.set(ex); @@ -469,10 +471,12 @@ public class StandardStorage extends DataStorage { .filter(dataStoreEntry -> dataStoreEntry.shouldSave()) .forEach(e -> { try { - var exists = Files.exists(e.getDirectory()); - var dirty = e.isDirty(); - e.writeDataToDisk(); - dataStorageSyncHandler.handleEntry(e, exists, dirty); + synchronized (dir) { + var exists = Files.exists(e.getDirectory()); + var dirty = e.isDirty(); + e.writeDataToDisk(); + dataStorageSyncHandler.handleEntry(e, exists, dirty); + } } catch (Exception ex) { // Data corruption and schema changes are expected exception.set(ex); @@ -510,10 +514,12 @@ public class StandardStorage extends DataStorage { var dir = entry.getDirectory(); if (dir != null) { try { - FileUtils.deleteDirectory(dir.toFile()); - dataStorageSyncHandler.handleDeletion(dir, entry.getName()); + synchronized (this.dir) { + FileUtils.deleteDirectory(dir.toFile()); + dataStorageSyncHandler.handleDeletion(dir, entry.getName()); + } } catch (IOException e) { - ErrorEventFactory.fromThrowable(e).expected().handle(); + ErrorEventFactory.fromThrowable(e).handle(); } } } diff --git a/app/src/main/java/io/xpipe/app/store/DataStoreUsageCategory.java b/app/src/main/java/io/xpipe/app/store/DataStoreUsageCategory.java index 5eb4ce05b..00db746e9 100644 --- a/app/src/main/java/io/xpipe/app/store/DataStoreUsageCategory.java +++ b/app/src/main/java/io/xpipe/app/store/DataStoreUsageCategory.java @@ -19,9 +19,6 @@ public enum DataStoreUsageCategory { SERIAL, @JsonProperty("identity") IDENTITY, - @SuppressWarnings("unused") - @JsonProperty("macro") - MACRO, @JsonProperty("fileSystem") FILE_SYSTEM } diff --git a/dist/changelog/24.0.md b/dist/changelog/24.0.md index 109e83261..66d01dfb0 100644 --- a/dist/changelog/24.0.md +++ b/dist/changelog/24.0.md @@ -104,7 +104,7 @@ The latest release of the [apple container runtime](https://github.com/apple/con ## Other -- There are now multiple new UI themes available for you to choose from +- There are now multiple new UI themes available for you to choose from in the settings menu - The API endpoints for /connection/... have been renamed to /store/... - Add option to reinstall XPipe on Windows if an incremental update fails - The network scan dialog now supports choosing the broadcast address @@ -118,7 +118,7 @@ The latest release of the [apple container runtime](https://github.com/apple/con - Improve key mapping settings for Hashicorp Vault and OpenBao - The search filter now also checks for any associated connection notes - Add proper StartupWMClass to linux desktop files -- Make icons git repository clone not include entire history to reduce size +- Make icons git repository clone not include entire git history to reduce size - KeePassXC will now automatically prompt for an unlock and wait instead of failing when the database is locked - Improve shell init failure handling when system interaction was disabled for limited devices - RDP on Windows now supports msrdc.exe as a client in addition to mstsc @@ -140,3 +140,5 @@ Up until now, XPipe updates have automatically migrated data and supported legac - Custom desktop shortcuts and URLs for actions will no longer work as the format and executable shortcuts have changed. You will have to recreate any custom action desktop shortcuts +- Some HTTP API json schemas have changed, so you will have to check whether you API calls still work, and if not, adjust them a bit + diff --git a/get-xpipe.ps1 b/get-xpipe.ps1 index 034616901..cc65e8b96 100644 --- a/get-xpipe.ps1 +++ b/get-xpipe.ps1 @@ -195,3 +195,296 @@ if (Test-Path "$env:LOCALAPPDATA\$ProductName\xpipe.exe" -PathType Leaf) { } #endregion Install XPipe + +# SIG # Begin signature block +# MII2LQYJKoZIhvcNAQcCoII2HjCCNhoCAQExDzANBglghkgBZQMEAgEFADB5Bgor +# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG +# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCCw1F3MKeyUolTq +# iyc1AW0Wn0Qp+ix4LZMtkiS0Ezpm96CCFHQwggVyMIIDWqADAgECAhB2U/6sdUZI +# k/Xl10pIOk74MA0GCSqGSIb3DQEBDAUAMFMxCzAJBgNVBAYTAkJFMRkwFwYDVQQK +# ExBHbG9iYWxTaWduIG52LXNhMSkwJwYDVQQDEyBHbG9iYWxTaWduIENvZGUgU2ln +# bmluZyBSb290IFI0NTAeFw0yMDAzMTgwMDAwMDBaFw00NTAzMTgwMDAwMDBaMFMx +# CzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMSkwJwYDVQQD +# EyBHbG9iYWxTaWduIENvZGUgU2lnbmluZyBSb290IFI0NTCCAiIwDQYJKoZIhvcN +# AQEBBQADggIPADCCAgoCggIBALYtxTDdeuirkD0DcrA6S5kWYbLl/6VnHTcc5X7s +# k4OqhPWjQ5uYRYq4Y1ddmwCIBCXp+GiSS4LYS8lKA/Oof2qPimEnvaFE0P31PyLC +# o0+RjbMFsiiCkV37WYgFC5cGwpj4LKczJO5QOkHM8KCwex1N0qhYOJbp3/kbkbuL +# ECzSx0Mdogl0oYCve+YzCgxZa4689Ktal3t/rlX7hPCA/oRM1+K6vcR1oW+9YRB0 +# RLKYB+J0q/9o3GwmPukf5eAEh60w0wyNA3xVuBZwXCR4ICXrZ2eIq7pONJhrcBHe +# OMrUvqHAnOHfHgIB2DvhZ0OEts/8dLcvhKO/ugk3PWdssUVcGWGrQYP1rB3rdw1G +# R3POv72Vle2dK4gQ/vpY6KdX4bPPqFrpByWbEsSegHI9k9yMlN87ROYmgPzSwwPw +# jAzSRdYu54+YnuYE7kJuZ35CFnFi5wT5YMZkobacgSFOK8ZtaJSGxpl0c2cxepHy +# 1Ix5bnymu35Gb03FhRIrz5oiRAiohTfOB2FXBhcSJMDEMXOhmDVXR34QOkXZLaRR +# kJipoAc3xGUaqhxrFnf3p5fsPxkwmW8x++pAsufSxPrJ0PBQdnRZ+o1tFzK++Ol+ +# A/Tnh3Wa1EqRLIUDEwIrQoDyiWo2z8hMoM6e+MuNrRan097VmxinxpI68YJj8S4O +# JGTfAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0G +# A1UdDgQWBBQfAL9GgAr8eDm3pbRD2VZQu86WOzANBgkqhkiG9w0BAQwFAAOCAgEA +# Xiu6dJc0RF92SChAhJPuAW7pobPWgCXme+S8CZE9D/x2rdfUMCC7j2DQkdYc8pzv +# eBorlDICwSSWUlIC0PPR/PKbOW6Z4R+OQ0F9mh5byV2ahPwm5ofzdHImraQb2T07 +# alKgPAkeLx57szO0Rcf3rLGvk2Ctdq64shV464Nq6//bRqsk5e4C+pAfWcAvXda3 +# XaRcELdyU/hBTsz6eBolSsr+hWJDYcO0N6qB0vTWOg+9jVl+MEfeK2vnIVAzX9Rn +# m9S4Z588J5kD/4VDjnMSyiDN6GHVsWbcF9Y5bQ/bzyM3oYKJThxrP9agzaoHnT5C +# JqrXDO76R78aUn7RdYHTyYpiF21PiKAhoCY+r23ZYjAf6Zgorm6N1Y5McmaTgI0q +# 41XHYGeQQlZcIlEPs9xOOe5N3dkdeBBUO27Ql28DtR6yI3PGErKaZND8lYUkqP/f +# obDckUCu3wkzq7ndkrfxzJF0O2nrZ5cbkL/nx6BvcbtXv7ePWu16QGoWzYCELS/h +# AtQklEOzFfwMKxv9cW/8y7x1Fzpeg9LJsy8b1ZyNf1T+fn7kVqOHp53hWVKUQY9t +# W76GlZr/GnbdQNJRSnC0HzNjI3c/7CceWeQIh+00gkoPP/6gHcH1Z3NFhnj0qinp +# J4fGGdvGExTDOUmHTaCX4GUT9Z13Vunas1jHOvLAzYIwggboMIIE0KADAgECAhB3 +# vQ4Ft1kLth1HYVMeP3XtMA0GCSqGSIb3DQEBCwUAMFMxCzAJBgNVBAYTAkJFMRkw +# FwYDVQQKExBHbG9iYWxTaWduIG52LXNhMSkwJwYDVQQDEyBHbG9iYWxTaWduIENv +# ZGUgU2lnbmluZyBSb290IFI0NTAeFw0yMDA3MjgwMDAwMDBaFw0zMDA3MjgwMDAw +# MDBaMFwxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMTIw +# MAYDVQQDEylHbG9iYWxTaWduIEdDQyBSNDUgRVYgQ29kZVNpZ25pbmcgQ0EgMjAy +# MDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMsg75ceuQEyQ6BbqYoj +# /SBerjgSi8os1P9B2BpV1BlTt/2jF+d6OVzA984Ro/ml7QH6tbqT76+T3PjisxlM +# g7BKRFAEeIQQaqTWlpCOgfh8qy+1o1cz0lh7lA5tD6WRJiqzg09ysYp7ZJLQ8LRV +# X5YLEeWatSyyEc8lG31RK5gfSaNf+BOeNbgDAtqkEy+FSu/EL3AOwdTMMxLsvUCV +# 0xHK5s2zBZzIU+tS13hMUQGSgt4T8weOdLqEgJ/SpBUO6K/r94n233Hw0b6nskEz +# IHXMsdXtHQcZxOsmd/KrbReTSam35sOQnMa47MzJe5pexcUkk2NvfhCLYc+YVaMk +# oog28vmfvpMusgafJsAMAVYS4bKKnw4e3JiLLs/a4ok0ph8moKiueG3soYgVPMLq +# 7rfYrWGlr3A2onmO3A1zwPHkLKuU7FgGOTZI1jta6CLOdA6vLPEV2tG0leis1Ult +# 5a/dm2tjIF2OfjuyQ9hiOpTlzbSYszcZJBJyc6sEsAnchebUIgTvQCodLm3HadNu +# twFsDeCXpxbmJouI9wNEhl9iZ0y1pzeoVdwDNoxuz202JvEOj7A9ccDhMqeC5LYy +# AjIwfLWTyCH9PIjmaWP47nXJi8Kr77o6/elev7YR8b7wPcoyPm593g9+m5XEEofn +# GrhO7izB36Fl6CSDySrC/blTAgMBAAGjggGtMIIBqTAOBgNVHQ8BAf8EBAMCAYYw +# EwYDVR0lBAwwCgYIKwYBBQUHAwMwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4E +# FgQUJZ3Q/FkJhmPF7POxEztXHAOSNhEwHwYDVR0jBBgwFoAUHwC/RoAK/Hg5t6W0 +# Q9lWULvOljswgZMGCCsGAQUFBwEBBIGGMIGDMDkGCCsGAQUFBzABhi1odHRwOi8v +# b2NzcC5nbG9iYWxzaWduLmNvbS9jb2Rlc2lnbmluZ3Jvb3RyNDUwRgYIKwYBBQUH +# MAKGOmh0dHA6Ly9zZWN1cmUuZ2xvYmFsc2lnbi5jb20vY2FjZXJ0L2NvZGVzaWdu +# aW5ncm9vdHI0NS5jcnQwQQYDVR0fBDowODA2oDSgMoYwaHR0cDovL2NybC5nbG9i +# YWxzaWduLmNvbS9jb2Rlc2lnbmluZ3Jvb3RyNDUuY3JsMFUGA1UdIAROMEwwQQYJ +# KwYBBAGgMgECMDQwMgYIKwYBBQUHAgEWJmh0dHBzOi8vd3d3Lmdsb2JhbHNpZ24u +# Y29tL3JlcG9zaXRvcnkvMAcGBWeBDAEDMA0GCSqGSIb3DQEBCwUAA4ICAQAldaAJ +# yTm6t6E5iS8Yn6vW6x1L6JR8DQdomxyd73G2F2prAk+zP4ZFh8xlm0zjWAYCImbV +# YQLFY4/UovG2XiULd5bpzXFAM4gp7O7zom28TbU+BkvJczPKCBQtPUzosLp1pnQt +# pFg6bBNJ+KUVChSWhbFqaDQlQq+WVvQQ+iR98StywRbha+vmqZjHPlr00Bid/XSX +# hndGKj0jfShziq7vKxuav2xTpxSePIdxwF6OyPvTKpIz6ldNXgdeysEYrIEtGiH6 +# bs+XYXvfcXo6ymP31TBENzL+u0OF3Lr8psozGSt3bdvLBfB+X3Uuora/Nao2Y8nO +# ZNm9/Lws80lWAMgSK8YnuzevV+/Ezx4pxPTiLc4qYc9X7fUKQOL1GNYe6ZAvytOH +# X5OKSBoRHeU3hZ8uZmKaXoFOlaxVV0PcU4slfjxhD4oLuvU/pteO9wRWXiG7n9dq +# cYC/lt5yA9jYIivzJxZPOOhRQAyuku++PX33gMZMNleElaeEFUgwDlInCI2Oor0i +# xxnJpsoOqHo222q6YV8RJJWk4o5o7hmpSZle0LQ0vdb5QMcQlzFSOTUpEYck08T7 +# qWPLd0jV+mL8JOAEek7Q5G7ezp44UCb0IXFl1wkl1MkHAHq4x/N36MXU4lXQ0x72 +# f1LiSY25EXIMiEQmM2YBRN/kMw4h3mKJSAfa9TCCCA4wggX2oAMCAQICDDjATBs0 +# gFlMPflq4jANBgkqhkiG9w0BAQsFADBcMQswCQYDVQQGEwJCRTEZMBcGA1UEChMQ +# R2xvYmFsU2lnbiBudi1zYTEyMDAGA1UEAxMpR2xvYmFsU2lnbiBHQ0MgUjQ1IEVW +# IENvZGVTaWduaW5nIENBIDIwMjAwHhcNMjUxMTE0MTAxOTEyWhcNMjYxMTE1MTAx +# OTEyWjCCAVcxHTAbBgNVBA8MFFByaXZhdGUgT3JnYW5pemF0aW9uMRMwEQYDVQQF +# EwpIUkIgNzkxMzAxMRMwEQYLKwYBBAGCNzwCAQMTAkRFMSMwIQYLKwYBBAGCNzwC +# AQITEkJhZGVuLVd1ZXJ0dGVtYmVyZzEaMBgGCysGAQQBgjc8AgEBEwlTdHV0dGdh +# cnQxCzAJBgNVBAYTAkRFMRswGQYDVQQIDBJCYWRlbi1Xw7xydHRlbWJlcmcxFDAS +# BgNVBAcTC0x1ZHdpZ3NidXJnMRowGAYDVQQJExFSZWljaGVydHNoYWxkZSA4MTEn +# MCUGA1UECgweWFBpcGUgVUcgKGhhZnR1bmdzYmVzY2hyw6Rua3QpMScwJQYDVQQD +# DB5YUGlwZSBVRyAoaGFmdHVuZ3NiZXNjaHLDpG5rdCkxHTAbBgkqhkiG9w0BCQEW +# DmhlbGxvQHhwaXBlLmlvMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA +# iWiV2em3EWZvvhWONaxbhUUl+xkrjris0DlgHJKjIsHRtlqdI9g+K3Bg1cEdgNp9 +# ISYfp6dgBsdceg5tgVfOxuCpmxU04dfV1B+En5hh6LSvaMa2dkaGmMHzuI5KUC9k +# BCbZ9j8wlkSV3SCXPXFP5uGNgKF5O0RcUmoGUuz0zTWThcyhcZZ+8wDueqj72mlL +# Hu/2CipSFmyDrTVr02j4Dr3MA+bSXYWCQKFDji8V3SCBOjLXZFvdZPYRcz6I4GZy +# XE1QfvAzzsI6aKIQpquXwWEzkgBcGaDG8yV+cTCisXDT5dVBX69FV8lVnlvzoVJE +# XPZnWaXOcOzFXNDoRSmc51/REOgvmUmlD/EYPXF6dEn67ZZVnSyLvKyTRCLx+LUi +# KfqCTUDJXuZog3wpnkoBHClyrBinHjxHApbx4TxVPLpOnlWuPfbDKoNIEigXFyeb +# x6FHSABQn02p4r+6YpQK1DSnMtRvxL4XmllI1h1d3cmyTU4HfdlTaoXsAlaTzbTP +# kO9M7Mu045fexFupD/lpk7jv0zFvBxYsBkPuGubfIpaX5Q6wybGMED3XbTnKykN9 +# tD8ncWJgKcpu5eBrmZotzGkb8ngHMCOooS+H3lONf9G4Oub/oIRiLApUl83+VJ8k +# xZ7B9W4DOpEo6HsbfzO1eXV+Wiy4UJ+WPvPoPFHQ+XsCAwEAAaOCAdEwggHNMA4G +# A1UdDwEB/wQEAwIHgDCBnwYIKwYBBQUHAQEEgZIwgY8wTAYIKwYBBQUHMAKGQGh0 +# dHA6Ly9zZWN1cmUuZ2xvYmFsc2lnbi5jb20vY2FjZXJ0L2dzZ2NjcjQ1ZXZjb2Rl +# c2lnbmNhMjAyMC5jcnQwPwYIKwYBBQUHMAGGM2h0dHA6Ly9vY3NwLmdsb2JhbHNp +# Z24uY29tL2dzZ2NjcjQ1ZXZjb2Rlc2lnbmNhMjAyMDBVBgNVHSAETjBMMEEGCSsG +# AQQBoDIBAjA0MDIGCCsGAQUFBwIBFiZodHRwczovL3d3dy5nbG9iYWxzaWduLmNv +# bS9yZXBvc2l0b3J5LzAHBgVngQwBAzAJBgNVHRMEAjAAMEcGA1UdHwRAMD4wPKA6 +# oDiGNmh0dHA6Ly9jcmwuZ2xvYmFsc2lnbi5jb20vZ3NnY2NyNDVldmNvZGVzaWdu +# Y2EyMDIwLmNybDAZBgNVHREEEjAQgQ5oZWxsb0B4cGlwZS5pbzATBgNVHSUEDDAK +# BggrBgEFBQcDAzAfBgNVHSMEGDAWgBQlndD8WQmGY8Xs87ETO1ccA5I2ETAdBgNV +# HQ4EFgQU3cIQIJuJcgAVvx1aKUUPxC698swwDQYJKoZIhvcNAQELBQADggIBAD9t +# ixHvBK/ulMMa2S63NYZQs1C/yvdzXBS/0vmMUeuJcy4yhL3dSgJE9qVO5GG2PDqV +# yQ36WIck0wTPjoy4fpyC5Rnalgt3ifE+LTrq/+SHB18UMj4xsyRk987vCY9ue12/ +# 5DpJhyT85WeLnU1u9QEG2UpSmp8pdQrbmpVZK9V82QjQwP5Djrl3SX3mTvcrs4Lc +# PasgGx0+DZK047Nnsq1RiDNxTWzPQE1Flgglg7Gnz9M52Zn3xLmAKD1qm+F4PLCn +# 8AihGUAkEnsadtDJGUEZc/C0FBpgFejb5YpZtVJwRbEi8Ya4ng6JqdUfr09OVVDq +# cqMK0EzfuzYhIvUzgH/tjBZCyejTCuFa7Bzikcs5xRcX43DG0N6v1B/lmPMGrDW1 +# 3G2pP8m9gs6Jxc4izwtuUbb1Zy8GlIZEviDGIYSxStlicK+qR4qOnL06mNAe26RI +# fj+gPORke6Od/mrk0VK5OVFQa/JUIXN1APai3FJKazAnzp3fZ79M9zko4Ca06NSP +# oClVXbOKk5nQGhWnjP/Q99p/VRU0Or1ba/mMfX2lxl0gM2Vva5BZjJDOrzbaR8Nr +# 7B9C/ZRw1zuC13USzdUT/ASsY92uH07u4MFucJIkgzClzoSn5zeutRC4VUIwxJrx +# 8n5Jlu+PMnOcx6VM99etVDRHw0CLpVS6nSCGDVyoMYIhDzCCIQsCAQEwbDBcMQsw +# CQYDVQQGEwJCRTEZMBcGA1UEChMQR2xvYmFsU2lnbiBudi1zYTEyMDAGA1UEAxMp +# R2xvYmFsU2lnbiBHQ0MgUjQ1IEVWIENvZGVTaWduaW5nIENBIDIwMjACDDjATBs0 +# gFlMPflq4jANBglghkgBZQMEAgEFAKCBhDAYBgorBgEEAYI3AgEMMQowCKACgACh +# AoAAMBkGCSqGSIb3DQEJAzEMBgorBgEEAYI3AgEEMBwGCisGAQQBgjcCAQsxDjAM +# BgorBgEEAYI3AgEVMC8GCSqGSIb3DQEJBDEiBCBmU0uxdqU6MmE4R8PP5GgvQBtc +# lt422rGont6G05fO0TANBgkqhkiG9w0BAQEFAASCAgBX0m3julUIPh3UOIgEYakI +# zouqK9ZPGUESp5sCtbEwtcfNDOD+070VhUTtArDIgO4aBUsRZOKhT3CXplgcM8W0 +# iigzJpLTeAeKZManXhQjzA7nG8h2ZTIgzFdArM7Q6SXFW6rhyCuLXxd9FJrJJACJ +# zKQ0d/vK5H2KBl8XqavzC6gwM5EZVn1ltg4KihuE/9LtjSY5QlDh7JJ+gm+EBlUM +# m+IaKO4onNy5gH97J5evUm5xdS9Ixp8MIdHjhdIxGX3sZducmvBfiDdaUoDC7uuV +# wTx9rwi0LUi0OUW4Kc9fQM2fHgRAyVNsOfDQR4Q6i+yLOIhIcAe+ZO9+u+8AyAp/ +# kcbjFyNYqac8G5v6eDJrdJVB8C2Z8OtMGNwvWok+unomyqQ9gw0Ib1L+sRapiHuW +# LErfFxrqHKai4RtaamW68jAZrcSM2QCDUhfjULRARDpFFAqhli3oyz+BHUv6GG/p +# nML8pNHMsSNFLqLZE5iG9fi7H8JXYJJ3cptS3d1F7EfZsY9TsjMM2JKwTJQtY0O3 +# oRtHzSt91+4GrVrp6DiO+CwhT/AvpP5khkDRvDKB0SLVUamv2MM+OUKCPN8utVjD +# u2+XsrxZGOx7vdMTaW82+PzoDjdpCHuzui4FjYHWyoEBNTyaaGrB+8qENvAyw5y8 +# weuBxAHmDqkTJRQKz8+vDaGCHe0wgh3pBgorBgEEAYI3AwMBMYId2TCCHdUGCSqG +# SIb3DQEHAqCCHcYwgh3CAgEDMQ0wCwYJYIZIAWUDBAICMIHkBgsqhkiG9w0BCRAB +# BKCB1ASB0TCBzgIBAQYLKwYBBAGgMgIDAgIwMTANBglghkgBZQMEAgEFAAQgW1Nw +# PZ7p6h0YxVMc+u32tfAOoVXmfKAfA/+q15hF4kwCFGVKOgRR3tVCUuMRGPaBK4sm +# MB3jGA8yMDI2MDgwOTA3NTgyOVowAwIBAaBdpFswWTELMAkGA1UEBhMCQkUxGTAX +# BgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExLzAtBgNVBAMTJkdsb2JhbHNpZ24gUjQ1 +# IFRTQSBmb3IgQ29kZVNpZ24gMjAyNTEwoIIZYDCCBoowggRyoAMCAQICEQCEcj/B +# lcwW8dsrovZg3yvkMA0GCSqGSIb3DQEBDAUAMF4xCzAJBgNVBAYTAkJFMRkwFwYD +# VQQKExBHbG9iYWxTaWduIG52LXNhMTQwMgYDVQQDEytHbG9iYWxTaWduIE9mZmxp +# bmUgUjQ1IFRpbWVzdGFtcGluZyBDQSAyMDI1MB4XDTI1MTAxNTA3MjUwNFoXDTM3 +# MDExMDAwMDAwMFowWTELMAkGA1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24g +# bnYtc2ExLzAtBgNVBAMTJkdsb2JhbHNpZ24gUjQ1IFRTQSBmb3IgQ29kZVNpZ24g +# MjAyNTEwMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEA0UqNoY2GQEgo +# owkEnNkTEDzyqIxP8X+FIo2tiZ7Ce0p5doA6MSo0PR3FOq1Q/KYMtbASnVcbSyxY +# WN4M2PzwNosCLOmcwp8bIbY0obDdUcs0a83OBavtMUMeqgA1DJ/epqhxP9KJOdwz +# 25qQZJFA8rRjO/Z0H8PVlcpmIAPk5GwNP0DpjzTSSGego19Ld8CX4S9HGol7YQQT +# BFisU+b9lO2UWwqvw1Q1wPaF9YhVQVWgaceezCy9NJ8h7sdCJ2Eu0a+eDN7TYZu/ +# tJmsackxWudbmNTx7UyTLqf5d0RqKEOWMHgh9oQ6FDcCjgu0JBW5JYT3atuxF5Ln +# oPKizp0Q5lTta/gdcjAG5ekLldC/jjwdUigQD6ZiBZJZidEqIm21KsbE83o43SPs +# sEC1HF4paIMClrCeOoesI5VOQFak+xRAWM1gk7eoX+0i0GzxrNNgWvKGmjX6NEi/ +# mgKTfeJbhAf8LhNZYKba3JC820JQqeejoJACWKamLrovk37ngiFNAgMBAAGjggHG +# MIIBwjAOBgNVHQ8BAf8EBAMCB4AwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwgwDAYD +# VR0TAQH/BAIwADAdBgNVHQ4EFgQUMvrT4QdoJ5BrCNI/HTyMZTYoBhkwHwYDVR0j +# BBgwFoAUdwI7ATEPHnR3w0jIwwdjVYilO6IwgaUGCCsGAQUFBwEBBIGYMIGVMEIG +# CCsGAQUFBzABhjZodHRwOi8vb2NzcC5nbG9iYWxzaWduLmNvbS9nc29mZmxpbmVy +# NDV0aW1lc3RhbXBjYTIwMjUwTwYIKwYBBQUHMAKGQ2h0dHA6Ly9zZWN1cmUuZ2xv +# YmFsc2lnbi5jb20vY2FjZXJ0L2dzb2ZmbGluZXI0NXRpbWVzdGFtcGNhMjAyNS5j +# cnQwSgYDVR0fBEMwQTA/oD2gO4Y5aHR0cDovL2NybC5nbG9iYWxzaWduLmNvbS9n +# c29mZmxpbmVyNDV0aW1lc3RhbXBjYTIwMjUuY3JsMFYGA1UdIARPME0wCAYGZ4EM +# AQQCMEEGCSsGAQQBoDIBHjA0MDIGCCsGAQUFBwIBFiZodHRwczovL3d3dy5nbG9i +# YWxzaWduLmNvbS9yZXBvc2l0b3J5LzANBgkqhkiG9w0BAQwFAAOCAgEAjq5wpo9H +# hpGKbp4s+v1hZvdbOio54ZDCmJW3H7YKTAbZYcrFZ4hDnwb4XL6BUMOADhxvTUVb +# 2aZAZ2oOQ7dRzNyYNtYEVQgcBcj9RE/CA8aH5WMeTg+EgjSx7OrwoOqxZDU/Nb/W +# cvLtMV8t1m6DeYiv0m05ixqgqwBiYoSy63yIb3XcFa3Qcoh7Xi8YI7oE+iUKIAkq +# ARdiaph9GQQpedeW7W07lmS60FLOb75dqPfDHY7vcsiUVi8z1XFJEZPXfMQQYut/ +# BQTgLqN33Mk4RnJ3u8FDmvk4IYcCB22d6cU2KYKOXAsRGbB/BF8Ik1E8B39KnrLL +# IP9l3XBh+7NAEeE8jidkJwGsmDgDP1zgcTc1EUIOJoTHTy/xfFQjCo95KCWlXMdm +# pIdAfNpXv2gVPKtjmvvjsDsIhxeXvn/ZvsocmG8BkqIFiFd4YEZflciq3IfIL9+R +# R6/3Fc/J9PwjxkVxomCWez9cDjoGHZDA9ogylWEG8uSMf8QgdP5Uii56hKBXs35p +# wiWxoAAlbMDLMYSRFI7cRHEHPWn2pZ3viDrbNL/8gkYpCbJ5lW0tMedA5Njh/lQo +# lPbP18s4Hwu1s67UOXYiHXNirItyTEyZuGtC4hCGVorQ+fuj6JDpEPPt+U7BzsFI +# bPOyP8siY5SGaQFeDn9fyTfG1lQdxHZuFs4wggagMIIEiKADAgECAhEAg9qGN7ef +# DIQMlHuEClJ4HzANBgkqhkiG9w0BAQwFADBTMQswCQYDVQQGEwJCRTEZMBcGA1UE +# ChMQR2xvYmFsU2lnbiBudi1zYTEpMCcGA1UEAxMgR2xvYmFsU2lnbiBUaW1lc3Rh +# bXBpbmcgUm9vdCBSNDUwHhcNMjUwNzE2MDMwNTA0WhcNNDEwNzE2MDAwMDAwWjBe +# MQswCQYDVQQGEwJCRTEZMBcGA1UEChMQR2xvYmFsU2lnbiBudi1zYTE0MDIGA1UE +# AxMrR2xvYmFsU2lnbiBPZmZsaW5lIFI0NSBUaW1lc3RhbXBpbmcgQ0EgMjAyNTCC +# AiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKR3FvjtfYvi3QKGRWM0vuV/ +# lmL51qBalwH4q9Ycp4VE3R+EVtQ2/sjpq0Nu+Y5bEOm86Gd5zdAjJ3GV+BNEIaae +# kL8du/n5aX83jEGnA+1XIllIhd0y4ru8E9mwQkhDVJ94XxjBuDyb2BbzuaOAwNYj +# bx4RuKEs3LaHaCX2+HPBI1WoQsPzS4swd62vjVntoGQUmmSq2jMRbeu+sqse0XEJ +# 42xeEdDixqL7Gbdt71OvQOQXaD8XQPc7vazPqkwbDw1VCXsWMBFVNBmOwSeZlFlp +# 4sgDx1tFr+AM5ObeyNF1CIwN/tjhpK9HVQV1QQ8hHhgVa2FxHYX1S8LoehwRiRXS +# KxGOSqBpaaE/uAQUHuFwh+bL9eVKPjO9lSlozwORMd53xSQuD+RVtUkeqJQkmiK7 +# Z2c3Ps4JqUsog/hnBNrnUEUB2w4u+Hp14Gs5NPpLaR2dWfKE70mkiERKL10i2x9y +# gvLhSJF7nJe1zx+2RiK5hfXheM7qKORSFJ7L1etJC6hQ8z5PlGy5oGQ1Aj5RRQQX +# oWmjb4sRMpsfTjdil3r/jHyujmQoahm6zgtsL7wBR8ipU2W1R3ajYrtLuWtk9QvX +# Uk0Z8tf4cS8HMS/QVj80C8IbIsl6lMzO7g9JQ/fj2DGsVGIKFUsam+MbzwolaizW +# myPlrYxM2H0ND/urQUxbAgMBAAGjggFiMIIBXjAOBgNVHQ8BAf8EBAMCAYYwEwYD +# VR0lBAwwCgYIKwYBBQUHAwgwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQU +# dwI7ATEPHnR3w0jIwwdjVYilO6IwHwYDVR0jBBgwFoAURrIcd+F7FfClOaFw3tHE +# Luptst4wgY4GCCsGAQUFBwEBBIGBMH8wNwYIKwYBBQUHMAGGK2h0dHA6Ly9vY3Nw +# Lmdsb2JhbHNpZ24uY29tL3RpbWVzdGFtcHJvb3RyNDUwRAYIKwYBBQUHMAKGOGh0 +# dHA6Ly9zZWN1cmUuZ2xvYmFsc2lnbi5jb20vY2FjZXJ0L3RpbWVzdGFtcHJvb3Ry +# NDUuY3J0MD8GA1UdHwQ4MDYwNKAyoDCGLmh0dHA6Ly9jcmwuZ2xvYmFsc2lnbi5j +# b20vdGltZXN0YW1wcm9vdHI0NS5jcmwwEQYDVR0gBAowCDAGBgRVHSAAMA0GCSqG +# SIb3DQEBDAUAA4ICAQAyo+5+0W7kZjGWWF6pTD0SaEel9Z//6rlxi1XzqRaEfWGt +# OS/eMNMsAY3pchhn/pwAfgmRUO4FDndmtm6X6VvF8OQKzPmIzxH/ALQuBOmK9dOV +# NWDY5U0hEaFiSnNYZEjeZuHabGLXhcpMxUFcF+dIWCh98melXLuh2tBAOaH8y6Yt +# oyto20Qwl2xTS4uZjtcSkXQdgMwBdH+QtNG+B93ebAjgfJ407wMGkzBhDHk5C1jO +# GfWPt1DrTqaNULsV2w6V1ZC162htuYi9Vbb48RAMuOd+J1CDQfcITkYnCSUky22u +# nzitn/9UBlhHXsFixwMxPjeaB9EKDUQC6SeSYyH3iJ7zvrEHQYnZz7iyifeR04+1 +# 8jLyYRWY7WxyRpRFseFICnLjSiwy11gC38EAzdg3st5E33eMsOJ0HZNT3LSyytxe +# C9p5y7/eATJKWPkX5ed6DhDeMk77cAmD/lQ7ma5LXOzWnKE1cWZyhpL/GtWpHJHT +# sEGQvovAMtVcszAF/02+Pq93OuQe3KQLatzqFIo11CYL2cXIuk1+/LJi9k2MtrVp +# /vBuJK5178thC0dl2JyhDkuDFZq0grIzOZ8Uq4IRNdFQ10GxH2vd5YYpHxaCLiDS +# s1gy6r7vGbnJsRLn8aR4zZ50VV1/2b+SkKvKbvzEKDs+gwu+J+fjuW0sL0+bIDCC +# BqMwggSLoAMCAQICEHhKqoFzZpyQCVTkIclH68AwDQYJKoZIhvcNAQEMBQAwTDEg +# MB4GA1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjYxEzARBgNVBAoTCkdsb2Jh +# bFNpZ24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMjAxMjA5MDAwMDAwWhcNMzQx +# MjEwMDAwMDAwWjBTMQswCQYDVQQGEwJCRTEZMBcGA1UEChMQR2xvYmFsU2lnbiBu +# di1zYTEpMCcGA1UEAxMgR2xvYmFsU2lnbiBUaW1lc3RhbXBpbmcgUm9vdCBSNDUw +# ggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC6dDPsJ9wSOCEbxdNhKNZa +# vE/fi8yRhEMkV7xkIbw7HB89T4ytB7fzxdcC6REUgpqqtJRyO3ENGu9oa4V5jq9m +# 6liYDbrBfHnS/82zbzFF0AV0BAByaid+uDc/Oojtl4P1qzVND59ZO/Uv31nFfKUy +# dmCWyO3u+AR+GVFyqL9EQXq8ex47AJu8uuCWv5D+jZvDcosAEvggOmA498HMhYr7 +# h3kuoSsg5sughZEjtsQoB1Qo3uwQMU+K8s0UHx7dVRzqKDFM+SFqqM3zlmf6AUGb +# zQ8LaH+73vFD6hflsNxwIrNpNll0a8bliSp85QuBXas/j7jRdnLzfKKp4pdBv8yM +# Rf5hyfZsBwsABOgVI0+CKi3278P6ETZIodH9ejk6NF2jLA6bd1AgNEDdsQMxrV/p +# YodzlgNh95Sw2VxsT+cUxeHxew0jnM1wjB1q3kotiyq720IUBQeq+xTcMdP2H2zL +# vmhmRHBNbRf5cesFc46RknXraFwe9kRhGCli3RdmiOwouklv2z53/rkxH3UcGKKm +# R73Y7kiFO/2z4g8/KpjGmvqCb7GlpYYdWjr6pGx0D3dSYWp/hyneOZuL7rNFYDAk +# lxUSKoUwkyaslqYt6HBtC6kyrSybKAp2QvJVYVGYlN7t9sUXbzwVELAOrbDexRb0 +# ZdHML1pWCM+ZxPBVkcIseQIDAQABo4IBeDCCAXQwDgYDVR0PAQH/BAQDAgGGMBMG +# A1UdJQQMMAoGCCsGAQUFBwMIMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFEay +# HHfhexXwpTmhcN7RxC7qbbLeMB8GA1UdIwQYMBaAFK5sBaOTE+Ki5+LXHNbH8H/I +# Z1OgMHsGCCsGAQUFBwEBBG8wbTAuBggrBgEFBQcwAYYiaHR0cDovL29jc3AyLmds +# b2JhbHNpZ24uY29tL3Jvb3RyNjA7BggrBgEFBQcwAoYvaHR0cDovL3NlY3VyZS5n +# bG9iYWxzaWduLmNvbS9jYWNlcnQvcm9vdC1yNi5jcnQwNgYDVR0fBC8wLTAroCmg +# J4YlaHR0cDovL2NybC5nbG9iYWxzaWduLmNvbS9yb290LXI2LmNybDBHBgNVHSAE +# QDA+MDwGBFUdIAAwNDAyBggrBgEFBQcCARYmaHR0cHM6Ly93d3cuZ2xvYmFsc2ln +# bi5jb20vcmVwb3NpdG9yeS8wDQYJKoZIhvcNAQEMBQADggIBAItIujZXPHLF2nX5 +# 7zL1hr3cEijjiC5PNl8mmewPASEQlpI4xnBrbfOu1A69Je+Gf+KJjZWlfilEA02q +# mKjxt9zqKWMh3O3NiArLEGlheSlCDCO86cXvUh4vMzfVT2Z6ZqlHVDOx3Rby2GRx +# ozGU5W/2TUvihGzQySVnT8hL0M5LBdY9+31B+oqxwCHgfgiw2WQr+eryxwr0zy4M +# NGDubLuS8D/xe1ISaHdZgfUcLqQ6jDkDDe3lzK9mSHlj1Um4/0vSJU9ITpM7k3ew +# mkhstqAds3SeX70iBDt8Nw2FtcOau92cWgONtA2fTHY01YWtRXu1n7suibusyL+S +# Y0jGP8oXqg28ABFfi+jjQ4SKQzTN/TvAonvbH7hnyIwV3j+mf8co76Fvb7JBzwIi +# 6wH4S8jSdm8l317aaGg9e0QEwkFuSTunmFYE7dEmKwSU2+TtZo49gJ2kpFV5UF7j +# +BofwBZvkBU8iqZIoQx7uirgsamHBUab7SVVPTdpmO1GmZiFRwoeYtv9nOXBQ0KO +# vc9v9oyR/YLkn+yt45VVBfNJL2009/9n7plAu9OagEJA2iOJYB+DcZK16ebKCvnd +# x2yyWEGcZo2bKm8fb1cEQ1yDXTtpnN45+oRNNfN7G22L8W8DwSlS4pS/e1SL30B6 +# C3ACdz8viAcCAHXSr8bWIjIZozvoMIIFgzCCA2ugAwIBAgIORea7A4Mzw4VlSOb/ +# RVEwDQYJKoZIhvcNAQEMBQAwTDEgMB4GA1UECxMXR2xvYmFsU2lnbiBSb290IENB +# IC0gUjYxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2JhbFNpZ24w +# HhcNMTQxMjEwMDAwMDAwWhcNMzQxMjEwMDAwMDAwWjBMMSAwHgYDVQQLExdHbG9i +# YWxTaWduIFJvb3QgQ0EgLSBSNjETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UE +# AxMKR2xvYmFsU2lnbjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAJUH +# 6HPKZvnsFMp7PPcNCPG0RQssgrRIxutbPK6DuEGSMxSkb3/pKszGsIhrxbaJ0cay +# /xTOURQh7ErdG1rG1ofuTToVBu1kZguSgMpE3nOUTvOniX9PeGMIyBJQbUJmL025 +# eShNUhqKGoC3GYEOfsSKvGRMIRxDaNc9PIrFsmbVkJq3MQbFvuJtMgamHvm566qj +# uL++gmNQ0PAYid/kD3n16qIfKtJwLnvnvJO7bVPiSHyMEAc4/2ayd2F+4OqMPKq0 +# pPbzlUoSB239jLKJz9CgYXfIWHSw1CM69106yqLbnQneXUQtkPGBzVeS+n68UARj +# NN9rkxi+azayOeSsJDa38O+2HBNXk7besvjihbdzorg1qkXy4J02oW9UivFyVm4u +# iMVRQkQVlO6jxTiWm05OWgtH8wY2SXcwvHE35absIQh1/OZhFj931dmRl4QKbNQC +# TXTAFO39OfuD8l4UoQSwC+n+7o/hbguyCLNhZglqsQY6ZZZZwPA1/cnaKI0aEYdw +# gQqomnUdnjqGBQCe24DWJfncBZ4nWUx2OVvq+aWh2IMP0f/fMBH5hc8zSPXKbWQU +# LHpYT9NLCEnFlWQaYw55PfWzjMpYrZxCRXluDocZXFSxZba/jJvcE+kNb7gu3Gdu +# yYsRtYQUigAZcIN5kZeR1BonvzceMgfYFGM8KEyvAgMBAAGjYzBhMA4GA1UdDwEB +# /wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSubAWjkxPioufi1xzW +# x/B/yGdToDAfBgNVHSMEGDAWgBSubAWjkxPioufi1xzWx/B/yGdToDANBgkqhkiG +# 9w0BAQwFAAOCAgEAgyXt6NH9lVLNnsAEoJFp5lzQhN7craJP6Ed41mWYqVuoPId8 +# AorRbrcWc+ZfwFSY1XS+wc3iEZGtIxg93eFyRJa0lV7Ae46ZeBZDE1ZXs6KzO7V3 +# 3EByrKPrmzU+sQghoefEQzd5Mr6155wsTLxDKZmOMNOsIeDjHfrYBzN2VAAiKrlN +# IC5waNrlU/yDXNOd8v9EDERm8tLjvUYAGm0CuiVdjaExUd1URhxN25mW7xocBFym +# Fe944Hn+Xds+qkxV/ZoVqW/hpvvfcDDpw+5CRu3CkwWJ+n1jez/QcYF8AOiYrg54 +# NMMl+68KnyBr3TsTjxKM4kEaSHpzoHdpx7Zcf4LIHv5YGygrqGytXm3ABdJ7t+uA +# /iU3/gKbaKxCXcPu9czc8FB10jZpnOZ7BN9uBmm23goJSFmH63sUYHpkqmlD75HH +# TOwY3WzvUy2MmeFe8nI+z1TIvWfspA9MRf/TuTAjB0yPEL+GltmZWrSZVxykzLsV +# iVO6LAUP5MSeGbEYNNVMnbrt9x+vJJUEeKgDu+6B5dpffItKoZB0JaezPkvILFa9 +# x8jvOOJckvB595yEunQtYQEgfn7R8k8HWV+LLUNS60YMlOH1Zkd5d9VUWx+tJDfL +# RVpOoERIyNiwmcUVhAn21klJwGW45hpxbqCo8YLoRT5s1gLXCmeDBVrJpBAxggNh +# MIIDXQIBATBzMF4xCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52 +# LXNhMTQwMgYDVQQDEytHbG9iYWxTaWduIE9mZmxpbmUgUjQ1IFRpbWVzdGFtcGlu +# ZyBDQSAyMDI1AhEAhHI/wZXMFvHbK6L2YN8r5DALBglghkgBZQMEAgKgggFBMBoG +# CSqGSIb3DQEJAzENBgsqhkiG9w0BCRABBDArBgkqhkiG9w0BCTQxHjAcMAsGCWCG +# SAFlAwQCAqENBgkqhkiG9w0BAQwFADA/BgkqhkiG9w0BCQQxMgQwn8/a5ICZOfX+ +# jrXPJJjjGO8Wld4jifqMppBat5NZHkUFTNnQkfZWwXEIE8F/hoaXMIG0BgsqhkiG +# 9w0BCRACLzGBpDCBoTCBnjCBmwQggyrXLlI/3qyD+kaUvOfGzCYXZIgoZlZliMit +# yjqDhVEwdzBipGAwXjELMAkGA1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24g +# bnYtc2ExNDAyBgNVBAMTK0dsb2JhbFNpZ24gT2ZmbGluZSBSNDUgVGltZXN0YW1w +# aW5nIENBIDIwMjUCEQCEcj/BlcwW8dsrovZg3yvkMA0GCSqGSIb3DQEBDAUABIIB +# gDk8GMHyHygALrfmU9XO4kaGQdG/j/WJJa/xGtWq3iMLxnJwMfmlVAi+1thfIlET +# jm3suOfceuF6MazEvrg2EtcK3APcemEEGOUm+FLSGPJ6Ok5RWoYp9UU7edNB2fbz +# a1gbqq8HzjxnVw2xqH4T3U+/mlgycfNWvoLGKq6Vk/JXUrpKEhkQgPklHz0AIYhh +# k+dWmYeZz36Rnrdjzmz1gl3hezHKC/29oem60kFxbGzvIOta4XKCFlmgI5qpj69K +# 0fDmYNx1m9fRVvj9Yej+5Bn7jlhAATxYY2V9w9AFdeAZ935Xh99XQGX0+IqaEG/I +# HCtN1unYlshiaKRLjvhQ85VyxXdmxUAP6N0ID45oMe9uS+H9/cRI8mQGQf21q6bu +# 6RLdrjynqD2ZJWOLH5ZQPFlm+zawBUl56c5OSfQVBeeAhnnxKZtSpRWVSyaKDcD6 +# OHUg12FZWxNirlw7pbo3EIPgXu4jh0kO45OoxENNHBTw+HyiQiewia5ybbbxUvKT +# Pw== +# SIG # End signature block