@smarterplan/ngx-smarterplan-core 1.4.14 → 1.4.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/pipes/hashtag-from-id.pipe.mjs +1 -1
- package/esm2022/lib/services/matterport-tag-copy.service.mjs +448 -62
- package/esm2022/lib/services/models/domain.service.mjs +20 -1
- package/esm2022/lib/services/models/equipment.service.mjs +4 -2
- package/esm2022/lib/services/models/feature.service.mjs +1 -7
- package/esm2022/lib/services/models/mission.service.mjs +17 -1
- package/fesm2022/smarterplan-ngx-smarterplan-core.mjs +555 -141
- package/fesm2022/smarterplan-ngx-smarterplan-core.mjs.map +1 -1
- package/lib/services/matterport-tag-copy.service.d.ts +137 -17
- package/lib/services/models/domain.service.d.ts +8 -0
- package/lib/services/models/feature.service.d.ts +0 -6
- package/lib/services/models/mission.service.d.ts +5 -0
- package/package.json +1 -1
|
@@ -14,6 +14,25 @@ export class DomainService {
|
|
|
14
14
|
});
|
|
15
15
|
});
|
|
16
16
|
}
|
|
17
|
+
/**
|
|
18
|
+
* Same as getGenericDomainsAndForOrganisation(), but drains every page instead of only
|
|
19
|
+
* the first. `ListDomains` has no per-organisation index — every call already scans the
|
|
20
|
+
* WHOLE table across every organisation before filtering client-side — so a catalogue
|
|
21
|
+
* past the first page was silently invisible to callers that need the complete list
|
|
22
|
+
* (e.g. matching an organisation-specific domain by name across a space-to-space copy).
|
|
23
|
+
*/
|
|
24
|
+
async getAllGenericDomainsAndForOrganisation(organisationID) {
|
|
25
|
+
const all = [];
|
|
26
|
+
let nextToken = null;
|
|
27
|
+
do {
|
|
28
|
+
const page = await this.API.__proto__.ListDomains(undefined, 1000, nextToken);
|
|
29
|
+
if (page?.items?.length > 0) {
|
|
30
|
+
all.push(...page.items.filter((dom) => !!dom));
|
|
31
|
+
}
|
|
32
|
+
nextToken = page?.nextToken ?? null;
|
|
33
|
+
} while (nextToken);
|
|
34
|
+
return all.filter(dom => dom.organisationID === organisationID || !dom.organisationID);
|
|
35
|
+
}
|
|
17
36
|
async getGenericDomainsAndForOrgAndOrderedOrg(orgID, orderedOrgID = null) {
|
|
18
37
|
// TODO: Change this (UUID can change depending on DB)
|
|
19
38
|
if (orgID === "6e28201f-4679-4c29-9d2d-8a325f57cee9") {
|
|
@@ -76,4 +95,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
76
95
|
type: Inject,
|
|
77
96
|
args: ['currentAPIService']
|
|
78
97
|
}] }] });
|
|
79
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9tYWluLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc21hcnRlcnBsYW4tY29yZS9zcmMvbGliL3NlcnZpY2VzL21vZGVscy9kb21haW4uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM5RCxPQUFPLEVBQVUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7O0FBSXpELE1BQU0sT0FBTyxhQUFhO0lBQ3RCLEdBQUcsQ0FBTSxDQUFDLEtBQUs7SUFFZixZQUF5QyxXQUFnQjtRQUNyRCxJQUFJLENBQUMsR0FBRyxHQUFHLFdBQVcsQ0FBQztJQUMzQixDQUFDO0lBRUQsS0FBSyxDQUFDLG1DQUFtQyxDQUNyQyxjQUFzQjtRQUV0QixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ3JELE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDaEMsT0FBTyxDQUNILEdBQUcsQ0FBQyxjQUFjLEtBQUssY0FBYyxJQUFJLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FDL0QsQ0FBQztZQUNOLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsS0FBSyxDQUFDLHVDQUF1QyxDQUN6QyxLQUFhLEVBQ2IsZUFBdUIsSUFBSTtRQUUzQixzREFBc0Q7UUFDdEQsSUFBSSxLQUFLLEtBQUssc0NBQXNDLEVBQUUsQ0FBQztZQUNuRCxrQ0FBa0M7WUFDbEMsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxXQUFX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QUF1QyxDQUMvQyxjQUFjLEVBQ2QsVUFBVSxDQUNiLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDZixPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3ZFLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELEtBQUssQ0FBQywyQkFBMkIsQ0FBQyxLQUFhO1FBQzNDLE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLDhCQUE4QixDQUNyRCxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQzVELEtBQUssQ0FDUixDQUFDO1FBQ0YsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNsRCxDQUFDO3dHQTFHUSxhQUFhLGtCQUdGLG1CQUFtQjs0R0FIOUIsYUFBYSxjQUZWLE1BQU07OzRGQUVULGFBQWE7a0JBSHpCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCOzswQkFJZ0IsTUFBTTsyQkFBQyxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBmaWx0ZXJVbmlxdWVBcnJheUJ5SUQgfSBmcm9tIFwiLi4vLi4vaGVscGVycy5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IERvbWFpbiwgRG9tYWluVHlwZSB9IGZyb20gXCIuLi8uLi90eXBlcy5zZXJ2aWNlXCI7XHJcbkBJbmplY3RhYmxlKHtcclxuICAgIHByb3ZpZGVkSW46IFwicm9vdFwiLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRG9tYWluU2VydmljZSB7XHJcbiAgICBBUEk6IGFueTsgLy9BV1NcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihASW5qZWN0KCdjdXJyZW50QVBJU2VydmljZScpIGFwaUluamVjdGVkOiBhbnkpIHtcclxuICAgICAgICB0aGlzLkFQSSA9IGFwaUluamVjdGVkO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldEdlbmVyaWNEb21haW5zQW5kRm9yT3JnYW5pc2F0aW9uKFxyXG4gICAgICAgIG9yZ2FuaXNhdGlvbklEOiBzdHJpbmcsXHJcbiAgICApOiBQcm9taXNlPGFueSB8IHZvaWQ+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5BUEkuX19wcm90b19fLkxpc3REb21haW5zKCkudGhlbigoZG9tYWlucykgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gZG9tYWlucy5pdGVtcy5maWx0ZXIoKGRvbSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgICAgICBkb20ub3JnYW5pc2F0aW9uSUQgPT09IG9yZ2FuaXNhdGlvbklEIHx8ICFkb20ub3JnYW5pc2F0aW9uSURcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldEdlbmVyaWNEb21haW5zQW5kRm9yT3JnQW5kT3JkZXJlZE9yZyhcclxuICAgICAgICBvcmdJRDogc3RyaW5nLFxyXG4gICAgICAgIG9yZGVyZWRPcmdJRDogc3RyaW5nID0gbnVsbCxcclxuICAgICk6IFByb21pc2U8RG9tYWluW10+IHtcclxuICAgICAgICAvLyBUT0RPOiBDaGFuZ2UgdGhpcyAoVVVJRCBjYW4gY2hhbmdlIGRlcGVuZGluZyBvbiBEQilcclxuICAgICAgICBpZiAob3JnSUQgPT09IFwiNmUyODIwMWYtNDY3OS00YzI5LTlkMmQtOGEzMjVmNTdjZWU5XCIpIHtcclxuICAgICAgICAgICAgLy8gSSBhbSBTbWFydGVyUGxhbiwgaSBjYW4gc2VlIGFsbFxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5BUEkuX19wcm90b19fLkxpc3REb21haW5zKCkudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLml0ZW1zKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY3VycmVudE9yZ0RvbWFpbnMgPVxyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmdldEdlbmVyaWNEb21haW5zQW5kRm9yT3JnYW5pc2F0aW9uKG9yZ0lEKTtcclxuICAgICAgICBpZiAoIW9yZGVyZWRPcmdJRCB8fCBvcmdJRCA9PT0gb3JkZXJlZE9yZ0lEKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjdXJyZW50T3JnRG9tYWlucztcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgb3JkZXJlZE9yZ0RvbWFpbnMgPVxyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmdldEdlbmVyaWNEb21haW5zQW5kRm9yT3JnYW5pc2F0aW9uKG9yZGVyZWRPcmdJRCk7XHJcbiAgICAgICAgY29uc3QgbWVyZ2VkID0gWy4uLmN1cnJlbnRPcmdEb21haW5zLCAuLi5vcmRlcmVkT3JnRG9tYWluc107XHJcbiAgICAgICAgcmV0dXJuIGZpbHRlclVuaXF1ZUFycmF5QnlJRChtZXJnZWQpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldERvbWFpbnNGb3JPcmdFeGNsdWRpbmdUeXBlcyhcclxuICAgICAgICB0eXBlczogRG9tYWluVHlwZVtdLFxyXG4gICAgICAgIG9yZ2FuaXNhdGlvbklEOiBzdHJpbmcsXHJcbiAgICApOiBQcm9taXNlPERvbWFpbltdPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0R2VuZXJpY0RvbWFpbnNBbmRGb3JPcmdhbmlzYXRpb24ob3JnYW5pc2F0aW9uSUQpLnRoZW4oXHJcbiAgICAgICAgICAgIChkb21haW5zKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZG9tYWlucy5maWx0ZXIoKGRvbSkgPT4gIXR5cGVzLmluY2x1ZGVzKGRvbS50eXBlKSk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXREb21haW4oaWQ6IHN0cmluZyk6IFByb21pc2U8RG9tYWluPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuQVBJLl9fcHJvdG9fXy5HZXREb21haW4oaWQpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHVwZGF0ZURvbWFpbihpbnB1dDogYW55KTogUHJvbWlzZTxEb21haW4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5BUEkuX19wcm90b19fLlVwZGF0ZURvbWFpbihpbnB1dCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZGVsZXRlRG9tYWluKGlkOiBzdHJpbmcpOiBQcm9taXNlPERvbWFpbj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLkFQSS5fX3Byb3RvX18uRGVsZXRlRG9tYWluKHsgaWQgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0Um9vdERvbWFpbnMob3JnSUQ6IHN0cmluZyk6IFByb21pc2U8RG9tYWluW10+IHtcclxuICAgICAgICBjb25zdCBhbGxEb21haW5zID0gYXdhaXQgdGhpcy5nZXRHZW5lcmljRG9tYWluc0FuZEZvck9yZ2FuaXNhdGlvbihcclxuICAgICAgICAgICAgb3JnSUQsXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCByb290ID0gYWxsRG9tYWlucy5maWx0ZXIoKGRvbSkgPT4gIWRvbS5wYXJlbnRJRCk7XHJcbiAgICAgICAgcmV0dXJuIHJvb3Quc29ydCgoYSwgYikgPT4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgY3JlYXRlRG9tYWluKGlucHV0OiBEb21haW4pOiBQcm9taXNlPERvbWFpbj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLkFQSS5fX3Byb3RvX18uQ3JlYXRlRG9tYWluKGlucHV0KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXREb21haW5zRm9yT3JnRm9yVHlwZShcclxuICAgICAgICB0eXBlOiBEb21haW5UeXBlLFxyXG4gICAgICAgIG9yZ2FuaXNhdGlvbklEOiBzdHJpbmcsXHJcbiAgICAgICAgb3JkZXJlZE9yZzogc3RyaW5nID0gbnVsbCxcclxuICAgICk6IFByb21pc2U8RG9tYWluW10+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRHZW5lcmljRG9tYWluc0FuZEZvck9yZ0FuZE9yZGVyZWRPcmcoXHJcbiAgICAgICAgICAgIG9yZ2FuaXNhdGlvbklELFxyXG4gICAgICAgICAgICBvcmRlcmVkT3JnLFxyXG4gICAgICAgICkudGhlbigoZG9tYWlucykgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gZG9tYWlucy5maWx0ZXIoKGRvbSkgPT4gZG9tLnR5cGUgPT09IHR5cGUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldFBhcmVudERvbWFpbnNGb3JPcmdBbmRPcmRlcmVkT3JnRm9yVHlwZShcclxuICAgICAgICB0eXBlOiBEb21haW5UeXBlLFxyXG4gICAgICAgIG9yZ2FuaXNhdGlvbklEOiBzdHJpbmcsXHJcbiAgICAgICAgb3JkZXJlZE9yZzogc3RyaW5nID0gbnVsbCxcclxuICAgICk6IFByb21pc2U8RG9tYWluW10+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRHZW5lcmljRG9tYWluc0FuZEZvck9yZ0FuZE9yZGVyZWRPcmcoXHJcbiAgICAgICAgICAgIG9yZ2FuaXNhdGlvbklELFxyXG4gICAgICAgICAgICBvcmRlcmVkT3JnLFxyXG4gICAgICAgICkudGhlbigoZG9tYWlucykgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gZG9tYWlucy5maWx0ZXIoKGRvbSkgPT4gZG9tLnR5cGUgPT09IHR5cGUgJiYgIWRvbS5wYXJlbnRJRCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0RG9tYWluc0Zvck1pc3Npb25zRm9yT3JnKG9yZ0lEOiBzdHJpbmcpOiBQcm9taXNlPERvbWFpbltdPiB7XHJcbiAgICAgICAgY29uc3QgZG9tYWlucyA9IGF3YWl0IHRoaXMuZ2V0RG9tYWluc0Zvck9yZ0V4Y2x1ZGluZ1R5cGVzKFxyXG4gICAgICAgICAgICBbRG9tYWluVHlwZS5CT09LSU5HLCBEb21haW5UeXBlLkZFQVRVUkUsIERvbWFpblR5cGUuTUlTU0lPTl0sXHJcbiAgICAgICAgICAgIG9yZ0lELFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuIGRvbWFpbnMuZmlsdGVyKChkb20pID0+ICFkb20ucGFyZW50SUQpO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|
|
98
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9tYWluLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc21hcnRlcnBsYW4tY29yZS9zcmMvbGliL3NlcnZpY2VzL21vZGVscy9kb21haW4uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM5RCxPQUFPLEVBQVUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7O0FBSXpELE1BQU0sT0FBTyxhQUFhO0lBQ3RCLEdBQUcsQ0FBTSxDQUFDLEtBQUs7SUFFZixZQUF5QyxXQUFnQjtRQUNyRCxJQUFJLENBQUMsR0FBRyxHQUFHLFdBQVcsQ0FBQztJQUMzQixDQUFDO0lBRUQsS0FBSyxDQUFDLG1DQUFtQyxDQUNyQyxjQUFzQjtRQUV0QixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ3JELE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDaEMsT0FBTyxDQUNILEdBQUcsQ0FBQyxjQUFjLEtBQUssY0FBYyxJQUFJLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FDL0QsQ0FBQztZQUNOLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsS0FBSyxDQUFDLHNDQUFzQyxDQUFDLGNBQXNCO1FBQy9ELE1BQU0sR0FBRyxHQUFhLEVBQUUsQ0FBQztRQUN6QixJQUFJLFNBQVMsR0FBa0IsSUFBSSxDQUFDO1FBRXBDLEdBQUcsQ0FBQztZQUNBLE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBSSxD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QUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFDNUQsS0FBSyxDQUNSLENBQUM7UUFDRixPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2xELENBQUM7d0dBaElRLGFBQWEsa0JBR0YsbUJBQW1COzRHQUg5QixhQUFhLGNBRlYsTUFBTTs7NEZBRVQsYUFBYTtrQkFIekIsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckI7OzBCQUlnQixNQUFNOzJCQUFDLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IGZpbHRlclVuaXF1ZUFycmF5QnlJRCB9IGZyb20gXCIuLi8uLi9oZWxwZXJzLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgRG9tYWluLCBEb21haW5UeXBlIH0gZnJvbSBcIi4uLy4uL3R5cGVzLnNlcnZpY2VcIjtcclxuQEluamVjdGFibGUoe1xyXG4gICAgcHJvdmlkZWRJbjogXCJyb290XCIsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEb21haW5TZXJ2aWNlIHtcclxuICAgIEFQSTogYW55OyAvL0FXU1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKEBJbmplY3QoJ2N1cnJlbnRBUElTZXJ2aWNlJykgYXBpSW5qZWN0ZWQ6IGFueSkge1xyXG4gICAgICAgIHRoaXMuQVBJID0gYXBpSW5qZWN0ZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0R2VuZXJpY0RvbWFpbnNBbmRGb3JPcmdhbmlzYXRpb24oXHJcbiAgICAgICAgb3JnYW5pc2F0aW9uSUQ6IHN0cmluZyxcclxuICAgICk6IFByb21pc2U8YW55IHwgdm9pZD4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLkFQSS5fX3Byb3RvX18uTGlzdERvbWFpbnMoKS50aGVuKChkb21haW5zKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBkb21haW5zLml0ZW1zLmZpbHRlcigoZG9tKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgICAgIGRvbS5vcmdhbmlzYXRpb25JRCA9PT0gb3JnYW5pc2F0aW9uSUQgfHwgIWRvbS5vcmdhbmlzYXRpb25JRFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTYW1lIGFzIGdldEdlbmVyaWNEb21haW5zQW5kRm9yT3JnYW5pc2F0aW9uKCksIGJ1dCBkcmFpbnMgZXZlcnkgcGFnZSBpbnN0ZWFkIG9mIG9ubHlcclxuICAgICAqIHRoZSBmaXJzdC4gYExpc3REb21haW5zYCBoYXMgbm8gcGVyLW9yZ2FuaXNhdGlvbiBpbmRleCDigJQgZXZlcnkgY2FsbCBhbHJlYWR5IHNjYW5zIHRoZVxyXG4gICAgICogV0hPTEUgdGFibGUgYWNyb3NzIGV2ZXJ5IG9yZ2FuaXNhdGlvbiBiZWZvcmUgZmlsdGVyaW5nIGNsaWVudC1zaWRlIOKAlCBzbyBhIGNhdGFsb2d1ZVxyXG4gICAgICogcGFzdCB0aGUgZmlyc3QgcGFnZSB3YXMgc2lsZW50bHkgaW52aXNpYmxlIHRvIGNhbGxlcnMgdGhhdCBuZWVkIHRoZSBjb21wbGV0ZSBsaXN0XHJcbiAgICAgKiAoZS5nLiBtYXRjaGluZyBhbiBvcmdhbmlzYXRpb24tc3BlY2lmaWMgZG9tYWluIGJ5IG5hbWUgYWNyb3NzIGEgc3BhY2UtdG8tc3BhY2UgY29weSkuXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGdldEFsbEdlbmVyaWNEb21haW5zQW5kRm9yT3JnYW5pc2F0aW9uKG9yZ2FuaXNhdGlvbklEOiBzdHJpbmcpOiBQcm9taXNlPERvbWFpbltdPiB7XHJcbiAgICAgICAgY29uc3QgYWxsOiBEb21haW5bXSA9IFtdO1xyXG4gICAgICAgIGxldCBuZXh0VG9rZW46IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG5cclxuICAgICAgICBkbyB7XHJcbiAgICAgICAgICAgIGNvbnN0IHBhZ2UgPSBhd2FpdCB0aGlzLkFQSS5fX3Byb3RvX18uTGlzdERvbWFpbnModW5kZWZpbmVkLCAxMDAwLCBuZXh0VG9rZW4pO1xyXG4gICAgICAgICAgICBpZiAocGFnZT8uaXRlbXM/Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGFsbC5wdXNoKC4uLnBhZ2UuaXRlbXMuZmlsdGVyKChkb206IERvbWFpbiB8IG51bGwpID0+ICEhZG9tKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbmV4dFRva2VuID0gcGFnZT8ubmV4dFRva2VuID8/IG51bGw7XHJcbiAgICAgICAgfSB3aGlsZSAobmV4dFRva2VuKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGFsbC5maWx0ZXIoZG9tID0+IGRvbS5vcmdhbmlzYXRpb25JRCA9PT0gb3JnYW5pc2F0aW9uSUQgfHwgIWRvbS5vcmdhbmlzYXRpb25JRCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0R2VuZXJpY0RvbWFpbnNBbmRGb3JPcmdBbmRPcmRlcmVkT3JnKFxyXG4gICAgICAgIG9yZ0lEOiBzdHJpbmcsXHJcbiAgICAgICAgb3JkZXJlZE9yZ0lEOiBzdHJpbmcgPSBudWxsLFxyXG4gICAgKTogUHJvbWlzZTxEb21haW5bXT4ge1xyXG4gICAgICAgIC8vIFRPRE86IENoYW5nZSB0aGlzIChVVUlEIGNhbiBjaGFuZ2UgZGVwZW5kaW5nIG9uIERCKVxyXG4gICAgICAgIGlmIChvcmdJRCA9PT0gXCI2ZTI4MjAxZi00Njc5LTRjMjktOWQyZC04YTMyNWY1N2NlZTlcIikge1xyXG4gICAgICAgICAgICAvLyBJIGFtIFNtYXJ0ZXJQbGFuLCBpIGNhbiBzZWUgYWxsXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLkFQSS5fX3Byb3RvX18uTGlzdERvbWFpbnMoKS50aGVuKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuaXRlbXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjdXJyZW50T3JnRG9tYWlucyA9XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZ2V0R2VuZXJpY0RvbWFpbnNBbmRGb3JPcmdhbmlzYXRpb24ob3JnSUQpO1xyXG4gICAgICAgIGlmICghb3JkZXJlZE9yZ0lEIHx8IG9yZ0lEID09PSBvcmRlcmVkT3JnSUQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRPcmdEb21haW5zO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBvcmRlcmVkT3JnRG9tYWlucyA9XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZ2V0R2VuZXJpY0RvbWFpbnNBbmRGb3JPcmdhbmlzYXRpb24ob3JkZXJlZE9yZ0lEKTtcclxuICAgICAgICBjb25zdCBtZXJnZWQgPSBbLi4uY3VycmVudE9yZ0RvbWFpbnMsIC4uLm9yZGVyZWRPcmdEb21haW5zXTtcclxuICAgICAgICByZXR1cm4gZmlsdGVyVW5pcXVlQXJyYXlCeUlEKG1lcmdlZCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0RG9tYWluc0Zvck9yZ0V4Y2x1ZGluZ1R5cGVzKFxyXG4gICAgICAgIHR5cGVzOiBEb21haW5UeXBlW10sXHJcbiAgICAgICAgb3JnYW5pc2F0aW9uSUQ6IHN0cmluZyxcclxuICAgICk6IFByb21pc2U8RG9tYWluW10+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRHZW5lcmljRG9tYWluc0FuZEZvck9yZ2FuaXNhdGlvbihvcmdhbmlzYXRpb25JRCkudGhlbihcclxuICAgICAgICAgICAgKGRvbWFpbnMpID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBkb21haW5zLmZpbHRlcigoZG9tKSA9PiAhdHlwZXMuaW5jbHVkZXMoZG9tLnR5cGUpKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldERvbWFpbihpZDogc3RyaW5nKTogUHJvbWlzZTxEb21haW4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5BUEkuX19wcm90b19fLkdldERvbWFpbihpZCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgdXBkYXRlRG9tYWluKGlucHV0OiBhbnkpOiBQcm9taXNlPERvbWFpbj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLkFQSS5fX3Byb3RvX18uVXBkYXRlRG9tYWluKGlucHV0KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBkZWxldGVEb21haW4oaWQ6IHN0cmluZyk6IFByb21pc2U8RG9tYWluPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuQVBJLl9fcHJvdG9fXy5EZWxldGVEb21haW4oeyBpZCB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXRSb290RG9tYWlucyhvcmdJRDogc3RyaW5nKTogUHJvbWlzZTxEb21haW5bXT4ge1xyXG4gICAgICAgIGNvbnN0IGFsbERvbWFpbnMgPSBhd2FpdCB0aGlzLmdldEdlbmVyaWNEb21haW5zQW5kRm9yT3JnYW5pc2F0aW9uKFxyXG4gICAgICAgICAgICBvcmdJRCxcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IHJvb3QgPSBhbGxEb21haW5zLmZpbHRlcigoZG9tKSA9PiAhZG9tLnBhcmVudElEKTtcclxuICAgICAgICByZXR1cm4gcm9vdC5zb3J0KChhLCBiKSA9PiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBjcmVhdGVEb21haW4oaW5wdXQ6IERvbWFpbik6IFByb21pc2U8RG9tYWluPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuQVBJLl9fcHJvdG9fXy5DcmVhdGVEb21haW4oaW5wdXQpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldERvbWFpbnNGb3JPcmdGb3JUeXBlKFxyXG4gICAgICAgIHR5cGU6IERvbWFpblR5cGUsXHJcbiAgICAgICAgb3JnYW5pc2F0aW9uSUQ6IHN0cmluZyxcclxuICAgICAgICBvcmRlcmVkT3JnOiBzdHJpbmcgPSBudWxsLFxyXG4gICAgKTogUHJvbWlzZTxEb21haW5bXT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldEdlbmVyaWNEb21haW5zQW5kRm9yT3JnQW5kT3JkZXJlZE9yZyhcclxuICAgICAgICAgICAgb3JnYW5pc2F0aW9uSUQsXHJcbiAgICAgICAgICAgIG9yZGVyZWRPcmcsXHJcbiAgICAgICAgKS50aGVuKChkb21haW5zKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBkb21haW5zLmZpbHRlcigoZG9tKSA9PiBkb20udHlwZSA9PT0gdHlwZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0UGFyZW50RG9tYWluc0Zvck9yZ0FuZE9yZGVyZWRPcmdGb3JUeXBlKFxyXG4gICAgICAgIHR5cGU6IERvbWFpblR5cGUsXHJcbiAgICAgICAgb3JnYW5pc2F0aW9uSUQ6IHN0cmluZyxcclxuICAgICAgICBvcmRlcmVkT3JnOiBzdHJpbmcgPSBudWxsLFxyXG4gICAgKTogUHJvbWlzZTxEb21haW5bXT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldEdlbmVyaWNEb21haW5zQW5kRm9yT3JnQW5kT3JkZXJlZE9yZyhcclxuICAgICAgICAgICAgb3JnYW5pc2F0aW9uSUQsXHJcbiAgICAgICAgICAgIG9yZGVyZWRPcmcsXHJcbiAgICAgICAgKS50aGVuKChkb21haW5zKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBkb21haW5zLmZpbHRlcigoZG9tKSA9PiBkb20udHlwZSA9PT0gdHlwZSAmJiAhZG9tLnBhcmVudElEKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXREb21haW5zRm9yTWlzc2lvbnNGb3JPcmcob3JnSUQ6IHN0cmluZyk6IFByb21pc2U8RG9tYWluW10+IHtcclxuICAgICAgICBjb25zdCBkb21haW5zID0gYXdhaXQgdGhpcy5nZXREb21haW5zRm9yT3JnRXhjbHVkaW5nVHlwZXMoXHJcbiAgICAgICAgICAgIFtEb21haW5UeXBlLkJPT0tJTkcsIERvbWFpblR5cGUuRkVBVFVSRSwgRG9tYWluVHlwZS5NSVNTSU9OXSxcclxuICAgICAgICAgICAgb3JnSUQsXHJcbiAgICAgICAgKTtcclxuICAgICAgICByZXR1cm4gZG9tYWlucy5maWx0ZXIoKGRvbSkgPT4gIWRvbS5wYXJlbnRJRCk7XHJcbiAgICB9XHJcbn1cclxuIl19
|
|
@@ -103,7 +103,9 @@ export class EquipmentService extends BaseObjectService {
|
|
|
103
103
|
const subEquips = [];
|
|
104
104
|
await Promise.all(equip.subequipmentsIDs.map(async (subId) => {
|
|
105
105
|
const subEquip = await this.API.GetEquipment(subId);
|
|
106
|
-
|
|
106
|
+
if (subEquip) {
|
|
107
|
+
subEquips.push(subEquip);
|
|
108
|
+
}
|
|
107
109
|
}));
|
|
108
110
|
equip.subEquipments = subEquips;
|
|
109
111
|
}
|
|
@@ -702,4 +704,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
702
704
|
type: Inject,
|
|
703
705
|
args: ['currentAwsKinesisAnalyticsService']
|
|
704
706
|
}] }, { type: i1.PoiService }, { type: i2.NavigationService }, { type: i3.OperationService }, { type: i4.TicketsService }, { type: i5.NavigatorService }, { type: i6.FilterService }, { type: i7.BaseUserService }, { type: i8.ViewerService }, { type: i9.NgbModal }, { type: i10.ZoneChangeService }] });
|
|
705
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXF1aXBtZW50LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc21hcnRlcnBsYW4tY29yZS9zcmMvbGliL3NlcnZpY2VzL21vZGVscy9lcXVpcG1lbnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0QsT0FBTyxFQUNMLHVCQUF1QixFQUN2Qix3QkFBd0IsR0FFekIsTUFBTSx1QkFBdUIsQ0FBQztBQUUvQixPQUFPLEVBTUwsUUFBUSxFQUVSLFdBQVcsRUFDWCxTQUFTLEVBR1QsT0FBTyxFQUNQLFVBQVUsRUFDVixRQUFRLEdBQ1QsTUFBTSxxQkFBcUIsQ0FBQztBQUc3QixPQUFPLEVBQ0wsWUFBWSxFQUNaLGFBQWEsRUFDYiw2QkFBNkIsRUFDN0IsY0FBYyxHQUNmLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7Ozs7Ozs7Ozs7QUFVMUQsTUFBTSxPQUFPLGdCQUFpQixTQUFRLGlCQUFpQjtJQStEM0M7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQXJFRixNQUFNLEdBQUc7UUFDZixTQUFTLEVBQUUsNEJBQTRCO1FBQ3ZDLEtBQUssRUFBRSx3QkFBd0I7UUFDL0IsU0FBUyxFQUFFLDRCQUE0QjtRQUN2QyxXQUFXLEVBQUUsOEJBQThCO1FBQzNDLEtBQUssRUFBRSx3QkFBd0I7UUFDL0IsV0FBVyxFQUFFLDhCQUE4QjtLQUM1QyxDQUFDO0lBRUYsaUJBQWlCLEdBR1osSUFBSSxPQUFPLEVBQUUsQ0FBQztJQUVuQixpQkFBaUIsR0FHYjtRQUNBLEtBQUssRUFBRSxFQUFFO1FB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QWdCLGNBRmYsTUFBTTs7NEZBRVAsZ0JBQWdCO2tCQUg1QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBMkRJLE1BQU07MkJBQUMsbUJBQW1COzswQkFDMUIsTUFBTTsyQkFBQyxtQ0FBbUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTmdiTW9kYWwgfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7XHJcbiAgb3Blbk1vZGFsRm9yVmlzaXRTd2l0Y2gsXHJcbiAgcmVtb3ZlTnVsbEtleXNGcm9tT2JqZWN0LFxyXG4gIHdhaXRVbnRpbCxcclxufSBmcm9tICcuLi8uLi9oZWxwZXJzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNYXR0ZXJ0YWdEYXRhIH0gZnJvbSAnLi4vLi4vbWF0dGVydGFnRGF0YSc7XHJcbmltcG9ydCB7XHJcbiAgTm90ZSxcclxuICBab25lLFxyXG4gIEVxdWlwbWVudCxcclxuICBFcXVpcG1lbnREb2N1bWVudCxcclxuICBUaWNrZXQsXHJcbiAgVHlwZU5vdGUsXHJcbiAgTWlzc2lvbixcclxuICBFdmVudFN0YXR1cyxcclxuICBFdmVudFR5cGUsXHJcbiAgT3BlcmF0aW9uLFxyXG4gIFBPSSxcclxuICBQb2lUeXBlLFxyXG4gIFJvbGVTdGF0dXMsXHJcbiAgU3BNb2R1bGUsXHJcbn0gZnJvbSAnLi4vLi4vdHlwZXMuc2VydmljZSc7XHJcbmltcG9ydCB7IEZpbHRlclNlcnZpY2UgfSBmcm9tICcuLi9maWx0ZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IE5hdmlnYXRvclNlcnZpY2UgfSBmcm9tICcuLi9uYXZpZ2F0b3Iuc2VydmljZSc7XHJcbmltcG9ydCB7XHJcbiAgZGVsZXRlRnJvbVMzLFxyXG4gIGdldFNpZ25lZEZpbGUsXHJcbiAgZ2V0U2lnbmVkSW1hZ2VVcmxGb3JFcXVpcG1lbnQsXHJcbiAgdXBsb2FkRmlsZVRvUzMsXHJcbn0gZnJvbSAnLi4vczMuc2VydmljZSc7XHJcbmltcG9ydCB7IEJhc2VVc2VyU2VydmljZSB9IGZyb20gJy4uL3VzZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IFZpZXdlclNlcnZpY2UgfSBmcm9tICcuLi92aWV3ZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IEJhc2VPYmplY3RTZXJ2aWNlIH0gZnJvbSAnLi9iYXNlLW9iamVjdC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTmF2aWdhdGlvblNlcnZpY2UgfSBmcm9tICcuL25hdmlnYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IE9wZXJhdGlvblNlcnZpY2UgfSBmcm9tICcuL29wZXJhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUG9pU2VydmljZSB9IGZyb20gJy4vcG9pLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUaWNrZXRzU2VydmljZSB9IGZyb20gJy4vdGlja2V0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBab25lQ2hhbmdlU2VydmljZSB9IGZyb20gXCIuLi96b25lQ2hhbmdlLnNlcnZpY2VcIjtcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBFcXVpcG1lbnRTZXJ2aWNlIGV4dGVuZHMgQmFzZU9iamVjdFNlcnZpY2Uge1xyXG4gIHByaXZhdGUgcHJlZml4ID0ge1xyXG4gICAgdGVjaG5pY2FsOiAnZXF1aXBtZW50cy9ub3RlL3RlY2huaWNhbC8nLFxyXG4gICAgaW1hZ2U6ICdlcXVpcG1lbnRzL25vdGUvaW1hZ2UvJyxcclxuICAgIGZpbmFuY2lhbDogJ2VxdWlwbWVudHMvbm90ZS9maW5hbmNpYWwvJyxcclxuICAgIGluZm9ybWF0aW9uOiAnZXF1aXBtZW50cy9ub3RlL2luZm9ybWF0aW9uLycsXHJcbiAgICBvdGhlcjogJ2VxdWlwbWVudHMvbm90ZS9vdGhlci8nLFxyXG4gICAgY29udHJhY3R1YWw6ICdlcXVpcG1lbnRzL25vdGUvY29udHJhY3R1YWwvJyxcclxuICB9O1xyXG5cclxuICBlcXVpcG1lbnRzVXBkYXRlZDogU3ViamVjdDx7XHJcbiAgICBzcGFjZTogRXF1aXBtZW50W107XHJcbiAgICB6b25lOiBFcXVpcG1lbnRbXTtcclxuICB9PiA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gIGN1cnJlbnRFcXVpcG1lbnRzOiB7XHJcbiAgICBzcGFjZTogRXF1aXBtZW50W107XHJcbiAgICB6b25lc01hcDogTWFwPHN0cmluZywgRXF1aXBtZW50W10+O1xyXG4gIH0gPSB7XHJcbiAgICAgIHNwYWNlOiBbXSxcclxuICAgICAgem9uZXNNYXA6IG5ldyBNYXAoKSxcclxuICAgIH07XHJcblxyXG4gIGVxdWlwbWVudHNUYWdzOiBCZWhhdmlvclN1YmplY3Q8RXF1aXBtZW50W10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxFcXVpcG1lbnRbXT4obnVsbCk7XHJcblxyXG4gIHpvbmVJREZpbHRlcjogc3RyaW5nO1xyXG5cclxuICBjdXJyZW50Wm9uZTogWm9uZTtcclxuXHJcbiAgY3VycmVudFNwYWNlSUQ6IHN0cmluZztcclxuXHJcbiAgZmxvb3JzUGVyU3BhY2U6IFpvbmVbXSA9IG51bGw7XHJcblxyXG4gIC8qKiBOdWxsIG1lYW5zIHdlIGRvIG5vdCBhcHBseSBhIGZpbHRlciwgZW1wdHkgYXJyYXkgKFtdKSwgbWVhbnMgd2UgdGhhdCB3ZSBoaWRlIGFsbCBlcXVpcG1lbnQgKi9cclxuICBlcXVpcG1lbnREb21haW5GaWx0ZXI6IHN0cmluZ1tdID0gbnVsbDtcclxuXHJcbiAgdXBkYXRpbmc6IFN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuICBjdXJyZW50bHlVcGRhdGluZyA9IGZhbHNlO1xyXG5cclxuICBjdXJyZW50U3dlZXA6IHN0cmluZztcclxuXHJcbiAgZGVsZXRlT2JzZXJ2YWJsZTogU3ViamVjdDxFcXVpcG1lbnQ+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgY3JlYXRlT2JzZXJ2YWJsZTogU3ViamVjdDxFcXVpcG1lbnQ+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgdXBkYXRlT2JzZXJ2YWJsZTogU3ViamVjdDxFcXVpcG1lbnQ+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgc2VsZWN0ZWRGbG9vcjogWm9uZSA9IG51bGw7XHJcblxyXG4gIEFQSTogYW55OyAvL0FXU1xyXG4gIGF3c0tpbmVzaXNBbmFseXRpY3M6IGFueTsgLy9BV1NcclxuXHJcbiAgaXNNdXNldW1Vc2VyID0gZmFsc2U7XHJcblxyXG4gIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIEBJbmplY3QoJ2N1cnJlbnRBUElTZXJ2aWNlJykgYXBpSW5qZWN0ZWQ6IGFueSxcclxuICAgIEBJbmplY3QoJ2N1cnJlbnRBd3NLaW5lc2lzQW5hbHl0aWNzU2VydmljZScpXHJcbiAgICBhd3NLaW5lc2lzQW5hbHl0aWNzSW5qZWN0ZWQ6IGFueSxcclxuICAgIHBvaVNlcnZpY2U6IFBvaVNlcnZpY2UsXHJcbiAgICBuYXZpZ2F0aW9uU2VydmljZTogTmF2aWdhdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG9wZXJhdGlvblNlcnZpY2U6IE9wZXJhdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHRpY2tldHNTZXJ2aWNlOiBUaWNrZXRzU2VydmljZSxcclxuICAgIHByaXZhdGUgbmF2aWdhdG9yU2VydmljZTogTmF2aWdhdG9yU2VydmljZSxcclxuICAgIHByaXZhdGUgZmlsdGVyU2VydmljZTogRmlsdGVyU2VydmljZSxcclxuICAgIHByaXZhdGUgdXNlclNlcnZpY2U6IEJhc2VVc2VyU2VydmljZSxcclxuICAgIHByaXZhdGUgdmlld2VyU2VydmljZTogVmlld2VyU2VydmljZSxcclxuICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBOZ2JNb2RhbCxcclxuICAgIHByaXZhdGUgem9uZUNoYW5nZVNlcnZpY2U6IFpvbmVDaGFuZ2VTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICBzdXBlcihwb2lTZXJ2aWNlLCBuYXZpZ2F0aW9uU2VydmljZSk7XHJcblxyXG4gICAgdGhpcy5BUEkgPSBhcGlJbmplY3RlZDtcclxuICAgIHRoaXMuYXdzS2luZXNpc0FuYWx5dGljcyA9IGF3c0tpbmVzaXNBbmFseXRpY3NJbmplY3RlZDtcclxuXHJcbiAgICB0aGlzLmlzTXVzZXVtVXNlciA9IHRoaXMudXNlclNlcnZpY2UuaGFzT25seU11c2V1bVJvbGUoKTtcclxuICAgIHRoaXMuaW5pdFN1YnNjcmlwdGlvbnMoKTtcclxuICAgIHRoaXMudXNlclNlcnZpY2UuaXNDaGFuZ2VkLnN1YnNjcmliZSgoaXNDb25uZWN0ZWQpID0+IHtcclxuICAgICAgaWYgKGlzQ29ubmVjdGVkKSB7XHJcbiAgICAgICAgdGhpcy5pc011c2V1bVVzZXIgPSB0aGlzLnVzZXJTZXJ2aWNlLmhhc09ubHlNdXNldW1Sb2xlKCk7XHJcbiAgICAgICAgdGhpcy5pbml0U3Vic2NyaXB0aW9ucygpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy56b25lQ2hhbmdlU2VydmljZS5mbG9vckhhc0NoYW5nZWQuc3Vic2NyaWJlKChmbG9vcikgPT4ge1xyXG4gICAgICBpZiAoZmxvb3IpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkRmxvb3IgPSBmbG9vcjtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyByZWFkRXF1aXBtZW50KGlkOiBzdHJpbmcpOiBQcm9taXNlPEVxdWlwbWVudD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuQVBJLl9fcHJvdG9fXy5HZXRFcXVpcG1lbnQoaWQpLnRoZW4oYXN5bmMgKHJlY2VpdmVkRXF1aXApID0+IHtcclxuICAgICAgbGV0IGVxdWlwOiBFcXVpcG1lbnQ7XHJcbiAgICAgIGlmIChyZWNlaXZlZEVxdWlwKSB7XHJcbiAgICAgICAgZXF1aXAgPSByZWNlaXZlZEVxdWlwO1xyXG4gICAgICAgIGVxdWlwID0gYXdhaXQgdGhpcy5nZXRTaWduZWRVcmxzRm9yRXF1aXBtZW50KHJlY2VpdmVkRXF1aXApO1xyXG4gICAgICAgIGlmIChlcXVpcC5kb21haW4pIHtcclxuICAgICAgICAgIGlmIChlcXVpcC5kb21haW4ucGFyZW50SUQpIHtcclxuICAgICAgICAgICAgZXF1aXAuY2hpbGREb21haW4gPSBlcXVpcC5kb21haW47XHJcbiAgICAgICAgICAgIGVxdWlwLnBhcmVudERvbWFpbiA9IGVxdWlwLmRvbWFpbi5wYXJlbnQ7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBlcXVpcC5wYXJlbnREb21haW4gPSBlcXVpcC5kb21haW47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChlcXVpcC5zdWJlcXVpcG1lbnRzSURzKSB7XHJcbiAgICAgICAgICBjb25zdCBzdWJFcXVpcHMgPSBbXTtcclxuICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxyXG4gICAgICAgICAgICBlcXVpcC5zdWJlcXVpcG1lbnRzSURzLm1hcChhc3luYyAoc3ViSWQpID0+IHtcclxuICAgICAgICAgICAgICBjb25zdCBzdWJFcXVpcCA9IGF3YWl0IHRoaXMuQVBJLkdldEVxdWlwbWVudChzdWJJZCk7XHJcbiAgICAgICAgICAgICAgc3ViRXF1aXBzLnB1c2goc3ViRXF1aXApO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGVxdWlwLnN1YkVxdWlwbWVudHMgPSBzdWJFcXVpcHM7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBlcXVpcDtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgY3JlYXRlRXF1aXBtZW50KFxyXG4gICAgZXF1aXA6IEVxdWlwbWVudCxcclxuICAgIGltYWdlRmlsZTogRmlsZSxcclxuICAgIGRvY3VtZW50RmlsZTogRmlsZVxyXG4gICk6IFByb21pc2U8RXF1aXBtZW50IHwgdm9pZD4ge1xyXG4gICAgcmVtb3ZlTnVsbEtleXNGcm9tT2JqZWN0KGVxdWlwKTtcclxuICAgIGlmICghIXRoaXMuYXdzS2luZXNpc0FuYWx5dGljcyAmJiAhIXRoaXMuYXdzS2luZXNpc0FuYWx5dGljcy5yZWNvcmQgJiYgdGhpcy5hd3NLaW5lc2lzQW5hbHl0aWNzLnJlY29yZCgpKSB7XHJcbiAgICAgIHRoaXMuYXdzS2luZXNpc0FuYWx5dGljcy5nZXRJbnN0YW5jZSgpLnJlY29yZChcclxuICAgICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICBldmVudFR5cGU6ICdPYmplY3QgQ3JlYXRpb24nLFxyXG4gICAgICAgICAgICBvYmplY3RUeXBlOiAnZXF1aXBtZW50JyxcclxuICAgICAgICAgICAgcG9pOiBlcXVpcCxcclxuICAgICAgICAgICAgdXNlcjogdGhpcy51c2VyU2VydmljZS5jdSxcclxuICAgICAgICAgICAgbG9jYXRpb25JZDogdGhpcy5jdXJyZW50U3BhY2VJRCxcclxuICAgICAgICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLFxyXG4gICAgICAgICAgICB6b25lSWQ6IHRoaXMuY3VycmVudFpvbmUuaWQsXHJcbiAgICAgICAgICAgIGZsb29ySWQ6IHRoaXMuc2VsZWN0ZWRGbG9vcj8uaWQsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgc3RyZWFtTmFtZTogJ3NtYXJ0ZXJwbGFuS2luZXNpcy1hbmFseXRpY3MnLFxyXG4gICAgICAgICAgLy8gcGFydGl0aW9uS2V5OiBcIlwiLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgJ0FXU0tpbmVzaXMnXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5BUEkuQ3JlYXRlRXF1aXBtZW50KGVxdWlwKS50aGVuKGFzeW5jIChyZWNlaXZlZEVxdWlwbWVudCkgPT4ge1xyXG4gICAgICBsZXQgZXF1aXBtZW50ID0gcmVjZWl2ZWRFcXVpcG1lbnQgYXMgRXF1aXBtZW50O1xyXG4gICAgICBpZiAoZXF1aXBtZW50KSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ2VxdWlwbWVudCBjcmVhdGVkOicsIGVxdWlwbWVudCk7XHJcbiAgICAgICAgaWYgKGRvY3VtZW50RmlsZSkge1xyXG4gICAgICAgICAgYXdhaXQgdGhpcy51cGxvYWREb2MoZXF1aXBtZW50LCBkb2N1bWVudEZpbGUsIFR5cGVOb3RlLlRFQ0hOSUNBTCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpbWFnZUZpbGUpIHtcclxuICAgICAgICAgIGF3YWl0IHRoaXMudXBsb2FkSW1hZ2UoZXF1aXBtZW50LCBpbWFnZUZpbGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gZXF1aXBtZW50O1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBnZXRTaWduZWRVcmxzRm9yRXF1aXBtZW50KGVxdWlwOiBFcXVpcG1lbnQpOiBQcm9taXNlPEVxdWlwbWVudD4ge1xyXG4gICAgY29uc3QgZXF1aXBtZW50ID0geyAuLi5lcXVpcCB9O1xyXG4gICAgaWYgKGVxdWlwbWVudC5ub3Rlcy5pdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGNvbnN0IGRvY3MgPSBbXTtcclxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXHJcbiAgICAgICAgZXF1aXBtZW50Lm5vdGVzLml0ZW1zLm1hcChhc3luYyAobm90ZSkgPT4ge1xyXG4gICAgICAgICAgZXF1aXBtZW50LmRvY3VtZW50YXRpb25JbWFnZVVybFNpZ25lZCA9XHJcbiAgICAgICAgICAgIGF3YWl0IGdldFNpZ25lZEltYWdlVXJsRm9yRXF1aXBtZW50KGVxdWlwbWVudCk7XHJcbiAgICAgICAgICBpZiAobm90ZS5hdHRhY2htZW50KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHsgbGVuZ3RoIH0gPSBub3RlLmF0dGFjaG1lbnQuc3BsaXQoJy8nKTtcclxuICAgICAgICAgICAgY29uc3QgZmlsZW5hbWUgPSBub3RlLmF0dGFjaG1lbnQuc3BsaXQoJy8nKVtsZW5ndGggLSAxXTtcclxuICAgICAgICAgICAgY29uc3QgYXR0YWNobWVudCA9IGF3YWl0IGdldFNpZ25lZEZpbGUobm90ZS5hdHRhY2htZW50KTtcclxuICAgICAgICAgICAgaWYgKGF0dGFjaG1lbnQpIHtcclxuICAgICAgICAgICAgICBkb2NzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgZmlsZW5hbWUsXHJcbiAgICAgICAgICAgICAgICB1cmw6IG5vdGUuYXR0YWNobWVudCxcclxuICAgICAgICAgICAgICAgIHVybFNpZ25lZDogYXR0YWNobWVudCxcclxuICAgICAgICAgICAgICAgIG5vdGVJRDogbm90ZS5pZCxcclxuICAgICAgICAgICAgICB9IGFzIEVxdWlwbWVudERvY3VtZW50KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICAgIGVxdWlwbWVudC5kb2N1bWVudHMgPSBkb2NzO1xyXG4gICAgICByZXR1cm4gZXF1aXBtZW50O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGVxdWlwbWVudDtcclxuICB9XHJcblxyXG4gIGFzeW5jIGdldEVxdWlwbWVudHNGb3JUaWNrZXQodGlja2V0OiBUaWNrZXQpOiBQcm9taXNlPEVxdWlwbWVudFtdPiB7XHJcbiAgICBjb25zdCBvcGVyYXRpb25zID0gdGlja2V0Lm9wZXJhdGlvbnMuaXRlbXM7XHJcbiAgICBpZiAob3BlcmF0aW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIG9wZXJhdGlvbnMuc29ydChcclxuICAgICAgICAoYSwgYikgPT5cclxuICAgICAgICAgIC8vIEB0cy1pZ25vcmVcclxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmV0dGllci9wcmV0dGllclxyXG4gICAgICAgICAgbmV3IERhdGUoYi5jcmVhdGVkQXQpIC0gbmV3IERhdGUoYS5jcmVhdGVkQXQpXHJcbiAgICAgICk7XHJcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxyXG4gICAgICAgIG9wZXJhdGlvbnMubWFwKGFzeW5jIChvcGVyYXRpb24pID0+IHtcclxuICAgICAgICAgIG9wZXJhdGlvbi5lcXVpcG1lbnQgPSBhd2FpdCB0aGlzLnJlYWRFcXVpcG1lbnQob3BlcmF0aW9uLmVxdWlwbWVudElEKTtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgLy8gdG8ga2VlcCB0aGUgc29ydGluZyBieSBjcmVhdGVkQXRcclxuICAgIHJldHVybiBvcGVyYXRpb25zLm1hcCgobykgPT4gby5lcXVpcG1lbnQpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZ2V0RXF1aXBtZW50c0ZvclNwYWNlKHNwYWNlSUQ6IHN0cmluZyk6IFByb21pc2U8RXF1aXBtZW50W10+IHtcclxuICAgIC8vIHNwbGl0IGJ5IDEwMFxyXG4gICAgY29uc3QgbGltaXQgPSAxMDA7XHJcbiAgICBsZXQgZXF1aXBzVG9rZW4gPSB7IGVxdWlwczogW10sIG5leHRUb2tlbjogbnVsbCB9O1xyXG4gICAgZG8ge1xyXG4gICAgICBlcXVpcHNUb2tlbiA9IGF3YWl0IHRoaXMubWVyZ2VFcXVpcG1lbnRzRm9yU3BhY2VXaXRoTmV4dFRva2VuV2l0aExpbWl0KFxyXG4gICAgICAgIHNwYWNlSUQsXHJcbiAgICAgICAgbGltaXQsXHJcbiAgICAgICAgZXF1aXBzVG9rZW5cclxuICAgICAgKTtcclxuICAgIH0gd2hpbGUgKGVxdWlwc1Rva2VuLm5leHRUb2tlbik7XHJcbiAgICByZXR1cm4gZXF1aXBzVG9rZW4uZXF1aXBzO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgbWVyZ2VFcXVpcG1lbnRzRm9yU3BhY2VXaXRoTmV4dFRva2VuV2l0aExpbWl0KFxyXG4gICAgc3BhY2VJRDogc3RyaW5nLFxyXG4gICAgbGltaXQ6IG51bWJlcixcclxuICAgIGVxdWlwc1Rva2VuOiB7IGVxdWlwczogRXF1aXBtZW50W107IG5leHRUb2tlbjogc3RyaW5nIHwgbnVsbCB9XHJcbiAgKTogUHJvbWlzZTx7IGVxdWlwczogRXF1aXBtZW50W107IG5leHRUb2tlbjogc3RyaW5nIHwgbnVsbCB9PiB7XHJcbiAgICByZXR1cm4gdGhpcy5BUEkuX19wcm90b19fXHJcbiAgICAgIC5FcXVpcG1lbnRzQnlTcGFjZShcclxuICAgICAgICBzcGFjZUlELFxyXG4gICAgICAgIG51bGwsXHJcbiAgICAgICAgJ0RFU0MnLFxyXG4gICAgICAgIG51bGwsXHJcbiAgICAgICAgbGltaXQsXHJcbiAgICAgICAgZXF1aXBzVG9rZW4ubmV4dFRva2VuIC8vIG5leHRUb2tlblxyXG4gICAgICApXHJcbiAgICAgIC50aGVuKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGVxdWlwc0xpbWl0ID0gcmVzcG9uc2UuaXRlbXM7XHJcbiAgICAgICAgY29uc3QgZXF1aXBzT2JqZWN0ID0ge1xyXG4gICAgICAgICAgZXF1aXBzOiBbLi4uZXF1aXBzVG9rZW4uZXF1aXBzLCAuLi5lcXVpcHNMaW1pdF0sXHJcbiAgICAgICAgICBuZXh0VG9rZW46IHJlc3BvbnNlLm5leHRUb2tlbixcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiBlcXVpcHNPYmplY3Q7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgdXBsb2FkSW1hZ2VGb3JBbGxFcXVpcG1lbnRzKFxyXG4gICAgZXF1aXBtZW50czogRXF1aXBtZW50W10sXHJcbiAgICBpbWFnZUZpbGU6IEZpbGVcclxuICApOiBQcm9taXNlPEVxdWlwbWVudFtdPiB7XHJcbiAgICBpZiAoZXF1aXBtZW50cy5sZW5ndGggPT09IDApIHtcclxuICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB1cGxvYWRGaWxlVG9TMyh0aGlzLnByZWZpeC5pbWFnZSwgaW1hZ2VGaWxlLCAnQkFUQ0gnKS50aGVuKFxyXG4gICAgICBhc3luYyAodXJsKSA9PiB7XHJcbiAgICAgICAgaWYgKHVybCkge1xyXG4gICAgICAgICAgY29uc3QgZXF1aXBzID0gW107XHJcbiAgICAgICAgICBmb3IgKGNvbnN0IGVxdWlwIG9mIGVxdWlwbWVudHMpIHtcclxuICAgICAgICAgICAgY29uc3QgY3VycmVudE1pc3Npb24gPSB0aGlzLnVzZXJTZXJ2aWNlLmN1cnJlbnRNaXNzaW9uKFxyXG4gICAgICAgICAgICAgIGVxdWlwLnNwYWNlSURcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5BUEkuX19wcm90b19fLkNyZWF0ZU5vdGUoe1xyXG4gICAgICAgICAgICAgIGF0dGFjaG1lbnQ6IHVybCxcclxuICAgICAgICAgICAgICB0eXBlOiBUeXBlTm90ZS5JTUFHRSxcclxuICAgICAgICAgICAgICBlcXVpcG1lbnRJRDogZXF1aXAuaWQsXHJcbiAgICAgICAgICAgICAgb3duZXJNaXNzaW9uSUQ6IGN1cnJlbnRNaXNzaW9uID8gY3VycmVudE1pc3Npb24uaWQgOiBudWxsLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY29uc3QgdXBkYXRlID0gYXdhaXQgdGhpcy5BUEkuX19wcm90b19fLlVwZGF0ZUVxdWlwbWVudCh7XHJcbiAgICAgICAgICAgICAgaWQ6IGVxdWlwLmlkLFxyXG4gICAgICAgICAgICAgIHBob3RvOiB1cmwsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBlcXVpcHMucHVzaCh1cGRhdGUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIGVxdWlwcztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBDcmVhdGVzIGEgTm90ZSBhdHRhY2hlZCB0byBhbiBlcXVpcG1lbnQgZnJvbSBhbiBTMyBrZXkgdGhhdCBBTFJFQURZIGV4aXN0c1xyXG4gICAqIChhcyBvcHBvc2VkIHRvIHVwbG9hZERvYy91cGxvYWRJbWFnZSwgd2hpY2ggdXBsb2FkIGEgZnJlc2ggYnJvd3NlciBGaWxlKS5cclxuICAgKiBVc2VkIHdoZW4gZHVwbGljYXRpbmcgZXF1aXBtZW50IGF0dGFjaG1lbnRzIGR1cmluZyBhIGNyb3NzLXZpc2l0IGNvcHk6IHRoZVxyXG4gICAqIFMzIG9iamVjdCBpdHNlbGYgaGFzIGFscmVhZHkgYmVlbiBwaHlzaWNhbGx5IGNvcGllZCBieSB0aGUgY2FsbGVyIGJlZm9yZWhhbmQsXHJcbiAgICogc28gdGhpcyBvbmx5IG5lZWRzIHRvIHJlY29yZCB0aGUgTm90ZSBwb2ludGluZyBhdCB0aGF0IG5ldyBrZXkuXHJcbiAgICovXHJcbiAgYXN5bmMgY3JlYXRlTm90ZVdpdGhFeGlzdGluZ0F0dGFjaG1lbnQoXHJcbiAgICBlcXVpcG1lbnRJRDogc3RyaW5nLFxyXG4gICAgYXR0YWNobWVudEtleTogc3RyaW5nLFxyXG4gICAgdHlwZTogVHlwZU5vdGUsXHJcbiAgICBvd25lck1pc3Npb25JRDogc3RyaW5nIHwgbnVsbCxcclxuICAgIGRhdGVzOiB7IHNpZ25EYXRlPzogbnVtYmVyIHwgbnVsbDsgZXhwaXJhdGlvbkRhdGU/OiBudW1iZXIgfCBudWxsIH0gPSB7fVxyXG4gICk6IFByb21pc2U8Tm90ZT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuQVBJLl9fcHJvdG9fXy5DcmVhdGVOb3RlKHtcclxuICAgICAgYXR0YWNobWVudDogYXR0YWNobWVudEtleSxcclxuICAgICAgdHlwZSxcclxuICAgICAgZXF1aXBtZW50SUQsXHJcbiAgICAgIG93bmVyTWlzc2lvbklELFxyXG4gICAgICBzaWduRGF0ZTogZGF0ZXMuc2lnbkRhdGUgPz8gbnVsbCxcclxuICAgICAgZXhwaXJhdGlvbkRhdGU6IGRhdGVzLmV4cGlyYXRpb25EYXRlID8/IG51bGwsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG5cclxuICBhc3luYyB1cGxvYWRJbWFnZShlcXVpcG1lbnQ6IEVxdWlwbWVudCwgaW1hZ2VGaWxlOiBGaWxlKTogUHJvbWlzZTxOb3RlPiB7XHJcbiAgICByZXR1cm4gdXBsb2FkRmlsZVRvUzModGhpcy5wcmVmaXguaW1hZ2UsIGltYWdlRmlsZSwgZXF1aXBtZW50LmlkKS50aGVuKFxyXG4gICAgICBhc3luYyAodXJsKSA9PiB7XHJcbiAgICAgICAgaWYgKHVybCkge1xyXG4gICAgICAgICAgY29uc3QgY3VycmVudE1pc3Npb24gPSB0aGlzLnVzZXJTZXJ2aWNlLmN1cnJlbnRNaXNzaW9uKFxyXG4gICAgICAgICAgICBlcXVpcG1lbnQuc3BhY2VJRFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGNvbnN0IG5vdGUgPSBhd2FpdCB0aGlzLkFQSS5fX3Byb3RvX18uQ3JlYXRlTm90ZSh7XHJcbiAgICAgICAgICAgIGF0dGFjaG1lbnQ6IHVybCxcclxuICAgICAgICAgICAgdHlwZTogVHlwZU5vdGUuSU1BR0UsXHJcbiAgICAgICAgICAgIGVxdWlwbWVudElEOiBlcXVpcG1lbnQuaWQsXHJcbiAgICAgICAgICAgIG93bmVyTWlzc2lvbklEOiBjdXJyZW50TWlzc2lvbiA/IGN1cnJlbnRNaXNzaW9uLmlkIDogbnVsbCxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgYXdhaXQgdGhpcy5BUEkuX19wcm90b19fLlVwZGF0ZUVxdWlwbWVudCh7XHJcbiAgICAgICAgICAgIGlkOiBlcXVpcG1lbnQuaWQsXHJcbiAgICAgICAgICAgIHBob3RvOiB1cmwsXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHJldHVybiBub3RlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHVwZGF0ZUVxdWlwbWVudChcclxuICAgIGVxdWlwOiBhbnksXHJcbiAgICBmaWxlOiBGaWxlID0gbnVsbCxcclxuICAgIG5vdGVUeXBlOiBUeXBlTm90ZSA9IG51bGxcclxuICApOiBQcm9taXNlPEVxdWlwbWVudD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuQVBJLl9fcHJvdG9fX1xyXG4gICAgICAuVXBkYXRlRXF1aXBtZW50KGVxdWlwKVxyXG4gICAgICAudGhlbihhc3luYyAocmVjZWl2ZWRFcXVpcG1lbnQpID0+IHtcclxuICAgICAgICBsZXQgZXF1aXBtZW50ID0gcmVjZWl2ZWRFcXVpcG1lbnQgYXMgRXF1aXBtZW50O1xyXG4gICAgICAgIGlmIChlcXVpcG1lbnQpIHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdlcXVpcG1lbnQgdXBkYXRlZDonLCBlcXVpcG1lbnQpO1xyXG4gICAgICAgICAgaWYgKG5vdGVUeXBlKSB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAobm90ZVR5cGUpIHtcclxuICAgICAgICAgICAgICBjYXNlIFR5cGVOb3RlLklNQUdFOlxyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy51cGxvYWRJbWFnZShlcXVpcG1lbnQsIGZpbGUpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMudXBsb2FkRG9jKGVxdWlwbWVudCwgZmlsZSwgbm90ZVR5cGUpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGVxdWlwbWVudDtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRQcmVmaXhEb2ModHlwZTogVHlwZU5vdGUpIHtcclxuICAgIGxldCBwcmVmaXg7XHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgY2FzZSBUeXBlTm90ZS5JTkZPUk1BVElPTjpcclxuICAgICAgICBwcmVmaXggPSB0aGlzLnByZWZpeC5pbmZvcm1hdGlvbjtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBUeXBlTm90ZS5GSU5BTkNJQUw6XHJcbiAgICAgICAgcHJlZml4ID0gdGhpcy5wcmVmaXguZmluYW5jaWFsO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFR5cGVOb3RlLkNPTlRSQUNUVUFMOlxyXG4gICAgICAgIHByZWZpeCA9IHRoaXMucHJlZml4LmNvbnRyYWN0dWFsO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFR5cGVOb3RlLk9USEVSOlxyXG4gICAgICAgIHByZWZpeCA9IHRoaXMucHJlZml4Lm90aGVyO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFR5cGVOb3RlLklNQUdFOlxyXG4gICAgICAgIHByZWZpeCA9IHRoaXMucHJlZml4LmltYWdlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHByZWZpeCA9IHRoaXMucHJlZml4LnRlY2huaWNhbDtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIHJldHVybiBwcmVmaXg7XHJcbiAgfVxyXG5cclxuICBhc3luYyB1cGxvYWREb2NGb3JBbGxFcXVpcG1lbnRzKFxyXG4gICAgZXF1aXBtZW50czogRXF1aXBtZW50W10sXHJcbiAgICBkb2N1bWVudEZpbGU6IEZpbGUsXHJcbiAgICB0eXBlOiBUeXBlTm90ZVxyXG4gICkge1xyXG4gICAgaWYgKGVxdWlwbWVudHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuICAgIGNvbnN0IHByZWZpeCA9IHRoaXMuZ2V0UHJlZml4RG9jKHR5cGUpO1xyXG4gICAgY29uc3QgdXJsID0gYXdhaXQgdXBsb2FkRmlsZVRvUzMocHJlZml4LCBkb2N1bWVudEZpbGUsICdCQVRDSCcpO1xyXG4gICAgaWYgKHVybCkge1xyXG4gICAgICBjb25zdCB1cGRhdGVMaXN0ID0gW107XHJcbiAgICAgIGZvciAoY29uc3QgZXF1aXAgb2YgZXF1aXBtZW50cykge1xyXG4gICAgICAgIGNvbnN0IG1pc3Npb24gPSB0aGlzLnVzZXJTZXJ2aWNlLmN1cnJlbnRNaXNzaW9uKGVxdWlwLnNwYWNlSUQpO1xyXG4gICAgICAgIGNvbnN0IG5ld0VxdWlwID0gYXdhaXQgdGhpcy5BUEkuX19wcm90b19fLkNyZWF0ZU5vdGUoe1xyXG4gICAgICAgICAgYXR0YWNobWVudDogdXJsLFxyXG4gICAgICAgICAgdHlwZSxcclxuICAgICAgICAgIGVxdWlwbWVudElEOiBlcXVpcC5pZCxcclxuICAgICAgICAgIG93bmVyTWlzc2lvbklEOiBtaXNzaW9uID8gbWlzc2lvbi5pZCA6IG51bGwsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdXBkYXRlTGlzdC5wdXNoKG5ld0VxdWlwKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdXBkYXRlTGlzdDtcclxuICAgIH1cclxuICAgIHJldHVybiBbXTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHVwbG9hZERvYyhcclxuICAgIGVxdWlwbWVudDogRXF1aXBtZW50LFxyXG4gICAgZG9jdW1lbnRGaWxlOiBGaWxlLFxyXG4gICAgdHlwZTogVHlwZU5vdGVcclxuICApOiBQcm9taXNlPE5vdGU+IHtcclxuICAgIGNvbnN0IHByZWZpeCA9IHRoaXMuZ2V0UHJlZml4RG9jKHR5cGUpO1xyXG4gICAgY29uc3QgbWlzc2lvbiA9IHRoaXMudXNlclNlcnZpY2UuY3VycmVudE1pc3Npb24oZXF1aXBtZW50LnNwYWNlSUQpO1xyXG4gICAgcmV0dXJuIHVwbG9hZEZpbGVUb1MzKHByZWZpeCwgZG9jdW1lbnRGaWxlLCBlcXVpcG1lbnQuaWQpLnRoZW4oXHJcbiAgICAgIGFzeW5jICh1cmwpID0+IHtcclxuICAgICAgICBpZiAodXJsKSB7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5BUEkuX19wcm90b19fLkNyZWF0ZU5vdGUoe1xyXG4gICAgICAgICAgICBhdHRhY2htZW50OiB1cmwsXHJcbiAgICAgICAgICAgIHR5cGUsXHJcbiAgICAgICAgICAgIGVxdWlwbWVudElEOiBlcXVpcG1lbnQuaWQsXHJcbiAgICAgICAgICAgIG93bmVyTWlzc2lvbklEOiBtaXNzaW9uID8gbWlzc2lvbi5pZCA6IG51bGwsXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBkZWxldGVFcXVpcG1lbnQoZXF1aXA6IEVxdWlwbWVudCk6IFByb21pc2U8RXF1aXBtZW50PiB7XHJcbiAgICBjb25zdCBkZWxldGVkID0gYXdhaXQgdGhpcy5BUEkuX19wcm90b19fLkRlbGV0ZUVxdWlwbWVudCh7IGlkOiBlcXVpcC5pZCB9KTtcclxuICAgIGNvbnNvbGUubG9nKCdEZWxldGVkIGVxdWlwbWVudCcsIGRlbGV0ZWQpO1xyXG5cclxuICAgIC8vIGRlbGV0ZSBQT0lcclxuICAgIGNvbnN0IFtwb2ldID0gZXF1aXAucG9pcy5pdGVtcztcclxuICAgIGlmIChwb2kpIHtcclxuICAgICAgYXdhaXQgdGhpcy5wb2lTZXJ2aWNlLmRlbGV0ZVBvaShwb2kuaWQpO1xyXG4gICAgfVxyXG4gICAgLy8gZGVsZXRlIG5vdGVzIHJlbGF0ZWRcclxuICAgIGlmIChlcXVpcC5ub3Rlcy5pdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxyXG4gICAgICAgIGVxdWlwLm5vdGVzLml0ZW1zLm1hcChhc3luYyAobm90ZTogTm90ZSkgPT4ge1xyXG4gICAgICAgICAgLy8gZGVsZXRlIGZpbGVzIGZyb20gUzNcclxuICAgICAgICAgIC8qKiBOb3Qgc2hhcmVkIHdpdGggb3RoZXIgZXF1aXBtZW50ICovXHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIG5vdGUuYXR0YWNobWVudCAmJlxyXG4gICAgICAgICAgICAhbm90ZS5hdHRhY2htZW50LnNwbGl0KCcvJykucG9wKCkuc3RhcnRzV2l0aCgnQkFUQ0hfJylcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBhd2FpdCBkZWxldGVGcm9tUzMobm90ZS5hdHRhY2htZW50KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGF3YWl0IHRoaXMuQVBJLl9fcHJvdG9fXy5EZWxldGVOb3RlKHsgaWQ6IG5vdGUuaWQgfSk7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIC8vIGRlbGV0ZSBvcGVyYXRpb25zIChyZW1vdmUgZnJvbSBsaW5rZWQgdGlja2V0cylcclxuICAgIGF3YWl0IHRoaXMub3BlcmF0aW9uU2VydmljZS5kZWxldGVPcGVyYXRpb25zRm9yRXF1aXBtZW50KGVxdWlwLmlkKTtcclxuICAgIHJldHVybiBkZWxldGVkO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgdXBkYXRlRXF1aXBtZW50TG9jYXRpb24oXHJcbiAgICBlcXVpcDogRXF1aXBtZW50LFxyXG4gICAgdGFnRGF0YTogTWF0dGVydGFnRGF0YVxyXG4gICk6IFByb21pc2U8UE9JPiB7XHJcbiAgICBjb25zdCBwb2lJbnB1dCA9IHtcclxuICAgICAgY29vcmRpbmF0ZTogdGFnRGF0YS5nZXRDb29yZGluYXRlU3RyaW5nKCksXHJcbiAgICAgIHR5cGU6IFBvaVR5cGUuRVFVSVBNRU5ULFxyXG4gICAgICBlbGVtZW50SUQ6IGVxdWlwLmlkLFxyXG4gICAgICBtZXRhZGF0YTogdGFnRGF0YS5nZXRNZXRhZGF0YVN0cmluZygpLFxyXG4gICAgICBtYXR0ZXJwb3J0U3dlZXBJRDogdGFnRGF0YS5nZXRTd2VlcElEKCksXHJcbiAgICB9IGFzIFBPSTtcclxuICAgIGNvbnN0IHBvaSA9IGF3YWl0IHRoaXMucG9pU2VydmljZS5jcmVhdGVQT0lGb3JTcGFjZUlEKHBvaUlucHV0KTtcclxuICAgIHJldHVybiBwb2k7XHJcbiAgfVxyXG5cclxuICBhc3luYyByZW1vdmVUaWNrZXRGcm9tRXF1aXBtZW50KFxyXG4gICAgdGlja2V0OiBUaWNrZXQsXHJcbiAgICBlcXVpcDogRXF1aXBtZW50XHJcbiAgKTogUHJvbWlzZTxPcGVyYXRpb24+IHtcclxuICAgIGNvbnN0IG9wZXJhdGlvbkVxdWlwID1cclxuICAgICAgYXdhaXQgdGhpcy5vcGVyYXRpb25TZXJ2aWNlLmdldE9wZXJhdGlvbnNCeUVxdWlwbWVudElEKGVxdWlwLmlkKTtcclxuICAgIGNvbnN0IG9wZXJhdGlvblRvRGVsZXRlID0gb3BlcmF0aW9uRXF1aXAuZmluZChcclxuICAgICAgKG9wKSA9PiBvcC50aWNrZXRJRCA9PT0gdGlja2V0LmlkXHJcbiAgICApO1xyXG4gICAgcmV0dXJuIHRoaXMub3BlcmF0aW9uU2VydmljZVxyXG4gICAgICAuZGVsZXRlT3BlcmF0aW9uKG9wZXJhdGlvblRvRGVsZXRlLmlkKVxyXG4gICAgICAudGhlbigocmVzKSA9PiB7XHJcbiAgICAgICAgdGhpcy50aWNrZXRzU2VydmljZS5hZGRFdmVudFRvVGlja2V0KHRpY2tldCBhcyBUaWNrZXQsIHtcclxuICAgICAgICAgIHRpdGxlOiAnRXF1aXBlbWVudCByZXRpcsOpIGR1IHRpY2tldCcsXHJcbiAgICAgICAgICBkZXNjcmlwdGlvbjogYEVxdWlwZW1lbnQgJHtlcXVpcC5uYW1lfSBhIMOpdMOpIHJldGlyw6kgZHUgdGlja2V0YCxcclxuICAgICAgICAgIHN0YXR1czogRXZlbnRTdGF0dXMuVU5MSU5LRURfRlJPTV9FUVVJUE1FTlQsXHJcbiAgICAgICAgICB0eXBlOiBFdmVudFR5cGUuVElDS0VULFxyXG4gICAgICAgICAgdHJhbnNsYXRpb25QYXRoOiAndGlja2V0RXZlbnQudGlja2V0LnVubGlua2VkRnJvbUVxdWlwbWVudCcsXHJcbiAgICAgICAgICBtZXRhZGF0YTogSlNPTi5zdHJpbmdpZnkoeyBlcXVpcG1lbnQ6IGVxdWlwLm5hbWUgfSksXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBpbml0RXF1aXBzKCkge1xyXG4gICAgaWYgKCF0aGlzLmN1cnJlbnRTcGFjZUlEIHx8IHRoaXMudXNlclNlcnZpY2UuZ2V0U3BNb2R1bGUoKSA9PT0gU3BNb2R1bGUuTVVTRVVNKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMudXBkYXRpbmcubmV4dCh0cnVlKTtcclxuICAgIHRoaXMuY3VycmVudGx5VXBkYXRpbmcgPSB0cnVlO1xyXG4gICAgbGV0IGVxTGlzdCA9IGF3YWl0IHRoaXMuZ2V0RXF1aXBtZW50c0ZvclNwYWNlKHRoaXMuY3VycmVudFNwYWNlSUQpO1xyXG4gICAgZXFMaXN0ID0gYXdhaXQgdGhpcy5maWx0ZXJTZXJ2aWNlLmZpbHRlckVxdWlwbWVudHNGb3JDdXJyZW50VXNlckluU3BhY2UoXHJcbiAgICAgIHRoaXMuY3VycmVudFNwYWNlSUQsXHJcbiAgICAgIGVxTGlzdFxyXG4gICAgKTtcclxuICAgIC8vIGNvbnNvbGUubG9nKGVxTGlzdCk7XHJcbiAgICBpZiAoZXFMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgbGV0IGZpbHRlcmVkRXF1aXBzID0gZXFMaXN0LmZpbHRlcihcclxuICAgICAgICAoZXF1aXBtZW50KSA9PiAhdGhpcy5pc0FyY2hpdmVkKGVxdWlwbWVudClcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxyXG4gICAgICAgIGZpbHRlcmVkRXF1aXBzLm1hcChhc3luYyAoZXF1aXApID0+IHtcclxuICAgICAgICAgIGVxdWlwLmRvY3VtZW50YXRpb25JbWFnZVVybFNpZ25lZCA9XHJcbiAgICAgICAgICAgIGF3YWl0IGdldFNpZ25lZEltYWdlVXJsRm9yRXF1aXBtZW50KGVxdWlwKTtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgICBpZiAodGhpcy5lcXVpcG1lbnREb21haW5GaWx0ZXIpIHtcclxuICAgICAgICBmaWx0ZXJlZEVxdWlwcyA9IHRoaXMuZmlsdGVyU2VydmljZS5maWx0ZXJFcXVpcG1lbnRzQnlEb21haW5MaXN0KFxyXG4gICAgICAgICAgZmlsdGVyZWRFcXVpcHMsXHJcbiAgICAgICAgICB0aGlzLmVxdWlwbWVudERvbWFpbkZpbHRlclxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5jdXJyZW50RXF1aXBtZW50cy5zcGFjZSA9IGZpbHRlcmVkRXF1aXBzO1xyXG4gICAgICBpZiAodGhpcy56b25lSURGaWx0ZXIpIHtcclxuICAgICAgICBmaWx0ZXJlZEVxdWlwcyA9IChhd2FpdCB0aGlzLmZpbHRlclNlcnZpY2UuZmlsdGVyT2JqZWN0c0ZvclpvbmUoXHJcbiAgICAgICAgICBmaWx0ZXJlZEVxdWlwcyxcclxuICAgICAgICAgIHRoaXMuem9uZUlERmlsdGVyLFxyXG4gICAgICAgICAgdGhpcy5jdXJyZW50Wm9uZVxyXG4gICAgICAgICkpIGFzIEVxdWlwbWVudFtdO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuY3VycmVudEVxdWlwbWVudHMuem9uZXNNYXAuc2V0KHRoaXMuem9uZUlERmlsdGVyLCBmaWx0ZXJlZEVxdWlwcyk7XHJcbiAgICAgIHRoaXMuZXF1aXBtZW50c1RhZ3MubmV4dChmaWx0ZXJlZEVxdWlwcyk7IC8vIGFkZGluZyB0YWdzIG9ubHkgZm9yIHRoZSBjdXJyZW50IHpvbmVcclxuICAgICAgdGhpcy5lcXVpcG1lbnRzVXBkYXRlZC5uZXh0KHtcclxuICAgICAgICBzcGFjZTogdGhpcy5jdXJyZW50RXF1aXBtZW50cy5zcGFjZSxcclxuICAgICAgICB6b25lOiBmaWx0ZXJlZEVxdWlwcyxcclxuICAgICAgfSk7IC8vIGZvciBsYXRlcmFsIG1lbnVcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLnpvbmVJREZpbHRlcikge1xyXG4gICAgICAgIHRoaXMuY3VycmVudEVxdWlwbWVudHMuem9uZXNNYXAuc2V0KHRoaXMuem9uZUlERmlsdGVyLCBbXSk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5lcXVpcG1lbnRzVXBkYXRlZC5uZXh0KHsgc3BhY2U6IFtdLCB6b25lOiBbXSB9KTsgLy8gZm9yIGxhdGVyYWwgbWVudVxyXG4gICAgfVxyXG4gICAgLy8gY29uc29sZS5sb2codGhpcy5jdXJyZW50RXF1aXBtZW50cyk7XHJcbiAgICB0aGlzLnVwZGF0aW5nLm5leHQoZmFsc2UpO1xyXG4gICAgdGhpcy5jdXJyZW50bHlVcGRhdGluZyA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZ2V0RXF1aXBtZW50c0ZvckN1cnJlbnRVc2VyRm9yU3BhY2UoXHJcbiAgICBzcGFjZUlELFxyXG4gICAgbWlzc2lvbnM6IE1pc3Npb25bXVxyXG4gICk6IFByb21pc2U8RXF1aXBtZW50W10+IHtcclxuICAgIGxldCByZXN1bHRzID0gW107XHJcblxyXG4gICAgY29uc3Qgc3BhY2VNaXNzaW9ucyA9IG1pc3Npb25zLmZpbHRlcigobSkgPT4gbS5zcGFjZUlEID09PSBzcGFjZUlEKTtcclxuICAgIGlmIChzcGFjZU1pc3Npb25zLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICByZXR1cm4gcmVzdWx0cztcclxuICAgIH1cclxuICAgIGNvbnN0IGNhblNlZUVxdWlwcyA9IHNwYWNlTWlzc2lvbnMuc29tZShcclxuICAgICAgKG0pID0+XHJcbiAgICAgICAgdGhpcy51c2VyU2VydmljZS5tYW5hZ2Vycy5pbmNsdWRlcyhtLnJvbGUpIHx8XHJcbiAgICAgICAgbS5yb2xlID09PSBSb2xlU3RhdHVzLlNFUlZJQ0VcclxuICAgICk7XHJcbiAgICBpZiAoIWNhblNlZUVxdWlwcykge1xyXG4gICAgICByZXR1cm4gcmVzdWx0cztcclxuICAgIH1cclxuICAgIGxldCBkb21haW5zID0gW107XHJcbiAgICBmb3IgKGNvbnN0IG0gb2Ygc3BhY2VNaXNzaW9ucykge1xyXG4gICAgICBkb21haW5zID0gWy4uLmRvbWFpbnMsIG0uZG9tYWluc107XHJcbiAgICB9XHJcbiAgICBpZiAoZG9tYWlucy5sZW5ndGggPT09IDApIHtcclxuICAgICAgcmV0dXJuIHJlc3VsdHM7XHJcbiAgICB9XHJcbiAgICByZXN1bHRzID0gYXdhaXQgdGhpcy5nZXRFcXVpcG1lbnRzRm9yU3BhY2Uoc3BhY2VJRCk7XHJcbiAgICAvLyByZXN1bHRzID0gdGhpcy5maWx0ZXJTZXJ2aWNlLmZpbHRlckVxdWlwbWVudHNCeURvbWFpbkxpc3QoXHJcbiAgICAvLyAgICAgcmVzdWx0cyxcclxuICAgIC8vICAgICBkb21haW5zLFxyXG4gICAgLy8gKTtcclxuICAgIHJldHVybiByZXN1bHRzO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgdXBkYXRlSWNvbkZvckFsbEVxdWlwbWVudHNJblNwYWNlKFxyXG4gICAgdGFnSWNvbjogc3RyaW5nLFxyXG4gICAgc3BhY2VJRDogc3RyaW5nLFxyXG4gICAgZG9tYWluSUQ6IHN0cmluZyA9IG51bGxcclxuICApOiBQcm9taXNlPHsgZXF1aXBzOiBFcXVpcG1lbnRbXTsgcG9pczogUE9JW10gfT4ge1xyXG4gICAgbGV0IGVxdWlwcyA9IGF3YWl0IHRoaXMuZ2V0RXF1aXBtZW50c0ZvclNwYWNlKHNwYWNlSUQpO1xyXG4gICAgaWYgKGRvbWFpbklEKSB7XHJcbiAgICAgIGVxdWlwcyA9IGVxdWlwcy5maWx0ZXIoKGVxdWlwKSA9PiBlcXVpcC5kb21haW5JRCA9PT0gZG9tYWluSUQpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgcG9pcyA9IGF3YWl0IHRoaXMudXBkYXRlSWNvbkZvckFsbE9iamVjdHMoZXF1aXBzLCB0YWdJY29uKTtcclxuICAgIHJldHVybiB7IGVxdWlwcywgcG9pcyB9O1xyXG4gIH1cclxuXHJcbiAgLyoqIFJldHVybiB0cnVlIGlmIHRoZSBjdXJyZW50IHVzZXIgaGFzIGFyY2hpdmVkIHRoaXMgZXF1aXBtZW50ICovXHJcbiAgaXNBcmNoaXZlZChlcXVpcG1lbnQ6IEVxdWlwbWVudCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGVxdWlwbWVudC5hcmNoaXZlZEZvck1pc3Npb25JRFxyXG4gICAgICA/IGVxdWlwbWVudC5hcmNoaXZlZEZvck1pc3Npb25JRC5pbmNsdWRlcyhcclxuICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLmN1cnJlbnRNaXNzaW9uKGVxdWlwbWVudC5zcGFjZUlEKS5pZFxyXG4gICAgICApXHJcbiAgICAgIDogZmFsc2U7XHJcbiAgfVxyXG5cclxuICBzZXRBcmNoaXZlZChlcXVpcG1lbnQ6IEVxdWlwbWVudCwgYXJjaGl2ZWQ6IGJvb2xlYW4pIHtcclxuICAgIGxldCBhcmNoaXZlZExpc3QgPSBlcXVpcG1lbnQuYXJjaGl2ZWRGb3JNaXNzaW9uSURcclxuICAgICAgPyBlcXVpcG1lbnQuYXJjaGl2ZWRGb3JNaXNzaW9uSURcclxuICAgICAgOiBbXTtcclxuICAgIGNvbnN0IG1pc3Npb25JRCA9IHRoaXMudXNlclNlcnZpY2UuY3VycmVudE1pc3Npb24oZXF1aXBtZW50LnNwYWNlSUQpLmlkO1xyXG5cclxuICAgIGFyY2hpdmVkTGlzdCA9IGFyY2hpdmVkTGlzdC5maWx0ZXIoKG0pID0+IG0gIT09IG1pc3Npb25JRCk7XHJcblxyXG4gICAgaWYgKGFyY2hpdmVkKSB7XHJcbiAgICAgIGFyY2hpdmVkTGlzdC5wdXNoKG1pc3Npb25JRCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMudXBkYXRlRXF1aXBtZW50KHtcclxuICAgICAgaWQ6IGVxdWlwbWVudC5pZCxcclxuICAgICAgYXJjaGl2ZWRGb3JNaXNzaW9uSUQ6IGFyY2hpdmVkTGlzdCxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZGVsZXRlRmlsZShkb2N1bWVudF86IEVxdWlwbWVudERvY3VtZW50KSB7XHJcbiAgICBhd2FpdCBkZWxldGVGcm9tUzMoZG9jdW1lbnRfLnVybCk7XHJcbiAgICBhd2FpdCB0aGlzLkFQSS5EZWxldGVOb3RlKHsgaWQ6IGRvY3VtZW50Xy5ub3RlSUQgfSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBuYXZpZ2F0ZVRvRXF1aXBtZW50SW4zRChcclxuICAgIGVxdWlwbWVudDogRXF1aXBtZW50LFxyXG4gICAgZm9yY2VTd2l0Y2hWaXNpdDogYm9vbGVhbiA9IGZhbHNlXHJcbiAgKSB7XHJcbiAgICBsZXQgdXJsID0gYHZpc2l0LyR7ZXF1aXBtZW50LnNwYWNlSUR9YDtcclxuICAgIGlmIChmb3JjZVN3aXRjaFZpc2l0KSB7XHJcbiAgICAgIHVybCArPSBgL2VxdWlwLyR7ZXF1aXBtZW50LmlkfWA7XHJcbiAgICB9XHJcbiAgICBjb25zdCBjYW5Hb1RvVGFnID0gYXdhaXQgdGhpcy52aWV3ZXJTZXJ2aWNlLmFjdGlvbl9tb3ZlX3RvX3RhZyhcclxuICAgICAgYCR7ZXF1aXBtZW50LmlkfWBcclxuICAgICk7XHJcbiAgICBpZiAoY2FuR29Ub1RhZykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmdldE1vZGVsM2RBbmRTd2VlcChlcXVpcG1lbnQpO1xyXG5cclxuICAgIGlmICghcmVzdWx0IHx8ICFyZXN1bHQubW9kZWwzRCkge1xyXG4gICAgICBhbGVydCgnRXJyb3Igd2hpbGUgZ2V0dGluZyB2aXJ0dWFsIHZpc2l0IG1vZGVsJyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICghZm9yY2VTd2l0Y2hWaXNpdCkge1xyXG4gICAgICAvLyBjaGVjayBpZiB3ZSBhcmUgbW92aW5nIHdpdGhpbiB0aGUgc2FtZSAzRCBtb2RlbFxyXG4gICAgICBjb25zdCBjdXJyZW50TW9kZWwgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnbW9kZWwzRCcpO1xyXG4gICAgICBpZiAoY3VycmVudE1vZGVsICYmIGN1cnJlbnRNb2RlbCA9PT0gcmVzdWx0Lm1vZGVsM0QpIHtcclxuICAgICAgICAvLyB3ZSBhZGQgdGFnIHRvIHRoZSB2aXNpdFxyXG4gICAgICAgIGNvbnN0IHBvaSA9IGVxdWlwbWVudC5wb2lzLml0ZW1zWzBdO1xyXG4gICAgICAgIGlmIChwb2kuY29vcmRpbmF0ZSkge1xyXG4gICAgICAgICAgLy8gd2UgZm9yY2UgYWRkIGJlY2F1c2Ugd2UgbWlnaHQgYmUgaW4gYW4gYW5vdGhlciB6b25lXHJcbiAgICAgICAgICBhd2FpdCB0aGlzLnZpZXdlclNlcnZpY2UuYWN0aW9uQWRkT2JqZWN0RnJvbVBPSShlcXVpcG1lbnQsIHBvaSk7XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLnZpZXdlclNlcnZpY2UuYWN0aW9uX21vdmVfdG9fdGFnKGVxdWlwbWVudC5pZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8qKiBTaSBvbiBuZSBmb3JjZSBwYXMgbGEgdmlzaXRlLCBvbiBkZW1hbmRlIHNpIG9uIHZldXQgZXRyZSBzd2l0Y2ggKi9cclxuICAgICAgICBvcGVuTW9kYWxGb3JWaXNpdFN3aXRjaChcclxuICAgICAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLFxyXG4gICAgICAgICAgcmVzdWx0Lm1vZGVsM0QsXHJcbiAgICAgICAgICBlcXVpcG1lbnQuc3BhY2VJRCxcclxuICAgICAgICAgIHsgc3dlZXBUb01vdmU6IHJlc3VsdC5zd2VlcCwgcm90YXRpb246IHJlc3VsdC5yb3RhdGlvbiB9XHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgd2luZG93Lm9wZW4oYCR7dXJsfT9tb2RlbDNEPSR7cmVzdWx0Lm1vZGVsM0R9JnN3ZWVwPXRydWVgLCAnX2JsYW5rJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyB1cGRhdGVFcXVpcHNGb3Jab25lKCkge1xyXG4gICAgdGhpcy51cGRhdGluZy5uZXh0KHRydWUpO1xyXG4gICAgbGV0IGZpbHRlcmVkRXF1aXBzID0gW107XHJcbiAgICBpZiAodGhpcy5jdXJyZW50RXF1aXBtZW50cy5zcGFjZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLnpvbmVJREZpbHRlciAmJlxyXG4gICAgICAgIHRoaXMuY3VycmVudEVxdWlwbWVudHMuem9uZXNNYXAuaGFzKHRoaXMuem9uZUlERmlsdGVyKVxyXG4gICAgICApIHtcclxuICAgICAgICBmaWx0ZXJlZEVxdWlwcyA9IHRoaXMuY3VycmVudEVxdWlwbWVudHMuem9uZXNNYXAuZ2V0KHRoaXMuem9uZUlERmlsdGVyKTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhcImkgaGF2ZSBlcXVpcHMgZm9yIHRoaXMgem9uZVwiLCBmaWx0ZXJlZEVxdWlwcyk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZmlsdGVyZWRFcXVpcHMgPSAoYXdhaXQgdGhpcy5maWx0ZXJTZXJ2aWNlLmZpbHRlck9iamVjdHNGb3Jab25lKFxyXG4gICAgICAgICAgdGhpcy5jdXJyZW50RXF1aXBtZW50cy5zcGFjZSxcclxuICAgICAgICAgIHRoaXMuem9uZUlERmlsdGVyLFxyXG4gICAgICAgICAgdGhpcy5jdXJyZW50Wm9uZVxyXG4gICAgICAgICkpIGFzIEVxdWlwbWVudFtdO1xyXG5cclxuICAgICAgICB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnpvbmVzTWFwLnNldCh0aGlzLnpvbmVJREZpbHRlciwgW1xyXG4gICAgICAgICAgLi4uZmlsdGVyZWRFcXVpcHMsXHJcbiAgICAgICAgXSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuZXF1aXBtZW50RG9tYWluRmlsdGVyKSB7XHJcbiAgICAgICAgZmlsdGVyZWRFcXVpcHMgPSB0aGlzLmZpbHRlclNlcnZpY2UuZmlsdGVyRXF1aXBtZW50c0J5RG9tYWluTGlzdChcclxuICAgICAgICAgIGZpbHRlcmVkRXF1aXBzLFxyXG4gICAgICAgICAgdGhpcy5lcXVpcG1lbnREb21haW5GaWx0ZXJcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZXF1aXBtZW50c1RhZ3MubmV4dChmaWx0ZXJlZEVxdWlwcyk7IC8vIGFkZGluZyB0YWdzIG9ubHkgZm9yIHRoZSBjdXJyZW50IHpvbmVcclxuICAgICAgdGhpcy5lcXVpcG1lbnRzVXBkYXRlZC5uZXh0KHtcclxuICAgICAgICBzcGFjZTogdGhpcy5jdXJyZW50RXF1aXBtZW50cy5zcGFjZSxcclxuICAgICAgICB6b25lOiBmaWx0ZXJlZEVxdWlwcyxcclxuICAgICAgfSk7IC8vIGZvciBsYXRlcmFsIG1lbnVcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZXF1aXBtZW50c1VwZGF0ZWQubmV4dCh7IHNwYWNlOiBbXSwgem9uZTogW10gfSk7IC8vIGZvciBsYXRlcmFsIG1lbnVcclxuICAgIH1cclxuICAgIHRoaXMudXBkYXRpbmcubmV4dChmYWxzZSk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVEdWVUb0RlbGV0ZShkZWxldGVkRXF1aXBtZW50OiBFcXVpcG1lbnQpIHtcclxuICAgIC8vIGNvbnNvbGUubG9nKFwidXBkYXRlIGR1ZSB0byBkZWxldGVcIiwgZGVsZXRlZEVxdWlwbWVudCk7XHJcbiAgICBjb25zdCBlcXVpcCA9IHRoaXMuY3VycmVudEVxdWlwbWVudHMuc3BhY2UuZmluZChcclxuICAgICAgKF9lcXVpcCkgPT4gX2VxdWlwLmlkID09PSBkZWxldGVkRXF1aXBtZW50LmlkXHJcbiAgICApO1xyXG4gICAgaWYgKGVxdWlwKSB7XHJcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5jdXJyZW50RXF1aXBtZW50cy5zcGFjZS5pbmRleE9mKGVxdWlwKTtcclxuICAgICAgdGhpcy5jdXJyZW50RXF1aXBtZW50cy5zcGFjZS5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgfVxyXG4gICAgZm9yIChjb25zdCB6b25lIG9mIHRoaXMuY3VycmVudEVxdWlwbWVudHMuem9uZXNNYXAua2V5cygpKSB7XHJcbiAgICAgIGNvbnN0IGVxdWlwVG9EZWxldGUgPSB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnpvbmVzTWFwXHJcbiAgICAgICAgLmdldCh6b25lKVxyXG4gICAgICAgIC5maW5kKChfZXF1aXApID0+IF9lcXVpcC5pZCA9PT0gZGVsZXRlZEVxdWlwbWVudC5pZCk7XHJcbiAgICAgIGlmIChlcXVpcFRvRGVsZXRlKSB7XHJcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnpvbmVzTWFwXHJcbiAgICAgICAgICAuZ2V0KHpvbmUpXHJcbiAgICAgICAgICAuaW5kZXhPZihlcXVpcFRvRGVsZXRlKTtcclxuICAgICAgICB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnpvbmVzTWFwLmdldCh6b25lKS5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmVxdWlwbWVudHNVcGRhdGVkLm5leHQoe1xyXG4gICAgICBzcGFjZTogdGhpcy5jdXJyZW50RXF1aXBtZW50cy5zcGFjZSxcclxuICAgICAgem9uZTogdGhpcy5jdXJyZW50RXF1aXBtZW50cy56b25lc01hcC5nZXQodGhpcy56b25lSURGaWx0ZXIpLFxyXG4gICAgfSk7IC8vIGZvciBsYXRlcmFsIG1lbnVcclxuICB9XHJcblxyXG4gIHVwZGF0ZUR1ZVRvQ3JlYXRlKGNyZWF0ZWRFcXVpcDogRXF1aXBtZW50KSB7XHJcbiAgICB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnNwYWNlLnVuc2hpZnQoY3JlYXRlZEVxdWlwKTtcclxuICAgIHRoaXMuY3VycmVudEVxdWlwbWVudHMuem9uZXNNYXBcclxuICAgICAgLmdldCh0aGlzLnpvbmVJREZpbHRlcilcclxuICAgICAgLnVuc2hpZnQoY3JlYXRlZEVxdWlwKTtcclxuICAgIHRoaXMuZXF1aXBtZW50c1VwZGF0ZWQubmV4dCh7XHJcbiAgICAgIHNwYWNlOiB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnNwYWNlLFxyXG4gICAgICB6b25lOiB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnpvbmVzTWFwLmdldCh0aGlzLnpvbmVJREZpbHRlciksXHJcbiAgICB9KTsgLy8gZm9yIGxhdGVyYWwgbWVudVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlRHVlVG9FcXVpcFVwZGF0ZWQodXBkYXRlZEVxdWlwOiBFcXVpcG1lbnQpIHtcclxuICAgIGNvbnN0IGVxdWlwID0gdGhpcy5jdXJyZW50RXF1aXBtZW50cy5zcGFjZS5maW5kKFxyXG4gICAgICAoX2VxdWlwKSA9PiBfZXF1aXAuaWQgPT09IHVwZGF0ZWRFcXVpcC5pZFxyXG4gICAgKTtcclxuICAgIGlmIChlcXVpcCkge1xyXG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMuY3VycmVudEVxdWlwbWVudHMuc3BhY2UuaW5kZXhPZihlcXVpcCk7XHJcbiAgICAgIGlmICh0aGlzLmlzQXJjaGl2ZWQoZXF1aXApKSB7XHJcbiAgICAgICAgLy8gd2UgcmVtb3ZlIGFyY2hpdmVkIGVxdWlwbWVudFxyXG4gICAgICAgIHRoaXMuY3VycmVudEVxdWlwbWVudHMuc3BhY2Uuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnNwYWNlLnNwbGljZShpbmRleCwgMSwgdXBkYXRlZEVxdWlwKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZm9yIChjb25zdCB6b25lIG9mIHRoaXMuY3VycmVudEVxdWlwbWVudHMuem9uZXNNYXAua2V5cygpKSB7XHJcbiAgICAgIGNvbnN0IGVxdWlwVG9VcGQgPSB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnpvbmVzTWFwXHJcbiAgICAgICAgLmdldCh6b25lKVxyXG4gICAgICAgIC5maW5kKChfZXF1aXApID0+IF9lcXVpcC5pZCA9PT0gdXBkYXRlZEVxdWlwLmlkKTtcclxuICAgICAgaWYgKGVxdWlwVG9VcGQpIHtcclxuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuY3VycmVudEVxdWlwbWVudHMuem9uZXNNYXBcclxuICAgICAgICAgIC5nZXQoem9uZSlcclxuICAgICAgICAgIC5pbmRleE9mKGVxdWlwVG9VcGQpO1xyXG4gICAgICAgIGlmICh0aGlzLmlzQXJjaGl2ZWQoZXF1aXApKSB7XHJcbiAgICAgICAgICB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnpvbmVzTWFwLmdldCh6b25lKS5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnpvbmVzTWFwXHJcbiAgICAgICAgICAgIC5nZXQoem9uZSlcclxuICAgICAgICAgICAgLnNwbGljZShpbmRleCwgMSwgdXBkYXRlZEVxdWlwKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuZXF1aXBtZW50c1VwZGF0ZWQubmV4dCh7XHJcbiAgICAgIHNwYWNlOiB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnNwYWNlLFxyXG4gICAgICB6b25lOiB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnpvbmVzTWFwLmdldCh0aGlzLnpvbmVJREZpbHRlciksXHJcbiAgICB9KTsgLy8gZm9yIGxhdGVyYWwgbWVudVxyXG4gIH1cclxuXHJcbiAgaW5pdFN1YnNjcmlwdGlvbnMoKSB7XHJcbiAgICBpZiAodGhpcy51c2VyU2VydmljZS5nZXRTcE1vZHVsZSgpID09PSBTcE1vZHVsZS5NVVNFVU0pIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy56b25lQ2hhbmdlU2VydmljZS56b25lQ2hhbmdlXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSgoem9uZSkgPT4ge1xyXG4gICAgICAgIGlmICghem9uZSB8fCAhdGhpcy5uYXZpZ2F0b3JTZXJ2aWNlLmN1cnJlbnRTcGFjZUlEKSB7XHJcbiAgICAgICAgICB0aGlzLmN1cnJlbnRTcGFjZUlEID0gdGhpcy5uYXZpZ2F0b3JTZXJ2aWNlLmN1cnJlbnRTcGFjZUlEO1xyXG4gICAgICAgICAgdGhpcy5lcXVpcG1lbnRzVGFncy5uZXh0KG51bGwpO1xyXG4gICAgICAgICAgdGhpcy5lcXVpcG1lbnRzVXBkYXRlZC5uZXh0KHsgc3BhY2U6IFtdLCB6b25lOiBudWxsIH0pO1xyXG4gICAgICAgICAgdGhpcy56b25lSURGaWx0ZXIgPSBudWxsO1xyXG4gICAgICAgICAgdGhpcy5jdXJyZW50RXF1aXBtZW50cyA9IHtcclxuICAgICAgICAgICAgc3BhY2U6IFtdLFxyXG4gICAgICAgICAgICB6b25lc01hcDogbmV3IE1hcCgpLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHpvbmUuaWQgIT09IHRoaXMuem9uZUlERmlsdGVyKSB7XHJcbiAgICAgICAgICB0aGlzLnpvbmVJREZpbHRlciA9IHpvbmUuaWQ7XHJcbiAgICAgICAgICB0aGlzLmN1cnJlbnRab25lID0gem9uZTtcclxuICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRTcGFjZUlEID09PSB0aGlzLm5hdmlnYXRvclNlcnZpY2UuY3VycmVudFNwYWNlSUQpIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRXF1aXBzRm9yWm9uZSgpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50U3BhY2VJRCA9IHRoaXMubmF2aWdhdG9yU2VydmljZS5jdXJyZW50U3BhY2VJRDtcclxuICAgICAgICAgICAgdGhpcy5pbml0RXF1aXBzKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICB0aGlzLmRlbGV0ZU9ic2VydmFibGVcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKChlcXVpcG1lbnQpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50U3BhY2VJRCkge1xyXG4gICAgICAgICAgdGhpcy51cGRhdGVEdWVUb0RlbGV0ZShlcXVpcG1lbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgdGhpcy5jcmVhdGVPYnNlcnZhYmxlXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSgoZXF1aXBtZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFNwYWNlSUQpIHtcclxuICAgICAgICAgIHRoaXMudXBkYXRlRHVlVG9DcmVhdGUoZXF1aXBtZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHRoaXMudXBkYXRlT2JzZXJ2YWJsZVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKGVxdWlwbWVudCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRTcGFjZUlEKSB7XHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZUR1ZVRvRXF1aXBVcGRhdGVkKGVxdWlwbWVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHVuc3Vic2NyaWJlKCkge1xyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
707
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXF1aXBtZW50LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc21hcnRlcnBsYW4tY29yZS9zcmMvbGliL3NlcnZpY2VzL21vZGVscy9lcXVpcG1lbnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0QsT0FBTyxFQUNMLHVCQUF1QixFQUN2Qix3QkFBd0IsR0FFekIsTUFBTSx1QkFBdUIsQ0FBQztBQUUvQixPQUFPLEVBTUwsUUFBUSxFQUVSLFdBQVcsRUFDWCxTQUFTLEVBR1QsT0FBTyxFQUNQLFVBQVUsRUFDVixRQUFRLEdBQ1QsTUFBTSxxQkFBcUIsQ0FBQztBQUc3QixPQUFPLEVBQ0wsWUFBWSxFQUNaLGFBQWEsRUFDYiw2QkFBNkIsRUFDN0IsY0FBYyxHQUNmLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7Ozs7Ozs7Ozs7QUFVMUQsTUFBTSxPQUFPLGdCQUFpQixTQUFRLGlCQUFpQjtJQStEM0M7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQXJFRixNQUFNLEdBQUc7UUFDZixTQUFTLEVBQUUsNEJBQTRCO1FBQ3ZDLEtBQUssRUFBRSx3QkFBd0I7UUFDL0IsU0FBUyxFQUFFLDRCQUE0QjtRQUN2QyxXQUFXLEVBQUUsOEJBQThCO1FBQzNDLEtBQUssRUFBRSx3QkFBd0I7UUFDL0IsV0FBVyxFQUFFLDhCQUE4QjtLQUM1QyxDQUFDO0lBRUYsaUJBQWlCLEdBR1osSUFBSSxPQUFPLEVBQUUsQ0FBQztJQUVuQixpQkFBaUIsR0FHYjtRQUNBLEtBQUssRUFBRSxFQUFFO1FB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QTBEakIsbUJBQW1CLGFBQ25CLG1DQUFtQzs0R0EzRGxDLGdCQUFnQixjQUZmLE1BQU07OzRGQUVQLGdCQUFnQjtrQkFINUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQTJESSxNQUFNOzJCQUFDLG1CQUFtQjs7MEJBQzFCLE1BQU07MkJBQUMsbUNBQW1DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE5nYk1vZGFsIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge1xyXG4gIG9wZW5Nb2RhbEZvclZpc2l0U3dpdGNoLFxyXG4gIHJlbW92ZU51bGxLZXlzRnJvbU9iamVjdCxcclxuICB3YWl0VW50aWwsXHJcbn0gZnJvbSAnLi4vLi4vaGVscGVycy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTWF0dGVydGFnRGF0YSB9IGZyb20gJy4uLy4uL21hdHRlcnRhZ0RhdGEnO1xyXG5pbXBvcnQge1xyXG4gIE5vdGUsXHJcbiAgWm9uZSxcclxuICBFcXVpcG1lbnQsXHJcbiAgRXF1aXBtZW50RG9jdW1lbnQsXHJcbiAgVGlja2V0LFxyXG4gIFR5cGVOb3RlLFxyXG4gIE1pc3Npb24sXHJcbiAgRXZlbnRTdGF0dXMsXHJcbiAgRXZlbnRUeXBlLFxyXG4gIE9wZXJhdGlvbixcclxuICBQT0ksXHJcbiAgUG9pVHlwZSxcclxuICBSb2xlU3RhdHVzLFxyXG4gIFNwTW9kdWxlLFxyXG59IGZyb20gJy4uLy4uL3R5cGVzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBGaWx0ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vZmlsdGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBOYXZpZ2F0b3JTZXJ2aWNlIH0gZnJvbSAnLi4vbmF2aWdhdG9yLnNlcnZpY2UnO1xyXG5pbXBvcnQge1xyXG4gIGRlbGV0ZUZyb21TMyxcclxuICBnZXRTaWduZWRGaWxlLFxyXG4gIGdldFNpZ25lZEltYWdlVXJsRm9yRXF1aXBtZW50LFxyXG4gIHVwbG9hZEZpbGVUb1MzLFxyXG59IGZyb20gJy4uL3MzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBCYXNlVXNlclNlcnZpY2UgfSBmcm9tICcuLi91c2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBWaWV3ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vdmlld2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBCYXNlT2JqZWN0U2VydmljZSB9IGZyb20gJy4vYmFzZS1vYmplY3Quc2VydmljZSc7XHJcbmltcG9ydCB7IE5hdmlnYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi9uYXZpZ2F0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBPcGVyYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi9vcGVyYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IFBvaVNlcnZpY2UgfSBmcm9tICcuL3BvaS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVGlja2V0c1NlcnZpY2UgfSBmcm9tICcuL3RpY2tldC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgWm9uZUNoYW5nZVNlcnZpY2UgfSBmcm9tIFwiLi4vem9uZUNoYW5nZS5zZXJ2aWNlXCI7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRXF1aXBtZW50U2VydmljZSBleHRlbmRzIEJhc2VPYmplY3RTZXJ2aWNlIHtcclxuICBwcml2YXRlIHByZWZpeCA9IHtcclxuICAgIHRlY2huaWNhbDogJ2VxdWlwbWVudHMvbm90ZS90ZWNobmljYWwvJyxcclxuICAgIGltYWdlOiAnZXF1aXBtZW50cy9ub3RlL2ltYWdlLycsXHJcbiAgICBmaW5hbmNpYWw6ICdlcXVpcG1lbnRzL25vdGUvZmluYW5jaWFsLycsXHJcbiAgICBpbmZvcm1hdGlvbjogJ2VxdWlwbWVudHMvbm90ZS9pbmZvcm1hdGlvbi8nLFxyXG4gICAgb3RoZXI6ICdlcXVpcG1lbnRzL25vdGUvb3RoZXIvJyxcclxuICAgIGNvbnRyYWN0dWFsOiAnZXF1aXBtZW50cy9ub3RlL2NvbnRyYWN0dWFsLycsXHJcbiAgfTtcclxuXHJcbiAgZXF1aXBtZW50c1VwZGF0ZWQ6IFN1YmplY3Q8e1xyXG4gICAgc3BhY2U6IEVxdWlwbWVudFtdO1xyXG4gICAgem9uZTogRXF1aXBtZW50W107XHJcbiAgfT4gPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuICBjdXJyZW50RXF1aXBtZW50czoge1xyXG4gICAgc3BhY2U6IEVxdWlwbWVudFtdO1xyXG4gICAgem9uZXNNYXA6IE1hcDxzdHJpbmcsIEVxdWlwbWVudFtdPjtcclxuICB9ID0ge1xyXG4gICAgICBzcGFjZTogW10sXHJcbiAgICAgIHpvbmVzTWFwOiBuZXcgTWFwKCksXHJcbiAgICB9O1xyXG5cclxuICBlcXVpcG1lbnRzVGFnczogQmVoYXZpb3JTdWJqZWN0PEVxdWlwbWVudFtdPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RXF1aXBtZW50W10+KG51bGwpO1xyXG5cclxuICB6b25lSURGaWx0ZXI6IHN0cmluZztcclxuXHJcbiAgY3VycmVudFpvbmU6IFpvbmU7XHJcblxyXG4gIGN1cnJlbnRTcGFjZUlEOiBzdHJpbmc7XHJcblxyXG4gIGZsb29yc1BlclNwYWNlOiBab25lW10gPSBudWxsO1xyXG5cclxuICAvKiogTnVsbCBtZWFucyB3ZSBkbyBub3QgYXBwbHkgYSBmaWx0ZXIsIGVtcHR5IGFycmF5IChbXSksIG1lYW5zIHdlIHRoYXQgd2UgaGlkZSBhbGwgZXF1aXBtZW50ICovXHJcbiAgZXF1aXBtZW50RG9tYWluRmlsdGVyOiBzdHJpbmdbXSA9IG51bGw7XHJcblxyXG4gIHVwZGF0aW5nOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgY3VycmVudGx5VXBkYXRpbmcgPSBmYWxzZTtcclxuXHJcbiAgY3VycmVudFN3ZWVwOiBzdHJpbmc7XHJcblxyXG4gIGRlbGV0ZU9ic2VydmFibGU6IFN1YmplY3Q8RXF1aXBtZW50PiA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gIGNyZWF0ZU9ic2VydmFibGU6IFN1YmplY3Q8RXF1aXBtZW50PiA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gIHVwZGF0ZU9ic2VydmFibGU6IFN1YmplY3Q8RXF1aXBtZW50PiA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gIHNlbGVjdGVkRmxvb3I6IFpvbmUgPSBudWxsO1xyXG5cclxuICBBUEk6IGFueTsgLy9BV1NcclxuICBhd3NLaW5lc2lzQW5hbHl0aWNzOiBhbnk7IC8vQVdTXHJcblxyXG4gIGlzTXVzZXVtVXNlciA9IGZhbHNlO1xyXG5cclxuICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBASW5qZWN0KCdjdXJyZW50QVBJU2VydmljZScpIGFwaUluamVjdGVkOiBhbnksXHJcbiAgICBASW5qZWN0KCdjdXJyZW50QXdzS2luZXNpc0FuYWx5dGljc1NlcnZpY2UnKVxyXG4gICAgYXdzS2luZXNpc0FuYWx5dGljc0luamVjdGVkOiBhbnksXHJcbiAgICBwb2lTZXJ2aWNlOiBQb2lTZXJ2aWNlLFxyXG4gICAgbmF2aWdhdGlvblNlcnZpY2U6IE5hdmlnYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBvcGVyYXRpb25TZXJ2aWNlOiBPcGVyYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB0aWNrZXRzU2VydmljZTogVGlja2V0c1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIG5hdmlnYXRvclNlcnZpY2U6IE5hdmlnYXRvclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGZpbHRlclNlcnZpY2U6IEZpbHRlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHVzZXJTZXJ2aWNlOiBCYXNlVXNlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHZpZXdlclNlcnZpY2U6IFZpZXdlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG1vZGFsU2VydmljZTogTmdiTW9kYWwsXHJcbiAgICBwcml2YXRlIHpvbmVDaGFuZ2VTZXJ2aWNlOiBab25lQ2hhbmdlU2VydmljZVxyXG4gICkge1xyXG4gICAgc3VwZXIocG9pU2VydmljZSwgbmF2aWdhdGlvblNlcnZpY2UpO1xyXG5cclxuICAgIHRoaXMuQVBJID0gYXBpSW5qZWN0ZWQ7XHJcbiAgICB0aGlzLmF3c0tpbmVzaXNBbmFseXRpY3MgPSBhd3NLaW5lc2lzQW5hbHl0aWNzSW5qZWN0ZWQ7XHJcblxyXG4gICAgdGhpcy5pc011c2V1bVVzZXIgPSB0aGlzLnVzZXJTZXJ2aWNlLmhhc09ubHlNdXNldW1Sb2xlKCk7XHJcbiAgICB0aGlzLmluaXRTdWJzY3JpcHRpb25zKCk7XHJcbiAgICB0aGlzLnVzZXJTZXJ2aWNlLmlzQ2hhbmdlZC5zdWJzY3JpYmUoKGlzQ29ubmVjdGVkKSA9PiB7XHJcbiAgICAgIGlmIChpc0Nvbm5lY3RlZCkge1xyXG4gICAgICAgIHRoaXMuaXNNdXNldW1Vc2VyID0gdGhpcy51c2VyU2VydmljZS5oYXNPbmx5TXVzZXVtUm9sZSgpO1xyXG4gICAgICAgIHRoaXMuaW5pdFN1YnNjcmlwdGlvbnMoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuem9uZUNoYW5nZVNlcnZpY2UuZmxvb3JIYXNDaGFuZ2VkLnN1YnNjcmliZSgoZmxvb3IpID0+IHtcclxuICAgICAgaWYgKGZsb29yKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEZsb29yID0gZmxvb3I7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgcmVhZEVxdWlwbWVudChpZDogc3RyaW5nKTogUHJvbWlzZTxFcXVpcG1lbnQ+IHtcclxuICAgIHJldHVybiB0aGlzLkFQSS5fX3Byb3RvX18uR2V0RXF1aXBtZW50KGlkKS50aGVuKGFzeW5jIChyZWNlaXZlZEVxdWlwKSA9PiB7XHJcbiAgICAgIGxldCBlcXVpcDogRXF1aXBtZW50O1xyXG4gICAgICBpZiAocmVjZWl2ZWRFcXVpcCkge1xyXG4gICAgICAgIGVxdWlwID0gcmVjZWl2ZWRFcXVpcDtcclxuICAgICAgICBlcXVpcCA9IGF3YWl0IHRoaXMuZ2V0U2lnbmVkVXJsc0ZvckVxdWlwbWVudChyZWNlaXZlZEVxdWlwKTtcclxuICAgICAgICBpZiAoZXF1aXAuZG9tYWluKSB7XHJcbiAgICAgICAgICBpZiAoZXF1aXAuZG9tYWluLnBhcmVudElEKSB7XHJcbiAgICAgICAgICAgIGVxdWlwLmNoaWxkRG9tYWluID0gZXF1aXAuZG9tYWluO1xyXG4gICAgICAgICAgICBlcXVpcC5wYXJlbnREb21haW4gPSBlcXVpcC5kb21haW4ucGFyZW50O1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZXF1aXAucGFyZW50RG9tYWluID0gZXF1aXAuZG9tYWluO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZXF1aXAuc3ViZXF1aXBtZW50c0lEcykge1xyXG4gICAgICAgICAgY29uc3Qgc3ViRXF1aXBzID0gW107XHJcbiAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgICAgICAgZXF1aXAuc3ViZXF1aXBtZW50c0lEcy5tYXAoYXN5bmMgKHN1YklkKSA9PiB7XHJcbiAgICAgICAgICAgICAgY29uc3Qgc3ViRXF1aXAgPSBhd2FpdCB0aGlzLkFQSS5HZXRFcXVpcG1lbnQoc3ViSWQpO1xyXG4gICAgICAgICAgICAgIGlmIChzdWJFcXVpcCkge1xyXG4gICAgICAgICAgICAgICAgc3ViRXF1aXBzLnB1c2goc3ViRXF1aXApO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBlcXVpcC5zdWJFcXVpcG1lbnRzID0gc3ViRXF1aXBzO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gZXF1aXA7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGNyZWF0ZUVxdWlwbWVudChcclxuICAgIGVxdWlwOiBFcXVpcG1lbnQsXHJcbiAgICBpbWFnZUZpbGU6IEZpbGUsXHJcbiAgICBkb2N1bWVudEZpbGU6IEZpbGVcclxuICApOiBQcm9taXNlPEVxdWlwbWVudCB8IHZvaWQ+IHtcclxuICAgIHJlbW92ZU51bGxLZXlzRnJvbU9iamVjdChlcXVpcCk7XHJcbiAgICBpZiAoISF0aGlzLmF3c0tpbmVzaXNBbmFseXRpY3MgJiYgISF0aGlzLmF3c0tpbmVzaXNBbmFseXRpY3MucmVjb3JkICYmIHRoaXMuYXdzS2luZXNpc0FuYWx5dGljcy5yZWNvcmQoKSkge1xyXG4gICAgICB0aGlzLmF3c0tpbmVzaXNBbmFseXRpY3MuZ2V0SW5zdGFuY2UoKS5yZWNvcmQoXHJcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgZXZlbnRUeXBlOiAnT2JqZWN0IENyZWF0aW9uJyxcclxuICAgICAgICAgICAgb2JqZWN0VHlwZTogJ2VxdWlwbWVudCcsXHJcbiAgICAgICAgICAgIHBvaTogZXF1aXAsXHJcbiAgICAgICAgICAgIHVzZXI6IHRoaXMudXNlclNlcnZpY2UuY3UsXHJcbiAgICAgICAgICAgIGxvY2F0aW9uSWQ6IHRoaXMuY3VycmVudFNwYWNlSUQsXHJcbiAgICAgICAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKSxcclxuICAgICAgICAgICAgem9uZUlkOiB0aGlzLmN1cnJlbnRab25lLmlkLFxyXG4gICAgICAgICAgICBmbG9vcklkOiB0aGlzLnNlbGVjdGVkRmxvb3I/LmlkLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHN0cmVhbU5hbWU6ICdzbWFydGVycGxhbktpbmVzaXMtYW5hbHl0aWNzJyxcclxuICAgICAgICAgIC8vIHBhcnRpdGlvbktleTogXCJcIixcclxuICAgICAgICB9LFxyXG4gICAgICAgICdBV1NLaW5lc2lzJ1xyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuQVBJLkNyZWF0ZUVxdWlwbWVudChlcXVpcCkudGhlbihhc3luYyAocmVjZWl2ZWRFcXVpcG1lbnQpID0+IHtcclxuICAgICAgbGV0IGVxdWlwbWVudCA9IHJlY2VpdmVkRXF1aXBtZW50IGFzIEVxdWlwbWVudDtcclxuICAgICAgaWYgKGVxdWlwbWVudCkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdlcXVpcG1lbnQgY3JlYXRlZDonLCBlcXVpcG1lbnQpO1xyXG4gICAgICAgIGlmIChkb2N1bWVudEZpbGUpIHtcclxuICAgICAgICAgIGF3YWl0IHRoaXMudXBsb2FkRG9jKGVxdWlwbWVudCwgZG9jdW1lbnRGaWxlLCBUeXBlTm90ZS5URUNITklDQUwpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaW1hZ2VGaWxlKSB7XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLnVwbG9hZEltYWdlKGVxdWlwbWVudCwgaW1hZ2VGaWxlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGVxdWlwbWVudDtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZ2V0U2lnbmVkVXJsc0ZvckVxdWlwbWVudChlcXVpcDogRXF1aXBtZW50KTogUHJvbWlzZTxFcXVpcG1lbnQ+IHtcclxuICAgIGNvbnN0IGVxdWlwbWVudCA9IHsgLi4uZXF1aXAgfTtcclxuICAgIGlmIChlcXVpcG1lbnQubm90ZXMuaXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICBjb25zdCBkb2NzID0gW107XHJcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxyXG4gICAgICAgIGVxdWlwbWVudC5ub3Rlcy5pdGVtcy5tYXAoYXN5bmMgKG5vdGUpID0+IHtcclxuICAgICAgICAgIGVxdWlwbWVudC5kb2N1bWVudGF0aW9uSW1hZ2VVcmxTaWduZWQgPVxyXG4gICAgICAgICAgICBhd2FpdCBnZXRTaWduZWRJbWFnZVVybEZvckVxdWlwbWVudChlcXVpcG1lbnQpO1xyXG4gICAgICAgICAgaWYgKG5vdGUuYXR0YWNobWVudCkge1xyXG4gICAgICAgICAgICBjb25zdCB7IGxlbmd0aCB9ID0gbm90ZS5hdHRhY2htZW50LnNwbGl0KCcvJyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpbGVuYW1lID0gbm90ZS5hdHRhY2htZW50LnNwbGl0KCcvJylbbGVuZ3RoIC0gMV07XHJcbiAgICAgICAgICAgIGNvbnN0IGF0dGFjaG1lbnQgPSBhd2FpdCBnZXRTaWduZWRGaWxlKG5vdGUuYXR0YWNobWVudCk7XHJcbiAgICAgICAgICAgIGlmIChhdHRhY2htZW50KSB7XHJcbiAgICAgICAgICAgICAgZG9jcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgIGZpbGVuYW1lLFxyXG4gICAgICAgICAgICAgICAgdXJsOiBub3RlLmF0dGFjaG1lbnQsXHJcbiAgICAgICAgICAgICAgICB1cmxTaWduZWQ6IGF0dGFjaG1lbnQsXHJcbiAgICAgICAgICAgICAgICBub3RlSUQ6IG5vdGUuaWQsXHJcbiAgICAgICAgICAgICAgfSBhcyBFcXVpcG1lbnREb2N1bWVudCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgICBlcXVpcG1lbnQuZG9jdW1lbnRzID0gZG9jcztcclxuICAgICAgcmV0dXJuIGVxdWlwbWVudDtcclxuICAgIH1cclxuICAgIHJldHVybiBlcXVpcG1lbnQ7XHJcbiAgfVxyXG5cclxuICBhc3luYyBnZXRFcXVpcG1lbnRzRm9yVGlja2V0KHRpY2tldDogVGlja2V0KTogUHJvbWlzZTxFcXVpcG1lbnRbXT4ge1xyXG4gICAgY29uc3Qgb3BlcmF0aW9ucyA9IHRpY2tldC5vcGVyYXRpb25zLml0ZW1zO1xyXG4gICAgaWYgKG9wZXJhdGlvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICBvcGVyYXRpb25zLnNvcnQoXHJcbiAgICAgICAgKGEsIGIpID0+XHJcbiAgICAgICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJldHRpZXIvcHJldHRpZXJcclxuICAgICAgICAgIG5ldyBEYXRlKGIuY3JlYXRlZEF0KSAtIG5ldyBEYXRlKGEuY3JlYXRlZEF0KVxyXG4gICAgICApO1xyXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgICBvcGVyYXRpb25zLm1hcChhc3luYyAob3BlcmF0aW9uKSA9PiB7XHJcbiAgICAgICAgICBvcGVyYXRpb24uZXF1aXBtZW50ID0gYXdhaXQgdGhpcy5yZWFkRXF1aXBtZW50KG9wZXJhdGlvbi5lcXVpcG1lbnRJRCk7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIC8vIHRvIGtlZXAgdGhlIHNvcnRpbmcgYnkgY3JlYXRlZEF0XHJcbiAgICByZXR1cm4gb3BlcmF0aW9ucy5tYXAoKG8pID0+IG8uZXF1aXBtZW50KTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGdldEVxdWlwbWVudHNGb3JTcGFjZShzcGFjZUlEOiBzdHJpbmcpOiBQcm9taXNlPEVxdWlwbWVudFtdPiB7XHJcbiAgICAvLyBzcGxpdCBieSAxMDBcclxuICAgIGNvbnN0IGxpbWl0ID0gMTAwO1xyXG4gICAgbGV0IGVxdWlwc1Rva2VuID0geyBlcXVpcHM6IFtdLCBuZXh0VG9rZW46IG51bGwgfTtcclxuICAgIGRvIHtcclxuICAgICAgZXF1aXBzVG9rZW4gPSBhd2FpdCB0aGlzLm1lcmdlRXF1aXBtZW50c0ZvclNwYWNlV2l0aE5leHRUb2tlbldpdGhMaW1pdChcclxuICAgICAgICBzcGFjZUlELFxyXG4gICAgICAgIGxpbWl0LFxyXG4gICAgICAgIGVxdWlwc1Rva2VuXHJcbiAgICAgICk7XHJcbiAgICB9IHdoaWxlIChlcXVpcHNUb2tlbi5uZXh0VG9rZW4pO1xyXG4gICAgcmV0dXJuIGVxdWlwc1Rva2VuLmVxdWlwcztcclxuICB9XHJcblxyXG4gIGFzeW5jIG1lcmdlRXF1aXBtZW50c0ZvclNwYWNlV2l0aE5leHRUb2tlbldpdGhMaW1pdChcclxuICAgIHNwYWNlSUQ6IHN0cmluZyxcclxuICAgIGxpbWl0OiBudW1iZXIsXHJcbiAgICBlcXVpcHNUb2tlbjogeyBlcXVpcHM6IEVxdWlwbWVudFtdOyBuZXh0VG9rZW46IHN0cmluZyB8IG51bGwgfVxyXG4gICk6IFByb21pc2U8eyBlcXVpcHM6IEVxdWlwbWVudFtdOyBuZXh0VG9rZW46IHN0cmluZyB8IG51bGwgfT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuQVBJLl9fcHJvdG9fX1xyXG4gICAgICAuRXF1aXBtZW50c0J5U3BhY2UoXHJcbiAgICAgICAgc3BhY2VJRCxcclxuICAgICAgICBudWxsLFxyXG4gICAgICAgICdERVNDJyxcclxuICAgICAgICBudWxsLFxyXG4gICAgICAgIGxpbWl0LFxyXG4gICAgICAgIGVxdWlwc1Rva2VuLm5leHRUb2tlbiAvLyBuZXh0VG9rZW5cclxuICAgICAgKVxyXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHtcclxuICAgICAgICBjb25zdCBlcXVpcHNMaW1pdCA9IHJlc3BvbnNlLml0ZW1zO1xyXG4gICAgICAgIGNvbnN0IGVxdWlwc09iamVjdCA9IHtcclxuICAgICAgICAgIGVxdWlwczogWy4uLmVxdWlwc1Rva2VuLmVxdWlwcywgLi4uZXF1aXBzTGltaXRdLFxyXG4gICAgICAgICAgbmV4dFRva2VuOiByZXNwb25zZS5uZXh0VG9rZW4sXHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gZXF1aXBzT2JqZWN0O1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHVwbG9hZEltYWdlRm9yQWxsRXF1aXBtZW50cyhcclxuICAgIGVxdWlwbWVudHM6IEVxdWlwbWVudFtdLFxyXG4gICAgaW1hZ2VGaWxlOiBGaWxlXHJcbiAgKTogUHJvbWlzZTxFcXVpcG1lbnRbXT4ge1xyXG4gICAgaWYgKGVxdWlwbWVudHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdXBsb2FkRmlsZVRvUzModGhpcy5wcmVmaXguaW1hZ2UsIGltYWdlRmlsZSwgJ0JBVENIJykudGhlbihcclxuICAgICAgYXN5bmMgKHVybCkgPT4ge1xyXG4gICAgICAgIGlmICh1cmwpIHtcclxuICAgICAgICAgIGNvbnN0IGVxdWlwcyA9IFtdO1xyXG4gICAgICAgICAgZm9yIChjb25zdCBlcXVpcCBvZiBlcXVpcG1lbnRzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRNaXNzaW9uID0gdGhpcy51c2VyU2VydmljZS5jdXJyZW50TWlzc2lvbihcclxuICAgICAgICAgICAgICBlcXVpcC5zcGFjZUlEXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuQVBJLl9fcHJvdG9fXy5DcmVhdGVOb3RlKHtcclxuICAgICAgICAgICAgICBhdHRhY2htZW50OiB1cmwsXHJcbiAgICAgICAgICAgICAgdHlwZTogVHlwZU5vdGUuSU1BR0UsXHJcbiAgICAgICAgICAgICAgZXF1aXBtZW50SUQ6IGVxdWlwLmlkLFxyXG4gICAgICAgICAgICAgIG93bmVyTWlzc2lvbklEOiBjdXJyZW50TWlzc2lvbiA/IGN1cnJlbnRNaXNzaW9uLmlkIDogbnVsbCxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHVwZGF0ZSA9IGF3YWl0IHRoaXMuQVBJLl9fcHJvdG9fXy5VcGRhdGVFcXVpcG1lbnQoe1xyXG4gICAgICAgICAgICAgIGlkOiBlcXVpcC5pZCxcclxuICAgICAgICAgICAgICBwaG90bzogdXJsLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgZXF1aXBzLnB1c2godXBkYXRlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiBlcXVpcHM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBbXTtcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlcyBhIE5vdGUgYXR0YWNoZWQgdG8gYW4gZXF1aXBtZW50IGZyb20gYW4gUzMga2V5IHRoYXQgQUxSRUFEWSBleGlzdHNcclxuICAgKiAoYXMgb3Bwb3NlZCB0byB1cGxvYWREb2MvdXBsb2FkSW1hZ2UsIHdoaWNoIHVwbG9hZCBhIGZyZXNoIGJyb3dzZXIgRmlsZSkuXHJcbiAgICogVXNlZCB3aGVuIGR1cGxpY2F0aW5nIGVxdWlwbWVudCBhdHRhY2htZW50cyBkdXJpbmcgYSBjcm9zcy12aXNpdCBjb3B5OiB0aGVcclxuICAgKiBTMyBvYmplY3QgaXRzZWxmIGhhcyBhbHJlYWR5IGJlZW4gcGh5c2ljYWxseSBjb3BpZWQgYnkgdGhlIGNhbGxlciBiZWZvcmVoYW5kLFxyXG4gICAqIHNvIHRoaXMgb25seSBuZWVkcyB0byByZWNvcmQgdGhlIE5vdGUgcG9pbnRpbmcgYXQgdGhhdCBuZXcga2V5LlxyXG4gICAqL1xyXG4gIGFzeW5jIGNyZWF0ZU5vdGVXaXRoRXhpc3RpbmdBdHRhY2htZW50KFxyXG4gICAgZXF1aXBtZW50SUQ6IHN0cmluZyxcclxuICAgIGF0dGFjaG1lbnRLZXk6IHN0cmluZyxcclxuICAgIHR5cGU6IFR5cGVOb3RlLFxyXG4gICAgb3duZXJNaXNzaW9uSUQ6IHN0cmluZyB8IG51bGwsXHJcbiAgICBkYXRlczogeyBzaWduRGF0ZT86IG51bWJlciB8IG51bGw7IGV4cGlyYXRpb25EYXRlPzogbnVtYmVyIHwgbnVsbCB9ID0ge31cclxuICApOiBQcm9taXNlPE5vdGU+IHtcclxuICAgIHJldHVybiB0aGlzLkFQSS5fX3Byb3RvX18uQ3JlYXRlTm90ZSh7XHJcbiAgICAgIGF0dGFjaG1lbnQ6IGF0dGFjaG1lbnRLZXksXHJcbiAgICAgIHR5cGUsXHJcbiAgICAgIGVxdWlwbWVudElELFxyXG4gICAgICBvd25lck1pc3Npb25JRCxcclxuICAgICAgc2lnbkRhdGU6IGRhdGVzLnNpZ25EYXRlID8/IG51bGwsXHJcbiAgICAgIGV4cGlyYXRpb25EYXRlOiBkYXRlcy5leHBpcmF0aW9uRGF0ZSA/PyBudWxsLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgYXN5bmMgdXBsb2FkSW1hZ2UoZXF1aXBtZW50OiBFcXVpcG1lbnQsIGltYWdlRmlsZTogRmlsZSk6IFByb21pc2U8Tm90ZT4ge1xyXG4gICAgcmV0dXJuIHVwbG9hZEZpbGVUb1MzKHRoaXMucHJlZml4LmltYWdlLCBpbWFnZUZpbGUsIGVxdWlwbWVudC5pZCkudGhlbihcclxuICAgICAgYXN5bmMgKHVybCkgPT4ge1xyXG4gICAgICAgIGlmICh1cmwpIHtcclxuICAgICAgICAgIGNvbnN0IGN1cnJlbnRNaXNzaW9uID0gdGhpcy51c2VyU2VydmljZS5jdXJyZW50TWlzc2lvbihcclxuICAgICAgICAgICAgZXF1aXBtZW50LnNwYWNlSURcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBjb25zdCBub3RlID0gYXdhaXQgdGhpcy5BUEkuX19wcm90b19fLkNyZWF0ZU5vdGUoe1xyXG4gICAgICAgICAgICBhdHRhY2htZW50OiB1cmwsXHJcbiAgICAgICAgICAgIHR5cGU6IFR5cGVOb3RlLklNQUdFLFxyXG4gICAgICAgICAgICBlcXVpcG1lbnRJRDogZXF1aXBtZW50LmlkLFxyXG4gICAgICAgICAgICBvd25lck1pc3Npb25JRDogY3VycmVudE1pc3Npb24gPyBjdXJyZW50TWlzc2lvbi5pZCA6IG51bGwsXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIGF3YWl0IHRoaXMuQVBJLl9fcHJvdG9fXy5VcGRhdGVFcXVpcG1lbnQoe1xyXG4gICAgICAgICAgICBpZDogZXF1aXBtZW50LmlkLFxyXG4gICAgICAgICAgICBwaG90bzogdXJsLFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICByZXR1cm4gbm90ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBhc3luYyB1cGRhdGVFcXVpcG1lbnQoXHJcbiAgICBlcXVpcDogYW55LFxyXG4gICAgZmlsZTogRmlsZSA9IG51bGwsXHJcbiAgICBub3RlVHlwZTogVHlwZU5vdGUgPSBudWxsXHJcbiAgKTogUHJvbWlzZTxFcXVpcG1lbnQ+IHtcclxuICAgIHJldHVybiB0aGlzLkFQSS5fX3Byb3RvX19cclxuICAgICAgLlVwZGF0ZUVxdWlwbWVudChlcXVpcClcclxuICAgICAgLnRoZW4oYXN5bmMgKHJlY2VpdmVkRXF1aXBtZW50KSA9PiB7XHJcbiAgICAgICAgbGV0IGVxdWlwbWVudCA9IHJlY2VpdmVkRXF1aXBtZW50IGFzIEVxdWlwbWVudDtcclxuICAgICAgICBpZiAoZXF1aXBtZW50KSB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnZXF1aXBtZW50IHVwZGF0ZWQ6JywgZXF1aXBtZW50KTtcclxuICAgICAgICAgIGlmIChub3RlVHlwZSkge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKG5vdGVUeXBlKSB7XHJcbiAgICAgICAgICAgICAgY2FzZSBUeXBlTm90ZS5JTUFHRTpcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMudXBsb2FkSW1hZ2UoZXF1aXBtZW50LCBmaWxlKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnVwbG9hZERvYyhlcXVpcG1lbnQsIGZpbGUsIG5vdGVUeXBlKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBlcXVpcG1lbnQ7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0UHJlZml4RG9jKHR5cGU6IFR5cGVOb3RlKSB7XHJcbiAgICBsZXQgcHJlZml4O1xyXG4gICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgIGNhc2UgVHlwZU5vdGUuSU5GT1JNQVRJT046XHJcbiAgICAgICAgcHJlZml4ID0gdGhpcy5wcmVmaXguaW5mb3JtYXRpb247XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgVHlwZU5vdGUuRklOQU5DSUFMOlxyXG4gICAgICAgIHByZWZpeCA9IHRoaXMucHJlZml4LmZpbmFuY2lhbDtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBUeXBlTm90ZS5DT05UUkFDVFVBTDpcclxuICAgICAgICBwcmVmaXggPSB0aGlzLnByZWZpeC5jb250cmFjdHVhbDtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBUeXBlTm90ZS5PVEhFUjpcclxuICAgICAgICBwcmVmaXggPSB0aGlzLnByZWZpeC5vdGhlcjtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBUeXBlTm90ZS5JTUFHRTpcclxuICAgICAgICBwcmVmaXggPSB0aGlzLnByZWZpeC5pbWFnZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBwcmVmaXggPSB0aGlzLnByZWZpeC50ZWNobmljYWw7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcHJlZml4O1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgdXBsb2FkRG9jRm9yQWxsRXF1aXBtZW50cyhcclxuICAgIGVxdWlwbWVudHM6IEVxdWlwbWVudFtdLFxyXG4gICAgZG9jdW1lbnRGaWxlOiBGaWxlLFxyXG4gICAgdHlwZTogVHlwZU5vdGVcclxuICApIHtcclxuICAgIGlmIChlcXVpcG1lbnRzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgICBjb25zdCBwcmVmaXggPSB0aGlzLmdldFByZWZpeERvYyh0eXBlKTtcclxuICAgIGNvbnN0IHVybCA9IGF3YWl0IHVwbG9hZEZpbGVUb1MzKHByZWZpeCwgZG9jdW1lbnRGaWxlLCAnQkFUQ0gnKTtcclxuICAgIGlmICh1cmwpIHtcclxuICAgICAgY29uc3QgdXBkYXRlTGlzdCA9IFtdO1xyXG4gICAgICBmb3IgKGNvbnN0IGVxdWlwIG9mIGVxdWlwbWVudHMpIHtcclxuICAgICAgICBjb25zdCBtaXNzaW9uID0gdGhpcy51c2VyU2VydmljZS5jdXJyZW50TWlzc2lvbihlcXVpcC5zcGFjZUlEKTtcclxuICAgICAgICBjb25zdCBuZXdFcXVpcCA9IGF3YWl0IHRoaXMuQVBJLl9fcHJvdG9fXy5DcmVhdGVOb3RlKHtcclxuICAgICAgICAgIGF0dGFjaG1lbnQ6IHVybCxcclxuICAgICAgICAgIHR5cGUsXHJcbiAgICAgICAgICBlcXVpcG1lbnRJRDogZXF1aXAuaWQsXHJcbiAgICAgICAgICBvd25lck1pc3Npb25JRDogbWlzc2lvbiA/IG1pc3Npb24uaWQgOiBudWxsLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHVwZGF0ZUxpc3QucHVzaChuZXdFcXVpcCk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHVwZGF0ZUxpc3Q7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gW107XHJcbiAgfVxyXG5cclxuICBhc3luYyB1cGxvYWREb2MoXHJcbiAgICBlcXVpcG1lbnQ6IEVxdWlwbWVudCxcclxuICAgIGRvY3VtZW50RmlsZTogRmlsZSxcclxuICAgIHR5cGU6IFR5cGVOb3RlXHJcbiAgKTogUHJvbWlzZTxOb3RlPiB7XHJcbiAgICBjb25zdCBwcmVmaXggPSB0aGlzLmdldFByZWZpeERvYyh0eXBlKTtcclxuICAgIGNvbnN0IG1pc3Npb24gPSB0aGlzLnVzZXJTZXJ2aWNlLmN1cnJlbnRNaXNzaW9uKGVxdWlwbWVudC5zcGFjZUlEKTtcclxuICAgIHJldHVybiB1cGxvYWRGaWxlVG9TMyhwcmVmaXgsIGRvY3VtZW50RmlsZSwgZXF1aXBtZW50LmlkKS50aGVuKFxyXG4gICAgICBhc3luYyAodXJsKSA9PiB7XHJcbiAgICAgICAgaWYgKHVybCkge1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuQVBJLl9fcHJvdG9fXy5DcmVhdGVOb3RlKHtcclxuICAgICAgICAgICAgYXR0YWNobWVudDogdXJsLFxyXG4gICAgICAgICAgICB0eXBlLFxyXG4gICAgICAgICAgICBlcXVpcG1lbnRJRDogZXF1aXBtZW50LmlkLFxyXG4gICAgICAgICAgICBvd25lck1pc3Npb25JRDogbWlzc2lvbiA/IG1pc3Npb24uaWQgOiBudWxsLFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZGVsZXRlRXF1aXBtZW50KGVxdWlwOiBFcXVpcG1lbnQpOiBQcm9taXNlPEVxdWlwbWVudD4ge1xyXG4gICAgY29uc3QgZGVsZXRlZCA9IGF3YWl0IHRoaXMuQVBJLl9fcHJvdG9fXy5EZWxldGVFcXVpcG1lbnQoeyBpZDogZXF1aXAuaWQgfSk7XHJcbiAgICBjb25zb2xlLmxvZygnRGVsZXRlZCBlcXVpcG1lbnQnLCBkZWxldGVkKTtcclxuXHJcbiAgICAvLyBkZWxldGUgUE9JXHJcbiAgICBjb25zdCBbcG9pXSA9IGVxdWlwLnBvaXMuaXRlbXM7XHJcbiAgICBpZiAocG9pKSB7XHJcbiAgICAgIGF3YWl0IHRoaXMucG9pU2VydmljZS5kZWxldGVQb2kocG9pLmlkKTtcclxuICAgIH1cclxuICAgIC8vIGRlbGV0ZSBub3RlcyByZWxhdGVkXHJcbiAgICBpZiAoZXF1aXAubm90ZXMuaXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgICBlcXVpcC5ub3Rlcy5pdGVtcy5tYXAoYXN5bmMgKG5vdGU6IE5vdGUpID0+IHtcclxuICAgICAgICAgIC8vIGRlbGV0ZSBmaWxlcyBmcm9tIFMzXHJcbiAgICAgICAgICAvKiogTm90IHNoYXJlZCB3aXRoIG90aGVyIGVxdWlwbWVudCAqL1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICBub3RlLmF0dGFjaG1lbnQgJiZcclxuICAgICAgICAgICAgIW5vdGUuYXR0YWNobWVudC5zcGxpdCgnLycpLnBvcCgpLnN0YXJ0c1dpdGgoJ0JBVENIXycpXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgYXdhaXQgZGVsZXRlRnJvbVMzKG5vdGUuYXR0YWNobWVudCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLkFQSS5fX3Byb3RvX18uRGVsZXRlTm90ZSh7IGlkOiBub3RlLmlkIH0pO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICAvLyBkZWxldGUgb3BlcmF0aW9ucyAocmVtb3ZlIGZyb20gbGlua2VkIHRpY2tldHMpXHJcbiAgICBhd2FpdCB0aGlzLm9wZXJhdGlvblNlcnZpY2UuZGVsZXRlT3BlcmF0aW9uc0ZvckVxdWlwbWVudChlcXVpcC5pZCk7XHJcbiAgICByZXR1cm4gZGVsZXRlZDtcclxuICB9XHJcblxyXG4gIGFzeW5jIHVwZGF0ZUVxdWlwbWVudExvY2F0aW9uKFxyXG4gICAgZXF1aXA6IEVxdWlwbWVudCxcclxuICAgIHRhZ0RhdGE6IE1hdHRlcnRhZ0RhdGFcclxuICApOiBQcm9taXNlPFBPST4ge1xyXG4gICAgY29uc3QgcG9pSW5wdXQgPSB7XHJcbiAgICAgIGNvb3JkaW5hdGU6IHRhZ0RhdGEuZ2V0Q29vcmRpbmF0ZVN0cmluZygpLFxyXG4gICAgICB0eXBlOiBQb2lUeXBlLkVRVUlQTUVOVCxcclxuICAgICAgZWxlbWVudElEOiBlcXVpcC5pZCxcclxuICAgICAgbWV0YWRhdGE6IHRhZ0RhdGEuZ2V0TWV0YWRhdGFTdHJpbmcoKSxcclxuICAgICAgbWF0dGVycG9ydFN3ZWVwSUQ6IHRhZ0RhdGEuZ2V0U3dlZXBJRCgpLFxyXG4gICAgfSBhcyBQT0k7XHJcbiAgICBjb25zdCBwb2kgPSBhd2FpdCB0aGlzLnBvaVNlcnZpY2UuY3JlYXRlUE9JRm9yU3BhY2VJRChwb2lJbnB1dCk7XHJcbiAgICByZXR1cm4gcG9pO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgcmVtb3ZlVGlja2V0RnJvbUVxdWlwbWVudChcclxuICAgIHRpY2tldDogVGlja2V0LFxyXG4gICAgZXF1aXA6IEVxdWlwbWVudFxyXG4gICk6IFByb21pc2U8T3BlcmF0aW9uPiB7XHJcbiAgICBjb25zdCBvcGVyYXRpb25FcXVpcCA9XHJcbiAgICAgIGF3YWl0IHRoaXMub3BlcmF0aW9uU2VydmljZS5nZXRPcGVyYXRpb25zQnlFcXVpcG1lbnRJRChlcXVpcC5pZCk7XHJcbiAgICBjb25zdCBvcGVyYXRpb25Ub0RlbGV0ZSA9IG9wZXJhdGlvbkVxdWlwLmZpbmQoXHJcbiAgICAgIChvcCkgPT4gb3AudGlja2V0SUQgPT09IHRpY2tldC5pZFxyXG4gICAgKTtcclxuICAgIHJldHVybiB0aGlzLm9wZXJhdGlvblNlcnZpY2VcclxuICAgICAgLmRlbGV0ZU9wZXJhdGlvbihvcGVyYXRpb25Ub0RlbGV0ZS5pZClcclxuICAgICAgLnRoZW4oKHJlcykgPT4ge1xyXG4gICAgICAgIHRoaXMudGlja2V0c1NlcnZpY2UuYWRkRXZlbnRUb1RpY2tldCh0aWNrZXQgYXMgVGlja2V0LCB7XHJcbiAgICAgICAgICB0aXRsZTogJ0VxdWlwZW1lbnQgcmV0aXLDqSBkdSB0aWNrZXQnLFxyXG4gICAgICAgICAgZGVzY3JpcHRpb246IGBFcXVpcGVtZW50ICR7ZXF1aXAubmFtZX0gYSDDqXTDqSByZXRpcsOpIGR1IHRpY2tldGAsXHJcbiAgICAgICAgICBzdGF0dXM6IEV2ZW50U3RhdHVzLlVOTElOS0VEX0ZST01fRVFVSVBNRU5ULFxyXG4gICAgICAgICAgdHlwZTogRXZlbnRUeXBlLlRJQ0tFVCxcclxuICAgICAgICAgIHRyYW5zbGF0aW9uUGF0aDogJ3RpY2tldEV2ZW50LnRpY2tldC51bmxpbmtlZEZyb21FcXVpcG1lbnQnLFxyXG4gICAgICAgICAgbWV0YWRhdGE6IEpTT04uc3RyaW5naWZ5KHsgZXF1aXBtZW50OiBlcXVpcC5uYW1lIH0pLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgaW5pdEVxdWlwcygpIHtcclxuICAgIGlmICghdGhpcy5jdXJyZW50U3BhY2VJRCB8fCB0aGlzLnVzZXJTZXJ2aWNlLmdldFNwTW9kdWxlKCkgPT09IFNwTW9kdWxlLk1VU0VVTSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLnVwZGF0aW5nLm5leHQodHJ1ZSk7XHJcbiAgICB0aGlzLmN1cnJlbnRseVVwZGF0aW5nID0gdHJ1ZTtcclxuICAgIGxldCBlcUxpc3QgPSBhd2FpdCB0aGlzLmdldEVxdWlwbWVudHNGb3JTcGFjZSh0aGlzLmN1cnJlbnRTcGFjZUlEKTtcclxuICAgIGVxTGlzdCA9IGF3YWl0IHRoaXMuZmlsdGVyU2VydmljZS5maWx0ZXJFcXVpcG1lbnRzRm9yQ3VycmVudFVzZXJJblNwYWNlKFxyXG4gICAgICB0aGlzLmN1cnJlbnRTcGFjZUlELFxyXG4gICAgICBlcUxpc3RcclxuICAgICk7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhlcUxpc3QpO1xyXG4gICAgaWYgKGVxTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGxldCBmaWx0ZXJlZEVxdWlwcyA9IGVxTGlzdC5maWx0ZXIoXHJcbiAgICAgICAgKGVxdWlwbWVudCkgPT4gIXRoaXMuaXNBcmNoaXZlZChlcXVpcG1lbnQpXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgICBmaWx0ZXJlZEVxdWlwcy5tYXAoYXN5bmMgKGVxdWlwKSA9PiB7XHJcbiAgICAgICAgICBlcXVpcC5kb2N1bWVudGF0aW9uSW1hZ2VVcmxTaWduZWQgPVxyXG4gICAgICAgICAgICBhd2FpdCBnZXRTaWduZWRJbWFnZVVybEZvckVxdWlwbWVudChlcXVpcCk7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgICAgaWYgKHRoaXMuZXF1aXBtZW50RG9tYWluRmlsdGVyKSB7XHJcbiAgICAgICAgZmlsdGVyZWRFcXVpcHMgPSB0aGlzLmZpbHRlclNlcnZpY2UuZmlsdGVyRXF1aXBtZW50c0J5RG9tYWluTGlzdChcclxuICAgICAgICAgIGZpbHRlcmVkRXF1aXBzLFxyXG4gICAgICAgICAgdGhpcy5lcXVpcG1lbnREb21haW5GaWx0ZXJcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuY3VycmVudEVxdWlwbWVudHMuc3BhY2UgPSBmaWx0ZXJlZEVxdWlwcztcclxuICAgICAgaWYgKHRoaXMuem9uZUlERmlsdGVyKSB7XHJcbiAgICAgICAgZmlsdGVyZWRFcXVpcHMgPSAoYXdhaXQgdGhpcy5maWx0ZXJTZXJ2aWNlLmZpbHRlck9iamVjdHNGb3Jab25lKFxyXG4gICAgICAgICAgZmlsdGVyZWRFcXVpcHMsXHJcbiAgICAgICAgICB0aGlzLnpvbmVJREZpbHRlcixcclxuICAgICAgICAgIHRoaXMuY3VycmVudFpvbmVcclxuICAgICAgICApKSBhcyBFcXVpcG1lbnRbXTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnpvbmVzTWFwLnNldCh0aGlzLnpvbmVJREZpbHRlciwgZmlsdGVyZWRFcXVpcHMpO1xyXG4gICAgICB0aGlzLmVxdWlwbWVudHNUYWdzLm5leHQoZmlsdGVyZWRFcXVpcHMpOyAvLyBhZGRpbmcgdGFncyBvbmx5IGZvciB0aGUgY3VycmVudCB6b25lXHJcbiAgICAgIHRoaXMuZXF1aXBtZW50c1VwZGF0ZWQubmV4dCh7XHJcbiAgICAgICAgc3BhY2U6IHRoaXMuY3VycmVudEVxdWlwbWVudHMuc3BhY2UsXHJcbiAgICAgICAgem9uZTogZmlsdGVyZWRFcXVpcHMsXHJcbiAgICAgIH0pOyAvLyBmb3IgbGF0ZXJhbCBtZW51XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy56b25lSURGaWx0ZXIpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnpvbmVzTWFwLnNldCh0aGlzLnpvbmVJREZpbHRlciwgW10pO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZXF1aXBtZW50c1VwZGF0ZWQubmV4dCh7IHNwYWNlOiBbXSwgem9uZTogW10gfSk7IC8vIGZvciBsYXRlcmFsIG1lbnVcclxuICAgIH1cclxuICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuY3VycmVudEVxdWlwbWVudHMpO1xyXG4gICAgdGhpcy51cGRhdGluZy5uZXh0KGZhbHNlKTtcclxuICAgIHRoaXMuY3VycmVudGx5VXBkYXRpbmcgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGdldEVxdWlwbWVudHNGb3JDdXJyZW50VXNlckZvclNwYWNlKFxyXG4gICAgc3BhY2VJRCxcclxuICAgIG1pc3Npb25zOiBNaXNzaW9uW11cclxuICApOiBQcm9taXNlPEVxdWlwbWVudFtdPiB7XHJcbiAgICBsZXQgcmVzdWx0cyA9IFtdO1xyXG5cclxuICAgIGNvbnN0IHNwYWNlTWlzc2lvbnMgPSBtaXNzaW9ucy5maWx0ZXIoKG0pID0+IG0uc3BhY2VJRCA9PT0gc3BhY2VJRCk7XHJcbiAgICBpZiAoc3BhY2VNaXNzaW9ucy5sZW5ndGggPT09IDApIHtcclxuICAgICAgcmV0dXJuIHJlc3VsdHM7XHJcbiAgICB9XHJcbiAgICBjb25zdCBjYW5TZWVFcXVpcHMgPSBzcGFjZU1pc3Npb25zLnNvbWUoXHJcbiAgICAgIChtKSA9PlxyXG4gICAgICAgIHRoaXMudXNlclNlcnZpY2UubWFuYWdlcnMuaW5jbHVkZXMobS5yb2xlKSB8fFxyXG4gICAgICAgIG0ucm9sZSA9PT0gUm9sZVN0YXR1cy5TRVJWSUNFXHJcbiAgICApO1xyXG4gICAgaWYgKCFjYW5TZWVFcXVpcHMpIHtcclxuICAgICAgcmV0dXJuIHJlc3VsdHM7XHJcbiAgICB9XHJcbiAgICBsZXQgZG9tYWlucyA9IFtdO1xyXG4gICAgZm9yIChjb25zdCBtIG9mIHNwYWNlTWlzc2lvbnMpIHtcclxuICAgICAgZG9tYWlucyA9IFsuLi5kb21haW5zLCBtLmRvbWFpbnNdO1xyXG4gICAgfVxyXG4gICAgaWYgKGRvbWFpbnMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJldHVybiByZXN1bHRzO1xyXG4gICAgfVxyXG4gICAgcmVzdWx0cyA9IGF3YWl0IHRoaXMuZ2V0RXF1aXBtZW50c0ZvclNwYWNlKHNwYWNlSUQpO1xyXG4gICAgLy8gcmVzdWx0cyA9IHRoaXMuZmlsdGVyU2VydmljZS5maWx0ZXJFcXVpcG1lbnRzQnlEb21haW5MaXN0KFxyXG4gICAgLy8gICAgIHJlc3VsdHMsXHJcbiAgICAvLyAgICAgZG9tYWlucyxcclxuICAgIC8vICk7XHJcbiAgICByZXR1cm4gcmVzdWx0cztcclxuICB9XHJcblxyXG4gIGFzeW5jIHVwZGF0ZUljb25Gb3JBbGxFcXVpcG1lbnRzSW5TcGFjZShcclxuICAgIHRhZ0ljb246IHN0cmluZyxcclxuICAgIHNwYWNlSUQ6IHN0cmluZyxcclxuICAgIGRvbWFpbklEOiBzdHJpbmcgPSBudWxsXHJcbiAgKTogUHJvbWlzZTx7IGVxdWlwczogRXF1aXBtZW50W107IHBvaXM6IFBPSVtdIH0+IHtcclxuICAgIGxldCBlcXVpcHMgPSBhd2FpdCB0aGlzLmdldEVxdWlwbWVudHNGb3JTcGFjZShzcGFjZUlEKTtcclxuICAgIGlmIChkb21haW5JRCkge1xyXG4gICAgICBlcXVpcHMgPSBlcXVpcHMuZmlsdGVyKChlcXVpcCkgPT4gZXF1aXAuZG9tYWluSUQgPT09IGRvbWFpbklEKTtcclxuICAgIH1cclxuICAgIGNvbnN0IHBvaXMgPSBhd2FpdCB0aGlzLnVwZGF0ZUljb25Gb3JBbGxPYmplY3RzKGVxdWlwcywgdGFnSWNvbik7XHJcbiAgICByZXR1cm4geyBlcXVpcHMsIHBvaXMgfTtcclxuICB9XHJcblxyXG4gIC8qKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgY3VycmVudCB1c2VyIGhhcyBhcmNoaXZlZCB0aGlzIGVxdWlwbWVudCAqL1xyXG4gIGlzQXJjaGl2ZWQoZXF1aXBtZW50OiBFcXVpcG1lbnQpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBlcXVpcG1lbnQuYXJjaGl2ZWRGb3JNaXNzaW9uSURcclxuICAgICAgPyBlcXVpcG1lbnQuYXJjaGl2ZWRGb3JNaXNzaW9uSUQuaW5jbHVkZXMoXHJcbiAgICAgICAgdGhpcy51c2VyU2VydmljZS5jdXJyZW50TWlzc2lvbihlcXVpcG1lbnQuc3BhY2VJRCkuaWRcclxuICAgICAgKVxyXG4gICAgICA6IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgc2V0QXJjaGl2ZWQoZXF1aXBtZW50OiBFcXVpcG1lbnQsIGFyY2hpdmVkOiBib29sZWFuKSB7XHJcbiAgICBsZXQgYXJjaGl2ZWRMaXN0ID0gZXF1aXBtZW50LmFyY2hpdmVkRm9yTWlzc2lvbklEXHJcbiAgICAgID8gZXF1aXBtZW50LmFyY2hpdmVkRm9yTWlzc2lvbklEXHJcbiAgICAgIDogW107XHJcbiAgICBjb25zdCBtaXNzaW9uSUQgPSB0aGlzLnVzZXJTZXJ2aWNlLmN1cnJlbnRNaXNzaW9uKGVxdWlwbWVudC5zcGFjZUlEKS5pZDtcclxuXHJcbiAgICBhcmNoaXZlZExpc3QgPSBhcmNoaXZlZExpc3QuZmlsdGVyKChtKSA9PiBtICE9PSBtaXNzaW9uSUQpO1xyXG5cclxuICAgIGlmIChhcmNoaXZlZCkge1xyXG4gICAgICBhcmNoaXZlZExpc3QucHVzaChtaXNzaW9uSUQpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLnVwZGF0ZUVxdWlwbWVudCh7XHJcbiAgICAgIGlkOiBlcXVpcG1lbnQuaWQsXHJcbiAgICAgIGFyY2hpdmVkRm9yTWlzc2lvbklEOiBhcmNoaXZlZExpc3QsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGRlbGV0ZUZpbGUoZG9jdW1lbnRfOiBFcXVpcG1lbnREb2N1bWVudCkge1xyXG4gICAgYXdhaXQgZGVsZXRlRnJvbVMzKGRvY3VtZW50Xy51cmwpO1xyXG4gICAgYXdhaXQgdGhpcy5BUEkuRGVsZXRlTm90ZSh7IGlkOiBkb2N1bWVudF8ubm90ZUlEIH0pO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgbmF2aWdhdGVUb0VxdWlwbWVudEluM0QoXHJcbiAgICBlcXVpcG1lbnQ6IEVxdWlwbWVudCxcclxuICAgIGZvcmNlU3dpdGNoVmlzaXQ6IGJvb2xlYW4gPSBmYWxzZVxyXG4gICkge1xyXG4gICAgbGV0IHVybCA9IGB2aXNpdC8ke2VxdWlwbWVudC5zcGFjZUlEfWA7XHJcbiAgICBpZiAoZm9yY2VTd2l0Y2hWaXNpdCkge1xyXG4gICAgICB1cmwgKz0gYC9lcXVpcC8ke2VxdWlwbWVudC5pZH1gO1xyXG4gICAgfVxyXG4gICAgY29uc3QgY2FuR29Ub1RhZyA9IGF3YWl0IHRoaXMudmlld2VyU2VydmljZS5hY3Rpb25fbW92ZV90b190YWcoXHJcbiAgICAgIGAke2VxdWlwbWVudC5pZH1gXHJcbiAgICApO1xyXG4gICAgaWYgKGNhbkdvVG9UYWcpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5nZXRNb2RlbDNkQW5kU3dlZXAoZXF1aXBtZW50KTtcclxuXHJcbiAgICBpZiAoIXJlc3VsdCB8fCAhcmVzdWx0Lm1vZGVsM0QpIHtcclxuICAgICAgYWxlcnQoJ0Vycm9yIHdoaWxlIGdldHRpbmcgdmlydHVhbCB2aXNpdCBtb2RlbCcpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoIWZvcmNlU3dpdGNoVmlzaXQpIHtcclxuICAgICAgLy8gY2hlY2sgaWYgd2UgYXJlIG1vdmluZyB3aXRoaW4gdGhlIHNhbWUgM0QgbW9kZWxcclxuICAgICAgY29uc3QgY3VycmVudE1vZGVsID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ21vZGVsM0QnKTtcclxuICAgICAgaWYgKGN1cnJlbnRNb2RlbCAmJiBjdXJyZW50TW9kZWwgPT09IHJlc3VsdC5tb2RlbDNEKSB7XHJcbiAgICAgICAgLy8gd2UgYWRkIHRhZyB0byB0aGUgdmlzaXRcclxuICAgICAgICBjb25zdCBwb2kgPSBlcXVpcG1lbnQucG9pcy5pdGVtc1swXTtcclxuICAgICAgICBpZiAocG9pLmNvb3JkaW5hdGUpIHtcclxuICAgICAgICAgIC8vIHdlIGZvcmNlIGFkZCBiZWNhdXNlIHdlIG1pZ2h0IGJlIGluIGFuIGFub3RoZXIgem9uZVxyXG4gICAgICAgICAgYXdhaXQgdGhpcy52aWV3ZXJTZXJ2aWNlLmFjdGlvbkFkZE9iamVjdEZyb21QT0koZXF1aXBtZW50LCBwb2kpO1xyXG4gICAgICAgICAgYXdhaXQgdGhpcy52aWV3ZXJTZXJ2aWNlLmFjdGlvbl9tb3ZlX3RvX3RhZyhlcXVpcG1lbnQuaWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvKiogU2kgb24gbmUgZm9yY2UgcGFzIGxhIHZpc2l0ZSwgb24gZGVtYW5kZSBzaSBvbiB2ZXV0IGV0cmUgc3dpdGNoICovXHJcbiAgICAgICAgb3Blbk1vZGFsRm9yVmlzaXRTd2l0Y2goXHJcbiAgICAgICAgICB0aGlzLm1vZGFsU2VydmljZSxcclxuICAgICAgICAgIHJlc3VsdC5tb2RlbDNELFxyXG4gICAgICAgICAgZXF1aXBtZW50LnNwYWNlSUQsXHJcbiAgICAgICAgICB7IHN3ZWVwVG9Nb3ZlOiByZXN1bHQuc3dlZXAsIHJvdGF0aW9uOiByZXN1bHQucm90YXRpb24gfVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHdpbmRvdy5vcGVuKGAke3VybH0/bW9kZWwzRD0ke3Jlc3VsdC5tb2RlbDNEfSZzd2VlcD10cnVlYCwgJ19ibGFuaycpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgdXBkYXRlRXF1aXBzRm9yWm9uZSgpIHtcclxuICAgIHRoaXMudXBkYXRpbmcubmV4dCh0cnVlKTtcclxuICAgIGxldCBmaWx0ZXJlZEVxdWlwcyA9IFtdO1xyXG4gICAgaWYgKHRoaXMuY3VycmVudEVxdWlwbWVudHMuc3BhY2UubGVuZ3RoID4gMCkge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy56b25lSURGaWx0ZXIgJiZcclxuICAgICAgICB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnpvbmVzTWFwLmhhcyh0aGlzLnpvbmVJREZpbHRlcilcclxuICAgICAgKSB7XHJcbiAgICAgICAgZmlsdGVyZWRFcXVpcHMgPSB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnpvbmVzTWFwLmdldCh0aGlzLnpvbmVJREZpbHRlcik7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJpIGhhdmUgZXF1aXBzIGZvciB0aGlzIHpvbmVcIiwgZmlsdGVyZWRFcXVpcHMpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGZpbHRlcmVkRXF1aXBzID0gKGF3YWl0IHRoaXMuZmlsdGVyU2VydmljZS5maWx0ZXJPYmplY3RzRm9yWm9uZShcclxuICAgICAgICAgIHRoaXMuY3VycmVudEVxdWlwbWVudHMuc3BhY2UsXHJcbiAgICAgICAgICB0aGlzLnpvbmVJREZpbHRlcixcclxuICAgICAgICAgIHRoaXMuY3VycmVudFpvbmVcclxuICAgICAgICApKSBhcyBFcXVpcG1lbnRbXTtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJyZW50RXF1aXBtZW50cy56b25lc01hcC5zZXQodGhpcy56b25lSURGaWx0ZXIsIFtcclxuICAgICAgICAgIC4uLmZpbHRlcmVkRXF1aXBzLFxyXG4gICAgICAgIF0pO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmVxdWlwbWVudERvbWFpbkZpbHRlcikge1xyXG4gICAgICAgIGZpbHRlcmVkRXF1aXBzID0gdGhpcy5maWx0ZXJTZXJ2aWNlLmZpbHRlckVxdWlwbWVudHNCeURvbWFpbkxpc3QoXHJcbiAgICAgICAgICBmaWx0ZXJlZEVxdWlwcyxcclxuICAgICAgICAgIHRoaXMuZXF1aXBtZW50RG9tYWluRmlsdGVyXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmVxdWlwbWVudHNUYWdzLm5leHQoZmlsdGVyZWRFcXVpcHMpOyAvLyBhZGRpbmcgdGFncyBvbmx5IGZvciB0aGUgY3VycmVudCB6b25lXHJcbiAgICAgIHRoaXMuZXF1aXBtZW50c1VwZGF0ZWQubmV4dCh7XHJcbiAgICAgICAgc3BhY2U6IHRoaXMuY3VycmVudEVxdWlwbWVudHMuc3BhY2UsXHJcbiAgICAgICAgem9uZTogZmlsdGVyZWRFcXVpcHMsXHJcbiAgICAgIH0pOyAvLyBmb3IgbGF0ZXJhbCBtZW51XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmVxdWlwbWVudHNVcGRhdGVkLm5leHQoeyBzcGFjZTogW10sIHpvbmU6IFtdIH0pOyAvLyBmb3IgbGF0ZXJhbCBtZW51XHJcbiAgICB9XHJcbiAgICB0aGlzLnVwZGF0aW5nLm5leHQoZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlRHVlVG9EZWxldGUoZGVsZXRlZEVxdWlwbWVudDogRXF1aXBtZW50KSB7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhcInVwZGF0ZSBkdWUgdG8gZGVsZXRlXCIsIGRlbGV0ZWRFcXVpcG1lbnQpO1xyXG4gICAgY29uc3QgZXF1aXAgPSB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnNwYWNlLmZpbmQoXHJcbiAgICAgIChfZXF1aXApID0+IF9lcXVpcC5pZCA9PT0gZGVsZXRlZEVxdWlwbWVudC5pZFxyXG4gICAgKTtcclxuICAgIGlmIChlcXVpcCkge1xyXG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMuY3VycmVudEVxdWlwbWVudHMuc3BhY2UuaW5kZXhPZihlcXVpcCk7XHJcbiAgICAgIHRoaXMuY3VycmVudEVxdWlwbWVudHMuc3BhY2Uuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgIH1cclxuICAgIGZvciAoY29uc3Qgem9uZSBvZiB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnpvbmVzTWFwLmtleXMoKSkge1xyXG4gICAgICBjb25zdCBlcXVpcFRvRGVsZXRlID0gdGhpcy5jdXJyZW50RXF1aXBtZW50cy56b25lc01hcFxyXG4gICAgICAgIC5nZXQoem9uZSlcclxuICAgICAgICAuZmluZCgoX2VxdWlwKSA9PiBfZXF1aXAuaWQgPT09IGRlbGV0ZWRFcXVpcG1lbnQuaWQpO1xyXG4gICAgICBpZiAoZXF1aXBUb0RlbGV0ZSkge1xyXG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5jdXJyZW50RXF1aXBtZW50cy56b25lc01hcFxyXG4gICAgICAgICAgLmdldCh6b25lKVxyXG4gICAgICAgICAgLmluZGV4T2YoZXF1aXBUb0RlbGV0ZSk7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50RXF1aXBtZW50cy56b25lc01hcC5nZXQoem9uZSkuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5lcXVpcG1lbnRzVXBkYXRlZC5uZXh0KHtcclxuICAgICAgc3BhY2U6IHRoaXMuY3VycmVudEVxdWlwbWVudHMuc3BhY2UsXHJcbiAgICAgIHpvbmU6IHRoaXMuY3VycmVudEVxdWlwbWVudHMuem9uZXNNYXAuZ2V0KHRoaXMuem9uZUlERmlsdGVyKSxcclxuICAgIH0pOyAvLyBmb3IgbGF0ZXJhbCBtZW51XHJcbiAgfVxyXG5cclxuICB1cGRhdGVEdWVUb0NyZWF0ZShjcmVhdGVkRXF1aXA6IEVxdWlwbWVudCkge1xyXG4gICAgdGhpcy5jdXJyZW50RXF1aXBtZW50cy5zcGFjZS51bnNoaWZ0KGNyZWF0ZWRFcXVpcCk7XHJcbiAgICB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnpvbmVzTWFwXHJcbiAgICAgIC5nZXQodGhpcy56b25lSURGaWx0ZXIpXHJcbiAgICAgIC51bnNoaWZ0KGNyZWF0ZWRFcXVpcCk7XHJcbiAgICB0aGlzLmVxdWlwbWVudHNVcGRhdGVkLm5leHQoe1xyXG4gICAgICBzcGFjZTogdGhpcy5jdXJyZW50RXF1aXBtZW50cy5zcGFjZSxcclxuICAgICAgem9uZTogdGhpcy5jdXJyZW50RXF1aXBtZW50cy56b25lc01hcC5nZXQodGhpcy56b25lSURGaWx0ZXIpLFxyXG4gICAgfSk7IC8vIGZvciBsYXRlcmFsIG1lbnVcclxuICB9XHJcblxyXG4gIHVwZGF0ZUR1ZVRvRXF1aXBVcGRhdGVkKHVwZGF0ZWRFcXVpcDogRXF1aXBtZW50KSB7XHJcbiAgICBjb25zdCBlcXVpcCA9IHRoaXMuY3VycmVudEVxdWlwbWVudHMuc3BhY2UuZmluZChcclxuICAgICAgKF9lcXVpcCkgPT4gX2VxdWlwLmlkID09PSB1cGRhdGVkRXF1aXAuaWRcclxuICAgICk7XHJcbiAgICBpZiAoZXF1aXApIHtcclxuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnNwYWNlLmluZGV4T2YoZXF1aXApO1xyXG4gICAgICBpZiAodGhpcy5pc0FyY2hpdmVkKGVxdWlwKSkge1xyXG4gICAgICAgIC8vIHdlIHJlbW92ZSBhcmNoaXZlZCBlcXVpcG1lbnRcclxuICAgICAgICB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnNwYWNlLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50RXF1aXBtZW50cy5zcGFjZS5zcGxpY2UoaW5kZXgsIDEsIHVwZGF0ZWRFcXVpcCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGZvciAoY29uc3Qgem9uZSBvZiB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnpvbmVzTWFwLmtleXMoKSkge1xyXG4gICAgICBjb25zdCBlcXVpcFRvVXBkID0gdGhpcy5jdXJyZW50RXF1aXBtZW50cy56b25lc01hcFxyXG4gICAgICAgIC5nZXQoem9uZSlcclxuICAgICAgICAuZmluZCgoX2VxdWlwKSA9PiBfZXF1aXAuaWQgPT09IHVwZGF0ZWRFcXVpcC5pZCk7XHJcbiAgICAgIGlmIChlcXVpcFRvVXBkKSB7XHJcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnpvbmVzTWFwXHJcbiAgICAgICAgICAuZ2V0KHpvbmUpXHJcbiAgICAgICAgICAuaW5kZXhPZihlcXVpcFRvVXBkKTtcclxuICAgICAgICBpZiAodGhpcy5pc0FyY2hpdmVkKGVxdWlwKSkge1xyXG4gICAgICAgICAgdGhpcy5jdXJyZW50RXF1aXBtZW50cy56b25lc01hcC5nZXQoem9uZSkuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5jdXJyZW50RXF1aXBtZW50cy56b25lc01hcFxyXG4gICAgICAgICAgICAuZ2V0KHpvbmUpXHJcbiAgICAgICAgICAgIC5zcGxpY2UoaW5kZXgsIDEsIHVwZGF0ZWRFcXVpcCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmVxdWlwbWVudHNVcGRhdGVkLm5leHQoe1xyXG4gICAgICBzcGFjZTogdGhpcy5jdXJyZW50RXF1aXBtZW50cy5zcGFjZSxcclxuICAgICAgem9uZTogdGhpcy5jdXJyZW50RXF1aXBtZW50cy56b25lc01hcC5nZXQodGhpcy56b25lSURGaWx0ZXIpLFxyXG4gICAgfSk7IC8vIGZvciBsYXRlcmFsIG1lbnVcclxuICB9XHJcblxyXG4gIGluaXRTdWJzY3JpcHRpb25zKCkge1xyXG4gICAgaWYgKHRoaXMudXNlclNlcnZpY2UuZ2V0U3BNb2R1bGUoKSA9PT0gU3BNb2R1bGUuTVVTRVVNKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuem9uZUNoYW5nZVNlcnZpY2Uuem9uZUNoYW5nZVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHpvbmUpID0+IHtcclxuICAgICAgICBpZiAoIXpvbmUgfHwgIXRoaXMubmF2aWdhdG9yU2VydmljZS5jdXJyZW50U3BhY2VJRCkge1xyXG4gICAgICAgICAgdGhpcy5jdXJyZW50U3BhY2VJRCA9IHRoaXMubmF2aWdhdG9yU2VydmljZS5jdXJyZW50U3BhY2VJRDtcclxuICAgICAgICAgIHRoaXMuZXF1aXBtZW50c1RhZ3MubmV4dChudWxsKTtcclxuICAgICAgICAgIHRoaXMuZXF1aXBtZW50c1VwZGF0ZWQubmV4dCh7IHNwYWNlOiBbXSwgem9uZTogbnVsbCB9KTtcclxuICAgICAgICAgIHRoaXMuem9uZUlERmlsdGVyID0gbnVsbDtcclxuICAgICAgICAgIHRoaXMuY3VycmVudEVxdWlwbWVudHMgPSB7XHJcbiAgICAgICAgICAgIHNwYWNlOiBbXSxcclxuICAgICAgICAgICAgem9uZXNNYXA6IG5ldyBNYXAoKSxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh6b25lLmlkICE9PSB0aGlzLnpvbmVJREZpbHRlcikge1xyXG4gICAgICAgICAgdGhpcy56b25lSURGaWx0ZXIgPSB6b25lLmlkO1xyXG4gICAgICAgICAgdGhpcy5jdXJyZW50Wm9uZSA9IHpvbmU7XHJcbiAgICAgICAgICBpZiAodGhpcy5jdXJyZW50U3BhY2VJRCA9PT0gdGhpcy5uYXZpZ2F0b3JTZXJ2aWNlLmN1cnJlbnRTcGFjZUlEKSB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUVxdWlwc0ZvclpvbmUoKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFNwYWNlSUQgPSB0aGlzLm5hdmlnYXRvclNlcnZpY2UuY3VycmVudFNwYWNlSUQ7XHJcbiAgICAgICAgICAgIHRoaXMuaW5pdEVxdWlwcygpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgdGhpcy5kZWxldGVPYnNlcnZhYmxlXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSgoZXF1aXBtZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFNwYWNlSUQpIHtcclxuICAgICAgICAgIHRoaXMudXBkYXRlRHVlVG9EZWxldGUoZXF1aXBtZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHRoaXMuY3JlYXRlT2JzZXJ2YWJsZVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKGVxdWlwbWVudCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRTcGFjZUlEKSB7XHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZUR1ZVRvQ3JlYXRlKGVxdWlwbWVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZU9ic2VydmFibGVcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKChlcXVpcG1lbnQpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50U3BhY2VJRCkge1xyXG4gICAgICAgICAgdGhpcy51cGRhdGVEdWVUb0VxdWlwVXBkYXRlZChlcXVpcG1lbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICB1bnN1YnNjcmliZSgpIHtcclxuICAgIHRoaXMuZGVzdHJveSQubmV4dCh0cnVlKTtcclxuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcclxuICB9XHJcbn1cclxuIl19
|