gitlab-ci-local 4.26.3 → 4.26.4
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/package.json +13 -15
- package/src/job.js +33 -1
- package/src/parser-includes.js +8 -6
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"description": "Tired of pushing to test your .gitlab-ci.yml?",
|
|
4
4
|
"main": "src/index.js",
|
|
5
5
|
"bin": "src/index.js",
|
|
6
|
-
"version": "4.26.
|
|
6
|
+
"version": "4.26.4",
|
|
7
7
|
"scripts": {
|
|
8
8
|
"prepublishOnly": "npm run check-all && chmod +x src/index.js",
|
|
9
9
|
"pkg-linux": "pkg src/index.js --public -t node16-linux-x64 -o bin/linux/gitlab-ci-local && chmod +x bin/linux/gitlab-ci-local && gzip -c bin/linux/gitlab-ci-local > bin/linux.gz",
|
|
@@ -20,41 +20,39 @@
|
|
|
20
20
|
"start": "ts-node --log-error src/index.ts --cwd examples/docker-compose-nodejs"
|
|
21
21
|
},
|
|
22
22
|
"dependencies": {
|
|
23
|
+
"axios": "^0.24.0",
|
|
23
24
|
"base64url": "^3.0.1",
|
|
24
|
-
"camelcase": "^6.2.
|
|
25
|
+
"camelcase": "^6.2.1",
|
|
25
26
|
"chalk": "^4.1.2",
|
|
26
27
|
"checksum": "^1.0.0",
|
|
27
28
|
"deep-extend": "^0.6.0",
|
|
28
29
|
"dotenv": "^10.0.0",
|
|
29
30
|
"fs-extra": "^10.0.0",
|
|
30
31
|
"js-yaml": "^4.1.0",
|
|
31
|
-
"node-fetch": "^2.6.5",
|
|
32
32
|
"pretty-hrtime": "^1.0.3",
|
|
33
|
-
"source-map-support": "^0.5.
|
|
33
|
+
"source-map-support": "^0.5.21",
|
|
34
34
|
"yargs": "^17.2.1"
|
|
35
35
|
},
|
|
36
36
|
"devDependencies": {
|
|
37
|
-
"@types/chalk": "2.2.0",
|
|
38
37
|
"@types/checksum": "0.1.33",
|
|
39
38
|
"@types/deep-extend": "0.4.32",
|
|
40
39
|
"@types/fs-extra": "9.0.13",
|
|
41
|
-
"@types/jest": "27.0.
|
|
40
|
+
"@types/jest": "27.0.3",
|
|
42
41
|
"@types/jest-when": "2.7.3",
|
|
43
|
-
"@types/js-yaml": "4.0.
|
|
44
|
-
"@types/node-fetch": "2.5.12",
|
|
42
|
+
"@types/js-yaml": "4.0.5",
|
|
45
43
|
"@types/pretty-hrtime": "1.0.1",
|
|
46
44
|
"@types/source-map-support": "0.5.4",
|
|
47
|
-
"@types/yargs": "17.0.
|
|
48
|
-
"@typescript-eslint/eslint-plugin": "5.
|
|
49
|
-
"@typescript-eslint/parser": "5.
|
|
45
|
+
"@types/yargs": "17.0.7",
|
|
46
|
+
"@typescript-eslint/eslint-plugin": "5.5.0",
|
|
47
|
+
"@typescript-eslint/parser": "5.5.0",
|
|
50
48
|
"depcheck": "1.4.2",
|
|
51
|
-
"eslint": "8.
|
|
52
|
-
"jest": "27.
|
|
49
|
+
"eslint": "8.3.0",
|
|
50
|
+
"jest": "27.4.2",
|
|
53
51
|
"jest-when": "3.4.2",
|
|
54
|
-
"pkg": "5.
|
|
52
|
+
"pkg": "5.5.1",
|
|
55
53
|
"ts-jest": "27.0.7",
|
|
56
54
|
"ts-node": "10.4.0",
|
|
57
|
-
"typescript": "4.
|
|
55
|
+
"typescript": "4.5.2"
|
|
58
56
|
},
|
|
59
57
|
"engines": {
|
|
60
58
|
"node": ">=16.10.0"
|
package/src/job.js
CHANGED
|
@@ -395,6 +395,7 @@ class Job {
|
|
|
395
395
|
for (const service of this.services) {
|
|
396
396
|
await this.pullImage(writeStreams, service.getName(this.expandedVariables));
|
|
397
397
|
await this.startService(writeStreams, service, privileged);
|
|
398
|
+
await this.serviceHealthCheck(writeStreams, service);
|
|
398
399
|
}
|
|
399
400
|
}
|
|
400
401
|
const volumePromises = [];
|
|
@@ -699,6 +700,37 @@ class Job {
|
|
|
699
700
|
const endTime = process.hrtime(time);
|
|
700
701
|
writeStreams.stdout((0, chalk_1.default) `${this.chalkJobName} {magentaBright started service image: ${serviceName} with aliases: ${aliases.join(", ")}} in {magenta ${(0, pretty_hrtime_1.default)(endTime)}}\n`);
|
|
701
702
|
}
|
|
703
|
+
async serviceHealthCheck(writeStreams, service) {
|
|
704
|
+
const dockerInspectCmd = `docker inspect ${service.getName(this.expandedVariables)}`;
|
|
705
|
+
const { stdout: imageDetails } = await utils_1.Utils.spawn(dockerInspectCmd, this.cwd);
|
|
706
|
+
const imageDetailObj = JSON.parse(imageDetails);
|
|
707
|
+
// Copied from the startService block. Important thing is that the aliases match
|
|
708
|
+
const serviceAlias = service.getAlias(this.expandedVariables);
|
|
709
|
+
const serviceName = service.getName(this.expandedVariables);
|
|
710
|
+
const serviceNameWithoutVersion = serviceName.replace(/(.*)(:.*)/, "$1");
|
|
711
|
+
const aliases = [serviceNameWithoutVersion.replace("/", "-"), serviceNameWithoutVersion.replace("/", "__")];
|
|
712
|
+
if (serviceAlias) {
|
|
713
|
+
aliases.push(serviceAlias);
|
|
714
|
+
}
|
|
715
|
+
// Iterate over each port defined in the image, and try to connect to the alias
|
|
716
|
+
for (const port of Object.keys(imageDetailObj[0].ContainerConfig.ExposedPorts)) {
|
|
717
|
+
if (port.endsWith("/tcp")) {
|
|
718
|
+
const portNum = parseInt(port.replace("/tcp", ""));
|
|
719
|
+
let dockerCmd = `docker run -d --network gitlab-ci-local-${this.jobId} `;
|
|
720
|
+
dockerCmd += ` willwill/wait-for-it "${aliases[0]}:${portNum}" -t 30`;
|
|
721
|
+
const time = process.hrtime();
|
|
722
|
+
const { status: result, stdout } = await utils_1.Utils.spawn(dockerCmd, this.cwd);
|
|
723
|
+
this._serviceIds.push(stdout.replace(/\r?\n/g, ""));
|
|
724
|
+
const endTime = process.hrtime(time);
|
|
725
|
+
if (result == 0) {
|
|
726
|
+
writeStreams.stdout((0, chalk_1.default) `${this.chalkJobName} {greenBright service image: ${serviceName} healthcheck passed: ${aliases[0]}:${portNum}} in {green ${(0, pretty_hrtime_1.default)(endTime)}}\n`);
|
|
727
|
+
}
|
|
728
|
+
else {
|
|
729
|
+
writeStreams.stdout((0, chalk_1.default) `${this.chalkJobName} {redBright service image: ${serviceName} healthcheck failed: ${aliases[0]}:${portNum}} in {red ${(0, pretty_hrtime_1.default)(endTime)}}\n`);
|
|
730
|
+
}
|
|
731
|
+
}
|
|
732
|
+
}
|
|
733
|
+
}
|
|
702
734
|
}
|
|
703
735
|
exports.Job = Job;
|
|
704
736
|
Job.illegalJobNames = [
|
|
@@ -706,4 +738,4 @@ Job.illegalJobNames = [
|
|
|
706
738
|
"stages", "pages", "types", "before_script", "default",
|
|
707
739
|
"after_script", "variables", "cache", "workflow",
|
|
708
740
|
];
|
|
709
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiam9iLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiam9iLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxrREFBMEI7QUFDMUIsK0NBQWlDO0FBQ2pDLDREQUE4QztBQUM5Qyw2Q0FBK0I7QUFDL0Isa0VBQXlDO0FBQ3pDLDBEQUFrQztBQUNsQyxtREFBNkM7QUFDN0MsbUNBQThCO0FBSzlCLHVDQUFpQztBQUVqQyxNQUFhLEdBQUc7SUF5Q1osWUFBWSxHQUFlO1FBbEJuQix3QkFBbUIsR0FBa0IsSUFBSSxDQUFDO1FBQzFDLDBCQUFxQixHQUFHLENBQUMsQ0FBQztRQUMxQixxQkFBZ0IsR0FBa0IsSUFBSSxDQUFDO1FBQ3ZDLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFDakIsaUJBQVksR0FBa0IsSUFBSSxDQUFDO1FBQ25DLGdCQUFXLEdBQWEsRUFBRSxDQUFDO1FBQzNCLHNCQUFpQixHQUFrQixJQUFJLENBQUM7UUFDeEMsMEJBQXFCLEdBQWtCLElBQUksQ0FBQztRQUM1QywwQkFBcUIsR0FBYSxFQUFFLENBQUM7UUFDckMsOEJBQXlCLEdBQW1CLENBQUMsQ0FBUSxDQUFDO1FBQ3RELGVBQVUsR0FBcUQsSUFBSSxDQUFDO1FBU3hFLE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7UUFDekIsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQztRQUM1QixNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDO1FBQzVCLE1BQU0sYUFBYSxHQUFHLEdBQUcsQ0FBQyxhQUFhLENBQUM7UUFDeEMsTUFBTSxnQkFBZ0IsR0FBRyxHQUFHLENBQUMsZ0JBQWdCLENBQUM7UUFFOUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQztRQUMzQixJQUFJLENBQUMsWUFBWSxH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QUFDLFlBQVksMENBQTBDLFdBQVcsa0JBQWtCLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixJQUFBLHVCQUFZLEVBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZMLENBQUM7O0FBbHlCTCxrQkFteUJDO0FBanlCbUIsbUJBQWUsR0FBRztJQUM5QixTQUFTLEVBQUUscUJBQXFCLEVBQUUsT0FBTyxFQUFFLFVBQVU7SUFDckQsUUFBUSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLFNBQVM7SUFDdEQsY0FBYyxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsVUFBVTtDQUNuRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNoYWxrIGZyb20gXCJjaGFsa1wiO1xuaW1wb3J0ICogYXMgZG90ZW52IGZyb20gXCJkb3RlbnZcIjtcbmltcG9ydCAqIGFzIGNoaWxkUHJvY2VzcyBmcm9tIFwiY2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0ICogYXMgZnMgZnJvbSBcImZzLWV4dHJhXCI7XG5pbXBvcnQgcHJldHR5SHJ0aW1lIGZyb20gXCJwcmV0dHktaHJ0aW1lXCI7XG5pbXBvcnQgY2FtZWxDYXNlIGZyb20gXCJjYW1lbGNhc2VcIjtcbmltcG9ydCB7RXhpdEVycm9yfSBmcm9tIFwiLi90eXBlcy9leGl0LWVycm9yXCI7XG5pbXBvcnQge1V0aWxzfSBmcm9tIFwiLi91dGlsc1wiO1xuaW1wb3J0IHtKb2JPcHRpb25zfSBmcm9tIFwiLi90eXBlcy9qb2Itb3B0aW9uc1wiO1xuaW1wb3J0IHtXcml0ZVN0cmVhbXN9IGZyb20gXCIuL3R5cGVzL3dyaXRlLXN0cmVhbXNcIjtcbmltcG9ydCB7U2VydmljZX0gZnJvbSBcIi4vc2VydmljZVwiO1xuaW1wb3J0IHtHaXREYXRhfSBmcm9tIFwiLi9naXQtZGF0YVwiO1xuaW1wb3J0IHthc3NlcnR9IGZyb20gXCIuL2Fzc2VydHNcIjtcblxuZXhwb3J0IGNsYXNzIEpvYiB7XG5cbiAgICBzdGF0aWMgcmVhZG9ubHkgaWxsZWdhbEpvYk5hbWVzID0gW1xuICAgICAgICBcImluY2x1ZGVcIiwgXCJsb2NhbF9jb25maWd1cmF0aW9uXCIsIFwiaW1hZ2VcIiwgXCJzZXJ2aWNlc1wiLFxuICAgICAgICBcInN0YWdlc1wiLCBcInBhZ2VzXCIsIFwidHlwZXNcIiwgXCJiZWZvcmVfc2NyaXB0XCIsIFwiZGVmYXVsdFwiLFxuICAgICAgICBcImFmdGVyX3NjcmlwdFwiLCBcInZhcmlhYmxlc1wiLCBcImNhY2hlXCIsIFwid29ya2Zsb3dcIixcbiAgICBdO1xuXG4gICAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICAgIHJlYWRvbmx5IGpvYk5hbWVQYWQ6IG51bWJlcjtcbiAgICByZWFkb25seSBkZXBlbmRlbmNpZXM6IHN0cmluZ1tdIHwgbnVsbDtcbiAgICByZWFkb25seSBlbnZpcm9ubWVudD86IHsgbmFtZTogc3RyaW5nOyB1cmw6IHN0cmluZyB8IG51bGwgfTtcbiAgICByZWFkb25seSBqb2JJZDogbnVtYmVyO1xuICAgIHJlYWRvbmx5IGN3ZDogc3RyaW5nO1xuICAgIHJlYWRvbmx5IHJ1bGVzPzogeyBpZjogc3RyaW5nOyB3aGVuOiBzdHJpbmc7IGFsbG93X2ZhaWx1cmU6IGJvb2xlYW4gfVtdO1xuICAgIHJlYWRvbmx5IGV4cGFuZGVkVmFyaWFibGVzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuICAgIHJlYWRvbmx5IGFsbG93RmFpbHVyZTogYm9vbGVhbjtcbiAgICByZWFkb25seSB3aGVuOiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgcGlwZWxpbmVJaWQ6IG51bWJlcjtcbiAgICByZWFkb25seSBjYWNoZTogeyBrZXk6IHN0cmluZyB8IHsgZmlsZXM6IHN0cmluZ1tdIH07IHBhdGhzOiBzdHJpbmdbXSB9W107XG4gICAgcmVhZG9ubHkgZ2l0RGF0YTogR2l0RGF0YTtcbiAgICByZWFkb25seSBzaGVsbElzb2xhdGlvbjogYm9vbGVhbjtcblxuICAgIHByaXZhdGUgX3ByZXNjcmlwdHNFeGl0Q29kZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gICAgcHJpdmF0ZSBfYWZ0ZXJTY3JpcHRzRXhpdENvZGUgPSAwO1xuICAgIHByaXZhdGUgX2NvdmVyYWdlUGVyY2VudDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gICAgcHJpdmF0ZSBfcnVubmluZyA9IGZhbHNlO1xuICAgIHByaXZhdGUgX2NvbnRhaW5lcklkOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgICBwcml2YXRlIF9zZXJ2aWNlSWRzOiBzdHJpbmdbXSA9IFtdO1xuICAgIHByaXZhdGUgX3NlcnZpY2VOZXR3b3JrSWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAgIHByaXZhdGUgX2FydGlmYWN0c0NvbnRhaW5lcklkOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgICBwcml2YXRlIF9jb250YWluZXJWb2x1bWVOYW1lczogc3RyaW5nW10gPSBbXTtcbiAgICBwcml2YXRlIF9sb25nUnVubmluZ1NpbGVudFRpbWVvdXQ6IE5vZGVKUy5UaW1lb3V0ID0gLTEgYXMgYW55O1xuICAgIHByaXZhdGUgX3Byb2R1Y2VyczogeyBuYW1lOiBzdHJpbmc7IGRvdGVudjogc3RyaW5nIHwgbnVsbCB9W10gfCBudWxsID0gbnVsbDtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgX25lZWRzOiB7IGpvYjogc3RyaW5nOyBhcnRpZmFjdHM6IHRydWUgfVtdIHwgc3RyaW5nW10gfCBudWxsO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgam9iRGF0YTogYW55O1xuICAgIHByaXZhdGUgcmVhZG9ubHkgd3JpdGVTdHJlYW1zOiBXcml0ZVN0cmVhbXM7XG4gICAgcHJpdmF0ZSByZWFkb25seSBleHRyYUhvc3RzOiBzdHJpbmdbXTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHZvbHVtZXM6IHN0cmluZ1tdO1xuXG4gICAgY29uc3RydWN0b3Iob3B0OiBKb2JPcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IGpvYkRhdGEgPSBvcHQuZGF0YTtcbiAgICAgICAgY29uc3QgZ2l0RGF0YSA9IG9wdC5naXREYXRhO1xuICAgICAgICBjb25zdCBnbG9iYWxzID0gb3B0Lmdsb2JhbHM7XG4gICAgICAgIGNvbnN0IGhvbWVWYXJpYWJsZXMgPSBvcHQuaG9tZVZhcmlhYmxlcztcbiAgICAgICAgY29uc3QgcHJvamVjdFZhcmlhYmxlcyA9IG9wdC5wcm9qZWN0VmFyaWFibGVzO1xuXG4gICAgICAgIHRoaXMuZXh0cmFIb3N0cyA9IG9wdC5leHRyYUhvc3RzO1xuICAgICAgICB0aGlzLnZvbHVtZXMgPSBvcHQudm9sdW1lcztcbiAgICAgICAgdGhpcy53cml0ZVN0cmVhbXMgPSBvcHQud3JpdGVTdHJlYW1zO1xuICAgICAgICB0aGlzLmpvYk5hbWVQYWQgPSBvcHQubmFtZVBhZDtcbiAgICAgICAgdGhpcy5naXREYXRhID0gb3B0LmdpdERhdGE7XG4gICAgICAgIHRoaXMubmFtZSA9IG9wdC5uYW1lO1xuICAgICAgICB0aGlzLmN3ZCA9IG9wdC5jd2Q7XG4gICAgICAgIHRoaXMuam9iSWQgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMDAwMDAwKTtcbiAgICAgICAgdGhpcy5qb2JEYXRhID0gb3B0LmRhdGE7XG4gICAgICAgIHRoaXMucGlwZWxpbmVJaWQgPSBvcHQucGlwZWxpbmVJaWQ7XG4gICAgICAgIHRoaXMuc2hlbGxJc29sYXRpb24gPSBvcHQuc2hlbGxJc29sYXRpb247XG5cbiAgICAgICAgdGhpcy53aGVuID0gam9iRGF0YS53aGVuIHx8IFwib25fc3VjY2Vzc1wiO1xuICAgICAgICB0aGlzLmFsbG93RmFpbHVyZSA9IGpvYkRhdGEuYWxsb3dfZmFpbHVyZSA/PyBmYWxzZTtcbiAgICAgICAgdGhpcy5fbmVlZHMgPSBqb2JEYXRhLm5lZWRzIHx8IG51bGw7XG4gICAgICAgIHRoaXMuZGVwZW5kZW5jaWVzID0gam9iRGF0YS5kZXBlbmRlbmNpZXMgfHwgbnVsbDtcbiAgICAgICAgdGhpcy5ydWxlcyA9IGpvYkRhdGEucnVsZXMgfHwgbnVsbDtcbiAgICAgICAgdGhpcy5lbnZpcm9ubWVudCA9IHR5cGVvZiBqb2JEYXRhLmVudmlyb25tZW50ID09PSBcInN0cmluZ1wiID8ge25hbWU6IGpvYkRhdGEuZW52aXJvbm1lbnR9IDogam9iRGF0YS5lbnZpcm9ubWVudDtcbiAgICAgICAgdGhpcy5jYWNoZSA9IGpvYkRhdGEuY2FjaGUgfHwgW107XG5cbiAgICAgICAgbGV0IENJX1BST0pFQ1RfRElSID0gYCR7dGhpcy5jd2R9YDtcbiAgICAgICAgaWYgKHRoaXMuaW1hZ2VOYW1lKSB7XG4gICAgICAgICAgICBDSV9QUk9KRUNUX0RJUiA9IGAvYnVpbGRzLyR7dGhpcy5zYWZlSm9iTmFtZX1gO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2hlbGxJc29sYXRpb24pIHtcbiAgICAgICAgICAgIENJX1BST0pFQ1RfRElSID0gYCR7dGhpcy5jd2R9Ly5naXRsYWItY2ktbG9jYWwvYnVpbGRzLyR7dGhpcy5zYWZlSm9iTmFtZX1gO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcHJlZGVmaW5lZFZhcmlhYmxlcyA9IHtcbiAgICAgICAgICAgIEdJVExBQl9VU0VSX0xPR0lOOiBnaXREYXRhLnVzZXJbXCJHSVRMQUJfVVNFUl9MT0dJTlwiXSxcbiAgICAgICAgICAgIEdJVExBQl9VU0VSX0VNQUlMOiBnaXREYXRhLnVzZXJbXCJHSVRMQUJfVVNFUl9FTUFJTFwiXSxcbiAgICAgICAgICAgIEdJVExBQl9VU0VSX05BTUU6IGdpdERhdGEudXNlcltcIkdJVExBQl9VU0VSX05BTUVcIl0sXG4gICAgICAgICAgICBHSVRMQUJfVVNFUl9JRDogZ2l0RGF0YS51c2VyW1wiR0lUTEFCX1VTRVJfSURcIl0sXG4gICAgICAgICAgICBDSV9DT01NSVRfU0hPUlRfU0hBOiBnaXREYXRhLmNvbW1pdC5TSE9SVF9TSEEsIC8vIENoYW5nZXNcbiAgICAgICAgICAgIENJX0NPTU1JVF9TSEE6IGdpdERhdGEuY29tbWl0LlNIQSxcbiAgICAgICAgICAgIENJX1BST0pFQ1RfRElSLFxuICAgICAgICAgICAgQ0lfUFJPSkVDVF9OQU1FOiBnaXREYXRhLnJlbW90ZS5wcm9qZWN0LFxuICAgICAgICAgICAgQ0lfUFJPSkVDVF9USVRMRTogYCR7Y2FtZWxDYXNlKGdpdERhdGEucmVtb3RlLnByb2plY3QpfWAsXG4gICAgICAgICAgICBDSV9QUk9KRUNUX1BBVEg6IGdpdERhdGEuQ0lfUFJPSkVDVF9QQVRILFxuICAgICAgICAgICAgQ0lfUFJPSkVDVF9QQVRIX1NMVUc6IGdpdERhdGEuQ0lfUFJPSkVDVF9QQVRIX1NMVUcsXG4gICAgICAgICAgICBDSV9QUk9KRUNUX05BTUVTUEFDRTogYCR7Z2l0RGF0YS5yZW1vdGUuZ3JvdXB9YCxcbiAgICAgICAgICAgIENJX1BST0pFQ1RfVklTSUJJTElUWTogXCJpbnRlcm5hbFwiLFxuICAgICAgICAgICAgQ0lfUFJPSkVDVF9JRDogXCIxMjE3XCIsXG4gICAgICAgICAgICBDSV9DT01NSVRfUkVGX1BST1RFQ1RFRDogXCJmYWxzZVwiLFxuICAgICAgICAgICAgQ0lfQ09NTUlUX0JSQU5DSDogZ2l0RGF0YS5jb21taXQuUkVGX05BTUUsIC8vIE5vdCBhdmFpbGFibGUgaW4gbWVyZ2UgcmVxdWVzdCBvciB0YWcgcGlwZWxpbmVzXG4gICAgICAgICAgICBDSV9DT01NSVRfUkVGX05BTUU6IGdpdERhdGEuY29tbWl0LlJFRl9OQU1FLCAvLyBUYWcgb3IgYnJhbmNoIG5hbWVcbiAgICAgICAgICAgIENJX0NPTU1JVF9SRUZfU0xVRzogZ2l0RGF0YS5jb21taXQuUkVGX05BTUUucmVwbGFjZSgvW15hLXowLTldKy9pZywgXCItXCIpLnJlcGxhY2UoL14tLywgXCJcIikucmVwbGFjZSgvLSQvLCBcIlwiKS5zbGljZSgwLCA2MykudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgICAgIENJX0NPTU1JVF9USVRMRTogXCJDb21taXQgVGl0bGVcIiwgLy8gRmlyc3QgbGluZSBvZiBjb21taXQgbWVzc2FnZS5cbiAgICAgICAgICAgIENJX0NPTU1JVF9NRVNTQUdFOiBcIkNvbW1pdCBUaXRsZVxcbk1vcmUgY29tbWl0IHRleHRcIiwgLy8gRnVsbCBjb21taXQgbWVzc2FnZVxuICAgICAgICAgICAgQ0lfQ09NTUlUX0RFU0NSSVBUSU9OOiBcIk1vcmUgY29tbWl0IHRleHRcIixcbiAgICAgICAgICAgIENJX1BJUEVMSU5FX1NPVVJDRTogXCJwdXNoXCIsXG4gICAgICAgICAgICBDSV9KT0JfSUQ6IGAke3RoaXMuam9iSWR9YCxcbiAgICAgICAgICAgIENJX1BJUEVMSU5FX0lEOiBgJHt0aGlzLnBpcGVsaW5lSWlkICsgMTAwMH1gLFxuICAgICAgICAgICAgQ0lfUElQRUxJTkVfSUlEOiBgJHt0aGlzLnBpcGVsaW5lSWlkfWAsXG4gICAgICAgICAgICBDSV9TRVJWRVJfSE9TVDogYCR7Z2l0RGF0YS5yZW1vdGUuaG9zdH1gLFxuICAgICAgICAgICAgQ0lfU0VSVkVSX1BPUlQ6IGAke2dpdERhdGEucmVtb3RlLnBvcnR9YCxcbiAgICAgICAgICAgIENJX1NFUlZFUl9VUkw6IGBodHRwczovLyR7Z2l0RGF0YS5yZW1vdGUuaG9zdH06NDQzYCxcbiAgICAgICAgICAgIENJX1NFUlZFUl9QUk9UT0NPTDogXCJodHRwc1wiLFxuICAgICAgICAgICAgQ0lfQVBJX1Y0X1VSTDogYGh0dHBzOi8vJHtnaXREYXRhLnJlbW90ZS5ob3N0fS9hcGkvdjRgLFxuICAgICAgICAgICAgQ0lfUFJPSkVDVF9VUkw6IGBodHRwczovLyR7Z2l0RGF0YS5yZW1vdGUuaG9zdH0vJHtnaXREYXRhLnJlbW90ZS5ncm91cH0vJHtnaXREYXRhLnJlbW90ZS5wcm9qZWN0fWAsXG4gICAgICAgICAgICBDSV9KT0JfVVJMOiBgaHR0cHM6Ly8ke2dpdERhdGEucmVtb3RlLmhvc3R9LyR7Z2l0RGF0YS5yZW1vdGUuZ3JvdXB9LyR7Z2l0RGF0YS5yZW1vdGUucHJvamVjdH0vLS9qb2JzLyR7dGhpcy5qb2JJZH1gLCAvLyBDaGFuZ2VzIG9uIHJlcnVuLlxuICAgICAgICAgICAgQ0lfUElQRUxJTkVfVVJMOiBgaHR0cHM6Ly8ke2dpdERhdGEucmVtb3RlLmhvc3R9LyR7Z2l0RGF0YS5yZW1vdGUuZ3JvdXB9LyR7Z2l0RGF0YS5yZW1vdGUucHJvamVjdH0vcGlwZWxpbmVzLyR7dGhpcy5waXBlbGluZUlpZH1gLFxuICAgICAgICAgICAgQ0lfSk9CX05BTUU6IGAke3RoaXMubmFtZX1gLFxuICAgICAgICAgICAgQ0lfSk9CX1NUQUdFOiBgJHt0aGlzLnN0YWdlfWAsXG4gICAgICAgICAgICBDSV9SRUdJU1RSWTogZ2l0RGF0YS5DSV9SRUdJU1RSWSxcbiAgICAgICAgICAgIENJX1JFR0lTVFJZX0lNQUdFOiBnaXREYXRhLkNJX1JFR0lTVFJZX0lNQUdFLFxuICAgICAgICAgICAgR0lUTEFCX0NJOiBcImZhbHNlXCIsXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gQ3JlYXRlIGV4cGFuZGVkIHZhcmlhYmxlc1xuICAgICAgICBjb25zdCBlbnZzID0gey4uLnByZWRlZmluZWRWYXJpYWJsZXMsIC4uLmdsb2JhbHMudmFyaWFibGVzIHx8IHt9LCAuLi5qb2JEYXRhLnZhcmlhYmxlcyB8fCB7fSwgLi4uaG9tZVZhcmlhYmxlcywgLi4ucHJvamVjdFZhcmlhYmxlc307XG4gICAgICAgIGNvbnN0IGV4cGFuZGVkR2xvYmFsVmFyaWFibGVzID0gVXRpbHMuZXhwYW5kVmFyaWFibGVzKGdsb2JhbHMudmFyaWFibGVzIHx8IHt9LCBlbnZzKTtcbiAgICAgICAgY29uc3QgZXhwYW5kZWRKb2JWYXJpYWJsZXMgPSBVdGlscy5leHBhbmRWYXJpYWJsZXMoam9iRGF0YS52YXJpYWJsZXMgfHwge30sIGVudnMpO1xuICAgICAgICB0aGlzLmV4cGFuZGVkVmFyaWFibGVzID0gey4uLnByZWRlZmluZWRWYXJpYWJsZXMsIC4uLmV4cGFuZGVkR2xvYmFsVmFyaWFibGVzLCAuLi5leHBhbmRlZEpvYlZhcmlhYmxlcywgLi4uaG9tZVZhcmlhYmxlcywgLi4ucHJvamVjdFZhcmlhYmxlc307XG5cbiAgICAgICAgLy8gU2V0IHt3aGVuLCBhbGxvd0ZhaWx1cmV9IGJhc2VkIG9uIHJ1bGVzIHJlc3VsdFxuICAgICAgICBpZiAodGhpcy5ydWxlcykge1xuICAgICAgICAgICAgY29uc3QgcnVsZVJlc3VsdCA9IFV0aWxzLmdldFJ1bGVzUmVzdWx0KHRoaXMucnVsZXMsIHRoaXMuZXhwYW5kZWRWYXJpYWJsZXMpO1xuICAgICAgICAgICAgdGhpcy53aGVuID0gcnVsZVJlc3VsdC53aGVuO1xuICAgICAgICAgICAgdGhpcy5hbGxvd0ZhaWx1cmUgPSBydWxlUmVzdWx0LmFsbG93RmFpbHVyZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmludGVyYWN0aXZlICYmICh0aGlzLndoZW4gIT09IFwibWFudWFsXCIgfHwgdGhpcy5pbWFnZU5hbWUgIT09IG51bGwpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXhpdEVycm9yKGAke3RoaXMuY2hhbGtKb2JOYW1lfSBASW50ZXJhY3RpdmUgZGVjb3JhdG9yIGNhbm5vdCBoYXZlIGltYWdlOiBhbmQgbXVzdCBiZSB3aGVuOm1hbnVhbGApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaW5qZWN0U1NIQWdlbnQgJiYgdGhpcy5pbWFnZU5hbWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGl0RXJyb3IoYCR7dGhpcy5jaGFsa0pvYk5hbWV9IEBJbmplY3RTU0hBZ2VudCBjYW4gb25seSBiZSB1c2VkIHdpdGggaW1hZ2U6YCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgYXN5bmMgZ2V0VW5pcXVlQ2FjaGVOYW1lKGN3ZDogc3RyaW5nLCBjYWNoZUVudHJ5OiB7IGtleTogc3RyaW5nIHwgeyBmaWxlczogc3RyaW5nW10gfTsgcGF0aHM6IHN0cmluZ1tdIH0sIGV4cGFuZGVkVmFyaWFibGVzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9KSB7XG4gICAgICAgIGlmICh0eXBlb2YgY2FjaGVFbnRyeS5rZXkgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBVdGlscy5leHBhbmRUZXh0KGNhY2hlRW50cnkua2V5KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gXCJtZC1cIiArIGF3YWl0IFV0aWxzLmNoZWNrc3VtRmlsZXMoY2FjaGVFbnRyeS5rZXkuZmlsZXMubWFwKGYgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGAke2N3ZH0vJHtVdGlscy5leHBhbmRUZXh0KGYsIGV4cGFuZGVkVmFyaWFibGVzKX1gO1xuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgZ2V0IGFydGlmYWN0c1RvU291cmNlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5qb2JEYXRhW1wiYXJ0aWZhY3RzVG9Tb3VyY2VcIl0gPT0gbnVsbCA/IHRydWUgOiB0aGlzLmpvYkRhdGFbXCJhcnRpZmFjdHNUb1NvdXJjZVwiXTtcbiAgICB9XG5cbiAgICBnZXQgY2hhbGtKb2JOYW1lKCkge1xuICAgICAgICByZXR1cm4gY2hhbGtge2JsdWVCcmlnaHQgJHt0aGlzLm5hbWUucGFkRW5kKHRoaXMuam9iTmFtZVBhZCl9fWA7XG4gICAgfVxuXG4gICAgZ2V0IHNhZmVKb2JOYW1lKCkge1xuICAgICAgICByZXR1cm4gVXRpbHMuZ2V0U2FmZUpvYk5hbWUodGhpcy5uYW1lKTtcbiAgICB9XG5cbiAgICBnZXQgbmVlZHMoKToge2pvYjogc3RyaW5nOyBhcnRpZmFjdHM6IGJvb2xlYW59W10gfCBudWxsIHtcbiAgICAgICAgaWYgKCF0aGlzLl9uZWVkcykgcmV0dXJuIG51bGw7XG4gICAgICAgIGNvbnN0IGxpc3Q6IHtqb2I6IHN0cmluZzsgYXJ0aWZhY3RzOiBib29sZWFufVtdID0gW107XG4gICAgICAgIHRoaXMuX25lZWRzPy5mb3JFYWNoKChuZWVkKSA9PiB7XG4gICAgICAgICAgICBsaXN0LnB1c2goe1xuICAgICAgICAgICAgICAgIGpvYjogdHlwZW9mIG5lZWQgPT09IFwic3RyaW5nXCIgPyBuZWVkIDogbmVlZC5qb2IsXG4gICAgICAgICAgICAgICAgYXJ0aWZhY3RzOiB0eXBlb2YgbmVlZCA9PT0gXCJzdHJpbmdcIiA/IHRydWUgOiBuZWVkLmFydGlmYWN0cyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGxpc3Q7XG4gICAgfVxuXG5cbiAgICBnZXQgaW1hZ2VOYW1lKCk6IHN0cmluZyB8IG51bGwge1xuICAgICAgICBjb25zdCBpbWFnZSA9IHRoaXMuam9iRGF0YVtcImltYWdlXCJdO1xuICAgICAgICBpZiAoIWltYWdlKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGltYWdlTmFtZSA9IFV0aWxzLmV4cGFuZFRleHQoaW1hZ2UubmFtZSwgdGhpcy5leHBhbmRlZFZhcmlhYmxlcyk7XG4gICAgICAgIHJldHVybiBpbWFnZU5hbWUuaW5jbHVkZXMoXCI6XCIpID8gaW1hZ2VOYW1lIDogYCR7aW1hZ2VOYW1lfTpsYXRlc3RgO1xuICAgIH1cblxuICAgIGdldCBpbWFnZUVudHJ5cG9pbnQoKTogc3RyaW5nW10gfCBudWxsIHtcbiAgICAgICAgY29uc3QgaW1hZ2UgPSB0aGlzLmpvYkRhdGFbXCJpbWFnZVwiXTtcblxuICAgICAgICBpZiAoIWltYWdlIHx8ICFpbWFnZS5lbnRyeXBvaW50KSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGltYWdlLmVudHJ5cG9pbnQgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGl0RXJyb3IoXCJpbWFnZTplbnRyeXBvaW50IG11c3QgYmUgYW4gYXJyYXlcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGltYWdlLmVudHJ5cG9pbnQ7XG4gICAgfVxuXG4gICAgZ2V0IHNlcnZpY2VzKCk6IFNlcnZpY2VbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLmpvYkRhdGFbXCJzZXJ2aWNlc1wiXTtcbiAgICB9XG5cbiAgICBnZXQgcHJvZHVjZXJzKCk6IHsgbmFtZTogc3RyaW5nOyBkb3RlbnY6IHN0cmluZyB8IG51bGwgfVtdIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9kdWNlcnM7XG4gICAgfVxuXG4gICAgc2V0IHByb2R1Y2Vycyhwcm9kdWNlcnM6IHsgbmFtZTogc3RyaW5nOyBkb3RlbnY6IHN0cmluZyB8IG51bGwgfVtdIHwgbnVsbCkge1xuICAgICAgICBhc3NlcnQodGhpcy5fcHJvZHVjZXJzID09IG51bGwsIFwidGhpcy5fcHJvZHVjZXJzIGNhbiBvbmx5IGJlIHNldCBvbmNlXCIpO1xuICAgICAgICB0aGlzLl9wcm9kdWNlcnMgPSBwcm9kdWNlcnM7XG4gICAgfVxuXG4gICAgZ2V0IHN0YWdlKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmpvYkRhdGFbXCJzdGFnZVwiXSB8fCBcInRlc3RcIjtcbiAgICB9XG5cbiAgICBnZXQgaW50ZXJhY3RpdmUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmpvYkRhdGFbXCJpbnRlcmFjdGl2ZVwiXSB8fCBmYWxzZTtcbiAgICB9XG5cbiAgICBnZXQgaW5qZWN0U1NIQWdlbnQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmpvYkRhdGFbXCJpbmplY3RTU0hBZ2VudFwiXSB8fCBmYWxzZTtcbiAgICB9XG5cbiAgICBnZXQgZGVzY3JpcHRpb24oKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuam9iRGF0YVtcImRlc2NyaXB0aW9uXCJdID8/IFwiXCI7XG4gICAgfVxuXG4gICAgZ2V0IGFydGlmYWN0cygpOiB7IHBhdGhzPzogc3RyaW5nW107IGV4Y2x1ZGU/OiBzdHJpbmdbXTsgcmVwb3J0cz86IHsgZG90ZW52Pzogc3RyaW5nIH0gfXxudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuam9iRGF0YVtcImFydGlmYWN0c1wiXTtcbiAgICB9XG5cbiAgICBnZXQgYmVmb3JlU2NyaXB0cygpOiBzdHJpbmdbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLmpvYkRhdGFbXCJiZWZvcmVfc2NyaXB0XCJdIHx8IFtdO1xuICAgIH1cblxuICAgIGdldCBhZnRlclNjcmlwdHMoKTogc3RyaW5nW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5qb2JEYXRhW1wiYWZ0ZXJfc2NyaXB0XCJdIHx8IFtdO1xuICAgIH1cblxuICAgIGdldCBzY3JpcHRzKCk6IHN0cmluZ1tdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuam9iRGF0YVtcInNjcmlwdFwiXTtcbiAgICB9XG5cbiAgICBnZXQgcHJlU2NyaXB0c0V4aXRDb2RlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHJlc2NyaXB0c0V4aXRDb2RlO1xuICAgIH1cblxuICAgIGdldCBhZnRlclNjcmlwdHNFeGl0Q29kZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FmdGVyU2NyaXB0c0V4aXRDb2RlO1xuICAgIH1cblxuICAgIGdldCBydW5uaW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcnVubmluZztcbiAgICB9XG5cbiAgICBnZXQgc3RhcnRlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3J1bm5pbmcgfHwgdGhpcy5fcHJlc2NyaXB0c0V4aXRDb2RlICE9PSBudWxsO1xuICAgIH1cblxuICAgIGdldCBmaW5pc2hlZCgpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLl9ydW5uaW5nICYmIHRoaXMuX3ByZXNjcmlwdHNFeGl0Q29kZSAhPT0gbnVsbDtcbiAgICB9XG5cbiAgICBnZXQgY292ZXJhZ2VQZXJjZW50KCk6IHN0cmluZyB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5fY292ZXJhZ2VQZXJjZW50O1xuICAgIH1cblxuICAgIGFzeW5jIHN0YXJ0KHByaXZpbGVnZWQ6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3Qgc3RhcnRUaW1lID0gcHJvY2Vzcy5ocnRpbWUoKTtcbiAgICAgICAgY29uc3Qgd3JpdGVTdHJlYW1zID0gdGhpcy53cml0ZVN0cmVhbXM7XG4gICAgICAgIGNvbnN0IHNhZmVKb2JuYW1lID0gdGhpcy5zYWZlSm9iTmFtZTtcblxuICAgICAgICB0aGlzLl9ydW5uaW5nID0gdHJ1ZTtcblxuICAgICAgICBhd2FpdCBmcy5lbnN1cmVGaWxlKGAke3RoaXMuY3dkfS8uZ2l0bGFiLWNpLWxvY2FsL291dHB1dC8ke3NhZmVKb2JuYW1lfS5sb2dgKTtcbiAgICAgICAgYXdhaXQgZnMudHJ1bmNhdGUoYCR7dGhpcy5jd2R9Ly5naXRsYWItY2ktbG9jYWwvb3V0cHV0LyR7c2FmZUpvYm5hbWV9LmxvZ2ApO1xuXG4gICAgICAgIGlmICghdGhpcy5pbnRlcmFjdGl2ZSkge1xuICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChjaGFsa2Ake3RoaXMuY2hhbGtKb2JOYW1lfSB7bWFnZW50YUJyaWdodCBzdGFydGluZ30gJHt0aGlzLmltYWdlTmFtZSA/PyBcInNoZWxsXCJ9ICh7eWVsbG93ICR7dGhpcy5zdGFnZX19KVxcbmApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcHJlc2NyaXB0cyA9IHRoaXMuYmVmb3JlU2NyaXB0cy5jb25jYXQodGhpcy5zY3JpcHRzKTtcbiAgICAgICAgdGhpcy5fcHJlc2NyaXB0c0V4aXRDb2RlID0gYXdhaXQgdGhpcy5leGVjU2NyaXB0cyhwcmVzY3JpcHRzLCBwcml2aWxlZ2VkKTtcbiAgICAgICAgaWYgKHRoaXMuYWZ0ZXJTY3JpcHRzLmxlbmd0aCA9PT0gMCAmJiB0aGlzLl9wcmVzY3JpcHRzRXhpdENvZGUgPiAwICYmICF0aGlzLmFsbG93RmFpbHVyZSkge1xuICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZGVycihgJHt0aGlzLmdldEV4aXRlZFN0cmluZyhzdGFydFRpbWUsIHRoaXMuX3ByZXNjcmlwdHNFeGl0Q29kZSwgZmFsc2UpfVxcbmApO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jbGVhbnVwUmVzb3VyY2VzKCk7XG4gICAgICAgICAgICB0aGlzLl9ydW5uaW5nID0gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5hZnRlclNjcmlwdHMubGVuZ3RoID09PSAwICYmIHRoaXMuX3ByZXNjcmlwdHNFeGl0Q29kZSA+IDAgJiYgdGhpcy5hbGxvd0ZhaWx1cmUpIHtcbiAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRlcnIoYCR7dGhpcy5nZXRFeGl0ZWRTdHJpbmcoc3RhcnRUaW1lLCB0aGlzLl9wcmVzY3JpcHRzRXhpdENvZGUsIHRydWUpfVxcbmApO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jbGVhbnVwUmVzb3VyY2VzKCk7XG4gICAgICAgICAgICB0aGlzLl9ydW5uaW5nID0gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fcHJlc2NyaXB0c0V4aXRDb2RlID4gMCAmJiB0aGlzLmFsbG93RmFpbHVyZSkge1xuICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZGVycihgJHt0aGlzLmdldEV4aXRlZFN0cmluZyhzdGFydFRpbWUsIHRoaXMuX3ByZXNjcmlwdHNFeGl0Q29kZSwgdHJ1ZSl9XFxuYCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fcHJlc2NyaXB0c0V4aXRDb2RlID4gMCAmJiAhdGhpcy5hbGxvd0ZhaWx1cmUpIHtcbiAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRlcnIoYCR7dGhpcy5nZXRFeGl0ZWRTdHJpbmcoc3RhcnRUaW1lLCB0aGlzLl9wcmVzY3JpcHRzRXhpdENvZGUsIGZhbHNlKX1cXG5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmFmdGVyU2NyaXB0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLl9hZnRlclNjcmlwdHNFeGl0Q29kZSA9IGF3YWl0IHRoaXMuZXhlY1NjcmlwdHModGhpcy5hZnRlclNjcmlwdHMsIHByaXZpbGVnZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX2FmdGVyU2NyaXB0c0V4aXRDb2RlID4gMCkge1xuICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZGVycihgJHt0aGlzLmdldEV4aXRlZFN0cmluZyhzdGFydFRpbWUsIHRoaXMuX2FmdGVyU2NyaXB0c0V4aXRDb2RlLCB0cnVlLCBcIiBhZnRlcl9zY3JpcHRcIil9XFxuYCk7XG4gICAgICAgIH1cblxuICAgICAgICB3cml0ZVN0cmVhbXMuc3Rkb3V0KGAke3RoaXMuZ2V0RmluaXNoZWRTdHJpbmcoc3RhcnRUaW1lKX1cXG5gKTtcblxuICAgICAgICBpZiAodGhpcy5qb2JEYXRhLmNvdmVyYWdlKSB7XG4gICAgICAgICAgICB0aGlzLl9jb3ZlcmFnZVBlcmNlbnQgPSBhd2FpdCBVdGlscy5nZXRDb3ZlcmFnZVBlcmNlbnQodGhpcy5jd2QsIHRoaXMuam9iRGF0YS5jb3ZlcmFnZSwgc2FmZUpvYm5hbWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgdGhpcy5jbGVhbnVwUmVzb3VyY2VzKCk7XG4gICAgICAgIHRoaXMuX3J1bm5pbmcgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBhc3luYyBjbGVhbnVwUmVzb3VyY2VzKCkge1xuICAgICAgICBjb25zdCB3cml0ZVN0cmVhbXMgPSB0aGlzLndyaXRlU3RyZWFtcztcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX2xvbmdSdW5uaW5nU2lsZW50VGltZW91dCk7XG5cbiAgICAgICAgaWYgKHRoaXMuX2NvbnRhaW5lcklkKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGF3YWl0IFV0aWxzLnNwYXduKGBkb2NrZXIgcm0gLWYgJHt0aGlzLl9jb250YWluZXJJZH1gKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBhc3NlcnQoZSBpbnN0YW5jZW9mIEVycm9yLCBcImUgaXMgbm90IGluc3RhbmNlb2YgRXJyb3JcIik7XG4gICAgICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZGVycihjaGFsa2B7eWVsbG93ICR7ZS5tZXNzYWdlfX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9zZXJ2aWNlSWRzKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgc2VydmljZUlkIG9mIHRoaXMuX3NlcnZpY2VJZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgVXRpbHMuc3Bhd24oYGRvY2tlciBybSAtZiAke3NlcnZpY2VJZH1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGUgaW5zdGFuY2VvZiBFcnJvciwgXCJlIGlzIG5vdCBpbnN0YW5jZW9mIEVycm9yXCIpO1xuICAgICAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRlcnIoY2hhbGtge3llbGxvdyAke2UubWVzc2FnZX19YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fc2VydmljZU5ldHdvcmtJZCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBhd2FpdCBVdGlscy5zcGF3bihgZG9ja2VyIG5ldHdvcmsgcm0gJHt0aGlzLl9zZXJ2aWNlTmV0d29ya0lkfWApO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGFzc2VydChlIGluc3RhbmNlb2YgRXJyb3IsIFwiZSBpcyBub3QgaW5zdGFuY2VvZiBFcnJvclwiKTtcbiAgICAgICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3RkZXJyKGNoYWxrYHt5ZWxsb3cgJHtlLm1lc3NhZ2V9fWApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX2FydGlmYWN0c0NvbnRhaW5lcklkKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGF3YWl0IFV0aWxzLnNwYXduKGBkb2NrZXIgcm0gLWYgJHt0aGlzLl9hcnRpZmFjdHNDb250YWluZXJJZH1gKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBhc3NlcnQoZSBpbnN0YW5jZW9mIEVycm9yLCBcImUgaXMgbm90IGluc3RhbmNlb2YgRXJyb3JcIik7XG4gICAgICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZGVycihjaGFsa2B7eWVsbG93ICR7ZS5tZXNzYWdlfX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9jb250YWluZXJWb2x1bWVOYW1lcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgY29udGFpbmVyVm9sdW1lIG9mIHRoaXMuX2NvbnRhaW5lclZvbHVtZU5hbWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IFV0aWxzLnNwYXduKGBkb2NrZXIgdm9sdW1lIHJtICR7Y29udGFpbmVyVm9sdW1lfWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBhc3NlcnQoZSBpbnN0YW5jZW9mIEVycm9yLCBcImUgaXMgbm90IGluc3RhbmNlb2YgRXJyb3JcIik7XG4gICAgICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZGVycihjaGFsa2B7eWVsbG93ICR7ZS5tZXNzYWdlfX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2VuZXJhdGVJbmplY3RTU0hBZ2VudE9wdGlvbnMoKSB7XG4gICAgICAgIGlmICghdGhpcy5pbmplY3RTU0hBZ2VudCkge1xuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09IFwiZGFyd2luXCIgfHwgKHByb2Nlc3MuZW52Lk9TVFlQRT8ubWF0Y2goL15kYXJ3aW4vKSA/PyBudWxsKSkge1xuICAgICAgICAgICAgcmV0dXJuIFwiLS1lbnYgU1NIX0FVVEhfU09DSz0vcnVuL2hvc3Qtc2VydmljZXMvc3NoLWF1dGguc29jayAtdiAvcnVuL2hvc3Qtc2VydmljZXMvc3NoLWF1dGguc29jazovcnVuL2hvc3Qtc2VydmljZXMvc3NoLWF1dGguc29ja1wiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBgLS1lbnYgU1NIX0FVVEhfU09DSz0ke3Byb2Nlc3MuZW52LlNTSF9BVVRIX1NPQ0t9IC12ICR7cHJvY2Vzcy5lbnYuU1NIX0FVVEhfU09DS306JHtwcm9jZXNzLmVudi5TU0hfQVVUSF9TT0NLfWA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZW5lcmF0ZVNjcmlwdENvbW1hbmRzKHNjcmlwdHM6IHN0cmluZ1tdKSB7XG4gICAgICAgIGxldCBjbWQgPSBcIlwiO1xuICAgICAgICBzY3JpcHRzLmZvckVhY2goKHNjcmlwdCkgPT4ge1xuICAgICAgICAgICAgLy8gUHJpbnQgY29tbWFuZCBlY2hvJ2VkIGluIGNvbG9yXG4gICAgICAgICAgICBjb25zdCBzcGxpdCA9IHNjcmlwdC5zcGxpdCgvXFxyP1xcbi8pO1xuICAgICAgICAgICAgY29uc3QgbXVsdGlsaW5lVGV4dCA9IHNwbGl0Lmxlbmd0aCA+IDEgPyBcIiAjIGNvbGxhcHNlZCBtdWx0aS1saW5lIGNvbW1hbmRcIiA6IFwiXCI7XG4gICAgICAgICAgICBjb25zdCB0ZXh0ID0gc3BsaXRbMF0/LnJlcGxhY2UoL1tcXFxcXS9nLCBcIlxcXFxcXFxcXCIpLnJlcGxhY2UoL1tcIl0vZywgXCJcXFxcXFxcIlwiKS5yZXBsYWNlKC9bJF0vZywgXCJcXFxcJFwiKTtcbiAgICAgICAgICAgIGNtZCArPSBjaGFsa2BlY2hvIFwie2dyZWVuICQgJHt0ZXh0fSR7bXVsdGlsaW5lVGV4dH19XCJcXG5gO1xuXG4gICAgICAgICAgICAvLyBFeGVjdXRlIGFjdHVhbCBzY3JpcHRcbiAgICAgICAgICAgIGNtZCArPSBgJHtzY3JpcHR9XFxuYDtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBjbWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBleGVjU2NyaXB0cyhzY3JpcHRzOiBzdHJpbmdbXSwgcHJpdmlsZWdlZDogYm9vbGVhbik6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgICAgIGNvbnN0IHNhZmVKb2JOYW1lID0gdGhpcy5zYWZlSm9iTmFtZTtcbiAgICAgICAgY29uc3Qgb3V0cHV0RmlsZXNQYXRoID0gYCR7dGhpcy5jd2R9Ly5naXRsYWItY2ktbG9jYWwvb3V0cHV0LyR7c2FmZUpvYk5hbWV9LmxvZ2A7XG4gICAgICAgIGNvbnN0IGJ1aWxkVm9sdW1lTmFtZSA9IGBnY2wtJHt0aGlzLnNhZmVKb2JOYW1lfS0ke3RoaXMuam9iSWR9LWJ1aWxkYDtcbiAgICAgICAgY29uc3QgdG1wVm9sdW1lTmFtZSA9IGBnY2wtJHt0aGlzLnNhZmVKb2JOYW1lfS0ke3RoaXMuam9iSWR9LXRtcGA7XG4gICAgICAgIGNvbnN0IHdyaXRlU3RyZWFtcyA9IHRoaXMud3JpdGVTdHJlYW1zO1xuICAgICAgICBjb25zdCByZXBvcnRzRG90ZW52VmFyaWFibGVzID0gYXdhaXQgdGhpcy5pbml0UHJvZHVjZXJSZXBvcnRzRG90ZW52VmFyaWFibGVzKHdyaXRlU3RyZWFtcyk7XG4gICAgICAgIGxldCB0aW1lO1xuICAgICAgICBsZXQgZW5kVGltZTtcblxuICAgICAgICBpZiAoc2NyaXB0cy5sZW5ndGggPT09IDAgfHwgc2NyaXB0c1swXSA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENvcHkgZ2l0IHRyYWNrZWQgZmlsZXMgdG8gYnVpbGQgZm9sZGVyIGlmIHNoZWxsIGlzb2xhdGlvbiBlbmFibGVkLlxuICAgICAgICBpZiAoIXRoaXMuaW1hZ2VOYW1lICYmIHRoaXMuc2hlbGxJc29sYXRpb24pIHtcbiAgICAgICAgICAgIGF3YWl0IFV0aWxzLnJzeW5jVHJhY2tlZEZpbGVzKHRoaXMuY3dkLCBgJHtzYWZlSm9iTmFtZX1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmludGVyYWN0aXZlKSB7XG4gICAgICAgICAgICBjb25zdCBpQ21kID0gdGhpcy5nZW5lcmF0ZVNjcmlwdENvbW1hbmRzKHNjcmlwdHMpO1xuICAgICAgICAgICAgY29uc3QgaW50ZXJhY3RpdmVDcCA9IGNoaWxkUHJvY2Vzcy5zcGF3bihpQ21kLCB7XG4gICAgICAgICAgICAgICAgc2hlbGw6IFwiYmFzaFwiLFxuICAgICAgICAgICAgICAgIHN0ZGlvOiBbXCJpbmhlcml0XCIsIFwiaW5oZXJpdFwiLCBcImluaGVyaXRcIl0sXG4gICAgICAgICAgICAgICAgY3dkOiB0aGlzLmN3ZCxcbiAgICAgICAgICAgICAgICBlbnY6IHsuLi50aGlzLmV4cGFuZGVkVmFyaWFibGVzLCAuLi5wcm9jZXNzLmVudn0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxudW1iZXI+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICBpbnRlcmFjdGl2ZUNwLm9uKFwiZXhpdFwiLCAoY29kZSkgPT4gcmVzb2x2ZShjb2RlID8/IDApKTtcbiAgICAgICAgICAgICAgICBpbnRlcmFjdGl2ZUNwLm9uKFwiZXJyb3JcIiwgKGVycikgPT4gcmVqZWN0KGVycikpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJlZnJlc2hMb25nUnVubmluZ1NpbGVudFRpbWVvdXQod3JpdGVTdHJlYW1zKTtcblxuICAgICAgICBpZiAodGhpcy5pbWFnZU5hbWUpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucHVsbEltYWdlKHdyaXRlU3RyZWFtcywgdGhpcy5pbWFnZU5hbWUpO1xuXG4gICAgICAgICAgICBsZXQgZG9ja2VyQ21kID0gXCJcIjtcbiAgICAgICAgICAgIGlmIChwcml2aWxlZ2VkKSB7XG4gICAgICAgICAgICAgICAgZG9ja2VyQ21kICs9IGBkb2NrZXIgY3JlYXRlIC0tcHJpdmlsZWdlZCAtdSAwOjAgLWkgJHt0aGlzLmdlbmVyYXRlSW5qZWN0U1NIQWdlbnRPcHRpb25zKCl9IGA7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRvY2tlckNtZCArPSBgZG9ja2VyIGNyZWF0ZSAtdSAwOjAgLWkgJHt0aGlzLmdlbmVyYXRlSW5qZWN0U1NIQWdlbnRPcHRpb25zKCl9IGA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5zZXJ2aWNlcz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5jcmVhdGVEb2NrZXJOZXR3b3JrKGBnaXRsYWItY2ktbG9jYWwtJHt0aGlzLmpvYklkfWApO1xuICAgICAgICAgICAgICAgIGRvY2tlckNtZCArPSBgLS1uZXR3b3JrIGdpdGxhYi1jaS1sb2NhbC0ke3RoaXMuam9iSWR9IGA7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBzZXJ2aWNlIG9mIHRoaXMuc2VydmljZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wdWxsSW1hZ2Uod3JpdGVTdHJlYW1zLCBzZXJ2aWNlLmdldE5hbWUodGhpcy5leHBhbmRlZFZhcmlhYmxlcykpO1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnN0YXJ0U2VydmljZSh3cml0ZVN0cmVhbXMsIHNlcnZpY2UsIHByaXZpbGVnZWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3Qgdm9sdW1lUHJvbWlzZXMgPSBbXTtcbiAgICAgICAgICAgIHZvbHVtZVByb21pc2VzLnB1c2goVXRpbHMuc3Bhd24oYGRvY2tlciB2b2x1bWUgY3JlYXRlICR7YnVpbGRWb2x1bWVOYW1lfWAsIHRoaXMuY3dkKSk7XG4gICAgICAgICAgICB2b2x1bWVQcm9taXNlcy5wdXNoKFV0aWxzLnNwYXduKGBkb2NrZXIgdm9sdW1lIGNyZWF0ZSAke3RtcFZvbHVtZU5hbWV9YCwgdGhpcy5jd2QpKTtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBgLS12b2x1bWUgJHtidWlsZFZvbHVtZU5hbWV9Oi9idWlsZHMvJHtzYWZlSm9iTmFtZX0gYDtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBgLS12b2x1bWUgJHt0bXBWb2x1bWVOYW1lfTovdG1wLyBgO1xuICAgICAgICAgICAgdGhpcy5fY29udGFpbmVyVm9sdW1lTmFtZXMucHVzaChidWlsZFZvbHVtZU5hbWUpO1xuICAgICAgICAgICAgdGhpcy5fY29udGFpbmVyVm9sdW1lTmFtZXMucHVzaCh0bXBWb2x1bWVOYW1lKTtcbiAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHZvbHVtZVByb21pc2VzKTtcblxuICAgICAgICAgICAgZG9ja2VyQ21kICs9IGAtLXdvcmtkaXIgL2J1aWxkcy8ke3NhZmVKb2JOYW1lfSBgO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHZvbHVtZSBvZiB0aGlzLnZvbHVtZXMpIHtcbiAgICAgICAgICAgICAgICBkb2NrZXJDbWQgKz0gYC0tdm9sdW1lICR7dm9sdW1lfSBgO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGV4dHJhSG9zdCBvZiB0aGlzLmV4dHJhSG9zdHMpIHtcbiAgICAgICAgICAgICAgICBkb2NrZXJDbWQgKz0gYC0tYWRkLWhvc3Q9JHtleHRyYUhvc3R9IGA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmltYWdlRW50cnlwb2ludCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW1hZ2VFbnRyeXBvaW50LmZvckVhY2goKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZG9ja2VyQ21kICs9IGAtLWVudHJ5cG9pbnQgXCIke2V9XCIgYDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5leHBhbmRlZFZhcmlhYmxlcykpIHtcbiAgICAgICAgICAgICAgICBkb2NrZXJDbWQgKz0gYC1lICR7a2V5fT0nJHtTdHJpbmcodmFsdWUpLnRyaW0oKX0nIGA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhyZXBvcnRzRG90ZW52VmFyaWFibGVzKSkge1xuICAgICAgICAgICAgICAgIGRvY2tlckNtZCArPSBgLWUgJHtrZXl9PScke1N0cmluZyh2YWx1ZSkudHJpbSgpfScgYDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZG9ja2VyQ21kICs9IGF3YWl0IHRoaXMuY3JlYXRlQ2FjaGVEb2NrZXJWb2x1bWVNb3VudHMoc2FmZUpvYk5hbWUsIHdyaXRlU3RyZWFtcyk7XG5cbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBgJHt0aGlzLmltYWdlTmFtZX0gc2ggLWMgXCJcXG5gO1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IFwiaWYgWyAteCAvdXNyL2xvY2FsL2Jpbi9iYXNoIF07IHRoZW5cXG5cIjtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBcIlxcdGV4ZWMgL3Vzci9sb2NhbC9iaW4vYmFzaCBcXG5cIjtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBcImVsaWYgWyAteCAvdXNyL2Jpbi9iYXNoIF07IHRoZW5cXG5cIjtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBcIlxcdGV4ZWMgL3Vzci9iaW4vYmFzaCBcXG5cIjtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBcImVsaWYgWyAteCAvYmluL2Jhc2ggXTsgdGhlblxcblwiO1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IFwiXFx0ZXhlYyAvYmluL2Jhc2ggXFxuXCI7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCJlbGlmIFsgLXggL3Vzci9sb2NhbC9iaW4vc2ggXTsgdGhlblxcblwiO1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IFwiXFx0ZXhlYyAvdXNyL2xvY2FsL2Jpbi9zaCBcXG5cIjtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBcImVsaWYgWyAteCAvdXNyL2Jpbi9zaCBdOyB0aGVuXFxuXCI7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCJcXHRleGVjIC91c3IvYmluL3NoIFxcblwiO1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IFwiZWxpZiBbIC14IC9iaW4vc2ggXTsgdGhlblxcblwiO1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IFwiXFx0ZXhlYyAvYmluL3NoIFxcblwiO1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IFwiZWxpZiBbIC14IC9idXN5Ym94L3NoIF07IHRoZW5cXG5cIjtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBcIlxcdGV4ZWMgL2J1c3lib3gvc2ggXFxuXCI7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCJlbHNlXFxuXCI7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCJcXHRlY2hvIHNoZWxsIG5vdCBmb3VuZFxcblwiO1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IFwiXFx0ZXhpdCAxXFxuXCI7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCJmaVxcblxcXCJcIjtcblxuICAgICAgICAgICAgY29uc3Qge3N0ZG91dDogY29udGFpbmVySWR9ID0gYXdhaXQgVXRpbHMuc3Bhd24oZG9ja2VyQ21kLCB0aGlzLmN3ZCk7XG4gICAgICAgICAgICB0aGlzLl9jb250YWluZXJJZCA9IGNvbnRhaW5lcklkLnJlcGxhY2UoL1xccj9cXG4vZywgXCJcIik7XG5cbiAgICAgICAgICAgIHRpbWUgPSBwcm9jZXNzLmhydGltZSgpO1xuICAgICAgICAgICAgLy8gQ29weSBzb3VyY2UgZmlsZXMgaW50byBjb250YWluZXIuXG4gICAgICAgICAgICBhd2FpdCBVdGlscy5zcGF3bihgZG9ja2VyIGNwIC5naXRsYWItY2ktbG9jYWwvYnVpbGRzLy5kb2NrZXIvLiAke3RoaXMuX2NvbnRhaW5lcklkfTovYnVpbGRzLyR7c2FmZUpvYk5hbWV9YCwgdGhpcy5jd2QpO1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoTG9uZ1J1bm5pbmdTaWxlbnRUaW1lb3V0KHdyaXRlU3RyZWFtcyk7XG5cbiAgICAgICAgICAgIC8vIENvcHkgZmlsZSB2YXJpYWJsZXMgaW50byBjb250YWluZXIuXG4gICAgICAgICAgICBjb25zdCBmaWxlVmFyaWFibGVzRm9sZGVyID0gYC90bXAvZ2l0bGFiLWNpLWxvY2FsLWZpbGUtdmFyaWFibGVzLSR7dGhpcy5naXREYXRhLkNJX1BST0pFQ1RfUEFUSF9TTFVHfS9gO1xuICAgICAgICAgICAgaWYgKGF3YWl0IGZzLnBhdGhFeGlzdHMoZmlsZVZhcmlhYmxlc0ZvbGRlcikpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBVdGlscy5zcGF3bihgZG9ja2VyIGNwICR7ZmlsZVZhcmlhYmxlc0ZvbGRlcn0gJHt0aGlzLl9jb250YWluZXJJZH06JHtmaWxlVmFyaWFibGVzRm9sZGVyfS9gLCB0aGlzLmN3ZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWZyZXNoTG9uZ1J1bm5pbmdTaWxlbnRUaW1lb3V0KHdyaXRlU3RyZWFtcyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGVuZFRpbWUgPSBwcm9jZXNzLmhydGltZSh0aW1lKTtcbiAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRvdXQoY2hhbGtgJHt0aGlzLmNoYWxrSm9iTmFtZX0ge21hZ2VudGFCcmlnaHQgY29waWVkIHRvIGNvbnRhaW5lcn0gaW4ge21hZ2VudGEgJHtwcmV0dHlIcnRpbWUoZW5kVGltZSl9fVxcbmApO1xuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgdGhpcy5jb3B5QXJ0aWZhY3RzSW4od3JpdGVTdHJlYW1zKTtcblxuICAgICAgICBpZiAodGhpcy5pbWFnZU5hbWUpIHtcbiAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0cmFja2VkIGZpbGVzIGFuZCBhcnRpZmFjdHMgYXJlIHJvb3Qgb3duZWQgaW4gZG9ja2VyLWV4ZWN1dG9yIGpvYnMuXG4gICAgICAgICAgICBhd2FpdCBVdGlscy5zcGF3bihgZG9ja2VyIHJ1biAtLXJtIC13IC9hcHAvIC12ICR7YnVpbGRWb2x1bWVOYW1lfTovYXBwLyBmaXJlY293L2dpdGxhYi1jaS1sb2NhbC11dGlsIGJhc2ggLWMgXCJjaG93biAwOjAgLVIgLiAmJiBjaG1vZCBhK3J3IC1SIC5cImApO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGNtZCA9IFwic2V0IC1lbyBwaXBlZmFpbFxcblwiO1xuICAgICAgICBjbWQgKz0gXCJleGVjIDA8IC9kZXYvbnVsbFxcblwiO1xuXG4gICAgICAgIGlmICghdGhpcy5pbWFnZU5hbWUgJiYgdGhpcy5zaGVsbElzb2xhdGlvbikge1xuICAgICAgICAgICAgY21kICs9IGBjZCAuZ2l0bGFiLWNpLWxvY2FsL2J1aWxkcy8ke3NhZmVKb2JOYW1lfS9cXG5gO1xuICAgICAgICB9XG4gICAgICAgIGNtZCArPSB0aGlzLmdlbmVyYXRlU2NyaXB0Q29tbWFuZHMoc2NyaXB0cyk7XG5cbiAgICAgICAgY21kICs9IFwiZXhpdCAwXFxuXCI7XG5cbiAgICAgICAgYXdhaXQgZnMub3V0cHV0RmlsZShgJHt0aGlzLmN3ZH0vLmdpdGxhYi1jaS1sb2NhbC9zY3JpcHRzLyR7c2FmZUpvYk5hbWV9YCwgY21kLCBcInV0Zi04XCIpO1xuICAgICAgICBhd2FpdCBmcy5jaG1vZChgJHt0aGlzLmN3ZH0vLmdpdGxhYi1jaS1sb2NhbC9zY3JpcHRzLyR7c2FmZUpvYk5hbWV9YCwgXCIwNzU1XCIpO1xuXG4gICAgICAgIGlmICh0aGlzLmltYWdlTmFtZSkge1xuICAgICAgICAgICAgYXdhaXQgVXRpbHMuc3Bhd24oYGRvY2tlciBjcCAuZ2l0bGFiLWNpLWxvY2FsL3NjcmlwdHMvLiAke3RoaXMuX2NvbnRhaW5lcklkfTovZ2NsLXNjcmlwdHMvYCwgdGhpcy5jd2QpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY3AgPSBjaGlsZFByb2Nlc3Muc3Bhd24odGhpcy5fY29udGFpbmVySWQgPyBgZG9ja2VyIHN0YXJ0IC0tYXR0YWNoIC1pICR7dGhpcy5fY29udGFpbmVySWR9YCA6IFwiYmFzaFwiLCB7XG4gICAgICAgICAgICBzaGVsbDogXCJiYXNoXCIsXG4gICAgICAgICAgICBzdGRpbzogW1wicGlwZVwiLCBcInBpcGVcIiwgXCJwaXBlXCJdLFxuICAgICAgICAgICAgY3dkOiB0aGlzLmN3ZCxcbiAgICAgICAgICAgIGVudjogdGhpcy5pbWFnZU5hbWUgPyB7Li4ucHJvY2Vzcy5lbnZ9IDogey4uLnRoaXMuZXhwYW5kZWRWYXJpYWJsZXMsIC4uLnJlcG9ydHNEb3RlbnZWYXJpYWJsZXMsIC4uLnByb2Nlc3MuZW52fSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3Qgb3V0RnVuYyA9IChlOiBhbnksIHN0cmVhbTogKHR4dDogc3RyaW5nKSA9PiB2b2lkLCBjb2xvcml6ZTogKHN0cjogc3RyaW5nKSA9PiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaExvbmdSdW5uaW5nU2lsZW50VGltZW91dCh3cml0ZVN0cmVhbXMpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBsaW5lIG9mIGAke2V9YC5zcGxpdCgvXFxyP1xcbi8pKSB7XG4gICAgICAgICAgICAgICAgaWYgKGxpbmUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHN0cmVhbShgJHt0aGlzLmNoYWxrSm9iTmFtZX0gYCk7XG4gICAgICAgICAgICAgICAgaWYgKCFsaW5lLnN0YXJ0c1dpdGgoXCJcXHUwMDFiWzMybSRcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RyZWFtKGAke2NvbG9yaXplKFwiPlwiKX0gYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHN0cmVhbShgJHtsaW5lfVxcbmApO1xuICAgICAgICAgICAgICAgIGZzLmFwcGVuZEZpbGVTeW5jKG91dHB1dEZpbGVzUGF0aCwgYCR7bGluZX1cXG5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBleGl0Q29kZSA9IGF3YWl0IG5ldyBQcm9taXNlPG51bWJlcj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgY3Auc3Rkb3V0Lm9uKFwiZGF0YVwiLCAoZSkgPT4gb3V0RnVuYyhlLCB3cml0ZVN0cmVhbXMuc3Rkb3V0LmJpbmQod3JpdGVTdHJlYW1zKSwgKHMpID0+IGNoYWxrYHtncmVlbkJyaWdodCAke3N9fWApKTtcbiAgICAgICAgICAgIGNwLnN0ZGVyci5vbihcImRhdGFcIiwgKGUpID0+IG91dEZ1bmMoZSwgd3JpdGVTdHJlYW1zLnN0ZGVyci5iaW5kKHdyaXRlU3RyZWFtcyksIChzKSA9PiBjaGFsa2B7cmVkQnJpZ2h0ICR7c319YCkpO1xuXG4gICAgICAgICAgICBjcC5vbihcImV4aXRcIiwgKGNvZGUpID0+IHNldFRpbWVvdXQoKCkgPT4gcmVzb2x2ZShjb2RlID8/IDApLCAxMCkpO1xuICAgICAgICAgICAgY3Aub24oXCJlcnJvclwiLCAoZXJyKSA9PiBzZXRUaW1lb3V0KCgpID0+IHJlamVjdChlcnIpLCAxMCkpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5pbWFnZU5hbWUpIHtcbiAgICAgICAgICAgICAgICBjcC5zdGRpbi5lbmQoYC9nY2wtc2NyaXB0cy8ke3NhZmVKb2JOYW1lfWApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjcC5zdGRpbi5lbmQoYC4vLmdpdGxhYi1jaS1sb2NhbC9zY3JpcHRzLyR7c2FmZUpvYk5hbWV9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGF3YWl0IHRoaXMuY29weUFydGlmYWN0c091dCh3cml0ZVN0cmVhbXMsIGJ1aWxkVm9sdW1lTmFtZSk7XG5cbiAgICAgICAgcmV0dXJuIGV4aXRDb2RlO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgcHVsbEltYWdlKHdyaXRlU3RyZWFtczogV3JpdGVTdHJlYW1zLCBpbWFnZVRvUHVsbDogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHRpbWUgPSBwcm9jZXNzLmhydGltZSgpO1xuICAgICAgICBsZXQgcHVsbENtZCA9IFwiXCI7XG4gICAgICAgIHB1bGxDbWQgKz0gYGRvY2tlciBpbWFnZSBscyAtLWZvcm1hdCAne3suUmVwb3NpdG9yeX19Ont7LlRhZ319JyB8IGdyZXAgLUUgJ14ke2ltYWdlVG9QdWxsfSQnXFxuYDtcbiAgICAgICAgcHVsbENtZCArPSBcImlmIFsgXFxcIiQ/XFxcIiAtbmUgMCBdOyB0aGVuXFxuXCI7XG4gICAgICAgIHB1bGxDbWQgKz0gYFxcdGVjaG8gXCJQdWxsaW5nICR7aW1hZ2VUb1B1bGx9XCJcXG5gO1xuICAgICAgICBwdWxsQ21kICs9IGBcXHRkb2NrZXIgcHVsbCAke2ltYWdlVG9QdWxsfVxcbmA7XG4gICAgICAgIHB1bGxDbWQgKz0gXCJmaVxcblwiO1xuICAgICAgICBhd2FpdCBVdGlscy5zcGF3bihwdWxsQ21kLCB0aGlzLmN3ZCk7XG4gICAgICAgIHRoaXMucmVmcmVzaExvbmdSdW5uaW5nU2lsZW50VGltZW91dCh3cml0ZVN0cmVhbXMpO1xuICAgICAgICBjb25zdCBlbmRUaW1lID0gcHJvY2Vzcy5ocnRpbWUodGltZSk7XG4gICAgICAgIHdyaXRlU3RyZWFtcy5zdGRvdXQoY2hhbGtgJHt0aGlzLmNoYWxrSm9iTmFtZX0ge21hZ2VudGFCcmlnaHQgcHVsbGVkfSAke2ltYWdlVG9QdWxsfSBpbiB7bWFnZW50YSAke3ByZXR0eUhydGltZShlbmRUaW1lKX19XFxuYCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBpbml0UHJvZHVjZXJSZXBvcnRzRG90ZW52VmFyaWFibGVzKHdyaXRlU3RyZWFtczogV3JpdGVTdHJlYW1zKSB7XG4gICAgICAgIGNvbnN0IHByb2R1Y2VycyA9IHRoaXMucHJvZHVjZXJzO1xuICAgICAgICBsZXQgcHJvZHVjZXJSZXBvcnRzRW52cyA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IHByb2R1Y2VyIG9mIHByb2R1Y2VycyA/PyBbXSkge1xuICAgICAgICAgICAgaWYgKHByb2R1Y2VyLmRvdGVudiA9PT0gbnVsbCkgY29udGludWU7XG5cbiAgICAgICAgICAgIGNvbnN0IHNhZmVQcm9kdWNlck5hbWUgPSBVdGlscy5nZXRTYWZlSm9iTmFtZShwcm9kdWNlci5uYW1lKTtcbiAgICAgICAgICAgIGxldCBkb3RlbnZGaWxlO1xuICAgICAgICAgICAgaWYgKCF0aGlzLnNoZWxsSXNvbGF0aW9uICYmICF0aGlzLmltYWdlTmFtZSkge1xuICAgICAgICAgICAgICAgIGRvdGVudkZpbGUgPSBgJHt0aGlzLmN3ZH0vJHtwcm9kdWNlci5kb3RlbnZ9YDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZG90ZW52RmlsZSA9IGAke3RoaXMuY3dkfS8uZ2l0bGFiLWNpLWxvY2FsL2FydGlmYWN0cy8ke3NhZmVQcm9kdWNlck5hbWV9Ly5naXRsYWItY2ktcmVwb3J0cy9kb3RlbnYvJHtwcm9kdWNlci5kb3RlbnZ9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhd2FpdCBmcy5wYXRoRXhpc3RzKGRvdGVudkZpbGUpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJvZHVjZXJSZXBvcnRFbnYgPSBkb3RlbnYucGFyc2UoYXdhaXQgZnMucmVhZEZpbGUoZG90ZW52RmlsZSkpO1xuICAgICAgICAgICAgICAgIHByb2R1Y2VyUmVwb3J0c0VudnMgPSB7Li4ucHJvZHVjZXJSZXBvcnRzRW52cywgLi4ucHJvZHVjZXJSZXBvcnRFbnZ9O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3RkZXJyKGNoYWxrYCR7dGhpcy5jaGFsa0pvYk5hbWV9IHt5ZWxsb3cgJyR7cHJvZHVjZXIuZG90ZW52fScgcHJvZHVjZWQgYnkgJyR7cHJvZHVjZXIubmFtZX0nIGNvdWxkIG5vdCBiZSBmb3VuZH1cXG5gKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcm9kdWNlclJlcG9ydHNFbnZzO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgY29weUFydGlmYWN0c0luKHdyaXRlU3RyZWFtczogV3JpdGVTdHJlYW1zKSB7XG4gICAgICAgIGlmICghdGhpcy5pbWFnZU5hbWUgJiYgIXRoaXMuc2hlbGxJc29sYXRpb24pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5wcm9kdWNlcnMgfHwgdGhpcy5wcm9kdWNlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzYWZlSm9iTmFtZSA9IHRoaXMuc2FmZUpvYk5hbWU7XG5cbiAgICAgICAgY29uc3QgY3BGdW5jID0gYXN5bmMgKGZvbGRlcjogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaW1hZ2VOYW1lICYmIHRoaXMuc2hlbGxJc29sYXRpb24pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gVXRpbHMuc3Bhd24oYHJzeW5jIC1hICR7Zm9sZGVyfS8uICR7dGhpcy5jd2R9Ly5naXRsYWItY2ktbG9jYWwvYnVpbGRzLyR7c2FmZUpvYk5hbWV9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gVXRpbHMuc3Bhd24oYGRvY2tlciBjcCAke2ZvbGRlcn0vLiAke3RoaXMuX2NvbnRhaW5lcklkfTovYnVpbGRzLyR7c2FmZUpvYk5hbWV9YCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgdGltZSA9IHByb2Nlc3MuaHJ0aW1lKCk7XG4gICAgICAgIGNvbnN0IHByb21pc2VzID0gW107XG4gICAgICAgIGZvciAoY29uc3QgcHJvZHVjZXIgb2YgdGhpcy5wcm9kdWNlcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHByb2R1Y2VyU2FmZU5hbWUgPSBVdGlscy5nZXRTYWZlSm9iTmFtZShwcm9kdWNlci5uYW1lKTtcbiAgICAgICAgICAgIGNvbnN0IGFydGlmYWN0Rm9sZGVyID0gYCR7dGhpcy5jd2R9Ly5naXRsYWItY2ktbG9jYWwvYXJ0aWZhY3RzLyR7cHJvZHVjZXJTYWZlTmFtZX1gO1xuICAgICAgICAgICAgaWYgKCFhd2FpdCBmcy5wYXRoRXhpc3RzKGFydGlmYWN0Rm9sZGVyKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGl0RXJyb3IoYCR7YXJ0aWZhY3RGb2xkZXJ9IGRvZXNuJ3QgZXhpc3QsIGRpZCB5b3UgZm9yZ2V0IC0tbmVlZHNgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHByb21pc2VzLnB1c2goY3BGdW5jKGFydGlmYWN0Rm9sZGVyKSk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xuICAgICAgICBjb25zdCBlbmRUaW1lID0gcHJvY2Vzcy5ocnRpbWUodGltZSk7XG4gICAgICAgIGNvbnN0IHRhcmdldFRleHQgPSB0aGlzLmltYWdlTmFtZSA/IFwiY29udGFpbmVyXCIgOiBcImlzb2xhdGVkIHNoZWxsXCI7XG4gICAgICAgIHdyaXRlU3RyZWFtcy5zdGRvdXQoY2hhbGtgJHt0aGlzLmNoYWxrSm9iTmFtZX0ge21hZ2VudGFCcmlnaHQgY29waWVkIGFydGlmYWN0cyB0byAke3RhcmdldFRleHR9fSBpbiB7bWFnZW50YSAke3ByZXR0eUhydGltZShlbmRUaW1lKX19XFxuYCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBjb3B5QXJ0aWZhY3RzT3V0KHdyaXRlU3RyZWFtczogV3JpdGVTdHJlYW1zLCBidWlsZFZvbHVtZU5hbWU6IHN0cmluZykge1xuICAgICAgICBjb25zdCBzYWZlSm9iTmFtZSA9IHRoaXMuc2FmZUpvYk5hbWU7XG5cbiAgICAgICAgaWYgKCF0aGlzLnNoZWxsSXNvbGF0aW9uICYmICF0aGlzLmltYWdlTmFtZSB8fCAhdGhpcy5hcnRpZmFjdHMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCB0aW1lLCBlbmRUaW1lO1xuICAgICAgICBsZXQgY3BDbWQgPSBcInNob3B0IC1zIGdsb2JzdGFyIG51bGxnbG9iIGRvdGdsb2JcXG5cIjtcbiAgICAgICAgY3BDbWQgKz0gYG1rZGlyIC1wIC4uLy4uL2FydGlmYWN0cy8ke3NhZmVKb2JOYW1lfVxcbmA7XG4gICAgICAgIGZvciAoY29uc3QgYXJ0aWZhY3RQYXRoIG9mIHRoaXMuYXJ0aWZhY3RzPy5wYXRocyA/PyBbXSkge1xuICAgICAgICAgICAgY29uc3QgZXhwYW5kZWRQYXRoID0gVXRpbHMuZXhwYW5kVGV4dChhcnRpZmFjdFBhdGgsIHRoaXMuZXhwYW5kZWRWYXJpYWJsZXMpO1xuICAgICAgICAgICAgY3BDbWQgKz0gYGVjaG8gU3RhcnRlZCBjb3B5aW5nICR7ZXhwYW5kZWRQYXRofSB0byAuLi8uLi9hcnRpZmFjdHMvJHtzYWZlSm9iTmFtZX1cXG5gO1xuICAgICAgICAgICAgY3BDbWQgKz0gYHJzeW5jIC1SYSAke2V4cGFuZGVkUGF0aH0gLi4vLi4vYXJ0aWZhY3RzLyR7c2FmZUpvYk5hbWV9Ly5cXG5gO1xuICAgICAgICAgICAgY3BDbWQgKz0gYGVjaG8gRG9uZSBjb3B5aW5nICR7ZXhwYW5kZWRQYXRofSB0byAuLi8uLi9hcnRpZmFjdHMvJHtzYWZlSm9iTmFtZX1cXG5gO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBhcnRpZmFjdEV4Y2x1ZGVQYXRoIG9mIHRoaXMuYXJ0aWZhY3RzPy5leGNsdWRlID8/IFtdKSB7XG4gICAgICAgICAgICBjb25zdCBleHBhbmRlZFBhdGggPSBVdGlscy5leHBhbmRUZXh0KGFydGlmYWN0RXhjbHVkZVBhdGgsIHRoaXMuZXhwYW5kZWRWYXJpYWJsZXMpO1xuICAgICAgICAgICAgY3BDbWQgKz0gYGVjaG8gU3RhcnRlZCByZW1vdmluZyBleGNsdWRlICcke2V4cGFuZGVkUGF0aH0nIGZyb20gLi4vLi4vYXJ0aWZhY3RzLyR7c2FmZUpvYk5hbWV9XFxuYDtcbiAgICAgICAgICAgIGNwQ21kICs9IGBscyAtMWQgJy4uLy4uL2FydGlmYWN0cy8ke3NhZmVKb2JOYW1lfS8ke2V4cGFuZGVkUGF0aH0nIHwgeGFyZ3MgLW4xIHJtIC1yZiB8fCB0cnVlXFxuYDtcbiAgICAgICAgICAgIGNwQ21kICs9IGBlY2hvIERvbmUgcmVtb3ZpbmcgZXhjbHVkZSAnJHtleHBhbmRlZFBhdGh9JyBmcm9tIC4uLy4uL2FydGlmYWN0cy8ke3NhZmVKb2JOYW1lfVxcbmA7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXBvcnREb3RlbnYgPSB0aGlzLmFydGlmYWN0cy5yZXBvcnRzPy5kb3RlbnYgPz8gbnVsbDtcbiAgICAgICAgaWYgKHJlcG9ydERvdGVudiAhPSBudWxsKSB7XG4gICAgICAgICAgICBjcENtZCArPSBgbWtkaXIgLXAgLi4vLi4vYXJ0aWZhY3RzLyR7c2FmZUpvYk5hbWV9Ly5naXRsYWItY2ktcmVwb3J0cy9kb3RlbnZcXG5gO1xuICAgICAgICAgICAgY3BDbWQgKz0gYGVjaG8gU3RhcnRlZCBjb3B5aW5nICR7cmVwb3J0RG90ZW52fSB0byAuLi8uLi9hcnRpZmFjdHMvJHtzYWZlSm9iTmFtZX0vLmdpdGxhYi1jaS1yZXBvcnRzL2RvdGVudlxcbmA7XG4gICAgICAgICAgICBjcENtZCArPSBgcnN5bmMgLVJhICR7cmVwb3J0RG90ZW52fSAuLi8uLi9hcnRpZmFjdHMvJHtzYWZlSm9iTmFtZX0vLmdpdGxhYi1jaS1yZXBvcnRzL2RvdGVudi8uXFxuYDtcbiAgICAgICAgICAgIGNwQ21kICs9IGBlY2hvIERvbmUgY29weWluZyAke3JlcG9ydERvdGVudn0gdG8gLi4vLi4vYXJ0aWZhY3RzLyR7c2FmZUpvYk5hbWV9Ly5naXRsYWItY2ktcmVwb3J0cy9kb3RlbnZcXG5gO1xuICAgICAgICB9XG5cbiAgICAgICAgdGltZSA9IHByb2Nlc3MuaHJ0aW1lKCk7XG4gICAgICAgIGlmICh0aGlzLmltYWdlTmFtZSkge1xuICAgICAgICAgICAgY29uc3QgY2FjaGVNb3VudFN0ciA9IGF3YWl0IHRoaXMuY3JlYXRlQ2FjaGVEb2NrZXJWb2x1bWVNb3VudHMoc2FmZUpvYk5hbWUsIHdyaXRlU3RyZWFtcyk7XG4gICAgICAgICAgICBjb25zdCBkb2NrZXJDcmVhdGVDbWQgPSBgZG9ja2VyIGNyZWF0ZSAtaSAke2NhY2hlTW91bnRTdHJ9IC12ICR7YnVpbGRWb2x1bWVOYW1lfTovYnVpbGRzLyR7c2FmZUpvYk5hbWV9LyAtdyAvYnVpbGRzLyR7c2FmZUpvYk5hbWV9LyBmaXJlY293L2dpdGxhYi1jaS1sb2NhbC11dGlsIGJhc2ggLWMgXCIke2NwQ21kfVwiYDtcbiAgICAgICAgICAgIGNvbnN0IHtzdGRvdXQ6IGFydGlmYWN0c0NvbnRhaW5lcklkfSA9IGF3YWl0IFV0aWxzLnNwYXduKGRvY2tlckNyZWF0ZUNtZCwgdGhpcy5jd2QpO1xuICAgICAgICAgICAgdGhpcy5fYXJ0aWZhY3RzQ29udGFpbmVySWQgPSBhcnRpZmFjdHNDb250YWluZXJJZC5yZXBsYWNlKC9cXHI/XFxuL2csIFwiXCIpO1xuICAgICAgICAgICAgYXdhaXQgZnMubWtkaXJwKGAke3RoaXMuY3dkfS8uZ2l0bGFiLWNpLWxvY2FsL2FydGlmYWN0cy8ke3NhZmVKb2JOYW1lfWApO1xuICAgICAgICAgICAgYXdhaXQgVXRpbHMuc3Bhd24oYGRvY2tlciBzdGFydCAke3RoaXMuX2FydGlmYWN0c0NvbnRhaW5lcklkfSAtLWF0dGFjaGApO1xuICAgICAgICAgICAgYXdhaXQgVXRpbHMuc3Bhd24oYGRvY2tlciBjcCAke3RoaXMuX2FydGlmYWN0c0NvbnRhaW5lcklkfTovYXJ0aWZhY3RzLy4gLmdpdGxhYi1jaS1sb2NhbC9hcnRpZmFjdHMvLmAsIHRoaXMuY3dkKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNoZWxsSXNvbGF0aW9uKSB7XG4gICAgICAgICAgICBhd2FpdCBVdGlscy5zcGF3bihgbWtkaXIgLXAgLi4vLi4vYXJ0aWZhY3RzLyR7c2FmZUpvYk5hbWV9YCwgYCR7dGhpcy5jd2R9Ly5naXRsYWItY2ktbG9jYWwvYnVpbGRzLyR7c2FmZUpvYk5hbWV9YCk7XG4gICAgICAgICAgICBhd2FpdCBVdGlscy5zcGF3bihgYmFzaCAtZSAtYyBcIiR7Y3BDbWR9XCJgLCBgJHt0aGlzLmN3ZH0vLmdpdGxhYi1jaS1sb2NhbC9idWlsZHMvJHtzYWZlSm9iTmFtZX1gKTtcbiAgICAgICAgfVxuICAgICAgICBlbmRUaW1lID0gcHJvY2Vzcy5ocnRpbWUodGltZSk7XG4gICAgICAgIHdyaXRlU3RyZWFtcy5zdGRvdXQoY2hhbGtgJHt0aGlzLmNoYWxrSm9iTmFtZX0ge21hZ2VudGFCcmlnaHQgc2F2ZWQgYXJ0aWZhY3RzfSBpbiB7bWFnZW50YSAke3ByZXR0eUhydGltZShlbmRUaW1lKX19XFxuYCk7XG5cbiAgICAgICAgaWYgKHRoaXMuYXJ0aWZhY3RzVG9Tb3VyY2UpIHtcbiAgICAgICAgICAgIHRpbWUgPSBwcm9jZXNzLmhydGltZSgpO1xuICAgICAgICAgICAgYXdhaXQgVXRpbHMuc3Bhd24oYHJzeW5jIC0tZXhjbHVkZT0vLmdpdGxhYi1jaS1yZXBvcnRzLyAtYSAke3RoaXMuY3dkfS8uZ2l0bGFiLWNpLWxvY2FsL2FydGlmYWN0cy8ke3NhZmVKb2JOYW1lfS8uICR7dGhpcy5jd2R9YCk7XG4gICAgICAgICAgICBpZiAocmVwb3J0RG90ZW52ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBVdGlscy5zcGF3bihgcnN5bmMgLWEgJHt0aGlzLmN3ZH0vLmdpdGxhYi1jaS1sb2NhbC9hcnRpZmFjdHMvJHtzYWZlSm9iTmFtZX0vLmdpdGxhYi1jaS1yZXBvcnRzL2RvdGVudi8uICR7dGhpcy5jd2R9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbmRUaW1lID0gcHJvY2Vzcy5ocnRpbWUodGltZSk7XG4gICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3Rkb3V0KGNoYWxrYCR7dGhpcy5jaGFsa0pvYk5hbWV9IHttYWdlbnRhQnJpZ2h0IGNvcGllZCBhcnRpZmFjdHMgdG8gY3dkfSBpbiB7bWFnZW50YSAke3ByZXR0eUhydGltZShlbmRUaW1lKX19XFxuYCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHJlZnJlc2hMb25nUnVubmluZ1NpbGVudFRpbWVvdXQod3JpdGVTdHJlYW1zOiBXcml0ZVN0cmVhbXMpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX2xvbmdSdW5uaW5nU2lsZW50VGltZW91dCk7XG4gICAgICAgIHRoaXMuX2xvbmdSdW5uaW5nU2lsZW50VGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChjaGFsa2Ake3RoaXMuY2hhbGtKb2JOYW1lfSB7Z3JleSA+IHN0aWxsIHJ1bm5pbmcuLi59XFxuYCk7XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hMb25nUnVubmluZ1NpbGVudFRpbWVvdXQod3JpdGVTdHJlYW1zKTtcbiAgICAgICAgfSwgMTAwMDApO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RXhpdGVkU3RyaW5nKHN0YXJ0VGltZTogW251bWJlciwgbnVtYmVyXSwgY29kZTogbnVtYmVyLCB3YXJuaW5nID0gZmFsc2UsIHByZXBlbmRTdHJpbmcgPSBcIlwiKSB7XG4gICAgICAgIGNvbnN0IGZpbmlzaGVkU3RyID0gdGhpcy5nZXRGaW5pc2hlZFN0cmluZyhzdGFydFRpbWUpO1xuICAgICAgICBpZiAod2FybmluZykge1xuICAgICAgICAgICAgcmV0dXJuIGNoYWxrYCR7ZmluaXNoZWRTdHJ9IHtibGFjay5iZ1llbGxvd0JyaWdodCAgV0FSTiAke2NvZGUudG9TdHJpbmcoKX0gfSR7cHJlcGVuZFN0cmluZ31gO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNoYWxrYCR7ZmluaXNoZWRTdHJ9IHtibGFjay5iZ1JlZCAgRkFJTCAke2NvZGUudG9TdHJpbmcoKX0gfSAke3ByZXBlbmRTdHJpbmd9YDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEZpbmlzaGVkU3RyaW5nKHN0YXJ0VGltZTogW251bWJlciwgbnVtYmVyXSkge1xuICAgICAgICBjb25zdCBlbmRUaW1lID0gcHJvY2Vzcy5ocnRpbWUoc3RhcnRUaW1lKTtcbiAgICAgICAgY29uc3QgdGltZVN0ciA9IHByZXR0eUhydGltZShlbmRUaW1lKTtcbiAgICAgICAgcmV0dXJuIGNoYWxrYCR7dGhpcy5jaGFsa0pvYk5hbWV9IHttYWdlbnRhQnJpZ2h0IGZpbmlzaGVkfSBpbiB7bWFnZW50YSAke3RpbWVTdHJ9fWA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBjcmVhdGVEb2NrZXJOZXR3b3JrKG5ldHdvcmtOYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3Qge3N0ZG91dDogbmV0d29ya0lkfSA9IGF3YWl0IFV0aWxzLnNwYXduKGBkb2NrZXIgbmV0d29yayBjcmVhdGUgJHtuZXR3b3JrTmFtZX1gKTtcbiAgICAgICAgdGhpcy5fc2VydmljZU5ldHdvcmtJZCA9IG5ldHdvcmtJZC5yZXBsYWNlKC9cXHI/XFxuL2csIFwiXCIpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgY3JlYXRlQ2FjaGVEb2NrZXJWb2x1bWVNb3VudHMoc2FmZUpvYk5hbWU6IHN0cmluZywgd3JpdGVTdHJlYW1zOiBXcml0ZVN0cmVhbXMpIHtcbiAgICAgICAgbGV0IGNtZCA9IFwiXCI7XG4gICAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgdGhpcy5jYWNoZSkge1xuICAgICAgICAgICAgY29uc3QgdW5pcXVlQ2FjaGVOYW1lID0gYXdhaXQgSm9iLmdldFVuaXF1ZUNhY2hlTmFtZSh0aGlzLmN3ZCwgZW50cnksIHRoaXMuZXhwYW5kZWRWYXJpYWJsZXMpO1xuICAgICAgICAgICAgZW50cnkucGF0aHMuZm9yRWFjaCgocCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhdGggPSBVdGlscy5leHBhbmRUZXh0KHAsIHRoaXMuZXhwYW5kZWRWYXJpYWJsZXMpO1xuICAgICAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRvdXQoY2hhbGtgJHt0aGlzLmNoYWxrSm9iTmFtZX0ge21hZ2VudGFCcmlnaHQgbW91bnRpbmcgY2FjaGV9IGZvciBwYXRoICR7cGF0aH1cXG5gKTtcbiAgICAgICAgICAgICAgICBjb25zdCBjYWNoZWRpciA9IGAvdG1wL2dpdGxhYi1jaS1sb2NhbC9jYWNoZS8ke3VuaXF1ZUNhY2hlTmFtZX0vJHtwYXRofWA7XG4gICAgICAgICAgICAgICAgZnMuZW5zdXJlRGlyU3luYyhjYWNoZWRpcik7XG4gICAgICAgICAgICAgICAgY21kICs9IGAtdiAke2NhY2hlZGlyfTovYnVpbGRzLyR7c2FmZUpvYk5hbWV9LyR7cGF0aH0gYDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBzdGFydFNlcnZpY2Uod3JpdGVTdHJlYW1zOiBXcml0ZVN0cmVhbXMsIHNlcnZpY2U6IFNlcnZpY2UsIHByaXZpbGVnZWQ6IGJvb2xlYW4pIHtcbiAgICAgICAgbGV0IGRvY2tlckNtZCA9IGBkb2NrZXIgcnVuIC1kIC0tbmV0d29yayBnaXRsYWItY2ktbG9jYWwtJHt0aGlzLmpvYklkfSBgO1xuXG4gICAgICAgIGlmIChwcml2aWxlZ2VkKSB7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCItLXByaXZpbGVnZWQgXCI7XG4gICAgICAgIH1cblxuICAgICAgICAoc2VydmljZS5nZXRFbnRyeXBvaW50KCkgPz8gW10pLmZvckVhY2goKGUpID0+IHtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBgLS1lbnRyeXBvaW50IFwiJHtlfVwiIGA7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBzZXJ2aWNlQWxpYXMgPSBzZXJ2aWNlLmdldEFsaWFzKHRoaXMuZXhwYW5kZWRWYXJpYWJsZXMpO1xuICAgICAgICBjb25zdCBzZXJ2aWNlTmFtZSA9IHNlcnZpY2UuZ2V0TmFtZSh0aGlzLmV4cGFuZGVkVmFyaWFibGVzKTtcbiAgICAgICAgY29uc3Qgc2VydmljZU5hbWVXaXRob3V0VmVyc2lvbiA9IHNlcnZpY2VOYW1lLnJlcGxhY2UoLyguKikoOi4qKS8sIFwiJDFcIik7XG4gICAgICAgIGNvbnN0IGFsaWFzZXMgPSBbc2VydmljZU5hbWVXaXRob3V0VmVyc2lvbi5yZXBsYWNlKFwiL1wiLCBcIi1cIiksIHNlcnZpY2VOYW1lV2l0aG91dFZlcnNpb24ucmVwbGFjZShcIi9cIiwgXCJfX1wiKV07XG4gICAgICAgIGlmIChzZXJ2aWNlQWxpYXMpIHtcbiAgICAgICAgICAgIGFsaWFzZXMucHVzaChzZXJ2aWNlQWxpYXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yKGNvbnN0IGFsaWFzIG9mIGFsaWFzZXMpIHtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBgLS1uZXR3b3JrLWFsaWFzPSR7YWxpYXN9IGA7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLmV4cGFuZGVkVmFyaWFibGVzKSkge1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IGAtZSAke2tleX09XCIke1N0cmluZyh2YWx1ZSkudHJpbSgpfVwiIGA7XG4gICAgICAgIH1cblxuICAgICAgICBkb2NrZXJDbWQgKz0gYCR7c2VydmljZU5hbWV9YDtcbiAgICAgICAgY29uc3QgY29tbWFuZCA9IHNlcnZpY2UuZ2V0Q29tbWFuZCh0aGlzLmV4cGFuZGVkVmFyaWFibGVzKTtcbiAgICAgICAgaWYgKGNvbW1hbmQpIHtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBgICR7Y29tbWFuZH1gO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGltZSA9IHByb2Nlc3MuaHJ0aW1lKCk7XG4gICAgICAgIGNvbnN0IHtzdGRvdXQ6IGNvbnRhaW5lcklkfSA9IGF3YWl0IFV0aWxzLnNwYXduKGRvY2tlckNtZCwgdGhpcy5jd2QpO1xuICAgICAgICB0aGlzLl9zZXJ2aWNlSWRzLnB1c2goY29udGFpbmVySWQucmVwbGFjZSgvXFxyP1xcbi9nLCBcIlwiKSk7XG4gICAgICAgIHRoaXMucmVmcmVzaExvbmdSdW5uaW5nU2lsZW50VGltZW91dCh3cml0ZVN0cmVhbXMpO1xuICAgICAgICBjb25zdCBlbmRUaW1lID0gcHJvY2Vzcy5ocnRpbWUodGltZSk7XG4gICAgICAgIHdyaXRlU3RyZWFtcy5zdGRvdXQoY2hhbGtgJHt0aGlzLmNoYWxrSm9iTmFtZX0ge21hZ2VudGFCcmlnaHQgc3RhcnRlZCBzZXJ2aWNlIGltYWdlOiAke3NlcnZpY2VOYW1lfSB3aXRoIGFsaWFzZXM6ICR7YWxpYXNlcy5qb2luKFwiLCBcIil9fSBpbiB7bWFnZW50YSAke3ByZXR0eUhydGltZShlbmRUaW1lKX19XFxuYCk7XG4gICAgfVxufVxuIl19
|
|
741
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiam9iLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiam9iLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxrREFBMEI7QUFDMUIsK0NBQWlDO0FBQ2pDLDREQUE4QztBQUM5Qyw2Q0FBK0I7QUFDL0Isa0VBQXlDO0FBQ3pDLDBEQUFrQztBQUNsQyxtREFBNkM7QUFDN0MsbUNBQThCO0FBSzlCLHVDQUFpQztBQUVqQyxNQUFhLEdBQUc7SUF5Q1osWUFBWSxHQUFlO1FBbEJuQix3QkFBbUIsR0FBa0IsSUFBSSxDQUFDO1FBQzFDLDBCQUFxQixHQUFHLENBQUMsQ0FBQztRQUMxQixxQkFBZ0IsR0FBa0IsSUFBSSxDQUFDO1FBQ3ZDLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFDakIsaUJBQVksR0FBa0IsSUFBSSxDQUFDO1FBQ25DLGdCQUFXLEdBQWEsRUFBRSxDQUFDO1FBQzNCLHNCQUFpQixHQUFrQixJQUFJLENBQUM7UUFDeEMsMEJBQXFCLEdBQWtCLElBQUksQ0FBQztRQUM1QywwQkFBcUIsR0FBYSxFQUFFLENBQUM7UUFDckMsOEJBQXlCLEdBQW1CLENBQUMsQ0FBUSxDQUFDO1FBQ3RELGVBQVUsR0FBcUQsSUFBSSxDQUFDO1FBU3hFLE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7UUFDekIsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQztRQUM1QixNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDO1FBQzVCLE1BQU0sYUFBYSxHQUFHLEdBQUcsQ0FBQyxhQUFhLENBQUM7UUFDeEMsTUFBTSxnQkFBZ0IsR0FBRyxHQUFHLENBQUMsZ0JBQWdCLENBQUM7UUFFOUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQztRQUMzQixJQUFJLENBQUMsWUFBWSxH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LHdCQUF3QixPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksT0FBTyxhQUFhLElBQUEsdUJBQVksRUFBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7aUJBQy9LO2FBQ0o7U0FDSjtJQUNMLENBQUM7O0FBdDBCTCxrQkF1MEJDO0FBcjBCbUIsbUJBQWUsR0FBRztJQUM5QixTQUFTLEVBQUUscUJBQXFCLEVBQUUsT0FBTyxFQUFFLFVBQVU7SUFDckQsUUFBUSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLFNBQVM7SUFDdEQsY0FBYyxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsVUFBVTtDQUNuRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNoYWxrIGZyb20gXCJjaGFsa1wiO1xuaW1wb3J0ICogYXMgZG90ZW52IGZyb20gXCJkb3RlbnZcIjtcbmltcG9ydCAqIGFzIGNoaWxkUHJvY2VzcyBmcm9tIFwiY2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0ICogYXMgZnMgZnJvbSBcImZzLWV4dHJhXCI7XG5pbXBvcnQgcHJldHR5SHJ0aW1lIGZyb20gXCJwcmV0dHktaHJ0aW1lXCI7XG5pbXBvcnQgY2FtZWxDYXNlIGZyb20gXCJjYW1lbGNhc2VcIjtcbmltcG9ydCB7RXhpdEVycm9yfSBmcm9tIFwiLi90eXBlcy9leGl0LWVycm9yXCI7XG5pbXBvcnQge1V0aWxzfSBmcm9tIFwiLi91dGlsc1wiO1xuaW1wb3J0IHtKb2JPcHRpb25zfSBmcm9tIFwiLi90eXBlcy9qb2Itb3B0aW9uc1wiO1xuaW1wb3J0IHtXcml0ZVN0cmVhbXN9IGZyb20gXCIuL3R5cGVzL3dyaXRlLXN0cmVhbXNcIjtcbmltcG9ydCB7U2VydmljZX0gZnJvbSBcIi4vc2VydmljZVwiO1xuaW1wb3J0IHtHaXREYXRhfSBmcm9tIFwiLi9naXQtZGF0YVwiO1xuaW1wb3J0IHthc3NlcnR9IGZyb20gXCIuL2Fzc2VydHNcIjtcblxuZXhwb3J0IGNsYXNzIEpvYiB7XG5cbiAgICBzdGF0aWMgcmVhZG9ubHkgaWxsZWdhbEpvYk5hbWVzID0gW1xuICAgICAgICBcImluY2x1ZGVcIiwgXCJsb2NhbF9jb25maWd1cmF0aW9uXCIsIFwiaW1hZ2VcIiwgXCJzZXJ2aWNlc1wiLFxuICAgICAgICBcInN0YWdlc1wiLCBcInBhZ2VzXCIsIFwidHlwZXNcIiwgXCJiZWZvcmVfc2NyaXB0XCIsIFwiZGVmYXVsdFwiLFxuICAgICAgICBcImFmdGVyX3NjcmlwdFwiLCBcInZhcmlhYmxlc1wiLCBcImNhY2hlXCIsIFwid29ya2Zsb3dcIixcbiAgICBdO1xuXG4gICAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICAgIHJlYWRvbmx5IGpvYk5hbWVQYWQ6IG51bWJlcjtcbiAgICByZWFkb25seSBkZXBlbmRlbmNpZXM6IHN0cmluZ1tdIHwgbnVsbDtcbiAgICByZWFkb25seSBlbnZpcm9ubWVudD86IHsgbmFtZTogc3RyaW5nOyB1cmw6IHN0cmluZyB8IG51bGwgfTtcbiAgICByZWFkb25seSBqb2JJZDogbnVtYmVyO1xuICAgIHJlYWRvbmx5IGN3ZDogc3RyaW5nO1xuICAgIHJlYWRvbmx5IHJ1bGVzPzogeyBpZjogc3RyaW5nOyB3aGVuOiBzdHJpbmc7IGFsbG93X2ZhaWx1cmU6IGJvb2xlYW4gfVtdO1xuICAgIHJlYWRvbmx5IGV4cGFuZGVkVmFyaWFibGVzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuICAgIHJlYWRvbmx5IGFsbG93RmFpbHVyZTogYm9vbGVhbjtcbiAgICByZWFkb25seSB3aGVuOiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgcGlwZWxpbmVJaWQ6IG51bWJlcjtcbiAgICByZWFkb25seSBjYWNoZTogeyBrZXk6IHN0cmluZyB8IHsgZmlsZXM6IHN0cmluZ1tdIH07IHBhdGhzOiBzdHJpbmdbXSB9W107XG4gICAgcmVhZG9ubHkgZ2l0RGF0YTogR2l0RGF0YTtcbiAgICByZWFkb25seSBzaGVsbElzb2xhdGlvbjogYm9vbGVhbjtcblxuICAgIHByaXZhdGUgX3ByZXNjcmlwdHNFeGl0Q29kZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gICAgcHJpdmF0ZSBfYWZ0ZXJTY3JpcHRzRXhpdENvZGUgPSAwO1xuICAgIHByaXZhdGUgX2NvdmVyYWdlUGVyY2VudDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gICAgcHJpdmF0ZSBfcnVubmluZyA9IGZhbHNlO1xuICAgIHByaXZhdGUgX2NvbnRhaW5lcklkOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgICBwcml2YXRlIF9zZXJ2aWNlSWRzOiBzdHJpbmdbXSA9IFtdO1xuICAgIHByaXZhdGUgX3NlcnZpY2VOZXR3b3JrSWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAgIHByaXZhdGUgX2FydGlmYWN0c0NvbnRhaW5lcklkOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgICBwcml2YXRlIF9jb250YWluZXJWb2x1bWVOYW1lczogc3RyaW5nW10gPSBbXTtcbiAgICBwcml2YXRlIF9sb25nUnVubmluZ1NpbGVudFRpbWVvdXQ6IE5vZGVKUy5UaW1lb3V0ID0gLTEgYXMgYW55O1xuICAgIHByaXZhdGUgX3Byb2R1Y2VyczogeyBuYW1lOiBzdHJpbmc7IGRvdGVudjogc3RyaW5nIHwgbnVsbCB9W10gfCBudWxsID0gbnVsbDtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgX25lZWRzOiB7IGpvYjogc3RyaW5nOyBhcnRpZmFjdHM6IHRydWUgfVtdIHwgc3RyaW5nW10gfCBudWxsO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgam9iRGF0YTogYW55O1xuICAgIHByaXZhdGUgcmVhZG9ubHkgd3JpdGVTdHJlYW1zOiBXcml0ZVN0cmVhbXM7XG4gICAgcHJpdmF0ZSByZWFkb25seSBleHRyYUhvc3RzOiBzdHJpbmdbXTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHZvbHVtZXM6IHN0cmluZ1tdO1xuXG4gICAgY29uc3RydWN0b3Iob3B0OiBKb2JPcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IGpvYkRhdGEgPSBvcHQuZGF0YTtcbiAgICAgICAgY29uc3QgZ2l0RGF0YSA9IG9wdC5naXREYXRhO1xuICAgICAgICBjb25zdCBnbG9iYWxzID0gb3B0Lmdsb2JhbHM7XG4gICAgICAgIGNvbnN0IGhvbWVWYXJpYWJsZXMgPSBvcHQuaG9tZVZhcmlhYmxlcztcbiAgICAgICAgY29uc3QgcHJvamVjdFZhcmlhYmxlcyA9IG9wdC5wcm9qZWN0VmFyaWFibGVzO1xuXG4gICAgICAgIHRoaXMuZXh0cmFIb3N0cyA9IG9wdC5leHRyYUhvc3RzO1xuICAgICAgICB0aGlzLnZvbHVtZXMgPSBvcHQudm9sdW1lcztcbiAgICAgICAgdGhpcy53cml0ZVN0cmVhbXMgPSBvcHQud3JpdGVTdHJlYW1zO1xuICAgICAgICB0aGlzLmpvYk5hbWVQYWQgPSBvcHQubmFtZVBhZDtcbiAgICAgICAgdGhpcy5naXREYXRhID0gb3B0LmdpdERhdGE7XG4gICAgICAgIHRoaXMubmFtZSA9IG9wdC5uYW1lO1xuICAgICAgICB0aGlzLmN3ZCA9IG9wdC5jd2Q7XG4gICAgICAgIHRoaXMuam9iSWQgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMDAwMDAwKTtcbiAgICAgICAgdGhpcy5qb2JEYXRhID0gb3B0LmRhdGE7XG4gICAgICAgIHRoaXMucGlwZWxpbmVJaWQgPSBvcHQucGlwZWxpbmVJaWQ7XG4gICAgICAgIHRoaXMuc2hlbGxJc29sYXRpb24gPSBvcHQuc2hlbGxJc29sYXRpb247XG5cbiAgICAgICAgdGhpcy53aGVuID0gam9iRGF0YS53aGVuIHx8IFwib25fc3VjY2Vzc1wiO1xuICAgICAgICB0aGlzLmFsbG93RmFpbHVyZSA9IGpvYkRhdGEuYWxsb3dfZmFpbHVyZSA/PyBmYWxzZTtcbiAgICAgICAgdGhpcy5fbmVlZHMgPSBqb2JEYXRhLm5lZWRzIHx8IG51bGw7XG4gICAgICAgIHRoaXMuZGVwZW5kZW5jaWVzID0gam9iRGF0YS5kZXBlbmRlbmNpZXMgfHwgbnVsbDtcbiAgICAgICAgdGhpcy5ydWxlcyA9IGpvYkRhdGEucnVsZXMgfHwgbnVsbDtcbiAgICAgICAgdGhpcy5lbnZpcm9ubWVudCA9IHR5cGVvZiBqb2JEYXRhLmVudmlyb25tZW50ID09PSBcInN0cmluZ1wiID8ge25hbWU6IGpvYkRhdGEuZW52aXJvbm1lbnR9IDogam9iRGF0YS5lbnZpcm9ubWVudDtcbiAgICAgICAgdGhpcy5jYWNoZSA9IGpvYkRhdGEuY2FjaGUgfHwgW107XG5cbiAgICAgICAgbGV0IENJX1BST0pFQ1RfRElSID0gYCR7dGhpcy5jd2R9YDtcbiAgICAgICAgaWYgKHRoaXMuaW1hZ2VOYW1lKSB7XG4gICAgICAgICAgICBDSV9QUk9KRUNUX0RJUiA9IGAvYnVpbGRzLyR7dGhpcy5zYWZlSm9iTmFtZX1gO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2hlbGxJc29sYXRpb24pIHtcbiAgICAgICAgICAgIENJX1BST0pFQ1RfRElSID0gYCR7dGhpcy5jd2R9Ly5naXRsYWItY2ktbG9jYWwvYnVpbGRzLyR7dGhpcy5zYWZlSm9iTmFtZX1gO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcHJlZGVmaW5lZFZhcmlhYmxlcyA9IHtcbiAgICAgICAgICAgIEdJVExBQl9VU0VSX0xPR0lOOiBnaXREYXRhLnVzZXJbXCJHSVRMQUJfVVNFUl9MT0dJTlwiXSxcbiAgICAgICAgICAgIEdJVExBQl9VU0VSX0VNQUlMOiBnaXREYXRhLnVzZXJbXCJHSVRMQUJfVVNFUl9FTUFJTFwiXSxcbiAgICAgICAgICAgIEdJVExBQl9VU0VSX05BTUU6IGdpdERhdGEudXNlcltcIkdJVExBQl9VU0VSX05BTUVcIl0sXG4gICAgICAgICAgICBHSVRMQUJfVVNFUl9JRDogZ2l0RGF0YS51c2VyW1wiR0lUTEFCX1VTRVJfSURcIl0sXG4gICAgICAgICAgICBDSV9DT01NSVRfU0hPUlRfU0hBOiBnaXREYXRhLmNvbW1pdC5TSE9SVF9TSEEsIC8vIENoYW5nZXNcbiAgICAgICAgICAgIENJX0NPTU1JVF9TSEE6IGdpdERhdGEuY29tbWl0LlNIQSxcbiAgICAgICAgICAgIENJX1BST0pFQ1RfRElSLFxuICAgICAgICAgICAgQ0lfUFJPSkVDVF9OQU1FOiBnaXREYXRhLnJlbW90ZS5wcm9qZWN0LFxuICAgICAgICAgICAgQ0lfUFJPSkVDVF9USVRMRTogYCR7Y2FtZWxDYXNlKGdpdERhdGEucmVtb3RlLnByb2plY3QpfWAsXG4gICAgICAgICAgICBDSV9QUk9KRUNUX1BBVEg6IGdpdERhdGEuQ0lfUFJPSkVDVF9QQVRILFxuICAgICAgICAgICAgQ0lfUFJPSkVDVF9QQVRIX1NMVUc6IGdpdERhdGEuQ0lfUFJPSkVDVF9QQVRIX1NMVUcsXG4gICAgICAgICAgICBDSV9QUk9KRUNUX05BTUVTUEFDRTogYCR7Z2l0RGF0YS5yZW1vdGUuZ3JvdXB9YCxcbiAgICAgICAgICAgIENJX1BST0pFQ1RfVklTSUJJTElUWTogXCJpbnRlcm5hbFwiLFxuICAgICAgICAgICAgQ0lfUFJPSkVDVF9JRDogXCIxMjE3XCIsXG4gICAgICAgICAgICBDSV9DT01NSVRfUkVGX1BST1RFQ1RFRDogXCJmYWxzZVwiLFxuICAgICAgICAgICAgQ0lfQ09NTUlUX0JSQU5DSDogZ2l0RGF0YS5jb21taXQuUkVGX05BTUUsIC8vIE5vdCBhdmFpbGFibGUgaW4gbWVyZ2UgcmVxdWVzdCBvciB0YWcgcGlwZWxpbmVzXG4gICAgICAgICAgICBDSV9DT01NSVRfUkVGX05BTUU6IGdpdERhdGEuY29tbWl0LlJFRl9OQU1FLCAvLyBUYWcgb3IgYnJhbmNoIG5hbWVcbiAgICAgICAgICAgIENJX0NPTU1JVF9SRUZfU0xVRzogZ2l0RGF0YS5jb21taXQuUkVGX05BTUUucmVwbGFjZSgvW15hLXowLTldKy9pZywgXCItXCIpLnJlcGxhY2UoL14tLywgXCJcIikucmVwbGFjZSgvLSQvLCBcIlwiKS5zbGljZSgwLCA2MykudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgICAgIENJX0NPTU1JVF9USVRMRTogXCJDb21taXQgVGl0bGVcIiwgLy8gRmlyc3QgbGluZSBvZiBjb21taXQgbWVzc2FnZS5cbiAgICAgICAgICAgIENJX0NPTU1JVF9NRVNTQUdFOiBcIkNvbW1pdCBUaXRsZVxcbk1vcmUgY29tbWl0IHRleHRcIiwgLy8gRnVsbCBjb21taXQgbWVzc2FnZVxuICAgICAgICAgICAgQ0lfQ09NTUlUX0RFU0NSSVBUSU9OOiBcIk1vcmUgY29tbWl0IHRleHRcIixcbiAgICAgICAgICAgIENJX1BJUEVMSU5FX1NPVVJDRTogXCJwdXNoXCIsXG4gICAgICAgICAgICBDSV9KT0JfSUQ6IGAke3RoaXMuam9iSWR9YCxcbiAgICAgICAgICAgIENJX1BJUEVMSU5FX0lEOiBgJHt0aGlzLnBpcGVsaW5lSWlkICsgMTAwMH1gLFxuICAgICAgICAgICAgQ0lfUElQRUxJTkVfSUlEOiBgJHt0aGlzLnBpcGVsaW5lSWlkfWAsXG4gICAgICAgICAgICBDSV9TRVJWRVJfSE9TVDogYCR7Z2l0RGF0YS5yZW1vdGUuaG9zdH1gLFxuICAgICAgICAgICAgQ0lfU0VSVkVSX1BPUlQ6IGAke2dpdERhdGEucmVtb3RlLnBvcnR9YCxcbiAgICAgICAgICAgIENJX1NFUlZFUl9VUkw6IGBodHRwczovLyR7Z2l0RGF0YS5yZW1vdGUuaG9zdH06NDQzYCxcbiAgICAgICAgICAgIENJX1NFUlZFUl9QUk9UT0NPTDogXCJodHRwc1wiLFxuICAgICAgICAgICAgQ0lfQVBJX1Y0X1VSTDogYGh0dHBzOi8vJHtnaXREYXRhLnJlbW90ZS5ob3N0fS9hcGkvdjRgLFxuICAgICAgICAgICAgQ0lfUFJPSkVDVF9VUkw6IGBodHRwczovLyR7Z2l0RGF0YS5yZW1vdGUuaG9zdH0vJHtnaXREYXRhLnJlbW90ZS5ncm91cH0vJHtnaXREYXRhLnJlbW90ZS5wcm9qZWN0fWAsXG4gICAgICAgICAgICBDSV9KT0JfVVJMOiBgaHR0cHM6Ly8ke2dpdERhdGEucmVtb3RlLmhvc3R9LyR7Z2l0RGF0YS5yZW1vdGUuZ3JvdXB9LyR7Z2l0RGF0YS5yZW1vdGUucHJvamVjdH0vLS9qb2JzLyR7dGhpcy5qb2JJZH1gLCAvLyBDaGFuZ2VzIG9uIHJlcnVuLlxuICAgICAgICAgICAgQ0lfUElQRUxJTkVfVVJMOiBgaHR0cHM6Ly8ke2dpdERhdGEucmVtb3RlLmhvc3R9LyR7Z2l0RGF0YS5yZW1vdGUuZ3JvdXB9LyR7Z2l0RGF0YS5yZW1vdGUucHJvamVjdH0vcGlwZWxpbmVzLyR7dGhpcy5waXBlbGluZUlpZH1gLFxuICAgICAgICAgICAgQ0lfSk9CX05BTUU6IGAke3RoaXMubmFtZX1gLFxuICAgICAgICAgICAgQ0lfSk9CX1NUQUdFOiBgJHt0aGlzLnN0YWdlfWAsXG4gICAgICAgICAgICBDSV9SRUdJU1RSWTogZ2l0RGF0YS5DSV9SRUdJU1RSWSxcbiAgICAgICAgICAgIENJX1JFR0lTVFJZX0lNQUdFOiBnaXREYXRhLkNJX1JFR0lTVFJZX0lNQUdFLFxuICAgICAgICAgICAgR0lUTEFCX0NJOiBcImZhbHNlXCIsXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gQ3JlYXRlIGV4cGFuZGVkIHZhcmlhYmxlc1xuICAgICAgICBjb25zdCBlbnZzID0gey4uLnByZWRlZmluZWRWYXJpYWJsZXMsIC4uLmdsb2JhbHMudmFyaWFibGVzIHx8IHt9LCAuLi5qb2JEYXRhLnZhcmlhYmxlcyB8fCB7fSwgLi4uaG9tZVZhcmlhYmxlcywgLi4ucHJvamVjdFZhcmlhYmxlc307XG4gICAgICAgIGNvbnN0IGV4cGFuZGVkR2xvYmFsVmFyaWFibGVzID0gVXRpbHMuZXhwYW5kVmFyaWFibGVzKGdsb2JhbHMudmFyaWFibGVzIHx8IHt9LCBlbnZzKTtcbiAgICAgICAgY29uc3QgZXhwYW5kZWRKb2JWYXJpYWJsZXMgPSBVdGlscy5leHBhbmRWYXJpYWJsZXMoam9iRGF0YS52YXJpYWJsZXMgfHwge30sIGVudnMpO1xuICAgICAgICB0aGlzLmV4cGFuZGVkVmFyaWFibGVzID0gey4uLnByZWRlZmluZWRWYXJpYWJsZXMsIC4uLmV4cGFuZGVkR2xvYmFsVmFyaWFibGVzLCAuLi5leHBhbmRlZEpvYlZhcmlhYmxlcywgLi4uaG9tZVZhcmlhYmxlcywgLi4ucHJvamVjdFZhcmlhYmxlc307XG5cbiAgICAgICAgLy8gU2V0IHt3aGVuLCBhbGxvd0ZhaWx1cmV9IGJhc2VkIG9uIHJ1bGVzIHJlc3VsdFxuICAgICAgICBpZiAodGhpcy5ydWxlcykge1xuICAgICAgICAgICAgY29uc3QgcnVsZVJlc3VsdCA9IFV0aWxzLmdldFJ1bGVzUmVzdWx0KHRoaXMucnVsZXMsIHRoaXMuZXhwYW5kZWRWYXJpYWJsZXMpO1xuICAgICAgICAgICAgdGhpcy53aGVuID0gcnVsZVJlc3VsdC53aGVuO1xuICAgICAgICAgICAgdGhpcy5hbGxvd0ZhaWx1cmUgPSBydWxlUmVzdWx0LmFsbG93RmFpbHVyZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmludGVyYWN0aXZlICYmICh0aGlzLndoZW4gIT09IFwibWFudWFsXCIgfHwgdGhpcy5pbWFnZU5hbWUgIT09IG51bGwpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXhpdEVycm9yKGAke3RoaXMuY2hhbGtKb2JOYW1lfSBASW50ZXJhY3RpdmUgZGVjb3JhdG9yIGNhbm5vdCBoYXZlIGltYWdlOiBhbmQgbXVzdCBiZSB3aGVuOm1hbnVhbGApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaW5qZWN0U1NIQWdlbnQgJiYgdGhpcy5pbWFnZU5hbWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGl0RXJyb3IoYCR7dGhpcy5jaGFsa0pvYk5hbWV9IEBJbmplY3RTU0hBZ2VudCBjYW4gb25seSBiZSB1c2VkIHdpdGggaW1hZ2U6YCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgYXN5bmMgZ2V0VW5pcXVlQ2FjaGVOYW1lKGN3ZDogc3RyaW5nLCBjYWNoZUVudHJ5OiB7IGtleTogc3RyaW5nIHwgeyBmaWxlczogc3RyaW5nW10gfTsgcGF0aHM6IHN0cmluZ1tdIH0sIGV4cGFuZGVkVmFyaWFibGVzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9KSB7XG4gICAgICAgIGlmICh0eXBlb2YgY2FjaGVFbnRyeS5rZXkgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBVdGlscy5leHBhbmRUZXh0KGNhY2hlRW50cnkua2V5KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gXCJtZC1cIiArIGF3YWl0IFV0aWxzLmNoZWNrc3VtRmlsZXMoY2FjaGVFbnRyeS5rZXkuZmlsZXMubWFwKGYgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGAke2N3ZH0vJHtVdGlscy5leHBhbmRUZXh0KGYsIGV4cGFuZGVkVmFyaWFibGVzKX1gO1xuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgZ2V0IGFydGlmYWN0c1RvU291cmNlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5qb2JEYXRhW1wiYXJ0aWZhY3RzVG9Tb3VyY2VcIl0gPT0gbnVsbCA/IHRydWUgOiB0aGlzLmpvYkRhdGFbXCJhcnRpZmFjdHNUb1NvdXJjZVwiXTtcbiAgICB9XG5cbiAgICBnZXQgY2hhbGtKb2JOYW1lKCkge1xuICAgICAgICByZXR1cm4gY2hhbGtge2JsdWVCcmlnaHQgJHt0aGlzLm5hbWUucGFkRW5kKHRoaXMuam9iTmFtZVBhZCl9fWA7XG4gICAgfVxuXG4gICAgZ2V0IHNhZmVKb2JOYW1lKCkge1xuICAgICAgICByZXR1cm4gVXRpbHMuZ2V0U2FmZUpvYk5hbWUodGhpcy5uYW1lKTtcbiAgICB9XG5cbiAgICBnZXQgbmVlZHMoKToge2pvYjogc3RyaW5nOyBhcnRpZmFjdHM6IGJvb2xlYW59W10gfCBudWxsIHtcbiAgICAgICAgaWYgKCF0aGlzLl9uZWVkcykgcmV0dXJuIG51bGw7XG4gICAgICAgIGNvbnN0IGxpc3Q6IHtqb2I6IHN0cmluZzsgYXJ0aWZhY3RzOiBib29sZWFufVtdID0gW107XG4gICAgICAgIHRoaXMuX25lZWRzPy5mb3JFYWNoKChuZWVkKSA9PiB7XG4gICAgICAgICAgICBsaXN0LnB1c2goe1xuICAgICAgICAgICAgICAgIGpvYjogdHlwZW9mIG5lZWQgPT09IFwic3RyaW5nXCIgPyBuZWVkIDogbmVlZC5qb2IsXG4gICAgICAgICAgICAgICAgYXJ0aWZhY3RzOiB0eXBlb2YgbmVlZCA9PT0gXCJzdHJpbmdcIiA/IHRydWUgOiBuZWVkLmFydGlmYWN0cyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGxpc3Q7XG4gICAgfVxuXG5cbiAgICBnZXQgaW1hZ2VOYW1lKCk6IHN0cmluZyB8IG51bGwge1xuICAgICAgICBjb25zdCBpbWFnZSA9IHRoaXMuam9iRGF0YVtcImltYWdlXCJdO1xuICAgICAgICBpZiAoIWltYWdlKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGltYWdlTmFtZSA9IFV0aWxzLmV4cGFuZFRleHQoaW1hZ2UubmFtZSwgdGhpcy5leHBhbmRlZFZhcmlhYmxlcyk7XG4gICAgICAgIHJldHVybiBpbWFnZU5hbWUuaW5jbHVkZXMoXCI6XCIpID8gaW1hZ2VOYW1lIDogYCR7aW1hZ2VOYW1lfTpsYXRlc3RgO1xuICAgIH1cblxuICAgIGdldCBpbWFnZUVudHJ5cG9pbnQoKTogc3RyaW5nW10gfCBudWxsIHtcbiAgICAgICAgY29uc3QgaW1hZ2UgPSB0aGlzLmpvYkRhdGFbXCJpbWFnZVwiXTtcblxuICAgICAgICBpZiAoIWltYWdlIHx8ICFpbWFnZS5lbnRyeXBvaW50KSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGltYWdlLmVudHJ5cG9pbnQgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGl0RXJyb3IoXCJpbWFnZTplbnRyeXBvaW50IG11c3QgYmUgYW4gYXJyYXlcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGltYWdlLmVudHJ5cG9pbnQ7XG4gICAgfVxuXG4gICAgZ2V0IHNlcnZpY2VzKCk6IFNlcnZpY2VbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLmpvYkRhdGFbXCJzZXJ2aWNlc1wiXTtcbiAgICB9XG5cbiAgICBnZXQgcHJvZHVjZXJzKCk6IHsgbmFtZTogc3RyaW5nOyBkb3RlbnY6IHN0cmluZyB8IG51bGwgfVtdIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9kdWNlcnM7XG4gICAgfVxuXG4gICAgc2V0IHByb2R1Y2Vycyhwcm9kdWNlcnM6IHsgbmFtZTogc3RyaW5nOyBkb3RlbnY6IHN0cmluZyB8IG51bGwgfVtdIHwgbnVsbCkge1xuICAgICAgICBhc3NlcnQodGhpcy5fcHJvZHVjZXJzID09IG51bGwsIFwidGhpcy5fcHJvZHVjZXJzIGNhbiBvbmx5IGJlIHNldCBvbmNlXCIpO1xuICAgICAgICB0aGlzLl9wcm9kdWNlcnMgPSBwcm9kdWNlcnM7XG4gICAgfVxuXG4gICAgZ2V0IHN0YWdlKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmpvYkRhdGFbXCJzdGFnZVwiXSB8fCBcInRlc3RcIjtcbiAgICB9XG5cbiAgICBnZXQgaW50ZXJhY3RpdmUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmpvYkRhdGFbXCJpbnRlcmFjdGl2ZVwiXSB8fCBmYWxzZTtcbiAgICB9XG5cbiAgICBnZXQgaW5qZWN0U1NIQWdlbnQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmpvYkRhdGFbXCJpbmplY3RTU0hBZ2VudFwiXSB8fCBmYWxzZTtcbiAgICB9XG5cbiAgICBnZXQgZGVzY3JpcHRpb24oKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuam9iRGF0YVtcImRlc2NyaXB0aW9uXCJdID8/IFwiXCI7XG4gICAgfVxuXG4gICAgZ2V0IGFydGlmYWN0cygpOiB7IHBhdGhzPzogc3RyaW5nW107IGV4Y2x1ZGU/OiBzdHJpbmdbXTsgcmVwb3J0cz86IHsgZG90ZW52Pzogc3RyaW5nIH0gfXxudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuam9iRGF0YVtcImFydGlmYWN0c1wiXTtcbiAgICB9XG5cbiAgICBnZXQgYmVmb3JlU2NyaXB0cygpOiBzdHJpbmdbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLmpvYkRhdGFbXCJiZWZvcmVfc2NyaXB0XCJdIHx8IFtdO1xuICAgIH1cblxuICAgIGdldCBhZnRlclNjcmlwdHMoKTogc3RyaW5nW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5qb2JEYXRhW1wiYWZ0ZXJfc2NyaXB0XCJdIHx8IFtdO1xuICAgIH1cblxuICAgIGdldCBzY3JpcHRzKCk6IHN0cmluZ1tdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuam9iRGF0YVtcInNjcmlwdFwiXTtcbiAgICB9XG5cbiAgICBnZXQgcHJlU2NyaXB0c0V4aXRDb2RlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHJlc2NyaXB0c0V4aXRDb2RlO1xuICAgIH1cblxuICAgIGdldCBhZnRlclNjcmlwdHNFeGl0Q29kZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FmdGVyU2NyaXB0c0V4aXRDb2RlO1xuICAgIH1cblxuICAgIGdldCBydW5uaW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcnVubmluZztcbiAgICB9XG5cbiAgICBnZXQgc3RhcnRlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3J1bm5pbmcgfHwgdGhpcy5fcHJlc2NyaXB0c0V4aXRDb2RlICE9PSBudWxsO1xuICAgIH1cblxuICAgIGdldCBmaW5pc2hlZCgpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLl9ydW5uaW5nICYmIHRoaXMuX3ByZXNjcmlwdHNFeGl0Q29kZSAhPT0gbnVsbDtcbiAgICB9XG5cbiAgICBnZXQgY292ZXJhZ2VQZXJjZW50KCk6IHN0cmluZyB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5fY292ZXJhZ2VQZXJjZW50O1xuICAgIH1cblxuICAgIGFzeW5jIHN0YXJ0KHByaXZpbGVnZWQ6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3Qgc3RhcnRUaW1lID0gcHJvY2Vzcy5ocnRpbWUoKTtcbiAgICAgICAgY29uc3Qgd3JpdGVTdHJlYW1zID0gdGhpcy53cml0ZVN0cmVhbXM7XG4gICAgICAgIGNvbnN0IHNhZmVKb2JuYW1lID0gdGhpcy5zYWZlSm9iTmFtZTtcblxuICAgICAgICB0aGlzLl9ydW5uaW5nID0gdHJ1ZTtcblxuICAgICAgICBhd2FpdCBmcy5lbnN1cmVGaWxlKGAke3RoaXMuY3dkfS8uZ2l0bGFiLWNpLWxvY2FsL291dHB1dC8ke3NhZmVKb2JuYW1lfS5sb2dgKTtcbiAgICAgICAgYXdhaXQgZnMudHJ1bmNhdGUoYCR7dGhpcy5jd2R9Ly5naXRsYWItY2ktbG9jYWwvb3V0cHV0LyR7c2FmZUpvYm5hbWV9LmxvZ2ApO1xuXG4gICAgICAgIGlmICghdGhpcy5pbnRlcmFjdGl2ZSkge1xuICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChjaGFsa2Ake3RoaXMuY2hhbGtKb2JOYW1lfSB7bWFnZW50YUJyaWdodCBzdGFydGluZ30gJHt0aGlzLmltYWdlTmFtZSA/PyBcInNoZWxsXCJ9ICh7eWVsbG93ICR7dGhpcy5zdGFnZX19KVxcbmApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcHJlc2NyaXB0cyA9IHRoaXMuYmVmb3JlU2NyaXB0cy5jb25jYXQodGhpcy5zY3JpcHRzKTtcbiAgICAgICAgdGhpcy5fcHJlc2NyaXB0c0V4aXRDb2RlID0gYXdhaXQgdGhpcy5leGVjU2NyaXB0cyhwcmVzY3JpcHRzLCBwcml2aWxlZ2VkKTtcbiAgICAgICAgaWYgKHRoaXMuYWZ0ZXJTY3JpcHRzLmxlbmd0aCA9PT0gMCAmJiB0aGlzLl9wcmVzY3JpcHRzRXhpdENvZGUgPiAwICYmICF0aGlzLmFsbG93RmFpbHVyZSkge1xuICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZGVycihgJHt0aGlzLmdldEV4aXRlZFN0cmluZyhzdGFydFRpbWUsIHRoaXMuX3ByZXNjcmlwdHNFeGl0Q29kZSwgZmFsc2UpfVxcbmApO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jbGVhbnVwUmVzb3VyY2VzKCk7XG4gICAgICAgICAgICB0aGlzLl9ydW5uaW5nID0gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5hZnRlclNjcmlwdHMubGVuZ3RoID09PSAwICYmIHRoaXMuX3ByZXNjcmlwdHNFeGl0Q29kZSA+IDAgJiYgdGhpcy5hbGxvd0ZhaWx1cmUpIHtcbiAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRlcnIoYCR7dGhpcy5nZXRFeGl0ZWRTdHJpbmcoc3RhcnRUaW1lLCB0aGlzLl9wcmVzY3JpcHRzRXhpdENvZGUsIHRydWUpfVxcbmApO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jbGVhbnVwUmVzb3VyY2VzKCk7XG4gICAgICAgICAgICB0aGlzLl9ydW5uaW5nID0gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fcHJlc2NyaXB0c0V4aXRDb2RlID4gMCAmJiB0aGlzLmFsbG93RmFpbHVyZSkge1xuICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZGVycihgJHt0aGlzLmdldEV4aXRlZFN0cmluZyhzdGFydFRpbWUsIHRoaXMuX3ByZXNjcmlwdHNFeGl0Q29kZSwgdHJ1ZSl9XFxuYCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fcHJlc2NyaXB0c0V4aXRDb2RlID4gMCAmJiAhdGhpcy5hbGxvd0ZhaWx1cmUpIHtcbiAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRlcnIoYCR7dGhpcy5nZXRFeGl0ZWRTdHJpbmcoc3RhcnRUaW1lLCB0aGlzLl9wcmVzY3JpcHRzRXhpdENvZGUsIGZhbHNlKX1cXG5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmFmdGVyU2NyaXB0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLl9hZnRlclNjcmlwdHNFeGl0Q29kZSA9IGF3YWl0IHRoaXMuZXhlY1NjcmlwdHModGhpcy5hZnRlclNjcmlwdHMsIHByaXZpbGVnZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX2FmdGVyU2NyaXB0c0V4aXRDb2RlID4gMCkge1xuICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZGVycihgJHt0aGlzLmdldEV4aXRlZFN0cmluZyhzdGFydFRpbWUsIHRoaXMuX2FmdGVyU2NyaXB0c0V4aXRDb2RlLCB0cnVlLCBcIiBhZnRlcl9zY3JpcHRcIil9XFxuYCk7XG4gICAgICAgIH1cblxuICAgICAgICB3cml0ZVN0cmVhbXMuc3Rkb3V0KGAke3RoaXMuZ2V0RmluaXNoZWRTdHJpbmcoc3RhcnRUaW1lKX1cXG5gKTtcblxuICAgICAgICBpZiAodGhpcy5qb2JEYXRhLmNvdmVyYWdlKSB7XG4gICAgICAgICAgICB0aGlzLl9jb3ZlcmFnZVBlcmNlbnQgPSBhd2FpdCBVdGlscy5nZXRDb3ZlcmFnZVBlcmNlbnQodGhpcy5jd2QsIHRoaXMuam9iRGF0YS5jb3ZlcmFnZSwgc2FmZUpvYm5hbWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgdGhpcy5jbGVhbnVwUmVzb3VyY2VzKCk7XG4gICAgICAgIHRoaXMuX3J1bm5pbmcgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBhc3luYyBjbGVhbnVwUmVzb3VyY2VzKCkge1xuICAgICAgICBjb25zdCB3cml0ZVN0cmVhbXMgPSB0aGlzLndyaXRlU3RyZWFtcztcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX2xvbmdSdW5uaW5nU2lsZW50VGltZW91dCk7XG5cbiAgICAgICAgaWYgKHRoaXMuX2NvbnRhaW5lcklkKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGF3YWl0IFV0aWxzLnNwYXduKGBkb2NrZXIgcm0gLWYgJHt0aGlzLl9jb250YWluZXJJZH1gKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBhc3NlcnQoZSBpbnN0YW5jZW9mIEVycm9yLCBcImUgaXMgbm90IGluc3RhbmNlb2YgRXJyb3JcIik7XG4gICAgICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZGVycihjaGFsa2B7eWVsbG93ICR7ZS5tZXNzYWdlfX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9zZXJ2aWNlSWRzKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgc2VydmljZUlkIG9mIHRoaXMuX3NlcnZpY2VJZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgVXRpbHMuc3Bhd24oYGRvY2tlciBybSAtZiAke3NlcnZpY2VJZH1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGUgaW5zdGFuY2VvZiBFcnJvciwgXCJlIGlzIG5vdCBpbnN0YW5jZW9mIEVycm9yXCIpO1xuICAgICAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRlcnIoY2hhbGtge3llbGxvdyAke2UubWVzc2FnZX19YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fc2VydmljZU5ldHdvcmtJZCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBhd2FpdCBVdGlscy5zcGF3bihgZG9ja2VyIG5ldHdvcmsgcm0gJHt0aGlzLl9zZXJ2aWNlTmV0d29ya0lkfWApO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGFzc2VydChlIGluc3RhbmNlb2YgRXJyb3IsIFwiZSBpcyBub3QgaW5zdGFuY2VvZiBFcnJvclwiKTtcbiAgICAgICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3RkZXJyKGNoYWxrYHt5ZWxsb3cgJHtlLm1lc3NhZ2V9fWApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX2FydGlmYWN0c0NvbnRhaW5lcklkKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGF3YWl0IFV0aWxzLnNwYXduKGBkb2NrZXIgcm0gLWYgJHt0aGlzLl9hcnRpZmFjdHNDb250YWluZXJJZH1gKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBhc3NlcnQoZSBpbnN0YW5jZW9mIEVycm9yLCBcImUgaXMgbm90IGluc3RhbmNlb2YgRXJyb3JcIik7XG4gICAgICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZGVycihjaGFsa2B7eWVsbG93ICR7ZS5tZXNzYWdlfX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9jb250YWluZXJWb2x1bWVOYW1lcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgY29udGFpbmVyVm9sdW1lIG9mIHRoaXMuX2NvbnRhaW5lclZvbHVtZU5hbWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IFV0aWxzLnNwYXduKGBkb2NrZXIgdm9sdW1lIHJtICR7Y29udGFpbmVyVm9sdW1lfWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBhc3NlcnQoZSBpbnN0YW5jZW9mIEVycm9yLCBcImUgaXMgbm90IGluc3RhbmNlb2YgRXJyb3JcIik7XG4gICAgICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZGVycihjaGFsa2B7eWVsbG93ICR7ZS5tZXNzYWdlfX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2VuZXJhdGVJbmplY3RTU0hBZ2VudE9wdGlvbnMoKSB7XG4gICAgICAgIGlmICghdGhpcy5pbmplY3RTU0hBZ2VudCkge1xuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09IFwiZGFyd2luXCIgfHwgKHByb2Nlc3MuZW52Lk9TVFlQRT8ubWF0Y2goL15kYXJ3aW4vKSA/PyBudWxsKSkge1xuICAgICAgICAgICAgcmV0dXJuIFwiLS1lbnYgU1NIX0FVVEhfU09DSz0vcnVuL2hvc3Qtc2VydmljZXMvc3NoLWF1dGguc29jayAtdiAvcnVuL2hvc3Qtc2VydmljZXMvc3NoLWF1dGguc29jazovcnVuL2hvc3Qtc2VydmljZXMvc3NoLWF1dGguc29ja1wiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBgLS1lbnYgU1NIX0FVVEhfU09DSz0ke3Byb2Nlc3MuZW52LlNTSF9BVVRIX1NPQ0t9IC12ICR7cHJvY2Vzcy5lbnYuU1NIX0FVVEhfU09DS306JHtwcm9jZXNzLmVudi5TU0hfQVVUSF9TT0NLfWA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZW5lcmF0ZVNjcmlwdENvbW1hbmRzKHNjcmlwdHM6IHN0cmluZ1tdKSB7XG4gICAgICAgIGxldCBjbWQgPSBcIlwiO1xuICAgICAgICBzY3JpcHRzLmZvckVhY2goKHNjcmlwdCkgPT4ge1xuICAgICAgICAgICAgLy8gUHJpbnQgY29tbWFuZCBlY2hvJ2VkIGluIGNvbG9yXG4gICAgICAgICAgICBjb25zdCBzcGxpdCA9IHNjcmlwdC5zcGxpdCgvXFxyP1xcbi8pO1xuICAgICAgICAgICAgY29uc3QgbXVsdGlsaW5lVGV4dCA9IHNwbGl0Lmxlbmd0aCA+IDEgPyBcIiAjIGNvbGxhcHNlZCBtdWx0aS1saW5lIGNvbW1hbmRcIiA6IFwiXCI7XG4gICAgICAgICAgICBjb25zdCB0ZXh0ID0gc3BsaXRbMF0/LnJlcGxhY2UoL1tcXFxcXS9nLCBcIlxcXFxcXFxcXCIpLnJlcGxhY2UoL1tcIl0vZywgXCJcXFxcXFxcIlwiKS5yZXBsYWNlKC9bJF0vZywgXCJcXFxcJFwiKTtcbiAgICAgICAgICAgIGNtZCArPSBjaGFsa2BlY2hvIFwie2dyZWVuICQgJHt0ZXh0fSR7bXVsdGlsaW5lVGV4dH19XCJcXG5gO1xuXG4gICAgICAgICAgICAvLyBFeGVjdXRlIGFjdHVhbCBzY3JpcHRcbiAgICAgICAgICAgIGNtZCArPSBgJHtzY3JpcHR9XFxuYDtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBjbWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBleGVjU2NyaXB0cyhzY3JpcHRzOiBzdHJpbmdbXSwgcHJpdmlsZWdlZDogYm9vbGVhbik6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgICAgIGNvbnN0IHNhZmVKb2JOYW1lID0gdGhpcy5zYWZlSm9iTmFtZTtcbiAgICAgICAgY29uc3Qgb3V0cHV0RmlsZXNQYXRoID0gYCR7dGhpcy5jd2R9Ly5naXRsYWItY2ktbG9jYWwvb3V0cHV0LyR7c2FmZUpvYk5hbWV9LmxvZ2A7XG4gICAgICAgIGNvbnN0IGJ1aWxkVm9sdW1lTmFtZSA9IGBnY2wtJHt0aGlzLnNhZmVKb2JOYW1lfS0ke3RoaXMuam9iSWR9LWJ1aWxkYDtcbiAgICAgICAgY29uc3QgdG1wVm9sdW1lTmFtZSA9IGBnY2wtJHt0aGlzLnNhZmVKb2JOYW1lfS0ke3RoaXMuam9iSWR9LXRtcGA7XG4gICAgICAgIGNvbnN0IHdyaXRlU3RyZWFtcyA9IHRoaXMud3JpdGVTdHJlYW1zO1xuICAgICAgICBjb25zdCByZXBvcnRzRG90ZW52VmFyaWFibGVzID0gYXdhaXQgdGhpcy5pbml0UHJvZHVjZXJSZXBvcnRzRG90ZW52VmFyaWFibGVzKHdyaXRlU3RyZWFtcyk7XG4gICAgICAgIGxldCB0aW1lO1xuICAgICAgICBsZXQgZW5kVGltZTtcblxuICAgICAgICBpZiAoc2NyaXB0cy5sZW5ndGggPT09IDAgfHwgc2NyaXB0c1swXSA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENvcHkgZ2l0IHRyYWNrZWQgZmlsZXMgdG8gYnVpbGQgZm9sZGVyIGlmIHNoZWxsIGlzb2xhdGlvbiBlbmFibGVkLlxuICAgICAgICBpZiAoIXRoaXMuaW1hZ2VOYW1lICYmIHRoaXMuc2hlbGxJc29sYXRpb24pIHtcbiAgICAgICAgICAgIGF3YWl0IFV0aWxzLnJzeW5jVHJhY2tlZEZpbGVzKHRoaXMuY3dkLCBgJHtzYWZlSm9iTmFtZX1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmludGVyYWN0aXZlKSB7XG4gICAgICAgICAgICBjb25zdCBpQ21kID0gdGhpcy5nZW5lcmF0ZVNjcmlwdENvbW1hbmRzKHNjcmlwdHMpO1xuICAgICAgICAgICAgY29uc3QgaW50ZXJhY3RpdmVDcCA9IGNoaWxkUHJvY2Vzcy5zcGF3bihpQ21kLCB7XG4gICAgICAgICAgICAgICAgc2hlbGw6IFwiYmFzaFwiLFxuICAgICAgICAgICAgICAgIHN0ZGlvOiBbXCJpbmhlcml0XCIsIFwiaW5oZXJpdFwiLCBcImluaGVyaXRcIl0sXG4gICAgICAgICAgICAgICAgY3dkOiB0aGlzLmN3ZCxcbiAgICAgICAgICAgICAgICBlbnY6IHsuLi50aGlzLmV4cGFuZGVkVmFyaWFibGVzLCAuLi5wcm9jZXNzLmVudn0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxudW1iZXI+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICBpbnRlcmFjdGl2ZUNwLm9uKFwiZXhpdFwiLCAoY29kZSkgPT4gcmVzb2x2ZShjb2RlID8/IDApKTtcbiAgICAgICAgICAgICAgICBpbnRlcmFjdGl2ZUNwLm9uKFwiZXJyb3JcIiwgKGVycikgPT4gcmVqZWN0KGVycikpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJlZnJlc2hMb25nUnVubmluZ1NpbGVudFRpbWVvdXQod3JpdGVTdHJlYW1zKTtcblxuICAgICAgICBpZiAodGhpcy5pbWFnZU5hbWUpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucHVsbEltYWdlKHdyaXRlU3RyZWFtcywgdGhpcy5pbWFnZU5hbWUpO1xuXG4gICAgICAgICAgICBsZXQgZG9ja2VyQ21kID0gXCJcIjtcbiAgICAgICAgICAgIGlmIChwcml2aWxlZ2VkKSB7XG4gICAgICAgICAgICAgICAgZG9ja2VyQ21kICs9IGBkb2NrZXIgY3JlYXRlIC0tcHJpdmlsZWdlZCAtdSAwOjAgLWkgJHt0aGlzLmdlbmVyYXRlSW5qZWN0U1NIQWdlbnRPcHRpb25zKCl9IGA7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRvY2tlckNtZCArPSBgZG9ja2VyIGNyZWF0ZSAtdSAwOjAgLWkgJHt0aGlzLmdlbmVyYXRlSW5qZWN0U1NIQWdlbnRPcHRpb25zKCl9IGA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5zZXJ2aWNlcz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5jcmVhdGVEb2NrZXJOZXR3b3JrKGBnaXRsYWItY2ktbG9jYWwtJHt0aGlzLmpvYklkfWApO1xuICAgICAgICAgICAgICAgIGRvY2tlckNtZCArPSBgLS1uZXR3b3JrIGdpdGxhYi1jaS1sb2NhbC0ke3RoaXMuam9iSWR9IGA7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBzZXJ2aWNlIG9mIHRoaXMuc2VydmljZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wdWxsSW1hZ2Uod3JpdGVTdHJlYW1zLCBzZXJ2aWNlLmdldE5hbWUodGhpcy5leHBhbmRlZFZhcmlhYmxlcykpO1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnN0YXJ0U2VydmljZSh3cml0ZVN0cmVhbXMsIHNlcnZpY2UsIHByaXZpbGVnZWQpO1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnNlcnZpY2VIZWFsdGhDaGVjayh3cml0ZVN0cmVhbXMsIHNlcnZpY2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3Qgdm9sdW1lUHJvbWlzZXMgPSBbXTtcbiAgICAgICAgICAgIHZvbHVtZVByb21pc2VzLnB1c2goVXRpbHMuc3Bhd24oYGRvY2tlciB2b2x1bWUgY3JlYXRlICR7YnVpbGRWb2x1bWVOYW1lfWAsIHRoaXMuY3dkKSk7XG4gICAgICAgICAgICB2b2x1bWVQcm9taXNlcy5wdXNoKFV0aWxzLnNwYXduKGBkb2NrZXIgdm9sdW1lIGNyZWF0ZSAke3RtcFZvbHVtZU5hbWV9YCwgdGhpcy5jd2QpKTtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBgLS12b2x1bWUgJHtidWlsZFZvbHVtZU5hbWV9Oi9idWlsZHMvJHtzYWZlSm9iTmFtZX0gYDtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBgLS12b2x1bWUgJHt0bXBWb2x1bWVOYW1lfTovdG1wLyBgO1xuICAgICAgICAgICAgdGhpcy5fY29udGFpbmVyVm9sdW1lTmFtZXMucHVzaChidWlsZFZvbHVtZU5hbWUpO1xuICAgICAgICAgICAgdGhpcy5fY29udGFpbmVyVm9sdW1lTmFtZXMucHVzaCh0bXBWb2x1bWVOYW1lKTtcbiAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHZvbHVtZVByb21pc2VzKTtcblxuICAgICAgICAgICAgZG9ja2VyQ21kICs9IGAtLXdvcmtkaXIgL2J1aWxkcy8ke3NhZmVKb2JOYW1lfSBgO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHZvbHVtZSBvZiB0aGlzLnZvbHVtZXMpIHtcbiAgICAgICAgICAgICAgICBkb2NrZXJDbWQgKz0gYC0tdm9sdW1lICR7dm9sdW1lfSBgO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGV4dHJhSG9zdCBvZiB0aGlzLmV4dHJhSG9zdHMpIHtcbiAgICAgICAgICAgICAgICBkb2NrZXJDbWQgKz0gYC0tYWRkLWhvc3Q9JHtleHRyYUhvc3R9IGA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmltYWdlRW50cnlwb2ludCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW1hZ2VFbnRyeXBvaW50LmZvckVhY2goKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZG9ja2VyQ21kICs9IGAtLWVudHJ5cG9pbnQgXCIke2V9XCIgYDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5leHBhbmRlZFZhcmlhYmxlcykpIHtcbiAgICAgICAgICAgICAgICBkb2NrZXJDbWQgKz0gYC1lICR7a2V5fT0nJHtTdHJpbmcodmFsdWUpLnRyaW0oKX0nIGA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhyZXBvcnRzRG90ZW52VmFyaWFibGVzKSkge1xuICAgICAgICAgICAgICAgIGRvY2tlckNtZCArPSBgLWUgJHtrZXl9PScke1N0cmluZyh2YWx1ZSkudHJpbSgpfScgYDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZG9ja2VyQ21kICs9IGF3YWl0IHRoaXMuY3JlYXRlQ2FjaGVEb2NrZXJWb2x1bWVNb3VudHMoc2FmZUpvYk5hbWUsIHdyaXRlU3RyZWFtcyk7XG5cbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBgJHt0aGlzLmltYWdlTmFtZX0gc2ggLWMgXCJcXG5gO1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IFwiaWYgWyAteCAvdXNyL2xvY2FsL2Jpbi9iYXNoIF07IHRoZW5cXG5cIjtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBcIlxcdGV4ZWMgL3Vzci9sb2NhbC9iaW4vYmFzaCBcXG5cIjtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBcImVsaWYgWyAteCAvdXNyL2Jpbi9iYXNoIF07IHRoZW5cXG5cIjtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBcIlxcdGV4ZWMgL3Vzci9iaW4vYmFzaCBcXG5cIjtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBcImVsaWYgWyAteCAvYmluL2Jhc2ggXTsgdGhlblxcblwiO1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IFwiXFx0ZXhlYyAvYmluL2Jhc2ggXFxuXCI7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCJlbGlmIFsgLXggL3Vzci9sb2NhbC9iaW4vc2ggXTsgdGhlblxcblwiO1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IFwiXFx0ZXhlYyAvdXNyL2xvY2FsL2Jpbi9zaCBcXG5cIjtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBcImVsaWYgWyAteCAvdXNyL2Jpbi9zaCBdOyB0aGVuXFxuXCI7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCJcXHRleGVjIC91c3IvYmluL3NoIFxcblwiO1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IFwiZWxpZiBbIC14IC9iaW4vc2ggXTsgdGhlblxcblwiO1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IFwiXFx0ZXhlYyAvYmluL3NoIFxcblwiO1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IFwiZWxpZiBbIC14IC9idXN5Ym94L3NoIF07IHRoZW5cXG5cIjtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBcIlxcdGV4ZWMgL2J1c3lib3gvc2ggXFxuXCI7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCJlbHNlXFxuXCI7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCJcXHRlY2hvIHNoZWxsIG5vdCBmb3VuZFxcblwiO1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IFwiXFx0ZXhpdCAxXFxuXCI7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCJmaVxcblxcXCJcIjtcblxuICAgICAgICAgICAgY29uc3Qge3N0ZG91dDogY29udGFpbmVySWR9ID0gYXdhaXQgVXRpbHMuc3Bhd24oZG9ja2VyQ21kLCB0aGlzLmN3ZCk7XG4gICAgICAgICAgICB0aGlzLl9jb250YWluZXJJZCA9IGNvbnRhaW5lcklkLnJlcGxhY2UoL1xccj9cXG4vZywgXCJcIik7XG5cbiAgICAgICAgICAgIHRpbWUgPSBwcm9jZXNzLmhydGltZSgpO1xuICAgICAgICAgICAgLy8gQ29weSBzb3VyY2UgZmlsZXMgaW50byBjb250YWluZXIuXG4gICAgICAgICAgICBhd2FpdCBVdGlscy5zcGF3bihgZG9ja2VyIGNwIC5naXRsYWItY2ktbG9jYWwvYnVpbGRzLy5kb2NrZXIvLiAke3RoaXMuX2NvbnRhaW5lcklkfTovYnVpbGRzLyR7c2FmZUpvYk5hbWV9YCwgdGhpcy5jd2QpO1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoTG9uZ1J1bm5pbmdTaWxlbnRUaW1lb3V0KHdyaXRlU3RyZWFtcyk7XG5cbiAgICAgICAgICAgIC8vIENvcHkgZmlsZSB2YXJpYWJsZXMgaW50byBjb250YWluZXIuXG4gICAgICAgICAgICBjb25zdCBmaWxlVmFyaWFibGVzRm9sZGVyID0gYC90bXAvZ2l0bGFiLWNpLWxvY2FsLWZpbGUtdmFyaWFibGVzLSR7dGhpcy5naXREYXRhLkNJX1BST0pFQ1RfUEFUSF9TTFVHfS9gO1xuICAgICAgICAgICAgaWYgKGF3YWl0IGZzLnBhdGhFeGlzdHMoZmlsZVZhcmlhYmxlc0ZvbGRlcikpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBVdGlscy5zcGF3bihgZG9ja2VyIGNwICR7ZmlsZVZhcmlhYmxlc0ZvbGRlcn0gJHt0aGlzLl9jb250YWluZXJJZH06JHtmaWxlVmFyaWFibGVzRm9sZGVyfS9gLCB0aGlzLmN3ZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWZyZXNoTG9uZ1J1bm5pbmdTaWxlbnRUaW1lb3V0KHdyaXRlU3RyZWFtcyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGVuZFRpbWUgPSBwcm9jZXNzLmhydGltZSh0aW1lKTtcbiAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRvdXQoY2hhbGtgJHt0aGlzLmNoYWxrSm9iTmFtZX0ge21hZ2VudGFCcmlnaHQgY29waWVkIHRvIGNvbnRhaW5lcn0gaW4ge21hZ2VudGEgJHtwcmV0dHlIcnRpbWUoZW5kVGltZSl9fVxcbmApO1xuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgdGhpcy5jb3B5QXJ0aWZhY3RzSW4od3JpdGVTdHJlYW1zKTtcblxuICAgICAgICBpZiAodGhpcy5pbWFnZU5hbWUpIHtcbiAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0cmFja2VkIGZpbGVzIGFuZCBhcnRpZmFjdHMgYXJlIHJvb3Qgb3duZWQgaW4gZG9ja2VyLWV4ZWN1dG9yIGpvYnMuXG4gICAgICAgICAgICBhd2FpdCBVdGlscy5zcGF3bihgZG9ja2VyIHJ1biAtLXJtIC13IC9hcHAvIC12ICR7YnVpbGRWb2x1bWVOYW1lfTovYXBwLyBmaXJlY293L2dpdGxhYi1jaS1sb2NhbC11dGlsIGJhc2ggLWMgXCJjaG93biAwOjAgLVIgLiAmJiBjaG1vZCBhK3J3IC1SIC5cImApO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGNtZCA9IFwic2V0IC1lbyBwaXBlZmFpbFxcblwiO1xuICAgICAgICBjbWQgKz0gXCJleGVjIDA8IC9kZXYvbnVsbFxcblwiO1xuXG4gICAgICAgIGlmICghdGhpcy5pbWFnZU5hbWUgJiYgdGhpcy5zaGVsbElzb2xhdGlvbikge1xuICAgICAgICAgICAgY21kICs9IGBjZCAuZ2l0bGFiLWNpLWxvY2FsL2J1aWxkcy8ke3NhZmVKb2JOYW1lfS9cXG5gO1xuICAgICAgICB9XG4gICAgICAgIGNtZCArPSB0aGlzLmdlbmVyYXRlU2NyaXB0Q29tbWFuZHMoc2NyaXB0cyk7XG5cbiAgICAgICAgY21kICs9IFwiZXhpdCAwXFxuXCI7XG5cbiAgICAgICAgYXdhaXQgZnMub3V0cHV0RmlsZShgJHt0aGlzLmN3ZH0vLmdpdGxhYi1jaS1sb2NhbC9zY3JpcHRzLyR7c2FmZUpvYk5hbWV9YCwgY21kLCBcInV0Zi04XCIpO1xuICAgICAgICBhd2FpdCBmcy5jaG1vZChgJHt0aGlzLmN3ZH0vLmdpdGxhYi1jaS1sb2NhbC9zY3JpcHRzLyR7c2FmZUpvYk5hbWV9YCwgXCIwNzU1XCIpO1xuXG4gICAgICAgIGlmICh0aGlzLmltYWdlTmFtZSkge1xuICAgICAgICAgICAgYXdhaXQgVXRpbHMuc3Bhd24oYGRvY2tlciBjcCAuZ2l0bGFiLWNpLWxvY2FsL3NjcmlwdHMvLiAke3RoaXMuX2NvbnRhaW5lcklkfTovZ2NsLXNjcmlwdHMvYCwgdGhpcy5jd2QpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY3AgPSBjaGlsZFByb2Nlc3Muc3Bhd24odGhpcy5fY29udGFpbmVySWQgPyBgZG9ja2VyIHN0YXJ0IC0tYXR0YWNoIC1pICR7dGhpcy5fY29udGFpbmVySWR9YCA6IFwiYmFzaFwiLCB7XG4gICAgICAgICAgICBzaGVsbDogXCJiYXNoXCIsXG4gICAgICAgICAgICBzdGRpbzogW1wicGlwZVwiLCBcInBpcGVcIiwgXCJwaXBlXCJdLFxuICAgICAgICAgICAgY3dkOiB0aGlzLmN3ZCxcbiAgICAgICAgICAgIGVudjogdGhpcy5pbWFnZU5hbWUgPyB7Li4ucHJvY2Vzcy5lbnZ9IDogey4uLnRoaXMuZXhwYW5kZWRWYXJpYWJsZXMsIC4uLnJlcG9ydHNEb3RlbnZWYXJpYWJsZXMsIC4uLnByb2Nlc3MuZW52fSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3Qgb3V0RnVuYyA9IChlOiBhbnksIHN0cmVhbTogKHR4dDogc3RyaW5nKSA9PiB2b2lkLCBjb2xvcml6ZTogKHN0cjogc3RyaW5nKSA9PiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaExvbmdSdW5uaW5nU2lsZW50VGltZW91dCh3cml0ZVN0cmVhbXMpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBsaW5lIG9mIGAke2V9YC5zcGxpdCgvXFxyP1xcbi8pKSB7XG4gICAgICAgICAgICAgICAgaWYgKGxpbmUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHN0cmVhbShgJHt0aGlzLmNoYWxrSm9iTmFtZX0gYCk7XG4gICAgICAgICAgICAgICAgaWYgKCFsaW5lLnN0YXJ0c1dpdGgoXCJcXHUwMDFiWzMybSRcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RyZWFtKGAke2NvbG9yaXplKFwiPlwiKX0gYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHN0cmVhbShgJHtsaW5lfVxcbmApO1xuICAgICAgICAgICAgICAgIGZzLmFwcGVuZEZpbGVTeW5jKG91dHB1dEZpbGVzUGF0aCwgYCR7bGluZX1cXG5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBleGl0Q29kZSA9IGF3YWl0IG5ldyBQcm9taXNlPG51bWJlcj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgY3Auc3Rkb3V0Lm9uKFwiZGF0YVwiLCAoZSkgPT4gb3V0RnVuYyhlLCB3cml0ZVN0cmVhbXMuc3Rkb3V0LmJpbmQod3JpdGVTdHJlYW1zKSwgKHMpID0+IGNoYWxrYHtncmVlbkJyaWdodCAke3N9fWApKTtcbiAgICAgICAgICAgIGNwLnN0ZGVyci5vbihcImRhdGFcIiwgKGUpID0+IG91dEZ1bmMoZSwgd3JpdGVTdHJlYW1zLnN0ZGVyci5iaW5kKHdyaXRlU3RyZWFtcyksIChzKSA9PiBjaGFsa2B7cmVkQnJpZ2h0ICR7c319YCkpO1xuXG4gICAgICAgICAgICBjcC5vbihcImV4aXRcIiwgKGNvZGUpID0+IHNldFRpbWVvdXQoKCkgPT4gcmVzb2x2ZShjb2RlID8/IDApLCAxMCkpO1xuICAgICAgICAgICAgY3Aub24oXCJlcnJvclwiLCAoZXJyKSA9PiBzZXRUaW1lb3V0KCgpID0+IHJlamVjdChlcnIpLCAxMCkpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5pbWFnZU5hbWUpIHtcbiAgICAgICAgICAgICAgICBjcC5zdGRpbi5lbmQoYC9nY2wtc2NyaXB0cy8ke3NhZmVKb2JOYW1lfWApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjcC5zdGRpbi5lbmQoYC4vLmdpdGxhYi1jaS1sb2NhbC9zY3JpcHRzLyR7c2FmZUpvYk5hbWV9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGF3YWl0IHRoaXMuY29weUFydGlmYWN0c091dCh3cml0ZVN0cmVhbXMsIGJ1aWxkVm9sdW1lTmFtZSk7XG5cbiAgICAgICAgcmV0dXJuIGV4aXRDb2RlO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgcHVsbEltYWdlKHdyaXRlU3RyZWFtczogV3JpdGVTdHJlYW1zLCBpbWFnZVRvUHVsbDogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHRpbWUgPSBwcm9jZXNzLmhydGltZSgpO1xuICAgICAgICBsZXQgcHVsbENtZCA9IFwiXCI7XG4gICAgICAgIHB1bGxDbWQgKz0gYGRvY2tlciBpbWFnZSBscyAtLWZvcm1hdCAne3suUmVwb3NpdG9yeX19Ont7LlRhZ319JyB8IGdyZXAgLUUgJ14ke2ltYWdlVG9QdWxsfSQnXFxuYDtcbiAgICAgICAgcHVsbENtZCArPSBcImlmIFsgXFxcIiQ/XFxcIiAtbmUgMCBdOyB0aGVuXFxuXCI7XG4gICAgICAgIHB1bGxDbWQgKz0gYFxcdGVjaG8gXCJQdWxsaW5nICR7aW1hZ2VUb1B1bGx9XCJcXG5gO1xuICAgICAgICBwdWxsQ21kICs9IGBcXHRkb2NrZXIgcHVsbCAke2ltYWdlVG9QdWxsfVxcbmA7XG4gICAgICAgIHB1bGxDbWQgKz0gXCJmaVxcblwiO1xuICAgICAgICBhd2FpdCBVdGlscy5zcGF3bihwdWxsQ21kLCB0aGlzLmN3ZCk7XG4gICAgICAgIHRoaXMucmVmcmVzaExvbmdSdW5uaW5nU2lsZW50VGltZW91dCh3cml0ZVN0cmVhbXMpO1xuICAgICAgICBjb25zdCBlbmRUaW1lID0gcHJvY2Vzcy5ocnRpbWUodGltZSk7XG4gICAgICAgIHdyaXRlU3RyZWFtcy5zdGRvdXQoY2hhbGtgJHt0aGlzLmNoYWxrSm9iTmFtZX0ge21hZ2VudGFCcmlnaHQgcHVsbGVkfSAke2ltYWdlVG9QdWxsfSBpbiB7bWFnZW50YSAke3ByZXR0eUhydGltZShlbmRUaW1lKX19XFxuYCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBpbml0UHJvZHVjZXJSZXBvcnRzRG90ZW52VmFyaWFibGVzKHdyaXRlU3RyZWFtczogV3JpdGVTdHJlYW1zKSB7XG4gICAgICAgIGNvbnN0IHByb2R1Y2VycyA9IHRoaXMucHJvZHVjZXJzO1xuICAgICAgICBsZXQgcHJvZHVjZXJSZXBvcnRzRW52cyA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IHByb2R1Y2VyIG9mIHByb2R1Y2VycyA/PyBbXSkge1xuICAgICAgICAgICAgaWYgKHByb2R1Y2VyLmRvdGVudiA9PT0gbnVsbCkgY29udGludWU7XG5cbiAgICAgICAgICAgIGNvbnN0IHNhZmVQcm9kdWNlck5hbWUgPSBVdGlscy5nZXRTYWZlSm9iTmFtZShwcm9kdWNlci5uYW1lKTtcbiAgICAgICAgICAgIGxldCBkb3RlbnZGaWxlO1xuICAgICAgICAgICAgaWYgKCF0aGlzLnNoZWxsSXNvbGF0aW9uICYmICF0aGlzLmltYWdlTmFtZSkge1xuICAgICAgICAgICAgICAgIGRvdGVudkZpbGUgPSBgJHt0aGlzLmN3ZH0vJHtwcm9kdWNlci5kb3RlbnZ9YDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZG90ZW52RmlsZSA9IGAke3RoaXMuY3dkfS8uZ2l0bGFiLWNpLWxvY2FsL2FydGlmYWN0cy8ke3NhZmVQcm9kdWNlck5hbWV9Ly5naXRsYWItY2ktcmVwb3J0cy9kb3RlbnYvJHtwcm9kdWNlci5kb3RlbnZ9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhd2FpdCBmcy5wYXRoRXhpc3RzKGRvdGVudkZpbGUpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJvZHVjZXJSZXBvcnRFbnYgPSBkb3RlbnYucGFyc2UoYXdhaXQgZnMucmVhZEZpbGUoZG90ZW52RmlsZSkpO1xuICAgICAgICAgICAgICAgIHByb2R1Y2VyUmVwb3J0c0VudnMgPSB7Li4ucHJvZHVjZXJSZXBvcnRzRW52cywgLi4ucHJvZHVjZXJSZXBvcnRFbnZ9O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3RkZXJyKGNoYWxrYCR7dGhpcy5jaGFsa0pvYk5hbWV9IHt5ZWxsb3cgJyR7cHJvZHVjZXIuZG90ZW52fScgcHJvZHVjZWQgYnkgJyR7cHJvZHVjZXIubmFtZX0nIGNvdWxkIG5vdCBiZSBmb3VuZH1cXG5gKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcm9kdWNlclJlcG9ydHNFbnZzO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgY29weUFydGlmYWN0c0luKHdyaXRlU3RyZWFtczogV3JpdGVTdHJlYW1zKSB7XG4gICAgICAgIGlmICghdGhpcy5pbWFnZU5hbWUgJiYgIXRoaXMuc2hlbGxJc29sYXRpb24pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5wcm9kdWNlcnMgfHwgdGhpcy5wcm9kdWNlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzYWZlSm9iTmFtZSA9IHRoaXMuc2FmZUpvYk5hbWU7XG5cbiAgICAgICAgY29uc3QgY3BGdW5jID0gYXN5bmMgKGZvbGRlcjogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaW1hZ2VOYW1lICYmIHRoaXMuc2hlbGxJc29sYXRpb24pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gVXRpbHMuc3Bhd24oYHJzeW5jIC1hICR7Zm9sZGVyfS8uICR7dGhpcy5jd2R9Ly5naXRsYWItY2ktbG9jYWwvYnVpbGRzLyR7c2FmZUpvYk5hbWV9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gVXRpbHMuc3Bhd24oYGRvY2tlciBjcCAke2ZvbGRlcn0vLiAke3RoaXMuX2NvbnRhaW5lcklkfTovYnVpbGRzLyR7c2FmZUpvYk5hbWV9YCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgdGltZSA9IHByb2Nlc3MuaHJ0aW1lKCk7XG4gICAgICAgIGNvbnN0IHByb21pc2VzID0gW107XG4gICAgICAgIGZvciAoY29uc3QgcHJvZHVjZXIgb2YgdGhpcy5wcm9kdWNlcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHByb2R1Y2VyU2FmZU5hbWUgPSBVdGlscy5nZXRTYWZlSm9iTmFtZShwcm9kdWNlci5uYW1lKTtcbiAgICAgICAgICAgIGNvbnN0IGFydGlmYWN0Rm9sZGVyID0gYCR7dGhpcy5jd2R9Ly5naXRsYWItY2ktbG9jYWwvYXJ0aWZhY3RzLyR7cHJvZHVjZXJTYWZlTmFtZX1gO1xuICAgICAgICAgICAgaWYgKCFhd2FpdCBmcy5wYXRoRXhpc3RzKGFydGlmYWN0Rm9sZGVyKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGl0RXJyb3IoYCR7YXJ0aWZhY3RGb2xkZXJ9IGRvZXNuJ3QgZXhpc3QsIGRpZCB5b3UgZm9yZ2V0IC0tbmVlZHNgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHByb21pc2VzLnB1c2goY3BGdW5jKGFydGlmYWN0Rm9sZGVyKSk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xuICAgICAgICBjb25zdCBlbmRUaW1lID0gcHJvY2Vzcy5ocnRpbWUodGltZSk7XG4gICAgICAgIGNvbnN0IHRhcmdldFRleHQgPSB0aGlzLmltYWdlTmFtZSA/IFwiY29udGFpbmVyXCIgOiBcImlzb2xhdGVkIHNoZWxsXCI7XG4gICAgICAgIHdyaXRlU3RyZWFtcy5zdGRvdXQoY2hhbGtgJHt0aGlzLmNoYWxrSm9iTmFtZX0ge21hZ2VudGFCcmlnaHQgY29waWVkIGFydGlmYWN0cyB0byAke3RhcmdldFRleHR9fSBpbiB7bWFnZW50YSAke3ByZXR0eUhydGltZShlbmRUaW1lKX19XFxuYCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBjb3B5QXJ0aWZhY3RzT3V0KHdyaXRlU3RyZWFtczogV3JpdGVTdHJlYW1zLCBidWlsZFZvbHVtZU5hbWU6IHN0cmluZykge1xuICAgICAgICBjb25zdCBzYWZlSm9iTmFtZSA9IHRoaXMuc2FmZUpvYk5hbWU7XG5cbiAgICAgICAgaWYgKCF0aGlzLnNoZWxsSXNvbGF0aW9uICYmICF0aGlzLmltYWdlTmFtZSB8fCAhdGhpcy5hcnRpZmFjdHMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCB0aW1lLCBlbmRUaW1lO1xuICAgICAgICBsZXQgY3BDbWQgPSBcInNob3B0IC1zIGdsb2JzdGFyIG51bGxnbG9iIGRvdGdsb2JcXG5cIjtcbiAgICAgICAgY3BDbWQgKz0gYG1rZGlyIC1wIC4uLy4uL2FydGlmYWN0cy8ke3NhZmVKb2JOYW1lfVxcbmA7XG4gICAgICAgIGZvciAoY29uc3QgYXJ0aWZhY3RQYXRoIG9mIHRoaXMuYXJ0aWZhY3RzPy5wYXRocyA/PyBbXSkge1xuICAgICAgICAgICAgY29uc3QgZXhwYW5kZWRQYXRoID0gVXRpbHMuZXhwYW5kVGV4dChhcnRpZmFjdFBhdGgsIHRoaXMuZXhwYW5kZWRWYXJpYWJsZXMpO1xuICAgICAgICAgICAgY3BDbWQgKz0gYGVjaG8gU3RhcnRlZCBjb3B5aW5nICR7ZXhwYW5kZWRQYXRofSB0byAuLi8uLi9hcnRpZmFjdHMvJHtzYWZlSm9iTmFtZX1cXG5gO1xuICAgICAgICAgICAgY3BDbWQgKz0gYHJzeW5jIC1SYSAke2V4cGFuZGVkUGF0aH0gLi4vLi4vYXJ0aWZhY3RzLyR7c2FmZUpvYk5hbWV9Ly5cXG5gO1xuICAgICAgICAgICAgY3BDbWQgKz0gYGVjaG8gRG9uZSBjb3B5aW5nICR7ZXhwYW5kZWRQYXRofSB0byAuLi8uLi9hcnRpZmFjdHMvJHtzYWZlSm9iTmFtZX1cXG5gO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBhcnRpZmFjdEV4Y2x1ZGVQYXRoIG9mIHRoaXMuYXJ0aWZhY3RzPy5leGNsdWRlID8/IFtdKSB7XG4gICAgICAgICAgICBjb25zdCBleHBhbmRlZFBhdGggPSBVdGlscy5leHBhbmRUZXh0KGFydGlmYWN0RXhjbHVkZVBhdGgsIHRoaXMuZXhwYW5kZWRWYXJpYWJsZXMpO1xuICAgICAgICAgICAgY3BDbWQgKz0gYGVjaG8gU3RhcnRlZCByZW1vdmluZyBleGNsdWRlICcke2V4cGFuZGVkUGF0aH0nIGZyb20gLi4vLi4vYXJ0aWZhY3RzLyR7c2FmZUpvYk5hbWV9XFxuYDtcbiAgICAgICAgICAgIGNwQ21kICs9IGBscyAtMWQgJy4uLy4uL2FydGlmYWN0cy8ke3NhZmVKb2JOYW1lfS8ke2V4cGFuZGVkUGF0aH0nIHwgeGFyZ3MgLW4xIHJtIC1yZiB8fCB0cnVlXFxuYDtcbiAgICAgICAgICAgIGNwQ21kICs9IGBlY2hvIERvbmUgcmVtb3ZpbmcgZXhjbHVkZSAnJHtleHBhbmRlZFBhdGh9JyBmcm9tIC4uLy4uL2FydGlmYWN0cy8ke3NhZmVKb2JOYW1lfVxcbmA7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXBvcnREb3RlbnYgPSB0aGlzLmFydGlmYWN0cy5yZXBvcnRzPy5kb3RlbnYgPz8gbnVsbDtcbiAgICAgICAgaWYgKHJlcG9ydERvdGVudiAhPSBudWxsKSB7XG4gICAgICAgICAgICBjcENtZCArPSBgbWtkaXIgLXAgLi4vLi4vYXJ0aWZhY3RzLyR7c2FmZUpvYk5hbWV9Ly5naXRsYWItY2ktcmVwb3J0cy9kb3RlbnZcXG5gO1xuICAgICAgICAgICAgY3BDbWQgKz0gYGVjaG8gU3RhcnRlZCBjb3B5aW5nICR7cmVwb3J0RG90ZW52fSB0byAuLi8uLi9hcnRpZmFjdHMvJHtzYWZlSm9iTmFtZX0vLmdpdGxhYi1jaS1yZXBvcnRzL2RvdGVudlxcbmA7XG4gICAgICAgICAgICBjcENtZCArPSBgcnN5bmMgLVJhICR7cmVwb3J0RG90ZW52fSAuLi8uLi9hcnRpZmFjdHMvJHtzYWZlSm9iTmFtZX0vLmdpdGxhYi1jaS1yZXBvcnRzL2RvdGVudi8uXFxuYDtcbiAgICAgICAgICAgIGNwQ21kICs9IGBlY2hvIERvbmUgY29weWluZyAke3JlcG9ydERvdGVudn0gdG8gLi4vLi4vYXJ0aWZhY3RzLyR7c2FmZUpvYk5hbWV9Ly5naXRsYWItY2ktcmVwb3J0cy9kb3RlbnZcXG5gO1xuICAgICAgICB9XG5cbiAgICAgICAgdGltZSA9IHByb2Nlc3MuaHJ0aW1lKCk7XG4gICAgICAgIGlmICh0aGlzLmltYWdlTmFtZSkge1xuICAgICAgICAgICAgY29uc3QgY2FjaGVNb3VudFN0ciA9IGF3YWl0IHRoaXMuY3JlYXRlQ2FjaGVEb2NrZXJWb2x1bWVNb3VudHMoc2FmZUpvYk5hbWUsIHdyaXRlU3RyZWFtcyk7XG4gICAgICAgICAgICBjb25zdCBkb2NrZXJDcmVhdGVDbWQgPSBgZG9ja2VyIGNyZWF0ZSAtaSAke2NhY2hlTW91bnRTdHJ9IC12ICR7YnVpbGRWb2x1bWVOYW1lfTovYnVpbGRzLyR7c2FmZUpvYk5hbWV9LyAtdyAvYnVpbGRzLyR7c2FmZUpvYk5hbWV9LyBmaXJlY293L2dpdGxhYi1jaS1sb2NhbC11dGlsIGJhc2ggLWMgXCIke2NwQ21kfVwiYDtcbiAgICAgICAgICAgIGNvbnN0IHtzdGRvdXQ6IGFydGlmYWN0c0NvbnRhaW5lcklkfSA9IGF3YWl0IFV0aWxzLnNwYXduKGRvY2tlckNyZWF0ZUNtZCwgdGhpcy5jd2QpO1xuICAgICAgICAgICAgdGhpcy5fYXJ0aWZhY3RzQ29udGFpbmVySWQgPSBhcnRpZmFjdHNDb250YWluZXJJZC5yZXBsYWNlKC9cXHI/XFxuL2csIFwiXCIpO1xuICAgICAgICAgICAgYXdhaXQgZnMubWtkaXJwKGAke3RoaXMuY3dkfS8uZ2l0bGFiLWNpLWxvY2FsL2FydGlmYWN0cy8ke3NhZmVKb2JOYW1lfWApO1xuICAgICAgICAgICAgYXdhaXQgVXRpbHMuc3Bhd24oYGRvY2tlciBzdGFydCAke3RoaXMuX2FydGlmYWN0c0NvbnRhaW5lcklkfSAtLWF0dGFjaGApO1xuICAgICAgICAgICAgYXdhaXQgVXRpbHMuc3Bhd24oYGRvY2tlciBjcCAke3RoaXMuX2FydGlmYWN0c0NvbnRhaW5lcklkfTovYXJ0aWZhY3RzLy4gLmdpdGxhYi1jaS1sb2NhbC9hcnRpZmFjdHMvLmAsIHRoaXMuY3dkKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNoZWxsSXNvbGF0aW9uKSB7XG4gICAgICAgICAgICBhd2FpdCBVdGlscy5zcGF3bihgbWtkaXIgLXAgLi4vLi4vYXJ0aWZhY3RzLyR7c2FmZUpvYk5hbWV9YCwgYCR7dGhpcy5jd2R9Ly5naXRsYWItY2ktbG9jYWwvYnVpbGRzLyR7c2FmZUpvYk5hbWV9YCk7XG4gICAgICAgICAgICBhd2FpdCBVdGlscy5zcGF3bihgYmFzaCAtZSAtYyBcIiR7Y3BDbWR9XCJgLCBgJHt0aGlzLmN3ZH0vLmdpdGxhYi1jaS1sb2NhbC9idWlsZHMvJHtzYWZlSm9iTmFtZX1gKTtcbiAgICAgICAgfVxuICAgICAgICBlbmRUaW1lID0gcHJvY2Vzcy5ocnRpbWUodGltZSk7XG4gICAgICAgIHdyaXRlU3RyZWFtcy5zdGRvdXQoY2hhbGtgJHt0aGlzLmNoYWxrSm9iTmFtZX0ge21hZ2VudGFCcmlnaHQgc2F2ZWQgYXJ0aWZhY3RzfSBpbiB7bWFnZW50YSAke3ByZXR0eUhydGltZShlbmRUaW1lKX19XFxuYCk7XG5cbiAgICAgICAgaWYgKHRoaXMuYXJ0aWZhY3RzVG9Tb3VyY2UpIHtcbiAgICAgICAgICAgIHRpbWUgPSBwcm9jZXNzLmhydGltZSgpO1xuICAgICAgICAgICAgYXdhaXQgVXRpbHMuc3Bhd24oYHJzeW5jIC0tZXhjbHVkZT0vLmdpdGxhYi1jaS1yZXBvcnRzLyAtYSAke3RoaXMuY3dkfS8uZ2l0bGFiLWNpLWxvY2FsL2FydGlmYWN0cy8ke3NhZmVKb2JOYW1lfS8uICR7dGhpcy5jd2R9YCk7XG4gICAgICAgICAgICBpZiAocmVwb3J0RG90ZW52ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBVdGlscy5zcGF3bihgcnN5bmMgLWEgJHt0aGlzLmN3ZH0vLmdpdGxhYi1jaS1sb2NhbC9hcnRpZmFjdHMvJHtzYWZlSm9iTmFtZX0vLmdpdGxhYi1jaS1yZXBvcnRzL2RvdGVudi8uICR7dGhpcy5jd2R9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbmRUaW1lID0gcHJvY2Vzcy5ocnRpbWUodGltZSk7XG4gICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3Rkb3V0KGNoYWxrYCR7dGhpcy5jaGFsa0pvYk5hbWV9IHttYWdlbnRhQnJpZ2h0IGNvcGllZCBhcnRpZmFjdHMgdG8gY3dkfSBpbiB7bWFnZW50YSAke3ByZXR0eUhydGltZShlbmRUaW1lKX19XFxuYCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHJlZnJlc2hMb25nUnVubmluZ1NpbGVudFRpbWVvdXQod3JpdGVTdHJlYW1zOiBXcml0ZVN0cmVhbXMpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX2xvbmdSdW5uaW5nU2lsZW50VGltZW91dCk7XG4gICAgICAgIHRoaXMuX2xvbmdSdW5uaW5nU2lsZW50VGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChjaGFsa2Ake3RoaXMuY2hhbGtKb2JOYW1lfSB7Z3JleSA+IHN0aWxsIHJ1bm5pbmcuLi59XFxuYCk7XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hMb25nUnVubmluZ1NpbGVudFRpbWVvdXQod3JpdGVTdHJlYW1zKTtcbiAgICAgICAgfSwgMTAwMDApO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RXhpdGVkU3RyaW5nKHN0YXJ0VGltZTogW251bWJlciwgbnVtYmVyXSwgY29kZTogbnVtYmVyLCB3YXJuaW5nID0gZmFsc2UsIHByZXBlbmRTdHJpbmcgPSBcIlwiKSB7XG4gICAgICAgIGNvbnN0IGZpbmlzaGVkU3RyID0gdGhpcy5nZXRGaW5pc2hlZFN0cmluZyhzdGFydFRpbWUpO1xuICAgICAgICBpZiAod2FybmluZykge1xuICAgICAgICAgICAgcmV0dXJuIGNoYWxrYCR7ZmluaXNoZWRTdHJ9IHtibGFjay5iZ1llbGxvd0JyaWdodCAgV0FSTiAke2NvZGUudG9TdHJpbmcoKX0gfSR7cHJlcGVuZFN0cmluZ31gO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNoYWxrYCR7ZmluaXNoZWRTdHJ9IHtibGFjay5iZ1JlZCAgRkFJTCAke2NvZGUudG9TdHJpbmcoKX0gfSAke3ByZXBlbmRTdHJpbmd9YDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEZpbmlzaGVkU3RyaW5nKHN0YXJ0VGltZTogW251bWJlciwgbnVtYmVyXSkge1xuICAgICAgICBjb25zdCBlbmRUaW1lID0gcHJvY2Vzcy5ocnRpbWUoc3RhcnRUaW1lKTtcbiAgICAgICAgY29uc3QgdGltZVN0ciA9IHByZXR0eUhydGltZShlbmRUaW1lKTtcbiAgICAgICAgcmV0dXJuIGNoYWxrYCR7dGhpcy5jaGFsa0pvYk5hbWV9IHttYWdlbnRhQnJpZ2h0IGZpbmlzaGVkfSBpbiB7bWFnZW50YSAke3RpbWVTdHJ9fWA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBjcmVhdGVEb2NrZXJOZXR3b3JrKG5ldHdvcmtOYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3Qge3N0ZG91dDogbmV0d29ya0lkfSA9IGF3YWl0IFV0aWxzLnNwYXduKGBkb2NrZXIgbmV0d29yayBjcmVhdGUgJHtuZXR3b3JrTmFtZX1gKTtcbiAgICAgICAgdGhpcy5fc2VydmljZU5ldHdvcmtJZCA9IG5ldHdvcmtJZC5yZXBsYWNlKC9cXHI/XFxuL2csIFwiXCIpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgY3JlYXRlQ2FjaGVEb2NrZXJWb2x1bWVNb3VudHMoc2FmZUpvYk5hbWU6IHN0cmluZywgd3JpdGVTdHJlYW1zOiBXcml0ZVN0cmVhbXMpIHtcbiAgICAgICAgbGV0IGNtZCA9IFwiXCI7XG4gICAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgdGhpcy5jYWNoZSkge1xuICAgICAgICAgICAgY29uc3QgdW5pcXVlQ2FjaGVOYW1lID0gYXdhaXQgSm9iLmdldFVuaXF1ZUNhY2hlTmFtZSh0aGlzLmN3ZCwgZW50cnksIHRoaXMuZXhwYW5kZWRWYXJpYWJsZXMpO1xuICAgICAgICAgICAgZW50cnkucGF0aHMuZm9yRWFjaCgocCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhdGggPSBVdGlscy5leHBhbmRUZXh0KHAsIHRoaXMuZXhwYW5kZWRWYXJpYWJsZXMpO1xuICAgICAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRvdXQoY2hhbGtgJHt0aGlzLmNoYWxrSm9iTmFtZX0ge21hZ2VudGFCcmlnaHQgbW91bnRpbmcgY2FjaGV9IGZvciBwYXRoICR7cGF0aH1cXG5gKTtcbiAgICAgICAgICAgICAgICBjb25zdCBjYWNoZWRpciA9IGAvdG1wL2dpdGxhYi1jaS1sb2NhbC9jYWNoZS8ke3VuaXF1ZUNhY2hlTmFtZX0vJHtwYXRofWA7XG4gICAgICAgICAgICAgICAgZnMuZW5zdXJlRGlyU3luYyhjYWNoZWRpcik7XG4gICAgICAgICAgICAgICAgY21kICs9IGAtdiAke2NhY2hlZGlyfTovYnVpbGRzLyR7c2FmZUpvYk5hbWV9LyR7cGF0aH0gYDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBzdGFydFNlcnZpY2Uod3JpdGVTdHJlYW1zOiBXcml0ZVN0cmVhbXMsIHNlcnZpY2U6IFNlcnZpY2UsIHByaXZpbGVnZWQ6IGJvb2xlYW4pIHtcbiAgICAgICAgbGV0IGRvY2tlckNtZCA9IGBkb2NrZXIgcnVuIC1kIC0tbmV0d29yayBnaXRsYWItY2ktbG9jYWwtJHt0aGlzLmpvYklkfSBgO1xuXG4gICAgICAgIGlmIChwcml2aWxlZ2VkKSB7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCItLXByaXZpbGVnZWQgXCI7XG4gICAgICAgIH1cblxuICAgICAgICAoc2VydmljZS5nZXRFbnRyeXBvaW50KCkgPz8gW10pLmZvckVhY2goKGUpID0+IHtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBgLS1lbnRyeXBvaW50IFwiJHtlfVwiIGA7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBzZXJ2aWNlQWxpYXMgPSBzZXJ2aWNlLmdldEFsaWFzKHRoaXMuZXhwYW5kZWRWYXJpYWJsZXMpO1xuICAgICAgICBjb25zdCBzZXJ2aWNlTmFtZSA9IHNlcnZpY2UuZ2V0TmFtZSh0aGlzLmV4cGFuZGVkVmFyaWFibGVzKTtcbiAgICAgICAgY29uc3Qgc2VydmljZU5hbWVXaXRob3V0VmVyc2lvbiA9IHNlcnZpY2VOYW1lLnJlcGxhY2UoLyguKikoOi4qKS8sIFwiJDFcIik7XG4gICAgICAgIGNvbnN0IGFsaWFzZXMgPSBbc2VydmljZU5hbWVXaXRob3V0VmVyc2lvbi5yZXBsYWNlKFwiL1wiLCBcIi1cIiksIHNlcnZpY2VOYW1lV2l0aG91dFZlcnNpb24ucmVwbGFjZShcIi9cIiwgXCJfX1wiKV07XG4gICAgICAgIGlmIChzZXJ2aWNlQWxpYXMpIHtcbiAgICAgICAgICAgIGFsaWFzZXMucHVzaChzZXJ2aWNlQWxpYXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yKGNvbnN0IGFsaWFzIG9mIGFsaWFzZXMpIHtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBgLS1uZXR3b3JrLWFsaWFzPSR7YWxpYXN9IGA7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLmV4cGFuZGVkVmFyaWFibGVzKSkge1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IGAtZSAke2tleX09XCIke1N0cmluZyh2YWx1ZSkudHJpbSgpfVwiIGA7XG4gICAgICAgIH1cblxuICAgICAgICBkb2NrZXJDbWQgKz0gYCR7c2VydmljZU5hbWV9YDtcbiAgICAgICAgY29uc3QgY29tbWFuZCA9IHNlcnZpY2UuZ2V0Q29tbWFuZCh0aGlzLmV4cGFuZGVkVmFyaWFibGVzKTtcbiAgICAgICAgaWYgKGNvbW1hbmQpIHtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBgICR7Y29tbWFuZH1gO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGltZSA9IHByb2Nlc3MuaHJ0aW1lKCk7XG4gICAgICAgIGNvbnN0IHtzdGRvdXQ6IGNvbnRhaW5lcklkfSA9IGF3YWl0IFV0aWxzLnNwYXduKGRvY2tlckNtZCwgdGhpcy5jd2QpO1xuICAgICAgICB0aGlzLl9zZXJ2aWNlSWRzLnB1c2goY29udGFpbmVySWQucmVwbGFjZSgvXFxyP1xcbi9nLCBcIlwiKSk7XG4gICAgICAgIHRoaXMucmVmcmVzaExvbmdSdW5uaW5nU2lsZW50VGltZW91dCh3cml0ZVN0cmVhbXMpO1xuICAgICAgICBjb25zdCBlbmRUaW1lID0gcHJvY2Vzcy5ocnRpbWUodGltZSk7XG4gICAgICAgIHdyaXRlU3RyZWFtcy5zdGRvdXQoY2hhbGtgJHt0aGlzLmNoYWxrSm9iTmFtZX0ge21hZ2VudGFCcmlnaHQgc3RhcnRlZCBzZXJ2aWNlIGltYWdlOiAke3NlcnZpY2VOYW1lfSB3aXRoIGFsaWFzZXM6ICR7YWxpYXNlcy5qb2luKFwiLCBcIil9fSBpbiB7bWFnZW50YSAke3ByZXR0eUhydGltZShlbmRUaW1lKX19XFxuYCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBzZXJ2aWNlSGVhbHRoQ2hlY2sod3JpdGVTdHJlYW1zOiBXcml0ZVN0cmVhbXMsIHNlcnZpY2U6IFNlcnZpY2UpIHtcbiAgICAgICAgY29uc3QgZG9ja2VySW5zcGVjdENtZCA9IGBkb2NrZXIgaW5zcGVjdCAke3NlcnZpY2UuZ2V0TmFtZSh0aGlzLmV4cGFuZGVkVmFyaWFibGVzKX1gO1xuICAgICAgICBjb25zdCB7c3Rkb3V0OiBpbWFnZURldGFpbHN9ID0gYXdhaXQgVXRpbHMuc3Bhd24oZG9ja2VySW5zcGVjdENtZCwgdGhpcy5jd2QpO1xuICAgICAgICBjb25zdCBpbWFnZURldGFpbE9iaiA9IEpTT04ucGFyc2UoaW1hZ2VEZXRhaWxzKTtcblxuICAgICAgICAvLyBDb3BpZWQgZnJvbSB0aGUgc3RhcnRTZXJ2aWNlIGJsb2NrLiBJbXBvcnRhbnQgdGhpbmcgaXMgdGhhdCB0aGUgYWxpYXNlcyBtYXRjaFxuICAgICAgICBjb25zdCBzZXJ2aWNlQWxpYXMgPSBzZXJ2aWNlLmdldEFsaWFzKHRoaXMuZXhwYW5kZWRWYXJpYWJsZXMpO1xuICAgICAgICBjb25zdCBzZXJ2aWNlTmFtZSA9IHNlcnZpY2UuZ2V0TmFtZSh0aGlzLmV4cGFuZGVkVmFyaWFibGVzKTtcbiAgICAgICAgY29uc3Qgc2VydmljZU5hbWVXaXRob3V0VmVyc2lvbiA9IHNlcnZpY2VOYW1lLnJlcGxhY2UoLyguKikoOi4qKS8sIFwiJDFcIik7XG4gICAgICAgIGNvbnN0IGFsaWFzZXMgPSBbc2VydmljZU5hbWVXaXRob3V0VmVyc2lvbi5yZXBsYWNlKFwiL1wiLCBcIi1cIiksIHNlcnZpY2VOYW1lV2l0aG91dFZlcnNpb24ucmVwbGFjZShcIi9cIiwgXCJfX1wiKV07XG4gICAgICAgIGlmIChzZXJ2aWNlQWxpYXMpIHtcbiAgICAgICAgICAgIGFsaWFzZXMucHVzaChzZXJ2aWNlQWxpYXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSXRlcmF0ZSBvdmVyIGVhY2ggcG9ydCBkZWZpbmVkIGluIHRoZSBpbWFnZSwgYW5kIHRyeSB0byBjb25uZWN0IHRvIHRoZSBhbGlhc1xuICAgICAgICBmb3IoY29uc3QgcG9ydCBvZiBPYmplY3Qua2V5cyhpbWFnZURldGFpbE9ialswXS5Db250YWluZXJDb25maWcuRXhwb3NlZFBvcnRzKSkge1xuICAgICAgICAgICAgaWYocG9ydC5lbmRzV2l0aChcIi90Y3BcIikpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwb3J0TnVtID0gcGFyc2VJbnQocG9ydC5yZXBsYWNlKFwiL3RjcFwiLCBcIlwiKSk7XG5cbiAgICAgICAgICAgICAgICBsZXQgZG9ja2VyQ21kID0gYGRvY2tlciBydW4gLWQgLS1uZXR3b3JrIGdpdGxhYi1jaS1sb2NhbC0ke3RoaXMuam9iSWR9IGA7XG5cbiAgICAgICAgICAgICAgICBkb2NrZXJDbWQgKz0gYCB3aWxsd2lsbC93YWl0LWZvci1pdCBcIiR7YWxpYXNlc1swXX06JHtwb3J0TnVtfVwiIC10IDMwYDtcbiAgICAgICAgICAgICAgICBjb25zdCB0aW1lID0gcHJvY2Vzcy5ocnRpbWUoKTtcbiAgICAgICAgICAgICAgICBjb25zdCB7c3RhdHVzOiByZXN1bHQsIHN0ZG91dH0gPSBhd2FpdCBVdGlscy5zcGF3bihkb2NrZXJDbWQsIHRoaXMuY3dkKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXJ2aWNlSWRzLnB1c2goc3Rkb3V0LnJlcGxhY2UoL1xccj9cXG4vZywgXCJcIikpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGVuZFRpbWUgPSBwcm9jZXNzLmhydGltZSh0aW1lKTtcbiAgICAgICAgICAgICAgICBpZihyZXN1bHQgPT0gMCl7XG4gICAgICAgICAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRvdXQoY2hhbGtgJHt0aGlzLmNoYWxrSm9iTmFtZX0ge2dyZWVuQnJpZ2h0IHNlcnZpY2UgaW1hZ2U6ICR7c2VydmljZU5hbWV9IGhlYWx0aGNoZWNrIHBhc3NlZDogJHthbGlhc2VzWzBdfToke3BvcnROdW19fSBpbiB7Z3JlZW4gJHtwcmV0dHlIcnRpbWUoZW5kVGltZSl9fVxcbmApO1xuICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3Rkb3V0KGNoYWxrYCR7dGhpcy5jaGFsa0pvYk5hbWV9IHtyZWRCcmlnaHQgc2VydmljZSBpbWFnZTogJHtzZXJ2aWNlTmFtZX0gaGVhbHRoY2hlY2sgZmFpbGVkOiAke2FsaWFzZXNbMF19OiR7cG9ydE51bX19IGluIHtyZWQgJHtwcmV0dHlIcnRpbWUoZW5kVGltZSl9fVxcbmApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
|
package/src/parser-includes.js
CHANGED
|
@@ -24,12 +24,12 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
24
24
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
25
25
|
exports.ParserIncludes = void 0;
|
|
26
26
|
const utils_1 = require("./utils");
|
|
27
|
-
const node_fetch_1 = __importDefault(require("node-fetch"));
|
|
28
27
|
const exit_error_1 = require("./types/exit-error");
|
|
29
28
|
const fs = __importStar(require("fs-extra"));
|
|
30
29
|
const asserts_1 = require("./asserts");
|
|
31
30
|
const chalk_1 = __importDefault(require("chalk"));
|
|
32
31
|
const parser_1 = require("./parser");
|
|
32
|
+
const axios_1 = __importDefault(require("axios"));
|
|
33
33
|
class ParserIncludes {
|
|
34
34
|
static async init(gitlabData, cwd, writeStreams, gitData, fetchIncludes, depth) {
|
|
35
35
|
let includeDatas = [];
|
|
@@ -121,11 +121,13 @@ class ParserIncludes {
|
|
|
121
121
|
}
|
|
122
122
|
static async downloadIncludeRemote(cwd, url) {
|
|
123
123
|
const fsUrl = utils_1.Utils.fsUrl(url);
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
124
|
+
try {
|
|
125
|
+
const res = await axios_1.default.get(url);
|
|
126
|
+
await fs.outputFile(`${cwd}/.gitlab-ci-local/includes/${fsUrl}`, res.data);
|
|
127
|
+
}
|
|
128
|
+
catch (e) {
|
|
129
|
+
throw new exit_error_1.ExitError(`Remote include could not be fetched ${url} ${e}`);
|
|
127
130
|
}
|
|
128
|
-
fs.outputFileSync(`${cwd}/.gitlab-ci-local/includes/${fsUrl}`, await res.text());
|
|
129
131
|
}
|
|
130
132
|
static async downloadIncludeProjectFile(cwd, project, ref, file, gitData) {
|
|
131
133
|
const remote = gitData.remote;
|
|
@@ -141,4 +143,4 @@ class ParserIncludes {
|
|
|
141
143
|
}
|
|
142
144
|
}
|
|
143
145
|
exports.ParserIncludes = ParserIncludes;
|
|
144
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VyLWluY2x1ZGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicGFyc2VyLWluY2x1ZGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxtQ0FBOEI7QUFDOUIsNERBQStCO0FBQy9CLG1EQUE2QztBQUM3Qyw2Q0FBK0I7QUFHL0IsdUNBQWlDO0FBQ2pDLGtEQUEwQjtBQUMxQixxQ0FBZ0M7QUFFaEMsTUFBYSxjQUFjO0lBRXZCLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQWUsRUFBRSxHQUFXLEVBQUUsWUFBMEIsRUFBRSxPQUFnQixFQUFFLGFBQXNCLEVBQUUsS0FBYTtRQUMvSCxJQUFJLFlBQVksR0FBVSxFQUFFLENBQUM7UUFDN0IsTUFBTSxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBRXBCLElBQUEsZ0JBQU0sRUFBQyxLQUFLLEdBQUcsR0FBRyxFQUFFLElBQUEsZUFBSyxFQUFBLDZDQUE2QyxDQUFDLENBQUM7UUFDeEUsS0FBSyxFQUFFLENBQUM7UUFFUixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBRTFELHlFQUF5RTtRQUN6RSxLQUFLLE1BQU0sS0FBSyxJQUFJLE9BQU8sRUFBRTtZQUN6QixJQUFJLENBQUMsYUFBYSxFQUFFO2dCQUNoQixTQUFTO2FBQ1o7WUFDRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFDaEIsTUFBTSxVQUFVLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEdBQUcsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUM3RCxJQUFJLENBQUMsVUFBVSxFQUFFO29CQUNiLE1BQU0sSUFBSSxzQkFBUyxDQUFDLHNDQUFzQyxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2lCQUMvRTthQUNKO2lCQUFNLElB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QyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1NBQ3JFO1FBQ0QsRUFBRSxDQUFDLGNBQWMsQ0FBQyxHQUFHLEdBQUcsOEJBQThCLEtBQUssRUFBRSxFQUFFLE1BQU0sR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDckYsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFLLENBQUMsMEJBQTBCLENBQUMsR0FBVyxFQUFFLE9BQWUsRUFBRSxHQUFXLEVBQUUsSUFBWSxFQUFFLE9BQWdCO1FBQzdHLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUM7UUFDOUIsRUFBRSxDQUFDLGFBQWEsQ0FBQyxHQUFHLEdBQUcsOEJBQThCLE1BQU0sQ0FBQyxJQUFJLElBQUksT0FBTyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDdkYsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDaEQsSUFBSTtZQUNBLE1BQU0sTUFBTSxHQUFHLDZCQUE2QixNQUFNLENBQUMsSUFBSSxJQUFJLE9BQU8sSUFBSSxHQUFHLEdBQUcsQ0FBQztZQUM3RSxNQUFNLGFBQUssQ0FBQyxLQUFLLENBQUMsa0NBQWtDLE1BQU0sQ0FBQyxJQUFJLElBQUksTUFBTSxDQUFDLElBQUksSUFBSSxPQUFPLFFBQVEsR0FBRyxJQUFJLGNBQWMsbUJBQW1CLE1BQU0sRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1NBQzNKO1FBQUMsT0FBTyxDQUFDLEVBQUU7WUFDUixNQUFNLElBQUksc0JBQVMsQ0FBQyxtREFBbUQsT0FBTyxVQUFVLEdBQUcsV0FBVyxjQUFjLElBQUksQ0FBQyxDQUFDO1NBQzdIO0lBQ0wsQ0FBQztDQUNKO0FBbEhELHdDQWtIQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7VXRpbHN9IGZyb20gXCIuL3V0aWxzXCI7XG5pbXBvcnQgZmV0Y2ggZnJvbSBcIm5vZGUtZmV0Y2hcIjtcbmltcG9ydCB7RXhpdEVycm9yfSBmcm9tIFwiLi90eXBlcy9leGl0LWVycm9yXCI7XG5pbXBvcnQgKiBhcyBmcyBmcm9tIFwiZnMtZXh0cmFcIjtcbmltcG9ydCB7V3JpdGVTdHJlYW1zfSBmcm9tIFwiLi90eXBlcy93cml0ZS1zdHJlYW1zXCI7XG5pbXBvcnQge0dpdERhdGF9IGZyb20gXCIuL2dpdC1kYXRhXCI7XG5pbXBvcnQge2Fzc2VydH0gZnJvbSBcIi4vYXNzZXJ0c1wiO1xuaW1wb3J0IGNoYWxrIGZyb20gXCJjaGFsa1wiO1xuaW1wb3J0IHtQYXJzZXJ9IGZyb20gXCIuL3BhcnNlclwiO1xuXG5leHBvcnQgY2xhc3MgUGFyc2VySW5jbHVkZXMge1xuXG4gICAgc3RhdGljIGFzeW5jIGluaXQoZ2l0bGFiRGF0YTogYW55LCBjd2Q6IHN0cmluZywgd3JpdGVTdHJlYW1zOiBXcml0ZVN0cmVhbXMsIGdpdERhdGE6IEdpdERhdGEsIGZldGNoSW5jbHVkZXM6IGJvb2xlYW4sIGRlcHRoOiBudW1iZXIpOiBQcm9taXNlPGFueVtdPiB7XG4gICAgICAgIGxldCBpbmNsdWRlRGF0YXM6IGFueVtdID0gW107XG4gICAgICAgIGNvbnN0IHByb21pc2VzID0gW107XG5cbiAgICAgICAgYXNzZXJ0KGRlcHRoIDwgMTAwLCBjaGFsa2BjaXJjdWxhciBkZXBlbmRlbmN5IGRldGVjdGVkIGluIFxcYGluY2x1ZGVcXGBgKTtcbiAgICAgICAgZGVwdGgrKztcblxuICAgICAgICBjb25zdCBpbmNsdWRlID0gdGhpcy5leHBhbmRJbmNsdWRlKGdpdGxhYkRhdGFbXCJpbmNsdWRlXCJdKTtcblxuICAgICAgICAvLyBGaW5kIGZpbGVzIHRvIGZldGNoIGZyb20gcmVtb3RlIGFuZCBwbGFjZSBpbiAuZ2l0bGFiLWNpLWxvY2FsL2luY2x1ZGVzXG4gICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgaW5jbHVkZSkge1xuICAgICAgICAgICAgaWYgKCFmZXRjaEluY2x1ZGVzKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodmFsdWVbXCJsb2NhbFwiXSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGVFeGlzdHMgPSBmcy5leGlzdHNTeW5jKGAke2N3ZH0vJHt2YWx1ZVtcImxvY2FsXCJdfWApO1xuICAgICAgICAgICAgICAgIGlmICghZmlsZUV4aXN0cykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhpdEVycm9yKGBMb2NhbCBpbmNsdWRlIGZpbGUgY2Fubm90IGJlIGZvdW5kICR7dmFsdWVbXCJsb2NhbFwiXX1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlW1wiZmlsZVwiXSkge1xuICAgICAgICAgICAgICAgIHByb21pc2VzLnB1c2godGhpcy5kb3dubG9hZEluY2x1ZGVQcm9qZWN0RmlsZShjd2QsIHZhbHVlW1wicHJvamVjdFwiXSwgdmFsdWVbXCJyZWZcIl0gfHwgXCJtYXN0ZXJcIiwgdmFsdWVbXCJmaWxlXCJdLCBnaXREYXRhKSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlW1widGVtcGxhdGVcIl0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7cHJvamVjdCwgcmVmLCBmaWxlLCBkb21haW59ID0gdGhpcy5jb3ZlcnRUZW1wbGF0ZVRvUHJvamVjdEZpbGUodmFsdWVbXCJ0ZW1wbGF0ZVwiXSk7XG4gICAgICAgICAgICAgICAgY29uc3QgdXJsID0gYGh0dHBzOi8vJHtkb21haW59LyR7cHJvamVjdH0vLS9yYXcvJHtyZWZ9LyR7ZmlsZX1gO1xuICAgICAgICAgICAgICAgIHByb21pc2VzLnB1c2godGhpcy5kb3dubG9hZEluY2x1ZGVSZW1vdGUoY3dkLCB1cmwpKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWVbXCJyZW1vdGVcIl0pIHtcbiAgICAgICAgICAgICAgICBwcm9taXNlcy5wdXNoKHRoaXMuZG93bmxvYWRJbmNsdWRlUmVtb3RlKGN3ZCwgdmFsdWVbXCJyZW1vdGVcIl0pKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xuXG4gICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgaW5jbHVkZSkge1xuICAgICAgICAgICAgaWYgKHZhbHVlW1wibG9jYWxcIl0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBsb2NhbERvYyA9IGF3YWl0IFBhcnNlci5sb2FkWWFtbChgJHtjd2R9LyR7dmFsdWUubG9jYWx9YCk7XG4gICAgICAgICAgICAgICAgaW5jbHVkZURhdGFzID0gaW5jbHVkZURhdGFzLmNvbmNhdChhd2FpdCB0aGlzLmluaXQobG9jYWxEb2MsIGN3ZCwgd3JpdGVTdHJlYW1zLCBnaXREYXRhLCBmZXRjaEluY2x1ZGVzLCBkZXB0aCkpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZVtcInByb2plY3RcIl0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlRG9jID0gYXdhaXQgUGFyc2VyLmxvYWRZYW1sKGAke2N3ZH0vLmdpdGxhYi1jaS1sb2NhbC9pbmNsdWRlcy8ke2dpdERhdGEucmVtb3RlLmhvc3R9LyR7dmFsdWVbXCJwcm9qZWN0XCJdfS8ke3ZhbHVlW1wicmVmXCJdIHx8IFwibWFzdGVyXCJ9LyR7dmFsdWVbXCJmaWxlXCJdfWApO1xuXG4gICAgICAgICAgICAgICAgLy8gRXhwYW5kIGxvY2FsIGluY2x1ZGVzIGluc2lkZSBhIFwicHJvamVjdFwiLWxpa2UgaW5jbHVkZVxuICAgICAgICAgICAgICAgIHRoaXMuZXhwYW5kSW5jbHVkZShmaWxlRG9jW1wiaW5jbHVkZVwiXSkuZm9yRWFjaCgoaW5uZXI6IGFueSwgaTogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaW5uZXJbXCJsb2NhbFwiXSkgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICBmaWxlRG9jW1wiaW5jbHVkZVwiXVtpXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb2plY3Q6IHZhbHVlW1wicHJvamVjdFwiXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGU6IGlubmVyW1wibG9jYWxcIl0ucmVwbGFjZSgvXlxcLy8sIFwiXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmOiB2YWx1ZVtcInJlZlwiXSxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGluY2x1ZGVEYXRhcyA9IGluY2x1ZGVEYXRhcy5jb25jYXQoYXdhaXQgdGhpcy5pbml0KGZpbGVEb2MsIGN3ZCwgd3JpdGVTdHJlYW1zLCBnaXREYXRhLCBmZXRjaEluY2x1ZGVzLCBkZXB0aCkpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZVtcInRlbXBsYXRlXCJdKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qge3Byb2plY3QsIHJlZiwgZmlsZSwgZG9tYWlufSA9IHRoaXMuY292ZXJ0VGVtcGxhdGVUb1Byb2plY3RGaWxlKHZhbHVlW1widGVtcGxhdGVcIl0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZzVXJsID0gVXRpbHMuZnNVcmwoYGh0dHBzOi8vJHtkb21haW59LyR7cHJvamVjdH0vLS9yYXcvJHtyZWZ9LyR7ZmlsZX1gKTtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlRG9jID0gYXdhaXQgUGFyc2VyLmxvYWRZYW1sKGAke2N3ZH0vLmdpdGxhYi1jaS1sb2NhbC9pbmNsdWRlcy8ke2ZzVXJsfWApO1xuICAgICAgICAgICAgICAgIGluY2x1ZGVEYXRhcyA9IGluY2x1ZGVEYXRhcy5jb25jYXQoYXdhaXQgdGhpcy5pbml0KGZpbGVEb2MsIGN3ZCwgd3JpdGVTdHJlYW1zLCBnaXREYXRhLCBmZXRjaEluY2x1ZGVzLCBkZXB0aCkpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZVtcInJlbW90ZVwiXSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZzVXJsID0gVXRpbHMuZnNVcmwodmFsdWVbXCJyZW1vdGVcIl0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGVEb2MgPSBhd2FpdCBQYXJzZXIubG9hZFlhbWwoYCR7Y3dkfS8uZ2l0bGFiLWNpLWxvY2FsL2luY2x1ZGVzLyR7ZnNVcmx9YCk7XG4gICAgICAgICAgICAgICAgaW5jbHVkZURhdGFzID0gaW5jbHVkZURhdGFzLmNvbmNhdChhd2FpdCB0aGlzLmluaXQoZmlsZURvYywgY3dkLCB3cml0ZVN0cmVhbXMsIGdpdERhdGEsIGZldGNoSW5jbHVkZXMsIGRlcHRoKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGl0RXJyb3IoYERpZG4ndCB1bmRlcnN0YW5kIGluY2x1ZGUgJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpbmNsdWRlRGF0YXMucHVzaChnaXRsYWJEYXRhKTtcbiAgICAgICAgcmV0dXJuIGluY2x1ZGVEYXRhcztcbiAgICB9XG5cbiAgICBzdGF0aWMgZXhwYW5kSW5jbHVkZShpOiBhbnkpOiBhbnlbXSB7XG4gICAgICAgIGxldCBpbmNsdWRlID0gaSB8fCBbXTtcbiAgICAgICAgaWYgKGluY2x1ZGUgJiYgaW5jbHVkZS5sZW5ndGggPT0gbnVsbCkge1xuICAgICAgICAgICAgaW5jbHVkZSA9IFsgaSBdO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgaW5jbHVkZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgaW5jbHVkZSA9IFt7XCJsb2NhbFwiOiBpbmNsdWRlfV07XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBbaW5kZXgsIGVudHJ5XSBvZiBPYmplY3QuZW50cmllcyhpbmNsdWRlKSkge1xuICAgICAgICAgICAgaW5jbHVkZVtpbmRleF0gPSB0eXBlb2YgZW50cnkgPT09IFwic3RyaW5nXCIgPyB7XCJsb2NhbFwiOiBlbnRyeSB9IDogZW50cnk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGluY2x1ZGU7XG4gICAgfVxuXG4gICAgc3RhdGljIGNvdmVydFRlbXBsYXRlVG9Qcm9qZWN0RmlsZSh0ZW1wbGF0ZTogc3RyaW5nKTogeyBwcm9qZWN0OiBzdHJpbmc7IHJlZjogc3RyaW5nOyBmaWxlOiBzdHJpbmc7IGRvbWFpbjogc3RyaW5nIH0ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZG9tYWluOiBcImdpdGxhYi5jb21cIixcbiAgICAgICAgICAgIHByb2plY3Q6IFwiZ2l0bGFiLW9yZy9naXRsYWJcIixcbiAgICAgICAgICAgIHJlZjogXCJtYXN0ZXJcIixcbiAgICAgICAgICAgIGZpbGU6IGBsaWIvZ2l0bGFiL2NpL3RlbXBsYXRlcy8ke3RlbXBsYXRlfWAsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgc3RhdGljIGFzeW5jIGRvd25sb2FkSW5jbHVkZVJlbW90ZShjd2Q6IHN0cmluZywgdXJsOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgZnNVcmwgPSBVdGlscy5mc1VybCh1cmwpO1xuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaCh1cmwpO1xuICAgICAgICBpZiAocmVzLnN0YXR1cyAhPT0gMjAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXhpdEVycm9yKGBSZW1vdGUgaW5jbHVkZSBjb3VsZCBub3QgYmUgZmV0Y2hlZCAke3VybH1gKTtcbiAgICAgICAgfVxuICAgICAgICBmcy5vdXRwdXRGaWxlU3luYyhgJHtjd2R9Ly5naXRsYWItY2ktbG9jYWwvaW5jbHVkZXMvJHtmc1VybH1gLCBhd2FpdCByZXMudGV4dCgpKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgYXN5bmMgZG93bmxvYWRJbmNsdWRlUHJvamVjdEZpbGUoY3dkOiBzdHJpbmcsIHByb2plY3Q6IHN0cmluZywgcmVmOiBzdHJpbmcsIGZpbGU6IHN0cmluZywgZ2l0RGF0YTogR2l0RGF0YSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCByZW1vdGUgPSBnaXREYXRhLnJlbW90ZTtcbiAgICAgICAgZnMuZW5zdXJlRGlyU3luYyhgJHtjd2R9Ly5naXRsYWItY2ktbG9jYWwvaW5jbHVkZXMvJHtyZW1vdGUuaG9zdH0vJHtwcm9qZWN0fS8ke3JlZn0vYCk7XG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRGaWxlID0gZmlsZS5yZXBsYWNlKC9eXFwvKy8sIFwiXCIpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gYC5naXRsYWItY2ktbG9jYWwvaW5jbHVkZXMvJHtyZW1vdGUuaG9zdH0vJHtwcm9qZWN0fS8ke3JlZn0vYDtcbiAgICAgICAgICAgIGF3YWl0IFV0aWxzLnNwYXduKGBnaXQgYXJjaGl2ZSAtLXJlbW90ZT1zc2g6Ly9naXRAJHtyZW1vdGUuaG9zdH06JHtyZW1vdGUucG9ydH0vJHtwcm9qZWN0fS5naXQgJHtyZWZ9ICR7bm9ybWFsaXplZEZpbGV9IHwgdGFyIC1mIC0gLXhDICR7dGFyZ2V0fWAsIGN3ZCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGl0RXJyb3IoYFByb2plY3QgaW5jbHVkZSBjb3VsZCBub3QgYmUgZmV0Y2hlZCB7IHByb2plY3Q6ICR7cHJvamVjdH0sIHJlZjogJHtyZWZ9LCBmaWxlOiAke25vcm1hbGl6ZWRGaWxlfSB9YCk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
|
|
146
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VyLWluY2x1ZGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicGFyc2VyLWluY2x1ZGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxtQ0FBOEI7QUFDOUIsbURBQTZDO0FBQzdDLDZDQUErQjtBQUcvQix1Q0FBaUM7QUFDakMsa0RBQTBCO0FBQzFCLHFDQUFnQztBQUNoQyxrREFBMEI7QUFFMUIsTUFBYSxjQUFjO0lBRXZCLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQWUsRUFBRSxHQUFXLEVBQUUsWUFBMEIsRUFBRSxPQUFnQixFQUFFLGFBQXNCLEVBQUUsS0FBYTtRQUMvSCxJQUFJLFlBQVksR0FBVSxFQUFFLENBQUM7UUFDN0IsTUFBTSxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBRXBCLElBQUEsZ0JBQU0sRUFBQyxLQUFLLEdBQUcsR0FBRyxFQUFFLElBQUEsZUFBSyxFQUFBLDZDQUE2QyxDQUFDLENBQUM7UUFDeEUsS0FBSyxFQUFFLENBQUM7UUFFUixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBRTFELHlFQUF5RTtRQUN6RSxLQUFLLE1BQU0sS0FBSyxJQUFJLE9BQU8sRUFBRTtZQUN6QixJQUFJLENBQUMsYUFBYSxFQUFFO2dCQUNoQixTQUFTO2FBQ1o7WUFDRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFDaEIsTUFBTSxVQUFVLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEdBQUcsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUM3RCxJQUFJLENBQUMsVUFBVSxFQUFFO29CQUNiLE1BQU0sSUFBSSxzQkFBUyxDQUFDLHNDQUFzQyxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2lCQUMvRTthQUNKO2lCQUFNLElB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QUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUM5RTtRQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ1IsTUFBTSxJQUFJLHNCQUFTLENBQUMsdUNBQXVDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQzFFO0lBQ0wsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFLLENBQUMsMEJBQTBCLENBQUMsR0FBVyxFQUFFLE9BQWUsRUFBRSxHQUFXLEVBQUUsSUFBWSxFQUFFLE9BQWdCO1FBQzdHLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUM7UUFDOUIsRUFBRSxDQUFDLGFBQWEsQ0FBQyxHQUFHLEdBQUcsOEJBQThCLE1BQU0sQ0FBQyxJQUFJLElBQUksT0FBTyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDdkYsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDaEQsSUFBSTtZQUNBLE1BQU0sTUFBTSxHQUFHLDZCQUE2QixNQUFNLENBQUMsSUFBSSxJQUFJLE9BQU8sSUFBSSxHQUFHLEdBQUcsQ0FBQztZQUM3RSxNQUFNLGFBQUssQ0FBQyxLQUFLLENBQUMsa0NBQWtDLE1BQU0sQ0FBQyxJQUFJLElBQUksTUFBTSxDQUFDLElBQUksSUFBSSxPQUFPLFFBQVEsR0FBRyxJQUFJLGNBQWMsbUJBQW1CLE1BQU0sRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1NBQzNKO1FBQUMsT0FBTyxDQUFDLEVBQUU7WUFDUixNQUFNLElBQUksc0JBQVMsQ0FBQyxtREFBbUQsT0FBTyxVQUFVLEdBQUcsV0FBVyxjQUFjLElBQUksQ0FBQyxDQUFDO1NBQzdIO0lBQ0wsQ0FBQztDQUNKO0FBbkhELHdDQW1IQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7VXRpbHN9IGZyb20gXCIuL3V0aWxzXCI7XG5pbXBvcnQge0V4aXRFcnJvcn0gZnJvbSBcIi4vdHlwZXMvZXhpdC1lcnJvclwiO1xuaW1wb3J0ICogYXMgZnMgZnJvbSBcImZzLWV4dHJhXCI7XG5pbXBvcnQge1dyaXRlU3RyZWFtc30gZnJvbSBcIi4vdHlwZXMvd3JpdGUtc3RyZWFtc1wiO1xuaW1wb3J0IHtHaXREYXRhfSBmcm9tIFwiLi9naXQtZGF0YVwiO1xuaW1wb3J0IHthc3NlcnR9IGZyb20gXCIuL2Fzc2VydHNcIjtcbmltcG9ydCBjaGFsayBmcm9tIFwiY2hhbGtcIjtcbmltcG9ydCB7UGFyc2VyfSBmcm9tIFwiLi9wYXJzZXJcIjtcbmltcG9ydCBheGlvcyBmcm9tIFwiYXhpb3NcIjtcblxuZXhwb3J0IGNsYXNzIFBhcnNlckluY2x1ZGVzIHtcblxuICAgIHN0YXRpYyBhc3luYyBpbml0KGdpdGxhYkRhdGE6IGFueSwgY3dkOiBzdHJpbmcsIHdyaXRlU3RyZWFtczogV3JpdGVTdHJlYW1zLCBnaXREYXRhOiBHaXREYXRhLCBmZXRjaEluY2x1ZGVzOiBib29sZWFuLCBkZXB0aDogbnVtYmVyKTogUHJvbWlzZTxhbnlbXT4ge1xuICAgICAgICBsZXQgaW5jbHVkZURhdGFzOiBhbnlbXSA9IFtdO1xuICAgICAgICBjb25zdCBwcm9taXNlcyA9IFtdO1xuXG4gICAgICAgIGFzc2VydChkZXB0aCA8IDEwMCwgY2hhbGtgY2lyY3VsYXIgZGVwZW5kZW5jeSBkZXRlY3RlZCBpbiBcXGBpbmNsdWRlXFxgYCk7XG4gICAgICAgIGRlcHRoKys7XG5cbiAgICAgICAgY29uc3QgaW5jbHVkZSA9IHRoaXMuZXhwYW5kSW5jbHVkZShnaXRsYWJEYXRhW1wiaW5jbHVkZVwiXSk7XG5cbiAgICAgICAgLy8gRmluZCBmaWxlcyB0byBmZXRjaCBmcm9tIHJlbW90ZSBhbmQgcGxhY2UgaW4gLmdpdGxhYi1jaS1sb2NhbC9pbmNsdWRlc1xuICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIGluY2x1ZGUpIHtcbiAgICAgICAgICAgIGlmICghZmV0Y2hJbmNsdWRlcykge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHZhbHVlW1wibG9jYWxcIl0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlRXhpc3RzID0gZnMuZXhpc3RzU3luYyhgJHtjd2R9LyR7dmFsdWVbXCJsb2NhbFwiXX1gKTtcbiAgICAgICAgICAgICAgICBpZiAoIWZpbGVFeGlzdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4aXRFcnJvcihgTG9jYWwgaW5jbHVkZSBmaWxlIGNhbm5vdCBiZSBmb3VuZCAke3ZhbHVlW1wibG9jYWxcIl19YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZVtcImZpbGVcIl0pIHtcbiAgICAgICAgICAgICAgICBwcm9taXNlcy5wdXNoKHRoaXMuZG93bmxvYWRJbmNsdWRlUHJvamVjdEZpbGUoY3dkLCB2YWx1ZVtcInByb2plY3RcIl0sIHZhbHVlW1wicmVmXCJdIHx8IFwibWFzdGVyXCIsIHZhbHVlW1wiZmlsZVwiXSwgZ2l0RGF0YSkpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZVtcInRlbXBsYXRlXCJdKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qge3Byb2plY3QsIHJlZiwgZmlsZSwgZG9tYWlufSA9IHRoaXMuY292ZXJ0VGVtcGxhdGVUb1Byb2plY3RGaWxlKHZhbHVlW1widGVtcGxhdGVcIl0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IHVybCA9IGBodHRwczovLyR7ZG9tYWlufS8ke3Byb2plY3R9Ly0vcmF3LyR7cmVmfS8ke2ZpbGV9YDtcbiAgICAgICAgICAgICAgICBwcm9taXNlcy5wdXNoKHRoaXMuZG93bmxvYWRJbmNsdWRlUmVtb3RlKGN3ZCwgdXJsKSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlW1wicmVtb3RlXCJdKSB7XG4gICAgICAgICAgICAgICAgcHJvbWlzZXMucHVzaCh0aGlzLmRvd25sb2FkSW5jbHVkZVJlbW90ZShjd2QsIHZhbHVlW1wicmVtb3RlXCJdKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKTtcblxuICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIGluY2x1ZGUpIHtcbiAgICAgICAgICAgIGlmICh2YWx1ZVtcImxvY2FsXCJdKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbG9jYWxEb2MgPSBhd2FpdCBQYXJzZXIubG9hZFlhbWwoYCR7Y3dkfS8ke3ZhbHVlLmxvY2FsfWApO1xuICAgICAgICAgICAgICAgIGluY2x1ZGVEYXRhcyA9IGluY2x1ZGVEYXRhcy5jb25jYXQoYXdhaXQgdGhpcy5pbml0KGxvY2FsRG9jLCBjd2QsIHdyaXRlU3RyZWFtcywgZ2l0RGF0YSwgZmV0Y2hJbmNsdWRlcywgZGVwdGgpKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWVbXCJwcm9qZWN0XCJdKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsZURvYyA9IGF3YWl0IFBhcnNlci5sb2FkWWFtbChgJHtjd2R9Ly5naXRsYWItY2ktbG9jYWwvaW5jbHVkZXMvJHtnaXREYXRhLnJlbW90ZS5ob3N0fS8ke3ZhbHVlW1wicHJvamVjdFwiXX0vJHt2YWx1ZVtcInJlZlwiXSB8fCBcIm1hc3RlclwifS8ke3ZhbHVlW1wiZmlsZVwiXX1gKTtcblxuICAgICAgICAgICAgICAgIC8vIEV4cGFuZCBsb2NhbCBpbmNsdWRlcyBpbnNpZGUgYSBcInByb2plY3RcIi1saWtlIGluY2x1ZGVcbiAgICAgICAgICAgICAgICB0aGlzLmV4cGFuZEluY2x1ZGUoZmlsZURvY1tcImluY2x1ZGVcIl0pLmZvckVhY2goKGlubmVyOiBhbnksIGk6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWlubmVyW1wibG9jYWxcIl0pIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgZmlsZURvY1tcImluY2x1ZGVcIl1baV0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9qZWN0OiB2YWx1ZVtcInByb2plY3RcIl0sXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlOiBpbm5lcltcImxvY2FsXCJdLnJlcGxhY2UoL15cXC8vLCBcIlwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZjogdmFsdWVbXCJyZWZcIl0sXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBpbmNsdWRlRGF0YXMgPSBpbmNsdWRlRGF0YXMuY29uY2F0KGF3YWl0IHRoaXMuaW5pdChmaWxlRG9jLCBjd2QsIHdyaXRlU3RyZWFtcywgZ2l0RGF0YSwgZmV0Y2hJbmNsdWRlcywgZGVwdGgpKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWVbXCJ0ZW1wbGF0ZVwiXSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHtwcm9qZWN0LCByZWYsIGZpbGUsIGRvbWFpbn0gPSB0aGlzLmNvdmVydFRlbXBsYXRlVG9Qcm9qZWN0RmlsZSh2YWx1ZVtcInRlbXBsYXRlXCJdKTtcbiAgICAgICAgICAgICAgICBjb25zdCBmc1VybCA9IFV0aWxzLmZzVXJsKGBodHRwczovLyR7ZG9tYWlufS8ke3Byb2plY3R9Ly0vcmF3LyR7cmVmfS8ke2ZpbGV9YCk7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsZURvYyA9IGF3YWl0IFBhcnNlci5sb2FkWWFtbChgJHtjd2R9Ly5naXRsYWItY2ktbG9jYWwvaW5jbHVkZXMvJHtmc1VybH1gKTtcbiAgICAgICAgICAgICAgICBpbmNsdWRlRGF0YXMgPSBpbmNsdWRlRGF0YXMuY29uY2F0KGF3YWl0IHRoaXMuaW5pdChmaWxlRG9jLCBjd2QsIHdyaXRlU3RyZWFtcywgZ2l0RGF0YSwgZmV0Y2hJbmNsdWRlcywgZGVwdGgpKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWVbXCJyZW1vdGVcIl0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmc1VybCA9IFV0aWxzLmZzVXJsKHZhbHVlW1wicmVtb3RlXCJdKTtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlRG9jID0gYXdhaXQgUGFyc2VyLmxvYWRZYW1sKGAke2N3ZH0vLmdpdGxhYi1jaS1sb2NhbC9pbmNsdWRlcy8ke2ZzVXJsfWApO1xuICAgICAgICAgICAgICAgIGluY2x1ZGVEYXRhcyA9IGluY2x1ZGVEYXRhcy5jb25jYXQoYXdhaXQgdGhpcy5pbml0KGZpbGVEb2MsIGN3ZCwgd3JpdGVTdHJlYW1zLCBnaXREYXRhLCBmZXRjaEluY2x1ZGVzLCBkZXB0aCkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhpdEVycm9yKGBEaWRuJ3QgdW5kZXJzdGFuZCBpbmNsdWRlICR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaW5jbHVkZURhdGFzLnB1c2goZ2l0bGFiRGF0YSk7XG4gICAgICAgIHJldHVybiBpbmNsdWRlRGF0YXM7XG4gICAgfVxuXG4gICAgc3RhdGljIGV4cGFuZEluY2x1ZGUoaTogYW55KTogYW55W10ge1xuICAgICAgICBsZXQgaW5jbHVkZSA9IGkgfHwgW107XG4gICAgICAgIGlmIChpbmNsdWRlICYmIGluY2x1ZGUubGVuZ3RoID09IG51bGwpIHtcbiAgICAgICAgICAgIGluY2x1ZGUgPSBbIGkgXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGluY2x1ZGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIGluY2x1ZGUgPSBbe1wibG9jYWxcIjogaW5jbHVkZX1dO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgW2luZGV4LCBlbnRyeV0gb2YgT2JqZWN0LmVudHJpZXMoaW5jbHVkZSkpIHtcbiAgICAgICAgICAgIGluY2x1ZGVbaW5kZXhdID0gdHlwZW9mIGVudHJ5ID09PSBcInN0cmluZ1wiID8ge1wibG9jYWxcIjogZW50cnkgfSA6IGVudHJ5O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbmNsdWRlO1xuICAgIH1cblxuICAgIHN0YXRpYyBjb3ZlcnRUZW1wbGF0ZVRvUHJvamVjdEZpbGUodGVtcGxhdGU6IHN0cmluZyk6IHsgcHJvamVjdDogc3RyaW5nOyByZWY6IHN0cmluZzsgZmlsZTogc3RyaW5nOyBkb21haW46IHN0cmluZyB9IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRvbWFpbjogXCJnaXRsYWIuY29tXCIsXG4gICAgICAgICAgICBwcm9qZWN0OiBcImdpdGxhYi1vcmcvZ2l0bGFiXCIsXG4gICAgICAgICAgICByZWY6IFwibWFzdGVyXCIsXG4gICAgICAgICAgICBmaWxlOiBgbGliL2dpdGxhYi9jaS90ZW1wbGF0ZXMvJHt0ZW1wbGF0ZX1gLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHN0YXRpYyBhc3luYyBkb3dubG9hZEluY2x1ZGVSZW1vdGUoY3dkOiBzdHJpbmcsIHVybDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IGZzVXJsID0gVXRpbHMuZnNVcmwodXJsKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGF4aW9zLmdldCh1cmwpO1xuICAgICAgICAgICAgYXdhaXQgZnMub3V0cHV0RmlsZShgJHtjd2R9Ly5naXRsYWItY2ktbG9jYWwvaW5jbHVkZXMvJHtmc1VybH1gLCByZXMuZGF0YSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGl0RXJyb3IoYFJlbW90ZSBpbmNsdWRlIGNvdWxkIG5vdCBiZSBmZXRjaGVkICR7dXJsfSAke2V9YCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgYXN5bmMgZG93bmxvYWRJbmNsdWRlUHJvamVjdEZpbGUoY3dkOiBzdHJpbmcsIHByb2plY3Q6IHN0cmluZywgcmVmOiBzdHJpbmcsIGZpbGU6IHN0cmluZywgZ2l0RGF0YTogR2l0RGF0YSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCByZW1vdGUgPSBnaXREYXRhLnJlbW90ZTtcbiAgICAgICAgZnMuZW5zdXJlRGlyU3luYyhgJHtjd2R9Ly5naXRsYWItY2ktbG9jYWwvaW5jbHVkZXMvJHtyZW1vdGUuaG9zdH0vJHtwcm9qZWN0fS8ke3JlZn0vYCk7XG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRGaWxlID0gZmlsZS5yZXBsYWNlKC9eXFwvKy8sIFwiXCIpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gYC5naXRsYWItY2ktbG9jYWwvaW5jbHVkZXMvJHtyZW1vdGUuaG9zdH0vJHtwcm9qZWN0fS8ke3JlZn0vYDtcbiAgICAgICAgICAgIGF3YWl0IFV0aWxzLnNwYXduKGBnaXQgYXJjaGl2ZSAtLXJlbW90ZT1zc2g6Ly9naXRAJHtyZW1vdGUuaG9zdH06JHtyZW1vdGUucG9ydH0vJHtwcm9qZWN0fS5naXQgJHtyZWZ9ICR7bm9ybWFsaXplZEZpbGV9IHwgdGFyIC1mIC0gLXhDICR7dGFyZ2V0fWAsIGN3ZCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGl0RXJyb3IoYFByb2plY3QgaW5jbHVkZSBjb3VsZCBub3QgYmUgZmV0Y2hlZCB7IHByb2plY3Q6ICR7cHJvamVjdH0sIHJlZjogJHtyZWZ9LCBmaWxlOiAke25vcm1hbGl6ZWRGaWxlfSB9YCk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
|