LitmusEdgeManager 2.31.x API Documentation/Edge Lifecycle Management/Edge Devices - LE, LEM, LUNS API Docs
Licenses Expiring in x Days
GET {{LEM_URL}}/api/v1/device-licenses-monitor/expiring?expiryDays=10&projectId={{project_id}}
Licenses Expiring in x Days
Returns devices whose licenses will expire within expiryDays days. Used for proactive renewal alerts.
Endpoint
GET {{LEM_URL}}/api/v1/device-licenses-monitor/expiring?expiryDays=10&projectId={{project_id}}
Authentication
HTTP Basic Auth. Username is your API token, password is empty. Tokens are managed under System > Access Control > Tokens.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
expiryDays |
integer | Yes | Days until expiry threshold. |
projectId |
string | Yes | Project UUID. |
Errors
| HTTP status | When it happens |
|---|---|
400 Bad Request |
Missing or malformed query/body parameter. |
401 Unauthorized |
Missing or invalid credentials. |
403 Forbidden |
Token lacks permission for this operation. |
404 Not Found |
Target entity does not exist. |
5xx |
Service is unreachable, restarting, or internally errored. Inspect device logs under System > Support. |
TLS note: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.
Response
Status: 200 OK
[
{
"projectId": "string",
"deviceId": "string",
"deviceDescription": "string",
"lastUpdate": "2019-08-24T14:15:22Z",
"license": {
"version": "PREMIUM",
"defaultLicenseValidity": 0,
"trialLength": 0,
"allowVm": true,
"numberOfSlots": 0,
"customFields": {
"property1": "string",
"property2": "string"
},
"keys": {
"property1": true,
"property2": true
}
},
"licenseStatus": "UNKNOWN",
"prettyName": "string"
}
]
Expired Licenses
GET {{LEM_URL}}/api/v1/device-licenses-monitor/expired?projectId={{project_id}}
Expired Licenses
Returns devices whose licenses have already expired in the project.
Endpoint
GET {{LEM_URL}}/api/v1/device-licenses-monitor/expired?projectId={{project_id}}
Authentication
HTTP Basic Auth. Username is your API token, password is empty. Tokens are managed under System > Access Control > Tokens.
Errors
| HTTP status | When it happens |
|---|---|
400 Bad Request |
Missing or malformed query/body parameter. |
401 Unauthorized |
Missing or invalid credentials. |
403 Forbidden |
Token lacks permission for this operation. |
404 Not Found |
Target entity does not exist. |
5xx |
Service is unreachable, restarting, or internally errored. Inspect device logs under System > Support. |
TLS note: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.
Response
Status: 200 OK
[
{
"projectId": "string",
"deviceId": "string",
"deviceDescription": "string",
"lastUpdate": "2019-08-24T14:15:22Z",
"license": {
"version": "PREMIUM",
"defaultLicenseValidity": 0,
"trialLength": 0,
"allowVm": true,
"numberOfSlots": 0,
"customFields": {
"property1": "string",
"property2": "string"
},
"keys": {
"property1": true,
"property2": true
}
},
"licenseStatus": "UNKNOWN",
"prettyName": "string"
}
]
Device Tags
GET {{LEM_URL}}/api/v1/device/tags?projectId={{project_id}}
Device Tags
Returns the set of operator-assigned tag strings across every device in the project. Use as the source for a tag-filter picker in the LEM UI.
Endpoint
GET {{LEM_URL}}/api/v1/device/tags?projectId={{project_id}}
Authentication
HTTP Basic Auth. Username is your API token, password is empty. Tokens are managed under System > Access Control > Tokens.
Response
200 OK -- application/json. Array of strings.
Errors
| HTTP status | When it happens |
|---|---|
400 Bad Request |
Missing or malformed query/body parameter. |
401 Unauthorized |
Missing or invalid credentials. |
403 Forbidden |
Token lacks permission for this operation. |
404 Not Found |
Target entity does not exist. |
5xx |
Service is unreachable, restarting, or internally errored. Inspect device logs under System > Support. |
TLS note: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.
Response
Status: 200 OK
[
"string"
]
Device Version
GET {{LEM_URL}}/api/v1/device/versions?projectId={{project_id}}
Device Version
Returns version distribution: each entry is one LE firmware version with the count of devices running it.
Endpoint
GET {{LEM_URL}}/api/v1/device/versions?projectId={{project_id}}
Authentication
HTTP Basic Auth. Username is your API token, password is empty. Tokens are managed under System > Access Control > Tokens.
Response
200 OK -- application/json. Array of {version, cnt} objects.
Errors
| HTTP status | When it happens |
|---|---|
400 Bad Request |
Missing or malformed query/body parameter. |
401 Unauthorized |
Missing or invalid credentials. |
403 Forbidden |
Token lacks permission for this operation. |
404 Not Found |
Target entity does not exist. |
5xx |
Service is unreachable, restarting, or internally errored. Inspect device logs under System > Support. |
TLS note: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.
Response
Status: 200 OK
[
{
"version": "3.8.0",
"cnt": 1
}
]
Devices
GET {{LEM_URL}}/api/v1/device?deviceStatus=ACTIVE&filter=&limit=10&order=CREATEDON_DESC&projectId={{project_id}}
Devices
Paginated and filterable device list for one project. Filters: status (ACTIVE / INACTIVE), text filter, sort order. The LEM UI's main device table uses this endpoint.
Endpoint
GET {{LEM_URL}}/api/v1/device?deviceStatus=ACTIVE&filter=&limit=10&order=CREATEDON_DESC&projectId={{project_id}}
Authentication
HTTP Basic Auth. Username is your API token, password is empty. Tokens are managed under System > Access Control > Tokens.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
projectId |
string | Yes | Project UUID. |
deviceStatus |
string | No | ACTIVE / INACTIVE / ALL. |
filter |
string | No | Free-text filter. |
limit |
integer | No | Page size. |
order |
string | No | Sort, e.g. CREATEDON_DESC, NAME_ASC. |
Errors
| HTTP status | When it happens |
|---|---|
400 Bad Request |
Missing or malformed query/body parameter. |
401 Unauthorized |
Missing or invalid credentials. |
403 Forbidden |
Token lacks permission for this operation. |
404 Not Found |
Target entity does not exist. |
5xx |
Service is unreachable, restarting, or internally errored. Inspect device logs under System > Support. |
TLS note: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.
Response
Status: 200 OK
{
"pageNum": 0,
"pagesCount": 1,
"size": 1,
"totalSize": 1,
"elements": [
{
"projectId": "462j1mq70mph31wa100t1yuxa",
"deviceId": "1a5wiavluwxuhwai5leb1v0hc",
"status": "ACTIVE",
"statusTimestamp": 1691104169000,
"properties": {
"Firmware Version": {
"name": "Firmware Version",
"value": "3.8.0",
"datatype": "String",
"allowUpdateFromDevice": true
},
"Manufacturer": {
"name": "Manufacturer",
"value": "Intel Corporation",
"datatype": "String",
"allowUpdateFromDevice": true
},
"Latitude": {
"name": "Latitude",
"value": "37.3746029",
"datatype": "String",
"allowUpdateFromDevice": true
},
"Model Number": {
"name": "Model Number",
"value": "NUC7i5BNH",
"datatype": "String",
"allowUpdateFromDevice": true
},
"Longitude": {
"name": "Longitude",
"value": "-121.9223647",
"datatype": "String",
"allowUpdateFromDevice": true
},
"Serial Number": {
"name": "Serial Number",
"value": "G6BN80900DC7",
"datatype": "String",
"allowUpdateFromDevice": true
},
"modelName": {
"name": "modelName",
"value": "LoopEdge",
"datatype": "string",
"allowUpdateFromDevice": false
},
"virtualization": {
"name": "virtualization",
"value": null,
"datatype": "String",
"allowUpdateFromDevice": false
}
},
"tags": [],
"type": "LOOPEDGE",
"objects": [
{
"id": 4,
"instance": "null",
"resource": 3,
"objectDescription": "Connectivity Monitoring",
"resourceDescription": "Link Quality",
"mode": [
"READ"
],
"observeStatus": false,
"modeAsInts": [
1
]
}
],
"prettyName": "Litmus Edge (94:c6:91:1b:9c:77)- SJ office sensor",
"description": null,
"config": {
"mqttHostName": "10.17.3.103",
"mqttSslPort": "8883",
"mqttServerCA": "-----BEGIN CERTIFICATE-----\nMIIDSzCCAjOgAwIBAgIUWBhOM2+MjE3RTvyUJBXhciF+UQgwDQYJKoZIhvcNAQELBQAwLTErMCkGA1UEAxMiTGl0bXVzIEVkZ2UgTWFuYWdlciBDQSAyMzA3MjAyMjAyNzAeFw0yMzA3MjEyMDI2MzJaFw00MzA3MTYyMDI3MDJaMC0xKzApBgNVBAMTIkxpdG11cyBFZGdlIE1hbmFnZXIgQ0EgMjMwNzIwMjIwMjcwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCzGo0BV+jkd2GVMC+pkEmOJzEgI4laAjfCXpKR8F2b5CVjwwf17/ordr3Ovc3mf4cBbRmwyw/EKYLeTTPTR/WYlX0P05Q+gCb8VWKwRFy3tn+l62RRt5ucHvGGS9m2ISjOqWWKNodkI7IQahUrHYIFcXEYAJPhzAkav+oj0T9gz88XrZiLidx6czvWo/hRidx/vI/0Fp1x4FiW6S0FTUKIpSZ0BRD/Es4Zfau6bql84j1hDVrbVnjSnjTfmyg7sIFkWrqashHITJmKOnC3SF424sejiopCYoVCSUaJzjRymbkACFruIK6TYIUXkKW+QntlC6Q0+HB5rVh+45onfOHpAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRFEAElhG/8N7UTMscJjL9YerjlrTAfBgNVHSMEGDAWgBRFEAElhG/8N7UTMscJjL9YerjlrTANBgkqhkiG9w0BAQsFAAOCAQEAk92foXaLi5l6RrSOwuwdk8yTnKn3Jdh4r2mSj8Pp1ywY8KsZqP/DbnZ9YaDAd3m56bEPWrgnIByRZQRjBLM6g3RJVZjzG/ZCDkGGHho5WcoJ8v8+ebnO4P2U83A883cwA6/0HhrSyb3mRMWaaUHMS5KMHlNphR/2G5RUcocXjMbzrH4bwZmoE/PlWyTEpquWI1kobOynbeJhVPngUCgddNr3sVAAywK1oTeCoLucmRI8SlnKSqSD10Chp6JVqSPL/E1uwBC1o5Doju2iYBYGayD8WQMZ8MR8zRO1/FORTT6Jp4FDlv4HDM8QUHChx2qjb0+sjjbMfxyDVorLjHegQA==\n-----END CERTIFICATE-----",
"mqttUserName": "1a5wiavluwxuhwai5leb1v0hc",
"mqttPassword": "r4vobd6cin9i85aq9fdljt4epb",
"mqttClientId": "1a5wiavluwxuhwai5leb1v0hc",
"mqttReqTopicName": "loop/req/1a5wiavluwxuhwai5leb1v0hc/462j1mq70mph31wa100t1yuxa/json",
"mqttRespTopicName": "loop/resp/1a5wiavluwxuhwai5leb1v0hc/462j1mq70mph31wa100t1yuxa/json",
"mqttDataTopicName": "loop/data/1a5wiavluwxuhwai5leb1v0hc/462j1mq70mph31wa100t1yuxa/json",
"mqttEventsTopicName": "loop/events/1a5wiavluwxuhwai5leb1v0hc/462j1mq70mph31wa100t1yuxa/json",
"mqttDhTopicName": "loop/dh/1a5wiavluwxuhwai5leb1v0hc/462j1mq70mph31wa100t1yuxa/json",
"mgmtReqTopic": "mgmt/1a5wiavluwxuhwai5leb1v0hc/req",
"mgmtRespTopic": "mgmt/1a5wiavluwxuhwai5leb1v0hc/resp",
"lwm2mHostName": "",
"lwm2mPortDtls": "",
"lwm2mEndpoint": "%LWM2M_ENDPOINT%",
"lwm2mPSKIdentity": "%LWM2M_PSK_IDENITY%",
"lwm2mPSKValue": "%LWM2M_PSK_VALUE%",
"lwm2mPSKValueHex": "%LWM2M_PSK_VALUE_HEX%",
"remoteNetwork": null,
"deviceId": "1a5wiavluwxuhwai5leb1v0hc",
"registryUrlExternal": "10.17.3.103",
"registryUserName": "dev-1a5wiavluwxuhwai5leb1v0hc",
"registryPassword": "170iyf84k7lbsu55yrqdu1f8e",
"licensingHostId": "epnzlne5ego1ttsvbruye6f61"
},
"modelId": "6vuut3v2qm36fv7smna42ckj3",
"createdAt": 1691103970000,
"hasParent": false,
"hasChildren": true,
"parentId": null,
"runtimeStatus": {
"lwm2m_last_update": null,
"wg_online": "true",
"wg_client_address": "192.168.127.4/32",
"mqtt_client_address": null,
"poll_status": null,
"lwm2m_client_address": null,
"wg_registration_date": "1695406968000",
"wg_last_seen_date": "1697135563000",
"lwm2m_registration_date": null
},
"activationCode": "V9ZUA-DY6FX-CFC7V-JJY7D-V3OVF",
"remoteId": "19a0049b29",
"remoteAccessStatus": null,
"remoteAccessUrls": null,
"deleted": false,
"nextPollTime": null,
"lastPollTime": null,
"entryID": 33,
"instanceId": 0,
"imageURL": null,
"imagePreviewURL": null,
"hostname": "litmus-edge-94c6911b9c77",
"hasImage": false,
"lastKnownIpData": null,
"lastSeenDateData": null,
"lastKnownIpCtl": "192.168.127.4/32",
"lastSeenDateCtl": 1697135563000,
"activationStatus": {
"status": "ACTIVATED",
"details": "Device is activated",
"activationCode": "V9ZUA-DY6FX-CFC7V-JJY7D-V3OVF",
"unactivated": false,
"deactivated": false,
"activated": true
},
"passwordPolicyId": "default_password_policy",
"capabilities": {
"EVENTS": {
"name": "EVENTS",
"available": true,
"unavailabilityReason": "Capability is available"
},
"SERVICES": {
"name": "SERVICES",
"available": true,
"unavailabilityReason": "Capability is available"
},
"REMOTE_UI": {
"name": "REMOTE_UI",
"available": true,
"unavailabilityReason": "Capability is available"
},
"ACTIVATION_V1": {
"name": "ACTIVATION_V1",
"available": false,
"unavailabilityReason": "Activation 1.0 is not available for versions greater or equal to 3.0.0"
},
"METRICS": {
"name": "METRICS",
"available": true,
"unavailabilityReason": "Capability is available"
},
"MARKETPLACE": {
"name": "MARKETPLACE",
"available": true,
"unavailabilityReason": "Capability is available"
},
"DM_V2_API": {
"name": "DM_V2_API",
"available": true,
"unavailabilityReason": "Capability is available"
},
"LWM2M": {
"name": "LWM2M",
"available": false,
"unavailabilityReason": "LwM2M is not available"
},
"MARKETPLACE_SYNC": {
"name": "MARKETPLACE_SYNC",
"available": true,
"unavailabilityReason": "Capability is available"
},
"FLOATING_LICENSING": {
"name": "FLOATING_LICENSING",
"available": true,
"unavailabilityReason": "Capability is available"
},
"BACKUP": {
"name": "BACKUP",
"available": true,
"unavailabilityReason": "Capability is available"
},
"LICENSE_VERSION_V1": {
"name": "LICENSE_VERSION_V1",
"available": false,
"unavailabilityReason": "License API V1 is not available for versions equal to or greater than 3.2.0"
},
"MP_APP_CONTAINER_LOGS": {
"name": "MP_APP_CONTAINER_LOGS",
"available": true,
"unavailabilityReason": "Capability is available"
},
"LICENSE_VERSION_V2": {
"name": "LICENSE_VERSION_V2",
"available": true,
"unavailabilityReason": "Capability is available"
},
"PASSWORD_POLICY": {
"name": "PASSWORD_POLICY",
"available": true,
"unavailabilityReason": "Capability is available"
},
"TEMPLATE_EXPORT": {
"name": "TEMPLATE_EXPORT",
"available": true,
"unavailabilityReason": "Capability is available"
},
"WG_REMOTE": {
"name": "WG_REMOTE",
"available": true,
"unavailabilityReason": "Capability is available"
},
"TEMPLATE_APPLY": {
"name": "TEMPLATE_APPLY",
"available": true,
"unavailabilityReason": "Capability is available"
}
},
"metaDeviceId": null,
"apiKeyPresent": true,
"metricsEnabled": true,
"projectName": "parth",
"ctrlLastUpdate": 1697135563000,
"runningInDocker": false,
"ctrlRegistrationDate": 1695406968000,
"ctrlClientAddress": "192.168.127.4/32",
"ctrlInterfaceType": "WG",
"online": true
}
]
}
Apps List for All Devices
GET {{LEM_URL}}/api/v1/marketplace/app/plain?projectId={{project_id}}
Apps List for All Devices
Returns the installed catalog apps across every device in the project, with current status (RUNNING / STOPPED / ...), image, and installation parameters.
Endpoint
GET {{LEM_URL}}/api/v1/marketplace/app/plain?projectId={{project_id}}
Authentication
HTTP Basic Auth. Username is your API token, password is empty. Tokens are managed under System > Access Control > Tokens.
Response
200 OK -- application/json. Array of app records.
Errors
| HTTP status | When it happens |
|---|---|
400 Bad Request |
Missing or malformed query/body parameter. |
401 Unauthorized |
Missing or invalid credentials. |
403 Forbidden |
Token lacks permission for this operation. |
404 Not Found |
Target entity does not exist. |
5xx |
Service is unreachable, restarting, or internally errored. Inspect device logs under System > Support. |
TLS note: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.
Response
Status: 200 OK
[
{
"id": "ca877b46-1a8c-11ed-8791-94c6911b9c77",
"name": "MySQL",
"status": "RUNNING",
"statusChangedAt": 1697749299000,
"parameters": {
"stack_description": "MySQL is an open-source relational database management system (RDBMS).",
"MYSQL_DATABASE": "sample",
"MYSQL_PASSWORD": "loopedge-s3cr3t!",
"MYSQL_PORT": "3306",
"MYSQL_ROOT_PASSWORD": "loopedge-s3cr3t!",
"MYSQL_USER": "user",
"RESTART": "always",
"stack_name": "MySQL"
},
"catalogId": "c93dbe1b-1a8c-11ed-8d9d-94c6911b9c77",
"catalogApplicationId": "0aa40818-2553-4f1c-8221-dbf19804efe4",
"releaseName": "8.0.23",
"deviceId": "1a5wiavluwxuhwai5leb1v0hc",
"prettyName": "Litmus Edge (94:c6:91:1b:9c:77)- SJ office sensor",
"firmwareVersion": "3.8.0",
"tags": [],
"deviceOnline": true,
"updatedOn": 1697750028703
}
]
Current Device Details
GET {{LEM_URL}}/api/v1/device/{{project_id}}/{{edge_device_id}}
Current Device Details
Returns the full record for one device: status, timestamps, device properties (firmware version, manufacturer, GPS coordinates, tags, etc.).
Endpoint
GET {{LEM_URL}}/api/v1/device/{{project_id}}/{{edge_device_id}}
Authentication
HTTP Basic Auth. Username is your API token, password is empty. Tokens are managed under System > Access Control > Tokens.
Response
200 OK -- application/json. Single device record.
Errors
| HTTP status | When it happens |
|---|---|
400 Bad Request |
Missing or malformed query/body parameter. |
401 Unauthorized |
Missing or invalid credentials. |
403 Forbidden |
Token lacks permission for this operation. |
404 Not Found |
Target entity does not exist. |
5xx |
Service is unreachable, restarting, or internally errored. Inspect device logs under System > Support. |
TLS note: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.
Response
Status: 200 OK
{
"projectId": "462j1mq70mph31wa100t1yuxa",
"deviceId": "1a5wiavluwxuhwai5leb1v0hc",
"status": "ACTIVE",
"statusTimestamp": 1691104169000,
"properties": {
"Firmware Version": {
"name": "Firmware Version",
"value": "3.8.0",
"datatype": "String",
"allowUpdateFromDevice": true
},
"Manufacturer": {
"name": "Manufacturer",
"value": "Intel Corporation",
"datatype": "String",
"allowUpdateFromDevice": true
},
"Latitude": {
"name": "Latitude",
"value": "37.3746029",
"datatype": "String",
"allowUpdateFromDevice": true
},
"Model Number": {
"name": "Model Number",
"value": "NUC7i5BNH",
"datatype": "String",
"allowUpdateFromDevice": true
},
"Longitude": {
"name": "Longitude",
"value": "-121.9223647",
"datatype": "String",
"allowUpdateFromDevice": true
},
"Serial Number": {
"name": "Serial Number",
"value": "G6BN80900DC7",
"datatype": "String",
"allowUpdateFromDevice": true
},
"modelName": {
"name": "modelName",
"value": "LoopEdge",
"datatype": "string",
"allowUpdateFromDevice": false
},
"virtualization": {
"name": "virtualization",
"value": null,
"datatype": "String",
"allowUpdateFromDevice": false
}
},
"tags": [],
"type": "LOOPEDGE",
"objects": [
{
"id": 4,
"instance": "null",
"resource": 3,
"objectDescription": "Connectivity Monitoring",
"resourceDescription": "Link Quality",
"mode": [
"READ"
],
"observeStatus": false,
"modeAsInts": [
1
]
}
],
"prettyName": "Litmus Edge (94:c6:91:1b:9c:77)- SJ office sensor",
"description": null,
"config": {
"mqttHostName": "10.17.3.103",
"mqttSslPort": "8883",
"mqttServerCA": "-----BEGIN CERTIFICATE-----\nMIIDSzCCAjOgAwIBAgIUWBhOM2+MjE3RTvyUJBXhciF+UQgwDQYJKoZIhvcNAQELBQAwLTErMCkGA1UEAxMiTGl0bXVzIEVkZ2UgTWFuYWdlciBDQSAyMzA3MjAyMjAyNzAeFw0yMzA3MjEyMDI2MzJaFw00MzA3MTYyMDI3MDJaMC0xKzApBgNVBAMTIkxpdG11cyBFZGdlIE1hbmFnZXIgQ0EgMjMwNzIwMjIwMjcwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCzGo0BV+jkd2GVMC+pkEmOJzEgI4laAjfCXpKR8F2b5CVjwwf17/ordr3Ovc3mf4cBbRmwyw/EKYLeTTPTR/WYlX0P05Q+gCb8VWKwRFy3tn+l62RRt5ucHvGGS9m2ISjOqWWKNodkI7IQahUrHYIFcXEYAJPhzAkav+oj0T9gz88XrZiLidx6czvWo/hRidx/vI/0Fp1x4FiW6S0FTUKIpSZ0BRD/Es4Zfau6bql84j1hDVrbVnjSnjTfmyg7sIFkWrqashHITJmKOnC3SF424sejiopCYoVCSUaJzjRymbkACFruIK6TYIUXkKW+QntlC6Q0+HB5rVh+45onfOHpAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRFEAElhG/8N7UTMscJjL9YerjlrTAfBgNVHSMEGDAWgBRFEAElhG/8N7UTMscJjL9YerjlrTANBgkqhkiG9w0BAQsFAAOCAQEAk92foXaLi5l6RrSOwuwdk8yTnKn3Jdh4r2mSj8Pp1ywY8KsZqP/DbnZ9YaDAd3m56bEPWrgnIByRZQRjBLM6g3RJVZjzG/ZCDkGGHho5WcoJ8v8+ebnO4P2U83A883cwA6/0HhrSyb3mRMWaaUHMS5KMHlNphR/2G5RUcocXjMbzrH4bwZmoE/PlWyTEpquWI1kobOynbeJhVPngUCgddNr3sVAAywK1oTeCoLucmRI8SlnKSqSD10Chp6JVqSPL/E1uwBC1o5Doju2iYBYGayD8WQMZ8MR8zRO1/FORTT6Jp4FDlv4HDM8QUHChx2qjb0+sjjbMfxyDVorLjHegQA==\n-----END CERTIFICATE-----",
"mqttUserName": "1a5wiavluwxuhwai5leb1v0hc",
"mqttPassword": "r4vobd6cin9i85aq9fdljt4epb",
"mqttClientId": "1a5wiavluwxuhwai5leb1v0hc",
"mqttReqTopicName": "loop/req/1a5wiavluwxuhwai5leb1v0hc/462j1mq70mph31wa100t1yuxa/json",
"mqttRespTopicName": "loop/resp/1a5wiavluwxuhwai5leb1v0hc/462j1mq70mph31wa100t1yuxa/json",
"mqttDataTopicName": "loop/data/1a5wiavluwxuhwai5leb1v0hc/462j1mq70mph31wa100t1yuxa/json",
"mqttEventsTopicName": "loop/events/1a5wiavluwxuhwai5leb1v0hc/462j1mq70mph31wa100t1yuxa/json",
"mqttDhTopicName": "loop/dh/1a5wiavluwxuhwai5leb1v0hc/462j1mq70mph31wa100t1yuxa/json",
"mgmtReqTopic": "mgmt/1a5wiavluwxuhwai5leb1v0hc/req",
"mgmtRespTopic": "mgmt/1a5wiavluwxuhwai5leb1v0hc/resp",
"lwm2mHostName": "",
"lwm2mPortDtls": "",
"lwm2mEndpoint": "%LWM2M_ENDPOINT%",
"lwm2mPSKIdentity": "%LWM2M_PSK_IDENITY%",
"lwm2mPSKValue": "%LWM2M_PSK_VALUE%",
"lwm2mPSKValueHex": "%LWM2M_PSK_VALUE_HEX%",
"remoteNetwork": null,
"deviceId": "1a5wiavluwxuhwai5leb1v0hc",
"registryUrlExternal": "10.17.3.103",
"registryUserName": "dev-1a5wiavluwxuhwai5leb1v0hc",
"registryPassword": "170iyf84k7lbsu55yrqdu1f8e",
"licensingHostId": "epnzlne5ego1ttsvbruye6f61"
},
"modelId": "6vuut3v2qm36fv7smna42ckj3",
"createdAt": 1691103970000,
"hasParent": false,
"hasChildren": true,
"parentId": null,
"runtimeStatus": {
"lwm2m_last_update": null,
"wg_online": "true",
"wg_client_address": "192.168.127.4/32",
"mqtt_client_address": null,
"poll_status": null,
"lwm2m_client_address": null,
"wg_registration_date": "1695406968000",
"wg_last_seen_date": "1697746758000",
"lwm2m_registration_date": null
},
"activationCode": "V9ZUA-DY6FX-CFC7V-JJY7D-V3OVF",
"remoteId": "19a0049b29",
"remoteAccessStatus": null,
"remoteAccessUrls": null,
"deleted": false,
"nextPollTime": null,
"lastPollTime": null,
"entryID": 33,
"instanceId": 0,
"imageURL": null,
"imagePreviewURL": null,
"hostname": "litmus-edge-94c6911b9c77",
"hasImage": false,
"lastKnownIpData": null,
"lastSeenDateData": null,
"lastKnownIpCtl": "192.168.127.4/32",
"lastSeenDateCtl": 1697746758000,
"activationStatus": {
"status": "ACTIVATED",
"details": "Device is activated",
"activationCode": "V9ZUA-DY6FX-CFC7V-JJY7D-V3OVF",
"unactivated": false,
"deactivated": false,
"activated": true
},
"passwordPolicyId": "default_password_policy",
"capabilities": {
"EVENTS": {
"name": "EVENTS",
"available": true,
"unavailabilityReason": "Capability is available"
},
"SERVICES": {
"name": "SERVICES",
"available": true,
"unavailabilityReason": "Capability is available"
},
"REMOTE_UI": {
"name": "REMOTE_UI",
"available": true,
"unavailabilityReason": "Capability is available"
},
"ACTIVATION_V1": {
"name": "ACTIVATION_V1",
"available": false,
"unavailabilityReason": "Activation 1.0 is not available for versions greater or equal to 3.0.0"
},
"METRICS": {
"name": "METRICS",
"available": true,
"unavailabilityReason": "Capability is available"
},
"MARKETPLACE": {
"name": "MARKETPLACE",
"available": true,
"unavailabilityReason": "Capability is available"
},
"DM_V2_API": {
"name": "DM_V2_API",
"available": true,
"unavailabilityReason": "Capability is available"
},
"LWM2M": {
"name": "LWM2M",
"available": false,
"unavailabilityReason": "LwM2M is not available"
},
"MARKETPLACE_SYNC": {
"name": "MARKETPLACE_SYNC",
"available": true,
"unavailabilityReason": "Capability is available"
},
"FLOATING_LICENSING": {
"name": "FLOATING_LICENSING",
"available": true,
"unavailabilityReason": "Capability is available"
},
"BACKUP": {
"name": "BACKUP",
"available": true,
"unavailabilityReason": "Capability is available"
},
"LICENSE_VERSION_V1": {
"name": "LICENSE_VERSION_V1",
"available": false,
"unavailabilityReason": "License API V1 is not available for versions equal to or greater than 3.2.0"
},
"MP_APP_CONTAINER_LOGS": {
"name": "MP_APP_CONTAINER_LOGS",
"available": true,
"unavailabilityReason": "Capability is available"
},
"LICENSE_VERSION_V2": {
"name": "LICENSE_VERSION_V2",
"available": true,
"unavailabilityReason": "Capability is available"
},
"PASSWORD_POLICY": {
"name": "PASSWORD_POLICY",
"available": true,
"unavailabilityReason": "Capability is available"
},
"TEMPLATE_EXPORT": {
"name": "TEMPLATE_EXPORT",
"available": true,
"unavailabilityReason": "Capability is available"
},
"WG_REMOTE": {
"name": "WG_REMOTE",
"available": true,
"unavailabilityReason": "Capability is available"
},
"TEMPLATE_APPLY": {
"name": "TEMPLATE_APPLY",
"available": true,
"unavailabilityReason": "Capability is available"
}
},
"metaDeviceId": null,
"apiKeyPresent": true,
"metricsEnabled": true,
"ctrlLastUpdate": 1697746758000,
"runningInDocker": false,
"ctrlRegistrationDate": 1695406968000,
"ctrlClientAddress": "192.168.127.4/32",
"ctrlInterfaceType": "WG",
"online": true
}
Device Metrics
POST {{LEM_URL}}/api/v1/device/metrics/{{project_id}}
Device Metrics
Returns host-level runtime metrics for the device. Same payload as Dashboard > LE Devices Metrics but scoped to one device (pass [] body to receive all devices; pass [deviceId] to scope down).
Endpoint
POST {{LEM_URL}}/api/v1/device/metrics/{{project_id}}
Authentication
HTTP Basic Auth. Username is your API token, password is empty. Tokens are managed under System > Access Control > Tokens.
Request body
[]
Errors
| HTTP status | When it happens |
|---|---|
400 Bad Request |
Missing or malformed query/body parameter. |
401 Unauthorized |
Missing or invalid credentials. |
403 Forbidden |
Token lacks permission for this operation. |
404 Not Found |
Target entity does not exist. |
5xx |
Service is unreachable, restarting, or internally errored. Inspect device logs under System > Support. |
TLS note: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.
Request Body
[]
Response
Status: 200 OK
[
{
"projectId": "462j1mq70mph31wa100t1yuxa",
"deviceId": "1a5wiavluwxuhwai5leb1v0hc",
"hostname": "litmus-edge-94c6911b9c77",
"friendlyName": "Litmus Edge (94:c6:91:1b:9c:77)- SJ office sensor",
"node": {
"cpuIdle": 89.14849,
"cpuSystem": 4.3094497,
"cpuUser": 6.542056,
"memoryUsed": 29.231947,
"natsInMsgs": 78418628,
"storageAvailable": 122822930432,
"storageSize": 237605920768,
"storageUsed": 113514635264,
"networkReceiveRate": 7030.036,
"networkTransmitRate": 11453.437
},
"dh": {
"devicesCount": 8,
"devices": [
{
"id": "41FBD12E-C6CD-4539-AD50-336D278B207C",
"name": "Rack_2b_M258",
"status": 1,
"tagsCount": 1,
"tagsProcessedRate": 65.454544,
"tagsFailedRate": 0
},
{
"id": "474E42B0-C7B8-42DE-8DE2-FFED7030A563",
"name": "DTA_windows_tia",
"status": 1,
"tagsCount": 0,
"tagsProcessedRate": 0,
"tagsFailedRate": 0
},
{
"id": "4C4B9CCC-F5E4-4C2E-A4C0-EAF5C32B0D1A",
"name": "AB_CLX_API_testing",
"status": 0,
"tagsCount": 1,
"tagsProcessedRate": 0,
"tagsFailedRate": 56.727272
},
{
"id": "779F42F3-54FC-4A87-B9A6-CD39CFA4A97D",
"name": "Simulator2",
"status": 1,
"tagsCount": 4,
"tagsProcessedRate": 261.81818,
"tagsFailedRate": 0
},
{
"id": "89C52E9A-0901-4D8D-B842-7B533F64E1B7",
"name": "ClassificationSimulator",
"status": 1,
"tagsCount": 8,
"tagsProcessedRate": 523.63635,
"tagsFailedRate": 0
},
{
"id": "BAFD349E-21B6-408A-AE2F-B9C682912571",
"name": "Boiler",
"status": 0,
"tagsCount": 0,
"tagsProcessedRate": 0,
"tagsFailedRate": 0
},
{
"id": "CDC283FB-72E2-42DF-A587-4D6299D70C9A",
"name": "sim1",
"status": 1,
"tagsCount": 2,
"tagsProcessedRate": 130.90909,
"tagsFailedRate": 0
},
{
"id": "EEF5EE7F-54C7-415A-B1C7-4F9386112DEB",
"name": "D14_Boiler_Power_PAC4200",
"status": 0,
"tagsCount": 0,
"tagsProcessedRate": 0,
"tagsFailedRate": 0
}
]
},
"cc": {
"connectorsCount": 3,
"connectors": [
{
"id": "51370ca3-dc8f-497f-bf91-3b1fba694b4f",
"name": "ClarifyIOssl",
"status": 1,
"rate": 65.454544,
"bufferSize": 26214400
},
{
"id": "aab5e88a-8f02-4ac6-992b-29ca6dc7e1f4",
"name": "default-ssl",
"status": 0,
"rate": 0,
"bufferSize": 0
},
{
"id": "b191617a-8cb8-454f-9091-1e5e31448fb7",
"name": "data-rate-test",
"status": 0,
"rate": 0,
"bufferSize": 0
}
]
}
}
]
Metrics Pulling Start
POST {{LEM_URL}}/api/v1/device/metrics?projectId={{project_id}}&deviceId={{device_id}}&enabled=true
Metrics Pulling Start
Enables periodic metrics polling for one device. LEM begins pulling host-level metrics on its configured interval (see Settings > Settings - Edge Device Metrics Sync Interval).
Endpoint
POST {{LEM_URL}}/api/v1/device/metrics?projectId={{project_id}}&deviceId={{device_id}}&enabled=true
Authentication
HTTP Basic Auth. Username is your API token, password is empty. Tokens are managed under System > Access Control > Tokens.
Response
{ "code": "S", "message": null, "messageDetails": null }
Errors
| HTTP status | When it happens |
|---|---|
400 Bad Request |
Missing or malformed query/body parameter. |
401 Unauthorized |
Missing or invalid credentials. |
403 Forbidden |
Token lacks permission for this operation. |
404 Not Found |
Target entity does not exist. |
5xx |
Service is unreachable, restarting, or internally errored. Inspect device logs under System > Support. |
TLS note: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.
Response
Status: 200 OK
{
"code": "S",
"message": null,
"messageDetails": null
}
Metrics Pulling Stop
POST {{LEM_URL}}/api/v1/device/metrics?projectId={{project_id}}&deviceId={{device_id}}&enabled=false
Metrics Pulling Stop
Disables periodic metrics polling for one device. Inverse of Metrics Pulling Start.
Endpoint
POST {{LEM_URL}}/api/v1/device/metrics?projectId={{project_id}}&deviceId={{device_id}}&enabled=false
Authentication
HTTP Basic Auth. Username is your API token, password is empty. Tokens are managed under System > Access Control > Tokens.
Errors
| HTTP status | When it happens |
|---|---|
400 Bad Request |
Missing or malformed query/body parameter. |
401 Unauthorized |
Missing or invalid credentials. |
403 Forbidden |
Token lacks permission for this operation. |
404 Not Found |
Target entity does not exist. |
5xx |
Service is unreachable, restarting, or internally errored. Inspect device logs under System > Support. |
TLS note: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.
Response
Status: 200 OK
{
"code": "S",
"message": null,
"messageDetails": null
}
Services
GET {{LEM_URL}}/api/v1/loopedge-dm/service?deviceId={{device_id}}&projectId={{project_id}}
Services
Returns the system services running on the device with their current status (STARTED / STOPPED) and the restartable flag.
Endpoint
GET {{LEM_URL}}/api/v1/loopedge-dm/service?deviceId={{device_id}}&projectId={{project_id}}
Authentication
HTTP Basic Auth. Username is your API token, password is empty. Tokens are managed under System > Access Control > Tokens.
Response
200 OK -- application/json. Array of {name, desc, restartable, status} entries.
Errors
| HTTP status | When it happens |
|---|---|
400 Bad Request |
Missing or malformed query/body parameter. |
401 Unauthorized |
Missing or invalid credentials. |
403 Forbidden |
Token lacks permission for this operation. |
404 Not Found |
Target entity does not exist. |
5xx |
Service is unreachable, restarting, or internally errored. Inspect device logs under System > Support. |
TLS note: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.
Response
Status: 200 OK
[
{
"name": "zerotier",
"desc": "Remote Access",
"restartable": false,
"status": "STARTED"
},
{
"name": "ssh",
"desc": "SSH",
"restartable": false,
"status": "STARTED"
}
]
Start Service
POST {{LEM_URL}}/api/v1/loopedge-dm/service/start/{{device_service}}?projectId={{project_id}}&deviceId={{device_id}}
Start Service
Starts a system service on the device (e.g. ssh, zerotier).
Endpoint
POST {{LEM_URL}}/api/v1/loopedge-dm/service/start/{{device_service}}?projectId={{project_id}}&deviceId={{device_id}}
Authentication
HTTP Basic Auth. Username is your API token, password is empty. Tokens are managed under System > Access Control > Tokens.
Errors
| HTTP status | When it happens |
|---|---|
400 Bad Request |
Missing or malformed query/body parameter. |
401 Unauthorized |
Missing or invalid credentials. |
403 Forbidden |
Token lacks permission for this operation. |
404 Not Found |
Target entity does not exist. |
5xx |
Service is unreachable, restarting, or internally errored. Inspect device logs under System > Support. |
TLS note: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.
Response
Status: 200 OK
{
"code": "S",
"message": null,
"messageDetails": null
}
Stop Service
POST {{LEM_URL}}/api/v1/loopedge-dm/service/stop/{{device_service}}?projectId={{project_id}}&deviceId={{device_id}}
Stop Service
Stops a system service on the device.
Endpoint
POST {{LEM_URL}}/api/v1/loopedge-dm/service/stop/{{device_service}}?projectId={{project_id}}&deviceId={{device_id}}
Authentication
HTTP Basic Auth. Username is your API token, password is empty. Tokens are managed under System > Access Control > Tokens.
Errors
| HTTP status | When it happens |
|---|---|
400 Bad Request |
Missing or malformed query/body parameter. |
401 Unauthorized |
Missing or invalid credentials. |
403 Forbidden |
Token lacks permission for this operation. |
404 Not Found |
Target entity does not exist. |
5xx |
Service is unreachable, restarting, or internally errored. Inspect device logs under System > Support. |
TLS note: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.
Response
Status: 200 OK
{
"code": "S",
"message": null,
"messageDetails": null
}
Get Current API key (masked)
GET {{LEM_URL}}/api/v1/device/api-key/{{project_id}}/{{edge_device_id}}/masked
Get Current API key (masked)
Returns the device's currently-bound LE API key with most of the value masked (only the last 4 characters are shown). Use to confirm the key in use without exposing the secret.
Endpoint
GET {{LEM_URL}}/api/v1/device/api-key/{{project_id}}/{{edge_device_id}}/masked
Authentication
HTTP Basic Auth. Username is your API token, password is empty. Tokens are managed under System > Access Control > Tokens.
Response
{ "value": "****************************sf6r" }
Errors
| HTTP status | When it happens |
|---|---|
400 Bad Request |
Missing or malformed query/body parameter. |
401 Unauthorized |
Missing or invalid credentials. |
403 Forbidden |
Token lacks permission for this operation. |
404 Not Found |
Target entity does not exist. |
5xx |
Service is unreachable, restarting, or internally errored. Inspect device logs under System > Support. |
TLS note: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.
Response
Status: 200 OK
{
"value": "****************************sf6r"
}
Save API token for Edge Device
POST {{LEM_URL}}/api/v1/device/api-key/{{project_id}}/{{edge_device_id}}
Save API token for Edge Device
Stores an LE API token that LEM will use when calling the device's local API. Pass the full clear-text token in the body. After saving, the token is referenced internally and only the masked form is returned by Get Current API key (masked).
Endpoint
POST {{LEM_URL}}/api/v1/device/api-key/{{project_id}}/{{edge_device_id}}
Authentication
HTTP Basic Auth. Username is your API token, password is empty. Tokens are managed under System > Access Control > Tokens.
Request body
{ "value": "ww9vg9dknwruvafxetr0x11c6kq3sf6r" }
Errors
| HTTP status | When it happens |
|---|---|
400 Bad Request |
Missing or malformed query/body parameter. |
401 Unauthorized |
Missing or invalid credentials. |
403 Forbidden |
Token lacks permission for this operation. |
404 Not Found |
Target entity does not exist. |
5xx |
Service is unreachable, restarting, or internally errored. Inspect device logs under System > Support. |
TLS note: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.
Request Body
{
"value": "ww9vg9dknwruvafxetr0x11c6kq3sf6r"
}
Response
Status: 200 OK
{
"code": "S",
"message": null,
"messageDetails": null
}
Create Support Bundle
GET {{LEM_URL}}/api/v1/loopedge-dm/supportbundle/generate?projectId={{project_id}}&deviceId={{device_id}}
Create Support Bundle
Triggers generation of a support bundle on the target device and downloads it through LEM. The bundle contains LE service logs, configuration, and diagnostic snapshots.
Endpoint
GET {{LEM_URL}}/api/v1/loopedge-dm/supportbundle/generate?projectId={{project_id}}&deviceId={{device_id}}
Authentication
HTTP Basic Auth. Username is your API token, password is empty. Tokens are managed under System > Access Control > Tokens.
Response
200 OK -- streams a .tar.gz. Use Postman's Send and Download to save to disk.
Errors
| HTTP status | When it happens |
|---|---|
400 Bad Request |
Missing or malformed query/body parameter. |
401 Unauthorized |
Missing or invalid credentials. |
403 Forbidden |
Token lacks permission for this operation. |
404 Not Found |
Target entity does not exist. |
5xx |
Service is unreachable, restarting, or internally errored. Inspect device logs under System > Support. |
TLS note: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.
Reboot Device
POST {{LEM_URL}}/api/v1/loopedge-dm/reboot?projectId={{project_id}}&deviceId={{device_id}}
Reboot Device
Reboots the target device. LE services stop, the host reboots, and the device reconnects to LEM after recovery (~1-2 minutes).
Endpoint
POST {{LEM_URL}}/api/v1/loopedge-dm/reboot?projectId={{project_id}}&deviceId={{device_id}}
Authentication
HTTP Basic Auth. Username is your API token, password is empty. Tokens are managed under System > Access Control > Tokens.
Operational note: full blast radius. Reserve for maintenance windows or unrecoverable states.
Errors
| HTTP status | When it happens |
|---|---|
400 Bad Request |
Missing or malformed query/body parameter. |
401 Unauthorized |
Missing or invalid credentials. |
403 Forbidden |
Token lacks permission for this operation. |
404 Not Found |
Target entity does not exist. |
5xx |
Service is unreachable, restarting, or internally errored. Inspect device logs under System > Support. |
TLS note: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.
Response
Status: 200 OK
{
"code": "S",
"message": null,
"messageDetails": null
}
Raw Data
GET {{LEM_URL}}/api/v1/device/raw-native/{{project_id}}/{{edge_device_id}}?from=1697698800000&limit=10&to=1697785199867
Raw Data
Returns the device's raw native payload stream (the OMA/LWM2M-encoded messages flowing through LEM) for a time window. Use for low-level diagnostics.
Endpoint
GET {{LEM_URL}}/api/v1/device/raw-native/{{project_id}}/{{edge_device_id}}?from=1697698800000&limit=10&to=1697785199867
Authentication
HTTP Basic Auth. Username is your API token, password is empty. Tokens are managed under System > Access Control > Tokens.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
from |
integer | Yes | Unix epoch ms (window start). |
to |
integer | Yes | Unix epoch ms (window end). |
limit |
integer | No | Max messages. |
Response
200 OK -- application/json. elements[] of {timestamp, message} pairs.
Errors
| HTTP status | When it happens |
|---|---|
400 Bad Request |
Missing or malformed query/body parameter. |
401 Unauthorized |
Missing or invalid credentials. |
403 Forbidden |
Token lacks permission for this operation. |
404 Not Found |
Target entity does not exist. |
5xx |
Service is unreachable, restarting, or internally errored. Inspect device logs under System > Support. |
TLS note: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.
Response
Status: 200 OK
{
"elements": [
{
"timestamp": 1697748900000,
"message": "{\"timestamp\":1697748892337,\"generatedAt\":0,\"sentAt\":0,\"values\":[{\"objectId\":4,\"instanceId\":\"null\",\"resourceId\":3,\"datatype\":\"int\",\"value\":\"1\",\"meta\":null}],\"httpResponses\":null}"
},
{
"timestamp": 1697748840000,
"message": "{\"timestamp\":1697748832429,\"generatedAt\":0,\"sentAt\":0,\"values\":[{\"objectId\":4,\"instanceId\":\"null\",\"resourceId\":3,\"datatype\":\"int\",\"value\":\"0\",\"meta\":null}],\"httpResponses\":null}"
}
],
"nextPage": null
}
Apps List for Device
GET {{LEM_URL}}/api/v1/marketplace/app/plain?projectId={{project_id}}&deviceId={{device_id}}
Apps List for Device
Returns the catalog apps installed on one device with status and parameters. Scoped form of Edge Devices > General Devices Page > Apps List for All Devices.
Endpoint
GET {{LEM_URL}}/api/v1/marketplace/app/plain?projectId={{project_id}}&deviceId={{device_id}}
Authentication
HTTP Basic Auth. Username is your API token, password is empty. Tokens are managed under System > Access Control > Tokens.
Errors
| HTTP status | When it happens |
|---|---|
400 Bad Request |
Missing or malformed query/body parameter. |
401 Unauthorized |
Missing or invalid credentials. |
403 Forbidden |
Token lacks permission for this operation. |
404 Not Found |
Target entity does not exist. |
5xx |
Service is unreachable, restarting, or internally errored. Inspect device logs under System > Support. |
TLS note: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.
Response
Status: 200 OK
[
{
"id": "ca877b46-1a8c-11ed-8791-94c6911b9c77",
"name": "MySQL",
"status": "RUNNING",
"statusChangedAt": 1697749299000,
"parameters": {
"stack_description": "MySQL is an open-source relational database management system (RDBMS).",
"MYSQL_DATABASE": "sample",
"MYSQL_PORT": "3306",
"MYSQL_PASSWORD": "loopedge-s3cr3t!",
"MYSQL_ROOT_PASSWORD": "loopedge-s3cr3t!",
"MYSQL_USER": "user",
"RESTART": "always",
"stack_name": "MySQL"
},
"catalogId": "c93dbe1b-1a8c-11ed-8d9d-94c6911b9c77",
"catalogApplicationId": "0aa40818-2553-4f1c-8221-dbf19804efe4",
"releaseName": "8.0.23",
"deviceId": "1a5wiavluwxuhwai5leb1v0hc",
"prettyName": "Litmus Edge (94:c6:91:1b:9c:77)- SJ office sensor",
"firmwareVersion": "3.8.0",
"tags": [],
"deviceOnline": true,
"updatedOn": 1697750748701
}
]
Start Application
POST {{LEM_URL}}/api/v1/marketplace/app/start?projectId={{project_id}}&deviceId={{device_id}}&applicationId={{device_app_id}}
Start Application
Starts a stopped catalog app on the device.
Endpoint
POST {{LEM_URL}}/api/v1/marketplace/app/start?projectId={{project_id}}&deviceId={{device_id}}&applicationId={{device_app_id}}
Authentication
HTTP Basic Auth. Username is your API token, password is empty. Tokens are managed under System > Access Control > Tokens.
Errors
| HTTP status | When it happens |
|---|---|
400 Bad Request |
Missing or malformed query/body parameter. |
401 Unauthorized |
Missing or invalid credentials. |
403 Forbidden |
Token lacks permission for this operation. |
404 Not Found |
Target entity does not exist. |
5xx |
Service is unreachable, restarting, or internally errored. Inspect device logs under System > Support. |
TLS note: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.
Response
Status: 200 OK
Stop Application
POST {{LEM_URL}}/api/v1/marketplace/app/stop?projectId={{project_id}}&deviceId={{device_id}}&applicationId={{device_app_id}}
Stop Application
Stops a running catalog app on the device.
Endpoint
POST {{LEM_URL}}/api/v1/marketplace/app/stop?projectId={{project_id}}&deviceId={{device_id}}&applicationId={{device_app_id}}
Authentication
HTTP Basic Auth. Username is your API token, password is empty. Tokens are managed under System > Access Control > Tokens.
Errors
| HTTP status | When it happens |
|---|---|
400 Bad Request |
Missing or malformed query/body parameter. |
401 Unauthorized |
Missing or invalid credentials. |
403 Forbidden |
Token lacks permission for this operation. |
404 Not Found |
Target entity does not exist. |
5xx |
Service is unreachable, restarting, or internally errored. Inspect device logs under System > Support. |
TLS note: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.
Response
Status: 200 OK
App Logs
GET {{LEM_URL}}/api/v1/marketplace/app/log?projectId={{project_id}}&deviceId={{device_id}}&applicationId={{device_app_id}}
App Logs
Returns base64-encoded combined logs of all components of one catalog app on the device. Decode log client-side.
Endpoint
GET {{LEM_URL}}/api/v1/marketplace/app/log?projectId={{project_id}}&deviceId={{device_id}}&applicationId={{device_app_id}}
Authentication
HTTP Basic Auth. Username is your API token, password is empty. Tokens are managed under System > Access Control > Tokens.
Response
200 OK -- application/json with a single log (base64) field.
Errors
| HTTP status | When it happens |
|---|---|
400 Bad Request |
Missing or malformed query/body parameter. |
401 Unauthorized |
Missing or invalid credentials. |
403 Forbidden |
Token lacks permission for this operation. |
404 Not Found |
Target entity does not exist. |
5xx |
Service is unreachable, restarting, or internally errored. Inspect device logs under System > Support. |
TLS note: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.
Response
Status: 200 OK
{
"log": "bXlzcWwtbXlzcWwJfCABAAAAAAAAbDIwMjItMDgtMTIgMjI6MTk6NTIrMDA6MDAgW05vdGVdIFtFbnRyeXBvaW50XTogRW50cnlwb2ludCBzY3JpcHQgZm9yIE15U1FMIFNlcnZlciA4LjAuMjMtMWRlYmlhbjEwIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAQAAAAAAAFMyMDIyLTA4LTEyIDIyOjE5OjUyKzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IFN3aXRjaGluZyB0byBkZWRpY2F0ZWQgdXNlciAnbXlzcWwnCm15c3FsLW15c3FsCXwgAQAAAAAAAGwyMDIyLTA4LTEyIDIyOjE5OjUyKzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IEVudHJ5cG9pbnQgc2NyaXB0IGZvciBNeVNRTCBTZXJ2ZXIgOC4wLjIzLTFkZWJpYW4xMCBzdGFydGVkLgpteXNxbC1teXNxbAl8IAEAAAAAAABLMjAyMi0wOC0xMiAyMjoxOTo1MiswMDowMCBbTm90ZV0gW0VudHJ5cG9pbnRdOiBJbml0aWFsaXppbmcgZGF0YWJhc2UgZmlsZXMKbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMi0wOC0xMlQyMjoxOTo1Mi43ODg0MzJaIDAgW1N5c3RlbV0gW01ZLTAxMzE2OV0gW1NlcnZlcl0gL3Vzci9zYmluL215c3FsZCAobXlzcWxkIDguMC4yMykgaW5pdGlhbGl6aW5nIG9mIHNlcnZlciBpbiBwcm9ncmVzcyBhcyBwcm9jZXNzIDQxCm15c3FsLW15c3FsCXwgAgAAAAAAAF8yMDIyLTA4LTEyVDIyOjE5OjUyLjc5MjYzMVogMSBbU3lzdGVtXSBbTVktMDEzNTc2XSBbSW5ub0RCXSBJbm5vREIgaW5pdGlhbGl6YXRpb24gaGFzIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAAF0yMDIyLTA4LTEyVDIyOjE5OjU3LjY3NjUzN1ogMSBbU3lzdGVtXSBbTVktMDEzNTc3XSBbSW5ub0RCXSBJbm5vREIgaW5pdGlhbGl6YXRpb24gaGFzIGVuZGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIyLTA4LTEyVDIyOjIwOjAzLjcxMTEwMFogNiBbV2FybmluZ10gW01ZLTAxMDQ1M10gW1NlcnZlcl0gcm9vdEBsb2NhbGhvc3QgaXMgY3JlYXRlZCB3aXRoIGFuIGVtcHR5IHBhc3N3b3JkICEgUGxlYXNlIGNvbnNpZGVyIHN3aXRjaGluZyBvZmYgdGhlIC0taW5pdGlhbGl6ZS1pbnNlY3VyZSBvcHRpb24uCm15c3FsLW15c3FsCXwgAQAAAAAAAEoyMDIyLTA4LTEyIDIyOjIwOjE1KzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IERhdGFiYXNlIGZpbGVzIGluaXRpYWxpemVkCm15c3FsLW15c3FsCXwgAQAAAAAAAEkyMDIyLTA4LTEyIDIyOjIwOjE1KzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IFN0YXJ0aW5nIHRlbXBvcmFyeSBzZXJ2ZXIKbXlzcWwtbXlzcWwJfCACAAAAAAAAdDIwMjItMDgtMTJUMjI6MjA6MTUuOTk3MTYxWiAwIFtTeXN0ZW1dIFtNWS0wMTAxMTZdIFtTZXJ2ZXJdIC91c3Ivc2Jpbi9teXNxbGQgKG15c3FsZCA4LjAuMjMpIHN0YXJ0aW5nIGFzIHByb2Nlc3MgODYKbXlzcWwtbXlzcWwJfCACAAAAAAAAXzIwMjItMDgtMTJUMjI6MjA6MTYuMDE3NzgwWiAxIFtTeXN0ZW1dIFtNWS0wMTM1NzZdIFtJbm5vREJdIElubm9EQiBpbml0aWFsaXphdGlvbiBoYXMgc3RhcnRlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAXTIwMjItMDgtMTJUMjI6MjA6MTcuMDg2NDQ0WiAxIFtTeXN0ZW1dIFtNWS0wMTM1NzddIFtJbm5vREJdIElubm9EQiBpbml0aWFsaXphdGlvbiBoYXMgZW5kZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjItMDgtMTJUMjI6MjA6MTcuMjAxNzk5WiAwIFtTeXN0ZW1dIFtNWS0wMTEzMjNdIFtTZXJ2ZXJdIFggUGx1Z2luIHJlYWR5IGZvciBjb25uZWN0aW9ucy4gU29ja2V0OiAvdmFyL3J1bi9teXNxbGQvbXlzcWx4LnNvY2sKbXlzcWwtbXlzcWwJfCACAAAAAAAAYzIwMjItMDgtMTJUMjI6MjA6MTcuMzkwMjkyWiAwIFtXYXJuaW5nXSBbTVktMDEwMDY4XSBbU2VydmVyXSBDQSBjZXJ0aWZpY2F0ZSBjYS5wZW0gaXMgc2VsZiBzaWduZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjItMDgtMTJUMjI6MjA6MTcuMzkwNzAwWiAwIFtTeXN0ZW1dIFtNWS0wMTM2MDJdIFtTZXJ2ZXJdIENoYW5uZWwgbXlzcWxfbWFpbiBjb25maWd1cmVkIHRvIHN1cHBvcnQgVExTLiBFbmNyeXB0ZWQgY29ubmVjdGlvbnMgYXJlIG5vdyBzdXBwb3J0ZWQgZm9yIHRoaXMgY2hhbm5lbC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMi0wOC0xMlQyMjoyMDoxNy4zOTk2MDRaIDAgW1dhcm5pbmddIFtNWS0wMTE4MTBdIFtTZXJ2ZXJdIEluc2VjdXJlIGNvbmZpZ3VyYXRpb24gZm9yIC0tcGlkLWZpbGU6IExvY2F0aW9uICcvdmFyL3J1bi9teXNxbGQnIGluIHRoZSBwYXRoIGlzIGFjY2Vzc2libGUgdG8gYWxsIE9TIHVzZXJzLiBDb25zaWRlciBjaG9vc2luZyBhIGRpZmZlcmVudCBkaXJlY3RvcnkuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjItMDgtMTJUMjI6MjA6MTcuNDM3NTIxWiAwIFtTeXN0ZW1dIFtNWS0wMTA5MzFdIFtTZXJ2ZXJdIC91c3Ivc2Jpbi9teXNxbGQ6IHJlYWR5IGZvciBjb25uZWN0aW9ucy4gVmVyc2lvbjogJzguMC4yMycgIHNvY2tldDogJy92YXIvcnVuL215c3FsZC9teXNxbGQuc29jaycgIHBvcnQ6IDAgIE15U1FMIENvbW11bml0eSBTZXJ2ZXIgLSBHUEwuCm15c3FsLW15c3FsCXwgAQAAAAAAAEkyMDIyLTA4LTEyIDIyOjIwOjE3KzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IFRlbXBvcmFyeSBzZXJ2ZXIgc3RhcnRlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAVVdhcm5pbmc6IFVuYWJsZSB0byBsb2FkICcvdXNyL3NoYXJlL3pvbmVpbmZvL2lzbzMxNjYudGFiJyBhcyB0aW1lIHpvbmUuIFNraXBwaW5nIGl0LgpteXNxbC1teXNxbAl8IAIAAAAAAABbV2FybmluZzogVW5hYmxlIHRvIGxvYWQgJy91c3Ivc2hhcmUvem9uZWluZm8vbGVhcC1zZWNvbmRzLmxpc3QnIGFzIHRpbWUgem9uZS4gU2tpcHBpbmcgaXQuCm15c3FsLW15c3FsCXwgAgAAAAAAAFJXYXJuaW5nOiBVbmFibGUgdG8gbG9hZCAnL3Vzci9zaGFyZS96b25laW5mby96b25lLnRhYicgYXMgdGltZSB6b25lLiBTa2lwcGluZyBpdC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAVldhcm5pbmc6IFVuYWJsZSB0byBsb2FkICcvdXNyL3NoYXJlL3pvbmVpbmZvL3pvbmUxOTcwLnRhYicgYXMgdGltZSB6b25lLiBTa2lwcGluZyBpdC4KbXlzcWwtbXlzcWwJfCABAAAAAAAASDIwMjItMDgtMTIgMjI6MjA6MTkrMDA6MDAgW05vdGVdIFtFbnRyeXBvaW50XTogQ3JlYXRpbmcgZGF0YWJhc2Ugc2FtcGxlCm15c3FsLW15c3FsCXwgAQAAAAAAAEIyMDIyLTA4LTEyIDIyOjIwOjE5KzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IENyZWF0aW5nIHVzZXIgdXNlcgpteXNxbC1teXNxbAl8IAEAAAAAAABYMjAyMi0wOC0xMiAyMjoyMDoxOSswMDowMCBbTm90ZV0gW0VudHJ5cG9pbnRdOiBHaXZpbmcgdXNlciB1c2VyIGFjY2VzcyB0byBzY2hlbWEgc2FtcGxlCm15c3FsLW15c3FsCXwgAQAAAAAAAAEKbXlzcWwtbXlzcWwJfCABAAAAAAAASTIwMjItMDgtMTIgMjI6MjA6MTkrMDA6MDAgW05vdGVdIFtFbnRyeXBvaW50XTogU3RvcHBpbmcgdGVtcG9yYXJ5IHNlcnZlcgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIyLTA4LTEyVDIyOjIwOjE5Ljg4OTcwOFogMTMgW1N5c3RlbV0gW01ZLTAxMzE3Ml0gW1NlcnZlcl0gUmVjZWl2ZWQgU0hVVERPV04gZnJvbSB1c2VyIHJvb3QuIFNodXR0aW5nIGRvd24gbXlzcWxkIChWZXJzaW9uOiA4LjAuMjMpLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIyLTA4LTEyVDIyOjIwOjIzLjI4MzM3N1ogMCBbU3lzdGVtXSBbTVktMDEwOTEwXSBbU2VydmVyXSAvdXNyL3NiaW4vbXlzcWxkOiBTaHV0ZG93biBjb21wbGV0ZSAobXlzcWxkIDguMC4yMykgIE15U1FMIENvbW11bml0eSBTZXJ2ZXIgLSBHUEwuCm15c3FsLW15c3FsCXwgAQAAAAAAAEgyMDIyLTA4LTEyIDIyOjIwOjIzKzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IFRlbXBvcmFyeSBzZXJ2ZXIgc3RvcHBlZApteXNxbC1teXNxbAl8IAEAAAAAAAABCm15c3FsLW15c3FsCXwgAQAAAAAAAFwyMDIyLTA4LTEyIDIyOjIwOjIzKzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IE15U1FMIGluaXQgcHJvY2VzcyBkb25lLiBSZWFkeSBmb3Igc3RhcnQgdXAuCm15c3FsLW15c3FsCXwgAQAAAAAAAAEKbXlzcWwtbXlzcWwJfCACAAAAAAAAczIwMjItMDgtMTJUMjI6MjA6MjQuMTQ2MzUwWiAwIFtTeXN0ZW1dIFtNWS0wMTAxMTZdIFtTZXJ2ZXJdIC91c3Ivc2Jpbi9teXNxbGQgKG15c3FsZCA4LjAuMjMpIHN0YXJ0aW5nIGFzIHByb2Nlc3MgMQpteXNxbC1teXNxbAl8IAIAAAAAAABfMjAyMi0wOC0xMlQyMjoyMDoyNC4xNTM1MTVaIDEgW1N5c3RlbV0gW01ZLTAxMzU3Nl0gW0lubm9EQl0gSW5ub0RCIGluaXRpYWxpemF0aW9uIGhhcyBzdGFydGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAABdMjAyMi0wOC0xMlQyMjoyMDoyNC42NDQzMDFaIDEgW1N5c3RlbV0gW01ZLTAxMzU3N10gW0lubm9EQl0gSW5ub0RCIGluaXRpYWxpemF0aW9uIGhhcyBlbmRlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMi0wOC0xMlQyMjoyMDoyNC43Mzk2NjRaIDAgW1N5c3RlbV0gW01ZLTAxMTMyM10gW1NlcnZlcl0gWCBQbHVnaW4gcmVhZHkgZm9yIGNvbm5lY3Rpb25zLiBCaW5kLWFkZHJlc3M6ICc6OicgcG9ydDogMzMwNjAsIHNvY2tldDogL3Zhci9ydW4vbXlzcWxkL215c3FseC5zb2NrCm15c3FsLW15c3FsCXwgAgAAAAAAAGMyMDIyLTA4LTEyVDIyOjIwOjI0Ljg1NDQ0N1ogMCBbV2FybmluZ10gW01ZLTAxMDA2OF0gW1NlcnZlcl0gQ0EgY2VydGlmaWNhdGUgY2EucGVtIGlzIHNlbGYgc2lnbmVkLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIyLTA4LTEyVDIyOjIwOjI0Ljg1NDcyNlogMCBbU3lzdGVtXSBbTVktMDEzNjAyXSBbU2VydmVyXSBDaGFubmVsIG15c3FsX21haW4gY29uZmlndXJlZCB0byBzdXBwb3J0IFRMUy4gRW5jcnlwdGVkIGNvbm5lY3Rpb25zIGFyZSBub3cgc3VwcG9ydGVkIGZvciB0aGlzIGNoYW5uZWwuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjItMDgtMTJUMjI6MjA6MjQuODYzOTE2WiAwIFtXYXJuaW5nXSBbTVktMDExODEwXSBbU2VydmVyXSBJbnNlY3VyZSBjb25maWd1cmF0aW9uIGZvciAtLXBpZC1maWxlOiBMb2NhdGlvbiAnL3Zhci9ydW4vbXlzcWxkJyBpbiB0aGUgcGF0aCBpcyBhY2Nlc3NpYmxlIHRvIGFsbCBPUyB1c2Vycy4gQ29uc2lkZXIgY2hvb3NpbmcgYSBkaWZmZXJlbnQgZGlyZWN0b3J5LgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIyLTA4LTEyVDIyOjIwOjI0Ljg5MTk5NFogMCBbU3lzdGVtXSBbTVktMDEwOTMxXSBbU2VydmVyXSAvdXNyL3NiaW4vbXlzcWxkOiByZWFkeSBmb3IgY29ubmVjdGlvbnMuIFZlcnNpb246ICc4LjAuMjMnICBzb2NrZXQ6ICcvdmFyL3J1bi9teXNxbGQvbXlzcWxkLnNvY2snICBwb3J0OiAzMzA2ICBNeVNRTCBDb21tdW5pdHkgU2VydmVyIC0gR1BMLgpteXNxbC1teXNxbAl8IAEAAAAAAABsMjAyMi0wOS0zMCAyMjoyMTo1MyswMDowMCBbTm90ZV0gW0VudHJ5cG9pbnRdOiBFbnRyeXBvaW50IHNjcmlwdCBmb3IgTXlTUUwgU2VydmVyIDguMC4yMy0xZGViaWFuMTAgc3RhcnRlZC4KbXlzcWwtbXlzcWwJfCABAAAAAAAAUzIwMjItMDktMzAgMjI6MjE6NTUrMDA6MDAgW05vdGVdIFtFbnRyeXBvaW50XTogU3dpdGNoaW5nIHRvIGRlZGljYXRlZCB1c2VyICdteXNxbCcKbXlzcWwtbXlzcWwJfCABAAAAAAAAbDIwMjItMDktMzAgMjI6MjE6NTUrMDA6MDAgW05vdGVdIFtFbnRyeXBvaW50XTogRW50cnlwb2ludCBzY3JpcHQgZm9yIE15U1FMIFNlcnZlciA4LjAuMjMtMWRlYmlhbjEwIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAAHMyMDIyLTA5LTMwVDIyOjIxOjU1LjUyMTE1OVogMCBbU3lzdGVtXSBbTVktMDEwMTE2XSBbU2VydmVyXSAvdXNyL3NiaW4vbXlzcWxkIChteXNxbGQgOC4wLjIzKSBzdGFydGluZyBhcyBwcm9jZXNzIDEKbXlzcWwtbXlzcWwJfCACAAAAAAAAXzIwMjItMDktMzBUMjI6MjE6NTUuNTczODgyWiAxIFtTeXN0ZW1dIFtNWS0wMTM1NzZdIFtJbm5vREJdIElubm9EQiBpbml0aWFsaXphdGlvbiBoYXMgc3RhcnRlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAXTIwMjItMDktMzBUMjI6MjE6NTcuMjgyOTgxWiAxIFtTeXN0ZW1dIFtNWS0wMTM1NzddIFtJbm5vREJdIElubm9EQiBpbml0aWFsaXphdGlvbiBoYXMgZW5kZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjItMDktMzBUMjI6MjE6NTcuODg5NjUxWiAwIFtTeXN0ZW1dIFtNWS0wMTEzMjNdIFtTZXJ2ZXJdIFggUGx1Z2luIHJlYWR5IGZvciBjb25uZWN0aW9ucy4gQmluZC1hZGRyZXNzOiAnOjonIHBvcnQ6IDMzMDYwLCBzb2NrZXQ6IC92YXIvcnVuL215c3FsZC9teXNxbHguc29jawpteXNxbC1teXNxbAl8IAIAAAAAAABaMjAyMi0wOS0zMFQyMjoyMTo1Ny45Nzk5MDZaIDAgW1N5c3RlbV0gW01ZLTAxMDIyOV0gW1NlcnZlcl0gU3RhcnRpbmcgWEEgY3Jhc2ggcmVjb3ZlcnkuLi4KbXlzcWwtbXlzcWwJfCACAAAAAAAAWDIwMjItMDktMzBUMjI6MjE6NTguMDAzMTI0WiAwIFtTeXN0ZW1dIFtNWS0wMTAyMzJdIFtTZXJ2ZXJdIFhBIGNyYXNoIHJlY292ZXJ5IGZpbmlzaGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAABjMjAyMi0wOS0zMFQyMjoyMTo1OC4xNDk1MDFaIDAgW1dhcm5pbmddIFtNWS0wMTAwNjhdIFtTZXJ2ZXJdIENBIGNlcnRpZmljYXRlIGNhLnBlbSBpcyBzZWxmIHNpZ25lZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMi0wOS0zMFQyMjoyMTo1OC4xNTAwNDBaIDAgW1N5c3RlbV0gW01ZLTAxMzYwMl0gW1NlcnZlcl0gQ2hhbm5lbCBteXNxbF9tYWluIGNvbmZpZ3VyZWQgdG8gc3VwcG9ydCBUTFMuIEVuY3J5cHRlZCBjb25uZWN0aW9ucyBhcmUgbm93IHN1cHBvcnRlZCBmb3IgdGhpcyBjaGFubmVsLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIyLTA5LTMwVDIyOjIxOjU4LjE2ODUyOFogMCBbV2FybmluZ10gW01ZLTAxMTgxMF0gW1NlcnZlcl0gSW5zZWN1cmUgY29uZmlndXJhdGlvbiBmb3IgLS1waWQtZmlsZTogTG9jYXRpb24gJy92YXIvcnVuL215c3FsZCcgaW4gdGhlIHBhdGggaXMgYWNjZXNzaWJsZSB0byBhbGwgT1MgdXNlcnMuIENvbnNpZGVyIGNob29zaW5nIGEgZGlmZmVyZW50IGRpcmVjdG9yeS4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMi0wOS0zMFQyMjoyMTo1OC4zNzA4NTVaIDAgW1N5c3RlbV0gW01ZLTAxMDkzMV0gW1NlcnZlcl0gL3Vzci9zYmluL215c3FsZDogcmVhZHkgZm9yIGNvbm5lY3Rpb25zLiBWZXJzaW9uOiAnOC4wLjIzJyAgc29ja2V0OiAnL3Zhci9ydW4vbXlzcWxkL215c3FsZC5zb2NrJyAgcG9ydDogMzMwNiAgTXlTUUwgQ29tbXVuaXR5IFNlcnZlciAtIEdQTC4KbXlzcWwtbXlzcWwJfCABAAAAAAAAbDIwMjItMTAtMDggMDA6NTg6MTIrMDA6MDAgW05vdGVdIFtFbnRyeXBvaW50XTogRW50cnlwb2ludCBzY3JpcHQgZm9yIE15U1FMIFNlcnZlciA4LjAuMjMtMWRlYmlhbjEwIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAQAAAAAAAFMyMDIyLTEwLTA4IDAwOjU4OjEyKzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IFN3aXRjaGluZyB0byBkZWRpY2F0ZWQgdXNlciAnbXlzcWwnCm15c3FsLW15c3FsCXwgAQAAAAAAAGwyMDIyLTEwLTA4IDAwOjU4OjEyKzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IEVudHJ5cG9pbnQgc2NyaXB0IGZvciBNeVNRTCBTZXJ2ZXIgOC4wLjIzLTFkZWJpYW4xMCBzdGFydGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAABzMjAyMi0xMC0wOFQwMDo1ODoxMy4wNzAwNTRaIDAgW1N5c3RlbV0gW01ZLTAxMDExNl0gW1NlcnZlcl0gL3Vzci9zYmluL215c3FsZCAobXlzcWxkIDguMC4yMykgc3RhcnRpbmcgYXMgcHJvY2VzcyAxCm15c3FsLW15c3FsCXwgAgAAAAAAAF8yMDIyLTEwLTA4VDAwOjU4OjEzLjA4MDI1OFogMSBbU3lzdGVtXSBbTVktMDEzNTc2XSBbSW5ub0RCXSBJbm5vREIgaW5pdGlhbGl6YXRpb24gaGFzIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAAF0yMDIyLTEwLTA4VDAwOjU4OjEzLjkwMDM3MVogMSBbU3lzdGVtXSBbTVktMDEzNTc3XSBbSW5ub0RCXSBJbm5vREIgaW5pdGlhbGl6YXRpb24gaGFzIGVuZGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIyLTEwLTA4VDAwOjU4OjE0LjA0ODYxMlogMCBbU3lzdGVtXSBbTVktMDExMzIzXSBbU2VydmVyXSBYIFBsdWdpbiByZWFkeSBmb3IgY29ubmVjdGlvbnMuIEJpbmQtYWRkcmVzczogJzo6JyBwb3J0OiAzMzA2MCwgc29ja2V0OiAvdmFyL3J1bi9teXNxbGQvbXlzcWx4LnNvY2sKbXlzcWwtbXlzcWwJfCACAAAAAAAAWjIwMjItMTAtMDhUMDA6NTg6MTQuMDc5OTg1WiAwIFtTeXN0ZW1dIFtNWS0wMTAyMjldIFtTZXJ2ZXJdIFN0YXJ0aW5nIFhBIGNyYXNoIHJlY292ZXJ5Li4uCm15c3FsLW15c3FsCXwgAgAAAAAAAFgyMDIyLTEwLTA4VDAwOjU4OjE0LjA4NzY4MFogMCBbU3lzdGVtXSBbTVktMDEwMjMyXSBbU2VydmVyXSBYQSBjcmFzaCByZWNvdmVyeSBmaW5pc2hlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAYzIwMjItMTAtMDhUMDA6NTg6MTQuMTM2ODU4WiAwIFtXYXJuaW5nXSBbTVktMDEwMDY4XSBbU2VydmVyXSBDQSBjZXJ0aWZpY2F0ZSBjYS5wZW0gaXMgc2VsZiBzaWduZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjItMTAtMDhUMDA6NTg6MTQuMTM3MDI2WiAwIFtTeXN0ZW1dIFtNWS0wMTM2MDJdIFtTZXJ2ZXJdIENoYW5uZWwgbXlzcWxfbWFpbiBjb25maWd1cmVkIHRvIHN1cHBvcnQgVExTLiBFbmNyeXB0ZWQgY29ubmVjdGlvbnMgYXJlIG5vdyBzdXBwb3J0ZWQgZm9yIHRoaXMgY2hhbm5lbC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMi0xMC0wOFQwMDo1ODoxNC4xNTUwMzFaIDAgW1dhcm5pbmddIFtNWS0wMTE4MTBdIFtTZXJ2ZXJdIEluc2VjdXJlIGNvbmZpZ3VyYXRpb24gZm9yIC0tcGlkLWZpbGU6IExvY2F0aW9uICcvdmFyL3J1bi9teXNxbGQnIGluIHRoZSBwYXRoIGlzIGFjY2Vzc2libGUgdG8gYWxsIE9TIHVzZXJzLiBDb25zaWRlciBjaG9vc2luZyBhIGRpZmZlcmVudCBkaXJlY3RvcnkuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjItMTAtMDhUMDA6NTg6MTQuMjMwMDIzWiAwIFtTeXN0ZW1dIFtNWS0wMTA5MzFdIFtTZXJ2ZXJdIC91c3Ivc2Jpbi9teXNxbGQ6IHJlYWR5IGZvciBjb25uZWN0aW9ucy4gVmVyc2lvbjogJzguMC4yMycgIHNvY2tldDogJy92YXIvcnVuL215c3FsZC9teXNxbGQuc29jaycgIHBvcnQ6IDMzMDYgIE15U1FMIENvbW11bml0eSBTZXJ2ZXIgLSBHUEwuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjItMTAtMTNUMDY6NTY6MDIuMTM3NjQxWiAwIFtTeXN0ZW1dIFtNWS0wMTMxNzJdIFtTZXJ2ZXJdIFJlY2VpdmVkIFNIVVRET1dOIGZyb20gdXNlciA8dmlhIHVzZXIgc2lnbmFsPi4gU2h1dHRpbmcgZG93biBteXNxbGQgKFZlcnNpb246IDguMC4yMykuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjItMTAtMTNUMDY6NTY6MDMuMTMxMzI5WiAwIFtTeXN0ZW1dIFtNWS0wMTA5MTBdIFtTZXJ2ZXJdIC91c3Ivc2Jpbi9teXNxbGQ6IFNodXRkb3duIGNvbXBsZXRlIChteXNxbGQgOC4wLjIzKSAgTXlTUUwgQ29tbXVuaXR5IFNlcnZlciAtIEdQTC4KbXlzcWwtbXlzcWwJfCABAAAAAAAAbDIwMjItMTAtMTMgMDY6NTg6MzYrMDA6MDAgW05vdGVdIFtFbnRyeXBvaW50XTogRW50cnlwb2ludCBzY3JpcHQgZm9yIE15U1FMIFNlcnZlciA4LjAuMjMtMWRlYmlhbjEwIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAQAAAAAAAFMyMDIyLTEwLTEzIDA2OjU4OjM3KzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IFN3aXRjaGluZyB0byBkZWRpY2F0ZWQgdXNlciAnbXlzcWwnCm15c3FsLW15c3FsCXwgAQAAAAAAAGwyMDIyLTEwLTEzIDA2OjU4OjM3KzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IEVudHJ5cG9pbnQgc2NyaXB0IGZvciBNeVNRTCBTZXJ2ZXIgOC4wLjIzLTFkZWJpYW4xMCBzdGFydGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAABzMjAyMi0xMC0xM1QwNjo1ODozNy40OTkwNjJaIDAgW1N5c3RlbV0gW01ZLTAxMDExNl0gW1NlcnZlcl0gL3Vzci9zYmluL215c3FsZCAobXlzcWxkIDguMC4yMykgc3RhcnRpbmcgYXMgcHJvY2VzcyAxCm15c3FsLW15c3FsCXwgAgAAAAAAAF8yMDIyLTEwLTEzVDA2OjU4OjM3LjUyMzA4OFogMSBbU3lzdGVtXSBbTVktMDEzNTc2XSBbSW5ub0RCXSBJbm5vREIgaW5pdGlhbGl6YXRpb24gaGFzIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAAF0yMDIyLTEwLTEzVDA2OjU4OjM4LjE2NTg1M1ogMSBbU3lzdGVtXSBbTVktMDEzNTc3XSBbSW5ub0RCXSBJbm5vREIgaW5pdGlhbGl6YXRpb24gaGFzIGVuZGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIyLTEwLTEzVDA2OjU4OjM4LjMwNTUxMFogMCBbU3lzdGVtXSBbTVktMDExMzIzXSBbU2VydmVyXSBYIFBsdWdpbiByZWFkeSBmb3IgY29ubmVjdGlvbnMuIEJpbmQtYWRkcmVzczogJzo6JyBwb3J0OiAzMzA2MCwgc29ja2V0OiAvdmFyL3J1bi9teXNxbGQvbXlzcWx4LnNvY2sKbXlzcWwtbXlzcWwJfCACAAAAAAAAYzIwMjItMTAtMTNUMDY6NTg6MzguNDE4OTk3WiAwIFtXYXJuaW5nXSBbTVktMDEwMDY4XSBbU2VydmVyXSBDQSBjZXJ0aWZpY2F0ZSBjYS5wZW0gaXMgc2VsZiBzaWduZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjItMTAtMTNUMDY6NTg6MzguNDE5Mzc1WiAwIFtTeXN0ZW1dIFtNWS0wMTM2MDJdIFtTZXJ2ZXJdIENoYW5uZWwgbXlzcWxfbWFpbiBjb25maWd1cmVkIHRvIHN1cHBvcnQgVExTLiBFbmNyeXB0ZWQgY29ubmVjdGlvbnMgYXJlIG5vdyBzdXBwb3J0ZWQgZm9yIHRoaXMgY2hhbm5lbC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMi0xMC0xM1QwNjo1ODozOC40MzU0MDdaIDAgW1dhcm5pbmddIFtNWS0wMTE4MTBdIFtTZXJ2ZXJdIEluc2VjdXJlIGNvbmZpZ3VyYXRpb24gZm9yIC0tcGlkLWZpbGU6IExvY2F0aW9uICcvdmFyL3J1bi9teXNxbGQnIGluIHRoZSBwYXRoIGlzIGFjY2Vzc2libGUgdG8gYWxsIE9TIHVzZXJzLiBDb25zaWRlciBjaG9vc2luZyBhIGRpZmZlcmVudCBkaXJlY3RvcnkuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjItMTAtMTNUMDY6NTg6MzguNDk2NjMzWiAwIFtTeXN0ZW1dIFtNWS0wMTA5MzFdIFtTZXJ2ZXJdIC91c3Ivc2Jpbi9teXNxbGQ6IHJlYWR5IGZvciBjb25uZWN0aW9ucy4gVmVyc2lvbjogJzguMC4yMycgIHNvY2tldDogJy92YXIvcnVuL215c3FsZC9teXNxbGQuc29jaycgIHBvcnQ6IDMzMDYgIE15U1FMIENvbW11bml0eSBTZXJ2ZXIgLSBHUEwuCm15c3FsLW15c3FsCXwgAQAAAAAAAGwyMDIyLTEwLTE4IDE3OjA3OjE4KzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IEVudHJ5cG9pbnQgc2NyaXB0IGZvciBNeVNRTCBTZXJ2ZXIgOC4wLjIzLTFkZWJpYW4xMCBzdGFydGVkLgpteXNxbC1teXNxbAl8IAEAAAAAAABTMjAyMi0xMC0xOCAxNzowNzoxOCswMDowMCBbTm90ZV0gW0VudHJ5cG9pbnRdOiBTd2l0Y2hpbmcgdG8gZGVkaWNhdGVkIHVzZXIgJ215c3FsJwpteXNxbC1teXNxbAl8IAEAAAAAAABsMjAyMi0xMC0xOCAxNzowNzoxOCswMDowMCBbTm90ZV0gW0VudHJ5cG9pbnRdOiBFbnRyeXBvaW50IHNjcmlwdCBmb3IgTXlTUUwgU2VydmVyIDguMC4yMy0xZGViaWFuMTAgc3RhcnRlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAczIwMjItMTAtMThUMTc6MDc6MTguOTQ1MTYzWiAwIFtTeXN0ZW1dIFtNWS0wMTAxMTZdIFtTZXJ2ZXJdIC91c3Ivc2Jpbi9teXNxbGQgKG15c3FsZCA4LjAuMjMpIHN0YXJ0aW5nIGFzIHByb2Nlc3MgMQpteXNxbC1teXNxbAl8IAIAAAAAAABfMjAyMi0xMC0xOFQxNzowNzoxOS4wMDQyNDlaIDEgW1N5c3RlbV0gW01ZLTAxMzU3Nl0gW0lubm9EQl0gSW5ub0RCIGluaXRpYWxpemF0aW9uIGhhcyBzdGFydGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAABdMjAyMi0xMC0xOFQxNzowNzoxOS43MDg3NTBaIDEgW1N5c3RlbV0gW01ZLTAxMzU3N10gW0lubm9EQl0gSW5ub0RCIGluaXRpYWxpemF0aW9uIGhhcyBlbmRlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMi0xMC0xOFQxNzowNzoxOS44OTQ2MTBaIDAgW1N5c3RlbV0gW01ZLTAxMTMyM10gW1NlcnZlcl0gWCBQbHVnaW4gcmVhZHkgZm9yIGNvbm5lY3Rpb25zLiBCaW5kLWFkZHJlc3M6ICc6OicgcG9ydDogMzMwNjAsIHNvY2tldDogL3Zhci9ydW4vbXlzcWxkL215c3FseC5zb2NrCm15c3FsLW15c3FsCXwgAgAAAAAAAFoyMDIyLTEwLTE4VDE3OjA3OjE5Ljk0MTI2NVogMCBbU3lzdGVtXSBbTVktMDEwMjI5XSBbU2VydmVyXSBTdGFydGluZyBYQSBjcmFzaCByZWNvdmVyeS4uLgpteXNxbC1teXNxbAl8IAIAAAAAAABYMjAyMi0xMC0xOFQxNzowNzoxOS45NjI0NDhaIDAgW1N5c3RlbV0gW01ZLTAxMDIzMl0gW1NlcnZlcl0gWEEgY3Jhc2ggcmVjb3ZlcnkgZmluaXNoZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAAGMyMDIyLTEwLTE4VDE3OjA3OjIwLjAyNzI1MlogMCBbV2FybmluZ10gW01ZLTAxMDA2OF0gW1NlcnZlcl0gQ0EgY2VydGlmaWNhdGUgY2EucGVtIGlzIHNlbGYgc2lnbmVkLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIyLTEwLTE4VDE3OjA3OjIwLjAyNzU1MlogMCBbU3lzdGVtXSBbTVktMDEzNjAyXSBbU2VydmVyXSBDaGFubmVsIG15c3FsX21haW4gY29uZmlndXJlZCB0byBzdXBwb3J0IFRMUy4gRW5jcnlwdGVkIGNvbm5lY3Rpb25zIGFyZSBub3cgc3VwcG9ydGVkIGZvciB0aGlzIGNoYW5uZWwuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjItMTAtMThUMTc6MDc6MjAuMDQzMzI2WiAwIFtXYXJuaW5nXSBbTVktMDExODEwXSBbU2VydmVyXSBJbnNlY3VyZSBjb25maWd1cmF0aW9uIGZvciAtLXBpZC1maWxlOiBMb2NhdGlvbiAnL3Zhci9ydW4vbXlzcWxkJyBpbiB0aGUgcGF0aCBpcyBhY2Nlc3NpYmxlIHRvIGFsbCBPUyB1c2Vycy4gQ29uc2lkZXIgY2hvb3NpbmcgYSBkaWZmZXJlbnQgZGlyZWN0b3J5LgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIyLTEwLTE4VDE3OjA3OjIwLjA3NjAzNlogMCBbU3lzdGVtXSBbTVktMDEwOTMxXSBbU2VydmVyXSAvdXNyL3NiaW4vbXlzcWxkOiByZWFkeSBmb3IgY29ubmVjdGlvbnMuIFZlcnNpb246ICc4LjAuMjMnICBzb2NrZXQ6ICcvdmFyL3J1bi9teXNxbGQvbXlzcWxkLnNvY2snICBwb3J0OiAzMzA2ICBNeVNRTCBDb21tdW5pdHkgU2VydmVyIC0gR1BMLgpteXNxbC1teXNxbAl8IAEAAAAAAABsMjAyMi0xMC0xOSAxNTo0Mjo0OCswMDowMCBbTm90ZV0gW0VudHJ5cG9pbnRdOiBFbnRyeXBvaW50IHNjcmlwdCBmb3IgTXlTUUwgU2VydmVyIDguMC4yMy0xZGViaWFuMTAgc3RhcnRlZC4KbXlzcWwtbXlzcWwJfCABAAAAAAAAUzIwMjItMTAtMTkgMTU6NDI6NDgrMDA6MDAgW05vdGVdIFtFbnRyeXBvaW50XTogU3dpdGNoaW5nIHRvIGRlZGljYXRlZCB1c2VyICdteXNxbCcKbXlzcWwtbXlzcWwJfCABAAAAAAAAbDIwMjItMTAtMTkgMTU6NDI6NDgrMDA6MDAgW05vdGVdIFtFbnRyeXBvaW50XTogRW50cnlwb2ludCBzY3JpcHQgZm9yIE15U1FMIFNlcnZlciA4LjAuMjMtMWRlYmlhbjEwIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAAHMyMDIyLTEwLTE5VDE1OjQyOjQ4LjkwMDQzMVogMCBbU3lzdGVtXSBbTVktMDEwMTE2XSBbU2VydmVyXSAvdXNyL3NiaW4vbXlzcWxkIChteXNxbGQgOC4wLjIzKSBzdGFydGluZyBhcyBwcm9jZXNzIDEKbXlzcWwtbXlzcWwJfCACAAAAAAAAXzIwMjItMTAtMTlUMTU6NDI6NDguOTA5ODgzWiAxIFtTeXN0ZW1dIFtNWS0wMTM1NzZdIFtJbm5vREJdIElubm9EQiBpbml0aWFsaXphdGlvbiBoYXMgc3RhcnRlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAXTIwMjItMTAtMTlUMTU6NDI6NDkuOTM3NzM0WiAxIFtTeXN0ZW1dIFtNWS0wMTM1NzddIFtJbm5vREJdIElubm9EQiBpbml0aWFsaXphdGlvbiBoYXMgZW5kZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjItMTAtMTlUMTU6NDI6NTAuMDg3NTgxWiAwIFtTeXN0ZW1dIFtNWS0wMTEzMjNdIFtTZXJ2ZXJdIFggUGx1Z2luIHJlYWR5IGZvciBjb25uZWN0aW9ucy4gQmluZC1hZGRyZXNzOiAnOjonIHBvcnQ6IDMzMDYwLCBzb2NrZXQ6IC92YXIvcnVuL215c3FsZC9teXNxbHguc29jawpteXNxbC1teXNxbAl8IAIAAAAAAABaMjAyMi0xMC0xOVQxNTo0Mjo1MC4xMjU3MzFaIDAgW1N5c3RlbV0gW01ZLTAxMDIyOV0gW1NlcnZlcl0gU3RhcnRpbmcgWEEgY3Jhc2ggcmVjb3ZlcnkuLi4KbXlzcWwtbXlzcWwJfCACAAAAAAAAWDIwMjItMTAtMTlUMTU6NDI6NTAuMTMzNDM0WiAwIFtTeXN0ZW1dIFtNWS0wMTAyMzJdIFtTZXJ2ZXJdIFhBIGNyYXNoIHJlY292ZXJ5IGZpbmlzaGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAABjMjAyMi0xMC0xOVQxNTo0Mjo1MC4yMjk3MDdaIDAgW1dhcm5pbmddIFtNWS0wMTAwNjhdIFtTZXJ2ZXJdIENBIGNlcnRpZmljYXRlIGNhLnBlbSBpcyBzZWxmIHNpZ25lZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMi0xMC0xOVQxNTo0Mjo1MC4yMzAzNjRaIDAgW1N5c3RlbV0gW01ZLTAxMzYwMl0gW1NlcnZlcl0gQ2hhbm5lbCBteXNxbF9tYWluIGNvbmZpZ3VyZWQgdG8gc3VwcG9ydCBUTFMuIEVuY3J5cHRlZCBjb25uZWN0aW9ucyBhcmUgbm93IHN1cHBvcnRlZCBmb3IgdGhpcyBjaGFubmVsLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIyLTEwLTE5VDE1OjQyOjUwLjI0NjY2MlogMCBbV2FybmluZ10gW01ZLTAxMTgxMF0gW1NlcnZlcl0gSW5zZWN1cmUgY29uZmlndXJhdGlvbiBmb3IgLS1waWQtZmlsZTogTG9jYXRpb24gJy92YXIvcnVuL215c3FsZCcgaW4gdGhlIHBhdGggaXMgYWNjZXNzaWJsZSB0byBhbGwgT1MgdXNlcnMuIENvbnNpZGVyIGNob29zaW5nIGEgZGlmZmVyZW50IGRpcmVjdG9yeS4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMi0xMC0xOVQxNTo0Mjo1MC40MDU2ODNaIDAgW1N5c3RlbV0gW01ZLTAxMDkzMV0gW1NlcnZlcl0gL3Vzci9zYmluL215c3FsZDogcmVhZHkgZm9yIGNvbm5lY3Rpb25zLiBWZXJzaW9uOiAnOC4wLjIzJyAgc29ja2V0OiAnL3Zhci9ydW4vbXlzcWxkL215c3FsZC5zb2NrJyAgcG9ydDogMzMwNiAgTXlTUUwgQ29tbXVuaXR5IFNlcnZlciAtIEdQTC4KbXlzcWwtbXlzcWwJfCABAAAAAAAAbDIwMjItMTAtMjAgMjA6MTY6MzkrMDA6MDAgW05vdGVdIFtFbnRyeXBvaW50XTogRW50cnlwb2ludCBzY3JpcHQgZm9yIE15U1FMIFNlcnZlciA4LjAuMjMtMWRlYmlhbjEwIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAQAAAAAAAFMyMDIyLTEwLTIwIDIwOjE2OjM5KzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IFN3aXRjaGluZyB0byBkZWRpY2F0ZWQgdXNlciAnbXlzcWwnCm15c3FsLW15c3FsCXwgAQAAAAAAAGwyMDIyLTEwLTIwIDIwOjE2OjM5KzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IEVudHJ5cG9pbnQgc2NyaXB0IGZvciBNeVNRTCBTZXJ2ZXIgOC4wLjIzLTFkZWJpYW4xMCBzdGFydGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAABzMjAyMi0xMC0yMFQyMDoxNjo0MC4wMTAzNDhaIDAgW1N5c3RlbV0gW01ZLTAxMDExNl0gW1NlcnZlcl0gL3Vzci9zYmluL215c3FsZCAobXlzcWxkIDguMC4yMykgc3RhcnRpbmcgYXMgcHJvY2VzcyAxCm15c3FsLW15c3FsCXwgAgAAAAAAAF8yMDIyLTEwLTIwVDIwOjE2OjQwLjAyMTAzNVogMSBbU3lzdGVtXSBbTVktMDEzNTc2XSBbSW5ub0RCXSBJbm5vREIgaW5pdGlhbGl6YXRpb24gaGFzIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAAF0yMDIyLTEwLTIwVDIwOjE2OjQwLjg0MzU2M1ogMSBbU3lzdGVtXSBbTVktMDEzNTc3XSBbSW5ub0RCXSBJbm5vREIgaW5pdGlhbGl6YXRpb24gaGFzIGVuZGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIyLTEwLTIwVDIwOjE2OjQwLjk5MzcwMlogMCBbU3lzdGVtXSBbTVktMDExMzIzXSBbU2VydmVyXSBYIFBsdWdpbiByZWFkeSBmb3IgY29ubmVjdGlvbnMuIEJpbmQtYWRkcmVzczogJzo6JyBwb3J0OiAzMzA2MCwgc29ja2V0OiAvdmFyL3J1bi9teXNxbGQvbXlzcWx4LnNvY2sKbXlzcWwtbXlzcWwJfCACAAAAAAAAWjIwMjItMTAtMjBUMjA6MTY6NDEuMDI2Njk5WiAwIFtTeXN0ZW1dIFtNWS0wMTAyMjldIFtTZXJ2ZXJdIFN0YXJ0aW5nIFhBIGNyYXNoIHJlY292ZXJ5Li4uCm15c3FsLW15c3FsCXwgAgAAAAAAAFgyMDIyLTEwLTIwVDIwOjE2OjQxLjA1MTUzNlogMCBbU3lzdGVtXSBbTVktMDEwMjMyXSBbU2VydmVyXSBYQSBjcmFzaCByZWNvdmVyeSBmaW5pc2hlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAYzIwMjItMTAtMjBUMjA6MTY6NDEuMTM5ODAzWiAwIFtXYXJuaW5nXSBbTVktMDEwMDY4XSBbU2VydmVyXSBDQSBjZXJ0aWZpY2F0ZSBjYS5wZW0gaXMgc2VsZiBzaWduZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjItMTAtMjBUMjA6MTY6NDEuMTQwNjk3WiAwIFtTeXN0ZW1dIFtNWS0wMTM2MDJdIFtTZXJ2ZXJdIENoYW5uZWwgbXlzcWxfbWFpbiBjb25maWd1cmVkIHRvIHN1cHBvcnQgVExTLiBFbmNyeXB0ZWQgY29ubmVjdGlvbnMgYXJlIG5vdyBzdXBwb3J0ZWQgZm9yIHRoaXMgY2hhbm5lbC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMi0xMC0yMFQyMDoxNjo0MS4xNTU0OTFaIDAgW1dhcm5pbmddIFtNWS0wMTE4MTBdIFtTZXJ2ZXJdIEluc2VjdXJlIGNvbmZpZ3VyYXRpb24gZm9yIC0tcGlkLWZpbGU6IExvY2F0aW9uICcvdmFyL3J1bi9teXNxbGQnIGluIHRoZSBwYXRoIGlzIGFjY2Vzc2libGUgdG8gYWxsIE9TIHVzZXJzLiBDb25zaWRlciBjaG9vc2luZyBhIGRpZmZlcmVudCBkaXJlY3RvcnkuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjItMTAtMjBUMjA6MTY6NDEuMTk4MTE3WiAwIFtTeXN0ZW1dIFtNWS0wMTA5MzFdIFtTZXJ2ZXJdIC91c3Ivc2Jpbi9teXNxbGQ6IHJlYWR5IGZvciBjb25uZWN0aW9ucy4gVmVyc2lvbjogJzguMC4yMycgIHNvY2tldDogJy92YXIvcnVuL215c3FsZC9teXNxbGQuc29jaycgIHBvcnQ6IDMzMDYgIE15U1FMIENvbW11bml0eSBTZXJ2ZXIgLSBHUEwuCm15c3FsLW15c3FsCXwgAQAAAAAAAGwyMDIyLTEwLTIxIDE0OjQ0OjU2KzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IEVudHJ5cG9pbnQgc2NyaXB0IGZvciBNeVNRTCBTZXJ2ZXIgOC4wLjIzLTFkZWJpYW4xMCBzdGFydGVkLgpteXNxbC1teXNxbAl8IAEAAAAAAABTMjAyMi0xMC0yMSAxNDo0NDo1NyswMDowMCBbTm90ZV0gW0VudHJ5cG9pbnRdOiBTd2l0Y2hpbmcgdG8gZGVkaWNhdGVkIHVzZXIgJ215c3FsJwpteXNxbC1teXNxbAl8IAEAAAAAAABsMjAyMi0xMC0yMSAxNDo0NDo1NyswMDowMCBbTm90ZV0gW0VudHJ5cG9pbnRdOiBFbnRyeXBvaW50IHNjcmlwdCBmb3IgTXlTUUwgU2VydmVyIDguMC4yMy0xZGViaWFuMTAgc3RhcnRlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAczIwMjItMTAtMjFUMTQ6NDQ6NTcuNjc5MDYxWiAwIFtTeXN0ZW1dIFtNWS0wMTAxMTZdIFtTZXJ2ZXJdIC91c3Ivc2Jpbi9teXNxbGQgKG15c3FsZCA4LjAuMjMpIHN0YXJ0aW5nIGFzIHByb2Nlc3MgMQpteXNxbC1teXNxbAl8IAIAAAAAAABfMjAyMi0xMC0yMVQxNDo0NDo1Ny42OTM3MzNaIDEgW1N5c3RlbV0gW01ZLTAxMzU3Nl0gW0lubm9EQl0gSW5ub0RCIGluaXRpYWxpemF0aW9uIGhhcyBzdGFydGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAABdMjAyMi0xMC0yMVQxNDo0NDo1OC40OTkzMTFaIDEgW1N5c3RlbV0gW01ZLTAxMzU3N10gW0lubm9EQl0gSW5ub0RCIGluaXRpYWxpemF0aW9uIGhhcyBlbmRlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMi0xMC0yMVQxNDo0NDo1OC42NTUwOTRaIDAgW1N5c3RlbV0gW01ZLTAxMTMyM10gW1NlcnZlcl0gWCBQbHVnaW4gcmVhZHkgZm9yIGNvbm5lY3Rpb25zLiBCaW5kLWFkZHJlc3M6ICc6OicgcG9ydDogMzMwNjAsIHNvY2tldDogL3Zhci9ydW4vbXlzcWxkL215c3FseC5zb2NrCm15c3FsLW15c3FsCXwgAgAAAAAAAFoyMDIyLTEwLTIxVDE0OjQ0OjU4LjcwMTU2NFogMCBbU3lzdGVtXSBbTVktMDEwMjI5XSBbU2VydmVyXSBTdGFydGluZyBYQSBjcmFzaCByZWNvdmVyeS4uLgpteXNxbC1teXNxbAl8IAIAAAAAAABYMjAyMi0xMC0yMVQxNDo0NDo1OC43MjY5NzhaIDAgW1N5c3RlbV0gW01ZLTAxMDIzMl0gW1NlcnZlcl0gWEEgY3Jhc2ggcmVjb3ZlcnkgZmluaXNoZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAAGMyMDIyLTEwLTIxVDE0OjQ0OjU4LjgwMTg4MFogMCBbV2FybmluZ10gW01ZLTAxMDA2OF0gW1NlcnZlcl0gQ0EgY2VydGlmaWNhdGUgY2EucGVtIGlzIHNlbGYgc2lnbmVkLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIyLTEwLTIxVDE0OjQ0OjU4LjgwMjMxNFogMCBbU3lzdGVtXSBbTVktMDEzNjAyXSBbU2VydmVyXSBDaGFubmVsIG15c3FsX21haW4gY29uZmlndXJlZCB0byBzdXBwb3J0IFRMUy4gRW5jcnlwdGVkIGNvbm5lY3Rpb25zIGFyZSBub3cgc3VwcG9ydGVkIGZvciB0aGlzIGNoYW5uZWwuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjItMTAtMjFUMTQ6NDQ6NTguODEzNDc2WiAwIFtXYXJuaW5nXSBbTVktMDExODEwXSBbU2VydmVyXSBJbnNlY3VyZSBjb25maWd1cmF0aW9uIGZvciAtLXBpZC1maWxlOiBMb2NhdGlvbiAnL3Zhci9ydW4vbXlzcWxkJyBpbiB0aGUgcGF0aCBpcyBhY2Nlc3NpYmxlIHRvIGFsbCBPUyB1c2Vycy4gQ29uc2lkZXIgY2hvb3NpbmcgYSBkaWZmZXJlbnQgZGlyZWN0b3J5LgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIyLTEwLTIxVDE0OjQ0OjU4Ljg2ODU2OFogMCBbU3lzdGVtXSBbTVktMDEwOTMxXSBbU2VydmVyXSAvdXNyL3NiaW4vbXlzcWxkOiByZWFkeSBmb3IgY29ubmVjdGlvbnMuIFZlcnNpb246ICc4LjAuMjMnICBzb2NrZXQ6ICcvdmFyL3J1bi9teXNxbGQvbXlzcWxkLnNvY2snICBwb3J0OiAzMzA2ICBNeVNRTCBDb21tdW5pdHkgU2VydmVyIC0gR1BMLgpteXNxbC1teXNxbAl8IAEAAAAAAABsMjAyMi0xMC0yNCAyMToyMToxNyswMDowMCBbTm90ZV0gW0VudHJ5cG9pbnRdOiBFbnRyeXBvaW50IHNjcmlwdCBmb3IgTXlTUUwgU2VydmVyIDguMC4yMy0xZGViaWFuMTAgc3RhcnRlZC4KbXlzcWwtbXlzcWwJfCABAAAAAAAAUzIwMjItMTAtMjQgMjE6MjE6MTgrMDA6MDAgW05vdGVdIFtFbnRyeXBvaW50XTogU3dpdGNoaW5nIHRvIGRlZGljYXRlZCB1c2VyICdteXNxbCcKbXlzcWwtbXlzcWwJfCABAAAAAAAAbDIwMjItMTAtMjQgMjE6MjE6MTgrMDA6MDAgW05vdGVdIFtFbnRyeXBvaW50XTogRW50cnlwb2ludCBzY3JpcHQgZm9yIE15U1FMIFNlcnZlciA4LjAuMjMtMWRlYmlhbjEwIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAAHMyMDIyLTEwLTI0VDIxOjIxOjE4LjQxMzI4N1ogMCBbU3lzdGVtXSBbTVktMDEwMTE2XSBbU2VydmVyXSAvdXNyL3NiaW4vbXlzcWxkIChteXNxbGQgOC4wLjIzKSBzdGFydGluZyBhcyBwcm9jZXNzIDEKbXlzcWwtbXlzcWwJfCACAAAAAAAAXzIwMjItMTAtMjRUMjE6MjE6MTguNDIzMTg4WiAxIFtTeXN0ZW1dIFtNWS0wMTM1NzZdIFtJbm5vREJdIElubm9EQiBpbml0aWFsaXphdGlvbiBoYXMgc3RhcnRlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAXTIwMjItMTAtMjRUMjE6MjE6MTkuMTYxMTg2WiAxIFtTeXN0ZW1dIFtNWS0wMTM1NzddIFtJbm5vREJdIElubm9EQiBpbml0aWFsaXphdGlvbiBoYXMgZW5kZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjItMTAtMjRUMjE6MjE6MTkuMjk4MTkxWiAwIFtTeXN0ZW1dIFtNWS0wMTEzMjNdIFtTZXJ2ZXJdIFggUGx1Z2luIHJlYWR5IGZvciBjb25uZWN0aW9ucy4gQmluZC1hZGRyZXNzOiAnOjonIHBvcnQ6IDMzMDYwLCBzb2NrZXQ6IC92YXIvcnVuL215c3FsZC9teXNxbHguc29jawpteXNxbC1teXNxbAl8IAIAAAAAAABaMjAyMi0xMC0yNFQyMToyMToxOS4zNjIxMjVaIDAgW1N5c3RlbV0gW01ZLTAxMDIyOV0gW1NlcnZlcl0gU3RhcnRpbmcgWEEgY3Jhc2ggcmVjb3ZlcnkuLi4KbXlzcWwtbXlzcWwJfCACAAAAAAAAWDIwMjItMTAtMjRUMjE6MjE6MTkuMzcwMTU2WiAwIFtTeXN0ZW1dIFtNWS0wMTAyMzJdIFtTZXJ2ZXJdIFhBIGNyYXNoIHJlY292ZXJ5IGZpbmlzaGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAABjMjAyMi0xMC0yNFQyMToyMToxOS40NDc0NjVaIDAgW1dhcm5pbmddIFtNWS0wMTAwNjhdIFtTZXJ2ZXJdIENBIGNlcnRpZmljYXRlIGNhLnBlbSBpcyBzZWxmIHNpZ25lZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMi0xMC0yNFQyMToyMToxOS40NDgwMzRaIDAgW1N5c3RlbV0gW01ZLTAxMzYwMl0gW1NlcnZlcl0gQ2hhbm5lbCBteXNxbF9tYWluIGNvbmZpZ3VyZWQgdG8gc3VwcG9ydCBUTFMuIEVuY3J5cHRlZCBjb25uZWN0aW9ucyBhcmUgbm93IHN1cHBvcnRlZCBmb3IgdGhpcyBjaGFubmVsLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIyLTEwLTI0VDIxOjIxOjE5LjQ1OTYyNlogMCBbV2FybmluZ10gW01ZLTAxMTgxMF0gW1NlcnZlcl0gSW5zZWN1cmUgY29uZmlndXJhdGlvbiBmb3IgLS1waWQtZmlsZTogTG9jYXRpb24gJy92YXIvcnVuL215c3FsZCcgaW4gdGhlIHBhdGggaXMgYWNjZXNzaWJsZSB0byBhbGwgT1MgdXNlcnMuIENvbnNpZGVyIGNob29zaW5nIGEgZGlmZmVyZW50IGRpcmVjdG9yeS4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMi0xMC0yNFQyMToyMToxOS41MTY3NThaIDAgW1N5c3RlbV0gW01ZLTAxMDkzMV0gW1NlcnZlcl0gL3Vzci9zYmluL215c3FsZDogcmVhZHkgZm9yIGNvbm5lY3Rpb25zLiBWZXJzaW9uOiAnOC4wLjIzJyAgc29ja2V0OiAnL3Zhci9ydW4vbXlzcWxkL215c3FsZC5zb2NrJyAgcG9ydDogMzMwNiAgTXlTUUwgQ29tbXVuaXR5IFNlcnZlciAtIEdQTC4KbXlzcWwtbXlzcWwJfCABAAAAAAAAbDIwMjItMTAtMjUgMTY6MDA6NTErMDA6MDAgW05vdGVdIFtFbnRyeXBvaW50XTogRW50cnlwb2ludCBzY3JpcHQgZm9yIE15U1FMIFNlcnZlciA4LjAuMjMtMWRlYmlhbjEwIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAQAAAAAAAFMyMDIyLTEwLTI1IDE2OjAwOjUxKzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IFN3aXRjaGluZyB0byBkZWRpY2F0ZWQgdXNlciAnbXlzcWwnCm15c3FsLW15c3FsCXwgAQAAAAAAAGwyMDIyLTEwLTI1IDE2OjAwOjUxKzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IEVudHJ5cG9pbnQgc2NyaXB0IGZvciBNeVNRTCBTZXJ2ZXIgOC4wLjIzLTFkZWJpYW4xMCBzdGFydGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAABzMjAyMi0xMC0yNVQxNjowMDo1MS42OTg0NDdaIDAgW1N5c3RlbV0gW01ZLTAxMDExNl0gW1NlcnZlcl0gL3Vzci9zYmluL215c3FsZCAobXlzcWxkIDguMC4yMykgc3RhcnRpbmcgYXMgcHJvY2VzcyAxCm15c3FsLW15c3FsCXwgAgAAAAAAAF8yMDIyLTEwLTI1VDE2OjAwOjUxLjcyMDEzN1ogMSBbU3lzdGVtXSBbTVktMDEzNTc2XSBbSW5ub0RCXSBJbm5vREIgaW5pdGlhbGl6YXRpb24gaGFzIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAAF0yMDIyLTEwLTI1VDE2OjAwOjUyLjQ3MTY3NFogMSBbU3lzdGVtXSBbTVktMDEzNTc3XSBbSW5ub0RCXSBJbm5vREIgaW5pdGlhbGl6YXRpb24gaGFzIGVuZGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIyLTEwLTI1VDE2OjAwOjUyLjYyMDI5N1ogMCBbU3lzdGVtXSBbTVktMDExMzIzXSBbU2VydmVyXSBYIFBsdWdpbiByZWFkeSBmb3IgY29ubmVjdGlvbnMuIEJpbmQtYWRkcmVzczogJzo6JyBwb3J0OiAzMzA2MCwgc29ja2V0OiAvdmFyL3J1bi9teXNxbGQvbXlzcWx4LnNvY2sKbXlzcWwtbXlzcWwJfCACAAAAAAAAWjIwMjItMTAtMjVUMTY6MDA6NTIuNjcwNTk5WiAwIFtTeXN0ZW1dIFtNWS0wMTAyMjldIFtTZXJ2ZXJdIFN0YXJ0aW5nIFhBIGNyYXNoIHJlY292ZXJ5Li4uCm15c3FsLW15c3FsCXwgAgAAAAAAAFgyMDIyLTEwLTI1VDE2OjAwOjUyLjY5NjkyMFogMCBbU3lzdGVtXSBbTVktMDEwMjMyXSBbU2VydmVyXSBYQSBjcmFzaCByZWNvdmVyeSBmaW5pc2hlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAYzIwMjItMTAtMjVUMTY6MDA6NTIuNzYwMTQwWiAwIFtXYXJuaW5nXSBbTVktMDEwMDY4XSBbU2VydmVyXSBDQSBjZXJ0aWZpY2F0ZSBjYS5wZW0gaXMgc2VsZiBzaWduZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjItMTAtMjVUMTY6MDA6NTIuNzYwNjExWiAwIFtTeXN0ZW1dIFtNWS0wMTM2MDJdIFtTZXJ2ZXJdIENoYW5uZWwgbXlzcWxfbWFpbiBjb25maWd1cmVkIHRvIHN1cHBvcnQgVExTLiBFbmNyeXB0ZWQgY29ubmVjdGlvbnMgYXJlIG5vdyBzdXBwb3J0ZWQgZm9yIHRoaXMgY2hhbm5lbC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMi0xMC0yNVQxNjowMDo1Mi43NzE0ODhaIDAgW1dhcm5pbmddIFtNWS0wMTE4MTBdIFtTZXJ2ZXJdIEluc2VjdXJlIGNvbmZpZ3VyYXRpb24gZm9yIC0tcGlkLWZpbGU6IExvY2F0aW9uICcvdmFyL3J1bi9teXNxbGQnIGluIHRoZSBwYXRoIGlzIGFjY2Vzc2libGUgdG8gYWxsIE9TIHVzZXJzLiBDb25zaWRlciBjaG9vc2luZyBhIGRpZmZlcmVudCBkaXJlY3RvcnkuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjItMTAtMjVUMTY6MDA6NTIuODY0MTUyWiAwIFtTeXN0ZW1dIFtNWS0wMTA5MzFdIFtTZXJ2ZXJdIC91c3Ivc2Jpbi9teXNxbGQ6IHJlYWR5IGZvciBjb25uZWN0aW9ucy4gVmVyc2lvbjogJzguMC4yMycgIHNvY2tldDogJy92YXIvcnVuL215c3FsZC9teXNxbGQuc29jaycgIHBvcnQ6IDMzMDYgIE15U1FMIENvbW11bml0eSBTZXJ2ZXIgLSBHUEwuCm15c3FsLW15c3FsCXwgAQAAAAAAAGwyMDIyLTEwLTI1IDIwOjUwOjM0KzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IEVudHJ5cG9pbnQgc2NyaXB0IGZvciBNeVNRTCBTZXJ2ZXIgOC4wLjIzLTFkZWJpYW4xMCBzdGFydGVkLgpteXNxbC1teXNxbAl8IAEAAAAAAABTMjAyMi0xMC0yNSAyMDo1MDozNCswMDowMCBbTm90ZV0gW0VudHJ5cG9pbnRdOiBTd2l0Y2hpbmcgdG8gZGVkaWNhdGVkIHVzZXIgJ215c3FsJwpteXNxbC1teXNxbAl8IAEAAAAAAABsMjAyMi0xMC0yNSAyMDo1MDozNCswMDowMCBbTm90ZV0gW0VudHJ5cG9pbnRdOiBFbnRyeXBvaW50IHNjcmlwdCBmb3IgTXlTUUwgU2VydmVyIDguMC4yMy0xZGViaWFuMTAgc3RhcnRlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAczIwMjItMTAtMjVUMjA6NTA6MzQuODM5Njc1WiAwIFtTeXN0ZW1dIFtNWS0wMTAxMTZdIFtTZXJ2ZXJdIC91c3Ivc2Jpbi9teXNxbGQgKG15c3FsZCA4LjAuMjMpIHN0YXJ0aW5nIGFzIHByb2Nlc3MgMQpteXNxbC1teXNxbAl8IAIAAAAAAABfMjAyMi0xMC0yNVQyMDo1MDozNC44NDk0NjFaIDEgW1N5c3RlbV0gW01ZLTAxMzU3Nl0gW0lubm9EQl0gSW5ub0RCIGluaXRpYWxpemF0aW9uIGhhcyBzdGFydGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAABdMjAyMi0xMC0yNVQyMDo1MDozNS42MTE5NjNaIDEgW1N5c3RlbV0gW01ZLTAxMzU3N10gW0lubm9EQl0gSW5ub0RCIGluaXRpYWxpemF0aW9uIGhhcyBlbmRlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMi0xMC0yNVQyMDo1MDozNS43NTk3MzFaIDAgW1N5c3RlbV0gW01ZLTAxMTMyM10gW1NlcnZlcl0gWCBQbHVnaW4gcmVhZHkgZm9yIGNvbm5lY3Rpb25zLiBCaW5kLWFkZHJlc3M6ICc6OicgcG9ydDogMzMwNjAsIHNvY2tldDogL3Zhci9ydW4vbXlzcWxkL215c3FseC5zb2NrCm15c3FsLW15c3FsCXwgAgAAAAAAAFoyMDIyLTEwLTI1VDIwOjUwOjM1LjgxMTYxM1ogMCBbU3lzdGVtXSBbTVktMDEwMjI5XSBbU2VydmVyXSBTdGFydGluZyBYQSBjcmFzaCByZWNvdmVyeS4uLgpteXNxbC1teXNxbAl8IAIAAAAAAABYMjAyMi0xMC0yNVQyMDo1MDozNS44MjA3OTJaIDAgW1N5c3RlbV0gW01ZLTAxMDIzMl0gW1NlcnZlcl0gWEEgY3Jhc2ggcmVjb3ZlcnkgZmluaXNoZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAAGMyMDIyLTEwLTI1VDIwOjUwOjM1Ljg3NzI2M1ogMCBbV2FybmluZ10gW01ZLTAxMDA2OF0gW1NlcnZlcl0gQ0EgY2VydGlmaWNhdGUgY2EucGVtIGlzIHNlbGYgc2lnbmVkLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIyLTEwLTI1VDIwOjUwOjM1Ljg3NzY3NVogMCBbU3lzdGVtXSBbTVktMDEzNjAyXSBbU2VydmVyXSBDaGFubmVsIG15c3FsX21haW4gY29uZmlndXJlZCB0byBzdXBwb3J0IFRMUy4gRW5jcnlwdGVkIGNvbm5lY3Rpb25zIGFyZSBub3cgc3VwcG9ydGVkIGZvciB0aGlzIGNoYW5uZWwuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjItMTAtMjVUMjA6NTA6MzUuODg4NDkzWiAwIFtXYXJuaW5nXSBbTVktMDExODEwXSBbU2VydmVyXSBJbnNlY3VyZSBjb25maWd1cmF0aW9uIGZvciAtLXBpZC1maWxlOiBMb2NhdGlvbiAnL3Zhci9ydW4vbXlzcWxkJyBpbiB0aGUgcGF0aCBpcyBhY2Nlc3NpYmxlIHRvIGFsbCBPUyB1c2Vycy4gQ29uc2lkZXIgY2hvb3NpbmcgYSBkaWZmZXJlbnQgZGlyZWN0b3J5LgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIyLTEwLTI1VDIwOjUwOjM1Ljk0MTQ4NlogMCBbU3lzdGVtXSBbTVktMDEwOTMxXSBbU2VydmVyXSAvdXNyL3NiaW4vbXlzcWxkOiByZWFkeSBmb3IgY29ubmVjdGlvbnMuIFZlcnNpb246ICc4LjAuMjMnICBzb2NrZXQ6ICcvdmFyL3J1bi9teXNxbGQvbXlzcWxkLnNvY2snICBwb3J0OiAzMzA2ICBNeVNRTCBDb21tdW5pdHkgU2VydmVyIC0gR1BMLgpteXNxbC1teXNxbAl8IAEAAAAAAABsMjAyMi0xMC0yNSAyMjo1MDo1OSswMDowMCBbTm90ZV0gW0VudHJ5cG9pbnRdOiBFbnRyeXBvaW50IHNjcmlwdCBmb3IgTXlTUUwgU2VydmVyIDguMC4yMy0xZGViaWFuMTAgc3RhcnRlZC4KbXlzcWwtbXlzcWwJfCABAAAAAAAAUzIwMjItMTAtMjUgMjI6NTE6MDArMDA6MDAgW05vdGVdIFtFbnRyeXBvaW50XTogU3dpdGNoaW5nIHRvIGRlZGljYXRlZCB1c2VyICdteXNxbCcKbXlzcWwtbXlzcWwJfCABAAAAAAAAbDIwMjItMTAtMjUgMjI6NTE6MDArMDA6MDAgW05vdGVdIFtFbnRyeXBvaW50XTogRW50cnlwb2ludCBzY3JpcHQgZm9yIE15U1FMIFNlcnZlciA4LjAuMjMtMWRlYmlhbjEwIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAAHMyMDIyLTEwLTI1VDIyOjUxOjAwLjYxNTk1NVogMCBbU3lzdGVtXSBbTVktMDEwMTE2XSBbU2VydmVyXSAvdXNyL3NiaW4vbXlzcWxkIChteXNxbGQgOC4wLjIzKSBzdGFydGluZyBhcyBwcm9jZXNzIDEKbXlzcWwtbXlzcWwJfCACAAAAAAAAXzIwMjItMTAtMjVUMjI6NTE6MDAuNjI1MTQxWiAxIFtTeXN0ZW1dIFtNWS0wMTM1NzZdIFtJbm5vREJdIElubm9EQiBpbml0aWFsaXphdGlvbiBoYXMgc3RhcnRlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAXTIwMjItMTAtMjVUMjI6NTE6MDEuMzcxMTExWiAxIFtTeXN0ZW1dIFtNWS0wMTM1NzddIFtJbm5vREJdIElubm9EQiBpbml0aWFsaXphdGlvbiBoYXMgZW5kZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjItMTAtMjVUMjI6NTE6MDEuNTIyNjc0WiAwIFtTeXN0ZW1dIFtNWS0wMTEzMjNdIFtTZXJ2ZXJdIFggUGx1Z2luIHJlYWR5IGZvciBjb25uZWN0aW9ucy4gQmluZC1hZGRyZXNzOiAnOjonIHBvcnQ6IDMzMDYwLCBzb2NrZXQ6IC92YXIvcnVuL215c3FsZC9teXNxbHguc29jawpteXNxbC1teXNxbAl8IAIAAAAAAABaMjAyMi0xMC0yNVQyMjo1MTowMS41NjkxOTZaIDAgW1N5c3RlbV0gW01ZLTAxMDIyOV0gW1NlcnZlcl0gU3RhcnRpbmcgWEEgY3Jhc2ggcmVjb3ZlcnkuLi4KbXlzcWwtbXlzcWwJfCACAAAAAAAAWDIwMjItMTAtMjVUMjI6NTE6MDEuNTkwMzQ5WiAwIFtTeXN0ZW1dIFtNWS0wMTAyMzJdIFtTZXJ2ZXJdIFhBIGNyYXNoIHJlY292ZXJ5IGZpbmlzaGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAABjMjAyMi0xMC0yNVQyMjo1MTowMS42ODkwMzlaIDAgW1dhcm5pbmddIFtNWS0wMTAwNjhdIFtTZXJ2ZXJdIENBIGNlcnRpZmljYXRlIGNhLnBlbSBpcyBzZWxmIHNpZ25lZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMi0xMC0yNVQyMjo1MTowMS42ODk3OTBaIDAgW1N5c3RlbV0gW01ZLTAxMzYwMl0gW1NlcnZlcl0gQ2hhbm5lbCBteXNxbF9tYWluIGNvbmZpZ3VyZWQgdG8gc3VwcG9ydCBUTFMuIEVuY3J5cHRlZCBjb25uZWN0aW9ucyBhcmUgbm93IHN1cHBvcnRlZCBmb3IgdGhpcyBjaGFubmVsLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIyLTEwLTI1VDIyOjUxOjAxLjcwMjYwNVogMCBbV2FybmluZ10gW01ZLTAxMTgxMF0gW1NlcnZlcl0gSW5zZWN1cmUgY29uZmlndXJhdGlvbiBmb3IgLS1waWQtZmlsZTogTG9jYXRpb24gJy92YXIvcnVuL215c3FsZCcgaW4gdGhlIHBhdGggaXMgYWNjZXNzaWJsZSB0byBhbGwgT1MgdXNlcnMuIENvbnNpZGVyIGNob29zaW5nIGEgZGlmZmVyZW50IGRpcmVjdG9yeS4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMi0xMC0yNVQyMjo1MTowMS43NTU3NjVaIDAgW1N5c3RlbV0gW01ZLTAxMDkzMV0gW1NlcnZlcl0gL3Vzci9zYmluL215c3FsZDogcmVhZHkgZm9yIGNvbm5lY3Rpb25zLiBWZXJzaW9uOiAnOC4wLjIzJyAgc29ja2V0OiAnL3Zhci9ydW4vbXlzcWxkL215c3FsZC5zb2NrJyAgcG9ydDogMzMwNiAgTXlTUUwgQ29tbXVuaXR5IFNlcnZlciAtIEdQTC4KbXlzcWwtbXlzcWwJfCABAAAAAAAAbDIwMjItMTAtMzEgMjA6MDI6MTIrMDA6MDAgW05vdGVdIFtFbnRyeXBvaW50XTogRW50cnlwb2ludCBzY3JpcHQgZm9yIE15U1FMIFNlcnZlciA4LjAuMjMtMWRlYmlhbjEwIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAQAAAAAAAFMyMDIyLTEwLTMxIDIwOjAyOjEzKzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IFN3aXRjaGluZyB0byBkZWRpY2F0ZWQgdXNlciAnbXlzcWwnCm15c3FsLW15c3FsCXwgAQAAAAAAAGwyMDIyLTEwLTMxIDIwOjAyOjEzKzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IEVudHJ5cG9pbnQgc2NyaXB0IGZvciBNeVNRTCBTZXJ2ZXIgOC4wLjIzLTFkZWJpYW4xMCBzdGFydGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAABzMjAyMi0xMC0zMVQyMDowMjoxMy45MzIwNjZaIDAgW1N5c3RlbV0gW01ZLTAxMDExNl0gW1NlcnZlcl0gL3Vzci9zYmluL215c3FsZCAobXlzcWxkIDguMC4yMykgc3RhcnRpbmcgYXMgcHJvY2VzcyAxCm15c3FsLW15c3FsCXwgAgAAAAAAAF8yMDIyLTEwLTMxVDIwOjAyOjEzLjk2MjI2NFogMSBbU3lzdGVtXSBbTVktMDEzNTc2XSBbSW5ub0RCXSBJbm5vREIgaW5pdGlhbGl6YXRpb24gaGFzIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAAF0yMDIyLTEwLTMxVDIwOjAyOjE1LjEyMTYwNlogMSBbU3lzdGVtXSBbTVktMDEzNTc3XSBbSW5ub0RCXSBJbm5vREIgaW5pdGlhbGl6YXRpb24gaGFzIGVuZGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIyLTEwLTMxVDIwOjAyOjE1LjY0NTI2NVogMCBbU3lzdGVtXSBbTVktMDExMzIzXSBbU2VydmVyXSBYIFBsdWdpbiByZWFkeSBmb3IgY29ubmVjdGlvbnMuIEJpbmQtYWRkcmVzczogJzo6JyBwb3J0OiAzMzA2MCwgc29ja2V0OiAvdmFyL3J1bi9teXNxbGQvbXlzcWx4LnNvY2sKbXlzcWwtbXlzcWwJfCACAAAAAAAAWjIwMjItMTAtMzFUMjA6MDI6MTUuNzQ1MTg1WiAwIFtTeXN0ZW1dIFtNWS0wMTAyMjldIFtTZXJ2ZXJdIFN0YXJ0aW5nIFhBIGNyYXNoIHJlY292ZXJ5Li4uCm15c3FsLW15c3FsCXwgAgAAAAAAAFgyMDIyLTEwLTMxVDIwOjAyOjE1Ljc2NjYwNlogMCBbU3lzdGVtXSBbTVktMDEwMjMyXSBbU2VydmVyXSBYQSBjcmFzaCByZWNvdmVyeSBmaW5pc2hlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAYzIwMjItMTAtMzFUMjA6MDI6MTUuODk2ODUzWiAwIFtXYXJuaW5nXSBbTVktMDEwMDY4XSBbU2VydmVyXSBDQSBjZXJ0aWZpY2F0ZSBjYS5wZW0gaXMgc2VsZiBzaWduZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjItMTAtMzFUMjA6MDI6MTUuODk3Mzc5WiAwIFtTeXN0ZW1dIFtNWS0wMTM2MDJdIFtTZXJ2ZXJdIENoYW5uZWwgbXlzcWxfbWFpbiBjb25maWd1cmVkIHRvIHN1cHBvcnQgVExTLiBFbmNyeXB0ZWQgY29ubmVjdGlvbnMgYXJlIG5vdyBzdXBwb3J0ZWQgZm9yIHRoaXMgY2hhbm5lbC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMi0xMC0zMVQyMDowMjoxNS45MjE0NjNaIDAgW1dhcm5pbmddIFtNWS0wMTE4MTBdIFtTZXJ2ZXJdIEluc2VjdXJlIGNvbmZpZ3VyYXRpb24gZm9yIC0tcGlkLWZpbGU6IExvY2F0aW9uICcvdmFyL3J1bi9teXNxbGQnIGluIHRoZSBwYXRoIGlzIGFjY2Vzc2libGUgdG8gYWxsIE9TIHVzZXJzLiBDb25zaWRlciBjaG9vc2luZyBhIGRpZmZlcmVudCBkaXJlY3RvcnkuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjItMTAtMzFUMjA6MDI6MTYuMTAwOTY0WiAwIFtTeXN0ZW1dIFtNWS0wMTA5MzFdIFtTZXJ2ZXJdIC91c3Ivc2Jpbi9teXNxbGQ6IHJlYWR5IGZvciBjb25uZWN0aW9ucy4gVmVyc2lvbjogJzguMC4yMycgIHNvY2tldDogJy92YXIvcnVuL215c3FsZC9teXNxbGQuc29jaycgIHBvcnQ6IDMzMDYgIE15U1FMIENvbW11bml0eSBTZXJ2ZXIgLSBHUEwuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjItMTAtMzFUMjM6MDQ6MjUuOTE5ODI4WiAwIFtTeXN0ZW1dIFtNWS0wMTMxNzJdIFtTZXJ2ZXJdIFJlY2VpdmVkIFNIVVRET1dOIGZyb20gdXNlciA8dmlhIHVzZXIgc2lnbmFsPi4gU2h1dHRpbmcgZG93biBteXNxbGQgKFZlcnNpb246IDguMC4yMykuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjItMTAtMzFUMjM6MDQ6MjYuODIyMDI4WiAwIFtTeXN0ZW1dIFtNWS0wMTA5MTBdIFtTZXJ2ZXJdIC91c3Ivc2Jpbi9teXNxbGQ6IFNodXRkb3duIGNvbXBsZXRlIChteXNxbGQgOC4wLjIzKSAgTXlTUUwgQ29tbXVuaXR5IFNlcnZlciAtIEdQTC4KbXlzcWwtbXlzcWwJfCABAAAAAAAAbDIwMjItMTAtMzEgMjM6MDc6MDArMDA6MDAgW05vdGVdIFtFbnRyeXBvaW50XTogRW50cnlwb2ludCBzY3JpcHQgZm9yIE15U1FMIFNlcnZlciA4LjAuMjMtMWRlYmlhbjEwIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAQAAAAAAAFMyMDIyLTEwLTMxIDIzOjA3OjAxKzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IFN3aXRjaGluZyB0byBkZWRpY2F0ZWQgdXNlciAnbXlzcWwnCm15c3FsLW15c3FsCXwgAQAAAAAAAGwyMDIyLTEwLTMxIDIzOjA3OjAxKzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IEVudHJ5cG9pbnQgc2NyaXB0IGZvciBNeVNRTCBTZXJ2ZXIgOC4wLjIzLTFkZWJpYW4xMCBzdGFydGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAABzMjAyMi0xMC0zMVQyMzowNzowMS41ODYwNDRaIDAgW1N5c3RlbV0gW01ZLTAxMDExNl0gW1NlcnZlcl0gL3Vzci9zYmluL215c3FsZCAobXlzcWxkIDguMC4yMykgc3RhcnRpbmcgYXMgcHJvY2VzcyAxCm15c3FsLW15c3FsCXwgAgAAAAAAAF8yMDIyLTEwLTMxVDIzOjA3OjAxLjU5OTA1MlogMSBbU3lzdGVtXSBbTVktMDEzNTc2XSBbSW5ub0RCXSBJbm5vREIgaW5pdGlhbGl6YXRpb24gaGFzIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAAF0yMDIyLTEwLTMxVDIzOjA3OjAyLjM4NDAyOVogMSBbU3lzdGVtXSBbTVktMDEzNTc3XSBbSW5ub0RCXSBJbm5vREIgaW5pdGlhbGl6YXRpb24gaGFzIGVuZGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIyLTEwLTMxVDIzOjA3OjAyLjUyNTY3NlogMCBbU3lzdGVtXSBbTVktMDExMzIzXSBbU2VydmVyXSBYIFBsdWdpbiByZWFkeSBmb3IgY29ubmVjdGlvbnMuIEJpbmQtYWRkcmVzczogJzo6JyBwb3J0OiAzMzA2MCwgc29ja2V0OiAvdmFyL3J1bi9teXNxbGQvbXlzcWx4LnNvY2sKbXlzcWwtbXlzcWwJfCACAAAAAAAAYzIwMjItMTAtMzFUMjM6MDc6MDIuNjQ0NzI0WiAwIFtXYXJuaW5nXSBbTVktMDEwMDY4XSBbU2VydmVyXSBDQSBjZXJ0aWZpY2F0ZSBjYS5wZW0gaXMgc2VsZiBzaWduZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjItMTAtMzFUMjM6MDc6MDIuNjQ1MDE1WiAwIFtTeXN0ZW1dIFtNWS0wMTM2MDJdIFtTZXJ2ZXJdIENoYW5uZWwgbXlzcWxfbWFpbiBjb25maWd1cmVkIHRvIHN1cHBvcnQgVExTLiBFbmNyeXB0ZWQgY29ubmVjdGlvbnMgYXJlIG5vdyBzdXBwb3J0ZWQgZm9yIHRoaXMgY2hhbm5lbC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMi0xMC0zMVQyMzowNzowMi42NTQ0MjFaIDAgW1dhcm5pbmddIFtNWS0wMTE4MTBdIFtTZXJ2ZXJdIEluc2VjdXJlIGNvbmZpZ3VyYXRpb24gZm9yIC0tcGlkLWZpbGU6IExvY2F0aW9uICcvdmFyL3J1bi9teXNxbGQnIGluIHRoZSBwYXRoIGlzIGFjY2Vzc2libGUgdG8gYWxsIE9TIHVzZXJzLiBDb25zaWRlciBjaG9vc2luZyBhIGRpZmZlcmVudCBkaXJlY3RvcnkuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjItMTAtMzFUMjM6MDc6MDIuNzA1MDM5WiAwIFtTeXN0ZW1dIFtNWS0wMTA5MzFdIFtTZXJ2ZXJdIC91c3Ivc2Jpbi9teXNxbGQ6IHJlYWR5IGZvciBjb25uZWN0aW9ucy4gVmVyc2lvbjogJzguMC4yMycgIHNvY2tldDogJy92YXIvcnVuL215c3FsZC9teXNxbGQuc29jaycgIHBvcnQ6IDMzMDYgIE15U1FMIENvbW11bml0eSBTZXJ2ZXIgLSBHUEwuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjItMTAtMzFUMjM6MTk6NDQuMTE0MDM3WiAwIFtTeXN0ZW1dIFtNWS0wMTMxNzJdIFtTZXJ2ZXJdIFJlY2VpdmVkIFNIVVRET1dOIGZyb20gdXNlciA8dmlhIHVzZXIgc2lnbmFsPi4gU2h1dHRpbmcgZG93biBteXNxbGQgKFZlcnNpb246IDguMC4yMykuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjItMTAtMzFUMjM6MTk6NDQuODE3NTIwWiAwIFtTeXN0ZW1dIFtNWS0wMTA5MTBdIFtTZXJ2ZXJdIC91c3Ivc2Jpbi9teXNxbGQ6IFNodXRkb3duIGNvbXBsZXRlIChteXNxbGQgOC4wLjIzKSAgTXlTUUwgQ29tbXVuaXR5IFNlcnZlciAtIEdQTC4KbXlzcWwtbXlzcWwJfCABAAAAAAAAbDIwMjItMTAtMzEgMjM6MjI6MzArMDA6MDAgW05vdGVdIFtFbnRyeXBvaW50XTogRW50cnlwb2ludCBzY3JpcHQgZm9yIE15U1FMIFNlcnZlciA4LjAuMjMtMWRlYmlhbjEwIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAQAAAAAAAFMyMDIyLTEwLTMxIDIzOjIyOjMxKzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IFN3aXRjaGluZyB0byBkZWRpY2F0ZWQgdXNlciAnbXlzcWwnCm15c3FsLW15c3FsCXwgAQAAAAAAAGwyMDIyLTEwLTMxIDIzOjIyOjMxKzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IEVudHJ5cG9pbnQgc2NyaXB0IGZvciBNeVNRTCBTZXJ2ZXIgOC4wLjIzLTFkZWJpYW4xMCBzdGFydGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAABzMjAyMi0xMC0zMVQyMzoyMjozMS40MTc1OTNaIDAgW1N5c3RlbV0gW01ZLTAxMDExNl0gW1NlcnZlcl0gL3Vzci9zYmluL215c3FsZCAobXlzcWxkIDguMC4yMykgc3RhcnRpbmcgYXMgcHJvY2VzcyAxCm15c3FsLW15c3FsCXwgAgAAAAAAAF8yMDIyLTEwLTMxVDIzOjIyOjMxLjQyOTQ3MlogMSBbU3lzdGVtXSBbTVktMDEzNTc2XSBbSW5ub0RCXSBJbm5vREIgaW5pdGlhbGl6YXRpb24gaGFzIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAAF0yMDIyLTEwLTMxVDIzOjIyOjMxLjY1NjczNVogMSBbU3lzdGVtXSBbTVktMDEzNTc3XSBbSW5ub0RCXSBJbm5vREIgaW5pdGlhbGl6YXRpb24gaGFzIGVuZGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIyLTEwLTMxVDIzOjIyOjMxLjc4MDA5MFogMCBbU3lzdGVtXSBbTVktMDExMzIzXSBbU2VydmVyXSBYIFBsdWdpbiByZWFkeSBmb3IgY29ubmVjdGlvbnMuIEJpbmQtYWRkcmVzczogJzo6JyBwb3J0OiAzMzA2MCwgc29ja2V0OiAvdmFyL3J1bi9teXNxbGQvbXlzcWx4LnNvY2sKbXlzcWwtbXlzcWwJfCACAAAAAAAAYzIwMjItMTAtMzFUMjM6MjI6MzEuODQyNDAyWiAwIFtXYXJuaW5nXSBbTVktMDEwMDY4XSBbU2VydmVyXSBDQSBjZXJ0aWZpY2F0ZSBjYS5wZW0gaXMgc2VsZiBzaWduZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjItMTAtMzFUMjM6MjI6MzEuODQyNTU1WiAwIFtTeXN0ZW1dIFtNWS0wMTM2MDJdIFtTZXJ2ZXJdIENoYW5uZWwgbXlzcWxfbWFpbiBjb25maWd1cmVkIHRvIHN1cHBvcnQgVExTLiBFbmNyeXB0ZWQgY29ubmVjdGlvbnMgYXJlIG5vdyBzdXBwb3J0ZWQgZm9yIHRoaXMgY2hhbm5lbC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMi0xMC0zMVQyMzoyMjozMS44NDU2MzdaIDAgW1dhcm5pbmddIFtNWS0wMTE4MTBdIFtTZXJ2ZXJdIEluc2VjdXJlIGNvbmZpZ3VyYXRpb24gZm9yIC0tcGlkLWZpbGU6IExvY2F0aW9uICcvdmFyL3J1bi9teXNxbGQnIGluIHRoZSBwYXRoIGlzIGFjY2Vzc2libGUgdG8gYWxsIE9TIHVzZXJzLiBDb25zaWRlciBjaG9vc2luZyBhIGRpZmZlcmVudCBkaXJlY3RvcnkuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjItMTAtMzFUMjM6MjI6MzEuODY4MjM2WiAwIFtTeXN0ZW1dIFtNWS0wMTA5MzFdIFtTZXJ2ZXJdIC91c3Ivc2Jpbi9teXNxbGQ6IHJlYWR5IGZvciBjb25uZWN0aW9ucy4gVmVyc2lvbjogJzguMC4yMycgIHNvY2tldDogJy92YXIvcnVuL215c3FsZC9teXNxbGQuc29jaycgIHBvcnQ6IDMzMDYgIE15U1FMIENvbW11bml0eSBTZXJ2ZXIgLSBHUEwuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjItMTAtMzFUMjM6MzE6MzkuODE5NzM2WiAwIFtTeXN0ZW1dIFtNWS0wMTMxNzJdIFtTZXJ2ZXJdIFJlY2VpdmVkIFNIVVRET1dOIGZyb20gdXNlciA8dmlhIHVzZXIgc2lnbmFsPi4gU2h1dHRpbmcgZG93biBteXNxbGQgKFZlcnNpb246IDguMC4yMykuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjItMTAtMzFUMjM6MzE6NDEuMDU3NzI2WiAwIFtTeXN0ZW1dIFtNWS0wMTA5MTBdIFtTZXJ2ZXJdIC91c3Ivc2Jpbi9teXNxbGQ6IFNodXRkb3duIGNvbXBsZXRlIChteXNxbGQgOC4wLjIzKSAgTXlTUUwgQ29tbXVuaXR5IFNlcnZlciAtIEdQTC4KbXlzcWwtbXlzcWwJfCABAAAAAAAAbDIwMjItMTAtMzEgMjM6MzQ6MjErMDA6MDAgW05vdGVdIFtFbnRyeXBvaW50XTogRW50cnlwb2ludCBzY3JpcHQgZm9yIE15U1FMIFNlcnZlciA4LjAuMjMtMWRlYmlhbjEwIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAQAAAAAAAFMyMDIyLTEwLTMxIDIzOjM0OjIxKzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IFN3aXRjaGluZyB0byBkZWRpY2F0ZWQgdXNlciAnbXlzcWwnCm15c3FsLW15c3FsCXwgAQAAAAAAAGwyMDIyLTEwLTMxIDIzOjM0OjIxKzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IEVudHJ5cG9pbnQgc2NyaXB0IGZvciBNeVNRTCBTZXJ2ZXIgOC4wLjIzLTFkZWJpYW4xMCBzdGFydGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAABzMjAyMi0xMC0zMVQyMzozNDoyMS42NDE5MTFaIDAgW1N5c3RlbV0gW01ZLTAxMDExNl0gW1NlcnZlcl0gL3Vzci9zYmluL215c3FsZCAobXlzcWxkIDguMC4yMykgc3RhcnRpbmcgYXMgcHJvY2VzcyAxCm15c3FsLW15c3FsCXwgAgAAAAAAAF8yMDIyLTEwLTMxVDIzOjM0OjIxLjY1MzYyOVogMSBbU3lzdGVtXSBbTVktMDEzNTc2XSBbSW5ub0RCXSBJbm5vREIgaW5pdGlhbGl6YXRpb24gaGFzIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAAF0yMDIyLTEwLTMxVDIzOjM0OjIxLjg3MDMzOVogMSBbU3lzdGVtXSBbTVktMDEzNTc3XSBbSW5ub0RCXSBJbm5vREIgaW5pdGlhbGl6YXRpb24gaGFzIGVuZGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIyLTEwLTMxVDIzOjM0OjIxLjk4MTE5OFogMCBbU3lzdGVtXSBbTVktMDExMzIzXSBbU2VydmVyXSBYIFBsdWdpbiByZWFkeSBmb3IgY29ubmVjdGlvbnMuIEJpbmQtYWRkcmVzczogJzo6JyBwb3J0OiAzMzA2MCwgc29ja2V0OiAvdmFyL3J1bi9teXNxbGQvbXlzcWx4LnNvY2sKbXlzcWwtbXlzcWwJfCACAAAAAAAAYzIwMjItMTAtMzFUMjM6MzQ6MjIuMDI3ODEzWiAwIFtXYXJuaW5nXSBbTVktMDEwMDY4XSBbU2VydmVyXSBDQSBjZXJ0aWZpY2F0ZSBjYS5wZW0gaXMgc2VsZiBzaWduZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjItMTAtMzFUMjM6MzQ6MjIuMDI3OTQ3WiAwIFtTeXN0ZW1dIFtNWS0wMTM2MDJdIFtTZXJ2ZXJdIENoYW5uZWwgbXlzcWxfbWFpbiBjb25maWd1cmVkIHRvIHN1cHBvcnQgVExTLiBFbmNyeXB0ZWQgY29ubmVjdGlvbnMgYXJlIG5vdyBzdXBwb3J0ZWQgZm9yIHRoaXMgY2hhbm5lbC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMi0xMC0zMVQyMzozNDoyMi4wMzEwNTlaIDAgW1dhcm5pbmddIFtNWS0wMTE4MTBdIFtTZXJ2ZXJdIEluc2VjdXJlIGNvbmZpZ3VyYXRpb24gZm9yIC0tcGlkLWZpbGU6IExvY2F0aW9uICcvdmFyL3J1bi9teXNxbGQnIGluIHRoZSBwYXRoIGlzIGFjY2Vzc2libGUgdG8gYWxsIE9TIHVzZXJzLiBDb25zaWRlciBjaG9vc2luZyBhIGRpZmZlcmVudCBkaXJlY3RvcnkuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjItMTAtMzFUMjM6MzQ6MjIuMDU2MTUwWiAwIFtTeXN0ZW1dIFtNWS0wMTA5MzFdIFtTZXJ2ZXJdIC91c3Ivc2Jpbi9teXNxbGQ6IHJlYWR5IGZvciBjb25uZWN0aW9ucy4gVmVyc2lvbjogJzguMC4yMycgIHNvY2tldDogJy92YXIvcnVuL215c3FsZC9teXNxbGQuc29jaycgIHBvcnQ6IDMzMDYgIE15U1FMIENvbW11bml0eSBTZXJ2ZXIgLSBHUEwuCm15c3FsLW15c3FsCXwgAQAAAAAAAGwyMDIyLTExLTA5IDAwOjQwOjU2KzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IEVudHJ5cG9pbnQgc2NyaXB0IGZvciBNeVNRTCBTZXJ2ZXIgOC4wLjIzLTFkZWJpYW4xMCBzdGFydGVkLgpteXNxbC1teXNxbAl8IAEAAAAAAABTMjAyMi0xMS0wOSAwMDo0MDo1NiswMDowMCBbTm90ZV0gW0VudHJ5cG9pbnRdOiBTd2l0Y2hpbmcgdG8gZGVkaWNhdGVkIHVzZXIgJ215c3FsJwpteXNxbC1teXNxbAl8IAEAAAAAAABsMjAyMi0xMS0wOSAwMDo0MDo1NiswMDowMCBbTm90ZV0gW0VudHJ5cG9pbnRdOiBFbnRyeXBvaW50IHNjcmlwdCBmb3IgTXlTUUwgU2VydmVyIDguMC4yMy0xZGViaWFuMTAgc3RhcnRlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAczIwMjItMTEtMDlUMDA6NDA6NTcuMjExNjk5WiAwIFtTeXN0ZW1dIFtNWS0wMTAxMTZdIFtTZXJ2ZXJdIC91c3Ivc2Jpbi9teXNxbGQgKG15c3FsZCA4LjAuMjMpIHN0YXJ0aW5nIGFzIHByb2Nlc3MgMQpteXNxbC1teXNxbAl8IAIAAAAAAABfMjAyMi0xMS0wOVQwMDo0MDo1Ny4yMjEyMThaIDEgW1N5c3RlbV0gW01ZLTAxMzU3Nl0gW0lubm9EQl0gSW5ub0RCIGluaXRpYWxpemF0aW9uIGhhcyBzdGFydGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAABdMjAyMi0xMS0wOVQwMDo0MDo1Ny45ODA0OTBaIDEgW1N5c3RlbV0gW01ZLTAxMzU3N10gW0lubm9EQl0gSW5ub0RCIGluaXRpYWxpemF0aW9uIGhhcyBlbmRlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMi0xMS0wOVQwMDo0MDo1OC4xNDI2ODZaIDAgW1N5c3RlbV0gW01ZLTAxMTMyM10gW1NlcnZlcl0gWCBQbHVnaW4gcmVhZHkgZm9yIGNvbm5lY3Rpb25zLiBCaW5kLWFkZHJlc3M6ICc6OicgcG9ydDogMzMwNjAsIHNvY2tldDogL3Zhci9ydW4vbXlzcWxkL215c3FseC5zb2NrCm15c3FsLW15c3FsCXwgAgAAAAAAAFoyMDIyLTExLTA5VDAwOjQwOjU4LjIyNjU5N1ogMCBbU3lzdGVtXSBbTVktMDEwMjI5XSBbU2VydmVyXSBTdGFydGluZyBYQSBjcmFzaCByZWNvdmVyeS4uLgpteXNxbC1teXNxbAl8IAIAAAAAAABYMjAyMi0xMS0wOVQwMDo0MDo1OC4yNDI3ODNaIDAgW1N5c3RlbV0gW01ZLTAxMDIzMl0gW1NlcnZlcl0gWEEgY3Jhc2ggcmVjb3ZlcnkgZmluaXNoZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAAGMyMDIyLTExLTA5VDAwOjQwOjU4LjQ0MTQ0MFogMCBbV2FybmluZ10gW01ZLTAxMDA2OF0gW1NlcnZlcl0gQ0EgY2VydGlmaWNhdGUgY2EucGVtIGlzIHNlbGYgc2lnbmVkLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIyLTExLTA5VDAwOjQwOjU4LjQ0MTg2N1ogMCBbU3lzdGVtXSBbTVktMDEzNjAyXSBbU2VydmVyXSBDaGFubmVsIG15c3FsX21haW4gY29uZmlndXJlZCB0byBzdXBwb3J0IFRMUy4gRW5jcnlwdGVkIGNvbm5lY3Rpb25zIGFyZSBub3cgc3VwcG9ydGVkIGZvciB0aGlzIGNoYW5uZWwuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjItMTEtMDlUMDA6NDA6NTguNDUyODA1WiAwIFtXYXJuaW5nXSBbTVktMDExODEwXSBbU2VydmVyXSBJbnNlY3VyZSBjb25maWd1cmF0aW9uIGZvciAtLXBpZC1maWxlOiBMb2NhdGlvbiAnL3Zhci9ydW4vbXlzcWxkJyBpbiB0aGUgcGF0aCBpcyBhY2Nlc3NpYmxlIHRvIGFsbCBPUyB1c2Vycy4gQ29uc2lkZXIgY2hvb3NpbmcgYSBkaWZmZXJlbnQgZGlyZWN0b3J5LgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIyLTExLTA5VDAwOjQwOjU4LjUxMzMwNFogMCBbU3lzdGVtXSBbTVktMDEwOTMxXSBbU2VydmVyXSAvdXNyL3NiaW4vbXlzcWxkOiByZWFkeSBmb3IgY29ubmVjdGlvbnMuIFZlcnNpb246ICc4LjAuMjMnICBzb2NrZXQ6ICcvdmFyL3J1bi9teXNxbGQvbXlzcWxkLnNvY2snICBwb3J0OiAzMzA2ICBNeVNRTCBDb21tdW5pdHkgU2VydmVyIC0gR1BMLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIyLTExLTA5VDAwOjQ5OjQyLjE2Nzk3OFogMCBbU3lzdGVtXSBbTVktMDEzMTcyXSBbU2VydmVyXSBSZWNlaXZlZCBTSFVURE9XTiBmcm9tIHVzZXIgPHZpYSB1c2VyIHNpZ25hbD4uIFNodXR0aW5nIGRvd24gbXlzcWxkIChWZXJzaW9uOiA4LjAuMjMpLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIyLTExLTA5VDAwOjQ5OjQzLjQwMTQwNVogMCBbU3lzdGVtXSBbTVktMDEwOTEwXSBbU2VydmVyXSAvdXNyL3NiaW4vbXlzcWxkOiBTaHV0ZG93biBjb21wbGV0ZSAobXlzcWxkIDguMC4yMykgIE15U1FMIENvbW11bml0eSBTZXJ2ZXIgLSBHUEwuCm15c3FsLW15c3FsCXwgAQAAAAAAAGwyMDIyLTExLTA5IDAwOjUyOjE3KzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IEVudHJ5cG9pbnQgc2NyaXB0IGZvciBNeVNRTCBTZXJ2ZXIgOC4wLjIzLTFkZWJpYW4xMCBzdGFydGVkLgpteXNxbC1teXNxbAl8IAEAAAAAAABTMjAyMi0xMS0wOSAwMDo1MjoxNyswMDowMCBbTm90ZV0gW0VudHJ5cG9pbnRdOiBTd2l0Y2hpbmcgdG8gZGVkaWNhdGVkIHVzZXIgJ215c3FsJwpteXNxbC1teXNxbAl8IAEAAAAAAABsMjAyMi0xMS0wOSAwMDo1MjoxNyswMDowMCBbTm90ZV0gW0VudHJ5cG9pbnRdOiBFbnRyeXBvaW50IHNjcmlwdCBmb3IgTXlTUUwgU2VydmVyIDguMC4yMy0xZGViaWFuMTAgc3RhcnRlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAczIwMjItMTEtMDlUMDA6NTI6MTcuOTY3NjI0WiAwIFtTeXN0ZW1dIFtNWS0wMTAxMTZdIFtTZXJ2ZXJdIC91c3Ivc2Jpbi9teXNxbGQgKG15c3FsZCA4LjAuMjMpIHN0YXJ0aW5nIGFzIHByb2Nlc3MgMQpteXNxbC1teXNxbAl8IAIAAAAAAABfMjAyMi0xMS0wOVQwMDo1MjoxNy45ODQ3MDdaIDEgW1N5c3RlbV0gW01ZLTAxMzU3Nl0gW0lubm9EQl0gSW5ub0RCIGluaXRpYWxpemF0aW9uIGhhcyBzdGFydGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAABdMjAyMi0xMS0wOVQwMDo1MjoxOC42MDY5NjBaIDEgW1N5c3RlbV0gW01ZLTAxMzU3N10gW0lubm9EQl0gSW5ub0RCIGluaXRpYWxpemF0aW9uIGhhcyBlbmRlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMi0xMS0wOVQwMDo1MjoxOC43NTQ4MzhaIDAgW1N5c3RlbV0gW01ZLTAxMTMyM10gW1NlcnZlcl0gWCBQbHVnaW4gcmVhZHkgZm9yIGNvbm5lY3Rpb25zLiBCaW5kLWFkZHJlc3M6ICc6OicgcG9ydDogMzMwNjAsIHNvY2tldDogL3Zhci9ydW4vbXlzcWxkL215c3FseC5zb2NrCm15c3FsLW15c3FsCXwgAgAAAAAAAGMyMDIyLTExLTA5VDAwOjUyOjE4Ljg2MTI2OFogMCBbV2FybmluZ10gW01ZLTAxMDA2OF0gW1NlcnZlcl0gQ0EgY2VydGlmaWNhdGUgY2EucGVtIGlzIHNlbGYgc2lnbmVkLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIyLTExLTA5VDAwOjUyOjE4Ljg2MTcwOFogMCBbU3lzdGVtXSBbTVktMDEzNjAyXSBbU2VydmVyXSBDaGFubmVsIG15c3FsX21haW4gY29uZmlndXJlZCB0byBzdXBwb3J0IFRMUy4gRW5jcnlwdGVkIGNvbm5lY3Rpb25zIGFyZSBub3cgc3VwcG9ydGVkIGZvciB0aGlzIGNoYW5uZWwuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjItMTEtMDlUMDA6NTI6MTguODcyMDIzWiAwIFtXYXJuaW5nXSBbTVktMDExODEwXSBbU2VydmVyXSBJbnNlY3VyZSBjb25maWd1cmF0aW9uIGZvciAtLXBpZC1maWxlOiBMb2NhdGlvbiAnL3Zhci9ydW4vbXlzcWxkJyBpbiB0aGUgcGF0aCBpcyBhY2Nlc3NpYmxlIHRvIGFsbCBPUyB1c2Vycy4gQ29uc2lkZXIgY2hvb3NpbmcgYSBkaWZmZXJlbnQgZGlyZWN0b3J5LgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIyLTExLTA5VDAwOjUyOjE4LjkyMjYzNVogMCBbU3lzdGVtXSBbTVktMDEwOTMxXSBbU2VydmVyXSAvdXNyL3NiaW4vbXlzcWxkOiByZWFkeSBmb3IgY29ubmVjdGlvbnMuIFZlcnNpb246ICc4LjAuMjMnICBzb2NrZXQ6ICcvdmFyL3J1bi9teXNxbGQvbXlzcWxkLnNvY2snICBwb3J0OiAzMzA2ICBNeVNRTCBDb21tdW5pdHkgU2VydmVyIC0gR1BMLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIzLTAzLTAyVDE5OjE1OjQ2LjE0NzAyOVogMCBbU3lzdGVtXSBbTVktMDEzMTcyXSBbU2VydmVyXSBSZWNlaXZlZCBTSFVURE9XTiBmcm9tIHVzZXIgPHZpYSB1c2VyIHNpZ25hbD4uIFNodXR0aW5nIGRvd24gbXlzcWxkIChWZXJzaW9uOiA4LjAuMjMpLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIzLTAzLTAyVDE5OjE1OjQ3LjUzMDEzOFogMCBbU3lzdGVtXSBbTVktMDEwOTEwXSBbU2VydmVyXSAvdXNyL3NiaW4vbXlzcWxkOiBTaHV0ZG93biBjb21wbGV0ZSAobXlzcWxkIDguMC4yMykgIE15U1FMIENvbW11bml0eSBTZXJ2ZXIgLSBHUEwuCm15c3FsLW15c3FsCXwgAQAAAAAAAGwyMDIzLTAzLTAyIDE5OjE4OjQwKzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IEVudHJ5cG9pbnQgc2NyaXB0IGZvciBNeVNRTCBTZXJ2ZXIgOC4wLjIzLTFkZWJpYW4xMCBzdGFydGVkLgpteXNxbC1teXNxbAl8IAEAAAAAAABTMjAyMy0wMy0wMiAxOToxODo0MCswMDowMCBbTm90ZV0gW0VudHJ5cG9pbnRdOiBTd2l0Y2hpbmcgdG8gZGVkaWNhdGVkIHVzZXIgJ215c3FsJwpteXNxbC1teXNxbAl8IAEAAAAAAABsMjAyMy0wMy0wMiAxOToxODo0MCswMDowMCBbTm90ZV0gW0VudHJ5cG9pbnRdOiBFbnRyeXBvaW50IHNjcmlwdCBmb3IgTXlTUUwgU2VydmVyIDguMC4yMy0xZGViaWFuMTAgc3RhcnRlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAczIwMjMtMDMtMDJUMTk6MTg6NDEuMDA4MDU0WiAwIFtTeXN0ZW1dIFtNWS0wMTAxMTZdIFtTZXJ2ZXJdIC91c3Ivc2Jpbi9teXNxbGQgKG15c3FsZCA4LjAuMjMpIHN0YXJ0aW5nIGFzIHByb2Nlc3MgMQpteXNxbC1teXNxbAl8IAIAAAAAAABfMjAyMy0wMy0wMlQxOToxODo0MS4wMTgxNzdaIDEgW1N5c3RlbV0gW01ZLTAxMzU3Nl0gW0lubm9EQl0gSW5ub0RCIGluaXRpYWxpemF0aW9uIGhhcyBzdGFydGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAABdMjAyMy0wMy0wMlQxOToxODo0MS4zMDM1NDRaIDEgW1N5c3RlbV0gW01ZLTAxMzU3N10gW0lubm9EQl0gSW5ub0RCIGluaXRpYWxpemF0aW9uIGhhcyBlbmRlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMy0wMy0wMlQxOToxODo0MS40NDA0NTRaIDAgW1N5c3RlbV0gW01ZLTAxMTMyM10gW1NlcnZlcl0gWCBQbHVnaW4gcmVhZHkgZm9yIGNvbm5lY3Rpb25zLiBCaW5kLWFkZHJlc3M6ICc6OicgcG9ydDogMzMwNjAsIHNvY2tldDogL3Zhci9ydW4vbXlzcWxkL215c3FseC5zb2NrCm15c3FsLW15c3FsCXwgAgAAAAAAAGMyMDIzLTAzLTAyVDE5OjE4OjQxLjUzNjE5NFogMCBbV2FybmluZ10gW01ZLTAxMDA2OF0gW1NlcnZlcl0gQ0EgY2VydGlmaWNhdGUgY2EucGVtIGlzIHNlbGYgc2lnbmVkLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIzLTAzLTAyVDE5OjE4OjQxLjUzNjYyMFogMCBbU3lzdGVtXSBbTVktMDEzNjAyXSBbU2VydmVyXSBDaGFubmVsIG15c3FsX21haW4gY29uZmlndXJlZCB0byBzdXBwb3J0IFRMUy4gRW5jcnlwdGVkIGNvbm5lY3Rpb25zIGFyZSBub3cgc3VwcG9ydGVkIGZvciB0aGlzIGNoYW5uZWwuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjMtMDMtMDJUMTk6MTg6NDEuNTQyNzMzWiAwIFtXYXJuaW5nXSBbTVktMDExODEwXSBbU2VydmVyXSBJbnNlY3VyZSBjb25maWd1cmF0aW9uIGZvciAtLXBpZC1maWxlOiBMb2NhdGlvbiAnL3Zhci9ydW4vbXlzcWxkJyBpbiB0aGUgcGF0aCBpcyBhY2Nlc3NpYmxlIHRvIGFsbCBPUyB1c2Vycy4gQ29uc2lkZXIgY2hvb3NpbmcgYSBkaWZmZXJlbnQgZGlyZWN0b3J5LgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIzLTAzLTAyVDE5OjE4OjQxLjU4MTk1NFogMCBbU3lzdGVtXSBbTVktMDEwOTMxXSBbU2VydmVyXSAvdXNyL3NiaW4vbXlzcWxkOiByZWFkeSBmb3IgY29ubmVjdGlvbnMuIFZlcnNpb246ICc4LjAuMjMnICBzb2NrZXQ6ICcvdmFyL3J1bi9teXNxbGQvbXlzcWxkLnNvY2snICBwb3J0OiAzMzA2ICBNeVNRTCBDb21tdW5pdHkgU2VydmVyIC0gR1BMLgpteXNxbC1teXNxbAl8IAEAAAAAAABsMjAyMy0wMy0wMiAyMDozMjoyOCswMDowMCBbTm90ZV0gW0VudHJ5cG9pbnRdOiBFbnRyeXBvaW50IHNjcmlwdCBmb3IgTXlTUUwgU2VydmVyIDguMC4yMy0xZGViaWFuMTAgc3RhcnRlZC4KbXlzcWwtbXlzcWwJfCABAAAAAAAAUzIwMjMtMDMtMDIgMjA6MzI6MjkrMDA6MDAgW05vdGVdIFtFbnRyeXBvaW50XTogU3dpdGNoaW5nIHRvIGRlZGljYXRlZCB1c2VyICdteXNxbCcKbXlzcWwtbXlzcWwJfCABAAAAAAAAbDIwMjMtMDMtMDIgMjA6MzI6MjkrMDA6MDAgW05vdGVdIFtFbnRyeXBvaW50XTogRW50cnlwb2ludCBzY3JpcHQgZm9yIE15U1FMIFNlcnZlciA4LjAuMjMtMWRlYmlhbjEwIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAAHMyMDIzLTAzLTAyVDIwOjMyOjI5LjM2OTY4MFogMCBbU3lzdGVtXSBbTVktMDEwMTE2XSBbU2VydmVyXSAvdXNyL3NiaW4vbXlzcWxkIChteXNxbGQgOC4wLjIzKSBzdGFydGluZyBhcyBwcm9jZXNzIDEKbXlzcWwtbXlzcWwJfCACAAAAAAAAXzIwMjMtMDMtMDJUMjA6MzI6MjkuMzc5NzM3WiAxIFtTeXN0ZW1dIFtNWS0wMTM1NzZdIFtJbm5vREJdIElubm9EQiBpbml0aWFsaXphdGlvbiBoYXMgc3RhcnRlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAXTIwMjMtMDMtMDJUMjA6MzI6MjkuODA5MjQ1WiAxIFtTeXN0ZW1dIFtNWS0wMTM1NzddIFtJbm5vREJdIElubm9EQiBpbml0aWFsaXphdGlvbiBoYXMgZW5kZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjMtMDMtMDJUMjA6MzI6MjkuOTQzMjE0WiAwIFtTeXN0ZW1dIFtNWS0wMTEzMjNdIFtTZXJ2ZXJdIFggUGx1Z2luIHJlYWR5IGZvciBjb25uZWN0aW9ucy4gQmluZC1hZGRyZXNzOiAnOjonIHBvcnQ6IDMzMDYwLCBzb2NrZXQ6IC92YXIvcnVuL215c3FsZC9teXNxbHguc29jawpteXNxbC1teXNxbAl8IAIAAAAAAABaMjAyMy0wMy0wMlQyMDozMjoyOS45NzM3MjNaIDAgW1N5c3RlbV0gW01ZLTAxMDIyOV0gW1NlcnZlcl0gU3RhcnRpbmcgWEEgY3Jhc2ggcmVjb3ZlcnkuLi4KbXlzcWwtbXlzcWwJfCACAAAAAAAAWDIwMjMtMDMtMDJUMjA6MzI6MjkuOTgyOTc4WiAwIFtTeXN0ZW1dIFtNWS0wMTAyMzJdIFtTZXJ2ZXJdIFhBIGNyYXNoIHJlY292ZXJ5IGZpbmlzaGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAABjMjAyMy0wMy0wMlQyMDozMjozMC4wMTI3NjZaIDAgW1dhcm5pbmddIFtNWS0wMTAwNjhdIFtTZXJ2ZXJdIENBIGNlcnRpZmljYXRlIGNhLnBlbSBpcyBzZWxmIHNpZ25lZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMy0wMy0wMlQyMDozMjozMC4wMTI5NDFaIDAgW1N5c3RlbV0gW01ZLTAxMzYwMl0gW1NlcnZlcl0gQ2hhbm5lbCBteXNxbF9tYWluIGNvbmZpZ3VyZWQgdG8gc3VwcG9ydCBUTFMuIEVuY3J5cHRlZCBjb25uZWN0aW9ucyBhcmUgbm93IHN1cHBvcnRlZCBmb3IgdGhpcyBjaGFubmVsLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIzLTAzLTAyVDIwOjMyOjMwLjAxNjU4OVogMCBbV2FybmluZ10gW01ZLTAxMTgxMF0gW1NlcnZlcl0gSW5zZWN1cmUgY29uZmlndXJhdGlvbiBmb3IgLS1waWQtZmlsZTogTG9jYXRpb24gJy92YXIvcnVuL215c3FsZCcgaW4gdGhlIHBhdGggaXMgYWNjZXNzaWJsZSB0byBhbGwgT1MgdXNlcnMuIENvbnNpZGVyIGNob29zaW5nIGEgZGlmZmVyZW50IGRpcmVjdG9yeS4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMy0wMy0wMlQyMDozMjozMC4wNDgwMTdaIDAgW1N5c3RlbV0gW01ZLTAxMDkzMV0gW1NlcnZlcl0gL3Vzci9zYmluL215c3FsZDogcmVhZHkgZm9yIGNvbm5lY3Rpb25zLiBWZXJzaW9uOiAnOC4wLjIzJyAgc29ja2V0OiAnL3Zhci9ydW4vbXlzcWxkL215c3FsZC5zb2NrJyAgcG9ydDogMzMwNiAgTXlTUUwgQ29tbXVuaXR5IFNlcnZlciAtIEdQTC4KbXlzcWwtbXlzcWwJfCABAAAAAAAAbDIwMjMtMDQtMjUgMTk6NDM6NDYrMDA6MDAgW05vdGVdIFtFbnRyeXBvaW50XTogRW50cnlwb2ludCBzY3JpcHQgZm9yIE15U1FMIFNlcnZlciA4LjAuMjMtMWRlYmlhbjEwIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAQAAAAAAAFMyMDIzLTA0LTI1IDE5OjQzOjQ3KzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IFN3aXRjaGluZyB0byBkZWRpY2F0ZWQgdXNlciAnbXlzcWwnCm15c3FsLW15c3FsCXwgAQAAAAAAAGwyMDIzLTA0LTI1IDE5OjQzOjQ3KzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IEVudHJ5cG9pbnQgc2NyaXB0IGZvciBNeVNRTCBTZXJ2ZXIgOC4wLjIzLTFkZWJpYW4xMCBzdGFydGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAABzMjAyMy0wNC0yNVQxOTo0Mzo0Ny41OTU1MjVaIDAgW1N5c3RlbV0gW01ZLTAxMDExNl0gW1NlcnZlcl0gL3Vzci9zYmluL215c3FsZCAobXlzcWxkIDguMC4yMykgc3RhcnRpbmcgYXMgcHJvY2VzcyAxCm15c3FsLW15c3FsCXwgAgAAAAAAAF8yMDIzLTA0LTI1VDE5OjQzOjQ3LjYwNzM5MFogMSBbU3lzdGVtXSBbTVktMDEzNTc2XSBbSW5ub0RCXSBJbm5vREIgaW5pdGlhbGl6YXRpb24gaGFzIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAAF0yMDIzLTA0LTI1VDE5OjQzOjQ4LjA3NjQ0NFogMSBbU3lzdGVtXSBbTVktMDEzNTc3XSBbSW5ub0RCXSBJbm5vREIgaW5pdGlhbGl6YXRpb24gaGFzIGVuZGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIzLTA0LTI1VDE5OjQzOjQ4LjIwNjI1N1ogMCBbU3lzdGVtXSBbTVktMDExMzIzXSBbU2VydmVyXSBYIFBsdWdpbiByZWFkeSBmb3IgY29ubmVjdGlvbnMuIEJpbmQtYWRkcmVzczogJzo6JyBwb3J0OiAzMzA2MCwgc29ja2V0OiAvdmFyL3J1bi9teXNxbGQvbXlzcWx4LnNvY2sKbXlzcWwtbXlzcWwJfCACAAAAAAAAWjIwMjMtMDQtMjVUMTk6NDM6NDguMjI2OTA4WiAwIFtTeXN0ZW1dIFtNWS0wMTAyMjldIFtTZXJ2ZXJdIFN0YXJ0aW5nIFhBIGNyYXNoIHJlY292ZXJ5Li4uCm15c3FsLW15c3FsCXwgAgAAAAAAAFgyMDIzLTA0LTI1VDE5OjQzOjQ4LjIzNjU5N1ogMCBbU3lzdGVtXSBbTVktMDEwMjMyXSBbU2VydmVyXSBYQSBjcmFzaCByZWNvdmVyeSBmaW5pc2hlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAYzIwMjMtMDQtMjVUMTk6NDM6NDguMjk3Nzg1WiAwIFtXYXJuaW5nXSBbTVktMDEwMDY4XSBbU2VydmVyXSBDQSBjZXJ0aWZpY2F0ZSBjYS5wZW0gaXMgc2VsZiBzaWduZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjMtMDQtMjVUMTk6NDM6NDguMjk4Mzk5WiAwIFtTeXN0ZW1dIFtNWS0wMTM2MDJdIFtTZXJ2ZXJdIENoYW5uZWwgbXlzcWxfbWFpbiBjb25maWd1cmVkIHRvIHN1cHBvcnQgVExTLiBFbmNyeXB0ZWQgY29ubmVjdGlvbnMgYXJlIG5vdyBzdXBwb3J0ZWQgZm9yIHRoaXMgY2hhbm5lbC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMy0wNC0yNVQxOTo0Mzo0OC4zMDYzMjVaIDAgW1dhcm5pbmddIFtNWS0wMTE4MTBdIFtTZXJ2ZXJdIEluc2VjdXJlIGNvbmZpZ3VyYXRpb24gZm9yIC0tcGlkLWZpbGU6IExvY2F0aW9uICcvdmFyL3J1bi9teXNxbGQnIGluIHRoZSBwYXRoIGlzIGFjY2Vzc2libGUgdG8gYWxsIE9TIHVzZXJzLiBDb25zaWRlciBjaG9vc2luZyBhIGRpZmZlcmVudCBkaXJlY3RvcnkuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjMtMDQtMjVUMTk6NDM6NDguMzc2MDU5WiAwIFtTeXN0ZW1dIFtNWS0wMTA5MzFdIFtTZXJ2ZXJdIC91c3Ivc2Jpbi9teXNxbGQ6IHJlYWR5IGZvciBjb25uZWN0aW9ucy4gVmVyc2lvbjogJzguMC4yMycgIHNvY2tldDogJy92YXIvcnVuL215c3FsZC9teXNxbGQuc29jaycgIHBvcnQ6IDMzMDYgIE15U1FMIENvbW11bml0eSBTZXJ2ZXIgLSBHUEwuCm15c3FsLW15c3FsCXwgAQAAAAAAAGwyMDIzLTA0LTI5IDAzOjMwOjU3KzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IEVudHJ5cG9pbnQgc2NyaXB0IGZvciBNeVNRTCBTZXJ2ZXIgOC4wLjIzLTFkZWJpYW4xMCBzdGFydGVkLgpteXNxbC1teXNxbAl8IAEAAAAAAABTMjAyMy0wNC0yOSAwMzozMDo1NyswMDowMCBbTm90ZV0gW0VudHJ5cG9pbnRdOiBTd2l0Y2hpbmcgdG8gZGVkaWNhdGVkIHVzZXIgJ215c3FsJwpteXNxbC1teXNxbAl8IAEAAAAAAABsMjAyMy0wNC0yOSAwMzozMDo1NyswMDowMCBbTm90ZV0gW0VudHJ5cG9pbnRdOiBFbnRyeXBvaW50IHNjcmlwdCBmb3IgTXlTUUwgU2VydmVyIDguMC4yMy0xZGViaWFuMTAgc3RhcnRlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAczIwMjMtMDQtMjlUMDM6MzA6NTguMjE0NjE0WiAwIFtTeXN0ZW1dIFtNWS0wMTAxMTZdIFtTZXJ2ZXJdIC91c3Ivc2Jpbi9teXNxbGQgKG15c3FsZCA4LjAuMjMpIHN0YXJ0aW5nIGFzIHByb2Nlc3MgMQpteXNxbC1teXNxbAl8IAIAAAAAAABfMjAyMy0wNC0yOVQwMzozMDo1OC4yMjg5NzJaIDEgW1N5c3RlbV0gW01ZLTAxMzU3Nl0gW0lubm9EQl0gSW5ub0RCIGluaXRpYWxpemF0aW9uIGhhcyBzdGFydGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAABdMjAyMy0wNC0yOVQwMzozMDo1OC43MzgyMjNaIDEgW1N5c3RlbV0gW01ZLTAxMzU3N10gW0lubm9EQl0gSW5ub0RCIGluaXRpYWxpemF0aW9uIGhhcyBlbmRlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMy0wNC0yOVQwMzozMDo1OC44NjA0NTNaIDAgW1N5c3RlbV0gW01ZLTAxMTMyM10gW1NlcnZlcl0gWCBQbHVnaW4gcmVhZHkgZm9yIGNvbm5lY3Rpb25zLiBCaW5kLWFkZHJlc3M6ICc6OicgcG9ydDogMzMwNjAsIHNvY2tldDogL3Zhci9ydW4vbXlzcWxkL215c3FseC5zb2NrCm15c3FsLW15c3FsCXwgAgAAAAAAAFoyMDIzLTA0LTI5VDAzOjMwOjU4Ljg4MDY3MVogMCBbU3lzdGVtXSBbTVktMDEwMjI5XSBbU2VydmVyXSBTdGFydGluZyBYQSBjcmFzaCByZWNvdmVyeS4uLgpteXNxbC1teXNxbAl8IAIAAAAAAABYMjAyMy0wNC0yOVQwMzozMDo1OC44ODk1MjhaIDAgW1N5c3RlbV0gW01ZLTAxMDIzMl0gW1NlcnZlcl0gWEEgY3Jhc2ggcmVjb3ZlcnkgZmluaXNoZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAAGMyMDIzLTA0LTI5VDAzOjMwOjU4Ljk4NzQ2M1ogMCBbV2FybmluZ10gW01ZLTAxMDA2OF0gW1NlcnZlcl0gQ0EgY2VydGlmaWNhdGUgY2EucGVtIGlzIHNlbGYgc2lnbmVkLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIzLTA0LTI5VDAzOjMwOjU4Ljk4Nzk1MlogMCBbU3lzdGVtXSBbTVktMDEzNjAyXSBbU2VydmVyXSBDaGFubmVsIG15c3FsX21haW4gY29uZmlndXJlZCB0byBzdXBwb3J0IFRMUy4gRW5jcnlwdGVkIGNvbm5lY3Rpb25zIGFyZSBub3cgc3VwcG9ydGVkIGZvciB0aGlzIGNoYW5uZWwuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjMtMDQtMjlUMDM6MzA6NTguOTk3NzM1WiAwIFtXYXJuaW5nXSBbTVktMDExODEwXSBbU2VydmVyXSBJbnNlY3VyZSBjb25maWd1cmF0aW9uIGZvciAtLXBpZC1maWxlOiBMb2NhdGlvbiAnL3Zhci9ydW4vbXlzcWxkJyBpbiB0aGUgcGF0aCBpcyBhY2Nlc3NpYmxlIHRvIGFsbCBPUyB1c2Vycy4gQ29uc2lkZXIgY2hvb3NpbmcgYSBkaWZmZXJlbnQgZGlyZWN0b3J5LgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIzLTA0LTI5VDAzOjMwOjU5LjA2MTY2OFogMCBbU3lzdGVtXSBbTVktMDEwOTMxXSBbU2VydmVyXSAvdXNyL3NiaW4vbXlzcWxkOiByZWFkeSBmb3IgY29ubmVjdGlvbnMuIFZlcnNpb246ICc4LjAuMjMnICBzb2NrZXQ6ICcvdmFyL3J1bi9teXNxbGQvbXlzcWxkLnNvY2snICBwb3J0OiAzMzA2ICBNeVNRTCBDb21tdW5pdHkgU2VydmVyIC0gR1BMLgpteXNxbC1teXNxbAl8IAEAAAAAAABsMjAyMy0wNS0wMiAwNjo0OToxNyswMDowMCBbTm90ZV0gW0VudHJ5cG9pbnRdOiBFbnRyeXBvaW50IHNjcmlwdCBmb3IgTXlTUUwgU2VydmVyIDguMC4yMy0xZGViaWFuMTAgc3RhcnRlZC4KbXlzcWwtbXlzcWwJfCABAAAAAAAAUzIwMjMtMDUtMDIgMDY6NDk6MTgrMDA6MDAgW05vdGVdIFtFbnRyeXBvaW50XTogU3dpdGNoaW5nIHRvIGRlZGljYXRlZCB1c2VyICdteXNxbCcKbXlzcWwtbXlzcWwJfCABAAAAAAAAbDIwMjMtMDUtMDIgMDY6NDk6MTgrMDA6MDAgW05vdGVdIFtFbnRyeXBvaW50XTogRW50cnlwb2ludCBzY3JpcHQgZm9yIE15U1FMIFNlcnZlciA4LjAuMjMtMWRlYmlhbjEwIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAAHMyMDIzLTA1LTAyVDA2OjQ5OjE4LjMxNDU2NlogMCBbU3lzdGVtXSBbTVktMDEwMTE2XSBbU2VydmVyXSAvdXNyL3NiaW4vbXlzcWxkIChteXNxbGQgOC4wLjIzKSBzdGFydGluZyBhcyBwcm9jZXNzIDEKbXlzcWwtbXlzcWwJfCACAAAAAAAAXzIwMjMtMDUtMDJUMDY6NDk6MTguMzI2MDgyWiAxIFtTeXN0ZW1dIFtNWS0wMTM1NzZdIFtJbm5vREJdIElubm9EQiBpbml0aWFsaXphdGlvbiBoYXMgc3RhcnRlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAXTIwMjMtMDUtMDJUMDY6NDk6MTguNzAyODg2WiAxIFtTeXN0ZW1dIFtNWS0wMTM1NzddIFtJbm5vREJdIElubm9EQiBpbml0aWFsaXphdGlvbiBoYXMgZW5kZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjMtMDUtMDJUMDY6NDk6MTguODI3ODA0WiAwIFtTeXN0ZW1dIFtNWS0wMTEzMjNdIFtTZXJ2ZXJdIFggUGx1Z2luIHJlYWR5IGZvciBjb25uZWN0aW9ucy4gQmluZC1hZGRyZXNzOiAnOjonIHBvcnQ6IDMzMDYwLCBzb2NrZXQ6IC92YXIvcnVuL215c3FsZC9teXNxbHguc29jawpteXNxbC1teXNxbAl8IAIAAAAAAABaMjAyMy0wNS0wMlQwNjo0OToxOC44NzI2MDFaIDAgW1N5c3RlbV0gW01ZLTAxMDIyOV0gW1NlcnZlcl0gU3RhcnRpbmcgWEEgY3Jhc2ggcmVjb3ZlcnkuLi4KbXlzcWwtbXlzcWwJfCACAAAAAAAAWDIwMjMtMDUtMDJUMDY6NDk6MTguODg4NDM2WiAwIFtTeXN0ZW1dIFtNWS0wMTAyMzJdIFtTZXJ2ZXJdIFhBIGNyYXNoIHJlY292ZXJ5IGZpbmlzaGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAABjMjAyMy0wNS0wMlQwNjo0OToxOC45Mjc2NzRaIDAgW1dhcm5pbmddIFtNWS0wMTAwNjhdIFtTZXJ2ZXJdIENBIGNlcnRpZmljYXRlIGNhLnBlbSBpcyBzZWxmIHNpZ25lZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMy0wNS0wMlQwNjo0OToxOC45Mjc4MjVaIDAgW1N5c3RlbV0gW01ZLTAxMzYwMl0gW1NlcnZlcl0gQ2hhbm5lbCBteXNxbF9tYWluIGNvbmZpZ3VyZWQgdG8gc3VwcG9ydCBUTFMuIEVuY3J5cHRlZCBjb25uZWN0aW9ucyBhcmUgbm93IHN1cHBvcnRlZCBmb3IgdGhpcyBjaGFubmVsLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIzLTA1LTAyVDA2OjQ5OjE4LjkzMTUwNlogMCBbV2FybmluZ10gW01ZLTAxMTgxMF0gW1NlcnZlcl0gSW5zZWN1cmUgY29uZmlndXJhdGlvbiBmb3IgLS1waWQtZmlsZTogTG9jYXRpb24gJy92YXIvcnVuL215c3FsZCcgaW4gdGhlIHBhdGggaXMgYWNjZXNzaWJsZSB0byBhbGwgT1MgdXNlcnMuIENvbnNpZGVyIGNob29zaW5nIGEgZGlmZmVyZW50IGRpcmVjdG9yeS4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMy0wNS0wMlQwNjo0OToxOC45NTY1OTRaIDAgW1N5c3RlbV0gW01ZLTAxMDkzMV0gW1NlcnZlcl0gL3Vzci9zYmluL215c3FsZDogcmVhZHkgZm9yIGNvbm5lY3Rpb25zLiBWZXJzaW9uOiAnOC4wLjIzJyAgc29ja2V0OiAnL3Zhci9ydW4vbXlzcWxkL215c3FsZC5zb2NrJyAgcG9ydDogMzMwNiAgTXlTUUwgQ29tbXVuaXR5IFNlcnZlciAtIEdQTC4KbXlzcWwtbXlzcWwJfCABAAAAAAAAbDIwMjMtMDUtMzEgMTc6NDk6MTArMDA6MDAgW05vdGVdIFtFbnRyeXBvaW50XTogRW50cnlwb2ludCBzY3JpcHQgZm9yIE15U1FMIFNlcnZlciA4LjAuMjMtMWRlYmlhbjEwIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAQAAAAAAAFMyMDIzLTA1LTMxIDE3OjQ5OjEwKzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IFN3aXRjaGluZyB0byBkZWRpY2F0ZWQgdXNlciAnbXlzcWwnCm15c3FsLW15c3FsCXwgAQAAAAAAAGwyMDIzLTA1LTMxIDE3OjQ5OjEwKzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IEVudHJ5cG9pbnQgc2NyaXB0IGZvciBNeVNRTCBTZXJ2ZXIgOC4wLjIzLTFkZWJpYW4xMCBzdGFydGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAABzMjAyMy0wNS0zMVQxNzo0OToxMS4wNzQ0NzVaIDAgW1N5c3RlbV0gW01ZLTAxMDExNl0gW1NlcnZlcl0gL3Vzci9zYmluL215c3FsZCAobXlzcWxkIDguMC4yMykgc3RhcnRpbmcgYXMgcHJvY2VzcyAxCm15c3FsLW15c3FsCXwgAgAAAAAAAF8yMDIzLTA1LTMxVDE3OjQ5OjExLjA4NDMyNlogMSBbU3lzdGVtXSBbTVktMDEzNTc2XSBbSW5ub0RCXSBJbm5vREIgaW5pdGlhbGl6YXRpb24gaGFzIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAAF0yMDIzLTA1LTMxVDE3OjQ5OjExLjQ5NDk2NVogMSBbU3lzdGVtXSBbTVktMDEzNTc3XSBbSW5ub0RCXSBJbm5vREIgaW5pdGlhbGl6YXRpb24gaGFzIGVuZGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIzLTA1LTMxVDE3OjQ5OjExLjU5OTQzNlogMCBbU3lzdGVtXSBbTVktMDExMzIzXSBbU2VydmVyXSBYIFBsdWdpbiByZWFkeSBmb3IgY29ubmVjdGlvbnMuIEJpbmQtYWRkcmVzczogJzo6JyBwb3J0OiAzMzA2MCwgc29ja2V0OiAvdmFyL3J1bi9teXNxbGQvbXlzcWx4LnNvY2sKbXlzcWwtbXlzcWwJfCACAAAAAAAAWjIwMjMtMDUtMzFUMTc6NDk6MTEuNjI0MDE2WiAwIFtTeXN0ZW1dIFtNWS0wMTAyMjldIFtTZXJ2ZXJdIFN0YXJ0aW5nIFhBIGNyYXNoIHJlY292ZXJ5Li4uCm15c3FsLW15c3FsCXwgAgAAAAAAAFgyMDIzLTA1LTMxVDE3OjQ5OjExLjYzMjkyOVogMCBbU3lzdGVtXSBbTVktMDEwMjMyXSBbU2VydmVyXSBYQSBjcmFzaCByZWNvdmVyeSBmaW5pc2hlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAYzIwMjMtMDUtMzFUMTc6NDk6MTEuNjc0MTg0WiAwIFtXYXJuaW5nXSBbTVktMDEwMDY4XSBbU2VydmVyXSBDQSBjZXJ0aWZpY2F0ZSBjYS5wZW0gaXMgc2VsZiBzaWduZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjMtMDUtMzFUMTc6NDk6MTEuNjc0MzM4WiAwIFtTeXN0ZW1dIFtNWS0wMTM2MDJdIFtTZXJ2ZXJdIENoYW5uZWwgbXlzcWxfbWFpbiBjb25maWd1cmVkIHRvIHN1cHBvcnQgVExTLiBFbmNyeXB0ZWQgY29ubmVjdGlvbnMgYXJlIG5vdyBzdXBwb3J0ZWQgZm9yIHRoaXMgY2hhbm5lbC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMy0wNS0zMVQxNzo0OToxMS42NzgwMzRaIDAgW1dhcm5pbmddIFtNWS0wMTE4MTBdIFtTZXJ2ZXJdIEluc2VjdXJlIGNvbmZpZ3VyYXRpb24gZm9yIC0tcGlkLWZpbGU6IExvY2F0aW9uICcvdmFyL3J1bi9teXNxbGQnIGluIHRoZSBwYXRoIGlzIGFjY2Vzc2libGUgdG8gYWxsIE9TIHVzZXJzLiBDb25zaWRlciBjaG9vc2luZyBhIGRpZmZlcmVudCBkaXJlY3RvcnkuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjMtMDUtMzFUMTc6NDk6MTEuNzA0NDcyWiAwIFtTeXN0ZW1dIFtNWS0wMTA5MzFdIFtTZXJ2ZXJdIC91c3Ivc2Jpbi9teXNxbGQ6IHJlYWR5IGZvciBjb25uZWN0aW9ucy4gVmVyc2lvbjogJzguMC4yMycgIHNvY2tldDogJy92YXIvcnVuL215c3FsZC9teXNxbGQuc29jaycgIHBvcnQ6IDMzMDYgIE15U1FMIENvbW11bml0eSBTZXJ2ZXIgLSBHUEwuCm15c3FsLW15c3FsCXwgAQAAAAAAAGwyMDIzLTA1LTMxIDIxOjUyOjA0KzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IEVudHJ5cG9pbnQgc2NyaXB0IGZvciBNeVNRTCBTZXJ2ZXIgOC4wLjIzLTFkZWJpYW4xMCBzdGFydGVkLgpteXNxbC1teXNxbAl8IAEAAAAAAABTMjAyMy0wNS0zMSAyMTo1MjowNSswMDowMCBbTm90ZV0gW0VudHJ5cG9pbnRdOiBTd2l0Y2hpbmcgdG8gZGVkaWNhdGVkIHVzZXIgJ215c3FsJwpteXNxbC1teXNxbAl8IAEAAAAAAABsMjAyMy0wNS0zMSAyMTo1MjowNSswMDowMCBbTm90ZV0gW0VudHJ5cG9pbnRdOiBFbnRyeXBvaW50IHNjcmlwdCBmb3IgTXlTUUwgU2VydmVyIDguMC4yMy0xZGViaWFuMTAgc3RhcnRlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAczIwMjMtMDUtMzFUMjE6NTI6MDUuOTYyNTI0WiAwIFtTeXN0ZW1dIFtNWS0wMTAxMTZdIFtTZXJ2ZXJdIC91c3Ivc2Jpbi9teXNxbGQgKG15c3FsZCA4LjAuMjMpIHN0YXJ0aW5nIGFzIHByb2Nlc3MgMQpteXNxbC1teXNxbAl8IAIAAAAAAABfMjAyMy0wNS0zMVQyMTo1MjowNS45OTMyMTVaIDEgW1N5c3RlbV0gW01ZLTAxMzU3Nl0gW0lubm9EQl0gSW5ub0RCIGluaXRpYWxpemF0aW9uIGhhcyBzdGFydGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAABdMjAyMy0wNS0zMVQyMTo1MjowNi44MjE3OTJaIDEgW1N5c3RlbV0gW01ZLTAxMzU3N10gW0lubm9EQl0gSW5ub0RCIGluaXRpYWxpemF0aW9uIGhhcyBlbmRlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMy0wNS0zMVQyMTo1MjowNy4xMDE0ODNaIDAgW1N5c3RlbV0gW01ZLTAxMTMyM10gW1NlcnZlcl0gWCBQbHVnaW4gcmVhZHkgZm9yIGNvbm5lY3Rpb25zLiBCaW5kLWFkZHJlc3M6ICc6OicgcG9ydDogMzMwNjAsIHNvY2tldDogL3Zhci9ydW4vbXlzcWxkL215c3FseC5zb2NrCm15c3FsLW15c3FsCXwgAgAAAAAAAFoyMDIzLTA1LTMxVDIxOjUyOjA3LjE3NTM1N1ogMCBbU3lzdGVtXSBbTVktMDEwMjI5XSBbU2VydmVyXSBTdGFydGluZyBYQSBjcmFzaCByZWNvdmVyeS4uLgpteXNxbC1teXNxbAl8IAIAAAAAAABYMjAyMy0wNS0zMVQyMTo1MjowNy4yMDQ3NzhaIDAgW1N5c3RlbV0gW01ZLTAxMDIzMl0gW1NlcnZlcl0gWEEgY3Jhc2ggcmVjb3ZlcnkgZmluaXNoZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAAGMyMDIzLTA1LTMxVDIxOjUyOjA3LjI5NTAzMFogMCBbV2FybmluZ10gW01ZLTAxMDA2OF0gW1NlcnZlcl0gQ0EgY2VydGlmaWNhdGUgY2EucGVtIGlzIHNlbGYgc2lnbmVkLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIzLTA1LTMxVDIxOjUyOjA3LjI5NTUzN1ogMCBbU3lzdGVtXSBbTVktMDEzNjAyXSBbU2VydmVyXSBDaGFubmVsIG15c3FsX21haW4gY29uZmlndXJlZCB0byBzdXBwb3J0IFRMUy4gRW5jcnlwdGVkIGNvbm5lY3Rpb25zIGFyZSBub3cgc3VwcG9ydGVkIGZvciB0aGlzIGNoYW5uZWwuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjMtMDUtMzFUMjE6NTI6MDcuMzE1ODUwWiAwIFtXYXJuaW5nXSBbTVktMDExODEwXSBbU2VydmVyXSBJbnNlY3VyZSBjb25maWd1cmF0aW9uIGZvciAtLXBpZC1maWxlOiBMb2NhdGlvbiAnL3Zhci9ydW4vbXlzcWxkJyBpbiB0aGUgcGF0aCBpcyBhY2Nlc3NpYmxlIHRvIGFsbCBPUyB1c2Vycy4gQ29uc2lkZXIgY2hvb3NpbmcgYSBkaWZmZXJlbnQgZGlyZWN0b3J5LgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIzLTA1LTMxVDIxOjUyOjA3LjM3NzIyNVogMCBbU3lzdGVtXSBbTVktMDEwOTMxXSBbU2VydmVyXSAvdXNyL3NiaW4vbXlzcWxkOiByZWFkeSBmb3IgY29ubmVjdGlvbnMuIFZlcnNpb246ICc4LjAuMjMnICBzb2NrZXQ6ICcvdmFyL3J1bi9teXNxbGQvbXlzcWxkLnNvY2snICBwb3J0OiAzMzA2ICBNeVNRTCBDb21tdW5pdHkgU2VydmVyIC0gR1BMLgpteXNxbC1teXNxbAl8IAEAAAAAAABsMjAyMy0wNy0wOCAxNTozMDozMCswMDowMCBbTm90ZV0gW0VudHJ5cG9pbnRdOiBFbnRyeXBvaW50IHNjcmlwdCBmb3IgTXlTUUwgU2VydmVyIDguMC4yMy0xZGViaWFuMTAgc3RhcnRlZC4KbXlzcWwtbXlzcWwJfCABAAAAAAAAUzIwMjMtMDctMDggMTU6MzA6MzArMDA6MDAgW05vdGVdIFtFbnRyeXBvaW50XTogU3dpdGNoaW5nIHRvIGRlZGljYXRlZCB1c2VyICdteXNxbCcKbXlzcWwtbXlzcWwJfCABAAAAAAAAbDIwMjMtMDctMDggMTU6MzA6MzArMDA6MDAgW05vdGVdIFtFbnRyeXBvaW50XTogRW50cnlwb2ludCBzY3JpcHQgZm9yIE15U1FMIFNlcnZlciA4LjAuMjMtMWRlYmlhbjEwIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAAHMyMDIzLTA3LTA4VDE1OjMwOjMxLjA0OTc2MFogMCBbU3lzdGVtXSBbTVktMDEwMTE2XSBbU2VydmVyXSAvdXNyL3NiaW4vbXlzcWxkIChteXNxbGQgOC4wLjIzKSBzdGFydGluZyBhcyBwcm9jZXNzIDEKbXlzcWwtbXlzcWwJfCACAAAAAAAAXzIwMjMtMDctMDhUMTU6MzA6MzEuMDU5MjYxWiAxIFtTeXN0ZW1dIFtNWS0wMTM1NzZdIFtJbm5vREJdIElubm9EQiBpbml0aWFsaXphdGlvbiBoYXMgc3RhcnRlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAXTIwMjMtMDctMDhUMTU6MzA6MzEuODY1NjQyWiAxIFtTeXN0ZW1dIFtNWS0wMTM1NzddIFtJbm5vREJdIElubm9EQiBpbml0aWFsaXphdGlvbiBoYXMgZW5kZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjMtMDctMDhUMTU6MzA6MzIuMjE2Mjk1WiAwIFtTeXN0ZW1dIFtNWS0wMTEzMjNdIFtTZXJ2ZXJdIFggUGx1Z2luIHJlYWR5IGZvciBjb25uZWN0aW9ucy4gQmluZC1hZGRyZXNzOiAnOjonIHBvcnQ6IDMzMDYwLCBzb2NrZXQ6IC92YXIvcnVuL215c3FsZC9teXNxbHguc29jawpteXNxbC1teXNxbAl8IAIAAAAAAABaMjAyMy0wNy0wOFQxNTozMDozMi4yNDcxNDZaIDAgW1N5c3RlbV0gW01ZLTAxMDIyOV0gW1NlcnZlcl0gU3RhcnRpbmcgWEEgY3Jhc2ggcmVjb3ZlcnkuLi4KbXlzcWwtbXlzcWwJfCACAAAAAAAAWDIwMjMtMDctMDhUMTU6MzA6MzIuMjU2NTgzWiAwIFtTeXN0ZW1dIFtNWS0wMTAyMzJdIFtTZXJ2ZXJdIFhBIGNyYXNoIHJlY292ZXJ5IGZpbmlzaGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAABjMjAyMy0wNy0wOFQxNTozMDozMi4zODUyODNaIDAgW1dhcm5pbmddIFtNWS0wMTAwNjhdIFtTZXJ2ZXJdIENBIGNlcnRpZmljYXRlIGNhLnBlbSBpcyBzZWxmIHNpZ25lZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMy0wNy0wOFQxNTozMDozMi4zODU3OTdaIDAgW1N5c3RlbV0gW01ZLTAxMzYwMl0gW1NlcnZlcl0gQ2hhbm5lbCBteXNxbF9tYWluIGNvbmZpZ3VyZWQgdG8gc3VwcG9ydCBUTFMuIEVuY3J5cHRlZCBjb25uZWN0aW9ucyBhcmUgbm93IHN1cHBvcnRlZCBmb3IgdGhpcyBjaGFubmVsLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIzLTA3LTA4VDE1OjMwOjMyLjM5ODU3M1ogMCBbV2FybmluZ10gW01ZLTAxMTgxMF0gW1NlcnZlcl0gSW5zZWN1cmUgY29uZmlndXJhdGlvbiBmb3IgLS1waWQtZmlsZTogTG9jYXRpb24gJy92YXIvcnVuL215c3FsZCcgaW4gdGhlIHBhdGggaXMgYWNjZXNzaWJsZSB0byBhbGwgT1MgdXNlcnMuIENvbnNpZGVyIGNob29zaW5nIGEgZGlmZmVyZW50IGRpcmVjdG9yeS4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMy0wNy0wOFQxNTozMDozMi40NTc5NDRaIDAgW1N5c3RlbV0gW01ZLTAxMDkzMV0gW1NlcnZlcl0gL3Vzci9zYmluL215c3FsZDogcmVhZHkgZm9yIGNvbm5lY3Rpb25zLiBWZXJzaW9uOiAnOC4wLjIzJyAgc29ja2V0OiAnL3Zhci9ydW4vbXlzcWxkL215c3FsZC5zb2NrJyAgcG9ydDogMzMwNiAgTXlTUUwgQ29tbXVuaXR5IFNlcnZlciAtIEdQTC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMy0wOC0wMlQxOToxMTo0Mi4xMDcwNzVaIDAgW1N5c3RlbV0gW01ZLTAxMzE3Ml0gW1NlcnZlcl0gUmVjZWl2ZWQgU0hVVERPV04gZnJvbSB1c2VyIDx2aWEgdXNlciBzaWduYWw+LiBTaHV0dGluZyBkb3duIG15c3FsZCAoVmVyc2lvbjogOC4wLjIzKS4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMy0wOC0wMlQxOToxMTo0My44MDU0NDFaIDAgW1N5c3RlbV0gW01ZLTAxMDkxMF0gW1NlcnZlcl0gL3Vzci9zYmluL215c3FsZDogU2h1dGRvd24gY29tcGxldGUgKG15c3FsZCA4LjAuMjMpICBNeVNRTCBDb21tdW5pdHkgU2VydmVyIC0gR1BMLgpteXNxbC1teXNxbAl8IAEAAAAAAABsMjAyMy0wOC0wMiAxOToxMjowMSswMDowMCBbTm90ZV0gW0VudHJ5cG9pbnRdOiBFbnRyeXBvaW50IHNjcmlwdCBmb3IgTXlTUUwgU2VydmVyIDguMC4yMy0xZGViaWFuMTAgc3RhcnRlZC4KbXlzcWwtbXlzcWwJfCABAAAAAAAAUzIwMjMtMDgtMDIgMTk6MTI6MDErMDA6MDAgW05vdGVdIFtFbnRyeXBvaW50XTogU3dpdGNoaW5nIHRvIGRlZGljYXRlZCB1c2VyICdteXNxbCcKbXlzcWwtbXlzcWwJfCABAAAAAAAAbDIwMjMtMDgtMDIgMTk6MTI6MDErMDA6MDAgW05vdGVdIFtFbnRyeXBvaW50XTogRW50cnlwb2ludCBzY3JpcHQgZm9yIE15U1FMIFNlcnZlciA4LjAuMjMtMWRlYmlhbjEwIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAAHMyMDIzLTA4LTAyVDE5OjEyOjAyLjEzMjk0NlogMCBbU3lzdGVtXSBbTVktMDEwMTE2XSBbU2VydmVyXSAvdXNyL3NiaW4vbXlzcWxkIChteXNxbGQgOC4wLjIzKSBzdGFydGluZyBhcyBwcm9jZXNzIDEKbXlzcWwtbXlzcWwJfCACAAAAAAAAXzIwMjMtMDgtMDJUMTk6MTI6MDIuMTQxMTE4WiAxIFtTeXN0ZW1dIFtNWS0wMTM1NzZdIFtJbm5vREJdIElubm9EQiBpbml0aWFsaXphdGlvbiBoYXMgc3RhcnRlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAXTIwMjMtMDgtMDJUMTk6MTI6MDIuOTExMTUxWiAxIFtTeXN0ZW1dIFtNWS0wMTM1NzddIFtJbm5vREJdIElubm9EQiBpbml0aWFsaXphdGlvbiBoYXMgZW5kZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjMtMDgtMDJUMTk6MTI6MDMuMDYyMzQ4WiAwIFtTeXN0ZW1dIFtNWS0wMTEzMjNdIFtTZXJ2ZXJdIFggUGx1Z2luIHJlYWR5IGZvciBjb25uZWN0aW9ucy4gQmluZC1hZGRyZXNzOiAnOjonIHBvcnQ6IDMzMDYwLCBzb2NrZXQ6IC92YXIvcnVuL215c3FsZC9teXNxbHguc29jawpteXNxbC1teXNxbAl8IAIAAAAAAABjMjAyMy0wOC0wMlQxOToxMjowMy4yNTM0OTRaIDAgW1dhcm5pbmddIFtNWS0wMTAwNjhdIFtTZXJ2ZXJdIENBIGNlcnRpZmljYXRlIGNhLnBlbSBpcyBzZWxmIHNpZ25lZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMy0wOC0wMlQxOToxMjowMy4yNTM3MTFaIDAgW1N5c3RlbV0gW01ZLTAxMzYwMl0gW1NlcnZlcl0gQ2hhbm5lbCBteXNxbF9tYWluIGNvbmZpZ3VyZWQgdG8gc3VwcG9ydCBUTFMuIEVuY3J5cHRlZCBjb25uZWN0aW9ucyBhcmUgbm93IHN1cHBvcnRlZCBmb3IgdGhpcyBjaGFubmVsLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIzLTA4LTAyVDE5OjEyOjAzLjI2MjI0NlogMCBbV2FybmluZ10gW01ZLTAxMTgxMF0gW1NlcnZlcl0gSW5zZWN1cmUgY29uZmlndXJhdGlvbiBmb3IgLS1waWQtZmlsZTogTG9jYXRpb24gJy92YXIvcnVuL215c3FsZCcgaW4gdGhlIHBhdGggaXMgYWNjZXNzaWJsZSB0byBhbGwgT1MgdXNlcnMuIENvbnNpZGVyIGNob29zaW5nIGEgZGlmZmVyZW50IGRpcmVjdG9yeS4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMy0wOC0wMlQxOToxMjowMy4yOTc2MTJaIDAgW1N5c3RlbV0gW01ZLTAxMDkzMV0gW1NlcnZlcl0gL3Vzci9zYmluL215c3FsZDogcmVhZHkgZm9yIGNvbm5lY3Rpb25zLiBWZXJzaW9uOiAnOC4wLjIzJyAgc29ja2V0OiAnL3Zhci9ydW4vbXlzcWxkL215c3FsZC5zb2NrJyAgcG9ydDogMzMwNiAgTXlTUUwgQ29tbXVuaXR5IFNlcnZlciAtIEdQTC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMy0wOC0wMlQxOToxMzowNi4yMzEyMDZaIDAgW1N5c3RlbV0gW01ZLTAxMzE3Ml0gW1NlcnZlcl0gUmVjZWl2ZWQgU0hVVERPV04gZnJvbSB1c2VyIDx2aWEgdXNlciBzaWduYWw+LiBTaHV0dGluZyBkb3duIG15c3FsZCAoVmVyc2lvbjogOC4wLjIzKS4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMy0wOC0wMlQxOToxMzowNy42MjM3NDZaIDAgW1N5c3RlbV0gW01ZLTAxMDkxMF0gW1NlcnZlcl0gL3Vzci9zYmluL215c3FsZDogU2h1dGRvd24gY29tcGxldGUgKG15c3FsZCA4LjAuMjMpICBNeVNRTCBDb21tdW5pdHkgU2VydmVyIC0gR1BMLgpteXNxbC1teXNxbAl8IAEAAAAAAABsMjAyMy0wOC0wMiAxOToxMzo0NSswMDowMCBbTm90ZV0gW0VudHJ5cG9pbnRdOiBFbnRyeXBvaW50IHNjcmlwdCBmb3IgTXlTUUwgU2VydmVyIDguMC4yMy0xZGViaWFuMTAgc3RhcnRlZC4KbXlzcWwtbXlzcWwJfCABAAAAAAAAUzIwMjMtMDgtMDIgMTk6MTM6NDUrMDA6MDAgW05vdGVdIFtFbnRyeXBvaW50XTogU3dpdGNoaW5nIHRvIGRlZGljYXRlZCB1c2VyICdteXNxbCcKbXlzcWwtbXlzcWwJfCABAAAAAAAAbDIwMjMtMDgtMDIgMTk6MTM6NDUrMDA6MDAgW05vdGVdIFtFbnRyeXBvaW50XTogRW50cnlwb2ludCBzY3JpcHQgZm9yIE15U1FMIFNlcnZlciA4LjAuMjMtMWRlYmlhbjEwIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAAHMyMDIzLTA4LTAyVDE5OjEzOjQ2LjE2MTk3OVogMCBbU3lzdGVtXSBbTVktMDEwMTE2XSBbU2VydmVyXSAvdXNyL3NiaW4vbXlzcWxkIChteXNxbGQgOC4wLjIzKSBzdGFydGluZyBhcyBwcm9jZXNzIDEKbXlzcWwtbXlzcWwJfCACAAAAAAAAXzIwMjMtMDgtMDJUMTk6MTM6NDYuMTY5NTcwWiAxIFtTeXN0ZW1dIFtNWS0wMTM1NzZdIFtJbm5vREJdIElubm9EQiBpbml0aWFsaXphdGlvbiBoYXMgc3RhcnRlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAXTIwMjMtMDgtMDJUMTk6MTM6NDYuNjg1NDAzWiAxIFtTeXN0ZW1dIFtNWS0wMTM1NzddIFtJbm5vREJdIElubm9EQiBpbml0aWFsaXphdGlvbiBoYXMgZW5kZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjMtMDgtMDJUMTk6MTM6NDYuNzgzMDg2WiAwIFtTeXN0ZW1dIFtNWS0wMTEzMjNdIFtTZXJ2ZXJdIFggUGx1Z2luIHJlYWR5IGZvciBjb25uZWN0aW9ucy4gQmluZC1hZGRyZXNzOiAnOjonIHBvcnQ6IDMzMDYwLCBzb2NrZXQ6IC92YXIvcnVuL215c3FsZC9teXNxbHguc29jawpteXNxbC1teXNxbAl8IAIAAAAAAABjMjAyMy0wOC0wMlQxOToxMzo0Ni45NDk1NTFaIDAgW1dhcm5pbmddIFtNWS0wMTAwNjhdIFtTZXJ2ZXJdIENBIGNlcnRpZmljYXRlIGNhLnBlbSBpcyBzZWxmIHNpZ25lZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMy0wOC0wMlQxOToxMzo0Ni45NTAxMjFaIDAgW1N5c3RlbV0gW01ZLTAxMzYwMl0gW1NlcnZlcl0gQ2hhbm5lbCBteXNxbF9tYWluIGNvbmZpZ3VyZWQgdG8gc3VwcG9ydCBUTFMuIEVuY3J5cHRlZCBjb25uZWN0aW9ucyBhcmUgbm93IHN1cHBvcnRlZCBmb3IgdGhpcyBjaGFubmVsLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIzLTA4LTAyVDE5OjEzOjQ2Ljk2MDkwMFogMCBbV2FybmluZ10gW01ZLTAxMTgxMF0gW1NlcnZlcl0gSW5zZWN1cmUgY29uZmlndXJhdGlvbiBmb3IgLS1waWQtZmlsZTogTG9jYXRpb24gJy92YXIvcnVuL215c3FsZCcgaW4gdGhlIHBhdGggaXMgYWNjZXNzaWJsZSB0byBhbGwgT1MgdXNlcnMuIENvbnNpZGVyIGNob29zaW5nIGEgZGlmZmVyZW50IGRpcmVjdG9yeS4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMy0wOC0wMlQxOToxMzo0Ny4wMDA0NTBaIDAgW1N5c3RlbV0gW01ZLTAxMDkzMV0gW1NlcnZlcl0gL3Vzci9zYmluL215c3FsZDogcmVhZHkgZm9yIGNvbm5lY3Rpb25zLiBWZXJzaW9uOiAnOC4wLjIzJyAgc29ja2V0OiAnL3Zhci9ydW4vbXlzcWxkL215c3FsZC5zb2NrJyAgcG9ydDogMzMwNiAgTXlTUUwgQ29tbXVuaXR5IFNlcnZlciAtIEdQTC4KbXlzcWwtbXlzcWwJfCABAAAAAAAAbDIwMjMtMDgtMDQgMDA6MDE6MTYrMDA6MDAgW05vdGVdIFtFbnRyeXBvaW50XTogRW50cnlwb2ludCBzY3JpcHQgZm9yIE15U1FMIFNlcnZlciA4LjAuMjMtMWRlYmlhbjEwIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAQAAAAAAAFMyMDIzLTA4LTA0IDAwOjAxOjE3KzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IFN3aXRjaGluZyB0byBkZWRpY2F0ZWQgdXNlciAnbXlzcWwnCm15c3FsLW15c3FsCXwgAQAAAAAAAGwyMDIzLTA4LTA0IDAwOjAxOjE3KzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IEVudHJ5cG9pbnQgc2NyaXB0IGZvciBNeVNRTCBTZXJ2ZXIgOC4wLjIzLTFkZWJpYW4xMCBzdGFydGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAABzMjAyMy0wOC0wNFQwMDowMToxNy40MzY4MjRaIDAgW1N5c3RlbV0gW01ZLTAxMDExNl0gW1NlcnZlcl0gL3Vzci9zYmluL215c3FsZCAobXlzcWxkIDguMC4yMykgc3RhcnRpbmcgYXMgcHJvY2VzcyAxCm15c3FsLW15c3FsCXwgAgAAAAAAAF8yMDIzLTA4LTA0VDAwOjAxOjE3LjU0NzExMlogMSBbU3lzdGVtXSBbTVktMDEzNTc2XSBbSW5ub0RCXSBJbm5vREIgaW5pdGlhbGl6YXRpb24gaGFzIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAAF0yMDIzLTA4LTA0VDAwOjAxOjE5LjI2MDA1MVogMSBbU3lzdGVtXSBbTVktMDEzNTc3XSBbSW5ub0RCXSBJbm5vREIgaW5pdGlhbGl6YXRpb24gaGFzIGVuZGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIzLTA4LTA0VDAwOjAxOjE5LjU3MTk5N1ogMCBbU3lzdGVtXSBbTVktMDExMzIzXSBbU2VydmVyXSBYIFBsdWdpbiByZWFkeSBmb3IgY29ubmVjdGlvbnMuIEJpbmQtYWRkcmVzczogJzo6JyBwb3J0OiAzMzA2MCwgc29ja2V0OiAvdmFyL3J1bi9teXNxbGQvbXlzcWx4LnNvY2sKbXlzcWwtbXlzcWwJfCACAAAAAAAAWjIwMjMtMDgtMDRUMDA6MDE6MTkuNjA1NDg1WiAwIFtTeXN0ZW1dIFtNWS0wMTAyMjldIFtTZXJ2ZXJdIFN0YXJ0aW5nIFhBIGNyYXNoIHJlY292ZXJ5Li4uCm15c3FsLW15c3FsCXwgAgAAAAAAAFgyMDIzLTA4LTA0VDAwOjAxOjE5LjYxODE2MlogMCBbU3lzdGVtXSBbTVktMDEwMjMyXSBbU2VydmVyXSBYQSBjcmFzaCByZWNvdmVyeSBmaW5pc2hlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAYzIwMjMtMDgtMDRUMDA6MDE6MTkuOTM5NjE4WiAwIFtXYXJuaW5nXSBbTVktMDEwMDY4XSBbU2VydmVyXSBDQSBjZXJ0aWZpY2F0ZSBjYS5wZW0gaXMgc2VsZiBzaWduZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjMtMDgtMDRUMDA6MDE6MTkuOTQwMDg2WiAwIFtTeXN0ZW1dIFtNWS0wMTM2MDJdIFtTZXJ2ZXJdIENoYW5uZWwgbXlzcWxfbWFpbiBjb25maWd1cmVkIHRvIHN1cHBvcnQgVExTLiBFbmNyeXB0ZWQgY29ubmVjdGlvbnMgYXJlIG5vdyBzdXBwb3J0ZWQgZm9yIHRoaXMgY2hhbm5lbC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMy0wOC0wNFQwMDowMToxOS45NTUyMTJaIDAgW1dhcm5pbmddIFtNWS0wMTE4MTBdIFtTZXJ2ZXJdIEluc2VjdXJlIGNvbmZpZ3VyYXRpb24gZm9yIC0tcGlkLWZpbGU6IExvY2F0aW9uICcvdmFyL3J1bi9teXNxbGQnIGluIHRoZSBwYXRoIGlzIGFjY2Vzc2libGUgdG8gYWxsIE9TIHVzZXJzLiBDb25zaWRlciBjaG9vc2luZyBhIGRpZmZlcmVudCBkaXJlY3RvcnkuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjMtMDgtMDRUMDA6MDE6MjAuMDI4NjMxWiAwIFtTeXN0ZW1dIFtNWS0wMTA5MzFdIFtTZXJ2ZXJdIC91c3Ivc2Jpbi9teXNxbGQ6IHJlYWR5IGZvciBjb25uZWN0aW9ucy4gVmVyc2lvbjogJzguMC4yMycgIHNvY2tldDogJy92YXIvcnVuL215c3FsZC9teXNxbGQuc29jaycgIHBvcnQ6IDMzMDYgIE15U1FMIENvbW11bml0eSBTZXJ2ZXIgLSBHUEwuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjMtMDktMTFUMjA6MDk6MjAuMjkzNDgxWiAwIFtTeXN0ZW1dIFtNWS0wMTMxNzJdIFtTZXJ2ZXJdIFJlY2VpdmVkIFNIVVRET1dOIGZyb20gdXNlciA8dmlhIHVzZXIgc2lnbmFsPi4gU2h1dHRpbmcgZG93biBteXNxbGQgKFZlcnNpb246IDguMC4yMykuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjMtMDktMTFUMjA6MDk6MjEuNzg0NjQ0WiAwIFtTeXN0ZW1dIFtNWS0wMTA5MTBdIFtTZXJ2ZXJdIC91c3Ivc2Jpbi9teXNxbGQ6IFNodXRkb3duIGNvbXBsZXRlIChteXNxbGQgOC4wLjIzKSAgTXlTUUwgQ29tbXVuaXR5IFNlcnZlciAtIEdQTC4KbXlzcWwtbXlzcWwJfCABAAAAAAAAbDIwMjMtMDktMTEgMjA6MDk6MzkrMDA6MDAgW05vdGVdIFtFbnRyeXBvaW50XTogRW50cnlwb2ludCBzY3JpcHQgZm9yIE15U1FMIFNlcnZlciA4LjAuMjMtMWRlYmlhbjEwIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAQAAAAAAAFMyMDIzLTA5LTExIDIwOjA5OjM5KzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IFN3aXRjaGluZyB0byBkZWRpY2F0ZWQgdXNlciAnbXlzcWwnCm15c3FsLW15c3FsCXwgAQAAAAAAAGwyMDIzLTA5LTExIDIwOjA5OjM5KzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IEVudHJ5cG9pbnQgc2NyaXB0IGZvciBNeVNRTCBTZXJ2ZXIgOC4wLjIzLTFkZWJpYW4xMCBzdGFydGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAABzMjAyMy0wOS0xMVQyMDowOTozOS42OTczMzRaIDAgW1N5c3RlbV0gW01ZLTAxMDExNl0gW1NlcnZlcl0gL3Vzci9zYmluL215c3FsZCAobXlzcWxkIDguMC4yMykgc3RhcnRpbmcgYXMgcHJvY2VzcyAxCm15c3FsLW15c3FsCXwgAgAAAAAAAF8yMDIzLTA5LTExVDIwOjA5OjM5LjcwNjE5MFogMSBbU3lzdGVtXSBbTVktMDEzNTc2XSBbSW5ub0RCXSBJbm5vREIgaW5pdGlhbGl6YXRpb24gaGFzIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAAF0yMDIzLTA5LTExVDIwOjA5OjQwLjUyNzQ2NFogMSBbU3lzdGVtXSBbTVktMDEzNTc3XSBbSW5ub0RCXSBJbm5vREIgaW5pdGlhbGl6YXRpb24gaGFzIGVuZGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIzLTA5LTExVDIwOjA5OjQwLjc1NjQ5NFogMCBbU3lzdGVtXSBbTVktMDExMzIzXSBbU2VydmVyXSBYIFBsdWdpbiByZWFkeSBmb3IgY29ubmVjdGlvbnMuIEJpbmQtYWRkcmVzczogJzo6JyBwb3J0OiAzMzA2MCwgc29ja2V0OiAvdmFyL3J1bi9teXNxbGQvbXlzcWx4LnNvY2sKbXlzcWwtbXlzcWwJfCACAAAAAAAAYzIwMjMtMDktMTFUMjA6MDk6NDAuOTc3MjIxWiAwIFtXYXJuaW5nXSBbTVktMDEwMDY4XSBbU2VydmVyXSBDQSBjZXJ0aWZpY2F0ZSBjYS5wZW0gaXMgc2VsZiBzaWduZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjMtMDktMTFUMjA6MDk6NDAuOTc3NDE2WiAwIFtTeXN0ZW1dIFtNWS0wMTM2MDJdIFtTZXJ2ZXJdIENoYW5uZWwgbXlzcWxfbWFpbiBjb25maWd1cmVkIHRvIHN1cHBvcnQgVExTLiBFbmNyeXB0ZWQgY29ubmVjdGlvbnMgYXJlIG5vdyBzdXBwb3J0ZWQgZm9yIHRoaXMgY2hhbm5lbC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMy0wOS0xMVQyMDowOTo0MC45ODU4OTlaIDAgW1dhcm5pbmddIFtNWS0wMTE4MTBdIFtTZXJ2ZXJdIEluc2VjdXJlIGNvbmZpZ3VyYXRpb24gZm9yIC0tcGlkLWZpbGU6IExvY2F0aW9uICcvdmFyL3J1bi9teXNxbGQnIGluIHRoZSBwYXRoIGlzIGFjY2Vzc2libGUgdG8gYWxsIE9TIHVzZXJzLiBDb25zaWRlciBjaG9vc2luZyBhIGRpZmZlcmVudCBkaXJlY3RvcnkuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjMtMDktMTFUMjA6MDk6NDEuMDI5Njc3WiAwIFtTeXN0ZW1dIFtNWS0wMTA5MzFdIFtTZXJ2ZXJdIC91c3Ivc2Jpbi9teXNxbGQ6IHJlYWR5IGZvciBjb25uZWN0aW9ucy4gVmVyc2lvbjogJzguMC4yMycgIHNvY2tldDogJy92YXIvcnVuL215c3FsZC9teXNxbGQuc29jaycgIHBvcnQ6IDMzMDYgIE15U1FMIENvbW11bml0eSBTZXJ2ZXIgLSBHUEwuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjMtMDktMTFUMjA6MTM6NTMuODA5Njc1WiAwIFtTeXN0ZW1dIFtNWS0wMTMxNzJdIFtTZXJ2ZXJdIFJlY2VpdmVkIFNIVVRET1dOIGZyb20gdXNlciA8dmlhIHVzZXIgc2lnbmFsPi4gU2h1dHRpbmcgZG93biBteXNxbGQgKFZlcnNpb246IDguMC4yMykuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjMtMDktMTFUMjA6MTM6NTUuMzMxMzMwWiAwIFtTeXN0ZW1dIFtNWS0wMTA5MTBdIFtTZXJ2ZXJdIC91c3Ivc2Jpbi9teXNxbGQ6IFNodXRkb3duIGNvbXBsZXRlIChteXNxbGQgOC4wLjIzKSAgTXlTUUwgQ29tbXVuaXR5IFNlcnZlciAtIEdQTC4KbXlzcWwtbXlzcWwJfCABAAAAAAAAbDIwMjMtMDktMTEgMjA6MTQ6MDMrMDA6MDAgW05vdGVdIFtFbnRyeXBvaW50XTogRW50cnlwb2ludCBzY3JpcHQgZm9yIE15U1FMIFNlcnZlciA4LjAuMjMtMWRlYmlhbjEwIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAQAAAAAAAFMyMDIzLTA5LTExIDIwOjE0OjAzKzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IFN3aXRjaGluZyB0byBkZWRpY2F0ZWQgdXNlciAnbXlzcWwnCm15c3FsLW15c3FsCXwgAQAAAAAAAGwyMDIzLTA5LTExIDIwOjE0OjAzKzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IEVudHJ5cG9pbnQgc2NyaXB0IGZvciBNeVNRTCBTZXJ2ZXIgOC4wLjIzLTFkZWJpYW4xMCBzdGFydGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAABzMjAyMy0wOS0xMVQyMDoxNDowMy40ODI4NDVaIDAgW1N5c3RlbV0gW01ZLTAxMDExNl0gW1NlcnZlcl0gL3Vzci9zYmluL215c3FsZCAobXlzcWxkIDguMC4yMykgc3RhcnRpbmcgYXMgcHJvY2VzcyAxCm15c3FsLW15c3FsCXwgAgAAAAAAAF8yMDIzLTA5LTExVDIwOjE0OjAzLjUwMzI1OVogMSBbU3lzdGVtXSBbTVktMDEzNTc2XSBbSW5ub0RCXSBJbm5vREIgaW5pdGlhbGl6YXRpb24gaGFzIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAAF0yMDIzLTA5LTExVDIwOjE0OjA0LjA3NzQ0OFogMSBbU3lzdGVtXSBbTVktMDEzNTc3XSBbSW5ub0RCXSBJbm5vREIgaW5pdGlhbGl6YXRpb24gaGFzIGVuZGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIzLTA5LTExVDIwOjE0OjA0LjIzNzI0NVogMCBbU3lzdGVtXSBbTVktMDExMzIzXSBbU2VydmVyXSBYIFBsdWdpbiByZWFkeSBmb3IgY29ubmVjdGlvbnMuIEJpbmQtYWRkcmVzczogJzo6JyBwb3J0OiAzMzA2MCwgc29ja2V0OiAvdmFyL3J1bi9teXNxbGQvbXlzcWx4LnNvY2sKbXlzcWwtbXlzcWwJfCACAAAAAAAAYzIwMjMtMDktMTFUMjA6MTQ6MDQuMzM4MTQwWiAwIFtXYXJuaW5nXSBbTVktMDEwMDY4XSBbU2VydmVyXSBDQSBjZXJ0aWZpY2F0ZSBjYS5wZW0gaXMgc2VsZiBzaWduZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjMtMDktMTFUMjA6MTQ6MDQuMzM4NTEwWiAwIFtTeXN0ZW1dIFtNWS0wMTM2MDJdIFtTZXJ2ZXJdIENoYW5uZWwgbXlzcWxfbWFpbiBjb25maWd1cmVkIHRvIHN1cHBvcnQgVExTLiBFbmNyeXB0ZWQgY29ubmVjdGlvbnMgYXJlIG5vdyBzdXBwb3J0ZWQgZm9yIHRoaXMgY2hhbm5lbC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMy0wOS0xMVQyMDoxNDowNC4zNDc3MDBaIDAgW1dhcm5pbmddIFtNWS0wMTE4MTBdIFtTZXJ2ZXJdIEluc2VjdXJlIGNvbmZpZ3VyYXRpb24gZm9yIC0tcGlkLWZpbGU6IExvY2F0aW9uICcvdmFyL3J1bi9teXNxbGQnIGluIHRoZSBwYXRoIGlzIGFjY2Vzc2libGUgdG8gYWxsIE9TIHVzZXJzLiBDb25zaWRlciBjaG9vc2luZyBhIGRpZmZlcmVudCBkaXJlY3RvcnkuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjMtMDktMTFUMjA6MTQ6MDQuMzk0NDM2WiAwIFtTeXN0ZW1dIFtNWS0wMTA5MzFdIFtTZXJ2ZXJdIC91c3Ivc2Jpbi9teXNxbGQ6IHJlYWR5IGZvciBjb25uZWN0aW9ucy4gVmVyc2lvbjogJzguMC4yMycgIHNvY2tldDogJy92YXIvcnVuL215c3FsZC9teXNxbGQuc29jaycgIHBvcnQ6IDMzMDYgIE15U1FMIENvbW11bml0eSBTZXJ2ZXIgLSBHUEwuCm15c3FsLW15c3FsCXwgAQAAAAAAAGwyMDIzLTA5LTExIDIwOjI0OjUzKzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IEVudHJ5cG9pbnQgc2NyaXB0IGZvciBNeVNRTCBTZXJ2ZXIgOC4wLjIzLTFkZWJpYW4xMCBzdGFydGVkLgpteXNxbC1teXNxbAl8IAEAAAAAAABTMjAyMy0wOS0xMSAyMDoyNDo1MyswMDowMCBbTm90ZV0gW0VudHJ5cG9pbnRdOiBTd2l0Y2hpbmcgdG8gZGVkaWNhdGVkIHVzZXIgJ215c3FsJwpteXNxbC1teXNxbAl8IAEAAAAAAABsMjAyMy0wOS0xMSAyMDoyNDo1MyswMDowMCBbTm90ZV0gW0VudHJ5cG9pbnRdOiBFbnRyeXBvaW50IHNjcmlwdCBmb3IgTXlTUUwgU2VydmVyIDguMC4yMy0xZGViaWFuMTAgc3RhcnRlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAczIwMjMtMDktMTFUMjA6MjQ6NTQuMDY1MzgwWiAwIFtTeXN0ZW1dIFtNWS0wMTAxMTZdIFtTZXJ2ZXJdIC91c3Ivc2Jpbi9teXNxbGQgKG15c3FsZCA4LjAuMjMpIHN0YXJ0aW5nIGFzIHByb2Nlc3MgMQpteXNxbC1teXNxbAl8IAIAAAAAAABfMjAyMy0wOS0xMVQyMDoyNDo1NC4wNzc4MTBaIDEgW1N5c3RlbV0gW01ZLTAxMzU3Nl0gW0lubm9EQl0gSW5ub0RCIGluaXRpYWxpemF0aW9uIGhhcyBzdGFydGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAABdMjAyMy0wOS0xMVQyMDoyNDo1NC40NDk0NTFaIDEgW1N5c3RlbV0gW01ZLTAxMzU3N10gW0lubm9EQl0gSW5ub0RCIGluaXRpYWxpemF0aW9uIGhhcyBlbmRlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMy0wOS0xMVQyMDoyNDo1NC42MDI0MDBaIDAgW1N5c3RlbV0gW01ZLTAxMTMyM10gW1NlcnZlcl0gWCBQbHVnaW4gcmVhZHkgZm9yIGNvbm5lY3Rpb25zLiBCaW5kLWFkZHJlc3M6ICc6OicgcG9ydDogMzMwNjAsIHNvY2tldDogL3Zhci9ydW4vbXlzcWxkL215c3FseC5zb2NrCm15c3FsLW15c3FsCXwgAgAAAAAAAFoyMDIzLTA5LTExVDIwOjI0OjU0LjYyOTM1NFogMCBbU3lzdGVtXSBbTVktMDEwMjI5XSBbU2VydmVyXSBTdGFydGluZyBYQSBjcmFzaCByZWNvdmVyeS4uLgpteXNxbC1teXNxbAl8IAIAAAAAAABYMjAyMy0wOS0xMVQyMDoyNDo1NC42MzkxNDFaIDAgW1N5c3RlbV0gW01ZLTAxMDIzMl0gW1NlcnZlcl0gWEEgY3Jhc2ggcmVjb3ZlcnkgZmluaXNoZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAAGMyMDIzLTA5LTExVDIwOjI0OjU0LjcyNzI1MVogMCBbV2FybmluZ10gW01ZLTAxMDA2OF0gW1NlcnZlcl0gQ0EgY2VydGlmaWNhdGUgY2EucGVtIGlzIHNlbGYgc2lnbmVkLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIzLTA5LTExVDIwOjI0OjU0LjcyNzUyM1ogMCBbU3lzdGVtXSBbTVktMDEzNjAyXSBbU2VydmVyXSBDaGFubmVsIG15c3FsX21haW4gY29uZmlndXJlZCB0byBzdXBwb3J0IFRMUy4gRW5jcnlwdGVkIGNvbm5lY3Rpb25zIGFyZSBub3cgc3VwcG9ydGVkIGZvciB0aGlzIGNoYW5uZWwuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjMtMDktMTFUMjA6MjQ6NTQuNzM0MzA2WiAwIFtXYXJuaW5nXSBbTVktMDExODEwXSBbU2VydmVyXSBJbnNlY3VyZSBjb25maWd1cmF0aW9uIGZvciAtLXBpZC1maWxlOiBMb2NhdGlvbiAnL3Zhci9ydW4vbXlzcWxkJyBpbiB0aGUgcGF0aCBpcyBhY2Nlc3NpYmxlIHRvIGFsbCBPUyB1c2Vycy4gQ29uc2lkZXIgY2hvb3NpbmcgYSBkaWZmZXJlbnQgZGlyZWN0b3J5LgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIzLTA5LTExVDIwOjI0OjU0Ljc5MTg0M1ogMCBbU3lzdGVtXSBbTVktMDEwOTMxXSBbU2VydmVyXSAvdXNyL3NiaW4vbXlzcWxkOiByZWFkeSBmb3IgY29ubmVjdGlvbnMuIFZlcnNpb246ICc4LjAuMjMnICBzb2NrZXQ6ICcvdmFyL3J1bi9teXNxbGQvbXlzcWxkLnNvY2snICBwb3J0OiAzMzA2ICBNeVNRTCBDb21tdW5pdHkgU2VydmVyIC0gR1BMLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIzLTA5LTE0VDIxOjA1OjIwLjkyMjc2NlogMCBbU3lzdGVtXSBbTVktMDEzMTcyXSBbU2VydmVyXSBSZWNlaXZlZCBTSFVURE9XTiBmcm9tIHVzZXIgPHZpYSB1c2VyIHNpZ25hbD4uIFNodXR0aW5nIGRvd24gbXlzcWxkIChWZXJzaW9uOiA4LjAuMjMpLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIzLTA5LTE0VDIxOjA1OjIyLjEyMTQ0MFogMCBbU3lzdGVtXSBbTVktMDEwOTEwXSBbU2VydmVyXSAvdXNyL3NiaW4vbXlzcWxkOiBTaHV0ZG93biBjb21wbGV0ZSAobXlzcWxkIDguMC4yMykgIE15U1FMIENvbW11bml0eSBTZXJ2ZXIgLSBHUEwuCm15c3FsLW15c3FsCXwgAQAAAAAAAGwyMDIzLTA5LTE0IDIxOjA1OjM5KzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IEVudHJ5cG9pbnQgc2NyaXB0IGZvciBNeVNRTCBTZXJ2ZXIgOC4wLjIzLTFkZWJpYW4xMCBzdGFydGVkLgpteXNxbC1teXNxbAl8IAEAAAAAAABTMjAyMy0wOS0xNCAyMTowNTozOSswMDowMCBbTm90ZV0gW0VudHJ5cG9pbnRdOiBTd2l0Y2hpbmcgdG8gZGVkaWNhdGVkIHVzZXIgJ215c3FsJwpteXNxbC1teXNxbAl8IAEAAAAAAABsMjAyMy0wOS0xNCAyMTowNTozOSswMDowMCBbTm90ZV0gW0VudHJ5cG9pbnRdOiBFbnRyeXBvaW50IHNjcmlwdCBmb3IgTXlTUUwgU2VydmVyIDguMC4yMy0xZGViaWFuMTAgc3RhcnRlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAczIwMjMtMDktMTRUMjE6MDU6MzkuODA2Nzg2WiAwIFtTeXN0ZW1dIFtNWS0wMTAxMTZdIFtTZXJ2ZXJdIC91c3Ivc2Jpbi9teXNxbGQgKG15c3FsZCA4LjAuMjMpIHN0YXJ0aW5nIGFzIHByb2Nlc3MgMQpteXNxbC1teXNxbAl8IAIAAAAAAABfMjAyMy0wOS0xNFQyMTowNTozOS44MTQ4MDVaIDEgW1N5c3RlbV0gW01ZLTAxMzU3Nl0gW0lubm9EQl0gSW5ub0RCIGluaXRpYWxpemF0aW9uIGhhcyBzdGFydGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAABdMjAyMy0wOS0xNFQyMTowNTo0MC40MTgzMDFaIDEgW1N5c3RlbV0gW01ZLTAxMzU3N10gW0lubm9EQl0gSW5ub0RCIGluaXRpYWxpemF0aW9uIGhhcyBlbmRlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMy0wOS0xNFQyMTowNTo0MC41MzkyMzBaIDAgW1N5c3RlbV0gW01ZLTAxMTMyM10gW1NlcnZlcl0gWCBQbHVnaW4gcmVhZHkgZm9yIGNvbm5lY3Rpb25zLiBCaW5kLWFkZHJlc3M6ICc6OicgcG9ydDogMzMwNjAsIHNvY2tldDogL3Zhci9ydW4vbXlzcWxkL215c3FseC5zb2NrCm15c3FsLW15c3FsCXwgAgAAAAAAAGMyMDIzLTA5LTE0VDIxOjA1OjQwLjY0NTk0NFogMCBbV2FybmluZ10gW01ZLTAxMDA2OF0gW1NlcnZlcl0gQ0EgY2VydGlmaWNhdGUgY2EucGVtIGlzIHNlbGYgc2lnbmVkLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIzLTA5LTE0VDIxOjA1OjQwLjY0NjA3OVogMCBbU3lzdGVtXSBbTVktMDEzNjAyXSBbU2VydmVyXSBDaGFubmVsIG15c3FsX21haW4gY29uZmlndXJlZCB0byBzdXBwb3J0IFRMUy4gRW5jcnlwdGVkIGNvbm5lY3Rpb25zIGFyZSBub3cgc3VwcG9ydGVkIGZvciB0aGlzIGNoYW5uZWwuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjMtMDktMTRUMjE6MDU6NDAuNjUxNjU4WiAwIFtXYXJuaW5nXSBbTVktMDExODEwXSBbU2VydmVyXSBJbnNlY3VyZSBjb25maWd1cmF0aW9uIGZvciAtLXBpZC1maWxlOiBMb2NhdGlvbiAnL3Zhci9ydW4vbXlzcWxkJyBpbiB0aGUgcGF0aCBpcyBhY2Nlc3NpYmxlIHRvIGFsbCBPUyB1c2Vycy4gQ29uc2lkZXIgY2hvb3NpbmcgYSBkaWZmZXJlbnQgZGlyZWN0b3J5LgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIzLTA5LTE0VDIxOjA1OjQwLjY3MzczOVogMCBbU3lzdGVtXSBbTVktMDEwOTMxXSBbU2VydmVyXSAvdXNyL3NiaW4vbXlzcWxkOiByZWFkeSBmb3IgY29ubmVjdGlvbnMuIFZlcnNpb246ICc4LjAuMjMnICBzb2NrZXQ6ICcvdmFyL3J1bi9teXNxbGQvbXlzcWxkLnNvY2snICBwb3J0OiAzMzA2ICBNeVNRTCBDb21tdW5pdHkgU2VydmVyIC0gR1BMLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIzLTA5LTE0VDIxOjA2OjQ1LjI5Mzk3NlogMCBbU3lzdGVtXSBbTVktMDEzMTcyXSBbU2VydmVyXSBSZWNlaXZlZCBTSFVURE9XTiBmcm9tIHVzZXIgPHZpYSB1c2VyIHNpZ25hbD4uIFNodXR0aW5nIGRvd24gbXlzcWxkIChWZXJzaW9uOiA4LjAuMjMpLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIzLTA5LTE0VDIxOjA2OjQ2LjA4ODU1M1ogMCBbU3lzdGVtXSBbTVktMDEwOTEwXSBbU2VydmVyXSAvdXNyL3NiaW4vbXlzcWxkOiBTaHV0ZG93biBjb21wbGV0ZSAobXlzcWxkIDguMC4yMykgIE15U1FMIENvbW11bml0eSBTZXJ2ZXIgLSBHUEwuCm15c3FsLW15c3FsCXwgAQAAAAAAAGwyMDIzLTA5LTE0IDIxOjA2OjU0KzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IEVudHJ5cG9pbnQgc2NyaXB0IGZvciBNeVNRTCBTZXJ2ZXIgOC4wLjIzLTFkZWJpYW4xMCBzdGFydGVkLgpteXNxbC1teXNxbAl8IAEAAAAAAABTMjAyMy0wOS0xNCAyMTowNjo1NCswMDowMCBbTm90ZV0gW0VudHJ5cG9pbnRdOiBTd2l0Y2hpbmcgdG8gZGVkaWNhdGVkIHVzZXIgJ215c3FsJwpteXNxbC1teXNxbAl8IAEAAAAAAABsMjAyMy0wOS0xNCAyMTowNjo1NCswMDowMCBbTm90ZV0gW0VudHJ5cG9pbnRdOiBFbnRyeXBvaW50IHNjcmlwdCBmb3IgTXlTUUwgU2VydmVyIDguMC4yMy0xZGViaWFuMTAgc3RhcnRlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAczIwMjMtMDktMTRUMjE6MDY6NTQuNzgyMjUwWiAwIFtTeXN0ZW1dIFtNWS0wMTAxMTZdIFtTZXJ2ZXJdIC91c3Ivc2Jpbi9teXNxbGQgKG15c3FsZCA4LjAuMjMpIHN0YXJ0aW5nIGFzIHByb2Nlc3MgMQpteXNxbC1teXNxbAl8IAIAAAAAAABfMjAyMy0wOS0xNFQyMTowNjo1NC43OTAzNzdaIDEgW1N5c3RlbV0gW01ZLTAxMzU3Nl0gW0lubm9EQl0gSW5ub0RCIGluaXRpYWxpemF0aW9uIGhhcyBzdGFydGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAABdMjAyMy0wOS0xNFQyMTowNjo1NS4yNDE5NTBaIDEgW1N5c3RlbV0gW01ZLTAxMzU3N10gW0lubm9EQl0gSW5ub0RCIGluaXRpYWxpemF0aW9uIGhhcyBlbmRlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMy0wOS0xNFQyMTowNjo1NS4zNTk3ODhaIDAgW1N5c3RlbV0gW01ZLTAxMTMyM10gW1NlcnZlcl0gWCBQbHVnaW4gcmVhZHkgZm9yIGNvbm5lY3Rpb25zLiBCaW5kLWFkZHJlc3M6ICc6OicgcG9ydDogMzMwNjAsIHNvY2tldDogL3Zhci9ydW4vbXlzcWxkL215c3FseC5zb2NrCm15c3FsLW15c3FsCXwgAgAAAAAAAGMyMDIzLTA5LTE0VDIxOjA2OjU1LjQ0OTIzOFogMCBbV2FybmluZ10gW01ZLTAxMDA2OF0gW1NlcnZlcl0gQ0EgY2VydGlmaWNhdGUgY2EucGVtIGlzIHNlbGYgc2lnbmVkLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIzLTA5LTE0VDIxOjA2OjU1LjQ0OTU3MlogMCBbU3lzdGVtXSBbTVktMDEzNjAyXSBbU2VydmVyXSBDaGFubmVsIG15c3FsX21haW4gY29uZmlndXJlZCB0byBzdXBwb3J0IFRMUy4gRW5jcnlwdGVkIGNvbm5lY3Rpb25zIGFyZSBub3cgc3VwcG9ydGVkIGZvciB0aGlzIGNoYW5uZWwuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjMtMDktMTRUMjE6MDY6NTUuNDU4NzE5WiAwIFtXYXJuaW5nXSBbTVktMDExODEwXSBbU2VydmVyXSBJbnNlY3VyZSBjb25maWd1cmF0aW9uIGZvciAtLXBpZC1maWxlOiBMb2NhdGlvbiAnL3Zhci9ydW4vbXlzcWxkJyBpbiB0aGUgcGF0aCBpcyBhY2Nlc3NpYmxlIHRvIGFsbCBPUyB1c2Vycy4gQ29uc2lkZXIgY2hvb3NpbmcgYSBkaWZmZXJlbnQgZGlyZWN0b3J5LgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIzLTA5LTE0VDIxOjA2OjU1LjQ5MTIwMFogMCBbU3lzdGVtXSBbTVktMDEwOTMxXSBbU2VydmVyXSAvdXNyL3NiaW4vbXlzcWxkOiByZWFkeSBmb3IgY29ubmVjdGlvbnMuIFZlcnNpb246ICc4LjAuMjMnICBzb2NrZXQ6ICcvdmFyL3J1bi9teXNxbGQvbXlzcWxkLnNvY2snICBwb3J0OiAzMzA2ICBNeVNRTCBDb21tdW5pdHkgU2VydmVyIC0gR1BMLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIzLTA5LTE0VDIxOjEzOjE1LjE5Mjg5MVogMCBbU3lzdGVtXSBbTVktMDEzMTcyXSBbU2VydmVyXSBSZWNlaXZlZCBTSFVURE9XTiBmcm9tIHVzZXIgPHZpYSB1c2VyIHNpZ25hbD4uIFNodXR0aW5nIGRvd24gbXlzcWxkIChWZXJzaW9uOiA4LjAuMjMpLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIzLTA5LTE0VDIxOjEzOjE1LjkzODM4MlogMCBbU3lzdGVtXSBbTVktMDEwOTEwXSBbU2VydmVyXSAvdXNyL3NiaW4vbXlzcWxkOiBTaHV0ZG93biBjb21wbGV0ZSAobXlzcWxkIDguMC4yMykgIE15U1FMIENvbW11bml0eSBTZXJ2ZXIgLSBHUEwuCm15c3FsLW15c3FsCXwgAQAAAAAAAGwyMDIzLTA5LTE0IDIxOjEzOjI0KzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IEVudHJ5cG9pbnQgc2NyaXB0IGZvciBNeVNRTCBTZXJ2ZXIgOC4wLjIzLTFkZWJpYW4xMCBzdGFydGVkLgpteXNxbC1teXNxbAl8IAEAAAAAAABTMjAyMy0wOS0xNCAyMToxMzoyNCswMDowMCBbTm90ZV0gW0VudHJ5cG9pbnRdOiBTd2l0Y2hpbmcgdG8gZGVkaWNhdGVkIHVzZXIgJ215c3FsJwpteXNxbC1teXNxbAl8IAEAAAAAAABsMjAyMy0wOS0xNCAyMToxMzoyNCswMDowMCBbTm90ZV0gW0VudHJ5cG9pbnRdOiBFbnRyeXBvaW50IHNjcmlwdCBmb3IgTXlTUUwgU2VydmVyIDguMC4yMy0xZGViaWFuMTAgc3RhcnRlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAczIwMjMtMDktMTRUMjE6MTM6MjQuNTM4MjQ1WiAwIFtTeXN0ZW1dIFtNWS0wMTAxMTZdIFtTZXJ2ZXJdIC91c3Ivc2Jpbi9teXNxbGQgKG15c3FsZCA4LjAuMjMpIHN0YXJ0aW5nIGFzIHByb2Nlc3MgMQpteXNxbC1teXNxbAl8IAIAAAAAAABfMjAyMy0wOS0xNFQyMToxMzoyNC41NDU1NTdaIDEgW1N5c3RlbV0gW01ZLTAxMzU3Nl0gW0lubm9EQl0gSW5ub0RCIGluaXRpYWxpemF0aW9uIGhhcyBzdGFydGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAABdMjAyMy0wOS0xNFQyMToxMzoyNC45NzI3NjVaIDEgW1N5c3RlbV0gW01ZLTAxMzU3N10gW0lubm9EQl0gSW5ub0RCIGluaXRpYWxpemF0aW9uIGhhcyBlbmRlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMy0wOS0xNFQyMToxMzoyNS4wNjIwODhaIDAgW1N5c3RlbV0gW01ZLTAxMTMyM10gW1NlcnZlcl0gWCBQbHVnaW4gcmVhZHkgZm9yIGNvbm5lY3Rpb25zLiBCaW5kLWFkZHJlc3M6ICc6OicgcG9ydDogMzMwNjAsIHNvY2tldDogL3Zhci9ydW4vbXlzcWxkL215c3FseC5zb2NrCm15c3FsLW15c3FsCXwgAgAAAAAAAGMyMDIzLTA5LTE0VDIxOjEzOjI1LjEzODM3MVogMCBbV2FybmluZ10gW01ZLTAxMDA2OF0gW1NlcnZlcl0gQ0EgY2VydGlmaWNhdGUgY2EucGVtIGlzIHNlbGYgc2lnbmVkLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIzLTA5LTE0VDIxOjEzOjI1LjEzODU0NlogMCBbU3lzdGVtXSBbTVktMDEzNjAyXSBbU2VydmVyXSBDaGFubmVsIG15c3FsX21haW4gY29uZmlndXJlZCB0byBzdXBwb3J0IFRMUy4gRW5jcnlwdGVkIGNvbm5lY3Rpb25zIGFyZSBub3cgc3VwcG9ydGVkIGZvciB0aGlzIGNoYW5uZWwuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjMtMDktMTRUMjE6MTM6MjUuMTQ0NjA5WiAwIFtXYXJuaW5nXSBbTVktMDExODEwXSBbU2VydmVyXSBJbnNlY3VyZSBjb25maWd1cmF0aW9uIGZvciAtLXBpZC1maWxlOiBMb2NhdGlvbiAnL3Zhci9ydW4vbXlzcWxkJyBpbiB0aGUgcGF0aCBpcyBhY2Nlc3NpYmxlIHRvIGFsbCBPUyB1c2Vycy4gQ29uc2lkZXIgY2hvb3NpbmcgYSBkaWZmZXJlbnQgZGlyZWN0b3J5LgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIzLTA5LTE0VDIxOjEzOjI1LjE3MTg0OFogMCBbU3lzdGVtXSBbTVktMDEwOTMxXSBbU2VydmVyXSAvdXNyL3NiaW4vbXlzcWxkOiByZWFkeSBmb3IgY29ubmVjdGlvbnMuIFZlcnNpb246ICc4LjAuMjMnICBzb2NrZXQ6ICcvdmFyL3J1bi9teXNxbGQvbXlzcWxkLnNvY2snICBwb3J0OiAzMzA2ICBNeVNRTCBDb21tdW5pdHkgU2VydmVyIC0gR1BMLgpteXNxbC1teXNxbAl8IAEAAAAAAABsMjAyMy0wOS0xNCAyMTozNDozNSswMDowMCBbTm90ZV0gW0VudHJ5cG9pbnRdOiBFbnRyeXBvaW50IHNjcmlwdCBmb3IgTXlTUUwgU2VydmVyIDguMC4yMy0xZGViaWFuMTAgc3RhcnRlZC4KbXlzcWwtbXlzcWwJfCABAAAAAAAAUzIwMjMtMDktMTQgMjE6MzQ6NDcrMDA6MDAgW05vdGVdIFtFbnRyeXBvaW50XTogU3dpdGNoaW5nIHRvIGRlZGljYXRlZCB1c2VyICdteXNxbCcKbXlzcWwtbXlzcWwJfCABAAAAAAAAbDIwMjMtMDktMTQgMjE6MzQ6NDcrMDA6MDAgW05vdGVdIFtFbnRyeXBvaW50XTogRW50cnlwb2ludCBzY3JpcHQgZm9yIE15U1FMIFNlcnZlciA4LjAuMjMtMWRlYmlhbjEwIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAAHMyMDIzLTA5LTE0VDIxOjM0OjQ3Ljk0MTY3OFogMCBbU3lzdGVtXSBbTVktMDEwMTE2XSBbU2VydmVyXSAvdXNyL3NiaW4vbXlzcWxkIChteXNxbGQgOC4wLjIzKSBzdGFydGluZyBhcyBwcm9jZXNzIDEKbXlzcWwtbXlzcWwJfCACAAAAAAAAXzIwMjMtMDktMTRUMjE6MzQ6NDcuOTU3ODExWiAxIFtTeXN0ZW1dIFtNWS0wMTM1NzZdIFtJbm5vREJdIElubm9EQiBpbml0aWFsaXphdGlvbiBoYXMgc3RhcnRlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAXTIwMjMtMDktMTRUMjE6MzQ6NTAuODY2Nzg0WiAxIFtTeXN0ZW1dIFtNWS0wMTM1NzddIFtJbm5vREJdIElubm9EQiBpbml0aWFsaXphdGlvbiBoYXMgZW5kZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjMtMDktMTRUMjE6MzQ6NTEuMjE3ODgyWiAwIFtTeXN0ZW1dIFtNWS0wMTEzMjNdIFtTZXJ2ZXJdIFggUGx1Z2luIHJlYWR5IGZvciBjb25uZWN0aW9ucy4gQmluZC1hZGRyZXNzOiAnOjonIHBvcnQ6IDMzMDYwLCBzb2NrZXQ6IC92YXIvcnVuL215c3FsZC9teXNxbHguc29jawpteXNxbC1teXNxbAl8IAIAAAAAAABaMjAyMy0wOS0xNFQyMTozNDo1MS4yNzQxOTlaIDAgW1N5c3RlbV0gW01ZLTAxMDIyOV0gW1NlcnZlcl0gU3RhcnRpbmcgWEEgY3Jhc2ggcmVjb3ZlcnkuLi4KbXlzcWwtbXlzcWwJfCACAAAAAAAAWDIwMjMtMDktMTRUMjE6MzQ6NTEuMjgzODAwWiAwIFtTeXN0ZW1dIFtNWS0wMTAyMzJdIFtTZXJ2ZXJdIFhBIGNyYXNoIHJlY292ZXJ5IGZpbmlzaGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAABjMjAyMy0wOS0xNFQyMTozNDo1MS40Njc5NDhaIDAgW1dhcm5pbmddIFtNWS0wMTAwNjhdIFtTZXJ2ZXJdIENBIGNlcnRpZmljYXRlIGNhLnBlbSBpcyBzZWxmIHNpZ25lZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMy0wOS0xNFQyMTozNDo1MS40NjgzMDZaIDAgW1N5c3RlbV0gW01ZLTAxMzYwMl0gW1NlcnZlcl0gQ2hhbm5lbCBteXNxbF9tYWluIGNvbmZpZ3VyZWQgdG8gc3VwcG9ydCBUTFMuIEVuY3J5cHRlZCBjb25uZWN0aW9ucyBhcmUgbm93IHN1cHBvcnRlZCBmb3IgdGhpcyBjaGFubmVsLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIzLTA5LTE0VDIxOjM0OjUxLjQ3ODgxNlogMCBbV2FybmluZ10gW01ZLTAxMTgxMF0gW1NlcnZlcl0gSW5zZWN1cmUgY29uZmlndXJhdGlvbiBmb3IgLS1waWQtZmlsZTogTG9jYXRpb24gJy92YXIvcnVuL215c3FsZCcgaW4gdGhlIHBhdGggaXMgYWNjZXNzaWJsZSB0byBhbGwgT1MgdXNlcnMuIENvbnNpZGVyIGNob29zaW5nIGEgZGlmZmVyZW50IGRpcmVjdG9yeS4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMy0wOS0xNFQyMTozNDo1MS41OTgwMTZaIDAgW1N5c3RlbV0gW01ZLTAxMDkzMV0gW1NlcnZlcl0gL3Vzci9zYmluL215c3FsZDogcmVhZHkgZm9yIGNvbm5lY3Rpb25zLiBWZXJzaW9uOiAnOC4wLjIzJyAgc29ja2V0OiAnL3Zhci9ydW4vbXlzcWxkL215c3FsZC5zb2NrJyAgcG9ydDogMzMwNiAgTXlTUUwgQ29tbXVuaXR5IFNlcnZlciAtIEdQTC4KbXlzcWwtbXlzcWwJfCABAAAAAAAAbDIwMjMtMDktMjEgMTk6MDY6MTcrMDA6MDAgW05vdGVdIFtFbnRyeXBvaW50XTogRW50cnlwb2ludCBzY3JpcHQgZm9yIE15U1FMIFNlcnZlciA4LjAuMjMtMWRlYmlhbjEwIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAQAAAAAAAFMyMDIzLTA5LTIxIDE5OjA2OjMwKzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IFN3aXRjaGluZyB0byBkZWRpY2F0ZWQgdXNlciAnbXlzcWwnCm15c3FsLW15c3FsCXwgAQAAAAAAAGwyMDIzLTA5LTIxIDE5OjA2OjMwKzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IEVudHJ5cG9pbnQgc2NyaXB0IGZvciBNeVNRTCBTZXJ2ZXIgOC4wLjIzLTFkZWJpYW4xMCBzdGFydGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAABzMjAyMy0wOS0yMVQxOTowNjozMi40Njc5ODdaIDAgW1N5c3RlbV0gW01ZLTAxMDExNl0gW1NlcnZlcl0gL3Vzci9zYmluL215c3FsZCAobXlzcWxkIDguMC4yMykgc3RhcnRpbmcgYXMgcHJvY2VzcyAxCm15c3FsLW15c3FsCXwgAgAAAAAAAF8yMDIzLTA5LTIxVDE5OjA2OjM1LjA3OTkzM1ogMSBbU3lzdGVtXSBbTVktMDEzNTc2XSBbSW5ub0RCXSBJbm5vREIgaW5pdGlhbGl6YXRpb24gaGFzIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAAF0yMDIzLTA5LTIxVDE5OjA3OjE3LjQ3NDYzNlogMSBbU3lzdGVtXSBbTVktMDEzNTc3XSBbSW5ub0RCXSBJbm5vREIgaW5pdGlhbGl6YXRpb24gaGFzIGVuZGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIzLTA5LTIxVDE5OjA3OjE5LjUzMzk0NlogMCBbU3lzdGVtXSBbTVktMDExMzIzXSBbU2VydmVyXSBYIFBsdWdpbiByZWFkeSBmb3IgY29ubmVjdGlvbnMuIEJpbmQtYWRkcmVzczogJzo6JyBwb3J0OiAzMzA2MCwgc29ja2V0OiAvdmFyL3J1bi9teXNxbGQvbXlzcWx4LnNvY2sKbXlzcWwtbXlzcWwJfCACAAAAAAAAWjIwMjMtMDktMjFUMTk6MDc6MjAuMTA1NjQ0WiAwIFtTeXN0ZW1dIFtNWS0wMTAyMjldIFtTZXJ2ZXJdIFN0YXJ0aW5nIFhBIGNyYXNoIHJlY292ZXJ5Li4uCm15c3FsLW15c3FsCXwgAgAAAAAAAFgyMDIzLTA5LTIxVDE5OjA3OjIwLjE0OTA2MVogMCBbU3lzdGVtXSBbTVktMDEwMjMyXSBbU2VydmVyXSBYQSBjcmFzaCByZWNvdmVyeSBmaW5pc2hlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAYzIwMjMtMDktMjFUMTk6MDc6MjAuMjk0OTY3WiAwIFtXYXJuaW5nXSBbTVktMDEwMDY4XSBbU2VydmVyXSBDQSBjZXJ0aWZpY2F0ZSBjYS5wZW0gaXMgc2VsZiBzaWduZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjMtMDktMjFUMTk6MDc6MjAuMjk1MjU0WiAwIFtTeXN0ZW1dIFtNWS0wMTM2MDJdIFtTZXJ2ZXJdIENoYW5uZWwgbXlzcWxfbWFpbiBjb25maWd1cmVkIHRvIHN1cHBvcnQgVExTLiBFbmNyeXB0ZWQgY29ubmVjdGlvbnMgYXJlIG5vdyBzdXBwb3J0ZWQgZm9yIHRoaXMgY2hhbm5lbC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMy0wOS0yMVQxOTowNzoyMC4zMDU1ODVaIDAgW1dhcm5pbmddIFtNWS0wMTE4MTBdIFtTZXJ2ZXJdIEluc2VjdXJlIGNvbmZpZ3VyYXRpb24gZm9yIC0tcGlkLWZpbGU6IExvY2F0aW9uICcvdmFyL3J1bi9teXNxbGQnIGluIHRoZSBwYXRoIGlzIGFjY2Vzc2libGUgdG8gYWxsIE9TIHVzZXJzLiBDb25zaWRlciBjaG9vc2luZyBhIGRpZmZlcmVudCBkaXJlY3RvcnkuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjMtMDktMjFUMTk6MDc6MjAuMzc5NDg1WiAwIFtTeXN0ZW1dIFtNWS0wMTA5MzFdIFtTZXJ2ZXJdIC91c3Ivc2Jpbi9teXNxbGQ6IHJlYWR5IGZvciBjb25uZWN0aW9ucy4gVmVyc2lvbjogJzguMC4yMycgIHNvY2tldDogJy92YXIvcnVuL215c3FsZC9teXNxbGQuc29jaycgIHBvcnQ6IDMzMDYgIE15U1FMIENvbW11bml0eSBTZXJ2ZXIgLSBHUEwuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjMtMDktMjFUMTk6MDc6MjAuMzc5NTMxWiAwIFtTeXN0ZW1dIFtNWS0wMTMxNzJdIFtTZXJ2ZXJdIFJlY2VpdmVkIFNIVVRET1dOIGZyb20gdXNlciA8dmlhIHVzZXIgc2lnbmFsPi4gU2h1dHRpbmcgZG93biBteXNxbGQgKFZlcnNpb246IDguMC4yMykuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjMtMDktMjFUMTk6MDc6MjIuODQwNjM1WiAwIFtTeXN0ZW1dIFtNWS0wMTA5MTBdIFtTZXJ2ZXJdIC91c3Ivc2Jpbi9teXNxbGQ6IFNodXRkb3duIGNvbXBsZXRlIChteXNxbGQgOC4wLjIzKSAgTXlTUUwgQ29tbXVuaXR5IFNlcnZlciAtIEdQTC4KbXlzcWwtbXlzcWwJfCABAAAAAAAAbDIwMjMtMDktMjEgMTk6MDc6MzIrMDA6MDAgW05vdGVdIFtFbnRyeXBvaW50XTogRW50cnlwb2ludCBzY3JpcHQgZm9yIE15U1FMIFNlcnZlciA4LjAuMjMtMWRlYmlhbjEwIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAQAAAAAAAFMyMDIzLTA5LTIxIDE5OjA3OjMyKzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IFN3aXRjaGluZyB0byBkZWRpY2F0ZWQgdXNlciAnbXlzcWwnCm15c3FsLW15c3FsCXwgAQAAAAAAAGwyMDIzLTA5LTIxIDE5OjA3OjMyKzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IEVudHJ5cG9pbnQgc2NyaXB0IGZvciBNeVNRTCBTZXJ2ZXIgOC4wLjIzLTFkZWJpYW4xMCBzdGFydGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAABzMjAyMy0wOS0yMVQxOTowNzozMy4yOTI0NjFaIDAgW1N5c3RlbV0gW01ZLTAxMDExNl0gW1NlcnZlcl0gL3Vzci9zYmluL215c3FsZCAobXlzcWxkIDguMC4yMykgc3RhcnRpbmcgYXMgcHJvY2VzcyAxCm15c3FsLW15c3FsCXwgAgAAAAAAAF8yMDIzLTA5LTIxVDE5OjA3OjMzLjMxNTE4NFogMSBbU3lzdGVtXSBbTVktMDEzNTc2XSBbSW5ub0RCXSBJbm5vREIgaW5pdGlhbGl6YXRpb24gaGFzIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAAF0yMDIzLTA5LTIxVDE5OjA3OjMzLjg0NTE2NFogMSBbU3lzdGVtXSBbTVktMDEzNTc3XSBbSW5ub0RCXSBJbm5vREIgaW5pdGlhbGl6YXRpb24gaGFzIGVuZGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIzLTA5LTIxVDE5OjA3OjM0LjAyMjIzM1ogMCBbU3lzdGVtXSBbTVktMDExMzIzXSBbU2VydmVyXSBYIFBsdWdpbiByZWFkeSBmb3IgY29ubmVjdGlvbnMuIEJpbmQtYWRkcmVzczogJzo6JyBwb3J0OiAzMzA2MCwgc29ja2V0OiAvdmFyL3J1bi9teXNxbGQvbXlzcWx4LnNvY2sKbXlzcWwtbXlzcWwJfCACAAAAAAAAYzIwMjMtMDktMjFUMTk6MDc6MzQuMTM4MjE5WiAwIFtXYXJuaW5nXSBbTVktMDEwMDY4XSBbU2VydmVyXSBDQSBjZXJ0aWZpY2F0ZSBjYS5wZW0gaXMgc2VsZiBzaWduZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjMtMDktMjFUMTk6MDc6MzQuMTM4NDQ1WiAwIFtTeXN0ZW1dIFtNWS0wMTM2MDJdIFtTZXJ2ZXJdIENoYW5uZWwgbXlzcWxfbWFpbiBjb25maWd1cmVkIHRvIHN1cHBvcnQgVExTLiBFbmNyeXB0ZWQgY29ubmVjdGlvbnMgYXJlIG5vdyBzdXBwb3J0ZWQgZm9yIHRoaXMgY2hhbm5lbC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMy0wOS0yMVQxOTowNzozNC4xNDY0MjJaIDAgW1dhcm5pbmddIFtNWS0wMTE4MTBdIFtTZXJ2ZXJdIEluc2VjdXJlIGNvbmZpZ3VyYXRpb24gZm9yIC0tcGlkLWZpbGU6IExvY2F0aW9uICcvdmFyL3J1bi9teXNxbGQnIGluIHRoZSBwYXRoIGlzIGFjY2Vzc2libGUgdG8gYWxsIE9TIHVzZXJzLiBDb25zaWRlciBjaG9vc2luZyBhIGRpZmZlcmVudCBkaXJlY3RvcnkuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjMtMDktMjFUMTk6MDc6MzQuMTY1NTc3WiAwIFtTeXN0ZW1dIFtNWS0wMTA5MzFdIFtTZXJ2ZXJdIC91c3Ivc2Jpbi9teXNxbGQ6IHJlYWR5IGZvciBjb25uZWN0aW9ucy4gVmVyc2lvbjogJzguMC4yMycgIHNvY2tldDogJy92YXIvcnVuL215c3FsZC9teXNxbGQuc29jaycgIHBvcnQ6IDMzMDYgIE15U1FMIENvbW11bml0eSBTZXJ2ZXIgLSBHUEwuCm15c3FsLW15c3FsCXwgAQAAAAAAAGwyMDIzLTA5LTIxIDE5OjE3OjM5KzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IEVudHJ5cG9pbnQgc2NyaXB0IGZvciBNeVNRTCBTZXJ2ZXIgOC4wLjIzLTFkZWJpYW4xMCBzdGFydGVkLgpteXNxbC1teXNxbAl8IAEAAAAAAABTMjAyMy0wOS0yMSAxOToxNzozOSswMDowMCBbTm90ZV0gW0VudHJ5cG9pbnRdOiBTd2l0Y2hpbmcgdG8gZGVkaWNhdGVkIHVzZXIgJ215c3FsJwpteXNxbC1teXNxbAl8IAEAAAAAAABsMjAyMy0wOS0yMSAxOToxNzozOSswMDowMCBbTm90ZV0gW0VudHJ5cG9pbnRdOiBFbnRyeXBvaW50IHNjcmlwdCBmb3IgTXlTUUwgU2VydmVyIDguMC4yMy0xZGViaWFuMTAgc3RhcnRlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAczIwMjMtMDktMjFUMTk6MTc6MzkuNjgyMDA0WiAwIFtTeXN0ZW1dIFtNWS0wMTAxMTZdIFtTZXJ2ZXJdIC91c3Ivc2Jpbi9teXNxbGQgKG15c3FsZCA4LjAuMjMpIHN0YXJ0aW5nIGFzIHByb2Nlc3MgMQpteXNxbC1teXNxbAl8IAIAAAAAAABfMjAyMy0wOS0yMVQxOToxNzozOS42OTQ3NjBaIDEgW1N5c3RlbV0gW01ZLTAxMzU3Nl0gW0lubm9EQl0gSW5ub0RCIGluaXRpYWxpemF0aW9uIGhhcyBzdGFydGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAABdMjAyMy0wOS0yMVQxOToxNzo0MC4wMzg0NDZaIDEgW1N5c3RlbV0gW01ZLTAxMzU3N10gW0lubm9EQl0gSW5ub0RCIGluaXRpYWxpemF0aW9uIGhhcyBlbmRlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMy0wOS0yMVQxOToxNzo0MC4xOTY4ODRaIDAgW1N5c3RlbV0gW01ZLTAxMTMyM10gW1NlcnZlcl0gWCBQbHVnaW4gcmVhZHkgZm9yIGNvbm5lY3Rpb25zLiBCaW5kLWFkZHJlc3M6ICc6OicgcG9ydDogMzMwNjAsIHNvY2tldDogL3Zhci9ydW4vbXlzcWxkL215c3FseC5zb2NrCm15c3FsLW15c3FsCXwgAgAAAAAAAFoyMDIzLTA5LTIxVDE5OjE3OjQwLjIxODE0N1ogMCBbU3lzdGVtXSBbTVktMDEwMjI5XSBbU2VydmVyXSBTdGFydGluZyBYQSBjcmFzaCByZWNvdmVyeS4uLgpteXNxbC1teXNxbAl8IAIAAAAAAABYMjAyMy0wOS0yMVQxOToxNzo0MC4yMjcxMzhaIDAgW1N5c3RlbV0gW01ZLTAxMDIzMl0gW1NlcnZlcl0gWEEgY3Jhc2ggcmVjb3ZlcnkgZmluaXNoZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAAGMyMDIzLTA5LTIxVDE5OjE3OjQwLjI2NDA4M1ogMCBbV2FybmluZ10gW01ZLTAxMDA2OF0gW1NlcnZlcl0gQ0EgY2VydGlmaWNhdGUgY2EucGVtIGlzIHNlbGYgc2lnbmVkLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIzLTA5LTIxVDE5OjE3OjQwLjI2NDIzMlogMCBbU3lzdGVtXSBbTVktMDEzNjAyXSBbU2VydmVyXSBDaGFubmVsIG15c3FsX21haW4gY29uZmlndXJlZCB0byBzdXBwb3J0IFRMUy4gRW5jcnlwdGVkIGNvbm5lY3Rpb25zIGFyZSBub3cgc3VwcG9ydGVkIGZvciB0aGlzIGNoYW5uZWwuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjMtMDktMjFUMTk6MTc6NDAuMjczNTIyWiAwIFtXYXJuaW5nXSBbTVktMDExODEwXSBbU2VydmVyXSBJbnNlY3VyZSBjb25maWd1cmF0aW9uIGZvciAtLXBpZC1maWxlOiBMb2NhdGlvbiAnL3Zhci9ydW4vbXlzcWxkJyBpbiB0aGUgcGF0aCBpcyBhY2Nlc3NpYmxlIHRvIGFsbCBPUyB1c2Vycy4gQ29uc2lkZXIgY2hvb3NpbmcgYSBkaWZmZXJlbnQgZGlyZWN0b3J5LgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIzLTA5LTIxVDE5OjE3OjQwLjMwMDg0N1ogMCBbU3lzdGVtXSBbTVktMDEwOTMxXSBbU2VydmVyXSAvdXNyL3NiaW4vbXlzcWxkOiByZWFkeSBmb3IgY29ubmVjdGlvbnMuIFZlcnNpb246ICc4LjAuMjMnICBzb2NrZXQ6ICcvdmFyL3J1bi9teXNxbGQvbXlzcWxkLnNvY2snICBwb3J0OiAzMzA2ICBNeVNRTCBDb21tdW5pdHkgU2VydmVyIC0gR1BMLgpteXNxbC1teXNxbAl8IAEAAAAAAABsMjAyMy0wOS0yMSAyMDowNTo1OSswMDowMCBbTm90ZV0gW0VudHJ5cG9pbnRdOiBFbnRyeXBvaW50IHNjcmlwdCBmb3IgTXlTUUwgU2VydmVyIDguMC4yMy0xZGViaWFuMTAgc3RhcnRlZC4KbXlzcWwtbXlzcWwJfCABAAAAAAAAUzIwMjMtMDktMjEgMjA6MDU6NTkrMDA6MDAgW05vdGVdIFtFbnRyeXBvaW50XTogU3dpdGNoaW5nIHRvIGRlZGljYXRlZCB1c2VyICdteXNxbCcKbXlzcWwtbXlzcWwJfCABAAAAAAAAbDIwMjMtMDktMjEgMjA6MDU6NTkrMDA6MDAgW05vdGVdIFtFbnRyeXBvaW50XTogRW50cnlwb2ludCBzY3JpcHQgZm9yIE15U1FMIFNlcnZlciA4LjAuMjMtMWRlYmlhbjEwIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAAHMyMDIzLTA5LTIxVDIwOjA1OjU5Ljg5MTI2MFogMCBbU3lzdGVtXSBbTVktMDEwMTE2XSBbU2VydmVyXSAvdXNyL3NiaW4vbXlzcWxkIChteXNxbGQgOC4wLjIzKSBzdGFydGluZyBhcyBwcm9jZXNzIDEKbXlzcWwtbXlzcWwJfCACAAAAAAAAXzIwMjMtMDktMjFUMjA6MDU6NTkuOTAwODAzWiAxIFtTeXN0ZW1dIFtNWS0wMTM1NzZdIFtJbm5vREJdIElubm9EQiBpbml0aWFsaXphdGlvbiBoYXMgc3RhcnRlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAXTIwMjMtMDktMjFUMjA6MDY6MDAuMzg4MTA5WiAxIFtTeXN0ZW1dIFtNWS0wMTM1NzddIFtJbm5vREJdIElubm9EQiBpbml0aWFsaXphdGlvbiBoYXMgZW5kZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjMtMDktMjFUMjA6MDY6MDAuNTE4NjY1WiAwIFtTeXN0ZW1dIFtNWS0wMTEzMjNdIFtTZXJ2ZXJdIFggUGx1Z2luIHJlYWR5IGZvciBjb25uZWN0aW9ucy4gQmluZC1hZGRyZXNzOiAnOjonIHBvcnQ6IDMzMDYwLCBzb2NrZXQ6IC92YXIvcnVuL215c3FsZC9teXNxbHguc29jawpteXNxbC1teXNxbAl8IAIAAAAAAABaMjAyMy0wOS0yMVQyMDowNjowMC41NDMxODJaIDAgW1N5c3RlbV0gW01ZLTAxMDIyOV0gW1NlcnZlcl0gU3RhcnRpbmcgWEEgY3Jhc2ggcmVjb3ZlcnkuLi4KbXlzcWwtbXlzcWwJfCACAAAAAAAAWDIwMjMtMDktMjFUMjA6MDY6MDAuNTU0NzA4WiAwIFtTeXN0ZW1dIFtNWS0wMTAyMzJdIFtTZXJ2ZXJdIFhBIGNyYXNoIHJlY292ZXJ5IGZpbmlzaGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAABjMjAyMy0wOS0yMVQyMDowNjowMC41ODY5NDRaIDAgW1dhcm5pbmddIFtNWS0wMTAwNjhdIFtTZXJ2ZXJdIENBIGNlcnRpZmljYXRlIGNhLnBlbSBpcyBzZWxmIHNpZ25lZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMy0wOS0yMVQyMDowNjowMC41ODcxOTRaIDAgW1N5c3RlbV0gW01ZLTAxMzYwMl0gW1NlcnZlcl0gQ2hhbm5lbCBteXNxbF9tYWluIGNvbmZpZ3VyZWQgdG8gc3VwcG9ydCBUTFMuIEVuY3J5cHRlZCBjb25uZWN0aW9ucyBhcmUgbm93IHN1cHBvcnRlZCBmb3IgdGhpcyBjaGFubmVsLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIzLTA5LTIxVDIwOjA2OjAwLjU5MjM2MlogMCBbV2FybmluZ10gW01ZLTAxMTgxMF0gW1NlcnZlcl0gSW5zZWN1cmUgY29uZmlndXJhdGlvbiBmb3IgLS1waWQtZmlsZTogTG9jYXRpb24gJy92YXIvcnVuL215c3FsZCcgaW4gdGhlIHBhdGggaXMgYWNjZXNzaWJsZSB0byBhbGwgT1MgdXNlcnMuIENvbnNpZGVyIGNob29zaW5nIGEgZGlmZmVyZW50IGRpcmVjdG9yeS4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMy0wOS0yMVQyMDowNjowMC42MjMxNjRaIDAgW1N5c3RlbV0gW01ZLTAxMDkzMV0gW1NlcnZlcl0gL3Vzci9zYmluL215c3FsZDogcmVhZHkgZm9yIGNvbm5lY3Rpb25zLiBWZXJzaW9uOiAnOC4wLjIzJyAgc29ja2V0OiAnL3Zhci9ydW4vbXlzcWxkL215c3FsZC5zb2NrJyAgcG9ydDogMzMwNiAgTXlTUUwgQ29tbXVuaXR5IFNlcnZlciAtIEdQTC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMy0wOS0yMVQyMDowNzoxNC40NzAzNTRaIDAgW1N5c3RlbV0gW01ZLTAxMzE3Ml0gW1NlcnZlcl0gUmVjZWl2ZWQgU0hVVERPV04gZnJvbSB1c2VyIDx2aWEgdXNlciBzaWduYWw+LiBTaHV0dGluZyBkb3duIG15c3FsZCAoVmVyc2lvbjogOC4wLjIzKS4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMy0wOS0yMVQyMDowNzoxNS4wNzk5OTRaIDAgW1N5c3RlbV0gW01ZLTAxMDkxMF0gW1NlcnZlcl0gL3Vzci9zYmluL215c3FsZDogU2h1dGRvd24gY29tcGxldGUgKG15c3FsZCA4LjAuMjMpICBNeVNRTCBDb21tdW5pdHkgU2VydmVyIC0gR1BMLgpteXNxbC1teXNxbAl8IAEAAAAAAABsMjAyMy0wOS0yMSAyMDowNzoyMyswMDowMCBbTm90ZV0gW0VudHJ5cG9pbnRdOiBFbnRyeXBvaW50IHNjcmlwdCBmb3IgTXlTUUwgU2VydmVyIDguMC4yMy0xZGViaWFuMTAgc3RhcnRlZC4KbXlzcWwtbXlzcWwJfCABAAAAAAAAUzIwMjMtMDktMjEgMjA6MDc6MjMrMDA6MDAgW05vdGVdIFtFbnRyeXBvaW50XTogU3dpdGNoaW5nIHRvIGRlZGljYXRlZCB1c2VyICdteXNxbCcKbXlzcWwtbXlzcWwJfCABAAAAAAAAbDIwMjMtMDktMjEgMjA6MDc6MjMrMDA6MDAgW05vdGVdIFtFbnRyeXBvaW50XTogRW50cnlwb2ludCBzY3JpcHQgZm9yIE15U1FMIFNlcnZlciA4LjAuMjMtMWRlYmlhbjEwIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAAHMyMDIzLTA5LTIxVDIwOjA3OjIzLjYwNTQ5MlogMCBbU3lzdGVtXSBbTVktMDEwMTE2XSBbU2VydmVyXSAvdXNyL3NiaW4vbXlzcWxkIChteXNxbGQgOC4wLjIzKSBzdGFydGluZyBhcyBwcm9jZXNzIDEKbXlzcWwtbXlzcWwJfCACAAAAAAAAXzIwMjMtMDktMjFUMjA6MDc6MjMuNjEyNzU2WiAxIFtTeXN0ZW1dIFtNWS0wMTM1NzZdIFtJbm5vREJdIElubm9EQiBpbml0aWFsaXphdGlvbiBoYXMgc3RhcnRlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAXTIwMjMtMDktMjFUMjA6MDc6MjQuMDg2MjcxWiAxIFtTeXN0ZW1dIFtNWS0wMTM1NzddIFtJbm5vREJdIElubm9EQiBpbml0aWFsaXphdGlvbiBoYXMgZW5kZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjMtMDktMjFUMjA6MDc6MjQuMjE0OTYwWiAwIFtTeXN0ZW1dIFtNWS0wMTEzMjNdIFtTZXJ2ZXJdIFggUGx1Z2luIHJlYWR5IGZvciBjb25uZWN0aW9ucy4gQmluZC1hZGRyZXNzOiAnOjonIHBvcnQ6IDMzMDYwLCBzb2NrZXQ6IC92YXIvcnVuL215c3FsZC9teXNxbHguc29jawpteXNxbC1teXNxbAl8IAIAAAAAAABjMjAyMy0wOS0yMVQyMDowNzoyNC4yOTk3OTlaIDAgW1dhcm5pbmddIFtNWS0wMTAwNjhdIFtTZXJ2ZXJdIENBIGNlcnRpZmljYXRlIGNhLnBlbSBpcyBzZWxmIHNpZ25lZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMy0wOS0yMVQyMDowNzoyNC4zMDAxNzdaIDAgW1N5c3RlbV0gW01ZLTAxMzYwMl0gW1NlcnZlcl0gQ2hhbm5lbCBteXNxbF9tYWluIGNvbmZpZ3VyZWQgdG8gc3VwcG9ydCBUTFMuIEVuY3J5cHRlZCBjb25uZWN0aW9ucyBhcmUgbm93IHN1cHBvcnRlZCBmb3IgdGhpcyBjaGFubmVsLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIzLTA5LTIxVDIwOjA3OjI0LjMxMDI1OVogMCBbV2FybmluZ10gW01ZLTAxMTgxMF0gW1NlcnZlcl0gSW5zZWN1cmUgY29uZmlndXJhdGlvbiBmb3IgLS1waWQtZmlsZTogTG9jYXRpb24gJy92YXIvcnVuL215c3FsZCcgaW4gdGhlIHBhdGggaXMgYWNjZXNzaWJsZSB0byBhbGwgT1MgdXNlcnMuIENvbnNpZGVyIGNob29zaW5nIGEgZGlmZmVyZW50IGRpcmVjdG9yeS4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMy0wOS0yMVQyMDowNzoyNC4zNDc2NTRaIDAgW1N5c3RlbV0gW01ZLTAxMDkzMV0gW1NlcnZlcl0gL3Vzci9zYmluL215c3FsZDogcmVhZHkgZm9yIGNvbm5lY3Rpb25zLiBWZXJzaW9uOiAnOC4wLjIzJyAgc29ja2V0OiAnL3Zhci9ydW4vbXlzcWxkL215c3FsZC5zb2NrJyAgcG9ydDogMzMwNiAgTXlTUUwgQ29tbXVuaXR5IFNlcnZlciAtIEdQTC4KbXlzcWwtbXlzcWwJfCABAAAAAAAAbDIwMjMtMDktMjEgMjA6MTM6NDYrMDA6MDAgW05vdGVdIFtFbnRyeXBvaW50XTogRW50cnlwb2ludCBzY3JpcHQgZm9yIE15U1FMIFNlcnZlciA4LjAuMjMtMWRlYmlhbjEwIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAQAAAAAAAFMyMDIzLTA5LTIxIDIwOjEzOjQ2KzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IFN3aXRjaGluZyB0byBkZWRpY2F0ZWQgdXNlciAnbXlzcWwnCm15c3FsLW15c3FsCXwgAQAAAAAAAGwyMDIzLTA5LTIxIDIwOjEzOjQ2KzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IEVudHJ5cG9pbnQgc2NyaXB0IGZvciBNeVNRTCBTZXJ2ZXIgOC4wLjIzLTFkZWJpYW4xMCBzdGFydGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAABzMjAyMy0wOS0yMVQyMDoxMzo0Ny4yOTM4NDhaIDAgW1N5c3RlbV0gW01ZLTAxMDExNl0gW1NlcnZlcl0gL3Vzci9zYmluL215c3FsZCAobXlzcWxkIDguMC4yMykgc3RhcnRpbmcgYXMgcHJvY2VzcyAxCm15c3FsLW15c3FsCXwgAgAAAAAAAF8yMDIzLTA5LTIxVDIwOjEzOjQ3LjMwMzM1OFogMSBbU3lzdGVtXSBbTVktMDEzNTc2XSBbSW5ub0RCXSBJbm5vREIgaW5pdGlhbGl6YXRpb24gaGFzIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAAF0yMDIzLTA5LTIxVDIwOjEzOjQ3LjYzNzQ5NFogMSBbU3lzdGVtXSBbTVktMDEzNTc3XSBbSW5ub0RCXSBJbm5vREIgaW5pdGlhbGl6YXRpb24gaGFzIGVuZGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIzLTA5LTIxVDIwOjEzOjQ3Ljc3ODEzNFogMCBbU3lzdGVtXSBbTVktMDExMzIzXSBbU2VydmVyXSBYIFBsdWdpbiByZWFkeSBmb3IgY29ubmVjdGlvbnMuIEJpbmQtYWRkcmVzczogJzo6JyBwb3J0OiAzMzA2MCwgc29ja2V0OiAvdmFyL3J1bi9teXNxbGQvbXlzcWx4LnNvY2sKbXlzcWwtbXlzcWwJfCACAAAAAAAAWjIwMjMtMDktMjFUMjA6MTM6NDcuODAwMDc1WiAwIFtTeXN0ZW1dIFtNWS0wMTAyMjldIFtTZXJ2ZXJdIFN0YXJ0aW5nIFhBIGNyYXNoIHJlY292ZXJ5Li4uCm15c3FsLW15c3FsCXwgAgAAAAAAAFgyMDIzLTA5LTIxVDIwOjEzOjQ3LjgxMDY5N1ogMCBbU3lzdGVtXSBbTVktMDEwMjMyXSBbU2VydmVyXSBYQSBjcmFzaCByZWNvdmVyeSBmaW5pc2hlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAYzIwMjMtMDktMjFUMjA6MTM6NDcuODQwMDQwWiAwIFtXYXJuaW5nXSBbTVktMDEwMDY4XSBbU2VydmVyXSBDQSBjZXJ0aWZpY2F0ZSBjYS5wZW0gaXMgc2VsZiBzaWduZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjMtMDktMjFUMjA6MTM6NDcuODQwMzMzWiAwIFtTeXN0ZW1dIFtNWS0wMTM2MDJdIFtTZXJ2ZXJdIENoYW5uZWwgbXlzcWxfbWFpbiBjb25maWd1cmVkIHRvIHN1cHBvcnQgVExTLiBFbmNyeXB0ZWQgY29ubmVjdGlvbnMgYXJlIG5vdyBzdXBwb3J0ZWQgZm9yIHRoaXMgY2hhbm5lbC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMy0wOS0yMVQyMDoxMzo0Ny44NDM4MDlaIDAgW1dhcm5pbmddIFtNWS0wMTE4MTBdIFtTZXJ2ZXJdIEluc2VjdXJlIGNvbmZpZ3VyYXRpb24gZm9yIC0tcGlkLWZpbGU6IExvY2F0aW9uICcvdmFyL3J1bi9teXNxbGQnIGluIHRoZSBwYXRoIGlzIGFjY2Vzc2libGUgdG8gYWxsIE9TIHVzZXJzLiBDb25zaWRlciBjaG9vc2luZyBhIGRpZmZlcmVudCBkaXJlY3RvcnkuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjMtMDktMjFUMjA6MTM6NDcuODY4MjA4WiAwIFtTeXN0ZW1dIFtNWS0wMTA5MzFdIFtTZXJ2ZXJdIC91c3Ivc2Jpbi9teXNxbGQ6IHJlYWR5IGZvciBjb25uZWN0aW9ucy4gVmVyc2lvbjogJzguMC4yMycgIHNvY2tldDogJy92YXIvcnVuL215c3FsZC9teXNxbGQuc29jaycgIHBvcnQ6IDMzMDYgIE15U1FMIENvbW11bml0eSBTZXJ2ZXIgLSBHUEwuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjMtMDktMjVUMjM6MjE6NDUuNTgzMTA4WiAwIFtTeXN0ZW1dIFtNWS0wMTMxNzJdIFtTZXJ2ZXJdIFJlY2VpdmVkIFNIVVRET1dOIGZyb20gdXNlciA8dmlhIHVzZXIgc2lnbmFsPi4gU2h1dHRpbmcgZG93biBteXNxbGQgKFZlcnNpb246IDguMC4yMykuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjMtMDktMjVUMjM6MjE6NDcuMTUxMzMxWiAwIFtTeXN0ZW1dIFtNWS0wMTA5MTBdIFtTZXJ2ZXJdIC91c3Ivc2Jpbi9teXNxbGQ6IFNodXRkb3duIGNvbXBsZXRlIChteXNxbGQgOC4wLjIzKSAgTXlTUUwgQ29tbXVuaXR5IFNlcnZlciAtIEdQTC4KbXlzcWwtbXlzcWwJfCABAAAAAAAAbDIwMjMtMDktMjUgMjM6MjI6MDMrMDA6MDAgW05vdGVdIFtFbnRyeXBvaW50XTogRW50cnlwb2ludCBzY3JpcHQgZm9yIE15U1FMIFNlcnZlciA4LjAuMjMtMWRlYmlhbjEwIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAQAAAAAAAFMyMDIzLTA5LTI1IDIzOjIyOjAzKzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IFN3aXRjaGluZyB0byBkZWRpY2F0ZWQgdXNlciAnbXlzcWwnCm15c3FsLW15c3FsCXwgAQAAAAAAAGwyMDIzLTA5LTI1IDIzOjIyOjAzKzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IEVudHJ5cG9pbnQgc2NyaXB0IGZvciBNeVNRTCBTZXJ2ZXIgOC4wLjIzLTFkZWJpYW4xMCBzdGFydGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAABzMjAyMy0wOS0yNVQyMzoyMjowNC4xMTE5MDBaIDAgW1N5c3RlbV0gW01ZLTAxMDExNl0gW1NlcnZlcl0gL3Vzci9zYmluL215c3FsZCAobXlzcWxkIDguMC4yMykgc3RhcnRpbmcgYXMgcHJvY2VzcyAxCm15c3FsLW15c3FsCXwgAgAAAAAAAF8yMDIzLTA5LTI1VDIzOjIyOjA0LjEyMTM5N1ogMSBbU3lzdGVtXSBbTVktMDEzNTc2XSBbSW5ub0RCXSBJbm5vREIgaW5pdGlhbGl6YXRpb24gaGFzIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAAF0yMDIzLTA5LTI1VDIzOjIyOjA0LjQzMzQzNVogMSBbU3lzdGVtXSBbTVktMDEzNTc3XSBbSW5ub0RCXSBJbm5vREIgaW5pdGlhbGl6YXRpb24gaGFzIGVuZGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIzLTA5LTI1VDIzOjIyOjA0LjYyMTgzMVogMCBbU3lzdGVtXSBbTVktMDExMzIzXSBbU2VydmVyXSBYIFBsdWdpbiByZWFkeSBmb3IgY29ubmVjdGlvbnMuIEJpbmQtYWRkcmVzczogJzo6JyBwb3J0OiAzMzA2MCwgc29ja2V0OiAvdmFyL3J1bi9teXNxbGQvbXlzcWx4LnNvY2sKbXlzcWwtbXlzcWwJfCACAAAAAAAAYzIwMjMtMDktMjVUMjM6MjI6MDQuNjczMTY5WiAwIFtXYXJuaW5nXSBbTVktMDEwMDY4XSBbU2VydmVyXSBDQSBjZXJ0aWZpY2F0ZSBjYS5wZW0gaXMgc2VsZiBzaWduZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjMtMDktMjVUMjM6MjI6MDQuNjczMzE3WiAwIFtTeXN0ZW1dIFtNWS0wMTM2MDJdIFtTZXJ2ZXJdIENoYW5uZWwgbXlzcWxfbWFpbiBjb25maWd1cmVkIHRvIHN1cHBvcnQgVExTLiBFbmNyeXB0ZWQgY29ubmVjdGlvbnMgYXJlIG5vdyBzdXBwb3J0ZWQgZm9yIHRoaXMgY2hhbm5lbC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMy0wOS0yNVQyMzoyMjowNC42NzY3MzlaIDAgW1dhcm5pbmddIFtNWS0wMTE4MTBdIFtTZXJ2ZXJdIEluc2VjdXJlIGNvbmZpZ3VyYXRpb24gZm9yIC0tcGlkLWZpbGU6IExvY2F0aW9uICcvdmFyL3J1bi9teXNxbGQnIGluIHRoZSBwYXRoIGlzIGFjY2Vzc2libGUgdG8gYWxsIE9TIHVzZXJzLiBDb25zaWRlciBjaG9vc2luZyBhIGRpZmZlcmVudCBkaXJlY3RvcnkuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjMtMDktMjVUMjM6MjI6MDQuNzA0MTYwWiAwIFtTeXN0ZW1dIFtNWS0wMTA5MzFdIFtTZXJ2ZXJdIC91c3Ivc2Jpbi9teXNxbGQ6IHJlYWR5IGZvciBjb25uZWN0aW9ucy4gVmVyc2lvbjogJzguMC4yMycgIHNvY2tldDogJy92YXIvcnVuL215c3FsZC9teXNxbGQuc29jaycgIHBvcnQ6IDMzMDYgIE15U1FMIENvbW11bml0eSBTZXJ2ZXIgLSBHUEwuCm15c3FsLW15c3FsCXwgAQAAAAAAAGwyMDIzLTA5LTI1IDIzOjI5OjM5KzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IEVudHJ5cG9pbnQgc2NyaXB0IGZvciBNeVNRTCBTZXJ2ZXIgOC4wLjIzLTFkZWJpYW4xMCBzdGFydGVkLgpteXNxbC1teXNxbAl8IAEAAAAAAABTMjAyMy0wOS0yNSAyMzoyOTo0MCswMDowMCBbTm90ZV0gW0VudHJ5cG9pbnRdOiBTd2l0Y2hpbmcgdG8gZGVkaWNhdGVkIHVzZXIgJ215c3FsJwpteXNxbC1teXNxbAl8IAEAAAAAAABsMjAyMy0wOS0yNSAyMzoyOTo0MCswMDowMCBbTm90ZV0gW0VudHJ5cG9pbnRdOiBFbnRyeXBvaW50IHNjcmlwdCBmb3IgTXlTUUwgU2VydmVyIDguMC4yMy0xZGViaWFuMTAgc3RhcnRlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAczIwMjMtMDktMjVUMjM6Mjk6NDAuNDY4MTI3WiAwIFtTeXN0ZW1dIFtNWS0wMTAxMTZdIFtTZXJ2ZXJdIC91c3Ivc2Jpbi9teXNxbGQgKG15c3FsZCA4LjAuMjMpIHN0YXJ0aW5nIGFzIHByb2Nlc3MgMQpteXNxbC1teXNxbAl8IAIAAAAAAABfMjAyMy0wOS0yNVQyMzoyOTo0MC40OTUyOTJaIDEgW1N5c3RlbV0gW01ZLTAxMzU3Nl0gW0lubm9EQl0gSW5ub0RCIGluaXRpYWxpemF0aW9uIGhhcyBzdGFydGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAABdMjAyMy0wOS0yNVQyMzoyOTo0MS4yNTUzMzFaIDEgW1N5c3RlbV0gW01ZLTAxMzU3N10gW0lubm9EQl0gSW5ub0RCIGluaXRpYWxpemF0aW9uIGhhcyBlbmRlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMy0wOS0yNVQyMzoyOTo0MS41NDUyMjRaIDAgW1N5c3RlbV0gW01ZLTAxMTMyM10gW1NlcnZlcl0gWCBQbHVnaW4gcmVhZHkgZm9yIGNvbm5lY3Rpb25zLiBCaW5kLWFkZHJlc3M6ICc6OicgcG9ydDogMzMwNjAsIHNvY2tldDogL3Zhci9ydW4vbXlzcWxkL215c3FseC5zb2NrCm15c3FsLW15c3FsCXwgAgAAAAAAAFoyMDIzLTA5LTI1VDIzOjI5OjQxLjU5MDM5NVogMCBbU3lzdGVtXSBbTVktMDEwMjI5XSBbU2VydmVyXSBTdGFydGluZyBYQSBjcmFzaCByZWNvdmVyeS4uLgpteXNxbC1teXNxbAl8IAIAAAAAAABYMjAyMy0wOS0yNVQyMzoyOTo0MS41OTkyNTVaIDAgW1N5c3RlbV0gW01ZLTAxMDIzMl0gW1NlcnZlcl0gWEEgY3Jhc2ggcmVjb3ZlcnkgZmluaXNoZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAAGMyMDIzLTA5LTI1VDIzOjI5OjQxLjY3OTgxOFogMCBbV2FybmluZ10gW01ZLTAxMDA2OF0gW1NlcnZlcl0gQ0EgY2VydGlmaWNhdGUgY2EucGVtIGlzIHNlbGYgc2lnbmVkLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIzLTA5LTI1VDIzOjI5OjQxLjY4MDIzNVogMCBbU3lzdGVtXSBbTVktMDEzNjAyXSBbU2VydmVyXSBDaGFubmVsIG15c3FsX21haW4gY29uZmlndXJlZCB0byBzdXBwb3J0IFRMUy4gRW5jcnlwdGVkIGNvbm5lY3Rpb25zIGFyZSBub3cgc3VwcG9ydGVkIGZvciB0aGlzIGNoYW5uZWwuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjMtMDktMjVUMjM6Mjk6NDEuNzEzMDg1WiAwIFtXYXJuaW5nXSBbTVktMDExODEwXSBbU2VydmVyXSBJbnNlY3VyZSBjb25maWd1cmF0aW9uIGZvciAtLXBpZC1maWxlOiBMb2NhdGlvbiAnL3Zhci9ydW4vbXlzcWxkJyBpbiB0aGUgcGF0aCBpcyBhY2Nlc3NpYmxlIHRvIGFsbCBPUyB1c2Vycy4gQ29uc2lkZXIgY2hvb3NpbmcgYSBkaWZmZXJlbnQgZGlyZWN0b3J5LgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIzLTA5LTI1VDIzOjI5OjQxLjc1MDkzNVogMCBbU3lzdGVtXSBbTVktMDEwOTMxXSBbU2VydmVyXSAvdXNyL3NiaW4vbXlzcWxkOiByZWFkeSBmb3IgY29ubmVjdGlvbnMuIFZlcnNpb246ICc4LjAuMjMnICBzb2NrZXQ6ICcvdmFyL3J1bi9teXNxbGQvbXlzcWxkLnNvY2snICBwb3J0OiAzMzA2ICBNeVNRTCBDb21tdW5pdHkgU2VydmVyIC0gR1BMLgpteXNxbC1teXNxbAl8IAEAAAAAAABsMjAyMy0xMC0xOSAyMDo1NjowNSswMDowMCBbTm90ZV0gW0VudHJ5cG9pbnRdOiBFbnRyeXBvaW50IHNjcmlwdCBmb3IgTXlTUUwgU2VydmVyIDguMC4yMy0xZGViaWFuMTAgc3RhcnRlZC4KbXlzcWwtbXlzcWwJfCABAAAAAAAAUzIwMjMtMTAtMTkgMjA6NTY6MjMrMDA6MDAgW05vdGVdIFtFbnRyeXBvaW50XTogU3dpdGNoaW5nIHRvIGRlZGljYXRlZCB1c2VyICdteXNxbCcKbXlzcWwtbXlzcWwJfCABAAAAAAAAbDIwMjMtMTAtMTkgMjA6NTY6MjMrMDA6MDAgW05vdGVdIFtFbnRyeXBvaW50XTogRW50cnlwb2ludCBzY3JpcHQgZm9yIE15U1FMIFNlcnZlciA4LjAuMjMtMWRlYmlhbjEwIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAAHMyMDIzLTEwLTE5VDIwOjU2OjIzLjg1NzA1NFogMCBbU3lzdGVtXSBbTVktMDEwMTE2XSBbU2VydmVyXSAvdXNyL3NiaW4vbXlzcWxkIChteXNxbGQgOC4wLjIzKSBzdGFydGluZyBhcyBwcm9jZXNzIDEKbXlzcWwtbXlzcWwJfCACAAAAAAAAXzIwMjMtMTAtMTlUMjA6NTY6MjQuNzk0OTIwWiAxIFtTeXN0ZW1dIFtNWS0wMTM1NzZdIFtJbm5vREJdIElubm9EQiBpbml0aWFsaXphdGlvbiBoYXMgc3RhcnRlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAXTIwMjMtMTAtMTlUMjA6NTY6MzEuNjQ0ODQ0WiAxIFtTeXN0ZW1dIFtNWS0wMTM1NzddIFtJbm5vREJdIElubm9EQiBpbml0aWFsaXphdGlvbiBoYXMgZW5kZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjMtMTAtMTlUMjA6NTY6MzYuNjA5Mjg3WiAwIFtTeXN0ZW1dIFtNWS0wMTEzMjNdIFtTZXJ2ZXJdIFggUGx1Z2luIHJlYWR5IGZvciBjb25uZWN0aW9ucy4gQmluZC1hZGRyZXNzOiAnOjonIHBvcnQ6IDMzMDYwLCBzb2NrZXQ6IC92YXIvcnVuL215c3FsZC9teXNxbHguc29jawpteXNxbC1teXNxbAl8IAIAAAAAAABaMjAyMy0xMC0xOVQyMDo1NjozOC41NjM2NzJaIDAgW1N5c3RlbV0gW01ZLTAxMDIyOV0gW1NlcnZlcl0gU3RhcnRpbmcgWEEgY3Jhc2ggcmVjb3ZlcnkuLi4KbXlzcWwtbXlzcWwJfCACAAAAAAAAWDIwMjMtMTAtMTlUMjA6NTY6MzguNTk4NjA3WiAwIFtTeXN0ZW1dIFtNWS0wMTAyMzJdIFtTZXJ2ZXJdIFhBIGNyYXNoIHJlY292ZXJ5IGZpbmlzaGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAABjMjAyMy0xMC0xOVQyMDo1Njo0MS4xNDA4NDhaIDAgW1dhcm5pbmddIFtNWS0wMTAwNjhdIFtTZXJ2ZXJdIENBIGNlcnRpZmljYXRlIGNhLnBlbSBpcyBzZWxmIHNpZ25lZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMy0xMC0xOVQyMDo1Njo0MS4xNDE0MDRaIDAgW1N5c3RlbV0gW01ZLTAxMzYwMl0gW1NlcnZlcl0gQ2hhbm5lbCBteXNxbF9tYWluIGNvbmZpZ3VyZWQgdG8gc3VwcG9ydCBUTFMuIEVuY3J5cHRlZCBjb25uZWN0aW9ucyBhcmUgbm93IHN1cHBvcnRlZCBmb3IgdGhpcyBjaGFubmVsLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIzLTEwLTE5VDIwOjU2OjQxLjE1NzkzMVogMCBbV2FybmluZ10gW01ZLTAxMTgxMF0gW1NlcnZlcl0gSW5zZWN1cmUgY29uZmlndXJhdGlvbiBmb3IgLS1waWQtZmlsZTogTG9jYXRpb24gJy92YXIvcnVuL215c3FsZCcgaW4gdGhlIHBhdGggaXMgYWNjZXNzaWJsZSB0byBhbGwgT1MgdXNlcnMuIENvbnNpZGVyIGNob29zaW5nIGEgZGlmZmVyZW50IGRpcmVjdG9yeS4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMy0xMC0xOVQyMDo1Njo0NC42ODMwNzZaIDAgW1N5c3RlbV0gW01ZLTAxMDkzMV0gW1NlcnZlcl0gL3Vzci9zYmluL215c3FsZDogcmVhZHkgZm9yIGNvbm5lY3Rpb25zLiBWZXJzaW9uOiAnOC4wLjIzJyAgc29ja2V0OiAnL3Zhci9ydW4vbXlzcWxkL215c3FsZC5zb2NrJyAgcG9ydDogMzMwNiAgTXlTUUwgQ29tbXVuaXR5IFNlcnZlciAtIEdQTC4K"
}
App Components
GET {{LEM_URL}}/api/v1/marketplace/app/components?projectId={{project_id}}&deviceId={{device_id}}&applicationId={{device_app_id}}
App Components
Returns the individual container components making up a catalog app -- container ID and name pairs.
Endpoint
GET {{LEM_URL}}/api/v1/marketplace/app/components?projectId={{project_id}}&deviceId={{device_id}}&applicationId={{device_app_id}}
Authentication
HTTP Basic Auth. Username is your API token, password is empty. Tokens are managed under System > Access Control > Tokens.
Errors
| HTTP status | When it happens |
|---|---|
400 Bad Request |
Missing or malformed query/body parameter. |
401 Unauthorized |
Missing or invalid credentials. |
403 Forbidden |
Token lacks permission for this operation. |
404 Not Found |
Target entity does not exist. |
5xx |
Service is unreachable, restarting, or internally errored. Inspect device logs under System > Support. |
TLS note: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.
Response
Status: 200 OK
[
{
"id": "7ef631d041c5d4f8d412255edd6bf914f6c13694a8e24daadd4877259501cc19",
"name": "mysql-mysql"
}
]
Delete Application
DELETE {{LEM_URL}}/api/v1/marketplace/app?projectId={{project_id}}&deviceId={{device_id}}&applicationId={{device_app_id}}
Delete Application
Uninstalls a catalog app from the device. Containers are removed; named volumes are preserved.
Endpoint
DELETE {{LEM_URL}}/api/v1/marketplace/app?projectId={{project_id}}&deviceId={{device_id}}&applicationId={{device_app_id}}
Authentication
HTTP Basic Auth. Username is your API token, password is empty. Tokens are managed under System > Access Control > Tokens.
Errors
| HTTP status | When it happens |
|---|---|
400 Bad Request |
Missing or malformed query/body parameter. |
401 Unauthorized |
Missing or invalid credentials. |
403 Forbidden |
Token lacks permission for this operation. |
404 Not Found |
Target entity does not exist. |
5xx |
Service is unreachable, restarting, or internally errored. Inspect device logs under System > Support. |
TLS note: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.
Password Policy By DeviceID
GET {{LEM_URL}}/api/v1/password-policy?deviceId={{device_id}}
Password Policy By DeviceID
Returns the password policy currently bound to one device. Same shape as Companies > Get Password Policy.
Endpoint
GET {{LEM_URL}}/api/v1/password-policy?deviceId={{device_id}}
Authentication
HTTP Basic Auth. Username is your API token, password is empty. Tokens are managed under System > Access Control > Tokens.
Errors
| HTTP status | When it happens |
|---|---|
400 Bad Request |
Missing or malformed query/body parameter. |
401 Unauthorized |
Missing or invalid credentials. |
403 Forbidden |
Token lacks permission for this operation. |
404 Not Found |
Target entity does not exist. |
5xx |
Service is unreachable, restarting, or internally errored. Inspect device logs under System > Support. |
TLS note: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.
Response
Status: 200 OK
[
{
"id": "default_password_policy",
"name": "Default password policy",
"description": "Default password policy",
"updated": 1689673006000,
"defaultPolicy": true,
"minPasswordLen": 8,
"maxPasswordLen": 256,
"autoGeneratedPasswordLen": 12,
"minUppercaseChars": 1,
"minLowercaseChars": 1,
"minDigits": 1,
"minSpecialChars": 1,
"specialChars": "~!@#$%^&*()_-{}[]|;:,.<>?/"
}
]
License Type
GET {{LEM_URL}}/api/v1/device-licenses/type?projectId={{project_id}}&deviceId={{device_id}}
License Type
Returns the licensing model used on this device: NODE_LOCKED (per-device) or other (license-server-based, etc.).
Endpoint
GET {{LEM_URL}}/api/v1/device-licenses/type?projectId={{project_id}}&deviceId={{device_id}}
Authentication
HTTP Basic Auth. Username is your API token, password is empty. Tokens are managed under System > Access Control > Tokens.
Response
{ "licenseType": "NODE_LOCKED" }
Errors
| HTTP status | When it happens |
|---|---|
400 Bad Request |
Missing or malformed query/body parameter. |
401 Unauthorized |
Missing or invalid credentials. |
403 Forbidden |
Token lacks permission for this operation. |
404 Not Found |
Target entity does not exist. |
5xx |
Service is unreachable, restarting, or internally errored. Inspect device logs under System > Support. |
TLS note: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.
Response
Status: 200 OK
{
"licenseType": "NODE_LOCKED"
}
List Device Licenses
GET {{LEM_URL}}/api/v1/device-licenses?projectId={{project_id}}&deviceId={{device_id}}
List Device Licenses
Returns the licenses applied to one device, with key (masked), expiry, status, and isCore / isTrial flags.
Endpoint
GET {{LEM_URL}}/api/v1/device-licenses?projectId={{project_id}}&deviceId={{device_id}}
Authentication
HTTP Basic Auth. Username is your API token, password is empty. Tokens are managed under System > Access Control > Tokens.
Errors
| HTTP status | When it happens |
|---|---|
400 Bad Request |
Missing or malformed query/body parameter. |
401 Unauthorized |
Missing or invalid credentials. |
403 Forbidden |
Token lacks permission for this operation. |
404 Not Found |
Target entity does not exist. |
5xx |
Service is unreachable, restarting, or internally errored. Inspect device logs under System > Support. |
TLS note: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.
Response
Status: 200 OK
[
{
"name": "litmusedge-scale-nl",
"desc": null,
"expiryDate": "2024-04-25T00:00:00Z",
"expiryDays": 190,
"features": null,
"key": {
"value": "0000-1111-2222-3333"
},
"status": "OK",
"isCore": true,
"isTrial": false
}
]
Add License (Online)
PUT {{LEM_URL}}/api/v1/device-licenses?projectId={{project_id}}&deviceId={{device_id}}
Add License (Online)
Activates an online license key for the device. The used flag should be set to true when reserving against the pool.
Endpoint
PUT {{LEM_URL}}/api/v1/device-licenses?projectId={{project_id}}&deviceId={{device_id}}
Authentication
HTTP Basic Auth. Username is your API token, password is empty. Tokens are managed under System > Access Control > Tokens.
Request body
{
"value": "4E216-7C5C4-34CBA-AED7A-B5B85",
"reservedUntil": 1651122127000,
"used": true
}
Errors
| HTTP status | When it happens |
|---|---|
400 Bad Request |
Missing or malformed query/body parameter. |
401 Unauthorized |
Missing or invalid credentials. |
403 Forbidden |
Token lacks permission for this operation. |
404 Not Found |
Target entity does not exist. |
5xx |
Service is unreachable, restarting, or internally errored. Inspect device logs under System > Support. |
TLS note: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.
Request Body
{
"value": "4E216-7C5C4-34CBA-AED7A-B5B85",
"reservedUntil": 1651122127000,
"used": true
}
Offline Activation Info
GET {{LEM_URL}}/api/v1/device-licenses/offline?projectId={{project_id}}&deviceId={{device_id}}
Offline Activation Info
Returns the activation URL and host ID needed to generate an offline license against the device. Use this when the device cannot reach the LE licensing portal directly.
Endpoint
GET {{LEM_URL}}/api/v1/device-licenses/offline?projectId={{project_id}}&deviceId={{device_id}}
Authentication
HTTP Basic Auth. Username is your API token, password is empty. Tokens are managed under System > Access Control > Tokens.
Response
{
"activationURL": "https://litmus.activate.id",
"hostID": "94c6911b9c77"
}
Errors
| HTTP status | When it happens |
|---|---|
400 Bad Request |
Missing or malformed query/body parameter. |
401 Unauthorized |
Missing or invalid credentials. |
403 Forbidden |
Token lacks permission for this operation. |
404 Not Found |
Target entity does not exist. |
5xx |
Service is unreachable, restarting, or internally errored. Inspect device logs under System > Support. |
TLS note: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.
Response
Status: 200 OK
{
"activationURL": "https://litmus.activate.id",
"hostID": "94c6911b9c77"
}
License Entitlements
GET {{LEM_URL}}/api/v1/device-licenses/entitlement/features?projectId={{project_id}}&deviceId={{device_id}}
License Entitlements
Returns the feature entitlements the device's licenses currently unlock (marketplace, opcua, updates, tags, backup, dt, core, ...).
Endpoint
GET {{LEM_URL}}/api/v1/device-licenses/entitlement/features?projectId={{project_id}}&deviceId={{device_id}}
Authentication
HTTP Basic Auth. Username is your API token, password is empty. Tokens are managed under System > Access Control > Tokens.
Errors
| HTTP status | When it happens |
|---|---|
400 Bad Request |
Missing or malformed query/body parameter. |
401 Unauthorized |
Missing or invalid credentials. |
403 Forbidden |
Token lacks permission for this operation. |
404 Not Found |
Target entity does not exist. |
5xx |
Service is unreachable, restarting, or internally errored. Inspect device logs under System > Support. |
TLS note: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.
Response
Status: 200 OK
[
{
"name": "marketplace",
"desc": "marketplace",
"enabled": true
},
{
"name": "opcua",
"desc": "opcua",
"enabled": true
},
{
"name": "updates",
"desc": "updates",
"enabled": true
},
{
"name": "tags",
"desc": "tags",
"enabled": true
},
{
"name": "backup",
"desc": "backup",
"enabled": true
},
{
"name": "dt",
"desc": "dt",
"enabled": true
},
{
"name": "core",
"desc": "core",
"enabled": true
},
{
"name": "analytics",
"desc": "analytics",
"enabled": true
},
{
"name": "devices",
"desc": "devices",
"enabled": true
}
]
Performance Entitlements
GET {{LEM_URL}}/api/v1/device-licenses/entitlement/performance?projectId={{project_id}}&deviceId={{device_id}}
Performance Entitlements
Returns the numeric entitlements granted by the device's licenses: max number of devices, max number of tags, etc.
Endpoint
GET {{LEM_URL}}/api/v1/device-licenses/entitlement/performance?projectId={{project_id}}&deviceId={{device_id}}
Authentication
HTTP Basic Auth. Username is your API token, password is empty. Tokens are managed under System > Access Control > Tokens.
Errors
| HTTP status | When it happens |
|---|---|
400 Bad Request |
Missing or malformed query/body parameter. |
401 Unauthorized |
Missing or invalid credentials. |
403 Forbidden |
Token lacks permission for this operation. |
404 Not Found |
Target entity does not exist. |
5xx |
Service is unreachable, restarting, or internally errored. Inspect device logs under System > Support. |
TLS note: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.
Response
Status: 200 OK
[
{
"name": "devices",
"desc": "Max number of devices",
"count": 0
},
{
"name": "tags",
"desc": "Max number of tags",
"count": 0
}
]
List Backups
GET {{LEM_URL}}/api/v1/backup/list?projectId={{project_id}}&deviceId={{device_id}}&limit=10
List Backups
Returns the paginated list of backups stored for the device. Each entry has backupType (MASTER, ...), timestamp, objectSize, and objectName (S3 object path).
Endpoint
GET {{LEM_URL}}/api/v1/backup/list?projectId={{project_id}}&deviceId={{device_id}}&limit=10
Authentication
HTTP Basic Auth. Username is your API token, password is empty. Tokens are managed under System > Access Control > Tokens.
Errors
| HTTP status | When it happens |
|---|---|
400 Bad Request |
Missing or malformed query/body parameter. |
401 Unauthorized |
Missing or invalid credentials. |
403 Forbidden |
Token lacks permission for this operation. |
404 Not Found |
Target entity does not exist. |
5xx |
Service is unreachable, restarting, or internally errored. Inspect device logs under System > Support. |
TLS note: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.
Response
Status: 200 OK
{
"pageNum": 0,
"pagesCount": 1,
"size": 3,
"totalSize": 3,
"elements": [
{
"projectId": "462j1mq70mph31wa100t1yuxa",
"deviceId": "1a5wiavluwxuhwai5leb1v0hc",
"backupType": "MASTER",
"timestamp": 1697498885385,
"objectSize": 1704104,
"objectName": "462j1mq70mph31wa100t1yuxa/1a5wiavluwxuhwai5leb1v0hc/MASTER/1697498885385.dat"
},
{
"projectId": "462j1mq70mph31wa100t1yuxa",
"deviceId": "1a5wiavluwxuhwai5leb1v0hc",
"backupType": "MASTER",
"timestamp": 1697153285369,
"objectSize": 1705096,
"objectName": "462j1mq70mph31wa100t1yuxa/1a5wiavluwxuhwai5leb1v0hc/MASTER/1697153285369.dat"
},
{
"projectId": "462j1mq70mph31wa100t1yuxa",
"deviceId": "1a5wiavluwxuhwai5leb1v0hc",
"backupType": "MASTER",
"timestamp": 1697066885382,
"objectSize": 1704044,
"objectName": "462j1mq70mph31wa100t1yuxa/1a5wiavluwxuhwai5leb1v0hc/MASTER/1697066885382.dat"
}
]
}
Make Device Backup
POST {{LEM_URL}}/api/v1/backup/init-backup?projectId={{project_id}}&deviceId={{device_id}}
Make Device Backup
Triggers a new backup on the target device. Asynchronous -- the response confirms acceptance; the new backup appears in List Backups once complete.
Endpoint
POST {{LEM_URL}}/api/v1/backup/init-backup?projectId={{project_id}}&deviceId={{device_id}}
Authentication
HTTP Basic Auth. Username is your API token, password is empty. Tokens are managed under System > Access Control > Tokens.
Errors
| HTTP status | When it happens |
|---|---|
400 Bad Request |
Missing or malformed query/body parameter. |
401 Unauthorized |
Missing or invalid credentials. |
403 Forbidden |
Token lacks permission for this operation. |
404 Not Found |
Target entity does not exist. |
5xx |
Service is unreachable, restarting, or internally errored. Inspect device logs under System > Support. |
TLS note: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.
Response
Status: 200 OK
{
"code": "200",
"content": null
}
Delete Backup
DELETE {{LEM_URL}}/api/v1/backup/list?projectId={{project_id}}&deviceId={{device_id}}&backupType=MASTER×tamp=1697755168885
Delete Backup
Removes a backup by (backupType, timestamp). The response is the updated List Backups page.
Endpoint
DELETE {{LEM_URL}}/api/v1/backup/list?projectId={{project_id}}&deviceId={{device_id}}&backupType=MASTER×tamp=1697755168885
Authentication
HTTP Basic Auth. Username is your API token, password is empty. Tokens are managed under System > Access Control > Tokens.
Errors
| HTTP status | When it happens |
|---|---|
400 Bad Request |
Missing or malformed query/body parameter. |
401 Unauthorized |
Missing or invalid credentials. |
403 Forbidden |
Token lacks permission for this operation. |
404 Not Found |
Target entity does not exist. |
5xx |
Service is unreachable, restarting, or internally errored. Inspect device logs under System > Support. |
TLS note: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.
Response
Status: 200 OK
{
"pageNum": 0,
"pagesCount": 1,
"size": 3,
"totalSize": 3,
"elements": [
{
"projectId": "462j1mq70mph31wa100t1yuxa",
"deviceId": "1a5wiavluwxuhwai5leb1v0hc",
"backupType": "MASTER",
"timestamp": 1697755168885,
"objectSize": 1704184,
"objectName": "462j1mq70mph31wa100t1yuxa/1a5wiavluwxuhwai5leb1v0hc/MASTER/1697755168885.dat"
},
{
"projectId": "462j1mq70mph31wa100t1yuxa",
"deviceId": "1a5wiavluwxuhwai5leb1v0hc",
"backupType": "MASTER",
"timestamp": 1697498885385,
"objectSize": 1704104,
"objectName": "462j1mq70mph31wa100t1yuxa/1a5wiavluwxuhwai5leb1v0hc/MASTER/1697498885385.dat"
},
{
"projectId": "462j1mq70mph31wa100t1yuxa",
"deviceId": "1a5wiavluwxuhwai5leb1v0hc",
"backupType": "MASTER",
"timestamp": 1697153285369,
"objectSize": 1705096,
"objectName": "462j1mq70mph31wa100t1yuxa/1a5wiavluwxuhwai5leb1v0hc/MASTER/1697153285369.dat"
}
]
}
Get Pre-signed S3 URL to Backup
POST {{LEM_URL}}/api/v1/backup/get?projectId={{project_id}}&deviceId={{device_id}}&backupType=MASTER×tamp=1697498885385
Get Pre-signed S3 URL to Backup
Returns a pre-signed S3 URL that can be used to download the backup binary directly from LEM's object storage. URL has limited TTL (7 days by default).
Endpoint
POST {{LEM_URL}}/api/v1/backup/get?projectId={{project_id}}&deviceId={{device_id}}&backupType=MASTER×tamp=1697498885385
Authentication
HTTP Basic Auth. Username is your API token, password is empty. Tokens are managed under System > Access Control > Tokens.
Response
201 Created -- text/plain URL.
Errors
| HTTP status | When it happens |
|---|---|
400 Bad Request |
Missing or malformed query/body parameter. |
401 Unauthorized |
Missing or invalid credentials. |
403 Forbidden |
Token lacks permission for this operation. |
404 Not Found |
Target entity does not exist. |
5xx |
Service is unreachable, restarting, or internally errored. Inspect device logs under System > Support. |
TLS note: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.
Response
Status: 201 Created
https://10.17.3.103/loop-cloud.backups/462j1mq70mph31wa100t1yuxa/1a5wiavluwxuhwai5leb1v0hc/MASTER/1697498885385.dat?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=ZBE3Hey7R88GtiYw%2F20231019%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20231019T224519Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=ea8fac0742797adf8e381f306629ce98ddec3423386d66d66bfd6598233bd4e5
Save Backup to Pre-signed S3 URL
POST {{LEM_URL}}/api/v1/backup/put?projectId={{project_id}}&deviceId={{device_id}}&backupType=MASTER×tamp=1697498885385
Save Backup to Pre-signed S3 URL
Returns a pre-signed S3 PUT URL for uploading a backup binary into LEM's object storage. The companion of Get Pre-signed S3 URL to Backup.
Endpoint
POST {{LEM_URL}}/api/v1/backup/put?projectId={{project_id}}&deviceId={{device_id}}&backupType=MASTER×tamp=1697498885385
Authentication
HTTP Basic Auth. Username is your API token, password is empty. Tokens are managed under System > Access Control > Tokens.
Errors
| HTTP status | When it happens |
|---|---|
400 Bad Request |
Missing or malformed query/body parameter. |
401 Unauthorized |
Missing or invalid credentials. |
403 Forbidden |
Token lacks permission for this operation. |
404 Not Found |
Target entity does not exist. |
5xx |
Service is unreachable, restarting, or internally errored. Inspect device logs under System > Support. |
TLS note: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.
Response
Status: 201 Created
https://10.17.3.103/loop-cloud.backups/462j1mq70mph31wa100t1yuxa/1a5wiavluwxuhwai5leb1v0hc/MASTER/1697498885385.dat?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=ZBE3Hey7R88GtiYw%2F20231019%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20231019T224519Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=ea8fac0742797adf8e381f306629ce98ddec3423386d66d66bfd6598233bd4e5
Restore from Backup
POST {{LEM_URL}}/api/v1/backup/init-restore?projectId={{project_id}}&deviceId={{device_id}}
Restore from Backup
Restores the device from a backup identified by its S3 object path. Pass the path as a plain string in the request body.
Endpoint
POST {{LEM_URL}}/api/v1/backup/init-restore?projectId={{project_id}}&deviceId={{device_id}}
Authentication
HTTP Basic Auth. Username is your API token, password is empty. Tokens are managed under System > Access Control > Tokens.
Request body
462j1mq70mph31wa100t1yuxa/1a5wiavluwxuhwai5leb1v0hc/MASTER/1697755391627.dat
Errors
| HTTP status | When it happens |
|---|---|
400 Bad Request |
Missing or malformed query/body parameter. |
401 Unauthorized |
Missing or invalid credentials. |
403 Forbidden |
Token lacks permission for this operation. |
404 Not Found |
Target entity does not exist. |
5xx |
Service is unreachable, restarting, or internally errored. Inspect device logs under System > Support. |
TLS note: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.
Request Body
462j1mq70mph31wa100t1yuxa/1a5wiavluwxuhwai5leb1v0hc/MASTER/1697755391627.dat
Forwarding State
GET {{LEM_URL}}/api/v1/loopedge-events/forwarding/?projectId={{project_id}}&deviceId={{device_id}}
Forwarding State
Returns whether LE event forwarding from this device to LEM is enabled.
Endpoint
GET {{LEM_URL}}/api/v1/loopedge-events/forwarding/?projectId={{project_id}}&deviceId={{device_id}}
Authentication
HTTP Basic Auth. Username is your API token, password is empty. Tokens are managed under System > Access Control > Tokens.
Response
{ "enabled": true }
Errors
| HTTP status | When it happens |
|---|---|
400 Bad Request |
Missing or malformed query/body parameter. |
401 Unauthorized |
Missing or invalid credentials. |
403 Forbidden |
Token lacks permission for this operation. |
404 Not Found |
Target entity does not exist. |
5xx |
Service is unreachable, restarting, or internally errored. Inspect device logs under System > Support. |
TLS note: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.
Response
Status: 200 OK
{
"enabled": true
}
Enable Forwarding
GET {{LEM_URL}}/api/v1/loopedge-events/forwarding/?projectId={{project_id}}&deviceId={{device_id}}&enable=true
Enable Forwarding
Toggles LE event forwarding for the device. Despite the name, the enable query parameter accepts both true and false (the same URL with enable=false disables).
Endpoint
GET {{LEM_URL}}/api/v1/loopedge-events/forwarding/?projectId={{project_id}}&deviceId={{device_id}}&enable=true
Authentication
HTTP Basic Auth. Username is your API token, password is empty. Tokens are managed under System > Access Control > Tokens.
Errors
| HTTP status | When it happens |
|---|---|
400 Bad Request |
Missing or malformed query/body parameter. |
401 Unauthorized |
Missing or invalid credentials. |
403 Forbidden |
Token lacks permission for this operation. |
404 Not Found |
Target entity does not exist. |
5xx |
Service is unreachable, restarting, or internally errored. Inspect device logs under System > Support. |
TLS note: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.
Response
Status: 200 OK
{
"enabled": true
}
Events Registry
GET {{LEM_URL}}/api/v1/loopedge-events/registry/?projectId={{project_id}}&deviceId={{device_id}}
Events Registry
Returns the event registry for this device -- the catalog of LE events the device knows how to emit, grouped by component (cc, dh, dm, ...). Use to render an event-type picker when configuring triggers.
Endpoint
GET {{LEM_URL}}/api/v1/loopedge-events/registry/?projectId={{project_id}}&deviceId={{device_id}}
Authentication
HTTP Basic Auth. Username is your API token, password is empty. Tokens are managed under System > Access Control > Tokens.
Errors
| HTTP status | When it happens |
|---|---|
400 Bad Request |
Missing or malformed query/body parameter. |
401 Unauthorized |
Missing or invalid credentials. |
403 Forbidden |
Token lacks permission for this operation. |
404 Not Found |
Target entity does not exist. |
5xx |
Service is unreachable, restarting, or internally errored. Inspect device logs under System > Support. |
TLS note: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.
Response
Status: 200 OK
{
"cc": {
"id": "cc",
"name": "Integrations",
"config": "events-cc.yaml",
"events": {
"tags.removed": {
"id": "tags.removed",
"msg": "Tags removed.",
"attrs": {
"connector": {
"name": "connector",
"type": "string",
"required": true
},
"name": {
"name": "name",
"type": "string",
"required": true
},
"user": {
"name": "user",
"type": "string",
"required": false
},
"tags": {
"name": "tags",
"type": "ArrayOf(string)",
"required": true
}
}
},
"conn.created": {
"id": "conn.created",
"msg": "Connector created.",
"attrs": {
"connector": {
"name": "connector",
"type": "string",
"required": true
},
"name": {
"name": "name",
"type": "string",
"required": true
},
"user": {
"name": "user",
"type": "string",
"required": false
}
}
},
"conn.removed": {
"id": "conn.removed",
"msg": "Connector removed.",
"attrs": {
"connector": {
"name": "connector",
"type": "string",
"required": true
},
"name": {
"name": "name",
"type": "string",
"required": true
},
"user": {
"name": "user",
"type": "string",
"required": false
}
}
},
"tags.disabled": {
"id": "tags.disabled",
"msg": "Tags disabled.",
"attrs": {
"connector": {
"name": "connector",
"type": "string",
"required": true
},
"name": {
"name": "name",
"type": "string",
"required": true
},
"user": {
"name": "user",
"type": "string",
"required": false
},
"tags": {
"name": "tags",
"type": "ArrayOf(string)",
"required": true
}
}
},
"conn.disconnected": {
"id": "conn.disconnected",
"msg": "Disconnected.",
"attrs": {
"connector": {
"name": "connector",
"type": "string",
"required": true
},
"name": {
"name": "name",
"type": "string",
"required": true
}
}
},
"tags.added": {
"id": "tags.added",
"msg": "Tags added.",
"attrs": {
"connector": {
"name": "connector",
"type": "string",
"required": true
},
"name": {
"name": "name",
"type": "string",
"required": true
},
"user": {
"name": "user",
"type": "string",
"required": false
},
"tags": {
"name": "tags",
"type": "ArrayOf(string)",
"required": true
}
}
},
"conn.enabled": {
"id": "conn.enabled",
"msg": "Connector enabled.",
"attrs": {
"connector": {
"name": "connector",
"type": "string",
"required": true
},
"name": {
"name": "name",
"type": "string",
"required": true
},
"user": {
"name": "user",
"type": "string",
"required": false
}
}
},
"conn.create.failed": {
"id": "conn.create.failed",
"msg": "Failed to create a connector.",
"attrs": {
"reason": {
"name": "reason",
"type": "string",
"required": true
},
"connector": {
"name": "connector",
"type": "string",
"required": true
},
"name": {
"name": "name",
"type": "string",
"required": true
},
"user": {
"name": "user",
"type": "string",
"required": false
}
}
},
"conn.disabled": {
"id": "conn.disabled",
"msg": "Connector disabled.",
"attrs": {
"connector": {
"name": "connector",
"type": "string",
"required": true
},
"name": {
"name": "name",
"type": "string",
"required": true
},
"user": {
"name": "user",
"type": "string",
"required": false
}
}
},
"conn.remove.failed": {
"id": "conn.remove.failed",
"msg": "Failed to remove the connector.",
"attrs": {
"reason": {
"name": "reason",
"type": "string",
"required": true
},
"connector": {
"name": "connector",
"type": "string",
"required": true
},
"name": {
"name": "name",
"type": "string",
"required": true
},
"user": {
"name": "user",
"type": "string",
"required": false
}
}
},
"tags.enabled": {
"id": "tags.enabled",
"msg": "Tags enabled.",
"attrs": {
"connector": {
"name": "connector",
"type": "string",
"required": true
},
"name": {
"name": "name",
"type": "string",
"required": true
},
"user": {
"name": "user",
"type": "string",
"required": false
},
"tags": {
"name": "tags",
"type": "ArrayOf(string)",
"required": true
}
}
},
"conn.connected": {
"id": "conn.connected",
"msg": "Connected.",
"attrs": {
"connector": {
"name": "connector",
"type": "string",
"required": true
},
"name": {
"name": "name",
"type": "string",
"required": true
}
}
}
}
},
"mp": {
"id": "mp",
"name": "Marketplace",
"config": "events-mp.yaml",
"events": {
"app.download.failed": {
"id": "app.download.failed",
"msg": "Application download failed.",
"attrs": {
"reason": {
"name": "reason",
"type": "string",
"required": true
},
"name": {
"name": "name",
"type": "string",
"required": true
},
"user": {
"name": "user",
"type": "string",
"required": false
}
}
},
"app.created": {
"id": "app.created",
"msg": "Application created.",
"attrs": {
"name": {
"name": "name",
"type": "string",
"required": true
},
"user": {
"name": "user",
"type": "string",
"required": false
}
}
},
"app.deleted": {
"id": "app.deleted",
"msg": "Application stopped.",
"attrs": {
"name": {
"name": "name",
"type": "string",
"required": true
},
"user": {
"name": "user",
"type": "string",
"required": false
}
}
},
"app.exited": {
"id": "app.exited",
"msg": "Application exited.",
"attrs": {
"reason": {
"name": "reason",
"type": "string",
"required": false
},
"name": {
"name": "name",
"type": "string",
"required": true
}
}
},
"app.download.completed": {
"id": "app.download.completed",
"msg": "Application download completed.",
"attrs": {
"name": {
"name": "name",
"type": "string",
"required": true
},
"user": {
"name": "user",
"type": "string",
"required": false
}
}
},
"app.failed": {
"id": "app.failed",
"msg": "Application restarted.",
"attrs": {
"reason": {
"name": "reason",
"type": "string",
"required": true
},
"name": {
"name": "name",
"type": "string",
"required": true
}
}
},
"app.create.failed": {
"id": "app.create.failed",
"msg": "Failed to create an application.",
"attrs": {
"reason": {
"name": "reason",
"type": "string",
"required": true
},
"name": {
"name": "name",
"type": "string",
"required": true
},
"user": {
"name": "user",
"type": "string",
"required": false
}
}
},
"app.restarted": {
"id": "app.restarted",
"msg": "Application restarted.",
"attrs": {
"reason": {
"name": "reason",
"type": "string",
"required": true
},
"name": {
"name": "name",
"type": "string",
"required": true
},
"user": {
"name": "user",
"type": "string",
"required": false
}
}
},
"app.download.started": {
"id": "app.download.started",
"msg": "Application download started.",
"attrs": {
"name": {
"name": "name",
"type": "string",
"required": true
},
"user": {
"name": "user",
"type": "string",
"required": false
}
}
},
"app.delete.failed": {
"id": "app.delete.failed",
"msg": "Failed to delete the application.",
"attrs": {
"reason": {
"name": "reason",
"type": "string",
"required": true
},
"name": {
"name": "name",
"type": "string",
"required": true
},
"user": {
"name": "user",
"type": "string",
"required": false
}
}
},
"app.started": {
"id": "app.started",
"msg": "Application started.",
"attrs": {
"name": {
"name": "name",
"type": "string",
"required": true
},
"user": {
"name": "user",
"type": "string",
"required": false
}
}
},
"app.stopped": {
"id": "app.stopped",
"msg": "Application stopped.",
"attrs": {
"name": {
"name": "name",
"type": "string",
"required": true
},
"user": {
"name": "user",
"type": "string",
"required": false
}
}
}
}
},
"dh": {
"id": "dh",
"name": "Device Hub",
"config": "events-dh.yaml",
"events": {
"device.disabled": {
"id": "device.disabled",
"msg": "Device disabled.",
"attrs": {
"driver": {
"name": "driver",
"type": "string",
"required": true
},
"name": {
"name": "name",
"type": "string",
"required": true
},
"user": {
"name": "user",
"type": "string",
"required": false
}
}
},
"device.remove.failed": {
"id": "device.remove.failed",
"msg": "Failed to remove device.",
"attrs": {
"reason": {
"name": "reason",
"type": "string",
"required": true
},
"driver": {
"name": "driver",
"type": "string",
"required": true
},
"name": {
"name": "name",
"type": "string",
"required": true
},
"user": {
"name": "user",
"type": "string",
"required": false
}
}
},
"tags.remove.failed": {
"id": "tags.remove.failed",
"msg": "Failed to remove tags.",
"attrs": {
"reason": {
"name": "reason",
"type": "string",
"required": true
},
"driver": {
"name": "driver",
"type": "string",
"required": true
},
"name": {
"name": "name",
"type": "string",
"required": true
},
"user": {
"name": "user",
"type": "string",
"required": false
},
"tags": {
"name": "tags",
"type": "ArrayOf(string)",
"required": true
}
}
},
"device.updated": {
"id": "device.updated",
"msg": "Device updated.",
"attrs": {
"driver": {
"name": "driver",
"type": "string",
"required": true
},
"name": {
"name": "name",
"type": "string",
"required": true
},
"user": {
"name": "user",
"type": "string",
"required": false
}
}
},
"device.create.failed": {
"id": "device.create.failed",
"msg": "Failed to create device.",
"attrs": {
"reason": {
"name": "reason",
"type": "string",
"required": true
},
"driver": {
"name": "driver",
"type": "string",
"required": true
},
"name": {
"name": "name",
"type": "string",
"required": true
},
"user": {
"name": "user",
"type": "string",
"required": false
}
}
},
"tags.created": {
"id": "tags.created",
"msg": "Tags added.",
"attrs": {
"driver": {
"name": "driver",
"type": "string",
"required": true
},
"name": {
"name": "name",
"type": "string",
"required": true
},
"user": {
"name": "user",
"type": "string",
"required": false
},
"tags": {
"name": "tags",
"type": "ArrayOf(string)",
"required": true
}
}
},
"device.update.failed": {
"id": "device.update.failed",
"msg": "Failed to update device.",
"attrs": {
"reason": {
"name": "reason",
"type": "string",
"required": true
},
"driver": {
"name": "driver",
"type": "string",
"required": true
},
"name": {
"name": "name",
"type": "string",
"required": true
},
"user": {
"name": "user",
"type": "string",
"required": false
}
}
},
"tags.updated": {
"id": "tags.updated",
"msg": "Tags updated.",
"attrs": {
"tagsAdded": {
"name": "tagsAdded",
"type": "ArrayOf(string)",
"required": true
},
"driver": {
"name": "driver",
"type": "string",
"required": true
},
"tagsRemoved": {
"name": "tagsRemoved",
"type": "ArrayOf(string)",
"required": true
},
"name": {
"name": "name",
"type": "string",
"required": true
},
"user": {
"name": "user",
"type": "string",
"required": false
}
}
},
"device.connected": {
"id": "device.connected",
"msg": "Device connected.",
"attrs": {
"driver": {
"name": "driver",
"type": "string",
"required": true
},
"name": {
"name": "name",
"type": "string",
"required": true
}
}
},
"tags.create.failed": {
"id": "tags.create.failed",
"msg": "Failed to create tags.",
"attrs": {
"reason": {
"name": "reason",
"type": "string",
"required": true
},
"driver": {
"name": "driver",
"type": "string",
"required": true
},
"name": {
"name": "name",
"type": "string",
"required": true
},
"user": {
"name": "user",
"type": "string",
"required": false
},
"tags": {
"name": "tags",
"type": "ArrayOf(string)",
"required": true
}
}
},
"tags.removed": {
"id": "tags.removed",
"msg": "Tags removed.",
"attrs": {
"driver": {
"name": "driver",
"type": "string",
"required": true
},
"name": {
"name": "name",
"type": "string",
"required": true
},
"user": {
"name": "user",
"type": "string",
"required": false
},
"tags": {
"name": "tags",
"type": "ArrayOf(string)",
"required": true
}
}
},
"device.enabled": {
"id": "device.enabled",
"msg": "Device enabled.",
"attrs": {
"driver": {
"name": "driver",
"type": "string",
"required": true
},
"name": {
"name": "name",
"type": "string",
"required": true
},
"user": {
"name": "user",
"type": "string",
"required": false
}
}
},
"device.removed": {
"id": "device.removed",
"msg": "Device removed.",
"attrs": {
"driver": {
"name": "driver",
"type": "string",
"required": true
},
"name": {
"name": "name",
"type": "string",
"required": true
},
"user": {
"name": "user",
"type": "string",
"required": false
}
}
},
"device.created": {
"id": "device.created",
"msg": "Device created.",
"attrs": {
"driver": {
"name": "driver",
"type": "string",
"required": true
},
"name": {
"name": "name",
"type": "string",
"required": true
},
"user": {
"name": "user",
"type": "string",
"required": false
}
}
},
"device.disconnected": {
"id": "device.disconnected",
"msg": "Device disconnected.",
"attrs": {
"driver": {
"name": "driver",
"type": "string",
"required": true
},
"name": {
"name": "name",
"type": "string",
"required": true
}
}
}
}
},
"auth": {
"id": "auth",
"name": "Auth",
"config": "events-auth.yaml",
"events": {
"user.created": {
"id": "user.created",
"msg": "User created.",
"attrs": {
"admin": {
"name": "admin",
"type": "string",
"required": true
},
"user": {
"name": "user",
"type": "string",
"required": true
}
}
},
"role.create.failed": {
"id": "role.create.failed",
"msg": "Failed to create role.",
"attrs": {
"reason": {
"name": "reason",
"type": "string",
"required": true
},
"role": {
"name": "role",
"type": "string",
"required": true
},
"admin": {
"name": "admin",
"type": "string",
"required": true
}
}
},
"role.deleted": {
"id": "role.deleted",
"msg": "Role deleted.",
"attrs": {
"role": {
"name": "role",
"type": "string",
"required": true
},
"admin": {
"name": "admin",
"type": "string",
"required": true
}
}
},
"user.delete.failed": {
"id": "user.delete.failed",
"msg": "Failed to delete user.",
"attrs": {
"reason": {
"name": "reason",
"type": "string",
"required": true
},
"admin": {
"name": "admin",
"type": "string",
"required": true
},
"user": {
"name": "user",
"type": "string",
"required": true
}
}
},
"role.assign.failed": {
"id": "role.assign.failed",
"msg": "Failed to assign role to the user.",
"attrs": {
"reason": {
"name": "reason",
"type": "string",
"required": true
},
"role": {
"name": "role",
"type": "string",
"required": true
},
"admin": {
"name": "admin",
"type": "string",
"required": true
},
"user": {
"name": "user",
"type": "string",
"required": true
}
}
},
"login.lockdown": {
"id": "login.lockdown",
"msg": "Login lockdown initiated.",
"attrs": {
"user": {
"name": "user",
"type": "string",
"required": true
}
}
},
"role.unasign.failed": {
"id": "role.unasign.failed",
"msg": "Failed to unassign role from the user.",
"attrs": {
"reason": {
"name": "reason",
"type": "string",
"required": true
},
"role": {
"name": "role",
"type": "string",
"required": true
},
"admin": {
"name": "admin",
"type": "string",
"required": true
},
"user": {
"name": "user",
"type": "string",
"required": true
}
}
},
"login.succeded": {
"id": "login.succeded",
"msg": "User logged in.",
"attrs": {
"user": {
"name": "user",
"type": "string",
"required": true
}
}
},
"role.delete.failed": {
"id": "role.delete.failed",
"msg": "Failed to delete role.",
"attrs": {
"reason": {
"name": "reason",
"type": "string",
"required": true
},
"role": {
"name": "role",
"type": "string",
"required": true
},
"admin": {
"name": "admin",
"type": "string",
"required": true
}
}
},
"role.assigned": {
"id": "role.assigned",
"msg": "Role assigned to the user.",
"attrs": {
"role": {
"name": "role",
"type": "string",
"required": true
},
"admin": {
"name": "admin",
"type": "string",
"required": true
},
"user": {
"name": "user",
"type": "string",
"required": true
}
}
},
"role.created": {
"id": "role.created",
"msg": "Role created.",
"attrs": {
"role": {
"name": "role",
"type": "string",
"required": true
},
"admin": {
"name": "admin",
"type": "string",
"required": true
}
}
},
"user.create.failed": {
"id": "user.create.failed",
"msg": "Failed to create user.",
"attrs": {
"reason": {
"name": "reason",
"type": "string",
"required": true
},
"admin": {
"name": "admin",
"type": "string",
"required": true
},
"user": {
"name": "user",
"type": "string",
"required": true
}
}
},
"user.deleted": {
"id": "user.deleted",
"msg": "User deleted.",
"attrs": {
"admin": {
"name": "admin",
"type": "string",
"required": true
},
"user": {
"name": "user",
"type": "string",
"required": true
}
}
},
"role.unassigned": {
"id": "role.unassigned",
"msg": "Role unassigned from the user.",
"attrs": {
"role": {
"name": "role",
"type": "string",
"required": true
},
"admin": {
"name": "admin",
"type": "string",
"required": true
},
"user": {
"name": "user",
"type": "string",
"required": true
}
}
}
}
},
"dm": {
"id": "dm",
"name": "Device Management",
"config": "events-dm.yaml",
"events": {
"backup.restore.warning": {
"id": "backup.restore.warning",
"msg": "Backup restore failed.",
"attrs": {
"reason": {
"name": "reason",
"type": "string",
"required": true
},
"fileName": {
"name": "fileName",
"type": "string",
"required": false
},
"srcHostname": {
"name": "srcHostname",
"type": "string",
"required": false
},
"curOsVersion": {
"name": "curOsVersion",
"type": "string",
"required": false
},
"curOsVariant": {
"name": "curOsVariant",
"type": "string",
"required": false
},
"srcTs": {
"name": "srcTs",
"type": "string",
"required": false
},
"srcOsVariant": {
"name": "srcOsVariant",
"type": "string",
"required": false
},
"user": {
"name": "user",
"type": "string",
"required": true
},
"srcOsVersion": {
"name": "srcOsVersion",
"type": "string",
"required": false
}
}
},
"deactivation.succeeded": {
"id": "deactivation.succeeded",
"msg": "Deactivation completed.",
"attrs": {
"autoProvision": {
"name": "autoProvision",
"type": "bool",
"required": true
},
"version": {
"name": "version",
"type": "int",
"required": true
},
"remoteHostId": {
"name": "remoteHostId",
"type": "string",
"required": true
},
"user": {
"name": "user",
"type": "string",
"required": true
},
"url": {
"name": "url",
"type": "string",
"required": true
}
}
},
"swupdate.failed": {
"id": "swupdate.failed",
"msg": "Software update failed.",
"attrs": {
"reason": {
"name": "reason",
"type": "string",
"required": true
},
"curVersion": {
"name": "curVersion",
"type": "string",
"required": true
},
"targetVersion": {
"name": "targetVersion",
"type": "string",
"required": true
}
}
},
"device.rebooted": {
"id": "device.rebooted",
"msg": "Device rebooted.",
"attrs": {
"user": {
"name": "user",
"type": "string",
"required": false
}
}
},
"deactivation.failed": {
"id": "deactivation.failed",
"msg": "Deactivation failed.",
"attrs": {
"reason": {
"name": "reason",
"type": "string",
"required": true
},
"autoProvision": {
"name": "autoProvision",
"type": "bool",
"required": true
},
"version": {
"name": "version",
"type": "int",
"required": true
},
"remoteHostId": {
"name": "remoteHostId",
"type": "string",
"required": true
},
"user": {
"name": "user",
"type": "string",
"required": true
},
"url": {
"name": "url",
"type": "string",
"required": true
}
}
},
"swupdate.applied": {
"id": "swupdate.applied",
"msg": "Software update applied. Confirmation is pending a reboot.",
"attrs": {
"curVersion": {
"name": "curVersion",
"type": "string",
"required": true
},
"targetVersion": {
"name": "targetVersion",
"type": "string",
"required": true
}
}
},
"diskspace.limit.exceeded.system": {
"id": "diskspace.limit.exceeded.system",
"msg": "Low disk space. System level exceeded.",
"attrs": {
"limitMiB": {
"name": "limitMiB",
"type": "int",
"required": true
},
"freeMiB": {
"name": "freeMiB",
"type": "int",
"required": true
},
"action": {
"name": "action",
"type": "string",
"required": true
}
}
},
"template.applied": {
"id": "template.applied",
"msg": "Template applied.",
"attrs": {
"fileName": {
"name": "fileName",
"type": "string",
"required": true
},
"user": {
"name": "user",
"type": "string",
"required": false
}
}
},
"activation.failed": {
"id": "activation.failed",
"msg": "Activation failed.",
"attrs": {
"reason": {
"name": "reason",
"type": "string",
"required": true
},
"autoProvision": {
"name": "autoProvision",
"type": "bool",
"required": true
},
"version": {
"name": "version",
"type": "int",
"required": true
},
"remoteHostId": {
"name": "remoteHostId",
"type": "string",
"required": true
},
"user": {
"name": "user",
"type": "string",
"required": true
},
"url": {
"name": "url",
"type": "string",
"required": true
}
}
},
"backup.restored": {
"id": "backup.restored",
"msg": "Backup restored succesfully.",
"attrs": {
"fileName": {
"name": "fileName",
"type": "string",
"required": false
},
"srcHostname": {
"name": "srcHostname",
"type": "string",
"required": false
},
"curOsVersion": {
"name": "curOsVersion",
"type": "string",
"required": false
},
"curOsVariant": {
"name": "curOsVariant",
"type": "string",
"required": false
},
"srcTs": {
"name": "srcTs",
"type": "string",
"required": false
},
"srcOsVariant": {
"name": "srcOsVariant",
"type": "string",
"required": false
},
"user": {
"name": "user",
"type": "string",
"required": true
},
"srcOsVersion": {
"name": "srcOsVersion",
"type": "string",
"required": false
}
}
},
"backup.restore.failed": {
"id": "backup.restore.failed",
"msg": "Backup restore failed.",
"attrs": {
"reason": {
"name": "reason",
"type": "string",
"required": true
},
"fileName": {
"name": "fileName",
"type": "string",
"required": false
},
"srcHostname": {
"name": "srcHostname",
"type": "string",
"required": false
},
"curOsVersion": {
"name": "curOsVersion",
"type": "string",
"required": false
},
"curOsVariant": {
"name": "curOsVariant",
"type": "string",
"required": false
},
"srcTs": {
"name": "srcTs",
"type": "string",
"required": false
},
"srcOsVariant": {
"name": "srcOsVariant",
"type": "string",
"required": false
},
"user": {
"name": "user",
"type": "string",
"required": true
},
"srcOsVersion": {
"name": "srcOsVersion",
"type": "string",
"required": false
}
}
},
"diskspace.limit.exceeded.user": {
"id": "diskspace.limit.exceeded.user",
"msg": "Low disk space. User-defined level exceeded.",
"attrs": {
"limitMiB": {
"name": "limitMiB",
"type": "int",
"required": true
},
"freeMiB": {
"name": "freeMiB",
"type": "int",
"required": true
},
"action": {
"name": "action",
"type": "string",
"required": true
}
}
},
"activation.succeeded": {
"id": "activation.succeeded",
"msg": "Activation completed.",
"attrs": {
"autoProvision": {
"name": "autoProvision",
"type": "bool",
"required": true
},
"version": {
"name": "version",
"type": "int",
"required": true
},
"remoteHostId": {
"name": "remoteHostId",
"type": "string",
"required": true
},
"user": {
"name": "user",
"type": "string",
"required": true
},
"url": {
"name": "url",
"type": "string",
"required": true
}
}
},
"template.apply.failed": {
"id": "template.apply.failed",
"msg": "Failed to apply thetemplate.",
"attrs": {
"reason": {
"name": "reason",
"type": "string",
"required": true
},
"fileName": {
"name": "fileName",
"type": "string",
"required": true
},
"user": {
"name": "user",
"type": "string",
"required": false
}
}
}
}
}
}
Event IDs
GET {{LEM_URL}}/api/v1/loopedge-events/registry/ids/?component=cc
Event IDs
Returns the event IDs supported by one component (e.g. cc for Integrations). Use to narrow down picker contents after a component is chosen.
Endpoint
GET {{LEM_URL}}/api/v1/loopedge-events/registry/ids/?component=cc
Authentication
HTTP Basic Auth. Username is your API token, password is empty. Tokens are managed under System > Access Control > Tokens.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
component |
string | Yes | Component slug (cc, dh, dm, auth, mp). |
Errors
| HTTP status | When it happens |
|---|---|
400 Bad Request |
Missing or malformed query/body parameter. |
401 Unauthorized |
Missing or invalid credentials. |
403 Forbidden |
Token lacks permission for this operation. |
404 Not Found |
Target entity does not exist. |
5xx |
Service is unreachable, restarting, or internally errored. Inspect device logs under System > Support. |
TLS note: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.
Response
Status: 200 OK
[
"conn.connected",
"conn.create.failed",
"conn.created",
"conn.disabled",
"conn.disconnected",
"conn.enabled",
"conn.remove.failed",
"conn.removed",
"tags.added",
"tags.disabled",
"tags.enabled",
"tags.removed"
]
Event Components
GET {{LEM_URL}}/api/v1/loopedge-events/registry/components
Event Components
Returns the set of component slugs that emit LE events. Used by the LEM UI's event-component dropdown.
Endpoint
GET {{LEM_URL}}/api/v1/loopedge-events/registry/components
Authentication
HTTP Basic Auth. Username is your API token, password is empty. Tokens are managed under System > Access Control > Tokens.
Response
["auth", "cc", "dh", "dm", "mp"]
Errors
| HTTP status | When it happens |
|---|---|
400 Bad Request |
Missing or malformed query/body parameter. |
401 Unauthorized |
Missing or invalid credentials. |
403 Forbidden |
Token lacks permission for this operation. |
404 Not Found |
Target entity does not exist. |
5xx |
Service is unreachable, restarting, or internally errored. Inspect device logs under System > Support. |
TLS note: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.
Response
Status: 200 OK
[
"auth",
"cc",
"dh",
"dm",
"mp"
]
Get Events
GET {{LEM_URL}}/api/v1/loopedge-events/list/{{project_id}}
Get Events
Returns the LE event stream for the project. Each event has a timestamp, originating device, component, severity, event ID, message, and attrs.
Endpoint
GET {{LEM_URL}}/api/v1/loopedge-events/list/{{project_id}}
Authentication
HTTP Basic Auth. Username is your API token, password is empty. Tokens are managed under System > Access Control > Tokens.
Errors
| HTTP status | When it happens |
|---|---|
400 Bad Request |
Missing or malformed query/body parameter. |
401 Unauthorized |
Missing or invalid credentials. |
403 Forbidden |
Token lacks permission for this operation. |
404 Not Found |
Target entity does not exist. |
5xx |
Service is unreachable, restarting, or internally errored. Inspect device logs under System > Support. |
TLS note: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.
Response
Status: 200 OK
[
{
"timeStamp": "2019-08-24T14:15:22Z",
"deviceId": "string",
"component": "string",
"severity": "string",
"eventId": "string",
"msg": "string",
"attrs": "string"
}
]