@0ctx/cli 0.1.2 → 0.1.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/dist/index.js +58 -52
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1807,12 +1807,6 @@ var import_picocolors3 = __toESM(require_picocolors());
|
|
|
1807
1807
|
var import_fs = __toESM(require("fs"));
|
|
1808
1808
|
var import_os = __toESM(require("os"));
|
|
1809
1809
|
var import_path = __toESM(require("path"));
|
|
1810
|
-
function parseClients(raw) {
|
|
1811
|
-
const source = (raw || "claude,cursor,windsurf").trim().toLowerCase();
|
|
1812
|
-
if (source === "all") return ["claude", "cursor", "windsurf"];
|
|
1813
|
-
const parsed = source.split(",").map((item) => item.trim()).filter((item) => item === "claude" || item === "cursor" || item === "windsurf");
|
|
1814
|
-
return parsed.length === 0 ? ["claude", "cursor", "windsurf"] : parsed;
|
|
1815
|
-
}
|
|
1816
1810
|
function getPlatform(options) {
|
|
1817
1811
|
return options?.platform || process.platform;
|
|
1818
1812
|
}
|
|
@@ -1951,45 +1945,6 @@ function bootstrapMcpRegistration(options) {
|
|
|
1951
1945
|
}
|
|
1952
1946
|
return results;
|
|
1953
1947
|
}
|
|
1954
|
-
function parseArgValue(flag) {
|
|
1955
|
-
const direct = process.argv.find((arg) => arg.startsWith(`${flag}=`));
|
|
1956
|
-
if (direct) return direct.slice(flag.length + 1);
|
|
1957
|
-
const index = process.argv.findIndex((arg) => arg === flag);
|
|
1958
|
-
if (index !== -1 && process.argv[index + 1]) {
|
|
1959
|
-
return process.argv[index + 1];
|
|
1960
|
-
}
|
|
1961
|
-
return void 0;
|
|
1962
|
-
}
|
|
1963
|
-
function hasFlag(flag) {
|
|
1964
|
-
return process.argv.includes(flag) || process.argv.some((arg) => arg.startsWith(`${flag}=`));
|
|
1965
|
-
}
|
|
1966
|
-
function printSummary(results, dryRun) {
|
|
1967
|
-
const mode = dryRun ? "DRY RUN" : "APPLIED";
|
|
1968
|
-
console.log(`
|
|
1969
|
-
0ctx MCP bootstrap (${mode})`);
|
|
1970
|
-
for (const result of results) {
|
|
1971
|
-
const suffix = result.message ? ` - ${result.message}` : "";
|
|
1972
|
-
console.log(`- ${result.client}: ${result.status} (${result.configPath})${suffix}`);
|
|
1973
|
-
}
|
|
1974
|
-
}
|
|
1975
|
-
function runBootstrapFromCli() {
|
|
1976
|
-
const dryRun = hasFlag("--dry-run");
|
|
1977
|
-
const clients = parseClients(parseArgValue("--clients") || parseArgValue("--client"));
|
|
1978
|
-
const serverName = parseArgValue("--server-name") || "0ctx";
|
|
1979
|
-
const entrypoint = parseArgValue("--entrypoint");
|
|
1980
|
-
const results = bootstrapMcpRegistration({
|
|
1981
|
-
clients,
|
|
1982
|
-
dryRun,
|
|
1983
|
-
serverName,
|
|
1984
|
-
entrypoint
|
|
1985
|
-
});
|
|
1986
|
-
printSummary(results, dryRun);
|
|
1987
|
-
const failed = results.some((result) => result.status === "failed");
|
|
1988
|
-
return failed ? 1 : 0;
|
|
1989
|
-
}
|
|
1990
|
-
if (require.main === module) {
|
|
1991
|
-
process.exitCode = runBootstrapFromCli();
|
|
1992
|
-
}
|
|
1993
1948
|
|
|
1994
1949
|
// ../mcp/src/client.ts
|
|
1995
1950
|
var import_net = __toESM(require("net"));
|
|
@@ -4262,6 +4217,11 @@ function question(rl, prompt) {
|
|
|
4262
4217
|
rl.question(prompt, (answer) => resolve(answer));
|
|
4263
4218
|
});
|
|
4264
4219
|
}
|
|
4220
|
+
function getBestSuggestion(line, completions) {
|
|
4221
|
+
const normalized = line.trim();
|
|
4222
|
+
if (!normalized) return "";
|
|
4223
|
+
return completions.find((c) => c.startsWith(normalized) && c !== normalized) ?? "";
|
|
4224
|
+
}
|
|
4265
4225
|
function getCompletionCandidates() {
|
|
4266
4226
|
return [
|
|
4267
4227
|
"/help",
|
|
@@ -4435,10 +4395,38 @@ async function runInteractiveShell(options) {
|
|
|
4435
4395
|
}
|
|
4436
4396
|
});
|
|
4437
4397
|
rl.history = [...history].reverse();
|
|
4398
|
+
import_readline.default.emitKeypressEvents(process.stdin);
|
|
4399
|
+
let ghostSuffix = "";
|
|
4400
|
+
const updateGhostText = () => {
|
|
4401
|
+
const line = rl.line ?? "";
|
|
4402
|
+
const suggestion = getBestSuggestion(line, completions);
|
|
4403
|
+
ghostSuffix = suggestion ? suggestion.slice(line.length) : "";
|
|
4404
|
+
if (ghostSuffix) {
|
|
4405
|
+
process.stdout.write("\x1B[s\x1B[2m" + ghostSuffix + "\x1B[0m\x1B[u");
|
|
4406
|
+
}
|
|
4407
|
+
};
|
|
4408
|
+
const keypressHandler = (_ch, key) => {
|
|
4409
|
+
if (!key) return;
|
|
4410
|
+
if (key.name === "right" && ghostSuffix) {
|
|
4411
|
+
setImmediate(() => {
|
|
4412
|
+
const cursor = rl.cursor ?? 0;
|
|
4413
|
+
const line = rl.line ?? "";
|
|
4414
|
+
if (cursor >= line.length && ghostSuffix) {
|
|
4415
|
+
const toInsert = ghostSuffix;
|
|
4416
|
+
ghostSuffix = "";
|
|
4417
|
+
rl.write(toInsert);
|
|
4418
|
+
}
|
|
4419
|
+
});
|
|
4420
|
+
return;
|
|
4421
|
+
}
|
|
4422
|
+
setImmediate(updateGhostText);
|
|
4423
|
+
};
|
|
4424
|
+
process.stdin.on("keypress", keypressHandler);
|
|
4438
4425
|
await printShellHelp();
|
|
4439
4426
|
let lastExitCode = 0;
|
|
4440
4427
|
let interrupted = false;
|
|
4441
4428
|
rl.on("SIGINT", () => {
|
|
4429
|
+
ghostSuffix = "";
|
|
4442
4430
|
if (interrupted) {
|
|
4443
4431
|
rl.close();
|
|
4444
4432
|
return;
|
|
@@ -4491,6 +4479,7 @@ async function runInteractiveShell(options) {
|
|
|
4491
4479
|
lastExitCode = await runShellCommand(tokens, options);
|
|
4492
4480
|
}
|
|
4493
4481
|
} finally {
|
|
4482
|
+
process.stdin.off("keypress", keypressHandler);
|
|
4494
4483
|
rl.close();
|
|
4495
4484
|
}
|
|
4496
4485
|
return lastExitCode;
|
|
@@ -4741,7 +4730,7 @@ function parseArgs(argv) {
|
|
|
4741
4730
|
flags
|
|
4742
4731
|
};
|
|
4743
4732
|
}
|
|
4744
|
-
function
|
|
4733
|
+
function parseClients(raw) {
|
|
4745
4734
|
if (!raw || typeof raw !== "string") return SUPPORTED_CLIENTS;
|
|
4746
4735
|
const normalized = raw.trim().toLowerCase();
|
|
4747
4736
|
if (normalized === "all") return SUPPORTED_CLIENTS;
|
|
@@ -4847,7 +4836,18 @@ async function commandStatus() {
|
|
|
4847
4836
|
p.intro(import_picocolors3.default.bgCyan(import_picocolors3.default.black(" 0ctx status ")));
|
|
4848
4837
|
const s = p.spinner();
|
|
4849
4838
|
s.start("Checking daemon health");
|
|
4850
|
-
|
|
4839
|
+
let daemon = await isDaemonReachable2();
|
|
4840
|
+
if (!daemon.ok) {
|
|
4841
|
+
s.message("Daemon not running \u2014 starting...");
|
|
4842
|
+
try {
|
|
4843
|
+
startDaemonDetached2();
|
|
4844
|
+
const started = await waitForDaemon2(8e3);
|
|
4845
|
+
if (started) {
|
|
4846
|
+
daemon = await isDaemonReachable2();
|
|
4847
|
+
}
|
|
4848
|
+
} catch {
|
|
4849
|
+
}
|
|
4850
|
+
}
|
|
4851
4851
|
s.stop(`Daemon is ${daemon.ok ? import_picocolors3.default.green("running") : import_picocolors3.default.red("not running")}`);
|
|
4852
4852
|
const info = {
|
|
4853
4853
|
"Socket": SOCKET_PATH2,
|
|
@@ -4877,7 +4877,7 @@ async function commandStatus() {
|
|
|
4877
4877
|
}
|
|
4878
4878
|
async function commandBootstrap(flags) {
|
|
4879
4879
|
const p = await Promise.resolve().then(() => (init_dist2(), dist_exports));
|
|
4880
|
-
const clients =
|
|
4880
|
+
const clients = parseClients(flags.clients);
|
|
4881
4881
|
const dryRun = Boolean(flags["dry-run"]);
|
|
4882
4882
|
if (!Boolean(flags.quiet) && !Boolean(flags.json)) {
|
|
4883
4883
|
p.intro(import_picocolors3.default.bgBlue(import_picocolors3.default.black(" 0ctx bootstrap ")));
|
|
@@ -4990,7 +4990,7 @@ async function commandDoctor(flags) {
|
|
|
4990
4990
|
message: opsLogWritable ? "CLI operations log path is writable." : "CLI operations log path is not writable.",
|
|
4991
4991
|
details: { path: opsLogPath, error: opsLogError }
|
|
4992
4992
|
});
|
|
4993
|
-
const dryRunResults = runBootstrap(
|
|
4993
|
+
const dryRunResults = runBootstrap(parseClients(flags.clients), true);
|
|
4994
4994
|
const failedBootstrap = dryRunResults.some((result) => result.status === "failed");
|
|
4995
4995
|
checks.push({
|
|
4996
4996
|
id: "bootstrap_dry_run",
|
|
@@ -6335,8 +6335,14 @@ async function main() {
|
|
|
6335
6335
|
if (sub === "logout") return Promise.resolve(commandAuthLogout());
|
|
6336
6336
|
if (sub === "status") return Promise.resolve(commandAuthStatus(parsed.flags));
|
|
6337
6337
|
if (sub === "rotate") return commandAuthRotate(parsed.flags);
|
|
6338
|
-
|
|
6339
|
-
|
|
6338
|
+
console.log(`
|
|
6339
|
+
Authentication commands:
|
|
6340
|
+
`);
|
|
6341
|
+
console.log(` auth login Start device-code login flow`);
|
|
6342
|
+
console.log(` auth logout Clear stored credentials`);
|
|
6343
|
+
console.log(` auth status Show current auth state
|
|
6344
|
+
`);
|
|
6345
|
+
return sub ? 1 : 0;
|
|
6340
6346
|
}
|
|
6341
6347
|
case "daemon":
|
|
6342
6348
|
if (parsed.subcommand === "start") {
|
|
@@ -6413,4 +6419,4 @@ main().then((code) => {
|
|
|
6413
6419
|
console.error(error instanceof Error ? error.message : String(error));
|
|
6414
6420
|
process.exitCode = 1;
|
|
6415
6421
|
});
|
|
6416
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3BpY29jb2xvcnMvcGljb2NvbG9ycy5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvc2lzdGVyYW5zaS9zcmMvaW5kZXguanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BjbGFjay9jb3JlL3NyYy91dGlscy9jdXJzb3IudHMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL25vZGVfbW9kdWxlcy8ucG5wbS9mYXN0LXN0cmluZy10cnVuY2F0ZWQtd2lkdGhAMS4yLjEvbm9kZV9tb2R1bGVzL2Zhc3Qtc3RyaW5nLXRydW5jYXRlZC13aWR0aC9kaXN0L3V0aWxzLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ub2RlX21vZHVsZXMvLnBucG0vZmFzdC1zdHJpbmctdHJ1bmNhdGVkLXdpZHRoQDEuMi4xL25vZGVfbW9kdWxlcy9mYXN0LXN0cmluZy10cnVuY2F0ZWQtd2lkdGgvZGlzdC9pbmRleC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbm9kZV9tb2R1bGVzLy5wbnBtL2Zhc3Qtc3RyaW5nLXdpZHRoQDEuMS4wL25vZGVfbW9kdWxlcy9mYXN0LXN0cmluZy13aWR0aC9kaXN0L2luZGV4LmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ub2RlX21vZHVsZXMvLnBucG0vZmFzdC13cmFwLWFuc2lAMC4xLjMvbm9kZV9tb2R1bGVzL2Zhc3Qtd3JhcC1hbnNpL2xpYi9tYWluLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9AY2xhY2svY29yZS9zcmMvdXRpbHMvc2V0dGluZ3MudHMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BjbGFjay9jb3JlL3NyYy91dGlscy9zdHJpbmcudHMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BjbGFjay9jb3JlL3NyYy91dGlscy9pbmRleC50cyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvQGNsYWNrL2NvcmUvc3JjL3Byb21wdHMvcHJvbXB0LnRzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9AY2xhY2svY29yZS9zcmMvcHJvbXB0cy9hdXRvY29tcGxldGUudHMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BjbGFjay9jb3JlL3NyYy9wcm9tcHRzL2NvbmZpcm0udHMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BjbGFjay9jb3JlL3NyYy9wcm9tcHRzL2dyb3VwLW11bHRpc2VsZWN0LnRzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9AY2xhY2svY29yZS9zcmMvcHJvbXB0cy9tdWx0aS1zZWxlY3QudHMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BjbGFjay9jb3JlL3NyYy9wcm9tcHRzL3Bhc3N3b3JkLnRzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9AY2xhY2svY29yZS9zcmMvcHJvbXB0cy9zZWxlY3QudHMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BjbGFjay9jb3JlL3NyYy9wcm9tcHRzL3NlbGVjdC1rZXkudHMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BjbGFjay9jb3JlL3NyYy9wcm9tcHRzL3RleHQudHMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL25vZGVfbW9kdWxlcy8ucG5wbS9pcy11bmljb2RlLXN1cHBvcnRlZEAxLjMuMC9ub2RlX21vZHVsZXMvaXMtdW5pY29kZS1zdXBwb3J0ZWQvaW5kZXguanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BjbGFjay9wcm9tcHRzL3NyYy9jb21tb24udHMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL25vZGVfbW9kdWxlcy8ucG5wbS9mYXN0LXN0cmluZy10cnVuY2F0ZWQtd2lkdGhAMS4yLjEvbm9kZV9tb2R1bGVzL2Zhc3Qtc3RyaW5nLXRydW5jYXRlZC13aWR0aC9kaXN0L3V0aWxzLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ub2RlX21vZHVsZXMvLnBucG0vZmFzdC1zdHJpbmctdHJ1bmNhdGVkLXdpZHRoQDEuMi4xL25vZGVfbW9kdWxlcy9mYXN0LXN0cmluZy10cnVuY2F0ZWQtd2lkdGgvZGlzdC9pbmRleC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbm9kZV9tb2R1bGVzLy5wbnBtL2Zhc3Qtc3RyaW5nLXdpZHRoQDEuMS4wL25vZGVfbW9kdWxlcy9mYXN0LXN0cmluZy13aWR0aC9kaXN0L2luZGV4LmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ub2RlX21vZHVsZXMvLnBucG0vZmFzdC13cmFwLWFuc2lAMC4xLjMvbm9kZV9tb2R1bGVzL2Zhc3Qtd3JhcC1hbnNpL2xpYi9tYWluLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9AY2xhY2svcHJvbXB0cy9zcmMvbGltaXQtb3B0aW9ucy50cyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvQGNsYWNrL3Byb21wdHMvc3JjL2F1dG9jb21wbGV0ZS50cyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvQGNsYWNrL3Byb21wdHMvc3JjL2JveC50cyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvQGNsYWNrL3Byb21wdHMvc3JjL2NvbmZpcm0udHMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BjbGFjay9wcm9tcHRzL3NyYy9ncm91cC50cyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvQGNsYWNrL3Byb21wdHMvc3JjL2dyb3VwLW11bHRpLXNlbGVjdC50cyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvQGNsYWNrL3Byb21wdHMvc3JjL2xvZy50cyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvQGNsYWNrL3Byb21wdHMvc3JjL21lc3NhZ2VzLnRzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9AY2xhY2svcHJvbXB0cy9zcmMvbXVsdGktc2VsZWN0LnRzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9AY2xhY2svcHJvbXB0cy9zcmMvbm90ZS50cyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvQGNsYWNrL3Byb21wdHMvc3JjL3Bhc3N3b3JkLnRzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9AY2xhY2svcHJvbXB0cy9zcmMvcGF0aC50cyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvQGNsYWNrL3Byb21wdHMvc3JjL3NwaW5uZXIudHMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BjbGFjay9wcm9tcHRzL3NyYy9wcm9ncmVzcy1iYXIudHMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BjbGFjay9wcm9tcHRzL3NyYy9zZWxlY3QudHMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BjbGFjay9wcm9tcHRzL3NyYy9zZWxlY3Qta2V5LnRzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9AY2xhY2svcHJvbXB0cy9zcmMvc3RyZWFtLnRzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9AY2xhY2svcHJvbXB0cy9zcmMvdGFzay50cyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvQGNsYWNrL3Byb21wdHMvc3JjL3Rhc2stbG9nLnRzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9AY2xhY2svcHJvbXB0cy9zcmMvdGV4dC50cyIsICIuLi9zcmMvaW5kZXgudHMiLCAiLi4vLi4vbWNwL3NyYy9ib290c3RyYXAudHMiLCAiLi4vLi4vbWNwL3NyYy9jbGllbnQudHMiLCAiLi4vLi4vY29yZS9zcmMvZGIudHMiLCAiLi4vLi4vY29yZS9zcmMvZW5jcnlwdGlvbi50cyIsICIuLi8uLi9jb3JlL3NyYy9jb25maWcudHMiLCAiLi4vc3JjL3NlcnZpY2Utd2luZG93cy50cyIsICIuLi9zcmMvc2VydmljZS1tYWNvcy50cyIsICIuLi9zcmMvc2VydmljZS1saW51eC50cyIsICIuLi9zcmMvYXV0aC50cyIsICIuLi9zcmMva2V5cmluZy50cyIsICIuLi9zcmMvY29ubmVjdG9yLnRzIiwgIi4uL3NyYy9jbG91ZC50cyIsICIuLi9zcmMvY29ubmVjdG9yLXJ1bnRpbWUudHMiLCAiLi4vc3JjL2Nvbm5lY3Rvci1xdWV1ZS50cyIsICIuLi9zcmMvb3BzLWxvZy50cyIsICIuLi9zcmMvY29ubmVjdG9yLXF1ZXVlLWRyYWluLnRzIiwgIi4uL3NyYy9zaGVsbC50cyIsICIuLi9zcmMvcmVsZWFzZS50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsibGV0IHAgPSBwcm9jZXNzIHx8IHt9LCBhcmd2ID0gcC5hcmd2IHx8IFtdLCBlbnYgPSBwLmVudiB8fCB7fVxubGV0IGlzQ29sb3JTdXBwb3J0ZWQgPVxuXHQhKCEhZW52Lk5PX0NPTE9SIHx8IGFyZ3YuaW5jbHVkZXMoXCItLW5vLWNvbG9yXCIpKSAmJlxuXHQoISFlbnYuRk9SQ0VfQ09MT1IgfHwgYXJndi5pbmNsdWRlcyhcIi0tY29sb3JcIikgfHwgcC5wbGF0Zm9ybSA9PT0gXCJ3aW4zMlwiIHx8ICgocC5zdGRvdXQgfHwge30pLmlzVFRZICYmIGVudi5URVJNICE9PSBcImR1bWJcIikgfHwgISFlbnYuQ0kpXG5cbmxldCBmb3JtYXR0ZXIgPSAob3BlbiwgY2xvc2UsIHJlcGxhY2UgPSBvcGVuKSA9PlxuXHRpbnB1dCA9PiB7XG5cdFx0bGV0IHN0cmluZyA9IFwiXCIgKyBpbnB1dCwgaW5kZXggPSBzdHJpbmcuaW5kZXhPZihjbG9zZSwgb3Blbi5sZW5ndGgpXG5cdFx0cmV0dXJuIH5pbmRleCA/IG9wZW4gKyByZXBsYWNlQ2xvc2Uoc3RyaW5nLCBjbG9zZSwgcmVwbGFjZSwgaW5kZXgpICsgY2xvc2UgOiBvcGVuICsgc3RyaW5nICsgY2xvc2Vcblx0fVxuXG5sZXQgcmVwbGFjZUNsb3NlID0gKHN0cmluZywgY2xvc2UsIHJlcGxhY2UsIGluZGV4KSA9PiB7XG5cdGxldCByZXN1bHQgPSBcIlwiLCBjdXJzb3IgPSAwXG5cdGRvIHtcblx0XHRyZXN1bHQgKz0gc3RyaW5nLnN1YnN0cmluZyhjdXJzb3IsIGluZGV4KSArIHJlcGxhY2Vcblx0XHRjdXJzb3IgPSBpbmRleCArIGNsb3NlLmxlbmd0aFxuXHRcdGluZGV4ID0gc3RyaW5nLmluZGV4T2YoY2xvc2UsIGN1cnNvcilcblx0fSB3aGlsZSAofmluZGV4KVxuXHRyZXR1cm4gcmVzdWx0ICsgc3RyaW5nLnN1YnN0cmluZyhjdXJzb3IpXG59XG5cbmxldCBjcmVhdGVDb2xvcnMgPSAoZW5hYmxlZCA9IGlzQ29sb3JTdXBwb3J0ZWQpID0+IHtcblx0bGV0IGYgPSBlbmFibGVkID8gZm9ybWF0dGVyIDogKCkgPT4gU3RyaW5nXG5cdHJldHVybiB7XG5cdFx0aXNDb2xvclN1cHBvcnRlZDogZW5hYmxlZCxcblx0XHRyZXNldDogZihcIlxceDFiWzBtXCIsIFwiXFx4MWJbMG1cIiksXG5cdFx0Ym9sZDogZihcIlxceDFiWzFtXCIsIFwiXFx4MWJbMjJtXCIsIFwiXFx4MWJbMjJtXFx4MWJbMW1cIiksXG5cdFx0ZGltOiBmKFwiXFx4MWJbMm1cIiwgXCJcXHgxYlsyMm1cIiwgXCJcXHgxYlsyMm1cXHgxYlsybVwiKSxcblx0XHRpdGFsaWM6IGYoXCJcXHgxYlszbVwiLCBcIlxceDFiWzIzbVwiKSxcblx0XHR1bmRlcmxpbmU6IGYoXCJcXHgxYls0bVwiLCBcIlxceDFiWzI0bVwiKSxcblx0XHRpbnZlcnNlOiBmKFwiXFx4MWJbN21cIiwgXCJcXHgxYlsyN21cIiksXG5cdFx0aGlkZGVuOiBmKFwiXFx4MWJbOG1cIiwgXCJcXHgxYlsyOG1cIiksXG5cdFx0c3RyaWtldGhyb3VnaDogZihcIlxceDFiWzltXCIsIFwiXFx4MWJbMjltXCIpLFxuXG5cdFx0YmxhY2s6IGYoXCJcXHgxYlszMG1cIiwgXCJcXHgxYlszOW1cIiksXG5cdFx0cmVkOiBmKFwiXFx4MWJbMzFtXCIsIFwiXFx4MWJbMzltXCIpLFxuXHRcdGdyZWVuOiBmKFwiXFx4MWJbMzJtXCIsIFwiXFx4MWJbMzltXCIpLFxuXHRcdHllbGxvdzogZihcIlxceDFiWzMzbVwiLCBcIlxceDFiWzM5bVwiKSxcblx0XHRibHVlOiBmKFwiXFx4MWJbMzRtXCIsIFwiXFx4MWJbMzltXCIpLFxuXHRcdG1hZ2VudGE6IGYoXCJcXHgxYlszNW1cIiwgXCJcXHgxYlszOW1cIiksXG5cdFx0Y3lhbjogZihcIlxceDFiWzM2bVwiLCBcIlxceDFiWzM5bVwiKSxcblx0XHR3aGl0ZTogZihcIlxceDFiWzM3bVwiLCBcIlxceDFiWzM5bVwiKSxcblx0XHRncmF5OiBmKFwiXFx4MWJbOTBtXCIsIFwiXFx4MWJbMzltXCIpLFxuXG5cdFx0YmdCbGFjazogZihcIlxceDFiWzQwbVwiLCBcIlxceDFiWzQ5bVwiKSxcblx0XHRiZ1JlZDogZihcIlxceDFiWzQxbVwiLCBcIlxceDFiWzQ5bVwiKSxcblx0XHRiZ0dyZWVuOiBmKFwiXFx4MWJbNDJtXCIsIFwiXFx4MWJbNDltXCIpLFxuXHRcdGJnWWVsbG93OiBmKFwiXFx4MWJbNDNtXCIsIFwiXFx4MWJbNDltXCIpLFxuXHRcdGJnQmx1ZTogZihcIlxceDFiWzQ0bVwiLCBcIlxceDFiWzQ5bVwiKSxcblx0XHRiZ01hZ2VudGE6IGYoXCJcXHgxYls0NW1cIiwgXCJcXHgxYls0OW1cIiksXG5cdFx0YmdDeWFuOiBmKFwiXFx4MWJbNDZtXCIsIFwiXFx4MWJbNDltXCIpLFxuXHRcdGJnV2hpdGU6IGYoXCJcXHgxYls0N21cIiwgXCJcXHgxYls0OW1cIiksXG5cblx0XHRibGFja0JyaWdodDogZihcIlxceDFiWzkwbVwiLCBcIlxceDFiWzM5bVwiKSxcblx0XHRyZWRCcmlnaHQ6IGYoXCJcXHgxYls5MW1cIiwgXCJcXHgxYlszOW1cIiksXG5cdFx0Z3JlZW5CcmlnaHQ6IGYoXCJcXHgxYls5Mm1cIiwgXCJcXHgxYlszOW1cIiksXG5cdFx0eWVsbG93QnJpZ2h0OiBmKFwiXFx4MWJbOTNtXCIsIFwiXFx4MWJbMzltXCIpLFxuXHRcdGJsdWVCcmlnaHQ6IGYoXCJcXHgxYls5NG1cIiwgXCJcXHgxYlszOW1cIiksXG5cdFx0bWFnZW50YUJyaWdodDogZihcIlxceDFiWzk1bVwiLCBcIlxceDFiWzM5bVwiKSxcblx0XHRjeWFuQnJpZ2h0OiBmKFwiXFx4MWJbOTZtXCIsIFwiXFx4MWJbMzltXCIpLFxuXHRcdHdoaXRlQnJpZ2h0OiBmKFwiXFx4MWJbOTdtXCIsIFwiXFx4MWJbMzltXCIpLFxuXG5cdFx0YmdCbGFja0JyaWdodDogZihcIlxceDFiWzEwMG1cIiwgXCJcXHgxYls0OW1cIiksXG5cdFx0YmdSZWRCcmlnaHQ6IGYoXCJcXHgxYlsxMDFtXCIsIFwiXFx4MWJbNDltXCIpLFxuXHRcdGJnR3JlZW5CcmlnaHQ6IGYoXCJcXHgxYlsxMDJtXCIsIFwiXFx4MWJbNDltXCIpLFxuXHRcdGJnWWVsbG93QnJpZ2h0OiBmKFwiXFx4MWJbMTAzbVwiLCBcIlxceDFiWzQ5bVwiKSxcblx0XHRiZ0JsdWVCcmlnaHQ6IGYoXCJcXHgxYlsxMDRtXCIsIFwiXFx4MWJbNDltXCIpLFxuXHRcdGJnTWFnZW50YUJyaWdodDogZihcIlxceDFiWzEwNW1cIiwgXCJcXHgxYls0OW1cIiksXG5cdFx0YmdDeWFuQnJpZ2h0OiBmKFwiXFx4MWJbMTA2bVwiLCBcIlxceDFiWzQ5bVwiKSxcblx0XHRiZ1doaXRlQnJpZ2h0OiBmKFwiXFx4MWJbMTA3bVwiLCBcIlxceDFiWzQ5bVwiKSxcblx0fVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUNvbG9ycygpXG5tb2R1bGUuZXhwb3J0cy5jcmVhdGVDb2xvcnMgPSBjcmVhdGVDb2xvcnNcbiIsICIndXNlIHN0cmljdCc7XG5cbmNvbnN0IEVTQyA9ICdcXHgxQic7XG5jb25zdCBDU0kgPSBgJHtFU0N9W2A7XG5jb25zdCBiZWVwID0gJ1xcdTAwMDcnO1xuXG5jb25zdCBjdXJzb3IgPSB7XG4gIHRvKHgsIHkpIHtcbiAgICBpZiAoIXkpIHJldHVybiBgJHtDU0l9JHt4ICsgMX1HYDtcbiAgICByZXR1cm4gYCR7Q1NJfSR7eSArIDF9OyR7eCArIDF9SGA7XG4gIH0sXG4gIG1vdmUoeCwgeSkge1xuICAgIGxldCByZXQgPSAnJztcblxuICAgIGlmICh4IDwgMCkgcmV0ICs9IGAke0NTSX0key14fURgO1xuICAgIGVsc2UgaWYgKHggPiAwKSByZXQgKz0gYCR7Q1NJfSR7eH1DYDtcblxuICAgIGlmICh5IDwgMCkgcmV0ICs9IGAke0NTSX0key15fUFgO1xuICAgIGVsc2UgaWYgKHkgPiAwKSByZXQgKz0gYCR7Q1NJfSR7eX1CYDtcblxuICAgIHJldHVybiByZXQ7XG4gIH0sXG4gIHVwOiAoY291bnQgPSAxKSA9PiBgJHtDU0l9JHtjb3VudH1BYCxcbiAgZG93bjogKGNvdW50ID0gMSkgPT4gYCR7Q1NJfSR7Y291bnR9QmAsXG4gIGZvcndhcmQ6IChjb3VudCA9IDEpID0+IGAke0NTSX0ke2NvdW50fUNgLFxuICBiYWNrd2FyZDogKGNvdW50ID0gMSkgPT4gYCR7Q1NJfSR7Y291bnR9RGAsXG4gIG5leHRMaW5lOiAoY291bnQgPSAxKSA9PiBgJHtDU0l9RWAucmVwZWF0KGNvdW50KSxcbiAgcHJldkxpbmU6IChjb3VudCA9IDEpID0+IGAke0NTSX1GYC5yZXBlYXQoY291bnQpLFxuICBsZWZ0OiBgJHtDU0l9R2AsXG4gIGhpZGU6IGAke0NTSX0/MjVsYCxcbiAgc2hvdzogYCR7Q1NJfT8yNWhgLFxuICBzYXZlOiBgJHtFU0N9N2AsXG4gIHJlc3RvcmU6IGAke0VTQ304YFxufVxuXG5jb25zdCBzY3JvbGwgPSB7XG4gIHVwOiAoY291bnQgPSAxKSA9PiBgJHtDU0l9U2AucmVwZWF0KGNvdW50KSxcbiAgZG93bjogKGNvdW50ID0gMSkgPT4gYCR7Q1NJfVRgLnJlcGVhdChjb3VudClcbn1cblxuY29uc3QgZXJhc2UgPSB7XG4gIHNjcmVlbjogYCR7Q1NJfTJKYCxcbiAgdXA6IChjb3VudCA9IDEpID0+IGAke0NTSX0xSmAucmVwZWF0KGNvdW50KSxcbiAgZG93bjogKGNvdW50ID0gMSkgPT4gYCR7Q1NJfUpgLnJlcGVhdChjb3VudCksXG4gIGxpbmU6IGAke0NTSX0yS2AsXG4gIGxpbmVFbmQ6IGAke0NTSX1LYCxcbiAgbGluZVN0YXJ0OiBgJHtDU0l9MUtgLFxuICBsaW5lcyhjb3VudCkge1xuICAgIGxldCBjbGVhciA9ICcnO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKylcbiAgICAgIGNsZWFyICs9IHRoaXMubGluZSArIChpIDwgY291bnQgLSAxID8gY3Vyc29yLnVwKCkgOiAnJyk7XG4gICAgaWYgKGNvdW50KVxuICAgICAgY2xlYXIgKz0gY3Vyc29yLmxlZnQ7XG4gICAgcmV0dXJuIGNsZWFyO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0geyBjdXJzb3IsIHNjcm9sbCwgZXJhc2UsIGJlZXAgfTtcbiIsICJleHBvcnQgZnVuY3Rpb24gZmluZEN1cnNvcjxUIGV4dGVuZHMgeyBkaXNhYmxlZD86IGJvb2xlYW4gfT4oXG5cdGN1cnNvcjogbnVtYmVyLFxuXHRkZWx0YTogbnVtYmVyLFxuXHRvcHRpb25zOiBUW11cbikge1xuXHRjb25zdCBoYXNFbmFibGVkT3B0aW9ucyA9IG9wdGlvbnMuc29tZSgob3B0KSA9PiAhb3B0LmRpc2FibGVkKTtcblx0aWYgKCFoYXNFbmFibGVkT3B0aW9ucykge1xuXHRcdHJldHVybiBjdXJzb3I7XG5cdH1cblx0Y29uc3QgbmV3Q3Vyc29yID0gY3Vyc29yICsgZGVsdGE7XG5cdGNvbnN0IG1heEN1cnNvciA9IE1hdGgubWF4KG9wdGlvbnMubGVuZ3RoIC0gMSwgMCk7XG5cdGNvbnN0IGNsYW1wZWRDdXJzb3IgPSBuZXdDdXJzb3IgPCAwID8gbWF4Q3Vyc29yIDogbmV3Q3Vyc29yID4gbWF4Q3Vyc29yID8gMCA6IG5ld0N1cnNvcjtcblx0Y29uc3QgbmV3T3B0aW9uID0gb3B0aW9uc1tjbGFtcGVkQ3Vyc29yXTtcblx0aWYgKG5ld09wdGlvbi5kaXNhYmxlZCkge1xuXHRcdHJldHVybiBmaW5kQ3Vyc29yKGNsYW1wZWRDdXJzb3IsIGRlbHRhIDwgMCA/IC0xIDogMSwgb3B0aW9ucyk7XG5cdH1cblx0cmV0dXJuIGNsYW1wZWRDdXJzb3I7XG59XG4iLCAiLyogTUFJTiAqL1xuLy9VUkw6IGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5kcmVzb3JodXMvZ2V0LWVhc3QtYXNpYW4td2lkdGgvYmxvYi9tYWluL2xvb2t1cC5qc1xuLy9MSUNFTlNFOiBodHRwczovL2dpdGh1Yi5jb20vc2luZHJlc29yaHVzL2dldC1lYXN0LWFzaWFuLXdpZHRoL2Jsb2IvbWFpbi9saWNlbnNlXG4vL1RPRE86IFJlcGxhY2UgdGhlc2Ugd2l0aCBzb21lIHVuaWNvZGUgcHJvcGVydHkgY2xhc3NlcywgaWYgdGhlIG9uZXMgd2UgbmVlZCBleGlzdFxuY29uc3QgaXNBbWJpZ3VvdXMgPSAoeCkgPT4ge1xuICAgIHJldHVybiB4ID09PSAweEExIHx8IHggPT09IDB4QTQgfHwgeCA9PT0gMHhBNyB8fCB4ID09PSAweEE4IHx8IHggPT09IDB4QUEgfHwgeCA9PT0gMHhBRCB8fCB4ID09PSAweEFFIHx8IHggPj0gMHhCMCAmJiB4IDw9IDB4QjQgfHwgeCA+PSAweEI2ICYmIHggPD0gMHhCQSB8fCB4ID49IDB4QkMgJiYgeCA8PSAweEJGIHx8IHggPT09IDB4QzYgfHwgeCA9PT0gMHhEMCB8fCB4ID09PSAweEQ3IHx8IHggPT09IDB4RDggfHwgeCA+PSAweERFICYmIHggPD0gMHhFMSB8fCB4ID09PSAweEU2IHx8IHggPj0gMHhFOCAmJiB4IDw9IDB4RUEgfHwgeCA9PT0gMHhFQyB8fCB4ID09PSAweEVEIHx8IHggPT09IDB4RjAgfHwgeCA9PT0gMHhGMiB8fCB4ID09PSAweEYzIHx8IHggPj0gMHhGNyAmJiB4IDw9IDB4RkEgfHwgeCA9PT0gMHhGQyB8fCB4ID09PSAweEZFIHx8IHggPT09IDB4MTAxIHx8IHggPT09IDB4MTExIHx8IHggPT09IDB4MTEzIHx8IHggPT09IDB4MTFCIHx8IHggPT09IDB4MTI2IHx8IHggPT09IDB4MTI3IHx8IHggPT09IDB4MTJCIHx8IHggPj0gMHgxMzEgJiYgeCA8PSAweDEzMyB8fCB4ID09PSAweDEzOCB8fCB4ID49IDB4MTNGICYmIHggPD0gMHgxNDIgfHwgeCA9PT0gMHgxNDQgfHwgeCA+PSAweDE0OCAmJiB4IDw9IDB4MTRCIHx8IHggPT09IDB4MTREIHx8IHggPT09IDB4MTUyIHx8IHggPT09IDB4MTUzIHx8IHggPT09IDB4MTY2IHx8IHggPT09IDB4MTY3IHx8IHggPT09IDB4MTZCIHx8IHggPT09IDB4MUNFIHx8IHggPT09IDB4MUQwIHx8IHggPT09IDB4MUQyIHx8IHggPT09IDB4MUQ0IHx8IHggPT09IDB4MUQ2IHx8IHggPT09IDB4MUQ4IHx8IHggPT09IDB4MURBIHx8IHggPT09IDB4MURDIHx8IHggPT09IDB4MjUxIHx8IHggPT09IDB4MjYxIHx8IHggPT09IDB4MkM0IHx8IHggPT09IDB4MkM3IHx8IHggPj0gMHgyQzkgJiYgeCA8PSAweDJDQiB8fCB4ID09PSAweDJDRCB8fCB4ID09PSAweDJEMCB8fCB4ID49IDB4MkQ4ICYmIHggPD0gMHgyREIgfHwgeCA9PT0gMHgyREQgfHwgeCA9PT0gMHgyREYgfHwgeCA+PSAweDMwMCAmJiB4IDw9IDB4MzZGIHx8IHggPj0gMHgzOTEgJiYgeCA8PSAweDNBMSB8fCB4ID49IDB4M0EzICYmIHggPD0gMHgzQTkgfHwgeCA+PSAweDNCMSAmJiB4IDw9IDB4M0MxIHx8IHggPj0gMHgzQzMgJiYgeCA8PSAweDNDOSB8fCB4ID09PSAweDQwMSB8fCB4ID49IDB4NDEwICYmIHggPD0gMHg0NEYgfHwgeCA9PT0gMHg0NTEgfHwgeCA9PT0gMHgyMDEwIHx8IHggPj0gMHgyMDEzICYmIHggPD0gMHgyMDE2IHx8IHggPT09IDB4MjAxOCB8fCB4ID09PSAweDIwMTkgfHwgeCA9PT0gMHgyMDFDIHx8IHggPT09IDB4MjAxRCB8fCB4ID49IDB4MjAyMCAmJiB4IDw9IDB4MjAyMiB8fCB4ID49IDB4MjAyNCAmJiB4IDw9IDB4MjAyNyB8fCB4ID09PSAweDIwMzAgfHwgeCA9PT0gMHgyMDMyIHx8IHggPT09IDB4MjAzMyB8fCB4ID09PSAweDIwMzUgfHwgeCA9PT0gMHgyMDNCIHx8IHggPT09IDB4MjAzRSB8fCB4ID09PSAweDIwNzQgfHwgeCA9PT0gMHgyMDdGIHx8IHggPj0gMHgyMDgxICYmIHggPD0gMHgyMDg0IHx8IHggPT09IDB4MjBBQyB8fCB4ID09PSAweDIxMDMgfHwgeCA9PT0gMHgyMTA1IHx8IHggPT09IDB4MjEwOSB8fCB4ID09PSAweDIxMTMgfHwgeCA9PT0gMHgyMTE2IHx8IHggPT09IDB4MjEyMSB8fCB4ID09PSAweDIxMjIgfHwgeCA9PT0gMHgyMTI2IHx8IHggPT09IDB4MjEyQiB8fCB4ID09PSAweDIxNTMgfHwgeCA9PT0gMHgyMTU0IHx8IHggPj0gMHgyMTVCICYmIHggPD0gMHgyMTVFIHx8IHggPj0gMHgyMTYwICYmIHggPD0gMHgyMTZCIHx8IHggPj0gMHgyMTcwICYmIHggPD0gMHgyMTc5IHx8IHggPT09IDB4MjE4OSB8fCB4ID49IDB4MjE5MCAmJiB4IDw9IDB4MjE5OSB8fCB4ID09PSAweDIxQjggfHwgeCA9PT0gMHgyMUI5IHx8IHggPT09IDB4MjFEMiB8fCB4ID09PSAweDIxRDQgfHwgeCA9PT0gMHgyMUU3IHx8IHggPT09IDB4MjIwMCB8fCB4ID09PSAweDIyMDIgfHwgeCA9PT0gMHgyMjAzIHx8IHggPT09IDB4MjIwNyB8fCB4ID09PSAweDIyMDggfHwgeCA9PT0gMHgyMjBCIHx8IHggPT09IDB4MjIwRiB8fCB4ID09PSAweDIyMTEgfHwgeCA9PT0gMHgyMjE1IHx8IHggPT09IDB4MjIxQSB8fCB4ID49IDB4MjIxRCAmJiB4IDw9IDB4MjIyMCB8fCB4ID09PSAweDIyMjMgfHwgeCA9PT0gMHgyMjI1IHx8IHggPj0gMHgyMjI3ICYmIHggPD0gMHgyMjJDIHx8IHggPT09IDB4MjIyRSB8fCB4ID49IDB4MjIzNCAmJiB4IDw9IDB4MjIzNyB8fCB4ID09PSAweDIyM0MgfHwgeCA9PT0gMHgyMjNEIHx8IHggPT09IDB4MjI0OCB8fCB4ID09PSAweDIyNEMgfHwgeCA9PT0gMHgyMjUyIHx8IHggPT09IDB4MjI2MCB8fCB4ID09PSAweDIyNjEgfHwgeCA+PSAweDIyNjQgJiYgeCA8PSAweDIyNjcgfHwgeCA9PT0gMHgyMjZBIHx8IHggPT09IDB4MjI2QiB8fCB4ID09PSAweDIyNkUgfHwgeCA9PT0gMHgyMjZGIHx8IHggPT09IDB4MjI4MiB8fCB4ID09PSAweDIyODMgfHwgeCA9PT0gMHgyMjg2IHx8IHggPT09IDB4MjI4NyB8fCB4ID09PSAweDIyOTUgfHwgeCA9PT0gMHgyMjk5IHx8IHggPT09IDB4MjJBNSB8fCB4ID09PSAweDIyQkYgfHwgeCA9PT0gMHgyMzEyIHx8IHggPj0gMHgyNDYwICYmIHggPD0gMHgyNEU5IHx8IHggPj0gMHgyNEVCICYmIHggPD0gMHgyNTRCIHx8IHggPj0gMHgyNTUwICYmIHggPD0gMHgyNTczIHx8IHggPj0gMHgyNTgwICYmIHggPD0gMHgyNThGIHx8IHggPj0gMHgyNTkyICYmIHggPD0gMHgyNTk1IHx8IHggPT09IDB4MjVBMCB8fCB4ID09PSAweDI1QTEgfHwgeCA+PSAweDI1QTMgJiYgeCA8PSAweDI1QTkgfHwgeCA9PT0gMHgyNUIyIHx8IHggPT09IDB4MjVCMyB8fCB4ID09PSAweDI1QjYgfHwgeCA9PT0gMHgyNUI3IHx8IHggPT09IDB4MjVCQyB8fCB4ID09PSAweDI1QkQgfHwgeCA9PT0gMHgyNUMwIHx8IHggPT09IDB4MjVDMSB8fCB4ID49IDB4MjVDNiAmJiB4IDw9IDB4MjVDOCB8fCB4ID09PSAweDI1Q0IgfHwgeCA+PSAweDI1Q0UgJiYgeCA8PSAweDI1RDEgfHwgeCA+PSAweDI1RTIgJiYgeCA8PSAweDI1RTUgfHwgeCA9PT0gMHgyNUVGIHx8IHggPT09IDB4MjYwNSB8fCB4ID09PSAweDI2MDYgfHwgeCA9PT0gMHgyNjA5IHx8IHggPT09IDB4MjYwRSB8fCB4ID09PSAweDI2MEYgfHwgeCA9PT0gMHgyNjFDIHx8IHggPT09IDB4MjYxRSB8fCB4ID09PSAweDI2NDAgfHwgeCA9PT0gMHgyNjQyIHx8IHggPT09IDB4MjY2MCB8fCB4ID09PSAweDI2NjEgfHwgeCA+PSAweDI2NjMgJiYgeCA8PSAweDI2NjUgfHwgeCA+PSAweDI2NjcgJiYgeCA8PSAweDI2NkEgfHwgeCA9PT0gMHgyNjZDIHx8IHggPT09IDB4MjY2RCB8fCB4ID09PSAweDI2NkYgfHwgeCA9PT0gMHgyNjlFIHx8IHggPT09IDB4MjY5RiB8fCB4ID09PSAweDI2QkYgfHwgeCA+PSAweDI2QzYgJiYgeCA8PSAweDI2Q0QgfHwgeCA+PSAweDI2Q0YgJiYgeCA8PSAweDI2RDMgfHwgeCA+PSAweDI2RDUgJiYgeCA8PSAweDI2RTEgfHwgeCA9PT0gMHgyNkUzIHx8IHggPT09IDB4MjZFOCB8fCB4ID09PSAweDI2RTkgfHwgeCA+PSAweDI2RUIgJiYgeCA8PSAweDI2RjEgfHwgeCA9PT0gMHgyNkY0IHx8IHggPj0gMHgyNkY2ICYmIHggPD0gMHgyNkY5IHx8IHggPT09IDB4MjZGQiB8fCB4ID09PSAweDI2RkMgfHwgeCA9PT0gMHgyNkZFIHx8IHggPT09IDB4MjZGRiB8fCB4ID09PSAweDI3M0QgfHwgeCA+PSAweDI3NzYgJiYgeCA8PSAweDI3N0YgfHwgeCA+PSAweDJCNTYgJiYgeCA8PSAweDJCNTkgfHwgeCA+PSAweDMyNDggJiYgeCA8PSAweDMyNEYgfHwgeCA+PSAweEUwMDAgJiYgeCA8PSAweEY4RkYgfHwgeCA+PSAweEZFMDAgJiYgeCA8PSAweEZFMEYgfHwgeCA9PT0gMHhGRkZEIHx8IHggPj0gMHgxRjEwMCAmJiB4IDw9IDB4MUYxMEEgfHwgeCA+PSAweDFGMTEwICYmIHggPD0gMHgxRjEyRCB8fCB4ID49IDB4MUYxMzAgJiYgeCA8PSAweDFGMTY5IHx8IHggPj0gMHgxRjE3MCAmJiB4IDw9IDB4MUYxOEQgfHwgeCA9PT0gMHgxRjE4RiB8fCB4ID09PSAweDFGMTkwIHx8IHggPj0gMHgxRjE5QiAmJiB4IDw9IDB4MUYxQUMgfHwgeCA+PSAweEUwMTAwICYmIHggPD0gMHhFMDFFRiB8fCB4ID49IDB4RjAwMDAgJiYgeCA8PSAweEZGRkZEIHx8IHggPj0gMHgxMDAwMDAgJiYgeCA8PSAweDEwRkZGRDtcbn07XG5jb25zdCBpc0Z1bGxXaWR0aCA9ICh4KSA9PiB7XG4gICAgcmV0dXJuIHggPT09IDB4MzAwMCB8fCB4ID49IDB4RkYwMSAmJiB4IDw9IDB4RkY2MCB8fCB4ID49IDB4RkZFMCAmJiB4IDw9IDB4RkZFNjtcbn07XG5jb25zdCBpc1dpZGUgPSAoeCkgPT4ge1xuICAgIHJldHVybiB4ID49IDB4MTEwMCAmJiB4IDw9IDB4MTE1RiB8fCB4ID09PSAweDIzMUEgfHwgeCA9PT0gMHgyMzFCIHx8IHggPT09IDB4MjMyOSB8fCB4ID09PSAweDIzMkEgfHwgeCA+PSAweDIzRTkgJiYgeCA8PSAweDIzRUMgfHwgeCA9PT0gMHgyM0YwIHx8IHggPT09IDB4MjNGMyB8fCB4ID09PSAweDI1RkQgfHwgeCA9PT0gMHgyNUZFIHx8IHggPT09IDB4MjYxNCB8fCB4ID09PSAweDI2MTUgfHwgeCA+PSAweDI2NDggJiYgeCA8PSAweDI2NTMgfHwgeCA9PT0gMHgyNjdGIHx8IHggPT09IDB4MjY5MyB8fCB4ID09PSAweDI2QTEgfHwgeCA9PT0gMHgyNkFBIHx8IHggPT09IDB4MjZBQiB8fCB4ID09PSAweDI2QkQgfHwgeCA9PT0gMHgyNkJFIHx8IHggPT09IDB4MjZDNCB8fCB4ID09PSAweDI2QzUgfHwgeCA9PT0gMHgyNkNFIHx8IHggPT09IDB4MjZENCB8fCB4ID09PSAweDI2RUEgfHwgeCA9PT0gMHgyNkYyIHx8IHggPT09IDB4MjZGMyB8fCB4ID09PSAweDI2RjUgfHwgeCA9PT0gMHgyNkZBIHx8IHggPT09IDB4MjZGRCB8fCB4ID09PSAweDI3MDUgfHwgeCA9PT0gMHgyNzBBIHx8IHggPT09IDB4MjcwQiB8fCB4ID09PSAweDI3MjggfHwgeCA9PT0gMHgyNzRDIHx8IHggPT09IDB4Mjc0RSB8fCB4ID49IDB4Mjc1MyAmJiB4IDw9IDB4Mjc1NSB8fCB4ID09PSAweDI3NTcgfHwgeCA+PSAweDI3OTUgJiYgeCA8PSAweDI3OTcgfHwgeCA9PT0gMHgyN0IwIHx8IHggPT09IDB4MjdCRiB8fCB4ID09PSAweDJCMUIgfHwgeCA9PT0gMHgyQjFDIHx8IHggPT09IDB4MkI1MCB8fCB4ID09PSAweDJCNTUgfHwgeCA+PSAweDJFODAgJiYgeCA8PSAweDJFOTkgfHwgeCA+PSAweDJFOUIgJiYgeCA8PSAweDJFRjMgfHwgeCA+PSAweDJGMDAgJiYgeCA8PSAweDJGRDUgfHwgeCA+PSAweDJGRjAgJiYgeCA8PSAweDJGRkYgfHwgeCA+PSAweDMwMDEgJiYgeCA8PSAweDMwM0UgfHwgeCA+PSAweDMwNDEgJiYgeCA8PSAweDMwOTYgfHwgeCA+PSAweDMwOTkgJiYgeCA8PSAweDMwRkYgfHwgeCA+PSAweDMxMDUgJiYgeCA8PSAweDMxMkYgfHwgeCA+PSAweDMxMzEgJiYgeCA8PSAweDMxOEUgfHwgeCA+PSAweDMxOTAgJiYgeCA8PSAweDMxRTMgfHwgeCA+PSAweDMxRUYgJiYgeCA8PSAweDMyMUUgfHwgeCA+PSAweDMyMjAgJiYgeCA8PSAweDMyNDcgfHwgeCA+PSAweDMyNTAgJiYgeCA8PSAweDREQkYgfHwgeCA+PSAweDRFMDAgJiYgeCA8PSAweEE0OEMgfHwgeCA+PSAweEE0OTAgJiYgeCA8PSAweEE0QzYgfHwgeCA+PSAweEE5NjAgJiYgeCA8PSAweEE5N0MgfHwgeCA+PSAweEFDMDAgJiYgeCA8PSAweEQ3QTMgfHwgeCA+PSAweEY5MDAgJiYgeCA8PSAweEZBRkYgfHwgeCA+PSAweEZFMTAgJiYgeCA8PSAweEZFMTkgfHwgeCA+PSAweEZFMzAgJiYgeCA8PSAweEZFNTIgfHwgeCA+PSAweEZFNTQgJiYgeCA8PSAweEZFNjYgfHwgeCA+PSAweEZFNjggJiYgeCA8PSAweEZFNkIgfHwgeCA+PSAweDE2RkUwICYmIHggPD0gMHgxNkZFNCB8fCB4ID09PSAweDE2RkYwIHx8IHggPT09IDB4MTZGRjEgfHwgeCA+PSAweDE3MDAwICYmIHggPD0gMHgxODdGNyB8fCB4ID49IDB4MTg4MDAgJiYgeCA8PSAweDE4Q0Q1IHx8IHggPj0gMHgxOEQwMCAmJiB4IDw9IDB4MThEMDggfHwgeCA+PSAweDFBRkYwICYmIHggPD0gMHgxQUZGMyB8fCB4ID49IDB4MUFGRjUgJiYgeCA8PSAweDFBRkZCIHx8IHggPT09IDB4MUFGRkQgfHwgeCA9PT0gMHgxQUZGRSB8fCB4ID49IDB4MUIwMDAgJiYgeCA8PSAweDFCMTIyIHx8IHggPT09IDB4MUIxMzIgfHwgeCA+PSAweDFCMTUwICYmIHggPD0gMHgxQjE1MiB8fCB4ID09PSAweDFCMTU1IHx8IHggPj0gMHgxQjE2NCAmJiB4IDw9IDB4MUIxNjcgfHwgeCA+PSAweDFCMTcwICYmIHggPD0gMHgxQjJGQiB8fCB4ID09PSAweDFGMDA0IHx8IHggPT09IDB4MUYwQ0YgfHwgeCA9PT0gMHgxRjE4RSB8fCB4ID49IDB4MUYxOTEgJiYgeCA8PSAweDFGMTlBIHx8IHggPj0gMHgxRjIwMCAmJiB4IDw9IDB4MUYyMDIgfHwgeCA+PSAweDFGMjEwICYmIHggPD0gMHgxRjIzQiB8fCB4ID49IDB4MUYyNDAgJiYgeCA8PSAweDFGMjQ4IHx8IHggPT09IDB4MUYyNTAgfHwgeCA9PT0gMHgxRjI1MSB8fCB4ID49IDB4MUYyNjAgJiYgeCA8PSAweDFGMjY1IHx8IHggPj0gMHgxRjMwMCAmJiB4IDw9IDB4MUYzMjAgfHwgeCA+PSAweDFGMzJEICYmIHggPD0gMHgxRjMzNSB8fCB4ID49IDB4MUYzMzcgJiYgeCA8PSAweDFGMzdDIHx8IHggPj0gMHgxRjM3RSAmJiB4IDw9IDB4MUYzOTMgfHwgeCA+PSAweDFGM0EwICYmIHggPD0gMHgxRjNDQSB8fCB4ID49IDB4MUYzQ0YgJiYgeCA8PSAweDFGM0QzIHx8IHggPj0gMHgxRjNFMCAmJiB4IDw9IDB4MUYzRjAgfHwgeCA9PT0gMHgxRjNGNCB8fCB4ID49IDB4MUYzRjggJiYgeCA8PSAweDFGNDNFIHx8IHggPT09IDB4MUY0NDAgfHwgeCA+PSAweDFGNDQyICYmIHggPD0gMHgxRjRGQyB8fCB4ID49IDB4MUY0RkYgJiYgeCA8PSAweDFGNTNEIHx8IHggPj0gMHgxRjU0QiAmJiB4IDw9IDB4MUY1NEUgfHwgeCA+PSAweDFGNTUwICYmIHggPD0gMHgxRjU2NyB8fCB4ID09PSAweDFGNTdBIHx8IHggPT09IDB4MUY1OTUgfHwgeCA9PT0gMHgxRjU5NiB8fCB4ID09PSAweDFGNUE0IHx8IHggPj0gMHgxRjVGQiAmJiB4IDw9IDB4MUY2NEYgfHwgeCA+PSAweDFGNjgwICYmIHggPD0gMHgxRjZDNSB8fCB4ID09PSAweDFGNkNDIHx8IHggPj0gMHgxRjZEMCAmJiB4IDw9IDB4MUY2RDIgfHwgeCA+PSAweDFGNkQ1ICYmIHggPD0gMHgxRjZENyB8fCB4ID49IDB4MUY2REMgJiYgeCA8PSAweDFGNkRGIHx8IHggPT09IDB4MUY2RUIgfHwgeCA9PT0gMHgxRjZFQyB8fCB4ID49IDB4MUY2RjQgJiYgeCA8PSAweDFGNkZDIHx8IHggPj0gMHgxRjdFMCAmJiB4IDw9IDB4MUY3RUIgfHwgeCA9PT0gMHgxRjdGMCB8fCB4ID49IDB4MUY5MEMgJiYgeCA8PSAweDFGOTNBIHx8IHggPj0gMHgxRjkzQyAmJiB4IDw9IDB4MUY5NDUgfHwgeCA+PSAweDFGOTQ3ICYmIHggPD0gMHgxRjlGRiB8fCB4ID49IDB4MUZBNzAgJiYgeCA8PSAweDFGQTdDIHx8IHggPj0gMHgxRkE4MCAmJiB4IDw9IDB4MUZBODggfHwgeCA+PSAweDFGQTkwICYmIHggPD0gMHgxRkFCRCB8fCB4ID49IDB4MUZBQkYgJiYgeCA8PSAweDFGQUM1IHx8IHggPj0gMHgxRkFDRSAmJiB4IDw9IDB4MUZBREIgfHwgeCA+PSAweDFGQUUwICYmIHggPD0gMHgxRkFFOCB8fCB4ID49IDB4MUZBRjAgJiYgeCA8PSAweDFGQUY4IHx8IHggPj0gMHgyMDAwMCAmJiB4IDw9IDB4MkZGRkQgfHwgeCA+PSAweDMwMDAwICYmIHggPD0gMHgzRkZGRDtcbn07XG4vKiBFWFBPUlQgKi9cbmV4cG9ydCB7IGlzQW1iaWd1b3VzLCBpc0Z1bGxXaWR0aCwgaXNXaWRlIH07XG4iLCAiLyogSU1QT1JUICovXG5pbXBvcnQgeyBpc0FtYmlndW91cywgaXNGdWxsV2lkdGgsIGlzV2lkZSB9IGZyb20gJy4vdXRpbHMuanMnO1xuLyogSEVMUEVSUyAqL1xuY29uc3QgQU5TSV9SRSA9IC9bXFx1MDAxYlxcdTAwOWJdW1soKSM7P10qKD86WzAtOV17MSw0fSg/OjtbMC05XXswLDR9KSopP1swLTlBLU9SWmNmLW5xcnk9PjxdL3k7XG5jb25zdCBDT05UUk9MX1JFID0gL1tcXHgwMC1cXHgwOFxceDBBLVxceDFGXFx4N0YtXFx4OUZdezEsMTAwMH0veTtcbmNvbnN0IFRBQl9SRSA9IC9cXHR7MSwxMDAwfS95O1xuY29uc3QgRU1PSklfUkUgPSAvW1xcdXsxRjFFNn0tXFx1ezFGMUZGfV17Mn18XFx1ezFGM0Y0fVtcXHV7RTAwNjF9LVxcdXtFMDA3QX1dezJ9W1xcdXtFMDAzMH0tXFx1e0UwMDM5fVxcdXtFMDA2MX0tXFx1e0UwMDdBfV17MSwzfVxcdXtFMDA3Rn18KD86XFxwe0Vtb2ppfVxcdUZFMEZcXHUyMEUzP3xcXHB7RW1vamlfTW9kaWZpZXJfQmFzZX1cXHB7RW1vamlfTW9kaWZpZXJ9P3xcXHB7RW1vamlfUHJlc2VudGF0aW9ufSkoPzpcXHUyMDBEKD86XFxwe0Vtb2ppX01vZGlmaWVyX0Jhc2V9XFxwe0Vtb2ppX01vZGlmaWVyfT98XFxwe0Vtb2ppX1ByZXNlbnRhdGlvbn18XFxwe0Vtb2ppfVxcdUZFMEZcXHUyMEUzPykpKi95dTtcbmNvbnN0IExBVElOX1JFID0gLyg/OltcXHgyMC1cXHg3RVxceEEwLVxceEZGXSg/IVxcdUZFMEYpKXsxLDEwMDB9L3k7XG5jb25zdCBNT0RJRklFUl9SRSA9IC9cXHB7TX0rL2d1O1xuY29uc3QgTk9fVFJVTkNBVElPTiA9IHsgbGltaXQ6IEluZmluaXR5LCBlbGxpcHNpczogJycgfTtcbi8qIE1BSU4gKi9cbi8vVE9ETzogT3B0aW1pemUgbWF0Y2hpbmcgbm9uLWxhdGluIGxldHRlcnNcbmNvbnN0IGdldFN0cmluZ1RydW5jYXRlZFdpZHRoID0gKGlucHV0LCB0cnVuY2F0aW9uT3B0aW9ucyA9IHt9LCB3aWR0aE9wdGlvbnMgPSB7fSkgPT4ge1xuICAgIC8qIENPTlNUQU5UUyAqL1xuICAgIGNvbnN0IExJTUlUID0gdHJ1bmNhdGlvbk9wdGlvbnMubGltaXQgPz8gSW5maW5pdHk7XG4gICAgY29uc3QgRUxMSVBTSVMgPSB0cnVuY2F0aW9uT3B0aW9ucy5lbGxpcHNpcyA/PyAnJztcbiAgICBjb25zdCBFTExJUFNJU19XSURUSCA9IHRydW5jYXRpb25PcHRpb25zPy5lbGxpcHNpc1dpZHRoID8/IChFTExJUFNJUyA/IGdldFN0cmluZ1RydW5jYXRlZFdpZHRoKEVMTElQU0lTLCBOT19UUlVOQ0FUSU9OLCB3aWR0aE9wdGlvbnMpLndpZHRoIDogMCk7XG4gICAgY29uc3QgQU5TSV9XSURUSCA9IHdpZHRoT3B0aW9ucy5hbnNpV2lkdGggPz8gMDtcbiAgICBjb25zdCBDT05UUk9MX1dJRFRIID0gd2lkdGhPcHRpb25zLmNvbnRyb2xXaWR0aCA/PyAwO1xuICAgIGNvbnN0IFRBQl9XSURUSCA9IHdpZHRoT3B0aW9ucy50YWJXaWR0aCA/PyA4O1xuICAgIGNvbnN0IEFNQklHVU9VU19XSURUSCA9IHdpZHRoT3B0aW9ucy5hbWJpZ3VvdXNXaWR0aCA/PyAxO1xuICAgIGNvbnN0IEVNT0pJX1dJRFRIID0gd2lkdGhPcHRpb25zLmVtb2ppV2lkdGggPz8gMjtcbiAgICBjb25zdCBGVUxMX1dJRFRIX1dJRFRIID0gd2lkdGhPcHRpb25zLmZ1bGxXaWR0aFdpZHRoID8/IDI7XG4gICAgY29uc3QgUkVHVUxBUl9XSURUSCA9IHdpZHRoT3B0aW9ucy5yZWd1bGFyV2lkdGggPz8gMTtcbiAgICBjb25zdCBXSURFX1dJRFRIID0gd2lkdGhPcHRpb25zLndpZGVXaWR0aCA/PyAyO1xuICAgIC8qIFNUQVRFICovXG4gICAgbGV0IGluZGV4UHJldiA9IDA7XG4gICAgbGV0IGluZGV4ID0gMDtcbiAgICBsZXQgbGVuZ3RoID0gaW5wdXQubGVuZ3RoO1xuICAgIGxldCBsZW5ndGhFeHRyYSA9IDA7XG4gICAgbGV0IHRydW5jYXRpb25FbmFibGVkID0gZmFsc2U7XG4gICAgbGV0IHRydW5jYXRpb25JbmRleCA9IGxlbmd0aDtcbiAgICBsZXQgdHJ1bmNhdGlvbkxpbWl0ID0gTWF0aC5tYXgoMCwgTElNSVQgLSBFTExJUFNJU19XSURUSCk7XG4gICAgbGV0IHVubWF0Y2hlZFN0YXJ0ID0gMDtcbiAgICBsZXQgdW5tYXRjaGVkRW5kID0gMDtcbiAgICBsZXQgd2lkdGggPSAwO1xuICAgIGxldCB3aWR0aEV4dHJhID0gMDtcbiAgICAvKiBQQVJTRSBMT09QICovXG4gICAgb3V0ZXI6IHdoaWxlICh0cnVlKSB7XG4gICAgICAgIC8qIFVOTUFUQ0hFRCAqL1xuICAgICAgICBpZiAoKHVubWF0Y2hlZEVuZCA+IHVubWF0Y2hlZFN0YXJ0KSB8fCAoaW5kZXggPj0gbGVuZ3RoICYmIGluZGV4ID4gaW5kZXhQcmV2KSkge1xuICAgICAgICAgICAgY29uc3QgdW5tYXRjaGVkID0gaW5wdXQuc2xpY2UodW5tYXRjaGVkU3RhcnQsIHVubWF0Y2hlZEVuZCkgfHwgaW5wdXQuc2xpY2UoaW5kZXhQcmV2LCBpbmRleCk7XG4gICAgICAgICAgICBsZW5ndGhFeHRyYSA9IDA7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNoYXIgb2YgdW5tYXRjaGVkLnJlcGxhY2VBbGwoTU9ESUZJRVJfUkUsICcnKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvZGVQb2ludCA9IGNoYXIuY29kZVBvaW50QXQoMCkgfHwgMDtcbiAgICAgICAgICAgICAgICBpZiAoaXNGdWxsV2lkdGgoY29kZVBvaW50KSkge1xuICAgICAgICAgICAgICAgICAgICB3aWR0aEV4dHJhID0gRlVMTF9XSURUSF9XSURUSDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoaXNXaWRlKGNvZGVQb2ludCkpIHtcbiAgICAgICAgICAgICAgICAgICAgd2lkdGhFeHRyYSA9IFdJREVfV0lEVEg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKEFNQklHVU9VU19XSURUSCAhPT0gUkVHVUxBUl9XSURUSCAmJiBpc0FtYmlndW91cyhjb2RlUG9pbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHdpZHRoRXh0cmEgPSBBTUJJR1VPVVNfV0lEVEg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB3aWR0aEV4dHJhID0gUkVHVUxBUl9XSURUSDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCh3aWR0aCArIHdpZHRoRXh0cmEpID4gdHJ1bmNhdGlvbkxpbWl0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRydW5jYXRpb25JbmRleCA9IE1hdGgubWluKHRydW5jYXRpb25JbmRleCwgTWF0aC5tYXgodW5tYXRjaGVkU3RhcnQsIGluZGV4UHJldikgKyBsZW5ndGhFeHRyYSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICgod2lkdGggKyB3aWR0aEV4dHJhKSA+IExJTUlUKSB7XG4gICAgICAgICAgICAgICAgICAgIHRydW5jYXRpb25FbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWsgb3V0ZXI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxlbmd0aEV4dHJhICs9IGNoYXIubGVuZ3RoO1xuICAgICAgICAgICAgICAgIHdpZHRoICs9IHdpZHRoRXh0cmE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB1bm1hdGNoZWRTdGFydCA9IHVubWF0Y2hlZEVuZCA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgLyogRVhJVElORyAqL1xuICAgICAgICBpZiAoaW5kZXggPj0gbGVuZ3RoKVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIC8qIExBVElOICovXG4gICAgICAgIExBVElOX1JFLmxhc3RJbmRleCA9IGluZGV4O1xuICAgICAgICBpZiAoTEFUSU5fUkUudGVzdChpbnB1dCkpIHtcbiAgICAgICAgICAgIGxlbmd0aEV4dHJhID0gTEFUSU5fUkUubGFzdEluZGV4IC0gaW5kZXg7XG4gICAgICAgICAgICB3aWR0aEV4dHJhID0gbGVuZ3RoRXh0cmEgKiBSRUdVTEFSX1dJRFRIO1xuICAgICAgICAgICAgaWYgKCh3aWR0aCArIHdpZHRoRXh0cmEpID4gdHJ1bmNhdGlvbkxpbWl0KSB7XG4gICAgICAgICAgICAgICAgdHJ1bmNhdGlvbkluZGV4ID0gTWF0aC5taW4odHJ1bmNhdGlvbkluZGV4LCBpbmRleCArIE1hdGguZmxvb3IoKHRydW5jYXRpb25MaW1pdCAtIHdpZHRoKSAvIFJFR1VMQVJfV0lEVEgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgod2lkdGggKyB3aWR0aEV4dHJhKSA+IExJTUlUKSB7XG4gICAgICAgICAgICAgICAgdHJ1bmNhdGlvbkVuYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd2lkdGggKz0gd2lkdGhFeHRyYTtcbiAgICAgICAgICAgIHVubWF0Y2hlZFN0YXJ0ID0gaW5kZXhQcmV2O1xuICAgICAgICAgICAgdW5tYXRjaGVkRW5kID0gaW5kZXg7XG4gICAgICAgICAgICBpbmRleCA9IGluZGV4UHJldiA9IExBVElOX1JFLmxhc3RJbmRleDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIC8qIEFOU0kgKi9cbiAgICAgICAgQU5TSV9SRS5sYXN0SW5kZXggPSBpbmRleDtcbiAgICAgICAgaWYgKEFOU0lfUkUudGVzdChpbnB1dCkpIHtcbiAgICAgICAgICAgIGlmICgod2lkdGggKyBBTlNJX1dJRFRIKSA+IHRydW5jYXRpb25MaW1pdCkge1xuICAgICAgICAgICAgICAgIHRydW5jYXRpb25JbmRleCA9IE1hdGgubWluKHRydW5jYXRpb25JbmRleCwgaW5kZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCh3aWR0aCArIEFOU0lfV0lEVEgpID4gTElNSVQpIHtcbiAgICAgICAgICAgICAgICB0cnVuY2F0aW9uRW5hYmxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB3aWR0aCArPSBBTlNJX1dJRFRIO1xuICAgICAgICAgICAgdW5tYXRjaGVkU3RhcnQgPSBpbmRleFByZXY7XG4gICAgICAgICAgICB1bm1hdGNoZWRFbmQgPSBpbmRleDtcbiAgICAgICAgICAgIGluZGV4ID0gaW5kZXhQcmV2ID0gQU5TSV9SRS5sYXN0SW5kZXg7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICAvKiBDT05UUk9MICovXG4gICAgICAgIENPTlRST0xfUkUubGFzdEluZGV4ID0gaW5kZXg7XG4gICAgICAgIGlmIChDT05UUk9MX1JFLnRlc3QoaW5wdXQpKSB7XG4gICAgICAgICAgICBsZW5ndGhFeHRyYSA9IENPTlRST0xfUkUubGFzdEluZGV4IC0gaW5kZXg7XG4gICAgICAgICAgICB3aWR0aEV4dHJhID0gbGVuZ3RoRXh0cmEgKiBDT05UUk9MX1dJRFRIO1xuICAgICAgICAgICAgaWYgKCh3aWR0aCArIHdpZHRoRXh0cmEpID4gdHJ1bmNhdGlvbkxpbWl0KSB7XG4gICAgICAgICAgICAgICAgdHJ1bmNhdGlvbkluZGV4ID0gTWF0aC5taW4odHJ1bmNhdGlvbkluZGV4LCBpbmRleCArIE1hdGguZmxvb3IoKHRydW5jYXRpb25MaW1pdCAtIHdpZHRoKSAvIENPTlRST0xfV0lEVEgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgod2lkdGggKyB3aWR0aEV4dHJhKSA+IExJTUlUKSB7XG4gICAgICAgICAgICAgICAgdHJ1bmNhdGlvbkVuYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd2lkdGggKz0gd2lkdGhFeHRyYTtcbiAgICAgICAgICAgIHVubWF0Y2hlZFN0YXJ0ID0gaW5kZXhQcmV2O1xuICAgICAgICAgICAgdW5tYXRjaGVkRW5kID0gaW5kZXg7XG4gICAgICAgICAgICBpbmRleCA9IGluZGV4UHJldiA9IENPTlRST0xfUkUubGFzdEluZGV4O1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgLyogVEFCICovXG4gICAgICAgIFRBQl9SRS5sYXN0SW5kZXggPSBpbmRleDtcbiAgICAgICAgaWYgKFRBQl9SRS50ZXN0KGlucHV0KSkge1xuICAgICAgICAgICAgbGVuZ3RoRXh0cmEgPSBUQUJfUkUubGFzdEluZGV4IC0gaW5kZXg7XG4gICAgICAgICAgICB3aWR0aEV4dHJhID0gbGVuZ3RoRXh0cmEgKiBUQUJfV0lEVEg7XG4gICAgICAgICAgICBpZiAoKHdpZHRoICsgd2lkdGhFeHRyYSkgPiB0cnVuY2F0aW9uTGltaXQpIHtcbiAgICAgICAgICAgICAgICB0cnVuY2F0aW9uSW5kZXggPSBNYXRoLm1pbih0cnVuY2F0aW9uSW5kZXgsIGluZGV4ICsgTWF0aC5mbG9vcigodHJ1bmNhdGlvbkxpbWl0IC0gd2lkdGgpIC8gVEFCX1dJRFRIKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoKHdpZHRoICsgd2lkdGhFeHRyYSkgPiBMSU1JVCkge1xuICAgICAgICAgICAgICAgIHRydW5jYXRpb25FbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHdpZHRoICs9IHdpZHRoRXh0cmE7XG4gICAgICAgICAgICB1bm1hdGNoZWRTdGFydCA9IGluZGV4UHJldjtcbiAgICAgICAgICAgIHVubWF0Y2hlZEVuZCA9IGluZGV4O1xuICAgICAgICAgICAgaW5kZXggPSBpbmRleFByZXYgPSBUQUJfUkUubGFzdEluZGV4O1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgLyogRU1PSkkgKi9cbiAgICAgICAgRU1PSklfUkUubGFzdEluZGV4ID0gaW5kZXg7XG4gICAgICAgIGlmIChFTU9KSV9SRS50ZXN0KGlucHV0KSkge1xuICAgICAgICAgICAgaWYgKCh3aWR0aCArIEVNT0pJX1dJRFRIKSA+IHRydW5jYXRpb25MaW1pdCkge1xuICAgICAgICAgICAgICAgIHRydW5jYXRpb25JbmRleCA9IE1hdGgubWluKHRydW5jYXRpb25JbmRleCwgaW5kZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCh3aWR0aCArIEVNT0pJX1dJRFRIKSA+IExJTUlUKSB7XG4gICAgICAgICAgICAgICAgdHJ1bmNhdGlvbkVuYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd2lkdGggKz0gRU1PSklfV0lEVEg7XG4gICAgICAgICAgICB1bm1hdGNoZWRTdGFydCA9IGluZGV4UHJldjtcbiAgICAgICAgICAgIHVubWF0Y2hlZEVuZCA9IGluZGV4O1xuICAgICAgICAgICAgaW5kZXggPSBpbmRleFByZXYgPSBFTU9KSV9SRS5sYXN0SW5kZXg7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICAvKiBVTk1BVENIRUQgSU5ERVggKi9cbiAgICAgICAgaW5kZXggKz0gMTtcbiAgICB9XG4gICAgLyogUkVUVVJOICovXG4gICAgcmV0dXJuIHtcbiAgICAgICAgd2lkdGg6IHRydW5jYXRpb25FbmFibGVkID8gdHJ1bmNhdGlvbkxpbWl0IDogd2lkdGgsXG4gICAgICAgIGluZGV4OiB0cnVuY2F0aW9uRW5hYmxlZCA/IHRydW5jYXRpb25JbmRleCA6IGxlbmd0aCxcbiAgICAgICAgdHJ1bmNhdGVkOiB0cnVuY2F0aW9uRW5hYmxlZCxcbiAgICAgICAgZWxsaXBzZWQ6IHRydW5jYXRpb25FbmFibGVkICYmIExJTUlUID49IEVMTElQU0lTX1dJRFRIXG4gICAgfTtcbn07XG4vKiBFWFBPUlQgKi9cbmV4cG9ydCBkZWZhdWx0IGdldFN0cmluZ1RydW5jYXRlZFdpZHRoO1xuIiwgIi8qIElNUE9SVCAqL1xuaW1wb3J0IGZhc3RTdHJpbmdUcnVuY2F0ZWRXaWR0aCBmcm9tICdmYXN0LXN0cmluZy10cnVuY2F0ZWQtd2lkdGgnO1xuLyogSEVMUEVSUyAqL1xuY29uc3QgTk9fVFJVTkNBVElPTiA9IHtcbiAgICBsaW1pdDogSW5maW5pdHksXG4gICAgZWxsaXBzaXM6ICcnLFxuICAgIGVsbGlwc2lzV2lkdGg6IDAsXG59O1xuLyogTUFJTiAqL1xuY29uc3QgZmFzdFN0cmluZ1dpZHRoID0gKGlucHV0LCBvcHRpb25zID0ge30pID0+IHtcbiAgICByZXR1cm4gZmFzdFN0cmluZ1RydW5jYXRlZFdpZHRoKGlucHV0LCBOT19UUlVOQ0FUSU9OLCBvcHRpb25zKS53aWR0aDtcbn07XG4vKiBFWFBPUlQgKi9cbmV4cG9ydCBkZWZhdWx0IGZhc3RTdHJpbmdXaWR0aDtcbiIsICJpbXBvcnQgc3RyaW5nV2lkdGggZnJvbSAnZmFzdC1zdHJpbmctd2lkdGgnO1xuY29uc3QgRVNDID0gJ1xceDFCJztcbmNvbnN0IENTSSA9ICdcXHg5Qic7XG5jb25zdCBFTkRfQ09ERSA9IDM5O1xuY29uc3QgQU5TSV9FU0NBUEVfQkVMTCA9ICdcXHUwMDA3JztcbmNvbnN0IEFOU0lfQ1NJID0gJ1snO1xuY29uc3QgQU5TSV9PU0MgPSAnXSc7XG5jb25zdCBBTlNJX1NHUl9URVJNSU5BVE9SID0gJ20nO1xuY29uc3QgQU5TSV9FU0NBUEVfTElOSyA9IGAke0FOU0lfT1NDfTg7O2A7XG5jb25zdCBHUk9VUF9SRUdFWCA9IG5ldyBSZWdFeHAoYCg/OlxcXFwke0FOU0lfQ1NJfSg/PGNvZGU+XFxcXGQrKW18XFxcXCR7QU5TSV9FU0NBUEVfTElOS30oPzx1cmk+LiopJHtBTlNJX0VTQ0FQRV9CRUxMfSlgLCAneScpO1xuY29uc3QgZ2V0Q2xvc2luZ0NvZGUgPSAob3BlbmluZ0NvZGUpID0+IHtcbiAgICBpZiAob3BlbmluZ0NvZGUgPj0gMzAgJiYgb3BlbmluZ0NvZGUgPD0gMzcpXG4gICAgICAgIHJldHVybiAzOTtcbiAgICBpZiAob3BlbmluZ0NvZGUgPj0gOTAgJiYgb3BlbmluZ0NvZGUgPD0gOTcpXG4gICAgICAgIHJldHVybiAzOTtcbiAgICBpZiAob3BlbmluZ0NvZGUgPj0gNDAgJiYgb3BlbmluZ0NvZGUgPD0gNDcpXG4gICAgICAgIHJldHVybiA0OTtcbiAgICBpZiAob3BlbmluZ0NvZGUgPj0gMTAwICYmIG9wZW5pbmdDb2RlIDw9IDEwNylcbiAgICAgICAgcmV0dXJuIDQ5O1xuICAgIGlmIChvcGVuaW5nQ29kZSA9PT0gMSB8fCBvcGVuaW5nQ29kZSA9PT0gMilcbiAgICAgICAgcmV0dXJuIDIyO1xuICAgIGlmIChvcGVuaW5nQ29kZSA9PT0gMylcbiAgICAgICAgcmV0dXJuIDIzO1xuICAgIGlmIChvcGVuaW5nQ29kZSA9PT0gNClcbiAgICAgICAgcmV0dXJuIDI0O1xuICAgIGlmIChvcGVuaW5nQ29kZSA9PT0gNylcbiAgICAgICAgcmV0dXJuIDI3O1xuICAgIGlmIChvcGVuaW5nQ29kZSA9PT0gOClcbiAgICAgICAgcmV0dXJuIDI4O1xuICAgIGlmIChvcGVuaW5nQ29kZSA9PT0gOSlcbiAgICAgICAgcmV0dXJuIDI5O1xuICAgIGlmIChvcGVuaW5nQ29kZSA9PT0gMClcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG5jb25zdCB3cmFwQW5zaUNvZGUgPSAoY29kZSkgPT4gYCR7RVNDfSR7QU5TSV9DU0l9JHtjb2RlfSR7QU5TSV9TR1JfVEVSTUlOQVRPUn1gO1xuY29uc3Qgd3JhcEFuc2lIeXBlcmxpbmsgPSAodXJsKSA9PiBgJHtFU0N9JHtBTlNJX0VTQ0FQRV9MSU5LfSR7dXJsfSR7QU5TSV9FU0NBUEVfQkVMTH1gO1xuY29uc3Qgd29yZExlbmd0aHMgPSAod29yZHMpID0+IHdvcmRzLm1hcCgoY2hhcmFjdGVyKSA9PiBzdHJpbmdXaWR0aChjaGFyYWN0ZXIpKTtcbmNvbnN0IHdyYXBXb3JkID0gKHJvd3MsIHdvcmQsIGNvbHVtbnMpID0+IHtcbiAgICBjb25zdCBjaGFyYWN0ZXJzID0gd29yZFtTeW1ib2wuaXRlcmF0b3JdKCk7XG4gICAgbGV0IGlzSW5zaWRlRXNjYXBlID0gZmFsc2U7XG4gICAgbGV0IGlzSW5zaWRlTGlua0VzY2FwZSA9IGZhbHNlO1xuICAgIGxldCBsYXN0Um93ID0gcm93cy5hdCgtMSk7XG4gICAgbGV0IHZpc2libGUgPSBsYXN0Um93ID09PSB1bmRlZmluZWQgPyAwIDogc3RyaW5nV2lkdGgobGFzdFJvdyk7XG4gICAgbGV0IGN1cnJlbnRDaGFyYWN0ZXIgPSBjaGFyYWN0ZXJzLm5leHQoKTtcbiAgICBsZXQgbmV4dENoYXJhY3RlciA9IGNoYXJhY3RlcnMubmV4dCgpO1xuICAgIGxldCByYXdDaGFyYWN0ZXJJbmRleCA9IDA7XG4gICAgd2hpbGUgKCFjdXJyZW50Q2hhcmFjdGVyLmRvbmUpIHtcbiAgICAgICAgY29uc3QgY2hhcmFjdGVyID0gY3VycmVudENoYXJhY3Rlci52YWx1ZTtcbiAgICAgICAgY29uc3QgY2hhcmFjdGVyTGVuZ3RoID0gc3RyaW5nV2lkdGgoY2hhcmFjdGVyKTtcbiAgICAgICAgaWYgKHZpc2libGUgKyBjaGFyYWN0ZXJMZW5ndGggPD0gY29sdW1ucykge1xuICAgICAgICAgICAgcm93c1tyb3dzLmxlbmd0aCAtIDFdICs9IGNoYXJhY3RlcjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJvd3MucHVzaChjaGFyYWN0ZXIpO1xuICAgICAgICAgICAgdmlzaWJsZSA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoYXJhY3RlciA9PT0gRVNDIHx8IGNoYXJhY3RlciA9PT0gQ1NJKSB7XG4gICAgICAgICAgICBpc0luc2lkZUVzY2FwZSA9IHRydWU7XG4gICAgICAgICAgICBpc0luc2lkZUxpbmtFc2NhcGUgPSB3b3JkLnN0YXJ0c1dpdGgoQU5TSV9FU0NBUEVfTElOSywgcmF3Q2hhcmFjdGVySW5kZXggKyAxKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNJbnNpZGVFc2NhcGUpIHtcbiAgICAgICAgICAgIGlmIChpc0luc2lkZUxpbmtFc2NhcGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2hhcmFjdGVyID09PSBBTlNJX0VTQ0FQRV9CRUxMKSB7XG4gICAgICAgICAgICAgICAgICAgIGlzSW5zaWRlRXNjYXBlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGlzSW5zaWRlTGlua0VzY2FwZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoYXJhY3RlciA9PT0gQU5TSV9TR1JfVEVSTUlOQVRPUikge1xuICAgICAgICAgICAgICAgIGlzSW5zaWRlRXNjYXBlID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2aXNpYmxlICs9IGNoYXJhY3Rlckxlbmd0aDtcbiAgICAgICAgICAgIGlmICh2aXNpYmxlID09PSBjb2x1bW5zICYmICFuZXh0Q2hhcmFjdGVyLmRvbmUpIHtcbiAgICAgICAgICAgICAgICByb3dzLnB1c2goJycpO1xuICAgICAgICAgICAgICAgIHZpc2libGUgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGN1cnJlbnRDaGFyYWN0ZXIgPSBuZXh0Q2hhcmFjdGVyO1xuICAgICAgICBuZXh0Q2hhcmFjdGVyID0gY2hhcmFjdGVycy5uZXh0KCk7XG4gICAgICAgIHJhd0NoYXJhY3RlckluZGV4ICs9IGNoYXJhY3Rlci5sZW5ndGg7XG4gICAgfVxuICAgIGxhc3RSb3cgPSByb3dzLmF0KC0xKTtcbiAgICBpZiAoIXZpc2libGUgJiZcbiAgICAgICAgbGFzdFJvdyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgIGxhc3RSb3cubGVuZ3RoID4gMCAmJlxuICAgICAgICByb3dzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgcm93c1tyb3dzLmxlbmd0aCAtIDJdICs9IHJvd3MucG9wKCk7XG4gICAgfVxufTtcbmNvbnN0IHN0cmluZ1Zpc2libGVUcmltU3BhY2VzUmlnaHQgPSAoc3RyaW5nKSA9PiB7XG4gICAgY29uc3Qgd29yZHMgPSBzdHJpbmcuc3BsaXQoJyAnKTtcbiAgICBsZXQgbGFzdCA9IHdvcmRzLmxlbmd0aDtcbiAgICB3aGlsZSAobGFzdCA+IDApIHtcbiAgICAgICAgaWYgKHN0cmluZ1dpZHRoKHdvcmRzW2xhc3QgLSAxXSkgPiAwKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBsYXN0LS07XG4gICAgfVxuICAgIGlmIChsYXN0ID09PSB3b3Jkcy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHN0cmluZztcbiAgICB9XG4gICAgcmV0dXJuIHdvcmRzLnNsaWNlKDAsIGxhc3QpLmpvaW4oJyAnKSArIHdvcmRzLnNsaWNlKGxhc3QpLmpvaW4oJycpO1xufTtcbmNvbnN0IGV4ZWMgPSAoc3RyaW5nLCBjb2x1bW5zLCBvcHRpb25zID0ge30pID0+IHtcbiAgICBpZiAob3B0aW9ucy50cmltICE9PSBmYWxzZSAmJiBzdHJpbmcudHJpbSgpID09PSAnJykge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIGxldCByZXR1cm5WYWx1ZSA9ICcnO1xuICAgIGxldCBlc2NhcGVDb2RlO1xuICAgIGxldCBlc2NhcGVVcmw7XG4gICAgY29uc3Qgd29yZHMgPSBzdHJpbmcuc3BsaXQoJyAnKTtcbiAgICBjb25zdCBsZW5ndGhzID0gd29yZExlbmd0aHMod29yZHMpO1xuICAgIGxldCByb3dzID0gWycnXTtcbiAgICBmb3IgKGNvbnN0IFtpbmRleCwgd29yZF0gb2Ygd29yZHMuZW50cmllcygpKSB7XG4gICAgICAgIGlmIChvcHRpb25zLnRyaW0gIT09IGZhbHNlKSB7XG4gICAgICAgICAgICByb3dzW3Jvd3MubGVuZ3RoIC0gMV0gPSAocm93cy5hdCgtMSkgPz8gJycpLnRyaW1TdGFydCgpO1xuICAgICAgICB9XG4gICAgICAgIGxldCByb3dMZW5ndGggPSBzdHJpbmdXaWR0aChyb3dzLmF0KC0xKSA/PyAnJyk7XG4gICAgICAgIGlmIChpbmRleCAhPT0gMCkge1xuICAgICAgICAgICAgaWYgKHJvd0xlbmd0aCA+PSBjb2x1bW5zICYmXG4gICAgICAgICAgICAgICAgKG9wdGlvbnMud29yZFdyYXAgPT09IGZhbHNlIHx8IG9wdGlvbnMudHJpbSA9PT0gZmFsc2UpKSB7XG4gICAgICAgICAgICAgICAgcm93cy5wdXNoKCcnKTtcbiAgICAgICAgICAgICAgICByb3dMZW5ndGggPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJvd0xlbmd0aCA+IDAgfHwgb3B0aW9ucy50cmltID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHJvd3Nbcm93cy5sZW5ndGggLSAxXSArPSAnICc7XG4gICAgICAgICAgICAgICAgcm93TGVuZ3RoKys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuaGFyZCAmJiBsZW5ndGhzW2luZGV4XSA+IGNvbHVtbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlbWFpbmluZ0NvbHVtbnMgPSBjb2x1bW5zIC0gcm93TGVuZ3RoO1xuICAgICAgICAgICAgY29uc3QgYnJlYWtzU3RhcnRpbmdUaGlzTGluZSA9IDEgKyBNYXRoLmZsb29yKChsZW5ndGhzW2luZGV4XSAtIHJlbWFpbmluZ0NvbHVtbnMgLSAxKSAvIGNvbHVtbnMpO1xuICAgICAgICAgICAgY29uc3QgYnJlYWtzU3RhcnRpbmdOZXh0TGluZSA9IE1hdGguZmxvb3IoKGxlbmd0aHNbaW5kZXhdIC0gMSkgLyBjb2x1bW5zKTtcbiAgICAgICAgICAgIGlmIChicmVha3NTdGFydGluZ05leHRMaW5lIDwgYnJlYWtzU3RhcnRpbmdUaGlzTGluZSkge1xuICAgICAgICAgICAgICAgIHJvd3MucHVzaCgnJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB3cmFwV29yZChyb3dzLCB3b3JkLCBjb2x1bW5zKTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyb3dMZW5ndGggKyBsZW5ndGhzW2luZGV4XSA+IGNvbHVtbnMgJiZcbiAgICAgICAgICAgIHJvd0xlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgIGxlbmd0aHNbaW5kZXhdID4gMCkge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMud29yZFdyYXAgPT09IGZhbHNlICYmIHJvd0xlbmd0aCA8IGNvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICB3cmFwV29yZChyb3dzLCB3b3JkLCBjb2x1bW5zKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJvd3MucHVzaCgnJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJvd0xlbmd0aCArIGxlbmd0aHNbaW5kZXhdID4gY29sdW1ucyAmJiBvcHRpb25zLndvcmRXcmFwID09PSBmYWxzZSkge1xuICAgICAgICAgICAgd3JhcFdvcmQocm93cywgd29yZCwgY29sdW1ucyk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICByb3dzW3Jvd3MubGVuZ3RoIC0gMV0gKz0gd29yZDtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMudHJpbSAhPT0gZmFsc2UpIHtcbiAgICAgICAgcm93cyA9IHJvd3MubWFwKChyb3cpID0+IHN0cmluZ1Zpc2libGVUcmltU3BhY2VzUmlnaHQocm93KSk7XG4gICAgfVxuICAgIGNvbnN0IHByZVN0cmluZyA9IHJvd3Muam9pbignXFxuJyk7XG4gICAgY29uc3QgcHJlID0gcHJlU3RyaW5nW1N5bWJvbC5pdGVyYXRvcl0oKTtcbiAgICBsZXQgY3VycmVudFByZSA9IHByZS5uZXh0KCk7XG4gICAgbGV0IG5leHRQcmUgPSBwcmUubmV4dCgpO1xuICAgIC8vIFdlIG5lZWQgdG8ga2VlcCBhIHNlcGFyYXRlIGluZGV4IGFzIGBTdHJpbmcjc2xpY2UoKWAgd29ya3Mgb24gVW5pY29kZSBjb2RlIHVuaXRzLCB3aGlsZSBgcHJlYCBpcyBhbiBhcnJheSBvZiBjb2RlcG9pbnRzLlxuICAgIGxldCBwcmVTdHJpbmdJbmRleCA9IDA7XG4gICAgd2hpbGUgKCFjdXJyZW50UHJlLmRvbmUpIHtcbiAgICAgICAgY29uc3QgY2hhcmFjdGVyID0gY3VycmVudFByZS52YWx1ZTtcbiAgICAgICAgY29uc3QgbmV4dENoYXJhY3RlciA9IG5leHRQcmUudmFsdWU7XG4gICAgICAgIHJldHVyblZhbHVlICs9IGNoYXJhY3RlcjtcbiAgICAgICAgaWYgKGNoYXJhY3RlciA9PT0gRVNDIHx8IGNoYXJhY3RlciA9PT0gQ1NJKSB7XG4gICAgICAgICAgICBHUk9VUF9SRUdFWC5sYXN0SW5kZXggPSBwcmVTdHJpbmdJbmRleCArIDE7XG4gICAgICAgICAgICBjb25zdCBncm91cHNSZXN1bHQgPSBHUk9VUF9SRUdFWC5leGVjKHByZVN0cmluZyk7XG4gICAgICAgICAgICBjb25zdCBncm91cHMgPSBncm91cHNSZXN1bHQ/Lmdyb3VwcztcbiAgICAgICAgICAgIGlmIChncm91cHM/LmNvZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvZGUgPSBOdW1iZXIucGFyc2VGbG9hdChncm91cHMuY29kZSk7XG4gICAgICAgICAgICAgICAgZXNjYXBlQ29kZSA9IGNvZGUgPT09IEVORF9DT0RFID8gdW5kZWZpbmVkIDogY29kZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGdyb3Vwcz8udXJpICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBlc2NhcGVVcmwgPSBncm91cHMudXJpLmxlbmd0aCA9PT0gMCA/IHVuZGVmaW5lZCA6IGdyb3Vwcy51cmk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2xvc2luZ0NvZGUgPSBlc2NhcGVDb2RlID8gZ2V0Q2xvc2luZ0NvZGUoZXNjYXBlQ29kZSkgOiB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChuZXh0Q2hhcmFjdGVyID09PSAnXFxuJykge1xuICAgICAgICAgICAgaWYgKGVzY2FwZVVybCkge1xuICAgICAgICAgICAgICAgIHJldHVyblZhbHVlICs9IHdyYXBBbnNpSHlwZXJsaW5rKCcnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlc2NhcGVDb2RlICYmIGNsb3NpbmdDb2RlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUgKz0gd3JhcEFuc2lDb2RlKGNsb3NpbmdDb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjaGFyYWN0ZXIgPT09ICdcXG4nKSB7XG4gICAgICAgICAgICBpZiAoZXNjYXBlQ29kZSAmJiBjbG9zaW5nQ29kZSkge1xuICAgICAgICAgICAgICAgIHJldHVyblZhbHVlICs9IHdyYXBBbnNpQ29kZShlc2NhcGVDb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlc2NhcGVVcmwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSArPSB3cmFwQW5zaUh5cGVybGluayhlc2NhcGVVcmwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHByZVN0cmluZ0luZGV4ICs9IGNoYXJhY3Rlci5sZW5ndGg7XG4gICAgICAgIGN1cnJlbnRQcmUgPSBuZXh0UHJlO1xuICAgICAgICBuZXh0UHJlID0gcHJlLm5leHQoKTtcbiAgICB9XG4gICAgcmV0dXJuIHJldHVyblZhbHVlO1xufTtcbmV4cG9ydCBmdW5jdGlvbiB3cmFwQW5zaShzdHJpbmcsIGNvbHVtbnMsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gU3RyaW5nKHN0cmluZylcbiAgICAgICAgLm5vcm1hbGl6ZSgpXG4gICAgICAgIC5yZXBsYWNlQWxsKCdcXHJcXG4nLCAnXFxuJylcbiAgICAgICAgLnNwbGl0KCdcXG4nKVxuICAgICAgICAubWFwKChsaW5lKSA9PiBleGVjKGxpbmUsIGNvbHVtbnMsIG9wdGlvbnMpKVxuICAgICAgICAuam9pbignXFxuJyk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1tYWluLmpzLm1hcCIsICJjb25zdCBhY3Rpb25zID0gWyd1cCcsICdkb3duJywgJ2xlZnQnLCAncmlnaHQnLCAnc3BhY2UnLCAnZW50ZXInLCAnY2FuY2VsJ10gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBBY3Rpb24gPSAodHlwZW9mIGFjdGlvbnMpW251bWJlcl07XG5cbi8qKiBHbG9iYWwgc2V0dGluZ3MgZm9yIENsYWNrIHByb2dyYW1zLCBzdG9yZWQgaW4gbWVtb3J5ICovXG5pbnRlcmZhY2UgSW50ZXJuYWxDbGFja1NldHRpbmdzIHtcblx0YWN0aW9uczogU2V0PEFjdGlvbj47XG5cdGFsaWFzZXM6IE1hcDxzdHJpbmcsIEFjdGlvbj47XG5cdG1lc3NhZ2VzOiB7XG5cdFx0Y2FuY2VsOiBzdHJpbmc7XG5cdFx0ZXJyb3I6IHN0cmluZztcblx0fTtcblx0d2l0aEd1aWRlOiBib29sZWFuO1xufVxuXG5leHBvcnQgY29uc3Qgc2V0dGluZ3M6IEludGVybmFsQ2xhY2tTZXR0aW5ncyA9IHtcblx0YWN0aW9uczogbmV3IFNldChhY3Rpb25zKSxcblx0YWxpYXNlczogbmV3IE1hcDxzdHJpbmcsIEFjdGlvbj4oW1xuXHRcdC8vIHZpbSBzdXBwb3J0XG5cdFx0WydrJywgJ3VwJ10sXG5cdFx0WydqJywgJ2Rvd24nXSxcblx0XHRbJ2gnLCAnbGVmdCddLFxuXHRcdFsnbCcsICdyaWdodCddLFxuXHRcdFsnXFx4MDMnLCAnY2FuY2VsJ10sXG5cdFx0Ly8gb3BpbmlvbmF0ZWQgZGVmYXVsdHMhXG5cdFx0Wydlc2NhcGUnLCAnY2FuY2VsJ10sXG5cdF0pLFxuXHRtZXNzYWdlczoge1xuXHRcdGNhbmNlbDogJ0NhbmNlbGVkJyxcblx0XHRlcnJvcjogJ1NvbWV0aGluZyB3ZW50IHdyb25nJyxcblx0fSxcblx0d2l0aEd1aWRlOiB0cnVlLFxufTtcblxuZXhwb3J0IGludGVyZmFjZSBDbGFja1NldHRpbmdzIHtcblx0LyoqXG5cdCAqIFNldCBjdXN0b20gZ2xvYmFsIGFsaWFzZXMgZm9yIHRoZSBkZWZhdWx0IGFjdGlvbnMuXG5cdCAqIFRoaXMgd2lsbCBub3Qgb3ZlcndyaXRlIGV4aXN0aW5nIGFsaWFzZXMsIGl0IHdpbGwgb25seSBhZGQgbmV3IG9uZXMhXG5cdCAqXG5cdCAqIEBwYXJhbSBhbGlhc2VzIC0gQW4gb2JqZWN0IHRoYXQgbWFwcyBhbGlhc2VzIHRvIGFjdGlvbnNcblx0ICogQGRlZmF1bHQgeyBrOiAndXAnLCBqOiAnZG93bicsIGg6ICdsZWZ0JywgbDogJ3JpZ2h0JywgJ1xceDAzJzogJ2NhbmNlbCcsICdlc2NhcGUnOiAnY2FuY2VsJyB9XG5cdCAqL1xuXHRhbGlhc2VzPzogUmVjb3JkPHN0cmluZywgQWN0aW9uPjtcblxuXHQvKipcblx0ICogQ3VzdG9tIG1lc3NhZ2VzIGZvciBwcm9tcHRzXG5cdCAqL1xuXHRtZXNzYWdlcz86IHtcblx0XHQvKipcblx0XHQgKiBDdXN0b20gbWVzc2FnZSB0byBkaXNwbGF5IHdoZW4gYSBzcGlubmVyIGlzIGNhbmNlbGxlZFxuXHRcdCAqIEBkZWZhdWx0IFwiQ2FuY2VsZWRcIlxuXHRcdCAqL1xuXHRcdGNhbmNlbD86IHN0cmluZztcblx0XHQvKipcblx0XHQgKiBDdXN0b20gbWVzc2FnZSB0byBkaXNwbGF5IHdoZW4gYSBzcGlubmVyIGVuY291bnRlcnMgYW4gZXJyb3Jcblx0XHQgKiBAZGVmYXVsdCBcIlNvbWV0aGluZyB3ZW50IHdyb25nXCJcblx0XHQgKi9cblx0XHRlcnJvcj86IHN0cmluZztcblx0fTtcblxuXHR3aXRoR3VpZGU/OiBib29sZWFuO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlU2V0dGluZ3ModXBkYXRlczogQ2xhY2tTZXR0aW5ncykge1xuXHQvLyBIYW5kbGUgZWFjaCBwcm9wZXJ0eSBpbiB0aGUgdXBkYXRlc1xuXHRpZiAodXBkYXRlcy5hbGlhc2VzICE9PSB1bmRlZmluZWQpIHtcblx0XHRjb25zdCBhbGlhc2VzID0gdXBkYXRlcy5hbGlhc2VzO1xuXHRcdGZvciAoY29uc3QgYWxpYXMgaW4gYWxpYXNlcykge1xuXHRcdFx0aWYgKCFPYmplY3QuaGFzT3duKGFsaWFzZXMsIGFsaWFzKSkgY29udGludWU7XG5cblx0XHRcdGNvbnN0IGFjdGlvbiA9IGFsaWFzZXNbYWxpYXNdO1xuXHRcdFx0aWYgKCFzZXR0aW5ncy5hY3Rpb25zLmhhcyhhY3Rpb24pKSBjb250aW51ZTtcblxuXHRcdFx0aWYgKCFzZXR0aW5ncy5hbGlhc2VzLmhhcyhhbGlhcykpIHtcblx0XHRcdFx0c2V0dGluZ3MuYWxpYXNlcy5zZXQoYWxpYXMsIGFjdGlvbik7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aWYgKHVwZGF0ZXMubWVzc2FnZXMgIT09IHVuZGVmaW5lZCkge1xuXHRcdGNvbnN0IG1lc3NhZ2VzID0gdXBkYXRlcy5tZXNzYWdlcztcblx0XHRpZiAobWVzc2FnZXMuY2FuY2VsICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHNldHRpbmdzLm1lc3NhZ2VzLmNhbmNlbCA9IG1lc3NhZ2VzLmNhbmNlbDtcblx0XHR9XG5cdFx0aWYgKG1lc3NhZ2VzLmVycm9yICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHNldHRpbmdzLm1lc3NhZ2VzLmVycm9yID0gbWVzc2FnZXMuZXJyb3I7XG5cdFx0fVxuXHR9XG5cblx0aWYgKHVwZGF0ZXMud2l0aEd1aWRlICE9PSB1bmRlZmluZWQpIHtcblx0XHRzZXR0aW5ncy53aXRoR3VpZGUgPSB1cGRhdGVzLndpdGhHdWlkZSAhPT0gZmFsc2U7XG5cdH1cbn1cblxuLyoqXG4gKiBDaGVjayBpZiBhIGtleSBpcyBhbiBhbGlhcyBmb3IgYSBkZWZhdWx0IGFjdGlvblxuICogQHBhcmFtIGtleSAtIFRoZSByYXcga2V5IHdoaWNoIG1pZ2h0IG1hdGNoIHRvIGFuIGFjdGlvblxuICogQHBhcmFtIGFjdGlvbiAtIFRoZSBhY3Rpb24gdG8gbWF0Y2hcbiAqIEByZXR1cm5zIGJvb2xlYW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQWN0aW9uS2V5KGtleTogc3RyaW5nIHwgQXJyYXk8c3RyaW5nIHwgdW5kZWZpbmVkPiwgYWN0aW9uOiBBY3Rpb24pIHtcblx0aWYgKHR5cGVvZiBrZXkgPT09ICdzdHJpbmcnKSB7XG5cdFx0cmV0dXJuIHNldHRpbmdzLmFsaWFzZXMuZ2V0KGtleSkgPT09IGFjdGlvbjtcblx0fVxuXG5cdGZvciAoY29uc3QgdmFsdWUgb2Yga2V5KSB7XG5cdFx0aWYgKHZhbHVlID09PSB1bmRlZmluZWQpIGNvbnRpbnVlO1xuXHRcdGlmIChpc0FjdGlvbktleSh2YWx1ZSwgYWN0aW9uKSkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBmYWxzZTtcbn1cbiIsICJleHBvcnQgZnVuY3Rpb24gZGlmZkxpbmVzKGE6IHN0cmluZywgYjogc3RyaW5nKSB7XG5cdGlmIChhID09PSBiKSByZXR1cm47XG5cblx0Y29uc3QgYUxpbmVzID0gYS5zcGxpdCgnXFxuJyk7XG5cdGNvbnN0IGJMaW5lcyA9IGIuc3BsaXQoJ1xcbicpO1xuXHRjb25zdCBudW1MaW5lcyA9IE1hdGgubWF4KGFMaW5lcy5sZW5ndGgsIGJMaW5lcy5sZW5ndGgpO1xuXHRjb25zdCBkaWZmOiBudW1iZXJbXSA9IFtdO1xuXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgbnVtTGluZXM7IGkrKykge1xuXHRcdGlmIChhTGluZXNbaV0gIT09IGJMaW5lc1tpXSkgZGlmZi5wdXNoKGkpO1xuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRsaW5lczogZGlmZixcblx0XHRudW1MaW5lc0JlZm9yZTogYUxpbmVzLmxlbmd0aCxcblx0XHRudW1MaW5lc0FmdGVyOiBiTGluZXMubGVuZ3RoLFxuXHRcdG51bUxpbmVzLFxuXHR9O1xufVxuIiwgImltcG9ydCB7IHN0ZGluLCBzdGRvdXQgfSBmcm9tICdub2RlOnByb2Nlc3MnO1xuaW1wb3J0IHR5cGUgeyBLZXkgfSBmcm9tICdub2RlOnJlYWRsaW5lJztcbmltcG9ydCAqIGFzIHJlYWRsaW5lIGZyb20gJ25vZGU6cmVhZGxpbmUnO1xuaW1wb3J0IHR5cGUgeyBSZWFkYWJsZSwgV3JpdGFibGUgfSBmcm9tICdub2RlOnN0cmVhbSc7XG5pbXBvcnQgeyBSZWFkU3RyZWFtIH0gZnJvbSAnbm9kZTp0dHknO1xuaW1wb3J0IHsgd3JhcEFuc2kgfSBmcm9tICdmYXN0LXdyYXAtYW5zaSc7XG5pbXBvcnQgeyBjdXJzb3IgfSBmcm9tICdzaXN0ZXJhbnNpJztcbmltcG9ydCB7IGlzQWN0aW9uS2V5IH0gZnJvbSAnLi9zZXR0aW5ncy5qcyc7XG5cbmV4cG9ydCAqIGZyb20gJy4vc2V0dGluZ3MuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9zdHJpbmcuanMnO1xuXG5jb25zdCBpc1dpbmRvd3MgPSBnbG9iYWxUaGlzLnByb2Nlc3MucGxhdGZvcm0uc3RhcnRzV2l0aCgnd2luJyk7XG5cbmV4cG9ydCBjb25zdCBDQU5DRUxfU1lNQk9MID0gU3ltYm9sKCdjbGFjazpjYW5jZWwnKTtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ2FuY2VsKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgc3ltYm9sIHtcblx0cmV0dXJuIHZhbHVlID09PSBDQU5DRUxfU1lNQk9MO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0UmF3TW9kZShpbnB1dDogUmVhZGFibGUsIHZhbHVlOiBib29sZWFuKSB7XG5cdGNvbnN0IGkgPSBpbnB1dCBhcyB0eXBlb2Ygc3RkaW47XG5cblx0aWYgKGkuaXNUVFkpIGkuc2V0UmF3TW9kZSh2YWx1ZSk7XG59XG5cbmludGVyZmFjZSBCbG9ja09wdGlvbnMge1xuXHRpbnB1dD86IFJlYWRhYmxlO1xuXHRvdXRwdXQ/OiBXcml0YWJsZTtcblx0b3ZlcndyaXRlPzogYm9vbGVhbjtcblx0aGlkZUN1cnNvcj86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBibG9jayh7XG5cdGlucHV0ID0gc3RkaW4sXG5cdG91dHB1dCA9IHN0ZG91dCxcblx0b3ZlcndyaXRlID0gdHJ1ZSxcblx0aGlkZUN1cnNvciA9IHRydWUsXG59OiBCbG9ja09wdGlvbnMgPSB7fSkge1xuXHRjb25zdCBybCA9IHJlYWRsaW5lLmNyZWF0ZUludGVyZmFjZSh7XG5cdFx0aW5wdXQsXG5cdFx0b3V0cHV0LFxuXHRcdHByb21wdDogJycsXG5cdFx0dGFiU2l6ZTogMSxcblx0fSk7XG5cdHJlYWRsaW5lLmVtaXRLZXlwcmVzc0V2ZW50cyhpbnB1dCwgcmwpO1xuXG5cdGlmIChpbnB1dCBpbnN0YW5jZW9mIFJlYWRTdHJlYW0gJiYgaW5wdXQuaXNUVFkpIHtcblx0XHRpbnB1dC5zZXRSYXdNb2RlKHRydWUpO1xuXHR9XG5cblx0Y29uc3QgY2xlYXIgPSAoZGF0YTogQnVmZmVyLCB7IG5hbWUsIHNlcXVlbmNlIH06IEtleSkgPT4ge1xuXHRcdGNvbnN0IHN0ciA9IFN0cmluZyhkYXRhKTtcblx0XHRpZiAoaXNBY3Rpb25LZXkoW3N0ciwgbmFtZSwgc2VxdWVuY2VdLCAnY2FuY2VsJykpIHtcblx0XHRcdGlmIChoaWRlQ3Vyc29yKSBvdXRwdXQud3JpdGUoY3Vyc29yLnNob3cpO1xuXHRcdFx0cHJvY2Vzcy5leGl0KDApO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpZiAoIW92ZXJ3cml0ZSkgcmV0dXJuO1xuXHRcdGNvbnN0IGR4ID0gbmFtZSA9PT0gJ3JldHVybicgPyAwIDogLTE7XG5cdFx0Y29uc3QgZHkgPSBuYW1lID09PSAncmV0dXJuJyA/IC0xIDogMDtcblxuXHRcdHJlYWRsaW5lLm1vdmVDdXJzb3Iob3V0cHV0LCBkeCwgZHksICgpID0+IHtcblx0XHRcdHJlYWRsaW5lLmNsZWFyTGluZShvdXRwdXQsIDEsICgpID0+IHtcblx0XHRcdFx0aW5wdXQub25jZSgna2V5cHJlc3MnLCBjbGVhcik7XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fTtcblx0aWYgKGhpZGVDdXJzb3IpIG91dHB1dC53cml0ZShjdXJzb3IuaGlkZSk7XG5cdGlucHV0Lm9uY2UoJ2tleXByZXNzJywgY2xlYXIpO1xuXG5cdHJldHVybiAoKSA9PiB7XG5cdFx0aW5wdXQub2ZmKCdrZXlwcmVzcycsIGNsZWFyKTtcblx0XHRpZiAoaGlkZUN1cnNvcikgb3V0cHV0LndyaXRlKGN1cnNvci5zaG93KTtcblxuXHRcdC8vIFByZXZlbnQgV2luZG93cyBzcGVjaWZpYyBpc3N1ZXM6IGh0dHBzOi8vZ2l0aHViLmNvbS9ib21ic2hlbGwtZGV2L2NsYWNrL2lzc3Vlcy8xNzZcblx0XHRpZiAoaW5wdXQgaW5zdGFuY2VvZiBSZWFkU3RyZWFtICYmIGlucHV0LmlzVFRZICYmICFpc1dpbmRvd3MpIHtcblx0XHRcdGlucHV0LnNldFJhd01vZGUoZmFsc2UpO1xuXHRcdH1cblxuXHRcdC8vIEB0cy1leHBlY3QtZXJyb3IgZml4IGZvciBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvaXNzdWVzLzMxNzYyI2lzc3VlY29tbWVudC0xNDQxMjIzOTA3XG5cdFx0cmwudGVybWluYWwgPSBmYWxzZTtcblx0XHRybC5jbG9zZSgpO1xuXHR9O1xufVxuXG5leHBvcnQgY29uc3QgZ2V0Q29sdW1ucyA9IChvdXRwdXQ6IFdyaXRhYmxlKTogbnVtYmVyID0+IHtcblx0aWYgKCdjb2x1bW5zJyBpbiBvdXRwdXQgJiYgdHlwZW9mIG91dHB1dC5jb2x1bW5zID09PSAnbnVtYmVyJykge1xuXHRcdHJldHVybiBvdXRwdXQuY29sdW1ucztcblx0fVxuXHRyZXR1cm4gODA7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Um93cyA9IChvdXRwdXQ6IFdyaXRhYmxlKTogbnVtYmVyID0+IHtcblx0aWYgKCdyb3dzJyBpbiBvdXRwdXQgJiYgdHlwZW9mIG91dHB1dC5yb3dzID09PSAnbnVtYmVyJykge1xuXHRcdHJldHVybiBvdXRwdXQucm93cztcblx0fVxuXHRyZXR1cm4gMjA7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gd3JhcFRleHRXaXRoUHJlZml4KFxuXHRvdXRwdXQ6IFdyaXRhYmxlIHwgdW5kZWZpbmVkLFxuXHR0ZXh0OiBzdHJpbmcsXG5cdHByZWZpeDogc3RyaW5nLFxuXHRzdGFydFByZWZpeDogc3RyaW5nID0gcHJlZml4XG4pOiBzdHJpbmcge1xuXHRjb25zdCBjb2x1bW5zID0gZ2V0Q29sdW1ucyhvdXRwdXQgPz8gc3Rkb3V0KTtcblx0Y29uc3Qgd3JhcHBlZCA9IHdyYXBBbnNpKHRleHQsIGNvbHVtbnMgLSBwcmVmaXgubGVuZ3RoLCB7XG5cdFx0aGFyZDogdHJ1ZSxcblx0XHR0cmltOiBmYWxzZSxcblx0fSk7XG5cdGNvbnN0IGxpbmVzID0gd3JhcHBlZFxuXHRcdC5zcGxpdCgnXFxuJylcblx0XHQubWFwKChsaW5lLCBpbmRleCkgPT4ge1xuXHRcdFx0cmV0dXJuIGAke2luZGV4ID09PSAwID8gc3RhcnRQcmVmaXggOiBwcmVmaXh9JHtsaW5lfWA7XG5cdFx0fSlcblx0XHQuam9pbignXFxuJyk7XG5cdHJldHVybiBsaW5lcztcbn1cbiIsICJpbXBvcnQgeyBzdGRpbiwgc3Rkb3V0IH0gZnJvbSAnbm9kZTpwcm9jZXNzJztcbmltcG9ydCByZWFkbGluZSwgeyB0eXBlIEtleSwgdHlwZSBSZWFkTGluZSB9IGZyb20gJ25vZGU6cmVhZGxpbmUnO1xuaW1wb3J0IHR5cGUgeyBSZWFkYWJsZSwgV3JpdGFibGUgfSBmcm9tICdub2RlOnN0cmVhbSc7XG5pbXBvcnQgeyB3cmFwQW5zaSB9IGZyb20gJ2Zhc3Qtd3JhcC1hbnNpJztcbmltcG9ydCB7IGN1cnNvciwgZXJhc2UgfSBmcm9tICdzaXN0ZXJhbnNpJztcbmltcG9ydCB0eXBlIHsgQ2xhY2tFdmVudHMsIENsYWNrU3RhdGUgfSBmcm9tICcuLi90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IEFjdGlvbiB9IGZyb20gJy4uL3V0aWxzL2luZGV4LmpzJztcbmltcG9ydCB7XG5cdENBTkNFTF9TWU1CT0wsXG5cdGRpZmZMaW5lcyxcblx0Z2V0Um93cyxcblx0aXNBY3Rpb25LZXksXG5cdHNldFJhd01vZGUsXG5cdHNldHRpbmdzLFxufSBmcm9tICcuLi91dGlscy9pbmRleC5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJvbXB0T3B0aW9uczxUVmFsdWUsIFNlbGYgZXh0ZW5kcyBQcm9tcHQ8VFZhbHVlPj4ge1xuXHRyZW5kZXIodGhpczogT21pdDxTZWxmLCAncHJvbXB0Jz4pOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdGluaXRpYWxWYWx1ZT86IGFueTtcblx0aW5pdGlhbFVzZXJJbnB1dD86IHN0cmluZztcblx0dmFsaWRhdGU/OiAoKHZhbHVlOiBUVmFsdWUgfCB1bmRlZmluZWQpID0+IHN0cmluZyB8IEVycm9yIHwgdW5kZWZpbmVkKSB8IHVuZGVmaW5lZDtcblx0aW5wdXQ/OiBSZWFkYWJsZTtcblx0b3V0cHV0PzogV3JpdGFibGU7XG5cdGRlYnVnPzogYm9vbGVhbjtcblx0c2lnbmFsPzogQWJvcnRTaWduYWw7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFByb21wdDxUVmFsdWU+IHtcblx0cHJvdGVjdGVkIGlucHV0OiBSZWFkYWJsZTtcblx0cHJvdGVjdGVkIG91dHB1dDogV3JpdGFibGU7XG5cdHByaXZhdGUgX2Fib3J0U2lnbmFsPzogQWJvcnRTaWduYWw7XG5cblx0cHJpdmF0ZSBybDogUmVhZExpbmUgfCB1bmRlZmluZWQ7XG5cdHByaXZhdGUgb3B0czogT21pdDxQcm9tcHRPcHRpb25zPFRWYWx1ZSwgUHJvbXB0PFRWYWx1ZT4+LCAncmVuZGVyJyB8ICdpbnB1dCcgfCAnb3V0cHV0Jz47XG5cdHByaXZhdGUgX3JlbmRlcjogKGNvbnRleHQ6IE9taXQ8UHJvbXB0PFRWYWx1ZT4sICdwcm9tcHQnPikgPT4gc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRwcml2YXRlIF90cmFjayA9IGZhbHNlO1xuXHRwcml2YXRlIF9wcmV2RnJhbWUgPSAnJztcblx0cHJpdmF0ZSBfc3Vic2NyaWJlcnMgPSBuZXcgTWFwPHN0cmluZywgeyBjYjogKC4uLmFyZ3M6IGFueSkgPT4gYW55OyBvbmNlPzogYm9vbGVhbiB9W10+KCk7XG5cdHByb3RlY3RlZCBfY3Vyc29yID0gMDtcblxuXHRwdWJsaWMgc3RhdGU6IENsYWNrU3RhdGUgPSAnaW5pdGlhbCc7XG5cdHB1YmxpYyBlcnJvciA9ICcnO1xuXHRwdWJsaWMgdmFsdWU6IFRWYWx1ZSB8IHVuZGVmaW5lZDtcblx0cHVibGljIHVzZXJJbnB1dCA9ICcnO1xuXG5cdGNvbnN0cnVjdG9yKG9wdGlvbnM6IFByb21wdE9wdGlvbnM8VFZhbHVlLCBQcm9tcHQ8VFZhbHVlPj4sIHRyYWNrVmFsdWUgPSB0cnVlKSB7XG5cdFx0Y29uc3QgeyBpbnB1dCA9IHN0ZGluLCBvdXRwdXQgPSBzdGRvdXQsIHJlbmRlciwgc2lnbmFsLCAuLi5vcHRzIH0gPSBvcHRpb25zO1xuXG5cdFx0dGhpcy5vcHRzID0gb3B0cztcblx0XHR0aGlzLm9uS2V5cHJlc3MgPSB0aGlzLm9uS2V5cHJlc3MuYmluZCh0aGlzKTtcblx0XHR0aGlzLmNsb3NlID0gdGhpcy5jbG9zZS5iaW5kKHRoaXMpO1xuXHRcdHRoaXMucmVuZGVyID0gdGhpcy5yZW5kZXIuYmluZCh0aGlzKTtcblx0XHR0aGlzLl9yZW5kZXIgPSByZW5kZXIuYmluZCh0aGlzKTtcblx0XHR0aGlzLl90cmFjayA9IHRyYWNrVmFsdWU7XG5cdFx0dGhpcy5fYWJvcnRTaWduYWwgPSBzaWduYWw7XG5cblx0XHR0aGlzLmlucHV0ID0gaW5wdXQ7XG5cdFx0dGhpcy5vdXRwdXQgPSBvdXRwdXQ7XG5cdH1cblxuXHQvKipcblx0ICogVW5zdWJzY3JpYmUgYWxsIGxpc3RlbmVyc1xuXHQgKi9cblx0cHJvdGVjdGVkIHVuc3Vic2NyaWJlKCkge1xuXHRcdHRoaXMuX3N1YnNjcmliZXJzLmNsZWFyKCk7XG5cdH1cblxuXHQvKipcblx0ICogU2V0IGEgc3Vic2NyaWJlciB3aXRoIG9wdHNcblx0ICogQHBhcmFtIGV2ZW50IC0gVGhlIGV2ZW50IG5hbWVcblx0ICovXG5cdHByaXZhdGUgc2V0U3Vic2NyaWJlcjxUIGV4dGVuZHMga2V5b2YgQ2xhY2tFdmVudHM8VFZhbHVlPj4oXG5cdFx0ZXZlbnQ6IFQsXG5cdFx0b3B0czogeyBjYjogQ2xhY2tFdmVudHM8VFZhbHVlPltUXTsgb25jZT86IGJvb2xlYW4gfVxuXHQpIHtcblx0XHRjb25zdCBwYXJhbXMgPSB0aGlzLl9zdWJzY3JpYmVycy5nZXQoZXZlbnQpID8/IFtdO1xuXHRcdHBhcmFtcy5wdXNoKG9wdHMpO1xuXHRcdHRoaXMuX3N1YnNjcmliZXJzLnNldChldmVudCwgcGFyYW1zKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTdWJzY3JpYmUgdG8gYW4gZXZlbnRcblx0ICogQHBhcmFtIGV2ZW50IC0gVGhlIGV2ZW50IG5hbWVcblx0ICogQHBhcmFtIGNiIC0gVGhlIGNhbGxiYWNrXG5cdCAqL1xuXHRwdWJsaWMgb248VCBleHRlbmRzIGtleW9mIENsYWNrRXZlbnRzPFRWYWx1ZT4+KGV2ZW50OiBULCBjYjogQ2xhY2tFdmVudHM8VFZhbHVlPltUXSkge1xuXHRcdHRoaXMuc2V0U3Vic2NyaWJlcihldmVudCwgeyBjYiB9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTdWJzY3JpYmUgdG8gYW4gZXZlbnQgb25jZVxuXHQgKiBAcGFyYW0gZXZlbnQgLSBUaGUgZXZlbnQgbmFtZVxuXHQgKiBAcGFyYW0gY2IgLSBUaGUgY2FsbGJhY2tcblx0ICovXG5cdHB1YmxpYyBvbmNlPFQgZXh0ZW5kcyBrZXlvZiBDbGFja0V2ZW50czxUVmFsdWU+PihldmVudDogVCwgY2I6IENsYWNrRXZlbnRzPFRWYWx1ZT5bVF0pIHtcblx0XHR0aGlzLnNldFN1YnNjcmliZXIoZXZlbnQsIHsgY2IsIG9uY2U6IHRydWUgfSk7XG5cdH1cblxuXHQvKipcblx0ICogRW1pdCBhbiBldmVudCB3aXRoIGRhdGFcblx0ICogQHBhcmFtIGV2ZW50IC0gVGhlIGV2ZW50IG5hbWVcblx0ICogQHBhcmFtIGRhdGEgLSBUaGUgZGF0YSB0byBwYXNzIHRvIHRoZSBjYWxsYmFja1xuXHQgKi9cblx0cHVibGljIGVtaXQ8VCBleHRlbmRzIGtleW9mIENsYWNrRXZlbnRzPFRWYWx1ZT4+KFxuXHRcdGV2ZW50OiBULFxuXHRcdC4uLmRhdGE6IFBhcmFtZXRlcnM8Q2xhY2tFdmVudHM8VFZhbHVlPltUXT5cblx0KSB7XG5cdFx0Y29uc3QgY2JzID0gdGhpcy5fc3Vic2NyaWJlcnMuZ2V0KGV2ZW50KSA/PyBbXTtcblx0XHRjb25zdCBjbGVhbnVwOiAoKCkgPT4gdm9pZClbXSA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBzdWJzY3JpYmVyIG9mIGNicykge1xuXHRcdFx0c3Vic2NyaWJlci5jYiguLi5kYXRhKTtcblxuXHRcdFx0aWYgKHN1YnNjcmliZXIub25jZSkge1xuXHRcdFx0XHRjbGVhbnVwLnB1c2goKCkgPT4gY2JzLnNwbGljZShjYnMuaW5kZXhPZihzdWJzY3JpYmVyKSwgMSkpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGZvciAoY29uc3QgY2Igb2YgY2xlYW51cCkge1xuXHRcdFx0Y2IoKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgcHJvbXB0KCkge1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZTxUVmFsdWUgfCBzeW1ib2wgfCB1bmRlZmluZWQ+KChyZXNvbHZlKSA9PiB7XG5cdFx0XHRpZiAodGhpcy5fYWJvcnRTaWduYWwpIHtcblx0XHRcdFx0aWYgKHRoaXMuX2Fib3J0U2lnbmFsLmFib3J0ZWQpIHtcblx0XHRcdFx0XHR0aGlzLnN0YXRlID0gJ2NhbmNlbCc7XG5cblx0XHRcdFx0XHR0aGlzLmNsb3NlKCk7XG5cdFx0XHRcdFx0cmV0dXJuIHJlc29sdmUoQ0FOQ0VMX1NZTUJPTCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0aGlzLl9hYm9ydFNpZ25hbC5hZGRFdmVudExpc3RlbmVyKFxuXHRcdFx0XHRcdCdhYm9ydCcsXG5cdFx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5zdGF0ZSA9ICdjYW5jZWwnO1xuXHRcdFx0XHRcdFx0dGhpcy5jbG9zZSgpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0eyBvbmNlOiB0cnVlIH1cblx0XHRcdFx0KTtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5ybCA9IHJlYWRsaW5lLmNyZWF0ZUludGVyZmFjZSh7XG5cdFx0XHRcdGlucHV0OiB0aGlzLmlucHV0LFxuXHRcdFx0XHR0YWJTaXplOiAyLFxuXHRcdFx0XHRwcm9tcHQ6ICcnLFxuXHRcdFx0XHRlc2NhcGVDb2RlVGltZW91dDogNTAsXG5cdFx0XHRcdHRlcm1pbmFsOiB0cnVlLFxuXHRcdFx0fSk7XG5cdFx0XHR0aGlzLnJsLnByb21wdCgpO1xuXG5cdFx0XHRpZiAodGhpcy5vcHRzLmluaXRpYWxVc2VySW5wdXQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHR0aGlzLl9zZXRVc2VySW5wdXQodGhpcy5vcHRzLmluaXRpYWxVc2VySW5wdXQsIHRydWUpO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLmlucHV0Lm9uKCdrZXlwcmVzcycsIHRoaXMub25LZXlwcmVzcyk7XG5cdFx0XHRzZXRSYXdNb2RlKHRoaXMuaW5wdXQsIHRydWUpO1xuXHRcdFx0dGhpcy5vdXRwdXQub24oJ3Jlc2l6ZScsIHRoaXMucmVuZGVyKTtcblxuXHRcdFx0dGhpcy5yZW5kZXIoKTtcblxuXHRcdFx0dGhpcy5vbmNlKCdzdWJtaXQnLCAoKSA9PiB7XG5cdFx0XHRcdHRoaXMub3V0cHV0LndyaXRlKGN1cnNvci5zaG93KTtcblx0XHRcdFx0dGhpcy5vdXRwdXQub2ZmKCdyZXNpemUnLCB0aGlzLnJlbmRlcik7XG5cdFx0XHRcdHNldFJhd01vZGUodGhpcy5pbnB1dCwgZmFsc2UpO1xuXHRcdFx0XHRyZXNvbHZlKHRoaXMudmFsdWUpO1xuXHRcdFx0fSk7XG5cdFx0XHR0aGlzLm9uY2UoJ2NhbmNlbCcsICgpID0+IHtcblx0XHRcdFx0dGhpcy5vdXRwdXQud3JpdGUoY3Vyc29yLnNob3cpO1xuXHRcdFx0XHR0aGlzLm91dHB1dC5vZmYoJ3Jlc2l6ZScsIHRoaXMucmVuZGVyKTtcblx0XHRcdFx0c2V0UmF3TW9kZSh0aGlzLmlucHV0LCBmYWxzZSk7XG5cdFx0XHRcdHJlc29sdmUoQ0FOQ0VMX1NZTUJPTCk7XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fVxuXG5cdHByb3RlY3RlZCBfaXNBY3Rpb25LZXkoY2hhcjogc3RyaW5nIHwgdW5kZWZpbmVkLCBfa2V5OiBLZXkpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gY2hhciA9PT0gJ1xcdCc7XG5cdH1cblxuXHRwcm90ZWN0ZWQgX3NldFZhbHVlKHZhbHVlOiBUVmFsdWUgfCB1bmRlZmluZWQpOiB2b2lkIHtcblx0XHR0aGlzLnZhbHVlID0gdmFsdWU7XG5cdFx0dGhpcy5lbWl0KCd2YWx1ZScsIHRoaXMudmFsdWUpO1xuXHR9XG5cblx0cHJvdGVjdGVkIF9zZXRVc2VySW5wdXQodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCwgd3JpdGU/OiBib29sZWFuKTogdm9pZCB7XG5cdFx0dGhpcy51c2VySW5wdXQgPSB2YWx1ZSA/PyAnJztcblx0XHR0aGlzLmVtaXQoJ3VzZXJJbnB1dCcsIHRoaXMudXNlcklucHV0KTtcblx0XHRpZiAod3JpdGUgJiYgdGhpcy5fdHJhY2sgJiYgdGhpcy5ybCkge1xuXHRcdFx0dGhpcy5ybC53cml0ZSh0aGlzLnVzZXJJbnB1dCk7XG5cdFx0XHR0aGlzLl9jdXJzb3IgPSB0aGlzLnJsLmN1cnNvcjtcblx0XHR9XG5cdH1cblxuXHRwcm90ZWN0ZWQgX2NsZWFyVXNlcklucHV0KCk6IHZvaWQge1xuXHRcdHRoaXMucmw/LndyaXRlKG51bGwsIHsgY3RybDogdHJ1ZSwgbmFtZTogJ3UnIH0pO1xuXHRcdHRoaXMuX3NldFVzZXJJbnB1dCgnJyk7XG5cdH1cblxuXHRwcml2YXRlIG9uS2V5cHJlc3MoY2hhcjogc3RyaW5nIHwgdW5kZWZpbmVkLCBrZXk6IEtleSkge1xuXHRcdGlmICh0aGlzLl90cmFjayAmJiBrZXkubmFtZSAhPT0gJ3JldHVybicpIHtcblx0XHRcdGlmIChrZXkubmFtZSAmJiB0aGlzLl9pc0FjdGlvbktleShjaGFyLCBrZXkpKSB7XG5cdFx0XHRcdHRoaXMucmw/LndyaXRlKG51bGwsIHsgY3RybDogdHJ1ZSwgbmFtZTogJ2gnIH0pO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5fY3Vyc29yID0gdGhpcy5ybD8uY3Vyc29yID8/IDA7XG5cdFx0XHR0aGlzLl9zZXRVc2VySW5wdXQodGhpcy5ybD8ubGluZSk7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuc3RhdGUgPT09ICdlcnJvcicpIHtcblx0XHRcdHRoaXMuc3RhdGUgPSAnYWN0aXZlJztcblx0XHR9XG5cdFx0aWYgKGtleT8ubmFtZSkge1xuXHRcdFx0aWYgKCF0aGlzLl90cmFjayAmJiBzZXR0aW5ncy5hbGlhc2VzLmhhcyhrZXkubmFtZSkpIHtcblx0XHRcdFx0dGhpcy5lbWl0KCdjdXJzb3InLCBzZXR0aW5ncy5hbGlhc2VzLmdldChrZXkubmFtZSkpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHNldHRpbmdzLmFjdGlvbnMuaGFzKGtleS5uYW1lIGFzIEFjdGlvbikpIHtcblx0XHRcdFx0dGhpcy5lbWl0KCdjdXJzb3InLCBrZXkubmFtZSBhcyBBY3Rpb24pO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoY2hhciAmJiAoY2hhci50b0xvd2VyQ2FzZSgpID09PSAneScgfHwgY2hhci50b0xvd2VyQ2FzZSgpID09PSAnbicpKSB7XG5cdFx0XHR0aGlzLmVtaXQoJ2NvbmZpcm0nLCBjaGFyLnRvTG93ZXJDYXNlKCkgPT09ICd5Jyk7XG5cdFx0fVxuXG5cdFx0Ly8gQ2FsbCB0aGUga2V5IGV2ZW50IGhhbmRsZXIgYW5kIGVtaXQgdGhlIGtleSBldmVudFxuXHRcdHRoaXMuZW1pdCgna2V5JywgY2hhcj8udG9Mb3dlckNhc2UoKSwga2V5KTtcblxuXHRcdGlmIChrZXk/Lm5hbWUgPT09ICdyZXR1cm4nKSB7XG5cdFx0XHRpZiAodGhpcy5vcHRzLnZhbGlkYXRlKSB7XG5cdFx0XHRcdGNvbnN0IHByb2JsZW0gPSB0aGlzLm9wdHMudmFsaWRhdGUodGhpcy52YWx1ZSk7XG5cdFx0XHRcdGlmIChwcm9ibGVtKSB7XG5cdFx0XHRcdFx0dGhpcy5lcnJvciA9IHByb2JsZW0gaW5zdGFuY2VvZiBFcnJvciA/IHByb2JsZW0ubWVzc2FnZSA6IHByb2JsZW07XG5cdFx0XHRcdFx0dGhpcy5zdGF0ZSA9ICdlcnJvcic7XG5cdFx0XHRcdFx0dGhpcy5ybD8ud3JpdGUodGhpcy51c2VySW5wdXQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAodGhpcy5zdGF0ZSAhPT0gJ2Vycm9yJykge1xuXHRcdFx0XHR0aGlzLnN0YXRlID0gJ3N1Ym1pdCc7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGlzQWN0aW9uS2V5KFtjaGFyLCBrZXk/Lm5hbWUsIGtleT8uc2VxdWVuY2VdLCAnY2FuY2VsJykpIHtcblx0XHRcdHRoaXMuc3RhdGUgPSAnY2FuY2VsJztcblx0XHR9XG5cblx0XHRpZiAodGhpcy5zdGF0ZSA9PT0gJ3N1Ym1pdCcgfHwgdGhpcy5zdGF0ZSA9PT0gJ2NhbmNlbCcpIHtcblx0XHRcdHRoaXMuZW1pdCgnZmluYWxpemUnKTtcblx0XHR9XG5cdFx0dGhpcy5yZW5kZXIoKTtcblx0XHRpZiAodGhpcy5zdGF0ZSA9PT0gJ3N1Ym1pdCcgfHwgdGhpcy5zdGF0ZSA9PT0gJ2NhbmNlbCcpIHtcblx0XHRcdHRoaXMuY2xvc2UoKTtcblx0XHR9XG5cdH1cblxuXHRwcm90ZWN0ZWQgY2xvc2UoKSB7XG5cdFx0dGhpcy5pbnB1dC51bnBpcGUoKTtcblx0XHR0aGlzLmlucHV0LnJlbW92ZUxpc3RlbmVyKCdrZXlwcmVzcycsIHRoaXMub25LZXlwcmVzcyk7XG5cdFx0dGhpcy5vdXRwdXQud3JpdGUoJ1xcbicpO1xuXHRcdHNldFJhd01vZGUodGhpcy5pbnB1dCwgZmFsc2UpO1xuXHRcdHRoaXMucmw/LmNsb3NlKCk7XG5cdFx0dGhpcy5ybCA9IHVuZGVmaW5lZDtcblx0XHR0aGlzLmVtaXQoYCR7dGhpcy5zdGF0ZX1gLCB0aGlzLnZhbHVlKTtcblx0XHR0aGlzLnVuc3Vic2NyaWJlKCk7XG5cdH1cblxuXHRwcml2YXRlIHJlc3RvcmVDdXJzb3IoKSB7XG5cdFx0Y29uc3QgbGluZXMgPVxuXHRcdFx0d3JhcEFuc2kodGhpcy5fcHJldkZyYW1lLCBwcm9jZXNzLnN0ZG91dC5jb2x1bW5zLCB7IGhhcmQ6IHRydWUsIHRyaW06IGZhbHNlIH0pLnNwbGl0KCdcXG4nKVxuXHRcdFx0XHQubGVuZ3RoIC0gMTtcblx0XHR0aGlzLm91dHB1dC53cml0ZShjdXJzb3IubW92ZSgtOTk5LCBsaW5lcyAqIC0xKSk7XG5cdH1cblxuXHRwcml2YXRlIHJlbmRlcigpIHtcblx0XHRjb25zdCBmcmFtZSA9IHdyYXBBbnNpKHRoaXMuX3JlbmRlcih0aGlzKSA/PyAnJywgcHJvY2Vzcy5zdGRvdXQuY29sdW1ucywge1xuXHRcdFx0aGFyZDogdHJ1ZSxcblx0XHRcdHRyaW06IGZhbHNlLFxuXHRcdH0pO1xuXHRcdGlmIChmcmFtZSA9PT0gdGhpcy5fcHJldkZyYW1lKSByZXR1cm47XG5cblx0XHRpZiAodGhpcy5zdGF0ZSA9PT0gJ2luaXRpYWwnKSB7XG5cdFx0XHR0aGlzLm91dHB1dC53cml0ZShjdXJzb3IuaGlkZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IGRpZmYgPSBkaWZmTGluZXModGhpcy5fcHJldkZyYW1lLCBmcmFtZSk7XG5cdFx0XHRjb25zdCByb3dzID0gZ2V0Um93cyh0aGlzLm91dHB1dCk7XG5cdFx0XHR0aGlzLnJlc3RvcmVDdXJzb3IoKTtcblx0XHRcdGlmIChkaWZmKSB7XG5cdFx0XHRcdGNvbnN0IGRpZmZPZmZzZXRBZnRlciA9IE1hdGgubWF4KDAsIGRpZmYubnVtTGluZXNBZnRlciAtIHJvd3MpO1xuXHRcdFx0XHRjb25zdCBkaWZmT2Zmc2V0QmVmb3JlID0gTWF0aC5tYXgoMCwgZGlmZi5udW1MaW5lc0JlZm9yZSAtIHJvd3MpO1xuXHRcdFx0XHRsZXQgZGlmZkxpbmUgPSBkaWZmLmxpbmVzLmZpbmQoKGxpbmUpID0+IGxpbmUgPj0gZGlmZk9mZnNldEFmdGVyKTtcblxuXHRcdFx0XHRpZiAoZGlmZkxpbmUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdHRoaXMuX3ByZXZGcmFtZSA9IGZyYW1lO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIElmIGEgc2luZ2xlIGxpbmUgaGFzIGNoYW5nZWQsIG9ubHkgdXBkYXRlIHRoYXQgbGluZVxuXHRcdFx0XHRpZiAoZGlmZi5saW5lcy5sZW5ndGggPT09IDEpIHtcblx0XHRcdFx0XHR0aGlzLm91dHB1dC53cml0ZShjdXJzb3IubW92ZSgwLCBkaWZmTGluZSAtIGRpZmZPZmZzZXRCZWZvcmUpKTtcblx0XHRcdFx0XHR0aGlzLm91dHB1dC53cml0ZShlcmFzZS5saW5lcygxKSk7XG5cdFx0XHRcdFx0Y29uc3QgbGluZXMgPSBmcmFtZS5zcGxpdCgnXFxuJyk7XG5cdFx0XHRcdFx0dGhpcy5vdXRwdXQud3JpdGUobGluZXNbZGlmZkxpbmVdKTtcblx0XHRcdFx0XHR0aGlzLl9wcmV2RnJhbWUgPSBmcmFtZTtcblx0XHRcdFx0XHR0aGlzLm91dHB1dC53cml0ZShjdXJzb3IubW92ZSgwLCBsaW5lcy5sZW5ndGggLSBkaWZmTGluZSAtIDEpKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0Ly8gSWYgbWFueSBsaW5lcyBoYXZlIGNoYW5nZWQsIHJlcmVuZGVyIGV2ZXJ5dGhpbmcgcGFzdCB0aGUgZmlyc3QgbGluZVxuXHRcdFx0XHR9IGVsc2UgaWYgKGRpZmYubGluZXMubGVuZ3RoID4gMSkge1xuXHRcdFx0XHRcdGlmIChkaWZmT2Zmc2V0QWZ0ZXIgPCBkaWZmT2Zmc2V0QmVmb3JlKSB7XG5cdFx0XHRcdFx0XHRkaWZmTGluZSA9IGRpZmZPZmZzZXRBZnRlcjtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Y29uc3QgYWRqdXN0ZWREaWZmTGluZSA9IGRpZmZMaW5lIC0gZGlmZk9mZnNldEJlZm9yZTtcblx0XHRcdFx0XHRcdGlmIChhZGp1c3RlZERpZmZMaW5lID4gMCkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLm91dHB1dC53cml0ZShjdXJzb3IubW92ZSgwLCBhZGp1c3RlZERpZmZMaW5lKSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHRoaXMub3V0cHV0LndyaXRlKGVyYXNlLmRvd24oKSk7XG5cdFx0XHRcdFx0Y29uc3QgbGluZXMgPSBmcmFtZS5zcGxpdCgnXFxuJyk7XG5cdFx0XHRcdFx0Y29uc3QgbmV3TGluZXMgPSBsaW5lcy5zbGljZShkaWZmTGluZSk7XG5cdFx0XHRcdFx0dGhpcy5vdXRwdXQud3JpdGUobmV3TGluZXMuam9pbignXFxuJykpO1xuXHRcdFx0XHRcdHRoaXMuX3ByZXZGcmFtZSA9IGZyYW1lO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLm91dHB1dC53cml0ZShlcmFzZS5kb3duKCkpO1xuXHRcdH1cblxuXHRcdHRoaXMub3V0cHV0LndyaXRlKGZyYW1lKTtcblx0XHRpZiAodGhpcy5zdGF0ZSA9PT0gJ2luaXRpYWwnKSB7XG5cdFx0XHR0aGlzLnN0YXRlID0gJ2FjdGl2ZSc7XG5cdFx0fVxuXHRcdHRoaXMuX3ByZXZGcmFtZSA9IGZyYW1lO1xuXHR9XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBLZXkgfSBmcm9tICdub2RlOnJlYWRsaW5lJztcbmltcG9ydCBjb2xvciBmcm9tICdwaWNvY29sb3JzJztcbmltcG9ydCB7IGZpbmRDdXJzb3IgfSBmcm9tICcuLi91dGlscy9jdXJzb3IuanMnO1xuaW1wb3J0IFByb21wdCwgeyB0eXBlIFByb21wdE9wdGlvbnMgfSBmcm9tICcuL3Byb21wdC5qcyc7XG5cbmludGVyZmFjZSBPcHRpb25MaWtlIHtcblx0dmFsdWU6IHVua25vd247XG5cdGxhYmVsPzogc3RyaW5nO1xuXHRkaXNhYmxlZD86IGJvb2xlYW47XG59XG5cbnR5cGUgRmlsdGVyRnVuY3Rpb248VCBleHRlbmRzIE9wdGlvbkxpa2U+ID0gKHNlYXJjaDogc3RyaW5nLCBvcHQ6IFQpID0+IGJvb2xlYW47XG5cbmZ1bmN0aW9uIGdldEN1cnNvckZvclZhbHVlPFQgZXh0ZW5kcyBPcHRpb25MaWtlPihcblx0c2VsZWN0ZWQ6IFRbJ3ZhbHVlJ10gfCB1bmRlZmluZWQsXG5cdGl0ZW1zOiBUW11cbik6IG51bWJlciB7XG5cdGlmIChzZWxlY3RlZCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIDA7XG5cdH1cblxuXHRjb25zdCBjdXJyTGVuZ3RoID0gaXRlbXMubGVuZ3RoO1xuXG5cdC8vIElmIGZpbHRlcmluZyBjaGFuZ2VkIHRoZSBhdmFpbGFibGUgb3B0aW9ucywgdXBkYXRlIGN1cnNvclxuXHRpZiAoY3Vyckxlbmd0aCA9PT0gMCkge1xuXHRcdHJldHVybiAwO1xuXHR9XG5cblx0Ly8gVHJ5IHRvIG1haW50YWluIHRoZSBzYW1lIHNlbGVjdGVkIGl0ZW1cblx0Y29uc3QgaW5kZXggPSBpdGVtcy5maW5kSW5kZXgoKGl0ZW0pID0+IGl0ZW0udmFsdWUgPT09IHNlbGVjdGVkKTtcblx0cmV0dXJuIGluZGV4ICE9PSAtMSA/IGluZGV4IDogMDtcbn1cblxuZnVuY3Rpb24gZGVmYXVsdEZpbHRlcjxUIGV4dGVuZHMgT3B0aW9uTGlrZT4oaW5wdXQ6IHN0cmluZywgb3B0aW9uOiBUKTogYm9vbGVhbiB7XG5cdGNvbnN0IGxhYmVsID0gb3B0aW9uLmxhYmVsID8/IFN0cmluZyhvcHRpb24udmFsdWUpO1xuXHRyZXR1cm4gbGFiZWwudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhpbnB1dC50b0xvd2VyQ2FzZSgpKTtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXNlZFZhbHVlPFQ+KG11bHRpcGxlOiBib29sZWFuLCB2YWx1ZXM6IFRbXSB8IHVuZGVmaW5lZCk6IFQgfCBUW10gfCB1bmRlZmluZWQge1xuXHRpZiAoIXZhbHVlcykge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblx0aWYgKG11bHRpcGxlKSB7XG5cdFx0cmV0dXJuIHZhbHVlcztcblx0fVxuXHRyZXR1cm4gdmFsdWVzWzBdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEF1dG9jb21wbGV0ZU9wdGlvbnM8VCBleHRlbmRzIE9wdGlvbkxpa2U+XG5cdGV4dGVuZHMgUHJvbXB0T3B0aW9uczxUWyd2YWx1ZSddIHwgVFsndmFsdWUnXVtdLCBBdXRvY29tcGxldGVQcm9tcHQ8VD4+IHtcblx0b3B0aW9uczogVFtdIHwgKCh0aGlzOiBBdXRvY29tcGxldGVQcm9tcHQ8VD4pID0+IFRbXSk7XG5cdGZpbHRlcj86IEZpbHRlckZ1bmN0aW9uPFQ+O1xuXHRtdWx0aXBsZT86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEF1dG9jb21wbGV0ZVByb21wdDxUIGV4dGVuZHMgT3B0aW9uTGlrZT4gZXh0ZW5kcyBQcm9tcHQ8XG5cdFRbJ3ZhbHVlJ10gfCBUWyd2YWx1ZSddW11cbj4ge1xuXHRmaWx0ZXJlZE9wdGlvbnM6IFRbXTtcblx0bXVsdGlwbGU6IGJvb2xlYW47XG5cdGlzTmF2aWdhdGluZyA9IGZhbHNlO1xuXHRzZWxlY3RlZFZhbHVlczogQXJyYXk8VFsndmFsdWUnXT4gPSBbXTtcblxuXHRmb2N1c2VkVmFsdWU6IFRbJ3ZhbHVlJ10gfCB1bmRlZmluZWQ7XG5cdCNjdXJzb3IgPSAwO1xuXHQjbGFzdFVzZXJJbnB1dCA9ICcnO1xuXHQjZmlsdGVyRm46IEZpbHRlckZ1bmN0aW9uPFQ+O1xuXHQjb3B0aW9uczogVFtdIHwgKCgpID0+IFRbXSk7XG5cblx0Z2V0IGN1cnNvcigpOiBudW1iZXIge1xuXHRcdHJldHVybiB0aGlzLiNjdXJzb3I7XG5cdH1cblxuXHRnZXQgdXNlcklucHV0V2l0aEN1cnNvcigpIHtcblx0XHRpZiAoIXRoaXMudXNlcklucHV0KSB7XG5cdFx0XHRyZXR1cm4gY29sb3IuaW52ZXJzZShjb2xvci5oaWRkZW4oJ18nKSk7XG5cdFx0fVxuXHRcdGlmICh0aGlzLl9jdXJzb3IgPj0gdGhpcy51c2VySW5wdXQubGVuZ3RoKSB7XG5cdFx0XHRyZXR1cm4gYCR7dGhpcy51c2VySW5wdXR94paIYDtcblx0XHR9XG5cdFx0Y29uc3QgczEgPSB0aGlzLnVzZXJJbnB1dC5zbGljZSgwLCB0aGlzLl9jdXJzb3IpO1xuXHRcdGNvbnN0IFtzMiwgLi4uczNdID0gdGhpcy51c2VySW5wdXQuc2xpY2UodGhpcy5fY3Vyc29yKTtcblx0XHRyZXR1cm4gYCR7czF9JHtjb2xvci5pbnZlcnNlKHMyKX0ke3MzLmpvaW4oJycpfWA7XG5cdH1cblxuXHRnZXQgb3B0aW9ucygpOiBUW10ge1xuXHRcdGlmICh0eXBlb2YgdGhpcy4jb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0cmV0dXJuIHRoaXMuI29wdGlvbnMoKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuI29wdGlvbnM7XG5cdH1cblxuXHRjb25zdHJ1Y3RvcihvcHRzOiBBdXRvY29tcGxldGVPcHRpb25zPFQ+KSB7XG5cdFx0c3VwZXIob3B0cyk7XG5cblx0XHR0aGlzLiNvcHRpb25zID0gb3B0cy5vcHRpb25zO1xuXHRcdGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG5cdFx0dGhpcy5maWx0ZXJlZE9wdGlvbnMgPSBbLi4ub3B0aW9uc107XG5cdFx0dGhpcy5tdWx0aXBsZSA9IG9wdHMubXVsdGlwbGUgPT09IHRydWU7XG5cdFx0dGhpcy4jZmlsdGVyRm4gPSBvcHRzLmZpbHRlciA/PyBkZWZhdWx0RmlsdGVyO1xuXHRcdGxldCBpbml0aWFsVmFsdWVzOiB1bmtub3duW10gfCB1bmRlZmluZWQ7XG5cdFx0aWYgKG9wdHMuaW5pdGlhbFZhbHVlICYmIEFycmF5LmlzQXJyYXkob3B0cy5pbml0aWFsVmFsdWUpKSB7XG5cdFx0XHRpZiAodGhpcy5tdWx0aXBsZSkge1xuXHRcdFx0XHRpbml0aWFsVmFsdWVzID0gb3B0cy5pbml0aWFsVmFsdWU7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpbml0aWFsVmFsdWVzID0gb3B0cy5pbml0aWFsVmFsdWUuc2xpY2UoMCwgMSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmICghdGhpcy5tdWx0aXBsZSAmJiB0aGlzLm9wdGlvbnMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRpbml0aWFsVmFsdWVzID0gW3RoaXMub3B0aW9uc1swXS52YWx1ZV07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGluaXRpYWxWYWx1ZXMpIHtcblx0XHRcdGZvciAoY29uc3Qgc2VsZWN0ZWRWYWx1ZSBvZiBpbml0aWFsVmFsdWVzKSB7XG5cdFx0XHRcdGNvbnN0IHNlbGVjdGVkSW5kZXggPSBvcHRpb25zLmZpbmRJbmRleCgob3B0KSA9PiBvcHQudmFsdWUgPT09IHNlbGVjdGVkVmFsdWUpO1xuXHRcdFx0XHRpZiAoc2VsZWN0ZWRJbmRleCAhPT0gLTEpIHtcblx0XHRcdFx0XHR0aGlzLnRvZ2dsZVNlbGVjdGVkKHNlbGVjdGVkVmFsdWUpO1xuXHRcdFx0XHRcdHRoaXMuI2N1cnNvciA9IHNlbGVjdGVkSW5kZXg7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHR0aGlzLmZvY3VzZWRWYWx1ZSA9IHRoaXMub3B0aW9uc1t0aGlzLiNjdXJzb3JdPy52YWx1ZTtcblxuXHRcdHRoaXMub24oJ2tleScsIChjaGFyLCBrZXkpID0+IHRoaXMuI29uS2V5KGNoYXIsIGtleSkpO1xuXHRcdHRoaXMub24oJ3VzZXJJbnB1dCcsICh2YWx1ZSkgPT4gdGhpcy4jb25Vc2VySW5wdXRDaGFuZ2VkKHZhbHVlKSk7XG5cdH1cblxuXHRwcm90ZWN0ZWQgb3ZlcnJpZGUgX2lzQWN0aW9uS2V5KGNoYXI6IHN0cmluZyB8IHVuZGVmaW5lZCwga2V5OiBLZXkpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0Y2hhciA9PT0gJ1xcdCcgfHxcblx0XHRcdCh0aGlzLm11bHRpcGxlICYmXG5cdFx0XHRcdHRoaXMuaXNOYXZpZ2F0aW5nICYmXG5cdFx0XHRcdGtleS5uYW1lID09PSAnc3BhY2UnICYmXG5cdFx0XHRcdGNoYXIgIT09IHVuZGVmaW5lZCAmJlxuXHRcdFx0XHRjaGFyICE9PSAnJylcblx0XHQpO1xuXHR9XG5cblx0I29uS2V5KF9jaGFyOiBzdHJpbmcgfCB1bmRlZmluZWQsIGtleTogS2V5KTogdm9pZCB7XG5cdFx0Y29uc3QgaXNVcEtleSA9IGtleS5uYW1lID09PSAndXAnO1xuXHRcdGNvbnN0IGlzRG93bktleSA9IGtleS5uYW1lID09PSAnZG93bic7XG5cdFx0Y29uc3QgaXNSZXR1cm5LZXkgPSBrZXkubmFtZSA9PT0gJ3JldHVybic7XG5cblx0XHQvLyBTdGFydCBuYXZpZ2F0aW9uIG1vZGUgd2l0aCB1cC9kb3duIGFycm93c1xuXHRcdGlmIChpc1VwS2V5IHx8IGlzRG93bktleSkge1xuXHRcdFx0dGhpcy4jY3Vyc29yID0gZmluZEN1cnNvcih0aGlzLiNjdXJzb3IsIGlzVXBLZXkgPyAtMSA6IDEsIHRoaXMuZmlsdGVyZWRPcHRpb25zKTtcblx0XHRcdHRoaXMuZm9jdXNlZFZhbHVlID0gdGhpcy5maWx0ZXJlZE9wdGlvbnNbdGhpcy4jY3Vyc29yXT8udmFsdWU7XG5cdFx0XHRpZiAoIXRoaXMubXVsdGlwbGUpIHtcblx0XHRcdFx0dGhpcy5zZWxlY3RlZFZhbHVlcyA9IFt0aGlzLmZvY3VzZWRWYWx1ZV07XG5cdFx0XHR9XG5cdFx0XHR0aGlzLmlzTmF2aWdhdGluZyA9IHRydWU7XG5cdFx0fSBlbHNlIGlmIChpc1JldHVybktleSkge1xuXHRcdFx0dGhpcy52YWx1ZSA9IG5vcm1hbGlzZWRWYWx1ZSh0aGlzLm11bHRpcGxlLCB0aGlzLnNlbGVjdGVkVmFsdWVzKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKHRoaXMubXVsdGlwbGUpIHtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdHRoaXMuZm9jdXNlZFZhbHVlICE9PSB1bmRlZmluZWQgJiZcblx0XHRcdFx0XHQoa2V5Lm5hbWUgPT09ICd0YWInIHx8ICh0aGlzLmlzTmF2aWdhdGluZyAmJiBrZXkubmFtZSA9PT0gJ3NwYWNlJykpXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHRoaXMudG9nZ2xlU2VsZWN0ZWQodGhpcy5mb2N1c2VkVmFsdWUpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRoaXMuaXNOYXZpZ2F0aW5nID0gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlmICh0aGlzLmZvY3VzZWRWYWx1ZSkge1xuXHRcdFx0XHRcdHRoaXMuc2VsZWN0ZWRWYWx1ZXMgPSBbdGhpcy5mb2N1c2VkVmFsdWVdO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuaXNOYXZpZ2F0aW5nID0gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0ZGVzZWxlY3RBbGwoKSB7XG5cdFx0dGhpcy5zZWxlY3RlZFZhbHVlcyA9IFtdO1xuXHR9XG5cblx0dG9nZ2xlU2VsZWN0ZWQodmFsdWU6IFRbJ3ZhbHVlJ10pIHtcblx0XHRpZiAodGhpcy5maWx0ZXJlZE9wdGlvbnMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMubXVsdGlwbGUpIHtcblx0XHRcdGlmICh0aGlzLnNlbGVjdGVkVmFsdWVzLmluY2x1ZGVzKHZhbHVlKSkge1xuXHRcdFx0XHR0aGlzLnNlbGVjdGVkVmFsdWVzID0gdGhpcy5zZWxlY3RlZFZhbHVlcy5maWx0ZXIoKHYpID0+IHYgIT09IHZhbHVlKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuc2VsZWN0ZWRWYWx1ZXMgPSBbLi4udGhpcy5zZWxlY3RlZFZhbHVlcywgdmFsdWVdO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNlbGVjdGVkVmFsdWVzID0gW3ZhbHVlXTtcblx0XHR9XG5cdH1cblxuXHQjb25Vc2VySW5wdXRDaGFuZ2VkKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcblx0XHRpZiAodmFsdWUgIT09IHRoaXMuI2xhc3RVc2VySW5wdXQpIHtcblx0XHRcdHRoaXMuI2xhc3RVc2VySW5wdXQgPSB2YWx1ZTtcblxuXHRcdFx0Y29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcblxuXHRcdFx0aWYgKHZhbHVlKSB7XG5cdFx0XHRcdHRoaXMuZmlsdGVyZWRPcHRpb25zID0gb3B0aW9ucy5maWx0ZXIoKG9wdCkgPT4gdGhpcy4jZmlsdGVyRm4odmFsdWUsIG9wdCkpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5maWx0ZXJlZE9wdGlvbnMgPSBbLi4ub3B0aW9uc107XG5cdFx0XHR9XG5cdFx0XHRjb25zdCB2YWx1ZUN1cnNvciA9IGdldEN1cnNvckZvclZhbHVlKHRoaXMuZm9jdXNlZFZhbHVlLCB0aGlzLmZpbHRlcmVkT3B0aW9ucyk7XG5cdFx0XHR0aGlzLiNjdXJzb3IgPSBmaW5kQ3Vyc29yKHZhbHVlQ3Vyc29yLCAwLCB0aGlzLmZpbHRlcmVkT3B0aW9ucyk7XG5cdFx0XHRjb25zdCBmb2N1c2VkT3B0aW9uID0gdGhpcy5maWx0ZXJlZE9wdGlvbnNbdGhpcy4jY3Vyc29yXTtcblx0XHRcdGlmIChmb2N1c2VkT3B0aW9uICYmICFmb2N1c2VkT3B0aW9uLmRpc2FibGVkKSB7XG5cdFx0XHRcdHRoaXMuZm9jdXNlZFZhbHVlID0gZm9jdXNlZE9wdGlvbi52YWx1ZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuZm9jdXNlZFZhbHVlID0gdW5kZWZpbmVkO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCF0aGlzLm11bHRpcGxlKSB7XG5cdFx0XHRcdGlmICh0aGlzLmZvY3VzZWRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0dGhpcy50b2dnbGVTZWxlY3RlZCh0aGlzLmZvY3VzZWRWYWx1ZSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGhpcy5kZXNlbGVjdEFsbCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG4iLCAiaW1wb3J0IHsgY3Vyc29yIH0gZnJvbSAnc2lzdGVyYW5zaSc7XG5pbXBvcnQgUHJvbXB0LCB7IHR5cGUgUHJvbXB0T3B0aW9ucyB9IGZyb20gJy4vcHJvbXB0LmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBDb25maXJtT3B0aW9ucyBleHRlbmRzIFByb21wdE9wdGlvbnM8Ym9vbGVhbiwgQ29uZmlybVByb21wdD4ge1xuXHRhY3RpdmU6IHN0cmluZztcblx0aW5hY3RpdmU6IHN0cmluZztcblx0aW5pdGlhbFZhbHVlPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29uZmlybVByb21wdCBleHRlbmRzIFByb21wdDxib29sZWFuPiB7XG5cdGdldCBjdXJzb3IoKSB7XG5cdFx0cmV0dXJuIHRoaXMudmFsdWUgPyAwIDogMTtcblx0fVxuXG5cdHByaXZhdGUgZ2V0IF92YWx1ZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5jdXJzb3IgPT09IDA7XG5cdH1cblxuXHRjb25zdHJ1Y3RvcihvcHRzOiBDb25maXJtT3B0aW9ucykge1xuXHRcdHN1cGVyKG9wdHMsIGZhbHNlKTtcblx0XHR0aGlzLnZhbHVlID0gISFvcHRzLmluaXRpYWxWYWx1ZTtcblxuXHRcdHRoaXMub24oJ3VzZXJJbnB1dCcsICgpID0+IHtcblx0XHRcdHRoaXMudmFsdWUgPSB0aGlzLl92YWx1ZTtcblx0XHR9KTtcblxuXHRcdHRoaXMub24oJ2NvbmZpcm0nLCAoY29uZmlybSkgPT4ge1xuXHRcdFx0dGhpcy5vdXRwdXQud3JpdGUoY3Vyc29yLm1vdmUoMCwgLTEpKTtcblx0XHRcdHRoaXMudmFsdWUgPSBjb25maXJtO1xuXHRcdFx0dGhpcy5zdGF0ZSA9ICdzdWJtaXQnO1xuXHRcdFx0dGhpcy5jbG9zZSgpO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5vbignY3Vyc29yJywgKCkgPT4ge1xuXHRcdFx0dGhpcy52YWx1ZSA9ICF0aGlzLnZhbHVlO1xuXHRcdH0pO1xuXHR9XG59XG4iLCAiaW1wb3J0IFByb21wdCwgeyB0eXBlIFByb21wdE9wdGlvbnMgfSBmcm9tICcuL3Byb21wdC5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgR3JvdXBNdWx0aVNlbGVjdE9wdGlvbnM8VCBleHRlbmRzIHsgdmFsdWU6IGFueSB9PlxuXHRleHRlbmRzIFByb21wdE9wdGlvbnM8VFsndmFsdWUnXVtdLCBHcm91cE11bHRpU2VsZWN0UHJvbXB0PFQ+PiB7XG5cdG9wdGlvbnM6IFJlY29yZDxzdHJpbmcsIFRbXT47XG5cdGluaXRpYWxWYWx1ZXM/OiBUWyd2YWx1ZSddW107XG5cdHJlcXVpcmVkPzogYm9vbGVhbjtcblx0Y3Vyc29yQXQ/OiBUWyd2YWx1ZSddO1xuXHRzZWxlY3RhYmxlR3JvdXBzPzogYm9vbGVhbjtcbn1cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEdyb3VwTXVsdGlTZWxlY3RQcm9tcHQ8VCBleHRlbmRzIHsgdmFsdWU6IGFueSB9PiBleHRlbmRzIFByb21wdDxUWyd2YWx1ZSddW10+IHtcblx0b3B0aW9uczogKFQgJiB7IGdyb3VwOiBzdHJpbmcgfCBib29sZWFuIH0pW107XG5cdGN1cnNvciA9IDA7XG5cdCNzZWxlY3RhYmxlR3JvdXBzOiBib29sZWFuO1xuXG5cdGdldEdyb3VwSXRlbXMoZ3JvdXA6IHN0cmluZyk6IFRbXSB7XG5cdFx0cmV0dXJuIHRoaXMub3B0aW9ucy5maWx0ZXIoKG8pID0+IG8uZ3JvdXAgPT09IGdyb3VwKTtcblx0fVxuXG5cdGlzR3JvdXBTZWxlY3RlZChncm91cDogc3RyaW5nKSB7XG5cdFx0Y29uc3QgaXRlbXMgPSB0aGlzLmdldEdyb3VwSXRlbXMoZ3JvdXApO1xuXHRcdGNvbnN0IHZhbHVlID0gdGhpcy52YWx1ZTtcblx0XHRpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gaXRlbXMuZXZlcnkoKGkpID0+IHZhbHVlLmluY2x1ZGVzKGkudmFsdWUpKTtcblx0fVxuXG5cdHByaXZhdGUgdG9nZ2xlVmFsdWUoKSB7XG5cdFx0Y29uc3QgaXRlbSA9IHRoaXMub3B0aW9uc1t0aGlzLmN1cnNvcl07XG5cdFx0aWYgKHRoaXMudmFsdWUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhpcy52YWx1ZSA9IFtdO1xuXHRcdH1cblx0XHRpZiAoaXRlbS5ncm91cCA9PT0gdHJ1ZSkge1xuXHRcdFx0Y29uc3QgZ3JvdXAgPSBpdGVtLnZhbHVlO1xuXHRcdFx0Y29uc3QgZ3JvdXBlZEl0ZW1zID0gdGhpcy5nZXRHcm91cEl0ZW1zKGdyb3VwKTtcblx0XHRcdGlmICh0aGlzLmlzR3JvdXBTZWxlY3RlZChncm91cCkpIHtcblx0XHRcdFx0dGhpcy52YWx1ZSA9IHRoaXMudmFsdWUuZmlsdGVyKFxuXHRcdFx0XHRcdCh2OiBzdHJpbmcpID0+IGdyb3VwZWRJdGVtcy5maW5kSW5kZXgoKGkpID0+IGkudmFsdWUgPT09IHYpID09PSAtMVxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy52YWx1ZSA9IFsuLi50aGlzLnZhbHVlLCAuLi5ncm91cGVkSXRlbXMubWFwKChpKSA9PiBpLnZhbHVlKV07XG5cdFx0XHR9XG5cdFx0XHR0aGlzLnZhbHVlID0gQXJyYXkuZnJvbShuZXcgU2V0KHRoaXMudmFsdWUpKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3Qgc2VsZWN0ZWQgPSB0aGlzLnZhbHVlLmluY2x1ZGVzKGl0ZW0udmFsdWUpO1xuXHRcdFx0dGhpcy52YWx1ZSA9IHNlbGVjdGVkXG5cdFx0XHRcdD8gdGhpcy52YWx1ZS5maWx0ZXIoKHY6IFRbJ3ZhbHVlJ10pID0+IHYgIT09IGl0ZW0udmFsdWUpXG5cdFx0XHRcdDogWy4uLnRoaXMudmFsdWUsIGl0ZW0udmFsdWVdO1xuXHRcdH1cblx0fVxuXG5cdGNvbnN0cnVjdG9yKG9wdHM6IEdyb3VwTXVsdGlTZWxlY3RPcHRpb25zPFQ+KSB7XG5cdFx0c3VwZXIob3B0cywgZmFsc2UpO1xuXHRcdGNvbnN0IHsgb3B0aW9ucyB9ID0gb3B0cztcblx0XHR0aGlzLiNzZWxlY3RhYmxlR3JvdXBzID0gb3B0cy5zZWxlY3RhYmxlR3JvdXBzICE9PSBmYWxzZTtcblx0XHR0aGlzLm9wdGlvbnMgPSBPYmplY3QuZW50cmllcyhvcHRpb25zKS5mbGF0TWFwKChba2V5LCBvcHRpb25dKSA9PiBbXG5cdFx0XHR7IHZhbHVlOiBrZXksIGdyb3VwOiB0cnVlLCBsYWJlbDoga2V5IH0sXG5cdFx0XHQuLi5vcHRpb24ubWFwKChvcHQpID0+ICh7IC4uLm9wdCwgZ3JvdXA6IGtleSB9KSksXG5cdFx0XSkgYXMgYW55O1xuXHRcdHRoaXMudmFsdWUgPSBbLi4uKG9wdHMuaW5pdGlhbFZhbHVlcyA/PyBbXSldO1xuXHRcdHRoaXMuY3Vyc29yID0gTWF0aC5tYXgoXG5cdFx0XHR0aGlzLm9wdGlvbnMuZmluZEluZGV4KCh7IHZhbHVlIH0pID0+IHZhbHVlID09PSBvcHRzLmN1cnNvckF0KSxcblx0XHRcdHRoaXMuI3NlbGVjdGFibGVHcm91cHMgPyAwIDogMVxuXHRcdCk7XG5cblx0XHR0aGlzLm9uKCdjdXJzb3InLCAoa2V5KSA9PiB7XG5cdFx0XHRzd2l0Y2ggKGtleSkge1xuXHRcdFx0XHRjYXNlICdsZWZ0Jzpcblx0XHRcdFx0Y2FzZSAndXAnOiB7XG5cdFx0XHRcdFx0dGhpcy5jdXJzb3IgPSB0aGlzLmN1cnNvciA9PT0gMCA/IHRoaXMub3B0aW9ucy5sZW5ndGggLSAxIDogdGhpcy5jdXJzb3IgLSAxO1xuXHRcdFx0XHRcdGNvbnN0IGN1cnJlbnRJc0dyb3VwID0gdGhpcy5vcHRpb25zW3RoaXMuY3Vyc29yXT8uZ3JvdXAgPT09IHRydWU7XG5cdFx0XHRcdFx0aWYgKCF0aGlzLiNzZWxlY3RhYmxlR3JvdXBzICYmIGN1cnJlbnRJc0dyb3VwKSB7XG5cdFx0XHRcdFx0XHR0aGlzLmN1cnNvciA9IHRoaXMuY3Vyc29yID09PSAwID8gdGhpcy5vcHRpb25zLmxlbmd0aCAtIDEgOiB0aGlzLmN1cnNvciAtIDE7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNhc2UgJ2Rvd24nOlxuXHRcdFx0XHRjYXNlICdyaWdodCc6IHtcblx0XHRcdFx0XHR0aGlzLmN1cnNvciA9IHRoaXMuY3Vyc29yID09PSB0aGlzLm9wdGlvbnMubGVuZ3RoIC0gMSA/IDAgOiB0aGlzLmN1cnNvciArIDE7XG5cdFx0XHRcdFx0Y29uc3QgY3VycmVudElzR3JvdXAgPSB0aGlzLm9wdGlvbnNbdGhpcy5jdXJzb3JdPy5ncm91cCA9PT0gdHJ1ZTtcblx0XHRcdFx0XHRpZiAoIXRoaXMuI3NlbGVjdGFibGVHcm91cHMgJiYgY3VycmVudElzR3JvdXApIHtcblx0XHRcdFx0XHRcdHRoaXMuY3Vyc29yID0gdGhpcy5jdXJzb3IgPT09IHRoaXMub3B0aW9ucy5sZW5ndGggLSAxID8gMCA6IHRoaXMuY3Vyc29yICsgMTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y2FzZSAnc3BhY2UnOlxuXHRcdFx0XHRcdHRoaXMudG9nZ2xlVmFsdWUoKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9KTtcblx0fVxufVxuIiwgImltcG9ydCB7IGZpbmRDdXJzb3IgfSBmcm9tICcuLi91dGlscy9jdXJzb3IuanMnO1xuaW1wb3J0IFByb21wdCwgeyB0eXBlIFByb21wdE9wdGlvbnMgfSBmcm9tICcuL3Byb21wdC5qcyc7XG5cbmludGVyZmFjZSBPcHRpb25MaWtlIHtcblx0dmFsdWU6IGFueTtcblx0ZGlzYWJsZWQ/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE11bHRpU2VsZWN0T3B0aW9uczxUIGV4dGVuZHMgT3B0aW9uTGlrZT5cblx0ZXh0ZW5kcyBQcm9tcHRPcHRpb25zPFRbJ3ZhbHVlJ11bXSwgTXVsdGlTZWxlY3RQcm9tcHQ8VD4+IHtcblx0b3B0aW9uczogVFtdO1xuXHRpbml0aWFsVmFsdWVzPzogVFsndmFsdWUnXVtdO1xuXHRyZXF1aXJlZD86IGJvb2xlYW47XG5cdGN1cnNvckF0PzogVFsndmFsdWUnXTtcbn1cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE11bHRpU2VsZWN0UHJvbXB0PFQgZXh0ZW5kcyBPcHRpb25MaWtlPiBleHRlbmRzIFByb21wdDxUWyd2YWx1ZSddW10+IHtcblx0b3B0aW9uczogVFtdO1xuXHRjdXJzb3IgPSAwO1xuXG5cdHByaXZhdGUgZ2V0IF92YWx1ZSgpOiBUWyd2YWx1ZSddIHtcblx0XHRyZXR1cm4gdGhpcy5vcHRpb25zW3RoaXMuY3Vyc29yXS52YWx1ZTtcblx0fVxuXG5cdHByaXZhdGUgZ2V0IF9lbmFibGVkT3B0aW9ucygpOiBUW10ge1xuXHRcdHJldHVybiB0aGlzLm9wdGlvbnMuZmlsdGVyKChvcHRpb24pID0+IG9wdGlvbi5kaXNhYmxlZCAhPT0gdHJ1ZSk7XG5cdH1cblxuXHRwcml2YXRlIHRvZ2dsZUFsbCgpIHtcblx0XHRjb25zdCBlbmFibGVkT3B0aW9ucyA9IHRoaXMuX2VuYWJsZWRPcHRpb25zO1xuXHRcdGNvbnN0IGFsbFNlbGVjdGVkID0gdGhpcy52YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHRoaXMudmFsdWUubGVuZ3RoID09PSBlbmFibGVkT3B0aW9ucy5sZW5ndGg7XG5cdFx0dGhpcy52YWx1ZSA9IGFsbFNlbGVjdGVkID8gW10gOiBlbmFibGVkT3B0aW9ucy5tYXAoKHYpID0+IHYudmFsdWUpO1xuXHR9XG5cblx0cHJpdmF0ZSB0b2dnbGVJbnZlcnQoKSB7XG5cdFx0Y29uc3QgdmFsdWUgPSB0aGlzLnZhbHVlO1xuXHRcdGlmICghdmFsdWUpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3Qgbm90U2VsZWN0ZWQgPSB0aGlzLl9lbmFibGVkT3B0aW9ucy5maWx0ZXIoKHYpID0+ICF2YWx1ZS5pbmNsdWRlcyh2LnZhbHVlKSk7XG5cdFx0dGhpcy52YWx1ZSA9IG5vdFNlbGVjdGVkLm1hcCgodikgPT4gdi52YWx1ZSk7XG5cdH1cblxuXHRwcml2YXRlIHRvZ2dsZVZhbHVlKCkge1xuXHRcdGlmICh0aGlzLnZhbHVlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHRoaXMudmFsdWUgPSBbXTtcblx0XHR9XG5cdFx0Y29uc3Qgc2VsZWN0ZWQgPSB0aGlzLnZhbHVlLmluY2x1ZGVzKHRoaXMuX3ZhbHVlKTtcblx0XHR0aGlzLnZhbHVlID0gc2VsZWN0ZWRcblx0XHRcdD8gdGhpcy52YWx1ZS5maWx0ZXIoKHZhbHVlKSA9PiB2YWx1ZSAhPT0gdGhpcy5fdmFsdWUpXG5cdFx0XHQ6IFsuLi50aGlzLnZhbHVlLCB0aGlzLl92YWx1ZV07XG5cdH1cblxuXHRjb25zdHJ1Y3RvcihvcHRzOiBNdWx0aVNlbGVjdE9wdGlvbnM8VD4pIHtcblx0XHRzdXBlcihvcHRzLCBmYWxzZSk7XG5cblx0XHR0aGlzLm9wdGlvbnMgPSBvcHRzLm9wdGlvbnM7XG5cdFx0dGhpcy52YWx1ZSA9IFsuLi4ob3B0cy5pbml0aWFsVmFsdWVzID8/IFtdKV07XG5cdFx0Y29uc3QgY3Vyc29yID0gTWF0aC5tYXgoXG5cdFx0XHR0aGlzLm9wdGlvbnMuZmluZEluZGV4KCh7IHZhbHVlIH0pID0+IHZhbHVlID09PSBvcHRzLmN1cnNvckF0KSxcblx0XHRcdDBcblx0XHQpO1xuXHRcdHRoaXMuY3Vyc29yID0gdGhpcy5vcHRpb25zW2N1cnNvcl0uZGlzYWJsZWQgPyBmaW5kQ3Vyc29yPFQ+KGN1cnNvciwgMSwgdGhpcy5vcHRpb25zKSA6IGN1cnNvcjtcblx0XHR0aGlzLm9uKCdrZXknLCAoY2hhcikgPT4ge1xuXHRcdFx0aWYgKGNoYXIgPT09ICdhJykge1xuXHRcdFx0XHR0aGlzLnRvZ2dsZUFsbCgpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGNoYXIgPT09ICdpJykge1xuXHRcdFx0XHR0aGlzLnRvZ2dsZUludmVydCgpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0dGhpcy5vbignY3Vyc29yJywgKGtleSkgPT4ge1xuXHRcdFx0c3dpdGNoIChrZXkpIHtcblx0XHRcdFx0Y2FzZSAnbGVmdCc6XG5cdFx0XHRcdGNhc2UgJ3VwJzpcblx0XHRcdFx0XHR0aGlzLmN1cnNvciA9IGZpbmRDdXJzb3I8VD4odGhpcy5jdXJzb3IsIC0xLCB0aGlzLm9wdGlvbnMpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICdkb3duJzpcblx0XHRcdFx0Y2FzZSAncmlnaHQnOlxuXHRcdFx0XHRcdHRoaXMuY3Vyc29yID0gZmluZEN1cnNvcjxUPih0aGlzLmN1cnNvciwgMSwgdGhpcy5vcHRpb25zKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAnc3BhY2UnOlxuXHRcdFx0XHRcdHRoaXMudG9nZ2xlVmFsdWUoKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9KTtcblx0fVxufVxuIiwgImltcG9ydCBjb2xvciBmcm9tICdwaWNvY29sb3JzJztcbmltcG9ydCBQcm9tcHQsIHsgdHlwZSBQcm9tcHRPcHRpb25zIH0gZnJvbSAnLi9wcm9tcHQuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFBhc3N3b3JkT3B0aW9ucyBleHRlbmRzIFByb21wdE9wdGlvbnM8c3RyaW5nLCBQYXNzd29yZFByb21wdD4ge1xuXHRtYXNrPzogc3RyaW5nO1xufVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGFzc3dvcmRQcm9tcHQgZXh0ZW5kcyBQcm9tcHQ8c3RyaW5nPiB7XG5cdHByaXZhdGUgX21hc2sgPSAn4oCiJztcblx0Z2V0IGN1cnNvcigpIHtcblx0XHRyZXR1cm4gdGhpcy5fY3Vyc29yO1xuXHR9XG5cdGdldCBtYXNrZWQoKSB7XG5cdFx0cmV0dXJuIHRoaXMudXNlcklucHV0LnJlcGxhY2VBbGwoLy4vZywgdGhpcy5fbWFzayk7XG5cdH1cblx0Z2V0IHVzZXJJbnB1dFdpdGhDdXJzb3IoKSB7XG5cdFx0aWYgKHRoaXMuc3RhdGUgPT09ICdzdWJtaXQnIHx8IHRoaXMuc3RhdGUgPT09ICdjYW5jZWwnKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5tYXNrZWQ7XG5cdFx0fVxuXHRcdGNvbnN0IHVzZXJJbnB1dCA9IHRoaXMudXNlcklucHV0O1xuXHRcdGlmICh0aGlzLmN1cnNvciA+PSB1c2VySW5wdXQubGVuZ3RoKSB7XG5cdFx0XHRyZXR1cm4gYCR7dGhpcy5tYXNrZWR9JHtjb2xvci5pbnZlcnNlKGNvbG9yLmhpZGRlbignXycpKX1gO1xuXHRcdH1cblx0XHRjb25zdCBtYXNrZWQgPSB0aGlzLm1hc2tlZDtcblx0XHRjb25zdCBzMSA9IG1hc2tlZC5zbGljZSgwLCB0aGlzLmN1cnNvcik7XG5cdFx0Y29uc3QgczIgPSBtYXNrZWQuc2xpY2UodGhpcy5jdXJzb3IpO1xuXHRcdHJldHVybiBgJHtzMX0ke2NvbG9yLmludmVyc2UoczJbMF0pfSR7czIuc2xpY2UoMSl9YDtcblx0fVxuXHRjbGVhcigpIHtcblx0XHR0aGlzLl9jbGVhclVzZXJJbnB1dCgpO1xuXHR9XG5cdGNvbnN0cnVjdG9yKHsgbWFzaywgLi4ub3B0cyB9OiBQYXNzd29yZE9wdGlvbnMpIHtcblx0XHRzdXBlcihvcHRzKTtcblx0XHR0aGlzLl9tYXNrID0gbWFzayA/PyAn4oCiJztcblx0XHR0aGlzLm9uKCd1c2VySW5wdXQnLCAoaW5wdXQpID0+IHtcblx0XHRcdHRoaXMuX3NldFZhbHVlKGlucHV0KTtcblx0XHR9KTtcblx0fVxufVxuIiwgImltcG9ydCB7IGZpbmRDdXJzb3IgfSBmcm9tICcuLi91dGlscy9jdXJzb3IuanMnO1xuaW1wb3J0IFByb21wdCwgeyB0eXBlIFByb21wdE9wdGlvbnMgfSBmcm9tICcuL3Byb21wdC5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VsZWN0T3B0aW9uczxUIGV4dGVuZHMgeyB2YWx1ZTogYW55OyBkaXNhYmxlZD86IGJvb2xlYW4gfT5cblx0ZXh0ZW5kcyBQcm9tcHRPcHRpb25zPFRbJ3ZhbHVlJ10sIFNlbGVjdFByb21wdDxUPj4ge1xuXHRvcHRpb25zOiBUW107XG5cdGluaXRpYWxWYWx1ZT86IFRbJ3ZhbHVlJ107XG59XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZWxlY3RQcm9tcHQ8VCBleHRlbmRzIHsgdmFsdWU6IGFueTsgZGlzYWJsZWQ/OiBib29sZWFuIH0+IGV4dGVuZHMgUHJvbXB0PFxuXHRUWyd2YWx1ZSddXG4+IHtcblx0b3B0aW9uczogVFtdO1xuXHRjdXJzb3IgPSAwO1xuXG5cdHByaXZhdGUgZ2V0IF9zZWxlY3RlZFZhbHVlKCkge1xuXHRcdHJldHVybiB0aGlzLm9wdGlvbnNbdGhpcy5jdXJzb3JdO1xuXHR9XG5cblx0cHJpdmF0ZSBjaGFuZ2VWYWx1ZSgpIHtcblx0XHR0aGlzLnZhbHVlID0gdGhpcy5fc2VsZWN0ZWRWYWx1ZS52YWx1ZTtcblx0fVxuXG5cdGNvbnN0cnVjdG9yKG9wdHM6IFNlbGVjdE9wdGlvbnM8VD4pIHtcblx0XHRzdXBlcihvcHRzLCBmYWxzZSk7XG5cblx0XHR0aGlzLm9wdGlvbnMgPSBvcHRzLm9wdGlvbnM7XG5cblx0XHRjb25zdCBpbml0aWFsQ3Vyc29yID0gdGhpcy5vcHRpb25zLmZpbmRJbmRleCgoeyB2YWx1ZSB9KSA9PiB2YWx1ZSA9PT0gb3B0cy5pbml0aWFsVmFsdWUpO1xuXHRcdGNvbnN0IGN1cnNvciA9IGluaXRpYWxDdXJzb3IgPT09IC0xID8gMCA6IGluaXRpYWxDdXJzb3I7XG5cdFx0dGhpcy5jdXJzb3IgPSB0aGlzLm9wdGlvbnNbY3Vyc29yXS5kaXNhYmxlZCA/IGZpbmRDdXJzb3I8VD4oY3Vyc29yLCAxLCB0aGlzLm9wdGlvbnMpIDogY3Vyc29yO1xuXHRcdHRoaXMuY2hhbmdlVmFsdWUoKTtcblxuXHRcdHRoaXMub24oJ2N1cnNvcicsIChrZXkpID0+IHtcblx0XHRcdHN3aXRjaCAoa2V5KSB7XG5cdFx0XHRcdGNhc2UgJ2xlZnQnOlxuXHRcdFx0XHRjYXNlICd1cCc6XG5cdFx0XHRcdFx0dGhpcy5jdXJzb3IgPSBmaW5kQ3Vyc29yPFQ+KHRoaXMuY3Vyc29yLCAtMSwgdGhpcy5vcHRpb25zKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAnZG93bic6XG5cdFx0XHRcdGNhc2UgJ3JpZ2h0Jzpcblx0XHRcdFx0XHR0aGlzLmN1cnNvciA9IGZpbmRDdXJzb3I8VD4odGhpcy5jdXJzb3IsIDEsIHRoaXMub3B0aW9ucyk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLmNoYW5nZVZhbHVlKCk7XG5cdFx0fSk7XG5cdH1cbn1cbiIsICJpbXBvcnQgUHJvbXB0LCB7IHR5cGUgUHJvbXB0T3B0aW9ucyB9IGZyb20gJy4vcHJvbXB0LmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBTZWxlY3RLZXlPcHRpb25zPFQgZXh0ZW5kcyB7IHZhbHVlOiBzdHJpbmcgfT5cblx0ZXh0ZW5kcyBQcm9tcHRPcHRpb25zPFRbJ3ZhbHVlJ10sIFNlbGVjdEtleVByb21wdDxUPj4ge1xuXHRvcHRpb25zOiBUW107XG5cdGNhc2VTZW5zaXRpdmU/OiBib29sZWFuO1xufVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2VsZWN0S2V5UHJvbXB0PFQgZXh0ZW5kcyB7IHZhbHVlOiBzdHJpbmcgfT4gZXh0ZW5kcyBQcm9tcHQ8VFsndmFsdWUnXT4ge1xuXHRvcHRpb25zOiBUW107XG5cdGN1cnNvciA9IDA7XG5cblx0Y29uc3RydWN0b3Iob3B0czogU2VsZWN0S2V5T3B0aW9uczxUPikge1xuXHRcdHN1cGVyKG9wdHMsIGZhbHNlKTtcblxuXHRcdHRoaXMub3B0aW9ucyA9IG9wdHMub3B0aW9ucztcblx0XHRjb25zdCBjYXNlU2Vuc2l0aXZlID0gb3B0cy5jYXNlU2Vuc2l0aXZlID09PSB0cnVlO1xuXHRcdGNvbnN0IGtleXMgPSB0aGlzLm9wdGlvbnMubWFwKCh7IHZhbHVlOiBbaW5pdGlhbF0gfSkgPT4ge1xuXHRcdFx0cmV0dXJuIGNhc2VTZW5zaXRpdmUgPyBpbml0aWFsIDogaW5pdGlhbD8udG9Mb3dlckNhc2UoKTtcblx0XHR9KTtcblx0XHR0aGlzLmN1cnNvciA9IE1hdGgubWF4KGtleXMuaW5kZXhPZihvcHRzLmluaXRpYWxWYWx1ZSksIDApO1xuXG5cdFx0dGhpcy5vbigna2V5JywgKGtleSwga2V5SW5mbykgPT4ge1xuXHRcdFx0aWYgKCFrZXkpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgY2FzZWRLZXkgPSBjYXNlU2Vuc2l0aXZlICYmIGtleUluZm8uc2hpZnQgPyBrZXkudG9VcHBlckNhc2UoKSA6IGtleTtcblx0XHRcdGlmICgha2V5cy5pbmNsdWRlcyhjYXNlZEtleSkpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCB2YWx1ZSA9IHRoaXMub3B0aW9ucy5maW5kKCh7IHZhbHVlOiBbaW5pdGlhbF0gfSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gY2FzZVNlbnNpdGl2ZSA/IGluaXRpYWwgPT09IGNhc2VkS2V5IDogaW5pdGlhbD8udG9Mb3dlckNhc2UoKSA9PT0ga2V5O1xuXHRcdFx0fSk7XG5cdFx0XHRpZiAodmFsdWUpIHtcblx0XHRcdFx0dGhpcy52YWx1ZSA9IHZhbHVlLnZhbHVlO1xuXHRcdFx0XHR0aGlzLnN0YXRlID0gJ3N1Ym1pdCc7XG5cdFx0XHRcdHRoaXMuZW1pdCgnc3VibWl0Jyk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cbn1cbiIsICJpbXBvcnQgY29sb3IgZnJvbSAncGljb2NvbG9ycyc7XG5pbXBvcnQgUHJvbXB0LCB7IHR5cGUgUHJvbXB0T3B0aW9ucyB9IGZyb20gJy4vcHJvbXB0LmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBUZXh0T3B0aW9ucyBleHRlbmRzIFByb21wdE9wdGlvbnM8c3RyaW5nLCBUZXh0UHJvbXB0PiB7XG5cdHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuXHRkZWZhdWx0VmFsdWU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRleHRQcm9tcHQgZXh0ZW5kcyBQcm9tcHQ8c3RyaW5nPiB7XG5cdGdldCB1c2VySW5wdXRXaXRoQ3Vyc29yKCkge1xuXHRcdGlmICh0aGlzLnN0YXRlID09PSAnc3VibWl0Jykge1xuXHRcdFx0cmV0dXJuIHRoaXMudXNlcklucHV0O1xuXHRcdH1cblx0XHRjb25zdCB1c2VySW5wdXQgPSB0aGlzLnVzZXJJbnB1dDtcblx0XHRpZiAodGhpcy5jdXJzb3IgPj0gdXNlcklucHV0Lmxlbmd0aCkge1xuXHRcdFx0cmV0dXJuIGAke3RoaXMudXNlcklucHV0feKWiGA7XG5cdFx0fVxuXHRcdGNvbnN0IHMxID0gdXNlcklucHV0LnNsaWNlKDAsIHRoaXMuY3Vyc29yKTtcblx0XHRjb25zdCBbczIsIC4uLnMzXSA9IHVzZXJJbnB1dC5zbGljZSh0aGlzLmN1cnNvcik7XG5cdFx0cmV0dXJuIGAke3MxfSR7Y29sb3IuaW52ZXJzZShzMil9JHtzMy5qb2luKCcnKX1gO1xuXHR9XG5cdGdldCBjdXJzb3IoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2N1cnNvcjtcblx0fVxuXHRjb25zdHJ1Y3RvcihvcHRzOiBUZXh0T3B0aW9ucykge1xuXHRcdHN1cGVyKHtcblx0XHRcdC4uLm9wdHMsXG5cdFx0XHRpbml0aWFsVXNlcklucHV0OiBvcHRzLmluaXRpYWxVc2VySW5wdXQgPz8gb3B0cy5pbml0aWFsVmFsdWUsXG5cdFx0fSk7XG5cblx0XHR0aGlzLm9uKCd1c2VySW5wdXQnLCAoaW5wdXQpID0+IHtcblx0XHRcdHRoaXMuX3NldFZhbHVlKGlucHV0KTtcblx0XHR9KTtcblx0XHR0aGlzLm9uKCdmaW5hbGl6ZScsICgpID0+IHtcblx0XHRcdGlmICghdGhpcy52YWx1ZSkge1xuXHRcdFx0XHR0aGlzLnZhbHVlID0gb3B0cy5kZWZhdWx0VmFsdWU7XG5cdFx0XHR9XG5cdFx0XHRpZiAodGhpcy52YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHRoaXMudmFsdWUgPSAnJztcblx0XHRcdH1cblx0XHR9KTtcblx0fVxufVxuIiwgImltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzVW5pY29kZVN1cHBvcnRlZCgpIHtcblx0aWYgKHByb2Nlc3MucGxhdGZvcm0gIT09ICd3aW4zMicpIHtcblx0XHRyZXR1cm4gcHJvY2Vzcy5lbnYuVEVSTSAhPT0gJ2xpbnV4JzsgLy8gTGludXggY29uc29sZSAoa2VybmVsKVxuXHR9XG5cblx0cmV0dXJuIEJvb2xlYW4ocHJvY2Vzcy5lbnYuQ0kpXG5cdFx0fHwgQm9vbGVhbihwcm9jZXNzLmVudi5XVF9TRVNTSU9OKSAvLyBXaW5kb3dzIFRlcm1pbmFsXG5cdFx0fHwgQm9vbGVhbihwcm9jZXNzLmVudi5URVJNSU5VU19TVUJMSU1FKSAvLyBUZXJtaW51cyAoPDAuMi4yNylcblx0XHR8fCBwcm9jZXNzLmVudi5Db25FbXVUYXNrID09PSAne2NtZDo6Q21kZXJ9JyAvLyBDb25FbXUgYW5kIGNtZGVyXG5cdFx0fHwgcHJvY2Vzcy5lbnYuVEVSTV9QUk9HUkFNID09PSAnVGVybWludXMtU3VibGltZSdcblx0XHR8fCBwcm9jZXNzLmVudi5URVJNX1BST0dSQU0gPT09ICd2c2NvZGUnXG5cdFx0fHwgcHJvY2Vzcy5lbnYuVEVSTSA9PT0gJ3h0ZXJtLTI1NmNvbG9yJ1xuXHRcdHx8IHByb2Nlc3MuZW52LlRFUk0gPT09ICdhbGFjcml0dHknXG5cdFx0fHwgcHJvY2Vzcy5lbnYuVEVSTUlOQUxfRU1VTEFUT1IgPT09ICdKZXRCcmFpbnMtSmVkaVRlcm0nO1xufVxuIiwgImltcG9ydCB0eXBlIHsgUmVhZGFibGUsIFdyaXRhYmxlIH0gZnJvbSAnbm9kZTpzdHJlYW0nO1xuaW1wb3J0IHR5cGUgeyBTdGF0ZSB9IGZyb20gJ0BjbGFjay9jb3JlJztcbmltcG9ydCBpc1VuaWNvZGVTdXBwb3J0ZWQgZnJvbSAnaXMtdW5pY29kZS1zdXBwb3J0ZWQnO1xuaW1wb3J0IGNvbG9yIGZyb20gJ3BpY29jb2xvcnMnO1xuXG5leHBvcnQgY29uc3QgdW5pY29kZSA9IGlzVW5pY29kZVN1cHBvcnRlZCgpO1xuZXhwb3J0IGNvbnN0IGlzQ0kgPSAoKTogYm9vbGVhbiA9PiBwcm9jZXNzLmVudi5DSSA9PT0gJ3RydWUnO1xuZXhwb3J0IGNvbnN0IGlzVFRZID0gKG91dHB1dDogV3JpdGFibGUpOiBib29sZWFuID0+IHtcblx0cmV0dXJuIChvdXRwdXQgYXMgV3JpdGFibGUgJiB7IGlzVFRZPzogYm9vbGVhbiB9KS5pc1RUWSA9PT0gdHJ1ZTtcbn07XG5leHBvcnQgY29uc3QgdW5pY29kZU9yID0gKGM6IHN0cmluZywgZmFsbGJhY2s6IHN0cmluZykgPT4gKHVuaWNvZGUgPyBjIDogZmFsbGJhY2spO1xuZXhwb3J0IGNvbnN0IFNfU1RFUF9BQ1RJVkUgPSB1bmljb2RlT3IoJ+KXhicsICcqJyk7XG5leHBvcnQgY29uc3QgU19TVEVQX0NBTkNFTCA9IHVuaWNvZGVPcign4pagJywgJ3gnKTtcbmV4cG9ydCBjb25zdCBTX1NURVBfRVJST1IgPSB1bmljb2RlT3IoJ+KWsicsICd4Jyk7XG5leHBvcnQgY29uc3QgU19TVEVQX1NVQk1JVCA9IHVuaWNvZGVPcign4peHJywgJ28nKTtcblxuZXhwb3J0IGNvbnN0IFNfQkFSX1NUQVJUID0gdW5pY29kZU9yKCfilIwnLCAnVCcpO1xuZXhwb3J0IGNvbnN0IFNfQkFSID0gdW5pY29kZU9yKCfilIInLCAnfCcpO1xuZXhwb3J0IGNvbnN0IFNfQkFSX0VORCA9IHVuaWNvZGVPcign4pSUJywgJ+KAlCcpO1xuZXhwb3J0IGNvbnN0IFNfQkFSX1NUQVJUX1JJR0hUID0gdW5pY29kZU9yKCfilJAnLCAnVCcpO1xuZXhwb3J0IGNvbnN0IFNfQkFSX0VORF9SSUdIVCA9IHVuaWNvZGVPcign4pSYJywgJ+KAlCcpO1xuXG5leHBvcnQgY29uc3QgU19SQURJT19BQ1RJVkUgPSB1bmljb2RlT3IoJ+KXjycsICc+Jyk7XG5leHBvcnQgY29uc3QgU19SQURJT19JTkFDVElWRSA9IHVuaWNvZGVPcign4peLJywgJyAnKTtcbmV4cG9ydCBjb25zdCBTX0NIRUNLQk9YX0FDVElWRSA9IHVuaWNvZGVPcign4pe7JywgJ1vigKJdJyk7XG5leHBvcnQgY29uc3QgU19DSEVDS0JPWF9TRUxFQ1RFRCA9IHVuaWNvZGVPcign4pe8JywgJ1srXScpO1xuZXhwb3J0IGNvbnN0IFNfQ0hFQ0tCT1hfSU5BQ1RJVkUgPSB1bmljb2RlT3IoJ+KXuycsICdbIF0nKTtcbmV4cG9ydCBjb25zdCBTX1BBU1NXT1JEX01BU0sgPSB1bmljb2RlT3IoJ+KWqicsICfigKInKTtcblxuZXhwb3J0IGNvbnN0IFNfQkFSX0ggPSB1bmljb2RlT3IoJ+KUgCcsICctJyk7XG5leHBvcnQgY29uc3QgU19DT1JORVJfVE9QX1JJR0hUID0gdW5pY29kZU9yKCfila4nLCAnKycpO1xuZXhwb3J0IGNvbnN0IFNfQ09OTkVDVF9MRUZUID0gdW5pY29kZU9yKCfilJwnLCAnKycpO1xuZXhwb3J0IGNvbnN0IFNfQ09STkVSX0JPVFRPTV9SSUdIVCA9IHVuaWNvZGVPcign4pWvJywgJysnKTtcbmV4cG9ydCBjb25zdCBTX0NPUk5FUl9CT1RUT01fTEVGVCA9IHVuaWNvZGVPcign4pWwJywgJysnKTtcbmV4cG9ydCBjb25zdCBTX0NPUk5FUl9UT1BfTEVGVCA9IHVuaWNvZGVPcign4pWtJywgJysnKTtcblxuZXhwb3J0IGNvbnN0IFNfSU5GTyA9IHVuaWNvZGVPcign4pePJywgJ+KAoicpO1xuZXhwb3J0IGNvbnN0IFNfU1VDQ0VTUyA9IHVuaWNvZGVPcign4peGJywgJyonKTtcbmV4cG9ydCBjb25zdCBTX1dBUk4gPSB1bmljb2RlT3IoJ+KWsicsICchJyk7XG5leHBvcnQgY29uc3QgU19FUlJPUiA9IHVuaWNvZGVPcign4pagJywgJ3gnKTtcblxuZXhwb3J0IGNvbnN0IHN5bWJvbCA9IChzdGF0ZTogU3RhdGUpID0+IHtcblx0c3dpdGNoIChzdGF0ZSkge1xuXHRcdGNhc2UgJ2luaXRpYWwnOlxuXHRcdGNhc2UgJ2FjdGl2ZSc6XG5cdFx0XHRyZXR1cm4gY29sb3IuY3lhbihTX1NURVBfQUNUSVZFKTtcblx0XHRjYXNlICdjYW5jZWwnOlxuXHRcdFx0cmV0dXJuIGNvbG9yLnJlZChTX1NURVBfQ0FOQ0VMKTtcblx0XHRjYXNlICdlcnJvcic6XG5cdFx0XHRyZXR1cm4gY29sb3IueWVsbG93KFNfU1RFUF9FUlJPUik7XG5cdFx0Y2FzZSAnc3VibWl0Jzpcblx0XHRcdHJldHVybiBjb2xvci5ncmVlbihTX1NURVBfU1VCTUlUKTtcblx0fVxufTtcblxuZXhwb3J0IGNvbnN0IHN5bWJvbEJhciA9IChzdGF0ZTogU3RhdGUpID0+IHtcblx0c3dpdGNoIChzdGF0ZSkge1xuXHRcdGNhc2UgJ2luaXRpYWwnOlxuXHRcdGNhc2UgJ2FjdGl2ZSc6XG5cdFx0XHRyZXR1cm4gY29sb3IuY3lhbihTX0JBUik7XG5cdFx0Y2FzZSAnY2FuY2VsJzpcblx0XHRcdHJldHVybiBjb2xvci5yZWQoU19CQVIpO1xuXHRcdGNhc2UgJ2Vycm9yJzpcblx0XHRcdHJldHVybiBjb2xvci55ZWxsb3coU19CQVIpO1xuXHRcdGNhc2UgJ3N1Ym1pdCc6XG5cdFx0XHRyZXR1cm4gY29sb3IuZ3JlZW4oU19CQVIpO1xuXHR9XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbW1vbk9wdGlvbnMge1xuXHRpbnB1dD86IFJlYWRhYmxlO1xuXHRvdXRwdXQ/OiBXcml0YWJsZTtcblx0c2lnbmFsPzogQWJvcnRTaWduYWw7XG5cdHdpdGhHdWlkZT86IGJvb2xlYW47XG59XG4iLCAiLyogTUFJTiAqL1xuLy9VUkw6IGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5kcmVzb3JodXMvZ2V0LWVhc3QtYXNpYW4td2lkdGgvYmxvYi9tYWluL2xvb2t1cC5qc1xuLy9MSUNFTlNFOiBodHRwczovL2dpdGh1Yi5jb20vc2luZHJlc29yaHVzL2dldC1lYXN0LWFzaWFuLXdpZHRoL2Jsb2IvbWFpbi9saWNlbnNlXG4vL1RPRE86IFJlcGxhY2UgdGhlc2Ugd2l0aCBzb21lIHVuaWNvZGUgcHJvcGVydHkgY2xhc3NlcywgaWYgdGhlIG9uZXMgd2UgbmVlZCBleGlzdFxuY29uc3QgaXNBbWJpZ3VvdXMgPSAoeCkgPT4ge1xuICAgIHJldHVybiB4ID09PSAweEExIHx8IHggPT09IDB4QTQgfHwgeCA9PT0gMHhBNyB8fCB4ID09PSAweEE4IHx8IHggPT09IDB4QUEgfHwgeCA9PT0gMHhBRCB8fCB4ID09PSAweEFFIHx8IHggPj0gMHhCMCAmJiB4IDw9IDB4QjQgfHwgeCA+PSAweEI2ICYmIHggPD0gMHhCQSB8fCB4ID49IDB4QkMgJiYgeCA8PSAweEJGIHx8IHggPT09IDB4QzYgfHwgeCA9PT0gMHhEMCB8fCB4ID09PSAweEQ3IHx8IHggPT09IDB4RDggfHwgeCA+PSAweERFICYmIHggPD0gMHhFMSB8fCB4ID09PSAweEU2IHx8IHggPj0gMHhFOCAmJiB4IDw9IDB4RUEgfHwgeCA9PT0gMHhFQyB8fCB4ID09PSAweEVEIHx8IHggPT09IDB4RjAgfHwgeCA9PT0gMHhGMiB8fCB4ID09PSAweEYzIHx8IHggPj0gMHhGNyAmJiB4IDw9IDB4RkEgfHwgeCA9PT0gMHhGQyB8fCB4ID09PSAweEZFIHx8IHggPT09IDB4MTAxIHx8IHggPT09IDB4MTExIHx8IHggPT09IDB4MTEzIHx8IHggPT09IDB4MTFCIHx8IHggPT09IDB4MTI2IHx8IHggPT09IDB4MTI3IHx8IHggPT09IDB4MTJCIHx8IHggPj0gMHgxMzEgJiYgeCA8PSAweDEzMyB8fCB4ID09PSAweDEzOCB8fCB4ID49IDB4MTNGICYmIHggPD0gMHgxNDIgfHwgeCA9PT0gMHgxNDQgfHwgeCA+PSAweDE0OCAmJiB4IDw9IDB4MTRCIHx8IHggPT09IDB4MTREIHx8IHggPT09IDB4MTUyIHx8IHggPT09IDB4MTUzIHx8IHggPT09IDB4MTY2IHx8IHggPT09IDB4MTY3IHx8IHggPT09IDB4MTZCIHx8IHggPT09IDB4MUNFIHx8IHggPT09IDB4MUQwIHx8IHggPT09IDB4MUQyIHx8IHggPT09IDB4MUQ0IHx8IHggPT09IDB4MUQ2IHx8IHggPT09IDB4MUQ4IHx8IHggPT09IDB4MURBIHx8IHggPT09IDB4MURDIHx8IHggPT09IDB4MjUxIHx8IHggPT09IDB4MjYxIHx8IHggPT09IDB4MkM0IHx8IHggPT09IDB4MkM3IHx8IHggPj0gMHgyQzkgJiYgeCA8PSAweDJDQiB8fCB4ID09PSAweDJDRCB8fCB4ID09PSAweDJEMCB8fCB4ID49IDB4MkQ4ICYmIHggPD0gMHgyREIgfHwgeCA9PT0gMHgyREQgfHwgeCA9PT0gMHgyREYgfHwgeCA+PSAweDMwMCAmJiB4IDw9IDB4MzZGIHx8IHggPj0gMHgzOTEgJiYgeCA8PSAweDNBMSB8fCB4ID49IDB4M0EzICYmIHggPD0gMHgzQTkgfHwgeCA+PSAweDNCMSAmJiB4IDw9IDB4M0MxIHx8IHggPj0gMHgzQzMgJiYgeCA8PSAweDNDOSB8fCB4ID09PSAweDQwMSB8fCB4ID49IDB4NDEwICYmIHggPD0gMHg0NEYgfHwgeCA9PT0gMHg0NTEgfHwgeCA9PT0gMHgyMDEwIHx8IHggPj0gMHgyMDEzICYmIHggPD0gMHgyMDE2IHx8IHggPT09IDB4MjAxOCB8fCB4ID09PSAweDIwMTkgfHwgeCA9PT0gMHgyMDFDIHx8IHggPT09IDB4MjAxRCB8fCB4ID49IDB4MjAyMCAmJiB4IDw9IDB4MjAyMiB8fCB4ID49IDB4MjAyNCAmJiB4IDw9IDB4MjAyNyB8fCB4ID09PSAweDIwMzAgfHwgeCA9PT0gMHgyMDMyIHx8IHggPT09IDB4MjAzMyB8fCB4ID09PSAweDIwMzUgfHwgeCA9PT0gMHgyMDNCIHx8IHggPT09IDB4MjAzRSB8fCB4ID09PSAweDIwNzQgfHwgeCA9PT0gMHgyMDdGIHx8IHggPj0gMHgyMDgxICYmIHggPD0gMHgyMDg0IHx8IHggPT09IDB4MjBBQyB8fCB4ID09PSAweDIxMDMgfHwgeCA9PT0gMHgyMTA1IHx8IHggPT09IDB4MjEwOSB8fCB4ID09PSAweDIxMTMgfHwgeCA9PT0gMHgyMTE2IHx8IHggPT09IDB4MjEyMSB8fCB4ID09PSAweDIxMjIgfHwgeCA9PT0gMHgyMTI2IHx8IHggPT09IDB4MjEyQiB8fCB4ID09PSAweDIxNTMgfHwgeCA9PT0gMHgyMTU0IHx8IHggPj0gMHgyMTVCICYmIHggPD0gMHgyMTVFIHx8IHggPj0gMHgyMTYwICYmIHggPD0gMHgyMTZCIHx8IHggPj0gMHgyMTcwICYmIHggPD0gMHgyMTc5IHx8IHggPT09IDB4MjE4OSB8fCB4ID49IDB4MjE5MCAmJiB4IDw9IDB4MjE5OSB8fCB4ID09PSAweDIxQjggfHwgeCA9PT0gMHgyMUI5IHx8IHggPT09IDB4MjFEMiB8fCB4ID09PSAweDIxRDQgfHwgeCA9PT0gMHgyMUU3IHx8IHggPT09IDB4MjIwMCB8fCB4ID09PSAweDIyMDIgfHwgeCA9PT0gMHgyMjAzIHx8IHggPT09IDB4MjIwNyB8fCB4ID09PSAweDIyMDggfHwgeCA9PT0gMHgyMjBCIHx8IHggPT09IDB4MjIwRiB8fCB4ID09PSAweDIyMTEgfHwgeCA9PT0gMHgyMjE1IHx8IHggPT09IDB4MjIxQSB8fCB4ID49IDB4MjIxRCAmJiB4IDw9IDB4MjIyMCB8fCB4ID09PSAweDIyMjMgfHwgeCA9PT0gMHgyMjI1IHx8IHggPj0gMHgyMjI3ICYmIHggPD0gMHgyMjJDIHx8IHggPT09IDB4MjIyRSB8fCB4ID49IDB4MjIzNCAmJiB4IDw9IDB4MjIzNyB8fCB4ID09PSAweDIyM0MgfHwgeCA9PT0gMHgyMjNEIHx8IHggPT09IDB4MjI0OCB8fCB4ID09PSAweDIyNEMgfHwgeCA9PT0gMHgyMjUyIHx8IHggPT09IDB4MjI2MCB8fCB4ID09PSAweDIyNjEgfHwgeCA+PSAweDIyNjQgJiYgeCA8PSAweDIyNjcgfHwgeCA9PT0gMHgyMjZBIHx8IHggPT09IDB4MjI2QiB8fCB4ID09PSAweDIyNkUgfHwgeCA9PT0gMHgyMjZGIHx8IHggPT09IDB4MjI4MiB8fCB4ID09PSAweDIyODMgfHwgeCA9PT0gMHgyMjg2IHx8IHggPT09IDB4MjI4NyB8fCB4ID09PSAweDIyOTUgfHwgeCA9PT0gMHgyMjk5IHx8IHggPT09IDB4MjJBNSB8fCB4ID09PSAweDIyQkYgfHwgeCA9PT0gMHgyMzEyIHx8IHggPj0gMHgyNDYwICYmIHggPD0gMHgyNEU5IHx8IHggPj0gMHgyNEVCICYmIHggPD0gMHgyNTRCIHx8IHggPj0gMHgyNTUwICYmIHggPD0gMHgyNTczIHx8IHggPj0gMHgyNTgwICYmIHggPD0gMHgyNThGIHx8IHggPj0gMHgyNTkyICYmIHggPD0gMHgyNTk1IHx8IHggPT09IDB4MjVBMCB8fCB4ID09PSAweDI1QTEgfHwgeCA+PSAweDI1QTMgJiYgeCA8PSAweDI1QTkgfHwgeCA9PT0gMHgyNUIyIHx8IHggPT09IDB4MjVCMyB8fCB4ID09PSAweDI1QjYgfHwgeCA9PT0gMHgyNUI3IHx8IHggPT09IDB4MjVCQyB8fCB4ID09PSAweDI1QkQgfHwgeCA9PT0gMHgyNUMwIHx8IHggPT09IDB4MjVDMSB8fCB4ID49IDB4MjVDNiAmJiB4IDw9IDB4MjVDOCB8fCB4ID09PSAweDI1Q0IgfHwgeCA+PSAweDI1Q0UgJiYgeCA8PSAweDI1RDEgfHwgeCA+PSAweDI1RTIgJiYgeCA8PSAweDI1RTUgfHwgeCA9PT0gMHgyNUVGIHx8IHggPT09IDB4MjYwNSB8fCB4ID09PSAweDI2MDYgfHwgeCA9PT0gMHgyNjA5IHx8IHggPT09IDB4MjYwRSB8fCB4ID09PSAweDI2MEYgfHwgeCA9PT0gMHgyNjFDIHx8IHggPT09IDB4MjYxRSB8fCB4ID09PSAweDI2NDAgfHwgeCA9PT0gMHgyNjQyIHx8IHggPT09IDB4MjY2MCB8fCB4ID09PSAweDI2NjEgfHwgeCA+PSAweDI2NjMgJiYgeCA8PSAweDI2NjUgfHwgeCA+PSAweDI2NjcgJiYgeCA8PSAweDI2NkEgfHwgeCA9PT0gMHgyNjZDIHx8IHggPT09IDB4MjY2RCB8fCB4ID09PSAweDI2NkYgfHwgeCA9PT0gMHgyNjlFIHx8IHggPT09IDB4MjY5RiB8fCB4ID09PSAweDI2QkYgfHwgeCA+PSAweDI2QzYgJiYgeCA8PSAweDI2Q0QgfHwgeCA+PSAweDI2Q0YgJiYgeCA8PSAweDI2RDMgfHwgeCA+PSAweDI2RDUgJiYgeCA8PSAweDI2RTEgfHwgeCA9PT0gMHgyNkUzIHx8IHggPT09IDB4MjZFOCB8fCB4ID09PSAweDI2RTkgfHwgeCA+PSAweDI2RUIgJiYgeCA8PSAweDI2RjEgfHwgeCA9PT0gMHgyNkY0IHx8IHggPj0gMHgyNkY2ICYmIHggPD0gMHgyNkY5IHx8IHggPT09IDB4MjZGQiB8fCB4ID09PSAweDI2RkMgfHwgeCA9PT0gMHgyNkZFIHx8IHggPT09IDB4MjZGRiB8fCB4ID09PSAweDI3M0QgfHwgeCA+PSAweDI3NzYgJiYgeCA8PSAweDI3N0YgfHwgeCA+PSAweDJCNTYgJiYgeCA8PSAweDJCNTkgfHwgeCA+PSAweDMyNDggJiYgeCA8PSAweDMyNEYgfHwgeCA+PSAweEUwMDAgJiYgeCA8PSAweEY4RkYgfHwgeCA+PSAweEZFMDAgJiYgeCA8PSAweEZFMEYgfHwgeCA9PT0gMHhGRkZEIHx8IHggPj0gMHgxRjEwMCAmJiB4IDw9IDB4MUYxMEEgfHwgeCA+PSAweDFGMTEwICYmIHggPD0gMHgxRjEyRCB8fCB4ID49IDB4MUYxMzAgJiYgeCA8PSAweDFGMTY5IHx8IHggPj0gMHgxRjE3MCAmJiB4IDw9IDB4MUYxOEQgfHwgeCA9PT0gMHgxRjE4RiB8fCB4ID09PSAweDFGMTkwIHx8IHggPj0gMHgxRjE5QiAmJiB4IDw9IDB4MUYxQUMgfHwgeCA+PSAweEUwMTAwICYmIHggPD0gMHhFMDFFRiB8fCB4ID49IDB4RjAwMDAgJiYgeCA8PSAweEZGRkZEIHx8IHggPj0gMHgxMDAwMDAgJiYgeCA8PSAweDEwRkZGRDtcbn07XG5jb25zdCBpc0Z1bGxXaWR0aCA9ICh4KSA9PiB7XG4gICAgcmV0dXJuIHggPT09IDB4MzAwMCB8fCB4ID49IDB4RkYwMSAmJiB4IDw9IDB4RkY2MCB8fCB4ID49IDB4RkZFMCAmJiB4IDw9IDB4RkZFNjtcbn07XG5jb25zdCBpc1dpZGUgPSAoeCkgPT4ge1xuICAgIHJldHVybiB4ID49IDB4MTEwMCAmJiB4IDw9IDB4MTE1RiB8fCB4ID09PSAweDIzMUEgfHwgeCA9PT0gMHgyMzFCIHx8IHggPT09IDB4MjMyOSB8fCB4ID09PSAweDIzMkEgfHwgeCA+PSAweDIzRTkgJiYgeCA8PSAweDIzRUMgfHwgeCA9PT0gMHgyM0YwIHx8IHggPT09IDB4MjNGMyB8fCB4ID09PSAweDI1RkQgfHwgeCA9PT0gMHgyNUZFIHx8IHggPT09IDB4MjYxNCB8fCB4ID09PSAweDI2MTUgfHwgeCA+PSAweDI2NDggJiYgeCA8PSAweDI2NTMgfHwgeCA9PT0gMHgyNjdGIHx8IHggPT09IDB4MjY5MyB8fCB4ID09PSAweDI2QTEgfHwgeCA9PT0gMHgyNkFBIHx8IHggPT09IDB4MjZBQiB8fCB4ID09PSAweDI2QkQgfHwgeCA9PT0gMHgyNkJFIHx8IHggPT09IDB4MjZDNCB8fCB4ID09PSAweDI2QzUgfHwgeCA9PT0gMHgyNkNFIHx8IHggPT09IDB4MjZENCB8fCB4ID09PSAweDI2RUEgfHwgeCA9PT0gMHgyNkYyIHx8IHggPT09IDB4MjZGMyB8fCB4ID09PSAweDI2RjUgfHwgeCA9PT0gMHgyNkZBIHx8IHggPT09IDB4MjZGRCB8fCB4ID09PSAweDI3MDUgfHwgeCA9PT0gMHgyNzBBIHx8IHggPT09IDB4MjcwQiB8fCB4ID09PSAweDI3MjggfHwgeCA9PT0gMHgyNzRDIHx8IHggPT09IDB4Mjc0RSB8fCB4ID49IDB4Mjc1MyAmJiB4IDw9IDB4Mjc1NSB8fCB4ID09PSAweDI3NTcgfHwgeCA+PSAweDI3OTUgJiYgeCA8PSAweDI3OTcgfHwgeCA9PT0gMHgyN0IwIHx8IHggPT09IDB4MjdCRiB8fCB4ID09PSAweDJCMUIgfHwgeCA9PT0gMHgyQjFDIHx8IHggPT09IDB4MkI1MCB8fCB4ID09PSAweDJCNTUgfHwgeCA+PSAweDJFODAgJiYgeCA8PSAweDJFOTkgfHwgeCA+PSAweDJFOUIgJiYgeCA8PSAweDJFRjMgfHwgeCA+PSAweDJGMDAgJiYgeCA8PSAweDJGRDUgfHwgeCA+PSAweDJGRjAgJiYgeCA8PSAweDJGRkYgfHwgeCA+PSAweDMwMDEgJiYgeCA8PSAweDMwM0UgfHwgeCA+PSAweDMwNDEgJiYgeCA8PSAweDMwOTYgfHwgeCA+PSAweDMwOTkgJiYgeCA8PSAweDMwRkYgfHwgeCA+PSAweDMxMDUgJiYgeCA8PSAweDMxMkYgfHwgeCA+PSAweDMxMzEgJiYgeCA8PSAweDMxOEUgfHwgeCA+PSAweDMxOTAgJiYgeCA8PSAweDMxRTMgfHwgeCA+PSAweDMxRUYgJiYgeCA8PSAweDMyMUUgfHwgeCA+PSAweDMyMjAgJiYgeCA8PSAweDMyNDcgfHwgeCA+PSAweDMyNTAgJiYgeCA8PSAweDREQkYgfHwgeCA+PSAweDRFMDAgJiYgeCA8PSAweEE0OEMgfHwgeCA+PSAweEE0OTAgJiYgeCA8PSAweEE0QzYgfHwgeCA+PSAweEE5NjAgJiYgeCA8PSAweEE5N0MgfHwgeCA+PSAweEFDMDAgJiYgeCA8PSAweEQ3QTMgfHwgeCA+PSAweEY5MDAgJiYgeCA8PSAweEZBRkYgfHwgeCA+PSAweEZFMTAgJiYgeCA8PSAweEZFMTkgfHwgeCA+PSAweEZFMzAgJiYgeCA8PSAweEZFNTIgfHwgeCA+PSAweEZFNTQgJiYgeCA8PSAweEZFNjYgfHwgeCA+PSAweEZFNjggJiYgeCA8PSAweEZFNkIgfHwgeCA+PSAweDE2RkUwICYmIHggPD0gMHgxNkZFNCB8fCB4ID09PSAweDE2RkYwIHx8IHggPT09IDB4MTZGRjEgfHwgeCA+PSAweDE3MDAwICYmIHggPD0gMHgxODdGNyB8fCB4ID49IDB4MTg4MDAgJiYgeCA8PSAweDE4Q0Q1IHx8IHggPj0gMHgxOEQwMCAmJiB4IDw9IDB4MThEMDggfHwgeCA+PSAweDFBRkYwICYmIHggPD0gMHgxQUZGMyB8fCB4ID49IDB4MUFGRjUgJiYgeCA8PSAweDFBRkZCIHx8IHggPT09IDB4MUFGRkQgfHwgeCA9PT0gMHgxQUZGRSB8fCB4ID49IDB4MUIwMDAgJiYgeCA8PSAweDFCMTIyIHx8IHggPT09IDB4MUIxMzIgfHwgeCA+PSAweDFCMTUwICYmIHggPD0gMHgxQjE1MiB8fCB4ID09PSAweDFCMTU1IHx8IHggPj0gMHgxQjE2NCAmJiB4IDw9IDB4MUIxNjcgfHwgeCA+PSAweDFCMTcwICYmIHggPD0gMHgxQjJGQiB8fCB4ID09PSAweDFGMDA0IHx8IHggPT09IDB4MUYwQ0YgfHwgeCA9PT0gMHgxRjE4RSB8fCB4ID49IDB4MUYxOTEgJiYgeCA8PSAweDFGMTlBIHx8IHggPj0gMHgxRjIwMCAmJiB4IDw9IDB4MUYyMDIgfHwgeCA+PSAweDFGMjEwICYmIHggPD0gMHgxRjIzQiB8fCB4ID49IDB4MUYyNDAgJiYgeCA8PSAweDFGMjQ4IHx8IHggPT09IDB4MUYyNTAgfHwgeCA9PT0gMHgxRjI1MSB8fCB4ID49IDB4MUYyNjAgJiYgeCA8PSAweDFGMjY1IHx8IHggPj0gMHgxRjMwMCAmJiB4IDw9IDB4MUYzMjAgfHwgeCA+PSAweDFGMzJEICYmIHggPD0gMHgxRjMzNSB8fCB4ID49IDB4MUYzMzcgJiYgeCA8PSAweDFGMzdDIHx8IHggPj0gMHgxRjM3RSAmJiB4IDw9IDB4MUYzOTMgfHwgeCA+PSAweDFGM0EwICYmIHggPD0gMHgxRjNDQSB8fCB4ID49IDB4MUYzQ0YgJiYgeCA8PSAweDFGM0QzIHx8IHggPj0gMHgxRjNFMCAmJiB4IDw9IDB4MUYzRjAgfHwgeCA9PT0gMHgxRjNGNCB8fCB4ID49IDB4MUYzRjggJiYgeCA8PSAweDFGNDNFIHx8IHggPT09IDB4MUY0NDAgfHwgeCA+PSAweDFGNDQyICYmIHggPD0gMHgxRjRGQyB8fCB4ID49IDB4MUY0RkYgJiYgeCA8PSAweDFGNTNEIHx8IHggPj0gMHgxRjU0QiAmJiB4IDw9IDB4MUY1NEUgfHwgeCA+PSAweDFGNTUwICYmIHggPD0gMHgxRjU2NyB8fCB4ID09PSAweDFGNTdBIHx8IHggPT09IDB4MUY1OTUgfHwgeCA9PT0gMHgxRjU5NiB8fCB4ID09PSAweDFGNUE0IHx8IHggPj0gMHgxRjVGQiAmJiB4IDw9IDB4MUY2NEYgfHwgeCA+PSAweDFGNjgwICYmIHggPD0gMHgxRjZDNSB8fCB4ID09PSAweDFGNkNDIHx8IHggPj0gMHgxRjZEMCAmJiB4IDw9IDB4MUY2RDIgfHwgeCA+PSAweDFGNkQ1ICYmIHggPD0gMHgxRjZENyB8fCB4ID49IDB4MUY2REMgJiYgeCA8PSAweDFGNkRGIHx8IHggPT09IDB4MUY2RUIgfHwgeCA9PT0gMHgxRjZFQyB8fCB4ID49IDB4MUY2RjQgJiYgeCA8PSAweDFGNkZDIHx8IHggPj0gMHgxRjdFMCAmJiB4IDw9IDB4MUY3RUIgfHwgeCA9PT0gMHgxRjdGMCB8fCB4ID49IDB4MUY5MEMgJiYgeCA8PSAweDFGOTNBIHx8IHggPj0gMHgxRjkzQyAmJiB4IDw9IDB4MUY5NDUgfHwgeCA+PSAweDFGOTQ3ICYmIHggPD0gMHgxRjlGRiB8fCB4ID49IDB4MUZBNzAgJiYgeCA8PSAweDFGQTdDIHx8IHggPj0gMHgxRkE4MCAmJiB4IDw9IDB4MUZBODggfHwgeCA+PSAweDFGQTkwICYmIHggPD0gMHgxRkFCRCB8fCB4ID49IDB4MUZBQkYgJiYgeCA8PSAweDFGQUM1IHx8IHggPj0gMHgxRkFDRSAmJiB4IDw9IDB4MUZBREIgfHwgeCA+PSAweDFGQUUwICYmIHggPD0gMHgxRkFFOCB8fCB4ID49IDB4MUZBRjAgJiYgeCA8PSAweDFGQUY4IHx8IHggPj0gMHgyMDAwMCAmJiB4IDw9IDB4MkZGRkQgfHwgeCA+PSAweDMwMDAwICYmIHggPD0gMHgzRkZGRDtcbn07XG4vKiBFWFBPUlQgKi9cbmV4cG9ydCB7IGlzQW1iaWd1b3VzLCBpc0Z1bGxXaWR0aCwgaXNXaWRlIH07XG4iLCAiLyogSU1QT1JUICovXG5pbXBvcnQgeyBpc0FtYmlndW91cywgaXNGdWxsV2lkdGgsIGlzV2lkZSB9IGZyb20gJy4vdXRpbHMuanMnO1xuLyogSEVMUEVSUyAqL1xuY29uc3QgQU5TSV9SRSA9IC9bXFx1MDAxYlxcdTAwOWJdW1soKSM7P10qKD86WzAtOV17MSw0fSg/OjtbMC05XXswLDR9KSopP1swLTlBLU9SWmNmLW5xcnk9PjxdL3k7XG5jb25zdCBDT05UUk9MX1JFID0gL1tcXHgwMC1cXHgwOFxceDBBLVxceDFGXFx4N0YtXFx4OUZdezEsMTAwMH0veTtcbmNvbnN0IFRBQl9SRSA9IC9cXHR7MSwxMDAwfS95O1xuY29uc3QgRU1PSklfUkUgPSAvW1xcdXsxRjFFNn0tXFx1ezFGMUZGfV17Mn18XFx1ezFGM0Y0fVtcXHV7RTAwNjF9LVxcdXtFMDA3QX1dezJ9W1xcdXtFMDAzMH0tXFx1e0UwMDM5fVxcdXtFMDA2MX0tXFx1e0UwMDdBfV17MSwzfVxcdXtFMDA3Rn18KD86XFxwe0Vtb2ppfVxcdUZFMEZcXHUyMEUzP3xcXHB7RW1vamlfTW9kaWZpZXJfQmFzZX1cXHB7RW1vamlfTW9kaWZpZXJ9P3xcXHB7RW1vamlfUHJlc2VudGF0aW9ufSkoPzpcXHUyMDBEKD86XFxwe0Vtb2ppX01vZGlmaWVyX0Jhc2V9XFxwe0Vtb2ppX01vZGlmaWVyfT98XFxwe0Vtb2ppX1ByZXNlbnRhdGlvbn18XFxwe0Vtb2ppfVxcdUZFMEZcXHUyMEUzPykpKi95dTtcbmNvbnN0IExBVElOX1JFID0gLyg/OltcXHgyMC1cXHg3RVxceEEwLVxceEZGXSg/IVxcdUZFMEYpKXsxLDEwMDB9L3k7XG5jb25zdCBNT0RJRklFUl9SRSA9IC9cXHB7TX0rL2d1O1xuY29uc3QgTk9fVFJVTkNBVElPTiA9IHsgbGltaXQ6IEluZmluaXR5LCBlbGxpcHNpczogJycgfTtcbi8qIE1BSU4gKi9cbi8vVE9ETzogT3B0aW1pemUgbWF0Y2hpbmcgbm9uLWxhdGluIGxldHRlcnNcbmNvbnN0IGdldFN0cmluZ1RydW5jYXRlZFdpZHRoID0gKGlucHV0LCB0cnVuY2F0aW9uT3B0aW9ucyA9IHt9LCB3aWR0aE9wdGlvbnMgPSB7fSkgPT4ge1xuICAgIC8qIENPTlNUQU5UUyAqL1xuICAgIGNvbnN0IExJTUlUID0gdHJ1bmNhdGlvbk9wdGlvbnMubGltaXQgPz8gSW5maW5pdHk7XG4gICAgY29uc3QgRUxMSVBTSVMgPSB0cnVuY2F0aW9uT3B0aW9ucy5lbGxpcHNpcyA/PyAnJztcbiAgICBjb25zdCBFTExJUFNJU19XSURUSCA9IHRydW5jYXRpb25PcHRpb25zPy5lbGxpcHNpc1dpZHRoID8/IChFTExJUFNJUyA/IGdldFN0cmluZ1RydW5jYXRlZFdpZHRoKEVMTElQU0lTLCBOT19UUlVOQ0FUSU9OLCB3aWR0aE9wdGlvbnMpLndpZHRoIDogMCk7XG4gICAgY29uc3QgQU5TSV9XSURUSCA9IHdpZHRoT3B0aW9ucy5hbnNpV2lkdGggPz8gMDtcbiAgICBjb25zdCBDT05UUk9MX1dJRFRIID0gd2lkdGhPcHRpb25zLmNvbnRyb2xXaWR0aCA/PyAwO1xuICAgIGNvbnN0IFRBQl9XSURUSCA9IHdpZHRoT3B0aW9ucy50YWJXaWR0aCA/PyA4O1xuICAgIGNvbnN0IEFNQklHVU9VU19XSURUSCA9IHdpZHRoT3B0aW9ucy5hbWJpZ3VvdXNXaWR0aCA/PyAxO1xuICAgIGNvbnN0IEVNT0pJX1dJRFRIID0gd2lkdGhPcHRpb25zLmVtb2ppV2lkdGggPz8gMjtcbiAgICBjb25zdCBGVUxMX1dJRFRIX1dJRFRIID0gd2lkdGhPcHRpb25zLmZ1bGxXaWR0aFdpZHRoID8/IDI7XG4gICAgY29uc3QgUkVHVUxBUl9XSURUSCA9IHdpZHRoT3B0aW9ucy5yZWd1bGFyV2lkdGggPz8gMTtcbiAgICBjb25zdCBXSURFX1dJRFRIID0gd2lkdGhPcHRpb25zLndpZGVXaWR0aCA/PyAyO1xuICAgIC8qIFNUQVRFICovXG4gICAgbGV0IGluZGV4UHJldiA9IDA7XG4gICAgbGV0IGluZGV4ID0gMDtcbiAgICBsZXQgbGVuZ3RoID0gaW5wdXQubGVuZ3RoO1xuICAgIGxldCBsZW5ndGhFeHRyYSA9IDA7XG4gICAgbGV0IHRydW5jYXRpb25FbmFibGVkID0gZmFsc2U7XG4gICAgbGV0IHRydW5jYXRpb25JbmRleCA9IGxlbmd0aDtcbiAgICBsZXQgdHJ1bmNhdGlvbkxpbWl0ID0gTWF0aC5tYXgoMCwgTElNSVQgLSBFTExJUFNJU19XSURUSCk7XG4gICAgbGV0IHVubWF0Y2hlZFN0YXJ0ID0gMDtcbiAgICBsZXQgdW5tYXRjaGVkRW5kID0gMDtcbiAgICBsZXQgd2lkdGggPSAwO1xuICAgIGxldCB3aWR0aEV4dHJhID0gMDtcbiAgICAvKiBQQVJTRSBMT09QICovXG4gICAgb3V0ZXI6IHdoaWxlICh0cnVlKSB7XG4gICAgICAgIC8qIFVOTUFUQ0hFRCAqL1xuICAgICAgICBpZiAoKHVubWF0Y2hlZEVuZCA+IHVubWF0Y2hlZFN0YXJ0KSB8fCAoaW5kZXggPj0gbGVuZ3RoICYmIGluZGV4ID4gaW5kZXhQcmV2KSkge1xuICAgICAgICAgICAgY29uc3QgdW5tYXRjaGVkID0gaW5wdXQuc2xpY2UodW5tYXRjaGVkU3RhcnQsIHVubWF0Y2hlZEVuZCkgfHwgaW5wdXQuc2xpY2UoaW5kZXhQcmV2LCBpbmRleCk7XG4gICAgICAgICAgICBsZW5ndGhFeHRyYSA9IDA7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNoYXIgb2YgdW5tYXRjaGVkLnJlcGxhY2VBbGwoTU9ESUZJRVJfUkUsICcnKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvZGVQb2ludCA9IGNoYXIuY29kZVBvaW50QXQoMCkgfHwgMDtcbiAgICAgICAgICAgICAgICBpZiAoaXNGdWxsV2lkdGgoY29kZVBvaW50KSkge1xuICAgICAgICAgICAgICAgICAgICB3aWR0aEV4dHJhID0gRlVMTF9XSURUSF9XSURUSDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoaXNXaWRlKGNvZGVQb2ludCkpIHtcbiAgICAgICAgICAgICAgICAgICAgd2lkdGhFeHRyYSA9IFdJREVfV0lEVEg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKEFNQklHVU9VU19XSURUSCAhPT0gUkVHVUxBUl9XSURUSCAmJiBpc0FtYmlndW91cyhjb2RlUG9pbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHdpZHRoRXh0cmEgPSBBTUJJR1VPVVNfV0lEVEg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB3aWR0aEV4dHJhID0gUkVHVUxBUl9XSURUSDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCh3aWR0aCArIHdpZHRoRXh0cmEpID4gdHJ1bmNhdGlvbkxpbWl0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRydW5jYXRpb25JbmRleCA9IE1hdGgubWluKHRydW5jYXRpb25JbmRleCwgTWF0aC5tYXgodW5tYXRjaGVkU3RhcnQsIGluZGV4UHJldikgKyBsZW5ndGhFeHRyYSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICgod2lkdGggKyB3aWR0aEV4dHJhKSA+IExJTUlUKSB7XG4gICAgICAgICAgICAgICAgICAgIHRydW5jYXRpb25FbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWsgb3V0ZXI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxlbmd0aEV4dHJhICs9IGNoYXIubGVuZ3RoO1xuICAgICAgICAgICAgICAgIHdpZHRoICs9IHdpZHRoRXh0cmE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB1bm1hdGNoZWRTdGFydCA9IHVubWF0Y2hlZEVuZCA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgLyogRVhJVElORyAqL1xuICAgICAgICBpZiAoaW5kZXggPj0gbGVuZ3RoKVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIC8qIExBVElOICovXG4gICAgICAgIExBVElOX1JFLmxhc3RJbmRleCA9IGluZGV4O1xuICAgICAgICBpZiAoTEFUSU5fUkUudGVzdChpbnB1dCkpIHtcbiAgICAgICAgICAgIGxlbmd0aEV4dHJhID0gTEFUSU5fUkUubGFzdEluZGV4IC0gaW5kZXg7XG4gICAgICAgICAgICB3aWR0aEV4dHJhID0gbGVuZ3RoRXh0cmEgKiBSRUdVTEFSX1dJRFRIO1xuICAgICAgICAgICAgaWYgKCh3aWR0aCArIHdpZHRoRXh0cmEpID4gdHJ1bmNhdGlvbkxpbWl0KSB7XG4gICAgICAgICAgICAgICAgdHJ1bmNhdGlvbkluZGV4ID0gTWF0aC5taW4odHJ1bmNhdGlvbkluZGV4LCBpbmRleCArIE1hdGguZmxvb3IoKHRydW5jYXRpb25MaW1pdCAtIHdpZHRoKSAvIFJFR1VMQVJfV0lEVEgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgod2lkdGggKyB3aWR0aEV4dHJhKSA+IExJTUlUKSB7XG4gICAgICAgICAgICAgICAgdHJ1bmNhdGlvbkVuYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd2lkdGggKz0gd2lkdGhFeHRyYTtcbiAgICAgICAgICAgIHVubWF0Y2hlZFN0YXJ0ID0gaW5kZXhQcmV2O1xuICAgICAgICAgICAgdW5tYXRjaGVkRW5kID0gaW5kZXg7XG4gICAgICAgICAgICBpbmRleCA9IGluZGV4UHJldiA9IExBVElOX1JFLmxhc3RJbmRleDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIC8qIEFOU0kgKi9cbiAgICAgICAgQU5TSV9SRS5sYXN0SW5kZXggPSBpbmRleDtcbiAgICAgICAgaWYgKEFOU0lfUkUudGVzdChpbnB1dCkpIHtcbiAgICAgICAgICAgIGlmICgod2lkdGggKyBBTlNJX1dJRFRIKSA+IHRydW5jYXRpb25MaW1pdCkge1xuICAgICAgICAgICAgICAgIHRydW5jYXRpb25JbmRleCA9IE1hdGgubWluKHRydW5jYXRpb25JbmRleCwgaW5kZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCh3aWR0aCArIEFOU0lfV0lEVEgpID4gTElNSVQpIHtcbiAgICAgICAgICAgICAgICB0cnVuY2F0aW9uRW5hYmxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB3aWR0aCArPSBBTlNJX1dJRFRIO1xuICAgICAgICAgICAgdW5tYXRjaGVkU3RhcnQgPSBpbmRleFByZXY7XG4gICAgICAgICAgICB1bm1hdGNoZWRFbmQgPSBpbmRleDtcbiAgICAgICAgICAgIGluZGV4ID0gaW5kZXhQcmV2ID0gQU5TSV9SRS5sYXN0SW5kZXg7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICAvKiBDT05UUk9MICovXG4gICAgICAgIENPTlRST0xfUkUubGFzdEluZGV4ID0gaW5kZXg7XG4gICAgICAgIGlmIChDT05UUk9MX1JFLnRlc3QoaW5wdXQpKSB7XG4gICAgICAgICAgICBsZW5ndGhFeHRyYSA9IENPTlRST0xfUkUubGFzdEluZGV4IC0gaW5kZXg7XG4gICAgICAgICAgICB3aWR0aEV4dHJhID0gbGVuZ3RoRXh0cmEgKiBDT05UUk9MX1dJRFRIO1xuICAgICAgICAgICAgaWYgKCh3aWR0aCArIHdpZHRoRXh0cmEpID4gdHJ1bmNhdGlvbkxpbWl0KSB7XG4gICAgICAgICAgICAgICAgdHJ1bmNhdGlvbkluZGV4ID0gTWF0aC5taW4odHJ1bmNhdGlvbkluZGV4LCBpbmRleCArIE1hdGguZmxvb3IoKHRydW5jYXRpb25MaW1pdCAtIHdpZHRoKSAvIENPTlRST0xfV0lEVEgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgod2lkdGggKyB3aWR0aEV4dHJhKSA+IExJTUlUKSB7XG4gICAgICAgICAgICAgICAgdHJ1bmNhdGlvbkVuYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd2lkdGggKz0gd2lkdGhFeHRyYTtcbiAgICAgICAgICAgIHVubWF0Y2hlZFN0YXJ0ID0gaW5kZXhQcmV2O1xuICAgICAgICAgICAgdW5tYXRjaGVkRW5kID0gaW5kZXg7XG4gICAgICAgICAgICBpbmRleCA9IGluZGV4UHJldiA9IENPTlRST0xfUkUubGFzdEluZGV4O1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgLyogVEFCICovXG4gICAgICAgIFRBQl9SRS5sYXN0SW5kZXggPSBpbmRleDtcbiAgICAgICAgaWYgKFRBQl9SRS50ZXN0KGlucHV0KSkge1xuICAgICAgICAgICAgbGVuZ3RoRXh0cmEgPSBUQUJfUkUubGFzdEluZGV4IC0gaW5kZXg7XG4gICAgICAgICAgICB3aWR0aEV4dHJhID0gbGVuZ3RoRXh0cmEgKiBUQUJfV0lEVEg7XG4gICAgICAgICAgICBpZiAoKHdpZHRoICsgd2lkdGhFeHRyYSkgPiB0cnVuY2F0aW9uTGltaXQpIHtcbiAgICAgICAgICAgICAgICB0cnVuY2F0aW9uSW5kZXggPSBNYXRoLm1pbih0cnVuY2F0aW9uSW5kZXgsIGluZGV4ICsgTWF0aC5mbG9vcigodHJ1bmNhdGlvbkxpbWl0IC0gd2lkdGgpIC8gVEFCX1dJRFRIKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoKHdpZHRoICsgd2lkdGhFeHRyYSkgPiBMSU1JVCkge1xuICAgICAgICAgICAgICAgIHRydW5jYXRpb25FbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHdpZHRoICs9IHdpZHRoRXh0cmE7XG4gICAgICAgICAgICB1bm1hdGNoZWRTdGFydCA9IGluZGV4UHJldjtcbiAgICAgICAgICAgIHVubWF0Y2hlZEVuZCA9IGluZGV4O1xuICAgICAgICAgICAgaW5kZXggPSBpbmRleFByZXYgPSBUQUJfUkUubGFzdEluZGV4O1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgLyogRU1PSkkgKi9cbiAgICAgICAgRU1PSklfUkUubGFzdEluZGV4ID0gaW5kZXg7XG4gICAgICAgIGlmIChFTU9KSV9SRS50ZXN0KGlucHV0KSkge1xuICAgICAgICAgICAgaWYgKCh3aWR0aCArIEVNT0pJX1dJRFRIKSA+IHRydW5jYXRpb25MaW1pdCkge1xuICAgICAgICAgICAgICAgIHRydW5jYXRpb25JbmRleCA9IE1hdGgubWluKHRydW5jYXRpb25JbmRleCwgaW5kZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCh3aWR0aCArIEVNT0pJX1dJRFRIKSA+IExJTUlUKSB7XG4gICAgICAgICAgICAgICAgdHJ1bmNhdGlvbkVuYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd2lkdGggKz0gRU1PSklfV0lEVEg7XG4gICAgICAgICAgICB1bm1hdGNoZWRTdGFydCA9IGluZGV4UHJldjtcbiAgICAgICAgICAgIHVubWF0Y2hlZEVuZCA9IGluZGV4O1xuICAgICAgICAgICAgaW5kZXggPSBpbmRleFByZXYgPSBFTU9KSV9SRS5sYXN0SW5kZXg7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICAvKiBVTk1BVENIRUQgSU5ERVggKi9cbiAgICAgICAgaW5kZXggKz0gMTtcbiAgICB9XG4gICAgLyogUkVUVVJOICovXG4gICAgcmV0dXJuIHtcbiAgICAgICAgd2lkdGg6IHRydW5jYXRpb25FbmFibGVkID8gdHJ1bmNhdGlvbkxpbWl0IDogd2lkdGgsXG4gICAgICAgIGluZGV4OiB0cnVuY2F0aW9uRW5hYmxlZCA/IHRydW5jYXRpb25JbmRleCA6IGxlbmd0aCxcbiAgICAgICAgdHJ1bmNhdGVkOiB0cnVuY2F0aW9uRW5hYmxlZCxcbiAgICAgICAgZWxsaXBzZWQ6IHRydW5jYXRpb25FbmFibGVkICYmIExJTUlUID49IEVMTElQU0lTX1dJRFRIXG4gICAgfTtcbn07XG4vKiBFWFBPUlQgKi9cbmV4cG9ydCBkZWZhdWx0IGdldFN0cmluZ1RydW5jYXRlZFdpZHRoO1xuIiwgIi8qIElNUE9SVCAqL1xuaW1wb3J0IGZhc3RTdHJpbmdUcnVuY2F0ZWRXaWR0aCBmcm9tICdmYXN0LXN0cmluZy10cnVuY2F0ZWQtd2lkdGgnO1xuLyogSEVMUEVSUyAqL1xuY29uc3QgTk9fVFJVTkNBVElPTiA9IHtcbiAgICBsaW1pdDogSW5maW5pdHksXG4gICAgZWxsaXBzaXM6ICcnLFxuICAgIGVsbGlwc2lzV2lkdGg6IDAsXG59O1xuLyogTUFJTiAqL1xuY29uc3QgZmFzdFN0cmluZ1dpZHRoID0gKGlucHV0LCBvcHRpb25zID0ge30pID0+IHtcbiAgICByZXR1cm4gZmFzdFN0cmluZ1RydW5jYXRlZFdpZHRoKGlucHV0LCBOT19UUlVOQ0FUSU9OLCBvcHRpb25zKS53aWR0aDtcbn07XG4vKiBFWFBPUlQgKi9cbmV4cG9ydCBkZWZhdWx0IGZhc3RTdHJpbmdXaWR0aDtcbiIsICJpbXBvcnQgc3RyaW5nV2lkdGggZnJvbSAnZmFzdC1zdHJpbmctd2lkdGgnO1xuY29uc3QgRVNDID0gJ1xceDFCJztcbmNvbnN0IENTSSA9ICdcXHg5Qic7XG5jb25zdCBFTkRfQ09ERSA9IDM5O1xuY29uc3QgQU5TSV9FU0NBUEVfQkVMTCA9ICdcXHUwMDA3JztcbmNvbnN0IEFOU0lfQ1NJID0gJ1snO1xuY29uc3QgQU5TSV9PU0MgPSAnXSc7XG5jb25zdCBBTlNJX1NHUl9URVJNSU5BVE9SID0gJ20nO1xuY29uc3QgQU5TSV9FU0NBUEVfTElOSyA9IGAke0FOU0lfT1NDfTg7O2A7XG5jb25zdCBHUk9VUF9SRUdFWCA9IG5ldyBSZWdFeHAoYCg/OlxcXFwke0FOU0lfQ1NJfSg/PGNvZGU+XFxcXGQrKW18XFxcXCR7QU5TSV9FU0NBUEVfTElOS30oPzx1cmk+LiopJHtBTlNJX0VTQ0FQRV9CRUxMfSlgLCAneScpO1xuY29uc3QgZ2V0Q2xvc2luZ0NvZGUgPSAob3BlbmluZ0NvZGUpID0+IHtcbiAgICBpZiAob3BlbmluZ0NvZGUgPj0gMzAgJiYgb3BlbmluZ0NvZGUgPD0gMzcpXG4gICAgICAgIHJldHVybiAzOTtcbiAgICBpZiAob3BlbmluZ0NvZGUgPj0gOTAgJiYgb3BlbmluZ0NvZGUgPD0gOTcpXG4gICAgICAgIHJldHVybiAzOTtcbiAgICBpZiAob3BlbmluZ0NvZGUgPj0gNDAgJiYgb3BlbmluZ0NvZGUgPD0gNDcpXG4gICAgICAgIHJldHVybiA0OTtcbiAgICBpZiAob3BlbmluZ0NvZGUgPj0gMTAwICYmIG9wZW5pbmdDb2RlIDw9IDEwNylcbiAgICAgICAgcmV0dXJuIDQ5O1xuICAgIGlmIChvcGVuaW5nQ29kZSA9PT0gMSB8fCBvcGVuaW5nQ29kZSA9PT0gMilcbiAgICAgICAgcmV0dXJuIDIyO1xuICAgIGlmIChvcGVuaW5nQ29kZSA9PT0gMylcbiAgICAgICAgcmV0dXJuIDIzO1xuICAgIGlmIChvcGVuaW5nQ29kZSA9PT0gNClcbiAgICAgICAgcmV0dXJuIDI0O1xuICAgIGlmIChvcGVuaW5nQ29kZSA9PT0gNylcbiAgICAgICAgcmV0dXJuIDI3O1xuICAgIGlmIChvcGVuaW5nQ29kZSA9PT0gOClcbiAgICAgICAgcmV0dXJuIDI4O1xuICAgIGlmIChvcGVuaW5nQ29kZSA9PT0gOSlcbiAgICAgICAgcmV0dXJuIDI5O1xuICAgIGlmIChvcGVuaW5nQ29kZSA9PT0gMClcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG5jb25zdCB3cmFwQW5zaUNvZGUgPSAoY29kZSkgPT4gYCR7RVNDfSR7QU5TSV9DU0l9JHtjb2RlfSR7QU5TSV9TR1JfVEVSTUlOQVRPUn1gO1xuY29uc3Qgd3JhcEFuc2lIeXBlcmxpbmsgPSAodXJsKSA9PiBgJHtFU0N9JHtBTlNJX0VTQ0FQRV9MSU5LfSR7dXJsfSR7QU5TSV9FU0NBUEVfQkVMTH1gO1xuY29uc3Qgd29yZExlbmd0aHMgPSAod29yZHMpID0+IHdvcmRzLm1hcCgoY2hhcmFjdGVyKSA9PiBzdHJpbmdXaWR0aChjaGFyYWN0ZXIpKTtcbmNvbnN0IHdyYXBXb3JkID0gKHJvd3MsIHdvcmQsIGNvbHVtbnMpID0+IHtcbiAgICBjb25zdCBjaGFyYWN0ZXJzID0gd29yZFtTeW1ib2wuaXRlcmF0b3JdKCk7XG4gICAgbGV0IGlzSW5zaWRlRXNjYXBlID0gZmFsc2U7XG4gICAgbGV0IGlzSW5zaWRlTGlua0VzY2FwZSA9IGZhbHNlO1xuICAgIGxldCBsYXN0Um93ID0gcm93cy5hdCgtMSk7XG4gICAgbGV0IHZpc2libGUgPSBsYXN0Um93ID09PSB1bmRlZmluZWQgPyAwIDogc3RyaW5nV2lkdGgobGFzdFJvdyk7XG4gICAgbGV0IGN1cnJlbnRDaGFyYWN0ZXIgPSBjaGFyYWN0ZXJzLm5leHQoKTtcbiAgICBsZXQgbmV4dENoYXJhY3RlciA9IGNoYXJhY3RlcnMubmV4dCgpO1xuICAgIGxldCByYXdDaGFyYWN0ZXJJbmRleCA9IDA7XG4gICAgd2hpbGUgKCFjdXJyZW50Q2hhcmFjdGVyLmRvbmUpIHtcbiAgICAgICAgY29uc3QgY2hhcmFjdGVyID0gY3VycmVudENoYXJhY3Rlci52YWx1ZTtcbiAgICAgICAgY29uc3QgY2hhcmFjdGVyTGVuZ3RoID0gc3RyaW5nV2lkdGgoY2hhcmFjdGVyKTtcbiAgICAgICAgaWYgKHZpc2libGUgKyBjaGFyYWN0ZXJMZW5ndGggPD0gY29sdW1ucykge1xuICAgICAgICAgICAgcm93c1tyb3dzLmxlbmd0aCAtIDFdICs9IGNoYXJhY3RlcjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJvd3MucHVzaChjaGFyYWN0ZXIpO1xuICAgICAgICAgICAgdmlzaWJsZSA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoYXJhY3RlciA9PT0gRVNDIHx8IGNoYXJhY3RlciA9PT0gQ1NJKSB7XG4gICAgICAgICAgICBpc0luc2lkZUVzY2FwZSA9IHRydWU7XG4gICAgICAgICAgICBpc0luc2lkZUxpbmtFc2NhcGUgPSB3b3JkLnN0YXJ0c1dpdGgoQU5TSV9FU0NBUEVfTElOSywgcmF3Q2hhcmFjdGVySW5kZXggKyAxKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNJbnNpZGVFc2NhcGUpIHtcbiAgICAgICAgICAgIGlmIChpc0luc2lkZUxpbmtFc2NhcGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2hhcmFjdGVyID09PSBBTlNJX0VTQ0FQRV9CRUxMKSB7XG4gICAgICAgICAgICAgICAgICAgIGlzSW5zaWRlRXNjYXBlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGlzSW5zaWRlTGlua0VzY2FwZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoYXJhY3RlciA9PT0gQU5TSV9TR1JfVEVSTUlOQVRPUikge1xuICAgICAgICAgICAgICAgIGlzSW5zaWRlRXNjYXBlID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2aXNpYmxlICs9IGNoYXJhY3Rlckxlbmd0aDtcbiAgICAgICAgICAgIGlmICh2aXNpYmxlID09PSBjb2x1bW5zICYmICFuZXh0Q2hhcmFjdGVyLmRvbmUpIHtcbiAgICAgICAgICAgICAgICByb3dzLnB1c2goJycpO1xuICAgICAgICAgICAgICAgIHZpc2libGUgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGN1cnJlbnRDaGFyYWN0ZXIgPSBuZXh0Q2hhcmFjdGVyO1xuICAgICAgICBuZXh0Q2hhcmFjdGVyID0gY2hhcmFjdGVycy5uZXh0KCk7XG4gICAgICAgIHJhd0NoYXJhY3RlckluZGV4ICs9IGNoYXJhY3Rlci5sZW5ndGg7XG4gICAgfVxuICAgIGxhc3RSb3cgPSByb3dzLmF0KC0xKTtcbiAgICBpZiAoIXZpc2libGUgJiZcbiAgICAgICAgbGFzdFJvdyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgIGxhc3RSb3cubGVuZ3RoID4gMCAmJlxuICAgICAgICByb3dzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgcm93c1tyb3dzLmxlbmd0aCAtIDJdICs9IHJvd3MucG9wKCk7XG4gICAgfVxufTtcbmNvbnN0IHN0cmluZ1Zpc2libGVUcmltU3BhY2VzUmlnaHQgPSAoc3RyaW5nKSA9PiB7XG4gICAgY29uc3Qgd29yZHMgPSBzdHJpbmcuc3BsaXQoJyAnKTtcbiAgICBsZXQgbGFzdCA9IHdvcmRzLmxlbmd0aDtcbiAgICB3aGlsZSAobGFzdCA+IDApIHtcbiAgICAgICAgaWYgKHN0cmluZ1dpZHRoKHdvcmRzW2xhc3QgLSAxXSkgPiAwKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBsYXN0LS07XG4gICAgfVxuICAgIGlmIChsYXN0ID09PSB3b3Jkcy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHN0cmluZztcbiAgICB9XG4gICAgcmV0dXJuIHdvcmRzLnNsaWNlKDAsIGxhc3QpLmpvaW4oJyAnKSArIHdvcmRzLnNsaWNlKGxhc3QpLmpvaW4oJycpO1xufTtcbmNvbnN0IGV4ZWMgPSAoc3RyaW5nLCBjb2x1bW5zLCBvcHRpb25zID0ge30pID0+IHtcbiAgICBpZiAob3B0aW9ucy50cmltICE9PSBmYWxzZSAmJiBzdHJpbmcudHJpbSgpID09PSAnJykge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIGxldCByZXR1cm5WYWx1ZSA9ICcnO1xuICAgIGxldCBlc2NhcGVDb2RlO1xuICAgIGxldCBlc2NhcGVVcmw7XG4gICAgY29uc3Qgd29yZHMgPSBzdHJpbmcuc3BsaXQoJyAnKTtcbiAgICBjb25zdCBsZW5ndGhzID0gd29yZExlbmd0aHMod29yZHMpO1xuICAgIGxldCByb3dzID0gWycnXTtcbiAgICBmb3IgKGNvbnN0IFtpbmRleCwgd29yZF0gb2Ygd29yZHMuZW50cmllcygpKSB7XG4gICAgICAgIGlmIChvcHRpb25zLnRyaW0gIT09IGZhbHNlKSB7XG4gICAgICAgICAgICByb3dzW3Jvd3MubGVuZ3RoIC0gMV0gPSAocm93cy5hdCgtMSkgPz8gJycpLnRyaW1TdGFydCgpO1xuICAgICAgICB9XG4gICAgICAgIGxldCByb3dMZW5ndGggPSBzdHJpbmdXaWR0aChyb3dzLmF0KC0xKSA/PyAnJyk7XG4gICAgICAgIGlmIChpbmRleCAhPT0gMCkge1xuICAgICAgICAgICAgaWYgKHJvd0xlbmd0aCA+PSBjb2x1bW5zICYmXG4gICAgICAgICAgICAgICAgKG9wdGlvbnMud29yZFdyYXAgPT09IGZhbHNlIHx8IG9wdGlvbnMudHJpbSA9PT0gZmFsc2UpKSB7XG4gICAgICAgICAgICAgICAgcm93cy5wdXNoKCcnKTtcbiAgICAgICAgICAgICAgICByb3dMZW5ndGggPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJvd0xlbmd0aCA+IDAgfHwgb3B0aW9ucy50cmltID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHJvd3Nbcm93cy5sZW5ndGggLSAxXSArPSAnICc7XG4gICAgICAgICAgICAgICAgcm93TGVuZ3RoKys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuaGFyZCAmJiBsZW5ndGhzW2luZGV4XSA+IGNvbHVtbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlbWFpbmluZ0NvbHVtbnMgPSBjb2x1bW5zIC0gcm93TGVuZ3RoO1xuICAgICAgICAgICAgY29uc3QgYnJlYWtzU3RhcnRpbmdUaGlzTGluZSA9IDEgKyBNYXRoLmZsb29yKChsZW5ndGhzW2luZGV4XSAtIHJlbWFpbmluZ0NvbHVtbnMgLSAxKSAvIGNvbHVtbnMpO1xuICAgICAgICAgICAgY29uc3QgYnJlYWtzU3RhcnRpbmdOZXh0TGluZSA9IE1hdGguZmxvb3IoKGxlbmd0aHNbaW5kZXhdIC0gMSkgLyBjb2x1bW5zKTtcbiAgICAgICAgICAgIGlmIChicmVha3NTdGFydGluZ05leHRMaW5lIDwgYnJlYWtzU3RhcnRpbmdUaGlzTGluZSkge1xuICAgICAgICAgICAgICAgIHJvd3MucHVzaCgnJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB3cmFwV29yZChyb3dzLCB3b3JkLCBjb2x1bW5zKTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyb3dMZW5ndGggKyBsZW5ndGhzW2luZGV4XSA+IGNvbHVtbnMgJiZcbiAgICAgICAgICAgIHJvd0xlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgIGxlbmd0aHNbaW5kZXhdID4gMCkge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMud29yZFdyYXAgPT09IGZhbHNlICYmIHJvd0xlbmd0aCA8IGNvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICB3cmFwV29yZChyb3dzLCB3b3JkLCBjb2x1bW5zKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJvd3MucHVzaCgnJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJvd0xlbmd0aCArIGxlbmd0aHNbaW5kZXhdID4gY29sdW1ucyAmJiBvcHRpb25zLndvcmRXcmFwID09PSBmYWxzZSkge1xuICAgICAgICAgICAgd3JhcFdvcmQocm93cywgd29yZCwgY29sdW1ucyk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICByb3dzW3Jvd3MubGVuZ3RoIC0gMV0gKz0gd29yZDtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMudHJpbSAhPT0gZmFsc2UpIHtcbiAgICAgICAgcm93cyA9IHJvd3MubWFwKChyb3cpID0+IHN0cmluZ1Zpc2libGVUcmltU3BhY2VzUmlnaHQocm93KSk7XG4gICAgfVxuICAgIGNvbnN0IHByZVN0cmluZyA9IHJvd3Muam9pbignXFxuJyk7XG4gICAgY29uc3QgcHJlID0gcHJlU3RyaW5nW1N5bWJvbC5pdGVyYXRvcl0oKTtcbiAgICBsZXQgY3VycmVudFByZSA9IHByZS5uZXh0KCk7XG4gICAgbGV0IG5leHRQcmUgPSBwcmUubmV4dCgpO1xuICAgIC8vIFdlIG5lZWQgdG8ga2VlcCBhIHNlcGFyYXRlIGluZGV4IGFzIGBTdHJpbmcjc2xpY2UoKWAgd29ya3Mgb24gVW5pY29kZSBjb2RlIHVuaXRzLCB3aGlsZSBgcHJlYCBpcyBhbiBhcnJheSBvZiBjb2RlcG9pbnRzLlxuICAgIGxldCBwcmVTdHJpbmdJbmRleCA9IDA7XG4gICAgd2hpbGUgKCFjdXJyZW50UHJlLmRvbmUpIHtcbiAgICAgICAgY29uc3QgY2hhcmFjdGVyID0gY3VycmVudFByZS52YWx1ZTtcbiAgICAgICAgY29uc3QgbmV4dENoYXJhY3RlciA9IG5leHRQcmUudmFsdWU7XG4gICAgICAgIHJldHVyblZhbHVlICs9IGNoYXJhY3RlcjtcbiAgICAgICAgaWYgKGNoYXJhY3RlciA9PT0gRVNDIHx8IGNoYXJhY3RlciA9PT0gQ1NJKSB7XG4gICAgICAgICAgICBHUk9VUF9SRUdFWC5sYXN0SW5kZXggPSBwcmVTdHJpbmdJbmRleCArIDE7XG4gICAgICAgICAgICBjb25zdCBncm91cHNSZXN1bHQgPSBHUk9VUF9SRUdFWC5leGVjKHByZVN0cmluZyk7XG4gICAgICAgICAgICBjb25zdCBncm91cHMgPSBncm91cHNSZXN1bHQ/Lmdyb3VwcztcbiAgICAgICAgICAgIGlmIChncm91cHM/LmNvZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvZGUgPSBOdW1iZXIucGFyc2VGbG9hdChncm91cHMuY29kZSk7XG4gICAgICAgICAgICAgICAgZXNjYXBlQ29kZSA9IGNvZGUgPT09IEVORF9DT0RFID8gdW5kZWZpbmVkIDogY29kZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGdyb3Vwcz8udXJpICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBlc2NhcGVVcmwgPSBncm91cHMudXJpLmxlbmd0aCA9PT0gMCA/IHVuZGVmaW5lZCA6IGdyb3Vwcy51cmk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2xvc2luZ0NvZGUgPSBlc2NhcGVDb2RlID8gZ2V0Q2xvc2luZ0NvZGUoZXNjYXBlQ29kZSkgOiB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChuZXh0Q2hhcmFjdGVyID09PSAnXFxuJykge1xuICAgICAgICAgICAgaWYgKGVzY2FwZVVybCkge1xuICAgICAgICAgICAgICAgIHJldHVyblZhbHVlICs9IHdyYXBBbnNpSHlwZXJsaW5rKCcnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlc2NhcGVDb2RlICYmIGNsb3NpbmdDb2RlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUgKz0gd3JhcEFuc2lDb2RlKGNsb3NpbmdDb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjaGFyYWN0ZXIgPT09ICdcXG4nKSB7XG4gICAgICAgICAgICBpZiAoZXNjYXBlQ29kZSAmJiBjbG9zaW5nQ29kZSkge1xuICAgICAgICAgICAgICAgIHJldHVyblZhbHVlICs9IHdyYXBBbnNpQ29kZShlc2NhcGVDb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlc2NhcGVVcmwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSArPSB3cmFwQW5zaUh5cGVybGluayhlc2NhcGVVcmwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHByZVN0cmluZ0luZGV4ICs9IGNoYXJhY3Rlci5sZW5ndGg7XG4gICAgICAgIGN1cnJlbnRQcmUgPSBuZXh0UHJlO1xuICAgICAgICBuZXh0UHJlID0gcHJlLm5leHQoKTtcbiAgICB9XG4gICAgcmV0dXJuIHJldHVyblZhbHVlO1xufTtcbmV4cG9ydCBmdW5jdGlvbiB3cmFwQW5zaShzdHJpbmcsIGNvbHVtbnMsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gU3RyaW5nKHN0cmluZylcbiAgICAgICAgLm5vcm1hbGl6ZSgpXG4gICAgICAgIC5yZXBsYWNlQWxsKCdcXHJcXG4nLCAnXFxuJylcbiAgICAgICAgLnNwbGl0KCdcXG4nKVxuICAgICAgICAubWFwKChsaW5lKSA9PiBleGVjKGxpbmUsIGNvbHVtbnMsIG9wdGlvbnMpKVxuICAgICAgICAuam9pbignXFxuJyk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1tYWluLmpzLm1hcCIsICJpbXBvcnQgdHlwZSB7IFdyaXRhYmxlIH0gZnJvbSAnbm9kZTpzdHJlYW0nO1xuaW1wb3J0IHsgZ2V0Q29sdW1ucywgZ2V0Um93cyB9IGZyb20gJ0BjbGFjay9jb3JlJztcbmltcG9ydCB7IHdyYXBBbnNpIH0gZnJvbSAnZmFzdC13cmFwLWFuc2knO1xuaW1wb3J0IGNvbG9yIGZyb20gJ3BpY29jb2xvcnMnO1xuaW1wb3J0IHR5cGUgeyBDb21tb25PcHRpb25zIH0gZnJvbSAnLi9jb21tb24uanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIExpbWl0T3B0aW9uc1BhcmFtczxUT3B0aW9uPiBleHRlbmRzIENvbW1vbk9wdGlvbnMge1xuXHRvcHRpb25zOiBUT3B0aW9uW107XG5cdG1heEl0ZW1zOiBudW1iZXIgfCB1bmRlZmluZWQ7XG5cdGN1cnNvcjogbnVtYmVyO1xuXHRzdHlsZTogKG9wdGlvbjogVE9wdGlvbiwgYWN0aXZlOiBib29sZWFuKSA9PiBzdHJpbmc7XG5cdGNvbHVtblBhZGRpbmc/OiBudW1iZXI7XG5cdHJvd1BhZGRpbmc/OiBudW1iZXI7XG59XG5cbmNvbnN0IHRyaW1MaW5lcyA9IChcblx0Z3JvdXBzOiBBcnJheTxzdHJpbmdbXT4sXG5cdGluaXRpYWxMaW5lQ291bnQ6IG51bWJlcixcblx0c3RhcnRJbmRleDogbnVtYmVyLFxuXHRlbmRJbmRleDogbnVtYmVyLFxuXHRtYXhMaW5lczogbnVtYmVyXG4pID0+IHtcblx0bGV0IGxpbmVDb3VudCA9IGluaXRpYWxMaW5lQ291bnQ7XG5cdGxldCByZW1vdmFscyA9IDA7XG5cdGZvciAobGV0IGkgPSBzdGFydEluZGV4OyBpIDwgZW5kSW5kZXg7IGkrKykge1xuXHRcdGNvbnN0IGdyb3VwID0gZ3JvdXBzW2ldO1xuXHRcdGxpbmVDb3VudCA9IGxpbmVDb3VudCAtIGdyb3VwLmxlbmd0aDtcblx0XHRyZW1vdmFscysrO1xuXHRcdGlmIChsaW5lQ291bnQgPD0gbWF4TGluZXMpIHtcblx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4geyBsaW5lQ291bnQsIHJlbW92YWxzIH07XG59O1xuXG5leHBvcnQgY29uc3QgbGltaXRPcHRpb25zID0gPFRPcHRpb24+KHBhcmFtczogTGltaXRPcHRpb25zUGFyYW1zPFRPcHRpb24+KTogc3RyaW5nW10gPT4ge1xuXHRjb25zdCB7IGN1cnNvciwgb3B0aW9ucywgc3R5bGUgfSA9IHBhcmFtcztcblx0Y29uc3Qgb3V0cHV0OiBXcml0YWJsZSA9IHBhcmFtcy5vdXRwdXQgPz8gcHJvY2Vzcy5zdGRvdXQ7XG5cdGNvbnN0IGNvbHVtbnMgPSBnZXRDb2x1bW5zKG91dHB1dCk7XG5cdGNvbnN0IGNvbHVtblBhZGRpbmcgPSBwYXJhbXMuY29sdW1uUGFkZGluZyA/PyAwO1xuXHRjb25zdCByb3dQYWRkaW5nID0gcGFyYW1zLnJvd1BhZGRpbmcgPz8gNDtcblx0Y29uc3QgbWF4V2lkdGggPSBjb2x1bW5zIC0gY29sdW1uUGFkZGluZztcblx0Y29uc3Qgcm93cyA9IGdldFJvd3Mob3V0cHV0KTtcblx0Y29uc3Qgb3ZlcmZsb3dGb3JtYXQgPSBjb2xvci5kaW0oJy4uLicpO1xuXG5cdGNvbnN0IHBhcmFtTWF4SXRlbXMgPSBwYXJhbXMubWF4SXRlbXMgPz8gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO1xuXHRjb25zdCBvdXRwdXRNYXhJdGVtcyA9IE1hdGgubWF4KHJvd3MgLSByb3dQYWRkaW5nLCAwKTtcblx0Ly8gV2UgY2xhbXAgdG8gbWluaW11bSA1IGJlY2F1c2UgYW55dGhpbmcgbGVzcyBkb2Vzbid0IG1ha2Ugc2Vuc2UgVVggd2lzZVxuXHRjb25zdCBtYXhJdGVtcyA9IE1hdGgubWF4KE1hdGgubWluKHBhcmFtTWF4SXRlbXMsIG91dHB1dE1heEl0ZW1zKSwgNSk7XG5cdGxldCBzbGlkaW5nV2luZG93TG9jYXRpb24gPSAwO1xuXG5cdGlmIChjdXJzb3IgPj0gbWF4SXRlbXMgLSAzKSB7XG5cdFx0c2xpZGluZ1dpbmRvd0xvY2F0aW9uID0gTWF0aC5tYXgoTWF0aC5taW4oY3Vyc29yIC0gbWF4SXRlbXMgKyAzLCBvcHRpb25zLmxlbmd0aCAtIG1heEl0ZW1zKSwgMCk7XG5cdH1cblxuXHRsZXQgc2hvdWxkUmVuZGVyVG9wRWxsaXBzaXMgPSBtYXhJdGVtcyA8IG9wdGlvbnMubGVuZ3RoICYmIHNsaWRpbmdXaW5kb3dMb2NhdGlvbiA+IDA7XG5cdGxldCBzaG91bGRSZW5kZXJCb3R0b21FbGxpcHNpcyA9XG5cdFx0bWF4SXRlbXMgPCBvcHRpb25zLmxlbmd0aCAmJiBzbGlkaW5nV2luZG93TG9jYXRpb24gKyBtYXhJdGVtcyA8IG9wdGlvbnMubGVuZ3RoO1xuXG5cdGNvbnN0IHNsaWRpbmdXaW5kb3dMb2NhdGlvbkVuZCA9IE1hdGgubWluKHNsaWRpbmdXaW5kb3dMb2NhdGlvbiArIG1heEl0ZW1zLCBvcHRpb25zLmxlbmd0aCk7XG5cdGNvbnN0IGxpbmVHcm91cHM6IEFycmF5PHN0cmluZ1tdPiA9IFtdO1xuXHRsZXQgbGluZUNvdW50ID0gMDtcblx0aWYgKHNob3VsZFJlbmRlclRvcEVsbGlwc2lzKSB7XG5cdFx0bGluZUNvdW50Kys7XG5cdH1cblx0aWYgKHNob3VsZFJlbmRlckJvdHRvbUVsbGlwc2lzKSB7XG5cdFx0bGluZUNvdW50Kys7XG5cdH1cblxuXHRjb25zdCBzbGlkaW5nV2luZG93TG9jYXRpb25XaXRoRWxsaXBzaXMgPVxuXHRcdHNsaWRpbmdXaW5kb3dMb2NhdGlvbiArIChzaG91bGRSZW5kZXJUb3BFbGxpcHNpcyA/IDEgOiAwKTtcblx0Y29uc3Qgc2xpZGluZ1dpbmRvd0xvY2F0aW9uRW5kV2l0aEVsbGlwc2lzID1cblx0XHRzbGlkaW5nV2luZG93TG9jYXRpb25FbmQgLSAoc2hvdWxkUmVuZGVyQm90dG9tRWxsaXBzaXMgPyAxIDogMCk7XG5cblx0Zm9yIChsZXQgaSA9IHNsaWRpbmdXaW5kb3dMb2NhdGlvbldpdGhFbGxpcHNpczsgaSA8IHNsaWRpbmdXaW5kb3dMb2NhdGlvbkVuZFdpdGhFbGxpcHNpczsgaSsrKSB7XG5cdFx0Y29uc3Qgd3JhcHBlZExpbmVzID0gd3JhcEFuc2koc3R5bGUob3B0aW9uc1tpXSwgaSA9PT0gY3Vyc29yKSwgbWF4V2lkdGgsIHtcblx0XHRcdGhhcmQ6IHRydWUsXG5cdFx0XHR0cmltOiBmYWxzZSxcblx0XHR9KS5zcGxpdCgnXFxuJyk7XG5cdFx0bGluZUdyb3Vwcy5wdXNoKHdyYXBwZWRMaW5lcyk7XG5cdFx0bGluZUNvdW50ICs9IHdyYXBwZWRMaW5lcy5sZW5ndGg7XG5cdH1cblxuXHRpZiAobGluZUNvdW50ID4gb3V0cHV0TWF4SXRlbXMpIHtcblx0XHRsZXQgcHJlY2VkaW5nUmVtb3ZhbHMgPSAwO1xuXHRcdGxldCBmb2xsb3dpbmdSZW1vdmFscyA9IDA7XG5cdFx0bGV0IG5ld0xpbmVDb3VudCA9IGxpbmVDb3VudDtcblx0XHRjb25zdCBjdXJzb3JHcm91cEluZGV4ID0gY3Vyc29yIC0gc2xpZGluZ1dpbmRvd0xvY2F0aW9uV2l0aEVsbGlwc2lzO1xuXHRcdGNvbnN0IHRyaW1MaW5lc0xvY2FsID0gKHN0YXJ0SW5kZXg6IG51bWJlciwgZW5kSW5kZXg6IG51bWJlcikgPT5cblx0XHRcdHRyaW1MaW5lcyhsaW5lR3JvdXBzLCBuZXdMaW5lQ291bnQsIHN0YXJ0SW5kZXgsIGVuZEluZGV4LCBvdXRwdXRNYXhJdGVtcyk7XG5cblx0XHRpZiAoc2hvdWxkUmVuZGVyVG9wRWxsaXBzaXMpIHtcblx0XHRcdCh7IGxpbmVDb3VudDogbmV3TGluZUNvdW50LCByZW1vdmFsczogcHJlY2VkaW5nUmVtb3ZhbHMgfSA9IHRyaW1MaW5lc0xvY2FsKFxuXHRcdFx0XHQwLFxuXHRcdFx0XHRjdXJzb3JHcm91cEluZGV4XG5cdFx0XHQpKTtcblx0XHRcdGlmIChuZXdMaW5lQ291bnQgPiBvdXRwdXRNYXhJdGVtcykge1xuXHRcdFx0XHQoeyBsaW5lQ291bnQ6IG5ld0xpbmVDb3VudCwgcmVtb3ZhbHM6IGZvbGxvd2luZ1JlbW92YWxzIH0gPSB0cmltTGluZXNMb2NhbChcblx0XHRcdFx0XHRjdXJzb3JHcm91cEluZGV4ICsgMSxcblx0XHRcdFx0XHRsaW5lR3JvdXBzLmxlbmd0aFxuXHRcdFx0XHQpKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0KHsgbGluZUNvdW50OiBuZXdMaW5lQ291bnQsIHJlbW92YWxzOiBmb2xsb3dpbmdSZW1vdmFscyB9ID0gdHJpbUxpbmVzTG9jYWwoXG5cdFx0XHRcdGN1cnNvckdyb3VwSW5kZXggKyAxLFxuXHRcdFx0XHRsaW5lR3JvdXBzLmxlbmd0aFxuXHRcdFx0KSk7XG5cdFx0XHRpZiAobmV3TGluZUNvdW50ID4gb3V0cHV0TWF4SXRlbXMpIHtcblx0XHRcdFx0KHsgbGluZUNvdW50OiBuZXdMaW5lQ291bnQsIHJlbW92YWxzOiBwcmVjZWRpbmdSZW1vdmFscyB9ID0gdHJpbUxpbmVzTG9jYWwoXG5cdFx0XHRcdFx0MCxcblx0XHRcdFx0XHRjdXJzb3JHcm91cEluZGV4XG5cdFx0XHRcdCkpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChwcmVjZWRpbmdSZW1vdmFscyA+IDApIHtcblx0XHRcdHNob3VsZFJlbmRlclRvcEVsbGlwc2lzID0gdHJ1ZTtcblx0XHRcdGxpbmVHcm91cHMuc3BsaWNlKDAsIHByZWNlZGluZ1JlbW92YWxzKTtcblx0XHR9XG5cdFx0aWYgKGZvbGxvd2luZ1JlbW92YWxzID4gMCkge1xuXHRcdFx0c2hvdWxkUmVuZGVyQm90dG9tRWxsaXBzaXMgPSB0cnVlO1xuXHRcdFx0bGluZUdyb3Vwcy5zcGxpY2UobGluZUdyb3Vwcy5sZW5ndGggLSBmb2xsb3dpbmdSZW1vdmFscywgZm9sbG93aW5nUmVtb3ZhbHMpO1xuXHRcdH1cblx0fVxuXG5cdGNvbnN0IHJlc3VsdDogc3RyaW5nW10gPSBbXTtcblx0aWYgKHNob3VsZFJlbmRlclRvcEVsbGlwc2lzKSB7XG5cdFx0cmVzdWx0LnB1c2gob3ZlcmZsb3dGb3JtYXQpO1xuXHR9XG5cdGZvciAoY29uc3QgbGluZUdyb3VwIG9mIGxpbmVHcm91cHMpIHtcblx0XHRmb3IgKGNvbnN0IGxpbmUgb2YgbGluZUdyb3VwKSB7XG5cdFx0XHRyZXN1bHQucHVzaChsaW5lKTtcblx0XHR9XG5cdH1cblx0aWYgKHNob3VsZFJlbmRlckJvdHRvbUVsbGlwc2lzKSB7XG5cdFx0cmVzdWx0LnB1c2gob3ZlcmZsb3dGb3JtYXQpO1xuXHR9XG5cblx0cmV0dXJuIHJlc3VsdDtcbn07XG4iLCAiaW1wb3J0IHsgQXV0b2NvbXBsZXRlUHJvbXB0LCBzZXR0aW5ncyB9IGZyb20gJ0BjbGFjay9jb3JlJztcbmltcG9ydCBjb2xvciBmcm9tICdwaWNvY29sb3JzJztcbmltcG9ydCB7XG5cdHR5cGUgQ29tbW9uT3B0aW9ucyxcblx0U19CQVIsXG5cdFNfQkFSX0VORCxcblx0U19DSEVDS0JPWF9JTkFDVElWRSxcblx0U19DSEVDS0JPWF9TRUxFQ1RFRCxcblx0U19SQURJT19BQ1RJVkUsXG5cdFNfUkFESU9fSU5BQ1RJVkUsXG5cdHN5bWJvbCxcbn0gZnJvbSAnLi9jb21tb24uanMnO1xuaW1wb3J0IHsgbGltaXRPcHRpb25zIH0gZnJvbSAnLi9saW1pdC1vcHRpb25zLmpzJztcbmltcG9ydCB0eXBlIHsgT3B0aW9uIH0gZnJvbSAnLi9zZWxlY3QuanMnO1xuXG5mdW5jdGlvbiBnZXRMYWJlbDxUPihvcHRpb246IE9wdGlvbjxUPikge1xuXHRyZXR1cm4gb3B0aW9uLmxhYmVsID8/IFN0cmluZyhvcHRpb24udmFsdWUgPz8gJycpO1xufVxuXG5mdW5jdGlvbiBnZXRGaWx0ZXJlZE9wdGlvbjxUPihzZWFyY2hUZXh0OiBzdHJpbmcsIG9wdGlvbjogT3B0aW9uPFQ+KTogYm9vbGVhbiB7XG5cdGlmICghc2VhcmNoVGV4dCkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGNvbnN0IGxhYmVsID0gKG9wdGlvbi5sYWJlbCA/PyBTdHJpbmcob3B0aW9uLnZhbHVlID8/ICcnKSkudG9Mb3dlckNhc2UoKTtcblx0Y29uc3QgaGludCA9IChvcHRpb24uaGludCA/PyAnJykudG9Mb3dlckNhc2UoKTtcblx0Y29uc3QgdmFsdWUgPSBTdHJpbmcob3B0aW9uLnZhbHVlKS50b0xvd2VyQ2FzZSgpO1xuXHRjb25zdCB0ZXJtID0gc2VhcmNoVGV4dC50b0xvd2VyQ2FzZSgpO1xuXG5cdHJldHVybiBsYWJlbC5pbmNsdWRlcyh0ZXJtKSB8fCBoaW50LmluY2x1ZGVzKHRlcm0pIHx8IHZhbHVlLmluY2x1ZGVzKHRlcm0pO1xufVxuXG5mdW5jdGlvbiBnZXRTZWxlY3RlZE9wdGlvbnM8VD4odmFsdWVzOiBUW10sIG9wdGlvbnM6IE9wdGlvbjxUPltdKTogT3B0aW9uPFQ+W10ge1xuXHRjb25zdCByZXN1bHRzOiBPcHRpb248VD5bXSA9IFtdO1xuXG5cdGZvciAoY29uc3Qgb3B0aW9uIG9mIG9wdGlvbnMpIHtcblx0XHRpZiAodmFsdWVzLmluY2x1ZGVzKG9wdGlvbi52YWx1ZSkpIHtcblx0XHRcdHJlc3VsdHMucHVzaChvcHRpb24pO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiByZXN1bHRzO1xufVxuXG5pbnRlcmZhY2UgQXV0b2NvbXBsZXRlU2hhcmVkT3B0aW9uczxWYWx1ZT4gZXh0ZW5kcyBDb21tb25PcHRpb25zIHtcblx0LyoqXG5cdCAqIFRoZSBtZXNzYWdlIHRvIGRpc3BsYXkgdG8gdGhlIHVzZXIuXG5cdCAqL1xuXHRtZXNzYWdlOiBzdHJpbmc7XG5cdC8qKlxuXHQgKiBBdmFpbGFibGUgb3B0aW9ucyBmb3IgdGhlIGF1dG9jb21wbGV0ZSBwcm9tcHQuXG5cdCAqL1xuXHRvcHRpb25zOiBPcHRpb248VmFsdWU+W10gfCAoKHRoaXM6IEF1dG9jb21wbGV0ZVByb21wdDxPcHRpb248VmFsdWU+PikgPT4gT3B0aW9uPFZhbHVlPltdKTtcblx0LyoqXG5cdCAqIE1heGltdW0gbnVtYmVyIG9mIGl0ZW1zIHRvIGRpc3BsYXkgYXQgb25jZS5cblx0ICovXG5cdG1heEl0ZW1zPzogbnVtYmVyO1xuXHQvKipcblx0ICogUGxhY2Vob2xkZXIgdGV4dCB0byBkaXNwbGF5IHdoZW4gbm8gaW5wdXQgaXMgcHJvdmlkZWQuXG5cdCAqL1xuXHRwbGFjZWhvbGRlcj86IHN0cmluZztcblx0LyoqXG5cdCAqIFZhbGlkYXRlcyB0aGUgdmFsdWVcblx0ICovXG5cdHZhbGlkYXRlPzogKHZhbHVlOiBWYWx1ZSB8IFZhbHVlW10gfCB1bmRlZmluZWQpID0+IHN0cmluZyB8IEVycm9yIHwgdW5kZWZpbmVkO1xuXHQvKipcblx0ICogQ3VzdG9tIGZpbHRlciBmdW5jdGlvbiB0byBtYXRjaCBvcHRpb25zIGFnYWluc3Qgc2VhcmNoIGlucHV0LlxuXHQgKiBJZiBub3QgcHJvdmlkZWQsIGEgZGVmYXVsdCBmaWx0ZXIgdGhhdCBtYXRjaGVzIGxhYmVsLCBoaW50LCBhbmQgdmFsdWUgaXMgdXNlZC5cblx0ICovXG5cdGZpbHRlcj86IChzZWFyY2g6IHN0cmluZywgb3B0aW9uOiBPcHRpb248VmFsdWU+KSA9PiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEF1dG9jb21wbGV0ZU9wdGlvbnM8VmFsdWU+IGV4dGVuZHMgQXV0b2NvbXBsZXRlU2hhcmVkT3B0aW9uczxWYWx1ZT4ge1xuXHQvKipcblx0ICogVGhlIGluaXRpYWwgc2VsZWN0ZWQgdmFsdWUuXG5cdCAqL1xuXHRpbml0aWFsVmFsdWU/OiBWYWx1ZTtcblx0LyoqXG5cdCAqIFRoZSBpbml0aWFsIHVzZXIgaW5wdXRcblx0ICovXG5cdGluaXRpYWxVc2VySW5wdXQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjb25zdCBhdXRvY29tcGxldGUgPSA8VmFsdWU+KG9wdHM6IEF1dG9jb21wbGV0ZU9wdGlvbnM8VmFsdWU+KSA9PiB7XG5cdGNvbnN0IHByb21wdCA9IG5ldyBBdXRvY29tcGxldGVQcm9tcHQoe1xuXHRcdG9wdGlvbnM6IG9wdHMub3B0aW9ucyxcblx0XHRpbml0aWFsVmFsdWU6IG9wdHMuaW5pdGlhbFZhbHVlID8gW29wdHMuaW5pdGlhbFZhbHVlXSA6IHVuZGVmaW5lZCxcblx0XHRpbml0aWFsVXNlcklucHV0OiBvcHRzLmluaXRpYWxVc2VySW5wdXQsXG5cdFx0ZmlsdGVyOlxuXHRcdFx0b3B0cy5maWx0ZXIgPz9cblx0XHRcdCgoc2VhcmNoOiBzdHJpbmcsIG9wdDogT3B0aW9uPFZhbHVlPikgPT4ge1xuXHRcdFx0XHRyZXR1cm4gZ2V0RmlsdGVyZWRPcHRpb24oc2VhcmNoLCBvcHQpO1xuXHRcdFx0fSksXG5cdFx0c2lnbmFsOiBvcHRzLnNpZ25hbCxcblx0XHRpbnB1dDogb3B0cy5pbnB1dCxcblx0XHRvdXRwdXQ6IG9wdHMub3V0cHV0LFxuXHRcdHZhbGlkYXRlOiBvcHRzLnZhbGlkYXRlLFxuXHRcdHJlbmRlcigpIHtcblx0XHRcdGNvbnN0IGhhc0d1aWRlID0gb3B0cy53aXRoR3VpZGUgPz8gc2V0dGluZ3Mud2l0aEd1aWRlO1xuXHRcdFx0Ly8gVGl0bGUgYW5kIG1lc3NhZ2UgZGlzcGxheVxuXHRcdFx0Y29uc3QgaGVhZGluZ3MgPSBoYXNHdWlkZVxuXHRcdFx0XHQ/IFtgJHtjb2xvci5ncmF5KFNfQkFSKX1gLCBgJHtzeW1ib2wodGhpcy5zdGF0ZSl9ICAke29wdHMubWVzc2FnZX1gXVxuXHRcdFx0XHQ6IFtgJHtzeW1ib2wodGhpcy5zdGF0ZSl9ICAke29wdHMubWVzc2FnZX1gXTtcblx0XHRcdGNvbnN0IHVzZXJJbnB1dCA9IHRoaXMudXNlcklucHV0O1xuXHRcdFx0Y29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcblx0XHRcdGNvbnN0IHBsYWNlaG9sZGVyID0gb3B0cy5wbGFjZWhvbGRlcjtcblx0XHRcdGNvbnN0IHNob3dQbGFjZWhvbGRlciA9IHVzZXJJbnB1dCA9PT0gJycgJiYgcGxhY2Vob2xkZXIgIT09IHVuZGVmaW5lZDtcblx0XHRcdGNvbnN0IG9wdCA9IChvcHRpb246IE9wdGlvbjxWYWx1ZT4sIHN0YXRlOiAnaW5hY3RpdmUnIHwgJ2FjdGl2ZScgfCAnZGlzYWJsZWQnKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGxhYmVsID0gZ2V0TGFiZWwob3B0aW9uKTtcblx0XHRcdFx0Y29uc3QgaGludCA9XG5cdFx0XHRcdFx0b3B0aW9uLmhpbnQgJiYgb3B0aW9uLnZhbHVlID09PSB0aGlzLmZvY3VzZWRWYWx1ZSA/IGNvbG9yLmRpbShgICgke29wdGlvbi5oaW50fSlgKSA6ICcnO1xuXHRcdFx0XHRzd2l0Y2ggKHN0YXRlKSB7XG5cdFx0XHRcdFx0Y2FzZSAnYWN0aXZlJzpcblx0XHRcdFx0XHRcdHJldHVybiBgJHtjb2xvci5ncmVlbihTX1JBRElPX0FDVElWRSl9ICR7bGFiZWx9JHtoaW50fWA7XG5cdFx0XHRcdFx0Y2FzZSAnaW5hY3RpdmUnOlxuXHRcdFx0XHRcdFx0cmV0dXJuIGAke2NvbG9yLmRpbShTX1JBRElPX0lOQUNUSVZFKX0gJHtjb2xvci5kaW0obGFiZWwpfWA7XG5cdFx0XHRcdFx0Y2FzZSAnZGlzYWJsZWQnOlxuXHRcdFx0XHRcdFx0cmV0dXJuIGAke2NvbG9yLmdyYXkoU19SQURJT19JTkFDVElWRSl9ICR7Y29sb3Iuc3RyaWtldGhyb3VnaChjb2xvci5ncmF5KGxhYmVsKSl9YDtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblxuXHRcdFx0Ly8gSGFuZGxlIGRpZmZlcmVudCBzdGF0ZXNcblx0XHRcdHN3aXRjaCAodGhpcy5zdGF0ZSkge1xuXHRcdFx0XHRjYXNlICdzdWJtaXQnOiB7XG5cdFx0XHRcdFx0Ly8gU2hvdyBzZWxlY3RlZCB2YWx1ZVxuXHRcdFx0XHRcdGNvbnN0IHNlbGVjdGVkID0gZ2V0U2VsZWN0ZWRPcHRpb25zKHRoaXMuc2VsZWN0ZWRWYWx1ZXMsIG9wdGlvbnMpO1xuXHRcdFx0XHRcdGNvbnN0IGxhYmVsID1cblx0XHRcdFx0XHRcdHNlbGVjdGVkLmxlbmd0aCA+IDAgPyBgICAke2NvbG9yLmRpbShzZWxlY3RlZC5tYXAoZ2V0TGFiZWwpLmpvaW4oJywgJykpfWAgOiAnJztcblx0XHRcdFx0XHRjb25zdCBzdWJtaXRQcmVmaXggPSBoYXNHdWlkZSA/IGNvbG9yLmdyYXkoU19CQVIpIDogJyc7XG5cdFx0XHRcdFx0cmV0dXJuIGAke2hlYWRpbmdzLmpvaW4oJ1xcbicpfVxcbiR7c3VibWl0UHJlZml4fSR7bGFiZWx9YDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNhc2UgJ2NhbmNlbCc6IHtcblx0XHRcdFx0XHRjb25zdCB1c2VySW5wdXRUZXh0ID0gdXNlcklucHV0ID8gYCAgJHtjb2xvci5zdHJpa2V0aHJvdWdoKGNvbG9yLmRpbSh1c2VySW5wdXQpKX1gIDogJyc7XG5cdFx0XHRcdFx0Y29uc3QgY2FuY2VsUHJlZml4ID0gaGFzR3VpZGUgPyBjb2xvci5ncmF5KFNfQkFSKSA6ICcnO1xuXHRcdFx0XHRcdHJldHVybiBgJHtoZWFkaW5ncy5qb2luKCdcXG4nKX1cXG4ke2NhbmNlbFByZWZpeH0ke3VzZXJJbnB1dFRleHR9YDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGRlZmF1bHQ6IHtcblx0XHRcdFx0XHRjb25zdCBiYXJDb2xvciA9IHRoaXMuc3RhdGUgPT09ICdlcnJvcicgPyBjb2xvci55ZWxsb3cgOiBjb2xvci5jeWFuO1xuXHRcdFx0XHRcdGNvbnN0IGd1aWRlUHJlZml4ID0gaGFzR3VpZGUgPyBgJHtiYXJDb2xvcihTX0JBUil9ICBgIDogJyc7XG5cdFx0XHRcdFx0Y29uc3QgZ3VpZGVQcmVmaXhFbmQgPSBoYXNHdWlkZSA/IGJhckNvbG9yKFNfQkFSX0VORCkgOiAnJztcblx0XHRcdFx0XHQvLyBEaXNwbGF5IGN1cnNvciBwb3NpdGlvbiAtIHNob3cgcGxhaW4gdGV4dCBpbiBuYXZpZ2F0aW9uIG1vZGVcblx0XHRcdFx0XHRsZXQgc2VhcmNoVGV4dCA9ICcnO1xuXHRcdFx0XHRcdGlmICh0aGlzLmlzTmF2aWdhdGluZyB8fCBzaG93UGxhY2Vob2xkZXIpIHtcblx0XHRcdFx0XHRcdGNvbnN0IHNlYXJjaFRleHRWYWx1ZSA9IHNob3dQbGFjZWhvbGRlciA/IHBsYWNlaG9sZGVyIDogdXNlcklucHV0O1xuXHRcdFx0XHRcdFx0c2VhcmNoVGV4dCA9IHNlYXJjaFRleHRWYWx1ZSAhPT0gJycgPyBgICR7Y29sb3IuZGltKHNlYXJjaFRleHRWYWx1ZSl9YCA6ICcnO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRzZWFyY2hUZXh0ID0gYCAke3RoaXMudXNlcklucHV0V2l0aEN1cnNvcn1gO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIFNob3cgbWF0Y2ggY291bnQgaWYgZmlsdGVyZWRcblx0XHRcdFx0XHRjb25zdCBtYXRjaGVzID1cblx0XHRcdFx0XHRcdHRoaXMuZmlsdGVyZWRPcHRpb25zLmxlbmd0aCAhPT0gb3B0aW9ucy5sZW5ndGhcblx0XHRcdFx0XHRcdFx0PyBjb2xvci5kaW0oXG5cdFx0XHRcdFx0XHRcdFx0XHRgICgke3RoaXMuZmlsdGVyZWRPcHRpb25zLmxlbmd0aH0gbWF0Y2gke3RoaXMuZmlsdGVyZWRPcHRpb25zLmxlbmd0aCA9PT0gMSA/ICcnIDogJ2VzJ30pYFxuXHRcdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdFx0OiAnJztcblxuXHRcdFx0XHRcdC8vIE5vIG1hdGNoZXMgbWVzc2FnZVxuXHRcdFx0XHRcdGNvbnN0IG5vUmVzdWx0cyA9XG5cdFx0XHRcdFx0XHR0aGlzLmZpbHRlcmVkT3B0aW9ucy5sZW5ndGggPT09IDAgJiYgdXNlcklucHV0XG5cdFx0XHRcdFx0XHRcdD8gW2Ake2d1aWRlUHJlZml4fSR7Y29sb3IueWVsbG93KCdObyBtYXRjaGVzIGZvdW5kJyl9YF1cblx0XHRcdFx0XHRcdFx0OiBbXTtcblxuXHRcdFx0XHRcdGNvbnN0IHZhbGlkYXRpb25FcnJvciA9XG5cdFx0XHRcdFx0XHR0aGlzLnN0YXRlID09PSAnZXJyb3InID8gW2Ake2d1aWRlUHJlZml4fSR7Y29sb3IueWVsbG93KHRoaXMuZXJyb3IpfWBdIDogW107XG5cblx0XHRcdFx0XHRpZiAoaGFzR3VpZGUpIHtcblx0XHRcdFx0XHRcdGhlYWRpbmdzLnB1c2goYCR7Z3VpZGVQcmVmaXgudHJpbUVuZCgpfWApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRoZWFkaW5ncy5wdXNoKFxuXHRcdFx0XHRcdFx0YCR7Z3VpZGVQcmVmaXh9JHtjb2xvci5kaW0oJ1NlYXJjaDonKX0ke3NlYXJjaFRleHR9JHttYXRjaGVzfWAsXG5cdFx0XHRcdFx0XHQuLi5ub1Jlc3VsdHMsXG5cdFx0XHRcdFx0XHQuLi52YWxpZGF0aW9uRXJyb3Jcblx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0Ly8gU2hvdyBpbnN0cnVjdGlvbnNcblx0XHRcdFx0XHRjb25zdCBpbnN0cnVjdGlvbnMgPSBbXG5cdFx0XHRcdFx0XHRgJHtjb2xvci5kaW0oJ+KGkS/ihpMnKX0gdG8gc2VsZWN0YCxcblx0XHRcdFx0XHRcdGAke2NvbG9yLmRpbSgnRW50ZXI6Jyl9IGNvbmZpcm1gLFxuXHRcdFx0XHRcdFx0YCR7Y29sb3IuZGltKCdUeXBlOicpfSB0byBzZWFyY2hgLFxuXHRcdFx0XHRcdF07XG5cblx0XHRcdFx0XHRjb25zdCBmb290ZXJzID0gW2Ake2d1aWRlUHJlZml4fSR7aW5zdHJ1Y3Rpb25zLmpvaW4oJyDigKIgJyl9YCwgZ3VpZGVQcmVmaXhFbmRdO1xuXG5cdFx0XHRcdFx0Ly8gUmVuZGVyIG9wdGlvbnMgd2l0aCBzZWxlY3Rpb25cblx0XHRcdFx0XHRjb25zdCBkaXNwbGF5T3B0aW9ucyA9XG5cdFx0XHRcdFx0XHR0aGlzLmZpbHRlcmVkT3B0aW9ucy5sZW5ndGggPT09IDBcblx0XHRcdFx0XHRcdFx0PyBbXVxuXHRcdFx0XHRcdFx0XHQ6IGxpbWl0T3B0aW9ucyh7XG5cdFx0XHRcdFx0XHRcdFx0XHRjdXJzb3I6IHRoaXMuY3Vyc29yLFxuXHRcdFx0XHRcdFx0XHRcdFx0b3B0aW9uczogdGhpcy5maWx0ZXJlZE9wdGlvbnMsXG5cdFx0XHRcdFx0XHRcdFx0XHRjb2x1bW5QYWRkaW5nOiBoYXNHdWlkZSA/IDMgOiAwLCAvLyBmb3IgYHwgIGAgd2hlbiBndWlkZSBpcyBzaG93blxuXHRcdFx0XHRcdFx0XHRcdFx0cm93UGFkZGluZzogaGVhZGluZ3MubGVuZ3RoICsgZm9vdGVycy5sZW5ndGgsXG5cdFx0XHRcdFx0XHRcdFx0XHRzdHlsZTogKG9wdGlvbiwgYWN0aXZlKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBvcHQoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0b3B0aW9uLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9wdGlvbi5kaXNhYmxlZCA/ICdkaXNhYmxlZCcgOiBhY3RpdmUgPyAnYWN0aXZlJyA6ICdpbmFjdGl2ZSdcblx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdFx0XHRtYXhJdGVtczogb3B0cy5tYXhJdGVtcyxcblx0XHRcdFx0XHRcdFx0XHRcdG91dHB1dDogb3B0cy5vdXRwdXQsXG5cdFx0XHRcdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHQvLyBSZXR1cm4gdGhlIGZvcm1hdHRlZCBwcm9tcHRcblx0XHRcdFx0XHRyZXR1cm4gW1xuXHRcdFx0XHRcdFx0Li4uaGVhZGluZ3MsXG5cdFx0XHRcdFx0XHQuLi5kaXNwbGF5T3B0aW9ucy5tYXAoKG9wdGlvbikgPT4gYCR7Z3VpZGVQcmVmaXh9JHtvcHRpb259YCksXG5cdFx0XHRcdFx0XHQuLi5mb290ZXJzLFxuXHRcdFx0XHRcdF0uam9pbignXFxuJyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHR9KTtcblxuXHQvLyBSZXR1cm4gdGhlIHJlc3VsdCBvciBjYW5jZWwgc3ltYm9sXG5cdHJldHVybiBwcm9tcHQucHJvbXB0KCkgYXMgUHJvbWlzZTxWYWx1ZSB8IHN5bWJvbD47XG59O1xuXG4vLyBUeXBlIGRlZmluaXRpb24gZm9yIHRoZSBhdXRvY29tcGxldGVNdWx0aXNlbGVjdCBjb21wb25lbnRcbmV4cG9ydCBpbnRlcmZhY2UgQXV0b2NvbXBsZXRlTXVsdGlTZWxlY3RPcHRpb25zPFZhbHVlPiBleHRlbmRzIEF1dG9jb21wbGV0ZVNoYXJlZE9wdGlvbnM8VmFsdWU+IHtcblx0LyoqXG5cdCAqIFRoZSBpbml0aWFsIHNlbGVjdGVkIHZhbHVlc1xuXHQgKi9cblx0aW5pdGlhbFZhbHVlcz86IFZhbHVlW107XG5cdC8qKlxuXHQgKiBJZiB0cnVlLCBhdCBsZWFzdCBvbmUgb3B0aW9uIG11c3QgYmUgc2VsZWN0ZWRcblx0ICovXG5cdHJlcXVpcmVkPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBJbnRlZ3JhdGVkIGF1dG9jb21wbGV0ZSBtdWx0aXNlbGVjdCAtIGNvbWJpbmVzIHR5cGUtYWhlYWQgZmlsdGVyaW5nIHdpdGggbXVsdGlzZWxlY3QgaW4gb25lIFVJXG4gKi9cbmV4cG9ydCBjb25zdCBhdXRvY29tcGxldGVNdWx0aXNlbGVjdCA9IDxWYWx1ZT4ob3B0czogQXV0b2NvbXBsZXRlTXVsdGlTZWxlY3RPcHRpb25zPFZhbHVlPikgPT4ge1xuXHRjb25zdCBmb3JtYXRPcHRpb24gPSAoXG5cdFx0b3B0aW9uOiBPcHRpb248VmFsdWU+LFxuXHRcdGFjdGl2ZTogYm9vbGVhbixcblx0XHRzZWxlY3RlZFZhbHVlczogVmFsdWVbXSxcblx0XHRmb2N1c2VkVmFsdWU6IFZhbHVlIHwgdW5kZWZpbmVkXG5cdCkgPT4ge1xuXHRcdGNvbnN0IGlzU2VsZWN0ZWQgPSBzZWxlY3RlZFZhbHVlcy5pbmNsdWRlcyhvcHRpb24udmFsdWUpO1xuXHRcdGNvbnN0IGxhYmVsID0gb3B0aW9uLmxhYmVsID8/IFN0cmluZyhvcHRpb24udmFsdWUgPz8gJycpO1xuXHRcdGNvbnN0IGhpbnQgPVxuXHRcdFx0b3B0aW9uLmhpbnQgJiYgZm9jdXNlZFZhbHVlICE9PSB1bmRlZmluZWQgJiYgb3B0aW9uLnZhbHVlID09PSBmb2N1c2VkVmFsdWVcblx0XHRcdFx0PyBjb2xvci5kaW0oYCAoJHtvcHRpb24uaGludH0pYClcblx0XHRcdFx0OiAnJztcblx0XHRjb25zdCBjaGVja2JveCA9IGlzU2VsZWN0ZWQgPyBjb2xvci5ncmVlbihTX0NIRUNLQk9YX1NFTEVDVEVEKSA6IGNvbG9yLmRpbShTX0NIRUNLQk9YX0lOQUNUSVZFKTtcblxuXHRcdGlmIChvcHRpb24uZGlzYWJsZWQpIHtcblx0XHRcdHJldHVybiBgJHtjb2xvci5ncmF5KFNfQ0hFQ0tCT1hfSU5BQ1RJVkUpfSAke2NvbG9yLnN0cmlrZXRocm91Z2goY29sb3IuZ3JheShsYWJlbCkpfWA7XG5cdFx0fVxuXHRcdGlmIChhY3RpdmUpIHtcblx0XHRcdHJldHVybiBgJHtjaGVja2JveH0gJHtsYWJlbH0ke2hpbnR9YDtcblx0XHR9XG5cdFx0cmV0dXJuIGAke2NoZWNrYm94fSAke2NvbG9yLmRpbShsYWJlbCl9YDtcblx0fTtcblxuXHQvLyBDcmVhdGUgdGV4dCBwcm9tcHQgd2hpY2ggd2UnbGwgdXNlIGFzIGZvdW5kYXRpb25cblx0Y29uc3QgcHJvbXB0ID0gbmV3IEF1dG9jb21wbGV0ZVByb21wdDxPcHRpb248VmFsdWU+Pih7XG5cdFx0b3B0aW9uczogb3B0cy5vcHRpb25zLFxuXHRcdG11bHRpcGxlOiB0cnVlLFxuXHRcdGZpbHRlcjpcblx0XHRcdG9wdHMuZmlsdGVyID8/XG5cdFx0XHQoKHNlYXJjaCwgb3B0KSA9PiB7XG5cdFx0XHRcdHJldHVybiBnZXRGaWx0ZXJlZE9wdGlvbihzZWFyY2gsIG9wdCk7XG5cdFx0XHR9KSxcblx0XHR2YWxpZGF0ZTogKCkgPT4ge1xuXHRcdFx0aWYgKG9wdHMucmVxdWlyZWQgJiYgcHJvbXB0LnNlbGVjdGVkVmFsdWVzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHRyZXR1cm4gJ1BsZWFzZSBzZWxlY3QgYXQgbGVhc3Qgb25lIGl0ZW0nO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9LFxuXHRcdGluaXRpYWxWYWx1ZTogb3B0cy5pbml0aWFsVmFsdWVzLFxuXHRcdHNpZ25hbDogb3B0cy5zaWduYWwsXG5cdFx0aW5wdXQ6IG9wdHMuaW5wdXQsXG5cdFx0b3V0cHV0OiBvcHRzLm91dHB1dCxcblx0XHRyZW5kZXIoKSB7XG5cdFx0XHQvLyBUaXRsZSBhbmQgc3ltYm9sXG5cdFx0XHRjb25zdCB0aXRsZSA9IGAke2NvbG9yLmdyYXkoU19CQVIpfVxcbiR7c3ltYm9sKHRoaXMuc3RhdGUpfSAgJHtvcHRzLm1lc3NhZ2V9XFxuYDtcblxuXHRcdFx0Ly8gU2VsZWN0aW9uIGNvdW50ZXJcblx0XHRcdGNvbnN0IHVzZXJJbnB1dCA9IHRoaXMudXNlcklucHV0O1xuXHRcdFx0Y29uc3QgcGxhY2Vob2xkZXIgPSBvcHRzLnBsYWNlaG9sZGVyO1xuXHRcdFx0Y29uc3Qgc2hvd1BsYWNlaG9sZGVyID0gdXNlcklucHV0ID09PSAnJyAmJiBwbGFjZWhvbGRlciAhPT0gdW5kZWZpbmVkO1xuXG5cdFx0XHQvLyBTZWFyY2ggaW5wdXQgZGlzcGxheVxuXHRcdFx0Y29uc3Qgc2VhcmNoVGV4dCA9XG5cdFx0XHRcdHRoaXMuaXNOYXZpZ2F0aW5nIHx8IHNob3dQbGFjZWhvbGRlclxuXHRcdFx0XHRcdD8gY29sb3IuZGltKHNob3dQbGFjZWhvbGRlciA/IHBsYWNlaG9sZGVyIDogdXNlcklucHV0KSAvLyBKdXN0IHNob3cgcGxhaW4gdGV4dCB3aGVuIGluIG5hdmlnYXRpb24gbW9kZVxuXHRcdFx0XHRcdDogdGhpcy51c2VySW5wdXRXaXRoQ3Vyc29yO1xuXG5cdFx0XHRjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuXG5cdFx0XHRjb25zdCBtYXRjaGVzID1cblx0XHRcdFx0dGhpcy5maWx0ZXJlZE9wdGlvbnMubGVuZ3RoICE9PSBvcHRpb25zLmxlbmd0aFxuXHRcdFx0XHRcdD8gY29sb3IuZGltKFxuXHRcdFx0XHRcdFx0XHRgICgke3RoaXMuZmlsdGVyZWRPcHRpb25zLmxlbmd0aH0gbWF0Y2gke3RoaXMuZmlsdGVyZWRPcHRpb25zLmxlbmd0aCA9PT0gMSA/ICcnIDogJ2VzJ30pYFxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdDogJyc7XG5cblx0XHRcdC8vIFJlbmRlciBwcm9tcHQgc3RhdGVcblx0XHRcdHN3aXRjaCAodGhpcy5zdGF0ZSkge1xuXHRcdFx0XHRjYXNlICdzdWJtaXQnOiB7XG5cdFx0XHRcdFx0cmV0dXJuIGAke3RpdGxlfSR7Y29sb3IuZ3JheShTX0JBUil9ICAke2NvbG9yLmRpbShgJHt0aGlzLnNlbGVjdGVkVmFsdWVzLmxlbmd0aH0gaXRlbXMgc2VsZWN0ZWRgKX1gO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNhc2UgJ2NhbmNlbCc6IHtcblx0XHRcdFx0XHRyZXR1cm4gYCR7dGl0bGV9JHtjb2xvci5ncmF5KFNfQkFSKX0gICR7Y29sb3Iuc3RyaWtldGhyb3VnaChjb2xvci5kaW0odXNlcklucHV0KSl9YDtcblx0XHRcdFx0fVxuXHRcdFx0XHRkZWZhdWx0OiB7XG5cdFx0XHRcdFx0Y29uc3QgYmFyQ29sb3IgPSB0aGlzLnN0YXRlID09PSAnZXJyb3InID8gY29sb3IueWVsbG93IDogY29sb3IuY3lhbjtcblx0XHRcdFx0XHQvLyBJbnN0cnVjdGlvbnNcblx0XHRcdFx0XHRjb25zdCBpbnN0cnVjdGlvbnMgPSBbXG5cdFx0XHRcdFx0XHRgJHtjb2xvci5kaW0oJ+KGkS/ihpMnKX0gdG8gbmF2aWdhdGVgLFxuXHRcdFx0XHRcdFx0YCR7Y29sb3IuZGltKHRoaXMuaXNOYXZpZ2F0aW5nID8gJ1NwYWNlL1RhYjonIDogJ1RhYjonKX0gc2VsZWN0YCxcblx0XHRcdFx0XHRcdGAke2NvbG9yLmRpbSgnRW50ZXI6Jyl9IGNvbmZpcm1gLFxuXHRcdFx0XHRcdFx0YCR7Y29sb3IuZGltKCdUeXBlOicpfSB0byBzZWFyY2hgLFxuXHRcdFx0XHRcdF07XG5cblx0XHRcdFx0XHQvLyBObyByZXN1bHRzIG1lc3NhZ2Vcblx0XHRcdFx0XHRjb25zdCBub1Jlc3VsdHMgPVxuXHRcdFx0XHRcdFx0dGhpcy5maWx0ZXJlZE9wdGlvbnMubGVuZ3RoID09PSAwICYmIHVzZXJJbnB1dFxuXHRcdFx0XHRcdFx0XHQ/IFtgJHtiYXJDb2xvcihTX0JBUil9ICAke2NvbG9yLnllbGxvdygnTm8gbWF0Y2hlcyBmb3VuZCcpfWBdXG5cdFx0XHRcdFx0XHRcdDogW107XG5cblx0XHRcdFx0XHRjb25zdCBlcnJvck1lc3NhZ2UgPVxuXHRcdFx0XHRcdFx0dGhpcy5zdGF0ZSA9PT0gJ2Vycm9yJyA/IFtgJHtiYXJDb2xvcihTX0JBUil9ICAke2NvbG9yLnllbGxvdyh0aGlzLmVycm9yKX1gXSA6IFtdO1xuXG5cdFx0XHRcdFx0Ly8gQ2FsY3VsYXRlIGhlYWRlciBhbmQgZm9vdGVyIGxpbmUgY291bnRzIGZvciByb3dQYWRkaW5nXG5cdFx0XHRcdFx0Y29uc3QgaGVhZGVyTGluZXMgPSBbXG5cdFx0XHRcdFx0XHQuLi5gJHt0aXRsZX0ke2JhckNvbG9yKFNfQkFSKX1gLnNwbGl0KCdcXG4nKSxcblx0XHRcdFx0XHRcdGAke2JhckNvbG9yKFNfQkFSKX0gICR7Y29sb3IuZGltKCdTZWFyY2g6Jyl9ICR7c2VhcmNoVGV4dH0ke21hdGNoZXN9YCxcblx0XHRcdFx0XHRcdC4uLm5vUmVzdWx0cyxcblx0XHRcdFx0XHRcdC4uLmVycm9yTWVzc2FnZSxcblx0XHRcdFx0XHRdO1xuXHRcdFx0XHRcdGNvbnN0IGZvb3RlckxpbmVzID0gW1xuXHRcdFx0XHRcdFx0YCR7YmFyQ29sb3IoU19CQVIpfSAgJHtpbnN0cnVjdGlvbnMuam9pbignIOKAoiAnKX1gLFxuXHRcdFx0XHRcdFx0YCR7YmFyQ29sb3IoU19CQVJfRU5EKX1gLFxuXHRcdFx0XHRcdF07XG5cblx0XHRcdFx0XHQvLyBHZXQgbGltaXRlZCBvcHRpb25zIGZvciBkaXNwbGF5XG5cdFx0XHRcdFx0Y29uc3QgZGlzcGxheU9wdGlvbnMgPSBsaW1pdE9wdGlvbnMoe1xuXHRcdFx0XHRcdFx0Y3Vyc29yOiB0aGlzLmN1cnNvcixcblx0XHRcdFx0XHRcdG9wdGlvbnM6IHRoaXMuZmlsdGVyZWRPcHRpb25zLFxuXHRcdFx0XHRcdFx0c3R5bGU6IChvcHRpb24sIGFjdGl2ZSkgPT5cblx0XHRcdFx0XHRcdFx0Zm9ybWF0T3B0aW9uKG9wdGlvbiwgYWN0aXZlLCB0aGlzLnNlbGVjdGVkVmFsdWVzLCB0aGlzLmZvY3VzZWRWYWx1ZSksXG5cdFx0XHRcdFx0XHRtYXhJdGVtczogb3B0cy5tYXhJdGVtcyxcblx0XHRcdFx0XHRcdG91dHB1dDogb3B0cy5vdXRwdXQsXG5cdFx0XHRcdFx0XHRyb3dQYWRkaW5nOiBoZWFkZXJMaW5lcy5sZW5ndGggKyBmb290ZXJMaW5lcy5sZW5ndGgsXG5cdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHQvLyBCdWlsZCB0aGUgcHJvbXB0IGRpc3BsYXlcblx0XHRcdFx0XHRyZXR1cm4gW1xuXHRcdFx0XHRcdFx0Li4uaGVhZGVyTGluZXMsXG5cdFx0XHRcdFx0XHQuLi5kaXNwbGF5T3B0aW9ucy5tYXAoKG9wdGlvbikgPT4gYCR7YmFyQ29sb3IoU19CQVIpfSAgJHtvcHRpb259YCksXG5cdFx0XHRcdFx0XHQuLi5mb290ZXJMaW5lcyxcblx0XHRcdFx0XHRdLmpvaW4oJ1xcbicpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblx0fSk7XG5cblx0Ly8gUmV0dXJuIHRoZSByZXN1bHQgb3IgY2FuY2VsIHN5bWJvbFxuXHRyZXR1cm4gcHJvbXB0LnByb21wdCgpIGFzIFByb21pc2U8VmFsdWVbXSB8IHN5bWJvbD47XG59O1xuIiwgImltcG9ydCB0eXBlIHsgV3JpdGFibGUgfSBmcm9tICdub2RlOnN0cmVhbSc7XG5pbXBvcnQgeyBnZXRDb2x1bW5zLCBzZXR0aW5ncyB9IGZyb20gJ0BjbGFjay9jb3JlJztcbmltcG9ydCBzdHJpbmdXaWR0aCBmcm9tICdmYXN0LXN0cmluZy13aWR0aCc7XG5pbXBvcnQgeyB3cmFwQW5zaSB9IGZyb20gJ2Zhc3Qtd3JhcC1hbnNpJztcbmltcG9ydCB7XG5cdHR5cGUgQ29tbW9uT3B0aW9ucyxcblx0U19CQVIsXG5cdFNfQkFSX0VORCxcblx0U19CQVJfRU5EX1JJR0hULFxuXHRTX0JBUl9ILFxuXHRTX0JBUl9TVEFSVCxcblx0U19CQVJfU1RBUlRfUklHSFQsXG5cdFNfQ09STkVSX0JPVFRPTV9MRUZULFxuXHRTX0NPUk5FUl9CT1RUT01fUklHSFQsXG5cdFNfQ09STkVSX1RPUF9MRUZULFxuXHRTX0NPUk5FUl9UT1BfUklHSFQsXG59IGZyb20gJy4vY29tbW9uLmpzJztcblxuZXhwb3J0IHR5cGUgQm94QWxpZ25tZW50ID0gJ2xlZnQnIHwgJ2NlbnRlcicgfCAncmlnaHQnO1xuXG50eXBlIEJveFN5bWJvbHMgPSBbdG9wTGVmdDogc3RyaW5nLCB0b3BSaWdodDogc3RyaW5nLCBib3R0b21MZWZ0OiBzdHJpbmcsIGJvdHRvbVJpZ2h0OiBzdHJpbmddO1xuXG5jb25zdCByb3VuZGVkU3ltYm9sczogQm94U3ltYm9scyA9IFtcblx0U19DT1JORVJfVE9QX0xFRlQsXG5cdFNfQ09STkVSX1RPUF9SSUdIVCxcblx0U19DT1JORVJfQk9UVE9NX0xFRlQsXG5cdFNfQ09STkVSX0JPVFRPTV9SSUdIVCxcbl07XG5jb25zdCBzcXVhcmVTeW1ib2xzOiBCb3hTeW1ib2xzID0gW1NfQkFSX1NUQVJULCBTX0JBUl9TVEFSVF9SSUdIVCwgU19CQVJfRU5ELCBTX0JBUl9FTkRfUklHSFRdO1xuXG5leHBvcnQgaW50ZXJmYWNlIEJveE9wdGlvbnMgZXh0ZW5kcyBDb21tb25PcHRpb25zIHtcblx0Y29udGVudEFsaWduPzogQm94QWxpZ25tZW50O1xuXHR0aXRsZUFsaWduPzogQm94QWxpZ25tZW50O1xuXHR3aWR0aD86IG51bWJlciB8ICdhdXRvJztcblx0dGl0bGVQYWRkaW5nPzogbnVtYmVyO1xuXHRjb250ZW50UGFkZGluZz86IG51bWJlcjtcblx0cm91bmRlZD86IGJvb2xlYW47XG5cdGZvcm1hdEJvcmRlcj86ICh0ZXh0OiBzdHJpbmcpID0+IHN0cmluZztcbn1cblxuZnVuY3Rpb24gZ2V0UGFkZGluZ0ZvckxpbmUoXG5cdGxpbmVMZW5ndGg6IG51bWJlcixcblx0aW5uZXJXaWR0aDogbnVtYmVyLFxuXHRwYWRkaW5nOiBudW1iZXIsXG5cdGNvbnRlbnRBbGlnbjogQm94QWxpZ25tZW50IHwgdW5kZWZpbmVkXG4pOiBbbnVtYmVyLCBudW1iZXJdIHtcblx0bGV0IGxlZnRQYWRkaW5nID0gcGFkZGluZztcblx0bGV0IHJpZ2h0UGFkZGluZyA9IHBhZGRpbmc7XG5cdGlmIChjb250ZW50QWxpZ24gPT09ICdjZW50ZXInKSB7XG5cdFx0bGVmdFBhZGRpbmcgPSBNYXRoLmZsb29yKChpbm5lcldpZHRoIC0gbGluZUxlbmd0aCkgLyAyKTtcblx0fSBlbHNlIGlmIChjb250ZW50QWxpZ24gPT09ICdyaWdodCcpIHtcblx0XHRsZWZ0UGFkZGluZyA9IGlubmVyV2lkdGggLSBsaW5lTGVuZ3RoIC0gcGFkZGluZztcblx0fVxuXG5cdHJpZ2h0UGFkZGluZyA9IGlubmVyV2lkdGggLSBsZWZ0UGFkZGluZyAtIGxpbmVMZW5ndGg7XG5cblx0cmV0dXJuIFtsZWZ0UGFkZGluZywgcmlnaHRQYWRkaW5nXTtcbn1cblxuY29uc3QgZGVmYXVsdEZvcm1hdEJvcmRlciA9ICh0ZXh0OiBzdHJpbmcpID0+IHRleHQ7XG5cbmV4cG9ydCBjb25zdCBib3ggPSAobWVzc2FnZSA9ICcnLCB0aXRsZSA9ICcnLCBvcHRzPzogQm94T3B0aW9ucykgPT4ge1xuXHRjb25zdCBvdXRwdXQ6IFdyaXRhYmxlID0gb3B0cz8ub3V0cHV0ID8/IHByb2Nlc3Muc3Rkb3V0O1xuXHRjb25zdCBjb2x1bW5zID0gZ2V0Q29sdW1ucyhvdXRwdXQpO1xuXHRjb25zdCBib3JkZXJXaWR0aCA9IDE7XG5cdGNvbnN0IGJvcmRlclRvdGFsV2lkdGggPSBib3JkZXJXaWR0aCAqIDI7XG5cdGNvbnN0IHRpdGxlUGFkZGluZyA9IG9wdHM/LnRpdGxlUGFkZGluZyA/PyAxO1xuXHRjb25zdCBjb250ZW50UGFkZGluZyA9IG9wdHM/LmNvbnRlbnRQYWRkaW5nID8/IDI7XG5cdGNvbnN0IHdpZHRoID0gb3B0cz8ud2lkdGggPT09IHVuZGVmaW5lZCB8fCBvcHRzLndpZHRoID09PSAnYXV0bycgPyAxIDogTWF0aC5taW4oMSwgb3B0cy53aWR0aCk7XG5cdGNvbnN0IGhhc0d1aWRlID0gb3B0cz8ud2l0aEd1aWRlID8/IHNldHRpbmdzLndpdGhHdWlkZTtcblx0Y29uc3QgbGluZVByZWZpeCA9ICFoYXNHdWlkZSA/ICcnIDogYCR7U19CQVJ9IGA7XG5cdGNvbnN0IGZvcm1hdEJvcmRlciA9IG9wdHM/LmZvcm1hdEJvcmRlciA/PyBkZWZhdWx0Rm9ybWF0Qm9yZGVyO1xuXHRjb25zdCBzeW1ib2xzID0gKG9wdHM/LnJvdW5kZWQgPyByb3VuZGVkU3ltYm9scyA6IHNxdWFyZVN5bWJvbHMpLm1hcChmb3JtYXRCb3JkZXIpO1xuXHRjb25zdCBoU3ltYm9sID0gZm9ybWF0Qm9yZGVyKFNfQkFSX0gpO1xuXHRjb25zdCB2U3ltYm9sID0gZm9ybWF0Qm9yZGVyKFNfQkFSKTtcblx0Y29uc3QgbGluZVByZWZpeFdpZHRoID0gc3RyaW5nV2lkdGgobGluZVByZWZpeCk7XG5cdGNvbnN0IHRpdGxlV2lkdGggPSBzdHJpbmdXaWR0aCh0aXRsZSk7XG5cdGNvbnN0IG1heEJveFdpZHRoID0gY29sdW1ucyAtIGxpbmVQcmVmaXhXaWR0aDtcblx0bGV0IGJveFdpZHRoID0gTWF0aC5mbG9vcihjb2x1bW5zICogd2lkdGgpIC0gbGluZVByZWZpeFdpZHRoO1xuXHRpZiAob3B0cz8ud2lkdGggPT09ICdhdXRvJykge1xuXHRcdGNvbnN0IGxpbmVzID0gbWVzc2FnZS5zcGxpdCgnXFxuJyk7XG5cdFx0bGV0IGxvbmdlc3RMaW5lID0gdGl0bGVXaWR0aCArIHRpdGxlUGFkZGluZyAqIDI7XG5cdFx0Zm9yIChjb25zdCBsaW5lIG9mIGxpbmVzKSB7XG5cdFx0XHRjb25zdCBsaW5lV2l0aFBhZGRpbmcgPSBzdHJpbmdXaWR0aChsaW5lKSArIGNvbnRlbnRQYWRkaW5nICogMjtcblx0XHRcdGlmIChsaW5lV2l0aFBhZGRpbmcgPiBsb25nZXN0TGluZSkge1xuXHRcdFx0XHRsb25nZXN0TGluZSA9IGxpbmVXaXRoUGFkZGluZztcblx0XHRcdH1cblx0XHR9XG5cdFx0Y29uc3QgbG9uZ2VzdExpbmVXaWR0aCA9IGxvbmdlc3RMaW5lICsgYm9yZGVyVG90YWxXaWR0aDtcblx0XHRpZiAobG9uZ2VzdExpbmVXaWR0aCA8IGJveFdpZHRoKSB7XG5cdFx0XHRib3hXaWR0aCA9IGxvbmdlc3RMaW5lV2lkdGg7XG5cdFx0fVxuXHR9XG5cdGlmIChib3hXaWR0aCAlIDIgIT09IDApIHtcblx0XHRpZiAoYm94V2lkdGggPCBtYXhCb3hXaWR0aCkge1xuXHRcdFx0Ym94V2lkdGgrKztcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ym94V2lkdGgtLTtcblx0XHR9XG5cdH1cblx0Y29uc3QgaW5uZXJXaWR0aCA9IGJveFdpZHRoIC0gYm9yZGVyVG90YWxXaWR0aDtcblx0Y29uc3QgbWF4VGl0bGVMZW5ndGggPSBpbm5lcldpZHRoIC0gdGl0bGVQYWRkaW5nICogMjtcblx0Y29uc3QgdHJ1bmNhdGVkVGl0bGUgPVxuXHRcdHRpdGxlV2lkdGggPiBtYXhUaXRsZUxlbmd0aCA/IGAke3RpdGxlLnNsaWNlKDAsIG1heFRpdGxlTGVuZ3RoIC0gMyl9Li4uYCA6IHRpdGxlO1xuXHRjb25zdCBbdGl0bGVQYWRkaW5nTGVmdCwgdGl0bGVQYWRkaW5nUmlnaHRdID0gZ2V0UGFkZGluZ0ZvckxpbmUoXG5cdFx0c3RyaW5nV2lkdGgodHJ1bmNhdGVkVGl0bGUpLFxuXHRcdGlubmVyV2lkdGgsXG5cdFx0dGl0bGVQYWRkaW5nLFxuXHRcdG9wdHM/LnRpdGxlQWxpZ25cblx0KTtcblx0Y29uc3Qgd3JhcHBlZE1lc3NhZ2UgPSB3cmFwQW5zaShtZXNzYWdlLCBpbm5lcldpZHRoIC0gY29udGVudFBhZGRpbmcgKiAyLCB7XG5cdFx0aGFyZDogdHJ1ZSxcblx0XHR0cmltOiBmYWxzZSxcblx0fSk7XG5cdG91dHB1dC53cml0ZShcblx0XHRgJHtsaW5lUHJlZml4fSR7c3ltYm9sc1swXX0ke2hTeW1ib2wucmVwZWF0KHRpdGxlUGFkZGluZ0xlZnQpfSR7dHJ1bmNhdGVkVGl0bGV9JHtoU3ltYm9sLnJlcGVhdCh0aXRsZVBhZGRpbmdSaWdodCl9JHtzeW1ib2xzWzFdfVxcbmBcblx0KTtcblx0Y29uc3Qgd3JhcHBlZExpbmVzID0gd3JhcHBlZE1lc3NhZ2Uuc3BsaXQoJ1xcbicpO1xuXHRmb3IgKGNvbnN0IGxpbmUgb2Ygd3JhcHBlZExpbmVzKSB7XG5cdFx0Y29uc3QgW2xlZnRMaW5lUGFkZGluZywgcmlnaHRMaW5lUGFkZGluZ10gPSBnZXRQYWRkaW5nRm9yTGluZShcblx0XHRcdHN0cmluZ1dpZHRoKGxpbmUpLFxuXHRcdFx0aW5uZXJXaWR0aCxcblx0XHRcdGNvbnRlbnRQYWRkaW5nLFxuXHRcdFx0b3B0cz8uY29udGVudEFsaWduXG5cdFx0KTtcblx0XHRvdXRwdXQud3JpdGUoXG5cdFx0XHRgJHtsaW5lUHJlZml4fSR7dlN5bWJvbH0keycgJy5yZXBlYXQobGVmdExpbmVQYWRkaW5nKX0ke2xpbmV9JHsnICcucmVwZWF0KHJpZ2h0TGluZVBhZGRpbmcpfSR7dlN5bWJvbH1cXG5gXG5cdFx0KTtcblx0fVxuXHRvdXRwdXQud3JpdGUoYCR7bGluZVByZWZpeH0ke3N5bWJvbHNbMl19JHtoU3ltYm9sLnJlcGVhdChpbm5lcldpZHRoKX0ke3N5bWJvbHNbM119XFxuYCk7XG59O1xuIiwgImltcG9ydCB7IENvbmZpcm1Qcm9tcHQsIHNldHRpbmdzIH0gZnJvbSAnQGNsYWNrL2NvcmUnO1xuaW1wb3J0IGNvbG9yIGZyb20gJ3BpY29jb2xvcnMnO1xuaW1wb3J0IHtcblx0dHlwZSBDb21tb25PcHRpb25zLFxuXHRTX0JBUixcblx0U19CQVJfRU5ELFxuXHRTX1JBRElPX0FDVElWRSxcblx0U19SQURJT19JTkFDVElWRSxcblx0c3ltYm9sLFxufSBmcm9tICcuL2NvbW1vbi5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29uZmlybU9wdGlvbnMgZXh0ZW5kcyBDb21tb25PcHRpb25zIHtcblx0bWVzc2FnZTogc3RyaW5nO1xuXHRhY3RpdmU/OiBzdHJpbmc7XG5cdGluYWN0aXZlPzogc3RyaW5nO1xuXHRpbml0aWFsVmFsdWU/OiBib29sZWFuO1xuXHR2ZXJ0aWNhbD86IGJvb2xlYW47XG59XG5leHBvcnQgY29uc3QgY29uZmlybSA9IChvcHRzOiBDb25maXJtT3B0aW9ucykgPT4ge1xuXHRjb25zdCBhY3RpdmUgPSBvcHRzLmFjdGl2ZSA/PyAnWWVzJztcblx0Y29uc3QgaW5hY3RpdmUgPSBvcHRzLmluYWN0aXZlID8/ICdObyc7XG5cdHJldHVybiBuZXcgQ29uZmlybVByb21wdCh7XG5cdFx0YWN0aXZlLFxuXHRcdGluYWN0aXZlLFxuXHRcdHNpZ25hbDogb3B0cy5zaWduYWwsXG5cdFx0aW5wdXQ6IG9wdHMuaW5wdXQsXG5cdFx0b3V0cHV0OiBvcHRzLm91dHB1dCxcblx0XHRpbml0aWFsVmFsdWU6IG9wdHMuaW5pdGlhbFZhbHVlID8/IHRydWUsXG5cdFx0cmVuZGVyKCkge1xuXHRcdFx0Y29uc3QgaGFzR3VpZGUgPSBvcHRzLndpdGhHdWlkZSA/PyBzZXR0aW5ncy53aXRoR3VpZGU7XG5cdFx0XHRjb25zdCB0aXRsZSA9IGAke2hhc0d1aWRlID8gYCR7Y29sb3IuZ3JheShTX0JBUil9XFxuYCA6ICcnfSR7c3ltYm9sKHRoaXMuc3RhdGUpfSAgJHtvcHRzLm1lc3NhZ2V9XFxuYDtcblx0XHRcdGNvbnN0IHZhbHVlID0gdGhpcy52YWx1ZSA/IGFjdGl2ZSA6IGluYWN0aXZlO1xuXG5cdFx0XHRzd2l0Y2ggKHRoaXMuc3RhdGUpIHtcblx0XHRcdFx0Y2FzZSAnc3VibWl0Jzoge1xuXHRcdFx0XHRcdGNvbnN0IHN1Ym1pdFByZWZpeCA9IGhhc0d1aWRlID8gYCR7Y29sb3IuZ3JheShTX0JBUil9ICBgIDogJyc7XG5cdFx0XHRcdFx0cmV0dXJuIGAke3RpdGxlfSR7c3VibWl0UHJlZml4fSR7Y29sb3IuZGltKHZhbHVlKX1gO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNhc2UgJ2NhbmNlbCc6IHtcblx0XHRcdFx0XHRjb25zdCBjYW5jZWxQcmVmaXggPSBoYXNHdWlkZSA/IGAke2NvbG9yLmdyYXkoU19CQVIpfSAgYCA6ICcnO1xuXHRcdFx0XHRcdHJldHVybiBgJHt0aXRsZX0ke2NhbmNlbFByZWZpeH0ke2NvbG9yLnN0cmlrZXRocm91Z2goXG5cdFx0XHRcdFx0XHRjb2xvci5kaW0odmFsdWUpXG5cdFx0XHRcdFx0KX0ke2hhc0d1aWRlID8gYFxcbiR7Y29sb3IuZ3JheShTX0JBUil9YCA6ICcnfWA7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZGVmYXVsdDoge1xuXHRcdFx0XHRcdGNvbnN0IGRlZmF1bHRQcmVmaXggPSBoYXNHdWlkZSA/IGAke2NvbG9yLmN5YW4oU19CQVIpfSAgYCA6ICcnO1xuXHRcdFx0XHRcdGNvbnN0IGRlZmF1bHRQcmVmaXhFbmQgPSBoYXNHdWlkZSA/IGNvbG9yLmN5YW4oU19CQVJfRU5EKSA6ICcnO1xuXHRcdFx0XHRcdHJldHVybiBgJHt0aXRsZX0ke2RlZmF1bHRQcmVmaXh9JHtcblx0XHRcdFx0XHRcdHRoaXMudmFsdWVcblx0XHRcdFx0XHRcdFx0PyBgJHtjb2xvci5ncmVlbihTX1JBRElPX0FDVElWRSl9ICR7YWN0aXZlfWBcblx0XHRcdFx0XHRcdFx0OiBgJHtjb2xvci5kaW0oU19SQURJT19JTkFDVElWRSl9ICR7Y29sb3IuZGltKGFjdGl2ZSl9YFxuXHRcdFx0XHRcdH0ke29wdHMudmVydGljYWwgPyAoaGFzR3VpZGUgPyBgXFxuJHtjb2xvci5jeWFuKFNfQkFSKX0gIGAgOiAnXFxuJykgOiBgICR7Y29sb3IuZGltKCcvJyl9IGB9JHtcblx0XHRcdFx0XHRcdCF0aGlzLnZhbHVlXG5cdFx0XHRcdFx0XHRcdD8gYCR7Y29sb3IuZ3JlZW4oU19SQURJT19BQ1RJVkUpfSAke2luYWN0aXZlfWBcblx0XHRcdFx0XHRcdFx0OiBgJHtjb2xvci5kaW0oU19SQURJT19JTkFDVElWRSl9ICR7Y29sb3IuZGltKGluYWN0aXZlKX1gXG5cdFx0XHRcdFx0fVxcbiR7ZGVmYXVsdFByZWZpeEVuZH1cXG5gO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblx0fSkucHJvbXB0KCkgYXMgUHJvbWlzZTxib29sZWFuIHwgc3ltYm9sPjtcbn07XG4iLCAiaW1wb3J0IHsgaXNDYW5jZWwgfSBmcm9tICdAY2xhY2svY29yZSc7XG5cbnR5cGUgUHJldHRpZnk8VD4gPSB7XG5cdFtQIGluIGtleW9mIFRdOiBUW1BdO1xufSAmIHt9O1xuXG5leHBvcnQgdHlwZSBQcm9tcHRHcm91cEF3YWl0ZWRSZXR1cm48VD4gPSB7XG5cdFtQIGluIGtleW9mIFRdOiBFeGNsdWRlPEF3YWl0ZWQ8VFtQXT4sIHN5bWJvbD47XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIFByb21wdEdyb3VwT3B0aW9uczxUPiB7XG5cdC8qKlxuXHQgKiBDb250cm9sIGhvdyB0aGUgZ3JvdXAgY2FuIGJlIGNhbmNlbGVkXG5cdCAqIGlmIG9uZSBvZiB0aGUgcHJvbXB0cyBpcyBjYW5jZWxlZC5cblx0ICovXG5cdG9uQ2FuY2VsPzogKG9wdHM6IHsgcmVzdWx0czogUHJldHRpZnk8UGFydGlhbDxQcm9tcHRHcm91cEF3YWl0ZWRSZXR1cm48VD4+PiB9KSA9PiB2b2lkO1xufVxuXG5leHBvcnQgdHlwZSBQcm9tcHRHcm91cDxUPiA9IHtcblx0W1AgaW4ga2V5b2YgVF06IChvcHRzOiB7XG5cdFx0cmVzdWx0czogUHJldHRpZnk8UGFydGlhbDxQcm9tcHRHcm91cEF3YWl0ZWRSZXR1cm48T21pdDxULCBQPj4+Pjtcblx0fSkgPT4gdW5kZWZpbmVkIHwgUHJvbWlzZTxUW1BdIHwgdW5kZWZpbmVkPjtcbn07XG5cbi8qKlxuICogRGVmaW5lIGEgZ3JvdXAgb2YgcHJvbXB0cyB0byBiZSBkaXNwbGF5ZWRcbiAqIGFuZCByZXR1cm4gYSByZXN1bHRzIG9mIG9iamVjdHMgd2l0aGluIHRoZSBncm91cFxuICovXG5leHBvcnQgY29uc3QgZ3JvdXAgPSBhc3luYyA8VD4oXG5cdHByb21wdHM6IFByb21wdEdyb3VwPFQ+LFxuXHRvcHRzPzogUHJvbXB0R3JvdXBPcHRpb25zPFQ+XG4pOiBQcm9taXNlPFByZXR0aWZ5PFByb21wdEdyb3VwQXdhaXRlZFJldHVybjxUPj4+ID0+IHtcblx0Y29uc3QgcmVzdWx0cyA9IHt9IGFzIGFueTtcblx0Y29uc3QgcHJvbXB0TmFtZXMgPSBPYmplY3Qua2V5cyhwcm9tcHRzKTtcblxuXHRmb3IgKGNvbnN0IG5hbWUgb2YgcHJvbXB0TmFtZXMpIHtcblx0XHRjb25zdCBwcm9tcHQgPSBwcm9tcHRzW25hbWUgYXMga2V5b2YgVF07XG5cdFx0Y29uc3QgcmVzdWx0ID0gYXdhaXQgcHJvbXB0KHsgcmVzdWx0cyB9KT8uY2F0Y2goKGUpID0+IHtcblx0XHRcdHRocm93IGU7XG5cdFx0fSk7XG5cblx0XHQvLyBQYXNzIHRoZSByZXN1bHRzIHRvIHRoZSBvbkNhbmNlbCBmdW5jdGlvblxuXHRcdC8vIHNvIHRoZSB1c2VyIGNhbiBkZWNpZGUgd2hhdCB0byBkbyB3aXRoIHRoZSByZXN1bHRzXG5cdFx0Ly8gVE9ETzogU3dpdGNoIHRvIGNhbGxiYWNrIHdpdGhpbiBjb3JlIHRvIGF2b2lkIGlzQ2FuY2VsIEZuXG5cdFx0aWYgKHR5cGVvZiBvcHRzPy5vbkNhbmNlbCA9PT0gJ2Z1bmN0aW9uJyAmJiBpc0NhbmNlbChyZXN1bHQpKSB7XG5cdFx0XHRyZXN1bHRzW25hbWVdID0gJ2NhbmNlbGVkJztcblx0XHRcdG9wdHMub25DYW5jZWwoeyByZXN1bHRzIH0pO1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0cmVzdWx0c1tuYW1lXSA9IHJlc3VsdDtcblx0fVxuXG5cdHJldHVybiByZXN1bHRzO1xufTtcbiIsICJpbXBvcnQgeyBHcm91cE11bHRpU2VsZWN0UHJvbXB0IH0gZnJvbSAnQGNsYWNrL2NvcmUnO1xuaW1wb3J0IGNvbG9yIGZyb20gJ3BpY29jb2xvcnMnO1xuaW1wb3J0IHtcblx0dHlwZSBDb21tb25PcHRpb25zLFxuXHRTX0JBUixcblx0U19CQVJfRU5ELFxuXHRTX0NIRUNLQk9YX0FDVElWRSxcblx0U19DSEVDS0JPWF9JTkFDVElWRSxcblx0U19DSEVDS0JPWF9TRUxFQ1RFRCxcblx0c3ltYm9sLFxufSBmcm9tICcuL2NvbW1vbi5qcyc7XG5pbXBvcnQgdHlwZSB7IE9wdGlvbiB9IGZyb20gJy4vc2VsZWN0LmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBHcm91cE11bHRpU2VsZWN0T3B0aW9uczxWYWx1ZT4gZXh0ZW5kcyBDb21tb25PcHRpb25zIHtcblx0bWVzc2FnZTogc3RyaW5nO1xuXHRvcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCBPcHRpb248VmFsdWU+W10+O1xuXHRpbml0aWFsVmFsdWVzPzogVmFsdWVbXTtcblx0cmVxdWlyZWQ/OiBib29sZWFuO1xuXHRjdXJzb3JBdD86IFZhbHVlO1xuXHRzZWxlY3RhYmxlR3JvdXBzPzogYm9vbGVhbjtcblx0Z3JvdXBTcGFjaW5nPzogbnVtYmVyO1xufVxuZXhwb3J0IGNvbnN0IGdyb3VwTXVsdGlzZWxlY3QgPSA8VmFsdWU+KG9wdHM6IEdyb3VwTXVsdGlTZWxlY3RPcHRpb25zPFZhbHVlPikgPT4ge1xuXHRjb25zdCB7IHNlbGVjdGFibGVHcm91cHMgPSB0cnVlLCBncm91cFNwYWNpbmcgPSAwIH0gPSBvcHRzO1xuXHRjb25zdCBvcHQgPSAoXG5cdFx0b3B0aW9uOiBPcHRpb248VmFsdWU+ICYgeyBncm91cDogc3RyaW5nIHwgYm9vbGVhbiB9LFxuXHRcdHN0YXRlOlxuXHRcdFx0fCAnaW5hY3RpdmUnXG5cdFx0XHR8ICdhY3RpdmUnXG5cdFx0XHR8ICdzZWxlY3RlZCdcblx0XHRcdHwgJ2FjdGl2ZS1zZWxlY3RlZCdcblx0XHRcdHwgJ2dyb3VwLWFjdGl2ZSdcblx0XHRcdHwgJ2dyb3VwLWFjdGl2ZS1zZWxlY3RlZCdcblx0XHRcdHwgJ3N1Ym1pdHRlZCdcblx0XHRcdHwgJ2NhbmNlbGxlZCcsXG5cdFx0b3B0aW9uczogKE9wdGlvbjxWYWx1ZT4gJiB7IGdyb3VwOiBzdHJpbmcgfCBib29sZWFuIH0pW10gPSBbXVxuXHQpID0+IHtcblx0XHRjb25zdCBsYWJlbCA9IG9wdGlvbi5sYWJlbCA/PyBTdHJpbmcob3B0aW9uLnZhbHVlKTtcblx0XHRjb25zdCBpc0l0ZW0gPSB0eXBlb2Ygb3B0aW9uLmdyb3VwID09PSAnc3RyaW5nJztcblx0XHRjb25zdCBuZXh0ID0gaXNJdGVtICYmIChvcHRpb25zW29wdGlvbnMuaW5kZXhPZihvcHRpb24pICsgMV0gPz8geyBncm91cDogdHJ1ZSB9KTtcblx0XHRjb25zdCBpc0xhc3QgPSBpc0l0ZW0gJiYgbmV4dCAmJiBuZXh0Lmdyb3VwID09PSB0cnVlO1xuXHRcdGNvbnN0IHByZWZpeCA9IGlzSXRlbSA/IChzZWxlY3RhYmxlR3JvdXBzID8gYCR7aXNMYXN0ID8gU19CQVJfRU5EIDogU19CQVJ9IGAgOiAnICAnKSA6ICcnO1xuXHRcdGxldCBzcGFjaW5nUHJlZml4ID0gJyc7XG5cdFx0aWYgKGdyb3VwU3BhY2luZyA+IDAgJiYgIWlzSXRlbSkge1xuXHRcdFx0Y29uc3Qgc3BhY2luZ1ByZWZpeFRleHQgPSBgXFxuJHtjb2xvci5jeWFuKFNfQkFSKX1gO1xuXHRcdFx0c3BhY2luZ1ByZWZpeCA9IGAke3NwYWNpbmdQcmVmaXhUZXh0LnJlcGVhdChncm91cFNwYWNpbmcgLSAxKX0ke3NwYWNpbmdQcmVmaXhUZXh0fSAgYDtcblx0XHR9XG5cblx0XHRpZiAoc3RhdGUgPT09ICdhY3RpdmUnKSB7XG5cdFx0XHRyZXR1cm4gYCR7c3BhY2luZ1ByZWZpeH0ke2NvbG9yLmRpbShwcmVmaXgpfSR7Y29sb3IuY3lhbihTX0NIRUNLQk9YX0FDVElWRSl9ICR7bGFiZWx9JHtcblx0XHRcdFx0b3B0aW9uLmhpbnQgPyBgICR7Y29sb3IuZGltKGAoJHtvcHRpb24uaGludH0pYCl9YCA6ICcnXG5cdFx0XHR9YDtcblx0XHR9XG5cdFx0aWYgKHN0YXRlID09PSAnZ3JvdXAtYWN0aXZlJykge1xuXHRcdFx0cmV0dXJuIGAke3NwYWNpbmdQcmVmaXh9JHtwcmVmaXh9JHtjb2xvci5jeWFuKFNfQ0hFQ0tCT1hfQUNUSVZFKX0gJHtjb2xvci5kaW0obGFiZWwpfWA7XG5cdFx0fVxuXHRcdGlmIChzdGF0ZSA9PT0gJ2dyb3VwLWFjdGl2ZS1zZWxlY3RlZCcpIHtcblx0XHRcdHJldHVybiBgJHtzcGFjaW5nUHJlZml4fSR7cHJlZml4fSR7Y29sb3IuZ3JlZW4oU19DSEVDS0JPWF9TRUxFQ1RFRCl9ICR7Y29sb3IuZGltKGxhYmVsKX1gO1xuXHRcdH1cblx0XHRpZiAoc3RhdGUgPT09ICdzZWxlY3RlZCcpIHtcblx0XHRcdGNvbnN0IHNlbGVjdGVkQ2hlY2tib3ggPSBpc0l0ZW0gfHwgc2VsZWN0YWJsZUdyb3VwcyA/IGNvbG9yLmdyZWVuKFNfQ0hFQ0tCT1hfU0VMRUNURUQpIDogJyc7XG5cdFx0XHRyZXR1cm4gYCR7c3BhY2luZ1ByZWZpeH0ke2NvbG9yLmRpbShwcmVmaXgpfSR7c2VsZWN0ZWRDaGVja2JveH0gJHtjb2xvci5kaW0obGFiZWwpfSR7XG5cdFx0XHRcdG9wdGlvbi5oaW50ID8gYCAke2NvbG9yLmRpbShgKCR7b3B0aW9uLmhpbnR9KWApfWAgOiAnJ1xuXHRcdFx0fWA7XG5cdFx0fVxuXHRcdGlmIChzdGF0ZSA9PT0gJ2NhbmNlbGxlZCcpIHtcblx0XHRcdHJldHVybiBgJHtjb2xvci5zdHJpa2V0aHJvdWdoKGNvbG9yLmRpbShsYWJlbCkpfWA7XG5cdFx0fVxuXHRcdGlmIChzdGF0ZSA9PT0gJ2FjdGl2ZS1zZWxlY3RlZCcpIHtcblx0XHRcdHJldHVybiBgJHtzcGFjaW5nUHJlZml4fSR7Y29sb3IuZGltKHByZWZpeCl9JHtjb2xvci5ncmVlbihTX0NIRUNLQk9YX1NFTEVDVEVEKX0gJHtsYWJlbH0ke1xuXHRcdFx0XHRvcHRpb24uaGludCA/IGAgJHtjb2xvci5kaW0oYCgke29wdGlvbi5oaW50fSlgKX1gIDogJydcblx0XHRcdH1gO1xuXHRcdH1cblx0XHRpZiAoc3RhdGUgPT09ICdzdWJtaXR0ZWQnKSB7XG5cdFx0XHRyZXR1cm4gYCR7Y29sb3IuZGltKGxhYmVsKX1gO1xuXHRcdH1cblx0XHRjb25zdCB1bnNlbGVjdGVkQ2hlY2tib3ggPSBpc0l0ZW0gfHwgc2VsZWN0YWJsZUdyb3VwcyA/IGNvbG9yLmRpbShTX0NIRUNLQk9YX0lOQUNUSVZFKSA6ICcnO1xuXHRcdHJldHVybiBgJHtzcGFjaW5nUHJlZml4fSR7Y29sb3IuZGltKHByZWZpeCl9JHt1bnNlbGVjdGVkQ2hlY2tib3h9ICR7Y29sb3IuZGltKGxhYmVsKX1gO1xuXHR9O1xuXHRjb25zdCByZXF1aXJlZCA9IG9wdHMucmVxdWlyZWQgPz8gdHJ1ZTtcblxuXHRyZXR1cm4gbmV3IEdyb3VwTXVsdGlTZWxlY3RQcm9tcHQoe1xuXHRcdG9wdGlvbnM6IG9wdHMub3B0aW9ucyxcblx0XHRzaWduYWw6IG9wdHMuc2lnbmFsLFxuXHRcdGlucHV0OiBvcHRzLmlucHV0LFxuXHRcdG91dHB1dDogb3B0cy5vdXRwdXQsXG5cdFx0aW5pdGlhbFZhbHVlczogb3B0cy5pbml0aWFsVmFsdWVzLFxuXHRcdHJlcXVpcmVkLFxuXHRcdGN1cnNvckF0OiBvcHRzLmN1cnNvckF0LFxuXHRcdHNlbGVjdGFibGVHcm91cHMsXG5cdFx0dmFsaWRhdGUoc2VsZWN0ZWQ6IFZhbHVlW10gfCB1bmRlZmluZWQpIHtcblx0XHRcdGlmIChyZXF1aXJlZCAmJiAoc2VsZWN0ZWQgPT09IHVuZGVmaW5lZCB8fCBzZWxlY3RlZC5sZW5ndGggPT09IDApKVxuXHRcdFx0XHRyZXR1cm4gYFBsZWFzZSBzZWxlY3QgYXQgbGVhc3Qgb25lIG9wdGlvbi5cXG4ke2NvbG9yLnJlc2V0KFxuXHRcdFx0XHRcdGNvbG9yLmRpbShcblx0XHRcdFx0XHRcdGBQcmVzcyAke2NvbG9yLmdyYXkoY29sb3IuYmdXaGl0ZShjb2xvci5pbnZlcnNlKCcgc3BhY2UgJykpKX0gdG8gc2VsZWN0LCAke2NvbG9yLmdyYXkoXG5cdFx0XHRcdFx0XHRcdGNvbG9yLmJnV2hpdGUoY29sb3IuaW52ZXJzZSgnIGVudGVyICcpKVxuXHRcdFx0XHRcdFx0KX0gdG8gc3VibWl0YFxuXHRcdFx0XHRcdClcblx0XHRcdFx0KX1gO1xuXHRcdH0sXG5cdFx0cmVuZGVyKCkge1xuXHRcdFx0Y29uc3QgdGl0bGUgPSBgJHtjb2xvci5ncmF5KFNfQkFSKX1cXG4ke3N5bWJvbCh0aGlzLnN0YXRlKX0gICR7b3B0cy5tZXNzYWdlfVxcbmA7XG5cdFx0XHRjb25zdCB2YWx1ZSA9IHRoaXMudmFsdWUgPz8gW107XG5cblx0XHRcdHN3aXRjaCAodGhpcy5zdGF0ZSkge1xuXHRcdFx0XHRjYXNlICdzdWJtaXQnOiB7XG5cdFx0XHRcdFx0Y29uc3Qgc2VsZWN0ZWRPcHRpb25zID0gdGhpcy5vcHRpb25zXG5cdFx0XHRcdFx0XHQuZmlsdGVyKCh7IHZhbHVlOiBvcHRpb25WYWx1ZSB9KSA9PiB2YWx1ZS5pbmNsdWRlcyhvcHRpb25WYWx1ZSkpXG5cdFx0XHRcdFx0XHQubWFwKChvcHRpb24pID0+IG9wdChvcHRpb24sICdzdWJtaXR0ZWQnKSk7XG5cdFx0XHRcdFx0Y29uc3Qgb3B0aW9uc1RleHQgPVxuXHRcdFx0XHRcdFx0c2VsZWN0ZWRPcHRpb25zLmxlbmd0aCA9PT0gMCA/ICcnIDogYCAgJHtzZWxlY3RlZE9wdGlvbnMuam9pbihjb2xvci5kaW0oJywgJykpfWA7XG5cdFx0XHRcdFx0cmV0dXJuIGAke3RpdGxlfSR7Y29sb3IuZ3JheShTX0JBUil9JHtvcHRpb25zVGV4dH1gO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNhc2UgJ2NhbmNlbCc6IHtcblx0XHRcdFx0XHRjb25zdCBsYWJlbCA9IHRoaXMub3B0aW9uc1xuXHRcdFx0XHRcdFx0LmZpbHRlcigoeyB2YWx1ZTogb3B0aW9uVmFsdWUgfSkgPT4gdmFsdWUuaW5jbHVkZXMob3B0aW9uVmFsdWUpKVxuXHRcdFx0XHRcdFx0Lm1hcCgob3B0aW9uKSA9PiBvcHQob3B0aW9uLCAnY2FuY2VsbGVkJykpXG5cdFx0XHRcdFx0XHQuam9pbihjb2xvci5kaW0oJywgJykpO1xuXHRcdFx0XHRcdHJldHVybiBgJHt0aXRsZX0ke2NvbG9yLmdyYXkoU19CQVIpfSAgJHtcblx0XHRcdFx0XHRcdGxhYmVsLnRyaW0oKSA/IGAke2xhYmVsfVxcbiR7Y29sb3IuZ3JheShTX0JBUil9YCA6ICcnXG5cdFx0XHRcdFx0fWA7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y2FzZSAnZXJyb3InOiB7XG5cdFx0XHRcdFx0Y29uc3QgZm9vdGVyID0gdGhpcy5lcnJvclxuXHRcdFx0XHRcdFx0LnNwbGl0KCdcXG4nKVxuXHRcdFx0XHRcdFx0Lm1hcCgobG4sIGkpID0+XG5cdFx0XHRcdFx0XHRcdGkgPT09IDAgPyBgJHtjb2xvci55ZWxsb3coU19CQVJfRU5EKX0gICR7Y29sb3IueWVsbG93KGxuKX1gIDogYCAgICR7bG59YFxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0LmpvaW4oJ1xcbicpO1xuXHRcdFx0XHRcdHJldHVybiBgJHt0aXRsZX0ke2NvbG9yLnllbGxvdyhTX0JBUil9ICAke3RoaXMub3B0aW9uc1xuXHRcdFx0XHRcdFx0Lm1hcCgob3B0aW9uLCBpLCBvcHRpb25zKSA9PiB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHNlbGVjdGVkID1cblx0XHRcdFx0XHRcdFx0XHR2YWx1ZS5pbmNsdWRlcyhvcHRpb24udmFsdWUpIHx8XG5cdFx0XHRcdFx0XHRcdFx0KG9wdGlvbi5ncm91cCA9PT0gdHJ1ZSAmJiB0aGlzLmlzR3JvdXBTZWxlY3RlZChgJHtvcHRpb24udmFsdWV9YCkpO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBhY3RpdmUgPSBpID09PSB0aGlzLmN1cnNvcjtcblx0XHRcdFx0XHRcdFx0Y29uc3QgZ3JvdXBBY3RpdmUgPVxuXHRcdFx0XHRcdFx0XHRcdCFhY3RpdmUgJiZcblx0XHRcdFx0XHRcdFx0XHR0eXBlb2Ygb3B0aW9uLmdyb3VwID09PSAnc3RyaW5nJyAmJlxuXHRcdFx0XHRcdFx0XHRcdHRoaXMub3B0aW9uc1t0aGlzLmN1cnNvcl0udmFsdWUgPT09IG9wdGlvbi5ncm91cDtcblx0XHRcdFx0XHRcdFx0aWYgKGdyb3VwQWN0aXZlKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIG9wdChvcHRpb24sIHNlbGVjdGVkID8gJ2dyb3VwLWFjdGl2ZS1zZWxlY3RlZCcgOiAnZ3JvdXAtYWN0aXZlJywgb3B0aW9ucyk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0aWYgKGFjdGl2ZSAmJiBzZWxlY3RlZCkge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBvcHQob3B0aW9uLCAnYWN0aXZlLXNlbGVjdGVkJywgb3B0aW9ucyk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0aWYgKHNlbGVjdGVkKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIG9wdChvcHRpb24sICdzZWxlY3RlZCcsIG9wdGlvbnMpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHJldHVybiBvcHQob3B0aW9uLCBhY3RpdmUgPyAnYWN0aXZlJyA6ICdpbmFjdGl2ZScsIG9wdGlvbnMpO1xuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdC5qb2luKGBcXG4ke2NvbG9yLnllbGxvdyhTX0JBUil9ICBgKX1cXG4ke2Zvb3Rlcn1cXG5gO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGRlZmF1bHQ6IHtcblx0XHRcdFx0XHRjb25zdCBvcHRpb25zVGV4dCA9IHRoaXMub3B0aW9uc1xuXHRcdFx0XHRcdFx0Lm1hcCgob3B0aW9uLCBpLCBvcHRpb25zKSA9PiB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHNlbGVjdGVkID1cblx0XHRcdFx0XHRcdFx0XHR2YWx1ZS5pbmNsdWRlcyhvcHRpb24udmFsdWUpIHx8XG5cdFx0XHRcdFx0XHRcdFx0KG9wdGlvbi5ncm91cCA9PT0gdHJ1ZSAmJiB0aGlzLmlzR3JvdXBTZWxlY3RlZChgJHtvcHRpb24udmFsdWV9YCkpO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBhY3RpdmUgPSBpID09PSB0aGlzLmN1cnNvcjtcblx0XHRcdFx0XHRcdFx0Y29uc3QgZ3JvdXBBY3RpdmUgPVxuXHRcdFx0XHRcdFx0XHRcdCFhY3RpdmUgJiZcblx0XHRcdFx0XHRcdFx0XHR0eXBlb2Ygb3B0aW9uLmdyb3VwID09PSAnc3RyaW5nJyAmJlxuXHRcdFx0XHRcdFx0XHRcdHRoaXMub3B0aW9uc1t0aGlzLmN1cnNvcl0udmFsdWUgPT09IG9wdGlvbi5ncm91cDtcblx0XHRcdFx0XHRcdFx0bGV0IG9wdGlvblRleHQgPSAnJztcblx0XHRcdFx0XHRcdFx0aWYgKGdyb3VwQWN0aXZlKSB7XG5cdFx0XHRcdFx0XHRcdFx0b3B0aW9uVGV4dCA9IG9wdChcblx0XHRcdFx0XHRcdFx0XHRcdG9wdGlvbixcblx0XHRcdFx0XHRcdFx0XHRcdHNlbGVjdGVkID8gJ2dyb3VwLWFjdGl2ZS1zZWxlY3RlZCcgOiAnZ3JvdXAtYWN0aXZlJyxcblx0XHRcdFx0XHRcdFx0XHRcdG9wdGlvbnNcblx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGFjdGl2ZSAmJiBzZWxlY3RlZCkge1xuXHRcdFx0XHRcdFx0XHRcdG9wdGlvblRleHQgPSBvcHQob3B0aW9uLCAnYWN0aXZlLXNlbGVjdGVkJywgb3B0aW9ucyk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoc2VsZWN0ZWQpIHtcblx0XHRcdFx0XHRcdFx0XHRvcHRpb25UZXh0ID0gb3B0KG9wdGlvbiwgJ3NlbGVjdGVkJywgb3B0aW9ucyk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0b3B0aW9uVGV4dCA9IG9wdChvcHRpb24sIGFjdGl2ZSA/ICdhY3RpdmUnIDogJ2luYWN0aXZlJywgb3B0aW9ucyk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0Y29uc3QgcHJlZml4ID0gaSAhPT0gMCAmJiAhb3B0aW9uVGV4dC5zdGFydHNXaXRoKCdcXG4nKSA/ICcgICcgOiAnJztcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGAke3ByZWZpeH0ke29wdGlvblRleHR9YDtcblx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHQuam9pbihgXFxuJHtjb2xvci5jeWFuKFNfQkFSKX1gKTtcblx0XHRcdFx0XHRjb25zdCBvcHRpb25zUHJlZml4ID0gb3B0aW9uc1RleHQuc3RhcnRzV2l0aCgnXFxuJykgPyAnJyA6ICcgICc7XG5cdFx0XHRcdFx0cmV0dXJuIGAke3RpdGxlfSR7Y29sb3IuY3lhbihTX0JBUil9JHtvcHRpb25zUHJlZml4fSR7b3B0aW9uc1RleHR9XFxuJHtjb2xvci5jeWFuKFNfQkFSX0VORCl9XFxuYDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cdH0pLnByb21wdCgpIGFzIFByb21pc2U8VmFsdWVbXSB8IHN5bWJvbD47XG59O1xuIiwgImltcG9ydCB7IHNldHRpbmdzIH0gZnJvbSAnQGNsYWNrL2NvcmUnO1xuaW1wb3J0IGNvbG9yIGZyb20gJ3BpY29jb2xvcnMnO1xuaW1wb3J0IHtcblx0dHlwZSBDb21tb25PcHRpb25zLFxuXHRTX0JBUixcblx0U19FUlJPUixcblx0U19JTkZPLFxuXHRTX1NURVBfU1VCTUlULFxuXHRTX1NVQ0NFU1MsXG5cdFNfV0FSTixcbn0gZnJvbSAnLi9jb21tb24uanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIExvZ01lc3NhZ2VPcHRpb25zIGV4dGVuZHMgQ29tbW9uT3B0aW9ucyB7XG5cdHN5bWJvbD86IHN0cmluZztcblx0c3BhY2luZz86IG51bWJlcjtcblx0c2Vjb25kYXJ5U3ltYm9sPzogc3RyaW5nO1xufVxuXG5leHBvcnQgY29uc3QgbG9nID0ge1xuXHRtZXNzYWdlOiAoXG5cdFx0bWVzc2FnZTogc3RyaW5nIHwgc3RyaW5nW10gPSBbXSxcblx0XHR7XG5cdFx0XHRzeW1ib2wgPSBjb2xvci5ncmF5KFNfQkFSKSxcblx0XHRcdHNlY29uZGFyeVN5bWJvbCA9IGNvbG9yLmdyYXkoU19CQVIpLFxuXHRcdFx0b3V0cHV0ID0gcHJvY2Vzcy5zdGRvdXQsXG5cdFx0XHRzcGFjaW5nID0gMSxcblx0XHRcdHdpdGhHdWlkZSxcblx0XHR9OiBMb2dNZXNzYWdlT3B0aW9ucyA9IHt9XG5cdCkgPT4ge1xuXHRcdGNvbnN0IHBhcnRzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdGNvbnN0IGhhc0d1aWRlID0gd2l0aEd1aWRlID8/IHNldHRpbmdzLndpdGhHdWlkZTtcblx0XHRjb25zdCBzcGFjaW5nU3RyaW5nID0gIWhhc0d1aWRlID8gJycgOiBzZWNvbmRhcnlTeW1ib2w7XG5cdFx0Y29uc3QgcHJlZml4ID0gIWhhc0d1aWRlID8gJycgOiBgJHtzeW1ib2x9ICBgO1xuXHRcdGNvbnN0IHNlY29uZGFyeVByZWZpeCA9ICFoYXNHdWlkZSA/ICcnIDogYCR7c2Vjb25kYXJ5U3ltYm9sfSAgYDtcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgc3BhY2luZzsgaSsrKSB7XG5cdFx0XHRwYXJ0cy5wdXNoKHNwYWNpbmdTdHJpbmcpO1xuXHRcdH1cblxuXHRcdGNvbnN0IG1lc3NhZ2VQYXJ0cyA9IEFycmF5LmlzQXJyYXkobWVzc2FnZSkgPyBtZXNzYWdlIDogbWVzc2FnZS5zcGxpdCgnXFxuJyk7XG5cdFx0aWYgKG1lc3NhZ2VQYXJ0cy5sZW5ndGggPiAwKSB7XG5cdFx0XHRjb25zdCBbZmlyc3RMaW5lLCAuLi5saW5lc10gPSBtZXNzYWdlUGFydHM7XG5cdFx0XHRpZiAoZmlyc3RMaW5lLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0cGFydHMucHVzaChgJHtwcmVmaXh9JHtmaXJzdExpbmV9YCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRwYXJ0cy5wdXNoKGhhc0d1aWRlID8gc3ltYm9sIDogJycpO1xuXHRcdFx0fVxuXHRcdFx0Zm9yIChjb25zdCBsbiBvZiBsaW5lcykge1xuXHRcdFx0XHRpZiAobG4ubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdHBhcnRzLnB1c2goYCR7c2Vjb25kYXJ5UHJlZml4fSR7bG59YCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cGFydHMucHVzaChoYXNHdWlkZSA/IHNlY29uZGFyeVN5bWJvbCA6ICcnKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRvdXRwdXQud3JpdGUoYCR7cGFydHMuam9pbignXFxuJyl9XFxuYCk7XG5cdH0sXG5cdGluZm86IChtZXNzYWdlOiBzdHJpbmcsIG9wdHM/OiBMb2dNZXNzYWdlT3B0aW9ucykgPT4ge1xuXHRcdGxvZy5tZXNzYWdlKG1lc3NhZ2UsIHsgLi4ub3B0cywgc3ltYm9sOiBjb2xvci5ibHVlKFNfSU5GTykgfSk7XG5cdH0sXG5cdHN1Y2Nlc3M6IChtZXNzYWdlOiBzdHJpbmcsIG9wdHM/OiBMb2dNZXNzYWdlT3B0aW9ucykgPT4ge1xuXHRcdGxvZy5tZXNzYWdlKG1lc3NhZ2UsIHsgLi4ub3B0cywgc3ltYm9sOiBjb2xvci5ncmVlbihTX1NVQ0NFU1MpIH0pO1xuXHR9LFxuXHRzdGVwOiAobWVzc2FnZTogc3RyaW5nLCBvcHRzPzogTG9nTWVzc2FnZU9wdGlvbnMpID0+IHtcblx0XHRsb2cubWVzc2FnZShtZXNzYWdlLCB7IC4uLm9wdHMsIHN5bWJvbDogY29sb3IuZ3JlZW4oU19TVEVQX1NVQk1JVCkgfSk7XG5cdH0sXG5cdHdhcm46IChtZXNzYWdlOiBzdHJpbmcsIG9wdHM/OiBMb2dNZXNzYWdlT3B0aW9ucykgPT4ge1xuXHRcdGxvZy5tZXNzYWdlKG1lc3NhZ2UsIHsgLi4ub3B0cywgc3ltYm9sOiBjb2xvci55ZWxsb3coU19XQVJOKSB9KTtcblx0fSxcblx0LyoqIGFsaWFzIGZvciBgbG9nLndhcm4oKWAuICovXG5cdHdhcm5pbmc6IChtZXNzYWdlOiBzdHJpbmcsIG9wdHM/OiBMb2dNZXNzYWdlT3B0aW9ucykgPT4ge1xuXHRcdGxvZy53YXJuKG1lc3NhZ2UsIG9wdHMpO1xuXHR9LFxuXHRlcnJvcjogKG1lc3NhZ2U6IHN0cmluZywgb3B0cz86IExvZ01lc3NhZ2VPcHRpb25zKSA9PiB7XG5cdFx0bG9nLm1lc3NhZ2UobWVzc2FnZSwgeyAuLi5vcHRzLCBzeW1ib2w6IGNvbG9yLnJlZChTX0VSUk9SKSB9KTtcblx0fSxcbn07XG4iLCAiaW1wb3J0IHR5cGUgeyBXcml0YWJsZSB9IGZyb20gJ25vZGU6c3RyZWFtJztcbmltcG9ydCBjb2xvciBmcm9tICdwaWNvY29sb3JzJztcbmltcG9ydCB7IHR5cGUgQ29tbW9uT3B0aW9ucywgU19CQVIsIFNfQkFSX0VORCwgU19CQVJfU1RBUlQgfSBmcm9tICcuL2NvbW1vbi5qcyc7XG5cbmV4cG9ydCBjb25zdCBjYW5jZWwgPSAobWVzc2FnZSA9ICcnLCBvcHRzPzogQ29tbW9uT3B0aW9ucykgPT4ge1xuXHRjb25zdCBvdXRwdXQ6IFdyaXRhYmxlID0gb3B0cz8ub3V0cHV0ID8/IHByb2Nlc3Muc3Rkb3V0O1xuXHRvdXRwdXQud3JpdGUoYCR7Y29sb3IuZ3JheShTX0JBUl9FTkQpfSAgJHtjb2xvci5yZWQobWVzc2FnZSl9XFxuXFxuYCk7XG59O1xuXG5leHBvcnQgY29uc3QgaW50cm8gPSAodGl0bGUgPSAnJywgb3B0cz86IENvbW1vbk9wdGlvbnMpID0+IHtcblx0Y29uc3Qgb3V0cHV0OiBXcml0YWJsZSA9IG9wdHM/Lm91dHB1dCA/PyBwcm9jZXNzLnN0ZG91dDtcblx0b3V0cHV0LndyaXRlKGAke2NvbG9yLmdyYXkoU19CQVJfU1RBUlQpfSAgJHt0aXRsZX1cXG5gKTtcbn07XG5cbmV4cG9ydCBjb25zdCBvdXRybyA9IChtZXNzYWdlID0gJycsIG9wdHM/OiBDb21tb25PcHRpb25zKSA9PiB7XG5cdGNvbnN0IG91dHB1dDogV3JpdGFibGUgPSBvcHRzPy5vdXRwdXQgPz8gcHJvY2Vzcy5zdGRvdXQ7XG5cdG91dHB1dC53cml0ZShgJHtjb2xvci5ncmF5KFNfQkFSKX1cXG4ke2NvbG9yLmdyYXkoU19CQVJfRU5EKX0gICR7bWVzc2FnZX1cXG5cXG5gKTtcbn07XG4iLCAiaW1wb3J0IHsgTXVsdGlTZWxlY3RQcm9tcHQsIHdyYXBUZXh0V2l0aFByZWZpeCB9IGZyb20gJ0BjbGFjay9jb3JlJztcbmltcG9ydCBjb2xvciBmcm9tICdwaWNvY29sb3JzJztcbmltcG9ydCB7XG5cdHR5cGUgQ29tbW9uT3B0aW9ucyxcblx0U19CQVIsXG5cdFNfQkFSX0VORCxcblx0U19DSEVDS0JPWF9BQ1RJVkUsXG5cdFNfQ0hFQ0tCT1hfSU5BQ1RJVkUsXG5cdFNfQ0hFQ0tCT1hfU0VMRUNURUQsXG5cdHN5bWJvbCxcblx0c3ltYm9sQmFyLFxufSBmcm9tICcuL2NvbW1vbi5qcyc7XG5pbXBvcnQgeyBsaW1pdE9wdGlvbnMgfSBmcm9tICcuL2xpbWl0LW9wdGlvbnMuanMnO1xuaW1wb3J0IHR5cGUgeyBPcHRpb24gfSBmcm9tICcuL3NlbGVjdC5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTXVsdGlTZWxlY3RPcHRpb25zPFZhbHVlPiBleHRlbmRzIENvbW1vbk9wdGlvbnMge1xuXHRtZXNzYWdlOiBzdHJpbmc7XG5cdG9wdGlvbnM6IE9wdGlvbjxWYWx1ZT5bXTtcblx0aW5pdGlhbFZhbHVlcz86IFZhbHVlW107XG5cdG1heEl0ZW1zPzogbnVtYmVyO1xuXHRyZXF1aXJlZD86IGJvb2xlYW47XG5cdGN1cnNvckF0PzogVmFsdWU7XG59XG5jb25zdCBjb21wdXRlTGFiZWwgPSAobGFiZWw6IHN0cmluZywgZm9ybWF0OiAodGV4dDogc3RyaW5nKSA9PiBzdHJpbmcpID0+IHtcblx0cmV0dXJuIGxhYmVsXG5cdFx0LnNwbGl0KCdcXG4nKVxuXHRcdC5tYXAoKGxpbmUpID0+IGZvcm1hdChsaW5lKSlcblx0XHQuam9pbignXFxuJyk7XG59O1xuXG5leHBvcnQgY29uc3QgbXVsdGlzZWxlY3QgPSA8VmFsdWU+KG9wdHM6IE11bHRpU2VsZWN0T3B0aW9uczxWYWx1ZT4pID0+IHtcblx0Y29uc3Qgb3B0ID0gKFxuXHRcdG9wdGlvbjogT3B0aW9uPFZhbHVlPixcblx0XHRzdGF0ZTpcblx0XHRcdHwgJ2luYWN0aXZlJ1xuXHRcdFx0fCAnYWN0aXZlJ1xuXHRcdFx0fCAnc2VsZWN0ZWQnXG5cdFx0XHR8ICdhY3RpdmUtc2VsZWN0ZWQnXG5cdFx0XHR8ICdzdWJtaXR0ZWQnXG5cdFx0XHR8ICdjYW5jZWxsZWQnXG5cdFx0XHR8ICdkaXNhYmxlZCdcblx0KSA9PiB7XG5cdFx0Y29uc3QgbGFiZWwgPSBvcHRpb24ubGFiZWwgPz8gU3RyaW5nKG9wdGlvbi52YWx1ZSk7XG5cdFx0aWYgKHN0YXRlID09PSAnZGlzYWJsZWQnKSB7XG5cdFx0XHRyZXR1cm4gYCR7Y29sb3IuZ3JheShTX0NIRUNLQk9YX0lOQUNUSVZFKX0gJHtjb21wdXRlTGFiZWwobGFiZWwsIChzdHIpID0+IGNvbG9yLnN0cmlrZXRocm91Z2goY29sb3IuZ3JheShzdHIpKSl9JHtcblx0XHRcdFx0b3B0aW9uLmhpbnQgPyBgICR7Y29sb3IuZGltKGAoJHtvcHRpb24uaGludCA/PyAnZGlzYWJsZWQnfSlgKX1gIDogJydcblx0XHRcdH1gO1xuXHRcdH1cblx0XHRpZiAoc3RhdGUgPT09ICdhY3RpdmUnKSB7XG5cdFx0XHRyZXR1cm4gYCR7Y29sb3IuY3lhbihTX0NIRUNLQk9YX0FDVElWRSl9ICR7bGFiZWx9JHtcblx0XHRcdFx0b3B0aW9uLmhpbnQgPyBgICR7Y29sb3IuZGltKGAoJHtvcHRpb24uaGludH0pYCl9YCA6ICcnXG5cdFx0XHR9YDtcblx0XHR9XG5cdFx0aWYgKHN0YXRlID09PSAnc2VsZWN0ZWQnKSB7XG5cdFx0XHRyZXR1cm4gYCR7Y29sb3IuZ3JlZW4oU19DSEVDS0JPWF9TRUxFQ1RFRCl9ICR7Y29tcHV0ZUxhYmVsKGxhYmVsLCBjb2xvci5kaW0pfSR7XG5cdFx0XHRcdG9wdGlvbi5oaW50ID8gYCAke2NvbG9yLmRpbShgKCR7b3B0aW9uLmhpbnR9KWApfWAgOiAnJ1xuXHRcdFx0fWA7XG5cdFx0fVxuXHRcdGlmIChzdGF0ZSA9PT0gJ2NhbmNlbGxlZCcpIHtcblx0XHRcdHJldHVybiBgJHtjb21wdXRlTGFiZWwobGFiZWwsICh0ZXh0KSA9PiBjb2xvci5zdHJpa2V0aHJvdWdoKGNvbG9yLmRpbSh0ZXh0KSkpfWA7XG5cdFx0fVxuXHRcdGlmIChzdGF0ZSA9PT0gJ2FjdGl2ZS1zZWxlY3RlZCcpIHtcblx0XHRcdHJldHVybiBgJHtjb2xvci5ncmVlbihTX0NIRUNLQk9YX1NFTEVDVEVEKX0gJHtsYWJlbH0ke1xuXHRcdFx0XHRvcHRpb24uaGludCA/IGAgJHtjb2xvci5kaW0oYCgke29wdGlvbi5oaW50fSlgKX1gIDogJydcblx0XHRcdH1gO1xuXHRcdH1cblx0XHRpZiAoc3RhdGUgPT09ICdzdWJtaXR0ZWQnKSB7XG5cdFx0XHRyZXR1cm4gYCR7Y29tcHV0ZUxhYmVsKGxhYmVsLCBjb2xvci5kaW0pfWA7XG5cdFx0fVxuXHRcdHJldHVybiBgJHtjb2xvci5kaW0oU19DSEVDS0JPWF9JTkFDVElWRSl9ICR7Y29tcHV0ZUxhYmVsKGxhYmVsLCBjb2xvci5kaW0pfWA7XG5cdH07XG5cdGNvbnN0IHJlcXVpcmVkID0gb3B0cy5yZXF1aXJlZCA/PyB0cnVlO1xuXG5cdHJldHVybiBuZXcgTXVsdGlTZWxlY3RQcm9tcHQoe1xuXHRcdG9wdGlvbnM6IG9wdHMub3B0aW9ucyxcblx0XHRzaWduYWw6IG9wdHMuc2lnbmFsLFxuXHRcdGlucHV0OiBvcHRzLmlucHV0LFxuXHRcdG91dHB1dDogb3B0cy5vdXRwdXQsXG5cdFx0aW5pdGlhbFZhbHVlczogb3B0cy5pbml0aWFsVmFsdWVzLFxuXHRcdHJlcXVpcmVkLFxuXHRcdGN1cnNvckF0OiBvcHRzLmN1cnNvckF0LFxuXHRcdHZhbGlkYXRlKHNlbGVjdGVkOiBWYWx1ZVtdIHwgdW5kZWZpbmVkKSB7XG5cdFx0XHRpZiAocmVxdWlyZWQgJiYgKHNlbGVjdGVkID09PSB1bmRlZmluZWQgfHwgc2VsZWN0ZWQubGVuZ3RoID09PSAwKSlcblx0XHRcdFx0cmV0dXJuIGBQbGVhc2Ugc2VsZWN0IGF0IGxlYXN0IG9uZSBvcHRpb24uXFxuJHtjb2xvci5yZXNldChcblx0XHRcdFx0XHRjb2xvci5kaW0oXG5cdFx0XHRcdFx0XHRgUHJlc3MgJHtjb2xvci5ncmF5KGNvbG9yLmJnV2hpdGUoY29sb3IuaW52ZXJzZSgnIHNwYWNlICcpKSl9IHRvIHNlbGVjdCwgJHtjb2xvci5ncmF5KFxuXHRcdFx0XHRcdFx0XHRjb2xvci5iZ1doaXRlKGNvbG9yLmludmVyc2UoJyBlbnRlciAnKSlcblx0XHRcdFx0XHRcdCl9IHRvIHN1Ym1pdGBcblx0XHRcdFx0XHQpXG5cdFx0XHRcdCl9YDtcblx0XHR9LFxuXHRcdHJlbmRlcigpIHtcblx0XHRcdGNvbnN0IHdyYXBwZWRNZXNzYWdlID0gd3JhcFRleHRXaXRoUHJlZml4KFxuXHRcdFx0XHRvcHRzLm91dHB1dCxcblx0XHRcdFx0b3B0cy5tZXNzYWdlLFxuXHRcdFx0XHRgJHtzeW1ib2xCYXIodGhpcy5zdGF0ZSl9ICBgLFxuXHRcdFx0XHRgJHtzeW1ib2wodGhpcy5zdGF0ZSl9ICBgXG5cdFx0XHQpO1xuXHRcdFx0Y29uc3QgdGl0bGUgPSBgJHtjb2xvci5ncmF5KFNfQkFSKX1cXG4ke3dyYXBwZWRNZXNzYWdlfVxcbmA7XG5cdFx0XHRjb25zdCB2YWx1ZSA9IHRoaXMudmFsdWUgPz8gW107XG5cblx0XHRcdGNvbnN0IHN0eWxlT3B0aW9uID0gKG9wdGlvbjogT3B0aW9uPFZhbHVlPiwgYWN0aXZlOiBib29sZWFuKSA9PiB7XG5cdFx0XHRcdGlmIChvcHRpb24uZGlzYWJsZWQpIHtcblx0XHRcdFx0XHRyZXR1cm4gb3B0KG9wdGlvbiwgJ2Rpc2FibGVkJyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3Qgc2VsZWN0ZWQgPSB2YWx1ZS5pbmNsdWRlcyhvcHRpb24udmFsdWUpO1xuXHRcdFx0XHRpZiAoYWN0aXZlICYmIHNlbGVjdGVkKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9wdChvcHRpb24sICdhY3RpdmUtc2VsZWN0ZWQnKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoc2VsZWN0ZWQpIHtcblx0XHRcdFx0XHRyZXR1cm4gb3B0KG9wdGlvbiwgJ3NlbGVjdGVkJyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIG9wdChvcHRpb24sIGFjdGl2ZSA/ICdhY3RpdmUnIDogJ2luYWN0aXZlJyk7XG5cdFx0XHR9O1xuXG5cdFx0XHRzd2l0Y2ggKHRoaXMuc3RhdGUpIHtcblx0XHRcdFx0Y2FzZSAnc3VibWl0Jzoge1xuXHRcdFx0XHRcdGNvbnN0IHN1Ym1pdFRleHQgPVxuXHRcdFx0XHRcdFx0dGhpcy5vcHRpb25zXG5cdFx0XHRcdFx0XHRcdC5maWx0ZXIoKHsgdmFsdWU6IG9wdGlvblZhbHVlIH0pID0+IHZhbHVlLmluY2x1ZGVzKG9wdGlvblZhbHVlKSlcblx0XHRcdFx0XHRcdFx0Lm1hcCgob3B0aW9uKSA9PiBvcHQob3B0aW9uLCAnc3VibWl0dGVkJykpXG5cdFx0XHRcdFx0XHRcdC5qb2luKGNvbG9yLmRpbSgnLCAnKSkgfHwgY29sb3IuZGltKCdub25lJyk7XG5cdFx0XHRcdFx0Y29uc3Qgd3JhcHBlZFN1Ym1pdFRleHQgPSB3cmFwVGV4dFdpdGhQcmVmaXgoXG5cdFx0XHRcdFx0XHRvcHRzLm91dHB1dCxcblx0XHRcdFx0XHRcdHN1Ym1pdFRleHQsXG5cdFx0XHRcdFx0XHRgJHtjb2xvci5ncmF5KFNfQkFSKX0gIGBcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdHJldHVybiBgJHt0aXRsZX0ke3dyYXBwZWRTdWJtaXRUZXh0fWA7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y2FzZSAnY2FuY2VsJzoge1xuXHRcdFx0XHRcdGNvbnN0IGxhYmVsID0gdGhpcy5vcHRpb25zXG5cdFx0XHRcdFx0XHQuZmlsdGVyKCh7IHZhbHVlOiBvcHRpb25WYWx1ZSB9KSA9PiB2YWx1ZS5pbmNsdWRlcyhvcHRpb25WYWx1ZSkpXG5cdFx0XHRcdFx0XHQubWFwKChvcHRpb24pID0+IG9wdChvcHRpb24sICdjYW5jZWxsZWQnKSlcblx0XHRcdFx0XHRcdC5qb2luKGNvbG9yLmRpbSgnLCAnKSk7XG5cdFx0XHRcdFx0aWYgKGxhYmVsLnRyaW0oKSA9PT0gJycpIHtcblx0XHRcdFx0XHRcdHJldHVybiBgJHt0aXRsZX0ke2NvbG9yLmdyYXkoU19CQVIpfWA7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNvbnN0IHdyYXBwZWRMYWJlbCA9IHdyYXBUZXh0V2l0aFByZWZpeChvcHRzLm91dHB1dCwgbGFiZWwsIGAke2NvbG9yLmdyYXkoU19CQVIpfSAgYCk7XG5cdFx0XHRcdFx0cmV0dXJuIGAke3RpdGxlfSR7d3JhcHBlZExhYmVsfVxcbiR7Y29sb3IuZ3JheShTX0JBUil9YDtcblx0XHRcdFx0fVxuXHRcdFx0XHRjYXNlICdlcnJvcic6IHtcblx0XHRcdFx0XHRjb25zdCBwcmVmaXggPSBgJHtjb2xvci55ZWxsb3coU19CQVIpfSAgYDtcblx0XHRcdFx0XHRjb25zdCBmb290ZXIgPSB0aGlzLmVycm9yXG5cdFx0XHRcdFx0XHQuc3BsaXQoJ1xcbicpXG5cdFx0XHRcdFx0XHQubWFwKChsbiwgaSkgPT5cblx0XHRcdFx0XHRcdFx0aSA9PT0gMCA/IGAke2NvbG9yLnllbGxvdyhTX0JBUl9FTkQpfSAgJHtjb2xvci55ZWxsb3cobG4pfWAgOiBgICAgJHtsbn1gXG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHQuam9pbignXFxuJyk7XG5cdFx0XHRcdFx0Ly8gQ2FsY3VsYXRlIHJvd1BhZGRpbmc6IHRpdGxlIGxpbmVzICsgZm9vdGVyIGxpbmVzIChlcnJvciBtZXNzYWdlICsgdHJhaWxpbmcgbmV3bGluZSlcblx0XHRcdFx0XHRjb25zdCB0aXRsZUxpbmVDb3VudCA9IHRpdGxlLnNwbGl0KCdcXG4nKS5sZW5ndGg7XG5cdFx0XHRcdFx0Y29uc3QgZm9vdGVyTGluZUNvdW50ID0gZm9vdGVyLnNwbGl0KCdcXG4nKS5sZW5ndGggKyAxOyAvLyBmb290ZXIgKyB0cmFpbGluZyBuZXdsaW5lXG5cdFx0XHRcdFx0cmV0dXJuIGAke3RpdGxlfSR7cHJlZml4fSR7bGltaXRPcHRpb25zKHtcblx0XHRcdFx0XHRcdG91dHB1dDogb3B0cy5vdXRwdXQsXG5cdFx0XHRcdFx0XHRvcHRpb25zOiB0aGlzLm9wdGlvbnMsXG5cdFx0XHRcdFx0XHRjdXJzb3I6IHRoaXMuY3Vyc29yLFxuXHRcdFx0XHRcdFx0bWF4SXRlbXM6IG9wdHMubWF4SXRlbXMsXG5cdFx0XHRcdFx0XHRjb2x1bW5QYWRkaW5nOiBwcmVmaXgubGVuZ3RoLFxuXHRcdFx0XHRcdFx0cm93UGFkZGluZzogdGl0bGVMaW5lQ291bnQgKyBmb290ZXJMaW5lQ291bnQsXG5cdFx0XHRcdFx0XHRzdHlsZTogc3R5bGVPcHRpb24sXG5cdFx0XHRcdFx0fSkuam9pbihgXFxuJHtwcmVmaXh9YCl9XFxuJHtmb290ZXJ9XFxuYDtcblx0XHRcdFx0fVxuXHRcdFx0XHRkZWZhdWx0OiB7XG5cdFx0XHRcdFx0Y29uc3QgcHJlZml4ID0gYCR7Y29sb3IuY3lhbihTX0JBUil9ICBgO1xuXHRcdFx0XHRcdC8vIENhbGN1bGF0ZSByb3dQYWRkaW5nOiB0aXRsZSBsaW5lcyArIGZvb3RlciBsaW5lcyAoU19CQVJfRU5EICsgdHJhaWxpbmcgbmV3bGluZSlcblx0XHRcdFx0XHRjb25zdCB0aXRsZUxpbmVDb3VudCA9IHRpdGxlLnNwbGl0KCdcXG4nKS5sZW5ndGg7XG5cdFx0XHRcdFx0Y29uc3QgZm9vdGVyTGluZUNvdW50ID0gMjsgLy8gU19CQVJfRU5EICsgdHJhaWxpbmcgbmV3bGluZVxuXHRcdFx0XHRcdHJldHVybiBgJHt0aXRsZX0ke3ByZWZpeH0ke2xpbWl0T3B0aW9ucyh7XG5cdFx0XHRcdFx0XHRvdXRwdXQ6IG9wdHMub3V0cHV0LFxuXHRcdFx0XHRcdFx0b3B0aW9uczogdGhpcy5vcHRpb25zLFxuXHRcdFx0XHRcdFx0Y3Vyc29yOiB0aGlzLmN1cnNvcixcblx0XHRcdFx0XHRcdG1heEl0ZW1zOiBvcHRzLm1heEl0ZW1zLFxuXHRcdFx0XHRcdFx0Y29sdW1uUGFkZGluZzogcHJlZml4Lmxlbmd0aCxcblx0XHRcdFx0XHRcdHJvd1BhZGRpbmc6IHRpdGxlTGluZUNvdW50ICsgZm9vdGVyTGluZUNvdW50LFxuXHRcdFx0XHRcdFx0c3R5bGU6IHN0eWxlT3B0aW9uLFxuXHRcdFx0XHRcdH0pLmpvaW4oYFxcbiR7cHJlZml4fWApfVxcbiR7Y29sb3IuY3lhbihTX0JBUl9FTkQpfVxcbmA7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHR9KS5wcm9tcHQoKSBhcyBQcm9taXNlPFZhbHVlW10gfCBzeW1ib2w+O1xufTtcbiIsICJpbXBvcnQgcHJvY2VzcyBmcm9tICdub2RlOnByb2Nlc3MnO1xuaW1wb3J0IHR5cGUgeyBXcml0YWJsZSB9IGZyb20gJ25vZGU6c3RyZWFtJztcbmltcG9ydCB7IGdldENvbHVtbnMsIHNldHRpbmdzIH0gZnJvbSAnQGNsYWNrL2NvcmUnO1xuaW1wb3J0IHN0cmluZ1dpZHRoIGZyb20gJ2Zhc3Qtc3RyaW5nLXdpZHRoJztcbmltcG9ydCB7IHR5cGUgT3B0aW9ucyBhcyBXcmFwQW5zaU9wdGlvbnMsIHdyYXBBbnNpIH0gZnJvbSAnZmFzdC13cmFwLWFuc2knO1xuaW1wb3J0IGNvbG9yIGZyb20gJ3BpY29jb2xvcnMnO1xuaW1wb3J0IHtcblx0dHlwZSBDb21tb25PcHRpb25zLFxuXHRTX0JBUixcblx0U19CQVJfSCxcblx0U19DT05ORUNUX0xFRlQsXG5cdFNfQ09STkVSX0JPVFRPTV9MRUZULFxuXHRTX0NPUk5FUl9CT1RUT01fUklHSFQsXG5cdFNfQ09STkVSX1RPUF9SSUdIVCxcblx0U19TVEVQX1NVQk1JVCxcbn0gZnJvbSAnLi9jb21tb24uanMnO1xuXG50eXBlIEZvcm1hdEZuID0gKGxpbmU6IHN0cmluZykgPT4gc3RyaW5nO1xuZXhwb3J0IGludGVyZmFjZSBOb3RlT3B0aW9ucyBleHRlbmRzIENvbW1vbk9wdGlvbnMge1xuXHRmb3JtYXQ/OiBGb3JtYXRGbjtcbn1cblxuY29uc3QgZGVmYXVsdE5vdGVGb3JtYXR0ZXIgPSAobGluZTogc3RyaW5nKTogc3RyaW5nID0+IGNvbG9yLmRpbShsaW5lKTtcblxuY29uc3Qgd3JhcFdpdGhGb3JtYXQgPSAobWVzc2FnZTogc3RyaW5nLCB3aWR0aDogbnVtYmVyLCBmb3JtYXQ6IEZvcm1hdEZuKTogc3RyaW5nID0+IHtcblx0Y29uc3Qgb3B0czogV3JhcEFuc2lPcHRpb25zID0ge1xuXHRcdGhhcmQ6IHRydWUsXG5cdFx0dHJpbTogZmFsc2UsXG5cdH07XG5cdGNvbnN0IHdyYXBNc2cgPSB3cmFwQW5zaShtZXNzYWdlLCB3aWR0aCwgb3B0cykuc3BsaXQoJ1xcbicpO1xuXHRjb25zdCBtYXhXaWR0aE5vcm1hbCA9IHdyYXBNc2cucmVkdWNlKChzdW0sIGxuKSA9PiBNYXRoLm1heChzdHJpbmdXaWR0aChsbiksIHN1bSksIDApO1xuXHRjb25zdCBtYXhXaWR0aEZvcm1hdCA9IHdyYXBNc2cubWFwKGZvcm1hdCkucmVkdWNlKChzdW0sIGxuKSA9PiBNYXRoLm1heChzdHJpbmdXaWR0aChsbiksIHN1bSksIDApO1xuXHRjb25zdCB3cmFwV2lkdGggPSB3aWR0aCAtIChtYXhXaWR0aEZvcm1hdCAtIG1heFdpZHRoTm9ybWFsKTtcblx0cmV0dXJuIHdyYXBBbnNpKG1lc3NhZ2UsIHdyYXBXaWR0aCwgb3B0cyk7XG59O1xuXG5leHBvcnQgY29uc3Qgbm90ZSA9IChtZXNzYWdlID0gJycsIHRpdGxlID0gJycsIG9wdHM/OiBOb3RlT3B0aW9ucykgPT4ge1xuXHRjb25zdCBvdXRwdXQ6IFdyaXRhYmxlID0gb3B0cz8ub3V0cHV0ID8/IHByb2Nlc3Muc3Rkb3V0O1xuXHRjb25zdCBoYXNHdWlkZSA9IG9wdHM/LndpdGhHdWlkZSA/PyBzZXR0aW5ncy53aXRoR3VpZGU7XG5cdGNvbnN0IGZvcm1hdCA9IG9wdHM/LmZvcm1hdCA/PyBkZWZhdWx0Tm90ZUZvcm1hdHRlcjtcblx0Y29uc3Qgd3JhcE1zZyA9IHdyYXBXaXRoRm9ybWF0KG1lc3NhZ2UsIGdldENvbHVtbnMob3V0cHV0KSAtIDYsIGZvcm1hdCk7XG5cdGNvbnN0IGxpbmVzID0gWycnLCAuLi53cmFwTXNnLnNwbGl0KCdcXG4nKS5tYXAoZm9ybWF0KSwgJyddO1xuXHRjb25zdCB0aXRsZUxlbiA9IHN0cmluZ1dpZHRoKHRpdGxlKTtcblx0Y29uc3QgbGVuID1cblx0XHRNYXRoLm1heChcblx0XHRcdGxpbmVzLnJlZHVjZSgoc3VtLCBsbikgPT4ge1xuXHRcdFx0XHRjb25zdCB3aWR0aCA9IHN0cmluZ1dpZHRoKGxuKTtcblx0XHRcdFx0cmV0dXJuIHdpZHRoID4gc3VtID8gd2lkdGggOiBzdW07XG5cdFx0XHR9LCAwKSxcblx0XHRcdHRpdGxlTGVuXG5cdFx0KSArIDI7XG5cdGNvbnN0IG1zZyA9IGxpbmVzXG5cdFx0Lm1hcChcblx0XHRcdChsbikgPT4gYCR7Y29sb3IuZ3JheShTX0JBUil9ICAke2xufSR7JyAnLnJlcGVhdChsZW4gLSBzdHJpbmdXaWR0aChsbikpfSR7Y29sb3IuZ3JheShTX0JBUil9YFxuXHRcdClcblx0XHQuam9pbignXFxuJyk7XG5cdGNvbnN0IGxlYWRpbmdCb3JkZXIgPSBoYXNHdWlkZSA/IGAke2NvbG9yLmdyYXkoU19CQVIpfVxcbmAgOiAnJztcblx0Y29uc3QgYm90dG9tTGVmdCA9IGhhc0d1aWRlID8gU19DT05ORUNUX0xFRlQgOiBTX0NPUk5FUl9CT1RUT01fTEVGVDtcblx0b3V0cHV0LndyaXRlKFxuXHRcdGAke2xlYWRpbmdCb3JkZXJ9JHtjb2xvci5ncmVlbihTX1NURVBfU1VCTUlUKX0gICR7Y29sb3IucmVzZXQodGl0bGUpfSAke2NvbG9yLmdyYXkoXG5cdFx0XHRTX0JBUl9ILnJlcGVhdChNYXRoLm1heChsZW4gLSB0aXRsZUxlbiAtIDEsIDEpKSArIFNfQ09STkVSX1RPUF9SSUdIVFxuXHRcdCl9XFxuJHttc2d9XFxuJHtjb2xvci5ncmF5KGJvdHRvbUxlZnQgKyBTX0JBUl9ILnJlcGVhdChsZW4gKyAyKSArIFNfQ09STkVSX0JPVFRPTV9SSUdIVCl9XFxuYFxuXHQpO1xufTtcbiIsICJpbXBvcnQgeyBQYXNzd29yZFByb21wdCwgc2V0dGluZ3MgfSBmcm9tICdAY2xhY2svY29yZSc7XG5pbXBvcnQgY29sb3IgZnJvbSAncGljb2NvbG9ycyc7XG5pbXBvcnQgeyB0eXBlIENvbW1vbk9wdGlvbnMsIFNfQkFSLCBTX0JBUl9FTkQsIFNfUEFTU1dPUkRfTUFTSywgc3ltYm9sIH0gZnJvbSAnLi9jb21tb24uanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFBhc3N3b3JkT3B0aW9ucyBleHRlbmRzIENvbW1vbk9wdGlvbnMge1xuXHRtZXNzYWdlOiBzdHJpbmc7XG5cdG1hc2s/OiBzdHJpbmc7XG5cdHZhbGlkYXRlPzogKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpID0+IHN0cmluZyB8IEVycm9yIHwgdW5kZWZpbmVkO1xuXHRjbGVhck9uRXJyb3I/OiBib29sZWFuO1xufVxuZXhwb3J0IGNvbnN0IHBhc3N3b3JkID0gKG9wdHM6IFBhc3N3b3JkT3B0aW9ucykgPT4ge1xuXHRyZXR1cm4gbmV3IFBhc3N3b3JkUHJvbXB0KHtcblx0XHR2YWxpZGF0ZTogb3B0cy52YWxpZGF0ZSxcblx0XHRtYXNrOiBvcHRzLm1hc2sgPz8gU19QQVNTV09SRF9NQVNLLFxuXHRcdHNpZ25hbDogb3B0cy5zaWduYWwsXG5cdFx0aW5wdXQ6IG9wdHMuaW5wdXQsXG5cdFx0b3V0cHV0OiBvcHRzLm91dHB1dCxcblx0XHRyZW5kZXIoKSB7XG5cdFx0XHRjb25zdCBoYXNHdWlkZSA9IG9wdHMud2l0aEd1aWRlID8/IHNldHRpbmdzLndpdGhHdWlkZTtcblx0XHRcdGNvbnN0IHRpdGxlID0gYCR7aGFzR3VpZGUgPyBgJHtjb2xvci5ncmF5KFNfQkFSKX1cXG5gIDogJyd9JHtzeW1ib2wodGhpcy5zdGF0ZSl9ICAke29wdHMubWVzc2FnZX1cXG5gO1xuXHRcdFx0Y29uc3QgdXNlcklucHV0ID0gdGhpcy51c2VySW5wdXRXaXRoQ3Vyc29yO1xuXHRcdFx0Y29uc3QgbWFza2VkID0gdGhpcy5tYXNrZWQ7XG5cblx0XHRcdHN3aXRjaCAodGhpcy5zdGF0ZSkge1xuXHRcdFx0XHRjYXNlICdlcnJvcic6IHtcblx0XHRcdFx0XHRjb25zdCBlcnJvclByZWZpeCA9IGhhc0d1aWRlID8gYCR7Y29sb3IueWVsbG93KFNfQkFSKX0gIGAgOiAnJztcblx0XHRcdFx0XHRjb25zdCBlcnJvclByZWZpeEVuZCA9IGhhc0d1aWRlID8gYCR7Y29sb3IueWVsbG93KFNfQkFSX0VORCl9ICBgIDogJyc7XG5cdFx0XHRcdFx0Y29uc3QgbWFza2VkVGV4dCA9IG1hc2tlZCA/PyAnJztcblx0XHRcdFx0XHRpZiAob3B0cy5jbGVhck9uRXJyb3IpIHtcblx0XHRcdFx0XHRcdHRoaXMuY2xlYXIoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIGAke3RpdGxlLnRyaW0oKX1cXG4ke2Vycm9yUHJlZml4fSR7bWFza2VkVGV4dH1cXG4ke2Vycm9yUHJlZml4RW5kfSR7Y29sb3IueWVsbG93KHRoaXMuZXJyb3IpfVxcbmA7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y2FzZSAnc3VibWl0Jzoge1xuXHRcdFx0XHRcdGNvbnN0IHN1Ym1pdFByZWZpeCA9IGhhc0d1aWRlID8gYCR7Y29sb3IuZ3JheShTX0JBUil9ICBgIDogJyc7XG5cdFx0XHRcdFx0Y29uc3QgbWFza2VkVGV4dCA9IG1hc2tlZCA/IGNvbG9yLmRpbShtYXNrZWQpIDogJyc7XG5cdFx0XHRcdFx0cmV0dXJuIGAke3RpdGxlfSR7c3VibWl0UHJlZml4fSR7bWFza2VkVGV4dH1gO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNhc2UgJ2NhbmNlbCc6IHtcblx0XHRcdFx0XHRjb25zdCBjYW5jZWxQcmVmaXggPSBoYXNHdWlkZSA/IGAke2NvbG9yLmdyYXkoU19CQVIpfSAgYCA6ICcnO1xuXHRcdFx0XHRcdGNvbnN0IG1hc2tlZFRleHQgPSBtYXNrZWQgPyBjb2xvci5zdHJpa2V0aHJvdWdoKGNvbG9yLmRpbShtYXNrZWQpKSA6ICcnO1xuXHRcdFx0XHRcdHJldHVybiBgJHt0aXRsZX0ke2NhbmNlbFByZWZpeH0ke21hc2tlZFRleHR9JHtcblx0XHRcdFx0XHRcdG1hc2tlZCAmJiBoYXNHdWlkZSA/IGBcXG4ke2NvbG9yLmdyYXkoU19CQVIpfWAgOiAnJ1xuXHRcdFx0XHRcdH1gO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGRlZmF1bHQ6IHtcblx0XHRcdFx0XHRjb25zdCBkZWZhdWx0UHJlZml4ID0gaGFzR3VpZGUgPyBgJHtjb2xvci5jeWFuKFNfQkFSKX0gIGAgOiAnJztcblx0XHRcdFx0XHRjb25zdCBkZWZhdWx0UHJlZml4RW5kID0gaGFzR3VpZGUgPyBjb2xvci5jeWFuKFNfQkFSX0VORCkgOiAnJztcblx0XHRcdFx0XHRyZXR1cm4gYCR7dGl0bGV9JHtkZWZhdWx0UHJlZml4fSR7dXNlcklucHV0fVxcbiR7ZGVmYXVsdFByZWZpeEVuZH1cXG5gO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblx0fSkucHJvbXB0KCkgYXMgUHJvbWlzZTxzdHJpbmcgfCBzeW1ib2w+O1xufTtcbiIsICJpbXBvcnQgeyBleGlzdHNTeW5jLCBsc3RhdFN5bmMsIHJlYWRkaXJTeW5jIH0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgeyBkaXJuYW1lLCBqb2luIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IGF1dG9jb21wbGV0ZSB9IGZyb20gJy4vYXV0b2NvbXBsZXRlLmpzJztcbmltcG9ydCB0eXBlIHsgQ29tbW9uT3B0aW9ucyB9IGZyb20gJy4vY29tbW9uLmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBQYXRoT3B0aW9ucyBleHRlbmRzIENvbW1vbk9wdGlvbnMge1xuXHRyb290Pzogc3RyaW5nO1xuXHRkaXJlY3Rvcnk/OiBib29sZWFuO1xuXHRpbml0aWFsVmFsdWU/OiBzdHJpbmc7XG5cdG1lc3NhZ2U6IHN0cmluZztcblx0dmFsaWRhdGU/OiAodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkgPT4gc3RyaW5nIHwgRXJyb3IgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBjb25zdCBwYXRoID0gKG9wdHM6IFBhdGhPcHRpb25zKSA9PiB7XG5cdGNvbnN0IHZhbGlkYXRlID0gb3B0cy52YWxpZGF0ZTtcblxuXHRyZXR1cm4gYXV0b2NvbXBsZXRlKHtcblx0XHQuLi5vcHRzLFxuXHRcdGluaXRpYWxVc2VySW5wdXQ6IG9wdHMuaW5pdGlhbFZhbHVlID8/IG9wdHMucm9vdCA/PyBwcm9jZXNzLmN3ZCgpLFxuXHRcdG1heEl0ZW1zOiA1LFxuXHRcdHZhbGlkYXRlKHZhbHVlKSB7XG5cdFx0XHRpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcblx0XHRcdFx0Ly8gU2hvdWxkbid0IGV2ZXIgaGFwcGVuIHNpbmNlIHdlIGRvbid0IGVuYWJsZSBgbXVsdGlwbGU6IHRydWVgXG5cdFx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIXZhbHVlKSB7XG5cdFx0XHRcdHJldHVybiAnUGxlYXNlIHNlbGVjdCBhIHBhdGgnO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHZhbGlkYXRlKSB7XG5cdFx0XHRcdHJldHVybiB2YWxpZGF0ZSh2YWx1ZSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH0sXG5cdFx0b3B0aW9ucygpIHtcblx0XHRcdGNvbnN0IHVzZXJJbnB1dCA9IHRoaXMudXNlcklucHV0O1xuXHRcdFx0aWYgKHVzZXJJbnB1dCA9PT0gJycpIHtcblx0XHRcdFx0cmV0dXJuIFtdO1xuXHRcdFx0fVxuXG5cdFx0XHR0cnkge1xuXHRcdFx0XHRsZXQgc2VhcmNoUGF0aDogc3RyaW5nO1xuXG5cdFx0XHRcdGlmICghZXhpc3RzU3luYyh1c2VySW5wdXQpKSB7XG5cdFx0XHRcdFx0c2VhcmNoUGF0aCA9IGRpcm5hbWUodXNlcklucHV0KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjb25zdCBzdGF0ID0gbHN0YXRTeW5jKHVzZXJJbnB1dCk7XG5cdFx0XHRcdFx0aWYgKHN0YXQuaXNEaXJlY3RvcnkoKSkge1xuXHRcdFx0XHRcdFx0c2VhcmNoUGF0aCA9IHVzZXJJbnB1dDtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0c2VhcmNoUGF0aCA9IGRpcm5hbWUodXNlcklucHV0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCBpdGVtcyA9IHJlYWRkaXJTeW5jKHNlYXJjaFBhdGgpXG5cdFx0XHRcdFx0Lm1hcCgoaXRlbSkgPT4ge1xuXHRcdFx0XHRcdFx0Y29uc3QgcGF0aCA9IGpvaW4oc2VhcmNoUGF0aCwgaXRlbSk7XG5cdFx0XHRcdFx0XHRjb25zdCBzdGF0cyA9IGxzdGF0U3luYyhwYXRoKTtcblx0XHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRcdG5hbWU6IGl0ZW0sXG5cdFx0XHRcdFx0XHRcdHBhdGgsXG5cdFx0XHRcdFx0XHRcdGlzRGlyZWN0b3J5OiBzdGF0cy5pc0RpcmVjdG9yeSgpLFxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5maWx0ZXIoXG5cdFx0XHRcdFx0XHQoeyBwYXRoLCBpc0RpcmVjdG9yeSB9KSA9PlxuXHRcdFx0XHRcdFx0XHRwYXRoLnN0YXJ0c1dpdGgodXNlcklucHV0KSAmJiAob3B0cy5kaXJlY3RvcnkgfHwgIWlzRGlyZWN0b3J5KVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdHJldHVybiBpdGVtcy5tYXAoKGl0ZW0pID0+ICh7XG5cdFx0XHRcdFx0dmFsdWU6IGl0ZW0ucGF0aCxcblx0XHRcdFx0fSkpO1xuXHRcdFx0fSBjYXRjaCAoX2UpIHtcblx0XHRcdFx0cmV0dXJuIFtdO1xuXHRcdFx0fVxuXHRcdH0sXG5cdH0pO1xufTtcbiIsICJpbXBvcnQgeyBibG9jaywgZ2V0Q29sdW1ucywgc2V0dGluZ3MgfSBmcm9tICdAY2xhY2svY29yZSc7XG5pbXBvcnQgeyB3cmFwQW5zaSB9IGZyb20gJ2Zhc3Qtd3JhcC1hbnNpJztcbmltcG9ydCBjb2xvciBmcm9tICdwaWNvY29sb3JzJztcbmltcG9ydCB7IGN1cnNvciwgZXJhc2UgfSBmcm9tICdzaXN0ZXJhbnNpJztcbmltcG9ydCB7XG5cdHR5cGUgQ29tbW9uT3B0aW9ucyxcblx0aXNDSSBhcyBpc0NJRm4sXG5cdFNfQkFSLFxuXHRTX1NURVBfQ0FOQ0VMLFxuXHRTX1NURVBfRVJST1IsXG5cdFNfU1RFUF9TVUJNSVQsXG5cdHVuaWNvZGUsXG59IGZyb20gJy4vY29tbW9uLmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBTcGlubmVyT3B0aW9ucyBleHRlbmRzIENvbW1vbk9wdGlvbnMge1xuXHRpbmRpY2F0b3I/OiAnZG90cycgfCAndGltZXInO1xuXHRvbkNhbmNlbD86ICgpID0+IHZvaWQ7XG5cdGNhbmNlbE1lc3NhZ2U/OiBzdHJpbmc7XG5cdGVycm9yTWVzc2FnZT86IHN0cmluZztcblx0ZnJhbWVzPzogc3RyaW5nW107XG5cdGRlbGF5PzogbnVtYmVyO1xuXHRzdHlsZUZyYW1lPzogKGZyYW1lOiBzdHJpbmcpID0+IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTcGlubmVyUmVzdWx0IHtcblx0c3RhcnQobXNnPzogc3RyaW5nKTogdm9pZDtcblx0c3RvcChtc2c/OiBzdHJpbmcpOiB2b2lkO1xuXHRjYW5jZWwobXNnPzogc3RyaW5nKTogdm9pZDtcblx0ZXJyb3IobXNnPzogc3RyaW5nKTogdm9pZDtcblx0bWVzc2FnZShtc2c/OiBzdHJpbmcpOiB2b2lkO1xuXHRjbGVhcigpOiB2b2lkO1xuXHRyZWFkb25seSBpc0NhbmNlbGxlZDogYm9vbGVhbjtcbn1cblxuY29uc3QgZGVmYXVsdFN0eWxlRm46IFNwaW5uZXJPcHRpb25zWydzdHlsZUZyYW1lJ10gPSBjb2xvci5tYWdlbnRhO1xuXG5leHBvcnQgY29uc3Qgc3Bpbm5lciA9ICh7XG5cdGluZGljYXRvciA9ICdkb3RzJyxcblx0b25DYW5jZWwsXG5cdG91dHB1dCA9IHByb2Nlc3Muc3Rkb3V0LFxuXHRjYW5jZWxNZXNzYWdlLFxuXHRlcnJvck1lc3NhZ2UsXG5cdGZyYW1lcyA9IHVuaWNvZGUgPyBbJ+KXkicsICfil5AnLCAn4peTJywgJ+KXkSddIDogWyfigKInLCAnbycsICdPJywgJzAnXSxcblx0ZGVsYXkgPSB1bmljb2RlID8gODAgOiAxMjAsXG5cdHNpZ25hbCxcblx0Li4ub3B0c1xufTogU3Bpbm5lck9wdGlvbnMgPSB7fSk6IFNwaW5uZXJSZXN1bHQgPT4ge1xuXHRjb25zdCBpc0NJID0gaXNDSUZuKCk7XG5cblx0bGV0IHVuYmxvY2s6ICgpID0+IHZvaWQ7XG5cdGxldCBsb29wOiBOb2RlSlMuVGltZW91dDtcblx0bGV0IGlzU3Bpbm5lckFjdGl2ZSA9IGZhbHNlO1xuXHRsZXQgaXNDYW5jZWxsZWQgPSBmYWxzZTtcblx0bGV0IF9tZXNzYWdlID0gJyc7XG5cdGxldCBfcHJldk1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0bGV0IF9vcmlnaW46IG51bWJlciA9IHBlcmZvcm1hbmNlLm5vdygpO1xuXHRjb25zdCBjb2x1bW5zID0gZ2V0Q29sdW1ucyhvdXRwdXQpO1xuXHRjb25zdCBzdHlsZUZuID0gb3B0cz8uc3R5bGVGcmFtZSA/PyBkZWZhdWx0U3R5bGVGbjtcblxuXHRjb25zdCBoYW5kbGVFeGl0ID0gKGNvZGU6IG51bWJlcikgPT4ge1xuXHRcdGNvbnN0IG1zZyA9XG5cdFx0XHRjb2RlID4gMVxuXHRcdFx0XHQ/IChlcnJvck1lc3NhZ2UgPz8gc2V0dGluZ3MubWVzc2FnZXMuZXJyb3IpXG5cdFx0XHRcdDogKGNhbmNlbE1lc3NhZ2UgPz8gc2V0dGluZ3MubWVzc2FnZXMuY2FuY2VsKTtcblx0XHRpc0NhbmNlbGxlZCA9IGNvZGUgPT09IDE7XG5cdFx0aWYgKGlzU3Bpbm5lckFjdGl2ZSkge1xuXHRcdFx0X3N0b3AobXNnLCBjb2RlKTtcblx0XHRcdGlmIChpc0NhbmNlbGxlZCAmJiB0eXBlb2Ygb25DYW5jZWwgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0b25DYW5jZWwoKTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0Y29uc3QgZXJyb3JFdmVudEhhbmRsZXIgPSAoKSA9PiBoYW5kbGVFeGl0KDIpO1xuXHRjb25zdCBzaWduYWxFdmVudEhhbmRsZXIgPSAoKSA9PiBoYW5kbGVFeGl0KDEpO1xuXG5cdGNvbnN0IHJlZ2lzdGVySG9va3MgPSAoKSA9PiB7XG5cdFx0Ly8gUmVmZXJlbmNlOiBodHRwczovL25vZGVqcy5vcmcvYXBpL3Byb2Nlc3MuaHRtbCNldmVudC11bmNhdWdodGV4Y2VwdGlvblxuXHRcdHByb2Nlc3Mub24oJ3VuY2F1Z2h0RXhjZXB0aW9uTW9uaXRvcicsIGVycm9yRXZlbnRIYW5kbGVyKTtcblx0XHQvLyBSZWZlcmVuY2U6IGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvcHJvY2Vzcy5odG1sI2V2ZW50LXVuaGFuZGxlZHJlamVjdGlvblxuXHRcdHByb2Nlc3Mub24oJ3VuaGFuZGxlZFJlamVjdGlvbicsIGVycm9yRXZlbnRIYW5kbGVyKTtcblx0XHQvLyBSZWZlcmVuY2UgU2lnbmFsIEV2ZW50czogaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9wcm9jZXNzLmh0bWwjc2lnbmFsLWV2ZW50c1xuXHRcdHByb2Nlc3Mub24oJ1NJR0lOVCcsIHNpZ25hbEV2ZW50SGFuZGxlcik7XG5cdFx0cHJvY2Vzcy5vbignU0lHVEVSTScsIHNpZ25hbEV2ZW50SGFuZGxlcik7XG5cdFx0cHJvY2Vzcy5vbignZXhpdCcsIGhhbmRsZUV4aXQpO1xuXG5cdFx0aWYgKHNpZ25hbCkge1xuXHRcdFx0c2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgc2lnbmFsRXZlbnRIYW5kbGVyKTtcblx0XHR9XG5cdH07XG5cblx0Y29uc3QgY2xlYXJIb29rcyA9ICgpID0+IHtcblx0XHRwcm9jZXNzLnJlbW92ZUxpc3RlbmVyKCd1bmNhdWdodEV4Y2VwdGlvbk1vbml0b3InLCBlcnJvckV2ZW50SGFuZGxlcik7XG5cdFx0cHJvY2Vzcy5yZW1vdmVMaXN0ZW5lcigndW5oYW5kbGVkUmVqZWN0aW9uJywgZXJyb3JFdmVudEhhbmRsZXIpO1xuXHRcdHByb2Nlc3MucmVtb3ZlTGlzdGVuZXIoJ1NJR0lOVCcsIHNpZ25hbEV2ZW50SGFuZGxlcik7XG5cdFx0cHJvY2Vzcy5yZW1vdmVMaXN0ZW5lcignU0lHVEVSTScsIHNpZ25hbEV2ZW50SGFuZGxlcik7XG5cdFx0cHJvY2Vzcy5yZW1vdmVMaXN0ZW5lcignZXhpdCcsIGhhbmRsZUV4aXQpO1xuXG5cdFx0aWYgKHNpZ25hbCkge1xuXHRcdFx0c2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgc2lnbmFsRXZlbnRIYW5kbGVyKTtcblx0XHR9XG5cdH07XG5cblx0Y29uc3QgY2xlYXJQcmV2TWVzc2FnZSA9ICgpID0+IHtcblx0XHRpZiAoX3ByZXZNZXNzYWdlID09PSB1bmRlZmluZWQpIHJldHVybjtcblx0XHRpZiAoaXNDSSkgb3V0cHV0LndyaXRlKCdcXG4nKTtcblx0XHRjb25zdCB3cmFwcGVkID0gd3JhcEFuc2koX3ByZXZNZXNzYWdlLCBjb2x1bW5zLCB7XG5cdFx0XHRoYXJkOiB0cnVlLFxuXHRcdFx0dHJpbTogZmFsc2UsXG5cdFx0fSk7XG5cdFx0Y29uc3QgcHJldkxpbmVzID0gd3JhcHBlZC5zcGxpdCgnXFxuJyk7XG5cdFx0aWYgKHByZXZMaW5lcy5sZW5ndGggPiAxKSB7XG5cdFx0XHRvdXRwdXQud3JpdGUoY3Vyc29yLnVwKHByZXZMaW5lcy5sZW5ndGggLSAxKSk7XG5cdFx0fVxuXHRcdG91dHB1dC53cml0ZShjdXJzb3IudG8oMCkpO1xuXHRcdG91dHB1dC53cml0ZShlcmFzZS5kb3duKCkpO1xuXHR9O1xuXG5cdGNvbnN0IHJlbW92ZVRyYWlsaW5nRG90cyA9IChtc2c6IHN0cmluZyk6IHN0cmluZyA9PiB7XG5cdFx0cmV0dXJuIG1zZy5yZXBsYWNlKC9cXC4rJC8sICcnKTtcblx0fTtcblxuXHRjb25zdCBmb3JtYXRUaW1lciA9IChvcmlnaW46IG51bWJlcik6IHN0cmluZyA9PiB7XG5cdFx0Y29uc3QgZHVyYXRpb24gPSAocGVyZm9ybWFuY2Uubm93KCkgLSBvcmlnaW4pIC8gMTAwMDtcblx0XHRjb25zdCBtaW4gPSBNYXRoLmZsb29yKGR1cmF0aW9uIC8gNjApO1xuXHRcdGNvbnN0IHNlY3MgPSBNYXRoLmZsb29yKGR1cmF0aW9uICUgNjApO1xuXHRcdHJldHVybiBtaW4gPiAwID8gYFske21pbn1tICR7c2Vjc31zXWAgOiBgWyR7c2Vjc31zXWA7XG5cdH07XG5cblx0Y29uc3QgaGFzR3VpZGUgPSBvcHRzLndpdGhHdWlkZSA/PyBzZXR0aW5ncy53aXRoR3VpZGU7XG5cblx0Y29uc3Qgc3RhcnQgPSAobXNnID0gJycpOiB2b2lkID0+IHtcblx0XHRpc1NwaW5uZXJBY3RpdmUgPSB0cnVlO1xuXHRcdHVuYmxvY2sgPSBibG9jayh7IG91dHB1dCB9KTtcblx0XHRfbWVzc2FnZSA9IHJlbW92ZVRyYWlsaW5nRG90cyhtc2cpO1xuXHRcdF9vcmlnaW4gPSBwZXJmb3JtYW5jZS5ub3coKTtcblx0XHRpZiAoaGFzR3VpZGUpIHtcblx0XHRcdG91dHB1dC53cml0ZShgJHtjb2xvci5ncmF5KFNfQkFSKX1cXG5gKTtcblx0XHR9XG5cdFx0bGV0IGZyYW1lSW5kZXggPSAwO1xuXHRcdGxldCBpbmRpY2F0b3JUaW1lciA9IDA7XG5cdFx0cmVnaXN0ZXJIb29rcygpO1xuXHRcdGxvb3AgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG5cdFx0XHRpZiAoaXNDSSAmJiBfbWVzc2FnZSA9PT0gX3ByZXZNZXNzYWdlKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGNsZWFyUHJldk1lc3NhZ2UoKTtcblx0XHRcdF9wcmV2TWVzc2FnZSA9IF9tZXNzYWdlO1xuXHRcdFx0Y29uc3QgZnJhbWUgPSBzdHlsZUZuKGZyYW1lc1tmcmFtZUluZGV4XSk7XG5cdFx0XHRsZXQgb3V0cHV0TWVzc2FnZTogc3RyaW5nO1xuXG5cdFx0XHRpZiAoaXNDSSkge1xuXHRcdFx0XHRvdXRwdXRNZXNzYWdlID0gYCR7ZnJhbWV9ICAke19tZXNzYWdlfS4uLmA7XG5cdFx0XHR9IGVsc2UgaWYgKGluZGljYXRvciA9PT0gJ3RpbWVyJykge1xuXHRcdFx0XHRvdXRwdXRNZXNzYWdlID0gYCR7ZnJhbWV9ICAke19tZXNzYWdlfSAke2Zvcm1hdFRpbWVyKF9vcmlnaW4pfWA7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBsb2FkaW5nRG90cyA9ICcuJy5yZXBlYXQoTWF0aC5mbG9vcihpbmRpY2F0b3JUaW1lcikpLnNsaWNlKDAsIDMpO1xuXHRcdFx0XHRvdXRwdXRNZXNzYWdlID0gYCR7ZnJhbWV9ICAke19tZXNzYWdlfSR7bG9hZGluZ0RvdHN9YDtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3Qgd3JhcHBlZCA9IHdyYXBBbnNpKG91dHB1dE1lc3NhZ2UsIGNvbHVtbnMsIHtcblx0XHRcdFx0aGFyZDogdHJ1ZSxcblx0XHRcdFx0dHJpbTogZmFsc2UsXG5cdFx0XHR9KTtcblx0XHRcdG91dHB1dC53cml0ZSh3cmFwcGVkKTtcblxuXHRcdFx0ZnJhbWVJbmRleCA9IGZyYW1lSW5kZXggKyAxIDwgZnJhbWVzLmxlbmd0aCA/IGZyYW1lSW5kZXggKyAxIDogMDtcblx0XHRcdC8vIGluZGljYXRvciBpbmNyZWFzZSBieSAxIGV2ZXJ5IDggZnJhbWVzXG5cdFx0XHRpbmRpY2F0b3JUaW1lciA9IGluZGljYXRvclRpbWVyIDwgNCA/IGluZGljYXRvclRpbWVyICsgMC4xMjUgOiAwO1xuXHRcdH0sIGRlbGF5KTtcblx0fTtcblxuXHRjb25zdCBfc3RvcCA9IChtc2cgPSAnJywgY29kZSA9IDAsIHNpbGVudDogYm9vbGVhbiA9IGZhbHNlKTogdm9pZCA9PiB7XG5cdFx0aWYgKCFpc1NwaW5uZXJBY3RpdmUpIHJldHVybjtcblx0XHRpc1NwaW5uZXJBY3RpdmUgPSBmYWxzZTtcblx0XHRjbGVhckludGVydmFsKGxvb3ApO1xuXHRcdGNsZWFyUHJldk1lc3NhZ2UoKTtcblx0XHRjb25zdCBzdGVwID1cblx0XHRcdGNvZGUgPT09IDBcblx0XHRcdFx0PyBjb2xvci5ncmVlbihTX1NURVBfU1VCTUlUKVxuXHRcdFx0XHQ6IGNvZGUgPT09IDFcblx0XHRcdFx0XHQ/IGNvbG9yLnJlZChTX1NURVBfQ0FOQ0VMKVxuXHRcdFx0XHRcdDogY29sb3IucmVkKFNfU1RFUF9FUlJPUik7XG5cdFx0X21lc3NhZ2UgPSBtc2cgPz8gX21lc3NhZ2U7XG5cdFx0aWYgKCFzaWxlbnQpIHtcblx0XHRcdGlmIChpbmRpY2F0b3IgPT09ICd0aW1lcicpIHtcblx0XHRcdFx0b3V0cHV0LndyaXRlKGAke3N0ZXB9ICAke19tZXNzYWdlfSAke2Zvcm1hdFRpbWVyKF9vcmlnaW4pfVxcbmApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b3V0cHV0LndyaXRlKGAke3N0ZXB9ICAke19tZXNzYWdlfVxcbmApO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRjbGVhckhvb2tzKCk7XG5cdFx0dW5ibG9jaygpO1xuXHR9O1xuXG5cdGNvbnN0IHN0b3AgPSAobXNnID0gJycpOiB2b2lkID0+IF9zdG9wKG1zZywgMCk7XG5cdGNvbnN0IGNhbmNlbCA9IChtc2cgPSAnJyk6IHZvaWQgPT4gX3N0b3AobXNnLCAxKTtcblx0Y29uc3QgZXJyb3IgPSAobXNnID0gJycpOiB2b2lkID0+IF9zdG9wKG1zZywgMik7XG5cdC8vIFRPRE8gKDQzMDgxaik6IHRoaXMgd2lsbCBsZWF2ZSB0aGUgaW5pdGlhbCBTX0JBUiBzaW5jZSB3ZSBwdXJwb3NlbHlcblx0Ly8gZG9uJ3QgZXJhc2UgdGhhdCBpbiBgY2xlYXJQcmV2TWVzc2FnZWAuIEluIGZ1dHVyZSwgd2UgbWF5IHdhbnQgdG8gdHJlYXRcblx0Ly8gYGNsZWFyYCBhcyBhIHNwZWNpYWwgY2FzZSBhbmQgcmVtb3ZlIHRoZSBiYXIgdG9vLlxuXHRjb25zdCBjbGVhciA9ICgpOiB2b2lkID0+IF9zdG9wKCcnLCAwLCB0cnVlKTtcblxuXHRjb25zdCBtZXNzYWdlID0gKG1zZyA9ICcnKTogdm9pZCA9PiB7XG5cdFx0X21lc3NhZ2UgPSByZW1vdmVUcmFpbGluZ0RvdHMobXNnID8/IF9tZXNzYWdlKTtcblx0fTtcblxuXHRyZXR1cm4ge1xuXHRcdHN0YXJ0LFxuXHRcdHN0b3AsXG5cdFx0bWVzc2FnZSxcblx0XHRjYW5jZWwsXG5cdFx0ZXJyb3IsXG5cdFx0Y2xlYXIsXG5cdFx0Z2V0IGlzQ2FuY2VsbGVkKCkge1xuXHRcdFx0cmV0dXJuIGlzQ2FuY2VsbGVkO1xuXHRcdH0sXG5cdH07XG59O1xuIiwgImltcG9ydCB0eXBlIHsgU3RhdGUgfSBmcm9tICdAY2xhY2svY29yZSc7XG5pbXBvcnQgY29sb3IgZnJvbSAncGljb2NvbG9ycyc7XG5pbXBvcnQgeyB1bmljb2RlT3IgfSBmcm9tICcuL2NvbW1vbi5qcyc7XG5pbXBvcnQgeyB0eXBlIFNwaW5uZXJPcHRpb25zLCB0eXBlIFNwaW5uZXJSZXN1bHQsIHNwaW5uZXIgfSBmcm9tICcuL3NwaW5uZXIuanMnO1xuXG5jb25zdCBTX1BST0dSRVNTX0NIQVI6IFJlY29yZDxOb25OdWxsYWJsZTxQcm9ncmVzc09wdGlvbnNbJ3N0eWxlJ10+LCBzdHJpbmc+ID0ge1xuXHRsaWdodDogdW5pY29kZU9yKCfilIAnLCAnLScpLFxuXHRoZWF2eTogdW5pY29kZU9yKCfilIEnLCAnPScpLFxuXHRibG9jazogdW5pY29kZU9yKCfilognLCAnIycpLFxufTtcblxuZXhwb3J0IGludGVyZmFjZSBQcm9ncmVzc09wdGlvbnMgZXh0ZW5kcyBTcGlubmVyT3B0aW9ucyB7XG5cdHN0eWxlPzogJ2xpZ2h0JyB8ICdoZWF2eScgfCAnYmxvY2snO1xuXHRtYXg/OiBudW1iZXI7XG5cdHNpemU/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJvZ3Jlc3NSZXN1bHQgZXh0ZW5kcyBTcGlubmVyUmVzdWx0IHtcblx0YWR2YW5jZShzdGVwPzogbnVtYmVyLCBtc2c/OiBzdHJpbmcpOiB2b2lkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvZ3Jlc3Moe1xuXHRzdHlsZSA9ICdoZWF2eScsXG5cdG1heDogdXNlck1heCA9IDEwMCxcblx0c2l6ZTogdXNlclNpemUgPSA0MCxcblx0Li4uc3Bpbm5lck9wdGlvbnNcbn06IFByb2dyZXNzT3B0aW9ucyA9IHt9KTogUHJvZ3Jlc3NSZXN1bHQge1xuXHRjb25zdCBzcGluID0gc3Bpbm5lcihzcGlubmVyT3B0aW9ucyk7XG5cdGxldCB2YWx1ZSA9IDA7XG5cdGxldCBwcmV2aW91c01lc3NhZ2UgPSAnJztcblxuXHRjb25zdCBtYXggPSBNYXRoLm1heCgxLCB1c2VyTWF4KTtcblx0Y29uc3Qgc2l6ZSA9IE1hdGgubWF4KDEsIHVzZXJTaXplKTtcblxuXHRjb25zdCBhY3RpdmVTdHlsZSA9IChzdGF0ZTogU3RhdGUpID0+IHtcblx0XHRzd2l0Y2ggKHN0YXRlKSB7XG5cdFx0XHRjYXNlICdpbml0aWFsJzpcblx0XHRcdGNhc2UgJ2FjdGl2ZSc6XG5cdFx0XHRcdHJldHVybiBjb2xvci5tYWdlbnRhO1xuXHRcdFx0Y2FzZSAnZXJyb3InOlxuXHRcdFx0Y2FzZSAnY2FuY2VsJzpcblx0XHRcdFx0cmV0dXJuIGNvbG9yLnJlZDtcblx0XHRcdGNhc2UgJ3N1Ym1pdCc6XG5cdFx0XHRcdHJldHVybiBjb2xvci5ncmVlbjtcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiBjb2xvci5tYWdlbnRhO1xuXHRcdH1cblx0fTtcblx0Y29uc3QgZHJhd1Byb2dyZXNzID0gKHN0YXRlOiBTdGF0ZSwgbXNnOiBzdHJpbmcpID0+IHtcblx0XHRjb25zdCBhY3RpdmUgPSBNYXRoLmZsb29yKCh2YWx1ZSAvIG1heCkgKiBzaXplKTtcblx0XHRyZXR1cm4gYCR7YWN0aXZlU3R5bGUoc3RhdGUpKFNfUFJPR1JFU1NfQ0hBUltzdHlsZV0ucmVwZWF0KGFjdGl2ZSkpfSR7Y29sb3IuZGltKFNfUFJPR1JFU1NfQ0hBUltzdHlsZV0ucmVwZWF0KHNpemUgLSBhY3RpdmUpKX0gJHttc2d9YDtcblx0fTtcblxuXHRjb25zdCBzdGFydCA9IChtc2cgPSAnJykgPT4ge1xuXHRcdHByZXZpb3VzTWVzc2FnZSA9IG1zZztcblx0XHRzcGluLnN0YXJ0KGRyYXdQcm9ncmVzcygnaW5pdGlhbCcsIG1zZykpO1xuXHR9O1xuXHRjb25zdCBhZHZhbmNlID0gKHN0ZXAgPSAxLCBtc2c/OiBzdHJpbmcpOiB2b2lkID0+IHtcblx0XHR2YWx1ZSA9IE1hdGgubWluKG1heCwgc3RlcCArIHZhbHVlKTtcblx0XHRzcGluLm1lc3NhZ2UoZHJhd1Byb2dyZXNzKCdhY3RpdmUnLCBtc2cgPz8gcHJldmlvdXNNZXNzYWdlKSk7XG5cdFx0cHJldmlvdXNNZXNzYWdlID0gbXNnID8/IHByZXZpb3VzTWVzc2FnZTtcblx0fTtcblx0cmV0dXJuIHtcblx0XHRzdGFydCxcblx0XHRzdG9wOiBzcGluLnN0b3AsXG5cdFx0Y2FuY2VsOiBzcGluLmNhbmNlbCxcblx0XHRlcnJvcjogc3Bpbi5lcnJvcixcblx0XHRjbGVhcjogc3Bpbi5jbGVhcixcblx0XHRhZHZhbmNlLFxuXHRcdGlzQ2FuY2VsbGVkOiBzcGluLmlzQ2FuY2VsbGVkLFxuXHRcdG1lc3NhZ2U6IChtc2c6IHN0cmluZykgPT4gYWR2YW5jZSgwLCBtc2cpLFxuXHR9O1xufVxuIiwgImltcG9ydCB7IFNlbGVjdFByb21wdCwgc2V0dGluZ3MsIHdyYXBUZXh0V2l0aFByZWZpeCB9IGZyb20gJ0BjbGFjay9jb3JlJztcbmltcG9ydCBjb2xvciBmcm9tICdwaWNvY29sb3JzJztcbmltcG9ydCB7XG5cdHR5cGUgQ29tbW9uT3B0aW9ucyxcblx0U19CQVIsXG5cdFNfQkFSX0VORCxcblx0U19SQURJT19BQ1RJVkUsXG5cdFNfUkFESU9fSU5BQ1RJVkUsXG5cdHN5bWJvbCxcblx0c3ltYm9sQmFyLFxufSBmcm9tICcuL2NvbW1vbi5qcyc7XG5pbXBvcnQgeyBsaW1pdE9wdGlvbnMgfSBmcm9tICcuL2xpbWl0LW9wdGlvbnMuanMnO1xuXG50eXBlIFByaW1pdGl2ZSA9IFJlYWRvbmx5PHN0cmluZyB8IGJvb2xlYW4gfCBudW1iZXI+O1xuXG5leHBvcnQgdHlwZSBPcHRpb248VmFsdWU+ID0gVmFsdWUgZXh0ZW5kcyBQcmltaXRpdmVcblx0PyB7XG5cdFx0XHQvKipcblx0XHRcdCAqIEludGVybmFsIGRhdGEgZm9yIHRoaXMgb3B0aW9uLlxuXHRcdFx0ICovXG5cdFx0XHR2YWx1ZTogVmFsdWU7XG5cdFx0XHQvKipcblx0XHRcdCAqIFRoZSBvcHRpb25hbCwgdXNlci1mYWNpbmcgdGV4dCBmb3IgdGhpcyBvcHRpb24uXG5cdFx0XHQgKlxuXHRcdFx0ICogQnkgZGVmYXVsdCwgdGhlIGB2YWx1ZWAgaXMgY29udmVydGVkIHRvIGEgc3RyaW5nLlxuXHRcdFx0ICovXG5cdFx0XHRsYWJlbD86IHN0cmluZztcblx0XHRcdC8qKlxuXHRcdFx0ICogQW4gb3B0aW9uYWwgaGludCB0byBkaXNwbGF5IHRvIHRoZSB1c2VyIHdoZW5cblx0XHRcdCAqIHRoaXMgb3B0aW9uIG1pZ2h0IGJlIHNlbGVjdGVkLlxuXHRcdFx0ICpcblx0XHRcdCAqIEJ5IGRlZmF1bHQsIG5vIGBoaW50YCBpcyBkaXNwbGF5ZWQuXG5cdFx0XHQgKi9cblx0XHRcdGhpbnQ/OiBzdHJpbmc7XG5cdFx0XHQvKipcblx0XHRcdCAqIFdoZXRoZXIgdGhpcyBvcHRpb24gaXMgZGlzYWJsZWQuXG5cdFx0XHQgKiBEaXNhYmxlZCBvcHRpb25zIGFyZSB2aXNpYmxlIGJ1dCBjYW5ub3QgYmUgc2VsZWN0ZWQuXG5cdFx0XHQgKlxuXHRcdFx0ICogQnkgZGVmYXVsdCwgb3B0aW9ucyBhcmUgbm90IGRpc2FibGVkLlxuXHRcdFx0ICovXG5cdFx0XHRkaXNhYmxlZD86IGJvb2xlYW47XG5cdFx0fVxuXHQ6IHtcblx0XHRcdC8qKlxuXHRcdFx0ICogSW50ZXJuYWwgZGF0YSBmb3IgdGhpcyBvcHRpb24uXG5cdFx0XHQgKi9cblx0XHRcdHZhbHVlOiBWYWx1ZTtcblx0XHRcdC8qKlxuXHRcdFx0ICogUmVxdWlyZWQuIFRoZSB1c2VyLWZhY2luZyB0ZXh0IGZvciB0aGlzIG9wdGlvbi5cblx0XHRcdCAqL1xuXHRcdFx0bGFiZWw6IHN0cmluZztcblx0XHRcdC8qKlxuXHRcdFx0ICogQW4gb3B0aW9uYWwgaGludCB0byBkaXNwbGF5IHRvIHRoZSB1c2VyIHdoZW5cblx0XHRcdCAqIHRoaXMgb3B0aW9uIG1pZ2h0IGJlIHNlbGVjdGVkLlxuXHRcdFx0ICpcblx0XHRcdCAqIEJ5IGRlZmF1bHQsIG5vIGBoaW50YCBpcyBkaXNwbGF5ZWQuXG5cdFx0XHQgKi9cblx0XHRcdGhpbnQ/OiBzdHJpbmc7XG5cdFx0XHQvKipcblx0XHRcdCAqIFdoZXRoZXIgdGhpcyBvcHRpb24gaXMgZGlzYWJsZWQuXG5cdFx0XHQgKiBEaXNhYmxlZCBvcHRpb25zIGFyZSB2aXNpYmxlIGJ1dCBjYW5ub3QgYmUgc2VsZWN0ZWQuXG5cdFx0XHQgKlxuXHRcdFx0ICogQnkgZGVmYXVsdCwgb3B0aW9ucyBhcmUgbm90IGRpc2FibGVkLlxuXHRcdFx0ICovXG5cdFx0XHRkaXNhYmxlZD86IGJvb2xlYW47XG5cdFx0fTtcblxuZXhwb3J0IGludGVyZmFjZSBTZWxlY3RPcHRpb25zPFZhbHVlPiBleHRlbmRzIENvbW1vbk9wdGlvbnMge1xuXHRtZXNzYWdlOiBzdHJpbmc7XG5cdG9wdGlvbnM6IE9wdGlvbjxWYWx1ZT5bXTtcblx0aW5pdGlhbFZhbHVlPzogVmFsdWU7XG5cdG1heEl0ZW1zPzogbnVtYmVyO1xufVxuXG5jb25zdCBjb21wdXRlTGFiZWwgPSAobGFiZWw6IHN0cmluZywgZm9ybWF0OiAodGV4dDogc3RyaW5nKSA9PiBzdHJpbmcpID0+IHtcblx0aWYgKCFsYWJlbC5pbmNsdWRlcygnXFxuJykpIHtcblx0XHRyZXR1cm4gZm9ybWF0KGxhYmVsKTtcblx0fVxuXHRyZXR1cm4gbGFiZWxcblx0XHQuc3BsaXQoJ1xcbicpXG5cdFx0Lm1hcCgobGluZSkgPT4gZm9ybWF0KGxpbmUpKVxuXHRcdC5qb2luKCdcXG4nKTtcbn07XG5cbmV4cG9ydCBjb25zdCBzZWxlY3QgPSA8VmFsdWU+KG9wdHM6IFNlbGVjdE9wdGlvbnM8VmFsdWU+KSA9PiB7XG5cdGNvbnN0IG9wdCA9IChcblx0XHRvcHRpb246IE9wdGlvbjxWYWx1ZT4sXG5cdFx0c3RhdGU6ICdpbmFjdGl2ZScgfCAnYWN0aXZlJyB8ICdzZWxlY3RlZCcgfCAnY2FuY2VsbGVkJyB8ICdkaXNhYmxlZCdcblx0KSA9PiB7XG5cdFx0Y29uc3QgbGFiZWwgPSBvcHRpb24ubGFiZWwgPz8gU3RyaW5nKG9wdGlvbi52YWx1ZSk7XG5cdFx0c3dpdGNoIChzdGF0ZSkge1xuXHRcdFx0Y2FzZSAnZGlzYWJsZWQnOlxuXHRcdFx0XHRyZXR1cm4gYCR7Y29sb3IuZ3JheShTX1JBRElPX0lOQUNUSVZFKX0gJHtjb21wdXRlTGFiZWwobGFiZWwsIGNvbG9yLmdyYXkpfSR7XG5cdFx0XHRcdFx0b3B0aW9uLmhpbnQgPyBgICR7Y29sb3IuZGltKGAoJHtvcHRpb24uaGludCA/PyAnZGlzYWJsZWQnfSlgKX1gIDogJydcblx0XHRcdFx0fWA7XG5cdFx0XHRjYXNlICdzZWxlY3RlZCc6XG5cdFx0XHRcdHJldHVybiBgJHtjb21wdXRlTGFiZWwobGFiZWwsIGNvbG9yLmRpbSl9YDtcblx0XHRcdGNhc2UgJ2FjdGl2ZSc6XG5cdFx0XHRcdHJldHVybiBgJHtjb2xvci5ncmVlbihTX1JBRElPX0FDVElWRSl9ICR7bGFiZWx9JHtcblx0XHRcdFx0XHRvcHRpb24uaGludCA/IGAgJHtjb2xvci5kaW0oYCgke29wdGlvbi5oaW50fSlgKX1gIDogJydcblx0XHRcdFx0fWA7XG5cdFx0XHRjYXNlICdjYW5jZWxsZWQnOlxuXHRcdFx0XHRyZXR1cm4gYCR7Y29tcHV0ZUxhYmVsKGxhYmVsLCAoc3RyKSA9PiBjb2xvci5zdHJpa2V0aHJvdWdoKGNvbG9yLmRpbShzdHIpKSl9YDtcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiBgJHtjb2xvci5kaW0oU19SQURJT19JTkFDVElWRSl9ICR7Y29tcHV0ZUxhYmVsKGxhYmVsLCBjb2xvci5kaW0pfWA7XG5cdFx0fVxuXHR9O1xuXG5cdHJldHVybiBuZXcgU2VsZWN0UHJvbXB0KHtcblx0XHRvcHRpb25zOiBvcHRzLm9wdGlvbnMsXG5cdFx0c2lnbmFsOiBvcHRzLnNpZ25hbCxcblx0XHRpbnB1dDogb3B0cy5pbnB1dCxcblx0XHRvdXRwdXQ6IG9wdHMub3V0cHV0LFxuXHRcdGluaXRpYWxWYWx1ZTogb3B0cy5pbml0aWFsVmFsdWUsXG5cdFx0cmVuZGVyKCkge1xuXHRcdFx0Y29uc3QgaGFzR3VpZGUgPSBvcHRzLndpdGhHdWlkZSA/PyBzZXR0aW5ncy53aXRoR3VpZGU7XG5cdFx0XHRjb25zdCB0aXRsZVByZWZpeCA9IGAke3N5bWJvbCh0aGlzLnN0YXRlKX0gIGA7XG5cdFx0XHRjb25zdCB0aXRsZVByZWZpeEJhciA9IGAke3N5bWJvbEJhcih0aGlzLnN0YXRlKX0gIGA7XG5cdFx0XHRjb25zdCBtZXNzYWdlTGluZXMgPSB3cmFwVGV4dFdpdGhQcmVmaXgoXG5cdFx0XHRcdG9wdHMub3V0cHV0LFxuXHRcdFx0XHRvcHRzLm1lc3NhZ2UsXG5cdFx0XHRcdHRpdGxlUHJlZml4QmFyLFxuXHRcdFx0XHR0aXRsZVByZWZpeFxuXHRcdFx0KTtcblx0XHRcdGNvbnN0IHRpdGxlID0gYCR7aGFzR3VpZGUgPyBgJHtjb2xvci5ncmF5KFNfQkFSKX1cXG5gIDogJyd9JHttZXNzYWdlTGluZXN9XFxuYDtcblxuXHRcdFx0c3dpdGNoICh0aGlzLnN0YXRlKSB7XG5cdFx0XHRcdGNhc2UgJ3N1Ym1pdCc6IHtcblx0XHRcdFx0XHRjb25zdCBzdWJtaXRQcmVmaXggPSBoYXNHdWlkZSA/IGAke2NvbG9yLmdyYXkoU19CQVIpfSAgYCA6ICcnO1xuXHRcdFx0XHRcdGNvbnN0IHdyYXBwZWRMaW5lcyA9IHdyYXBUZXh0V2l0aFByZWZpeChcblx0XHRcdFx0XHRcdG9wdHMub3V0cHV0LFxuXHRcdFx0XHRcdFx0b3B0KHRoaXMub3B0aW9uc1t0aGlzLmN1cnNvcl0sICdzZWxlY3RlZCcpLFxuXHRcdFx0XHRcdFx0c3VibWl0UHJlZml4XG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRyZXR1cm4gYCR7dGl0bGV9JHt3cmFwcGVkTGluZXN9YDtcblx0XHRcdFx0fVxuXHRcdFx0XHRjYXNlICdjYW5jZWwnOiB7XG5cdFx0XHRcdFx0Y29uc3QgY2FuY2VsUHJlZml4ID0gaGFzR3VpZGUgPyBgJHtjb2xvci5ncmF5KFNfQkFSKX0gIGAgOiAnJztcblx0XHRcdFx0XHRjb25zdCB3cmFwcGVkTGluZXMgPSB3cmFwVGV4dFdpdGhQcmVmaXgoXG5cdFx0XHRcdFx0XHRvcHRzLm91dHB1dCxcblx0XHRcdFx0XHRcdG9wdCh0aGlzLm9wdGlvbnNbdGhpcy5jdXJzb3JdLCAnY2FuY2VsbGVkJyksXG5cdFx0XHRcdFx0XHRjYW5jZWxQcmVmaXhcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdHJldHVybiBgJHt0aXRsZX0ke3dyYXBwZWRMaW5lc30ke2hhc0d1aWRlID8gYFxcbiR7Y29sb3IuZ3JheShTX0JBUil9YCA6ICcnfWA7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZGVmYXVsdDoge1xuXHRcdFx0XHRcdGNvbnN0IHByZWZpeCA9IGhhc0d1aWRlID8gYCR7Y29sb3IuY3lhbihTX0JBUil9ICBgIDogJyc7XG5cdFx0XHRcdFx0Y29uc3QgcHJlZml4RW5kID0gaGFzR3VpZGUgPyBjb2xvci5jeWFuKFNfQkFSX0VORCkgOiAnJztcblx0XHRcdFx0XHQvLyBDYWxjdWxhdGUgcm93UGFkZGluZzogdGl0bGUgbGluZXMgKyBmb290ZXIgbGluZXMgKFNfQkFSX0VORCArIHRyYWlsaW5nIG5ld2xpbmUpXG5cdFx0XHRcdFx0Y29uc3QgdGl0bGVMaW5lQ291bnQgPSB0aXRsZS5zcGxpdCgnXFxuJykubGVuZ3RoO1xuXHRcdFx0XHRcdGNvbnN0IGZvb3RlckxpbmVDb3VudCA9IGhhc0d1aWRlID8gMiA6IDE7IC8vIFNfQkFSX0VORCArIHRyYWlsaW5nIG5ld2xpbmUgKG9yIGp1c3QgdHJhaWxpbmcgbmV3bGluZSlcblx0XHRcdFx0XHRyZXR1cm4gYCR7dGl0bGV9JHtwcmVmaXh9JHtsaW1pdE9wdGlvbnMoe1xuXHRcdFx0XHRcdFx0b3V0cHV0OiBvcHRzLm91dHB1dCxcblx0XHRcdFx0XHRcdGN1cnNvcjogdGhpcy5jdXJzb3IsXG5cdFx0XHRcdFx0XHRvcHRpb25zOiB0aGlzLm9wdGlvbnMsXG5cdFx0XHRcdFx0XHRtYXhJdGVtczogb3B0cy5tYXhJdGVtcyxcblx0XHRcdFx0XHRcdGNvbHVtblBhZGRpbmc6IHByZWZpeC5sZW5ndGgsXG5cdFx0XHRcdFx0XHRyb3dQYWRkaW5nOiB0aXRsZUxpbmVDb3VudCArIGZvb3RlckxpbmVDb3VudCxcblx0XHRcdFx0XHRcdHN0eWxlOiAoaXRlbSwgYWN0aXZlKSA9PlxuXHRcdFx0XHRcdFx0XHRvcHQoaXRlbSwgaXRlbS5kaXNhYmxlZCA/ICdkaXNhYmxlZCcgOiBhY3RpdmUgPyAnYWN0aXZlJyA6ICdpbmFjdGl2ZScpLFxuXHRcdFx0XHRcdH0pLmpvaW4oYFxcbiR7cHJlZml4fWApfVxcbiR7cHJlZml4RW5kfVxcbmA7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHR9KS5wcm9tcHQoKSBhcyBQcm9taXNlPFZhbHVlIHwgc3ltYm9sPjtcbn07XG4iLCAiaW1wb3J0IHsgU2VsZWN0S2V5UHJvbXB0LCBzZXR0aW5ncywgd3JhcFRleHRXaXRoUHJlZml4IH0gZnJvbSAnQGNsYWNrL2NvcmUnO1xuaW1wb3J0IGNvbG9yIGZyb20gJ3BpY29jb2xvcnMnO1xuaW1wb3J0IHsgdHlwZSBDb21tb25PcHRpb25zLCBTX0JBUiwgU19CQVJfRU5ELCBzeW1ib2wgfSBmcm9tICcuL2NvbW1vbi5qcyc7XG5pbXBvcnQgdHlwZSB7IE9wdGlvbiB9IGZyb20gJy4vc2VsZWN0LmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBTZWxlY3RLZXlPcHRpb25zPFZhbHVlIGV4dGVuZHMgc3RyaW5nPiBleHRlbmRzIENvbW1vbk9wdGlvbnMge1xuXHRtZXNzYWdlOiBzdHJpbmc7XG5cdG9wdGlvbnM6IE9wdGlvbjxWYWx1ZT5bXTtcblx0aW5pdGlhbFZhbHVlPzogVmFsdWU7XG5cdGNhc2VTZW5zaXRpdmU/OiBib29sZWFuO1xufVxuXG5leHBvcnQgY29uc3Qgc2VsZWN0S2V5ID0gPFZhbHVlIGV4dGVuZHMgc3RyaW5nPihvcHRzOiBTZWxlY3RLZXlPcHRpb25zPFZhbHVlPikgPT4ge1xuXHRjb25zdCBvcHQgPSAoXG5cdFx0b3B0aW9uOiBPcHRpb248VmFsdWU+LFxuXHRcdHN0YXRlOiAnaW5hY3RpdmUnIHwgJ2FjdGl2ZScgfCAnc2VsZWN0ZWQnIHwgJ2NhbmNlbGxlZCcgPSAnaW5hY3RpdmUnXG5cdCkgPT4ge1xuXHRcdGNvbnN0IGxhYmVsID0gb3B0aW9uLmxhYmVsID8/IFN0cmluZyhvcHRpb24udmFsdWUpO1xuXHRcdGlmIChzdGF0ZSA9PT0gJ3NlbGVjdGVkJykge1xuXHRcdFx0cmV0dXJuIGAke2NvbG9yLmRpbShsYWJlbCl9YDtcblx0XHR9XG5cdFx0aWYgKHN0YXRlID09PSAnY2FuY2VsbGVkJykge1xuXHRcdFx0cmV0dXJuIGAke2NvbG9yLnN0cmlrZXRocm91Z2goY29sb3IuZGltKGxhYmVsKSl9YDtcblx0XHR9XG5cdFx0aWYgKHN0YXRlID09PSAnYWN0aXZlJykge1xuXHRcdFx0cmV0dXJuIGAke2NvbG9yLmJnQ3lhbihjb2xvci5ncmF5KGAgJHtvcHRpb24udmFsdWV9IGApKX0gJHtsYWJlbH0ke1xuXHRcdFx0XHRvcHRpb24uaGludCA/IGAgJHtjb2xvci5kaW0oYCgke29wdGlvbi5oaW50fSlgKX1gIDogJydcblx0XHRcdH1gO1xuXHRcdH1cblx0XHRyZXR1cm4gYCR7Y29sb3IuZ3JheShjb2xvci5iZ1doaXRlKGNvbG9yLmludmVyc2UoYCAke29wdGlvbi52YWx1ZX0gYCkpKX0gJHtsYWJlbH0ke1xuXHRcdFx0b3B0aW9uLmhpbnQgPyBgICR7Y29sb3IuZGltKGAoJHtvcHRpb24uaGludH0pYCl9YCA6ICcnXG5cdFx0fWA7XG5cdH07XG5cblx0cmV0dXJuIG5ldyBTZWxlY3RLZXlQcm9tcHQoe1xuXHRcdG9wdGlvbnM6IG9wdHMub3B0aW9ucyxcblx0XHRzaWduYWw6IG9wdHMuc2lnbmFsLFxuXHRcdGlucHV0OiBvcHRzLmlucHV0LFxuXHRcdG91dHB1dDogb3B0cy5vdXRwdXQsXG5cdFx0aW5pdGlhbFZhbHVlOiBvcHRzLmluaXRpYWxWYWx1ZSxcblx0XHRjYXNlU2Vuc2l0aXZlOiBvcHRzLmNhc2VTZW5zaXRpdmUsXG5cdFx0cmVuZGVyKCkge1xuXHRcdFx0Y29uc3QgaGFzR3VpZGUgPSBvcHRzLndpdGhHdWlkZSA/PyBzZXR0aW5ncy53aXRoR3VpZGU7XG5cdFx0XHRjb25zdCB0aXRsZSA9IGAke2hhc0d1aWRlID8gYCR7Y29sb3IuZ3JheShTX0JBUil9XFxuYCA6ICcnfSR7c3ltYm9sKHRoaXMuc3RhdGUpfSAgJHtvcHRzLm1lc3NhZ2V9XFxuYDtcblxuXHRcdFx0c3dpdGNoICh0aGlzLnN0YXRlKSB7XG5cdFx0XHRcdGNhc2UgJ3N1Ym1pdCc6IHtcblx0XHRcdFx0XHRjb25zdCBzdWJtaXRQcmVmaXggPSBoYXNHdWlkZSA/IGAke2NvbG9yLmdyYXkoU19CQVIpfSAgYCA6ICcnO1xuXHRcdFx0XHRcdGNvbnN0IHNlbGVjdGVkT3B0aW9uID1cblx0XHRcdFx0XHRcdHRoaXMub3B0aW9ucy5maW5kKChvcHQpID0+IG9wdC52YWx1ZSA9PT0gdGhpcy52YWx1ZSkgPz8gb3B0cy5vcHRpb25zWzBdO1xuXHRcdFx0XHRcdGNvbnN0IHdyYXBwZWQgPSB3cmFwVGV4dFdpdGhQcmVmaXgoXG5cdFx0XHRcdFx0XHRvcHRzLm91dHB1dCxcblx0XHRcdFx0XHRcdG9wdChzZWxlY3RlZE9wdGlvbiwgJ3NlbGVjdGVkJyksXG5cdFx0XHRcdFx0XHRzdWJtaXRQcmVmaXhcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdHJldHVybiBgJHt0aXRsZX0ke3dyYXBwZWR9YDtcblx0XHRcdFx0fVxuXHRcdFx0XHRjYXNlICdjYW5jZWwnOiB7XG5cdFx0XHRcdFx0Y29uc3QgY2FuY2VsUHJlZml4ID0gaGFzR3VpZGUgPyBgJHtjb2xvci5ncmF5KFNfQkFSKX0gIGAgOiAnJztcblx0XHRcdFx0XHRjb25zdCB3cmFwcGVkID0gd3JhcFRleHRXaXRoUHJlZml4KFxuXHRcdFx0XHRcdFx0b3B0cy5vdXRwdXQsXG5cdFx0XHRcdFx0XHRvcHQodGhpcy5vcHRpb25zWzBdLCAnY2FuY2VsbGVkJyksXG5cdFx0XHRcdFx0XHRjYW5jZWxQcmVmaXhcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdHJldHVybiBgJHt0aXRsZX0ke3dyYXBwZWR9JHtoYXNHdWlkZSA/IGBcXG4ke2NvbG9yLmdyYXkoU19CQVIpfWAgOiAnJ31gO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGRlZmF1bHQ6IHtcblx0XHRcdFx0XHRjb25zdCBkZWZhdWx0UHJlZml4ID0gaGFzR3VpZGUgPyBgJHtjb2xvci5jeWFuKFNfQkFSKX0gIGAgOiAnJztcblx0XHRcdFx0XHRjb25zdCBkZWZhdWx0UHJlZml4RW5kID0gaGFzR3VpZGUgPyBjb2xvci5jeWFuKFNfQkFSX0VORCkgOiAnJztcblx0XHRcdFx0XHRjb25zdCB3cmFwcGVkID0gdGhpcy5vcHRpb25zXG5cdFx0XHRcdFx0XHQubWFwKChvcHRpb24sIGkpID0+XG5cdFx0XHRcdFx0XHRcdHdyYXBUZXh0V2l0aFByZWZpeChcblx0XHRcdFx0XHRcdFx0XHRvcHRzLm91dHB1dCxcblx0XHRcdFx0XHRcdFx0XHRvcHQob3B0aW9uLCBpID09PSB0aGlzLmN1cnNvciA/ICdhY3RpdmUnIDogJ2luYWN0aXZlJyksXG5cdFx0XHRcdFx0XHRcdFx0ZGVmYXVsdFByZWZpeFxuXHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHQuam9pbignXFxuJyk7XG5cdFx0XHRcdFx0cmV0dXJuIGAke3RpdGxlfSR7d3JhcHBlZH1cXG4ke2RlZmF1bHRQcmVmaXhFbmR9XFxuYDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cdH0pLnByb21wdCgpIGFzIFByb21pc2U8VmFsdWUgfCBzeW1ib2w+O1xufTtcbiIsICJpbXBvcnQgeyBzdHJpcFZUQ29udHJvbENoYXJhY3RlcnMgYXMgc3RyaXAgfSBmcm9tICdub2RlOnV0aWwnO1xuaW1wb3J0IGNvbG9yIGZyb20gJ3BpY29jb2xvcnMnO1xuaW1wb3J0IHsgU19CQVIsIFNfRVJST1IsIFNfSU5GTywgU19TVEVQX1NVQk1JVCwgU19TVUNDRVNTLCBTX1dBUk4gfSBmcm9tICcuL2NvbW1vbi5qcyc7XG5pbXBvcnQgdHlwZSB7IExvZ01lc3NhZ2VPcHRpb25zIH0gZnJvbSAnLi9sb2cuanMnO1xuXG5jb25zdCBwcmVmaXggPSBgJHtjb2xvci5ncmF5KFNfQkFSKX0gIGA7XG5cbi8vIFRPRE8gKDQzMDgxaik6IHRoaXMgY3VycmVudGx5IGRvZXNuJ3Qgc3VwcG9ydCBjdXN0b20gYG91dHB1dGAgd3JpdGFibGVzXG4vLyBiZWNhdXNlIHdlIHJlbHkgb24gYGNvbHVtbnNgIGV4aXN0aW5nIChpLmUuIGBwcm9jZXNzLnN0ZG91dC5jb2x1bW5zKS5cbi8vXG4vLyBJZiB3ZSB3YW50IHRvIHN1cHBvcnQgYG91dHB1dGAgYmVpbmcgcGFzc2VkIGluLCB3ZSB3aWxsIG5lZWQgdG8gdXNlXG4vLyBhIGNvbmRpdGlvbiBsaWtlIGBpZiAob3V0cHV0IGluc2FuY2UgV3JpdGFibGUpYCB0byBjaGVjayBpZiBpdCBoYXMgY29sdW1uc1xuZXhwb3J0IGNvbnN0IHN0cmVhbSA9IHtcblx0bWVzc2FnZTogYXN5bmMgKFxuXHRcdGl0ZXJhYmxlOiBJdGVyYWJsZTxzdHJpbmc+IHwgQXN5bmNJdGVyYWJsZTxzdHJpbmc+LFxuXHRcdHsgc3ltYm9sID0gY29sb3IuZ3JheShTX0JBUikgfTogTG9nTWVzc2FnZU9wdGlvbnMgPSB7fVxuXHQpID0+IHtcblx0XHRwcm9jZXNzLnN0ZG91dC53cml0ZShgJHtjb2xvci5ncmF5KFNfQkFSKX1cXG4ke3N5bWJvbH0gIGApO1xuXHRcdGxldCBsaW5lV2lkdGggPSAzO1xuXHRcdGZvciBhd2FpdCAobGV0IGNodW5rIG9mIGl0ZXJhYmxlKSB7XG5cdFx0XHRjaHVuayA9IGNodW5rLnJlcGxhY2UoL1xcbi9nLCBgXFxuJHtwcmVmaXh9YCk7XG5cdFx0XHRpZiAoY2h1bmsuaW5jbHVkZXMoJ1xcbicpKSB7XG5cdFx0XHRcdGxpbmVXaWR0aCA9IDMgKyBzdHJpcChjaHVuay5zbGljZShjaHVuay5sYXN0SW5kZXhPZignXFxuJykpKS5sZW5ndGg7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBjaHVua0xlbiA9IHN0cmlwKGNodW5rKS5sZW5ndGg7XG5cdFx0XHRpZiAobGluZVdpZHRoICsgY2h1bmtMZW4gPCBwcm9jZXNzLnN0ZG91dC5jb2x1bW5zKSB7XG5cdFx0XHRcdGxpbmVXaWR0aCArPSBjaHVua0xlbjtcblx0XHRcdFx0cHJvY2Vzcy5zdGRvdXQud3JpdGUoY2h1bmspO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cHJvY2Vzcy5zdGRvdXQud3JpdGUoYFxcbiR7cHJlZml4fSR7Y2h1bmsudHJpbVN0YXJ0KCl9YCk7XG5cdFx0XHRcdGxpbmVXaWR0aCA9IDMgKyBzdHJpcChjaHVuay50cmltU3RhcnQoKSkubGVuZ3RoO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRwcm9jZXNzLnN0ZG91dC53cml0ZSgnXFxuJyk7XG5cdH0sXG5cdGluZm86IChpdGVyYWJsZTogSXRlcmFibGU8c3RyaW5nPiB8IEFzeW5jSXRlcmFibGU8c3RyaW5nPikgPT4ge1xuXHRcdHJldHVybiBzdHJlYW0ubWVzc2FnZShpdGVyYWJsZSwgeyBzeW1ib2w6IGNvbG9yLmJsdWUoU19JTkZPKSB9KTtcblx0fSxcblx0c3VjY2VzczogKGl0ZXJhYmxlOiBJdGVyYWJsZTxzdHJpbmc+IHwgQXN5bmNJdGVyYWJsZTxzdHJpbmc+KSA9PiB7XG5cdFx0cmV0dXJuIHN0cmVhbS5tZXNzYWdlKGl0ZXJhYmxlLCB7IHN5bWJvbDogY29sb3IuZ3JlZW4oU19TVUNDRVNTKSB9KTtcblx0fSxcblx0c3RlcDogKGl0ZXJhYmxlOiBJdGVyYWJsZTxzdHJpbmc+IHwgQXN5bmNJdGVyYWJsZTxzdHJpbmc+KSA9PiB7XG5cdFx0cmV0dXJuIHN0cmVhbS5tZXNzYWdlKGl0ZXJhYmxlLCB7IHN5bWJvbDogY29sb3IuZ3JlZW4oU19TVEVQX1NVQk1JVCkgfSk7XG5cdH0sXG5cdHdhcm46IChpdGVyYWJsZTogSXRlcmFibGU8c3RyaW5nPiB8IEFzeW5jSXRlcmFibGU8c3RyaW5nPikgPT4ge1xuXHRcdHJldHVybiBzdHJlYW0ubWVzc2FnZShpdGVyYWJsZSwgeyBzeW1ib2w6IGNvbG9yLnllbGxvdyhTX1dBUk4pIH0pO1xuXHR9LFxuXHQvKiogYWxpYXMgZm9yIGBsb2cud2FybigpYC4gKi9cblx0d2FybmluZzogKGl0ZXJhYmxlOiBJdGVyYWJsZTxzdHJpbmc+IHwgQXN5bmNJdGVyYWJsZTxzdHJpbmc+KSA9PiB7XG5cdFx0cmV0dXJuIHN0cmVhbS53YXJuKGl0ZXJhYmxlKTtcblx0fSxcblx0ZXJyb3I6IChpdGVyYWJsZTogSXRlcmFibGU8c3RyaW5nPiB8IEFzeW5jSXRlcmFibGU8c3RyaW5nPikgPT4ge1xuXHRcdHJldHVybiBzdHJlYW0ubWVzc2FnZShpdGVyYWJsZSwgeyBzeW1ib2w6IGNvbG9yLnJlZChTX0VSUk9SKSB9KTtcblx0fSxcbn07XG4iLCAiaW1wb3J0IHR5cGUgeyBDb21tb25PcHRpb25zIH0gZnJvbSAnLi9jb21tb24uanMnO1xuaW1wb3J0IHsgc3Bpbm5lciB9IGZyb20gJy4vc3Bpbm5lci5qcyc7XG5cbmV4cG9ydCB0eXBlIFRhc2sgPSB7XG5cdC8qKlxuXHQgKiBUYXNrIHRpdGxlXG5cdCAqL1xuXHR0aXRsZTogc3RyaW5nO1xuXHQvKipcblx0ICogVGFzayBmdW5jdGlvblxuXHQgKi9cblx0dGFzazogKG1lc3NhZ2U6IChzdHJpbmc6IHN0cmluZykgPT4gdm9pZCkgPT4gc3RyaW5nIHwgUHJvbWlzZTxzdHJpbmc+IHwgdm9pZCB8IFByb21pc2U8dm9pZD47XG5cblx0LyoqXG5cdCAqIElmIGVuYWJsZWQgPT09IGZhbHNlIHRoZSB0YXNrIHdpbGwgYmUgc2tpcHBlZFxuXHQgKi9cblx0ZW5hYmxlZD86IGJvb2xlYW47XG59O1xuXG4vKipcbiAqIERlZmluZSBhIGdyb3VwIG9mIHRhc2tzIHRvIGJlIGV4ZWN1dGVkXG4gKi9cbmV4cG9ydCBjb25zdCB0YXNrcyA9IGFzeW5jICh0YXNrczogVGFza1tdLCBvcHRzPzogQ29tbW9uT3B0aW9ucykgPT4ge1xuXHRmb3IgKGNvbnN0IHRhc2sgb2YgdGFza3MpIHtcblx0XHRpZiAodGFzay5lbmFibGVkID09PSBmYWxzZSkgY29udGludWU7XG5cblx0XHRjb25zdCBzID0gc3Bpbm5lcihvcHRzKTtcblx0XHRzLnN0YXJ0KHRhc2sudGl0bGUpO1xuXHRcdGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRhc2sudGFzayhzLm1lc3NhZ2UpO1xuXHRcdHMuc3RvcChyZXN1bHQgfHwgdGFzay50aXRsZSk7XG5cdH1cbn07XG4iLCAiaW1wb3J0IHR5cGUgeyBXcml0YWJsZSB9IGZyb20gJ25vZGU6c3RyZWFtJztcbmltcG9ydCB7IGdldENvbHVtbnMgfSBmcm9tICdAY2xhY2svY29yZSc7XG5pbXBvcnQgY29sb3IgZnJvbSAncGljb2NvbG9ycyc7XG5pbXBvcnQgeyBlcmFzZSB9IGZyb20gJ3Npc3RlcmFuc2knO1xuaW1wb3J0IHtcblx0dHlwZSBDb21tb25PcHRpb25zLFxuXHRpc0NJIGFzIGlzQ0lGbixcblx0aXNUVFkgYXMgaXNUVFlGbixcblx0U19CQVIsXG5cdFNfU1RFUF9TVUJNSVQsXG59IGZyb20gJy4vY29tbW9uLmpzJztcbmltcG9ydCB7IGxvZyB9IGZyb20gJy4vbG9nLmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBUYXNrTG9nT3B0aW9ucyBleHRlbmRzIENvbW1vbk9wdGlvbnMge1xuXHR0aXRsZTogc3RyaW5nO1xuXHRsaW1pdD86IG51bWJlcjtcblx0c3BhY2luZz86IG51bWJlcjtcblx0cmV0YWluTG9nPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUYXNrTG9nTWVzc2FnZU9wdGlvbnMge1xuXHRyYXc/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRhc2tMb2dDb21wbGV0aW9uT3B0aW9ucyB7XG5cdHNob3dMb2c/OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgQnVmZmVyRW50cnkge1xuXHRoZWFkZXI/OiBzdHJpbmc7XG5cdHZhbHVlOiBzdHJpbmc7XG5cdGZ1bGw6IHN0cmluZztcblx0cmVzdWx0Pzoge1xuXHRcdHN0YXR1czogJ3N1Y2Nlc3MnIHwgJ2Vycm9yJztcblx0XHRtZXNzYWdlOiBzdHJpbmc7XG5cdH07XG59XG5cbmNvbnN0IHN0cmlwRGVzdHJ1Y3RpdmVBTlNJID0gKGlucHV0OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuXHQvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vQ29udHJvbENoYXJhY3RlcnNJblJlZ2V4OiBpbnRlbnRpb25hbFxuXHRyZXR1cm4gaW5wdXQucmVwbGFjZSgvXFx4MWJcXFsoPzpcXGQrOykqXFxkKltBQkNERUZHSGZKS1NUc3VdfFxceDFiXFxbKHN8dSkvZywgJycpO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIGEgbG9nIHdoaWNoIGNsZWFycyBvbiBzdWNjZXNzIGFuZCByZW1haW5zIG9uIGZhaWx1cmVcbiAqL1xuZXhwb3J0IGNvbnN0IHRhc2tMb2cgPSAob3B0czogVGFza0xvZ09wdGlvbnMpID0+IHtcblx0Y29uc3Qgb3V0cHV0OiBXcml0YWJsZSA9IG9wdHMub3V0cHV0ID8/IHByb2Nlc3Muc3Rkb3V0O1xuXHRjb25zdCBjb2x1bW5zID0gZ2V0Q29sdW1ucyhvdXRwdXQpO1xuXHRjb25zdCBzZWNvbmRhcnlTeW1ib2wgPSBjb2xvci5ncmF5KFNfQkFSKTtcblx0Y29uc3Qgc3BhY2luZyA9IG9wdHMuc3BhY2luZyA/PyAxO1xuXHRjb25zdCBiYXJTaXplID0gMztcblx0Y29uc3QgcmV0YWluTG9nID0gb3B0cy5yZXRhaW5Mb2cgPT09IHRydWU7XG5cdGNvbnN0IGlzVFRZID0gIWlzQ0lGbigpICYmIGlzVFRZRm4ob3V0cHV0KTtcblxuXHRvdXRwdXQud3JpdGUoYCR7c2Vjb25kYXJ5U3ltYm9sfVxcbmApO1xuXHRvdXRwdXQud3JpdGUoYCR7Y29sb3IuZ3JlZW4oU19TVEVQX1NVQk1JVCl9ICAke29wdHMudGl0bGV9XFxuYCk7XG5cdGZvciAobGV0IGkgPSAwOyBpIDwgc3BhY2luZzsgaSsrKSB7XG5cdFx0b3V0cHV0LndyaXRlKGAke3NlY29uZGFyeVN5bWJvbH1cXG5gKTtcblx0fVxuXG5cdGNvbnN0IGJ1ZmZlcnM6IEJ1ZmZlckVudHJ5W10gPSBbXG5cdFx0e1xuXHRcdFx0dmFsdWU6ICcnLFxuXHRcdFx0ZnVsbDogJycsXG5cdFx0fSxcblx0XTtcblx0bGV0IGxhc3RNZXNzYWdlV2FzUmF3ID0gZmFsc2U7XG5cblx0Y29uc3QgY2xlYXIgPSAoY2xlYXJUaXRsZTogYm9vbGVhbik6IHZvaWQgPT4ge1xuXHRcdGlmIChidWZmZXJzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGxldCBsaW5lcyA9IDA7XG5cblx0XHRpZiAoY2xlYXJUaXRsZSkge1xuXHRcdFx0bGluZXMgKz0gc3BhY2luZyArIDI7XG5cdFx0fVxuXG5cdFx0Zm9yIChjb25zdCBidWZmZXIgb2YgYnVmZmVycykge1xuXHRcdFx0Y29uc3QgeyB2YWx1ZSwgcmVzdWx0IH0gPSBidWZmZXI7XG5cdFx0XHRsZXQgdGV4dCA9IHJlc3VsdD8ubWVzc2FnZSA/PyB2YWx1ZTtcblxuXHRcdFx0aWYgKHRleHQubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAocmVzdWx0ID09PSB1bmRlZmluZWQgJiYgYnVmZmVyLmhlYWRlciAhPT0gdW5kZWZpbmVkICYmIGJ1ZmZlci5oZWFkZXIgIT09ICcnKSB7XG5cdFx0XHRcdHRleHQgKz0gYFxcbiR7YnVmZmVyLmhlYWRlcn1gO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBidWZmZXJIZWlnaHQgPSB0ZXh0LnNwbGl0KCdcXG4nKS5yZWR1Y2UoKGNvdW50LCBsaW5lKSA9PiB7XG5cdFx0XHRcdGlmIChsaW5lID09PSAnJykge1xuXHRcdFx0XHRcdHJldHVybiBjb3VudCArIDE7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGNvdW50ICsgTWF0aC5jZWlsKChsaW5lLmxlbmd0aCArIGJhclNpemUpIC8gY29sdW1ucyk7XG5cdFx0XHR9LCAwKTtcblxuXHRcdFx0bGluZXMgKz0gYnVmZmVySGVpZ2h0O1xuXHRcdH1cblxuXHRcdGlmIChsaW5lcyA+IDApIHtcblx0XHRcdGxpbmVzICs9IDE7XG5cdFx0XHRvdXRwdXQud3JpdGUoZXJhc2UubGluZXMobGluZXMpKTtcblx0XHR9XG5cdH07XG5cdGNvbnN0IHByaW50QnVmZmVyID0gKGJ1ZmZlcjogQnVmZmVyRW50cnksIG1lc3NhZ2VTcGFjaW5nPzogbnVtYmVyLCBmdWxsPzogYm9vbGVhbik6IHZvaWQgPT4ge1xuXHRcdGNvbnN0IG1lc3NhZ2VzID0gZnVsbCA/IGAke2J1ZmZlci5mdWxsfVxcbiR7YnVmZmVyLnZhbHVlfWAgOiBidWZmZXIudmFsdWU7XG5cdFx0aWYgKGJ1ZmZlci5oZWFkZXIgIT09IHVuZGVmaW5lZCAmJiBidWZmZXIuaGVhZGVyICE9PSAnJykge1xuXHRcdFx0bG9nLm1lc3NhZ2UoYnVmZmVyLmhlYWRlci5zcGxpdCgnXFxuJykubWFwKGNvbG9yLmJvbGQpLCB7XG5cdFx0XHRcdG91dHB1dCxcblx0XHRcdFx0c2Vjb25kYXJ5U3ltYm9sLFxuXHRcdFx0XHRzeW1ib2w6IHNlY29uZGFyeVN5bWJvbCxcblx0XHRcdFx0c3BhY2luZzogMCxcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRsb2cubWVzc2FnZShtZXNzYWdlcy5zcGxpdCgnXFxuJykubWFwKGNvbG9yLmRpbSksIHtcblx0XHRcdG91dHB1dCxcblx0XHRcdHNlY29uZGFyeVN5bWJvbCxcblx0XHRcdHN5bWJvbDogc2Vjb25kYXJ5U3ltYm9sLFxuXHRcdFx0c3BhY2luZzogbWVzc2FnZVNwYWNpbmcgPz8gc3BhY2luZyxcblx0XHR9KTtcblx0fTtcblx0Y29uc3QgcmVuZGVyQnVmZmVyID0gKCk6IHZvaWQgPT4ge1xuXHRcdGZvciAoY29uc3QgYnVmZmVyIG9mIGJ1ZmZlcnMpIHtcblx0XHRcdGNvbnN0IHsgaGVhZGVyLCB2YWx1ZSwgZnVsbCB9ID0gYnVmZmVyO1xuXHRcdFx0aWYgKChoZWFkZXIgPT09IHVuZGVmaW5lZCB8fCBoZWFkZXIubGVuZ3RoID09PSAwKSAmJiB2YWx1ZS5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cdFx0XHRwcmludEJ1ZmZlcihidWZmZXIsIHVuZGVmaW5lZCwgcmV0YWluTG9nID09PSB0cnVlICYmIGZ1bGwubGVuZ3RoID4gMCk7XG5cdFx0fVxuXHR9O1xuXHRjb25zdCBtZXNzYWdlID0gKGJ1ZmZlcjogQnVmZmVyRW50cnksIG1zZzogc3RyaW5nLCBtb3B0cz86IFRhc2tMb2dNZXNzYWdlT3B0aW9ucykgPT4ge1xuXHRcdGNsZWFyKGZhbHNlKTtcblx0XHRpZiAoKG1vcHRzPy5yYXcgIT09IHRydWUgfHwgIWxhc3RNZXNzYWdlV2FzUmF3KSAmJiBidWZmZXIudmFsdWUgIT09ICcnKSB7XG5cdFx0XHRidWZmZXIudmFsdWUgKz0gJ1xcbic7XG5cdFx0fVxuXHRcdGJ1ZmZlci52YWx1ZSArPSBzdHJpcERlc3RydWN0aXZlQU5TSShtc2cpO1xuXHRcdGxhc3RNZXNzYWdlV2FzUmF3ID0gbW9wdHM/LnJhdyA9PT0gdHJ1ZTtcblx0XHRpZiAob3B0cy5saW1pdCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjb25zdCBsaW5lcyA9IGJ1ZmZlci52YWx1ZS5zcGxpdCgnXFxuJyk7XG5cdFx0XHRjb25zdCBsaW5lc1RvUmVtb3ZlID0gbGluZXMubGVuZ3RoIC0gb3B0cy5saW1pdDtcblx0XHRcdGlmIChsaW5lc1RvUmVtb3ZlID4gMCkge1xuXHRcdFx0XHRjb25zdCByZW1vdmVkTGluZXMgPSBsaW5lcy5zcGxpY2UoMCwgbGluZXNUb1JlbW92ZSk7XG5cdFx0XHRcdGlmIChyZXRhaW5Mb2cpIHtcblx0XHRcdFx0XHRidWZmZXIuZnVsbCArPSAoYnVmZmVyLmZ1bGwgPT09ICcnID8gJycgOiAnXFxuJykgKyByZW1vdmVkTGluZXMuam9pbignXFxuJyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGJ1ZmZlci52YWx1ZSA9IGxpbmVzLmpvaW4oJ1xcbicpO1xuXHRcdH1cblx0XHRpZiAoaXNUVFkpIHtcblx0XHRcdHByaW50QnVmZmVycygpO1xuXHRcdH1cblx0fTtcblx0Y29uc3QgcHJpbnRCdWZmZXJzID0gKCk6IHZvaWQgPT4ge1xuXHRcdGZvciAoY29uc3QgYnVmZmVyIG9mIGJ1ZmZlcnMpIHtcblx0XHRcdGlmIChidWZmZXIucmVzdWx0KSB7XG5cdFx0XHRcdGlmIChidWZmZXIucmVzdWx0LnN0YXR1cyA9PT0gJ2Vycm9yJykge1xuXHRcdFx0XHRcdGxvZy5lcnJvcihidWZmZXIucmVzdWx0Lm1lc3NhZ2UsIHsgb3V0cHV0LCBzZWNvbmRhcnlTeW1ib2wsIHNwYWNpbmc6IDAgfSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0bG9nLnN1Y2Nlc3MoYnVmZmVyLnJlc3VsdC5tZXNzYWdlLCB7IG91dHB1dCwgc2Vjb25kYXJ5U3ltYm9sLCBzcGFjaW5nOiAwIH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKGJ1ZmZlci52YWx1ZSAhPT0gJycpIHtcblx0XHRcdFx0cHJpbnRCdWZmZXIoYnVmZmVyLCAwKTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cdGNvbnN0IGNvbXBsZXRlQnVmZmVyID0gKGJ1ZmZlcjogQnVmZmVyRW50cnksIHJlc3VsdDogQnVmZmVyRW50cnlbJ3Jlc3VsdCddKTogdm9pZCA9PiB7XG5cdFx0Y2xlYXIoZmFsc2UpO1xuXG5cdFx0YnVmZmVyLnJlc3VsdCA9IHJlc3VsdDtcblxuXHRcdGlmIChpc1RUWSkge1xuXHRcdFx0cHJpbnRCdWZmZXJzKCk7XG5cdFx0fVxuXHR9O1xuXG5cdHJldHVybiB7XG5cdFx0bWVzc2FnZShtc2c6IHN0cmluZywgbW9wdHM/OiBUYXNrTG9nTWVzc2FnZU9wdGlvbnMpIHtcblx0XHRcdG1lc3NhZ2UoYnVmZmVyc1swXSwgbXNnLCBtb3B0cyk7XG5cdFx0fSxcblx0XHRncm91cChuYW1lOiBzdHJpbmcpIHtcblx0XHRcdGNvbnN0IGJ1ZmZlcjogQnVmZmVyRW50cnkgPSB7XG5cdFx0XHRcdGhlYWRlcjogbmFtZSxcblx0XHRcdFx0dmFsdWU6ICcnLFxuXHRcdFx0XHRmdWxsOiAnJyxcblx0XHRcdH07XG5cdFx0XHRidWZmZXJzLnB1c2goYnVmZmVyKTtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdG1lc3NhZ2UobXNnOiBzdHJpbmcsIG1vcHRzPzogVGFza0xvZ01lc3NhZ2VPcHRpb25zKSB7XG5cdFx0XHRcdFx0bWVzc2FnZShidWZmZXIsIG1zZywgbW9wdHMpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRlcnJvcihtZXNzYWdlOiBzdHJpbmcpIHtcblx0XHRcdFx0XHRjb21wbGV0ZUJ1ZmZlcihidWZmZXIsIHtcblx0XHRcdFx0XHRcdHN0YXR1czogJ2Vycm9yJyxcblx0XHRcdFx0XHRcdG1lc3NhZ2UsXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHN1Y2Nlc3MobWVzc2FnZTogc3RyaW5nKSB7XG5cdFx0XHRcdFx0Y29tcGxldGVCdWZmZXIoYnVmZmVyLCB7XG5cdFx0XHRcdFx0XHRzdGF0dXM6ICdzdWNjZXNzJyxcblx0XHRcdFx0XHRcdG1lc3NhZ2UsXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0sXG5cdFx0XHR9O1xuXHRcdH0sXG5cdFx0ZXJyb3IobWVzc2FnZTogc3RyaW5nLCBvcHRzPzogVGFza0xvZ0NvbXBsZXRpb25PcHRpb25zKTogdm9pZCB7XG5cdFx0XHRjbGVhcih0cnVlKTtcblx0XHRcdGxvZy5lcnJvcihtZXNzYWdlLCB7IG91dHB1dCwgc2Vjb25kYXJ5U3ltYm9sLCBzcGFjaW5nOiAxIH0pO1xuXHRcdFx0aWYgKG9wdHM/LnNob3dMb2cgIT09IGZhbHNlKSB7XG5cdFx0XHRcdHJlbmRlckJ1ZmZlcigpO1xuXHRcdFx0fVxuXHRcdFx0Ly8gY2xlYXIgYnVmZmVyIHNpbmNlIGVycm9yIGlzIGFuIGVuZCBzdGF0ZVxuXHRcdFx0YnVmZmVycy5zcGxpY2UoMSwgYnVmZmVycy5sZW5ndGggLSAxKTtcblx0XHRcdGJ1ZmZlcnNbMF0udmFsdWUgPSAnJztcblx0XHRcdGJ1ZmZlcnNbMF0uZnVsbCA9ICcnO1xuXHRcdH0sXG5cdFx0c3VjY2VzcyhtZXNzYWdlOiBzdHJpbmcsIG9wdHM/OiBUYXNrTG9nQ29tcGxldGlvbk9wdGlvbnMpOiB2b2lkIHtcblx0XHRcdGNsZWFyKHRydWUpO1xuXHRcdFx0bG9nLnN1Y2Nlc3MobWVzc2FnZSwgeyBvdXRwdXQsIHNlY29uZGFyeVN5bWJvbCwgc3BhY2luZzogMSB9KTtcblx0XHRcdGlmIChvcHRzPy5zaG93TG9nID09PSB0cnVlKSB7XG5cdFx0XHRcdHJlbmRlckJ1ZmZlcigpO1xuXHRcdFx0fVxuXHRcdFx0Ly8gY2xlYXIgYnVmZmVyIHNpbmNlIHN1Y2Nlc3MgaXMgYW4gZW5kIHN0YXRlXG5cdFx0XHRidWZmZXJzLnNwbGljZSgxLCBidWZmZXJzLmxlbmd0aCAtIDEpO1xuXHRcdFx0YnVmZmVyc1swXS52YWx1ZSA9ICcnO1xuXHRcdFx0YnVmZmVyc1swXS5mdWxsID0gJyc7XG5cdFx0fSxcblx0fTtcbn07XG4iLCAiaW1wb3J0IHsgc2V0dGluZ3MsIFRleHRQcm9tcHQgfSBmcm9tICdAY2xhY2svY29yZSc7XG5pbXBvcnQgY29sb3IgZnJvbSAncGljb2NvbG9ycyc7XG5pbXBvcnQgeyB0eXBlIENvbW1vbk9wdGlvbnMsIFNfQkFSLCBTX0JBUl9FTkQsIHN5bWJvbCB9IGZyb20gJy4vY29tbW9uLmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBUZXh0T3B0aW9ucyBleHRlbmRzIENvbW1vbk9wdGlvbnMge1xuXHRtZXNzYWdlOiBzdHJpbmc7XG5cdHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuXHRkZWZhdWx0VmFsdWU/OiBzdHJpbmc7XG5cdGluaXRpYWxWYWx1ZT86IHN0cmluZztcblx0dmFsaWRhdGU/OiAodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkgPT4gc3RyaW5nIHwgRXJyb3IgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBjb25zdCB0ZXh0ID0gKG9wdHM6IFRleHRPcHRpb25zKSA9PiB7XG5cdHJldHVybiBuZXcgVGV4dFByb21wdCh7XG5cdFx0dmFsaWRhdGU6IG9wdHMudmFsaWRhdGUsXG5cdFx0cGxhY2Vob2xkZXI6IG9wdHMucGxhY2Vob2xkZXIsXG5cdFx0ZGVmYXVsdFZhbHVlOiBvcHRzLmRlZmF1bHRWYWx1ZSxcblx0XHRpbml0aWFsVmFsdWU6IG9wdHMuaW5pdGlhbFZhbHVlLFxuXHRcdG91dHB1dDogb3B0cy5vdXRwdXQsXG5cdFx0c2lnbmFsOiBvcHRzLnNpZ25hbCxcblx0XHRpbnB1dDogb3B0cy5pbnB1dCxcblx0XHRyZW5kZXIoKSB7XG5cdFx0XHRjb25zdCBoYXNHdWlkZSA9IG9wdHM/LndpdGhHdWlkZSA/PyBzZXR0aW5ncy53aXRoR3VpZGU7XG5cdFx0XHRjb25zdCB0aXRsZVByZWZpeCA9IGAke2hhc0d1aWRlID8gYCR7Y29sb3IuZ3JheShTX0JBUil9XFxuYCA6ICcnfSR7c3ltYm9sKHRoaXMuc3RhdGUpfSAgYDtcblx0XHRcdGNvbnN0IHRpdGxlID0gYCR7dGl0bGVQcmVmaXh9JHtvcHRzLm1lc3NhZ2V9XFxuYDtcblx0XHRcdGNvbnN0IHBsYWNlaG9sZGVyID0gb3B0cy5wbGFjZWhvbGRlclxuXHRcdFx0XHQ/IGNvbG9yLmludmVyc2Uob3B0cy5wbGFjZWhvbGRlclswXSkgKyBjb2xvci5kaW0ob3B0cy5wbGFjZWhvbGRlci5zbGljZSgxKSlcblx0XHRcdFx0OiBjb2xvci5pbnZlcnNlKGNvbG9yLmhpZGRlbignXycpKTtcblx0XHRcdGNvbnN0IHVzZXJJbnB1dCA9ICF0aGlzLnVzZXJJbnB1dCA/IHBsYWNlaG9sZGVyIDogdGhpcy51c2VySW5wdXRXaXRoQ3Vyc29yO1xuXHRcdFx0Y29uc3QgdmFsdWUgPSB0aGlzLnZhbHVlID8/ICcnO1xuXG5cdFx0XHRzd2l0Y2ggKHRoaXMuc3RhdGUpIHtcblx0XHRcdFx0Y2FzZSAnZXJyb3InOiB7XG5cdFx0XHRcdFx0Y29uc3QgZXJyb3JUZXh0ID0gdGhpcy5lcnJvciA/IGAgICR7Y29sb3IueWVsbG93KHRoaXMuZXJyb3IpfWAgOiAnJztcblx0XHRcdFx0XHRjb25zdCBlcnJvclByZWZpeCA9IGhhc0d1aWRlID8gYCR7Y29sb3IueWVsbG93KFNfQkFSKX0gIGAgOiAnJztcblx0XHRcdFx0XHRjb25zdCBlcnJvclByZWZpeEVuZCA9IGhhc0d1aWRlID8gY29sb3IueWVsbG93KFNfQkFSX0VORCkgOiAnJztcblx0XHRcdFx0XHRyZXR1cm4gYCR7dGl0bGUudHJpbSgpfVxcbiR7ZXJyb3JQcmVmaXh9JHt1c2VySW5wdXR9XFxuJHtlcnJvclByZWZpeEVuZH0ke2Vycm9yVGV4dH1cXG5gO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNhc2UgJ3N1Ym1pdCc6IHtcblx0XHRcdFx0XHRjb25zdCB2YWx1ZVRleHQgPSB2YWx1ZSA/IGAgICR7Y29sb3IuZGltKHZhbHVlKX1gIDogJyc7XG5cdFx0XHRcdFx0Y29uc3Qgc3VibWl0UHJlZml4ID0gaGFzR3VpZGUgPyBjb2xvci5ncmF5KFNfQkFSKSA6ICcnO1xuXHRcdFx0XHRcdHJldHVybiBgJHt0aXRsZX0ke3N1Ym1pdFByZWZpeH0ke3ZhbHVlVGV4dH1gO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNhc2UgJ2NhbmNlbCc6IHtcblx0XHRcdFx0XHRjb25zdCB2YWx1ZVRleHQgPSB2YWx1ZSA/IGAgICR7Y29sb3Iuc3RyaWtldGhyb3VnaChjb2xvci5kaW0odmFsdWUpKX1gIDogJyc7XG5cdFx0XHRcdFx0Y29uc3QgY2FuY2VsUHJlZml4ID0gaGFzR3VpZGUgPyBjb2xvci5ncmF5KFNfQkFSKSA6ICcnO1xuXHRcdFx0XHRcdHJldHVybiBgJHt0aXRsZX0ke2NhbmNlbFByZWZpeH0ke3ZhbHVlVGV4dH0ke3ZhbHVlLnRyaW0oKSA/IGBcXG4ke2NhbmNlbFByZWZpeH1gIDogJyd9YDtcblx0XHRcdFx0fVxuXHRcdFx0XHRkZWZhdWx0OiB7XG5cdFx0XHRcdFx0Y29uc3QgZGVmYXVsdFByZWZpeCA9IGhhc0d1aWRlID8gYCR7Y29sb3IuY3lhbihTX0JBUil9ICBgIDogJyc7XG5cdFx0XHRcdFx0Y29uc3QgZGVmYXVsdFByZWZpeEVuZCA9IGhhc0d1aWRlID8gY29sb3IuY3lhbihTX0JBUl9FTkQpIDogJyc7XG5cdFx0XHRcdFx0cmV0dXJuIGAke3RpdGxlfSR7ZGVmYXVsdFByZWZpeH0ke3VzZXJJbnB1dH1cXG4ke2RlZmF1bHRQcmVmaXhFbmR9XFxuYDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cdH0pLnByb21wdCgpIGFzIFByb21pc2U8c3RyaW5nIHwgc3ltYm9sPjtcbn07XG4iLCAiIyEvdXNyL2Jpbi9lbnYgbm9kZVxyXG5pbXBvcnQgZnMgZnJvbSAnZnMnO1xyXG5pbXBvcnQgb3MgZnJvbSAnb3MnO1xyXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcclxuaW1wb3J0IHsgc3Bhd24sIGV4ZWNTeW5jIH0gZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XHJcbmltcG9ydCBjb2xvciBmcm9tICdwaWNvY29sb3JzJztcclxuaW1wb3J0IHsgYm9vdHN0cmFwTWNwUmVnaXN0cmF0aW9uIH0gZnJvbSAnQDBjdHgvbWNwL2Rpc3QvYm9vdHN0cmFwJztcclxuaW1wb3J0IHsgc2VuZFRvRGFlbW9uIH0gZnJvbSAnQDBjdHgvbWNwL2Rpc3QvY2xpZW50JztcclxuaW1wb3J0IHsgbGlzdENvbmZpZywgZ2V0Q29uZmlnVmFsdWUsIHNldENvbmZpZ1ZhbHVlLCBpc1ZhbGlkQ29uZmlnS2V5LCBnZXRDb25maWdQYXRoIH0gZnJvbSAnQDBjdHgvY29yZSc7XHJcbmltcG9ydCB0eXBlIHsgQXBwQ29uZmlnIH0gZnJvbSAnQDBjdHgvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgICBpbnN0YWxsU2VydmljZSBhcyBpbnN0YWxsU2VydmljZVdpbmRvd3MsXHJcbiAgICBlbmFibGVTZXJ2aWNlIGFzIGVuYWJsZVNlcnZpY2VXaW5kb3dzLFxyXG4gICAgZGlzYWJsZVNlcnZpY2UgYXMgZGlzYWJsZVNlcnZpY2VXaW5kb3dzLFxyXG4gICAgdW5pbnN0YWxsU2VydmljZSBhcyB1bmluc3RhbGxTZXJ2aWNlV2luZG93cyxcclxuICAgIHN0YXR1c1NlcnZpY2UgYXMgc3RhdHVzU2VydmljZVdpbmRvd3MsXHJcbiAgICBzdGFydFNlcnZpY2UgYXMgc3RhcnRTZXJ2aWNlV2luZG93cyxcclxuICAgIHN0b3BTZXJ2aWNlIGFzIHN0b3BTZXJ2aWNlV2luZG93cyxcclxuICAgIHJlc3RhcnRTZXJ2aWNlIGFzIHJlc3RhcnRTZXJ2aWNlV2luZG93cyxcclxufSBmcm9tICcuL3NlcnZpY2Utd2luZG93cyc7XHJcbmltcG9ydCB7XHJcbiAgICBpbnN0YWxsU2VydmljZSBhcyBpbnN0YWxsU2VydmljZU1hYyxcclxuICAgIGVuYWJsZVNlcnZpY2UgYXMgZW5hYmxlU2VydmljZU1hYyxcclxuICAgIGRpc2FibGVTZXJ2aWNlIGFzIGRpc2FibGVTZXJ2aWNlTWFjLFxyXG4gICAgdW5pbnN0YWxsU2VydmljZSBhcyB1bmluc3RhbGxTZXJ2aWNlTWFjLFxyXG4gICAgc3RhdHVzU2VydmljZSBhcyBzdGF0dXNTZXJ2aWNlTWFjLFxyXG4gICAgc3RhcnRTZXJ2aWNlIGFzIHN0YXJ0U2VydmljZU1hYyxcclxuICAgIHN0b3BTZXJ2aWNlIGFzIHN0b3BTZXJ2aWNlTWFjLFxyXG4gICAgcmVzdGFydFNlcnZpY2UgYXMgcmVzdGFydFNlcnZpY2VNYWMsXHJcbn0gZnJvbSAnLi9zZXJ2aWNlLW1hY29zJztcclxuaW1wb3J0IHtcclxuICAgIGluc3RhbGxTZXJ2aWNlIGFzIGluc3RhbGxTZXJ2aWNlTGludXgsXHJcbiAgICBlbmFibGVTZXJ2aWNlIGFzIGVuYWJsZVNlcnZpY2VMaW51eCxcclxuICAgIGRpc2FibGVTZXJ2aWNlIGFzIGRpc2FibGVTZXJ2aWNlTGludXgsXHJcbiAgICB1bmluc3RhbGxTZXJ2aWNlIGFzIHVuaW5zdGFsbFNlcnZpY2VMaW51eCxcclxuICAgIHN0YXR1c1NlcnZpY2UgYXMgc3RhdHVzU2VydmljZUxpbnV4LFxyXG4gICAgc3RhcnRTZXJ2aWNlIGFzIHN0YXJ0U2VydmljZUxpbnV4LFxyXG4gICAgc3RvcFNlcnZpY2UgYXMgc3RvcFNlcnZpY2VMaW51eCxcclxuICAgIHJlc3RhcnRTZXJ2aWNlIGFzIHJlc3RhcnRTZXJ2aWNlTGludXgsXHJcbn0gZnJvbSAnLi9zZXJ2aWNlLWxpbnV4JztcclxuaW1wb3J0IHsgY29tbWFuZEF1dGhMb2dpbiwgY29tbWFuZEF1dGhMb2dvdXQsIGNvbW1hbmRBdXRoU3RhdHVzLCBjb21tYW5kQXV0aFJvdGF0ZSwgY2hlY2tUb2tlbkV4cGlyeVdhcm5pbmcsIHJlc29sdmVUb2tlbiB9IGZyb20gJy4vYXV0aCc7XHJcbmltcG9ydCB7IGdldENvbm5lY3RvclN0YXRlUGF0aCwgcmVhZENvbm5lY3RvclN0YXRlLCByZWdpc3RlckNvbm5lY3Rvciwgd3JpdGVDb25uZWN0b3JTdGF0ZSB9IGZyb20gJy4vY29ubmVjdG9yJztcclxuaW1wb3J0IHsgZmV0Y2hDb25uZWN0b3JDYXBhYmlsaXRpZXMsIHJlZ2lzdGVyQ29ubmVjdG9ySW5DbG91ZCwgc2VuZENvbm5lY3RvckV2ZW50cywgc2VuZENvbm5lY3RvckhlYXJ0YmVhdCB9IGZyb20gJy4vY2xvdWQnO1xyXG5pbXBvcnQgeyBydW5Db25uZWN0b3JSdW50aW1lIH0gZnJvbSAnLi9jb25uZWN0b3ItcnVudGltZSc7XHJcbmltcG9ydCB7XHJcbiAgICBnZXRDb25uZWN0b3JRdWV1ZVBhdGgsXHJcbiAgICBnZXRDb25uZWN0b3JRdWV1ZVN0YXRzLFxyXG4gICAgZ2V0UmVhZHlDb25uZWN0b3JFdmVudHMsXHJcbiAgICBsaXN0UXVldWVkQ29ubmVjdG9yRXZlbnRzLFxyXG4gICAgbWFya0Nvbm5lY3RvckV2ZW50c0RlbGl2ZXJlZCxcclxuICAgIG1hcmtDb25uZWN0b3JFdmVudHNGYWlsZWQsXHJcbiAgICBwdXJnZUNvbm5lY3RvclF1ZXVlXHJcbn0gZnJvbSAnLi9jb25uZWN0b3ItcXVldWUnO1xyXG5pbXBvcnQgeyBhcHBlbmRDbGlPcHNMb2dFbnRyeSwgY2xlYXJDbGlPcHNMb2csIGdldENsaU9wc0xvZ1BhdGgsIHJlYWRDbGlPcHNMb2cgfSBmcm9tICcuL29wcy1sb2cnO1xyXG5pbXBvcnQgeyBkcmFpbkNvbm5lY3RvclF1ZXVlIH0gZnJvbSAnLi9jb25uZWN0b3ItcXVldWUtZHJhaW4nO1xyXG5pbXBvcnQgeyBydW5JbnRlcmFjdGl2ZVNoZWxsIH0gZnJvbSAnLi9zaGVsbCc7XHJcbmltcG9ydCB7IHJ1blJlbGVhc2VQdWJsaXNoIH0gZnJvbSAnLi9yZWxlYXNlJztcclxuXHJcbnR5cGUgU3VwcG9ydGVkQ2xpZW50ID0gJ2NsYXVkZScgfCAnY3Vyc29yJyB8ICd3aW5kc3VyZic7XHJcbnR5cGUgQ2hlY2tTdGF0dXMgPSAncGFzcycgfCAnd2FybicgfCAnZmFpbCc7XHJcbnR5cGUgQm9vdHN0cmFwUmVzdWx0ID0geyBjbGllbnQ6IHN0cmluZzsgc3RhdHVzOiBzdHJpbmc7IGNvbmZpZ1BhdGg6IHN0cmluZzsgbWVzc2FnZT86IHN0cmluZyB9O1xyXG5cclxuaW50ZXJmYWNlIERvY3RvckNoZWNrIHtcclxuICAgIGlkOiBzdHJpbmc7XHJcbiAgICBzdGF0dXM6IENoZWNrU3RhdHVzO1xyXG4gICAgbWVzc2FnZTogc3RyaW5nO1xyXG4gICAgZGV0YWlscz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xyXG59XHJcblxyXG5pbnRlcmZhY2UgUGFyc2VkQXJncyB7XHJcbiAgICBjb21tYW5kOiBzdHJpbmc7XHJcbiAgICBzdWJjb21tYW5kPzogc3RyaW5nO1xyXG4gICAgc2VydmljZUFjdGlvbj86IHN0cmluZztcclxuICAgIHBvc2l0aW9uYWxBcmdzOiBzdHJpbmdbXTtcclxuICAgIGZsYWdzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBib29sZWFuPjtcclxufVxyXG5cclxuY29uc3QgREJfUEFUSCA9IHByb2Nlc3MuZW52LkNUWF9EQl9QQVRIIHx8IHBhdGguam9pbihvcy5ob21lZGlyKCksICcuMGN0eCcsICcwY3R4LmRiJyk7XHJcbmNvbnN0IEtFWV9QQVRIID0gcGF0aC5qb2luKG9zLmhvbWVkaXIoKSwgJy4wY3R4JywgJ21hc3Rlci5rZXknKTtcclxuY29uc3QgU09DS0VUX1BBVEggPSBvcy5wbGF0Zm9ybSgpID09PSAnd2luMzInXHJcbiAgICA/ICdcXFxcXFxcXC5cXFxccGlwZVxcXFwwY3R4LnNvY2snXHJcbiAgICA6IHBhdGguam9pbihvcy5ob21lZGlyKCksICcuMGN0eCcsICcwY3R4LnNvY2snKTtcclxuXHJcbmNvbnN0IFNVUFBPUlRFRF9DTElFTlRTOiBTdXBwb3J0ZWRDbGllbnRbXSA9IFsnY2xhdWRlJywgJ2N1cnNvcicsICd3aW5kc3VyZiddO1xyXG5cclxuZnVuY3Rpb24gcGFyc2VBcmdzKGFyZ3Y6IHN0cmluZ1tdKTogUGFyc2VkQXJncyB7XHJcbiAgICBjb25zdCBbY29tbWFuZCA9ICdoZWxwJywgbWF5YmVTdWJjb21tYW5kLCAuLi5yZXN0XSA9IGFyZ3Y7XHJcbiAgICBjb25zdCBoYXNTdWJjb21tYW5kID0gY29tbWFuZCA9PT0gJ2RhZW1vbidcclxuICAgICAgICB8fCBjb21tYW5kID09PSAnYXV0aCdcclxuICAgICAgICB8fCBjb21tYW5kID09PSAnY29uZmlnJ1xyXG4gICAgICAgIHx8IGNvbW1hbmQgPT09ICdzeW5jJ1xyXG4gICAgICAgIHx8IGNvbW1hbmQgPT09ICdjb25uZWN0b3InXHJcbiAgICAgICAgfHwgY29tbWFuZCA9PT0gJ3JlbGVhc2UnO1xyXG4gICAgY29uc3QgdG9rZW5zID0gaGFzU3ViY29tbWFuZFxyXG4gICAgICAgID8gcmVzdFxyXG4gICAgICAgIDogW21heWJlU3ViY29tbWFuZCwgLi4ucmVzdF0uZmlsdGVyKCh0b2tlbik6IHRva2VuIGlzIHN0cmluZyA9PiBCb29sZWFuKHRva2VuKSk7XHJcbiAgICBjb25zdCBmbGFnczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgYm9vbGVhbj4gPSB7fTtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRva2Vucy5sZW5ndGg7IGkgKz0gMSkge1xyXG4gICAgICAgIGNvbnN0IHRva2VuID0gdG9rZW5zW2ldO1xyXG4gICAgICAgIGlmICghdG9rZW4uc3RhcnRzV2l0aCgnLS0nKSkgY29udGludWU7XHJcblxyXG4gICAgICAgIGNvbnN0IFtyYXdLZXksIHJhd1ZhbHVlXSA9IHRva2VuLnNwbGl0KCc9Jyk7XHJcbiAgICAgICAgY29uc3Qga2V5ID0gcmF3S2V5LnNsaWNlKDIpO1xyXG5cclxuICAgICAgICBpZiAocmF3VmFsdWUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBmbGFnc1trZXldID0gcmF3VmFsdWU7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgbmV4dCA9IHRva2Vuc1tpICsgMV07XHJcbiAgICAgICAgaWYgKG5leHQgJiYgIW5leHQuc3RhcnRzV2l0aCgnLS0nKSkge1xyXG4gICAgICAgICAgICBmbGFnc1trZXldID0gbmV4dDtcclxuICAgICAgICAgICAgaSArPSAxO1xyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZsYWdzW2tleV0gPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHN1YiA9IGhhc1N1YmNvbW1hbmQgPyBtYXliZVN1YmNvbW1hbmQgOiB1bmRlZmluZWQ7XHJcbiAgICAvLyAzLWxldmVsOiBkYWVtb258Y29ubmVjdG9yIHNlcnZpY2UgPGFjdGlvbj5cclxuICAgIGNvbnN0IHNlcnZpY2VBY3Rpb24gPSAoc3ViID09PSAnc2VydmljZScgJiYgdG9rZW5zWzBdICYmICF0b2tlbnNbMF0uc3RhcnRzV2l0aCgnLS0nKSlcclxuICAgICAgICA/IHRva2Vuc1swXVxyXG4gICAgICAgIDogdW5kZWZpbmVkO1xyXG4gICAgLy8gQ29sbGVjdCBub24tZmxhZyBwb3NpdGlvbmFsIGFyZ3MgKGZvciBjb25maWcgZ2V0L3NldCBrZXkgdmFsdWUpXHJcbiAgICBjb25zdCBwb3NpdGlvbmFsQXJncyA9IHRva2Vucy5maWx0ZXIoYXJnID0+ICFhcmcuc3RhcnRzV2l0aCgnLS0nKSk7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIGNvbW1hbmQsXHJcbiAgICAgICAgc3ViY29tbWFuZDogc3ViLFxyXG4gICAgICAgIHNlcnZpY2VBY3Rpb24sXHJcbiAgICAgICAgcG9zaXRpb25hbEFyZ3MsXHJcbiAgICAgICAgZmxhZ3NcclxuICAgIH07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHBhcnNlQ2xpZW50cyhyYXc6IHN0cmluZyB8IGJvb2xlYW4gfCB1bmRlZmluZWQpOiBTdXBwb3J0ZWRDbGllbnRbXSB7XHJcbiAgICBpZiAoIXJhdyB8fCB0eXBlb2YgcmF3ICE9PSAnc3RyaW5nJykgcmV0dXJuIFNVUFBPUlRFRF9DTElFTlRTO1xyXG4gICAgY29uc3Qgbm9ybWFsaXplZCA9IHJhdy50cmltKCkudG9Mb3dlckNhc2UoKTtcclxuICAgIGlmIChub3JtYWxpemVkID09PSAnYWxsJykgcmV0dXJuIFNVUFBPUlRFRF9DTElFTlRTO1xyXG5cclxuICAgIGNvbnN0IHBhcnNlZCA9IG5vcm1hbGl6ZWRcclxuICAgICAgICAuc3BsaXQoJywnKVxyXG4gICAgICAgIC5tYXAoaXRlbSA9PiBpdGVtLnRyaW0oKSlcclxuICAgICAgICAuZmlsdGVyKChpdGVtKTogaXRlbSBpcyBTdXBwb3J0ZWRDbGllbnQgPT4gU1VQUE9SVEVEX0NMSUVOVFMuaW5jbHVkZXMoaXRlbSBhcyBTdXBwb3J0ZWRDbGllbnQpKTtcclxuXHJcbiAgICByZXR1cm4gcGFyc2VkLmxlbmd0aCA+IDAgPyBwYXJzZWQgOiBTVVBQT1JURURfQ0xJRU5UUztcclxufVxyXG5cclxuYXN5bmMgZnVuY3Rpb24gaXNEYWVtb25SZWFjaGFibGUoKTogUHJvbWlzZTx7IG9rOiBib29sZWFuOyBlcnJvcj86IHN0cmluZzsgaGVhbHRoPzogYW55IH0+IHtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgY29uc3QgaGVhbHRoID0gYXdhaXQgc2VuZFRvRGFlbW9uKCdoZWFsdGgnLCB7fSk7XHJcbiAgICAgICAgcmV0dXJuIHsgb2s6IHRydWUsIGhlYWx0aCB9O1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBvazogZmFsc2UsXHJcbiAgICAgICAgICAgIGVycm9yOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcilcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiByZXNvbHZlRGFlbW9uRW50cnlwb2ludCgpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgY2FuZGlkYXRlcyA9IFtcclxuICAgICAgICBwYXRoLnJlc29sdmUocHJvY2Vzcy5jd2QoKSwgJ3BhY2thZ2VzJywgJ2RhZW1vbicsICdkaXN0JywgJ2luZGV4LmpzJyksXHJcbiAgICAgICAgcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgJy4uJywgJy4uJywgJ2RhZW1vbicsICdkaXN0JywgJ2luZGV4LmpzJyksXHJcbiAgICAgICAgKCgpID0+IHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXF1aXJlLnJlc29sdmUoJ0AwY3R4L2RhZW1vbi9kaXN0L2luZGV4LmpzJyk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2gge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSkoKVxyXG4gICAgXS5maWx0ZXIoQm9vbGVhbik7XHJcblxyXG4gICAgZm9yIChjb25zdCBjYW5kaWRhdGUgb2YgY2FuZGlkYXRlcykge1xyXG4gICAgICAgIGlmIChmcy5leGlzdHNTeW5jKGNhbmRpZGF0ZSkpIHJldHVybiBjYW5kaWRhdGU7XHJcbiAgICB9XHJcblxyXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgcmVzb2x2ZSBkYWVtb24gZW50cnlwb2ludC4gUnVuIGBucG0gcnVuIGJ1aWxkYCBmaXJzdC4nKTtcclxufVxyXG5cclxuZnVuY3Rpb24gcmVzb2x2ZUNsaUVudHJ5cG9pbnQoKTogc3RyaW5nIHtcclxuICAgIGlmIChwcm9jZXNzLmFyZ3ZbMV0pIHtcclxuICAgICAgICByZXR1cm4gcGF0aC5yZXNvbHZlKHByb2Nlc3MuYXJndlsxXSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gX19maWxlbmFtZTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0SG9zdGVkRGFzaGJvYXJkVXJsKCk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBjb25maWd1cmVkID0gZ2V0Q29uZmlnVmFsdWUoJ3VpLnVybCcpO1xyXG4gICAgaWYgKHR5cGVvZiBjb25maWd1cmVkID09PSAnc3RyaW5nJyAmJiBjb25maWd1cmVkLnRyaW0oKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgcmV0dXJuIGNvbmZpZ3VyZWQudHJpbSgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuICdodHRwczovL2FwcC4wY3R4LmNvbSc7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIG9wZW5VcmwodXJsOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgY29uc3QgcGxhdGZvcm0gPSBvcy5wbGF0Zm9ybSgpO1xyXG4gICAgICAgIGlmIChwbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xyXG4gICAgICAgICAgICBleGVjU3luYyhgc3RhcnQgXCJcIiBcIiR7dXJsfVwiYCwgeyBzdGRpbzogJ2lnbm9yZScgfSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChwbGF0Zm9ybSA9PT0gJ2RhcndpbicpIHtcclxuICAgICAgICAgICAgZXhlY1N5bmMoYG9wZW4gXCIke3VybH1cImAsIHsgc3RkaW86ICdpZ25vcmUnIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGV4ZWNTeW5jKGB4ZGctb3BlbiBcIiR7dXJsfVwiYCwgeyBzdGRpbzogJ2lnbm9yZScgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSBjYXRjaCB7XHJcbiAgICAgICAgLy8gQmVzdC1lZmZvcnQgb3BlbiBvbmx5LiBVc2VyIGNhbiBjb3B5IFVSTC5cclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gc3RhcnREYWVtb25EZXRhY2hlZCgpOiB2b2lkIHtcclxuICAgIGNvbnN0IGVudHJ5ID0gcmVzb2x2ZURhZW1vbkVudHJ5cG9pbnQoKTtcclxuICAgIGNvbnN0IGNoaWxkID0gc3Bhd24ocHJvY2Vzcy5leGVjUGF0aCwgW2VudHJ5XSwge1xyXG4gICAgICAgIGRldGFjaGVkOiB0cnVlLFxyXG4gICAgICAgIHN0ZGlvOiAnaWdub3JlJ1xyXG4gICAgfSk7XHJcbiAgICBjaGlsZC51bnJlZigpO1xyXG59XHJcblxyXG5hc3luYyBmdW5jdGlvbiB3YWl0Rm9yRGFlbW9uKHRpbWVvdXRNcyA9IDEwMDAwKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XHJcbiAgICB3aGlsZSAoRGF0ZS5ub3coKSAtIHN0YXJ0IDwgdGltZW91dE1zKSB7XHJcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gYXdhaXQgaXNEYWVtb25SZWFjaGFibGUoKTtcclxuICAgICAgICBpZiAoc3RhdHVzLm9rKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMzAwKSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJ1bkJvb3RzdHJhcChjbGllbnRzOiBTdXBwb3J0ZWRDbGllbnRbXSwgZHJ5UnVuOiBib29sZWFuKTogUmV0dXJuVHlwZTx0eXBlb2YgYm9vdHN0cmFwTWNwUmVnaXN0cmF0aW9uPiB7XHJcbiAgICByZXR1cm4gYm9vdHN0cmFwTWNwUmVnaXN0cmF0aW9uKHtcclxuICAgICAgICBjbGllbnRzLFxyXG4gICAgICAgIGRyeVJ1bixcclxuICAgICAgICBzZXJ2ZXJOYW1lOiAnMGN0eCdcclxuICAgIH0pO1xyXG59XHJcblxyXG5hc3luYyBmdW5jdGlvbiBwcmludEJvb3RzdHJhcFJlc3VsdHMocmVzdWx0czogQm9vdHN0cmFwUmVzdWx0W10sIGRyeVJ1bjogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc3QgcCA9IGF3YWl0IGltcG9ydCgnQGNsYWNrL3Byb21wdHMnKTtcclxuICAgIGNvbnN0IG1vZGUgPSBkcnlSdW4gPyBjb2xvci55ZWxsb3coJ0RSWSBSVU4nKSA6IGNvbG9yLmdyZWVuKCdBUFBMSUVEJyk7XHJcbiAgICBwLmxvZy5tZXNzYWdlKGBNQ1AgYm9vdHN0cmFwICgke21vZGV9KWApO1xyXG5cclxuICAgIGZvciAoY29uc3QgcmVzdWx0IG9mIHJlc3VsdHMpIHtcclxuICAgICAgICBjb25zdCBjbGllbnROYW1lID0gY29sb3IuY3lhbihyZXN1bHQuY2xpZW50KTtcclxuICAgICAgICBjb25zdCBzdWZmaXggPSByZXN1bHQubWVzc2FnZSA/IGNvbG9yLmRpbShgIC0gJHtyZXN1bHQubWVzc2FnZX1gKSA6ICcnO1xyXG5cclxuICAgICAgICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gJ3N1Y2Nlc3MnKSB7XHJcbiAgICAgICAgICAgIHAubG9nLnN1Y2Nlc3MoYCR7Y2xpZW50TmFtZX06IGNvbmZpZ3VyZWQgKCR7cmVzdWx0LmNvbmZpZ1BhdGh9KSR7c3VmZml4fWApO1xyXG4gICAgICAgIH0gZWxzZSBpZiAocmVzdWx0LnN0YXR1cyA9PT0gJ3NraXBwZWQnKSB7XHJcbiAgICAgICAgICAgIHAubG9nLmluZm8oYCR7Y2xpZW50TmFtZX06IHNraXBwZWQgKCR7cmVzdWx0LmNvbmZpZ1BhdGggfHwgJ25vIGNvbmZpZyd9KSR7c3VmZml4fWApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHAubG9nLmVycm9yKGAke2NsaWVudE5hbWV9OiBmYWlsZWQgKCR7cmVzdWx0LmNvbmZpZ1BhdGggfHwgJ25vIGNvbmZpZyd9KSR7c3VmZml4fWApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuYXN5bmMgZnVuY3Rpb24gY29tbWFuZFN0YXR1cygpOiBQcm9taXNlPG51bWJlcj4ge1xyXG4gICAgY29uc3QgcCA9IGF3YWl0IGltcG9ydCgnQGNsYWNrL3Byb21wdHMnKTtcclxuICAgIHAuaW50cm8oY29sb3IuYmdDeWFuKGNvbG9yLmJsYWNrKCcgMGN0eCBzdGF0dXMgJykpKTtcclxuICAgIGNvbnN0IHMgPSBwLnNwaW5uZXIoKTtcclxuICAgIHMuc3RhcnQoJ0NoZWNraW5nIGRhZW1vbiBoZWFsdGgnKTtcclxuXHJcbiAgICBjb25zdCBkYWVtb24gPSBhd2FpdCBpc0RhZW1vblJlYWNoYWJsZSgpO1xyXG4gICAgcy5zdG9wKGBEYWVtb24gaXMgJHtkYWVtb24ub2sgPyBjb2xvci5ncmVlbigncnVubmluZycpIDogY29sb3IucmVkKCdub3QgcnVubmluZycpfWApO1xyXG5cclxuICAgIGNvbnN0IGluZm86IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XHJcbiAgICAgICAgJ1NvY2tldCc6IFNPQ0tFVF9QQVRILFxyXG4gICAgICAgICdEYXRhYmFzZSc6IERCX1BBVEgsXHJcbiAgICAgICAgJ01hc3RlciBLZXknOiBmcy5leGlzdHNTeW5jKEtFWV9QQVRIKSB8fCBCb29sZWFuKHByb2Nlc3MuZW52LkNUWF9NQVNURVJfS0VZKSA/IGNvbG9yLmdyZWVuKCdwcmVzZW50JykgOiBjb2xvci55ZWxsb3coJ21pc3NpbmcnKVxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAoIWRhZW1vbi5vaykge1xyXG4gICAgICAgIGlmIChkYWVtb24uZXJyb3IpIHtcclxuICAgICAgICAgICAgaW5mb1snRXJyb3InXSA9IGNvbG9yLnJlZChkYWVtb24uZXJyb3IpO1xyXG4gICAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgY2FwYWJpbGl0aWVzID0gYXdhaXQgc2VuZFRvRGFlbW9uKCdnZXRDYXBhYmlsaXRpZXMnLCB7fSk7XHJcbiAgICAgICAgICAgIGNvbnN0IG1ldGhvZHMgPSBBcnJheS5pc0FycmF5KGNhcGFiaWxpdGllcz8ubWV0aG9kcykgPyBjYXBhYmlsaXRpZXMubWV0aG9kcy5sZW5ndGggOiAwO1xyXG4gICAgICAgICAgICBpbmZvWydBUEkgVmVyc2lvbiddID0gY2FwYWJpbGl0aWVzPy5hcGlWZXJzaW9uID8/ICd1bmtub3duJztcclxuICAgICAgICAgICAgaW5mb1snUlBDIE1ldGhvZHMnXSA9IFN0cmluZyhtZXRob2RzKTtcclxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICBpbmZvWydBUEkgRXJyb3InXSA9IGNvbG9yLnJlZChlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcikpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwLm5vdGUoXHJcbiAgICAgICAgT2JqZWN0LmVudHJpZXMoaW5mbykubWFwKChbaywgdl0pID0+IGAke2NvbG9yLmRpbShrLnBhZEVuZCgxMikpfSA6ICR7dn1gKS5qb2luKCdcXG4nKSxcclxuICAgICAgICAnU3lzdGVtIERldGFpbHMnXHJcbiAgICApO1xyXG4gICAgcC5vdXRybyhkYWVtb24ub2sgPyAnQWxsIHN5c3RlbXMgb3BlcmF0aW9uYWwnIDogY29sb3IueWVsbG93KCdEYWVtb24gZGVncmFkZWQgb3Igb2ZmbGluZScpKTtcclxuXHJcbiAgICByZXR1cm4gZGFlbW9uLm9rID8gMCA6IDE7XHJcbn1cclxuXHJcbmFzeW5jIGZ1bmN0aW9uIGNvbW1hbmRCb290c3RyYXAoZmxhZ3M6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IGJvb2xlYW4+KTogUHJvbWlzZTxudW1iZXI+IHtcclxuICAgIGNvbnN0IHAgPSBhd2FpdCBpbXBvcnQoJ0BjbGFjay9wcm9tcHRzJyk7XHJcbiAgICBjb25zdCBjbGllbnRzID0gcGFyc2VDbGllbnRzKGZsYWdzLmNsaWVudHMpO1xyXG4gICAgY29uc3QgZHJ5UnVuID0gQm9vbGVhbihmbGFnc1snZHJ5LXJ1biddKTtcclxuXHJcbiAgICBpZiAoIUJvb2xlYW4oZmxhZ3MucXVpZXQpICYmICFCb29sZWFuKGZsYWdzLmpzb24pKSB7XHJcbiAgICAgICAgcC5pbnRybyhjb2xvci5iZ0JsdWUoY29sb3IuYmxhY2soJyAwY3R4IGJvb3RzdHJhcCAnKSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHMgPSBwLnNwaW5uZXIoKTtcclxuICAgIGlmICghQm9vbGVhbihmbGFncy5xdWlldCkgJiYgIUJvb2xlYW4oZmxhZ3MuanNvbikpIHMuc3RhcnQoJ0FwcGx5aW5nIE1DUCBjb25maWd1cmF0aW9ucycpO1xyXG5cclxuICAgIGNvbnN0IHJlc3VsdHMgPSBydW5Cb290c3RyYXAoY2xpZW50cywgZHJ5UnVuKTtcclxuXHJcbiAgICBpZiAoIUJvb2xlYW4oZmxhZ3MucXVpZXQpICYmICFCb29sZWFuKGZsYWdzLmpzb24pKSB7XHJcbiAgICAgICAgcy5zdG9wKCdCb290c3RyYXAgY29tcGxldGUnKTtcclxuICAgICAgICBhd2FpdCBwcmludEJvb3RzdHJhcFJlc3VsdHMocmVzdWx0cywgZHJ5UnVuKTtcclxuICAgICAgICBwLm91dHJvKHJlc3VsdHMuc29tZShyID0+IHIuc3RhdHVzID09PSAnZmFpbGVkJykgPyBjb2xvci55ZWxsb3coJ0Jvb3RzdHJhcCBmaW5pc2hlZCB3aXRoIGVycm9ycycpIDogY29sb3IuZ3JlZW4oJ0Jvb3RzdHJhcCBzdWNjZXNzZnVsJykpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChCb29sZWFuKGZsYWdzLmpzb24pKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoeyBkcnlSdW4sIGNsaWVudHMsIHJlc3VsdHMgfSwgbnVsbCwgMikpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdHMuc29tZSgocmVzdWx0OiBCb290c3RyYXBSZXN1bHQpID0+IHJlc3VsdC5zdGF0dXMgPT09ICdmYWlsZWQnKSA/IDEgOiAwO1xyXG59XHJcblxyXG5hc3luYyBmdW5jdGlvbiBjb21tYW5kSW5zdGFsbChmbGFnczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgYm9vbGVhbj4pOiBQcm9taXNlPG51bWJlcj4ge1xyXG4gICAgY29uc3QgcCA9IGF3YWl0IGltcG9ydCgnQGNsYWNrL3Byb21wdHMnKTtcclxuICAgIGNvbnN0IHF1aWV0ID0gQm9vbGVhbihmbGFncy5xdWlldCk7XHJcbiAgICBjb25zdCBhc0pzb24gPSBCb29sZWFuKGZsYWdzLmpzb24pO1xyXG4gICAgY29uc3Qgc2tpcEJvb3RzdHJhcCA9IEJvb2xlYW4oZmxhZ3NbJ3NraXAtYm9vdHN0cmFwJ10pO1xyXG5cclxuICAgIGlmICghcXVpZXQgJiYgIWFzSnNvbikge1xyXG4gICAgICAgIHAuaW50cm8oY29sb3IuYmdCbHVlKGNvbG9yLmJsYWNrKCcgMGN0eCBpbnN0YWxsICcpKSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcyA9IHAuc3Bpbm5lcigpO1xyXG4gICAgaWYgKCFxdWlldCAmJiAhYXNKc29uKSBzLnN0YXJ0KCdDaGVja2luZyBkYWVtb24gc3RhdHVzJyk7XHJcblxyXG4gICAgY29uc3QgZGFlbW9uU3RhdHVzID0gYXdhaXQgaXNEYWVtb25SZWFjaGFibGUoKTtcclxuXHJcbiAgICBpZiAoIWRhZW1vblN0YXR1cy5vaykge1xyXG4gICAgICAgIGlmICghcXVpZXQgJiYgIWFzSnNvbikgcy5tZXNzYWdlKCdTdGFydGluZyBiYWNrZ3JvdW5kIHNlcnZpY2UuLi4nKTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBzdGFydERhZW1vbkRldGFjaGVkKCk7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgaWYgKCFxdWlldCAmJiAhYXNKc29uKSBzLnN0b3AoY29sb3IucmVkKCdGYWlsZWQgdG8gc3RhcnQgZGFlbW9uJykpO1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKSk7XHJcbiAgICAgICAgICAgIGlmICghcXVpZXQgJiYgIWFzSnNvbikgcC5vdXRybyhjb2xvci5yZWQoJ0luc3RhbGwgZmFpbGVkJykpO1xyXG4gICAgICAgICAgICByZXR1cm4gMTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFxdWlldCAmJiAhYXNKc29uKSBzLm1lc3NhZ2UoJ1dhaXRpbmcgZm9yIGRhZW1vbiB0byBiZWNvbWUgcmVhZHkuLi4nKTtcclxuICAgIGNvbnN0IHJlYWR5ID0gYXdhaXQgd2FpdEZvckRhZW1vbigpO1xyXG5cclxuICAgIGlmICghcmVhZHkpIHtcclxuICAgICAgICBpZiAoIXF1aWV0ICYmICFhc0pzb24pIHMuc3RvcChjb2xvci5yZWQoJ0RhZW1vbiBzdGFydCB0aW1lb3V0JykpO1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1VuYWJsZSB0byByZWFjaCBkYWVtb24gaGVhbHRoIGVuZHBvaW50LicpO1xyXG4gICAgICAgIGlmICghcXVpZXQgJiYgIWFzSnNvbikgcC5vdXRybyhjb2xvci5yZWQoJ0luc3RhbGwgZmFpbGVkJykpO1xyXG4gICAgICAgIHJldHVybiAxO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghcXVpZXQgJiYgIWFzSnNvbikgcy5zdG9wKGNvbG9yLmdyZWVuKCdEYWVtb24gaXMgcmVhZHknKSk7XHJcblxyXG4gICAgbGV0IGJvb3RzdHJhcENvZGUgPSAwO1xyXG4gICAgaWYgKCFza2lwQm9vdHN0cmFwKSB7XHJcbiAgICAgICAgYm9vdHN0cmFwQ29kZSA9IGF3YWl0IGNvbW1hbmRCb290c3RyYXAoeyAuLi5mbGFncywgcXVpZXQ6IChxdWlldCB8fCBhc0pzb24pLCBqc29uOiBmYWxzZSB9KTtcclxuICAgICAgICBpZiAoYm9vdHN0cmFwQ29kZSAhPT0gMCkge1xyXG4gICAgICAgICAgICBpZiAoIXF1aWV0ICYmICFhc0pzb24pIHAub3V0cm8oY29sb3IueWVsbG93KCdJbnN0YWxsIHBhcnRpYWwgKGJvb3RzdHJhcCBmYWlsZWQpJykpO1xyXG4gICAgICAgICAgICByZXR1cm4gYm9vdHN0cmFwQ29kZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHF1aWV0IHx8IGFzSnNvbikge1xyXG4gICAgICAgIGlmIChhc0pzb24pIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoe1xyXG4gICAgICAgICAgICAgICAgb2s6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBkYWVtb25SdW5uaW5nOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgYm9vdHN0cmFwOiBza2lwQm9vdHN0cmFwID8gJ3NraXBwZWQnIDogJ29rJ1xyXG4gICAgICAgICAgICB9LCBudWxsLCAyKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAwO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGNoZWNrcyA9IGF3YWl0IGlzRGFlbW9uUmVhY2hhYmxlKCk7XHJcbiAgICBwLm91dHJvKGNvbG9yLmdyZWVuKGBJbnN0YWxsYXRpb24gY29tcGxldGUhIERhZW1vbiBpcyAke2NoZWNrcy5vayA/ICdydW5uaW5nJyA6ICdkZWdyYWRlZCd9LmApKTtcclxuICAgIHJldHVybiBjaGVja3Mub2sgPyAwIDogMTtcclxufVxyXG5cclxuYXN5bmMgZnVuY3Rpb24gY29tbWFuZERvY3RvcihmbGFnczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgYm9vbGVhbj4pOiBQcm9taXNlPG51bWJlcj4ge1xyXG4gICAgY29uc3QgY2hlY2tzOiBEb2N0b3JDaGVja1tdID0gW107XHJcbiAgICBjb25zdCBkYWVtb24gPSBhd2FpdCBpc0RhZW1vblJlYWNoYWJsZSgpO1xyXG5cclxuICAgIGNoZWNrcy5wdXNoKHtcclxuICAgICAgICBpZDogJ2RhZW1vbl9yZWFjaGFibGUnLFxyXG4gICAgICAgIHN0YXR1czogZGFlbW9uLm9rID8gJ3Bhc3MnIDogJ2ZhaWwnLFxyXG4gICAgICAgIG1lc3NhZ2U6IGRhZW1vbi5vayA/ICdEYWVtb24gaGVhbHRoIGNoZWNrIHN1Y2NlZWRlZC4nIDogJ0RhZW1vbiBpcyBub3QgcmVhY2hhYmxlLicsXHJcbiAgICAgICAgZGV0YWlsczogZGFlbW9uLm9rID8gZGFlbW9uLmhlYWx0aCA6IHsgZXJyb3I6IGRhZW1vbi5lcnJvciB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBjaGVja3MucHVzaCh7XHJcbiAgICAgICAgaWQ6ICdkYl9wYXRoJyxcclxuICAgICAgICBzdGF0dXM6IGZzLmV4aXN0c1N5bmMoREJfUEFUSCkgPyAncGFzcycgOiAnd2FybicsXHJcbiAgICAgICAgbWVzc2FnZTogZnMuZXhpc3RzU3luYyhEQl9QQVRIKSA/ICdEYXRhYmFzZSBmaWxlIGV4aXN0cy4nIDogJ0RhdGFiYXNlIGZpbGUgbm90IGZvdW5kIHlldCAobWF5IGJlIGNyZWF0ZWQgb24gZmlyc3QgcnVuKS4nLFxyXG4gICAgICAgIGRldGFpbHM6IHsgcGF0aDogREJfUEFUSCB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBoYXNLZXkgPSBCb29sZWFuKHByb2Nlc3MuZW52LkNUWF9NQVNURVJfS0VZKSB8fCBmcy5leGlzdHNTeW5jKEtFWV9QQVRIKTtcclxuICAgIGNoZWNrcy5wdXNoKHtcclxuICAgICAgICBpZDogJ2VuY3J5cHRpb25fa2V5JyxcclxuICAgICAgICBzdGF0dXM6IGhhc0tleSA/ICdwYXNzJyA6ICd3YXJuJyxcclxuICAgICAgICBtZXNzYWdlOiBoYXNLZXkgPyAnRW5jcnlwdGlvbiBrZXkgYXZhaWxhYmxlLicgOiAnRW5jcnlwdGlvbiBrZXkgZmlsZS9lbnYgbm90IGZvdW5kIHlldC4nLFxyXG4gICAgICAgIGRldGFpbHM6IHsgZW52OiBCb29sZWFuKHByb2Nlc3MuZW52LkNUWF9NQVNURVJfS0VZKSwgZmlsZTogS0VZX1BBVEggfVxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3Qgb3BzTG9nUGF0aCA9IGdldENsaU9wc0xvZ1BhdGgoKTtcclxuICAgIGxldCBvcHNMb2dXcml0YWJsZSA9IHRydWU7XHJcbiAgICBsZXQgb3BzTG9nRXJyb3I6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG4gICAgdHJ5IHtcclxuICAgICAgICBjb25zdCBkaXIgPSBwYXRoLmRpcm5hbWUob3BzTG9nUGF0aCk7XHJcbiAgICAgICAgZnMubWtkaXJTeW5jKGRpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XHJcbiAgICAgICAgZnMuYWNjZXNzU3luYyhkaXIsIGZzLmNvbnN0YW50cy5XX09LKTtcclxuICAgICAgICBpZiAoZnMuZXhpc3RzU3luYyhvcHNMb2dQYXRoKSkge1xyXG4gICAgICAgICAgICBmcy5hY2Nlc3NTeW5jKG9wc0xvZ1BhdGgsIGZzLmNvbnN0YW50cy5XX09LKTtcclxuICAgICAgICB9XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgIG9wc0xvZ1dyaXRhYmxlID0gZmFsc2U7XHJcbiAgICAgICAgb3BzTG9nRXJyb3IgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcik7XHJcbiAgICB9XHJcbiAgICBjaGVja3MucHVzaCh7XHJcbiAgICAgICAgaWQ6ICdvcHNfbG9nX3dyaXRhYmxlJyxcclxuICAgICAgICBzdGF0dXM6IG9wc0xvZ1dyaXRhYmxlID8gJ3Bhc3MnIDogJ3dhcm4nLFxyXG4gICAgICAgIG1lc3NhZ2U6IG9wc0xvZ1dyaXRhYmxlID8gJ0NMSSBvcGVyYXRpb25zIGxvZyBwYXRoIGlzIHdyaXRhYmxlLicgOiAnQ0xJIG9wZXJhdGlvbnMgbG9nIHBhdGggaXMgbm90IHdyaXRhYmxlLicsXHJcbiAgICAgICAgZGV0YWlsczogeyBwYXRoOiBvcHNMb2dQYXRoLCBlcnJvcjogb3BzTG9nRXJyb3IgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgZHJ5UnVuUmVzdWx0cyA9IHJ1bkJvb3RzdHJhcChwYXJzZUNsaWVudHMoZmxhZ3MuY2xpZW50cyksIHRydWUpO1xyXG4gICAgY29uc3QgZmFpbGVkQm9vdHN0cmFwID0gZHJ5UnVuUmVzdWx0cy5zb21lKChyZXN1bHQ6IEJvb3RzdHJhcFJlc3VsdCkgPT4gcmVzdWx0LnN0YXR1cyA9PT0gJ2ZhaWxlZCcpO1xyXG4gICAgY2hlY2tzLnB1c2goe1xyXG4gICAgICAgIGlkOiAnYm9vdHN0cmFwX2RyeV9ydW4nLFxyXG4gICAgICAgIHN0YXR1czogZmFpbGVkQm9vdHN0cmFwID8gJ2ZhaWwnIDogJ3Bhc3MnLFxyXG4gICAgICAgIG1lc3NhZ2U6IGZhaWxlZEJvb3RzdHJhcCA/ICdCb290c3RyYXAgZHJ5IHJ1biBmb3VuZCBmYWlsdXJlcy4nIDogJ0Jvb3RzdHJhcCBkcnkgcnVuIHN1Y2NlZWRlZCAob3Igc2tpcHBlZCB1bnN1cHBvcnRlZCBjbGllbnRzKS4nLFxyXG4gICAgICAgIGRldGFpbHM6IHsgcmVzdWx0czogZHJ5UnVuUmVzdWx0cyB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBhc0pzb24gPSBCb29sZWFuKGZsYWdzLmpzb24pO1xyXG4gICAgaWYgKGFzSnNvbikge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHsgY2hlY2tzIH0sIG51bGwsIDIpKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc3QgcCA9IGF3YWl0IGltcG9ydCgnQGNsYWNrL3Byb21wdHMnKTtcclxuICAgICAgICBwLmludHJvKGNvbG9yLmJnQ3lhbihjb2xvci5ibGFjaygnIDBjdHggZG9jdG9yICcpKSk7XHJcblxyXG4gICAgICAgIGZvciAoY29uc3QgY2hlY2sgb2YgY2hlY2tzKSB7XHJcbiAgICAgICAgICAgIGlmIChjaGVjay5zdGF0dXMgPT09ICdwYXNzJykge1xyXG4gICAgICAgICAgICAgICAgcC5sb2cuc3VjY2VzcyhgJHtjb2xvci5ib2xkKGNoZWNrLmlkKX06ICR7Y29sb3IuZGltKGNoZWNrLm1lc3NhZ2UpfWApO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNoZWNrLnN0YXR1cyA9PT0gJ3dhcm4nKSB7XHJcbiAgICAgICAgICAgICAgICBwLmxvZy53YXJuKGAke2NvbG9yLmJvbGQoY2hlY2suaWQpfTogJHtjb2xvci55ZWxsb3coY2hlY2subWVzc2FnZSl9YCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBwLmxvZy5lcnJvcihgJHtjb2xvci5ib2xkKGNoZWNrLmlkKX06ICR7Y29sb3IucmVkKGNoZWNrLm1lc3NhZ2UpfWApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBoYXNGYWlsdXJlcyA9IGNoZWNrcy5zb21lKGMgPT4gYy5zdGF0dXMgPT09ICdmYWlsJyk7XHJcbiAgICAgICAgcC5vdXRybyhoYXNGYWlsdXJlcyA/IGNvbG9yLnJlZCgnRG9jdG9yIGZvdW5kIGlzc3VlcyByZXF1aXJpbmcgYXR0ZW50aW9uLicpIDogY29sb3IuZ3JlZW4oJ0FsbCBzeXN0ZW1zIGdvIScpKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY2hlY2tzLnNvbWUoY2hlY2sgPT4gY2hlY2suc3RhdHVzID09PSAnZmFpbCcpID8gMSA6IDA7XHJcbn1cclxuXHJcbmFzeW5jIGZ1bmN0aW9uIGNvbW1hbmRSZXBhaXIoZmxhZ3M6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IGJvb2xlYW4+KTogUHJvbWlzZTxudW1iZXI+IHtcclxuICAgIGNvbnN0IHAgPSBhd2FpdCBpbXBvcnQoJ0BjbGFjay9wcm9tcHRzJyk7XHJcbiAgICBwLmludHJvKGNvbG9yLmJnQ3lhbihjb2xvci5ibGFjaygnIDBjdHggcmVwYWlyICcpKSk7XHJcblxyXG4gICAgY29uc3QgcyA9IHAuc3Bpbm5lcigpO1xyXG4gICAgcy5zdGFydCgnQ2hlY2tpbmcgZGFlbW9uIHN0YXR1cycpO1xyXG5cclxuICAgIGNvbnN0IGRhZW1vbiA9IGF3YWl0IGlzRGFlbW9uUmVhY2hhYmxlKCk7XHJcbiAgICBpZiAoIWRhZW1vbi5vaykge1xyXG4gICAgICAgIHMubWVzc2FnZSgnU3RhcnRpbmcgZGFlbW9uIGZvciByZXBhaXIuLi4nKTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBzdGFydERhZW1vbkRldGFjaGVkKCk7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgcy5zdG9wKGNvbG9yLnJlZCgnRmFpbGVkIHRvIHN0YXJ0IGRhZW1vbicpKTtcclxuICAgICAgICAgICAgcC5sb2cuZXJyb3IoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpKTtcclxuICAgICAgICAgICAgcC5vdXRybyhjb2xvci5yZWQoJ1JlcGFpciBmYWlsZWQnKSk7XHJcbiAgICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCByZWFkeSA9IGF3YWl0IHdhaXRGb3JEYWVtb24oKTtcclxuICAgIGlmICghcmVhZHkpIHtcclxuICAgICAgICBzLnN0b3AoY29sb3IucmVkKCdEYWVtb24gc3RhcnQgdGltZW91dCcpKTtcclxuICAgICAgICBwLm91dHJvKGNvbG9yLnJlZCgnUmVwYWlyIGZhaWxlZCcpKTtcclxuICAgICAgICByZXR1cm4gMTtcclxuICAgIH1cclxuXHJcbiAgICBzLnN0b3AoY29sb3IuZ3JlZW4oJ0RhZW1vbiBpcyBydW5uaW5nJykpO1xyXG5cclxuICAgIHAubG9nLnN0ZXAoJ1J1bm5pbmcgYm9vdHN0cmFwIHRvIGZpeCBNQ1AgY29uZmlncycpO1xyXG4gICAgY29uc3QgYm9vdHN0cmFwQ29kZSA9IGF3YWl0IGNvbW1hbmRCb290c3RyYXAoeyAuLi5mbGFncywgcXVpZXQ6IHRydWUsIGpzb246IGZhbHNlIH0pO1xyXG4gICAgaWYgKGJvb3RzdHJhcENvZGUgIT09IDApIHtcclxuICAgICAgICBwLm91dHJvKGNvbG9yLnllbGxvdygnUmVwYWlyIHBhcnRpYWwgKGJvb3RzdHJhcCBmYWlsZWQpJykpO1xyXG4gICAgICAgIHJldHVybiBib290c3RyYXBDb2RlO1xyXG4gICAgfVxyXG5cclxuICAgIHAubG9nLnN0ZXAoJ1J1bm5pbmcgZG9jdG9yIGNoZWNrcycpO1xyXG4gICAgcmV0dXJuIGNvbW1hbmREb2N0b3IoeyAuLi5mbGFncywganNvbjogZmFsc2UgfSk7XHJcbn1cclxuXHJcbmFzeW5jIGZ1bmN0aW9uIGNvbW1hbmREYXNoYm9hcmQoZmxhZ3M6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IGJvb2xlYW4+KTogUHJvbWlzZTxudW1iZXI+IHtcclxuICAgIGNvbnN0IHVybCA9IGFwcGx5RGFzaGJvYXJkUXVlcnkoZ2V0SG9zdGVkRGFzaGJvYXJkVXJsKCksIGZsYWdzWydkYXNoYm9hcmQtcXVlcnknXSk7XHJcbiAgICBjb25zb2xlLmxvZyhgZGFzaGJvYXJkX3VybDogJHt1cmx9YCk7XHJcblxyXG4gICAgaWYgKEJvb2xlYW4oZmxhZ3NbJ25vLW9wZW4nXSkpIHtcclxuICAgICAgICBjb25zb2xlLmxvZygnT3BlbiB0aGUgVVJMIGFib3ZlIGluIHlvdXIgYnJvd3Nlci4nKTtcclxuICAgICAgICByZXR1cm4gMDtcclxuICAgIH1cclxuXHJcbiAgICBvcGVuVXJsKHVybCk7XHJcbiAgICBjb25zb2xlLmxvZygnT3BlbmVkIGRhc2hib2FyZCBVUkwgaW4geW91ciBkZWZhdWx0IGJyb3dzZXIgKGJlc3QgZWZmb3J0KS4nKTtcclxuICAgIHJldHVybiAwO1xyXG59XHJcblxyXG5hc3luYyBmdW5jdGlvbiBjb21tYW5kU2hlbGwoKTogUHJvbWlzZTxudW1iZXI+IHtcclxuICAgIHJldHVybiBydW5JbnRlcmFjdGl2ZVNoZWxsKHtcclxuICAgICAgICBjbGlFbnRyeXBvaW50OiByZXNvbHZlQ2xpRW50cnlwb2ludCgpLFxyXG4gICAgICAgIG5vZGVFeGVjQXJndjogcHJvY2Vzcy5leGVjQXJndlxyXG4gICAgfSk7XHJcbn1cclxuXHJcbmFzeW5jIGZ1bmN0aW9uIGNvbW1hbmRSZWxlYXNlUHVibGlzaChmbGFnczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgYm9vbGVhbj4pOiBQcm9taXNlPG51bWJlcj4ge1xyXG4gICAgY29uc3QgdmVyc2lvblJhdyA9IHBhcnNlT3B0aW9uYWxTdHJpbmdGbGFnKGZsYWdzLnZlcnNpb24pO1xyXG4gICAgaWYgKCF2ZXJzaW9uUmF3KSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignTWlzc2luZyByZXF1aXJlZCAtLXZlcnNpb24gYXJndW1lbnQuJyk7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignVXNhZ2U6IDBjdHggcmVsZWFzZSBwdWJsaXNoIC0tdmVyc2lvbiB2WC5ZLlogWy0tdGFnIGxhdGVzdF0gWy0tb3RwIDEyMzQ1Nl0gWy0tZHJ5LXJ1bl0gWy0tYWxsb3ctZGlydHldIFstLWpzb25dJyk7XHJcbiAgICAgICAgcmV0dXJuIDE7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcnVuUmVsZWFzZVB1Ymxpc2goe1xyXG4gICAgICAgIHZlcnNpb246IHZlcnNpb25SYXcsXHJcbiAgICAgICAgdGFnOiBwYXJzZU9wdGlvbmFsU3RyaW5nRmxhZyhmbGFncy50YWcpID8/ICdsYXRlc3QnLFxyXG4gICAgICAgIGRyeVJ1bjogQm9vbGVhbihmbGFnc1snZHJ5LXJ1biddKSxcclxuICAgICAgICBhbGxvd0RpcnR5OiBCb29sZWFuKGZsYWdzWydhbGxvdy1kaXJ0eSddKSxcclxuICAgICAgICBvdHA6IHBhcnNlT3B0aW9uYWxTdHJpbmdGbGFnKGZsYWdzLm90cCkgPz8gdW5kZWZpbmVkLFxyXG4gICAgICAgIHNraXBWYWxpZGF0ZTogQm9vbGVhbihmbGFnc1snc2tpcC12YWxpZGF0ZSddKSxcclxuICAgICAgICBza2lwQ2hhbmdlbG9nOiBCb29sZWFuKGZsYWdzWydza2lwLWNoYW5nZWxvZyddKSxcclxuICAgICAgICBvdXRwdXRNb2RlOiBCb29sZWFuKGZsYWdzLmpzb24pID8gJ2NhcHR1cmUnIDogJ2luaGVyaXQnXHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAoQm9vbGVhbihmbGFncy5qc29uKSkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHJlc3VsdCwgbnVsbCwgMikpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhgcmVsZWFzZV9wdWJsaXNoOiAke3Jlc3VsdC5vayA/ICdzdWNjZXNzJyA6ICdmYWlsZWQnfWApO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGB2ZXJzaW9uOiAke3Jlc3VsdC52ZXJzaW9ufWApO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGB0YWc6ICR7cmVzdWx0LnRhZ31gKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhgZHJ5X3J1bjogJHtyZXN1bHQuZHJ5UnVufWApO1xyXG4gICAgICAgIGlmICghcmVzdWx0Lm9rKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZhaWxlZFN0ZXAgPSByZXN1bHQuc3RlcHMuZmluZChzdGVwID0+ICFzdGVwLm9rKTtcclxuICAgICAgICAgICAgaWYgKGZhaWxlZFN0ZXApIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYGZhaWxlZF9zdGVwOiAke2ZhaWxlZFN0ZXAuaWR9IChleGl0PSR7ZmFpbGVkU3RlcC5leGl0Q29kZSA/PyAndW5rbm93bid9KWApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZXN1bHQub2sgPyAwIDogMTtcclxufVxyXG5cclxuZnVuY3Rpb24gcGFyc2VQb3NpdGl2ZU51bWJlckZsYWcodmFsdWU6IHN0cmluZyB8IGJvb2xlYW4gfCB1bmRlZmluZWQsIGZhbGxiYWNrOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHJldHVybiBmYWxsYmFjaztcclxuICAgIGNvbnN0IHBhcnNlZCA9IE51bWJlcih2YWx1ZSk7XHJcbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShwYXJzZWQpIHx8IHBhcnNlZCA8PSAwKSByZXR1cm4gZmFsbGJhY2s7XHJcbiAgICByZXR1cm4gcGFyc2VkO1xyXG59XHJcblxyXG5mdW5jdGlvbiBwYXJzZVBvc2l0aXZlSW50ZWdlckZsYWcodmFsdWU6IHN0cmluZyB8IGJvb2xlYW4gfCB1bmRlZmluZWQsIGZhbGxiYWNrOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIE1hdGgubWF4KDEsIE1hdGguZmxvb3IocGFyc2VQb3NpdGl2ZU51bWJlckZsYWcodmFsdWUsIGZhbGxiYWNrKSkpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBwYXJzZU9wdGlvbmFsU3RyaW5nRmxhZyh2YWx1ZTogc3RyaW5nIHwgYm9vbGVhbiB8IHVuZGVmaW5lZCk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHJldHVybiBudWxsO1xyXG4gICAgY29uc3Qgbm9ybWFsaXplZCA9IHZhbHVlLnRyaW0oKTtcclxuICAgIHJldHVybiBub3JtYWxpemVkLmxlbmd0aCA+IDAgPyBub3JtYWxpemVkIDogbnVsbDtcclxufVxyXG5cclxuZnVuY3Rpb24gc2xlZXBNcyhtczogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGFwcGx5RGFzaGJvYXJkUXVlcnkodXJsOiBzdHJpbmcsIHF1ZXJ5UmF3OiBzdHJpbmcgfCBib29sZWFuIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcclxuICAgIGlmICh0eXBlb2YgcXVlcnlSYXcgIT09ICdzdHJpbmcnIHx8IHF1ZXJ5UmF3LnRyaW0oKS5sZW5ndGggPT09IDApIHJldHVybiB1cmw7XHJcbiAgICBjb25zdCBub3JtYWxpemVkID0gcXVlcnlSYXcudHJpbSgpLnJlcGxhY2UoL15cXD8rLywgJycpO1xyXG4gICAgaWYgKG5vcm1hbGl6ZWQubGVuZ3RoID09PSAwKSByZXR1cm4gdXJsO1xyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgICAgY29uc3QgcGFyc2VkVXJsID0gbmV3IFVSTCh1cmwpO1xyXG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gbmV3IFVSTFNlYXJjaFBhcmFtcyhub3JtYWxpemVkKTtcclxuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBxdWVyeS5lbnRyaWVzKCkpIHtcclxuICAgICAgICAgICAgcGFyc2VkVXJsLnNlYXJjaFBhcmFtcy5zZXQoa2V5LCB2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBwYXJzZWRVcmwudG9TdHJpbmcoKTtcclxuICAgIH0gY2F0Y2gge1xyXG4gICAgICAgIGNvbnN0IHNlcCA9IHVybC5pbmNsdWRlcygnPycpID8gJyYnIDogJz8nO1xyXG4gICAgICAgIHJldHVybiBgJHt1cmx9JHtzZXB9JHtub3JtYWxpemVkfWA7XHJcbiAgICB9XHJcbn1cclxuXHJcbmFzeW5jIGZ1bmN0aW9uIGNvbW1hbmRDb25uZWN0b3JRdWV1ZShhY3Rpb246IHN0cmluZyB8IHVuZGVmaW5lZCwgZmxhZ3M6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IGJvb2xlYW4+KTogUHJvbWlzZTxudW1iZXI+IHtcclxuICAgIGNvbnN0IHZhbGlkQWN0aW9ucyA9IFsnc3RhdHVzJywgJ2RyYWluJywgJ3B1cmdlJywgJ2xvZ3MnXTtcclxuICAgIGNvbnN0IHNhZmVBY3Rpb24gPSBhY3Rpb24gfHwgJ3N0YXR1cyc7XHJcblxyXG4gICAgaWYgKCF2YWxpZEFjdGlvbnMuaW5jbHVkZXMoc2FmZUFjdGlvbikpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKGBVbmtub3duIGNvbm5lY3RvciBxdWV1ZSBhY3Rpb246ICcke2FjdGlvbiA/PyAnJ30nYCk7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihgVmFsaWQgYWN0aW9uczogJHt2YWxpZEFjdGlvbnMuam9pbignLCAnKX1gKTtcclxuICAgICAgICByZXR1cm4gMTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc2FmZUFjdGlvbiA9PT0gJ3N0YXR1cycpIHtcclxuICAgICAgICBjb25zdCBzdGF0cyA9IGdldENvbm5lY3RvclF1ZXVlU3RhdHMoRGF0ZS5ub3coKSk7XHJcbiAgICAgICAgY29uc3Qgc2FtcGxlID0gbGlzdFF1ZXVlZENvbm5lY3RvckV2ZW50cygpLnNsaWNlKDAsIDUpLm1hcChpdGVtID0+ICh7XHJcbiAgICAgICAgICAgIHF1ZXVlSWQ6IGl0ZW0ucXVldWVJZCxcclxuICAgICAgICAgICAgZXZlbnRJZDogaXRlbS5ldmVudElkLFxyXG4gICAgICAgICAgICBzZXF1ZW5jZTogaXRlbS5zZXF1ZW5jZSxcclxuICAgICAgICAgICAgYXR0ZW1wdHM6IGl0ZW0uYXR0ZW1wdHMsXHJcbiAgICAgICAgICAgIG5leHRBdHRlbXB0QXQ6IG5ldyBEYXRlKGl0ZW0ubmV4dEF0dGVtcHRBdCkudG9JU09TdHJpbmcoKSxcclxuICAgICAgICAgICAgbGFzdEVycm9yOiBpdGVtLmxhc3RFcnJvclxyXG4gICAgICAgIH0pKTtcclxuXHJcbiAgICAgICAgY29uc3QgcGF5bG9hZCA9IHtcclxuICAgICAgICAgICAgcGF0aDogZ2V0Q29ubmVjdG9yUXVldWVQYXRoKCksXHJcbiAgICAgICAgICAgIHN0YXRzOiB7XHJcbiAgICAgICAgICAgICAgICAuLi5zdGF0cyxcclxuICAgICAgICAgICAgICAgIG9sZGVzdEVucXVldWVkQXQ6IHN0YXRzLm9sZGVzdEVucXVldWVkQXQgPyBuZXcgRGF0ZShzdGF0cy5vbGRlc3RFbnF1ZXVlZEF0KS50b0lTT1N0cmluZygpIDogbnVsbFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzYW1wbGVcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBpZiAoQm9vbGVhbihmbGFncy5qc29uKSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShwYXlsb2FkLCBudWxsLCAyKSk7XHJcbiAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc29sZS5sb2coJ1xcbkNvbm5lY3RvciBRdWV1ZVxcbicpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGAgIHBhdGg6ICAgICAgICAgJHtwYXlsb2FkLnBhdGh9YCk7XHJcbiAgICAgICAgY29uc29sZS5sb2coYCAgcGVuZGluZzogICAgICAke3BheWxvYWQuc3RhdHMucGVuZGluZ31gKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhgICByZWFkeTogICAgICAgICR7cGF5bG9hZC5zdGF0cy5yZWFkeX1gKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhgICBiYWNrb2ZmOiAgICAgICR7cGF5bG9hZC5zdGF0cy5iYWNrb2ZmfWApO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGAgIG1heF9hdHRlbXB0czogJHtwYXlsb2FkLnN0YXRzLm1heEF0dGVtcHRzfWApO1xyXG4gICAgICAgIGlmIChwYXlsb2FkLnN0YXRzLm9sZGVzdEVucXVldWVkQXQpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coYCAgb2xkZXN0OiAgICAgICAke3BheWxvYWQuc3RhdHMub2xkZXN0RW5xdWV1ZWRBdH1gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHBheWxvYWQuc2FtcGxlLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ1xcbiAgc2FtcGxlOicpO1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJvdyBvZiBwYXlsb2FkLnNhbXBsZSkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXHJcbiAgICAgICAgICAgICAgICAgICAgYCAgICBzZXE9JHtyb3cuc2VxdWVuY2V9IGF0dGVtcHRzPSR7cm93LmF0dGVtcHRzfSBuZXh0PSR7cm93Lm5leHRBdHRlbXB0QXR9YCArXHJcbiAgICAgICAgICAgICAgICAgICAgYCR7cm93Lmxhc3RFcnJvciA/IGAgZXJyb3I9JHtyb3cubGFzdEVycm9yfWAgOiAnJ31gXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnNvbGUubG9nKCcnKTtcclxuICAgICAgICByZXR1cm4gMDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc2FmZUFjdGlvbiA9PT0gJ2xvZ3MnKSB7XHJcbiAgICAgICAgY29uc3QgbGltaXQgPSBwYXJzZVBvc2l0aXZlSW50ZWdlckZsYWcoZmxhZ3MubGltaXQsIDUwKTtcclxuICAgICAgICBjb25zdCBjbGVhciA9IEJvb2xlYW4oZmxhZ3MuY2xlYXIpO1xyXG4gICAgICAgIGNvbnN0IGRyeVJ1biA9IEJvb2xlYW4oZmxhZ3NbJ2RyeS1ydW4nXSk7XHJcbiAgICAgICAgY29uc3QgY29uZmlybSA9IEJvb2xlYW4oZmxhZ3MuY29uZmlybSk7XHJcbiAgICAgICAgY29uc3QgY3VycmVudEVudHJpZXMgPSByZWFkQ2xpT3BzTG9nKGxpbWl0KS5tYXAoKGVudHJ5KSA9PiAoe1xyXG4gICAgICAgICAgICAuLi5lbnRyeSxcclxuICAgICAgICAgICAgaXNvVGltZTogbmV3IERhdGUoZW50cnkudGltZXN0YW1wKS50b0lTT1N0cmluZygpXHJcbiAgICAgICAgfSkpO1xyXG4gICAgICAgIGNvbnN0IGZpbGVQYXRoID0gZ2V0Q2xpT3BzTG9nUGF0aCgpO1xyXG5cclxuICAgICAgICBpZiAoY2xlYXIpIHtcclxuICAgICAgICAgICAgaWYgKCFkcnlSdW4gJiYgIWNvbmZpcm0pIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ2Nvbm5lY3Rvcl9xdWV1ZV9sb2dzX2NsZWFyX3JlcXVpcmVzX2NvbmZpcm06IHBhc3MgLS1jb25maXJtIChvciB1c2UgLS1kcnktcnVuKS4nKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoZHJ5UnVuKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwYXlsb2FkID0geyBkcnlSdW46IHRydWUsIHBhdGg6IGZpbGVQYXRoLCByZW1vdmFibGVFbnRyaWVzOiBjdXJyZW50RW50cmllcy5sZW5ndGggfTtcclxuICAgICAgICAgICAgICAgIGlmIChCb29sZWFuKGZsYWdzLmpzb24pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkocGF5bG9hZCwgbnVsbCwgMikpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgY29ubmVjdG9yX3F1ZXVlX2xvZ3NfY2xlYXJfZHJ5X3J1bjogcGF0aD0ke2ZpbGVQYXRofSByZW1vdmFibGVfZW50cmllcz0ke2N1cnJlbnRFbnRyaWVzLmxlbmd0aH1gKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGNsZWFyQ2xpT3BzTG9nKCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwYXlsb2FkID0geyBkcnlSdW46IGZhbHNlLCAuLi5yZXN1bHQgfTtcclxuICAgICAgICAgICAgICAgIGlmIChCb29sZWFuKGZsYWdzLmpzb24pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkocGF5bG9hZCwgbnVsbCwgMikpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgY29ubmVjdG9yX3F1ZXVlX2xvZ3NfY2xlYXI6IGNsZWFyZWQ9JHtyZXN1bHQuY2xlYXJlZH0gcGF0aD0ke3Jlc3VsdC5wYXRofWApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgcGF5bG9hZCA9IHtcclxuICAgICAgICAgICAgcGF0aDogZmlsZVBhdGgsXHJcbiAgICAgICAgICAgIGNvdW50OiBjdXJyZW50RW50cmllcy5sZW5ndGgsXHJcbiAgICAgICAgICAgIGVudHJpZXM6IGN1cnJlbnRFbnRyaWVzXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgaWYgKEJvb2xlYW4oZmxhZ3MuanNvbikpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkocGF5bG9hZCwgbnVsbCwgMikpO1xyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnNvbGUubG9nKCdcXG5Db25uZWN0b3IgUXVldWUgT3BzIExvZ1xcbicpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGAgIHBhdGg6ICAke3BheWxvYWQucGF0aH1gKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhgICBjb3VudDogJHtwYXlsb2FkLmNvdW50fWApO1xyXG4gICAgICAgIGlmIChjdXJyZW50RW50cmllcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCcnKTtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBjdXJyZW50RW50cmllcykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZGV0YWlscyA9IGVudHJ5LmRldGFpbHMgPyBgIGRldGFpbHM9JHtKU09OLnN0cmluZ2lmeShlbnRyeS5kZXRhaWxzKX1gIDogJyc7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgICAke2VudHJ5Lmlzb1RpbWV9ICR7ZW50cnkuc3RhdHVzfSAke2VudHJ5Lm9wZXJhdGlvbn0ke2RldGFpbHN9YCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc29sZS5sb2coJycpO1xyXG4gICAgICAgIHJldHVybiAwO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChzYWZlQWN0aW9uID09PSAncHVyZ2UnKSB7XHJcbiAgICAgICAgY29uc3QgZHJ5UnVuID0gQm9vbGVhbihmbGFnc1snZHJ5LXJ1biddKTtcclxuICAgICAgICBjb25zdCBjb25maXJtID0gQm9vbGVhbihmbGFncy5jb25maXJtKTtcclxuICAgICAgICBjb25zdCBhbGwgPSBCb29sZWFuKGZsYWdzLmFsbCk7XHJcbiAgICAgICAgY29uc3Qgb2xkZXJUaGFuSG91cnMgPSBwYXJzZVBvc2l0aXZlTnVtYmVyRmxhZyhmbGFnc1snb2xkZXItdGhhbi1ob3VycyddLCAwKTtcclxuICAgICAgICBjb25zdCBtaW5BdHRlbXB0cyA9IHBhcnNlUG9zaXRpdmVOdW1iZXJGbGFnKGZsYWdzWydtaW4tYXR0ZW1wdHMnXSwgMCk7XHJcbiAgICAgICAgY29uc3QgcXVldWVQYXRoID0gZ2V0Q29ubmVjdG9yUXVldWVQYXRoKCk7XHJcblxyXG4gICAgICAgIGlmICghZHJ5UnVuICYmICFjb25maXJtKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ2Nvbm5lY3Rvcl9xdWV1ZV9wdXJnZV9yZXF1aXJlc19jb25maXJtOiBwYXNzIC0tY29uZmlybSAob3IgdXNlIC0tZHJ5LXJ1bikuJyk7XHJcbiAgICAgICAgICAgIGFwcGVuZENsaU9wc0xvZ0VudHJ5KHtcclxuICAgICAgICAgICAgICAgIG9wZXJhdGlvbjogJ2Nvbm5lY3Rvci5xdWV1ZS5wdXJnZScsXHJcbiAgICAgICAgICAgICAgICBzdGF0dXM6ICdlcnJvcicsXHJcbiAgICAgICAgICAgICAgICBkZXRhaWxzOiB7IHJlYXNvbjogJ21pc3NpbmdfY29uZmlybScsIGRyeVJ1biwgYWxsLCBvbGRlclRoYW5Ib3VycywgbWluQXR0ZW1wdHMsIHF1ZXVlUGF0aCB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByZXR1cm4gMTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghYWxsICYmIG9sZGVyVGhhbkhvdXJzIDw9IDAgJiYgbWluQXR0ZW1wdHMgPD0gMCkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdjb25uZWN0b3JfcXVldWVfcHVyZ2VfcmVxdWlyZXNfZmlsdGVyOiB1c2UgLS1hbGwgb3IgLS1vbGRlci10aGFuLWhvdXJzIG9yIC0tbWluLWF0dGVtcHRzLicpO1xyXG4gICAgICAgICAgICBhcHBlbmRDbGlPcHNMb2dFbnRyeSh7XHJcbiAgICAgICAgICAgICAgICBvcGVyYXRpb246ICdjb25uZWN0b3IucXVldWUucHVyZ2UnLFxyXG4gICAgICAgICAgICAgICAgc3RhdHVzOiAnZXJyb3InLFxyXG4gICAgICAgICAgICAgICAgZGV0YWlsczogeyByZWFzb246ICdtaXNzaW5nX2ZpbHRlcicsIGRyeVJ1biwgYWxsLCBvbGRlclRoYW5Ib3VycywgbWluQXR0ZW1wdHMsIHF1ZXVlUGF0aCB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByZXR1cm4gMTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChkcnlSdW4pIHtcclxuICAgICAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcclxuICAgICAgICAgICAgY29uc3QgY2FuZGlkYXRlcyA9IGxpc3RRdWV1ZWRDb25uZWN0b3JFdmVudHMoKTtcclxuICAgICAgICAgICAgY29uc3QgcmVtb3ZhYmxlID0gY2FuZGlkYXRlcy5maWx0ZXIoaXRlbSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYWxsKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG9sZGVyTWF0Y2ggPSBvbGRlclRoYW5Ib3VycyA+IDAgPyAobm93IC0gaXRlbS5lbnF1ZXVlZEF0KSA+PSBvbGRlclRoYW5Ib3VycyAqIDYwICogNjAgKiAxMDAwIDogZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhdHRlbXB0c01hdGNoID0gbWluQXR0ZW1wdHMgPiAwID8gaXRlbS5hdHRlbXB0cyA+PSBtaW5BdHRlbXB0cyA6IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9sZGVyTWF0Y2ggfHwgYXR0ZW1wdHNNYXRjaDtcclxuICAgICAgICAgICAgfSkubGVuZ3RoO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgcGF5bG9hZCA9IHsgZHJ5UnVuOiB0cnVlLCByZW1vdmFibGUsIHRvdGFsOiBjYW5kaWRhdGVzLmxlbmd0aCB9O1xyXG4gICAgICAgICAgICBhcHBlbmRDbGlPcHNMb2dFbnRyeSh7XHJcbiAgICAgICAgICAgICAgICBvcGVyYXRpb246ICdjb25uZWN0b3IucXVldWUucHVyZ2UnLFxyXG4gICAgICAgICAgICAgICAgc3RhdHVzOiAnZHJ5X3J1bicsXHJcbiAgICAgICAgICAgICAgICBkZXRhaWxzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgYWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIG9sZGVyVGhhbkhvdXJzLFxyXG4gICAgICAgICAgICAgICAgICAgIG1pbkF0dGVtcHRzLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlbW92YWJsZSxcclxuICAgICAgICAgICAgICAgICAgICB0b3RhbDogY2FuZGlkYXRlcy5sZW5ndGgsXHJcbiAgICAgICAgICAgICAgICAgICAgcXVldWVQYXRoXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBpZiAoQm9vbGVhbihmbGFncy5qc29uKSkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkocGF5bG9hZCwgbnVsbCwgMikpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYGNvbm5lY3Rvcl9xdWV1ZV9wdXJnZV9kcnlfcnVuOiByZW1vdmFibGU9JHtyZW1vdmFibGV9IHRvdGFsPSR7Y2FuZGlkYXRlcy5sZW5ndGh9YCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHB1cmdlQ29ubmVjdG9yUXVldWUoe1xyXG4gICAgICAgICAgICBhbGwsXHJcbiAgICAgICAgICAgIG9sZGVyVGhhbkhvdXJzOiBvbGRlclRoYW5Ib3VycyA+IDAgPyBvbGRlclRoYW5Ib3VycyA6IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgbWluQXR0ZW1wdHM6IG1pbkF0dGVtcHRzID4gMCA/IG1pbkF0dGVtcHRzIDogdW5kZWZpbmVkXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSB7IHJlbW92ZWQ6IHJlc3VsdC5yZW1vdmVkLCByZW1haW5pbmc6IHJlc3VsdC5yZW1haW5pbmcgfTtcclxuICAgICAgICBhcHBlbmRDbGlPcHNMb2dFbnRyeSh7XHJcbiAgICAgICAgICAgIG9wZXJhdGlvbjogJ2Nvbm5lY3Rvci5xdWV1ZS5wdXJnZScsXHJcbiAgICAgICAgICAgIHN0YXR1czogJ3N1Y2Nlc3MnLFxyXG4gICAgICAgICAgICBkZXRhaWxzOiB7XHJcbiAgICAgICAgICAgICAgICBhbGwsXHJcbiAgICAgICAgICAgICAgICBvbGRlclRoYW5Ib3Vyczogb2xkZXJUaGFuSG91cnMgPiAwID8gb2xkZXJUaGFuSG91cnMgOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgbWluQXR0ZW1wdHM6IG1pbkF0dGVtcHRzID4gMCA/IG1pbkF0dGVtcHRzIDogbnVsbCxcclxuICAgICAgICAgICAgICAgIHJlbW92ZWQ6IHJlc3VsdC5yZW1vdmVkLFxyXG4gICAgICAgICAgICAgICAgcmVtYWluaW5nOiByZXN1bHQucmVtYWluaW5nLFxyXG4gICAgICAgICAgICAgICAgcXVldWVQYXRoXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAoQm9vbGVhbihmbGFncy5qc29uKSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShwYXlsb2FkLCBudWxsLCAyKSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coYGNvbm5lY3Rvcl9xdWV1ZV9wdXJnZTogcmVtb3ZlZD0ke3Jlc3VsdC5yZW1vdmVkfSByZW1haW5pbmc9JHtyZXN1bHQucmVtYWluaW5nfWApO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gMDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBkcmFpblxyXG4gICAgY29uc3QgdG9rZW4gPSByZXNvbHZlVG9rZW4oKTtcclxuICAgIGlmICghdG9rZW4pIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdjb25uZWN0b3JfcXVldWVfZHJhaW5fcmVxdWlyZXNfYXV0aDogcnVuIGAwY3R4IGF1dGggbG9naW5gIGZpcnN0LicpO1xyXG4gICAgICAgIGFwcGVuZENsaU9wc0xvZ0VudHJ5KHtcclxuICAgICAgICAgICAgb3BlcmF0aW9uOiAnY29ubmVjdG9yLnF1ZXVlLmRyYWluJyxcclxuICAgICAgICAgICAgc3RhdHVzOiAnZXJyb3InLFxyXG4gICAgICAgICAgICBkZXRhaWxzOiB7IHJlYXNvbjogJ21pc3NpbmdfYXV0aCcsIHF1ZXVlUGF0aDogZ2V0Q29ubmVjdG9yUXVldWVQYXRoKCkgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiAxO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHJlZ2lzdHJhdGlvbiA9IHJlYWRDb25uZWN0b3JTdGF0ZSgpO1xyXG4gICAgaWYgKCFyZWdpc3RyYXRpb24pIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdjb25uZWN0b3JfcXVldWVfZHJhaW5fcmVxdWlyZXNfcmVnaXN0cmF0aW9uOiBydW4gYDBjdHggY29ubmVjdG9yIHJlZ2lzdGVyYCBmaXJzdC4nKTtcclxuICAgICAgICBhcHBlbmRDbGlPcHNMb2dFbnRyeSh7XHJcbiAgICAgICAgICAgIG9wZXJhdGlvbjogJ2Nvbm5lY3Rvci5xdWV1ZS5kcmFpbicsXHJcbiAgICAgICAgICAgIHN0YXR1czogJ2Vycm9yJyxcclxuICAgICAgICAgICAgZGV0YWlsczogeyByZWFzb246ICdtaXNzaW5nX3JlZ2lzdHJhdGlvbicsIHF1ZXVlUGF0aDogZ2V0Q29ubmVjdG9yUXVldWVQYXRoKCkgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiAxO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IG1heEJhdGNoZXMgPSBwYXJzZVBvc2l0aXZlSW50ZWdlckZsYWcoZmxhZ3NbJ21heC1iYXRjaGVzJ10sIDEwKTtcclxuICAgIGNvbnN0IGJhdGNoU2l6ZSA9IE1hdGgubWluKDUwMCwgcGFyc2VQb3NpdGl2ZUludGVnZXJGbGFnKGZsYWdzWydiYXRjaC1zaXplJ10sIDIwMCkpO1xyXG4gICAgY29uc3Qgd2FpdCA9IEJvb2xlYW4oZmxhZ3Mud2FpdCk7XHJcbiAgICBjb25zdCBzdHJpY3QgPSBCb29sZWFuKGZsYWdzLnN0cmljdCkgfHwgQm9vbGVhbihmbGFnc1snZmFpbC1vbi1yZXRyeSddKTtcclxuICAgIGNvbnN0IHRpbWVvdXRNcyA9IHBhcnNlUG9zaXRpdmVJbnRlZ2VyRmxhZyhmbGFnc1sndGltZW91dC1tcyddLCAxMjBfMDAwKTtcclxuICAgIGNvbnN0IHBvbGxNcyA9IE1hdGgubWF4KDIwMCwgcGFyc2VQb3NpdGl2ZUludGVnZXJGbGFnKGZsYWdzWydwb2xsLW1zJ10sIDFfMDAwKSk7XHJcbiAgICBjb25zdCBxdWV1ZVBhdGggPSBnZXRDb25uZWN0b3JRdWV1ZVBhdGgoKTtcclxuICAgIGNvbnN0IGRyYWluZWQgPSBhd2FpdCBkcmFpbkNvbm5lY3RvclF1ZXVlKHtcclxuICAgICAgICBtYWNoaW5lSWQ6IHJlZ2lzdHJhdGlvbi5tYWNoaW5lSWQsXHJcbiAgICAgICAgdGVuYW50SWQ6IHJlZ2lzdHJhdGlvbi50ZW5hbnRJZCxcclxuICAgICAgICBhY2Nlc3NUb2tlbjogdG9rZW4uYWNjZXNzVG9rZW4sXHJcbiAgICAgICAgbWF4QmF0Y2hlcyxcclxuICAgICAgICBiYXRjaFNpemUsXHJcbiAgICAgICAgd2FpdCxcclxuICAgICAgICB0aW1lb3V0TXMsXHJcbiAgICAgICAgcG9sbE1zXHJcbiAgICB9LCB7XHJcbiAgICAgICAgbm93OiAoKSA9PiBEYXRlLm5vdygpLFxyXG4gICAgICAgIHNsZWVwOiAobXM6IG51bWJlcikgPT4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKSksXHJcbiAgICAgICAgZ2V0UmVhZHlFdmVudHM6IGdldFJlYWR5Q29ubmVjdG9yRXZlbnRzLFxyXG4gICAgICAgIHNlbmRFdmVudHM6IHNlbmRDb25uZWN0b3JFdmVudHMsXHJcbiAgICAgICAgbWFya0V2ZW50c0RlbGl2ZXJlZDogbWFya0Nvbm5lY3RvckV2ZW50c0RlbGl2ZXJlZCxcclxuICAgICAgICBtYXJrRXZlbnRzRmFpbGVkOiBtYXJrQ29ubmVjdG9yRXZlbnRzRmFpbGVkLFxyXG4gICAgICAgIGdldFF1ZXVlU3RhdHM6IGdldENvbm5lY3RvclF1ZXVlU3RhdHMsXHJcbiAgICAgICAgb25CcmlkZ2VVbnN1cHBvcnRlZDogKCkgPT4ge1xyXG4gICAgICAgICAgICByZWdpc3RyYXRpb24ucnVudGltZS5ldmVudEJyaWRnZVN1cHBvcnRlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICByZWdpc3RyYXRpb24ucnVudGltZS5ldmVudEJyaWRnZUVycm9yID0gbnVsbDtcclxuICAgICAgICAgICAgcmVnaXN0cmF0aW9uLnVwZGF0ZWRBdCA9IERhdGUubm93KCk7XHJcbiAgICAgICAgICAgIHdyaXRlQ29ubmVjdG9yU3RhdGUocmVnaXN0cmF0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICByZWdpc3RyYXRpb24ucnVudGltZS5ldmVudFF1ZXVlUGVuZGluZyA9IGRyYWluZWQucXVldWUucGVuZGluZztcclxuICAgIHJlZ2lzdHJhdGlvbi5ydW50aW1lLmV2ZW50UXVldWVSZWFkeSA9IGRyYWluZWQucXVldWUucmVhZHk7XHJcbiAgICByZWdpc3RyYXRpb24ucnVudGltZS5ldmVudFF1ZXVlQmFja29mZiA9IGRyYWluZWQucXVldWUuYmFja29mZjtcclxuICAgIHJlZ2lzdHJhdGlvbi5ydW50aW1lLmV2ZW50QnJpZGdlRXJyb3IgPSBkcmFpbmVkLmxhc3RFcnJvcjtcclxuICAgIHJlZ2lzdHJhdGlvbi51cGRhdGVkQXQgPSBEYXRlLm5vdygpO1xyXG4gICAgd3JpdGVDb25uZWN0b3JTdGF0ZShyZWdpc3RyYXRpb24pO1xyXG5cclxuICAgIGNvbnN0IHJlc3BvbnNlID0ge1xyXG4gICAgICAgIHNlbnQ6IGRyYWluZWQuc2VudCxcclxuICAgICAgICBmYWlsZWQ6IGRyYWluZWQuZmFpbGVkLFxyXG4gICAgICAgIGJhdGNoZXM6IGRyYWluZWQuYmF0Y2hlcyxcclxuICAgICAgICBxdWV1ZTogZHJhaW5lZC5xdWV1ZSxcclxuICAgICAgICB3YWl0OiB7XHJcbiAgICAgICAgICAgIGVuYWJsZWQ6IHdhaXQsXHJcbiAgICAgICAgICAgIHN0cmljdCxcclxuICAgICAgICAgICAgdGltZW91dE1zOiBkcmFpbmVkLndhaXQudGltZW91dE1zLFxyXG4gICAgICAgICAgICBwb2xsTXM6IGRyYWluZWQud2FpdC5wb2xsTXMsXHJcbiAgICAgICAgICAgIGVsYXBzZWRNczogZHJhaW5lZC53YWl0LmVsYXBzZWRNcyxcclxuICAgICAgICAgICAgdGltZWRPdXQ6IGRyYWluZWQud2FpdC50aW1lZE91dCxcclxuICAgICAgICAgICAgaGl0TWF4QmF0Y2hlczogZHJhaW5lZC53YWl0LmhpdE1heEJhdGNoZXMsXHJcbiAgICAgICAgICAgIHJlYXNvbjogZHJhaW5lZC53YWl0LnJlYXNvblxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgbGFzdEVycm9yOiBkcmFpbmVkLmxhc3RFcnJvclxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBzdGF0dXMgPSB3YWl0XHJcbiAgICAgICAgPyAoZHJhaW5lZC5xdWV1ZS5wZW5kaW5nID09PSAwICYmICghc3RyaWN0IHx8IGRyYWluZWQuZmFpbGVkID09PSAwKSA/ICdzdWNjZXNzJyA6ICdwYXJ0aWFsJylcclxuICAgICAgICA6IChkcmFpbmVkLmZhaWxlZCA+IDAgPyAncGFydGlhbCcgOiAnc3VjY2VzcycpO1xyXG4gICAgYXBwZW5kQ2xpT3BzTG9nRW50cnkoe1xyXG4gICAgICAgIG9wZXJhdGlvbjogJ2Nvbm5lY3Rvci5xdWV1ZS5kcmFpbicsXHJcbiAgICAgICAgc3RhdHVzLFxyXG4gICAgICAgIGRldGFpbHM6IHtcclxuICAgICAgICAgICAgcXVldWVQYXRoLFxyXG4gICAgICAgICAgICBtYXhCYXRjaGVzLFxyXG4gICAgICAgICAgICBiYXRjaFNpemUsXHJcbiAgICAgICAgICAgIHdhaXQsXHJcbiAgICAgICAgICAgIHN0cmljdCxcclxuICAgICAgICAgICAgdGltZW91dE1zOiB3YWl0ID8gdGltZW91dE1zIDogbnVsbCxcclxuICAgICAgICAgICAgcG9sbE1zOiB3YWl0ID8gcG9sbE1zIDogbnVsbCxcclxuICAgICAgICAgICAgc2VudDogZHJhaW5lZC5zZW50LFxyXG4gICAgICAgICAgICBmYWlsZWQ6IGRyYWluZWQuZmFpbGVkLFxyXG4gICAgICAgICAgICBiYXRjaGVzOiBkcmFpbmVkLmJhdGNoZXMsXHJcbiAgICAgICAgICAgIHBlbmRpbmc6IGRyYWluZWQucXVldWUucGVuZGluZyxcclxuICAgICAgICAgICAgcmVhZHk6IGRyYWluZWQucXVldWUucmVhZHksXHJcbiAgICAgICAgICAgIGJhY2tvZmY6IGRyYWluZWQucXVldWUuYmFja29mZixcclxuICAgICAgICAgICAgcmVhc29uOiBkcmFpbmVkLndhaXQucmVhc29uLFxyXG4gICAgICAgICAgICBsYXN0RXJyb3I6IGRyYWluZWQubGFzdEVycm9yXHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKEJvb2xlYW4oZmxhZ3MuanNvbikpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShyZXNwb25zZSwgbnVsbCwgMikpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zb2xlLmxvZygnXFxuQ29ubmVjdG9yIFF1ZXVlIERyYWluXFxuJyk7XHJcbiAgICAgICAgY29uc29sZS5sb2coYCAgc2VudDogICAgICAgICAke2RyYWluZWQuc2VudH1gKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhgICBmYWlsZWQ6ICAgICAgICR7ZHJhaW5lZC5mYWlsZWR9YCk7XHJcbiAgICAgICAgY29uc29sZS5sb2coYCAgYmF0Y2hlczogICAgICAke2RyYWluZWQuYmF0Y2hlc31gKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhgICBwZW5kaW5nOiAgICAgICR7ZHJhaW5lZC5xdWV1ZS5wZW5kaW5nfWApO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGAgIHJlYWR5OiAgICAgICAgJHtkcmFpbmVkLnF1ZXVlLnJlYWR5fWApO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGAgIGJhY2tvZmY6ICAgICAgJHtkcmFpbmVkLnF1ZXVlLmJhY2tvZmZ9YCk7XHJcbiAgICAgICAgaWYgKHdhaXQpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coYCAgd2FpdDogICAgICAgICB0cnVlYCk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGAgIHN0cmljdDogICAgICAgJHtzdHJpY3R9YCk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGAgIHRpbWVvdXRfbXM6ICAgJHtkcmFpbmVkLndhaXQudGltZW91dE1zfWApO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgICBlbGFwc2VkX21zOiAgICR7ZHJhaW5lZC53YWl0LmVsYXBzZWRNc31gKTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coYCAgcmVhc29uOiAgICAgICAke2RyYWluZWQud2FpdC5yZWFzb259YCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChkcmFpbmVkLmxhc3RFcnJvcikge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgICBlcnJvcjogICAgICAgICR7ZHJhaW5lZC5sYXN0RXJyb3J9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnNvbGUubG9nKCcnKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAod2FpdCkge1xyXG4gICAgICAgIGlmIChkcmFpbmVkLnF1ZXVlLnBlbmRpbmcgPiAwKSByZXR1cm4gMTtcclxuICAgICAgICByZXR1cm4gc3RyaWN0ICYmIGRyYWluZWQuZmFpbGVkID4gMCA/IDEgOiAwO1xyXG4gICAgfVxyXG4gICAgaWYgKHN0cmljdCAmJiBkcmFpbmVkLmZhaWxlZCA+IDApIHJldHVybiAxO1xyXG4gICAgcmV0dXJuIGRyYWluZWQuZmFpbGVkID4gMCA/IDEgOiAwO1xyXG59XHJcblxyXG5hc3luYyBmdW5jdGlvbiBjb21tYW5kQ29ubmVjdG9yKGFjdGlvbjogc3RyaW5nIHwgdW5kZWZpbmVkLCBmbGFnczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgYm9vbGVhbj4pOiBQcm9taXNlPG51bWJlcj4ge1xyXG4gICAgY29uc3QgdmFsaWRBY3Rpb25zID0gWydpbnN0YWxsJywgJ2VuYWJsZScsICdkaXNhYmxlJywgJ3VuaW5zdGFsbCcsICdzdGF0dXMnLCAnc3RhcnQnLCAnc3RvcCcsICdyZXN0YXJ0JywgJ3ZlcmlmeScsICdyZWdpc3RlcicsICdydW4nLCAncXVldWUnLCAnbG9ncyddO1xyXG4gICAgaWYgKCFhY3Rpb24gfHwgIXZhbGlkQWN0aW9ucy5pbmNsdWRlcyhhY3Rpb24pKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihgVW5rbm93biBjb25uZWN0b3IgYWN0aW9uOiAnJHthY3Rpb24gPz8gJyd9J2ApO1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYFZhbGlkIGFjdGlvbnM6ICR7dmFsaWRBY3Rpb25zLmpvaW4oJywgJyl9YCk7XHJcbiAgICAgICAgcmV0dXJuIDE7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGFjdGlvbiA9PT0gJ3F1ZXVlJykge1xyXG4gICAgICAgIHJldHVybiBjb21tYW5kQ29ubmVjdG9yUXVldWUodW5kZWZpbmVkLCBmbGFncyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGFjdGlvbiA9PT0gJ3J1bicpIHtcclxuICAgICAgICBjb25zdCBpbnRlcnZhbFJhdyA9IGZsYWdzWydpbnRlcnZhbC1tcyddO1xyXG4gICAgICAgIGNvbnN0IGludGVydmFsTXMgPSB0eXBlb2YgaW50ZXJ2YWxSYXcgPT09ICdzdHJpbmcnID8gTnVtYmVyKGludGVydmFsUmF3KSA6IHVuZGVmaW5lZDtcclxuICAgICAgICByZXR1cm4gcnVuQ29ubmVjdG9yUnVudGltZSh7XHJcbiAgICAgICAgICAgIG9uY2U6IEJvb2xlYW4oZmxhZ3Mub25jZSksXHJcbiAgICAgICAgICAgIHF1aWV0OiBCb29sZWFuKGZsYWdzLnF1aWV0KSxcclxuICAgICAgICAgICAgYXV0b1N0YXJ0RGFlbW9uOiAhQm9vbGVhbihmbGFnc1snbm8tZGFlbW9uLWF1dG9zdGFydCddKSxcclxuICAgICAgICAgICAgaW50ZXJ2YWxNczogTnVtYmVyLmlzRmluaXRlKGludGVydmFsTXMpID8gaW50ZXJ2YWxNcyA6IHVuZGVmaW5lZFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChhY3Rpb24gPT09ICd2ZXJpZnknKSB7XHJcbiAgICAgICAgY29uc3QgZGFlbW9uID0gYXdhaXQgaXNEYWVtb25SZWFjaGFibGUoKTtcclxuICAgICAgICBjb25zdCByZWdpc3RyYXRpb24gPSByZWFkQ29ubmVjdG9yU3RhdGUoKTtcclxuICAgICAgICBjb25zdCB0b2tlbiA9IHJlc29sdmVUb2tlbigpO1xyXG4gICAgICAgIGNvbnN0IHJlcXVpcmVDbG91ZCA9IEJvb2xlYW4oZmxhZ3MuY2xvdWQpIHx8IEJvb2xlYW4oZmxhZ3NbJ3JlcXVpcmUtY2xvdWQnXSk7XHJcbiAgICAgICAgY29uc3QgYXNKc29uID0gQm9vbGVhbihmbGFncy5qc29uKTtcclxuICAgICAgICBsZXQgY2xvdWRPayA9ICFyZXF1aXJlQ2xvdWQ7XHJcbiAgICAgICAgbGV0IGNsb3VkRXJyb3I6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG5cclxuICAgICAgICBpZiAocmVxdWlyZUNsb3VkICYmIHRva2VuICYmIHJlZ2lzdHJhdGlvbikge1xyXG4gICAgICAgICAgICBjb25zdCBjbG91ZENhcGFiaWxpdGllcyA9IGF3YWl0IGZldGNoQ29ubmVjdG9yQ2FwYWJpbGl0aWVzKHRva2VuLmFjY2Vzc1Rva2VuLCByZWdpc3RyYXRpb24ubWFjaGluZUlkKTtcclxuICAgICAgICAgICAgY2xvdWRPayA9IGNsb3VkQ2FwYWJpbGl0aWVzLm9rO1xyXG4gICAgICAgICAgICBjbG91ZEVycm9yID0gY2xvdWRDYXBhYmlsaXRpZXMub2sgPyBudWxsIDogKGNsb3VkQ2FwYWJpbGl0aWVzLmVycm9yID8/ICdjbG91ZF9jYXBhYmlsaXRpZXNfY2hlY2tfZmFpbGVkJyk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChyZXF1aXJlQ2xvdWQgJiYgKCF0b2tlbiB8fCAhcmVnaXN0cmF0aW9uKSkge1xyXG4gICAgICAgICAgICBjbG91ZE9rID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGNsb3VkRXJyb3IgPSAnY2xvdWRfdmVyaWZpY2F0aW9uX3JlcXVpcmVzX2F1dGhfYW5kX3JlZ2lzdHJhdGlvbic7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBjaGVja3MgPSB7XHJcbiAgICAgICAgICAgIGRhZW1vbjogZGFlbW9uLm9rLFxyXG4gICAgICAgICAgICByZWdpc3RyYXRpb246IEJvb2xlYW4ocmVnaXN0cmF0aW9uKSxcclxuICAgICAgICAgICAgYXV0aDogQm9vbGVhbih0b2tlbiksXHJcbiAgICAgICAgICAgIGNsb3VkOiBjbG91ZE9rXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgY29uc3Qgb2sgPSBjaGVja3MuZGFlbW9uICYmIGNoZWNrcy5yZWdpc3RyYXRpb24gJiYgY2hlY2tzLmF1dGggJiYgY2hlY2tzLmNsb3VkO1xyXG5cclxuICAgICAgICBjb25zdCBwYXlsb2FkID0ge1xyXG4gICAgICAgICAgICBvayxcclxuICAgICAgICAgICAgcmVxdWlyZUNsb3VkLFxyXG4gICAgICAgICAgICBjaGVja3MsXHJcbiAgICAgICAgICAgIG1hY2hpbmVJZDogcmVnaXN0cmF0aW9uPy5tYWNoaW5lSWQgPz8gbnVsbCxcclxuICAgICAgICAgICAgZGFlbW9uRXJyb3I6IGRhZW1vbi5vayA/IG51bGwgOiAoZGFlbW9uLmVycm9yID8/ICd1bmtub3duJyksXHJcbiAgICAgICAgICAgIGNsb3VkRXJyb3JcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBpZiAoYXNKc29uKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHBheWxvYWQsIG51bGwsIDIpKTtcclxuICAgICAgICB9IGVsc2UgaWYgKCFCb29sZWFuKGZsYWdzLnF1aWV0KSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnXFxuQ29ubmVjdG9yIFZlcmlmeVxcbicpO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgICBkYWVtb246ICAgICAgICR7Y2hlY2tzLmRhZW1vbiA/ICdvaycgOiAnbWlzc2luZyd9YCk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGAgIHJlZ2lzdHJhdGlvbjogJHtjaGVja3MucmVnaXN0cmF0aW9uID8gJ29rJyA6ICdtaXNzaW5nJ31gKTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coYCAgYXV0aDogICAgICAgICAke2NoZWNrcy5hdXRoID8gJ29rJyA6ICdtaXNzaW5nJ31gKTtcclxuICAgICAgICAgICAgaWYgKHJlcXVpcmVDbG91ZCkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYCAgY2xvdWQ6ICAgICAgICAke2NoZWNrcy5jbG91ZCA/ICdvaycgOiAnbWlzc2luZyd9YCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHJlZ2lzdHJhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYCAgbWFjaGluZV9pZDogICAke3JlZ2lzdHJhdGlvbi5tYWNoaW5lSWR9YCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCFkYWVtb24ub2sgJiYgZGFlbW9uLmVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgICBkYWVtb25fZXJyb3I6ICR7ZGFlbW9uLmVycm9yfWApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChyZXF1aXJlQ2xvdWQgJiYgY2xvdWRFcnJvcikge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYCAgY2xvdWRfZXJyb3I6ICAke2Nsb3VkRXJyb3J9YCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc29sZS5sb2coJycpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG9rID8gMCA6IDE7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGFjdGlvbiA9PT0gJ3JlZ2lzdGVyJykge1xyXG4gICAgICAgIGNvbnN0IGFzSnNvbiA9IEJvb2xlYW4oZmxhZ3MuanNvbik7XHJcbiAgICAgICAgY29uc3QgdG9rZW4gPSByZXNvbHZlVG9rZW4oKTtcclxuICAgICAgICBpZiAoIXRva2VuKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ2Nvbm5lY3Rvcl9yZWdpc3Rlcl9yZXF1aXJlc19hdXRoOiBydW4gYDBjdHggYXV0aCBsb2dpbmAgZmlyc3QuJyk7XHJcbiAgICAgICAgICAgIGlmIChhc0pzb24pIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHtcclxuICAgICAgICAgICAgICAgICAgICBvazogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6ICdjb25uZWN0b3JfcmVnaXN0ZXJfcmVxdWlyZXNfYXV0aCcsXHJcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ3J1biBgMGN0eCBhdXRoIGxvZ2luYCBmaXJzdC4nXHJcbiAgICAgICAgICAgICAgICB9LCBudWxsLCAyKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBmb3JjZSA9IEJvb2xlYW4oZmxhZ3MuZm9yY2UpO1xyXG4gICAgICAgIGNvbnN0IGxvY2FsT25seSA9IEJvb2xlYW4oZmxhZ3NbJ2xvY2FsLW9ubHknXSk7XHJcbiAgICAgICAgY29uc3QgcmVxdWlyZUNsb3VkID0gQm9vbGVhbihmbGFnc1sncmVxdWlyZS1jbG91ZCddKTtcclxuICAgICAgICBjb25zdCBkYXNoYm9hcmRVcmwgPSBnZXRIb3N0ZWREYXNoYm9hcmRVcmwoKTtcclxuICAgICAgICBjb25zdCB7IHN0YXRlOiBsb2NhbFN0YXRlLCBjcmVhdGVkIH0gPSByZWdpc3RlckNvbm5lY3Rvcih7XHJcbiAgICAgICAgICAgIHRlbmFudElkOiB0b2tlbi50ZW5hbnRJZCB8fCBudWxsLFxyXG4gICAgICAgICAgICB1aVVybDogZGFzaGJvYXJkVXJsLFxyXG4gICAgICAgICAgICBmb3JjZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGxldCBzdGF0ZSA9IGxvY2FsU3RhdGU7XHJcbiAgICAgICAgbGV0IGNsb3VkRXJyb3I6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG4gICAgICAgIGxldCBjbG91ZFJlZ2lzdHJhdGlvblN0YXR1czogJ3NraXBwZWQnIHwgJ2Nvbm5lY3RlZCcgfCAnbG9jYWxfZmFsbGJhY2snID0gJ3NraXBwZWQnO1xyXG5cclxuICAgICAgICBpZiAoIWxvY2FsT25seSkge1xyXG4gICAgICAgICAgICBjb25zdCBjbG91ZFJlc3VsdCA9IGF3YWl0IHJlZ2lzdGVyQ29ubmVjdG9ySW5DbG91ZCh0b2tlbi5hY2Nlc3NUb2tlbiwge1xyXG4gICAgICAgICAgICAgICAgbWFjaGluZUlkOiBsb2NhbFN0YXRlLm1hY2hpbmVJZCxcclxuICAgICAgICAgICAgICAgIHRlbmFudElkOiB0b2tlbi50ZW5hbnRJZCB8fCBudWxsLFxyXG4gICAgICAgICAgICAgICAgdWlVcmw6IGRhc2hib2FyZFVybCxcclxuICAgICAgICAgICAgICAgIHBsYXRmb3JtOiBvcy5wbGF0Zm9ybSgpXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgaWYgKGNsb3VkUmVzdWx0Lm9rKSB7XHJcbiAgICAgICAgICAgICAgICBjbG91ZFJlZ2lzdHJhdGlvblN0YXR1cyA9ICdjb25uZWN0ZWQnO1xyXG4gICAgICAgICAgICAgICAgc3RhdGUgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLi4ubG9jYWxTdGF0ZSxcclxuICAgICAgICAgICAgICAgICAgICB0ZW5hbnRJZDogY2xvdWRSZXN1bHQuZGF0YT8udGVuYW50SWQgPz8gbG9jYWxTdGF0ZS50ZW5hbnRJZCxcclxuICAgICAgICAgICAgICAgICAgICB1cGRhdGVkQXQ6IERhdGUubm93KCksXHJcbiAgICAgICAgICAgICAgICAgICAgcmVnaXN0cmF0aW9uTW9kZTogJ2Nsb3VkJyxcclxuICAgICAgICAgICAgICAgICAgICBjbG91ZDoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RyYXRpb25JZDogY2xvdWRSZXN1bHQuZGF0YT8ucmVnaXN0cmF0aW9uSWQgPz8gbG9jYWxTdGF0ZS5jbG91ZC5yZWdpc3RyYXRpb25JZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtVXJsOiBjbG91ZFJlc3VsdC5kYXRhPy5zdHJlYW1VcmwgPz8gbG9jYWxTdGF0ZS5jbG91ZC5zdHJlYW1VcmwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhcGFiaWxpdGllczogY2xvdWRSZXN1bHQuZGF0YT8uY2FwYWJpbGl0aWVzID8/IGxvY2FsU3RhdGUuY2xvdWQuY2FwYWJpbGl0aWVzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsYXN0SGVhcnRiZWF0QXQ6IGxvY2FsU3RhdGUuY2xvdWQubGFzdEhlYXJ0YmVhdEF0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsYXN0RXJyb3I6IG51bGxcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY2xvdWRSZWdpc3RyYXRpb25TdGF0dXMgPSAnbG9jYWxfZmFsbGJhY2snO1xyXG4gICAgICAgICAgICAgICAgY2xvdWRFcnJvciA9IGNsb3VkUmVzdWx0LmVycm9yID8/ICdjbG91ZF9yZWdpc3RyYXRpb25fZmFpbGVkJztcclxuICAgICAgICAgICAgICAgIHN0YXRlID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIC4uLmxvY2FsU3RhdGUsXHJcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlZEF0OiBEYXRlLm5vdygpLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlZ2lzdHJhdGlvbk1vZGU6ICdsb2NhbCcsXHJcbiAgICAgICAgICAgICAgICAgICAgY2xvdWQ6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLi4ubG9jYWxTdGF0ZS5jbG91ZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGFzdEVycm9yOiBjbG91ZEVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgd3JpdGVDb25uZWN0b3JTdGF0ZShzdGF0ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBwYXlsb2FkID0ge1xyXG4gICAgICAgICAgICBvazogdHJ1ZSxcclxuICAgICAgICAgICAgY3JlYXRlZCxcclxuICAgICAgICAgICAgbWFjaGluZUlkOiBzdGF0ZS5tYWNoaW5lSWQsXHJcbiAgICAgICAgICAgIHRlbmFudElkOiBzdGF0ZS50ZW5hbnRJZCA/PyBudWxsLFxyXG4gICAgICAgICAgICBkYXNoYm9hcmRVcmw6IHN0YXRlLnVpVXJsLFxyXG4gICAgICAgICAgICByZWdpc3RyYXRpb25Nb2RlOiBzdGF0ZS5yZWdpc3RyYXRpb25Nb2RlLFxyXG4gICAgICAgICAgICBjbG91ZFJlZ2lzdHJhdGlvbjogY2xvdWRSZWdpc3RyYXRpb25TdGF0dXMsXHJcbiAgICAgICAgICAgIGNsb3VkUmVnaXN0cmF0aW9uSWQ6IHN0YXRlLmNsb3VkLnJlZ2lzdHJhdGlvbklkID8/IG51bGwsXHJcbiAgICAgICAgICAgIGNsb3VkU3RyZWFtVXJsOiBzdGF0ZS5jbG91ZC5zdHJlYW1VcmwgPz8gbnVsbCxcclxuICAgICAgICAgICAgY2xvdWRFcnJvcixcclxuICAgICAgICAgICAgc3RhdGVQYXRoOiBnZXRDb25uZWN0b3JTdGF0ZVBhdGgoKVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGlmIChhc0pzb24pIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkocGF5bG9hZCwgbnVsbCwgMikpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoIUJvb2xlYW4oZmxhZ3MucXVpZXQpKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBjb25uZWN0b3JfcmVnaXN0cmF0aW9uOiAke2NyZWF0ZWQgPyAnY3JlYXRlZCcgOiAnZXhpc3RpbmcnfWApO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgbWFjaGluZV9pZDogJHtzdGF0ZS5tYWNoaW5lSWR9YCk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGB0ZW5hbnRfaWQ6ICR7c3RhdGUudGVuYW50SWQgPz8gJ24vYSd9YCk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBkYXNoYm9hcmRfdXJsOiAke3N0YXRlLnVpVXJsfWApO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgcmVnaXN0cmF0aW9uX21vZGU6ICR7c3RhdGUucmVnaXN0cmF0aW9uTW9kZX1gKTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coYGNsb3VkX3JlZ2lzdHJhdGlvbjogJHtjbG91ZFJlZ2lzdHJhdGlvblN0YXR1c31gKTtcclxuICAgICAgICAgICAgaWYgKHN0YXRlLmNsb3VkLnJlZ2lzdHJhdGlvbklkKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgY2xvdWRfcmVnaXN0cmF0aW9uX2lkOiAke3N0YXRlLmNsb3VkLnJlZ2lzdHJhdGlvbklkfWApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChzdGF0ZS5jbG91ZC5zdHJlYW1VcmwpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBjbG91ZF9zdHJlYW1fdXJsOiAke3N0YXRlLmNsb3VkLnN0cmVhbVVybH1gKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoY2xvdWRFcnJvcikge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYGNsb3VkX2Vycm9yOiAke2Nsb3VkRXJyb3J9YCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc29sZS5sb2coYHN0YXRlX3BhdGg6ICR7Z2V0Q29ubmVjdG9yU3RhdGVQYXRoKCl9YCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocmVxdWlyZUNsb3VkICYmIHN0YXRlLnJlZ2lzdHJhdGlvbk1vZGUgIT09ICdjbG91ZCcpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcignY29ubmVjdG9yX3JlZ2lzdGVyX2Nsb3VkX3JlcXVpcmVkOiB1bmFibGUgdG8gcmVnaXN0ZXIgd2l0aCBjbG91ZCBjb250cm9sIHBsYW5lJyk7XHJcbiAgICAgICAgICAgIGlmIChhc0pzb24pIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHtcclxuICAgICAgICAgICAgICAgICAgICAuLi5wYXlsb2FkLFxyXG4gICAgICAgICAgICAgICAgICAgIG9rOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogJ2Nvbm5lY3Rvcl9yZWdpc3Rlcl9jbG91ZF9yZXF1aXJlZCdcclxuICAgICAgICAgICAgICAgIH0sIG51bGwsIDIpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gMTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAwO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChhY3Rpb24gPT09ICdzdGF0dXMnKSB7XHJcbiAgICAgICAgY29uc3QgZGFlbW9uID0gYXdhaXQgaXNEYWVtb25SZWFjaGFibGUoKTtcclxuICAgICAgICBjb25zdCByZWdpc3RyYXRpb24gPSByZWFkQ29ubmVjdG9yU3RhdGUoKTtcclxuICAgICAgICBjb25zdCB0b2tlbiA9IHJlc29sdmVUb2tlbigpO1xyXG4gICAgICAgIGNvbnN0IHJlcXVpcmVCcmlkZ2UgPSBCb29sZWFuKGZsYWdzWydyZXF1aXJlLWJyaWRnZSddKTtcclxuICAgICAgICBjb25zdCBjbG91ZFJlcXVpcmVkID0gcmVnaXN0cmF0aW9uPy5yZWdpc3RyYXRpb25Nb2RlID09PSAnY2xvdWQnO1xyXG4gICAgICAgIGNvbnN0IGNsb3VkUHJvYmVSZXF1ZXN0ZWQgPSBCb29sZWFuKGZsYWdzLmNsb3VkKSB8fCBjbG91ZFJlcXVpcmVkO1xyXG4gICAgICAgIGxldCBzeW5jOiB7XHJcbiAgICAgICAgICAgIGVuYWJsZWQ6IGJvb2xlYW47XHJcbiAgICAgICAgICAgIHJ1bm5pbmc6IGJvb2xlYW47XHJcbiAgICAgICAgICAgIGxhc3RFcnJvcjogc3RyaW5nIHwgbnVsbDtcclxuICAgICAgICAgICAgcXVldWU/OiB7IHBlbmRpbmc6IG51bWJlcjsgaW5GbGlnaHQ6IG51bWJlcjsgZmFpbGVkOiBudW1iZXI7IGRvbmU6IG51bWJlciB9O1xyXG4gICAgICAgIH0gfCBudWxsID0gbnVsbDtcclxuXHJcbiAgICAgICAgaWYgKGRhZW1vbi5vaykge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgc3luYyA9IGF3YWl0IHNlbmRUb0RhZW1vbignc3luY1N0YXR1cycsIHt9KTtcclxuICAgICAgICAgICAgfSBjYXRjaCB7XHJcbiAgICAgICAgICAgICAgICBzeW5jID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGNsb3VkID0ge1xyXG4gICAgICAgICAgICBjb25uZWN0ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICByZXF1aXJlZDogY2xvdWRSZXF1aXJlZCxcclxuICAgICAgICAgICAgcmVnaXN0cmF0aW9uSWQ6IHJlZ2lzdHJhdGlvbj8uY2xvdWQucmVnaXN0cmF0aW9uSWQgPz8gbnVsbCxcclxuICAgICAgICAgICAgc3RyZWFtVXJsOiByZWdpc3RyYXRpb24/LmNsb3VkLnN0cmVhbVVybCA/PyBudWxsLFxyXG4gICAgICAgICAgICBjYXBhYmlsaXRpZXM6IHJlZ2lzdHJhdGlvbj8uY2xvdWQuY2FwYWJpbGl0aWVzID8/IFtdLFxyXG4gICAgICAgICAgICBsYXN0RXJyb3I6IHJlZ2lzdHJhdGlvbj8uY2xvdWQubGFzdEVycm9yID8/IG51bGwsXHJcbiAgICAgICAgICAgIGxhc3RIZWFydGJlYXRBdDogcmVnaXN0cmF0aW9uPy5jbG91ZC5sYXN0SGVhcnRiZWF0QXQgPz8gbnVsbFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGlmIChjbG91ZFByb2JlUmVxdWVzdGVkICYmIHRva2VuICYmIHJlZ2lzdHJhdGlvbikge1xyXG4gICAgICAgICAgICBjb25zdCBjYXBhYmlsaXRpZXNSZXN1bHQgPSBhd2FpdCBmZXRjaENvbm5lY3RvckNhcGFiaWxpdGllcyh0b2tlbi5hY2Nlc3NUb2tlbiwgcmVnaXN0cmF0aW9uLm1hY2hpbmVJZCk7XHJcbiAgICAgICAgICAgIGlmIChjYXBhYmlsaXRpZXNSZXN1bHQub2spIHtcclxuICAgICAgICAgICAgICAgIGNsb3VkLmNhcGFiaWxpdGllcyA9IGNhcGFiaWxpdGllc1Jlc3VsdC5kYXRhPy5jYXBhYmlsaXRpZXNcclxuICAgICAgICAgICAgICAgICAgICA/PyBjYXBhYmlsaXRpZXNSZXN1bHQuZGF0YT8uZmVhdHVyZXNcclxuICAgICAgICAgICAgICAgICAgICA/PyBjbG91ZC5jYXBhYmlsaXRpZXM7XHJcbiAgICAgICAgICAgICAgICBjbG91ZC5jb25uZWN0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgY2xvdWQubGFzdEVycm9yID0gbnVsbDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNsb3VkLmNvbm5lY3RlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgY2xvdWQubGFzdEVycm9yID0gY2FwYWJpbGl0aWVzUmVzdWx0LmVycm9yID8/ICdjbG91ZF9jYXBhYmlsaXRpZXNfZmFpbGVkJztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgaGVhcnRiZWF0UGF5bG9hZCA9IHtcclxuICAgICAgICAgICAgICAgIG1hY2hpbmVJZDogcmVnaXN0cmF0aW9uLm1hY2hpbmVJZCxcclxuICAgICAgICAgICAgICAgIHRlbmFudElkOiByZWdpc3RyYXRpb24udGVuYW50SWQsXHJcbiAgICAgICAgICAgICAgICBwb3N0dXJlOiBkYWVtb24ub2sgPyAnY29ubmVjdGVkJyA6ICdvZmZsaW5lJyxcclxuICAgICAgICAgICAgICAgIGRhZW1vblJ1bm5pbmc6IGRhZW1vbi5vayxcclxuICAgICAgICAgICAgICAgIHN5bmNFbmFibGVkOiBCb29sZWFuKHN5bmM/LmVuYWJsZWQpLFxyXG4gICAgICAgICAgICAgICAgc3luY1J1bm5pbmc6IEJvb2xlYW4oc3luYz8ucnVubmluZyksXHJcbiAgICAgICAgICAgICAgICBxdWV1ZTogc3luYz8ucXVldWVcclxuICAgICAgICAgICAgfSBhcyBjb25zdDtcclxuICAgICAgICAgICAgY29uc3QgaGVhcnRiZWF0UmVzdWx0ID0gYXdhaXQgc2VuZENvbm5lY3RvckhlYXJ0YmVhdCh0b2tlbi5hY2Nlc3NUb2tlbiwgaGVhcnRiZWF0UGF5bG9hZCk7XHJcbiAgICAgICAgICAgIGlmIChoZWFydGJlYXRSZXN1bHQub2spIHtcclxuICAgICAgICAgICAgICAgIGNsb3VkLmxhc3RIZWFydGJlYXRBdCA9IERhdGUubm93KCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWNhcGFiaWxpdGllc1Jlc3VsdC5vaykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNsb3VkLmNvbm5lY3RlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgY2xvdWQubGFzdEVycm9yID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNsb3VkLmxhc3RFcnJvciA9IGhlYXJ0YmVhdFJlc3VsdC5lcnJvciA/PyBjbG91ZC5sYXN0RXJyb3IgPz8gJ2Nsb3VkX2hlYXJ0YmVhdF9mYWlsZWQnO1xyXG4gICAgICAgICAgICAgICAgaWYgKGNsb3VkUmVxdWlyZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBjbG91ZC5jb25uZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgdXBkYXRlZFN0YXRlID0ge1xyXG4gICAgICAgICAgICAgICAgLi4ucmVnaXN0cmF0aW9uLFxyXG4gICAgICAgICAgICAgICAgdXBkYXRlZEF0OiBEYXRlLm5vdygpLFxyXG4gICAgICAgICAgICAgICAgY2xvdWQ6IHtcclxuICAgICAgICAgICAgICAgICAgICAuLi5yZWdpc3RyYXRpb24uY2xvdWQsXHJcbiAgICAgICAgICAgICAgICAgICAgY2FwYWJpbGl0aWVzOiBjbG91ZC5jYXBhYmlsaXRpZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgbGFzdEhlYXJ0YmVhdEF0OiBjbG91ZC5sYXN0SGVhcnRiZWF0QXQsXHJcbiAgICAgICAgICAgICAgICAgICAgbGFzdEVycm9yOiBjbG91ZC5sYXN0RXJyb3JcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgd3JpdGVDb25uZWN0b3JTdGF0ZSh1cGRhdGVkU3RhdGUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgcG9zdHVyZSA9ICFkYWVtb24ub2tcclxuICAgICAgICAgICAgPyAnb2ZmbGluZSdcclxuICAgICAgICAgICAgOiAoIXRva2VuIHx8ICFyZWdpc3RyYXRpb24pXHJcbiAgICAgICAgICAgICAgICA/ICdkZWdyYWRlZCdcclxuICAgICAgICAgICAgICAgIDogKGNsb3VkUmVxdWlyZWQgJiYgIWNsb3VkLmNvbm5lY3RlZClcclxuICAgICAgICAgICAgICAgICAgICA/ICdkZWdyYWRlZCdcclxuICAgICAgICAgICAgICAgICAgICA6IChCb29sZWFuKHJlZ2lzdHJhdGlvbi5ydW50aW1lLmV2ZW50QnJpZGdlRXJyb3IpIHx8IEJvb2xlYW4ocmVnaXN0cmF0aW9uLnJ1bnRpbWUuY29tbWFuZEJyaWRnZUVycm9yKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyAnZGVncmFkZWQnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogKHN5bmM/LmVuYWJsZWQgJiYgc3luYz8ucnVubmluZyA/ICdjb25uZWN0ZWQnIDogJ2RlZ3JhZGVkJyk7XHJcblxyXG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSB7XHJcbiAgICAgICAgICAgIHBvc3R1cmUsXHJcbiAgICAgICAgICAgIGRhZW1vbjoge1xyXG4gICAgICAgICAgICAgICAgcnVubmluZzogZGFlbW9uLm9rLFxyXG4gICAgICAgICAgICAgICAgZXJyb3I6IGRhZW1vbi5vayA/IG51bGwgOiAoZGFlbW9uLmVycm9yID8/ICd1bmtub3duJylcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgcmVnaXN0cmF0aW9uOiByZWdpc3RyYXRpb24gPyB7XHJcbiAgICAgICAgICAgICAgICByZWdpc3RlcmVkOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgbWFjaGluZUlkOiByZWdpc3RyYXRpb24ubWFjaGluZUlkLFxyXG4gICAgICAgICAgICAgICAgdGVuYW50SWQ6IHJlZ2lzdHJhdGlvbi50ZW5hbnRJZCxcclxuICAgICAgICAgICAgICAgIHN0YXRlUGF0aDogZ2V0Q29ubmVjdG9yU3RhdGVQYXRoKCksXHJcbiAgICAgICAgICAgICAgICB1cGRhdGVkQXQ6IG5ldyBEYXRlKHJlZ2lzdHJhdGlvbi51cGRhdGVkQXQpLnRvSVNPU3RyaW5nKCksXHJcbiAgICAgICAgICAgICAgICBydW50aW1lOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXZlbnRCcmlkZ2VTdXBwb3J0ZWQ6IHJlZ2lzdHJhdGlvbi5ydW50aW1lLmV2ZW50QnJpZGdlU3VwcG9ydGVkLFxyXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50QnJpZGdlRXJyb3I6IHJlZ2lzdHJhdGlvbi5ydW50aW1lLmV2ZW50QnJpZGdlRXJyb3IsXHJcbiAgICAgICAgICAgICAgICAgICAgbGFzdEV2ZW50U2VxdWVuY2U6IHJlZ2lzdHJhdGlvbi5ydW50aW1lLmxhc3RFdmVudFNlcXVlbmNlLFxyXG4gICAgICAgICAgICAgICAgICAgIGxhc3RFdmVudFN5bmNBdDogcmVnaXN0cmF0aW9uLnJ1bnRpbWUubGFzdEV2ZW50U3luY0F0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gbmV3IERhdGUocmVnaXN0cmF0aW9uLnJ1bnRpbWUubGFzdEV2ZW50U3luY0F0KS50b0lTT1N0cmluZygpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBjb21tYW5kQnJpZGdlU3VwcG9ydGVkOiByZWdpc3RyYXRpb24ucnVudGltZS5jb21tYW5kQnJpZGdlU3VwcG9ydGVkLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmRCcmlkZ2VFcnJvcjogcmVnaXN0cmF0aW9uLnJ1bnRpbWUuY29tbWFuZEJyaWRnZUVycm9yLFxyXG4gICAgICAgICAgICAgICAgICAgIGxhc3RDb21tYW5kQ3Vyc29yOiByZWdpc3RyYXRpb24ucnVudGltZS5sYXN0Q29tbWFuZEN1cnNvcixcclxuICAgICAgICAgICAgICAgICAgICBsYXN0Q29tbWFuZFN5bmNBdDogcmVnaXN0cmF0aW9uLnJ1bnRpbWUubGFzdENvbW1hbmRTeW5jQXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyBuZXcgRGF0ZShyZWdpc3RyYXRpb24ucnVudGltZS5sYXN0Q29tbWFuZFN5bmNBdCkudG9JU09TdHJpbmcoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgcXVldWU6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGVuZGluZzogcmVnaXN0cmF0aW9uLnJ1bnRpbWUuZXZlbnRRdWV1ZVBlbmRpbmcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWR5OiByZWdpc3RyYXRpb24ucnVudGltZS5ldmVudFF1ZXVlUmVhZHksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tvZmY6IHJlZ2lzdHJhdGlvbi5ydW50aW1lLmV2ZW50UXVldWVCYWNrb2ZmXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IDoge1xyXG4gICAgICAgICAgICAgICAgcmVnaXN0ZXJlZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBtYWNoaW5lSWQ6IG51bGwsXHJcbiAgICAgICAgICAgICAgICB0ZW5hbnRJZDogbnVsbCxcclxuICAgICAgICAgICAgICAgIHN0YXRlUGF0aDogZ2V0Q29ubmVjdG9yU3RhdGVQYXRoKCksXHJcbiAgICAgICAgICAgICAgICB1cGRhdGVkQXQ6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBydW50aW1lOiBudWxsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGF1dGg6IHtcclxuICAgICAgICAgICAgICAgIGF1dGhlbnRpY2F0ZWQ6IEJvb2xlYW4odG9rZW4pLFxyXG4gICAgICAgICAgICAgICAgdGVuYW50SWQ6IHRva2VuPy50ZW5hbnRJZCA/PyBudWxsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGNsb3VkLFxyXG4gICAgICAgICAgICBzeW5jOiBzeW5jID8/IHtcclxuICAgICAgICAgICAgICAgIGVuYWJsZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgcnVubmluZzogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBsYXN0RXJyb3I6IGRhZW1vbi5vayA/ICdzeW5jX3N0YXR1c191bmF2YWlsYWJsZScgOiAnZGFlbW9uX3VucmVhY2hhYmxlJyxcclxuICAgICAgICAgICAgICAgIHF1ZXVlOiB7IHBlbmRpbmc6IDAsIGluRmxpZ2h0OiAwLCBmYWlsZWQ6IDAsIGRvbmU6IDAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBkYXNoYm9hcmRVcmw6IGdldEhvc3RlZERhc2hib2FyZFVybCgpXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgY29uc3QgYnJpZGdlUmVhc29uczogc3RyaW5nW10gPSBbXTtcclxuICAgICAgICBpZiAoIXBheWxvYWQucmVnaXN0cmF0aW9uLnJlZ2lzdGVyZWQgfHwgIXBheWxvYWQucmVnaXN0cmF0aW9uLnJ1bnRpbWUpIHtcclxuICAgICAgICAgICAgYnJpZGdlUmVhc29ucy5wdXNoKCdub3RfcmVnaXN0ZXJlZCcpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICghcGF5bG9hZC5yZWdpc3RyYXRpb24ucnVudGltZS5ldmVudEJyaWRnZVN1cHBvcnRlZCkge1xyXG4gICAgICAgICAgICAgICAgYnJpZGdlUmVhc29ucy5wdXNoKCdicmlkZ2Vfbm90X3N1cHBvcnRlZCcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChwYXlsb2FkLnJlZ2lzdHJhdGlvbi5ydW50aW1lLmV2ZW50QnJpZGdlRXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIGJyaWRnZVJlYXNvbnMucHVzaCgnYnJpZGdlX2Vycm9yJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCFwYXlsb2FkLnJlZ2lzdHJhdGlvbi5ydW50aW1lLmNvbW1hbmRCcmlkZ2VTdXBwb3J0ZWQpIHtcclxuICAgICAgICAgICAgICAgIGJyaWRnZVJlYXNvbnMucHVzaCgnY29tbWFuZF9icmlkZ2Vfbm90X3N1cHBvcnRlZCcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChwYXlsb2FkLnJlZ2lzdHJhdGlvbi5ydW50aW1lLmNvbW1hbmRCcmlkZ2VFcnJvcikge1xyXG4gICAgICAgICAgICAgICAgYnJpZGdlUmVhc29ucy5wdXNoKCdjb21tYW5kX2JyaWRnZV9lcnJvcicpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChwYXlsb2FkLnJlZ2lzdHJhdGlvbi5ydW50aW1lLnF1ZXVlLmJhY2tvZmYgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBicmlkZ2VSZWFzb25zLnB1c2goJ3F1ZXVlX2JhY2tvZmYnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBicmlkZ2UgPSB7XHJcbiAgICAgICAgICAgIHJlcXVpcmVkOiByZXF1aXJlQnJpZGdlLFxyXG4gICAgICAgICAgICBoZWFsdGh5OiBicmlkZ2VSZWFzb25zLmxlbmd0aCA9PT0gMCxcclxuICAgICAgICAgICAgcmVhc29uczogYnJpZGdlUmVhc29uc1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc3QgZXhpdENvZGUgPSAocmVxdWlyZUJyaWRnZSAmJiAhYnJpZGdlLmhlYWx0aHkpXHJcbiAgICAgICAgICAgID8gMVxyXG4gICAgICAgICAgICA6IChwb3N0dXJlID09PSAnY29ubmVjdGVkJyA/IDAgOiAxKTtcclxuXHJcbiAgICAgICAgaWYgKEJvb2xlYW4oZmxhZ3MuanNvbikpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoeyAuLi5wYXlsb2FkLCBicmlkZ2UgfSwgbnVsbCwgMikpO1xyXG4gICAgICAgICAgICByZXR1cm4gZXhpdENvZGU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zb2xlLmxvZygnXFxuQ29ubmVjdG9yIFN0YXR1c1xcbicpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGAgIHBvc3R1cmU6ICAgICAgJHtwYXlsb2FkLnBvc3R1cmV9YCk7XHJcbiAgICAgICAgY29uc29sZS5sb2coYCAgZGFlbW9uOiAgICAgICAke3BheWxvYWQuZGFlbW9uLnJ1bm5pbmcgPyAncnVubmluZycgOiAnbm90IHJ1bm5pbmcnfWApO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGAgIHJlZ2lzdHJhdGlvbjogJHtwYXlsb2FkLnJlZ2lzdHJhdGlvbi5yZWdpc3RlcmVkID8gJ3JlZ2lzdGVyZWQnIDogJ25vdCByZWdpc3RlcmVkJ31gKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhgICBhdXRoOiAgICAgICAgICR7cGF5bG9hZC5hdXRoLmF1dGhlbnRpY2F0ZWQgPyAnYXV0aGVudGljYXRlZCcgOiAnbm90IGF1dGhlbnRpY2F0ZWQnfWApO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGAgIGNsb3VkOiAgICAgICAgJHtwYXlsb2FkLmNsb3VkLmNvbm5lY3RlZCA/ICdjb25uZWN0ZWQnIDogKHBheWxvYWQuY2xvdWQucmVxdWlyZWQgPyAnbm90IGNvbm5lY3RlZCcgOiAnb3B0aW9uYWwnKX1gKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhgICBkYXNoYm9hcmQ6ICAgICR7cGF5bG9hZC5kYXNoYm9hcmRVcmx9YCk7XHJcbiAgICAgICAgaWYgKHBheWxvYWQucmVnaXN0cmF0aW9uLnJlZ2lzdGVyZWQpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coYCAgbWFjaGluZV9pZDogICAke3BheWxvYWQucmVnaXN0cmF0aW9uLm1hY2hpbmVJZH1gKTtcclxuICAgICAgICAgICAgaWYgKHBheWxvYWQucmVnaXN0cmF0aW9uLnJ1bnRpbWUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxyXG4gICAgICAgICAgICAgICAgICAgIGAgIGV2ZW50X2JyaWRnZTogc3VwcG9ydGVkPSR7cGF5bG9hZC5yZWdpc3RyYXRpb24ucnVudGltZS5ldmVudEJyaWRnZVN1cHBvcnRlZH1gICtcclxuICAgICAgICAgICAgICAgICAgICBgIHNlcXVlbmNlPSR7cGF5bG9hZC5yZWdpc3RyYXRpb24ucnVudGltZS5sYXN0RXZlbnRTZXF1ZW5jZX1gXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXHJcbiAgICAgICAgICAgICAgICAgICAgYCAgY29tbWFuZF9icmlkZ2U6IHN1cHBvcnRlZD0ke3BheWxvYWQucmVnaXN0cmF0aW9uLnJ1bnRpbWUuY29tbWFuZEJyaWRnZVN1cHBvcnRlZH1gICtcclxuICAgICAgICAgICAgICAgICAgICBgIGN1cnNvcj0ke3BheWxvYWQucmVnaXN0cmF0aW9uLnJ1bnRpbWUubGFzdENvbW1hbmRDdXJzb3J9YFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxyXG4gICAgICAgICAgICAgICAgICAgIGAgIGV2ZW50X3F1ZXVlOiAgcGVuZGluZz0ke3BheWxvYWQucmVnaXN0cmF0aW9uLnJ1bnRpbWUucXVldWUucGVuZGluZ31gICtcclxuICAgICAgICAgICAgICAgICAgICBgIHJlYWR5PSR7cGF5bG9hZC5yZWdpc3RyYXRpb24ucnVudGltZS5xdWV1ZS5yZWFkeX1gICtcclxuICAgICAgICAgICAgICAgICAgICBgIGJhY2tvZmY9JHtwYXlsb2FkLnJlZ2lzdHJhdGlvbi5ydW50aW1lLnF1ZXVlLmJhY2tvZmZ9YFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIGlmIChwYXlsb2FkLnJlZ2lzdHJhdGlvbi5ydW50aW1lLmxhc3RFdmVudFN5bmNBdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGAgIGV2ZW50X3N5bmM6ICAgJHtwYXlsb2FkLnJlZ2lzdHJhdGlvbi5ydW50aW1lLmxhc3RFdmVudFN5bmNBdH1gKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChwYXlsb2FkLnJlZ2lzdHJhdGlvbi5ydW50aW1lLmV2ZW50QnJpZGdlRXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgICBldmVudF9lcnJvcjogICR7cGF5bG9hZC5yZWdpc3RyYXRpb24ucnVudGltZS5ldmVudEJyaWRnZUVycm9yfWApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHBheWxvYWQucmVnaXN0cmF0aW9uLnJ1bnRpbWUubGFzdENvbW1hbmRTeW5jQXQpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgICBjb21tYW5kX3N5bmM6ICR7cGF5bG9hZC5yZWdpc3RyYXRpb24ucnVudGltZS5sYXN0Q29tbWFuZFN5bmNBdH1gKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChwYXlsb2FkLnJlZ2lzdHJhdGlvbi5ydW50aW1lLmNvbW1hbmRCcmlkZ2VFcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGAgIGNvbW1hbmRfZXJyb3I6ICR7cGF5bG9hZC5yZWdpc3RyYXRpb24ucnVudGltZS5jb21tYW5kQnJpZGdlRXJyb3J9YCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHBheWxvYWQuY2xvdWQucmVnaXN0cmF0aW9uSWQpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coYCAgY2xvdWRfcmVnX2lkOiAke3BheWxvYWQuY2xvdWQucmVnaXN0cmF0aW9uSWR9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwYXlsb2FkLmNsb3VkLmxhc3RFcnJvcikge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgICBjbG91ZF9lcnJvcjogICR7cGF5bG9hZC5jbG91ZC5sYXN0RXJyb3J9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwYXlsb2FkLnN5bmMpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coYCAgc3luYzogICAgICAgICBlbmFibGVkPSR7cGF5bG9hZC5zeW5jLmVuYWJsZWR9IHJ1bm5pbmc9JHtwYXlsb2FkLnN5bmMucnVubmluZ31gKTtcclxuICAgICAgICAgICAgaWYgKHBheWxvYWQuc3luYy5sYXN0RXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGAgIHN5bmNfZXJyb3I6ICAgJHtwYXlsb2FkLnN5bmMubGFzdEVycm9yfWApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghcGF5bG9hZC5kYWVtb24ucnVubmluZyAmJiBwYXlsb2FkLmRhZW1vbi5lcnJvcikge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgICBkYWVtb25fZXJyb3I6ICR7cGF5bG9hZC5kYWVtb24uZXJyb3J9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChyZXF1aXJlQnJpZGdlIHx8ICFicmlkZ2UuaGVhbHRoeSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgICBicmlkZ2U6ICAgICAgICR7YnJpZGdlLmhlYWx0aHkgPyAnaGVhbHRoeScgOiAndW5oZWFsdGh5J31gKTtcclxuICAgICAgICAgICAgaWYgKCFicmlkZ2UuaGVhbHRoeSkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYCAgYnJpZGdlX2lzc3VlOiAke2JyaWRnZS5yZWFzb25zLmpvaW4oJywnKX1gKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zb2xlLmxvZygnJyk7XHJcbiAgICAgICAgcmV0dXJuIGV4aXRDb2RlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChhY3Rpb24gPT09ICdsb2dzJykge1xyXG4gICAgICAgIGNvbnN0IHBsYXRmb3JtID0gb3MucGxhdGZvcm0oKTtcclxuICAgICAgICBpZiAocGxhdGZvcm0gPT09ICd3aW4zMicpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ1VzZSBXaW5kb3dzIEV2ZW50IFZpZXdlciAoQXBwbGljYXRpb24gbG9ncykgZm9yIHNlcnZpY2UgZGlhZ25vc3RpY3MuJyk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChwbGF0Zm9ybSA9PT0gJ2RhcndpbicpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ1VzZTogbG9nIHN0cmVhbSAtLXByb2Nlc3MgMGN0eC1kYWVtb24nKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHBsYXRmb3JtID09PSAnbGludXgnKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdVc2U6IHN5c3RlbWN0bCAtLXVzZXIgc3RhdHVzIDBjdHgtZGFlbW9uICYmIGpvdXJuYWxjdGwgLS11c2VyIC11IDBjdHgtZGFlbW9uIC1mJyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ05vIGxvZyBoZWxwZXIgYXZhaWxhYmxlIGZvciB0aGlzIHBsYXRmb3JtLicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gMDtcclxuICAgIH1cclxuXHJcbiAgICBjb25zb2xlLmxvZyhgY29ubmVjdG9yICR7YWN0aW9ufTogZGVsZWdhdGluZyB0byBtYW5hZ2VkIHNlcnZpY2UgbGlmZWN5Y2xlIGNvbW1hbmRzLmApO1xyXG4gICAgcmV0dXJuIGNvbW1hbmREYWVtb25TZXJ2aWNlKGFjdGlvbik7XHJcbn1cclxuXHJcbmFzeW5jIGZ1bmN0aW9uIGNvbW1hbmRTZXR1cChmbGFnczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgYm9vbGVhbj4pOiBQcm9taXNlPG51bWJlcj4ge1xyXG4gICAgY29uc3QgYXNKc29uID0gQm9vbGVhbihmbGFncy5qc29uKTtcclxuICAgIGNvbnN0IHF1aWV0ID0gQm9vbGVhbihmbGFncy5xdWlldCkgfHwgYXNKc29uO1xyXG4gICAgY29uc3Qgc2tpcFNlcnZpY2UgPSBCb29sZWFuKGZsYWdzWydza2lwLXNlcnZpY2UnXSk7XHJcbiAgICBjb25zdCBza2lwQm9vdHN0cmFwID0gQm9vbGVhbihmbGFnc1snc2tpcC1ib290c3RyYXAnXSk7XHJcbiAgICBjb25zdCByZXF1aXJlQ2xvdWQgPSBCb29sZWFuKGZsYWdzWydyZXF1aXJlLWNsb3VkJ10pO1xyXG4gICAgY29uc3Qgd2FpdENsb3VkUmVhZHkgPSBCb29sZWFuKGZsYWdzWyd3YWl0LWNsb3VkLXJlYWR5J10pO1xyXG4gICAgY29uc3QgY2xvdWRXYWl0VGltZW91dE1zID0gcGFyc2VQb3NpdGl2ZUludGVnZXJGbGFnKGZsYWdzWydjbG91ZC13YWl0LXRpbWVvdXQtbXMnXSwgNjBfMDAwKTtcclxuICAgIGNvbnN0IGNsb3VkV2FpdEludGVydmFsTXMgPSBwYXJzZVBvc2l0aXZlSW50ZWdlckZsYWcoZmxhZ3NbJ2Nsb3VkLXdhaXQtaW50ZXJ2YWwtbXMnXSwgMl8wMDApO1xyXG4gICAgY29uc3QgY3JlYXRlQ29udGV4dE5hbWUgPSBwYXJzZU9wdGlvbmFsU3RyaW5nRmxhZyhmbGFnc1snY3JlYXRlLWNvbnRleHQnXSk7XHJcbiAgICBjb25zdCBkYXNoYm9hcmRRdWVyeUlucHV0ID0gZmxhZ3NbJ2Rhc2hib2FyZC1xdWVyeSddO1xyXG4gICAgY29uc3Qgc3RlcHM6IEFycmF5PHtcclxuICAgICAgICBpZDogc3RyaW5nO1xyXG4gICAgICAgIHN0YXR1czogJ3Bhc3MnIHwgJ3dhcm4nIHwgJ2ZhaWwnO1xyXG4gICAgICAgIGNvZGU6IG51bWJlcjtcclxuICAgICAgICBtZXNzYWdlOiBzdHJpbmc7XHJcbiAgICB9PiA9IFtdO1xyXG5cclxuICAgIGlmICghcXVpZXQpIHtcclxuICAgICAgICBjb25zb2xlLmxvZygnUnVubmluZyBzZXR1cCB3b3JrZmxvdy4uLicpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghcmVzb2x2ZVRva2VuKCkpIHtcclxuICAgICAgICBpZiAoIXF1aWV0KSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdhdXRoOiBubyBhY3RpdmUgc2Vzc2lvbiBmb3VuZC4gU3RhcnRpbmcgbG9naW4uLi4nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgYXV0aENvZGUgPSBhd2FpdCBjb21tYW5kQXV0aExvZ2luKGZsYWdzKTtcclxuICAgICAgICBzdGVwcy5wdXNoKHtcclxuICAgICAgICAgICAgaWQ6ICdhdXRoX2xvZ2luJyxcclxuICAgICAgICAgICAgc3RhdHVzOiBhdXRoQ29kZSA9PT0gMCA/ICdwYXNzJyA6ICdmYWlsJyxcclxuICAgICAgICAgICAgY29kZTogYXV0aENvZGUsXHJcbiAgICAgICAgICAgIG1lc3NhZ2U6IGF1dGhDb2RlID09PSAwID8gJ0F1dGhlbnRpY2F0aW9uIGNvbXBsZXRlZC4nIDogJ0F1dGhlbnRpY2F0aW9uIGZhaWxlZC4nXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKGF1dGhDb2RlICE9PSAwKSB7XHJcbiAgICAgICAgICAgIGlmIChhc0pzb24pIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHsgb2s6IGZhbHNlLCBzdGVwcywgZGFzaGJvYXJkVXJsOiBnZXRIb3N0ZWREYXNoYm9hcmRVcmwoKSB9LCBudWxsLCAyKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGF1dGhDb2RlO1xyXG4gICAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKCFxdWlldCkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnYXV0aDogYWxyZWFkeSBsb2dnZWQgaW4nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc3RlcHMucHVzaCh7XHJcbiAgICAgICAgICAgIGlkOiAnYXV0aF9sb2dpbicsXHJcbiAgICAgICAgICAgIHN0YXR1czogJ3Bhc3MnLFxyXG4gICAgICAgICAgICBjb2RlOiAwLFxyXG4gICAgICAgICAgICBtZXNzYWdlOiAnQWxyZWFkeSBhdXRoZW50aWNhdGVkLidcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc2tpcFNlcnZpY2UpIHtcclxuICAgICAgICBzdGVwcy5wdXNoKHtcclxuICAgICAgICAgICAgaWQ6ICdjb25uZWN0b3Jfc2VydmljZScsXHJcbiAgICAgICAgICAgIHN0YXR1czogJ3dhcm4nLFxyXG4gICAgICAgICAgICBjb2RlOiAwLFxyXG4gICAgICAgICAgICBtZXNzYWdlOiAnU2VydmljZSBpbnN0YWxsYXRpb24vc3RhcnQgd2FzIHNraXBwZWQgYnkgLS1za2lwLXNlcnZpY2UuJ1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBCZXN0IGVmZm9ydDogaW5zdGFsbC9lbmFibGUvc3RhcnQgbWFuYWdlZCBzZXJ2aWNlLlxyXG4gICAgICAgIGZvciAoY29uc3QgYWN0aW9uIG9mIFsnaW5zdGFsbCcsICdlbmFibGUnLCAnc3RhcnQnXSBhcyBjb25zdCkge1xyXG4gICAgICAgICAgICBjb25zdCBjb2RlID0gYXdhaXQgY29tbWFuZENvbm5lY3RvcihhY3Rpb24sIHsgLi4uZmxhZ3MsIHF1aWV0IH0pO1xyXG4gICAgICAgICAgICBzdGVwcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgIGlkOiBgY29ubmVjdG9yX3NlcnZpY2VfJHthY3Rpb259YCxcclxuICAgICAgICAgICAgICAgIHN0YXR1czogY29kZSA9PT0gMCA/ICdwYXNzJyA6ICd3YXJuJyxcclxuICAgICAgICAgICAgICAgIGNvZGUsXHJcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBjb2RlID09PSAwXHJcbiAgICAgICAgICAgICAgICAgICAgPyBgQ29ubmVjdG9yIHNlcnZpY2UgJHthY3Rpb259IHN1Y2NlZWRlZC5gXHJcbiAgICAgICAgICAgICAgICAgICAgOiBgQ29ubmVjdG9yIHNlcnZpY2UgJHthY3Rpb259IGZhaWxlZDsgY29udGludWluZyB3aXRoIGxvY2FsIHJ1bnRpbWUgZmxvdy5gXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBpZiAoY29kZSAhPT0gMCAmJiAhcXVpZXQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBjb25uZWN0b3IgJHthY3Rpb259OiB3YXJuaW5nIChjb250aW51aW5nIHdpdGggbG9jYWwgcnVudGltZSBmbG93KWApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGluc3RhbGxDb2RlID0gYXdhaXQgY29tbWFuZEluc3RhbGwoeyAuLi5mbGFncywgcXVpZXQsIGpzb246IGZhbHNlLCAnc2tpcC1ib290c3RyYXAnOiBza2lwQm9vdHN0cmFwIH0pO1xyXG4gICAgc3RlcHMucHVzaCh7XHJcbiAgICAgICAgaWQ6ICdpbnN0YWxsJyxcclxuICAgICAgICBzdGF0dXM6IGluc3RhbGxDb2RlID09PSAwID8gJ3Bhc3MnIDogJ2ZhaWwnLFxyXG4gICAgICAgIGNvZGU6IGluc3RhbGxDb2RlLFxyXG4gICAgICAgIG1lc3NhZ2U6IGluc3RhbGxDb2RlID09PSAwXHJcbiAgICAgICAgICAgID8gYEluc3RhbGwgd29ya2Zsb3cgY29tcGxldGVkJHtza2lwQm9vdHN0cmFwID8gJyAoYm9vdHN0cmFwIHNraXBwZWQpLicgOiAnLid9YFxyXG4gICAgICAgICAgICA6ICdJbnN0YWxsIHdvcmtmbG93IGZhaWxlZC4nXHJcbiAgICB9KTtcclxuICAgIGlmIChpbnN0YWxsQ29kZSAhPT0gMCkge1xyXG4gICAgICAgIGlmIChhc0pzb24pIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoeyBvazogZmFsc2UsIHN0ZXBzLCBkYXNoYm9hcmRVcmw6IGdldEhvc3RlZERhc2hib2FyZFVybCgpIH0sIG51bGwsIDIpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGluc3RhbGxDb2RlO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHJlZ2lzdGVyQ29kZSA9IGF3YWl0IGNvbW1hbmRDb25uZWN0b3IoJ3JlZ2lzdGVyJywgeyAuLi5mbGFncywgcXVpZXQ6IHRydWUsIGpzb246IGZhbHNlLCAncmVxdWlyZS1jbG91ZCc6IHJlcXVpcmVDbG91ZCB9KTtcclxuICAgIHN0ZXBzLnB1c2goe1xyXG4gICAgICAgIGlkOiAnY29ubmVjdG9yX3JlZ2lzdGVyJyxcclxuICAgICAgICBzdGF0dXM6IHJlZ2lzdGVyQ29kZSA9PT0gMCA/ICdwYXNzJyA6ICdmYWlsJyxcclxuICAgICAgICBjb2RlOiByZWdpc3RlckNvZGUsXHJcbiAgICAgICAgbWVzc2FnZTogcmVnaXN0ZXJDb2RlID09PSAwID8gJ0Nvbm5lY3RvciByZWdpc3RyYXRpb24gY29tcGxldGVkLicgOiAnQ29ubmVjdG9yIHJlZ2lzdHJhdGlvbiBmYWlsZWQuJ1xyXG4gICAgfSk7XHJcbiAgICBpZiAocmVnaXN0ZXJDb2RlICE9PSAwKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignc2V0dXBfcmVnaXN0ZXJfZmFpbGVkOiB1bmFibGUgdG8gcmVnaXN0ZXIgY29ubmVjdG9yIG1ldGFkYXRhJyk7XHJcbiAgICAgICAgaWYgKGFzSnNvbikge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeSh7IG9rOiBmYWxzZSwgc3RlcHMsIGRhc2hib2FyZFVybDogZ2V0SG9zdGVkRGFzaGJvYXJkVXJsKCkgfSwgbnVsbCwgMikpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVnaXN0ZXJDb2RlO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHZlcmlmeUNvZGUgPSBhd2FpdCBjb21tYW5kQ29ubmVjdG9yKCd2ZXJpZnknLCB7XHJcbiAgICAgICAgLi4uZmxhZ3MsXHJcbiAgICAgICAgcXVpZXQ6IHRydWUsXHJcbiAgICAgICAganNvbjogZmFsc2UsXHJcbiAgICAgICAgJ3JlcXVpcmUtY2xvdWQnOiByZXF1aXJlQ2xvdWQsXHJcbiAgICAgICAgY2xvdWQ6IHJlcXVpcmVDbG91ZFxyXG4gICAgfSk7XHJcbiAgICBzdGVwcy5wdXNoKHtcclxuICAgICAgICBpZDogJ2Nvbm5lY3Rvcl92ZXJpZnknLFxyXG4gICAgICAgIHN0YXR1czogdmVyaWZ5Q29kZSA9PT0gMCA/ICdwYXNzJyA6ICdmYWlsJyxcclxuICAgICAgICBjb2RlOiB2ZXJpZnlDb2RlLFxyXG4gICAgICAgIG1lc3NhZ2U6IHZlcmlmeUNvZGUgPT09IDAgPyAnQ29ubmVjdG9yIHZlcmlmaWNhdGlvbiBwYXNzZWQuJyA6ICdDb25uZWN0b3IgdmVyaWZpY2F0aW9uIGZhaWxlZC4nXHJcbiAgICB9KTtcclxuICAgIGlmICh2ZXJpZnlDb2RlICE9PSAwKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignc2V0dXBfdmVyaWZ5X2ZhaWxlZDogY29ubmVjdG9yL3J1bnRpbWUgdmVyaWZpY2F0aW9uIGZhaWxlZCcpO1xyXG4gICAgICAgIGlmIChhc0pzb24pIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoeyBvazogZmFsc2UsIHN0ZXBzLCBkYXNoYm9hcmRVcmw6IGdldEhvc3RlZERhc2hib2FyZFVybCgpIH0sIG51bGwsIDIpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHZlcmlmeUNvZGU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHdhaXRDbG91ZFJlYWR5IHx8IHJlcXVpcmVDbG91ZCkge1xyXG4gICAgICAgIGlmICghcXVpZXQpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ2Nsb3VkOiB3YWl0aW5nIGZvciBjb25uZWN0b3IgY2xvdWQtcmVhZHkgcG9zdHVyZS4uLicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3Qgd2FpdFN0YXJ0ZWRBdCA9IERhdGUubm93KCk7XHJcbiAgICAgICAgbGV0IGF0dGVtcHRzID0gMDtcclxuICAgICAgICBsZXQgcmVhZHkgPSBmYWxzZTtcclxuICAgICAgICB3aGlsZSAoRGF0ZS5ub3coKSAtIHdhaXRTdGFydGVkQXQgPCBjbG91ZFdhaXRUaW1lb3V0TXMpIHtcclxuICAgICAgICAgICAgYXR0ZW1wdHMgKz0gMTtcclxuICAgICAgICAgICAgY29uc3QgY2xvdWRWZXJpZnlDb2RlID0gYXdhaXQgY29tbWFuZENvbm5lY3RvcigndmVyaWZ5Jywge1xyXG4gICAgICAgICAgICAgICAgLi4uZmxhZ3MsXHJcbiAgICAgICAgICAgICAgICBxdWlldDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIGpzb246IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgJ3JlcXVpcmUtY2xvdWQnOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgY2xvdWQ6IHRydWVcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGlmIChjbG91ZFZlcmlmeUNvZGUgPT09IDApIHtcclxuICAgICAgICAgICAgICAgIHJlYWR5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGF3YWl0IHNsZWVwTXMoY2xvdWRXYWl0SW50ZXJ2YWxNcyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBlbGFwc2VkTXMgPSBEYXRlLm5vdygpIC0gd2FpdFN0YXJ0ZWRBdDtcclxuICAgICAgICBzdGVwcy5wdXNoKHtcclxuICAgICAgICAgICAgaWQ6ICdjbG91ZF9yZWFkeScsXHJcbiAgICAgICAgICAgIHN0YXR1czogcmVhZHkgPyAncGFzcycgOiAnZmFpbCcsXHJcbiAgICAgICAgICAgIGNvZGU6IHJlYWR5ID8gMCA6IDEsXHJcbiAgICAgICAgICAgIG1lc3NhZ2U6IHJlYWR5XHJcbiAgICAgICAgICAgICAgICA/IGBDbG91ZC1yZWFkeSBwb3N0dXJlIGNvbmZpcm1lZCBhZnRlciAke2F0dGVtcHRzfSBhdHRlbXB0KHMpIGluICR7ZWxhcHNlZE1zfW1zLmBcclxuICAgICAgICAgICAgICAgIDogYENsb3VkLXJlYWR5IHBvc3R1cmUgbm90IGNvbmZpcm1lZCB3aXRoaW4gJHtlbGFwc2VkTXN9bXMgKCR7YXR0ZW1wdHN9IGF0dGVtcHQocykpLmBcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgaWYgKCFyZWFkeSkge1xyXG4gICAgICAgICAgICBpZiAoYXNKc29uKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeSh7IG9rOiBmYWxzZSwgc3RlcHMsIGRhc2hib2FyZFVybDogZ2V0SG9zdGVkRGFzaGJvYXJkVXJsKCkgfSwgbnVsbCwgMikpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignc2V0dXBfY2xvdWRfcmVhZHlfdGltZW91dDogY29ubmVjdG9yIGRpZCBub3QgcmVhY2ggY2xvdWQtcmVhZHkgcG9zdHVyZSB3aXRoaW4gdGltZW91dCcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBsZXQgY3JlYXRlZENvbnRleHRJZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcbiAgICBpZiAoY3JlYXRlQ29udGV4dE5hbWUpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCBjcmVhdGVkID0gYXdhaXQgc2VuZFRvRGFlbW9uKCdjcmVhdGVDb250ZXh0JywgeyBuYW1lOiBjcmVhdGVDb250ZXh0TmFtZSB9KSBhcyB7IGlkPzogc3RyaW5nOyBjb250ZXh0SWQ/OiBzdHJpbmcgfTtcclxuICAgICAgICAgICAgY3JlYXRlZENvbnRleHRJZCA9IGNyZWF0ZWQ/LmlkID8/IGNyZWF0ZWQ/LmNvbnRleHRJZCA/PyBudWxsO1xyXG4gICAgICAgICAgICBzdGVwcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgIGlkOiAnY3JlYXRlX2NvbnRleHQnLFxyXG4gICAgICAgICAgICAgICAgc3RhdHVzOiAncGFzcycsXHJcbiAgICAgICAgICAgICAgICBjb2RlOiAwLFxyXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogYENvbnRleHQgY3JlYXRlZDogJHtjcmVhdGVDb250ZXh0TmFtZX1gXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVycm9yVGV4dCA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKTtcclxuICAgICAgICAgICAgc3RlcHMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICBpZDogJ2NyZWF0ZV9jb250ZXh0JyxcclxuICAgICAgICAgICAgICAgIHN0YXR1czogJ2ZhaWwnLFxyXG4gICAgICAgICAgICAgICAgY29kZTogMSxcclxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBGYWlsZWQgdG8gY3JlYXRlIGNvbnRleHQgJyR7Y3JlYXRlQ29udGV4dE5hbWV9JzogJHtlcnJvclRleHR9YFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgaWYgKGFzSnNvbikge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoeyBvazogZmFsc2UsIHN0ZXBzLCBkYXNoYm9hcmRVcmw6IGdldEhvc3RlZERhc2hib2FyZFVybCgpIH0sIG51bGwsIDIpKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYHNldHVwX2NyZWF0ZV9jb250ZXh0X2ZhaWxlZDogJHtlcnJvclRleHR9YCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCBkYXNoYm9hcmRRdWVyeSA9IHBhcnNlT3B0aW9uYWxTdHJpbmdGbGFnKGRhc2hib2FyZFF1ZXJ5SW5wdXQpO1xyXG4gICAgaWYgKGRhc2hib2FyZFF1ZXJ5SW5wdXQgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGNvbnN0IHBhcnRzID0gbmV3IFVSTFNlYXJjaFBhcmFtcyhkYXNoYm9hcmRRdWVyeSA/PyAnJyk7XHJcbiAgICAgICAgY29uc3Qgc3RhdGUgPSByZWFkQ29ubmVjdG9yU3RhdGUoKTtcclxuICAgICAgICBpZiAoc3RhdGUpIHtcclxuICAgICAgICAgICAgcGFydHMuc2V0KCdtYWNoaW5lSWQnLCBzdGF0ZS5tYWNoaW5lSWQpO1xyXG4gICAgICAgICAgICBpZiAoc3RhdGUudGVuYW50SWQpIHBhcnRzLnNldCgndGVuYW50SWQnLCBzdGF0ZS50ZW5hbnRJZCk7XHJcbiAgICAgICAgICAgIHBhcnRzLnNldCgncmVnaXN0cmF0aW9uTW9kZScsIHN0YXRlLnJlZ2lzdHJhdGlvbk1vZGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY3JlYXRlQ29udGV4dE5hbWUpIHBhcnRzLnNldCgnY29udGV4dE5hbWUnLCBjcmVhdGVDb250ZXh0TmFtZSk7XHJcbiAgICAgICAgaWYgKGNyZWF0ZWRDb250ZXh0SWQpIHBhcnRzLnNldCgnY29udGV4dElkJywgY3JlYXRlZENvbnRleHRJZCk7XHJcbiAgICAgICAgaWYgKHJlcXVpcmVDbG91ZCkgcGFydHMuc2V0KCdyZXF1aXJlQ2xvdWQnLCAnMScpO1xyXG4gICAgICAgIGRhc2hib2FyZFF1ZXJ5ID0gcGFydHMudG9TdHJpbmcoKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCByZXNvbHZlZERhc2hib2FyZFVybCA9IGFwcGx5RGFzaGJvYXJkUXVlcnkoZ2V0SG9zdGVkRGFzaGJvYXJkVXJsKCksIGRhc2hib2FyZFF1ZXJ5ID8/IHVuZGVmaW5lZCk7XHJcbiAgICBjb25zdCBkYXNoYm9hcmRGbGFncyA9IGRhc2hib2FyZFF1ZXJ5ID8geyAuLi5mbGFncywgJ2Rhc2hib2FyZC1xdWVyeSc6IGRhc2hib2FyZFF1ZXJ5IH0gOiBmbGFncztcclxuICAgIGNvbnN0IGRhc2hib2FyZENvZGUgPSBhc0pzb24gPyAwIDogYXdhaXQgY29tbWFuZERhc2hib2FyZChkYXNoYm9hcmRGbGFncyk7XHJcbiAgICBzdGVwcy5wdXNoKHtcclxuICAgICAgICBpZDogJ2Rhc2hib2FyZF9oYW5kb2ZmJyxcclxuICAgICAgICBzdGF0dXM6IGRhc2hib2FyZENvZGUgPT09IDAgPyAncGFzcycgOiAnZmFpbCcsXHJcbiAgICAgICAgY29kZTogZGFzaGJvYXJkQ29kZSxcclxuICAgICAgICBtZXNzYWdlOiBkYXNoYm9hcmRDb2RlID09PSAwID8gJ0Rhc2hib2FyZCBoYW5kb2ZmIGNvbXBsZXRlZC4nIDogJ0Rhc2hib2FyZCBoYW5kb2ZmIGZhaWxlZC4nXHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAoYXNKc29uKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoe1xyXG4gICAgICAgICAgICBvazogZGFzaGJvYXJkQ29kZSA9PT0gMCxcclxuICAgICAgICAgICAgc3RlcHMsXHJcbiAgICAgICAgICAgIGRhc2hib2FyZFVybDogcmVzb2x2ZWREYXNoYm9hcmRVcmxcclxuICAgICAgICB9LCBudWxsLCAyKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGRhc2hib2FyZENvZGU7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHByaW50SGVscCgpOiB2b2lkIHtcclxuICAgIGNvbnNvbGUubG9nKGAwY3R4IENMSVxyXG5cclxuVXNhZ2U6XHJcbiAgMGN0eCAgICAgICAgICAgICAgICAgICAgRmlyc3QgcnVuOiBhdXRvIHNldHVwICsgYXV0aC4gQWZ0ZXJ3YXJkczogaW50ZXJhY3RpdmUgc2hlbGwuXHJcbiAgMGN0eCBzaGVsbFxyXG4gIDBjdHggc2V0dXAgWy0tY2xpZW50cz1hbGx8Y2xhdWRlLGN1cnNvcix3aW5kc3VyZl0gWy0tbm8tb3Blbl0gWy0tanNvbl1cclxuICAgICAgICAgICAgIFstLXJlcXVpcmUtY2xvdWRdIFstLXdhaXQtY2xvdWQtcmVhZHldXHJcbiAgICAgICAgICAgICBbLS1jbG91ZC13YWl0LXRpbWVvdXQtbXM9NjAwMDBdIFstLWNsb3VkLXdhaXQtaW50ZXJ2YWwtbXM9MjAwMF1cclxuICAgICAgICAgICAgIFstLWNyZWF0ZS1jb250ZXh0PTxuYW1lPl0gWy0tZGFzaGJvYXJkLXF1ZXJ5Wz1rPXYmLi4uXV1cclxuICAgICAgICAgICAgIFstLXNraXAtc2VydmljZV0gWy0tc2tpcC1ib290c3RyYXBdXHJcbiAgMGN0eCBpbnN0YWxsIFstLWNsaWVudHM9YWxsfGNsYXVkZSxjdXJzb3Isd2luZHN1cmZdIFstLWpzb25dIFstLXNraXAtYm9vdHN0cmFwXVxyXG4gIDBjdHggYm9vdHN0cmFwIFstLWRyeS1ydW5dIFstLWNsaWVudHM9Li4uXSBbLS1qc29uXVxyXG4gIDBjdHggZG9jdG9yIFstLWpzb25dIFstLWNsaWVudHM9Li4uXVxyXG4gIDBjdHggc3RhdHVzXHJcbiAgMGN0eCByZXBhaXIgWy0tY2xpZW50cz0uLi5dXHJcbiAgMGN0eCBkYXNoYm9hcmQgWy0tbm8tb3Blbl0gWy0tZGFzaGJvYXJkLXF1ZXJ5PWs9diYuLi5dXHJcbiAgMGN0eCByZWxlYXNlIHB1Ymxpc2ggLS12ZXJzaW9uIHZYLlkuWiBbLS10YWcgbGF0ZXN0fG5leHRdIFstLW90cCAxMjM0NTZdIFstLWRyeS1ydW5dIFstLWpzb25dXHJcbiAgMGN0eCBkYWVtb24gc3RhcnRcclxuXHJcbkF1dGhlbnRpY2F0aW9uOlxyXG4gIDBjdHggYXV0aCBsb2dpbiAgICBTdGFydCBkZXZpY2UtY29kZSBsb2dpbiBmbG93XHJcbiAgMGN0eCBhdXRoIGxvZ291dCAgIENsZWFyIHN0b3JlZCBjcmVkZW50aWFsc1xyXG4gIDBjdHggYXV0aCBzdGF0dXMgICBTaG93IGN1cnJlbnQgYXV0aCBzdGF0ZVxyXG4gIDBjdHggYXV0aCBzdGF0dXMgLS1qc29uXHJcblxyXG5Db25maWd1cmF0aW9uOlxyXG4gIDBjdHggY29uZmlnIGxpc3QgICAgICAgICAgICAgIFNob3cgYWxsIHNldHRpbmdzXHJcbiAgMGN0eCBjb25maWcgZ2V0IDxrZXk+ICAgICAgICAgR2V0IGEgc3BlY2lmaWMgc2V0dGluZ1xyXG4gIDBjdHggY29uZmlnIHNldCA8a2V5PiA8dmFsdWU+IFNldCBhIHNwZWNpZmljIHNldHRpbmdcclxuXHJcbiAgQ29uZmlnIGtleXM6IGF1dGguc2VydmVyLCBzeW5jLmVuYWJsZWQsIHN5bmMuZW5kcG9pbnQsIHVpLnVybCxcclxuICAgICAgICAgICAgICAgaW50ZWdyYXRpb24uY2hhdGdwdC5lbmFibGVkLCBpbnRlZ3JhdGlvbi5jaGF0Z3B0LnJlcXVpcmVBcHByb3ZhbCwgaW50ZWdyYXRpb24uYXV0b0Jvb3RzdHJhcFxyXG5cclxuU3luYzpcclxuICAwY3R4IHN5bmMgc3RhdHVzICAgU2hvdyBzeW5jIGVuZ2luZSBoZWFsdGggYW5kIHF1ZXVlXHJcbiAgMGN0eCBzeW5jIHBvbGljeSBnZXQgLS1jb250ZXh0LWlkPTxjb250ZXh0SWQ+XHJcbiAgMGN0eCBzeW5jIHBvbGljeSBzZXQgPGxvY2FsX29ubHl8bWV0YWRhdGFfb25seXxmdWxsX3N5bmM+IC0tY29udGV4dC1pZD08Y29udGV4dElkPlxyXG5cclxuQ29ubmVjdG9yOlxyXG4gIDBjdHggY29ubmVjdG9yIHNlcnZpY2UgaW5zdGFsbHxlbmFibGV8ZGlzYWJsZXx1bmluc3RhbGx8c3RhdHVzfHN0YXJ0fHN0b3B8cmVzdGFydFxyXG4gIDBjdHggY29ubmVjdG9yIGluc3RhbGx8ZW5hYmxlfGRpc2FibGV8dW5pbnN0YWxsfHN0YXR1c3xzdGFydHxzdG9wfHJlc3RhcnRcclxuICAwY3R4IGNvbm5lY3RvciBzdGF0dXMgWy0tanNvbl0gWy0tY2xvdWRdIFstLXJlcXVpcmUtYnJpZGdlXVxyXG4gIDBjdHggY29ubmVjdG9yIHZlcmlmeSBbLS1yZXF1aXJlLWNsb3VkXSBbLS1qc29uXVxyXG4gIDBjdHggY29ubmVjdG9yIHJlZ2lzdGVyIFstLWZvcmNlXSBbLS1sb2NhbC1vbmx5XSBbLS1yZXF1aXJlLWNsb3VkXSBbLS1qc29uXVxyXG4gIDBjdHggY29ubmVjdG9yIHJ1biBbLS1vbmNlXSBbLS1pbnRlcnZhbC1tcz0zMDAwMF0gWy0tbm8tZGFlbW9uLWF1dG9zdGFydF1cclxuICAwY3R4IGNvbm5lY3RvciBxdWV1ZSBzdGF0dXMgWy0tanNvbl1cclxuICAwY3R4IGNvbm5lY3RvciBxdWV1ZSBkcmFpbiBbLS1tYXgtYmF0Y2hlcz0xMF0gWy0tYmF0Y2gtc2l6ZT0yMDBdIFstLXdhaXRdIFstLXN0cmljdHwtLWZhaWwtb24tcmV0cnldIFstLXRpbWVvdXQtbXM9MTIwMDAwXSBbLS1wb2xsLW1zPTEwMDBdIFstLWpzb25dXHJcbiAgMGN0eCBjb25uZWN0b3IgcXVldWUgcHVyZ2UgWy0tYWxsfC0tb2xkZXItdGhhbi1ob3Vycz1OfC0tbWluLWF0dGVtcHRzPU5dIFstLWRyeS1ydW58LS1jb25maXJtXSBbLS1qc29uXVxyXG4gIDBjdHggY29ubmVjdG9yIHF1ZXVlIGxvZ3MgWy0tbGltaXQ9NTBdIFstLWpzb25dIFstLWNsZWFyIC0tY29uZmlybXwtLWRyeS1ydW5dXHJcbiAgMGN0eCBjb25uZWN0b3IgbG9nc1xyXG5cclxuU2VydmljZSBtYW5hZ2VtZW50IGNvbXBhdGliaWxpdHkgKHJlcXVpcmVzIEFkbWluIG9uIFdpbmRvd3MpOlxyXG4gIEJvdGggY29tbWFuZCBwYXRocyBtYW5hZ2UgdGhlIHNhbWUgdW5kZXJseWluZyBPUyBzZXJ2aWNlLlxyXG4gIFByZWZlcnJlZDogMGN0eCBjb25uZWN0b3Igc2VydmljZSA8YWN0aW9uPlxyXG4gIExlZ2FjeTogICAgMGN0eCBkYWVtb24gc2VydmljZSA8YWN0aW9uPlxyXG5cclxuTGVnYWN5IGRhZW1vbiBzZXJ2aWNlIGNvbW1hbmRzOlxyXG4gIDBjdHggZGFlbW9uIHNlcnZpY2UgaW5zdGFsbCAgICBSZWdpc3RlciBkYWVtb24gYXMgYSBzZXJ2aWNlXHJcbiAgMGN0eCBkYWVtb24gc2VydmljZSBlbmFibGUgICAgIFNldCBzZXJ2aWNlIHN0YXJ0IHR5cGUgdG8gQXV0b21hdGljXHJcbiAgMGN0eCBkYWVtb24gc2VydmljZSBkaXNhYmxlICAgIFNldCBzZXJ2aWNlIHN0YXJ0IHR5cGUgdG8gTWFudWFsXHJcbiAgMGN0eCBkYWVtb24gc2VydmljZSBzdGFydCAgICAgIFN0YXJ0IHRoZSBzZXJ2aWNlXHJcbiAgMGN0eCBkYWVtb24gc2VydmljZSBzdG9wICAgICAgIFN0b3AgdGhlIHNlcnZpY2VcclxuICAwY3R4IGRhZW1vbiBzZXJ2aWNlIHJlc3RhcnQgICAgU3RvcCB0aGVuIHN0YXJ0IHRoZSBzZXJ2aWNlXHJcbiAgMGN0eCBkYWVtb24gc2VydmljZSBzdGF0dXMgICAgIFNob3cgY3VycmVudCBzZXJ2aWNlIHN0YXRlXHJcbiAgMGN0eCBkYWVtb24gc2VydmljZSB1bmluc3RhbGwgIFJlbW92ZSBzZXJ2aWNlIHJlZ2lzdHJhdGlvblxyXG5gKTtcclxufVxyXG5cclxuLy8gXHUyNTAwXHUyNTAwXHUyNTAwIENvbmZpZyBjb21tYW5kIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxyXG5cclxuZnVuY3Rpb24gY29tbWFuZENvbmZpZ0xpc3QoKTogbnVtYmVyIHtcclxuICAgIGNvbnN0IGVudHJpZXMgPSBsaXN0Q29uZmlnKCk7XHJcbiAgICBjb25zb2xlLmxvZyhgXFxuQ29uZmlnICgke2dldENvbmZpZ1BhdGgoKX0pXFxuYCk7XHJcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHtcclxuICAgICAgICBjb25zdCBzcmNUYWcgPSBlbnRyeS5zb3VyY2UgPT09ICdkZWZhdWx0JyA/ICcgKGRlZmF1bHQpJyA6IGVudHJ5LnNvdXJjZSA9PT0gJ2VudicgPyAnIChlbnYpJyA6ICcnO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGAgICR7ZW50cnkua2V5fSA9ICR7SlNPTi5zdHJpbmdpZnkoZW50cnkudmFsdWUpfSR7c3JjVGFnfWApO1xyXG4gICAgfVxyXG4gICAgY29uc29sZS5sb2coJycpO1xyXG4gICAgcmV0dXJuIDA7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNvbW1hbmRDb25maWdHZXQoa2V5OiBzdHJpbmcgfCB1bmRlZmluZWQpOiBudW1iZXIge1xyXG4gICAgaWYgKCFrZXkpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdVc2FnZTogMGN0eCBjb25maWcgZ2V0IDxrZXk+Jyk7XHJcbiAgICAgICAgcmV0dXJuIDE7XHJcbiAgICB9XHJcbiAgICBpZiAoIWlzVmFsaWRDb25maWdLZXkoa2V5KSkge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYFVua25vd24gY29uZmlnIGtleTogJHtrZXl9YCk7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihgVmFsaWQga2V5czogJHtsaXN0Q29uZmlnKCkubWFwKGUgPT4gZS5rZXkpLmpvaW4oJywgJyl9YCk7XHJcbiAgICAgICAgcmV0dXJuIDE7XHJcbiAgICB9XHJcbiAgICBjb25zb2xlLmxvZyhnZXRDb25maWdWYWx1ZShrZXkpKTtcclxuICAgIHJldHVybiAwO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjb21tYW5kQ29uZmlnU2V0KGtleTogc3RyaW5nIHwgdW5kZWZpbmVkLCB2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogbnVtYmVyIHtcclxuICAgIGlmICgha2V5IHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdVc2FnZTogMGN0eCBjb25maWcgc2V0IDxrZXk+IDx2YWx1ZT4nKTtcclxuICAgICAgICByZXR1cm4gMTtcclxuICAgIH1cclxuICAgIGlmICghaXNWYWxpZENvbmZpZ0tleShrZXkpKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihgVW5rbm93biBjb25maWcga2V5OiAke2tleX1gKTtcclxuICAgICAgICBjb25zb2xlLmVycm9yKGBWYWxpZCBrZXlzOiAke2xpc3RDb25maWcoKS5tYXAoZSA9PiBlLmtleSkuam9pbignLCAnKX1gKTtcclxuICAgICAgICByZXR1cm4gMTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBib29sZWFuS2V5cyA9IG5ldyBTZXQ8a2V5b2YgQXBwQ29uZmlnPihbXHJcbiAgICAgICAgJ3N5bmMuZW5hYmxlZCcsXHJcbiAgICAgICAgJ2ludGVncmF0aW9uLmNoYXRncHQuZW5hYmxlZCcsXHJcbiAgICAgICAgJ2ludGVncmF0aW9uLmNoYXRncHQucmVxdWlyZUFwcHJvdmFsJyxcclxuICAgICAgICAnaW50ZWdyYXRpb24uYXV0b0Jvb3RzdHJhcCdcclxuICAgIF0pO1xyXG5cclxuICAgIC8vIFBhcnNlIGJvb2xlYW5zIGZvciBib29sZWFuLWJhY2tlZCBjb25maWcga2V5cy5cclxuICAgIGxldCBwYXJzZWQ6IHVua25vd24gPSB2YWx1ZTtcclxuICAgIGlmIChib29sZWFuS2V5cy5oYXMoa2V5KSkge1xyXG4gICAgICAgIHBhcnNlZCA9IHZhbHVlID09PSAndHJ1ZScgfHwgdmFsdWUgPT09ICcxJztcclxuICAgIH1cclxuXHJcbiAgICBzZXRDb25maWdWYWx1ZShrZXksIHBhcnNlZCBhcyBBcHBDb25maWdbdHlwZW9mIGtleV0pO1xyXG4gICAgY29uc29sZS5sb2coYFNldCAke2tleX0gPSAke0pTT04uc3RyaW5naWZ5KHBhcnNlZCl9YCk7XHJcbiAgICByZXR1cm4gMDtcclxufVxyXG5cclxuLy8gXHUyNTAwXHUyNTAwXHUyNTAwIFN5bmMgY29tbWFuZCBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcclxuXHJcbmFzeW5jIGZ1bmN0aW9uIGNvbW1hbmRTeW5jU3RhdHVzKCk6IFByb21pc2U8bnVtYmVyPiB7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IGF3YWl0IHNlbmRUb0RhZW1vbignc3luY1N0YXR1cycsIHt9KSBhcyB7XHJcbiAgICAgICAgICAgIGVuYWJsZWQ6IGJvb2xlYW47XHJcbiAgICAgICAgICAgIHJ1bm5pbmc6IGJvb2xlYW47XHJcbiAgICAgICAgICAgIGxhc3RQdXNoQXQ6IG51bWJlciB8IG51bGw7XHJcbiAgICAgICAgICAgIGxhc3RQdWxsQXQ6IG51bWJlciB8IG51bGw7XHJcbiAgICAgICAgICAgIGxhc3RFcnJvcjogc3RyaW5nIHwgbnVsbDtcclxuICAgICAgICAgICAgcXVldWU6IHsgcGVuZGluZzogbnVtYmVyOyBpbkZsaWdodDogbnVtYmVyOyBmYWlsZWQ6IG51bWJlcjsgZG9uZTogbnVtYmVyIH07XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgY29uc29sZS5sb2coJ1xcblN5bmMgU3RhdHVzXFxuJyk7XHJcbiAgICAgICAgY29uc29sZS5sb2coYCAgRW5hYmxlZDogICAgICR7c3RhdHVzLmVuYWJsZWR9YCk7XHJcbiAgICAgICAgY29uc29sZS5sb2coYCAgUnVubmluZzogICAgICR7c3RhdHVzLnJ1bm5pbmd9YCk7XHJcbiAgICAgICAgY29uc29sZS5sb2coYCAgRW5kcG9pbnQ6ICAgICR7Z2V0Q29uZmlnVmFsdWUoJ3N5bmMuZW5kcG9pbnQnKX1gKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhgICBMYXN0IHB1c2g6ICAgJHtzdGF0dXMubGFzdFB1c2hBdCA/IG5ldyBEYXRlKHN0YXR1cy5sYXN0UHVzaEF0KS50b0lTT1N0cmluZygpIDogJ25ldmVyJ31gKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhgICBMYXN0IHB1bGw6ICAgJHtzdGF0dXMubGFzdFB1bGxBdCA/IG5ldyBEYXRlKHN0YXR1cy5sYXN0UHVsbEF0KS50b0lTT1N0cmluZygpIDogJ25ldmVyJ31gKTtcclxuICAgICAgICBpZiAoc3RhdHVzLmxhc3RFcnJvcikge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgICBMYXN0IGVycm9yOiAgJHtzdGF0dXMubGFzdEVycm9yfWApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zb2xlLmxvZygnJyk7XHJcbiAgICAgICAgY29uc29sZS5sb2coJyAgUXVldWU6Jyk7XHJcbiAgICAgICAgY29uc29sZS5sb2coYCAgICBQZW5kaW5nOiAgICR7c3RhdHVzLnF1ZXVlLnBlbmRpbmd9YCk7XHJcbiAgICAgICAgY29uc29sZS5sb2coYCAgICBJbi1mbGlnaHQ6ICR7c3RhdHVzLnF1ZXVlLmluRmxpZ2h0fWApO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGAgICAgRmFpbGVkOiAgICAke3N0YXR1cy5xdWV1ZS5mYWlsZWR9YCk7XHJcbiAgICAgICAgY29uc29sZS5sb2coYCAgICBEb25lOiAgICAgICR7c3RhdHVzLnF1ZXVlLmRvbmV9YCk7XHJcbiAgICAgICAgY29uc29sZS5sb2coJycpO1xyXG4gICAgICAgIHJldHVybiAwO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gZ2V0IHN5bmMgc3RhdHVzOicsIGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKSk7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignSXMgdGhlIGRhZW1vbiBydW5uaW5nPyBUcnk6IDBjdHggZGFlbW9uIHN0YXJ0Jyk7XHJcbiAgICAgICAgcmV0dXJuIDE7XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldENvbnRleHRJZEZsYWcoZmxhZ3M6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IGJvb2xlYW4+KTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICBjb25zdCBjb250ZXh0SWQgPSBmbGFnc1snY29udGV4dC1pZCddID8/IGZsYWdzLmNvbnRleHRJZDtcclxuICAgIGlmICh0eXBlb2YgY29udGV4dElkID09PSAnc3RyaW5nJyAmJiBjb250ZXh0SWQudHJpbSgpLmxlbmd0aCA+IDApIHtcclxuICAgICAgICByZXR1cm4gY29udGV4dElkLnRyaW0oKTtcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG59XHJcblxyXG5hc3luYyBmdW5jdGlvbiBjb21tYW5kU3luY1BvbGljeUdldChmbGFnczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgYm9vbGVhbj4pOiBQcm9taXNlPG51bWJlcj4ge1xyXG4gICAgY29uc3QgY29udGV4dElkID0gZ2V0Q29udGV4dElkRmxhZyhmbGFncyk7XHJcbiAgICBpZiAoIWNvbnRleHRJZCkge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJNaXNzaW5nIHJlcXVpcmVkICctLWNvbnRleHQtaWQnIGZvciBgMGN0eCBzeW5jIHBvbGljeSBnZXRgLlwiKTtcclxuICAgICAgICByZXR1cm4gMTtcclxuICAgIH1cclxuXHJcbiAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNlbmRUb0RhZW1vbignZ2V0U3luY1BvbGljeScsIHsgY29udGV4dElkIH0pIGFzIHsgY29udGV4dElkOiBzdHJpbmc7IHN5bmNQb2xpY3k6IHN0cmluZyB9O1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdcXG5TeW5jIFBvbGljeVxcbicpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGAgIENvbnRleHQ6ICR7cmVzdWx0LmNvbnRleHRJZH1gKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhgICBQb2xpY3k6ICAke3Jlc3VsdC5zeW5jUG9saWN5fWApO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCcnKTtcclxuICAgICAgICByZXR1cm4gMDtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGdldCBzeW5jIHBvbGljeTonLCBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcikpO1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0lzIHRoZSBkYWVtb24gcnVubmluZz8gVHJ5OiAwY3R4IGRhZW1vbiBzdGFydCcpO1xyXG4gICAgICAgIHJldHVybiAxO1xyXG4gICAgfVxyXG59XHJcblxyXG5hc3luYyBmdW5jdGlvbiBjb21tYW5kU3luY1BvbGljeVNldChcclxuICAgIHBvbGljeTogc3RyaW5nIHwgdW5kZWZpbmVkLFxyXG4gICAgZmxhZ3M6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IGJvb2xlYW4+XHJcbik6IFByb21pc2U8bnVtYmVyPiB7XHJcbiAgICBjb25zdCBjb250ZXh0SWQgPSBnZXRDb250ZXh0SWRGbGFnKGZsYWdzKTtcclxuICAgIGlmICghY29udGV4dElkKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcIk1pc3NpbmcgcmVxdWlyZWQgJy0tY29udGV4dC1pZCcgZm9yIGAwY3R4IHN5bmMgcG9saWN5IHNldGAuXCIpO1xyXG4gICAgICAgIHJldHVybiAxO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChwb2xpY3kgIT09ICdsb2NhbF9vbmx5JyAmJiBwb2xpY3kgIT09ICdtZXRhZGF0YV9vbmx5JyAmJiBwb2xpY3kgIT09ICdmdWxsX3N5bmMnKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkludmFsaWQgcG9saWN5LiBFeHBlY3RlZCBvbmUgb2Y6IGxvY2FsX29ubHksIG1ldGFkYXRhX29ubHksIGZ1bGxfc3luYy5cIik7XHJcbiAgICAgICAgcmV0dXJuIDE7XHJcbiAgICB9XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzZW5kVG9EYWVtb24oJ3NldFN5bmNQb2xpY3knLCB7IGNvbnRleHRJZCwgc3luY1BvbGljeTogcG9saWN5IH0pIGFzIHsgY29udGV4dElkOiBzdHJpbmc7IHN5bmNQb2xpY3k6IHN0cmluZyB9O1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGBTeW5jIHBvbGljeSB1cGRhdGVkOiAke3Jlc3VsdC5jb250ZXh0SWR9IC0+ICR7cmVzdWx0LnN5bmNQb2xpY3l9YCk7XHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBzZXQgc3luYyBwb2xpY3k6JywgZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpKTtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdJcyB0aGUgZGFlbW9uIHJ1bm5pbmc/IFRyeTogMGN0eCBkYWVtb24gc3RhcnQnKTtcclxuICAgICAgICByZXR1cm4gMTtcclxuICAgIH1cclxufVxyXG5cclxuYXN5bmMgZnVuY3Rpb24gY29tbWFuZERhZW1vblNlcnZpY2UoYWN0aW9uOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBQcm9taXNlPG51bWJlcj4ge1xyXG4gICAgY29uc3QgcGxhdGZvcm0gPSBvcy5wbGF0Zm9ybSgpO1xyXG5cclxuICAgIHR5cGUgU2VydmljZU9wcyA9IHtcclxuICAgICAgICBpbnN0YWxsOiAoKSA9PiB2b2lkO1xyXG4gICAgICAgIGVuYWJsZTogKCkgPT4gdm9pZDtcclxuICAgICAgICBkaXNhYmxlOiAoKSA9PiB2b2lkO1xyXG4gICAgICAgIHVuaW5zdGFsbDogKCkgPT4gdm9pZDtcclxuICAgICAgICBzdGF0dXM6ICgpID0+IHZvaWQ7XHJcbiAgICAgICAgc3RhcnQ6ICgpID0+IHZvaWQ7XHJcbiAgICAgICAgc3RvcDogKCkgPT4gdm9pZDtcclxuICAgICAgICByZXN0YXJ0OiAoKSA9PiB2b2lkO1xyXG4gICAgfTtcclxuXHJcbiAgICBsZXQgb3BzOiBTZXJ2aWNlT3BzIHwgdW5kZWZpbmVkO1xyXG4gICAgaWYgKHBsYXRmb3JtID09PSAnd2luMzInKSB7XHJcbiAgICAgICAgb3BzID0ge1xyXG4gICAgICAgICAgICBpbnN0YWxsOiBpbnN0YWxsU2VydmljZVdpbmRvd3MsXHJcbiAgICAgICAgICAgIGVuYWJsZTogZW5hYmxlU2VydmljZVdpbmRvd3MsXHJcbiAgICAgICAgICAgIGRpc2FibGU6IGRpc2FibGVTZXJ2aWNlV2luZG93cyxcclxuICAgICAgICAgICAgdW5pbnN0YWxsOiB1bmluc3RhbGxTZXJ2aWNlV2luZG93cyxcclxuICAgICAgICAgICAgc3RhdHVzOiBzdGF0dXNTZXJ2aWNlV2luZG93cyxcclxuICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0U2VydmljZVdpbmRvd3MsXHJcbiAgICAgICAgICAgIHN0b3A6IHN0b3BTZXJ2aWNlV2luZG93cyxcclxuICAgICAgICAgICAgcmVzdGFydDogcmVzdGFydFNlcnZpY2VXaW5kb3dzLFxyXG4gICAgICAgIH07XHJcbiAgICB9IGVsc2UgaWYgKHBsYXRmb3JtID09PSAnZGFyd2luJykge1xyXG4gICAgICAgIG9wcyA9IHtcclxuICAgICAgICAgICAgaW5zdGFsbDogaW5zdGFsbFNlcnZpY2VNYWMsXHJcbiAgICAgICAgICAgIGVuYWJsZTogZW5hYmxlU2VydmljZU1hYyxcclxuICAgICAgICAgICAgZGlzYWJsZTogZGlzYWJsZVNlcnZpY2VNYWMsXHJcbiAgICAgICAgICAgIHVuaW5zdGFsbDogdW5pbnN0YWxsU2VydmljZU1hYyxcclxuICAgICAgICAgICAgc3RhdHVzOiBzdGF0dXNTZXJ2aWNlTWFjLFxyXG4gICAgICAgICAgICBzdGFydDogc3RhcnRTZXJ2aWNlTWFjLFxyXG4gICAgICAgICAgICBzdG9wOiBzdG9wU2VydmljZU1hYyxcclxuICAgICAgICAgICAgcmVzdGFydDogcmVzdGFydFNlcnZpY2VNYWMsXHJcbiAgICAgICAgfTtcclxuICAgIH0gZWxzZSBpZiAocGxhdGZvcm0gPT09ICdsaW51eCcpIHtcclxuICAgICAgICBvcHMgPSB7XHJcbiAgICAgICAgICAgIGluc3RhbGw6IGluc3RhbGxTZXJ2aWNlTGludXgsXHJcbiAgICAgICAgICAgIGVuYWJsZTogZW5hYmxlU2VydmljZUxpbnV4LFxyXG4gICAgICAgICAgICBkaXNhYmxlOiBkaXNhYmxlU2VydmljZUxpbnV4LFxyXG4gICAgICAgICAgICB1bmluc3RhbGw6IHVuaW5zdGFsbFNlcnZpY2VMaW51eCxcclxuICAgICAgICAgICAgc3RhdHVzOiBzdGF0dXNTZXJ2aWNlTGludXgsXHJcbiAgICAgICAgICAgIHN0YXJ0OiBzdGFydFNlcnZpY2VMaW51eCxcclxuICAgICAgICAgICAgc3RvcDogc3RvcFNlcnZpY2VMaW51eCxcclxuICAgICAgICAgICAgcmVzdGFydDogcmVzdGFydFNlcnZpY2VMaW51eCxcclxuICAgICAgICB9O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKGBkYWVtb24gc2VydmljZSBjb21tYW5kcyBhcmUgbm90IHN1cHBvcnRlZCBvbiBwbGF0Zm9ybTogJHtwbGF0Zm9ybX1gKTtcclxuICAgICAgICByZXR1cm4gMTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB2YWxpZEFjdGlvbnMgPSBbJ2luc3RhbGwnLCAnZW5hYmxlJywgJ2Rpc2FibGUnLCAndW5pbnN0YWxsJywgJ3N0YXR1cycsICdzdGFydCcsICdzdG9wJywgJ3Jlc3RhcnQnXTtcclxuICAgIGlmICghYWN0aW9uIHx8ICF2YWxpZEFjdGlvbnMuaW5jbHVkZXMoYWN0aW9uKSkge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYFVua25vd24gc2VydmljZSBhY3Rpb246ICcke2FjdGlvbiA/PyAnJ30nYCk7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihgVmFsaWQgYWN0aW9uczogJHt2YWxpZEFjdGlvbnMuam9pbignLCAnKX1gKTtcclxuICAgICAgICByZXR1cm4gMTtcclxuICAgIH1cclxuXHJcbiAgICB0cnkge1xyXG4gICAgICAgIG9wc1thY3Rpb24gYXMga2V5b2YgU2VydmljZU9wc10oKTtcclxuICAgICAgICByZXR1cm4gMDtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihgc2VydmljZSAke2FjdGlvbn0gZmFpbGVkOmAsIGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKSk7XHJcbiAgICAgICAgcmV0dXJuIDE7XHJcbiAgICB9XHJcbn1cclxuXHJcbmFzeW5jIGZ1bmN0aW9uIG1haW4oKTogUHJvbWlzZTxudW1iZXI+IHtcclxuICAgIGNvbnN0IGFyZ3YgPSBwcm9jZXNzLmFyZ3Yuc2xpY2UoMik7XHJcbiAgICBpZiAoYXJndi5sZW5ndGggPT09IDApIHtcclxuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuQ1RYX1NIRUxMX01PREUgPT09ICcxJykge1xyXG4gICAgICAgICAgICBwcmludEhlbHAoKTtcclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwcm9jZXNzLnN0ZGluLmlzVFRZICYmIHByb2Nlc3Muc3Rkb3V0LmlzVFRZKSB7XHJcbiAgICAgICAgICAgIC8vIEZpcnN0LXRpbWUgZXhwZXJpZW5jZTogaWYgbm8gdG9rZW4gZXhpc3RzLCBhdXRvLXJ1biBzZXR1cCBzbyB0aGVcclxuICAgICAgICAgICAgLy8gdXNlciBkb2Vzbid0IGhhdmUgdG8ga25vdyBhYm91dCBgMGN0eCBzZXR1cGAgb24gZmlyc3QgaW5zdGFsbC5cclxuICAgICAgICAgICAgaWYgKCFyZXNvbHZlVG9rZW4oKSkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coY29sb3IuYm9sZCgnXFxuV2VsY29tZSB0byAwY3R4IScpKTtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGNvbG9yLmRpbShcIkxvb2tzIGxpa2UgdGhpcyBpcyB5b3VyIGZpcnN0IHRpbWUuIExldCdzIGdldCB5b3Ugc2V0IHVwLlxcblwiKSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY29tbWFuZFNldHVwKHt9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gY29tbWFuZFNoZWxsKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHByaW50SGVscCgpO1xyXG4gICAgICAgIHJldHVybiAwO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlQXJncyhhcmd2KTtcclxuXHJcbiAgICBzd2l0Y2ggKHBhcnNlZC5jb21tYW5kKSB7XHJcbiAgICAgICAgY2FzZSAnc2V0dXAnOlxyXG4gICAgICAgICAgICByZXR1cm4gY29tbWFuZFNldHVwKHBhcnNlZC5mbGFncyk7XHJcbiAgICAgICAgY2FzZSAnaW5zdGFsbCc6XHJcbiAgICAgICAgICAgIHJldHVybiBjb21tYW5kSW5zdGFsbChwYXJzZWQuZmxhZ3MpO1xyXG4gICAgICAgIGNhc2UgJ2Jvb3RzdHJhcCc6XHJcbiAgICAgICAgICAgIHJldHVybiBjb21tYW5kQm9vdHN0cmFwKHBhcnNlZC5mbGFncyk7XHJcbiAgICAgICAgY2FzZSAnZG9jdG9yJzpcclxuICAgICAgICAgICAgcmV0dXJuIGNvbW1hbmREb2N0b3IocGFyc2VkLmZsYWdzKTtcclxuICAgICAgICBjYXNlICdzdGF0dXMnOlxyXG4gICAgICAgICAgICByZXR1cm4gY29tbWFuZFN0YXR1cygpO1xyXG4gICAgICAgIGNhc2UgJ3JlcGFpcic6XHJcbiAgICAgICAgICAgIHJldHVybiBjb21tYW5kUmVwYWlyKHBhcnNlZC5mbGFncyk7XHJcbiAgICAgICAgY2FzZSAnYXV0aCc6IHtcclxuICAgICAgICAgICAgY29uc3Qgc3ViID0gcGFyc2VkLnN1YmNvbW1hbmQ7XHJcbiAgICAgICAgICAgIGlmIChzdWIgPT09ICdsb2dpbicpIHJldHVybiBjb21tYW5kQXV0aExvZ2luKHBhcnNlZC5mbGFncyk7XHJcbiAgICAgICAgICAgIGlmIChzdWIgPT09ICdsb2dvdXQnKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGNvbW1hbmRBdXRoTG9nb3V0KCkpO1xyXG4gICAgICAgICAgICBpZiAoc3ViID09PSAnc3RhdHVzJykgcmV0dXJuIFByb21pc2UucmVzb2x2ZShjb21tYW5kQXV0aFN0YXR1cyhwYXJzZWQuZmxhZ3MpKTtcclxuICAgICAgICAgICAgaWYgKHN1YiA9PT0gJ3JvdGF0ZScpIHJldHVybiBjb21tYW5kQXV0aFJvdGF0ZShwYXJzZWQuZmxhZ3MpO1xyXG4gICAgICAgICAgICBwcmludEhlbHAoKTtcclxuICAgICAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhc2UgJ2RhZW1vbic6XHJcbiAgICAgICAgICAgIGlmIChwYXJzZWQuc3ViY29tbWFuZCA9PT0gJ3N0YXJ0Jykge1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBzdGFydERhZW1vbkRldGFjaGVkKCk7XHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnN0IG9rID0gYXdhaXQgd2FpdEZvckRhZW1vbigpO1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2cob2sgPyAnZGFlbW9uIHN0YXJ0ZWQnIDogJ2RhZW1vbiBzdGFydCB0aW1lb3V0Jyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gb2sgPyAwIDogMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAocGFyc2VkLnN1YmNvbW1hbmQgPT09ICdzZXJ2aWNlJykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbW1hbmREYWVtb25TZXJ2aWNlKHBhcnNlZC5zZXJ2aWNlQWN0aW9uKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBwcmludEhlbHAoKTtcclxuICAgICAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgICAgY2FzZSAnY29uZmlnJzoge1xyXG4gICAgICAgICAgICBjb25zdCBzdWIgPSBwYXJzZWQuc3ViY29tbWFuZDtcclxuICAgICAgICAgICAgaWYgKHN1YiA9PT0gJ2xpc3QnIHx8ICFzdWIpIHJldHVybiBjb21tYW5kQ29uZmlnTGlzdCgpO1xyXG4gICAgICAgICAgICBpZiAoc3ViID09PSAnZ2V0JykgcmV0dXJuIGNvbW1hbmRDb25maWdHZXQocGFyc2VkLnBvc2l0aW9uYWxBcmdzWzBdKTtcclxuICAgICAgICAgICAgaWYgKHN1YiA9PT0gJ3NldCcpIHJldHVybiBjb21tYW5kQ29uZmlnU2V0KHBhcnNlZC5wb3NpdGlvbmFsQXJnc1swXSwgcGFyc2VkLnBvc2l0aW9uYWxBcmdzWzFdKTtcclxuICAgICAgICAgICAgcHJpbnRIZWxwKCk7XHJcbiAgICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXNlICdzeW5jJzoge1xyXG4gICAgICAgICAgICBjb25zdCBzdWIgPSBwYXJzZWQuc3ViY29tbWFuZDtcclxuICAgICAgICAgICAgaWYgKHN1YiA9PT0gJ3N0YXR1cycgfHwgIXN1YikgcmV0dXJuIGNvbW1hbmRTeW5jU3RhdHVzKCk7XHJcbiAgICAgICAgICAgIGlmIChzdWIgPT09ICdwb2xpY3knKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhY3Rpb24gPSBwYXJzZWQucG9zaXRpb25hbEFyZ3NbMF07XHJcbiAgICAgICAgICAgICAgICBpZiAoYWN0aW9uID09PSAnZ2V0JykgcmV0dXJuIGNvbW1hbmRTeW5jUG9saWN5R2V0KHBhcnNlZC5mbGFncyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoYWN0aW9uID09PSAnc2V0JykgcmV0dXJuIGNvbW1hbmRTeW5jUG9saWN5U2V0KHBhcnNlZC5wb3NpdGlvbmFsQXJnc1sxXSwgcGFyc2VkLmZsYWdzKTtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1VzYWdlOiAwY3R4IHN5bmMgcG9saWN5IGdldCAtLWNvbnRleHQtaWQ9PGNvbnRleHRJZD4nKTtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJyAgIG9yOiAwY3R4IHN5bmMgcG9saWN5IHNldCA8bG9jYWxfb25seXxtZXRhZGF0YV9vbmx5fGZ1bGxfc3luYz4gLS1jb250ZXh0LWlkPTxjb250ZXh0SWQ+Jyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBwcmludEhlbHAoKTtcclxuICAgICAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhc2UgJ2Nvbm5lY3Rvcic6XHJcbiAgICAgICAgICAgIGlmIChwYXJzZWQuc3ViY29tbWFuZCA9PT0gJ3NlcnZpY2UnKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY29tbWFuZENvbm5lY3RvcihwYXJzZWQuc2VydmljZUFjdGlvbiwgcGFyc2VkLmZsYWdzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAocGFyc2VkLnN1YmNvbW1hbmQgPT09ICdxdWV1ZScpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBjb21tYW5kQ29ubmVjdG9yUXVldWUocGFyc2VkLnBvc2l0aW9uYWxBcmdzWzBdLCBwYXJzZWQuZmxhZ3MpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBjb21tYW5kQ29ubmVjdG9yKHBhcnNlZC5zdWJjb21tYW5kLCBwYXJzZWQuZmxhZ3MpO1xyXG4gICAgICAgIGNhc2UgJ2Rhc2hib2FyZCc6XHJcbiAgICAgICAgICAgIHJldHVybiBjb21tYW5kRGFzaGJvYXJkKHBhcnNlZC5mbGFncyk7XHJcbiAgICAgICAgY2FzZSAnc2hlbGwnOlxyXG4gICAgICAgICAgICByZXR1cm4gY29tbWFuZFNoZWxsKCk7XHJcbiAgICAgICAgY2FzZSAncmVsZWFzZSc6XHJcbiAgICAgICAgICAgIGlmIChwYXJzZWQuc3ViY29tbWFuZCA9PT0gJ3B1Ymxpc2gnKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY29tbWFuZFJlbGVhc2VQdWJsaXNoKHBhcnNlZC5mbGFncyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcHJpbnRIZWxwKCk7XHJcbiAgICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgIGNhc2UgJ3VpJzpcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcignYDBjdHggdWlgIGhhcyBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgZW5kLXVzZXIgZmxvdy4nKTtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcignVXNlIGAwY3R4IHNldHVwYCBhbmQgdGhlbiBvcGVuIHRoZSBob3N0ZWQgZGFzaGJvYXJkIFVSTCAob3IgcnVuIGAwY3R4IGRhc2hib2FyZGApLicpO1xyXG4gICAgICAgICAgICByZXR1cm4gMTtcclxuICAgICAgICBjYXNlICdoZWxwJzpcclxuICAgICAgICAgICAgcHJpbnRIZWxwKCk7XHJcbiAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgIHByaW50SGVscCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gMTtcclxuICAgIH1cclxufVxyXG5cclxubWFpbigpXHJcbiAgICAudGhlbihjb2RlID0+IHtcclxuICAgICAgICBwcm9jZXNzLmV4aXRDb2RlID0gY29kZTtcclxuICAgIH0pXHJcbiAgICAuY2F0Y2goZXJyb3IgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpKTtcclxuICAgICAgICBwcm9jZXNzLmV4aXRDb2RlID0gMTtcclxuICAgIH0pO1xyXG4iLCAiaW1wb3J0IGZzIGZyb20gJ2ZzJztcbmltcG9ydCBvcyBmcm9tICdvcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcblxudHlwZSBTdXBwb3J0ZWRDbGllbnQgPSAnY2xhdWRlJyB8ICdjdXJzb3InIHwgJ3dpbmRzdXJmJztcblxuaW50ZXJmYWNlIFJlZ2lzdHJhdGlvbiB7XG4gICAgY29tbWFuZDogc3RyaW5nO1xuICAgIGFyZ3M6IHN0cmluZ1tdO1xufVxuXG5pbnRlcmZhY2UgQm9vdHN0cmFwT3B0aW9ucyB7XG4gICAgY2xpZW50czogU3VwcG9ydGVkQ2xpZW50W107XG4gICAgZHJ5UnVuPzogYm9vbGVhbjtcbiAgICBlbnRyeXBvaW50Pzogc3RyaW5nO1xuICAgIHNlcnZlck5hbWU/OiBzdHJpbmc7XG4gICAgcGxhdGZvcm0/OiBOb2RlSlMuUGxhdGZvcm07XG4gICAgaG9tZURpcj86IHN0cmluZztcbiAgICBhcHBEYXRhRGlyPzogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgQm9vdHN0cmFwUmVzdWx0IHtcbiAgICBjbGllbnQ6IFN1cHBvcnRlZENsaWVudDtcbiAgICBjb25maWdQYXRoOiBzdHJpbmc7XG4gICAgc3RhdHVzOiAndXBkYXRlZCcgfCAnY3JlYXRlZCcgfCAndW5jaGFuZ2VkJyB8ICdza2lwcGVkJyB8ICdmYWlsZWQnO1xuICAgIG1lc3NhZ2U/OiBzdHJpbmc7XG59XG5cbmZ1bmN0aW9uIHBhcnNlQ2xpZW50cyhyYXc6IHN0cmluZyB8IHVuZGVmaW5lZCk6IFN1cHBvcnRlZENsaWVudFtdIHtcbiAgICBjb25zdCBzb3VyY2UgPSAocmF3IHx8ICdjbGF1ZGUsY3Vyc29yLHdpbmRzdXJmJykudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKHNvdXJjZSA9PT0gJ2FsbCcpIHJldHVybiBbJ2NsYXVkZScsICdjdXJzb3InLCAnd2luZHN1cmYnXTtcblxuICAgIGNvbnN0IHBhcnNlZCA9IHNvdXJjZVxuICAgICAgICAuc3BsaXQoJywnKVxuICAgICAgICAubWFwKGl0ZW0gPT4gaXRlbS50cmltKCkpXG4gICAgICAgIC5maWx0ZXIoKGl0ZW0pOiBpdGVtIGlzIFN1cHBvcnRlZENsaWVudCA9PiBpdGVtID09PSAnY2xhdWRlJyB8fCBpdGVtID09PSAnY3Vyc29yJyB8fCBpdGVtID09PSAnd2luZHN1cmYnKTtcblxuICAgIHJldHVybiBwYXJzZWQubGVuZ3RoID09PSAwID8gWydjbGF1ZGUnLCAnY3Vyc29yJywgJ3dpbmRzdXJmJ10gOiBwYXJzZWQ7XG59XG5cbmZ1bmN0aW9uIGdldFBsYXRmb3JtKG9wdGlvbnM/OiBQaWNrPEJvb3RzdHJhcE9wdGlvbnMsICdwbGF0Zm9ybSc+KTogTm9kZUpTLlBsYXRmb3JtIHtcbiAgICByZXR1cm4gb3B0aW9ucz8ucGxhdGZvcm0gfHwgcHJvY2Vzcy5wbGF0Zm9ybTtcbn1cblxuZnVuY3Rpb24gZ2V0SG9tZURpcihvcHRpb25zPzogUGljazxCb290c3RyYXBPcHRpb25zLCAnaG9tZURpcic+KTogc3RyaW5nIHtcbiAgICByZXR1cm4gb3B0aW9ucz8uaG9tZURpciB8fCBvcy5ob21lZGlyKCk7XG59XG5cbmZ1bmN0aW9uIGdldEFwcERhdGFEaXIoaG9tZURpcjogc3RyaW5nLCBvcHRpb25zPzogUGljazxCb290c3RyYXBPcHRpb25zLCAnYXBwRGF0YURpcic+KTogc3RyaW5nIHtcbiAgICByZXR1cm4gb3B0aW9ucz8uYXBwRGF0YURpciB8fCBwcm9jZXNzLmVudi5BUFBEQVRBIHx8IHBhdGguam9pbihob21lRGlyLCAnQXBwRGF0YScsICdSb2FtaW5nJyk7XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVFbnRyeXBvaW50KGN1c3RvbUVudHJ5cG9pbnQ/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmIChjdXN0b21FbnRyeXBvaW50KSByZXR1cm4gcGF0aC5yZXNvbHZlKGN1c3RvbUVudHJ5cG9pbnQpO1xuXG4gICAgY29uc3QgY2FuZGlkYXRlcyA9IFtcbiAgICAgICAgcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgJ2luZGV4LmpzJyksXG4gICAgICAgIHBhdGgucmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAncGFja2FnZXMnLCAnbWNwJywgJ2Rpc3QnLCAnaW5kZXguanMnKSxcbiAgICAgICAgcGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCksICdkaXN0JywgJ2luZGV4LmpzJylcbiAgICBdO1xuXG4gICAgZm9yIChjb25zdCBjYW5kaWRhdGUgb2YgY2FuZGlkYXRlcykge1xuICAgICAgICBpZiAoZnMuZXhpc3RzU3luYyhjYW5kaWRhdGUpKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FuZGlkYXRlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgcmVzb2x2ZSBNQ1AgZW50cnlwb2ludC4gUnVuIGBucG0gcnVuIGJ1aWxkYCBmaXJzdC4nKTtcbn1cblxuZnVuY3Rpb24gZ2V0Q2FuZGlkYXRlUGF0aHMoXG4gICAgY2xpZW50OiBTdXBwb3J0ZWRDbGllbnQsXG4gICAgcGxhdGZvcm06IE5vZGVKUy5QbGF0Zm9ybSxcbiAgICBob21lRGlyOiBzdHJpbmcsXG4gICAgYXBwRGF0YURpcjogc3RyaW5nXG4pOiBzdHJpbmdbXSB7XG4gICAgc3dpdGNoIChjbGllbnQpIHtcbiAgICAgICAgY2FzZSAnY2xhdWRlJzpcbiAgICAgICAgICAgIGlmIChwbGF0Zm9ybSA9PT0gJ3dpbjMyJykgcmV0dXJuIFtwYXRoLmpvaW4oYXBwRGF0YURpciwgJ0NsYXVkZScsICdjbGF1ZGVfZGVza3RvcF9jb25maWcuanNvbicpXTtcbiAgICAgICAgICAgIGlmIChwbGF0Zm9ybSA9PT0gJ2RhcndpbicpIHJldHVybiBbcGF0aC5qb2luKGhvbWVEaXIsICdMaWJyYXJ5JywgJ0FwcGxpY2F0aW9uIFN1cHBvcnQnLCAnQ2xhdWRlJywgJ2NsYXVkZV9kZXNrdG9wX2NvbmZpZy5qc29uJyldO1xuICAgICAgICAgICAgcmV0dXJuIFtwYXRoLmpvaW4oaG9tZURpciwgJy5jb25maWcnLCAnQ2xhdWRlJywgJ2NsYXVkZV9kZXNrdG9wX2NvbmZpZy5qc29uJyldO1xuXG4gICAgICAgIGNhc2UgJ2N1cnNvcic6XG4gICAgICAgICAgICBpZiAocGxhdGZvcm0gPT09ICd3aW4zMicpIHJldHVybiBbXG4gICAgICAgICAgICAgICAgcGF0aC5qb2luKGFwcERhdGFEaXIsICdDdXJzb3InLCAnVXNlcicsICdtY3AuanNvbicpLFxuICAgICAgICAgICAgICAgIHBhdGguam9pbihob21lRGlyLCAnLmN1cnNvcicsICdtY3AuanNvbicpXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgaWYgKHBsYXRmb3JtID09PSAnZGFyd2luJykgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICBwYXRoLmpvaW4oaG9tZURpciwgJ0xpYnJhcnknLCAnQXBwbGljYXRpb24gU3VwcG9ydCcsICdDdXJzb3InLCAnVXNlcicsICdtY3AuanNvbicpLFxuICAgICAgICAgICAgICAgIHBhdGguam9pbihob21lRGlyLCAnLmN1cnNvcicsICdtY3AuanNvbicpXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICBwYXRoLmpvaW4oaG9tZURpciwgJy5jb25maWcnLCAnQ3Vyc29yJywgJ1VzZXInLCAnbWNwLmpzb24nKSxcbiAgICAgICAgICAgICAgICBwYXRoLmpvaW4oaG9tZURpciwgJy5jdXJzb3InLCAnbWNwLmpzb24nKVxuICAgICAgICAgICAgXTtcblxuICAgICAgICBjYXNlICd3aW5kc3VyZic6XG4gICAgICAgICAgICBpZiAocGxhdGZvcm0gPT09ICd3aW4zMicpIHJldHVybiBbXG4gICAgICAgICAgICAgICAgcGF0aC5qb2luKGFwcERhdGFEaXIsICdXaW5kc3VyZicsICdVc2VyJywgJ21jcC5qc29uJyksXG4gICAgICAgICAgICAgICAgcGF0aC5qb2luKGhvbWVEaXIsICcud2luZHN1cmYnLCAnbWNwLmpzb24nKVxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGlmIChwbGF0Zm9ybSA9PT0gJ2RhcndpbicpIHJldHVybiBbXG4gICAgICAgICAgICAgICAgcGF0aC5qb2luKGhvbWVEaXIsICdMaWJyYXJ5JywgJ0FwcGxpY2F0aW9uIFN1cHBvcnQnLCAnV2luZHN1cmYnLCAnVXNlcicsICdtY3AuanNvbicpLFxuICAgICAgICAgICAgICAgIHBhdGguam9pbihob21lRGlyLCAnLndpbmRzdXJmJywgJ21jcC5qc29uJylcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgIHBhdGguam9pbihob21lRGlyLCAnLmNvbmZpZycsICdXaW5kc3VyZicsICdVc2VyJywgJ21jcC5qc29uJyksXG4gICAgICAgICAgICAgICAgcGF0aC5qb2luKGhvbWVEaXIsICcud2luZHN1cmYnLCAnbWNwLmpzb24nKVxuICAgICAgICAgICAgXTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHBpY2tXcml0YWJsZVBhdGgoY2FuZGlkYXRlczogc3RyaW5nW10pOiBzdHJpbmcgfCBudWxsIHtcbiAgICBjb25zdCBleGlzdGluZyA9IGNhbmRpZGF0ZXMuZmluZChjYW5kaWRhdGUgPT4gZnMuZXhpc3RzU3luYyhjYW5kaWRhdGUpKTtcbiAgICBpZiAoZXhpc3RpbmcpIHJldHVybiBleGlzdGluZztcblxuICAgIGNvbnN0IHBhcmVudEV4aXN0cyA9IGNhbmRpZGF0ZXMuZmluZChjYW5kaWRhdGUgPT4gZnMuZXhpc3RzU3luYyhwYXRoLmRpcm5hbWUoY2FuZGlkYXRlKSkpO1xuICAgIHJldHVybiBwYXJlbnRFeGlzdHMgfHwgbnVsbDtcbn1cblxuZnVuY3Rpb24gcmVhZEpzb24ocGF0aE5hbWU6IHN0cmluZyk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMocGF0aE5hbWUpKSByZXR1cm4ge307XG5cbiAgICBjb25zdCByYXcgPSBmcy5yZWFkRmlsZVN5bmMocGF0aE5hbWUsICd1dGY4JykudHJpbSgpO1xuICAgIGlmICghcmF3KSByZXR1cm4ge307XG5cbiAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKHJhdyk7XG4gICAgaWYgKCFwYXJzZWQgfHwgdHlwZW9mIHBhcnNlZCAhPT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheShwYXJzZWQpKSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VkIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuXG5mdW5jdGlvbiB3cml0ZUpzb24ocGF0aE5hbWU6IHN0cmluZywgdmFsdWU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogdm9pZCB7XG4gICAgZnMubWtkaXJTeW5jKHBhdGguZGlybmFtZShwYXRoTmFtZSksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIGZzLndyaXRlRmlsZVN5bmMocGF0aE5hbWUsIEpTT04uc3RyaW5naWZ5KHZhbHVlLCBudWxsLCAyKSArICdcXG4nLCAndXRmOCcpO1xufVxuXG5mdW5jdGlvbiB1cHNlcnRTZXJ2ZXJDb25maWcoXG4gICAgY29uZmlnOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgICBzZXJ2ZXJOYW1lOiBzdHJpbmcsXG4gICAgcmVnaXN0cmF0aW9uOiBSZWdpc3RyYXRpb25cbik6IHsgY2hhbmdlZDogYm9vbGVhbjsgbmV4dENvbmZpZzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfSB7XG4gICAgY29uc3QgbmV4dENvbmZpZzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7IC4uLmNvbmZpZyB9O1xuXG4gICAgY29uc3QgcmF3U2VydmVycyA9IG5leHRDb25maWcubWNwU2VydmVycztcbiAgICBjb25zdCBzZXJ2ZXJzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHJhd1NlcnZlcnMgJiYgdHlwZW9mIHJhd1NlcnZlcnMgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHJhd1NlcnZlcnMpXG4gICAgICAgID8geyAuLi4ocmF3U2VydmVycyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgfVxuICAgICAgICA6IHt9O1xuXG4gICAgY29uc3QgcHJldmlvdXMgPSBzZXJ2ZXJzW3NlcnZlck5hbWVdO1xuICAgIGNvbnN0IG5leHQgPSB7IGNvbW1hbmQ6IHJlZ2lzdHJhdGlvbi5jb21tYW5kLCBhcmdzOiByZWdpc3RyYXRpb24uYXJncyB9O1xuICAgIGNvbnN0IGNoYW5nZWQgPSBKU09OLnN0cmluZ2lmeShwcmV2aW91cykgIT09IEpTT04uc3RyaW5naWZ5KG5leHQpO1xuXG4gICAgc2VydmVyc1tzZXJ2ZXJOYW1lXSA9IG5leHQ7XG4gICAgbmV4dENvbmZpZy5tY3BTZXJ2ZXJzID0gc2VydmVycztcblxuICAgIHJldHVybiB7IGNoYW5nZWQsIG5leHRDb25maWcgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJvb3RzdHJhcE1jcFJlZ2lzdHJhdGlvbihvcHRpb25zOiBCb290c3RyYXBPcHRpb25zKTogQm9vdHN0cmFwUmVzdWx0W10ge1xuICAgIGNvbnN0IHBsYXRmb3JtID0gZ2V0UGxhdGZvcm0ob3B0aW9ucyk7XG4gICAgY29uc3QgaG9tZURpciA9IGdldEhvbWVEaXIob3B0aW9ucyk7XG4gICAgY29uc3QgYXBwRGF0YURpciA9IGdldEFwcERhdGFEaXIoaG9tZURpciwgb3B0aW9ucyk7XG4gICAgY29uc3Qgc2VydmVyTmFtZSA9IG9wdGlvbnMuc2VydmVyTmFtZSB8fCAnMGN0eCc7XG4gICAgY29uc3QgZW50cnlwb2ludCA9IHJlc29sdmVFbnRyeXBvaW50KG9wdGlvbnMuZW50cnlwb2ludCk7XG5cbiAgICBjb25zdCByZWdpc3RyYXRpb246IFJlZ2lzdHJhdGlvbiA9IHtcbiAgICAgICAgY29tbWFuZDogcHJvY2Vzcy5leGVjUGF0aCxcbiAgICAgICAgYXJnczogW2VudHJ5cG9pbnRdXG4gICAgfTtcblxuICAgIGNvbnN0IHJlc3VsdHM6IEJvb3RzdHJhcFJlc3VsdFtdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IGNsaWVudCBvZiBvcHRpb25zLmNsaWVudHMpIHtcbiAgICAgICAgY29uc3QgY2FuZGlkYXRlcyA9IGdldENhbmRpZGF0ZVBhdGhzKGNsaWVudCwgcGxhdGZvcm0sIGhvbWVEaXIsIGFwcERhdGFEaXIpO1xuICAgICAgICBjb25zdCB0YXJnZXRQYXRoID0gcGlja1dyaXRhYmxlUGF0aChjYW5kaWRhdGVzKTtcblxuICAgICAgICBpZiAoIXRhcmdldFBhdGgpIHtcbiAgICAgICAgICAgIHJlc3VsdHMucHVzaCh7XG4gICAgICAgICAgICAgICAgY2xpZW50LFxuICAgICAgICAgICAgICAgIGNvbmZpZ1BhdGg6IGNhbmRpZGF0ZXNbMF0sXG4gICAgICAgICAgICAgICAgc3RhdHVzOiAnc2tpcHBlZCcsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ05vIGtub3duIGNsaWVudCBjb25maWcgZGlyZWN0b3J5IGRldGVjdGVkLidcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgZXhpc3RlZEJlZm9yZSA9IGZzLmV4aXN0c1N5bmModGFyZ2V0UGF0aCk7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50ID0gcmVhZEpzb24odGFyZ2V0UGF0aCk7XG4gICAgICAgICAgICBjb25zdCB7IGNoYW5nZWQsIG5leHRDb25maWcgfSA9IHVwc2VydFNlcnZlckNvbmZpZyhjdXJyZW50LCBzZXJ2ZXJOYW1lLCByZWdpc3RyYXRpb24pO1xuXG4gICAgICAgICAgICBpZiAoIWNoYW5nZWQpIHtcbiAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2goeyBjbGllbnQsIGNvbmZpZ1BhdGg6IHRhcmdldFBhdGgsIHN0YXR1czogJ3VuY2hhbmdlZCcgfSk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghb3B0aW9ucy5kcnlSdW4pIHtcbiAgICAgICAgICAgICAgICB3cml0ZUpzb24odGFyZ2V0UGF0aCwgbmV4dENvbmZpZyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJlc3VsdHMucHVzaCh7XG4gICAgICAgICAgICAgICAgY2xpZW50LFxuICAgICAgICAgICAgICAgIGNvbmZpZ1BhdGg6IHRhcmdldFBhdGgsXG4gICAgICAgICAgICAgICAgc3RhdHVzOiBleGlzdGVkQmVmb3JlID8gJ3VwZGF0ZWQnIDogJ2NyZWF0ZWQnXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHJlc3VsdHMucHVzaCh7XG4gICAgICAgICAgICAgICAgY2xpZW50LFxuICAgICAgICAgICAgICAgIGNvbmZpZ1BhdGg6IHRhcmdldFBhdGgsXG4gICAgICAgICAgICAgICAgc3RhdHVzOiAnZmFpbGVkJyxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcilcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdHM7XG59XG5cbmZ1bmN0aW9uIHBhcnNlQXJnVmFsdWUoZmxhZzogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBkaXJlY3QgPSBwcm9jZXNzLmFyZ3YuZmluZChhcmcgPT4gYXJnLnN0YXJ0c1dpdGgoYCR7ZmxhZ309YCkpO1xuICAgIGlmIChkaXJlY3QpIHJldHVybiBkaXJlY3Quc2xpY2UoZmxhZy5sZW5ndGggKyAxKTtcblxuICAgIGNvbnN0IGluZGV4ID0gcHJvY2Vzcy5hcmd2LmZpbmRJbmRleChhcmcgPT4gYXJnID09PSBmbGFnKTtcbiAgICBpZiAoaW5kZXggIT09IC0xICYmIHByb2Nlc3MuYXJndltpbmRleCArIDFdKSB7XG4gICAgICAgIHJldHVybiBwcm9jZXNzLmFyZ3ZbaW5kZXggKyAxXTtcbiAgICB9XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBoYXNGbGFnKGZsYWc6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBwcm9jZXNzLmFyZ3YuaW5jbHVkZXMoZmxhZykgfHwgcHJvY2Vzcy5hcmd2LnNvbWUoYXJnID0+IGFyZy5zdGFydHNXaXRoKGAke2ZsYWd9PWApKTtcbn1cblxuZnVuY3Rpb24gcHJpbnRTdW1tYXJ5KHJlc3VsdHM6IEJvb3RzdHJhcFJlc3VsdFtdLCBkcnlSdW46IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjb25zdCBtb2RlID0gZHJ5UnVuID8gJ0RSWSBSVU4nIDogJ0FQUExJRUQnO1xuICAgIGNvbnNvbGUubG9nKGBcXG4wY3R4IE1DUCBib290c3RyYXAgKCR7bW9kZX0pYCk7XG4gICAgZm9yIChjb25zdCByZXN1bHQgb2YgcmVzdWx0cykge1xuICAgICAgICBjb25zdCBzdWZmaXggPSByZXN1bHQubWVzc2FnZSA/IGAgLSAke3Jlc3VsdC5tZXNzYWdlfWAgOiAnJztcbiAgICAgICAgY29uc29sZS5sb2coYC0gJHtyZXN1bHQuY2xpZW50fTogJHtyZXN1bHQuc3RhdHVzfSAoJHtyZXN1bHQuY29uZmlnUGF0aH0pJHtzdWZmaXh9YCk7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcnVuQm9vdHN0cmFwRnJvbUNsaSgpOiBudW1iZXIge1xuICAgIGNvbnN0IGRyeVJ1biA9IGhhc0ZsYWcoJy0tZHJ5LXJ1bicpO1xuICAgIGNvbnN0IGNsaWVudHMgPSBwYXJzZUNsaWVudHMocGFyc2VBcmdWYWx1ZSgnLS1jbGllbnRzJykgfHwgcGFyc2VBcmdWYWx1ZSgnLS1jbGllbnQnKSk7XG4gICAgY29uc3Qgc2VydmVyTmFtZSA9IHBhcnNlQXJnVmFsdWUoJy0tc2VydmVyLW5hbWUnKSB8fCAnMGN0eCc7XG4gICAgY29uc3QgZW50cnlwb2ludCA9IHBhcnNlQXJnVmFsdWUoJy0tZW50cnlwb2ludCcpO1xuXG4gICAgY29uc3QgcmVzdWx0cyA9IGJvb3RzdHJhcE1jcFJlZ2lzdHJhdGlvbih7XG4gICAgICAgIGNsaWVudHMsXG4gICAgICAgIGRyeVJ1bixcbiAgICAgICAgc2VydmVyTmFtZSxcbiAgICAgICAgZW50cnlwb2ludFxuICAgIH0pO1xuXG4gICAgcHJpbnRTdW1tYXJ5KHJlc3VsdHMsIGRyeVJ1bik7XG5cbiAgICBjb25zdCBmYWlsZWQgPSByZXN1bHRzLnNvbWUocmVzdWx0ID0+IHJlc3VsdC5zdGF0dXMgPT09ICdmYWlsZWQnKTtcbiAgICByZXR1cm4gZmFpbGVkID8gMSA6IDA7XG59XG5cbmlmIChyZXF1aXJlLm1haW4gPT09IG1vZHVsZSkge1xuICAgIHByb2Nlc3MuZXhpdENvZGUgPSBydW5Cb290c3RyYXBGcm9tQ2xpKCk7XG59XG4iLCAiaW1wb3J0IG5ldCBmcm9tICduZXQnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgb3MgZnJvbSAnb3MnO1xuaW1wb3J0IHsgcmFuZG9tVVVJRCB9IGZyb20gJ2NyeXB0byc7XG5cbmNvbnN0IElTX1dJTiA9IG9zLnBsYXRmb3JtKCkgPT09ICd3aW4zMic7XG5jb25zdCBTT0NLRVRfUEFUSCA9IElTX1dJTiA/ICdcXFxcXFxcXC5cXFxccGlwZVxcXFwwY3R4LnNvY2snIDogcGF0aC5qb2luKG9zLmhvbWVkaXIoKSwgJy4wY3R4JywgJzBjdHguc29jaycpO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNlbmRUb0RhZW1vbk9wdGlvbnMge1xuICAgIHJlcXVlc3RJZD86IHN0cmluZztcbiAgICBzZXNzaW9uVG9rZW4/OiBzdHJpbmc7XG4gICAgYXBpVmVyc2lvbj86IHN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNlbmRUb0RhZW1vbihtZXRob2Q6IHN0cmluZywgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9LCBvcHRpb25zOiBTZW5kVG9EYWVtb25PcHRpb25zID0ge30pOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3RJZCA9IG9wdGlvbnMucmVxdWVzdElkIHx8IHJhbmRvbVVVSUQoKTtcblxuICAgICAgICBjb25zdCBzb2NrZXQgPSBuZXQuY3JlYXRlQ29ubmVjdGlvbihTT0NLRVRfUEFUSCk7XG4gICAgICAgIHNvY2tldC53cml0ZShKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICBtZXRob2QsXG4gICAgICAgICAgICBwYXJhbXMsXG4gICAgICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgICAgICBzZXNzaW9uVG9rZW46IG9wdGlvbnMuc2Vzc2lvblRva2VuLFxuICAgICAgICAgICAgYXBpVmVyc2lvbjogb3B0aW9ucy5hcGlWZXJzaW9uID8/ICcyJ1xuICAgICAgICB9KSArICdcXG4nKTtcblxuICAgICAgICBsZXQgcmVzcG9uc2VEYXRhID0gJyc7XG4gICAgICAgIHNvY2tldC5vbignZGF0YScsIGRhdGEgPT4ge1xuICAgICAgICAgICAgcmVzcG9uc2VEYXRhICs9IGRhdGEudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgbGV0IG5ld2xpbmVJbmRleDtcclxuICAgICAgICAgICAgd2hpbGUgKChuZXdsaW5lSW5kZXggPSByZXNwb25zZURhdGEuaW5kZXhPZignXFxuJykpICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IHJlc3BvbnNlRGF0YS5zbGljZSgwLCBuZXdsaW5lSW5kZXgpO1xyXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VEYXRhID0gcmVzcG9uc2VEYXRhLnNsaWNlKG5ld2xpbmVJbmRleCArIDEpO1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzID0gSlNPTi5wYXJzZShtZXNzYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgc29ja2V0LmRlc3Ryb3koKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcy5vaykgcmVzb2x2ZShyZXMucmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZSByZWplY3QobmV3IEVycm9yKHJlcy5lcnJvcikpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBzb2NrZXQuZGVzdHJveSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoXCJGYWlsZWQgdG8gcGFyc2UgcmVzcG9uc2U6IFwiICsgZSkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHNvY2tldC5vbignZXJyb3InLCByZWplY3QpO1xyXG4gICAgfSk7XHJcbn1cclxuIiwgImltcG9ydCBEYXRhYmFzZSBmcm9tICdiZXR0ZXItc3FsaXRlMyc7XHJcbmltcG9ydCBmcyBmcm9tICdmcyc7XHJcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xyXG5pbXBvcnQgb3MgZnJvbSAnb3MnO1xyXG5cclxuY29uc3QgREJfUEFUSCA9IHBhdGguam9pbihvcy5ob21lZGlyKCksICcuMGN0eCcsICcwY3R4LmRiJyk7XHJcbmV4cG9ydCBjb25zdCBDVVJSRU5UX1NDSEVNQV9WRVJTSU9OID0gNDtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgT3BlbkRiT3B0aW9ucyB7XHJcbiAgICBkYlBhdGg/OiBzdHJpbmc7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlc29sdmVEYlBhdGgob3B0aW9ucz86IE9wZW5EYk9wdGlvbnMpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIG9wdGlvbnM/LmRiUGF0aCB8fCBwcm9jZXNzLmVudi5DVFhfREJfUEFUSCB8fCBEQl9QQVRIO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gb3BlbkRiKG9wdGlvbnM/OiBPcGVuRGJPcHRpb25zKTogRGF0YWJhc2UuRGF0YWJhc2Uge1xyXG4gICAgY29uc3QgZGJQYXRoID0gcmVzb2x2ZURiUGF0aChvcHRpb25zKTtcclxuICAgIGZzLm1rZGlyU3luYyhwYXRoLmRpcm5hbWUoZGJQYXRoKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XHJcblxyXG4gICAgY29uc3QgZGIgPSBuZXcgRGF0YWJhc2UoZGJQYXRoKTtcclxuICAgIGRiLnByYWdtYSgnam91cm5hbF9tb2RlID0gV0FMJyk7XHJcbiAgICBkYi5wcmFnbWEoJ2ZvcmVpZ25fa2V5cyA9IE9OJyk7XHJcbiAgICBtaWdyYXRlKGRiKTtcclxuICAgIHJldHVybiBkYjtcclxufVxyXG5cclxuZnVuY3Rpb24gbWlncmF0ZShkYjogRGF0YWJhc2UuRGF0YWJhc2UpIHtcclxuICAgIGRiLmV4ZWMoYFxyXG4gICAgQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgc2NoZW1hX21ldGEgKFxyXG4gICAgICBrZXkgICBURVhUIFBSSU1BUlkgS0VZLFxyXG4gICAgICB2YWx1ZSBURVhUIE5PVCBOVUxMXHJcbiAgICApO1xyXG4gIGApO1xyXG5cclxuICAgIGNvbnN0IHZlcnNpb24gPSBnZXRTY2hlbWFWZXJzaW9uKGRiKTtcclxuICAgIGlmICh2ZXJzaW9uIDwgMSkge1xyXG4gICAgICAgIG1pZ3JhdGVUb1YxKGRiKTtcclxuICAgICAgICBzZXRTY2hlbWFWZXJzaW9uKGRiLCAxKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodmVyc2lvbiA8IDIpIHtcclxuICAgICAgICBtaWdyYXRlVG9WMihkYik7XHJcbiAgICAgICAgc2V0U2NoZW1hVmVyc2lvbihkYiwgMik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHZlcnNpb24gPCAzKSB7XHJcbiAgICAgICAgbWlncmF0ZVRvVjMoZGIpO1xyXG4gICAgICAgIHNldFNjaGVtYVZlcnNpb24oZGIsIDMpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh2ZXJzaW9uIDwgNCkge1xyXG4gICAgICAgIG1pZ3JhdGVUb1Y0KGRiKTtcclxuICAgICAgICBzZXRTY2hlbWFWZXJzaW9uKGRiLCA0KTtcclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gbWlncmF0ZVRvVjEoZGI6IERhdGFiYXNlLkRhdGFiYXNlKSB7XHJcbiAgICBkYi5leGVjKGBcclxuICAgIENSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIGNvbnRleHRzIChcclxuICAgICAgaWQgICAgICAgICBURVhUIFBSSU1BUlkgS0VZLFxyXG4gICAgICBuYW1lICAgICAgIFRFWFQgTk9UIE5VTEwsXHJcbiAgICAgIHBhdGhzICAgICAgVEVYVCBOT1QgTlVMTCBERUZBVUxUICdbXScsXHJcbiAgICAgIGNyZWF0ZWRBdCAgSU5URUdFUiBOT1QgTlVMTFxyXG4gICAgKTtcclxuXHJcbiAgICBDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBub2RlcyAoXHJcbiAgICAgIGlkICAgICAgICAgIFRFWFQgUFJJTUFSWSBLRVksXHJcbiAgICAgIGNvbnRleHRJZCAgIFRFWFQgTk9UIE5VTEwsXHJcbiAgICAgIHRocmVhZCAgICAgIFRFWFQsXHJcbiAgICAgIHR5cGUgICAgICAgIFRFWFQgTk9UIE5VTEwsXHJcbiAgICAgIGNvbnRlbnQgICAgIFRFWFQgTk9UIE5VTEwsXHJcbiAgICAgIGtleSAgICAgICAgIFRFWFQsXHJcbiAgICAgIHRhZ3MgICAgICAgIFRFWFQgTk9UIE5VTEwgREVGQVVMVCAnW10nLFxyXG4gICAgICBzb3VyY2UgICAgICBURVhULFxyXG4gICAgICBjcmVhdGVkQXQgICBJTlRFR0VSIE5PVCBOVUxMLFxyXG4gICAgICBjaGVja3BvaW50SWQgVEVYVCxcclxuICAgICAgRk9SRUlHTiBLRVkgKGNvbnRleHRJZCkgUkVGRVJFTkNFUyBjb250ZXh0cyhpZClcclxuICAgICk7XHJcblxyXG4gICAgQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgZWRnZXMgKFxyXG4gICAgICBpZCAgICAgICAgVEVYVCBQUklNQVJZIEtFWSxcclxuICAgICAgZnJvbUlkICAgIFRFWFQgTk9UIE5VTEwsXHJcbiAgICAgIHRvSWQgICAgICBURVhUIE5PVCBOVUxMLFxyXG4gICAgICByZWxhdGlvbiAgVEVYVCBOT1QgTlVMTCxcclxuICAgICAgY3JlYXRlZEF0IElOVEVHRVIgTk9UIE5VTEwsXHJcbiAgICAgIEZPUkVJR04gS0VZIChmcm9tSWQpIFJFRkVSRU5DRVMgbm9kZXMoaWQpLFxyXG4gICAgICBGT1JFSUdOIEtFWSAodG9JZCkgICBSRUZFUkVOQ0VTIG5vZGVzKGlkKVxyXG4gICAgKTtcclxuXHJcbiAgICBDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBjaGVja3BvaW50cyAoXHJcbiAgICAgIGlkICAgICAgICBURVhUIFBSSU1BUlkgS0VZLFxyXG4gICAgICBjb250ZXh0SWQgVEVYVCBOT1QgTlVMTCxcclxuICAgICAgbmFtZSAgICAgIFRFWFQgTk9UIE5VTEwsXHJcbiAgICAgIG5vZGVJZHMgICBURVhUIE5PVCBOVUxMIERFRkFVTFQgJ1tdJyxcclxuICAgICAgY3JlYXRlZEF0IElOVEVHRVIgTk9UIE5VTEwsXHJcbiAgICAgIEZPUkVJR04gS0VZIChjb250ZXh0SWQpIFJFRkVSRU5DRVMgY29udGV4dHMoaWQpXHJcbiAgICApO1xyXG5cclxuICAgIENSRUFURSBWSVJUVUFMIFRBQkxFIElGIE5PVCBFWElTVFMgbm9kZXNfZnRzXHJcbiAgICAgIFVTSU5HIGZ0czUoaWQgVU5JTkRFWEVELCBjb250ZW50LCB0YWdzLCB0b2tlbml6ZT0ncG9ydGVyIGFzY2lpJyk7XHJcbiAgYCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIG1pZ3JhdGVUb1YyKGRiOiBEYXRhYmFzZS5EYXRhYmFzZSkge1xyXG4gICAgZGIuZXhlYyhgXHJcbiAgICBDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBhdWRpdF9sb2dzIChcclxuICAgICAgaWQgICAgICAgICAgICBURVhUIFBSSU1BUlkgS0VZLFxyXG4gICAgICBhY3Rpb24gICAgICAgIFRFWFQgTk9UIE5VTEwsXHJcbiAgICAgIGNvbnRleHRJZCAgICAgVEVYVCxcclxuICAgICAgcGF5bG9hZCAgICAgICBURVhUIE5PVCBOVUxMIERFRkFVTFQgJ3t9JyxcclxuICAgICAgcmVzdWx0ICAgICAgICBURVhULFxyXG4gICAgICBhY3RvciAgICAgICAgIFRFWFQsXHJcbiAgICAgIHNvdXJjZSAgICAgICAgVEVYVCxcclxuICAgICAgc2Vzc2lvblRva2VuICBURVhULFxyXG4gICAgICBjb25uZWN0aW9uSWQgIFRFWFQsXHJcbiAgICAgIHJlcXVlc3RJZCAgICAgVEVYVCxcclxuICAgICAgY3JlYXRlZEF0ICAgICBJTlRFR0VSIE5PVCBOVUxMXHJcbiAgICApO1xyXG5cclxuICAgIENSRUFURSBJTkRFWCBJRiBOT1QgRVhJU1RTIGlkeF9hdWRpdF9sb2dzX2NvbnRleHRfY3JlYXRlZFxyXG4gICAgICBPTiBhdWRpdF9sb2dzKGNvbnRleHRJZCwgY3JlYXRlZEF0IERFU0MpO1xyXG5cclxuICAgIENSRUFURSBJTkRFWCBJRiBOT1QgRVhJU1RTIGlkeF9hdWRpdF9sb2dzX2NyZWF0ZWRcclxuICAgICAgT04gYXVkaXRfbG9ncyhjcmVhdGVkQXQgREVTQyk7XHJcbiAgYCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGhhc0NvbHVtbihkYjogRGF0YWJhc2UuRGF0YWJhc2UsIHRhYmxlTmFtZTogc3RyaW5nLCBjb2x1bW5OYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IHJvd3MgPSBkYi5wcmVwYXJlKGBQUkFHTUEgdGFibGVfaW5mbygke3RhYmxlTmFtZX0pYCkuYWxsKCkgYXMgQXJyYXk8eyBuYW1lOiBzdHJpbmcgfT47XHJcbiAgICByZXR1cm4gcm93cy5zb21lKChyb3cpID0+IHJvdy5uYW1lID09PSBjb2x1bW5OYW1lKTtcclxufVxyXG5cclxuLy8gU0VDLTAwMTogQXVkaXQgbG9nIEhNQUMgY2hhaW4gY29sdW1uc1xyXG5mdW5jdGlvbiBtaWdyYXRlVG9WNChkYjogRGF0YWJhc2UuRGF0YWJhc2UpIHtcclxuICAgIGlmICghaGFzQ29sdW1uKGRiLCAnYXVkaXRfbG9ncycsICdlbnRyeUhhc2gnKSkge1xyXG4gICAgICAgIGRiLmV4ZWMoYEFMVEVSIFRBQkxFIGF1ZGl0X2xvZ3MgQUREIENPTFVNTiBlbnRyeUhhc2ggVEVYVGApO1xyXG4gICAgfVxyXG4gICAgaWYgKCFoYXNDb2x1bW4oZGIsICdhdWRpdF9sb2dzJywgJ3ByZXZIYXNoJykpIHtcclxuICAgICAgICBkYi5leGVjKGBBTFRFUiBUQUJMRSBhdWRpdF9sb2dzIEFERCBDT0xVTU4gcHJldkhhc2ggVEVYVGApO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBtaWdyYXRlVG9WMyhkYjogRGF0YWJhc2UuRGF0YWJhc2UpIHtcclxuICAgIGlmICghaGFzQ29sdW1uKGRiLCAnY29udGV4dHMnLCAnc3luY1BvbGljeScpKSB7XHJcbiAgICAgICAgZGIuZXhlYyhgXHJcbiAgICAgICAgQUxURVIgVEFCTEUgY29udGV4dHNcclxuICAgICAgICBBREQgQ09MVU1OIHN5bmNQb2xpY3kgVEVYVCBOT1QgTlVMTCBERUZBVUxUICdtZXRhZGF0YV9vbmx5J1xyXG4gICAgICBgKTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFNjaGVtYVZlcnNpb24oZGI6IERhdGFiYXNlLkRhdGFiYXNlKTogbnVtYmVyIHtcclxuICAgIGNvbnN0IHJvdyA9IGRiLnByZXBhcmUoJ1NFTEVDVCB2YWx1ZSBGUk9NIHNjaGVtYV9tZXRhIFdIRVJFIGtleSA9ID8nKS5nZXQoJ3NjaGVtYV92ZXJzaW9uJykgYXMgeyB2YWx1ZTogc3RyaW5nIH0gfCB1bmRlZmluZWQ7XHJcbiAgICBpZiAoIXJvdykgcmV0dXJuIDA7XHJcblxyXG4gICAgY29uc3QgdmFsdWUgPSBOdW1iZXIocm93LnZhbHVlKTtcclxuICAgIHJldHVybiBOdW1iZXIuaXNOYU4odmFsdWUpID8gMCA6IHZhbHVlO1xyXG59XHJcblxyXG5mdW5jdGlvbiBzZXRTY2hlbWFWZXJzaW9uKGRiOiBEYXRhYmFzZS5EYXRhYmFzZSwgdmVyc2lvbjogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBkYi5wcmVwYXJlKGBcclxuICAgIElOU0VSVCBJTlRPIHNjaGVtYV9tZXRhIChrZXksIHZhbHVlKVxyXG4gICAgVkFMVUVTICg/LCA/KVxyXG4gICAgT04gQ09ORkxJQ1Qoa2V5KSBETyBVUERBVEUgU0VUIHZhbHVlID0gZXhjbHVkZWQudmFsdWVcclxuICBgKS5ydW4oJ3NjaGVtYV92ZXJzaW9uJywgU3RyaW5nKHZlcnNpb24pKTtcclxufVxyXG4iLCAiaW1wb3J0IHsgY3JlYXRlQ2lwaGVyaXYsIGNyZWF0ZURlY2lwaGVyaXYsIGNyZWF0ZUhhc2gsIHJhbmRvbUJ5dGVzIH0gZnJvbSAnY3J5cHRvJztcbmltcG9ydCBmcyBmcm9tICdmcyc7XG5pbXBvcnQgb3MgZnJvbSAnb3MnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5cbmNvbnN0IE1BU1RFUl9LRVlfUEFUSCA9IHBhdGguam9pbihvcy5ob21lZGlyKCksICcuMGN0eCcsICdtYXN0ZXIua2V5Jyk7XG5jb25zdCBLRVlfQllURVMgPSAzMjtcbmNvbnN0IElWX0JZVEVTID0gMTI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRW5jcnlwdGVkUGF5bG9hZCB7XG4gICAgdmVyc2lvbjogMTtcbiAgICBrZXlJZDogc3RyaW5nO1xuICAgIGl2OiBzdHJpbmc7XG4gICAgdGFnOiBzdHJpbmc7XG4gICAgY2lwaGVydGV4dDogc3RyaW5nO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVNYXN0ZXJLZXkocmF3OiBzdHJpbmcpOiBCdWZmZXIge1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGJhc2U2NCA9IEJ1ZmZlci5mcm9tKHJhdywgJ2Jhc2U2NCcpO1xuICAgICAgICBpZiAoYmFzZTY0Lmxlbmd0aCA9PT0gS0VZX0JZVEVTKSByZXR1cm4gYmFzZTY0O1xuICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBuby1vcFxuICAgIH1cblxuICAgIGNvbnN0IHV0ZiA9IEJ1ZmZlci5mcm9tKHJhdywgJ3V0ZjgnKTtcbiAgICBpZiAodXRmLmxlbmd0aCA9PT0gS0VZX0JZVEVTKSByZXR1cm4gdXRmO1xuXG4gICAgdGhyb3cgbmV3IEVycm9yKCdNYXN0ZXIga2V5IG11c3QgYmUgMzIgYnl0ZXMgKGJhc2U2NC1lbmNvZGVkIG9yIHJhdyBVVEYtOCkuJyk7XG59XG5cbmZ1bmN0aW9uIGxvYWRPckNyZWF0ZU1hc3RlcktleSgpOiBCdWZmZXIge1xuICAgIGlmIChwcm9jZXNzLmVudi5DVFhfTUFTVEVSX0tFWSkge1xuICAgICAgICByZXR1cm4gbm9ybWFsaXplTWFzdGVyS2V5KHByb2Nlc3MuZW52LkNUWF9NQVNURVJfS0VZKTtcbiAgICB9XG5cbiAgICBmcy5ta2RpclN5bmMocGF0aC5kaXJuYW1lKE1BU1RFUl9LRVlfUEFUSCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKE1BU1RFUl9LRVlfUEFUSCkpIHtcbiAgICAgICAgY29uc3QgZ2VuZXJhdGVkID0gcmFuZG9tQnl0ZXMoS0VZX0JZVEVTKS50b1N0cmluZygnYmFzZTY0Jyk7XG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmMoTUFTVEVSX0tFWV9QQVRILCBnZW5lcmF0ZWQsIHsgbW9kZTogMG82MDAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgZmlsZUtleSA9IGZzLnJlYWRGaWxlU3luYyhNQVNURVJfS0VZX1BBVEgsICd1dGY4JykudHJpbSgpO1xuICAgIHJldHVybiBub3JtYWxpemVNYXN0ZXJLZXkoZmlsZUtleSk7XG59XG5cbmZ1bmN0aW9uIGdldEtleUlkKGtleTogQnVmZmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gY3JlYXRlSGFzaCgnc2hhMjU2JykudXBkYXRlKGtleSkuZGlnZXN0KCdoZXgnKS5zbGljZSgwLCAxNik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbmNyeXB0SnNvbih2YWx1ZTogdW5rbm93bik6IEVuY3J5cHRlZFBheWxvYWQge1xuICAgIGNvbnN0IGtleSA9IGxvYWRPckNyZWF0ZU1hc3RlcktleSgpO1xuICAgIGNvbnN0IGl2ID0gcmFuZG9tQnl0ZXMoSVZfQllURVMpO1xuICAgIGNvbnN0IGNpcGhlciA9IGNyZWF0ZUNpcGhlcml2KCdhZXMtMjU2LWdjbScsIGtleSwgaXYpO1xuICAgIGNvbnN0IHBsYWludGV4dCA9IEJ1ZmZlci5mcm9tKEpTT04uc3RyaW5naWZ5KHZhbHVlKSwgJ3V0ZjgnKTtcblxuICAgIGNvbnN0IGNpcGhlcnRleHQgPSBCdWZmZXIuY29uY2F0KFtjaXBoZXIudXBkYXRlKHBsYWludGV4dCksIGNpcGhlci5maW5hbCgpXSk7XG4gICAgY29uc3QgdGFnID0gY2lwaGVyLmdldEF1dGhUYWcoKTtcblxuICAgIHJldHVybiB7XG4gICAgICAgIHZlcnNpb246IDEsXG4gICAgICAgIGtleUlkOiBnZXRLZXlJZChrZXkpLFxuICAgICAgICBpdjogaXYudG9TdHJpbmcoJ2Jhc2U2NCcpLFxuICAgICAgICB0YWc6IHRhZy50b1N0cmluZygnYmFzZTY0JyksXG4gICAgICAgIGNpcGhlcnRleHQ6IGNpcGhlcnRleHQudG9TdHJpbmcoJ2Jhc2U2NCcpXG4gICAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlY3J5cHRKc29uPFQ+KHBheWxvYWQ6IEVuY3J5cHRlZFBheWxvYWQpOiBUIHtcbiAgICBpZiAocGF5bG9hZC52ZXJzaW9uICE9PSAxKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgZW5jcnlwdGlvbiBwYXlsb2FkIHZlcnNpb24gJHtwYXlsb2FkLnZlcnNpb259YCk7XG4gICAgfVxuXG4gICAgY29uc3Qga2V5ID0gbG9hZE9yQ3JlYXRlTWFzdGVyS2V5KCk7XG4gICAgY29uc3QgZGVjaXBoZXIgPSBjcmVhdGVEZWNpcGhlcml2KFxuICAgICAgICAnYWVzLTI1Ni1nY20nLFxuICAgICAgICBrZXksXG4gICAgICAgIEJ1ZmZlci5mcm9tKHBheWxvYWQuaXYsICdiYXNlNjQnKVxuICAgICk7XG4gICAgZGVjaXBoZXIuc2V0QXV0aFRhZyhCdWZmZXIuZnJvbShwYXlsb2FkLnRhZywgJ2Jhc2U2NCcpKTtcblxuICAgIGNvbnN0IHBsYWludGV4dCA9IEJ1ZmZlci5jb25jYXQoW1xuICAgICAgICBkZWNpcGhlci51cGRhdGUoQnVmZmVyLmZyb20ocGF5bG9hZC5jaXBoZXJ0ZXh0LCAnYmFzZTY0JykpLFxuICAgICAgICBkZWNpcGhlci5maW5hbCgpXG4gICAgXSk7XG5cbiAgICByZXR1cm4gSlNPTi5wYXJzZShwbGFpbnRleHQudG9TdHJpbmcoJ3V0ZjgnKSkgYXMgVDtcbn1cbiIsICIvKipcclxuICogU1lOQy0wMjogR2xvYmFsIGNvbmZpZ3VyYXRpb24gc3lzdGVtLlxyXG4gKlxyXG4gKiBDb25maWcgZmlsZTogfi8uMGN0eC9jb25maWcuanNvblxyXG4gKiBSZXNvbHV0aW9uIG9yZGVyOiBlbnYgdmFyIFx1MjE5MiBjb25maWcuanNvbiBcdTIxOTIgYnVpbHQtaW4gZGVmYXVsdFxyXG4gKlxyXG4gKiBVc2VkIGJ5IENMSSwgZGFlbW9uLCBhbmQgTUNQIHBhY2thZ2VzIGZvciBjb25zaXN0ZW50IGNvbmZpZyBhY2Nlc3MuXHJcbiAqL1xyXG5cclxuaW1wb3J0IGZzIGZyb20gJ2ZzJztcclxuaW1wb3J0IG9zIGZyb20gJ29zJztcclxuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XHJcblxyXG5jb25zdCBDT05GSUdfUEFUSCA9IHBhdGguam9pbihvcy5ob21lZGlyKCksICcuMGN0eCcsICdjb25maWcuanNvbicpO1xyXG5cclxuLy8gXHUyNTAwXHUyNTAwXHUyNTAwIFNjaGVtYSBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQXBwQ29uZmlnIHtcclxuICAgICdhdXRoLnNlcnZlcic6IHN0cmluZztcclxuICAgICdzeW5jLmVuYWJsZWQnOiBib29sZWFuO1xyXG4gICAgJ3N5bmMuZW5kcG9pbnQnOiBzdHJpbmc7XHJcbiAgICAndWkudXJsJzogc3RyaW5nO1xyXG4gICAgJ2ludGVncmF0aW9uLmNoYXRncHQuZW5hYmxlZCc6IGJvb2xlYW47XHJcbiAgICAnaW50ZWdyYXRpb24uY2hhdGdwdC5yZXF1aXJlQXBwcm92YWwnOiBib29sZWFuO1xyXG4gICAgJ2ludGVncmF0aW9uLmF1dG9Cb290c3RyYXAnOiBib29sZWFuO1xyXG59XHJcblxyXG5jb25zdCBERUZBVUxUUzogQXBwQ29uZmlnID0ge1xyXG4gICAgJ2F1dGguc2VydmVyJzogJ2h0dHBzOi8vd3d3LjBjdHguY29tJyxcclxuICAgICdzeW5jLmVuYWJsZWQnOiB0cnVlLFxyXG4gICAgJ3N5bmMuZW5kcG9pbnQnOiAnaHR0cHM6Ly93d3cuMGN0eC5jb20vYXBpL3YxL3N5bmMnLFxyXG4gICAgJ3VpLnVybCc6ICdodHRwczovL3d3dy4wY3R4LmNvbScsXHJcbiAgICAnaW50ZWdyYXRpb24uY2hhdGdwdC5lbmFibGVkJzogZmFsc2UsXHJcbiAgICAnaW50ZWdyYXRpb24uY2hhdGdwdC5yZXF1aXJlQXBwcm92YWwnOiB0cnVlLFxyXG4gICAgJ2ludGVncmF0aW9uLmF1dG9Cb290c3RyYXAnOiB0cnVlXHJcbn07XHJcblxyXG4vKiogTWFwIG9mIGNvbmZpZyBrZXlzIHRvIGVudiB2YXIgb3ZlcnJpZGVzICovXHJcbmNvbnN0IEVOVl9PVkVSUklERVM6IFBhcnRpYWw8UmVjb3JkPGtleW9mIEFwcENvbmZpZywgc3RyaW5nPj4gPSB7XHJcbiAgICAnYXV0aC5zZXJ2ZXInOiAnQ1RYX0FVVEhfU0VSVkVSJyxcclxuICAgICdzeW5jLmVuYWJsZWQnOiAnQ1RYX1NZTkNfRU5BQkxFRCcsXHJcbiAgICAnc3luYy5lbmRwb2ludCc6ICdDVFhfU1lOQ19FTkRQT0lOVCcsXHJcbiAgICAnaW50ZWdyYXRpb24uY2hhdGdwdC5lbmFibGVkJzogJ0NUWF9JTlRFR1JBVElPTl9DSEFUR1BUX0VOQUJMRUQnLFxyXG4gICAgJ2ludGVncmF0aW9uLmNoYXRncHQucmVxdWlyZUFwcHJvdmFsJzogJ0NUWF9JTlRFR1JBVElPTl9DSEFUR1BUX1JFUVVJUkVfQVBQUk9WQUwnLFxyXG4gICAgJ2ludGVncmF0aW9uLmF1dG9Cb290c3RyYXAnOiAnQ1RYX0lOVEVHUkFUSU9OX0FVVE9fQk9PVFNUUkFQJ1xyXG59O1xyXG5cclxuY29uc3QgQk9PTEVBTl9LRVlTID0gbmV3IFNldDxrZXlvZiBBcHBDb25maWc+KFtcclxuICAgICdzeW5jLmVuYWJsZWQnLFxyXG4gICAgJ2ludGVncmF0aW9uLmNoYXRncHQuZW5hYmxlZCcsXHJcbiAgICAnaW50ZWdyYXRpb24uY2hhdGdwdC5yZXF1aXJlQXBwcm92YWwnLFxyXG4gICAgJ2ludGVncmF0aW9uLmF1dG9Cb290c3RyYXAnXHJcbl0pO1xyXG5cclxuZnVuY3Rpb24gcGFyc2VCb29sZWFuVmFsdWUodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHZhbHVlID09PSAnMScgfHwgdmFsdWUudG9Mb3dlckNhc2UoKSA9PT0gJ3RydWUnO1xyXG59XHJcblxyXG4vLyBcdTI1MDBcdTI1MDBcdTI1MDAgTG9hZCAvIFNhdmUgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHJcblxyXG4vKipcclxuICogTG9hZCByYXcgY29uZmlnIGZyb20gZGlzay4gUmV0dXJucyBlbXB0eSBvYmplY3QgaWYgZmlsZSBtaXNzaW5nL2NvcnJ1cHQuXHJcbiAqL1xyXG5mdW5jdGlvbiBsb2FkUmF3Q29uZmlnKCk6IFBhcnRpYWw8QXBwQ29uZmlnPiB7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIGlmICghZnMuZXhpc3RzU3luYyhDT05GSUdfUEFUSCkpIHJldHVybiB7fTtcclxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmMoQ09ORklHX1BBVEgsICd1dGY4JykpIGFzIFBhcnRpYWw8QXBwQ29uZmlnPjtcclxuICAgIH0gY2F0Y2gge1xyXG4gICAgICAgIHJldHVybiB7fTtcclxuICAgIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIExvYWQgZnVsbCBjb25maWcgd2l0aCBkZWZhdWx0cyBhcHBsaWVkLlxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRDb25maWcoKTogQXBwQ29uZmlnIHtcclxuICAgIGNvbnN0IHJhdyA9IGxvYWRSYXdDb25maWcoKTtcclxuICAgIHJldHVybiB7IC4uLkRFRkFVTFRTLCAuLi5yYXcgfTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFNhdmUgcGFydGlhbCBjb25maWcgKG1lcmdlcyB3aXRoIGV4aXN0aW5nKS5cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBzYXZlQ29uZmlnKHBhcnRpYWw6IFBhcnRpYWw8QXBwQ29uZmlnPik6IHZvaWQge1xyXG4gICAgY29uc3QgZXhpc3RpbmcgPSBsb2FkUmF3Q29uZmlnKCk7XHJcbiAgICBjb25zdCBtZXJnZWQgPSB7IC4uLmV4aXN0aW5nLCAuLi5wYXJ0aWFsIH07XHJcblxyXG4gICAgZnMubWtkaXJTeW5jKHBhdGguZGlybmFtZShDT05GSUdfUEFUSCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xyXG4gICAgZnMud3JpdGVGaWxlU3luYyhDT05GSUdfUEFUSCwgSlNPTi5zdHJpbmdpZnkobWVyZ2VkLCBudWxsLCAyKSwgJ3V0ZjgnKTtcclxufVxyXG5cclxuLy8gXHUyNTAwXHUyNTAwXHUyNTAwIEdldCAvIFNldCBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcclxuXHJcbmNvbnN0IFZBTElEX0tFWVMgPSBuZXcgU2V0PHN0cmluZz4oT2JqZWN0LmtleXMoREVGQVVMVFMpKTtcclxuXHJcbi8qKlxyXG4gKiBHZXQgYSByZXNvbHZlZCBjb25maWcgdmFsdWUuIFByaW9yaXR5OiBlbnYgdmFyIFx1MjE5MiBjb25maWcuanNvbiBcdTIxOTIgZGVmYXVsdC5cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRDb25maWdWYWx1ZTxLIGV4dGVuZHMga2V5b2YgQXBwQ29uZmlnPihrZXk6IEspOiBBcHBDb25maWdbS10ge1xyXG4gICAgLy8gMS4gQ2hlY2sgZW52IHZhciBvdmVycmlkZVxyXG4gICAgY29uc3QgZW52S2V5ID0gRU5WX09WRVJSSURFU1trZXldO1xyXG4gICAgaWYgKGVudktleSkge1xyXG4gICAgICAgIGNvbnN0IGVudlZhbCA9IHByb2Nlc3MuZW52W2VudktleV07XHJcbiAgICAgICAgaWYgKGVudlZhbCAhPT0gdW5kZWZpbmVkICYmIGVudlZhbCAhPT0gJycpIHtcclxuICAgICAgICAgICAgaWYgKEJPT0xFQU5fS0VZUy5oYXMoa2V5KSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlQm9vbGVhblZhbHVlKGVudlZhbCkgYXMgQXBwQ29uZmlnW0tdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBlbnZWYWwgYXMgQXBwQ29uZmlnW0tdO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyAyLiBDaGVjayBjb25maWcgZmlsZVxyXG4gICAgY29uc3QgcmF3ID0gbG9hZFJhd0NvbmZpZygpO1xyXG4gICAgaWYgKGtleSBpbiByYXcpIHtcclxuICAgICAgICByZXR1cm4gcmF3W2tleV0gYXMgQXBwQ29uZmlnW0tdO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIDMuIERlZmF1bHRcclxuICAgIHJldHVybiBERUZBVUxUU1trZXldO1xyXG59XHJcblxyXG4vKipcclxuICogU2V0IGEgY29uZmlnIHZhbHVlIGFuZCBwZXJzaXN0IHRvIGRpc2suXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gc2V0Q29uZmlnVmFsdWU8SyBleHRlbmRzIGtleW9mIEFwcENvbmZpZz4oa2V5OiBLLCB2YWx1ZTogQXBwQ29uZmlnW0tdKTogdm9pZCB7XHJcbiAgICBpZiAoIVZBTElEX0tFWVMuaGFzKGtleSkpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gY29uZmlnIGtleTogJHtrZXl9LiBWYWxpZCBrZXlzOiAke1suLi5WQUxJRF9LRVlTXS5qb2luKCcsICcpfWApO1xyXG4gICAgfVxyXG4gICAgc2F2ZUNvbmZpZyh7IFtrZXldOiB2YWx1ZSB9IGFzIFBhcnRpYWw8QXBwQ29uZmlnPik7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBMaXN0IGFsbCBjb25maWcgdmFsdWVzIChyZXNvbHZlZCwgd2l0aCBzb3VyY2UgaW5kaWNhdGlvbikuXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gbGlzdENvbmZpZygpOiBBcnJheTx7XHJcbiAgICBrZXk6IGtleW9mIEFwcENvbmZpZztcclxuICAgIHZhbHVlOiB1bmtub3duO1xyXG4gICAgc291cmNlOiAnZW52JyB8ICdjb25maWcnIHwgJ2RlZmF1bHQnO1xyXG59PiB7XHJcbiAgICBjb25zdCByYXcgPSBsb2FkUmF3Q29uZmlnKCk7XHJcblxyXG4gICAgcmV0dXJuIChPYmplY3Qua2V5cyhERUZBVUxUUykgYXMgQXJyYXk8a2V5b2YgQXBwQ29uZmlnPikubWFwKGtleSA9PiB7XHJcbiAgICAgICAgY29uc3QgZW52S2V5ID0gRU5WX09WRVJSSURFU1trZXldO1xyXG4gICAgICAgIGNvbnN0IGVudlZhbCA9IGVudktleSA/IHByb2Nlc3MuZW52W2VudktleV0gOiB1bmRlZmluZWQ7XHJcblxyXG4gICAgICAgIGlmIChlbnZWYWwgIT09IHVuZGVmaW5lZCAmJiBlbnZWYWwgIT09ICcnKSB7XHJcbiAgICAgICAgICAgIGxldCB2YWx1ZTogdW5rbm93biA9IGVudlZhbDtcclxuICAgICAgICAgICAgaWYgKEJPT0xFQU5fS0VZUy5oYXMoa2V5KSkge1xyXG4gICAgICAgICAgICAgICAgdmFsdWUgPSBwYXJzZUJvb2xlYW5WYWx1ZShlbnZWYWwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB7IGtleSwgdmFsdWUsIHNvdXJjZTogJ2VudicgYXMgY29uc3QgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChrZXkgaW4gcmF3KSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7IGtleSwgdmFsdWU6IHJhd1trZXldLCBzb3VyY2U6ICdjb25maWcnIGFzIGNvbnN0IH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4geyBrZXksIHZhbHVlOiBERUZBVUxUU1trZXldLCBzb3VyY2U6ICdkZWZhdWx0JyBhcyBjb25zdCB9O1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDaGVjayBpZiBhIHN0cmluZyBpcyBhIHZhbGlkIGNvbmZpZyBrZXkuXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZENvbmZpZ0tleShrZXk6IHN0cmluZyk6IGtleSBpcyBrZXlvZiBBcHBDb25maWcge1xyXG4gICAgcmV0dXJuIFZBTElEX0tFWVMuaGFzKGtleSk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBHZXQgdGhlIGNvbmZpZyBmaWxlIHBhdGggKGZvciBkaXNwbGF5L2RlYnVnKS5cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRDb25maWdQYXRoKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gQ09ORklHX1BBVEg7XHJcbn1cclxuIiwgImltcG9ydCBmcyBmcm9tICdmcyc7XHJcbmltcG9ydCBvcyBmcm9tICdvcyc7XHJcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xyXG5pbXBvcnQgeyBleGVjRmlsZVN5bmMsIGV4ZWNTeW5jIH0gZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XHJcblxyXG5jb25zdCBTRVJWSUNFX0lEID0gJzBjdHgtZGFlbW9uJztcclxuY29uc3QgU0VSVklDRV9ESVIgPSBwYXRoLmpvaW4ob3MuaG9tZWRpcigpLCAnLjBjdHgnLCAnc2VydmljZScpO1xyXG5jb25zdCBYTUxfVEVNUExBVEVfUEFUSCA9IHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsICcuLi8uLi8uLi9zY3JpcHRzL3NlcnZpY2Uvd2luZG93cy8wY3R4LWRhZW1vbi54bWwnKTtcclxuY29uc3QgSU5TVEFMTEVEX1hNTF9QQVRIID0gcGF0aC5qb2luKFNFUlZJQ0VfRElSLCBgJHtTRVJWSUNFX0lEfS54bWxgKTtcclxuY29uc3QgSU5TVEFMTEVEX0VYRV9QQVRIID0gcGF0aC5qb2luKFNFUlZJQ0VfRElSLCBgJHtTRVJWSUNFX0lEfS5leGVgKTtcclxuXHJcbi8vIFx1MjUwMFx1MjUwMFx1MjUwMCBIZWxwZXJzIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxyXG5cclxuZnVuY3Rpb24gZW5zdXJlU2VydmljZURpcigpOiB2b2lkIHtcclxuICAgIGlmICghZnMuZXhpc3RzU3luYyhTRVJWSUNFX0RJUikpIHtcclxuICAgICAgICBmcy5ta2RpclN5bmMoU0VSVklDRV9ESVIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiByZXNvbHZlTm9kZVBhdGgoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBwcm9jZXNzLmV4ZWNQYXRoO1xyXG59XHJcblxyXG5mdW5jdGlvbiByZXNvbHZlQ2xpRW50cnkoKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGNhbmRpZGF0ZXMgPSBbXHJcbiAgICAgICAgLy8gcHVibGlzaGVkIGluc3RhbGwgcGF0aDogY2xpIHBhY2thZ2Ugb3ducyBjb25uZWN0b3IgcnVudGltZSBlbnRyeVxyXG4gICAgICAgICgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRyeSB7IHJldHVybiByZXF1aXJlLnJlc29sdmUoJ0AwY3R4L2NsaS9kaXN0L2luZGV4LmpzJyk7IH0gY2F0Y2ggeyByZXR1cm4gJyc7IH1cclxuICAgICAgICB9KSgpLFxyXG4gICAgICAgIC8vIGxvY2FsIGRpc3Qgc2libGluZyBpbiB0aGlzIHBhY2thZ2VcclxuICAgICAgICBwYXRoLnJlc29sdmUoX19kaXJuYW1lLCAnaW5kZXguanMnKSxcclxuICAgICAgICAvLyBtb25vcmVwbyBmYWxsYmFja1xyXG4gICAgICAgIHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsICcuLicsICcuLicsICdjbGknLCAnZGlzdCcsICdpbmRleC5qcycpLFxyXG4gICAgICAgIHBhdGgucmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAncGFja2FnZXMnLCAnY2xpJywgJ2Rpc3QnLCAnaW5kZXguanMnKSxcclxuICAgIF0uZmlsdGVyKEJvb2xlYW4pO1xyXG5cclxuICAgIGZvciAoY29uc3QgYyBvZiBjYW5kaWRhdGVzKSB7XHJcbiAgICAgICAgaWYgKGZzLmV4aXN0c1N5bmMoYykpIHJldHVybiBjO1xyXG4gICAgfVxyXG4gICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICdDYW5ub3QgcmVzb2x2ZSBDTEkgZW50cnkgcG9pbnQuIFJ1biBgbnBtIHJ1biBidWlsZGAgb3IgaW5zdGFsbCBAMGN0eC9jbGkuJ1xyXG4gICAgKTtcclxufVxyXG5cclxuZnVuY3Rpb24gcmVzb2x2ZVdpblNXKCk6IHN0cmluZyB7XHJcbiAgICAvLyB3aW5zdyBucG0gcGFja2FnZSBwbGFjZXMgdGhlIGV4ZSBhdCBub2RlX21vZHVsZXMvLmJpbi93aW5zdy5leGUgb3Igd2luc3dcclxuICAgIGNvbnN0IGNhbmRpZGF0ZXMgPSBbXHJcbiAgICAgICAgcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgJy4uJywgJy4uJywgJy4uJywgJ25vZGVfbW9kdWxlcycsICcuYmluJywgJ3dpbnN3LmV4ZScpLFxyXG4gICAgICAgIHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsICcuLicsICcuLicsICcuLicsICdub2RlX21vZHVsZXMnLCAnLmJpbicsICd3aW5zdycpLFxyXG4gICAgICAgIC8vIGdsb2JhbCBucG0gYmluXHJcbiAgICAgICAgJ3dpbnN3JyxcclxuICAgIF07XHJcbiAgICBmb3IgKGNvbnN0IGMgb2YgY2FuZGlkYXRlcykge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChjICE9PSAnd2luc3cnICYmIGZzLmV4aXN0c1N5bmMoYykpIHJldHVybiBjO1xyXG4gICAgICAgIH0gY2F0Y2ggeyAvKiBza2lwICovIH1cclxuICAgIH1cclxuICAgIC8vIHRyeSBQQVRIXHJcbiAgICB0cnkge1xyXG4gICAgICAgIGV4ZWNGaWxlU3luYygnd2luc3cnLCBbJ3ZlcnNpb24nXSwgeyBzdGRpbzogJ3BpcGUnIH0pO1xyXG4gICAgICAgIHJldHVybiAnd2luc3cnO1xyXG4gICAgfSBjYXRjaCB7IC8qIG5vdCBpbiBQQVRIICovIH1cclxuXHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgJ3dpbnN3IG5vdCBmb3VuZC4gUnVuOiBucG0gaW5zdGFsbCAtZyB3aW5zdyAgb3IgIG5wbSBpbnN0YWxsIC0tc2F2ZS1vcHRpb25hbCB3aW5zdydcclxuICAgICk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJ1bldpblNXKHdpbnN3UGF0aDogc3RyaW5nLCBhcmdzOiBzdHJpbmdbXSk6IHZvaWQge1xyXG4gICAgZXhlY0ZpbGVTeW5jKHdpbnN3UGF0aCwgW0lOU1RBTExFRF9FWEVfUEFUSCwgLi4uYXJnc10sIHsgc3RkaW86ICdpbmhlcml0JyB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gc2NRdWVyeSgpOiBzdHJpbmcge1xyXG4gICAgdHJ5IHtcclxuICAgICAgICByZXR1cm4gZXhlY1N5bmMoYHNjIHF1ZXJ5IFwiJHtTRVJWSUNFX0lEfVwiYCwgeyBlbmNvZGluZzogJ3V0ZjgnIH0pO1xyXG4gICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xyXG4gICAgICAgIGNvbnN0IGVyciA9IGUgYXMgeyBzdGRvdXQ/OiBzdHJpbmcgfTtcclxuICAgICAgICByZXR1cm4gZXJyPy5zdGRvdXQgPz8gU3RyaW5nKGUpO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBwYXJzZVNjU3RhdGUob3V0cHV0OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgbWF0Y2ggPSBvdXRwdXQubWF0Y2goL1NUQVRFXFxzKjpcXHMqXFxkK1xccysoXFx3KykvKTtcclxuICAgIHJldHVybiBtYXRjaCA/IG1hdGNoWzFdIDogJ1VOS05PV04nO1xyXG59XHJcblxyXG5mdW5jdGlvbiByZXF1aXJlQWRtaW4oKTogdm9pZCB7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIGV4ZWNTeW5jKCduZXQgc2Vzc2lvbicsIHsgc3RkaW86ICdwaXBlJyB9KTtcclxuICAgIH0gY2F0Y2gge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAgICAgJ1RoaXMgY29tbWFuZCByZXF1aXJlcyBBZG1pbmlzdHJhdG9yIHByaXZpbGVnZXMuICcgK1xyXG4gICAgICAgICAgICAnUmUtcnVuIGluIGFuIGVsZXZhdGVkIHRlcm1pbmFsIChSdW4gYXMgQWRtaW5pc3RyYXRvcikuJ1xyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbn1cclxuXHJcbi8vIFx1MjUwMFx1MjUwMFx1MjUwMCBQdWJsaWMgQVBJIChjYWxsZWQgZnJvbSBDTEkgaW5kZXgudHMpIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGluc3RhbGxTZXJ2aWNlKCk6IHZvaWQge1xyXG4gICAgcmVxdWlyZUFkbWluKCk7XHJcbiAgICBlbnN1cmVTZXJ2aWNlRGlyKCk7XHJcblxyXG4gICAgY29uc3Qgbm9kZVBhdGggPSByZXNvbHZlTm9kZVBhdGgoKTtcclxuICAgIGNvbnN0IGNsaUVudHJ5ID0gcmVzb2x2ZUNsaUVudHJ5KCk7XHJcbiAgICBjb25zdCB3aW5zd1BhdGggPSByZXNvbHZlV2luU1coKTtcclxuXHJcbiAgICAvLyBDb3B5IHdpbnN3IGV4ZVxyXG4gICAgZnMuY29weUZpbGVTeW5jKHdpbnN3UGF0aC5lbmRzV2l0aCgnLmV4ZScpID8gd2luc3dQYXRoIDogd2luc3dQYXRoLCBJTlNUQUxMRURfRVhFX1BBVEgpO1xyXG5cclxuICAgIC8vIFdyaXRlIHN1YnN0aXR1dGVkIFhNTFxyXG4gICAgbGV0IHhtbCA9IGZzLnJlYWRGaWxlU3luYyhYTUxfVEVNUExBVEVfUEFUSCwgJ3V0ZjgnKTtcclxuICAgIHhtbCA9IHhtbC5yZXBsYWNlKC8lTk9ERV9QQVRIJS9nLCBub2RlUGF0aC5yZXBsYWNlKC9cXFxcL2csICdcXFxcXFxcXCcpKTtcclxuICAgIHhtbCA9IHhtbC5yZXBsYWNlKC8lQ0xJX0VOVFJZJS9nLCBjbGlFbnRyeS5yZXBsYWNlKC9cXFxcL2csICdcXFxcXFxcXCcpKTtcclxuICAgIGZzLndyaXRlRmlsZVN5bmMoSU5TVEFMTEVEX1hNTF9QQVRILCB4bWwsICd1dGY4Jyk7XHJcblxyXG4gICAgLy8gRW5zdXJlIGxvZyBkaXIgZXhpc3RzXHJcbiAgICBjb25zdCBsb2dEaXIgPSBwYXRoLmpvaW4ob3MuaG9tZWRpcigpLCAnLjBjdHgnLCAnbG9ncycpO1xyXG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKGxvZ0RpcikpIGZzLm1rZGlyU3luYyhsb2dEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xyXG5cclxuICAgIHJ1bldpblNXKElOU1RBTExFRF9FWEVfUEFUSCwgWydpbnN0YWxsJ10pO1xyXG4gICAgY29uc29sZS5sb2coYFNlcnZpY2UgJyR7U0VSVklDRV9JRH0nIGluc3RhbGxlZC5gKTtcclxuICAgIGNvbnNvbGUubG9nKGBOb2RlOiAke25vZGVQYXRofWApO1xyXG4gICAgY29uc29sZS5sb2coYENMSSBlbnRyeTogJHtjbGlFbnRyeX1gKTtcclxuICAgIGNvbnNvbGUubG9nKGBTZXJ2aWNlIGRpcjogJHtTRVJWSUNFX0RJUn1gKTtcclxuICAgIGNvbnNvbGUubG9nKCdSdW46IDBjdHggZGFlbW9uIHNlcnZpY2UgZW5hYmxlICBcdTIxOTIgIHRvIHNldCBhdXRvLXN0YXJ0Jyk7XHJcbiAgICBjb25zb2xlLmxvZygnUnVuOiAwY3R4IGRhZW1vbiBzZXJ2aWNlIHN0YXJ0ICAgXHUyMTkyICB0byBzdGFydCBpbW1lZGlhdGVseScpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZW5hYmxlU2VydmljZSgpOiB2b2lkIHtcclxuICAgIHJlcXVpcmVBZG1pbigpO1xyXG4gICAgZXhlY1N5bmMoYHNjIGNvbmZpZyBcIiR7U0VSVklDRV9JRH1cIiBzdGFydD0gYXV0b2AsIHsgc3RkaW86ICdpbmhlcml0JyB9KTtcclxuICAgIGNvbnNvbGUubG9nKGBTZXJ2aWNlICcke1NFUlZJQ0VfSUR9JyBzdGFydCB0eXBlIHNldCB0byBBdXRvbWF0aWMuYCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBkaXNhYmxlU2VydmljZSgpOiB2b2lkIHtcclxuICAgIHJlcXVpcmVBZG1pbigpO1xyXG4gICAgZXhlY1N5bmMoYHNjIGNvbmZpZyBcIiR7U0VSVklDRV9JRH1cIiBzdGFydD0gZGVtYW5kYCwgeyBzdGRpbzogJ2luaGVyaXQnIH0pO1xyXG4gICAgY29uc29sZS5sb2coYFNlcnZpY2UgJyR7U0VSVklDRV9JRH0nIHN0YXJ0IHR5cGUgc2V0IHRvIE1hbnVhbC5gKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHVuaW5zdGFsbFNlcnZpY2UoKTogdm9pZCB7XHJcbiAgICByZXF1aXJlQWRtaW4oKTtcclxuICAgIGlmICghZnMuZXhpc3RzU3luYyhJTlNUQUxMRURfRVhFX1BBVEgpKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTZXJ2aWNlIGV4ZSBub3QgZm91bmQgYXQgJHtJTlNUQUxMRURfRVhFX1BBVEh9LiBXYXMgaXQgaW5zdGFsbGVkP2ApO1xyXG4gICAgfVxyXG4gICAgcnVuV2luU1coSU5TVEFMTEVEX0VYRV9QQVRILCBbJ3VuaW5zdGFsbCddKTtcclxuICAgIGNvbnNvbGUubG9nKGBTZXJ2aWNlICcke1NFUlZJQ0VfSUR9JyB1bmluc3RhbGxlZC5gKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHN0YXR1c1NlcnZpY2UoKTogdm9pZCB7XHJcbiAgICBjb25zdCBvdXRwdXQgPSBzY1F1ZXJ5KCk7XHJcbiAgICBjb25zdCBzdGF0ZSA9IHBhcnNlU2NTdGF0ZShvdXRwdXQpO1xyXG4gICAgY29uc29sZS5sb2coYHNlcnZpY2U6ICR7U0VSVklDRV9JRH1gKTtcclxuICAgIGNvbnNvbGUubG9nKGBzdGF0ZTogICAke3N0YXRlfWApO1xyXG4gICAgY29uc29sZS5sb2coYGRpcjogICAgICR7U0VSVklDRV9ESVJ9YCk7XHJcbiAgICBjb25zb2xlLmxvZyhgeG1sOiAgICAgJHtJTlNUQUxMRURfWE1MX1BBVEh9YCk7XHJcbiAgICBjb25zb2xlLmxvZyhgbG9nOiAgICAgJHtwYXRoLmpvaW4ob3MuaG9tZWRpcigpLCAnLjBjdHgnLCAnbG9ncycpfWApO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRTZXJ2aWNlKCk6IHZvaWQge1xyXG4gICAgcmVxdWlyZUFkbWluKCk7XHJcbiAgICBleGVjU3luYyhgc2Mgc3RhcnQgXCIke1NFUlZJQ0VfSUR9XCJgLCB7IHN0ZGlvOiAnaW5oZXJpdCcgfSk7XHJcbiAgICBjb25zb2xlLmxvZyhgU2VydmljZSAnJHtTRVJWSUNFX0lEfScgc3RhcnQgY29tbWFuZCBpc3N1ZWQuYCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzdG9wU2VydmljZSgpOiB2b2lkIHtcclxuICAgIHJlcXVpcmVBZG1pbigpO1xyXG4gICAgZXhlY1N5bmMoYHNjIHN0b3AgXCIke1NFUlZJQ0VfSUR9XCJgLCB7IHN0ZGlvOiAnaW5oZXJpdCcgfSk7XHJcbiAgICBjb25zb2xlLmxvZyhgU2VydmljZSAnJHtTRVJWSUNFX0lEfScgc3RvcCBjb21tYW5kIGlzc3VlZC5gKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJlc3RhcnRTZXJ2aWNlKCk6IHZvaWQge1xyXG4gICAgcmVxdWlyZUFkbWluKCk7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIGV4ZWNTeW5jKGBzYyBzdG9wIFwiJHtTRVJWSUNFX0lEfVwiYCwgeyBzdGRpbzogJ3BpcGUnIH0pO1xyXG4gICAgfSBjYXRjaCB7IC8qIG1heSBhbHJlYWR5IGJlIHN0b3BwZWQgKi8gfVxyXG4gICAgLy8gQnJpZWYgcGF1c2UgdG8gYWxsb3cgdGhlIHNlcnZpY2UgdG8gc3RvcFxyXG4gICAgZXhlY1N5bmMoJ3RpbWVvdXQgL3QgMiAvbm9icmVhaycsIHsgc3RkaW86ICdwaXBlJyB9KTtcclxuICAgIGV4ZWNTeW5jKGBzYyBzdGFydCBcIiR7U0VSVklDRV9JRH1cImAsIHsgc3RkaW86ICdpbmhlcml0JyB9KTtcclxuICAgIGNvbnNvbGUubG9nKGBTZXJ2aWNlICcke1NFUlZJQ0VfSUR9JyByZXN0YXJ0ZWQuYCk7XHJcbn1cclxuIiwgImltcG9ydCBmcyBmcm9tICdmcyc7XHJcbmltcG9ydCBvcyBmcm9tICdvcyc7XHJcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xyXG5pbXBvcnQgeyBleGVjRmlsZVN5bmMsIGV4ZWNTeW5jIH0gZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XHJcblxyXG5jb25zdCBTRVJWSUNFX0xBQkVMID0gJ2NvbS4wY3R4LmRhZW1vbic7XHJcbmNvbnN0IFBMSVNUX1RFTVBMQVRFX1BBVEggPSBwYXRoLnJlc29sdmUoXHJcbiAgICBfX2Rpcm5hbWUsICcuLi8uLi8uLi9zY3JpcHRzL3NlcnZpY2UvbWFjb3MvY29tLjBjdHguZGFlbW9uLnBsaXN0J1xyXG4pO1xyXG5jb25zdCBMQVVOQ0hfQUdFTlRTX0RJUiA9IHBhdGguam9pbihvcy5ob21lZGlyKCksICdMaWJyYXJ5JywgJ0xhdW5jaEFnZW50cycpO1xyXG5jb25zdCBJTlNUQUxMRURfUExJU1QgPSBwYXRoLmpvaW4oTEFVTkNIX0FHRU5UU19ESVIsIGAke1NFUlZJQ0VfTEFCRUx9LnBsaXN0YCk7XHJcblxyXG4vLyBcdTI1MDBcdTI1MDBcdTI1MDAgSGVscGVycyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcclxuXHJcbmZ1bmN0aW9uIHJlc29sdmVOb2RlUGF0aCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHByb2Nlc3MuZXhlY1BhdGg7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlc29sdmVDbGlFbnRyeSgpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgY2FuZGlkYXRlcyA9IFtcclxuICAgICAgICAoKCkgPT4geyB0cnkgeyByZXR1cm4gcmVxdWlyZS5yZXNvbHZlKCdAMGN0eC9jbGkvZGlzdC9pbmRleC5qcycpOyB9IGNhdGNoIHsgcmV0dXJuICcnOyB9IH0pKCksXHJcbiAgICAgICAgcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgJ2luZGV4LmpzJyksXHJcbiAgICAgICAgcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgJy4uJywgJy4uJywgJ2NsaScsICdkaXN0JywgJ2luZGV4LmpzJyksXHJcbiAgICAgICAgcGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCksICdwYWNrYWdlcycsICdjbGknLCAnZGlzdCcsICdpbmRleC5qcycpLFxyXG4gICAgXS5maWx0ZXIoQm9vbGVhbik7XHJcblxyXG4gICAgZm9yIChjb25zdCBjIG9mIGNhbmRpZGF0ZXMpIHtcclxuICAgICAgICBpZiAoZnMuZXhpc3RzU3luYyhjKSkgcmV0dXJuIGM7XHJcbiAgICB9XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgJ0Nhbm5vdCByZXNvbHZlIENMSSBlbnRyeSBwb2ludC4gUnVuIGBucG0gcnVuIGJ1aWxkYCBvciBpbnN0YWxsIEAwY3R4L2NsaS4nXHJcbiAgICApO1xyXG59XHJcblxyXG5mdW5jdGlvbiBlbnN1cmVMb2dEaXIoKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGxvZ0RpciA9IHBhdGguam9pbihvcy5ob21lZGlyKCksICcuMGN0eCcsICdsb2dzJyk7XHJcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMobG9nRGlyKSkgZnMubWtkaXJTeW5jKGxvZ0RpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XHJcbiAgICByZXR1cm4gbG9nRGlyO1xyXG59XHJcblxyXG5mdW5jdGlvbiBsYXVuY2hjdGwoLi4uYXJnczogc3RyaW5nW10pOiB2b2lkIHtcclxuICAgIGV4ZWNGaWxlU3luYygnbGF1bmNoY3RsJywgYXJncywgeyBzdGRpbzogJ2luaGVyaXQnIH0pO1xyXG59XHJcblxyXG4vLyBcdTI1MDBcdTI1MDBcdTI1MDAgUHVibGljIEFQSSBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpbnN0YWxsU2VydmljZSgpOiB2b2lkIHtcclxuICAgIGlmICghZnMuZXhpc3RzU3luYyhMQVVOQ0hfQUdFTlRTX0RJUikpIHtcclxuICAgICAgICBmcy5ta2RpclN5bmMoTEFVTkNIX0FHRU5UU19ESVIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IG5vZGVQYXRoID0gcmVzb2x2ZU5vZGVQYXRoKCk7XHJcbiAgICBjb25zdCBjbGlFbnRyeSA9IHJlc29sdmVDbGlFbnRyeSgpO1xyXG4gICAgY29uc3QgbG9nRGlyID0gZW5zdXJlTG9nRGlyKCk7XHJcblxyXG4gICAgbGV0IHBsaXN0ID0gZnMucmVhZEZpbGVTeW5jKFBMSVNUX1RFTVBMQVRFX1BBVEgsICd1dGY4Jyk7XHJcbiAgICBwbGlzdCA9IHBsaXN0LnJlcGxhY2UoLyVOT0RFX1BBVEglL2csIG5vZGVQYXRoKTtcclxuICAgIHBsaXN0ID0gcGxpc3QucmVwbGFjZSgvJUNMSV9FTlRSWSUvZywgY2xpRW50cnkpO1xyXG4gICAgcGxpc3QgPSBwbGlzdC5yZXBsYWNlKC8lTE9HX0RJUiUvZywgbG9nRGlyKTtcclxuXHJcbiAgICBmcy53cml0ZUZpbGVTeW5jKElOU1RBTExFRF9QTElTVCwgcGxpc3QsICd1dGY4Jyk7XHJcbiAgICBsYXVuY2hjdGwoJ2xvYWQnLCAnLXcnLCBJTlNUQUxMRURfUExJU1QpO1xyXG5cclxuICAgIGNvbnNvbGUubG9nKGBTZXJ2aWNlICcke1NFUlZJQ0VfTEFCRUx9JyBpbnN0YWxsZWQgYW5kIGxvYWRlZC5gKTtcclxuICAgIGNvbnNvbGUubG9nKGBOb2RlOiAgICR7bm9kZVBhdGh9YCk7XHJcbiAgICBjb25zb2xlLmxvZyhgRW50cnk6ICAke2NsaUVudHJ5fWApO1xyXG4gICAgY29uc29sZS5sb2coYFBsaXN0OiAgJHtJTlNUQUxMRURfUExJU1R9YCk7XHJcbiAgICBjb25zb2xlLmxvZyhgTG9nczogICAke2xvZ0Rpcn1gKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGVuYWJsZVNlcnZpY2UoKTogdm9pZCB7XHJcbiAgICAvLyBMb2FkIHdpdGggLXcgd3JpdGVzIHRoZSBEaXNhYmxlZD1mYWxzZSBrZXkgXHUyMTkyIHN1cnZpdmVzIHJlYm9vdFxyXG4gICAgbGF1bmNoY3RsKCdsb2FkJywgJy13JywgSU5TVEFMTEVEX1BMSVNUKTtcclxuICAgIGNvbnNvbGUubG9nKGBTZXJ2aWNlICcke1NFUlZJQ0VfTEFCRUx9JyBlbmFibGVkIChhdXRvLXN0YXJ0IG9uIGxvZ2luKS5gKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGRpc2FibGVTZXJ2aWNlKCk6IHZvaWQge1xyXG4gICAgLy8gVW5sb2FkIHdpdGggLXcgd3JpdGVzIERpc2FibGVkPXRydWUgXHUyMTkyIHN1cnZpdmVzIHJlYm9vdCB3aXRob3V0IHJlbW92aW5nIHBsaXN0XHJcbiAgICBsYXVuY2hjdGwoJ3VubG9hZCcsICctdycsIElOU1RBTExFRF9QTElTVCk7XHJcbiAgICBjb25zb2xlLmxvZyhgU2VydmljZSAnJHtTRVJWSUNFX0xBQkVMfScgZGlzYWJsZWQgKHdpbGwgbm90IGF1dG8tc3RhcnQpLmApO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gdW5pbnN0YWxsU2VydmljZSgpOiB2b2lkIHtcclxuICAgIGlmIChmcy5leGlzdHNTeW5jKElOU1RBTExFRF9QTElTVCkpIHtcclxuICAgICAgICB0cnkgeyBsYXVuY2hjdGwoJ3VubG9hZCcsIElOU1RBTExFRF9QTElTVCk7IH0gY2F0Y2ggeyAvKiBtYXkgbm90IGJlIGxvYWRlZCAqLyB9XHJcbiAgICAgICAgZnMudW5saW5rU3luYyhJTlNUQUxMRURfUExJU1QpO1xyXG4gICAgfVxyXG4gICAgY29uc29sZS5sb2coYFNlcnZpY2UgJyR7U0VSVklDRV9MQUJFTH0nIHVuaW5zdGFsbGVkLmApO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc3RhdHVzU2VydmljZSgpOiB2b2lkIHtcclxuICAgIGNvbnNvbGUubG9nKGBzZXJ2aWNlOiAke1NFUlZJQ0VfTEFCRUx9YCk7XHJcbiAgICBjb25zb2xlLmxvZyhgcGxpc3Q6ICAgJHtJTlNUQUxMRURfUExJU1R9YCk7XHJcbiAgICBjb25zb2xlLmxvZyhgaW5zdGFsbGVkOiAke2ZzLmV4aXN0c1N5bmMoSU5TVEFMTEVEX1BMSVNUKX1gKTtcclxuICAgIGNvbnNvbGUubG9nKGBsb2dzOiAgICAke3BhdGguam9pbihvcy5ob21lZGlyKCksICcuMGN0eCcsICdsb2dzJyl9YCk7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIGV4ZWNTeW5jKGBsYXVuY2hjdGwgcHJpbnQgZ3VpLyQoaWQgLXUpLyR7U0VSVklDRV9MQUJFTH1gLCB7IHN0ZGlvOiAnaW5oZXJpdCcgfSk7XHJcbiAgICB9IGNhdGNoIHtcclxuICAgICAgICBjb25zb2xlLmxvZygnc3RhdGU6ICAgbm90IGxvYWRlZCAocnVuOiAwY3R4IGRhZW1vbiBzZXJ2aWNlIGluc3RhbGwpJyk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzdGFydFNlcnZpY2UoKTogdm9pZCB7XHJcbiAgICBsYXVuY2hjdGwoJ3N0YXJ0JywgU0VSVklDRV9MQUJFTCk7XHJcbiAgICBjb25zb2xlLmxvZyhgU2VydmljZSAnJHtTRVJWSUNFX0xBQkVMfScgc3RhcnQgY29tbWFuZCBpc3N1ZWQuYCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzdG9wU2VydmljZSgpOiB2b2lkIHtcclxuICAgIGxhdW5jaGN0bCgnc3RvcCcsIFNFUlZJQ0VfTEFCRUwpO1xyXG4gICAgY29uc29sZS5sb2coYFNlcnZpY2UgJyR7U0VSVklDRV9MQUJFTH0nIHN0b3AgY29tbWFuZCBpc3N1ZWQuYCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByZXN0YXJ0U2VydmljZSgpOiB2b2lkIHtcclxuICAgIHRyeSB7IGxhdW5jaGN0bCgnc3RvcCcsIFNFUlZJQ0VfTEFCRUwpOyB9IGNhdGNoIHsgLyogbWF5IGFscmVhZHkgYmUgc3RvcHBlZCAqLyB9XHJcbiAgICBsYXVuY2hjdGwoJ3N0YXJ0JywgU0VSVklDRV9MQUJFTCk7XHJcbiAgICBjb25zb2xlLmxvZyhgU2VydmljZSAnJHtTRVJWSUNFX0xBQkVMfScgcmVzdGFydGVkLmApO1xyXG59XHJcbiIsICJpbXBvcnQgZnMgZnJvbSAnZnMnO1xyXG5pbXBvcnQgb3MgZnJvbSAnb3MnO1xyXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcclxuaW1wb3J0IHsgZXhlY1N5bmMgfSBmcm9tICdjaGlsZF9wcm9jZXNzJztcclxuXHJcbmNvbnN0IFNFUlZJQ0VfTkFNRSA9ICcwY3R4LWRhZW1vbic7XHJcbmNvbnN0IFVOSVRfVEVNUExBVEVfUEFUSCA9IHBhdGgucmVzb2x2ZShcclxuICAgIF9fZGlybmFtZSwgJy4uLy4uLy4uL3NjcmlwdHMvc2VydmljZS9saW51eC8wY3R4LWRhZW1vbi5zZXJ2aWNlJ1xyXG4pO1xyXG5jb25zdCBTWVNURU1EX1VTRVJfRElSID0gcGF0aC5qb2luKG9zLmhvbWVkaXIoKSwgJy5jb25maWcnLCAnc3lzdGVtZCcsICd1c2VyJyk7XHJcbmNvbnN0IElOU1RBTExFRF9VTklUID0gcGF0aC5qb2luKFNZU1RFTURfVVNFUl9ESVIsIGAke1NFUlZJQ0VfTkFNRX0uc2VydmljZWApO1xyXG5cclxuLy8gXHUyNTAwXHUyNTAwXHUyNTAwIEhlbHBlcnMgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHJcblxyXG5mdW5jdGlvbiByZXNvbHZlTm9kZVBhdGgoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBwcm9jZXNzLmV4ZWNQYXRoO1xyXG59XHJcblxyXG5mdW5jdGlvbiByZXNvbHZlQ2xpRW50cnkoKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGNhbmRpZGF0ZXMgPSBbXHJcbiAgICAgICAgKCgpID0+IHsgdHJ5IHsgcmV0dXJuIHJlcXVpcmUucmVzb2x2ZSgnQDBjdHgvY2xpL2Rpc3QvaW5kZXguanMnKTsgfSBjYXRjaCB7IHJldHVybiAnJzsgfSB9KSgpLFxyXG4gICAgICAgIHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsICdpbmRleC5qcycpLFxyXG4gICAgICAgIHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsICcuLicsICcuLicsICdjbGknLCAnZGlzdCcsICdpbmRleC5qcycpLFxyXG4gICAgICAgIHBhdGgucmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAncGFja2FnZXMnLCAnY2xpJywgJ2Rpc3QnLCAnaW5kZXguanMnKSxcclxuICAgIF0uZmlsdGVyKEJvb2xlYW4pO1xyXG5cclxuICAgIGZvciAoY29uc3QgYyBvZiBjYW5kaWRhdGVzKSB7XHJcbiAgICAgICAgaWYgKGZzLmV4aXN0c1N5bmMoYykpIHJldHVybiBjO1xyXG4gICAgfVxyXG4gICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICdDYW5ub3QgcmVzb2x2ZSBDTEkgZW50cnkgcG9pbnQuIFJ1biBgbnBtIHJ1biBidWlsZGAgb3IgaW5zdGFsbCBAMGN0eC9jbGkuJ1xyXG4gICAgKTtcclxufVxyXG5cclxuZnVuY3Rpb24gc3lzdGVtY3RsKC4uLmFyZ3M6IHN0cmluZ1tdKTogdm9pZCB7XHJcbiAgICBleGVjU3luYyhgc3lzdGVtY3RsIC0tdXNlciAke2FyZ3Muam9pbignICcpfWAsIHsgc3RkaW86ICdpbmhlcml0JyB9KTtcclxufVxyXG5cclxuLy8gXHUyNTAwXHUyNTAwXHUyNTAwIFB1YmxpYyBBUEkgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaW5zdGFsbFNlcnZpY2UoKTogdm9pZCB7XHJcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMoU1lTVEVNRF9VU0VSX0RJUikpIHtcclxuICAgICAgICBmcy5ta2RpclN5bmMoU1lTVEVNRF9VU0VSX0RJUiwgeyByZWN1cnNpdmU6IHRydWUgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgbm9kZVBhdGggPSByZXNvbHZlTm9kZVBhdGgoKTtcclxuICAgIGNvbnN0IGNsaUVudHJ5ID0gcmVzb2x2ZUNsaUVudHJ5KCk7XHJcblxyXG4gICAgbGV0IHVuaXQgPSBmcy5yZWFkRmlsZVN5bmMoVU5JVF9URU1QTEFURV9QQVRILCAndXRmOCcpO1xyXG4gICAgdW5pdCA9IHVuaXQucmVwbGFjZSgvJU5PREVfUEFUSCUvZywgbm9kZVBhdGgpO1xyXG4gICAgdW5pdCA9IHVuaXQucmVwbGFjZSgvJUNMSV9FTlRSWSUvZywgY2xpRW50cnkpO1xyXG5cclxuICAgIGZzLndyaXRlRmlsZVN5bmMoSU5TVEFMTEVEX1VOSVQsIHVuaXQsICd1dGY4Jyk7XHJcbiAgICBzeXN0ZW1jdGwoJ2RhZW1vbi1yZWxvYWQnKTtcclxuXHJcbiAgICBjb25zb2xlLmxvZyhgVW5pdCAnJHtTRVJWSUNFX05BTUV9LnNlcnZpY2UnIGluc3RhbGxlZC5gKTtcclxuICAgIGNvbnNvbGUubG9nKGBOb2RlOiAgJHtub2RlUGF0aH1gKTtcclxuICAgIGNvbnNvbGUubG9nKGBFbnRyeTogJHtjbGlFbnRyeX1gKTtcclxuICAgIGNvbnNvbGUubG9nKGBVbml0OiAgJHtJTlNUQUxMRURfVU5JVH1gKTtcclxuICAgIGNvbnNvbGUubG9nKCdSdW46IDBjdHggZGFlbW9uIHNlcnZpY2UgZW5hYmxlICBcdTIxOTIgIHRvIHNldCBhdXRvLXN0YXJ0Jyk7XHJcbiAgICBjb25zb2xlLmxvZygnUnVuOiAwY3R4IGRhZW1vbiBzZXJ2aWNlIHN0YXJ0ICAgXHUyMTkyICB0byBzdGFydCBpbW1lZGlhdGVseScpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZW5hYmxlU2VydmljZSgpOiB2b2lkIHtcclxuICAgIHN5c3RlbWN0bCgnZW5hYmxlJywgU0VSVklDRV9OQU1FKTtcclxuICAgIGNvbnNvbGUubG9nKGBTZXJ2aWNlICcke1NFUlZJQ0VfTkFNRX0nIGVuYWJsZWQgKGF1dG8tc3RhcnQgb24gbG9naW4pLmApO1xyXG4gICAgY29uc29sZS5sb2coJ1RpcDogcnVuIGBsb2dpbmN0bCBlbmFibGUtbGluZ2VyICRVU0VSYCBmb3Igc3RhcnQtYXQtYm9vdCB3aXRob3V0IGxvZ2luLicpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZGlzYWJsZVNlcnZpY2UoKTogdm9pZCB7XHJcbiAgICBzeXN0ZW1jdGwoJ2Rpc2FibGUnLCBTRVJWSUNFX05BTUUpO1xyXG4gICAgY29uc29sZS5sb2coYFNlcnZpY2UgJyR7U0VSVklDRV9OQU1FfScgZGlzYWJsZWQgKHdpbGwgbm90IGF1dG8tc3RhcnQpLmApO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gdW5pbnN0YWxsU2VydmljZSgpOiB2b2lkIHtcclxuICAgIHRyeSB7IHN5c3RlbWN0bCgnc3RvcCcsIFNFUlZJQ0VfTkFNRSk7IH0gY2F0Y2ggeyAvKiBtYXkgbm90IGJlIHJ1bm5pbmcgKi8gfVxyXG4gICAgdHJ5IHsgc3lzdGVtY3RsKCdkaXNhYmxlJywgU0VSVklDRV9OQU1FKTsgfSBjYXRjaCB7IC8qIG1heSBub3QgYmUgZW5hYmxlZCAqLyB9XHJcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhJTlNUQUxMRURfVU5JVCkpIHtcclxuICAgICAgICBmcy51bmxpbmtTeW5jKElOU1RBTExFRF9VTklUKTtcclxuICAgIH1cclxuICAgIHRyeSB7IHN5c3RlbWN0bCgnZGFlbW9uLXJlbG9hZCcpOyB9IGNhdGNoIHsgLyogYmVzdCBlZmZvcnQgKi8gfVxyXG4gICAgY29uc29sZS5sb2coYFVuaXQgJyR7U0VSVklDRV9OQU1FfS5zZXJ2aWNlJyB1bmluc3RhbGxlZC5gKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHN0YXR1c1NlcnZpY2UoKTogdm9pZCB7XHJcbiAgICBjb25zb2xlLmxvZyhgc2VydmljZTogJHtTRVJWSUNFX05BTUV9YCk7XHJcbiAgICBjb25zb2xlLmxvZyhgdW5pdDogICAgJHtJTlNUQUxMRURfVU5JVH1gKTtcclxuICAgIGNvbnNvbGUubG9nKGBpbnN0YWxsZWQ6ICR7ZnMuZXhpc3RzU3luYyhJTlNUQUxMRURfVU5JVCl9YCk7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIHN5c3RlbWN0bCgnc3RhdHVzJywgU0VSVklDRV9OQU1FKTtcclxuICAgIH0gY2F0Y2gge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdzdGF0ZTogICBub3QgYWN0aXZlIChydW46IDBjdHggZGFlbW9uIHNlcnZpY2UgaW5zdGFsbCAmJiAwY3R4IGRhZW1vbiBzZXJ2aWNlIHN0YXJ0KScpO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRTZXJ2aWNlKCk6IHZvaWQge1xyXG4gICAgc3lzdGVtY3RsKCdzdGFydCcsIFNFUlZJQ0VfTkFNRSk7XHJcbiAgICBjb25zb2xlLmxvZyhgU2VydmljZSAnJHtTRVJWSUNFX05BTUV9JyBzdGFydGVkLmApO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc3RvcFNlcnZpY2UoKTogdm9pZCB7XHJcbiAgICBzeXN0ZW1jdGwoJ3N0b3AnLCBTRVJWSUNFX05BTUUpO1xyXG4gICAgY29uc29sZS5sb2coYFNlcnZpY2UgJyR7U0VSVklDRV9OQU1FfScgc3RvcHBlZC5gKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJlc3RhcnRTZXJ2aWNlKCk6IHZvaWQge1xyXG4gICAgc3lzdGVtY3RsKCdyZXN0YXJ0JywgU0VSVklDRV9OQU1FKTtcclxuICAgIGNvbnNvbGUubG9nKGBTZXJ2aWNlICcke1NFUlZJQ0VfTkFNRX0nIHJlc3RhcnRlZC5gKTtcclxufVxyXG4iLCAiLyoqXHJcbiAqIEFVVEgtMDE6IENMSS1zaWRlIGRldmljZSBjb2RlIGF1dGggKFJGQyA4NjI4KVxyXG4gKlxyXG4gKiBUb2tlbiBzdG9yZSAoU0VDLTAyIHByaW9yaXR5IG9yZGVyKTpcclxuICogICAxLiBDVFhfQVVUSF9UT0tFTiBlbnYgdmFyIChTRUMtMDEpXHJcbiAqICAgMi4gT1Mga2V5cmluZyAobWFjT1MgS2V5Y2hhaW4gLyBXaW5kb3dzIENyZWRlbnRpYWwgTWFuYWdlciAvIExpbnV4IFNlY3JldCBTZXJ2aWNlKVxyXG4gKiAgIDMuIH4vLjBjdHgvYXV0aC5qc29uIGZhbGxiYWNrICgwbzYwMCkgXHUyMDE0IG9yIGZvcmNlZCB2aWEgLS1pbnNlY3VyZS1zdG9yYWdlXHJcbiAqXHJcbiAqIEF1dGggc2VydmVyOiBDVFhfQVVUSF9TRVJWRVIgZW52IHZhciAoZGVmYXVsdDogaHR0cHM6Ly8wY3R4LmNvbSlcclxuICpcclxuICogVGhlIENMSSB0YWxrcyB0byB0aGUgMGN0eC5jb20gQkZGIHByb3h5IHJvdXRlcyAobm90IEF1dGgwIGRpcmVjdGx5KTpcclxuICogICBQT1NUIHthdXRoU2VydmVyfS9hcGkvdjEvYXV0aC9kZXZpY2UgICAgICAgICBcdTIxOTIgaW5pdGlhdGUgZGV2aWNlIGNvZGVcclxuICogICBQT1NUIHthdXRoU2VydmVyfS9hcGkvdjEvYXV0aC9kZXZpY2UvdG9rZW4gICBcdTIxOTIgcG9sbCBmb3IgdG9rZW5zXHJcbiAqICAgUE9TVCB7YXV0aFNlcnZlcn0vYXBpL3YxL2F1dGgvZGV2aWNlL3JlZnJlc2ggXHUyMTkyIHJlZnJlc2ggYWNjZXNzIHRva2VuXHJcbiAqICAgUE9TVCB7YXV0aFNlcnZlcn0vYXBpL3YxL2F1dGgvZGV2aWNlL3Jldm9rZSAgXHUyMTkyIHJldm9rZSByZWZyZXNoIHRva2VuXHJcbiAqXHJcbiAqIEFsbCByZXF1ZXN0cy9yZXNwb25zZXMgYXJlIEpTT04gKG5vdCBmb3JtLWVuY29kZWQpLlxyXG4gKiBBbGwgcHJveHkgcmVzcG9uc2VzIHVzZSBjYW1lbENhc2U7IG1hcHBlZCB0byBzbmFrZV9jYXNlIHR5cGVzIGxvY2FsbHkuXHJcbiAqL1xyXG5cclxuaW1wb3J0IGZzIGZyb20gJ2ZzJztcclxuaW1wb3J0IG9zIGZyb20gJ29zJztcclxuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XHJcbmltcG9ydCBodHRwcyBmcm9tICdodHRwcyc7XHJcbmltcG9ydCBodHRwIGZyb20gJ2h0dHAnO1xyXG5pbXBvcnQgeyBleGVjU3luYyB9IGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xyXG5pbXBvcnQgeyBzdG9yZVRvS2V5cmluZywgcmVhZEZyb21LZXlyaW5nLCBkZWxldGVGcm9tS2V5cmluZyB9IGZyb20gJy4va2V5cmluZy5qcyc7XHJcbmltcG9ydCB7IGdldENvbmZpZ1ZhbHVlLCBzYXZlQ29uZmlnIH0gZnJvbSAnQDBjdHgvY29yZSc7XHJcblxyXG4vLyBcdTI1MDBcdTI1MDBcdTI1MDAgQ29uZmlnIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxyXG5cclxuY29uc3QgREVGQVVMVF9BVVRIX1NFUlZFUiA9ICdodHRwczovLzBjdHguY29tJztcclxuY29uc3QgREVGQVVMVF9TQ09QRSA9ICdvcGVuaWQgcHJvZmlsZSBlbWFpbCBvZmZsaW5lX2FjY2Vzcyc7XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgdG9rZW4gZmlsZSBwYXRoLlxyXG4gKiBPdmVycmlkZSB3aXRoIENUWF9BVVRIX0ZJTEUgZW52IHZhciBmb3IgdGVzdGluZyBvciBub24tc3RhbmRhcmQgaW5zdGFsbHMuXHJcbiAqIFJlLWV2YWx1YXRlZCBvbiBlYWNoIGNhbGwgc28gdGVzdHMgY2FuIG92ZXJyaWRlIHByb2Nlc3MuZW52IGF0IHJ1bnRpbWUuXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRUb2tlbkZpbGVQYXRoKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gcHJvY2Vzcy5lbnYuQ1RYX0FVVEhfRklMRSA/PyBwYXRoLmpvaW4ob3MuaG9tZWRpcigpLCAnLjBjdHgnLCAnYXV0aC5qc29uJyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldEF1dGhTZXJ2ZXIoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBnZXRDb25maWdWYWx1ZSgnYXV0aC5zZXJ2ZXInKS5yZXBsYWNlKC9cXC8kLywgJycpO1xyXG59XHJcblxyXG4vLyBcdTI1MDBcdTI1MDBcdTI1MDAgVHlwZXMgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFRva2VuU3RvcmUge1xyXG4gICAgYWNjZXNzVG9rZW46IHN0cmluZztcclxuICAgIHJlZnJlc2hUb2tlbjogc3RyaW5nO1xyXG4gICAgZXhwaXJlc0F0OiBudW1iZXI7ICAgICAvLyBVbml4IG1zXHJcbiAgICBlbWFpbDogc3RyaW5nO1xyXG4gICAgdGVuYW50SWQ6IHN0cmluZztcclxufVxyXG5cclxuLy8gSW50ZXJuYWwgc25ha2VfY2FzZSB0eXBlcyAoUkZDIDg2MjggbmFtZXMga2VwdCBmb3IgcmVhZGFiaWxpdHkgaW5zaWRlIHRoaXMgbW9kdWxlKVxyXG5pbnRlcmZhY2UgRGV2aWNlQ29kZVJlc3BvbnNlIHtcclxuICAgIGRldmljZV9jb2RlOiBzdHJpbmc7XHJcbiAgICB1c2VyX2NvZGU6IHN0cmluZztcclxuICAgIHZlcmlmaWNhdGlvbl91cmk6IHN0cmluZztcclxuICAgIHZlcmlmaWNhdGlvbl91cmlfY29tcGxldGU/OiBzdHJpbmc7XHJcbiAgICBleHBpcmVzX2luOiBudW1iZXI7ICAgIC8vIHNlY29uZHNcclxuICAgIGludGVydmFsOiBudW1iZXI7ICAgICAgLy8gc2Vjb25kc1xyXG59XHJcblxyXG5pbnRlcmZhY2UgVG9rZW5SZXNwb25zZSB7XHJcbiAgICBhY2Nlc3NfdG9rZW46IHN0cmluZztcclxuICAgIHJlZnJlc2hfdG9rZW46IHN0cmluZztcclxuICAgIGV4cGlyZXNfaW46IG51bWJlcjsgICAgLy8gc2Vjb25kc1xyXG4gICAgdG9rZW5fdHlwZTogc3RyaW5nO1xyXG4gICAgZW1haWw/OiBzdHJpbmc7XHJcbiAgICB0ZW5hbnRfaWQ/OiBzdHJpbmc7XHJcbn1cclxuXHJcbmludGVyZmFjZSBUb2tlbkVycm9yUmVzcG9uc2Uge1xyXG4gICAgZXJyb3I6IHN0cmluZztcclxuICAgIGVycm9yX2Rlc2NyaXB0aW9uPzogc3RyaW5nO1xyXG59XHJcblxyXG4vLyBQcm94eSBCRkYgcmVzcG9uc2Ugc2hhcGVzIChjYW1lbENhc2UgXHUyMDE0IHdoYXQgMGN0eC5jb20gcmV0dXJucylcclxuaW50ZXJmYWNlIEJmZkVycm9yIHtcclxuICAgIGNvZGU6IHN0cmluZztcclxuICAgIG1lc3NhZ2U6IHN0cmluZztcclxuICAgIHJldHJ5YWJsZT86IGJvb2xlYW47XHJcbiAgICBjb3JyZWxhdGlvbklkPzogc3RyaW5nO1xyXG59XHJcblxyXG4vKiogRXh0cmFjdCBhIHJlYWRhYmxlIG1lc3NhZ2UgZnJvbSBlaXRoZXIgQkZGIGVycm9yIHNoYXBlLiAqL1xyXG5mdW5jdGlvbiBiZmZFcnJvck1lc3NhZ2UoZXJyb3I6IEJmZkVycm9yIHwgc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcclxuICAgIGlmICghZXJyb3IpIHJldHVybiAndW5rbm93biBlcnJvcic7XHJcbiAgICBpZiAodHlwZW9mIGVycm9yID09PSAnc3RyaW5nJykgcmV0dXJuIGVycm9yO1xyXG4gICAgcmV0dXJuIGVycm9yLm1lc3NhZ2UgPz8gZXJyb3IuY29kZSA/PyAndW5rbm93biBlcnJvcic7XHJcbn1cclxuXHJcbi8qKiBFeHRyYWN0IHRoZSBlcnJvciBjb2RlIGZvciBwb2xsaW5nIHN0YXRlIGNvbXBhcmlzb25zLiAqL1xyXG5mdW5jdGlvbiBiZmZFcnJvckNvZGUoZXJyb3I6IEJmZkVycm9yIHwgc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgIGlmICghZXJyb3IpIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICBpZiAodHlwZW9mIGVycm9yID09PSAnc3RyaW5nJykgcmV0dXJuIGVycm9yO1xyXG4gICAgcmV0dXJuIGVycm9yLmNvZGU7XHJcbn1cclxuXHJcbmludGVyZmFjZSBCZmZEZXZpY2VDb2RlUmVzcG9uc2Uge1xyXG4gICAgZGV2aWNlQ29kZTogc3RyaW5nO1xyXG4gICAgdXNlckNvZGU6IHN0cmluZztcclxuICAgIHZlcmlmaWNhdGlvblVyaTogc3RyaW5nO1xyXG4gICAgdmVyaWZpY2F0aW9uVXJpQ29tcGxldGU/OiBzdHJpbmc7XHJcbiAgICBleHBpcmVzSW46IG51bWJlcjtcclxuICAgIGludGVydmFsOiBudW1iZXI7XHJcbiAgICAvLyBCRkYgYWx3YXlzIHVzZXMgb2JqZWN0IGVycm9ycyBmb3IgdGhpcyBlbmRwb2ludFxyXG4gICAgZXJyb3I/OiBCZmZFcnJvcjtcclxufVxyXG5cclxuaW50ZXJmYWNlIEJmZlRva2VuUmVzcG9uc2Uge1xyXG4gICAgYWNjZXNzVG9rZW4/OiBzdHJpbmc7XHJcbiAgICByZWZyZXNoVG9rZW4/OiBzdHJpbmcgfCBudWxsO1xyXG4gICAgaWRUb2tlbj86IHN0cmluZyB8IG51bGw7XHJcbiAgICB0b2tlblR5cGU/OiBzdHJpbmc7XHJcbiAgICBleHBpcmVzSW4/OiBudW1iZXI7XHJcbiAgICBlbWFpbD86IHN0cmluZyB8IG51bGw7XHJcbiAgICB0ZW5hbnRJZD86IHN0cmluZyB8IG51bGw7XHJcbiAgICAvLyBQb2xsaW5nIHBhc3N0aHJvdWdoIGVycm9ycyAoXCJhdXRob3JpemF0aW9uX3BlbmRpbmdcIiBldGMuKSBhcmUgcGxhaW4gc3RyaW5ncy5cclxuICAgIC8vIEJGRiBoYXJkIGVycm9ycyAoZGV2aWNlX2F1dGhfdXBzdHJlYW1fZXJyb3IgZXRjLikgYXJlIEJmZkVycm9yIG9iamVjdHMuXHJcbiAgICBlcnJvcj86IEJmZkVycm9yIHwgc3RyaW5nO1xyXG4gICAgZXJyb3JEZXNjcmlwdGlvbj86IHN0cmluZztcclxufVxyXG5cclxuLy8gXHUyNTAwXHUyNTAwXHUyNTAwIFRva2VuIHN0b3JlIEkvTyAoU0VDLTAyOiBrZXlyaW5nLWZpcnN0LCBmaWxlLWZhbGxiYWNrKSBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcclxuXHJcbi8qKiBSZWFkIGZyb20gZmlsZSBvbmx5IChzeW5jIGZhbGxiYWNrKS4gKi9cclxuZnVuY3Rpb24gcmVhZFRva2VuRmlsZSgpOiBUb2tlblN0b3JlIHwgbnVsbCB7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IGYgPSBnZXRUb2tlbkZpbGVQYXRoKCk7XHJcbiAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKGYpKSByZXR1cm4gbnVsbDtcclxuICAgICAgICBjb25zdCByYXcgPSBmcy5yZWFkRmlsZVN5bmMoZiwgJ3V0ZjgnKTtcclxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShyYXcpIGFzIFRva2VuU3RvcmU7XHJcbiAgICB9IGNhdGNoIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gd3JpdGVUb2tlbkZpbGUoc3RvcmU6IFRva2VuU3RvcmUpOiB2b2lkIHtcclxuICAgIGNvbnN0IGYgPSBnZXRUb2tlbkZpbGVQYXRoKCk7XHJcbiAgICBjb25zdCBkaXIgPSBwYXRoLmRpcm5hbWUoZik7XHJcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMoZGlyKSkgZnMubWtkaXJTeW5jKGRpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XHJcbiAgICBmcy53cml0ZUZpbGVTeW5jKGYsIEpTT04uc3RyaW5naWZ5KHN0b3JlLCBudWxsLCAyKSwgeyBlbmNvZGluZzogJ3V0ZjgnLCBtb2RlOiAwbzYwMCB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gY2xlYXJUb2tlbkZpbGUoKTogdm9pZCB7XHJcbiAgICB0cnkgeyBmcy51bmxpbmtTeW5jKGdldFRva2VuRmlsZVBhdGgoKSk7IH0gY2F0Y2ggeyAvKiBhbHJlYWR5IGdvbmUgKi8gfVxyXG59XHJcblxyXG4vKiogUmVhZCB0b2tlbjoga2V5cmluZyBmaXJzdCwgdGhlbiBmaWxlIChzeW5jIGNvbXBhdCB3cmFwcGVyKS4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRUb2tlblN0b3JlKCk6IFRva2VuU3RvcmUgfCBudWxsIHtcclxuICAgIHJldHVybiByZWFkVG9rZW5GaWxlKCk7XHJcbn1cclxuXHJcbi8qKiBXcml0ZSB0b2tlbiB0byBrZXlyaW5nICsgZmlsZS4gQXN5bmMgYmVjYXVzZSBrZXlyaW5nIGlzIGFzeW5jLiAqL1xyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd3JpdGVUb2tlblN0b3JlU2VjdXJlKHN0b3JlOiBUb2tlblN0b3JlLCBpbnNlY3VyZU9ubHkgPSBmYWxzZSk6IFByb21pc2U8J2tleXJpbmcnIHwgJ2ZpbGUnPiB7XHJcbiAgICBjb25zdCBqc29uID0gSlNPTi5zdHJpbmdpZnkoc3RvcmUsIG51bGwsIDIpO1xyXG4gICAgaWYgKCFpbnNlY3VyZU9ubHkpIHtcclxuICAgICAgICBjb25zdCBzdG9yZWQgPSBhd2FpdCBzdG9yZVRvS2V5cmluZyhqc29uKTtcclxuICAgICAgICBpZiAoc3RvcmVkKSB7XHJcbiAgICAgICAgICAgIC8vIEFsc28gd3JpdGUgZmlsZSBhcyBiYWNrdXAgKGRhZW1vbiByZWFkcyBmcm9tIGZpbGUpXHJcbiAgICAgICAgICAgIHdyaXRlVG9rZW5GaWxlKHN0b3JlKTtcclxuICAgICAgICAgICAgcmV0dXJuICdrZXlyaW5nJztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICB3cml0ZVRva2VuRmlsZShzdG9yZSk7XHJcbiAgICByZXR1cm4gJ2ZpbGUnO1xyXG59XHJcblxyXG4vKiogUmVhZCB0b2tlbjogdHJpZXMga2V5cmluZyBmaXJzdCwgZmFsbHMgYmFjayB0byBmaWxlLiAqL1xyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZFRva2VuU3RvcmVTZWN1cmUoKTogUHJvbWlzZTx7IHN0b3JlOiBUb2tlblN0b3JlIHwgbnVsbDsgc291cmNlOiAna2V5cmluZycgfCAnZmlsZScgfCBudWxsIH0+IHtcclxuICAgIGNvbnN0IGtleXJpbmdSYXcgPSBhd2FpdCByZWFkRnJvbUtleXJpbmcoKTtcclxuICAgIGlmIChrZXlyaW5nUmF3KSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgcmV0dXJuIHsgc3RvcmU6IEpTT04ucGFyc2Uoa2V5cmluZ1JhdykgYXMgVG9rZW5TdG9yZSwgc291cmNlOiAna2V5cmluZycgfTtcclxuICAgICAgICB9IGNhdGNoIHsgLyogY29ycnVwdCBrZXlyaW5nIGVudHJ5LCB0cnkgZmlsZSAqLyB9XHJcbiAgICB9XHJcbiAgICBjb25zdCBmaWxlU3RvcmUgPSByZWFkVG9rZW5GaWxlKCk7XHJcbiAgICByZXR1cm4geyBzdG9yZTogZmlsZVN0b3JlLCBzb3VyY2U6IGZpbGVTdG9yZSA/ICdmaWxlJyA6IG51bGwgfTtcclxufVxyXG5cclxuLyoqIENsZWFyIHRva2VuIGZyb20gYm90aCBrZXlyaW5nIGFuZCBmaWxlLiAqL1xyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2xlYXJUb2tlblN0b3JlU2VjdXJlKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgYXdhaXQgZGVsZXRlRnJvbUtleXJpbmcoKTtcclxuICAgIGNsZWFyVG9rZW5GaWxlKCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc1Rva2VuRXhwaXJlZChzdG9yZTogVG9rZW5TdG9yZSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIERhdGUubm93KCkgPj0gc3RvcmUuZXhwaXJlc0F0O1xyXG59XHJcblxyXG4vLyBcdTI1MDBcdTI1MDBcdTI1MDAgRW52IHZhciB0b2tlbiBieXBhc3MgKFNFQy0wMSkgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHJcblxyXG4vKipcclxuICogQ2hlY2sgQ1RYX0FVVEhfVE9LRU4gb3IgQ1RYX0FVVEhfVE9LRU5fRklMRSBlbnYgdmFycyBmb3IgQ0kvQ0QgaGVhZGxlc3MgdXNlLlxyXG4gKiBSZXR1cm5zIGEgc3ludGhldGljIFRva2VuU3RvcmUgaWYgZm91bmQsIG51bGwgb3RoZXJ3aXNlLlxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEVudlRva2VuKCk6IFRva2VuU3RvcmUgfCBudWxsIHtcclxuICAgIGNvbnN0IGRpcmVjdCA9IHByb2Nlc3MuZW52LkNUWF9BVVRIX1RPS0VOO1xyXG4gICAgaWYgKGRpcmVjdCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGFjY2Vzc1Rva2VuOiBkaXJlY3QsXHJcbiAgICAgICAgICAgIHJlZnJlc2hUb2tlbjogJycsXHJcbiAgICAgICAgICAgIGV4cGlyZXNBdDogTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsXHJcbiAgICAgICAgICAgIGVtYWlsOiAnZW52OkNUWF9BVVRIX1RPS0VOJyxcclxuICAgICAgICAgICAgdGVuYW50SWQ6IHByb2Nlc3MuZW52LkNUWF9URU5BTlRfSUQgPz8gJydcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGZpbGVQYXRoID0gcHJvY2Vzcy5lbnYuQ1RYX0FVVEhfVE9LRU5fRklMRTtcclxuICAgIGlmIChmaWxlUGF0aCkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJhdyA9IGZzLnJlYWRGaWxlU3luYyhmaWxlUGF0aCwgJ3V0ZjgnKTtcclxuICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShyYXcpIGFzIFRva2VuU3RvcmU7XHJcbiAgICAgICAgICAgIGlmIChwYXJzZWQuYWNjZXNzVG9rZW4pIHJldHVybiBwYXJzZWQ7XHJcbiAgICAgICAgfSBjYXRjaCB7XHJcbiAgICAgICAgICAgIC8vIGZhbGwgdGhyb3VnaFxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbnVsbDtcclxufVxyXG5cclxuLyoqXHJcbiAqIFJlc29sdmUgdGhlIGVmZmVjdGl2ZSB0b2tlbjogZW52IHZhciA+IGRpc2sgdG9rZW4gc3RvcmUuXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVRva2VuKCk6IFRva2VuU3RvcmUgfCBudWxsIHtcclxuICAgIHJldHVybiBnZXRFbnZUb2tlbigpID8/IHJlYWRUb2tlblN0b3JlKCk7XHJcbn1cclxuXHJcbi8vIFx1MjUwMFx1MjUwMFx1MjUwMCBCcm93c2VyIG9wZW5lciAoU0VDLTAzKSBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcclxuXHJcbmZ1bmN0aW9uIG9wZW5Ccm93c2VyKHVybDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IHBsYXRmb3JtID0gb3MucGxhdGZvcm0oKTtcclxuICAgICAgICBpZiAocGxhdGZvcm0gPT09ICd3aW4zMicpIHtcclxuICAgICAgICAgICAgZXhlY1N5bmMoYHN0YXJ0IFwiXCIgXCIke3VybH1cImAsIHsgc3RkaW86ICdpZ25vcmUnIH0pO1xyXG4gICAgICAgIH0gZWxzZSBpZiAocGxhdGZvcm0gPT09ICdkYXJ3aW4nKSB7XHJcbiAgICAgICAgICAgIGV4ZWNTeW5jKGBvcGVuIFwiJHt1cmx9XCJgLCB7IHN0ZGlvOiAnaWdub3JlJyB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBleGVjU3luYyhgeGRnLW9wZW4gXCIke3VybH1cImAsIHsgc3RkaW86ICdpZ25vcmUnIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH0gY2F0Y2gge1xyXG4gICAgICAgIC8vIFNpbGVudGx5IGZhaWwgXHUyMDE0IHVzZXIgc3RpbGwgaGFzIHRoZSBVUkwgcHJpbnRlZCB0byBjb25zb2xlXHJcbiAgICB9XHJcbn1cclxuXHJcbi8vIFx1MjUwMFx1MjUwMFx1MjUwMCBIVFRQIGhlbHBlcnMgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHJcblxyXG4vKiogR2VuZXJpYyBIVFRQIFBPU1Qgd2l0aCBjb25maWd1cmFibGUgQ29udGVudC1UeXBlLiAqL1xyXG5mdW5jdGlvbiBodHRwUG9zdChcclxuICAgIHVybDogc3RyaW5nLFxyXG4gICAgYm9keTogc3RyaW5nLFxyXG4gICAgY29udGVudFR5cGU6IHN0cmluZyxcclxuICAgIHRpbWVvdXRNcyA9IDEwXzAwMFxyXG4pOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICBjb25zdCBwYXJzZWQgPSBuZXcgVVJMKHVybCk7XHJcbiAgICAgICAgY29uc3QgbGliID0gcGFyc2VkLnByb3RvY29sID09PSAnaHR0cHM6JyA/IGh0dHBzIDogaHR0cDtcclxuICAgICAgICBjb25zdCByZXEgPSBsaWIucmVxdWVzdChcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgaG9zdG5hbWU6IHBhcnNlZC5ob3N0bmFtZSxcclxuICAgICAgICAgICAgICAgIHBvcnQ6IHBhcnNlZC5wb3J0IHx8IChwYXJzZWQucHJvdG9jb2wgPT09ICdodHRwczonID8gNDQzIDogODApLFxyXG4gICAgICAgICAgICAgICAgcGF0aDogcGFyc2VkLnBhdGhuYW1lICsgcGFyc2VkLnNlYXJjaCxcclxuICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxyXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiBjb250ZW50VHlwZSxcclxuICAgICAgICAgICAgICAgICAgICAnQ29udGVudC1MZW5ndGgnOiBCdWZmZXIuYnl0ZUxlbmd0aChib2R5KSxcclxuICAgICAgICAgICAgICAgICAgICAnVXNlci1BZ2VudCc6ICcwY3R4LWNsaS8xLjAnXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgdGltZW91dDogdGltZW91dE1zXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHJlcyA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgZGF0YSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgcmVzLm9uKCdkYXRhJywgY2h1bmsgPT4geyBkYXRhICs9IGNodW5rOyB9KTtcclxuICAgICAgICAgICAgICAgIHJlcy5vbignZW5kJywgKCkgPT4gcmVzb2x2ZShkYXRhKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgICAgIHJlcS5vbignZXJyb3InLCByZWplY3QpO1xyXG4gICAgICAgIHJlcS5vbigndGltZW91dCcsICgpID0+IHtcclxuICAgICAgICAgICAgcmVxLmRlc3Ryb3koKTtcclxuICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignUmVxdWVzdCB0aW1lZCBvdXQnKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmVxLndyaXRlKGJvZHkpO1xyXG4gICAgICAgIHJlcS5lbmQoKTtcclxuICAgIH0pO1xyXG59XHJcblxyXG4vKiogUE9TVCBKU09OIHRvIG91ciBCRkYgcHJveHkgcm91dGVzLiBBbGwgMGN0eC5jb20gYXV0aCBBUEkgcm91dGVzIGV4cGVjdCBKU09OLiAqL1xyXG5mdW5jdGlvbiBodHRwSnNvblBvc3QodXJsOiBzdHJpbmcsIGJvZHk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCB0aW1lb3V0TXMgPSAxMF8wMDApOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgcmV0dXJuIGh0dHBQb3N0KHVybCwgSlNPTi5zdHJpbmdpZnkoYm9keSksICdhcHBsaWNhdGlvbi9qc29uJywgdGltZW91dE1zKTtcclxufVxyXG5cclxuZnVuY3Rpb24gc2xlZXAobXM6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCBtcykpO1xyXG59XHJcblxyXG4vLyBcdTI1MDBcdTI1MDBcdTI1MDAgRGV2aWNlIGNvZGUgZmxvdyAoUkZDIDg2MjgpIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxyXG5cclxuYXN5bmMgZnVuY3Rpb24gcmVxdWVzdERldmljZUNvZGUoYXV0aFNlcnZlcjogc3RyaW5nKTogUHJvbWlzZTxEZXZpY2VDb2RlUmVzcG9uc2U+IHtcclxuICAgIGxldCByYXc6IHN0cmluZztcclxuICAgIHRyeSB7XHJcbiAgICAgICAgcmF3ID0gYXdhaXQgaHR0cEpzb25Qb3N0KGAke2F1dGhTZXJ2ZXJ9L2FwaS92MS9hdXRoL2RldmljZWAsIHsgc2NvcGU6IERFRkFVTFRfU0NPUEUgfSk7XHJcbiAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XHJcbiAgICAgICAgY29uc3QgbXNnID0gZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpO1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGNvbm5lY3QgdG8gYXV0aCBzZXJ2ZXIgKCR7YXV0aFNlcnZlcn0pOiAke21zZ31gKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKHJhdykgYXMgQmZmRGV2aWNlQ29kZVJlc3BvbnNlO1xyXG4gICAgaWYgKHBhcnNlZC5lcnJvciB8fCAhcGFyc2VkLmRldmljZUNvZGUgfHwgIXBhcnNlZC51c2VyQ29kZSkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRGV2aWNlIGNvZGUgZXJyb3I6ICR7YmZmRXJyb3JNZXNzYWdlKHBhcnNlZC5lcnJvcil9IFx1MjAxNCAke3Jhd31gKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBNYXAgY2FtZWxDYXNlIEJGRiByZXNwb25zZSBcdTIxOTIgaW50ZXJuYWwgc25ha2VfY2FzZSBzaGFwZVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBkZXZpY2VfY29kZTogcGFyc2VkLmRldmljZUNvZGUsXHJcbiAgICAgICAgdXNlcl9jb2RlOiBwYXJzZWQudXNlckNvZGUsXHJcbiAgICAgICAgdmVyaWZpY2F0aW9uX3VyaTogcGFyc2VkLnZlcmlmaWNhdGlvblVyaSxcclxuICAgICAgICB2ZXJpZmljYXRpb25fdXJpX2NvbXBsZXRlOiBwYXJzZWQudmVyaWZpY2F0aW9uVXJpQ29tcGxldGUsXHJcbiAgICAgICAgZXhwaXJlc19pbjogcGFyc2VkLmV4cGlyZXNJbixcclxuICAgICAgICBpbnRlcnZhbDogcGFyc2VkLmludGVydmFsLFxyXG4gICAgfTtcclxufVxyXG5cclxuYXN5bmMgZnVuY3Rpb24gcG9sbEZvclRva2VuKFxyXG4gICAgYXV0aFNlcnZlcjogc3RyaW5nLFxyXG4gICAgZGV2aWNlQ29kZTogc3RyaW5nLFxyXG4gICAgaW50ZXJ2YWxTZWM6IG51bWJlcixcclxuICAgIGV4cGlyZXNTZWM6IG51bWJlclxyXG4pOiBQcm9taXNlPFRva2VuUmVzcG9uc2U+IHtcclxuICAgIGNvbnN0IGRlYWRsaW5lID0gRGF0ZS5ub3coKSArIGV4cGlyZXNTZWMgKiAxMDAwO1xyXG4gICAgY29uc3QgaW50ZXJ2YWxNcyA9IE1hdGgubWF4KGludGVydmFsU2VjLCA1KSAqIDEwMDA7XHJcblxyXG4gICAgd2hpbGUgKERhdGUubm93KCkgPCBkZWFkbGluZSkge1xyXG4gICAgICAgIGF3YWl0IHNsZWVwKGludGVydmFsTXMpO1xyXG5cclxuICAgICAgICBsZXQgcmF3OiBzdHJpbmc7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgcmF3ID0gYXdhaXQgaHR0cEpzb25Qb3N0KGAke2F1dGhTZXJ2ZXJ9L2FwaS92MS9hdXRoL2RldmljZS90b2tlbmAsIHsgZGV2aWNlQ29kZSB9KTtcclxuICAgICAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1zZyA9IGUgaW5zdGFuY2VvZiBFcnJvciA/IGUubWVzc2FnZSA6IFN0cmluZyhlKTtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUb2tlbiBwb2xsIGZhaWxlZDogJHttc2d9YCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKHJhdykgYXMgQmZmVG9rZW5SZXNwb25zZTtcclxuXHJcbiAgICAgICAgaWYgKHBhcnNlZC5hY2Nlc3NUb2tlbikge1xyXG4gICAgICAgICAgICAvLyBTRUMtMDQ6IFZhbGlkYXRlIHRva2VuX3R5cGUgcGVyIFJGQyA2NzQ5IFx1MDBBNzUuMVxyXG4gICAgICAgICAgICBjb25zdCB0b2tlblR5cGUgPSBwYXJzZWQudG9rZW5UeXBlID8/ICdCZWFyZXInO1xyXG4gICAgICAgICAgICBpZiAodG9rZW5UeXBlLnRvTG93ZXJDYXNlKCkgIT09ICdiZWFyZXInKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgdG9rZW5fdHlwZTogJHt0b2tlblR5cGV9YCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gTWFwIGNhbWVsQ2FzZSBCRkYgcmVzcG9uc2UgXHUyMTkyIGludGVybmFsIHNuYWtlX2Nhc2Ugc2hhcGVcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGFjY2Vzc190b2tlbjogcGFyc2VkLmFjY2Vzc1Rva2VuLFxyXG4gICAgICAgICAgICAgICAgcmVmcmVzaF90b2tlbjogcGFyc2VkLnJlZnJlc2hUb2tlbiA/PyAnJyxcclxuICAgICAgICAgICAgICAgIGV4cGlyZXNfaW46IHBhcnNlZC5leHBpcmVzSW4gPz8gMzYwMCxcclxuICAgICAgICAgICAgICAgIHRva2VuX3R5cGU6IHRva2VuVHlwZSxcclxuICAgICAgICAgICAgICAgIGVtYWlsOiBwYXJzZWQuZW1haWwgPz8gdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgdGVuYW50X2lkOiBwYXJzZWQudGVuYW50SWQgPz8gdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgZXJyQ29kZSA9IGJmZkVycm9yQ29kZShwYXJzZWQuZXJyb3IpO1xyXG4gICAgICAgIGlmIChlcnJDb2RlID09PSAnYXV0aG9yaXphdGlvbl9wZW5kaW5nJykgY29udGludWU7XHJcbiAgICAgICAgaWYgKGVyckNvZGUgPT09ICdzbG93X2Rvd24nKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHNsZWVwKDVfMDAwKTtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChlcnJDb2RlID09PSAnZXhwaXJlZF90b2tlbicpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdEZXZpY2UgY29kZSBleHBpcmVkLiBSdW4gYDBjdHggYXV0aCBsb2dpbmAgYWdhaW4uJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChlcnJDb2RlID09PSAnYWNjZXNzX2RlbmllZCcpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBdXRob3JpemF0aW9uIGRlbmllZCBieSB1c2VyLicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRva2VuIGVycm9yOiAke2JmZkVycm9yTWVzc2FnZShwYXJzZWQuZXJyb3IpfSBcdTIwMTQgJHtwYXJzZWQuZXJyb3JEZXNjcmlwdGlvbiA/PyAnJ31gKTtcclxuICAgIH1cclxuXHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0RldmljZSBjb2RlIGV4cGlyZWQgKHRpbWVkIG91dCkuIFJ1biBgMGN0eCBhdXRoIGxvZ2luYCBhZ2Fpbi4nKTtcclxufVxyXG5cclxuLy8gXHUyNTAwXHUyNTAwXHUyNTAwIFRva2VuIHJlZnJlc2ggXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHJcblxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVmcmVzaEFjY2Vzc1Rva2VuKHN0b3JlOiBUb2tlblN0b3JlKTogUHJvbWlzZTxUb2tlblN0b3JlPiB7XHJcbiAgICBjb25zdCBhdXRoU2VydmVyID0gZ2V0QXV0aFNlcnZlcigpO1xyXG5cclxuICAgIGxldCByYXc6IHN0cmluZztcclxuICAgIHRyeSB7XHJcbiAgICAgICAgcmF3ID0gYXdhaXQgaHR0cEpzb25Qb3N0KGAke2F1dGhTZXJ2ZXJ9L2FwaS92MS9hdXRoL2RldmljZS9yZWZyZXNoYCwge1xyXG4gICAgICAgICAgICByZWZyZXNoVG9rZW46IHN0b3JlLnJlZnJlc2hUb2tlblxyXG4gICAgICAgIH0pO1xyXG4gICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xyXG4gICAgICAgIGNvbnN0IG1zZyA9IGUgaW5zdGFuY2VvZiBFcnJvciA/IGUubWVzc2FnZSA6IFN0cmluZyhlKTtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRva2VuIHJlZnJlc2ggZmFpbGVkOiAke21zZ31gKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKHJhdykgYXMgQmZmVG9rZW5SZXNwb25zZTtcclxuICAgIGlmICghcGFyc2VkLmFjY2Vzc1Rva2VuKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBSZWZyZXNoIGVycm9yOiAke2JmZkVycm9yTWVzc2FnZShwYXJzZWQuZXJyb3IpfSBcdTIwMTQgJHtwYXJzZWQuZXJyb3JEZXNjcmlwdGlvbiA/PyAnJ31gKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBTRUMtMDQ6IFZhbGlkYXRlIHRva2VuX3R5cGVcclxuICAgIGNvbnN0IHRva2VuVHlwZSA9IHBhcnNlZC50b2tlblR5cGUgPz8gJ0JlYXJlcic7XHJcbiAgICBpZiAodG9rZW5UeXBlLnRvTG93ZXJDYXNlKCkgIT09ICdiZWFyZXInKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIHRva2VuX3R5cGUgZnJvbSByZWZyZXNoOiAke3Rva2VuVHlwZX1gKTtcclxuICAgIH1cclxuICAgIC8vIFNFQy0wNDogV2FybiB3aGVuIHNlcnZlciBkb2VzIG5vdCByb3RhdGUgcmVmcmVzaCB0b2tlblxyXG4gICAgaWYgKCFwYXJzZWQucmVmcmVzaFRva2VuKSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKCdXYXJuaW5nOiBhdXRoIHNlcnZlciBkaWQgbm90IHJvdGF0ZSByZWZyZXNoIHRva2VuIChSRkMgOTcwMCBcdTAwQTc0LjE0IHJlY29tbWVuZHMgcm90YXRpb24pJyk7XHJcbiAgICB9XHJcbiAgICBjb25zdCB1cGRhdGVkOiBUb2tlblN0b3JlID0ge1xyXG4gICAgICAgIGFjY2Vzc1Rva2VuOiBwYXJzZWQuYWNjZXNzVG9rZW4sXHJcbiAgICAgICAgcmVmcmVzaFRva2VuOiBwYXJzZWQucmVmcmVzaFRva2VuIHx8IHN0b3JlLnJlZnJlc2hUb2tlbixcclxuICAgICAgICBleHBpcmVzQXQ6IERhdGUubm93KCkgKyAocGFyc2VkLmV4cGlyZXNJbiA/PyAzNjAwKSAqIDEwMDAsXHJcbiAgICAgICAgZW1haWw6IHBhcnNlZC5lbWFpbCA/PyBzdG9yZS5lbWFpbCxcclxuICAgICAgICB0ZW5hbnRJZDogcGFyc2VkLnRlbmFudElkID8/IHN0b3JlLnRlbmFudElkXHJcbiAgICB9O1xyXG4gICAgd3JpdGVUb2tlbkZpbGUodXBkYXRlZCk7XHJcbiAgICByZXR1cm4gdXBkYXRlZDtcclxufVxyXG5cclxuLy8gXHUyNTAwXHUyNTAwXHUyNTAwIENMSSBjb21tYW5kcyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcclxuXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjb21tYW5kQXV0aExvZ2luKGZsYWdzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBib29sZWFuPik6IFByb21pc2U8bnVtYmVyPiB7XHJcbiAgICAvLyBTRUMtMDE6IENoZWNrIGZvciBlbnYgdmFyIHRva2VuIGZpcnN0XHJcbiAgICBjb25zdCBlbnZUb2tlbiA9IGdldEVudlRva2VuKCk7XHJcbiAgICBpZiAoZW52VG9rZW4pIHtcclxuICAgICAgICBjb25zb2xlLmxvZygnQWxyZWFkeSBhdXRoZW50aWNhdGVkIHZpYSBDVFhfQVVUSF9UT0tFTiBlbnZpcm9ubWVudCB2YXJpYWJsZS4nKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhgRW1haWw6ICR7ZW52VG9rZW4uZW1haWx9YCk7XHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgYXV0aFNlcnZlciA9IGdldEF1dGhTZXJ2ZXIoKTtcclxuICAgIGNvbnN0IG5vQnJvd3NlciA9IEJvb2xlYW4oZmxhZ3NbJ25vLWJyb3dzZXInXSk7XHJcbiAgICBjb25zb2xlLmxvZyhgQ29ubmVjdGluZyB0byBhdXRoIHNlcnZlcjogJHthdXRoU2VydmVyfWApO1xyXG5cclxuICAgIGxldCBkZXZpY2VDb2RlUmVzcDogRGV2aWNlQ29kZVJlc3BvbnNlO1xyXG4gICAgdHJ5IHtcclxuICAgICAgICBkZXZpY2VDb2RlUmVzcCA9IGF3YWl0IHJlcXVlc3REZXZpY2VDb2RlKGF1dGhTZXJ2ZXIpO1xyXG4gICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpKTtcclxuICAgICAgICByZXR1cm4gMTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zb2xlLmxvZygnJyk7XHJcbiAgICBjb25zb2xlLmxvZygnT3BlbiB0aGlzIFVSTCBpbiB5b3VyIGJyb3dzZXIgdG8gYXV0aGVudGljYXRlOicpO1xyXG4gICAgY29uc29sZS5sb2coJycpO1xyXG4gICAgY29uc29sZS5sb2coYCAgJHtkZXZpY2VDb2RlUmVzcC52ZXJpZmljYXRpb25fdXJpX2NvbXBsZXRlID8/IGRldmljZUNvZGVSZXNwLnZlcmlmaWNhdGlvbl91cml9YCk7XHJcbiAgICBjb25zb2xlLmxvZygnJyk7XHJcbiAgICBpZiAoIWRldmljZUNvZGVSZXNwLnZlcmlmaWNhdGlvbl91cmlfY29tcGxldGUpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhgRW50ZXIgdGhpcyBjb2RlIHdoZW4gcHJvbXB0ZWQ6ICAke2RldmljZUNvZGVSZXNwLnVzZXJfY29kZX1gKTtcclxuICAgICAgICBjb25zb2xlLmxvZygnJyk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gU0VDLTAzOiBBdXRvLW9wZW4gYnJvd3NlciB1bmxlc3MgLS1uby1icm93c2VyXHJcbiAgICBpZiAoIW5vQnJvd3Nlcikge1xyXG4gICAgICAgIGNvbnN0IHVyaSA9IGRldmljZUNvZGVSZXNwLnZlcmlmaWNhdGlvbl91cmlfY29tcGxldGUgPz8gZGV2aWNlQ29kZVJlc3AudmVyaWZpY2F0aW9uX3VyaTtcclxuICAgICAgICBvcGVuQnJvd3Nlcih1cmkpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnNvbGUubG9nKGBXYWl0aW5nIGZvciBhdXRob3JpemF0aW9uLi4uIChleHBpcmVzIGluICR7ZGV2aWNlQ29kZVJlc3AuZXhwaXJlc19pbn1zKWApO1xyXG5cclxuICAgIGxldCB0b2tlblJlc3A6IFRva2VuUmVzcG9uc2U7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIHRva2VuUmVzcCA9IGF3YWl0IHBvbGxGb3JUb2tlbihcclxuICAgICAgICAgICAgYXV0aFNlcnZlcixcclxuICAgICAgICAgICAgZGV2aWNlQ29kZVJlc3AuZGV2aWNlX2NvZGUsXHJcbiAgICAgICAgICAgIGRldmljZUNvZGVSZXNwLmludGVydmFsLFxyXG4gICAgICAgICAgICBkZXZpY2VDb2RlUmVzcC5leHBpcmVzX2luXHJcbiAgICAgICAgKTtcclxuICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKGUgaW5zdGFuY2VvZiBFcnJvciA/IGUubWVzc2FnZSA6IFN0cmluZyhlKSk7XHJcbiAgICAgICAgcmV0dXJuIDE7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgc3RvcmU6IFRva2VuU3RvcmUgPSB7XHJcbiAgICAgICAgYWNjZXNzVG9rZW46IHRva2VuUmVzcC5hY2Nlc3NfdG9rZW4sXHJcbiAgICAgICAgcmVmcmVzaFRva2VuOiB0b2tlblJlc3AucmVmcmVzaF90b2tlbixcclxuICAgICAgICBleHBpcmVzQXQ6IERhdGUubm93KCkgKyB0b2tlblJlc3AuZXhwaXJlc19pbiAqIDEwMDAsXHJcbiAgICAgICAgZW1haWw6IHRva2VuUmVzcC5lbWFpbCA/PyAnJyxcclxuICAgICAgICB0ZW5hbnRJZDogdG9rZW5SZXNwLnRlbmFudF9pZCA/PyAnJ1xyXG4gICAgfTtcclxuXHJcbiAgICAvLyBTRUMtMDI6IFN0b3JlIHRvIGtleXJpbmcgZmlyc3QsIGZpbGUgZmFsbGJhY2tcclxuICAgIGNvbnN0IGluc2VjdXJlID0gQm9vbGVhbihmbGFnc1snaW5zZWN1cmUtc3RvcmFnZSddKTtcclxuICAgIGNvbnN0IHN0b3JhZ2VEZXN0ID0gYXdhaXQgd3JpdGVUb2tlblN0b3JlU2VjdXJlKHN0b3JlLCBpbnNlY3VyZSk7XHJcblxyXG4gICAgY29uc29sZS5sb2coJycpO1xyXG4gICAgY29uc29sZS5sb2coYExvZ2dlZCBpbiBhczogJHtzdG9yZS5lbWFpbH1gKTtcclxuICAgIGlmIChzdG9yZS50ZW5hbnRJZCkgY29uc29sZS5sb2coYFRlbmFudDogICAgICAgJHtzdG9yZS50ZW5hbnRJZH1gKTtcclxuICAgIGNvbnNvbGUubG9nKGBTdG9yZWQgaW46ICAgICR7c3RvcmFnZURlc3QgPT09ICdrZXlyaW5nJyA/ICdPUyBjcmVkZW50aWFsIHN0b3JlJyA6IGdldFRva2VuRmlsZVBhdGgoKX1gKTtcclxuICAgIGlmIChzdG9yYWdlRGVzdCA9PT0gJ2ZpbGUnICYmICFpbnNlY3VyZSkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCcgIChPUyBrZXlyaW5nIHVuYXZhaWxhYmxlIFx1MjAxNCB1c2luZyBwbGFpbnRleHQgZmlsZSBmYWxsYmFjayknKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBTWU5DLTAyOiBBdXRvLWNvbmZpZ3VyZSBzeW5jIGFmdGVyIHN1Y2Nlc3NmdWwgbG9naW5cclxuICAgIHRyeSB7XHJcbiAgICAgICAgY29uc3Qgc2VydmVyVXJsID0gbmV3IFVSTChhdXRoU2VydmVyKTtcclxuICAgICAgICBzYXZlQ29uZmlnKHtcclxuICAgICAgICAgICAgJ2F1dGguc2VydmVyJzogYXV0aFNlcnZlcixcclxuICAgICAgICAgICAgJ3N5bmMuZW5hYmxlZCc6IHRydWUsXHJcbiAgICAgICAgICAgICdzeW5jLmVuZHBvaW50JzogYCR7YXV0aFNlcnZlcn0vYXBpL3YxL3N5bmNgXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY29uc29sZS5sb2coYFN5bmM6ICAgICAgICAgZW5hYmxlZCAoJHthdXRoU2VydmVyfS9hcGkvdjEvc3luYylgKTtcclxuICAgIH0gY2F0Y2gge1xyXG4gICAgICAgIC8vIENvbmZpZyB3cml0ZSBmYWlsdXJlIHNob3VsZG4ndCBibG9jayBsb2dpblxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiAwO1xyXG59XHJcblxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY29tbWFuZEF1dGhMb2dvdXQoKTogUHJvbWlzZTxudW1iZXI+IHtcclxuICAgIGNvbnN0IGV4aXN0aW5nID0gcmVhZFRva2VuU3RvcmUoKTtcclxuICAgIC8vIFNFQy0wMjogQ2xlYXIgZnJvbSBib3RoIGtleXJpbmcgYW5kIGZpbGVcclxuICAgIGF3YWl0IGNsZWFyVG9rZW5TdG9yZVNlY3VyZSgpO1xyXG4gICAgaWYgKGV4aXN0aW5nKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coYExvZ2dlZCBvdXQgKHdhczogJHtleGlzdGluZy5lbWFpbH0pYCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdOb3QgbG9nZ2VkIGluIFx1MjAxNCBub3RoaW5nIHRvIGNsZWFyLicpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIDA7XHJcbn1cclxuXHJcbi8vIFx1MjUwMFx1MjUwMFx1MjUwMCBUb2tlbiByb3RhdGlvbiAoU0VDLTAwMSkgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHJcblxyXG4vKipcclxuICogU0VDLTAwMTogUm90YXRlIHRva2VuIFx1MjAxNCByZXF1ZXN0IGEgbmV3IGFjY2VzcyB0b2tlbiB1c2luZyB0aGUgZXhpc3RpbmdcclxuICogcmVmcmVzaCB0b2tlbiBhbmQgcmV2b2tlIHRoZSBvbGQgcmVmcmVzaCB0b2tlbiBpZiB0aGUgc2VydmVyIHN1cHBvcnRzIGl0LlxyXG4gKi9cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNvbW1hbmRBdXRoUm90YXRlKGZsYWdzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBib29sZWFuPik6IFByb21pc2U8bnVtYmVyPiB7XHJcbiAgICBjb25zdCBlbnZUb2tlbiA9IGdldEVudlRva2VuKCk7XHJcbiAgICBpZiAoZW52VG9rZW4pIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdDYW5ub3Qgcm90YXRlIHRva2VuOiBhdXRoZW50aWNhdGVkIHZpYSBDVFhfQVVUSF9UT0tFTiBlbnZpcm9ubWVudCB2YXJpYWJsZS4nKTtcclxuICAgICAgICByZXR1cm4gMTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB7IHN0b3JlLCBzb3VyY2UgfSA9IGF3YWl0IHJlYWRUb2tlblN0b3JlU2VjdXJlKCk7XHJcbiAgICBpZiAoIXN0b3JlKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignTm90IGxvZ2dlZCBpbi4gUnVuOiAwY3R4IGF1dGggbG9naW4nKTtcclxuICAgICAgICByZXR1cm4gMTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXN0b3JlLnJlZnJlc2hUb2tlbikge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ05vIHJlZnJlc2ggdG9rZW4gYXZhaWxhYmxlIFx1MjAxNCBjYW5ub3Qgcm90YXRlLiBSdW46IDBjdHggYXV0aCBsb2dpbicpO1xyXG4gICAgICAgIHJldHVybiAxO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGF1dGhTZXJ2ZXIgPSBnZXRBdXRoU2VydmVyKCk7XHJcbiAgICBjb25zdCBvbGRSZWZyZXNoVG9rZW4gPSBzdG9yZS5yZWZyZXNoVG9rZW47XHJcblxyXG4gICAgY29uc29sZS5sb2coYFJvdGF0aW5nIHRva2VuIGZvciAke3N0b3JlLmVtYWlsfS4uLmApO1xyXG5cclxuICAgIGxldCB1cGRhdGVkOiBUb2tlblN0b3JlO1xyXG4gICAgdHJ5IHtcclxuICAgICAgICB1cGRhdGVkID0gYXdhaXQgcmVmcmVzaEFjY2Vzc1Rva2VuKHN0b3JlKTtcclxuICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKGBSb3RhdGlvbiBmYWlsZWQ6ICR7ZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpfWApO1xyXG4gICAgICAgIHJldHVybiAxO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEF0dGVtcHQgdG8gcmV2b2tlIHRoZSBvbGQgcmVmcmVzaCB0b2tlbiAoYmVzdC1lZmZvcnQpXHJcbiAgICBpZiAob2xkUmVmcmVzaFRva2VuICE9PSB1cGRhdGVkLnJlZnJlc2hUb2tlbikge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGF3YWl0IGh0dHBKc29uUG9zdChgJHthdXRoU2VydmVyfS9hcGkvdjEvYXV0aC9kZXZpY2UvcmV2b2tlYCwge1xyXG4gICAgICAgICAgICAgICAgdG9rZW46IG9sZFJlZnJlc2hUb2tlbixcclxuICAgICAgICAgICAgICAgIHRva2VuVHlwZUhpbnQ6ICdyZWZyZXNoX3Rva2VuJ1xyXG4gICAgICAgICAgICB9LCA1XzAwMCk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdPbGQgcmVmcmVzaCB0b2tlbiByZXZva2VkLicpO1xyXG4gICAgICAgIH0gY2F0Y2gge1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1dhcm5pbmc6IGNvdWxkIG5vdCByZXZva2Ugb2xkIHJlZnJlc2ggdG9rZW4gKHNlcnZlciBtYXkgbm90IHN1cHBvcnQgcmV2b2NhdGlvbikuJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGluc2VjdXJlID0gQm9vbGVhbihmbGFnc1snaW5zZWN1cmUtc3RvcmFnZSddKTtcclxuICAgIGNvbnN0IHN0b3JhZ2VEZXN0ID0gYXdhaXQgd3JpdGVUb2tlblN0b3JlU2VjdXJlKHVwZGF0ZWQsIGluc2VjdXJlKTtcclxuXHJcbiAgICBjb25zdCBleHBpcmVzSW4gPSB1cGRhdGVkLmV4cGlyZXNBdCAtIERhdGUubm93KCk7XHJcbiAgICBjb25zdCBleHBpcmVzSW5IdW1hbiA9IGV4cGlyZXNJbiA+IDg2NDAwXzAwMFxyXG4gICAgICAgID8gYCR7TWF0aC5yb3VuZChleHBpcmVzSW4gLyA4NjQwMF8wMDApfWRgXHJcbiAgICAgICAgOiBgJHtNYXRoLnJvdW5kKGV4cGlyZXNJbiAvIDM2MDBfMDAwKX1oYDtcclxuXHJcbiAgICBjb25zb2xlLmxvZyhgVG9rZW4gcm90YXRlZCBzdWNjZXNzZnVsbHkuYCk7XHJcbiAgICBjb25zb2xlLmxvZyhgICBFbWFpbDogICAgICR7dXBkYXRlZC5lbWFpbH1gKTtcclxuICAgIGNvbnNvbGUubG9nKGAgIEV4cGlyZXM6ICAgJHtuZXcgRGF0ZSh1cGRhdGVkLmV4cGlyZXNBdCkudG9JU09TdHJpbmcoKX0gKCR7ZXhwaXJlc0luSHVtYW59KWApO1xyXG4gICAgY29uc29sZS5sb2coYCAgU3RvcmVkIGluOiAke3N0b3JhZ2VEZXN0ID09PSAna2V5cmluZycgPyAnT1MgY3JlZGVudGlhbCBzdG9yZScgOiBnZXRUb2tlbkZpbGVQYXRoKCl9YCk7XHJcbiAgICByZXR1cm4gMDtcclxufVxyXG5cclxuLyoqXHJcbiAqIFNFQy0wMDE6IENoZWNrIGlmIHRva2VuIGlzIGNsb3NlIHRvIGV4cGlyeSBhbmQgd2Fybi5cclxuICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIG1zIHJlbWFpbmluZywgb3IgbnVsbCBpZiBubyB0b2tlbiAvIGVudiB0b2tlbi5cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBjaGVja1Rva2VuRXhwaXJ5V2FybmluZygpOiB7IGV4cGlyZXNJbk1zOiBudW1iZXIgfCBudWxsOyBzaG91bGRXYXJuOiBib29sZWFuIH0ge1xyXG4gICAgY29uc3QgZW52VG9rZW4gPSBnZXRFbnZUb2tlbigpO1xyXG4gICAgaWYgKGVudlRva2VuKSByZXR1cm4geyBleHBpcmVzSW5NczogbnVsbCwgc2hvdWxkV2FybjogZmFsc2UgfTtcclxuXHJcbiAgICBjb25zdCBzdG9yZSA9IHJlYWRUb2tlblN0b3JlKCk7XHJcbiAgICBpZiAoIXN0b3JlIHx8IHN0b3JlLmV4cGlyZXNBdCA+PSBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikge1xyXG4gICAgICAgIHJldHVybiB7IGV4cGlyZXNJbk1zOiBudWxsLCBzaG91bGRXYXJuOiBmYWxzZSB9O1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHJlbWFpbmluZyA9IHN0b3JlLmV4cGlyZXNBdCAtIERhdGUubm93KCk7XHJcbiAgICBjb25zdCB0b3RhbCA9IHN0b3JlLmV4cGlyZXNBdCAtIChzdG9yZS5leHBpcmVzQXQgLSAoc3RvcmUuZXhwaXJlc0F0ID4gMCA/IHN0b3JlLmV4cGlyZXNBdCA6IDApKTtcclxuXHJcbiAgICAvLyBXYXJuIHdoZW4gd2l0aGluIGNvbmZpZ3VyYWJsZSB0aHJlc2hvbGQgKGRlZmF1bHQgNyBkYXlzKVxyXG4gICAgY29uc3Qgd2FybkRheXMgPSBOdW1iZXIocHJvY2Vzcy5lbnYuQ1RYX0FVVEhfVE9LRU5fUk9UQVRJT05fV0FSTl9EQVlTID8/ICc3Jyk7XHJcbiAgICBjb25zdCB3YXJuTXMgPSB3YXJuRGF5cyAqIDg2NDAwXzAwMDtcclxuICAgIGNvbnN0IHNob3VsZFdhcm4gPSByZW1haW5pbmcgPiAwICYmIHJlbWFpbmluZyA8IHdhcm5NcztcclxuXHJcbiAgICByZXR1cm4geyBleHBpcmVzSW5NczogcmVtYWluaW5nID4gMCA/IHJlbWFpbmluZyA6IDAsIHNob3VsZFdhcm4gfTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNvbW1hbmRBdXRoU3RhdHVzKGZsYWdzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBib29sZWFuPik6IG51bWJlciB7XHJcbiAgICBjb25zdCBhc0pzb24gPSBCb29sZWFuKGZsYWdzLmpzb24pO1xyXG4gICAgLy8gU0VDLTAxOiBDaGVjayBlbnYgdG9rZW4gZmlyc3QsIHRoZW4gZGlza1xyXG4gICAgY29uc3Qgc3RvcmUgPSByZXNvbHZlVG9rZW4oKTtcclxuICAgIGNvbnN0IGlzRW52ID0gQm9vbGVhbihnZXRFbnZUb2tlbigpKTtcclxuXHJcbiAgICBpZiAoIXN0b3JlKSB7XHJcbiAgICAgICAgaWYgKGFzSnNvbikge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeSh7IHN0YXR1czogJ2xvZ2dlZF9vdXQnLCBlbWFpbDogbnVsbCwgdGVuYW50SWQ6IG51bGwsIGV4cGlyZXNBdDogbnVsbCB9KSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ1N0YXR1czogIGxvZ2dlZCBvdXQnKTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ1J1bjogICAgIDBjdHggYXV0aCBsb2dpbicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gMDtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBleHBpcmVkID0gaXNUb2tlbkV4cGlyZWQoc3RvcmUpO1xyXG4gICAgY29uc3QgbmV2ZXJFeHBpcmVzID0gc3RvcmUuZXhwaXJlc0F0ID49IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSO1xyXG4gICAgY29uc3QgZXhwaXJlc0RhdGUgPSBuZXZlckV4cGlyZXMgPyAnbmV2ZXInIDogbmV3IERhdGUoc3RvcmUuZXhwaXJlc0F0KS50b0lTT1N0cmluZygpO1xyXG5cclxuICAgIGlmIChhc0pzb24pIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeSh7XHJcbiAgICAgICAgICAgIHN0YXR1czogZXhwaXJlZCA/ICdleHBpcmVkJyA6ICdsb2dnZWRfaW4nLFxyXG4gICAgICAgICAgICBzb3VyY2U6IGlzRW52ID8gJ2Vudmlyb25tZW50JyA6ICd0b2tlbl9maWxlJyxcclxuICAgICAgICAgICAgZW1haWw6IHN0b3JlLmVtYWlsLFxyXG4gICAgICAgICAgICB0ZW5hbnRJZDogc3RvcmUudGVuYW50SWQsXHJcbiAgICAgICAgICAgIGV4cGlyZXNBdDogZXhwaXJlc0RhdGVcclxuICAgICAgICB9KSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGBTdGF0dXM6ICAgICR7ZXhwaXJlZCA/ICd0b2tlbiBleHBpcmVkJyA6ICdsb2dnZWQgaW4nfWApO1xyXG4gICAgICAgIGlmIChpc0VudikgY29uc29sZS5sb2coJ1NvdXJjZTogICAgQ1RYX0FVVEhfVE9LRU4gZW52aXJvbm1lbnQgdmFyaWFibGUnKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhgRW1haWw6ICAgICAke3N0b3JlLmVtYWlsfWApO1xyXG4gICAgICAgIGlmIChzdG9yZS50ZW5hbnRJZCkgY29uc29sZS5sb2coYFRlbmFudDogICAgJHtzdG9yZS50ZW5hbnRJZH1gKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhgRXhwaXJlczogICAke2V4cGlyZXNEYXRlfWApO1xyXG4gICAgICAgIGlmICghaXNFbnYpIGNvbnNvbGUubG9nKGBGaWxlOiAgICAgICR7Z2V0VG9rZW5GaWxlUGF0aCgpfWApO1xyXG4gICAgICAgIGlmIChleHBpcmVkICYmICFpc0Vudikge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnJyk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdUb2tlbiBleHBpcmVkLiBSdW46IDBjdHggYXV0aCBsb2dpbicpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gMDtcclxufVxyXG4iLCAiLyoqXHJcbiAqIFNFQy0wMjogT1Mga2V5cmluZyBjcmVkZW50aWFsIHN0b3JhZ2Ugd3JhcHBlci5cclxuICpcclxuICogVXNlcyBgY3Jvc3Mta2V5Y2hhaW5gIGZvciBwbGF0Zm9ybS1uYXRpdmUgc2VjdXJlIGNyZWRlbnRpYWwgc3RvcmFnZTpcclxuICogICAtIG1hY09TOiBLZXljaGFpbiAoU2VjdXJpdHkuZnJhbWV3b3JrIG9yIGBzZWN1cml0eWAgQ0xJKVxyXG4gKiAgIC0gV2luZG93czogQ3JlZGVudGlhbCBNYW5hZ2VyIChuYXRpdmUgb3IgUG93ZXJTaGVsbClcclxuICogICAtIExpbnV4OiBTZWNyZXQgU2VydmljZSAobGlic2VjcmV0IG9yIGBzZWNyZXQtdG9vbGAgQ0xJKVxyXG4gKlxyXG4gKiBBbGwgb3BlcmF0aW9ucyBhcmUgYXN5bmMgYW5kIGZhaWwgZ3JhY2VmdWxseSBcdTIwMTQgdGhlIGNhbGxlciBmYWxscyBiYWNrXHJcbiAqIHRvIHRoZSBwbGFpbnRleHQgdG9rZW4gZmlsZSBpZiBrZXlyaW5nIG9wZXJhdGlvbnMgZmFpbC5cclxuICovXHJcblxyXG5jb25zdCBTRVJWSUNFID0gJzBjdHgtY2xpJztcclxuY29uc3QgQUNDT1VOVCA9ICdhdXRoLXRva2VuJztcclxuXHJcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbmxldCBfbW9kOiBhbnkgPSBudWxsO1xyXG5cclxuYXN5bmMgZnVuY3Rpb24gZ2V0TW9kdWxlKCk6IFByb21pc2U8eyBzZXRQYXNzd29yZDogKHNlcnZpY2U6IHN0cmluZywgYWNjb3VudDogc3RyaW5nLCBwYXNzd29yZDogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+OyBnZXRQYXNzd29yZDogKHNlcnZpY2U6IHN0cmluZywgYWNjb3VudDogc3RyaW5nKSA9PiBQcm9taXNlPHN0cmluZyB8IG51bGw+OyBkZWxldGVQYXNzd29yZDogKHNlcnZpY2U6IHN0cmluZywgYWNjb3VudDogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+IH0+IHtcclxuICAgIGlmICghX21vZCkge1xyXG4gICAgICAgIF9tb2QgPSBhd2FpdCBpbXBvcnQoJ2Nyb3NzLWtleWNoYWluJyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gX21vZDtcclxufVxyXG5cclxuLyoqXHJcbiAqIFN0b3JlIGEgSlNPTiBzdHJpbmcgaW4gdGhlIE9TIGtleXJpbmcuXHJcbiAqIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzLCBmYWxzZSBpZiB0aGUga2V5cmluZyBpcyB1bmF2YWlsYWJsZS5cclxuICovXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzdG9yZVRvS2V5cmluZyhqc29uOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgY29uc3QgbW9kID0gYXdhaXQgZ2V0TW9kdWxlKCk7XHJcbiAgICAgICAgYXdhaXQgbW9kLnNldFBhc3N3b3JkKFNFUlZJQ0UsIEFDQ09VTlQsIGpzb24pO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSBjYXRjaCB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG59XHJcblxyXG4vKipcclxuICogUmVhZCB0aGUgc3RvcmVkIEpTT04gc3RyaW5nIGZyb20gdGhlIE9TIGtleXJpbmcuXHJcbiAqIFJldHVybnMgbnVsbCBpZiBub3QgZm91bmQgb3Iga2V5cmluZyB1bmF2YWlsYWJsZS5cclxuICovXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWFkRnJvbUtleXJpbmcoKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IG1vZCA9IGF3YWl0IGdldE1vZHVsZSgpO1xyXG4gICAgICAgIGNvbnN0IHBhc3N3b3JkID0gYXdhaXQgbW9kLmdldFBhc3N3b3JkKFNFUlZJQ0UsIEFDQ09VTlQpO1xyXG4gICAgICAgIHJldHVybiBwYXNzd29yZCA/PyBudWxsO1xyXG4gICAgfSBjYXRjaCB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBEZWxldGUgdGhlIHN0b3JlZCBjcmVkZW50aWFsIGZyb20gdGhlIE9TIGtleXJpbmcuXHJcbiAqIFNpbGVudGx5IHN1Y2NlZWRzIGlmIG5vdGhpbmcgd2FzIHN0b3JlZC5cclxuICovXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkZWxldGVGcm9tS2V5cmluZygpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgY29uc3QgbW9kID0gYXdhaXQgZ2V0TW9kdWxlKCk7XHJcbiAgICAgICAgYXdhaXQgbW9kLmRlbGV0ZVBhc3N3b3JkKFNFUlZJQ0UsIEFDQ09VTlQpO1xyXG4gICAgfSBjYXRjaCB7XHJcbiAgICAgICAgLy8gTm90IGZvdW5kIG9yIHVuYXZhaWxhYmxlIFx1MjAxNCB0aGF0J3MgZmluZVxyXG4gICAgfVxyXG59XHJcbiIsICJpbXBvcnQgZnMgZnJvbSAnZnMnO1xyXG5pbXBvcnQgb3MgZnJvbSAnb3MnO1xyXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcclxuaW1wb3J0IHsgcmFuZG9tVVVJRCB9IGZyb20gJ2NyeXB0byc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENvbm5lY3RvckNsb3VkU3RhdGUge1xyXG4gICAgcmVnaXN0cmF0aW9uSWQ6IHN0cmluZyB8IG51bGw7XHJcbiAgICBzdHJlYW1Vcmw6IHN0cmluZyB8IG51bGw7XHJcbiAgICBjYXBhYmlsaXRpZXM6IHN0cmluZ1tdO1xyXG4gICAgbGFzdEhlYXJ0YmVhdEF0OiBudW1iZXIgfCBudWxsO1xyXG4gICAgbGFzdEVycm9yOiBzdHJpbmcgfCBudWxsO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENvbm5lY3RvclJ1bnRpbWVTdGF0ZSB7XHJcbiAgICBkYWVtb25TZXNzaW9uVG9rZW46IHN0cmluZyB8IG51bGw7XHJcbiAgICBldmVudFN1YnNjcmlwdGlvbklkOiBzdHJpbmcgfCBudWxsO1xyXG4gICAgbGFzdEV2ZW50U2VxdWVuY2U6IG51bWJlcjtcclxuICAgIGxhc3RFdmVudFN5bmNBdDogbnVtYmVyIHwgbnVsbDtcclxuICAgIGV2ZW50QnJpZGdlU3VwcG9ydGVkOiBib29sZWFuO1xyXG4gICAgZXZlbnRCcmlkZ2VFcnJvcjogc3RyaW5nIHwgbnVsbDtcclxuICAgIGV2ZW50UXVldWVQZW5kaW5nOiBudW1iZXI7XHJcbiAgICBldmVudFF1ZXVlUmVhZHk6IG51bWJlcjtcclxuICAgIGV2ZW50UXVldWVCYWNrb2ZmOiBudW1iZXI7XHJcbiAgICBsYXN0Q29tbWFuZEN1cnNvcjogbnVtYmVyO1xyXG4gICAgbGFzdENvbW1hbmRTeW5jQXQ6IG51bWJlciB8IG51bGw7XHJcbiAgICBjb21tYW5kQnJpZGdlU3VwcG9ydGVkOiBib29sZWFuO1xyXG4gICAgY29tbWFuZEJyaWRnZUVycm9yOiBzdHJpbmcgfCBudWxsO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENvbm5lY3RvclN0YXRlIHtcclxuICAgIG1hY2hpbmVJZDogc3RyaW5nO1xyXG4gICAgdGVuYW50SWQ6IHN0cmluZyB8IG51bGw7XHJcbiAgICB1aVVybDogc3RyaW5nO1xyXG4gICAgcmVnaXN0ZXJlZEF0OiBudW1iZXI7XHJcbiAgICB1cGRhdGVkQXQ6IG51bWJlcjtcclxuICAgIHJlZ2lzdHJhdGlvbk1vZGU6ICdsb2NhbCcgfCAnY2xvdWQnO1xyXG4gICAgY2xvdWQ6IENvbm5lY3RvckNsb3VkU3RhdGU7XHJcbiAgICBydW50aW1lOiBDb25uZWN0b3JSdW50aW1lU3RhdGU7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUmVnaXN0ZXJDb25uZWN0b3JPcHRpb25zIHtcclxuICAgIHRlbmFudElkPzogc3RyaW5nIHwgbnVsbDtcclxuICAgIHVpVXJsOiBzdHJpbmc7XHJcbiAgICBmb3JjZT86IGJvb2xlYW47XHJcbiAgICBjbG91ZD86IHtcclxuICAgICAgICByZWdpc3RyYXRpb25JZD86IHN0cmluZyB8IG51bGw7XHJcbiAgICAgICAgc3RyZWFtVXJsPzogc3RyaW5nIHwgbnVsbDtcclxuICAgICAgICBjYXBhYmlsaXRpZXM/OiBzdHJpbmdbXTtcclxuICAgIH07XHJcbiAgICByZWdpc3RyYXRpb25Nb2RlPzogJ2xvY2FsJyB8ICdjbG91ZCc7XHJcbiAgICBydW50aW1lPzogUGFydGlhbDxDb25uZWN0b3JSdW50aW1lU3RhdGU+O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29ubmVjdG9yU3RhdGVQYXRoKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gcHJvY2Vzcy5lbnYuQ1RYX0NPTk5FQ1RPUl9TVEFURV9QQVRIIHx8IHBhdGguam9pbihvcy5ob21lZGlyKCksICcuMGN0eCcsICdjb25uZWN0b3IuanNvbicpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmVhZENvbm5lY3RvclN0YXRlKCk6IENvbm5lY3RvclN0YXRlIHwgbnVsbCB7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IGZpbGVQYXRoID0gZ2V0Q29ubmVjdG9yU3RhdGVQYXRoKCk7XHJcbiAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKGZpbGVQYXRoKSkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmMoZmlsZVBhdGgsICd1dGY4JykpIGFzIFBhcnRpYWw8Q29ubmVjdG9yU3RhdGU+O1xyXG4gICAgICAgIGlmICghcGFyc2VkLm1hY2hpbmVJZCB8fCAhcGFyc2VkLnVpVXJsIHx8ICFwYXJzZWQucmVnaXN0ZXJlZEF0KSByZXR1cm4gbnVsbDtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBtYWNoaW5lSWQ6IHBhcnNlZC5tYWNoaW5lSWQsXHJcbiAgICAgICAgICAgIHRlbmFudElkOiBwYXJzZWQudGVuYW50SWQgPz8gbnVsbCxcclxuICAgICAgICAgICAgdWlVcmw6IHBhcnNlZC51aVVybCxcclxuICAgICAgICAgICAgcmVnaXN0ZXJlZEF0OiBwYXJzZWQucmVnaXN0ZXJlZEF0LFxyXG4gICAgICAgICAgICB1cGRhdGVkQXQ6IHBhcnNlZC51cGRhdGVkQXQgPz8gcGFyc2VkLnJlZ2lzdGVyZWRBdCxcclxuICAgICAgICAgICAgcmVnaXN0cmF0aW9uTW9kZTogcGFyc2VkLnJlZ2lzdHJhdGlvbk1vZGUgPT09ICdjbG91ZCcgPyAnY2xvdWQnIDogJ2xvY2FsJyxcclxuICAgICAgICAgICAgY2xvdWQ6IHtcclxuICAgICAgICAgICAgICAgIHJlZ2lzdHJhdGlvbklkOiBwYXJzZWQuY2xvdWQ/LnJlZ2lzdHJhdGlvbklkID8/IG51bGwsXHJcbiAgICAgICAgICAgICAgICBzdHJlYW1Vcmw6IHBhcnNlZC5jbG91ZD8uc3RyZWFtVXJsID8/IG51bGwsXHJcbiAgICAgICAgICAgICAgICBjYXBhYmlsaXRpZXM6IEFycmF5LmlzQXJyYXkocGFyc2VkLmNsb3VkPy5jYXBhYmlsaXRpZXMpID8gcGFyc2VkLmNsb3VkLmNhcGFiaWxpdGllcyA6IFtdLFxyXG4gICAgICAgICAgICAgICAgbGFzdEhlYXJ0YmVhdEF0OiBwYXJzZWQuY2xvdWQ/Lmxhc3RIZWFydGJlYXRBdCA/PyBudWxsLFxyXG4gICAgICAgICAgICAgICAgbGFzdEVycm9yOiBwYXJzZWQuY2xvdWQ/Lmxhc3RFcnJvciA/PyBudWxsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHJ1bnRpbWU6IHtcclxuICAgICAgICAgICAgICAgIGRhZW1vblNlc3Npb25Ub2tlbjogcGFyc2VkLnJ1bnRpbWU/LmRhZW1vblNlc3Npb25Ub2tlbiA/PyBudWxsLFxyXG4gICAgICAgICAgICAgICAgZXZlbnRTdWJzY3JpcHRpb25JZDogcGFyc2VkLnJ1bnRpbWU/LmV2ZW50U3Vic2NyaXB0aW9uSWQgPz8gbnVsbCxcclxuICAgICAgICAgICAgICAgIGxhc3RFdmVudFNlcXVlbmNlOiB0eXBlb2YgcGFyc2VkLnJ1bnRpbWU/Lmxhc3RFdmVudFNlcXVlbmNlID09PSAnbnVtYmVyJyA/IHBhcnNlZC5ydW50aW1lLmxhc3RFdmVudFNlcXVlbmNlIDogMCxcclxuICAgICAgICAgICAgICAgIGxhc3RFdmVudFN5bmNBdDogcGFyc2VkLnJ1bnRpbWU/Lmxhc3RFdmVudFN5bmNBdCA/PyBudWxsLFxyXG4gICAgICAgICAgICAgICAgZXZlbnRCcmlkZ2VTdXBwb3J0ZWQ6IHBhcnNlZC5ydW50aW1lPy5ldmVudEJyaWRnZVN1cHBvcnRlZCAhPT0gZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBldmVudEJyaWRnZUVycm9yOiBwYXJzZWQucnVudGltZT8uZXZlbnRCcmlkZ2VFcnJvciA/PyBudWxsLFxyXG4gICAgICAgICAgICAgICAgZXZlbnRRdWV1ZVBlbmRpbmc6IHR5cGVvZiBwYXJzZWQucnVudGltZT8uZXZlbnRRdWV1ZVBlbmRpbmcgPT09ICdudW1iZXInID8gcGFyc2VkLnJ1bnRpbWUuZXZlbnRRdWV1ZVBlbmRpbmcgOiAwLFxyXG4gICAgICAgICAgICAgICAgZXZlbnRRdWV1ZVJlYWR5OiB0eXBlb2YgcGFyc2VkLnJ1bnRpbWU/LmV2ZW50UXVldWVSZWFkeSA9PT0gJ251bWJlcicgPyBwYXJzZWQucnVudGltZS5ldmVudFF1ZXVlUmVhZHkgOiAwLFxyXG4gICAgICAgICAgICAgICAgZXZlbnRRdWV1ZUJhY2tvZmY6IHR5cGVvZiBwYXJzZWQucnVudGltZT8uZXZlbnRRdWV1ZUJhY2tvZmYgPT09ICdudW1iZXInID8gcGFyc2VkLnJ1bnRpbWUuZXZlbnRRdWV1ZUJhY2tvZmYgOiAwLFxyXG4gICAgICAgICAgICAgICAgbGFzdENvbW1hbmRDdXJzb3I6IHR5cGVvZiBwYXJzZWQucnVudGltZT8ubGFzdENvbW1hbmRDdXJzb3IgPT09ICdudW1iZXInID8gcGFyc2VkLnJ1bnRpbWUubGFzdENvbW1hbmRDdXJzb3IgOiAwLFxyXG4gICAgICAgICAgICAgICAgbGFzdENvbW1hbmRTeW5jQXQ6IHBhcnNlZC5ydW50aW1lPy5sYXN0Q29tbWFuZFN5bmNBdCA/PyBudWxsLFxyXG4gICAgICAgICAgICAgICAgY29tbWFuZEJyaWRnZVN1cHBvcnRlZDogcGFyc2VkLnJ1bnRpbWU/LmNvbW1hbmRCcmlkZ2VTdXBwb3J0ZWQgIT09IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgY29tbWFuZEJyaWRnZUVycm9yOiBwYXJzZWQucnVudGltZT8uY29tbWFuZEJyaWRnZUVycm9yID8/IG51bGxcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICB9IGNhdGNoIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlQ29ubmVjdG9yU3RhdGUoc3RhdGU6IENvbm5lY3RvclN0YXRlKTogdm9pZCB7XHJcbiAgICBjb25zdCBmaWxlUGF0aCA9IGdldENvbm5lY3RvclN0YXRlUGF0aCgpO1xyXG4gICAgZnMubWtkaXJTeW5jKHBhdGguZGlybmFtZShmaWxlUGF0aCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xyXG4gICAgZnMud3JpdGVGaWxlU3luYyhmaWxlUGF0aCwgSlNPTi5zdHJpbmdpZnkoc3RhdGUsIG51bGwsIDIpLCB7IGVuY29kaW5nOiAndXRmOCcsIG1vZGU6IDBvNjAwIH0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJDb25uZWN0b3Iob3B0aW9uczogUmVnaXN0ZXJDb25uZWN0b3JPcHRpb25zKTogeyBzdGF0ZTogQ29ubmVjdG9yU3RhdGU7IGNyZWF0ZWQ6IGJvb2xlYW4gfSB7XHJcbiAgICBjb25zdCBleGlzdGluZyA9IHJlYWRDb25uZWN0b3JTdGF0ZSgpO1xyXG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcclxuXHJcbiAgICBpZiAoZXhpc3RpbmcgJiYgIW9wdGlvbnMuZm9yY2UpIHtcclxuICAgICAgICByZXR1cm4geyBzdGF0ZTogZXhpc3RpbmcsIGNyZWF0ZWQ6IGZhbHNlIH07XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgYmFzZVJ1bnRpbWU6IENvbm5lY3RvclJ1bnRpbWVTdGF0ZSA9IG9wdGlvbnMuZm9yY2VcclxuICAgICAgICA/IHtcclxuICAgICAgICAgICAgZGFlbW9uU2Vzc2lvblRva2VuOiBudWxsLFxyXG4gICAgICAgICAgICBldmVudFN1YnNjcmlwdGlvbklkOiBudWxsLFxyXG4gICAgICAgICAgICBsYXN0RXZlbnRTZXF1ZW5jZTogZXhpc3Rpbmc/LnJ1bnRpbWUubGFzdEV2ZW50U2VxdWVuY2UgPz8gMCxcclxuICAgICAgICAgICAgbGFzdEV2ZW50U3luY0F0OiBleGlzdGluZz8ucnVudGltZS5sYXN0RXZlbnRTeW5jQXQgPz8gbnVsbCxcclxuICAgICAgICAgICAgZXZlbnRCcmlkZ2VTdXBwb3J0ZWQ6IHRydWUsXHJcbiAgICAgICAgICAgIGV2ZW50QnJpZGdlRXJyb3I6IG51bGwsXHJcbiAgICAgICAgICAgIGV2ZW50UXVldWVQZW5kaW5nOiBleGlzdGluZz8ucnVudGltZS5ldmVudFF1ZXVlUGVuZGluZyA/PyAwLFxyXG4gICAgICAgICAgICBldmVudFF1ZXVlUmVhZHk6IGV4aXN0aW5nPy5ydW50aW1lLmV2ZW50UXVldWVSZWFkeSA/PyAwLFxyXG4gICAgICAgICAgICBldmVudFF1ZXVlQmFja29mZjogZXhpc3Rpbmc/LnJ1bnRpbWUuZXZlbnRRdWV1ZUJhY2tvZmYgPz8gMCxcclxuICAgICAgICAgICAgbGFzdENvbW1hbmRDdXJzb3I6IGV4aXN0aW5nPy5ydW50aW1lLmxhc3RDb21tYW5kQ3Vyc29yID8/IDAsXHJcbiAgICAgICAgICAgIGxhc3RDb21tYW5kU3luY0F0OiBleGlzdGluZz8ucnVudGltZS5sYXN0Q29tbWFuZFN5bmNBdCA/PyBudWxsLFxyXG4gICAgICAgICAgICBjb21tYW5kQnJpZGdlU3VwcG9ydGVkOiB0cnVlLFxyXG4gICAgICAgICAgICBjb21tYW5kQnJpZGdlRXJyb3I6IG51bGxcclxuICAgICAgICB9XHJcbiAgICAgICAgOiB7XHJcbiAgICAgICAgICAgIGRhZW1vblNlc3Npb25Ub2tlbjogZXhpc3Rpbmc/LnJ1bnRpbWUuZGFlbW9uU2Vzc2lvblRva2VuID8/IG51bGwsXHJcbiAgICAgICAgICAgIGV2ZW50U3Vic2NyaXB0aW9uSWQ6IGV4aXN0aW5nPy5ydW50aW1lLmV2ZW50U3Vic2NyaXB0aW9uSWQgPz8gbnVsbCxcclxuICAgICAgICAgICAgbGFzdEV2ZW50U2VxdWVuY2U6IGV4aXN0aW5nPy5ydW50aW1lLmxhc3RFdmVudFNlcXVlbmNlID8/IDAsXHJcbiAgICAgICAgICAgIGxhc3RFdmVudFN5bmNBdDogZXhpc3Rpbmc/LnJ1bnRpbWUubGFzdEV2ZW50U3luY0F0ID8/IG51bGwsXHJcbiAgICAgICAgICAgIGV2ZW50QnJpZGdlU3VwcG9ydGVkOiBleGlzdGluZz8ucnVudGltZS5ldmVudEJyaWRnZVN1cHBvcnRlZCA/PyB0cnVlLFxyXG4gICAgICAgICAgICBldmVudEJyaWRnZUVycm9yOiBleGlzdGluZz8ucnVudGltZS5ldmVudEJyaWRnZUVycm9yID8/IG51bGwsXHJcbiAgICAgICAgICAgIGV2ZW50UXVldWVQZW5kaW5nOiBleGlzdGluZz8ucnVudGltZS5ldmVudFF1ZXVlUGVuZGluZyA/PyAwLFxyXG4gICAgICAgICAgICBldmVudFF1ZXVlUmVhZHk6IGV4aXN0aW5nPy5ydW50aW1lLmV2ZW50UXVldWVSZWFkeSA/PyAwLFxyXG4gICAgICAgICAgICBldmVudFF1ZXVlQmFja29mZjogZXhpc3Rpbmc/LnJ1bnRpbWUuZXZlbnRRdWV1ZUJhY2tvZmYgPz8gMCxcclxuICAgICAgICAgICAgbGFzdENvbW1hbmRDdXJzb3I6IGV4aXN0aW5nPy5ydW50aW1lLmxhc3RDb21tYW5kQ3Vyc29yID8/IDAsXHJcbiAgICAgICAgICAgIGxhc3RDb21tYW5kU3luY0F0OiBleGlzdGluZz8ucnVudGltZS5sYXN0Q29tbWFuZFN5bmNBdCA/PyBudWxsLFxyXG4gICAgICAgICAgICBjb21tYW5kQnJpZGdlU3VwcG9ydGVkOiBleGlzdGluZz8ucnVudGltZS5jb21tYW5kQnJpZGdlU3VwcG9ydGVkID8/IHRydWUsXHJcbiAgICAgICAgICAgIGNvbW1hbmRCcmlkZ2VFcnJvcjogZXhpc3Rpbmc/LnJ1bnRpbWUuY29tbWFuZEJyaWRnZUVycm9yID8/IG51bGxcclxuICAgICAgICB9O1xyXG5cclxuICAgIGNvbnN0IHN0YXRlOiBDb25uZWN0b3JTdGF0ZSA9IHtcclxuICAgICAgICBtYWNoaW5lSWQ6IGV4aXN0aW5nPy5tYWNoaW5lSWQgPz8gcmFuZG9tVVVJRCgpLFxyXG4gICAgICAgIHRlbmFudElkOiBvcHRpb25zLnRlbmFudElkID8/IGV4aXN0aW5nPy50ZW5hbnRJZCA/PyBudWxsLFxyXG4gICAgICAgIHVpVXJsOiBvcHRpb25zLnVpVXJsLFxyXG4gICAgICAgIHJlZ2lzdGVyZWRBdDogZXhpc3Rpbmc/LnJlZ2lzdGVyZWRBdCA/PyBub3csXHJcbiAgICAgICAgdXBkYXRlZEF0OiBub3csXHJcbiAgICAgICAgcmVnaXN0cmF0aW9uTW9kZTogb3B0aW9ucy5yZWdpc3RyYXRpb25Nb2RlID8/IGV4aXN0aW5nPy5yZWdpc3RyYXRpb25Nb2RlID8/ICdsb2NhbCcsXHJcbiAgICAgICAgY2xvdWQ6IHtcclxuICAgICAgICAgICAgcmVnaXN0cmF0aW9uSWQ6IG9wdGlvbnMuY2xvdWQ/LnJlZ2lzdHJhdGlvbklkID8/IGV4aXN0aW5nPy5jbG91ZC5yZWdpc3RyYXRpb25JZCA/PyBudWxsLFxyXG4gICAgICAgICAgICBzdHJlYW1Vcmw6IG9wdGlvbnMuY2xvdWQ/LnN0cmVhbVVybCA/PyBleGlzdGluZz8uY2xvdWQuc3RyZWFtVXJsID8/IG51bGwsXHJcbiAgICAgICAgICAgIGNhcGFiaWxpdGllczogb3B0aW9ucy5jbG91ZD8uY2FwYWJpbGl0aWVzID8/IGV4aXN0aW5nPy5jbG91ZC5jYXBhYmlsaXRpZXMgPz8gW10sXHJcbiAgICAgICAgICAgIGxhc3RIZWFydGJlYXRBdDogZXhpc3Rpbmc/LmNsb3VkLmxhc3RIZWFydGJlYXRBdCA/PyBudWxsLFxyXG4gICAgICAgICAgICBsYXN0RXJyb3I6IGV4aXN0aW5nPy5jbG91ZC5sYXN0RXJyb3IgPz8gbnVsbFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcnVudGltZToge1xyXG4gICAgICAgICAgICBkYWVtb25TZXNzaW9uVG9rZW46IG9wdGlvbnMucnVudGltZT8uZGFlbW9uU2Vzc2lvblRva2VuID8/IGJhc2VSdW50aW1lLmRhZW1vblNlc3Npb25Ub2tlbixcclxuICAgICAgICAgICAgZXZlbnRTdWJzY3JpcHRpb25JZDogb3B0aW9ucy5ydW50aW1lPy5ldmVudFN1YnNjcmlwdGlvbklkID8/IGJhc2VSdW50aW1lLmV2ZW50U3Vic2NyaXB0aW9uSWQsXHJcbiAgICAgICAgICAgIGxhc3RFdmVudFNlcXVlbmNlOiBvcHRpb25zLnJ1bnRpbWU/Lmxhc3RFdmVudFNlcXVlbmNlID8/IGJhc2VSdW50aW1lLmxhc3RFdmVudFNlcXVlbmNlLFxyXG4gICAgICAgICAgICBsYXN0RXZlbnRTeW5jQXQ6IG9wdGlvbnMucnVudGltZT8ubGFzdEV2ZW50U3luY0F0ID8/IGJhc2VSdW50aW1lLmxhc3RFdmVudFN5bmNBdCxcclxuICAgICAgICAgICAgZXZlbnRCcmlkZ2VTdXBwb3J0ZWQ6IG9wdGlvbnMucnVudGltZT8uZXZlbnRCcmlkZ2VTdXBwb3J0ZWQgPz8gYmFzZVJ1bnRpbWUuZXZlbnRCcmlkZ2VTdXBwb3J0ZWQsXHJcbiAgICAgICAgICAgIGV2ZW50QnJpZGdlRXJyb3I6IG9wdGlvbnMucnVudGltZT8uZXZlbnRCcmlkZ2VFcnJvciA/PyBiYXNlUnVudGltZS5ldmVudEJyaWRnZUVycm9yLFxyXG4gICAgICAgICAgICBldmVudFF1ZXVlUGVuZGluZzogb3B0aW9ucy5ydW50aW1lPy5ldmVudFF1ZXVlUGVuZGluZyA/PyBiYXNlUnVudGltZS5ldmVudFF1ZXVlUGVuZGluZyxcclxuICAgICAgICAgICAgZXZlbnRRdWV1ZVJlYWR5OiBvcHRpb25zLnJ1bnRpbWU/LmV2ZW50UXVldWVSZWFkeSA/PyBiYXNlUnVudGltZS5ldmVudFF1ZXVlUmVhZHksXHJcbiAgICAgICAgICAgIGV2ZW50UXVldWVCYWNrb2ZmOiBvcHRpb25zLnJ1bnRpbWU/LmV2ZW50UXVldWVCYWNrb2ZmID8/IGJhc2VSdW50aW1lLmV2ZW50UXVldWVCYWNrb2ZmLFxyXG4gICAgICAgICAgICBsYXN0Q29tbWFuZEN1cnNvcjogb3B0aW9ucy5ydW50aW1lPy5sYXN0Q29tbWFuZEN1cnNvciA/PyBiYXNlUnVudGltZS5sYXN0Q29tbWFuZEN1cnNvcixcclxuICAgICAgICAgICAgbGFzdENvbW1hbmRTeW5jQXQ6IG9wdGlvbnMucnVudGltZT8ubGFzdENvbW1hbmRTeW5jQXQgPz8gYmFzZVJ1bnRpbWUubGFzdENvbW1hbmRTeW5jQXQsXHJcbiAgICAgICAgICAgIGNvbW1hbmRCcmlkZ2VTdXBwb3J0ZWQ6IG9wdGlvbnMucnVudGltZT8uY29tbWFuZEJyaWRnZVN1cHBvcnRlZCA/PyBiYXNlUnVudGltZS5jb21tYW5kQnJpZGdlU3VwcG9ydGVkLFxyXG4gICAgICAgICAgICBjb21tYW5kQnJpZGdlRXJyb3I6IG9wdGlvbnMucnVudGltZT8uY29tbWFuZEJyaWRnZUVycm9yID8/IGJhc2VSdW50aW1lLmNvbW1hbmRCcmlkZ2VFcnJvclxyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgd3JpdGVDb25uZWN0b3JTdGF0ZShzdGF0ZSk7XHJcbiAgICByZXR1cm4geyBzdGF0ZSwgY3JlYXRlZDogIWV4aXN0aW5nIH07XHJcbn1cclxuIiwgImltcG9ydCBodHRwIGZyb20gJ2h0dHAnO1xyXG5pbXBvcnQgaHR0cHMgZnJvbSAnaHR0cHMnO1xyXG5pbXBvcnQgeyBnZXRDb25maWdWYWx1ZSB9IGZyb20gJ0AwY3R4L2NvcmUnO1xyXG5cclxuY29uc3QgREVGQVVMVF9DT05UUk9MX1BMQU5FX0JBU0VfVVJMID0gJ2h0dHBzOi8vYXBpLjBjdHguY29tL3YxJztcclxuY29uc3QgREVGQVVMVF9USU1FT1VUX01TID0gMTBfMDAwO1xyXG5cclxuaW50ZXJmYWNlIENsb3VkUmVxdWVzdE9wdGlvbnMge1xyXG4gICAgbWV0aG9kOiAnR0VUJyB8ICdQT1NUJztcclxuICAgIHBhdGg6IHN0cmluZztcclxuICAgIHRva2VuOiBzdHJpbmc7XHJcbiAgICBib2R5PzogdW5rbm93bjtcclxuICAgIHF1ZXJ5PzogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZD47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ2xvdWRBcGlSZXN1bHQ8VD4ge1xyXG4gICAgb2s6IGJvb2xlYW47XHJcbiAgICBzdGF0dXNDb2RlOiBudW1iZXI7XHJcbiAgICBkYXRhPzogVDtcclxuICAgIGVycm9yPzogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFJlZ2lzdGVyQ29ubmVjdG9yUGF5bG9hZCB7XHJcbiAgICBtYWNoaW5lSWQ6IHN0cmluZztcclxuICAgIHRlbmFudElkOiBzdHJpbmcgfCBudWxsO1xyXG4gICAgdWlVcmw6IHN0cmluZztcclxuICAgIHBsYXRmb3JtOiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUmVnaXN0ZXJDb25uZWN0b3JDbG91ZFJlc3BvbnNlIHtcclxuICAgIHJlZ2lzdHJhdGlvbklkPzogc3RyaW5nO1xyXG4gICAgc3RyZWFtVXJsPzogc3RyaW5nO1xyXG4gICAgY2FwYWJpbGl0aWVzPzogc3RyaW5nW107XHJcbiAgICB0ZW5hbnRJZD86IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDb25uZWN0b3JIZWFydGJlYXRQYXlsb2FkIHtcclxuICAgIG1hY2hpbmVJZDogc3RyaW5nO1xyXG4gICAgdGVuYW50SWQ6IHN0cmluZyB8IG51bGw7XHJcbiAgICBwb3N0dXJlOiAnY29ubmVjdGVkJyB8ICdkZWdyYWRlZCcgfCAnb2ZmbGluZSc7XHJcbiAgICBkYWVtb25SdW5uaW5nOiBib29sZWFuO1xyXG4gICAgc3luY0VuYWJsZWQ6IGJvb2xlYW47XHJcbiAgICBzeW5jUnVubmluZzogYm9vbGVhbjtcclxuICAgIHF1ZXVlPzoge1xyXG4gICAgICAgIHBlbmRpbmc6IG51bWJlcjtcclxuICAgICAgICBpbkZsaWdodDogbnVtYmVyO1xyXG4gICAgICAgIGZhaWxlZDogbnVtYmVyO1xyXG4gICAgICAgIGRvbmU6IG51bWJlcjtcclxuICAgIH07XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ29ubmVjdG9ySGVhcnRiZWF0UmVzcG9uc2Uge1xyXG4gICAgYWNjZXB0ZWQ/OiBib29sZWFuO1xyXG4gICAgc2VydmVyVGltZT86IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDb25uZWN0b3JDYXBhYmlsaXRpZXNSZXNwb25zZSB7XHJcbiAgICBjYXBhYmlsaXRpZXM/OiBzdHJpbmdbXTtcclxuICAgIGZlYXR1cmVzPzogc3RyaW5nW107XHJcbiAgICBwb3N0dXJlPzogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENvbm5lY3RvckV2ZW50UGF5bG9hZCB7XHJcbiAgICBldmVudElkOiBzdHJpbmc7XHJcbiAgICBzZXF1ZW5jZTogbnVtYmVyO1xyXG4gICAgY29udGV4dElkOiBzdHJpbmcgfCBudWxsO1xyXG4gICAgdHlwZTogc3RyaW5nO1xyXG4gICAgdGltZXN0YW1wOiBudW1iZXI7XHJcbiAgICBzb3VyY2U6IHN0cmluZztcclxuICAgIHBheWxvYWQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENvbm5lY3RvckV2ZW50c0luZ2VzdFBheWxvYWQge1xyXG4gICAgbWFjaGluZUlkOiBzdHJpbmc7XHJcbiAgICB0ZW5hbnRJZDogc3RyaW5nIHwgbnVsbDtcclxuICAgIHN1YnNjcmlwdGlvbklkOiBzdHJpbmc7XHJcbiAgICBjdXJzb3I6IG51bWJlcjtcclxuICAgIGV2ZW50czogQ29ubmVjdG9yRXZlbnRQYXlsb2FkW107XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ29ubmVjdG9yRXZlbnRzSW5nZXN0UmVzcG9uc2Uge1xyXG4gICAgYWNjZXB0ZWQ/OiBib29sZWFuO1xyXG4gICAgcHJvY2Vzc2VkPzogbnVtYmVyO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENvbm5lY3RvckNvbW1hbmQge1xyXG4gICAgY29tbWFuZElkOiBzdHJpbmc7XHJcbiAgICBjdXJzb3I6IG51bWJlcjtcclxuICAgIGNvbnRleHRJZDogc3RyaW5nIHwgbnVsbDtcclxuICAgIG1ldGhvZDogc3RyaW5nO1xyXG4gICAgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcclxuICAgIGNyZWF0ZWRBdD86IG51bWJlcjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDb25uZWN0b3JDb21tYW5kc1Jlc3BvbnNlIHtcclxuICAgIGN1cnNvcj86IG51bWJlcjtcclxuICAgIGNvbW1hbmRzPzogQ29ubmVjdG9yQ29tbWFuZFtdO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENvbm5lY3RvckNvbW1hbmRBY2tQYXlsb2FkIHtcclxuICAgIG1hY2hpbmVJZDogc3RyaW5nO1xyXG4gICAgdGVuYW50SWQ6IHN0cmluZyB8IG51bGw7XHJcbiAgICBjb21tYW5kSWQ6IHN0cmluZztcclxuICAgIGN1cnNvcjogbnVtYmVyO1xyXG4gICAgc3RhdHVzOiAnYXBwbGllZCcgfCAnZmFpbGVkJztcclxuICAgIGVycm9yPzogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENvbm5lY3RvckNvbW1hbmRBY2tSZXNwb25zZSB7XHJcbiAgICBhY2NlcHRlZD86IGJvb2xlYW47XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHBhcnNlVGltZW91dE1zKCk6IG51bWJlciB7XHJcbiAgICBjb25zdCByYXcgPSBwcm9jZXNzLmVudi5DVFhfQ09OVFJPTF9QTEFORV9USU1FT1VUX01TO1xyXG4gICAgaWYgKCFyYXcpIHJldHVybiBERUZBVUxUX1RJTUVPVVRfTVM7XHJcbiAgICBjb25zdCBwYXJzZWQgPSBOdW1iZXIocmF3KTtcclxuICAgIGlmICghTnVtYmVyLmlzRmluaXRlKHBhcnNlZCkgfHwgcGFyc2VkIDw9IDApIHJldHVybiBERUZBVUxUX1RJTUVPVVRfTVM7XHJcbiAgICByZXR1cm4gcGFyc2VkO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29udHJvbFBsYW5lQmFzZVVybCgpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgZXhwbGljaXQgPSBwcm9jZXNzLmVudi5DVFhfQ09OVFJPTF9QTEFORV9VUkw/LnRyaW0oKTtcclxuICAgIGlmIChleHBsaWNpdCkgcmV0dXJuIGV4cGxpY2l0LnJlcGxhY2UoL1xcLyQvLCAnJyk7XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgICBjb25zdCBzeW5jRW5kcG9pbnQgPSBnZXRDb25maWdWYWx1ZSgnc3luYy5lbmRwb2ludCcpO1xyXG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IG5ldyBVUkwoc3luY0VuZHBvaW50KTtcclxuICAgICAgICBjb25zdCBub3JtYWxpemVkUGF0aCA9IHBhcnNlZC5wYXRobmFtZS5yZXBsYWNlKC9cXC8rJC8sICcnKTtcclxuICAgICAgICBjb25zdCB3aXRob3V0U3luYyA9IG5vcm1hbGl6ZWRQYXRoLmVuZHNXaXRoKCcvc3luYycpXHJcbiAgICAgICAgICAgID8gbm9ybWFsaXplZFBhdGguc2xpY2UoMCwgLSgnL3N5bmMnLmxlbmd0aCkpXHJcbiAgICAgICAgICAgIDogbm9ybWFsaXplZFBhdGg7XHJcblxyXG4gICAgICAgIHBhcnNlZC5wYXRobmFtZSA9IHdpdGhvdXRTeW5jIHx8ICcvdjEnO1xyXG4gICAgICAgIHBhcnNlZC5zZWFyY2ggPSAnJztcclxuICAgICAgICBwYXJzZWQuaGFzaCA9ICcnO1xyXG5cclxuICAgICAgICByZXR1cm4gYCR7cGFyc2VkLnByb3RvY29sfS8vJHtwYXJzZWQuaG9zdH0ke3BhcnNlZC5wYXRobmFtZX1gLnJlcGxhY2UoL1xcLyQvLCAnJyk7XHJcbiAgICB9IGNhdGNoIHtcclxuICAgICAgICByZXR1cm4gREVGQVVMVF9DT05UUk9MX1BMQU5FX0JBU0VfVVJMO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBidWlsZFVybChwYXRoOiBzdHJpbmcsIHF1ZXJ5PzogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZD4pOiBVUkwge1xyXG4gICAgY29uc3Qgbm9ybWFsaXplZFBhdGggPSBwYXRoLnJlcGxhY2UoL15cXC8rLywgJycpO1xyXG4gICAgY29uc3QgYmFzZSA9IGAke2dldENvbnRyb2xQbGFuZUJhc2VVcmwoKS5yZXBsYWNlKC9cXC8kLywgJycpfS9gO1xyXG4gICAgY29uc3QgdXJsID0gbmV3IFVSTChub3JtYWxpemVkUGF0aCwgYmFzZSk7XHJcblxyXG4gICAgaWYgKHF1ZXJ5KSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMocXVlcnkpKSB7XHJcbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsKSBjb250aW51ZTtcclxuICAgICAgICAgICAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoa2V5LCBTdHJpbmcodmFsdWUpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHVybDtcclxufVxyXG5cclxuYXN5bmMgZnVuY3Rpb24gcmVxdWVzdEpzb248VD4ob3B0aW9uczogQ2xvdWRSZXF1ZXN0T3B0aW9ucyk6IFByb21pc2U8Q2xvdWRBcGlSZXN1bHQ8VD4+IHtcclxuICAgIGNvbnN0IHVybCA9IGJ1aWxkVXJsKG9wdGlvbnMucGF0aCwgb3B0aW9ucy5xdWVyeSk7XHJcbiAgICBjb25zdCBwYXlsb2FkID0gb3B0aW9ucy5ib2R5ID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBKU09OLnN0cmluZ2lmeShvcHRpb25zLmJvZHkpO1xyXG5cclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHRyYW5zcG9ydCA9IHVybC5wcm90b2NvbCA9PT0gJ2h0dHBzOicgPyBodHRwcyA6IGh0dHA7XHJcbiAgICAgICAgY29uc3QgcmVxID0gdHJhbnNwb3J0LnJlcXVlc3QoXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGhvc3RuYW1lOiB1cmwuaG9zdG5hbWUsXHJcbiAgICAgICAgICAgICAgICBwb3J0OiB1cmwucG9ydCB8fCAodXJsLnByb3RvY29sID09PSAnaHR0cHM6JyA/IDQ0MyA6IDgwKSxcclxuICAgICAgICAgICAgICAgIHBhdGg6IHVybC5wYXRobmFtZSArIHVybC5zZWFyY2gsXHJcbiAgICAgICAgICAgICAgICBtZXRob2Q6IG9wdGlvbnMubWV0aG9kLFxyXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXHJcbiAgICAgICAgICAgICAgICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke29wdGlvbnMudG9rZW59YCxcclxuICAgICAgICAgICAgICAgICAgICAuLi4ocGF5bG9hZCA/IHsgJ0NvbnRlbnQtTGVuZ3RoJzogQnVmZmVyLmJ5dGVMZW5ndGgocGF5bG9hZCkgfSA6IHt9KVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHRpbWVvdXQ6IHBhcnNlVGltZW91dE1zKClcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgKHJlcykgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2h1bmtzOiBCdWZmZXJbXSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgcmVzLm9uKCdkYXRhJywgKGNodW5rOiBCdWZmZXIpID0+IGNodW5rcy5wdXNoKGNodW5rKSk7XHJcbiAgICAgICAgICAgICAgICByZXMub24oJ2VuZCcsICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGF0dXNDb2RlID0gcmVzLnN0YXR1c0NvZGUgPz8gMDtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZXh0ID0gQnVmZmVyLmNvbmNhdChjaHVua3MpLnRvU3RyaW5nKCd1dGY4Jyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXNDb2RlID49IDIwMCAmJiBzdGF0dXNDb2RlIDwgMzAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGV4dC50cmltKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoeyBvazogdHJ1ZSwgc3RhdHVzQ29kZSwgZGF0YToge30gYXMgVCB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh7IG9rOiB0cnVlLCBzdGF0dXNDb2RlLCBkYXRhOiBKU09OLnBhcnNlKHRleHQpIGFzIFQgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2gge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh7IG9rOiB0cnVlLCBzdGF0dXNDb2RlLCBkYXRhOiB7fSBhcyBUIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBlcnJvciA9IGBIVFRQICR7c3RhdHVzQ29kZX1gO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0ZXh0LnRyaW0oKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZSh0ZXh0KSBhcyB7IGVycm9yPzogc3RyaW5nOyBtZXNzYWdlPzogc3RyaW5nIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IHBhcnNlZC5lcnJvciB8fCBwYXJzZWQubWVzc2FnZSB8fCBlcnJvcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IGAke2Vycm9yfTogJHt0ZXh0LnNsaWNlKDAsIDIwMCl9YDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh7IG9rOiBmYWxzZSwgc3RhdHVzQ29kZSwgZXJyb3IgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHJlcS5vbignZXJyb3InLCAoZXJyKSA9PiB7XHJcbiAgICAgICAgICAgIHJlc29sdmUoe1xyXG4gICAgICAgICAgICAgICAgb2s6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgc3RhdHVzQ29kZTogMCxcclxuICAgICAgICAgICAgICAgIGVycm9yOiBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycilcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJlcS5vbigndGltZW91dCcsICgpID0+IHtcclxuICAgICAgICAgICAgcmVxLmRlc3Ryb3kobmV3IEVycm9yKCdSZXF1ZXN0IHRpbWVkIG91dCcpKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgaWYgKHBheWxvYWQpIHJlcS53cml0ZShwYXlsb2FkKTtcclxuICAgICAgICByZXEuZW5kKCk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuYXN5bmMgZnVuY3Rpb24gcmVxdWVzdFdpdGhGYWxsYmFjazxUPihcclxuICAgIG9wdGlvbnM6IE9taXQ8Q2xvdWRSZXF1ZXN0T3B0aW9ucywgJ3BhdGgnPixcclxuICAgIHBhdGhzOiBzdHJpbmdbXVxyXG4pOiBQcm9taXNlPENsb3VkQXBpUmVzdWx0PFQ+PiB7XHJcbiAgICBsZXQgbGFzdDogQ2xvdWRBcGlSZXN1bHQ8VD4gfCBudWxsID0gbnVsbDtcclxuICAgIGZvciAoY29uc3QgcGF0aCBvZiBwYXRocykge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlcXVlc3RKc29uPFQ+KHsgLi4ub3B0aW9ucywgcGF0aCB9KTtcclxuICAgICAgICBpZiAocmVzdWx0Lm9rKSByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIGxhc3QgPSByZXN1bHQ7XHJcbiAgICAgICAgaWYgKHJlc3VsdC5zdGF0dXNDb2RlICE9PSA0MDQpIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBsYXN0ID8/IHsgb2s6IGZhbHNlLCBzdGF0dXNDb2RlOiAwLCBlcnJvcjogJ0Nsb3VkIHJlcXVlc3QgZmFpbGVkJyB9O1xyXG59XHJcblxyXG5jb25zdCBSRUdJU1RFUl9QQVRIUyA9IFsnY29ubmVjdG9ycy9yZWdpc3RlcicsICdjb25uZWN0b3IvcmVnaXN0ZXInXTtcclxuY29uc3QgSEVBUlRCRUFUX1BBVEhTID0gWydjb25uZWN0b3JzL2hlYXJ0YmVhdCcsICdjb25uZWN0b3IvaGVhcnRiZWF0J107XHJcbmNvbnN0IENBUEFCSUxJVElFU19QQVRIUyA9IFsnY29ubmVjdG9ycy9jYXBhYmlsaXRpZXMnLCAnY29ubmVjdG9yL2NhcGFiaWxpdGllcyddO1xyXG5jb25zdCBFVkVOVFNfSU5HRVNUX1BBVEhTID0gWydjb25uZWN0b3JzL2V2ZW50cycsICdjb25uZWN0b3IvZXZlbnRzJ107XHJcbmNvbnN0IENPTU1BTkRTX1BBVEhTID0gWydjb25uZWN0b3JzL2NvbW1hbmRzJywgJ2Nvbm5lY3Rvci9jb21tYW5kcyddO1xyXG5jb25zdCBDT01NQU5EX0FDS19QQVRIUyA9IFsnY29ubmVjdG9ycy9jb21tYW5kcy9hY2snLCAnY29ubmVjdG9yL2NvbW1hbmRzL2FjayddO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyQ29ubmVjdG9ySW5DbG91ZChcclxuICAgIHRva2VuOiBzdHJpbmcsXHJcbiAgICBwYXlsb2FkOiBSZWdpc3RlckNvbm5lY3RvclBheWxvYWRcclxuKTogUHJvbWlzZTxDbG91ZEFwaVJlc3VsdDxSZWdpc3RlckNvbm5lY3RvckNsb3VkUmVzcG9uc2U+PiB7XHJcbiAgICByZXR1cm4gcmVxdWVzdFdpdGhGYWxsYmFjazxSZWdpc3RlckNvbm5lY3RvckNsb3VkUmVzcG9uc2U+KFxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXHJcbiAgICAgICAgICAgIHRva2VuLFxyXG4gICAgICAgICAgICBib2R5OiBwYXlsb2FkXHJcbiAgICAgICAgfSxcclxuICAgICAgICBSRUdJU1RFUl9QQVRIU1xyXG4gICAgKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNlbmRDb25uZWN0b3JIZWFydGJlYXQoXHJcbiAgICB0b2tlbjogc3RyaW5nLFxyXG4gICAgcGF5bG9hZDogQ29ubmVjdG9ySGVhcnRiZWF0UGF5bG9hZFxyXG4pOiBQcm9taXNlPENsb3VkQXBpUmVzdWx0PENvbm5lY3RvckhlYXJ0YmVhdFJlc3BvbnNlPj4ge1xyXG4gICAgcmV0dXJuIHJlcXVlc3RXaXRoRmFsbGJhY2s8Q29ubmVjdG9ySGVhcnRiZWF0UmVzcG9uc2U+KFxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXHJcbiAgICAgICAgICAgIHRva2VuLFxyXG4gICAgICAgICAgICBib2R5OiBwYXlsb2FkXHJcbiAgICAgICAgfSxcclxuICAgICAgICBIRUFSVEJFQVRfUEFUSFNcclxuICAgICk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBmZXRjaENvbm5lY3RvckNhcGFiaWxpdGllcyhcclxuICAgIHRva2VuOiBzdHJpbmcsXHJcbiAgICBtYWNoaW5lSWQ6IHN0cmluZ1xyXG4pOiBQcm9taXNlPENsb3VkQXBpUmVzdWx0PENvbm5lY3RvckNhcGFiaWxpdGllc1Jlc3BvbnNlPj4ge1xyXG4gICAgcmV0dXJuIHJlcXVlc3RXaXRoRmFsbGJhY2s8Q29ubmVjdG9yQ2FwYWJpbGl0aWVzUmVzcG9uc2U+KFxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgbWV0aG9kOiAnR0VUJyxcclxuICAgICAgICAgICAgdG9rZW4sXHJcbiAgICAgICAgICAgIHF1ZXJ5OiB7IG1hY2hpbmVJZCB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBDQVBBQklMSVRJRVNfUEFUSFNcclxuICAgICk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzZW5kQ29ubmVjdG9yRXZlbnRzKFxyXG4gICAgdG9rZW46IHN0cmluZyxcclxuICAgIHBheWxvYWQ6IENvbm5lY3RvckV2ZW50c0luZ2VzdFBheWxvYWRcclxuKTogUHJvbWlzZTxDbG91ZEFwaVJlc3VsdDxDb25uZWN0b3JFdmVudHNJbmdlc3RSZXNwb25zZT4+IHtcclxuICAgIHJldHVybiByZXF1ZXN0V2l0aEZhbGxiYWNrPENvbm5lY3RvckV2ZW50c0luZ2VzdFJlc3BvbnNlPihcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxyXG4gICAgICAgICAgICB0b2tlbixcclxuICAgICAgICAgICAgYm9keTogcGF5bG9hZFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgRVZFTlRTX0lOR0VTVF9QQVRIU1xyXG4gICAgKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGZldGNoQ29ubmVjdG9yQ29tbWFuZHMoXHJcbiAgICB0b2tlbjogc3RyaW5nLFxyXG4gICAgbWFjaGluZUlkOiBzdHJpbmcsXHJcbiAgICBjdXJzb3IgPSAwXHJcbik6IFByb21pc2U8Q2xvdWRBcGlSZXN1bHQ8Q29ubmVjdG9yQ29tbWFuZHNSZXNwb25zZT4+IHtcclxuICAgIHJldHVybiByZXF1ZXN0V2l0aEZhbGxiYWNrPENvbm5lY3RvckNvbW1hbmRzUmVzcG9uc2U+KFxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgbWV0aG9kOiAnR0VUJyxcclxuICAgICAgICAgICAgdG9rZW4sXHJcbiAgICAgICAgICAgIHF1ZXJ5OiB7IG1hY2hpbmVJZCwgY3Vyc29yIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIENPTU1BTkRTX1BBVEhTXHJcbiAgICApO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYWNrQ29ubmVjdG9yQ29tbWFuZChcclxuICAgIHRva2VuOiBzdHJpbmcsXHJcbiAgICBwYXlsb2FkOiBDb25uZWN0b3JDb21tYW5kQWNrUGF5bG9hZFxyXG4pOiBQcm9taXNlPENsb3VkQXBpUmVzdWx0PENvbm5lY3RvckNvbW1hbmRBY2tSZXNwb25zZT4+IHtcclxuICAgIHJldHVybiByZXF1ZXN0V2l0aEZhbGxiYWNrPENvbm5lY3RvckNvbW1hbmRBY2tSZXNwb25zZT4oXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcclxuICAgICAgICAgICAgdG9rZW4sXHJcbiAgICAgICAgICAgIGJvZHk6IHBheWxvYWRcclxuICAgICAgICB9LFxyXG4gICAgICAgIENPTU1BTkRfQUNLX1BBVEhTXHJcbiAgICApO1xyXG59XHJcblxyXG4vLyBTRUMtMDAxOiBDb25uZWN0b3IgdHJ1c3QgY2hhbGxlbmdlIHZlcmlmaWNhdGlvblxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBUcnVzdFZlcmlmeVBheWxvYWQge1xyXG4gICAgbWFjaGluZUlkOiBzdHJpbmc7XHJcbiAgICBjaGFsbGVuZ2VSZXNwb25zZTogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFRydXN0VmVyaWZ5UmVzcG9uc2Uge1xyXG4gICAgYWNjZXB0ZWQ/OiBib29sZWFuO1xyXG4gICAgdHJ1c3RMZXZlbD86IHN0cmluZztcclxufVxyXG5cclxuY29uc3QgVFJVU1RfVkVSSUZZX1BBVEhTID0gWydjb25uZWN0b3JzL3RydXN0L3ZlcmlmeScsICdjb25uZWN0b3IvdHJ1c3QvdmVyaWZ5J107XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gdmVyaWZ5Q29ubmVjdG9yVHJ1c3QoXHJcbiAgICB0b2tlbjogc3RyaW5nLFxyXG4gICAgcGF5bG9hZDogVHJ1c3RWZXJpZnlQYXlsb2FkXHJcbik6IFByb21pc2U8Q2xvdWRBcGlSZXN1bHQ8VHJ1c3RWZXJpZnlSZXNwb25zZT4+IHtcclxuICAgIHJldHVybiByZXF1ZXN0V2l0aEZhbGxiYWNrPFRydXN0VmVyaWZ5UmVzcG9uc2U+KFxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXHJcbiAgICAgICAgICAgIHRva2VuLFxyXG4gICAgICAgICAgICBib2R5OiBwYXlsb2FkXHJcbiAgICAgICAgfSxcclxuICAgICAgICBUUlVTVF9WRVJJRllfUEFUSFNcclxuICAgICk7XHJcbn1cclxuIiwgImltcG9ydCBmcyBmcm9tICdmcyc7XHJcbmltcG9ydCBvcyBmcm9tICdvcyc7XHJcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xyXG5pbXBvcnQgeyBzcGF3biB9IGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xyXG5pbXBvcnQgeyBzZW5kVG9EYWVtb24gfSBmcm9tICdAMGN0eC9tY3AvZGlzdC9jbGllbnQnO1xyXG5pbXBvcnQgeyBnZXRDb25maWdWYWx1ZSB9IGZyb20gJ0AwY3R4L2NvcmUnO1xyXG5pbXBvcnQgeyByZXNvbHZlVG9rZW4sIHR5cGUgVG9rZW5TdG9yZSB9IGZyb20gJy4vYXV0aCc7XHJcbmltcG9ydCB7XHJcbiAgICB0eXBlIENvbm5lY3RvclN0YXRlLFxyXG4gICAgcmVhZENvbm5lY3RvclN0YXRlLFxyXG4gICAgcmVnaXN0ZXJDb25uZWN0b3IsXHJcbiAgICB3cml0ZUNvbm5lY3RvclN0YXRlXHJcbn0gZnJvbSAnLi9jb25uZWN0b3InO1xyXG5pbXBvcnQge1xyXG4gICAgYWNrQ29ubmVjdG9yQ29tbWFuZCxcclxuICAgIHR5cGUgQ29ubmVjdG9yQ29tbWFuZCxcclxuICAgIHR5cGUgQ29ubmVjdG9yRXZlbnRQYXlsb2FkLFxyXG4gICAgZmV0Y2hDb25uZWN0b3JDb21tYW5kcyxcclxuICAgIGZldGNoQ29ubmVjdG9yQ2FwYWJpbGl0aWVzLFxyXG4gICAgcmVnaXN0ZXJDb25uZWN0b3JJbkNsb3VkLFxyXG4gICAgc2VuZENvbm5lY3RvckhlYXJ0YmVhdCxcclxuICAgIHNlbmRDb25uZWN0b3JFdmVudHNcclxufSBmcm9tICcuL2Nsb3VkJztcclxuaW1wb3J0IHtcclxuICAgIGVucXVldWVDb25uZWN0b3JFdmVudHMsXHJcbiAgICBnZXRDb25uZWN0b3JRdWV1ZVN0YXRzLFxyXG4gICAgcHJ1bmVDb25uZWN0b3JRdWV1ZSxcclxuICAgIGdldFJlYWR5Q29ubmVjdG9yRXZlbnRzLFxyXG4gICAgbWFya0Nvbm5lY3RvckV2ZW50c0RlbGl2ZXJlZCxcclxuICAgIG1hcmtDb25uZWN0b3JFdmVudHNGYWlsZWRcclxufSBmcm9tICcuL2Nvbm5lY3Rvci1xdWV1ZSc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENvbm5lY3RvclJ1bnRpbWVTeW5jU3RhdHVzIHtcclxuICAgIGVuYWJsZWQ6IGJvb2xlYW47XHJcbiAgICBydW5uaW5nOiBib29sZWFuO1xyXG4gICAgbGFzdEVycm9yOiBzdHJpbmcgfCBudWxsO1xyXG4gICAgcXVldWU/OiB7XHJcbiAgICAgICAgcGVuZGluZzogbnVtYmVyO1xyXG4gICAgICAgIGluRmxpZ2h0OiBudW1iZXI7XHJcbiAgICAgICAgZmFpbGVkOiBudW1iZXI7XHJcbiAgICAgICAgZG9uZTogbnVtYmVyO1xyXG4gICAgfTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDb25uZWN0b3JSdW50aW1lT3B0aW9ucyB7XHJcbiAgICBpbnRlcnZhbE1zPzogbnVtYmVyO1xyXG4gICAgb25jZT86IGJvb2xlYW47XHJcbiAgICBhdXRvU3RhcnREYWVtb24/OiBib29sZWFuO1xyXG4gICAgcXVpZXQ/OiBib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENvbm5lY3RvclJ1bnRpbWVTdW1tYXJ5IHtcclxuICAgIHBvc3R1cmU6ICdjb25uZWN0ZWQnIHwgJ2RlZ3JhZGVkJyB8ICdvZmZsaW5lJztcclxuICAgIGRhZW1vblJ1bm5pbmc6IGJvb2xlYW47XHJcbiAgICBjbG91ZENvbm5lY3RlZDogYm9vbGVhbjtcclxuICAgIHJlZ2lzdHJhdGlvbk1vZGU6ICdub25lJyB8ICdsb2NhbCcgfCAnY2xvdWQnO1xyXG4gICAgYXV0aDogYm9vbGVhbjtcclxuICAgIG1hY2hpbmVJZDogc3RyaW5nIHwgbnVsbDtcclxuICAgIGxhc3RFcnJvcjogc3RyaW5nIHwgbnVsbDtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDb25uZWN0b3JSdW50aW1lRGVwZW5kZW5jaWVzIHtcclxuICAgIG5vdygpOiBudW1iZXI7XHJcbiAgICBsb2cobWVzc2FnZTogc3RyaW5nKTogdm9pZDtcclxuICAgIHdhcm4obWVzc2FnZTogc3RyaW5nKTogdm9pZDtcclxuICAgIGVycm9yKG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQ7XHJcbiAgICBpc0RhZW1vblJlYWNoYWJsZSgpOiBQcm9taXNlPHsgb2s6IGJvb2xlYW47IGVycm9yPzogc3RyaW5nIH0+O1xyXG4gICAgc3RhcnREYWVtb25EZXRhY2hlZCgpOiB2b2lkO1xyXG4gICAgd2FpdEZvckRhZW1vbih0aW1lb3V0TXM/OiBudW1iZXIpOiBQcm9taXNlPGJvb2xlYW4+O1xyXG4gICAgZ2V0U3luY1N0YXR1cygpOiBQcm9taXNlPENvbm5lY3RvclJ1bnRpbWVTeW5jU3RhdHVzIHwgbnVsbD47XHJcbiAgICByZXNvbHZlVG9rZW4oKTogVG9rZW5TdG9yZSB8IG51bGw7XHJcbiAgICByZWFkQ29ubmVjdG9yU3RhdGUoKTogQ29ubmVjdG9yU3RhdGUgfCBudWxsO1xyXG4gICAgcmVnaXN0ZXJDb25uZWN0b3Iob3B0aW9uczoge1xyXG4gICAgICAgIHRlbmFudElkPzogc3RyaW5nIHwgbnVsbDtcclxuICAgICAgICB1aVVybDogc3RyaW5nO1xyXG4gICAgICAgIGZvcmNlPzogYm9vbGVhbjtcclxuICAgICAgICByZWdpc3RyYXRpb25Nb2RlPzogJ2xvY2FsJyB8ICdjbG91ZCc7XHJcbiAgICAgICAgY2xvdWQ/OiB7XHJcbiAgICAgICAgICAgIHJlZ2lzdHJhdGlvbklkPzogc3RyaW5nIHwgbnVsbDtcclxuICAgICAgICAgICAgc3RyZWFtVXJsPzogc3RyaW5nIHwgbnVsbDtcclxuICAgICAgICAgICAgY2FwYWJpbGl0aWVzPzogc3RyaW5nW107XHJcbiAgICAgICAgfTtcclxuICAgIH0pOiB7IHN0YXRlOiBDb25uZWN0b3JTdGF0ZTsgY3JlYXRlZDogYm9vbGVhbiB9O1xyXG4gICAgd3JpdGVDb25uZWN0b3JTdGF0ZShzdGF0ZTogQ29ubmVjdG9yU3RhdGUpOiB2b2lkO1xyXG4gICAgZ2V0RGFzaGJvYXJkVXJsKCk6IHN0cmluZztcclxuICAgIHJlZ2lzdGVyQ29ubmVjdG9ySW5DbG91ZChcclxuICAgICAgICB0b2tlbjogc3RyaW5nLFxyXG4gICAgICAgIHBheWxvYWQ6IHtcclxuICAgICAgICAgICAgbWFjaGluZUlkOiBzdHJpbmc7XHJcbiAgICAgICAgICAgIHRlbmFudElkOiBzdHJpbmcgfCBudWxsO1xyXG4gICAgICAgICAgICB1aVVybDogc3RyaW5nO1xyXG4gICAgICAgICAgICBwbGF0Zm9ybTogc3RyaW5nO1xyXG4gICAgICAgIH1cclxuICAgICk6IFByb21pc2U8e1xyXG4gICAgICAgIG9rOiBib29sZWFuO1xyXG4gICAgICAgIGVycm9yPzogc3RyaW5nO1xyXG4gICAgICAgIGRhdGE/OiB7IHJlZ2lzdHJhdGlvbklkPzogc3RyaW5nOyBzdHJlYW1Vcmw/OiBzdHJpbmc7IGNhcGFiaWxpdGllcz86IHN0cmluZ1tdOyB0ZW5hbnRJZD86IHN0cmluZyB9O1xyXG4gICAgfT47XHJcbiAgICBmZXRjaENvbm5lY3RvckNhcGFiaWxpdGllcyhcclxuICAgICAgICB0b2tlbjogc3RyaW5nLFxyXG4gICAgICAgIG1hY2hpbmVJZDogc3RyaW5nXHJcbiAgICApOiBQcm9taXNlPHsgb2s6IGJvb2xlYW47IGVycm9yPzogc3RyaW5nOyBkYXRhPzogeyBjYXBhYmlsaXRpZXM/OiBzdHJpbmdbXTsgZmVhdHVyZXM/OiBzdHJpbmdbXSB9IH0+O1xyXG4gICAgc2VuZENvbm5lY3RvckhlYXJ0YmVhdChcclxuICAgICAgICB0b2tlbjogc3RyaW5nLFxyXG4gICAgICAgIHBheWxvYWQ6IHtcclxuICAgICAgICAgICAgbWFjaGluZUlkOiBzdHJpbmc7XHJcbiAgICAgICAgICAgIHRlbmFudElkOiBzdHJpbmcgfCBudWxsO1xyXG4gICAgICAgICAgICBwb3N0dXJlOiAnY29ubmVjdGVkJyB8ICdkZWdyYWRlZCcgfCAnb2ZmbGluZSc7XHJcbiAgICAgICAgICAgIGRhZW1vblJ1bm5pbmc6IGJvb2xlYW47XHJcbiAgICAgICAgICAgIHN5bmNFbmFibGVkOiBib29sZWFuO1xyXG4gICAgICAgICAgICBzeW5jUnVubmluZzogYm9vbGVhbjtcclxuICAgICAgICAgICAgcXVldWU/OiB7IHBlbmRpbmc6IG51bWJlcjsgaW5GbGlnaHQ6IG51bWJlcjsgZmFpbGVkOiBudW1iZXI7IGRvbmU6IG51bWJlciB9O1xyXG4gICAgICAgIH1cclxuICAgICk6IFByb21pc2U8eyBvazogYm9vbGVhbjsgZXJyb3I/OiBzdHJpbmcgfT47XHJcbiAgICBjcmVhdGVEYWVtb25TZXNzaW9uKCk6IFByb21pc2U8eyBzZXNzaW9uVG9rZW46IHN0cmluZyB9PjtcclxuICAgIHN1YnNjcmliZUV2ZW50cyhcclxuICAgICAgICBzZXNzaW9uVG9rZW46IHN0cmluZyxcclxuICAgICAgICBhZnRlclNlcXVlbmNlPzogbnVtYmVyXHJcbiAgICApOiBQcm9taXNlPHsgc3Vic2NyaXB0aW9uSWQ6IHN0cmluZzsgbGFzdEFja2VkU2VxdWVuY2U/OiBudW1iZXIgfT47XHJcbiAgICBwb2xsRXZlbnRzKFxyXG4gICAgICAgIHNlc3Npb25Ub2tlbjogc3RyaW5nLFxyXG4gICAgICAgIHN1YnNjcmlwdGlvbklkOiBzdHJpbmcsXHJcbiAgICAgICAgYWZ0ZXJTZXF1ZW5jZTogbnVtYmVyLFxyXG4gICAgICAgIGxpbWl0PzogbnVtYmVyXHJcbiAgICApOiBQcm9taXNlPHsgY3Vyc29yOiBudW1iZXI7IGV2ZW50czogQ29ubmVjdG9yRXZlbnRQYXlsb2FkW107IGhhc01vcmU/OiBib29sZWFuIH0+O1xyXG4gICAgYWNrRXZlbnRzKFxyXG4gICAgICAgIHNlc3Npb25Ub2tlbjogc3RyaW5nLFxyXG4gICAgICAgIHN1YnNjcmlwdGlvbklkOiBzdHJpbmcsXHJcbiAgICAgICAgc2VxdWVuY2U6IG51bWJlclxyXG4gICAgKTogUHJvbWlzZTx7IGxhc3RBY2tlZFNlcXVlbmNlPzogbnVtYmVyIH0+O1xyXG4gICAgc2VuZENvbm5lY3RvckV2ZW50cyhcclxuICAgICAgICB0b2tlbjogc3RyaW5nLFxyXG4gICAgICAgIHBheWxvYWQ6IHtcclxuICAgICAgICAgICAgbWFjaGluZUlkOiBzdHJpbmc7XHJcbiAgICAgICAgICAgIHRlbmFudElkOiBzdHJpbmcgfCBudWxsO1xyXG4gICAgICAgICAgICBzdWJzY3JpcHRpb25JZDogc3RyaW5nO1xyXG4gICAgICAgICAgICBjdXJzb3I6IG51bWJlcjtcclxuICAgICAgICAgICAgZXZlbnRzOiBDb25uZWN0b3JFdmVudFBheWxvYWRbXTtcclxuICAgICAgICB9XHJcbiAgICApOiBQcm9taXNlPHsgb2s6IGJvb2xlYW47IGVycm9yPzogc3RyaW5nOyBzdGF0dXNDb2RlOiBudW1iZXIgfT47XHJcbiAgICBmZXRjaENvbm5lY3RvckNvbW1hbmRzKFxyXG4gICAgICAgIHRva2VuOiBzdHJpbmcsXHJcbiAgICAgICAgbWFjaGluZUlkOiBzdHJpbmcsXHJcbiAgICAgICAgY3Vyc29yOiBudW1iZXJcclxuICAgICk6IFByb21pc2U8eyBvazogYm9vbGVhbjsgZXJyb3I/OiBzdHJpbmc7IHN0YXR1c0NvZGU6IG51bWJlcjsgZGF0YT86IHsgY3Vyc29yPzogbnVtYmVyOyBjb21tYW5kcz86IENvbm5lY3RvckNvbW1hbmRbXSB9IH0+O1xyXG4gICAgYWNrQ29ubmVjdG9yQ29tbWFuZChcclxuICAgICAgICB0b2tlbjogc3RyaW5nLFxyXG4gICAgICAgIHBheWxvYWQ6IHtcclxuICAgICAgICAgICAgbWFjaGluZUlkOiBzdHJpbmc7XHJcbiAgICAgICAgICAgIHRlbmFudElkOiBzdHJpbmcgfCBudWxsO1xyXG4gICAgICAgICAgICBjb21tYW5kSWQ6IHN0cmluZztcclxuICAgICAgICAgICAgY3Vyc29yOiBudW1iZXI7XHJcbiAgICAgICAgICAgIHN0YXR1czogJ2FwcGxpZWQnIHwgJ2ZhaWxlZCc7XHJcbiAgICAgICAgICAgIGVycm9yPzogc3RyaW5nO1xyXG4gICAgICAgIH1cclxuICAgICk6IFByb21pc2U8eyBvazogYm9vbGVhbjsgZXJyb3I/OiBzdHJpbmc7IHN0YXR1c0NvZGU6IG51bWJlciB9PjtcclxuICAgIGFwcGx5RGFlbW9uQ29tbWFuZChcclxuICAgICAgICBzZXNzaW9uVG9rZW46IHN0cmluZyxcclxuICAgICAgICBtZXRob2Q6IHN0cmluZyxcclxuICAgICAgICBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+XHJcbiAgICApOiBQcm9taXNlPHVua25vd24+O1xyXG4gICAgZ2V0Q29udGV4dFN5bmNQb2xpY3koXHJcbiAgICAgICAgc2Vzc2lvblRva2VuOiBzdHJpbmcsXHJcbiAgICAgICAgY29udGV4dElkOiBzdHJpbmdcclxuICAgICk6IFByb21pc2U8J2xvY2FsX29ubHknIHwgJ21ldGFkYXRhX29ubHknIHwgJ2Z1bGxfc3luYycgfCBudWxsPjtcclxuICAgIGVucXVldWVFdmVudHMoXHJcbiAgICAgICAgc3Vic2NyaXB0aW9uSWQ6IHN0cmluZyxcclxuICAgICAgICBldmVudHM6IENvbm5lY3RvckV2ZW50UGF5bG9hZFtdLFxyXG4gICAgICAgIG5vdzogbnVtYmVyXHJcbiAgICApOiB7IGVucXVldWVkOiBudW1iZXI7IGxhc3RTZXF1ZW5jZTogbnVtYmVyIHwgbnVsbCB9O1xyXG4gICAgZ2V0UmVhZHlFdmVudHMobGltaXQ6IG51bWJlciwgbm93OiBudW1iZXIpOiBBcnJheTx7XHJcbiAgICAgICAgcXVldWVJZDogc3RyaW5nO1xyXG4gICAgICAgIGV2ZW50SWQ6IHN0cmluZztcclxuICAgICAgICBzdWJzY3JpcHRpb25JZDogc3RyaW5nO1xyXG4gICAgICAgIHNlcXVlbmNlOiBudW1iZXI7XHJcbiAgICAgICAgY29udGV4dElkOiBzdHJpbmcgfCBudWxsO1xyXG4gICAgICAgIHR5cGU6IHN0cmluZztcclxuICAgICAgICB0aW1lc3RhbXA6IG51bWJlcjtcclxuICAgICAgICBzb3VyY2U6IHN0cmluZztcclxuICAgICAgICBwYXlsb2FkOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcclxuICAgIH0+O1xyXG4gICAgbWFya0V2ZW50c0RlbGl2ZXJlZChxdWV1ZUlkczogc3RyaW5nW10pOiB2b2lkO1xyXG4gICAgbWFya0V2ZW50c0ZhaWxlZChxdWV1ZUlkczogc3RyaW5nW10sIGVycm9yOiBzdHJpbmcsIG5vdzogbnVtYmVyKTogdm9pZDtcclxuICAgIGdldFF1ZXVlU3RhdHMobm93OiBudW1iZXIpOiB7XHJcbiAgICAgICAgcGVuZGluZzogbnVtYmVyO1xyXG4gICAgICAgIHJlYWR5OiBudW1iZXI7XHJcbiAgICAgICAgYmFja29mZjogbnVtYmVyO1xyXG4gICAgICAgIG1heEF0dGVtcHRzOiBudW1iZXI7XHJcbiAgICAgICAgb2xkZXN0RW5xdWV1ZWRBdDogbnVtYmVyIHwgbnVsbDtcclxuICAgIH07XHJcbiAgICBwcnVuZVF1ZXVlKG5vdzogbnVtYmVyKTogeyByZW1vdmVkOiBudW1iZXI7IHJlbWFpbmluZzogbnVtYmVyIH07XHJcbn1cclxuXHJcbmNvbnN0IERFRkFVTFRfSU5URVJWQUxfTVMgPSAzMF8wMDA7XHJcbmNvbnN0IE1JTl9JTlRFUlZBTF9NUyA9IDVfMDAwO1xyXG5jb25zdCBDTE9VRF9DT01NQU5EX01FVEhPRF9BTExPV0xJU1QgPSBuZXcgU2V0KFtcclxuICAgICdhZGROb2RlJyxcclxuICAgICd1cGRhdGVOb2RlJyxcclxuICAgICdkZWxldGVOb2RlJyxcclxuICAgICdhZGRFZGdlJyxcclxuICAgICdzYXZlQ2hlY2twb2ludCcsXHJcbiAgICAncmVzb2x2ZUdhdGUnLFxyXG4gICAgJ3NldFN5bmNQb2xpY3knXHJcbl0pO1xyXG5cclxuZnVuY3Rpb24gcmVzb2x2ZURhZW1vbkVudHJ5cG9pbnQoKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGNhbmRpZGF0ZXMgPSBbXHJcbiAgICAgICAgcGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCksICdwYWNrYWdlcycsICdkYWVtb24nLCAnZGlzdCcsICdpbmRleC5qcycpLFxyXG4gICAgICAgIHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsICcuLicsICcuLicsICdkYWVtb24nLCAnZGlzdCcsICdpbmRleC5qcycpLFxyXG4gICAgICAgICgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVxdWlyZS5yZXNvbHZlKCdAMGN0eC9kYWVtb24vZGlzdC9pbmRleC5qcycpO1xyXG4gICAgICAgICAgICB9IGNhdGNoIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAnJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pKClcclxuICAgIF0uZmlsdGVyKEJvb2xlYW4pO1xyXG5cclxuICAgIGZvciAoY29uc3QgY2FuZGlkYXRlIG9mIGNhbmRpZGF0ZXMpIHtcclxuICAgICAgICBpZiAoZnMuZXhpc3RzU3luYyhjYW5kaWRhdGUpKSByZXR1cm4gY2FuZGlkYXRlO1xyXG4gICAgfVxyXG5cclxuICAgIHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IHJlc29sdmUgZGFlbW9uIGVudHJ5cG9pbnQuIFJ1biBgbnBtIHJ1biBidWlsZGAgZmlyc3QuJyk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRIb3N0ZWREYXNoYm9hcmRVcmwoKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGNvbmZpZ3VyZWQgPSBnZXRDb25maWdWYWx1ZSgndWkudXJsJyk7XHJcbiAgICBpZiAodHlwZW9mIGNvbmZpZ3VyZWQgPT09ICdzdHJpbmcnICYmIGNvbmZpZ3VyZWQudHJpbSgpLmxlbmd0aCA+IDApIHtcclxuICAgICAgICByZXR1cm4gY29uZmlndXJlZC50cmltKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gJ2h0dHBzOi8vYXBwLjBjdHguY29tJztcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0RGFlbW9uRGV0YWNoZWQoKTogdm9pZCB7XHJcbiAgICBjb25zdCBlbnRyeSA9IHJlc29sdmVEYWVtb25FbnRyeXBvaW50KCk7XHJcbiAgICBjb25zdCBjaGlsZCA9IHNwYXduKHByb2Nlc3MuZXhlY1BhdGgsIFtlbnRyeV0sIHtcclxuICAgICAgICBkZXRhY2hlZDogdHJ1ZSxcclxuICAgICAgICBzdGRpbzogJ2lnbm9yZSdcclxuICAgIH0pO1xyXG4gICAgY2hpbGQudW5yZWYoKTtcclxufVxyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGlzRGFlbW9uUmVhY2hhYmxlKCk6IFByb21pc2U8eyBvazogYm9vbGVhbjsgZXJyb3I/OiBzdHJpbmcgfT4ge1xyXG4gICAgdHJ5IHtcclxuICAgICAgICBhd2FpdCBzZW5kVG9EYWVtb24oJ2hlYWx0aCcsIHt9KTtcclxuICAgICAgICByZXR1cm4geyBvazogdHJ1ZSB9O1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBvazogZmFsc2UsXHJcbiAgICAgICAgICAgIGVycm9yOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcilcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd2FpdEZvckRhZW1vbih0aW1lb3V0TXMgPSAxMF8wMDApOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcclxuICAgIHdoaWxlIChEYXRlLm5vdygpIC0gc3RhcnQgPCB0aW1lb3V0TXMpIHtcclxuICAgICAgICBjb25zdCBzdGF0dXMgPSBhd2FpdCBpc0RhZW1vblJlYWNoYWJsZSgpO1xyXG4gICAgICAgIGlmIChzdGF0dXMub2spIHJldHVybiB0cnVlO1xyXG4gICAgICAgIGF3YWl0IHNsZWVwKDMwMCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbn1cclxuXHJcbmFzeW5jIGZ1bmN0aW9uIGdldFN5bmNTdGF0dXMoKTogUHJvbWlzZTxDb25uZWN0b3JSdW50aW1lU3luY1N0YXR1cyB8IG51bGw+IHtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgY29uc3Qgc3luYyA9IGF3YWl0IHNlbmRUb0RhZW1vbignc3luY1N0YXR1cycsIHt9KSBhcyBDb25uZWN0b3JSdW50aW1lU3luY1N0YXR1cztcclxuICAgICAgICByZXR1cm4gc3luYztcclxuICAgIH0gY2F0Y2gge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG59XHJcblxyXG5hc3luYyBmdW5jdGlvbiBjcmVhdGVEYWVtb25TZXNzaW9uKCk6IFByb21pc2U8eyBzZXNzaW9uVG9rZW46IHN0cmluZyB9PiB7XHJcbiAgICBjb25zdCBzZXNzaW9uID0gYXdhaXQgc2VuZFRvRGFlbW9uKCdjcmVhdGVTZXNzaW9uJywge30pIGFzIHsgc2Vzc2lvblRva2VuPzogc3RyaW5nIH07XHJcbiAgICBpZiAoIXNlc3Npb24/LnNlc3Npb25Ub2tlbikge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignY3JlYXRlU2Vzc2lvbiByZXR1cm5lZCBubyBzZXNzaW9uVG9rZW4nKTtcclxuICAgIH1cclxuICAgIHJldHVybiB7IHNlc3Npb25Ub2tlbjogc2Vzc2lvbi5zZXNzaW9uVG9rZW4gfTtcclxufVxyXG5cclxuYXN5bmMgZnVuY3Rpb24gc3Vic2NyaWJlRXZlbnRzKFxyXG4gICAgc2Vzc2lvblRva2VuOiBzdHJpbmcsXHJcbiAgICBhZnRlclNlcXVlbmNlID0gMFxyXG4pOiBQcm9taXNlPHsgc3Vic2NyaXB0aW9uSWQ6IHN0cmluZzsgbGFzdEFja2VkU2VxdWVuY2U/OiBudW1iZXIgfT4ge1xyXG4gICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gYXdhaXQgc2VuZFRvRGFlbW9uKFxyXG4gICAgICAgICdzdWJzY3JpYmVFdmVudHMnLFxyXG4gICAgICAgIHsgYWZ0ZXJTZXF1ZW5jZSB9LFxyXG4gICAgICAgIHsgc2Vzc2lvblRva2VuIH1cclxuICAgICkgYXMgeyBzdWJzY3JpcHRpb25JZD86IHN0cmluZzsgbGFzdEFja2VkU2VxdWVuY2U/OiBudW1iZXIgfTtcclxuICAgIGlmICghc3Vic2NyaXB0aW9uPy5zdWJzY3JpcHRpb25JZCkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignc3Vic2NyaWJlRXZlbnRzIHJldHVybmVkIG5vIHN1YnNjcmlwdGlvbklkJyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHN1YnNjcmlwdGlvbklkOiBzdWJzY3JpcHRpb24uc3Vic2NyaXB0aW9uSWQsXHJcbiAgICAgICAgbGFzdEFja2VkU2VxdWVuY2U6IHN1YnNjcmlwdGlvbi5sYXN0QWNrZWRTZXF1ZW5jZVxyXG4gICAgfTtcclxufVxyXG5cclxuYXN5bmMgZnVuY3Rpb24gcG9sbEV2ZW50cyhcclxuICAgIHNlc3Npb25Ub2tlbjogc3RyaW5nLFxyXG4gICAgc3Vic2NyaXB0aW9uSWQ6IHN0cmluZyxcclxuICAgIGFmdGVyU2VxdWVuY2U6IG51bWJlcixcclxuICAgIGxpbWl0ID0gMjAwXHJcbik6IFByb21pc2U8eyBjdXJzb3I6IG51bWJlcjsgZXZlbnRzOiBDb25uZWN0b3JFdmVudFBheWxvYWRbXTsgaGFzTW9yZT86IGJvb2xlYW4gfT4ge1xyXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc2VuZFRvRGFlbW9uKFxyXG4gICAgICAgICdwb2xsRXZlbnRzJyxcclxuICAgICAgICB7IHN1YnNjcmlwdGlvbklkLCBhZnRlclNlcXVlbmNlLCBsaW1pdCB9LFxyXG4gICAgICAgIHsgc2Vzc2lvblRva2VuIH1cclxuICAgICkgYXMgeyBjdXJzb3I/OiBudW1iZXI7IGV2ZW50cz86IENvbm5lY3RvckV2ZW50UGF5bG9hZFtdOyBoYXNNb3JlPzogYm9vbGVhbiB9O1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBjdXJzb3I6IHR5cGVvZiByZXN1bHQ/LmN1cnNvciA9PT0gJ251bWJlcicgPyByZXN1bHQuY3Vyc29yIDogYWZ0ZXJTZXF1ZW5jZSxcclxuICAgICAgICBldmVudHM6IEFycmF5LmlzQXJyYXkocmVzdWx0Py5ldmVudHMpID8gcmVzdWx0LmV2ZW50cyA6IFtdLFxyXG4gICAgICAgIGhhc01vcmU6IHJlc3VsdD8uaGFzTW9yZVxyXG4gICAgfTtcclxufVxyXG5cclxuYXN5bmMgZnVuY3Rpb24gYWNrRXZlbnRzKFxyXG4gICAgc2Vzc2lvblRva2VuOiBzdHJpbmcsXHJcbiAgICBzdWJzY3JpcHRpb25JZDogc3RyaW5nLFxyXG4gICAgc2VxdWVuY2U6IG51bWJlclxyXG4pOiBQcm9taXNlPHsgbGFzdEFja2VkU2VxdWVuY2U/OiBudW1iZXIgfT4ge1xyXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc2VuZFRvRGFlbW9uKFxyXG4gICAgICAgICdhY2tFdmVudCcsXHJcbiAgICAgICAgeyBzdWJzY3JpcHRpb25JZCwgc2VxdWVuY2UgfSxcclxuICAgICAgICB7IHNlc3Npb25Ub2tlbiB9XHJcbiAgICApIGFzIHsgbGFzdEFja2VkU2VxdWVuY2U/OiBudW1iZXIgfTtcclxuICAgIHJldHVybiByZXN1bHQgPz8ge307XHJcbn1cclxuXHJcbmFzeW5jIGZ1bmN0aW9uIGFwcGx5RGFlbW9uQ29tbWFuZChcclxuICAgIHNlc3Npb25Ub2tlbjogc3RyaW5nLFxyXG4gICAgbWV0aG9kOiBzdHJpbmcsXHJcbiAgICBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+XHJcbik6IFByb21pc2U8dW5rbm93bj4ge1xyXG4gICAgcmV0dXJuIHNlbmRUb0RhZW1vbihtZXRob2QsIHBhcmFtcywgeyBzZXNzaW9uVG9rZW4gfSk7XHJcbn1cclxuXHJcbmFzeW5jIGZ1bmN0aW9uIGdldENvbnRleHRTeW5jUG9saWN5KFxyXG4gICAgc2Vzc2lvblRva2VuOiBzdHJpbmcsXHJcbiAgICBjb250ZXh0SWQ6IHN0cmluZ1xyXG4pOiBQcm9taXNlPCdsb2NhbF9vbmx5JyB8ICdtZXRhZGF0YV9vbmx5JyB8ICdmdWxsX3N5bmMnIHwgbnVsbD4ge1xyXG4gICAgdHJ5IHtcclxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzZW5kVG9EYWVtb24oXHJcbiAgICAgICAgICAgICdnZXRTeW5jUG9saWN5JyxcclxuICAgICAgICAgICAgeyBjb250ZXh0SWQgfSxcclxuICAgICAgICAgICAgeyBzZXNzaW9uVG9rZW4gfVxyXG4gICAgICAgICkgYXMgeyBzeW5jUG9saWN5Pzogc3RyaW5nIH07XHJcbiAgICAgICAgaWYgKHJlc3VsdC5zeW5jUG9saWN5ID09PSAnbG9jYWxfb25seScgfHwgcmVzdWx0LnN5bmNQb2xpY3kgPT09ICdtZXRhZGF0YV9vbmx5JyB8fCByZXN1bHQuc3luY1BvbGljeSA9PT0gJ2Z1bGxfc3luYycpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5zeW5jUG9saWN5O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH0gY2F0Y2gge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiByZWRhY3RFdmVudEZvck1ldGFkYXRhT25seShldmVudDogQ29ubmVjdG9yRXZlbnRQYXlsb2FkKTogQ29ubmVjdG9yRXZlbnRQYXlsb2FkIHtcclxuICAgIGNvbnN0IHBheWxvYWQgPSBldmVudC5wYXlsb2FkID8/IHt9O1xyXG4gICAgY29uc3QgbWV0aG9kID0gdHlwZW9mIHBheWxvYWQubWV0aG9kID09PSAnc3RyaW5nJyA/IHBheWxvYWQubWV0aG9kIDogbnVsbDtcclxuICAgIGNvbnN0IHJlc3VsdCA9IHR5cGVvZiBwYXlsb2FkLnJlc3VsdCA9PT0gJ29iamVjdCcgJiYgcGF5bG9hZC5yZXN1bHQgIT09IG51bGxcclxuICAgICAgICA/IHBheWxvYWQucmVzdWx0IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+XHJcbiAgICAgICAgOiBudWxsO1xyXG4gICAgY29uc3QgY29udGV4dElkID0gdHlwZW9mIHBheWxvYWQuY29udGV4dElkID09PSAnc3RyaW5nJyA/IHBheWxvYWQuY29udGV4dElkIDogbnVsbDtcclxuICAgIGNvbnN0IGlkID0gdHlwZW9mIHBheWxvYWQuaWQgPT09ICdzdHJpbmcnID8gcGF5bG9hZC5pZCA6IG51bGw7XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBldmVudElkOiBldmVudC5ldmVudElkLFxyXG4gICAgICAgIHNlcXVlbmNlOiBldmVudC5zZXF1ZW5jZSxcclxuICAgICAgICBjb250ZXh0SWQ6IGV2ZW50LmNvbnRleHRJZCxcclxuICAgICAgICB0eXBlOiBldmVudC50eXBlLFxyXG4gICAgICAgIHRpbWVzdGFtcDogZXZlbnQudGltZXN0YW1wLFxyXG4gICAgICAgIHNvdXJjZTogZXZlbnQuc291cmNlLFxyXG4gICAgICAgIHBheWxvYWQ6IHtcclxuICAgICAgICAgICAgbW9kZTogJ21ldGFkYXRhX29ubHknLFxyXG4gICAgICAgICAgICAuLi4obWV0aG9kID8geyBtZXRob2QgfSA6IHt9KSxcclxuICAgICAgICAgICAgLi4uKGNvbnRleHRJZCA/IHsgY29udGV4dElkIH0gOiB7fSksXHJcbiAgICAgICAgICAgIC4uLihpZCA/IHsgaWQgfSA6IHt9KSxcclxuICAgICAgICAgICAgLi4uKHJlc3VsdCA/IHsgcmVzdWx0IH0gOiB7fSlcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc01ldGhvZEFsbG93ZWRGb3JDbG91ZENvbW1hbmQobWV0aG9kOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBDTE9VRF9DT01NQU5EX01FVEhPRF9BTExPV0xJU1QuaGFzKG1ldGhvZCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHNsZWVwKG1zOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKTtcclxufVxyXG5cclxuZnVuY3Rpb24gbm9ybWFsaXplSW50ZXJ2YWxNcyhpbnRlcnZhbE1zOiBudW1iZXIgfCB1bmRlZmluZWQpOiBudW1iZXIge1xyXG4gICAgaWYgKCFpbnRlcnZhbE1zIHx8ICFOdW1iZXIuaXNGaW5pdGUoaW50ZXJ2YWxNcykpIHJldHVybiBERUZBVUxUX0lOVEVSVkFMX01TO1xyXG4gICAgcmV0dXJuIE1hdGgubWF4KE1JTl9JTlRFUlZBTF9NUywgaW50ZXJ2YWxNcyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldFJ1bnRpbWVEZXBlbmRlbmNpZXMoKTogQ29ubmVjdG9yUnVudGltZURlcGVuZGVuY2llcyB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIG5vdzogKCkgPT4gRGF0ZS5ub3coKSxcclxuICAgICAgICBsb2c6IChtZXNzYWdlKSA9PiBjb25zb2xlLmxvZyhtZXNzYWdlKSxcclxuICAgICAgICB3YXJuOiAobWVzc2FnZSkgPT4gY29uc29sZS53YXJuKG1lc3NhZ2UpLFxyXG4gICAgICAgIGVycm9yOiAobWVzc2FnZSkgPT4gY29uc29sZS5lcnJvcihtZXNzYWdlKSxcclxuICAgICAgICBpc0RhZW1vblJlYWNoYWJsZSxcclxuICAgICAgICBzdGFydERhZW1vbkRldGFjaGVkLFxyXG4gICAgICAgIHdhaXRGb3JEYWVtb24sXHJcbiAgICAgICAgZ2V0U3luY1N0YXR1cyxcclxuICAgICAgICByZXNvbHZlVG9rZW4sXHJcbiAgICAgICAgcmVhZENvbm5lY3RvclN0YXRlLFxyXG4gICAgICAgIHJlZ2lzdGVyQ29ubmVjdG9yLFxyXG4gICAgICAgIHdyaXRlQ29ubmVjdG9yU3RhdGUsXHJcbiAgICAgICAgZ2V0RGFzaGJvYXJkVXJsOiBnZXRIb3N0ZWREYXNoYm9hcmRVcmwsXHJcbiAgICAgICAgcmVnaXN0ZXJDb25uZWN0b3JJbkNsb3VkLFxyXG4gICAgICAgIGZldGNoQ29ubmVjdG9yQ2FwYWJpbGl0aWVzLFxyXG4gICAgICAgIHNlbmRDb25uZWN0b3JIZWFydGJlYXQsXHJcbiAgICAgICAgY3JlYXRlRGFlbW9uU2Vzc2lvbixcclxuICAgICAgICBzdWJzY3JpYmVFdmVudHMsXHJcbiAgICAgICAgcG9sbEV2ZW50cyxcclxuICAgICAgICBhY2tFdmVudHMsXHJcbiAgICAgICAgc2VuZENvbm5lY3RvckV2ZW50cyxcclxuICAgICAgICBmZXRjaENvbm5lY3RvckNvbW1hbmRzLFxyXG4gICAgICAgIGFja0Nvbm5lY3RvckNvbW1hbmQsXHJcbiAgICAgICAgYXBwbHlEYWVtb25Db21tYW5kLFxyXG4gICAgICAgIGdldENvbnRleHRTeW5jUG9saWN5LFxyXG4gICAgICAgIGVucXVldWVFdmVudHM6IChzdWJzY3JpcHRpb25JZCwgZXZlbnRzLCBub3cpID0+IGVucXVldWVDb25uZWN0b3JFdmVudHMoc3Vic2NyaXB0aW9uSWQsIGV2ZW50cywgbm93KSxcclxuICAgICAgICBnZXRSZWFkeUV2ZW50czogKGxpbWl0LCBub3cpID0+IGdldFJlYWR5Q29ubmVjdG9yRXZlbnRzKGxpbWl0LCBub3cpLFxyXG4gICAgICAgIG1hcmtFdmVudHNEZWxpdmVyZWQ6IChxdWV1ZUlkcykgPT4gbWFya0Nvbm5lY3RvckV2ZW50c0RlbGl2ZXJlZChxdWV1ZUlkcyksXHJcbiAgICAgICAgbWFya0V2ZW50c0ZhaWxlZDogKHF1ZXVlSWRzLCBlcnJvciwgbm93KSA9PiBtYXJrQ29ubmVjdG9yRXZlbnRzRmFpbGVkKHF1ZXVlSWRzLCBlcnJvciwgbm93KSxcclxuICAgICAgICBnZXRRdWV1ZVN0YXRzOiAobm93KSA9PiBnZXRDb25uZWN0b3JRdWV1ZVN0YXRzKG5vdyksXHJcbiAgICAgICAgcHJ1bmVRdWV1ZTogKG5vdykgPT4gcHJ1bmVDb25uZWN0b3JRdWV1ZSh7IG5vdyB9KVxyXG4gICAgfTtcclxufVxyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bkNvbm5lY3RvclJ1bnRpbWVDeWNsZShcclxuICAgIG9wdGlvbnM6IENvbm5lY3RvclJ1bnRpbWVPcHRpb25zID0ge30sXHJcbiAgICBkZXBzOiBDb25uZWN0b3JSdW50aW1lRGVwZW5kZW5jaWVzID0gZ2V0UnVudGltZURlcGVuZGVuY2llcygpXHJcbik6IFByb21pc2U8Q29ubmVjdG9yUnVudGltZVN1bW1hcnk+IHtcclxuICAgIGNvbnN0IGF1dG9TdGFydERhZW1vbiA9IG9wdGlvbnMuYXV0b1N0YXJ0RGFlbW9uICE9PSBmYWxzZTtcclxuICAgIGxldCBkYWVtb24gPSBhd2FpdCBkZXBzLmlzRGFlbW9uUmVhY2hhYmxlKCk7XHJcbiAgICBsZXQgbGFzdEVycm9yOiBzdHJpbmcgfCBudWxsID0gZGFlbW9uLm9rID8gbnVsbCA6IChkYWVtb24uZXJyb3IgPz8gJ2RhZW1vbl91bnJlYWNoYWJsZScpO1xyXG5cclxuICAgIGlmICghZGFlbW9uLm9rICYmIGF1dG9TdGFydERhZW1vbikge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGRlcHMuc3RhcnREYWVtb25EZXRhY2hlZCgpO1xyXG4gICAgICAgICAgICBjb25zdCByZWFkeSA9IGF3YWl0IGRlcHMud2FpdEZvckRhZW1vbig4XzAwMCk7XHJcbiAgICAgICAgICAgIGRhZW1vbiA9IHJlYWR5ID8gYXdhaXQgZGVwcy5pc0RhZW1vblJlYWNoYWJsZSgpIDogeyBvazogZmFsc2UsIGVycm9yOiAnZGFlbW9uX3N0YXJ0X3RpbWVvdXQnIH07XHJcbiAgICAgICAgICAgIGxhc3RFcnJvciA9IGRhZW1vbi5vayA/IG51bGwgOiAoZGFlbW9uLmVycm9yID8/ICdkYWVtb25fc3RhcnRfZmFpbGVkJyk7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgbGFzdEVycm9yID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0b2tlbiA9IGRlcHMucmVzb2x2ZVRva2VuKCk7XHJcbiAgICBsZXQgcmVnaXN0cmF0aW9uID0gZGVwcy5yZWFkQ29ubmVjdG9yU3RhdGUoKTtcclxuICAgIGNvbnN0IGRhc2hib2FyZFVybCA9IGRlcHMuZ2V0RGFzaGJvYXJkVXJsKCk7XHJcblxyXG4gICAgaWYgKHRva2VuICYmICFyZWdpc3RyYXRpb24pIHtcclxuICAgICAgICBjb25zdCBjcmVhdGVkID0gZGVwcy5yZWdpc3RlckNvbm5lY3Rvcih7XHJcbiAgICAgICAgICAgIHRlbmFudElkOiB0b2tlbi50ZW5hbnRJZCB8fCBudWxsLFxyXG4gICAgICAgICAgICB1aVVybDogZGFzaGJvYXJkVXJsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmVnaXN0cmF0aW9uID0gY3JlYXRlZC5zdGF0ZTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgc3luYzogQ29ubmVjdG9yUnVudGltZVN5bmNTdGF0dXMgfCBudWxsID0gbnVsbDtcclxuICAgIGlmIChkYWVtb24ub2spIHtcclxuICAgICAgICBzeW5jID0gYXdhaXQgZGVwcy5nZXRTeW5jU3RhdHVzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGNsb3VkQ29ubmVjdGVkID0gZmFsc2U7XHJcbiAgICBpZiAocmVnaXN0cmF0aW9uICYmIHRva2VuKSB7XHJcbiAgICAgICAgZGVwcy5wcnVuZVF1ZXVlKGRlcHMubm93KCkpO1xyXG5cclxuICAgICAgICBpZiAocmVnaXN0cmF0aW9uLnJlZ2lzdHJhdGlvbk1vZGUgIT09ICdjbG91ZCcpIHtcclxuICAgICAgICAgICAgY29uc3QgY2xvdWRSZWdpc3RyYXRpb24gPSBhd2FpdCBkZXBzLnJlZ2lzdGVyQ29ubmVjdG9ySW5DbG91ZCh0b2tlbi5hY2Nlc3NUb2tlbiwge1xyXG4gICAgICAgICAgICAgICAgbWFjaGluZUlkOiByZWdpc3RyYXRpb24ubWFjaGluZUlkLFxyXG4gICAgICAgICAgICAgICAgdGVuYW50SWQ6IHJlZ2lzdHJhdGlvbi50ZW5hbnRJZCxcclxuICAgICAgICAgICAgICAgIHVpVXJsOiByZWdpc3RyYXRpb24udWlVcmwgfHwgZGFzaGJvYXJkVXJsLFxyXG4gICAgICAgICAgICAgICAgcGxhdGZvcm06IG9zLnBsYXRmb3JtKClcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoY2xvdWRSZWdpc3RyYXRpb24ub2spIHtcclxuICAgICAgICAgICAgICAgIHJlZ2lzdHJhdGlvbiA9IHtcclxuICAgICAgICAgICAgICAgICAgICAuLi5yZWdpc3RyYXRpb24sXHJcbiAgICAgICAgICAgICAgICAgICAgdGVuYW50SWQ6IGNsb3VkUmVnaXN0cmF0aW9uLmRhdGE/LnRlbmFudElkID8/IHJlZ2lzdHJhdGlvbi50ZW5hbnRJZCxcclxuICAgICAgICAgICAgICAgICAgICByZWdpc3RyYXRpb25Nb2RlOiAnY2xvdWQnLFxyXG4gICAgICAgICAgICAgICAgICAgIGNsb3VkOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdHJhdGlvbklkOiBjbG91ZFJlZ2lzdHJhdGlvbi5kYXRhPy5yZWdpc3RyYXRpb25JZCA/PyByZWdpc3RyYXRpb24uY2xvdWQucmVnaXN0cmF0aW9uSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbVVybDogY2xvdWRSZWdpc3RyYXRpb24uZGF0YT8uc3RyZWFtVXJsID8/IHJlZ2lzdHJhdGlvbi5jbG91ZC5zdHJlYW1VcmwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhcGFiaWxpdGllczogY2xvdWRSZWdpc3RyYXRpb24uZGF0YT8uY2FwYWJpbGl0aWVzID8/IHJlZ2lzdHJhdGlvbi5jbG91ZC5jYXBhYmlsaXRpZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RIZWFydGJlYXRBdDogcmVnaXN0cmF0aW9uLmNsb3VkLmxhc3RIZWFydGJlYXRBdCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGFzdEVycm9yOiBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGxhc3RFcnJvciA9IGNsb3VkUmVnaXN0cmF0aW9uLmVycm9yID8/ICdjbG91ZF9yZWdpc3RyYXRpb25fZmFpbGVkJztcclxuICAgICAgICAgICAgICAgIHJlZ2lzdHJhdGlvbiA9IHtcclxuICAgICAgICAgICAgICAgICAgICAuLi5yZWdpc3RyYXRpb24sXHJcbiAgICAgICAgICAgICAgICAgICAgcmVnaXN0cmF0aW9uTW9kZTogJ2xvY2FsJyxcclxuICAgICAgICAgICAgICAgICAgICBjbG91ZDoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5yZWdpc3RyYXRpb24uY2xvdWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RFcnJvclxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChyZWdpc3RyYXRpb24ucmVnaXN0cmF0aW9uTW9kZSA9PT0gJ2Nsb3VkJykge1xyXG4gICAgICAgICAgICBjb25zdCBjYXBhYmlsaXRpZXNSZXN1bHQgPSBhd2FpdCBkZXBzLmZldGNoQ29ubmVjdG9yQ2FwYWJpbGl0aWVzKHRva2VuLmFjY2Vzc1Rva2VuLCByZWdpc3RyYXRpb24ubWFjaGluZUlkKTtcclxuICAgICAgICAgICAgaWYgKGNhcGFiaWxpdGllc1Jlc3VsdC5vaykge1xyXG4gICAgICAgICAgICAgICAgcmVnaXN0cmF0aW9uLmNsb3VkLmNhcGFiaWxpdGllcyA9IGNhcGFiaWxpdGllc1Jlc3VsdC5kYXRhPy5jYXBhYmlsaXRpZXNcclxuICAgICAgICAgICAgICAgICAgICA/PyBjYXBhYmlsaXRpZXNSZXN1bHQuZGF0YT8uZmVhdHVyZXNcclxuICAgICAgICAgICAgICAgICAgICA/PyByZWdpc3RyYXRpb24uY2xvdWQuY2FwYWJpbGl0aWVzO1xyXG4gICAgICAgICAgICAgICAgY2xvdWRDb25uZWN0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgbGFzdEVycm9yID0gbnVsbDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGxhc3RFcnJvciA9IGNhcGFiaWxpdGllc1Jlc3VsdC5lcnJvciA/PyAnY2xvdWRfY2FwYWJpbGl0aWVzX2ZhaWxlZCc7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHBvc3R1cmVGb3JIZWFydGJlYXQ6ICdjb25uZWN0ZWQnIHwgJ2RlZ3JhZGVkJyB8ICdvZmZsaW5lJyA9IGRhZW1vbi5vayA/ICdjb25uZWN0ZWQnIDogJ29mZmxpbmUnO1xyXG4gICAgICAgICAgICBjb25zdCBoZWFydGJlYXRSZXN1bHQgPSBhd2FpdCBkZXBzLnNlbmRDb25uZWN0b3JIZWFydGJlYXQodG9rZW4uYWNjZXNzVG9rZW4sIHtcclxuICAgICAgICAgICAgICAgIG1hY2hpbmVJZDogcmVnaXN0cmF0aW9uLm1hY2hpbmVJZCxcclxuICAgICAgICAgICAgICAgIHRlbmFudElkOiByZWdpc3RyYXRpb24udGVuYW50SWQsXHJcbiAgICAgICAgICAgICAgICBwb3N0dXJlOiBwb3N0dXJlRm9ySGVhcnRiZWF0LFxyXG4gICAgICAgICAgICAgICAgZGFlbW9uUnVubmluZzogZGFlbW9uLm9rLFxyXG4gICAgICAgICAgICAgICAgc3luY0VuYWJsZWQ6IEJvb2xlYW4oc3luYz8uZW5hYmxlZCksXHJcbiAgICAgICAgICAgICAgICBzeW5jUnVubmluZzogQm9vbGVhbihzeW5jPy5ydW5uaW5nKSxcclxuICAgICAgICAgICAgICAgIHF1ZXVlOiBzeW5jPy5xdWV1ZVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIGlmIChoZWFydGJlYXRSZXN1bHQub2spIHtcclxuICAgICAgICAgICAgICAgIGNsb3VkQ29ubmVjdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHJlZ2lzdHJhdGlvbi5jbG91ZC5sYXN0SGVhcnRiZWF0QXQgPSBkZXBzLm5vdygpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGxhc3RFcnJvciA9PT0gJ2Nsb3VkX2NhcGFiaWxpdGllc19mYWlsZWQnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGFzdEVycm9yID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGxhc3RFcnJvciA9IGhlYXJ0YmVhdFJlc3VsdC5lcnJvciA/PyBsYXN0RXJyb3IgPz8gJ2Nsb3VkX2hlYXJ0YmVhdF9mYWlsZWQnO1xyXG4gICAgICAgICAgICAgICAgY2xvdWRDb25uZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IGRhZW1vblNlc3Npb25Ub2tlbiA9IHJlZ2lzdHJhdGlvbi5ydW50aW1lLmRhZW1vblNlc3Npb25Ub2tlbjtcclxuICAgICAgICAgICAgaWYgKGRhZW1vbi5vayAmJiAocmVnaXN0cmF0aW9uLnJ1bnRpbWUuZXZlbnRCcmlkZ2VTdXBwb3J0ZWQgfHwgcmVnaXN0cmF0aW9uLnJ1bnRpbWUuY29tbWFuZEJyaWRnZVN1cHBvcnRlZCkgJiYgIWRhZW1vblNlc3Npb25Ub2tlbikge1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzZXNzaW9uID0gYXdhaXQgZGVwcy5jcmVhdGVEYWVtb25TZXNzaW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgZGFlbW9uU2Vzc2lvblRva2VuID0gc2Vzc2lvbi5zZXNzaW9uVG9rZW47XHJcbiAgICAgICAgICAgICAgICAgICAgcmVnaXN0cmF0aW9uLnJ1bnRpbWUuZGFlbW9uU2Vzc2lvblRva2VuID0gZGFlbW9uU2Vzc2lvblRva2VuO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlZ2lzdHJhdGlvbi5ydW50aW1lLmV2ZW50U3Vic2NyaXB0aW9uSWQgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlZ2lzdHJhdGlvbi5ydW50aW1lLmV2ZW50QnJpZGdlRXJyb3IgPSBtZXNzYWdlO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlZ2lzdHJhdGlvbi5ydW50aW1lLmNvbW1hbmRCcmlkZ2VFcnJvciA9IG1lc3NhZ2U7XHJcbiAgICAgICAgICAgICAgICAgICAgbGFzdEVycm9yID0gbWVzc2FnZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGRhZW1vbi5vayAmJiByZWdpc3RyYXRpb24ucnVudGltZS5ldmVudEJyaWRnZVN1cHBvcnRlZCkge1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWRhZW1vblNlc3Npb25Ub2tlbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2RhZW1vbl9zZXNzaW9uX3VuYXZhaWxhYmxlJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXJlZ2lzdHJhdGlvbi5ydW50aW1lLmV2ZW50U3Vic2NyaXB0aW9uSWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gYXdhaXQgZGVwcy5zdWJzY3JpYmVFdmVudHMoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYWVtb25TZXNzaW9uVG9rZW4sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RyYXRpb24ucnVudGltZS5sYXN0RXZlbnRTZXF1ZW5jZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RyYXRpb24ucnVudGltZS5ldmVudFN1YnNjcmlwdGlvbklkID0gc3Vic2NyaXB0aW9uLnN1YnNjcmlwdGlvbklkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHN1YnNjcmlwdGlvbi5sYXN0QWNrZWRTZXF1ZW5jZSA9PT0gJ251bWJlcicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdHJhdGlvbi5ydW50aW1lLmxhc3RFdmVudFNlcXVlbmNlID0gc3Vic2NyaXB0aW9uLmxhc3RBY2tlZFNlcXVlbmNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdWJzY3JpcHRpb25JZCA9IHJlZ2lzdHJhdGlvbi5ydW50aW1lLmV2ZW50U3Vic2NyaXB0aW9uSWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFzdWJzY3JpcHRpb25JZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2V2ZW50X3N1YnNjcmlwdGlvbl91bmF2YWlsYWJsZScpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcG9sbGVkID0gYXdhaXQgZGVwcy5wb2xsRXZlbnRzKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYWVtb25TZXNzaW9uVG9rZW4sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmlwdGlvbklkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RyYXRpb24ucnVudGltZS5sYXN0RXZlbnRTZXF1ZW5jZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgMjAwXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBvbGxlZC5ldmVudHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwb2xpY3lDYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCAnbG9jYWxfb25seScgfCAnbWV0YWRhdGFfb25seScgfCAnZnVsbF9zeW5jJyB8IG51bGw+KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkRXZlbnRzOiBDb25uZWN0b3JFdmVudFBheWxvYWRbXSA9IFtdO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBldmVudCBvZiBwb2xsZWQuZXZlbnRzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWV2ZW50LmNvbnRleHRJZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcmVkRXZlbnRzLnB1c2goZXZlbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwb2xpY3lDYWNoZS5oYXMoZXZlbnQuY29udGV4dElkKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvbGljeUNhY2hlLnNldChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuY29udGV4dElkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBkZXBzLmdldENvbnRleHRTeW5jUG9saWN5KGRhZW1vblNlc3Npb25Ub2tlbiwgZXZlbnQuY29udGV4dElkKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwb2xpY3kgPSBwb2xpY3lDYWNoZS5nZXQoZXZlbnQuY29udGV4dElkKSA/PyAnbWV0YWRhdGFfb25seSc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocG9saWN5ID09PSAnbG9jYWxfb25seScpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcmVkRXZlbnRzLnB1c2gocG9saWN5ID09PSAnbWV0YWRhdGFfb25seScgPyByZWRhY3RFdmVudEZvck1ldGFkYXRhT25seShldmVudCkgOiBldmVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWx0ZXJlZEV2ZW50cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBzLmVucXVldWVFdmVudHMoc3Vic2NyaXB0aW9uSWQsIGZpbHRlcmVkRXZlbnRzLCBkZXBzLm5vdygpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYWNrU2VxdWVuY2UgPSBwb2xsZWQuY3Vyc29yO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGFja1NlcXVlbmNlID09PSAnbnVtYmVyJyAmJiBhY2tTZXF1ZW5jZSA+IHJlZ2lzdHJhdGlvbi5ydW50aW1lLmxhc3RFdmVudFNlcXVlbmNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBkZXBzLmFja0V2ZW50cyhkYWVtb25TZXNzaW9uVG9rZW4sIHN1YnNjcmlwdGlvbklkLCBhY2tTZXF1ZW5jZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RyYXRpb24ucnVudGltZS5sYXN0RXZlbnRTZXF1ZW5jZSA9IGFja1NlcXVlbmNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZWFkeUV2ZW50cyA9IGRlcHMuZ2V0UmVhZHlFdmVudHMoMjAwLCBkZXBzLm5vdygpKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVhZHlFdmVudHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwb2xpY3lDYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCAnbG9jYWxfb25seScgfCAnbWV0YWRhdGFfb25seScgfCAnZnVsbF9zeW5jJyB8IG51bGw+KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHF1ZXVlSWRzVG9Ecm9wOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzZW5kYWJsZSA9IFtdO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHJlYWR5RXZlbnRzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWl0ZW0uY29udGV4dElkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VuZGFibGUucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXVlSWQ6IGl0ZW0ucXVldWVJZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Vic2NyaXB0aW9uSWQ6IGl0ZW0uc3Vic2NyaXB0aW9uSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudElkOiBpdGVtLmV2ZW50SWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXF1ZW5jZTogaXRlbS5zZXF1ZW5jZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHRJZDogaXRlbS5jb250ZXh0SWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBpdGVtLnR5cGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lc3RhbXA6IGl0ZW0udGltZXN0YW1wLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlOiBpdGVtLnNvdXJjZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBheWxvYWQ6IGl0ZW0ucGF5bG9hZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHNhdGlzZmllcyBDb25uZWN0b3JFdmVudFBheWxvYWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXBvbGljeUNhY2hlLmhhcyhpdGVtLmNvbnRleHRJZCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2xpY3lDYWNoZS5zZXQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uY29udGV4dElkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBkZXBzLmdldENvbnRleHRTeW5jUG9saWN5KGRhZW1vblNlc3Npb25Ub2tlbiwgaXRlbS5jb250ZXh0SWQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBvbGljeSA9IHBvbGljeUNhY2hlLmdldChpdGVtLmNvbnRleHRJZCkgPz8gJ21ldGFkYXRhX29ubHknO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBvbGljeSA9PT0gJ2xvY2FsX29ubHknKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVldWVJZHNUb0Ryb3AucHVzaChpdGVtLnF1ZXVlSWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJhd0V2ZW50OiBDb25uZWN0b3JFdmVudFBheWxvYWQgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRJZDogaXRlbS5ldmVudElkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcXVlbmNlOiBpdGVtLnNlcXVlbmNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHRJZDogaXRlbS5jb250ZXh0SWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogaXRlbS50eXBlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcDogaXRlbS50aW1lc3RhbXAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlOiBpdGVtLnNvdXJjZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkOiBpdGVtLnBheWxvYWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW5kYWJsZS5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWV1ZUlkOiBpdGVtLnF1ZXVlSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Vic2NyaXB0aW9uSWQ6IGl0ZW0uc3Vic2NyaXB0aW9uSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQ6IHBvbGljeSA9PT0gJ21ldGFkYXRhX29ubHknID8gcmVkYWN0RXZlbnRGb3JNZXRhZGF0YU9ubHkocmF3RXZlbnQpIDogcmF3RXZlbnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocXVldWVJZHNUb0Ryb3AubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwcy5tYXJrRXZlbnRzRGVsaXZlcmVkKHF1ZXVlSWRzVG9Ecm9wKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlbmRhYmxlLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0cmF0aW9uLnJ1bnRpbWUuZXZlbnRCcmlkZ2VFcnJvciA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJzb3IgPSBzZW5kYWJsZS5yZWR1Y2UoKG1heCwgaXRlbSkgPT4gTWF0aC5tYXgobWF4LCBpdGVtLmV2ZW50LnNlcXVlbmNlKSwgMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbmdlc3RSZXN1bHQgPSBhd2FpdCBkZXBzLnNlbmRDb25uZWN0b3JFdmVudHModG9rZW4uYWNjZXNzVG9rZW4sIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWNoaW5lSWQ6IHJlZ2lzdHJhdGlvbi5tYWNoaW5lSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVuYW50SWQ6IHJlZ2lzdHJhdGlvbi50ZW5hbnRJZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpcHRpb25JZDogc2VuZGFibGVbMF0uc3Vic2NyaXB0aW9uSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50czogc2VuZGFibGUubWFwKGl0ZW0gPT4gaXRlbS5ldmVudClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHF1ZXVlSWRzID0gc2VuZGFibGUubWFwKGl0ZW0gPT4gaXRlbS5xdWV1ZUlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmdlc3RSZXN1bHQub2spIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBzLm1hcmtFdmVudHNEZWxpdmVyZWQocXVldWVJZHMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdHJhdGlvbi5ydW50aW1lLmxhc3RFdmVudFN5bmNBdCA9IGRlcHMubm93KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0cmF0aW9uLnJ1bnRpbWUuZXZlbnRCcmlkZ2VFcnJvciA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGluZ2VzdFJlc3VsdC5zdGF0dXNDb2RlID09PSA0MDQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDb250cm9sIHBsYW5lIG1heSBub3QgaGF2ZSBldmVudCBpbmdlc3QgeWV0OyBzdG9wIHJldHJ5aW5nIHVudGlsIGV4cGxpY2l0IHJlLWVuYWJsZS5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RyYXRpb24ucnVudGltZS5ldmVudEJyaWRnZVN1cHBvcnRlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdHJhdGlvbi5ydW50aW1lLmV2ZW50QnJpZGdlRXJyb3IgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcHMubWFya0V2ZW50c0ZhaWxlZChxdWV1ZUlkcywgJ2V2ZW50X2luZ2VzdF91bmF2YWlsYWJsZScsIGRlcHMubm93KCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvclRleHQgPSBpbmdlc3RSZXN1bHQuZXJyb3IgPz8gJ2V2ZW50X2luZ2VzdF9mYWlsZWQnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcHMubWFya0V2ZW50c0ZhaWxlZChxdWV1ZUlkcywgZXJyb3JUZXh0LCBkZXBzLm5vdygpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RyYXRpb24ucnVudGltZS5ldmVudEJyaWRnZUVycm9yID0gZXJyb3JUZXh0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RFcnJvciA9IGVycm9yVGV4dDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdHJhdGlvbi5ydW50aW1lLmV2ZW50QnJpZGdlRXJyb3IgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICByZWdpc3RyYXRpb24ucnVudGltZS5ldmVudEJyaWRnZUVycm9yID0gbWVzc2FnZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuaW5jbHVkZXMoJ0ludmFsaWQgc2Vzc2lvblRva2VuJykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0cmF0aW9uLnJ1bnRpbWUuZGFlbW9uU2Vzc2lvblRva2VuID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0cmF0aW9uLnJ1bnRpbWUuZXZlbnRTdWJzY3JpcHRpb25JZCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhZW1vblNlc3Npb25Ub2tlbiA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtZXNzYWdlLmluY2x1ZGVzKCdub3QgZm91bmQnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RyYXRpb24ucnVudGltZS5ldmVudFN1YnNjcmlwdGlvbklkID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGxhc3RFcnJvciA9IG1lc3NhZ2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChkYWVtb24ub2sgJiYgcmVnaXN0cmF0aW9uLnJ1bnRpbWUuY29tbWFuZEJyaWRnZVN1cHBvcnRlZCkge1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWRhZW1vblNlc3Npb25Ub2tlbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2RhZW1vbl9zZXNzaW9uX3VuYXZhaWxhYmxlJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb21tYW5kc1Jlc3VsdCA9IGF3YWl0IGRlcHMuZmV0Y2hDb25uZWN0b3JDb21tYW5kcyhcclxuICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4uYWNjZXNzVG9rZW4sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdHJhdGlvbi5tYWNoaW5lSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdHJhdGlvbi5ydW50aW1lLmxhc3RDb21tYW5kQ3Vyc29yXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjb21tYW5kc1Jlc3VsdC5vaykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29tbWFuZHNSZXN1bHQuc3RhdHVzQ29kZSA9PT0gNDA0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RyYXRpb24ucnVudGltZS5jb21tYW5kQnJpZGdlU3VwcG9ydGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RyYXRpb24ucnVudGltZS5jb21tYW5kQnJpZGdlRXJyb3IgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGNvbW1hbmRzUmVzdWx0LmVycm9yID8/ICdjb21tYW5kX2ZldGNoX2ZhaWxlZCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29tbWFuZHMgPSBjb21tYW5kc1Jlc3VsdC5kYXRhPy5jb21tYW5kcyA/PyBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGN1cnNvciA9IHJlZ2lzdHJhdGlvbi5ydW50aW1lLmxhc3RDb21tYW5kQ3Vyc29yO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBjb21tYW5kIG9mIGNvbW1hbmRzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3IgPSBNYXRoLm1heChjdXJzb3IsIGNvbW1hbmQuY3Vyc29yID8/IGN1cnNvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb21tYW5kQ29udGV4dElkID1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLmNvbnRleHRJZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8/ICh0eXBlb2YgY29tbWFuZC5wYXJhbXM/LmNvbnRleHRJZCA9PT0gJ3N0cmluZycgPyBjb21tYW5kLnBhcmFtcy5jb250ZXh0SWQgOiBudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzdGF0dXM6ICdhcHBsaWVkJyB8ICdmYWlsZWQnID0gJ2FwcGxpZWQnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGVycm9yVGV4dDogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNNZXRob2RBbGxvd2VkRm9yQ2xvdWRDb21tYW5kKGNvbW1hbmQubWV0aG9kKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9ICdmYWlsZWQnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yVGV4dCA9ICdjb21tYW5kX21ldGhvZF9ub3RfYWxsb3dlZCc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBvbGljeSA9IGNvbW1hbmRDb250ZXh0SWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBhd2FpdCBkZXBzLmdldENvbnRleHRTeW5jUG9saWN5KGRhZW1vblNlc3Npb25Ub2tlbiwgY29tbWFuZENvbnRleHRJZClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBudWxsO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocG9saWN5ID09PSAnbG9jYWxfb25seScpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gJ2ZhaWxlZCc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yVGV4dCA9ICdjb21tYW5kX2Jsb2NrZWRfYnlfc3luY19wb2xpY3lfbG9jYWxfb25seSc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGRlcHMuYXBwbHlEYWVtb25Db21tYW5kKGRhZW1vblNlc3Npb25Ub2tlbiwgY29tbWFuZC5tZXRob2QsIGNvbW1hbmQucGFyYW1zID8/IHt9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9ICdmYWlsZWQnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JUZXh0ID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFja1Jlc3VsdCA9IGF3YWl0IGRlcHMuYWNrQ29ubmVjdG9yQ29tbWFuZCh0b2tlbi5hY2Nlc3NUb2tlbiwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hY2hpbmVJZDogcmVnaXN0cmF0aW9uLm1hY2hpbmVJZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW5hbnRJZDogcmVnaXN0cmF0aW9uLnRlbmFudElkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmRJZDogY29tbWFuZC5jb21tYW5kSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yOiBjb21tYW5kLmN1cnNvcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKGVycm9yVGV4dCA/IHsgZXJyb3I6IGVycm9yVGV4dCB9IDoge30pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWFja1Jlc3VsdC5vaykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RFcnJvciA9IGFja1Jlc3VsdC5lcnJvciA/PyAnY29tbWFuZF9hY2tfZmFpbGVkJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb21tYW5kc1Jlc3VsdC5kYXRhPy5jdXJzb3IgPT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3IgPSBNYXRoLm1heChjdXJzb3IsIGNvbW1hbmRzUmVzdWx0LmRhdGEuY3Vyc29yKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0cmF0aW9uLnJ1bnRpbWUubGFzdENvbW1hbmRDdXJzb3IgPSBjdXJzb3I7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdHJhdGlvbi5ydW50aW1lLmxhc3RDb21tYW5kU3luY0F0ID0gZGVwcy5ub3coKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0cmF0aW9uLnJ1bnRpbWUuY29tbWFuZEJyaWRnZUVycm9yID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVnaXN0cmF0aW9uLnJ1bnRpbWUuY29tbWFuZEJyaWRnZUVycm9yID0gbWVzc2FnZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5pbmNsdWRlcygnSW52YWxpZCBzZXNzaW9uVG9rZW4nKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RyYXRpb24ucnVudGltZS5kYWVtb25TZXNzaW9uVG9rZW4gPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYWVtb25TZXNzaW9uVG9rZW4gPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBsYXN0RXJyb3IgPSBtZXNzYWdlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCBxdWV1ZVN0YXRzID0gZGVwcy5nZXRRdWV1ZVN0YXRzKGRlcHMubm93KCkpO1xyXG4gICAgICAgICAgICByZWdpc3RyYXRpb24ucnVudGltZS5ldmVudFF1ZXVlUGVuZGluZyA9IHF1ZXVlU3RhdHMucGVuZGluZztcclxuICAgICAgICAgICAgcmVnaXN0cmF0aW9uLnJ1bnRpbWUuZXZlbnRRdWV1ZVJlYWR5ID0gcXVldWVTdGF0cy5yZWFkeTtcclxuICAgICAgICAgICAgcmVnaXN0cmF0aW9uLnJ1bnRpbWUuZXZlbnRRdWV1ZUJhY2tvZmYgPSBxdWV1ZVN0YXRzLmJhY2tvZmY7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZWdpc3RyYXRpb24udXBkYXRlZEF0ID0gZGVwcy5ub3coKTtcclxuICAgICAgICByZWdpc3RyYXRpb24uY2xvdWQubGFzdEVycm9yID0gbGFzdEVycm9yO1xyXG4gICAgICAgIGRlcHMud3JpdGVDb25uZWN0b3JTdGF0ZShyZWdpc3RyYXRpb24pO1xyXG4gICAgfSBlbHNlIGlmIChyZWdpc3RyYXRpb24gJiYgIXRva2VuKSB7XHJcbiAgICAgICAgZGVwcy5wcnVuZVF1ZXVlKGRlcHMubm93KCkpO1xyXG4gICAgICAgIGNvbnN0IHF1ZXVlU3RhdHMgPSBkZXBzLmdldFF1ZXVlU3RhdHMoZGVwcy5ub3coKSk7XHJcbiAgICAgICAgcmVnaXN0cmF0aW9uLnJ1bnRpbWUuZXZlbnRRdWV1ZVBlbmRpbmcgPSBxdWV1ZVN0YXRzLnBlbmRpbmc7XHJcbiAgICAgICAgcmVnaXN0cmF0aW9uLnJ1bnRpbWUuZXZlbnRRdWV1ZVJlYWR5ID0gcXVldWVTdGF0cy5yZWFkeTtcclxuICAgICAgICByZWdpc3RyYXRpb24ucnVudGltZS5ldmVudFF1ZXVlQmFja29mZiA9IHF1ZXVlU3RhdHMuYmFja29mZjtcclxuICAgICAgICByZWdpc3RyYXRpb24udXBkYXRlZEF0ID0gZGVwcy5ub3coKTtcclxuICAgICAgICByZWdpc3RyYXRpb24uY2xvdWQubGFzdEVycm9yID0gJ2F1dGhfcmVxdWlyZWQnO1xyXG4gICAgICAgIGRlcHMud3JpdGVDb25uZWN0b3JTdGF0ZShyZWdpc3RyYXRpb24pO1xyXG4gICAgICAgIGxhc3RFcnJvciA9ICdhdXRoX3JlcXVpcmVkJztcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBwb3N0dXJlOiAnY29ubmVjdGVkJyB8ICdkZWdyYWRlZCcgfCAnb2ZmbGluZScgPSAhZGFlbW9uLm9rXHJcbiAgICAgICAgPyAnb2ZmbGluZSdcclxuICAgICAgICA6ICghdG9rZW4gfHwgIXJlZ2lzdHJhdGlvbilcclxuICAgICAgICAgICAgPyAnZGVncmFkZWQnXHJcbiAgICAgICAgICAgIDogKHJlZ2lzdHJhdGlvbi5yZWdpc3RyYXRpb25Nb2RlID09PSAnY2xvdWQnXHJcbiAgICAgICAgICAgICAgICAmJiAoIWNsb3VkQ29ubmVjdGVkXHJcbiAgICAgICAgICAgICAgICAgICAgfHwgQm9vbGVhbihyZWdpc3RyYXRpb24ucnVudGltZS5ldmVudEJyaWRnZUVycm9yKVxyXG4gICAgICAgICAgICAgICAgICAgIHx8IEJvb2xlYW4ocmVnaXN0cmF0aW9uLnJ1bnRpbWUuY29tbWFuZEJyaWRnZUVycm9yKSkpXHJcbiAgICAgICAgICAgICAgICA/ICdkZWdyYWRlZCdcclxuICAgICAgICAgICAgICAgIDogKHN5bmM/LmVuYWJsZWQgJiYgc3luYz8ucnVubmluZyA/ICdjb25uZWN0ZWQnIDogJ2RlZ3JhZGVkJyk7XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBwb3N0dXJlLFxyXG4gICAgICAgIGRhZW1vblJ1bm5pbmc6IGRhZW1vbi5vayxcclxuICAgICAgICBjbG91ZENvbm5lY3RlZCxcclxuICAgICAgICByZWdpc3RyYXRpb25Nb2RlOiByZWdpc3RyYXRpb24gPyByZWdpc3RyYXRpb24ucmVnaXN0cmF0aW9uTW9kZSA6ICdub25lJyxcclxuICAgICAgICBhdXRoOiBCb29sZWFuKHRva2VuKSxcclxuICAgICAgICBtYWNoaW5lSWQ6IHJlZ2lzdHJhdGlvbj8ubWFjaGluZUlkID8/IG51bGwsXHJcbiAgICAgICAgbGFzdEVycm9yXHJcbiAgICB9O1xyXG59XHJcblxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuQ29ubmVjdG9yUnVudGltZShcclxuICAgIG9wdGlvbnM6IENvbm5lY3RvclJ1bnRpbWVPcHRpb25zID0ge30sXHJcbiAgICBkZXBzOiBDb25uZWN0b3JSdW50aW1lRGVwZW5kZW5jaWVzID0gZ2V0UnVudGltZURlcGVuZGVuY2llcygpXHJcbik6IFByb21pc2U8bnVtYmVyPiB7XHJcbiAgICBjb25zdCBpbnRlcnZhbE1zID0gbm9ybWFsaXplSW50ZXJ2YWxNcyhvcHRpb25zLmludGVydmFsTXMpO1xyXG4gICAgbGV0IHN0b3BwaW5nID0gZmFsc2U7XHJcbiAgICBjb25zdCBvblNpZ25hbCA9ICgpID0+IHsgc3RvcHBpbmcgPSB0cnVlOyB9O1xyXG4gICAgcHJvY2Vzcy5vbmNlKCdTSUdJTlQnLCBvblNpZ25hbCk7XHJcbiAgICBwcm9jZXNzLm9uY2UoJ1NJR1RFUk0nLCBvblNpZ25hbCk7XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgICBkbyB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzdW1tYXJ5ID0gYXdhaXQgcnVuQ29ubmVjdG9yUnVudGltZUN5Y2xlKG9wdGlvbnMsIGRlcHMpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFvcHRpb25zLnF1aWV0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVwcy5sb2coXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGBjb25uZWN0b3JfcnVudGltZV90aWNrIHBvc3R1cmU9JHtzdW1tYXJ5LnBvc3R1cmV9IGRhZW1vbj0ke3N1bW1hcnkuZGFlbW9uUnVubmluZ30gYCArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGBjbG91ZD0ke3N1bW1hcnkuY2xvdWRDb25uZWN0ZWR9IG1vZGU9JHtzdW1tYXJ5LnJlZ2lzdHJhdGlvbk1vZGV9IGAgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBgbWFjaGluZV9pZD0ke3N1bW1hcnkubWFjaGluZUlkID8/ICduL2EnfWBcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzdW1tYXJ5Lmxhc3RFcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXBzLndhcm4oYGNvbm5lY3Rvcl9ydW50aW1lX2Vycm9yICR7c3VtbWFyeS5sYXN0RXJyb3J9YCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMub25jZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzdW1tYXJ5LnBvc3R1cmUgPT09ICdvZmZsaW5lJyA/IDEgOiAwO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKTtcclxuICAgICAgICAgICAgICAgIGRlcHMuZXJyb3IoYGNvbm5lY3Rvcl9ydW50aW1lX3RpY2tfZmFpbGVkICR7bWVzc2FnZX1gKTtcclxuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLm9uY2UpIHJldHVybiAxO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoc3RvcHBpbmcgfHwgb3B0aW9ucy5vbmNlKSBicmVhaztcclxuICAgICAgICAgICAgYXdhaXQgc2xlZXAoaW50ZXJ2YWxNcyk7XHJcbiAgICAgICAgfSB3aGlsZSAoIXN0b3BwaW5nKTtcclxuICAgICAgICByZXR1cm4gMDtcclxuICAgIH0gZmluYWxseSB7XHJcbiAgICAgICAgcHJvY2Vzcy5yZW1vdmVMaXN0ZW5lcignU0lHSU5UJywgb25TaWduYWwpO1xyXG4gICAgICAgIHByb2Nlc3MucmVtb3ZlTGlzdGVuZXIoJ1NJR1RFUk0nLCBvblNpZ25hbCk7XHJcbiAgICB9XHJcbn1cclxuIiwgImltcG9ydCBmcyBmcm9tICdmcyc7XHJcbmltcG9ydCBvcyBmcm9tICdvcyc7XHJcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xyXG5pbXBvcnQgeyByYW5kb21VVUlEIH0gZnJvbSAnY3J5cHRvJztcclxuaW1wb3J0IHR5cGUgeyBDb25uZWN0b3JFdmVudFBheWxvYWQgfSBmcm9tICcuL2Nsb3VkJztcclxuXHJcbmNvbnN0IFFVRVVFX0ZJTEVfVkVSU0lPTiA9IDE7XHJcbmNvbnN0IERFRkFVTFRfUVVFVUVfTElNSVQgPSAyMF8wMDA7XHJcbmNvbnN0IERFRkFVTFRfQkFUQ0hfTElNSVQgPSAyMDA7XHJcbmNvbnN0IERFRkFVTFRfUVVFVUVfTUFYX0FHRV9IT1VSUyA9IDI0ICogNztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUXVldWVkQ29ubmVjdG9yRXZlbnQge1xyXG4gICAgcXVldWVJZDogc3RyaW5nO1xyXG4gICAgZXZlbnRJZDogc3RyaW5nO1xyXG4gICAgc3Vic2NyaXB0aW9uSWQ6IHN0cmluZztcclxuICAgIHNlcXVlbmNlOiBudW1iZXI7XHJcbiAgICBjb250ZXh0SWQ6IHN0cmluZyB8IG51bGw7XHJcbiAgICB0eXBlOiBzdHJpbmc7XHJcbiAgICB0aW1lc3RhbXA6IG51bWJlcjtcclxuICAgIHNvdXJjZTogc3RyaW5nO1xyXG4gICAgcGF5bG9hZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XHJcbiAgICBlbnF1ZXVlZEF0OiBudW1iZXI7XHJcbiAgICBhdHRlbXB0czogbnVtYmVyO1xyXG4gICAgbmV4dEF0dGVtcHRBdDogbnVtYmVyO1xyXG4gICAgbGFzdEVycm9yOiBzdHJpbmcgfCBudWxsO1xyXG59XHJcblxyXG5pbnRlcmZhY2UgQ29ubmVjdG9yUXVldWVGaWxlIHtcclxuICAgIHZlcnNpb246IG51bWJlcjtcclxuICAgIHVwZGF0ZWRBdDogbnVtYmVyO1xyXG4gICAgaXRlbXM6IFF1ZXVlZENvbm5lY3RvckV2ZW50W107XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ29ubmVjdG9yUXVldWVTdGF0cyB7XHJcbiAgICBwZW5kaW5nOiBudW1iZXI7XHJcbiAgICByZWFkeTogbnVtYmVyO1xyXG4gICAgYmFja29mZjogbnVtYmVyO1xyXG4gICAgbWF4QXR0ZW1wdHM6IG51bWJlcjtcclxuICAgIG9sZGVzdEVucXVldWVkQXQ6IG51bWJlciB8IG51bGw7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ29ubmVjdG9yUXVldWVQdXJnZU9wdGlvbnMge1xyXG4gICAgYWxsPzogYm9vbGVhbjtcclxuICAgIG9sZGVyVGhhbkhvdXJzPzogbnVtYmVyO1xyXG4gICAgbWluQXR0ZW1wdHM/OiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ29ubmVjdG9yUXVldWVQdXJnZVJlc3VsdCB7XHJcbiAgICByZW1vdmVkOiBudW1iZXI7XHJcbiAgICByZW1haW5pbmc6IG51bWJlcjtcclxufVxyXG5cclxuZnVuY3Rpb24gY29tcHV0ZUJhY2tvZmZNcyhhdHRlbXB0czogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIC8vIDJzLCA0cywgOHMgLi4uIGNhcHBlZCB0byA1IG1pblxyXG4gICAgY29uc3QgdmFsdWUgPSAyXzAwMCAqICgyICoqIE1hdGgubWF4KDAsIGF0dGVtcHRzIC0gMSkpO1xyXG4gICAgcmV0dXJuIE1hdGgubWluKHZhbHVlLCA1ICogNjBfMDAwKTtcclxufVxyXG5cclxuZnVuY3Rpb24gcGFyc2VQb3NpdGl2ZUludChyYXc6IHN0cmluZyB8IHVuZGVmaW5lZCwgZmFsbGJhY2s6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBpZiAoIXJhdykgcmV0dXJuIGZhbGxiYWNrO1xyXG4gICAgY29uc3QgcGFyc2VkID0gTnVtYmVyKHJhdyk7XHJcbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShwYXJzZWQpIHx8IHBhcnNlZCA8PSAwKSByZXR1cm4gZmFsbGJhY2s7XHJcbiAgICByZXR1cm4gTWF0aC5mbG9vcihwYXJzZWQpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRRdWV1ZUxpbWl0KCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gcGFyc2VQb3NpdGl2ZUludChwcm9jZXNzLmVudi5DVFhfQ09OTkVDVE9SX1FVRVVFX01BWF9JVEVNUywgREVGQVVMVF9RVUVVRV9MSU1JVCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldFF1ZXVlTWF4QWdlTXMoKTogbnVtYmVyIHtcclxuICAgIGNvbnN0IGhvdXJzID0gcGFyc2VQb3NpdGl2ZUludChwcm9jZXNzLmVudi5DVFhfQ09OTkVDVE9SX1FVRVVFX01BWF9BR0VfSE9VUlMsIERFRkFVTFRfUVVFVUVfTUFYX0FHRV9IT1VSUyk7XHJcbiAgICByZXR1cm4gaG91cnMgKiA2MCAqIDYwICogMTAwMDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbm5lY3RvclF1ZXVlUGF0aCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHByb2Nlc3MuZW52LkNUWF9DT05ORUNUT1JfUVVFVUVfUEFUSCB8fCBwYXRoLmpvaW4ob3MuaG9tZWRpcigpLCAnLjBjdHgnLCAnY29ubmVjdG9yLWV2ZW50LXF1ZXVlLmpzb24nKTtcclxufVxyXG5cclxuZnVuY3Rpb24gZW5zdXJlRGlyKGZpbGVQYXRoOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGZzLm1rZGlyU3luYyhwYXRoLmRpcm5hbWUoZmlsZVBhdGgpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gcmVhZFF1ZXVlRmlsZSgpOiBDb25uZWN0b3JRdWV1ZUZpbGUge1xyXG4gICAgY29uc3QgZmlsZVBhdGggPSBnZXRDb25uZWN0b3JRdWV1ZVBhdGgoKTtcclxuICAgIGlmICghZnMuZXhpc3RzU3luYyhmaWxlUGF0aCkpIHtcclxuICAgICAgICByZXR1cm4geyB2ZXJzaW9uOiBRVUVVRV9GSUxFX1ZFUlNJT04sIHVwZGF0ZWRBdDogRGF0ZS5ub3coKSwgaXRlbXM6IFtdIH07XHJcbiAgICB9XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhmaWxlUGF0aCwgJ3V0ZjgnKSkgYXMgUGFydGlhbDxDb25uZWN0b3JRdWV1ZUZpbGU+O1xyXG4gICAgICAgIGNvbnN0IGl0ZW1zID0gQXJyYXkuaXNBcnJheShwYXJzZWQuaXRlbXMpXHJcbiAgICAgICAgICAgID8gcGFyc2VkLml0ZW1zLmZpbHRlcigoaXRlbSk6IGl0ZW0gaXMgUXVldWVkQ29ubmVjdG9yRXZlbnQgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIEJvb2xlYW4oXHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbVxyXG4gICAgICAgICAgICAgICAgICAgICYmIHR5cGVvZiBpdGVtLnF1ZXVlSWQgPT09ICdzdHJpbmcnXHJcbiAgICAgICAgICAgICAgICAgICAgJiYgdHlwZW9mIGl0ZW0uZXZlbnRJZCA9PT0gJ3N0cmluZydcclxuICAgICAgICAgICAgICAgICAgICAmJiB0eXBlb2YgaXRlbS5zdWJzY3JpcHRpb25JZCA9PT0gJ3N0cmluZydcclxuICAgICAgICAgICAgICAgICAgICAmJiB0eXBlb2YgaXRlbS5zZXF1ZW5jZSA9PT0gJ251bWJlcidcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIDogW107XHJcblxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHZlcnNpb246IFFVRVVFX0ZJTEVfVkVSU0lPTixcclxuICAgICAgICAgICAgdXBkYXRlZEF0OiB0eXBlb2YgcGFyc2VkLnVwZGF0ZWRBdCA9PT0gJ251bWJlcicgPyBwYXJzZWQudXBkYXRlZEF0IDogRGF0ZS5ub3coKSxcclxuICAgICAgICAgICAgaXRlbXNcclxuICAgICAgICB9O1xyXG4gICAgfSBjYXRjaCB7XHJcbiAgICAgICAgcmV0dXJuIHsgdmVyc2lvbjogUVVFVUVfRklMRV9WRVJTSU9OLCB1cGRhdGVkQXQ6IERhdGUubm93KCksIGl0ZW1zOiBbXSB9O1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiB3cml0ZVF1ZXVlRmlsZShkYXRhOiBDb25uZWN0b3JRdWV1ZUZpbGUpOiB2b2lkIHtcclxuICAgIGNvbnN0IGZpbGVQYXRoID0gZ2V0Q29ubmVjdG9yUXVldWVQYXRoKCk7XHJcbiAgICBlbnN1cmVEaXIoZmlsZVBhdGgpO1xyXG4gICAgZnMud3JpdGVGaWxlU3luYyhcclxuICAgICAgICBmaWxlUGF0aCxcclxuICAgICAgICBKU09OLnN0cmluZ2lmeSh7XHJcbiAgICAgICAgICAgIHZlcnNpb246IFFVRVVFX0ZJTEVfVkVSU0lPTixcclxuICAgICAgICAgICAgdXBkYXRlZEF0OiBEYXRlLm5vdygpLFxyXG4gICAgICAgICAgICBpdGVtczogZGF0YS5pdGVtc1xyXG4gICAgICAgIH0sIG51bGwsIDIpLFxyXG4gICAgICAgIHsgZW5jb2Rpbmc6ICd1dGY4JywgbW9kZTogMG82MDAgfVxyXG4gICAgKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGVucXVldWVDb25uZWN0b3JFdmVudHMoXHJcbiAgICBzdWJzY3JpcHRpb25JZDogc3RyaW5nLFxyXG4gICAgZXZlbnRzOiBDb25uZWN0b3JFdmVudFBheWxvYWRbXSxcclxuICAgIG5vdyA9IERhdGUubm93KCksXHJcbiAgICBtYXhJdGVtcyA9IGdldFF1ZXVlTGltaXQoKVxyXG4pOiB7IGVucXVldWVkOiBudW1iZXI7IGxhc3RTZXF1ZW5jZTogbnVtYmVyIHwgbnVsbCB9IHtcclxuICAgIGlmICghQXJyYXkuaXNBcnJheShldmVudHMpIHx8IGV2ZW50cy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICByZXR1cm4geyBlbnF1ZXVlZDogMCwgbGFzdFNlcXVlbmNlOiBudWxsIH07XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZGF0YSA9IHJlYWRRdWV1ZUZpbGUoKTtcclxuICAgIGNvbnN0IGV4aXN0aW5nRXZlbnRJZHMgPSBuZXcgU2V0KGRhdGEuaXRlbXMubWFwKGl0ZW0gPT4gaXRlbS5ldmVudElkKSk7XHJcbiAgICBsZXQgZW5xdWV1ZWQgPSAwO1xyXG4gICAgbGV0IGxhc3RTZXF1ZW5jZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gICAgZm9yIChjb25zdCBldmVudCBvZiBldmVudHMpIHtcclxuICAgICAgICBpZiAoIWV2ZW50Py5ldmVudElkIHx8IHR5cGVvZiBldmVudC5zZXF1ZW5jZSAhPT0gJ251bWJlcicpIGNvbnRpbnVlO1xyXG4gICAgICAgIGlmIChleGlzdGluZ0V2ZW50SWRzLmhhcyhldmVudC5ldmVudElkKSkge1xyXG4gICAgICAgICAgICBsYXN0U2VxdWVuY2UgPSBsYXN0U2VxdWVuY2UgPT09IG51bGwgPyBldmVudC5zZXF1ZW5jZSA6IE1hdGgubWF4KGxhc3RTZXF1ZW5jZSwgZXZlbnQuc2VxdWVuY2UpO1xyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGRhdGEuaXRlbXMucHVzaCh7XHJcbiAgICAgICAgICAgIHF1ZXVlSWQ6IHJhbmRvbVVVSUQoKSxcclxuICAgICAgICAgICAgZXZlbnRJZDogZXZlbnQuZXZlbnRJZCxcclxuICAgICAgICAgICAgc3Vic2NyaXB0aW9uSWQsXHJcbiAgICAgICAgICAgIHNlcXVlbmNlOiBldmVudC5zZXF1ZW5jZSxcclxuICAgICAgICAgICAgY29udGV4dElkOiBldmVudC5jb250ZXh0SWQgPz8gbnVsbCxcclxuICAgICAgICAgICAgdHlwZTogZXZlbnQudHlwZSxcclxuICAgICAgICAgICAgdGltZXN0YW1wOiBldmVudC50aW1lc3RhbXAsXHJcbiAgICAgICAgICAgIHNvdXJjZTogZXZlbnQuc291cmNlLFxyXG4gICAgICAgICAgICBwYXlsb2FkOiBldmVudC5wYXlsb2FkID8/IHt9LFxyXG4gICAgICAgICAgICBlbnF1ZXVlZEF0OiBub3csXHJcbiAgICAgICAgICAgIGF0dGVtcHRzOiAwLFxyXG4gICAgICAgICAgICBuZXh0QXR0ZW1wdEF0OiBub3csXHJcbiAgICAgICAgICAgIGxhc3RFcnJvcjogbnVsbFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGV4aXN0aW5nRXZlbnRJZHMuYWRkKGV2ZW50LmV2ZW50SWQpO1xyXG4gICAgICAgIGVucXVldWVkICs9IDE7XHJcbiAgICAgICAgbGFzdFNlcXVlbmNlID0gbGFzdFNlcXVlbmNlID09PSBudWxsID8gZXZlbnQuc2VxdWVuY2UgOiBNYXRoLm1heChsYXN0U2VxdWVuY2UsIGV2ZW50LnNlcXVlbmNlKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBwcnVuZVJlc3VsdCA9IHBydW5lQ29ubmVjdG9yUXVldWUoe1xyXG4gICAgICAgIG5vdyxcclxuICAgICAgICBtYXhJdGVtcyxcclxuICAgICAgICBtYXhBZ2VNczogZ2V0UXVldWVNYXhBZ2VNcygpLFxyXG4gICAgICAgIF9kYXRhOiBkYXRhXHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAoZW5xdWV1ZWQgPiAwIHx8IHBydW5lUmVzdWx0LnJlbW92ZWQgPiAwKSB7XHJcbiAgICAgICAgd3JpdGVRdWV1ZUZpbGUoZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHsgZW5xdWV1ZWQsIGxhc3RTZXF1ZW5jZSB9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVhZHlDb25uZWN0b3JFdmVudHMobGltaXQgPSBERUZBVUxUX0JBVENIX0xJTUlULCBub3cgPSBEYXRlLm5vdygpKTogUXVldWVkQ29ubmVjdG9yRXZlbnRbXSB7XHJcbiAgICBjb25zdCBkYXRhID0gcmVhZFF1ZXVlRmlsZSgpO1xyXG4gICAgY29uc3Qgc2FmZUxpbWl0ID0gTWF0aC5tYXgoMSwgTWF0aC5taW4oREVGQVVMVF9CQVRDSF9MSU1JVCwgTWF0aC5mbG9vcihsaW1pdCkpKTtcclxuICAgIHJldHVybiBkYXRhLml0ZW1zXHJcbiAgICAgICAgLmZpbHRlcihpdGVtID0+IGl0ZW0ubmV4dEF0dGVtcHRBdCA8PSBub3cpXHJcbiAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEuc2VxdWVuY2UgLSBiLnNlcXVlbmNlIHx8IGEuZW5xdWV1ZWRBdCAtIGIuZW5xdWV1ZWRBdClcclxuICAgICAgICAuc2xpY2UoMCwgc2FmZUxpbWl0KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGxpc3RRdWV1ZWRDb25uZWN0b3JFdmVudHMoKTogUXVldWVkQ29ubmVjdG9yRXZlbnRbXSB7XHJcbiAgICBjb25zdCBkYXRhID0gcmVhZFF1ZXVlRmlsZSgpO1xyXG4gICAgcmV0dXJuIFsuLi5kYXRhLml0ZW1zXS5zb3J0KChhLCBiKSA9PiBhLnNlcXVlbmNlIC0gYi5zZXF1ZW5jZSB8fCBhLmVucXVldWVkQXQgLSBiLmVucXVldWVkQXQpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbWFya0Nvbm5lY3RvckV2ZW50c0RlbGl2ZXJlZChxdWV1ZUlkczogc3RyaW5nW10pOiB2b2lkIHtcclxuICAgIGlmICghQXJyYXkuaXNBcnJheShxdWV1ZUlkcykgfHwgcXVldWVJZHMubGVuZ3RoID09PSAwKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgaWRTZXQgPSBuZXcgU2V0KHF1ZXVlSWRzKTtcclxuICAgIGNvbnN0IGRhdGEgPSByZWFkUXVldWVGaWxlKCk7XHJcbiAgICBjb25zdCBiZWZvcmUgPSBkYXRhLml0ZW1zLmxlbmd0aDtcclxuICAgIGRhdGEuaXRlbXMgPSBkYXRhLml0ZW1zLmZpbHRlcihpdGVtID0+ICFpZFNldC5oYXMoaXRlbS5xdWV1ZUlkKSk7XHJcbiAgICBpZiAoZGF0YS5pdGVtcy5sZW5ndGggIT09IGJlZm9yZSkge1xyXG4gICAgICAgIHdyaXRlUXVldWVGaWxlKGRhdGEpO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbWFya0Nvbm5lY3RvckV2ZW50c0ZhaWxlZChxdWV1ZUlkczogc3RyaW5nW10sIGVycm9yOiBzdHJpbmcsIG5vdyA9IERhdGUubm93KCkpOiB2b2lkIHtcclxuICAgIGlmICghQXJyYXkuaXNBcnJheShxdWV1ZUlkcykgfHwgcXVldWVJZHMubGVuZ3RoID09PSAwKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgaWRTZXQgPSBuZXcgU2V0KHF1ZXVlSWRzKTtcclxuICAgIGNvbnN0IGRhdGEgPSByZWFkUXVldWVGaWxlKCk7XHJcbiAgICBsZXQgY2hhbmdlZCA9IGZhbHNlO1xyXG5cclxuICAgIGZvciAoY29uc3QgaXRlbSBvZiBkYXRhLml0ZW1zKSB7XHJcbiAgICAgICAgaWYgKCFpZFNldC5oYXMoaXRlbS5xdWV1ZUlkKSkgY29udGludWU7XHJcbiAgICAgICAgaXRlbS5hdHRlbXB0cyArPSAxO1xyXG4gICAgICAgIGl0ZW0ubGFzdEVycm9yID0gZXJyb3I7XHJcbiAgICAgICAgaXRlbS5uZXh0QXR0ZW1wdEF0ID0gbm93ICsgY29tcHV0ZUJhY2tvZmZNcyhpdGVtLmF0dGVtcHRzKTtcclxuICAgICAgICBjaGFuZ2VkID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY2hhbmdlZCkgd3JpdGVRdWV1ZUZpbGUoZGF0YSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRDb25uZWN0b3JRdWV1ZVN0YXRzKG5vdyA9IERhdGUubm93KCkpOiBDb25uZWN0b3JRdWV1ZVN0YXRzIHtcclxuICAgIGNvbnN0IGRhdGEgPSByZWFkUXVldWVGaWxlKCk7XHJcbiAgICBjb25zdCBwZW5kaW5nID0gZGF0YS5pdGVtcy5sZW5ndGg7XHJcbiAgICBsZXQgcmVhZHkgPSAwO1xyXG4gICAgbGV0IG1heEF0dGVtcHRzID0gMDtcclxuICAgIGxldCBvbGRlc3RFbnF1ZXVlZEF0OiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZGF0YS5pdGVtcykge1xyXG4gICAgICAgIGlmIChpdGVtLm5leHRBdHRlbXB0QXQgPD0gbm93KSByZWFkeSArPSAxO1xyXG4gICAgICAgIGlmIChpdGVtLmF0dGVtcHRzID4gbWF4QXR0ZW1wdHMpIG1heEF0dGVtcHRzID0gaXRlbS5hdHRlbXB0cztcclxuICAgICAgICBpZiAob2xkZXN0RW5xdWV1ZWRBdCA9PT0gbnVsbCB8fCBpdGVtLmVucXVldWVkQXQgPCBvbGRlc3RFbnF1ZXVlZEF0KSB7XHJcbiAgICAgICAgICAgIG9sZGVzdEVucXVldWVkQXQgPSBpdGVtLmVucXVldWVkQXQ7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgcGVuZGluZyxcclxuICAgICAgICByZWFkeSxcclxuICAgICAgICBiYWNrb2ZmOiBNYXRoLm1heCgwLCBwZW5kaW5nIC0gcmVhZHkpLFxyXG4gICAgICAgIG1heEF0dGVtcHRzLFxyXG4gICAgICAgIG9sZGVzdEVucXVldWVkQXRcclxuICAgIH07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBwdXJnZUNvbm5lY3RvclF1ZXVlKG9wdGlvbnM6IENvbm5lY3RvclF1ZXVlUHVyZ2VPcHRpb25zID0ge30pOiBDb25uZWN0b3JRdWV1ZVB1cmdlUmVzdWx0IHtcclxuICAgIGNvbnN0IGRhdGEgPSByZWFkUXVldWVGaWxlKCk7XHJcbiAgICBjb25zdCBiZWZvcmUgPSBkYXRhLml0ZW1zLmxlbmd0aDtcclxuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XHJcblxyXG4gICAgaWYgKG9wdGlvbnMuYWxsKSB7XHJcbiAgICAgICAgZGF0YS5pdGVtcyA9IFtdO1xyXG4gICAgICAgIHdyaXRlUXVldWVGaWxlKGRhdGEpO1xyXG4gICAgICAgIHJldHVybiB7IHJlbW92ZWQ6IGJlZm9yZSwgcmVtYWluaW5nOiAwIH07XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgb2xkZXJUaGFuTXMgPSB0eXBlb2Ygb3B0aW9ucy5vbGRlclRoYW5Ib3VycyA9PT0gJ251bWJlcicgJiYgb3B0aW9ucy5vbGRlclRoYW5Ib3VycyA+IDBcclxuICAgICAgICA/IG9wdGlvbnMub2xkZXJUaGFuSG91cnMgKiA2MCAqIDYwICogMTAwMFxyXG4gICAgICAgIDogbnVsbDtcclxuICAgIGNvbnN0IG1pbkF0dGVtcHRzID0gdHlwZW9mIG9wdGlvbnMubWluQXR0ZW1wdHMgPT09ICdudW1iZXInICYmIG9wdGlvbnMubWluQXR0ZW1wdHMgPiAwXHJcbiAgICAgICAgPyBNYXRoLmZsb29yKG9wdGlvbnMubWluQXR0ZW1wdHMpXHJcbiAgICAgICAgOiBudWxsO1xyXG5cclxuICAgIGlmIChvbGRlclRoYW5NcyA9PT0gbnVsbCAmJiBtaW5BdHRlbXB0cyA9PT0gbnVsbCkge1xyXG4gICAgICAgIHJldHVybiB7IHJlbW92ZWQ6IDAsIHJlbWFpbmluZzogYmVmb3JlIH07XHJcbiAgICB9XHJcblxyXG4gICAgZGF0YS5pdGVtcyA9IGRhdGEuaXRlbXMuZmlsdGVyKGl0ZW0gPT4ge1xyXG4gICAgICAgIGNvbnN0IG9sZGVyTWF0Y2ggPSBvbGRlclRoYW5NcyAhPT0gbnVsbCA/IChub3cgLSBpdGVtLmVucXVldWVkQXQpID49IG9sZGVyVGhhbk1zIDogZmFsc2U7XHJcbiAgICAgICAgY29uc3QgYXR0ZW1wdHNNYXRjaCA9IG1pbkF0dGVtcHRzICE9PSBudWxsID8gaXRlbS5hdHRlbXB0cyA+PSBtaW5BdHRlbXB0cyA6IGZhbHNlO1xyXG4gICAgICAgIHJldHVybiAhKG9sZGVyTWF0Y2ggfHwgYXR0ZW1wdHNNYXRjaCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAoZGF0YS5pdGVtcy5sZW5ndGggIT09IGJlZm9yZSkge1xyXG4gICAgICAgIHdyaXRlUXVldWVGaWxlKGRhdGEpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHsgcmVtb3ZlZDogYmVmb3JlIC0gZGF0YS5pdGVtcy5sZW5ndGgsIHJlbWFpbmluZzogZGF0YS5pdGVtcy5sZW5ndGggfTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHBydW5lQ29ubmVjdG9yUXVldWUoaW5wdXQ/OiB7XHJcbiAgICBub3c/OiBudW1iZXI7XHJcbiAgICBtYXhJdGVtcz86IG51bWJlcjtcclxuICAgIG1heEFnZU1zPzogbnVtYmVyO1xyXG4gICAgX2RhdGE/OiBDb25uZWN0b3JRdWV1ZUZpbGU7XHJcbn0pOiBDb25uZWN0b3JRdWV1ZVB1cmdlUmVzdWx0IHtcclxuICAgIGNvbnN0IG5vdyA9IGlucHV0Py5ub3cgPz8gRGF0ZS5ub3coKTtcclxuICAgIGNvbnN0IG1heEl0ZW1zID0gaW5wdXQ/Lm1heEl0ZW1zID8/IGdldFF1ZXVlTGltaXQoKTtcclxuICAgIGNvbnN0IG1heEFnZU1zID0gaW5wdXQ/Lm1heEFnZU1zID8/IGdldFF1ZXVlTWF4QWdlTXMoKTtcclxuICAgIGNvbnN0IGRhdGEgPSBpbnB1dD8uX2RhdGEgPz8gcmVhZFF1ZXVlRmlsZSgpO1xyXG4gICAgY29uc3QgYmVmb3JlID0gZGF0YS5pdGVtcy5sZW5ndGg7XHJcblxyXG4gICAgaWYgKG1heEFnZU1zID4gMCkge1xyXG4gICAgICAgIGRhdGEuaXRlbXMgPSBkYXRhLml0ZW1zLmZpbHRlcihpdGVtID0+IChub3cgLSBpdGVtLmVucXVldWVkQXQpIDw9IG1heEFnZU1zKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZGF0YS5pdGVtcy5sZW5ndGggPiBtYXhJdGVtcykge1xyXG4gICAgICAgIGRhdGEuaXRlbXMuc29ydCgoYSwgYikgPT4gYS5zZXF1ZW5jZSAtIGIuc2VxdWVuY2UgfHwgYS5lbnF1ZXVlZEF0IC0gYi5lbnF1ZXVlZEF0KTtcclxuICAgICAgICBkYXRhLml0ZW1zLnNwbGljZSgwLCBkYXRhLml0ZW1zLmxlbmd0aCAtIG1heEl0ZW1zKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWlucHV0Py5fZGF0YSAmJiBkYXRhLml0ZW1zLmxlbmd0aCAhPT0gYmVmb3JlKSB7XHJcbiAgICAgICAgd3JpdGVRdWV1ZUZpbGUoZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHsgcmVtb3ZlZDogYmVmb3JlIC0gZGF0YS5pdGVtcy5sZW5ndGgsIHJlbWFpbmluZzogZGF0YS5pdGVtcy5sZW5ndGggfTtcclxufVxyXG4iLCAiaW1wb3J0IGZzIGZyb20gJ2ZzJztcclxuaW1wb3J0IG9zIGZyb20gJ29zJztcclxuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XHJcblxyXG5sZXQgb3BzTG9nV3JpdGVXYXJuaW5nRW1pdHRlZCA9IGZhbHNlO1xyXG5cclxuZXhwb3J0IHR5cGUgQ2xpT3BzU3RhdHVzID0gJ3N1Y2Nlc3MnIHwgJ2Vycm9yJyB8ICdwYXJ0aWFsJyB8ICdkcnlfcnVuJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ2xpT3BzTG9nRW50cnkge1xyXG4gICAgdGltZXN0YW1wOiBudW1iZXI7XHJcbiAgICBvcGVyYXRpb246IHN0cmluZztcclxuICAgIHN0YXR1czogQ2xpT3BzU3RhdHVzO1xyXG4gICAgZGV0YWlscz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2xpT3BzTG9nUGF0aCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHByb2Nlc3MuZW52LkNUWF9DTElfT1BTX0xPR19QQVRIIHx8IHBhdGguam9pbihvcy5ob21lZGlyKCksICcuMGN0eCcsICdvcHMubG9nJyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGVuc3VyZURpcihmaWxlUGF0aDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBmcy5ta2RpclN5bmMocGF0aC5kaXJuYW1lKGZpbGVQYXRoKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBhcHBlbmRDbGlPcHNMb2dFbnRyeShlbnRyeTogT21pdDxDbGlPcHNMb2dFbnRyeSwgJ3RpbWVzdGFtcCc+ICYgeyB0aW1lc3RhbXA/OiBudW1iZXIgfSk6IHZvaWQge1xyXG4gICAgdHJ5IHtcclxuICAgICAgICBjb25zdCBmaWxlUGF0aCA9IGdldENsaU9wc0xvZ1BhdGgoKTtcclxuICAgICAgICBlbnN1cmVEaXIoZmlsZVBhdGgpO1xyXG4gICAgICAgIGNvbnN0IGxpbmUgPSBKU09OLnN0cmluZ2lmeSh7XHJcbiAgICAgICAgICAgIHRpbWVzdGFtcDogZW50cnkudGltZXN0YW1wID8/IERhdGUubm93KCksXHJcbiAgICAgICAgICAgIG9wZXJhdGlvbjogZW50cnkub3BlcmF0aW9uLFxyXG4gICAgICAgICAgICBzdGF0dXM6IGVudHJ5LnN0YXR1cyxcclxuICAgICAgICAgICAgZGV0YWlsczogZW50cnkuZGV0YWlscyA/PyB7fVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGZzLmFwcGVuZEZpbGVTeW5jKGZpbGVQYXRoLCBgJHtsaW5lfVxcbmAsIHsgZW5jb2Rpbmc6ICd1dGY4JywgbW9kZTogMG82MDAgfSk7XHJcbiAgICB9IGNhdGNoIHtcclxuICAgICAgICAvLyBCZXN0LWVmZm9ydCBsb2NhbCBhdWRpdCBsb2dnaW5nIG9ubHk7IGVtaXQgb25lIHdhcm5pbmcgZm9yIG9wZXJhdG9yIHZpc2liaWxpdHkuXHJcbiAgICAgICAgaWYgKCFvcHNMb2dXcml0ZVdhcm5pbmdFbWl0dGVkKSB7XHJcbiAgICAgICAgICAgIG9wc0xvZ1dyaXRlV2FybmluZ0VtaXR0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICBwcm9jZXNzLnN0ZGVyci53cml0ZSgnMGN0eF93YXJuaW5nOiBmYWlsZWQgdG8gd3JpdGUgQ0xJIG9wcyBsb2dcXG4nKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByZWFkQ2xpT3BzTG9nKGxpbWl0ID0gMTAwKTogQ2xpT3BzTG9nRW50cnlbXSB7XHJcbiAgICBjb25zdCBzYWZlTGltaXQgPSBNYXRoLm1heCgxLCBNYXRoLmZsb29yKGxpbWl0KSk7XHJcbiAgICBjb25zdCBmaWxlUGF0aCA9IGdldENsaU9wc0xvZ1BhdGgoKTtcclxuICAgIGlmICghZnMuZXhpc3RzU3luYyhmaWxlUGF0aCkpIHJldHVybiBbXTtcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IGxpbmVzID0gZnMucmVhZEZpbGVTeW5jKGZpbGVQYXRoLCAndXRmOCcpXHJcbiAgICAgICAgICAgIC5zcGxpdCgvXFxyP1xcbi8pXHJcbiAgICAgICAgICAgIC5maWx0ZXIoQm9vbGVhbik7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0OiBDbGlPcHNMb2dFbnRyeVtdID0gW107XHJcblxyXG4gICAgICAgIGZvciAoY29uc3QgbGluZSBvZiBsaW5lcy5zbGljZSgtc2FmZUxpbWl0KSkge1xyXG4gICAgICAgICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKGxpbmUpIGFzIFBhcnRpYWw8Q2xpT3BzTG9nRW50cnk+O1xyXG4gICAgICAgICAgICBpZiAoIXBhcnNlZCB8fCB0eXBlb2YgcGFyc2VkLnRpbWVzdGFtcCAhPT0gJ251bWJlcicgfHwgdHlwZW9mIHBhcnNlZC5vcGVyYXRpb24gIT09ICdzdHJpbmcnIHx8IHR5cGVvZiBwYXJzZWQuc3RhdHVzICE9PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRTdGF0dXM6IENsaU9wc1N0YXR1cyA9IHBhcnNlZC5zdGF0dXMgPT09ICdzdWNjZXNzJ1xyXG4gICAgICAgICAgICAgICAgfHwgcGFyc2VkLnN0YXR1cyA9PT0gJ2Vycm9yJ1xyXG4gICAgICAgICAgICAgICAgfHwgcGFyc2VkLnN0YXR1cyA9PT0gJ3BhcnRpYWwnXHJcbiAgICAgICAgICAgICAgICB8fCBwYXJzZWQuc3RhdHVzID09PSAnZHJ5X3J1bidcclxuICAgICAgICAgICAgICAgID8gcGFyc2VkLnN0YXR1c1xyXG4gICAgICAgICAgICAgICAgOiAnZXJyb3InO1xyXG5cclxuICAgICAgICAgICAgcmVzdWx0LnB1c2goe1xyXG4gICAgICAgICAgICAgICAgdGltZXN0YW1wOiBwYXJzZWQudGltZXN0YW1wLFxyXG4gICAgICAgICAgICAgICAgb3BlcmF0aW9uOiBwYXJzZWQub3BlcmF0aW9uLFxyXG4gICAgICAgICAgICAgICAgc3RhdHVzOiBub3JtYWxpemVkU3RhdHVzLFxyXG4gICAgICAgICAgICAgICAgZGV0YWlsczogcGFyc2VkLmRldGFpbHMgJiYgdHlwZW9mIHBhcnNlZC5kZXRhaWxzID09PSAnb2JqZWN0JyA/IHBhcnNlZC5kZXRhaWxzIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IDoge31cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfSBjYXRjaCB7XHJcbiAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2xlYXJDbGlPcHNMb2coKTogeyBjbGVhcmVkOiBib29sZWFuOyBwYXRoOiBzdHJpbmcgfSB7XHJcbiAgICBjb25zdCBmaWxlUGF0aCA9IGdldENsaU9wc0xvZ1BhdGgoKTtcclxuICAgIGlmICghZnMuZXhpc3RzU3luYyhmaWxlUGF0aCkpIHtcclxuICAgICAgICByZXR1cm4geyBjbGVhcmVkOiBmYWxzZSwgcGF0aDogZmlsZVBhdGggfTtcclxuICAgIH1cclxuXHJcbiAgICB0cnkge1xyXG4gICAgICAgIGZzLnJtU3luYyhmaWxlUGF0aCwgeyBmb3JjZTogdHJ1ZSB9KTtcclxuICAgICAgICByZXR1cm4geyBjbGVhcmVkOiB0cnVlLCBwYXRoOiBmaWxlUGF0aCB9O1xyXG4gICAgfSBjYXRjaCB7XHJcbiAgICAgICAgcmV0dXJuIHsgY2xlYXJlZDogZmFsc2UsIHBhdGg6IGZpbGVQYXRoIH07XHJcbiAgICB9XHJcbn1cclxuIiwgImltcG9ydCB0eXBlIHsgQ29ubmVjdG9yUXVldWVTdGF0cywgUXVldWVkQ29ubmVjdG9yRXZlbnQgfSBmcm9tICcuL2Nvbm5lY3Rvci1xdWV1ZSc7XHJcbmltcG9ydCB0eXBlIHsgQ29ubmVjdG9yRXZlbnRQYXlsb2FkIH0gZnJvbSAnLi9jbG91ZCc7XHJcblxyXG5leHBvcnQgdHlwZSBDb25uZWN0b3JRdWV1ZURyYWluUmVhc29uID1cclxuICAgIHwgJ2RyYWluZWQnXHJcbiAgICB8ICdicmlkZ2VfdW5zdXBwb3J0ZWQnXHJcbiAgICB8ICd0aW1lb3V0J1xyXG4gICAgfCAnbWF4X2JhdGNoZXMnXHJcbiAgICB8ICdwZW5kaW5nJ1xyXG4gICAgfCAnc2luZ2xlX3Bhc3MnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDb25uZWN0b3JRdWV1ZURyYWluT3B0aW9ucyB7XHJcbiAgICBtYWNoaW5lSWQ6IHN0cmluZztcclxuICAgIHRlbmFudElkOiBzdHJpbmcgfCBudWxsO1xyXG4gICAgYWNjZXNzVG9rZW46IHN0cmluZztcclxuICAgIG1heEJhdGNoZXM6IG51bWJlcjtcclxuICAgIGJhdGNoU2l6ZTogbnVtYmVyO1xyXG4gICAgd2FpdDogYm9vbGVhbjtcclxuICAgIHRpbWVvdXRNczogbnVtYmVyO1xyXG4gICAgcG9sbE1zOiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ29ubmVjdG9yUXVldWVEcmFpbkRlcGVuZGVuY2llcyB7XHJcbiAgICBub3coKTogbnVtYmVyO1xyXG4gICAgc2xlZXAobXM6IG51bWJlcik6IFByb21pc2U8dm9pZD47XHJcbiAgICBnZXRSZWFkeUV2ZW50cyhsaW1pdDogbnVtYmVyLCBub3c6IG51bWJlcik6IFF1ZXVlZENvbm5lY3RvckV2ZW50W107XHJcbiAgICBzZW5kRXZlbnRzKFxyXG4gICAgICAgIGFjY2Vzc1Rva2VuOiBzdHJpbmcsXHJcbiAgICAgICAgcGF5bG9hZDoge1xyXG4gICAgICAgICAgICBtYWNoaW5lSWQ6IHN0cmluZztcclxuICAgICAgICAgICAgdGVuYW50SWQ6IHN0cmluZyB8IG51bGw7XHJcbiAgICAgICAgICAgIHN1YnNjcmlwdGlvbklkOiBzdHJpbmc7XHJcbiAgICAgICAgICAgIGN1cnNvcjogbnVtYmVyO1xyXG4gICAgICAgICAgICBldmVudHM6IENvbm5lY3RvckV2ZW50UGF5bG9hZFtdO1xyXG4gICAgICAgIH1cclxuICAgICk6IFByb21pc2U8eyBvazogYm9vbGVhbjsgZXJyb3I/OiBzdHJpbmc7IHN0YXR1c0NvZGU6IG51bWJlciB9PjtcclxuICAgIG1hcmtFdmVudHNEZWxpdmVyZWQocXVldWVJZHM6IHN0cmluZ1tdKTogdm9pZDtcclxuICAgIG1hcmtFdmVudHNGYWlsZWQocXVldWVJZHM6IHN0cmluZ1tdLCBlcnJvcjogc3RyaW5nLCBub3c6IG51bWJlcik6IHZvaWQ7XHJcbiAgICBnZXRRdWV1ZVN0YXRzKG5vdzogbnVtYmVyKTogQ29ubmVjdG9yUXVldWVTdGF0cztcclxuICAgIG9uQnJpZGdlVW5zdXBwb3J0ZWQoKTogdm9pZCB8IFByb21pc2U8dm9pZD47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ29ubmVjdG9yUXVldWVEcmFpblJlc3VsdCB7XHJcbiAgICBzZW50OiBudW1iZXI7XHJcbiAgICBmYWlsZWQ6IG51bWJlcjtcclxuICAgIGJhdGNoZXM6IG51bWJlcjtcclxuICAgIHF1ZXVlOiBDb25uZWN0b3JRdWV1ZVN0YXRzO1xyXG4gICAgbGFzdEVycm9yOiBzdHJpbmcgfCBudWxsO1xyXG4gICAgd2FpdDoge1xyXG4gICAgICAgIGVuYWJsZWQ6IGJvb2xlYW47XHJcbiAgICAgICAgdGltZW91dE1zOiBudW1iZXI7XHJcbiAgICAgICAgcG9sbE1zOiBudW1iZXI7XHJcbiAgICAgICAgZWxhcHNlZE1zOiBudW1iZXI7XHJcbiAgICAgICAgdGltZWRPdXQ6IGJvb2xlYW47XHJcbiAgICAgICAgaGl0TWF4QmF0Y2hlczogYm9vbGVhbjtcclxuICAgICAgICByZWFzb246IENvbm5lY3RvclF1ZXVlRHJhaW5SZWFzb247XHJcbiAgICB9O1xyXG59XHJcblxyXG5mdW5jdGlvbiB0b0Nsb3VkRXZlbnRzKGJhdGNoOiBRdWV1ZWRDb25uZWN0b3JFdmVudFtdKTogQ29ubmVjdG9yRXZlbnRQYXlsb2FkW10ge1xyXG4gICAgcmV0dXJuIGJhdGNoLm1hcChpdGVtID0+ICh7XHJcbiAgICAgICAgZXZlbnRJZDogaXRlbS5ldmVudElkLFxyXG4gICAgICAgIHNlcXVlbmNlOiBpdGVtLnNlcXVlbmNlLFxyXG4gICAgICAgIGNvbnRleHRJZDogaXRlbS5jb250ZXh0SWQsXHJcbiAgICAgICAgdHlwZTogaXRlbS50eXBlLFxyXG4gICAgICAgIHRpbWVzdGFtcDogaXRlbS50aW1lc3RhbXAsXHJcbiAgICAgICAgc291cmNlOiBpdGVtLnNvdXJjZSxcclxuICAgICAgICBwYXlsb2FkOiBpdGVtLnBheWxvYWRcclxuICAgIH0pKTtcclxufVxyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRyYWluQ29ubmVjdG9yUXVldWUoXHJcbiAgICBvcHRpb25zOiBDb25uZWN0b3JRdWV1ZURyYWluT3B0aW9ucyxcclxuICAgIGRlcHM6IENvbm5lY3RvclF1ZXVlRHJhaW5EZXBlbmRlbmNpZXNcclxuKTogUHJvbWlzZTxDb25uZWN0b3JRdWV1ZURyYWluUmVzdWx0PiB7XHJcbiAgICBjb25zdCBzdGFydGVkQXQgPSBkZXBzLm5vdygpO1xyXG4gICAgY29uc3QgZGVhZGxpbmUgPSBvcHRpb25zLndhaXQgPyBzdGFydGVkQXQgKyBvcHRpb25zLnRpbWVvdXRNcyA6IHN0YXJ0ZWRBdDtcclxuICAgIGxldCBzZW50ID0gMDtcclxuICAgIGxldCBmYWlsZWQgPSAwO1xyXG4gICAgbGV0IGJhdGNoZXMgPSAwO1xyXG4gICAgbGV0IGxhc3RFcnJvcjogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcbiAgICBsZXQgdGltZWRPdXQgPSBmYWxzZTtcclxuICAgIGxldCBoaXRNYXhCYXRjaGVzID0gZmFsc2U7XHJcbiAgICBsZXQgYnJpZGdlVW5zdXBwb3J0ZWQgPSBmYWxzZTtcclxuXHJcbiAgICB3aGlsZSAodHJ1ZSkge1xyXG4gICAgICAgIHdoaWxlIChiYXRjaGVzIDwgb3B0aW9ucy5tYXhCYXRjaGVzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGJhdGNoID0gZGVwcy5nZXRSZWFkeUV2ZW50cyhvcHRpb25zLmJhdGNoU2l6ZSwgZGVwcy5ub3coKSk7XHJcbiAgICAgICAgICAgIGlmIChiYXRjaC5sZW5ndGggPT09IDApIGJyZWFrO1xyXG4gICAgICAgICAgICBiYXRjaGVzICs9IDE7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBjdXJzb3IgPSBiYXRjaC5yZWR1Y2UoKG1heCwgaXRlbSkgPT4gTWF0aC5tYXgobWF4LCBpdGVtLnNlcXVlbmNlKSwgMCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHBheWxvYWQgPSB7XHJcbiAgICAgICAgICAgICAgICBtYWNoaW5lSWQ6IG9wdGlvbnMubWFjaGluZUlkLFxyXG4gICAgICAgICAgICAgICAgdGVuYW50SWQ6IG9wdGlvbnMudGVuYW50SWQsXHJcbiAgICAgICAgICAgICAgICBzdWJzY3JpcHRpb25JZDogYmF0Y2hbMF0uc3Vic2NyaXB0aW9uSWQsXHJcbiAgICAgICAgICAgICAgICBjdXJzb3IsXHJcbiAgICAgICAgICAgICAgICBldmVudHM6IHRvQ2xvdWRFdmVudHMoYmF0Y2gpXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBkZXBzLnNlbmRFdmVudHMob3B0aW9ucy5hY2Nlc3NUb2tlbiwgcGF5bG9hZCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHF1ZXVlSWRzID0gYmF0Y2gubWFwKGl0ZW0gPT4gaXRlbS5xdWV1ZUlkKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQub2spIHtcclxuICAgICAgICAgICAgICAgIGRlcHMubWFya0V2ZW50c0RlbGl2ZXJlZChxdWV1ZUlkcyk7XHJcbiAgICAgICAgICAgICAgICBzZW50ICs9IGJhdGNoLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCBlcnJvclRleHQgPSByZXN1bHQuZXJyb3IgPz8gJ2Nvbm5lY3Rvcl9xdWV1ZV9kcmFpbl9mYWlsZWQnO1xyXG4gICAgICAgICAgICBkZXBzLm1hcmtFdmVudHNGYWlsZWQocXVldWVJZHMsIGVycm9yVGV4dCwgZGVwcy5ub3coKSk7XHJcbiAgICAgICAgICAgIGZhaWxlZCArPSBiYXRjaC5sZW5ndGg7XHJcbiAgICAgICAgICAgIGxhc3RFcnJvciA9IGVycm9yVGV4dDtcclxuXHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQuc3RhdHVzQ29kZSA9PT0gNDA0KSB7XHJcbiAgICAgICAgICAgICAgICBicmlkZ2VVbnN1cHBvcnRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBkZXBzLm9uQnJpZGdlVW5zdXBwb3J0ZWQoKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFvcHRpb25zLndhaXQpIGJyZWFrO1xyXG5cclxuICAgICAgICBjb25zdCBzbmFwc2hvdCA9IGRlcHMuZ2V0UXVldWVTdGF0cyhkZXBzLm5vdygpKTtcclxuICAgICAgICBpZiAoc25hcHNob3QucGVuZGluZyA9PT0gMCB8fCBicmlkZ2VVbnN1cHBvcnRlZCkgYnJlYWs7XHJcbiAgICAgICAgaWYgKGJhdGNoZXMgPj0gb3B0aW9ucy5tYXhCYXRjaGVzKSB7XHJcbiAgICAgICAgICAgIGhpdE1heEJhdGNoZXMgPSB0cnVlO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGRlcHMubm93KCkgPj0gZGVhZGxpbmUpIHtcclxuICAgICAgICAgICAgdGltZWRPdXQgPSB0cnVlO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHJlbWFpbmluZyA9IGRlYWRsaW5lIC0gZGVwcy5ub3coKTtcclxuICAgICAgICBpZiAocmVtYWluaW5nIDw9IDApIHtcclxuICAgICAgICAgICAgdGltZWRPdXQgPSB0cnVlO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgc2xlZXBGb3IgPSBNYXRoLm1heCgxLCBNYXRoLm1pbihvcHRpb25zLnBvbGxNcywgcmVtYWluaW5nKSk7XHJcbiAgICAgICAgYXdhaXQgZGVwcy5zbGVlcChzbGVlcEZvcik7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcXVldWUgPSBkZXBzLmdldFF1ZXVlU3RhdHMoZGVwcy5ub3coKSk7XHJcbiAgICBjb25zdCByZWFzb246IENvbm5lY3RvclF1ZXVlRHJhaW5SZWFzb24gPSBvcHRpb25zLndhaXRcclxuICAgICAgICA/IChxdWV1ZS5wZW5kaW5nID09PSAwXHJcbiAgICAgICAgICAgID8gJ2RyYWluZWQnXHJcbiAgICAgICAgICAgIDogYnJpZGdlVW5zdXBwb3J0ZWRcclxuICAgICAgICAgICAgICAgID8gJ2JyaWRnZV91bnN1cHBvcnRlZCdcclxuICAgICAgICAgICAgICAgIDogdGltZWRPdXRcclxuICAgICAgICAgICAgICAgICAgICA/ICd0aW1lb3V0J1xyXG4gICAgICAgICAgICAgICAgICAgIDogaGl0TWF4QmF0Y2hlc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICdtYXhfYmF0Y2hlcydcclxuICAgICAgICAgICAgICAgICAgICAgICAgOiAncGVuZGluZycpXHJcbiAgICAgICAgOiAnc2luZ2xlX3Bhc3MnO1xyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgc2VudCxcclxuICAgICAgICBmYWlsZWQsXHJcbiAgICAgICAgYmF0Y2hlcyxcclxuICAgICAgICBxdWV1ZSxcclxuICAgICAgICBsYXN0RXJyb3IsXHJcbiAgICAgICAgd2FpdDoge1xyXG4gICAgICAgICAgICBlbmFibGVkOiBvcHRpb25zLndhaXQsXHJcbiAgICAgICAgICAgIHRpbWVvdXRNczogb3B0aW9ucy50aW1lb3V0TXMsXHJcbiAgICAgICAgICAgIHBvbGxNczogb3B0aW9ucy5wb2xsTXMsXHJcbiAgICAgICAgICAgIGVsYXBzZWRNczogZGVwcy5ub3coKSAtIHN0YXJ0ZWRBdCxcclxuICAgICAgICAgICAgdGltZWRPdXQsXHJcbiAgICAgICAgICAgIGhpdE1heEJhdGNoZXMsXHJcbiAgICAgICAgICAgIHJlYXNvblxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn1cclxuIiwgImltcG9ydCBmcyBmcm9tICdmcyc7XHJcbmltcG9ydCBvcyBmcm9tICdvcyc7XHJcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xyXG5pbXBvcnQgcmVhZGxpbmUgZnJvbSAncmVhZGxpbmUnO1xyXG5pbXBvcnQgeyBzcGF3biB9IGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xyXG5cclxuY29uc3QgSElTVE9SWV9MSU1JVCA9IDUwMDtcclxuY29uc3QgREVGQVVMVF9QUk9NUFRfUExBSU4gPSAnMGN0eD4gJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgU2hlbGxPcHRpb25zIHtcclxuICAgIGNsaUVudHJ5cG9pbnQ6IHN0cmluZztcclxuICAgIG5vZGVFeGVjQXJndj86IHN0cmluZ1tdO1xyXG4gICAgcHJvbXB0Pzogc3RyaW5nO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRIaXN0b3J5UGF0aCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHBhdGguam9pbihvcy5ob21lZGlyKCksICcuMGN0eCcsICdoaXN0b3J5Jyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGxvYWRIaXN0b3J5KCk6IHN0cmluZ1tdIHtcclxuICAgIGNvbnN0IGhpc3RvcnlQYXRoID0gZ2V0SGlzdG9yeVBhdGgoKTtcclxuICAgIGlmICghZnMuZXhpc3RzU3luYyhoaXN0b3J5UGF0aCkpIHJldHVybiBbXTtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgY29uc3QgbGluZXMgPSBmc1xyXG4gICAgICAgICAgICAucmVhZEZpbGVTeW5jKGhpc3RvcnlQYXRoLCAndXRmOCcpXHJcbiAgICAgICAgICAgIC5zcGxpdCgvXFxyP1xcbi8pXHJcbiAgICAgICAgICAgIC5tYXAobGluZSA9PiBsaW5lLnRyaW0oKSlcclxuICAgICAgICAgICAgLmZpbHRlcihCb29sZWFuKTtcclxuICAgICAgICByZXR1cm4gbGluZXMuc2xpY2UoLUhJU1RPUllfTElNSVQpO1xyXG4gICAgfSBjYXRjaCB7XHJcbiAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBhcHBlbmRIaXN0b3J5RW50cnkobGluZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBjb25zdCBub3JtYWxpemVkID0gbGluZS50cmltKCk7XHJcbiAgICBpZiAoIW5vcm1hbGl6ZWQpIHJldHVybjtcclxuICAgIGNvbnN0IGhpc3RvcnlQYXRoID0gZ2V0SGlzdG9yeVBhdGgoKTtcclxuICAgIGZzLm1rZGlyU3luYyhwYXRoLmRpcm5hbWUoaGlzdG9yeVBhdGgpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcclxuICAgIGZzLmFwcGVuZEZpbGVTeW5jKGhpc3RvcnlQYXRoLCBgJHtub3JtYWxpemVkfVxcbmAsICd1dGY4Jyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHF1ZXN0aW9uKHJsOiByZWFkbGluZS5JbnRlcmZhY2UsIHByb21wdDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcclxuICAgICAgICBybC5xdWVzdGlvbihwcm9tcHQsIGFuc3dlciA9PiByZXNvbHZlKGFuc3dlcikpO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldENvbXBsZXRpb25DYW5kaWRhdGVzKCk6IHN0cmluZ1tdIHtcclxuICAgIHJldHVybiBbXHJcbiAgICAgICAgJy9oZWxwJyxcclxuICAgICAgICAnL2NsZWFyJyxcclxuICAgICAgICAnL2hpc3RvcnknLFxyXG4gICAgICAgICcvZXhpdCcsXHJcbiAgICAgICAgJy9wcmVzZW50LW9wdGlvbicsXHJcbiAgICAgICAgJ3NldHVwJyxcclxuICAgICAgICAnaW5zdGFsbCcsXHJcbiAgICAgICAgJ2Jvb3RzdHJhcCcsXHJcbiAgICAgICAgJ2RvY3RvcicsXHJcbiAgICAgICAgJ3N0YXR1cycsXHJcbiAgICAgICAgJ3JlcGFpcicsXHJcbiAgICAgICAgJ2Rhc2hib2FyZCcsXHJcbiAgICAgICAgJ3NoZWxsJyxcclxuICAgICAgICAncmVsZWFzZSBwdWJsaXNoJyxcclxuICAgICAgICAnYXV0aCBsb2dpbicsXHJcbiAgICAgICAgJ2F1dGggbG9nb3V0JyxcclxuICAgICAgICAnYXV0aCBzdGF0dXMnLFxyXG4gICAgICAgICdjb25maWcgbGlzdCcsXHJcbiAgICAgICAgJ2NvbmZpZyBnZXQnLFxyXG4gICAgICAgICdjb25maWcgc2V0JyxcclxuICAgICAgICAnc3luYyBzdGF0dXMnLFxyXG4gICAgICAgICdzeW5jIHBvbGljeSBnZXQnLFxyXG4gICAgICAgICdzeW5jIHBvbGljeSBzZXQnLFxyXG4gICAgICAgICdjb25uZWN0b3Igc3RhdHVzJyxcclxuICAgICAgICAnY29ubmVjdG9yIHZlcmlmeScsXHJcbiAgICAgICAgJ2Nvbm5lY3RvciByZWdpc3RlcicsXHJcbiAgICAgICAgJ2Nvbm5lY3RvciBxdWV1ZSBzdGF0dXMnLFxyXG4gICAgICAgICdjb25uZWN0b3IgcXVldWUgZHJhaW4nLFxyXG4gICAgICAgICdjb25uZWN0b3IgcXVldWUgcHVyZ2UnLFxyXG4gICAgICAgICdjb25uZWN0b3IgcXVldWUgbG9ncycsXHJcbiAgICAgICAgJ2RhZW1vbiBzdGFydCcsXHJcbiAgICAgICAgJ2RhZW1vbiBzZXJ2aWNlIHN0YXR1cydcclxuICAgIF07XHJcbn1cclxuXHJcbmFzeW5jIGZ1bmN0aW9uIHByaW50U2hlbGxIZWxwKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc3QgY29sb3IgPSAoYXdhaXQgaW1wb3J0KCdwaWNvY29sb3JzJykpLmRlZmF1bHQ7XHJcblxyXG4gICAgY29uc3QgbG9nbyA9IFtcclxuICAgICAgICBgICBfX18gICAgICBfICAgICAgICAgIGAsXHJcbiAgICAgICAgYCAvIF8gXFxcXCBfX198IHxfX19fICBfXyBgLFxyXG4gICAgICAgIGB8IHwgfCAvIF9ffCBfX1xcXFwgXFxcXC8gLyAgYCxcclxuICAgICAgICBgfCB8X3wgXFxcXF9fIFxcXFwgfF8gPiAgPCAgIGAsXHJcbiAgICAgICAgYCBcXFxcX19fL3xfX18vXFxcXF9fL18vXFxcXF9cXFxcICBgXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnNvbGUubG9nKCk7XHJcbiAgICBmb3IgKGNvbnN0IGxpbmUgb2YgbG9nbykge1xyXG4gICAgICAgIC8vIENvbG9yICcwJyAodGhlIE8gcGFydCkgaW4gY3lhbiwgYW5kICdjdHgnIGluIHdoaXRlXHJcbiAgICAgICAgY29uc3QgY29sb3JlZExpbmUgPSBsaW5lXHJcbiAgICAgICAgICAgIC5yZXBsYWNlKC9fX198X1xcc1xcXFx8X1xcfHxcXF9fX1xcL3xcXHxfXFx8L2csIG1hdGNoID0+IGNvbG9yLmN5YW4obWF0Y2gpKSAvLyBBdHRlbXB0aW5nIHRvIHRhcmdldCB0aGUgJzAnXHJcbiAgICAgICAgICAgIC5yZXBsYWNlKC9fICAgICAgICAgIHwgXFxfXFxfXFxfXFx8IFxcfFxcX1xcX1xcX1xcXyAgXFxfXFxfIHxcXF9cXF9cXHwgXFxfXFxfXFxcXCBcXFxcXFwvIFxcLyAgfFxcXFxcXF9cXF8gXFxcXCBcXHxcXF8gXFw+ICBcXDwgICB8XFx8XFxfXFxfXFxfXFwvXFxcXF9cXF9cXC9cXF9cXC9cXFxcXFxfXFxcXCAgLywgbWF0Y2ggPT4gY29sb3Iud2hpdGUobWF0Y2gpKTtcclxuXHJcbiAgICAgICAgLy8gQSBzaW1wbGVyIGFwcHJvYWNoIHRvIGNvbG9yaW5nIHRoZSBsb2dvIGJsb2NrOlxyXG4gICAgICAgIGNvbnNvbGUubG9nKGNvbG9yLmN5YW4obGluZS5zdWJzdHJpbmcoMCwgNikpICsgY29sb3Iud2hpdGUobGluZS5zdWJzdHJpbmcoNikpKTtcclxuICAgIH1cclxuICAgIGNvbnNvbGUubG9nKCk7XHJcbiAgICBjb25zb2xlLmxvZyhjb2xvci5kaW0oJ1x1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMCcpKTtcclxuXHJcbiAgICBjb25zb2xlLmxvZyhgXFxuJHtjb2xvci5ib2xkKCdCdWlsdC1pbnMnKX1gKTtcclxuICAgIGNvbnNvbGUubG9nKGAgICR7Y29sb3IuY3lhbignaGVscCcucGFkRW5kKDEwKSl9ICR7Y29sb3IuZGltKCdTaG93IHNoZWxsIGhlbHAnKX1gKTtcclxuICAgIGNvbnNvbGUubG9nKGAgICR7Y29sb3IuY3lhbignaGlzdG9yeScucGFkRW5kKDEwKSl9ICR7Y29sb3IuZGltKCdTaG93IGNvbW1hbmQgaGlzdG9yeScpfWApO1xyXG4gICAgY29uc29sZS5sb2coYCAgJHtjb2xvci5jeWFuKCdjbGVhcicucGFkRW5kKDEwKSl9ICR7Y29sb3IuZGltKCdDbGVhciB0ZXJtaW5hbCcpfWApO1xyXG4gICAgY29uc29sZS5sb2coYCAgJHtjb2xvci5jeWFuKCdleGl0IC8gcXVpdCcucGFkRW5kKDEwKSl9ICR7Y29sb3IuZGltKCdFeGl0IHNoZWxsJyl9YCk7XHJcblxyXG4gICAgY29uc29sZS5sb2coYFxcbiR7Y29sb3IuYm9sZCgnU2xhc2ggQ29tbWFuZHMnKX1gKTtcclxuICAgIGNvbnNvbGUubG9nKGAgICR7Y29sb3IubWFnZW50YSgnL2hlbHAnLnBhZEVuZCgyMCkpfSAke2NvbG9yLmRpbSgnU2hvdyBzaGVsbCBoZWxwJyl9YCk7XHJcbiAgICBjb25zb2xlLmxvZyhgICAke2NvbG9yLm1hZ2VudGEoJy9oaXN0b3J5Jy5wYWRFbmQoMjApKX0gJHtjb2xvci5kaW0oJ1Nob3cgY29tbWFuZCBoaXN0b3J5Jyl9YCk7XHJcbiAgICBjb25zb2xlLmxvZyhgICAke2NvbG9yLm1hZ2VudGEoJy9jbGVhcicucGFkRW5kKDIwKSl9ICR7Y29sb3IuZGltKCdDbGVhciB0ZXJtaW5hbCcpfWApO1xyXG4gICAgY29uc29sZS5sb2coYCAgJHtjb2xvci5tYWdlbnRhKCcvZXhpdCcucGFkRW5kKDIwKSl9ICR7Y29sb3IuZGltKCdFeGl0IHNoZWxsJyl9YCk7XHJcbiAgICBjb25zb2xlLmxvZyhgICAke2NvbG9yLm1hZ2VudGEoJy9wcmVzZW50LW9wdGlvbicucGFkRW5kKDIwKSl9ICR7Y29sb3IuZGltKCdQcmVzZW50IFVJIG9wdGlvbnMgb3ZlcmxheScpfWApO1xyXG5cclxuICAgIGNvbnNvbGUubG9nKGBcXG4ke2NvbG9yLmJvbGQoJ0dldCBzdGFydGVkJyl9YCk7XHJcbiAgICBjb25zb2xlLmxvZyhgICAke2NvbG9yLmdyZWVuKCc+Jyl9ICR7Y29sb3IuY3lhbignc3RhdHVzJy5wYWRFbmQoMzUpKX0gJHtjb2xvci5kaW0oJyhjaGVjayBkYWVtb24gYW5kIHN5c3RlbSBoZWFsdGgpJyl9YCk7XHJcbiAgICBjb25zb2xlLmxvZyhgICAke2NvbG9yLmdyZWVuKCc+Jyl9ICR7Y29sb3IuY3lhbignc2V0dXAgLS1jbGllbnRzPWFsbCcucGFkRW5kKDM1KSl9ICR7Y29sb3IuZGltKCcoY29uZmlndXJlIE1DUCBjbGllbnRzKScpfWApO1xyXG4gICAgY29uc29sZS5sb2coYCAgJHtjb2xvci5ncmVlbignPicpfSAke2NvbG9yLmN5YW4oJ2Nvbm5lY3RvciBzdGF0dXMgLS1jbG91ZCcucGFkRW5kKDM1KSl9ICR7Y29sb3IuZGltKCcoY2hlY2sgY2xvdWQgY29ubmVjdGlvbiknKX1gKTtcclxuICAgIGNvbnNvbGUubG9nKGAgICR7Y29sb3IuZ3JlZW4oJz4nKX0gJHtjb2xvci5jeWFuKCdhdXRoIGxvZ2luJy5wYWRFbmQoMzUpKX0gJHtjb2xvci5kaW0oJyhhdXRoZW50aWNhdGUgd2l0aCAwY3R4KScpfWApO1xyXG5cclxuICAgIGNvbnNvbGUubG9nKGBcXG4ke2NvbG9yLmRpbSgnQWxsIGV4aXN0aW5nIDBjdHggY29tbWFuZHMgYXJlIHN1cHBvcnRlZCB3aXRob3V0IHRoZSBcIjBjdHhcIiBwcmVmaXguJyl9XFxuYCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiB0b2tlbml6ZVNoZWxsSW5wdXQoaW5wdXQ6IHN0cmluZyk6IHN0cmluZ1tdIHtcclxuICAgIGNvbnN0IHRva2Vuczogc3RyaW5nW10gPSBbXTtcclxuICAgIGxldCBjdXJyZW50ID0gJyc7XHJcbiAgICBsZXQgcXVvdGU6ICdcIicgfCBcIidcIiB8IG51bGwgPSBudWxsO1xyXG4gICAgbGV0IGVzY2FwaW5nID0gZmFsc2U7XHJcblxyXG4gICAgZm9yIChjb25zdCBjaGFyIG9mIGlucHV0KSB7XHJcbiAgICAgICAgaWYgKGVzY2FwaW5nKSB7XHJcbiAgICAgICAgICAgIGN1cnJlbnQgKz0gY2hhcjtcclxuICAgICAgICAgICAgZXNjYXBpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoY2hhciA9PT0gJ1xcXFwnICYmIHF1b3RlICE9PSBcIidcIikge1xyXG4gICAgICAgICAgICBlc2NhcGluZyA9IHRydWU7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHF1b3RlICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGlmIChjaGFyID09PSBxdW90ZSkge1xyXG4gICAgICAgICAgICAgICAgcXVvdGUgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY3VycmVudCArPSBjaGFyO1xyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChjaGFyID09PSAnXCInIHx8IGNoYXIgPT09IFwiJ1wiKSB7XHJcbiAgICAgICAgICAgIHF1b3RlID0gY2hhcjtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoL1xccy8udGVzdChjaGFyKSkge1xyXG4gICAgICAgICAgICBpZiAoY3VycmVudC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICB0b2tlbnMucHVzaChjdXJyZW50KTtcclxuICAgICAgICAgICAgICAgIGN1cnJlbnQgPSAnJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGN1cnJlbnQgKz0gY2hhcjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZXNjYXBpbmcpIHtcclxuICAgICAgICBjdXJyZW50ICs9ICdcXFxcJztcclxuICAgIH1cclxuXHJcbiAgICBpZiAocXVvdGUgIT09IG51bGwpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VudGVybWluYXRlZCBxdW90ZWQgc3RyaW5nLicpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjdXJyZW50Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICB0b2tlbnMucHVzaChjdXJyZW50KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdG9rZW5zO1xyXG59XHJcblxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuU2hlbGxDb21tYW5kKHRva2Vuczogc3RyaW5nW10sIG9wdGlvbnM6IFNoZWxsT3B0aW9ucyk6IFByb21pc2U8bnVtYmVyPiB7XHJcbiAgICBjb25zdCBub3JtYWxpemVkID0gWy4uLnRva2Vuc107XHJcbiAgICBpZiAobm9ybWFsaXplZFswXSA9PT0gJzBjdHgnKSB7XHJcbiAgICAgICAgbm9ybWFsaXplZC5zaGlmdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChub3JtYWxpemVkLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIHJldHVybiAwO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChub3JtYWxpemVkWzBdID09PSAnc2hlbGwnKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignTmVzdGVkIHNoZWxsIGlzIG5vdCBzdXBwb3J0ZWQuIFVzZSBgZXhpdGAgdG8gbGVhdmUgdGhlIGN1cnJlbnQgc2hlbGwuJyk7XHJcbiAgICAgICAgcmV0dXJuIDE7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY2hpbGRBcmdzID0gWy4uLihvcHRpb25zLm5vZGVFeGVjQXJndiA/PyBbXSksIG9wdGlvbnMuY2xpRW50cnlwb2ludCwgLi4ubm9ybWFsaXplZF07XHJcblxyXG4gICAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xyXG4gICAgICAgIGNvbnN0IGNoaWxkID0gc3Bhd24ocHJvY2Vzcy5leGVjUGF0aCwgY2hpbGRBcmdzLCB7XHJcbiAgICAgICAgICAgIHN0ZGlvOiAnaW5oZXJpdCcsXHJcbiAgICAgICAgICAgIGVudjoge1xyXG4gICAgICAgICAgICAgICAgLi4ucHJvY2Vzcy5lbnYsXHJcbiAgICAgICAgICAgICAgICBDVFhfU0hFTExfTU9ERTogJzEnXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgY2hpbGQub24oJ2Vycm9yJywgZXJyb3IgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKSk7XHJcbiAgICAgICAgICAgIHJlc29sdmUoMSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGNoaWxkLm9uKCdjbG9zZScsIGNvZGUgPT4ge1xyXG4gICAgICAgICAgICByZXNvbHZlKGNvZGUgPz8gMSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bkludGVyYWN0aXZlU2hlbGwob3B0aW9uczogU2hlbGxPcHRpb25zKTogUHJvbWlzZTxudW1iZXI+IHtcclxuICAgIGlmICghcHJvY2Vzcy5zdGRpbi5pc1RUWSB8fCAhcHJvY2Vzcy5zdGRvdXQuaXNUVFkpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdJbnRlcmFjdGl2ZSBzaGVsbCByZXF1aXJlcyBhIFRUWSB0ZXJtaW5hbC4nKTtcclxuICAgICAgICByZXR1cm4gMTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBjb2xvciA9IChhd2FpdCBpbXBvcnQoJ3BpY29jb2xvcnMnKSkuZGVmYXVsdDtcclxuICAgIGNvbnN0IHByb21wdCA9IG9wdGlvbnMucHJvbXB0ID8/IGAke2NvbG9yLmN5YW4oJzBjdHgnKX0ke2NvbG9yLmRpbSgnPicpfSBgO1xyXG5cclxuICAgIGNvbnN0IGhpc3RvcnkgPSBsb2FkSGlzdG9yeSgpO1xyXG4gICAgY29uc3QgY29tcGxldGlvbnMgPSBnZXRDb21wbGV0aW9uQ2FuZGlkYXRlcygpO1xyXG4gICAgY29uc3QgcmwgPSByZWFkbGluZS5jcmVhdGVJbnRlcmZhY2Uoe1xyXG4gICAgICAgIGlucHV0OiBwcm9jZXNzLnN0ZGluLFxyXG4gICAgICAgIG91dHB1dDogcHJvY2Vzcy5zdGRvdXQsXHJcbiAgICAgICAgaGlzdG9yeVNpemU6IEhJU1RPUllfTElNSVQsXHJcbiAgICAgICAgcmVtb3ZlSGlzdG9yeUR1cGxpY2F0ZXM6IHRydWUsXHJcbiAgICAgICAgY29tcGxldGVyOiAobGluZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBsaW5lLnRyaW0oKTtcclxuICAgICAgICAgICAgY29uc3QgbWF0Y2hlcyA9IGNvbXBsZXRpb25zLmZpbHRlcihjYW5kaWRhdGUgPT4gY2FuZGlkYXRlLnN0YXJ0c1dpdGgobm9ybWFsaXplZCkpO1xyXG4gICAgICAgICAgICByZXR1cm4gW21hdGNoZXMubGVuZ3RoID4gMCA/IG1hdGNoZXMgOiBjb21wbGV0aW9ucywgbm9ybWFsaXplZF07XHJcbiAgICAgICAgfVxyXG4gICAgfSkgYXMgcmVhZGxpbmUuSW50ZXJmYWNlICYgeyBoaXN0b3J5OiBzdHJpbmdbXSB9O1xyXG5cclxuICAgIHJsLmhpc3RvcnkgPSBbLi4uaGlzdG9yeV0ucmV2ZXJzZSgpO1xyXG5cclxuICAgIGF3YWl0IHByaW50U2hlbGxIZWxwKCk7XHJcblxyXG4gICAgbGV0IGxhc3RFeGl0Q29kZSA9IDA7XHJcbiAgICBsZXQgaW50ZXJydXB0ZWQgPSBmYWxzZTtcclxuXHJcbiAgICBybC5vbignU0lHSU5UJywgKCkgPT4ge1xyXG4gICAgICAgIGlmIChpbnRlcnJ1cHRlZCkge1xyXG4gICAgICAgICAgICBybC5jbG9zZSgpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGludGVycnVwdGVkID0gdHJ1ZTtcclxuICAgICAgICBybC53cml0ZSgnXFxuKFByZXNzIEN0cmwrQyBhZ2FpbiB0byBleGl0KVxcbicpO1xyXG4gICAgICAgIHJsLnByb21wdCgpO1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBpbnRlcnJ1cHRlZCA9IGZhbHNlO1xyXG4gICAgICAgIH0sIDEwMDApO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgICB3aGlsZSAodHJ1ZSkge1xyXG4gICAgICAgICAgICBjb25zdCByYXdMaW5lID0gYXdhaXQgcXVlc3Rpb24ocmwsIHByb21wdCk7XHJcbiAgICAgICAgICAgIGludGVycnVwdGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGNvbnN0IGxpbmUgPSByYXdMaW5lLnRyaW0oKTtcclxuXHJcbiAgICAgICAgICAgIGlmICghbGluZSkgY29udGludWU7XHJcblxyXG4gICAgICAgICAgICBpZiAobGluZSA9PT0gJ2V4aXQnIHx8IGxpbmUgPT09ICdxdWl0JyB8fCBsaW5lID09PSAnL2V4aXQnIHx8IGxpbmUgPT09ICcvcXVpdCcpIHtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAobGluZSA9PT0gJ2hlbHAnIHx8IGxpbmUgPT09ICcvaGVscCcpIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHByaW50U2hlbGxIZWxwKCk7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGxpbmUgPT09ICdjbGVhcicgfHwgbGluZSA9PT0gJy9jbGVhcicpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuY2xlYXIoKTtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAobGluZSA9PT0gJ2hpc3RvcnknIHx8IGxpbmUgPT09ICcvaGlzdG9yeScpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNuYXBzaG90ID0gbG9hZEhpc3RvcnkoKTtcclxuICAgICAgICAgICAgICAgIHNuYXBzaG90LmZvckVhY2goKGVudHJ5LCBpZHgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgJHtpZHggKyAxfS4gJHtlbnRyeX1gKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChsaW5lLnN0YXJ0c1dpdGgoJy9wcmVzZW50LW9wdGlvbicpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhcmdzID0gbGluZS5zcGxpdCgnICcpLnNsaWNlKDEpLmpvaW4oJyAnKTtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGNvbG9yLm1hZ2VudGEoYFtVSSBPdmVybGF5XSBQcmVzZW50aW5nIG9wdGlvbnMgZm9yOiAke2FyZ3MgfHwgJyhkZWZhdWx0cyknfWApKTtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBhcHBlbmRIaXN0b3J5RW50cnkobGluZSk7XHJcblxyXG4gICAgICAgICAgICBsZXQgdG9rZW5zOiBzdHJpbmdbXTtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHRva2VucyA9IHRva2VuaXplU2hlbGxJbnB1dChsaW5lKTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpKTtcclxuICAgICAgICAgICAgICAgIGxhc3RFeGl0Q29kZSA9IDE7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGFzdEV4aXRDb2RlID0gYXdhaXQgcnVuU2hlbGxDb21tYW5kKHRva2Vucywgb3B0aW9ucyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSBmaW5hbGx5IHtcclxuICAgICAgICBybC5jbG9zZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBsYXN0RXhpdENvZGU7XHJcbn1cclxuIiwgImltcG9ydCB7IHNwYXduIH0gZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XHJcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xyXG5pbXBvcnQgeyBleGVjU3luYyB9IGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xyXG5cclxudHlwZSBSdW5Nb2RlID0gJ2luaGVyaXQnIHwgJ2NhcHR1cmUnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBQcm9jZXNzUnVuUmVzdWx0IHtcclxuICAgIG9rOiBib29sZWFuO1xyXG4gICAgY29tbWFuZDogc3RyaW5nO1xyXG4gICAgYXJnczogc3RyaW5nW107XHJcbiAgICBleGl0Q29kZTogbnVtYmVyIHwgbnVsbDtcclxuICAgIHN0ZG91dDogc3RyaW5nO1xyXG4gICAgc3RkZXJyOiBzdHJpbmc7XHJcbiAgICBkdXJhdGlvbk1zOiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUmVsZWFzZVN0ZXBSZXN1bHQgZXh0ZW5kcyBQcm9jZXNzUnVuUmVzdWx0IHtcclxuICAgIGlkOiBzdHJpbmc7XHJcbiAgICBza2lwcGVkPzogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBSZWxlYXNlUHVibGlzaE9wdGlvbnMge1xyXG4gICAgdmVyc2lvbjogc3RyaW5nO1xyXG4gICAgdGFnPzogc3RyaW5nO1xyXG4gICAgZHJ5UnVuPzogYm9vbGVhbjtcclxuICAgIGFsbG93RGlydHk/OiBib29sZWFuO1xyXG4gICAgb3RwPzogc3RyaW5nO1xyXG4gICAgc2tpcFZhbGlkYXRlPzogYm9vbGVhbjtcclxuICAgIHNraXBDaGFuZ2Vsb2c/OiBib29sZWFuO1xyXG4gICAgb3V0cHV0TW9kZT86IFJ1bk1vZGU7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUmVsZWFzZVB1Ymxpc2hSZXN1bHQge1xyXG4gICAgb2s6IGJvb2xlYW47XHJcbiAgICByZXBvUm9vdDogc3RyaW5nO1xyXG4gICAgdmVyc2lvbjogc3RyaW5nO1xyXG4gICAgdGFnOiBzdHJpbmc7XHJcbiAgICBkcnlSdW46IGJvb2xlYW47XHJcbiAgICBzdGVwczogUmVsZWFzZVN0ZXBSZXN1bHRbXTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZVJlbGVhc2VWZXJzaW9uKGlucHV0OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgdHJpbW1lZCA9IGlucHV0LnRyaW0oKTtcclxuICAgIGlmICghdHJpbW1lZCkgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIHJlcXVpcmVkIHZlcnNpb24gKGV4cGVjdGVkIHZYLlkuWikuJyk7XHJcbiAgICByZXR1cm4gdHJpbW1lZC5zdGFydHNXaXRoKCd2JykgPyB0cmltbWVkIDogYHYke3RyaW1tZWR9YDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlUmVsZWFzZVZlcnNpb24oaW5wdXQ6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBub3JtYWxpemVkID0gbm9ybWFsaXplUmVsZWFzZVZlcnNpb24oaW5wdXQpO1xyXG4gICAgaWYgKCEvXnZcXGQrXFwuXFxkK1xcLlxcZCsoWy0uXVswLTlBLVphLXouLV0rKT8kLy50ZXN0KG5vcm1hbGl6ZWQpKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHZlcnNpb24gJyR7aW5wdXR9Jy4gRXhwZWN0ZWQgdlguWS5aIG9yIHZYLlkuWi1wcmVyZWxlYXNlLmApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5vcm1hbGl6ZWQ7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldE5wbUNvbW1hbmQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiAnbnBtJztcclxufVxyXG5cclxuZnVuY3Rpb24gcmVzb2x2ZVJlcG9Sb290KCk6IHN0cmluZyB7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIHJldHVybiBleGVjU3luYygnZ2l0IHJldi1wYXJzZSAtLXNob3ctdG9wbGV2ZWwnLCB7XHJcbiAgICAgICAgICAgIGN3ZDogcHJvY2Vzcy5jd2QoKSxcclxuICAgICAgICAgICAgc3RkaW86IFsnaWdub3JlJywgJ3BpcGUnLCAncGlwZSddXHJcbiAgICAgICAgfSkudG9TdHJpbmcoKS50cmltKCk7XHJcbiAgICB9IGNhdGNoIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbnNpZGUgdGhlIDBjdHggcmVwb3NpdG9yeSAoZ2l0IHJvb3QgcmVxdWlyZWQgZm9yIHJlbGVhc2UgY29tbWFuZCkuJyk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmFzeW5jIGZ1bmN0aW9uIHJ1blByb2Nlc3MoXHJcbiAgICBjb21tYW5kOiBzdHJpbmcsXHJcbiAgICBhcmdzOiBzdHJpbmdbXSxcclxuICAgIGN3ZDogc3RyaW5nLFxyXG4gICAgbW9kZTogUnVuTW9kZSxcclxuICAgIHVzZVNoZWxsID0gZmFsc2VcclxuKTogUHJvbWlzZTxQcm9jZXNzUnVuUmVzdWx0PiB7XHJcbiAgICBjb25zdCBzdGFydGVkQXQgPSBEYXRlLm5vdygpO1xyXG4gICAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xyXG4gICAgICAgIGNvbnN0IGNoaWxkID0gc3Bhd24oY29tbWFuZCwgYXJncywge1xyXG4gICAgICAgICAgICBjd2QsXHJcbiAgICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXHJcbiAgICAgICAgICAgIHN0ZGlvOiBtb2RlID09PSAnaW5oZXJpdCcgPyAnaW5oZXJpdCcgOiAncGlwZScsXHJcbiAgICAgICAgICAgIHdpbmRvd3NIaWRlOiB0cnVlLFxyXG4gICAgICAgICAgICBzaGVsbDogdXNlU2hlbGxcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgbGV0IHN0ZG91dCA9ICcnO1xyXG4gICAgICAgIGxldCBzdGRlcnIgPSAnJztcclxuXHJcbiAgICAgICAgaWYgKG1vZGUgPT09ICdjYXB0dXJlJykge1xyXG4gICAgICAgICAgICBjaGlsZC5zdGRvdXQ/Lm9uKCdkYXRhJywgY2h1bmsgPT4ge1xyXG4gICAgICAgICAgICAgICAgc3Rkb3V0ICs9IGNodW5rLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBjaGlsZC5zdGRlcnI/Lm9uKCdkYXRhJywgY2h1bmsgPT4ge1xyXG4gICAgICAgICAgICAgICAgc3RkZXJyICs9IGNodW5rLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY2hpbGQub24oJ2Vycm9yJywgZXJyb3IgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBmaW5pc2hlZEF0ID0gRGF0ZS5ub3coKTtcclxuICAgICAgICAgICAgcmVzb2x2ZSh7XHJcbiAgICAgICAgICAgICAgICBvazogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBjb21tYW5kLFxyXG4gICAgICAgICAgICAgICAgYXJncyxcclxuICAgICAgICAgICAgICAgIGV4aXRDb2RlOiAxLFxyXG4gICAgICAgICAgICAgICAgc3Rkb3V0LFxyXG4gICAgICAgICAgICAgICAgc3RkZXJyOiBgJHtzdGRlcnJ9XFxuJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcil9YC50cmltKCksXHJcbiAgICAgICAgICAgICAgICBkdXJhdGlvbk1zOiBmaW5pc2hlZEF0IC0gc3RhcnRlZEF0XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjaGlsZC5vbignY2xvc2UnLCBjb2RlID0+IHtcclxuICAgICAgICAgICAgY29uc3QgZmluaXNoZWRBdCA9IERhdGUubm93KCk7XHJcbiAgICAgICAgICAgIHJlc29sdmUoe1xyXG4gICAgICAgICAgICAgICAgb2s6IGNvZGUgPT09IDAsXHJcbiAgICAgICAgICAgICAgICBjb21tYW5kLFxyXG4gICAgICAgICAgICAgICAgYXJncyxcclxuICAgICAgICAgICAgICAgIGV4aXRDb2RlOiBjb2RlLFxyXG4gICAgICAgICAgICAgICAgc3Rkb3V0OiBzdGRvdXQudHJpbSgpLFxyXG4gICAgICAgICAgICAgICAgc3RkZXJyOiBzdGRlcnIudHJpbSgpLFxyXG4gICAgICAgICAgICAgICAgZHVyYXRpb25NczogZmluaXNoZWRBdCAtIHN0YXJ0ZWRBdFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBidWlsZE5wbVJ1bkFyZ3Moc2NyaXB0OiBzdHJpbmcsIHNjcmlwdEFyZ3M6IHN0cmluZ1tdID0gW10pOiBzdHJpbmdbXSB7XHJcbiAgICBjb25zdCBhcmdzID0gWydydW4nLCBzY3JpcHRdO1xyXG4gICAgaWYgKHNjcmlwdEFyZ3MubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGFyZ3MucHVzaCgnLS0nLCAuLi5zY3JpcHRBcmdzKTtcclxuICAgIH1cclxuICAgIHJldHVybiBhcmdzO1xyXG59XHJcblxyXG5hc3luYyBmdW5jdGlvbiBydW5OcG1TY3JpcHQoXHJcbiAgICBzdGVwSWQ6IHN0cmluZyxcclxuICAgIHNjcmlwdDogc3RyaW5nLFxyXG4gICAgc2NyaXB0QXJnczogc3RyaW5nW10sXHJcbiAgICByZXBvUm9vdDogc3RyaW5nLFxyXG4gICAgbW9kZTogUnVuTW9kZVxyXG4pOiBQcm9taXNlPFJlbGVhc2VTdGVwUmVzdWx0PiB7XHJcbiAgICBjb25zdCBjb21tYW5kID0gZ2V0TnBtQ29tbWFuZCgpO1xyXG4gICAgY29uc3QgYXJncyA9IGJ1aWxkTnBtUnVuQXJncyhzY3JpcHQsIHNjcmlwdEFyZ3MpO1xyXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcnVuUHJvY2Vzcyhjb21tYW5kLCBhcmdzLCByZXBvUm9vdCwgbW9kZSwgcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJyk7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIC4uLnJlc3VsdCxcclxuICAgICAgICBpZDogc3RlcElkXHJcbiAgICB9O1xyXG59XHJcblxyXG5hc3luYyBmdW5jdGlvbiBydW5QdWJsaXNoU2NyaXB0KFxyXG4gICAgc3RlcElkOiBzdHJpbmcsXHJcbiAgICBwYXJhbXM6IHtcclxuICAgICAgICByZXBvUm9vdDogc3RyaW5nO1xyXG4gICAgICAgIGRyeVJ1bjogYm9vbGVhbjtcclxuICAgICAgICBhbGxvd0RpcnR5PzogYm9vbGVhbjtcclxuICAgICAgICBvdHA/OiBzdHJpbmc7XHJcbiAgICAgICAgdGFnOiBzdHJpbmc7XHJcbiAgICB9LFxyXG4gICAgbW9kZTogUnVuTW9kZVxyXG4pOiBQcm9taXNlPFJlbGVhc2VTdGVwUmVzdWx0PiB7XHJcbiAgICBjb25zdCBzY3JpcHRQYXRoID0gcGF0aC5qb2luKHBhcmFtcy5yZXBvUm9vdCwgJ3NjcmlwdHMnLCAncmVsZWFzZScsICdwdWJsaXNoLXBhY2thZ2VzLnBzMScpO1xyXG4gICAgY29uc3QgYXJncyA9IFsnLUV4ZWN1dGlvblBvbGljeScsICdCeXBhc3MnLCAnLUZpbGUnLCBzY3JpcHRQYXRoLCAnLVRhZycsIHBhcmFtcy50YWddO1xyXG4gICAgaWYgKHBhcmFtcy5kcnlSdW4pIHtcclxuICAgICAgICBhcmdzLnB1c2goJy1EcnlSdW4nKTtcclxuICAgIH1cclxuICAgIGlmIChwYXJhbXMuYWxsb3dEaXJ0eSkge1xyXG4gICAgICAgIGFyZ3MucHVzaCgnLUFsbG93RGlydHknKTtcclxuICAgIH1cclxuICAgIGlmIChwYXJhbXMub3RwKSB7XHJcbiAgICAgICAgYXJncy5wdXNoKCctT1RQJywgcGFyYW1zLm90cCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcnVuUHJvY2VzcygncG93ZXJzaGVsbCcsIGFyZ3MsIHBhcmFtcy5yZXBvUm9vdCwgbW9kZSk7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIC4uLnJlc3VsdCxcclxuICAgICAgICBpZDogc3RlcElkXHJcbiAgICB9O1xyXG59XHJcblxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuUmVsZWFzZVB1Ymxpc2gob3B0aW9uczogUmVsZWFzZVB1Ymxpc2hPcHRpb25zKTogUHJvbWlzZTxSZWxlYXNlUHVibGlzaFJlc3VsdD4ge1xyXG4gICAgY29uc3QgcmVwb1Jvb3QgPSByZXNvbHZlUmVwb1Jvb3QoKTtcclxuICAgIGNvbnN0IHZlcnNpb24gPSB2YWxpZGF0ZVJlbGVhc2VWZXJzaW9uKG9wdGlvbnMudmVyc2lvbik7XHJcbiAgICBjb25zdCB0YWcgPSAob3B0aW9ucy50YWcgfHwgJ2xhdGVzdCcpLnRyaW0oKSB8fCAnbGF0ZXN0JztcclxuICAgIGNvbnN0IGRyeVJ1biA9IEJvb2xlYW4ob3B0aW9ucy5kcnlSdW4pO1xyXG4gICAgY29uc3Qgb3V0cHV0TW9kZSA9IG9wdGlvbnMub3V0cHV0TW9kZSA/PyAnaW5oZXJpdCc7XHJcbiAgICBjb25zdCBzdGVwczogUmVsZWFzZVN0ZXBSZXN1bHRbXSA9IFtdO1xyXG5cclxuICAgIGNvbnN0IHB1c2hBbmRDaGVjayA9IGFzeW5jIChyZXN1bHRQcm9taXNlOiBQcm9taXNlPFJlbGVhc2VTdGVwUmVzdWx0Pik6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlc3VsdFByb21pc2U7XHJcbiAgICAgICAgc3RlcHMucHVzaChyZXN1bHQpO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQub2s7XHJcbiAgICB9O1xyXG5cclxuICAgIGlmICghb3B0aW9ucy5za2lwVmFsaWRhdGUpIHtcclxuICAgICAgICBjb25zdCB2YWxpZGF0ZUFyZ3M6IHN0cmluZ1tdID0gW107XHJcbiAgICAgICAgaWYgKGRyeVJ1bikgdmFsaWRhdGVBcmdzLnB1c2goJy1EcnlSdW4nKTtcclxuICAgICAgICBpZiAob3B0aW9ucy5hbGxvd0RpcnR5KSB2YWxpZGF0ZUFyZ3MucHVzaCgnLUFsbG93RGlydHknKTtcclxuICAgICAgICBjb25zdCBvayA9IGF3YWl0IHB1c2hBbmRDaGVjayhydW5OcG1TY3JpcHQoJ3ZhbGlkYXRlJywgJ3JlbGVhc2U6dmFsaWRhdGUnLCB2YWxpZGF0ZUFyZ3MsIHJlcG9Sb290LCBvdXRwdXRNb2RlKSk7XHJcbiAgICAgICAgaWYgKCFvaykge1xyXG4gICAgICAgICAgICByZXR1cm4geyBvazogZmFsc2UsIHJlcG9Sb290LCB2ZXJzaW9uLCB0YWcsIGRyeVJ1biwgc3RlcHMgfTtcclxuICAgICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHN0ZXBzLnB1c2goe1xyXG4gICAgICAgICAgICBpZDogJ3ZhbGlkYXRlJyxcclxuICAgICAgICAgICAgb2s6IHRydWUsXHJcbiAgICAgICAgICAgIHNraXBwZWQ6IHRydWUsXHJcbiAgICAgICAgICAgIGNvbW1hbmQ6IGdldE5wbUNvbW1hbmQoKSxcclxuICAgICAgICAgICAgYXJnczogYnVpbGROcG1SdW5BcmdzKCdyZWxlYXNlOnZhbGlkYXRlJyksXHJcbiAgICAgICAgICAgIGV4aXRDb2RlOiAwLFxyXG4gICAgICAgICAgICBzdGRvdXQ6ICcnLFxyXG4gICAgICAgICAgICBzdGRlcnI6ICcnLFxyXG4gICAgICAgICAgICBkdXJhdGlvbk1zOiAwXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFvcHRpb25zLnNraXBDaGFuZ2Vsb2cpIHtcclxuICAgICAgICBjb25zdCBjaGFuZ2Vsb2dBcmdzID0gWyctVmVyc2lvbicsIHZlcnNpb25dO1xyXG4gICAgICAgIGlmIChkcnlSdW4pIGNoYW5nZWxvZ0FyZ3MucHVzaCgnLURyeVJ1bicpO1xyXG4gICAgICAgIGNvbnN0IG9rID0gYXdhaXQgcHVzaEFuZENoZWNrKFxyXG4gICAgICAgICAgICBydW5OcG1TY3JpcHQoJ2NoYW5nZWxvZycsICdyZWxlYXNlOmNoYW5nZWxvZzpwcmVwYXJlJywgY2hhbmdlbG9nQXJncywgcmVwb1Jvb3QsIG91dHB1dE1vZGUpXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoIW9rKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7IG9rOiBmYWxzZSwgcmVwb1Jvb3QsIHZlcnNpb24sIHRhZywgZHJ5UnVuLCBzdGVwcyB9O1xyXG4gICAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgc3RlcHMucHVzaCh7XHJcbiAgICAgICAgICAgIGlkOiAnY2hhbmdlbG9nJyxcclxuICAgICAgICAgICAgb2s6IHRydWUsXHJcbiAgICAgICAgICAgIHNraXBwZWQ6IHRydWUsXHJcbiAgICAgICAgICAgIGNvbW1hbmQ6IGdldE5wbUNvbW1hbmQoKSxcclxuICAgICAgICAgICAgYXJnczogYnVpbGROcG1SdW5BcmdzKCdyZWxlYXNlOmNoYW5nZWxvZzpwcmVwYXJlJyksXHJcbiAgICAgICAgICAgIGV4aXRDb2RlOiAwLFxyXG4gICAgICAgICAgICBzdGRvdXQ6ICcnLFxyXG4gICAgICAgICAgICBzdGRlcnI6ICcnLFxyXG4gICAgICAgICAgICBkdXJhdGlvbk1zOiAwXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAge1xyXG4gICAgICAgIGNvbnN0IG9rID0gYXdhaXQgcHVzaEFuZENoZWNrKFxyXG4gICAgICAgICAgICBydW5OcG1TY3JpcHQoJ3RhZ19wcmV2aWV3JywgJ3JlbGVhc2U6dGFnOmRyeScsIFsnLVZlcnNpb24nLCB2ZXJzaW9uXSwgcmVwb1Jvb3QsIG91dHB1dE1vZGUpXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoIW9rKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7IG9rOiBmYWxzZSwgcmVwb1Jvb3QsIHZlcnNpb24sIHRhZywgZHJ5UnVuLCBzdGVwcyB9O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB7XHJcbiAgICAgICAgY29uc3Qgb2sgPSBhd2FpdCBwdXNoQW5kQ2hlY2socnVuTnBtU2NyaXB0KCdwYWNrX2RyeScsICdyZWxlYXNlOnBhY2s6ZHJ5JywgW10sIHJlcG9Sb290LCBvdXRwdXRNb2RlKSk7XHJcbiAgICAgICAgaWYgKCFvaykge1xyXG4gICAgICAgICAgICByZXR1cm4geyBvazogZmFsc2UsIHJlcG9Sb290LCB2ZXJzaW9uLCB0YWcsIGRyeVJ1biwgc3RlcHMgfTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAge1xyXG4gICAgICAgIGNvbnN0IG9rID0gYXdhaXQgcHVzaEFuZENoZWNrKFxyXG4gICAgICAgICAgICBydW5QdWJsaXNoU2NyaXB0KFxyXG4gICAgICAgICAgICAgICAgJ3B1Ymxpc2gnLFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlcG9Sb290LFxyXG4gICAgICAgICAgICAgICAgICAgIGRyeVJ1bixcclxuICAgICAgICAgICAgICAgICAgICBhbGxvd0RpcnR5OiBvcHRpb25zLmFsbG93RGlydHksXHJcbiAgICAgICAgICAgICAgICAgICAgb3RwOiBvcHRpb25zLm90cCxcclxuICAgICAgICAgICAgICAgICAgICB0YWdcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBvdXRwdXRNb2RlXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmICghb2spIHtcclxuICAgICAgICAgICAgcmV0dXJuIHsgb2s6IGZhbHNlLCByZXBvUm9vdCwgdmVyc2lvbiwgdGFnLCBkcnlSdW4sIHN0ZXBzIH07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgb2s6IHRydWUsXHJcbiAgICAgICAgcmVwb1Jvb3QsXHJcbiAgICAgICAgdmVyc2lvbixcclxuICAgICAgICB0YWcsXHJcbiAgICAgICAgZHJ5UnVuLFxyXG4gICAgICAgIHN0ZXBzXHJcbiAgICB9O1xyXG59XHJcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUEsZ0RBQUFBLFVBQUFDLFNBQUE7QUFBQSxRQUFJLElBQUksV0FBVyxDQUFDO0FBQXBCLFFBQXVCLE9BQU8sRUFBRSxRQUFRLENBQUM7QUFBekMsUUFBNEMsTUFBTSxFQUFFLE9BQU8sQ0FBQztBQUM1RCxRQUFJLG1CQUNILEVBQUUsQ0FBQyxDQUFDLElBQUksWUFBWSxLQUFLLFNBQVMsWUFBWSxPQUM3QyxDQUFDLENBQUMsSUFBSSxlQUFlLEtBQUssU0FBUyxTQUFTLEtBQUssRUFBRSxhQUFhLFlBQWEsRUFBRSxVQUFVLENBQUMsR0FBRyxTQUFTLElBQUksU0FBUyxVQUFXLENBQUMsQ0FBQyxJQUFJO0FBRXRJLFFBQUksWUFBWSxDQUFDLE1BQU0sT0FBTyxVQUFVLFNBQ3ZDLFdBQVM7QUFDUixVQUFJLFNBQVMsS0FBSyxPQUFPLFFBQVEsT0FBTyxRQUFRLE9BQU8sS0FBSyxNQUFNO0FBQ2xFLGFBQU8sQ0FBQyxRQUFRLE9BQU8sYUFBYSxRQUFRLE9BQU8sU0FBUyxLQUFLLElBQUksUUFBUSxPQUFPLFNBQVM7QUFBQSxJQUM5RjtBQUVELFFBQUksZUFBZSxDQUFDLFFBQVEsT0FBTyxTQUFTLFVBQVU7QUFDckQsVUFBSSxTQUFTLElBQUksU0FB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SyxPQUFTQSxLQUFLLE9BQVNBLE1BQU0sT0FBU0EsTUFBTSxPQUFTQSxNQUFNLE9BQVNBLE1BQU0sT0FBU0EsTUFBTSxPQUFTQSxNQUFNLE9BQVNBLE1BQU0sT0FBU0EsTUFBTSxPQUFTQSxNQUFNLE9BQVNBLE1BQU0sT0FBU0EsTUFBTSxPQUFTQSxNQUFNLE9BQVNBLE1BQU0sT0FBU0EsTUFBTSxPQUFTQSxNQUFNLE9BQVNBLE1BQU0sT0FBU0EsTUFBTSxPQUFTQSxNQUFNLE9BQVNBLEtBQUssT0FBU0EsS0FBSyxPQUFTQSxNQUFNLE9BQVNBLE1BQU0sT0FBU0EsS0FBSyxPQUFTQSxLQUFLLE9BQVNBLE1BQU0sT0FBU0EsTUFBTSxPQUFTQSxLQUFLLE9BQVNBLEtBQUssT0FBU0EsS0FBSyxPQUFTQSxLQUFLLE9BQVNBLEtBQUssT0FBU0EsS0FBSyxPQUFTQSxLQUFLLE9BQVNBLEtBQUssT0FBU0EsS0FBSyxPQUFTQSxLQUFLLE9BQVNBLE1BQU0sUUFBU0EsS0FBSyxRQUFTQSxLQUFLLFFBQVNBLE1BQU0sUUFBU0EsTUFBTSxRQUFVQSxLQUFLLFFBQVVBLEtBQUssUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxLQUFLLFFBQVVBLEtBQUssUUFBVUEsS0FBSyxRQUFVQSxLQUFLLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxLQUFLLFFBQVVBLEtBQUssUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsS0FBSyxRQUFVQSxLQUFLLFFBQVVBLEtBQUssUUFBVUEsS0FBSyxRQUFVQSxLQUFLLFFBQVVBLEtBQUssUUFBVUEsTUFBTSxRQUFVQSxLQUFLLFFBQVVBLEtBQUssUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsS0FBSyxRQUFVQSxLQUFLLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxLQUFLLFFBQVVBLEtBQUssUUFBVUEsTUFBTSxRQUFVQSxLQUFLLFFBQVVBLEtBQUssUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxLQUFLLFFBQVVBLEtBQUssUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxLQUFLLFFBQVVBLEtBQUssUUFBVUEsS0FBSyxRQUFVQSxLQUFLLFFBQVVBLEtBQUssUUFBVUEsS0FBSyxRQUFVQSxLQUFLLFFBQVVBLEtBQUssUUFBVUEsS0FBSyxRQUFVQSxLQUFLLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxLQUFLLFFBQVVBLEtBQUssUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLEtBQUssUUFBVUEsS0FBSyxRQUFVQSxNQUFNLFFBQVVBLEtBQUssUUFBVUEsS0FBSyxRQUFVQSxLQUFLLFFBQVVBLEtBQUssUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsS0FBSyxRQUFVQSxLQUFLLFFBQVVBLEtBQUssUUFBVUEsS0FBSyxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxLQUFLLFFBQVVBLEtBQUssUUFBVUEsS0FBSyxRQUFVQSxLQUFLLFFBQVVBLEtBQUssUUFBVUEsS0FBSyxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxLQUFLLFFBQVVBLEtBQUssUUFBVUEsTUFBTSxRQUFVQSxLQUFLLFFBQVVBLEtBQUssUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFNBQVVBLEtBQUssU0FBVUEsS0FBSyxTQUFVQSxLQUFLLFNBQVVBLEtBQUssU0FBVUEsS0FBSyxTQUFVQSxLQUFLLFNBQVVBLEtBQUssU0FBVUEsS0FBSyxTQUFVQSxLQUFLLFNBQVVBLEtBQUssU0FBVUEsTUFBTSxTQUFVQSxLQUFLLFVBQVdBLEtBQUssVUFBV0EsS0FBSyxVQUFXQSxLQUFLLFVBQVdBLEtBQUssVUFBV0EsS0FBSyxVQUFXQSxLQUFLLFVBQVdBLEtBQUssVUFBV0EsTUFBTSxVQUFXQSxNQUFNLFVBQVdBLEtBQUssVUFBV0EsS0FBSyxVQUFXQSxLQUFLLFVBQVdBLEtBQUssVUFBV0EsS0FBSyxVQUFXQSxLQUFLLFdBQVdBLEtBQUssV0FBWUEsS0FBSztBQUQxakksSUFHTXBDLEtBQWVvQyxPQUNWQSxNQUFNLFNBQVVBLEtBQUssU0FBVUEsS0FBSyxTQUFVQSxLQUFLLFNBQVVBLEtBQUs7QUFKN0UsSUFNTW5DLEtBQVVtQyxPQUNMQSxLQUFLLFFBQVVBLEtBQUssUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxLQUFLLFFBQVVBLEtBQUssUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsS0FBSyxRQUFVQSxLQUFLLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFNBQVVBLE1BQU0sU0FBVUEsTUFBTSxTQUFVQSxLQUFLLFNBQVVBLEtBQUssU0FBVUEsTUFBTSxTQUFVQSxLQUFLLFNBQVVBLEtBQUssU0FBVUEsTUFBTSxTQUFVQSxNQUFNLFNBQVVBLE1BQU0sU0FBVUEsTUFBTSxTQUFVQSxNQUFNLFNBQVVBLE1BQU0sU0FBVUEsS0FBSyxTQUFVQSxLQUFLLFNBQVVBLEtBQUssU0FBVUEsS0FBSyxTQUFVQSxLQUFLLFNBQVVBLEtBQUssU0FBVUEsS0FBSyxTQUFVQSxLQUFLLFNBQVVBLEtBQUssU0FBVUEsS0FBSyxTQUFVQSxLQUFLLFNBQVVBLEtBQUssU0FBVUEsS0FBSyxTQUFVQSxLQUFLLFNBQVVBLEtBQUssU0FBVUEsS0FBSyxTQUFVQSxLQUFLLFNBQVVBLEtBQUssU0FBVUEsS0FBSyxTQUFVQSxLQUFLLFNBQVVBLEtBQUssU0FBVUEsS0FBSyxTQUFVQSxLQUFLLFNBQVVBLEtBQUssU0FBVUEsS0FBSyxTQUFVQSxLQUFLLFNBQVVBLEtBQUssU0FBVUEsS0FBSyxTQUFVQSxLQUFLLFNBQVVBLEtBQUssU0FBVUEsS0FBSyxTQUFVQSxLQUFLLFNBQVVBLEtBQUssU0FBVUEsS0FBSyxTQUFVQSxLQUFLLFNBQVVBLEtBQUssU0FBVUEsS0FBSyxTQUFVQSxLQUFLLFNBQVVBLEtBQUssU0FBVUEsS0FBSyxTQUFVQSxLQUFLLFNBQVVBLEtBQUssU0FBVUEsS0FBSyxTQUFVQSxLQUFLLFNBQVVBLEtBQUssU0FBV0EsS0FBSyxTQUFXQSxNQUFNLFNBQVdBLE1BQU0sU0FBV0EsS0FBSyxTQUFXQSxLQUFLLFVBQVdBLEtBQUssVUFBV0EsS0FBSyxVQUFXQSxLQUFLLFVBQVdBLEtBQUssVUFBV0EsS0FBSyxVQUFXQSxLQUFLLFVBQVdBLEtBQUssVUFBV0EsS0FBSyxVQUFXQSxNQUFNLFVBQVdBLE1BQU0sVUFBV0EsS0FBSyxVQUFXQSxLQUFLLFVBQVdBLE1BQU0sVUFBV0EsS0FBSyxVQUFXQSxLQUFLLFVBQVdBLE1BQU0sVUFBV0EsS0FBSyxVQUFXQSxLQUFLLFVBQVdBLEtBQUssVUFBV0EsS0FBSyxVQUFXQSxNQUFNLFVBQVdBLE1BQU0sVUFBV0EsTUFBTSxVQUFXQSxLQUFLLFVBQVdBLEtBQUssVUFBV0EsS0FBSyxVQUFXQSxLQUFLLFVBQVdBLEtBQUssVUFBV0EsS0FBSyxVQUFXQSxLQUFLLFVBQVdBLEtBQUssVUFBV0EsTUFBTSxVQUFXQSxNQUFNLFVBQVdBLEtBQUssVUFBV0EsS0FBSyxVQUFXQSxLQUFLLFVBQVdBLEtBQUssVUFBV0EsS0FBSyxVQUFXQSxLQUFLLFVBQVdBLEtBQUssVUFBV0EsS0FBSyxVQUFXQSxLQUFLLFVBQVdBLEtBQUssVUFBV0EsS0FBSyxVQUFXQSxLQUFLLFVBQVdBLEtBQUssVUFBV0EsS0FBSyxVQUFXQSxLQUFLLFVBQVdBLEtBQUssVUFBV0EsTUFBTSxVQUFXQSxLQUFLLFVBQVdBLEtBQUssVUFBV0EsTUFBTSxVQUFXQSxLQUFLLFVBQVdBLEtBQUssVUFBV0EsS0FBSyxVQUFXQSxLQUFLLFVBQVdBLEtBQUssVUFBV0EsS0FBSyxVQUFXQSxLQUFLLFVBQVdBLEtBQUssVUFBV0EsTUFBTSxVQUFXQSxNQUFNLFVBQVdBLE1BQU0sVUFBV0EsTUFBTSxVQUFXQSxLQUFLLFVBQVdBLEtBQUssVUFBV0EsS0FBSyxVQUFXQSxLQUFLLFVBQVdBLE1BQU0sVUFBV0EsS0FBSyxVQUFXQSxLQUFLLFVB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QVNBLE1BQU0sT0FBU0EsTUFBTSxPQUFTQSxNQUFNLE9BQVNBLE1BQU0sT0FBU0EsTUFBTSxPQUFTQSxNQUFNLE9BQVNBLE1BQU0sT0FBU0EsTUFBTSxPQUFTQSxNQUFNLE9BQVNBLE1BQU0sT0FBU0EsTUFBTSxPQUFTQSxNQUFNLE9BQVNBLE1BQU0sT0FBU0EsTUFBTSxPQUFTQSxLQUFLLE9BQVNBLEtBQUssT0FBU0EsTUFBTSxPQUFTQSxNQUFNLE9BQVNBLEtBQUssT0FBU0EsS0FBSyxPQUFTQSxNQUFNLE9BQVNBLE1BQU0sT0FBU0EsS0FBSyxPQUFTQSxLQUFLLE9BQVNBLEtBQUssT0FBU0EsS0FBSyxPQUFTQSxLQUFLLE9BQVNBLEtBQUssT0FBU0EsS0FBSyxPQUFTQSxLQUFLLE9BQVNBLEtBQUssT0FBU0EsS0FBSyxPQUFTQSxNQUFNLFFBQVNBLEtBQUssUUFBU0EsS0FBSyxRQUFTQSxNQUFNLFFBQVNBLE1BQU0sUUFBVUEsS0FBSyxRQUFVQSxLQUFLLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsS0FBSyxRQUFVQSxLQUFLLFFBQVVBLEtBQUssUUFBVUEsS0FBSyxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsS0FBSyxRQUFVQSxLQUFLLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLEtBQUssUUFBVUEsS0FBSyxRQUFVQSxLQUFLLFFBQVVBLEtBQUssUUFBVUEsS0FBSyxRQUFVQSxLQUFLLFFBQVVBLE1BQU0sUUFBVUEsS0FBSyxRQUFVQSxLQUFLLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLEtBQUssUUFBVUEsS0FBSyxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsS0FBSyxRQUFVQSxLQUFLLFFBQVVBLE1BQU0sUUFBVUEsS0FBSyxRQUFVQSxLQUFLLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsS0FBSyxRQUFVQSxLQUFLLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsS0FBSyxRQUFVQSxLQUFLLFFBQVVBLEtBQUssUUFBVUEsS0FBSyxRQUFVQSxLQUFLLFFBQVVBLEtBQUssUUFBVUEsS0FBSyxRQUFVQSxLQUFLLFFBQVVBLEtBQUssUUFBVUEsS0FBSyxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsS0FBSyxRQUFVQSxLQUFLLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxLQUFLLFFBQVVBLEtBQUssUUFBVUEsTUFBTSxRQUFVQSxLQUFLLFFBQVVBLEtBQUssUUFBVUEsS0FBSyxRQUFVQSxLQUFLLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLEtBQUssUUFBVUEsS0FBSyxRQUFVQSxLQUFLLFFBQVVBLEtBQUssUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsS0FBSyxRQUFVQSxLQUFLLFFBQVVBLEtBQUssUUFBVUEsS0FBSyxRQUFVQSxLQUFLLFFBQVVBLEtBQUssUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsS0FBSyxRQUFVQSxLQUFLLFFBQVVBLE1BQU0sUUFBVUEsS0FBSyxRQUFVQSxLQUFLLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxTQUFVQSxLQUFLLFNBQVVBLEtBQUssU0FBVUEsS0FBSyxTQUFVQSxLQUFLLFNBQVVBLEtBQUssU0FBVUEsS0FBSyxTQUFVQSxLQUFLLFNBQVVBLEtBQUssU0FBVUEsS0FBSyxTQUFVQSxLQUFLLFNBQVVBLE1BQU0sU0FBVUEsS0FBSyxVQUFXQSxLQUFLLFVBQVdBLEtBQUssVUFBV0EsS0FBSyxVQUFXQSxLQUFLLFVBQVdBLEtBQUssVUFBV0EsS0FBSyxVQUFXQSxLQUFLLFVBQVdBLE1BQU0sVUFBV0EsTUFBTSxVQUFXQSxLQUFLLFVBQVdBLEtBQUssVUFBV0EsS0FBSyxVQUFXQSxLQUFLLFVBQVdBLEtBQUssVUFBV0EsS0FBSyxXQUFXQSxLQUFLLFdBQVlBLEtBQUs7QUZXMWpJLElFVE01RCxLQUFlNEQsT0FDVkEsTUFBTSxTQUFVQSxLQUFLLFNBQVVBLEtBQUssU0FBVUEsS0FBSyxTQUFVQSxLQUFLO0FGUTdFLElFTk0zRCxLQUFVMkQsT0FDTEEsS0FBSyxRQUFVQSxLQUFLLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsS0FBSyxRQUFVQSxLQUFLLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLEtBQUssUUFBVUEsS0FBSyxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxTQUFVQSxNQUFNLFNBQVVBLE1BQU0sU0FBVUEsS0FBSyxTQUFVQSxLQUFLLFNBQVVBLE1BQU0sU0FBVUEsS0FBSyxTQUFVQSxLQUFLLFNBQVVBLE1BQU0sU0FBVUEsTUFBTSxTQUFVQSxNQUFNLFNBQVVBLE1BQU0sU0FBVUEsTUFBTSxTQUFVQSxNQUFNLFNBQVVBLEtBQUssU0FBVUEsS0FBSyxTQUFVQSxLQUFLLFNBQVVBLEtBQUssU0FBVUEsS0FBSyxTQUFVQSxLQUFLLFNBQVVBLEtBQUssU0FBVUEsS0FBSyxTQUFVQSxLQUFLLFNBQVVBLEtBQUssU0FBVUEsS0FBSyxTQUFVQSxLQUFLLFNBQVVBLEtBQUssU0FBVUEsS0FBSyxTQUFVQSxLQUFLLFNBQVVBLEtBQUssU0FBVUEsS0FBSyxTQUFVQSxLQUFLLFNBQVVBLEtBQUssU0FBVUEsS0FBSyxTQUFVQSxLQUFLLFNBQVVBLEtBQUssU0FBVUEsS0FBSyxTQUFVQSxLQUFLLFNBQVVBLEtBQUssU0FBVUEsS0FBSyxTQUFVQSxLQUFLLFNBQVVBLEtBQUssU0FBVUEsS0FBSyxTQUFVQSxLQUFLLFNBQVVBLEtBQUssU0FBVUEsS0FBSyxTQUFVQSxLQUFLLFNBQVVBLEtBQUssU0FBVUEsS0FBSyxTQUFVQSxLQUFLLFNBQVVBLEtBQUssU0FBVUEsS0FBSyxTQUFVQSxLQUFLLFNBQVVBLEtBQUssU0FBVUEsS0FBSyxTQUFVQSxLQUFLLFNBQVVBLEtBQUssU0FBVUEsS0FBSyxTQUFVQSxLQUFLLFNBQVdBLEtBQUssU0FBV0EsTUFBTSxTQUFXQSxNQUFNLFNBQVdBLEtBQUssU0FBV0EsS0FBSyxVQUFXQSxLQUFLLFVBQVdBLEtBQUssVUFBV0EsS0FBSyxVQUFXQSxLQUFLLFVBQVdBLEtBQUssVUFBV0EsS0FBSyxVQUFXQSxLQUFLLFVBQVdBLEtBQUssVUFBV0EsTUFBTSxVQUFXQSxNQUFNLFVBQVdBLEtBQUssVUFBV0EsS0FBSyxVQUFXQSxNQUFNLFVBQVdBLEtBQUssVUFBV0EsS0FBSyxVQUFXQSxNQUFNLFVBQVdBLEtBQUssVUFBV0EsS0FBSyxVQUFXQSxLQUFLLFVBQVdBLEtBQUssVUFBV0EsTUFBTSxVQUFXQSxNQUFNLFVBQVdBLE1BQU0sVUFBV0EsS0FBSyxVQUFXQSxLQUFLLFVBQVdBLEtBQUssVUFBV0EsS0FBSyxVQUFXQSxLQUFLLFVBQVdBLEtBQUssVUFBV0EsS0FBSyxVQUFXQSxLQUFLLFVBQVdBLE1BQU0sVUFBV0EsTUFBTSxVQUFXQSxLQUFLLFVBQVdBLEtBQUssVUFBV0EsS0FBSyxVQUFXQSxLQUFLLFVBQVdBLEtBQUssVUFBV0EsS0FBSyxVQUFXQSxLQUFLLFVBQVdBLEtBQUssVUFBV0EsS0FBSyxVQUFXQSxLQUFLLFVBQVdBLEtBQUssVUFBV0EsS0FBSyxVQUFXQSxLQUFLLFVBQVdBLEtBQUssVUFBV0EsS0FBSyxVQUFXQSxLQUFLLFVBQVdBLE1BQU0sVUFBV0EsS0FBSyxVQUFXQSxLQUFLLFVBQVdBLE1BQU0sVUFBV0EsS0FBSyxVQUFXQSxLQUFLLFVBQVdBLEtBQUssVUFBV0EsS0FBSyxVQUFXQSxLQUFLLFVBQVdBLEtBQUssVUFBV0EsS0FBSyxVQUFXQSxLQUFLLFVBQVdBLE1BQU0sVUFBV0EsTUFBTSxVQUFXQSxNQUFNLFVBQVdBLE1BQU0sVUFBV0EsS0FBSyxVQUFXQSxLQUFLLFVBQVdBLEtBQUssVUFBV0EsS0FBSyxVQUFXQSxNQUFNLFVBQVdBLEtBQUssVUFBV0EsS0FBSyxVQUFXQSxLQUFLLFVBQVdBLEtBQUssVUFBV0EsS0FBSyxVQUFXQSxLQUFLLFVBQVdBLE1BQU0sVUFBV0Es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QixDQUFDLEVBQ0EsTUFBTSxXQUFTO0FBQ1osVUFBUSxNQUFNLGlCQUFpQixRQUFRLE1BQU0sVUFBVSxPQUFPLEtBQUssQ0FBQztBQUNwRSxVQUFRLFdBQVc7QUFDdkIsQ0FBQzsiLAogICJuYW1lcyI6IFsiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAieCIsICJ5IiwgImZpbmRDdXJzb3IiLCAiY3Vyc29yIiwgImRlbHRhIiwgIm9wdGlvbnMiLCAib3B0IiwgIm5ld0N1cnNvciIsICJtYXhDdXJzb3IiLCAiY2xhbXBlZEN1cnNvciIsICJ3cmFwQW5zaSIsICJzdHJpbmciLCAiY29sdW1ucyIsICJsaW5lIiwgImV4ZWMiLCAidXBkYXRlU2V0dGluZ3MiLCAidXBkYXRlcyIsICJhbGlhc2VzIiwgImFsaWFzIiwgImFjdGlvbiIsICJzZXR0aW5ncyIsICJtZXNzYWdlcyIsICJpc0FjdGlvbktleSIsICJrZXkiLCAidmFsdWUiLCAiZGlmZkxpbmVzIiwgImEiLCAiYiIsICJhTGluZXMiLCAiYkxpbmVzIiwgIm51bUxpbmVzIiwgImRpZmYiLCAiaSIsICJpc0NhbmNlbCIsICJDQU5DRUxfU1lNQk9MIiwgInNldFJhd01vZGUiLCAiaW5wdXQiLCAiYmxvY2siLCAic3RkaW4iLCAib3V0cHV0IiwgInN0ZG91dCIsICJvdmVyd3JpdGUiLCAiaGlkZUN1cnNvciIsICJybCIsICJyZWFkbGluZSIsICJSZWFkU3RyZWFtIiwgImNsZWFyIiwgImRhdGEiLCAibmFtZSIsICJzZXF1ZW5jZSIsICJzdHIiLCAiZHgiLCAiZHkiLCAiaXNXaW5kb3dzIiwgIndyYXBUZXh0V2l0aFByZWZpeCIsICJ0ZXh0IiwgInByZWZpeCIsICJzdGFydFByZWZpeCIsICJnZXRDb2x1bW5zIiwgImluZGV4IiwgImdldEN1cnNvckZvclZhbHVlIiwgInNlbGVjdGVkIiwgIml0ZW1zIiwgIml0ZW0iLCAiZGVmYXVsdEZpbHRlciIsICJvcHRpb24iLCAibm9ybWFsaXNlZFZhbHVlIiwgIm11bHRpcGxlIiwgInZhbHVlcyIsICJpc0FtYmlndW91cyIsICJpc0Z1bGxXaWR0aCIsICJpc1dpZGUiLCAiQU5TSV9SRSIsICJDT05UUk9MX1JFIiwgIlRBQl9SRSIsICJFTU9KSV9SRSIsICJMQVRJTl9SRSIsICJNT0RJRklFUl9SRSIsICJOT19UUlVOQ0FUSU9OIiwgImdldFN0cmluZ1RydW5jYXRlZFdpZHRoIiwgImZhc3RTdHJpbmdXaWR0aCIsICJFU0MiLCAiQ1NJIiwgIkVORF9DT0RFIiwgIkFOU0lfRVNDQVBFX0JFTEwiLCAiQU5TSV9DU0kiLCAiQU5TSV9PU0MiLCAiQU5TSV9TR1JfVEVSTUlOQVRPUiIsICJBTlNJX0VTQ0FQRV9MSU5LIiwgIkdST1VQX1JFR0VYIiwgImdldENsb3NpbmdDb2RlIiwgIndyYXBBbnNpQ29kZSIsICJ3cmFwQW5zaUh5cGVybGluayIsICJ3b3JkTGVuZ3RocyIsICJ3cmFwV29yZCIsICJzdHJpbmdWaXNpYmxlVHJpbVNwYWNlc1JpZ2h0IiwgImFjdGlvbnMiLCAiZ2V0Um93cyIsICJQcm9tcHQiLCAiQXV0b2NvbXBsZXRlUHJvbXB0IiwgIkNvbmZpcm1Qcm9tcHQiLCAiR3JvdXBNdWx0aVNlbGVjdFByb21wdCIsICJNdWx0aVNlbGVjdFByb21wdCIsICJTZWxlY3RQcm9tcHQiLCAiU2VsZWN0S2V5UHJvbXB0IiwgIlRleHRQcm9tcHQiLCAieCIsICJ0cnVuY2F0aW9uT3B0aW9ucyIsICJ3aWR0aE9wdGlvbnMiLCAiTElNSVQiLCAiRUxMSVBTSVMiLCAiRUxMSVBTSVNfV0lEVEgiLCAiQU5TSV9XSURUSCIsICJDT05UUk9MX1dJRFRIIiwgIlRBQl9XSURUSCIsICJBTUJJR1VPVVNfV0lEVEgiLCAiRU1PSklfV0lEVEgiLCAiRlVMTF9XSURUSF9XSURUSCIsICJSRUdVTEFSX1dJRFRIIiwgIldJREVfV0lEVEgiLCAiaW5kZXhQcmV2IiwgImxlbmd0aCIsICJsZW5ndGhFeHRyYSIsICJ0cnVuY2F0aW9uRW5hYmxlZCIsICJ0cnVuY2F0aW9uSW5kZXgiLCAidHJ1bmNhdGlvbkxpbWl0IiwgInVubWF0Y2hlZFN0YXJ0IiwgInVubWF0Y2hlZEVuZCIsICJ3aWR0aCIsICJ3aWR0aEV4dHJhIiwgIm91dGVyIiwgInVubWF0Y2hlZCIsICJjaGFyIiwgImNvZGVQb2ludCIsICJmYXN0U3RyaW5nVHJ1bmNhdGVkV2lkdGgiLCAib3BlbmluZ0NvZGUiLCAiY29kZSIsICJ1cmwiLCAid29yZHMiLCAiY2hhcmFjdGVyIiwgInN0cmluZ1dpZHRoIiwgInJvd3MiLCAid29yZCIsICJjaGFyYWN0ZXJzIiwgImlzSW5zaWRlRXNjYXBlIiwgImlzSW5zaWRlTGlua0VzY2FwZSIsICJsYXN0Um93IiwgInZpc2libGUiLCAiY3VycmVudENoYXJhY3RlciIsICJuZXh0Q2hhcmFjdGVyIiwgInJhd0NoYXJhY3RlckluZGV4IiwgImNoYXJhY3Rlckxlbmd0aCIsICJsYXN0IiwgInJldHVyblZhbHVlIiwgImVzY2FwZUNvZGUiLCAiZXNjYXBlVXJsIiwgImxlbmd0aHMiLCAicm93TGVuZ3RoIiwgInJlbWFpbmluZ0NvbHVtbnMiLCAiYnJlYWtzU3RhcnRpbmdUaGlzTGluZSIsICJyb3ciLCAicHJlU3RyaW5nIiwgInByZSIsICJjdXJyZW50UHJlIiwgIm5leHRQcmUiLCAicHJlU3RyaW5nSW5kZXgiLCAiZ3JvdXBzIiwgImNsb3NpbmdDb2RlIiwgInRyYWNrVmFsdWUiLCAicmVuZGVyIiwgInNpZ25hbCIsICJvcHRzIiwgImV2ZW50IiwgInBhcmFtcyIsICJjYiIsICJjYnMiLCAiY2xlYW51cCIsICJzdWJzY3JpYmVyIiwgInJlc29sdmUiLCAiX2tleSIsICJ3cml0ZSIsICJwcm9ibGVtIiwgImxpbmVzIiwgImZyYW1lIiwgImRpZmZPZmZzZXRBZnRlciIsICJkaWZmT2Zmc2V0QmVmb3JlIiwgImRpZmZMaW5lIiwgImVyYXNlIiwgImFkanVzdGVkRGlmZkxpbmUiLCAibmV3TGluZXMiLCAiI2N1cnNvciIsICIjbGFzdFVzZXJJbnB1dCIsICIjZmlsdGVyRm4iLCAiI29wdGlvbnMiLCAiY29sb3IiLCAiczEiLCAiczIiLCAiczMiLCAiaW5pdGlhbFZhbHVlcyIsICJzZWxlY3RlZFZhbHVlIiwgInNlbGVjdGVkSW5kZXgiLCAiI29uS2V5IiwgIiNvblVzZXJJbnB1dENoYW5nZWQiLCAiX2NoYXIiLCAiaXNVcEtleSIsICJpc0Rvd25LZXkiLCAiaXNSZXR1cm5LZXkiLCAidiIsICJ2YWx1ZUN1cnNvciIsICJmb2N1c2VkT3B0aW9uIiwgImNvbmZpcm0iLCAiI3NlbGVjdGFibGVHcm91cHMiLCAiZ3JvdXAiLCAibyIsICJncm91cGVkSXRlbXMiLCAiY3VycmVudElzR3JvdXAiLCAiZW5hYmxlZE9wdGlvbnMiLCAiYWxsU2VsZWN0ZWQiLCAibm90U2VsZWN0ZWQiLCAidXNlcklucHV0IiwgIm1hc2tlZCIsICJtYXNrIiwgImluaXRpYWxDdXJzb3IiLCAiY2FzZVNlbnNpdGl2ZSIsICJrZXlzIiwgImluaXRpYWwiLCAia2V5SW5mbyIsICJjYXNlZEtleSIsICJpc1VuaWNvZGVTdXBwb3J0ZWQiLCAicHJvY2VzcyIsICJ3cmFwQW5zaSIsICJzdHJpbmciLCAiY29sdW1ucyIsICJvcHRpb25zIiwgImxpbmUiLCAiZXhlYyIsICJnZXRMYWJlbCIsICJvcHRpb24iLCAiZ2V0RmlsdGVyZWRPcHRpb24iLCAic2VhcmNoVGV4dCIsICJsYWJlbCIsICJoaW50IiwgInZhbHVlIiwgInRlcm0iLCAiZ2V0U2VsZWN0ZWRPcHRpb25zIiwgInZhbHVlcyIsICJyZXN1bHRzIiwgImdldFBhZGRpbmdGb3JMaW5lIiwgImxpbmVMZW5ndGgiLCAiaW5uZXJXaWR0aCIsICJwYWRkaW5nIiwgImNvbnRlbnRBbGlnbiIsICJsZWZ0UGFkZGluZyIsICJyaWdodFBhZGRpbmciLCAicHJvZ3Jlc3MiLCAic3R5bGUiLCAidXNlck1heCIsICJ1c2VyU2l6ZSIsICJzcGlubmVyT3B0aW9ucyIsICJzcGluIiwgInNwaW5uZXIiLCAicHJldmlvdXNNZXNzYWdlIiwgIm1heCIsICJzaXplIiwgImFjdGl2ZVN0eWxlIiwgInN0YXRlIiwgImNvbG9yIiwgImRyYXdQcm9ncmVzcyIsICJtc2ciLCAiYWN0aXZlIiwgIlNfUFJPR1JFU1NfQ0hBUiIsICJzdGFydCIsICJhZHZhbmNlIiwgInN0ZXAiLCAidW5pY29kZSIsICJpc0NJIiwgImlzVFRZIiwgInVuaWNvZGVPciIsICJTX1NURVBfQUNUSVZFIiwgIlNfU1RFUF9DQU5DRUwiLCAiU19TVEVQX0VSUk9SIiwgIlNfU1RFUF9TVUJNSVQiLCAiU19CQVJfU1RBUlQiLCAiU19CQVIiLCAiU19CQVJfRU5EIiwgIlNfQkFSX1NUQVJUX1JJR0hUIiwgIlNfQkFSX0VORF9SSUdIVCIsICJTX1JBRElPX0FDVElWRSIsICJTX1JBRElPX0lOQUNUSVZFIiwgIlNfQ0hFQ0tCT1hfQUNUSVZFIiwgIlNfQ0hFQ0tCT1hfU0VMRUNURUQiLCAiU19DSEVDS0JPWF9JTkFDVElWRSIsICJTX1BBU1NXT1JEX01BU0siLCAiU19CQVJfSCIsICJTX0NPUk5FUl9UT1BfUklHSFQiLCAiU19DT05ORUNUX0xFRlQiLCAiU19DT1JORVJfQk9UVE9NX1JJR0hUIiwgIlNfQ09STkVSX0JPVFRPTV9MRUZUIiwgIlNfQ09STkVSX1RPUF9MRUZUIiwgIlNfSU5GTyIsICJTX1NVQ0NFU1MiLCAiU19XQVJOIiwgIlNfRVJST1IiLCAic3ltYm9sIiwgInN5bWJvbEJhciIsICJpc0FtYmlndW91cyIsICJpc0Z1bGxXaWR0aCIsICJpc1dpZGUiLCAiQU5TSV9SRSIsICJDT05UUk9MX1JFIiwgIlRBQl9SRSIsICJFTU9KSV9SRSIsICJMQVRJTl9SRSIsICJNT0RJRklFUl9SRSIsICJOT19UUlVOQ0FUSU9OIiwgImdldFN0cmluZ1RydW5jYXRlZFdpZHRoIiwgImZhc3RTdHJpbmdXaWR0aCIsICJFU0MiLCAiQ1NJIiwgIkVORF9DT0RFIiwgIkFOU0lfRVNDQVBFX0JFTEwiLCAiQU5TSV9DU0kiLCAiQU5TSV9PU0MiLCAiQU5TSV9TR1JfVEVSTUlOQVRPUiIsICJBTlNJX0VTQ0FQRV9MSU5LIiwgIkdST1VQX1JFR0VYIiwgImdldENsb3NpbmdDb2RlIiwgIndyYXBBbnNpQ29kZSIsICJ3cmFwQW5zaUh5cGVybGluayIsICJ3b3JkTGVuZ3RocyIsICJ3cmFwV29yZCIsICJzdHJpbmdWaXNpYmxlVHJpbVNwYWNlc1JpZ2h0IiwgInRyaW1MaW5lcyIsICJsaW1pdE9wdGlvbnMiLCAiYXV0b2NvbXBsZXRlIiwgImF1dG9jb21wbGV0ZU11bHRpc2VsZWN0IiwgInJvdW5kZWRTeW1ib2xzIiwgInNxdWFyZVN5bWJvbHMiLCAiZGVmYXVsdEZvcm1hdEJvcmRlciIsICJib3giLCAiY29uZmlybSIsICJncm91cCIsICJncm91cE11bHRpc2VsZWN0IiwgImxvZyIsICJjYW5jZWwiLCAiaW50cm8iLCAib3V0cm8iLCAiY29tcHV0ZUxhYmVsIiwgIm11bHRpc2VsZWN0IiwgImRlZmF1bHROb3RlRm9ybWF0dGVyIiwgIndyYXBXaXRoRm9ybWF0IiwgIm5vdGUiLCAicGFzc3dvcmQiLCAicGF0aCIsICJkZWZhdWx0U3R5bGVGbiIsICJzZWxlY3QiLCAic2VsZWN0S2V5IiwgInByZWZpeCIsICJzdHJlYW0iLCAidGFza3MiLCAic3RyaXBEZXN0cnVjdGl2ZUFOU0kiLCAidGFza0xvZyIsICJ0ZXh0IiwgIm91dHB1dCIsICJjIiwgImZhbGxiYWNrIiwgIngiLCAiaW5wdXQiLCAidHJ1bmNhdGlvbk9wdGlvbnMiLCAid2lkdGhPcHRpb25zIiwgIkxJTUlUIiwgIkVMTElQU0lTIiwgIkVMTElQU0lTX1dJRFRIIiwgIkFOU0lfV0lEVEgiLCAiQ09OVFJPTF9XSURUSCIsICJUQUJfV0lEVEgiLCAiQU1CSUdVT1VTX1dJRFRIIiwgIkVNT0pJX1dJRFRIIiwgIkZVTExfV0lEVEhfV0lEVEgiLCAiUkVHVUxBUl9XSURUSCIsICJXSURFX1dJRFRIIiwgImluZGV4UHJldiIsICJpbmRleCIsICJsZW5ndGgiLCAibGVuZ3RoRXh0cmEiLCAidHJ1bmNhdGlvbkVuYWJsZWQiLCAidHJ1bmNhdGlvbkluZGV4IiwgInRydW5jYXRpb25MaW1pdCIsICJ1bm1hdGNoZWRTdGFydCIsICJ1bm1hdGNoZWRFbmQiLCAid2lkdGgiLCAid2lkdGhFeHRyYSIsICJvdXRlciIsICJ1bm1hdGNoZWQiLCAiY2hhciIsICJjb2RlUG9pbnQiLCAiZmFzdFN0cmluZ1RydW5jYXRlZFdpZHRoIiwgIm9wZW5pbmdDb2RlIiwgImNvZGUiLCAidXJsIiwgIndvcmRzIiwgImNoYXJhY3RlciIsICJzdHJpbmdXaWR0aCIsICJyb3dzIiwgIndvcmQiLCAiY2hhcmFjdGVycyIsICJpc0luc2lkZUVzY2FwZSIsICJpc0luc2lkZUxpbmtFc2NhcGUiLCAibGFzdFJvdyIsICJ2aXNpYmxlIiwgImN1cnJlbnRDaGFyYWN0ZXIiLCAibmV4dENoYXJhY3RlciIsICJyYXdDaGFyYWN0ZXJJbmRleCIsICJjaGFyYWN0ZXJMZW5ndGgiLCAibGFzdCIsICJyZXR1cm5WYWx1ZSIsICJlc2NhcGVDb2RlIiwgImVzY2FwZVVybCIsICJsZW5ndGhzIiwgInJvd0xlbmd0aCIsICJyZW1haW5pbmdDb2x1bW5zIiwgImJyZWFrc1N0YXJ0aW5nVGhpc0xpbmUiLCAicm93IiwgInByZVN0cmluZyIsICJwcmUiLCAiY3VycmVudFByZSIsICJuZXh0UHJlIiwgInByZVN0cmluZ0luZGV4IiwgImdyb3VwcyIsICJjbG9zaW5nQ29kZSIsICJpbml0aWFsTGluZUNvdW50IiwgInN0YXJ0SW5kZXgiLCAiZW5kSW5kZXgiLCAibWF4TGluZXMiLCAibGluZUNvdW50IiwgInJlbW92YWxzIiwgImkiLCAicGFyYW1zIiwgImN1cnNvciIsICJnZXRDb2x1bW5zIiwgImNvbHVtblBhZGRpbmciLCAicm93UGFkZGluZyIsICJtYXhXaWR0aCIsICJnZXRSb3dzIiwgIm92ZXJmbG93Rm9ybWF0IiwgInBhcmFtTWF4SXRlbXMiLCAib3V0cHV0TWF4SXRlbXMiLCAibWF4SXRlbXMiLCAic2xpZGluZ1dpbmRvd0xvY2F0aW9uIiwgInNob3VsZFJlbmRlclRvcEVsbGlwc2lzIiwgInNob3VsZFJlbmRlckJvdHRvbUVsbGlwc2lzIiwgInNsaWRpbmdXaW5kb3dMb2NhdGlvbkVuZCIsICJsaW5lR3JvdXBzIiwgInNsaWRpbmdXaW5kb3dMb2NhdGlvbldpdGhFbGxpcHNpcyIsICJzbGlkaW5nV2luZG93TG9jYXRpb25FbmRXaXRoRWxsaXBzaXMiLCAid3JhcHBlZExpbmVzIiwgInByZWNlZGluZ1JlbW92YWxzIiwgImZvbGxvd2luZ1JlbW92YWxzIiwgIm5ld0xpbmVDb3VudCIsICJjdXJzb3JHcm91cEluZGV4IiwgInRyaW1MaW5lc0xvY2FsIiwgInJlc3VsdCIsICJsaW5lR3JvdXAiLCAib3B0cyIsICJBdXRvY29tcGxldGVQcm9tcHQiLCAic2VhcmNoIiwgIm9wdCIsICJoYXNHdWlkZSIsICJzZXR0aW5ncyIsICJoZWFkaW5ncyIsICJ1c2VySW5wdXQiLCAicGxhY2Vob2xkZXIiLCAic2hvd1BsYWNlaG9sZGVyIiwgInNlbGVjdGVkIiwgInN1Ym1pdFByZWZpeCIsICJ1c2VySW5wdXRUZXh0IiwgImNhbmNlbFByZWZpeCIsICJiYXJDb2xvciIsICJndWlkZVByZWZpeCIsICJndWlkZVByZWZpeEVuZCIsICJzZWFyY2hUZXh0VmFsdWUiLCAibWF0Y2hlcyIsICJub1Jlc3VsdHMiLCAidmFsaWRhdGlvbkVycm9yIiwgImluc3RydWN0aW9ucyIsICJmb290ZXJzIiwgImRpc3BsYXlPcHRpb25zIiwgImZvcm1hdE9wdGlvbiIsICJzZWxlY3RlZFZhbHVlcyIsICJmb2N1c2VkVmFsdWUiLCAiaXNTZWxlY3RlZCIsICJjaGVja2JveCIsICJwcm9tcHQiLCAidGl0bGUiLCAiZXJyb3JNZXNzYWdlIiwgImhlYWRlckxpbmVzIiwgImZvb3RlckxpbmVzIiwgIm1lc3NhZ2UiLCAiYm9yZGVyVG90YWxXaWR0aCIsICJ0aXRsZVBhZGRpbmciLCAiY29udGVudFBhZGRpbmciLCAibGluZVByZWZpeCIsICJmb3JtYXRCb3JkZXIiLCAic3ltYm9scyIsICJoU3ltYm9sIiwgInZTeW1ib2wiLCAibGluZVByZWZpeFdpZHRoIiwgInRpdGxlV2lkdGgiLCAibWF4Qm94V2lkdGgiLCAiYm94V2lkdGgiLCAibGluZXMiLCAibG9uZ2VzdExpbmUiLCAibGluZVdpdGhQYWRkaW5nIiwgImxvbmdlc3RMaW5lV2lkdGgiLCAibWF4VGl0bGVMZW5ndGgiLCAidHJ1bmNhdGVkVGl0bGUiLCAidGl0bGVQYWRkaW5nTGVmdCIsICJ0aXRsZVBhZGRpbmdSaWdodCIsICJ3cmFwcGVkTWVzc2FnZSIsICJsZWZ0TGluZVBhZGRpbmciLCAicmlnaHRMaW5lUGFkZGluZyIsICJpbmFjdGl2ZSIsICJDb25maXJtUHJvbXB0IiwgImRlZmF1bHRQcmVmaXgiLCAiZGVmYXVsdFByZWZpeEVuZCIsICJwcm9tcHRzIiwgInByb21wdE5hbWVzIiwgIm5hbWUiLCAiZSIsICJpc0NhbmNlbCIsICJzZWxlY3RhYmxlR3JvdXBzIiwgImdyb3VwU3BhY2luZyIsICJpc0l0ZW0iLCAibmV4dCIsICJpc0xhc3QiLCAic3BhY2luZ1ByZWZpeCIsICJzcGFjaW5nUHJlZml4VGV4dCIsICJzZWxlY3RlZENoZWNrYm94IiwgInVuc2VsZWN0ZWRDaGVja2JveCIsICJyZXF1aXJlZCIsICJHcm91cE11bHRpU2VsZWN0UHJvbXB0IiwgInNlbGVjdGVkT3B0aW9ucyIsICJvcHRpb25WYWx1ZSIsICJvcHRpb25zVGV4dCIsICJmb290ZXIiLCAibG4iLCAiZ3JvdXBBY3RpdmUiLCAib3B0aW9uVGV4dCIsICJvcHRpb25zUHJlZml4IiwgInNlY29uZGFyeVN5bWJvbCIsICJzcGFjaW5nIiwgIndpdGhHdWlkZSIsICJwYXJ0cyIsICJzcGFjaW5nU3RyaW5nIiwgInNlY29uZGFyeVByZWZpeCIsICJtZXNzYWdlUGFydHMiLCAiZmlyc3RMaW5lIiwgImZvcm1hdCIsICJzdHIiLCAiTXVsdGlTZWxlY3RQcm9tcHQiLCAid3JhcFRleHRXaXRoUHJlZml4IiwgInN0eWxlT3B0aW9uIiwgInN1Ym1pdFRleHQiLCAid3JhcHBlZFN1Ym1pdFRleHQiLCAid3JhcHBlZExhYmVsIiwgInRpdGxlTGluZUNvdW50IiwgImZvb3RlckxpbmVDb3VudCIsICJ3cmFwTXNnIiwgIm1heFdpZHRoTm9ybWFsIiwgInN1bSIsICJtYXhXaWR0aEZvcm1hdCIsICJ3cmFwV2lkdGgiLCAidGl0bGVMZW4iLCAibGVuIiwgImxlYWRpbmdCb3JkZXIiLCAiYm90dG9tTGVmdCIsICJQYXNzd29yZFByb21wdCIsICJtYXNrZWQiLCAiZXJyb3JQcmVmaXgiLCAiZXJyb3JQcmVmaXhFbmQiLCAibWFza2VkVGV4dCIsICJ2YWxpZGF0ZSIsICJzZWFyY2hQYXRoIiwgImV4aXN0c1N5bmMiLCAibHN0YXRTeW5jIiwgImRpcm5hbWUiLCAicmVhZGRpclN5bmMiLCAiaXRlbSIsICJqb2luIiwgInN0YXRzIiwgImlzRGlyZWN0b3J5IiwgImluZGljYXRvciIsICJvbkNhbmNlbCIsICJjYW5jZWxNZXNzYWdlIiwgImZyYW1lcyIsICJkZWxheSIsICJzaWduYWwiLCAiaXNDSUZuIiwgInVuYmxvY2siLCAibG9vcCIsICJpc1NwaW5uZXJBY3RpdmUiLCAiaXNDYW5jZWxsZWQiLCAiX21lc3NhZ2UiLCAiX3ByZXZNZXNzYWdlIiwgIl9vcmlnaW4iLCAic3R5bGVGbiIsICJoYW5kbGVFeGl0IiwgIl9zdG9wIiwgImVycm9yRXZlbnRIYW5kbGVyIiwgInNpZ25hbEV2ZW50SGFuZGxlciIsICJyZWdpc3Rlckhvb2tzIiwgImNsZWFySG9va3MiLCAiY2xlYXJQcmV2TWVzc2FnZSIsICJwcmV2TGluZXMiLCAiZXJhc2UiLCAicmVtb3ZlVHJhaWxpbmdEb3RzIiwgImZvcm1hdFRpbWVyIiwgIm9yaWdpbiIsICJkdXJhdGlvbiIsICJtaW4iLCAic2VjcyIsICJibG9jayIsICJmcmFtZUluZGV4IiwgImluZGljYXRvclRpbWVyIiwgImZyYW1lIiwgIm91dHB1dE1lc3NhZ2UiLCAibG9hZGluZ0RvdHMiLCAid3JhcHBlZCIsICJzaWxlbnQiLCAiU2VsZWN0UHJvbXB0IiwgInRpdGxlUHJlZml4IiwgInRpdGxlUHJlZml4QmFyIiwgIm1lc3NhZ2VMaW5lcyIsICJwcmVmaXhFbmQiLCAiU2VsZWN0S2V5UHJvbXB0IiwgInNlbGVjdGVkT3B0aW9uIiwgIml0ZXJhYmxlIiwgImxpbmVXaWR0aCIsICJjaHVuayIsICJzdHJpcCIsICJjaHVua0xlbiIsICJ0YXNrIiwgInMiLCAiYmFyU2l6ZSIsICJyZXRhaW5Mb2ciLCAiaXNUVFlGbiIsICJidWZmZXJzIiwgImxhc3RNZXNzYWdlV2FzUmF3IiwgImNsZWFyIiwgImNsZWFyVGl0bGUiLCAiYnVmZmVyIiwgImJ1ZmZlckhlaWdodCIsICJjb3VudCIsICJwcmludEJ1ZmZlciIsICJtZXNzYWdlU3BhY2luZyIsICJmdWxsIiwgIm1lc3NhZ2VzIiwgInJlbmRlckJ1ZmZlciIsICJoZWFkZXIiLCAibW9wdHMiLCAibGluZXNUb1JlbW92ZSIsICJyZW1vdmVkTGluZXMiLCAicHJpbnRCdWZmZXJzIiwgImNvbXBsZXRlQnVmZmVyIiwgIlRleHRQcm9tcHQiLCAiZXJyb3JUZXh0IiwgInZhbHVlVGV4dCIsICJpbXBvcnRfZnMiLCAiaW1wb3J0X29zIiwgImltcG9ydF9wYXRoIiwgImltcG9ydF9jaGlsZF9wcm9jZXNzIiwgImltcG9ydF9waWNvY29sb3JzIiwgIm9zIiwgInBhdGgiLCAiZnMiLCAiaW1wb3J0X3BhdGgiLCAiaW1wb3J0X29zIiwgIm9zIiwgInBhdGgiLCAibmV0IiwgImUiLCAiaW1wb3J0X3BhdGgiLCAiaW1wb3J0X29zIiwgInBhdGgiLCAib3MiLCAiaW1wb3J0X29zIiwgImltcG9ydF9wYXRoIiwgInBhdGgiLCAib3MiLCAiaW1wb3J0X2ZzIiwgImltcG9ydF9vcyIsICJpbXBvcnRfcGF0aCIsICJwYXRoIiwgIm9zIiwgImZzIiwgImZzIiwgInBhdGgiLCAiaW1wb3J0X2ZzIiwgImltcG9ydF9vcyIsICJpbXBvcnRfcGF0aCIsICJwYXRoIiwgIm9zIiwgImZzIiwgImUiLCAiaW1wb3J0X2ZzIiwgImltcG9ydF9vcyIsICJpbXBvcnRfcGF0aCIsICJpbXBvcnRfY2hpbGRfcHJvY2VzcyIsICJwYXRoIiwgIm9zIiwgInJlc29sdmVOb2RlUGF0aCIsICJyZXNvbHZlQ2xpRW50cnkiLCAiZnMiLCAiaW5zdGFsbFNlcnZpY2UiLCAiZW5hYmxlU2VydmljZSIsICJkaXNhYmxlU2VydmljZSIsICJ1bmluc3RhbGxTZXJ2aWNlIiwgInN0YXR1c1NlcnZpY2UiLCAic3RhcnRTZXJ2aWNlIiwgInN0b3BTZXJ2aWNlIiwgInJlc3RhcnRTZXJ2aWNlIiwgImltcG9ydF9mcyIsICJpbXBvcnRfb3MiLCAiaW1wb3J0X3BhdGgiLCAiaW1wb3J0X2NoaWxkX3Byb2Nlc3MiLCAicGF0aCIsICJvcyIsICJyZXNvbHZlTm9kZVBhdGgiLCAicmVzb2x2ZUNsaUVudHJ5IiwgImZzIiwgImluc3RhbGxTZXJ2aWNlIiwgImVuYWJsZVNlcnZpY2UiLCAiZGlzYWJsZVNlcnZpY2UiLCAidW5pbnN0YWxsU2VydmljZSIsICJzdGF0dXNTZXJ2aWNlIiwgInN0YXJ0U2VydmljZSIsICJzdG9wU2VydmljZSIsICJyZXN0YXJ0U2VydmljZSIsICJpbXBvcnRfZnMiLCAiaW1wb3J0X29zIiwgImltcG9ydF9wYXRoIiwgImltcG9ydF9jaGlsZF9wcm9jZXNzIiwgInBhdGgiLCAib3MiLCAiZnMiLCAiaHR0cHMiLCAiaHR0cCIsICJlIiwgImltcG9ydF9mcyIsICJpbXBvcnRfb3MiLCAiaW1wb3J0X3BhdGgiLCAiaW1wb3J0X2NyeXB0byIsICJwYXRoIiwgIm9zIiwgImZzIiwgImltcG9ydF9odHRwIiwgImltcG9ydF9odHRwcyIsICJwYXRoIiwgImh0dHBzIiwgImh0dHAiLCAiaW1wb3J0X2ZzIiwgImltcG9ydF9vcyIsICJpbXBvcnRfcGF0aCIsICJpbXBvcnRfY2hpbGRfcHJvY2VzcyIsICJpbXBvcnRfZnMiLCAiaW1wb3J0X29zIiwgImltcG9ydF9wYXRoIiwgImltcG9ydF9jcnlwdG8iLCAicGF0aCIsICJvcyIsICJmcyIsICJwYXRoIiwgImZzIiwgInNsZWVwIiwgIm9zIiwgImltcG9ydF9mcyIsICJpbXBvcnRfb3MiLCAiaW1wb3J0X3BhdGgiLCAicGF0aCIsICJvcyIsICJlbnN1cmVEaXIiLCAiZnMiLCAiaW1wb3J0X2ZzIiwgImltcG9ydF9vcyIsICJpbXBvcnRfcGF0aCIsICJpbXBvcnRfY2hpbGRfcHJvY2VzcyIsICJwYXRoIiwgIm9zIiwgImZzIiwgImNvbG9yIiwgInJlYWRsaW5lIiwgImltcG9ydF9jaGlsZF9wcm9jZXNzIiwgImltcG9ydF9wYXRoIiwgInBhdGgiLCAiREJfUEFUSCIsICJwYXRoIiwgIm9zIiwgIlNPQ0tFVF9QQVRIIiwgInBhcnNlQ2xpZW50cyIsICJpc0RhZW1vblJlYWNoYWJsZSIsICJyZXNvbHZlRGFlbW9uRW50cnlwb2ludCIsICJmcyIsICJnZXRIb3N0ZWREYXNoYm9hcmRVcmwiLCAic3RhcnREYWVtb25EZXRhY2hlZCIsICJ3YWl0Rm9yRGFlbW9uIiwgImNvbG9yIiwgImsiLCAicGF5bG9hZCIsICJxdWV1ZVBhdGgiLCAiZSIsICJpbnN0YWxsU2VydmljZSIsICJlbmFibGVTZXJ2aWNlIiwgImRpc2FibGVTZXJ2aWNlIiwgInVuaW5zdGFsbFNlcnZpY2UiLCAic3RhdHVzU2VydmljZSIsICJzdGFydFNlcnZpY2UiLCAic3RvcFNlcnZpY2UiLCAicmVzdGFydFNlcnZpY2UiXQp9Cg==
|
|
6422
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3BpY29jb2xvcnMvcGljb2NvbG9ycy5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvc2lzdGVyYW5zaS9zcmMvaW5kZXguanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BjbGFjay9jb3JlL3NyYy91dGlscy9jdXJzb3IudHMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL25vZGVfbW9kdWxlcy8ucG5wbS9mYXN0LXN0cmluZy10cnVuY2F0ZWQtd2lkdGhAMS4yLjEvbm9kZV9tb2R1bGVzL2Zhc3Qtc3RyaW5nLXRydW5jYXRlZC13aWR0aC9kaXN0L3V0aWxzLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ub2RlX21vZHVsZXMvLnBucG0vZmFzdC1zdHJpbmctdHJ1bmNhdGVkLXdpZHRoQDEuMi4xL25vZGVfbW9kdWxlcy9mYXN0LXN0cmluZy10cnVuY2F0ZWQtd2lkdGgvZGlzdC9pbmRleC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbm9kZV9tb2R1bGVzLy5wbnBtL2Zhc3Qtc3RyaW5nLXdpZHRoQDEuMS4wL25vZGVfbW9kdWxlcy9mYXN0LXN0cmluZy13aWR0aC9kaXN0L2luZGV4LmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ub2RlX21vZHVsZXMvLnBucG0vZmFzdC13cmFwLWFuc2lAMC4xLjMvbm9kZV9tb2R1bGVzL2Zhc3Qtd3JhcC1hbnNpL2xpYi9tYWluLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9AY2xhY2svY29yZS9zcmMvdXRpbHMvc2V0dGluZ3MudHMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BjbGFjay9jb3JlL3NyYy91dGlscy9zdHJpbmcudHMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BjbGFjay9jb3JlL3NyYy91dGlscy9pbmRleC50cyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvQGNsYWNrL2NvcmUvc3JjL3Byb21wdHMvcHJvbXB0LnRzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9AY2xhY2svY29yZS9zcmMvcHJvbXB0cy9hdXRvY29tcGxldGUudHMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BjbGFjay9jb3JlL3NyYy9wcm9tcHRzL2NvbmZpcm0udHMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BjbGFjay9jb3JlL3NyYy9wcm9tcHRzL2dyb3VwLW11bHRpc2VsZWN0LnRzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9AY2xhY2svY29yZS9zcmMvcHJvbXB0cy9tdWx0aS1zZWxlY3QudHMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BjbGFjay9jb3JlL3NyYy9wcm9tcHRzL3Bhc3N3b3JkLnRzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9AY2xhY2svY29yZS9zcmMvcHJvbXB0cy9zZWxlY3QudHMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BjbGFjay9jb3JlL3NyYy9wcm9tcHRzL3NlbGVjdC1rZXkudHMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BjbGFjay9jb3JlL3NyYy9wcm9tcHRzL3RleHQudHMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL25vZGVfbW9kdWxlcy8ucG5wbS9pcy11bmljb2RlLXN1cHBvcnRlZEAxLjMuMC9ub2RlX21vZHVsZXMvaXMtdW5pY29kZS1zdXBwb3J0ZWQvaW5kZXguanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BjbGFjay9wcm9tcHRzL3NyYy9jb21tb24udHMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL25vZGVfbW9kdWxlcy8ucG5wbS9mYXN0LXN0cmluZy10cnVuY2F0ZWQtd2lkdGhAMS4yLjEvbm9kZV9tb2R1bGVzL2Zhc3Qtc3RyaW5nLXRydW5jYXRlZC13aWR0aC9kaXN0L3V0aWxzLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ub2RlX21vZHVsZXMvLnBucG0vZmFzdC1zdHJpbmctdHJ1bmNhdGVkLXdpZHRoQDEuMi4xL25vZGVfbW9kdWxlcy9mYXN0LXN0cmluZy10cnVuY2F0ZWQtd2lkdGgvZGlzdC9pbmRleC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbm9kZV9tb2R1bGVzLy5wbnBtL2Zhc3Qtc3RyaW5nLXdpZHRoQDEuMS4wL25vZGVfbW9kdWxlcy9mYXN0LXN0cmluZy13aWR0aC9kaXN0L2luZGV4LmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ub2RlX21vZHVsZXMvLnBucG0vZmFzdC13cmFwLWFuc2lAMC4xLjMvbm9kZV9tb2R1bGVzL2Zhc3Qtd3JhcC1hbnNpL2xpYi9tYWluLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9AY2xhY2svcHJvbXB0cy9zcmMvbGltaXQtb3B0aW9ucy50cyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvQGNsYWNrL3Byb21wdHMvc3JjL2F1dG9jb21wbGV0ZS50cyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvQGNsYWNrL3Byb21wdHMvc3JjL2JveC50cyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvQGNsYWNrL3Byb21wdHMvc3JjL2NvbmZpcm0udHMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BjbGFjay9wcm9tcHRzL3NyYy9ncm91cC50cyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvQGNsYWNrL3Byb21wdHMvc3JjL2dyb3VwLW11bHRpLXNlbGVjdC50cyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvQGNsYWNrL3Byb21wdHMvc3JjL2xvZy50cyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvQGNsYWNrL3Byb21wdHMvc3JjL21lc3NhZ2VzLnRzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9AY2xhY2svcHJvbXB0cy9zcmMvbXVsdGktc2VsZWN0LnRzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9AY2xhY2svcHJvbXB0cy9zcmMvbm90ZS50cyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvQGNsYWNrL3Byb21wdHMvc3JjL3Bhc3N3b3JkLnRzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9AY2xhY2svcHJvbXB0cy9zcmMvcGF0aC50cyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvQGNsYWNrL3Byb21wdHMvc3JjL3NwaW5uZXIudHMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BjbGFjay9wcm9tcHRzL3NyYy9wcm9ncmVzcy1iYXIudHMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BjbGFjay9wcm9tcHRzL3NyYy9zZWxlY3QudHMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BjbGFjay9wcm9tcHRzL3NyYy9zZWxlY3Qta2V5LnRzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9AY2xhY2svcHJvbXB0cy9zcmMvc3RyZWFtLnRzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9AY2xhY2svcHJvbXB0cy9zcmMvdGFzay50cyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvQGNsYWNrL3Byb21wdHMvc3JjL3Rhc2stbG9nLnRzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9AY2xhY2svcHJvbXB0cy9zcmMvdGV4dC50cyIsICIuLi9zcmMvaW5kZXgudHMiLCAiLi4vLi4vbWNwL3NyYy9ib290c3RyYXAudHMiLCAiLi4vLi4vbWNwL3NyYy9jbGllbnQudHMiLCAiLi4vLi4vY29yZS9zcmMvZGIudHMiLCAiLi4vLi4vY29yZS9zcmMvZW5jcnlwdGlvbi50cyIsICIuLi8uLi9jb3JlL3NyYy9jb25maWcudHMiLCAiLi4vc3JjL3NlcnZpY2Utd2luZG93cy50cyIsICIuLi9zcmMvc2VydmljZS1tYWNvcy50cyIsICIuLi9zcmMvc2VydmljZS1saW51eC50cyIsICIuLi9zcmMvYXV0aC50cyIsICIuLi9zcmMva2V5cmluZy50cyIsICIuLi9zcmMvY29ubmVjdG9yLnRzIiwgIi4uL3NyYy9jbG91ZC50cyIsICIuLi9zcmMvY29ubmVjdG9yLXJ1bnRpbWUudHMiLCAiLi4vc3JjL2Nvbm5lY3Rvci1xdWV1ZS50cyIsICIuLi9zcmMvb3BzLWxvZy50cyIsICIuLi9zcmMvY29ubmVjdG9yLXF1ZXVlLWRyYWluLnRzIiwgIi4uL3NyYy9zaGVsbC50cyIsICIuLi9zcmMvcmVsZWFzZS50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsibGV0IHAgPSBwcm9jZXNzIHx8IHt9LCBhcmd2ID0gcC5hcmd2IHx8IFtdLCBlbnYgPSBwLmVudiB8fCB7fVxubGV0IGlzQ29sb3JTdXBwb3J0ZWQgPVxuXHQhKCEhZW52Lk5PX0NPTE9SIHx8IGFyZ3YuaW5jbHVkZXMoXCItLW5vLWNvbG9yXCIpKSAmJlxuXHQoISFlbnYuRk9SQ0VfQ09MT1IgfHwgYXJndi5pbmNsdWRlcyhcIi0tY29sb3JcIikgfHwgcC5wbGF0Zm9ybSA9PT0gXCJ3aW4zMlwiIHx8ICgocC5zdGRvdXQgfHwge30pLmlzVFRZICYmIGVudi5URVJNICE9PSBcImR1bWJcIikgfHwgISFlbnYuQ0kpXG5cbmxldCBmb3JtYXR0ZXIgPSAob3BlbiwgY2xvc2UsIHJlcGxhY2UgPSBvcGVuKSA9PlxuXHRpbnB1dCA9PiB7XG5cdFx0bGV0IHN0cmluZyA9IFwiXCIgKyBpbnB1dCwgaW5kZXggPSBzdHJpbmcuaW5kZXhPZihjbG9zZSwgb3Blbi5sZW5ndGgpXG5cdFx0cmV0dXJuIH5pbmRleCA/IG9wZW4gKyByZXBsYWNlQ2xvc2Uoc3RyaW5nLCBjbG9zZSwgcmVwbGFjZSwgaW5kZXgpICsgY2xvc2UgOiBvcGVuICsgc3RyaW5nICsgY2xvc2Vcblx0fVxuXG5sZXQgcmVwbGFjZUNsb3NlID0gKHN0cmluZywgY2xvc2UsIHJlcGxhY2UsIGluZGV4KSA9PiB7XG5cdGxldCByZXN1bHQgPSBcIlwiLCBjdXJzb3IgPSAwXG5cdGRvIHtcblx0XHRyZXN1bHQgKz0gc3RyaW5nLnN1YnN0cmluZyhjdXJzb3IsIGluZGV4KSArIHJlcGxhY2Vcblx0XHRjdXJzb3IgPSBpbmRleCArIGNsb3NlLmxlbmd0aFxuXHRcdGluZGV4ID0gc3RyaW5nLmluZGV4T2YoY2xvc2UsIGN1cnNvcilcblx0fSB3aGlsZSAofmluZGV4KVxuXHRyZXR1cm4gcmVzdWx0ICsgc3RyaW5nLnN1YnN0cmluZyhjdXJzb3IpXG59XG5cbmxldCBjcmVhdGVDb2xvcnMgPSAoZW5hYmxlZCA9IGlzQ29sb3JTdXBwb3J0ZWQpID0+IHtcblx0bGV0IGYgPSBlbmFibGVkID8gZm9ybWF0dGVyIDogKCkgPT4gU3RyaW5nXG5cdHJldHVybiB7XG5cdFx0aXNDb2xvclN1cHBvcnRlZDogZW5hYmxlZCxcblx0XHRyZXNldDogZihcIlxceDFiWzBtXCIsIFwiXFx4MWJbMG1cIiksXG5cdFx0Ym9sZDogZihcIlxceDFiWzFtXCIsIFwiXFx4MWJbMjJtXCIsIFwiXFx4MWJbMjJtXFx4MWJbMW1cIiksXG5cdFx0ZGltOiBmKFwiXFx4MWJbMm1cIiwgXCJcXHgxYlsyMm1cIiwgXCJcXHgxYlsyMm1cXHgxYlsybVwiKSxcblx0XHRpdGFsaWM6IGYoXCJcXHgxYlszbVwiLCBcIlxceDFiWzIzbVwiKSxcblx0XHR1bmRlcmxpbmU6IGYoXCJcXHgxYls0bVwiLCBcIlxceDFiWzI0bVwiKSxcblx0XHRpbnZlcnNlOiBmKFwiXFx4MWJbN21cIiwgXCJcXHgxYlsyN21cIiksXG5cdFx0aGlkZGVuOiBmKFwiXFx4MWJbOG1cIiwgXCJcXHgxYlsyOG1cIiksXG5cdFx0c3RyaWtldGhyb3VnaDogZihcIlxceDFiWzltXCIsIFwiXFx4MWJbMjltXCIpLFxuXG5cdFx0YmxhY2s6IGYoXCJcXHgxYlszMG1cIiwgXCJcXHgxYlszOW1cIiksXG5cdFx0cmVkOiBmKFwiXFx4MWJbMzFtXCIsIFwiXFx4MWJbMzltXCIpLFxuXHRcdGdyZWVuOiBmKFwiXFx4MWJbMzJtXCIsIFwiXFx4MWJbMzltXCIpLFxuXHRcdHllbGxvdzogZihcIlxceDFiWzMzbVwiLCBcIlxceDFiWzM5bVwiKSxcblx0XHRibHVlOiBmKFwiXFx4MWJbMzRtXCIsIFwiXFx4MWJbMzltXCIpLFxuXHRcdG1hZ2VudGE6IGYoXCJcXHgxYlszNW1cIiwgXCJcXHgxYlszOW1cIiksXG5cdFx0Y3lhbjogZihcIlxceDFiWzM2bVwiLCBcIlxceDFiWzM5bVwiKSxcblx0XHR3aGl0ZTogZihcIlxceDFiWzM3bVwiLCBcIlxceDFiWzM5bVwiKSxcblx0XHRncmF5OiBmKFwiXFx4MWJbOTBtXCIsIFwiXFx4MWJbMzltXCIpLFxuXG5cdFx0YmdCbGFjazogZihcIlxceDFiWzQwbVwiLCBcIlxceDFiWzQ5bVwiKSxcblx0XHRiZ1JlZDogZihcIlxceDFiWzQxbVwiLCBcIlxceDFiWzQ5bVwiKSxcblx0XHRiZ0dyZWVuOiBmKFwiXFx4MWJbNDJtXCIsIFwiXFx4MWJbNDltXCIpLFxuXHRcdGJnWWVsbG93OiBmKFwiXFx4MWJbNDNtXCIsIFwiXFx4MWJbNDltXCIpLFxuXHRcdGJnQmx1ZTogZihcIlxceDFiWzQ0bVwiLCBcIlxceDFiWzQ5bVwiKSxcblx0XHRiZ01hZ2VudGE6IGYoXCJcXHgxYls0NW1cIiwgXCJcXHgxYls0OW1cIiksXG5cdFx0YmdDeWFuOiBmKFwiXFx4MWJbNDZtXCIsIFwiXFx4MWJbNDltXCIpLFxuXHRcdGJnV2hpdGU6IGYoXCJcXHgxYls0N21cIiwgXCJcXHgxYls0OW1cIiksXG5cblx0XHRibGFja0JyaWdodDogZihcIlxceDFiWzkwbVwiLCBcIlxceDFiWzM5bVwiKSxcblx0XHRyZWRCcmlnaHQ6IGYoXCJcXHgxYls5MW1cIiwgXCJcXHgxYlszOW1cIiksXG5cdFx0Z3JlZW5CcmlnaHQ6IGYoXCJcXHgxYls5Mm1cIiwgXCJcXHgxYlszOW1cIiksXG5cdFx0eWVsbG93QnJpZ2h0OiBmKFwiXFx4MWJbOTNtXCIsIFwiXFx4MWJbMzltXCIpLFxuXHRcdGJsdWVCcmlnaHQ6IGYoXCJcXHgxYls5NG1cIiwgXCJcXHgxYlszOW1cIiksXG5cdFx0bWFnZW50YUJyaWdodDogZihcIlxceDFiWzk1bVwiLCBcIlxceDFiWzM5bVwiKSxcblx0XHRjeWFuQnJpZ2h0OiBmKFwiXFx4MWJbOTZtXCIsIFwiXFx4MWJbMzltXCIpLFxuXHRcdHdoaXRlQnJpZ2h0OiBmKFwiXFx4MWJbOTdtXCIsIFwiXFx4MWJbMzltXCIpLFxuXG5cdFx0YmdCbGFja0JyaWdodDogZihcIlxceDFiWzEwMG1cIiwgXCJcXHgxYls0OW1cIiksXG5cdFx0YmdSZWRCcmlnaHQ6IGYoXCJcXHgxYlsxMDFtXCIsIFwiXFx4MWJbNDltXCIpLFxuXHRcdGJnR3JlZW5CcmlnaHQ6IGYoXCJcXHgxYlsxMDJtXCIsIFwiXFx4MWJbNDltXCIpLFxuXHRcdGJnWWVsbG93QnJpZ2h0OiBmKFwiXFx4MWJbMTAzbVwiLCBcIlxceDFiWzQ5bVwiKSxcblx0XHRiZ0JsdWVCcmlnaHQ6IGYoXCJcXHgxYlsxMDRtXCIsIFwiXFx4MWJbNDltXCIpLFxuXHRcdGJnTWFnZW50YUJyaWdodDogZihcIlxceDFiWzEwNW1cIiwgXCJcXHgxYls0OW1cIiksXG5cdFx0YmdDeWFuQnJpZ2h0OiBmKFwiXFx4MWJbMTA2bVwiLCBcIlxceDFiWzQ5bVwiKSxcblx0XHRiZ1doaXRlQnJpZ2h0OiBmKFwiXFx4MWJbMTA3bVwiLCBcIlxceDFiWzQ5bVwiKSxcblx0fVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUNvbG9ycygpXG5tb2R1bGUuZXhwb3J0cy5jcmVhdGVDb2xvcnMgPSBjcmVhdGVDb2xvcnNcbiIsICIndXNlIHN0cmljdCc7XG5cbmNvbnN0IEVTQyA9ICdcXHgxQic7XG5jb25zdCBDU0kgPSBgJHtFU0N9W2A7XG5jb25zdCBiZWVwID0gJ1xcdTAwMDcnO1xuXG5jb25zdCBjdXJzb3IgPSB7XG4gIHRvKHgsIHkpIHtcbiAgICBpZiAoIXkpIHJldHVybiBgJHtDU0l9JHt4ICsgMX1HYDtcbiAgICByZXR1cm4gYCR7Q1NJfSR7eSArIDF9OyR7eCArIDF9SGA7XG4gIH0sXG4gIG1vdmUoeCwgeSkge1xuICAgIGxldCByZXQgPSAnJztcblxuICAgIGlmICh4IDwgMCkgcmV0ICs9IGAke0NTSX0key14fURgO1xuICAgIGVsc2UgaWYgKHggPiAwKSByZXQgKz0gYCR7Q1NJfSR7eH1DYDtcblxuICAgIGlmICh5IDwgMCkgcmV0ICs9IGAke0NTSX0key15fUFgO1xuICAgIGVsc2UgaWYgKHkgPiAwKSByZXQgKz0gYCR7Q1NJfSR7eX1CYDtcblxuICAgIHJldHVybiByZXQ7XG4gIH0sXG4gIHVwOiAoY291bnQgPSAxKSA9PiBgJHtDU0l9JHtjb3VudH1BYCxcbiAgZG93bjogKGNvdW50ID0gMSkgPT4gYCR7Q1NJfSR7Y291bnR9QmAsXG4gIGZvcndhcmQ6IChjb3VudCA9IDEpID0+IGAke0NTSX0ke2NvdW50fUNgLFxuICBiYWNrd2FyZDogKGNvdW50ID0gMSkgPT4gYCR7Q1NJfSR7Y291bnR9RGAsXG4gIG5leHRMaW5lOiAoY291bnQgPSAxKSA9PiBgJHtDU0l9RWAucmVwZWF0KGNvdW50KSxcbiAgcHJldkxpbmU6IChjb3VudCA9IDEpID0+IGAke0NTSX1GYC5yZXBlYXQoY291bnQpLFxuICBsZWZ0OiBgJHtDU0l9R2AsXG4gIGhpZGU6IGAke0NTSX0/MjVsYCxcbiAgc2hvdzogYCR7Q1NJfT8yNWhgLFxuICBzYXZlOiBgJHtFU0N9N2AsXG4gIHJlc3RvcmU6IGAke0VTQ304YFxufVxuXG5jb25zdCBzY3JvbGwgPSB7XG4gIHVwOiAoY291bnQgPSAxKSA9PiBgJHtDU0l9U2AucmVwZWF0KGNvdW50KSxcbiAgZG93bjogKGNvdW50ID0gMSkgPT4gYCR7Q1NJfVRgLnJlcGVhdChjb3VudClcbn1cblxuY29uc3QgZXJhc2UgPSB7XG4gIHNjcmVlbjogYCR7Q1NJfTJKYCxcbiAgdXA6IChjb3VudCA9IDEpID0+IGAke0NTSX0xSmAucmVwZWF0KGNvdW50KSxcbiAgZG93bjogKGNvdW50ID0gMSkgPT4gYCR7Q1NJfUpgLnJlcGVhdChjb3VudCksXG4gIGxpbmU6IGAke0NTSX0yS2AsXG4gIGxpbmVFbmQ6IGAke0NTSX1LYCxcbiAgbGluZVN0YXJ0OiBgJHtDU0l9MUtgLFxuICBsaW5lcyhjb3VudCkge1xuICAgIGxldCBjbGVhciA9ICcnO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKylcbiAgICAgIGNsZWFyICs9IHRoaXMubGluZSArIChpIDwgY291bnQgLSAxID8gY3Vyc29yLnVwKCkgOiAnJyk7XG4gICAgaWYgKGNvdW50KVxuICAgICAgY2xlYXIgKz0gY3Vyc29yLmxlZnQ7XG4gICAgcmV0dXJuIGNsZWFyO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0geyBjdXJzb3IsIHNjcm9sbCwgZXJhc2UsIGJlZXAgfTtcbiIsICJleHBvcnQgZnVuY3Rpb24gZmluZEN1cnNvcjxUIGV4dGVuZHMgeyBkaXNhYmxlZD86IGJvb2xlYW4gfT4oXG5cdGN1cnNvcjogbnVtYmVyLFxuXHRkZWx0YTogbnVtYmVyLFxuXHRvcHRpb25zOiBUW11cbikge1xuXHRjb25zdCBoYXNFbmFibGVkT3B0aW9ucyA9IG9wdGlvbnMuc29tZSgob3B0KSA9PiAhb3B0LmRpc2FibGVkKTtcblx0aWYgKCFoYXNFbmFibGVkT3B0aW9ucykge1xuXHRcdHJldHVybiBjdXJzb3I7XG5cdH1cblx0Y29uc3QgbmV3Q3Vyc29yID0gY3Vyc29yICsgZGVsdGE7XG5cdGNvbnN0IG1heEN1cnNvciA9IE1hdGgubWF4KG9wdGlvbnMubGVuZ3RoIC0gMSwgMCk7XG5cdGNvbnN0IGNsYW1wZWRDdXJzb3IgPSBuZXdDdXJzb3IgPCAwID8gbWF4Q3Vyc29yIDogbmV3Q3Vyc29yID4gbWF4Q3Vyc29yID8gMCA6IG5ld0N1cnNvcjtcblx0Y29uc3QgbmV3T3B0aW9uID0gb3B0aW9uc1tjbGFtcGVkQ3Vyc29yXTtcblx0aWYgKG5ld09wdGlvbi5kaXNhYmxlZCkge1xuXHRcdHJldHVybiBmaW5kQ3Vyc29yKGNsYW1wZWRDdXJzb3IsIGRlbHRhIDwgMCA/IC0xIDogMSwgb3B0aW9ucyk7XG5cdH1cblx0cmV0dXJuIGNsYW1wZWRDdXJzb3I7XG59XG4iLCAiLyogTUFJTiAqL1xuLy9VUkw6IGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5kcmVzb3JodXMvZ2V0LWVhc3QtYXNpYW4td2lkdGgvYmxvYi9tYWluL2xvb2t1cC5qc1xuLy9MSUNFTlNFOiBodHRwczovL2dpdGh1Yi5jb20vc2luZHJlc29yaHVzL2dldC1lYXN0LWFzaWFuLXdpZHRoL2Jsb2IvbWFpbi9saWNlbnNlXG4vL1RPRE86IFJlcGxhY2UgdGhlc2Ugd2l0aCBzb21lIHVuaWNvZGUgcHJvcGVydHkgY2xhc3NlcywgaWYgdGhlIG9uZXMgd2UgbmVlZCBleGlzdFxuY29uc3QgaXNBbWJpZ3VvdXMgPSAoeCkgPT4ge1xuICAgIHJldHVybiB4ID09PSAweEExIHx8IHggPT09IDB4QTQgfHwgeCA9PT0gMHhBNyB8fCB4ID09PSAweEE4IHx8IHggPT09IDB4QUEgfHwgeCA9PT0gMHhBRCB8fCB4ID09PSAweEFFIHx8IHggPj0gMHhCMCAmJiB4IDw9IDB4QjQgfHwgeCA+PSAweEI2ICYmIHggPD0gMHhCQSB8fCB4ID49IDB4QkMgJiYgeCA8PSAweEJGIHx8IHggPT09IDB4QzYgfHwgeCA9PT0gMHhEMCB8fCB4ID09PSAweEQ3IHx8IHggPT09IDB4RDggfHwgeCA+PSAweERFICYmIHggPD0gMHhFMSB8fCB4ID09PSAweEU2IHx8IHggPj0gMHhFOCAmJiB4IDw9IDB4RUEgfHwgeCA9PT0gMHhFQyB8fCB4ID09PSAweEVEIHx8IHggPT09IDB4RjAgfHwgeCA9PT0gMHhGMiB8fCB4ID09PSAweEYzIHx8IHggPj0gMHhGNyAmJiB4IDw9IDB4RkEgfHwgeCA9PT0gMHhGQyB8fCB4ID09PSAweEZFIHx8IHggPT09IDB4MTAxIHx8IHggPT09IDB4MTExIHx8IHggPT09IDB4MTEzIHx8IHggPT09IDB4MTFCIHx8IHggPT09IDB4MTI2IHx8IHggPT09IDB4MTI3IHx8IHggPT09IDB4MTJCIHx8IHggPj0gMHgxMzEgJiYgeCA8PSAweDEzMyB8fCB4ID09PSAweDEzOCB8fCB4ID49IDB4MTNGICYmIHggPD0gMHgxNDIgfHwgeCA9PT0gMHgxNDQgfHwgeCA+PSAweDE0OCAmJiB4IDw9IDB4MTRCIHx8IHggPT09IDB4MTREIHx8IHggPT09IDB4MTUyIHx8IHggPT09IDB4MTUzIHx8IHggPT09IDB4MTY2IHx8IHggPT09IDB4MTY3IHx8IHggPT09IDB4MTZCIHx8IHggPT09IDB4MUNFIHx8IHggPT09IDB4MUQwIHx8IHggPT09IDB4MUQyIHx8IHggPT09IDB4MUQ0IHx8IHggPT09IDB4MUQ2IHx8IHggPT09IDB4MUQ4IHx8IHggPT09IDB4MURBIHx8IHggPT09IDB4MURDIHx8IHggPT09IDB4MjUxIHx8IHggPT09IDB4MjYxIHx8IHggPT09IDB4MkM0IHx8IHggPT09IDB4MkM3IHx8IHggPj0gMHgyQzkgJiYgeCA8PSAweDJDQiB8fCB4ID09PSAweDJDRCB8fCB4ID09PSAweDJEMCB8fCB4ID49IDB4MkQ4ICYmIHggPD0gMHgyREIgfHwgeCA9PT0gMHgyREQgfHwgeCA9PT0gMHgyREYgfHwgeCA+PSAweDMwMCAmJiB4IDw9IDB4MzZGIHx8IHggPj0gMHgzOTEgJiYgeCA8PSAweDNBMSB8fCB4ID49IDB4M0EzICYmIHggPD0gMHgzQTkgfHwgeCA+PSAweDNCMSAmJiB4IDw9IDB4M0MxIHx8IHggPj0gMHgzQzMgJiYgeCA8PSAweDNDOSB8fCB4ID09PSAweDQwMSB8fCB4ID49IDB4NDEwICYmIHggPD0gMHg0NEYgfHwgeCA9PT0gMHg0NTEgfHwgeCA9PT0gMHgyMDEwIHx8IHggPj0gMHgyMDEzICYmIHggPD0gMHgyMDE2IHx8IHggPT09IDB4MjAxOCB8fCB4ID09PSAweDIwMTkgfHwgeCA9PT0gMHgyMDFDIHx8IHggPT09IDB4MjAxRCB8fCB4ID49IDB4MjAyMCAmJiB4IDw9IDB4MjAyMiB8fCB4ID49IDB4MjAyNCAmJiB4IDw9IDB4MjAyNyB8fCB4ID09PSAweDIwMzAgfHwgeCA9PT0gMHgyMDMyIHx8IHggPT09IDB4MjAzMyB8fCB4ID09PSAweDIwMzUgfHwgeCA9PT0gMHgyMDNCIHx8IHggPT09IDB4MjAzRSB8fCB4ID09PSAweDIwNzQgfHwgeCA9PT0gMHgyMDdGIHx8IHggPj0gMHgyMDgxICYmIHggPD0gMHgyMDg0IHx8IHggPT09IDB4MjBBQyB8fCB4ID09PSAweDIxMDMgfHwgeCA9PT0gMHgyMTA1IHx8IHggPT09IDB4MjEwOSB8fCB4ID09PSAweDIxMTMgfHwgeCA9PT0gMHgyMTE2IHx8IHggPT09IDB4MjEyMSB8fCB4ID09PSAweDIxMjIgfHwgeCA9PT0gMHgyMTI2IHx8IHggPT09IDB4MjEyQiB8fCB4ID09PSAweDIxNTMgfHwgeCA9PT0gMHgyMTU0IHx8IHggPj0gMHgyMTVCICYmIHggPD0gMHgyMTVFIHx8IHggPj0gMHgyMTYwICYmIHggPD0gMHgyMTZCIHx8IHggPj0gMHgyMTcwICYmIHggPD0gMHgyMTc5IHx8IHggPT09IDB4MjE4OSB8fCB4ID49IDB4MjE5MCAmJiB4IDw9IDB4MjE5OSB8fCB4ID09PSAweDIxQjggfHwgeCA9PT0gMHgyMUI5IHx8IHggPT09IDB4MjFEMiB8fCB4ID09PSAweDIxRDQgfHwgeCA9PT0gMHgyMUU3IHx8IHggPT09IDB4MjIwMCB8fCB4ID09PSAweDIyMDIgfHwgeCA9PT0gMHgyMjAzIHx8IHggPT09IDB4MjIwNyB8fCB4ID09PSAweDIyMDggfHwgeCA9PT0gMHgyMjBCIHx8IHggPT09IDB4MjIwRiB8fCB4ID09PSAweDIyMTEgfHwgeCA9PT0gMHgyMjE1IHx8IHggPT09IDB4MjIxQSB8fCB4ID49IDB4MjIxRCAmJiB4IDw9IDB4MjIyMCB8fCB4ID09PSAweDIyMjMgfHwgeCA9PT0gMHgyMjI1IHx8IHggPj0gMHgyMjI3ICYmIHggPD0gMHgyMjJDIHx8IHggPT09IDB4MjIyRSB8fCB4ID49IDB4MjIzNCAmJiB4IDw9IDB4MjIzNyB8fCB4ID09PSAweDIyM0MgfHwgeCA9PT0gMHgyMjNEIHx8IHggPT09IDB4MjI0OCB8fCB4ID09PSAweDIyNEMgfHwgeCA9PT0gMHgyMjUyIHx8IHggPT09IDB4MjI2MCB8fCB4ID09PSAweDIyNjEgfHwgeCA+PSAweDIyNjQgJiYgeCA8PSAweDIyNjcgfHwgeCA9PT0gMHgyMjZBIHx8IHggPT09IDB4MjI2QiB8fCB4ID09PSAweDIyNkUgfHwgeCA9PT0gMHgyMjZGIHx8IHggPT09IDB4MjI4MiB8fCB4ID09PSAweDIyODMgfHwgeCA9PT0gMHgyMjg2IHx8IHggPT09IDB4MjI4NyB8fCB4ID09PSAweDIyOTUgfHwgeCA9PT0gMHgyMjk5IHx8IHggPT09IDB4MjJBNSB8fCB4ID09PSAweDIyQkYgfHwgeCA9PT0gMHgyMzEyIHx8IHggPj0gMHgyNDYwICYmIHggPD0gMHgyNEU5IHx8IHggPj0gMHgyNEVCICYmIHggPD0gMHgyNTRCIHx8IHggPj0gMHgyNTUwICYmIHggPD0gMHgyNTczIHx8IHggPj0gMHgyNTgwICYmIHggPD0gMHgyNThGIHx8IHggPj0gMHgyNTkyICYmIHggPD0gMHgyNTk1IHx8IHggPT09IDB4MjVBMCB8fCB4ID09PSAweDI1QTEgfHwgeCA+PSAweDI1QTMgJiYgeCA8PSAweDI1QTkgfHwgeCA9PT0gMHgyNUIyIHx8IHggPT09IDB4MjVCMyB8fCB4ID09PSAweDI1QjYgfHwgeCA9PT0gMHgyNUI3IHx8IHggPT09IDB4MjVCQyB8fCB4ID09PSAweDI1QkQgfHwgeCA9PT0gMHgyNUMwIHx8IHggPT09IDB4MjVDMSB8fCB4ID49IDB4MjVDNiAmJiB4IDw9IDB4MjVDOCB8fCB4ID09PSAweDI1Q0IgfHwgeCA+PSAweDI1Q0UgJiYgeCA8PSAweDI1RDEgfHwgeCA+PSAweDI1RTIgJiYgeCA8PSAweDI1RTUgfHwgeCA9PT0gMHgyNUVGIHx8IHggPT09IDB4MjYwNSB8fCB4ID09PSAweDI2MDYgfHwgeCA9PT0gMHgyNjA5IHx8IHggPT09IDB4MjYwRSB8fCB4ID09PSAweDI2MEYgfHwgeCA9PT0gMHgyNjFDIHx8IHggPT09IDB4MjYxRSB8fCB4ID09PSAweDI2NDAgfHwgeCA9PT0gMHgyNjQyIHx8IHggPT09IDB4MjY2MCB8fCB4ID09PSAweDI2NjEgfHwgeCA+PSAweDI2NjMgJiYgeCA8PSAweDI2NjUgfHwgeCA+PSAweDI2NjcgJiYgeCA8PSAweDI2NkEgfHwgeCA9PT0gMHgyNjZDIHx8IHggPT09IDB4MjY2RCB8fCB4ID09PSAweDI2NkYgfHwgeCA9PT0gMHgyNjlFIHx8IHggPT09IDB4MjY5RiB8fCB4ID09PSAweDI2QkYgfHwgeCA+PSAweDI2QzYgJiYgeCA8PSAweDI2Q0QgfHwgeCA+PSAweDI2Q0YgJiYgeCA8PSAweDI2RDMgfHwgeCA+PSAweDI2RDUgJiYgeCA8PSAweDI2RTEgfHwgeCA9PT0gMHgyNkUzIHx8IHggPT09IDB4MjZFOCB8fCB4ID09PSAweDI2RTkgfHwgeCA+PSAweDI2RUIgJiYgeCA8PSAweDI2RjEgfHwgeCA9PT0gMHgyNkY0IHx8IHggPj0gMHgyNkY2ICYmIHggPD0gMHgyNkY5IHx8IHggPT09IDB4MjZGQiB8fCB4ID09PSAweDI2RkMgfHwgeCA9PT0gMHgyNkZFIHx8IHggPT09IDB4MjZGRiB8fCB4ID09PSAweDI3M0QgfHwgeCA+PSAweDI3NzYgJiYgeCA8PSAweDI3N0YgfHwgeCA+PSAweDJCNTYgJiYgeCA8PSAweDJCNTkgfHwgeCA+PSAweDMyNDggJiYgeCA8PSAweDMyNEYgfHwgeCA+PSAweEUwMDAgJiYgeCA8PSAweEY4RkYgfHwgeCA+PSAweEZFMDAgJiYgeCA8PSAweEZFMEYgfHwgeCA9PT0gMHhGRkZEIHx8IHggPj0gMHgxRjEwMCAmJiB4IDw9IDB4MUYxMEEgfHwgeCA+PSAweDFGMTEwICYmIHggPD0gMHgxRjEyRCB8fCB4ID49IDB4MUYxMzAgJiYgeCA8PSAweDFGMTY5IHx8IHggPj0gMHgxRjE3MCAmJiB4IDw9IDB4MUYxOEQgfHwgeCA9PT0gMHgxRjE4RiB8fCB4ID09PSAweDFGMTkwIHx8IHggPj0gMHgxRjE5QiAmJiB4IDw9IDB4MUYxQUMgfHwgeCA+PSAweEUwMTAwICYmIHggPD0gMHhFMDFFRiB8fCB4ID49IDB4RjAwMDAgJiYgeCA8PSAweEZGRkZEIHx8IHggPj0gMHgxMDAwMDAgJiYgeCA8PSAweDEwRkZGRDtcbn07XG5jb25zdCBpc0Z1bGxXaWR0aCA9ICh4KSA9PiB7XG4gICAgcmV0dXJuIHggPT09IDB4MzAwMCB8fCB4ID49IDB4RkYwMSAmJiB4IDw9IDB4RkY2MCB8fCB4ID49IDB4RkZFMCAmJiB4IDw9IDB4RkZFNjtcbn07XG5jb25zdCBpc1dpZGUgPSAoeCkgPT4ge1xuICAgIHJldHVybiB4ID49IDB4MTEwMCAmJiB4IDw9IDB4MTE1RiB8fCB4ID09PSAweDIzMUEgfHwgeCA9PT0gMHgyMzFCIHx8IHggPT09IDB4MjMyOSB8fCB4ID09PSAweDIzMkEgfHwgeCA+PSAweDIzRTkgJiYgeCA8PSAweDIzRUMgfHwgeCA9PT0gMHgyM0YwIHx8IHggPT09IDB4MjNGMyB8fCB4ID09PSAweDI1RkQgfHwgeCA9PT0gMHgyNUZFIHx8IHggPT09IDB4MjYxNCB8fCB4ID09PSAweDI2MTUgfHwgeCA+PSAweDI2NDggJiYgeCA8PSAweDI2NTMgfHwgeCA9PT0gMHgyNjdGIHx8IHggPT09IDB4MjY5MyB8fCB4ID09PSAweDI2QTEgfHwgeCA9PT0gMHgyNkFBIHx8IHggPT09IDB4MjZBQiB8fCB4ID09PSAweDI2QkQgfHwgeCA9PT0gMHgyNkJFIHx8IHggPT09IDB4MjZDNCB8fCB4ID09PSAweDI2QzUgfHwgeCA9PT0gMHgyNkNFIHx8IHggPT09IDB4MjZENCB8fCB4ID09PSAweDI2RUEgfHwgeCA9PT0gMHgyNkYyIHx8IHggPT09IDB4MjZGMyB8fCB4ID09PSAweDI2RjUgfHwgeCA9PT0gMHgyNkZBIHx8IHggPT09IDB4MjZGRCB8fCB4ID09PSAweDI3MDUgfHwgeCA9PT0gMHgyNzBBIHx8IHggPT09IDB4MjcwQiB8fCB4ID09PSAweDI3MjggfHwgeCA9PT0gMHgyNzRDIHx8IHggPT09IDB4Mjc0RSB8fCB4ID49IDB4Mjc1MyAmJiB4IDw9IDB4Mjc1NSB8fCB4ID09PSAweDI3NTcgfHwgeCA+PSAweDI3OTUgJiYgeCA8PSAweDI3OTcgfHwgeCA9PT0gMHgyN0IwIHx8IHggPT09IDB4MjdCRiB8fCB4ID09PSAweDJCMUIgfHwgeCA9PT0gMHgyQjFDIHx8IHggPT09IDB4MkI1MCB8fCB4ID09PSAweDJCNTUgfHwgeCA+PSAweDJFODAgJiYgeCA8PSAweDJFOTkgfHwgeCA+PSAweDJFOUIgJiYgeCA8PSAweDJFRjMgfHwgeCA+PSAweDJGMDAgJiYgeCA8PSAweDJGRDUgfHwgeCA+PSAweDJGRjAgJiYgeCA8PSAweDJGRkYgfHwgeCA+PSAweDMwMDEgJiYgeCA8PSAweDMwM0UgfHwgeCA+PSAweDMwNDEgJiYgeCA8PSAweDMwOTYgfHwgeCA+PSAweDMwOTkgJiYgeCA8PSAweDMwRkYgfHwgeCA+PSAweDMxMDUgJiYgeCA8PSAweDMxMkYgfHwgeCA+PSAweDMxMzEgJiYgeCA8PSAweDMxOEUgfHwgeCA+PSAweDMxOTAgJiYgeCA8PSAweDMxRTMgfHwgeCA+PSAweDMxRUYgJiYgeCA8PSAweDMyMUUgfHwgeCA+PSAweDMyMjAgJiYgeCA8PSAweDMyNDcgfHwgeCA+PSAweDMyNTAgJiYgeCA8PSAweDREQkYgfHwgeCA+PSAweDRFMDAgJiYgeCA8PSAweEE0OEMgfHwgeCA+PSAweEE0OTAgJiYgeCA8PSAweEE0QzYgfHwgeCA+PSAweEE5NjAgJiYgeCA8PSAweEE5N0MgfHwgeCA+PSAweEFDMDAgJiYgeCA8PSAweEQ3QTMgfHwgeCA+PSAweEY5MDAgJiYgeCA8PSAweEZBRkYgfHwgeCA+PSAweEZFMTAgJiYgeCA8PSAweEZFMTkgfHwgeCA+PSAweEZFMzAgJiYgeCA8PSAweEZFNTIgfHwgeCA+PSAweEZFNTQgJiYgeCA8PSAweEZFNjYgfHwgeCA+PSAweEZFNjggJiYgeCA8PSAweEZFNkIgfHwgeCA+PSAweDE2RkUwICYmIHggPD0gMHgxNkZFNCB8fCB4ID09PSAweDE2RkYwIHx8IHggPT09IDB4MTZGRjEgfHwgeCA+PSAweDE3MDAwICYmIHggPD0gMHgxODdGNyB8fCB4ID49IDB4MTg4MDAgJiYgeCA8PSAweDE4Q0Q1IHx8IHggPj0gMHgxOEQwMCAmJiB4IDw9IDB4MThEMDggfHwgeCA+PSAweDFBRkYwICYmIHggPD0gMHgxQUZGMyB8fCB4ID49IDB4MUFGRjUgJiYgeCA8PSAweDFBRkZCIHx8IHggPT09IDB4MUFGRkQgfHwgeCA9PT0gMHgxQUZGRSB8fCB4ID49IDB4MUIwMDAgJiYgeCA8PSAweDFCMTIyIHx8IHggPT09IDB4MUIxMzIgfHwgeCA+PSAweDFCMTUwICYmIHggPD0gMHgxQjE1MiB8fCB4ID09PSAweDFCMTU1IHx8IHggPj0gMHgxQjE2NCAmJiB4IDw9IDB4MUIxNjcgfHwgeCA+PSAweDFCMTcwICYmIHggPD0gMHgxQjJGQiB8fCB4ID09PSAweDFGMDA0IHx8IHggPT09IDB4MUYwQ0YgfHwgeCA9PT0gMHgxRjE4RSB8fCB4ID49IDB4MUYxOTEgJiYgeCA8PSAweDFGMTlBIHx8IHggPj0gMHgxRjIwMCAmJiB4IDw9IDB4MUYyMDIgfHwgeCA+PSAweDFGMjEwICYmIHggPD0gMHgxRjIzQiB8fCB4ID49IDB4MUYyNDAgJiYgeCA8PSAweDFGMjQ4IHx8IHggPT09IDB4MUYyNTAgfHwgeCA9PT0gMHgxRjI1MSB8fCB4ID49IDB4MUYyNjAgJiYgeCA8PSAweDFGMjY1IHx8IHggPj0gMHgxRjMwMCAmJiB4IDw9IDB4MUYzMjAgfHwgeCA+PSAweDFGMzJEICYmIHggPD0gMHgxRjMzNSB8fCB4ID49IDB4MUYzMzcgJiYgeCA8PSAweDFGMzdDIHx8IHggPj0gMHgxRjM3RSAmJiB4IDw9IDB4MUYzOTMgfHwgeCA+PSAweDFGM0EwICYmIHggPD0gMHgxRjNDQSB8fCB4ID49IDB4MUYzQ0YgJiYgeCA8PSAweDFGM0QzIHx8IHggPj0gMHgxRjNFMCAmJiB4IDw9IDB4MUYzRjAgfHwgeCA9PT0gMHgxRjNGNCB8fCB4ID49IDB4MUYzRjggJiYgeCA8PSAweDFGNDNFIHx8IHggPT09IDB4MUY0NDAgfHwgeCA+PSAweDFGNDQyICYmIHggPD0gMHgxRjRGQyB8fCB4ID49IDB4MUY0RkYgJiYgeCA8PSAweDFGNTNEIHx8IHggPj0gMHgxRjU0QiAmJiB4IDw9IDB4MUY1NEUgfHwgeCA+PSAweDFGNTUwICYmIHggPD0gMHgxRjU2NyB8fCB4ID09PSAweDFGNTdBIHx8IHggPT09IDB4MUY1OTUgfHwgeCA9PT0gMHgxRjU5NiB8fCB4ID09PSAweDFGNUE0IHx8IHggPj0gMHgxRjVGQiAmJiB4IDw9IDB4MUY2NEYgfHwgeCA+PSAweDFGNjgwICYmIHggPD0gMHgxRjZDNSB8fCB4ID09PSAweDFGNkNDIHx8IHggPj0gMHgxRjZEMCAmJiB4IDw9IDB4MUY2RDIgfHwgeCA+PSAweDFGNkQ1ICYmIHggPD0gMHgxRjZENyB8fCB4ID49IDB4MUY2REMgJiYgeCA8PSAweDFGNkRGIHx8IHggPT09IDB4MUY2RUIgfHwgeCA9PT0gMHgxRjZFQyB8fCB4ID49IDB4MUY2RjQgJiYgeCA8PSAweDFGNkZDIHx8IHggPj0gMHgxRjdFMCAmJiB4IDw9IDB4MUY3RUIgfHwgeCA9PT0gMHgxRjdGMCB8fCB4ID49IDB4MUY5MEMgJiYgeCA8PSAweDFGOTNBIHx8IHggPj0gMHgxRjkzQyAmJiB4IDw9IDB4MUY5NDUgfHwgeCA+PSAweDFGOTQ3ICYmIHggPD0gMHgxRjlGRiB8fCB4ID49IDB4MUZBNzAgJiYgeCA8PSAweDFGQTdDIHx8IHggPj0gMHgxRkE4MCAmJiB4IDw9IDB4MUZBODggfHwgeCA+PSAweDFGQTkwICYmIHggPD0gMHgxRkFCRCB8fCB4ID49IDB4MUZBQkYgJiYgeCA8PSAweDFGQUM1IHx8IHggPj0gMHgxRkFDRSAmJiB4IDw9IDB4MUZBREIgfHwgeCA+PSAweDFGQUUwICYmIHggPD0gMHgxRkFFOCB8fCB4ID49IDB4MUZBRjAgJiYgeCA8PSAweDFGQUY4IHx8IHggPj0gMHgyMDAwMCAmJiB4IDw9IDB4MkZGRkQgfHwgeCA+PSAweDMwMDAwICYmIHggPD0gMHgzRkZGRDtcbn07XG4vKiBFWFBPUlQgKi9cbmV4cG9ydCB7IGlzQW1iaWd1b3VzLCBpc0Z1bGxXaWR0aCwgaXNXaWRlIH07XG4iLCAiLyogSU1QT1JUICovXG5pbXBvcnQgeyBpc0FtYmlndW91cywgaXNGdWxsV2lkdGgsIGlzV2lkZSB9IGZyb20gJy4vdXRpbHMuanMnO1xuLyogSEVMUEVSUyAqL1xuY29uc3QgQU5TSV9SRSA9IC9bXFx1MDAxYlxcdTAwOWJdW1soKSM7P10qKD86WzAtOV17MSw0fSg/OjtbMC05XXswLDR9KSopP1swLTlBLU9SWmNmLW5xcnk9PjxdL3k7XG5jb25zdCBDT05UUk9MX1JFID0gL1tcXHgwMC1cXHgwOFxceDBBLVxceDFGXFx4N0YtXFx4OUZdezEsMTAwMH0veTtcbmNvbnN0IFRBQl9SRSA9IC9cXHR7MSwxMDAwfS95O1xuY29uc3QgRU1PSklfUkUgPSAvW1xcdXsxRjFFNn0tXFx1ezFGMUZGfV17Mn18XFx1ezFGM0Y0fVtcXHV7RTAwNjF9LVxcdXtFMDA3QX1dezJ9W1xcdXtFMDAzMH0tXFx1e0UwMDM5fVxcdXtFMDA2MX0tXFx1e0UwMDdBfV17MSwzfVxcdXtFMDA3Rn18KD86XFxwe0Vtb2ppfVxcdUZFMEZcXHUyMEUzP3xcXHB7RW1vamlfTW9kaWZpZXJfQmFzZX1cXHB7RW1vamlfTW9kaWZpZXJ9P3xcXHB7RW1vamlfUHJlc2VudGF0aW9ufSkoPzpcXHUyMDBEKD86XFxwe0Vtb2ppX01vZGlmaWVyX0Jhc2V9XFxwe0Vtb2ppX01vZGlmaWVyfT98XFxwe0Vtb2ppX1ByZXNlbnRhdGlvbn18XFxwe0Vtb2ppfVxcdUZFMEZcXHUyMEUzPykpKi95dTtcbmNvbnN0IExBVElOX1JFID0gLyg/OltcXHgyMC1cXHg3RVxceEEwLVxceEZGXSg/IVxcdUZFMEYpKXsxLDEwMDB9L3k7XG5jb25zdCBNT0RJRklFUl9SRSA9IC9cXHB7TX0rL2d1O1xuY29uc3QgTk9fVFJVTkNBVElPTiA9IHsgbGltaXQ6IEluZmluaXR5LCBlbGxpcHNpczogJycgfTtcbi8qIE1BSU4gKi9cbi8vVE9ETzogT3B0aW1pemUgbWF0Y2hpbmcgbm9uLWxhdGluIGxldHRlcnNcbmNvbnN0IGdldFN0cmluZ1RydW5jYXRlZFdpZHRoID0gKGlucHV0LCB0cnVuY2F0aW9uT3B0aW9ucyA9IHt9LCB3aWR0aE9wdGlvbnMgPSB7fSkgPT4ge1xuICAgIC8qIENPTlNUQU5UUyAqL1xuICAgIGNvbnN0IExJTUlUID0gdHJ1bmNhdGlvbk9wdGlvbnMubGltaXQgPz8gSW5maW5pdHk7XG4gICAgY29uc3QgRUxMSVBTSVMgPSB0cnVuY2F0aW9uT3B0aW9ucy5lbGxpcHNpcyA/PyAnJztcbiAgICBjb25zdCBFTExJUFNJU19XSURUSCA9IHRydW5jYXRpb25PcHRpb25zPy5lbGxpcHNpc1dpZHRoID8/IChFTExJUFNJUyA/IGdldFN0cmluZ1RydW5jYXRlZFdpZHRoKEVMTElQU0lTLCBOT19UUlVOQ0FUSU9OLCB3aWR0aE9wdGlvbnMpLndpZHRoIDogMCk7XG4gICAgY29uc3QgQU5TSV9XSURUSCA9IHdpZHRoT3B0aW9ucy5hbnNpV2lkdGggPz8gMDtcbiAgICBjb25zdCBDT05UUk9MX1dJRFRIID0gd2lkdGhPcHRpb25zLmNvbnRyb2xXaWR0aCA/PyAwO1xuICAgIGNvbnN0IFRBQl9XSURUSCA9IHdpZHRoT3B0aW9ucy50YWJXaWR0aCA/PyA4O1xuICAgIGNvbnN0IEFNQklHVU9VU19XSURUSCA9IHdpZHRoT3B0aW9ucy5hbWJpZ3VvdXNXaWR0aCA/PyAxO1xuICAgIGNvbnN0IEVNT0pJX1dJRFRIID0gd2lkdGhPcHRpb25zLmVtb2ppV2lkdGggPz8gMjtcbiAgICBjb25zdCBGVUxMX1dJRFRIX1dJRFRIID0gd2lkdGhPcHRpb25zLmZ1bGxXaWR0aFdpZHRoID8/IDI7XG4gICAgY29uc3QgUkVHVUxBUl9XSURUSCA9IHdpZHRoT3B0aW9ucy5yZWd1bGFyV2lkdGggPz8gMTtcbiAgICBjb25zdCBXSURFX1dJRFRIID0gd2lkdGhPcHRpb25zLndpZGVXaWR0aCA/PyAyO1xuICAgIC8qIFNUQVRFICovXG4gICAgbGV0IGluZGV4UHJldiA9IDA7XG4gICAgbGV0IGluZGV4ID0gMDtcbiAgICBsZXQgbGVuZ3RoID0gaW5wdXQubGVuZ3RoO1xuICAgIGxldCBsZW5ndGhFeHRyYSA9IDA7XG4gICAgbGV0IHRydW5jYXRpb25FbmFibGVkID0gZmFsc2U7XG4gICAgbGV0IHRydW5jYXRpb25JbmRleCA9IGxlbmd0aDtcbiAgICBsZXQgdHJ1bmNhdGlvbkxpbWl0ID0gTWF0aC5tYXgoMCwgTElNSVQgLSBFTExJUFNJU19XSURUSCk7XG4gICAgbGV0IHVubWF0Y2hlZFN0YXJ0ID0gMDtcbiAgICBsZXQgdW5tYXRjaGVkRW5kID0gMDtcbiAgICBsZXQgd2lkdGggPSAwO1xuICAgIGxldCB3aWR0aEV4dHJhID0gMDtcbiAgICAvKiBQQVJTRSBMT09QICovXG4gICAgb3V0ZXI6IHdoaWxlICh0cnVlKSB7XG4gICAgICAgIC8qIFVOTUFUQ0hFRCAqL1xuICAgICAgICBpZiAoKHVubWF0Y2hlZEVuZCA+IHVubWF0Y2hlZFN0YXJ0KSB8fCAoaW5kZXggPj0gbGVuZ3RoICYmIGluZGV4ID4gaW5kZXhQcmV2KSkge1xuICAgICAgICAgICAgY29uc3QgdW5tYXRjaGVkID0gaW5wdXQuc2xpY2UodW5tYXRjaGVkU3RhcnQsIHVubWF0Y2hlZEVuZCkgfHwgaW5wdXQuc2xpY2UoaW5kZXhQcmV2LCBpbmRleCk7XG4gICAgICAgICAgICBsZW5ndGhFeHRyYSA9IDA7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNoYXIgb2YgdW5tYXRjaGVkLnJlcGxhY2VBbGwoTU9ESUZJRVJfUkUsICcnKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvZGVQb2ludCA9IGNoYXIuY29kZVBvaW50QXQoMCkgfHwgMDtcbiAgICAgICAgICAgICAgICBpZiAoaXNGdWxsV2lkdGgoY29kZVBvaW50KSkge1xuICAgICAgICAgICAgICAgICAgICB3aWR0aEV4dHJhID0gRlVMTF9XSURUSF9XSURUSDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoaXNXaWRlKGNvZGVQb2ludCkpIHtcbiAgICAgICAgICAgICAgICAgICAgd2lkdGhFeHRyYSA9IFdJREVfV0lEVEg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKEFNQklHVU9VU19XSURUSCAhPT0gUkVHVUxBUl9XSURUSCAmJiBpc0FtYmlndW91cyhjb2RlUG9pbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHdpZHRoRXh0cmEgPSBBTUJJR1VPVVNfV0lEVEg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB3aWR0aEV4dHJhID0gUkVHVUxBUl9XSURUSDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCh3aWR0aCArIHdpZHRoRXh0cmEpID4gdHJ1bmNhdGlvbkxpbWl0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRydW5jYXRpb25JbmRleCA9IE1hdGgubWluKHRydW5jYXRpb25JbmRleCwgTWF0aC5tYXgodW5tYXRjaGVkU3RhcnQsIGluZGV4UHJldikgKyBsZW5ndGhFeHRyYSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICgod2lkdGggKyB3aWR0aEV4dHJhKSA+IExJTUlUKSB7XG4gICAgICAgICAgICAgICAgICAgIHRydW5jYXRpb25FbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWsgb3V0ZXI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxlbmd0aEV4dHJhICs9IGNoYXIubGVuZ3RoO1xuICAgICAgICAgICAgICAgIHdpZHRoICs9IHdpZHRoRXh0cmE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB1bm1hdGNoZWRTdGFydCA9IHVubWF0Y2hlZEVuZCA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgLyogRVhJVElORyAqL1xuICAgICAgICBpZiAoaW5kZXggPj0gbGVuZ3RoKVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIC8qIExBVElOICovXG4gICAgICAgIExBVElOX1JFLmxhc3RJbmRleCA9IGluZGV4O1xuICAgICAgICBpZiAoTEFUSU5fUkUudGVzdChpbnB1dCkpIHtcbiAgICAgICAgICAgIGxlbmd0aEV4dHJhID0gTEFUSU5fUkUubGFzdEluZGV4IC0gaW5kZXg7XG4gICAgICAgICAgICB3aWR0aEV4dHJhID0gbGVuZ3RoRXh0cmEgKiBSRUdVTEFSX1dJRFRIO1xuICAgICAgICAgICAgaWYgKCh3aWR0aCArIHdpZHRoRXh0cmEpID4gdHJ1bmNhdGlvbkxpbWl0KSB7XG4gICAgICAgICAgICAgICAgdHJ1bmNhdGlvbkluZGV4ID0gTWF0aC5taW4odHJ1bmNhdGlvbkluZGV4LCBpbmRleCArIE1hdGguZmxvb3IoKHRydW5jYXRpb25MaW1pdCAtIHdpZHRoKSAvIFJFR1VMQVJfV0lEVEgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgod2lkdGggKyB3aWR0aEV4dHJhKSA+IExJTUlUKSB7XG4gICAgICAgICAgICAgICAgdHJ1bmNhdGlvbkVuYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd2lkdGggKz0gd2lkdGhFeHRyYTtcbiAgICAgICAgICAgIHVubWF0Y2hlZFN0YXJ0ID0gaW5kZXhQcmV2O1xuICAgICAgICAgICAgdW5tYXRjaGVkRW5kID0gaW5kZXg7XG4gICAgICAgICAgICBpbmRleCA9IGluZGV4UHJldiA9IExBVElOX1JFLmxhc3RJbmRleDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIC8qIEFOU0kgKi9cbiAgICAgICAgQU5TSV9SRS5sYXN0SW5kZXggPSBpbmRleDtcbiAgICAgICAgaWYgKEFOU0lfUkUudGVzdChpbnB1dCkpIHtcbiAgICAgICAgICAgIGlmICgod2lkdGggKyBBTlNJX1dJRFRIKSA+IHRydW5jYXRpb25MaW1pdCkge1xuICAgICAgICAgICAgICAgIHRydW5jYXRpb25JbmRleCA9IE1hdGgubWluKHRydW5jYXRpb25JbmRleCwgaW5kZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCh3aWR0aCArIEFOU0lfV0lEVEgpID4gTElNSVQpIHtcbiAgICAgICAgICAgICAgICB0cnVuY2F0aW9uRW5hYmxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB3aWR0aCArPSBBTlNJX1dJRFRIO1xuICAgICAgICAgICAgdW5tYXRjaGVkU3RhcnQgPSBpbmRleFByZXY7XG4gICAgICAgICAgICB1bm1hdGNoZWRFbmQgPSBpbmRleDtcbiAgICAgICAgICAgIGluZGV4ID0gaW5kZXhQcmV2ID0gQU5TSV9SRS5sYXN0SW5kZXg7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICAvKiBDT05UUk9MICovXG4gICAgICAgIENPTlRST0xfUkUubGFzdEluZGV4ID0gaW5kZXg7XG4gICAgICAgIGlmIChDT05UUk9MX1JFLnRlc3QoaW5wdXQpKSB7XG4gICAgICAgICAgICBsZW5ndGhFeHRyYSA9IENPTlRST0xfUkUubGFzdEluZGV4IC0gaW5kZXg7XG4gICAgICAgICAgICB3aWR0aEV4dHJhID0gbGVuZ3RoRXh0cmEgKiBDT05UUk9MX1dJRFRIO1xuICAgICAgICAgICAgaWYgKCh3aWR0aCArIHdpZHRoRXh0cmEpID4gdHJ1bmNhdGlvbkxpbWl0KSB7XG4gICAgICAgICAgICAgICAgdHJ1bmNhdGlvbkluZGV4ID0gTWF0aC5taW4odHJ1bmNhdGlvbkluZGV4LCBpbmRleCArIE1hdGguZmxvb3IoKHRydW5jYXRpb25MaW1pdCAtIHdpZHRoKSAvIENPTlRST0xfV0lEVEgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgod2lkdGggKyB3aWR0aEV4dHJhKSA+IExJTUlUKSB7XG4gICAgICAgICAgICAgICAgdHJ1bmNhdGlvbkVuYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd2lkdGggKz0gd2lkdGhFeHRyYTtcbiAgICAgICAgICAgIHVubWF0Y2hlZFN0YXJ0ID0gaW5kZXhQcmV2O1xuICAgICAgICAgICAgdW5tYXRjaGVkRW5kID0gaW5kZXg7XG4gICAgICAgICAgICBpbmRleCA9IGluZGV4UHJldiA9IENPTlRST0xfUkUubGFzdEluZGV4O1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgLyogVEFCICovXG4gICAgICAgIFRBQl9SRS5sYXN0SW5kZXggPSBpbmRleDtcbiAgICAgICAgaWYgKFRBQl9SRS50ZXN0KGlucHV0KSkge1xuICAgICAgICAgICAgbGVuZ3RoRXh0cmEgPSBUQUJfUkUubGFzdEluZGV4IC0gaW5kZXg7XG4gICAgICAgICAgICB3aWR0aEV4dHJhID0gbGVuZ3RoRXh0cmEgKiBUQUJfV0lEVEg7XG4gICAgICAgICAgICBpZiAoKHdpZHRoICsgd2lkdGhFeHRyYSkgPiB0cnVuY2F0aW9uTGltaXQpIHtcbiAgICAgICAgICAgICAgICB0cnVuY2F0aW9uSW5kZXggPSBNYXRoLm1pbih0cnVuY2F0aW9uSW5kZXgsIGluZGV4ICsgTWF0aC5mbG9vcigodHJ1bmNhdGlvbkxpbWl0IC0gd2lkdGgpIC8gVEFCX1dJRFRIKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoKHdpZHRoICsgd2lkdGhFeHRyYSkgPiBMSU1JVCkge1xuICAgICAgICAgICAgICAgIHRydW5jYXRpb25FbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHdpZHRoICs9IHdpZHRoRXh0cmE7XG4gICAgICAgICAgICB1bm1hdGNoZWRTdGFydCA9IGluZGV4UHJldjtcbiAgICAgICAgICAgIHVubWF0Y2hlZEVuZCA9IGluZGV4O1xuICAgICAgICAgICAgaW5kZXggPSBpbmRleFByZXYgPSBUQUJfUkUubGFzdEluZGV4O1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgLyogRU1PSkkgKi9cbiAgICAgICAgRU1PSklfUkUubGFzdEluZGV4ID0gaW5kZXg7XG4gICAgICAgIGlmIChFTU9KSV9SRS50ZXN0KGlucHV0KSkge1xuICAgICAgICAgICAgaWYgKCh3aWR0aCArIEVNT0pJX1dJRFRIKSA+IHRydW5jYXRpb25MaW1pdCkge1xuICAgICAgICAgICAgICAgIHRydW5jYXRpb25JbmRleCA9IE1hdGgubWluKHRydW5jYXRpb25JbmRleCwgaW5kZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCh3aWR0aCArIEVNT0pJX1dJRFRIKSA+IExJTUlUKSB7XG4gICAgICAgICAgICAgICAgdHJ1bmNhdGlvbkVuYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd2lkdGggKz0gRU1PSklfV0lEVEg7XG4gICAgICAgICAgICB1bm1hdGNoZWRTdGFydCA9IGluZGV4UHJldjtcbiAgICAgICAgICAgIHVubWF0Y2hlZEVuZCA9IGluZGV4O1xuICAgICAgICAgICAgaW5kZXggPSBpbmRleFByZXYgPSBFTU9KSV9SRS5sYXN0SW5kZXg7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICAvKiBVTk1BVENIRUQgSU5ERVggKi9cbiAgICAgICAgaW5kZXggKz0gMTtcbiAgICB9XG4gICAgLyogUkVUVVJOICovXG4gICAgcmV0dXJuIHtcbiAgICAgICAgd2lkdGg6IHRydW5jYXRpb25FbmFibGVkID8gdHJ1bmNhdGlvbkxpbWl0IDogd2lkdGgsXG4gICAgICAgIGluZGV4OiB0cnVuY2F0aW9uRW5hYmxlZCA/IHRydW5jYXRpb25JbmRleCA6IGxlbmd0aCxcbiAgICAgICAgdHJ1bmNhdGVkOiB0cnVuY2F0aW9uRW5hYmxlZCxcbiAgICAgICAgZWxsaXBzZWQ6IHRydW5jYXRpb25FbmFibGVkICYmIExJTUlUID49IEVMTElQU0lTX1dJRFRIXG4gICAgfTtcbn07XG4vKiBFWFBPUlQgKi9cbmV4cG9ydCBkZWZhdWx0IGdldFN0cmluZ1RydW5jYXRlZFdpZHRoO1xuIiwgIi8qIElNUE9SVCAqL1xuaW1wb3J0IGZhc3RTdHJpbmdUcnVuY2F0ZWRXaWR0aCBmcm9tICdmYXN0LXN0cmluZy10cnVuY2F0ZWQtd2lkdGgnO1xuLyogSEVMUEVSUyAqL1xuY29uc3QgTk9fVFJVTkNBVElPTiA9IHtcbiAgICBsaW1pdDogSW5maW5pdHksXG4gICAgZWxsaXBzaXM6ICcnLFxuICAgIGVsbGlwc2lzV2lkdGg6IDAsXG59O1xuLyogTUFJTiAqL1xuY29uc3QgZmFzdFN0cmluZ1dpZHRoID0gKGlucHV0LCBvcHRpb25zID0ge30pID0+IHtcbiAgICByZXR1cm4gZmFzdFN0cmluZ1RydW5jYXRlZFdpZHRoKGlucHV0LCBOT19UUlVOQ0FUSU9OLCBvcHRpb25zKS53aWR0aDtcbn07XG4vKiBFWFBPUlQgKi9cbmV4cG9ydCBkZWZhdWx0IGZhc3RTdHJpbmdXaWR0aDtcbiIsICJpbXBvcnQgc3RyaW5nV2lkdGggZnJvbSAnZmFzdC1zdHJpbmctd2lkdGgnO1xuY29uc3QgRVNDID0gJ1xceDFCJztcbmNvbnN0IENTSSA9ICdcXHg5Qic7XG5jb25zdCBFTkRfQ09ERSA9IDM5O1xuY29uc3QgQU5TSV9FU0NBUEVfQkVMTCA9ICdcXHUwMDA3JztcbmNvbnN0IEFOU0lfQ1NJID0gJ1snO1xuY29uc3QgQU5TSV9PU0MgPSAnXSc7XG5jb25zdCBBTlNJX1NHUl9URVJNSU5BVE9SID0gJ20nO1xuY29uc3QgQU5TSV9FU0NBUEVfTElOSyA9IGAke0FOU0lfT1NDfTg7O2A7XG5jb25zdCBHUk9VUF9SRUdFWCA9IG5ldyBSZWdFeHAoYCg/OlxcXFwke0FOU0lfQ1NJfSg/PGNvZGU+XFxcXGQrKW18XFxcXCR7QU5TSV9FU0NBUEVfTElOS30oPzx1cmk+LiopJHtBTlNJX0VTQ0FQRV9CRUxMfSlgLCAneScpO1xuY29uc3QgZ2V0Q2xvc2luZ0NvZGUgPSAob3BlbmluZ0NvZGUpID0+IHtcbiAgICBpZiAob3BlbmluZ0NvZGUgPj0gMzAgJiYgb3BlbmluZ0NvZGUgPD0gMzcpXG4gICAgICAgIHJldHVybiAzOTtcbiAgICBpZiAob3BlbmluZ0NvZGUgPj0gOTAgJiYgb3BlbmluZ0NvZGUgPD0gOTcpXG4gICAgICAgIHJldHVybiAzOTtcbiAgICBpZiAob3BlbmluZ0NvZGUgPj0gNDAgJiYgb3BlbmluZ0NvZGUgPD0gNDcpXG4gICAgICAgIHJldHVybiA0OTtcbiAgICBpZiAob3BlbmluZ0NvZGUgPj0gMTAwICYmIG9wZW5pbmdDb2RlIDw9IDEwNylcbiAgICAgICAgcmV0dXJuIDQ5O1xuICAgIGlmIChvcGVuaW5nQ29kZSA9PT0gMSB8fCBvcGVuaW5nQ29kZSA9PT0gMilcbiAgICAgICAgcmV0dXJuIDIyO1xuICAgIGlmIChvcGVuaW5nQ29kZSA9PT0gMylcbiAgICAgICAgcmV0dXJuIDIzO1xuICAgIGlmIChvcGVuaW5nQ29kZSA9PT0gNClcbiAgICAgICAgcmV0dXJuIDI0O1xuICAgIGlmIChvcGVuaW5nQ29kZSA9PT0gNylcbiAgICAgICAgcmV0dXJuIDI3O1xuICAgIGlmIChvcGVuaW5nQ29kZSA9PT0gOClcbiAgICAgICAgcmV0dXJuIDI4O1xuICAgIGlmIChvcGVuaW5nQ29kZSA9PT0gOSlcbiAgICAgICAgcmV0dXJuIDI5O1xuICAgIGlmIChvcGVuaW5nQ29kZSA9PT0gMClcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG5jb25zdCB3cmFwQW5zaUNvZGUgPSAoY29kZSkgPT4gYCR7RVNDfSR7QU5TSV9DU0l9JHtjb2RlfSR7QU5TSV9TR1JfVEVSTUlOQVRPUn1gO1xuY29uc3Qgd3JhcEFuc2lIeXBlcmxpbmsgPSAodXJsKSA9PiBgJHtFU0N9JHtBTlNJX0VTQ0FQRV9MSU5LfSR7dXJsfSR7QU5TSV9FU0NBUEVfQkVMTH1gO1xuY29uc3Qgd29yZExlbmd0aHMgPSAod29yZHMpID0+IHdvcmRzLm1hcCgoY2hhcmFjdGVyKSA9PiBzdHJpbmdXaWR0aChjaGFyYWN0ZXIpKTtcbmNvbnN0IHdyYXBXb3JkID0gKHJvd3MsIHdvcmQsIGNvbHVtbnMpID0+IHtcbiAgICBjb25zdCBjaGFyYWN0ZXJzID0gd29yZFtTeW1ib2wuaXRlcmF0b3JdKCk7XG4gICAgbGV0IGlzSW5zaWRlRXNjYXBlID0gZmFsc2U7XG4gICAgbGV0IGlzSW5zaWRlTGlua0VzY2FwZSA9IGZhbHNlO1xuICAgIGxldCBsYXN0Um93ID0gcm93cy5hdCgtMSk7XG4gICAgbGV0IHZpc2libGUgPSBsYXN0Um93ID09PSB1bmRlZmluZWQgPyAwIDogc3RyaW5nV2lkdGgobGFzdFJvdyk7XG4gICAgbGV0IGN1cnJlbnRDaGFyYWN0ZXIgPSBjaGFyYWN0ZXJzLm5leHQoKTtcbiAgICBsZXQgbmV4dENoYXJhY3RlciA9IGNoYXJhY3RlcnMubmV4dCgpO1xuICAgIGxldCByYXdDaGFyYWN0ZXJJbmRleCA9IDA7XG4gICAgd2hpbGUgKCFjdXJyZW50Q2hhcmFjdGVyLmRvbmUpIHtcbiAgICAgICAgY29uc3QgY2hhcmFjdGVyID0gY3VycmVudENoYXJhY3Rlci52YWx1ZTtcbiAgICAgICAgY29uc3QgY2hhcmFjdGVyTGVuZ3RoID0gc3RyaW5nV2lkdGgoY2hhcmFjdGVyKTtcbiAgICAgICAgaWYgKHZpc2libGUgKyBjaGFyYWN0ZXJMZW5ndGggPD0gY29sdW1ucykge1xuICAgICAgICAgICAgcm93c1tyb3dzLmxlbmd0aCAtIDFdICs9IGNoYXJhY3RlcjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJvd3MucHVzaChjaGFyYWN0ZXIpO1xuICAgICAgICAgICAgdmlzaWJsZSA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoYXJhY3RlciA9PT0gRVNDIHx8IGNoYXJhY3RlciA9PT0gQ1NJKSB7XG4gICAgICAgICAgICBpc0luc2lkZUVzY2FwZSA9IHRydWU7XG4gICAgICAgICAgICBpc0luc2lkZUxpbmtFc2NhcGUgPSB3b3JkLnN0YXJ0c1dpdGgoQU5TSV9FU0NBUEVfTElOSywgcmF3Q2hhcmFjdGVySW5kZXggKyAxKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNJbnNpZGVFc2NhcGUpIHtcbiAgICAgICAgICAgIGlmIChpc0luc2lkZUxpbmtFc2NhcGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2hhcmFjdGVyID09PSBBTlNJX0VTQ0FQRV9CRUxMKSB7XG4gICAgICAgICAgICAgICAgICAgIGlzSW5zaWRlRXNjYXBlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGlzSW5zaWRlTGlua0VzY2FwZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoYXJhY3RlciA9PT0gQU5TSV9TR1JfVEVSTUlOQVRPUikge1xuICAgICAgICAgICAgICAgIGlzSW5zaWRlRXNjYXBlID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2aXNpYmxlICs9IGNoYXJhY3Rlckxlbmd0aDtcbiAgICAgICAgICAgIGlmICh2aXNpYmxlID09PSBjb2x1bW5zICYmICFuZXh0Q2hhcmFjdGVyLmRvbmUpIHtcbiAgICAgICAgICAgICAgICByb3dzLnB1c2goJycpO1xuICAgICAgICAgICAgICAgIHZpc2libGUgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGN1cnJlbnRDaGFyYWN0ZXIgPSBuZXh0Q2hhcmFjdGVyO1xuICAgICAgICBuZXh0Q2hhcmFjdGVyID0gY2hhcmFjdGVycy5uZXh0KCk7XG4gICAgICAgIHJhd0NoYXJhY3RlckluZGV4ICs9IGNoYXJhY3Rlci5sZW5ndGg7XG4gICAgfVxuICAgIGxhc3RSb3cgPSByb3dzLmF0KC0xKTtcbiAgICBpZiAoIXZpc2libGUgJiZcbiAgICAgICAgbGFzdFJvdyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgIGxhc3RSb3cubGVuZ3RoID4gMCAmJlxuICAgICAgICByb3dzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgcm93c1tyb3dzLmxlbmd0aCAtIDJdICs9IHJvd3MucG9wKCk7XG4gICAgfVxufTtcbmNvbnN0IHN0cmluZ1Zpc2libGVUcmltU3BhY2VzUmlnaHQgPSAoc3RyaW5nKSA9PiB7XG4gICAgY29uc3Qgd29yZHMgPSBzdHJpbmcuc3BsaXQoJyAnKTtcbiAgICBsZXQgbGFzdCA9IHdvcmRzLmxlbmd0aDtcbiAgICB3aGlsZSAobGFzdCA+IDApIHtcbiAgICAgICAgaWYgKHN0cmluZ1dpZHRoKHdvcmRzW2xhc3QgLSAxXSkgPiAwKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBsYXN0LS07XG4gICAgfVxuICAgIGlmIChsYXN0ID09PSB3b3Jkcy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHN0cmluZztcbiAgICB9XG4gICAgcmV0dXJuIHdvcmRzLnNsaWNlKDAsIGxhc3QpLmpvaW4oJyAnKSArIHdvcmRzLnNsaWNlKGxhc3QpLmpvaW4oJycpO1xufTtcbmNvbnN0IGV4ZWMgPSAoc3RyaW5nLCBjb2x1bW5zLCBvcHRpb25zID0ge30pID0+IHtcbiAgICBpZiAob3B0aW9ucy50cmltICE9PSBmYWxzZSAmJiBzdHJpbmcudHJpbSgpID09PSAnJykge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIGxldCByZXR1cm5WYWx1ZSA9ICcnO1xuICAgIGxldCBlc2NhcGVDb2RlO1xuICAgIGxldCBlc2NhcGVVcmw7XG4gICAgY29uc3Qgd29yZHMgPSBzdHJpbmcuc3BsaXQoJyAnKTtcbiAgICBjb25zdCBsZW5ndGhzID0gd29yZExlbmd0aHMod29yZHMpO1xuICAgIGxldCByb3dzID0gWycnXTtcbiAgICBmb3IgKGNvbnN0IFtpbmRleCwgd29yZF0gb2Ygd29yZHMuZW50cmllcygpKSB7XG4gICAgICAgIGlmIChvcHRpb25zLnRyaW0gIT09IGZhbHNlKSB7XG4gICAgICAgICAgICByb3dzW3Jvd3MubGVuZ3RoIC0gMV0gPSAocm93cy5hdCgtMSkgPz8gJycpLnRyaW1TdGFydCgpO1xuICAgICAgICB9XG4gICAgICAgIGxldCByb3dMZW5ndGggPSBzdHJpbmdXaWR0aChyb3dzLmF0KC0xKSA/PyAnJyk7XG4gICAgICAgIGlmIChpbmRleCAhPT0gMCkge1xuICAgICAgICAgICAgaWYgKHJvd0xlbmd0aCA+PSBjb2x1bW5zICYmXG4gICAgICAgICAgICAgICAgKG9wdGlvbnMud29yZFdyYXAgPT09IGZhbHNlIHx8IG9wdGlvbnMudHJpbSA9PT0gZmFsc2UpKSB7XG4gICAgICAgICAgICAgICAgcm93cy5wdXNoKCcnKTtcbiAgICAgICAgICAgICAgICByb3dMZW5ndGggPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJvd0xlbmd0aCA+IDAgfHwgb3B0aW9ucy50cmltID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHJvd3Nbcm93cy5sZW5ndGggLSAxXSArPSAnICc7XG4gICAgICAgICAgICAgICAgcm93TGVuZ3RoKys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuaGFyZCAmJiBsZW5ndGhzW2luZGV4XSA+IGNvbHVtbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlbWFpbmluZ0NvbHVtbnMgPSBjb2x1bW5zIC0gcm93TGVuZ3RoO1xuICAgICAgICAgICAgY29uc3QgYnJlYWtzU3RhcnRpbmdUaGlzTGluZSA9IDEgKyBNYXRoLmZsb29yKChsZW5ndGhzW2luZGV4XSAtIHJlbWFpbmluZ0NvbHVtbnMgLSAxKSAvIGNvbHVtbnMpO1xuICAgICAgICAgICAgY29uc3QgYnJlYWtzU3RhcnRpbmdOZXh0TGluZSA9IE1hdGguZmxvb3IoKGxlbmd0aHNbaW5kZXhdIC0gMSkgLyBjb2x1bW5zKTtcbiAgICAgICAgICAgIGlmIChicmVha3NTdGFydGluZ05leHRMaW5lIDwgYnJlYWtzU3RhcnRpbmdUaGlzTGluZSkge1xuICAgICAgICAgICAgICAgIHJvd3MucHVzaCgnJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB3cmFwV29yZChyb3dzLCB3b3JkLCBjb2x1bW5zKTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyb3dMZW5ndGggKyBsZW5ndGhzW2luZGV4XSA+IGNvbHVtbnMgJiZcbiAgICAgICAgICAgIHJvd0xlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgIGxlbmd0aHNbaW5kZXhdID4gMCkge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMud29yZFdyYXAgPT09IGZhbHNlICYmIHJvd0xlbmd0aCA8IGNvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICB3cmFwV29yZChyb3dzLCB3b3JkLCBjb2x1bW5zKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJvd3MucHVzaCgnJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJvd0xlbmd0aCArIGxlbmd0aHNbaW5kZXhdID4gY29sdW1ucyAmJiBvcHRpb25zLndvcmRXcmFwID09PSBmYWxzZSkge1xuICAgICAgICAgICAgd3JhcFdvcmQocm93cywgd29yZCwgY29sdW1ucyk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICByb3dzW3Jvd3MubGVuZ3RoIC0gMV0gKz0gd29yZDtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMudHJpbSAhPT0gZmFsc2UpIHtcbiAgICAgICAgcm93cyA9IHJvd3MubWFwKChyb3cpID0+IHN0cmluZ1Zpc2libGVUcmltU3BhY2VzUmlnaHQocm93KSk7XG4gICAgfVxuICAgIGNvbnN0IHByZVN0cmluZyA9IHJvd3Muam9pbignXFxuJyk7XG4gICAgY29uc3QgcHJlID0gcHJlU3RyaW5nW1N5bWJvbC5pdGVyYXRvcl0oKTtcbiAgICBsZXQgY3VycmVudFByZSA9IHByZS5uZXh0KCk7XG4gICAgbGV0IG5leHRQcmUgPSBwcmUubmV4dCgpO1xuICAgIC8vIFdlIG5lZWQgdG8ga2VlcCBhIHNlcGFyYXRlIGluZGV4IGFzIGBTdHJpbmcjc2xpY2UoKWAgd29ya3Mgb24gVW5pY29kZSBjb2RlIHVuaXRzLCB3aGlsZSBgcHJlYCBpcyBhbiBhcnJheSBvZiBjb2RlcG9pbnRzLlxuICAgIGxldCBwcmVTdHJpbmdJbmRleCA9IDA7XG4gICAgd2hpbGUgKCFjdXJyZW50UHJlLmRvbmUpIHtcbiAgICAgICAgY29uc3QgY2hhcmFjdGVyID0gY3VycmVudFByZS52YWx1ZTtcbiAgICAgICAgY29uc3QgbmV4dENoYXJhY3RlciA9IG5leHRQcmUudmFsdWU7XG4gICAgICAgIHJldHVyblZhbHVlICs9IGNoYXJhY3RlcjtcbiAgICAgICAgaWYgKGNoYXJhY3RlciA9PT0gRVNDIHx8IGNoYXJhY3RlciA9PT0gQ1NJKSB7XG4gICAgICAgICAgICBHUk9VUF9SRUdFWC5sYXN0SW5kZXggPSBwcmVTdHJpbmdJbmRleCArIDE7XG4gICAgICAgICAgICBjb25zdCBncm91cHNSZXN1bHQgPSBHUk9VUF9SRUdFWC5leGVjKHByZVN0cmluZyk7XG4gICAgICAgICAgICBjb25zdCBncm91cHMgPSBncm91cHNSZXN1bHQ/Lmdyb3VwcztcbiAgICAgICAgICAgIGlmIChncm91cHM/LmNvZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvZGUgPSBOdW1iZXIucGFyc2VGbG9hdChncm91cHMuY29kZSk7XG4gICAgICAgICAgICAgICAgZXNjYXBlQ29kZSA9IGNvZGUgPT09IEVORF9DT0RFID8gdW5kZWZpbmVkIDogY29kZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGdyb3Vwcz8udXJpICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBlc2NhcGVVcmwgPSBncm91cHMudXJpLmxlbmd0aCA9PT0gMCA/IHVuZGVmaW5lZCA6IGdyb3Vwcy51cmk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2xvc2luZ0NvZGUgPSBlc2NhcGVDb2RlID8gZ2V0Q2xvc2luZ0NvZGUoZXNjYXBlQ29kZSkgOiB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChuZXh0Q2hhcmFjdGVyID09PSAnXFxuJykge1xuICAgICAgICAgICAgaWYgKGVzY2FwZVVybCkge1xuICAgICAgICAgICAgICAgIHJldHVyblZhbHVlICs9IHdyYXBBbnNpSHlwZXJsaW5rKCcnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlc2NhcGVDb2RlICYmIGNsb3NpbmdDb2RlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUgKz0gd3JhcEFuc2lDb2RlKGNsb3NpbmdDb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjaGFyYWN0ZXIgPT09ICdcXG4nKSB7XG4gICAgICAgICAgICBpZiAoZXNjYXBlQ29kZSAmJiBjbG9zaW5nQ29kZSkge1xuICAgICAgICAgICAgICAgIHJldHVyblZhbHVlICs9IHdyYXBBbnNpQ29kZShlc2NhcGVDb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlc2NhcGVVcmwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSArPSB3cmFwQW5zaUh5cGVybGluayhlc2NhcGVVcmwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHByZVN0cmluZ0luZGV4ICs9IGNoYXJhY3Rlci5sZW5ndGg7XG4gICAgICAgIGN1cnJlbnRQcmUgPSBuZXh0UHJlO1xuICAgICAgICBuZXh0UHJlID0gcHJlLm5leHQoKTtcbiAgICB9XG4gICAgcmV0dXJuIHJldHVyblZhbHVlO1xufTtcbmV4cG9ydCBmdW5jdGlvbiB3cmFwQW5zaShzdHJpbmcsIGNvbHVtbnMsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gU3RyaW5nKHN0cmluZylcbiAgICAgICAgLm5vcm1hbGl6ZSgpXG4gICAgICAgIC5yZXBsYWNlQWxsKCdcXHJcXG4nLCAnXFxuJylcbiAgICAgICAgLnNwbGl0KCdcXG4nKVxuICAgICAgICAubWFwKChsaW5lKSA9PiBleGVjKGxpbmUsIGNvbHVtbnMsIG9wdGlvbnMpKVxuICAgICAgICAuam9pbignXFxuJyk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1tYWluLmpzLm1hcCIsICJjb25zdCBhY3Rpb25zID0gWyd1cCcsICdkb3duJywgJ2xlZnQnLCAncmlnaHQnLCAnc3BhY2UnLCAnZW50ZXInLCAnY2FuY2VsJ10gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBBY3Rpb24gPSAodHlwZW9mIGFjdGlvbnMpW251bWJlcl07XG5cbi8qKiBHbG9iYWwgc2V0dGluZ3MgZm9yIENsYWNrIHByb2dyYW1zLCBzdG9yZWQgaW4gbWVtb3J5ICovXG5pbnRlcmZhY2UgSW50ZXJuYWxDbGFja1NldHRpbmdzIHtcblx0YWN0aW9uczogU2V0PEFjdGlvbj47XG5cdGFsaWFzZXM6IE1hcDxzdHJpbmcsIEFjdGlvbj47XG5cdG1lc3NhZ2VzOiB7XG5cdFx0Y2FuY2VsOiBzdHJpbmc7XG5cdFx0ZXJyb3I6IHN0cmluZztcblx0fTtcblx0d2l0aEd1aWRlOiBib29sZWFuO1xufVxuXG5leHBvcnQgY29uc3Qgc2V0dGluZ3M6IEludGVybmFsQ2xhY2tTZXR0aW5ncyA9IHtcblx0YWN0aW9uczogbmV3IFNldChhY3Rpb25zKSxcblx0YWxpYXNlczogbmV3IE1hcDxzdHJpbmcsIEFjdGlvbj4oW1xuXHRcdC8vIHZpbSBzdXBwb3J0XG5cdFx0WydrJywgJ3VwJ10sXG5cdFx0WydqJywgJ2Rvd24nXSxcblx0XHRbJ2gnLCAnbGVmdCddLFxuXHRcdFsnbCcsICdyaWdodCddLFxuXHRcdFsnXFx4MDMnLCAnY2FuY2VsJ10sXG5cdFx0Ly8gb3BpbmlvbmF0ZWQgZGVmYXVsdHMhXG5cdFx0Wydlc2NhcGUnLCAnY2FuY2VsJ10sXG5cdF0pLFxuXHRtZXNzYWdlczoge1xuXHRcdGNhbmNlbDogJ0NhbmNlbGVkJyxcblx0XHRlcnJvcjogJ1NvbWV0aGluZyB3ZW50IHdyb25nJyxcblx0fSxcblx0d2l0aEd1aWRlOiB0cnVlLFxufTtcblxuZXhwb3J0IGludGVyZmFjZSBDbGFja1NldHRpbmdzIHtcblx0LyoqXG5cdCAqIFNldCBjdXN0b20gZ2xvYmFsIGFsaWFzZXMgZm9yIHRoZSBkZWZhdWx0IGFjdGlvbnMuXG5cdCAqIFRoaXMgd2lsbCBub3Qgb3ZlcndyaXRlIGV4aXN0aW5nIGFsaWFzZXMsIGl0IHdpbGwgb25seSBhZGQgbmV3IG9uZXMhXG5cdCAqXG5cdCAqIEBwYXJhbSBhbGlhc2VzIC0gQW4gb2JqZWN0IHRoYXQgbWFwcyBhbGlhc2VzIHRvIGFjdGlvbnNcblx0ICogQGRlZmF1bHQgeyBrOiAndXAnLCBqOiAnZG93bicsIGg6ICdsZWZ0JywgbDogJ3JpZ2h0JywgJ1xceDAzJzogJ2NhbmNlbCcsICdlc2NhcGUnOiAnY2FuY2VsJyB9XG5cdCAqL1xuXHRhbGlhc2VzPzogUmVjb3JkPHN0cmluZywgQWN0aW9uPjtcblxuXHQvKipcblx0ICogQ3VzdG9tIG1lc3NhZ2VzIGZvciBwcm9tcHRzXG5cdCAqL1xuXHRtZXNzYWdlcz86IHtcblx0XHQvKipcblx0XHQgKiBDdXN0b20gbWVzc2FnZSB0byBkaXNwbGF5IHdoZW4gYSBzcGlubmVyIGlzIGNhbmNlbGxlZFxuXHRcdCAqIEBkZWZhdWx0IFwiQ2FuY2VsZWRcIlxuXHRcdCAqL1xuXHRcdGNhbmNlbD86IHN0cmluZztcblx0XHQvKipcblx0XHQgKiBDdXN0b20gbWVzc2FnZSB0byBkaXNwbGF5IHdoZW4gYSBzcGlubmVyIGVuY291bnRlcnMgYW4gZXJyb3Jcblx0XHQgKiBAZGVmYXVsdCBcIlNvbWV0aGluZyB3ZW50IHdyb25nXCJcblx0XHQgKi9cblx0XHRlcnJvcj86IHN0cmluZztcblx0fTtcblxuXHR3aXRoR3VpZGU/OiBib29sZWFuO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlU2V0dGluZ3ModXBkYXRlczogQ2xhY2tTZXR0aW5ncykge1xuXHQvLyBIYW5kbGUgZWFjaCBwcm9wZXJ0eSBpbiB0aGUgdXBkYXRlc1xuXHRpZiAodXBkYXRlcy5hbGlhc2VzICE9PSB1bmRlZmluZWQpIHtcblx0XHRjb25zdCBhbGlhc2VzID0gdXBkYXRlcy5hbGlhc2VzO1xuXHRcdGZvciAoY29uc3QgYWxpYXMgaW4gYWxpYXNlcykge1xuXHRcdFx0aWYgKCFPYmplY3QuaGFzT3duKGFsaWFzZXMsIGFsaWFzKSkgY29udGludWU7XG5cblx0XHRcdGNvbnN0IGFjdGlvbiA9IGFsaWFzZXNbYWxpYXNdO1xuXHRcdFx0aWYgKCFzZXR0aW5ncy5hY3Rpb25zLmhhcyhhY3Rpb24pKSBjb250aW51ZTtcblxuXHRcdFx0aWYgKCFzZXR0aW5ncy5hbGlhc2VzLmhhcyhhbGlhcykpIHtcblx0XHRcdFx0c2V0dGluZ3MuYWxpYXNlcy5zZXQoYWxpYXMsIGFjdGlvbik7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aWYgKHVwZGF0ZXMubWVzc2FnZXMgIT09IHVuZGVmaW5lZCkge1xuXHRcdGNvbnN0IG1lc3NhZ2VzID0gdXBkYXRlcy5tZXNzYWdlcztcblx0XHRpZiAobWVzc2FnZXMuY2FuY2VsICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHNldHRpbmdzLm1lc3NhZ2VzLmNhbmNlbCA9IG1lc3NhZ2VzLmNhbmNlbDtcblx0XHR9XG5cdFx0aWYgKG1lc3NhZ2VzLmVycm9yICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHNldHRpbmdzLm1lc3NhZ2VzLmVycm9yID0gbWVzc2FnZXMuZXJyb3I7XG5cdFx0fVxuXHR9XG5cblx0aWYgKHVwZGF0ZXMud2l0aEd1aWRlICE9PSB1bmRlZmluZWQpIHtcblx0XHRzZXR0aW5ncy53aXRoR3VpZGUgPSB1cGRhdGVzLndpdGhHdWlkZSAhPT0gZmFsc2U7XG5cdH1cbn1cblxuLyoqXG4gKiBDaGVjayBpZiBhIGtleSBpcyBhbiBhbGlhcyBmb3IgYSBkZWZhdWx0IGFjdGlvblxuICogQHBhcmFtIGtleSAtIFRoZSByYXcga2V5IHdoaWNoIG1pZ2h0IG1hdGNoIHRvIGFuIGFjdGlvblxuICogQHBhcmFtIGFjdGlvbiAtIFRoZSBhY3Rpb24gdG8gbWF0Y2hcbiAqIEByZXR1cm5zIGJvb2xlYW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQWN0aW9uS2V5KGtleTogc3RyaW5nIHwgQXJyYXk8c3RyaW5nIHwgdW5kZWZpbmVkPiwgYWN0aW9uOiBBY3Rpb24pIHtcblx0aWYgKHR5cGVvZiBrZXkgPT09ICdzdHJpbmcnKSB7XG5cdFx0cmV0dXJuIHNldHRpbmdzLmFsaWFzZXMuZ2V0KGtleSkgPT09IGFjdGlvbjtcblx0fVxuXG5cdGZvciAoY29uc3QgdmFsdWUgb2Yga2V5KSB7XG5cdFx0aWYgKHZhbHVlID09PSB1bmRlZmluZWQpIGNvbnRpbnVlO1xuXHRcdGlmIChpc0FjdGlvbktleSh2YWx1ZSwgYWN0aW9uKSkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBmYWxzZTtcbn1cbiIsICJleHBvcnQgZnVuY3Rpb24gZGlmZkxpbmVzKGE6IHN0cmluZywgYjogc3RyaW5nKSB7XG5cdGlmIChhID09PSBiKSByZXR1cm47XG5cblx0Y29uc3QgYUxpbmVzID0gYS5zcGxpdCgnXFxuJyk7XG5cdGNvbnN0IGJMaW5lcyA9IGIuc3BsaXQoJ1xcbicpO1xuXHRjb25zdCBudW1MaW5lcyA9IE1hdGgubWF4KGFMaW5lcy5sZW5ndGgsIGJMaW5lcy5sZW5ndGgpO1xuXHRjb25zdCBkaWZmOiBudW1iZXJbXSA9IFtdO1xuXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgbnVtTGluZXM7IGkrKykge1xuXHRcdGlmIChhTGluZXNbaV0gIT09IGJMaW5lc1tpXSkgZGlmZi5wdXNoKGkpO1xuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRsaW5lczogZGlmZixcblx0XHRudW1MaW5lc0JlZm9yZTogYUxpbmVzLmxlbmd0aCxcblx0XHRudW1MaW5lc0FmdGVyOiBiTGluZXMubGVuZ3RoLFxuXHRcdG51bUxpbmVzLFxuXHR9O1xufVxuIiwgImltcG9ydCB7IHN0ZGluLCBzdGRvdXQgfSBmcm9tICdub2RlOnByb2Nlc3MnO1xuaW1wb3J0IHR5cGUgeyBLZXkgfSBmcm9tICdub2RlOnJlYWRsaW5lJztcbmltcG9ydCAqIGFzIHJlYWRsaW5lIGZyb20gJ25vZGU6cmVhZGxpbmUnO1xuaW1wb3J0IHR5cGUgeyBSZWFkYWJsZSwgV3JpdGFibGUgfSBmcm9tICdub2RlOnN0cmVhbSc7XG5pbXBvcnQgeyBSZWFkU3RyZWFtIH0gZnJvbSAnbm9kZTp0dHknO1xuaW1wb3J0IHsgd3JhcEFuc2kgfSBmcm9tICdmYXN0LXdyYXAtYW5zaSc7XG5pbXBvcnQgeyBjdXJzb3IgfSBmcm9tICdzaXN0ZXJhbnNpJztcbmltcG9ydCB7IGlzQWN0aW9uS2V5IH0gZnJvbSAnLi9zZXR0aW5ncy5qcyc7XG5cbmV4cG9ydCAqIGZyb20gJy4vc2V0dGluZ3MuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9zdHJpbmcuanMnO1xuXG5jb25zdCBpc1dpbmRvd3MgPSBnbG9iYWxUaGlzLnByb2Nlc3MucGxhdGZvcm0uc3RhcnRzV2l0aCgnd2luJyk7XG5cbmV4cG9ydCBjb25zdCBDQU5DRUxfU1lNQk9MID0gU3ltYm9sKCdjbGFjazpjYW5jZWwnKTtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ2FuY2VsKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgc3ltYm9sIHtcblx0cmV0dXJuIHZhbHVlID09PSBDQU5DRUxfU1lNQk9MO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0UmF3TW9kZShpbnB1dDogUmVhZGFibGUsIHZhbHVlOiBib29sZWFuKSB7XG5cdGNvbnN0IGkgPSBpbnB1dCBhcyB0eXBlb2Ygc3RkaW47XG5cblx0aWYgKGkuaXNUVFkpIGkuc2V0UmF3TW9kZSh2YWx1ZSk7XG59XG5cbmludGVyZmFjZSBCbG9ja09wdGlvbnMge1xuXHRpbnB1dD86IFJlYWRhYmxlO1xuXHRvdXRwdXQ/OiBXcml0YWJsZTtcblx0b3ZlcndyaXRlPzogYm9vbGVhbjtcblx0aGlkZUN1cnNvcj86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBibG9jayh7XG5cdGlucHV0ID0gc3RkaW4sXG5cdG91dHB1dCA9IHN0ZG91dCxcblx0b3ZlcndyaXRlID0gdHJ1ZSxcblx0aGlkZUN1cnNvciA9IHRydWUsXG59OiBCbG9ja09wdGlvbnMgPSB7fSkge1xuXHRjb25zdCBybCA9IHJlYWRsaW5lLmNyZWF0ZUludGVyZmFjZSh7XG5cdFx0aW5wdXQsXG5cdFx0b3V0cHV0LFxuXHRcdHByb21wdDogJycsXG5cdFx0dGFiU2l6ZTogMSxcblx0fSk7XG5cdHJlYWRsaW5lLmVtaXRLZXlwcmVzc0V2ZW50cyhpbnB1dCwgcmwpO1xuXG5cdGlmIChpbnB1dCBpbnN0YW5jZW9mIFJlYWRTdHJlYW0gJiYgaW5wdXQuaXNUVFkpIHtcblx0XHRpbnB1dC5zZXRSYXdNb2RlKHRydWUpO1xuXHR9XG5cblx0Y29uc3QgY2xlYXIgPSAoZGF0YTogQnVmZmVyLCB7IG5hbWUsIHNlcXVlbmNlIH06IEtleSkgPT4ge1xuXHRcdGNvbnN0IHN0ciA9IFN0cmluZyhkYXRhKTtcblx0XHRpZiAoaXNBY3Rpb25LZXkoW3N0ciwgbmFtZSwgc2VxdWVuY2VdLCAnY2FuY2VsJykpIHtcblx0XHRcdGlmIChoaWRlQ3Vyc29yKSBvdXRwdXQud3JpdGUoY3Vyc29yLnNob3cpO1xuXHRcdFx0cHJvY2Vzcy5leGl0KDApO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpZiAoIW92ZXJ3cml0ZSkgcmV0dXJuO1xuXHRcdGNvbnN0IGR4ID0gbmFtZSA9PT0gJ3JldHVybicgPyAwIDogLTE7XG5cdFx0Y29uc3QgZHkgPSBuYW1lID09PSAncmV0dXJuJyA/IC0xIDogMDtcblxuXHRcdHJlYWRsaW5lLm1vdmVDdXJzb3Iob3V0cHV0LCBkeCwgZHksICgpID0+IHtcblx0XHRcdHJlYWRsaW5lLmNsZWFyTGluZShvdXRwdXQsIDEsICgpID0+IHtcblx0XHRcdFx0aW5wdXQub25jZSgna2V5cHJlc3MnLCBjbGVhcik7XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fTtcblx0aWYgKGhpZGVDdXJzb3IpIG91dHB1dC53cml0ZShjdXJzb3IuaGlkZSk7XG5cdGlucHV0Lm9uY2UoJ2tleXByZXNzJywgY2xlYXIpO1xuXG5cdHJldHVybiAoKSA9PiB7XG5cdFx0aW5wdXQub2ZmKCdrZXlwcmVzcycsIGNsZWFyKTtcblx0XHRpZiAoaGlkZUN1cnNvcikgb3V0cHV0LndyaXRlKGN1cnNvci5zaG93KTtcblxuXHRcdC8vIFByZXZlbnQgV2luZG93cyBzcGVjaWZpYyBpc3N1ZXM6IGh0dHBzOi8vZ2l0aHViLmNvbS9ib21ic2hlbGwtZGV2L2NsYWNrL2lzc3Vlcy8xNzZcblx0XHRpZiAoaW5wdXQgaW5zdGFuY2VvZiBSZWFkU3RyZWFtICYmIGlucHV0LmlzVFRZICYmICFpc1dpbmRvd3MpIHtcblx0XHRcdGlucHV0LnNldFJhd01vZGUoZmFsc2UpO1xuXHRcdH1cblxuXHRcdC8vIEB0cy1leHBlY3QtZXJyb3IgZml4IGZvciBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvaXNzdWVzLzMxNzYyI2lzc3VlY29tbWVudC0xNDQxMjIzOTA3XG5cdFx0cmwudGVybWluYWwgPSBmYWxzZTtcblx0XHRybC5jbG9zZSgpO1xuXHR9O1xufVxuXG5leHBvcnQgY29uc3QgZ2V0Q29sdW1ucyA9IChvdXRwdXQ6IFdyaXRhYmxlKTogbnVtYmVyID0+IHtcblx0aWYgKCdjb2x1bW5zJyBpbiBvdXRwdXQgJiYgdHlwZW9mIG91dHB1dC5jb2x1bW5zID09PSAnbnVtYmVyJykge1xuXHRcdHJldHVybiBvdXRwdXQuY29sdW1ucztcblx0fVxuXHRyZXR1cm4gODA7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Um93cyA9IChvdXRwdXQ6IFdyaXRhYmxlKTogbnVtYmVyID0+IHtcblx0aWYgKCdyb3dzJyBpbiBvdXRwdXQgJiYgdHlwZW9mIG91dHB1dC5yb3dzID09PSAnbnVtYmVyJykge1xuXHRcdHJldHVybiBvdXRwdXQucm93cztcblx0fVxuXHRyZXR1cm4gMjA7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gd3JhcFRleHRXaXRoUHJlZml4KFxuXHRvdXRwdXQ6IFdyaXRhYmxlIHwgdW5kZWZpbmVkLFxuXHR0ZXh0OiBzdHJpbmcsXG5cdHByZWZpeDogc3RyaW5nLFxuXHRzdGFydFByZWZpeDogc3RyaW5nID0gcHJlZml4XG4pOiBzdHJpbmcge1xuXHRjb25zdCBjb2x1bW5zID0gZ2V0Q29sdW1ucyhvdXRwdXQgPz8gc3Rkb3V0KTtcblx0Y29uc3Qgd3JhcHBlZCA9IHdyYXBBbnNpKHRleHQsIGNvbHVtbnMgLSBwcmVmaXgubGVuZ3RoLCB7XG5cdFx0aGFyZDogdHJ1ZSxcblx0XHR0cmltOiBmYWxzZSxcblx0fSk7XG5cdGNvbnN0IGxpbmVzID0gd3JhcHBlZFxuXHRcdC5zcGxpdCgnXFxuJylcblx0XHQubWFwKChsaW5lLCBpbmRleCkgPT4ge1xuXHRcdFx0cmV0dXJuIGAke2luZGV4ID09PSAwID8gc3RhcnRQcmVmaXggOiBwcmVmaXh9JHtsaW5lfWA7XG5cdFx0fSlcblx0XHQuam9pbignXFxuJyk7XG5cdHJldHVybiBsaW5lcztcbn1cbiIsICJpbXBvcnQgeyBzdGRpbiwgc3Rkb3V0IH0gZnJvbSAnbm9kZTpwcm9jZXNzJztcbmltcG9ydCByZWFkbGluZSwgeyB0eXBlIEtleSwgdHlwZSBSZWFkTGluZSB9IGZyb20gJ25vZGU6cmVhZGxpbmUnO1xuaW1wb3J0IHR5cGUgeyBSZWFkYWJsZSwgV3JpdGFibGUgfSBmcm9tICdub2RlOnN0cmVhbSc7XG5pbXBvcnQgeyB3cmFwQW5zaSB9IGZyb20gJ2Zhc3Qtd3JhcC1hbnNpJztcbmltcG9ydCB7IGN1cnNvciwgZXJhc2UgfSBmcm9tICdzaXN0ZXJhbnNpJztcbmltcG9ydCB0eXBlIHsgQ2xhY2tFdmVudHMsIENsYWNrU3RhdGUgfSBmcm9tICcuLi90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IEFjdGlvbiB9IGZyb20gJy4uL3V0aWxzL2luZGV4LmpzJztcbmltcG9ydCB7XG5cdENBTkNFTF9TWU1CT0wsXG5cdGRpZmZMaW5lcyxcblx0Z2V0Um93cyxcblx0aXNBY3Rpb25LZXksXG5cdHNldFJhd01vZGUsXG5cdHNldHRpbmdzLFxufSBmcm9tICcuLi91dGlscy9pbmRleC5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJvbXB0T3B0aW9uczxUVmFsdWUsIFNlbGYgZXh0ZW5kcyBQcm9tcHQ8VFZhbHVlPj4ge1xuXHRyZW5kZXIodGhpczogT21pdDxTZWxmLCAncHJvbXB0Jz4pOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdGluaXRpYWxWYWx1ZT86IGFueTtcblx0aW5pdGlhbFVzZXJJbnB1dD86IHN0cmluZztcblx0dmFsaWRhdGU/OiAoKHZhbHVlOiBUVmFsdWUgfCB1bmRlZmluZWQpID0+IHN0cmluZyB8IEVycm9yIHwgdW5kZWZpbmVkKSB8IHVuZGVmaW5lZDtcblx0aW5wdXQ/OiBSZWFkYWJsZTtcblx0b3V0cHV0PzogV3JpdGFibGU7XG5cdGRlYnVnPzogYm9vbGVhbjtcblx0c2lnbmFsPzogQWJvcnRTaWduYWw7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFByb21wdDxUVmFsdWU+IHtcblx0cHJvdGVjdGVkIGlucHV0OiBSZWFkYWJsZTtcblx0cHJvdGVjdGVkIG91dHB1dDogV3JpdGFibGU7XG5cdHByaXZhdGUgX2Fib3J0U2lnbmFsPzogQWJvcnRTaWduYWw7XG5cblx0cHJpdmF0ZSBybDogUmVhZExpbmUgfCB1bmRlZmluZWQ7XG5cdHByaXZhdGUgb3B0czogT21pdDxQcm9tcHRPcHRpb25zPFRWYWx1ZSwgUHJvbXB0PFRWYWx1ZT4+LCAncmVuZGVyJyB8ICdpbnB1dCcgfCAnb3V0cHV0Jz47XG5cdHByaXZhdGUgX3JlbmRlcjogKGNvbnRleHQ6IE9taXQ8UHJvbXB0PFRWYWx1ZT4sICdwcm9tcHQnPikgPT4gc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRwcml2YXRlIF90cmFjayA9IGZhbHNlO1xuXHRwcml2YXRlIF9wcmV2RnJhbWUgPSAnJztcblx0cHJpdmF0ZSBfc3Vic2NyaWJlcnMgPSBuZXcgTWFwPHN0cmluZywgeyBjYjogKC4uLmFyZ3M6IGFueSkgPT4gYW55OyBvbmNlPzogYm9vbGVhbiB9W10+KCk7XG5cdHByb3RlY3RlZCBfY3Vyc29yID0gMDtcblxuXHRwdWJsaWMgc3RhdGU6IENsYWNrU3RhdGUgPSAnaW5pdGlhbCc7XG5cdHB1YmxpYyBlcnJvciA9ICcnO1xuXHRwdWJsaWMgdmFsdWU6IFRWYWx1ZSB8IHVuZGVmaW5lZDtcblx0cHVibGljIHVzZXJJbnB1dCA9ICcnO1xuXG5cdGNvbnN0cnVjdG9yKG9wdGlvbnM6IFByb21wdE9wdGlvbnM8VFZhbHVlLCBQcm9tcHQ8VFZhbHVlPj4sIHRyYWNrVmFsdWUgPSB0cnVlKSB7XG5cdFx0Y29uc3QgeyBpbnB1dCA9IHN0ZGluLCBvdXRwdXQgPSBzdGRvdXQsIHJlbmRlciwgc2lnbmFsLCAuLi5vcHRzIH0gPSBvcHRpb25zO1xuXG5cdFx0dGhpcy5vcHRzID0gb3B0cztcblx0XHR0aGlzLm9uS2V5cHJlc3MgPSB0aGlzLm9uS2V5cHJlc3MuYmluZCh0aGlzKTtcblx0XHR0aGlzLmNsb3NlID0gdGhpcy5jbG9zZS5iaW5kKHRoaXMpO1xuXHRcdHRoaXMucmVuZGVyID0gdGhpcy5yZW5kZXIuYmluZCh0aGlzKTtcblx0XHR0aGlzLl9yZW5kZXIgPSByZW5kZXIuYmluZCh0aGlzKTtcblx0XHR0aGlzLl90cmFjayA9IHRyYWNrVmFsdWU7XG5cdFx0dGhpcy5fYWJvcnRTaWduYWwgPSBzaWduYWw7XG5cblx0XHR0aGlzLmlucHV0ID0gaW5wdXQ7XG5cdFx0dGhpcy5vdXRwdXQgPSBvdXRwdXQ7XG5cdH1cblxuXHQvKipcblx0ICogVW5zdWJzY3JpYmUgYWxsIGxpc3RlbmVyc1xuXHQgKi9cblx0cHJvdGVjdGVkIHVuc3Vic2NyaWJlKCkge1xuXHRcdHRoaXMuX3N1YnNjcmliZXJzLmNsZWFyKCk7XG5cdH1cblxuXHQvKipcblx0ICogU2V0IGEgc3Vic2NyaWJlciB3aXRoIG9wdHNcblx0ICogQHBhcmFtIGV2ZW50IC0gVGhlIGV2ZW50IG5hbWVcblx0ICovXG5cdHByaXZhdGUgc2V0U3Vic2NyaWJlcjxUIGV4dGVuZHMga2V5b2YgQ2xhY2tFdmVudHM8VFZhbHVlPj4oXG5cdFx0ZXZlbnQ6IFQsXG5cdFx0b3B0czogeyBjYjogQ2xhY2tFdmVudHM8VFZhbHVlPltUXTsgb25jZT86IGJvb2xlYW4gfVxuXHQpIHtcblx0XHRjb25zdCBwYXJhbXMgPSB0aGlzLl9zdWJzY3JpYmVycy5nZXQoZXZlbnQpID8/IFtdO1xuXHRcdHBhcmFtcy5wdXNoKG9wdHMpO1xuXHRcdHRoaXMuX3N1YnNjcmliZXJzLnNldChldmVudCwgcGFyYW1zKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTdWJzY3JpYmUgdG8gYW4gZXZlbnRcblx0ICogQHBhcmFtIGV2ZW50IC0gVGhlIGV2ZW50IG5hbWVcblx0ICogQHBhcmFtIGNiIC0gVGhlIGNhbGxiYWNrXG5cdCAqL1xuXHRwdWJsaWMgb248VCBleHRlbmRzIGtleW9mIENsYWNrRXZlbnRzPFRWYWx1ZT4+KGV2ZW50OiBULCBjYjogQ2xhY2tFdmVudHM8VFZhbHVlPltUXSkge1xuXHRcdHRoaXMuc2V0U3Vic2NyaWJlcihldmVudCwgeyBjYiB9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTdWJzY3JpYmUgdG8gYW4gZXZlbnQgb25jZVxuXHQgKiBAcGFyYW0gZXZlbnQgLSBUaGUgZXZlbnQgbmFtZVxuXHQgKiBAcGFyYW0gY2IgLSBUaGUgY2FsbGJhY2tcblx0ICovXG5cdHB1YmxpYyBvbmNlPFQgZXh0ZW5kcyBrZXlvZiBDbGFja0V2ZW50czxUVmFsdWU+PihldmVudDogVCwgY2I6IENsYWNrRXZlbnRzPFRWYWx1ZT5bVF0pIHtcblx0XHR0aGlzLnNldFN1YnNjcmliZXIoZXZlbnQsIHsgY2IsIG9uY2U6IHRydWUgfSk7XG5cdH1cblxuXHQvKipcblx0ICogRW1pdCBhbiBldmVudCB3aXRoIGRhdGFcblx0ICogQHBhcmFtIGV2ZW50IC0gVGhlIGV2ZW50IG5hbWVcblx0ICogQHBhcmFtIGRhdGEgLSBUaGUgZGF0YSB0byBwYXNzIHRvIHRoZSBjYWxsYmFja1xuXHQgKi9cblx0cHVibGljIGVtaXQ8VCBleHRlbmRzIGtleW9mIENsYWNrRXZlbnRzPFRWYWx1ZT4+KFxuXHRcdGV2ZW50OiBULFxuXHRcdC4uLmRhdGE6IFBhcmFtZXRlcnM8Q2xhY2tFdmVudHM8VFZhbHVlPltUXT5cblx0KSB7XG5cdFx0Y29uc3QgY2JzID0gdGhpcy5fc3Vic2NyaWJlcnMuZ2V0KGV2ZW50KSA/PyBbXTtcblx0XHRjb25zdCBjbGVhbnVwOiAoKCkgPT4gdm9pZClbXSA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBzdWJzY3JpYmVyIG9mIGNicykge1xuXHRcdFx0c3Vic2NyaWJlci5jYiguLi5kYXRhKTtcblxuXHRcdFx0aWYgKHN1YnNjcmliZXIub25jZSkge1xuXHRcdFx0XHRjbGVhbnVwLnB1c2goKCkgPT4gY2JzLnNwbGljZShjYnMuaW5kZXhPZihzdWJzY3JpYmVyKSwgMSkpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGZvciAoY29uc3QgY2Igb2YgY2xlYW51cCkge1xuXHRcdFx0Y2IoKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgcHJvbXB0KCkge1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZTxUVmFsdWUgfCBzeW1ib2wgfCB1bmRlZmluZWQ+KChyZXNvbHZlKSA9PiB7XG5cdFx0XHRpZiAodGhpcy5fYWJvcnRTaWduYWwpIHtcblx0XHRcdFx0aWYgKHRoaXMuX2Fib3J0U2lnbmFsLmFib3J0ZWQpIHtcblx0XHRcdFx0XHR0aGlzLnN0YXRlID0gJ2NhbmNlbCc7XG5cblx0XHRcdFx0XHR0aGlzLmNsb3NlKCk7XG5cdFx0XHRcdFx0cmV0dXJuIHJlc29sdmUoQ0FOQ0VMX1NZTUJPTCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0aGlzLl9hYm9ydFNpZ25hbC5hZGRFdmVudExpc3RlbmVyKFxuXHRcdFx0XHRcdCdhYm9ydCcsXG5cdFx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5zdGF0ZSA9ICdjYW5jZWwnO1xuXHRcdFx0XHRcdFx0dGhpcy5jbG9zZSgpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0eyBvbmNlOiB0cnVlIH1cblx0XHRcdFx0KTtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5ybCA9IHJlYWRsaW5lLmNyZWF0ZUludGVyZmFjZSh7XG5cdFx0XHRcdGlucHV0OiB0aGlzLmlucHV0LFxuXHRcdFx0XHR0YWJTaXplOiAyLFxuXHRcdFx0XHRwcm9tcHQ6ICcnLFxuXHRcdFx0XHRlc2NhcGVDb2RlVGltZW91dDogNTAsXG5cdFx0XHRcdHRlcm1pbmFsOiB0cnVlLFxuXHRcdFx0fSk7XG5cdFx0XHR0aGlzLnJsLnByb21wdCgpO1xuXG5cdFx0XHRpZiAodGhpcy5vcHRzLmluaXRpYWxVc2VySW5wdXQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHR0aGlzLl9zZXRVc2VySW5wdXQodGhpcy5vcHRzLmluaXRpYWxVc2VySW5wdXQsIHRydWUpO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLmlucHV0Lm9uKCdrZXlwcmVzcycsIHRoaXMub25LZXlwcmVzcyk7XG5cdFx0XHRzZXRSYXdNb2RlKHRoaXMuaW5wdXQsIHRydWUpO1xuXHRcdFx0dGhpcy5vdXRwdXQub24oJ3Jlc2l6ZScsIHRoaXMucmVuZGVyKTtcblxuXHRcdFx0dGhpcy5yZW5kZXIoKTtcblxuXHRcdFx0dGhpcy5vbmNlKCdzdWJtaXQnLCAoKSA9PiB7XG5cdFx0XHRcdHRoaXMub3V0cHV0LndyaXRlKGN1cnNvci5zaG93KTtcblx0XHRcdFx0dGhpcy5vdXRwdXQub2ZmKCdyZXNpemUnLCB0aGlzLnJlbmRlcik7XG5cdFx0XHRcdHNldFJhd01vZGUodGhpcy5pbnB1dCwgZmFsc2UpO1xuXHRcdFx0XHRyZXNvbHZlKHRoaXMudmFsdWUpO1xuXHRcdFx0fSk7XG5cdFx0XHR0aGlzLm9uY2UoJ2NhbmNlbCcsICgpID0+IHtcblx0XHRcdFx0dGhpcy5vdXRwdXQud3JpdGUoY3Vyc29yLnNob3cpO1xuXHRcdFx0XHR0aGlzLm91dHB1dC5vZmYoJ3Jlc2l6ZScsIHRoaXMucmVuZGVyKTtcblx0XHRcdFx0c2V0UmF3TW9kZSh0aGlzLmlucHV0LCBmYWxzZSk7XG5cdFx0XHRcdHJlc29sdmUoQ0FOQ0VMX1NZTUJPTCk7XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fVxuXG5cdHByb3RlY3RlZCBfaXNBY3Rpb25LZXkoY2hhcjogc3RyaW5nIHwgdW5kZWZpbmVkLCBfa2V5OiBLZXkpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gY2hhciA9PT0gJ1xcdCc7XG5cdH1cblxuXHRwcm90ZWN0ZWQgX3NldFZhbHVlKHZhbHVlOiBUVmFsdWUgfCB1bmRlZmluZWQpOiB2b2lkIHtcblx0XHR0aGlzLnZhbHVlID0gdmFsdWU7XG5cdFx0dGhpcy5lbWl0KCd2YWx1ZScsIHRoaXMudmFsdWUpO1xuXHR9XG5cblx0cHJvdGVjdGVkIF9zZXRVc2VySW5wdXQodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCwgd3JpdGU/OiBib29sZWFuKTogdm9pZCB7XG5cdFx0dGhpcy51c2VySW5wdXQgPSB2YWx1ZSA/PyAnJztcblx0XHR0aGlzLmVtaXQoJ3VzZXJJbnB1dCcsIHRoaXMudXNlcklucHV0KTtcblx0XHRpZiAod3JpdGUgJiYgdGhpcy5fdHJhY2sgJiYgdGhpcy5ybCkge1xuXHRcdFx0dGhpcy5ybC53cml0ZSh0aGlzLnVzZXJJbnB1dCk7XG5cdFx0XHR0aGlzLl9jdXJzb3IgPSB0aGlzLnJsLmN1cnNvcjtcblx0XHR9XG5cdH1cblxuXHRwcm90ZWN0ZWQgX2NsZWFyVXNlcklucHV0KCk6IHZvaWQge1xuXHRcdHRoaXMucmw/LndyaXRlKG51bGwsIHsgY3RybDogdHJ1ZSwgbmFtZTogJ3UnIH0pO1xuXHRcdHRoaXMuX3NldFVzZXJJbnB1dCgnJyk7XG5cdH1cblxuXHRwcml2YXRlIG9uS2V5cHJlc3MoY2hhcjogc3RyaW5nIHwgdW5kZWZpbmVkLCBrZXk6IEtleSkge1xuXHRcdGlmICh0aGlzLl90cmFjayAmJiBrZXkubmFtZSAhPT0gJ3JldHVybicpIHtcblx0XHRcdGlmIChrZXkubmFtZSAmJiB0aGlzLl9pc0FjdGlvbktleShjaGFyLCBrZXkpKSB7XG5cdFx0XHRcdHRoaXMucmw/LndyaXRlKG51bGwsIHsgY3RybDogdHJ1ZSwgbmFtZTogJ2gnIH0pO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5fY3Vyc29yID0gdGhpcy5ybD8uY3Vyc29yID8/IDA7XG5cdFx0XHR0aGlzLl9zZXRVc2VySW5wdXQodGhpcy5ybD8ubGluZSk7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuc3RhdGUgPT09ICdlcnJvcicpIHtcblx0XHRcdHRoaXMuc3RhdGUgPSAnYWN0aXZlJztcblx0XHR9XG5cdFx0aWYgKGtleT8ubmFtZSkge1xuXHRcdFx0aWYgKCF0aGlzLl90cmFjayAmJiBzZXR0aW5ncy5hbGlhc2VzLmhhcyhrZXkubmFtZSkpIHtcblx0XHRcdFx0dGhpcy5lbWl0KCdjdXJzb3InLCBzZXR0aW5ncy5hbGlhc2VzLmdldChrZXkubmFtZSkpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHNldHRpbmdzLmFjdGlvbnMuaGFzKGtleS5uYW1lIGFzIEFjdGlvbikpIHtcblx0XHRcdFx0dGhpcy5lbWl0KCdjdXJzb3InLCBrZXkubmFtZSBhcyBBY3Rpb24pO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoY2hhciAmJiAoY2hhci50b0xvd2VyQ2FzZSgpID09PSAneScgfHwgY2hhci50b0xvd2VyQ2FzZSgpID09PSAnbicpKSB7XG5cdFx0XHR0aGlzLmVtaXQoJ2NvbmZpcm0nLCBjaGFyLnRvTG93ZXJDYXNlKCkgPT09ICd5Jyk7XG5cdFx0fVxuXG5cdFx0Ly8gQ2FsbCB0aGUga2V5IGV2ZW50IGhhbmRsZXIgYW5kIGVtaXQgdGhlIGtleSBldmVudFxuXHRcdHRoaXMuZW1pdCgna2V5JywgY2hhcj8udG9Mb3dlckNhc2UoKSwga2V5KTtcblxuXHRcdGlmIChrZXk/Lm5hbWUgPT09ICdyZXR1cm4nKSB7XG5cdFx0XHRpZiAodGhpcy5vcHRzLnZhbGlkYXRlKSB7XG5cdFx0XHRcdGNvbnN0IHByb2JsZW0gPSB0aGlzLm9wdHMudmFsaWRhdGUodGhpcy52YWx1ZSk7XG5cdFx0XHRcdGlmIChwcm9ibGVtKSB7XG5cdFx0XHRcdFx0dGhpcy5lcnJvciA9IHByb2JsZW0gaW5zdGFuY2VvZiBFcnJvciA/IHByb2JsZW0ubWVzc2FnZSA6IHByb2JsZW07XG5cdFx0XHRcdFx0dGhpcy5zdGF0ZSA9ICdlcnJvcic7XG5cdFx0XHRcdFx0dGhpcy5ybD8ud3JpdGUodGhpcy51c2VySW5wdXQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAodGhpcy5zdGF0ZSAhPT0gJ2Vycm9yJykge1xuXHRcdFx0XHR0aGlzLnN0YXRlID0gJ3N1Ym1pdCc7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGlzQWN0aW9uS2V5KFtjaGFyLCBrZXk/Lm5hbWUsIGtleT8uc2VxdWVuY2VdLCAnY2FuY2VsJykpIHtcblx0XHRcdHRoaXMuc3RhdGUgPSAnY2FuY2VsJztcblx0XHR9XG5cblx0XHRpZiAodGhpcy5zdGF0ZSA9PT0gJ3N1Ym1pdCcgfHwgdGhpcy5zdGF0ZSA9PT0gJ2NhbmNlbCcpIHtcblx0XHRcdHRoaXMuZW1pdCgnZmluYWxpemUnKTtcblx0XHR9XG5cdFx0dGhpcy5yZW5kZXIoKTtcblx0XHRpZiAodGhpcy5zdGF0ZSA9PT0gJ3N1Ym1pdCcgfHwgdGhpcy5zdGF0ZSA9PT0gJ2NhbmNlbCcpIHtcblx0XHRcdHRoaXMuY2xvc2UoKTtcblx0XHR9XG5cdH1cblxuXHRwcm90ZWN0ZWQgY2xvc2UoKSB7XG5cdFx0dGhpcy5pbnB1dC51bnBpcGUoKTtcblx0XHR0aGlzLmlucHV0LnJlbW92ZUxpc3RlbmVyKCdrZXlwcmVzcycsIHRoaXMub25LZXlwcmVzcyk7XG5cdFx0dGhpcy5vdXRwdXQud3JpdGUoJ1xcbicpO1xuXHRcdHNldFJhd01vZGUodGhpcy5pbnB1dCwgZmFsc2UpO1xuXHRcdHRoaXMucmw/LmNsb3NlKCk7XG5cdFx0dGhpcy5ybCA9IHVuZGVmaW5lZDtcblx0XHR0aGlzLmVtaXQoYCR7dGhpcy5zdGF0ZX1gLCB0aGlzLnZhbHVlKTtcblx0XHR0aGlzLnVuc3Vic2NyaWJlKCk7XG5cdH1cblxuXHRwcml2YXRlIHJlc3RvcmVDdXJzb3IoKSB7XG5cdFx0Y29uc3QgbGluZXMgPVxuXHRcdFx0d3JhcEFuc2kodGhpcy5fcHJldkZyYW1lLCBwcm9jZXNzLnN0ZG91dC5jb2x1bW5zLCB7IGhhcmQ6IHRydWUsIHRyaW06IGZhbHNlIH0pLnNwbGl0KCdcXG4nKVxuXHRcdFx0XHQubGVuZ3RoIC0gMTtcblx0XHR0aGlzLm91dHB1dC53cml0ZShjdXJzb3IubW92ZSgtOTk5LCBsaW5lcyAqIC0xKSk7XG5cdH1cblxuXHRwcml2YXRlIHJlbmRlcigpIHtcblx0XHRjb25zdCBmcmFtZSA9IHdyYXBBbnNpKHRoaXMuX3JlbmRlcih0aGlzKSA/PyAnJywgcHJvY2Vzcy5zdGRvdXQuY29sdW1ucywge1xuXHRcdFx0aGFyZDogdHJ1ZSxcblx0XHRcdHRyaW06IGZhbHNlLFxuXHRcdH0pO1xuXHRcdGlmIChmcmFtZSA9PT0gdGhpcy5fcHJldkZyYW1lKSByZXR1cm47XG5cblx0XHRpZiAodGhpcy5zdGF0ZSA9PT0gJ2luaXRpYWwnKSB7XG5cdFx0XHR0aGlzLm91dHB1dC53cml0ZShjdXJzb3IuaGlkZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IGRpZmYgPSBkaWZmTGluZXModGhpcy5fcHJldkZyYW1lLCBmcmFtZSk7XG5cdFx0XHRjb25zdCByb3dzID0gZ2V0Um93cyh0aGlzLm91dHB1dCk7XG5cdFx0XHR0aGlzLnJlc3RvcmVDdXJzb3IoKTtcblx0XHRcdGlmIChkaWZmKSB7XG5cdFx0XHRcdGNvbnN0IGRpZmZPZmZzZXRBZnRlciA9IE1hdGgubWF4KDAsIGRpZmYubnVtTGluZXNBZnRlciAtIHJvd3MpO1xuXHRcdFx0XHRjb25zdCBkaWZmT2Zmc2V0QmVmb3JlID0gTWF0aC5tYXgoMCwgZGlmZi5udW1MaW5lc0JlZm9yZSAtIHJvd3MpO1xuXHRcdFx0XHRsZXQgZGlmZkxpbmUgPSBkaWZmLmxpbmVzLmZpbmQoKGxpbmUpID0+IGxpbmUgPj0gZGlmZk9mZnNldEFmdGVyKTtcblxuXHRcdFx0XHRpZiAoZGlmZkxpbmUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdHRoaXMuX3ByZXZGcmFtZSA9IGZyYW1lO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIElmIGEgc2luZ2xlIGxpbmUgaGFzIGNoYW5nZWQsIG9ubHkgdXBkYXRlIHRoYXQgbGluZVxuXHRcdFx0XHRpZiAoZGlmZi5saW5lcy5sZW5ndGggPT09IDEpIHtcblx0XHRcdFx0XHR0aGlzLm91dHB1dC53cml0ZShjdXJzb3IubW92ZSgwLCBkaWZmTGluZSAtIGRpZmZPZmZzZXRCZWZvcmUpKTtcblx0XHRcdFx0XHR0aGlzLm91dHB1dC53cml0ZShlcmFzZS5saW5lcygxKSk7XG5cdFx0XHRcdFx0Y29uc3QgbGluZXMgPSBmcmFtZS5zcGxpdCgnXFxuJyk7XG5cdFx0XHRcdFx0dGhpcy5vdXRwdXQud3JpdGUobGluZXNbZGlmZkxpbmVdKTtcblx0XHRcdFx0XHR0aGlzLl9wcmV2RnJhbWUgPSBmcmFtZTtcblx0XHRcdFx0XHR0aGlzLm91dHB1dC53cml0ZShjdXJzb3IubW92ZSgwLCBsaW5lcy5sZW5ndGggLSBkaWZmTGluZSAtIDEpKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0Ly8gSWYgbWFueSBsaW5lcyBoYXZlIGNoYW5nZWQsIHJlcmVuZGVyIGV2ZXJ5dGhpbmcgcGFzdCB0aGUgZmlyc3QgbGluZVxuXHRcdFx0XHR9IGVsc2UgaWYgKGRpZmYubGluZXMubGVuZ3RoID4gMSkge1xuXHRcdFx0XHRcdGlmIChkaWZmT2Zmc2V0QWZ0ZXIgPCBkaWZmT2Zmc2V0QmVmb3JlKSB7XG5cdFx0XHRcdFx0XHRkaWZmTGluZSA9IGRpZmZPZmZzZXRBZnRlcjtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Y29uc3QgYWRqdXN0ZWREaWZmTGluZSA9IGRpZmZMaW5lIC0gZGlmZk9mZnNldEJlZm9yZTtcblx0XHRcdFx0XHRcdGlmIChhZGp1c3RlZERpZmZMaW5lID4gMCkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLm91dHB1dC53cml0ZShjdXJzb3IubW92ZSgwLCBhZGp1c3RlZERpZmZMaW5lKSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHRoaXMub3V0cHV0LndyaXRlKGVyYXNlLmRvd24oKSk7XG5cdFx0XHRcdFx0Y29uc3QgbGluZXMgPSBmcmFtZS5zcGxpdCgnXFxuJyk7XG5cdFx0XHRcdFx0Y29uc3QgbmV3TGluZXMgPSBsaW5lcy5zbGljZShkaWZmTGluZSk7XG5cdFx0XHRcdFx0dGhpcy5vdXRwdXQud3JpdGUobmV3TGluZXMuam9pbignXFxuJykpO1xuXHRcdFx0XHRcdHRoaXMuX3ByZXZGcmFtZSA9IGZyYW1lO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLm91dHB1dC53cml0ZShlcmFzZS5kb3duKCkpO1xuXHRcdH1cblxuXHRcdHRoaXMub3V0cHV0LndyaXRlKGZyYW1lKTtcblx0XHRpZiAodGhpcy5zdGF0ZSA9PT0gJ2luaXRpYWwnKSB7XG5cdFx0XHR0aGlzLnN0YXRlID0gJ2FjdGl2ZSc7XG5cdFx0fVxuXHRcdHRoaXMuX3ByZXZGcmFtZSA9IGZyYW1lO1xuXHR9XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBLZXkgfSBmcm9tICdub2RlOnJlYWRsaW5lJztcbmltcG9ydCBjb2xvciBmcm9tICdwaWNvY29sb3JzJztcbmltcG9ydCB7IGZpbmRDdXJzb3IgfSBmcm9tICcuLi91dGlscy9jdXJzb3IuanMnO1xuaW1wb3J0IFByb21wdCwgeyB0eXBlIFByb21wdE9wdGlvbnMgfSBmcm9tICcuL3Byb21wdC5qcyc7XG5cbmludGVyZmFjZSBPcHRpb25MaWtlIHtcblx0dmFsdWU6IHVua25vd247XG5cdGxhYmVsPzogc3RyaW5nO1xuXHRkaXNhYmxlZD86IGJvb2xlYW47XG59XG5cbnR5cGUgRmlsdGVyRnVuY3Rpb248VCBleHRlbmRzIE9wdGlvbkxpa2U+ID0gKHNlYXJjaDogc3RyaW5nLCBvcHQ6IFQpID0+IGJvb2xlYW47XG5cbmZ1bmN0aW9uIGdldEN1cnNvckZvclZhbHVlPFQgZXh0ZW5kcyBPcHRpb25MaWtlPihcblx0c2VsZWN0ZWQ6IFRbJ3ZhbHVlJ10gfCB1bmRlZmluZWQsXG5cdGl0ZW1zOiBUW11cbik6IG51bWJlciB7XG5cdGlmIChzZWxlY3RlZCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIDA7XG5cdH1cblxuXHRjb25zdCBjdXJyTGVuZ3RoID0gaXRlbXMubGVuZ3RoO1xuXG5cdC8vIElmIGZpbHRlcmluZyBjaGFuZ2VkIHRoZSBhdmFpbGFibGUgb3B0aW9ucywgdXBkYXRlIGN1cnNvclxuXHRpZiAoY3Vyckxlbmd0aCA9PT0gMCkge1xuXHRcdHJldHVybiAwO1xuXHR9XG5cblx0Ly8gVHJ5IHRvIG1haW50YWluIHRoZSBzYW1lIHNlbGVjdGVkIGl0ZW1cblx0Y29uc3QgaW5kZXggPSBpdGVtcy5maW5kSW5kZXgoKGl0ZW0pID0+IGl0ZW0udmFsdWUgPT09IHNlbGVjdGVkKTtcblx0cmV0dXJuIGluZGV4ICE9PSAtMSA/IGluZGV4IDogMDtcbn1cblxuZnVuY3Rpb24gZGVmYXVsdEZpbHRlcjxUIGV4dGVuZHMgT3B0aW9uTGlrZT4oaW5wdXQ6IHN0cmluZywgb3B0aW9uOiBUKTogYm9vbGVhbiB7XG5cdGNvbnN0IGxhYmVsID0gb3B0aW9uLmxhYmVsID8/IFN0cmluZyhvcHRpb24udmFsdWUpO1xuXHRyZXR1cm4gbGFiZWwudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhpbnB1dC50b0xvd2VyQ2FzZSgpKTtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXNlZFZhbHVlPFQ+KG11bHRpcGxlOiBib29sZWFuLCB2YWx1ZXM6IFRbXSB8IHVuZGVmaW5lZCk6IFQgfCBUW10gfCB1bmRlZmluZWQge1xuXHRpZiAoIXZhbHVlcykge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblx0aWYgKG11bHRpcGxlKSB7XG5cdFx0cmV0dXJuIHZhbHVlcztcblx0fVxuXHRyZXR1cm4gdmFsdWVzWzBdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEF1dG9jb21wbGV0ZU9wdGlvbnM8VCBleHRlbmRzIE9wdGlvbkxpa2U+XG5cdGV4dGVuZHMgUHJvbXB0T3B0aW9uczxUWyd2YWx1ZSddIHwgVFsndmFsdWUnXVtdLCBBdXRvY29tcGxldGVQcm9tcHQ8VD4+IHtcblx0b3B0aW9uczogVFtdIHwgKCh0aGlzOiBBdXRvY29tcGxldGVQcm9tcHQ8VD4pID0+IFRbXSk7XG5cdGZpbHRlcj86IEZpbHRlckZ1bmN0aW9uPFQ+O1xuXHRtdWx0aXBsZT86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEF1dG9jb21wbGV0ZVByb21wdDxUIGV4dGVuZHMgT3B0aW9uTGlrZT4gZXh0ZW5kcyBQcm9tcHQ8XG5cdFRbJ3ZhbHVlJ10gfCBUWyd2YWx1ZSddW11cbj4ge1xuXHRmaWx0ZXJlZE9wdGlvbnM6IFRbXTtcblx0bXVsdGlwbGU6IGJvb2xlYW47XG5cdGlzTmF2aWdhdGluZyA9IGZhbHNlO1xuXHRzZWxlY3RlZFZhbHVlczogQXJyYXk8VFsndmFsdWUnXT4gPSBbXTtcblxuXHRmb2N1c2VkVmFsdWU6IFRbJ3ZhbHVlJ10gfCB1bmRlZmluZWQ7XG5cdCNjdXJzb3IgPSAwO1xuXHQjbGFzdFVzZXJJbnB1dCA9ICcnO1xuXHQjZmlsdGVyRm46IEZpbHRlckZ1bmN0aW9uPFQ+O1xuXHQjb3B0aW9uczogVFtdIHwgKCgpID0+IFRbXSk7XG5cblx0Z2V0IGN1cnNvcigpOiBudW1iZXIge1xuXHRcdHJldHVybiB0aGlzLiNjdXJzb3I7XG5cdH1cblxuXHRnZXQgdXNlcklucHV0V2l0aEN1cnNvcigpIHtcblx0XHRpZiAoIXRoaXMudXNlcklucHV0KSB7XG5cdFx0XHRyZXR1cm4gY29sb3IuaW52ZXJzZShjb2xvci5oaWRkZW4oJ18nKSk7XG5cdFx0fVxuXHRcdGlmICh0aGlzLl9jdXJzb3IgPj0gdGhpcy51c2VySW5wdXQubGVuZ3RoKSB7XG5cdFx0XHRyZXR1cm4gYCR7dGhpcy51c2VySW5wdXR94paIYDtcblx0XHR9XG5cdFx0Y29uc3QgczEgPSB0aGlzLnVzZXJJbnB1dC5zbGljZSgwLCB0aGlzLl9jdXJzb3IpO1xuXHRcdGNvbnN0IFtzMiwgLi4uczNdID0gdGhpcy51c2VySW5wdXQuc2xpY2UodGhpcy5fY3Vyc29yKTtcblx0XHRyZXR1cm4gYCR7czF9JHtjb2xvci5pbnZlcnNlKHMyKX0ke3MzLmpvaW4oJycpfWA7XG5cdH1cblxuXHRnZXQgb3B0aW9ucygpOiBUW10ge1xuXHRcdGlmICh0eXBlb2YgdGhpcy4jb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0cmV0dXJuIHRoaXMuI29wdGlvbnMoKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuI29wdGlvbnM7XG5cdH1cblxuXHRjb25zdHJ1Y3RvcihvcHRzOiBBdXRvY29tcGxldGVPcHRpb25zPFQ+KSB7XG5cdFx0c3VwZXIob3B0cyk7XG5cblx0XHR0aGlzLiNvcHRpb25zID0gb3B0cy5vcHRpb25zO1xuXHRcdGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG5cdFx0dGhpcy5maWx0ZXJlZE9wdGlvbnMgPSBbLi4ub3B0aW9uc107XG5cdFx0dGhpcy5tdWx0aXBsZSA9IG9wdHMubXVsdGlwbGUgPT09IHRydWU7XG5cdFx0dGhpcy4jZmlsdGVyRm4gPSBvcHRzLmZpbHRlciA/PyBkZWZhdWx0RmlsdGVyO1xuXHRcdGxldCBpbml0aWFsVmFsdWVzOiB1bmtub3duW10gfCB1bmRlZmluZWQ7XG5cdFx0aWYgKG9wdHMuaW5pdGlhbFZhbHVlICYmIEFycmF5LmlzQXJyYXkob3B0cy5pbml0aWFsVmFsdWUpKSB7XG5cdFx0XHRpZiAodGhpcy5tdWx0aXBsZSkge1xuXHRcdFx0XHRpbml0aWFsVmFsdWVzID0gb3B0cy5pbml0aWFsVmFsdWU7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpbml0aWFsVmFsdWVzID0gb3B0cy5pbml0aWFsVmFsdWUuc2xpY2UoMCwgMSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmICghdGhpcy5tdWx0aXBsZSAmJiB0aGlzLm9wdGlvbnMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRpbml0aWFsVmFsdWVzID0gW3RoaXMub3B0aW9uc1swXS52YWx1ZV07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGluaXRpYWxWYWx1ZXMpIHtcblx0XHRcdGZvciAoY29uc3Qgc2VsZWN0ZWRWYWx1ZSBvZiBpbml0aWFsVmFsdWVzKSB7XG5cdFx0XHRcdGNvbnN0IHNlbGVjdGVkSW5kZXggPSBvcHRpb25zLmZpbmRJbmRleCgob3B0KSA9PiBvcHQudmFsdWUgPT09IHNlbGVjdGVkVmFsdWUpO1xuXHRcdFx0XHRpZiAoc2VsZWN0ZWRJbmRleCAhPT0gLTEpIHtcblx0XHRcdFx0XHR0aGlzLnRvZ2dsZVNlbGVjdGVkKHNlbGVjdGVkVmFsdWUpO1xuXHRcdFx0XHRcdHRoaXMuI2N1cnNvciA9IHNlbGVjdGVkSW5kZXg7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHR0aGlzLmZvY3VzZWRWYWx1ZSA9IHRoaXMub3B0aW9uc1t0aGlzLiNjdXJzb3JdPy52YWx1ZTtcblxuXHRcdHRoaXMub24oJ2tleScsIChjaGFyLCBrZXkpID0+IHRoaXMuI29uS2V5KGNoYXIsIGtleSkpO1xuXHRcdHRoaXMub24oJ3VzZXJJbnB1dCcsICh2YWx1ZSkgPT4gdGhpcy4jb25Vc2VySW5wdXRDaGFuZ2VkKHZhbHVlKSk7XG5cdH1cblxuXHRwcm90ZWN0ZWQgb3ZlcnJpZGUgX2lzQWN0aW9uS2V5KGNoYXI6IHN0cmluZyB8IHVuZGVmaW5lZCwga2V5OiBLZXkpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0Y2hhciA9PT0gJ1xcdCcgfHxcblx0XHRcdCh0aGlzLm11bHRpcGxlICYmXG5cdFx0XHRcdHRoaXMuaXNOYXZpZ2F0aW5nICYmXG5cdFx0XHRcdGtleS5uYW1lID09PSAnc3BhY2UnICYmXG5cdFx0XHRcdGNoYXIgIT09IHVuZGVmaW5lZCAmJlxuXHRcdFx0XHRjaGFyICE9PSAnJylcblx0XHQpO1xuXHR9XG5cblx0I29uS2V5KF9jaGFyOiBzdHJpbmcgfCB1bmRlZmluZWQsIGtleTogS2V5KTogdm9pZCB7XG5cdFx0Y29uc3QgaXNVcEtleSA9IGtleS5uYW1lID09PSAndXAnO1xuXHRcdGNvbnN0IGlzRG93bktleSA9IGtleS5uYW1lID09PSAnZG93bic7XG5cdFx0Y29uc3QgaXNSZXR1cm5LZXkgPSBrZXkubmFtZSA9PT0gJ3JldHVybic7XG5cblx0XHQvLyBTdGFydCBuYXZpZ2F0aW9uIG1vZGUgd2l0aCB1cC9kb3duIGFycm93c1xuXHRcdGlmIChpc1VwS2V5IHx8IGlzRG93bktleSkge1xuXHRcdFx0dGhpcy4jY3Vyc29yID0gZmluZEN1cnNvcih0aGlzLiNjdXJzb3IsIGlzVXBLZXkgPyAtMSA6IDEsIHRoaXMuZmlsdGVyZWRPcHRpb25zKTtcblx0XHRcdHRoaXMuZm9jdXNlZFZhbHVlID0gdGhpcy5maWx0ZXJlZE9wdGlvbnNbdGhpcy4jY3Vyc29yXT8udmFsdWU7XG5cdFx0XHRpZiAoIXRoaXMubXVsdGlwbGUpIHtcblx0XHRcdFx0dGhpcy5zZWxlY3RlZFZhbHVlcyA9IFt0aGlzLmZvY3VzZWRWYWx1ZV07XG5cdFx0XHR9XG5cdFx0XHR0aGlzLmlzTmF2aWdhdGluZyA9IHRydWU7XG5cdFx0fSBlbHNlIGlmIChpc1JldHVybktleSkge1xuXHRcdFx0dGhpcy52YWx1ZSA9IG5vcm1hbGlzZWRWYWx1ZSh0aGlzLm11bHRpcGxlLCB0aGlzLnNlbGVjdGVkVmFsdWVzKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKHRoaXMubXVsdGlwbGUpIHtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdHRoaXMuZm9jdXNlZFZhbHVlICE9PSB1bmRlZmluZWQgJiZcblx0XHRcdFx0XHQoa2V5Lm5hbWUgPT09ICd0YWInIHx8ICh0aGlzLmlzTmF2aWdhdGluZyAmJiBrZXkubmFtZSA9PT0gJ3NwYWNlJykpXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHRoaXMudG9nZ2xlU2VsZWN0ZWQodGhpcy5mb2N1c2VkVmFsdWUpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRoaXMuaXNOYXZpZ2F0aW5nID0gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlmICh0aGlzLmZvY3VzZWRWYWx1ZSkge1xuXHRcdFx0XHRcdHRoaXMuc2VsZWN0ZWRWYWx1ZXMgPSBbdGhpcy5mb2N1c2VkVmFsdWVdO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuaXNOYXZpZ2F0aW5nID0gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0ZGVzZWxlY3RBbGwoKSB7XG5cdFx0dGhpcy5zZWxlY3RlZFZhbHVlcyA9IFtdO1xuXHR9XG5cblx0dG9nZ2xlU2VsZWN0ZWQodmFsdWU6IFRbJ3ZhbHVlJ10pIHtcblx0XHRpZiAodGhpcy5maWx0ZXJlZE9wdGlvbnMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMubXVsdGlwbGUpIHtcblx0XHRcdGlmICh0aGlzLnNlbGVjdGVkVmFsdWVzLmluY2x1ZGVzKHZhbHVlKSkge1xuXHRcdFx0XHR0aGlzLnNlbGVjdGVkVmFsdWVzID0gdGhpcy5zZWxlY3RlZFZhbHVlcy5maWx0ZXIoKHYpID0+IHYgIT09IHZhbHVlKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuc2VsZWN0ZWRWYWx1ZXMgPSBbLi4udGhpcy5zZWxlY3RlZFZhbHVlcywgdmFsdWVdO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNlbGVjdGVkVmFsdWVzID0gW3ZhbHVlXTtcblx0XHR9XG5cdH1cblxuXHQjb25Vc2VySW5wdXRDaGFuZ2VkKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcblx0XHRpZiAodmFsdWUgIT09IHRoaXMuI2xhc3RVc2VySW5wdXQpIHtcblx0XHRcdHRoaXMuI2xhc3RVc2VySW5wdXQgPSB2YWx1ZTtcblxuXHRcdFx0Y29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcblxuXHRcdFx0aWYgKHZhbHVlKSB7XG5cdFx0XHRcdHRoaXMuZmlsdGVyZWRPcHRpb25zID0gb3B0aW9ucy5maWx0ZXIoKG9wdCkgPT4gdGhpcy4jZmlsdGVyRm4odmFsdWUsIG9wdCkpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5maWx0ZXJlZE9wdGlvbnMgPSBbLi4ub3B0aW9uc107XG5cdFx0XHR9XG5cdFx0XHRjb25zdCB2YWx1ZUN1cnNvciA9IGdldEN1cnNvckZvclZhbHVlKHRoaXMuZm9jdXNlZFZhbHVlLCB0aGlzLmZpbHRlcmVkT3B0aW9ucyk7XG5cdFx0XHR0aGlzLiNjdXJzb3IgPSBmaW5kQ3Vyc29yKHZhbHVlQ3Vyc29yLCAwLCB0aGlzLmZpbHRlcmVkT3B0aW9ucyk7XG5cdFx0XHRjb25zdCBmb2N1c2VkT3B0aW9uID0gdGhpcy5maWx0ZXJlZE9wdGlvbnNbdGhpcy4jY3Vyc29yXTtcblx0XHRcdGlmIChmb2N1c2VkT3B0aW9uICYmICFmb2N1c2VkT3B0aW9uLmRpc2FibGVkKSB7XG5cdFx0XHRcdHRoaXMuZm9jdXNlZFZhbHVlID0gZm9jdXNlZE9wdGlvbi52YWx1ZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuZm9jdXNlZFZhbHVlID0gdW5kZWZpbmVkO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCF0aGlzLm11bHRpcGxlKSB7XG5cdFx0XHRcdGlmICh0aGlzLmZvY3VzZWRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0dGhpcy50b2dnbGVTZWxlY3RlZCh0aGlzLmZvY3VzZWRWYWx1ZSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGhpcy5kZXNlbGVjdEFsbCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG4iLCAiaW1wb3J0IHsgY3Vyc29yIH0gZnJvbSAnc2lzdGVyYW5zaSc7XG5pbXBvcnQgUHJvbXB0LCB7IHR5cGUgUHJvbXB0T3B0aW9ucyB9IGZyb20gJy4vcHJvbXB0LmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBDb25maXJtT3B0aW9ucyBleHRlbmRzIFByb21wdE9wdGlvbnM8Ym9vbGVhbiwgQ29uZmlybVByb21wdD4ge1xuXHRhY3RpdmU6IHN0cmluZztcblx0aW5hY3RpdmU6IHN0cmluZztcblx0aW5pdGlhbFZhbHVlPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29uZmlybVByb21wdCBleHRlbmRzIFByb21wdDxib29sZWFuPiB7XG5cdGdldCBjdXJzb3IoKSB7XG5cdFx0cmV0dXJuIHRoaXMudmFsdWUgPyAwIDogMTtcblx0fVxuXG5cdHByaXZhdGUgZ2V0IF92YWx1ZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5jdXJzb3IgPT09IDA7XG5cdH1cblxuXHRjb25zdHJ1Y3RvcihvcHRzOiBDb25maXJtT3B0aW9ucykge1xuXHRcdHN1cGVyKG9wdHMsIGZhbHNlKTtcblx0XHR0aGlzLnZhbHVlID0gISFvcHRzLmluaXRpYWxWYWx1ZTtcblxuXHRcdHRoaXMub24oJ3VzZXJJbnB1dCcsICgpID0+IHtcblx0XHRcdHRoaXMudmFsdWUgPSB0aGlzLl92YWx1ZTtcblx0XHR9KTtcblxuXHRcdHRoaXMub24oJ2NvbmZpcm0nLCAoY29uZmlybSkgPT4ge1xuXHRcdFx0dGhpcy5vdXRwdXQud3JpdGUoY3Vyc29yLm1vdmUoMCwgLTEpKTtcblx0XHRcdHRoaXMudmFsdWUgPSBjb25maXJtO1xuXHRcdFx0dGhpcy5zdGF0ZSA9ICdzdWJtaXQnO1xuXHRcdFx0dGhpcy5jbG9zZSgpO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5vbignY3Vyc29yJywgKCkgPT4ge1xuXHRcdFx0dGhpcy52YWx1ZSA9ICF0aGlzLnZhbHVlO1xuXHRcdH0pO1xuXHR9XG59XG4iLCAiaW1wb3J0IFByb21wdCwgeyB0eXBlIFByb21wdE9wdGlvbnMgfSBmcm9tICcuL3Byb21wdC5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgR3JvdXBNdWx0aVNlbGVjdE9wdGlvbnM8VCBleHRlbmRzIHsgdmFsdWU6IGFueSB9PlxuXHRleHRlbmRzIFByb21wdE9wdGlvbnM8VFsndmFsdWUnXVtdLCBHcm91cE11bHRpU2VsZWN0UHJvbXB0PFQ+PiB7XG5cdG9wdGlvbnM6IFJlY29yZDxzdHJpbmcsIFRbXT47XG5cdGluaXRpYWxWYWx1ZXM/OiBUWyd2YWx1ZSddW107XG5cdHJlcXVpcmVkPzogYm9vbGVhbjtcblx0Y3Vyc29yQXQ/OiBUWyd2YWx1ZSddO1xuXHRzZWxlY3RhYmxlR3JvdXBzPzogYm9vbGVhbjtcbn1cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEdyb3VwTXVsdGlTZWxlY3RQcm9tcHQ8VCBleHRlbmRzIHsgdmFsdWU6IGFueSB9PiBleHRlbmRzIFByb21wdDxUWyd2YWx1ZSddW10+IHtcblx0b3B0aW9uczogKFQgJiB7IGdyb3VwOiBzdHJpbmcgfCBib29sZWFuIH0pW107XG5cdGN1cnNvciA9IDA7XG5cdCNzZWxlY3RhYmxlR3JvdXBzOiBib29sZWFuO1xuXG5cdGdldEdyb3VwSXRlbXMoZ3JvdXA6IHN0cmluZyk6IFRbXSB7XG5cdFx0cmV0dXJuIHRoaXMub3B0aW9ucy5maWx0ZXIoKG8pID0+IG8uZ3JvdXAgPT09IGdyb3VwKTtcblx0fVxuXG5cdGlzR3JvdXBTZWxlY3RlZChncm91cDogc3RyaW5nKSB7XG5cdFx0Y29uc3QgaXRlbXMgPSB0aGlzLmdldEdyb3VwSXRlbXMoZ3JvdXApO1xuXHRcdGNvbnN0IHZhbHVlID0gdGhpcy52YWx1ZTtcblx0XHRpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gaXRlbXMuZXZlcnkoKGkpID0+IHZhbHVlLmluY2x1ZGVzKGkudmFsdWUpKTtcblx0fVxuXG5cdHByaXZhdGUgdG9nZ2xlVmFsdWUoKSB7XG5cdFx0Y29uc3QgaXRlbSA9IHRoaXMub3B0aW9uc1t0aGlzLmN1cnNvcl07XG5cdFx0aWYgKHRoaXMudmFsdWUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhpcy52YWx1ZSA9IFtdO1xuXHRcdH1cblx0XHRpZiAoaXRlbS5ncm91cCA9PT0gdHJ1ZSkge1xuXHRcdFx0Y29uc3QgZ3JvdXAgPSBpdGVtLnZhbHVlO1xuXHRcdFx0Y29uc3QgZ3JvdXBlZEl0ZW1zID0gdGhpcy5nZXRHcm91cEl0ZW1zKGdyb3VwKTtcblx0XHRcdGlmICh0aGlzLmlzR3JvdXBTZWxlY3RlZChncm91cCkpIHtcblx0XHRcdFx0dGhpcy52YWx1ZSA9IHRoaXMudmFsdWUuZmlsdGVyKFxuXHRcdFx0XHRcdCh2OiBzdHJpbmcpID0+IGdyb3VwZWRJdGVtcy5maW5kSW5kZXgoKGkpID0+IGkudmFsdWUgPT09IHYpID09PSAtMVxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy52YWx1ZSA9IFsuLi50aGlzLnZhbHVlLCAuLi5ncm91cGVkSXRlbXMubWFwKChpKSA9PiBpLnZhbHVlKV07XG5cdFx0XHR9XG5cdFx0XHR0aGlzLnZhbHVlID0gQXJyYXkuZnJvbShuZXcgU2V0KHRoaXMudmFsdWUpKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3Qgc2VsZWN0ZWQgPSB0aGlzLnZhbHVlLmluY2x1ZGVzKGl0ZW0udmFsdWUpO1xuXHRcdFx0dGhpcy52YWx1ZSA9IHNlbGVjdGVkXG5cdFx0XHRcdD8gdGhpcy52YWx1ZS5maWx0ZXIoKHY6IFRbJ3ZhbHVlJ10pID0+IHYgIT09IGl0ZW0udmFsdWUpXG5cdFx0XHRcdDogWy4uLnRoaXMudmFsdWUsIGl0ZW0udmFsdWVdO1xuXHRcdH1cblx0fVxuXG5cdGNvbnN0cnVjdG9yKG9wdHM6IEdyb3VwTXVsdGlTZWxlY3RPcHRpb25zPFQ+KSB7XG5cdFx0c3VwZXIob3B0cywgZmFsc2UpO1xuXHRcdGNvbnN0IHsgb3B0aW9ucyB9ID0gb3B0cztcblx0XHR0aGlzLiNzZWxlY3RhYmxlR3JvdXBzID0gb3B0cy5zZWxlY3RhYmxlR3JvdXBzICE9PSBmYWxzZTtcblx0XHR0aGlzLm9wdGlvbnMgPSBPYmplY3QuZW50cmllcyhvcHRpb25zKS5mbGF0TWFwKChba2V5LCBvcHRpb25dKSA9PiBbXG5cdFx0XHR7IHZhbHVlOiBrZXksIGdyb3VwOiB0cnVlLCBsYWJlbDoga2V5IH0sXG5cdFx0XHQuLi5vcHRpb24ubWFwKChvcHQpID0+ICh7IC4uLm9wdCwgZ3JvdXA6IGtleSB9KSksXG5cdFx0XSkgYXMgYW55O1xuXHRcdHRoaXMudmFsdWUgPSBbLi4uKG9wdHMuaW5pdGlhbFZhbHVlcyA/PyBbXSldO1xuXHRcdHRoaXMuY3Vyc29yID0gTWF0aC5tYXgoXG5cdFx0XHR0aGlzLm9wdGlvbnMuZmluZEluZGV4KCh7IHZhbHVlIH0pID0+IHZhbHVlID09PSBvcHRzLmN1cnNvckF0KSxcblx0XHRcdHRoaXMuI3NlbGVjdGFibGVHcm91cHMgPyAwIDogMVxuXHRcdCk7XG5cblx0XHR0aGlzLm9uKCdjdXJzb3InLCAoa2V5KSA9PiB7XG5cdFx0XHRzd2l0Y2ggKGtleSkge1xuXHRcdFx0XHRjYXNlICdsZWZ0Jzpcblx0XHRcdFx0Y2FzZSAndXAnOiB7XG5cdFx0XHRcdFx0dGhpcy5jdXJzb3IgPSB0aGlzLmN1cnNvciA9PT0gMCA/IHRoaXMub3B0aW9ucy5sZW5ndGggLSAxIDogdGhpcy5jdXJzb3IgLSAxO1xuXHRcdFx0XHRcdGNvbnN0IGN1cnJlbnRJc0dyb3VwID0gdGhpcy5vcHRpb25zW3RoaXMuY3Vyc29yXT8uZ3JvdXAgPT09IHRydWU7XG5cdFx0XHRcdFx0aWYgKCF0aGlzLiNzZWxlY3RhYmxlR3JvdXBzICYmIGN1cnJlbnRJc0dyb3VwKSB7XG5cdFx0XHRcdFx0XHR0aGlzLmN1cnNvciA9IHRoaXMuY3Vyc29yID09PSAwID8gdGhpcy5vcHRpb25zLmxlbmd0aCAtIDEgOiB0aGlzLmN1cnNvciAtIDE7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNhc2UgJ2Rvd24nOlxuXHRcdFx0XHRjYXNlICdyaWdodCc6IHtcblx0XHRcdFx0XHR0aGlzLmN1cnNvciA9IHRoaXMuY3Vyc29yID09PSB0aGlzLm9wdGlvbnMubGVuZ3RoIC0gMSA/IDAgOiB0aGlzLmN1cnNvciArIDE7XG5cdFx0XHRcdFx0Y29uc3QgY3VycmVudElzR3JvdXAgPSB0aGlzLm9wdGlvbnNbdGhpcy5jdXJzb3JdPy5ncm91cCA9PT0gdHJ1ZTtcblx0XHRcdFx0XHRpZiAoIXRoaXMuI3NlbGVjdGFibGVHcm91cHMgJiYgY3VycmVudElzR3JvdXApIHtcblx0XHRcdFx0XHRcdHRoaXMuY3Vyc29yID0gdGhpcy5jdXJzb3IgPT09IHRoaXMub3B0aW9ucy5sZW5ndGggLSAxID8gMCA6IHRoaXMuY3Vyc29yICsgMTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y2FzZSAnc3BhY2UnOlxuXHRcdFx0XHRcdHRoaXMudG9nZ2xlVmFsdWUoKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9KTtcblx0fVxufVxuIiwgImltcG9ydCB7IGZpbmRDdXJzb3IgfSBmcm9tICcuLi91dGlscy9jdXJzb3IuanMnO1xuaW1wb3J0IFByb21wdCwgeyB0eXBlIFByb21wdE9wdGlvbnMgfSBmcm9tICcuL3Byb21wdC5qcyc7XG5cbmludGVyZmFjZSBPcHRpb25MaWtlIHtcblx0dmFsdWU6IGFueTtcblx0ZGlzYWJsZWQ/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE11bHRpU2VsZWN0T3B0aW9uczxUIGV4dGVuZHMgT3B0aW9uTGlrZT5cblx0ZXh0ZW5kcyBQcm9tcHRPcHRpb25zPFRbJ3ZhbHVlJ11bXSwgTXVsdGlTZWxlY3RQcm9tcHQ8VD4+IHtcblx0b3B0aW9uczogVFtdO1xuXHRpbml0aWFsVmFsdWVzPzogVFsndmFsdWUnXVtdO1xuXHRyZXF1aXJlZD86IGJvb2xlYW47XG5cdGN1cnNvckF0PzogVFsndmFsdWUnXTtcbn1cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE11bHRpU2VsZWN0UHJvbXB0PFQgZXh0ZW5kcyBPcHRpb25MaWtlPiBleHRlbmRzIFByb21wdDxUWyd2YWx1ZSddW10+IHtcblx0b3B0aW9uczogVFtdO1xuXHRjdXJzb3IgPSAwO1xuXG5cdHByaXZhdGUgZ2V0IF92YWx1ZSgpOiBUWyd2YWx1ZSddIHtcblx0XHRyZXR1cm4gdGhpcy5vcHRpb25zW3RoaXMuY3Vyc29yXS52YWx1ZTtcblx0fVxuXG5cdHByaXZhdGUgZ2V0IF9lbmFibGVkT3B0aW9ucygpOiBUW10ge1xuXHRcdHJldHVybiB0aGlzLm9wdGlvbnMuZmlsdGVyKChvcHRpb24pID0+IG9wdGlvbi5kaXNhYmxlZCAhPT0gdHJ1ZSk7XG5cdH1cblxuXHRwcml2YXRlIHRvZ2dsZUFsbCgpIHtcblx0XHRjb25zdCBlbmFibGVkT3B0aW9ucyA9IHRoaXMuX2VuYWJsZWRPcHRpb25zO1xuXHRcdGNvbnN0IGFsbFNlbGVjdGVkID0gdGhpcy52YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHRoaXMudmFsdWUubGVuZ3RoID09PSBlbmFibGVkT3B0aW9ucy5sZW5ndGg7XG5cdFx0dGhpcy52YWx1ZSA9IGFsbFNlbGVjdGVkID8gW10gOiBlbmFibGVkT3B0aW9ucy5tYXAoKHYpID0+IHYudmFsdWUpO1xuXHR9XG5cblx0cHJpdmF0ZSB0b2dnbGVJbnZlcnQoKSB7XG5cdFx0Y29uc3QgdmFsdWUgPSB0aGlzLnZhbHVlO1xuXHRcdGlmICghdmFsdWUpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3Qgbm90U2VsZWN0ZWQgPSB0aGlzLl9lbmFibGVkT3B0aW9ucy5maWx0ZXIoKHYpID0+ICF2YWx1ZS5pbmNsdWRlcyh2LnZhbHVlKSk7XG5cdFx0dGhpcy52YWx1ZSA9IG5vdFNlbGVjdGVkLm1hcCgodikgPT4gdi52YWx1ZSk7XG5cdH1cblxuXHRwcml2YXRlIHRvZ2dsZVZhbHVlKCkge1xuXHRcdGlmICh0aGlzLnZhbHVlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHRoaXMudmFsdWUgPSBbXTtcblx0XHR9XG5cdFx0Y29uc3Qgc2VsZWN0ZWQgPSB0aGlzLnZhbHVlLmluY2x1ZGVzKHRoaXMuX3ZhbHVlKTtcblx0XHR0aGlzLnZhbHVlID0gc2VsZWN0ZWRcblx0XHRcdD8gdGhpcy52YWx1ZS5maWx0ZXIoKHZhbHVlKSA9PiB2YWx1ZSAhPT0gdGhpcy5fdmFsdWUpXG5cdFx0XHQ6IFsuLi50aGlzLnZhbHVlLCB0aGlzLl92YWx1ZV07XG5cdH1cblxuXHRjb25zdHJ1Y3RvcihvcHRzOiBNdWx0aVNlbGVjdE9wdGlvbnM8VD4pIHtcblx0XHRzdXBlcihvcHRzLCBmYWxzZSk7XG5cblx0XHR0aGlzLm9wdGlvbnMgPSBvcHRzLm9wdGlvbnM7XG5cdFx0dGhpcy52YWx1ZSA9IFsuLi4ob3B0cy5pbml0aWFsVmFsdWVzID8/IFtdKV07XG5cdFx0Y29uc3QgY3Vyc29yID0gTWF0aC5tYXgoXG5cdFx0XHR0aGlzLm9wdGlvbnMuZmluZEluZGV4KCh7IHZhbHVlIH0pID0+IHZhbHVlID09PSBvcHRzLmN1cnNvckF0KSxcblx0XHRcdDBcblx0XHQpO1xuXHRcdHRoaXMuY3Vyc29yID0gdGhpcy5vcHRpb25zW2N1cnNvcl0uZGlzYWJsZWQgPyBmaW5kQ3Vyc29yPFQ+KGN1cnNvciwgMSwgdGhpcy5vcHRpb25zKSA6IGN1cnNvcjtcblx0XHR0aGlzLm9uKCdrZXknLCAoY2hhcikgPT4ge1xuXHRcdFx0aWYgKGNoYXIgPT09ICdhJykge1xuXHRcdFx0XHR0aGlzLnRvZ2dsZUFsbCgpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGNoYXIgPT09ICdpJykge1xuXHRcdFx0XHR0aGlzLnRvZ2dsZUludmVydCgpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0dGhpcy5vbignY3Vyc29yJywgKGtleSkgPT4ge1xuXHRcdFx0c3dpdGNoIChrZXkpIHtcblx0XHRcdFx0Y2FzZSAnbGVmdCc6XG5cdFx0XHRcdGNhc2UgJ3VwJzpcblx0XHRcdFx0XHR0aGlzLmN1cnNvciA9IGZpbmRDdXJzb3I8VD4odGhpcy5jdXJzb3IsIC0xLCB0aGlzLm9wdGlvbnMpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICdkb3duJzpcblx0XHRcdFx0Y2FzZSAncmlnaHQnOlxuXHRcdFx0XHRcdHRoaXMuY3Vyc29yID0gZmluZEN1cnNvcjxUPih0aGlzLmN1cnNvciwgMSwgdGhpcy5vcHRpb25zKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAnc3BhY2UnOlxuXHRcdFx0XHRcdHRoaXMudG9nZ2xlVmFsdWUoKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9KTtcblx0fVxufVxuIiwgImltcG9ydCBjb2xvciBmcm9tICdwaWNvY29sb3JzJztcbmltcG9ydCBQcm9tcHQsIHsgdHlwZSBQcm9tcHRPcHRpb25zIH0gZnJvbSAnLi9wcm9tcHQuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFBhc3N3b3JkT3B0aW9ucyBleHRlbmRzIFByb21wdE9wdGlvbnM8c3RyaW5nLCBQYXNzd29yZFByb21wdD4ge1xuXHRtYXNrPzogc3RyaW5nO1xufVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGFzc3dvcmRQcm9tcHQgZXh0ZW5kcyBQcm9tcHQ8c3RyaW5nPiB7XG5cdHByaXZhdGUgX21hc2sgPSAn4oCiJztcblx0Z2V0IGN1cnNvcigpIHtcblx0XHRyZXR1cm4gdGhpcy5fY3Vyc29yO1xuXHR9XG5cdGdldCBtYXNrZWQoKSB7XG5cdFx0cmV0dXJuIHRoaXMudXNlcklucHV0LnJlcGxhY2VBbGwoLy4vZywgdGhpcy5fbWFzayk7XG5cdH1cblx0Z2V0IHVzZXJJbnB1dFdpdGhDdXJzb3IoKSB7XG5cdFx0aWYgKHRoaXMuc3RhdGUgPT09ICdzdWJtaXQnIHx8IHRoaXMuc3RhdGUgPT09ICdjYW5jZWwnKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5tYXNrZWQ7XG5cdFx0fVxuXHRcdGNvbnN0IHVzZXJJbnB1dCA9IHRoaXMudXNlcklucHV0O1xuXHRcdGlmICh0aGlzLmN1cnNvciA+PSB1c2VySW5wdXQubGVuZ3RoKSB7XG5cdFx0XHRyZXR1cm4gYCR7dGhpcy5tYXNrZWR9JHtjb2xvci5pbnZlcnNlKGNvbG9yLmhpZGRlbignXycpKX1gO1xuXHRcdH1cblx0XHRjb25zdCBtYXNrZWQgPSB0aGlzLm1hc2tlZDtcblx0XHRjb25zdCBzMSA9IG1hc2tlZC5zbGljZSgwLCB0aGlzLmN1cnNvcik7XG5cdFx0Y29uc3QgczIgPSBtYXNrZWQuc2xpY2UodGhpcy5jdXJzb3IpO1xuXHRcdHJldHVybiBgJHtzMX0ke2NvbG9yLmludmVyc2UoczJbMF0pfSR7czIuc2xpY2UoMSl9YDtcblx0fVxuXHRjbGVhcigpIHtcblx0XHR0aGlzLl9jbGVhclVzZXJJbnB1dCgpO1xuXHR9XG5cdGNvbnN0cnVjdG9yKHsgbWFzaywgLi4ub3B0cyB9OiBQYXNzd29yZE9wdGlvbnMpIHtcblx0XHRzdXBlcihvcHRzKTtcblx0XHR0aGlzLl9tYXNrID0gbWFzayA/PyAn4oCiJztcblx0XHR0aGlzLm9uKCd1c2VySW5wdXQnLCAoaW5wdXQpID0+IHtcblx0XHRcdHRoaXMuX3NldFZhbHVlKGlucHV0KTtcblx0XHR9KTtcblx0fVxufVxuIiwgImltcG9ydCB7IGZpbmRDdXJzb3IgfSBmcm9tICcuLi91dGlscy9jdXJzb3IuanMnO1xuaW1wb3J0IFByb21wdCwgeyB0eXBlIFByb21wdE9wdGlvbnMgfSBmcm9tICcuL3Byb21wdC5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VsZWN0T3B0aW9uczxUIGV4dGVuZHMgeyB2YWx1ZTogYW55OyBkaXNhYmxlZD86IGJvb2xlYW4gfT5cblx0ZXh0ZW5kcyBQcm9tcHRPcHRpb25zPFRbJ3ZhbHVlJ10sIFNlbGVjdFByb21wdDxUPj4ge1xuXHRvcHRpb25zOiBUW107XG5cdGluaXRpYWxWYWx1ZT86IFRbJ3ZhbHVlJ107XG59XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZWxlY3RQcm9tcHQ8VCBleHRlbmRzIHsgdmFsdWU6IGFueTsgZGlzYWJsZWQ/OiBib29sZWFuIH0+IGV4dGVuZHMgUHJvbXB0PFxuXHRUWyd2YWx1ZSddXG4+IHtcblx0b3B0aW9uczogVFtdO1xuXHRjdXJzb3IgPSAwO1xuXG5cdHByaXZhdGUgZ2V0IF9zZWxlY3RlZFZhbHVlKCkge1xuXHRcdHJldHVybiB0aGlzLm9wdGlvbnNbdGhpcy5jdXJzb3JdO1xuXHR9XG5cblx0cHJpdmF0ZSBjaGFuZ2VWYWx1ZSgpIHtcblx0XHR0aGlzLnZhbHVlID0gdGhpcy5fc2VsZWN0ZWRWYWx1ZS52YWx1ZTtcblx0fVxuXG5cdGNvbnN0cnVjdG9yKG9wdHM6IFNlbGVjdE9wdGlvbnM8VD4pIHtcblx0XHRzdXBlcihvcHRzLCBmYWxzZSk7XG5cblx0XHR0aGlzLm9wdGlvbnMgPSBvcHRzLm9wdGlvbnM7XG5cblx0XHRjb25zdCBpbml0aWFsQ3Vyc29yID0gdGhpcy5vcHRpb25zLmZpbmRJbmRleCgoeyB2YWx1ZSB9KSA9PiB2YWx1ZSA9PT0gb3B0cy5pbml0aWFsVmFsdWUpO1xuXHRcdGNvbnN0IGN1cnNvciA9IGluaXRpYWxDdXJzb3IgPT09IC0xID8gMCA6IGluaXRpYWxDdXJzb3I7XG5cdFx0dGhpcy5jdXJzb3IgPSB0aGlzLm9wdGlvbnNbY3Vyc29yXS5kaXNhYmxlZCA/IGZpbmRDdXJzb3I8VD4oY3Vyc29yLCAxLCB0aGlzLm9wdGlvbnMpIDogY3Vyc29yO1xuXHRcdHRoaXMuY2hhbmdlVmFsdWUoKTtcblxuXHRcdHRoaXMub24oJ2N1cnNvcicsIChrZXkpID0+IHtcblx0XHRcdHN3aXRjaCAoa2V5KSB7XG5cdFx0XHRcdGNhc2UgJ2xlZnQnOlxuXHRcdFx0XHRjYXNlICd1cCc6XG5cdFx0XHRcdFx0dGhpcy5jdXJzb3IgPSBmaW5kQ3Vyc29yPFQ+KHRoaXMuY3Vyc29yLCAtMSwgdGhpcy5vcHRpb25zKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAnZG93bic6XG5cdFx0XHRcdGNhc2UgJ3JpZ2h0Jzpcblx0XHRcdFx0XHR0aGlzLmN1cnNvciA9IGZpbmRDdXJzb3I8VD4odGhpcy5jdXJzb3IsIDEsIHRoaXMub3B0aW9ucyk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLmNoYW5nZVZhbHVlKCk7XG5cdFx0fSk7XG5cdH1cbn1cbiIsICJpbXBvcnQgUHJvbXB0LCB7IHR5cGUgUHJvbXB0T3B0aW9ucyB9IGZyb20gJy4vcHJvbXB0LmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBTZWxlY3RLZXlPcHRpb25zPFQgZXh0ZW5kcyB7IHZhbHVlOiBzdHJpbmcgfT5cblx0ZXh0ZW5kcyBQcm9tcHRPcHRpb25zPFRbJ3ZhbHVlJ10sIFNlbGVjdEtleVByb21wdDxUPj4ge1xuXHRvcHRpb25zOiBUW107XG5cdGNhc2VTZW5zaXRpdmU/OiBib29sZWFuO1xufVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2VsZWN0S2V5UHJvbXB0PFQgZXh0ZW5kcyB7IHZhbHVlOiBzdHJpbmcgfT4gZXh0ZW5kcyBQcm9tcHQ8VFsndmFsdWUnXT4ge1xuXHRvcHRpb25zOiBUW107XG5cdGN1cnNvciA9IDA7XG5cblx0Y29uc3RydWN0b3Iob3B0czogU2VsZWN0S2V5T3B0aW9uczxUPikge1xuXHRcdHN1cGVyKG9wdHMsIGZhbHNlKTtcblxuXHRcdHRoaXMub3B0aW9ucyA9IG9wdHMub3B0aW9ucztcblx0XHRjb25zdCBjYXNlU2Vuc2l0aXZlID0gb3B0cy5jYXNlU2Vuc2l0aXZlID09PSB0cnVlO1xuXHRcdGNvbnN0IGtleXMgPSB0aGlzLm9wdGlvbnMubWFwKCh7IHZhbHVlOiBbaW5pdGlhbF0gfSkgPT4ge1xuXHRcdFx0cmV0dXJuIGNhc2VTZW5zaXRpdmUgPyBpbml0aWFsIDogaW5pdGlhbD8udG9Mb3dlckNhc2UoKTtcblx0XHR9KTtcblx0XHR0aGlzLmN1cnNvciA9IE1hdGgubWF4KGtleXMuaW5kZXhPZihvcHRzLmluaXRpYWxWYWx1ZSksIDApO1xuXG5cdFx0dGhpcy5vbigna2V5JywgKGtleSwga2V5SW5mbykgPT4ge1xuXHRcdFx0aWYgKCFrZXkpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgY2FzZWRLZXkgPSBjYXNlU2Vuc2l0aXZlICYmIGtleUluZm8uc2hpZnQgPyBrZXkudG9VcHBlckNhc2UoKSA6IGtleTtcblx0XHRcdGlmICgha2V5cy5pbmNsdWRlcyhjYXNlZEtleSkpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCB2YWx1ZSA9IHRoaXMub3B0aW9ucy5maW5kKCh7IHZhbHVlOiBbaW5pdGlhbF0gfSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gY2FzZVNlbnNpdGl2ZSA/IGluaXRpYWwgPT09IGNhc2VkS2V5IDogaW5pdGlhbD8udG9Mb3dlckNhc2UoKSA9PT0ga2V5O1xuXHRcdFx0fSk7XG5cdFx0XHRpZiAodmFsdWUpIHtcblx0XHRcdFx0dGhpcy52YWx1ZSA9IHZhbHVlLnZhbHVlO1xuXHRcdFx0XHR0aGlzLnN0YXRlID0gJ3N1Ym1pdCc7XG5cdFx0XHRcdHRoaXMuZW1pdCgnc3VibWl0Jyk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cbn1cbiIsICJpbXBvcnQgY29sb3IgZnJvbSAncGljb2NvbG9ycyc7XG5pbXBvcnQgUHJvbXB0LCB7IHR5cGUgUHJvbXB0T3B0aW9ucyB9IGZyb20gJy4vcHJvbXB0LmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBUZXh0T3B0aW9ucyBleHRlbmRzIFByb21wdE9wdGlvbnM8c3RyaW5nLCBUZXh0UHJvbXB0PiB7XG5cdHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuXHRkZWZhdWx0VmFsdWU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRleHRQcm9tcHQgZXh0ZW5kcyBQcm9tcHQ8c3RyaW5nPiB7XG5cdGdldCB1c2VySW5wdXRXaXRoQ3Vyc29yKCkge1xuXHRcdGlmICh0aGlzLnN0YXRlID09PSAnc3VibWl0Jykge1xuXHRcdFx0cmV0dXJuIHRoaXMudXNlcklucHV0O1xuXHRcdH1cblx0XHRjb25zdCB1c2VySW5wdXQgPSB0aGlzLnVzZXJJbnB1dDtcblx0XHRpZiAodGhpcy5jdXJzb3IgPj0gdXNlcklucHV0Lmxlbmd0aCkge1xuXHRcdFx0cmV0dXJuIGAke3RoaXMudXNlcklucHV0feKWiGA7XG5cdFx0fVxuXHRcdGNvbnN0IHMxID0gdXNlcklucHV0LnNsaWNlKDAsIHRoaXMuY3Vyc29yKTtcblx0XHRjb25zdCBbczIsIC4uLnMzXSA9IHVzZXJJbnB1dC5zbGljZSh0aGlzLmN1cnNvcik7XG5cdFx0cmV0dXJuIGAke3MxfSR7Y29sb3IuaW52ZXJzZShzMil9JHtzMy5qb2luKCcnKX1gO1xuXHR9XG5cdGdldCBjdXJzb3IoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2N1cnNvcjtcblx0fVxuXHRjb25zdHJ1Y3RvcihvcHRzOiBUZXh0T3B0aW9ucykge1xuXHRcdHN1cGVyKHtcblx0XHRcdC4uLm9wdHMsXG5cdFx0XHRpbml0aWFsVXNlcklucHV0OiBvcHRzLmluaXRpYWxVc2VySW5wdXQgPz8gb3B0cy5pbml0aWFsVmFsdWUsXG5cdFx0fSk7XG5cblx0XHR0aGlzLm9uKCd1c2VySW5wdXQnLCAoaW5wdXQpID0+IHtcblx0XHRcdHRoaXMuX3NldFZhbHVlKGlucHV0KTtcblx0XHR9KTtcblx0XHR0aGlzLm9uKCdmaW5hbGl6ZScsICgpID0+IHtcblx0XHRcdGlmICghdGhpcy52YWx1ZSkge1xuXHRcdFx0XHR0aGlzLnZhbHVlID0gb3B0cy5kZWZhdWx0VmFsdWU7XG5cdFx0XHR9XG5cdFx0XHRpZiAodGhpcy52YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHRoaXMudmFsdWUgPSAnJztcblx0XHRcdH1cblx0XHR9KTtcblx0fVxufVxuIiwgImltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzVW5pY29kZVN1cHBvcnRlZCgpIHtcblx0aWYgKHByb2Nlc3MucGxhdGZvcm0gIT09ICd3aW4zMicpIHtcblx0XHRyZXR1cm4gcHJvY2Vzcy5lbnYuVEVSTSAhPT0gJ2xpbnV4JzsgLy8gTGludXggY29uc29sZSAoa2VybmVsKVxuXHR9XG5cblx0cmV0dXJuIEJvb2xlYW4ocHJvY2Vzcy5lbnYuQ0kpXG5cdFx0fHwgQm9vbGVhbihwcm9jZXNzLmVudi5XVF9TRVNTSU9OKSAvLyBXaW5kb3dzIFRlcm1pbmFsXG5cdFx0fHwgQm9vbGVhbihwcm9jZXNzLmVudi5URVJNSU5VU19TVUJMSU1FKSAvLyBUZXJtaW51cyAoPDAuMi4yNylcblx0XHR8fCBwcm9jZXNzLmVudi5Db25FbXVUYXNrID09PSAne2NtZDo6Q21kZXJ9JyAvLyBDb25FbXUgYW5kIGNtZGVyXG5cdFx0fHwgcHJvY2Vzcy5lbnYuVEVSTV9QUk9HUkFNID09PSAnVGVybWludXMtU3VibGltZSdcblx0XHR8fCBwcm9jZXNzLmVudi5URVJNX1BST0dSQU0gPT09ICd2c2NvZGUnXG5cdFx0fHwgcHJvY2Vzcy5lbnYuVEVSTSA9PT0gJ3h0ZXJtLTI1NmNvbG9yJ1xuXHRcdHx8IHByb2Nlc3MuZW52LlRFUk0gPT09ICdhbGFjcml0dHknXG5cdFx0fHwgcHJvY2Vzcy5lbnYuVEVSTUlOQUxfRU1VTEFUT1IgPT09ICdKZXRCcmFpbnMtSmVkaVRlcm0nO1xufVxuIiwgImltcG9ydCB0eXBlIHsgUmVhZGFibGUsIFdyaXRhYmxlIH0gZnJvbSAnbm9kZTpzdHJlYW0nO1xuaW1wb3J0IHR5cGUgeyBTdGF0ZSB9IGZyb20gJ0BjbGFjay9jb3JlJztcbmltcG9ydCBpc1VuaWNvZGVTdXBwb3J0ZWQgZnJvbSAnaXMtdW5pY29kZS1zdXBwb3J0ZWQnO1xuaW1wb3J0IGNvbG9yIGZyb20gJ3BpY29jb2xvcnMnO1xuXG5leHBvcnQgY29uc3QgdW5pY29kZSA9IGlzVW5pY29kZVN1cHBvcnRlZCgpO1xuZXhwb3J0IGNvbnN0IGlzQ0kgPSAoKTogYm9vbGVhbiA9PiBwcm9jZXNzLmVudi5DSSA9PT0gJ3RydWUnO1xuZXhwb3J0IGNvbnN0IGlzVFRZID0gKG91dHB1dDogV3JpdGFibGUpOiBib29sZWFuID0+IHtcblx0cmV0dXJuIChvdXRwdXQgYXMgV3JpdGFibGUgJiB7IGlzVFRZPzogYm9vbGVhbiB9KS5pc1RUWSA9PT0gdHJ1ZTtcbn07XG5leHBvcnQgY29uc3QgdW5pY29kZU9yID0gKGM6IHN0cmluZywgZmFsbGJhY2s6IHN0cmluZykgPT4gKHVuaWNvZGUgPyBjIDogZmFsbGJhY2spO1xuZXhwb3J0IGNvbnN0IFNfU1RFUF9BQ1RJVkUgPSB1bmljb2RlT3IoJ+KXhicsICcqJyk7XG5leHBvcnQgY29uc3QgU19TVEVQX0NBTkNFTCA9IHVuaWNvZGVPcign4pagJywgJ3gnKTtcbmV4cG9ydCBjb25zdCBTX1NURVBfRVJST1IgPSB1bmljb2RlT3IoJ+KWsicsICd4Jyk7XG5leHBvcnQgY29uc3QgU19TVEVQX1NVQk1JVCA9IHVuaWNvZGVPcign4peHJywgJ28nKTtcblxuZXhwb3J0IGNvbnN0IFNfQkFSX1NUQVJUID0gdW5pY29kZU9yKCfilIwnLCAnVCcpO1xuZXhwb3J0IGNvbnN0IFNfQkFSID0gdW5pY29kZU9yKCfilIInLCAnfCcpO1xuZXhwb3J0IGNvbnN0IFNfQkFSX0VORCA9IHVuaWNvZGVPcign4pSUJywgJ+KAlCcpO1xuZXhwb3J0IGNvbnN0IFNfQkFSX1NUQVJUX1JJR0hUID0gdW5pY29kZU9yKCfilJAnLCAnVCcpO1xuZXhwb3J0IGNvbnN0IFNfQkFSX0VORF9SSUdIVCA9IHVuaWNvZGVPcign4pSYJywgJ+KAlCcpO1xuXG5leHBvcnQgY29uc3QgU19SQURJT19BQ1RJVkUgPSB1bmljb2RlT3IoJ+KXjycsICc+Jyk7XG5leHBvcnQgY29uc3QgU19SQURJT19JTkFDVElWRSA9IHVuaWNvZGVPcign4peLJywgJyAnKTtcbmV4cG9ydCBjb25zdCBTX0NIRUNLQk9YX0FDVElWRSA9IHVuaWNvZGVPcign4pe7JywgJ1vigKJdJyk7XG5leHBvcnQgY29uc3QgU19DSEVDS0JPWF9TRUxFQ1RFRCA9IHVuaWNvZGVPcign4pe8JywgJ1srXScpO1xuZXhwb3J0IGNvbnN0IFNfQ0hFQ0tCT1hfSU5BQ1RJVkUgPSB1bmljb2RlT3IoJ+KXuycsICdbIF0nKTtcbmV4cG9ydCBjb25zdCBTX1BBU1NXT1JEX01BU0sgPSB1bmljb2RlT3IoJ+KWqicsICfigKInKTtcblxuZXhwb3J0IGNvbnN0IFNfQkFSX0ggPSB1bmljb2RlT3IoJ+KUgCcsICctJyk7XG5leHBvcnQgY29uc3QgU19DT1JORVJfVE9QX1JJR0hUID0gdW5pY29kZU9yKCfila4nLCAnKycpO1xuZXhwb3J0IGNvbnN0IFNfQ09OTkVDVF9MRUZUID0gdW5pY29kZU9yKCfilJwnLCAnKycpO1xuZXhwb3J0IGNvbnN0IFNfQ09STkVSX0JPVFRPTV9SSUdIVCA9IHVuaWNvZGVPcign4pWvJywgJysnKTtcbmV4cG9ydCBjb25zdCBTX0NPUk5FUl9CT1RUT01fTEVGVCA9IHVuaWNvZGVPcign4pWwJywgJysnKTtcbmV4cG9ydCBjb25zdCBTX0NPUk5FUl9UT1BfTEVGVCA9IHVuaWNvZGVPcign4pWtJywgJysnKTtcblxuZXhwb3J0IGNvbnN0IFNfSU5GTyA9IHVuaWNvZGVPcign4pePJywgJ+KAoicpO1xuZXhwb3J0IGNvbnN0IFNfU1VDQ0VTUyA9IHVuaWNvZGVPcign4peGJywgJyonKTtcbmV4cG9ydCBjb25zdCBTX1dBUk4gPSB1bmljb2RlT3IoJ+KWsicsICchJyk7XG5leHBvcnQgY29uc3QgU19FUlJPUiA9IHVuaWNvZGVPcign4pagJywgJ3gnKTtcblxuZXhwb3J0IGNvbnN0IHN5bWJvbCA9IChzdGF0ZTogU3RhdGUpID0+IHtcblx0c3dpdGNoIChzdGF0ZSkge1xuXHRcdGNhc2UgJ2luaXRpYWwnOlxuXHRcdGNhc2UgJ2FjdGl2ZSc6XG5cdFx0XHRyZXR1cm4gY29sb3IuY3lhbihTX1NURVBfQUNUSVZFKTtcblx0XHRjYXNlICdjYW5jZWwnOlxuXHRcdFx0cmV0dXJuIGNvbG9yLnJlZChTX1NURVBfQ0FOQ0VMKTtcblx0XHRjYXNlICdlcnJvcic6XG5cdFx0XHRyZXR1cm4gY29sb3IueWVsbG93KFNfU1RFUF9FUlJPUik7XG5cdFx0Y2FzZSAnc3VibWl0Jzpcblx0XHRcdHJldHVybiBjb2xvci5ncmVlbihTX1NURVBfU1VCTUlUKTtcblx0fVxufTtcblxuZXhwb3J0IGNvbnN0IHN5bWJvbEJhciA9IChzdGF0ZTogU3RhdGUpID0+IHtcblx0c3dpdGNoIChzdGF0ZSkge1xuXHRcdGNhc2UgJ2luaXRpYWwnOlxuXHRcdGNhc2UgJ2FjdGl2ZSc6XG5cdFx0XHRyZXR1cm4gY29sb3IuY3lhbihTX0JBUik7XG5cdFx0Y2FzZSAnY2FuY2VsJzpcblx0XHRcdHJldHVybiBjb2xvci5yZWQoU19CQVIpO1xuXHRcdGNhc2UgJ2Vycm9yJzpcblx0XHRcdHJldHVybiBjb2xvci55ZWxsb3coU19CQVIpO1xuXHRcdGNhc2UgJ3N1Ym1pdCc6XG5cdFx0XHRyZXR1cm4gY29sb3IuZ3JlZW4oU19CQVIpO1xuXHR9XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbW1vbk9wdGlvbnMge1xuXHRpbnB1dD86IFJlYWRhYmxlO1xuXHRvdXRwdXQ/OiBXcml0YWJsZTtcblx0c2lnbmFsPzogQWJvcnRTaWduYWw7XG5cdHdpdGhHdWlkZT86IGJvb2xlYW47XG59XG4iLCAiLyogTUFJTiAqL1xuLy9VUkw6IGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5kcmVzb3JodXMvZ2V0LWVhc3QtYXNpYW4td2lkdGgvYmxvYi9tYWluL2xvb2t1cC5qc1xuLy9MSUNFTlNFOiBodHRwczovL2dpdGh1Yi5jb20vc2luZHJlc29yaHVzL2dldC1lYXN0LWFzaWFuLXdpZHRoL2Jsb2IvbWFpbi9saWNlbnNlXG4vL1RPRE86IFJlcGxhY2UgdGhlc2Ugd2l0aCBzb21lIHVuaWNvZGUgcHJvcGVydHkgY2xhc3NlcywgaWYgdGhlIG9uZXMgd2UgbmVlZCBleGlzdFxuY29uc3QgaXNBbWJpZ3VvdXMgPSAoeCkgPT4ge1xuICAgIHJldHVybiB4ID09PSAweEExIHx8IHggPT09IDB4QTQgfHwgeCA9PT0gMHhBNyB8fCB4ID09PSAweEE4IHx8IHggPT09IDB4QUEgfHwgeCA9PT0gMHhBRCB8fCB4ID09PSAweEFFIHx8IHggPj0gMHhCMCAmJiB4IDw9IDB4QjQgfHwgeCA+PSAweEI2ICYmIHggPD0gMHhCQSB8fCB4ID49IDB4QkMgJiYgeCA8PSAweEJGIHx8IHggPT09IDB4QzYgfHwgeCA9PT0gMHhEMCB8fCB4ID09PSAweEQ3IHx8IHggPT09IDB4RDggfHwgeCA+PSAweERFICYmIHggPD0gMHhFMSB8fCB4ID09PSAweEU2IHx8IHggPj0gMHhFOCAmJiB4IDw9IDB4RUEgfHwgeCA9PT0gMHhFQyB8fCB4ID09PSAweEVEIHx8IHggPT09IDB4RjAgfHwgeCA9PT0gMHhGMiB8fCB4ID09PSAweEYzIHx8IHggPj0gMHhGNyAmJiB4IDw9IDB4RkEgfHwgeCA9PT0gMHhGQyB8fCB4ID09PSAweEZFIHx8IHggPT09IDB4MTAxIHx8IHggPT09IDB4MTExIHx8IHggPT09IDB4MTEzIHx8IHggPT09IDB4MTFCIHx8IHggPT09IDB4MTI2IHx8IHggPT09IDB4MTI3IHx8IHggPT09IDB4MTJCIHx8IHggPj0gMHgxMzEgJiYgeCA8PSAweDEzMyB8fCB4ID09PSAweDEzOCB8fCB4ID49IDB4MTNGICYmIHggPD0gMHgxNDIgfHwgeCA9PT0gMHgxNDQgfHwgeCA+PSAweDE0OCAmJiB4IDw9IDB4MTRCIHx8IHggPT09IDB4MTREIHx8IHggPT09IDB4MTUyIHx8IHggPT09IDB4MTUzIHx8IHggPT09IDB4MTY2IHx8IHggPT09IDB4MTY3IHx8IHggPT09IDB4MTZCIHx8IHggPT09IDB4MUNFIHx8IHggPT09IDB4MUQwIHx8IHggPT09IDB4MUQyIHx8IHggPT09IDB4MUQ0IHx8IHggPT09IDB4MUQ2IHx8IHggPT09IDB4MUQ4IHx8IHggPT09IDB4MURBIHx8IHggPT09IDB4MURDIHx8IHggPT09IDB4MjUxIHx8IHggPT09IDB4MjYxIHx8IHggPT09IDB4MkM0IHx8IHggPT09IDB4MkM3IHx8IHggPj0gMHgyQzkgJiYgeCA8PSAweDJDQiB8fCB4ID09PSAweDJDRCB8fCB4ID09PSAweDJEMCB8fCB4ID49IDB4MkQ4ICYmIHggPD0gMHgyREIgfHwgeCA9PT0gMHgyREQgfHwgeCA9PT0gMHgyREYgfHwgeCA+PSAweDMwMCAmJiB4IDw9IDB4MzZGIHx8IHggPj0gMHgzOTEgJiYgeCA8PSAweDNBMSB8fCB4ID49IDB4M0EzICYmIHggPD0gMHgzQTkgfHwgeCA+PSAweDNCMSAmJiB4IDw9IDB4M0MxIHx8IHggPj0gMHgzQzMgJiYgeCA8PSAweDNDOSB8fCB4ID09PSAweDQwMSB8fCB4ID49IDB4NDEwICYmIHggPD0gMHg0NEYgfHwgeCA9PT0gMHg0NTEgfHwgeCA9PT0gMHgyMDEwIHx8IHggPj0gMHgyMDEzICYmIHggPD0gMHgyMDE2IHx8IHggPT09IDB4MjAxOCB8fCB4ID09PSAweDIwMTkgfHwgeCA9PT0gMHgyMDFDIHx8IHggPT09IDB4MjAxRCB8fCB4ID49IDB4MjAyMCAmJiB4IDw9IDB4MjAyMiB8fCB4ID49IDB4MjAyNCAmJiB4IDw9IDB4MjAyNyB8fCB4ID09PSAweDIwMzAgfHwgeCA9PT0gMHgyMDMyIHx8IHggPT09IDB4MjAzMyB8fCB4ID09PSAweDIwMzUgfHwgeCA9PT0gMHgyMDNCIHx8IHggPT09IDB4MjAzRSB8fCB4ID09PSAweDIwNzQgfHwgeCA9PT0gMHgyMDdGIHx8IHggPj0gMHgyMDgxICYmIHggPD0gMHgyMDg0IHx8IHggPT09IDB4MjBBQyB8fCB4ID09PSAweDIxMDMgfHwgeCA9PT0gMHgyMTA1IHx8IHggPT09IDB4MjEwOSB8fCB4ID09PSAweDIxMTMgfHwgeCA9PT0gMHgyMTE2IHx8IHggPT09IDB4MjEyMSB8fCB4ID09PSAweDIxMjIgfHwgeCA9PT0gMHgyMTI2IHx8IHggPT09IDB4MjEyQiB8fCB4ID09PSAweDIxNTMgfHwgeCA9PT0gMHgyMTU0IHx8IHggPj0gMHgyMTVCICYmIHggPD0gMHgyMTVFIHx8IHggPj0gMHgyMTYwICYmIHggPD0gMHgyMTZCIHx8IHggPj0gMHgyMTcwICYmIHggPD0gMHgyMTc5IHx8IHggPT09IDB4MjE4OSB8fCB4ID49IDB4MjE5MCAmJiB4IDw9IDB4MjE5OSB8fCB4ID09PSAweDIxQjggfHwgeCA9PT0gMHgyMUI5IHx8IHggPT09IDB4MjFEMiB8fCB4ID09PSAweDIxRDQgfHwgeCA9PT0gMHgyMUU3IHx8IHggPT09IDB4MjIwMCB8fCB4ID09PSAweDIyMDIgfHwgeCA9PT0gMHgyMjAzIHx8IHggPT09IDB4MjIwNyB8fCB4ID09PSAweDIyMDggfHwgeCA9PT0gMHgyMjBCIHx8IHggPT09IDB4MjIwRiB8fCB4ID09PSAweDIyMTEgfHwgeCA9PT0gMHgyMjE1IHx8IHggPT09IDB4MjIxQSB8fCB4ID49IDB4MjIxRCAmJiB4IDw9IDB4MjIyMCB8fCB4ID09PSAweDIyMjMgfHwgeCA9PT0gMHgyMjI1IHx8IHggPj0gMHgyMjI3ICYmIHggPD0gMHgyMjJDIHx8IHggPT09IDB4MjIyRSB8fCB4ID49IDB4MjIzNCAmJiB4IDw9IDB4MjIzNyB8fCB4ID09PSAweDIyM0MgfHwgeCA9PT0gMHgyMjNEIHx8IHggPT09IDB4MjI0OCB8fCB4ID09PSAweDIyNEMgfHwgeCA9PT0gMHgyMjUyIHx8IHggPT09IDB4MjI2MCB8fCB4ID09PSAweDIyNjEgfHwgeCA+PSAweDIyNjQgJiYgeCA8PSAweDIyNjcgfHwgeCA9PT0gMHgyMjZBIHx8IHggPT09IDB4MjI2QiB8fCB4ID09PSAweDIyNkUgfHwgeCA9PT0gMHgyMjZGIHx8IHggPT09IDB4MjI4MiB8fCB4ID09PSAweDIyODMgfHwgeCA9PT0gMHgyMjg2IHx8IHggPT09IDB4MjI4NyB8fCB4ID09PSAweDIyOTUgfHwgeCA9PT0gMHgyMjk5IHx8IHggPT09IDB4MjJBNSB8fCB4ID09PSAweDIyQkYgfHwgeCA9PT0gMHgyMzEyIHx8IHggPj0gMHgyNDYwICYmIHggPD0gMHgyNEU5IHx8IHggPj0gMHgyNEVCICYmIHggPD0gMHgyNTRCIHx8IHggPj0gMHgyNTUwICYmIHggPD0gMHgyNTczIHx8IHggPj0gMHgyNTgwICYmIHggPD0gMHgyNThGIHx8IHggPj0gMHgyNTkyICYmIHggPD0gMHgyNTk1IHx8IHggPT09IDB4MjVBMCB8fCB4ID09PSAweDI1QTEgfHwgeCA+PSAweDI1QTMgJiYgeCA8PSAweDI1QTkgfHwgeCA9PT0gMHgyNUIyIHx8IHggPT09IDB4MjVCMyB8fCB4ID09PSAweDI1QjYgfHwgeCA9PT0gMHgyNUI3IHx8IHggPT09IDB4MjVCQyB8fCB4ID09PSAweDI1QkQgfHwgeCA9PT0gMHgyNUMwIHx8IHggPT09IDB4MjVDMSB8fCB4ID49IDB4MjVDNiAmJiB4IDw9IDB4MjVDOCB8fCB4ID09PSAweDI1Q0IgfHwgeCA+PSAweDI1Q0UgJiYgeCA8PSAweDI1RDEgfHwgeCA+PSAweDI1RTIgJiYgeCA8PSAweDI1RTUgfHwgeCA9PT0gMHgyNUVGIHx8IHggPT09IDB4MjYwNSB8fCB4ID09PSAweDI2MDYgfHwgeCA9PT0gMHgyNjA5IHx8IHggPT09IDB4MjYwRSB8fCB4ID09PSAweDI2MEYgfHwgeCA9PT0gMHgyNjFDIHx8IHggPT09IDB4MjYxRSB8fCB4ID09PSAweDI2NDAgfHwgeCA9PT0gMHgyNjQyIHx8IHggPT09IDB4MjY2MCB8fCB4ID09PSAweDI2NjEgfHwgeCA+PSAweDI2NjMgJiYgeCA8PSAweDI2NjUgfHwgeCA+PSAweDI2NjcgJiYgeCA8PSAweDI2NkEgfHwgeCA9PT0gMHgyNjZDIHx8IHggPT09IDB4MjY2RCB8fCB4ID09PSAweDI2NkYgfHwgeCA9PT0gMHgyNjlFIHx8IHggPT09IDB4MjY5RiB8fCB4ID09PSAweDI2QkYgfHwgeCA+PSAweDI2QzYgJiYgeCA8PSAweDI2Q0QgfHwgeCA+PSAweDI2Q0YgJiYgeCA8PSAweDI2RDMgfHwgeCA+PSAweDI2RDUgJiYgeCA8PSAweDI2RTEgfHwgeCA9PT0gMHgyNkUzIHx8IHggPT09IDB4MjZFOCB8fCB4ID09PSAweDI2RTkgfHwgeCA+PSAweDI2RUIgJiYgeCA8PSAweDI2RjEgfHwgeCA9PT0gMHgyNkY0IHx8IHggPj0gMHgyNkY2ICYmIHggPD0gMHgyNkY5IHx8IHggPT09IDB4MjZGQiB8fCB4ID09PSAweDI2RkMgfHwgeCA9PT0gMHgyNkZFIHx8IHggPT09IDB4MjZGRiB8fCB4ID09PSAweDI3M0QgfHwgeCA+PSAweDI3NzYgJiYgeCA8PSAweDI3N0YgfHwgeCA+PSAweDJCNTYgJiYgeCA8PSAweDJCNTkgfHwgeCA+PSAweDMyNDggJiYgeCA8PSAweDMyNEYgfHwgeCA+PSAweEUwMDAgJiYgeCA8PSAweEY4RkYgfHwgeCA+PSAweEZFMDAgJiYgeCA8PSAweEZFMEYgfHwgeCA9PT0gMHhGRkZEIHx8IHggPj0gMHgxRjEwMCAmJiB4IDw9IDB4MUYxMEEgfHwgeCA+PSAweDFGMTEwICYmIHggPD0gMHgxRjEyRCB8fCB4ID49IDB4MUYxMzAgJiYgeCA8PSAweDFGMTY5IHx8IHggPj0gMHgxRjE3MCAmJiB4IDw9IDB4MUYxOEQgfHwgeCA9PT0gMHgxRjE4RiB8fCB4ID09PSAweDFGMTkwIHx8IHggPj0gMHgxRjE5QiAmJiB4IDw9IDB4MUYxQUMgfHwgeCA+PSAweEUwMTAwICYmIHggPD0gMHhFMDFFRiB8fCB4ID49IDB4RjAwMDAgJiYgeCA8PSAweEZGRkZEIHx8IHggPj0gMHgxMDAwMDAgJiYgeCA8PSAweDEwRkZGRDtcbn07XG5jb25zdCBpc0Z1bGxXaWR0aCA9ICh4KSA9PiB7XG4gICAgcmV0dXJuIHggPT09IDB4MzAwMCB8fCB4ID49IDB4RkYwMSAmJiB4IDw9IDB4RkY2MCB8fCB4ID49IDB4RkZFMCAmJiB4IDw9IDB4RkZFNjtcbn07XG5jb25zdCBpc1dpZGUgPSAoeCkgPT4ge1xuICAgIHJldHVybiB4ID49IDB4MTEwMCAmJiB4IDw9IDB4MTE1RiB8fCB4ID09PSAweDIzMUEgfHwgeCA9PT0gMHgyMzFCIHx8IHggPT09IDB4MjMyOSB8fCB4ID09PSAweDIzMkEgfHwgeCA+PSAweDIzRTkgJiYgeCA8PSAweDIzRUMgfHwgeCA9PT0gMHgyM0YwIHx8IHggPT09IDB4MjNGMyB8fCB4ID09PSAweDI1RkQgfHwgeCA9PT0gMHgyNUZFIHx8IHggPT09IDB4MjYxNCB8fCB4ID09PSAweDI2MTUgfHwgeCA+PSAweDI2NDggJiYgeCA8PSAweDI2NTMgfHwgeCA9PT0gMHgyNjdGIHx8IHggPT09IDB4MjY5MyB8fCB4ID09PSAweDI2QTEgfHwgeCA9PT0gMHgyNkFBIHx8IHggPT09IDB4MjZBQiB8fCB4ID09PSAweDI2QkQgfHwgeCA9PT0gMHgyNkJFIHx8IHggPT09IDB4MjZDNCB8fCB4ID09PSAweDI2QzUgfHwgeCA9PT0gMHgyNkNFIHx8IHggPT09IDB4MjZENCB8fCB4ID09PSAweDI2RUEgfHwgeCA9PT0gMHgyNkYyIHx8IHggPT09IDB4MjZGMyB8fCB4ID09PSAweDI2RjUgfHwgeCA9PT0gMHgyNkZBIHx8IHggPT09IDB4MjZGRCB8fCB4ID09PSAweDI3MDUgfHwgeCA9PT0gMHgyNzBBIHx8IHggPT09IDB4MjcwQiB8fCB4ID09PSAweDI3MjggfHwgeCA9PT0gMHgyNzRDIHx8IHggPT09IDB4Mjc0RSB8fCB4ID49IDB4Mjc1MyAmJiB4IDw9IDB4Mjc1NSB8fCB4ID09PSAweDI3NTcgfHwgeCA+PSAweDI3OTUgJiYgeCA8PSAweDI3OTcgfHwgeCA9PT0gMHgyN0IwIHx8IHggPT09IDB4MjdCRiB8fCB4ID09PSAweDJCMUIgfHwgeCA9PT0gMHgyQjFDIHx8IHggPT09IDB4MkI1MCB8fCB4ID09PSAweDJCNTUgfHwgeCA+PSAweDJFODAgJiYgeCA8PSAweDJFOTkgfHwgeCA+PSAweDJFOUIgJiYgeCA8PSAweDJFRjMgfHwgeCA+PSAweDJGMDAgJiYgeCA8PSAweDJGRDUgfHwgeCA+PSAweDJGRjAgJiYgeCA8PSAweDJGRkYgfHwgeCA+PSAweDMwMDEgJiYgeCA8PSAweDMwM0UgfHwgeCA+PSAweDMwNDEgJiYgeCA8PSAweDMwOTYgfHwgeCA+PSAweDMwOTkgJiYgeCA8PSAweDMwRkYgfHwgeCA+PSAweDMxMDUgJiYgeCA8PSAweDMxMkYgfHwgeCA+PSAweDMxMzEgJiYgeCA8PSAweDMxOEUgfHwgeCA+PSAweDMxOTAgJiYgeCA8PSAweDMxRTMgfHwgeCA+PSAweDMxRUYgJiYgeCA8PSAweDMyMUUgfHwgeCA+PSAweDMyMjAgJiYgeCA8PSAweDMyNDcgfHwgeCA+PSAweDMyNTAgJiYgeCA8PSAweDREQkYgfHwgeCA+PSAweDRFMDAgJiYgeCA8PSAweEE0OEMgfHwgeCA+PSAweEE0OTAgJiYgeCA8PSAweEE0QzYgfHwgeCA+PSAweEE5NjAgJiYgeCA8PSAweEE5N0MgfHwgeCA+PSAweEFDMDAgJiYgeCA8PSAweEQ3QTMgfHwgeCA+PSAweEY5MDAgJiYgeCA8PSAweEZBRkYgfHwgeCA+PSAweEZFMTAgJiYgeCA8PSAweEZFMTkgfHwgeCA+PSAweEZFMzAgJiYgeCA8PSAweEZFNTIgfHwgeCA+PSAweEZFNTQgJiYgeCA8PSAweEZFNjYgfHwgeCA+PSAweEZFNjggJiYgeCA8PSAweEZFNkIgfHwgeCA+PSAweDE2RkUwICYmIHggPD0gMHgxNkZFNCB8fCB4ID09PSAweDE2RkYwIHx8IHggPT09IDB4MTZGRjEgfHwgeCA+PSAweDE3MDAwICYmIHggPD0gMHgxODdGNyB8fCB4ID49IDB4MTg4MDAgJiYgeCA8PSAweDE4Q0Q1IHx8IHggPj0gMHgxOEQwMCAmJiB4IDw9IDB4MThEMDggfHwgeCA+PSAweDFBRkYwICYmIHggPD0gMHgxQUZGMyB8fCB4ID49IDB4MUFGRjUgJiYgeCA8PSAweDFBRkZCIHx8IHggPT09IDB4MUFGRkQgfHwgeCA9PT0gMHgxQUZGRSB8fCB4ID49IDB4MUIwMDAgJiYgeCA8PSAweDFCMTIyIHx8IHggPT09IDB4MUIxMzIgfHwgeCA+PSAweDFCMTUwICYmIHggPD0gMHgxQjE1MiB8fCB4ID09PSAweDFCMTU1IHx8IHggPj0gMHgxQjE2NCAmJiB4IDw9IDB4MUIxNjcgfHwgeCA+PSAweDFCMTcwICYmIHggPD0gMHgxQjJGQiB8fCB4ID09PSAweDFGMDA0IHx8IHggPT09IDB4MUYwQ0YgfHwgeCA9PT0gMHgxRjE4RSB8fCB4ID49IDB4MUYxOTEgJiYgeCA8PSAweDFGMTlBIHx8IHggPj0gMHgxRjIwMCAmJiB4IDw9IDB4MUYyMDIgfHwgeCA+PSAweDFGMjEwICYmIHggPD0gMHgxRjIzQiB8fCB4ID49IDB4MUYyNDAgJiYgeCA8PSAweDFGMjQ4IHx8IHggPT09IDB4MUYyNTAgfHwgeCA9PT0gMHgxRjI1MSB8fCB4ID49IDB4MUYyNjAgJiYgeCA8PSAweDFGMjY1IHx8IHggPj0gMHgxRjMwMCAmJiB4IDw9IDB4MUYzMjAgfHwgeCA+PSAweDFGMzJEICYmIHggPD0gMHgxRjMzNSB8fCB4ID49IDB4MUYzMzcgJiYgeCA8PSAweDFGMzdDIHx8IHggPj0gMHgxRjM3RSAmJiB4IDw9IDB4MUYzOTMgfHwgeCA+PSAweDFGM0EwICYmIHggPD0gMHgxRjNDQSB8fCB4ID49IDB4MUYzQ0YgJiYgeCA8PSAweDFGM0QzIHx8IHggPj0gMHgxRjNFMCAmJiB4IDw9IDB4MUYzRjAgfHwgeCA9PT0gMHgxRjNGNCB8fCB4ID49IDB4MUYzRjggJiYgeCA8PSAweDFGNDNFIHx8IHggPT09IDB4MUY0NDAgfHwgeCA+PSAweDFGNDQyICYmIHggPD0gMHgxRjRGQyB8fCB4ID49IDB4MUY0RkYgJiYgeCA8PSAweDFGNTNEIHx8IHggPj0gMHgxRjU0QiAmJiB4IDw9IDB4MUY1NEUgfHwgeCA+PSAweDFGNTUwICYmIHggPD0gMHgxRjU2NyB8fCB4ID09PSAweDFGNTdBIHx8IHggPT09IDB4MUY1OTUgfHwgeCA9PT0gMHgxRjU5NiB8fCB4ID09PSAweDFGNUE0IHx8IHggPj0gMHgxRjVGQiAmJiB4IDw9IDB4MUY2NEYgfHwgeCA+PSAweDFGNjgwICYmIHggPD0gMHgxRjZDNSB8fCB4ID09PSAweDFGNkNDIHx8IHggPj0gMHgxRjZEMCAmJiB4IDw9IDB4MUY2RDIgfHwgeCA+PSAweDFGNkQ1ICYmIHggPD0gMHgxRjZENyB8fCB4ID49IDB4MUY2REMgJiYgeCA8PSAweDFGNkRGIHx8IHggPT09IDB4MUY2RUIgfHwgeCA9PT0gMHgxRjZFQyB8fCB4ID49IDB4MUY2RjQgJiYgeCA8PSAweDFGNkZDIHx8IHggPj0gMHgxRjdFMCAmJiB4IDw9IDB4MUY3RUIgfHwgeCA9PT0gMHgxRjdGMCB8fCB4ID49IDB4MUY5MEMgJiYgeCA8PSAweDFGOTNBIHx8IHggPj0gMHgxRjkzQyAmJiB4IDw9IDB4MUY5NDUgfHwgeCA+PSAweDFGOTQ3ICYmIHggPD0gMHgxRjlGRiB8fCB4ID49IDB4MUZBNzAgJiYgeCA8PSAweDFGQTdDIHx8IHggPj0gMHgxRkE4MCAmJiB4IDw9IDB4MUZBODggfHwgeCA+PSAweDFGQTkwICYmIHggPD0gMHgxRkFCRCB8fCB4ID49IDB4MUZBQkYgJiYgeCA8PSAweDFGQUM1IHx8IHggPj0gMHgxRkFDRSAmJiB4IDw9IDB4MUZBREIgfHwgeCA+PSAweDFGQUUwICYmIHggPD0gMHgxRkFFOCB8fCB4ID49IDB4MUZBRjAgJiYgeCA8PSAweDFGQUY4IHx8IHggPj0gMHgyMDAwMCAmJiB4IDw9IDB4MkZGRkQgfHwgeCA+PSAweDMwMDAwICYmIHggPD0gMHgzRkZGRDtcbn07XG4vKiBFWFBPUlQgKi9cbmV4cG9ydCB7IGlzQW1iaWd1b3VzLCBpc0Z1bGxXaWR0aCwgaXNXaWRlIH07XG4iLCAiLyogSU1QT1JUICovXG5pbXBvcnQgeyBpc0FtYmlndW91cywgaXNGdWxsV2lkdGgsIGlzV2lkZSB9IGZyb20gJy4vdXRpbHMuanMnO1xuLyogSEVMUEVSUyAqL1xuY29uc3QgQU5TSV9SRSA9IC9bXFx1MDAxYlxcdTAwOWJdW1soKSM7P10qKD86WzAtOV17MSw0fSg/OjtbMC05XXswLDR9KSopP1swLTlBLU9SWmNmLW5xcnk9PjxdL3k7XG5jb25zdCBDT05UUk9MX1JFID0gL1tcXHgwMC1cXHgwOFxceDBBLVxceDFGXFx4N0YtXFx4OUZdezEsMTAwMH0veTtcbmNvbnN0IFRBQl9SRSA9IC9cXHR7MSwxMDAwfS95O1xuY29uc3QgRU1PSklfUkUgPSAvW1xcdXsxRjFFNn0tXFx1ezFGMUZGfV17Mn18XFx1ezFGM0Y0fVtcXHV7RTAwNjF9LVxcdXtFMDA3QX1dezJ9W1xcdXtFMDAzMH0tXFx1e0UwMDM5fVxcdXtFMDA2MX0tXFx1e0UwMDdBfV17MSwzfVxcdXtFMDA3Rn18KD86XFxwe0Vtb2ppfVxcdUZFMEZcXHUyMEUzP3xcXHB7RW1vamlfTW9kaWZpZXJfQmFzZX1cXHB7RW1vamlfTW9kaWZpZXJ9P3xcXHB7RW1vamlfUHJlc2VudGF0aW9ufSkoPzpcXHUyMDBEKD86XFxwe0Vtb2ppX01vZGlmaWVyX0Jhc2V9XFxwe0Vtb2ppX01vZGlmaWVyfT98XFxwe0Vtb2ppX1ByZXNlbnRhdGlvbn18XFxwe0Vtb2ppfVxcdUZFMEZcXHUyMEUzPykpKi95dTtcbmNvbnN0IExBVElOX1JFID0gLyg/OltcXHgyMC1cXHg3RVxceEEwLVxceEZGXSg/IVxcdUZFMEYpKXsxLDEwMDB9L3k7XG5jb25zdCBNT0RJRklFUl9SRSA9IC9cXHB7TX0rL2d1O1xuY29uc3QgTk9fVFJVTkNBVElPTiA9IHsgbGltaXQ6IEluZmluaXR5LCBlbGxpcHNpczogJycgfTtcbi8qIE1BSU4gKi9cbi8vVE9ETzogT3B0aW1pemUgbWF0Y2hpbmcgbm9uLWxhdGluIGxldHRlcnNcbmNvbnN0IGdldFN0cmluZ1RydW5jYXRlZFdpZHRoID0gKGlucHV0LCB0cnVuY2F0aW9uT3B0aW9ucyA9IHt9LCB3aWR0aE9wdGlvbnMgPSB7fSkgPT4ge1xuICAgIC8qIENPTlNUQU5UUyAqL1xuICAgIGNvbnN0IExJTUlUID0gdHJ1bmNhdGlvbk9wdGlvbnMubGltaXQgPz8gSW5maW5pdHk7XG4gICAgY29uc3QgRUxMSVBTSVMgPSB0cnVuY2F0aW9uT3B0aW9ucy5lbGxpcHNpcyA/PyAnJztcbiAgICBjb25zdCBFTExJUFNJU19XSURUSCA9IHRydW5jYXRpb25PcHRpb25zPy5lbGxpcHNpc1dpZHRoID8/IChFTExJUFNJUyA/IGdldFN0cmluZ1RydW5jYXRlZFdpZHRoKEVMTElQU0lTLCBOT19UUlVOQ0FUSU9OLCB3aWR0aE9wdGlvbnMpLndpZHRoIDogMCk7XG4gICAgY29uc3QgQU5TSV9XSURUSCA9IHdpZHRoT3B0aW9ucy5hbnNpV2lkdGggPz8gMDtcbiAgICBjb25zdCBDT05UUk9MX1dJRFRIID0gd2lkdGhPcHRpb25zLmNvbnRyb2xXaWR0aCA/PyAwO1xuICAgIGNvbnN0IFRBQl9XSURUSCA9IHdpZHRoT3B0aW9ucy50YWJXaWR0aCA/PyA4O1xuICAgIGNvbnN0IEFNQklHVU9VU19XSURUSCA9IHdpZHRoT3B0aW9ucy5hbWJpZ3VvdXNXaWR0aCA/PyAxO1xuICAgIGNvbnN0IEVNT0pJX1dJRFRIID0gd2lkdGhPcHRpb25zLmVtb2ppV2lkdGggPz8gMjtcbiAgICBjb25zdCBGVUxMX1dJRFRIX1dJRFRIID0gd2lkdGhPcHRpb25zLmZ1bGxXaWR0aFdpZHRoID8/IDI7XG4gICAgY29uc3QgUkVHVUxBUl9XSURUSCA9IHdpZHRoT3B0aW9ucy5yZWd1bGFyV2lkdGggPz8gMTtcbiAgICBjb25zdCBXSURFX1dJRFRIID0gd2lkdGhPcHRpb25zLndpZGVXaWR0aCA/PyAyO1xuICAgIC8qIFNUQVRFICovXG4gICAgbGV0IGluZGV4UHJldiA9IDA7XG4gICAgbGV0IGluZGV4ID0gMDtcbiAgICBsZXQgbGVuZ3RoID0gaW5wdXQubGVuZ3RoO1xuICAgIGxldCBsZW5ndGhFeHRyYSA9IDA7XG4gICAgbGV0IHRydW5jYXRpb25FbmFibGVkID0gZmFsc2U7XG4gICAgbGV0IHRydW5jYXRpb25JbmRleCA9IGxlbmd0aDtcbiAgICBsZXQgdHJ1bmNhdGlvbkxpbWl0ID0gTWF0aC5tYXgoMCwgTElNSVQgLSBFTExJUFNJU19XSURUSCk7XG4gICAgbGV0IHVubWF0Y2hlZFN0YXJ0ID0gMDtcbiAgICBsZXQgdW5tYXRjaGVkRW5kID0gMDtcbiAgICBsZXQgd2lkdGggPSAwO1xuICAgIGxldCB3aWR0aEV4dHJhID0gMDtcbiAgICAvKiBQQVJTRSBMT09QICovXG4gICAgb3V0ZXI6IHdoaWxlICh0cnVlKSB7XG4gICAgICAgIC8qIFVOTUFUQ0hFRCAqL1xuICAgICAgICBpZiAoKHVubWF0Y2hlZEVuZCA+IHVubWF0Y2hlZFN0YXJ0KSB8fCAoaW5kZXggPj0gbGVuZ3RoICYmIGluZGV4ID4gaW5kZXhQcmV2KSkge1xuICAgICAgICAgICAgY29uc3QgdW5tYXRjaGVkID0gaW5wdXQuc2xpY2UodW5tYXRjaGVkU3RhcnQsIHVubWF0Y2hlZEVuZCkgfHwgaW5wdXQuc2xpY2UoaW5kZXhQcmV2LCBpbmRleCk7XG4gICAgICAgICAgICBsZW5ndGhFeHRyYSA9IDA7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNoYXIgb2YgdW5tYXRjaGVkLnJlcGxhY2VBbGwoTU9ESUZJRVJfUkUsICcnKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvZGVQb2ludCA9IGNoYXIuY29kZVBvaW50QXQoMCkgfHwgMDtcbiAgICAgICAgICAgICAgICBpZiAoaXNGdWxsV2lkdGgoY29kZVBvaW50KSkge1xuICAgICAgICAgICAgICAgICAgICB3aWR0aEV4dHJhID0gRlVMTF9XSURUSF9XSURUSDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoaXNXaWRlKGNvZGVQb2ludCkpIHtcbiAgICAgICAgICAgICAgICAgICAgd2lkdGhFeHRyYSA9IFdJREVfV0lEVEg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKEFNQklHVU9VU19XSURUSCAhPT0gUkVHVUxBUl9XSURUSCAmJiBpc0FtYmlndW91cyhjb2RlUG9pbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHdpZHRoRXh0cmEgPSBBTUJJR1VPVVNfV0lEVEg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB3aWR0aEV4dHJhID0gUkVHVUxBUl9XSURUSDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCh3aWR0aCArIHdpZHRoRXh0cmEpID4gdHJ1bmNhdGlvbkxpbWl0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRydW5jYXRpb25JbmRleCA9IE1hdGgubWluKHRydW5jYXRpb25JbmRleCwgTWF0aC5tYXgodW5tYXRjaGVkU3RhcnQsIGluZGV4UHJldikgKyBsZW5ndGhFeHRyYSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICgod2lkdGggKyB3aWR0aEV4dHJhKSA+IExJTUlUKSB7XG4gICAgICAgICAgICAgICAgICAgIHRydW5jYXRpb25FbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWsgb3V0ZXI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxlbmd0aEV4dHJhICs9IGNoYXIubGVuZ3RoO1xuICAgICAgICAgICAgICAgIHdpZHRoICs9IHdpZHRoRXh0cmE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB1bm1hdGNoZWRTdGFydCA9IHVubWF0Y2hlZEVuZCA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgLyogRVhJVElORyAqL1xuICAgICAgICBpZiAoaW5kZXggPj0gbGVuZ3RoKVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIC8qIExBVElOICovXG4gICAgICAgIExBVElOX1JFLmxhc3RJbmRleCA9IGluZGV4O1xuICAgICAgICBpZiAoTEFUSU5fUkUudGVzdChpbnB1dCkpIHtcbiAgICAgICAgICAgIGxlbmd0aEV4dHJhID0gTEFUSU5fUkUubGFzdEluZGV4IC0gaW5kZXg7XG4gICAgICAgICAgICB3aWR0aEV4dHJhID0gbGVuZ3RoRXh0cmEgKiBSRUdVTEFSX1dJRFRIO1xuICAgICAgICAgICAgaWYgKCh3aWR0aCArIHdpZHRoRXh0cmEpID4gdHJ1bmNhdGlvbkxpbWl0KSB7XG4gICAgICAgICAgICAgICAgdHJ1bmNhdGlvbkluZGV4ID0gTWF0aC5taW4odHJ1bmNhdGlvbkluZGV4LCBpbmRleCArIE1hdGguZmxvb3IoKHRydW5jYXRpb25MaW1pdCAtIHdpZHRoKSAvIFJFR1VMQVJfV0lEVEgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgod2lkdGggKyB3aWR0aEV4dHJhKSA+IExJTUlUKSB7XG4gICAgICAgICAgICAgICAgdHJ1bmNhdGlvbkVuYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd2lkdGggKz0gd2lkdGhFeHRyYTtcbiAgICAgICAgICAgIHVubWF0Y2hlZFN0YXJ0ID0gaW5kZXhQcmV2O1xuICAgICAgICAgICAgdW5tYXRjaGVkRW5kID0gaW5kZXg7XG4gICAgICAgICAgICBpbmRleCA9IGluZGV4UHJldiA9IExBVElOX1JFLmxhc3RJbmRleDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIC8qIEFOU0kgKi9cbiAgICAgICAgQU5TSV9SRS5sYXN0SW5kZXggPSBpbmRleDtcbiAgICAgICAgaWYgKEFOU0lfUkUudGVzdChpbnB1dCkpIHtcbiAgICAgICAgICAgIGlmICgod2lkdGggKyBBTlNJX1dJRFRIKSA+IHRydW5jYXRpb25MaW1pdCkge1xuICAgICAgICAgICAgICAgIHRydW5jYXRpb25JbmRleCA9IE1hdGgubWluKHRydW5jYXRpb25JbmRleCwgaW5kZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCh3aWR0aCArIEFOU0lfV0lEVEgpID4gTElNSVQpIHtcbiAgICAgICAgICAgICAgICB0cnVuY2F0aW9uRW5hYmxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB3aWR0aCArPSBBTlNJX1dJRFRIO1xuICAgICAgICAgICAgdW5tYXRjaGVkU3RhcnQgPSBpbmRleFByZXY7XG4gICAgICAgICAgICB1bm1hdGNoZWRFbmQgPSBpbmRleDtcbiAgICAgICAgICAgIGluZGV4ID0gaW5kZXhQcmV2ID0gQU5TSV9SRS5sYXN0SW5kZXg7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICAvKiBDT05UUk9MICovXG4gICAgICAgIENPTlRST0xfUkUubGFzdEluZGV4ID0gaW5kZXg7XG4gICAgICAgIGlmIChDT05UUk9MX1JFLnRlc3QoaW5wdXQpKSB7XG4gICAgICAgICAgICBsZW5ndGhFeHRyYSA9IENPTlRST0xfUkUubGFzdEluZGV4IC0gaW5kZXg7XG4gICAgICAgICAgICB3aWR0aEV4dHJhID0gbGVuZ3RoRXh0cmEgKiBDT05UUk9MX1dJRFRIO1xuICAgICAgICAgICAgaWYgKCh3aWR0aCArIHdpZHRoRXh0cmEpID4gdHJ1bmNhdGlvbkxpbWl0KSB7XG4gICAgICAgICAgICAgICAgdHJ1bmNhdGlvbkluZGV4ID0gTWF0aC5taW4odHJ1bmNhdGlvbkluZGV4LCBpbmRleCArIE1hdGguZmxvb3IoKHRydW5jYXRpb25MaW1pdCAtIHdpZHRoKSAvIENPTlRST0xfV0lEVEgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgod2lkdGggKyB3aWR0aEV4dHJhKSA+IExJTUlUKSB7XG4gICAgICAgICAgICAgICAgdHJ1bmNhdGlvbkVuYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd2lkdGggKz0gd2lkdGhFeHRyYTtcbiAgICAgICAgICAgIHVubWF0Y2hlZFN0YXJ0ID0gaW5kZXhQcmV2O1xuICAgICAgICAgICAgdW5tYXRjaGVkRW5kID0gaW5kZXg7XG4gICAgICAgICAgICBpbmRleCA9IGluZGV4UHJldiA9IENPTlRST0xfUkUubGFzdEluZGV4O1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgLyogVEFCICovXG4gICAgICAgIFRBQl9SRS5sYXN0SW5kZXggPSBpbmRleDtcbiAgICAgICAgaWYgKFRBQl9SRS50ZXN0KGlucHV0KSkge1xuICAgICAgICAgICAgbGVuZ3RoRXh0cmEgPSBUQUJfUkUubGFzdEluZGV4IC0gaW5kZXg7XG4gICAgICAgICAgICB3aWR0aEV4dHJhID0gbGVuZ3RoRXh0cmEgKiBUQUJfV0lEVEg7XG4gICAgICAgICAgICBpZiAoKHdpZHRoICsgd2lkdGhFeHRyYSkgPiB0cnVuY2F0aW9uTGltaXQpIHtcbiAgICAgICAgICAgICAgICB0cnVuY2F0aW9uSW5kZXggPSBNYXRoLm1pbih0cnVuY2F0aW9uSW5kZXgsIGluZGV4ICsgTWF0aC5mbG9vcigodHJ1bmNhdGlvbkxpbWl0IC0gd2lkdGgpIC8gVEFCX1dJRFRIKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoKHdpZHRoICsgd2lkdGhFeHRyYSkgPiBMSU1JVCkge1xuICAgICAgICAgICAgICAgIHRydW5jYXRpb25FbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHdpZHRoICs9IHdpZHRoRXh0cmE7XG4gICAgICAgICAgICB1bm1hdGNoZWRTdGFydCA9IGluZGV4UHJldjtcbiAgICAgICAgICAgIHVubWF0Y2hlZEVuZCA9IGluZGV4O1xuICAgICAgICAgICAgaW5kZXggPSBpbmRleFByZXYgPSBUQUJfUkUubGFzdEluZGV4O1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgLyogRU1PSkkgKi9cbiAgICAgICAgRU1PSklfUkUubGFzdEluZGV4ID0gaW5kZXg7XG4gICAgICAgIGlmIChFTU9KSV9SRS50ZXN0KGlucHV0KSkge1xuICAgICAgICAgICAgaWYgKCh3aWR0aCArIEVNT0pJX1dJRFRIKSA+IHRydW5jYXRpb25MaW1pdCkge1xuICAgICAgICAgICAgICAgIHRydW5jYXRpb25JbmRleCA9IE1hdGgubWluKHRydW5jYXRpb25JbmRleCwgaW5kZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCh3aWR0aCArIEVNT0pJX1dJRFRIKSA+IExJTUlUKSB7XG4gICAgICAgICAgICAgICAgdHJ1bmNhdGlvbkVuYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd2lkdGggKz0gRU1PSklfV0lEVEg7XG4gICAgICAgICAgICB1bm1hdGNoZWRTdGFydCA9IGluZGV4UHJldjtcbiAgICAgICAgICAgIHVubWF0Y2hlZEVuZCA9IGluZGV4O1xuICAgICAgICAgICAgaW5kZXggPSBpbmRleFByZXYgPSBFTU9KSV9SRS5sYXN0SW5kZXg7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICAvKiBVTk1BVENIRUQgSU5ERVggKi9cbiAgICAgICAgaW5kZXggKz0gMTtcbiAgICB9XG4gICAgLyogUkVUVVJOICovXG4gICAgcmV0dXJuIHtcbiAgICAgICAgd2lkdGg6IHRydW5jYXRpb25FbmFibGVkID8gdHJ1bmNhdGlvbkxpbWl0IDogd2lkdGgsXG4gICAgICAgIGluZGV4OiB0cnVuY2F0aW9uRW5hYmxlZCA/IHRydW5jYXRpb25JbmRleCA6IGxlbmd0aCxcbiAgICAgICAgdHJ1bmNhdGVkOiB0cnVuY2F0aW9uRW5hYmxlZCxcbiAgICAgICAgZWxsaXBzZWQ6IHRydW5jYXRpb25FbmFibGVkICYmIExJTUlUID49IEVMTElQU0lTX1dJRFRIXG4gICAgfTtcbn07XG4vKiBFWFBPUlQgKi9cbmV4cG9ydCBkZWZhdWx0IGdldFN0cmluZ1RydW5jYXRlZFdpZHRoO1xuIiwgIi8qIElNUE9SVCAqL1xuaW1wb3J0IGZhc3RTdHJpbmdUcnVuY2F0ZWRXaWR0aCBmcm9tICdmYXN0LXN0cmluZy10cnVuY2F0ZWQtd2lkdGgnO1xuLyogSEVMUEVSUyAqL1xuY29uc3QgTk9fVFJVTkNBVElPTiA9IHtcbiAgICBsaW1pdDogSW5maW5pdHksXG4gICAgZWxsaXBzaXM6ICcnLFxuICAgIGVsbGlwc2lzV2lkdGg6IDAsXG59O1xuLyogTUFJTiAqL1xuY29uc3QgZmFzdFN0cmluZ1dpZHRoID0gKGlucHV0LCBvcHRpb25zID0ge30pID0+IHtcbiAgICByZXR1cm4gZmFzdFN0cmluZ1RydW5jYXRlZFdpZHRoKGlucHV0LCBOT19UUlVOQ0FUSU9OLCBvcHRpb25zKS53aWR0aDtcbn07XG4vKiBFWFBPUlQgKi9cbmV4cG9ydCBkZWZhdWx0IGZhc3RTdHJpbmdXaWR0aDtcbiIsICJpbXBvcnQgc3RyaW5nV2lkdGggZnJvbSAnZmFzdC1zdHJpbmctd2lkdGgnO1xuY29uc3QgRVNDID0gJ1xceDFCJztcbmNvbnN0IENTSSA9ICdcXHg5Qic7XG5jb25zdCBFTkRfQ09ERSA9IDM5O1xuY29uc3QgQU5TSV9FU0NBUEVfQkVMTCA9ICdcXHUwMDA3JztcbmNvbnN0IEFOU0lfQ1NJID0gJ1snO1xuY29uc3QgQU5TSV9PU0MgPSAnXSc7XG5jb25zdCBBTlNJX1NHUl9URVJNSU5BVE9SID0gJ20nO1xuY29uc3QgQU5TSV9FU0NBUEVfTElOSyA9IGAke0FOU0lfT1NDfTg7O2A7XG5jb25zdCBHUk9VUF9SRUdFWCA9IG5ldyBSZWdFeHAoYCg/OlxcXFwke0FOU0lfQ1NJfSg/PGNvZGU+XFxcXGQrKW18XFxcXCR7QU5TSV9FU0NBUEVfTElOS30oPzx1cmk+LiopJHtBTlNJX0VTQ0FQRV9CRUxMfSlgLCAneScpO1xuY29uc3QgZ2V0Q2xvc2luZ0NvZGUgPSAob3BlbmluZ0NvZGUpID0+IHtcbiAgICBpZiAob3BlbmluZ0NvZGUgPj0gMzAgJiYgb3BlbmluZ0NvZGUgPD0gMzcpXG4gICAgICAgIHJldHVybiAzOTtcbiAgICBpZiAob3BlbmluZ0NvZGUgPj0gOTAgJiYgb3BlbmluZ0NvZGUgPD0gOTcpXG4gICAgICAgIHJldHVybiAzOTtcbiAgICBpZiAob3BlbmluZ0NvZGUgPj0gNDAgJiYgb3BlbmluZ0NvZGUgPD0gNDcpXG4gICAgICAgIHJldHVybiA0OTtcbiAgICBpZiAob3BlbmluZ0NvZGUgPj0gMTAwICYmIG9wZW5pbmdDb2RlIDw9IDEwNylcbiAgICAgICAgcmV0dXJuIDQ5O1xuICAgIGlmIChvcGVuaW5nQ29kZSA9PT0gMSB8fCBvcGVuaW5nQ29kZSA9PT0gMilcbiAgICAgICAgcmV0dXJuIDIyO1xuICAgIGlmIChvcGVuaW5nQ29kZSA9PT0gMylcbiAgICAgICAgcmV0dXJuIDIzO1xuICAgIGlmIChvcGVuaW5nQ29kZSA9PT0gNClcbiAgICAgICAgcmV0dXJuIDI0O1xuICAgIGlmIChvcGVuaW5nQ29kZSA9PT0gNylcbiAgICAgICAgcmV0dXJuIDI3O1xuICAgIGlmIChvcGVuaW5nQ29kZSA9PT0gOClcbiAgICAgICAgcmV0dXJuIDI4O1xuICAgIGlmIChvcGVuaW5nQ29kZSA9PT0gOSlcbiAgICAgICAgcmV0dXJuIDI5O1xuICAgIGlmIChvcGVuaW5nQ29kZSA9PT0gMClcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG5jb25zdCB3cmFwQW5zaUNvZGUgPSAoY29kZSkgPT4gYCR7RVNDfSR7QU5TSV9DU0l9JHtjb2RlfSR7QU5TSV9TR1JfVEVSTUlOQVRPUn1gO1xuY29uc3Qgd3JhcEFuc2lIeXBlcmxpbmsgPSAodXJsKSA9PiBgJHtFU0N9JHtBTlNJX0VTQ0FQRV9MSU5LfSR7dXJsfSR7QU5TSV9FU0NBUEVfQkVMTH1gO1xuY29uc3Qgd29yZExlbmd0aHMgPSAod29yZHMpID0+IHdvcmRzLm1hcCgoY2hhcmFjdGVyKSA9PiBzdHJpbmdXaWR0aChjaGFyYWN0ZXIpKTtcbmNvbnN0IHdyYXBXb3JkID0gKHJvd3MsIHdvcmQsIGNvbHVtbnMpID0+IHtcbiAgICBjb25zdCBjaGFyYWN0ZXJzID0gd29yZFtTeW1ib2wuaXRlcmF0b3JdKCk7XG4gICAgbGV0IGlzSW5zaWRlRXNjYXBlID0gZmFsc2U7XG4gICAgbGV0IGlzSW5zaWRlTGlua0VzY2FwZSA9IGZhbHNlO1xuICAgIGxldCBsYXN0Um93ID0gcm93cy5hdCgtMSk7XG4gICAgbGV0IHZpc2libGUgPSBsYXN0Um93ID09PSB1bmRlZmluZWQgPyAwIDogc3RyaW5nV2lkdGgobGFzdFJvdyk7XG4gICAgbGV0IGN1cnJlbnRDaGFyYWN0ZXIgPSBjaGFyYWN0ZXJzLm5leHQoKTtcbiAgICBsZXQgbmV4dENoYXJhY3RlciA9IGNoYXJhY3RlcnMubmV4dCgpO1xuICAgIGxldCByYXdDaGFyYWN0ZXJJbmRleCA9IDA7XG4gICAgd2hpbGUgKCFjdXJyZW50Q2hhcmFjdGVyLmRvbmUpIHtcbiAgICAgICAgY29uc3QgY2hhcmFjdGVyID0gY3VycmVudENoYXJhY3Rlci52YWx1ZTtcbiAgICAgICAgY29uc3QgY2hhcmFjdGVyTGVuZ3RoID0gc3RyaW5nV2lkdGgoY2hhcmFjdGVyKTtcbiAgICAgICAgaWYgKHZpc2libGUgKyBjaGFyYWN0ZXJMZW5ndGggPD0gY29sdW1ucykge1xuICAgICAgICAgICAgcm93c1tyb3dzLmxlbmd0aCAtIDFdICs9IGNoYXJhY3RlcjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJvd3MucHVzaChjaGFyYWN0ZXIpO1xuICAgICAgICAgICAgdmlzaWJsZSA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoYXJhY3RlciA9PT0gRVNDIHx8IGNoYXJhY3RlciA9PT0gQ1NJKSB7XG4gICAgICAgICAgICBpc0luc2lkZUVzY2FwZSA9IHRydWU7XG4gICAgICAgICAgICBpc0luc2lkZUxpbmtFc2NhcGUgPSB3b3JkLnN0YXJ0c1dpdGgoQU5TSV9FU0NBUEVfTElOSywgcmF3Q2hhcmFjdGVySW5kZXggKyAxKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNJbnNpZGVFc2NhcGUpIHtcbiAgICAgICAgICAgIGlmIChpc0luc2lkZUxpbmtFc2NhcGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2hhcmFjdGVyID09PSBBTlNJX0VTQ0FQRV9CRUxMKSB7XG4gICAgICAgICAgICAgICAgICAgIGlzSW5zaWRlRXNjYXBlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGlzSW5zaWRlTGlua0VzY2FwZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoYXJhY3RlciA9PT0gQU5TSV9TR1JfVEVSTUlOQVRPUikge1xuICAgICAgICAgICAgICAgIGlzSW5zaWRlRXNjYXBlID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2aXNpYmxlICs9IGNoYXJhY3Rlckxlbmd0aDtcbiAgICAgICAgICAgIGlmICh2aXNpYmxlID09PSBjb2x1bW5zICYmICFuZXh0Q2hhcmFjdGVyLmRvbmUpIHtcbiAgICAgICAgICAgICAgICByb3dzLnB1c2goJycpO1xuICAgICAgICAgICAgICAgIHZpc2libGUgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGN1cnJlbnRDaGFyYWN0ZXIgPSBuZXh0Q2hhcmFjdGVyO1xuICAgICAgICBuZXh0Q2hhcmFjdGVyID0gY2hhcmFjdGVycy5uZXh0KCk7XG4gICAgICAgIHJhd0NoYXJhY3RlckluZGV4ICs9IGNoYXJhY3Rlci5sZW5ndGg7XG4gICAgfVxuICAgIGxhc3RSb3cgPSByb3dzLmF0KC0xKTtcbiAgICBpZiAoIXZpc2libGUgJiZcbiAgICAgICAgbGFzdFJvdyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgIGxhc3RSb3cubGVuZ3RoID4gMCAmJlxuICAgICAgICByb3dzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgcm93c1tyb3dzLmxlbmd0aCAtIDJdICs9IHJvd3MucG9wKCk7XG4gICAgfVxufTtcbmNvbnN0IHN0cmluZ1Zpc2libGVUcmltU3BhY2VzUmlnaHQgPSAoc3RyaW5nKSA9PiB7XG4gICAgY29uc3Qgd29yZHMgPSBzdHJpbmcuc3BsaXQoJyAnKTtcbiAgICBsZXQgbGFzdCA9IHdvcmRzLmxlbmd0aDtcbiAgICB3aGlsZSAobGFzdCA+IDApIHtcbiAgICAgICAgaWYgKHN0cmluZ1dpZHRoKHdvcmRzW2xhc3QgLSAxXSkgPiAwKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBsYXN0LS07XG4gICAgfVxuICAgIGlmIChsYXN0ID09PSB3b3Jkcy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHN0cmluZztcbiAgICB9XG4gICAgcmV0dXJuIHdvcmRzLnNsaWNlKDAsIGxhc3QpLmpvaW4oJyAnKSArIHdvcmRzLnNsaWNlKGxhc3QpLmpvaW4oJycpO1xufTtcbmNvbnN0IGV4ZWMgPSAoc3RyaW5nLCBjb2x1bW5zLCBvcHRpb25zID0ge30pID0+IHtcbiAgICBpZiAob3B0aW9ucy50cmltICE9PSBmYWxzZSAmJiBzdHJpbmcudHJpbSgpID09PSAnJykge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIGxldCByZXR1cm5WYWx1ZSA9ICcnO1xuICAgIGxldCBlc2NhcGVDb2RlO1xuICAgIGxldCBlc2NhcGVVcmw7XG4gICAgY29uc3Qgd29yZHMgPSBzdHJpbmcuc3BsaXQoJyAnKTtcbiAgICBjb25zdCBsZW5ndGhzID0gd29yZExlbmd0aHMod29yZHMpO1xuICAgIGxldCByb3dzID0gWycnXTtcbiAgICBmb3IgKGNvbnN0IFtpbmRleCwgd29yZF0gb2Ygd29yZHMuZW50cmllcygpKSB7XG4gICAgICAgIGlmIChvcHRpb25zLnRyaW0gIT09IGZhbHNlKSB7XG4gICAgICAgICAgICByb3dzW3Jvd3MubGVuZ3RoIC0gMV0gPSAocm93cy5hdCgtMSkgPz8gJycpLnRyaW1TdGFydCgpO1xuICAgICAgICB9XG4gICAgICAgIGxldCByb3dMZW5ndGggPSBzdHJpbmdXaWR0aChyb3dzLmF0KC0xKSA/PyAnJyk7XG4gICAgICAgIGlmIChpbmRleCAhPT0gMCkge1xuICAgICAgICAgICAgaWYgKHJvd0xlbmd0aCA+PSBjb2x1bW5zICYmXG4gICAgICAgICAgICAgICAgKG9wdGlvbnMud29yZFdyYXAgPT09IGZhbHNlIHx8IG9wdGlvbnMudHJpbSA9PT0gZmFsc2UpKSB7XG4gICAgICAgICAgICAgICAgcm93cy5wdXNoKCcnKTtcbiAgICAgICAgICAgICAgICByb3dMZW5ndGggPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJvd0xlbmd0aCA+IDAgfHwgb3B0aW9ucy50cmltID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHJvd3Nbcm93cy5sZW5ndGggLSAxXSArPSAnICc7XG4gICAgICAgICAgICAgICAgcm93TGVuZ3RoKys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuaGFyZCAmJiBsZW5ndGhzW2luZGV4XSA+IGNvbHVtbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlbWFpbmluZ0NvbHVtbnMgPSBjb2x1bW5zIC0gcm93TGVuZ3RoO1xuICAgICAgICAgICAgY29uc3QgYnJlYWtzU3RhcnRpbmdUaGlzTGluZSA9IDEgKyBNYXRoLmZsb29yKChsZW5ndGhzW2luZGV4XSAtIHJlbWFpbmluZ0NvbHVtbnMgLSAxKSAvIGNvbHVtbnMpO1xuICAgICAgICAgICAgY29uc3QgYnJlYWtzU3RhcnRpbmdOZXh0TGluZSA9IE1hdGguZmxvb3IoKGxlbmd0aHNbaW5kZXhdIC0gMSkgLyBjb2x1bW5zKTtcbiAgICAgICAgICAgIGlmIChicmVha3NTdGFydGluZ05leHRMaW5lIDwgYnJlYWtzU3RhcnRpbmdUaGlzTGluZSkge1xuICAgICAgICAgICAgICAgIHJvd3MucHVzaCgnJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB3cmFwV29yZChyb3dzLCB3b3JkLCBjb2x1bW5zKTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyb3dMZW5ndGggKyBsZW5ndGhzW2luZGV4XSA+IGNvbHVtbnMgJiZcbiAgICAgICAgICAgIHJvd0xlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgIGxlbmd0aHNbaW5kZXhdID4gMCkge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMud29yZFdyYXAgPT09IGZhbHNlICYmIHJvd0xlbmd0aCA8IGNvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICB3cmFwV29yZChyb3dzLCB3b3JkLCBjb2x1bW5zKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJvd3MucHVzaCgnJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJvd0xlbmd0aCArIGxlbmd0aHNbaW5kZXhdID4gY29sdW1ucyAmJiBvcHRpb25zLndvcmRXcmFwID09PSBmYWxzZSkge1xuICAgICAgICAgICAgd3JhcFdvcmQocm93cywgd29yZCwgY29sdW1ucyk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICByb3dzW3Jvd3MubGVuZ3RoIC0gMV0gKz0gd29yZDtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMudHJpbSAhPT0gZmFsc2UpIHtcbiAgICAgICAgcm93cyA9IHJvd3MubWFwKChyb3cpID0+IHN0cmluZ1Zpc2libGVUcmltU3BhY2VzUmlnaHQocm93KSk7XG4gICAgfVxuICAgIGNvbnN0IHByZVN0cmluZyA9IHJvd3Muam9pbignXFxuJyk7XG4gICAgY29uc3QgcHJlID0gcHJlU3RyaW5nW1N5bWJvbC5pdGVyYXRvcl0oKTtcbiAgICBsZXQgY3VycmVudFByZSA9IHByZS5uZXh0KCk7XG4gICAgbGV0IG5leHRQcmUgPSBwcmUubmV4dCgpO1xuICAgIC8vIFdlIG5lZWQgdG8ga2VlcCBhIHNlcGFyYXRlIGluZGV4IGFzIGBTdHJpbmcjc2xpY2UoKWAgd29ya3Mgb24gVW5pY29kZSBjb2RlIHVuaXRzLCB3aGlsZSBgcHJlYCBpcyBhbiBhcnJheSBvZiBjb2RlcG9pbnRzLlxuICAgIGxldCBwcmVTdHJpbmdJbmRleCA9IDA7XG4gICAgd2hpbGUgKCFjdXJyZW50UHJlLmRvbmUpIHtcbiAgICAgICAgY29uc3QgY2hhcmFjdGVyID0gY3VycmVudFByZS52YWx1ZTtcbiAgICAgICAgY29uc3QgbmV4dENoYXJhY3RlciA9IG5leHRQcmUudmFsdWU7XG4gICAgICAgIHJldHVyblZhbHVlICs9IGNoYXJhY3RlcjtcbiAgICAgICAgaWYgKGNoYXJhY3RlciA9PT0gRVNDIHx8IGNoYXJhY3RlciA9PT0gQ1NJKSB7XG4gICAgICAgICAgICBHUk9VUF9SRUdFWC5sYXN0SW5kZXggPSBwcmVTdHJpbmdJbmRleCArIDE7XG4gICAgICAgICAgICBjb25zdCBncm91cHNSZXN1bHQgPSBHUk9VUF9SRUdFWC5leGVjKHByZVN0cmluZyk7XG4gICAgICAgICAgICBjb25zdCBncm91cHMgPSBncm91cHNSZXN1bHQ/Lmdyb3VwcztcbiAgICAgICAgICAgIGlmIChncm91cHM/LmNvZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvZGUgPSBOdW1iZXIucGFyc2VGbG9hdChncm91cHMuY29kZSk7XG4gICAgICAgICAgICAgICAgZXNjYXBlQ29kZSA9IGNvZGUgPT09IEVORF9DT0RFID8gdW5kZWZpbmVkIDogY29kZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGdyb3Vwcz8udXJpICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBlc2NhcGVVcmwgPSBncm91cHMudXJpLmxlbmd0aCA9PT0gMCA/IHVuZGVmaW5lZCA6IGdyb3Vwcy51cmk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2xvc2luZ0NvZGUgPSBlc2NhcGVDb2RlID8gZ2V0Q2xvc2luZ0NvZGUoZXNjYXBlQ29kZSkgOiB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChuZXh0Q2hhcmFjdGVyID09PSAnXFxuJykge1xuICAgICAgICAgICAgaWYgKGVzY2FwZVVybCkge1xuICAgICAgICAgICAgICAgIHJldHVyblZhbHVlICs9IHdyYXBBbnNpSHlwZXJsaW5rKCcnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlc2NhcGVDb2RlICYmIGNsb3NpbmdDb2RlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUgKz0gd3JhcEFuc2lDb2RlKGNsb3NpbmdDb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjaGFyYWN0ZXIgPT09ICdcXG4nKSB7XG4gICAgICAgICAgICBpZiAoZXNjYXBlQ29kZSAmJiBjbG9zaW5nQ29kZSkge1xuICAgICAgICAgICAgICAgIHJldHVyblZhbHVlICs9IHdyYXBBbnNpQ29kZShlc2NhcGVDb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlc2NhcGVVcmwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSArPSB3cmFwQW5zaUh5cGVybGluayhlc2NhcGVVcmwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHByZVN0cmluZ0luZGV4ICs9IGNoYXJhY3Rlci5sZW5ndGg7XG4gICAgICAgIGN1cnJlbnRQcmUgPSBuZXh0UHJlO1xuICAgICAgICBuZXh0UHJlID0gcHJlLm5leHQoKTtcbiAgICB9XG4gICAgcmV0dXJuIHJldHVyblZhbHVlO1xufTtcbmV4cG9ydCBmdW5jdGlvbiB3cmFwQW5zaShzdHJpbmcsIGNvbHVtbnMsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gU3RyaW5nKHN0cmluZylcbiAgICAgICAgLm5vcm1hbGl6ZSgpXG4gICAgICAgIC5yZXBsYWNlQWxsKCdcXHJcXG4nLCAnXFxuJylcbiAgICAgICAgLnNwbGl0KCdcXG4nKVxuICAgICAgICAubWFwKChsaW5lKSA9PiBleGVjKGxpbmUsIGNvbHVtbnMsIG9wdGlvbnMpKVxuICAgICAgICAuam9pbignXFxuJyk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1tYWluLmpzLm1hcCIsICJpbXBvcnQgdHlwZSB7IFdyaXRhYmxlIH0gZnJvbSAnbm9kZTpzdHJlYW0nO1xuaW1wb3J0IHsgZ2V0Q29sdW1ucywgZ2V0Um93cyB9IGZyb20gJ0BjbGFjay9jb3JlJztcbmltcG9ydCB7IHdyYXBBbnNpIH0gZnJvbSAnZmFzdC13cmFwLWFuc2knO1xuaW1wb3J0IGNvbG9yIGZyb20gJ3BpY29jb2xvcnMnO1xuaW1wb3J0IHR5cGUgeyBDb21tb25PcHRpb25zIH0gZnJvbSAnLi9jb21tb24uanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIExpbWl0T3B0aW9uc1BhcmFtczxUT3B0aW9uPiBleHRlbmRzIENvbW1vbk9wdGlvbnMge1xuXHRvcHRpb25zOiBUT3B0aW9uW107XG5cdG1heEl0ZW1zOiBudW1iZXIgfCB1bmRlZmluZWQ7XG5cdGN1cnNvcjogbnVtYmVyO1xuXHRzdHlsZTogKG9wdGlvbjogVE9wdGlvbiwgYWN0aXZlOiBib29sZWFuKSA9PiBzdHJpbmc7XG5cdGNvbHVtblBhZGRpbmc/OiBudW1iZXI7XG5cdHJvd1BhZGRpbmc/OiBudW1iZXI7XG59XG5cbmNvbnN0IHRyaW1MaW5lcyA9IChcblx0Z3JvdXBzOiBBcnJheTxzdHJpbmdbXT4sXG5cdGluaXRpYWxMaW5lQ291bnQ6IG51bWJlcixcblx0c3RhcnRJbmRleDogbnVtYmVyLFxuXHRlbmRJbmRleDogbnVtYmVyLFxuXHRtYXhMaW5lczogbnVtYmVyXG4pID0+IHtcblx0bGV0IGxpbmVDb3VudCA9IGluaXRpYWxMaW5lQ291bnQ7XG5cdGxldCByZW1vdmFscyA9IDA7XG5cdGZvciAobGV0IGkgPSBzdGFydEluZGV4OyBpIDwgZW5kSW5kZXg7IGkrKykge1xuXHRcdGNvbnN0IGdyb3VwID0gZ3JvdXBzW2ldO1xuXHRcdGxpbmVDb3VudCA9IGxpbmVDb3VudCAtIGdyb3VwLmxlbmd0aDtcblx0XHRyZW1vdmFscysrO1xuXHRcdGlmIChsaW5lQ291bnQgPD0gbWF4TGluZXMpIHtcblx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4geyBsaW5lQ291bnQsIHJlbW92YWxzIH07XG59O1xuXG5leHBvcnQgY29uc3QgbGltaXRPcHRpb25zID0gPFRPcHRpb24+KHBhcmFtczogTGltaXRPcHRpb25zUGFyYW1zPFRPcHRpb24+KTogc3RyaW5nW10gPT4ge1xuXHRjb25zdCB7IGN1cnNvciwgb3B0aW9ucywgc3R5bGUgfSA9IHBhcmFtcztcblx0Y29uc3Qgb3V0cHV0OiBXcml0YWJsZSA9IHBhcmFtcy5vdXRwdXQgPz8gcHJvY2Vzcy5zdGRvdXQ7XG5cdGNvbnN0IGNvbHVtbnMgPSBnZXRDb2x1bW5zKG91dHB1dCk7XG5cdGNvbnN0IGNvbHVtblBhZGRpbmcgPSBwYXJhbXMuY29sdW1uUGFkZGluZyA/PyAwO1xuXHRjb25zdCByb3dQYWRkaW5nID0gcGFyYW1zLnJvd1BhZGRpbmcgPz8gNDtcblx0Y29uc3QgbWF4V2lkdGggPSBjb2x1bW5zIC0gY29sdW1uUGFkZGluZztcblx0Y29uc3Qgcm93cyA9IGdldFJvd3Mob3V0cHV0KTtcblx0Y29uc3Qgb3ZlcmZsb3dGb3JtYXQgPSBjb2xvci5kaW0oJy4uLicpO1xuXG5cdGNvbnN0IHBhcmFtTWF4SXRlbXMgPSBwYXJhbXMubWF4SXRlbXMgPz8gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO1xuXHRjb25zdCBvdXRwdXRNYXhJdGVtcyA9IE1hdGgubWF4KHJvd3MgLSByb3dQYWRkaW5nLCAwKTtcblx0Ly8gV2UgY2xhbXAgdG8gbWluaW11bSA1IGJlY2F1c2UgYW55dGhpbmcgbGVzcyBkb2Vzbid0IG1ha2Ugc2Vuc2UgVVggd2lzZVxuXHRjb25zdCBtYXhJdGVtcyA9IE1hdGgubWF4KE1hdGgubWluKHBhcmFtTWF4SXRlbXMsIG91dHB1dE1heEl0ZW1zKSwgNSk7XG5cdGxldCBzbGlkaW5nV2luZG93TG9jYXRpb24gPSAwO1xuXG5cdGlmIChjdXJzb3IgPj0gbWF4SXRlbXMgLSAzKSB7XG5cdFx0c2xpZGluZ1dpbmRvd0xvY2F0aW9uID0gTWF0aC5tYXgoTWF0aC5taW4oY3Vyc29yIC0gbWF4SXRlbXMgKyAzLCBvcHRpb25zLmxlbmd0aCAtIG1heEl0ZW1zKSwgMCk7XG5cdH1cblxuXHRsZXQgc2hvdWxkUmVuZGVyVG9wRWxsaXBzaXMgPSBtYXhJdGVtcyA8IG9wdGlvbnMubGVuZ3RoICYmIHNsaWRpbmdXaW5kb3dMb2NhdGlvbiA+IDA7XG5cdGxldCBzaG91bGRSZW5kZXJCb3R0b21FbGxpcHNpcyA9XG5cdFx0bWF4SXRlbXMgPCBvcHRpb25zLmxlbmd0aCAmJiBzbGlkaW5nV2luZG93TG9jYXRpb24gKyBtYXhJdGVtcyA8IG9wdGlvbnMubGVuZ3RoO1xuXG5cdGNvbnN0IHNsaWRpbmdXaW5kb3dMb2NhdGlvbkVuZCA9IE1hdGgubWluKHNsaWRpbmdXaW5kb3dMb2NhdGlvbiArIG1heEl0ZW1zLCBvcHRpb25zLmxlbmd0aCk7XG5cdGNvbnN0IGxpbmVHcm91cHM6IEFycmF5PHN0cmluZ1tdPiA9IFtdO1xuXHRsZXQgbGluZUNvdW50ID0gMDtcblx0aWYgKHNob3VsZFJlbmRlclRvcEVsbGlwc2lzKSB7XG5cdFx0bGluZUNvdW50Kys7XG5cdH1cblx0aWYgKHNob3VsZFJlbmRlckJvdHRvbUVsbGlwc2lzKSB7XG5cdFx0bGluZUNvdW50Kys7XG5cdH1cblxuXHRjb25zdCBzbGlkaW5nV2luZG93TG9jYXRpb25XaXRoRWxsaXBzaXMgPVxuXHRcdHNsaWRpbmdXaW5kb3dMb2NhdGlvbiArIChzaG91bGRSZW5kZXJUb3BFbGxpcHNpcyA/IDEgOiAwKTtcblx0Y29uc3Qgc2xpZGluZ1dpbmRvd0xvY2F0aW9uRW5kV2l0aEVsbGlwc2lzID1cblx0XHRzbGlkaW5nV2luZG93TG9jYXRpb25FbmQgLSAoc2hvdWxkUmVuZGVyQm90dG9tRWxsaXBzaXMgPyAxIDogMCk7XG5cblx0Zm9yIChsZXQgaSA9IHNsaWRpbmdXaW5kb3dMb2NhdGlvbldpdGhFbGxpcHNpczsgaSA8IHNsaWRpbmdXaW5kb3dMb2NhdGlvbkVuZFdpdGhFbGxpcHNpczsgaSsrKSB7XG5cdFx0Y29uc3Qgd3JhcHBlZExpbmVzID0gd3JhcEFuc2koc3R5bGUob3B0aW9uc1tpXSwgaSA9PT0gY3Vyc29yKSwgbWF4V2lkdGgsIHtcblx0XHRcdGhhcmQ6IHRydWUsXG5cdFx0XHR0cmltOiBmYWxzZSxcblx0XHR9KS5zcGxpdCgnXFxuJyk7XG5cdFx0bGluZUdyb3Vwcy5wdXNoKHdyYXBwZWRMaW5lcyk7XG5cdFx0bGluZUNvdW50ICs9IHdyYXBwZWRMaW5lcy5sZW5ndGg7XG5cdH1cblxuXHRpZiAobGluZUNvdW50ID4gb3V0cHV0TWF4SXRlbXMpIHtcblx0XHRsZXQgcHJlY2VkaW5nUmVtb3ZhbHMgPSAwO1xuXHRcdGxldCBmb2xsb3dpbmdSZW1vdmFscyA9IDA7XG5cdFx0bGV0IG5ld0xpbmVDb3VudCA9IGxpbmVDb3VudDtcblx0XHRjb25zdCBjdXJzb3JHcm91cEluZGV4ID0gY3Vyc29yIC0gc2xpZGluZ1dpbmRvd0xvY2F0aW9uV2l0aEVsbGlwc2lzO1xuXHRcdGNvbnN0IHRyaW1MaW5lc0xvY2FsID0gKHN0YXJ0SW5kZXg6IG51bWJlciwgZW5kSW5kZXg6IG51bWJlcikgPT5cblx0XHRcdHRyaW1MaW5lcyhsaW5lR3JvdXBzLCBuZXdMaW5lQ291bnQsIHN0YXJ0SW5kZXgsIGVuZEluZGV4LCBvdXRwdXRNYXhJdGVtcyk7XG5cblx0XHRpZiAoc2hvdWxkUmVuZGVyVG9wRWxsaXBzaXMpIHtcblx0XHRcdCh7IGxpbmVDb3VudDogbmV3TGluZUNvdW50LCByZW1vdmFsczogcHJlY2VkaW5nUmVtb3ZhbHMgfSA9IHRyaW1MaW5lc0xvY2FsKFxuXHRcdFx0XHQwLFxuXHRcdFx0XHRjdXJzb3JHcm91cEluZGV4XG5cdFx0XHQpKTtcblx0XHRcdGlmIChuZXdMaW5lQ291bnQgPiBvdXRwdXRNYXhJdGVtcykge1xuXHRcdFx0XHQoeyBsaW5lQ291bnQ6IG5ld0xpbmVDb3VudCwgcmVtb3ZhbHM6IGZvbGxvd2luZ1JlbW92YWxzIH0gPSB0cmltTGluZXNMb2NhbChcblx0XHRcdFx0XHRjdXJzb3JHcm91cEluZGV4ICsgMSxcblx0XHRcdFx0XHRsaW5lR3JvdXBzLmxlbmd0aFxuXHRcdFx0XHQpKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0KHsgbGluZUNvdW50OiBuZXdMaW5lQ291bnQsIHJlbW92YWxzOiBmb2xsb3dpbmdSZW1vdmFscyB9ID0gdHJpbUxpbmVzTG9jYWwoXG5cdFx0XHRcdGN1cnNvckdyb3VwSW5kZXggKyAxLFxuXHRcdFx0XHRsaW5lR3JvdXBzLmxlbmd0aFxuXHRcdFx0KSk7XG5cdFx0XHRpZiAobmV3TGluZUNvdW50ID4gb3V0cHV0TWF4SXRlbXMpIHtcblx0XHRcdFx0KHsgbGluZUNvdW50OiBuZXdMaW5lQ291bnQsIHJlbW92YWxzOiBwcmVjZWRpbmdSZW1vdmFscyB9ID0gdHJpbUxpbmVzTG9jYWwoXG5cdFx0XHRcdFx0MCxcblx0XHRcdFx0XHRjdXJzb3JHcm91cEluZGV4XG5cdFx0XHRcdCkpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChwcmVjZWRpbmdSZW1vdmFscyA+IDApIHtcblx0XHRcdHNob3VsZFJlbmRlclRvcEVsbGlwc2lzID0gdHJ1ZTtcblx0XHRcdGxpbmVHcm91cHMuc3BsaWNlKDAsIHByZWNlZGluZ1JlbW92YWxzKTtcblx0XHR9XG5cdFx0aWYgKGZvbGxvd2luZ1JlbW92YWxzID4gMCkge1xuXHRcdFx0c2hvdWxkUmVuZGVyQm90dG9tRWxsaXBzaXMgPSB0cnVlO1xuXHRcdFx0bGluZUdyb3Vwcy5zcGxpY2UobGluZUdyb3Vwcy5sZW5ndGggLSBmb2xsb3dpbmdSZW1vdmFscywgZm9sbG93aW5nUmVtb3ZhbHMpO1xuXHRcdH1cblx0fVxuXG5cdGNvbnN0IHJlc3VsdDogc3RyaW5nW10gPSBbXTtcblx0aWYgKHNob3VsZFJlbmRlclRvcEVsbGlwc2lzKSB7XG5cdFx0cmVzdWx0LnB1c2gob3ZlcmZsb3dGb3JtYXQpO1xuXHR9XG5cdGZvciAoY29uc3QgbGluZUdyb3VwIG9mIGxpbmVHcm91cHMpIHtcblx0XHRmb3IgKGNvbnN0IGxpbmUgb2YgbGluZUdyb3VwKSB7XG5cdFx0XHRyZXN1bHQucHVzaChsaW5lKTtcblx0XHR9XG5cdH1cblx0aWYgKHNob3VsZFJlbmRlckJvdHRvbUVsbGlwc2lzKSB7XG5cdFx0cmVzdWx0LnB1c2gob3ZlcmZsb3dGb3JtYXQpO1xuXHR9XG5cblx0cmV0dXJuIHJlc3VsdDtcbn07XG4iLCAiaW1wb3J0IHsgQXV0b2NvbXBsZXRlUHJvbXB0LCBzZXR0aW5ncyB9IGZyb20gJ0BjbGFjay9jb3JlJztcbmltcG9ydCBjb2xvciBmcm9tICdwaWNvY29sb3JzJztcbmltcG9ydCB7XG5cdHR5cGUgQ29tbW9uT3B0aW9ucyxcblx0U19CQVIsXG5cdFNfQkFSX0VORCxcblx0U19DSEVDS0JPWF9JTkFDVElWRSxcblx0U19DSEVDS0JPWF9TRUxFQ1RFRCxcblx0U19SQURJT19BQ1RJVkUsXG5cdFNfUkFESU9fSU5BQ1RJVkUsXG5cdHN5bWJvbCxcbn0gZnJvbSAnLi9jb21tb24uanMnO1xuaW1wb3J0IHsgbGltaXRPcHRpb25zIH0gZnJvbSAnLi9saW1pdC1vcHRpb25zLmpzJztcbmltcG9ydCB0eXBlIHsgT3B0aW9uIH0gZnJvbSAnLi9zZWxlY3QuanMnO1xuXG5mdW5jdGlvbiBnZXRMYWJlbDxUPihvcHRpb246IE9wdGlvbjxUPikge1xuXHRyZXR1cm4gb3B0aW9uLmxhYmVsID8/IFN0cmluZyhvcHRpb24udmFsdWUgPz8gJycpO1xufVxuXG5mdW5jdGlvbiBnZXRGaWx0ZXJlZE9wdGlvbjxUPihzZWFyY2hUZXh0OiBzdHJpbmcsIG9wdGlvbjogT3B0aW9uPFQ+KTogYm9vbGVhbiB7XG5cdGlmICghc2VhcmNoVGV4dCkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGNvbnN0IGxhYmVsID0gKG9wdGlvbi5sYWJlbCA/PyBTdHJpbmcob3B0aW9uLnZhbHVlID8/ICcnKSkudG9Mb3dlckNhc2UoKTtcblx0Y29uc3QgaGludCA9IChvcHRpb24uaGludCA/PyAnJykudG9Mb3dlckNhc2UoKTtcblx0Y29uc3QgdmFsdWUgPSBTdHJpbmcob3B0aW9uLnZhbHVlKS50b0xvd2VyQ2FzZSgpO1xuXHRjb25zdCB0ZXJtID0gc2VhcmNoVGV4dC50b0xvd2VyQ2FzZSgpO1xuXG5cdHJldHVybiBsYWJlbC5pbmNsdWRlcyh0ZXJtKSB8fCBoaW50LmluY2x1ZGVzKHRlcm0pIHx8IHZhbHVlLmluY2x1ZGVzKHRlcm0pO1xufVxuXG5mdW5jdGlvbiBnZXRTZWxlY3RlZE9wdGlvbnM8VD4odmFsdWVzOiBUW10sIG9wdGlvbnM6IE9wdGlvbjxUPltdKTogT3B0aW9uPFQ+W10ge1xuXHRjb25zdCByZXN1bHRzOiBPcHRpb248VD5bXSA9IFtdO1xuXG5cdGZvciAoY29uc3Qgb3B0aW9uIG9mIG9wdGlvbnMpIHtcblx0XHRpZiAodmFsdWVzLmluY2x1ZGVzKG9wdGlvbi52YWx1ZSkpIHtcblx0XHRcdHJlc3VsdHMucHVzaChvcHRpb24pO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiByZXN1bHRzO1xufVxuXG5pbnRlcmZhY2UgQXV0b2NvbXBsZXRlU2hhcmVkT3B0aW9uczxWYWx1ZT4gZXh0ZW5kcyBDb21tb25PcHRpb25zIHtcblx0LyoqXG5cdCAqIFRoZSBtZXNzYWdlIHRvIGRpc3BsYXkgdG8gdGhlIHVzZXIuXG5cdCAqL1xuXHRtZXNzYWdlOiBzdHJpbmc7XG5cdC8qKlxuXHQgKiBBdmFpbGFibGUgb3B0aW9ucyBmb3IgdGhlIGF1dG9jb21wbGV0ZSBwcm9tcHQuXG5cdCAqL1xuXHRvcHRpb25zOiBPcHRpb248VmFsdWU+W10gfCAoKHRoaXM6IEF1dG9jb21wbGV0ZVByb21wdDxPcHRpb248VmFsdWU+PikgPT4gT3B0aW9uPFZhbHVlPltdKTtcblx0LyoqXG5cdCAqIE1heGltdW0gbnVtYmVyIG9mIGl0ZW1zIHRvIGRpc3BsYXkgYXQgb25jZS5cblx0ICovXG5cdG1heEl0ZW1zPzogbnVtYmVyO1xuXHQvKipcblx0ICogUGxhY2Vob2xkZXIgdGV4dCB0byBkaXNwbGF5IHdoZW4gbm8gaW5wdXQgaXMgcHJvdmlkZWQuXG5cdCAqL1xuXHRwbGFjZWhvbGRlcj86IHN0cmluZztcblx0LyoqXG5cdCAqIFZhbGlkYXRlcyB0aGUgdmFsdWVcblx0ICovXG5cdHZhbGlkYXRlPzogKHZhbHVlOiBWYWx1ZSB8IFZhbHVlW10gfCB1bmRlZmluZWQpID0+IHN0cmluZyB8IEVycm9yIHwgdW5kZWZpbmVkO1xuXHQvKipcblx0ICogQ3VzdG9tIGZpbHRlciBmdW5jdGlvbiB0byBtYXRjaCBvcHRpb25zIGFnYWluc3Qgc2VhcmNoIGlucHV0LlxuXHQgKiBJZiBub3QgcHJvdmlkZWQsIGEgZGVmYXVsdCBmaWx0ZXIgdGhhdCBtYXRjaGVzIGxhYmVsLCBoaW50LCBhbmQgdmFsdWUgaXMgdXNlZC5cblx0ICovXG5cdGZpbHRlcj86IChzZWFyY2g6IHN0cmluZywgb3B0aW9uOiBPcHRpb248VmFsdWU+KSA9PiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEF1dG9jb21wbGV0ZU9wdGlvbnM8VmFsdWU+IGV4dGVuZHMgQXV0b2NvbXBsZXRlU2hhcmVkT3B0aW9uczxWYWx1ZT4ge1xuXHQvKipcblx0ICogVGhlIGluaXRpYWwgc2VsZWN0ZWQgdmFsdWUuXG5cdCAqL1xuXHRpbml0aWFsVmFsdWU/OiBWYWx1ZTtcblx0LyoqXG5cdCAqIFRoZSBpbml0aWFsIHVzZXIgaW5wdXRcblx0ICovXG5cdGluaXRpYWxVc2VySW5wdXQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjb25zdCBhdXRvY29tcGxldGUgPSA8VmFsdWU+KG9wdHM6IEF1dG9jb21wbGV0ZU9wdGlvbnM8VmFsdWU+KSA9PiB7XG5cdGNvbnN0IHByb21wdCA9IG5ldyBBdXRvY29tcGxldGVQcm9tcHQoe1xuXHRcdG9wdGlvbnM6IG9wdHMub3B0aW9ucyxcblx0XHRpbml0aWFsVmFsdWU6IG9wdHMuaW5pdGlhbFZhbHVlID8gW29wdHMuaW5pdGlhbFZhbHVlXSA6IHVuZGVmaW5lZCxcblx0XHRpbml0aWFsVXNlcklucHV0OiBvcHRzLmluaXRpYWxVc2VySW5wdXQsXG5cdFx0ZmlsdGVyOlxuXHRcdFx0b3B0cy5maWx0ZXIgPz9cblx0XHRcdCgoc2VhcmNoOiBzdHJpbmcsIG9wdDogT3B0aW9uPFZhbHVlPikgPT4ge1xuXHRcdFx0XHRyZXR1cm4gZ2V0RmlsdGVyZWRPcHRpb24oc2VhcmNoLCBvcHQpO1xuXHRcdFx0fSksXG5cdFx0c2lnbmFsOiBvcHRzLnNpZ25hbCxcblx0XHRpbnB1dDogb3B0cy5pbnB1dCxcblx0XHRvdXRwdXQ6IG9wdHMub3V0cHV0LFxuXHRcdHZhbGlkYXRlOiBvcHRzLnZhbGlkYXRlLFxuXHRcdHJlbmRlcigpIHtcblx0XHRcdGNvbnN0IGhhc0d1aWRlID0gb3B0cy53aXRoR3VpZGUgPz8gc2V0dGluZ3Mud2l0aEd1aWRlO1xuXHRcdFx0Ly8gVGl0bGUgYW5kIG1lc3NhZ2UgZGlzcGxheVxuXHRcdFx0Y29uc3QgaGVhZGluZ3MgPSBoYXNHdWlkZVxuXHRcdFx0XHQ/IFtgJHtjb2xvci5ncmF5KFNfQkFSKX1gLCBgJHtzeW1ib2wodGhpcy5zdGF0ZSl9ICAke29wdHMubWVzc2FnZX1gXVxuXHRcdFx0XHQ6IFtgJHtzeW1ib2wodGhpcy5zdGF0ZSl9ICAke29wdHMubWVzc2FnZX1gXTtcblx0XHRcdGNvbnN0IHVzZXJJbnB1dCA9IHRoaXMudXNlcklucHV0O1xuXHRcdFx0Y29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcblx0XHRcdGNvbnN0IHBsYWNlaG9sZGVyID0gb3B0cy5wbGFjZWhvbGRlcjtcblx0XHRcdGNvbnN0IHNob3dQbGFjZWhvbGRlciA9IHVzZXJJbnB1dCA9PT0gJycgJiYgcGxhY2Vob2xkZXIgIT09IHVuZGVmaW5lZDtcblx0XHRcdGNvbnN0IG9wdCA9IChvcHRpb246IE9wdGlvbjxWYWx1ZT4sIHN0YXRlOiAnaW5hY3RpdmUnIHwgJ2FjdGl2ZScgfCAnZGlzYWJsZWQnKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGxhYmVsID0gZ2V0TGFiZWwob3B0aW9uKTtcblx0XHRcdFx0Y29uc3QgaGludCA9XG5cdFx0XHRcdFx0b3B0aW9uLmhpbnQgJiYgb3B0aW9uLnZhbHVlID09PSB0aGlzLmZvY3VzZWRWYWx1ZSA/IGNvbG9yLmRpbShgICgke29wdGlvbi5oaW50fSlgKSA6ICcnO1xuXHRcdFx0XHRzd2l0Y2ggKHN0YXRlKSB7XG5cdFx0XHRcdFx0Y2FzZSAnYWN0aXZlJzpcblx0XHRcdFx0XHRcdHJldHVybiBgJHtjb2xvci5ncmVlbihTX1JBRElPX0FDVElWRSl9ICR7bGFiZWx9JHtoaW50fWA7XG5cdFx0XHRcdFx0Y2FzZSAnaW5hY3RpdmUnOlxuXHRcdFx0XHRcdFx0cmV0dXJuIGAke2NvbG9yLmRpbShTX1JBRElPX0lOQUNUSVZFKX0gJHtjb2xvci5kaW0obGFiZWwpfWA7XG5cdFx0XHRcdFx0Y2FzZSAnZGlzYWJsZWQnOlxuXHRcdFx0XHRcdFx0cmV0dXJuIGAke2NvbG9yLmdyYXkoU19SQURJT19JTkFDVElWRSl9ICR7Y29sb3Iuc3RyaWtldGhyb3VnaChjb2xvci5ncmF5KGxhYmVsKSl9YDtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblxuXHRcdFx0Ly8gSGFuZGxlIGRpZmZlcmVudCBzdGF0ZXNcblx0XHRcdHN3aXRjaCAodGhpcy5zdGF0ZSkge1xuXHRcdFx0XHRjYXNlICdzdWJtaXQnOiB7XG5cdFx0XHRcdFx0Ly8gU2hvdyBzZWxlY3RlZCB2YWx1ZVxuXHRcdFx0XHRcdGNvbnN0IHNlbGVjdGVkID0gZ2V0U2VsZWN0ZWRPcHRpb25zKHRoaXMuc2VsZWN0ZWRWYWx1ZXMsIG9wdGlvbnMpO1xuXHRcdFx0XHRcdGNvbnN0IGxhYmVsID1cblx0XHRcdFx0XHRcdHNlbGVjdGVkLmxlbmd0aCA+IDAgPyBgICAke2NvbG9yLmRpbShzZWxlY3RlZC5tYXAoZ2V0TGFiZWwpLmpvaW4oJywgJykpfWAgOiAnJztcblx0XHRcdFx0XHRjb25zdCBzdWJtaXRQcmVmaXggPSBoYXNHdWlkZSA/IGNvbG9yLmdyYXkoU19CQVIpIDogJyc7XG5cdFx0XHRcdFx0cmV0dXJuIGAke2hlYWRpbmdzLmpvaW4oJ1xcbicpfVxcbiR7c3VibWl0UHJlZml4fSR7bGFiZWx9YDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNhc2UgJ2NhbmNlbCc6IHtcblx0XHRcdFx0XHRjb25zdCB1c2VySW5wdXRUZXh0ID0gdXNlcklucHV0ID8gYCAgJHtjb2xvci5zdHJpa2V0aHJvdWdoKGNvbG9yLmRpbSh1c2VySW5wdXQpKX1gIDogJyc7XG5cdFx0XHRcdFx0Y29uc3QgY2FuY2VsUHJlZml4ID0gaGFzR3VpZGUgPyBjb2xvci5ncmF5KFNfQkFSKSA6ICcnO1xuXHRcdFx0XHRcdHJldHVybiBgJHtoZWFkaW5ncy5qb2luKCdcXG4nKX1cXG4ke2NhbmNlbFByZWZpeH0ke3VzZXJJbnB1dFRleHR9YDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGRlZmF1bHQ6IHtcblx0XHRcdFx0XHRjb25zdCBiYXJDb2xvciA9IHRoaXMuc3RhdGUgPT09ICdlcnJvcicgPyBjb2xvci55ZWxsb3cgOiBjb2xvci5jeWFuO1xuXHRcdFx0XHRcdGNvbnN0IGd1aWRlUHJlZml4ID0gaGFzR3VpZGUgPyBgJHtiYXJDb2xvcihTX0JBUil9ICBgIDogJyc7XG5cdFx0XHRcdFx0Y29uc3QgZ3VpZGVQcmVmaXhFbmQgPSBoYXNHdWlkZSA/IGJhckNvbG9yKFNfQkFSX0VORCkgOiAnJztcblx0XHRcdFx0XHQvLyBEaXNwbGF5IGN1cnNvciBwb3NpdGlvbiAtIHNob3cgcGxhaW4gdGV4dCBpbiBuYXZpZ2F0aW9uIG1vZGVcblx0XHRcdFx0XHRsZXQgc2VhcmNoVGV4dCA9ICcnO1xuXHRcdFx0XHRcdGlmICh0aGlzLmlzTmF2aWdhdGluZyB8fCBzaG93UGxhY2Vob2xkZXIpIHtcblx0XHRcdFx0XHRcdGNvbnN0IHNlYXJjaFRleHRWYWx1ZSA9IHNob3dQbGFjZWhvbGRlciA/IHBsYWNlaG9sZGVyIDogdXNlcklucHV0O1xuXHRcdFx0XHRcdFx0c2VhcmNoVGV4dCA9IHNlYXJjaFRleHRWYWx1ZSAhPT0gJycgPyBgICR7Y29sb3IuZGltKHNlYXJjaFRleHRWYWx1ZSl9YCA6ICcnO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRzZWFyY2hUZXh0ID0gYCAke3RoaXMudXNlcklucHV0V2l0aEN1cnNvcn1gO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIFNob3cgbWF0Y2ggY291bnQgaWYgZmlsdGVyZWRcblx0XHRcdFx0XHRjb25zdCBtYXRjaGVzID1cblx0XHRcdFx0XHRcdHRoaXMuZmlsdGVyZWRPcHRpb25zLmxlbmd0aCAhPT0gb3B0aW9ucy5sZW5ndGhcblx0XHRcdFx0XHRcdFx0PyBjb2xvci5kaW0oXG5cdFx0XHRcdFx0XHRcdFx0XHRgICgke3RoaXMuZmlsdGVyZWRPcHRpb25zLmxlbmd0aH0gbWF0Y2gke3RoaXMuZmlsdGVyZWRPcHRpb25zLmxlbmd0aCA9PT0gMSA/ICcnIDogJ2VzJ30pYFxuXHRcdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdFx0OiAnJztcblxuXHRcdFx0XHRcdC8vIE5vIG1hdGNoZXMgbWVzc2FnZVxuXHRcdFx0XHRcdGNvbnN0IG5vUmVzdWx0cyA9XG5cdFx0XHRcdFx0XHR0aGlzLmZpbHRlcmVkT3B0aW9ucy5sZW5ndGggPT09IDAgJiYgdXNlcklucHV0XG5cdFx0XHRcdFx0XHRcdD8gW2Ake2d1aWRlUHJlZml4fSR7Y29sb3IueWVsbG93KCdObyBtYXRjaGVzIGZvdW5kJyl9YF1cblx0XHRcdFx0XHRcdFx0OiBbXTtcblxuXHRcdFx0XHRcdGNvbnN0IHZhbGlkYXRpb25FcnJvciA9XG5cdFx0XHRcdFx0XHR0aGlzLnN0YXRlID09PSAnZXJyb3InID8gW2Ake2d1aWRlUHJlZml4fSR7Y29sb3IueWVsbG93KHRoaXMuZXJyb3IpfWBdIDogW107XG5cblx0XHRcdFx0XHRpZiAoaGFzR3VpZGUpIHtcblx0XHRcdFx0XHRcdGhlYWRpbmdzLnB1c2goYCR7Z3VpZGVQcmVmaXgudHJpbUVuZCgpfWApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRoZWFkaW5ncy5wdXNoKFxuXHRcdFx0XHRcdFx0YCR7Z3VpZGVQcmVmaXh9JHtjb2xvci5kaW0oJ1NlYXJjaDonKX0ke3NlYXJjaFRleHR9JHttYXRjaGVzfWAsXG5cdFx0XHRcdFx0XHQuLi5ub1Jlc3VsdHMsXG5cdFx0XHRcdFx0XHQuLi52YWxpZGF0aW9uRXJyb3Jcblx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0Ly8gU2hvdyBpbnN0cnVjdGlvbnNcblx0XHRcdFx0XHRjb25zdCBpbnN0cnVjdGlvbnMgPSBbXG5cdFx0XHRcdFx0XHRgJHtjb2xvci5kaW0oJ+KGkS/ihpMnKX0gdG8gc2VsZWN0YCxcblx0XHRcdFx0XHRcdGAke2NvbG9yLmRpbSgnRW50ZXI6Jyl9IGNvbmZpcm1gLFxuXHRcdFx0XHRcdFx0YCR7Y29sb3IuZGltKCdUeXBlOicpfSB0byBzZWFyY2hgLFxuXHRcdFx0XHRcdF07XG5cblx0XHRcdFx0XHRjb25zdCBmb290ZXJzID0gW2Ake2d1aWRlUHJlZml4fSR7aW5zdHJ1Y3Rpb25zLmpvaW4oJyDigKIgJyl9YCwgZ3VpZGVQcmVmaXhFbmRdO1xuXG5cdFx0XHRcdFx0Ly8gUmVuZGVyIG9wdGlvbnMgd2l0aCBzZWxlY3Rpb25cblx0XHRcdFx0XHRjb25zdCBkaXNwbGF5T3B0aW9ucyA9XG5cdFx0XHRcdFx0XHR0aGlzLmZpbHRlcmVkT3B0aW9ucy5sZW5ndGggPT09IDBcblx0XHRcdFx0XHRcdFx0PyBbXVxuXHRcdFx0XHRcdFx0XHQ6IGxpbWl0T3B0aW9ucyh7XG5cdFx0XHRcdFx0XHRcdFx0XHRjdXJzb3I6IHRoaXMuY3Vyc29yLFxuXHRcdFx0XHRcdFx0XHRcdFx0b3B0aW9uczogdGhpcy5maWx0ZXJlZE9wdGlvbnMsXG5cdFx0XHRcdFx0XHRcdFx0XHRjb2x1bW5QYWRkaW5nOiBoYXNHdWlkZSA/IDMgOiAwLCAvLyBmb3IgYHwgIGAgd2hlbiBndWlkZSBpcyBzaG93blxuXHRcdFx0XHRcdFx0XHRcdFx0cm93UGFkZGluZzogaGVhZGluZ3MubGVuZ3RoICsgZm9vdGVycy5sZW5ndGgsXG5cdFx0XHRcdFx0XHRcdFx0XHRzdHlsZTogKG9wdGlvbiwgYWN0aXZlKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBvcHQoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0b3B0aW9uLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9wdGlvbi5kaXNhYmxlZCA/ICdkaXNhYmxlZCcgOiBhY3RpdmUgPyAnYWN0aXZlJyA6ICdpbmFjdGl2ZSdcblx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdFx0XHRtYXhJdGVtczogb3B0cy5tYXhJdGVtcyxcblx0XHRcdFx0XHRcdFx0XHRcdG91dHB1dDogb3B0cy5vdXRwdXQsXG5cdFx0XHRcdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHQvLyBSZXR1cm4gdGhlIGZvcm1hdHRlZCBwcm9tcHRcblx0XHRcdFx0XHRyZXR1cm4gW1xuXHRcdFx0XHRcdFx0Li4uaGVhZGluZ3MsXG5cdFx0XHRcdFx0XHQuLi5kaXNwbGF5T3B0aW9ucy5tYXAoKG9wdGlvbikgPT4gYCR7Z3VpZGVQcmVmaXh9JHtvcHRpb259YCksXG5cdFx0XHRcdFx0XHQuLi5mb290ZXJzLFxuXHRcdFx0XHRcdF0uam9pbignXFxuJyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHR9KTtcblxuXHQvLyBSZXR1cm4gdGhlIHJlc3VsdCBvciBjYW5jZWwgc3ltYm9sXG5cdHJldHVybiBwcm9tcHQucHJvbXB0KCkgYXMgUHJvbWlzZTxWYWx1ZSB8IHN5bWJvbD47XG59O1xuXG4vLyBUeXBlIGRlZmluaXRpb24gZm9yIHRoZSBhdXRvY29tcGxldGVNdWx0aXNlbGVjdCBjb21wb25lbnRcbmV4cG9ydCBpbnRlcmZhY2UgQXV0b2NvbXBsZXRlTXVsdGlTZWxlY3RPcHRpb25zPFZhbHVlPiBleHRlbmRzIEF1dG9jb21wbGV0ZVNoYXJlZE9wdGlvbnM8VmFsdWU+IHtcblx0LyoqXG5cdCAqIFRoZSBpbml0aWFsIHNlbGVjdGVkIHZhbHVlc1xuXHQgKi9cblx0aW5pdGlhbFZhbHVlcz86IFZhbHVlW107XG5cdC8qKlxuXHQgKiBJZiB0cnVlLCBhdCBsZWFzdCBvbmUgb3B0aW9uIG11c3QgYmUgc2VsZWN0ZWRcblx0ICovXG5cdHJlcXVpcmVkPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBJbnRlZ3JhdGVkIGF1dG9jb21wbGV0ZSBtdWx0aXNlbGVjdCAtIGNvbWJpbmVzIHR5cGUtYWhlYWQgZmlsdGVyaW5nIHdpdGggbXVsdGlzZWxlY3QgaW4gb25lIFVJXG4gKi9cbmV4cG9ydCBjb25zdCBhdXRvY29tcGxldGVNdWx0aXNlbGVjdCA9IDxWYWx1ZT4ob3B0czogQXV0b2NvbXBsZXRlTXVsdGlTZWxlY3RPcHRpb25zPFZhbHVlPikgPT4ge1xuXHRjb25zdCBmb3JtYXRPcHRpb24gPSAoXG5cdFx0b3B0aW9uOiBPcHRpb248VmFsdWU+LFxuXHRcdGFjdGl2ZTogYm9vbGVhbixcblx0XHRzZWxlY3RlZFZhbHVlczogVmFsdWVbXSxcblx0XHRmb2N1c2VkVmFsdWU6IFZhbHVlIHwgdW5kZWZpbmVkXG5cdCkgPT4ge1xuXHRcdGNvbnN0IGlzU2VsZWN0ZWQgPSBzZWxlY3RlZFZhbHVlcy5pbmNsdWRlcyhvcHRpb24udmFsdWUpO1xuXHRcdGNvbnN0IGxhYmVsID0gb3B0aW9uLmxhYmVsID8/IFN0cmluZyhvcHRpb24udmFsdWUgPz8gJycpO1xuXHRcdGNvbnN0IGhpbnQgPVxuXHRcdFx0b3B0aW9uLmhpbnQgJiYgZm9jdXNlZFZhbHVlICE9PSB1bmRlZmluZWQgJiYgb3B0aW9uLnZhbHVlID09PSBmb2N1c2VkVmFsdWVcblx0XHRcdFx0PyBjb2xvci5kaW0oYCAoJHtvcHRpb24uaGludH0pYClcblx0XHRcdFx0OiAnJztcblx0XHRjb25zdCBjaGVja2JveCA9IGlzU2VsZWN0ZWQgPyBjb2xvci5ncmVlbihTX0NIRUNLQk9YX1NFTEVDVEVEKSA6IGNvbG9yLmRpbShTX0NIRUNLQk9YX0lOQUNUSVZFKTtcblxuXHRcdGlmIChvcHRpb24uZGlzYWJsZWQpIHtcblx0XHRcdHJldHVybiBgJHtjb2xvci5ncmF5KFNfQ0hFQ0tCT1hfSU5BQ1RJVkUpfSAke2NvbG9yLnN0cmlrZXRocm91Z2goY29sb3IuZ3JheShsYWJlbCkpfWA7XG5cdFx0fVxuXHRcdGlmIChhY3RpdmUpIHtcblx0XHRcdHJldHVybiBgJHtjaGVja2JveH0gJHtsYWJlbH0ke2hpbnR9YDtcblx0XHR9XG5cdFx0cmV0dXJuIGAke2NoZWNrYm94fSAke2NvbG9yLmRpbShsYWJlbCl9YDtcblx0fTtcblxuXHQvLyBDcmVhdGUgdGV4dCBwcm9tcHQgd2hpY2ggd2UnbGwgdXNlIGFzIGZvdW5kYXRpb25cblx0Y29uc3QgcHJvbXB0ID0gbmV3IEF1dG9jb21wbGV0ZVByb21wdDxPcHRpb248VmFsdWU+Pih7XG5cdFx0b3B0aW9uczogb3B0cy5vcHRpb25zLFxuXHRcdG11bHRpcGxlOiB0cnVlLFxuXHRcdGZpbHRlcjpcblx0XHRcdG9wdHMuZmlsdGVyID8/XG5cdFx0XHQoKHNlYXJjaCwgb3B0KSA9PiB7XG5cdFx0XHRcdHJldHVybiBnZXRGaWx0ZXJlZE9wdGlvbihzZWFyY2gsIG9wdCk7XG5cdFx0XHR9KSxcblx0XHR2YWxpZGF0ZTogKCkgPT4ge1xuXHRcdFx0aWYgKG9wdHMucmVxdWlyZWQgJiYgcHJvbXB0LnNlbGVjdGVkVmFsdWVzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHRyZXR1cm4gJ1BsZWFzZSBzZWxlY3QgYXQgbGVhc3Qgb25lIGl0ZW0nO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9LFxuXHRcdGluaXRpYWxWYWx1ZTogb3B0cy5pbml0aWFsVmFsdWVzLFxuXHRcdHNpZ25hbDogb3B0cy5zaWduYWwsXG5cdFx0aW5wdXQ6IG9wdHMuaW5wdXQsXG5cdFx0b3V0cHV0OiBvcHRzLm91dHB1dCxcblx0XHRyZW5kZXIoKSB7XG5cdFx0XHQvLyBUaXRsZSBhbmQgc3ltYm9sXG5cdFx0XHRjb25zdCB0aXRsZSA9IGAke2NvbG9yLmdyYXkoU19CQVIpfVxcbiR7c3ltYm9sKHRoaXMuc3RhdGUpfSAgJHtvcHRzLm1lc3NhZ2V9XFxuYDtcblxuXHRcdFx0Ly8gU2VsZWN0aW9uIGNvdW50ZXJcblx0XHRcdGNvbnN0IHVzZXJJbnB1dCA9IHRoaXMudXNlcklucHV0O1xuXHRcdFx0Y29uc3QgcGxhY2Vob2xkZXIgPSBvcHRzLnBsYWNlaG9sZGVyO1xuXHRcdFx0Y29uc3Qgc2hvd1BsYWNlaG9sZGVyID0gdXNlcklucHV0ID09PSAnJyAmJiBwbGFjZWhvbGRlciAhPT0gdW5kZWZpbmVkO1xuXG5cdFx0XHQvLyBTZWFyY2ggaW5wdXQgZGlzcGxheVxuXHRcdFx0Y29uc3Qgc2VhcmNoVGV4dCA9XG5cdFx0XHRcdHRoaXMuaXNOYXZpZ2F0aW5nIHx8IHNob3dQbGFjZWhvbGRlclxuXHRcdFx0XHRcdD8gY29sb3IuZGltKHNob3dQbGFjZWhvbGRlciA/IHBsYWNlaG9sZGVyIDogdXNlcklucHV0KSAvLyBKdXN0IHNob3cgcGxhaW4gdGV4dCB3aGVuIGluIG5hdmlnYXRpb24gbW9kZVxuXHRcdFx0XHRcdDogdGhpcy51c2VySW5wdXRXaXRoQ3Vyc29yO1xuXG5cdFx0XHRjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuXG5cdFx0XHRjb25zdCBtYXRjaGVzID1cblx0XHRcdFx0dGhpcy5maWx0ZXJlZE9wdGlvbnMubGVuZ3RoICE9PSBvcHRpb25zLmxlbmd0aFxuXHRcdFx0XHRcdD8gY29sb3IuZGltKFxuXHRcdFx0XHRcdFx0XHRgICgke3RoaXMuZmlsdGVyZWRPcHRpb25zLmxlbmd0aH0gbWF0Y2gke3RoaXMuZmlsdGVyZWRPcHRpb25zLmxlbmd0aCA9PT0gMSA/ICcnIDogJ2VzJ30pYFxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdDogJyc7XG5cblx0XHRcdC8vIFJlbmRlciBwcm9tcHQgc3RhdGVcblx0XHRcdHN3aXRjaCAodGhpcy5zdGF0ZSkge1xuXHRcdFx0XHRjYXNlICdzdWJtaXQnOiB7XG5cdFx0XHRcdFx0cmV0dXJuIGAke3RpdGxlfSR7Y29sb3IuZ3JheShTX0JBUil9ICAke2NvbG9yLmRpbShgJHt0aGlzLnNlbGVjdGVkVmFsdWVzLmxlbmd0aH0gaXRlbXMgc2VsZWN0ZWRgKX1gO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNhc2UgJ2NhbmNlbCc6IHtcblx0XHRcdFx0XHRyZXR1cm4gYCR7dGl0bGV9JHtjb2xvci5ncmF5KFNfQkFSKX0gICR7Y29sb3Iuc3RyaWtldGhyb3VnaChjb2xvci5kaW0odXNlcklucHV0KSl9YDtcblx0XHRcdFx0fVxuXHRcdFx0XHRkZWZhdWx0OiB7XG5cdFx0XHRcdFx0Y29uc3QgYmFyQ29sb3IgPSB0aGlzLnN0YXRlID09PSAnZXJyb3InID8gY29sb3IueWVsbG93IDogY29sb3IuY3lhbjtcblx0XHRcdFx0XHQvLyBJbnN0cnVjdGlvbnNcblx0XHRcdFx0XHRjb25zdCBpbnN0cnVjdGlvbnMgPSBbXG5cdFx0XHRcdFx0XHRgJHtjb2xvci5kaW0oJ+KGkS/ihpMnKX0gdG8gbmF2aWdhdGVgLFxuXHRcdFx0XHRcdFx0YCR7Y29sb3IuZGltKHRoaXMuaXNOYXZpZ2F0aW5nID8gJ1NwYWNlL1RhYjonIDogJ1RhYjonKX0gc2VsZWN0YCxcblx0XHRcdFx0XHRcdGAke2NvbG9yLmRpbSgnRW50ZXI6Jyl9IGNvbmZpcm1gLFxuXHRcdFx0XHRcdFx0YCR7Y29sb3IuZGltKCdUeXBlOicpfSB0byBzZWFyY2hgLFxuXHRcdFx0XHRcdF07XG5cblx0XHRcdFx0XHQvLyBObyByZXN1bHRzIG1lc3NhZ2Vcblx0XHRcdFx0XHRjb25zdCBub1Jlc3VsdHMgPVxuXHRcdFx0XHRcdFx0dGhpcy5maWx0ZXJlZE9wdGlvbnMubGVuZ3RoID09PSAwICYmIHVzZXJJbnB1dFxuXHRcdFx0XHRcdFx0XHQ/IFtgJHtiYXJDb2xvcihTX0JBUil9ICAke2NvbG9yLnllbGxvdygnTm8gbWF0Y2hlcyBmb3VuZCcpfWBdXG5cdFx0XHRcdFx0XHRcdDogW107XG5cblx0XHRcdFx0XHRjb25zdCBlcnJvck1lc3NhZ2UgPVxuXHRcdFx0XHRcdFx0dGhpcy5zdGF0ZSA9PT0gJ2Vycm9yJyA/IFtgJHtiYXJDb2xvcihTX0JBUil9ICAke2NvbG9yLnllbGxvdyh0aGlzLmVycm9yKX1gXSA6IFtdO1xuXG5cdFx0XHRcdFx0Ly8gQ2FsY3VsYXRlIGhlYWRlciBhbmQgZm9vdGVyIGxpbmUgY291bnRzIGZvciByb3dQYWRkaW5nXG5cdFx0XHRcdFx0Y29uc3QgaGVhZGVyTGluZXMgPSBbXG5cdFx0XHRcdFx0XHQuLi5gJHt0aXRsZX0ke2JhckNvbG9yKFNfQkFSKX1gLnNwbGl0KCdcXG4nKSxcblx0XHRcdFx0XHRcdGAke2JhckNvbG9yKFNfQkFSKX0gICR7Y29sb3IuZGltKCdTZWFyY2g6Jyl9ICR7c2VhcmNoVGV4dH0ke21hdGNoZXN9YCxcblx0XHRcdFx0XHRcdC4uLm5vUmVzdWx0cyxcblx0XHRcdFx0XHRcdC4uLmVycm9yTWVzc2FnZSxcblx0XHRcdFx0XHRdO1xuXHRcdFx0XHRcdGNvbnN0IGZvb3RlckxpbmVzID0gW1xuXHRcdFx0XHRcdFx0YCR7YmFyQ29sb3IoU19CQVIpfSAgJHtpbnN0cnVjdGlvbnMuam9pbignIOKAoiAnKX1gLFxuXHRcdFx0XHRcdFx0YCR7YmFyQ29sb3IoU19CQVJfRU5EKX1gLFxuXHRcdFx0XHRcdF07XG5cblx0XHRcdFx0XHQvLyBHZXQgbGltaXRlZCBvcHRpb25zIGZvciBkaXNwbGF5XG5cdFx0XHRcdFx0Y29uc3QgZGlzcGxheU9wdGlvbnMgPSBsaW1pdE9wdGlvbnMoe1xuXHRcdFx0XHRcdFx0Y3Vyc29yOiB0aGlzLmN1cnNvcixcblx0XHRcdFx0XHRcdG9wdGlvbnM6IHRoaXMuZmlsdGVyZWRPcHRpb25zLFxuXHRcdFx0XHRcdFx0c3R5bGU6IChvcHRpb24sIGFjdGl2ZSkgPT5cblx0XHRcdFx0XHRcdFx0Zm9ybWF0T3B0aW9uKG9wdGlvbiwgYWN0aXZlLCB0aGlzLnNlbGVjdGVkVmFsdWVzLCB0aGlzLmZvY3VzZWRWYWx1ZSksXG5cdFx0XHRcdFx0XHRtYXhJdGVtczogb3B0cy5tYXhJdGVtcyxcblx0XHRcdFx0XHRcdG91dHB1dDogb3B0cy5vdXRwdXQsXG5cdFx0XHRcdFx0XHRyb3dQYWRkaW5nOiBoZWFkZXJMaW5lcy5sZW5ndGggKyBmb290ZXJMaW5lcy5sZW5ndGgsXG5cdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHQvLyBCdWlsZCB0aGUgcHJvbXB0IGRpc3BsYXlcblx0XHRcdFx0XHRyZXR1cm4gW1xuXHRcdFx0XHRcdFx0Li4uaGVhZGVyTGluZXMsXG5cdFx0XHRcdFx0XHQuLi5kaXNwbGF5T3B0aW9ucy5tYXAoKG9wdGlvbikgPT4gYCR7YmFyQ29sb3IoU19CQVIpfSAgJHtvcHRpb259YCksXG5cdFx0XHRcdFx0XHQuLi5mb290ZXJMaW5lcyxcblx0XHRcdFx0XHRdLmpvaW4oJ1xcbicpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblx0fSk7XG5cblx0Ly8gUmV0dXJuIHRoZSByZXN1bHQgb3IgY2FuY2VsIHN5bWJvbFxuXHRyZXR1cm4gcHJvbXB0LnByb21wdCgpIGFzIFByb21pc2U8VmFsdWVbXSB8IHN5bWJvbD47XG59O1xuIiwgImltcG9ydCB0eXBlIHsgV3JpdGFibGUgfSBmcm9tICdub2RlOnN0cmVhbSc7XG5pbXBvcnQgeyBnZXRDb2x1bW5zLCBzZXR0aW5ncyB9IGZyb20gJ0BjbGFjay9jb3JlJztcbmltcG9ydCBzdHJpbmdXaWR0aCBmcm9tICdmYXN0LXN0cmluZy13aWR0aCc7XG5pbXBvcnQgeyB3cmFwQW5zaSB9IGZyb20gJ2Zhc3Qtd3JhcC1hbnNpJztcbmltcG9ydCB7XG5cdHR5cGUgQ29tbW9uT3B0aW9ucyxcblx0U19CQVIsXG5cdFNfQkFSX0VORCxcblx0U19CQVJfRU5EX1JJR0hULFxuXHRTX0JBUl9ILFxuXHRTX0JBUl9TVEFSVCxcblx0U19CQVJfU1RBUlRfUklHSFQsXG5cdFNfQ09STkVSX0JPVFRPTV9MRUZULFxuXHRTX0NPUk5FUl9CT1RUT01fUklHSFQsXG5cdFNfQ09STkVSX1RPUF9MRUZULFxuXHRTX0NPUk5FUl9UT1BfUklHSFQsXG59IGZyb20gJy4vY29tbW9uLmpzJztcblxuZXhwb3J0IHR5cGUgQm94QWxpZ25tZW50ID0gJ2xlZnQnIHwgJ2NlbnRlcicgfCAncmlnaHQnO1xuXG50eXBlIEJveFN5bWJvbHMgPSBbdG9wTGVmdDogc3RyaW5nLCB0b3BSaWdodDogc3RyaW5nLCBib3R0b21MZWZ0OiBzdHJpbmcsIGJvdHRvbVJpZ2h0OiBzdHJpbmddO1xuXG5jb25zdCByb3VuZGVkU3ltYm9sczogQm94U3ltYm9scyA9IFtcblx0U19DT1JORVJfVE9QX0xFRlQsXG5cdFNfQ09STkVSX1RPUF9SSUdIVCxcblx0U19DT1JORVJfQk9UVE9NX0xFRlQsXG5cdFNfQ09STkVSX0JPVFRPTV9SSUdIVCxcbl07XG5jb25zdCBzcXVhcmVTeW1ib2xzOiBCb3hTeW1ib2xzID0gW1NfQkFSX1NUQVJULCBTX0JBUl9TVEFSVF9SSUdIVCwgU19CQVJfRU5ELCBTX0JBUl9FTkRfUklHSFRdO1xuXG5leHBvcnQgaW50ZXJmYWNlIEJveE9wdGlvbnMgZXh0ZW5kcyBDb21tb25PcHRpb25zIHtcblx0Y29udGVudEFsaWduPzogQm94QWxpZ25tZW50O1xuXHR0aXRsZUFsaWduPzogQm94QWxpZ25tZW50O1xuXHR3aWR0aD86IG51bWJlciB8ICdhdXRvJztcblx0dGl0bGVQYWRkaW5nPzogbnVtYmVyO1xuXHRjb250ZW50UGFkZGluZz86IG51bWJlcjtcblx0cm91bmRlZD86IGJvb2xlYW47XG5cdGZvcm1hdEJvcmRlcj86ICh0ZXh0OiBzdHJpbmcpID0+IHN0cmluZztcbn1cblxuZnVuY3Rpb24gZ2V0UGFkZGluZ0ZvckxpbmUoXG5cdGxpbmVMZW5ndGg6IG51bWJlcixcblx0aW5uZXJXaWR0aDogbnVtYmVyLFxuXHRwYWRkaW5nOiBudW1iZXIsXG5cdGNvbnRlbnRBbGlnbjogQm94QWxpZ25tZW50IHwgdW5kZWZpbmVkXG4pOiBbbnVtYmVyLCBudW1iZXJdIHtcblx0bGV0IGxlZnRQYWRkaW5nID0gcGFkZGluZztcblx0bGV0IHJpZ2h0UGFkZGluZyA9IHBhZGRpbmc7XG5cdGlmIChjb250ZW50QWxpZ24gPT09ICdjZW50ZXInKSB7XG5cdFx0bGVmdFBhZGRpbmcgPSBNYXRoLmZsb29yKChpbm5lcldpZHRoIC0gbGluZUxlbmd0aCkgLyAyKTtcblx0fSBlbHNlIGlmIChjb250ZW50QWxpZ24gPT09ICdyaWdodCcpIHtcblx0XHRsZWZ0UGFkZGluZyA9IGlubmVyV2lkdGggLSBsaW5lTGVuZ3RoIC0gcGFkZGluZztcblx0fVxuXG5cdHJpZ2h0UGFkZGluZyA9IGlubmVyV2lkdGggLSBsZWZ0UGFkZGluZyAtIGxpbmVMZW5ndGg7XG5cblx0cmV0dXJuIFtsZWZ0UGFkZGluZywgcmlnaHRQYWRkaW5nXTtcbn1cblxuY29uc3QgZGVmYXVsdEZvcm1hdEJvcmRlciA9ICh0ZXh0OiBzdHJpbmcpID0+IHRleHQ7XG5cbmV4cG9ydCBjb25zdCBib3ggPSAobWVzc2FnZSA9ICcnLCB0aXRsZSA9ICcnLCBvcHRzPzogQm94T3B0aW9ucykgPT4ge1xuXHRjb25zdCBvdXRwdXQ6IFdyaXRhYmxlID0gb3B0cz8ub3V0cHV0ID8/IHByb2Nlc3Muc3Rkb3V0O1xuXHRjb25zdCBjb2x1bW5zID0gZ2V0Q29sdW1ucyhvdXRwdXQpO1xuXHRjb25zdCBib3JkZXJXaWR0aCA9IDE7XG5cdGNvbnN0IGJvcmRlclRvdGFsV2lkdGggPSBib3JkZXJXaWR0aCAqIDI7XG5cdGNvbnN0IHRpdGxlUGFkZGluZyA9IG9wdHM/LnRpdGxlUGFkZGluZyA/PyAxO1xuXHRjb25zdCBjb250ZW50UGFkZGluZyA9IG9wdHM/LmNvbnRlbnRQYWRkaW5nID8/IDI7XG5cdGNvbnN0IHdpZHRoID0gb3B0cz8ud2lkdGggPT09IHVuZGVmaW5lZCB8fCBvcHRzLndpZHRoID09PSAnYXV0bycgPyAxIDogTWF0aC5taW4oMSwgb3B0cy53aWR0aCk7XG5cdGNvbnN0IGhhc0d1aWRlID0gb3B0cz8ud2l0aEd1aWRlID8/IHNldHRpbmdzLndpdGhHdWlkZTtcblx0Y29uc3QgbGluZVByZWZpeCA9ICFoYXNHdWlkZSA/ICcnIDogYCR7U19CQVJ9IGA7XG5cdGNvbnN0IGZvcm1hdEJvcmRlciA9IG9wdHM/LmZvcm1hdEJvcmRlciA/PyBkZWZhdWx0Rm9ybWF0Qm9yZGVyO1xuXHRjb25zdCBzeW1ib2xzID0gKG9wdHM/LnJvdW5kZWQgPyByb3VuZGVkU3ltYm9scyA6IHNxdWFyZVN5bWJvbHMpLm1hcChmb3JtYXRCb3JkZXIpO1xuXHRjb25zdCBoU3ltYm9sID0gZm9ybWF0Qm9yZGVyKFNfQkFSX0gpO1xuXHRjb25zdCB2U3ltYm9sID0gZm9ybWF0Qm9yZGVyKFNfQkFSKTtcblx0Y29uc3QgbGluZVByZWZpeFdpZHRoID0gc3RyaW5nV2lkdGgobGluZVByZWZpeCk7XG5cdGNvbnN0IHRpdGxlV2lkdGggPSBzdHJpbmdXaWR0aCh0aXRsZSk7XG5cdGNvbnN0IG1heEJveFdpZHRoID0gY29sdW1ucyAtIGxpbmVQcmVmaXhXaWR0aDtcblx0bGV0IGJveFdpZHRoID0gTWF0aC5mbG9vcihjb2x1bW5zICogd2lkdGgpIC0gbGluZVByZWZpeFdpZHRoO1xuXHRpZiAob3B0cz8ud2lkdGggPT09ICdhdXRvJykge1xuXHRcdGNvbnN0IGxpbmVzID0gbWVzc2FnZS5zcGxpdCgnXFxuJyk7XG5cdFx0bGV0IGxvbmdlc3RMaW5lID0gdGl0bGVXaWR0aCArIHRpdGxlUGFkZGluZyAqIDI7XG5cdFx0Zm9yIChjb25zdCBsaW5lIG9mIGxpbmVzKSB7XG5cdFx0XHRjb25zdCBsaW5lV2l0aFBhZGRpbmcgPSBzdHJpbmdXaWR0aChsaW5lKSArIGNvbnRlbnRQYWRkaW5nICogMjtcblx0XHRcdGlmIChsaW5lV2l0aFBhZGRpbmcgPiBsb25nZXN0TGluZSkge1xuXHRcdFx0XHRsb25nZXN0TGluZSA9IGxpbmVXaXRoUGFkZGluZztcblx0XHRcdH1cblx0XHR9XG5cdFx0Y29uc3QgbG9uZ2VzdExpbmVXaWR0aCA9IGxvbmdlc3RMaW5lICsgYm9yZGVyVG90YWxXaWR0aDtcblx0XHRpZiAobG9uZ2VzdExpbmVXaWR0aCA8IGJveFdpZHRoKSB7XG5cdFx0XHRib3hXaWR0aCA9IGxvbmdlc3RMaW5lV2lkdGg7XG5cdFx0fVxuXHR9XG5cdGlmIChib3hXaWR0aCAlIDIgIT09IDApIHtcblx0XHRpZiAoYm94V2lkdGggPCBtYXhCb3hXaWR0aCkge1xuXHRcdFx0Ym94V2lkdGgrKztcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ym94V2lkdGgtLTtcblx0XHR9XG5cdH1cblx0Y29uc3QgaW5uZXJXaWR0aCA9IGJveFdpZHRoIC0gYm9yZGVyVG90YWxXaWR0aDtcblx0Y29uc3QgbWF4VGl0bGVMZW5ndGggPSBpbm5lcldpZHRoIC0gdGl0bGVQYWRkaW5nICogMjtcblx0Y29uc3QgdHJ1bmNhdGVkVGl0bGUgPVxuXHRcdHRpdGxlV2lkdGggPiBtYXhUaXRsZUxlbmd0aCA/IGAke3RpdGxlLnNsaWNlKDAsIG1heFRpdGxlTGVuZ3RoIC0gMyl9Li4uYCA6IHRpdGxlO1xuXHRjb25zdCBbdGl0bGVQYWRkaW5nTGVmdCwgdGl0bGVQYWRkaW5nUmlnaHRdID0gZ2V0UGFkZGluZ0ZvckxpbmUoXG5cdFx0c3RyaW5nV2lkdGgodHJ1bmNhdGVkVGl0bGUpLFxuXHRcdGlubmVyV2lkdGgsXG5cdFx0dGl0bGVQYWRkaW5nLFxuXHRcdG9wdHM/LnRpdGxlQWxpZ25cblx0KTtcblx0Y29uc3Qgd3JhcHBlZE1lc3NhZ2UgPSB3cmFwQW5zaShtZXNzYWdlLCBpbm5lcldpZHRoIC0gY29udGVudFBhZGRpbmcgKiAyLCB7XG5cdFx0aGFyZDogdHJ1ZSxcblx0XHR0cmltOiBmYWxzZSxcblx0fSk7XG5cdG91dHB1dC53cml0ZShcblx0XHRgJHtsaW5lUHJlZml4fSR7c3ltYm9sc1swXX0ke2hTeW1ib2wucmVwZWF0KHRpdGxlUGFkZGluZ0xlZnQpfSR7dHJ1bmNhdGVkVGl0bGV9JHtoU3ltYm9sLnJlcGVhdCh0aXRsZVBhZGRpbmdSaWdodCl9JHtzeW1ib2xzWzFdfVxcbmBcblx0KTtcblx0Y29uc3Qgd3JhcHBlZExpbmVzID0gd3JhcHBlZE1lc3NhZ2Uuc3BsaXQoJ1xcbicpO1xuXHRmb3IgKGNvbnN0IGxpbmUgb2Ygd3JhcHBlZExpbmVzKSB7XG5cdFx0Y29uc3QgW2xlZnRMaW5lUGFkZGluZywgcmlnaHRMaW5lUGFkZGluZ10gPSBnZXRQYWRkaW5nRm9yTGluZShcblx0XHRcdHN0cmluZ1dpZHRoKGxpbmUpLFxuXHRcdFx0aW5uZXJXaWR0aCxcblx0XHRcdGNvbnRlbnRQYWRkaW5nLFxuXHRcdFx0b3B0cz8uY29udGVudEFsaWduXG5cdFx0KTtcblx0XHRvdXRwdXQud3JpdGUoXG5cdFx0XHRgJHtsaW5lUHJlZml4fSR7dlN5bWJvbH0keycgJy5yZXBlYXQobGVmdExpbmVQYWRkaW5nKX0ke2xpbmV9JHsnICcucmVwZWF0KHJpZ2h0TGluZVBhZGRpbmcpfSR7dlN5bWJvbH1cXG5gXG5cdFx0KTtcblx0fVxuXHRvdXRwdXQud3JpdGUoYCR7bGluZVByZWZpeH0ke3N5bWJvbHNbMl19JHtoU3ltYm9sLnJlcGVhdChpbm5lcldpZHRoKX0ke3N5bWJvbHNbM119XFxuYCk7XG59O1xuIiwgImltcG9ydCB7IENvbmZpcm1Qcm9tcHQsIHNldHRpbmdzIH0gZnJvbSAnQGNsYWNrL2NvcmUnO1xuaW1wb3J0IGNvbG9yIGZyb20gJ3BpY29jb2xvcnMnO1xuaW1wb3J0IHtcblx0dHlwZSBDb21tb25PcHRpb25zLFxuXHRTX0JBUixcblx0U19CQVJfRU5ELFxuXHRTX1JBRElPX0FDVElWRSxcblx0U19SQURJT19JTkFDVElWRSxcblx0c3ltYm9sLFxufSBmcm9tICcuL2NvbW1vbi5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29uZmlybU9wdGlvbnMgZXh0ZW5kcyBDb21tb25PcHRpb25zIHtcblx0bWVzc2FnZTogc3RyaW5nO1xuXHRhY3RpdmU/OiBzdHJpbmc7XG5cdGluYWN0aXZlPzogc3RyaW5nO1xuXHRpbml0aWFsVmFsdWU/OiBib29sZWFuO1xuXHR2ZXJ0aWNhbD86IGJvb2xlYW47XG59XG5leHBvcnQgY29uc3QgY29uZmlybSA9IChvcHRzOiBDb25maXJtT3B0aW9ucykgPT4ge1xuXHRjb25zdCBhY3RpdmUgPSBvcHRzLmFjdGl2ZSA/PyAnWWVzJztcblx0Y29uc3QgaW5hY3RpdmUgPSBvcHRzLmluYWN0aXZlID8/ICdObyc7XG5cdHJldHVybiBuZXcgQ29uZmlybVByb21wdCh7XG5cdFx0YWN0aXZlLFxuXHRcdGluYWN0aXZlLFxuXHRcdHNpZ25hbDogb3B0cy5zaWduYWwsXG5cdFx0aW5wdXQ6IG9wdHMuaW5wdXQsXG5cdFx0b3V0cHV0OiBvcHRzLm91dHB1dCxcblx0XHRpbml0aWFsVmFsdWU6IG9wdHMuaW5pdGlhbFZhbHVlID8/IHRydWUsXG5cdFx0cmVuZGVyKCkge1xuXHRcdFx0Y29uc3QgaGFzR3VpZGUgPSBvcHRzLndpdGhHdWlkZSA/PyBzZXR0aW5ncy53aXRoR3VpZGU7XG5cdFx0XHRjb25zdCB0aXRsZSA9IGAke2hhc0d1aWRlID8gYCR7Y29sb3IuZ3JheShTX0JBUil9XFxuYCA6ICcnfSR7c3ltYm9sKHRoaXMuc3RhdGUpfSAgJHtvcHRzLm1lc3NhZ2V9XFxuYDtcblx0XHRcdGNvbnN0IHZhbHVlID0gdGhpcy52YWx1ZSA/IGFjdGl2ZSA6IGluYWN0aXZlO1xuXG5cdFx0XHRzd2l0Y2ggKHRoaXMuc3RhdGUpIHtcblx0XHRcdFx0Y2FzZSAnc3VibWl0Jzoge1xuXHRcdFx0XHRcdGNvbnN0IHN1Ym1pdFByZWZpeCA9IGhhc0d1aWRlID8gYCR7Y29sb3IuZ3JheShTX0JBUil9ICBgIDogJyc7XG5cdFx0XHRcdFx0cmV0dXJuIGAke3RpdGxlfSR7c3VibWl0UHJlZml4fSR7Y29sb3IuZGltKHZhbHVlKX1gO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNhc2UgJ2NhbmNlbCc6IHtcblx0XHRcdFx0XHRjb25zdCBjYW5jZWxQcmVmaXggPSBoYXNHdWlkZSA/IGAke2NvbG9yLmdyYXkoU19CQVIpfSAgYCA6ICcnO1xuXHRcdFx0XHRcdHJldHVybiBgJHt0aXRsZX0ke2NhbmNlbFByZWZpeH0ke2NvbG9yLnN0cmlrZXRocm91Z2goXG5cdFx0XHRcdFx0XHRjb2xvci5kaW0odmFsdWUpXG5cdFx0XHRcdFx0KX0ke2hhc0d1aWRlID8gYFxcbiR7Y29sb3IuZ3JheShTX0JBUil9YCA6ICcnfWA7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZGVmYXVsdDoge1xuXHRcdFx0XHRcdGNvbnN0IGRlZmF1bHRQcmVmaXggPSBoYXNHdWlkZSA/IGAke2NvbG9yLmN5YW4oU19CQVIpfSAgYCA6ICcnO1xuXHRcdFx0XHRcdGNvbnN0IGRlZmF1bHRQcmVmaXhFbmQgPSBoYXNHdWlkZSA/IGNvbG9yLmN5YW4oU19CQVJfRU5EKSA6ICcnO1xuXHRcdFx0XHRcdHJldHVybiBgJHt0aXRsZX0ke2RlZmF1bHRQcmVmaXh9JHtcblx0XHRcdFx0XHRcdHRoaXMudmFsdWVcblx0XHRcdFx0XHRcdFx0PyBgJHtjb2xvci5ncmVlbihTX1JBRElPX0FDVElWRSl9ICR7YWN0aXZlfWBcblx0XHRcdFx0XHRcdFx0OiBgJHtjb2xvci5kaW0oU19SQURJT19JTkFDVElWRSl9ICR7Y29sb3IuZGltKGFjdGl2ZSl9YFxuXHRcdFx0XHRcdH0ke29wdHMudmVydGljYWwgPyAoaGFzR3VpZGUgPyBgXFxuJHtjb2xvci5jeWFuKFNfQkFSKX0gIGAgOiAnXFxuJykgOiBgICR7Y29sb3IuZGltKCcvJyl9IGB9JHtcblx0XHRcdFx0XHRcdCF0aGlzLnZhbHVlXG5cdFx0XHRcdFx0XHRcdD8gYCR7Y29sb3IuZ3JlZW4oU19SQURJT19BQ1RJVkUpfSAke2luYWN0aXZlfWBcblx0XHRcdFx0XHRcdFx0OiBgJHtjb2xvci5kaW0oU19SQURJT19JTkFDVElWRSl9ICR7Y29sb3IuZGltKGluYWN0aXZlKX1gXG5cdFx0XHRcdFx0fVxcbiR7ZGVmYXVsdFByZWZpeEVuZH1cXG5gO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblx0fSkucHJvbXB0KCkgYXMgUHJvbWlzZTxib29sZWFuIHwgc3ltYm9sPjtcbn07XG4iLCAiaW1wb3J0IHsgaXNDYW5jZWwgfSBmcm9tICdAY2xhY2svY29yZSc7XG5cbnR5cGUgUHJldHRpZnk8VD4gPSB7XG5cdFtQIGluIGtleW9mIFRdOiBUW1BdO1xufSAmIHt9O1xuXG5leHBvcnQgdHlwZSBQcm9tcHRHcm91cEF3YWl0ZWRSZXR1cm48VD4gPSB7XG5cdFtQIGluIGtleW9mIFRdOiBFeGNsdWRlPEF3YWl0ZWQ8VFtQXT4sIHN5bWJvbD47XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIFByb21wdEdyb3VwT3B0aW9uczxUPiB7XG5cdC8qKlxuXHQgKiBDb250cm9sIGhvdyB0aGUgZ3JvdXAgY2FuIGJlIGNhbmNlbGVkXG5cdCAqIGlmIG9uZSBvZiB0aGUgcHJvbXB0cyBpcyBjYW5jZWxlZC5cblx0ICovXG5cdG9uQ2FuY2VsPzogKG9wdHM6IHsgcmVzdWx0czogUHJldHRpZnk8UGFydGlhbDxQcm9tcHRHcm91cEF3YWl0ZWRSZXR1cm48VD4+PiB9KSA9PiB2b2lkO1xufVxuXG5leHBvcnQgdHlwZSBQcm9tcHRHcm91cDxUPiA9IHtcblx0W1AgaW4ga2V5b2YgVF06IChvcHRzOiB7XG5cdFx0cmVzdWx0czogUHJldHRpZnk8UGFydGlhbDxQcm9tcHRHcm91cEF3YWl0ZWRSZXR1cm48T21pdDxULCBQPj4+Pjtcblx0fSkgPT4gdW5kZWZpbmVkIHwgUHJvbWlzZTxUW1BdIHwgdW5kZWZpbmVkPjtcbn07XG5cbi8qKlxuICogRGVmaW5lIGEgZ3JvdXAgb2YgcHJvbXB0cyB0byBiZSBkaXNwbGF5ZWRcbiAqIGFuZCByZXR1cm4gYSByZXN1bHRzIG9mIG9iamVjdHMgd2l0aGluIHRoZSBncm91cFxuICovXG5leHBvcnQgY29uc3QgZ3JvdXAgPSBhc3luYyA8VD4oXG5cdHByb21wdHM6IFByb21wdEdyb3VwPFQ+LFxuXHRvcHRzPzogUHJvbXB0R3JvdXBPcHRpb25zPFQ+XG4pOiBQcm9taXNlPFByZXR0aWZ5PFByb21wdEdyb3VwQXdhaXRlZFJldHVybjxUPj4+ID0+IHtcblx0Y29uc3QgcmVzdWx0cyA9IHt9IGFzIGFueTtcblx0Y29uc3QgcHJvbXB0TmFtZXMgPSBPYmplY3Qua2V5cyhwcm9tcHRzKTtcblxuXHRmb3IgKGNvbnN0IG5hbWUgb2YgcHJvbXB0TmFtZXMpIHtcblx0XHRjb25zdCBwcm9tcHQgPSBwcm9tcHRzW25hbWUgYXMga2V5b2YgVF07XG5cdFx0Y29uc3QgcmVzdWx0ID0gYXdhaXQgcHJvbXB0KHsgcmVzdWx0cyB9KT8uY2F0Y2goKGUpID0+IHtcblx0XHRcdHRocm93IGU7XG5cdFx0fSk7XG5cblx0XHQvLyBQYXNzIHRoZSByZXN1bHRzIHRvIHRoZSBvbkNhbmNlbCBmdW5jdGlvblxuXHRcdC8vIHNvIHRoZSB1c2VyIGNhbiBkZWNpZGUgd2hhdCB0byBkbyB3aXRoIHRoZSByZXN1bHRzXG5cdFx0Ly8gVE9ETzogU3dpdGNoIHRvIGNhbGxiYWNrIHdpdGhpbiBjb3JlIHRvIGF2b2lkIGlzQ2FuY2VsIEZuXG5cdFx0aWYgKHR5cGVvZiBvcHRzPy5vbkNhbmNlbCA9PT0gJ2Z1bmN0aW9uJyAmJiBpc0NhbmNlbChyZXN1bHQpKSB7XG5cdFx0XHRyZXN1bHRzW25hbWVdID0gJ2NhbmNlbGVkJztcblx0XHRcdG9wdHMub25DYW5jZWwoeyByZXN1bHRzIH0pO1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0cmVzdWx0c1tuYW1lXSA9IHJlc3VsdDtcblx0fVxuXG5cdHJldHVybiByZXN1bHRzO1xufTtcbiIsICJpbXBvcnQgeyBHcm91cE11bHRpU2VsZWN0UHJvbXB0IH0gZnJvbSAnQGNsYWNrL2NvcmUnO1xuaW1wb3J0IGNvbG9yIGZyb20gJ3BpY29jb2xvcnMnO1xuaW1wb3J0IHtcblx0dHlwZSBDb21tb25PcHRpb25zLFxuXHRTX0JBUixcblx0U19CQVJfRU5ELFxuXHRTX0NIRUNLQk9YX0FDVElWRSxcblx0U19DSEVDS0JPWF9JTkFDVElWRSxcblx0U19DSEVDS0JPWF9TRUxFQ1RFRCxcblx0c3ltYm9sLFxufSBmcm9tICcuL2NvbW1vbi5qcyc7XG5pbXBvcnQgdHlwZSB7IE9wdGlvbiB9IGZyb20gJy4vc2VsZWN0LmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBHcm91cE11bHRpU2VsZWN0T3B0aW9uczxWYWx1ZT4gZXh0ZW5kcyBDb21tb25PcHRpb25zIHtcblx0bWVzc2FnZTogc3RyaW5nO1xuXHRvcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCBPcHRpb248VmFsdWU+W10+O1xuXHRpbml0aWFsVmFsdWVzPzogVmFsdWVbXTtcblx0cmVxdWlyZWQ/OiBib29sZWFuO1xuXHRjdXJzb3JBdD86IFZhbHVlO1xuXHRzZWxlY3RhYmxlR3JvdXBzPzogYm9vbGVhbjtcblx0Z3JvdXBTcGFjaW5nPzogbnVtYmVyO1xufVxuZXhwb3J0IGNvbnN0IGdyb3VwTXVsdGlzZWxlY3QgPSA8VmFsdWU+KG9wdHM6IEdyb3VwTXVsdGlTZWxlY3RPcHRpb25zPFZhbHVlPikgPT4ge1xuXHRjb25zdCB7IHNlbGVjdGFibGVHcm91cHMgPSB0cnVlLCBncm91cFNwYWNpbmcgPSAwIH0gPSBvcHRzO1xuXHRjb25zdCBvcHQgPSAoXG5cdFx0b3B0aW9uOiBPcHRpb248VmFsdWU+ICYgeyBncm91cDogc3RyaW5nIHwgYm9vbGVhbiB9LFxuXHRcdHN0YXRlOlxuXHRcdFx0fCAnaW5hY3RpdmUnXG5cdFx0XHR8ICdhY3RpdmUnXG5cdFx0XHR8ICdzZWxlY3RlZCdcblx0XHRcdHwgJ2FjdGl2ZS1zZWxlY3RlZCdcblx0XHRcdHwgJ2dyb3VwLWFjdGl2ZSdcblx0XHRcdHwgJ2dyb3VwLWFjdGl2ZS1zZWxlY3RlZCdcblx0XHRcdHwgJ3N1Ym1pdHRlZCdcblx0XHRcdHwgJ2NhbmNlbGxlZCcsXG5cdFx0b3B0aW9uczogKE9wdGlvbjxWYWx1ZT4gJiB7IGdyb3VwOiBzdHJpbmcgfCBib29sZWFuIH0pW10gPSBbXVxuXHQpID0+IHtcblx0XHRjb25zdCBsYWJlbCA9IG9wdGlvbi5sYWJlbCA/PyBTdHJpbmcob3B0aW9uLnZhbHVlKTtcblx0XHRjb25zdCBpc0l0ZW0gPSB0eXBlb2Ygb3B0aW9uLmdyb3VwID09PSAnc3RyaW5nJztcblx0XHRjb25zdCBuZXh0ID0gaXNJdGVtICYmIChvcHRpb25zW29wdGlvbnMuaW5kZXhPZihvcHRpb24pICsgMV0gPz8geyBncm91cDogdHJ1ZSB9KTtcblx0XHRjb25zdCBpc0xhc3QgPSBpc0l0ZW0gJiYgbmV4dCAmJiBuZXh0Lmdyb3VwID09PSB0cnVlO1xuXHRcdGNvbnN0IHByZWZpeCA9IGlzSXRlbSA/IChzZWxlY3RhYmxlR3JvdXBzID8gYCR7aXNMYXN0ID8gU19CQVJfRU5EIDogU19CQVJ9IGAgOiAnICAnKSA6ICcnO1xuXHRcdGxldCBzcGFjaW5nUHJlZml4ID0gJyc7XG5cdFx0aWYgKGdyb3VwU3BhY2luZyA+IDAgJiYgIWlzSXRlbSkge1xuXHRcdFx0Y29uc3Qgc3BhY2luZ1ByZWZpeFRleHQgPSBgXFxuJHtjb2xvci5jeWFuKFNfQkFSKX1gO1xuXHRcdFx0c3BhY2luZ1ByZWZpeCA9IGAke3NwYWNpbmdQcmVmaXhUZXh0LnJlcGVhdChncm91cFNwYWNpbmcgLSAxKX0ke3NwYWNpbmdQcmVmaXhUZXh0fSAgYDtcblx0XHR9XG5cblx0XHRpZiAoc3RhdGUgPT09ICdhY3RpdmUnKSB7XG5cdFx0XHRyZXR1cm4gYCR7c3BhY2luZ1ByZWZpeH0ke2NvbG9yLmRpbShwcmVmaXgpfSR7Y29sb3IuY3lhbihTX0NIRUNLQk9YX0FDVElWRSl9ICR7bGFiZWx9JHtcblx0XHRcdFx0b3B0aW9uLmhpbnQgPyBgICR7Y29sb3IuZGltKGAoJHtvcHRpb24uaGludH0pYCl9YCA6ICcnXG5cdFx0XHR9YDtcblx0XHR9XG5cdFx0aWYgKHN0YXRlID09PSAnZ3JvdXAtYWN0aXZlJykge1xuXHRcdFx0cmV0dXJuIGAke3NwYWNpbmdQcmVmaXh9JHtwcmVmaXh9JHtjb2xvci5jeWFuKFNfQ0hFQ0tCT1hfQUNUSVZFKX0gJHtjb2xvci5kaW0obGFiZWwpfWA7XG5cdFx0fVxuXHRcdGlmIChzdGF0ZSA9PT0gJ2dyb3VwLWFjdGl2ZS1zZWxlY3RlZCcpIHtcblx0XHRcdHJldHVybiBgJHtzcGFjaW5nUHJlZml4fSR7cHJlZml4fSR7Y29sb3IuZ3JlZW4oU19DSEVDS0JPWF9TRUxFQ1RFRCl9ICR7Y29sb3IuZGltKGxhYmVsKX1gO1xuXHRcdH1cblx0XHRpZiAoc3RhdGUgPT09ICdzZWxlY3RlZCcpIHtcblx0XHRcdGNvbnN0IHNlbGVjdGVkQ2hlY2tib3ggPSBpc0l0ZW0gfHwgc2VsZWN0YWJsZUdyb3VwcyA/IGNvbG9yLmdyZWVuKFNfQ0hFQ0tCT1hfU0VMRUNURUQpIDogJyc7XG5cdFx0XHRyZXR1cm4gYCR7c3BhY2luZ1ByZWZpeH0ke2NvbG9yLmRpbShwcmVmaXgpfSR7c2VsZWN0ZWRDaGVja2JveH0gJHtjb2xvci5kaW0obGFiZWwpfSR7XG5cdFx0XHRcdG9wdGlvbi5oaW50ID8gYCAke2NvbG9yLmRpbShgKCR7b3B0aW9uLmhpbnR9KWApfWAgOiAnJ1xuXHRcdFx0fWA7XG5cdFx0fVxuXHRcdGlmIChzdGF0ZSA9PT0gJ2NhbmNlbGxlZCcpIHtcblx0XHRcdHJldHVybiBgJHtjb2xvci5zdHJpa2V0aHJvdWdoKGNvbG9yLmRpbShsYWJlbCkpfWA7XG5cdFx0fVxuXHRcdGlmIChzdGF0ZSA9PT0gJ2FjdGl2ZS1zZWxlY3RlZCcpIHtcblx0XHRcdHJldHVybiBgJHtzcGFjaW5nUHJlZml4fSR7Y29sb3IuZGltKHByZWZpeCl9JHtjb2xvci5ncmVlbihTX0NIRUNLQk9YX1NFTEVDVEVEKX0gJHtsYWJlbH0ke1xuXHRcdFx0XHRvcHRpb24uaGludCA/IGAgJHtjb2xvci5kaW0oYCgke29wdGlvbi5oaW50fSlgKX1gIDogJydcblx0XHRcdH1gO1xuXHRcdH1cblx0XHRpZiAoc3RhdGUgPT09ICdzdWJtaXR0ZWQnKSB7XG5cdFx0XHRyZXR1cm4gYCR7Y29sb3IuZGltKGxhYmVsKX1gO1xuXHRcdH1cblx0XHRjb25zdCB1bnNlbGVjdGVkQ2hlY2tib3ggPSBpc0l0ZW0gfHwgc2VsZWN0YWJsZUdyb3VwcyA/IGNvbG9yLmRpbShTX0NIRUNLQk9YX0lOQUNUSVZFKSA6ICcnO1xuXHRcdHJldHVybiBgJHtzcGFjaW5nUHJlZml4fSR7Y29sb3IuZGltKHByZWZpeCl9JHt1bnNlbGVjdGVkQ2hlY2tib3h9ICR7Y29sb3IuZGltKGxhYmVsKX1gO1xuXHR9O1xuXHRjb25zdCByZXF1aXJlZCA9IG9wdHMucmVxdWlyZWQgPz8gdHJ1ZTtcblxuXHRyZXR1cm4gbmV3IEdyb3VwTXVsdGlTZWxlY3RQcm9tcHQoe1xuXHRcdG9wdGlvbnM6IG9wdHMub3B0aW9ucyxcblx0XHRzaWduYWw6IG9wdHMuc2lnbmFsLFxuXHRcdGlucHV0OiBvcHRzLmlucHV0LFxuXHRcdG91dHB1dDogb3B0cy5vdXRwdXQsXG5cdFx0aW5pdGlhbFZhbHVlczogb3B0cy5pbml0aWFsVmFsdWVzLFxuXHRcdHJlcXVpcmVkLFxuXHRcdGN1cnNvckF0OiBvcHRzLmN1cnNvckF0LFxuXHRcdHNlbGVjdGFibGVHcm91cHMsXG5cdFx0dmFsaWRhdGUoc2VsZWN0ZWQ6IFZhbHVlW10gfCB1bmRlZmluZWQpIHtcblx0XHRcdGlmIChyZXF1aXJlZCAmJiAoc2VsZWN0ZWQgPT09IHVuZGVmaW5lZCB8fCBzZWxlY3RlZC5sZW5ndGggPT09IDApKVxuXHRcdFx0XHRyZXR1cm4gYFBsZWFzZSBzZWxlY3QgYXQgbGVhc3Qgb25lIG9wdGlvbi5cXG4ke2NvbG9yLnJlc2V0KFxuXHRcdFx0XHRcdGNvbG9yLmRpbShcblx0XHRcdFx0XHRcdGBQcmVzcyAke2NvbG9yLmdyYXkoY29sb3IuYmdXaGl0ZShjb2xvci5pbnZlcnNlKCcgc3BhY2UgJykpKX0gdG8gc2VsZWN0LCAke2NvbG9yLmdyYXkoXG5cdFx0XHRcdFx0XHRcdGNvbG9yLmJnV2hpdGUoY29sb3IuaW52ZXJzZSgnIGVudGVyICcpKVxuXHRcdFx0XHRcdFx0KX0gdG8gc3VibWl0YFxuXHRcdFx0XHRcdClcblx0XHRcdFx0KX1gO1xuXHRcdH0sXG5cdFx0cmVuZGVyKCkge1xuXHRcdFx0Y29uc3QgdGl0bGUgPSBgJHtjb2xvci5ncmF5KFNfQkFSKX1cXG4ke3N5bWJvbCh0aGlzLnN0YXRlKX0gICR7b3B0cy5tZXNzYWdlfVxcbmA7XG5cdFx0XHRjb25zdCB2YWx1ZSA9IHRoaXMudmFsdWUgPz8gW107XG5cblx0XHRcdHN3aXRjaCAodGhpcy5zdGF0ZSkge1xuXHRcdFx0XHRjYXNlICdzdWJtaXQnOiB7XG5cdFx0XHRcdFx0Y29uc3Qgc2VsZWN0ZWRPcHRpb25zID0gdGhpcy5vcHRpb25zXG5cdFx0XHRcdFx0XHQuZmlsdGVyKCh7IHZhbHVlOiBvcHRpb25WYWx1ZSB9KSA9PiB2YWx1ZS5pbmNsdWRlcyhvcHRpb25WYWx1ZSkpXG5cdFx0XHRcdFx0XHQubWFwKChvcHRpb24pID0+IG9wdChvcHRpb24sICdzdWJtaXR0ZWQnKSk7XG5cdFx0XHRcdFx0Y29uc3Qgb3B0aW9uc1RleHQgPVxuXHRcdFx0XHRcdFx0c2VsZWN0ZWRPcHRpb25zLmxlbmd0aCA9PT0gMCA/ICcnIDogYCAgJHtzZWxlY3RlZE9wdGlvbnMuam9pbihjb2xvci5kaW0oJywgJykpfWA7XG5cdFx0XHRcdFx0cmV0dXJuIGAke3RpdGxlfSR7Y29sb3IuZ3JheShTX0JBUil9JHtvcHRpb25zVGV4dH1gO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNhc2UgJ2NhbmNlbCc6IHtcblx0XHRcdFx0XHRjb25zdCBsYWJlbCA9IHRoaXMub3B0aW9uc1xuXHRcdFx0XHRcdFx0LmZpbHRlcigoeyB2YWx1ZTogb3B0aW9uVmFsdWUgfSkgPT4gdmFsdWUuaW5jbHVkZXMob3B0aW9uVmFsdWUpKVxuXHRcdFx0XHRcdFx0Lm1hcCgob3B0aW9uKSA9PiBvcHQob3B0aW9uLCAnY2FuY2VsbGVkJykpXG5cdFx0XHRcdFx0XHQuam9pbihjb2xvci5kaW0oJywgJykpO1xuXHRcdFx0XHRcdHJldHVybiBgJHt0aXRsZX0ke2NvbG9yLmdyYXkoU19CQVIpfSAgJHtcblx0XHRcdFx0XHRcdGxhYmVsLnRyaW0oKSA/IGAke2xhYmVsfVxcbiR7Y29sb3IuZ3JheShTX0JBUil9YCA6ICcnXG5cdFx0XHRcdFx0fWA7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y2FzZSAnZXJyb3InOiB7XG5cdFx0XHRcdFx0Y29uc3QgZm9vdGVyID0gdGhpcy5lcnJvclxuXHRcdFx0XHRcdFx0LnNwbGl0KCdcXG4nKVxuXHRcdFx0XHRcdFx0Lm1hcCgobG4sIGkpID0+XG5cdFx0XHRcdFx0XHRcdGkgPT09IDAgPyBgJHtjb2xvci55ZWxsb3coU19CQVJfRU5EKX0gICR7Y29sb3IueWVsbG93KGxuKX1gIDogYCAgICR7bG59YFxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0LmpvaW4oJ1xcbicpO1xuXHRcdFx0XHRcdHJldHVybiBgJHt0aXRsZX0ke2NvbG9yLnllbGxvdyhTX0JBUil9ICAke3RoaXMub3B0aW9uc1xuXHRcdFx0XHRcdFx0Lm1hcCgob3B0aW9uLCBpLCBvcHRpb25zKSA9PiB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHNlbGVjdGVkID1cblx0XHRcdFx0XHRcdFx0XHR2YWx1ZS5pbmNsdWRlcyhvcHRpb24udmFsdWUpIHx8XG5cdFx0XHRcdFx0XHRcdFx0KG9wdGlvbi5ncm91cCA9PT0gdHJ1ZSAmJiB0aGlzLmlzR3JvdXBTZWxlY3RlZChgJHtvcHRpb24udmFsdWV9YCkpO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBhY3RpdmUgPSBpID09PSB0aGlzLmN1cnNvcjtcblx0XHRcdFx0XHRcdFx0Y29uc3QgZ3JvdXBBY3RpdmUgPVxuXHRcdFx0XHRcdFx0XHRcdCFhY3RpdmUgJiZcblx0XHRcdFx0XHRcdFx0XHR0eXBlb2Ygb3B0aW9uLmdyb3VwID09PSAnc3RyaW5nJyAmJlxuXHRcdFx0XHRcdFx0XHRcdHRoaXMub3B0aW9uc1t0aGlzLmN1cnNvcl0udmFsdWUgPT09IG9wdGlvbi5ncm91cDtcblx0XHRcdFx0XHRcdFx0aWYgKGdyb3VwQWN0aXZlKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIG9wdChvcHRpb24sIHNlbGVjdGVkID8gJ2dyb3VwLWFjdGl2ZS1zZWxlY3RlZCcgOiAnZ3JvdXAtYWN0aXZlJywgb3B0aW9ucyk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0aWYgKGFjdGl2ZSAmJiBzZWxlY3RlZCkge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBvcHQob3B0aW9uLCAnYWN0aXZlLXNlbGVjdGVkJywgb3B0aW9ucyk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0aWYgKHNlbGVjdGVkKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIG9wdChvcHRpb24sICdzZWxlY3RlZCcsIG9wdGlvbnMpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHJldHVybiBvcHQob3B0aW9uLCBhY3RpdmUgPyAnYWN0aXZlJyA6ICdpbmFjdGl2ZScsIG9wdGlvbnMpO1xuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdC5qb2luKGBcXG4ke2NvbG9yLnllbGxvdyhTX0JBUil9ICBgKX1cXG4ke2Zvb3Rlcn1cXG5gO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGRlZmF1bHQ6IHtcblx0XHRcdFx0XHRjb25zdCBvcHRpb25zVGV4dCA9IHRoaXMub3B0aW9uc1xuXHRcdFx0XHRcdFx0Lm1hcCgob3B0aW9uLCBpLCBvcHRpb25zKSA9PiB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHNlbGVjdGVkID1cblx0XHRcdFx0XHRcdFx0XHR2YWx1ZS5pbmNsdWRlcyhvcHRpb24udmFsdWUpIHx8XG5cdFx0XHRcdFx0XHRcdFx0KG9wdGlvbi5ncm91cCA9PT0gdHJ1ZSAmJiB0aGlzLmlzR3JvdXBTZWxlY3RlZChgJHtvcHRpb24udmFsdWV9YCkpO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBhY3RpdmUgPSBpID09PSB0aGlzLmN1cnNvcjtcblx0XHRcdFx0XHRcdFx0Y29uc3QgZ3JvdXBBY3RpdmUgPVxuXHRcdFx0XHRcdFx0XHRcdCFhY3RpdmUgJiZcblx0XHRcdFx0XHRcdFx0XHR0eXBlb2Ygb3B0aW9uLmdyb3VwID09PSAnc3RyaW5nJyAmJlxuXHRcdFx0XHRcdFx0XHRcdHRoaXMub3B0aW9uc1t0aGlzLmN1cnNvcl0udmFsdWUgPT09IG9wdGlvbi5ncm91cDtcblx0XHRcdFx0XHRcdFx0bGV0IG9wdGlvblRleHQgPSAnJztcblx0XHRcdFx0XHRcdFx0aWYgKGdyb3VwQWN0aXZlKSB7XG5cdFx0XHRcdFx0XHRcdFx0b3B0aW9uVGV4dCA9IG9wdChcblx0XHRcdFx0XHRcdFx0XHRcdG9wdGlvbixcblx0XHRcdFx0XHRcdFx0XHRcdHNlbGVjdGVkID8gJ2dyb3VwLWFjdGl2ZS1zZWxlY3RlZCcgOiAnZ3JvdXAtYWN0aXZlJyxcblx0XHRcdFx0XHRcdFx0XHRcdG9wdGlvbnNcblx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGFjdGl2ZSAmJiBzZWxlY3RlZCkge1xuXHRcdFx0XHRcdFx0XHRcdG9wdGlvblRleHQgPSBvcHQob3B0aW9uLCAnYWN0aXZlLXNlbGVjdGVkJywgb3B0aW9ucyk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoc2VsZWN0ZWQpIHtcblx0XHRcdFx0XHRcdFx0XHRvcHRpb25UZXh0ID0gb3B0KG9wdGlvbiwgJ3NlbGVjdGVkJywgb3B0aW9ucyk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0b3B0aW9uVGV4dCA9IG9wdChvcHRpb24sIGFjdGl2ZSA/ICdhY3RpdmUnIDogJ2luYWN0aXZlJywgb3B0aW9ucyk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0Y29uc3QgcHJlZml4ID0gaSAhPT0gMCAmJiAhb3B0aW9uVGV4dC5zdGFydHNXaXRoKCdcXG4nKSA/ICcgICcgOiAnJztcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGAke3ByZWZpeH0ke29wdGlvblRleHR9YDtcblx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHQuam9pbihgXFxuJHtjb2xvci5jeWFuKFNfQkFSKX1gKTtcblx0XHRcdFx0XHRjb25zdCBvcHRpb25zUHJlZml4ID0gb3B0aW9uc1RleHQuc3RhcnRzV2l0aCgnXFxuJykgPyAnJyA6ICcgICc7XG5cdFx0XHRcdFx0cmV0dXJuIGAke3RpdGxlfSR7Y29sb3IuY3lhbihTX0JBUil9JHtvcHRpb25zUHJlZml4fSR7b3B0aW9uc1RleHR9XFxuJHtjb2xvci5jeWFuKFNfQkFSX0VORCl9XFxuYDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cdH0pLnByb21wdCgpIGFzIFByb21pc2U8VmFsdWVbXSB8IHN5bWJvbD47XG59O1xuIiwgImltcG9ydCB7IHNldHRpbmdzIH0gZnJvbSAnQGNsYWNrL2NvcmUnO1xuaW1wb3J0IGNvbG9yIGZyb20gJ3BpY29jb2xvcnMnO1xuaW1wb3J0IHtcblx0dHlwZSBDb21tb25PcHRpb25zLFxuXHRTX0JBUixcblx0U19FUlJPUixcblx0U19JTkZPLFxuXHRTX1NURVBfU1VCTUlULFxuXHRTX1NVQ0NFU1MsXG5cdFNfV0FSTixcbn0gZnJvbSAnLi9jb21tb24uanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIExvZ01lc3NhZ2VPcHRpb25zIGV4dGVuZHMgQ29tbW9uT3B0aW9ucyB7XG5cdHN5bWJvbD86IHN0cmluZztcblx0c3BhY2luZz86IG51bWJlcjtcblx0c2Vjb25kYXJ5U3ltYm9sPzogc3RyaW5nO1xufVxuXG5leHBvcnQgY29uc3QgbG9nID0ge1xuXHRtZXNzYWdlOiAoXG5cdFx0bWVzc2FnZTogc3RyaW5nIHwgc3RyaW5nW10gPSBbXSxcblx0XHR7XG5cdFx0XHRzeW1ib2wgPSBjb2xvci5ncmF5KFNfQkFSKSxcblx0XHRcdHNlY29uZGFyeVN5bWJvbCA9IGNvbG9yLmdyYXkoU19CQVIpLFxuXHRcdFx0b3V0cHV0ID0gcHJvY2Vzcy5zdGRvdXQsXG5cdFx0XHRzcGFjaW5nID0gMSxcblx0XHRcdHdpdGhHdWlkZSxcblx0XHR9OiBMb2dNZXNzYWdlT3B0aW9ucyA9IHt9XG5cdCkgPT4ge1xuXHRcdGNvbnN0IHBhcnRzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdGNvbnN0IGhhc0d1aWRlID0gd2l0aEd1aWRlID8/IHNldHRpbmdzLndpdGhHdWlkZTtcblx0XHRjb25zdCBzcGFjaW5nU3RyaW5nID0gIWhhc0d1aWRlID8gJycgOiBzZWNvbmRhcnlTeW1ib2w7XG5cdFx0Y29uc3QgcHJlZml4ID0gIWhhc0d1aWRlID8gJycgOiBgJHtzeW1ib2x9ICBgO1xuXHRcdGNvbnN0IHNlY29uZGFyeVByZWZpeCA9ICFoYXNHdWlkZSA/ICcnIDogYCR7c2Vjb25kYXJ5U3ltYm9sfSAgYDtcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgc3BhY2luZzsgaSsrKSB7XG5cdFx0XHRwYXJ0cy5wdXNoKHNwYWNpbmdTdHJpbmcpO1xuXHRcdH1cblxuXHRcdGNvbnN0IG1lc3NhZ2VQYXJ0cyA9IEFycmF5LmlzQXJyYXkobWVzc2FnZSkgPyBtZXNzYWdlIDogbWVzc2FnZS5zcGxpdCgnXFxuJyk7XG5cdFx0aWYgKG1lc3NhZ2VQYXJ0cy5sZW5ndGggPiAwKSB7XG5cdFx0XHRjb25zdCBbZmlyc3RMaW5lLCAuLi5saW5lc10gPSBtZXNzYWdlUGFydHM7XG5cdFx0XHRpZiAoZmlyc3RMaW5lLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0cGFydHMucHVzaChgJHtwcmVmaXh9JHtmaXJzdExpbmV9YCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRwYXJ0cy5wdXNoKGhhc0d1aWRlID8gc3ltYm9sIDogJycpO1xuXHRcdFx0fVxuXHRcdFx0Zm9yIChjb25zdCBsbiBvZiBsaW5lcykge1xuXHRcdFx0XHRpZiAobG4ubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdHBhcnRzLnB1c2goYCR7c2Vjb25kYXJ5UHJlZml4fSR7bG59YCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cGFydHMucHVzaChoYXNHdWlkZSA/IHNlY29uZGFyeVN5bWJvbCA6ICcnKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRvdXRwdXQud3JpdGUoYCR7cGFydHMuam9pbignXFxuJyl9XFxuYCk7XG5cdH0sXG5cdGluZm86IChtZXNzYWdlOiBzdHJpbmcsIG9wdHM/OiBMb2dNZXNzYWdlT3B0aW9ucykgPT4ge1xuXHRcdGxvZy5tZXNzYWdlKG1lc3NhZ2UsIHsgLi4ub3B0cywgc3ltYm9sOiBjb2xvci5ibHVlKFNfSU5GTykgfSk7XG5cdH0sXG5cdHN1Y2Nlc3M6IChtZXNzYWdlOiBzdHJpbmcsIG9wdHM/OiBMb2dNZXNzYWdlT3B0aW9ucykgPT4ge1xuXHRcdGxvZy5tZXNzYWdlKG1lc3NhZ2UsIHsgLi4ub3B0cywgc3ltYm9sOiBjb2xvci5ncmVlbihTX1NVQ0NFU1MpIH0pO1xuXHR9LFxuXHRzdGVwOiAobWVzc2FnZTogc3RyaW5nLCBvcHRzPzogTG9nTWVzc2FnZU9wdGlvbnMpID0+IHtcblx0XHRsb2cubWVzc2FnZShtZXNzYWdlLCB7IC4uLm9wdHMsIHN5bWJvbDogY29sb3IuZ3JlZW4oU19TVEVQX1NVQk1JVCkgfSk7XG5cdH0sXG5cdHdhcm46IChtZXNzYWdlOiBzdHJpbmcsIG9wdHM/OiBMb2dNZXNzYWdlT3B0aW9ucykgPT4ge1xuXHRcdGxvZy5tZXNzYWdlKG1lc3NhZ2UsIHsgLi4ub3B0cywgc3ltYm9sOiBjb2xvci55ZWxsb3coU19XQVJOKSB9KTtcblx0fSxcblx0LyoqIGFsaWFzIGZvciBgbG9nLndhcm4oKWAuICovXG5cdHdhcm5pbmc6IChtZXNzYWdlOiBzdHJpbmcsIG9wdHM/OiBMb2dNZXNzYWdlT3B0aW9ucykgPT4ge1xuXHRcdGxvZy53YXJuKG1lc3NhZ2UsIG9wdHMpO1xuXHR9LFxuXHRlcnJvcjogKG1lc3NhZ2U6IHN0cmluZywgb3B0cz86IExvZ01lc3NhZ2VPcHRpb25zKSA9PiB7XG5cdFx0bG9nLm1lc3NhZ2UobWVzc2FnZSwgeyAuLi5vcHRzLCBzeW1ib2w6IGNvbG9yLnJlZChTX0VSUk9SKSB9KTtcblx0fSxcbn07XG4iLCAiaW1wb3J0IHR5cGUgeyBXcml0YWJsZSB9IGZyb20gJ25vZGU6c3RyZWFtJztcbmltcG9ydCBjb2xvciBmcm9tICdwaWNvY29sb3JzJztcbmltcG9ydCB7IHR5cGUgQ29tbW9uT3B0aW9ucywgU19CQVIsIFNfQkFSX0VORCwgU19CQVJfU1RBUlQgfSBmcm9tICcuL2NvbW1vbi5qcyc7XG5cbmV4cG9ydCBjb25zdCBjYW5jZWwgPSAobWVzc2FnZSA9ICcnLCBvcHRzPzogQ29tbW9uT3B0aW9ucykgPT4ge1xuXHRjb25zdCBvdXRwdXQ6IFdyaXRhYmxlID0gb3B0cz8ub3V0cHV0ID8/IHByb2Nlc3Muc3Rkb3V0O1xuXHRvdXRwdXQud3JpdGUoYCR7Y29sb3IuZ3JheShTX0JBUl9FTkQpfSAgJHtjb2xvci5yZWQobWVzc2FnZSl9XFxuXFxuYCk7XG59O1xuXG5leHBvcnQgY29uc3QgaW50cm8gPSAodGl0bGUgPSAnJywgb3B0cz86IENvbW1vbk9wdGlvbnMpID0+IHtcblx0Y29uc3Qgb3V0cHV0OiBXcml0YWJsZSA9IG9wdHM/Lm91dHB1dCA/PyBwcm9jZXNzLnN0ZG91dDtcblx0b3V0cHV0LndyaXRlKGAke2NvbG9yLmdyYXkoU19CQVJfU1RBUlQpfSAgJHt0aXRsZX1cXG5gKTtcbn07XG5cbmV4cG9ydCBjb25zdCBvdXRybyA9IChtZXNzYWdlID0gJycsIG9wdHM/OiBDb21tb25PcHRpb25zKSA9PiB7XG5cdGNvbnN0IG91dHB1dDogV3JpdGFibGUgPSBvcHRzPy5vdXRwdXQgPz8gcHJvY2Vzcy5zdGRvdXQ7XG5cdG91dHB1dC53cml0ZShgJHtjb2xvci5ncmF5KFNfQkFSKX1cXG4ke2NvbG9yLmdyYXkoU19CQVJfRU5EKX0gICR7bWVzc2FnZX1cXG5cXG5gKTtcbn07XG4iLCAiaW1wb3J0IHsgTXVsdGlTZWxlY3RQcm9tcHQsIHdyYXBUZXh0V2l0aFByZWZpeCB9IGZyb20gJ0BjbGFjay9jb3JlJztcbmltcG9ydCBjb2xvciBmcm9tICdwaWNvY29sb3JzJztcbmltcG9ydCB7XG5cdHR5cGUgQ29tbW9uT3B0aW9ucyxcblx0U19CQVIsXG5cdFNfQkFSX0VORCxcblx0U19DSEVDS0JPWF9BQ1RJVkUsXG5cdFNfQ0hFQ0tCT1hfSU5BQ1RJVkUsXG5cdFNfQ0hFQ0tCT1hfU0VMRUNURUQsXG5cdHN5bWJvbCxcblx0c3ltYm9sQmFyLFxufSBmcm9tICcuL2NvbW1vbi5qcyc7XG5pbXBvcnQgeyBsaW1pdE9wdGlvbnMgfSBmcm9tICcuL2xpbWl0LW9wdGlvbnMuanMnO1xuaW1wb3J0IHR5cGUgeyBPcHRpb24gfSBmcm9tICcuL3NlbGVjdC5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTXVsdGlTZWxlY3RPcHRpb25zPFZhbHVlPiBleHRlbmRzIENvbW1vbk9wdGlvbnMge1xuXHRtZXNzYWdlOiBzdHJpbmc7XG5cdG9wdGlvbnM6IE9wdGlvbjxWYWx1ZT5bXTtcblx0aW5pdGlhbFZhbHVlcz86IFZhbHVlW107XG5cdG1heEl0ZW1zPzogbnVtYmVyO1xuXHRyZXF1aXJlZD86IGJvb2xlYW47XG5cdGN1cnNvckF0PzogVmFsdWU7XG59XG5jb25zdCBjb21wdXRlTGFiZWwgPSAobGFiZWw6IHN0cmluZywgZm9ybWF0OiAodGV4dDogc3RyaW5nKSA9PiBzdHJpbmcpID0+IHtcblx0cmV0dXJuIGxhYmVsXG5cdFx0LnNwbGl0KCdcXG4nKVxuXHRcdC5tYXAoKGxpbmUpID0+IGZvcm1hdChsaW5lKSlcblx0XHQuam9pbignXFxuJyk7XG59O1xuXG5leHBvcnQgY29uc3QgbXVsdGlzZWxlY3QgPSA8VmFsdWU+KG9wdHM6IE11bHRpU2VsZWN0T3B0aW9uczxWYWx1ZT4pID0+IHtcblx0Y29uc3Qgb3B0ID0gKFxuXHRcdG9wdGlvbjogT3B0aW9uPFZhbHVlPixcblx0XHRzdGF0ZTpcblx0XHRcdHwgJ2luYWN0aXZlJ1xuXHRcdFx0fCAnYWN0aXZlJ1xuXHRcdFx0fCAnc2VsZWN0ZWQnXG5cdFx0XHR8ICdhY3RpdmUtc2VsZWN0ZWQnXG5cdFx0XHR8ICdzdWJtaXR0ZWQnXG5cdFx0XHR8ICdjYW5jZWxsZWQnXG5cdFx0XHR8ICdkaXNhYmxlZCdcblx0KSA9PiB7XG5cdFx0Y29uc3QgbGFiZWwgPSBvcHRpb24ubGFiZWwgPz8gU3RyaW5nKG9wdGlvbi52YWx1ZSk7XG5cdFx0aWYgKHN0YXRlID09PSAnZGlzYWJsZWQnKSB7XG5cdFx0XHRyZXR1cm4gYCR7Y29sb3IuZ3JheShTX0NIRUNLQk9YX0lOQUNUSVZFKX0gJHtjb21wdXRlTGFiZWwobGFiZWwsIChzdHIpID0+IGNvbG9yLnN0cmlrZXRocm91Z2goY29sb3IuZ3JheShzdHIpKSl9JHtcblx0XHRcdFx0b3B0aW9uLmhpbnQgPyBgICR7Y29sb3IuZGltKGAoJHtvcHRpb24uaGludCA/PyAnZGlzYWJsZWQnfSlgKX1gIDogJydcblx0XHRcdH1gO1xuXHRcdH1cblx0XHRpZiAoc3RhdGUgPT09ICdhY3RpdmUnKSB7XG5cdFx0XHRyZXR1cm4gYCR7Y29sb3IuY3lhbihTX0NIRUNLQk9YX0FDVElWRSl9ICR7bGFiZWx9JHtcblx0XHRcdFx0b3B0aW9uLmhpbnQgPyBgICR7Y29sb3IuZGltKGAoJHtvcHRpb24uaGludH0pYCl9YCA6ICcnXG5cdFx0XHR9YDtcblx0XHR9XG5cdFx0aWYgKHN0YXRlID09PSAnc2VsZWN0ZWQnKSB7XG5cdFx0XHRyZXR1cm4gYCR7Y29sb3IuZ3JlZW4oU19DSEVDS0JPWF9TRUxFQ1RFRCl9ICR7Y29tcHV0ZUxhYmVsKGxhYmVsLCBjb2xvci5kaW0pfSR7XG5cdFx0XHRcdG9wdGlvbi5oaW50ID8gYCAke2NvbG9yLmRpbShgKCR7b3B0aW9uLmhpbnR9KWApfWAgOiAnJ1xuXHRcdFx0fWA7XG5cdFx0fVxuXHRcdGlmIChzdGF0ZSA9PT0gJ2NhbmNlbGxlZCcpIHtcblx0XHRcdHJldHVybiBgJHtjb21wdXRlTGFiZWwobGFiZWwsICh0ZXh0KSA9PiBjb2xvci5zdHJpa2V0aHJvdWdoKGNvbG9yLmRpbSh0ZXh0KSkpfWA7XG5cdFx0fVxuXHRcdGlmIChzdGF0ZSA9PT0gJ2FjdGl2ZS1zZWxlY3RlZCcpIHtcblx0XHRcdHJldHVybiBgJHtjb2xvci5ncmVlbihTX0NIRUNLQk9YX1NFTEVDVEVEKX0gJHtsYWJlbH0ke1xuXHRcdFx0XHRvcHRpb24uaGludCA/IGAgJHtjb2xvci5kaW0oYCgke29wdGlvbi5oaW50fSlgKX1gIDogJydcblx0XHRcdH1gO1xuXHRcdH1cblx0XHRpZiAoc3RhdGUgPT09ICdzdWJtaXR0ZWQnKSB7XG5cdFx0XHRyZXR1cm4gYCR7Y29tcHV0ZUxhYmVsKGxhYmVsLCBjb2xvci5kaW0pfWA7XG5cdFx0fVxuXHRcdHJldHVybiBgJHtjb2xvci5kaW0oU19DSEVDS0JPWF9JTkFDVElWRSl9ICR7Y29tcHV0ZUxhYmVsKGxhYmVsLCBjb2xvci5kaW0pfWA7XG5cdH07XG5cdGNvbnN0IHJlcXVpcmVkID0gb3B0cy5yZXF1aXJlZCA/PyB0cnVlO1xuXG5cdHJldHVybiBuZXcgTXVsdGlTZWxlY3RQcm9tcHQoe1xuXHRcdG9wdGlvbnM6IG9wdHMub3B0aW9ucyxcblx0XHRzaWduYWw6IG9wdHMuc2lnbmFsLFxuXHRcdGlucHV0OiBvcHRzLmlucHV0LFxuXHRcdG91dHB1dDogb3B0cy5vdXRwdXQsXG5cdFx0aW5pdGlhbFZhbHVlczogb3B0cy5pbml0aWFsVmFsdWVzLFxuXHRcdHJlcXVpcmVkLFxuXHRcdGN1cnNvckF0OiBvcHRzLmN1cnNvckF0LFxuXHRcdHZhbGlkYXRlKHNlbGVjdGVkOiBWYWx1ZVtdIHwgdW5kZWZpbmVkKSB7XG5cdFx0XHRpZiAocmVxdWlyZWQgJiYgKHNlbGVjdGVkID09PSB1bmRlZmluZWQgfHwgc2VsZWN0ZWQubGVuZ3RoID09PSAwKSlcblx0XHRcdFx0cmV0dXJuIGBQbGVhc2Ugc2VsZWN0IGF0IGxlYXN0IG9uZSBvcHRpb24uXFxuJHtjb2xvci5yZXNldChcblx0XHRcdFx0XHRjb2xvci5kaW0oXG5cdFx0XHRcdFx0XHRgUHJlc3MgJHtjb2xvci5ncmF5KGNvbG9yLmJnV2hpdGUoY29sb3IuaW52ZXJzZSgnIHNwYWNlICcpKSl9IHRvIHNlbGVjdCwgJHtjb2xvci5ncmF5KFxuXHRcdFx0XHRcdFx0XHRjb2xvci5iZ1doaXRlKGNvbG9yLmludmVyc2UoJyBlbnRlciAnKSlcblx0XHRcdFx0XHRcdCl9IHRvIHN1Ym1pdGBcblx0XHRcdFx0XHQpXG5cdFx0XHRcdCl9YDtcblx0XHR9LFxuXHRcdHJlbmRlcigpIHtcblx0XHRcdGNvbnN0IHdyYXBwZWRNZXNzYWdlID0gd3JhcFRleHRXaXRoUHJlZml4KFxuXHRcdFx0XHRvcHRzLm91dHB1dCxcblx0XHRcdFx0b3B0cy5tZXNzYWdlLFxuXHRcdFx0XHRgJHtzeW1ib2xCYXIodGhpcy5zdGF0ZSl9ICBgLFxuXHRcdFx0XHRgJHtzeW1ib2wodGhpcy5zdGF0ZSl9ICBgXG5cdFx0XHQpO1xuXHRcdFx0Y29uc3QgdGl0bGUgPSBgJHtjb2xvci5ncmF5KFNfQkFSKX1cXG4ke3dyYXBwZWRNZXNzYWdlfVxcbmA7XG5cdFx0XHRjb25zdCB2YWx1ZSA9IHRoaXMudmFsdWUgPz8gW107XG5cblx0XHRcdGNvbnN0IHN0eWxlT3B0aW9uID0gKG9wdGlvbjogT3B0aW9uPFZhbHVlPiwgYWN0aXZlOiBib29sZWFuKSA9PiB7XG5cdFx0XHRcdGlmIChvcHRpb24uZGlzYWJsZWQpIHtcblx0XHRcdFx0XHRyZXR1cm4gb3B0KG9wdGlvbiwgJ2Rpc2FibGVkJyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3Qgc2VsZWN0ZWQgPSB2YWx1ZS5pbmNsdWRlcyhvcHRpb24udmFsdWUpO1xuXHRcdFx0XHRpZiAoYWN0aXZlICYmIHNlbGVjdGVkKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9wdChvcHRpb24sICdhY3RpdmUtc2VsZWN0ZWQnKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoc2VsZWN0ZWQpIHtcblx0XHRcdFx0XHRyZXR1cm4gb3B0KG9wdGlvbiwgJ3NlbGVjdGVkJyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIG9wdChvcHRpb24sIGFjdGl2ZSA/ICdhY3RpdmUnIDogJ2luYWN0aXZlJyk7XG5cdFx0XHR9O1xuXG5cdFx0XHRzd2l0Y2ggKHRoaXMuc3RhdGUpIHtcblx0XHRcdFx0Y2FzZSAnc3VibWl0Jzoge1xuXHRcdFx0XHRcdGNvbnN0IHN1Ym1pdFRleHQgPVxuXHRcdFx0XHRcdFx0dGhpcy5vcHRpb25zXG5cdFx0XHRcdFx0XHRcdC5maWx0ZXIoKHsgdmFsdWU6IG9wdGlvblZhbHVlIH0pID0+IHZhbHVlLmluY2x1ZGVzKG9wdGlvblZhbHVlKSlcblx0XHRcdFx0XHRcdFx0Lm1hcCgob3B0aW9uKSA9PiBvcHQob3B0aW9uLCAnc3VibWl0dGVkJykpXG5cdFx0XHRcdFx0XHRcdC5qb2luKGNvbG9yLmRpbSgnLCAnKSkgfHwgY29sb3IuZGltKCdub25lJyk7XG5cdFx0XHRcdFx0Y29uc3Qgd3JhcHBlZFN1Ym1pdFRleHQgPSB3cmFwVGV4dFdpdGhQcmVmaXgoXG5cdFx0XHRcdFx0XHRvcHRzLm91dHB1dCxcblx0XHRcdFx0XHRcdHN1Ym1pdFRleHQsXG5cdFx0XHRcdFx0XHRgJHtjb2xvci5ncmF5KFNfQkFSKX0gIGBcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdHJldHVybiBgJHt0aXRsZX0ke3dyYXBwZWRTdWJtaXRUZXh0fWA7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y2FzZSAnY2FuY2VsJzoge1xuXHRcdFx0XHRcdGNvbnN0IGxhYmVsID0gdGhpcy5vcHRpb25zXG5cdFx0XHRcdFx0XHQuZmlsdGVyKCh7IHZhbHVlOiBvcHRpb25WYWx1ZSB9KSA9PiB2YWx1ZS5pbmNsdWRlcyhvcHRpb25WYWx1ZSkpXG5cdFx0XHRcdFx0XHQubWFwKChvcHRpb24pID0+IG9wdChvcHRpb24sICdjYW5jZWxsZWQnKSlcblx0XHRcdFx0XHRcdC5qb2luKGNvbG9yLmRpbSgnLCAnKSk7XG5cdFx0XHRcdFx0aWYgKGxhYmVsLnRyaW0oKSA9PT0gJycpIHtcblx0XHRcdFx0XHRcdHJldHVybiBgJHt0aXRsZX0ke2NvbG9yLmdyYXkoU19CQVIpfWA7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNvbnN0IHdyYXBwZWRMYWJlbCA9IHdyYXBUZXh0V2l0aFByZWZpeChvcHRzLm91dHB1dCwgbGFiZWwsIGAke2NvbG9yLmdyYXkoU19CQVIpfSAgYCk7XG5cdFx0XHRcdFx0cmV0dXJuIGAke3RpdGxlfSR7d3JhcHBlZExhYmVsfVxcbiR7Y29sb3IuZ3JheShTX0JBUil9YDtcblx0XHRcdFx0fVxuXHRcdFx0XHRjYXNlICdlcnJvcic6IHtcblx0XHRcdFx0XHRjb25zdCBwcmVmaXggPSBgJHtjb2xvci55ZWxsb3coU19CQVIpfSAgYDtcblx0XHRcdFx0XHRjb25zdCBmb290ZXIgPSB0aGlzLmVycm9yXG5cdFx0XHRcdFx0XHQuc3BsaXQoJ1xcbicpXG5cdFx0XHRcdFx0XHQubWFwKChsbiwgaSkgPT5cblx0XHRcdFx0XHRcdFx0aSA9PT0gMCA/IGAke2NvbG9yLnllbGxvdyhTX0JBUl9FTkQpfSAgJHtjb2xvci55ZWxsb3cobG4pfWAgOiBgICAgJHtsbn1gXG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHQuam9pbignXFxuJyk7XG5cdFx0XHRcdFx0Ly8gQ2FsY3VsYXRlIHJvd1BhZGRpbmc6IHRpdGxlIGxpbmVzICsgZm9vdGVyIGxpbmVzIChlcnJvciBtZXNzYWdlICsgdHJhaWxpbmcgbmV3bGluZSlcblx0XHRcdFx0XHRjb25zdCB0aXRsZUxpbmVDb3VudCA9IHRpdGxlLnNwbGl0KCdcXG4nKS5sZW5ndGg7XG5cdFx0XHRcdFx0Y29uc3QgZm9vdGVyTGluZUNvdW50ID0gZm9vdGVyLnNwbGl0KCdcXG4nKS5sZW5ndGggKyAxOyAvLyBmb290ZXIgKyB0cmFpbGluZyBuZXdsaW5lXG5cdFx0XHRcdFx0cmV0dXJuIGAke3RpdGxlfSR7cHJlZml4fSR7bGltaXRPcHRpb25zKHtcblx0XHRcdFx0XHRcdG91dHB1dDogb3B0cy5vdXRwdXQsXG5cdFx0XHRcdFx0XHRvcHRpb25zOiB0aGlzLm9wdGlvbnMsXG5cdFx0XHRcdFx0XHRjdXJzb3I6IHRoaXMuY3Vyc29yLFxuXHRcdFx0XHRcdFx0bWF4SXRlbXM6IG9wdHMubWF4SXRlbXMsXG5cdFx0XHRcdFx0XHRjb2x1bW5QYWRkaW5nOiBwcmVmaXgubGVuZ3RoLFxuXHRcdFx0XHRcdFx0cm93UGFkZGluZzogdGl0bGVMaW5lQ291bnQgKyBmb290ZXJMaW5lQ291bnQsXG5cdFx0XHRcdFx0XHRzdHlsZTogc3R5bGVPcHRpb24sXG5cdFx0XHRcdFx0fSkuam9pbihgXFxuJHtwcmVmaXh9YCl9XFxuJHtmb290ZXJ9XFxuYDtcblx0XHRcdFx0fVxuXHRcdFx0XHRkZWZhdWx0OiB7XG5cdFx0XHRcdFx0Y29uc3QgcHJlZml4ID0gYCR7Y29sb3IuY3lhbihTX0JBUil9ICBgO1xuXHRcdFx0XHRcdC8vIENhbGN1bGF0ZSByb3dQYWRkaW5nOiB0aXRsZSBsaW5lcyArIGZvb3RlciBsaW5lcyAoU19CQVJfRU5EICsgdHJhaWxpbmcgbmV3bGluZSlcblx0XHRcdFx0XHRjb25zdCB0aXRsZUxpbmVDb3VudCA9IHRpdGxlLnNwbGl0KCdcXG4nKS5sZW5ndGg7XG5cdFx0XHRcdFx0Y29uc3QgZm9vdGVyTGluZUNvdW50ID0gMjsgLy8gU19CQVJfRU5EICsgdHJhaWxpbmcgbmV3bGluZVxuXHRcdFx0XHRcdHJldHVybiBgJHt0aXRsZX0ke3ByZWZpeH0ke2xpbWl0T3B0aW9ucyh7XG5cdFx0XHRcdFx0XHRvdXRwdXQ6IG9wdHMub3V0cHV0LFxuXHRcdFx0XHRcdFx0b3B0aW9uczogdGhpcy5vcHRpb25zLFxuXHRcdFx0XHRcdFx0Y3Vyc29yOiB0aGlzLmN1cnNvcixcblx0XHRcdFx0XHRcdG1heEl0ZW1zOiBvcHRzLm1heEl0ZW1zLFxuXHRcdFx0XHRcdFx0Y29sdW1uUGFkZGluZzogcHJlZml4Lmxlbmd0aCxcblx0XHRcdFx0XHRcdHJvd1BhZGRpbmc6IHRpdGxlTGluZUNvdW50ICsgZm9vdGVyTGluZUNvdW50LFxuXHRcdFx0XHRcdFx0c3R5bGU6IHN0eWxlT3B0aW9uLFxuXHRcdFx0XHRcdH0pLmpvaW4oYFxcbiR7cHJlZml4fWApfVxcbiR7Y29sb3IuY3lhbihTX0JBUl9FTkQpfVxcbmA7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHR9KS5wcm9tcHQoKSBhcyBQcm9taXNlPFZhbHVlW10gfCBzeW1ib2w+O1xufTtcbiIsICJpbXBvcnQgcHJvY2VzcyBmcm9tICdub2RlOnByb2Nlc3MnO1xuaW1wb3J0IHR5cGUgeyBXcml0YWJsZSB9IGZyb20gJ25vZGU6c3RyZWFtJztcbmltcG9ydCB7IGdldENvbHVtbnMsIHNldHRpbmdzIH0gZnJvbSAnQGNsYWNrL2NvcmUnO1xuaW1wb3J0IHN0cmluZ1dpZHRoIGZyb20gJ2Zhc3Qtc3RyaW5nLXdpZHRoJztcbmltcG9ydCB7IHR5cGUgT3B0aW9ucyBhcyBXcmFwQW5zaU9wdGlvbnMsIHdyYXBBbnNpIH0gZnJvbSAnZmFzdC13cmFwLWFuc2knO1xuaW1wb3J0IGNvbG9yIGZyb20gJ3BpY29jb2xvcnMnO1xuaW1wb3J0IHtcblx0dHlwZSBDb21tb25PcHRpb25zLFxuXHRTX0JBUixcblx0U19CQVJfSCxcblx0U19DT05ORUNUX0xFRlQsXG5cdFNfQ09STkVSX0JPVFRPTV9MRUZULFxuXHRTX0NPUk5FUl9CT1RUT01fUklHSFQsXG5cdFNfQ09STkVSX1RPUF9SSUdIVCxcblx0U19TVEVQX1NVQk1JVCxcbn0gZnJvbSAnLi9jb21tb24uanMnO1xuXG50eXBlIEZvcm1hdEZuID0gKGxpbmU6IHN0cmluZykgPT4gc3RyaW5nO1xuZXhwb3J0IGludGVyZmFjZSBOb3RlT3B0aW9ucyBleHRlbmRzIENvbW1vbk9wdGlvbnMge1xuXHRmb3JtYXQ/OiBGb3JtYXRGbjtcbn1cblxuY29uc3QgZGVmYXVsdE5vdGVGb3JtYXR0ZXIgPSAobGluZTogc3RyaW5nKTogc3RyaW5nID0+IGNvbG9yLmRpbShsaW5lKTtcblxuY29uc3Qgd3JhcFdpdGhGb3JtYXQgPSAobWVzc2FnZTogc3RyaW5nLCB3aWR0aDogbnVtYmVyLCBmb3JtYXQ6IEZvcm1hdEZuKTogc3RyaW5nID0+IHtcblx0Y29uc3Qgb3B0czogV3JhcEFuc2lPcHRpb25zID0ge1xuXHRcdGhhcmQ6IHRydWUsXG5cdFx0dHJpbTogZmFsc2UsXG5cdH07XG5cdGNvbnN0IHdyYXBNc2cgPSB3cmFwQW5zaShtZXNzYWdlLCB3aWR0aCwgb3B0cykuc3BsaXQoJ1xcbicpO1xuXHRjb25zdCBtYXhXaWR0aE5vcm1hbCA9IHdyYXBNc2cucmVkdWNlKChzdW0sIGxuKSA9PiBNYXRoLm1heChzdHJpbmdXaWR0aChsbiksIHN1bSksIDApO1xuXHRjb25zdCBtYXhXaWR0aEZvcm1hdCA9IHdyYXBNc2cubWFwKGZvcm1hdCkucmVkdWNlKChzdW0sIGxuKSA9PiBNYXRoLm1heChzdHJpbmdXaWR0aChsbiksIHN1bSksIDApO1xuXHRjb25zdCB3cmFwV2lkdGggPSB3aWR0aCAtIChtYXhXaWR0aEZvcm1hdCAtIG1heFdpZHRoTm9ybWFsKTtcblx0cmV0dXJuIHdyYXBBbnNpKG1lc3NhZ2UsIHdyYXBXaWR0aCwgb3B0cyk7XG59O1xuXG5leHBvcnQgY29uc3Qgbm90ZSA9IChtZXNzYWdlID0gJycsIHRpdGxlID0gJycsIG9wdHM/OiBOb3RlT3B0aW9ucykgPT4ge1xuXHRjb25zdCBvdXRwdXQ6IFdyaXRhYmxlID0gb3B0cz8ub3V0cHV0ID8/IHByb2Nlc3Muc3Rkb3V0O1xuXHRjb25zdCBoYXNHdWlkZSA9IG9wdHM/LndpdGhHdWlkZSA/PyBzZXR0aW5ncy53aXRoR3VpZGU7XG5cdGNvbnN0IGZvcm1hdCA9IG9wdHM/LmZvcm1hdCA/PyBkZWZhdWx0Tm90ZUZvcm1hdHRlcjtcblx0Y29uc3Qgd3JhcE1zZyA9IHdyYXBXaXRoRm9ybWF0KG1lc3NhZ2UsIGdldENvbHVtbnMob3V0cHV0KSAtIDYsIGZvcm1hdCk7XG5cdGNvbnN0IGxpbmVzID0gWycnLCAuLi53cmFwTXNnLnNwbGl0KCdcXG4nKS5tYXAoZm9ybWF0KSwgJyddO1xuXHRjb25zdCB0aXRsZUxlbiA9IHN0cmluZ1dpZHRoKHRpdGxlKTtcblx0Y29uc3QgbGVuID1cblx0XHRNYXRoLm1heChcblx0XHRcdGxpbmVzLnJlZHVjZSgoc3VtLCBsbikgPT4ge1xuXHRcdFx0XHRjb25zdCB3aWR0aCA9IHN0cmluZ1dpZHRoKGxuKTtcblx0XHRcdFx0cmV0dXJuIHdpZHRoID4gc3VtID8gd2lkdGggOiBzdW07XG5cdFx0XHR9LCAwKSxcblx0XHRcdHRpdGxlTGVuXG5cdFx0KSArIDI7XG5cdGNvbnN0IG1zZyA9IGxpbmVzXG5cdFx0Lm1hcChcblx0XHRcdChsbikgPT4gYCR7Y29sb3IuZ3JheShTX0JBUil9ICAke2xufSR7JyAnLnJlcGVhdChsZW4gLSBzdHJpbmdXaWR0aChsbikpfSR7Y29sb3IuZ3JheShTX0JBUil9YFxuXHRcdClcblx0XHQuam9pbignXFxuJyk7XG5cdGNvbnN0IGxlYWRpbmdCb3JkZXIgPSBoYXNHdWlkZSA/IGAke2NvbG9yLmdyYXkoU19CQVIpfVxcbmAgOiAnJztcblx0Y29uc3QgYm90dG9tTGVmdCA9IGhhc0d1aWRlID8gU19DT05ORUNUX0xFRlQgOiBTX0NPUk5FUl9CT1RUT01fTEVGVDtcblx0b3V0cHV0LndyaXRlKFxuXHRcdGAke2xlYWRpbmdCb3JkZXJ9JHtjb2xvci5ncmVlbihTX1NURVBfU1VCTUlUKX0gICR7Y29sb3IucmVzZXQodGl0bGUpfSAke2NvbG9yLmdyYXkoXG5cdFx0XHRTX0JBUl9ILnJlcGVhdChNYXRoLm1heChsZW4gLSB0aXRsZUxlbiAtIDEsIDEpKSArIFNfQ09STkVSX1RPUF9SSUdIVFxuXHRcdCl9XFxuJHttc2d9XFxuJHtjb2xvci5ncmF5KGJvdHRvbUxlZnQgKyBTX0JBUl9ILnJlcGVhdChsZW4gKyAyKSArIFNfQ09STkVSX0JPVFRPTV9SSUdIVCl9XFxuYFxuXHQpO1xufTtcbiIsICJpbXBvcnQgeyBQYXNzd29yZFByb21wdCwgc2V0dGluZ3MgfSBmcm9tICdAY2xhY2svY29yZSc7XG5pbXBvcnQgY29sb3IgZnJvbSAncGljb2NvbG9ycyc7XG5pbXBvcnQgeyB0eXBlIENvbW1vbk9wdGlvbnMsIFNfQkFSLCBTX0JBUl9FTkQsIFNfUEFTU1dPUkRfTUFTSywgc3ltYm9sIH0gZnJvbSAnLi9jb21tb24uanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFBhc3N3b3JkT3B0aW9ucyBleHRlbmRzIENvbW1vbk9wdGlvbnMge1xuXHRtZXNzYWdlOiBzdHJpbmc7XG5cdG1hc2s/OiBzdHJpbmc7XG5cdHZhbGlkYXRlPzogKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpID0+IHN0cmluZyB8IEVycm9yIHwgdW5kZWZpbmVkO1xuXHRjbGVhck9uRXJyb3I/OiBib29sZWFuO1xufVxuZXhwb3J0IGNvbnN0IHBhc3N3b3JkID0gKG9wdHM6IFBhc3N3b3JkT3B0aW9ucykgPT4ge1xuXHRyZXR1cm4gbmV3IFBhc3N3b3JkUHJvbXB0KHtcblx0XHR2YWxpZGF0ZTogb3B0cy52YWxpZGF0ZSxcblx0XHRtYXNrOiBvcHRzLm1hc2sgPz8gU19QQVNTV09SRF9NQVNLLFxuXHRcdHNpZ25hbDogb3B0cy5zaWduYWwsXG5cdFx0aW5wdXQ6IG9wdHMuaW5wdXQsXG5cdFx0b3V0cHV0OiBvcHRzLm91dHB1dCxcblx0XHRyZW5kZXIoKSB7XG5cdFx0XHRjb25zdCBoYXNHdWlkZSA9IG9wdHMud2l0aEd1aWRlID8/IHNldHRpbmdzLndpdGhHdWlkZTtcblx0XHRcdGNvbnN0IHRpdGxlID0gYCR7aGFzR3VpZGUgPyBgJHtjb2xvci5ncmF5KFNfQkFSKX1cXG5gIDogJyd9JHtzeW1ib2wodGhpcy5zdGF0ZSl9ICAke29wdHMubWVzc2FnZX1cXG5gO1xuXHRcdFx0Y29uc3QgdXNlcklucHV0ID0gdGhpcy51c2VySW5wdXRXaXRoQ3Vyc29yO1xuXHRcdFx0Y29uc3QgbWFza2VkID0gdGhpcy5tYXNrZWQ7XG5cblx0XHRcdHN3aXRjaCAodGhpcy5zdGF0ZSkge1xuXHRcdFx0XHRjYXNlICdlcnJvcic6IHtcblx0XHRcdFx0XHRjb25zdCBlcnJvclByZWZpeCA9IGhhc0d1aWRlID8gYCR7Y29sb3IueWVsbG93KFNfQkFSKX0gIGAgOiAnJztcblx0XHRcdFx0XHRjb25zdCBlcnJvclByZWZpeEVuZCA9IGhhc0d1aWRlID8gYCR7Y29sb3IueWVsbG93KFNfQkFSX0VORCl9ICBgIDogJyc7XG5cdFx0XHRcdFx0Y29uc3QgbWFza2VkVGV4dCA9IG1hc2tlZCA/PyAnJztcblx0XHRcdFx0XHRpZiAob3B0cy5jbGVhck9uRXJyb3IpIHtcblx0XHRcdFx0XHRcdHRoaXMuY2xlYXIoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIGAke3RpdGxlLnRyaW0oKX1cXG4ke2Vycm9yUHJlZml4fSR7bWFza2VkVGV4dH1cXG4ke2Vycm9yUHJlZml4RW5kfSR7Y29sb3IueWVsbG93KHRoaXMuZXJyb3IpfVxcbmA7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y2FzZSAnc3VibWl0Jzoge1xuXHRcdFx0XHRcdGNvbnN0IHN1Ym1pdFByZWZpeCA9IGhhc0d1aWRlID8gYCR7Y29sb3IuZ3JheShTX0JBUil9ICBgIDogJyc7XG5cdFx0XHRcdFx0Y29uc3QgbWFza2VkVGV4dCA9IG1hc2tlZCA/IGNvbG9yLmRpbShtYXNrZWQpIDogJyc7XG5cdFx0XHRcdFx0cmV0dXJuIGAke3RpdGxlfSR7c3VibWl0UHJlZml4fSR7bWFza2VkVGV4dH1gO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNhc2UgJ2NhbmNlbCc6IHtcblx0XHRcdFx0XHRjb25zdCBjYW5jZWxQcmVmaXggPSBoYXNHdWlkZSA/IGAke2NvbG9yLmdyYXkoU19CQVIpfSAgYCA6ICcnO1xuXHRcdFx0XHRcdGNvbnN0IG1hc2tlZFRleHQgPSBtYXNrZWQgPyBjb2xvci5zdHJpa2V0aHJvdWdoKGNvbG9yLmRpbShtYXNrZWQpKSA6ICcnO1xuXHRcdFx0XHRcdHJldHVybiBgJHt0aXRsZX0ke2NhbmNlbFByZWZpeH0ke21hc2tlZFRleHR9JHtcblx0XHRcdFx0XHRcdG1hc2tlZCAmJiBoYXNHdWlkZSA/IGBcXG4ke2NvbG9yLmdyYXkoU19CQVIpfWAgOiAnJ1xuXHRcdFx0XHRcdH1gO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGRlZmF1bHQ6IHtcblx0XHRcdFx0XHRjb25zdCBkZWZhdWx0UHJlZml4ID0gaGFzR3VpZGUgPyBgJHtjb2xvci5jeWFuKFNfQkFSKX0gIGAgOiAnJztcblx0XHRcdFx0XHRjb25zdCBkZWZhdWx0UHJlZml4RW5kID0gaGFzR3VpZGUgPyBjb2xvci5jeWFuKFNfQkFSX0VORCkgOiAnJztcblx0XHRcdFx0XHRyZXR1cm4gYCR7dGl0bGV9JHtkZWZhdWx0UHJlZml4fSR7dXNlcklucHV0fVxcbiR7ZGVmYXVsdFByZWZpeEVuZH1cXG5gO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblx0fSkucHJvbXB0KCkgYXMgUHJvbWlzZTxzdHJpbmcgfCBzeW1ib2w+O1xufTtcbiIsICJpbXBvcnQgeyBleGlzdHNTeW5jLCBsc3RhdFN5bmMsIHJlYWRkaXJTeW5jIH0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgeyBkaXJuYW1lLCBqb2luIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IGF1dG9jb21wbGV0ZSB9IGZyb20gJy4vYXV0b2NvbXBsZXRlLmpzJztcbmltcG9ydCB0eXBlIHsgQ29tbW9uT3B0aW9ucyB9IGZyb20gJy4vY29tbW9uLmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBQYXRoT3B0aW9ucyBleHRlbmRzIENvbW1vbk9wdGlvbnMge1xuXHRyb290Pzogc3RyaW5nO1xuXHRkaXJlY3Rvcnk/OiBib29sZWFuO1xuXHRpbml0aWFsVmFsdWU/OiBzdHJpbmc7XG5cdG1lc3NhZ2U6IHN0cmluZztcblx0dmFsaWRhdGU/OiAodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkgPT4gc3RyaW5nIHwgRXJyb3IgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBjb25zdCBwYXRoID0gKG9wdHM6IFBhdGhPcHRpb25zKSA9PiB7XG5cdGNvbnN0IHZhbGlkYXRlID0gb3B0cy52YWxpZGF0ZTtcblxuXHRyZXR1cm4gYXV0b2NvbXBsZXRlKHtcblx0XHQuLi5vcHRzLFxuXHRcdGluaXRpYWxVc2VySW5wdXQ6IG9wdHMuaW5pdGlhbFZhbHVlID8/IG9wdHMucm9vdCA/PyBwcm9jZXNzLmN3ZCgpLFxuXHRcdG1heEl0ZW1zOiA1LFxuXHRcdHZhbGlkYXRlKHZhbHVlKSB7XG5cdFx0XHRpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcblx0XHRcdFx0Ly8gU2hvdWxkbid0IGV2ZXIgaGFwcGVuIHNpbmNlIHdlIGRvbid0IGVuYWJsZSBgbXVsdGlwbGU6IHRydWVgXG5cdFx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIXZhbHVlKSB7XG5cdFx0XHRcdHJldHVybiAnUGxlYXNlIHNlbGVjdCBhIHBhdGgnO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHZhbGlkYXRlKSB7XG5cdFx0XHRcdHJldHVybiB2YWxpZGF0ZSh2YWx1ZSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH0sXG5cdFx0b3B0aW9ucygpIHtcblx0XHRcdGNvbnN0IHVzZXJJbnB1dCA9IHRoaXMudXNlcklucHV0O1xuXHRcdFx0aWYgKHVzZXJJbnB1dCA9PT0gJycpIHtcblx0XHRcdFx0cmV0dXJuIFtdO1xuXHRcdFx0fVxuXG5cdFx0XHR0cnkge1xuXHRcdFx0XHRsZXQgc2VhcmNoUGF0aDogc3RyaW5nO1xuXG5cdFx0XHRcdGlmICghZXhpc3RzU3luYyh1c2VySW5wdXQpKSB7XG5cdFx0XHRcdFx0c2VhcmNoUGF0aCA9IGRpcm5hbWUodXNlcklucHV0KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjb25zdCBzdGF0ID0gbHN0YXRTeW5jKHVzZXJJbnB1dCk7XG5cdFx0XHRcdFx0aWYgKHN0YXQuaXNEaXJlY3RvcnkoKSkge1xuXHRcdFx0XHRcdFx0c2VhcmNoUGF0aCA9IHVzZXJJbnB1dDtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0c2VhcmNoUGF0aCA9IGRpcm5hbWUodXNlcklucHV0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCBpdGVtcyA9IHJlYWRkaXJTeW5jKHNlYXJjaFBhdGgpXG5cdFx0XHRcdFx0Lm1hcCgoaXRlbSkgPT4ge1xuXHRcdFx0XHRcdFx0Y29uc3QgcGF0aCA9IGpvaW4oc2VhcmNoUGF0aCwgaXRlbSk7XG5cdFx0XHRcdFx0XHRjb25zdCBzdGF0cyA9IGxzdGF0U3luYyhwYXRoKTtcblx0XHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRcdG5hbWU6IGl0ZW0sXG5cdFx0XHRcdFx0XHRcdHBhdGgsXG5cdFx0XHRcdFx0XHRcdGlzRGlyZWN0b3J5OiBzdGF0cy5pc0RpcmVjdG9yeSgpLFxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5maWx0ZXIoXG5cdFx0XHRcdFx0XHQoeyBwYXRoLCBpc0RpcmVjdG9yeSB9KSA9PlxuXHRcdFx0XHRcdFx0XHRwYXRoLnN0YXJ0c1dpdGgodXNlcklucHV0KSAmJiAob3B0cy5kaXJlY3RvcnkgfHwgIWlzRGlyZWN0b3J5KVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdHJldHVybiBpdGVtcy5tYXAoKGl0ZW0pID0+ICh7XG5cdFx0XHRcdFx0dmFsdWU6IGl0ZW0ucGF0aCxcblx0XHRcdFx0fSkpO1xuXHRcdFx0fSBjYXRjaCAoX2UpIHtcblx0XHRcdFx0cmV0dXJuIFtdO1xuXHRcdFx0fVxuXHRcdH0sXG5cdH0pO1xufTtcbiIsICJpbXBvcnQgeyBibG9jaywgZ2V0Q29sdW1ucywgc2V0dGluZ3MgfSBmcm9tICdAY2xhY2svY29yZSc7XG5pbXBvcnQgeyB3cmFwQW5zaSB9IGZyb20gJ2Zhc3Qtd3JhcC1hbnNpJztcbmltcG9ydCBjb2xvciBmcm9tICdwaWNvY29sb3JzJztcbmltcG9ydCB7IGN1cnNvciwgZXJhc2UgfSBmcm9tICdzaXN0ZXJhbnNpJztcbmltcG9ydCB7XG5cdHR5cGUgQ29tbW9uT3B0aW9ucyxcblx0aXNDSSBhcyBpc0NJRm4sXG5cdFNfQkFSLFxuXHRTX1NURVBfQ0FOQ0VMLFxuXHRTX1NURVBfRVJST1IsXG5cdFNfU1RFUF9TVUJNSVQsXG5cdHVuaWNvZGUsXG59IGZyb20gJy4vY29tbW9uLmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBTcGlubmVyT3B0aW9ucyBleHRlbmRzIENvbW1vbk9wdGlvbnMge1xuXHRpbmRpY2F0b3I/OiAnZG90cycgfCAndGltZXInO1xuXHRvbkNhbmNlbD86ICgpID0+IHZvaWQ7XG5cdGNhbmNlbE1lc3NhZ2U/OiBzdHJpbmc7XG5cdGVycm9yTWVzc2FnZT86IHN0cmluZztcblx0ZnJhbWVzPzogc3RyaW5nW107XG5cdGRlbGF5PzogbnVtYmVyO1xuXHRzdHlsZUZyYW1lPzogKGZyYW1lOiBzdHJpbmcpID0+IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTcGlubmVyUmVzdWx0IHtcblx0c3RhcnQobXNnPzogc3RyaW5nKTogdm9pZDtcblx0c3RvcChtc2c/OiBzdHJpbmcpOiB2b2lkO1xuXHRjYW5jZWwobXNnPzogc3RyaW5nKTogdm9pZDtcblx0ZXJyb3IobXNnPzogc3RyaW5nKTogdm9pZDtcblx0bWVzc2FnZShtc2c/OiBzdHJpbmcpOiB2b2lkO1xuXHRjbGVhcigpOiB2b2lkO1xuXHRyZWFkb25seSBpc0NhbmNlbGxlZDogYm9vbGVhbjtcbn1cblxuY29uc3QgZGVmYXVsdFN0eWxlRm46IFNwaW5uZXJPcHRpb25zWydzdHlsZUZyYW1lJ10gPSBjb2xvci5tYWdlbnRhO1xuXG5leHBvcnQgY29uc3Qgc3Bpbm5lciA9ICh7XG5cdGluZGljYXRvciA9ICdkb3RzJyxcblx0b25DYW5jZWwsXG5cdG91dHB1dCA9IHByb2Nlc3Muc3Rkb3V0LFxuXHRjYW5jZWxNZXNzYWdlLFxuXHRlcnJvck1lc3NhZ2UsXG5cdGZyYW1lcyA9IHVuaWNvZGUgPyBbJ+KXkicsICfil5AnLCAn4peTJywgJ+KXkSddIDogWyfigKInLCAnbycsICdPJywgJzAnXSxcblx0ZGVsYXkgPSB1bmljb2RlID8gODAgOiAxMjAsXG5cdHNpZ25hbCxcblx0Li4ub3B0c1xufTogU3Bpbm5lck9wdGlvbnMgPSB7fSk6IFNwaW5uZXJSZXN1bHQgPT4ge1xuXHRjb25zdCBpc0NJID0gaXNDSUZuKCk7XG5cblx0bGV0IHVuYmxvY2s6ICgpID0+IHZvaWQ7XG5cdGxldCBsb29wOiBOb2RlSlMuVGltZW91dDtcblx0bGV0IGlzU3Bpbm5lckFjdGl2ZSA9IGZhbHNlO1xuXHRsZXQgaXNDYW5jZWxsZWQgPSBmYWxzZTtcblx0bGV0IF9tZXNzYWdlID0gJyc7XG5cdGxldCBfcHJldk1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0bGV0IF9vcmlnaW46IG51bWJlciA9IHBlcmZvcm1hbmNlLm5vdygpO1xuXHRjb25zdCBjb2x1bW5zID0gZ2V0Q29sdW1ucyhvdXRwdXQpO1xuXHRjb25zdCBzdHlsZUZuID0gb3B0cz8uc3R5bGVGcmFtZSA/PyBkZWZhdWx0U3R5bGVGbjtcblxuXHRjb25zdCBoYW5kbGVFeGl0ID0gKGNvZGU6IG51bWJlcikgPT4ge1xuXHRcdGNvbnN0IG1zZyA9XG5cdFx0XHRjb2RlID4gMVxuXHRcdFx0XHQ/IChlcnJvck1lc3NhZ2UgPz8gc2V0dGluZ3MubWVzc2FnZXMuZXJyb3IpXG5cdFx0XHRcdDogKGNhbmNlbE1lc3NhZ2UgPz8gc2V0dGluZ3MubWVzc2FnZXMuY2FuY2VsKTtcblx0XHRpc0NhbmNlbGxlZCA9IGNvZGUgPT09IDE7XG5cdFx0aWYgKGlzU3Bpbm5lckFjdGl2ZSkge1xuXHRcdFx0X3N0b3AobXNnLCBjb2RlKTtcblx0XHRcdGlmIChpc0NhbmNlbGxlZCAmJiB0eXBlb2Ygb25DYW5jZWwgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0b25DYW5jZWwoKTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0Y29uc3QgZXJyb3JFdmVudEhhbmRsZXIgPSAoKSA9PiBoYW5kbGVFeGl0KDIpO1xuXHRjb25zdCBzaWduYWxFdmVudEhhbmRsZXIgPSAoKSA9PiBoYW5kbGVFeGl0KDEpO1xuXG5cdGNvbnN0IHJlZ2lzdGVySG9va3MgPSAoKSA9PiB7XG5cdFx0Ly8gUmVmZXJlbmNlOiBodHRwczovL25vZGVqcy5vcmcvYXBpL3Byb2Nlc3MuaHRtbCNldmVudC11bmNhdWdodGV4Y2VwdGlvblxuXHRcdHByb2Nlc3Mub24oJ3VuY2F1Z2h0RXhjZXB0aW9uTW9uaXRvcicsIGVycm9yRXZlbnRIYW5kbGVyKTtcblx0XHQvLyBSZWZlcmVuY2U6IGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvcHJvY2Vzcy5odG1sI2V2ZW50LXVuaGFuZGxlZHJlamVjdGlvblxuXHRcdHByb2Nlc3Mub24oJ3VuaGFuZGxlZFJlamVjdGlvbicsIGVycm9yRXZlbnRIYW5kbGVyKTtcblx0XHQvLyBSZWZlcmVuY2UgU2lnbmFsIEV2ZW50czogaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9wcm9jZXNzLmh0bWwjc2lnbmFsLWV2ZW50c1xuXHRcdHByb2Nlc3Mub24oJ1NJR0lOVCcsIHNpZ25hbEV2ZW50SGFuZGxlcik7XG5cdFx0cHJvY2Vzcy5vbignU0lHVEVSTScsIHNpZ25hbEV2ZW50SGFuZGxlcik7XG5cdFx0cHJvY2Vzcy5vbignZXhpdCcsIGhhbmRsZUV4aXQpO1xuXG5cdFx0aWYgKHNpZ25hbCkge1xuXHRcdFx0c2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgc2lnbmFsRXZlbnRIYW5kbGVyKTtcblx0XHR9XG5cdH07XG5cblx0Y29uc3QgY2xlYXJIb29rcyA9ICgpID0+IHtcblx0XHRwcm9jZXNzLnJlbW92ZUxpc3RlbmVyKCd1bmNhdWdodEV4Y2VwdGlvbk1vbml0b3InLCBlcnJvckV2ZW50SGFuZGxlcik7XG5cdFx0cHJvY2Vzcy5yZW1vdmVMaXN0ZW5lcigndW5oYW5kbGVkUmVqZWN0aW9uJywgZXJyb3JFdmVudEhhbmRsZXIpO1xuXHRcdHByb2Nlc3MucmVtb3ZlTGlzdGVuZXIoJ1NJR0lOVCcsIHNpZ25hbEV2ZW50SGFuZGxlcik7XG5cdFx0cHJvY2Vzcy5yZW1vdmVMaXN0ZW5lcignU0lHVEVSTScsIHNpZ25hbEV2ZW50SGFuZGxlcik7XG5cdFx0cHJvY2Vzcy5yZW1vdmVMaXN0ZW5lcignZXhpdCcsIGhhbmRsZUV4aXQpO1xuXG5cdFx0aWYgKHNpZ25hbCkge1xuXHRcdFx0c2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgc2lnbmFsRXZlbnRIYW5kbGVyKTtcblx0XHR9XG5cdH07XG5cblx0Y29uc3QgY2xlYXJQcmV2TWVzc2FnZSA9ICgpID0+IHtcblx0XHRpZiAoX3ByZXZNZXNzYWdlID09PSB1bmRlZmluZWQpIHJldHVybjtcblx0XHRpZiAoaXNDSSkgb3V0cHV0LndyaXRlKCdcXG4nKTtcblx0XHRjb25zdCB3cmFwcGVkID0gd3JhcEFuc2koX3ByZXZNZXNzYWdlLCBjb2x1bW5zLCB7XG5cdFx0XHRoYXJkOiB0cnVlLFxuXHRcdFx0dHJpbTogZmFsc2UsXG5cdFx0fSk7XG5cdFx0Y29uc3QgcHJldkxpbmVzID0gd3JhcHBlZC5zcGxpdCgnXFxuJyk7XG5cdFx0aWYgKHByZXZMaW5lcy5sZW5ndGggPiAxKSB7XG5cdFx0XHRvdXRwdXQud3JpdGUoY3Vyc29yLnVwKHByZXZMaW5lcy5sZW5ndGggLSAxKSk7XG5cdFx0fVxuXHRcdG91dHB1dC53cml0ZShjdXJzb3IudG8oMCkpO1xuXHRcdG91dHB1dC53cml0ZShlcmFzZS5kb3duKCkpO1xuXHR9O1xuXG5cdGNvbnN0IHJlbW92ZVRyYWlsaW5nRG90cyA9IChtc2c6IHN0cmluZyk6IHN0cmluZyA9PiB7XG5cdFx0cmV0dXJuIG1zZy5yZXBsYWNlKC9cXC4rJC8sICcnKTtcblx0fTtcblxuXHRjb25zdCBmb3JtYXRUaW1lciA9IChvcmlnaW46IG51bWJlcik6IHN0cmluZyA9PiB7XG5cdFx0Y29uc3QgZHVyYXRpb24gPSAocGVyZm9ybWFuY2Uubm93KCkgLSBvcmlnaW4pIC8gMTAwMDtcblx0XHRjb25zdCBtaW4gPSBNYXRoLmZsb29yKGR1cmF0aW9uIC8gNjApO1xuXHRcdGNvbnN0IHNlY3MgPSBNYXRoLmZsb29yKGR1cmF0aW9uICUgNjApO1xuXHRcdHJldHVybiBtaW4gPiAwID8gYFske21pbn1tICR7c2Vjc31zXWAgOiBgWyR7c2Vjc31zXWA7XG5cdH07XG5cblx0Y29uc3QgaGFzR3VpZGUgPSBvcHRzLndpdGhHdWlkZSA/PyBzZXR0aW5ncy53aXRoR3VpZGU7XG5cblx0Y29uc3Qgc3RhcnQgPSAobXNnID0gJycpOiB2b2lkID0+IHtcblx0XHRpc1NwaW5uZXJBY3RpdmUgPSB0cnVlO1xuXHRcdHVuYmxvY2sgPSBibG9jayh7IG91dHB1dCB9KTtcblx0XHRfbWVzc2FnZSA9IHJlbW92ZVRyYWlsaW5nRG90cyhtc2cpO1xuXHRcdF9vcmlnaW4gPSBwZXJmb3JtYW5jZS5ub3coKTtcblx0XHRpZiAoaGFzR3VpZGUpIHtcblx0XHRcdG91dHB1dC53cml0ZShgJHtjb2xvci5ncmF5KFNfQkFSKX1cXG5gKTtcblx0XHR9XG5cdFx0bGV0IGZyYW1lSW5kZXggPSAwO1xuXHRcdGxldCBpbmRpY2F0b3JUaW1lciA9IDA7XG5cdFx0cmVnaXN0ZXJIb29rcygpO1xuXHRcdGxvb3AgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG5cdFx0XHRpZiAoaXNDSSAmJiBfbWVzc2FnZSA9PT0gX3ByZXZNZXNzYWdlKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGNsZWFyUHJldk1lc3NhZ2UoKTtcblx0XHRcdF9wcmV2TWVzc2FnZSA9IF9tZXNzYWdlO1xuXHRcdFx0Y29uc3QgZnJhbWUgPSBzdHlsZUZuKGZyYW1lc1tmcmFtZUluZGV4XSk7XG5cdFx0XHRsZXQgb3V0cHV0TWVzc2FnZTogc3RyaW5nO1xuXG5cdFx0XHRpZiAoaXNDSSkge1xuXHRcdFx0XHRvdXRwdXRNZXNzYWdlID0gYCR7ZnJhbWV9ICAke19tZXNzYWdlfS4uLmA7XG5cdFx0XHR9IGVsc2UgaWYgKGluZGljYXRvciA9PT0gJ3RpbWVyJykge1xuXHRcdFx0XHRvdXRwdXRNZXNzYWdlID0gYCR7ZnJhbWV9ICAke19tZXNzYWdlfSAke2Zvcm1hdFRpbWVyKF9vcmlnaW4pfWA7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBsb2FkaW5nRG90cyA9ICcuJy5yZXBlYXQoTWF0aC5mbG9vcihpbmRpY2F0b3JUaW1lcikpLnNsaWNlKDAsIDMpO1xuXHRcdFx0XHRvdXRwdXRNZXNzYWdlID0gYCR7ZnJhbWV9ICAke19tZXNzYWdlfSR7bG9hZGluZ0RvdHN9YDtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3Qgd3JhcHBlZCA9IHdyYXBBbnNpKG91dHB1dE1lc3NhZ2UsIGNvbHVtbnMsIHtcblx0XHRcdFx0aGFyZDogdHJ1ZSxcblx0XHRcdFx0dHJpbTogZmFsc2UsXG5cdFx0XHR9KTtcblx0XHRcdG91dHB1dC53cml0ZSh3cmFwcGVkKTtcblxuXHRcdFx0ZnJhbWVJbmRleCA9IGZyYW1lSW5kZXggKyAxIDwgZnJhbWVzLmxlbmd0aCA/IGZyYW1lSW5kZXggKyAxIDogMDtcblx0XHRcdC8vIGluZGljYXRvciBpbmNyZWFzZSBieSAxIGV2ZXJ5IDggZnJhbWVzXG5cdFx0XHRpbmRpY2F0b3JUaW1lciA9IGluZGljYXRvclRpbWVyIDwgNCA/IGluZGljYXRvclRpbWVyICsgMC4xMjUgOiAwO1xuXHRcdH0sIGRlbGF5KTtcblx0fTtcblxuXHRjb25zdCBfc3RvcCA9IChtc2cgPSAnJywgY29kZSA9IDAsIHNpbGVudDogYm9vbGVhbiA9IGZhbHNlKTogdm9pZCA9PiB7XG5cdFx0aWYgKCFpc1NwaW5uZXJBY3RpdmUpIHJldHVybjtcblx0XHRpc1NwaW5uZXJBY3RpdmUgPSBmYWxzZTtcblx0XHRjbGVhckludGVydmFsKGxvb3ApO1xuXHRcdGNsZWFyUHJldk1lc3NhZ2UoKTtcblx0XHRjb25zdCBzdGVwID1cblx0XHRcdGNvZGUgPT09IDBcblx0XHRcdFx0PyBjb2xvci5ncmVlbihTX1NURVBfU1VCTUlUKVxuXHRcdFx0XHQ6IGNvZGUgPT09IDFcblx0XHRcdFx0XHQ/IGNvbG9yLnJlZChTX1NURVBfQ0FOQ0VMKVxuXHRcdFx0XHRcdDogY29sb3IucmVkKFNfU1RFUF9FUlJPUik7XG5cdFx0X21lc3NhZ2UgPSBtc2cgPz8gX21lc3NhZ2U7XG5cdFx0aWYgKCFzaWxlbnQpIHtcblx0XHRcdGlmIChpbmRpY2F0b3IgPT09ICd0aW1lcicpIHtcblx0XHRcdFx0b3V0cHV0LndyaXRlKGAke3N0ZXB9ICAke19tZXNzYWdlfSAke2Zvcm1hdFRpbWVyKF9vcmlnaW4pfVxcbmApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b3V0cHV0LndyaXRlKGAke3N0ZXB9ICAke19tZXNzYWdlfVxcbmApO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRjbGVhckhvb2tzKCk7XG5cdFx0dW5ibG9jaygpO1xuXHR9O1xuXG5cdGNvbnN0IHN0b3AgPSAobXNnID0gJycpOiB2b2lkID0+IF9zdG9wKG1zZywgMCk7XG5cdGNvbnN0IGNhbmNlbCA9IChtc2cgPSAnJyk6IHZvaWQgPT4gX3N0b3AobXNnLCAxKTtcblx0Y29uc3QgZXJyb3IgPSAobXNnID0gJycpOiB2b2lkID0+IF9zdG9wKG1zZywgMik7XG5cdC8vIFRPRE8gKDQzMDgxaik6IHRoaXMgd2lsbCBsZWF2ZSB0aGUgaW5pdGlhbCBTX0JBUiBzaW5jZSB3ZSBwdXJwb3NlbHlcblx0Ly8gZG9uJ3QgZXJhc2UgdGhhdCBpbiBgY2xlYXJQcmV2TWVzc2FnZWAuIEluIGZ1dHVyZSwgd2UgbWF5IHdhbnQgdG8gdHJlYXRcblx0Ly8gYGNsZWFyYCBhcyBhIHNwZWNpYWwgY2FzZSBhbmQgcmVtb3ZlIHRoZSBiYXIgdG9vLlxuXHRjb25zdCBjbGVhciA9ICgpOiB2b2lkID0+IF9zdG9wKCcnLCAwLCB0cnVlKTtcblxuXHRjb25zdCBtZXNzYWdlID0gKG1zZyA9ICcnKTogdm9pZCA9PiB7XG5cdFx0X21lc3NhZ2UgPSByZW1vdmVUcmFpbGluZ0RvdHMobXNnID8/IF9tZXNzYWdlKTtcblx0fTtcblxuXHRyZXR1cm4ge1xuXHRcdHN0YXJ0LFxuXHRcdHN0b3AsXG5cdFx0bWVzc2FnZSxcblx0XHRjYW5jZWwsXG5cdFx0ZXJyb3IsXG5cdFx0Y2xlYXIsXG5cdFx0Z2V0IGlzQ2FuY2VsbGVkKCkge1xuXHRcdFx0cmV0dXJuIGlzQ2FuY2VsbGVkO1xuXHRcdH0sXG5cdH07XG59O1xuIiwgImltcG9ydCB0eXBlIHsgU3RhdGUgfSBmcm9tICdAY2xhY2svY29yZSc7XG5pbXBvcnQgY29sb3IgZnJvbSAncGljb2NvbG9ycyc7XG5pbXBvcnQgeyB1bmljb2RlT3IgfSBmcm9tICcuL2NvbW1vbi5qcyc7XG5pbXBvcnQgeyB0eXBlIFNwaW5uZXJPcHRpb25zLCB0eXBlIFNwaW5uZXJSZXN1bHQsIHNwaW5uZXIgfSBmcm9tICcuL3NwaW5uZXIuanMnO1xuXG5jb25zdCBTX1BST0dSRVNTX0NIQVI6IFJlY29yZDxOb25OdWxsYWJsZTxQcm9ncmVzc09wdGlvbnNbJ3N0eWxlJ10+LCBzdHJpbmc+ID0ge1xuXHRsaWdodDogdW5pY29kZU9yKCfilIAnLCAnLScpLFxuXHRoZWF2eTogdW5pY29kZU9yKCfilIEnLCAnPScpLFxuXHRibG9jazogdW5pY29kZU9yKCfilognLCAnIycpLFxufTtcblxuZXhwb3J0IGludGVyZmFjZSBQcm9ncmVzc09wdGlvbnMgZXh0ZW5kcyBTcGlubmVyT3B0aW9ucyB7XG5cdHN0eWxlPzogJ2xpZ2h0JyB8ICdoZWF2eScgfCAnYmxvY2snO1xuXHRtYXg/OiBudW1iZXI7XG5cdHNpemU/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJvZ3Jlc3NSZXN1bHQgZXh0ZW5kcyBTcGlubmVyUmVzdWx0IHtcblx0YWR2YW5jZShzdGVwPzogbnVtYmVyLCBtc2c/OiBzdHJpbmcpOiB2b2lkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvZ3Jlc3Moe1xuXHRzdHlsZSA9ICdoZWF2eScsXG5cdG1heDogdXNlck1heCA9IDEwMCxcblx0c2l6ZTogdXNlclNpemUgPSA0MCxcblx0Li4uc3Bpbm5lck9wdGlvbnNcbn06IFByb2dyZXNzT3B0aW9ucyA9IHt9KTogUHJvZ3Jlc3NSZXN1bHQge1xuXHRjb25zdCBzcGluID0gc3Bpbm5lcihzcGlubmVyT3B0aW9ucyk7XG5cdGxldCB2YWx1ZSA9IDA7XG5cdGxldCBwcmV2aW91c01lc3NhZ2UgPSAnJztcblxuXHRjb25zdCBtYXggPSBNYXRoLm1heCgxLCB1c2VyTWF4KTtcblx0Y29uc3Qgc2l6ZSA9IE1hdGgubWF4KDEsIHVzZXJTaXplKTtcblxuXHRjb25zdCBhY3RpdmVTdHlsZSA9IChzdGF0ZTogU3RhdGUpID0+IHtcblx0XHRzd2l0Y2ggKHN0YXRlKSB7XG5cdFx0XHRjYXNlICdpbml0aWFsJzpcblx0XHRcdGNhc2UgJ2FjdGl2ZSc6XG5cdFx0XHRcdHJldHVybiBjb2xvci5tYWdlbnRhO1xuXHRcdFx0Y2FzZSAnZXJyb3InOlxuXHRcdFx0Y2FzZSAnY2FuY2VsJzpcblx0XHRcdFx0cmV0dXJuIGNvbG9yLnJlZDtcblx0XHRcdGNhc2UgJ3N1Ym1pdCc6XG5cdFx0XHRcdHJldHVybiBjb2xvci5ncmVlbjtcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiBjb2xvci5tYWdlbnRhO1xuXHRcdH1cblx0fTtcblx0Y29uc3QgZHJhd1Byb2dyZXNzID0gKHN0YXRlOiBTdGF0ZSwgbXNnOiBzdHJpbmcpID0+IHtcblx0XHRjb25zdCBhY3RpdmUgPSBNYXRoLmZsb29yKCh2YWx1ZSAvIG1heCkgKiBzaXplKTtcblx0XHRyZXR1cm4gYCR7YWN0aXZlU3R5bGUoc3RhdGUpKFNfUFJPR1JFU1NfQ0hBUltzdHlsZV0ucmVwZWF0KGFjdGl2ZSkpfSR7Y29sb3IuZGltKFNfUFJPR1JFU1NfQ0hBUltzdHlsZV0ucmVwZWF0KHNpemUgLSBhY3RpdmUpKX0gJHttc2d9YDtcblx0fTtcblxuXHRjb25zdCBzdGFydCA9IChtc2cgPSAnJykgPT4ge1xuXHRcdHByZXZpb3VzTWVzc2FnZSA9IG1zZztcblx0XHRzcGluLnN0YXJ0KGRyYXdQcm9ncmVzcygnaW5pdGlhbCcsIG1zZykpO1xuXHR9O1xuXHRjb25zdCBhZHZhbmNlID0gKHN0ZXAgPSAxLCBtc2c/OiBzdHJpbmcpOiB2b2lkID0+IHtcblx0XHR2YWx1ZSA9IE1hdGgubWluKG1heCwgc3RlcCArIHZhbHVlKTtcblx0XHRzcGluLm1lc3NhZ2UoZHJhd1Byb2dyZXNzKCdhY3RpdmUnLCBtc2cgPz8gcHJldmlvdXNNZXNzYWdlKSk7XG5cdFx0cHJldmlvdXNNZXNzYWdlID0gbXNnID8/IHByZXZpb3VzTWVzc2FnZTtcblx0fTtcblx0cmV0dXJuIHtcblx0XHRzdGFydCxcblx0XHRzdG9wOiBzcGluLnN0b3AsXG5cdFx0Y2FuY2VsOiBzcGluLmNhbmNlbCxcblx0XHRlcnJvcjogc3Bpbi5lcnJvcixcblx0XHRjbGVhcjogc3Bpbi5jbGVhcixcblx0XHRhZHZhbmNlLFxuXHRcdGlzQ2FuY2VsbGVkOiBzcGluLmlzQ2FuY2VsbGVkLFxuXHRcdG1lc3NhZ2U6IChtc2c6IHN0cmluZykgPT4gYWR2YW5jZSgwLCBtc2cpLFxuXHR9O1xufVxuIiwgImltcG9ydCB7IFNlbGVjdFByb21wdCwgc2V0dGluZ3MsIHdyYXBUZXh0V2l0aFByZWZpeCB9IGZyb20gJ0BjbGFjay9jb3JlJztcbmltcG9ydCBjb2xvciBmcm9tICdwaWNvY29sb3JzJztcbmltcG9ydCB7XG5cdHR5cGUgQ29tbW9uT3B0aW9ucyxcblx0U19CQVIsXG5cdFNfQkFSX0VORCxcblx0U19SQURJT19BQ1RJVkUsXG5cdFNfUkFESU9fSU5BQ1RJVkUsXG5cdHN5bWJvbCxcblx0c3ltYm9sQmFyLFxufSBmcm9tICcuL2NvbW1vbi5qcyc7XG5pbXBvcnQgeyBsaW1pdE9wdGlvbnMgfSBmcm9tICcuL2xpbWl0LW9wdGlvbnMuanMnO1xuXG50eXBlIFByaW1pdGl2ZSA9IFJlYWRvbmx5PHN0cmluZyB8IGJvb2xlYW4gfCBudW1iZXI+O1xuXG5leHBvcnQgdHlwZSBPcHRpb248VmFsdWU+ID0gVmFsdWUgZXh0ZW5kcyBQcmltaXRpdmVcblx0PyB7XG5cdFx0XHQvKipcblx0XHRcdCAqIEludGVybmFsIGRhdGEgZm9yIHRoaXMgb3B0aW9uLlxuXHRcdFx0ICovXG5cdFx0XHR2YWx1ZTogVmFsdWU7XG5cdFx0XHQvKipcblx0XHRcdCAqIFRoZSBvcHRpb25hbCwgdXNlci1mYWNpbmcgdGV4dCBmb3IgdGhpcyBvcHRpb24uXG5cdFx0XHQgKlxuXHRcdFx0ICogQnkgZGVmYXVsdCwgdGhlIGB2YWx1ZWAgaXMgY29udmVydGVkIHRvIGEgc3RyaW5nLlxuXHRcdFx0ICovXG5cdFx0XHRsYWJlbD86IHN0cmluZztcblx0XHRcdC8qKlxuXHRcdFx0ICogQW4gb3B0aW9uYWwgaGludCB0byBkaXNwbGF5IHRvIHRoZSB1c2VyIHdoZW5cblx0XHRcdCAqIHRoaXMgb3B0aW9uIG1pZ2h0IGJlIHNlbGVjdGVkLlxuXHRcdFx0ICpcblx0XHRcdCAqIEJ5IGRlZmF1bHQsIG5vIGBoaW50YCBpcyBkaXNwbGF5ZWQuXG5cdFx0XHQgKi9cblx0XHRcdGhpbnQ/OiBzdHJpbmc7XG5cdFx0XHQvKipcblx0XHRcdCAqIFdoZXRoZXIgdGhpcyBvcHRpb24gaXMgZGlzYWJsZWQuXG5cdFx0XHQgKiBEaXNhYmxlZCBvcHRpb25zIGFyZSB2aXNpYmxlIGJ1dCBjYW5ub3QgYmUgc2VsZWN0ZWQuXG5cdFx0XHQgKlxuXHRcdFx0ICogQnkgZGVmYXVsdCwgb3B0aW9ucyBhcmUgbm90IGRpc2FibGVkLlxuXHRcdFx0ICovXG5cdFx0XHRkaXNhYmxlZD86IGJvb2xlYW47XG5cdFx0fVxuXHQ6IHtcblx0XHRcdC8qKlxuXHRcdFx0ICogSW50ZXJuYWwgZGF0YSBmb3IgdGhpcyBvcHRpb24uXG5cdFx0XHQgKi9cblx0XHRcdHZhbHVlOiBWYWx1ZTtcblx0XHRcdC8qKlxuXHRcdFx0ICogUmVxdWlyZWQuIFRoZSB1c2VyLWZhY2luZyB0ZXh0IGZvciB0aGlzIG9wdGlvbi5cblx0XHRcdCAqL1xuXHRcdFx0bGFiZWw6IHN0cmluZztcblx0XHRcdC8qKlxuXHRcdFx0ICogQW4gb3B0aW9uYWwgaGludCB0byBkaXNwbGF5IHRvIHRoZSB1c2VyIHdoZW5cblx0XHRcdCAqIHRoaXMgb3B0aW9uIG1pZ2h0IGJlIHNlbGVjdGVkLlxuXHRcdFx0ICpcblx0XHRcdCAqIEJ5IGRlZmF1bHQsIG5vIGBoaW50YCBpcyBkaXNwbGF5ZWQuXG5cdFx0XHQgKi9cblx0XHRcdGhpbnQ/OiBzdHJpbmc7XG5cdFx0XHQvKipcblx0XHRcdCAqIFdoZXRoZXIgdGhpcyBvcHRpb24gaXMgZGlzYWJsZWQuXG5cdFx0XHQgKiBEaXNhYmxlZCBvcHRpb25zIGFyZSB2aXNpYmxlIGJ1dCBjYW5ub3QgYmUgc2VsZWN0ZWQuXG5cdFx0XHQgKlxuXHRcdFx0ICogQnkgZGVmYXVsdCwgb3B0aW9ucyBhcmUgbm90IGRpc2FibGVkLlxuXHRcdFx0ICovXG5cdFx0XHRkaXNhYmxlZD86IGJvb2xlYW47XG5cdFx0fTtcblxuZXhwb3J0IGludGVyZmFjZSBTZWxlY3RPcHRpb25zPFZhbHVlPiBleHRlbmRzIENvbW1vbk9wdGlvbnMge1xuXHRtZXNzYWdlOiBzdHJpbmc7XG5cdG9wdGlvbnM6IE9wdGlvbjxWYWx1ZT5bXTtcblx0aW5pdGlhbFZhbHVlPzogVmFsdWU7XG5cdG1heEl0ZW1zPzogbnVtYmVyO1xufVxuXG5jb25zdCBjb21wdXRlTGFiZWwgPSAobGFiZWw6IHN0cmluZywgZm9ybWF0OiAodGV4dDogc3RyaW5nKSA9PiBzdHJpbmcpID0+IHtcblx0aWYgKCFsYWJlbC5pbmNsdWRlcygnXFxuJykpIHtcblx0XHRyZXR1cm4gZm9ybWF0KGxhYmVsKTtcblx0fVxuXHRyZXR1cm4gbGFiZWxcblx0XHQuc3BsaXQoJ1xcbicpXG5cdFx0Lm1hcCgobGluZSkgPT4gZm9ybWF0KGxpbmUpKVxuXHRcdC5qb2luKCdcXG4nKTtcbn07XG5cbmV4cG9ydCBjb25zdCBzZWxlY3QgPSA8VmFsdWU+KG9wdHM6IFNlbGVjdE9wdGlvbnM8VmFsdWU+KSA9PiB7XG5cdGNvbnN0IG9wdCA9IChcblx0XHRvcHRpb246IE9wdGlvbjxWYWx1ZT4sXG5cdFx0c3RhdGU6ICdpbmFjdGl2ZScgfCAnYWN0aXZlJyB8ICdzZWxlY3RlZCcgfCAnY2FuY2VsbGVkJyB8ICdkaXNhYmxlZCdcblx0KSA9PiB7XG5cdFx0Y29uc3QgbGFiZWwgPSBvcHRpb24ubGFiZWwgPz8gU3RyaW5nKG9wdGlvbi52YWx1ZSk7XG5cdFx0c3dpdGNoIChzdGF0ZSkge1xuXHRcdFx0Y2FzZSAnZGlzYWJsZWQnOlxuXHRcdFx0XHRyZXR1cm4gYCR7Y29sb3IuZ3JheShTX1JBRElPX0lOQUNUSVZFKX0gJHtjb21wdXRlTGFiZWwobGFiZWwsIGNvbG9yLmdyYXkpfSR7XG5cdFx0XHRcdFx0b3B0aW9uLmhpbnQgPyBgICR7Y29sb3IuZGltKGAoJHtvcHRpb24uaGludCA/PyAnZGlzYWJsZWQnfSlgKX1gIDogJydcblx0XHRcdFx0fWA7XG5cdFx0XHRjYXNlICdzZWxlY3RlZCc6XG5cdFx0XHRcdHJldHVybiBgJHtjb21wdXRlTGFiZWwobGFiZWwsIGNvbG9yLmRpbSl9YDtcblx0XHRcdGNhc2UgJ2FjdGl2ZSc6XG5cdFx0XHRcdHJldHVybiBgJHtjb2xvci5ncmVlbihTX1JBRElPX0FDVElWRSl9ICR7bGFiZWx9JHtcblx0XHRcdFx0XHRvcHRpb24uaGludCA/IGAgJHtjb2xvci5kaW0oYCgke29wdGlvbi5oaW50fSlgKX1gIDogJydcblx0XHRcdFx0fWA7XG5cdFx0XHRjYXNlICdjYW5jZWxsZWQnOlxuXHRcdFx0XHRyZXR1cm4gYCR7Y29tcHV0ZUxhYmVsKGxhYmVsLCAoc3RyKSA9PiBjb2xvci5zdHJpa2V0aHJvdWdoKGNvbG9yLmRpbShzdHIpKSl9YDtcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiBgJHtjb2xvci5kaW0oU19SQURJT19JTkFDVElWRSl9ICR7Y29tcHV0ZUxhYmVsKGxhYmVsLCBjb2xvci5kaW0pfWA7XG5cdFx0fVxuXHR9O1xuXG5cdHJldHVybiBuZXcgU2VsZWN0UHJvbXB0KHtcblx0XHRvcHRpb25zOiBvcHRzLm9wdGlvbnMsXG5cdFx0c2lnbmFsOiBvcHRzLnNpZ25hbCxcblx0XHRpbnB1dDogb3B0cy5pbnB1dCxcblx0XHRvdXRwdXQ6IG9wdHMub3V0cHV0LFxuXHRcdGluaXRpYWxWYWx1ZTogb3B0cy5pbml0aWFsVmFsdWUsXG5cdFx0cmVuZGVyKCkge1xuXHRcdFx0Y29uc3QgaGFzR3VpZGUgPSBvcHRzLndpdGhHdWlkZSA/PyBzZXR0aW5ncy53aXRoR3VpZGU7XG5cdFx0XHRjb25zdCB0aXRsZVByZWZpeCA9IGAke3N5bWJvbCh0aGlzLnN0YXRlKX0gIGA7XG5cdFx0XHRjb25zdCB0aXRsZVByZWZpeEJhciA9IGAke3N5bWJvbEJhcih0aGlzLnN0YXRlKX0gIGA7XG5cdFx0XHRjb25zdCBtZXNzYWdlTGluZXMgPSB3cmFwVGV4dFdpdGhQcmVmaXgoXG5cdFx0XHRcdG9wdHMub3V0cHV0LFxuXHRcdFx0XHRvcHRzLm1lc3NhZ2UsXG5cdFx0XHRcdHRpdGxlUHJlZml4QmFyLFxuXHRcdFx0XHR0aXRsZVByZWZpeFxuXHRcdFx0KTtcblx0XHRcdGNvbnN0IHRpdGxlID0gYCR7aGFzR3VpZGUgPyBgJHtjb2xvci5ncmF5KFNfQkFSKX1cXG5gIDogJyd9JHttZXNzYWdlTGluZXN9XFxuYDtcblxuXHRcdFx0c3dpdGNoICh0aGlzLnN0YXRlKSB7XG5cdFx0XHRcdGNhc2UgJ3N1Ym1pdCc6IHtcblx0XHRcdFx0XHRjb25zdCBzdWJtaXRQcmVmaXggPSBoYXNHdWlkZSA/IGAke2NvbG9yLmdyYXkoU19CQVIpfSAgYCA6ICcnO1xuXHRcdFx0XHRcdGNvbnN0IHdyYXBwZWRMaW5lcyA9IHdyYXBUZXh0V2l0aFByZWZpeChcblx0XHRcdFx0XHRcdG9wdHMub3V0cHV0LFxuXHRcdFx0XHRcdFx0b3B0KHRoaXMub3B0aW9uc1t0aGlzLmN1cnNvcl0sICdzZWxlY3RlZCcpLFxuXHRcdFx0XHRcdFx0c3VibWl0UHJlZml4XG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRyZXR1cm4gYCR7dGl0bGV9JHt3cmFwcGVkTGluZXN9YDtcblx0XHRcdFx0fVxuXHRcdFx0XHRjYXNlICdjYW5jZWwnOiB7XG5cdFx0XHRcdFx0Y29uc3QgY2FuY2VsUHJlZml4ID0gaGFzR3VpZGUgPyBgJHtjb2xvci5ncmF5KFNfQkFSKX0gIGAgOiAnJztcblx0XHRcdFx0XHRjb25zdCB3cmFwcGVkTGluZXMgPSB3cmFwVGV4dFdpdGhQcmVmaXgoXG5cdFx0XHRcdFx0XHRvcHRzLm91dHB1dCxcblx0XHRcdFx0XHRcdG9wdCh0aGlzLm9wdGlvbnNbdGhpcy5jdXJzb3JdLCAnY2FuY2VsbGVkJyksXG5cdFx0XHRcdFx0XHRjYW5jZWxQcmVmaXhcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdHJldHVybiBgJHt0aXRsZX0ke3dyYXBwZWRMaW5lc30ke2hhc0d1aWRlID8gYFxcbiR7Y29sb3IuZ3JheShTX0JBUil9YCA6ICcnfWA7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZGVmYXVsdDoge1xuXHRcdFx0XHRcdGNvbnN0IHByZWZpeCA9IGhhc0d1aWRlID8gYCR7Y29sb3IuY3lhbihTX0JBUil9ICBgIDogJyc7XG5cdFx0XHRcdFx0Y29uc3QgcHJlZml4RW5kID0gaGFzR3VpZGUgPyBjb2xvci5jeWFuKFNfQkFSX0VORCkgOiAnJztcblx0XHRcdFx0XHQvLyBDYWxjdWxhdGUgcm93UGFkZGluZzogdGl0bGUgbGluZXMgKyBmb290ZXIgbGluZXMgKFNfQkFSX0VORCArIHRyYWlsaW5nIG5ld2xpbmUpXG5cdFx0XHRcdFx0Y29uc3QgdGl0bGVMaW5lQ291bnQgPSB0aXRsZS5zcGxpdCgnXFxuJykubGVuZ3RoO1xuXHRcdFx0XHRcdGNvbnN0IGZvb3RlckxpbmVDb3VudCA9IGhhc0d1aWRlID8gMiA6IDE7IC8vIFNfQkFSX0VORCArIHRyYWlsaW5nIG5ld2xpbmUgKG9yIGp1c3QgdHJhaWxpbmcgbmV3bGluZSlcblx0XHRcdFx0XHRyZXR1cm4gYCR7dGl0bGV9JHtwcmVmaXh9JHtsaW1pdE9wdGlvbnMoe1xuXHRcdFx0XHRcdFx0b3V0cHV0OiBvcHRzLm91dHB1dCxcblx0XHRcdFx0XHRcdGN1cnNvcjogdGhpcy5jdXJzb3IsXG5cdFx0XHRcdFx0XHRvcHRpb25zOiB0aGlzLm9wdGlvbnMsXG5cdFx0XHRcdFx0XHRtYXhJdGVtczogb3B0cy5tYXhJdGVtcyxcblx0XHRcdFx0XHRcdGNvbHVtblBhZGRpbmc6IHByZWZpeC5sZW5ndGgsXG5cdFx0XHRcdFx0XHRyb3dQYWRkaW5nOiB0aXRsZUxpbmVDb3VudCArIGZvb3RlckxpbmVDb3VudCxcblx0XHRcdFx0XHRcdHN0eWxlOiAoaXRlbSwgYWN0aXZlKSA9PlxuXHRcdFx0XHRcdFx0XHRvcHQoaXRlbSwgaXRlbS5kaXNhYmxlZCA/ICdkaXNhYmxlZCcgOiBhY3RpdmUgPyAnYWN0aXZlJyA6ICdpbmFjdGl2ZScpLFxuXHRcdFx0XHRcdH0pLmpvaW4oYFxcbiR7cHJlZml4fWApfVxcbiR7cHJlZml4RW5kfVxcbmA7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHR9KS5wcm9tcHQoKSBhcyBQcm9taXNlPFZhbHVlIHwgc3ltYm9sPjtcbn07XG4iLCAiaW1wb3J0IHsgU2VsZWN0S2V5UHJvbXB0LCBzZXR0aW5ncywgd3JhcFRleHRXaXRoUHJlZml4IH0gZnJvbSAnQGNsYWNrL2NvcmUnO1xuaW1wb3J0IGNvbG9yIGZyb20gJ3BpY29jb2xvcnMnO1xuaW1wb3J0IHsgdHlwZSBDb21tb25PcHRpb25zLCBTX0JBUiwgU19CQVJfRU5ELCBzeW1ib2wgfSBmcm9tICcuL2NvbW1vbi5qcyc7XG5pbXBvcnQgdHlwZSB7IE9wdGlvbiB9IGZyb20gJy4vc2VsZWN0LmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBTZWxlY3RLZXlPcHRpb25zPFZhbHVlIGV4dGVuZHMgc3RyaW5nPiBleHRlbmRzIENvbW1vbk9wdGlvbnMge1xuXHRtZXNzYWdlOiBzdHJpbmc7XG5cdG9wdGlvbnM6IE9wdGlvbjxWYWx1ZT5bXTtcblx0aW5pdGlhbFZhbHVlPzogVmFsdWU7XG5cdGNhc2VTZW5zaXRpdmU/OiBib29sZWFuO1xufVxuXG5leHBvcnQgY29uc3Qgc2VsZWN0S2V5ID0gPFZhbHVlIGV4dGVuZHMgc3RyaW5nPihvcHRzOiBTZWxlY3RLZXlPcHRpb25zPFZhbHVlPikgPT4ge1xuXHRjb25zdCBvcHQgPSAoXG5cdFx0b3B0aW9uOiBPcHRpb248VmFsdWU+LFxuXHRcdHN0YXRlOiAnaW5hY3RpdmUnIHwgJ2FjdGl2ZScgfCAnc2VsZWN0ZWQnIHwgJ2NhbmNlbGxlZCcgPSAnaW5hY3RpdmUnXG5cdCkgPT4ge1xuXHRcdGNvbnN0IGxhYmVsID0gb3B0aW9uLmxhYmVsID8/IFN0cmluZyhvcHRpb24udmFsdWUpO1xuXHRcdGlmIChzdGF0ZSA9PT0gJ3NlbGVjdGVkJykge1xuXHRcdFx0cmV0dXJuIGAke2NvbG9yLmRpbShsYWJlbCl9YDtcblx0XHR9XG5cdFx0aWYgKHN0YXRlID09PSAnY2FuY2VsbGVkJykge1xuXHRcdFx0cmV0dXJuIGAke2NvbG9yLnN0cmlrZXRocm91Z2goY29sb3IuZGltKGxhYmVsKSl9YDtcblx0XHR9XG5cdFx0aWYgKHN0YXRlID09PSAnYWN0aXZlJykge1xuXHRcdFx0cmV0dXJuIGAke2NvbG9yLmJnQ3lhbihjb2xvci5ncmF5KGAgJHtvcHRpb24udmFsdWV9IGApKX0gJHtsYWJlbH0ke1xuXHRcdFx0XHRvcHRpb24uaGludCA/IGAgJHtjb2xvci5kaW0oYCgke29wdGlvbi5oaW50fSlgKX1gIDogJydcblx0XHRcdH1gO1xuXHRcdH1cblx0XHRyZXR1cm4gYCR7Y29sb3IuZ3JheShjb2xvci5iZ1doaXRlKGNvbG9yLmludmVyc2UoYCAke29wdGlvbi52YWx1ZX0gYCkpKX0gJHtsYWJlbH0ke1xuXHRcdFx0b3B0aW9uLmhpbnQgPyBgICR7Y29sb3IuZGltKGAoJHtvcHRpb24uaGludH0pYCl9YCA6ICcnXG5cdFx0fWA7XG5cdH07XG5cblx0cmV0dXJuIG5ldyBTZWxlY3RLZXlQcm9tcHQoe1xuXHRcdG9wdGlvbnM6IG9wdHMub3B0aW9ucyxcblx0XHRzaWduYWw6IG9wdHMuc2lnbmFsLFxuXHRcdGlucHV0OiBvcHRzLmlucHV0LFxuXHRcdG91dHB1dDogb3B0cy5vdXRwdXQsXG5cdFx0aW5pdGlhbFZhbHVlOiBvcHRzLmluaXRpYWxWYWx1ZSxcblx0XHRjYXNlU2Vuc2l0aXZlOiBvcHRzLmNhc2VTZW5zaXRpdmUsXG5cdFx0cmVuZGVyKCkge1xuXHRcdFx0Y29uc3QgaGFzR3VpZGUgPSBvcHRzLndpdGhHdWlkZSA/PyBzZXR0aW5ncy53aXRoR3VpZGU7XG5cdFx0XHRjb25zdCB0aXRsZSA9IGAke2hhc0d1aWRlID8gYCR7Y29sb3IuZ3JheShTX0JBUil9XFxuYCA6ICcnfSR7c3ltYm9sKHRoaXMuc3RhdGUpfSAgJHtvcHRzLm1lc3NhZ2V9XFxuYDtcblxuXHRcdFx0c3dpdGNoICh0aGlzLnN0YXRlKSB7XG5cdFx0XHRcdGNhc2UgJ3N1Ym1pdCc6IHtcblx0XHRcdFx0XHRjb25zdCBzdWJtaXRQcmVmaXggPSBoYXNHdWlkZSA/IGAke2NvbG9yLmdyYXkoU19CQVIpfSAgYCA6ICcnO1xuXHRcdFx0XHRcdGNvbnN0IHNlbGVjdGVkT3B0aW9uID1cblx0XHRcdFx0XHRcdHRoaXMub3B0aW9ucy5maW5kKChvcHQpID0+IG9wdC52YWx1ZSA9PT0gdGhpcy52YWx1ZSkgPz8gb3B0cy5vcHRpb25zWzBdO1xuXHRcdFx0XHRcdGNvbnN0IHdyYXBwZWQgPSB3cmFwVGV4dFdpdGhQcmVmaXgoXG5cdFx0XHRcdFx0XHRvcHRzLm91dHB1dCxcblx0XHRcdFx0XHRcdG9wdChzZWxlY3RlZE9wdGlvbiwgJ3NlbGVjdGVkJyksXG5cdFx0XHRcdFx0XHRzdWJtaXRQcmVmaXhcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdHJldHVybiBgJHt0aXRsZX0ke3dyYXBwZWR9YDtcblx0XHRcdFx0fVxuXHRcdFx0XHRjYXNlICdjYW5jZWwnOiB7XG5cdFx0XHRcdFx0Y29uc3QgY2FuY2VsUHJlZml4ID0gaGFzR3VpZGUgPyBgJHtjb2xvci5ncmF5KFNfQkFSKX0gIGAgOiAnJztcblx0XHRcdFx0XHRjb25zdCB3cmFwcGVkID0gd3JhcFRleHRXaXRoUHJlZml4KFxuXHRcdFx0XHRcdFx0b3B0cy5vdXRwdXQsXG5cdFx0XHRcdFx0XHRvcHQodGhpcy5vcHRpb25zWzBdLCAnY2FuY2VsbGVkJyksXG5cdFx0XHRcdFx0XHRjYW5jZWxQcmVmaXhcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdHJldHVybiBgJHt0aXRsZX0ke3dyYXBwZWR9JHtoYXNHdWlkZSA/IGBcXG4ke2NvbG9yLmdyYXkoU19CQVIpfWAgOiAnJ31gO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGRlZmF1bHQ6IHtcblx0XHRcdFx0XHRjb25zdCBkZWZhdWx0UHJlZml4ID0gaGFzR3VpZGUgPyBgJHtjb2xvci5jeWFuKFNfQkFSKX0gIGAgOiAnJztcblx0XHRcdFx0XHRjb25zdCBkZWZhdWx0UHJlZml4RW5kID0gaGFzR3VpZGUgPyBjb2xvci5jeWFuKFNfQkFSX0VORCkgOiAnJztcblx0XHRcdFx0XHRjb25zdCB3cmFwcGVkID0gdGhpcy5vcHRpb25zXG5cdFx0XHRcdFx0XHQubWFwKChvcHRpb24sIGkpID0+XG5cdFx0XHRcdFx0XHRcdHdyYXBUZXh0V2l0aFByZWZpeChcblx0XHRcdFx0XHRcdFx0XHRvcHRzLm91dHB1dCxcblx0XHRcdFx0XHRcdFx0XHRvcHQob3B0aW9uLCBpID09PSB0aGlzLmN1cnNvciA/ICdhY3RpdmUnIDogJ2luYWN0aXZlJyksXG5cdFx0XHRcdFx0XHRcdFx0ZGVmYXVsdFByZWZpeFxuXHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHQuam9pbignXFxuJyk7XG5cdFx0XHRcdFx0cmV0dXJuIGAke3RpdGxlfSR7d3JhcHBlZH1cXG4ke2RlZmF1bHRQcmVmaXhFbmR9XFxuYDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cdH0pLnByb21wdCgpIGFzIFByb21pc2U8VmFsdWUgfCBzeW1ib2w+O1xufTtcbiIsICJpbXBvcnQgeyBzdHJpcFZUQ29udHJvbENoYXJhY3RlcnMgYXMgc3RyaXAgfSBmcm9tICdub2RlOnV0aWwnO1xuaW1wb3J0IGNvbG9yIGZyb20gJ3BpY29jb2xvcnMnO1xuaW1wb3J0IHsgU19CQVIsIFNfRVJST1IsIFNfSU5GTywgU19TVEVQX1NVQk1JVCwgU19TVUNDRVNTLCBTX1dBUk4gfSBmcm9tICcuL2NvbW1vbi5qcyc7XG5pbXBvcnQgdHlwZSB7IExvZ01lc3NhZ2VPcHRpb25zIH0gZnJvbSAnLi9sb2cuanMnO1xuXG5jb25zdCBwcmVmaXggPSBgJHtjb2xvci5ncmF5KFNfQkFSKX0gIGA7XG5cbi8vIFRPRE8gKDQzMDgxaik6IHRoaXMgY3VycmVudGx5IGRvZXNuJ3Qgc3VwcG9ydCBjdXN0b20gYG91dHB1dGAgd3JpdGFibGVzXG4vLyBiZWNhdXNlIHdlIHJlbHkgb24gYGNvbHVtbnNgIGV4aXN0aW5nIChpLmUuIGBwcm9jZXNzLnN0ZG91dC5jb2x1bW5zKS5cbi8vXG4vLyBJZiB3ZSB3YW50IHRvIHN1cHBvcnQgYG91dHB1dGAgYmVpbmcgcGFzc2VkIGluLCB3ZSB3aWxsIG5lZWQgdG8gdXNlXG4vLyBhIGNvbmRpdGlvbiBsaWtlIGBpZiAob3V0cHV0IGluc2FuY2UgV3JpdGFibGUpYCB0byBjaGVjayBpZiBpdCBoYXMgY29sdW1uc1xuZXhwb3J0IGNvbnN0IHN0cmVhbSA9IHtcblx0bWVzc2FnZTogYXN5bmMgKFxuXHRcdGl0ZXJhYmxlOiBJdGVyYWJsZTxzdHJpbmc+IHwgQXN5bmNJdGVyYWJsZTxzdHJpbmc+LFxuXHRcdHsgc3ltYm9sID0gY29sb3IuZ3JheShTX0JBUikgfTogTG9nTWVzc2FnZU9wdGlvbnMgPSB7fVxuXHQpID0+IHtcblx0XHRwcm9jZXNzLnN0ZG91dC53cml0ZShgJHtjb2xvci5ncmF5KFNfQkFSKX1cXG4ke3N5bWJvbH0gIGApO1xuXHRcdGxldCBsaW5lV2lkdGggPSAzO1xuXHRcdGZvciBhd2FpdCAobGV0IGNodW5rIG9mIGl0ZXJhYmxlKSB7XG5cdFx0XHRjaHVuayA9IGNodW5rLnJlcGxhY2UoL1xcbi9nLCBgXFxuJHtwcmVmaXh9YCk7XG5cdFx0XHRpZiAoY2h1bmsuaW5jbHVkZXMoJ1xcbicpKSB7XG5cdFx0XHRcdGxpbmVXaWR0aCA9IDMgKyBzdHJpcChjaHVuay5zbGljZShjaHVuay5sYXN0SW5kZXhPZignXFxuJykpKS5sZW5ndGg7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBjaHVua0xlbiA9IHN0cmlwKGNodW5rKS5sZW5ndGg7XG5cdFx0XHRpZiAobGluZVdpZHRoICsgY2h1bmtMZW4gPCBwcm9jZXNzLnN0ZG91dC5jb2x1bW5zKSB7XG5cdFx0XHRcdGxpbmVXaWR0aCArPSBjaHVua0xlbjtcblx0XHRcdFx0cHJvY2Vzcy5zdGRvdXQud3JpdGUoY2h1bmspO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cHJvY2Vzcy5zdGRvdXQud3JpdGUoYFxcbiR7cHJlZml4fSR7Y2h1bmsudHJpbVN0YXJ0KCl9YCk7XG5cdFx0XHRcdGxpbmVXaWR0aCA9IDMgKyBzdHJpcChjaHVuay50cmltU3RhcnQoKSkubGVuZ3RoO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRwcm9jZXNzLnN0ZG91dC53cml0ZSgnXFxuJyk7XG5cdH0sXG5cdGluZm86IChpdGVyYWJsZTogSXRlcmFibGU8c3RyaW5nPiB8IEFzeW5jSXRlcmFibGU8c3RyaW5nPikgPT4ge1xuXHRcdHJldHVybiBzdHJlYW0ubWVzc2FnZShpdGVyYWJsZSwgeyBzeW1ib2w6IGNvbG9yLmJsdWUoU19JTkZPKSB9KTtcblx0fSxcblx0c3VjY2VzczogKGl0ZXJhYmxlOiBJdGVyYWJsZTxzdHJpbmc+IHwgQXN5bmNJdGVyYWJsZTxzdHJpbmc+KSA9PiB7XG5cdFx0cmV0dXJuIHN0cmVhbS5tZXNzYWdlKGl0ZXJhYmxlLCB7IHN5bWJvbDogY29sb3IuZ3JlZW4oU19TVUNDRVNTKSB9KTtcblx0fSxcblx0c3RlcDogKGl0ZXJhYmxlOiBJdGVyYWJsZTxzdHJpbmc+IHwgQXN5bmNJdGVyYWJsZTxzdHJpbmc+KSA9PiB7XG5cdFx0cmV0dXJuIHN0cmVhbS5tZXNzYWdlKGl0ZXJhYmxlLCB7IHN5bWJvbDogY29sb3IuZ3JlZW4oU19TVEVQX1NVQk1JVCkgfSk7XG5cdH0sXG5cdHdhcm46IChpdGVyYWJsZTogSXRlcmFibGU8c3RyaW5nPiB8IEFzeW5jSXRlcmFibGU8c3RyaW5nPikgPT4ge1xuXHRcdHJldHVybiBzdHJlYW0ubWVzc2FnZShpdGVyYWJsZSwgeyBzeW1ib2w6IGNvbG9yLnllbGxvdyhTX1dBUk4pIH0pO1xuXHR9LFxuXHQvKiogYWxpYXMgZm9yIGBsb2cud2FybigpYC4gKi9cblx0d2FybmluZzogKGl0ZXJhYmxlOiBJdGVyYWJsZTxzdHJpbmc+IHwgQXN5bmNJdGVyYWJsZTxzdHJpbmc+KSA9PiB7XG5cdFx0cmV0dXJuIHN0cmVhbS53YXJuKGl0ZXJhYmxlKTtcblx0fSxcblx0ZXJyb3I6IChpdGVyYWJsZTogSXRlcmFibGU8c3RyaW5nPiB8IEFzeW5jSXRlcmFibGU8c3RyaW5nPikgPT4ge1xuXHRcdHJldHVybiBzdHJlYW0ubWVzc2FnZShpdGVyYWJsZSwgeyBzeW1ib2w6IGNvbG9yLnJlZChTX0VSUk9SKSB9KTtcblx0fSxcbn07XG4iLCAiaW1wb3J0IHR5cGUgeyBDb21tb25PcHRpb25zIH0gZnJvbSAnLi9jb21tb24uanMnO1xuaW1wb3J0IHsgc3Bpbm5lciB9IGZyb20gJy4vc3Bpbm5lci5qcyc7XG5cbmV4cG9ydCB0eXBlIFRhc2sgPSB7XG5cdC8qKlxuXHQgKiBUYXNrIHRpdGxlXG5cdCAqL1xuXHR0aXRsZTogc3RyaW5nO1xuXHQvKipcblx0ICogVGFzayBmdW5jdGlvblxuXHQgKi9cblx0dGFzazogKG1lc3NhZ2U6IChzdHJpbmc6IHN0cmluZykgPT4gdm9pZCkgPT4gc3RyaW5nIHwgUHJvbWlzZTxzdHJpbmc+IHwgdm9pZCB8IFByb21pc2U8dm9pZD47XG5cblx0LyoqXG5cdCAqIElmIGVuYWJsZWQgPT09IGZhbHNlIHRoZSB0YXNrIHdpbGwgYmUgc2tpcHBlZFxuXHQgKi9cblx0ZW5hYmxlZD86IGJvb2xlYW47XG59O1xuXG4vKipcbiAqIERlZmluZSBhIGdyb3VwIG9mIHRhc2tzIHRvIGJlIGV4ZWN1dGVkXG4gKi9cbmV4cG9ydCBjb25zdCB0YXNrcyA9IGFzeW5jICh0YXNrczogVGFza1tdLCBvcHRzPzogQ29tbW9uT3B0aW9ucykgPT4ge1xuXHRmb3IgKGNvbnN0IHRhc2sgb2YgdGFza3MpIHtcblx0XHRpZiAodGFzay5lbmFibGVkID09PSBmYWxzZSkgY29udGludWU7XG5cblx0XHRjb25zdCBzID0gc3Bpbm5lcihvcHRzKTtcblx0XHRzLnN0YXJ0KHRhc2sudGl0bGUpO1xuXHRcdGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRhc2sudGFzayhzLm1lc3NhZ2UpO1xuXHRcdHMuc3RvcChyZXN1bHQgfHwgdGFzay50aXRsZSk7XG5cdH1cbn07XG4iLCAiaW1wb3J0IHR5cGUgeyBXcml0YWJsZSB9IGZyb20gJ25vZGU6c3RyZWFtJztcbmltcG9ydCB7IGdldENvbHVtbnMgfSBmcm9tICdAY2xhY2svY29yZSc7XG5pbXBvcnQgY29sb3IgZnJvbSAncGljb2NvbG9ycyc7XG5pbXBvcnQgeyBlcmFzZSB9IGZyb20gJ3Npc3RlcmFuc2knO1xuaW1wb3J0IHtcblx0dHlwZSBDb21tb25PcHRpb25zLFxuXHRpc0NJIGFzIGlzQ0lGbixcblx0aXNUVFkgYXMgaXNUVFlGbixcblx0U19CQVIsXG5cdFNfU1RFUF9TVUJNSVQsXG59IGZyb20gJy4vY29tbW9uLmpzJztcbmltcG9ydCB7IGxvZyB9IGZyb20gJy4vbG9nLmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBUYXNrTG9nT3B0aW9ucyBleHRlbmRzIENvbW1vbk9wdGlvbnMge1xuXHR0aXRsZTogc3RyaW5nO1xuXHRsaW1pdD86IG51bWJlcjtcblx0c3BhY2luZz86IG51bWJlcjtcblx0cmV0YWluTG9nPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUYXNrTG9nTWVzc2FnZU9wdGlvbnMge1xuXHRyYXc/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRhc2tMb2dDb21wbGV0aW9uT3B0aW9ucyB7XG5cdHNob3dMb2c/OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgQnVmZmVyRW50cnkge1xuXHRoZWFkZXI/OiBzdHJpbmc7XG5cdHZhbHVlOiBzdHJpbmc7XG5cdGZ1bGw6IHN0cmluZztcblx0cmVzdWx0Pzoge1xuXHRcdHN0YXR1czogJ3N1Y2Nlc3MnIHwgJ2Vycm9yJztcblx0XHRtZXNzYWdlOiBzdHJpbmc7XG5cdH07XG59XG5cbmNvbnN0IHN0cmlwRGVzdHJ1Y3RpdmVBTlNJID0gKGlucHV0OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuXHQvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vQ29udHJvbENoYXJhY3RlcnNJblJlZ2V4OiBpbnRlbnRpb25hbFxuXHRyZXR1cm4gaW5wdXQucmVwbGFjZSgvXFx4MWJcXFsoPzpcXGQrOykqXFxkKltBQkNERUZHSGZKS1NUc3VdfFxceDFiXFxbKHN8dSkvZywgJycpO1xufTtcblxuLyoqXG4gKiBSZW5kZXJzIGEgbG9nIHdoaWNoIGNsZWFycyBvbiBzdWNjZXNzIGFuZCByZW1haW5zIG9uIGZhaWx1cmVcbiAqL1xuZXhwb3J0IGNvbnN0IHRhc2tMb2cgPSAob3B0czogVGFza0xvZ09wdGlvbnMpID0+IHtcblx0Y29uc3Qgb3V0cHV0OiBXcml0YWJsZSA9IG9wdHMub3V0cHV0ID8/IHByb2Nlc3Muc3Rkb3V0O1xuXHRjb25zdCBjb2x1bW5zID0gZ2V0Q29sdW1ucyhvdXRwdXQpO1xuXHRjb25zdCBzZWNvbmRhcnlTeW1ib2wgPSBjb2xvci5ncmF5KFNfQkFSKTtcblx0Y29uc3Qgc3BhY2luZyA9IG9wdHMuc3BhY2luZyA/PyAxO1xuXHRjb25zdCBiYXJTaXplID0gMztcblx0Y29uc3QgcmV0YWluTG9nID0gb3B0cy5yZXRhaW5Mb2cgPT09IHRydWU7XG5cdGNvbnN0IGlzVFRZID0gIWlzQ0lGbigpICYmIGlzVFRZRm4ob3V0cHV0KTtcblxuXHRvdXRwdXQud3JpdGUoYCR7c2Vjb25kYXJ5U3ltYm9sfVxcbmApO1xuXHRvdXRwdXQud3JpdGUoYCR7Y29sb3IuZ3JlZW4oU19TVEVQX1NVQk1JVCl9ICAke29wdHMudGl0bGV9XFxuYCk7XG5cdGZvciAobGV0IGkgPSAwOyBpIDwgc3BhY2luZzsgaSsrKSB7XG5cdFx0b3V0cHV0LndyaXRlKGAke3NlY29uZGFyeVN5bWJvbH1cXG5gKTtcblx0fVxuXG5cdGNvbnN0IGJ1ZmZlcnM6IEJ1ZmZlckVudHJ5W10gPSBbXG5cdFx0e1xuXHRcdFx0dmFsdWU6ICcnLFxuXHRcdFx0ZnVsbDogJycsXG5cdFx0fSxcblx0XTtcblx0bGV0IGxhc3RNZXNzYWdlV2FzUmF3ID0gZmFsc2U7XG5cblx0Y29uc3QgY2xlYXIgPSAoY2xlYXJUaXRsZTogYm9vbGVhbik6IHZvaWQgPT4ge1xuXHRcdGlmIChidWZmZXJzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGxldCBsaW5lcyA9IDA7XG5cblx0XHRpZiAoY2xlYXJUaXRsZSkge1xuXHRcdFx0bGluZXMgKz0gc3BhY2luZyArIDI7XG5cdFx0fVxuXG5cdFx0Zm9yIChjb25zdCBidWZmZXIgb2YgYnVmZmVycykge1xuXHRcdFx0Y29uc3QgeyB2YWx1ZSwgcmVzdWx0IH0gPSBidWZmZXI7XG5cdFx0XHRsZXQgdGV4dCA9IHJlc3VsdD8ubWVzc2FnZSA/PyB2YWx1ZTtcblxuXHRcdFx0aWYgKHRleHQubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAocmVzdWx0ID09PSB1bmRlZmluZWQgJiYgYnVmZmVyLmhlYWRlciAhPT0gdW5kZWZpbmVkICYmIGJ1ZmZlci5oZWFkZXIgIT09ICcnKSB7XG5cdFx0XHRcdHRleHQgKz0gYFxcbiR7YnVmZmVyLmhlYWRlcn1gO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBidWZmZXJIZWlnaHQgPSB0ZXh0LnNwbGl0KCdcXG4nKS5yZWR1Y2UoKGNvdW50LCBsaW5lKSA9PiB7XG5cdFx0XHRcdGlmIChsaW5lID09PSAnJykge1xuXHRcdFx0XHRcdHJldHVybiBjb3VudCArIDE7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGNvdW50ICsgTWF0aC5jZWlsKChsaW5lLmxlbmd0aCArIGJhclNpemUpIC8gY29sdW1ucyk7XG5cdFx0XHR9LCAwKTtcblxuXHRcdFx0bGluZXMgKz0gYnVmZmVySGVpZ2h0O1xuXHRcdH1cblxuXHRcdGlmIChsaW5lcyA+IDApIHtcblx0XHRcdGxpbmVzICs9IDE7XG5cdFx0XHRvdXRwdXQud3JpdGUoZXJhc2UubGluZXMobGluZXMpKTtcblx0XHR9XG5cdH07XG5cdGNvbnN0IHByaW50QnVmZmVyID0gKGJ1ZmZlcjogQnVmZmVyRW50cnksIG1lc3NhZ2VTcGFjaW5nPzogbnVtYmVyLCBmdWxsPzogYm9vbGVhbik6IHZvaWQgPT4ge1xuXHRcdGNvbnN0IG1lc3NhZ2VzID0gZnVsbCA/IGAke2J1ZmZlci5mdWxsfVxcbiR7YnVmZmVyLnZhbHVlfWAgOiBidWZmZXIudmFsdWU7XG5cdFx0aWYgKGJ1ZmZlci5oZWFkZXIgIT09IHVuZGVmaW5lZCAmJiBidWZmZXIuaGVhZGVyICE9PSAnJykge1xuXHRcdFx0bG9nLm1lc3NhZ2UoYnVmZmVyLmhlYWRlci5zcGxpdCgnXFxuJykubWFwKGNvbG9yLmJvbGQpLCB7XG5cdFx0XHRcdG91dHB1dCxcblx0XHRcdFx0c2Vjb25kYXJ5U3ltYm9sLFxuXHRcdFx0XHRzeW1ib2w6IHNlY29uZGFyeVN5bWJvbCxcblx0XHRcdFx0c3BhY2luZzogMCxcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRsb2cubWVzc2FnZShtZXNzYWdlcy5zcGxpdCgnXFxuJykubWFwKGNvbG9yLmRpbSksIHtcblx0XHRcdG91dHB1dCxcblx0XHRcdHNlY29uZGFyeVN5bWJvbCxcblx0XHRcdHN5bWJvbDogc2Vjb25kYXJ5U3ltYm9sLFxuXHRcdFx0c3BhY2luZzogbWVzc2FnZVNwYWNpbmcgPz8gc3BhY2luZyxcblx0XHR9KTtcblx0fTtcblx0Y29uc3QgcmVuZGVyQnVmZmVyID0gKCk6IHZvaWQgPT4ge1xuXHRcdGZvciAoY29uc3QgYnVmZmVyIG9mIGJ1ZmZlcnMpIHtcblx0XHRcdGNvbnN0IHsgaGVhZGVyLCB2YWx1ZSwgZnVsbCB9ID0gYnVmZmVyO1xuXHRcdFx0aWYgKChoZWFkZXIgPT09IHVuZGVmaW5lZCB8fCBoZWFkZXIubGVuZ3RoID09PSAwKSAmJiB2YWx1ZS5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cdFx0XHRwcmludEJ1ZmZlcihidWZmZXIsIHVuZGVmaW5lZCwgcmV0YWluTG9nID09PSB0cnVlICYmIGZ1bGwubGVuZ3RoID4gMCk7XG5cdFx0fVxuXHR9O1xuXHRjb25zdCBtZXNzYWdlID0gKGJ1ZmZlcjogQnVmZmVyRW50cnksIG1zZzogc3RyaW5nLCBtb3B0cz86IFRhc2tMb2dNZXNzYWdlT3B0aW9ucykgPT4ge1xuXHRcdGNsZWFyKGZhbHNlKTtcblx0XHRpZiAoKG1vcHRzPy5yYXcgIT09IHRydWUgfHwgIWxhc3RNZXNzYWdlV2FzUmF3KSAmJiBidWZmZXIudmFsdWUgIT09ICcnKSB7XG5cdFx0XHRidWZmZXIudmFsdWUgKz0gJ1xcbic7XG5cdFx0fVxuXHRcdGJ1ZmZlci52YWx1ZSArPSBzdHJpcERlc3RydWN0aXZlQU5TSShtc2cpO1xuXHRcdGxhc3RNZXNzYWdlV2FzUmF3ID0gbW9wdHM/LnJhdyA9PT0gdHJ1ZTtcblx0XHRpZiAob3B0cy5saW1pdCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjb25zdCBsaW5lcyA9IGJ1ZmZlci52YWx1ZS5zcGxpdCgnXFxuJyk7XG5cdFx0XHRjb25zdCBsaW5lc1RvUmVtb3ZlID0gbGluZXMubGVuZ3RoIC0gb3B0cy5saW1pdDtcblx0XHRcdGlmIChsaW5lc1RvUmVtb3ZlID4gMCkge1xuXHRcdFx0XHRjb25zdCByZW1vdmVkTGluZXMgPSBsaW5lcy5zcGxpY2UoMCwgbGluZXNUb1JlbW92ZSk7XG5cdFx0XHRcdGlmIChyZXRhaW5Mb2cpIHtcblx0XHRcdFx0XHRidWZmZXIuZnVsbCArPSAoYnVmZmVyLmZ1bGwgPT09ICcnID8gJycgOiAnXFxuJykgKyByZW1vdmVkTGluZXMuam9pbignXFxuJyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGJ1ZmZlci52YWx1ZSA9IGxpbmVzLmpvaW4oJ1xcbicpO1xuXHRcdH1cblx0XHRpZiAoaXNUVFkpIHtcblx0XHRcdHByaW50QnVmZmVycygpO1xuXHRcdH1cblx0fTtcblx0Y29uc3QgcHJpbnRCdWZmZXJzID0gKCk6IHZvaWQgPT4ge1xuXHRcdGZvciAoY29uc3QgYnVmZmVyIG9mIGJ1ZmZlcnMpIHtcblx0XHRcdGlmIChidWZmZXIucmVzdWx0KSB7XG5cdFx0XHRcdGlmIChidWZmZXIucmVzdWx0LnN0YXR1cyA9PT0gJ2Vycm9yJykge1xuXHRcdFx0XHRcdGxvZy5lcnJvcihidWZmZXIucmVzdWx0Lm1lc3NhZ2UsIHsgb3V0cHV0LCBzZWNvbmRhcnlTeW1ib2wsIHNwYWNpbmc6IDAgfSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0bG9nLnN1Y2Nlc3MoYnVmZmVyLnJlc3VsdC5tZXNzYWdlLCB7IG91dHB1dCwgc2Vjb25kYXJ5U3ltYm9sLCBzcGFjaW5nOiAwIH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKGJ1ZmZlci52YWx1ZSAhPT0gJycpIHtcblx0XHRcdFx0cHJpbnRCdWZmZXIoYnVmZmVyLCAwKTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cdGNvbnN0IGNvbXBsZXRlQnVmZmVyID0gKGJ1ZmZlcjogQnVmZmVyRW50cnksIHJlc3VsdDogQnVmZmVyRW50cnlbJ3Jlc3VsdCddKTogdm9pZCA9PiB7XG5cdFx0Y2xlYXIoZmFsc2UpO1xuXG5cdFx0YnVmZmVyLnJlc3VsdCA9IHJlc3VsdDtcblxuXHRcdGlmIChpc1RUWSkge1xuXHRcdFx0cHJpbnRCdWZmZXJzKCk7XG5cdFx0fVxuXHR9O1xuXG5cdHJldHVybiB7XG5cdFx0bWVzc2FnZShtc2c6IHN0cmluZywgbW9wdHM/OiBUYXNrTG9nTWVzc2FnZU9wdGlvbnMpIHtcblx0XHRcdG1lc3NhZ2UoYnVmZmVyc1swXSwgbXNnLCBtb3B0cyk7XG5cdFx0fSxcblx0XHRncm91cChuYW1lOiBzdHJpbmcpIHtcblx0XHRcdGNvbnN0IGJ1ZmZlcjogQnVmZmVyRW50cnkgPSB7XG5cdFx0XHRcdGhlYWRlcjogbmFtZSxcblx0XHRcdFx0dmFsdWU6ICcnLFxuXHRcdFx0XHRmdWxsOiAnJyxcblx0XHRcdH07XG5cdFx0XHRidWZmZXJzLnB1c2goYnVmZmVyKTtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdG1lc3NhZ2UobXNnOiBzdHJpbmcsIG1vcHRzPzogVGFza0xvZ01lc3NhZ2VPcHRpb25zKSB7XG5cdFx0XHRcdFx0bWVzc2FnZShidWZmZXIsIG1zZywgbW9wdHMpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRlcnJvcihtZXNzYWdlOiBzdHJpbmcpIHtcblx0XHRcdFx0XHRjb21wbGV0ZUJ1ZmZlcihidWZmZXIsIHtcblx0XHRcdFx0XHRcdHN0YXR1czogJ2Vycm9yJyxcblx0XHRcdFx0XHRcdG1lc3NhZ2UsXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHN1Y2Nlc3MobWVzc2FnZTogc3RyaW5nKSB7XG5cdFx0XHRcdFx0Y29tcGxldGVCdWZmZXIoYnVmZmVyLCB7XG5cdFx0XHRcdFx0XHRzdGF0dXM6ICdzdWNjZXNzJyxcblx0XHRcdFx0XHRcdG1lc3NhZ2UsXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0sXG5cdFx0XHR9O1xuXHRcdH0sXG5cdFx0ZXJyb3IobWVzc2FnZTogc3RyaW5nLCBvcHRzPzogVGFza0xvZ0NvbXBsZXRpb25PcHRpb25zKTogdm9pZCB7XG5cdFx0XHRjbGVhcih0cnVlKTtcblx0XHRcdGxvZy5lcnJvcihtZXNzYWdlLCB7IG91dHB1dCwgc2Vjb25kYXJ5U3ltYm9sLCBzcGFjaW5nOiAxIH0pO1xuXHRcdFx0aWYgKG9wdHM/LnNob3dMb2cgIT09IGZhbHNlKSB7XG5cdFx0XHRcdHJlbmRlckJ1ZmZlcigpO1xuXHRcdFx0fVxuXHRcdFx0Ly8gY2xlYXIgYnVmZmVyIHNpbmNlIGVycm9yIGlzIGFuIGVuZCBzdGF0ZVxuXHRcdFx0YnVmZmVycy5zcGxpY2UoMSwgYnVmZmVycy5sZW5ndGggLSAxKTtcblx0XHRcdGJ1ZmZlcnNbMF0udmFsdWUgPSAnJztcblx0XHRcdGJ1ZmZlcnNbMF0uZnVsbCA9ICcnO1xuXHRcdH0sXG5cdFx0c3VjY2VzcyhtZXNzYWdlOiBzdHJpbmcsIG9wdHM/OiBUYXNrTG9nQ29tcGxldGlvbk9wdGlvbnMpOiB2b2lkIHtcblx0XHRcdGNsZWFyKHRydWUpO1xuXHRcdFx0bG9nLnN1Y2Nlc3MobWVzc2FnZSwgeyBvdXRwdXQsIHNlY29uZGFyeVN5bWJvbCwgc3BhY2luZzogMSB9KTtcblx0XHRcdGlmIChvcHRzPy5zaG93TG9nID09PSB0cnVlKSB7XG5cdFx0XHRcdHJlbmRlckJ1ZmZlcigpO1xuXHRcdFx0fVxuXHRcdFx0Ly8gY2xlYXIgYnVmZmVyIHNpbmNlIHN1Y2Nlc3MgaXMgYW4gZW5kIHN0YXRlXG5cdFx0XHRidWZmZXJzLnNwbGljZSgxLCBidWZmZXJzLmxlbmd0aCAtIDEpO1xuXHRcdFx0YnVmZmVyc1swXS52YWx1ZSA9ICcnO1xuXHRcdFx0YnVmZmVyc1swXS5mdWxsID0gJyc7XG5cdFx0fSxcblx0fTtcbn07XG4iLCAiaW1wb3J0IHsgc2V0dGluZ3MsIFRleHRQcm9tcHQgfSBmcm9tICdAY2xhY2svY29yZSc7XG5pbXBvcnQgY29sb3IgZnJvbSAncGljb2NvbG9ycyc7XG5pbXBvcnQgeyB0eXBlIENvbW1vbk9wdGlvbnMsIFNfQkFSLCBTX0JBUl9FTkQsIHN5bWJvbCB9IGZyb20gJy4vY29tbW9uLmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBUZXh0T3B0aW9ucyBleHRlbmRzIENvbW1vbk9wdGlvbnMge1xuXHRtZXNzYWdlOiBzdHJpbmc7XG5cdHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuXHRkZWZhdWx0VmFsdWU/OiBzdHJpbmc7XG5cdGluaXRpYWxWYWx1ZT86IHN0cmluZztcblx0dmFsaWRhdGU/OiAodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkgPT4gc3RyaW5nIHwgRXJyb3IgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBjb25zdCB0ZXh0ID0gKG9wdHM6IFRleHRPcHRpb25zKSA9PiB7XG5cdHJldHVybiBuZXcgVGV4dFByb21wdCh7XG5cdFx0dmFsaWRhdGU6IG9wdHMudmFsaWRhdGUsXG5cdFx0cGxhY2Vob2xkZXI6IG9wdHMucGxhY2Vob2xkZXIsXG5cdFx0ZGVmYXVsdFZhbHVlOiBvcHRzLmRlZmF1bHRWYWx1ZSxcblx0XHRpbml0aWFsVmFsdWU6IG9wdHMuaW5pdGlhbFZhbHVlLFxuXHRcdG91dHB1dDogb3B0cy5vdXRwdXQsXG5cdFx0c2lnbmFsOiBvcHRzLnNpZ25hbCxcblx0XHRpbnB1dDogb3B0cy5pbnB1dCxcblx0XHRyZW5kZXIoKSB7XG5cdFx0XHRjb25zdCBoYXNHdWlkZSA9IG9wdHM/LndpdGhHdWlkZSA/PyBzZXR0aW5ncy53aXRoR3VpZGU7XG5cdFx0XHRjb25zdCB0aXRsZVByZWZpeCA9IGAke2hhc0d1aWRlID8gYCR7Y29sb3IuZ3JheShTX0JBUil9XFxuYCA6ICcnfSR7c3ltYm9sKHRoaXMuc3RhdGUpfSAgYDtcblx0XHRcdGNvbnN0IHRpdGxlID0gYCR7dGl0bGVQcmVmaXh9JHtvcHRzLm1lc3NhZ2V9XFxuYDtcblx0XHRcdGNvbnN0IHBsYWNlaG9sZGVyID0gb3B0cy5wbGFjZWhvbGRlclxuXHRcdFx0XHQ/IGNvbG9yLmludmVyc2Uob3B0cy5wbGFjZWhvbGRlclswXSkgKyBjb2xvci5kaW0ob3B0cy5wbGFjZWhvbGRlci5zbGljZSgxKSlcblx0XHRcdFx0OiBjb2xvci5pbnZlcnNlKGNvbG9yLmhpZGRlbignXycpKTtcblx0XHRcdGNvbnN0IHVzZXJJbnB1dCA9ICF0aGlzLnVzZXJJbnB1dCA/IHBsYWNlaG9sZGVyIDogdGhpcy51c2VySW5wdXRXaXRoQ3Vyc29yO1xuXHRcdFx0Y29uc3QgdmFsdWUgPSB0aGlzLnZhbHVlID8/ICcnO1xuXG5cdFx0XHRzd2l0Y2ggKHRoaXMuc3RhdGUpIHtcblx0XHRcdFx0Y2FzZSAnZXJyb3InOiB7XG5cdFx0XHRcdFx0Y29uc3QgZXJyb3JUZXh0ID0gdGhpcy5lcnJvciA/IGAgICR7Y29sb3IueWVsbG93KHRoaXMuZXJyb3IpfWAgOiAnJztcblx0XHRcdFx0XHRjb25zdCBlcnJvclByZWZpeCA9IGhhc0d1aWRlID8gYCR7Y29sb3IueWVsbG93KFNfQkFSKX0gIGAgOiAnJztcblx0XHRcdFx0XHRjb25zdCBlcnJvclByZWZpeEVuZCA9IGhhc0d1aWRlID8gY29sb3IueWVsbG93KFNfQkFSX0VORCkgOiAnJztcblx0XHRcdFx0XHRyZXR1cm4gYCR7dGl0bGUudHJpbSgpfVxcbiR7ZXJyb3JQcmVmaXh9JHt1c2VySW5wdXR9XFxuJHtlcnJvclByZWZpeEVuZH0ke2Vycm9yVGV4dH1cXG5gO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNhc2UgJ3N1Ym1pdCc6IHtcblx0XHRcdFx0XHRjb25zdCB2YWx1ZVRleHQgPSB2YWx1ZSA/IGAgICR7Y29sb3IuZGltKHZhbHVlKX1gIDogJyc7XG5cdFx0XHRcdFx0Y29uc3Qgc3VibWl0UHJlZml4ID0gaGFzR3VpZGUgPyBjb2xvci5ncmF5KFNfQkFSKSA6ICcnO1xuXHRcdFx0XHRcdHJldHVybiBgJHt0aXRsZX0ke3N1Ym1pdFByZWZpeH0ke3ZhbHVlVGV4dH1gO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNhc2UgJ2NhbmNlbCc6IHtcblx0XHRcdFx0XHRjb25zdCB2YWx1ZVRleHQgPSB2YWx1ZSA/IGAgICR7Y29sb3Iuc3RyaWtldGhyb3VnaChjb2xvci5kaW0odmFsdWUpKX1gIDogJyc7XG5cdFx0XHRcdFx0Y29uc3QgY2FuY2VsUHJlZml4ID0gaGFzR3VpZGUgPyBjb2xvci5ncmF5KFNfQkFSKSA6ICcnO1xuXHRcdFx0XHRcdHJldHVybiBgJHt0aXRsZX0ke2NhbmNlbFByZWZpeH0ke3ZhbHVlVGV4dH0ke3ZhbHVlLnRyaW0oKSA/IGBcXG4ke2NhbmNlbFByZWZpeH1gIDogJyd9YDtcblx0XHRcdFx0fVxuXHRcdFx0XHRkZWZhdWx0OiB7XG5cdFx0XHRcdFx0Y29uc3QgZGVmYXVsdFByZWZpeCA9IGhhc0d1aWRlID8gYCR7Y29sb3IuY3lhbihTX0JBUil9ICBgIDogJyc7XG5cdFx0XHRcdFx0Y29uc3QgZGVmYXVsdFByZWZpeEVuZCA9IGhhc0d1aWRlID8gY29sb3IuY3lhbihTX0JBUl9FTkQpIDogJyc7XG5cdFx0XHRcdFx0cmV0dXJuIGAke3RpdGxlfSR7ZGVmYXVsdFByZWZpeH0ke3VzZXJJbnB1dH1cXG4ke2RlZmF1bHRQcmVmaXhFbmR9XFxuYDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cdH0pLnByb21wdCgpIGFzIFByb21pc2U8c3RyaW5nIHwgc3ltYm9sPjtcbn07XG4iLCAiIyEvdXNyL2Jpbi9lbnYgbm9kZVxyXG5pbXBvcnQgZnMgZnJvbSAnZnMnO1xyXG5pbXBvcnQgb3MgZnJvbSAnb3MnO1xyXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcclxuaW1wb3J0IHsgc3Bhd24sIGV4ZWNTeW5jIH0gZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XHJcbmltcG9ydCBjb2xvciBmcm9tICdwaWNvY29sb3JzJztcclxuaW1wb3J0IHsgYm9vdHN0cmFwTWNwUmVnaXN0cmF0aW9uIH0gZnJvbSAnQDBjdHgvbWNwL2Rpc3QvYm9vdHN0cmFwJztcclxuaW1wb3J0IHsgc2VuZFRvRGFlbW9uIH0gZnJvbSAnQDBjdHgvbWNwL2Rpc3QvY2xpZW50JztcclxuaW1wb3J0IHsgbGlzdENvbmZpZywgZ2V0Q29uZmlnVmFsdWUsIHNldENvbmZpZ1ZhbHVlLCBpc1ZhbGlkQ29uZmlnS2V5LCBnZXRDb25maWdQYXRoIH0gZnJvbSAnQDBjdHgvY29yZSc7XHJcbmltcG9ydCB0eXBlIHsgQXBwQ29uZmlnIH0gZnJvbSAnQDBjdHgvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgICBpbnN0YWxsU2VydmljZSBhcyBpbnN0YWxsU2VydmljZVdpbmRvd3MsXHJcbiAgICBlbmFibGVTZXJ2aWNlIGFzIGVuYWJsZVNlcnZpY2VXaW5kb3dzLFxyXG4gICAgZGlzYWJsZVNlcnZpY2UgYXMgZGlzYWJsZVNlcnZpY2VXaW5kb3dzLFxyXG4gICAgdW5pbnN0YWxsU2VydmljZSBhcyB1bmluc3RhbGxTZXJ2aWNlV2luZG93cyxcclxuICAgIHN0YXR1c1NlcnZpY2UgYXMgc3RhdHVzU2VydmljZVdpbmRvd3MsXHJcbiAgICBzdGFydFNlcnZpY2UgYXMgc3RhcnRTZXJ2aWNlV2luZG93cyxcclxuICAgIHN0b3BTZXJ2aWNlIGFzIHN0b3BTZXJ2aWNlV2luZG93cyxcclxuICAgIHJlc3RhcnRTZXJ2aWNlIGFzIHJlc3RhcnRTZXJ2aWNlV2luZG93cyxcclxufSBmcm9tICcuL3NlcnZpY2Utd2luZG93cyc7XHJcbmltcG9ydCB7XHJcbiAgICBpbnN0YWxsU2VydmljZSBhcyBpbnN0YWxsU2VydmljZU1hYyxcclxuICAgIGVuYWJsZVNlcnZpY2UgYXMgZW5hYmxlU2VydmljZU1hYyxcclxuICAgIGRpc2FibGVTZXJ2aWNlIGFzIGRpc2FibGVTZXJ2aWNlTWFjLFxyXG4gICAgdW5pbnN0YWxsU2VydmljZSBhcyB1bmluc3RhbGxTZXJ2aWNlTWFjLFxyXG4gICAgc3RhdHVzU2VydmljZSBhcyBzdGF0dXNTZXJ2aWNlTWFjLFxyXG4gICAgc3RhcnRTZXJ2aWNlIGFzIHN0YXJ0U2VydmljZU1hYyxcclxuICAgIHN0b3BTZXJ2aWNlIGFzIHN0b3BTZXJ2aWNlTWFjLFxyXG4gICAgcmVzdGFydFNlcnZpY2UgYXMgcmVzdGFydFNlcnZpY2VNYWMsXHJcbn0gZnJvbSAnLi9zZXJ2aWNlLW1hY29zJztcclxuaW1wb3J0IHtcclxuICAgIGluc3RhbGxTZXJ2aWNlIGFzIGluc3RhbGxTZXJ2aWNlTGludXgsXHJcbiAgICBlbmFibGVTZXJ2aWNlIGFzIGVuYWJsZVNlcnZpY2VMaW51eCxcclxuICAgIGRpc2FibGVTZXJ2aWNlIGFzIGRpc2FibGVTZXJ2aWNlTGludXgsXHJcbiAgICB1bmluc3RhbGxTZXJ2aWNlIGFzIHVuaW5zdGFsbFNlcnZpY2VMaW51eCxcclxuICAgIHN0YXR1c1NlcnZpY2UgYXMgc3RhdHVzU2VydmljZUxpbnV4LFxyXG4gICAgc3RhcnRTZXJ2aWNlIGFzIHN0YXJ0U2VydmljZUxpbnV4LFxyXG4gICAgc3RvcFNlcnZpY2UgYXMgc3RvcFNlcnZpY2VMaW51eCxcclxuICAgIHJlc3RhcnRTZXJ2aWNlIGFzIHJlc3RhcnRTZXJ2aWNlTGludXgsXHJcbn0gZnJvbSAnLi9zZXJ2aWNlLWxpbnV4JztcclxuaW1wb3J0IHsgY29tbWFuZEF1dGhMb2dpbiwgY29tbWFuZEF1dGhMb2dvdXQsIGNvbW1hbmRBdXRoU3RhdHVzLCBjb21tYW5kQXV0aFJvdGF0ZSwgY2hlY2tUb2tlbkV4cGlyeVdhcm5pbmcsIHJlc29sdmVUb2tlbiB9IGZyb20gJy4vYXV0aCc7XHJcbmltcG9ydCB7IGdldENvbm5lY3RvclN0YXRlUGF0aCwgcmVhZENvbm5lY3RvclN0YXRlLCByZWdpc3RlckNvbm5lY3Rvciwgd3JpdGVDb25uZWN0b3JTdGF0ZSB9IGZyb20gJy4vY29ubmVjdG9yJztcclxuaW1wb3J0IHsgZmV0Y2hDb25uZWN0b3JDYXBhYmlsaXRpZXMsIHJlZ2lzdGVyQ29ubmVjdG9ySW5DbG91ZCwgc2VuZENvbm5lY3RvckV2ZW50cywgc2VuZENvbm5lY3RvckhlYXJ0YmVhdCB9IGZyb20gJy4vY2xvdWQnO1xyXG5pbXBvcnQgeyBydW5Db25uZWN0b3JSdW50aW1lIH0gZnJvbSAnLi9jb25uZWN0b3ItcnVudGltZSc7XHJcbmltcG9ydCB7XHJcbiAgICBnZXRDb25uZWN0b3JRdWV1ZVBhdGgsXHJcbiAgICBnZXRDb25uZWN0b3JRdWV1ZVN0YXRzLFxyXG4gICAgZ2V0UmVhZHlDb25uZWN0b3JFdmVudHMsXHJcbiAgICBsaXN0UXVldWVkQ29ubmVjdG9yRXZlbnRzLFxyXG4gICAgbWFya0Nvbm5lY3RvckV2ZW50c0RlbGl2ZXJlZCxcclxuICAgIG1hcmtDb25uZWN0b3JFdmVudHNGYWlsZWQsXHJcbiAgICBwdXJnZUNvbm5lY3RvclF1ZXVlXHJcbn0gZnJvbSAnLi9jb25uZWN0b3ItcXVldWUnO1xyXG5pbXBvcnQgeyBhcHBlbmRDbGlPcHNMb2dFbnRyeSwgY2xlYXJDbGlPcHNMb2csIGdldENsaU9wc0xvZ1BhdGgsIHJlYWRDbGlPcHNMb2cgfSBmcm9tICcuL29wcy1sb2cnO1xyXG5pbXBvcnQgeyBkcmFpbkNvbm5lY3RvclF1ZXVlIH0gZnJvbSAnLi9jb25uZWN0b3ItcXVldWUtZHJhaW4nO1xyXG5pbXBvcnQgeyBydW5JbnRlcmFjdGl2ZVNoZWxsIH0gZnJvbSAnLi9zaGVsbCc7XHJcbmltcG9ydCB7IHJ1blJlbGVhc2VQdWJsaXNoIH0gZnJvbSAnLi9yZWxlYXNlJztcclxuXHJcbnR5cGUgU3VwcG9ydGVkQ2xpZW50ID0gJ2NsYXVkZScgfCAnY3Vyc29yJyB8ICd3aW5kc3VyZic7XHJcbnR5cGUgQ2hlY2tTdGF0dXMgPSAncGFzcycgfCAnd2FybicgfCAnZmFpbCc7XHJcbnR5cGUgQm9vdHN0cmFwUmVzdWx0ID0geyBjbGllbnQ6IHN0cmluZzsgc3RhdHVzOiBzdHJpbmc7IGNvbmZpZ1BhdGg6IHN0cmluZzsgbWVzc2FnZT86IHN0cmluZyB9O1xyXG5cclxuaW50ZXJmYWNlIERvY3RvckNoZWNrIHtcclxuICAgIGlkOiBzdHJpbmc7XHJcbiAgICBzdGF0dXM6IENoZWNrU3RhdHVzO1xyXG4gICAgbWVzc2FnZTogc3RyaW5nO1xyXG4gICAgZGV0YWlscz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xyXG59XHJcblxyXG5pbnRlcmZhY2UgUGFyc2VkQXJncyB7XHJcbiAgICBjb21tYW5kOiBzdHJpbmc7XHJcbiAgICBzdWJjb21tYW5kPzogc3RyaW5nO1xyXG4gICAgc2VydmljZUFjdGlvbj86IHN0cmluZztcclxuICAgIHBvc2l0aW9uYWxBcmdzOiBzdHJpbmdbXTtcclxuICAgIGZsYWdzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBib29sZWFuPjtcclxufVxyXG5cclxuY29uc3QgREJfUEFUSCA9IHByb2Nlc3MuZW52LkNUWF9EQl9QQVRIIHx8IHBhdGguam9pbihvcy5ob21lZGlyKCksICcuMGN0eCcsICcwY3R4LmRiJyk7XHJcbmNvbnN0IEtFWV9QQVRIID0gcGF0aC5qb2luKG9zLmhvbWVkaXIoKSwgJy4wY3R4JywgJ21hc3Rlci5rZXknKTtcclxuY29uc3QgU09DS0VUX1BBVEggPSBvcy5wbGF0Zm9ybSgpID09PSAnd2luMzInXHJcbiAgICA/ICdcXFxcXFxcXC5cXFxccGlwZVxcXFwwY3R4LnNvY2snXHJcbiAgICA6IHBhdGguam9pbihvcy5ob21lZGlyKCksICcuMGN0eCcsICcwY3R4LnNvY2snKTtcclxuXHJcbmNvbnN0IFNVUFBPUlRFRF9DTElFTlRTOiBTdXBwb3J0ZWRDbGllbnRbXSA9IFsnY2xhdWRlJywgJ2N1cnNvcicsICd3aW5kc3VyZiddO1xyXG5cclxuZnVuY3Rpb24gcGFyc2VBcmdzKGFyZ3Y6IHN0cmluZ1tdKTogUGFyc2VkQXJncyB7XHJcbiAgICBjb25zdCBbY29tbWFuZCA9ICdoZWxwJywgbWF5YmVTdWJjb21tYW5kLCAuLi5yZXN0XSA9IGFyZ3Y7XHJcbiAgICBjb25zdCBoYXNTdWJjb21tYW5kID0gY29tbWFuZCA9PT0gJ2RhZW1vbidcclxuICAgICAgICB8fCBjb21tYW5kID09PSAnYXV0aCdcclxuICAgICAgICB8fCBjb21tYW5kID09PSAnY29uZmlnJ1xyXG4gICAgICAgIHx8IGNvbW1hbmQgPT09ICdzeW5jJ1xyXG4gICAgICAgIHx8IGNvbW1hbmQgPT09ICdjb25uZWN0b3InXHJcbiAgICAgICAgfHwgY29tbWFuZCA9PT0gJ3JlbGVhc2UnO1xyXG4gICAgY29uc3QgdG9rZW5zID0gaGFzU3ViY29tbWFuZFxyXG4gICAgICAgID8gcmVzdFxyXG4gICAgICAgIDogW21heWJlU3ViY29tbWFuZCwgLi4ucmVzdF0uZmlsdGVyKCh0b2tlbik6IHRva2VuIGlzIHN0cmluZyA9PiBCb29sZWFuKHRva2VuKSk7XHJcbiAgICBjb25zdCBmbGFnczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgYm9vbGVhbj4gPSB7fTtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRva2Vucy5sZW5ndGg7IGkgKz0gMSkge1xyXG4gICAgICAgIGNvbnN0IHRva2VuID0gdG9rZW5zW2ldO1xyXG4gICAgICAgIGlmICghdG9rZW4uc3RhcnRzV2l0aCgnLS0nKSkgY29udGludWU7XHJcblxyXG4gICAgICAgIGNvbnN0IFtyYXdLZXksIHJhd1ZhbHVlXSA9IHRva2VuLnNwbGl0KCc9Jyk7XHJcbiAgICAgICAgY29uc3Qga2V5ID0gcmF3S2V5LnNsaWNlKDIpO1xyXG5cclxuICAgICAgICBpZiAocmF3VmFsdWUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBmbGFnc1trZXldID0gcmF3VmFsdWU7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgbmV4dCA9IHRva2Vuc1tpICsgMV07XHJcbiAgICAgICAgaWYgKG5leHQgJiYgIW5leHQuc3RhcnRzV2l0aCgnLS0nKSkge1xyXG4gICAgICAgICAgICBmbGFnc1trZXldID0gbmV4dDtcclxuICAgICAgICAgICAgaSArPSAxO1xyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZsYWdzW2tleV0gPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHN1YiA9IGhhc1N1YmNvbW1hbmQgPyBtYXliZVN1YmNvbW1hbmQgOiB1bmRlZmluZWQ7XHJcbiAgICAvLyAzLWxldmVsOiBkYWVtb258Y29ubmVjdG9yIHNlcnZpY2UgPGFjdGlvbj5cclxuICAgIGNvbnN0IHNlcnZpY2VBY3Rpb24gPSAoc3ViID09PSAnc2VydmljZScgJiYgdG9rZW5zWzBdICYmICF0b2tlbnNbMF0uc3RhcnRzV2l0aCgnLS0nKSlcclxuICAgICAgICA/IHRva2Vuc1swXVxyXG4gICAgICAgIDogdW5kZWZpbmVkO1xyXG4gICAgLy8gQ29sbGVjdCBub24tZmxhZyBwb3NpdGlvbmFsIGFyZ3MgKGZvciBjb25maWcgZ2V0L3NldCBrZXkgdmFsdWUpXHJcbiAgICBjb25zdCBwb3NpdGlvbmFsQXJncyA9IHRva2Vucy5maWx0ZXIoYXJnID0+ICFhcmcuc3RhcnRzV2l0aCgnLS0nKSk7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIGNvbW1hbmQsXHJcbiAgICAgICAgc3ViY29tbWFuZDogc3ViLFxyXG4gICAgICAgIHNlcnZpY2VBY3Rpb24sXHJcbiAgICAgICAgcG9zaXRpb25hbEFyZ3MsXHJcbiAgICAgICAgZmxhZ3NcclxuICAgIH07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHBhcnNlQ2xpZW50cyhyYXc6IHN0cmluZyB8IGJvb2xlYW4gfCB1bmRlZmluZWQpOiBTdXBwb3J0ZWRDbGllbnRbXSB7XHJcbiAgICBpZiAoIXJhdyB8fCB0eXBlb2YgcmF3ICE9PSAnc3RyaW5nJykgcmV0dXJuIFNVUFBPUlRFRF9DTElFTlRTO1xyXG4gICAgY29uc3Qgbm9ybWFsaXplZCA9IHJhdy50cmltKCkudG9Mb3dlckNhc2UoKTtcclxuICAgIGlmIChub3JtYWxpemVkID09PSAnYWxsJykgcmV0dXJuIFNVUFBPUlRFRF9DTElFTlRTO1xyXG5cclxuICAgIGNvbnN0IHBhcnNlZCA9IG5vcm1hbGl6ZWRcclxuICAgICAgICAuc3BsaXQoJywnKVxyXG4gICAgICAgIC5tYXAoaXRlbSA9PiBpdGVtLnRyaW0oKSlcclxuICAgICAgICAuZmlsdGVyKChpdGVtKTogaXRlbSBpcyBTdXBwb3J0ZWRDbGllbnQgPT4gU1VQUE9SVEVEX0NMSUVOVFMuaW5jbHVkZXMoaXRlbSBhcyBTdXBwb3J0ZWRDbGllbnQpKTtcclxuXHJcbiAgICByZXR1cm4gcGFyc2VkLmxlbmd0aCA+IDAgPyBwYXJzZWQgOiBTVVBQT1JURURfQ0xJRU5UUztcclxufVxyXG5cclxuYXN5bmMgZnVuY3Rpb24gaXNEYWVtb25SZWFjaGFibGUoKTogUHJvbWlzZTx7IG9rOiBib29sZWFuOyBlcnJvcj86IHN0cmluZzsgaGVhbHRoPzogYW55IH0+IHtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgY29uc3QgaGVhbHRoID0gYXdhaXQgc2VuZFRvRGFlbW9uKCdoZWFsdGgnLCB7fSk7XHJcbiAgICAgICAgcmV0dXJuIHsgb2s6IHRydWUsIGhlYWx0aCB9O1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBvazogZmFsc2UsXHJcbiAgICAgICAgICAgIGVycm9yOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcilcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiByZXNvbHZlRGFlbW9uRW50cnlwb2ludCgpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgY2FuZGlkYXRlcyA9IFtcclxuICAgICAgICBwYXRoLnJlc29sdmUocHJvY2Vzcy5jd2QoKSwgJ3BhY2thZ2VzJywgJ2RhZW1vbicsICdkaXN0JywgJ2luZGV4LmpzJyksXHJcbiAgICAgICAgcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgJy4uJywgJy4uJywgJ2RhZW1vbicsICdkaXN0JywgJ2luZGV4LmpzJyksXHJcbiAgICAgICAgKCgpID0+IHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXF1aXJlLnJlc29sdmUoJ0AwY3R4L2RhZW1vbi9kaXN0L2luZGV4LmpzJyk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2gge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSkoKVxyXG4gICAgXS5maWx0ZXIoQm9vbGVhbik7XHJcblxyXG4gICAgZm9yIChjb25zdCBjYW5kaWRhdGUgb2YgY2FuZGlkYXRlcykge1xyXG4gICAgICAgIGlmIChmcy5leGlzdHNTeW5jKGNhbmRpZGF0ZSkpIHJldHVybiBjYW5kaWRhdGU7XHJcbiAgICB9XHJcblxyXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgcmVzb2x2ZSBkYWVtb24gZW50cnlwb2ludC4gUnVuIGBucG0gcnVuIGJ1aWxkYCBmaXJzdC4nKTtcclxufVxyXG5cclxuZnVuY3Rpb24gcmVzb2x2ZUNsaUVudHJ5cG9pbnQoKTogc3RyaW5nIHtcclxuICAgIGlmIChwcm9jZXNzLmFyZ3ZbMV0pIHtcclxuICAgICAgICByZXR1cm4gcGF0aC5yZXNvbHZlKHByb2Nlc3MuYXJndlsxXSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gX19maWxlbmFtZTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0SG9zdGVkRGFzaGJvYXJkVXJsKCk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBjb25maWd1cmVkID0gZ2V0Q29uZmlnVmFsdWUoJ3VpLnVybCcpO1xyXG4gICAgaWYgKHR5cGVvZiBjb25maWd1cmVkID09PSAnc3RyaW5nJyAmJiBjb25maWd1cmVkLnRyaW0oKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgcmV0dXJuIGNvbmZpZ3VyZWQudHJpbSgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuICdodHRwczovL2FwcC4wY3R4LmNvbSc7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIG9wZW5VcmwodXJsOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgY29uc3QgcGxhdGZvcm0gPSBvcy5wbGF0Zm9ybSgpO1xyXG4gICAgICAgIGlmIChwbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xyXG4gICAgICAgICAgICBleGVjU3luYyhgc3RhcnQgXCJcIiBcIiR7dXJsfVwiYCwgeyBzdGRpbzogJ2lnbm9yZScgfSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChwbGF0Zm9ybSA9PT0gJ2RhcndpbicpIHtcclxuICAgICAgICAgICAgZXhlY1N5bmMoYG9wZW4gXCIke3VybH1cImAsIHsgc3RkaW86ICdpZ25vcmUnIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGV4ZWNTeW5jKGB4ZGctb3BlbiBcIiR7dXJsfVwiYCwgeyBzdGRpbzogJ2lnbm9yZScgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSBjYXRjaCB7XHJcbiAgICAgICAgLy8gQmVzdC1lZmZvcnQgb3BlbiBvbmx5LiBVc2VyIGNhbiBjb3B5IFVSTC5cclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gc3RhcnREYWVtb25EZXRhY2hlZCgpOiB2b2lkIHtcclxuICAgIGNvbnN0IGVudHJ5ID0gcmVzb2x2ZURhZW1vbkVudHJ5cG9pbnQoKTtcclxuICAgIGNvbnN0IGNoaWxkID0gc3Bhd24ocHJvY2Vzcy5leGVjUGF0aCwgW2VudHJ5XSwge1xyXG4gICAgICAgIGRldGFjaGVkOiB0cnVlLFxyXG4gICAgICAgIHN0ZGlvOiAnaWdub3JlJ1xyXG4gICAgfSk7XHJcbiAgICBjaGlsZC51bnJlZigpO1xyXG59XHJcblxyXG5hc3luYyBmdW5jdGlvbiB3YWl0Rm9yRGFlbW9uKHRpbWVvdXRNcyA9IDEwMDAwKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XHJcbiAgICB3aGlsZSAoRGF0ZS5ub3coKSAtIHN0YXJ0IDwgdGltZW91dE1zKSB7XHJcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gYXdhaXQgaXNEYWVtb25SZWFjaGFibGUoKTtcclxuICAgICAgICBpZiAoc3RhdHVzLm9rKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMzAwKSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJ1bkJvb3RzdHJhcChjbGllbnRzOiBTdXBwb3J0ZWRDbGllbnRbXSwgZHJ5UnVuOiBib29sZWFuKTogUmV0dXJuVHlwZTx0eXBlb2YgYm9vdHN0cmFwTWNwUmVnaXN0cmF0aW9uPiB7XHJcbiAgICByZXR1cm4gYm9vdHN0cmFwTWNwUmVnaXN0cmF0aW9uKHtcclxuICAgICAgICBjbGllbnRzLFxyXG4gICAgICAgIGRyeVJ1bixcclxuICAgICAgICBzZXJ2ZXJOYW1lOiAnMGN0eCdcclxuICAgIH0pO1xyXG59XHJcblxyXG5hc3luYyBmdW5jdGlvbiBwcmludEJvb3RzdHJhcFJlc3VsdHMocmVzdWx0czogQm9vdHN0cmFwUmVzdWx0W10sIGRyeVJ1bjogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc3QgcCA9IGF3YWl0IGltcG9ydCgnQGNsYWNrL3Byb21wdHMnKTtcclxuICAgIGNvbnN0IG1vZGUgPSBkcnlSdW4gPyBjb2xvci55ZWxsb3coJ0RSWSBSVU4nKSA6IGNvbG9yLmdyZWVuKCdBUFBMSUVEJyk7XHJcbiAgICBwLmxvZy5tZXNzYWdlKGBNQ1AgYm9vdHN0cmFwICgke21vZGV9KWApO1xyXG5cclxuICAgIGZvciAoY29uc3QgcmVzdWx0IG9mIHJlc3VsdHMpIHtcclxuICAgICAgICBjb25zdCBjbGllbnROYW1lID0gY29sb3IuY3lhbihyZXN1bHQuY2xpZW50KTtcclxuICAgICAgICBjb25zdCBzdWZmaXggPSByZXN1bHQubWVzc2FnZSA/IGNvbG9yLmRpbShgIC0gJHtyZXN1bHQubWVzc2FnZX1gKSA6ICcnO1xyXG5cclxuICAgICAgICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gJ3N1Y2Nlc3MnKSB7XHJcbiAgICAgICAgICAgIHAubG9nLnN1Y2Nlc3MoYCR7Y2xpZW50TmFtZX06IGNvbmZpZ3VyZWQgKCR7cmVzdWx0LmNvbmZpZ1BhdGh9KSR7c3VmZml4fWApO1xyXG4gICAgICAgIH0gZWxzZSBpZiAocmVzdWx0LnN0YXR1cyA9PT0gJ3NraXBwZWQnKSB7XHJcbiAgICAgICAgICAgIHAubG9nLmluZm8oYCR7Y2xpZW50TmFtZX06IHNraXBwZWQgKCR7cmVzdWx0LmNvbmZpZ1BhdGggfHwgJ25vIGNvbmZpZyd9KSR7c3VmZml4fWApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHAubG9nLmVycm9yKGAke2NsaWVudE5hbWV9OiBmYWlsZWQgKCR7cmVzdWx0LmNvbmZpZ1BhdGggfHwgJ25vIGNvbmZpZyd9KSR7c3VmZml4fWApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuYXN5bmMgZnVuY3Rpb24gY29tbWFuZFN0YXR1cygpOiBQcm9taXNlPG51bWJlcj4ge1xyXG4gICAgY29uc3QgcCA9IGF3YWl0IGltcG9ydCgnQGNsYWNrL3Byb21wdHMnKTtcclxuICAgIHAuaW50cm8oY29sb3IuYmdDeWFuKGNvbG9yLmJsYWNrKCcgMGN0eCBzdGF0dXMgJykpKTtcclxuICAgIGNvbnN0IHMgPSBwLnNwaW5uZXIoKTtcclxuICAgIHMuc3RhcnQoJ0NoZWNraW5nIGRhZW1vbiBoZWFsdGgnKTtcclxuXHJcbiAgICBsZXQgZGFlbW9uID0gYXdhaXQgaXNEYWVtb25SZWFjaGFibGUoKTtcclxuXHJcbiAgICAvLyBBdXRvLXN0YXJ0IGRhZW1vbiBpZiBub3QgcnVubmluZyAoYmVzdC1lZmZvcnQsIG5vIGVycm9yIGlmIGl0IGZhaWxzKVxyXG4gICAgaWYgKCFkYWVtb24ub2spIHtcclxuICAgICAgICBzLm1lc3NhZ2UoJ0RhZW1vbiBub3QgcnVubmluZyBcdTIwMTQgc3RhcnRpbmcuLi4nKTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBzdGFydERhZW1vbkRldGFjaGVkKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ZWQgPSBhd2FpdCB3YWl0Rm9yRGFlbW9uKDgwMDApO1xyXG4gICAgICAgICAgICBpZiAoc3RhcnRlZCkge1xyXG4gICAgICAgICAgICAgICAgZGFlbW9uID0gYXdhaXQgaXNEYWVtb25SZWFjaGFibGUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gY2F0Y2gge1xyXG4gICAgICAgICAgICAvLyBCZXN0LWVmZm9ydCBvbmx5IFx1MjAxNCBzdGF0dXMgd2lsbCByZXBvcnQgb2ZmbGluZSBpZiBpdCBkaWRuJ3Qgc3RhcnRcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcy5zdG9wKGBEYWVtb24gaXMgJHtkYWVtb24ub2sgPyBjb2xvci5ncmVlbigncnVubmluZycpIDogY29sb3IucmVkKCdub3QgcnVubmluZycpfWApO1xyXG5cclxuICAgIGNvbnN0IGluZm86IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XHJcbiAgICAgICAgJ1NvY2tldCc6IFNPQ0tFVF9QQVRILFxyXG4gICAgICAgICdEYXRhYmFzZSc6IERCX1BBVEgsXHJcbiAgICAgICAgJ01hc3RlciBLZXknOiBmcy5leGlzdHNTeW5jKEtFWV9QQVRIKSB8fCBCb29sZWFuKHByb2Nlc3MuZW52LkNUWF9NQVNURVJfS0VZKSA/IGNvbG9yLmdyZWVuKCdwcmVzZW50JykgOiBjb2xvci55ZWxsb3coJ21pc3NpbmcnKVxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAoIWRhZW1vbi5vaykge1xyXG4gICAgICAgIGlmIChkYWVtb24uZXJyb3IpIHtcclxuICAgICAgICAgICAgaW5mb1snRXJyb3InXSA9IGNvbG9yLnJlZChkYWVtb24uZXJyb3IpO1xyXG4gICAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgY2FwYWJpbGl0aWVzID0gYXdhaXQgc2VuZFRvRGFlbW9uKCdnZXRDYXBhYmlsaXRpZXMnLCB7fSk7XHJcbiAgICAgICAgICAgIGNvbnN0IG1ldGhvZHMgPSBBcnJheS5pc0FycmF5KGNhcGFiaWxpdGllcz8ubWV0aG9kcykgPyBjYXBhYmlsaXRpZXMubWV0aG9kcy5sZW5ndGggOiAwO1xyXG4gICAgICAgICAgICBpbmZvWydBUEkgVmVyc2lvbiddID0gY2FwYWJpbGl0aWVzPy5hcGlWZXJzaW9uID8/ICd1bmtub3duJztcclxuICAgICAgICAgICAgaW5mb1snUlBDIE1ldGhvZHMnXSA9IFN0cmluZyhtZXRob2RzKTtcclxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICBpbmZvWydBUEkgRXJyb3InXSA9IGNvbG9yLnJlZChlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcikpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwLm5vdGUoXHJcbiAgICAgICAgT2JqZWN0LmVudHJpZXMoaW5mbykubWFwKChbaywgdl0pID0+IGAke2NvbG9yLmRpbShrLnBhZEVuZCgxMikpfSA6ICR7dn1gKS5qb2luKCdcXG4nKSxcclxuICAgICAgICAnU3lzdGVtIERldGFpbHMnXHJcbiAgICApO1xyXG4gICAgcC5vdXRybyhkYWVtb24ub2sgPyAnQWxsIHN5c3RlbXMgb3BlcmF0aW9uYWwnIDogY29sb3IueWVsbG93KCdEYWVtb24gZGVncmFkZWQgb3Igb2ZmbGluZScpKTtcclxuXHJcbiAgICByZXR1cm4gZGFlbW9uLm9rID8gMCA6IDE7XHJcbn1cclxuXHJcbmFzeW5jIGZ1bmN0aW9uIGNvbW1hbmRCb290c3RyYXAoZmxhZ3M6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IGJvb2xlYW4+KTogUHJvbWlzZTxudW1iZXI+IHtcclxuICAgIGNvbnN0IHAgPSBhd2FpdCBpbXBvcnQoJ0BjbGFjay9wcm9tcHRzJyk7XHJcbiAgICBjb25zdCBjbGllbnRzID0gcGFyc2VDbGllbnRzKGZsYWdzLmNsaWVudHMpO1xyXG4gICAgY29uc3QgZHJ5UnVuID0gQm9vbGVhbihmbGFnc1snZHJ5LXJ1biddKTtcclxuXHJcbiAgICBpZiAoIUJvb2xlYW4oZmxhZ3MucXVpZXQpICYmICFCb29sZWFuKGZsYWdzLmpzb24pKSB7XHJcbiAgICAgICAgcC5pbnRybyhjb2xvci5iZ0JsdWUoY29sb3IuYmxhY2soJyAwY3R4IGJvb3RzdHJhcCAnKSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHMgPSBwLnNwaW5uZXIoKTtcclxuICAgIGlmICghQm9vbGVhbihmbGFncy5xdWlldCkgJiYgIUJvb2xlYW4oZmxhZ3MuanNvbikpIHMuc3RhcnQoJ0FwcGx5aW5nIE1DUCBjb25maWd1cmF0aW9ucycpO1xyXG5cclxuICAgIGNvbnN0IHJlc3VsdHMgPSBydW5Cb290c3RyYXAoY2xpZW50cywgZHJ5UnVuKTtcclxuXHJcbiAgICBpZiAoIUJvb2xlYW4oZmxhZ3MucXVpZXQpICYmICFCb29sZWFuKGZsYWdzLmpzb24pKSB7XHJcbiAgICAgICAgcy5zdG9wKCdCb290c3RyYXAgY29tcGxldGUnKTtcclxuICAgICAgICBhd2FpdCBwcmludEJvb3RzdHJhcFJlc3VsdHMocmVzdWx0cywgZHJ5UnVuKTtcclxuICAgICAgICBwLm91dHJvKHJlc3VsdHMuc29tZShyID0+IHIuc3RhdHVzID09PSAnZmFpbGVkJykgPyBjb2xvci55ZWxsb3coJ0Jvb3RzdHJhcCBmaW5pc2hlZCB3aXRoIGVycm9ycycpIDogY29sb3IuZ3JlZW4oJ0Jvb3RzdHJhcCBzdWNjZXNzZnVsJykpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChCb29sZWFuKGZsYWdzLmpzb24pKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoeyBkcnlSdW4sIGNsaWVudHMsIHJlc3VsdHMgfSwgbnVsbCwgMikpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdHMuc29tZSgocmVzdWx0OiBCb290c3RyYXBSZXN1bHQpID0+IHJlc3VsdC5zdGF0dXMgPT09ICdmYWlsZWQnKSA/IDEgOiAwO1xyXG59XHJcblxyXG5hc3luYyBmdW5jdGlvbiBjb21tYW5kSW5zdGFsbChmbGFnczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgYm9vbGVhbj4pOiBQcm9taXNlPG51bWJlcj4ge1xyXG4gICAgY29uc3QgcCA9IGF3YWl0IGltcG9ydCgnQGNsYWNrL3Byb21wdHMnKTtcclxuICAgIGNvbnN0IHF1aWV0ID0gQm9vbGVhbihmbGFncy5xdWlldCk7XHJcbiAgICBjb25zdCBhc0pzb24gPSBCb29sZWFuKGZsYWdzLmpzb24pO1xyXG4gICAgY29uc3Qgc2tpcEJvb3RzdHJhcCA9IEJvb2xlYW4oZmxhZ3NbJ3NraXAtYm9vdHN0cmFwJ10pO1xyXG5cclxuICAgIGlmICghcXVpZXQgJiYgIWFzSnNvbikge1xyXG4gICAgICAgIHAuaW50cm8oY29sb3IuYmdCbHVlKGNvbG9yLmJsYWNrKCcgMGN0eCBpbnN0YWxsICcpKSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcyA9IHAuc3Bpbm5lcigpO1xyXG4gICAgaWYgKCFxdWlldCAmJiAhYXNKc29uKSBzLnN0YXJ0KCdDaGVja2luZyBkYWVtb24gc3RhdHVzJyk7XHJcblxyXG4gICAgY29uc3QgZGFlbW9uU3RhdHVzID0gYXdhaXQgaXNEYWVtb25SZWFjaGFibGUoKTtcclxuXHJcbiAgICBpZiAoIWRhZW1vblN0YXR1cy5vaykge1xyXG4gICAgICAgIGlmICghcXVpZXQgJiYgIWFzSnNvbikgcy5tZXNzYWdlKCdTdGFydGluZyBiYWNrZ3JvdW5kIHNlcnZpY2UuLi4nKTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBzdGFydERhZW1vbkRldGFjaGVkKCk7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgaWYgKCFxdWlldCAmJiAhYXNKc29uKSBzLnN0b3AoY29sb3IucmVkKCdGYWlsZWQgdG8gc3RhcnQgZGFlbW9uJykpO1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKSk7XHJcbiAgICAgICAgICAgIGlmICghcXVpZXQgJiYgIWFzSnNvbikgcC5vdXRybyhjb2xvci5yZWQoJ0luc3RhbGwgZmFpbGVkJykpO1xyXG4gICAgICAgICAgICByZXR1cm4gMTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFxdWlldCAmJiAhYXNKc29uKSBzLm1lc3NhZ2UoJ1dhaXRpbmcgZm9yIGRhZW1vbiB0byBiZWNvbWUgcmVhZHkuLi4nKTtcclxuICAgIGNvbnN0IHJlYWR5ID0gYXdhaXQgd2FpdEZvckRhZW1vbigpO1xyXG5cclxuICAgIGlmICghcmVhZHkpIHtcclxuICAgICAgICBpZiAoIXF1aWV0ICYmICFhc0pzb24pIHMuc3RvcChjb2xvci5yZWQoJ0RhZW1vbiBzdGFydCB0aW1lb3V0JykpO1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1VuYWJsZSB0byByZWFjaCBkYWVtb24gaGVhbHRoIGVuZHBvaW50LicpO1xyXG4gICAgICAgIGlmICghcXVpZXQgJiYgIWFzSnNvbikgcC5vdXRybyhjb2xvci5yZWQoJ0luc3RhbGwgZmFpbGVkJykpO1xyXG4gICAgICAgIHJldHVybiAxO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghcXVpZXQgJiYgIWFzSnNvbikgcy5zdG9wKGNvbG9yLmdyZWVuKCdEYWVtb24gaXMgcmVhZHknKSk7XHJcblxyXG4gICAgbGV0IGJvb3RzdHJhcENvZGUgPSAwO1xyXG4gICAgaWYgKCFza2lwQm9vdHN0cmFwKSB7XHJcbiAgICAgICAgYm9vdHN0cmFwQ29kZSA9IGF3YWl0IGNvbW1hbmRCb290c3RyYXAoeyAuLi5mbGFncywgcXVpZXQ6IChxdWlldCB8fCBhc0pzb24pLCBqc29uOiBmYWxzZSB9KTtcclxuICAgICAgICBpZiAoYm9vdHN0cmFwQ29kZSAhPT0gMCkge1xyXG4gICAgICAgICAgICBpZiAoIXF1aWV0ICYmICFhc0pzb24pIHAub3V0cm8oY29sb3IueWVsbG93KCdJbnN0YWxsIHBhcnRpYWwgKGJvb3RzdHJhcCBmYWlsZWQpJykpO1xyXG4gICAgICAgICAgICByZXR1cm4gYm9vdHN0cmFwQ29kZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHF1aWV0IHx8IGFzSnNvbikge1xyXG4gICAgICAgIGlmIChhc0pzb24pIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoe1xyXG4gICAgICAgICAgICAgICAgb2s6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBkYWVtb25SdW5uaW5nOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgYm9vdHN0cmFwOiBza2lwQm9vdHN0cmFwID8gJ3NraXBwZWQnIDogJ29rJ1xyXG4gICAgICAgICAgICB9LCBudWxsLCAyKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAwO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGNoZWNrcyA9IGF3YWl0IGlzRGFlbW9uUmVhY2hhYmxlKCk7XHJcbiAgICBwLm91dHJvKGNvbG9yLmdyZWVuKGBJbnN0YWxsYXRpb24gY29tcGxldGUhIERhZW1vbiBpcyAke2NoZWNrcy5vayA/ICdydW5uaW5nJyA6ICdkZWdyYWRlZCd9LmApKTtcclxuICAgIHJldHVybiBjaGVja3Mub2sgPyAwIDogMTtcclxufVxyXG5cclxuYXN5bmMgZnVuY3Rpb24gY29tbWFuZERvY3RvcihmbGFnczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgYm9vbGVhbj4pOiBQcm9taXNlPG51bWJlcj4ge1xyXG4gICAgY29uc3QgY2hlY2tzOiBEb2N0b3JDaGVja1tdID0gW107XHJcbiAgICBjb25zdCBkYWVtb24gPSBhd2FpdCBpc0RhZW1vblJlYWNoYWJsZSgpO1xyXG5cclxuICAgIGNoZWNrcy5wdXNoKHtcclxuICAgICAgICBpZDogJ2RhZW1vbl9yZWFjaGFibGUnLFxyXG4gICAgICAgIHN0YXR1czogZGFlbW9uLm9rID8gJ3Bhc3MnIDogJ2ZhaWwnLFxyXG4gICAgICAgIG1lc3NhZ2U6IGRhZW1vbi5vayA/ICdEYWVtb24gaGVhbHRoIGNoZWNrIHN1Y2NlZWRlZC4nIDogJ0RhZW1vbiBpcyBub3QgcmVhY2hhYmxlLicsXHJcbiAgICAgICAgZGV0YWlsczogZGFlbW9uLm9rID8gZGFlbW9uLmhlYWx0aCA6IHsgZXJyb3I6IGRhZW1vbi5lcnJvciB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBjaGVja3MucHVzaCh7XHJcbiAgICAgICAgaWQ6ICdkYl9wYXRoJyxcclxuICAgICAgICBzdGF0dXM6IGZzLmV4aXN0c1N5bmMoREJfUEFUSCkgPyAncGFzcycgOiAnd2FybicsXHJcbiAgICAgICAgbWVzc2FnZTogZnMuZXhpc3RzU3luYyhEQl9QQVRIKSA/ICdEYXRhYmFzZSBmaWxlIGV4aXN0cy4nIDogJ0RhdGFiYXNlIGZpbGUgbm90IGZvdW5kIHlldCAobWF5IGJlIGNyZWF0ZWQgb24gZmlyc3QgcnVuKS4nLFxyXG4gICAgICAgIGRldGFpbHM6IHsgcGF0aDogREJfUEFUSCB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBoYXNLZXkgPSBCb29sZWFuKHByb2Nlc3MuZW52LkNUWF9NQVNURVJfS0VZKSB8fCBmcy5leGlzdHNTeW5jKEtFWV9QQVRIKTtcclxuICAgIGNoZWNrcy5wdXNoKHtcclxuICAgICAgICBpZDogJ2VuY3J5cHRpb25fa2V5JyxcclxuICAgICAgICBzdGF0dXM6IGhhc0tleSA/ICdwYXNzJyA6ICd3YXJuJyxcclxuICAgICAgICBtZXNzYWdlOiBoYXNLZXkgPyAnRW5jcnlwdGlvbiBrZXkgYXZhaWxhYmxlLicgOiAnRW5jcnlwdGlvbiBrZXkgZmlsZS9lbnYgbm90IGZvdW5kIHlldC4nLFxyXG4gICAgICAgIGRldGFpbHM6IHsgZW52OiBCb29sZWFuKHByb2Nlc3MuZW52LkNUWF9NQVNURVJfS0VZKSwgZmlsZTogS0VZX1BBVEggfVxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3Qgb3BzTG9nUGF0aCA9IGdldENsaU9wc0xvZ1BhdGgoKTtcclxuICAgIGxldCBvcHNMb2dXcml0YWJsZSA9IHRydWU7XHJcbiAgICBsZXQgb3BzTG9nRXJyb3I6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG4gICAgdHJ5IHtcclxuICAgICAgICBjb25zdCBkaXIgPSBwYXRoLmRpcm5hbWUob3BzTG9nUGF0aCk7XHJcbiAgICAgICAgZnMubWtkaXJTeW5jKGRpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XHJcbiAgICAgICAgZnMuYWNjZXNzU3luYyhkaXIsIGZzLmNvbnN0YW50cy5XX09LKTtcclxuICAgICAgICBpZiAoZnMuZXhpc3RzU3luYyhvcHNMb2dQYXRoKSkge1xyXG4gICAgICAgICAgICBmcy5hY2Nlc3NTeW5jKG9wc0xvZ1BhdGgsIGZzLmNvbnN0YW50cy5XX09LKTtcclxuICAgICAgICB9XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgIG9wc0xvZ1dyaXRhYmxlID0gZmFsc2U7XHJcbiAgICAgICAgb3BzTG9nRXJyb3IgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcik7XHJcbiAgICB9XHJcbiAgICBjaGVja3MucHVzaCh7XHJcbiAgICAgICAgaWQ6ICdvcHNfbG9nX3dyaXRhYmxlJyxcclxuICAgICAgICBzdGF0dXM6IG9wc0xvZ1dyaXRhYmxlID8gJ3Bhc3MnIDogJ3dhcm4nLFxyXG4gICAgICAgIG1lc3NhZ2U6IG9wc0xvZ1dyaXRhYmxlID8gJ0NMSSBvcGVyYXRpb25zIGxvZyBwYXRoIGlzIHdyaXRhYmxlLicgOiAnQ0xJIG9wZXJhdGlvbnMgbG9nIHBhdGggaXMgbm90IHdyaXRhYmxlLicsXHJcbiAgICAgICAgZGV0YWlsczogeyBwYXRoOiBvcHNMb2dQYXRoLCBlcnJvcjogb3BzTG9nRXJyb3IgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgZHJ5UnVuUmVzdWx0cyA9IHJ1bkJvb3RzdHJhcChwYXJzZUNsaWVudHMoZmxhZ3MuY2xpZW50cyksIHRydWUpO1xyXG4gICAgY29uc3QgZmFpbGVkQm9vdHN0cmFwID0gZHJ5UnVuUmVzdWx0cy5zb21lKChyZXN1bHQ6IEJvb3RzdHJhcFJlc3VsdCkgPT4gcmVzdWx0LnN0YXR1cyA9PT0gJ2ZhaWxlZCcpO1xyXG4gICAgY2hlY2tzLnB1c2goe1xyXG4gICAgICAgIGlkOiAnYm9vdHN0cmFwX2RyeV9ydW4nLFxyXG4gICAgICAgIHN0YXR1czogZmFpbGVkQm9vdHN0cmFwID8gJ2ZhaWwnIDogJ3Bhc3MnLFxyXG4gICAgICAgIG1lc3NhZ2U6IGZhaWxlZEJvb3RzdHJhcCA/ICdCb290c3RyYXAgZHJ5IHJ1biBmb3VuZCBmYWlsdXJlcy4nIDogJ0Jvb3RzdHJhcCBkcnkgcnVuIHN1Y2NlZWRlZCAob3Igc2tpcHBlZCB1bnN1cHBvcnRlZCBjbGllbnRzKS4nLFxyXG4gICAgICAgIGRldGFpbHM6IHsgcmVzdWx0czogZHJ5UnVuUmVzdWx0cyB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBhc0pzb24gPSBCb29sZWFuKGZsYWdzLmpzb24pO1xyXG4gICAgaWYgKGFzSnNvbikge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHsgY2hlY2tzIH0sIG51bGwsIDIpKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc3QgcCA9IGF3YWl0IGltcG9ydCgnQGNsYWNrL3Byb21wdHMnKTtcclxuICAgICAgICBwLmludHJvKGNvbG9yLmJnQ3lhbihjb2xvci5ibGFjaygnIDBjdHggZG9jdG9yICcpKSk7XHJcblxyXG4gICAgICAgIGZvciAoY29uc3QgY2hlY2sgb2YgY2hlY2tzKSB7XHJcbiAgICAgICAgICAgIGlmIChjaGVjay5zdGF0dXMgPT09ICdwYXNzJykge1xyXG4gICAgICAgICAgICAgICAgcC5sb2cuc3VjY2VzcyhgJHtjb2xvci5ib2xkKGNoZWNrLmlkKX06ICR7Y29sb3IuZGltKGNoZWNrLm1lc3NhZ2UpfWApO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNoZWNrLnN0YXR1cyA9PT0gJ3dhcm4nKSB7XHJcbiAgICAgICAgICAgICAgICBwLmxvZy53YXJuKGAke2NvbG9yLmJvbGQoY2hlY2suaWQpfTogJHtjb2xvci55ZWxsb3coY2hlY2subWVzc2FnZSl9YCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBwLmxvZy5lcnJvcihgJHtjb2xvci5ib2xkKGNoZWNrLmlkKX06ICR7Y29sb3IucmVkKGNoZWNrLm1lc3NhZ2UpfWApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBoYXNGYWlsdXJlcyA9IGNoZWNrcy5zb21lKGMgPT4gYy5zdGF0dXMgPT09ICdmYWlsJyk7XHJcbiAgICAgICAgcC5vdXRybyhoYXNGYWlsdXJlcyA/IGNvbG9yLnJlZCgnRG9jdG9yIGZvdW5kIGlzc3VlcyByZXF1aXJpbmcgYXR0ZW50aW9uLicpIDogY29sb3IuZ3JlZW4oJ0FsbCBzeXN0ZW1zIGdvIScpKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY2hlY2tzLnNvbWUoY2hlY2sgPT4gY2hlY2suc3RhdHVzID09PSAnZmFpbCcpID8gMSA6IDA7XHJcbn1cclxuXHJcbmFzeW5jIGZ1bmN0aW9uIGNvbW1hbmRSZXBhaXIoZmxhZ3M6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IGJvb2xlYW4+KTogUHJvbWlzZTxudW1iZXI+IHtcclxuICAgIGNvbnN0IHAgPSBhd2FpdCBpbXBvcnQoJ0BjbGFjay9wcm9tcHRzJyk7XHJcbiAgICBwLmludHJvKGNvbG9yLmJnQ3lhbihjb2xvci5ibGFjaygnIDBjdHggcmVwYWlyICcpKSk7XHJcblxyXG4gICAgY29uc3QgcyA9IHAuc3Bpbm5lcigpO1xyXG4gICAgcy5zdGFydCgnQ2hlY2tpbmcgZGFlbW9uIHN0YXR1cycpO1xyXG5cclxuICAgIGNvbnN0IGRhZW1vbiA9IGF3YWl0IGlzRGFlbW9uUmVhY2hhYmxlKCk7XHJcbiAgICBpZiAoIWRhZW1vbi5vaykge1xyXG4gICAgICAgIHMubWVzc2FnZSgnU3RhcnRpbmcgZGFlbW9uIGZvciByZXBhaXIuLi4nKTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBzdGFydERhZW1vbkRldGFjaGVkKCk7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgcy5zdG9wKGNvbG9yLnJlZCgnRmFpbGVkIHRvIHN0YXJ0IGRhZW1vbicpKTtcclxuICAgICAgICAgICAgcC5sb2cuZXJyb3IoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpKTtcclxuICAgICAgICAgICAgcC5vdXRybyhjb2xvci5yZWQoJ1JlcGFpciBmYWlsZWQnKSk7XHJcbiAgICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCByZWFkeSA9IGF3YWl0IHdhaXRGb3JEYWVtb24oKTtcclxuICAgIGlmICghcmVhZHkpIHtcclxuICAgICAgICBzLnN0b3AoY29sb3IucmVkKCdEYWVtb24gc3RhcnQgdGltZW91dCcpKTtcclxuICAgICAgICBwLm91dHJvKGNvbG9yLnJlZCgnUmVwYWlyIGZhaWxlZCcpKTtcclxuICAgICAgICByZXR1cm4gMTtcclxuICAgIH1cclxuXHJcbiAgICBzLnN0b3AoY29sb3IuZ3JlZW4oJ0RhZW1vbiBpcyBydW5uaW5nJykpO1xyXG5cclxuICAgIHAubG9nLnN0ZXAoJ1J1bm5pbmcgYm9vdHN0cmFwIHRvIGZpeCBNQ1AgY29uZmlncycpO1xyXG4gICAgY29uc3QgYm9vdHN0cmFwQ29kZSA9IGF3YWl0IGNvbW1hbmRCb290c3RyYXAoeyAuLi5mbGFncywgcXVpZXQ6IHRydWUsIGpzb246IGZhbHNlIH0pO1xyXG4gICAgaWYgKGJvb3RzdHJhcENvZGUgIT09IDApIHtcclxuICAgICAgICBwLm91dHJvKGNvbG9yLnllbGxvdygnUmVwYWlyIHBhcnRpYWwgKGJvb3RzdHJhcCBmYWlsZWQpJykpO1xyXG4gICAgICAgIHJldHVybiBib290c3RyYXBDb2RlO1xyXG4gICAgfVxyXG5cclxuICAgIHAubG9nLnN0ZXAoJ1J1bm5pbmcgZG9jdG9yIGNoZWNrcycpO1xyXG4gICAgcmV0dXJuIGNvbW1hbmREb2N0b3IoeyAuLi5mbGFncywganNvbjogZmFsc2UgfSk7XHJcbn1cclxuXHJcbmFzeW5jIGZ1bmN0aW9uIGNvbW1hbmREYXNoYm9hcmQoZmxhZ3M6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IGJvb2xlYW4+KTogUHJvbWlzZTxudW1iZXI+IHtcclxuICAgIGNvbnN0IHVybCA9IGFwcGx5RGFzaGJvYXJkUXVlcnkoZ2V0SG9zdGVkRGFzaGJvYXJkVXJsKCksIGZsYWdzWydkYXNoYm9hcmQtcXVlcnknXSk7XHJcbiAgICBjb25zb2xlLmxvZyhgZGFzaGJvYXJkX3VybDogJHt1cmx9YCk7XHJcblxyXG4gICAgaWYgKEJvb2xlYW4oZmxhZ3NbJ25vLW9wZW4nXSkpIHtcclxuICAgICAgICBjb25zb2xlLmxvZygnT3BlbiB0aGUgVVJMIGFib3ZlIGluIHlvdXIgYnJvd3Nlci4nKTtcclxuICAgICAgICByZXR1cm4gMDtcclxuICAgIH1cclxuXHJcbiAgICBvcGVuVXJsKHVybCk7XHJcbiAgICBjb25zb2xlLmxvZygnT3BlbmVkIGRhc2hib2FyZCBVUkwgaW4geW91ciBkZWZhdWx0IGJyb3dzZXIgKGJlc3QgZWZmb3J0KS4nKTtcclxuICAgIHJldHVybiAwO1xyXG59XHJcblxyXG5hc3luYyBmdW5jdGlvbiBjb21tYW5kU2hlbGwoKTogUHJvbWlzZTxudW1iZXI+IHtcclxuICAgIHJldHVybiBydW5JbnRlcmFjdGl2ZVNoZWxsKHtcclxuICAgICAgICBjbGlFbnRyeXBvaW50OiByZXNvbHZlQ2xpRW50cnlwb2ludCgpLFxyXG4gICAgICAgIG5vZGVFeGVjQXJndjogcHJvY2Vzcy5leGVjQXJndlxyXG4gICAgfSk7XHJcbn1cclxuXHJcbmFzeW5jIGZ1bmN0aW9uIGNvbW1hbmRSZWxlYXNlUHVibGlzaChmbGFnczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgYm9vbGVhbj4pOiBQcm9taXNlPG51bWJlcj4ge1xyXG4gICAgY29uc3QgdmVyc2lvblJhdyA9IHBhcnNlT3B0aW9uYWxTdHJpbmdGbGFnKGZsYWdzLnZlcnNpb24pO1xyXG4gICAgaWYgKCF2ZXJzaW9uUmF3KSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignTWlzc2luZyByZXF1aXJlZCAtLXZlcnNpb24gYXJndW1lbnQuJyk7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignVXNhZ2U6IDBjdHggcmVsZWFzZSBwdWJsaXNoIC0tdmVyc2lvbiB2WC5ZLlogWy0tdGFnIGxhdGVzdF0gWy0tb3RwIDEyMzQ1Nl0gWy0tZHJ5LXJ1bl0gWy0tYWxsb3ctZGlydHldIFstLWpzb25dJyk7XHJcbiAgICAgICAgcmV0dXJuIDE7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcnVuUmVsZWFzZVB1Ymxpc2goe1xyXG4gICAgICAgIHZlcnNpb246IHZlcnNpb25SYXcsXHJcbiAgICAgICAgdGFnOiBwYXJzZU9wdGlvbmFsU3RyaW5nRmxhZyhmbGFncy50YWcpID8/ICdsYXRlc3QnLFxyXG4gICAgICAgIGRyeVJ1bjogQm9vbGVhbihmbGFnc1snZHJ5LXJ1biddKSxcclxuICAgICAgICBhbGxvd0RpcnR5OiBCb29sZWFuKGZsYWdzWydhbGxvdy1kaXJ0eSddKSxcclxuICAgICAgICBvdHA6IHBhcnNlT3B0aW9uYWxTdHJpbmdGbGFnKGZsYWdzLm90cCkgPz8gdW5kZWZpbmVkLFxyXG4gICAgICAgIHNraXBWYWxpZGF0ZTogQm9vbGVhbihmbGFnc1snc2tpcC12YWxpZGF0ZSddKSxcclxuICAgICAgICBza2lwQ2hhbmdlbG9nOiBCb29sZWFuKGZsYWdzWydza2lwLWNoYW5nZWxvZyddKSxcclxuICAgICAgICBvdXRwdXRNb2RlOiBCb29sZWFuKGZsYWdzLmpzb24pID8gJ2NhcHR1cmUnIDogJ2luaGVyaXQnXHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAoQm9vbGVhbihmbGFncy5qc29uKSkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHJlc3VsdCwgbnVsbCwgMikpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhgcmVsZWFzZV9wdWJsaXNoOiAke3Jlc3VsdC5vayA/ICdzdWNjZXNzJyA6ICdmYWlsZWQnfWApO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGB2ZXJzaW9uOiAke3Jlc3VsdC52ZXJzaW9ufWApO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGB0YWc6ICR7cmVzdWx0LnRhZ31gKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhgZHJ5X3J1bjogJHtyZXN1bHQuZHJ5UnVufWApO1xyXG4gICAgICAgIGlmICghcmVzdWx0Lm9rKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZhaWxlZFN0ZXAgPSByZXN1bHQuc3RlcHMuZmluZChzdGVwID0+ICFzdGVwLm9rKTtcclxuICAgICAgICAgICAgaWYgKGZhaWxlZFN0ZXApIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYGZhaWxlZF9zdGVwOiAke2ZhaWxlZFN0ZXAuaWR9IChleGl0PSR7ZmFpbGVkU3RlcC5leGl0Q29kZSA/PyAndW5rbm93bid9KWApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZXN1bHQub2sgPyAwIDogMTtcclxufVxyXG5cclxuZnVuY3Rpb24gcGFyc2VQb3NpdGl2ZU51bWJlckZsYWcodmFsdWU6IHN0cmluZyB8IGJvb2xlYW4gfCB1bmRlZmluZWQsIGZhbGxiYWNrOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHJldHVybiBmYWxsYmFjaztcclxuICAgIGNvbnN0IHBhcnNlZCA9IE51bWJlcih2YWx1ZSk7XHJcbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShwYXJzZWQpIHx8IHBhcnNlZCA8PSAwKSByZXR1cm4gZmFsbGJhY2s7XHJcbiAgICByZXR1cm4gcGFyc2VkO1xyXG59XHJcblxyXG5mdW5jdGlvbiBwYXJzZVBvc2l0aXZlSW50ZWdlckZsYWcodmFsdWU6IHN0cmluZyB8IGJvb2xlYW4gfCB1bmRlZmluZWQsIGZhbGxiYWNrOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIE1hdGgubWF4KDEsIE1hdGguZmxvb3IocGFyc2VQb3NpdGl2ZU51bWJlckZsYWcodmFsdWUsIGZhbGxiYWNrKSkpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBwYXJzZU9wdGlvbmFsU3RyaW5nRmxhZyh2YWx1ZTogc3RyaW5nIHwgYm9vbGVhbiB8IHVuZGVmaW5lZCk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHJldHVybiBudWxsO1xyXG4gICAgY29uc3Qgbm9ybWFsaXplZCA9IHZhbHVlLnRyaW0oKTtcclxuICAgIHJldHVybiBub3JtYWxpemVkLmxlbmd0aCA+IDAgPyBub3JtYWxpemVkIDogbnVsbDtcclxufVxyXG5cclxuZnVuY3Rpb24gc2xlZXBNcyhtczogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGFwcGx5RGFzaGJvYXJkUXVlcnkodXJsOiBzdHJpbmcsIHF1ZXJ5UmF3OiBzdHJpbmcgfCBib29sZWFuIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcclxuICAgIGlmICh0eXBlb2YgcXVlcnlSYXcgIT09ICdzdHJpbmcnIHx8IHF1ZXJ5UmF3LnRyaW0oKS5sZW5ndGggPT09IDApIHJldHVybiB1cmw7XHJcbiAgICBjb25zdCBub3JtYWxpemVkID0gcXVlcnlSYXcudHJpbSgpLnJlcGxhY2UoL15cXD8rLywgJycpO1xyXG4gICAgaWYgKG5vcm1hbGl6ZWQubGVuZ3RoID09PSAwKSByZXR1cm4gdXJsO1xyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgICAgY29uc3QgcGFyc2VkVXJsID0gbmV3IFVSTCh1cmwpO1xyXG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gbmV3IFVSTFNlYXJjaFBhcmFtcyhub3JtYWxpemVkKTtcclxuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBxdWVyeS5lbnRyaWVzKCkpIHtcclxuICAgICAgICAgICAgcGFyc2VkVXJsLnNlYXJjaFBhcmFtcy5zZXQoa2V5LCB2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBwYXJzZWRVcmwudG9TdHJpbmcoKTtcclxuICAgIH0gY2F0Y2gge1xyXG4gICAgICAgIGNvbnN0IHNlcCA9IHVybC5pbmNsdWRlcygnPycpID8gJyYnIDogJz8nO1xyXG4gICAgICAgIHJldHVybiBgJHt1cmx9JHtzZXB9JHtub3JtYWxpemVkfWA7XHJcbiAgICB9XHJcbn1cclxuXHJcbmFzeW5jIGZ1bmN0aW9uIGNvbW1hbmRDb25uZWN0b3JRdWV1ZShhY3Rpb246IHN0cmluZyB8IHVuZGVmaW5lZCwgZmxhZ3M6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IGJvb2xlYW4+KTogUHJvbWlzZTxudW1iZXI+IHtcclxuICAgIGNvbnN0IHZhbGlkQWN0aW9ucyA9IFsnc3RhdHVzJywgJ2RyYWluJywgJ3B1cmdlJywgJ2xvZ3MnXTtcclxuICAgIGNvbnN0IHNhZmVBY3Rpb24gPSBhY3Rpb24gfHwgJ3N0YXR1cyc7XHJcblxyXG4gICAgaWYgKCF2YWxpZEFjdGlvbnMuaW5jbHVkZXMoc2FmZUFjdGlvbikpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKGBVbmtub3duIGNvbm5lY3RvciBxdWV1ZSBhY3Rpb246ICcke2FjdGlvbiA/PyAnJ30nYCk7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihgVmFsaWQgYWN0aW9uczogJHt2YWxpZEFjdGlvbnMuam9pbignLCAnKX1gKTtcclxuICAgICAgICByZXR1cm4gMTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc2FmZUFjdGlvbiA9PT0gJ3N0YXR1cycpIHtcclxuICAgICAgICBjb25zdCBzdGF0cyA9IGdldENvbm5lY3RvclF1ZXVlU3RhdHMoRGF0ZS5ub3coKSk7XHJcbiAgICAgICAgY29uc3Qgc2FtcGxlID0gbGlzdFF1ZXVlZENvbm5lY3RvckV2ZW50cygpLnNsaWNlKDAsIDUpLm1hcChpdGVtID0+ICh7XHJcbiAgICAgICAgICAgIHF1ZXVlSWQ6IGl0ZW0ucXVldWVJZCxcclxuICAgICAgICAgICAgZXZlbnRJZDogaXRlbS5ldmVudElkLFxyXG4gICAgICAgICAgICBzZXF1ZW5jZTogaXRlbS5zZXF1ZW5jZSxcclxuICAgICAgICAgICAgYXR0ZW1wdHM6IGl0ZW0uYXR0ZW1wdHMsXHJcbiAgICAgICAgICAgIG5leHRBdHRlbXB0QXQ6IG5ldyBEYXRlKGl0ZW0ubmV4dEF0dGVtcHRBdCkudG9JU09TdHJpbmcoKSxcclxuICAgICAgICAgICAgbGFzdEVycm9yOiBpdGVtLmxhc3RFcnJvclxyXG4gICAgICAgIH0pKTtcclxuXHJcbiAgICAgICAgY29uc3QgcGF5bG9hZCA9IHtcclxuICAgICAgICAgICAgcGF0aDogZ2V0Q29ubmVjdG9yUXVldWVQYXRoKCksXHJcbiAgICAgICAgICAgIHN0YXRzOiB7XHJcbiAgICAgICAgICAgICAgICAuLi5zdGF0cyxcclxuICAgICAgICAgICAgICAgIG9sZGVzdEVucXVldWVkQXQ6IHN0YXRzLm9sZGVzdEVucXVldWVkQXQgPyBuZXcgRGF0ZShzdGF0cy5vbGRlc3RFbnF1ZXVlZEF0KS50b0lTT1N0cmluZygpIDogbnVsbFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzYW1wbGVcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBpZiAoQm9vbGVhbihmbGFncy5qc29uKSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShwYXlsb2FkLCBudWxsLCAyKSk7XHJcbiAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc29sZS5sb2coJ1xcbkNvbm5lY3RvciBRdWV1ZVxcbicpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGAgIHBhdGg6ICAgICAgICAgJHtwYXlsb2FkLnBhdGh9YCk7XHJcbiAgICAgICAgY29uc29sZS5sb2coYCAgcGVuZGluZzogICAgICAke3BheWxvYWQuc3RhdHMucGVuZGluZ31gKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhgICByZWFkeTogICAgICAgICR7cGF5bG9hZC5zdGF0cy5yZWFkeX1gKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhgICBiYWNrb2ZmOiAgICAgICR7cGF5bG9hZC5zdGF0cy5iYWNrb2ZmfWApO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGAgIG1heF9hdHRlbXB0czogJHtwYXlsb2FkLnN0YXRzLm1heEF0dGVtcHRzfWApO1xyXG4gICAgICAgIGlmIChwYXlsb2FkLnN0YXRzLm9sZGVzdEVucXVldWVkQXQpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coYCAgb2xkZXN0OiAgICAgICAke3BheWxvYWQuc3RhdHMub2xkZXN0RW5xdWV1ZWRBdH1gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHBheWxvYWQuc2FtcGxlLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ1xcbiAgc2FtcGxlOicpO1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJvdyBvZiBwYXlsb2FkLnNhbXBsZSkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXHJcbiAgICAgICAgICAgICAgICAgICAgYCAgICBzZXE9JHtyb3cuc2VxdWVuY2V9IGF0dGVtcHRzPSR7cm93LmF0dGVtcHRzfSBuZXh0PSR7cm93Lm5leHRBdHRlbXB0QXR9YCArXHJcbiAgICAgICAgICAgICAgICAgICAgYCR7cm93Lmxhc3RFcnJvciA/IGAgZXJyb3I9JHtyb3cubGFzdEVycm9yfWAgOiAnJ31gXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnNvbGUubG9nKCcnKTtcclxuICAgICAgICByZXR1cm4gMDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc2FmZUFjdGlvbiA9PT0gJ2xvZ3MnKSB7XHJcbiAgICAgICAgY29uc3QgbGltaXQgPSBwYXJzZVBvc2l0aXZlSW50ZWdlckZsYWcoZmxhZ3MubGltaXQsIDUwKTtcclxuICAgICAgICBjb25zdCBjbGVhciA9IEJvb2xlYW4oZmxhZ3MuY2xlYXIpO1xyXG4gICAgICAgIGNvbnN0IGRyeVJ1biA9IEJvb2xlYW4oZmxhZ3NbJ2RyeS1ydW4nXSk7XHJcbiAgICAgICAgY29uc3QgY29uZmlybSA9IEJvb2xlYW4oZmxhZ3MuY29uZmlybSk7XHJcbiAgICAgICAgY29uc3QgY3VycmVudEVudHJpZXMgPSByZWFkQ2xpT3BzTG9nKGxpbWl0KS5tYXAoKGVudHJ5KSA9PiAoe1xyXG4gICAgICAgICAgICAuLi5lbnRyeSxcclxuICAgICAgICAgICAgaXNvVGltZTogbmV3IERhdGUoZW50cnkudGltZXN0YW1wKS50b0lTT1N0cmluZygpXHJcbiAgICAgICAgfSkpO1xyXG4gICAgICAgIGNvbnN0IGZpbGVQYXRoID0gZ2V0Q2xpT3BzTG9nUGF0aCgpO1xyXG5cclxuICAgICAgICBpZiAoY2xlYXIpIHtcclxuICAgICAgICAgICAgaWYgKCFkcnlSdW4gJiYgIWNvbmZpcm0pIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ2Nvbm5lY3Rvcl9xdWV1ZV9sb2dzX2NsZWFyX3JlcXVpcmVzX2NvbmZpcm06IHBhc3MgLS1jb25maXJtIChvciB1c2UgLS1kcnktcnVuKS4nKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoZHJ5UnVuKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwYXlsb2FkID0geyBkcnlSdW46IHRydWUsIHBhdGg6IGZpbGVQYXRoLCByZW1vdmFibGVFbnRyaWVzOiBjdXJyZW50RW50cmllcy5sZW5ndGggfTtcclxuICAgICAgICAgICAgICAgIGlmIChCb29sZWFuKGZsYWdzLmpzb24pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkocGF5bG9hZCwgbnVsbCwgMikpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgY29ubmVjdG9yX3F1ZXVlX2xvZ3NfY2xlYXJfZHJ5X3J1bjogcGF0aD0ke2ZpbGVQYXRofSByZW1vdmFibGVfZW50cmllcz0ke2N1cnJlbnRFbnRyaWVzLmxlbmd0aH1gKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGNsZWFyQ2xpT3BzTG9nKCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwYXlsb2FkID0geyBkcnlSdW46IGZhbHNlLCAuLi5yZXN1bHQgfTtcclxuICAgICAgICAgICAgICAgIGlmIChCb29sZWFuKGZsYWdzLmpzb24pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkocGF5bG9hZCwgbnVsbCwgMikpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgY29ubmVjdG9yX3F1ZXVlX2xvZ3NfY2xlYXI6IGNsZWFyZWQ9JHtyZXN1bHQuY2xlYXJlZH0gcGF0aD0ke3Jlc3VsdC5wYXRofWApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgcGF5bG9hZCA9IHtcclxuICAgICAgICAgICAgcGF0aDogZmlsZVBhdGgsXHJcbiAgICAgICAgICAgIGNvdW50OiBjdXJyZW50RW50cmllcy5sZW5ndGgsXHJcbiAgICAgICAgICAgIGVudHJpZXM6IGN1cnJlbnRFbnRyaWVzXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgaWYgKEJvb2xlYW4oZmxhZ3MuanNvbikpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkocGF5bG9hZCwgbnVsbCwgMikpO1xyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnNvbGUubG9nKCdcXG5Db25uZWN0b3IgUXVldWUgT3BzIExvZ1xcbicpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGAgIHBhdGg6ICAke3BheWxvYWQucGF0aH1gKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhgICBjb3VudDogJHtwYXlsb2FkLmNvdW50fWApO1xyXG4gICAgICAgIGlmIChjdXJyZW50RW50cmllcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCcnKTtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBjdXJyZW50RW50cmllcykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZGV0YWlscyA9IGVudHJ5LmRldGFpbHMgPyBgIGRldGFpbHM9JHtKU09OLnN0cmluZ2lmeShlbnRyeS5kZXRhaWxzKX1gIDogJyc7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgICAke2VudHJ5Lmlzb1RpbWV9ICR7ZW50cnkuc3RhdHVzfSAke2VudHJ5Lm9wZXJhdGlvbn0ke2RldGFpbHN9YCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc29sZS5sb2coJycpO1xyXG4gICAgICAgIHJldHVybiAwO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChzYWZlQWN0aW9uID09PSAncHVyZ2UnKSB7XHJcbiAgICAgICAgY29uc3QgZHJ5UnVuID0gQm9vbGVhbihmbGFnc1snZHJ5LXJ1biddKTtcclxuICAgICAgICBjb25zdCBjb25maXJtID0gQm9vbGVhbihmbGFncy5jb25maXJtKTtcclxuICAgICAgICBjb25zdCBhbGwgPSBCb29sZWFuKGZsYWdzLmFsbCk7XHJcbiAgICAgICAgY29uc3Qgb2xkZXJUaGFuSG91cnMgPSBwYXJzZVBvc2l0aXZlTnVtYmVyRmxhZyhmbGFnc1snb2xkZXItdGhhbi1ob3VycyddLCAwKTtcclxuICAgICAgICBjb25zdCBtaW5BdHRlbXB0cyA9IHBhcnNlUG9zaXRpdmVOdW1iZXJGbGFnKGZsYWdzWydtaW4tYXR0ZW1wdHMnXSwgMCk7XHJcbiAgICAgICAgY29uc3QgcXVldWVQYXRoID0gZ2V0Q29ubmVjdG9yUXVldWVQYXRoKCk7XHJcblxyXG4gICAgICAgIGlmICghZHJ5UnVuICYmICFjb25maXJtKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ2Nvbm5lY3Rvcl9xdWV1ZV9wdXJnZV9yZXF1aXJlc19jb25maXJtOiBwYXNzIC0tY29uZmlybSAob3IgdXNlIC0tZHJ5LXJ1bikuJyk7XHJcbiAgICAgICAgICAgIGFwcGVuZENsaU9wc0xvZ0VudHJ5KHtcclxuICAgICAgICAgICAgICAgIG9wZXJhdGlvbjogJ2Nvbm5lY3Rvci5xdWV1ZS5wdXJnZScsXHJcbiAgICAgICAgICAgICAgICBzdGF0dXM6ICdlcnJvcicsXHJcbiAgICAgICAgICAgICAgICBkZXRhaWxzOiB7IHJlYXNvbjogJ21pc3NpbmdfY29uZmlybScsIGRyeVJ1biwgYWxsLCBvbGRlclRoYW5Ib3VycywgbWluQXR0ZW1wdHMsIHF1ZXVlUGF0aCB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByZXR1cm4gMTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghYWxsICYmIG9sZGVyVGhhbkhvdXJzIDw9IDAgJiYgbWluQXR0ZW1wdHMgPD0gMCkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdjb25uZWN0b3JfcXVldWVfcHVyZ2VfcmVxdWlyZXNfZmlsdGVyOiB1c2UgLS1hbGwgb3IgLS1vbGRlci10aGFuLWhvdXJzIG9yIC0tbWluLWF0dGVtcHRzLicpO1xyXG4gICAgICAgICAgICBhcHBlbmRDbGlPcHNMb2dFbnRyeSh7XHJcbiAgICAgICAgICAgICAgICBvcGVyYXRpb246ICdjb25uZWN0b3IucXVldWUucHVyZ2UnLFxyXG4gICAgICAgICAgICAgICAgc3RhdHVzOiAnZXJyb3InLFxyXG4gICAgICAgICAgICAgICAgZGV0YWlsczogeyByZWFzb246ICdtaXNzaW5nX2ZpbHRlcicsIGRyeVJ1biwgYWxsLCBvbGRlclRoYW5Ib3VycywgbWluQXR0ZW1wdHMsIHF1ZXVlUGF0aCB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByZXR1cm4gMTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChkcnlSdW4pIHtcclxuICAgICAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcclxuICAgICAgICAgICAgY29uc3QgY2FuZGlkYXRlcyA9IGxpc3RRdWV1ZWRDb25uZWN0b3JFdmVudHMoKTtcclxuICAgICAgICAgICAgY29uc3QgcmVtb3ZhYmxlID0gY2FuZGlkYXRlcy5maWx0ZXIoaXRlbSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYWxsKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG9sZGVyTWF0Y2ggPSBvbGRlclRoYW5Ib3VycyA+IDAgPyAobm93IC0gaXRlbS5lbnF1ZXVlZEF0KSA+PSBvbGRlclRoYW5Ib3VycyAqIDYwICogNjAgKiAxMDAwIDogZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhdHRlbXB0c01hdGNoID0gbWluQXR0ZW1wdHMgPiAwID8gaXRlbS5hdHRlbXB0cyA+PSBtaW5BdHRlbXB0cyA6IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9sZGVyTWF0Y2ggfHwgYXR0ZW1wdHNNYXRjaDtcclxuICAgICAgICAgICAgfSkubGVuZ3RoO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgcGF5bG9hZCA9IHsgZHJ5UnVuOiB0cnVlLCByZW1vdmFibGUsIHRvdGFsOiBjYW5kaWRhdGVzLmxlbmd0aCB9O1xyXG4gICAgICAgICAgICBhcHBlbmRDbGlPcHNMb2dFbnRyeSh7XHJcbiAgICAgICAgICAgICAgICBvcGVyYXRpb246ICdjb25uZWN0b3IucXVldWUucHVyZ2UnLFxyXG4gICAgICAgICAgICAgICAgc3RhdHVzOiAnZHJ5X3J1bicsXHJcbiAgICAgICAgICAgICAgICBkZXRhaWxzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgYWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIG9sZGVyVGhhbkhvdXJzLFxyXG4gICAgICAgICAgICAgICAgICAgIG1pbkF0dGVtcHRzLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlbW92YWJsZSxcclxuICAgICAgICAgICAgICAgICAgICB0b3RhbDogY2FuZGlkYXRlcy5sZW5ndGgsXHJcbiAgICAgICAgICAgICAgICAgICAgcXVldWVQYXRoXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBpZiAoQm9vbGVhbihmbGFncy5qc29uKSkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkocGF5bG9hZCwgbnVsbCwgMikpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYGNvbm5lY3Rvcl9xdWV1ZV9wdXJnZV9kcnlfcnVuOiByZW1vdmFibGU9JHtyZW1vdmFibGV9IHRvdGFsPSR7Y2FuZGlkYXRlcy5sZW5ndGh9YCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHB1cmdlQ29ubmVjdG9yUXVldWUoe1xyXG4gICAgICAgICAgICBhbGwsXHJcbiAgICAgICAgICAgIG9sZGVyVGhhbkhvdXJzOiBvbGRlclRoYW5Ib3VycyA+IDAgPyBvbGRlclRoYW5Ib3VycyA6IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgbWluQXR0ZW1wdHM6IG1pbkF0dGVtcHRzID4gMCA/IG1pbkF0dGVtcHRzIDogdW5kZWZpbmVkXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSB7IHJlbW92ZWQ6IHJlc3VsdC5yZW1vdmVkLCByZW1haW5pbmc6IHJlc3VsdC5yZW1haW5pbmcgfTtcclxuICAgICAgICBhcHBlbmRDbGlPcHNMb2dFbnRyeSh7XHJcbiAgICAgICAgICAgIG9wZXJhdGlvbjogJ2Nvbm5lY3Rvci5xdWV1ZS5wdXJnZScsXHJcbiAgICAgICAgICAgIHN0YXR1czogJ3N1Y2Nlc3MnLFxyXG4gICAgICAgICAgICBkZXRhaWxzOiB7XHJcbiAgICAgICAgICAgICAgICBhbGwsXHJcbiAgICAgICAgICAgICAgICBvbGRlclRoYW5Ib3Vyczogb2xkZXJUaGFuSG91cnMgPiAwID8gb2xkZXJUaGFuSG91cnMgOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgbWluQXR0ZW1wdHM6IG1pbkF0dGVtcHRzID4gMCA/IG1pbkF0dGVtcHRzIDogbnVsbCxcclxuICAgICAgICAgICAgICAgIHJlbW92ZWQ6IHJlc3VsdC5yZW1vdmVkLFxyXG4gICAgICAgICAgICAgICAgcmVtYWluaW5nOiByZXN1bHQucmVtYWluaW5nLFxyXG4gICAgICAgICAgICAgICAgcXVldWVQYXRoXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAoQm9vbGVhbihmbGFncy5qc29uKSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShwYXlsb2FkLCBudWxsLCAyKSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coYGNvbm5lY3Rvcl9xdWV1ZV9wdXJnZTogcmVtb3ZlZD0ke3Jlc3VsdC5yZW1vdmVkfSByZW1haW5pbmc9JHtyZXN1bHQucmVtYWluaW5nfWApO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gMDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBkcmFpblxyXG4gICAgY29uc3QgdG9rZW4gPSByZXNvbHZlVG9rZW4oKTtcclxuICAgIGlmICghdG9rZW4pIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdjb25uZWN0b3JfcXVldWVfZHJhaW5fcmVxdWlyZXNfYXV0aDogcnVuIGAwY3R4IGF1dGggbG9naW5gIGZpcnN0LicpO1xyXG4gICAgICAgIGFwcGVuZENsaU9wc0xvZ0VudHJ5KHtcclxuICAgICAgICAgICAgb3BlcmF0aW9uOiAnY29ubmVjdG9yLnF1ZXVlLmRyYWluJyxcclxuICAgICAgICAgICAgc3RhdHVzOiAnZXJyb3InLFxyXG4gICAgICAgICAgICBkZXRhaWxzOiB7IHJlYXNvbjogJ21pc3NpbmdfYXV0aCcsIHF1ZXVlUGF0aDogZ2V0Q29ubmVjdG9yUXVldWVQYXRoKCkgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiAxO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHJlZ2lzdHJhdGlvbiA9IHJlYWRDb25uZWN0b3JTdGF0ZSgpO1xyXG4gICAgaWYgKCFyZWdpc3RyYXRpb24pIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdjb25uZWN0b3JfcXVldWVfZHJhaW5fcmVxdWlyZXNfcmVnaXN0cmF0aW9uOiBydW4gYDBjdHggY29ubmVjdG9yIHJlZ2lzdGVyYCBmaXJzdC4nKTtcclxuICAgICAgICBhcHBlbmRDbGlPcHNMb2dFbnRyeSh7XHJcbiAgICAgICAgICAgIG9wZXJhdGlvbjogJ2Nvbm5lY3Rvci5xdWV1ZS5kcmFpbicsXHJcbiAgICAgICAgICAgIHN0YXR1czogJ2Vycm9yJyxcclxuICAgICAgICAgICAgZGV0YWlsczogeyByZWFzb246ICdtaXNzaW5nX3JlZ2lzdHJhdGlvbicsIHF1ZXVlUGF0aDogZ2V0Q29ubmVjdG9yUXVldWVQYXRoKCkgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiAxO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IG1heEJhdGNoZXMgPSBwYXJzZVBvc2l0aXZlSW50ZWdlckZsYWcoZmxhZ3NbJ21heC1iYXRjaGVzJ10sIDEwKTtcclxuICAgIGNvbnN0IGJhdGNoU2l6ZSA9IE1hdGgubWluKDUwMCwgcGFyc2VQb3NpdGl2ZUludGVnZXJGbGFnKGZsYWdzWydiYXRjaC1zaXplJ10sIDIwMCkpO1xyXG4gICAgY29uc3Qgd2FpdCA9IEJvb2xlYW4oZmxhZ3Mud2FpdCk7XHJcbiAgICBjb25zdCBzdHJpY3QgPSBCb29sZWFuKGZsYWdzLnN0cmljdCkgfHwgQm9vbGVhbihmbGFnc1snZmFpbC1vbi1yZXRyeSddKTtcclxuICAgIGNvbnN0IHRpbWVvdXRNcyA9IHBhcnNlUG9zaXRpdmVJbnRlZ2VyRmxhZyhmbGFnc1sndGltZW91dC1tcyddLCAxMjBfMDAwKTtcclxuICAgIGNvbnN0IHBvbGxNcyA9IE1hdGgubWF4KDIwMCwgcGFyc2VQb3NpdGl2ZUludGVnZXJGbGFnKGZsYWdzWydwb2xsLW1zJ10sIDFfMDAwKSk7XHJcbiAgICBjb25zdCBxdWV1ZVBhdGggPSBnZXRDb25uZWN0b3JRdWV1ZVBhdGgoKTtcclxuICAgIGNvbnN0IGRyYWluZWQgPSBhd2FpdCBkcmFpbkNvbm5lY3RvclF1ZXVlKHtcclxuICAgICAgICBtYWNoaW5lSWQ6IHJlZ2lzdHJhdGlvbi5tYWNoaW5lSWQsXHJcbiAgICAgICAgdGVuYW50SWQ6IHJlZ2lzdHJhdGlvbi50ZW5hbnRJZCxcclxuICAgICAgICBhY2Nlc3NUb2tlbjogdG9rZW4uYWNjZXNzVG9rZW4sXHJcbiAgICAgICAgbWF4QmF0Y2hlcyxcclxuICAgICAgICBiYXRjaFNpemUsXHJcbiAgICAgICAgd2FpdCxcclxuICAgICAgICB0aW1lb3V0TXMsXHJcbiAgICAgICAgcG9sbE1zXHJcbiAgICB9LCB7XHJcbiAgICAgICAgbm93OiAoKSA9PiBEYXRlLm5vdygpLFxyXG4gICAgICAgIHNsZWVwOiAobXM6IG51bWJlcikgPT4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKSksXHJcbiAgICAgICAgZ2V0UmVhZHlFdmVudHM6IGdldFJlYWR5Q29ubmVjdG9yRXZlbnRzLFxyXG4gICAgICAgIHNlbmRFdmVudHM6IHNlbmRDb25uZWN0b3JFdmVudHMsXHJcbiAgICAgICAgbWFya0V2ZW50c0RlbGl2ZXJlZDogbWFya0Nvbm5lY3RvckV2ZW50c0RlbGl2ZXJlZCxcclxuICAgICAgICBtYXJrRXZlbnRzRmFpbGVkOiBtYXJrQ29ubmVjdG9yRXZlbnRzRmFpbGVkLFxyXG4gICAgICAgIGdldFF1ZXVlU3RhdHM6IGdldENvbm5lY3RvclF1ZXVlU3RhdHMsXHJcbiAgICAgICAgb25CcmlkZ2VVbnN1cHBvcnRlZDogKCkgPT4ge1xyXG4gICAgICAgICAgICByZWdpc3RyYXRpb24ucnVudGltZS5ldmVudEJyaWRnZVN1cHBvcnRlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICByZWdpc3RyYXRpb24ucnVudGltZS5ldmVudEJyaWRnZUVycm9yID0gbnVsbDtcclxuICAgICAgICAgICAgcmVnaXN0cmF0aW9uLnVwZGF0ZWRBdCA9IERhdGUubm93KCk7XHJcbiAgICAgICAgICAgIHdyaXRlQ29ubmVjdG9yU3RhdGUocmVnaXN0cmF0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICByZWdpc3RyYXRpb24ucnVudGltZS5ldmVudFF1ZXVlUGVuZGluZyA9IGRyYWluZWQucXVldWUucGVuZGluZztcclxuICAgIHJlZ2lzdHJhdGlvbi5ydW50aW1lLmV2ZW50UXVldWVSZWFkeSA9IGRyYWluZWQucXVldWUucmVhZHk7XHJcbiAgICByZWdpc3RyYXRpb24ucnVudGltZS5ldmVudFF1ZXVlQmFja29mZiA9IGRyYWluZWQucXVldWUuYmFja29mZjtcclxuICAgIHJlZ2lzdHJhdGlvbi5ydW50aW1lLmV2ZW50QnJpZGdlRXJyb3IgPSBkcmFpbmVkLmxhc3RFcnJvcjtcclxuICAgIHJlZ2lzdHJhdGlvbi51cGRhdGVkQXQgPSBEYXRlLm5vdygpO1xyXG4gICAgd3JpdGVDb25uZWN0b3JTdGF0ZShyZWdpc3RyYXRpb24pO1xyXG5cclxuICAgIGNvbnN0IHJlc3BvbnNlID0ge1xyXG4gICAgICAgIHNlbnQ6IGRyYWluZWQuc2VudCxcclxuICAgICAgICBmYWlsZWQ6IGRyYWluZWQuZmFpbGVkLFxyXG4gICAgICAgIGJhdGNoZXM6IGRyYWluZWQuYmF0Y2hlcyxcclxuICAgICAgICBxdWV1ZTogZHJhaW5lZC5xdWV1ZSxcclxuICAgICAgICB3YWl0OiB7XHJcbiAgICAgICAgICAgIGVuYWJsZWQ6IHdhaXQsXHJcbiAgICAgICAgICAgIHN0cmljdCxcclxuICAgICAgICAgICAgdGltZW91dE1zOiBkcmFpbmVkLndhaXQudGltZW91dE1zLFxyXG4gICAgICAgICAgICBwb2xsTXM6IGRyYWluZWQud2FpdC5wb2xsTXMsXHJcbiAgICAgICAgICAgIGVsYXBzZWRNczogZHJhaW5lZC53YWl0LmVsYXBzZWRNcyxcclxuICAgICAgICAgICAgdGltZWRPdXQ6IGRyYWluZWQud2FpdC50aW1lZE91dCxcclxuICAgICAgICAgICAgaGl0TWF4QmF0Y2hlczogZHJhaW5lZC53YWl0LmhpdE1heEJhdGNoZXMsXHJcbiAgICAgICAgICAgIHJlYXNvbjogZHJhaW5lZC53YWl0LnJlYXNvblxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgbGFzdEVycm9yOiBkcmFpbmVkLmxhc3RFcnJvclxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBzdGF0dXMgPSB3YWl0XHJcbiAgICAgICAgPyAoZHJhaW5lZC5xdWV1ZS5wZW5kaW5nID09PSAwICYmICghc3RyaWN0IHx8IGRyYWluZWQuZmFpbGVkID09PSAwKSA/ICdzdWNjZXNzJyA6ICdwYXJ0aWFsJylcclxuICAgICAgICA6IChkcmFpbmVkLmZhaWxlZCA+IDAgPyAncGFydGlhbCcgOiAnc3VjY2VzcycpO1xyXG4gICAgYXBwZW5kQ2xpT3BzTG9nRW50cnkoe1xyXG4gICAgICAgIG9wZXJhdGlvbjogJ2Nvbm5lY3Rvci5xdWV1ZS5kcmFpbicsXHJcbiAgICAgICAgc3RhdHVzLFxyXG4gICAgICAgIGRldGFpbHM6IHtcclxuICAgICAgICAgICAgcXVldWVQYXRoLFxyXG4gICAgICAgICAgICBtYXhCYXRjaGVzLFxyXG4gICAgICAgICAgICBiYXRjaFNpemUsXHJcbiAgICAgICAgICAgIHdhaXQsXHJcbiAgICAgICAgICAgIHN0cmljdCxcclxuICAgICAgICAgICAgdGltZW91dE1zOiB3YWl0ID8gdGltZW91dE1zIDogbnVsbCxcclxuICAgICAgICAgICAgcG9sbE1zOiB3YWl0ID8gcG9sbE1zIDogbnVsbCxcclxuICAgICAgICAgICAgc2VudDogZHJhaW5lZC5zZW50LFxyXG4gICAgICAgICAgICBmYWlsZWQ6IGRyYWluZWQuZmFpbGVkLFxyXG4gICAgICAgICAgICBiYXRjaGVzOiBkcmFpbmVkLmJhdGNoZXMsXHJcbiAgICAgICAgICAgIHBlbmRpbmc6IGRyYWluZWQucXVldWUucGVuZGluZyxcclxuICAgICAgICAgICAgcmVhZHk6IGRyYWluZWQucXVldWUucmVhZHksXHJcbiAgICAgICAgICAgIGJhY2tvZmY6IGRyYWluZWQucXVldWUuYmFja29mZixcclxuICAgICAgICAgICAgcmVhc29uOiBkcmFpbmVkLndhaXQucmVhc29uLFxyXG4gICAgICAgICAgICBsYXN0RXJyb3I6IGRyYWluZWQubGFzdEVycm9yXHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKEJvb2xlYW4oZmxhZ3MuanNvbikpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShyZXNwb25zZSwgbnVsbCwgMikpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zb2xlLmxvZygnXFxuQ29ubmVjdG9yIFF1ZXVlIERyYWluXFxuJyk7XHJcbiAgICAgICAgY29uc29sZS5sb2coYCAgc2VudDogICAgICAgICAke2RyYWluZWQuc2VudH1gKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhgICBmYWlsZWQ6ICAgICAgICR7ZHJhaW5lZC5mYWlsZWR9YCk7XHJcbiAgICAgICAgY29uc29sZS5sb2coYCAgYmF0Y2hlczogICAgICAke2RyYWluZWQuYmF0Y2hlc31gKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhgICBwZW5kaW5nOiAgICAgICR7ZHJhaW5lZC5xdWV1ZS5wZW5kaW5nfWApO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGAgIHJlYWR5OiAgICAgICAgJHtkcmFpbmVkLnF1ZXVlLnJlYWR5fWApO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGAgIGJhY2tvZmY6ICAgICAgJHtkcmFpbmVkLnF1ZXVlLmJhY2tvZmZ9YCk7XHJcbiAgICAgICAgaWYgKHdhaXQpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coYCAgd2FpdDogICAgICAgICB0cnVlYCk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGAgIHN0cmljdDogICAgICAgJHtzdHJpY3R9YCk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGAgIHRpbWVvdXRfbXM6ICAgJHtkcmFpbmVkLndhaXQudGltZW91dE1zfWApO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgICBlbGFwc2VkX21zOiAgICR7ZHJhaW5lZC53YWl0LmVsYXBzZWRNc31gKTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coYCAgcmVhc29uOiAgICAgICAke2RyYWluZWQud2FpdC5yZWFzb259YCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChkcmFpbmVkLmxhc3RFcnJvcikge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgICBlcnJvcjogICAgICAgICR7ZHJhaW5lZC5sYXN0RXJyb3J9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnNvbGUubG9nKCcnKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAod2FpdCkge1xyXG4gICAgICAgIGlmIChkcmFpbmVkLnF1ZXVlLnBlbmRpbmcgPiAwKSByZXR1cm4gMTtcclxuICAgICAgICByZXR1cm4gc3RyaWN0ICYmIGRyYWluZWQuZmFpbGVkID4gMCA/IDEgOiAwO1xyXG4gICAgfVxyXG4gICAgaWYgKHN0cmljdCAmJiBkcmFpbmVkLmZhaWxlZCA+IDApIHJldHVybiAxO1xyXG4gICAgcmV0dXJuIGRyYWluZWQuZmFpbGVkID4gMCA/IDEgOiAwO1xyXG59XHJcblxyXG5hc3luYyBmdW5jdGlvbiBjb21tYW5kQ29ubmVjdG9yKGFjdGlvbjogc3RyaW5nIHwgdW5kZWZpbmVkLCBmbGFnczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgYm9vbGVhbj4pOiBQcm9taXNlPG51bWJlcj4ge1xyXG4gICAgY29uc3QgdmFsaWRBY3Rpb25zID0gWydpbnN0YWxsJywgJ2VuYWJsZScsICdkaXNhYmxlJywgJ3VuaW5zdGFsbCcsICdzdGF0dXMnLCAnc3RhcnQnLCAnc3RvcCcsICdyZXN0YXJ0JywgJ3ZlcmlmeScsICdyZWdpc3RlcicsICdydW4nLCAncXVldWUnLCAnbG9ncyddO1xyXG4gICAgaWYgKCFhY3Rpb24gfHwgIXZhbGlkQWN0aW9ucy5pbmNsdWRlcyhhY3Rpb24pKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihgVW5rbm93biBjb25uZWN0b3IgYWN0aW9uOiAnJHthY3Rpb24gPz8gJyd9J2ApO1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYFZhbGlkIGFjdGlvbnM6ICR7dmFsaWRBY3Rpb25zLmpvaW4oJywgJyl9YCk7XHJcbiAgICAgICAgcmV0dXJuIDE7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGFjdGlvbiA9PT0gJ3F1ZXVlJykge1xyXG4gICAgICAgIHJldHVybiBjb21tYW5kQ29ubmVjdG9yUXVldWUodW5kZWZpbmVkLCBmbGFncyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGFjdGlvbiA9PT0gJ3J1bicpIHtcclxuICAgICAgICBjb25zdCBpbnRlcnZhbFJhdyA9IGZsYWdzWydpbnRlcnZhbC1tcyddO1xyXG4gICAgICAgIGNvbnN0IGludGVydmFsTXMgPSB0eXBlb2YgaW50ZXJ2YWxSYXcgPT09ICdzdHJpbmcnID8gTnVtYmVyKGludGVydmFsUmF3KSA6IHVuZGVmaW5lZDtcclxuICAgICAgICByZXR1cm4gcnVuQ29ubmVjdG9yUnVudGltZSh7XHJcbiAgICAgICAgICAgIG9uY2U6IEJvb2xlYW4oZmxhZ3Mub25jZSksXHJcbiAgICAgICAgICAgIHF1aWV0OiBCb29sZWFuKGZsYWdzLnF1aWV0KSxcclxuICAgICAgICAgICAgYXV0b1N0YXJ0RGFlbW9uOiAhQm9vbGVhbihmbGFnc1snbm8tZGFlbW9uLWF1dG9zdGFydCddKSxcclxuICAgICAgICAgICAgaW50ZXJ2YWxNczogTnVtYmVyLmlzRmluaXRlKGludGVydmFsTXMpID8gaW50ZXJ2YWxNcyA6IHVuZGVmaW5lZFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChhY3Rpb24gPT09ICd2ZXJpZnknKSB7XHJcbiAgICAgICAgY29uc3QgZGFlbW9uID0gYXdhaXQgaXNEYWVtb25SZWFjaGFibGUoKTtcclxuICAgICAgICBjb25zdCByZWdpc3RyYXRpb24gPSByZWFkQ29ubmVjdG9yU3RhdGUoKTtcclxuICAgICAgICBjb25zdCB0b2tlbiA9IHJlc29sdmVUb2tlbigpO1xyXG4gICAgICAgIGNvbnN0IHJlcXVpcmVDbG91ZCA9IEJvb2xlYW4oZmxhZ3MuY2xvdWQpIHx8IEJvb2xlYW4oZmxhZ3NbJ3JlcXVpcmUtY2xvdWQnXSk7XHJcbiAgICAgICAgY29uc3QgYXNKc29uID0gQm9vbGVhbihmbGFncy5qc29uKTtcclxuICAgICAgICBsZXQgY2xvdWRPayA9ICFyZXF1aXJlQ2xvdWQ7XHJcbiAgICAgICAgbGV0IGNsb3VkRXJyb3I6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG5cclxuICAgICAgICBpZiAocmVxdWlyZUNsb3VkICYmIHRva2VuICYmIHJlZ2lzdHJhdGlvbikge1xyXG4gICAgICAgICAgICBjb25zdCBjbG91ZENhcGFiaWxpdGllcyA9IGF3YWl0IGZldGNoQ29ubmVjdG9yQ2FwYWJpbGl0aWVzKHRva2VuLmFjY2Vzc1Rva2VuLCByZWdpc3RyYXRpb24ubWFjaGluZUlkKTtcclxuICAgICAgICAgICAgY2xvdWRPayA9IGNsb3VkQ2FwYWJpbGl0aWVzLm9rO1xyXG4gICAgICAgICAgICBjbG91ZEVycm9yID0gY2xvdWRDYXBhYmlsaXRpZXMub2sgPyBudWxsIDogKGNsb3VkQ2FwYWJpbGl0aWVzLmVycm9yID8/ICdjbG91ZF9jYXBhYmlsaXRpZXNfY2hlY2tfZmFpbGVkJyk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChyZXF1aXJlQ2xvdWQgJiYgKCF0b2tlbiB8fCAhcmVnaXN0cmF0aW9uKSkge1xyXG4gICAgICAgICAgICBjbG91ZE9rID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGNsb3VkRXJyb3IgPSAnY2xvdWRfdmVyaWZpY2F0aW9uX3JlcXVpcmVzX2F1dGhfYW5kX3JlZ2lzdHJhdGlvbic7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBjaGVja3MgPSB7XHJcbiAgICAgICAgICAgIGRhZW1vbjogZGFlbW9uLm9rLFxyXG4gICAgICAgICAgICByZWdpc3RyYXRpb246IEJvb2xlYW4ocmVnaXN0cmF0aW9uKSxcclxuICAgICAgICAgICAgYXV0aDogQm9vbGVhbih0b2tlbiksXHJcbiAgICAgICAgICAgIGNsb3VkOiBjbG91ZE9rXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgY29uc3Qgb2sgPSBjaGVja3MuZGFlbW9uICYmIGNoZWNrcy5yZWdpc3RyYXRpb24gJiYgY2hlY2tzLmF1dGggJiYgY2hlY2tzLmNsb3VkO1xyXG5cclxuICAgICAgICBjb25zdCBwYXlsb2FkID0ge1xyXG4gICAgICAgICAgICBvayxcclxuICAgICAgICAgICAgcmVxdWlyZUNsb3VkLFxyXG4gICAgICAgICAgICBjaGVja3MsXHJcbiAgICAgICAgICAgIG1hY2hpbmVJZDogcmVnaXN0cmF0aW9uPy5tYWNoaW5lSWQgPz8gbnVsbCxcclxuICAgICAgICAgICAgZGFlbW9uRXJyb3I6IGRhZW1vbi5vayA/IG51bGwgOiAoZGFlbW9uLmVycm9yID8/ICd1bmtub3duJyksXHJcbiAgICAgICAgICAgIGNsb3VkRXJyb3JcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBpZiAoYXNKc29uKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHBheWxvYWQsIG51bGwsIDIpKTtcclxuICAgICAgICB9IGVsc2UgaWYgKCFCb29sZWFuKGZsYWdzLnF1aWV0KSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnXFxuQ29ubmVjdG9yIFZlcmlmeVxcbicpO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgICBkYWVtb246ICAgICAgICR7Y2hlY2tzLmRhZW1vbiA/ICdvaycgOiAnbWlzc2luZyd9YCk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGAgIHJlZ2lzdHJhdGlvbjogJHtjaGVja3MucmVnaXN0cmF0aW9uID8gJ29rJyA6ICdtaXNzaW5nJ31gKTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coYCAgYXV0aDogICAgICAgICAke2NoZWNrcy5hdXRoID8gJ29rJyA6ICdtaXNzaW5nJ31gKTtcclxuICAgICAgICAgICAgaWYgKHJlcXVpcmVDbG91ZCkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYCAgY2xvdWQ6ICAgICAgICAke2NoZWNrcy5jbG91ZCA/ICdvaycgOiAnbWlzc2luZyd9YCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHJlZ2lzdHJhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYCAgbWFjaGluZV9pZDogICAke3JlZ2lzdHJhdGlvbi5tYWNoaW5lSWR9YCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCFkYWVtb24ub2sgJiYgZGFlbW9uLmVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgICBkYWVtb25fZXJyb3I6ICR7ZGFlbW9uLmVycm9yfWApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChyZXF1aXJlQ2xvdWQgJiYgY2xvdWRFcnJvcikge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYCAgY2xvdWRfZXJyb3I6ICAke2Nsb3VkRXJyb3J9YCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc29sZS5sb2coJycpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG9rID8gMCA6IDE7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGFjdGlvbiA9PT0gJ3JlZ2lzdGVyJykge1xyXG4gICAgICAgIGNvbnN0IGFzSnNvbiA9IEJvb2xlYW4oZmxhZ3MuanNvbik7XHJcbiAgICAgICAgY29uc3QgdG9rZW4gPSByZXNvbHZlVG9rZW4oKTtcclxuICAgICAgICBpZiAoIXRva2VuKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ2Nvbm5lY3Rvcl9yZWdpc3Rlcl9yZXF1aXJlc19hdXRoOiBydW4gYDBjdHggYXV0aCBsb2dpbmAgZmlyc3QuJyk7XHJcbiAgICAgICAgICAgIGlmIChhc0pzb24pIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHtcclxuICAgICAgICAgICAgICAgICAgICBvazogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6ICdjb25uZWN0b3JfcmVnaXN0ZXJfcmVxdWlyZXNfYXV0aCcsXHJcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ3J1biBgMGN0eCBhdXRoIGxvZ2luYCBmaXJzdC4nXHJcbiAgICAgICAgICAgICAgICB9LCBudWxsLCAyKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBmb3JjZSA9IEJvb2xlYW4oZmxhZ3MuZm9yY2UpO1xyXG4gICAgICAgIGNvbnN0IGxvY2FsT25seSA9IEJvb2xlYW4oZmxhZ3NbJ2xvY2FsLW9ubHknXSk7XHJcbiAgICAgICAgY29uc3QgcmVxdWlyZUNsb3VkID0gQm9vbGVhbihmbGFnc1sncmVxdWlyZS1jbG91ZCddKTtcclxuICAgICAgICBjb25zdCBkYXNoYm9hcmRVcmwgPSBnZXRIb3N0ZWREYXNoYm9hcmRVcmwoKTtcclxuICAgICAgICBjb25zdCB7IHN0YXRlOiBsb2NhbFN0YXRlLCBjcmVhdGVkIH0gPSByZWdpc3RlckNvbm5lY3Rvcih7XHJcbiAgICAgICAgICAgIHRlbmFudElkOiB0b2tlbi50ZW5hbnRJZCB8fCBudWxsLFxyXG4gICAgICAgICAgICB1aVVybDogZGFzaGJvYXJkVXJsLFxyXG4gICAgICAgICAgICBmb3JjZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGxldCBzdGF0ZSA9IGxvY2FsU3RhdGU7XHJcbiAgICAgICAgbGV0IGNsb3VkRXJyb3I6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG4gICAgICAgIGxldCBjbG91ZFJlZ2lzdHJhdGlvblN0YXR1czogJ3NraXBwZWQnIHwgJ2Nvbm5lY3RlZCcgfCAnbG9jYWxfZmFsbGJhY2snID0gJ3NraXBwZWQnO1xyXG5cclxuICAgICAgICBpZiAoIWxvY2FsT25seSkge1xyXG4gICAgICAgICAgICBjb25zdCBjbG91ZFJlc3VsdCA9IGF3YWl0IHJlZ2lzdGVyQ29ubmVjdG9ySW5DbG91ZCh0b2tlbi5hY2Nlc3NUb2tlbiwge1xyXG4gICAgICAgICAgICAgICAgbWFjaGluZUlkOiBsb2NhbFN0YXRlLm1hY2hpbmVJZCxcclxuICAgICAgICAgICAgICAgIHRlbmFudElkOiB0b2tlbi50ZW5hbnRJZCB8fCBudWxsLFxyXG4gICAgICAgICAgICAgICAgdWlVcmw6IGRhc2hib2FyZFVybCxcclxuICAgICAgICAgICAgICAgIHBsYXRmb3JtOiBvcy5wbGF0Zm9ybSgpXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgaWYgKGNsb3VkUmVzdWx0Lm9rKSB7XHJcbiAgICAgICAgICAgICAgICBjbG91ZFJlZ2lzdHJhdGlvblN0YXR1cyA9ICdjb25uZWN0ZWQnO1xyXG4gICAgICAgICAgICAgICAgc3RhdGUgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLi4ubG9jYWxTdGF0ZSxcclxuICAgICAgICAgICAgICAgICAgICB0ZW5hbnRJZDogY2xvdWRSZXN1bHQuZGF0YT8udGVuYW50SWQgPz8gbG9jYWxTdGF0ZS50ZW5hbnRJZCxcclxuICAgICAgICAgICAgICAgICAgICB1cGRhdGVkQXQ6IERhdGUubm93KCksXHJcbiAgICAgICAgICAgICAgICAgICAgcmVnaXN0cmF0aW9uTW9kZTogJ2Nsb3VkJyxcclxuICAgICAgICAgICAgICAgICAgICBjbG91ZDoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RyYXRpb25JZDogY2xvdWRSZXN1bHQuZGF0YT8ucmVnaXN0cmF0aW9uSWQgPz8gbG9jYWxTdGF0ZS5jbG91ZC5yZWdpc3RyYXRpb25JZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtVXJsOiBjbG91ZFJlc3VsdC5kYXRhPy5zdHJlYW1VcmwgPz8gbG9jYWxTdGF0ZS5jbG91ZC5zdHJlYW1VcmwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhcGFiaWxpdGllczogY2xvdWRSZXN1bHQuZGF0YT8uY2FwYWJpbGl0aWVzID8/IGxvY2FsU3RhdGUuY2xvdWQuY2FwYWJpbGl0aWVzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsYXN0SGVhcnRiZWF0QXQ6IGxvY2FsU3RhdGUuY2xvdWQubGFzdEhlYXJ0YmVhdEF0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsYXN0RXJyb3I6IG51bGxcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY2xvdWRSZWdpc3RyYXRpb25TdGF0dXMgPSAnbG9jYWxfZmFsbGJhY2snO1xyXG4gICAgICAgICAgICAgICAgY2xvdWRFcnJvciA9IGNsb3VkUmVzdWx0LmVycm9yID8/ICdjbG91ZF9yZWdpc3RyYXRpb25fZmFpbGVkJztcclxuICAgICAgICAgICAgICAgIHN0YXRlID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIC4uLmxvY2FsU3RhdGUsXHJcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlZEF0OiBEYXRlLm5vdygpLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlZ2lzdHJhdGlvbk1vZGU6ICdsb2NhbCcsXHJcbiAgICAgICAgICAgICAgICAgICAgY2xvdWQ6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLi4ubG9jYWxTdGF0ZS5jbG91ZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGFzdEVycm9yOiBjbG91ZEVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgd3JpdGVDb25uZWN0b3JTdGF0ZShzdGF0ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBwYXlsb2FkID0ge1xyXG4gICAgICAgICAgICBvazogdHJ1ZSxcclxuICAgICAgICAgICAgY3JlYXRlZCxcclxuICAgICAgICAgICAgbWFjaGluZUlkOiBzdGF0ZS5tYWNoaW5lSWQsXHJcbiAgICAgICAgICAgIHRlbmFudElkOiBzdGF0ZS50ZW5hbnRJZCA/PyBudWxsLFxyXG4gICAgICAgICAgICBkYXNoYm9hcmRVcmw6IHN0YXRlLnVpVXJsLFxyXG4gICAgICAgICAgICByZWdpc3RyYXRpb25Nb2RlOiBzdGF0ZS5yZWdpc3RyYXRpb25Nb2RlLFxyXG4gICAgICAgICAgICBjbG91ZFJlZ2lzdHJhdGlvbjogY2xvdWRSZWdpc3RyYXRpb25TdGF0dXMsXHJcbiAgICAgICAgICAgIGNsb3VkUmVnaXN0cmF0aW9uSWQ6IHN0YXRlLmNsb3VkLnJlZ2lzdHJhdGlvbklkID8/IG51bGwsXHJcbiAgICAgICAgICAgIGNsb3VkU3RyZWFtVXJsOiBzdGF0ZS5jbG91ZC5zdHJlYW1VcmwgPz8gbnVsbCxcclxuICAgICAgICAgICAgY2xvdWRFcnJvcixcclxuICAgICAgICAgICAgc3RhdGVQYXRoOiBnZXRDb25uZWN0b3JTdGF0ZVBhdGgoKVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGlmIChhc0pzb24pIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkocGF5bG9hZCwgbnVsbCwgMikpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoIUJvb2xlYW4oZmxhZ3MucXVpZXQpKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBjb25uZWN0b3JfcmVnaXN0cmF0aW9uOiAke2NyZWF0ZWQgPyAnY3JlYXRlZCcgOiAnZXhpc3RpbmcnfWApO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgbWFjaGluZV9pZDogJHtzdGF0ZS5tYWNoaW5lSWR9YCk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGB0ZW5hbnRfaWQ6ICR7c3RhdGUudGVuYW50SWQgPz8gJ24vYSd9YCk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBkYXNoYm9hcmRfdXJsOiAke3N0YXRlLnVpVXJsfWApO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgcmVnaXN0cmF0aW9uX21vZGU6ICR7c3RhdGUucmVnaXN0cmF0aW9uTW9kZX1gKTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coYGNsb3VkX3JlZ2lzdHJhdGlvbjogJHtjbG91ZFJlZ2lzdHJhdGlvblN0YXR1c31gKTtcclxuICAgICAgICAgICAgaWYgKHN0YXRlLmNsb3VkLnJlZ2lzdHJhdGlvbklkKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgY2xvdWRfcmVnaXN0cmF0aW9uX2lkOiAke3N0YXRlLmNsb3VkLnJlZ2lzdHJhdGlvbklkfWApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChzdGF0ZS5jbG91ZC5zdHJlYW1VcmwpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBjbG91ZF9zdHJlYW1fdXJsOiAke3N0YXRlLmNsb3VkLnN0cmVhbVVybH1gKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoY2xvdWRFcnJvcikge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYGNsb3VkX2Vycm9yOiAke2Nsb3VkRXJyb3J9YCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc29sZS5sb2coYHN0YXRlX3BhdGg6ICR7Z2V0Q29ubmVjdG9yU3RhdGVQYXRoKCl9YCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocmVxdWlyZUNsb3VkICYmIHN0YXRlLnJlZ2lzdHJhdGlvbk1vZGUgIT09ICdjbG91ZCcpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcignY29ubmVjdG9yX3JlZ2lzdGVyX2Nsb3VkX3JlcXVpcmVkOiB1bmFibGUgdG8gcmVnaXN0ZXIgd2l0aCBjbG91ZCBjb250cm9sIHBsYW5lJyk7XHJcbiAgICAgICAgICAgIGlmIChhc0pzb24pIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHtcclxuICAgICAgICAgICAgICAgICAgICAuLi5wYXlsb2FkLFxyXG4gICAgICAgICAgICAgICAgICAgIG9rOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogJ2Nvbm5lY3Rvcl9yZWdpc3Rlcl9jbG91ZF9yZXF1aXJlZCdcclxuICAgICAgICAgICAgICAgIH0sIG51bGwsIDIpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gMTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAwO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChhY3Rpb24gPT09ICdzdGF0dXMnKSB7XHJcbiAgICAgICAgY29uc3QgZGFlbW9uID0gYXdhaXQgaXNEYWVtb25SZWFjaGFibGUoKTtcclxuICAgICAgICBjb25zdCByZWdpc3RyYXRpb24gPSByZWFkQ29ubmVjdG9yU3RhdGUoKTtcclxuICAgICAgICBjb25zdCB0b2tlbiA9IHJlc29sdmVUb2tlbigpO1xyXG4gICAgICAgIGNvbnN0IHJlcXVpcmVCcmlkZ2UgPSBCb29sZWFuKGZsYWdzWydyZXF1aXJlLWJyaWRnZSddKTtcclxuICAgICAgICBjb25zdCBjbG91ZFJlcXVpcmVkID0gcmVnaXN0cmF0aW9uPy5yZWdpc3RyYXRpb25Nb2RlID09PSAnY2xvdWQnO1xyXG4gICAgICAgIGNvbnN0IGNsb3VkUHJvYmVSZXF1ZXN0ZWQgPSBCb29sZWFuKGZsYWdzLmNsb3VkKSB8fCBjbG91ZFJlcXVpcmVkO1xyXG4gICAgICAgIGxldCBzeW5jOiB7XHJcbiAgICAgICAgICAgIGVuYWJsZWQ6IGJvb2xlYW47XHJcbiAgICAgICAgICAgIHJ1bm5pbmc6IGJvb2xlYW47XHJcbiAgICAgICAgICAgIGxhc3RFcnJvcjogc3RyaW5nIHwgbnVsbDtcclxuICAgICAgICAgICAgcXVldWU/OiB7IHBlbmRpbmc6IG51bWJlcjsgaW5GbGlnaHQ6IG51bWJlcjsgZmFpbGVkOiBudW1iZXI7IGRvbmU6IG51bWJlciB9O1xyXG4gICAgICAgIH0gfCBudWxsID0gbnVsbDtcclxuXHJcbiAgICAgICAgaWYgKGRhZW1vbi5vaykge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgc3luYyA9IGF3YWl0IHNlbmRUb0RhZW1vbignc3luY1N0YXR1cycsIHt9KTtcclxuICAgICAgICAgICAgfSBjYXRjaCB7XHJcbiAgICAgICAgICAgICAgICBzeW5jID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGNsb3VkID0ge1xyXG4gICAgICAgICAgICBjb25uZWN0ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICByZXF1aXJlZDogY2xvdWRSZXF1aXJlZCxcclxuICAgICAgICAgICAgcmVnaXN0cmF0aW9uSWQ6IHJlZ2lzdHJhdGlvbj8uY2xvdWQucmVnaXN0cmF0aW9uSWQgPz8gbnVsbCxcclxuICAgICAgICAgICAgc3RyZWFtVXJsOiByZWdpc3RyYXRpb24/LmNsb3VkLnN0cmVhbVVybCA/PyBudWxsLFxyXG4gICAgICAgICAgICBjYXBhYmlsaXRpZXM6IHJlZ2lzdHJhdGlvbj8uY2xvdWQuY2FwYWJpbGl0aWVzID8/IFtdLFxyXG4gICAgICAgICAgICBsYXN0RXJyb3I6IHJlZ2lzdHJhdGlvbj8uY2xvdWQubGFzdEVycm9yID8/IG51bGwsXHJcbiAgICAgICAgICAgIGxhc3RIZWFydGJlYXRBdDogcmVnaXN0cmF0aW9uPy5jbG91ZC5sYXN0SGVhcnRiZWF0QXQgPz8gbnVsbFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGlmIChjbG91ZFByb2JlUmVxdWVzdGVkICYmIHRva2VuICYmIHJlZ2lzdHJhdGlvbikge1xyXG4gICAgICAgICAgICBjb25zdCBjYXBhYmlsaXRpZXNSZXN1bHQgPSBhd2FpdCBmZXRjaENvbm5lY3RvckNhcGFiaWxpdGllcyh0b2tlbi5hY2Nlc3NUb2tlbiwgcmVnaXN0cmF0aW9uLm1hY2hpbmVJZCk7XHJcbiAgICAgICAgICAgIGlmIChjYXBhYmlsaXRpZXNSZXN1bHQub2spIHtcclxuICAgICAgICAgICAgICAgIGNsb3VkLmNhcGFiaWxpdGllcyA9IGNhcGFiaWxpdGllc1Jlc3VsdC5kYXRhPy5jYXBhYmlsaXRpZXNcclxuICAgICAgICAgICAgICAgICAgICA/PyBjYXBhYmlsaXRpZXNSZXN1bHQuZGF0YT8uZmVhdHVyZXNcclxuICAgICAgICAgICAgICAgICAgICA/PyBjbG91ZC5jYXBhYmlsaXRpZXM7XHJcbiAgICAgICAgICAgICAgICBjbG91ZC5jb25uZWN0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgY2xvdWQubGFzdEVycm9yID0gbnVsbDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNsb3VkLmNvbm5lY3RlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgY2xvdWQubGFzdEVycm9yID0gY2FwYWJpbGl0aWVzUmVzdWx0LmVycm9yID8/ICdjbG91ZF9jYXBhYmlsaXRpZXNfZmFpbGVkJztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgaGVhcnRiZWF0UGF5bG9hZCA9IHtcclxuICAgICAgICAgICAgICAgIG1hY2hpbmVJZDogcmVnaXN0cmF0aW9uLm1hY2hpbmVJZCxcclxuICAgICAgICAgICAgICAgIHRlbmFudElkOiByZWdpc3RyYXRpb24udGVuYW50SWQsXHJcbiAgICAgICAgICAgICAgICBwb3N0dXJlOiBkYWVtb24ub2sgPyAnY29ubmVjdGVkJyA6ICdvZmZsaW5lJyxcclxuICAgICAgICAgICAgICAgIGRhZW1vblJ1bm5pbmc6IGRhZW1vbi5vayxcclxuICAgICAgICAgICAgICAgIHN5bmNFbmFibGVkOiBCb29sZWFuKHN5bmM/LmVuYWJsZWQpLFxyXG4gICAgICAgICAgICAgICAgc3luY1J1bm5pbmc6IEJvb2xlYW4oc3luYz8ucnVubmluZyksXHJcbiAgICAgICAgICAgICAgICBxdWV1ZTogc3luYz8ucXVldWVcclxuICAgICAgICAgICAgfSBhcyBjb25zdDtcclxuICAgICAgICAgICAgY29uc3QgaGVhcnRiZWF0UmVzdWx0ID0gYXdhaXQgc2VuZENvbm5lY3RvckhlYXJ0YmVhdCh0b2tlbi5hY2Nlc3NUb2tlbiwgaGVhcnRiZWF0UGF5bG9hZCk7XHJcbiAgICAgICAgICAgIGlmIChoZWFydGJlYXRSZXN1bHQub2spIHtcclxuICAgICAgICAgICAgICAgIGNsb3VkLmxhc3RIZWFydGJlYXRBdCA9IERhdGUubm93KCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWNhcGFiaWxpdGllc1Jlc3VsdC5vaykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNsb3VkLmNvbm5lY3RlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgY2xvdWQubGFzdEVycm9yID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNsb3VkLmxhc3RFcnJvciA9IGhlYXJ0YmVhdFJlc3VsdC5lcnJvciA/PyBjbG91ZC5sYXN0RXJyb3IgPz8gJ2Nsb3VkX2hlYXJ0YmVhdF9mYWlsZWQnO1xyXG4gICAgICAgICAgICAgICAgaWYgKGNsb3VkUmVxdWlyZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBjbG91ZC5jb25uZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgdXBkYXRlZFN0YXRlID0ge1xyXG4gICAgICAgICAgICAgICAgLi4ucmVnaXN0cmF0aW9uLFxyXG4gICAgICAgICAgICAgICAgdXBkYXRlZEF0OiBEYXRlLm5vdygpLFxyXG4gICAgICAgICAgICAgICAgY2xvdWQ6IHtcclxuICAgICAgICAgICAgICAgICAgICAuLi5yZWdpc3RyYXRpb24uY2xvdWQsXHJcbiAgICAgICAgICAgICAgICAgICAgY2FwYWJpbGl0aWVzOiBjbG91ZC5jYXBhYmlsaXRpZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgbGFzdEhlYXJ0YmVhdEF0OiBjbG91ZC5sYXN0SGVhcnRiZWF0QXQsXHJcbiAgICAgICAgICAgICAgICAgICAgbGFzdEVycm9yOiBjbG91ZC5sYXN0RXJyb3JcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgd3JpdGVDb25uZWN0b3JTdGF0ZSh1cGRhdGVkU3RhdGUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgcG9zdHVyZSA9ICFkYWVtb24ub2tcclxuICAgICAgICAgICAgPyAnb2ZmbGluZSdcclxuICAgICAgICAgICAgOiAoIXRva2VuIHx8ICFyZWdpc3RyYXRpb24pXHJcbiAgICAgICAgICAgICAgICA/ICdkZWdyYWRlZCdcclxuICAgICAgICAgICAgICAgIDogKGNsb3VkUmVxdWlyZWQgJiYgIWNsb3VkLmNvbm5lY3RlZClcclxuICAgICAgICAgICAgICAgICAgICA/ICdkZWdyYWRlZCdcclxuICAgICAgICAgICAgICAgICAgICA6IChCb29sZWFuKHJlZ2lzdHJhdGlvbi5ydW50aW1lLmV2ZW50QnJpZGdlRXJyb3IpIHx8IEJvb2xlYW4ocmVnaXN0cmF0aW9uLnJ1bnRpbWUuY29tbWFuZEJyaWRnZUVycm9yKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyAnZGVncmFkZWQnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogKHN5bmM/LmVuYWJsZWQgJiYgc3luYz8ucnVubmluZyA/ICdjb25uZWN0ZWQnIDogJ2RlZ3JhZGVkJyk7XHJcblxyXG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSB7XHJcbiAgICAgICAgICAgIHBvc3R1cmUsXHJcbiAgICAgICAgICAgIGRhZW1vbjoge1xyXG4gICAgICAgICAgICAgICAgcnVubmluZzogZGFlbW9uLm9rLFxyXG4gICAgICAgICAgICAgICAgZXJyb3I6IGRhZW1vbi5vayA/IG51bGwgOiAoZGFlbW9uLmVycm9yID8/ICd1bmtub3duJylcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgcmVnaXN0cmF0aW9uOiByZWdpc3RyYXRpb24gPyB7XHJcbiAgICAgICAgICAgICAgICByZWdpc3RlcmVkOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgbWFjaGluZUlkOiByZWdpc3RyYXRpb24ubWFjaGluZUlkLFxyXG4gICAgICAgICAgICAgICAgdGVuYW50SWQ6IHJlZ2lzdHJhdGlvbi50ZW5hbnRJZCxcclxuICAgICAgICAgICAgICAgIHN0YXRlUGF0aDogZ2V0Q29ubmVjdG9yU3RhdGVQYXRoKCksXHJcbiAgICAgICAgICAgICAgICB1cGRhdGVkQXQ6IG5ldyBEYXRlKHJlZ2lzdHJhdGlvbi51cGRhdGVkQXQpLnRvSVNPU3RyaW5nKCksXHJcbiAgICAgICAgICAgICAgICBydW50aW1lOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXZlbnRCcmlkZ2VTdXBwb3J0ZWQ6IHJlZ2lzdHJhdGlvbi5ydW50aW1lLmV2ZW50QnJpZGdlU3VwcG9ydGVkLFxyXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50QnJpZGdlRXJyb3I6IHJlZ2lzdHJhdGlvbi5ydW50aW1lLmV2ZW50QnJpZGdlRXJyb3IsXHJcbiAgICAgICAgICAgICAgICAgICAgbGFzdEV2ZW50U2VxdWVuY2U6IHJlZ2lzdHJhdGlvbi5ydW50aW1lLmxhc3RFdmVudFNlcXVlbmNlLFxyXG4gICAgICAgICAgICAgICAgICAgIGxhc3RFdmVudFN5bmNBdDogcmVnaXN0cmF0aW9uLnJ1bnRpbWUubGFzdEV2ZW50U3luY0F0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gbmV3IERhdGUocmVnaXN0cmF0aW9uLnJ1bnRpbWUubGFzdEV2ZW50U3luY0F0KS50b0lTT1N0cmluZygpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBjb21tYW5kQnJpZGdlU3VwcG9ydGVkOiByZWdpc3RyYXRpb24ucnVudGltZS5jb21tYW5kQnJpZGdlU3VwcG9ydGVkLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmRCcmlkZ2VFcnJvcjogcmVnaXN0cmF0aW9uLnJ1bnRpbWUuY29tbWFuZEJyaWRnZUVycm9yLFxyXG4gICAgICAgICAgICAgICAgICAgIGxhc3RDb21tYW5kQ3Vyc29yOiByZWdpc3RyYXRpb24ucnVudGltZS5sYXN0Q29tbWFuZEN1cnNvcixcclxuICAgICAgICAgICAgICAgICAgICBsYXN0Q29tbWFuZFN5bmNBdDogcmVnaXN0cmF0aW9uLnJ1bnRpbWUubGFzdENvbW1hbmRTeW5jQXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyBuZXcgRGF0ZShyZWdpc3RyYXRpb24ucnVudGltZS5sYXN0Q29tbWFuZFN5bmNBdCkudG9JU09TdHJpbmcoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgcXVldWU6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGVuZGluZzogcmVnaXN0cmF0aW9uLnJ1bnRpbWUuZXZlbnRRdWV1ZVBlbmRpbmcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWR5OiByZWdpc3RyYXRpb24ucnVudGltZS5ldmVudFF1ZXVlUmVhZHksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tvZmY6IHJlZ2lzdHJhdGlvbi5ydW50aW1lLmV2ZW50UXVldWVCYWNrb2ZmXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IDoge1xyXG4gICAgICAgICAgICAgICAgcmVnaXN0ZXJlZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBtYWNoaW5lSWQ6IG51bGwsXHJcbiAgICAgICAgICAgICAgICB0ZW5hbnRJZDogbnVsbCxcclxuICAgICAgICAgICAgICAgIHN0YXRlUGF0aDogZ2V0Q29ubmVjdG9yU3RhdGVQYXRoKCksXHJcbiAgICAgICAgICAgICAgICB1cGRhdGVkQXQ6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBydW50aW1lOiBudWxsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGF1dGg6IHtcclxuICAgICAgICAgICAgICAgIGF1dGhlbnRpY2F0ZWQ6IEJvb2xlYW4odG9rZW4pLFxyXG4gICAgICAgICAgICAgICAgdGVuYW50SWQ6IHRva2VuPy50ZW5hbnRJZCA/PyBudWxsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGNsb3VkLFxyXG4gICAgICAgICAgICBzeW5jOiBzeW5jID8/IHtcclxuICAgICAgICAgICAgICAgIGVuYWJsZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgcnVubmluZzogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBsYXN0RXJyb3I6IGRhZW1vbi5vayA/ICdzeW5jX3N0YXR1c191bmF2YWlsYWJsZScgOiAnZGFlbW9uX3VucmVhY2hhYmxlJyxcclxuICAgICAgICAgICAgICAgIHF1ZXVlOiB7IHBlbmRpbmc6IDAsIGluRmxpZ2h0OiAwLCBmYWlsZWQ6IDAsIGRvbmU6IDAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBkYXNoYm9hcmRVcmw6IGdldEhvc3RlZERhc2hib2FyZFVybCgpXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgY29uc3QgYnJpZGdlUmVhc29uczogc3RyaW5nW10gPSBbXTtcclxuICAgICAgICBpZiAoIXBheWxvYWQucmVnaXN0cmF0aW9uLnJlZ2lzdGVyZWQgfHwgIXBheWxvYWQucmVnaXN0cmF0aW9uLnJ1bnRpbWUpIHtcclxuICAgICAgICAgICAgYnJpZGdlUmVhc29ucy5wdXNoKCdub3RfcmVnaXN0ZXJlZCcpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICghcGF5bG9hZC5yZWdpc3RyYXRpb24ucnVudGltZS5ldmVudEJyaWRnZVN1cHBvcnRlZCkge1xyXG4gICAgICAgICAgICAgICAgYnJpZGdlUmVhc29ucy5wdXNoKCdicmlkZ2Vfbm90X3N1cHBvcnRlZCcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChwYXlsb2FkLnJlZ2lzdHJhdGlvbi5ydW50aW1lLmV2ZW50QnJpZGdlRXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIGJyaWRnZVJlYXNvbnMucHVzaCgnYnJpZGdlX2Vycm9yJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCFwYXlsb2FkLnJlZ2lzdHJhdGlvbi5ydW50aW1lLmNvbW1hbmRCcmlkZ2VTdXBwb3J0ZWQpIHtcclxuICAgICAgICAgICAgICAgIGJyaWRnZVJlYXNvbnMucHVzaCgnY29tbWFuZF9icmlkZ2Vfbm90X3N1cHBvcnRlZCcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChwYXlsb2FkLnJlZ2lzdHJhdGlvbi5ydW50aW1lLmNvbW1hbmRCcmlkZ2VFcnJvcikge1xyXG4gICAgICAgICAgICAgICAgYnJpZGdlUmVhc29ucy5wdXNoKCdjb21tYW5kX2JyaWRnZV9lcnJvcicpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChwYXlsb2FkLnJlZ2lzdHJhdGlvbi5ydW50aW1lLnF1ZXVlLmJhY2tvZmYgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBicmlkZ2VSZWFzb25zLnB1c2goJ3F1ZXVlX2JhY2tvZmYnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBicmlkZ2UgPSB7XHJcbiAgICAgICAgICAgIHJlcXVpcmVkOiByZXF1aXJlQnJpZGdlLFxyXG4gICAgICAgICAgICBoZWFsdGh5OiBicmlkZ2VSZWFzb25zLmxlbmd0aCA9PT0gMCxcclxuICAgICAgICAgICAgcmVhc29uczogYnJpZGdlUmVhc29uc1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc3QgZXhpdENvZGUgPSAocmVxdWlyZUJyaWRnZSAmJiAhYnJpZGdlLmhlYWx0aHkpXHJcbiAgICAgICAgICAgID8gMVxyXG4gICAgICAgICAgICA6IChwb3N0dXJlID09PSAnY29ubmVjdGVkJyA/IDAgOiAxKTtcclxuXHJcbiAgICAgICAgaWYgKEJvb2xlYW4oZmxhZ3MuanNvbikpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoeyAuLi5wYXlsb2FkLCBicmlkZ2UgfSwgbnVsbCwgMikpO1xyXG4gICAgICAgICAgICByZXR1cm4gZXhpdENvZGU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zb2xlLmxvZygnXFxuQ29ubmVjdG9yIFN0YXR1c1xcbicpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGAgIHBvc3R1cmU6ICAgICAgJHtwYXlsb2FkLnBvc3R1cmV9YCk7XHJcbiAgICAgICAgY29uc29sZS5sb2coYCAgZGFlbW9uOiAgICAgICAke3BheWxvYWQuZGFlbW9uLnJ1bm5pbmcgPyAncnVubmluZycgOiAnbm90IHJ1bm5pbmcnfWApO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGAgIHJlZ2lzdHJhdGlvbjogJHtwYXlsb2FkLnJlZ2lzdHJhdGlvbi5yZWdpc3RlcmVkID8gJ3JlZ2lzdGVyZWQnIDogJ25vdCByZWdpc3RlcmVkJ31gKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhgICBhdXRoOiAgICAgICAgICR7cGF5bG9hZC5hdXRoLmF1dGhlbnRpY2F0ZWQgPyAnYXV0aGVudGljYXRlZCcgOiAnbm90IGF1dGhlbnRpY2F0ZWQnfWApO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGAgIGNsb3VkOiAgICAgICAgJHtwYXlsb2FkLmNsb3VkLmNvbm5lY3RlZCA/ICdjb25uZWN0ZWQnIDogKHBheWxvYWQuY2xvdWQucmVxdWlyZWQgPyAnbm90IGNvbm5lY3RlZCcgOiAnb3B0aW9uYWwnKX1gKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhgICBkYXNoYm9hcmQ6ICAgICR7cGF5bG9hZC5kYXNoYm9hcmRVcmx9YCk7XHJcbiAgICAgICAgaWYgKHBheWxvYWQucmVnaXN0cmF0aW9uLnJlZ2lzdGVyZWQpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coYCAgbWFjaGluZV9pZDogICAke3BheWxvYWQucmVnaXN0cmF0aW9uLm1hY2hpbmVJZH1gKTtcclxuICAgICAgICAgICAgaWYgKHBheWxvYWQucmVnaXN0cmF0aW9uLnJ1bnRpbWUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxyXG4gICAgICAgICAgICAgICAgICAgIGAgIGV2ZW50X2JyaWRnZTogc3VwcG9ydGVkPSR7cGF5bG9hZC5yZWdpc3RyYXRpb24ucnVudGltZS5ldmVudEJyaWRnZVN1cHBvcnRlZH1gICtcclxuICAgICAgICAgICAgICAgICAgICBgIHNlcXVlbmNlPSR7cGF5bG9hZC5yZWdpc3RyYXRpb24ucnVudGltZS5sYXN0RXZlbnRTZXF1ZW5jZX1gXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXHJcbiAgICAgICAgICAgICAgICAgICAgYCAgY29tbWFuZF9icmlkZ2U6IHN1cHBvcnRlZD0ke3BheWxvYWQucmVnaXN0cmF0aW9uLnJ1bnRpbWUuY29tbWFuZEJyaWRnZVN1cHBvcnRlZH1gICtcclxuICAgICAgICAgICAgICAgICAgICBgIGN1cnNvcj0ke3BheWxvYWQucmVnaXN0cmF0aW9uLnJ1bnRpbWUubGFzdENvbW1hbmRDdXJzb3J9YFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxyXG4gICAgICAgICAgICAgICAgICAgIGAgIGV2ZW50X3F1ZXVlOiAgcGVuZGluZz0ke3BheWxvYWQucmVnaXN0cmF0aW9uLnJ1bnRpbWUucXVldWUucGVuZGluZ31gICtcclxuICAgICAgICAgICAgICAgICAgICBgIHJlYWR5PSR7cGF5bG9hZC5yZWdpc3RyYXRpb24ucnVudGltZS5xdWV1ZS5yZWFkeX1gICtcclxuICAgICAgICAgICAgICAgICAgICBgIGJhY2tvZmY9JHtwYXlsb2FkLnJlZ2lzdHJhdGlvbi5ydW50aW1lLnF1ZXVlLmJhY2tvZmZ9YFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIGlmIChwYXlsb2FkLnJlZ2lzdHJhdGlvbi5ydW50aW1lLmxhc3RFdmVudFN5bmNBdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGAgIGV2ZW50X3N5bmM6ICAgJHtwYXlsb2FkLnJlZ2lzdHJhdGlvbi5ydW50aW1lLmxhc3RFdmVudFN5bmNBdH1gKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChwYXlsb2FkLnJlZ2lzdHJhdGlvbi5ydW50aW1lLmV2ZW50QnJpZGdlRXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgICBldmVudF9lcnJvcjogICR7cGF5bG9hZC5yZWdpc3RyYXRpb24ucnVudGltZS5ldmVudEJyaWRnZUVycm9yfWApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHBheWxvYWQucmVnaXN0cmF0aW9uLnJ1bnRpbWUubGFzdENvbW1hbmRTeW5jQXQpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgICBjb21tYW5kX3N5bmM6ICR7cGF5bG9hZC5yZWdpc3RyYXRpb24ucnVudGltZS5sYXN0Q29tbWFuZFN5bmNBdH1gKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChwYXlsb2FkLnJlZ2lzdHJhdGlvbi5ydW50aW1lLmNvbW1hbmRCcmlkZ2VFcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGAgIGNvbW1hbmRfZXJyb3I6ICR7cGF5bG9hZC5yZWdpc3RyYXRpb24ucnVudGltZS5jb21tYW5kQnJpZGdlRXJyb3J9YCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHBheWxvYWQuY2xvdWQucmVnaXN0cmF0aW9uSWQpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coYCAgY2xvdWRfcmVnX2lkOiAke3BheWxvYWQuY2xvdWQucmVnaXN0cmF0aW9uSWR9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwYXlsb2FkLmNsb3VkLmxhc3RFcnJvcikge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgICBjbG91ZF9lcnJvcjogICR7cGF5bG9hZC5jbG91ZC5sYXN0RXJyb3J9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwYXlsb2FkLnN5bmMpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coYCAgc3luYzogICAgICAgICBlbmFibGVkPSR7cGF5bG9hZC5zeW5jLmVuYWJsZWR9IHJ1bm5pbmc9JHtwYXlsb2FkLnN5bmMucnVubmluZ31gKTtcclxuICAgICAgICAgICAgaWYgKHBheWxvYWQuc3luYy5sYXN0RXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGAgIHN5bmNfZXJyb3I6ICAgJHtwYXlsb2FkLnN5bmMubGFzdEVycm9yfWApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghcGF5bG9hZC5kYWVtb24ucnVubmluZyAmJiBwYXlsb2FkLmRhZW1vbi5lcnJvcikge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgICBkYWVtb25fZXJyb3I6ICR7cGF5bG9hZC5kYWVtb24uZXJyb3J9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChyZXF1aXJlQnJpZGdlIHx8ICFicmlkZ2UuaGVhbHRoeSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgICBicmlkZ2U6ICAgICAgICR7YnJpZGdlLmhlYWx0aHkgPyAnaGVhbHRoeScgOiAndW5oZWFsdGh5J31gKTtcclxuICAgICAgICAgICAgaWYgKCFicmlkZ2UuaGVhbHRoeSkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYCAgYnJpZGdlX2lzc3VlOiAke2JyaWRnZS5yZWFzb25zLmpvaW4oJywnKX1gKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zb2xlLmxvZygnJyk7XHJcbiAgICAgICAgcmV0dXJuIGV4aXRDb2RlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChhY3Rpb24gPT09ICdsb2dzJykge1xyXG4gICAgICAgIGNvbnN0IHBsYXRmb3JtID0gb3MucGxhdGZvcm0oKTtcclxuICAgICAgICBpZiAocGxhdGZvcm0gPT09ICd3aW4zMicpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ1VzZSBXaW5kb3dzIEV2ZW50IFZpZXdlciAoQXBwbGljYXRpb24gbG9ncykgZm9yIHNlcnZpY2UgZGlhZ25vc3RpY3MuJyk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChwbGF0Zm9ybSA9PT0gJ2RhcndpbicpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ1VzZTogbG9nIHN0cmVhbSAtLXByb2Nlc3MgMGN0eC1kYWVtb24nKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHBsYXRmb3JtID09PSAnbGludXgnKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdVc2U6IHN5c3RlbWN0bCAtLXVzZXIgc3RhdHVzIDBjdHgtZGFlbW9uICYmIGpvdXJuYWxjdGwgLS11c2VyIC11IDBjdHgtZGFlbW9uIC1mJyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ05vIGxvZyBoZWxwZXIgYXZhaWxhYmxlIGZvciB0aGlzIHBsYXRmb3JtLicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gMDtcclxuICAgIH1cclxuXHJcbiAgICBjb25zb2xlLmxvZyhgY29ubmVjdG9yICR7YWN0aW9ufTogZGVsZWdhdGluZyB0byBtYW5hZ2VkIHNlcnZpY2UgbGlmZWN5Y2xlIGNvbW1hbmRzLmApO1xyXG4gICAgcmV0dXJuIGNvbW1hbmREYWVtb25TZXJ2aWNlKGFjdGlvbik7XHJcbn1cclxuXHJcbmFzeW5jIGZ1bmN0aW9uIGNvbW1hbmRTZXR1cChmbGFnczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgYm9vbGVhbj4pOiBQcm9taXNlPG51bWJlcj4ge1xyXG4gICAgY29uc3QgYXNKc29uID0gQm9vbGVhbihmbGFncy5qc29uKTtcclxuICAgIGNvbnN0IHF1aWV0ID0gQm9vbGVhbihmbGFncy5xdWlldCkgfHwgYXNKc29uO1xyXG4gICAgY29uc3Qgc2tpcFNlcnZpY2UgPSBCb29sZWFuKGZsYWdzWydza2lwLXNlcnZpY2UnXSk7XHJcbiAgICBjb25zdCBza2lwQm9vdHN0cmFwID0gQm9vbGVhbihmbGFnc1snc2tpcC1ib290c3RyYXAnXSk7XHJcbiAgICBjb25zdCByZXF1aXJlQ2xvdWQgPSBCb29sZWFuKGZsYWdzWydyZXF1aXJlLWNsb3VkJ10pO1xyXG4gICAgY29uc3Qgd2FpdENsb3VkUmVhZHkgPSBCb29sZWFuKGZsYWdzWyd3YWl0LWNsb3VkLXJlYWR5J10pO1xyXG4gICAgY29uc3QgY2xvdWRXYWl0VGltZW91dE1zID0gcGFyc2VQb3NpdGl2ZUludGVnZXJGbGFnKGZsYWdzWydjbG91ZC13YWl0LXRpbWVvdXQtbXMnXSwgNjBfMDAwKTtcclxuICAgIGNvbnN0IGNsb3VkV2FpdEludGVydmFsTXMgPSBwYXJzZVBvc2l0aXZlSW50ZWdlckZsYWcoZmxhZ3NbJ2Nsb3VkLXdhaXQtaW50ZXJ2YWwtbXMnXSwgMl8wMDApO1xyXG4gICAgY29uc3QgY3JlYXRlQ29udGV4dE5hbWUgPSBwYXJzZU9wdGlvbmFsU3RyaW5nRmxhZyhmbGFnc1snY3JlYXRlLWNvbnRleHQnXSk7XHJcbiAgICBjb25zdCBkYXNoYm9hcmRRdWVyeUlucHV0ID0gZmxhZ3NbJ2Rhc2hib2FyZC1xdWVyeSddO1xyXG4gICAgY29uc3Qgc3RlcHM6IEFycmF5PHtcclxuICAgICAgICBpZDogc3RyaW5nO1xyXG4gICAgICAgIHN0YXR1czogJ3Bhc3MnIHwgJ3dhcm4nIHwgJ2ZhaWwnO1xyXG4gICAgICAgIGNvZGU6IG51bWJlcjtcclxuICAgICAgICBtZXNzYWdlOiBzdHJpbmc7XHJcbiAgICB9PiA9IFtdO1xyXG5cclxuICAgIGlmICghcXVpZXQpIHtcclxuICAgICAgICBjb25zb2xlLmxvZygnUnVubmluZyBzZXR1cCB3b3JrZmxvdy4uLicpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghcmVzb2x2ZVRva2VuKCkpIHtcclxuICAgICAgICBpZiAoIXF1aWV0KSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdhdXRoOiBubyBhY3RpdmUgc2Vzc2lvbiBmb3VuZC4gU3RhcnRpbmcgbG9naW4uLi4nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgYXV0aENvZGUgPSBhd2FpdCBjb21tYW5kQXV0aExvZ2luKGZsYWdzKTtcclxuICAgICAgICBzdGVwcy5wdXNoKHtcclxuICAgICAgICAgICAgaWQ6ICdhdXRoX2xvZ2luJyxcclxuICAgICAgICAgICAgc3RhdHVzOiBhdXRoQ29kZSA9PT0gMCA/ICdwYXNzJyA6ICdmYWlsJyxcclxuICAgICAgICAgICAgY29kZTogYXV0aENvZGUsXHJcbiAgICAgICAgICAgIG1lc3NhZ2U6IGF1dGhDb2RlID09PSAwID8gJ0F1dGhlbnRpY2F0aW9uIGNvbXBsZXRlZC4nIDogJ0F1dGhlbnRpY2F0aW9uIGZhaWxlZC4nXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKGF1dGhDb2RlICE9PSAwKSB7XHJcbiAgICAgICAgICAgIGlmIChhc0pzb24pIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHsgb2s6IGZhbHNlLCBzdGVwcywgZGFzaGJvYXJkVXJsOiBnZXRIb3N0ZWREYXNoYm9hcmRVcmwoKSB9LCBudWxsLCAyKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGF1dGhDb2RlO1xyXG4gICAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKCFxdWlldCkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnYXV0aDogYWxyZWFkeSBsb2dnZWQgaW4nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc3RlcHMucHVzaCh7XHJcbiAgICAgICAgICAgIGlkOiAnYXV0aF9sb2dpbicsXHJcbiAgICAgICAgICAgIHN0YXR1czogJ3Bhc3MnLFxyXG4gICAgICAgICAgICBjb2RlOiAwLFxyXG4gICAgICAgICAgICBtZXNzYWdlOiAnQWxyZWFkeSBhdXRoZW50aWNhdGVkLidcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc2tpcFNlcnZpY2UpIHtcclxuICAgICAgICBzdGVwcy5wdXNoKHtcclxuICAgICAgICAgICAgaWQ6ICdjb25uZWN0b3Jfc2VydmljZScsXHJcbiAgICAgICAgICAgIHN0YXR1czogJ3dhcm4nLFxyXG4gICAgICAgICAgICBjb2RlOiAwLFxyXG4gICAgICAgICAgICBtZXNzYWdlOiAnU2VydmljZSBpbnN0YWxsYXRpb24vc3RhcnQgd2FzIHNraXBwZWQgYnkgLS1za2lwLXNlcnZpY2UuJ1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBCZXN0IGVmZm9ydDogaW5zdGFsbC9lbmFibGUvc3RhcnQgbWFuYWdlZCBzZXJ2aWNlLlxyXG4gICAgICAgIGZvciAoY29uc3QgYWN0aW9uIG9mIFsnaW5zdGFsbCcsICdlbmFibGUnLCAnc3RhcnQnXSBhcyBjb25zdCkge1xyXG4gICAgICAgICAgICBjb25zdCBjb2RlID0gYXdhaXQgY29tbWFuZENvbm5lY3RvcihhY3Rpb24sIHsgLi4uZmxhZ3MsIHF1aWV0IH0pO1xyXG4gICAgICAgICAgICBzdGVwcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgIGlkOiBgY29ubmVjdG9yX3NlcnZpY2VfJHthY3Rpb259YCxcclxuICAgICAgICAgICAgICAgIHN0YXR1czogY29kZSA9PT0gMCA/ICdwYXNzJyA6ICd3YXJuJyxcclxuICAgICAgICAgICAgICAgIGNvZGUsXHJcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBjb2RlID09PSAwXHJcbiAgICAgICAgICAgICAgICAgICAgPyBgQ29ubmVjdG9yIHNlcnZpY2UgJHthY3Rpb259IHN1Y2NlZWRlZC5gXHJcbiAgICAgICAgICAgICAgICAgICAgOiBgQ29ubmVjdG9yIHNlcnZpY2UgJHthY3Rpb259IGZhaWxlZDsgY29udGludWluZyB3aXRoIGxvY2FsIHJ1bnRpbWUgZmxvdy5gXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBpZiAoY29kZSAhPT0gMCAmJiAhcXVpZXQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBjb25uZWN0b3IgJHthY3Rpb259OiB3YXJuaW5nIChjb250aW51aW5nIHdpdGggbG9jYWwgcnVudGltZSBmbG93KWApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGluc3RhbGxDb2RlID0gYXdhaXQgY29tbWFuZEluc3RhbGwoeyAuLi5mbGFncywgcXVpZXQsIGpzb246IGZhbHNlLCAnc2tpcC1ib290c3RyYXAnOiBza2lwQm9vdHN0cmFwIH0pO1xyXG4gICAgc3RlcHMucHVzaCh7XHJcbiAgICAgICAgaWQ6ICdpbnN0YWxsJyxcclxuICAgICAgICBzdGF0dXM6IGluc3RhbGxDb2RlID09PSAwID8gJ3Bhc3MnIDogJ2ZhaWwnLFxyXG4gICAgICAgIGNvZGU6IGluc3RhbGxDb2RlLFxyXG4gICAgICAgIG1lc3NhZ2U6IGluc3RhbGxDb2RlID09PSAwXHJcbiAgICAgICAgICAgID8gYEluc3RhbGwgd29ya2Zsb3cgY29tcGxldGVkJHtza2lwQm9vdHN0cmFwID8gJyAoYm9vdHN0cmFwIHNraXBwZWQpLicgOiAnLid9YFxyXG4gICAgICAgICAgICA6ICdJbnN0YWxsIHdvcmtmbG93IGZhaWxlZC4nXHJcbiAgICB9KTtcclxuICAgIGlmIChpbnN0YWxsQ29kZSAhPT0gMCkge1xyXG4gICAgICAgIGlmIChhc0pzb24pIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoeyBvazogZmFsc2UsIHN0ZXBzLCBkYXNoYm9hcmRVcmw6IGdldEhvc3RlZERhc2hib2FyZFVybCgpIH0sIG51bGwsIDIpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGluc3RhbGxDb2RlO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHJlZ2lzdGVyQ29kZSA9IGF3YWl0IGNvbW1hbmRDb25uZWN0b3IoJ3JlZ2lzdGVyJywgeyAuLi5mbGFncywgcXVpZXQ6IHRydWUsIGpzb246IGZhbHNlLCAncmVxdWlyZS1jbG91ZCc6IHJlcXVpcmVDbG91ZCB9KTtcclxuICAgIHN0ZXBzLnB1c2goe1xyXG4gICAgICAgIGlkOiAnY29ubmVjdG9yX3JlZ2lzdGVyJyxcclxuICAgICAgICBzdGF0dXM6IHJlZ2lzdGVyQ29kZSA9PT0gMCA/ICdwYXNzJyA6ICdmYWlsJyxcclxuICAgICAgICBjb2RlOiByZWdpc3RlckNvZGUsXHJcbiAgICAgICAgbWVzc2FnZTogcmVnaXN0ZXJDb2RlID09PSAwID8gJ0Nvbm5lY3RvciByZWdpc3RyYXRpb24gY29tcGxldGVkLicgOiAnQ29ubmVjdG9yIHJlZ2lzdHJhdGlvbiBmYWlsZWQuJ1xyXG4gICAgfSk7XHJcbiAgICBpZiAocmVnaXN0ZXJDb2RlICE9PSAwKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignc2V0dXBfcmVnaXN0ZXJfZmFpbGVkOiB1bmFibGUgdG8gcmVnaXN0ZXIgY29ubmVjdG9yIG1ldGFkYXRhJyk7XHJcbiAgICAgICAgaWYgKGFzSnNvbikge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeSh7IG9rOiBmYWxzZSwgc3RlcHMsIGRhc2hib2FyZFVybDogZ2V0SG9zdGVkRGFzaGJvYXJkVXJsKCkgfSwgbnVsbCwgMikpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVnaXN0ZXJDb2RlO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHZlcmlmeUNvZGUgPSBhd2FpdCBjb21tYW5kQ29ubmVjdG9yKCd2ZXJpZnknLCB7XHJcbiAgICAgICAgLi4uZmxhZ3MsXHJcbiAgICAgICAgcXVpZXQ6IHRydWUsXHJcbiAgICAgICAganNvbjogZmFsc2UsXHJcbiAgICAgICAgJ3JlcXVpcmUtY2xvdWQnOiByZXF1aXJlQ2xvdWQsXHJcbiAgICAgICAgY2xvdWQ6IHJlcXVpcmVDbG91ZFxyXG4gICAgfSk7XHJcbiAgICBzdGVwcy5wdXNoKHtcclxuICAgICAgICBpZDogJ2Nvbm5lY3Rvcl92ZXJpZnknLFxyXG4gICAgICAgIHN0YXR1czogdmVyaWZ5Q29kZSA9PT0gMCA/ICdwYXNzJyA6ICdmYWlsJyxcclxuICAgICAgICBjb2RlOiB2ZXJpZnlDb2RlLFxyXG4gICAgICAgIG1lc3NhZ2U6IHZlcmlmeUNvZGUgPT09IDAgPyAnQ29ubmVjdG9yIHZlcmlmaWNhdGlvbiBwYXNzZWQuJyA6ICdDb25uZWN0b3IgdmVyaWZpY2F0aW9uIGZhaWxlZC4nXHJcbiAgICB9KTtcclxuICAgIGlmICh2ZXJpZnlDb2RlICE9PSAwKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignc2V0dXBfdmVyaWZ5X2ZhaWxlZDogY29ubmVjdG9yL3J1bnRpbWUgdmVyaWZpY2F0aW9uIGZhaWxlZCcpO1xyXG4gICAgICAgIGlmIChhc0pzb24pIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoeyBvazogZmFsc2UsIHN0ZXBzLCBkYXNoYm9hcmRVcmw6IGdldEhvc3RlZERhc2hib2FyZFVybCgpIH0sIG51bGwsIDIpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHZlcmlmeUNvZGU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHdhaXRDbG91ZFJlYWR5IHx8IHJlcXVpcmVDbG91ZCkge1xyXG4gICAgICAgIGlmICghcXVpZXQpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ2Nsb3VkOiB3YWl0aW5nIGZvciBjb25uZWN0b3IgY2xvdWQtcmVhZHkgcG9zdHVyZS4uLicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3Qgd2FpdFN0YXJ0ZWRBdCA9IERhdGUubm93KCk7XHJcbiAgICAgICAgbGV0IGF0dGVtcHRzID0gMDtcclxuICAgICAgICBsZXQgcmVhZHkgPSBmYWxzZTtcclxuICAgICAgICB3aGlsZSAoRGF0ZS5ub3coKSAtIHdhaXRTdGFydGVkQXQgPCBjbG91ZFdhaXRUaW1lb3V0TXMpIHtcclxuICAgICAgICAgICAgYXR0ZW1wdHMgKz0gMTtcclxuICAgICAgICAgICAgY29uc3QgY2xvdWRWZXJpZnlDb2RlID0gYXdhaXQgY29tbWFuZENvbm5lY3RvcigndmVyaWZ5Jywge1xyXG4gICAgICAgICAgICAgICAgLi4uZmxhZ3MsXHJcbiAgICAgICAgICAgICAgICBxdWlldDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIGpzb246IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgJ3JlcXVpcmUtY2xvdWQnOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgY2xvdWQ6IHRydWVcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGlmIChjbG91ZFZlcmlmeUNvZGUgPT09IDApIHtcclxuICAgICAgICAgICAgICAgIHJlYWR5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGF3YWl0IHNsZWVwTXMoY2xvdWRXYWl0SW50ZXJ2YWxNcyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBlbGFwc2VkTXMgPSBEYXRlLm5vdygpIC0gd2FpdFN0YXJ0ZWRBdDtcclxuICAgICAgICBzdGVwcy5wdXNoKHtcclxuICAgICAgICAgICAgaWQ6ICdjbG91ZF9yZWFkeScsXHJcbiAgICAgICAgICAgIHN0YXR1czogcmVhZHkgPyAncGFzcycgOiAnZmFpbCcsXHJcbiAgICAgICAgICAgIGNvZGU6IHJlYWR5ID8gMCA6IDEsXHJcbiAgICAgICAgICAgIG1lc3NhZ2U6IHJlYWR5XHJcbiAgICAgICAgICAgICAgICA/IGBDbG91ZC1yZWFkeSBwb3N0dXJlIGNvbmZpcm1lZCBhZnRlciAke2F0dGVtcHRzfSBhdHRlbXB0KHMpIGluICR7ZWxhcHNlZE1zfW1zLmBcclxuICAgICAgICAgICAgICAgIDogYENsb3VkLXJlYWR5IHBvc3R1cmUgbm90IGNvbmZpcm1lZCB3aXRoaW4gJHtlbGFwc2VkTXN9bXMgKCR7YXR0ZW1wdHN9IGF0dGVtcHQocykpLmBcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgaWYgKCFyZWFkeSkge1xyXG4gICAgICAgICAgICBpZiAoYXNKc29uKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeSh7IG9rOiBmYWxzZSwgc3RlcHMsIGRhc2hib2FyZFVybDogZ2V0SG9zdGVkRGFzaGJvYXJkVXJsKCkgfSwgbnVsbCwgMikpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignc2V0dXBfY2xvdWRfcmVhZHlfdGltZW91dDogY29ubmVjdG9yIGRpZCBub3QgcmVhY2ggY2xvdWQtcmVhZHkgcG9zdHVyZSB3aXRoaW4gdGltZW91dCcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBsZXQgY3JlYXRlZENvbnRleHRJZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcbiAgICBpZiAoY3JlYXRlQ29udGV4dE5hbWUpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCBjcmVhdGVkID0gYXdhaXQgc2VuZFRvRGFlbW9uKCdjcmVhdGVDb250ZXh0JywgeyBuYW1lOiBjcmVhdGVDb250ZXh0TmFtZSB9KSBhcyB7IGlkPzogc3RyaW5nOyBjb250ZXh0SWQ/OiBzdHJpbmcgfTtcclxuICAgICAgICAgICAgY3JlYXRlZENvbnRleHRJZCA9IGNyZWF0ZWQ/LmlkID8/IGNyZWF0ZWQ/LmNvbnRleHRJZCA/PyBudWxsO1xyXG4gICAgICAgICAgICBzdGVwcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgIGlkOiAnY3JlYXRlX2NvbnRleHQnLFxyXG4gICAgICAgICAgICAgICAgc3RhdHVzOiAncGFzcycsXHJcbiAgICAgICAgICAgICAgICBjb2RlOiAwLFxyXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogYENvbnRleHQgY3JlYXRlZDogJHtjcmVhdGVDb250ZXh0TmFtZX1gXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVycm9yVGV4dCA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKTtcclxuICAgICAgICAgICAgc3RlcHMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICBpZDogJ2NyZWF0ZV9jb250ZXh0JyxcclxuICAgICAgICAgICAgICAgIHN0YXR1czogJ2ZhaWwnLFxyXG4gICAgICAgICAgICAgICAgY29kZTogMSxcclxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBGYWlsZWQgdG8gY3JlYXRlIGNvbnRleHQgJyR7Y3JlYXRlQ29udGV4dE5hbWV9JzogJHtlcnJvclRleHR9YFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgaWYgKGFzSnNvbikge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoeyBvazogZmFsc2UsIHN0ZXBzLCBkYXNoYm9hcmRVcmw6IGdldEhvc3RlZERhc2hib2FyZFVybCgpIH0sIG51bGwsIDIpKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYHNldHVwX2NyZWF0ZV9jb250ZXh0X2ZhaWxlZDogJHtlcnJvclRleHR9YCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCBkYXNoYm9hcmRRdWVyeSA9IHBhcnNlT3B0aW9uYWxTdHJpbmdGbGFnKGRhc2hib2FyZFF1ZXJ5SW5wdXQpO1xyXG4gICAgaWYgKGRhc2hib2FyZFF1ZXJ5SW5wdXQgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGNvbnN0IHBhcnRzID0gbmV3IFVSTFNlYXJjaFBhcmFtcyhkYXNoYm9hcmRRdWVyeSA/PyAnJyk7XHJcbiAgICAgICAgY29uc3Qgc3RhdGUgPSByZWFkQ29ubmVjdG9yU3RhdGUoKTtcclxuICAgICAgICBpZiAoc3RhdGUpIHtcclxuICAgICAgICAgICAgcGFydHMuc2V0KCdtYWNoaW5lSWQnLCBzdGF0ZS5tYWNoaW5lSWQpO1xyXG4gICAgICAgICAgICBpZiAoc3RhdGUudGVuYW50SWQpIHBhcnRzLnNldCgndGVuYW50SWQnLCBzdGF0ZS50ZW5hbnRJZCk7XHJcbiAgICAgICAgICAgIHBhcnRzLnNldCgncmVnaXN0cmF0aW9uTW9kZScsIHN0YXRlLnJlZ2lzdHJhdGlvbk1vZGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY3JlYXRlQ29udGV4dE5hbWUpIHBhcnRzLnNldCgnY29udGV4dE5hbWUnLCBjcmVhdGVDb250ZXh0TmFtZSk7XHJcbiAgICAgICAgaWYgKGNyZWF0ZWRDb250ZXh0SWQpIHBhcnRzLnNldCgnY29udGV4dElkJywgY3JlYXRlZENvbnRleHRJZCk7XHJcbiAgICAgICAgaWYgKHJlcXVpcmVDbG91ZCkgcGFydHMuc2V0KCdyZXF1aXJlQ2xvdWQnLCAnMScpO1xyXG4gICAgICAgIGRhc2hib2FyZFF1ZXJ5ID0gcGFydHMudG9TdHJpbmcoKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCByZXNvbHZlZERhc2hib2FyZFVybCA9IGFwcGx5RGFzaGJvYXJkUXVlcnkoZ2V0SG9zdGVkRGFzaGJvYXJkVXJsKCksIGRhc2hib2FyZFF1ZXJ5ID8/IHVuZGVmaW5lZCk7XHJcbiAgICBjb25zdCBkYXNoYm9hcmRGbGFncyA9IGRhc2hib2FyZFF1ZXJ5ID8geyAuLi5mbGFncywgJ2Rhc2hib2FyZC1xdWVyeSc6IGRhc2hib2FyZFF1ZXJ5IH0gOiBmbGFncztcclxuICAgIGNvbnN0IGRhc2hib2FyZENvZGUgPSBhc0pzb24gPyAwIDogYXdhaXQgY29tbWFuZERhc2hib2FyZChkYXNoYm9hcmRGbGFncyk7XHJcbiAgICBzdGVwcy5wdXNoKHtcclxuICAgICAgICBpZDogJ2Rhc2hib2FyZF9oYW5kb2ZmJyxcclxuICAgICAgICBzdGF0dXM6IGRhc2hib2FyZENvZGUgPT09IDAgPyAncGFzcycgOiAnZmFpbCcsXHJcbiAgICAgICAgY29kZTogZGFzaGJvYXJkQ29kZSxcclxuICAgICAgICBtZXNzYWdlOiBkYXNoYm9hcmRDb2RlID09PSAwID8gJ0Rhc2hib2FyZCBoYW5kb2ZmIGNvbXBsZXRlZC4nIDogJ0Rhc2hib2FyZCBoYW5kb2ZmIGZhaWxlZC4nXHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAoYXNKc29uKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoe1xyXG4gICAgICAgICAgICBvazogZGFzaGJvYXJkQ29kZSA9PT0gMCxcclxuICAgICAgICAgICAgc3RlcHMsXHJcbiAgICAgICAgICAgIGRhc2hib2FyZFVybDogcmVzb2x2ZWREYXNoYm9hcmRVcmxcclxuICAgICAgICB9LCBudWxsLCAyKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGRhc2hib2FyZENvZGU7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHByaW50SGVscCgpOiB2b2lkIHtcclxuICAgIGNvbnNvbGUubG9nKGAwY3R4IENMSVxyXG5cclxuVXNhZ2U6XHJcbiAgMGN0eCAgICAgICAgICAgICAgICAgICAgRmlyc3QgcnVuOiBhdXRvIHNldHVwICsgYXV0aC4gQWZ0ZXJ3YXJkczogaW50ZXJhY3RpdmUgc2hlbGwuXHJcbiAgMGN0eCBzaGVsbFxyXG4gIDBjdHggc2V0dXAgWy0tY2xpZW50cz1hbGx8Y2xhdWRlLGN1cnNvcix3aW5kc3VyZl0gWy0tbm8tb3Blbl0gWy0tanNvbl1cclxuICAgICAgICAgICAgIFstLXJlcXVpcmUtY2xvdWRdIFstLXdhaXQtY2xvdWQtcmVhZHldXHJcbiAgICAgICAgICAgICBbLS1jbG91ZC13YWl0LXRpbWVvdXQtbXM9NjAwMDBdIFstLWNsb3VkLXdhaXQtaW50ZXJ2YWwtbXM9MjAwMF1cclxuICAgICAgICAgICAgIFstLWNyZWF0ZS1jb250ZXh0PTxuYW1lPl0gWy0tZGFzaGJvYXJkLXF1ZXJ5Wz1rPXYmLi4uXV1cclxuICAgICAgICAgICAgIFstLXNraXAtc2VydmljZV0gWy0tc2tpcC1ib290c3RyYXBdXHJcbiAgMGN0eCBpbnN0YWxsIFstLWNsaWVudHM9YWxsfGNsYXVkZSxjdXJzb3Isd2luZHN1cmZdIFstLWpzb25dIFstLXNraXAtYm9vdHN0cmFwXVxyXG4gIDBjdHggYm9vdHN0cmFwIFstLWRyeS1ydW5dIFstLWNsaWVudHM9Li4uXSBbLS1qc29uXVxyXG4gIDBjdHggZG9jdG9yIFstLWpzb25dIFstLWNsaWVudHM9Li4uXVxyXG4gIDBjdHggc3RhdHVzXHJcbiAgMGN0eCByZXBhaXIgWy0tY2xpZW50cz0uLi5dXHJcbiAgMGN0eCBkYXNoYm9hcmQgWy0tbm8tb3Blbl0gWy0tZGFzaGJvYXJkLXF1ZXJ5PWs9diYuLi5dXHJcbiAgMGN0eCByZWxlYXNlIHB1Ymxpc2ggLS12ZXJzaW9uIHZYLlkuWiBbLS10YWcgbGF0ZXN0fG5leHRdIFstLW90cCAxMjM0NTZdIFstLWRyeS1ydW5dIFstLWpzb25dXHJcbiAgMGN0eCBkYWVtb24gc3RhcnRcclxuXHJcbkF1dGhlbnRpY2F0aW9uOlxyXG4gIDBjdHggYXV0aCBsb2dpbiAgICBTdGFydCBkZXZpY2UtY29kZSBsb2dpbiBmbG93XHJcbiAgMGN0eCBhdXRoIGxvZ291dCAgIENsZWFyIHN0b3JlZCBjcmVkZW50aWFsc1xyXG4gIDBjdHggYXV0aCBzdGF0dXMgICBTaG93IGN1cnJlbnQgYXV0aCBzdGF0ZVxyXG4gIDBjdHggYXV0aCBzdGF0dXMgLS1qc29uXHJcblxyXG5Db25maWd1cmF0aW9uOlxyXG4gIDBjdHggY29uZmlnIGxpc3QgICAgICAgICAgICAgIFNob3cgYWxsIHNldHRpbmdzXHJcbiAgMGN0eCBjb25maWcgZ2V0IDxrZXk+ICAgICAgICAgR2V0IGEgc3BlY2lmaWMgc2V0dGluZ1xyXG4gIDBjdHggY29uZmlnIHNldCA8a2V5PiA8dmFsdWU+IFNldCBhIHNwZWNpZmljIHNldHRpbmdcclxuXHJcbiAgQ29uZmlnIGtleXM6IGF1dGguc2VydmVyLCBzeW5jLmVuYWJsZWQsIHN5bmMuZW5kcG9pbnQsIHVpLnVybCxcclxuICAgICAgICAgICAgICAgaW50ZWdyYXRpb24uY2hhdGdwdC5lbmFibGVkLCBpbnRlZ3JhdGlvbi5jaGF0Z3B0LnJlcXVpcmVBcHByb3ZhbCwgaW50ZWdyYXRpb24uYXV0b0Jvb3RzdHJhcFxyXG5cclxuU3luYzpcclxuICAwY3R4IHN5bmMgc3RhdHVzICAgU2hvdyBzeW5jIGVuZ2luZSBoZWFsdGggYW5kIHF1ZXVlXHJcbiAgMGN0eCBzeW5jIHBvbGljeSBnZXQgLS1jb250ZXh0LWlkPTxjb250ZXh0SWQ+XHJcbiAgMGN0eCBzeW5jIHBvbGljeSBzZXQgPGxvY2FsX29ubHl8bWV0YWRhdGFfb25seXxmdWxsX3N5bmM+IC0tY29udGV4dC1pZD08Y29udGV4dElkPlxyXG5cclxuQ29ubmVjdG9yOlxyXG4gIDBjdHggY29ubmVjdG9yIHNlcnZpY2UgaW5zdGFsbHxlbmFibGV8ZGlzYWJsZXx1bmluc3RhbGx8c3RhdHVzfHN0YXJ0fHN0b3B8cmVzdGFydFxyXG4gIDBjdHggY29ubmVjdG9yIGluc3RhbGx8ZW5hYmxlfGRpc2FibGV8dW5pbnN0YWxsfHN0YXR1c3xzdGFydHxzdG9wfHJlc3RhcnRcclxuICAwY3R4IGNvbm5lY3RvciBzdGF0dXMgWy0tanNvbl0gWy0tY2xvdWRdIFstLXJlcXVpcmUtYnJpZGdlXVxyXG4gIDBjdHggY29ubmVjdG9yIHZlcmlmeSBbLS1yZXF1aXJlLWNsb3VkXSBbLS1qc29uXVxyXG4gIDBjdHggY29ubmVjdG9yIHJlZ2lzdGVyIFstLWZvcmNlXSBbLS1sb2NhbC1vbmx5XSBbLS1yZXF1aXJlLWNsb3VkXSBbLS1qc29uXVxyXG4gIDBjdHggY29ubmVjdG9yIHJ1biBbLS1vbmNlXSBbLS1pbnRlcnZhbC1tcz0zMDAwMF0gWy0tbm8tZGFlbW9uLWF1dG9zdGFydF1cclxuICAwY3R4IGNvbm5lY3RvciBxdWV1ZSBzdGF0dXMgWy0tanNvbl1cclxuICAwY3R4IGNvbm5lY3RvciBxdWV1ZSBkcmFpbiBbLS1tYXgtYmF0Y2hlcz0xMF0gWy0tYmF0Y2gtc2l6ZT0yMDBdIFstLXdhaXRdIFstLXN0cmljdHwtLWZhaWwtb24tcmV0cnldIFstLXRpbWVvdXQtbXM9MTIwMDAwXSBbLS1wb2xsLW1zPTEwMDBdIFstLWpzb25dXHJcbiAgMGN0eCBjb25uZWN0b3IgcXVldWUgcHVyZ2UgWy0tYWxsfC0tb2xkZXItdGhhbi1ob3Vycz1OfC0tbWluLWF0dGVtcHRzPU5dIFstLWRyeS1ydW58LS1jb25maXJtXSBbLS1qc29uXVxyXG4gIDBjdHggY29ubmVjdG9yIHF1ZXVlIGxvZ3MgWy0tbGltaXQ9NTBdIFstLWpzb25dIFstLWNsZWFyIC0tY29uZmlybXwtLWRyeS1ydW5dXHJcbiAgMGN0eCBjb25uZWN0b3IgbG9nc1xyXG5cclxuU2VydmljZSBtYW5hZ2VtZW50IGNvbXBhdGliaWxpdHkgKHJlcXVpcmVzIEFkbWluIG9uIFdpbmRvd3MpOlxyXG4gIEJvdGggY29tbWFuZCBwYXRocyBtYW5hZ2UgdGhlIHNhbWUgdW5kZXJseWluZyBPUyBzZXJ2aWNlLlxyXG4gIFByZWZlcnJlZDogMGN0eCBjb25uZWN0b3Igc2VydmljZSA8YWN0aW9uPlxyXG4gIExlZ2FjeTogICAgMGN0eCBkYWVtb24gc2VydmljZSA8YWN0aW9uPlxyXG5cclxuTGVnYWN5IGRhZW1vbiBzZXJ2aWNlIGNvbW1hbmRzOlxyXG4gIDBjdHggZGFlbW9uIHNlcnZpY2UgaW5zdGFsbCAgICBSZWdpc3RlciBkYWVtb24gYXMgYSBzZXJ2aWNlXHJcbiAgMGN0eCBkYWVtb24gc2VydmljZSBlbmFibGUgICAgIFNldCBzZXJ2aWNlIHN0YXJ0IHR5cGUgdG8gQXV0b21hdGljXHJcbiAgMGN0eCBkYWVtb24gc2VydmljZSBkaXNhYmxlICAgIFNldCBzZXJ2aWNlIHN0YXJ0IHR5cGUgdG8gTWFudWFsXHJcbiAgMGN0eCBkYWVtb24gc2VydmljZSBzdGFydCAgICAgIFN0YXJ0IHRoZSBzZXJ2aWNlXHJcbiAgMGN0eCBkYWVtb24gc2VydmljZSBzdG9wICAgICAgIFN0b3AgdGhlIHNlcnZpY2VcclxuICAwY3R4IGRhZW1vbiBzZXJ2aWNlIHJlc3RhcnQgICAgU3RvcCB0aGVuIHN0YXJ0IHRoZSBzZXJ2aWNlXHJcbiAgMGN0eCBkYWVtb24gc2VydmljZSBzdGF0dXMgICAgIFNob3cgY3VycmVudCBzZXJ2aWNlIHN0YXRlXHJcbiAgMGN0eCBkYWVtb24gc2VydmljZSB1bmluc3RhbGwgIFJlbW92ZSBzZXJ2aWNlIHJlZ2lzdHJhdGlvblxyXG5gKTtcclxufVxyXG5cclxuLy8gXHUyNTAwXHUyNTAwXHUyNTAwIENvbmZpZyBjb21tYW5kIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxyXG5cclxuZnVuY3Rpb24gY29tbWFuZENvbmZpZ0xpc3QoKTogbnVtYmVyIHtcclxuICAgIGNvbnN0IGVudHJpZXMgPSBsaXN0Q29uZmlnKCk7XHJcbiAgICBjb25zb2xlLmxvZyhgXFxuQ29uZmlnICgke2dldENvbmZpZ1BhdGgoKX0pXFxuYCk7XHJcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHtcclxuICAgICAgICBjb25zdCBzcmNUYWcgPSBlbnRyeS5zb3VyY2UgPT09ICdkZWZhdWx0JyA/ICcgKGRlZmF1bHQpJyA6IGVudHJ5LnNvdXJjZSA9PT0gJ2VudicgPyAnIChlbnYpJyA6ICcnO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGAgICR7ZW50cnkua2V5fSA9ICR7SlNPTi5zdHJpbmdpZnkoZW50cnkudmFsdWUpfSR7c3JjVGFnfWApO1xyXG4gICAgfVxyXG4gICAgY29uc29sZS5sb2coJycpO1xyXG4gICAgcmV0dXJuIDA7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNvbW1hbmRDb25maWdHZXQoa2V5OiBzdHJpbmcgfCB1bmRlZmluZWQpOiBudW1iZXIge1xyXG4gICAgaWYgKCFrZXkpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdVc2FnZTogMGN0eCBjb25maWcgZ2V0IDxrZXk+Jyk7XHJcbiAgICAgICAgcmV0dXJuIDE7XHJcbiAgICB9XHJcbiAgICBpZiAoIWlzVmFsaWRDb25maWdLZXkoa2V5KSkge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYFVua25vd24gY29uZmlnIGtleTogJHtrZXl9YCk7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihgVmFsaWQga2V5czogJHtsaXN0Q29uZmlnKCkubWFwKGUgPT4gZS5rZXkpLmpvaW4oJywgJyl9YCk7XHJcbiAgICAgICAgcmV0dXJuIDE7XHJcbiAgICB9XHJcbiAgICBjb25zb2xlLmxvZyhnZXRDb25maWdWYWx1ZShrZXkpKTtcclxuICAgIHJldHVybiAwO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjb21tYW5kQ29uZmlnU2V0KGtleTogc3RyaW5nIHwgdW5kZWZpbmVkLCB2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogbnVtYmVyIHtcclxuICAgIGlmICgha2V5IHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdVc2FnZTogMGN0eCBjb25maWcgc2V0IDxrZXk+IDx2YWx1ZT4nKTtcclxuICAgICAgICByZXR1cm4gMTtcclxuICAgIH1cclxuICAgIGlmICghaXNWYWxpZENvbmZpZ0tleShrZXkpKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihgVW5rbm93biBjb25maWcga2V5OiAke2tleX1gKTtcclxuICAgICAgICBjb25zb2xlLmVycm9yKGBWYWxpZCBrZXlzOiAke2xpc3RDb25maWcoKS5tYXAoZSA9PiBlLmtleSkuam9pbignLCAnKX1gKTtcclxuICAgICAgICByZXR1cm4gMTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBib29sZWFuS2V5cyA9IG5ldyBTZXQ8a2V5b2YgQXBwQ29uZmlnPihbXHJcbiAgICAgICAgJ3N5bmMuZW5hYmxlZCcsXHJcbiAgICAgICAgJ2ludGVncmF0aW9uLmNoYXRncHQuZW5hYmxlZCcsXHJcbiAgICAgICAgJ2ludGVncmF0aW9uLmNoYXRncHQucmVxdWlyZUFwcHJvdmFsJyxcclxuICAgICAgICAnaW50ZWdyYXRpb24uYXV0b0Jvb3RzdHJhcCdcclxuICAgIF0pO1xyXG5cclxuICAgIC8vIFBhcnNlIGJvb2xlYW5zIGZvciBib29sZWFuLWJhY2tlZCBjb25maWcga2V5cy5cclxuICAgIGxldCBwYXJzZWQ6IHVua25vd24gPSB2YWx1ZTtcclxuICAgIGlmIChib29sZWFuS2V5cy5oYXMoa2V5KSkge1xyXG4gICAgICAgIHBhcnNlZCA9IHZhbHVlID09PSAndHJ1ZScgfHwgdmFsdWUgPT09ICcxJztcclxuICAgIH1cclxuXHJcbiAgICBzZXRDb25maWdWYWx1ZShrZXksIHBhcnNlZCBhcyBBcHBDb25maWdbdHlwZW9mIGtleV0pO1xyXG4gICAgY29uc29sZS5sb2coYFNldCAke2tleX0gPSAke0pTT04uc3RyaW5naWZ5KHBhcnNlZCl9YCk7XHJcbiAgICByZXR1cm4gMDtcclxufVxyXG5cclxuLy8gXHUyNTAwXHUyNTAwXHUyNTAwIFN5bmMgY29tbWFuZCBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcclxuXHJcbmFzeW5jIGZ1bmN0aW9uIGNvbW1hbmRTeW5jU3RhdHVzKCk6IFByb21pc2U8bnVtYmVyPiB7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IGF3YWl0IHNlbmRUb0RhZW1vbignc3luY1N0YXR1cycsIHt9KSBhcyB7XHJcbiAgICAgICAgICAgIGVuYWJsZWQ6IGJvb2xlYW47XHJcbiAgICAgICAgICAgIHJ1bm5pbmc6IGJvb2xlYW47XHJcbiAgICAgICAgICAgIGxhc3RQdXNoQXQ6IG51bWJlciB8IG51bGw7XHJcbiAgICAgICAgICAgIGxhc3RQdWxsQXQ6IG51bWJlciB8IG51bGw7XHJcbiAgICAgICAgICAgIGxhc3RFcnJvcjogc3RyaW5nIHwgbnVsbDtcclxuICAgICAgICAgICAgcXVldWU6IHsgcGVuZGluZzogbnVtYmVyOyBpbkZsaWdodDogbnVtYmVyOyBmYWlsZWQ6IG51bWJlcjsgZG9uZTogbnVtYmVyIH07XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgY29uc29sZS5sb2coJ1xcblN5bmMgU3RhdHVzXFxuJyk7XHJcbiAgICAgICAgY29uc29sZS5sb2coYCAgRW5hYmxlZDogICAgICR7c3RhdHVzLmVuYWJsZWR9YCk7XHJcbiAgICAgICAgY29uc29sZS5sb2coYCAgUnVubmluZzogICAgICR7c3RhdHVzLnJ1bm5pbmd9YCk7XHJcbiAgICAgICAgY29uc29sZS5sb2coYCAgRW5kcG9pbnQ6ICAgICR7Z2V0Q29uZmlnVmFsdWUoJ3N5bmMuZW5kcG9pbnQnKX1gKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhgICBMYXN0IHB1c2g6ICAgJHtzdGF0dXMubGFzdFB1c2hBdCA/IG5ldyBEYXRlKHN0YXR1cy5sYXN0UHVzaEF0KS50b0lTT1N0cmluZygpIDogJ25ldmVyJ31gKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhgICBMYXN0IHB1bGw6ICAgJHtzdGF0dXMubGFzdFB1bGxBdCA/IG5ldyBEYXRlKHN0YXR1cy5sYXN0UHVsbEF0KS50b0lTT1N0cmluZygpIDogJ25ldmVyJ31gKTtcclxuICAgICAgICBpZiAoc3RhdHVzLmxhc3RFcnJvcikge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgICBMYXN0IGVycm9yOiAgJHtzdGF0dXMubGFzdEVycm9yfWApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zb2xlLmxvZygnJyk7XHJcbiAgICAgICAgY29uc29sZS5sb2coJyAgUXVldWU6Jyk7XHJcbiAgICAgICAgY29uc29sZS5sb2coYCAgICBQZW5kaW5nOiAgICR7c3RhdHVzLnF1ZXVlLnBlbmRpbmd9YCk7XHJcbiAgICAgICAgY29uc29sZS5sb2coYCAgICBJbi1mbGlnaHQ6ICR7c3RhdHVzLnF1ZXVlLmluRmxpZ2h0fWApO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGAgICAgRmFpbGVkOiAgICAke3N0YXR1cy5xdWV1ZS5mYWlsZWR9YCk7XHJcbiAgICAgICAgY29uc29sZS5sb2coYCAgICBEb25lOiAgICAgICR7c3RhdHVzLnF1ZXVlLmRvbmV9YCk7XHJcbiAgICAgICAgY29uc29sZS5sb2coJycpO1xyXG4gICAgICAgIHJldHVybiAwO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gZ2V0IHN5bmMgc3RhdHVzOicsIGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKSk7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignSXMgdGhlIGRhZW1vbiBydW5uaW5nPyBUcnk6IDBjdHggZGFlbW9uIHN0YXJ0Jyk7XHJcbiAgICAgICAgcmV0dXJuIDE7XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldENvbnRleHRJZEZsYWcoZmxhZ3M6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IGJvb2xlYW4+KTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICBjb25zdCBjb250ZXh0SWQgPSBmbGFnc1snY29udGV4dC1pZCddID8/IGZsYWdzLmNvbnRleHRJZDtcclxuICAgIGlmICh0eXBlb2YgY29udGV4dElkID09PSAnc3RyaW5nJyAmJiBjb250ZXh0SWQudHJpbSgpLmxlbmd0aCA+IDApIHtcclxuICAgICAgICByZXR1cm4gY29udGV4dElkLnRyaW0oKTtcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG59XHJcblxyXG5hc3luYyBmdW5jdGlvbiBjb21tYW5kU3luY1BvbGljeUdldChmbGFnczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgYm9vbGVhbj4pOiBQcm9taXNlPG51bWJlcj4ge1xyXG4gICAgY29uc3QgY29udGV4dElkID0gZ2V0Q29udGV4dElkRmxhZyhmbGFncyk7XHJcbiAgICBpZiAoIWNvbnRleHRJZCkge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJNaXNzaW5nIHJlcXVpcmVkICctLWNvbnRleHQtaWQnIGZvciBgMGN0eCBzeW5jIHBvbGljeSBnZXRgLlwiKTtcclxuICAgICAgICByZXR1cm4gMTtcclxuICAgIH1cclxuXHJcbiAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNlbmRUb0RhZW1vbignZ2V0U3luY1BvbGljeScsIHsgY29udGV4dElkIH0pIGFzIHsgY29udGV4dElkOiBzdHJpbmc7IHN5bmNQb2xpY3k6IHN0cmluZyB9O1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdcXG5TeW5jIFBvbGljeVxcbicpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGAgIENvbnRleHQ6ICR7cmVzdWx0LmNvbnRleHRJZH1gKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhgICBQb2xpY3k6ICAke3Jlc3VsdC5zeW5jUG9saWN5fWApO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCcnKTtcclxuICAgICAgICByZXR1cm4gMDtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGdldCBzeW5jIHBvbGljeTonLCBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcikpO1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0lzIHRoZSBkYWVtb24gcnVubmluZz8gVHJ5OiAwY3R4IGRhZW1vbiBzdGFydCcpO1xyXG4gICAgICAgIHJldHVybiAxO1xyXG4gICAgfVxyXG59XHJcblxyXG5hc3luYyBmdW5jdGlvbiBjb21tYW5kU3luY1BvbGljeVNldChcclxuICAgIHBvbGljeTogc3RyaW5nIHwgdW5kZWZpbmVkLFxyXG4gICAgZmxhZ3M6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IGJvb2xlYW4+XHJcbik6IFByb21pc2U8bnVtYmVyPiB7XHJcbiAgICBjb25zdCBjb250ZXh0SWQgPSBnZXRDb250ZXh0SWRGbGFnKGZsYWdzKTtcclxuICAgIGlmICghY29udGV4dElkKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcIk1pc3NpbmcgcmVxdWlyZWQgJy0tY29udGV4dC1pZCcgZm9yIGAwY3R4IHN5bmMgcG9saWN5IHNldGAuXCIpO1xyXG4gICAgICAgIHJldHVybiAxO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChwb2xpY3kgIT09ICdsb2NhbF9vbmx5JyAmJiBwb2xpY3kgIT09ICdtZXRhZGF0YV9vbmx5JyAmJiBwb2xpY3kgIT09ICdmdWxsX3N5bmMnKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkludmFsaWQgcG9saWN5LiBFeHBlY3RlZCBvbmUgb2Y6IGxvY2FsX29ubHksIG1ldGFkYXRhX29ubHksIGZ1bGxfc3luYy5cIik7XHJcbiAgICAgICAgcmV0dXJuIDE7XHJcbiAgICB9XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzZW5kVG9EYWVtb24oJ3NldFN5bmNQb2xpY3knLCB7IGNvbnRleHRJZCwgc3luY1BvbGljeTogcG9saWN5IH0pIGFzIHsgY29udGV4dElkOiBzdHJpbmc7IHN5bmNQb2xpY3k6IHN0cmluZyB9O1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGBTeW5jIHBvbGljeSB1cGRhdGVkOiAke3Jlc3VsdC5jb250ZXh0SWR9IC0+ICR7cmVzdWx0LnN5bmNQb2xpY3l9YCk7XHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBzZXQgc3luYyBwb2xpY3k6JywgZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpKTtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdJcyB0aGUgZGFlbW9uIHJ1bm5pbmc/IFRyeTogMGN0eCBkYWVtb24gc3RhcnQnKTtcclxuICAgICAgICByZXR1cm4gMTtcclxuICAgIH1cclxufVxyXG5cclxuYXN5bmMgZnVuY3Rpb24gY29tbWFuZERhZW1vblNlcnZpY2UoYWN0aW9uOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBQcm9taXNlPG51bWJlcj4ge1xyXG4gICAgY29uc3QgcGxhdGZvcm0gPSBvcy5wbGF0Zm9ybSgpO1xyXG5cclxuICAgIHR5cGUgU2VydmljZU9wcyA9IHtcclxuICAgICAgICBpbnN0YWxsOiAoKSA9PiB2b2lkO1xyXG4gICAgICAgIGVuYWJsZTogKCkgPT4gdm9pZDtcclxuICAgICAgICBkaXNhYmxlOiAoKSA9PiB2b2lkO1xyXG4gICAgICAgIHVuaW5zdGFsbDogKCkgPT4gdm9pZDtcclxuICAgICAgICBzdGF0dXM6ICgpID0+IHZvaWQ7XHJcbiAgICAgICAgc3RhcnQ6ICgpID0+IHZvaWQ7XHJcbiAgICAgICAgc3RvcDogKCkgPT4gdm9pZDtcclxuICAgICAgICByZXN0YXJ0OiAoKSA9PiB2b2lkO1xyXG4gICAgfTtcclxuXHJcbiAgICBsZXQgb3BzOiBTZXJ2aWNlT3BzIHwgdW5kZWZpbmVkO1xyXG4gICAgaWYgKHBsYXRmb3JtID09PSAnd2luMzInKSB7XHJcbiAgICAgICAgb3BzID0ge1xyXG4gICAgICAgICAgICBpbnN0YWxsOiBpbnN0YWxsU2VydmljZVdpbmRvd3MsXHJcbiAgICAgICAgICAgIGVuYWJsZTogZW5hYmxlU2VydmljZVdpbmRvd3MsXHJcbiAgICAgICAgICAgIGRpc2FibGU6IGRpc2FibGVTZXJ2aWNlV2luZG93cyxcclxuICAgICAgICAgICAgdW5pbnN0YWxsOiB1bmluc3RhbGxTZXJ2aWNlV2luZG93cyxcclxuICAgICAgICAgICAgc3RhdHVzOiBzdGF0dXNTZXJ2aWNlV2luZG93cyxcclxuICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0U2VydmljZVdpbmRvd3MsXHJcbiAgICAgICAgICAgIHN0b3A6IHN0b3BTZXJ2aWNlV2luZG93cyxcclxuICAgICAgICAgICAgcmVzdGFydDogcmVzdGFydFNlcnZpY2VXaW5kb3dzLFxyXG4gICAgICAgIH07XHJcbiAgICB9IGVsc2UgaWYgKHBsYXRmb3JtID09PSAnZGFyd2luJykge1xyXG4gICAgICAgIG9wcyA9IHtcclxuICAgICAgICAgICAgaW5zdGFsbDogaW5zdGFsbFNlcnZpY2VNYWMsXHJcbiAgICAgICAgICAgIGVuYWJsZTogZW5hYmxlU2VydmljZU1hYyxcclxuICAgICAgICAgICAgZGlzYWJsZTogZGlzYWJsZVNlcnZpY2VNYWMsXHJcbiAgICAgICAgICAgIHVuaW5zdGFsbDogdW5pbnN0YWxsU2VydmljZU1hYyxcclxuICAgICAgICAgICAgc3RhdHVzOiBzdGF0dXNTZXJ2aWNlTWFjLFxyXG4gICAgICAgICAgICBzdGFydDogc3RhcnRTZXJ2aWNlTWFjLFxyXG4gICAgICAgICAgICBzdG9wOiBzdG9wU2VydmljZU1hYyxcclxuICAgICAgICAgICAgcmVzdGFydDogcmVzdGFydFNlcnZpY2VNYWMsXHJcbiAgICAgICAgfTtcclxuICAgIH0gZWxzZSBpZiAocGxhdGZvcm0gPT09ICdsaW51eCcpIHtcclxuICAgICAgICBvcHMgPSB7XHJcbiAgICAgICAgICAgIGluc3RhbGw6IGluc3RhbGxTZXJ2aWNlTGludXgsXHJcbiAgICAgICAgICAgIGVuYWJsZTogZW5hYmxlU2VydmljZUxpbnV4LFxyXG4gICAgICAgICAgICBkaXNhYmxlOiBkaXNhYmxlU2VydmljZUxpbnV4LFxyXG4gICAgICAgICAgICB1bmluc3RhbGw6IHVuaW5zdGFsbFNlcnZpY2VMaW51eCxcclxuICAgICAgICAgICAgc3RhdHVzOiBzdGF0dXNTZXJ2aWNlTGludXgsXHJcbiAgICAgICAgICAgIHN0YXJ0OiBzdGFydFNlcnZpY2VMaW51eCxcclxuICAgICAgICAgICAgc3RvcDogc3RvcFNlcnZpY2VMaW51eCxcclxuICAgICAgICAgICAgcmVzdGFydDogcmVzdGFydFNlcnZpY2VMaW51eCxcclxuICAgICAgICB9O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKGBkYWVtb24gc2VydmljZSBjb21tYW5kcyBhcmUgbm90IHN1cHBvcnRlZCBvbiBwbGF0Zm9ybTogJHtwbGF0Zm9ybX1gKTtcclxuICAgICAgICByZXR1cm4gMTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB2YWxpZEFjdGlvbnMgPSBbJ2luc3RhbGwnLCAnZW5hYmxlJywgJ2Rpc2FibGUnLCAndW5pbnN0YWxsJywgJ3N0YXR1cycsICdzdGFydCcsICdzdG9wJywgJ3Jlc3RhcnQnXTtcclxuICAgIGlmICghYWN0aW9uIHx8ICF2YWxpZEFjdGlvbnMuaW5jbHVkZXMoYWN0aW9uKSkge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYFVua25vd24gc2VydmljZSBhY3Rpb246ICcke2FjdGlvbiA/PyAnJ30nYCk7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihgVmFsaWQgYWN0aW9uczogJHt2YWxpZEFjdGlvbnMuam9pbignLCAnKX1gKTtcclxuICAgICAgICByZXR1cm4gMTtcclxuICAgIH1cclxuXHJcbiAgICB0cnkge1xyXG4gICAgICAgIG9wc1thY3Rpb24gYXMga2V5b2YgU2VydmljZU9wc10oKTtcclxuICAgICAgICByZXR1cm4gMDtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihgc2VydmljZSAke2FjdGlvbn0gZmFpbGVkOmAsIGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKSk7XHJcbiAgICAgICAgcmV0dXJuIDE7XHJcbiAgICB9XHJcbn1cclxuXHJcbmFzeW5jIGZ1bmN0aW9uIG1haW4oKTogUHJvbWlzZTxudW1iZXI+IHtcclxuICAgIGNvbnN0IGFyZ3YgPSBwcm9jZXNzLmFyZ3Yuc2xpY2UoMik7XHJcbiAgICBpZiAoYXJndi5sZW5ndGggPT09IDApIHtcclxuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuQ1RYX1NIRUxMX01PREUgPT09ICcxJykge1xyXG4gICAgICAgICAgICBwcmludEhlbHAoKTtcclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwcm9jZXNzLnN0ZGluLmlzVFRZICYmIHByb2Nlc3Muc3Rkb3V0LmlzVFRZKSB7XHJcbiAgICAgICAgICAgIC8vIEZpcnN0LXRpbWUgZXhwZXJpZW5jZTogaWYgbm8gdG9rZW4gZXhpc3RzLCBhdXRvLXJ1biBzZXR1cCBzbyB0aGVcclxuICAgICAgICAgICAgLy8gdXNlciBkb2Vzbid0IGhhdmUgdG8ga25vdyBhYm91dCBgMGN0eCBzZXR1cGAgb24gZmlyc3QgaW5zdGFsbC5cclxuICAgICAgICAgICAgaWYgKCFyZXNvbHZlVG9rZW4oKSkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coY29sb3IuYm9sZCgnXFxuV2VsY29tZSB0byAwY3R4IScpKTtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGNvbG9yLmRpbShcIkxvb2tzIGxpa2UgdGhpcyBpcyB5b3VyIGZpcnN0IHRpbWUuIExldCdzIGdldCB5b3Ugc2V0IHVwLlxcblwiKSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY29tbWFuZFNldHVwKHt9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gY29tbWFuZFNoZWxsKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHByaW50SGVscCgpO1xyXG4gICAgICAgIHJldHVybiAwO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlQXJncyhhcmd2KTtcclxuXHJcbiAgICBzd2l0Y2ggKHBhcnNlZC5jb21tYW5kKSB7XHJcbiAgICAgICAgY2FzZSAnc2V0dXAnOlxyXG4gICAgICAgICAgICByZXR1cm4gY29tbWFuZFNldHVwKHBhcnNlZC5mbGFncyk7XHJcbiAgICAgICAgY2FzZSAnaW5zdGFsbCc6XHJcbiAgICAgICAgICAgIHJldHVybiBjb21tYW5kSW5zdGFsbChwYXJzZWQuZmxhZ3MpO1xyXG4gICAgICAgIGNhc2UgJ2Jvb3RzdHJhcCc6XHJcbiAgICAgICAgICAgIHJldHVybiBjb21tYW5kQm9vdHN0cmFwKHBhcnNlZC5mbGFncyk7XHJcbiAgICAgICAgY2FzZSAnZG9jdG9yJzpcclxuICAgICAgICAgICAgcmV0dXJuIGNvbW1hbmREb2N0b3IocGFyc2VkLmZsYWdzKTtcclxuICAgICAgICBjYXNlICdzdGF0dXMnOlxyXG4gICAgICAgICAgICByZXR1cm4gY29tbWFuZFN0YXR1cygpO1xyXG4gICAgICAgIGNhc2UgJ3JlcGFpcic6XHJcbiAgICAgICAgICAgIHJldHVybiBjb21tYW5kUmVwYWlyKHBhcnNlZC5mbGFncyk7XHJcbiAgICAgICAgY2FzZSAnYXV0aCc6IHtcclxuICAgICAgICAgICAgY29uc3Qgc3ViID0gcGFyc2VkLnN1YmNvbW1hbmQ7XHJcbiAgICAgICAgICAgIGlmIChzdWIgPT09ICdsb2dpbicpIHJldHVybiBjb21tYW5kQXV0aExvZ2luKHBhcnNlZC5mbGFncyk7XHJcbiAgICAgICAgICAgIGlmIChzdWIgPT09ICdsb2dvdXQnKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGNvbW1hbmRBdXRoTG9nb3V0KCkpO1xyXG4gICAgICAgICAgICBpZiAoc3ViID09PSAnc3RhdHVzJykgcmV0dXJuIFByb21pc2UucmVzb2x2ZShjb21tYW5kQXV0aFN0YXR1cyhwYXJzZWQuZmxhZ3MpKTtcclxuICAgICAgICAgICAgaWYgKHN1YiA9PT0gJ3JvdGF0ZScpIHJldHVybiBjb21tYW5kQXV0aFJvdGF0ZShwYXJzZWQuZmxhZ3MpO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgXFxuQXV0aGVudGljYXRpb24gY29tbWFuZHM6XFxuYCk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGAgIGF1dGggbG9naW4gICAgU3RhcnQgZGV2aWNlLWNvZGUgbG9naW4gZmxvd2ApO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgICBhdXRoIGxvZ291dCAgIENsZWFyIHN0b3JlZCBjcmVkZW50aWFsc2ApO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgICBhdXRoIHN0YXR1cyAgIFNob3cgY3VycmVudCBhdXRoIHN0YXRlXFxuYCk7XHJcbiAgICAgICAgICAgIHJldHVybiBzdWIgPyAxIDogMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2FzZSAnZGFlbW9uJzpcclxuICAgICAgICAgICAgaWYgKHBhcnNlZC5zdWJjb21tYW5kID09PSAnc3RhcnQnKSB7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0RGFlbW9uRGV0YWNoZWQoKTtcclxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcikpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29uc3Qgb2sgPSBhd2FpdCB3YWl0Rm9yRGFlbW9uKCk7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhvayA/ICdkYWVtb24gc3RhcnRlZCcgOiAnZGFlbW9uIHN0YXJ0IHRpbWVvdXQnKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBvayA/IDAgOiAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChwYXJzZWQuc3ViY29tbWFuZCA9PT0gJ3NlcnZpY2UnKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY29tbWFuZERhZW1vblNlcnZpY2UocGFyc2VkLnNlcnZpY2VBY3Rpb24pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHByaW50SGVscCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gMTtcclxuICAgICAgICBjYXNlICdjb25maWcnOiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN1YiA9IHBhcnNlZC5zdWJjb21tYW5kO1xyXG4gICAgICAgICAgICBpZiAoc3ViID09PSAnbGlzdCcgfHwgIXN1YikgcmV0dXJuIGNvbW1hbmRDb25maWdMaXN0KCk7XHJcbiAgICAgICAgICAgIGlmIChzdWIgPT09ICdnZXQnKSByZXR1cm4gY29tbWFuZENvbmZpZ0dldChwYXJzZWQucG9zaXRpb25hbEFyZ3NbMF0pO1xyXG4gICAgICAgICAgICBpZiAoc3ViID09PSAnc2V0JykgcmV0dXJuIGNvbW1hbmRDb25maWdTZXQocGFyc2VkLnBvc2l0aW9uYWxBcmdzWzBdLCBwYXJzZWQucG9zaXRpb25hbEFyZ3NbMV0pO1xyXG4gICAgICAgICAgICBwcmludEhlbHAoKTtcclxuICAgICAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhc2UgJ3N5bmMnOiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN1YiA9IHBhcnNlZC5zdWJjb21tYW5kO1xyXG4gICAgICAgICAgICBpZiAoc3ViID09PSAnc3RhdHVzJyB8fCAhc3ViKSByZXR1cm4gY29tbWFuZFN5bmNTdGF0dXMoKTtcclxuICAgICAgICAgICAgaWYgKHN1YiA9PT0gJ3BvbGljeScpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGFjdGlvbiA9IHBhcnNlZC5wb3NpdGlvbmFsQXJnc1swXTtcclxuICAgICAgICAgICAgICAgIGlmIChhY3Rpb24gPT09ICdnZXQnKSByZXR1cm4gY29tbWFuZFN5bmNQb2xpY3lHZXQocGFyc2VkLmZsYWdzKTtcclxuICAgICAgICAgICAgICAgIGlmIChhY3Rpb24gPT09ICdzZXQnKSByZXR1cm4gY29tbWFuZFN5bmNQb2xpY3lTZXQocGFyc2VkLnBvc2l0aW9uYWxBcmdzWzFdLCBwYXJzZWQuZmxhZ3MpO1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignVXNhZ2U6IDBjdHggc3luYyBwb2xpY3kgZ2V0IC0tY29udGV4dC1pZD08Y29udGV4dElkPicpO1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignICAgb3I6IDBjdHggc3luYyBwb2xpY3kgc2V0IDxsb2NhbF9vbmx5fG1ldGFkYXRhX29ubHl8ZnVsbF9zeW5jPiAtLWNvbnRleHQtaWQ9PGNvbnRleHRJZD4nKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHByaW50SGVscCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2FzZSAnY29ubmVjdG9yJzpcclxuICAgICAgICAgICAgaWYgKHBhcnNlZC5zdWJjb21tYW5kID09PSAnc2VydmljZScpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBjb21tYW5kQ29ubmVjdG9yKHBhcnNlZC5zZXJ2aWNlQWN0aW9uLCBwYXJzZWQuZmxhZ3MpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChwYXJzZWQuc3ViY29tbWFuZCA9PT0gJ3F1ZXVlJykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbW1hbmRDb25uZWN0b3JRdWV1ZShwYXJzZWQucG9zaXRpb25hbEFyZ3NbMF0sIHBhcnNlZC5mbGFncyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGNvbW1hbmRDb25uZWN0b3IocGFyc2VkLnN1YmNvbW1hbmQsIHBhcnNlZC5mbGFncyk7XHJcbiAgICAgICAgY2FzZSAnZGFzaGJvYXJkJzpcclxuICAgICAgICAgICAgcmV0dXJuIGNvbW1hbmREYXNoYm9hcmQocGFyc2VkLmZsYWdzKTtcclxuICAgICAgICBjYXNlICdzaGVsbCc6XHJcbiAgICAgICAgICAgIHJldHVybiBjb21tYW5kU2hlbGwoKTtcclxuICAgICAgICBjYXNlICdyZWxlYXNlJzpcclxuICAgICAgICAgICAgaWYgKHBhcnNlZC5zdWJjb21tYW5kID09PSAncHVibGlzaCcpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBjb21tYW5kUmVsZWFzZVB1Ymxpc2gocGFyc2VkLmZsYWdzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBwcmludEhlbHAoKTtcclxuICAgICAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgICAgY2FzZSAndWknOlxyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdgMGN0eCB1aWAgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBlbmQtdXNlciBmbG93LicpO1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdVc2UgYDBjdHggc2V0dXBgIGFuZCB0aGVuIG9wZW4gdGhlIGhvc3RlZCBkYXNoYm9hcmQgVVJMIChvciBydW4gYDBjdHggZGFzaGJvYXJkYCkuJyk7XHJcbiAgICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgIGNhc2UgJ2hlbHAnOlxyXG4gICAgICAgICAgICBwcmludEhlbHAoKTtcclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgcHJpbnRIZWxwKCk7XHJcbiAgICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgfVxyXG59XHJcblxyXG5tYWluKClcclxuICAgIC50aGVuKGNvZGUgPT4ge1xyXG4gICAgICAgIHByb2Nlc3MuZXhpdENvZGUgPSBjb2RlO1xyXG4gICAgfSlcclxuICAgIC5jYXRjaChlcnJvciA9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcikpO1xyXG4gICAgICAgIHByb2Nlc3MuZXhpdENvZGUgPSAxO1xyXG4gICAgfSk7XHJcbiIsICJpbXBvcnQgZnMgZnJvbSAnZnMnO1xuaW1wb3J0IG9zIGZyb20gJ29zJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuXG50eXBlIFN1cHBvcnRlZENsaWVudCA9ICdjbGF1ZGUnIHwgJ2N1cnNvcicgfCAnd2luZHN1cmYnO1xuXG5pbnRlcmZhY2UgUmVnaXN0cmF0aW9uIHtcbiAgICBjb21tYW5kOiBzdHJpbmc7XG4gICAgYXJnczogc3RyaW5nW107XG59XG5cbmludGVyZmFjZSBCb290c3RyYXBPcHRpb25zIHtcbiAgICBjbGllbnRzOiBTdXBwb3J0ZWRDbGllbnRbXTtcbiAgICBkcnlSdW4/OiBib29sZWFuO1xuICAgIGVudHJ5cG9pbnQ/OiBzdHJpbmc7XG4gICAgc2VydmVyTmFtZT86IHN0cmluZztcbiAgICBwbGF0Zm9ybT86IE5vZGVKUy5QbGF0Zm9ybTtcbiAgICBob21lRGlyPzogc3RyaW5nO1xuICAgIGFwcERhdGFEaXI/OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBCb290c3RyYXBSZXN1bHQge1xuICAgIGNsaWVudDogU3VwcG9ydGVkQ2xpZW50O1xuICAgIGNvbmZpZ1BhdGg6IHN0cmluZztcbiAgICBzdGF0dXM6ICd1cGRhdGVkJyB8ICdjcmVhdGVkJyB8ICd1bmNoYW5nZWQnIHwgJ3NraXBwZWQnIHwgJ2ZhaWxlZCc7XG4gICAgbWVzc2FnZT86IHN0cmluZztcbn1cblxuZnVuY3Rpb24gcGFyc2VDbGllbnRzKHJhdzogc3RyaW5nIHwgdW5kZWZpbmVkKTogU3VwcG9ydGVkQ2xpZW50W10ge1xuICAgIGNvbnN0IHNvdXJjZSA9IChyYXcgfHwgJ2NsYXVkZSxjdXJzb3Isd2luZHN1cmYnKS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoc291cmNlID09PSAnYWxsJykgcmV0dXJuIFsnY2xhdWRlJywgJ2N1cnNvcicsICd3aW5kc3VyZiddO1xuXG4gICAgY29uc3QgcGFyc2VkID0gc291cmNlXG4gICAgICAgIC5zcGxpdCgnLCcpXG4gICAgICAgIC5tYXAoaXRlbSA9PiBpdGVtLnRyaW0oKSlcbiAgICAgICAgLmZpbHRlcigoaXRlbSk6IGl0ZW0gaXMgU3VwcG9ydGVkQ2xpZW50ID0+IGl0ZW0gPT09ICdjbGF1ZGUnIHx8IGl0ZW0gPT09ICdjdXJzb3InIHx8IGl0ZW0gPT09ICd3aW5kc3VyZicpO1xuXG4gICAgcmV0dXJuIHBhcnNlZC5sZW5ndGggPT09IDAgPyBbJ2NsYXVkZScsICdjdXJzb3InLCAnd2luZHN1cmYnXSA6IHBhcnNlZDtcbn1cblxuZnVuY3Rpb24gZ2V0UGxhdGZvcm0ob3B0aW9ucz86IFBpY2s8Qm9vdHN0cmFwT3B0aW9ucywgJ3BsYXRmb3JtJz4pOiBOb2RlSlMuUGxhdGZvcm0ge1xuICAgIHJldHVybiBvcHRpb25zPy5wbGF0Zm9ybSB8fCBwcm9jZXNzLnBsYXRmb3JtO1xufVxuXG5mdW5jdGlvbiBnZXRIb21lRGlyKG9wdGlvbnM/OiBQaWNrPEJvb3RzdHJhcE9wdGlvbnMsICdob21lRGlyJz4pOiBzdHJpbmcge1xuICAgIHJldHVybiBvcHRpb25zPy5ob21lRGlyIHx8IG9zLmhvbWVkaXIoKTtcbn1cblxuZnVuY3Rpb24gZ2V0QXBwRGF0YURpcihob21lRGlyOiBzdHJpbmcsIG9wdGlvbnM/OiBQaWNrPEJvb3RzdHJhcE9wdGlvbnMsICdhcHBEYXRhRGlyJz4pOiBzdHJpbmcge1xuICAgIHJldHVybiBvcHRpb25zPy5hcHBEYXRhRGlyIHx8IHByb2Nlc3MuZW52LkFQUERBVEEgfHwgcGF0aC5qb2luKGhvbWVEaXIsICdBcHBEYXRhJywgJ1JvYW1pbmcnKTtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZUVudHJ5cG9pbnQoY3VzdG9tRW50cnlwb2ludD86IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKGN1c3RvbUVudHJ5cG9pbnQpIHJldHVybiBwYXRoLnJlc29sdmUoY3VzdG9tRW50cnlwb2ludCk7XG5cbiAgICBjb25zdCBjYW5kaWRhdGVzID0gW1xuICAgICAgICBwYXRoLnJlc29sdmUoX19kaXJuYW1lLCAnaW5kZXguanMnKSxcbiAgICAgICAgcGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCksICdwYWNrYWdlcycsICdtY3AnLCAnZGlzdCcsICdpbmRleC5qcycpLFxuICAgICAgICBwYXRoLnJlc29sdmUocHJvY2Vzcy5jd2QoKSwgJ2Rpc3QnLCAnaW5kZXguanMnKVxuICAgIF07XG5cbiAgICBmb3IgKGNvbnN0IGNhbmRpZGF0ZSBvZiBjYW5kaWRhdGVzKSB7XG4gICAgICAgIGlmIChmcy5leGlzdHNTeW5jKGNhbmRpZGF0ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBjYW5kaWRhdGU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCByZXNvbHZlIE1DUCBlbnRyeXBvaW50LiBSdW4gYG5wbSBydW4gYnVpbGRgIGZpcnN0LicpO1xufVxuXG5mdW5jdGlvbiBnZXRDYW5kaWRhdGVQYXRocyhcbiAgICBjbGllbnQ6IFN1cHBvcnRlZENsaWVudCxcbiAgICBwbGF0Zm9ybTogTm9kZUpTLlBsYXRmb3JtLFxuICAgIGhvbWVEaXI6IHN0cmluZyxcbiAgICBhcHBEYXRhRGlyOiBzdHJpbmdcbik6IHN0cmluZ1tdIHtcbiAgICBzd2l0Y2ggKGNsaWVudCkge1xuICAgICAgICBjYXNlICdjbGF1ZGUnOlxuICAgICAgICAgICAgaWYgKHBsYXRmb3JtID09PSAnd2luMzInKSByZXR1cm4gW3BhdGguam9pbihhcHBEYXRhRGlyLCAnQ2xhdWRlJywgJ2NsYXVkZV9kZXNrdG9wX2NvbmZpZy5qc29uJyldO1xuICAgICAgICAgICAgaWYgKHBsYXRmb3JtID09PSAnZGFyd2luJykgcmV0dXJuIFtwYXRoLmpvaW4oaG9tZURpciwgJ0xpYnJhcnknLCAnQXBwbGljYXRpb24gU3VwcG9ydCcsICdDbGF1ZGUnLCAnY2xhdWRlX2Rlc2t0b3BfY29uZmlnLmpzb24nKV07XG4gICAgICAgICAgICByZXR1cm4gW3BhdGguam9pbihob21lRGlyLCAnLmNvbmZpZycsICdDbGF1ZGUnLCAnY2xhdWRlX2Rlc2t0b3BfY29uZmlnLmpzb24nKV07XG5cbiAgICAgICAgY2FzZSAnY3Vyc29yJzpcbiAgICAgICAgICAgIGlmIChwbGF0Zm9ybSA9PT0gJ3dpbjMyJykgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICBwYXRoLmpvaW4oYXBwRGF0YURpciwgJ0N1cnNvcicsICdVc2VyJywgJ21jcC5qc29uJyksXG4gICAgICAgICAgICAgICAgcGF0aC5qb2luKGhvbWVEaXIsICcuY3Vyc29yJywgJ21jcC5qc29uJylcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBpZiAocGxhdGZvcm0gPT09ICdkYXJ3aW4nKSByZXR1cm4gW1xuICAgICAgICAgICAgICAgIHBhdGguam9pbihob21lRGlyLCAnTGlicmFyeScsICdBcHBsaWNhdGlvbiBTdXBwb3J0JywgJ0N1cnNvcicsICdVc2VyJywgJ21jcC5qc29uJyksXG4gICAgICAgICAgICAgICAgcGF0aC5qb2luKGhvbWVEaXIsICcuY3Vyc29yJywgJ21jcC5qc29uJylcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgIHBhdGguam9pbihob21lRGlyLCAnLmNvbmZpZycsICdDdXJzb3InLCAnVXNlcicsICdtY3AuanNvbicpLFxuICAgICAgICAgICAgICAgIHBhdGguam9pbihob21lRGlyLCAnLmN1cnNvcicsICdtY3AuanNvbicpXG4gICAgICAgICAgICBdO1xuXG4gICAgICAgIGNhc2UgJ3dpbmRzdXJmJzpcbiAgICAgICAgICAgIGlmIChwbGF0Zm9ybSA9PT0gJ3dpbjMyJykgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICBwYXRoLmpvaW4oYXBwRGF0YURpciwgJ1dpbmRzdXJmJywgJ1VzZXInLCAnbWNwLmpzb24nKSxcbiAgICAgICAgICAgICAgICBwYXRoLmpvaW4oaG9tZURpciwgJy53aW5kc3VyZicsICdtY3AuanNvbicpXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgaWYgKHBsYXRmb3JtID09PSAnZGFyd2luJykgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICBwYXRoLmpvaW4oaG9tZURpciwgJ0xpYnJhcnknLCAnQXBwbGljYXRpb24gU3VwcG9ydCcsICdXaW5kc3VyZicsICdVc2VyJywgJ21jcC5qc29uJyksXG4gICAgICAgICAgICAgICAgcGF0aC5qb2luKGhvbWVEaXIsICcud2luZHN1cmYnLCAnbWNwLmpzb24nKVxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgcGF0aC5qb2luKGhvbWVEaXIsICcuY29uZmlnJywgJ1dpbmRzdXJmJywgJ1VzZXInLCAnbWNwLmpzb24nKSxcbiAgICAgICAgICAgICAgICBwYXRoLmpvaW4oaG9tZURpciwgJy53aW5kc3VyZicsICdtY3AuanNvbicpXG4gICAgICAgICAgICBdO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gcGlja1dyaXRhYmxlUGF0aChjYW5kaWRhdGVzOiBzdHJpbmdbXSk6IHN0cmluZyB8IG51bGwge1xuICAgIGNvbnN0IGV4aXN0aW5nID0gY2FuZGlkYXRlcy5maW5kKGNhbmRpZGF0ZSA9PiBmcy5leGlzdHNTeW5jKGNhbmRpZGF0ZSkpO1xuICAgIGlmIChleGlzdGluZykgcmV0dXJuIGV4aXN0aW5nO1xuXG4gICAgY29uc3QgcGFyZW50RXhpc3RzID0gY2FuZGlkYXRlcy5maW5kKGNhbmRpZGF0ZSA9PiBmcy5leGlzdHNTeW5jKHBhdGguZGlybmFtZShjYW5kaWRhdGUpKSk7XG4gICAgcmV0dXJuIHBhcmVudEV4aXN0cyB8fCBudWxsO1xufVxuXG5mdW5jdGlvbiByZWFkSnNvbihwYXRoTmFtZTogc3RyaW5nKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICAgIGlmICghZnMuZXhpc3RzU3luYyhwYXRoTmFtZSkpIHJldHVybiB7fTtcblxuICAgIGNvbnN0IHJhdyA9IGZzLnJlYWRGaWxlU3luYyhwYXRoTmFtZSwgJ3V0ZjgnKS50cmltKCk7XG4gICAgaWYgKCFyYXcpIHJldHVybiB7fTtcblxuICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UocmF3KTtcbiAgICBpZiAoIXBhcnNlZCB8fCB0eXBlb2YgcGFyc2VkICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KHBhcnNlZCkpIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZWQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59XG5cbmZ1bmN0aW9uIHdyaXRlSnNvbihwYXRoTmFtZTogc3RyaW5nLCB2YWx1ZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiB2b2lkIHtcbiAgICBmcy5ta2RpclN5bmMocGF0aC5kaXJuYW1lKHBhdGhOYW1lKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgZnMud3JpdGVGaWxlU3luYyhwYXRoTmFtZSwgSlNPTi5zdHJpbmdpZnkodmFsdWUsIG51bGwsIDIpICsgJ1xcbicsICd1dGY4Jyk7XG59XG5cbmZ1bmN0aW9uIHVwc2VydFNlcnZlckNvbmZpZyhcbiAgICBjb25maWc6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgIHNlcnZlck5hbWU6IHN0cmluZyxcbiAgICByZWdpc3RyYXRpb246IFJlZ2lzdHJhdGlvblxuKTogeyBjaGFuZ2VkOiBib29sZWFuOyBuZXh0Q29uZmlnOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9IHtcbiAgICBjb25zdCBuZXh0Q29uZmlnOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHsgLi4uY29uZmlnIH07XG5cbiAgICBjb25zdCByYXdTZXJ2ZXJzID0gbmV4dENvbmZpZy5tY3BTZXJ2ZXJzO1xuICAgIGNvbnN0IHNlcnZlcnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0gcmF3U2VydmVycyAmJiB0eXBlb2YgcmF3U2VydmVycyA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkocmF3U2VydmVycylcbiAgICAgICAgPyB7IC4uLihyYXdTZXJ2ZXJzIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KSB9XG4gICAgICAgIDoge307XG5cbiAgICBjb25zdCBwcmV2aW91cyA9IHNlcnZlcnNbc2VydmVyTmFtZV07XG4gICAgY29uc3QgbmV4dCA9IHsgY29tbWFuZDogcmVnaXN0cmF0aW9uLmNvbW1hbmQsIGFyZ3M6IHJlZ2lzdHJhdGlvbi5hcmdzIH07XG4gICAgY29uc3QgY2hhbmdlZCA9IEpTT04uc3RyaW5naWZ5KHByZXZpb3VzKSAhPT0gSlNPTi5zdHJpbmdpZnkobmV4dCk7XG5cbiAgICBzZXJ2ZXJzW3NlcnZlck5hbWVdID0gbmV4dDtcbiAgICBuZXh0Q29uZmlnLm1jcFNlcnZlcnMgPSBzZXJ2ZXJzO1xuXG4gICAgcmV0dXJuIHsgY2hhbmdlZCwgbmV4dENvbmZpZyB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYm9vdHN0cmFwTWNwUmVnaXN0cmF0aW9uKG9wdGlvbnM6IEJvb3RzdHJhcE9wdGlvbnMpOiBCb290c3RyYXBSZXN1bHRbXSB7XG4gICAgY29uc3QgcGxhdGZvcm0gPSBnZXRQbGF0Zm9ybShvcHRpb25zKTtcbiAgICBjb25zdCBob21lRGlyID0gZ2V0SG9tZURpcihvcHRpb25zKTtcbiAgICBjb25zdCBhcHBEYXRhRGlyID0gZ2V0QXBwRGF0YURpcihob21lRGlyLCBvcHRpb25zKTtcbiAgICBjb25zdCBzZXJ2ZXJOYW1lID0gb3B0aW9ucy5zZXJ2ZXJOYW1lIHx8ICcwY3R4JztcbiAgICBjb25zdCBlbnRyeXBvaW50ID0gcmVzb2x2ZUVudHJ5cG9pbnQob3B0aW9ucy5lbnRyeXBvaW50KTtcblxuICAgIGNvbnN0IHJlZ2lzdHJhdGlvbjogUmVnaXN0cmF0aW9uID0ge1xuICAgICAgICBjb21tYW5kOiBwcm9jZXNzLmV4ZWNQYXRoLFxuICAgICAgICBhcmdzOiBbZW50cnlwb2ludF1cbiAgICB9O1xuXG4gICAgY29uc3QgcmVzdWx0czogQm9vdHN0cmFwUmVzdWx0W10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgY2xpZW50IG9mIG9wdGlvbnMuY2xpZW50cykge1xuICAgICAgICBjb25zdCBjYW5kaWRhdGVzID0gZ2V0Q2FuZGlkYXRlUGF0aHMoY2xpZW50LCBwbGF0Zm9ybSwgaG9tZURpciwgYXBwRGF0YURpcik7XG4gICAgICAgIGNvbnN0IHRhcmdldFBhdGggPSBwaWNrV3JpdGFibGVQYXRoKGNhbmRpZGF0ZXMpO1xuXG4gICAgICAgIGlmICghdGFyZ2V0UGF0aCkge1xuICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHtcbiAgICAgICAgICAgICAgICBjbGllbnQsXG4gICAgICAgICAgICAgICAgY29uZmlnUGF0aDogY2FuZGlkYXRlc1swXSxcbiAgICAgICAgICAgICAgICBzdGF0dXM6ICdza2lwcGVkJyxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnTm8ga25vd24gY2xpZW50IGNvbmZpZyBkaXJlY3RvcnkgZGV0ZWN0ZWQuJ1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBleGlzdGVkQmVmb3JlID0gZnMuZXhpc3RzU3luYyh0YXJnZXRQYXRoKTtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnQgPSByZWFkSnNvbih0YXJnZXRQYXRoKTtcbiAgICAgICAgICAgIGNvbnN0IHsgY2hhbmdlZCwgbmV4dENvbmZpZyB9ID0gdXBzZXJ0U2VydmVyQ29uZmlnKGN1cnJlbnQsIHNlcnZlck5hbWUsIHJlZ2lzdHJhdGlvbik7XG5cbiAgICAgICAgICAgIGlmICghY2hhbmdlZCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaCh7IGNsaWVudCwgY29uZmlnUGF0aDogdGFyZ2V0UGF0aCwgc3RhdHVzOiAndW5jaGFuZ2VkJyB9KTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFvcHRpb25zLmRyeVJ1bikge1xuICAgICAgICAgICAgICAgIHdyaXRlSnNvbih0YXJnZXRQYXRoLCBuZXh0Q29uZmlnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHtcbiAgICAgICAgICAgICAgICBjbGllbnQsXG4gICAgICAgICAgICAgICAgY29uZmlnUGF0aDogdGFyZ2V0UGF0aCxcbiAgICAgICAgICAgICAgICBzdGF0dXM6IGV4aXN0ZWRCZWZvcmUgPyAndXBkYXRlZCcgOiAnY3JlYXRlZCdcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHtcbiAgICAgICAgICAgICAgICBjbGllbnQsXG4gICAgICAgICAgICAgICAgY29uZmlnUGF0aDogdGFyZ2V0UGF0aCxcbiAgICAgICAgICAgICAgICBzdGF0dXM6ICdmYWlsZWQnLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0cztcbn1cblxuZnVuY3Rpb24gcGFyc2VBcmdWYWx1ZShmbGFnOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGRpcmVjdCA9IHByb2Nlc3MuYXJndi5maW5kKGFyZyA9PiBhcmcuc3RhcnRzV2l0aChgJHtmbGFnfT1gKSk7XG4gICAgaWYgKGRpcmVjdCkgcmV0dXJuIGRpcmVjdC5zbGljZShmbGFnLmxlbmd0aCArIDEpO1xuXG4gICAgY29uc3QgaW5kZXggPSBwcm9jZXNzLmFyZ3YuZmluZEluZGV4KGFyZyA9PiBhcmcgPT09IGZsYWcpO1xuICAgIGlmIChpbmRleCAhPT0gLTEgJiYgcHJvY2Vzcy5hcmd2W2luZGV4ICsgMV0pIHtcbiAgICAgICAgcmV0dXJuIHByb2Nlc3MuYXJndltpbmRleCArIDFdO1xuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGhhc0ZsYWcoZmxhZzogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHByb2Nlc3MuYXJndi5pbmNsdWRlcyhmbGFnKSB8fCBwcm9jZXNzLmFyZ3Yuc29tZShhcmcgPT4gYXJnLnN0YXJ0c1dpdGgoYCR7ZmxhZ309YCkpO1xufVxuXG5mdW5jdGlvbiBwcmludFN1bW1hcnkocmVzdWx0czogQm9vdHN0cmFwUmVzdWx0W10sIGRyeVJ1bjogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IG1vZGUgPSBkcnlSdW4gPyAnRFJZIFJVTicgOiAnQVBQTElFRCc7XG4gICAgY29uc29sZS5sb2coYFxcbjBjdHggTUNQIGJvb3RzdHJhcCAoJHttb2RlfSlgKTtcbiAgICBmb3IgKGNvbnN0IHJlc3VsdCBvZiByZXN1bHRzKSB7XG4gICAgICAgIGNvbnN0IHN1ZmZpeCA9IHJlc3VsdC5tZXNzYWdlID8gYCAtICR7cmVzdWx0Lm1lc3NhZ2V9YCA6ICcnO1xuICAgICAgICBjb25zb2xlLmxvZyhgLSAke3Jlc3VsdC5jbGllbnR9OiAke3Jlc3VsdC5zdGF0dXN9ICgke3Jlc3VsdC5jb25maWdQYXRofSkke3N1ZmZpeH1gKTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBydW5Cb290c3RyYXBGcm9tQ2xpKCk6IG51bWJlciB7XG4gICAgY29uc3QgZHJ5UnVuID0gaGFzRmxhZygnLS1kcnktcnVuJyk7XG4gICAgY29uc3QgY2xpZW50cyA9IHBhcnNlQ2xpZW50cyhwYXJzZUFyZ1ZhbHVlKCctLWNsaWVudHMnKSB8fCBwYXJzZUFyZ1ZhbHVlKCctLWNsaWVudCcpKTtcbiAgICBjb25zdCBzZXJ2ZXJOYW1lID0gcGFyc2VBcmdWYWx1ZSgnLS1zZXJ2ZXItbmFtZScpIHx8ICcwY3R4JztcbiAgICBjb25zdCBlbnRyeXBvaW50ID0gcGFyc2VBcmdWYWx1ZSgnLS1lbnRyeXBvaW50Jyk7XG5cbiAgICBjb25zdCByZXN1bHRzID0gYm9vdHN0cmFwTWNwUmVnaXN0cmF0aW9uKHtcbiAgICAgICAgY2xpZW50cyxcbiAgICAgICAgZHJ5UnVuLFxuICAgICAgICBzZXJ2ZXJOYW1lLFxuICAgICAgICBlbnRyeXBvaW50XG4gICAgfSk7XG5cbiAgICBwcmludFN1bW1hcnkocmVzdWx0cywgZHJ5UnVuKTtcblxuICAgIGNvbnN0IGZhaWxlZCA9IHJlc3VsdHMuc29tZShyZXN1bHQgPT4gcmVzdWx0LnN0YXR1cyA9PT0gJ2ZhaWxlZCcpO1xuICAgIHJldHVybiBmYWlsZWQgPyAxIDogMDtcbn1cblxuLy8gTk9URTogRG8gTk9UIGFkZCBhIGByZXF1aXJlLm1haW4gPT09IG1vZHVsZWAgYXV0by1ydW4gYmxvY2sgaGVyZS5cbi8vIFdoZW4gZXNidWlsZCBidW5kbGVzIHRoaXMgRVNNIGZpbGUgaW50byB0aGUgQ0xJJ3MgQ0pTIGJ1bmRsZSwgdGhlIGJ1bmRsZWRcbi8vIG1vZHVsZSdzIGBtb2R1bGVgIG9iamVjdCBJUyBgcmVxdWlyZS5tYWluYCwgc28gdGhlIGd1YXJkIGV2YWx1YXRlcyB0byB0cnVlXG4vLyBvbiBldmVyeSBDTEkgaW52b2NhdGlvbiBcdTIwMTQgY2F1c2luZyB0aGUgYm9vdHN0cmFwIHRvIHJ1biBiZWZvcmUgZXZlcnkgY29tbWFuZC5cbi8vIENhbGwgcnVuQm9vdHN0cmFwRnJvbUNsaSgpIGV4cGxpY2l0bHkgZnJvbSB0aGUgQ0xJIGVudHJ5IHBvaW50IGlmIG5lZWRlZC5cbiIsICJpbXBvcnQgbmV0IGZyb20gJ25ldCc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBvcyBmcm9tICdvcyc7XG5pbXBvcnQgeyByYW5kb21VVUlEIH0gZnJvbSAnY3J5cHRvJztcblxuY29uc3QgSVNfV0lOID0gb3MucGxhdGZvcm0oKSA9PT0gJ3dpbjMyJztcbmNvbnN0IFNPQ0tFVF9QQVRIID0gSVNfV0lOID8gJ1xcXFxcXFxcLlxcXFxwaXBlXFxcXDBjdHguc29jaycgOiBwYXRoLmpvaW4ob3MuaG9tZWRpcigpLCAnLjBjdHgnLCAnMGN0eC5zb2NrJyk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VuZFRvRGFlbW9uT3B0aW9ucyB7XG4gICAgcmVxdWVzdElkPzogc3RyaW5nO1xuICAgIHNlc3Npb25Ub2tlbj86IHN0cmluZztcbiAgICBhcGlWZXJzaW9uPzogc3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VuZFRvRGFlbW9uKG1ldGhvZDogc3RyaW5nLCBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge30sIG9wdGlvbnM6IFNlbmRUb0RhZW1vbk9wdGlvbnMgPSB7fSk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3QgcmVxdWVzdElkID0gb3B0aW9ucy5yZXF1ZXN0SWQgfHwgcmFuZG9tVVVJRCgpO1xuXG4gICAgICAgIGNvbnN0IHNvY2tldCA9IG5ldC5jcmVhdGVDb25uZWN0aW9uKFNPQ0tFVF9QQVRIKTtcbiAgICAgICAgc29ja2V0LndyaXRlKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgIG1ldGhvZCxcbiAgICAgICAgICAgIHBhcmFtcyxcbiAgICAgICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgICAgIHNlc3Npb25Ub2tlbjogb3B0aW9ucy5zZXNzaW9uVG9rZW4sXG4gICAgICAgICAgICBhcGlWZXJzaW9uOiBvcHRpb25zLmFwaVZlcnNpb24gPz8gJzInXG4gICAgICAgIH0pICsgJ1xcbicpO1xuXG4gICAgICAgIGxldCByZXNwb25zZURhdGEgPSAnJztcbiAgICAgICAgc29ja2V0Lm9uKCdkYXRhJywgZGF0YSA9PiB7XG4gICAgICAgICAgICByZXNwb25zZURhdGEgKz0gZGF0YS50b1N0cmluZygpO1xyXG4gICAgICAgICAgICBsZXQgbmV3bGluZUluZGV4O1xyXG4gICAgICAgICAgICB3aGlsZSAoKG5ld2xpbmVJbmRleCA9IHJlc3BvbnNlRGF0YS5pbmRleE9mKCdcXG4nKSkgIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gcmVzcG9uc2VEYXRhLnNsaWNlKDAsIG5ld2xpbmVJbmRleCk7XHJcbiAgICAgICAgICAgICAgICByZXNwb25zZURhdGEgPSByZXNwb25zZURhdGEuc2xpY2UobmV3bGluZUluZGV4ICsgMSk7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXMgPSBKU09OLnBhcnNlKG1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgICAgICBzb2NrZXQuZGVzdHJveSgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzLm9rKSByZXNvbHZlKHJlcy5yZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICBlbHNlIHJlamVjdChuZXcgRXJyb3IocmVzLmVycm9yKSk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNvY2tldC5kZXN0cm95KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihcIkZhaWxlZCB0byBwYXJzZSByZXNwb25zZTogXCIgKyBlKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgc29ja2V0Lm9uKCdlcnJvcicsIHJlamVjdCk7XHJcbiAgICB9KTtcclxufVxyXG4iLCAiaW1wb3J0IERhdGFiYXNlIGZyb20gJ2JldHRlci1zcWxpdGUzJztcclxuaW1wb3J0IGZzIGZyb20gJ2ZzJztcclxuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XHJcbmltcG9ydCBvcyBmcm9tICdvcyc7XHJcblxyXG5jb25zdCBEQl9QQVRIID0gcGF0aC5qb2luKG9zLmhvbWVkaXIoKSwgJy4wY3R4JywgJzBjdHguZGInKTtcclxuZXhwb3J0IGNvbnN0IENVUlJFTlRfU0NIRU1BX1ZFUlNJT04gPSA0O1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBPcGVuRGJPcHRpb25zIHtcclxuICAgIGRiUGF0aD86IHN0cmluZztcclxufVxyXG5cclxuZnVuY3Rpb24gcmVzb2x2ZURiUGF0aChvcHRpb25zPzogT3BlbkRiT3B0aW9ucyk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gb3B0aW9ucz8uZGJQYXRoIHx8IHByb2Nlc3MuZW52LkNUWF9EQl9QQVRIIHx8IERCX1BBVEg7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBvcGVuRGIob3B0aW9ucz86IE9wZW5EYk9wdGlvbnMpOiBEYXRhYmFzZS5EYXRhYmFzZSB7XHJcbiAgICBjb25zdCBkYlBhdGggPSByZXNvbHZlRGJQYXRoKG9wdGlvbnMpO1xyXG4gICAgZnMubWtkaXJTeW5jKHBhdGguZGlybmFtZShkYlBhdGgpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcclxuXHJcbiAgICBjb25zdCBkYiA9IG5ldyBEYXRhYmFzZShkYlBhdGgpO1xyXG4gICAgZGIucHJhZ21hKCdqb3VybmFsX21vZGUgPSBXQUwnKTtcclxuICAgIGRiLnByYWdtYSgnZm9yZWlnbl9rZXlzID0gT04nKTtcclxuICAgIG1pZ3JhdGUoZGIpO1xyXG4gICAgcmV0dXJuIGRiO1xyXG59XHJcblxyXG5mdW5jdGlvbiBtaWdyYXRlKGRiOiBEYXRhYmFzZS5EYXRhYmFzZSkge1xyXG4gICAgZGIuZXhlYyhgXHJcbiAgICBDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBzY2hlbWFfbWV0YSAoXHJcbiAgICAgIGtleSAgIFRFWFQgUFJJTUFSWSBLRVksXHJcbiAgICAgIHZhbHVlIFRFWFQgTk9UIE5VTExcclxuICAgICk7XHJcbiAgYCk7XHJcblxyXG4gICAgY29uc3QgdmVyc2lvbiA9IGdldFNjaGVtYVZlcnNpb24oZGIpO1xyXG4gICAgaWYgKHZlcnNpb24gPCAxKSB7XHJcbiAgICAgICAgbWlncmF0ZVRvVjEoZGIpO1xyXG4gICAgICAgIHNldFNjaGVtYVZlcnNpb24oZGIsIDEpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh2ZXJzaW9uIDwgMikge1xyXG4gICAgICAgIG1pZ3JhdGVUb1YyKGRiKTtcclxuICAgICAgICBzZXRTY2hlbWFWZXJzaW9uKGRiLCAyKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodmVyc2lvbiA8IDMpIHtcclxuICAgICAgICBtaWdyYXRlVG9WMyhkYik7XHJcbiAgICAgICAgc2V0U2NoZW1hVmVyc2lvbihkYiwgMyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHZlcnNpb24gPCA0KSB7XHJcbiAgICAgICAgbWlncmF0ZVRvVjQoZGIpO1xyXG4gICAgICAgIHNldFNjaGVtYVZlcnNpb24oZGIsIDQpO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBtaWdyYXRlVG9WMShkYjogRGF0YWJhc2UuRGF0YWJhc2UpIHtcclxuICAgIGRiLmV4ZWMoYFxyXG4gICAgQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgY29udGV4dHMgKFxyXG4gICAgICBpZCAgICAgICAgIFRFWFQgUFJJTUFSWSBLRVksXHJcbiAgICAgIG5hbWUgICAgICAgVEVYVCBOT1QgTlVMTCxcclxuICAgICAgcGF0aHMgICAgICBURVhUIE5PVCBOVUxMIERFRkFVTFQgJ1tdJyxcclxuICAgICAgY3JlYXRlZEF0ICBJTlRFR0VSIE5PVCBOVUxMXHJcbiAgICApO1xyXG5cclxuICAgIENSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIG5vZGVzIChcclxuICAgICAgaWQgICAgICAgICAgVEVYVCBQUklNQVJZIEtFWSxcclxuICAgICAgY29udGV4dElkICAgVEVYVCBOT1QgTlVMTCxcclxuICAgICAgdGhyZWFkICAgICAgVEVYVCxcclxuICAgICAgdHlwZSAgICAgICAgVEVYVCBOT1QgTlVMTCxcclxuICAgICAgY29udGVudCAgICAgVEVYVCBOT1QgTlVMTCxcclxuICAgICAga2V5ICAgICAgICAgVEVYVCxcclxuICAgICAgdGFncyAgICAgICAgVEVYVCBOT1QgTlVMTCBERUZBVUxUICdbXScsXHJcbiAgICAgIHNvdXJjZSAgICAgIFRFWFQsXHJcbiAgICAgIGNyZWF0ZWRBdCAgIElOVEVHRVIgTk9UIE5VTEwsXHJcbiAgICAgIGNoZWNrcG9pbnRJZCBURVhULFxyXG4gICAgICBGT1JFSUdOIEtFWSAoY29udGV4dElkKSBSRUZFUkVOQ0VTIGNvbnRleHRzKGlkKVxyXG4gICAgKTtcclxuXHJcbiAgICBDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBlZGdlcyAoXHJcbiAgICAgIGlkICAgICAgICBURVhUIFBSSU1BUlkgS0VZLFxyXG4gICAgICBmcm9tSWQgICAgVEVYVCBOT1QgTlVMTCxcclxuICAgICAgdG9JZCAgICAgIFRFWFQgTk9UIE5VTEwsXHJcbiAgICAgIHJlbGF0aW9uICBURVhUIE5PVCBOVUxMLFxyXG4gICAgICBjcmVhdGVkQXQgSU5URUdFUiBOT1QgTlVMTCxcclxuICAgICAgRk9SRUlHTiBLRVkgKGZyb21JZCkgUkVGRVJFTkNFUyBub2RlcyhpZCksXHJcbiAgICAgIEZPUkVJR04gS0VZICh0b0lkKSAgIFJFRkVSRU5DRVMgbm9kZXMoaWQpXHJcbiAgICApO1xyXG5cclxuICAgIENSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIGNoZWNrcG9pbnRzIChcclxuICAgICAgaWQgICAgICAgIFRFWFQgUFJJTUFSWSBLRVksXHJcbiAgICAgIGNvbnRleHRJZCBURVhUIE5PVCBOVUxMLFxyXG4gICAgICBuYW1lICAgICAgVEVYVCBOT1QgTlVMTCxcclxuICAgICAgbm9kZUlkcyAgIFRFWFQgTk9UIE5VTEwgREVGQVVMVCAnW10nLFxyXG4gICAgICBjcmVhdGVkQXQgSU5URUdFUiBOT1QgTlVMTCxcclxuICAgICAgRk9SRUlHTiBLRVkgKGNvbnRleHRJZCkgUkVGRVJFTkNFUyBjb250ZXh0cyhpZClcclxuICAgICk7XHJcblxyXG4gICAgQ1JFQVRFIFZJUlRVQUwgVEFCTEUgSUYgTk9UIEVYSVNUUyBub2Rlc19mdHNcclxuICAgICAgVVNJTkcgZnRzNShpZCBVTklOREVYRUQsIGNvbnRlbnQsIHRhZ3MsIHRva2VuaXplPSdwb3J0ZXIgYXNjaWknKTtcclxuICBgKTtcclxufVxyXG5cclxuZnVuY3Rpb24gbWlncmF0ZVRvVjIoZGI6IERhdGFiYXNlLkRhdGFiYXNlKSB7XHJcbiAgICBkYi5leGVjKGBcclxuICAgIENSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIGF1ZGl0X2xvZ3MgKFxyXG4gICAgICBpZCAgICAgICAgICAgIFRFWFQgUFJJTUFSWSBLRVksXHJcbiAgICAgIGFjdGlvbiAgICAgICAgVEVYVCBOT1QgTlVMTCxcclxuICAgICAgY29udGV4dElkICAgICBURVhULFxyXG4gICAgICBwYXlsb2FkICAgICAgIFRFWFQgTk9UIE5VTEwgREVGQVVMVCAne30nLFxyXG4gICAgICByZXN1bHQgICAgICAgIFRFWFQsXHJcbiAgICAgIGFjdG9yICAgICAgICAgVEVYVCxcclxuICAgICAgc291cmNlICAgICAgICBURVhULFxyXG4gICAgICBzZXNzaW9uVG9rZW4gIFRFWFQsXHJcbiAgICAgIGNvbm5lY3Rpb25JZCAgVEVYVCxcclxuICAgICAgcmVxdWVzdElkICAgICBURVhULFxyXG4gICAgICBjcmVhdGVkQXQgICAgIElOVEVHRVIgTk9UIE5VTExcclxuICAgICk7XHJcblxyXG4gICAgQ1JFQVRFIElOREVYIElGIE5PVCBFWElTVFMgaWR4X2F1ZGl0X2xvZ3NfY29udGV4dF9jcmVhdGVkXHJcbiAgICAgIE9OIGF1ZGl0X2xvZ3MoY29udGV4dElkLCBjcmVhdGVkQXQgREVTQyk7XHJcblxyXG4gICAgQ1JFQVRFIElOREVYIElGIE5PVCBFWElTVFMgaWR4X2F1ZGl0X2xvZ3NfY3JlYXRlZFxyXG4gICAgICBPTiBhdWRpdF9sb2dzKGNyZWF0ZWRBdCBERVNDKTtcclxuICBgKTtcclxufVxyXG5cclxuZnVuY3Rpb24gaGFzQ29sdW1uKGRiOiBEYXRhYmFzZS5EYXRhYmFzZSwgdGFibGVOYW1lOiBzdHJpbmcsIGNvbHVtbk5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3Qgcm93cyA9IGRiLnByZXBhcmUoYFBSQUdNQSB0YWJsZV9pbmZvKCR7dGFibGVOYW1lfSlgKS5hbGwoKSBhcyBBcnJheTx7IG5hbWU6IHN0cmluZyB9PjtcclxuICAgIHJldHVybiByb3dzLnNvbWUoKHJvdykgPT4gcm93Lm5hbWUgPT09IGNvbHVtbk5hbWUpO1xyXG59XHJcblxyXG4vLyBTRUMtMDAxOiBBdWRpdCBsb2cgSE1BQyBjaGFpbiBjb2x1bW5zXHJcbmZ1bmN0aW9uIG1pZ3JhdGVUb1Y0KGRiOiBEYXRhYmFzZS5EYXRhYmFzZSkge1xyXG4gICAgaWYgKCFoYXNDb2x1bW4oZGIsICdhdWRpdF9sb2dzJywgJ2VudHJ5SGFzaCcpKSB7XHJcbiAgICAgICAgZGIuZXhlYyhgQUxURVIgVEFCTEUgYXVkaXRfbG9ncyBBREQgQ09MVU1OIGVudHJ5SGFzaCBURVhUYCk7XHJcbiAgICB9XHJcbiAgICBpZiAoIWhhc0NvbHVtbihkYiwgJ2F1ZGl0X2xvZ3MnLCAncHJldkhhc2gnKSkge1xyXG4gICAgICAgIGRiLmV4ZWMoYEFMVEVSIFRBQkxFIGF1ZGl0X2xvZ3MgQUREIENPTFVNTiBwcmV2SGFzaCBURVhUYCk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIG1pZ3JhdGVUb1YzKGRiOiBEYXRhYmFzZS5EYXRhYmFzZSkge1xyXG4gICAgaWYgKCFoYXNDb2x1bW4oZGIsICdjb250ZXh0cycsICdzeW5jUG9saWN5JykpIHtcclxuICAgICAgICBkYi5leGVjKGBcclxuICAgICAgICBBTFRFUiBUQUJMRSBjb250ZXh0c1xyXG4gICAgICAgIEFERCBDT0xVTU4gc3luY1BvbGljeSBURVhUIE5PVCBOVUxMIERFRkFVTFQgJ21ldGFkYXRhX29ubHknXHJcbiAgICAgIGApO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2NoZW1hVmVyc2lvbihkYjogRGF0YWJhc2UuRGF0YWJhc2UpOiBudW1iZXIge1xyXG4gICAgY29uc3Qgcm93ID0gZGIucHJlcGFyZSgnU0VMRUNUIHZhbHVlIEZST00gc2NoZW1hX21ldGEgV0hFUkUga2V5ID0gPycpLmdldCgnc2NoZW1hX3ZlcnNpb24nKSBhcyB7IHZhbHVlOiBzdHJpbmcgfSB8IHVuZGVmaW5lZDtcclxuICAgIGlmICghcm93KSByZXR1cm4gMDtcclxuXHJcbiAgICBjb25zdCB2YWx1ZSA9IE51bWJlcihyb3cudmFsdWUpO1xyXG4gICAgcmV0dXJuIE51bWJlci5pc05hTih2YWx1ZSkgPyAwIDogdmFsdWU7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHNldFNjaGVtYVZlcnNpb24oZGI6IERhdGFiYXNlLkRhdGFiYXNlLCB2ZXJzaW9uOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGRiLnByZXBhcmUoYFxyXG4gICAgSU5TRVJUIElOVE8gc2NoZW1hX21ldGEgKGtleSwgdmFsdWUpXHJcbiAgICBWQUxVRVMgKD8sID8pXHJcbiAgICBPTiBDT05GTElDVChrZXkpIERPIFVQREFURSBTRVQgdmFsdWUgPSBleGNsdWRlZC52YWx1ZVxyXG4gIGApLnJ1bignc2NoZW1hX3ZlcnNpb24nLCBTdHJpbmcodmVyc2lvbikpO1xyXG59XHJcbiIsICJpbXBvcnQgeyBjcmVhdGVDaXBoZXJpdiwgY3JlYXRlRGVjaXBoZXJpdiwgY3JlYXRlSGFzaCwgcmFuZG9tQnl0ZXMgfSBmcm9tICdjcnlwdG8nO1xuaW1wb3J0IGZzIGZyb20gJ2ZzJztcbmltcG9ydCBvcyBmcm9tICdvcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcblxuY29uc3QgTUFTVEVSX0tFWV9QQVRIID0gcGF0aC5qb2luKG9zLmhvbWVkaXIoKSwgJy4wY3R4JywgJ21hc3Rlci5rZXknKTtcbmNvbnN0IEtFWV9CWVRFUyA9IDMyO1xuY29uc3QgSVZfQllURVMgPSAxMjtcblxuZXhwb3J0IGludGVyZmFjZSBFbmNyeXB0ZWRQYXlsb2FkIHtcbiAgICB2ZXJzaW9uOiAxO1xuICAgIGtleUlkOiBzdHJpbmc7XG4gICAgaXY6IHN0cmluZztcbiAgICB0YWc6IHN0cmluZztcbiAgICBjaXBoZXJ0ZXh0OiBzdHJpbmc7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZU1hc3RlcktleShyYXc6IHN0cmluZyk6IEJ1ZmZlciB7XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgYmFzZTY0ID0gQnVmZmVyLmZyb20ocmF3LCAnYmFzZTY0Jyk7XG4gICAgICAgIGlmIChiYXNlNjQubGVuZ3RoID09PSBLRVlfQllURVMpIHJldHVybiBiYXNlNjQ7XG4gICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIG5vLW9wXG4gICAgfVxuXG4gICAgY29uc3QgdXRmID0gQnVmZmVyLmZyb20ocmF3LCAndXRmOCcpO1xuICAgIGlmICh1dGYubGVuZ3RoID09PSBLRVlfQllURVMpIHJldHVybiB1dGY7XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01hc3RlciBrZXkgbXVzdCBiZSAzMiBieXRlcyAoYmFzZTY0LWVuY29kZWQgb3IgcmF3IFVURi04KS4nKTtcbn1cblxuZnVuY3Rpb24gbG9hZE9yQ3JlYXRlTWFzdGVyS2V5KCk6IEJ1ZmZlciB7XG4gICAgaWYgKHByb2Nlc3MuZW52LkNUWF9NQVNURVJfS0VZKSB7XG4gICAgICAgIHJldHVybiBub3JtYWxpemVNYXN0ZXJLZXkocHJvY2Vzcy5lbnYuQ1RYX01BU1RFUl9LRVkpO1xuICAgIH1cblxuICAgIGZzLm1rZGlyU3luYyhwYXRoLmRpcm5hbWUoTUFTVEVSX0tFWV9QQVRIKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMoTUFTVEVSX0tFWV9QQVRIKSkge1xuICAgICAgICBjb25zdCBnZW5lcmF0ZWQgPSByYW5kb21CeXRlcyhLRVlfQllURVMpLnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgICAgICAgZnMud3JpdGVGaWxlU3luYyhNQVNURVJfS0VZX1BBVEgsIGdlbmVyYXRlZCwgeyBtb2RlOiAwbzYwMCB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBmaWxlS2V5ID0gZnMucmVhZEZpbGVTeW5jKE1BU1RFUl9LRVlfUEFUSCwgJ3V0ZjgnKS50cmltKCk7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZU1hc3RlcktleShmaWxlS2V5KTtcbn1cblxuZnVuY3Rpb24gZ2V0S2V5SWQoa2V5OiBCdWZmZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiBjcmVhdGVIYXNoKCdzaGEyNTYnKS51cGRhdGUoa2V5KS5kaWdlc3QoJ2hleCcpLnNsaWNlKDAsIDE2KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuY3J5cHRKc29uKHZhbHVlOiB1bmtub3duKTogRW5jcnlwdGVkUGF5bG9hZCB7XG4gICAgY29uc3Qga2V5ID0gbG9hZE9yQ3JlYXRlTWFzdGVyS2V5KCk7XG4gICAgY29uc3QgaXYgPSByYW5kb21CeXRlcyhJVl9CWVRFUyk7XG4gICAgY29uc3QgY2lwaGVyID0gY3JlYXRlQ2lwaGVyaXYoJ2Flcy0yNTYtZ2NtJywga2V5LCBpdik7XG4gICAgY29uc3QgcGxhaW50ZXh0ID0gQnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkodmFsdWUpLCAndXRmOCcpO1xuXG4gICAgY29uc3QgY2lwaGVydGV4dCA9IEJ1ZmZlci5jb25jYXQoW2NpcGhlci51cGRhdGUocGxhaW50ZXh0KSwgY2lwaGVyLmZpbmFsKCldKTtcbiAgICBjb25zdCB0YWcgPSBjaXBoZXIuZ2V0QXV0aFRhZygpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgdmVyc2lvbjogMSxcbiAgICAgICAga2V5SWQ6IGdldEtleUlkKGtleSksXG4gICAgICAgIGl2OiBpdi50b1N0cmluZygnYmFzZTY0JyksXG4gICAgICAgIHRhZzogdGFnLnRvU3RyaW5nKCdiYXNlNjQnKSxcbiAgICAgICAgY2lwaGVydGV4dDogY2lwaGVydGV4dC50b1N0cmluZygnYmFzZTY0JylcbiAgICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVjcnlwdEpzb248VD4ocGF5bG9hZDogRW5jcnlwdGVkUGF5bG9hZCk6IFQge1xuICAgIGlmIChwYXlsb2FkLnZlcnNpb24gIT09IDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBlbmNyeXB0aW9uIHBheWxvYWQgdmVyc2lvbiAke3BheWxvYWQudmVyc2lvbn1gKTtcbiAgICB9XG5cbiAgICBjb25zdCBrZXkgPSBsb2FkT3JDcmVhdGVNYXN0ZXJLZXkoKTtcbiAgICBjb25zdCBkZWNpcGhlciA9IGNyZWF0ZURlY2lwaGVyaXYoXG4gICAgICAgICdhZXMtMjU2LWdjbScsXG4gICAgICAgIGtleSxcbiAgICAgICAgQnVmZmVyLmZyb20ocGF5bG9hZC5pdiwgJ2Jhc2U2NCcpXG4gICAgKTtcbiAgICBkZWNpcGhlci5zZXRBdXRoVGFnKEJ1ZmZlci5mcm9tKHBheWxvYWQudGFnLCAnYmFzZTY0JykpO1xuXG4gICAgY29uc3QgcGxhaW50ZXh0ID0gQnVmZmVyLmNvbmNhdChbXG4gICAgICAgIGRlY2lwaGVyLnVwZGF0ZShCdWZmZXIuZnJvbShwYXlsb2FkLmNpcGhlcnRleHQsICdiYXNlNjQnKSksXG4gICAgICAgIGRlY2lwaGVyLmZpbmFsKClcbiAgICBdKTtcblxuICAgIHJldHVybiBKU09OLnBhcnNlKHBsYWludGV4dC50b1N0cmluZygndXRmOCcpKSBhcyBUO1xufVxuIiwgIi8qKlxyXG4gKiBTWU5DLTAyOiBHbG9iYWwgY29uZmlndXJhdGlvbiBzeXN0ZW0uXHJcbiAqXHJcbiAqIENvbmZpZyBmaWxlOiB+Ly4wY3R4L2NvbmZpZy5qc29uXHJcbiAqIFJlc29sdXRpb24gb3JkZXI6IGVudiB2YXIgXHUyMTkyIGNvbmZpZy5qc29uIFx1MjE5MiBidWlsdC1pbiBkZWZhdWx0XHJcbiAqXHJcbiAqIFVzZWQgYnkgQ0xJLCBkYWVtb24sIGFuZCBNQ1AgcGFja2FnZXMgZm9yIGNvbnNpc3RlbnQgY29uZmlnIGFjY2Vzcy5cclxuICovXHJcblxyXG5pbXBvcnQgZnMgZnJvbSAnZnMnO1xyXG5pbXBvcnQgb3MgZnJvbSAnb3MnO1xyXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcclxuXHJcbmNvbnN0IENPTkZJR19QQVRIID0gcGF0aC5qb2luKG9zLmhvbWVkaXIoKSwgJy4wY3R4JywgJ2NvbmZpZy5qc29uJyk7XHJcblxyXG4vLyBcdTI1MDBcdTI1MDBcdTI1MDAgU2NoZW1hIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBBcHBDb25maWcge1xyXG4gICAgJ2F1dGguc2VydmVyJzogc3RyaW5nO1xyXG4gICAgJ3N5bmMuZW5hYmxlZCc6IGJvb2xlYW47XHJcbiAgICAnc3luYy5lbmRwb2ludCc6IHN0cmluZztcclxuICAgICd1aS51cmwnOiBzdHJpbmc7XHJcbiAgICAnaW50ZWdyYXRpb24uY2hhdGdwdC5lbmFibGVkJzogYm9vbGVhbjtcclxuICAgICdpbnRlZ3JhdGlvbi5jaGF0Z3B0LnJlcXVpcmVBcHByb3ZhbCc6IGJvb2xlYW47XHJcbiAgICAnaW50ZWdyYXRpb24uYXV0b0Jvb3RzdHJhcCc6IGJvb2xlYW47XHJcbn1cclxuXHJcbmNvbnN0IERFRkFVTFRTOiBBcHBDb25maWcgPSB7XHJcbiAgICAnYXV0aC5zZXJ2ZXInOiAnaHR0cHM6Ly93d3cuMGN0eC5jb20nLFxyXG4gICAgJ3N5bmMuZW5hYmxlZCc6IHRydWUsXHJcbiAgICAnc3luYy5lbmRwb2ludCc6ICdodHRwczovL3d3dy4wY3R4LmNvbS9hcGkvdjEvc3luYycsXHJcbiAgICAndWkudXJsJzogJ2h0dHBzOi8vd3d3LjBjdHguY29tJyxcclxuICAgICdpbnRlZ3JhdGlvbi5jaGF0Z3B0LmVuYWJsZWQnOiBmYWxzZSxcclxuICAgICdpbnRlZ3JhdGlvbi5jaGF0Z3B0LnJlcXVpcmVBcHByb3ZhbCc6IHRydWUsXHJcbiAgICAnaW50ZWdyYXRpb24uYXV0b0Jvb3RzdHJhcCc6IHRydWVcclxufTtcclxuXHJcbi8qKiBNYXAgb2YgY29uZmlnIGtleXMgdG8gZW52IHZhciBvdmVycmlkZXMgKi9cclxuY29uc3QgRU5WX09WRVJSSURFUzogUGFydGlhbDxSZWNvcmQ8a2V5b2YgQXBwQ29uZmlnLCBzdHJpbmc+PiA9IHtcclxuICAgICdhdXRoLnNlcnZlcic6ICdDVFhfQVVUSF9TRVJWRVInLFxyXG4gICAgJ3N5bmMuZW5hYmxlZCc6ICdDVFhfU1lOQ19FTkFCTEVEJyxcclxuICAgICdzeW5jLmVuZHBvaW50JzogJ0NUWF9TWU5DX0VORFBPSU5UJyxcclxuICAgICdpbnRlZ3JhdGlvbi5jaGF0Z3B0LmVuYWJsZWQnOiAnQ1RYX0lOVEVHUkFUSU9OX0NIQVRHUFRfRU5BQkxFRCcsXHJcbiAgICAnaW50ZWdyYXRpb24uY2hhdGdwdC5yZXF1aXJlQXBwcm92YWwnOiAnQ1RYX0lOVEVHUkFUSU9OX0NIQVRHUFRfUkVRVUlSRV9BUFBST1ZBTCcsXHJcbiAgICAnaW50ZWdyYXRpb24uYXV0b0Jvb3RzdHJhcCc6ICdDVFhfSU5URUdSQVRJT05fQVVUT19CT09UU1RSQVAnXHJcbn07XHJcblxyXG5jb25zdCBCT09MRUFOX0tFWVMgPSBuZXcgU2V0PGtleW9mIEFwcENvbmZpZz4oW1xyXG4gICAgJ3N5bmMuZW5hYmxlZCcsXHJcbiAgICAnaW50ZWdyYXRpb24uY2hhdGdwdC5lbmFibGVkJyxcclxuICAgICdpbnRlZ3JhdGlvbi5jaGF0Z3B0LnJlcXVpcmVBcHByb3ZhbCcsXHJcbiAgICAnaW50ZWdyYXRpb24uYXV0b0Jvb3RzdHJhcCdcclxuXSk7XHJcblxyXG5mdW5jdGlvbiBwYXJzZUJvb2xlYW5WYWx1ZSh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdmFsdWUgPT09ICcxJyB8fCB2YWx1ZS50b0xvd2VyQ2FzZSgpID09PSAndHJ1ZSc7XHJcbn1cclxuXHJcbi8vIFx1MjUwMFx1MjUwMFx1MjUwMCBMb2FkIC8gU2F2ZSBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcclxuXHJcbi8qKlxyXG4gKiBMb2FkIHJhdyBjb25maWcgZnJvbSBkaXNrLiBSZXR1cm5zIGVtcHR5IG9iamVjdCBpZiBmaWxlIG1pc3NpbmcvY29ycnVwdC5cclxuICovXHJcbmZ1bmN0aW9uIGxvYWRSYXdDb25maWcoKTogUGFydGlhbDxBcHBDb25maWc+IHtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKENPTkZJR19QQVRIKSkgcmV0dXJuIHt9O1xyXG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhDT05GSUdfUEFUSCwgJ3V0ZjgnKSkgYXMgUGFydGlhbDxBcHBDb25maWc+O1xyXG4gICAgfSBjYXRjaCB7XHJcbiAgICAgICAgcmV0dXJuIHt9O1xyXG4gICAgfVxyXG59XHJcblxyXG4vKipcclxuICogTG9hZCBmdWxsIGNvbmZpZyB3aXRoIGRlZmF1bHRzIGFwcGxpZWQuXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gbG9hZENvbmZpZygpOiBBcHBDb25maWcge1xyXG4gICAgY29uc3QgcmF3ID0gbG9hZFJhd0NvbmZpZygpO1xyXG4gICAgcmV0dXJuIHsgLi4uREVGQVVMVFMsIC4uLnJhdyB9O1xyXG59XHJcblxyXG4vKipcclxuICogU2F2ZSBwYXJ0aWFsIGNvbmZpZyAobWVyZ2VzIHdpdGggZXhpc3RpbmcpLlxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHNhdmVDb25maWcocGFydGlhbDogUGFydGlhbDxBcHBDb25maWc+KTogdm9pZCB7XHJcbiAgICBjb25zdCBleGlzdGluZyA9IGxvYWRSYXdDb25maWcoKTtcclxuICAgIGNvbnN0IG1lcmdlZCA9IHsgLi4uZXhpc3RpbmcsIC4uLnBhcnRpYWwgfTtcclxuXHJcbiAgICBmcy5ta2RpclN5bmMocGF0aC5kaXJuYW1lKENPTkZJR19QQVRIKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XHJcbiAgICBmcy53cml0ZUZpbGVTeW5jKENPTkZJR19QQVRILCBKU09OLnN0cmluZ2lmeShtZXJnZWQsIG51bGwsIDIpLCAndXRmOCcpO1xyXG59XHJcblxyXG4vLyBcdTI1MDBcdTI1MDBcdTI1MDAgR2V0IC8gU2V0IFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxyXG5cclxuY29uc3QgVkFMSURfS0VZUyA9IG5ldyBTZXQ8c3RyaW5nPihPYmplY3Qua2V5cyhERUZBVUxUUykpO1xyXG5cclxuLyoqXHJcbiAqIEdldCBhIHJlc29sdmVkIGNvbmZpZyB2YWx1ZS4gUHJpb3JpdHk6IGVudiB2YXIgXHUyMTkyIGNvbmZpZy5qc29uIFx1MjE5MiBkZWZhdWx0LlxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbmZpZ1ZhbHVlPEsgZXh0ZW5kcyBrZXlvZiBBcHBDb25maWc+KGtleTogSyk6IEFwcENvbmZpZ1tLXSB7XHJcbiAgICAvLyAxLiBDaGVjayBlbnYgdmFyIG92ZXJyaWRlXHJcbiAgICBjb25zdCBlbnZLZXkgPSBFTlZfT1ZFUlJJREVTW2tleV07XHJcbiAgICBpZiAoZW52S2V5KSB7XHJcbiAgICAgICAgY29uc3QgZW52VmFsID0gcHJvY2Vzcy5lbnZbZW52S2V5XTtcclxuICAgICAgICBpZiAoZW52VmFsICE9PSB1bmRlZmluZWQgJiYgZW52VmFsICE9PSAnJykge1xyXG4gICAgICAgICAgICBpZiAoQk9PTEVBTl9LRVlTLmhhcyhrZXkpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VCb29sZWFuVmFsdWUoZW52VmFsKSBhcyBBcHBDb25maWdbS107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGVudlZhbCBhcyBBcHBDb25maWdbS107XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIDIuIENoZWNrIGNvbmZpZyBmaWxlXHJcbiAgICBjb25zdCByYXcgPSBsb2FkUmF3Q29uZmlnKCk7XHJcbiAgICBpZiAoa2V5IGluIHJhdykge1xyXG4gICAgICAgIHJldHVybiByYXdba2V5XSBhcyBBcHBDb25maWdbS107XHJcbiAgICB9XHJcblxyXG4gICAgLy8gMy4gRGVmYXVsdFxyXG4gICAgcmV0dXJuIERFRkFVTFRTW2tleV07XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBTZXQgYSBjb25maWcgdmFsdWUgYW5kIHBlcnNpc3QgdG8gZGlzay5cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBzZXRDb25maWdWYWx1ZTxLIGV4dGVuZHMga2V5b2YgQXBwQ29uZmlnPihrZXk6IEssIHZhbHVlOiBBcHBDb25maWdbS10pOiB2b2lkIHtcclxuICAgIGlmICghVkFMSURfS0VZUy5oYXMoa2V5KSkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBjb25maWcga2V5OiAke2tleX0uIFZhbGlkIGtleXM6ICR7Wy4uLlZBTElEX0tFWVNdLmpvaW4oJywgJyl9YCk7XHJcbiAgICB9XHJcbiAgICBzYXZlQ29uZmlnKHsgW2tleV06IHZhbHVlIH0gYXMgUGFydGlhbDxBcHBDb25maWc+KTtcclxufVxyXG5cclxuLyoqXHJcbiAqIExpc3QgYWxsIGNvbmZpZyB2YWx1ZXMgKHJlc29sdmVkLCB3aXRoIHNvdXJjZSBpbmRpY2F0aW9uKS5cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBsaXN0Q29uZmlnKCk6IEFycmF5PHtcclxuICAgIGtleToga2V5b2YgQXBwQ29uZmlnO1xyXG4gICAgdmFsdWU6IHVua25vd247XHJcbiAgICBzb3VyY2U6ICdlbnYnIHwgJ2NvbmZpZycgfCAnZGVmYXVsdCc7XHJcbn0+IHtcclxuICAgIGNvbnN0IHJhdyA9IGxvYWRSYXdDb25maWcoKTtcclxuXHJcbiAgICByZXR1cm4gKE9iamVjdC5rZXlzKERFRkFVTFRTKSBhcyBBcnJheTxrZXlvZiBBcHBDb25maWc+KS5tYXAoa2V5ID0+IHtcclxuICAgICAgICBjb25zdCBlbnZLZXkgPSBFTlZfT1ZFUlJJREVTW2tleV07XHJcbiAgICAgICAgY29uc3QgZW52VmFsID0gZW52S2V5ID8gcHJvY2Vzcy5lbnZbZW52S2V5XSA6IHVuZGVmaW5lZDtcclxuXHJcbiAgICAgICAgaWYgKGVudlZhbCAhPT0gdW5kZWZpbmVkICYmIGVudlZhbCAhPT0gJycpIHtcclxuICAgICAgICAgICAgbGV0IHZhbHVlOiB1bmtub3duID0gZW52VmFsO1xyXG4gICAgICAgICAgICBpZiAoQk9PTEVBTl9LRVlTLmhhcyhrZXkpKSB7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHBhcnNlQm9vbGVhblZhbHVlKGVudlZhbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHsga2V5LCB2YWx1ZSwgc291cmNlOiAnZW52JyBhcyBjb25zdCB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGtleSBpbiByYXcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHsga2V5LCB2YWx1ZTogcmF3W2tleV0sIHNvdXJjZTogJ2NvbmZpZycgYXMgY29uc3QgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB7IGtleSwgdmFsdWU6IERFRkFVTFRTW2tleV0sIHNvdXJjZTogJ2RlZmF1bHQnIGFzIGNvbnN0IH07XHJcbiAgICB9KTtcclxufVxyXG5cclxuLyoqXHJcbiAqIENoZWNrIGlmIGEgc3RyaW5nIGlzIGEgdmFsaWQgY29uZmlnIGtleS5cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkQ29uZmlnS2V5KGtleTogc3RyaW5nKToga2V5IGlzIGtleW9mIEFwcENvbmZpZyB7XHJcbiAgICByZXR1cm4gVkFMSURfS0VZUy5oYXMoa2V5KTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEdldCB0aGUgY29uZmlnIGZpbGUgcGF0aCAoZm9yIGRpc3BsYXkvZGVidWcpLlxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbmZpZ1BhdGgoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBDT05GSUdfUEFUSDtcclxufVxyXG4iLCAiaW1wb3J0IGZzIGZyb20gJ2ZzJztcclxuaW1wb3J0IG9zIGZyb20gJ29zJztcclxuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XHJcbmltcG9ydCB7IGV4ZWNGaWxlU3luYywgZXhlY1N5bmMgfSBmcm9tICdjaGlsZF9wcm9jZXNzJztcclxuXHJcbmNvbnN0IFNFUlZJQ0VfSUQgPSAnMGN0eC1kYWVtb24nO1xyXG5jb25zdCBTRVJWSUNFX0RJUiA9IHBhdGguam9pbihvcy5ob21lZGlyKCksICcuMGN0eCcsICdzZXJ2aWNlJyk7XHJcbmNvbnN0IFhNTF9URU1QTEFURV9QQVRIID0gcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgJy4uLy4uLy4uL3NjcmlwdHMvc2VydmljZS93aW5kb3dzLzBjdHgtZGFlbW9uLnhtbCcpO1xyXG5jb25zdCBJTlNUQUxMRURfWE1MX1BBVEggPSBwYXRoLmpvaW4oU0VSVklDRV9ESVIsIGAke1NFUlZJQ0VfSUR9LnhtbGApO1xyXG5jb25zdCBJTlNUQUxMRURfRVhFX1BBVEggPSBwYXRoLmpvaW4oU0VSVklDRV9ESVIsIGAke1NFUlZJQ0VfSUR9LmV4ZWApO1xyXG5cclxuLy8gXHUyNTAwXHUyNTAwXHUyNTAwIEhlbHBlcnMgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHJcblxyXG5mdW5jdGlvbiBlbnN1cmVTZXJ2aWNlRGlyKCk6IHZvaWQge1xyXG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKFNFUlZJQ0VfRElSKSkge1xyXG4gICAgICAgIGZzLm1rZGlyU3luYyhTRVJWSUNFX0RJUiwgeyByZWN1cnNpdmU6IHRydWUgfSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlc29sdmVOb2RlUGF0aCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHByb2Nlc3MuZXhlY1BhdGg7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlc29sdmVDbGlFbnRyeSgpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgY2FuZGlkYXRlcyA9IFtcclxuICAgICAgICAvLyBwdWJsaXNoZWQgaW5zdGFsbCBwYXRoOiBjbGkgcGFja2FnZSBvd25zIGNvbm5lY3RvciBydW50aW1lIGVudHJ5XHJcbiAgICAgICAgKCgpID0+IHtcclxuICAgICAgICAgICAgdHJ5IHsgcmV0dXJuIHJlcXVpcmUucmVzb2x2ZSgnQDBjdHgvY2xpL2Rpc3QvaW5kZXguanMnKTsgfSBjYXRjaCB7IHJldHVybiAnJzsgfVxyXG4gICAgICAgIH0pKCksXHJcbiAgICAgICAgLy8gbG9jYWwgZGlzdCBzaWJsaW5nIGluIHRoaXMgcGFja2FnZVxyXG4gICAgICAgIHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsICdpbmRleC5qcycpLFxyXG4gICAgICAgIC8vIG1vbm9yZXBvIGZhbGxiYWNrXHJcbiAgICAgICAgcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgJy4uJywgJy4uJywgJ2NsaScsICdkaXN0JywgJ2luZGV4LmpzJyksXHJcbiAgICAgICAgcGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCksICdwYWNrYWdlcycsICdjbGknLCAnZGlzdCcsICdpbmRleC5qcycpLFxyXG4gICAgXS5maWx0ZXIoQm9vbGVhbik7XHJcblxyXG4gICAgZm9yIChjb25zdCBjIG9mIGNhbmRpZGF0ZXMpIHtcclxuICAgICAgICBpZiAoZnMuZXhpc3RzU3luYyhjKSkgcmV0dXJuIGM7XHJcbiAgICB9XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgJ0Nhbm5vdCByZXNvbHZlIENMSSBlbnRyeSBwb2ludC4gUnVuIGBucG0gcnVuIGJ1aWxkYCBvciBpbnN0YWxsIEAwY3R4L2NsaS4nXHJcbiAgICApO1xyXG59XHJcblxyXG5mdW5jdGlvbiByZXNvbHZlV2luU1coKTogc3RyaW5nIHtcclxuICAgIC8vIHdpbnN3IG5wbSBwYWNrYWdlIHBsYWNlcyB0aGUgZXhlIGF0IG5vZGVfbW9kdWxlcy8uYmluL3dpbnN3LmV4ZSBvciB3aW5zd1xyXG4gICAgY29uc3QgY2FuZGlkYXRlcyA9IFtcclxuICAgICAgICBwYXRoLnJlc29sdmUoX19kaXJuYW1lLCAnLi4nLCAnLi4nLCAnLi4nLCAnbm9kZV9tb2R1bGVzJywgJy5iaW4nLCAnd2luc3cuZXhlJyksXHJcbiAgICAgICAgcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgJy4uJywgJy4uJywgJy4uJywgJ25vZGVfbW9kdWxlcycsICcuYmluJywgJ3dpbnN3JyksXHJcbiAgICAgICAgLy8gZ2xvYmFsIG5wbSBiaW5cclxuICAgICAgICAnd2luc3cnLFxyXG4gICAgXTtcclxuICAgIGZvciAoY29uc3QgYyBvZiBjYW5kaWRhdGVzKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKGMgIT09ICd3aW5zdycgJiYgZnMuZXhpc3RzU3luYyhjKSkgcmV0dXJuIGM7XHJcbiAgICAgICAgfSBjYXRjaCB7IC8qIHNraXAgKi8gfVxyXG4gICAgfVxyXG4gICAgLy8gdHJ5IFBBVEhcclxuICAgIHRyeSB7XHJcbiAgICAgICAgZXhlY0ZpbGVTeW5jKCd3aW5zdycsIFsndmVyc2lvbiddLCB7IHN0ZGlvOiAncGlwZScgfSk7XHJcbiAgICAgICAgcmV0dXJuICd3aW5zdyc7XHJcbiAgICB9IGNhdGNoIHsgLyogbm90IGluIFBBVEggKi8gfVxyXG5cclxuICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAnd2luc3cgbm90IGZvdW5kLiBSdW46IG5wbSBpbnN0YWxsIC1nIHdpbnN3ICBvciAgbnBtIGluc3RhbGwgLS1zYXZlLW9wdGlvbmFsIHdpbnN3J1xyXG4gICAgKTtcclxufVxyXG5cclxuZnVuY3Rpb24gcnVuV2luU1cod2luc3dQYXRoOiBzdHJpbmcsIGFyZ3M6IHN0cmluZ1tdKTogdm9pZCB7XHJcbiAgICBleGVjRmlsZVN5bmMod2luc3dQYXRoLCBbSU5TVEFMTEVEX0VYRV9QQVRILCAuLi5hcmdzXSwgeyBzdGRpbzogJ2luaGVyaXQnIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBzY1F1ZXJ5KCk6IHN0cmluZyB7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIHJldHVybiBleGVjU3luYyhgc2MgcXVlcnkgXCIke1NFUlZJQ0VfSUR9XCJgLCB7IGVuY29kaW5nOiAndXRmOCcgfSk7XHJcbiAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XHJcbiAgICAgICAgY29uc3QgZXJyID0gZSBhcyB7IHN0ZG91dD86IHN0cmluZyB9O1xyXG4gICAgICAgIHJldHVybiBlcnI/LnN0ZG91dCA/PyBTdHJpbmcoZSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHBhcnNlU2NTdGF0ZShvdXRwdXQ6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBtYXRjaCA9IG91dHB1dC5tYXRjaCgvU1RBVEVcXHMqOlxccypcXGQrXFxzKyhcXHcrKS8pO1xyXG4gICAgcmV0dXJuIG1hdGNoID8gbWF0Y2hbMV0gOiAnVU5LTk9XTic7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlcXVpcmVBZG1pbigpOiB2b2lkIHtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgZXhlY1N5bmMoJ25ldCBzZXNzaW9uJywgeyBzdGRpbzogJ3BpcGUnIH0pO1xyXG4gICAgfSBjYXRjaCB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICAgICAnVGhpcyBjb21tYW5kIHJlcXVpcmVzIEFkbWluaXN0cmF0b3IgcHJpdmlsZWdlcy4gJyArXHJcbiAgICAgICAgICAgICdSZS1ydW4gaW4gYW4gZWxldmF0ZWQgdGVybWluYWwgKFJ1biBhcyBBZG1pbmlzdHJhdG9yKS4nXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufVxyXG5cclxuLy8gXHUyNTAwXHUyNTAwXHUyNTAwIFB1YmxpYyBBUEkgKGNhbGxlZCBmcm9tIENMSSBpbmRleC50cykgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaW5zdGFsbFNlcnZpY2UoKTogdm9pZCB7XHJcbiAgICByZXF1aXJlQWRtaW4oKTtcclxuICAgIGVuc3VyZVNlcnZpY2VEaXIoKTtcclxuXHJcbiAgICBjb25zdCBub2RlUGF0aCA9IHJlc29sdmVOb2RlUGF0aCgpO1xyXG4gICAgY29uc3QgY2xpRW50cnkgPSByZXNvbHZlQ2xpRW50cnkoKTtcclxuICAgIGNvbnN0IHdpbnN3UGF0aCA9IHJlc29sdmVXaW5TVygpO1xyXG5cclxuICAgIC8vIENvcHkgd2luc3cgZXhlXHJcbiAgICBmcy5jb3B5RmlsZVN5bmMod2luc3dQYXRoLmVuZHNXaXRoKCcuZXhlJykgPyB3aW5zd1BhdGggOiB3aW5zd1BhdGgsIElOU1RBTExFRF9FWEVfUEFUSCk7XHJcblxyXG4gICAgLy8gV3JpdGUgc3Vic3RpdHV0ZWQgWE1MXHJcbiAgICBsZXQgeG1sID0gZnMucmVhZEZpbGVTeW5jKFhNTF9URU1QTEFURV9QQVRILCAndXRmOCcpO1xyXG4gICAgeG1sID0geG1sLnJlcGxhY2UoLyVOT0RFX1BBVEglL2csIG5vZGVQYXRoLnJlcGxhY2UoL1xcXFwvZywgJ1xcXFxcXFxcJykpO1xyXG4gICAgeG1sID0geG1sLnJlcGxhY2UoLyVDTElfRU5UUlklL2csIGNsaUVudHJ5LnJlcGxhY2UoL1xcXFwvZywgJ1xcXFxcXFxcJykpO1xyXG4gICAgZnMud3JpdGVGaWxlU3luYyhJTlNUQUxMRURfWE1MX1BBVEgsIHhtbCwgJ3V0ZjgnKTtcclxuXHJcbiAgICAvLyBFbnN1cmUgbG9nIGRpciBleGlzdHNcclxuICAgIGNvbnN0IGxvZ0RpciA9IHBhdGguam9pbihvcy5ob21lZGlyKCksICcuMGN0eCcsICdsb2dzJyk7XHJcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMobG9nRGlyKSkgZnMubWtkaXJTeW5jKGxvZ0RpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XHJcblxyXG4gICAgcnVuV2luU1coSU5TVEFMTEVEX0VYRV9QQVRILCBbJ2luc3RhbGwnXSk7XHJcbiAgICBjb25zb2xlLmxvZyhgU2VydmljZSAnJHtTRVJWSUNFX0lEfScgaW5zdGFsbGVkLmApO1xyXG4gICAgY29uc29sZS5sb2coYE5vZGU6ICR7bm9kZVBhdGh9YCk7XHJcbiAgICBjb25zb2xlLmxvZyhgQ0xJIGVudHJ5OiAke2NsaUVudHJ5fWApO1xyXG4gICAgY29uc29sZS5sb2coYFNlcnZpY2UgZGlyOiAke1NFUlZJQ0VfRElSfWApO1xyXG4gICAgY29uc29sZS5sb2coJ1J1bjogMGN0eCBkYWVtb24gc2VydmljZSBlbmFibGUgIFx1MjE5MiAgdG8gc2V0IGF1dG8tc3RhcnQnKTtcclxuICAgIGNvbnNvbGUubG9nKCdSdW46IDBjdHggZGFlbW9uIHNlcnZpY2Ugc3RhcnQgICBcdTIxOTIgIHRvIHN0YXJ0IGltbWVkaWF0ZWx5Jyk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBlbmFibGVTZXJ2aWNlKCk6IHZvaWQge1xyXG4gICAgcmVxdWlyZUFkbWluKCk7XHJcbiAgICBleGVjU3luYyhgc2MgY29uZmlnIFwiJHtTRVJWSUNFX0lEfVwiIHN0YXJ0PSBhdXRvYCwgeyBzdGRpbzogJ2luaGVyaXQnIH0pO1xyXG4gICAgY29uc29sZS5sb2coYFNlcnZpY2UgJyR7U0VSVklDRV9JRH0nIHN0YXJ0IHR5cGUgc2V0IHRvIEF1dG9tYXRpYy5gKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGRpc2FibGVTZXJ2aWNlKCk6IHZvaWQge1xyXG4gICAgcmVxdWlyZUFkbWluKCk7XHJcbiAgICBleGVjU3luYyhgc2MgY29uZmlnIFwiJHtTRVJWSUNFX0lEfVwiIHN0YXJ0PSBkZW1hbmRgLCB7IHN0ZGlvOiAnaW5oZXJpdCcgfSk7XHJcbiAgICBjb25zb2xlLmxvZyhgU2VydmljZSAnJHtTRVJWSUNFX0lEfScgc3RhcnQgdHlwZSBzZXQgdG8gTWFudWFsLmApO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gdW5pbnN0YWxsU2VydmljZSgpOiB2b2lkIHtcclxuICAgIHJlcXVpcmVBZG1pbigpO1xyXG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKElOU1RBTExFRF9FWEVfUEFUSCkpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFNlcnZpY2UgZXhlIG5vdCBmb3VuZCBhdCAke0lOU1RBTExFRF9FWEVfUEFUSH0uIFdhcyBpdCBpbnN0YWxsZWQ/YCk7XHJcbiAgICB9XHJcbiAgICBydW5XaW5TVyhJTlNUQUxMRURfRVhFX1BBVEgsIFsndW5pbnN0YWxsJ10pO1xyXG4gICAgY29uc29sZS5sb2coYFNlcnZpY2UgJyR7U0VSVklDRV9JRH0nIHVuaW5zdGFsbGVkLmApO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc3RhdHVzU2VydmljZSgpOiB2b2lkIHtcclxuICAgIGNvbnN0IG91dHB1dCA9IHNjUXVlcnkoKTtcclxuICAgIGNvbnN0IHN0YXRlID0gcGFyc2VTY1N0YXRlKG91dHB1dCk7XHJcbiAgICBjb25zb2xlLmxvZyhgc2VydmljZTogJHtTRVJWSUNFX0lEfWApO1xyXG4gICAgY29uc29sZS5sb2coYHN0YXRlOiAgICR7c3RhdGV9YCk7XHJcbiAgICBjb25zb2xlLmxvZyhgZGlyOiAgICAgJHtTRVJWSUNFX0RJUn1gKTtcclxuICAgIGNvbnNvbGUubG9nKGB4bWw6ICAgICAke0lOU1RBTExFRF9YTUxfUEFUSH1gKTtcclxuICAgIGNvbnNvbGUubG9nKGBsb2c6ICAgICAke3BhdGguam9pbihvcy5ob21lZGlyKCksICcuMGN0eCcsICdsb2dzJyl9YCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzdGFydFNlcnZpY2UoKTogdm9pZCB7XHJcbiAgICByZXF1aXJlQWRtaW4oKTtcclxuICAgIGV4ZWNTeW5jKGBzYyBzdGFydCBcIiR7U0VSVklDRV9JRH1cImAsIHsgc3RkaW86ICdpbmhlcml0JyB9KTtcclxuICAgIGNvbnNvbGUubG9nKGBTZXJ2aWNlICcke1NFUlZJQ0VfSUR9JyBzdGFydCBjb21tYW5kIGlzc3VlZC5gKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHN0b3BTZXJ2aWNlKCk6IHZvaWQge1xyXG4gICAgcmVxdWlyZUFkbWluKCk7XHJcbiAgICBleGVjU3luYyhgc2Mgc3RvcCBcIiR7U0VSVklDRV9JRH1cImAsIHsgc3RkaW86ICdpbmhlcml0JyB9KTtcclxuICAgIGNvbnNvbGUubG9nKGBTZXJ2aWNlICcke1NFUlZJQ0VfSUR9JyBzdG9wIGNvbW1hbmQgaXNzdWVkLmApO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmVzdGFydFNlcnZpY2UoKTogdm9pZCB7XHJcbiAgICByZXF1aXJlQWRtaW4oKTtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgZXhlY1N5bmMoYHNjIHN0b3AgXCIke1NFUlZJQ0VfSUR9XCJgLCB7IHN0ZGlvOiAncGlwZScgfSk7XHJcbiAgICB9IGNhdGNoIHsgLyogbWF5IGFscmVhZHkgYmUgc3RvcHBlZCAqLyB9XHJcbiAgICAvLyBCcmllZiBwYXVzZSB0byBhbGxvdyB0aGUgc2VydmljZSB0byBzdG9wXHJcbiAgICBleGVjU3luYygndGltZW91dCAvdCAyIC9ub2JyZWFrJywgeyBzdGRpbzogJ3BpcGUnIH0pO1xyXG4gICAgZXhlY1N5bmMoYHNjIHN0YXJ0IFwiJHtTRVJWSUNFX0lEfVwiYCwgeyBzdGRpbzogJ2luaGVyaXQnIH0pO1xyXG4gICAgY29uc29sZS5sb2coYFNlcnZpY2UgJyR7U0VSVklDRV9JRH0nIHJlc3RhcnRlZC5gKTtcclxufVxyXG4iLCAiaW1wb3J0IGZzIGZyb20gJ2ZzJztcclxuaW1wb3J0IG9zIGZyb20gJ29zJztcclxuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XHJcbmltcG9ydCB7IGV4ZWNGaWxlU3luYywgZXhlY1N5bmMgfSBmcm9tICdjaGlsZF9wcm9jZXNzJztcclxuXHJcbmNvbnN0IFNFUlZJQ0VfTEFCRUwgPSAnY29tLjBjdHguZGFlbW9uJztcclxuY29uc3QgUExJU1RfVEVNUExBVEVfUEFUSCA9IHBhdGgucmVzb2x2ZShcclxuICAgIF9fZGlybmFtZSwgJy4uLy4uLy4uL3NjcmlwdHMvc2VydmljZS9tYWNvcy9jb20uMGN0eC5kYWVtb24ucGxpc3QnXHJcbik7XHJcbmNvbnN0IExBVU5DSF9BR0VOVFNfRElSID0gcGF0aC5qb2luKG9zLmhvbWVkaXIoKSwgJ0xpYnJhcnknLCAnTGF1bmNoQWdlbnRzJyk7XHJcbmNvbnN0IElOU1RBTExFRF9QTElTVCA9IHBhdGguam9pbihMQVVOQ0hfQUdFTlRTX0RJUiwgYCR7U0VSVklDRV9MQUJFTH0ucGxpc3RgKTtcclxuXHJcbi8vIFx1MjUwMFx1MjUwMFx1MjUwMCBIZWxwZXJzIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxyXG5cclxuZnVuY3Rpb24gcmVzb2x2ZU5vZGVQYXRoKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gcHJvY2Vzcy5leGVjUGF0aDtcclxufVxyXG5cclxuZnVuY3Rpb24gcmVzb2x2ZUNsaUVudHJ5KCk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBjYW5kaWRhdGVzID0gW1xyXG4gICAgICAgICgoKSA9PiB7IHRyeSB7IHJldHVybiByZXF1aXJlLnJlc29sdmUoJ0AwY3R4L2NsaS9kaXN0L2luZGV4LmpzJyk7IH0gY2F0Y2ggeyByZXR1cm4gJyc7IH0gfSkoKSxcclxuICAgICAgICBwYXRoLnJlc29sdmUoX19kaXJuYW1lLCAnaW5kZXguanMnKSxcclxuICAgICAgICBwYXRoLnJlc29sdmUoX19kaXJuYW1lLCAnLi4nLCAnLi4nLCAnY2xpJywgJ2Rpc3QnLCAnaW5kZXguanMnKSxcclxuICAgICAgICBwYXRoLnJlc29sdmUocHJvY2Vzcy5jd2QoKSwgJ3BhY2thZ2VzJywgJ2NsaScsICdkaXN0JywgJ2luZGV4LmpzJyksXHJcbiAgICBdLmZpbHRlcihCb29sZWFuKTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IGMgb2YgY2FuZGlkYXRlcykge1xyXG4gICAgICAgIGlmIChmcy5leGlzdHNTeW5jKGMpKSByZXR1cm4gYztcclxuICAgIH1cclxuICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAnQ2Fubm90IHJlc29sdmUgQ0xJIGVudHJ5IHBvaW50LiBSdW4gYG5wbSBydW4gYnVpbGRgIG9yIGluc3RhbGwgQDBjdHgvY2xpLidcclxuICAgICk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGVuc3VyZUxvZ0RpcigpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgbG9nRGlyID0gcGF0aC5qb2luKG9zLmhvbWVkaXIoKSwgJy4wY3R4JywgJ2xvZ3MnKTtcclxuICAgIGlmICghZnMuZXhpc3RzU3luYyhsb2dEaXIpKSBmcy5ta2RpclN5bmMobG9nRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcclxuICAgIHJldHVybiBsb2dEaXI7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGxhdW5jaGN0bCguLi5hcmdzOiBzdHJpbmdbXSk6IHZvaWQge1xyXG4gICAgZXhlY0ZpbGVTeW5jKCdsYXVuY2hjdGwnLCBhcmdzLCB7IHN0ZGlvOiAnaW5oZXJpdCcgfSk7XHJcbn1cclxuXHJcbi8vIFx1MjUwMFx1MjUwMFx1MjUwMCBQdWJsaWMgQVBJIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGluc3RhbGxTZXJ2aWNlKCk6IHZvaWQge1xyXG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKExBVU5DSF9BR0VOVFNfRElSKSkge1xyXG4gICAgICAgIGZzLm1rZGlyU3luYyhMQVVOQ0hfQUdFTlRTX0RJUiwgeyByZWN1cnNpdmU6IHRydWUgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgbm9kZVBhdGggPSByZXNvbHZlTm9kZVBhdGgoKTtcclxuICAgIGNvbnN0IGNsaUVudHJ5ID0gcmVzb2x2ZUNsaUVudHJ5KCk7XHJcbiAgICBjb25zdCBsb2dEaXIgPSBlbnN1cmVMb2dEaXIoKTtcclxuXHJcbiAgICBsZXQgcGxpc3QgPSBmcy5yZWFkRmlsZVN5bmMoUExJU1RfVEVNUExBVEVfUEFUSCwgJ3V0ZjgnKTtcclxuICAgIHBsaXN0ID0gcGxpc3QucmVwbGFjZSgvJU5PREVfUEFUSCUvZywgbm9kZVBhdGgpO1xyXG4gICAgcGxpc3QgPSBwbGlzdC5yZXBsYWNlKC8lQ0xJX0VOVFJZJS9nLCBjbGlFbnRyeSk7XHJcbiAgICBwbGlzdCA9IHBsaXN0LnJlcGxhY2UoLyVMT0dfRElSJS9nLCBsb2dEaXIpO1xyXG5cclxuICAgIGZzLndyaXRlRmlsZVN5bmMoSU5TVEFMTEVEX1BMSVNULCBwbGlzdCwgJ3V0ZjgnKTtcclxuICAgIGxhdW5jaGN0bCgnbG9hZCcsICctdycsIElOU1RBTExFRF9QTElTVCk7XHJcblxyXG4gICAgY29uc29sZS5sb2coYFNlcnZpY2UgJyR7U0VSVklDRV9MQUJFTH0nIGluc3RhbGxlZCBhbmQgbG9hZGVkLmApO1xyXG4gICAgY29uc29sZS5sb2coYE5vZGU6ICAgJHtub2RlUGF0aH1gKTtcclxuICAgIGNvbnNvbGUubG9nKGBFbnRyeTogICR7Y2xpRW50cnl9YCk7XHJcbiAgICBjb25zb2xlLmxvZyhgUGxpc3Q6ICAke0lOU1RBTExFRF9QTElTVH1gKTtcclxuICAgIGNvbnNvbGUubG9nKGBMb2dzOiAgICR7bG9nRGlyfWApO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZW5hYmxlU2VydmljZSgpOiB2b2lkIHtcclxuICAgIC8vIExvYWQgd2l0aCAtdyB3cml0ZXMgdGhlIERpc2FibGVkPWZhbHNlIGtleSBcdTIxOTIgc3Vydml2ZXMgcmVib290XHJcbiAgICBsYXVuY2hjdGwoJ2xvYWQnLCAnLXcnLCBJTlNUQUxMRURfUExJU1QpO1xyXG4gICAgY29uc29sZS5sb2coYFNlcnZpY2UgJyR7U0VSVklDRV9MQUJFTH0nIGVuYWJsZWQgKGF1dG8tc3RhcnQgb24gbG9naW4pLmApO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZGlzYWJsZVNlcnZpY2UoKTogdm9pZCB7XHJcbiAgICAvLyBVbmxvYWQgd2l0aCAtdyB3cml0ZXMgRGlzYWJsZWQ9dHJ1ZSBcdTIxOTIgc3Vydml2ZXMgcmVib290IHdpdGhvdXQgcmVtb3ZpbmcgcGxpc3RcclxuICAgIGxhdW5jaGN0bCgndW5sb2FkJywgJy13JywgSU5TVEFMTEVEX1BMSVNUKTtcclxuICAgIGNvbnNvbGUubG9nKGBTZXJ2aWNlICcke1NFUlZJQ0VfTEFCRUx9JyBkaXNhYmxlZCAod2lsbCBub3QgYXV0by1zdGFydCkuYCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiB1bmluc3RhbGxTZXJ2aWNlKCk6IHZvaWQge1xyXG4gICAgaWYgKGZzLmV4aXN0c1N5bmMoSU5TVEFMTEVEX1BMSVNUKSkge1xyXG4gICAgICAgIHRyeSB7IGxhdW5jaGN0bCgndW5sb2FkJywgSU5TVEFMTEVEX1BMSVNUKTsgfSBjYXRjaCB7IC8qIG1heSBub3QgYmUgbG9hZGVkICovIH1cclxuICAgICAgICBmcy51bmxpbmtTeW5jKElOU1RBTExFRF9QTElTVCk7XHJcbiAgICB9XHJcbiAgICBjb25zb2xlLmxvZyhgU2VydmljZSAnJHtTRVJWSUNFX0xBQkVMfScgdW5pbnN0YWxsZWQuYCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzdGF0dXNTZXJ2aWNlKCk6IHZvaWQge1xyXG4gICAgY29uc29sZS5sb2coYHNlcnZpY2U6ICR7U0VSVklDRV9MQUJFTH1gKTtcclxuICAgIGNvbnNvbGUubG9nKGBwbGlzdDogICAke0lOU1RBTExFRF9QTElTVH1gKTtcclxuICAgIGNvbnNvbGUubG9nKGBpbnN0YWxsZWQ6ICR7ZnMuZXhpc3RzU3luYyhJTlNUQUxMRURfUExJU1QpfWApO1xyXG4gICAgY29uc29sZS5sb2coYGxvZ3M6ICAgICR7cGF0aC5qb2luKG9zLmhvbWVkaXIoKSwgJy4wY3R4JywgJ2xvZ3MnKX1gKTtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgZXhlY1N5bmMoYGxhdW5jaGN0bCBwcmludCBndWkvJChpZCAtdSkvJHtTRVJWSUNFX0xBQkVMfWAsIHsgc3RkaW86ICdpbmhlcml0JyB9KTtcclxuICAgIH0gY2F0Y2gge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdzdGF0ZTogICBub3QgbG9hZGVkIChydW46IDBjdHggZGFlbW9uIHNlcnZpY2UgaW5zdGFsbCknKTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0U2VydmljZSgpOiB2b2lkIHtcclxuICAgIGxhdW5jaGN0bCgnc3RhcnQnLCBTRVJWSUNFX0xBQkVMKTtcclxuICAgIGNvbnNvbGUubG9nKGBTZXJ2aWNlICcke1NFUlZJQ0VfTEFCRUx9JyBzdGFydCBjb21tYW5kIGlzc3VlZC5gKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHN0b3BTZXJ2aWNlKCk6IHZvaWQge1xyXG4gICAgbGF1bmNoY3RsKCdzdG9wJywgU0VSVklDRV9MQUJFTCk7XHJcbiAgICBjb25zb2xlLmxvZyhgU2VydmljZSAnJHtTRVJWSUNFX0xBQkVMfScgc3RvcCBjb21tYW5kIGlzc3VlZC5gKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJlc3RhcnRTZXJ2aWNlKCk6IHZvaWQge1xyXG4gICAgdHJ5IHsgbGF1bmNoY3RsKCdzdG9wJywgU0VSVklDRV9MQUJFTCk7IH0gY2F0Y2ggeyAvKiBtYXkgYWxyZWFkeSBiZSBzdG9wcGVkICovIH1cclxuICAgIGxhdW5jaGN0bCgnc3RhcnQnLCBTRVJWSUNFX0xBQkVMKTtcclxuICAgIGNvbnNvbGUubG9nKGBTZXJ2aWNlICcke1NFUlZJQ0VfTEFCRUx9JyByZXN0YXJ0ZWQuYCk7XHJcbn1cclxuIiwgImltcG9ydCBmcyBmcm9tICdmcyc7XHJcbmltcG9ydCBvcyBmcm9tICdvcyc7XHJcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xyXG5pbXBvcnQgeyBleGVjU3luYyB9IGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xyXG5cclxuY29uc3QgU0VSVklDRV9OQU1FID0gJzBjdHgtZGFlbW9uJztcclxuY29uc3QgVU5JVF9URU1QTEFURV9QQVRIID0gcGF0aC5yZXNvbHZlKFxyXG4gICAgX19kaXJuYW1lLCAnLi4vLi4vLi4vc2NyaXB0cy9zZXJ2aWNlL2xpbnV4LzBjdHgtZGFlbW9uLnNlcnZpY2UnXHJcbik7XHJcbmNvbnN0IFNZU1RFTURfVVNFUl9ESVIgPSBwYXRoLmpvaW4ob3MuaG9tZWRpcigpLCAnLmNvbmZpZycsICdzeXN0ZW1kJywgJ3VzZXInKTtcclxuY29uc3QgSU5TVEFMTEVEX1VOSVQgPSBwYXRoLmpvaW4oU1lTVEVNRF9VU0VSX0RJUiwgYCR7U0VSVklDRV9OQU1FfS5zZXJ2aWNlYCk7XHJcblxyXG4vLyBcdTI1MDBcdTI1MDBcdTI1MDAgSGVscGVycyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcclxuXHJcbmZ1bmN0aW9uIHJlc29sdmVOb2RlUGF0aCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHByb2Nlc3MuZXhlY1BhdGg7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlc29sdmVDbGlFbnRyeSgpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgY2FuZGlkYXRlcyA9IFtcclxuICAgICAgICAoKCkgPT4geyB0cnkgeyByZXR1cm4gcmVxdWlyZS5yZXNvbHZlKCdAMGN0eC9jbGkvZGlzdC9pbmRleC5qcycpOyB9IGNhdGNoIHsgcmV0dXJuICcnOyB9IH0pKCksXHJcbiAgICAgICAgcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgJ2luZGV4LmpzJyksXHJcbiAgICAgICAgcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgJy4uJywgJy4uJywgJ2NsaScsICdkaXN0JywgJ2luZGV4LmpzJyksXHJcbiAgICAgICAgcGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCksICdwYWNrYWdlcycsICdjbGknLCAnZGlzdCcsICdpbmRleC5qcycpLFxyXG4gICAgXS5maWx0ZXIoQm9vbGVhbik7XHJcblxyXG4gICAgZm9yIChjb25zdCBjIG9mIGNhbmRpZGF0ZXMpIHtcclxuICAgICAgICBpZiAoZnMuZXhpc3RzU3luYyhjKSkgcmV0dXJuIGM7XHJcbiAgICB9XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgJ0Nhbm5vdCByZXNvbHZlIENMSSBlbnRyeSBwb2ludC4gUnVuIGBucG0gcnVuIGJ1aWxkYCBvciBpbnN0YWxsIEAwY3R4L2NsaS4nXHJcbiAgICApO1xyXG59XHJcblxyXG5mdW5jdGlvbiBzeXN0ZW1jdGwoLi4uYXJnczogc3RyaW5nW10pOiB2b2lkIHtcclxuICAgIGV4ZWNTeW5jKGBzeXN0ZW1jdGwgLS11c2VyICR7YXJncy5qb2luKCcgJyl9YCwgeyBzdGRpbzogJ2luaGVyaXQnIH0pO1xyXG59XHJcblxyXG4vLyBcdTI1MDBcdTI1MDBcdTI1MDAgUHVibGljIEFQSSBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpbnN0YWxsU2VydmljZSgpOiB2b2lkIHtcclxuICAgIGlmICghZnMuZXhpc3RzU3luYyhTWVNURU1EX1VTRVJfRElSKSkge1xyXG4gICAgICAgIGZzLm1rZGlyU3luYyhTWVNURU1EX1VTRVJfRElSLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBub2RlUGF0aCA9IHJlc29sdmVOb2RlUGF0aCgpO1xyXG4gICAgY29uc3QgY2xpRW50cnkgPSByZXNvbHZlQ2xpRW50cnkoKTtcclxuXHJcbiAgICBsZXQgdW5pdCA9IGZzLnJlYWRGaWxlU3luYyhVTklUX1RFTVBMQVRFX1BBVEgsICd1dGY4Jyk7XHJcbiAgICB1bml0ID0gdW5pdC5yZXBsYWNlKC8lTk9ERV9QQVRIJS9nLCBub2RlUGF0aCk7XHJcbiAgICB1bml0ID0gdW5pdC5yZXBsYWNlKC8lQ0xJX0VOVFJZJS9nLCBjbGlFbnRyeSk7XHJcblxyXG4gICAgZnMud3JpdGVGaWxlU3luYyhJTlNUQUxMRURfVU5JVCwgdW5pdCwgJ3V0ZjgnKTtcclxuICAgIHN5c3RlbWN0bCgnZGFlbW9uLXJlbG9hZCcpO1xyXG5cclxuICAgIGNvbnNvbGUubG9nKGBVbml0ICcke1NFUlZJQ0VfTkFNRX0uc2VydmljZScgaW5zdGFsbGVkLmApO1xyXG4gICAgY29uc29sZS5sb2coYE5vZGU6ICAke25vZGVQYXRofWApO1xyXG4gICAgY29uc29sZS5sb2coYEVudHJ5OiAke2NsaUVudHJ5fWApO1xyXG4gICAgY29uc29sZS5sb2coYFVuaXQ6ICAke0lOU1RBTExFRF9VTklUfWApO1xyXG4gICAgY29uc29sZS5sb2coJ1J1bjogMGN0eCBkYWVtb24gc2VydmljZSBlbmFibGUgIFx1MjE5MiAgdG8gc2V0IGF1dG8tc3RhcnQnKTtcclxuICAgIGNvbnNvbGUubG9nKCdSdW46IDBjdHggZGFlbW9uIHNlcnZpY2Ugc3RhcnQgICBcdTIxOTIgIHRvIHN0YXJ0IGltbWVkaWF0ZWx5Jyk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBlbmFibGVTZXJ2aWNlKCk6IHZvaWQge1xyXG4gICAgc3lzdGVtY3RsKCdlbmFibGUnLCBTRVJWSUNFX05BTUUpO1xyXG4gICAgY29uc29sZS5sb2coYFNlcnZpY2UgJyR7U0VSVklDRV9OQU1FfScgZW5hYmxlZCAoYXV0by1zdGFydCBvbiBsb2dpbikuYCk7XHJcbiAgICBjb25zb2xlLmxvZygnVGlwOiBydW4gYGxvZ2luY3RsIGVuYWJsZS1saW5nZXIgJFVTRVJgIGZvciBzdGFydC1hdC1ib290IHdpdGhvdXQgbG9naW4uJyk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBkaXNhYmxlU2VydmljZSgpOiB2b2lkIHtcclxuICAgIHN5c3RlbWN0bCgnZGlzYWJsZScsIFNFUlZJQ0VfTkFNRSk7XHJcbiAgICBjb25zb2xlLmxvZyhgU2VydmljZSAnJHtTRVJWSUNFX05BTUV9JyBkaXNhYmxlZCAod2lsbCBub3QgYXV0by1zdGFydCkuYCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiB1bmluc3RhbGxTZXJ2aWNlKCk6IHZvaWQge1xyXG4gICAgdHJ5IHsgc3lzdGVtY3RsKCdzdG9wJywgU0VSVklDRV9OQU1FKTsgfSBjYXRjaCB7IC8qIG1heSBub3QgYmUgcnVubmluZyAqLyB9XHJcbiAgICB0cnkgeyBzeXN0ZW1jdGwoJ2Rpc2FibGUnLCBTRVJWSUNFX05BTUUpOyB9IGNhdGNoIHsgLyogbWF5IG5vdCBiZSBlbmFibGVkICovIH1cclxuICAgIGlmIChmcy5leGlzdHNTeW5jKElOU1RBTExFRF9VTklUKSkge1xyXG4gICAgICAgIGZzLnVubGlua1N5bmMoSU5TVEFMTEVEX1VOSVQpO1xyXG4gICAgfVxyXG4gICAgdHJ5IHsgc3lzdGVtY3RsKCdkYWVtb24tcmVsb2FkJyk7IH0gY2F0Y2ggeyAvKiBiZXN0IGVmZm9ydCAqLyB9XHJcbiAgICBjb25zb2xlLmxvZyhgVW5pdCAnJHtTRVJWSUNFX05BTUV9LnNlcnZpY2UnIHVuaW5zdGFsbGVkLmApO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc3RhdHVzU2VydmljZSgpOiB2b2lkIHtcclxuICAgIGNvbnNvbGUubG9nKGBzZXJ2aWNlOiAke1NFUlZJQ0VfTkFNRX1gKTtcclxuICAgIGNvbnNvbGUubG9nKGB1bml0OiAgICAke0lOU1RBTExFRF9VTklUfWApO1xyXG4gICAgY29uc29sZS5sb2coYGluc3RhbGxlZDogJHtmcy5leGlzdHNTeW5jKElOU1RBTExFRF9VTklUKX1gKTtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgc3lzdGVtY3RsKCdzdGF0dXMnLCBTRVJWSUNFX05BTUUpO1xyXG4gICAgfSBjYXRjaCB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ3N0YXRlOiAgIG5vdCBhY3RpdmUgKHJ1bjogMGN0eCBkYWVtb24gc2VydmljZSBpbnN0YWxsICYmIDBjdHggZGFlbW9uIHNlcnZpY2Ugc3RhcnQpJyk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzdGFydFNlcnZpY2UoKTogdm9pZCB7XHJcbiAgICBzeXN0ZW1jdGwoJ3N0YXJ0JywgU0VSVklDRV9OQU1FKTtcclxuICAgIGNvbnNvbGUubG9nKGBTZXJ2aWNlICcke1NFUlZJQ0VfTkFNRX0nIHN0YXJ0ZWQuYCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzdG9wU2VydmljZSgpOiB2b2lkIHtcclxuICAgIHN5c3RlbWN0bCgnc3RvcCcsIFNFUlZJQ0VfTkFNRSk7XHJcbiAgICBjb25zb2xlLmxvZyhgU2VydmljZSAnJHtTRVJWSUNFX05BTUV9JyBzdG9wcGVkLmApO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmVzdGFydFNlcnZpY2UoKTogdm9pZCB7XHJcbiAgICBzeXN0ZW1jdGwoJ3Jlc3RhcnQnLCBTRVJWSUNFX05BTUUpO1xyXG4gICAgY29uc29sZS5sb2coYFNlcnZpY2UgJyR7U0VSVklDRV9OQU1FfScgcmVzdGFydGVkLmApO1xyXG59XHJcbiIsICIvKipcclxuICogQVVUSC0wMTogQ0xJLXNpZGUgZGV2aWNlIGNvZGUgYXV0aCAoUkZDIDg2MjgpXHJcbiAqXHJcbiAqIFRva2VuIHN0b3JlIChTRUMtMDIgcHJpb3JpdHkgb3JkZXIpOlxyXG4gKiAgIDEuIENUWF9BVVRIX1RPS0VOIGVudiB2YXIgKFNFQy0wMSlcclxuICogICAyLiBPUyBrZXlyaW5nIChtYWNPUyBLZXljaGFpbiAvIFdpbmRvd3MgQ3JlZGVudGlhbCBNYW5hZ2VyIC8gTGludXggU2VjcmV0IFNlcnZpY2UpXHJcbiAqICAgMy4gfi8uMGN0eC9hdXRoLmpzb24gZmFsbGJhY2sgKDBvNjAwKSBcdTIwMTQgb3IgZm9yY2VkIHZpYSAtLWluc2VjdXJlLXN0b3JhZ2VcclxuICpcclxuICogQXV0aCBzZXJ2ZXI6IENUWF9BVVRIX1NFUlZFUiBlbnYgdmFyIChkZWZhdWx0OiBodHRwczovLzBjdHguY29tKVxyXG4gKlxyXG4gKiBUaGUgQ0xJIHRhbGtzIHRvIHRoZSAwY3R4LmNvbSBCRkYgcHJveHkgcm91dGVzIChub3QgQXV0aDAgZGlyZWN0bHkpOlxyXG4gKiAgIFBPU1Qge2F1dGhTZXJ2ZXJ9L2FwaS92MS9hdXRoL2RldmljZSAgICAgICAgIFx1MjE5MiBpbml0aWF0ZSBkZXZpY2UgY29kZVxyXG4gKiAgIFBPU1Qge2F1dGhTZXJ2ZXJ9L2FwaS92MS9hdXRoL2RldmljZS90b2tlbiAgIFx1MjE5MiBwb2xsIGZvciB0b2tlbnNcclxuICogICBQT1NUIHthdXRoU2VydmVyfS9hcGkvdjEvYXV0aC9kZXZpY2UvcmVmcmVzaCBcdTIxOTIgcmVmcmVzaCBhY2Nlc3MgdG9rZW5cclxuICogICBQT1NUIHthdXRoU2VydmVyfS9hcGkvdjEvYXV0aC9kZXZpY2UvcmV2b2tlICBcdTIxOTIgcmV2b2tlIHJlZnJlc2ggdG9rZW5cclxuICpcclxuICogQWxsIHJlcXVlc3RzL3Jlc3BvbnNlcyBhcmUgSlNPTiAobm90IGZvcm0tZW5jb2RlZCkuXHJcbiAqIEFsbCBwcm94eSByZXNwb25zZXMgdXNlIGNhbWVsQ2FzZTsgbWFwcGVkIHRvIHNuYWtlX2Nhc2UgdHlwZXMgbG9jYWxseS5cclxuICovXHJcblxyXG5pbXBvcnQgZnMgZnJvbSAnZnMnO1xyXG5pbXBvcnQgb3MgZnJvbSAnb3MnO1xyXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcclxuaW1wb3J0IGh0dHBzIGZyb20gJ2h0dHBzJztcclxuaW1wb3J0IGh0dHAgZnJvbSAnaHR0cCc7XHJcbmltcG9ydCB7IGV4ZWNTeW5jIH0gZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XHJcbmltcG9ydCB7IHN0b3JlVG9LZXlyaW5nLCByZWFkRnJvbUtleXJpbmcsIGRlbGV0ZUZyb21LZXlyaW5nIH0gZnJvbSAnLi9rZXlyaW5nLmpzJztcclxuaW1wb3J0IHsgZ2V0Q29uZmlnVmFsdWUsIHNhdmVDb25maWcgfSBmcm9tICdAMGN0eC9jb3JlJztcclxuXHJcbi8vIFx1MjUwMFx1MjUwMFx1MjUwMCBDb25maWcgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHJcblxyXG5jb25zdCBERUZBVUxUX0FVVEhfU0VSVkVSID0gJ2h0dHBzOi8vMGN0eC5jb20nO1xyXG5jb25zdCBERUZBVUxUX1NDT1BFID0gJ29wZW5pZCBwcm9maWxlIGVtYWlsIG9mZmxpbmVfYWNjZXNzJztcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIHRoZSB0b2tlbiBmaWxlIHBhdGguXHJcbiAqIE92ZXJyaWRlIHdpdGggQ1RYX0FVVEhfRklMRSBlbnYgdmFyIGZvciB0ZXN0aW5nIG9yIG5vbi1zdGFuZGFyZCBpbnN0YWxscy5cclxuICogUmUtZXZhbHVhdGVkIG9uIGVhY2ggY2FsbCBzbyB0ZXN0cyBjYW4gb3ZlcnJpZGUgcHJvY2Vzcy5lbnYgYXQgcnVudGltZS5cclxuICovXHJcbmZ1bmN0aW9uIGdldFRva2VuRmlsZVBhdGgoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBwcm9jZXNzLmVudi5DVFhfQVVUSF9GSUxFID8/IHBhdGguam9pbihvcy5ob21lZGlyKCksICcuMGN0eCcsICdhdXRoLmpzb24nKTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0QXV0aFNlcnZlcigpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGdldENvbmZpZ1ZhbHVlKCdhdXRoLnNlcnZlcicpLnJlcGxhY2UoL1xcLyQvLCAnJyk7XHJcbn1cclxuXHJcbi8vIFx1MjUwMFx1MjUwMFx1MjUwMCBUeXBlcyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgVG9rZW5TdG9yZSB7XHJcbiAgICBhY2Nlc3NUb2tlbjogc3RyaW5nO1xyXG4gICAgcmVmcmVzaFRva2VuOiBzdHJpbmc7XHJcbiAgICBleHBpcmVzQXQ6IG51bWJlcjsgICAgIC8vIFVuaXggbXNcclxuICAgIGVtYWlsOiBzdHJpbmc7XHJcbiAgICB0ZW5hbnRJZDogc3RyaW5nO1xyXG59XHJcblxyXG4vLyBJbnRlcm5hbCBzbmFrZV9jYXNlIHR5cGVzIChSRkMgODYyOCBuYW1lcyBrZXB0IGZvciByZWFkYWJpbGl0eSBpbnNpZGUgdGhpcyBtb2R1bGUpXHJcbmludGVyZmFjZSBEZXZpY2VDb2RlUmVzcG9uc2Uge1xyXG4gICAgZGV2aWNlX2NvZGU6IHN0cmluZztcclxuICAgIHVzZXJfY29kZTogc3RyaW5nO1xyXG4gICAgdmVyaWZpY2F0aW9uX3VyaTogc3RyaW5nO1xyXG4gICAgdmVyaWZpY2F0aW9uX3VyaV9jb21wbGV0ZT86IHN0cmluZztcclxuICAgIGV4cGlyZXNfaW46IG51bWJlcjsgICAgLy8gc2Vjb25kc1xyXG4gICAgaW50ZXJ2YWw6IG51bWJlcjsgICAgICAvLyBzZWNvbmRzXHJcbn1cclxuXHJcbmludGVyZmFjZSBUb2tlblJlc3BvbnNlIHtcclxuICAgIGFjY2Vzc190b2tlbjogc3RyaW5nO1xyXG4gICAgcmVmcmVzaF90b2tlbjogc3RyaW5nO1xyXG4gICAgZXhwaXJlc19pbjogbnVtYmVyOyAgICAvLyBzZWNvbmRzXHJcbiAgICB0b2tlbl90eXBlOiBzdHJpbmc7XHJcbiAgICBlbWFpbD86IHN0cmluZztcclxuICAgIHRlbmFudF9pZD86IHN0cmluZztcclxufVxyXG5cclxuaW50ZXJmYWNlIFRva2VuRXJyb3JSZXNwb25zZSB7XHJcbiAgICBlcnJvcjogc3RyaW5nO1xyXG4gICAgZXJyb3JfZGVzY3JpcHRpb24/OiBzdHJpbmc7XHJcbn1cclxuXHJcbi8vIFByb3h5IEJGRiByZXNwb25zZSBzaGFwZXMgKGNhbWVsQ2FzZSBcdTIwMTQgd2hhdCAwY3R4LmNvbSByZXR1cm5zKVxyXG5pbnRlcmZhY2UgQmZmRXJyb3Ige1xyXG4gICAgY29kZTogc3RyaW5nO1xyXG4gICAgbWVzc2FnZTogc3RyaW5nO1xyXG4gICAgcmV0cnlhYmxlPzogYm9vbGVhbjtcclxuICAgIGNvcnJlbGF0aW9uSWQ/OiBzdHJpbmc7XHJcbn1cclxuXHJcbi8qKiBFeHRyYWN0IGEgcmVhZGFibGUgbWVzc2FnZSBmcm9tIGVpdGhlciBCRkYgZXJyb3Igc2hhcGUuICovXHJcbmZ1bmN0aW9uIGJmZkVycm9yTWVzc2FnZShlcnJvcjogQmZmRXJyb3IgfCBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xyXG4gICAgaWYgKCFlcnJvcikgcmV0dXJuICd1bmtub3duIGVycm9yJztcclxuICAgIGlmICh0eXBlb2YgZXJyb3IgPT09ICdzdHJpbmcnKSByZXR1cm4gZXJyb3I7XHJcbiAgICByZXR1cm4gZXJyb3IubWVzc2FnZSA/PyBlcnJvci5jb2RlID8/ICd1bmtub3duIGVycm9yJztcclxufVxyXG5cclxuLyoqIEV4dHJhY3QgdGhlIGVycm9yIGNvZGUgZm9yIHBvbGxpbmcgc3RhdGUgY29tcGFyaXNvbnMuICovXHJcbmZ1bmN0aW9uIGJmZkVycm9yQ29kZShlcnJvcjogQmZmRXJyb3IgfCBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xyXG4gICAgaWYgKCFlcnJvcikgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIGlmICh0eXBlb2YgZXJyb3IgPT09ICdzdHJpbmcnKSByZXR1cm4gZXJyb3I7XHJcbiAgICByZXR1cm4gZXJyb3IuY29kZTtcclxufVxyXG5cclxuaW50ZXJmYWNlIEJmZkRldmljZUNvZGVSZXNwb25zZSB7XHJcbiAgICBkZXZpY2VDb2RlOiBzdHJpbmc7XHJcbiAgICB1c2VyQ29kZTogc3RyaW5nO1xyXG4gICAgdmVyaWZpY2F0aW9uVXJpOiBzdHJpbmc7XHJcbiAgICB2ZXJpZmljYXRpb25VcmlDb21wbGV0ZT86IHN0cmluZztcclxuICAgIGV4cGlyZXNJbjogbnVtYmVyO1xyXG4gICAgaW50ZXJ2YWw6IG51bWJlcjtcclxuICAgIC8vIEJGRiBhbHdheXMgdXNlcyBvYmplY3QgZXJyb3JzIGZvciB0aGlzIGVuZHBvaW50XHJcbiAgICBlcnJvcj86IEJmZkVycm9yO1xyXG59XHJcblxyXG5pbnRlcmZhY2UgQmZmVG9rZW5SZXNwb25zZSB7XHJcbiAgICBhY2Nlc3NUb2tlbj86IHN0cmluZztcclxuICAgIHJlZnJlc2hUb2tlbj86IHN0cmluZyB8IG51bGw7XHJcbiAgICBpZFRva2VuPzogc3RyaW5nIHwgbnVsbDtcclxuICAgIHRva2VuVHlwZT86IHN0cmluZztcclxuICAgIGV4cGlyZXNJbj86IG51bWJlcjtcclxuICAgIGVtYWlsPzogc3RyaW5nIHwgbnVsbDtcclxuICAgIHRlbmFudElkPzogc3RyaW5nIHwgbnVsbDtcclxuICAgIC8vIFBvbGxpbmcgcGFzc3Rocm91Z2ggZXJyb3JzIChcImF1dGhvcml6YXRpb25fcGVuZGluZ1wiIGV0Yy4pIGFyZSBwbGFpbiBzdHJpbmdzLlxyXG4gICAgLy8gQkZGIGhhcmQgZXJyb3JzIChkZXZpY2VfYXV0aF91cHN0cmVhbV9lcnJvciBldGMuKSBhcmUgQmZmRXJyb3Igb2JqZWN0cy5cclxuICAgIGVycm9yPzogQmZmRXJyb3IgfCBzdHJpbmc7XHJcbiAgICBlcnJvckRlc2NyaXB0aW9uPzogc3RyaW5nO1xyXG59XHJcblxyXG4vLyBcdTI1MDBcdTI1MDBcdTI1MDAgVG9rZW4gc3RvcmUgSS9PIChTRUMtMDI6IGtleXJpbmctZmlyc3QsIGZpbGUtZmFsbGJhY2spIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxyXG5cclxuLyoqIFJlYWQgZnJvbSBmaWxlIG9ubHkgKHN5bmMgZmFsbGJhY2spLiAqL1xyXG5mdW5jdGlvbiByZWFkVG9rZW5GaWxlKCk6IFRva2VuU3RvcmUgfCBudWxsIHtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgY29uc3QgZiA9IGdldFRva2VuRmlsZVBhdGgoKTtcclxuICAgICAgICBpZiAoIWZzLmV4aXN0c1N5bmMoZikpIHJldHVybiBudWxsO1xyXG4gICAgICAgIGNvbnN0IHJhdyA9IGZzLnJlYWRGaWxlU3luYyhmLCAndXRmOCcpO1xyXG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKHJhdykgYXMgVG9rZW5TdG9yZTtcclxuICAgIH0gY2F0Y2gge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiB3cml0ZVRva2VuRmlsZShzdG9yZTogVG9rZW5TdG9yZSk6IHZvaWQge1xyXG4gICAgY29uc3QgZiA9IGdldFRva2VuRmlsZVBhdGgoKTtcclxuICAgIGNvbnN0IGRpciA9IHBhdGguZGlybmFtZShmKTtcclxuICAgIGlmICghZnMuZXhpc3RzU3luYyhkaXIpKSBmcy5ta2RpclN5bmMoZGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcclxuICAgIGZzLndyaXRlRmlsZVN5bmMoZiwgSlNPTi5zdHJpbmdpZnkoc3RvcmUsIG51bGwsIDIpLCB7IGVuY29kaW5nOiAndXRmOCcsIG1vZGU6IDBvNjAwIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjbGVhclRva2VuRmlsZSgpOiB2b2lkIHtcclxuICAgIHRyeSB7IGZzLnVubGlua1N5bmMoZ2V0VG9rZW5GaWxlUGF0aCgpKTsgfSBjYXRjaCB7IC8qIGFscmVhZHkgZ29uZSAqLyB9XHJcbn1cclxuXHJcbi8qKiBSZWFkIHRva2VuOiBrZXlyaW5nIGZpcnN0LCB0aGVuIGZpbGUgKHN5bmMgY29tcGF0IHdyYXBwZXIpLiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gcmVhZFRva2VuU3RvcmUoKTogVG9rZW5TdG9yZSB8IG51bGwge1xyXG4gICAgcmV0dXJuIHJlYWRUb2tlbkZpbGUoKTtcclxufVxyXG5cclxuLyoqIFdyaXRlIHRva2VuIHRvIGtleXJpbmcgKyBmaWxlLiBBc3luYyBiZWNhdXNlIGtleXJpbmcgaXMgYXN5bmMuICovXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3cml0ZVRva2VuU3RvcmVTZWN1cmUoc3RvcmU6IFRva2VuU3RvcmUsIGluc2VjdXJlT25seSA9IGZhbHNlKTogUHJvbWlzZTwna2V5cmluZycgfCAnZmlsZSc+IHtcclxuICAgIGNvbnN0IGpzb24gPSBKU09OLnN0cmluZ2lmeShzdG9yZSwgbnVsbCwgMik7XHJcbiAgICBpZiAoIWluc2VjdXJlT25seSkge1xyXG4gICAgICAgIGNvbnN0IHN0b3JlZCA9IGF3YWl0IHN0b3JlVG9LZXlyaW5nKGpzb24pO1xyXG4gICAgICAgIGlmIChzdG9yZWQpIHtcclxuICAgICAgICAgICAgLy8gQWxzbyB3cml0ZSBmaWxlIGFzIGJhY2t1cCAoZGFlbW9uIHJlYWRzIGZyb20gZmlsZSlcclxuICAgICAgICAgICAgd3JpdGVUb2tlbkZpbGUoc3RvcmUpO1xyXG4gICAgICAgICAgICByZXR1cm4gJ2tleXJpbmcnO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHdyaXRlVG9rZW5GaWxlKHN0b3JlKTtcclxuICAgIHJldHVybiAnZmlsZSc7XHJcbn1cclxuXHJcbi8qKiBSZWFkIHRva2VuOiB0cmllcyBrZXlyaW5nIGZpcnN0LCBmYWxscyBiYWNrIHRvIGZpbGUuICovXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWFkVG9rZW5TdG9yZVNlY3VyZSgpOiBQcm9taXNlPHsgc3RvcmU6IFRva2VuU3RvcmUgfCBudWxsOyBzb3VyY2U6ICdrZXlyaW5nJyB8ICdmaWxlJyB8IG51bGwgfT4ge1xyXG4gICAgY29uc3Qga2V5cmluZ1JhdyA9IGF3YWl0IHJlYWRGcm9tS2V5cmluZygpO1xyXG4gICAgaWYgKGtleXJpbmdSYXcpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICByZXR1cm4geyBzdG9yZTogSlNPTi5wYXJzZShrZXlyaW5nUmF3KSBhcyBUb2tlblN0b3JlLCBzb3VyY2U6ICdrZXlyaW5nJyB9O1xyXG4gICAgICAgIH0gY2F0Y2ggeyAvKiBjb3JydXB0IGtleXJpbmcgZW50cnksIHRyeSBmaWxlICovIH1cclxuICAgIH1cclxuICAgIGNvbnN0IGZpbGVTdG9yZSA9IHJlYWRUb2tlbkZpbGUoKTtcclxuICAgIHJldHVybiB7IHN0b3JlOiBmaWxlU3RvcmUsIHNvdXJjZTogZmlsZVN0b3JlID8gJ2ZpbGUnIDogbnVsbCB9O1xyXG59XHJcblxyXG4vKiogQ2xlYXIgdG9rZW4gZnJvbSBib3RoIGtleXJpbmcgYW5kIGZpbGUuICovXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjbGVhclRva2VuU3RvcmVTZWN1cmUoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBhd2FpdCBkZWxldGVGcm9tS2V5cmluZygpO1xyXG4gICAgY2xlYXJUb2tlbkZpbGUoKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzVG9rZW5FeHBpcmVkKHN0b3JlOiBUb2tlblN0b3JlKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gRGF0ZS5ub3coKSA+PSBzdG9yZS5leHBpcmVzQXQ7XHJcbn1cclxuXHJcbi8vIFx1MjUwMFx1MjUwMFx1MjUwMCBFbnYgdmFyIHRva2VuIGJ5cGFzcyAoU0VDLTAxKSBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcclxuXHJcbi8qKlxyXG4gKiBDaGVjayBDVFhfQVVUSF9UT0tFTiBvciBDVFhfQVVUSF9UT0tFTl9GSUxFIGVudiB2YXJzIGZvciBDSS9DRCBoZWFkbGVzcyB1c2UuXHJcbiAqIFJldHVybnMgYSBzeW50aGV0aWMgVG9rZW5TdG9yZSBpZiBmb3VuZCwgbnVsbCBvdGhlcndpc2UuXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW52VG9rZW4oKTogVG9rZW5TdG9yZSB8IG51bGwge1xyXG4gICAgY29uc3QgZGlyZWN0ID0gcHJvY2Vzcy5lbnYuQ1RYX0FVVEhfVE9LRU47XHJcbiAgICBpZiAoZGlyZWN0KSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgYWNjZXNzVG9rZW46IGRpcmVjdCxcclxuICAgICAgICAgICAgcmVmcmVzaFRva2VuOiAnJyxcclxuICAgICAgICAgICAgZXhwaXJlc0F0OiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUixcclxuICAgICAgICAgICAgZW1haWw6ICdlbnY6Q1RYX0FVVEhfVE9LRU4nLFxyXG4gICAgICAgICAgICB0ZW5hbnRJZDogcHJvY2Vzcy5lbnYuQ1RYX1RFTkFOVF9JRCA/PyAnJ1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZmlsZVBhdGggPSBwcm9jZXNzLmVudi5DVFhfQVVUSF9UT0tFTl9GSUxFO1xyXG4gICAgaWYgKGZpbGVQYXRoKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgcmF3ID0gZnMucmVhZEZpbGVTeW5jKGZpbGVQYXRoLCAndXRmOCcpO1xyXG4gICAgICAgICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKHJhdykgYXMgVG9rZW5TdG9yZTtcclxuICAgICAgICAgICAgaWYgKHBhcnNlZC5hY2Nlc3NUb2tlbikgcmV0dXJuIHBhcnNlZDtcclxuICAgICAgICB9IGNhdGNoIHtcclxuICAgICAgICAgICAgLy8gZmFsbCB0aHJvdWdoXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBudWxsO1xyXG59XHJcblxyXG4vKipcclxuICogUmVzb2x2ZSB0aGUgZWZmZWN0aXZlIHRva2VuOiBlbnYgdmFyID4gZGlzayB0b2tlbiBzdG9yZS5cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlVG9rZW4oKTogVG9rZW5TdG9yZSB8IG51bGwge1xyXG4gICAgcmV0dXJuIGdldEVudlRva2VuKCkgPz8gcmVhZFRva2VuU3RvcmUoKTtcclxufVxyXG5cclxuLy8gXHUyNTAwXHUyNTAwXHUyNTAwIEJyb3dzZXIgb3BlbmVyIChTRUMtMDMpIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxyXG5cclxuZnVuY3Rpb24gb3BlbkJyb3dzZXIodXJsOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgY29uc3QgcGxhdGZvcm0gPSBvcy5wbGF0Zm9ybSgpO1xyXG4gICAgICAgIGlmIChwbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xyXG4gICAgICAgICAgICBleGVjU3luYyhgc3RhcnQgXCJcIiBcIiR7dXJsfVwiYCwgeyBzdGRpbzogJ2lnbm9yZScgfSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChwbGF0Zm9ybSA9PT0gJ2RhcndpbicpIHtcclxuICAgICAgICAgICAgZXhlY1N5bmMoYG9wZW4gXCIke3VybH1cImAsIHsgc3RkaW86ICdpZ25vcmUnIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGV4ZWNTeW5jKGB4ZGctb3BlbiBcIiR7dXJsfVwiYCwgeyBzdGRpbzogJ2lnbm9yZScgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSBjYXRjaCB7XHJcbiAgICAgICAgLy8gU2lsZW50bHkgZmFpbCBcdTIwMTQgdXNlciBzdGlsbCBoYXMgdGhlIFVSTCBwcmludGVkIHRvIGNvbnNvbGVcclxuICAgIH1cclxufVxyXG5cclxuLy8gXHUyNTAwXHUyNTAwXHUyNTAwIEhUVFAgaGVscGVycyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcclxuXHJcbi8qKiBHZW5lcmljIEhUVFAgUE9TVCB3aXRoIGNvbmZpZ3VyYWJsZSBDb250ZW50LVR5cGUuICovXHJcbmZ1bmN0aW9uIGh0dHBQb3N0KFxyXG4gICAgdXJsOiBzdHJpbmcsXHJcbiAgICBib2R5OiBzdHJpbmcsXHJcbiAgICBjb250ZW50VHlwZTogc3RyaW5nLFxyXG4gICAgdGltZW91dE1zID0gMTBfMDAwXHJcbik6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IG5ldyBVUkwodXJsKTtcclxuICAgICAgICBjb25zdCBsaWIgPSBwYXJzZWQucHJvdG9jb2wgPT09ICdodHRwczonID8gaHR0cHMgOiBodHRwO1xyXG4gICAgICAgIGNvbnN0IHJlcSA9IGxpYi5yZXF1ZXN0KFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBob3N0bmFtZTogcGFyc2VkLmhvc3RuYW1lLFxyXG4gICAgICAgICAgICAgICAgcG9ydDogcGFyc2VkLnBvcnQgfHwgKHBhcnNlZC5wcm90b2NvbCA9PT0gJ2h0dHBzOicgPyA0NDMgOiA4MCksXHJcbiAgICAgICAgICAgICAgICBwYXRoOiBwYXJzZWQucGF0aG5hbWUgKyBwYXJzZWQuc2VhcmNoLFxyXG4gICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXHJcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6IGNvbnRlbnRUeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgICdDb250ZW50LUxlbmd0aCc6IEJ1ZmZlci5ieXRlTGVuZ3RoKGJvZHkpLFxyXG4gICAgICAgICAgICAgICAgICAgICdVc2VyLUFnZW50JzogJzBjdHgtY2xpLzEuMCdcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB0aW1lb3V0OiB0aW1lb3V0TXNcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgcmVzID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCBkYXRhID0gJyc7XHJcbiAgICAgICAgICAgICAgICByZXMub24oJ2RhdGEnLCBjaHVuayA9PiB7IGRhdGEgKz0gY2h1bms7IH0pO1xyXG4gICAgICAgICAgICAgICAgcmVzLm9uKCdlbmQnLCAoKSA9PiByZXNvbHZlKGRhdGEpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmVxLm9uKCdlcnJvcicsIHJlamVjdCk7XHJcbiAgICAgICAgcmVxLm9uKCd0aW1lb3V0JywgKCkgPT4ge1xyXG4gICAgICAgICAgICByZXEuZGVzdHJveSgpO1xyXG4gICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdSZXF1ZXN0IHRpbWVkIG91dCcpKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXEud3JpdGUoYm9keSk7XHJcbiAgICAgICAgcmVxLmVuZCgpO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbi8qKiBQT1NUIEpTT04gdG8gb3VyIEJGRiBwcm94eSByb3V0ZXMuIEFsbCAwY3R4LmNvbSBhdXRoIEFQSSByb3V0ZXMgZXhwZWN0IEpTT04uICovXHJcbmZ1bmN0aW9uIGh0dHBKc29uUG9zdCh1cmw6IHN0cmluZywgYm9keTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIHRpbWVvdXRNcyA9IDEwXzAwMCk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICByZXR1cm4gaHR0cFBvc3QodXJsLCBKU09OLnN0cmluZ2lmeShib2R5KSwgJ2FwcGxpY2F0aW9uL2pzb24nLCB0aW1lb3V0TXMpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBzbGVlcChtczogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKSk7XHJcbn1cclxuXHJcbi8vIFx1MjUwMFx1MjUwMFx1MjUwMCBEZXZpY2UgY29kZSBmbG93IChSRkMgODYyOCkgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHJcblxyXG5hc3luYyBmdW5jdGlvbiByZXF1ZXN0RGV2aWNlQ29kZShhdXRoU2VydmVyOiBzdHJpbmcpOiBQcm9taXNlPERldmljZUNvZGVSZXNwb25zZT4ge1xyXG4gICAgbGV0IHJhdzogc3RyaW5nO1xyXG4gICAgdHJ5IHtcclxuICAgICAgICByYXcgPSBhd2FpdCBodHRwSnNvblBvc3QoYCR7YXV0aFNlcnZlcn0vYXBpL3YxL2F1dGgvZGV2aWNlYCwgeyBzY29wZTogREVGQVVMVF9TQ09QRSB9KTtcclxuICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcclxuICAgICAgICBjb25zdCBtc2cgPSBlIGluc3RhbmNlb2YgRXJyb3IgPyBlLm1lc3NhZ2UgOiBTdHJpbmcoZSk7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgY29ubmVjdCB0byBhdXRoIHNlcnZlciAoJHthdXRoU2VydmVyfSk6ICR7bXNnfWApO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UocmF3KSBhcyBCZmZEZXZpY2VDb2RlUmVzcG9uc2U7XHJcbiAgICBpZiAocGFyc2VkLmVycm9yIHx8ICFwYXJzZWQuZGV2aWNlQ29kZSB8fCAhcGFyc2VkLnVzZXJDb2RlKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBEZXZpY2UgY29kZSBlcnJvcjogJHtiZmZFcnJvck1lc3NhZ2UocGFyc2VkLmVycm9yKX0gXHUyMDE0ICR7cmF3fWApO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIE1hcCBjYW1lbENhc2UgQkZGIHJlc3BvbnNlIFx1MjE5MiBpbnRlcm5hbCBzbmFrZV9jYXNlIHNoYXBlXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIGRldmljZV9jb2RlOiBwYXJzZWQuZGV2aWNlQ29kZSxcclxuICAgICAgICB1c2VyX2NvZGU6IHBhcnNlZC51c2VyQ29kZSxcclxuICAgICAgICB2ZXJpZmljYXRpb25fdXJpOiBwYXJzZWQudmVyaWZpY2F0aW9uVXJpLFxyXG4gICAgICAgIHZlcmlmaWNhdGlvbl91cmlfY29tcGxldGU6IHBhcnNlZC52ZXJpZmljYXRpb25VcmlDb21wbGV0ZSxcclxuICAgICAgICBleHBpcmVzX2luOiBwYXJzZWQuZXhwaXJlc0luLFxyXG4gICAgICAgIGludGVydmFsOiBwYXJzZWQuaW50ZXJ2YWwsXHJcbiAgICB9O1xyXG59XHJcblxyXG5hc3luYyBmdW5jdGlvbiBwb2xsRm9yVG9rZW4oXHJcbiAgICBhdXRoU2VydmVyOiBzdHJpbmcsXHJcbiAgICBkZXZpY2VDb2RlOiBzdHJpbmcsXHJcbiAgICBpbnRlcnZhbFNlYzogbnVtYmVyLFxyXG4gICAgZXhwaXJlc1NlYzogbnVtYmVyXHJcbik6IFByb21pc2U8VG9rZW5SZXNwb25zZT4ge1xyXG4gICAgY29uc3QgZGVhZGxpbmUgPSBEYXRlLm5vdygpICsgZXhwaXJlc1NlYyAqIDEwMDA7XHJcbiAgICBjb25zdCBpbnRlcnZhbE1zID0gTWF0aC5tYXgoaW50ZXJ2YWxTZWMsIDUpICogMTAwMDtcclxuXHJcbiAgICB3aGlsZSAoRGF0ZS5ub3coKSA8IGRlYWRsaW5lKSB7XHJcbiAgICAgICAgYXdhaXQgc2xlZXAoaW50ZXJ2YWxNcyk7XHJcblxyXG4gICAgICAgIGxldCByYXc6IHN0cmluZztcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICByYXcgPSBhd2FpdCBodHRwSnNvblBvc3QoYCR7YXV0aFNlcnZlcn0vYXBpL3YxL2F1dGgvZGV2aWNlL3Rva2VuYCwgeyBkZXZpY2VDb2RlIH0pO1xyXG4gICAgICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcclxuICAgICAgICAgICAgY29uc3QgbXNnID0gZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRva2VuIHBvbGwgZmFpbGVkOiAke21zZ31gKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UocmF3KSBhcyBCZmZUb2tlblJlc3BvbnNlO1xyXG5cclxuICAgICAgICBpZiAocGFyc2VkLmFjY2Vzc1Rva2VuKSB7XHJcbiAgICAgICAgICAgIC8vIFNFQy0wNDogVmFsaWRhdGUgdG9rZW5fdHlwZSBwZXIgUkZDIDY3NDkgXHUwMEE3NS4xXHJcbiAgICAgICAgICAgIGNvbnN0IHRva2VuVHlwZSA9IHBhcnNlZC50b2tlblR5cGUgPz8gJ0JlYXJlcic7XHJcbiAgICAgICAgICAgIGlmICh0b2tlblR5cGUudG9Mb3dlckNhc2UoKSAhPT0gJ2JlYXJlcicpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCB0b2tlbl90eXBlOiAke3Rva2VuVHlwZX1gKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBNYXAgY2FtZWxDYXNlIEJGRiByZXNwb25zZSBcdTIxOTIgaW50ZXJuYWwgc25ha2VfY2FzZSBzaGFwZVxyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgYWNjZXNzX3Rva2VuOiBwYXJzZWQuYWNjZXNzVG9rZW4sXHJcbiAgICAgICAgICAgICAgICByZWZyZXNoX3Rva2VuOiBwYXJzZWQucmVmcmVzaFRva2VuID8/ICcnLFxyXG4gICAgICAgICAgICAgICAgZXhwaXJlc19pbjogcGFyc2VkLmV4cGlyZXNJbiA/PyAzNjAwLFxyXG4gICAgICAgICAgICAgICAgdG9rZW5fdHlwZTogdG9rZW5UeXBlLFxyXG4gICAgICAgICAgICAgICAgZW1haWw6IHBhcnNlZC5lbWFpbCA/PyB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICB0ZW5hbnRfaWQ6IHBhcnNlZC50ZW5hbnRJZCA/PyB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBlcnJDb2RlID0gYmZmRXJyb3JDb2RlKHBhcnNlZC5lcnJvcik7XHJcbiAgICAgICAgaWYgKGVyckNvZGUgPT09ICdhdXRob3JpemF0aW9uX3BlbmRpbmcnKSBjb250aW51ZTtcclxuICAgICAgICBpZiAoZXJyQ29kZSA9PT0gJ3Nsb3dfZG93bicpIHtcclxuICAgICAgICAgICAgYXdhaXQgc2xlZXAoNV8wMDApO1xyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGVyckNvZGUgPT09ICdleHBpcmVkX3Rva2VuJykge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0RldmljZSBjb2RlIGV4cGlyZWQuIFJ1biBgMGN0eCBhdXRoIGxvZ2luYCBhZ2Fpbi4nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGVyckNvZGUgPT09ICdhY2Nlc3NfZGVuaWVkJykge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0F1dGhvcml6YXRpb24gZGVuaWVkIGJ5IHVzZXIuJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVG9rZW4gZXJyb3I6ICR7YmZmRXJyb3JNZXNzYWdlKHBhcnNlZC5lcnJvcil9IFx1MjAxNCAke3BhcnNlZC5lcnJvckRlc2NyaXB0aW9uID8/ICcnfWApO1xyXG4gICAgfVxyXG5cclxuICAgIHRocm93IG5ldyBFcnJvcignRGV2aWNlIGNvZGUgZXhwaXJlZCAodGltZWQgb3V0KS4gUnVuIGAwY3R4IGF1dGggbG9naW5gIGFnYWluLicpO1xyXG59XHJcblxyXG4vLyBcdTI1MDBcdTI1MDBcdTI1MDAgVG9rZW4gcmVmcmVzaCBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcclxuXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWZyZXNoQWNjZXNzVG9rZW4oc3RvcmU6IFRva2VuU3RvcmUpOiBQcm9taXNlPFRva2VuU3RvcmU+IHtcclxuICAgIGNvbnN0IGF1dGhTZXJ2ZXIgPSBnZXRBdXRoU2VydmVyKCk7XHJcblxyXG4gICAgbGV0IHJhdzogc3RyaW5nO1xyXG4gICAgdHJ5IHtcclxuICAgICAgICByYXcgPSBhd2FpdCBodHRwSnNvblBvc3QoYCR7YXV0aFNlcnZlcn0vYXBpL3YxL2F1dGgvZGV2aWNlL3JlZnJlc2hgLCB7XHJcbiAgICAgICAgICAgIHJlZnJlc2hUb2tlbjogc3RvcmUucmVmcmVzaFRva2VuXHJcbiAgICAgICAgfSk7XHJcbiAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XHJcbiAgICAgICAgY29uc3QgbXNnID0gZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpO1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVG9rZW4gcmVmcmVzaCBmYWlsZWQ6ICR7bXNnfWApO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UocmF3KSBhcyBCZmZUb2tlblJlc3BvbnNlO1xyXG4gICAgaWYgKCFwYXJzZWQuYWNjZXNzVG9rZW4pIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFJlZnJlc2ggZXJyb3I6ICR7YmZmRXJyb3JNZXNzYWdlKHBhcnNlZC5lcnJvcil9IFx1MjAxNCAke3BhcnNlZC5lcnJvckRlc2NyaXB0aW9uID8/ICcnfWApO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFNFQy0wNDogVmFsaWRhdGUgdG9rZW5fdHlwZVxyXG4gICAgY29uc3QgdG9rZW5UeXBlID0gcGFyc2VkLnRva2VuVHlwZSA/PyAnQmVhcmVyJztcclxuICAgIGlmICh0b2tlblR5cGUudG9Mb3dlckNhc2UoKSAhPT0gJ2JlYXJlcicpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgdG9rZW5fdHlwZSBmcm9tIHJlZnJlc2g6ICR7dG9rZW5UeXBlfWApO1xyXG4gICAgfVxyXG4gICAgLy8gU0VDLTA0OiBXYXJuIHdoZW4gc2VydmVyIGRvZXMgbm90IHJvdGF0ZSByZWZyZXNoIHRva2VuXHJcbiAgICBpZiAoIXBhcnNlZC5yZWZyZXNoVG9rZW4pIHtcclxuICAgICAgICBjb25zb2xlLndhcm4oJ1dhcm5pbmc6IGF1dGggc2VydmVyIGRpZCBub3Qgcm90YXRlIHJlZnJlc2ggdG9rZW4gKFJGQyA5NzAwIFx1MDBBNzQuMTQgcmVjb21tZW5kcyByb3RhdGlvbiknKTtcclxuICAgIH1cclxuICAgIGNvbnN0IHVwZGF0ZWQ6IFRva2VuU3RvcmUgPSB7XHJcbiAgICAgICAgYWNjZXNzVG9rZW46IHBhcnNlZC5hY2Nlc3NUb2tlbixcclxuICAgICAgICByZWZyZXNoVG9rZW46IHBhcnNlZC5yZWZyZXNoVG9rZW4gfHwgc3RvcmUucmVmcmVzaFRva2VuLFxyXG4gICAgICAgIGV4cGlyZXNBdDogRGF0ZS5ub3coKSArIChwYXJzZWQuZXhwaXJlc0luID8/IDM2MDApICogMTAwMCxcclxuICAgICAgICBlbWFpbDogcGFyc2VkLmVtYWlsID8/IHN0b3JlLmVtYWlsLFxyXG4gICAgICAgIHRlbmFudElkOiBwYXJzZWQudGVuYW50SWQgPz8gc3RvcmUudGVuYW50SWRcclxuICAgIH07XHJcbiAgICB3cml0ZVRva2VuRmlsZSh1cGRhdGVkKTtcclxuICAgIHJldHVybiB1cGRhdGVkO1xyXG59XHJcblxyXG4vLyBcdTI1MDBcdTI1MDBcdTI1MDAgQ0xJIGNvbW1hbmRzIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNvbW1hbmRBdXRoTG9naW4oZmxhZ3M6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IGJvb2xlYW4+KTogUHJvbWlzZTxudW1iZXI+IHtcclxuICAgIC8vIFNFQy0wMTogQ2hlY2sgZm9yIGVudiB2YXIgdG9rZW4gZmlyc3RcclxuICAgIGNvbnN0IGVudlRva2VuID0gZ2V0RW52VG9rZW4oKTtcclxuICAgIGlmIChlbnZUb2tlbikge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdBbHJlYWR5IGF1dGhlbnRpY2F0ZWQgdmlhIENUWF9BVVRIX1RPS0VOIGVudmlyb25tZW50IHZhcmlhYmxlLicpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGBFbWFpbDogJHtlbnZUb2tlbi5lbWFpbH1gKTtcclxuICAgICAgICByZXR1cm4gMDtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBhdXRoU2VydmVyID0gZ2V0QXV0aFNlcnZlcigpO1xyXG4gICAgY29uc3Qgbm9Ccm93c2VyID0gQm9vbGVhbihmbGFnc1snbm8tYnJvd3NlciddKTtcclxuICAgIGNvbnNvbGUubG9nKGBDb25uZWN0aW5nIHRvIGF1dGggc2VydmVyOiAke2F1dGhTZXJ2ZXJ9YCk7XHJcblxyXG4gICAgbGV0IGRldmljZUNvZGVSZXNwOiBEZXZpY2VDb2RlUmVzcG9uc2U7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIGRldmljZUNvZGVSZXNwID0gYXdhaXQgcmVxdWVzdERldmljZUNvZGUoYXV0aFNlcnZlcik7XHJcbiAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihlIGluc3RhbmNlb2YgRXJyb3IgPyBlLm1lc3NhZ2UgOiBTdHJpbmcoZSkpO1xyXG4gICAgICAgIHJldHVybiAxO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnNvbGUubG9nKCcnKTtcclxuICAgIGNvbnNvbGUubG9nKCdPcGVuIHRoaXMgVVJMIGluIHlvdXIgYnJvd3NlciB0byBhdXRoZW50aWNhdGU6Jyk7XHJcbiAgICBjb25zb2xlLmxvZygnJyk7XHJcbiAgICBjb25zb2xlLmxvZyhgICAke2RldmljZUNvZGVSZXNwLnZlcmlmaWNhdGlvbl91cmlfY29tcGxldGUgPz8gZGV2aWNlQ29kZVJlc3AudmVyaWZpY2F0aW9uX3VyaX1gKTtcclxuICAgIGNvbnNvbGUubG9nKCcnKTtcclxuICAgIGlmICghZGV2aWNlQ29kZVJlc3AudmVyaWZpY2F0aW9uX3VyaV9jb21wbGV0ZSkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGBFbnRlciB0aGlzIGNvZGUgd2hlbiBwcm9tcHRlZDogICR7ZGV2aWNlQ29kZVJlc3AudXNlcl9jb2RlfWApO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCcnKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBTRUMtMDM6IEF1dG8tb3BlbiBicm93c2VyIHVubGVzcyAtLW5vLWJyb3dzZXJcclxuICAgIGlmICghbm9Ccm93c2VyKSB7XHJcbiAgICAgICAgY29uc3QgdXJpID0gZGV2aWNlQ29kZVJlc3AudmVyaWZpY2F0aW9uX3VyaV9jb21wbGV0ZSA/PyBkZXZpY2VDb2RlUmVzcC52ZXJpZmljYXRpb25fdXJpO1xyXG4gICAgICAgIG9wZW5Ccm93c2VyKHVyaSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc29sZS5sb2coYFdhaXRpbmcgZm9yIGF1dGhvcml6YXRpb24uLi4gKGV4cGlyZXMgaW4gJHtkZXZpY2VDb2RlUmVzcC5leHBpcmVzX2lufXMpYCk7XHJcblxyXG4gICAgbGV0IHRva2VuUmVzcDogVG9rZW5SZXNwb25zZTtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgdG9rZW5SZXNwID0gYXdhaXQgcG9sbEZvclRva2VuKFxyXG4gICAgICAgICAgICBhdXRoU2VydmVyLFxyXG4gICAgICAgICAgICBkZXZpY2VDb2RlUmVzcC5kZXZpY2VfY29kZSxcclxuICAgICAgICAgICAgZGV2aWNlQ29kZVJlc3AuaW50ZXJ2YWwsXHJcbiAgICAgICAgICAgIGRldmljZUNvZGVSZXNwLmV4cGlyZXNfaW5cclxuICAgICAgICApO1xyXG4gICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpKTtcclxuICAgICAgICByZXR1cm4gMTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzdG9yZTogVG9rZW5TdG9yZSA9IHtcclxuICAgICAgICBhY2Nlc3NUb2tlbjogdG9rZW5SZXNwLmFjY2Vzc190b2tlbixcclxuICAgICAgICByZWZyZXNoVG9rZW46IHRva2VuUmVzcC5yZWZyZXNoX3Rva2VuLFxyXG4gICAgICAgIGV4cGlyZXNBdDogRGF0ZS5ub3coKSArIHRva2VuUmVzcC5leHBpcmVzX2luICogMTAwMCxcclxuICAgICAgICBlbWFpbDogdG9rZW5SZXNwLmVtYWlsID8/ICcnLFxyXG4gICAgICAgIHRlbmFudElkOiB0b2tlblJlc3AudGVuYW50X2lkID8/ICcnXHJcbiAgICB9O1xyXG5cclxuICAgIC8vIFNFQy0wMjogU3RvcmUgdG8ga2V5cmluZyBmaXJzdCwgZmlsZSBmYWxsYmFja1xyXG4gICAgY29uc3QgaW5zZWN1cmUgPSBCb29sZWFuKGZsYWdzWydpbnNlY3VyZS1zdG9yYWdlJ10pO1xyXG4gICAgY29uc3Qgc3RvcmFnZURlc3QgPSBhd2FpdCB3cml0ZVRva2VuU3RvcmVTZWN1cmUoc3RvcmUsIGluc2VjdXJlKTtcclxuXHJcbiAgICBjb25zb2xlLmxvZygnJyk7XHJcbiAgICBjb25zb2xlLmxvZyhgTG9nZ2VkIGluIGFzOiAke3N0b3JlLmVtYWlsfWApO1xyXG4gICAgaWYgKHN0b3JlLnRlbmFudElkKSBjb25zb2xlLmxvZyhgVGVuYW50OiAgICAgICAke3N0b3JlLnRlbmFudElkfWApO1xyXG4gICAgY29uc29sZS5sb2coYFN0b3JlZCBpbjogICAgJHtzdG9yYWdlRGVzdCA9PT0gJ2tleXJpbmcnID8gJ09TIGNyZWRlbnRpYWwgc3RvcmUnIDogZ2V0VG9rZW5GaWxlUGF0aCgpfWApO1xyXG4gICAgaWYgKHN0b3JhZ2VEZXN0ID09PSAnZmlsZScgJiYgIWluc2VjdXJlKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJyAgKE9TIGtleXJpbmcgdW5hdmFpbGFibGUgXHUyMDE0IHVzaW5nIHBsYWludGV4dCBmaWxlIGZhbGxiYWNrKScpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFNZTkMtMDI6IEF1dG8tY29uZmlndXJlIHN5bmMgYWZ0ZXIgc3VjY2Vzc2Z1bCBsb2dpblxyXG4gICAgdHJ5IHtcclxuICAgICAgICBjb25zdCBzZXJ2ZXJVcmwgPSBuZXcgVVJMKGF1dGhTZXJ2ZXIpO1xyXG4gICAgICAgIHNhdmVDb25maWcoe1xyXG4gICAgICAgICAgICAnYXV0aC5zZXJ2ZXInOiBhdXRoU2VydmVyLFxyXG4gICAgICAgICAgICAnc3luYy5lbmFibGVkJzogdHJ1ZSxcclxuICAgICAgICAgICAgJ3N5bmMuZW5kcG9pbnQnOiBgJHthdXRoU2VydmVyfS9hcGkvdjEvc3luY2BcclxuICAgICAgICB9KTtcclxuICAgICAgICBjb25zb2xlLmxvZyhgU3luYzogICAgICAgICBlbmFibGVkICgke2F1dGhTZXJ2ZXJ9L2FwaS92MS9zeW5jKWApO1xyXG4gICAgfSBjYXRjaCB7XHJcbiAgICAgICAgLy8gQ29uZmlnIHdyaXRlIGZhaWx1cmUgc2hvdWxkbid0IGJsb2NrIGxvZ2luXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIDA7XHJcbn1cclxuXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjb21tYW5kQXV0aExvZ291dCgpOiBQcm9taXNlPG51bWJlcj4ge1xyXG4gICAgY29uc3QgZXhpc3RpbmcgPSByZWFkVG9rZW5TdG9yZSgpO1xyXG4gICAgLy8gU0VDLTAyOiBDbGVhciBmcm9tIGJvdGgga2V5cmluZyBhbmQgZmlsZVxyXG4gICAgYXdhaXQgY2xlYXJUb2tlblN0b3JlU2VjdXJlKCk7XHJcbiAgICBpZiAoZXhpc3RpbmcpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhgTG9nZ2VkIG91dCAod2FzOiAke2V4aXN0aW5nLmVtYWlsfSlgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ05vdCBsb2dnZWQgaW4gXHUyMDE0IG5vdGhpbmcgdG8gY2xlYXIuJyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gMDtcclxufVxyXG5cclxuLy8gXHUyNTAwXHUyNTAwXHUyNTAwIFRva2VuIHJvdGF0aW9uIChTRUMtMDAxKSBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcclxuXHJcbi8qKlxyXG4gKiBTRUMtMDAxOiBSb3RhdGUgdG9rZW4gXHUyMDE0IHJlcXVlc3QgYSBuZXcgYWNjZXNzIHRva2VuIHVzaW5nIHRoZSBleGlzdGluZ1xyXG4gKiByZWZyZXNoIHRva2VuIGFuZCByZXZva2UgdGhlIG9sZCByZWZyZXNoIHRva2VuIGlmIHRoZSBzZXJ2ZXIgc3VwcG9ydHMgaXQuXHJcbiAqL1xyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY29tbWFuZEF1dGhSb3RhdGUoZmxhZ3M6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IGJvb2xlYW4+KTogUHJvbWlzZTxudW1iZXI+IHtcclxuICAgIGNvbnN0IGVudlRva2VuID0gZ2V0RW52VG9rZW4oKTtcclxuICAgIGlmIChlbnZUb2tlbikge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Nhbm5vdCByb3RhdGUgdG9rZW46IGF1dGhlbnRpY2F0ZWQgdmlhIENUWF9BVVRIX1RPS0VOIGVudmlyb25tZW50IHZhcmlhYmxlLicpO1xyXG4gICAgICAgIHJldHVybiAxO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHsgc3RvcmUsIHNvdXJjZSB9ID0gYXdhaXQgcmVhZFRva2VuU3RvcmVTZWN1cmUoKTtcclxuICAgIGlmICghc3RvcmUpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdOb3QgbG9nZ2VkIGluLiBSdW46IDBjdHggYXV0aCBsb2dpbicpO1xyXG4gICAgICAgIHJldHVybiAxO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghc3RvcmUucmVmcmVzaFRva2VuKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignTm8gcmVmcmVzaCB0b2tlbiBhdmFpbGFibGUgXHUyMDE0IGNhbm5vdCByb3RhdGUuIFJ1bjogMGN0eCBhdXRoIGxvZ2luJyk7XHJcbiAgICAgICAgcmV0dXJuIDE7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgYXV0aFNlcnZlciA9IGdldEF1dGhTZXJ2ZXIoKTtcclxuICAgIGNvbnN0IG9sZFJlZnJlc2hUb2tlbiA9IHN0b3JlLnJlZnJlc2hUb2tlbjtcclxuXHJcbiAgICBjb25zb2xlLmxvZyhgUm90YXRpbmcgdG9rZW4gZm9yICR7c3RvcmUuZW1haWx9Li4uYCk7XHJcblxyXG4gICAgbGV0IHVwZGF0ZWQ6IFRva2VuU3RvcmU7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIHVwZGF0ZWQgPSBhd2FpdCByZWZyZXNoQWNjZXNzVG9rZW4oc3RvcmUpO1xyXG4gICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYFJvdGF0aW9uIGZhaWxlZDogJHtlIGluc3RhbmNlb2YgRXJyb3IgPyBlLm1lc3NhZ2UgOiBTdHJpbmcoZSl9YCk7XHJcbiAgICAgICAgcmV0dXJuIDE7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQXR0ZW1wdCB0byByZXZva2UgdGhlIG9sZCByZWZyZXNoIHRva2VuIChiZXN0LWVmZm9ydClcclxuICAgIGlmIChvbGRSZWZyZXNoVG9rZW4gIT09IHVwZGF0ZWQucmVmcmVzaFRva2VuKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgYXdhaXQgaHR0cEpzb25Qb3N0KGAke2F1dGhTZXJ2ZXJ9L2FwaS92MS9hdXRoL2RldmljZS9yZXZva2VgLCB7XHJcbiAgICAgICAgICAgICAgICB0b2tlbjogb2xkUmVmcmVzaFRva2VuLFxyXG4gICAgICAgICAgICAgICAgdG9rZW5UeXBlSGludDogJ3JlZnJlc2hfdG9rZW4nXHJcbiAgICAgICAgICAgIH0sIDVfMDAwKTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ09sZCByZWZyZXNoIHRva2VuIHJldm9rZWQuJyk7XHJcbiAgICAgICAgfSBjYXRjaCB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignV2FybmluZzogY291bGQgbm90IHJldm9rZSBvbGQgcmVmcmVzaCB0b2tlbiAoc2VydmVyIG1heSBub3Qgc3VwcG9ydCByZXZvY2F0aW9uKS4nKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgaW5zZWN1cmUgPSBCb29sZWFuKGZsYWdzWydpbnNlY3VyZS1zdG9yYWdlJ10pO1xyXG4gICAgY29uc3Qgc3RvcmFnZURlc3QgPSBhd2FpdCB3cml0ZVRva2VuU3RvcmVTZWN1cmUodXBkYXRlZCwgaW5zZWN1cmUpO1xyXG5cclxuICAgIGNvbnN0IGV4cGlyZXNJbiA9IHVwZGF0ZWQuZXhwaXJlc0F0IC0gRGF0ZS5ub3coKTtcclxuICAgIGNvbnN0IGV4cGlyZXNJbkh1bWFuID0gZXhwaXJlc0luID4gODY0MDBfMDAwXHJcbiAgICAgICAgPyBgJHtNYXRoLnJvdW5kKGV4cGlyZXNJbiAvIDg2NDAwXzAwMCl9ZGBcclxuICAgICAgICA6IGAke01hdGgucm91bmQoZXhwaXJlc0luIC8gMzYwMF8wMDApfWhgO1xyXG5cclxuICAgIGNvbnNvbGUubG9nKGBUb2tlbiByb3RhdGVkIHN1Y2Nlc3NmdWxseS5gKTtcclxuICAgIGNvbnNvbGUubG9nKGAgIEVtYWlsOiAgICAgJHt1cGRhdGVkLmVtYWlsfWApO1xyXG4gICAgY29uc29sZS5sb2coYCAgRXhwaXJlczogICAke25ldyBEYXRlKHVwZGF0ZWQuZXhwaXJlc0F0KS50b0lTT1N0cmluZygpfSAoJHtleHBpcmVzSW5IdW1hbn0pYCk7XHJcbiAgICBjb25zb2xlLmxvZyhgICBTdG9yZWQgaW46ICR7c3RvcmFnZURlc3QgPT09ICdrZXlyaW5nJyA/ICdPUyBjcmVkZW50aWFsIHN0b3JlJyA6IGdldFRva2VuRmlsZVBhdGgoKX1gKTtcclxuICAgIHJldHVybiAwO1xyXG59XHJcblxyXG4vKipcclxuICogU0VDLTAwMTogQ2hlY2sgaWYgdG9rZW4gaXMgY2xvc2UgdG8gZXhwaXJ5IGFuZCB3YXJuLlxyXG4gKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgbXMgcmVtYWluaW5nLCBvciBudWxsIGlmIG5vIHRva2VuIC8gZW52IHRva2VuLlxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrVG9rZW5FeHBpcnlXYXJuaW5nKCk6IHsgZXhwaXJlc0luTXM6IG51bWJlciB8IG51bGw7IHNob3VsZFdhcm46IGJvb2xlYW4gfSB7XHJcbiAgICBjb25zdCBlbnZUb2tlbiA9IGdldEVudlRva2VuKCk7XHJcbiAgICBpZiAoZW52VG9rZW4pIHJldHVybiB7IGV4cGlyZXNJbk1zOiBudWxsLCBzaG91bGRXYXJuOiBmYWxzZSB9O1xyXG5cclxuICAgIGNvbnN0IHN0b3JlID0gcmVhZFRva2VuU3RvcmUoKTtcclxuICAgIGlmICghc3RvcmUgfHwgc3RvcmUuZXhwaXJlc0F0ID49IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgZXhwaXJlc0luTXM6IG51bGwsIHNob3VsZFdhcm46IGZhbHNlIH07XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcmVtYWluaW5nID0gc3RvcmUuZXhwaXJlc0F0IC0gRGF0ZS5ub3coKTtcclxuICAgIGNvbnN0IHRvdGFsID0gc3RvcmUuZXhwaXJlc0F0IC0gKHN0b3JlLmV4cGlyZXNBdCAtIChzdG9yZS5leHBpcmVzQXQgPiAwID8gc3RvcmUuZXhwaXJlc0F0IDogMCkpO1xyXG5cclxuICAgIC8vIFdhcm4gd2hlbiB3aXRoaW4gY29uZmlndXJhYmxlIHRocmVzaG9sZCAoZGVmYXVsdCA3IGRheXMpXHJcbiAgICBjb25zdCB3YXJuRGF5cyA9IE51bWJlcihwcm9jZXNzLmVudi5DVFhfQVVUSF9UT0tFTl9ST1RBVElPTl9XQVJOX0RBWVMgPz8gJzcnKTtcclxuICAgIGNvbnN0IHdhcm5NcyA9IHdhcm5EYXlzICogODY0MDBfMDAwO1xyXG4gICAgY29uc3Qgc2hvdWxkV2FybiA9IHJlbWFpbmluZyA+IDAgJiYgcmVtYWluaW5nIDwgd2Fybk1zO1xyXG5cclxuICAgIHJldHVybiB7IGV4cGlyZXNJbk1zOiByZW1haW5pbmcgPiAwID8gcmVtYWluaW5nIDogMCwgc2hvdWxkV2FybiB9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY29tbWFuZEF1dGhTdGF0dXMoZmxhZ3M6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IGJvb2xlYW4+KTogbnVtYmVyIHtcclxuICAgIGNvbnN0IGFzSnNvbiA9IEJvb2xlYW4oZmxhZ3MuanNvbik7XHJcbiAgICAvLyBTRUMtMDE6IENoZWNrIGVudiB0b2tlbiBmaXJzdCwgdGhlbiBkaXNrXHJcbiAgICBjb25zdCBzdG9yZSA9IHJlc29sdmVUb2tlbigpO1xyXG4gICAgY29uc3QgaXNFbnYgPSBCb29sZWFuKGdldEVudlRva2VuKCkpO1xyXG5cclxuICAgIGlmICghc3RvcmUpIHtcclxuICAgICAgICBpZiAoYXNKc29uKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHsgc3RhdHVzOiAnbG9nZ2VkX291dCcsIGVtYWlsOiBudWxsLCB0ZW5hbnRJZDogbnVsbCwgZXhwaXJlc0F0OiBudWxsIH0pKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnU3RhdHVzOiAgbG9nZ2VkIG91dCcpO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnUnVuOiAgICAgMGN0eCBhdXRoIGxvZ2luJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAwO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGV4cGlyZWQgPSBpc1Rva2VuRXhwaXJlZChzdG9yZSk7XHJcbiAgICBjb25zdCBuZXZlckV4cGlyZXMgPSBzdG9yZS5leHBpcmVzQXQgPj0gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVI7XHJcbiAgICBjb25zdCBleHBpcmVzRGF0ZSA9IG5ldmVyRXhwaXJlcyA/ICduZXZlcicgOiBuZXcgRGF0ZShzdG9yZS5leHBpcmVzQXQpLnRvSVNPU3RyaW5nKCk7XHJcblxyXG4gICAgaWYgKGFzSnNvbikge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHtcclxuICAgICAgICAgICAgc3RhdHVzOiBleHBpcmVkID8gJ2V4cGlyZWQnIDogJ2xvZ2dlZF9pbicsXHJcbiAgICAgICAgICAgIHNvdXJjZTogaXNFbnYgPyAnZW52aXJvbm1lbnQnIDogJ3Rva2VuX2ZpbGUnLFxyXG4gICAgICAgICAgICBlbWFpbDogc3RvcmUuZW1haWwsXHJcbiAgICAgICAgICAgIHRlbmFudElkOiBzdG9yZS50ZW5hbnRJZCxcclxuICAgICAgICAgICAgZXhwaXJlc0F0OiBleHBpcmVzRGF0ZVxyXG4gICAgICAgIH0pKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coYFN0YXR1czogICAgJHtleHBpcmVkID8gJ3Rva2VuIGV4cGlyZWQnIDogJ2xvZ2dlZCBpbid9YCk7XHJcbiAgICAgICAgaWYgKGlzRW52KSBjb25zb2xlLmxvZygnU291cmNlOiAgICBDVFhfQVVUSF9UT0tFTiBlbnZpcm9ubWVudCB2YXJpYWJsZScpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGBFbWFpbDogICAgICR7c3RvcmUuZW1haWx9YCk7XHJcbiAgICAgICAgaWYgKHN0b3JlLnRlbmFudElkKSBjb25zb2xlLmxvZyhgVGVuYW50OiAgICAke3N0b3JlLnRlbmFudElkfWApO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGBFeHBpcmVzOiAgICR7ZXhwaXJlc0RhdGV9YCk7XHJcbiAgICAgICAgaWYgKCFpc0VudikgY29uc29sZS5sb2coYEZpbGU6ICAgICAgJHtnZXRUb2tlbkZpbGVQYXRoKCl9YCk7XHJcbiAgICAgICAgaWYgKGV4cGlyZWQgJiYgIWlzRW52KSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCcnKTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ1Rva2VuIGV4cGlyZWQuIFJ1bjogMGN0eCBhdXRoIGxvZ2luJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiAwO1xyXG59XHJcbiIsICIvKipcclxuICogU0VDLTAyOiBPUyBrZXlyaW5nIGNyZWRlbnRpYWwgc3RvcmFnZSB3cmFwcGVyLlxyXG4gKlxyXG4gKiBVc2VzIGBjcm9zcy1rZXljaGFpbmAgZm9yIHBsYXRmb3JtLW5hdGl2ZSBzZWN1cmUgY3JlZGVudGlhbCBzdG9yYWdlOlxyXG4gKiAgIC0gbWFjT1M6IEtleWNoYWluIChTZWN1cml0eS5mcmFtZXdvcmsgb3IgYHNlY3VyaXR5YCBDTEkpXHJcbiAqICAgLSBXaW5kb3dzOiBDcmVkZW50aWFsIE1hbmFnZXIgKG5hdGl2ZSBvciBQb3dlclNoZWxsKVxyXG4gKiAgIC0gTGludXg6IFNlY3JldCBTZXJ2aWNlIChsaWJzZWNyZXQgb3IgYHNlY3JldC10b29sYCBDTEkpXHJcbiAqXHJcbiAqIEFsbCBvcGVyYXRpb25zIGFyZSBhc3luYyBhbmQgZmFpbCBncmFjZWZ1bGx5IFx1MjAxNCB0aGUgY2FsbGVyIGZhbGxzIGJhY2tcclxuICogdG8gdGhlIHBsYWludGV4dCB0b2tlbiBmaWxlIGlmIGtleXJpbmcgb3BlcmF0aW9ucyBmYWlsLlxyXG4gKi9cclxuXHJcbmNvbnN0IFNFUlZJQ0UgPSAnMGN0eC1jbGknO1xyXG5jb25zdCBBQ0NPVU5UID0gJ2F1dGgtdG9rZW4nO1xyXG5cclxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxubGV0IF9tb2Q6IGFueSA9IG51bGw7XHJcblxyXG5hc3luYyBmdW5jdGlvbiBnZXRNb2R1bGUoKTogUHJvbWlzZTx7IHNldFBhc3N3b3JkOiAoc2VydmljZTogc3RyaW5nLCBhY2NvdW50OiBzdHJpbmcsIHBhc3N3b3JkOiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD47IGdldFBhc3N3b3JkOiAoc2VydmljZTogc3RyaW5nLCBhY2NvdW50OiBzdHJpbmcpID0+IFByb21pc2U8c3RyaW5nIHwgbnVsbD47IGRlbGV0ZVBhc3N3b3JkOiAoc2VydmljZTogc3RyaW5nLCBhY2NvdW50OiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD4gfT4ge1xyXG4gICAgaWYgKCFfbW9kKSB7XHJcbiAgICAgICAgX21vZCA9IGF3YWl0IGltcG9ydCgnY3Jvc3Mta2V5Y2hhaW4nKTtcclxuICAgIH1cclxuICAgIHJldHVybiBfbW9kO1xyXG59XHJcblxyXG4vKipcclxuICogU3RvcmUgYSBKU09OIHN0cmluZyBpbiB0aGUgT1Mga2V5cmluZy5cclxuICogUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MsIGZhbHNlIGlmIHRoZSBrZXlyaW5nIGlzIHVuYXZhaWxhYmxlLlxyXG4gKi9cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHN0b3JlVG9LZXlyaW5nKGpzb246IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgdHJ5IHtcclxuICAgICAgICBjb25zdCBtb2QgPSBhd2FpdCBnZXRNb2R1bGUoKTtcclxuICAgICAgICBhd2FpdCBtb2Quc2V0UGFzc3dvcmQoU0VSVklDRSwgQUNDT1VOVCwganNvbik7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9IGNhdGNoIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZWFkIHRoZSBzdG9yZWQgSlNPTiBzdHJpbmcgZnJvbSB0aGUgT1Mga2V5cmluZy5cclxuICogUmV0dXJucyBudWxsIGlmIG5vdCBmb3VuZCBvciBrZXlyaW5nIHVuYXZhaWxhYmxlLlxyXG4gKi9cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRGcm9tS2V5cmluZygpOiBQcm9taXNlPHN0cmluZyB8IG51bGw+IHtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgY29uc3QgbW9kID0gYXdhaXQgZ2V0TW9kdWxlKCk7XHJcbiAgICAgICAgY29uc3QgcGFzc3dvcmQgPSBhd2FpdCBtb2QuZ2V0UGFzc3dvcmQoU0VSVklDRSwgQUNDT1VOVCk7XHJcbiAgICAgICAgcmV0dXJuIHBhc3N3b3JkID8/IG51bGw7XHJcbiAgICB9IGNhdGNoIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIERlbGV0ZSB0aGUgc3RvcmVkIGNyZWRlbnRpYWwgZnJvbSB0aGUgT1Mga2V5cmluZy5cclxuICogU2lsZW50bHkgc3VjY2VlZHMgaWYgbm90aGluZyB3YXMgc3RvcmVkLlxyXG4gKi9cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRlbGV0ZUZyb21LZXlyaW5nKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdHJ5IHtcclxuICAgICAgICBjb25zdCBtb2QgPSBhd2FpdCBnZXRNb2R1bGUoKTtcclxuICAgICAgICBhd2FpdCBtb2QuZGVsZXRlUGFzc3dvcmQoU0VSVklDRSwgQUNDT1VOVCk7XHJcbiAgICB9IGNhdGNoIHtcclxuICAgICAgICAvLyBOb3QgZm91bmQgb3IgdW5hdmFpbGFibGUgXHUyMDE0IHRoYXQncyBmaW5lXHJcbiAgICB9XHJcbn1cclxuIiwgImltcG9ydCBmcyBmcm9tICdmcyc7XHJcbmltcG9ydCBvcyBmcm9tICdvcyc7XHJcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xyXG5pbXBvcnQgeyByYW5kb21VVUlEIH0gZnJvbSAnY3J5cHRvJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ29ubmVjdG9yQ2xvdWRTdGF0ZSB7XHJcbiAgICByZWdpc3RyYXRpb25JZDogc3RyaW5nIHwgbnVsbDtcclxuICAgIHN0cmVhbVVybDogc3RyaW5nIHwgbnVsbDtcclxuICAgIGNhcGFiaWxpdGllczogc3RyaW5nW107XHJcbiAgICBsYXN0SGVhcnRiZWF0QXQ6IG51bWJlciB8IG51bGw7XHJcbiAgICBsYXN0RXJyb3I6IHN0cmluZyB8IG51bGw7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ29ubmVjdG9yUnVudGltZVN0YXRlIHtcclxuICAgIGRhZW1vblNlc3Npb25Ub2tlbjogc3RyaW5nIHwgbnVsbDtcclxuICAgIGV2ZW50U3Vic2NyaXB0aW9uSWQ6IHN0cmluZyB8IG51bGw7XHJcbiAgICBsYXN0RXZlbnRTZXF1ZW5jZTogbnVtYmVyO1xyXG4gICAgbGFzdEV2ZW50U3luY0F0OiBudW1iZXIgfCBudWxsO1xyXG4gICAgZXZlbnRCcmlkZ2VTdXBwb3J0ZWQ6IGJvb2xlYW47XHJcbiAgICBldmVudEJyaWRnZUVycm9yOiBzdHJpbmcgfCBudWxsO1xyXG4gICAgZXZlbnRRdWV1ZVBlbmRpbmc6IG51bWJlcjtcclxuICAgIGV2ZW50UXVldWVSZWFkeTogbnVtYmVyO1xyXG4gICAgZXZlbnRRdWV1ZUJhY2tvZmY6IG51bWJlcjtcclxuICAgIGxhc3RDb21tYW5kQ3Vyc29yOiBudW1iZXI7XHJcbiAgICBsYXN0Q29tbWFuZFN5bmNBdDogbnVtYmVyIHwgbnVsbDtcclxuICAgIGNvbW1hbmRCcmlkZ2VTdXBwb3J0ZWQ6IGJvb2xlYW47XHJcbiAgICBjb21tYW5kQnJpZGdlRXJyb3I6IHN0cmluZyB8IG51bGw7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ29ubmVjdG9yU3RhdGUge1xyXG4gICAgbWFjaGluZUlkOiBzdHJpbmc7XHJcbiAgICB0ZW5hbnRJZDogc3RyaW5nIHwgbnVsbDtcclxuICAgIHVpVXJsOiBzdHJpbmc7XHJcbiAgICByZWdpc3RlcmVkQXQ6IG51bWJlcjtcclxuICAgIHVwZGF0ZWRBdDogbnVtYmVyO1xyXG4gICAgcmVnaXN0cmF0aW9uTW9kZTogJ2xvY2FsJyB8ICdjbG91ZCc7XHJcbiAgICBjbG91ZDogQ29ubmVjdG9yQ2xvdWRTdGF0ZTtcclxuICAgIHJ1bnRpbWU6IENvbm5lY3RvclJ1bnRpbWVTdGF0ZTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBSZWdpc3RlckNvbm5lY3Rvck9wdGlvbnMge1xyXG4gICAgdGVuYW50SWQ/OiBzdHJpbmcgfCBudWxsO1xyXG4gICAgdWlVcmw6IHN0cmluZztcclxuICAgIGZvcmNlPzogYm9vbGVhbjtcclxuICAgIGNsb3VkPzoge1xyXG4gICAgICAgIHJlZ2lzdHJhdGlvbklkPzogc3RyaW5nIHwgbnVsbDtcclxuICAgICAgICBzdHJlYW1Vcmw/OiBzdHJpbmcgfCBudWxsO1xyXG4gICAgICAgIGNhcGFiaWxpdGllcz86IHN0cmluZ1tdO1xyXG4gICAgfTtcclxuICAgIHJlZ2lzdHJhdGlvbk1vZGU/OiAnbG9jYWwnIHwgJ2Nsb3VkJztcclxuICAgIHJ1bnRpbWU/OiBQYXJ0aWFsPENvbm5lY3RvclJ1bnRpbWVTdGF0ZT47XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRDb25uZWN0b3JTdGF0ZVBhdGgoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBwcm9jZXNzLmVudi5DVFhfQ09OTkVDVE9SX1NUQVRFX1BBVEggfHwgcGF0aC5qb2luKG9zLmhvbWVkaXIoKSwgJy4wY3R4JywgJ2Nvbm5lY3Rvci5qc29uJyk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByZWFkQ29ubmVjdG9yU3RhdGUoKTogQ29ubmVjdG9yU3RhdGUgfCBudWxsIHtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgY29uc3QgZmlsZVBhdGggPSBnZXRDb25uZWN0b3JTdGF0ZVBhdGgoKTtcclxuICAgICAgICBpZiAoIWZzLmV4aXN0c1N5bmMoZmlsZVBhdGgpKSByZXR1cm4gbnVsbDtcclxuICAgICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhmaWxlUGF0aCwgJ3V0ZjgnKSkgYXMgUGFydGlhbDxDb25uZWN0b3JTdGF0ZT47XHJcbiAgICAgICAgaWYgKCFwYXJzZWQubWFjaGluZUlkIHx8ICFwYXJzZWQudWlVcmwgfHwgIXBhcnNlZC5yZWdpc3RlcmVkQXQpIHJldHVybiBudWxsO1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIG1hY2hpbmVJZDogcGFyc2VkLm1hY2hpbmVJZCxcclxuICAgICAgICAgICAgdGVuYW50SWQ6IHBhcnNlZC50ZW5hbnRJZCA/PyBudWxsLFxyXG4gICAgICAgICAgICB1aVVybDogcGFyc2VkLnVpVXJsLFxyXG4gICAgICAgICAgICByZWdpc3RlcmVkQXQ6IHBhcnNlZC5yZWdpc3RlcmVkQXQsXHJcbiAgICAgICAgICAgIHVwZGF0ZWRBdDogcGFyc2VkLnVwZGF0ZWRBdCA/PyBwYXJzZWQucmVnaXN0ZXJlZEF0LFxyXG4gICAgICAgICAgICByZWdpc3RyYXRpb25Nb2RlOiBwYXJzZWQucmVnaXN0cmF0aW9uTW9kZSA9PT0gJ2Nsb3VkJyA/ICdjbG91ZCcgOiAnbG9jYWwnLFxyXG4gICAgICAgICAgICBjbG91ZDoge1xyXG4gICAgICAgICAgICAgICAgcmVnaXN0cmF0aW9uSWQ6IHBhcnNlZC5jbG91ZD8ucmVnaXN0cmF0aW9uSWQgPz8gbnVsbCxcclxuICAgICAgICAgICAgICAgIHN0cmVhbVVybDogcGFyc2VkLmNsb3VkPy5zdHJlYW1VcmwgPz8gbnVsbCxcclxuICAgICAgICAgICAgICAgIGNhcGFiaWxpdGllczogQXJyYXkuaXNBcnJheShwYXJzZWQuY2xvdWQ/LmNhcGFiaWxpdGllcykgPyBwYXJzZWQuY2xvdWQuY2FwYWJpbGl0aWVzIDogW10sXHJcbiAgICAgICAgICAgICAgICBsYXN0SGVhcnRiZWF0QXQ6IHBhcnNlZC5jbG91ZD8ubGFzdEhlYXJ0YmVhdEF0ID8/IG51bGwsXHJcbiAgICAgICAgICAgICAgICBsYXN0RXJyb3I6IHBhcnNlZC5jbG91ZD8ubGFzdEVycm9yID8/IG51bGxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgcnVudGltZToge1xyXG4gICAgICAgICAgICAgICAgZGFlbW9uU2Vzc2lvblRva2VuOiBwYXJzZWQucnVudGltZT8uZGFlbW9uU2Vzc2lvblRva2VuID8/IG51bGwsXHJcbiAgICAgICAgICAgICAgICBldmVudFN1YnNjcmlwdGlvbklkOiBwYXJzZWQucnVudGltZT8uZXZlbnRTdWJzY3JpcHRpb25JZCA/PyBudWxsLFxyXG4gICAgICAgICAgICAgICAgbGFzdEV2ZW50U2VxdWVuY2U6IHR5cGVvZiBwYXJzZWQucnVudGltZT8ubGFzdEV2ZW50U2VxdWVuY2UgPT09ICdudW1iZXInID8gcGFyc2VkLnJ1bnRpbWUubGFzdEV2ZW50U2VxdWVuY2UgOiAwLFxyXG4gICAgICAgICAgICAgICAgbGFzdEV2ZW50U3luY0F0OiBwYXJzZWQucnVudGltZT8ubGFzdEV2ZW50U3luY0F0ID8/IG51bGwsXHJcbiAgICAgICAgICAgICAgICBldmVudEJyaWRnZVN1cHBvcnRlZDogcGFyc2VkLnJ1bnRpbWU/LmV2ZW50QnJpZGdlU3VwcG9ydGVkICE9PSBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGV2ZW50QnJpZGdlRXJyb3I6IHBhcnNlZC5ydW50aW1lPy5ldmVudEJyaWRnZUVycm9yID8/IG51bGwsXHJcbiAgICAgICAgICAgICAgICBldmVudFF1ZXVlUGVuZGluZzogdHlwZW9mIHBhcnNlZC5ydW50aW1lPy5ldmVudFF1ZXVlUGVuZGluZyA9PT0gJ251bWJlcicgPyBwYXJzZWQucnVudGltZS5ldmVudFF1ZXVlUGVuZGluZyA6IDAsXHJcbiAgICAgICAgICAgICAgICBldmVudFF1ZXVlUmVhZHk6IHR5cGVvZiBwYXJzZWQucnVudGltZT8uZXZlbnRRdWV1ZVJlYWR5ID09PSAnbnVtYmVyJyA/IHBhcnNlZC5ydW50aW1lLmV2ZW50UXVldWVSZWFkeSA6IDAsXHJcbiAgICAgICAgICAgICAgICBldmVudFF1ZXVlQmFja29mZjogdHlwZW9mIHBhcnNlZC5ydW50aW1lPy5ldmVudFF1ZXVlQmFja29mZiA9PT0gJ251bWJlcicgPyBwYXJzZWQucnVudGltZS5ldmVudFF1ZXVlQmFja29mZiA6IDAsXHJcbiAgICAgICAgICAgICAgICBsYXN0Q29tbWFuZEN1cnNvcjogdHlwZW9mIHBhcnNlZC5ydW50aW1lPy5sYXN0Q29tbWFuZEN1cnNvciA9PT0gJ251bWJlcicgPyBwYXJzZWQucnVudGltZS5sYXN0Q29tbWFuZEN1cnNvciA6IDAsXHJcbiAgICAgICAgICAgICAgICBsYXN0Q29tbWFuZFN5bmNBdDogcGFyc2VkLnJ1bnRpbWU/Lmxhc3RDb21tYW5kU3luY0F0ID8/IG51bGwsXHJcbiAgICAgICAgICAgICAgICBjb21tYW5kQnJpZGdlU3VwcG9ydGVkOiBwYXJzZWQucnVudGltZT8uY29tbWFuZEJyaWRnZVN1cHBvcnRlZCAhPT0gZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBjb21tYW5kQnJpZGdlRXJyb3I6IHBhcnNlZC5ydW50aW1lPy5jb21tYW5kQnJpZGdlRXJyb3IgPz8gbnVsbFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgIH0gY2F0Y2gge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVDb25uZWN0b3JTdGF0ZShzdGF0ZTogQ29ubmVjdG9yU3RhdGUpOiB2b2lkIHtcclxuICAgIGNvbnN0IGZpbGVQYXRoID0gZ2V0Q29ubmVjdG9yU3RhdGVQYXRoKCk7XHJcbiAgICBmcy5ta2RpclN5bmMocGF0aC5kaXJuYW1lKGZpbGVQYXRoKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XHJcbiAgICBmcy53cml0ZUZpbGVTeW5jKGZpbGVQYXRoLCBKU09OLnN0cmluZ2lmeShzdGF0ZSwgbnVsbCwgMiksIHsgZW5jb2Rpbmc6ICd1dGY4JywgbW9kZTogMG82MDAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlckNvbm5lY3RvcihvcHRpb25zOiBSZWdpc3RlckNvbm5lY3Rvck9wdGlvbnMpOiB7IHN0YXRlOiBDb25uZWN0b3JTdGF0ZTsgY3JlYXRlZDogYm9vbGVhbiB9IHtcclxuICAgIGNvbnN0IGV4aXN0aW5nID0gcmVhZENvbm5lY3RvclN0YXRlKCk7XHJcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xyXG5cclxuICAgIGlmIChleGlzdGluZyAmJiAhb3B0aW9ucy5mb3JjZSkge1xyXG4gICAgICAgIHJldHVybiB7IHN0YXRlOiBleGlzdGluZywgY3JlYXRlZDogZmFsc2UgfTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBiYXNlUnVudGltZTogQ29ubmVjdG9yUnVudGltZVN0YXRlID0gb3B0aW9ucy5mb3JjZVxyXG4gICAgICAgID8ge1xyXG4gICAgICAgICAgICBkYWVtb25TZXNzaW9uVG9rZW46IG51bGwsXHJcbiAgICAgICAgICAgIGV2ZW50U3Vic2NyaXB0aW9uSWQ6IG51bGwsXHJcbiAgICAgICAgICAgIGxhc3RFdmVudFNlcXVlbmNlOiBleGlzdGluZz8ucnVudGltZS5sYXN0RXZlbnRTZXF1ZW5jZSA/PyAwLFxyXG4gICAgICAgICAgICBsYXN0RXZlbnRTeW5jQXQ6IGV4aXN0aW5nPy5ydW50aW1lLmxhc3RFdmVudFN5bmNBdCA/PyBudWxsLFxyXG4gICAgICAgICAgICBldmVudEJyaWRnZVN1cHBvcnRlZDogdHJ1ZSxcclxuICAgICAgICAgICAgZXZlbnRCcmlkZ2VFcnJvcjogbnVsbCxcclxuICAgICAgICAgICAgZXZlbnRRdWV1ZVBlbmRpbmc6IGV4aXN0aW5nPy5ydW50aW1lLmV2ZW50UXVldWVQZW5kaW5nID8/IDAsXHJcbiAgICAgICAgICAgIGV2ZW50UXVldWVSZWFkeTogZXhpc3Rpbmc/LnJ1bnRpbWUuZXZlbnRRdWV1ZVJlYWR5ID8/IDAsXHJcbiAgICAgICAgICAgIGV2ZW50UXVldWVCYWNrb2ZmOiBleGlzdGluZz8ucnVudGltZS5ldmVudFF1ZXVlQmFja29mZiA/PyAwLFxyXG4gICAgICAgICAgICBsYXN0Q29tbWFuZEN1cnNvcjogZXhpc3Rpbmc/LnJ1bnRpbWUubGFzdENvbW1hbmRDdXJzb3IgPz8gMCxcclxuICAgICAgICAgICAgbGFzdENvbW1hbmRTeW5jQXQ6IGV4aXN0aW5nPy5ydW50aW1lLmxhc3RDb21tYW5kU3luY0F0ID8/IG51bGwsXHJcbiAgICAgICAgICAgIGNvbW1hbmRCcmlkZ2VTdXBwb3J0ZWQ6IHRydWUsXHJcbiAgICAgICAgICAgIGNvbW1hbmRCcmlkZ2VFcnJvcjogbnVsbFxyXG4gICAgICAgIH1cclxuICAgICAgICA6IHtcclxuICAgICAgICAgICAgZGFlbW9uU2Vzc2lvblRva2VuOiBleGlzdGluZz8ucnVudGltZS5kYWVtb25TZXNzaW9uVG9rZW4gPz8gbnVsbCxcclxuICAgICAgICAgICAgZXZlbnRTdWJzY3JpcHRpb25JZDogZXhpc3Rpbmc/LnJ1bnRpbWUuZXZlbnRTdWJzY3JpcHRpb25JZCA/PyBudWxsLFxyXG4gICAgICAgICAgICBsYXN0RXZlbnRTZXF1ZW5jZTogZXhpc3Rpbmc/LnJ1bnRpbWUubGFzdEV2ZW50U2VxdWVuY2UgPz8gMCxcclxuICAgICAgICAgICAgbGFzdEV2ZW50U3luY0F0OiBleGlzdGluZz8ucnVudGltZS5sYXN0RXZlbnRTeW5jQXQgPz8gbnVsbCxcclxuICAgICAgICAgICAgZXZlbnRCcmlkZ2VTdXBwb3J0ZWQ6IGV4aXN0aW5nPy5ydW50aW1lLmV2ZW50QnJpZGdlU3VwcG9ydGVkID8/IHRydWUsXHJcbiAgICAgICAgICAgIGV2ZW50QnJpZGdlRXJyb3I6IGV4aXN0aW5nPy5ydW50aW1lLmV2ZW50QnJpZGdlRXJyb3IgPz8gbnVsbCxcclxuICAgICAgICAgICAgZXZlbnRRdWV1ZVBlbmRpbmc6IGV4aXN0aW5nPy5ydW50aW1lLmV2ZW50UXVldWVQZW5kaW5nID8/IDAsXHJcbiAgICAgICAgICAgIGV2ZW50UXVldWVSZWFkeTogZXhpc3Rpbmc/LnJ1bnRpbWUuZXZlbnRRdWV1ZVJlYWR5ID8/IDAsXHJcbiAgICAgICAgICAgIGV2ZW50UXVldWVCYWNrb2ZmOiBleGlzdGluZz8ucnVudGltZS5ldmVudFF1ZXVlQmFja29mZiA/PyAwLFxyXG4gICAgICAgICAgICBsYXN0Q29tbWFuZEN1cnNvcjogZXhpc3Rpbmc/LnJ1bnRpbWUubGFzdENvbW1hbmRDdXJzb3IgPz8gMCxcclxuICAgICAgICAgICAgbGFzdENvbW1hbmRTeW5jQXQ6IGV4aXN0aW5nPy5ydW50aW1lLmxhc3RDb21tYW5kU3luY0F0ID8/IG51bGwsXHJcbiAgICAgICAgICAgIGNvbW1hbmRCcmlkZ2VTdXBwb3J0ZWQ6IGV4aXN0aW5nPy5ydW50aW1lLmNvbW1hbmRCcmlkZ2VTdXBwb3J0ZWQgPz8gdHJ1ZSxcclxuICAgICAgICAgICAgY29tbWFuZEJyaWRnZUVycm9yOiBleGlzdGluZz8ucnVudGltZS5jb21tYW5kQnJpZGdlRXJyb3IgPz8gbnVsbFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgY29uc3Qgc3RhdGU6IENvbm5lY3RvclN0YXRlID0ge1xyXG4gICAgICAgIG1hY2hpbmVJZDogZXhpc3Rpbmc/Lm1hY2hpbmVJZCA/PyByYW5kb21VVUlEKCksXHJcbiAgICAgICAgdGVuYW50SWQ6IG9wdGlvbnMudGVuYW50SWQgPz8gZXhpc3Rpbmc/LnRlbmFudElkID8/IG51bGwsXHJcbiAgICAgICAgdWlVcmw6IG9wdGlvbnMudWlVcmwsXHJcbiAgICAgICAgcmVnaXN0ZXJlZEF0OiBleGlzdGluZz8ucmVnaXN0ZXJlZEF0ID8/IG5vdyxcclxuICAgICAgICB1cGRhdGVkQXQ6IG5vdyxcclxuICAgICAgICByZWdpc3RyYXRpb25Nb2RlOiBvcHRpb25zLnJlZ2lzdHJhdGlvbk1vZGUgPz8gZXhpc3Rpbmc/LnJlZ2lzdHJhdGlvbk1vZGUgPz8gJ2xvY2FsJyxcclxuICAgICAgICBjbG91ZDoge1xyXG4gICAgICAgICAgICByZWdpc3RyYXRpb25JZDogb3B0aW9ucy5jbG91ZD8ucmVnaXN0cmF0aW9uSWQgPz8gZXhpc3Rpbmc/LmNsb3VkLnJlZ2lzdHJhdGlvbklkID8/IG51bGwsXHJcbiAgICAgICAgICAgIHN0cmVhbVVybDogb3B0aW9ucy5jbG91ZD8uc3RyZWFtVXJsID8/IGV4aXN0aW5nPy5jbG91ZC5zdHJlYW1VcmwgPz8gbnVsbCxcclxuICAgICAgICAgICAgY2FwYWJpbGl0aWVzOiBvcHRpb25zLmNsb3VkPy5jYXBhYmlsaXRpZXMgPz8gZXhpc3Rpbmc/LmNsb3VkLmNhcGFiaWxpdGllcyA/PyBbXSxcclxuICAgICAgICAgICAgbGFzdEhlYXJ0YmVhdEF0OiBleGlzdGluZz8uY2xvdWQubGFzdEhlYXJ0YmVhdEF0ID8/IG51bGwsXHJcbiAgICAgICAgICAgIGxhc3RFcnJvcjogZXhpc3Rpbmc/LmNsb3VkLmxhc3RFcnJvciA/PyBudWxsXHJcbiAgICAgICAgfSxcclxuICAgICAgICBydW50aW1lOiB7XHJcbiAgICAgICAgICAgIGRhZW1vblNlc3Npb25Ub2tlbjogb3B0aW9ucy5ydW50aW1lPy5kYWVtb25TZXNzaW9uVG9rZW4gPz8gYmFzZVJ1bnRpbWUuZGFlbW9uU2Vzc2lvblRva2VuLFxyXG4gICAgICAgICAgICBldmVudFN1YnNjcmlwdGlvbklkOiBvcHRpb25zLnJ1bnRpbWU/LmV2ZW50U3Vic2NyaXB0aW9uSWQgPz8gYmFzZVJ1bnRpbWUuZXZlbnRTdWJzY3JpcHRpb25JZCxcclxuICAgICAgICAgICAgbGFzdEV2ZW50U2VxdWVuY2U6IG9wdGlvbnMucnVudGltZT8ubGFzdEV2ZW50U2VxdWVuY2UgPz8gYmFzZVJ1bnRpbWUubGFzdEV2ZW50U2VxdWVuY2UsXHJcbiAgICAgICAgICAgIGxhc3RFdmVudFN5bmNBdDogb3B0aW9ucy5ydW50aW1lPy5sYXN0RXZlbnRTeW5jQXQgPz8gYmFzZVJ1bnRpbWUubGFzdEV2ZW50U3luY0F0LFxyXG4gICAgICAgICAgICBldmVudEJyaWRnZVN1cHBvcnRlZDogb3B0aW9ucy5ydW50aW1lPy5ldmVudEJyaWRnZVN1cHBvcnRlZCA/PyBiYXNlUnVudGltZS5ldmVudEJyaWRnZVN1cHBvcnRlZCxcclxuICAgICAgICAgICAgZXZlbnRCcmlkZ2VFcnJvcjogb3B0aW9ucy5ydW50aW1lPy5ldmVudEJyaWRnZUVycm9yID8/IGJhc2VSdW50aW1lLmV2ZW50QnJpZGdlRXJyb3IsXHJcbiAgICAgICAgICAgIGV2ZW50UXVldWVQZW5kaW5nOiBvcHRpb25zLnJ1bnRpbWU/LmV2ZW50UXVldWVQZW5kaW5nID8/IGJhc2VSdW50aW1lLmV2ZW50UXVldWVQZW5kaW5nLFxyXG4gICAgICAgICAgICBldmVudFF1ZXVlUmVhZHk6IG9wdGlvbnMucnVudGltZT8uZXZlbnRRdWV1ZVJlYWR5ID8/IGJhc2VSdW50aW1lLmV2ZW50UXVldWVSZWFkeSxcclxuICAgICAgICAgICAgZXZlbnRRdWV1ZUJhY2tvZmY6IG9wdGlvbnMucnVudGltZT8uZXZlbnRRdWV1ZUJhY2tvZmYgPz8gYmFzZVJ1bnRpbWUuZXZlbnRRdWV1ZUJhY2tvZmYsXHJcbiAgICAgICAgICAgIGxhc3RDb21tYW5kQ3Vyc29yOiBvcHRpb25zLnJ1bnRpbWU/Lmxhc3RDb21tYW5kQ3Vyc29yID8/IGJhc2VSdW50aW1lLmxhc3RDb21tYW5kQ3Vyc29yLFxyXG4gICAgICAgICAgICBsYXN0Q29tbWFuZFN5bmNBdDogb3B0aW9ucy5ydW50aW1lPy5sYXN0Q29tbWFuZFN5bmNBdCA/PyBiYXNlUnVudGltZS5sYXN0Q29tbWFuZFN5bmNBdCxcclxuICAgICAgICAgICAgY29tbWFuZEJyaWRnZVN1cHBvcnRlZDogb3B0aW9ucy5ydW50aW1lPy5jb21tYW5kQnJpZGdlU3VwcG9ydGVkID8/IGJhc2VSdW50aW1lLmNvbW1hbmRCcmlkZ2VTdXBwb3J0ZWQsXHJcbiAgICAgICAgICAgIGNvbW1hbmRCcmlkZ2VFcnJvcjogb3B0aW9ucy5ydW50aW1lPy5jb21tYW5kQnJpZGdlRXJyb3IgPz8gYmFzZVJ1bnRpbWUuY29tbWFuZEJyaWRnZUVycm9yXHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICB3cml0ZUNvbm5lY3RvclN0YXRlKHN0YXRlKTtcclxuICAgIHJldHVybiB7IHN0YXRlLCBjcmVhdGVkOiAhZXhpc3RpbmcgfTtcclxufVxyXG4iLCAiaW1wb3J0IGh0dHAgZnJvbSAnaHR0cCc7XHJcbmltcG9ydCBodHRwcyBmcm9tICdodHRwcyc7XHJcbmltcG9ydCB7IGdldENvbmZpZ1ZhbHVlIH0gZnJvbSAnQDBjdHgvY29yZSc7XHJcblxyXG5jb25zdCBERUZBVUxUX0NPTlRST0xfUExBTkVfQkFTRV9VUkwgPSAnaHR0cHM6Ly9hcGkuMGN0eC5jb20vdjEnO1xyXG5jb25zdCBERUZBVUxUX1RJTUVPVVRfTVMgPSAxMF8wMDA7XHJcblxyXG5pbnRlcmZhY2UgQ2xvdWRSZXF1ZXN0T3B0aW9ucyB7XHJcbiAgICBtZXRob2Q6ICdHRVQnIHwgJ1BPU1QnO1xyXG4gICAgcGF0aDogc3RyaW5nO1xyXG4gICAgdG9rZW46IHN0cmluZztcclxuICAgIGJvZHk/OiB1bmtub3duO1xyXG4gICAgcXVlcnk/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkPjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDbG91ZEFwaVJlc3VsdDxUPiB7XHJcbiAgICBvazogYm9vbGVhbjtcclxuICAgIHN0YXR1c0NvZGU6IG51bWJlcjtcclxuICAgIGRhdGE/OiBUO1xyXG4gICAgZXJyb3I/OiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUmVnaXN0ZXJDb25uZWN0b3JQYXlsb2FkIHtcclxuICAgIG1hY2hpbmVJZDogc3RyaW5nO1xyXG4gICAgdGVuYW50SWQ6IHN0cmluZyB8IG51bGw7XHJcbiAgICB1aVVybDogc3RyaW5nO1xyXG4gICAgcGxhdGZvcm06IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBSZWdpc3RlckNvbm5lY3RvckNsb3VkUmVzcG9uc2Uge1xyXG4gICAgcmVnaXN0cmF0aW9uSWQ/OiBzdHJpbmc7XHJcbiAgICBzdHJlYW1Vcmw/OiBzdHJpbmc7XHJcbiAgICBjYXBhYmlsaXRpZXM/OiBzdHJpbmdbXTtcclxuICAgIHRlbmFudElkPzogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENvbm5lY3RvckhlYXJ0YmVhdFBheWxvYWQge1xyXG4gICAgbWFjaGluZUlkOiBzdHJpbmc7XHJcbiAgICB0ZW5hbnRJZDogc3RyaW5nIHwgbnVsbDtcclxuICAgIHBvc3R1cmU6ICdjb25uZWN0ZWQnIHwgJ2RlZ3JhZGVkJyB8ICdvZmZsaW5lJztcclxuICAgIGRhZW1vblJ1bm5pbmc6IGJvb2xlYW47XHJcbiAgICBzeW5jRW5hYmxlZDogYm9vbGVhbjtcclxuICAgIHN5bmNSdW5uaW5nOiBib29sZWFuO1xyXG4gICAgcXVldWU/OiB7XHJcbiAgICAgICAgcGVuZGluZzogbnVtYmVyO1xyXG4gICAgICAgIGluRmxpZ2h0OiBudW1iZXI7XHJcbiAgICAgICAgZmFpbGVkOiBudW1iZXI7XHJcbiAgICAgICAgZG9uZTogbnVtYmVyO1xyXG4gICAgfTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDb25uZWN0b3JIZWFydGJlYXRSZXNwb25zZSB7XHJcbiAgICBhY2NlcHRlZD86IGJvb2xlYW47XHJcbiAgICBzZXJ2ZXJUaW1lPzogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENvbm5lY3RvckNhcGFiaWxpdGllc1Jlc3BvbnNlIHtcclxuICAgIGNhcGFiaWxpdGllcz86IHN0cmluZ1tdO1xyXG4gICAgZmVhdHVyZXM/OiBzdHJpbmdbXTtcclxuICAgIHBvc3R1cmU/OiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ29ubmVjdG9yRXZlbnRQYXlsb2FkIHtcclxuICAgIGV2ZW50SWQ6IHN0cmluZztcclxuICAgIHNlcXVlbmNlOiBudW1iZXI7XHJcbiAgICBjb250ZXh0SWQ6IHN0cmluZyB8IG51bGw7XHJcbiAgICB0eXBlOiBzdHJpbmc7XHJcbiAgICB0aW1lc3RhbXA6IG51bWJlcjtcclxuICAgIHNvdXJjZTogc3RyaW5nO1xyXG4gICAgcGF5bG9hZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ29ubmVjdG9yRXZlbnRzSW5nZXN0UGF5bG9hZCB7XHJcbiAgICBtYWNoaW5lSWQ6IHN0cmluZztcclxuICAgIHRlbmFudElkOiBzdHJpbmcgfCBudWxsO1xyXG4gICAgc3Vic2NyaXB0aW9uSWQ6IHN0cmluZztcclxuICAgIGN1cnNvcjogbnVtYmVyO1xyXG4gICAgZXZlbnRzOiBDb25uZWN0b3JFdmVudFBheWxvYWRbXTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDb25uZWN0b3JFdmVudHNJbmdlc3RSZXNwb25zZSB7XHJcbiAgICBhY2NlcHRlZD86IGJvb2xlYW47XHJcbiAgICBwcm9jZXNzZWQ/OiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ29ubmVjdG9yQ29tbWFuZCB7XHJcbiAgICBjb21tYW5kSWQ6IHN0cmluZztcclxuICAgIGN1cnNvcjogbnVtYmVyO1xyXG4gICAgY29udGV4dElkOiBzdHJpbmcgfCBudWxsO1xyXG4gICAgbWV0aG9kOiBzdHJpbmc7XHJcbiAgICBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xyXG4gICAgY3JlYXRlZEF0PzogbnVtYmVyO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENvbm5lY3RvckNvbW1hbmRzUmVzcG9uc2Uge1xyXG4gICAgY3Vyc29yPzogbnVtYmVyO1xyXG4gICAgY29tbWFuZHM/OiBDb25uZWN0b3JDb21tYW5kW107XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ29ubmVjdG9yQ29tbWFuZEFja1BheWxvYWQge1xyXG4gICAgbWFjaGluZUlkOiBzdHJpbmc7XHJcbiAgICB0ZW5hbnRJZDogc3RyaW5nIHwgbnVsbDtcclxuICAgIGNvbW1hbmRJZDogc3RyaW5nO1xyXG4gICAgY3Vyc29yOiBudW1iZXI7XHJcbiAgICBzdGF0dXM6ICdhcHBsaWVkJyB8ICdmYWlsZWQnO1xyXG4gICAgZXJyb3I/OiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ29ubmVjdG9yQ29tbWFuZEFja1Jlc3BvbnNlIHtcclxuICAgIGFjY2VwdGVkPzogYm9vbGVhbjtcclxufVxyXG5cclxuZnVuY3Rpb24gcGFyc2VUaW1lb3V0TXMoKTogbnVtYmVyIHtcclxuICAgIGNvbnN0IHJhdyA9IHByb2Nlc3MuZW52LkNUWF9DT05UUk9MX1BMQU5FX1RJTUVPVVRfTVM7XHJcbiAgICBpZiAoIXJhdykgcmV0dXJuIERFRkFVTFRfVElNRU9VVF9NUztcclxuICAgIGNvbnN0IHBhcnNlZCA9IE51bWJlcihyYXcpO1xyXG4gICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUocGFyc2VkKSB8fCBwYXJzZWQgPD0gMCkgcmV0dXJuIERFRkFVTFRfVElNRU9VVF9NUztcclxuICAgIHJldHVybiBwYXJzZWQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRDb250cm9sUGxhbmVCYXNlVXJsKCk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBleHBsaWNpdCA9IHByb2Nlc3MuZW52LkNUWF9DT05UUk9MX1BMQU5FX1VSTD8udHJpbSgpO1xyXG4gICAgaWYgKGV4cGxpY2l0KSByZXR1cm4gZXhwbGljaXQucmVwbGFjZSgvXFwvJC8sICcnKTtcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IHN5bmNFbmRwb2ludCA9IGdldENvbmZpZ1ZhbHVlKCdzeW5jLmVuZHBvaW50Jyk7XHJcbiAgICAgICAgY29uc3QgcGFyc2VkID0gbmV3IFVSTChzeW5jRW5kcG9pbnQpO1xyXG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRQYXRoID0gcGFyc2VkLnBhdGhuYW1lLnJlcGxhY2UoL1xcLyskLywgJycpO1xyXG4gICAgICAgIGNvbnN0IHdpdGhvdXRTeW5jID0gbm9ybWFsaXplZFBhdGguZW5kc1dpdGgoJy9zeW5jJylcclxuICAgICAgICAgICAgPyBub3JtYWxpemVkUGF0aC5zbGljZSgwLCAtKCcvc3luYycubGVuZ3RoKSlcclxuICAgICAgICAgICAgOiBub3JtYWxpemVkUGF0aDtcclxuXHJcbiAgICAgICAgcGFyc2VkLnBhdGhuYW1lID0gd2l0aG91dFN5bmMgfHwgJy92MSc7XHJcbiAgICAgICAgcGFyc2VkLnNlYXJjaCA9ICcnO1xyXG4gICAgICAgIHBhcnNlZC5oYXNoID0gJyc7XHJcblxyXG4gICAgICAgIHJldHVybiBgJHtwYXJzZWQucHJvdG9jb2x9Ly8ke3BhcnNlZC5ob3N0fSR7cGFyc2VkLnBhdGhuYW1lfWAucmVwbGFjZSgvXFwvJC8sICcnKTtcclxuICAgIH0gY2F0Y2gge1xyXG4gICAgICAgIHJldHVybiBERUZBVUxUX0NPTlRST0xfUExBTkVfQkFTRV9VUkw7XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGJ1aWxkVXJsKHBhdGg6IHN0cmluZywgcXVlcnk/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkPik6IFVSTCB7XHJcbiAgICBjb25zdCBub3JtYWxpemVkUGF0aCA9IHBhdGgucmVwbGFjZSgvXlxcLysvLCAnJyk7XHJcbiAgICBjb25zdCBiYXNlID0gYCR7Z2V0Q29udHJvbFBsYW5lQmFzZVVybCgpLnJlcGxhY2UoL1xcLyQvLCAnJyl9L2A7XHJcbiAgICBjb25zdCB1cmwgPSBuZXcgVVJMKG5vcm1hbGl6ZWRQYXRoLCBiYXNlKTtcclxuXHJcbiAgICBpZiAocXVlcnkpIHtcclxuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhxdWVyeSkpIHtcclxuICAgICAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB1cmwuc2VhcmNoUGFyYW1zLnNldChrZXksIFN0cmluZyh2YWx1ZSkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdXJsO1xyXG59XHJcblxyXG5hc3luYyBmdW5jdGlvbiByZXF1ZXN0SnNvbjxUPihvcHRpb25zOiBDbG91ZFJlcXVlc3RPcHRpb25zKTogUHJvbWlzZTxDbG91ZEFwaVJlc3VsdDxUPj4ge1xyXG4gICAgY29uc3QgdXJsID0gYnVpbGRVcmwob3B0aW9ucy5wYXRoLCBvcHRpb25zLnF1ZXJ5KTtcclxuICAgIGNvbnN0IHBheWxvYWQgPSBvcHRpb25zLmJvZHkgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IEpTT04uc3RyaW5naWZ5KG9wdGlvbnMuYm9keSk7XHJcblxyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgY29uc3QgdHJhbnNwb3J0ID0gdXJsLnByb3RvY29sID09PSAnaHR0cHM6JyA/IGh0dHBzIDogaHR0cDtcclxuICAgICAgICBjb25zdCByZXEgPSB0cmFuc3BvcnQucmVxdWVzdChcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgaG9zdG5hbWU6IHVybC5ob3N0bmFtZSxcclxuICAgICAgICAgICAgICAgIHBvcnQ6IHVybC5wb3J0IHx8ICh1cmwucHJvdG9jb2wgPT09ICdodHRwczonID8gNDQzIDogODApLFxyXG4gICAgICAgICAgICAgICAgcGF0aDogdXJsLnBhdGhuYW1lICsgdXJsLnNlYXJjaCxcclxuICAgICAgICAgICAgICAgIG1ldGhvZDogb3B0aW9ucy5tZXRob2QsXHJcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcclxuICAgICAgICAgICAgICAgICAgICBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7b3B0aW9ucy50b2tlbn1gLFxyXG4gICAgICAgICAgICAgICAgICAgIC4uLihwYXlsb2FkID8geyAnQ29udGVudC1MZW5ndGgnOiBCdWZmZXIuYnl0ZUxlbmd0aChwYXlsb2FkKSB9IDoge30pXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgdGltZW91dDogcGFyc2VUaW1lb3V0TXMoKVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAocmVzKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjaHVua3M6IEJ1ZmZlcltdID0gW107XHJcbiAgICAgICAgICAgICAgICByZXMub24oJ2RhdGEnLCAoY2h1bms6IEJ1ZmZlcikgPT4gY2h1bmtzLnB1c2goY2h1bmspKTtcclxuICAgICAgICAgICAgICAgIHJlcy5vbignZW5kJywgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXR1c0NvZGUgPSByZXMuc3RhdHVzQ29kZSA/PyAwO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRleHQgPSBCdWZmZXIuY29uY2F0KGNodW5rcykudG9TdHJpbmcoJ3V0ZjgnKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1c0NvZGUgPj0gMjAwICYmIHN0YXR1c0NvZGUgPCAzMDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0ZXh0LnRyaW0oKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh7IG9rOiB0cnVlLCBzdGF0dXNDb2RlLCBkYXRhOiB7fSBhcyBUIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHsgb2s6IHRydWUsIHN0YXR1c0NvZGUsIGRhdGE6IEpTT04ucGFyc2UodGV4dCkgYXMgVCB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHsgb2s6IHRydWUsIHN0YXR1c0NvZGUsIGRhdGE6IHt9IGFzIFQgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGVycm9yID0gYEhUVFAgJHtzdGF0dXNDb2RlfWA7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRleHQudHJpbSgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKHRleHQpIGFzIHsgZXJyb3I/OiBzdHJpbmc7IG1lc3NhZ2U/OiBzdHJpbmcgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gcGFyc2VkLmVycm9yIHx8IHBhcnNlZC5tZXNzYWdlIHx8IGVycm9yO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gYCR7ZXJyb3J9OiAke3RleHQuc2xpY2UoMCwgMjAwKX1gO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHsgb2s6IGZhbHNlLCBzdGF0dXNDb2RlLCBlcnJvciB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgcmVxLm9uKCdlcnJvcicsIChlcnIpID0+IHtcclxuICAgICAgICAgICAgcmVzb2x2ZSh7XHJcbiAgICAgICAgICAgICAgICBvazogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBzdGF0dXNDb2RlOiAwLFxyXG4gICAgICAgICAgICAgICAgZXJyb3I6IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmVxLm9uKCd0aW1lb3V0JywgKCkgPT4ge1xyXG4gICAgICAgICAgICByZXEuZGVzdHJveShuZXcgRXJyb3IoJ1JlcXVlc3QgdGltZWQgb3V0JykpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAocGF5bG9hZCkgcmVxLndyaXRlKHBheWxvYWQpO1xyXG4gICAgICAgIHJlcS5lbmQoKTtcclxuICAgIH0pO1xyXG59XHJcblxyXG5hc3luYyBmdW5jdGlvbiByZXF1ZXN0V2l0aEZhbGxiYWNrPFQ+KFxyXG4gICAgb3B0aW9uczogT21pdDxDbG91ZFJlcXVlc3RPcHRpb25zLCAncGF0aCc+LFxyXG4gICAgcGF0aHM6IHN0cmluZ1tdXHJcbik6IFByb21pc2U8Q2xvdWRBcGlSZXN1bHQ8VD4+IHtcclxuICAgIGxldCBsYXN0OiBDbG91ZEFwaVJlc3VsdDxUPiB8IG51bGwgPSBudWxsO1xyXG4gICAgZm9yIChjb25zdCBwYXRoIG9mIHBhdGhzKSB7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVxdWVzdEpzb248VD4oeyAuLi5vcHRpb25zLCBwYXRoIH0pO1xyXG4gICAgICAgIGlmIChyZXN1bHQub2spIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgbGFzdCA9IHJlc3VsdDtcclxuICAgICAgICBpZiAocmVzdWx0LnN0YXR1c0NvZGUgIT09IDQwNCkgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGxhc3QgPz8geyBvazogZmFsc2UsIHN0YXR1c0NvZGU6IDAsIGVycm9yOiAnQ2xvdWQgcmVxdWVzdCBmYWlsZWQnIH07XHJcbn1cclxuXHJcbmNvbnN0IFJFR0lTVEVSX1BBVEhTID0gWydjb25uZWN0b3JzL3JlZ2lzdGVyJywgJ2Nvbm5lY3Rvci9yZWdpc3RlciddO1xyXG5jb25zdCBIRUFSVEJFQVRfUEFUSFMgPSBbJ2Nvbm5lY3RvcnMvaGVhcnRiZWF0JywgJ2Nvbm5lY3Rvci9oZWFydGJlYXQnXTtcclxuY29uc3QgQ0FQQUJJTElUSUVTX1BBVEhTID0gWydjb25uZWN0b3JzL2NhcGFiaWxpdGllcycsICdjb25uZWN0b3IvY2FwYWJpbGl0aWVzJ107XHJcbmNvbnN0IEVWRU5UU19JTkdFU1RfUEFUSFMgPSBbJ2Nvbm5lY3RvcnMvZXZlbnRzJywgJ2Nvbm5lY3Rvci9ldmVudHMnXTtcclxuY29uc3QgQ09NTUFORFNfUEFUSFMgPSBbJ2Nvbm5lY3RvcnMvY29tbWFuZHMnLCAnY29ubmVjdG9yL2NvbW1hbmRzJ107XHJcbmNvbnN0IENPTU1BTkRfQUNLX1BBVEhTID0gWydjb25uZWN0b3JzL2NvbW1hbmRzL2FjaycsICdjb25uZWN0b3IvY29tbWFuZHMvYWNrJ107XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJDb25uZWN0b3JJbkNsb3VkKFxyXG4gICAgdG9rZW46IHN0cmluZyxcclxuICAgIHBheWxvYWQ6IFJlZ2lzdGVyQ29ubmVjdG9yUGF5bG9hZFxyXG4pOiBQcm9taXNlPENsb3VkQXBpUmVzdWx0PFJlZ2lzdGVyQ29ubmVjdG9yQ2xvdWRSZXNwb25zZT4+IHtcclxuICAgIHJldHVybiByZXF1ZXN0V2l0aEZhbGxiYWNrPFJlZ2lzdGVyQ29ubmVjdG9yQ2xvdWRSZXNwb25zZT4oXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcclxuICAgICAgICAgICAgdG9rZW4sXHJcbiAgICAgICAgICAgIGJvZHk6IHBheWxvYWRcclxuICAgICAgICB9LFxyXG4gICAgICAgIFJFR0lTVEVSX1BBVEhTXHJcbiAgICApO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc2VuZENvbm5lY3RvckhlYXJ0YmVhdChcclxuICAgIHRva2VuOiBzdHJpbmcsXHJcbiAgICBwYXlsb2FkOiBDb25uZWN0b3JIZWFydGJlYXRQYXlsb2FkXHJcbik6IFByb21pc2U8Q2xvdWRBcGlSZXN1bHQ8Q29ubmVjdG9ySGVhcnRiZWF0UmVzcG9uc2U+PiB7XHJcbiAgICByZXR1cm4gcmVxdWVzdFdpdGhGYWxsYmFjazxDb25uZWN0b3JIZWFydGJlYXRSZXNwb25zZT4oXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcclxuICAgICAgICAgICAgdG9rZW4sXHJcbiAgICAgICAgICAgIGJvZHk6IHBheWxvYWRcclxuICAgICAgICB9LFxyXG4gICAgICAgIEhFQVJUQkVBVF9QQVRIU1xyXG4gICAgKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGZldGNoQ29ubmVjdG9yQ2FwYWJpbGl0aWVzKFxyXG4gICAgdG9rZW46IHN0cmluZyxcclxuICAgIG1hY2hpbmVJZDogc3RyaW5nXHJcbik6IFByb21pc2U8Q2xvdWRBcGlSZXN1bHQ8Q29ubmVjdG9yQ2FwYWJpbGl0aWVzUmVzcG9uc2U+PiB7XHJcbiAgICByZXR1cm4gcmVxdWVzdFdpdGhGYWxsYmFjazxDb25uZWN0b3JDYXBhYmlsaXRpZXNSZXNwb25zZT4oXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBtZXRob2Q6ICdHRVQnLFxyXG4gICAgICAgICAgICB0b2tlbixcclxuICAgICAgICAgICAgcXVlcnk6IHsgbWFjaGluZUlkIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIENBUEFCSUxJVElFU19QQVRIU1xyXG4gICAgKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNlbmRDb25uZWN0b3JFdmVudHMoXHJcbiAgICB0b2tlbjogc3RyaW5nLFxyXG4gICAgcGF5bG9hZDogQ29ubmVjdG9yRXZlbnRzSW5nZXN0UGF5bG9hZFxyXG4pOiBQcm9taXNlPENsb3VkQXBpUmVzdWx0PENvbm5lY3RvckV2ZW50c0luZ2VzdFJlc3BvbnNlPj4ge1xyXG4gICAgcmV0dXJuIHJlcXVlc3RXaXRoRmFsbGJhY2s8Q29ubmVjdG9yRXZlbnRzSW5nZXN0UmVzcG9uc2U+KFxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXHJcbiAgICAgICAgICAgIHRva2VuLFxyXG4gICAgICAgICAgICBib2R5OiBwYXlsb2FkXHJcbiAgICAgICAgfSxcclxuICAgICAgICBFVkVOVFNfSU5HRVNUX1BBVEhTXHJcbiAgICApO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZmV0Y2hDb25uZWN0b3JDb21tYW5kcyhcclxuICAgIHRva2VuOiBzdHJpbmcsXHJcbiAgICBtYWNoaW5lSWQ6IHN0cmluZyxcclxuICAgIGN1cnNvciA9IDBcclxuKTogUHJvbWlzZTxDbG91ZEFwaVJlc3VsdDxDb25uZWN0b3JDb21tYW5kc1Jlc3BvbnNlPj4ge1xyXG4gICAgcmV0dXJuIHJlcXVlc3RXaXRoRmFsbGJhY2s8Q29ubmVjdG9yQ29tbWFuZHNSZXNwb25zZT4oXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBtZXRob2Q6ICdHRVQnLFxyXG4gICAgICAgICAgICB0b2tlbixcclxuICAgICAgICAgICAgcXVlcnk6IHsgbWFjaGluZUlkLCBjdXJzb3IgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgQ09NTUFORFNfUEFUSFNcclxuICAgICk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBhY2tDb25uZWN0b3JDb21tYW5kKFxyXG4gICAgdG9rZW46IHN0cmluZyxcclxuICAgIHBheWxvYWQ6IENvbm5lY3RvckNvbW1hbmRBY2tQYXlsb2FkXHJcbik6IFByb21pc2U8Q2xvdWRBcGlSZXN1bHQ8Q29ubmVjdG9yQ29tbWFuZEFja1Jlc3BvbnNlPj4ge1xyXG4gICAgcmV0dXJuIHJlcXVlc3RXaXRoRmFsbGJhY2s8Q29ubmVjdG9yQ29tbWFuZEFja1Jlc3BvbnNlPihcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxyXG4gICAgICAgICAgICB0b2tlbixcclxuICAgICAgICAgICAgYm9keTogcGF5bG9hZFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgQ09NTUFORF9BQ0tfUEFUSFNcclxuICAgICk7XHJcbn1cclxuXHJcbi8vIFNFQy0wMDE6IENvbm5lY3RvciB0cnVzdCBjaGFsbGVuZ2UgdmVyaWZpY2F0aW9uXHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFRydXN0VmVyaWZ5UGF5bG9hZCB7XHJcbiAgICBtYWNoaW5lSWQ6IHN0cmluZztcclxuICAgIGNoYWxsZW5nZVJlc3BvbnNlOiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgVHJ1c3RWZXJpZnlSZXNwb25zZSB7XHJcbiAgICBhY2NlcHRlZD86IGJvb2xlYW47XHJcbiAgICB0cnVzdExldmVsPzogc3RyaW5nO1xyXG59XHJcblxyXG5jb25zdCBUUlVTVF9WRVJJRllfUEFUSFMgPSBbJ2Nvbm5lY3RvcnMvdHJ1c3QvdmVyaWZ5JywgJ2Nvbm5lY3Rvci90cnVzdC92ZXJpZnknXTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiB2ZXJpZnlDb25uZWN0b3JUcnVzdChcclxuICAgIHRva2VuOiBzdHJpbmcsXHJcbiAgICBwYXlsb2FkOiBUcnVzdFZlcmlmeVBheWxvYWRcclxuKTogUHJvbWlzZTxDbG91ZEFwaVJlc3VsdDxUcnVzdFZlcmlmeVJlc3BvbnNlPj4ge1xyXG4gICAgcmV0dXJuIHJlcXVlc3RXaXRoRmFsbGJhY2s8VHJ1c3RWZXJpZnlSZXNwb25zZT4oXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcclxuICAgICAgICAgICAgdG9rZW4sXHJcbiAgICAgICAgICAgIGJvZHk6IHBheWxvYWRcclxuICAgICAgICB9LFxyXG4gICAgICAgIFRSVVNUX1ZFUklGWV9QQVRIU1xyXG4gICAgKTtcclxufVxyXG4iLCAiaW1wb3J0IGZzIGZyb20gJ2ZzJztcclxuaW1wb3J0IG9zIGZyb20gJ29zJztcclxuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XHJcbmltcG9ydCB7IHNwYXduIH0gZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XHJcbmltcG9ydCB7IHNlbmRUb0RhZW1vbiB9IGZyb20gJ0AwY3R4L21jcC9kaXN0L2NsaWVudCc7XHJcbmltcG9ydCB7IGdldENvbmZpZ1ZhbHVlIH0gZnJvbSAnQDBjdHgvY29yZSc7XHJcbmltcG9ydCB7IHJlc29sdmVUb2tlbiwgdHlwZSBUb2tlblN0b3JlIH0gZnJvbSAnLi9hdXRoJztcclxuaW1wb3J0IHtcclxuICAgIHR5cGUgQ29ubmVjdG9yU3RhdGUsXHJcbiAgICByZWFkQ29ubmVjdG9yU3RhdGUsXHJcbiAgICByZWdpc3RlckNvbm5lY3RvcixcclxuICAgIHdyaXRlQ29ubmVjdG9yU3RhdGVcclxufSBmcm9tICcuL2Nvbm5lY3Rvcic7XHJcbmltcG9ydCB7XHJcbiAgICBhY2tDb25uZWN0b3JDb21tYW5kLFxyXG4gICAgdHlwZSBDb25uZWN0b3JDb21tYW5kLFxyXG4gICAgdHlwZSBDb25uZWN0b3JFdmVudFBheWxvYWQsXHJcbiAgICBmZXRjaENvbm5lY3RvckNvbW1hbmRzLFxyXG4gICAgZmV0Y2hDb25uZWN0b3JDYXBhYmlsaXRpZXMsXHJcbiAgICByZWdpc3RlckNvbm5lY3RvckluQ2xvdWQsXHJcbiAgICBzZW5kQ29ubmVjdG9ySGVhcnRiZWF0LFxyXG4gICAgc2VuZENvbm5lY3RvckV2ZW50c1xyXG59IGZyb20gJy4vY2xvdWQnO1xyXG5pbXBvcnQge1xyXG4gICAgZW5xdWV1ZUNvbm5lY3RvckV2ZW50cyxcclxuICAgIGdldENvbm5lY3RvclF1ZXVlU3RhdHMsXHJcbiAgICBwcnVuZUNvbm5lY3RvclF1ZXVlLFxyXG4gICAgZ2V0UmVhZHlDb25uZWN0b3JFdmVudHMsXHJcbiAgICBtYXJrQ29ubmVjdG9yRXZlbnRzRGVsaXZlcmVkLFxyXG4gICAgbWFya0Nvbm5lY3RvckV2ZW50c0ZhaWxlZFxyXG59IGZyb20gJy4vY29ubmVjdG9yLXF1ZXVlJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ29ubmVjdG9yUnVudGltZVN5bmNTdGF0dXMge1xyXG4gICAgZW5hYmxlZDogYm9vbGVhbjtcclxuICAgIHJ1bm5pbmc6IGJvb2xlYW47XHJcbiAgICBsYXN0RXJyb3I6IHN0cmluZyB8IG51bGw7XHJcbiAgICBxdWV1ZT86IHtcclxuICAgICAgICBwZW5kaW5nOiBudW1iZXI7XHJcbiAgICAgICAgaW5GbGlnaHQ6IG51bWJlcjtcclxuICAgICAgICBmYWlsZWQ6IG51bWJlcjtcclxuICAgICAgICBkb25lOiBudW1iZXI7XHJcbiAgICB9O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENvbm5lY3RvclJ1bnRpbWVPcHRpb25zIHtcclxuICAgIGludGVydmFsTXM/OiBudW1iZXI7XHJcbiAgICBvbmNlPzogYm9vbGVhbjtcclxuICAgIGF1dG9TdGFydERhZW1vbj86IGJvb2xlYW47XHJcbiAgICBxdWlldD86IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ29ubmVjdG9yUnVudGltZVN1bW1hcnkge1xyXG4gICAgcG9zdHVyZTogJ2Nvbm5lY3RlZCcgfCAnZGVncmFkZWQnIHwgJ29mZmxpbmUnO1xyXG4gICAgZGFlbW9uUnVubmluZzogYm9vbGVhbjtcclxuICAgIGNsb3VkQ29ubmVjdGVkOiBib29sZWFuO1xyXG4gICAgcmVnaXN0cmF0aW9uTW9kZTogJ25vbmUnIHwgJ2xvY2FsJyB8ICdjbG91ZCc7XHJcbiAgICBhdXRoOiBib29sZWFuO1xyXG4gICAgbWFjaGluZUlkOiBzdHJpbmcgfCBudWxsO1xyXG4gICAgbGFzdEVycm9yOiBzdHJpbmcgfCBudWxsO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENvbm5lY3RvclJ1bnRpbWVEZXBlbmRlbmNpZXMge1xyXG4gICAgbm93KCk6IG51bWJlcjtcclxuICAgIGxvZyhtZXNzYWdlOiBzdHJpbmcpOiB2b2lkO1xyXG4gICAgd2FybihtZXNzYWdlOiBzdHJpbmcpOiB2b2lkO1xyXG4gICAgZXJyb3IobWVzc2FnZTogc3RyaW5nKTogdm9pZDtcclxuICAgIGlzRGFlbW9uUmVhY2hhYmxlKCk6IFByb21pc2U8eyBvazogYm9vbGVhbjsgZXJyb3I/OiBzdHJpbmcgfT47XHJcbiAgICBzdGFydERhZW1vbkRldGFjaGVkKCk6IHZvaWQ7XHJcbiAgICB3YWl0Rm9yRGFlbW9uKHRpbWVvdXRNcz86IG51bWJlcik6IFByb21pc2U8Ym9vbGVhbj47XHJcbiAgICBnZXRTeW5jU3RhdHVzKCk6IFByb21pc2U8Q29ubmVjdG9yUnVudGltZVN5bmNTdGF0dXMgfCBudWxsPjtcclxuICAgIHJlc29sdmVUb2tlbigpOiBUb2tlblN0b3JlIHwgbnVsbDtcclxuICAgIHJlYWRDb25uZWN0b3JTdGF0ZSgpOiBDb25uZWN0b3JTdGF0ZSB8IG51bGw7XHJcbiAgICByZWdpc3RlckNvbm5lY3RvcihvcHRpb25zOiB7XHJcbiAgICAgICAgdGVuYW50SWQ/OiBzdHJpbmcgfCBudWxsO1xyXG4gICAgICAgIHVpVXJsOiBzdHJpbmc7XHJcbiAgICAgICAgZm9yY2U/OiBib29sZWFuO1xyXG4gICAgICAgIHJlZ2lzdHJhdGlvbk1vZGU/OiAnbG9jYWwnIHwgJ2Nsb3VkJztcclxuICAgICAgICBjbG91ZD86IHtcclxuICAgICAgICAgICAgcmVnaXN0cmF0aW9uSWQ/OiBzdHJpbmcgfCBudWxsO1xyXG4gICAgICAgICAgICBzdHJlYW1Vcmw/OiBzdHJpbmcgfCBudWxsO1xyXG4gICAgICAgICAgICBjYXBhYmlsaXRpZXM/OiBzdHJpbmdbXTtcclxuICAgICAgICB9O1xyXG4gICAgfSk6IHsgc3RhdGU6IENvbm5lY3RvclN0YXRlOyBjcmVhdGVkOiBib29sZWFuIH07XHJcbiAgICB3cml0ZUNvbm5lY3RvclN0YXRlKHN0YXRlOiBDb25uZWN0b3JTdGF0ZSk6IHZvaWQ7XHJcbiAgICBnZXREYXNoYm9hcmRVcmwoKTogc3RyaW5nO1xyXG4gICAgcmVnaXN0ZXJDb25uZWN0b3JJbkNsb3VkKFxyXG4gICAgICAgIHRva2VuOiBzdHJpbmcsXHJcbiAgICAgICAgcGF5bG9hZDoge1xyXG4gICAgICAgICAgICBtYWNoaW5lSWQ6IHN0cmluZztcclxuICAgICAgICAgICAgdGVuYW50SWQ6IHN0cmluZyB8IG51bGw7XHJcbiAgICAgICAgICAgIHVpVXJsOiBzdHJpbmc7XHJcbiAgICAgICAgICAgIHBsYXRmb3JtOiBzdHJpbmc7XHJcbiAgICAgICAgfVxyXG4gICAgKTogUHJvbWlzZTx7XHJcbiAgICAgICAgb2s6IGJvb2xlYW47XHJcbiAgICAgICAgZXJyb3I/OiBzdHJpbmc7XHJcbiAgICAgICAgZGF0YT86IHsgcmVnaXN0cmF0aW9uSWQ/OiBzdHJpbmc7IHN0cmVhbVVybD86IHN0cmluZzsgY2FwYWJpbGl0aWVzPzogc3RyaW5nW107IHRlbmFudElkPzogc3RyaW5nIH07XHJcbiAgICB9PjtcclxuICAgIGZldGNoQ29ubmVjdG9yQ2FwYWJpbGl0aWVzKFxyXG4gICAgICAgIHRva2VuOiBzdHJpbmcsXHJcbiAgICAgICAgbWFjaGluZUlkOiBzdHJpbmdcclxuICAgICk6IFByb21pc2U8eyBvazogYm9vbGVhbjsgZXJyb3I/OiBzdHJpbmc7IGRhdGE/OiB7IGNhcGFiaWxpdGllcz86IHN0cmluZ1tdOyBmZWF0dXJlcz86IHN0cmluZ1tdIH0gfT47XHJcbiAgICBzZW5kQ29ubmVjdG9ySGVhcnRiZWF0KFxyXG4gICAgICAgIHRva2VuOiBzdHJpbmcsXHJcbiAgICAgICAgcGF5bG9hZDoge1xyXG4gICAgICAgICAgICBtYWNoaW5lSWQ6IHN0cmluZztcclxuICAgICAgICAgICAgdGVuYW50SWQ6IHN0cmluZyB8IG51bGw7XHJcbiAgICAgICAgICAgIHBvc3R1cmU6ICdjb25uZWN0ZWQnIHwgJ2RlZ3JhZGVkJyB8ICdvZmZsaW5lJztcclxuICAgICAgICAgICAgZGFlbW9uUnVubmluZzogYm9vbGVhbjtcclxuICAgICAgICAgICAgc3luY0VuYWJsZWQ6IGJvb2xlYW47XHJcbiAgICAgICAgICAgIHN5bmNSdW5uaW5nOiBib29sZWFuO1xyXG4gICAgICAgICAgICBxdWV1ZT86IHsgcGVuZGluZzogbnVtYmVyOyBpbkZsaWdodDogbnVtYmVyOyBmYWlsZWQ6IG51bWJlcjsgZG9uZTogbnVtYmVyIH07XHJcbiAgICAgICAgfVxyXG4gICAgKTogUHJvbWlzZTx7IG9rOiBib29sZWFuOyBlcnJvcj86IHN0cmluZyB9PjtcclxuICAgIGNyZWF0ZURhZW1vblNlc3Npb24oKTogUHJvbWlzZTx7IHNlc3Npb25Ub2tlbjogc3RyaW5nIH0+O1xyXG4gICAgc3Vic2NyaWJlRXZlbnRzKFxyXG4gICAgICAgIHNlc3Npb25Ub2tlbjogc3RyaW5nLFxyXG4gICAgICAgIGFmdGVyU2VxdWVuY2U/OiBudW1iZXJcclxuICAgICk6IFByb21pc2U8eyBzdWJzY3JpcHRpb25JZDogc3RyaW5nOyBsYXN0QWNrZWRTZXF1ZW5jZT86IG51bWJlciB9PjtcclxuICAgIHBvbGxFdmVudHMoXHJcbiAgICAgICAgc2Vzc2lvblRva2VuOiBzdHJpbmcsXHJcbiAgICAgICAgc3Vic2NyaXB0aW9uSWQ6IHN0cmluZyxcclxuICAgICAgICBhZnRlclNlcXVlbmNlOiBudW1iZXIsXHJcbiAgICAgICAgbGltaXQ/OiBudW1iZXJcclxuICAgICk6IFByb21pc2U8eyBjdXJzb3I6IG51bWJlcjsgZXZlbnRzOiBDb25uZWN0b3JFdmVudFBheWxvYWRbXTsgaGFzTW9yZT86IGJvb2xlYW4gfT47XHJcbiAgICBhY2tFdmVudHMoXHJcbiAgICAgICAgc2Vzc2lvblRva2VuOiBzdHJpbmcsXHJcbiAgICAgICAgc3Vic2NyaXB0aW9uSWQ6IHN0cmluZyxcclxuICAgICAgICBzZXF1ZW5jZTogbnVtYmVyXHJcbiAgICApOiBQcm9taXNlPHsgbGFzdEFja2VkU2VxdWVuY2U/OiBudW1iZXIgfT47XHJcbiAgICBzZW5kQ29ubmVjdG9yRXZlbnRzKFxyXG4gICAgICAgIHRva2VuOiBzdHJpbmcsXHJcbiAgICAgICAgcGF5bG9hZDoge1xyXG4gICAgICAgICAgICBtYWNoaW5lSWQ6IHN0cmluZztcclxuICAgICAgICAgICAgdGVuYW50SWQ6IHN0cmluZyB8IG51bGw7XHJcbiAgICAgICAgICAgIHN1YnNjcmlwdGlvbklkOiBzdHJpbmc7XHJcbiAgICAgICAgICAgIGN1cnNvcjogbnVtYmVyO1xyXG4gICAgICAgICAgICBldmVudHM6IENvbm5lY3RvckV2ZW50UGF5bG9hZFtdO1xyXG4gICAgICAgIH1cclxuICAgICk6IFByb21pc2U8eyBvazogYm9vbGVhbjsgZXJyb3I/OiBzdHJpbmc7IHN0YXR1c0NvZGU6IG51bWJlciB9PjtcclxuICAgIGZldGNoQ29ubmVjdG9yQ29tbWFuZHMoXHJcbiAgICAgICAgdG9rZW46IHN0cmluZyxcclxuICAgICAgICBtYWNoaW5lSWQ6IHN0cmluZyxcclxuICAgICAgICBjdXJzb3I6IG51bWJlclxyXG4gICAgKTogUHJvbWlzZTx7IG9rOiBib29sZWFuOyBlcnJvcj86IHN0cmluZzsgc3RhdHVzQ29kZTogbnVtYmVyOyBkYXRhPzogeyBjdXJzb3I/OiBudW1iZXI7IGNvbW1hbmRzPzogQ29ubmVjdG9yQ29tbWFuZFtdIH0gfT47XHJcbiAgICBhY2tDb25uZWN0b3JDb21tYW5kKFxyXG4gICAgICAgIHRva2VuOiBzdHJpbmcsXHJcbiAgICAgICAgcGF5bG9hZDoge1xyXG4gICAgICAgICAgICBtYWNoaW5lSWQ6IHN0cmluZztcclxuICAgICAgICAgICAgdGVuYW50SWQ6IHN0cmluZyB8IG51bGw7XHJcbiAgICAgICAgICAgIGNvbW1hbmRJZDogc3RyaW5nO1xyXG4gICAgICAgICAgICBjdXJzb3I6IG51bWJlcjtcclxuICAgICAgICAgICAgc3RhdHVzOiAnYXBwbGllZCcgfCAnZmFpbGVkJztcclxuICAgICAgICAgICAgZXJyb3I/OiBzdHJpbmc7XHJcbiAgICAgICAgfVxyXG4gICAgKTogUHJvbWlzZTx7IG9rOiBib29sZWFuOyBlcnJvcj86IHN0cmluZzsgc3RhdHVzQ29kZTogbnVtYmVyIH0+O1xyXG4gICAgYXBwbHlEYWVtb25Db21tYW5kKFxyXG4gICAgICAgIHNlc3Npb25Ub2tlbjogc3RyaW5nLFxyXG4gICAgICAgIG1ldGhvZDogc3RyaW5nLFxyXG4gICAgICAgIHBhcmFtczogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cclxuICAgICk6IFByb21pc2U8dW5rbm93bj47XHJcbiAgICBnZXRDb250ZXh0U3luY1BvbGljeShcclxuICAgICAgICBzZXNzaW9uVG9rZW46IHN0cmluZyxcclxuICAgICAgICBjb250ZXh0SWQ6IHN0cmluZ1xyXG4gICAgKTogUHJvbWlzZTwnbG9jYWxfb25seScgfCAnbWV0YWRhdGFfb25seScgfCAnZnVsbF9zeW5jJyB8IG51bGw+O1xyXG4gICAgZW5xdWV1ZUV2ZW50cyhcclxuICAgICAgICBzdWJzY3JpcHRpb25JZDogc3RyaW5nLFxyXG4gICAgICAgIGV2ZW50czogQ29ubmVjdG9yRXZlbnRQYXlsb2FkW10sXHJcbiAgICAgICAgbm93OiBudW1iZXJcclxuICAgICk6IHsgZW5xdWV1ZWQ6IG51bWJlcjsgbGFzdFNlcXVlbmNlOiBudW1iZXIgfCBudWxsIH07XHJcbiAgICBnZXRSZWFkeUV2ZW50cyhsaW1pdDogbnVtYmVyLCBub3c6IG51bWJlcik6IEFycmF5PHtcclxuICAgICAgICBxdWV1ZUlkOiBzdHJpbmc7XHJcbiAgICAgICAgZXZlbnRJZDogc3RyaW5nO1xyXG4gICAgICAgIHN1YnNjcmlwdGlvbklkOiBzdHJpbmc7XHJcbiAgICAgICAgc2VxdWVuY2U6IG51bWJlcjtcclxuICAgICAgICBjb250ZXh0SWQ6IHN0cmluZyB8IG51bGw7XHJcbiAgICAgICAgdHlwZTogc3RyaW5nO1xyXG4gICAgICAgIHRpbWVzdGFtcDogbnVtYmVyO1xyXG4gICAgICAgIHNvdXJjZTogc3RyaW5nO1xyXG4gICAgICAgIHBheWxvYWQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xyXG4gICAgfT47XHJcbiAgICBtYXJrRXZlbnRzRGVsaXZlcmVkKHF1ZXVlSWRzOiBzdHJpbmdbXSk6IHZvaWQ7XHJcbiAgICBtYXJrRXZlbnRzRmFpbGVkKHF1ZXVlSWRzOiBzdHJpbmdbXSwgZXJyb3I6IHN0cmluZywgbm93OiBudW1iZXIpOiB2b2lkO1xyXG4gICAgZ2V0UXVldWVTdGF0cyhub3c6IG51bWJlcik6IHtcclxuICAgICAgICBwZW5kaW5nOiBudW1iZXI7XHJcbiAgICAgICAgcmVhZHk6IG51bWJlcjtcclxuICAgICAgICBiYWNrb2ZmOiBudW1iZXI7XHJcbiAgICAgICAgbWF4QXR0ZW1wdHM6IG51bWJlcjtcclxuICAgICAgICBvbGRlc3RFbnF1ZXVlZEF0OiBudW1iZXIgfCBudWxsO1xyXG4gICAgfTtcclxuICAgIHBydW5lUXVldWUobm93OiBudW1iZXIpOiB7IHJlbW92ZWQ6IG51bWJlcjsgcmVtYWluaW5nOiBudW1iZXIgfTtcclxufVxyXG5cclxuY29uc3QgREVGQVVMVF9JTlRFUlZBTF9NUyA9IDMwXzAwMDtcclxuY29uc3QgTUlOX0lOVEVSVkFMX01TID0gNV8wMDA7XHJcbmNvbnN0IENMT1VEX0NPTU1BTkRfTUVUSE9EX0FMTE9XTElTVCA9IG5ldyBTZXQoW1xyXG4gICAgJ2FkZE5vZGUnLFxyXG4gICAgJ3VwZGF0ZU5vZGUnLFxyXG4gICAgJ2RlbGV0ZU5vZGUnLFxyXG4gICAgJ2FkZEVkZ2UnLFxyXG4gICAgJ3NhdmVDaGVja3BvaW50JyxcclxuICAgICdyZXNvbHZlR2F0ZScsXHJcbiAgICAnc2V0U3luY1BvbGljeSdcclxuXSk7XHJcblxyXG5mdW5jdGlvbiByZXNvbHZlRGFlbW9uRW50cnlwb2ludCgpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgY2FuZGlkYXRlcyA9IFtcclxuICAgICAgICBwYXRoLnJlc29sdmUocHJvY2Vzcy5jd2QoKSwgJ3BhY2thZ2VzJywgJ2RhZW1vbicsICdkaXN0JywgJ2luZGV4LmpzJyksXHJcbiAgICAgICAgcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgJy4uJywgJy4uJywgJ2RhZW1vbicsICdkaXN0JywgJ2luZGV4LmpzJyksXHJcbiAgICAgICAgKCgpID0+IHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXF1aXJlLnJlc29sdmUoJ0AwY3R4L2RhZW1vbi9kaXN0L2luZGV4LmpzJyk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2gge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSkoKVxyXG4gICAgXS5maWx0ZXIoQm9vbGVhbik7XHJcblxyXG4gICAgZm9yIChjb25zdCBjYW5kaWRhdGUgb2YgY2FuZGlkYXRlcykge1xyXG4gICAgICAgIGlmIChmcy5leGlzdHNTeW5jKGNhbmRpZGF0ZSkpIHJldHVybiBjYW5kaWRhdGU7XHJcbiAgICB9XHJcblxyXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgcmVzb2x2ZSBkYWVtb24gZW50cnlwb2ludC4gUnVuIGBucG0gcnVuIGJ1aWxkYCBmaXJzdC4nKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEhvc3RlZERhc2hib2FyZFVybCgpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgY29uZmlndXJlZCA9IGdldENvbmZpZ1ZhbHVlKCd1aS51cmwnKTtcclxuICAgIGlmICh0eXBlb2YgY29uZmlndXJlZCA9PT0gJ3N0cmluZycgJiYgY29uZmlndXJlZC50cmltKCkubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHJldHVybiBjb25maWd1cmVkLnRyaW0oKTtcclxuICAgIH1cclxuICAgIHJldHVybiAnaHR0cHM6Ly9hcHAuMGN0eC5jb20nO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc3RhcnREYWVtb25EZXRhY2hlZCgpOiB2b2lkIHtcclxuICAgIGNvbnN0IGVudHJ5ID0gcmVzb2x2ZURhZW1vbkVudHJ5cG9pbnQoKTtcclxuICAgIGNvbnN0IGNoaWxkID0gc3Bhd24ocHJvY2Vzcy5leGVjUGF0aCwgW2VudHJ5XSwge1xyXG4gICAgICAgIGRldGFjaGVkOiB0cnVlLFxyXG4gICAgICAgIHN0ZGlvOiAnaWdub3JlJ1xyXG4gICAgfSk7XHJcbiAgICBjaGlsZC51bnJlZigpO1xyXG59XHJcblxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaXNEYWVtb25SZWFjaGFibGUoKTogUHJvbWlzZTx7IG9rOiBib29sZWFuOyBlcnJvcj86IHN0cmluZyB9PiB7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIGF3YWl0IHNlbmRUb0RhZW1vbignaGVhbHRoJywge30pO1xyXG4gICAgICAgIHJldHVybiB7IG9rOiB0cnVlIH07XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIG9rOiBmYWxzZSxcclxuICAgICAgICAgICAgZXJyb3I6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3YWl0Rm9yRGFlbW9uKHRpbWVvdXRNcyA9IDEwXzAwMCk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xyXG4gICAgd2hpbGUgKERhdGUubm93KCkgLSBzdGFydCA8IHRpbWVvdXRNcykge1xyXG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IGF3YWl0IGlzRGFlbW9uUmVhY2hhYmxlKCk7XHJcbiAgICAgICAgaWYgKHN0YXR1cy5vaykgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgYXdhaXQgc2xlZXAoMzAwKTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxufVxyXG5cclxuYXN5bmMgZnVuY3Rpb24gZ2V0U3luY1N0YXR1cygpOiBQcm9taXNlPENvbm5lY3RvclJ1bnRpbWVTeW5jU3RhdHVzIHwgbnVsbD4ge1xyXG4gICAgdHJ5IHtcclxuICAgICAgICBjb25zdCBzeW5jID0gYXdhaXQgc2VuZFRvRGFlbW9uKCdzeW5jU3RhdHVzJywge30pIGFzIENvbm5lY3RvclJ1bnRpbWVTeW5jU3RhdHVzO1xyXG4gICAgICAgIHJldHVybiBzeW5jO1xyXG4gICAgfSBjYXRjaCB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbn1cclxuXHJcbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZURhZW1vblNlc3Npb24oKTogUHJvbWlzZTx7IHNlc3Npb25Ub2tlbjogc3RyaW5nIH0+IHtcclxuICAgIGNvbnN0IHNlc3Npb24gPSBhd2FpdCBzZW5kVG9EYWVtb24oJ2NyZWF0ZVNlc3Npb24nLCB7fSkgYXMgeyBzZXNzaW9uVG9rZW4/OiBzdHJpbmcgfTtcclxuICAgIGlmICghc2Vzc2lvbj8uc2Vzc2lvblRva2VuKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjcmVhdGVTZXNzaW9uIHJldHVybmVkIG5vIHNlc3Npb25Ub2tlbicpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHsgc2Vzc2lvblRva2VuOiBzZXNzaW9uLnNlc3Npb25Ub2tlbiB9O1xyXG59XHJcblxyXG5hc3luYyBmdW5jdGlvbiBzdWJzY3JpYmVFdmVudHMoXHJcbiAgICBzZXNzaW9uVG9rZW46IHN0cmluZyxcclxuICAgIGFmdGVyU2VxdWVuY2UgPSAwXHJcbik6IFByb21pc2U8eyBzdWJzY3JpcHRpb25JZDogc3RyaW5nOyBsYXN0QWNrZWRTZXF1ZW5jZT86IG51bWJlciB9PiB7XHJcbiAgICBjb25zdCBzdWJzY3JpcHRpb24gPSBhd2FpdCBzZW5kVG9EYWVtb24oXHJcbiAgICAgICAgJ3N1YnNjcmliZUV2ZW50cycsXHJcbiAgICAgICAgeyBhZnRlclNlcXVlbmNlIH0sXHJcbiAgICAgICAgeyBzZXNzaW9uVG9rZW4gfVxyXG4gICAgKSBhcyB7IHN1YnNjcmlwdGlvbklkPzogc3RyaW5nOyBsYXN0QWNrZWRTZXF1ZW5jZT86IG51bWJlciB9O1xyXG4gICAgaWYgKCFzdWJzY3JpcHRpb24/LnN1YnNjcmlwdGlvbklkKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzdWJzY3JpYmVFdmVudHMgcmV0dXJuZWQgbm8gc3Vic2NyaXB0aW9uSWQnKTtcclxuICAgIH1cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgc3Vic2NyaXB0aW9uSWQ6IHN1YnNjcmlwdGlvbi5zdWJzY3JpcHRpb25JZCxcclxuICAgICAgICBsYXN0QWNrZWRTZXF1ZW5jZTogc3Vic2NyaXB0aW9uLmxhc3RBY2tlZFNlcXVlbmNlXHJcbiAgICB9O1xyXG59XHJcblxyXG5hc3luYyBmdW5jdGlvbiBwb2xsRXZlbnRzKFxyXG4gICAgc2Vzc2lvblRva2VuOiBzdHJpbmcsXHJcbiAgICBzdWJzY3JpcHRpb25JZDogc3RyaW5nLFxyXG4gICAgYWZ0ZXJTZXF1ZW5jZTogbnVtYmVyLFxyXG4gICAgbGltaXQgPSAyMDBcclxuKTogUHJvbWlzZTx7IGN1cnNvcjogbnVtYmVyOyBldmVudHM6IENvbm5lY3RvckV2ZW50UGF5bG9hZFtdOyBoYXNNb3JlPzogYm9vbGVhbiB9PiB7XHJcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzZW5kVG9EYWVtb24oXHJcbiAgICAgICAgJ3BvbGxFdmVudHMnLFxyXG4gICAgICAgIHsgc3Vic2NyaXB0aW9uSWQsIGFmdGVyU2VxdWVuY2UsIGxpbWl0IH0sXHJcbiAgICAgICAgeyBzZXNzaW9uVG9rZW4gfVxyXG4gICAgKSBhcyB7IGN1cnNvcj86IG51bWJlcjsgZXZlbnRzPzogQ29ubmVjdG9yRXZlbnRQYXlsb2FkW107IGhhc01vcmU/OiBib29sZWFuIH07XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIGN1cnNvcjogdHlwZW9mIHJlc3VsdD8uY3Vyc29yID09PSAnbnVtYmVyJyA/IHJlc3VsdC5jdXJzb3IgOiBhZnRlclNlcXVlbmNlLFxyXG4gICAgICAgIGV2ZW50czogQXJyYXkuaXNBcnJheShyZXN1bHQ/LmV2ZW50cykgPyByZXN1bHQuZXZlbnRzIDogW10sXHJcbiAgICAgICAgaGFzTW9yZTogcmVzdWx0Py5oYXNNb3JlXHJcbiAgICB9O1xyXG59XHJcblxyXG5hc3luYyBmdW5jdGlvbiBhY2tFdmVudHMoXHJcbiAgICBzZXNzaW9uVG9rZW46IHN0cmluZyxcclxuICAgIHN1YnNjcmlwdGlvbklkOiBzdHJpbmcsXHJcbiAgICBzZXF1ZW5jZTogbnVtYmVyXHJcbik6IFByb21pc2U8eyBsYXN0QWNrZWRTZXF1ZW5jZT86IG51bWJlciB9PiB7XHJcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzZW5kVG9EYWVtb24oXHJcbiAgICAgICAgJ2Fja0V2ZW50JyxcclxuICAgICAgICB7IHN1YnNjcmlwdGlvbklkLCBzZXF1ZW5jZSB9LFxyXG4gICAgICAgIHsgc2Vzc2lvblRva2VuIH1cclxuICAgICkgYXMgeyBsYXN0QWNrZWRTZXF1ZW5jZT86IG51bWJlciB9O1xyXG4gICAgcmV0dXJuIHJlc3VsdCA/PyB7fTtcclxufVxyXG5cclxuYXN5bmMgZnVuY3Rpb24gYXBwbHlEYWVtb25Db21tYW5kKFxyXG4gICAgc2Vzc2lvblRva2VuOiBzdHJpbmcsXHJcbiAgICBtZXRob2Q6IHN0cmluZyxcclxuICAgIHBhcmFtczogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cclxuKTogUHJvbWlzZTx1bmtub3duPiB7XHJcbiAgICByZXR1cm4gc2VuZFRvRGFlbW9uKG1ldGhvZCwgcGFyYW1zLCB7IHNlc3Npb25Ub2tlbiB9KTtcclxufVxyXG5cclxuYXN5bmMgZnVuY3Rpb24gZ2V0Q29udGV4dFN5bmNQb2xpY3koXHJcbiAgICBzZXNzaW9uVG9rZW46IHN0cmluZyxcclxuICAgIGNvbnRleHRJZDogc3RyaW5nXHJcbik6IFByb21pc2U8J2xvY2FsX29ubHknIHwgJ21ldGFkYXRhX29ubHknIHwgJ2Z1bGxfc3luYycgfCBudWxsPiB7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNlbmRUb0RhZW1vbihcclxuICAgICAgICAgICAgJ2dldFN5bmNQb2xpY3knLFxyXG4gICAgICAgICAgICB7IGNvbnRleHRJZCB9LFxyXG4gICAgICAgICAgICB7IHNlc3Npb25Ub2tlbiB9XHJcbiAgICAgICAgKSBhcyB7IHN5bmNQb2xpY3k/OiBzdHJpbmcgfTtcclxuICAgICAgICBpZiAocmVzdWx0LnN5bmNQb2xpY3kgPT09ICdsb2NhbF9vbmx5JyB8fCByZXN1bHQuc3luY1BvbGljeSA9PT0gJ21ldGFkYXRhX29ubHknIHx8IHJlc3VsdC5zeW5jUG9saWN5ID09PSAnZnVsbF9zeW5jJykge1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0LnN5bmNQb2xpY3k7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfSBjYXRjaCB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlZGFjdEV2ZW50Rm9yTWV0YWRhdGFPbmx5KGV2ZW50OiBDb25uZWN0b3JFdmVudFBheWxvYWQpOiBDb25uZWN0b3JFdmVudFBheWxvYWQge1xyXG4gICAgY29uc3QgcGF5bG9hZCA9IGV2ZW50LnBheWxvYWQgPz8ge307XHJcbiAgICBjb25zdCBtZXRob2QgPSB0eXBlb2YgcGF5bG9hZC5tZXRob2QgPT09ICdzdHJpbmcnID8gcGF5bG9hZC5tZXRob2QgOiBudWxsO1xyXG4gICAgY29uc3QgcmVzdWx0ID0gdHlwZW9mIHBheWxvYWQucmVzdWx0ID09PSAnb2JqZWN0JyAmJiBwYXlsb2FkLnJlc3VsdCAhPT0gbnVsbFxyXG4gICAgICAgID8gcGF5bG9hZC5yZXN1bHQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cclxuICAgICAgICA6IG51bGw7XHJcbiAgICBjb25zdCBjb250ZXh0SWQgPSB0eXBlb2YgcGF5bG9hZC5jb250ZXh0SWQgPT09ICdzdHJpbmcnID8gcGF5bG9hZC5jb250ZXh0SWQgOiBudWxsO1xyXG4gICAgY29uc3QgaWQgPSB0eXBlb2YgcGF5bG9hZC5pZCA9PT0gJ3N0cmluZycgPyBwYXlsb2FkLmlkIDogbnVsbDtcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIGV2ZW50SWQ6IGV2ZW50LmV2ZW50SWQsXHJcbiAgICAgICAgc2VxdWVuY2U6IGV2ZW50LnNlcXVlbmNlLFxyXG4gICAgICAgIGNvbnRleHRJZDogZXZlbnQuY29udGV4dElkLFxyXG4gICAgICAgIHR5cGU6IGV2ZW50LnR5cGUsXHJcbiAgICAgICAgdGltZXN0YW1wOiBldmVudC50aW1lc3RhbXAsXHJcbiAgICAgICAgc291cmNlOiBldmVudC5zb3VyY2UsXHJcbiAgICAgICAgcGF5bG9hZDoge1xyXG4gICAgICAgICAgICBtb2RlOiAnbWV0YWRhdGFfb25seScsXHJcbiAgICAgICAgICAgIC4uLihtZXRob2QgPyB7IG1ldGhvZCB9IDoge30pLFxyXG4gICAgICAgICAgICAuLi4oY29udGV4dElkID8geyBjb250ZXh0SWQgfSA6IHt9KSxcclxuICAgICAgICAgICAgLi4uKGlkID8geyBpZCB9IDoge30pLFxyXG4gICAgICAgICAgICAuLi4ocmVzdWx0ID8geyByZXN1bHQgfSA6IHt9KVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzTWV0aG9kQWxsb3dlZEZvckNsb3VkQ29tbWFuZChtZXRob2Q6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIENMT1VEX0NPTU1BTkRfTUVUSE9EX0FMTE9XTElTVC5oYXMobWV0aG9kKTtcclxufVxyXG5cclxuZnVuY3Rpb24gc2xlZXAobXM6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCBtcykpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBub3JtYWxpemVJbnRlcnZhbE1zKGludGVydmFsTXM6IG51bWJlciB8IHVuZGVmaW5lZCk6IG51bWJlciB7XHJcbiAgICBpZiAoIWludGVydmFsTXMgfHwgIU51bWJlci5pc0Zpbml0ZShpbnRlcnZhbE1zKSkgcmV0dXJuIERFRkFVTFRfSU5URVJWQUxfTVM7XHJcbiAgICByZXR1cm4gTWF0aC5tYXgoTUlOX0lOVEVSVkFMX01TLCBpbnRlcnZhbE1zKTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0UnVudGltZURlcGVuZGVuY2llcygpOiBDb25uZWN0b3JSdW50aW1lRGVwZW5kZW5jaWVzIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgbm93OiAoKSA9PiBEYXRlLm5vdygpLFxyXG4gICAgICAgIGxvZzogKG1lc3NhZ2UpID0+IGNvbnNvbGUubG9nKG1lc3NhZ2UpLFxyXG4gICAgICAgIHdhcm46IChtZXNzYWdlKSA9PiBjb25zb2xlLndhcm4obWVzc2FnZSksXHJcbiAgICAgICAgZXJyb3I6IChtZXNzYWdlKSA9PiBjb25zb2xlLmVycm9yKG1lc3NhZ2UpLFxyXG4gICAgICAgIGlzRGFlbW9uUmVhY2hhYmxlLFxyXG4gICAgICAgIHN0YXJ0RGFlbW9uRGV0YWNoZWQsXHJcbiAgICAgICAgd2FpdEZvckRhZW1vbixcclxuICAgICAgICBnZXRTeW5jU3RhdHVzLFxyXG4gICAgICAgIHJlc29sdmVUb2tlbixcclxuICAgICAgICByZWFkQ29ubmVjdG9yU3RhdGUsXHJcbiAgICAgICAgcmVnaXN0ZXJDb25uZWN0b3IsXHJcbiAgICAgICAgd3JpdGVDb25uZWN0b3JTdGF0ZSxcclxuICAgICAgICBnZXREYXNoYm9hcmRVcmw6IGdldEhvc3RlZERhc2hib2FyZFVybCxcclxuICAgICAgICByZWdpc3RlckNvbm5lY3RvckluQ2xvdWQsXHJcbiAgICAgICAgZmV0Y2hDb25uZWN0b3JDYXBhYmlsaXRpZXMsXHJcbiAgICAgICAgc2VuZENvbm5lY3RvckhlYXJ0YmVhdCxcclxuICAgICAgICBjcmVhdGVEYWVtb25TZXNzaW9uLFxyXG4gICAgICAgIHN1YnNjcmliZUV2ZW50cyxcclxuICAgICAgICBwb2xsRXZlbnRzLFxyXG4gICAgICAgIGFja0V2ZW50cyxcclxuICAgICAgICBzZW5kQ29ubmVjdG9yRXZlbnRzLFxyXG4gICAgICAgIGZldGNoQ29ubmVjdG9yQ29tbWFuZHMsXHJcbiAgICAgICAgYWNrQ29ubmVjdG9yQ29tbWFuZCxcclxuICAgICAgICBhcHBseURhZW1vbkNvbW1hbmQsXHJcbiAgICAgICAgZ2V0Q29udGV4dFN5bmNQb2xpY3ksXHJcbiAgICAgICAgZW5xdWV1ZUV2ZW50czogKHN1YnNjcmlwdGlvbklkLCBldmVudHMsIG5vdykgPT4gZW5xdWV1ZUNvbm5lY3RvckV2ZW50cyhzdWJzY3JpcHRpb25JZCwgZXZlbnRzLCBub3cpLFxyXG4gICAgICAgIGdldFJlYWR5RXZlbnRzOiAobGltaXQsIG5vdykgPT4gZ2V0UmVhZHlDb25uZWN0b3JFdmVudHMobGltaXQsIG5vdyksXHJcbiAgICAgICAgbWFya0V2ZW50c0RlbGl2ZXJlZDogKHF1ZXVlSWRzKSA9PiBtYXJrQ29ubmVjdG9yRXZlbnRzRGVsaXZlcmVkKHF1ZXVlSWRzKSxcclxuICAgICAgICBtYXJrRXZlbnRzRmFpbGVkOiAocXVldWVJZHMsIGVycm9yLCBub3cpID0+IG1hcmtDb25uZWN0b3JFdmVudHNGYWlsZWQocXVldWVJZHMsIGVycm9yLCBub3cpLFxyXG4gICAgICAgIGdldFF1ZXVlU3RhdHM6IChub3cpID0+IGdldENvbm5lY3RvclF1ZXVlU3RhdHMobm93KSxcclxuICAgICAgICBwcnVuZVF1ZXVlOiAobm93KSA9PiBwcnVuZUNvbm5lY3RvclF1ZXVlKHsgbm93IH0pXHJcbiAgICB9O1xyXG59XHJcblxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuQ29ubmVjdG9yUnVudGltZUN5Y2xlKFxyXG4gICAgb3B0aW9uczogQ29ubmVjdG9yUnVudGltZU9wdGlvbnMgPSB7fSxcclxuICAgIGRlcHM6IENvbm5lY3RvclJ1bnRpbWVEZXBlbmRlbmNpZXMgPSBnZXRSdW50aW1lRGVwZW5kZW5jaWVzKClcclxuKTogUHJvbWlzZTxDb25uZWN0b3JSdW50aW1lU3VtbWFyeT4ge1xyXG4gICAgY29uc3QgYXV0b1N0YXJ0RGFlbW9uID0gb3B0aW9ucy5hdXRvU3RhcnREYWVtb24gIT09IGZhbHNlO1xyXG4gICAgbGV0IGRhZW1vbiA9IGF3YWl0IGRlcHMuaXNEYWVtb25SZWFjaGFibGUoKTtcclxuICAgIGxldCBsYXN0RXJyb3I6IHN0cmluZyB8IG51bGwgPSBkYWVtb24ub2sgPyBudWxsIDogKGRhZW1vbi5lcnJvciA/PyAnZGFlbW9uX3VucmVhY2hhYmxlJyk7XHJcblxyXG4gICAgaWYgKCFkYWVtb24ub2sgJiYgYXV0b1N0YXJ0RGFlbW9uKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgZGVwcy5zdGFydERhZW1vbkRldGFjaGVkKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlYWR5ID0gYXdhaXQgZGVwcy53YWl0Rm9yRGFlbW9uKDhfMDAwKTtcclxuICAgICAgICAgICAgZGFlbW9uID0gcmVhZHkgPyBhd2FpdCBkZXBzLmlzRGFlbW9uUmVhY2hhYmxlKCkgOiB7IG9rOiBmYWxzZSwgZXJyb3I6ICdkYWVtb25fc3RhcnRfdGltZW91dCcgfTtcclxuICAgICAgICAgICAgbGFzdEVycm9yID0gZGFlbW9uLm9rID8gbnVsbCA6IChkYWVtb24uZXJyb3IgPz8gJ2RhZW1vbl9zdGFydF9mYWlsZWQnKTtcclxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICBsYXN0RXJyb3IgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRva2VuID0gZGVwcy5yZXNvbHZlVG9rZW4oKTtcclxuICAgIGxldCByZWdpc3RyYXRpb24gPSBkZXBzLnJlYWRDb25uZWN0b3JTdGF0ZSgpO1xyXG4gICAgY29uc3QgZGFzaGJvYXJkVXJsID0gZGVwcy5nZXREYXNoYm9hcmRVcmwoKTtcclxuXHJcbiAgICBpZiAodG9rZW4gJiYgIXJlZ2lzdHJhdGlvbikge1xyXG4gICAgICAgIGNvbnN0IGNyZWF0ZWQgPSBkZXBzLnJlZ2lzdGVyQ29ubmVjdG9yKHtcclxuICAgICAgICAgICAgdGVuYW50SWQ6IHRva2VuLnRlbmFudElkIHx8IG51bGwsXHJcbiAgICAgICAgICAgIHVpVXJsOiBkYXNoYm9hcmRVcmxcclxuICAgICAgICB9KTtcclxuICAgICAgICByZWdpc3RyYXRpb24gPSBjcmVhdGVkLnN0YXRlO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBzeW5jOiBDb25uZWN0b3JSdW50aW1lU3luY1N0YXR1cyB8IG51bGwgPSBudWxsO1xyXG4gICAgaWYgKGRhZW1vbi5vaykge1xyXG4gICAgICAgIHN5bmMgPSBhd2FpdCBkZXBzLmdldFN5bmNTdGF0dXMoKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgY2xvdWRDb25uZWN0ZWQgPSBmYWxzZTtcclxuICAgIGlmIChyZWdpc3RyYXRpb24gJiYgdG9rZW4pIHtcclxuICAgICAgICBkZXBzLnBydW5lUXVldWUoZGVwcy5ub3coKSk7XHJcblxyXG4gICAgICAgIGlmIChyZWdpc3RyYXRpb24ucmVnaXN0cmF0aW9uTW9kZSAhPT0gJ2Nsb3VkJykge1xyXG4gICAgICAgICAgICBjb25zdCBjbG91ZFJlZ2lzdHJhdGlvbiA9IGF3YWl0IGRlcHMucmVnaXN0ZXJDb25uZWN0b3JJbkNsb3VkKHRva2VuLmFjY2Vzc1Rva2VuLCB7XHJcbiAgICAgICAgICAgICAgICBtYWNoaW5lSWQ6IHJlZ2lzdHJhdGlvbi5tYWNoaW5lSWQsXHJcbiAgICAgICAgICAgICAgICB0ZW5hbnRJZDogcmVnaXN0cmF0aW9uLnRlbmFudElkLFxyXG4gICAgICAgICAgICAgICAgdWlVcmw6IHJlZ2lzdHJhdGlvbi51aVVybCB8fCBkYXNoYm9hcmRVcmwsXHJcbiAgICAgICAgICAgICAgICBwbGF0Zm9ybTogb3MucGxhdGZvcm0oKVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIGlmIChjbG91ZFJlZ2lzdHJhdGlvbi5vaykge1xyXG4gICAgICAgICAgICAgICAgcmVnaXN0cmF0aW9uID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIC4uLnJlZ2lzdHJhdGlvbixcclxuICAgICAgICAgICAgICAgICAgICB0ZW5hbnRJZDogY2xvdWRSZWdpc3RyYXRpb24uZGF0YT8udGVuYW50SWQgPz8gcmVnaXN0cmF0aW9uLnRlbmFudElkLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlZ2lzdHJhdGlvbk1vZGU6ICdjbG91ZCcsXHJcbiAgICAgICAgICAgICAgICAgICAgY2xvdWQ6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0cmF0aW9uSWQ6IGNsb3VkUmVnaXN0cmF0aW9uLmRhdGE/LnJlZ2lzdHJhdGlvbklkID8/IHJlZ2lzdHJhdGlvbi5jbG91ZC5yZWdpc3RyYXRpb25JZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtVXJsOiBjbG91ZFJlZ2lzdHJhdGlvbi5kYXRhPy5zdHJlYW1VcmwgPz8gcmVnaXN0cmF0aW9uLmNsb3VkLnN0cmVhbVVybCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FwYWJpbGl0aWVzOiBjbG91ZFJlZ2lzdHJhdGlvbi5kYXRhPy5jYXBhYmlsaXRpZXMgPz8gcmVnaXN0cmF0aW9uLmNsb3VkLmNhcGFiaWxpdGllcyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGFzdEhlYXJ0YmVhdEF0OiByZWdpc3RyYXRpb24uY2xvdWQubGFzdEhlYXJ0YmVhdEF0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsYXN0RXJyb3I6IG51bGxcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbGFzdEVycm9yID0gY2xvdWRSZWdpc3RyYXRpb24uZXJyb3IgPz8gJ2Nsb3VkX3JlZ2lzdHJhdGlvbl9mYWlsZWQnO1xyXG4gICAgICAgICAgICAgICAgcmVnaXN0cmF0aW9uID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIC4uLnJlZ2lzdHJhdGlvbixcclxuICAgICAgICAgICAgICAgICAgICByZWdpc3RyYXRpb25Nb2RlOiAnbG9jYWwnLFxyXG4gICAgICAgICAgICAgICAgICAgIGNsb3VkOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnJlZ2lzdHJhdGlvbi5jbG91ZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGFzdEVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHJlZ2lzdHJhdGlvbi5yZWdpc3RyYXRpb25Nb2RlID09PSAnY2xvdWQnKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNhcGFiaWxpdGllc1Jlc3VsdCA9IGF3YWl0IGRlcHMuZmV0Y2hDb25uZWN0b3JDYXBhYmlsaXRpZXModG9rZW4uYWNjZXNzVG9rZW4sIHJlZ2lzdHJhdGlvbi5tYWNoaW5lSWQpO1xyXG4gICAgICAgICAgICBpZiAoY2FwYWJpbGl0aWVzUmVzdWx0Lm9rKSB7XHJcbiAgICAgICAgICAgICAgICByZWdpc3RyYXRpb24uY2xvdWQuY2FwYWJpbGl0aWVzID0gY2FwYWJpbGl0aWVzUmVzdWx0LmRhdGE/LmNhcGFiaWxpdGllc1xyXG4gICAgICAgICAgICAgICAgICAgID8/IGNhcGFiaWxpdGllc1Jlc3VsdC5kYXRhPy5mZWF0dXJlc1xyXG4gICAgICAgICAgICAgICAgICAgID8/IHJlZ2lzdHJhdGlvbi5jbG91ZC5jYXBhYmlsaXRpZXM7XHJcbiAgICAgICAgICAgICAgICBjbG91ZENvbm5lY3RlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBsYXN0RXJyb3IgPSBudWxsO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbGFzdEVycm9yID0gY2FwYWJpbGl0aWVzUmVzdWx0LmVycm9yID8/ICdjbG91ZF9jYXBhYmlsaXRpZXNfZmFpbGVkJztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgcG9zdHVyZUZvckhlYXJ0YmVhdDogJ2Nvbm5lY3RlZCcgfCAnZGVncmFkZWQnIHwgJ29mZmxpbmUnID0gZGFlbW9uLm9rID8gJ2Nvbm5lY3RlZCcgOiAnb2ZmbGluZSc7XHJcbiAgICAgICAgICAgIGNvbnN0IGhlYXJ0YmVhdFJlc3VsdCA9IGF3YWl0IGRlcHMuc2VuZENvbm5lY3RvckhlYXJ0YmVhdCh0b2tlbi5hY2Nlc3NUb2tlbiwge1xyXG4gICAgICAgICAgICAgICAgbWFjaGluZUlkOiByZWdpc3RyYXRpb24ubWFjaGluZUlkLFxyXG4gICAgICAgICAgICAgICAgdGVuYW50SWQ6IHJlZ2lzdHJhdGlvbi50ZW5hbnRJZCxcclxuICAgICAgICAgICAgICAgIHBvc3R1cmU6IHBvc3R1cmVGb3JIZWFydGJlYXQsXHJcbiAgICAgICAgICAgICAgICBkYWVtb25SdW5uaW5nOiBkYWVtb24ub2ssXHJcbiAgICAgICAgICAgICAgICBzeW5jRW5hYmxlZDogQm9vbGVhbihzeW5jPy5lbmFibGVkKSxcclxuICAgICAgICAgICAgICAgIHN5bmNSdW5uaW5nOiBCb29sZWFuKHN5bmM/LnJ1bm5pbmcpLFxyXG4gICAgICAgICAgICAgICAgcXVldWU6IHN5bmM/LnF1ZXVlXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgaWYgKGhlYXJ0YmVhdFJlc3VsdC5vaykge1xyXG4gICAgICAgICAgICAgICAgY2xvdWRDb25uZWN0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgcmVnaXN0cmF0aW9uLmNsb3VkLmxhc3RIZWFydGJlYXRBdCA9IGRlcHMubm93KCk7XHJcbiAgICAgICAgICAgICAgICBpZiAobGFzdEVycm9yID09PSAnY2xvdWRfY2FwYWJpbGl0aWVzX2ZhaWxlZCcpIHtcclxuICAgICAgICAgICAgICAgICAgICBsYXN0RXJyb3IgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbGFzdEVycm9yID0gaGVhcnRiZWF0UmVzdWx0LmVycm9yID8/IGxhc3RFcnJvciA/PyAnY2xvdWRfaGVhcnRiZWF0X2ZhaWxlZCc7XHJcbiAgICAgICAgICAgICAgICBjbG91ZENvbm5lY3RlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgZGFlbW9uU2Vzc2lvblRva2VuID0gcmVnaXN0cmF0aW9uLnJ1bnRpbWUuZGFlbW9uU2Vzc2lvblRva2VuO1xyXG4gICAgICAgICAgICBpZiAoZGFlbW9uLm9rICYmIChyZWdpc3RyYXRpb24ucnVudGltZS5ldmVudEJyaWRnZVN1cHBvcnRlZCB8fCByZWdpc3RyYXRpb24ucnVudGltZS5jb21tYW5kQnJpZGdlU3VwcG9ydGVkKSAmJiAhZGFlbW9uU2Vzc2lvblRva2VuKSB7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlc3Npb24gPSBhd2FpdCBkZXBzLmNyZWF0ZURhZW1vblNlc3Npb24oKTtcclxuICAgICAgICAgICAgICAgICAgICBkYWVtb25TZXNzaW9uVG9rZW4gPSBzZXNzaW9uLnNlc3Npb25Ub2tlbjtcclxuICAgICAgICAgICAgICAgICAgICByZWdpc3RyYXRpb24ucnVudGltZS5kYWVtb25TZXNzaW9uVG9rZW4gPSBkYWVtb25TZXNzaW9uVG9rZW47XHJcbiAgICAgICAgICAgICAgICAgICAgcmVnaXN0cmF0aW9uLnJ1bnRpbWUuZXZlbnRTdWJzY3JpcHRpb25JZCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVnaXN0cmF0aW9uLnJ1bnRpbWUuZXZlbnRCcmlkZ2VFcnJvciA9IG1lc3NhZ2U7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVnaXN0cmF0aW9uLnJ1bnRpbWUuY29tbWFuZEJyaWRnZUVycm9yID0gbWVzc2FnZTtcclxuICAgICAgICAgICAgICAgICAgICBsYXN0RXJyb3IgPSBtZXNzYWdlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoZGFlbW9uLm9rICYmIHJlZ2lzdHJhdGlvbi5ydW50aW1lLmV2ZW50QnJpZGdlU3VwcG9ydGVkKSB7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghZGFlbW9uU2Vzc2lvblRva2VuKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignZGFlbW9uX3Nlc3Npb25fdW5hdmFpbGFibGUnKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghcmVnaXN0cmF0aW9uLnJ1bnRpbWUuZXZlbnRTdWJzY3JpcHRpb25JZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdWJzY3JpcHRpb24gPSBhd2FpdCBkZXBzLnN1YnNjcmliZUV2ZW50cyhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhZW1vblNlc3Npb25Ub2tlbixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdHJhdGlvbi5ydW50aW1lLmxhc3RFdmVudFNlcXVlbmNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdHJhdGlvbi5ydW50aW1lLmV2ZW50U3Vic2NyaXB0aW9uSWQgPSBzdWJzY3JpcHRpb24uc3Vic2NyaXB0aW9uSWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc3Vic2NyaXB0aW9uLmxhc3RBY2tlZFNlcXVlbmNlID09PSAnbnVtYmVyJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0cmF0aW9uLnJ1bnRpbWUubGFzdEV2ZW50U2VxdWVuY2UgPSBzdWJzY3JpcHRpb24ubGFzdEFja2VkU2VxdWVuY2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbklkID0gcmVnaXN0cmF0aW9uLnJ1bnRpbWUuZXZlbnRTdWJzY3JpcHRpb25JZDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXN1YnNjcmlwdGlvbklkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignZXZlbnRfc3Vic2NyaXB0aW9uX3VuYXZhaWxhYmxlJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwb2xsZWQgPSBhd2FpdCBkZXBzLnBvbGxFdmVudHMoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhZW1vblNlc3Npb25Ub2tlbixcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3Vic2NyaXB0aW9uSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdHJhdGlvbi5ydW50aW1lLmxhc3RFdmVudFNlcXVlbmNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAyMDBcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAocG9sbGVkLmV2ZW50cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBvbGljeUNhY2hlID0gbmV3IE1hcDxzdHJpbmcsICdsb2NhbF9vbmx5JyB8ICdtZXRhZGF0YV9vbmx5JyB8ICdmdWxsX3N5bmMnIHwgbnVsbD4oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRFdmVudHM6IENvbm5lY3RvckV2ZW50UGF5bG9hZFtdID0gW107XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGV2ZW50IG9mIHBvbGxlZC5ldmVudHMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZXZlbnQuY29udGV4dElkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRFdmVudHMucHVzaChldmVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXBvbGljeUNhY2hlLmhhcyhldmVudC5jb250ZXh0SWQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9saWN5Q2FjaGUuc2V0KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5jb250ZXh0SWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGRlcHMuZ2V0Q29udGV4dFN5bmNQb2xpY3koZGFlbW9uU2Vzc2lvblRva2VuLCBldmVudC5jb250ZXh0SWQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBvbGljeSA9IHBvbGljeUNhY2hlLmdldChldmVudC5jb250ZXh0SWQpID8/ICdtZXRhZGF0YV9vbmx5JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwb2xpY3kgPT09ICdsb2NhbF9vbmx5Jykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRFdmVudHMucHVzaChwb2xpY3kgPT09ICdtZXRhZGF0YV9vbmx5JyA/IHJlZGFjdEV2ZW50Rm9yTWV0YWRhdGFPbmx5KGV2ZW50KSA6IGV2ZW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlcmVkRXZlbnRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcHMuZW5xdWV1ZUV2ZW50cyhzdWJzY3JpcHRpb25JZCwgZmlsdGVyZWRFdmVudHMsIGRlcHMubm93KCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhY2tTZXF1ZW5jZSA9IHBvbGxlZC5jdXJzb3I7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYWNrU2VxdWVuY2UgPT09ICdudW1iZXInICYmIGFja1NlcXVlbmNlID4gcmVnaXN0cmF0aW9uLnJ1bnRpbWUubGFzdEV2ZW50U2VxdWVuY2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGRlcHMuYWNrRXZlbnRzKGRhZW1vblNlc3Npb25Ub2tlbiwgc3Vic2NyaXB0aW9uSWQsIGFja1NlcXVlbmNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdHJhdGlvbi5ydW50aW1lLmxhc3RFdmVudFNlcXVlbmNlID0gYWNrU2VxdWVuY2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlYWR5RXZlbnRzID0gZGVwcy5nZXRSZWFkeUV2ZW50cygyMDAsIGRlcHMubm93KCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZWFkeUV2ZW50cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBvbGljeUNhY2hlID0gbmV3IE1hcDxzdHJpbmcsICdsb2NhbF9vbmx5JyB8ICdtZXRhZGF0YV9vbmx5JyB8ICdmdWxsX3N5bmMnIHwgbnVsbD4oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcXVldWVJZHNUb0Ryb3A6IHN0cmluZ1tdID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlbmRhYmxlID0gW107XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgcmVhZHlFdmVudHMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXRlbS5jb250ZXh0SWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW5kYWJsZS5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVldWVJZDogaXRlbS5xdWV1ZUlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpcHRpb25JZDogaXRlbS5zdWJzY3JpcHRpb25JZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQ6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50SWQ6IGl0ZW0uZXZlbnRJZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcXVlbmNlOiBpdGVtLnNlcXVlbmNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dElkOiBpdGVtLmNvbnRleHRJZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IGl0ZW0udHlwZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcDogaXRlbS50aW1lc3RhbXAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2U6IGl0ZW0uc291cmNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF5bG9hZDogaXRlbS5wYXlsb2FkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gc2F0aXNmaWVzIENvbm5lY3RvckV2ZW50UGF5bG9hZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcG9saWN5Q2FjaGUuaGFzKGl0ZW0uY29udGV4dElkKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvbGljeUNhY2hlLnNldChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5jb250ZXh0SWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGRlcHMuZ2V0Q29udGV4dFN5bmNQb2xpY3koZGFlbW9uU2Vzc2lvblRva2VuLCBpdGVtLmNvbnRleHRJZClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcG9saWN5ID0gcG9saWN5Q2FjaGUuZ2V0KGl0ZW0uY29udGV4dElkKSA/PyAnbWV0YWRhdGFfb25seSc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocG9saWN5ID09PSAnbG9jYWxfb25seScpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWV1ZUlkc1RvRHJvcC5wdXNoKGl0ZW0ucXVldWVJZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmF3RXZlbnQ6IENvbm5lY3RvckV2ZW50UGF5bG9hZCA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudElkOiBpdGVtLmV2ZW50SWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VxdWVuY2U6IGl0ZW0uc2VxdWVuY2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dElkOiBpdGVtLmNvbnRleHRJZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBpdGVtLnR5cGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZXN0YW1wOiBpdGVtLnRpbWVzdGFtcCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2U6IGl0ZW0uc291cmNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBheWxvYWQ6IGl0ZW0ucGF5bG9hZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRhYmxlLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXVlSWQ6IGl0ZW0ucXVldWVJZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpcHRpb25JZDogaXRlbS5zdWJzY3JpcHRpb25JZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudDogcG9saWN5ID09PSAnbWV0YWRhdGFfb25seScgPyByZWRhY3RFdmVudEZvck1ldGFkYXRhT25seShyYXdFdmVudCkgOiByYXdFdmVudFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChxdWV1ZUlkc1RvRHJvcC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBzLm1hcmtFdmVudHNEZWxpdmVyZWQocXVldWVJZHNUb0Ryb3ApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VuZGFibGUubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RyYXRpb24ucnVudGltZS5ldmVudEJyaWRnZUVycm9yID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnNvciA9IHNlbmRhYmxlLnJlZHVjZSgobWF4LCBpdGVtKSA9PiBNYXRoLm1heChtYXgsIGl0ZW0uZXZlbnQuc2VxdWVuY2UpLCAwKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZ2VzdFJlc3VsdCA9IGF3YWl0IGRlcHMuc2VuZENvbm5lY3RvckV2ZW50cyh0b2tlbi5hY2Nlc3NUb2tlbiwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hY2hpbmVJZDogcmVnaXN0cmF0aW9uLm1hY2hpbmVJZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW5hbnRJZDogcmVnaXN0cmF0aW9uLnRlbmFudElkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmlwdGlvbklkOiBzZW5kYWJsZVswXS5zdWJzY3JpcHRpb25JZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3IsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRzOiBzZW5kYWJsZS5tYXAoaXRlbSA9PiBpdGVtLmV2ZW50KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcXVldWVJZHMgPSBzZW5kYWJsZS5tYXAoaXRlbSA9PiBpdGVtLnF1ZXVlSWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZ2VzdFJlc3VsdC5vaykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcHMubWFya0V2ZW50c0RlbGl2ZXJlZChxdWV1ZUlkcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0cmF0aW9uLnJ1bnRpbWUubGFzdEV2ZW50U3luY0F0ID0gZGVwcy5ub3coKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RyYXRpb24ucnVudGltZS5ldmVudEJyaWRnZUVycm9yID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5nZXN0UmVzdWx0LnN0YXR1c0NvZGUgPT09IDQwNCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvbnRyb2wgcGxhbmUgbWF5IG5vdCBoYXZlIGV2ZW50IGluZ2VzdCB5ZXQ7IHN0b3AgcmV0cnlpbmcgdW50aWwgZXhwbGljaXQgcmUtZW5hYmxlLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdHJhdGlvbi5ydW50aW1lLmV2ZW50QnJpZGdlU3VwcG9ydGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0cmF0aW9uLnJ1bnRpbWUuZXZlbnRCcmlkZ2VFcnJvciA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwcy5tYXJrRXZlbnRzRmFpbGVkKHF1ZXVlSWRzLCAnZXZlbnRfaW5nZXN0X3VuYXZhaWxhYmxlJywgZGVwcy5ub3coKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yVGV4dCA9IGluZ2VzdFJlc3VsdC5lcnJvciA/PyAnZXZlbnRfaW5nZXN0X2ZhaWxlZCc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwcy5tYXJrRXZlbnRzRmFpbGVkKHF1ZXVlSWRzLCBlcnJvclRleHQsIGRlcHMubm93KCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdHJhdGlvbi5ydW50aW1lLmV2ZW50QnJpZGdlRXJyb3IgPSBlcnJvclRleHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdEVycm9yID0gZXJyb3JUZXh0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0cmF0aW9uLnJ1bnRpbWUuZXZlbnRCcmlkZ2VFcnJvciA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlZ2lzdHJhdGlvbi5ydW50aW1lLmV2ZW50QnJpZGdlRXJyb3IgPSBtZXNzYWdlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5pbmNsdWRlcygnSW52YWxpZCBzZXNzaW9uVG9rZW4nKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RyYXRpb24ucnVudGltZS5kYWVtb25TZXNzaW9uVG9rZW4gPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RyYXRpb24ucnVudGltZS5ldmVudFN1YnNjcmlwdGlvbklkID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGFlbW9uU2Vzc2lvblRva2VuID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1lc3NhZ2UuaW5jbHVkZXMoJ25vdCBmb3VuZCcpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdHJhdGlvbi5ydW50aW1lLmV2ZW50U3Vic2NyaXB0aW9uSWQgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgbGFzdEVycm9yID0gbWVzc2FnZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGRhZW1vbi5vayAmJiByZWdpc3RyYXRpb24ucnVudGltZS5jb21tYW5kQnJpZGdlU3VwcG9ydGVkKSB7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghZGFlbW9uU2Vzc2lvblRva2VuKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignZGFlbW9uX3Nlc3Npb25fdW5hdmFpbGFibGUnKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbW1hbmRzUmVzdWx0ID0gYXdhaXQgZGVwcy5mZXRjaENvbm5lY3RvckNvbW1hbmRzKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi5hY2Nlc3NUb2tlbixcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0cmF0aW9uLm1hY2hpbmVJZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0cmF0aW9uLnJ1bnRpbWUubGFzdENvbW1hbmRDdXJzb3JcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbW1hbmRzUmVzdWx0Lm9rKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb21tYW5kc1Jlc3VsdC5zdGF0dXNDb2RlID09PSA0MDQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdHJhdGlvbi5ydW50aW1lLmNvbW1hbmRCcmlkZ2VTdXBwb3J0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdHJhdGlvbi5ydW50aW1lLmNvbW1hbmRCcmlkZ2VFcnJvciA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoY29tbWFuZHNSZXN1bHQuZXJyb3IgPz8gJ2NvbW1hbmRfZmV0Y2hfZmFpbGVkJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb21tYW5kcyA9IGNvbW1hbmRzUmVzdWx0LmRhdGE/LmNvbW1hbmRzID8/IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgY3Vyc29yID0gcmVnaXN0cmF0aW9uLnJ1bnRpbWUubGFzdENvbW1hbmRDdXJzb3I7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNvbW1hbmQgb2YgY29tbWFuZHMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNvciA9IE1hdGgubWF4KGN1cnNvciwgY29tbWFuZC5jdXJzb3IgPz8gY3Vyc29yKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbW1hbmRDb250ZXh0SWQgPVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQuY29udGV4dElkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPz8gKHR5cGVvZiBjb21tYW5kLnBhcmFtcz8uY29udGV4dElkID09PSAnc3RyaW5nJyA/IGNvbW1hbmQucGFyYW1zLmNvbnRleHRJZCA6IG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHN0YXR1czogJ2FwcGxpZWQnIHwgJ2ZhaWxlZCcgPSAnYXBwbGllZCc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZXJyb3JUZXh0OiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc01ldGhvZEFsbG93ZWRGb3JDbG91ZENvbW1hbmQoY29tbWFuZC5tZXRob2QpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gJ2ZhaWxlZCc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JUZXh0ID0gJ2NvbW1hbmRfbWV0aG9kX25vdF9hbGxvd2VkJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcG9saWN5ID0gY29tbWFuZENvbnRleHRJZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGF3YWl0IGRlcHMuZ2V0Q29udGV4dFN5bmNQb2xpY3koZGFlbW9uU2Vzc2lvblRva2VuLCBjb21tYW5kQ29udGV4dElkKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG51bGw7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwb2xpY3kgPT09ICdsb2NhbF9vbmx5Jykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSAnZmFpbGVkJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JUZXh0ID0gJ2NvbW1hbmRfYmxvY2tlZF9ieV9zeW5jX3BvbGljeV9sb2NhbF9vbmx5JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgZGVwcy5hcHBseURhZW1vbkNvbW1hbmQoZGFlbW9uU2Vzc2lvblRva2VuLCBjb21tYW5kLm1ldGhvZCwgY29tbWFuZC5wYXJhbXMgPz8ge30pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gJ2ZhaWxlZCc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvclRleHQgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYWNrUmVzdWx0ID0gYXdhaXQgZGVwcy5hY2tDb25uZWN0b3JDb21tYW5kKHRva2VuLmFjY2Vzc1Rva2VuLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFjaGluZUlkOiByZWdpc3RyYXRpb24ubWFjaGluZUlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbmFudElkOiByZWdpc3RyYXRpb24udGVuYW50SWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZElkOiBjb21tYW5kLmNvbW1hbmRJZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3I6IGNvbW1hbmQuY3Vyc29yLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4oZXJyb3JUZXh0ID8geyBlcnJvcjogZXJyb3JUZXh0IH0gOiB7fSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYWNrUmVzdWx0Lm9rKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdEVycm9yID0gYWNrUmVzdWx0LmVycm9yID8/ICdjb21tYW5kX2Fja19mYWlsZWQnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbW1hbmRzUmVzdWx0LmRhdGE/LmN1cnNvciA9PT0gJ251bWJlcicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNvciA9IE1hdGgubWF4KGN1cnNvciwgY29tbWFuZHNSZXN1bHQuZGF0YS5jdXJzb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RyYXRpb24ucnVudGltZS5sYXN0Q29tbWFuZEN1cnNvciA9IGN1cnNvcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0cmF0aW9uLnJ1bnRpbWUubGFzdENvbW1hbmRTeW5jQXQgPSBkZXBzLm5vdygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RyYXRpb24ucnVudGltZS5jb21tYW5kQnJpZGdlRXJyb3IgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICByZWdpc3RyYXRpb24ucnVudGltZS5jb21tYW5kQnJpZGdlRXJyb3IgPSBtZXNzYWdlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmluY2x1ZGVzKCdJbnZhbGlkIHNlc3Npb25Ub2tlbicpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdHJhdGlvbi5ydW50aW1lLmRhZW1vblNlc3Npb25Ub2tlbiA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhZW1vblNlc3Npb25Ub2tlbiA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGxhc3RFcnJvciA9IG1lc3NhZ2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHF1ZXVlU3RhdHMgPSBkZXBzLmdldFF1ZXVlU3RhdHMoZGVwcy5ub3coKSk7XHJcbiAgICAgICAgICAgIHJlZ2lzdHJhdGlvbi5ydW50aW1lLmV2ZW50UXVldWVQZW5kaW5nID0gcXVldWVTdGF0cy5wZW5kaW5nO1xyXG4gICAgICAgICAgICByZWdpc3RyYXRpb24ucnVudGltZS5ldmVudFF1ZXVlUmVhZHkgPSBxdWV1ZVN0YXRzLnJlYWR5O1xyXG4gICAgICAgICAgICByZWdpc3RyYXRpb24ucnVudGltZS5ldmVudFF1ZXVlQmFja29mZiA9IHF1ZXVlU3RhdHMuYmFja29mZjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJlZ2lzdHJhdGlvbi51cGRhdGVkQXQgPSBkZXBzLm5vdygpO1xyXG4gICAgICAgIHJlZ2lzdHJhdGlvbi5jbG91ZC5sYXN0RXJyb3IgPSBsYXN0RXJyb3I7XHJcbiAgICAgICAgZGVwcy53cml0ZUNvbm5lY3RvclN0YXRlKHJlZ2lzdHJhdGlvbik7XHJcbiAgICB9IGVsc2UgaWYgKHJlZ2lzdHJhdGlvbiAmJiAhdG9rZW4pIHtcclxuICAgICAgICBkZXBzLnBydW5lUXVldWUoZGVwcy5ub3coKSk7XHJcbiAgICAgICAgY29uc3QgcXVldWVTdGF0cyA9IGRlcHMuZ2V0UXVldWVTdGF0cyhkZXBzLm5vdygpKTtcclxuICAgICAgICByZWdpc3RyYXRpb24ucnVudGltZS5ldmVudFF1ZXVlUGVuZGluZyA9IHF1ZXVlU3RhdHMucGVuZGluZztcclxuICAgICAgICByZWdpc3RyYXRpb24ucnVudGltZS5ldmVudFF1ZXVlUmVhZHkgPSBxdWV1ZVN0YXRzLnJlYWR5O1xyXG4gICAgICAgIHJlZ2lzdHJhdGlvbi5ydW50aW1lLmV2ZW50UXVldWVCYWNrb2ZmID0gcXVldWVTdGF0cy5iYWNrb2ZmO1xyXG4gICAgICAgIHJlZ2lzdHJhdGlvbi51cGRhdGVkQXQgPSBkZXBzLm5vdygpO1xyXG4gICAgICAgIHJlZ2lzdHJhdGlvbi5jbG91ZC5sYXN0RXJyb3IgPSAnYXV0aF9yZXF1aXJlZCc7XHJcbiAgICAgICAgZGVwcy53cml0ZUNvbm5lY3RvclN0YXRlKHJlZ2lzdHJhdGlvbik7XHJcbiAgICAgICAgbGFzdEVycm9yID0gJ2F1dGhfcmVxdWlyZWQnO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHBvc3R1cmU6ICdjb25uZWN0ZWQnIHwgJ2RlZ3JhZGVkJyB8ICdvZmZsaW5lJyA9ICFkYWVtb24ub2tcclxuICAgICAgICA/ICdvZmZsaW5lJ1xyXG4gICAgICAgIDogKCF0b2tlbiB8fCAhcmVnaXN0cmF0aW9uKVxyXG4gICAgICAgICAgICA/ICdkZWdyYWRlZCdcclxuICAgICAgICAgICAgOiAocmVnaXN0cmF0aW9uLnJlZ2lzdHJhdGlvbk1vZGUgPT09ICdjbG91ZCdcclxuICAgICAgICAgICAgICAgICYmICghY2xvdWRDb25uZWN0ZWRcclxuICAgICAgICAgICAgICAgICAgICB8fCBCb29sZWFuKHJlZ2lzdHJhdGlvbi5ydW50aW1lLmV2ZW50QnJpZGdlRXJyb3IpXHJcbiAgICAgICAgICAgICAgICAgICAgfHwgQm9vbGVhbihyZWdpc3RyYXRpb24ucnVudGltZS5jb21tYW5kQnJpZGdlRXJyb3IpKSlcclxuICAgICAgICAgICAgICAgID8gJ2RlZ3JhZGVkJ1xyXG4gICAgICAgICAgICAgICAgOiAoc3luYz8uZW5hYmxlZCAmJiBzeW5jPy5ydW5uaW5nID8gJ2Nvbm5lY3RlZCcgOiAnZGVncmFkZWQnKTtcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHBvc3R1cmUsXHJcbiAgICAgICAgZGFlbW9uUnVubmluZzogZGFlbW9uLm9rLFxyXG4gICAgICAgIGNsb3VkQ29ubmVjdGVkLFxyXG4gICAgICAgIHJlZ2lzdHJhdGlvbk1vZGU6IHJlZ2lzdHJhdGlvbiA/IHJlZ2lzdHJhdGlvbi5yZWdpc3RyYXRpb25Nb2RlIDogJ25vbmUnLFxyXG4gICAgICAgIGF1dGg6IEJvb2xlYW4odG9rZW4pLFxyXG4gICAgICAgIG1hY2hpbmVJZDogcmVnaXN0cmF0aW9uPy5tYWNoaW5lSWQgPz8gbnVsbCxcclxuICAgICAgICBsYXN0RXJyb3JcclxuICAgIH07XHJcbn1cclxuXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5Db25uZWN0b3JSdW50aW1lKFxyXG4gICAgb3B0aW9uczogQ29ubmVjdG9yUnVudGltZU9wdGlvbnMgPSB7fSxcclxuICAgIGRlcHM6IENvbm5lY3RvclJ1bnRpbWVEZXBlbmRlbmNpZXMgPSBnZXRSdW50aW1lRGVwZW5kZW5jaWVzKClcclxuKTogUHJvbWlzZTxudW1iZXI+IHtcclxuICAgIGNvbnN0IGludGVydmFsTXMgPSBub3JtYWxpemVJbnRlcnZhbE1zKG9wdGlvbnMuaW50ZXJ2YWxNcyk7XHJcbiAgICBsZXQgc3RvcHBpbmcgPSBmYWxzZTtcclxuICAgIGNvbnN0IG9uU2lnbmFsID0gKCkgPT4geyBzdG9wcGluZyA9IHRydWU7IH07XHJcbiAgICBwcm9jZXNzLm9uY2UoJ1NJR0lOVCcsIG9uU2lnbmFsKTtcclxuICAgIHByb2Nlc3Mub25jZSgnU0lHVEVSTScsIG9uU2lnbmFsKTtcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICAgIGRvIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHN1bW1hcnkgPSBhd2FpdCBydW5Db25uZWN0b3JSdW50aW1lQ3ljbGUob3B0aW9ucywgZGVwcyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbnMucXVpZXQpIHtcclxuICAgICAgICAgICAgICAgICAgICBkZXBzLmxvZyhcclxuICAgICAgICAgICAgICAgICAgICAgICAgYGNvbm5lY3Rvcl9ydW50aW1lX3RpY2sgcG9zdHVyZT0ke3N1bW1hcnkucG9zdHVyZX0gZGFlbW9uPSR7c3VtbWFyeS5kYWVtb25SdW5uaW5nfSBgICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYGNsb3VkPSR7c3VtbWFyeS5jbG91ZENvbm5lY3RlZH0gbW9kZT0ke3N1bW1hcnkucmVnaXN0cmF0aW9uTW9kZX0gYCArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGBtYWNoaW5lX2lkPSR7c3VtbWFyeS5tYWNoaW5lSWQgPz8gJ24vYSd9YFxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN1bW1hcnkubGFzdEVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlcHMud2FybihgY29ubmVjdG9yX3J1bnRpbWVfZXJyb3IgJHtzdW1tYXJ5Lmxhc3RFcnJvcn1gKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5vbmNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN1bW1hcnkucG9zdHVyZSA9PT0gJ29mZmxpbmUnID8gMSA6IDA7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgZGVwcy5lcnJvcihgY29ubmVjdG9yX3J1bnRpbWVfdGlja19mYWlsZWQgJHttZXNzYWdlfWApO1xyXG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMub25jZSkgcmV0dXJuIDE7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChzdG9wcGluZyB8fCBvcHRpb25zLm9uY2UpIGJyZWFrO1xyXG4gICAgICAgICAgICBhd2FpdCBzbGVlcChpbnRlcnZhbE1zKTtcclxuICAgICAgICB9IHdoaWxlICghc3RvcHBpbmcpO1xyXG4gICAgICAgIHJldHVybiAwO1xyXG4gICAgfSBmaW5hbGx5IHtcclxuICAgICAgICBwcm9jZXNzLnJlbW92ZUxpc3RlbmVyKCdTSUdJTlQnLCBvblNpZ25hbCk7XHJcbiAgICAgICAgcHJvY2Vzcy5yZW1vdmVMaXN0ZW5lcignU0lHVEVSTScsIG9uU2lnbmFsKTtcclxuICAgIH1cclxufVxyXG4iLCAiaW1wb3J0IGZzIGZyb20gJ2ZzJztcclxuaW1wb3J0IG9zIGZyb20gJ29zJztcclxuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XHJcbmltcG9ydCB7IHJhbmRvbVVVSUQgfSBmcm9tICdjcnlwdG8nO1xyXG5pbXBvcnQgdHlwZSB7IENvbm5lY3RvckV2ZW50UGF5bG9hZCB9IGZyb20gJy4vY2xvdWQnO1xyXG5cclxuY29uc3QgUVVFVUVfRklMRV9WRVJTSU9OID0gMTtcclxuY29uc3QgREVGQVVMVF9RVUVVRV9MSU1JVCA9IDIwXzAwMDtcclxuY29uc3QgREVGQVVMVF9CQVRDSF9MSU1JVCA9IDIwMDtcclxuY29uc3QgREVGQVVMVF9RVUVVRV9NQVhfQUdFX0hPVVJTID0gMjQgKiA3O1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBRdWV1ZWRDb25uZWN0b3JFdmVudCB7XHJcbiAgICBxdWV1ZUlkOiBzdHJpbmc7XHJcbiAgICBldmVudElkOiBzdHJpbmc7XHJcbiAgICBzdWJzY3JpcHRpb25JZDogc3RyaW5nO1xyXG4gICAgc2VxdWVuY2U6IG51bWJlcjtcclxuICAgIGNvbnRleHRJZDogc3RyaW5nIHwgbnVsbDtcclxuICAgIHR5cGU6IHN0cmluZztcclxuICAgIHRpbWVzdGFtcDogbnVtYmVyO1xyXG4gICAgc291cmNlOiBzdHJpbmc7XHJcbiAgICBwYXlsb2FkOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcclxuICAgIGVucXVldWVkQXQ6IG51bWJlcjtcclxuICAgIGF0dGVtcHRzOiBudW1iZXI7XHJcbiAgICBuZXh0QXR0ZW1wdEF0OiBudW1iZXI7XHJcbiAgICBsYXN0RXJyb3I6IHN0cmluZyB8IG51bGw7XHJcbn1cclxuXHJcbmludGVyZmFjZSBDb25uZWN0b3JRdWV1ZUZpbGUge1xyXG4gICAgdmVyc2lvbjogbnVtYmVyO1xyXG4gICAgdXBkYXRlZEF0OiBudW1iZXI7XHJcbiAgICBpdGVtczogUXVldWVkQ29ubmVjdG9yRXZlbnRbXTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDb25uZWN0b3JRdWV1ZVN0YXRzIHtcclxuICAgIHBlbmRpbmc6IG51bWJlcjtcclxuICAgIHJlYWR5OiBudW1iZXI7XHJcbiAgICBiYWNrb2ZmOiBudW1iZXI7XHJcbiAgICBtYXhBdHRlbXB0czogbnVtYmVyO1xyXG4gICAgb2xkZXN0RW5xdWV1ZWRBdDogbnVtYmVyIHwgbnVsbDtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDb25uZWN0b3JRdWV1ZVB1cmdlT3B0aW9ucyB7XHJcbiAgICBhbGw/OiBib29sZWFuO1xyXG4gICAgb2xkZXJUaGFuSG91cnM/OiBudW1iZXI7XHJcbiAgICBtaW5BdHRlbXB0cz86IG51bWJlcjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDb25uZWN0b3JRdWV1ZVB1cmdlUmVzdWx0IHtcclxuICAgIHJlbW92ZWQ6IG51bWJlcjtcclxuICAgIHJlbWFpbmluZzogbnVtYmVyO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjb21wdXRlQmFja29mZk1zKGF0dGVtcHRzOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgLy8gMnMsIDRzLCA4cyAuLi4gY2FwcGVkIHRvIDUgbWluXHJcbiAgICBjb25zdCB2YWx1ZSA9IDJfMDAwICogKDIgKiogTWF0aC5tYXgoMCwgYXR0ZW1wdHMgLSAxKSk7XHJcbiAgICByZXR1cm4gTWF0aC5taW4odmFsdWUsIDUgKiA2MF8wMDApO1xyXG59XHJcblxyXG5mdW5jdGlvbiBwYXJzZVBvc2l0aXZlSW50KHJhdzogc3RyaW5nIHwgdW5kZWZpbmVkLCBmYWxsYmFjazogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIGlmICghcmF3KSByZXR1cm4gZmFsbGJhY2s7XHJcbiAgICBjb25zdCBwYXJzZWQgPSBOdW1iZXIocmF3KTtcclxuICAgIGlmICghTnVtYmVyLmlzRmluaXRlKHBhcnNlZCkgfHwgcGFyc2VkIDw9IDApIHJldHVybiBmYWxsYmFjaztcclxuICAgIHJldHVybiBNYXRoLmZsb29yKHBhcnNlZCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldFF1ZXVlTGltaXQoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiBwYXJzZVBvc2l0aXZlSW50KHByb2Nlc3MuZW52LkNUWF9DT05ORUNUT1JfUVVFVUVfTUFYX0lURU1TLCBERUZBVUxUX1FVRVVFX0xJTUlUKTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0UXVldWVNYXhBZ2VNcygpOiBudW1iZXIge1xyXG4gICAgY29uc3QgaG91cnMgPSBwYXJzZVBvc2l0aXZlSW50KHByb2Nlc3MuZW52LkNUWF9DT05ORUNUT1JfUVVFVUVfTUFYX0FHRV9IT1VSUywgREVGQVVMVF9RVUVVRV9NQVhfQUdFX0hPVVJTKTtcclxuICAgIHJldHVybiBob3VycyAqIDYwICogNjAgKiAxMDAwO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29ubmVjdG9yUXVldWVQYXRoKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gcHJvY2Vzcy5lbnYuQ1RYX0NPTk5FQ1RPUl9RVUVVRV9QQVRIIHx8IHBhdGguam9pbihvcy5ob21lZGlyKCksICcuMGN0eCcsICdjb25uZWN0b3ItZXZlbnQtcXVldWUuanNvbicpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBlbnN1cmVEaXIoZmlsZVBhdGg6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgZnMubWtkaXJTeW5jKHBhdGguZGlybmFtZShmaWxlUGF0aCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiByZWFkUXVldWVGaWxlKCk6IENvbm5lY3RvclF1ZXVlRmlsZSB7XHJcbiAgICBjb25zdCBmaWxlUGF0aCA9IGdldENvbm5lY3RvclF1ZXVlUGF0aCgpO1xyXG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKGZpbGVQYXRoKSkge1xyXG4gICAgICAgIHJldHVybiB7IHZlcnNpb246IFFVRVVFX0ZJTEVfVkVSU0lPTiwgdXBkYXRlZEF0OiBEYXRlLm5vdygpLCBpdGVtczogW10gfTtcclxuICAgIH1cclxuXHJcbiAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKGZpbGVQYXRoLCAndXRmOCcpKSBhcyBQYXJ0aWFsPENvbm5lY3RvclF1ZXVlRmlsZT47XHJcbiAgICAgICAgY29uc3QgaXRlbXMgPSBBcnJheS5pc0FycmF5KHBhcnNlZC5pdGVtcylcclxuICAgICAgICAgICAgPyBwYXJzZWQuaXRlbXMuZmlsdGVyKChpdGVtKTogaXRlbSBpcyBRdWV1ZWRDb25uZWN0b3JFdmVudCA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gQm9vbGVhbihcclxuICAgICAgICAgICAgICAgICAgICBpdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgJiYgdHlwZW9mIGl0ZW0ucXVldWVJZCA9PT0gJ3N0cmluZydcclxuICAgICAgICAgICAgICAgICAgICAmJiB0eXBlb2YgaXRlbS5ldmVudElkID09PSAnc3RyaW5nJ1xyXG4gICAgICAgICAgICAgICAgICAgICYmIHR5cGVvZiBpdGVtLnN1YnNjcmlwdGlvbklkID09PSAnc3RyaW5nJ1xyXG4gICAgICAgICAgICAgICAgICAgICYmIHR5cGVvZiBpdGVtLnNlcXVlbmNlID09PSAnbnVtYmVyJ1xyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgOiBbXTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdmVyc2lvbjogUVVFVUVfRklMRV9WRVJTSU9OLFxyXG4gICAgICAgICAgICB1cGRhdGVkQXQ6IHR5cGVvZiBwYXJzZWQudXBkYXRlZEF0ID09PSAnbnVtYmVyJyA/IHBhcnNlZC51cGRhdGVkQXQgOiBEYXRlLm5vdygpLFxyXG4gICAgICAgICAgICBpdGVtc1xyXG4gICAgICAgIH07XHJcbiAgICB9IGNhdGNoIHtcclxuICAgICAgICByZXR1cm4geyB2ZXJzaW9uOiBRVUVVRV9GSUxFX1ZFUlNJT04sIHVwZGF0ZWRBdDogRGF0ZS5ub3coKSwgaXRlbXM6IFtdIH07XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHdyaXRlUXVldWVGaWxlKGRhdGE6IENvbm5lY3RvclF1ZXVlRmlsZSk6IHZvaWQge1xyXG4gICAgY29uc3QgZmlsZVBhdGggPSBnZXRDb25uZWN0b3JRdWV1ZVBhdGgoKTtcclxuICAgIGVuc3VyZURpcihmaWxlUGF0aCk7XHJcbiAgICBmcy53cml0ZUZpbGVTeW5jKFxyXG4gICAgICAgIGZpbGVQYXRoLFxyXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KHtcclxuICAgICAgICAgICAgdmVyc2lvbjogUVVFVUVfRklMRV9WRVJTSU9OLFxyXG4gICAgICAgICAgICB1cGRhdGVkQXQ6IERhdGUubm93KCksXHJcbiAgICAgICAgICAgIGl0ZW1zOiBkYXRhLml0ZW1zXHJcbiAgICAgICAgfSwgbnVsbCwgMiksXHJcbiAgICAgICAgeyBlbmNvZGluZzogJ3V0ZjgnLCBtb2RlOiAwbzYwMCB9XHJcbiAgICApO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZW5xdWV1ZUNvbm5lY3RvckV2ZW50cyhcclxuICAgIHN1YnNjcmlwdGlvbklkOiBzdHJpbmcsXHJcbiAgICBldmVudHM6IENvbm5lY3RvckV2ZW50UGF5bG9hZFtdLFxyXG4gICAgbm93ID0gRGF0ZS5ub3coKSxcclxuICAgIG1heEl0ZW1zID0gZ2V0UXVldWVMaW1pdCgpXHJcbik6IHsgZW5xdWV1ZWQ6IG51bWJlcjsgbGFzdFNlcXVlbmNlOiBudW1iZXIgfCBudWxsIH0ge1xyXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGV2ZW50cykgfHwgZXZlbnRzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIHJldHVybiB7IGVucXVldWVkOiAwLCBsYXN0U2VxdWVuY2U6IG51bGwgfTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBkYXRhID0gcmVhZFF1ZXVlRmlsZSgpO1xyXG4gICAgY29uc3QgZXhpc3RpbmdFdmVudElkcyA9IG5ldyBTZXQoZGF0YS5pdGVtcy5tYXAoaXRlbSA9PiBpdGVtLmV2ZW50SWQpKTtcclxuICAgIGxldCBlbnF1ZXVlZCA9IDA7XHJcbiAgICBsZXQgbGFzdFNlcXVlbmNlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgICBmb3IgKGNvbnN0IGV2ZW50IG9mIGV2ZW50cykge1xyXG4gICAgICAgIGlmICghZXZlbnQ/LmV2ZW50SWQgfHwgdHlwZW9mIGV2ZW50LnNlcXVlbmNlICE9PSAnbnVtYmVyJykgY29udGludWU7XHJcbiAgICAgICAgaWYgKGV4aXN0aW5nRXZlbnRJZHMuaGFzKGV2ZW50LmV2ZW50SWQpKSB7XHJcbiAgICAgICAgICAgIGxhc3RTZXF1ZW5jZSA9IGxhc3RTZXF1ZW5jZSA9PT0gbnVsbCA/IGV2ZW50LnNlcXVlbmNlIDogTWF0aC5tYXgobGFzdFNlcXVlbmNlLCBldmVudC5zZXF1ZW5jZSk7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZGF0YS5pdGVtcy5wdXNoKHtcclxuICAgICAgICAgICAgcXVldWVJZDogcmFuZG9tVVVJRCgpLFxyXG4gICAgICAgICAgICBldmVudElkOiBldmVudC5ldmVudElkLFxyXG4gICAgICAgICAgICBzdWJzY3JpcHRpb25JZCxcclxuICAgICAgICAgICAgc2VxdWVuY2U6IGV2ZW50LnNlcXVlbmNlLFxyXG4gICAgICAgICAgICBjb250ZXh0SWQ6IGV2ZW50LmNvbnRleHRJZCA/PyBudWxsLFxyXG4gICAgICAgICAgICB0eXBlOiBldmVudC50eXBlLFxyXG4gICAgICAgICAgICB0aW1lc3RhbXA6IGV2ZW50LnRpbWVzdGFtcCxcclxuICAgICAgICAgICAgc291cmNlOiBldmVudC5zb3VyY2UsXHJcbiAgICAgICAgICAgIHBheWxvYWQ6IGV2ZW50LnBheWxvYWQgPz8ge30sXHJcbiAgICAgICAgICAgIGVucXVldWVkQXQ6IG5vdyxcclxuICAgICAgICAgICAgYXR0ZW1wdHM6IDAsXHJcbiAgICAgICAgICAgIG5leHRBdHRlbXB0QXQ6IG5vdyxcclxuICAgICAgICAgICAgbGFzdEVycm9yOiBudWxsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgZXhpc3RpbmdFdmVudElkcy5hZGQoZXZlbnQuZXZlbnRJZCk7XHJcbiAgICAgICAgZW5xdWV1ZWQgKz0gMTtcclxuICAgICAgICBsYXN0U2VxdWVuY2UgPSBsYXN0U2VxdWVuY2UgPT09IG51bGwgPyBldmVudC5zZXF1ZW5jZSA6IE1hdGgubWF4KGxhc3RTZXF1ZW5jZSwgZXZlbnQuc2VxdWVuY2UpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHBydW5lUmVzdWx0ID0gcHJ1bmVDb25uZWN0b3JRdWV1ZSh7XHJcbiAgICAgICAgbm93LFxyXG4gICAgICAgIG1heEl0ZW1zLFxyXG4gICAgICAgIG1heEFnZU1zOiBnZXRRdWV1ZU1heEFnZU1zKCksXHJcbiAgICAgICAgX2RhdGE6IGRhdGFcclxuICAgIH0pO1xyXG5cclxuICAgIGlmIChlbnF1ZXVlZCA+IDAgfHwgcHJ1bmVSZXN1bHQucmVtb3ZlZCA+IDApIHtcclxuICAgICAgICB3cml0ZVF1ZXVlRmlsZShkYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4geyBlbnF1ZXVlZCwgbGFzdFNlcXVlbmNlIH07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRSZWFkeUNvbm5lY3RvckV2ZW50cyhsaW1pdCA9IERFRkFVTFRfQkFUQ0hfTElNSVQsIG5vdyA9IERhdGUubm93KCkpOiBRdWV1ZWRDb25uZWN0b3JFdmVudFtdIHtcclxuICAgIGNvbnN0IGRhdGEgPSByZWFkUXVldWVGaWxlKCk7XHJcbiAgICBjb25zdCBzYWZlTGltaXQgPSBNYXRoLm1heCgxLCBNYXRoLm1pbihERUZBVUxUX0JBVENIX0xJTUlULCBNYXRoLmZsb29yKGxpbWl0KSkpO1xyXG4gICAgcmV0dXJuIGRhdGEuaXRlbXNcclxuICAgICAgICAuZmlsdGVyKGl0ZW0gPT4gaXRlbS5uZXh0QXR0ZW1wdEF0IDw9IG5vdylcclxuICAgICAgICAuc29ydCgoYSwgYikgPT4gYS5zZXF1ZW5jZSAtIGIuc2VxdWVuY2UgfHwgYS5lbnF1ZXVlZEF0IC0gYi5lbnF1ZXVlZEF0KVxyXG4gICAgICAgIC5zbGljZSgwLCBzYWZlTGltaXQpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbGlzdFF1ZXVlZENvbm5lY3RvckV2ZW50cygpOiBRdWV1ZWRDb25uZWN0b3JFdmVudFtdIHtcclxuICAgIGNvbnN0IGRhdGEgPSByZWFkUXVldWVGaWxlKCk7XHJcbiAgICByZXR1cm4gWy4uLmRhdGEuaXRlbXNdLnNvcnQoKGEsIGIpID0+IGEuc2VxdWVuY2UgLSBiLnNlcXVlbmNlIHx8IGEuZW5xdWV1ZWRBdCAtIGIuZW5xdWV1ZWRBdCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBtYXJrQ29ubmVjdG9yRXZlbnRzRGVsaXZlcmVkKHF1ZXVlSWRzOiBzdHJpbmdbXSk6IHZvaWQge1xyXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHF1ZXVlSWRzKSB8fCBxdWV1ZUlkcy5sZW5ndGggPT09IDApIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBpZFNldCA9IG5ldyBTZXQocXVldWVJZHMpO1xyXG4gICAgY29uc3QgZGF0YSA9IHJlYWRRdWV1ZUZpbGUoKTtcclxuICAgIGNvbnN0IGJlZm9yZSA9IGRhdGEuaXRlbXMubGVuZ3RoO1xyXG4gICAgZGF0YS5pdGVtcyA9IGRhdGEuaXRlbXMuZmlsdGVyKGl0ZW0gPT4gIWlkU2V0LmhhcyhpdGVtLnF1ZXVlSWQpKTtcclxuICAgIGlmIChkYXRhLml0ZW1zLmxlbmd0aCAhPT0gYmVmb3JlKSB7XHJcbiAgICAgICAgd3JpdGVRdWV1ZUZpbGUoZGF0YSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBtYXJrQ29ubmVjdG9yRXZlbnRzRmFpbGVkKHF1ZXVlSWRzOiBzdHJpbmdbXSwgZXJyb3I6IHN0cmluZywgbm93ID0gRGF0ZS5ub3coKSk6IHZvaWQge1xyXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHF1ZXVlSWRzKSB8fCBxdWV1ZUlkcy5sZW5ndGggPT09IDApIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBpZFNldCA9IG5ldyBTZXQocXVldWVJZHMpO1xyXG4gICAgY29uc3QgZGF0YSA9IHJlYWRRdWV1ZUZpbGUoKTtcclxuICAgIGxldCBjaGFuZ2VkID0gZmFsc2U7XHJcblxyXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGRhdGEuaXRlbXMpIHtcclxuICAgICAgICBpZiAoIWlkU2V0LmhhcyhpdGVtLnF1ZXVlSWQpKSBjb250aW51ZTtcclxuICAgICAgICBpdGVtLmF0dGVtcHRzICs9IDE7XHJcbiAgICAgICAgaXRlbS5sYXN0RXJyb3IgPSBlcnJvcjtcclxuICAgICAgICBpdGVtLm5leHRBdHRlbXB0QXQgPSBub3cgKyBjb21wdXRlQmFja29mZk1zKGl0ZW0uYXR0ZW1wdHMpO1xyXG4gICAgICAgIGNoYW5nZWQgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjaGFuZ2VkKSB3cml0ZVF1ZXVlRmlsZShkYXRhKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbm5lY3RvclF1ZXVlU3RhdHMobm93ID0gRGF0ZS5ub3coKSk6IENvbm5lY3RvclF1ZXVlU3RhdHMge1xyXG4gICAgY29uc3QgZGF0YSA9IHJlYWRRdWV1ZUZpbGUoKTtcclxuICAgIGNvbnN0IHBlbmRpbmcgPSBkYXRhLml0ZW1zLmxlbmd0aDtcclxuICAgIGxldCByZWFkeSA9IDA7XHJcbiAgICBsZXQgbWF4QXR0ZW1wdHMgPSAwO1xyXG4gICAgbGV0IG9sZGVzdEVucXVldWVkQXQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cclxuICAgIGZvciAoY29uc3QgaXRlbSBvZiBkYXRhLml0ZW1zKSB7XHJcbiAgICAgICAgaWYgKGl0ZW0ubmV4dEF0dGVtcHRBdCA8PSBub3cpIHJlYWR5ICs9IDE7XHJcbiAgICAgICAgaWYgKGl0ZW0uYXR0ZW1wdHMgPiBtYXhBdHRlbXB0cykgbWF4QXR0ZW1wdHMgPSBpdGVtLmF0dGVtcHRzO1xyXG4gICAgICAgIGlmIChvbGRlc3RFbnF1ZXVlZEF0ID09PSBudWxsIHx8IGl0ZW0uZW5xdWV1ZWRBdCA8IG9sZGVzdEVucXVldWVkQXQpIHtcclxuICAgICAgICAgICAgb2xkZXN0RW5xdWV1ZWRBdCA9IGl0ZW0uZW5xdWV1ZWRBdDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBwZW5kaW5nLFxyXG4gICAgICAgIHJlYWR5LFxyXG4gICAgICAgIGJhY2tvZmY6IE1hdGgubWF4KDAsIHBlbmRpbmcgLSByZWFkeSksXHJcbiAgICAgICAgbWF4QXR0ZW1wdHMsXHJcbiAgICAgICAgb2xkZXN0RW5xdWV1ZWRBdFxyXG4gICAgfTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHB1cmdlQ29ubmVjdG9yUXVldWUob3B0aW9uczogQ29ubmVjdG9yUXVldWVQdXJnZU9wdGlvbnMgPSB7fSk6IENvbm5lY3RvclF1ZXVlUHVyZ2VSZXN1bHQge1xyXG4gICAgY29uc3QgZGF0YSA9IHJlYWRRdWV1ZUZpbGUoKTtcclxuICAgIGNvbnN0IGJlZm9yZSA9IGRhdGEuaXRlbXMubGVuZ3RoO1xyXG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcclxuXHJcbiAgICBpZiAob3B0aW9ucy5hbGwpIHtcclxuICAgICAgICBkYXRhLml0ZW1zID0gW107XHJcbiAgICAgICAgd3JpdGVRdWV1ZUZpbGUoZGF0YSk7XHJcbiAgICAgICAgcmV0dXJuIHsgcmVtb3ZlZDogYmVmb3JlLCByZW1haW5pbmc6IDAgfTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBvbGRlclRoYW5NcyA9IHR5cGVvZiBvcHRpb25zLm9sZGVyVGhhbkhvdXJzID09PSAnbnVtYmVyJyAmJiBvcHRpb25zLm9sZGVyVGhhbkhvdXJzID4gMFxyXG4gICAgICAgID8gb3B0aW9ucy5vbGRlclRoYW5Ib3VycyAqIDYwICogNjAgKiAxMDAwXHJcbiAgICAgICAgOiBudWxsO1xyXG4gICAgY29uc3QgbWluQXR0ZW1wdHMgPSB0eXBlb2Ygb3B0aW9ucy5taW5BdHRlbXB0cyA9PT0gJ251bWJlcicgJiYgb3B0aW9ucy5taW5BdHRlbXB0cyA+IDBcclxuICAgICAgICA/IE1hdGguZmxvb3Iob3B0aW9ucy5taW5BdHRlbXB0cylcclxuICAgICAgICA6IG51bGw7XHJcblxyXG4gICAgaWYgKG9sZGVyVGhhbk1zID09PSBudWxsICYmIG1pbkF0dGVtcHRzID09PSBudWxsKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgcmVtb3ZlZDogMCwgcmVtYWluaW5nOiBiZWZvcmUgfTtcclxuICAgIH1cclxuXHJcbiAgICBkYXRhLml0ZW1zID0gZGF0YS5pdGVtcy5maWx0ZXIoaXRlbSA9PiB7XHJcbiAgICAgICAgY29uc3Qgb2xkZXJNYXRjaCA9IG9sZGVyVGhhbk1zICE9PSBudWxsID8gKG5vdyAtIGl0ZW0uZW5xdWV1ZWRBdCkgPj0gb2xkZXJUaGFuTXMgOiBmYWxzZTtcclxuICAgICAgICBjb25zdCBhdHRlbXB0c01hdGNoID0gbWluQXR0ZW1wdHMgIT09IG51bGwgPyBpdGVtLmF0dGVtcHRzID49IG1pbkF0dGVtcHRzIDogZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuICEob2xkZXJNYXRjaCB8fCBhdHRlbXB0c01hdGNoKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGlmIChkYXRhLml0ZW1zLmxlbmd0aCAhPT0gYmVmb3JlKSB7XHJcbiAgICAgICAgd3JpdGVRdWV1ZUZpbGUoZGF0YSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4geyByZW1vdmVkOiBiZWZvcmUgLSBkYXRhLml0ZW1zLmxlbmd0aCwgcmVtYWluaW5nOiBkYXRhLml0ZW1zLmxlbmd0aCB9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcHJ1bmVDb25uZWN0b3JRdWV1ZShpbnB1dD86IHtcclxuICAgIG5vdz86IG51bWJlcjtcclxuICAgIG1heEl0ZW1zPzogbnVtYmVyO1xyXG4gICAgbWF4QWdlTXM/OiBudW1iZXI7XHJcbiAgICBfZGF0YT86IENvbm5lY3RvclF1ZXVlRmlsZTtcclxufSk6IENvbm5lY3RvclF1ZXVlUHVyZ2VSZXN1bHQge1xyXG4gICAgY29uc3Qgbm93ID0gaW5wdXQ/Lm5vdyA/PyBEYXRlLm5vdygpO1xyXG4gICAgY29uc3QgbWF4SXRlbXMgPSBpbnB1dD8ubWF4SXRlbXMgPz8gZ2V0UXVldWVMaW1pdCgpO1xyXG4gICAgY29uc3QgbWF4QWdlTXMgPSBpbnB1dD8ubWF4QWdlTXMgPz8gZ2V0UXVldWVNYXhBZ2VNcygpO1xyXG4gICAgY29uc3QgZGF0YSA9IGlucHV0Py5fZGF0YSA/PyByZWFkUXVldWVGaWxlKCk7XHJcbiAgICBjb25zdCBiZWZvcmUgPSBkYXRhLml0ZW1zLmxlbmd0aDtcclxuXHJcbiAgICBpZiAobWF4QWdlTXMgPiAwKSB7XHJcbiAgICAgICAgZGF0YS5pdGVtcyA9IGRhdGEuaXRlbXMuZmlsdGVyKGl0ZW0gPT4gKG5vdyAtIGl0ZW0uZW5xdWV1ZWRBdCkgPD0gbWF4QWdlTXMpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChkYXRhLml0ZW1zLmxlbmd0aCA+IG1heEl0ZW1zKSB7XHJcbiAgICAgICAgZGF0YS5pdGVtcy5zb3J0KChhLCBiKSA9PiBhLnNlcXVlbmNlIC0gYi5zZXF1ZW5jZSB8fCBhLmVucXVldWVkQXQgLSBiLmVucXVldWVkQXQpO1xyXG4gICAgICAgIGRhdGEuaXRlbXMuc3BsaWNlKDAsIGRhdGEuaXRlbXMubGVuZ3RoIC0gbWF4SXRlbXMpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghaW5wdXQ/Ll9kYXRhICYmIGRhdGEuaXRlbXMubGVuZ3RoICE9PSBiZWZvcmUpIHtcclxuICAgICAgICB3cml0ZVF1ZXVlRmlsZShkYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4geyByZW1vdmVkOiBiZWZvcmUgLSBkYXRhLml0ZW1zLmxlbmd0aCwgcmVtYWluaW5nOiBkYXRhLml0ZW1zLmxlbmd0aCB9O1xyXG59XHJcbiIsICJpbXBvcnQgZnMgZnJvbSAnZnMnO1xyXG5pbXBvcnQgb3MgZnJvbSAnb3MnO1xyXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcclxuXHJcbmxldCBvcHNMb2dXcml0ZVdhcm5pbmdFbWl0dGVkID0gZmFsc2U7XHJcblxyXG5leHBvcnQgdHlwZSBDbGlPcHNTdGF0dXMgPSAnc3VjY2VzcycgfCAnZXJyb3InIHwgJ3BhcnRpYWwnIHwgJ2RyeV9ydW4nO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDbGlPcHNMb2dFbnRyeSB7XHJcbiAgICB0aW1lc3RhbXA6IG51bWJlcjtcclxuICAgIG9wZXJhdGlvbjogc3RyaW5nO1xyXG4gICAgc3RhdHVzOiBDbGlPcHNTdGF0dXM7XHJcbiAgICBkZXRhaWxzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRDbGlPcHNMb2dQYXRoKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gcHJvY2Vzcy5lbnYuQ1RYX0NMSV9PUFNfTE9HX1BBVEggfHwgcGF0aC5qb2luKG9zLmhvbWVkaXIoKSwgJy4wY3R4JywgJ29wcy5sb2cnKTtcclxufVxyXG5cclxuZnVuY3Rpb24gZW5zdXJlRGlyKGZpbGVQYXRoOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGZzLm1rZGlyU3luYyhwYXRoLmRpcm5hbWUoZmlsZVBhdGgpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGFwcGVuZENsaU9wc0xvZ0VudHJ5KGVudHJ5OiBPbWl0PENsaU9wc0xvZ0VudHJ5LCAndGltZXN0YW1wJz4gJiB7IHRpbWVzdGFtcD86IG51bWJlciB9KTogdm9pZCB7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IGZpbGVQYXRoID0gZ2V0Q2xpT3BzTG9nUGF0aCgpO1xyXG4gICAgICAgIGVuc3VyZURpcihmaWxlUGF0aCk7XHJcbiAgICAgICAgY29uc3QgbGluZSA9IEpTT04uc3RyaW5naWZ5KHtcclxuICAgICAgICAgICAgdGltZXN0YW1wOiBlbnRyeS50aW1lc3RhbXAgPz8gRGF0ZS5ub3coKSxcclxuICAgICAgICAgICAgb3BlcmF0aW9uOiBlbnRyeS5vcGVyYXRpb24sXHJcbiAgICAgICAgICAgIHN0YXR1czogZW50cnkuc3RhdHVzLFxyXG4gICAgICAgICAgICBkZXRhaWxzOiBlbnRyeS5kZXRhaWxzID8/IHt9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgZnMuYXBwZW5kRmlsZVN5bmMoZmlsZVBhdGgsIGAke2xpbmV9XFxuYCwgeyBlbmNvZGluZzogJ3V0ZjgnLCBtb2RlOiAwbzYwMCB9KTtcclxuICAgIH0gY2F0Y2gge1xyXG4gICAgICAgIC8vIEJlc3QtZWZmb3J0IGxvY2FsIGF1ZGl0IGxvZ2dpbmcgb25seTsgZW1pdCBvbmUgd2FybmluZyBmb3Igb3BlcmF0b3IgdmlzaWJpbGl0eS5cclxuICAgICAgICBpZiAoIW9wc0xvZ1dyaXRlV2FybmluZ0VtaXR0ZWQpIHtcclxuICAgICAgICAgICAgb3BzTG9nV3JpdGVXYXJuaW5nRW1pdHRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHByb2Nlc3Muc3RkZXJyLndyaXRlKCcwY3R4X3dhcm5pbmc6IGZhaWxlZCB0byB3cml0ZSBDTEkgb3BzIGxvZ1xcbicpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRDbGlPcHNMb2cobGltaXQgPSAxMDApOiBDbGlPcHNMb2dFbnRyeVtdIHtcclxuICAgIGNvbnN0IHNhZmVMaW1pdCA9IE1hdGgubWF4KDEsIE1hdGguZmxvb3IobGltaXQpKTtcclxuICAgIGNvbnN0IGZpbGVQYXRoID0gZ2V0Q2xpT3BzTG9nUGF0aCgpO1xyXG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKGZpbGVQYXRoKSkgcmV0dXJuIFtdO1xyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgICAgY29uc3QgbGluZXMgPSBmcy5yZWFkRmlsZVN5bmMoZmlsZVBhdGgsICd1dGY4JylcclxuICAgICAgICAgICAgLnNwbGl0KC9cXHI/XFxuLylcclxuICAgICAgICAgICAgLmZpbHRlcihCb29sZWFuKTtcclxuICAgICAgICBjb25zdCByZXN1bHQ6IENsaU9wc0xvZ0VudHJ5W10gPSBbXTtcclxuXHJcbiAgICAgICAgZm9yIChjb25zdCBsaW5lIG9mIGxpbmVzLnNsaWNlKC1zYWZlTGltaXQpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UobGluZSkgYXMgUGFydGlhbDxDbGlPcHNMb2dFbnRyeT47XHJcbiAgICAgICAgICAgIGlmICghcGFyc2VkIHx8IHR5cGVvZiBwYXJzZWQudGltZXN0YW1wICE9PSAnbnVtYmVyJyB8fCB0eXBlb2YgcGFyc2VkLm9wZXJhdGlvbiAhPT0gJ3N0cmluZycgfHwgdHlwZW9mIHBhcnNlZC5zdGF0dXMgIT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3Qgbm9ybWFsaXplZFN0YXR1czogQ2xpT3BzU3RhdHVzID0gcGFyc2VkLnN0YXR1cyA9PT0gJ3N1Y2Nlc3MnXHJcbiAgICAgICAgICAgICAgICB8fCBwYXJzZWQuc3RhdHVzID09PSAnZXJyb3InXHJcbiAgICAgICAgICAgICAgICB8fCBwYXJzZWQuc3RhdHVzID09PSAncGFydGlhbCdcclxuICAgICAgICAgICAgICAgIHx8IHBhcnNlZC5zdGF0dXMgPT09ICdkcnlfcnVuJ1xyXG4gICAgICAgICAgICAgICAgPyBwYXJzZWQuc3RhdHVzXHJcbiAgICAgICAgICAgICAgICA6ICdlcnJvcic7XHJcblxyXG4gICAgICAgICAgICByZXN1bHQucHVzaCh7XHJcbiAgICAgICAgICAgICAgICB0aW1lc3RhbXA6IHBhcnNlZC50aW1lc3RhbXAsXHJcbiAgICAgICAgICAgICAgICBvcGVyYXRpb246IHBhcnNlZC5vcGVyYXRpb24sXHJcbiAgICAgICAgICAgICAgICBzdGF0dXM6IG5vcm1hbGl6ZWRTdGF0dXMsXHJcbiAgICAgICAgICAgICAgICBkZXRhaWxzOiBwYXJzZWQuZGV0YWlscyAmJiB0eXBlb2YgcGFyc2VkLmRldGFpbHMgPT09ICdvYmplY3QnID8gcGFyc2VkLmRldGFpbHMgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gOiB7fVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9IGNhdGNoIHtcclxuICAgICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjbGVhckNsaU9wc0xvZygpOiB7IGNsZWFyZWQ6IGJvb2xlYW47IHBhdGg6IHN0cmluZyB9IHtcclxuICAgIGNvbnN0IGZpbGVQYXRoID0gZ2V0Q2xpT3BzTG9nUGF0aCgpO1xyXG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKGZpbGVQYXRoKSkge1xyXG4gICAgICAgIHJldHVybiB7IGNsZWFyZWQ6IGZhbHNlLCBwYXRoOiBmaWxlUGF0aCB9O1xyXG4gICAgfVxyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgICAgZnMucm1TeW5jKGZpbGVQYXRoLCB7IGZvcmNlOiB0cnVlIH0pO1xyXG4gICAgICAgIHJldHVybiB7IGNsZWFyZWQ6IHRydWUsIHBhdGg6IGZpbGVQYXRoIH07XHJcbiAgICB9IGNhdGNoIHtcclxuICAgICAgICByZXR1cm4geyBjbGVhcmVkOiBmYWxzZSwgcGF0aDogZmlsZVBhdGggfTtcclxuICAgIH1cclxufVxyXG4iLCAiaW1wb3J0IHR5cGUgeyBDb25uZWN0b3JRdWV1ZVN0YXRzLCBRdWV1ZWRDb25uZWN0b3JFdmVudCB9IGZyb20gJy4vY29ubmVjdG9yLXF1ZXVlJztcclxuaW1wb3J0IHR5cGUgeyBDb25uZWN0b3JFdmVudFBheWxvYWQgfSBmcm9tICcuL2Nsb3VkJztcclxuXHJcbmV4cG9ydCB0eXBlIENvbm5lY3RvclF1ZXVlRHJhaW5SZWFzb24gPVxyXG4gICAgfCAnZHJhaW5lZCdcclxuICAgIHwgJ2JyaWRnZV91bnN1cHBvcnRlZCdcclxuICAgIHwgJ3RpbWVvdXQnXHJcbiAgICB8ICdtYXhfYmF0Y2hlcydcclxuICAgIHwgJ3BlbmRpbmcnXHJcbiAgICB8ICdzaW5nbGVfcGFzcyc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENvbm5lY3RvclF1ZXVlRHJhaW5PcHRpb25zIHtcclxuICAgIG1hY2hpbmVJZDogc3RyaW5nO1xyXG4gICAgdGVuYW50SWQ6IHN0cmluZyB8IG51bGw7XHJcbiAgICBhY2Nlc3NUb2tlbjogc3RyaW5nO1xyXG4gICAgbWF4QmF0Y2hlczogbnVtYmVyO1xyXG4gICAgYmF0Y2hTaXplOiBudW1iZXI7XHJcbiAgICB3YWl0OiBib29sZWFuO1xyXG4gICAgdGltZW91dE1zOiBudW1iZXI7XHJcbiAgICBwb2xsTXM6IG51bWJlcjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDb25uZWN0b3JRdWV1ZURyYWluRGVwZW5kZW5jaWVzIHtcclxuICAgIG5vdygpOiBudW1iZXI7XHJcbiAgICBzbGVlcChtczogbnVtYmVyKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIGdldFJlYWR5RXZlbnRzKGxpbWl0OiBudW1iZXIsIG5vdzogbnVtYmVyKTogUXVldWVkQ29ubmVjdG9yRXZlbnRbXTtcclxuICAgIHNlbmRFdmVudHMoXHJcbiAgICAgICAgYWNjZXNzVG9rZW46IHN0cmluZyxcclxuICAgICAgICBwYXlsb2FkOiB7XHJcbiAgICAgICAgICAgIG1hY2hpbmVJZDogc3RyaW5nO1xyXG4gICAgICAgICAgICB0ZW5hbnRJZDogc3RyaW5nIHwgbnVsbDtcclxuICAgICAgICAgICAgc3Vic2NyaXB0aW9uSWQ6IHN0cmluZztcclxuICAgICAgICAgICAgY3Vyc29yOiBudW1iZXI7XHJcbiAgICAgICAgICAgIGV2ZW50czogQ29ubmVjdG9yRXZlbnRQYXlsb2FkW107XHJcbiAgICAgICAgfVxyXG4gICAgKTogUHJvbWlzZTx7IG9rOiBib29sZWFuOyBlcnJvcj86IHN0cmluZzsgc3RhdHVzQ29kZTogbnVtYmVyIH0+O1xyXG4gICAgbWFya0V2ZW50c0RlbGl2ZXJlZChxdWV1ZUlkczogc3RyaW5nW10pOiB2b2lkO1xyXG4gICAgbWFya0V2ZW50c0ZhaWxlZChxdWV1ZUlkczogc3RyaW5nW10sIGVycm9yOiBzdHJpbmcsIG5vdzogbnVtYmVyKTogdm9pZDtcclxuICAgIGdldFF1ZXVlU3RhdHMobm93OiBudW1iZXIpOiBDb25uZWN0b3JRdWV1ZVN0YXRzO1xyXG4gICAgb25CcmlkZ2VVbnN1cHBvcnRlZCgpOiB2b2lkIHwgUHJvbWlzZTx2b2lkPjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDb25uZWN0b3JRdWV1ZURyYWluUmVzdWx0IHtcclxuICAgIHNlbnQ6IG51bWJlcjtcclxuICAgIGZhaWxlZDogbnVtYmVyO1xyXG4gICAgYmF0Y2hlczogbnVtYmVyO1xyXG4gICAgcXVldWU6IENvbm5lY3RvclF1ZXVlU3RhdHM7XHJcbiAgICBsYXN0RXJyb3I6IHN0cmluZyB8IG51bGw7XHJcbiAgICB3YWl0OiB7XHJcbiAgICAgICAgZW5hYmxlZDogYm9vbGVhbjtcclxuICAgICAgICB0aW1lb3V0TXM6IG51bWJlcjtcclxuICAgICAgICBwb2xsTXM6IG51bWJlcjtcclxuICAgICAgICBlbGFwc2VkTXM6IG51bWJlcjtcclxuICAgICAgICB0aW1lZE91dDogYm9vbGVhbjtcclxuICAgICAgICBoaXRNYXhCYXRjaGVzOiBib29sZWFuO1xyXG4gICAgICAgIHJlYXNvbjogQ29ubmVjdG9yUXVldWVEcmFpblJlYXNvbjtcclxuICAgIH07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHRvQ2xvdWRFdmVudHMoYmF0Y2g6IFF1ZXVlZENvbm5lY3RvckV2ZW50W10pOiBDb25uZWN0b3JFdmVudFBheWxvYWRbXSB7XHJcbiAgICByZXR1cm4gYmF0Y2gubWFwKGl0ZW0gPT4gKHtcclxuICAgICAgICBldmVudElkOiBpdGVtLmV2ZW50SWQsXHJcbiAgICAgICAgc2VxdWVuY2U6IGl0ZW0uc2VxdWVuY2UsXHJcbiAgICAgICAgY29udGV4dElkOiBpdGVtLmNvbnRleHRJZCxcclxuICAgICAgICB0eXBlOiBpdGVtLnR5cGUsXHJcbiAgICAgICAgdGltZXN0YW1wOiBpdGVtLnRpbWVzdGFtcCxcclxuICAgICAgICBzb3VyY2U6IGl0ZW0uc291cmNlLFxyXG4gICAgICAgIHBheWxvYWQ6IGl0ZW0ucGF5bG9hZFxyXG4gICAgfSkpO1xyXG59XHJcblxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZHJhaW5Db25uZWN0b3JRdWV1ZShcclxuICAgIG9wdGlvbnM6IENvbm5lY3RvclF1ZXVlRHJhaW5PcHRpb25zLFxyXG4gICAgZGVwczogQ29ubmVjdG9yUXVldWVEcmFpbkRlcGVuZGVuY2llc1xyXG4pOiBQcm9taXNlPENvbm5lY3RvclF1ZXVlRHJhaW5SZXN1bHQ+IHtcclxuICAgIGNvbnN0IHN0YXJ0ZWRBdCA9IGRlcHMubm93KCk7XHJcbiAgICBjb25zdCBkZWFkbGluZSA9IG9wdGlvbnMud2FpdCA/IHN0YXJ0ZWRBdCArIG9wdGlvbnMudGltZW91dE1zIDogc3RhcnRlZEF0O1xyXG4gICAgbGV0IHNlbnQgPSAwO1xyXG4gICAgbGV0IGZhaWxlZCA9IDA7XHJcbiAgICBsZXQgYmF0Y2hlcyA9IDA7XHJcbiAgICBsZXQgbGFzdEVycm9yOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuICAgIGxldCB0aW1lZE91dCA9IGZhbHNlO1xyXG4gICAgbGV0IGhpdE1heEJhdGNoZXMgPSBmYWxzZTtcclxuICAgIGxldCBicmlkZ2VVbnN1cHBvcnRlZCA9IGZhbHNlO1xyXG5cclxuICAgIHdoaWxlICh0cnVlKSB7XHJcbiAgICAgICAgd2hpbGUgKGJhdGNoZXMgPCBvcHRpb25zLm1heEJhdGNoZXMpIHtcclxuICAgICAgICAgICAgY29uc3QgYmF0Y2ggPSBkZXBzLmdldFJlYWR5RXZlbnRzKG9wdGlvbnMuYmF0Y2hTaXplLCBkZXBzLm5vdygpKTtcclxuICAgICAgICAgICAgaWYgKGJhdGNoLmxlbmd0aCA9PT0gMCkgYnJlYWs7XHJcbiAgICAgICAgICAgIGJhdGNoZXMgKz0gMTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnNvciA9IGJhdGNoLnJlZHVjZSgobWF4LCBpdGVtKSA9PiBNYXRoLm1heChtYXgsIGl0ZW0uc2VxdWVuY2UpLCAwKTtcclxuICAgICAgICAgICAgY29uc3QgcGF5bG9hZCA9IHtcclxuICAgICAgICAgICAgICAgIG1hY2hpbmVJZDogb3B0aW9ucy5tYWNoaW5lSWQsXHJcbiAgICAgICAgICAgICAgICB0ZW5hbnRJZDogb3B0aW9ucy50ZW5hbnRJZCxcclxuICAgICAgICAgICAgICAgIHN1YnNjcmlwdGlvbklkOiBiYXRjaFswXS5zdWJzY3JpcHRpb25JZCxcclxuICAgICAgICAgICAgICAgIGN1cnNvcixcclxuICAgICAgICAgICAgICAgIGV2ZW50czogdG9DbG91ZEV2ZW50cyhiYXRjaClcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRlcHMuc2VuZEV2ZW50cyhvcHRpb25zLmFjY2Vzc1Rva2VuLCBwYXlsb2FkKTtcclxuICAgICAgICAgICAgY29uc3QgcXVldWVJZHMgPSBiYXRjaC5tYXAoaXRlbSA9PiBpdGVtLnF1ZXVlSWQpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHJlc3VsdC5vaykge1xyXG4gICAgICAgICAgICAgICAgZGVwcy5tYXJrRXZlbnRzRGVsaXZlcmVkKHF1ZXVlSWRzKTtcclxuICAgICAgICAgICAgICAgIHNlbnQgKz0gYmF0Y2gubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGVycm9yVGV4dCA9IHJlc3VsdC5lcnJvciA/PyAnY29ubmVjdG9yX3F1ZXVlX2RyYWluX2ZhaWxlZCc7XHJcbiAgICAgICAgICAgIGRlcHMubWFya0V2ZW50c0ZhaWxlZChxdWV1ZUlkcywgZXJyb3JUZXh0LCBkZXBzLm5vdygpKTtcclxuICAgICAgICAgICAgZmFpbGVkICs9IGJhdGNoLmxlbmd0aDtcclxuICAgICAgICAgICAgbGFzdEVycm9yID0gZXJyb3JUZXh0O1xyXG5cclxuICAgICAgICAgICAgaWYgKHJlc3VsdC5zdGF0dXNDb2RlID09PSA0MDQpIHtcclxuICAgICAgICAgICAgICAgIGJyaWRnZVVuc3VwcG9ydGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IGRlcHMub25CcmlkZ2VVbnN1cHBvcnRlZCgpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIW9wdGlvbnMud2FpdCkgYnJlYWs7XHJcblxyXG4gICAgICAgIGNvbnN0IHNuYXBzaG90ID0gZGVwcy5nZXRRdWV1ZVN0YXRzKGRlcHMubm93KCkpO1xyXG4gICAgICAgIGlmIChzbmFwc2hvdC5wZW5kaW5nID09PSAwIHx8IGJyaWRnZVVuc3VwcG9ydGVkKSBicmVhaztcclxuICAgICAgICBpZiAoYmF0Y2hlcyA+PSBvcHRpb25zLm1heEJhdGNoZXMpIHtcclxuICAgICAgICAgICAgaGl0TWF4QmF0Y2hlcyA9IHRydWU7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZGVwcy5ub3coKSA+PSBkZWFkbGluZSkge1xyXG4gICAgICAgICAgICB0aW1lZE91dCA9IHRydWU7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgcmVtYWluaW5nID0gZGVhZGxpbmUgLSBkZXBzLm5vdygpO1xyXG4gICAgICAgIGlmIChyZW1haW5pbmcgPD0gMCkge1xyXG4gICAgICAgICAgICB0aW1lZE91dCA9IHRydWU7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBzbGVlcEZvciA9IE1hdGgubWF4KDEsIE1hdGgubWluKG9wdGlvbnMucG9sbE1zLCByZW1haW5pbmcpKTtcclxuICAgICAgICBhd2FpdCBkZXBzLnNsZWVwKHNsZWVwRm9yKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBxdWV1ZSA9IGRlcHMuZ2V0UXVldWVTdGF0cyhkZXBzLm5vdygpKTtcclxuICAgIGNvbnN0IHJlYXNvbjogQ29ubmVjdG9yUXVldWVEcmFpblJlYXNvbiA9IG9wdGlvbnMud2FpdFxyXG4gICAgICAgID8gKHF1ZXVlLnBlbmRpbmcgPT09IDBcclxuICAgICAgICAgICAgPyAnZHJhaW5lZCdcclxuICAgICAgICAgICAgOiBicmlkZ2VVbnN1cHBvcnRlZFxyXG4gICAgICAgICAgICAgICAgPyAnYnJpZGdlX3Vuc3VwcG9ydGVkJ1xyXG4gICAgICAgICAgICAgICAgOiB0aW1lZE91dFxyXG4gICAgICAgICAgICAgICAgICAgID8gJ3RpbWVvdXQnXHJcbiAgICAgICAgICAgICAgICAgICAgOiBoaXRNYXhCYXRjaGVzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ21heF9iYXRjaGVzJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA6ICdwZW5kaW5nJylcclxuICAgICAgICA6ICdzaW5nbGVfcGFzcyc7XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBzZW50LFxyXG4gICAgICAgIGZhaWxlZCxcclxuICAgICAgICBiYXRjaGVzLFxyXG4gICAgICAgIHF1ZXVlLFxyXG4gICAgICAgIGxhc3RFcnJvcixcclxuICAgICAgICB3YWl0OiB7XHJcbiAgICAgICAgICAgIGVuYWJsZWQ6IG9wdGlvbnMud2FpdCxcclxuICAgICAgICAgICAgdGltZW91dE1zOiBvcHRpb25zLnRpbWVvdXRNcyxcclxuICAgICAgICAgICAgcG9sbE1zOiBvcHRpb25zLnBvbGxNcyxcclxuICAgICAgICAgICAgZWxhcHNlZE1zOiBkZXBzLm5vdygpIC0gc3RhcnRlZEF0LFxyXG4gICAgICAgICAgICB0aW1lZE91dCxcclxuICAgICAgICAgICAgaGl0TWF4QmF0Y2hlcyxcclxuICAgICAgICAgICAgcmVhc29uXHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxufVxyXG4iLCAiaW1wb3J0IGZzIGZyb20gJ2ZzJztcclxuaW1wb3J0IG9zIGZyb20gJ29zJztcclxuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XHJcbmltcG9ydCByZWFkbGluZSBmcm9tICdyZWFkbGluZSc7XHJcbmltcG9ydCB7IHNwYXduIH0gZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XHJcblxyXG5jb25zdCBISVNUT1JZX0xJTUlUID0gNTAwO1xyXG5jb25zdCBERUZBVUxUX1BST01QVF9QTEFJTiA9ICcwY3R4PiAnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBTaGVsbE9wdGlvbnMge1xyXG4gICAgY2xpRW50cnlwb2ludDogc3RyaW5nO1xyXG4gICAgbm9kZUV4ZWNBcmd2Pzogc3RyaW5nW107XHJcbiAgICBwcm9tcHQ/OiBzdHJpbmc7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldEhpc3RvcnlQYXRoKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gcGF0aC5qb2luKG9zLmhvbWVkaXIoKSwgJy4wY3R4JywgJ2hpc3RvcnknKTtcclxufVxyXG5cclxuZnVuY3Rpb24gbG9hZEhpc3RvcnkoKTogc3RyaW5nW10ge1xyXG4gICAgY29uc3QgaGlzdG9yeVBhdGggPSBnZXRIaXN0b3J5UGF0aCgpO1xyXG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKGhpc3RvcnlQYXRoKSkgcmV0dXJuIFtdO1xyXG4gICAgdHJ5IHtcclxuICAgICAgICBjb25zdCBsaW5lcyA9IGZzXHJcbiAgICAgICAgICAgIC5yZWFkRmlsZVN5bmMoaGlzdG9yeVBhdGgsICd1dGY4JylcclxuICAgICAgICAgICAgLnNwbGl0KC9cXHI/XFxuLylcclxuICAgICAgICAgICAgLm1hcChsaW5lID0+IGxpbmUudHJpbSgpKVxyXG4gICAgICAgICAgICAuZmlsdGVyKEJvb2xlYW4pO1xyXG4gICAgICAgIHJldHVybiBsaW5lcy5zbGljZSgtSElTVE9SWV9MSU1JVCk7XHJcbiAgICB9IGNhdGNoIHtcclxuICAgICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGFwcGVuZEhpc3RvcnlFbnRyeShsaW5lOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBsaW5lLnRyaW0oKTtcclxuICAgIGlmICghbm9ybWFsaXplZCkgcmV0dXJuO1xyXG4gICAgY29uc3QgaGlzdG9yeVBhdGggPSBnZXRIaXN0b3J5UGF0aCgpO1xyXG4gICAgZnMubWtkaXJTeW5jKHBhdGguZGlybmFtZShoaXN0b3J5UGF0aCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xyXG4gICAgZnMuYXBwZW5kRmlsZVN5bmMoaGlzdG9yeVBhdGgsIGAke25vcm1hbGl6ZWR9XFxuYCwgJ3V0ZjgnKTtcclxufVxyXG5cclxuZnVuY3Rpb24gcXVlc3Rpb24ocmw6IHJlYWRsaW5lLkludGVyZmFjZSwgcHJvbXB0OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xyXG4gICAgICAgIHJsLnF1ZXN0aW9uKHByb21wdCwgYW5zd2VyID0+IHJlc29sdmUoYW5zd2VyKSk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0QmVzdFN1Z2dlc3Rpb24obGluZTogc3RyaW5nLCBjb21wbGV0aW9uczogc3RyaW5nW10pOiBzdHJpbmcge1xyXG4gICAgY29uc3Qgbm9ybWFsaXplZCA9IGxpbmUudHJpbSgpO1xyXG4gICAgaWYgKCFub3JtYWxpemVkKSByZXR1cm4gJyc7XHJcbiAgICByZXR1cm4gY29tcGxldGlvbnMuZmluZChjID0+IGMuc3RhcnRzV2l0aChub3JtYWxpemVkKSAmJiBjICE9PSBub3JtYWxpemVkKSA/PyAnJztcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0Q29tcGxldGlvbkNhbmRpZGF0ZXMoKTogc3RyaW5nW10ge1xyXG4gICAgcmV0dXJuIFtcclxuICAgICAgICAnL2hlbHAnLFxyXG4gICAgICAgICcvY2xlYXInLFxyXG4gICAgICAgICcvaGlzdG9yeScsXHJcbiAgICAgICAgJy9leGl0JyxcclxuICAgICAgICAnL3ByZXNlbnQtb3B0aW9uJyxcclxuICAgICAgICAnc2V0dXAnLFxyXG4gICAgICAgICdpbnN0YWxsJyxcclxuICAgICAgICAnYm9vdHN0cmFwJyxcclxuICAgICAgICAnZG9jdG9yJyxcclxuICAgICAgICAnc3RhdHVzJyxcclxuICAgICAgICAncmVwYWlyJyxcclxuICAgICAgICAnZGFzaGJvYXJkJyxcclxuICAgICAgICAnc2hlbGwnLFxyXG4gICAgICAgICdyZWxlYXNlIHB1Ymxpc2gnLFxyXG4gICAgICAgICdhdXRoIGxvZ2luJyxcclxuICAgICAgICAnYXV0aCBsb2dvdXQnLFxyXG4gICAgICAgICdhdXRoIHN0YXR1cycsXHJcbiAgICAgICAgJ2NvbmZpZyBsaXN0JyxcclxuICAgICAgICAnY29uZmlnIGdldCcsXHJcbiAgICAgICAgJ2NvbmZpZyBzZXQnLFxyXG4gICAgICAgICdzeW5jIHN0YXR1cycsXHJcbiAgICAgICAgJ3N5bmMgcG9saWN5IGdldCcsXHJcbiAgICAgICAgJ3N5bmMgcG9saWN5IHNldCcsXHJcbiAgICAgICAgJ2Nvbm5lY3RvciBzdGF0dXMnLFxyXG4gICAgICAgICdjb25uZWN0b3IgdmVyaWZ5JyxcclxuICAgICAgICAnY29ubmVjdG9yIHJlZ2lzdGVyJyxcclxuICAgICAgICAnY29ubmVjdG9yIHF1ZXVlIHN0YXR1cycsXHJcbiAgICAgICAgJ2Nvbm5lY3RvciBxdWV1ZSBkcmFpbicsXHJcbiAgICAgICAgJ2Nvbm5lY3RvciBxdWV1ZSBwdXJnZScsXHJcbiAgICAgICAgJ2Nvbm5lY3RvciBxdWV1ZSBsb2dzJyxcclxuICAgICAgICAnZGFlbW9uIHN0YXJ0JyxcclxuICAgICAgICAnZGFlbW9uIHNlcnZpY2Ugc3RhdHVzJ1xyXG4gICAgXTtcclxufVxyXG5cclxuYXN5bmMgZnVuY3Rpb24gcHJpbnRTaGVsbEhlbHAoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBjb25zdCBjb2xvciA9IChhd2FpdCBpbXBvcnQoJ3BpY29jb2xvcnMnKSkuZGVmYXVsdDtcclxuXHJcbiAgICBjb25zdCBsb2dvID0gW1xyXG4gICAgICAgIGAgIF9fXyAgICAgIF8gICAgICAgICAgYCxcclxuICAgICAgICBgIC8gXyBcXFxcIF9fX3wgfF9fX18gIF9fIGAsXHJcbiAgICAgICAgYHwgfCB8IC8gX198IF9fXFxcXCBcXFxcLyAvICBgLFxyXG4gICAgICAgIGB8IHxffCBcXFxcX18gXFxcXCB8XyA+ICA8ICAgYCxcclxuICAgICAgICBgIFxcXFxfX18vfF9fXy9cXFxcX18vXy9cXFxcX1xcXFwgIGBcclxuICAgIF07XHJcblxyXG4gICAgY29uc29sZS5sb2coKTtcclxuICAgIGZvciAoY29uc3QgbGluZSBvZiBsb2dvKSB7XHJcbiAgICAgICAgLy8gQ29sb3IgJzAnICh0aGUgTyBwYXJ0KSBpbiBjeWFuLCBhbmQgJ2N0eCcgaW4gd2hpdGVcclxuICAgICAgICBjb25zdCBjb2xvcmVkTGluZSA9IGxpbmVcclxuICAgICAgICAgICAgLnJlcGxhY2UoL19fX3xfXFxzXFxcXHxfXFx8fFxcX19fXFwvfFxcfF9cXHwvZywgbWF0Y2ggPT4gY29sb3IuY3lhbihtYXRjaCkpIC8vIEF0dGVtcHRpbmcgdG8gdGFyZ2V0IHRoZSAnMCdcclxuICAgICAgICAgICAgLnJlcGxhY2UoL18gICAgICAgICAgfCBcXF9cXF9cXF9cXHwgXFx8XFxfXFxfXFxfXFxfICBcXF9cXF8gfFxcX1xcX1xcfCBcXF9cXF9cXFxcIFxcXFxcXC8gXFwvICB8XFxcXFxcX1xcXyBcXFxcIFxcfFxcXyBcXD4gIFxcPCAgIHxcXHxcXF9cXF9cXF9cXC9cXFxcX1xcX1xcL1xcX1xcL1xcXFxcXF9cXFxcICAvLCBtYXRjaCA9PiBjb2xvci53aGl0ZShtYXRjaCkpO1xyXG5cclxuICAgICAgICAvLyBBIHNpbXBsZXIgYXBwcm9hY2ggdG8gY29sb3JpbmcgdGhlIGxvZ28gYmxvY2s6XHJcbiAgICAgICAgY29uc29sZS5sb2coY29sb3IuY3lhbihsaW5lLnN1YnN0cmluZygwLCA2KSkgKyBjb2xvci53aGl0ZShsaW5lLnN1YnN0cmluZyg2KSkpO1xyXG4gICAgfVxyXG4gICAgY29uc29sZS5sb2coKTtcclxuICAgIGNvbnNvbGUubG9nKGNvbG9yLmRpbSgnXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwJykpO1xyXG5cclxuICAgIGNvbnNvbGUubG9nKGBcXG4ke2NvbG9yLmJvbGQoJ0J1aWx0LWlucycpfWApO1xyXG4gICAgY29uc29sZS5sb2coYCAgJHtjb2xvci5jeWFuKCdoZWxwJy5wYWRFbmQoMTApKX0gJHtjb2xvci5kaW0oJ1Nob3cgc2hlbGwgaGVscCcpfWApO1xyXG4gICAgY29uc29sZS5sb2coYCAgJHtjb2xvci5jeWFuKCdoaXN0b3J5Jy5wYWRFbmQoMTApKX0gJHtjb2xvci5kaW0oJ1Nob3cgY29tbWFuZCBoaXN0b3J5Jyl9YCk7XHJcbiAgICBjb25zb2xlLmxvZyhgICAke2NvbG9yLmN5YW4oJ2NsZWFyJy5wYWRFbmQoMTApKX0gJHtjb2xvci5kaW0oJ0NsZWFyIHRlcm1pbmFsJyl9YCk7XHJcbiAgICBjb25zb2xlLmxvZyhgICAke2NvbG9yLmN5YW4oJ2V4aXQgLyBxdWl0Jy5wYWRFbmQoMTApKX0gJHtjb2xvci5kaW0oJ0V4aXQgc2hlbGwnKX1gKTtcclxuXHJcbiAgICBjb25zb2xlLmxvZyhgXFxuJHtjb2xvci5ib2xkKCdTbGFzaCBDb21tYW5kcycpfWApO1xyXG4gICAgY29uc29sZS5sb2coYCAgJHtjb2xvci5tYWdlbnRhKCcvaGVscCcucGFkRW5kKDIwKSl9ICR7Y29sb3IuZGltKCdTaG93IHNoZWxsIGhlbHAnKX1gKTtcclxuICAgIGNvbnNvbGUubG9nKGAgICR7Y29sb3IubWFnZW50YSgnL2hpc3RvcnknLnBhZEVuZCgyMCkpfSAke2NvbG9yLmRpbSgnU2hvdyBjb21tYW5kIGhpc3RvcnknKX1gKTtcclxuICAgIGNvbnNvbGUubG9nKGAgICR7Y29sb3IubWFnZW50YSgnL2NsZWFyJy5wYWRFbmQoMjApKX0gJHtjb2xvci5kaW0oJ0NsZWFyIHRlcm1pbmFsJyl9YCk7XHJcbiAgICBjb25zb2xlLmxvZyhgICAke2NvbG9yLm1hZ2VudGEoJy9leGl0Jy5wYWRFbmQoMjApKX0gJHtjb2xvci5kaW0oJ0V4aXQgc2hlbGwnKX1gKTtcclxuICAgIGNvbnNvbGUubG9nKGAgICR7Y29sb3IubWFnZW50YSgnL3ByZXNlbnQtb3B0aW9uJy5wYWRFbmQoMjApKX0gJHtjb2xvci5kaW0oJ1ByZXNlbnQgVUkgb3B0aW9ucyBvdmVybGF5Jyl9YCk7XHJcblxyXG4gICAgY29uc29sZS5sb2coYFxcbiR7Y29sb3IuYm9sZCgnR2V0IHN0YXJ0ZWQnKX1gKTtcclxuICAgIGNvbnNvbGUubG9nKGAgICR7Y29sb3IuZ3JlZW4oJz4nKX0gJHtjb2xvci5jeWFuKCdzdGF0dXMnLnBhZEVuZCgzNSkpfSAke2NvbG9yLmRpbSgnKGNoZWNrIGRhZW1vbiBhbmQgc3lzdGVtIGhlYWx0aCknKX1gKTtcclxuICAgIGNvbnNvbGUubG9nKGAgICR7Y29sb3IuZ3JlZW4oJz4nKX0gJHtjb2xvci5jeWFuKCdzZXR1cCAtLWNsaWVudHM9YWxsJy5wYWRFbmQoMzUpKX0gJHtjb2xvci5kaW0oJyhjb25maWd1cmUgTUNQIGNsaWVudHMpJyl9YCk7XHJcbiAgICBjb25zb2xlLmxvZyhgICAke2NvbG9yLmdyZWVuKCc+Jyl9ICR7Y29sb3IuY3lhbignY29ubmVjdG9yIHN0YXR1cyAtLWNsb3VkJy5wYWRFbmQoMzUpKX0gJHtjb2xvci5kaW0oJyhjaGVjayBjbG91ZCBjb25uZWN0aW9uKScpfWApO1xyXG4gICAgY29uc29sZS5sb2coYCAgJHtjb2xvci5ncmVlbignPicpfSAke2NvbG9yLmN5YW4oJ2F1dGggbG9naW4nLnBhZEVuZCgzNSkpfSAke2NvbG9yLmRpbSgnKGF1dGhlbnRpY2F0ZSB3aXRoIDBjdHgpJyl9YCk7XHJcblxyXG4gICAgY29uc29sZS5sb2coYFxcbiR7Y29sb3IuZGltKCdBbGwgZXhpc3RpbmcgMGN0eCBjb21tYW5kcyBhcmUgc3VwcG9ydGVkIHdpdGhvdXQgdGhlIFwiMGN0eFwiIHByZWZpeC4nKX1cXG5gKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHRva2VuaXplU2hlbGxJbnB1dChpbnB1dDogc3RyaW5nKTogc3RyaW5nW10ge1xyXG4gICAgY29uc3QgdG9rZW5zOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgbGV0IGN1cnJlbnQgPSAnJztcclxuICAgIGxldCBxdW90ZTogJ1wiJyB8IFwiJ1wiIHwgbnVsbCA9IG51bGw7XHJcbiAgICBsZXQgZXNjYXBpbmcgPSBmYWxzZTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IGNoYXIgb2YgaW5wdXQpIHtcclxuICAgICAgICBpZiAoZXNjYXBpbmcpIHtcclxuICAgICAgICAgICAgY3VycmVudCArPSBjaGFyO1xyXG4gICAgICAgICAgICBlc2NhcGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChjaGFyID09PSAnXFxcXCcgJiYgcXVvdGUgIT09IFwiJ1wiKSB7XHJcbiAgICAgICAgICAgIGVzY2FwaW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocXVvdGUgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgaWYgKGNoYXIgPT09IHF1b3RlKSB7XHJcbiAgICAgICAgICAgICAgICBxdW90ZSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjdXJyZW50ICs9IGNoYXI7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGNoYXIgPT09ICdcIicgfHwgY2hhciA9PT0gXCInXCIpIHtcclxuICAgICAgICAgICAgcXVvdGUgPSBjaGFyO1xyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICgvXFxzLy50ZXN0KGNoYXIpKSB7XHJcbiAgICAgICAgICAgIGlmIChjdXJyZW50Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHRva2Vucy5wdXNoKGN1cnJlbnQpO1xyXG4gICAgICAgICAgICAgICAgY3VycmVudCA9ICcnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY3VycmVudCArPSBjaGFyO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChlc2NhcGluZykge1xyXG4gICAgICAgIGN1cnJlbnQgKz0gJ1xcXFwnO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChxdW90ZSAhPT0gbnVsbCkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVW50ZXJtaW5hdGVkIHF1b3RlZCBzdHJpbmcuJyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGN1cnJlbnQubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHRva2Vucy5wdXNoKGN1cnJlbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0b2tlbnM7XHJcbn1cclxuXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5TaGVsbENvbW1hbmQodG9rZW5zOiBzdHJpbmdbXSwgb3B0aW9uczogU2hlbGxPcHRpb25zKTogUHJvbWlzZTxudW1iZXI+IHtcclxuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBbLi4udG9rZW5zXTtcclxuICAgIGlmIChub3JtYWxpemVkWzBdID09PSAnMGN0eCcpIHtcclxuICAgICAgICBub3JtYWxpemVkLnNoaWZ0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG5vcm1hbGl6ZWQubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG5vcm1hbGl6ZWRbMF0gPT09ICdzaGVsbCcpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdOZXN0ZWQgc2hlbGwgaXMgbm90IHN1cHBvcnRlZC4gVXNlIGBleGl0YCB0byBsZWF2ZSB0aGUgY3VycmVudCBzaGVsbC4nKTtcclxuICAgICAgICByZXR1cm4gMTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBjaGlsZEFyZ3MgPSBbLi4uKG9wdGlvbnMubm9kZUV4ZWNBcmd2ID8/IFtdKSwgb3B0aW9ucy5jbGlFbnRyeXBvaW50LCAuLi5ub3JtYWxpemVkXTtcclxuXHJcbiAgICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XHJcbiAgICAgICAgY29uc3QgY2hpbGQgPSBzcGF3bihwcm9jZXNzLmV4ZWNQYXRoLCBjaGlsZEFyZ3MsIHtcclxuICAgICAgICAgICAgc3RkaW86ICdpbmhlcml0JyxcclxuICAgICAgICAgICAgZW52OiB7XHJcbiAgICAgICAgICAgICAgICAuLi5wcm9jZXNzLmVudixcclxuICAgICAgICAgICAgICAgIENUWF9TSEVMTF9NT0RFOiAnMSdcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjaGlsZC5vbignZXJyb3InLCBlcnJvciA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpKTtcclxuICAgICAgICAgICAgcmVzb2x2ZSgxKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgY2hpbGQub24oJ2Nsb3NlJywgY29kZSA9PiB7XHJcbiAgICAgICAgICAgIHJlc29sdmUoY29kZSA/PyAxKTtcclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG59XHJcblxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuSW50ZXJhY3RpdmVTaGVsbChvcHRpb25zOiBTaGVsbE9wdGlvbnMpOiBQcm9taXNlPG51bWJlcj4ge1xyXG4gICAgaWYgKCFwcm9jZXNzLnN0ZGluLmlzVFRZIHx8ICFwcm9jZXNzLnN0ZG91dC5pc1RUWSkge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ludGVyYWN0aXZlIHNoZWxsIHJlcXVpcmVzIGEgVFRZIHRlcm1pbmFsLicpO1xyXG4gICAgICAgIHJldHVybiAxO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGNvbG9yID0gKGF3YWl0IGltcG9ydCgncGljb2NvbG9ycycpKS5kZWZhdWx0O1xyXG4gICAgY29uc3QgcHJvbXB0ID0gb3B0aW9ucy5wcm9tcHQgPz8gYCR7Y29sb3IuY3lhbignMGN0eCcpfSR7Y29sb3IuZGltKCc+Jyl9IGA7XHJcblxyXG4gICAgY29uc3QgaGlzdG9yeSA9IGxvYWRIaXN0b3J5KCk7XHJcbiAgICBjb25zdCBjb21wbGV0aW9ucyA9IGdldENvbXBsZXRpb25DYW5kaWRhdGVzKCk7XHJcbiAgICBjb25zdCBybCA9IHJlYWRsaW5lLmNyZWF0ZUludGVyZmFjZSh7XHJcbiAgICAgICAgaW5wdXQ6IHByb2Nlc3Muc3RkaW4sXHJcbiAgICAgICAgb3V0cHV0OiBwcm9jZXNzLnN0ZG91dCxcclxuICAgICAgICBoaXN0b3J5U2l6ZTogSElTVE9SWV9MSU1JVCxcclxuICAgICAgICByZW1vdmVIaXN0b3J5RHVwbGljYXRlczogdHJ1ZSxcclxuICAgICAgICBjb21wbGV0ZXI6IChsaW5lOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgbm9ybWFsaXplZCA9IGxpbmUudHJpbSgpO1xyXG4gICAgICAgICAgICBjb25zdCBtYXRjaGVzID0gY29tcGxldGlvbnMuZmlsdGVyKGNhbmRpZGF0ZSA9PiBjYW5kaWRhdGUuc3RhcnRzV2l0aChub3JtYWxpemVkKSk7XHJcbiAgICAgICAgICAgIHJldHVybiBbbWF0Y2hlcy5sZW5ndGggPiAwID8gbWF0Y2hlcyA6IGNvbXBsZXRpb25zLCBub3JtYWxpemVkXTtcclxuICAgICAgICB9XHJcbiAgICB9KSBhcyByZWFkbGluZS5JbnRlcmZhY2UgJiB7IGhpc3Rvcnk6IHN0cmluZ1tdIH07XHJcblxyXG4gICAgcmwuaGlzdG9yeSA9IFsuLi5oaXN0b3J5XS5yZXZlcnNlKCk7XHJcblxyXG4gICAgLy8gSW5saW5lIGdob3N0IHRleHQgKGZpc2gtc2hlbGwgc3R5bGUgYXV0b3N1Z2dlc3Rpb25zKVxyXG4gICAgcmVhZGxpbmUuZW1pdEtleXByZXNzRXZlbnRzKHByb2Nlc3Muc3RkaW4pO1xyXG4gICAgbGV0IGdob3N0U3VmZml4ID0gJyc7XHJcblxyXG4gICAgY29uc3QgdXBkYXRlR2hvc3RUZXh0ID0gKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGxpbmU6IHN0cmluZyA9IChybCBhcyBhbnkpLmxpbmUgPz8gJyc7XHJcbiAgICAgICAgY29uc3Qgc3VnZ2VzdGlvbiA9IGdldEJlc3RTdWdnZXN0aW9uKGxpbmUsIGNvbXBsZXRpb25zKTtcclxuICAgICAgICBnaG9zdFN1ZmZpeCA9IHN1Z2dlc3Rpb24gPyBzdWdnZXN0aW9uLnNsaWNlKGxpbmUubGVuZ3RoKSA6ICcnO1xyXG4gICAgICAgIGlmIChnaG9zdFN1ZmZpeCkge1xyXG4gICAgICAgICAgICAvLyBTYXZlIGN1cnNvciwgd3JpdGUgZGltIHN1Z2dlc3Rpb24gc3VmZml4LCByZXN0b3JlIGN1cnNvclxyXG4gICAgICAgICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZSgnXFx4MWJbc1xceDFiWzJtJyArIGdob3N0U3VmZml4ICsgJ1xceDFiWzBtXFx4MWJbdScpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgY29uc3Qga2V5cHJlc3NIYW5kbGVyID0gKF9jaDogc3RyaW5nIHwgdW5kZWZpbmVkLCBrZXk6IHJlYWRsaW5lLktleSB8IHVuZGVmaW5lZCkgPT4ge1xyXG4gICAgICAgIGlmICgha2V5KSByZXR1cm47XHJcblxyXG4gICAgICAgIC8vIFJpZ2h0IGFycm93IGF0IGVuZCBvZiBsaW5lOiBhY2NlcHQgZ2hvc3Qgc3VnZ2VzdGlvblxyXG4gICAgICAgIGlmIChrZXkubmFtZSA9PT0gJ3JpZ2h0JyAmJiBnaG9zdFN1ZmZpeCkge1xyXG4gICAgICAgICAgICBzZXRJbW1lZGlhdGUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY3Vyc29yOiBudW1iZXIgPSAocmwgYXMgYW55KS5jdXJzb3IgPz8gMDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGxpbmU6IHN0cmluZyA9IChybCBhcyBhbnkpLmxpbmUgPz8gJyc7XHJcbiAgICAgICAgICAgICAgICBpZiAoY3Vyc29yID49IGxpbmUubGVuZ3RoICYmIGdob3N0U3VmZml4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdG9JbnNlcnQgPSBnaG9zdFN1ZmZpeDtcclxuICAgICAgICAgICAgICAgICAgICBnaG9zdFN1ZmZpeCA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgIHJsLndyaXRlKHRvSW5zZXJ0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEFmdGVyIHJlYWRsaW5lIHJlLXJlbmRlcnMsIGNvbXB1dGUgYW5kIHNob3cgdGhlIG5ldyBnaG9zdCB0ZXh0XHJcbiAgICAgICAgc2V0SW1tZWRpYXRlKHVwZGF0ZUdob3N0VGV4dCk7XHJcbiAgICB9O1xyXG5cclxuICAgIHByb2Nlc3Muc3RkaW4ub24oJ2tleXByZXNzJywga2V5cHJlc3NIYW5kbGVyKTtcclxuXHJcbiAgICBhd2FpdCBwcmludFNoZWxsSGVscCgpO1xyXG5cclxuICAgIGxldCBsYXN0RXhpdENvZGUgPSAwO1xyXG4gICAgbGV0IGludGVycnVwdGVkID0gZmFsc2U7XHJcblxyXG4gICAgcmwub24oJ1NJR0lOVCcsICgpID0+IHtcclxuICAgICAgICBnaG9zdFN1ZmZpeCA9ICcnO1xyXG4gICAgICAgIGlmIChpbnRlcnJ1cHRlZCkge1xyXG4gICAgICAgICAgICBybC5jbG9zZSgpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGludGVycnVwdGVkID0gdHJ1ZTtcclxuICAgICAgICBybC53cml0ZSgnXFxuKFByZXNzIEN0cmwrQyBhZ2FpbiB0byBleGl0KVxcbicpO1xyXG4gICAgICAgIHJsLnByb21wdCgpO1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBpbnRlcnJ1cHRlZCA9IGZhbHNlO1xyXG4gICAgICAgIH0sIDEwMDApO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgICB3aGlsZSAodHJ1ZSkge1xyXG4gICAgICAgICAgICBjb25zdCByYXdMaW5lID0gYXdhaXQgcXVlc3Rpb24ocmwsIHByb21wdCk7XHJcbiAgICAgICAgICAgIGludGVycnVwdGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGNvbnN0IGxpbmUgPSByYXdMaW5lLnRyaW0oKTtcclxuXHJcbiAgICAgICAgICAgIGlmICghbGluZSkgY29udGludWU7XHJcblxyXG4gICAgICAgICAgICBpZiAobGluZSA9PT0gJ2V4aXQnIHx8IGxpbmUgPT09ICdxdWl0JyB8fCBsaW5lID09PSAnL2V4aXQnIHx8IGxpbmUgPT09ICcvcXVpdCcpIHtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAobGluZSA9PT0gJ2hlbHAnIHx8IGxpbmUgPT09ICcvaGVscCcpIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHByaW50U2hlbGxIZWxwKCk7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGxpbmUgPT09ICdjbGVhcicgfHwgbGluZSA9PT0gJy9jbGVhcicpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuY2xlYXIoKTtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAobGluZSA9PT0gJ2hpc3RvcnknIHx8IGxpbmUgPT09ICcvaGlzdG9yeScpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNuYXBzaG90ID0gbG9hZEhpc3RvcnkoKTtcclxuICAgICAgICAgICAgICAgIHNuYXBzaG90LmZvckVhY2goKGVudHJ5LCBpZHgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgJHtpZHggKyAxfS4gJHtlbnRyeX1gKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChsaW5lLnN0YXJ0c1dpdGgoJy9wcmVzZW50LW9wdGlvbicpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhcmdzID0gbGluZS5zcGxpdCgnICcpLnNsaWNlKDEpLmpvaW4oJyAnKTtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGNvbG9yLm1hZ2VudGEoYFtVSSBPdmVybGF5XSBQcmVzZW50aW5nIG9wdGlvbnMgZm9yOiAke2FyZ3MgfHwgJyhkZWZhdWx0cyknfWApKTtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBhcHBlbmRIaXN0b3J5RW50cnkobGluZSk7XHJcblxyXG4gICAgICAgICAgICBsZXQgdG9rZW5zOiBzdHJpbmdbXTtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHRva2VucyA9IHRva2VuaXplU2hlbGxJbnB1dChsaW5lKTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpKTtcclxuICAgICAgICAgICAgICAgIGxhc3RFeGl0Q29kZSA9IDE7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGFzdEV4aXRDb2RlID0gYXdhaXQgcnVuU2hlbGxDb21tYW5kKHRva2Vucywgb3B0aW9ucyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSBmaW5hbGx5IHtcclxuICAgICAgICBwcm9jZXNzLnN0ZGluLm9mZigna2V5cHJlc3MnLCBrZXlwcmVzc0hhbmRsZXIpO1xyXG4gICAgICAgIHJsLmNsb3NlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGxhc3RFeGl0Q29kZTtcclxufVxyXG4iLCAiaW1wb3J0IHsgc3Bhd24gfSBmcm9tICdjaGlsZF9wcm9jZXNzJztcclxuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XHJcbmltcG9ydCB7IGV4ZWNTeW5jIH0gZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XHJcblxyXG50eXBlIFJ1bk1vZGUgPSAnaW5oZXJpdCcgfCAnY2FwdHVyZSc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFByb2Nlc3NSdW5SZXN1bHQge1xyXG4gICAgb2s6IGJvb2xlYW47XHJcbiAgICBjb21tYW5kOiBzdHJpbmc7XHJcbiAgICBhcmdzOiBzdHJpbmdbXTtcclxuICAgIGV4aXRDb2RlOiBudW1iZXIgfCBudWxsO1xyXG4gICAgc3Rkb3V0OiBzdHJpbmc7XHJcbiAgICBzdGRlcnI6IHN0cmluZztcclxuICAgIGR1cmF0aW9uTXM6IG51bWJlcjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBSZWxlYXNlU3RlcFJlc3VsdCBleHRlbmRzIFByb2Nlc3NSdW5SZXN1bHQge1xyXG4gICAgaWQ6IHN0cmluZztcclxuICAgIHNraXBwZWQ/OiBib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFJlbGVhc2VQdWJsaXNoT3B0aW9ucyB7XHJcbiAgICB2ZXJzaW9uOiBzdHJpbmc7XHJcbiAgICB0YWc/OiBzdHJpbmc7XHJcbiAgICBkcnlSdW4/OiBib29sZWFuO1xyXG4gICAgYWxsb3dEaXJ0eT86IGJvb2xlYW47XHJcbiAgICBvdHA/OiBzdHJpbmc7XHJcbiAgICBza2lwVmFsaWRhdGU/OiBib29sZWFuO1xyXG4gICAgc2tpcENoYW5nZWxvZz86IGJvb2xlYW47XHJcbiAgICBvdXRwdXRNb2RlPzogUnVuTW9kZTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBSZWxlYXNlUHVibGlzaFJlc3VsdCB7XHJcbiAgICBvazogYm9vbGVhbjtcclxuICAgIHJlcG9Sb290OiBzdHJpbmc7XHJcbiAgICB2ZXJzaW9uOiBzdHJpbmc7XHJcbiAgICB0YWc6IHN0cmluZztcclxuICAgIGRyeVJ1bjogYm9vbGVhbjtcclxuICAgIHN0ZXBzOiBSZWxlYXNlU3RlcFJlc3VsdFtdO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplUmVsZWFzZVZlcnNpb24oaW5wdXQ6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCB0cmltbWVkID0gaW5wdXQudHJpbSgpO1xyXG4gICAgaWYgKCF0cmltbWVkKSB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgcmVxdWlyZWQgdmVyc2lvbiAoZXhwZWN0ZWQgdlguWS5aKS4nKTtcclxuICAgIHJldHVybiB0cmltbWVkLnN0YXJ0c1dpdGgoJ3YnKSA/IHRyaW1tZWQgOiBgdiR7dHJpbW1lZH1gO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVSZWxlYXNlVmVyc2lvbihpbnB1dDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBub3JtYWxpemVSZWxlYXNlVmVyc2lvbihpbnB1dCk7XHJcbiAgICBpZiAoIS9edlxcZCtcXC5cXGQrXFwuXFxkKyhbLS5dWzAtOUEtWmEtei4tXSspPyQvLnRlc3Qobm9ybWFsaXplZCkpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdmVyc2lvbiAnJHtpbnB1dH0nLiBFeHBlY3RlZCB2WC5ZLlogb3IgdlguWS5aLXByZXJlbGVhc2UuYCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbm9ybWFsaXplZDtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0TnBtQ29tbWFuZCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuICducG0nO1xyXG59XHJcblxyXG5mdW5jdGlvbiByZXNvbHZlUmVwb1Jvb3QoKTogc3RyaW5nIHtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgcmV0dXJuIGV4ZWNTeW5jKCdnaXQgcmV2LXBhcnNlIC0tc2hvdy10b3BsZXZlbCcsIHtcclxuICAgICAgICAgICAgY3dkOiBwcm9jZXNzLmN3ZCgpLFxyXG4gICAgICAgICAgICBzdGRpbzogWydpZ25vcmUnLCAncGlwZScsICdwaXBlJ11cclxuICAgICAgICB9KS50b1N0cmluZygpLnRyaW0oKTtcclxuICAgIH0gY2F0Y2gge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm90IGluc2lkZSB0aGUgMGN0eCByZXBvc2l0b3J5IChnaXQgcm9vdCByZXF1aXJlZCBmb3IgcmVsZWFzZSBjb21tYW5kKS4nKTtcclxuICAgIH1cclxufVxyXG5cclxuYXN5bmMgZnVuY3Rpb24gcnVuUHJvY2VzcyhcclxuICAgIGNvbW1hbmQ6IHN0cmluZyxcclxuICAgIGFyZ3M6IHN0cmluZ1tdLFxyXG4gICAgY3dkOiBzdHJpbmcsXHJcbiAgICBtb2RlOiBSdW5Nb2RlLFxyXG4gICAgdXNlU2hlbGwgPSBmYWxzZVxyXG4pOiBQcm9taXNlPFByb2Nlc3NSdW5SZXN1bHQ+IHtcclxuICAgIGNvbnN0IHN0YXJ0ZWRBdCA9IERhdGUubm93KCk7XHJcbiAgICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XHJcbiAgICAgICAgY29uc3QgY2hpbGQgPSBzcGF3bihjb21tYW5kLCBhcmdzLCB7XHJcbiAgICAgICAgICAgIGN3ZCxcclxuICAgICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcclxuICAgICAgICAgICAgc3RkaW86IG1vZGUgPT09ICdpbmhlcml0JyA/ICdpbmhlcml0JyA6ICdwaXBlJyxcclxuICAgICAgICAgICAgd2luZG93c0hpZGU6IHRydWUsXHJcbiAgICAgICAgICAgIHNoZWxsOiB1c2VTaGVsbFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBsZXQgc3Rkb3V0ID0gJyc7XHJcbiAgICAgICAgbGV0IHN0ZGVyciA9ICcnO1xyXG5cclxuICAgICAgICBpZiAobW9kZSA9PT0gJ2NhcHR1cmUnKSB7XHJcbiAgICAgICAgICAgIGNoaWxkLnN0ZG91dD8ub24oJ2RhdGEnLCBjaHVuayA9PiB7XHJcbiAgICAgICAgICAgICAgICBzdGRvdXQgKz0gY2h1bmsudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNoaWxkLnN0ZGVycj8ub24oJ2RhdGEnLCBjaHVuayA9PiB7XHJcbiAgICAgICAgICAgICAgICBzdGRlcnIgKz0gY2h1bmsudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjaGlsZC5vbignZXJyb3InLCBlcnJvciA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpbmlzaGVkQXQgPSBEYXRlLm5vdygpO1xyXG4gICAgICAgICAgICByZXNvbHZlKHtcclxuICAgICAgICAgICAgICAgIG9rOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGNvbW1hbmQsXHJcbiAgICAgICAgICAgICAgICBhcmdzLFxyXG4gICAgICAgICAgICAgICAgZXhpdENvZGU6IDEsXHJcbiAgICAgICAgICAgICAgICBzdGRvdXQsXHJcbiAgICAgICAgICAgICAgICBzdGRlcnI6IGAke3N0ZGVycn1cXG4ke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKX1gLnRyaW0oKSxcclxuICAgICAgICAgICAgICAgIGR1cmF0aW9uTXM6IGZpbmlzaGVkQXQgLSBzdGFydGVkQXRcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGNoaWxkLm9uKCdjbG9zZScsIGNvZGUgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBmaW5pc2hlZEF0ID0gRGF0ZS5ub3coKTtcclxuICAgICAgICAgICAgcmVzb2x2ZSh7XHJcbiAgICAgICAgICAgICAgICBvazogY29kZSA9PT0gMCxcclxuICAgICAgICAgICAgICAgIGNvbW1hbmQsXHJcbiAgICAgICAgICAgICAgICBhcmdzLFxyXG4gICAgICAgICAgICAgICAgZXhpdENvZGU6IGNvZGUsXHJcbiAgICAgICAgICAgICAgICBzdGRvdXQ6IHN0ZG91dC50cmltKCksXHJcbiAgICAgICAgICAgICAgICBzdGRlcnI6IHN0ZGVyci50cmltKCksXHJcbiAgICAgICAgICAgICAgICBkdXJhdGlvbk1zOiBmaW5pc2hlZEF0IC0gc3RhcnRlZEF0XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGJ1aWxkTnBtUnVuQXJncyhzY3JpcHQ6IHN0cmluZywgc2NyaXB0QXJnczogc3RyaW5nW10gPSBbXSk6IHN0cmluZ1tdIHtcclxuICAgIGNvbnN0IGFyZ3MgPSBbJ3J1bicsIHNjcmlwdF07XHJcbiAgICBpZiAoc2NyaXB0QXJncy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgYXJncy5wdXNoKCctLScsIC4uLnNjcmlwdEFyZ3MpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFyZ3M7XHJcbn1cclxuXHJcbmFzeW5jIGZ1bmN0aW9uIHJ1bk5wbVNjcmlwdChcclxuICAgIHN0ZXBJZDogc3RyaW5nLFxyXG4gICAgc2NyaXB0OiBzdHJpbmcsXHJcbiAgICBzY3JpcHRBcmdzOiBzdHJpbmdbXSxcclxuICAgIHJlcG9Sb290OiBzdHJpbmcsXHJcbiAgICBtb2RlOiBSdW5Nb2RlXHJcbik6IFByb21pc2U8UmVsZWFzZVN0ZXBSZXN1bHQ+IHtcclxuICAgIGNvbnN0IGNvbW1hbmQgPSBnZXROcG1Db21tYW5kKCk7XHJcbiAgICBjb25zdCBhcmdzID0gYnVpbGROcG1SdW5BcmdzKHNjcmlwdCwgc2NyaXB0QXJncyk7XHJcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBydW5Qcm9jZXNzKGNvbW1hbmQsIGFyZ3MsIHJlcG9Sb290LCBtb2RlLCBwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInKTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgLi4ucmVzdWx0LFxyXG4gICAgICAgIGlkOiBzdGVwSWRcclxuICAgIH07XHJcbn1cclxuXHJcbmFzeW5jIGZ1bmN0aW9uIHJ1blB1Ymxpc2hTY3JpcHQoXHJcbiAgICBzdGVwSWQ6IHN0cmluZyxcclxuICAgIHBhcmFtczoge1xyXG4gICAgICAgIHJlcG9Sb290OiBzdHJpbmc7XHJcbiAgICAgICAgZHJ5UnVuOiBib29sZWFuO1xyXG4gICAgICAgIGFsbG93RGlydHk/OiBib29sZWFuO1xyXG4gICAgICAgIG90cD86IHN0cmluZztcclxuICAgICAgICB0YWc6IHN0cmluZztcclxuICAgIH0sXHJcbiAgICBtb2RlOiBSdW5Nb2RlXHJcbik6IFByb21pc2U8UmVsZWFzZVN0ZXBSZXN1bHQ+IHtcclxuICAgIGNvbnN0IHNjcmlwdFBhdGggPSBwYXRoLmpvaW4ocGFyYW1zLnJlcG9Sb290LCAnc2NyaXB0cycsICdyZWxlYXNlJywgJ3B1Ymxpc2gtcGFja2FnZXMucHMxJyk7XHJcbiAgICBjb25zdCBhcmdzID0gWyctRXhlY3V0aW9uUG9saWN5JywgJ0J5cGFzcycsICctRmlsZScsIHNjcmlwdFBhdGgsICctVGFnJywgcGFyYW1zLnRhZ107XHJcbiAgICBpZiAocGFyYW1zLmRyeVJ1bikge1xyXG4gICAgICAgIGFyZ3MucHVzaCgnLURyeVJ1bicpO1xyXG4gICAgfVxyXG4gICAgaWYgKHBhcmFtcy5hbGxvd0RpcnR5KSB7XHJcbiAgICAgICAgYXJncy5wdXNoKCctQWxsb3dEaXJ0eScpO1xyXG4gICAgfVxyXG4gICAgaWYgKHBhcmFtcy5vdHApIHtcclxuICAgICAgICBhcmdzLnB1c2goJy1PVFAnLCBwYXJhbXMub3RwKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBydW5Qcm9jZXNzKCdwb3dlcnNoZWxsJywgYXJncywgcGFyYW1zLnJlcG9Sb290LCBtb2RlKTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgLi4ucmVzdWx0LFxyXG4gICAgICAgIGlkOiBzdGVwSWRcclxuICAgIH07XHJcbn1cclxuXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5SZWxlYXNlUHVibGlzaChvcHRpb25zOiBSZWxlYXNlUHVibGlzaE9wdGlvbnMpOiBQcm9taXNlPFJlbGVhc2VQdWJsaXNoUmVzdWx0PiB7XHJcbiAgICBjb25zdCByZXBvUm9vdCA9IHJlc29sdmVSZXBvUm9vdCgpO1xyXG4gICAgY29uc3QgdmVyc2lvbiA9IHZhbGlkYXRlUmVsZWFzZVZlcnNpb24ob3B0aW9ucy52ZXJzaW9uKTtcclxuICAgIGNvbnN0IHRhZyA9IChvcHRpb25zLnRhZyB8fCAnbGF0ZXN0JykudHJpbSgpIHx8ICdsYXRlc3QnO1xyXG4gICAgY29uc3QgZHJ5UnVuID0gQm9vbGVhbihvcHRpb25zLmRyeVJ1bik7XHJcbiAgICBjb25zdCBvdXRwdXRNb2RlID0gb3B0aW9ucy5vdXRwdXRNb2RlID8/ICdpbmhlcml0JztcclxuICAgIGNvbnN0IHN0ZXBzOiBSZWxlYXNlU3RlcFJlc3VsdFtdID0gW107XHJcblxyXG4gICAgY29uc3QgcHVzaEFuZENoZWNrID0gYXN5bmMgKHJlc3VsdFByb21pc2U6IFByb21pc2U8UmVsZWFzZVN0ZXBSZXN1bHQ+KTogUHJvbWlzZTxib29sZWFuPiA9PiB7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVzdWx0UHJvbWlzZTtcclxuICAgICAgICBzdGVwcy5wdXNoKHJlc3VsdCk7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdC5vaztcclxuICAgIH07XHJcblxyXG4gICAgaWYgKCFvcHRpb25zLnNraXBWYWxpZGF0ZSkge1xyXG4gICAgICAgIGNvbnN0IHZhbGlkYXRlQXJnczogc3RyaW5nW10gPSBbXTtcclxuICAgICAgICBpZiAoZHJ5UnVuKSB2YWxpZGF0ZUFyZ3MucHVzaCgnLURyeVJ1bicpO1xyXG4gICAgICAgIGlmIChvcHRpb25zLmFsbG93RGlydHkpIHZhbGlkYXRlQXJncy5wdXNoKCctQWxsb3dEaXJ0eScpO1xyXG4gICAgICAgIGNvbnN0IG9rID0gYXdhaXQgcHVzaEFuZENoZWNrKHJ1bk5wbVNjcmlwdCgndmFsaWRhdGUnLCAncmVsZWFzZTp2YWxpZGF0ZScsIHZhbGlkYXRlQXJncywgcmVwb1Jvb3QsIG91dHB1dE1vZGUpKTtcclxuICAgICAgICBpZiAoIW9rKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7IG9rOiBmYWxzZSwgcmVwb1Jvb3QsIHZlcnNpb24sIHRhZywgZHJ5UnVuLCBzdGVwcyB9O1xyXG4gICAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgc3RlcHMucHVzaCh7XHJcbiAgICAgICAgICAgIGlkOiAndmFsaWRhdGUnLFxyXG4gICAgICAgICAgICBvazogdHJ1ZSxcclxuICAgICAgICAgICAgc2tpcHBlZDogdHJ1ZSxcclxuICAgICAgICAgICAgY29tbWFuZDogZ2V0TnBtQ29tbWFuZCgpLFxyXG4gICAgICAgICAgICBhcmdzOiBidWlsZE5wbVJ1bkFyZ3MoJ3JlbGVhc2U6dmFsaWRhdGUnKSxcclxuICAgICAgICAgICAgZXhpdENvZGU6IDAsXHJcbiAgICAgICAgICAgIHN0ZG91dDogJycsXHJcbiAgICAgICAgICAgIHN0ZGVycjogJycsXHJcbiAgICAgICAgICAgIGR1cmF0aW9uTXM6IDBcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIW9wdGlvbnMuc2tpcENoYW5nZWxvZykge1xyXG4gICAgICAgIGNvbnN0IGNoYW5nZWxvZ0FyZ3MgPSBbJy1WZXJzaW9uJywgdmVyc2lvbl07XHJcbiAgICAgICAgaWYgKGRyeVJ1bikgY2hhbmdlbG9nQXJncy5wdXNoKCctRHJ5UnVuJyk7XHJcbiAgICAgICAgY29uc3Qgb2sgPSBhd2FpdCBwdXNoQW5kQ2hlY2soXHJcbiAgICAgICAgICAgIHJ1bk5wbVNjcmlwdCgnY2hhbmdlbG9nJywgJ3JlbGVhc2U6Y2hhbmdlbG9nOnByZXBhcmUnLCBjaGFuZ2Vsb2dBcmdzLCByZXBvUm9vdCwgb3V0cHV0TW9kZSlcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmICghb2spIHtcclxuICAgICAgICAgICAgcmV0dXJuIHsgb2s6IGZhbHNlLCByZXBvUm9vdCwgdmVyc2lvbiwgdGFnLCBkcnlSdW4sIHN0ZXBzIH07XHJcbiAgICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBzdGVwcy5wdXNoKHtcclxuICAgICAgICAgICAgaWQ6ICdjaGFuZ2Vsb2cnLFxyXG4gICAgICAgICAgICBvazogdHJ1ZSxcclxuICAgICAgICAgICAgc2tpcHBlZDogdHJ1ZSxcclxuICAgICAgICAgICAgY29tbWFuZDogZ2V0TnBtQ29tbWFuZCgpLFxyXG4gICAgICAgICAgICBhcmdzOiBidWlsZE5wbVJ1bkFyZ3MoJ3JlbGVhc2U6Y2hhbmdlbG9nOnByZXBhcmUnKSxcclxuICAgICAgICAgICAgZXhpdENvZGU6IDAsXHJcbiAgICAgICAgICAgIHN0ZG91dDogJycsXHJcbiAgICAgICAgICAgIHN0ZGVycjogJycsXHJcbiAgICAgICAgICAgIGR1cmF0aW9uTXM6IDBcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB7XHJcbiAgICAgICAgY29uc3Qgb2sgPSBhd2FpdCBwdXNoQW5kQ2hlY2soXHJcbiAgICAgICAgICAgIHJ1bk5wbVNjcmlwdCgndGFnX3ByZXZpZXcnLCAncmVsZWFzZTp0YWc6ZHJ5JywgWyctVmVyc2lvbicsIHZlcnNpb25dLCByZXBvUm9vdCwgb3V0cHV0TW9kZSlcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmICghb2spIHtcclxuICAgICAgICAgICAgcmV0dXJuIHsgb2s6IGZhbHNlLCByZXBvUm9vdCwgdmVyc2lvbiwgdGFnLCBkcnlSdW4sIHN0ZXBzIH07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHtcclxuICAgICAgICBjb25zdCBvayA9IGF3YWl0IHB1c2hBbmRDaGVjayhydW5OcG1TY3JpcHQoJ3BhY2tfZHJ5JywgJ3JlbGVhc2U6cGFjazpkcnknLCBbXSwgcmVwb1Jvb3QsIG91dHB1dE1vZGUpKTtcclxuICAgICAgICBpZiAoIW9rKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7IG9rOiBmYWxzZSwgcmVwb1Jvb3QsIHZlcnNpb24sIHRhZywgZHJ5UnVuLCBzdGVwcyB9O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB7XHJcbiAgICAgICAgY29uc3Qgb2sgPSBhd2FpdCBwdXNoQW5kQ2hlY2soXHJcbiAgICAgICAgICAgIHJ1blB1Ymxpc2hTY3JpcHQoXHJcbiAgICAgICAgICAgICAgICAncHVibGlzaCcsXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVwb1Jvb3QsXHJcbiAgICAgICAgICAgICAgICAgICAgZHJ5UnVuLFxyXG4gICAgICAgICAgICAgICAgICAgIGFsbG93RGlydHk6IG9wdGlvbnMuYWxsb3dEaXJ0eSxcclxuICAgICAgICAgICAgICAgICAgICBvdHA6IG9wdGlvbnMub3RwLFxyXG4gICAgICAgICAgICAgICAgICAgIHRhZ1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIG91dHB1dE1vZGVcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKCFvaykge1xyXG4gICAgICAgICAgICByZXR1cm4geyBvazogZmFsc2UsIHJlcG9Sb290LCB2ZXJzaW9uLCB0YWcsIGRyeVJ1biwgc3RlcHMgfTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBvazogdHJ1ZSxcclxuICAgICAgICByZXBvUm9vdCxcclxuICAgICAgICB2ZXJzaW9uLFxyXG4gICAgICAgIHRhZyxcclxuICAgICAgICBkcnlSdW4sXHJcbiAgICAgICAgc3RlcHNcclxuICAgIH07XHJcbn1cclxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQSxnREFBQUEsVUFBQUMsU0FBQTtBQUFBLFFBQUksSUFBSSxXQUFXLENBQUM7QUFBcEIsUUFBdUIsT0FBTyxFQUFFLFFBQVEsQ0FBQztBQUF6QyxRQUE0QyxNQUFNLEVBQUUsT0FBTyxDQUFDO0FBQzVELFFBQUksbUJBQ0gsRUFBRSxDQUFDLENBQUMsSUFBSSxZQUFZLEtBQUssU0FBUyxZQUFZLE9BQzdDLENBQUMsQ0FBQyxJQUFJLGVBQWUsS0FBSyxTQUFTLFNBQVMsS0FBSyxFQUFFLGFBQWEsWUFBYSxFQUFFLFVBQVUsQ0FBQyxHQUFHLFNBQVMsSUFBSSxTQUFTLFVBQVcsQ0FBQyxDQUFDLElBQUk7QUFFdEksUUFBSSxZQUFZLENBQUMsTUFBTSxP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QU0sT0FBUUEsTUFBTSxPQUFRQSxNQUFNLE9BQVFBLEtBQUssT0FBUUEsS0FBSyxPQUFRQSxNQUFNLE9BQVFBLE1BQU0sT0FBUUEsTUFBTSxPQUFTQSxNQUFNLE9BQVNBLE1BQU0sT0FBU0EsTUFBTSxPQUFTQSxNQUFNLE9BQVNBLE1BQU0sT0FBU0EsTUFBTSxPQUFTQSxLQUFLLE9BQVNBLEtBQUssT0FBU0EsTUFBTSxPQUFTQSxLQUFLLE9BQVNBLEtBQUssT0FBU0EsTUFBTSxPQUFTQSxLQUFLLE9BQVNBLEtBQUssT0FBU0EsTUFBTSxPQUFTQSxNQUFNLE9BQVNBLE1BQU0sT0FBU0EsTUFBTSxPQUFTQSxNQUFNLE9BQVNBLE1BQU0sT0FBU0EsTUFBTSxPQUFTQSxNQUFNLE9BQVNBLE1BQU0sT0FBU0EsTUFBTSxPQUFTQSxNQUFNLE9BQVNBLE1BQU0sT0FBU0EsTUFBTSxPQUFTQSxNQUFNLE9BQVNBLE1BQU0sT0FBU0EsTUFBTSxPQUFTQSxNQUFNLE9BQVNBLE1BQU0sT0FBU0EsS0FBSyxPQUFTQSxLQUFLLE9BQVNBLE1BQU0sT0FBU0EsTUFBTSxPQUFTQSxLQUFLLE9BQVNBLEtBQUssT0FBU0EsTUFBTSxPQUFTQSxNQUFNLE9BQVNBLEtBQUssT0FBU0EsS0FBSyxPQUFTQSxLQUFLLE9BQVNBLEtBQUssT0FBU0EsS0FBSyxPQUFTQSxLQUFLLE9BQVNBLEtBQUssT0FBU0EsS0FBSyxPQUFTQSxLQUFLLE9BQVNBLEtBQUssT0FBU0EsTUFBTSxRQUFTQSxLQUFLLFFBQVNBLEtBQUssUUFBU0EsTUFBTSxRQUFTQSxNQUFNLFFBQVVBLEtBQUssUUFBVUEsS0FBSyxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLEtBQUssUUFBVUEsS0FBSyxRQUFVQSxLQUFLLFFBQVVBLEtBQUssUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLEtBQUssUUFBVUEsS0FBSyxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxLQUFLLFFBQVVBLEtBQUssUUFBVUEsS0FBSyxRQUFVQSxLQUFLLFFBQVVBLEtBQUssUUFBVUEsS0FBSyxRQUFVQSxNQUFNLFFBQVVBLEtBQUssUUFBVUEsS0FBSyxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxLQUFLLFFBQVVBLEtBQUssUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLEtBQUssUUFBVUEsS0FBSyxRQUFVQSxNQUFNLFFBQVVBLEtBQUssUUFBVUEsS0FBSyxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLEtBQUssUUFBVUEsS0FBSyxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLEtBQUssUUFBVUEsS0FBSyxRQUFVQSxLQUFLLFFBQVVBLEtBQUssUUFBVUEsS0FBSyxRQUFVQSxLQUFLLFFBQVVBLEtBQUssUUFBVUEsS0FBSyxRQUFVQSxLQUFLLFFBQVVBLEtBQUssUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLEtBQUssUUFBVUEsS0FBSyxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsS0FBSyxRQUFVQSxLQUFLLFFBQVVBLE1BQU0sUUFBVUEsS0FBSyxRQUFVQSxLQUFLLFFBQVVBLEtBQUssUUFBVUEsS0FBSyxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxLQUFLLFFBQVVBLEtBQUssUUFBVUEsS0FBSyxRQUFVQSxLQUFLLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLEtBQUssUUFBVUEsS0FBSyxRQUFVQSxLQUFLLFFBQVVBLEtBQUssUUFBVUEsS0FBSyxRQUFVQSxLQUFLLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLEtBQUssUUFBVUEsS0FBSyxRQUFVQSxNQUFNLFFBQVVBLEtBQUssUUFBVUEsS0FBSyxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sU0FBVUEsS0FBSyxTQUFVQSxLQUFLLFNBQVVBLEtBQUssU0FBVUEsS0FBSyxTQUFVQSxLQUFLLFNBQVVBLEtBQUssU0FBVUEsS0FBSyxTQUFVQSxLQUFLLFNBQVVBLEtBQUssU0FBVUEsS0FBSyxTQUFVQSxNQUFNLFNBQVVBLEtBQUssVUFBV0EsS0FBSyxVQUFXQSxLQUFLLFVBQVdBLEtBQUssVUFBV0EsS0FBSyxVQUFXQSxLQUFLLFVBQVdBLEtBQUssVUFBV0EsS0FBSyxVQUFXQSxNQUFNLFVBQVdBLE1BQU0sVUFBV0EsS0FBSyxVQUFXQSxLQUFLLFVBQVdBLEtBQUssVUFBV0EsS0FBSyxVQUFXQSxLQUFLLFVBQVdBLEtBQUssV0FBV0EsS0FBSyxXQUFZQSxLQUFLO0FBRDFqSSxJQUdNcEMsS0FBZW9DLE9BQ1ZBLE1BQU0sU0FBVUEsS0FBSyxTQUFVQSxLQUFLLFNBQVVBLEtBQUssU0FBVUEsS0FBSztBQUo3RSxJQU1NbkMsS0FBVW1DLE9BQ0xBLEtBQUssUUFBVUEsS0FBSyxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLEtBQUssUUFBVUEsS0FBSyxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxLQUFLLFFBQVVBLEtBQUssUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sU0FBVUEsTUFBTSxTQUFVQSxNQUFNLFNBQVVBLEtBQUssU0FBVUEsS0FBSyxTQUFVQSxNQUFNLFNBQVVBLEtBQUssU0FBVUEsS0FBSyxTQUFVQSxNQUFNLFNBQVVBLE1BQU0sU0FBVUEsTUFBTSxTQUFVQSxNQUFNLFNBQVVBLE1BQU0sU0FBVUEsTUFBTSxTQUFVQSxLQUFLLFNBQVVBLEtBQUssU0FBVUEsS0FBSyxTQUFVQSxLQUFLLFNBQVVBLEtBQUssU0FBVUEsS0FBSyxTQUFVQSxLQUFLLFNBQVVBLEtBQUssU0FBVUEsS0FBSyxTQUFVQSxLQUFLLFNBQVVBLEtBQUssU0FBVUEsS0FBSyxTQUFVQSxLQUFLLFNBQVVBLEtBQUssU0FBVUEsS0FBSyxTQUFVQSxLQUFLLFNBQVVBLEtBQUssU0FBVUEsS0FBSyxTQUFVQSxLQUFLLFNBQVVBLEtBQUssU0FBVUEsS0FBSyxTQUFVQSxLQUFLLFNBQVVBLEtBQUssU0FBVUEsS0FBSyxTQUFVQSxLQUFLLFNBQVVBLEtBQUssU0FBVUEsS0FBSyxTQUFVQSxLQUFLLFNBQVVBLEtBQUssU0FBVUEsS0FBSyxTQUFVQSxLQUFLLFNBQVVBLEtBQUssU0FBVUEsS0FBSyxTQUFVQSxLQUFLLFNBQVVBLEtBQUssU0FBVUEsS0FBSyxTQUFVQSxLQUFLLFNBQVVBLEtBQUssU0FBVUEsS0FBSyxTQUFVQSxLQUFLLFNBQVVBLEtBQUssU0FBVUEsS0FBSyxTQUFVQSxLQUFLLFNBQVVBLEtBQUssU0FBVUEsS0FBSyxTQUFXQSxLQUFLLFNBQVdBLE1BQU0sU0FBV0EsTUFBTSxTQUFXQSxLQUFLLFNBQVdBLEtBQUssVUFBV0EsS0FBSyxVQUFXQSxLQUFLLFVBQVdBLEtBQUssVUFBV0EsS0FBSyxVQUFXQSxLQUFLLFVBQVdBLEtBQUssVUFBV0EsS0FBSyxVQUFXQSxLQUFLLFVBQVdBLE1BQU0sVUFBV0EsTUFBTSxVQUFXQSxLQUFLLFVBQVdBLEtBQUssVUFBV0EsTUFBTSxVQUFXQSxLQUFLLFVBQVdBLEtBQUssVUFBV0EsTUFBTSxVQUFXQSxLQUFLLFVBQVdBLEtBQUssVUFBV0EsS0FBSyxVQUFXQSxLQUFLLFVBQVdBLE1BQU0sVUFBV0EsTUFBTSxVQUFXQSxNQUFNLFVBQVdBLEtBQUssVUFBV0EsS0FBSyxVQUFXQSxLQUFLLFVBQVdBLEtBQUssVUFBV0EsS0FBSyxVQUFXQSxLQUFLLFVBQVdBLEtBQUssVUFBV0EsS0FBSyxVQUFXQSxNQUFNLFVBQVdBLE1BQU0sVUFBV0EsS0FBSyxVQUFXQSxLQUFLLFVBQVdBLEtBQUssVUFBV0EsS0FBSyxVQUFXQSxLQUFLLFVBQVdBLEtBQUssVUFBV0EsS0FBSyxVQUFXQSxLQUFLLFVBQVdBLEtBQUssVUFBV0EsS0FBSyxVQUFXQSxLQUFLLFVBQVdBLEtBQUssVUFBV0EsS0FBSyxVQUFXQSxLQUFLLFVBQVdBLEtBQUssVUFBV0EsS0FBSyxVQUFXQSxNQUFNLFVBQVdBLEtBQUssVUFBV0EsS0FBSyxV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QUFRQSxNQUFNLE9BQVFBLE1BQU0sT0FBU0EsTUFBTSxPQUFTQSxNQUFNLE9BQVNBLE1BQU0sT0FBU0EsTUFBTSxPQUFTQSxNQUFNLE9BQVNBLE1BQU0sT0FBU0EsS0FBSyxPQUFTQSxLQUFLLE9BQVNBLE1BQU0sT0FBU0EsS0FBSyxPQUFTQSxLQUFLLE9BQVNBLE1BQU0sT0FBU0EsS0FBSyxPQUFTQSxLQUFLLE9BQVNBLE1BQU0sT0FBU0EsTUFBTSxPQUFTQSxNQUFNLE9BQVNBLE1BQU0sT0FBU0EsTUFBTSxPQUFTQSxNQUFNLE9BQVNBLE1BQU0sT0FBU0EsTUFBTSxPQUFTQSxNQUFNLE9BQVNBLE1BQU0sT0FBU0EsTUFBTSxPQUFTQSxNQUFNLE9BQVNBLE1BQU0sT0FBU0EsTUFBTSxPQUFTQSxNQUFNLE9BQVNBLE1BQU0sT0FBU0EsTUFBTSxPQUFTQSxNQUFNLE9BQVNBLEtBQUssT0FBU0EsS0FBSyxPQUFTQSxNQUFNLE9BQVNBLE1BQU0sT0FBU0EsS0FBSyxPQUFTQSxLQUFLLE9BQVNBLE1BQU0sT0FBU0EsTUFBTSxPQUFTQSxLQUFLLE9BQVNBLEtBQUssT0FBU0EsS0FBSyxPQUFTQSxLQUFLLE9BQVNBLEtBQUssT0FBU0EsS0FBSyxPQUFTQSxLQUFLLE9BQVNBLEtBQUssT0FBU0EsS0FBSyxPQUFTQSxLQUFLLE9BQVNBLE1BQU0sUUFBU0EsS0FBSyxRQUFTQSxLQUFLLFFBQVNBLE1BQU0sUUFBU0EsTUFBTSxRQUFVQSxLQUFLLFFBQVVBLEtBQUssUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxLQUFLLFFBQVVBLEtBQUssUUFBVUEsS0FBSyxRQUFVQSxLQUFLLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxLQUFLLFFBQVVBLEtBQUssUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsS0FBSyxRQUFVQSxLQUFLLFFBQVVBLEtBQUssUUFBVUEsS0FBSyxRQUFVQSxLQUFLLFFBQVVBLEtBQUssUUFBVUEsTUFBTSxRQUFVQSxLQUFLLFFBQVVBLEtBQUssUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsS0FBSyxRQUFVQSxLQUFLLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxLQUFLLFFBQVVBLEtBQUssUUFBVUEsTUFBTSxRQUFVQSxLQUFLLFFBQVVBLEtBQUssUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxLQUFLLFFBQVVBLEtBQUssUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxLQUFLLFFBQVVBLEtBQUssUUFBVUEsS0FBSyxRQUFVQSxLQUFLLFFBQVVBLEtBQUssUUFBVUEsS0FBSyxRQUFVQSxLQUFLLFFBQVVBLEtBQUssUUFBVUEsS0FBSyxRQUFVQSxLQUFLLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxLQUFLLFFBQVVBLEtBQUssUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLEtBQUssUUFBVUEsS0FBSyxRQUFVQSxNQUFNLFFBQVVBLEtBQUssUUFBVUEsS0FBSyxRQUFVQSxLQUFLLFFBQVVBLEtBQUssUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsS0FBSyxRQUFVQSxLQUFLLFFBQVVBLEtBQUssUUFBVUEsS0FBSyxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxLQUFLLFFBQVVBLEtBQUssUUFBVUEsS0FBSyxRQUFVQSxLQUFLLFFBQVVBLEtBQUssUUFBVUEsS0FBSyxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxLQUFLLFFBQVVBLEtBQUssUUFBVUEsTUFBTSxRQUFVQSxLQUFLLFFBQVVBLEtBQUssUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFNBQVVBLEtBQUssU0FBVUEsS0FBSyxTQUFVQSxLQUFLLFNBQVVBLEtBQUssU0FBVUEsS0FBSyxTQUFVQSxLQUFLLFNBQVVBLEtBQUssU0FBVUEsS0FBSyxTQUFVQSxLQUFLLFNBQVVBLEtBQUssU0FBVUEsTUFBTSxTQUFVQSxLQUFLLFVBQVdBLEtBQUssVUFBV0EsS0FBSyxVQUFXQSxLQUFLLFVBQVdBLEtBQUssVUFBV0EsS0FBSyxVQUFXQSxLQUFLLFVBQVdBLEtBQUssVUFBV0EsTUFBTSxVQUFXQSxNQUFNLFVBQVdBLEtBQUssVUFBV0EsS0FBSyxVQUFXQSxLQUFLLFVBQVdBLEtBQUssVUFBV0EsS0FBSyxVQUFXQSxLQUFLLFdBQVdBLEtBQUssV0FBWUEsS0FBSztBRlcxakksSUVUTTVELEtBQWU0RCxPQUNWQSxNQUFNLFNBQVVBLEtBQUssU0FBVUEsS0FBSyxTQUFVQSxLQUFLLFNBQVVBLEtBQUs7QUZRN0UsSUVOTTNELEtBQVUyRCxPQUNMQSxLQUFLLFFBQVVBLEtBQUssUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxLQUFLLFFBQVVBLEtBQUssUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsS0FBSyxRQUFVQSxLQUFLLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFFBQVVBLE1BQU0sUUFBVUEsTUFBTSxRQUFVQSxNQUFNLFNBQVVBLE1BQU0sU0FBVUEsTUFBTSxTQUFVQSxLQUFLLFNBQVVBLEtBQUssU0FBVUEsTUFBTSxTQUFVQSxLQUFLLFNBQVVBLEtBQUssU0FBVUEsTUFBTSxTQUFVQSxNQUFNLFNBQVVBLE1BQU0sU0FBVUEsTUFBTSxTQUFVQSxNQUFNLFNBQVVBLE1BQU0sU0FBVUEsS0FBSyxTQUFVQSxLQUFLLFNBQVVBLEtBQUssU0FBVUEsS0FBSyxTQUFVQSxLQUFLLFNBQVVBLEtBQUssU0FBVUEsS0FBSyxTQUFVQSxLQUFLLFNBQVVBLEtBQUssU0FBVUEsS0FBSyxTQUFVQSxLQUFLLFNBQVVBLEtBQUssU0FBVUEsS0FBSyxTQUFVQSxLQUFLLFNBQVVBLEtBQUssU0FBVUEsS0FBSyxTQUFVQSxLQUFLLFNBQVVBLEtBQUssU0FBVUEsS0FBSyxTQUFVQSxLQUFLLFNBQVVBLEtBQUssU0FBVUEsS0FBSyxTQUFVQSxLQUFLLFNBQVVBLEtBQUssU0FBVUEsS0FBSyxTQUFVQSxLQUFLLFNBQVVBLEtBQUssU0FBVUEsS0FBSyxTQUFVQSxLQUFLLFNBQVVBLEtBQUssU0FBVUEsS0FBSyxTQUFVQSxLQUFLLFNBQVVBLEtBQUssU0FBVUEsS0FBSyxTQUFVQSxLQUFLLFNBQVVBLEtBQUssU0FBVUEsS0FBSyxTQUFVQSxLQUFLLFNBQVVBLEtBQUssU0FBVUEsS0FBSyxTQUFVQSxLQUFLLFNBQVVBLEtBQUssU0FBVUEsS0FBSyxTQUFVQSxLQUFLLFNBQVVBLEtBQUssU0FBV0EsS0FBSyxTQUFXQSxNQUFNLFNBQVdBLE1BQU0sU0FBV0EsS0FBSyxTQUFXQSxLQUFLLFVBQVdBLEtBQUssVUFBV0EsS0FBSyxVQUFXQSxLQUFLLFVBQVdBLEtBQUssVUFBV0EsS0FBSyxVQUFXQSxLQUFLLFVBQVdBLEtBQUssVUFBV0EsS0FBSyxVQUFXQSxNQUFNLFVBQVdBLE1BQU0sVUFBV0EsS0FBSyxVQUFXQSxLQUFLLFVBQVdBLE1BQU0sVUFBV0EsS0FBSyxVQUFXQSxLQUFLLFVBQVdBLE1BQU0sVUFBV0EsS0FBSyxVQUFXQSxLQUFLLFVBQVdBLEtBQUssVUFBV0EsS0FBSyxVQUFXQSxNQUFNLFVBQVdBLE1BQU0sVUFBV0EsTUFBTSxVQUFXQSxLQUFLLFVBQVdBLEtBQUssVUFBV0EsS0FBSyxVQUFXQSxLQUFLLFVBQVdBLEtBQUssVUFBV0EsS0FBSyxVQUFXQSxLQUFLLFVBQVdBLEtBQUssVUFBV0EsTUFBTSxVQUFXQSxNQUFNLFVBQVdBLEtBQUssVUFBV0EsS0FBSyxVQUFXQSxLQUFLLFVBQVdBLEtBQUssVUFBV0EsS0FBSyxVQUFXQSxLQUFLLFVBQVdBLEtBQUssVUFBV0EsS0FBSyxVQUFXQSxLQUFLLFVBQVdBLEtBQUssVUFBV0EsS0FBSyxVQUFXQSxLQUFLLFVBQVdBLEtBQUssVUFBV0EsS0FBSyxVQUFXQSxLQUFLLFVBQVdBLEtBQUssVUFBV0EsTUFBTSxVQUFXQSxLQUFLLFVBQVdBLEtBQUssVUFBV0EsTUFBTSxVQUFXQSxLQUFLLFVBQVdBLEtBQUssVUFBV0EsS0FBSyxVQUFXQSxLQUFLLFVBQVdB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QUFNLFdBQVM7QUFDWixVQUFRLE1BQU0saUJBQWlCLFFBQVEsTUFBTSxVQUFVLE9BQU8sS0FBSyxDQUFDO0FBQ3BFLFVBQVEsV0FBVztBQUN2QixDQUFDOyIsCiAgIm5hbWVzIjogWyJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJ4IiwgInkiLCAiZmluZEN1cnNvciIsICJjdXJzb3IiLCAiZGVsdGEiLCAib3B0aW9ucyIsICJvcHQiLCAibmV3Q3Vyc29yIiwgIm1heEN1cnNvciIsICJjbGFtcGVkQ3Vyc29yIiwgIndyYXBBbnNpIiwgInN0cmluZyIsICJjb2x1bW5zIiwgImxpbmUiLCAiZXhlYyIsICJ1cGRhdGVTZXR0aW5ncyIsICJ1cGRhdGVzIiwgImFsaWFzZXMiLCAiYWxpYXMiLCAiYWN0aW9uIiwgInNldHRpbmdzIiwgIm1lc3NhZ2VzIiwgImlzQWN0aW9uS2V5IiwgImtleSIsICJ2YWx1ZSIsICJkaWZmTGluZXMiLCAiYSIsICJiIiwgImFMaW5lcyIsICJiTGluZXMiLCAibnVtTGluZXMiLCAiZGlmZiIsICJpIiwgImlzQ2FuY2VsIiwgIkNBTkNFTF9TWU1CT0wiLCAic2V0UmF3TW9kZSIsICJpbnB1dCIsICJibG9jayIsICJzdGRpbiIsICJvdXRwdXQiLCAic3Rkb3V0IiwgIm92ZXJ3cml0ZSIsICJoaWRlQ3Vyc29yIiwgInJsIiwgInJlYWRsaW5lIiwgIlJlYWRTdHJlYW0iLCAiY2xlYXIiLCAiZGF0YSIsICJuYW1lIiwgInNlcXVlbmNlIiwgInN0ciIsICJkeCIsICJkeSIsICJpc1dpbmRvd3MiLCAid3JhcFRleHRXaXRoUHJlZml4IiwgInRleHQiLCAicHJlZml4IiwgInN0YXJ0UHJlZml4IiwgImdldENvbHVtbnMiLCAiaW5kZXgiLCAiZ2V0Q3Vyc29yRm9yVmFsdWUiLCAic2VsZWN0ZWQiLCAiaXRlbXMiLCAiaXRlbSIsICJkZWZhdWx0RmlsdGVyIiwgIm9wdGlvbiIsICJub3JtYWxpc2VkVmFsdWUiLCAibXVsdGlwbGUiLCAidmFsdWVzIiwgImlzQW1iaWd1b3VzIiwgImlzRnVsbFdpZHRoIiwgImlzV2lkZSIsICJBTlNJX1JFIiwgIkNPTlRST0xfUkUiLCAiVEFCX1JFIiwgIkVNT0pJX1JFIiwgIkxBVElOX1JFIiwgIk1PRElGSUVSX1JFIiwgIk5PX1RSVU5DQVRJT04iLCAiZ2V0U3RyaW5nVHJ1bmNhdGVkV2lkdGgiLCAiZmFzdFN0cmluZ1dpZHRoIiwgIkVTQyIsICJDU0kiLCAiRU5EX0NPREUiLCAiQU5TSV9FU0NBUEVfQkVMTCIsICJBTlNJX0NTSSIsICJBTlNJX09TQyIsICJBTlNJX1NHUl9URVJNSU5BVE9SIiwgIkFOU0lfRVNDQVBFX0xJTksiLCAiR1JPVVBfUkVHRVgiLCAiZ2V0Q2xvc2luZ0NvZGUiLCAid3JhcEFuc2lDb2RlIiwgIndyYXBBbnNpSHlwZXJsaW5rIiwgIndvcmRMZW5ndGhzIiwgIndyYXBXb3JkIiwgInN0cmluZ1Zpc2libGVUcmltU3BhY2VzUmlnaHQiLCAiYWN0aW9ucyIsICJnZXRSb3dzIiwgIlByb21wdCIsICJBdXRvY29tcGxldGVQcm9tcHQiLCAiQ29uZmlybVByb21wdCIsICJHcm91cE11bHRpU2VsZWN0UHJvbXB0IiwgIk11bHRpU2VsZWN0UHJvbXB0IiwgIlNlbGVjdFByb21wdCIsICJTZWxlY3RLZXlQcm9tcHQiLCAiVGV4dFByb21wdCIsICJ4IiwgInRydW5jYXRpb25PcHRpb25zIiwgIndpZHRoT3B0aW9ucyIsICJMSU1JVCIsICJFTExJUFNJUyIsICJFTExJUFNJU19XSURUSCIsICJBTlNJX1dJRFRIIiwgIkNPTlRST0xfV0lEVEgiLCAiVEFCX1dJRFRIIiwgIkFNQklHVU9VU19XSURUSCIsICJFTU9KSV9XSURUSCIsICJGVUxMX1dJRFRIX1dJRFRIIiwgIlJFR1VMQVJfV0lEVEgiLCAiV0lERV9XSURUSCIsICJpbmRleFByZXYiLCAibGVuZ3RoIiwgImxlbmd0aEV4dHJhIiwgInRydW5jYXRpb25FbmFibGVkIiwgInRydW5jYXRpb25JbmRleCIsICJ0cnVuY2F0aW9uTGltaXQiLCAidW5tYXRjaGVkU3RhcnQiLCAidW5tYXRjaGVkRW5kIiwgIndpZHRoIiwgIndpZHRoRXh0cmEiLCAib3V0ZXIiLCAidW5tYXRjaGVkIiwgImNoYXIiLCAiY29kZVBvaW50IiwgImZhc3RTdHJpbmdUcnVuY2F0ZWRXaWR0aCIsICJvcGVuaW5nQ29kZSIsICJjb2RlIiwgInVybCIsICJ3b3JkcyIsICJjaGFyYWN0ZXIiLCAic3RyaW5nV2lkdGgiLCAicm93cyIsICJ3b3JkIiwgImNoYXJhY3RlcnMiLCAiaXNJbnNpZGVFc2NhcGUiLCAiaXNJbnNpZGVMaW5rRXNjYXBlIiwgImxhc3RSb3ciLCAidmlzaWJsZSIsICJjdXJyZW50Q2hhcmFjdGVyIiwgIm5leHRDaGFyYWN0ZXIiLCAicmF3Q2hhcmFjdGVySW5kZXgiLCAiY2hhcmFjdGVyTGVuZ3RoIiwgImxhc3QiLCAicmV0dXJuVmFsdWUiLCAiZXNjYXBlQ29kZSIsICJlc2NhcGVVcmwiLCAibGVuZ3RocyIsICJyb3dMZW5ndGgiLCAicmVtYWluaW5nQ29sdW1ucyIsICJicmVha3NTdGFydGluZ1RoaXNMaW5lIiwgInJvdyIsICJwcmVTdHJpbmciLCAicHJlIiwgImN1cnJlbnRQcmUiLCAibmV4dFByZSIsICJwcmVTdHJpbmdJbmRleCIsICJncm91cHMiLCAiY2xvc2luZ0NvZGUiLCAidHJhY2tWYWx1ZSIsICJyZW5kZXIiLCAic2lnbmFsIiwgIm9wdHMiLCAiZXZlbnQiLCAicGFyYW1zIiwgImNiIiwgImNicyIsICJjbGVhbnVwIiwgInN1YnNjcmliZXIiLCAicmVzb2x2ZSIsICJfa2V5IiwgIndyaXRlIiwgInByb2JsZW0iLCAibGluZXMiLCAiZnJhbWUiLCAiZGlmZk9mZnNldEFmdGVyIiwgImRpZmZPZmZzZXRCZWZvcmUiLCAiZGlmZkxpbmUiLCAiZXJhc2UiLCAiYWRqdXN0ZWREaWZmTGluZSIsICJuZXdMaW5lcyIsICIjY3Vyc29yIiwgIiNsYXN0VXNlcklucHV0IiwgIiNmaWx0ZXJGbiIsICIjb3B0aW9ucyIsICJjb2xvciIsICJzMSIsICJzMiIsICJzMyIsICJpbml0aWFsVmFsdWVzIiwgInNlbGVjdGVkVmFsdWUiLCAic2VsZWN0ZWRJbmRleCIsICIjb25LZXkiLCAiI29uVXNlcklucHV0Q2hhbmdlZCIsICJfY2hhciIsICJpc1VwS2V5IiwgImlzRG93bktleSIsICJpc1JldHVybktleSIsICJ2IiwgInZhbHVlQ3Vyc29yIiwgImZvY3VzZWRPcHRpb24iLCAiY29uZmlybSIsICIjc2VsZWN0YWJsZUdyb3VwcyIsICJncm91cCIsICJvIiwgImdyb3VwZWRJdGVtcyIsICJjdXJyZW50SXNHcm91cCIsICJlbmFibGVkT3B0aW9ucyIsICJhbGxTZWxlY3RlZCIsICJub3RTZWxlY3RlZCIsICJ1c2VySW5wdXQiLCAibWFza2VkIiwgIm1hc2siLCAiaW5pdGlhbEN1cnNvciIsICJjYXNlU2Vuc2l0aXZlIiwgImtleXMiLCAiaW5pdGlhbCIsICJrZXlJbmZvIiwgImNhc2VkS2V5IiwgImlzVW5pY29kZVN1cHBvcnRlZCIsICJwcm9jZXNzIiwgIndyYXBBbnNpIiwgInN0cmluZyIsICJjb2x1bW5zIiwgIm9wdGlvbnMiLCAibGluZSIsICJleGVjIiwgImdldExhYmVsIiwgIm9wdGlvbiIsICJnZXRGaWx0ZXJlZE9wdGlvbiIsICJzZWFyY2hUZXh0IiwgImxhYmVsIiwgImhpbnQiLCAidmFsdWUiLCAidGVybSIsICJnZXRTZWxlY3RlZE9wdGlvbnMiLCAidmFsdWVzIiwgInJlc3VsdHMiLCAiZ2V0UGFkZGluZ0ZvckxpbmUiLCAibGluZUxlbmd0aCIsICJpbm5lcldpZHRoIiwgInBhZGRpbmciLCAiY29udGVudEFsaWduIiwgImxlZnRQYWRkaW5nIiwgInJpZ2h0UGFkZGluZyIsICJwcm9ncmVzcyIsICJzdHlsZSIsICJ1c2VyTWF4IiwgInVzZXJTaXplIiwgInNwaW5uZXJPcHRpb25zIiwgInNwaW4iLCAic3Bpbm5lciIsICJwcmV2aW91c01lc3NhZ2UiLCAibWF4IiwgInNpemUiLCAiYWN0aXZlU3R5bGUiLCAic3RhdGUiLCAiY29sb3IiLCAiZHJhd1Byb2dyZXNzIiwgIm1zZyIsICJhY3RpdmUiLCAiU19QUk9HUkVTU19DSEFSIiwgInN0YXJ0IiwgImFkdmFuY2UiLCAic3RlcCIsICJ1bmljb2RlIiwgImlzQ0kiLCAiaXNUVFkiLCAidW5pY29kZU9yIiwgIlNfU1RFUF9BQ1RJVkUiLCAiU19TVEVQX0NBTkNFTCIsICJTX1NURVBfRVJST1IiLCAiU19TVEVQX1NVQk1JVCIsICJTX0JBUl9TVEFSVCIsICJTX0JBUiIsICJTX0JBUl9FTkQiLCAiU19CQVJfU1RBUlRfUklHSFQiLCAiU19CQVJfRU5EX1JJR0hUIiwgIlNfUkFESU9fQUNUSVZFIiwgIlNfUkFESU9fSU5BQ1RJVkUiLCAiU19DSEVDS0JPWF9BQ1RJVkUiLCAiU19DSEVDS0JPWF9TRUxFQ1RFRCIsICJTX0NIRUNLQk9YX0lOQUNUSVZFIiwgIlNfUEFTU1dPUkRfTUFTSyIsICJTX0JBUl9IIiwgIlNfQ09STkVSX1RPUF9SSUdIVCIsICJTX0NPTk5FQ1RfTEVGVCIsICJTX0NPUk5FUl9CT1RUT01fUklHSFQiLCAiU19DT1JORVJfQk9UVE9NX0xFRlQiLCAiU19DT1JORVJfVE9QX0xFRlQiLCAiU19JTkZPIiwgIlNfU1VDQ0VTUyIsICJTX1dBUk4iLCAiU19FUlJPUiIsICJzeW1ib2wiLCAic3ltYm9sQmFyIiwgImlzQW1iaWd1b3VzIiwgImlzRnVsbFdpZHRoIiwgImlzV2lkZSIsICJBTlNJX1JFIiwgIkNPTlRST0xfUkUiLCAiVEFCX1JFIiwgIkVNT0pJX1JFIiwgIkxBVElOX1JFIiwgIk1PRElGSUVSX1JFIiwgIk5PX1RSVU5DQVRJT04iLCAiZ2V0U3RyaW5nVHJ1bmNhdGVkV2lkdGgiLCAiZmFzdFN0cmluZ1dpZHRoIiwgIkVTQyIsICJDU0kiLCAiRU5EX0NPREUiLCAiQU5TSV9FU0NBUEVfQkVMTCIsICJBTlNJX0NTSSIsICJBTlNJX09TQyIsICJBTlNJX1NHUl9URVJNSU5BVE9SIiwgIkFOU0lfRVNDQVBFX0xJTksiLCAiR1JPVVBfUkVHRVgiLCAiZ2V0Q2xvc2luZ0NvZGUiLCAid3JhcEFuc2lDb2RlIiwgIndyYXBBbnNpSHlwZXJsaW5rIiwgIndvcmRMZW5ndGhzIiwgIndyYXBXb3JkIiwgInN0cmluZ1Zpc2libGVUcmltU3BhY2VzUmlnaHQiLCAidHJpbUxpbmVzIiwgImxpbWl0T3B0aW9ucyIsICJhdXRvY29tcGxldGUiLCAiYXV0b2NvbXBsZXRlTXVsdGlzZWxlY3QiLCAicm91bmRlZFN5bWJvbHMiLCAic3F1YXJlU3ltYm9scyIsICJkZWZhdWx0Rm9ybWF0Qm9yZGVyIiwgImJveCIsICJjb25maXJtIiwgImdyb3VwIiwgImdyb3VwTXVsdGlzZWxlY3QiLCAibG9nIiwgImNhbmNlbCIsICJpbnRybyIsICJvdXRybyIsICJjb21wdXRlTGFiZWwiLCAibXVsdGlzZWxlY3QiLCAiZGVmYXVsdE5vdGVGb3JtYXR0ZXIiLCAid3JhcFdpdGhGb3JtYXQiLCAibm90ZSIsICJwYXNzd29yZCIsICJwYXRoIiwgImRlZmF1bHRTdHlsZUZuIiwgInNlbGVjdCIsICJzZWxlY3RLZXkiLCAicHJlZml4IiwgInN0cmVhbSIsICJ0YXNrcyIsICJzdHJpcERlc3RydWN0aXZlQU5TSSIsICJ0YXNrTG9nIiwgInRleHQiLCAib3V0cHV0IiwgImMiLCAiZmFsbGJhY2siLCAieCIsICJpbnB1dCIsICJ0cnVuY2F0aW9uT3B0aW9ucyIsICJ3aWR0aE9wdGlvbnMiLCAiTElNSVQiLCAiRUxMSVBTSVMiLCAiRUxMSVBTSVNfV0lEVEgiLCAiQU5TSV9XSURUSCIsICJDT05UUk9MX1dJRFRIIiwgIlRBQl9XSURUSCIsICJBTUJJR1VPVVNfV0lEVEgiLCAiRU1PSklfV0lEVEgiLCAiRlVMTF9XSURUSF9XSURUSCIsICJSRUdVTEFSX1dJRFRIIiwgIldJREVfV0lEVEgiLCAiaW5kZXhQcmV2IiwgImluZGV4IiwgImxlbmd0aCIsICJsZW5ndGhFeHRyYSIsICJ0cnVuY2F0aW9uRW5hYmxlZCIsICJ0cnVuY2F0aW9uSW5kZXgiLCAidHJ1bmNhdGlvbkxpbWl0IiwgInVubWF0Y2hlZFN0YXJ0IiwgInVubWF0Y2hlZEVuZCIsICJ3aWR0aCIsICJ3aWR0aEV4dHJhIiwgIm91dGVyIiwgInVubWF0Y2hlZCIsICJjaGFyIiwgImNvZGVQb2ludCIsICJmYXN0U3RyaW5nVHJ1bmNhdGVkV2lkdGgiLCAib3BlbmluZ0NvZGUiLCAiY29kZSIsICJ1cmwiLCAid29yZHMiLCAiY2hhcmFjdGVyIiwgInN0cmluZ1dpZHRoIiwgInJvd3MiLCAid29yZCIsICJjaGFyYWN0ZXJzIiwgImlzSW5zaWRlRXNjYXBlIiwgImlzSW5zaWRlTGlua0VzY2FwZSIsICJsYXN0Um93IiwgInZpc2libGUiLCAiY3VycmVudENoYXJhY3RlciIsICJuZXh0Q2hhcmFjdGVyIiwgInJhd0NoYXJhY3RlckluZGV4IiwgImNoYXJhY3Rlckxlbmd0aCIsICJsYXN0IiwgInJldHVyblZhbHVlIiwgImVzY2FwZUNvZGUiLCAiZXNjYXBlVXJsIiwgImxlbmd0aHMiLCAicm93TGVuZ3RoIiwgInJlbWFpbmluZ0NvbHVtbnMiLCAiYnJlYWtzU3RhcnRpbmdUaGlzTGluZSIsICJyb3ciLCAicHJlU3RyaW5nIiwgInByZSIsICJjdXJyZW50UHJlIiwgIm5leHRQcmUiLCAicHJlU3RyaW5nSW5kZXgiLCAiZ3JvdXBzIiwgImNsb3NpbmdDb2RlIiwgImluaXRpYWxMaW5lQ291bnQiLCAic3RhcnRJbmRleCIsICJlbmRJbmRleCIsICJtYXhMaW5lcyIsICJsaW5lQ291bnQiLCAicmVtb3ZhbHMiLCAiaSIsICJwYXJhbXMiLCAiY3Vyc29yIiwgImdldENvbHVtbnMiLCAiY29sdW1uUGFkZGluZyIsICJyb3dQYWRkaW5nIiwgIm1heFdpZHRoIiwgImdldFJvd3MiLCAib3ZlcmZsb3dGb3JtYXQiLCAicGFyYW1NYXhJdGVtcyIsICJvdXRwdXRNYXhJdGVtcyIsICJtYXhJdGVtcyIsICJzbGlkaW5nV2luZG93TG9jYXRpb24iLCAic2hvdWxkUmVuZGVyVG9wRWxsaXBzaXMiLCAic2hvdWxkUmVuZGVyQm90dG9tRWxsaXBzaXMiLCAic2xpZGluZ1dpbmRvd0xvY2F0aW9uRW5kIiwgImxpbmVHcm91cHMiLCAic2xpZGluZ1dpbmRvd0xvY2F0aW9uV2l0aEVsbGlwc2lzIiwgInNsaWRpbmdXaW5kb3dMb2NhdGlvbkVuZFdpdGhFbGxpcHNpcyIsICJ3cmFwcGVkTGluZXMiLCAicHJlY2VkaW5nUmVtb3ZhbHMiLCAiZm9sbG93aW5nUmVtb3ZhbHMiLCAibmV3TGluZUNvdW50IiwgImN1cnNvckdyb3VwSW5kZXgiLCAidHJpbUxpbmVzTG9jYWwiLCAicmVzdWx0IiwgImxpbmVHcm91cCIsICJvcHRzIiwgIkF1dG9jb21wbGV0ZVByb21wdCIsICJzZWFyY2giLCAib3B0IiwgImhhc0d1aWRlIiwgInNldHRpbmdzIiwgImhlYWRpbmdzIiwgInVzZXJJbnB1dCIsICJwbGFjZWhvbGRlciIsICJzaG93UGxhY2Vob2xkZXIiLCAic2VsZWN0ZWQiLCAic3VibWl0UHJlZml4IiwgInVzZXJJbnB1dFRleHQiLCAiY2FuY2VsUHJlZml4IiwgImJhckNvbG9yIiwgImd1aWRlUHJlZml4IiwgImd1aWRlUHJlZml4RW5kIiwgInNlYXJjaFRleHRWYWx1ZSIsICJtYXRjaGVzIiwgIm5vUmVzdWx0cyIsICJ2YWxpZGF0aW9uRXJyb3IiLCAiaW5zdHJ1Y3Rpb25zIiwgImZvb3RlcnMiLCAiZGlzcGxheU9wdGlvbnMiLCAiZm9ybWF0T3B0aW9uIiwgInNlbGVjdGVkVmFsdWVzIiwgImZvY3VzZWRWYWx1ZSIsICJpc1NlbGVjdGVkIiwgImNoZWNrYm94IiwgInByb21wdCIsICJ0aXRsZSIsICJlcnJvck1lc3NhZ2UiLCAiaGVhZGVyTGluZXMiLCAiZm9vdGVyTGluZXMiLCAibWVzc2FnZSIsICJib3JkZXJUb3RhbFdpZHRoIiwgInRpdGxlUGFkZGluZyIsICJjb250ZW50UGFkZGluZyIsICJsaW5lUHJlZml4IiwgImZvcm1hdEJvcmRlciIsICJzeW1ib2xzIiwgImhTeW1ib2wiLCAidlN5bWJvbCIsICJsaW5lUHJlZml4V2lkdGgiLCAidGl0bGVXaWR0aCIsICJtYXhCb3hXaWR0aCIsICJib3hXaWR0aCIsICJsaW5lcyIsICJsb25nZXN0TGluZSIsICJsaW5lV2l0aFBhZGRpbmciLCAibG9uZ2VzdExpbmVXaWR0aCIsICJtYXhUaXRsZUxlbmd0aCIsICJ0cnVuY2F0ZWRUaXRsZSIsICJ0aXRsZVBhZGRpbmdMZWZ0IiwgInRpdGxlUGFkZGluZ1JpZ2h0IiwgIndyYXBwZWRNZXNzYWdlIiwgImxlZnRMaW5lUGFkZGluZyIsICJyaWdodExpbmVQYWRkaW5nIiwgImluYWN0aXZlIiwgIkNvbmZpcm1Qcm9tcHQiLCAiZGVmYXVsdFByZWZpeCIsICJkZWZhdWx0UHJlZml4RW5kIiwgInByb21wdHMiLCAicHJvbXB0TmFtZXMiLCAibmFtZSIsICJlIiwgImlzQ2FuY2VsIiwgInNlbGVjdGFibGVHcm91cHMiLCAiZ3JvdXBTcGFjaW5nIiwgImlzSXRlbSIsICJuZXh0IiwgImlzTGFzdCIsICJzcGFjaW5nUHJlZml4IiwgInNwYWNpbmdQcmVmaXhUZXh0IiwgInNlbGVjdGVkQ2hlY2tib3giLCAidW5zZWxlY3RlZENoZWNrYm94IiwgInJlcXVpcmVkIiwgIkdyb3VwTXVsdGlTZWxlY3RQcm9tcHQiLCAic2VsZWN0ZWRPcHRpb25zIiwgIm9wdGlvblZhbHVlIiwgIm9wdGlvbnNUZXh0IiwgImZvb3RlciIsICJsbiIsICJncm91cEFjdGl2ZSIsICJvcHRpb25UZXh0IiwgIm9wdGlvbnNQcmVmaXgiLCAic2Vjb25kYXJ5U3ltYm9sIiwgInNwYWNpbmciLCAid2l0aEd1aWRlIiwgInBhcnRzIiwgInNwYWNpbmdTdHJpbmciLCAic2Vjb25kYXJ5UHJlZml4IiwgIm1lc3NhZ2VQYXJ0cyIsICJmaXJzdExpbmUiLCAiZm9ybWF0IiwgInN0ciIsICJNdWx0aVNlbGVjdFByb21wdCIsICJ3cmFwVGV4dFdpdGhQcmVmaXgiLCAic3R5bGVPcHRpb24iLCAic3VibWl0VGV4dCIsICJ3cmFwcGVkU3VibWl0VGV4dCIsICJ3cmFwcGVkTGFiZWwiLCAidGl0bGVMaW5lQ291bnQiLCAiZm9vdGVyTGluZUNvdW50IiwgIndyYXBNc2ciLCAibWF4V2lkdGhOb3JtYWwiLCAic3VtIiwgIm1heFdpZHRoRm9ybWF0IiwgIndyYXBXaWR0aCIsICJ0aXRsZUxlbiIsICJsZW4iLCAibGVhZGluZ0JvcmRlciIsICJib3R0b21MZWZ0IiwgIlBhc3N3b3JkUHJvbXB0IiwgIm1hc2tlZCIsICJlcnJvclByZWZpeCIsICJlcnJvclByZWZpeEVuZCIsICJtYXNrZWRUZXh0IiwgInZhbGlkYXRlIiwgInNlYXJjaFBhdGgiLCAiZXhpc3RzU3luYyIsICJsc3RhdFN5bmMiLCAiZGlybmFtZSIsICJyZWFkZGlyU3luYyIsICJpdGVtIiwgImpvaW4iLCAic3RhdHMiLCAiaXNEaXJlY3RvcnkiLCAiaW5kaWNhdG9yIiwgIm9uQ2FuY2VsIiwgImNhbmNlbE1lc3NhZ2UiLCAiZnJhbWVzIiwgImRlbGF5IiwgInNpZ25hbCIsICJpc0NJRm4iLCAidW5ibG9jayIsICJsb29wIiwgImlzU3Bpbm5lckFjdGl2ZSIsICJpc0NhbmNlbGxlZCIsICJfbWVzc2FnZSIsICJfcHJldk1lc3NhZ2UiLCAiX29yaWdpbiIsICJzdHlsZUZuIiwgImhhbmRsZUV4aXQiLCAiX3N0b3AiLCAiZXJyb3JFdmVudEhhbmRsZXIiLCAic2lnbmFsRXZlbnRIYW5kbGVyIiwgInJlZ2lzdGVySG9va3MiLCAiY2xlYXJIb29rcyIsICJjbGVhclByZXZNZXNzYWdlIiwgInByZXZMaW5lcyIsICJlcmFzZSIsICJyZW1vdmVUcmFpbGluZ0RvdHMiLCAiZm9ybWF0VGltZXIiLCAib3JpZ2luIiwgImR1cmF0aW9uIiwgIm1pbiIsICJzZWNzIiwgImJsb2NrIiwgImZyYW1lSW5kZXgiLCAiaW5kaWNhdG9yVGltZXIiLCAiZnJhbWUiLCAib3V0cHV0TWVzc2FnZSIsICJsb2FkaW5nRG90cyIsICJ3cmFwcGVkIiwgInNpbGVudCIsICJTZWxlY3RQcm9tcHQiLCAidGl0bGVQcmVmaXgiLCAidGl0bGVQcmVmaXhCYXIiLCAibWVzc2FnZUxpbmVzIiwgInByZWZpeEVuZCIsICJTZWxlY3RLZXlQcm9tcHQiLCAic2VsZWN0ZWRPcHRpb24iLCAiaXRlcmFibGUiLCAibGluZVdpZHRoIiwgImNodW5rIiwgInN0cmlwIiwgImNodW5rTGVuIiwgInRhc2siLCAicyIsICJiYXJTaXplIiwgInJldGFpbkxvZyIsICJpc1RUWUZuIiwgImJ1ZmZlcnMiLCAibGFzdE1lc3NhZ2VXYXNSYXciLCAiY2xlYXIiLCAiY2xlYXJUaXRsZSIsICJidWZmZXIiLCAiYnVmZmVySGVpZ2h0IiwgImNvdW50IiwgInByaW50QnVmZmVyIiwgIm1lc3NhZ2VTcGFjaW5nIiwgImZ1bGwiLCAibWVzc2FnZXMiLCAicmVuZGVyQnVmZmVyIiwgImhlYWRlciIsICJtb3B0cyIsICJsaW5lc1RvUmVtb3ZlIiwgInJlbW92ZWRMaW5lcyIsICJwcmludEJ1ZmZlcnMiLCAiY29tcGxldGVCdWZmZXIiLCAiVGV4dFByb21wdCIsICJlcnJvclRleHQiLCAidmFsdWVUZXh0IiwgImltcG9ydF9mcyIsICJpbXBvcnRfb3MiLCAiaW1wb3J0X3BhdGgiLCAiaW1wb3J0X2NoaWxkX3Byb2Nlc3MiLCAiaW1wb3J0X3BpY29jb2xvcnMiLCAib3MiLCAicGF0aCIsICJmcyIsICJpbXBvcnRfcGF0aCIsICJpbXBvcnRfb3MiLCAib3MiLCAicGF0aCIsICJuZXQiLCAiZSIsICJpbXBvcnRfcGF0aCIsICJpbXBvcnRfb3MiLCAicGF0aCIsICJvcyIsICJpbXBvcnRfb3MiLCAiaW1wb3J0X3BhdGgiLCAicGF0aCIsICJvcyIsICJpbXBvcnRfZnMiLCAiaW1wb3J0X29zIiwgImltcG9ydF9wYXRoIiwgInBhdGgiLCAib3MiLCAiZnMiLCAiZnMiLCAicGF0aCIsICJpbXBvcnRfZnMiLCAiaW1wb3J0X29zIiwgImltcG9ydF9wYXRoIiwgInBhdGgiLCAib3MiLCAiZnMiLCAiZSIsICJpbXBvcnRfZnMiLCAiaW1wb3J0X29zIiwgImltcG9ydF9wYXRoIiwgImltcG9ydF9jaGlsZF9wcm9jZXNzIiwgInBhdGgiLCAib3MiLCAicmVzb2x2ZU5vZGVQYXRoIiwgInJlc29sdmVDbGlFbnRyeSIsICJmcyIsICJpbnN0YWxsU2VydmljZSIsICJlbmFibGVTZXJ2aWNlIiwgImRpc2FibGVTZXJ2aWNlIiwgInVuaW5zdGFsbFNlcnZpY2UiLCAic3RhdHVzU2VydmljZSIsICJzdGFydFNlcnZpY2UiLCAic3RvcFNlcnZpY2UiLCAicmVzdGFydFNlcnZpY2UiLCAiaW1wb3J0X2ZzIiwgImltcG9ydF9vcyIsICJpbXBvcnRfcGF0aCIsICJpbXBvcnRfY2hpbGRfcHJvY2VzcyIsICJwYXRoIiwgIm9zIiwgInJlc29sdmVOb2RlUGF0aCIsICJyZXNvbHZlQ2xpRW50cnkiLCAiZnMiLCAiaW5zdGFsbFNlcnZpY2UiLCAiZW5hYmxlU2VydmljZSIsICJkaXNhYmxlU2VydmljZSIsICJ1bmluc3RhbGxTZXJ2aWNlIiwgInN0YXR1c1NlcnZpY2UiLCAic3RhcnRTZXJ2aWNlIiwgInN0b3BTZXJ2aWNlIiwgInJlc3RhcnRTZXJ2aWNlIiwgImltcG9ydF9mcyIsICJpbXBvcnRfb3MiLCAiaW1wb3J0X3BhdGgiLCAiaW1wb3J0X2NoaWxkX3Byb2Nlc3MiLCAicGF0aCIsICJvcyIsICJmcyIsICJodHRwcyIsICJodHRwIiwgImUiLCAiaW1wb3J0X2ZzIiwgImltcG9ydF9vcyIsICJpbXBvcnRfcGF0aCIsICJpbXBvcnRfY3J5cHRvIiwgInBhdGgiLCAib3MiLCAiZnMiLCAiaW1wb3J0X2h0dHAiLCAiaW1wb3J0X2h0dHBzIiwgInBhdGgiLCAiaHR0cHMiLCAiaHR0cCIsICJpbXBvcnRfZnMiLCAiaW1wb3J0X29zIiwgImltcG9ydF9wYXRoIiwgImltcG9ydF9jaGlsZF9wcm9jZXNzIiwgImltcG9ydF9mcyIsICJpbXBvcnRfb3MiLCAiaW1wb3J0X3BhdGgiLCAiaW1wb3J0X2NyeXB0byIsICJwYXRoIiwgIm9zIiwgImZzIiwgInBhdGgiLCAiZnMiLCAic2xlZXAiLCAib3MiLCAiaW1wb3J0X2ZzIiwgImltcG9ydF9vcyIsICJpbXBvcnRfcGF0aCIsICJwYXRoIiwgIm9zIiwgImVuc3VyZURpciIsICJmcyIsICJpbXBvcnRfZnMiLCAiaW1wb3J0X29zIiwgImltcG9ydF9wYXRoIiwgImltcG9ydF9jaGlsZF9wcm9jZXNzIiwgInBhdGgiLCAib3MiLCAiZnMiLCAiY29sb3IiLCAicmVhZGxpbmUiLCAiaW1wb3J0X2NoaWxkX3Byb2Nlc3MiLCAiaW1wb3J0X3BhdGgiLCAicGF0aCIsICJEQl9QQVRIIiwgInBhdGgiLCAib3MiLCAiU09DS0VUX1BBVEgiLCAiaXNEYWVtb25SZWFjaGFibGUiLCAicmVzb2x2ZURhZW1vbkVudHJ5cG9pbnQiLCAiZnMiLCAiZ2V0SG9zdGVkRGFzaGJvYXJkVXJsIiwgInN0YXJ0RGFlbW9uRGV0YWNoZWQiLCAid2FpdEZvckRhZW1vbiIsICJjb2xvciIsICJrIiwgInBheWxvYWQiLCAicXVldWVQYXRoIiwgImUiLCAiaW5zdGFsbFNlcnZpY2UiLCAiZW5hYmxlU2VydmljZSIsICJkaXNhYmxlU2VydmljZSIsICJ1bmluc3RhbGxTZXJ2aWNlIiwgInN0YXR1c1NlcnZpY2UiLCAic3RhcnRTZXJ2aWNlIiwgInN0b3BTZXJ2aWNlIiwgInJlc3RhcnRTZXJ2aWNlIl0KfQo=
|