Litmus Edge Manager 3.0.x - Edge Lifecycle: Edge Devices
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
API key in a request header (case sensitive). The value is the LEM admin API token.
| URL prefix | Auth header |
|---|---|
{{LEM_URL}}/api/v1/... (main fleet API) |
X-AuthToken: <token> |
{{LEM_adminURL}}/admin/v1/... (admin console, port 8446) |
X-AuthToken: <token> |
{{LEM_URL}}/mpcs/... (Marketplace Catalog) |
Authorization: <token> (3.0.x also accepts X-AuthToken) |
| ## 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
API key in a request header (case sensitive). The value is the LEM admin API token.
| URL prefix | Auth header |
|---|---|
{{LEM_URL}}/api/v1/... (main fleet API) |
X-AuthToken: <token> |
{{LEM_adminURL}}/admin/v1/... (admin console, port 8446) |
X-AuthToken: <token> |
{{LEM_URL}}/mpcs/... (Marketplace Catalog) |
Authorization: <token> (3.0.x also accepts X-AuthToken) |
| ## 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
API key in a request header (case sensitive). The value is the LEM admin API token.
| URL prefix | Auth header |
|---|---|
{{LEM_URL}}/api/v1/... (main fleet API) |
X-AuthToken: <token> |
{{LEM_adminURL}}/admin/v1/... (admin console, port 8446) |
X-AuthToken: <token> |
{{LEM_URL}}/mpcs/... (Marketplace Catalog) |
Authorization: <token> (3.0.x also accepts X-AuthToken) |
| ## 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
API key in a request header (case sensitive). The value is the LEM admin API token.
| URL prefix | Auth header |
|---|---|
{{LEM_URL}}/api/v1/... (main fleet API) |
X-AuthToken: <token> |
{{LEM_adminURL}}/admin/v1/... (admin console, port 8446) |
X-AuthToken: <token> |
{{LEM_URL}}/mpcs/... (Marketplace Catalog) |
Authorization: <token> (3.0.x also accepts X-AuthToken) |
| ## 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
API key in a request header (case sensitive). The value is the LEM admin API token.
| URL prefix | Auth header |
|---|---|
{{LEM_URL}}/api/v1/... (main fleet API) |
X-AuthToken: <token> |
{{LEM_adminURL}}/admin/v1/... (admin console, port 8446) |
X-AuthToken: <token> |
{{LEM_URL}}/mpcs/... (Marketplace Catalog) |
Authorization: <token> (3.0.x also accepts X-AuthToken) |
| ## 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
}
]
}
Assets List
GET {{LEM_URL}}/api/v1/asset/list?projectId={{project_id}}
Assets List
Lists the assets defined in a project. Without projectId the list covers every project the token can see.
Endpoint
GET {{LEM_URL}}/api/v1/asset/list?projectId={{project_id}}
Authentication
API key in a request header (case sensitive). The value is the LEM admin API token.
| URL prefix | Auth header |
|---|---|
{{LEM_URL}}/api/v1/... (main fleet API) |
X-AuthToken: <token> |
{{LEM_adminURL}}/admin/v1/... (admin console, port 8446) |
X-AuthToken: <token> |
{{LEM_URL}}/mpcs/... (Marketplace Catalog) |
Authorization: <token> (3.0.x also accepts X-AuthToken) |
Query parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
projectId |
string | No | Project ID. |
Response
200 OK. Array of asset objects; [] when the project has none.
Errors
| HTTP status | When it happens |
|---|---|
401 Unauthorized |
Missing or invalid X-AuthToken. |
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
[]
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
API key in a request header (case sensitive). The value is the LEM admin API token.
| URL prefix | Auth header |
|---|---|
{{LEM_URL}}/api/v1/... (main fleet API) |
X-AuthToken: <token> |
{{LEM_adminURL}}/admin/v1/... (admin console, port 8446) |
X-AuthToken: <token> |
{{LEM_URL}}/mpcs/... (Marketplace Catalog) |
Authorization: <token> (3.0.x also accepts X-AuthToken) |
| ## 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
API key in a request header (case sensitive). The value is the LEM admin API token.
| URL prefix | Auth header |
|---|---|
{{LEM_URL}}/api/v1/... (main fleet API) |
X-AuthToken: <token> |
{{LEM_adminURL}}/admin/v1/... (admin console, port 8446) |
X-AuthToken: <token> |
{{LEM_URL}}/mpcs/... (Marketplace Catalog) |
Authorization: <token> (3.0.x also accepts X-AuthToken) |
| ## 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 Hardware Details
GET {{LEM_URL}}/api/v1/device/details/{{project_id}}/{{device_id}}
Device Hardware Details
Returns the hardware and OS facts LEM holds for a device (the Details tab): vendor, model, serial, firmware, CPU, memory, disk, hostname, DNS, country, timezone, NTP servers and network interfaces. Served from LEM's last copy, so it answers while the device is offline; a device that has never reported them returns 204 No Content.
Endpoint
GET {{LEM_URL}}/api/v1/device/details/{{project_id}}/{{device_id}}
Authentication
API key in a request header (case sensitive). The value is the LEM admin API token.
| URL prefix | Auth header |
|---|---|
{{LEM_URL}}/api/v1/... (main fleet API) |
X-AuthToken: <token> |
{{LEM_adminURL}}/admin/v1/... (admin console, port 8446) |
X-AuthToken: <token> |
{{LEM_URL}}/mpcs/... (Marketplace Catalog) |
Authorization: <token> (3.0.x also accepts X-AuthToken) |
Path parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
project_id |
string | Yes | Project ID. |
device_id |
string | Yes | Device ID. |
Response
200 OK. {code, content, updatedOn}. content is a JSON string; parse it to get {"values": [...]}, one entry per LwM2M resource of object 27000:
resourceId |
Value |
|---|---|
| 0 / 1 / 2 | Vendor, model, serial number |
| 3 | Litmus Edge firmware version |
| 4 / 5 / 6 | CPU, memory, disk (JSON strings) |
| 7 / 8 | Hostname, display name |
| 9 / 13 | DNS servers, NTP servers (JSON arrays) |
| 10 / 11 | Country, timezone |
| 12 | NTP enabled |
| 14 / 15 / 16 | Timestamps |
| 17 | Network interfaces (JSON array) |
Each value carries its datatype; the value itself is always a string.
Errors
| HTTP status | When it happens |
|---|---|
401 Unauthorized |
Missing or invalid X-AuthToken. |
404 Not Found |
Device <id> not found. |
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": "{\"values\":[{\"objectId\":27000,\"instanceId\":\"0\",\"resourceId\":0,\"datatype\":\"string\",\"value\":\"\",\"meta\":null},{\"objectId\":27000,\"instanceId\":\"0\",\"resourceId\":1,\"datatype\":\"string\",\"value\":\"\",\"meta\":null},{\"objectId\":27000,\"instanceId\":\"0\",\"resourceId\":2,\"datatype\":\"string\",\"value\":\"VMware-00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00\",\"meta\":null},{\"objectId\":27000,\"instanceId\":\"0\",\"resourceId\":3,\"datatype\":\"string\",\"value\":\"4.4.0-rc.2\",\"meta\":null},{\"objectId\":27000,\"instanceId\":\"0\",\"resourceId\":4,\"datatype\":\"string\",\"value\":\"[{\\\"vendorID\\\":\\\"GenuineIntel\\\",\\\"modelName\\\":\\\"Intel(R) Xeon(R) Gold 6222V CPU @ 1.80GHz\\\",\\\"clockMHz\\\":\\\"1795.780000\\\",\\\"cacheSizeKB\\\":\\\"28160\\\",\\\"numCores\\\":1},{\\\"vendorID\\\":\\\"GenuineIntel\\\",\\\"modelName\\\":\\\"Intel(R) Xeon(R) Gold 6222V CPU @ 1.80GHz\\\",\\\"clockMHz\\\":\\\"1795.780000\\\",\\\"cacheSizeKB\\\":\\\"28160\\\",\\\"numCores\\\":1},{\\\"vendorID\\\":\\\"GenuineIntel\\\",\\\"modelName\\\":\\\"Intel(R) Xeon(R) Gold 6222V CPU @ 1.80GHz\\\",\\\"clockMHz\\\":\\\"1795.780000\\\",\\\"cacheSizeKB\\\":\\\"28160\\\",\\\"numCores\\\":1},{\\\"vendorID\\\":\\\"GenuineIntel\\\",\\\"modelName\\\":\\\"Intel(R) Xeon(R) Gold 6222V CPU @ 1.80GHz\\\",\\\"clockMHz\\\":\\\"1795.780000\\\",\\\"cacheSizeKB\\\":\\\"28160\\\",\\\"numCores\\\":1},{\\\"vendorID\\\":\\\"GenuineIntel\\\",\\\"modelName\\\":\\\"Intel(R) Xeon(R) Gold 6222V CPU @ 1.80GHz\\\",\\\"clockMHz\\\":\\\"1795.780000\\\",\\\"cacheSizeKB\\\":\\\"28160\\\",\\\"numCores\\\":1},{\\\"vendorID\\\":\\\"GenuineIntel\\\",\\\"modelName\\\":\\\"Intel(R) Xeon(R) Gold 6222V CPU @ 1.80GHz\\\",\\\"clockMHz\\\":\\\"1795.780000\\\",\\\"cacheSizeKB\\\":\\\"28160\\\",\\\"numCores\\\":1},{\\\"vendorID\\\":\\\"GenuineIntel\\\",\\\"modelName\\\":\\\"Intel(R) Xeon(R) Gold 6222V CPU @ 1.80GHz\\\",\\\"clockMHz\\\":\\\"1795.780000\\\",\\\"cacheSizeKB\\\":\\\"28160\\\",\\\"numCores\\\":1},{\\\"vendorID\\\":\\\"GenuineIntel\\\",\\\"modelName\\\":\\\"Intel(R) Xeon(R) Gold 6222V CPU @ 1.80GHz\\\",\\\"clockMHz\\\":\\\"1795.780000\\\",\\\"cacheSizeKB\\\":\\\"28160\\\",\\\"numCores\\\":1}]\",\"meta\":null},{\"objectId\":27000,\"instanceId\":\"0\",\"resourceId\":5,\"datatype\":\"string\",\"value\":\"{\\\"memTotalKiB\\\":16380348,\\\"memUsedKiB\\\":7432744,\\\"memAvailableKiB\\\":8947604,\\\"swapTotalKiB\\\":4194300}\",\"meta\":null},{\"objectId\":27000,\"instanceId\":\"0\",\"resourceId\":6,\"datatype\":\"string\",\"value\":\"{\\\"diskSizeKiB\\\":31811408,\\\"dataPartSizeKiB\\\":24811608,\\\"dataPartFreeKib\\\":5358328}\",\"meta\":null},{\"objectId\":27000,\"instanceId\":\"0\",\"resourceId\":7,\"datatype\":\"string\",\"value\":\"8bba4e7b636b\",\"meta\":null},{\"objectId\":27000,\"instanceId\":\"0\",\"resourceId\":8,\"datatype\":\"string\",\"value\":null,\"meta\":null},{\"objectId\":27000,\"instanceId\":\"0\",\"resourceId\":9,\"datatype\":\"string\",\"value\":\"[]\",\"meta\":null},{\"objectId\":27000,\"instanceId\":\"0\",\"resourceId\":10,\"datatype\":\"string\",\"value\":\"\",\"meta\":null},{\"objectId\":27000,\"instanceId\":\"0\",\"resourceId\":11,\"datatype\":\"string\",\"value\":\"\",\"meta\":null},{\"objectId\":27000,\"instanceId\":\"0\",\"resourceId\":12,\"datatype\":\"boolean\",\"value\":\"true\",\"meta\":null},{\"objectId\":27000,\"instanceId\":\"0\",\"resourceId\":13,\"datatype\":\"string\",\"value\":\"[]\",\"meta\":null},{\"objectId\":27000,\"instanceId\":\"0\",\"resourceId\":14,\"datatype\":\"string\",\"value\":\"2026-10-15T20:32:59Z\",\"meta\":null},{\"objectId\":27000,\"instanceId\":\"0\",\"resourceId\":15,\"datatype\":\"string\",\"value\":\"2026-10-15T20:32:59Z\",\"meta\":null},{\"objectId\":27000,\"instanceId\":\"0\",\"resourceId\":16,\"datatype\":\"integer\",\"value\":\"1792096379\",\"meta\":null},{\"objectId\":27000,\"instanceId\":\"0\",\"resourceId\":17,\"datatype\":\"string\",\"value\":\"[{\\\"name\\\":\\\"eth0\\\",\\\"hwAddr\\\":\\\"02:42:ac:11:00:02\\\",\\\"address\\\":\\\"172.17.0.2/16\\\",\\\"addrFamily\\\":\\\"inet\\\",\\\"addrType\\\":\\\"private\\\"}]\",\"meta\":null},{\"objectId\":27000,\"instanceId\":\"0\",\"resourceId\":18,\"datatype\":\"string\",\"value\":\"[]\",\"meta\":null},{\"objectId\":27000,\"instanceId\":\"0\",\"resourceId\":19,\"datatype\":\"string\",\"value\":\"[]\",\"meta\":null}]}",
"updatedOn": 1792096379184
}
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
API key in a request header (case sensitive). The value is the LEM admin API token.
| URL prefix | Auth header |
|---|---|
{{LEM_URL}}/api/v1/... (main fleet API) |
X-AuthToken: <token> |
{{LEM_adminURL}}/admin/v1/... (admin console, port 8446) |
X-AuthToken: <token> |
{{LEM_URL}}/mpcs/... (Marketplace Catalog) |
Authorization: <token> (3.0.x also accepts X-AuthToken) |
| ## 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
API key in a request header (case sensitive). The value is the LEM admin API token.
| URL prefix | Auth header |
|---|---|
{{LEM_URL}}/api/v1/... (main fleet API) |
X-AuthToken: <token> |
{{LEM_adminURL}}/admin/v1/... (admin console, port 8446) |
X-AuthToken: <token> |
{{LEM_URL}}/mpcs/... (Marketplace Catalog) |
Authorization: <token> (3.0.x also accepts X-AuthToken) |
| ## 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
API key in a request header (case sensitive). The value is the LEM admin API token.
| URL prefix | Auth header |
|---|---|
{{LEM_URL}}/api/v1/... (main fleet API) |
X-AuthToken: <token> |
{{LEM_adminURL}}/admin/v1/... (admin console, port 8446) |
X-AuthToken: <token> |
{{LEM_URL}}/mpcs/... (Marketplace Catalog) |
Authorization: <token> (3.0.x also accepts X-AuthToken) |
| ## 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
API key in a request header (case sensitive). The value is the LEM admin API token.
| URL prefix | Auth header |
|---|---|
{{LEM_URL}}/api/v1/... (main fleet API) |
X-AuthToken: <token> |
{{LEM_adminURL}}/admin/v1/... (admin console, port 8446) |
X-AuthToken: <token> |
{{LEM_URL}}/mpcs/... (Marketplace Catalog) |
Authorization: <token> (3.0.x also accepts X-AuthToken) |
| ## 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
API key in a request header (case sensitive). The value is the LEM admin API token.
| URL prefix | Auth header |
|---|---|
{{LEM_URL}}/api/v1/... (main fleet API) |
X-AuthToken: <token> |
{{LEM_adminURL}}/admin/v1/... (admin console, port 8446) |
X-AuthToken: <token> |
{{LEM_URL}}/mpcs/... (Marketplace Catalog) |
Authorization: <token> (3.0.x also accepts X-AuthToken) |
| ## 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
API key in a request header (case sensitive). The value is the LEM admin API token.
| URL prefix | Auth header |
|---|---|
{{LEM_URL}}/api/v1/... (main fleet API) |
X-AuthToken: <token> |
{{LEM_adminURL}}/admin/v1/... (admin console, port 8446) |
X-AuthToken: <token> |
{{LEM_URL}}/mpcs/... (Marketplace Catalog) |
Authorization: <token> (3.0.x also accepts X-AuthToken) |
| ## 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
API key in a request header (case sensitive). The value is the LEM admin API token.
| URL prefix | Auth header |
|---|---|
{{LEM_URL}}/api/v1/... (main fleet API) |
X-AuthToken: <token> |
{{LEM_adminURL}}/admin/v1/... (admin console, port 8446) |
X-AuthToken: <token> |
{{LEM_URL}}/mpcs/... (Marketplace Catalog) |
Authorization: <token> (3.0.x also accepts X-AuthToken) |
| ## 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
API key in a request header (case sensitive). The value is the LEM admin API token.
| URL prefix | Auth header |
|---|---|
{{LEM_URL}}/api/v1/... (main fleet API) |
X-AuthToken: <token> |
{{LEM_adminURL}}/admin/v1/... (admin console, port 8446) |
X-AuthToken: <token> |
{{LEM_URL}}/mpcs/... (Marketplace Catalog) |
Authorization: <token> (3.0.x also accepts X-AuthToken) |
| ## 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
}
Verify Edge Device API Key
POST {{LEM_URL}}/api/v1/device/api-key/{{project_id}}/{{device_id}}/verify
Verify Edge Device API Key
Checks an API token against the Litmus Edge device before you store it with Save API token for Edge Device. LEM forwards the check to the device, so the device must be online.
Endpoint
POST {{LEM_URL}}/api/v1/device/api-key/{{project_id}}/{{device_id}}/verify
Authentication
API key in a request header (case sensitive). The value is the LEM admin API token.
| URL prefix | Auth header |
|---|---|
{{LEM_URL}}/api/v1/... (main fleet API) |
X-AuthToken: <token> |
{{LEM_adminURL}}/admin/v1/... (admin console, port 8446) |
X-AuthToken: <token> |
{{LEM_URL}}/mpcs/... (Marketplace Catalog) |
Authorization: <token> (3.0.x also accepts X-AuthToken) |
Request body
application/json
| Field | Type | Required | Description |
|---|---|---|---|
value |
string | Yes | Litmus Edge API token to check. |
Response
200 OK with {"code": "S"} when the device accepts the token. The example shows the answer from an online device for a token it rejects.
Errors
| HTTP status | When it happens |
|---|---|
401 Unauthorized |
Missing or invalid X-AuthToken. |
400 Bad Request |
API token is not valid: the device is online and rejected the token. |
404 Not Found |
Failed to verify device API key: device <id> not found. |
409 Conflict |
Device is offline, or the device rejected the token. |
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": "{{edge_api_token}}"
}
Response
Status: 400 400
{
"code": "E",
"message": "API token is not valid",
"messageDetails": ""
}
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
API key in a request header (case sensitive). The value is the LEM admin API token.
| URL prefix | Auth header |
|---|---|
{{LEM_URL}}/api/v1/... (main fleet API) |
X-AuthToken: <token> |
{{LEM_adminURL}}/admin/v1/... (admin console, port 8446) |
X-AuthToken: <token> |
{{LEM_URL}}/mpcs/... (Marketplace Catalog) |
Authorization: <token> (3.0.x also accepts X-AuthToken) |
| ## 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
API key in a request header (case sensitive). The value is the LEM admin API token.
| URL prefix | Auth header |
|---|---|
{{LEM_URL}}/api/v1/... (main fleet API) |
X-AuthToken: <token> |
{{LEM_adminURL}}/admin/v1/... (admin console, port 8446) |
X-AuthToken: <token> |
{{LEM_URL}}/mpcs/... (Marketplace Catalog) |
Authorization: <token> (3.0.x also accepts X-AuthToken) |
| > 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
API key in a request header (case sensitive). The value is the LEM admin API token.
| URL prefix | Auth header |
|---|---|
{{LEM_URL}}/api/v1/... (main fleet API) |
X-AuthToken: <token> |
{{LEM_adminURL}}/admin/v1/... (admin console, port 8446) |
X-AuthToken: <token> |
{{LEM_URL}}/mpcs/... (Marketplace Catalog) |
Authorization: <token> (3.0.x also accepts X-AuthToken) |
| ## 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
API key in a request header (case sensitive). The value is the LEM admin API token.
| URL prefix | Auth header |
|---|---|
{{LEM_URL}}/api/v1/... (main fleet API) |
X-AuthToken: <token> |
{{LEM_adminURL}}/admin/v1/... (admin console, port 8446) |
X-AuthToken: <token> |
{{LEM_URL}}/mpcs/... (Marketplace Catalog) |
Authorization: <token> (3.0.x also accepts X-AuthToken) |
| ## 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
API key in a request header (case sensitive). The value is the LEM admin API token.
| URL prefix | Auth header |
|---|---|
{{LEM_URL}}/api/v1/... (main fleet API) |
X-AuthToken: <token> |
{{LEM_adminURL}}/admin/v1/... (admin console, port 8446) |
X-AuthToken: <token> |
{{LEM_URL}}/mpcs/... (Marketplace Catalog) |
Authorization: <token> (3.0.x also accepts X-AuthToken) |
| ## 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
API key in a request header (case sensitive). The value is the LEM admin API token.
| URL prefix | Auth header |
|---|---|
{{LEM_URL}}/api/v1/... (main fleet API) |
X-AuthToken: <token> |
{{LEM_adminURL}}/admin/v1/... (admin console, port 8446) |
X-AuthToken: <token> |
{{LEM_URL}}/mpcs/... (Marketplace Catalog) |
Authorization: <token> (3.0.x also accepts X-AuthToken) |
| ## 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
API key in a request header (case sensitive). The value is the LEM admin API token.
| URL prefix | Auth header |
|---|---|
{{LEM_URL}}/api/v1/... (main fleet API) |
X-AuthToken: <token> |
{{LEM_adminURL}}/admin/v1/... (admin console, port 8446) |
X-AuthToken: <token> |
{{LEM_URL}}/mpcs/... (Marketplace Catalog) |
Authorization: <token> (3.0.x also accepts X-AuthToken) |
| ## 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
API key in a request header (case sensitive). The value is the LEM admin API token.
| URL prefix | Auth header |
|---|---|
{{LEM_URL}}/api/v1/... (main fleet API) |
X-AuthToken: <token> |
{{LEM_adminURL}}/admin/v1/... (admin console, port 8446) |
X-AuthToken: <token> |
{{LEM_URL}}/mpcs/... (Marketplace Catalog) |
Authorization: <token> (3.0.x also accepts X-AuthToken) |
| ## 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
API key in a request header (case sensitive). The value is the LEM admin API token.
| URL prefix | Auth header |
|---|---|
{{LEM_URL}}/api/v1/... (main fleet API) |
X-AuthToken: <token> |
{{LEM_adminURL}}/admin/v1/... (admin console, port 8446) |
X-AuthToken: <token> |
{{LEM_URL}}/mpcs/... (Marketplace Catalog) |
Authorization: <token> (3.0.x also accepts X-AuthToken) |
| ## 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
API key in a request header (case sensitive). The value is the LEM admin API token.
| URL prefix | Auth header |
|---|---|
{{LEM_URL}}/api/v1/... (main fleet API) |
X-AuthToken: <token> |
{{LEM_adminURL}}/admin/v1/... (admin console, port 8446) |
X-AuthToken: <token> |
{{LEM_URL}}/mpcs/... (Marketplace Catalog) |
Authorization: <token> (3.0.x also accepts X-AuthToken) |
| ## 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
API key in a request header (case sensitive). The value is the LEM admin API token.
| URL prefix | Auth header |
|---|---|
{{LEM_URL}}/api/v1/... (main fleet API) |
X-AuthToken: <token> |
{{LEM_adminURL}}/admin/v1/... (admin console, port 8446) |
X-AuthToken: <token> |
{{LEM_URL}}/mpcs/... (Marketplace Catalog) |
Authorization: <token> (3.0.x also accepts X-AuthToken) |
| ## 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
API key in a request header (case sensitive). The value is the LEM admin API token.
| URL prefix | Auth header |
|---|---|
{{LEM_URL}}/api/v1/... (main fleet API) |
X-AuthToken: <token> |
{{LEM_adminURL}}/admin/v1/... (admin console, port 8446) |
X-AuthToken: <token> |
{{LEM_URL}}/mpcs/... (Marketplace Catalog) |
Authorization: <token> (3.0.x also accepts X-AuthToken) |
| ## 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
API key in a request header (case sensitive). The value is the LEM admin API token.
| URL prefix | Auth header |
|---|---|
{{LEM_URL}}/api/v1/... (main fleet API) |
X-AuthToken: <token> |
{{LEM_adminURL}}/admin/v1/... (admin console, port 8446) |
X-AuthToken: <token> |
{{LEM_URL}}/mpcs/... (Marketplace Catalog) |
Authorization: <token> (3.0.x also accepts X-AuthToken) |
| ## 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
API key in a request header (case sensitive). The value is the LEM admin API token.
| URL prefix | Auth header |
|---|---|
{{LEM_URL}}/api/v1/... (main fleet API) |
X-AuthToken: <token> |
{{LEM_adminURL}}/admin/v1/... (admin console, port 8446) |
X-AuthToken: <token> |
{{LEM_URL}}/mpcs/... (Marketplace Catalog) |
Authorization: <token> (3.0.x also accepts X-AuthToken) |
| ## 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
API key in a request header (case sensitive). The value is the LEM admin API token.
| URL prefix | Auth header |
|---|---|
{{LEM_URL}}/api/v1/... (main fleet API) |
X-AuthToken: <token> |
{{LEM_adminURL}}/admin/v1/... (admin console, port 8446) |
X-AuthToken: <token> |
{{LEM_URL}}/mpcs/... (Marketplace Catalog) |
Authorization: <token> (3.0.x also accepts X-AuthToken) |
| ## 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
API key in a request header (case sensitive). The value is the LEM admin API token.
| URL prefix | Auth header |
|---|---|
{{LEM_URL}}/api/v1/... (main fleet API) |
X-AuthToken: <token> |
{{LEM_adminURL}}/admin/v1/... (admin console, port 8446) |
X-AuthToken: <token> |
{{LEM_URL}}/mpcs/... (Marketplace Catalog) |
Authorization: <token> (3.0.x also accepts X-AuthToken) |
| ## 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
API key in a request header (case sensitive). The value is the LEM admin API token.
| URL prefix | Auth header |
|---|---|
{{LEM_URL}}/api/v1/... (main fleet API) |
X-AuthToken: <token> |
{{LEM_adminURL}}/admin/v1/... (admin console, port 8446) |
X-AuthToken: <token> |
{{LEM_URL}}/mpcs/... (Marketplace Catalog) |
Authorization: <token> (3.0.x also accepts X-AuthToken) |
| ## 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
API key in a request header (case sensitive). The value is the LEM admin API token.
| URL prefix | Auth header |
|---|---|
{{LEM_URL}}/api/v1/... (main fleet API) |
X-AuthToken: <token> |
{{LEM_adminURL}}/admin/v1/... (admin console, port 8446) |
X-AuthToken: <token> |
{{LEM_URL}}/mpcs/... (Marketplace Catalog) |
Authorization: <token> (3.0.x also accepts X-AuthToken) |
| ## 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
API key in a request header (case sensitive). The value is the LEM admin API token.
| URL prefix | Auth header |
|---|---|
{{LEM_URL}}/api/v1/... (main fleet API) |
X-AuthToken: <token> |
{{LEM_adminURL}}/admin/v1/... (admin console, port 8446) |
X-AuthToken: <token> |
{{LEM_URL}}/mpcs/... (Marketplace Catalog) |
Authorization: <token> (3.0.x also accepts X-AuthToken) |
| ## 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).
Updated in 3.0. New optional query parameters:
kind.
Endpoint
POST {{LEM_URL}}/api/v1/backup/get?projectId={{project_id}}&deviceId={{device_id}}&backupType=MASTER×tamp=1697498885385
Authentication
API key in a request header (case sensitive). The value is the LEM admin API token.
| URL prefix | Auth header |
|---|---|
{{LEM_URL}}/api/v1/... (main fleet API) |
X-AuthToken: <token> |
{{LEM_adminURL}}/admin/v1/... (admin console, port 8446) |
X-AuthToken: <token> |
{{LEM_URL}}/mpcs/... (Marketplace Catalog) |
Authorization: <token> (3.0.x also accepts X-AuthToken) |
| ## 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
API key in a request header (case sensitive). The value is the LEM admin API token.
| URL prefix | Auth header |
|---|---|
{{LEM_URL}}/api/v1/... (main fleet API) |
X-AuthToken: <token> |
{{LEM_adminURL}}/admin/v1/... (admin console, port 8446) |
X-AuthToken: <token> |
{{LEM_URL}}/mpcs/... (Marketplace Catalog) |
Authorization: <token> (3.0.x also accepts X-AuthToken) |
| ## 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
API key in a request header (case sensitive). The value is the LEM admin API token.
| URL prefix | Auth header |
|---|---|
{{LEM_URL}}/api/v1/... (main fleet API) |
X-AuthToken: <token> |
{{LEM_adminURL}}/admin/v1/... (admin console, port 8446) |
X-AuthToken: <token> |
{{LEM_URL}}/mpcs/... (Marketplace Catalog) |
Authorization: <token> (3.0.x also accepts X-AuthToken) |
| ## 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.
3.0.x: no trailing slash after
forwarding./forwarding/?...fails with409andNo static resource loopedge-events/forwarding.
Endpoint
GET {{LEM_URL}}/api/v1/loopedge-events/forwarding/?projectId={{project_id}}&deviceId={{device_id}}
Authentication
API key in a request header (case sensitive). The value is the LEM admin API token.
| URL prefix | Auth header |
|---|---|
{{LEM_URL}}/api/v1/... (main fleet API) |
X-AuthToken: <token> |
{{LEM_adminURL}}/admin/v1/... (admin console, port 8446) |
X-AuthToken: <token> |
{{LEM_URL}}/mpcs/... (Marketplace Catalog) |
Authorization: <token> (3.0.x also accepts X-AuthToken) |
| ## 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
POST {{LEM_URL}}/api/v1/loopedge-events/forwarding?projectId={{project_id}}&deviceId={{device_id}}&enabled=true
Enable Forwarding
Turns LE event forwarding on or off for the device with POST and the required enabled query parameter (true or false). The response is the new state. Read the current state with Forwarding State (GET, same path without enabled).
Corrected in 3.0.x docs: this call is a
POSTwithenabled. AGETonly returns the current state and changes nothing; aPOSTwithenable(no d) fails with400 Missing required parameter 'enabled'. The same applies to 2.31.x. No trailing slash afterforwarding.
Endpoint
POST {{LEM_URL}}/api/v1/loopedge-events/forwarding?projectId={{project_id}}&deviceId={{device_id}}&enabled=true
Authentication
API key in a request header (case sensitive). The value is the LEM admin API token.
| URL prefix | Auth header |
|---|---|
{{LEM_URL}}/api/v1/... (main fleet API) |
X-AuthToken: <token> |
{{LEM_adminURL}}/admin/v1/... (admin console, port 8446) |
X-AuthToken: <token> |
{{LEM_URL}}/mpcs/... (Marketplace Catalog) |
Authorization: <token> (3.0.x also accepts X-AuthToken) |
| ## 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.
3.0.x: no trailing slash after
registry./registry/?...fails with409andNo static resource loopedge-events/registry.
Endpoint
GET {{LEM_URL}}/api/v1/loopedge-events/registry/?projectId={{project_id}}&deviceId={{device_id}}
Authentication
API key in a request header (case sensitive). The value is the LEM admin API token.
| URL prefix | Auth header |
|---|---|
{{LEM_URL}}/api/v1/... (main fleet API) |
X-AuthToken: <token> |
{{LEM_adminURL}}/admin/v1/... (admin console, port 8446) |
X-AuthToken: <token> |
{{LEM_URL}}/mpcs/... (Marketplace Catalog) |
Authorization: <token> (3.0.x also accepts X-AuthToken) |
| ## 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.
3.0.x: no trailing slash after
ids./registry/ids/?component=ccfails with409andNo static resource loopedge-events/registry/ids.
Endpoint
GET {{LEM_URL}}/api/v1/loopedge-events/registry/ids/?component=cc
Authentication
API key in a request header (case sensitive). The value is the LEM admin API token.
| URL prefix | Auth header |
|---|---|
{{LEM_URL}}/api/v1/... (main fleet API) |
X-AuthToken: <token> |
{{LEM_adminURL}}/admin/v1/... (admin console, port 8446) |
X-AuthToken: <token> |
{{LEM_URL}}/mpcs/... (Marketplace Catalog) |
Authorization: <token> (3.0.x also accepts X-AuthToken) |
| ## 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
API key in a request header (case sensitive). The value is the LEM admin API token.
| URL prefix | Auth header |
|---|---|
{{LEM_URL}}/api/v1/... (main fleet API) |
X-AuthToken: <token> |
{{LEM_adminURL}}/admin/v1/... (admin console, port 8446) |
X-AuthToken: <token> |
{{LEM_URL}}/mpcs/... (Marketplace Catalog) |
Authorization: <token> (3.0.x also accepts X-AuthToken) |
| ## 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
API key in a request header (case sensitive). The value is the LEM admin API token.
| URL prefix | Auth header |
|---|---|
{{LEM_URL}}/api/v1/... (main fleet API) |
X-AuthToken: <token> |
{{LEM_adminURL}}/admin/v1/... (admin console, port 8446) |
X-AuthToken: <token> |
{{LEM_URL}}/mpcs/... (Marketplace Catalog) |
Authorization: <token> (3.0.x also accepts X-AuthToken) |
| ## 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"
}
]
Returns lightweight list of devices
GET {{LEM_URL}}/api/v1/device/list?requestedPage=0&limit=1
Returns lightweight list of devices
Returns a lightweight, paginated device list optimized for large fleets: core identity and status fields only, with extensive filtering. Prefer this over the full device listing when you only need ids, names and status.
Endpoint
GET {{LEM_URL}}/api/v1/device/list
Authentication
API key in a request header (case sensitive). The value is the LEM admin API token.
| URL prefix | Auth header |
|---|---|
{{LEM_URL}}/api/v1/... (main fleet API) |
X-AuthToken: <token> |
{{LEM_adminURL}}/admin/v1/... (admin console, port 8446) |
X-AuthToken: <token> |
{{LEM_URL}}/mpcs/... (Marketplace Catalog) |
Authorization: <token> (3.0.x also accepts X-AuthToken) |
| ## Parameters |
| Parameter | In | Notes |
|---|---|---|
companyName / projectId |
query | Scope the listing. |
tag / filter |
query | Filter by tag / free text. |
onlineOnly |
query | Only currently-connected devices. |
deviceStatus |
query | Filter by status. |
firmwareVersions |
query | Filter by firmware version(s). |
virtualization |
query | Filter by virtualization type. |
includeCapabilities |
query | Include device capability flags. |
includeHaBackup |
query | Include HA backup devices in the result. |
order |
query | Sort order. |
requestedPage / limit |
query | Pagination. |
Response
[DeviceLiteResponse] (paginated).
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.
Return device friendly names by project
GET {{LEM_URL}}/api/v1/device/{{project_id}}/pretty-names
Return device friendly names by project
Returns the human-friendly (pretty) names assigned to devices in a project, optionally filtered to one device or by text.
Endpoint
GET {{LEM_URL}}/api/v1/device/{projectId}/pretty-names
Authentication
API key in a request header (case sensitive). The value is the LEM admin API token.
| URL prefix | Auth header |
|---|---|
{{LEM_URL}}/api/v1/... (main fleet API) |
X-AuthToken: <token> |
{{LEM_adminURL}}/admin/v1/... (admin console, port 8446) |
X-AuthToken: <token> |
{{LEM_URL}}/mpcs/... (Marketplace Catalog) |
Authorization: <token> (3.0.x also accepts X-AuthToken) |
| ## Parameters |
| Parameter | In | Notes |
|---|---|---|
projectId |
path | Required. Project scope. |
deviceId |
query | Restrict to one device. |
filter |
query | Free-text filter on the friendly name. |
Response
[DeviceFriendlyName] (device id -> friendly name).
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
[
{
"deviceId": "747wh82uw1chl6asyvvuqzw3y",
"prettyName": null,
"hostname": null
}
]
Batch lookup devices by pretty names with pagination support
POST {{LEM_URL}}/api/v1/device/{{project_id}}/batch/pretty-names
Batch lookup devices by pretty names with pagination support
Resolves a batch of friendly (pretty) names back to devices in a project, with pagination. The inverse of the friendly-names listing.
Endpoint
POST {{LEM_URL}}/api/v1/device/{projectId}/batch/pretty-names
Authentication
API key in a request header (case sensitive). The value is the LEM admin API token.
| URL prefix | Auth header |
|---|---|
{{LEM_URL}}/api/v1/... (main fleet API) |
X-AuthToken: <token> |
{{LEM_adminURL}}/admin/v1/... (admin console, port 8446) |
X-AuthToken: <token> |
{{LEM_URL}}/mpcs/... (Marketplace Catalog) |
Authorization: <token> (3.0.x also accepts X-AuthToken) |
| ## Parameters |
| projectId | path | Required. Project scope. |
Request body
BatchDeviceIdLookupRequest { prettyNames: [string], page: int, limit: int }.
Response
PageImplDeviceFriendlyName (paged friendly-name -> device matches).
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
{
"prettyNames": [
"string"
],
"page": 0,
"limit": 50
}
Returns top N LE Devices by metric type
GET {{LEM_URL}}/api/v1/device/metrics/{{project_id}}/top?limit=1
Returns top N LE Devices by metric type
Returns the top N devices in a project ranked by a given metric (e.g. CPU, memory, storage). Backs the dashboard's top-devices widgets.
Endpoint
GET {{LEM_URL}}/api/v1/device/metrics/{projectId}/top
Authentication
API key in a request header (case sensitive). The value is the LEM admin API token.
| URL prefix | Auth header |
|---|---|
{{LEM_URL}}/api/v1/... (main fleet API) |
X-AuthToken: <token> |
{{LEM_adminURL}}/admin/v1/... (admin console, port 8446) |
X-AuthToken: <token> |
{{LEM_URL}}/mpcs/... (Marketplace Catalog) |
Authorization: <token> (3.0.x also accepts X-AuthToken) |
| ## Parameters |
| Parameter | In | Notes |
|---|---|---|
projectId |
path | Required. Project scope. |
metricType |
query | Metric to rank by (e.g. cpu / memory / storage / network). |
limit |
query | How many devices to return (N). |
Response
TopDeviceMetricsResponse (the ranked devices and their metric values).
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": "qe15rmy87859mq9ewfn8c97l",
"limit": 1,
"metrics": {
"cpu": [],
"memory": [],
"network": [],
"storage": []
}
}