@aws-cdk/integ-runner 2.114.0-alpha.0 → 2.115.0-alpha.0
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/lib/index.js +4 -4
- package/lib/workers/extract/index.js +2 -2
- package/package.json +17 -17
package/lib/index.js
CHANGED
|
@@ -2792,7 +2792,7 @@ var require_polyfills = __commonJS({
|
|
|
2792
2792
|
Object.setPrototypeOf(read, fs$read);
|
|
2793
2793
|
return read;
|
|
2794
2794
|
}(fs3.read);
|
|
2795
|
-
fs3.readSync = typeof fs3.readSync !== "function" ? fs3.readSync : function(fs$readSync) {
|
|
2795
|
+
fs3.readSync = typeof fs3.readSync !== "function" ? fs3.readSync : /* @__PURE__ */ function(fs$readSync) {
|
|
2796
2796
|
return function(fd, buffer, offset, length, position) {
|
|
2797
2797
|
var eagCounter = 0;
|
|
2798
2798
|
while (true) {
|
|
@@ -9387,7 +9387,7 @@ ${customMsgs.join("\n")}` : "";
|
|
|
9387
9387
|
key.forEach((k) => {
|
|
9388
9388
|
builder(k, value);
|
|
9389
9389
|
});
|
|
9390
|
-
} else if (((key2) => typeof key2 === "object")(key)) {
|
|
9390
|
+
} else if (/* @__PURE__ */ ((key2) => typeof key2 === "object")(key)) {
|
|
9391
9391
|
for (const k of objectKeys(key)) {
|
|
9392
9392
|
builder(k, key[k]);
|
|
9393
9393
|
}
|
|
@@ -9402,7 +9402,7 @@ ${customMsgs.join("\n")}` : "";
|
|
|
9402
9402
|
}
|
|
9403
9403
|
function deleteFromParserHintObject(optionKey) {
|
|
9404
9404
|
objectKeys(options).forEach((hintKey) => {
|
|
9405
|
-
if (((key) => key === "configObjects")(hintKey))
|
|
9405
|
+
if (/* @__PURE__ */ ((key) => key === "configObjects")(hintKey))
|
|
9406
9406
|
return;
|
|
9407
9407
|
const hint = options[hintKey];
|
|
9408
9408
|
if (Array.isArray(hint)) {
|
|
@@ -10504,4 +10504,4 @@ var cli_1 = (init_cli(), __toCommonJS(cli_exports));
|
|
|
10504
10504
|
Object.defineProperty(exports, "cli", { enumerable: true, get: function() {
|
|
10505
10505
|
return cli_1.cli;
|
|
10506
10506
|
} });
|
|
10507
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvbG9yLW5hbWUvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Fuc2ktc3R5bGVzL25vZGVfbW9kdWxlcy9jb2xvci1jb252ZXJ0L2NvbnZlcnNpb25zLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9hbnNpLXN0eWxlcy9ub2RlX21vZHVsZXMvY29sb3ItY29udmVydC9yb3V0ZS5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYW5zaS1zdHlsZXMvbm9kZV9tb2R1bGVzL2NvbG9yLWNvbnZlcnQvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Fuc2ktc3R5bGVzL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9oYXMtZmxhZy9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3VwcG9ydHMtY29sb3IvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NoYWxrL3NvdXJjZS91dGlsLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jaGFsay9zb3VyY2UvdGVtcGxhdGVzLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jaGFsay9zb3VyY2UvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3dvcmtlcnBvb2wvc3JjL3JlcXVpcmVGb29sV2VicGFjay5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvd29ya2VycG9vbC9zcmMvZW52aXJvbm1lbnQuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3dvcmtlcnBvb2wvc3JjL1Byb21pc2UuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3dvcmtlcnBvb2wvc3JjL2dlbmVyYXRlZC9lbWJlZGRlZFdvcmtlci5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvd29ya2VycG9vbC9zcmMvV29ya2VySGFuZGxlci5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvd29ya2VycG9vbC9zcmMvZGVidWctcG9ydC1hbGxvY2F0b3IuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3dvcmtlcnBvb2wvc3JjL1Bvb2wuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3dvcmtlcnBvb2wvc3JjL3RyYW5zZmVyLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy93b3JrZXJwb29sL3NyYy93b3JrZXIuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3dvcmtlcnBvb2wvc3JjL2luZGV4LmpzIiwgImxvZ2dlci50cyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdW5pdmVyc2FsaWZ5L2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9ncmFjZWZ1bC1mcy9wb2x5ZmlsbHMuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2dyYWNlZnVsLWZzL2xlZ2FjeS1zdHJlYW1zLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9ncmFjZWZ1bC1mcy9jbG9uZS5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZ3JhY2VmdWwtZnMvZ3JhY2VmdWwtZnMuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9mcy9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXQtbGVhc3Qtbm9kZS9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL21rZGlycy9tYWtlLWRpci5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL21rZGlycy9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL3V0aWwvdXRpbWVzLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvdXRpbC9zdGF0LmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvY29weS1zeW5jL2NvcHktc3luYy5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL2NvcHktc3luYy9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL3BhdGgtZXhpc3RzL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvY29weS9jb3B5LmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvY29weS9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL3JlbW92ZS9yaW1yYWYuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9yZW1vdmUvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9lbXB0eS9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL2Vuc3VyZS9maWxlLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvZW5zdXJlL2xpbmsuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9lbnN1cmUvc3ltbGluay1wYXRocy5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL2Vuc3VyZS9zeW1saW5rLXR5cGUuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9lbnN1cmUvc3ltbGluay5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL2Vuc3VyZS9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvanNvbmZpbGUvdXRpbHMuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2pzb25maWxlL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvanNvbi9qc29uZmlsZS5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL291dHB1dC9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL2pzb24vb3V0cHV0LWpzb24uanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9qc29uL291dHB1dC1qc29uLXN5bmMuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9qc29uL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvbW92ZS1zeW5jL21vdmUtc3luYy5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL21vdmUtc3luYy9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL21vdmUvbW92ZS5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL21vdmUvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9pbmRleC5qcyIsICJydW5uZXIvaW50ZWdyYXRpb24tdGVzdHMudHMiLCAid29ya2Vycy9jb21tb24udHMiLCAidXRpbHMudHMiLCAid29ya2Vycy9pbnRlZy10ZXN0LXdvcmtlci50cyIsICJ3b3JrZXJzL2ludGVnLXNuYXBzaG90LXdvcmtlci50cyIsICJ3b3JrZXJzL2luZGV4LnRzIiwgIndvcmtlcnMvaW50ZWctd2F0Y2gtd29ya2VyLnRzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy95MThuL2J1aWxkL2luZGV4LmNqcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMveWFyZ3Mvbm9kZV9tb2R1bGVzL3lhcmdzLXBhcnNlci9idWlsZC9pbmRleC5janMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Fuc2ktcmVnZXgvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0cmlwLWFuc2kvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2lzLWZ1bGx3aWR0aC1jb2RlLXBvaW50L2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9lbW9qaS1yZWdleC9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3RyaW5nLXdpZHRoL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy93cmFwLWFuc2kvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3lhcmdzL25vZGVfbW9kdWxlcy9jbGl1aS9idWlsZC9pbmRleC5janMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2VzY2FsYWRlL3N5bmMvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2dldC1jYWxsZXItZmlsZS9pbmRleC50cyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmVxdWlyZS1kaXJlY3RvcnkvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3lhcmdzL2J1aWxkL2luZGV4LmNqcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMveWFyZ3MvaW5kZXguY2pzIiwgImNsaS50cyIsICJpbmRleC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiJ3VzZSBzdHJpY3QnXHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IHtcclxuXHRcImFsaWNlYmx1ZVwiOiBbMjQwLCAyNDgsIDI1NV0sXHJcblx0XCJhbnRpcXVld2hpdGVcIjogWzI1MCwgMjM1LCAyMTVdLFxyXG5cdFwiYXF1YVwiOiBbMCwgMjU1LCAyNTVdLFxyXG5cdFwiYXF1YW1hcmluZVwiOiBbMTI3LCAyNTUsIDIxMl0sXHJcblx0XCJhenVyZVwiOiBbMjQwLCAyNTUsIDI1NV0sXHJcblx0XCJiZWlnZVwiOiBbMjQ1LCAyNDUsIDIyMF0sXHJcblx0XCJiaXNxdWVcIjogWzI1NSwgMjI4LCAxOTZdLFxyXG5cdFwiYmxhY2tcIjogWzAsIDAsIDBdLFxyXG5cdFwiYmxhbmNoZWRhbG1vbmRcIjogWzI1NSwgMjM1LCAyMDVdLFxyXG5cdFwiYmx1ZVwiOiBbMCwgMCwgMjU1XSxcclxuXHRcImJsdWV2aW9sZXRcIjogWzEzOCwgNDMsIDIyNl0sXHJcblx0XCJicm93blwiOiBbMTY1LCA0MiwgNDJdLFxyXG5cdFwiYnVybHl3b29kXCI6IFsyMjIsIDE4NCwgMTM1XSxcclxuXHRcImNhZGV0Ymx1ZVwiOiBbOTUsIDE1OCwgMTYwXSxcclxuXHRcImNoYXJ0cmV1c2VcIjogWzEyNywgMjU1LCAwXSxcclxuXHRcImNob2NvbGF0ZVwiOiBbMjEwLCAxMDUsIDMwXSxcclxuXHRcImNvcmFsXCI6IFsyNTUsIDEyNywgODBdLFxyXG5cdFwiY29ybmZsb3dlcmJsdWVcIjogWzEwMCwgMTQ5LCAyMzddLFxyXG5cdFwiY29ybnNpbGtcIjogWzI1NSwgMjQ4LCAyMjBdLFxyXG5cdFwiY3JpbXNvblwiOiBbMjIwLCAyMCwgNjBdLFxyXG5cdFwiY3lhblwiOiBbMCwgMjU1LCAyNTVdLFxyXG5cdFwiZGFya2JsdWVcIjogWzAsIDAsIDEzOV0sXHJcblx0XCJkYXJrY3lhblwiOiBbMCwgMTM5LCAxMzldLFxyXG5cdFwiZGFya2dvbGRlbnJvZFwiOiBbMTg0LCAxMzQsIDExXSxcclxuXHRcImRhcmtncmF5XCI6IFsxNjksIDE2OSwgMTY5XSxcclxuXHRcImRhcmtncmVlblwiOiBbMCwgMTAwLCAwXSxcclxuXHRcImRhcmtncmV5XCI6IFsxNjksIDE2OSwgMTY5XSxcclxuXHRcImRhcmtraGFraVwiOiBbMTg5LCAxODMsIDEwN10sXHJcblx0XCJkYXJrbWFnZW50YVwiOiBbMTM5LCAwLCAxMzldLFxyXG5cdFwiZGFya29saXZlZ3JlZW5cIjogWzg1LCAxMDcsIDQ3XSxcclxuXHRcImRhcmtvcmFuZ2VcIjogWzI1NSwgMTQwLCAwXSxcclxuXHRcImRhcmtvcmNoaWRcIjogWzE1MywgNTAsIDIwNF0sXHJcblx0XCJkYXJrcmVkXCI6IFsxMzksIDAsIDBdLFxyXG5cdFwiZGFya3NhbG1vblwiOiBbMjMzLCAxNTAsIDEyMl0sXHJcblx0XCJkYXJrc2VhZ3JlZW5cIjogWzE0MywgMTg4LCAxNDNdLFxyXG5cdFwiZGFya3NsYXRlYmx1ZVwiOiBbNzIsIDYxLCAxMzldLFxyXG5cdFwiZGFya3NsYXRlZ3JheVwiOiBbNDcsIDc5LCA3OV0sXHJcblx0XCJkYXJrc2xhdGVncmV5XCI6IFs0NywgNzksIDc5XSxcclxuXHRcImRhcmt0dXJxdW9pc2VcIjogWzAsIDIwNiwgMjA5XSxcclxuXHRcImRhcmt2aW9sZXRcIjogWzE0OCwgMCwgMjExXSxcclxuXHRcImRlZXBwaW5rXCI6IFsyNTUsIDIwLCAxNDddLFxyXG5cdFwiZGVlcHNreWJsdWVcIjogWzAsIDE5MSwgMjU1XSxcclxuXHRcImRpbWdyYXlcIjogWzEwNSwgMTA1LCAxMDVdLFxyXG5cdFwiZGltZ3JleVwiOiBbMTA1LCAxMDUsIDEwNV0sXHJcblx0XCJkb2RnZXJibHVlXCI6IFszMCwgMTQ0LCAyNTVdLFxyXG5cdFwiZmlyZWJyaWNrXCI6IFsxNzgsIDM0LCAzNF0sXHJcblx0XCJmbG9yYWx3aGl0ZVwiOiBbMjU1LCAyNTAsIDI0MF0sXHJcblx0XCJmb3Jlc3RncmVlblwiOiBbMzQsIDEzOSwgMzRdLFxyXG5cdFwiZnVjaHNpYVwiOiBbMjU1LCAwLCAyNTVdLFxyXG5cdFwiZ2FpbnNib3JvXCI6IFsyMjAsIDIyMCwgMjIwXSxcclxuXHRcImdob3N0d2hpdGVcIjogWzI0OCwgMjQ4LCAyNTVdLFxyXG5cdFwiZ29sZFwiOiBbMjU1LCAyMTUsIDBdLFxyXG5cdFwiZ29sZGVucm9kXCI6IFsyMTgsIDE2NSwgMzJdLFxyXG5cdFwiZ3JheVwiOiBbMTI4LCAxMjgsIDEyOF0sXHJcblx0XCJncmVlblwiOiBbMCwgMTI4LCAwXSxcclxuXHRcImdyZWVueWVsbG93XCI6IFsxNzMsIDI1NSwgNDddLFxyXG5cdFwiZ3JleVwiOiBbMTI4LCAxMjgsIDEyOF0sXHJcblx0XCJob25leWRld1wiOiBbMjQwLCAyNTUsIDI0MF0sXHJcblx0XCJob3RwaW5rXCI6IFsyNTUsIDEwNSwgMTgwXSxcclxuXHRcImluZGlhbnJlZFwiOiBbMjA1LCA5MiwgOTJdLFxyXG5cdFwiaW5kaWdvXCI6IFs3NSwgMCwgMTMwXSxcclxuXHRcIml2b3J5XCI6IFsyNTUsIDI1NSwgMjQwXSxcclxuXHRcImtoYWtpXCI6IFsyNDAsIDIzMCwgMTQwXSxcclxuXHRcImxhdmVuZGVyXCI6IFsyMzAsIDIzMCwgMjUwXSxcclxuXHRcImxhdmVuZGVyYmx1c2hcIjogWzI1NSwgMjQwLCAyNDVdLFxyXG5cdFwibGF3bmdyZWVuXCI6IFsxMjQsIDI1MiwgMF0sXHJcblx0XCJsZW1vbmNoaWZmb25cIjogWzI1NSwgMjUwLCAyMDVdLFxyXG5cdFwibGlnaHRibHVlXCI6IFsxNzMsIDIxNiwgMjMwXSxcclxuXHRcImxpZ2h0Y29yYWxcIjogWzI0MCwgMTI4LCAxMjhdLFxyXG5cdFwibGlnaHRjeWFuXCI6IFsyMjQsIDI1NSwgMjU1XSxcclxuXHRcImxpZ2h0Z29sZGVucm9keWVsbG93XCI6IFsyNTAsIDI1MCwgMjEwXSxcclxuXHRcImxpZ2h0Z3JheVwiOiBbMjExLCAyMTEsIDIxMV0sXHJcblx0XCJsaWdodGdyZWVuXCI6IFsxNDQsIDIzOCwgMTQ0XSxcclxuXHRcImxpZ2h0Z3JleVwiOiBbMjExLCAyMTEsIDIxMV0sXHJcblx0XCJsaWdodHBpbmtcIjogWzI1NSwgMTgyLCAxOTNdLFxyXG5cdFwibGlnaHRzYWxtb25cIjogWzI1NSwgMTYwLCAxMjJdLFxyXG5cdFwibGlnaHRzZWFncmVlblwiOiBbMzIsIDE3OCwgMTcwXSxcclxuXHRcImxpZ2h0c2t5Ymx1ZVwiOiBbMTM1LCAyMDYsIDI1MF0sXHJcblx0XCJsaWdodHNsYXRlZ3JheVwiOiBbMTE5LCAxMzYsIDE1M10sXHJcblx0XCJsaWdodHNsYXRlZ3JleVwiOiBbMTE5LCAxMzYsIDE1M10sXHJcblx0XCJsaWdodHN0ZWVsYmx1ZVwiOiBbMTc2LCAxOTYsIDIyMl0sXHJcblx0XCJsaWdodHllbGxvd1wiOiBbMjU1LCAyNTUsIDIyNF0sXHJcblx0XCJsaW1lXCI6IFswLCAyNTUsIDBdLFxyXG5cdFwibGltZWdyZWVuXCI6IFs1MCwgMjA1LCA1MF0sXHJcblx0XCJsaW5lblwiOiBbMjUwLCAyNDAsIDIzMF0sXHJcblx0XCJtYWdlbnRhXCI6IFsyNTUsIDAsIDI1NV0sXHJcblx0XCJtYXJvb25cIjogWzEyOCwgMCwgMF0sXHJcblx0XCJtZWRpdW1hcXVhbWFyaW5lXCI6IFsxMDIsIDIwNSwgMTcwXSxcclxuXHRcIm1lZGl1bWJsdWVcIjogWzAsIDAsIDIwNV0sXHJcblx0XCJtZWRpdW1vcmNoaWRcIjogWzE4NiwgODUsIDIxMV0sXHJcblx0XCJtZWRpdW1wdXJwbGVcIjogWzE0NywgMTEyLCAyMTldLFxyXG5cdFwibWVkaXVtc2VhZ3JlZW5cIjogWzYwLCAxNzksIDExM10sXHJcblx0XCJtZWRpdW1zbGF0ZWJsdWVcIjogWzEyMywgMTA0LCAyMzhdLFxyXG5cdFwibWVkaXVtc3ByaW5nZ3JlZW5cIjogWzAsIDI1MCwgMTU0XSxcclxuXHRcIm1lZGl1bXR1cnF1b2lzZVwiOiBbNzIsIDIwOSwgMjA0XSxcclxuXHRcIm1lZGl1bXZpb2xldHJlZFwiOiBbMTk5LCAyMSwgMTMzXSxcclxuXHRcIm1pZG5pZ2h0Ymx1ZVwiOiBbMjUsIDI1LCAxMTJdLFxyXG5cdFwibWludGNyZWFtXCI6IFsyNDUsIDI1NSwgMjUwXSxcclxuXHRcIm1pc3R5cm9zZVwiOiBbMjU1LCAyMjgsIDIyNV0sXHJcblx0XCJtb2NjYXNpblwiOiBbMjU1LCAyMjgsIDE4MV0sXHJcblx0XCJuYXZham93aGl0ZVwiOiBbMjU1LCAyMjIsIDE3M10sXHJcblx0XCJuYXZ5XCI6IFswLCAwLCAxMjhdLFxyXG5cdFwib2xkbGFjZVwiOiBbMjUzLCAyNDUsIDIzMF0sXHJcblx0XCJvbGl2ZVwiOiBbMTI4LCAxMjgsIDBdLFxyXG5cdFwib2xpdmVkcmFiXCI6IFsxMDcsIDE0MiwgMzVdLFxyXG5cdFwib3JhbmdlXCI6IFsyNTUsIDE2NSwgMF0sXHJcblx0XCJvcmFuZ2VyZWRcIjogWzI1NSwgNjksIDBdLFxyXG5cdFwib3JjaGlkXCI6IFsyMTgsIDExMiwgMjE0XSxcclxuXHRcInBhbGVnb2xkZW5yb2RcIjogWzIzOCwgMjMyLCAxNzBdLFxyXG5cdFwicGFsZWdyZWVuXCI6IFsxNTIsIDI1MSwgMTUyXSxcclxuXHRcInBhbGV0dXJxdW9pc2VcIjogWzE3NSwgMjM4LCAyMzhdLFxyXG5cdFwicGFsZXZpb2xldHJlZFwiOiBbMjE5LCAxMTIsIDE0N10sXHJcblx0XCJwYXBheWF3aGlwXCI6IFsyNTUsIDIzOSwgMjEzXSxcclxuXHRcInBlYWNocHVmZlwiOiBbMjU1LCAyMTgsIDE4NV0sXHJcblx0XCJwZXJ1XCI6IFsyMDUsIDEzMywgNjNdLFxyXG5cdFwicGlua1wiOiBbMjU1LCAxOTIsIDIwM10sXHJcblx0XCJwbHVtXCI6IFsyMjEsIDE2MCwgMjIxXSxcclxuXHRcInBvd2RlcmJsdWVcIjogWzE3NiwgMjI0LCAyMzBdLFxyXG5cdFwicHVycGxlXCI6IFsxMjgsIDAsIDEyOF0sXHJcblx0XCJyZWJlY2NhcHVycGxlXCI6IFsxMDIsIDUxLCAxNTNdLFxyXG5cdFwicmVkXCI6IFsyNTUsIDAsIDBdLFxyXG5cdFwicm9zeWJyb3duXCI6IFsxODgsIDE0MywgMTQzXSxcclxuXHRcInJveWFsYmx1ZVwiOiBbNjUsIDEwNSwgMjI1XSxcclxuXHRcInNhZGRsZWJyb3duXCI6IFsxMzksIDY5LCAxOV0sXHJcblx0XCJzYWxtb25cIjogWzI1MCwgMTI4LCAxMTRdLFxyXG5cdFwic2FuZHlicm93blwiOiBbMjQ0LCAxNjQsIDk2XSxcclxuXHRcInNlYWdyZWVuXCI6IFs0NiwgMTM5LCA4N10sXHJcblx0XCJzZWFzaGVsbFwiOiBbMjU1LCAyNDUsIDIzOF0sXHJcblx0XCJzaWVubmFcIjogWzE2MCwgODIsIDQ1XSxcclxuXHRcInNpbHZlclwiOiBbMTkyLCAxOTIsIDE5Ml0sXHJcblx0XCJza3libHVlXCI6IFsxMzUsIDIwNiwgMjM1XSxcclxuXHRcInNsYXRlYmx1ZVwiOiBbMTA2LCA5MCwgMjA1XSxcclxuXHRcInNsYXRlZ3JheVwiOiBbMTEyLCAxMjgsIDE0NF0sXHJcblx0XCJzbGF0ZWdyZXlcIjogWzExMiwgMTI4LCAxNDRdLFxyXG5cdFwic25vd1wiOiBbMjU1LCAyNTAsIDI1MF0sXHJcblx0XCJzcHJpbmdncmVlblwiOiBbMCwgMjU1LCAxMjddLFxyXG5cdFwic3RlZWxibHVlXCI6IFs3MCwgMTMwLCAxODBdLFxyXG5cdFwidGFuXCI6IFsyMTAsIDE4MCwgMTQwXSxcclxuXHRcInRlYWxcIjogWzAsIDEyOCwgMTI4XSxcclxuXHRcInRoaXN0bGVcIjogWzIxNiwgMTkxLCAyMTZdLFxyXG5cdFwidG9tYXRvXCI6IFsyNTUsIDk5LCA3MV0sXHJcblx0XCJ0dXJxdW9pc2VcIjogWzY0LCAyMjQsIDIwOF0sXHJcblx0XCJ2aW9sZXRcIjogWzIzOCwgMTMwLCAyMzhdLFxyXG5cdFwid2hlYXRcIjogWzI0NSwgMjIyLCAxNzldLFxyXG5cdFwid2hpdGVcIjogWzI1NSwgMjU1LCAyNTVdLFxyXG5cdFwid2hpdGVzbW9rZVwiOiBbMjQ1LCAyNDUsIDI0NV0sXHJcblx0XCJ5ZWxsb3dcIjogWzI1NSwgMjU1LCAwXSxcclxuXHRcInllbGxvd2dyZWVuXCI6IFsxNTQsIDIwNSwgNTBdXHJcbn07XHJcbiIsICIvKiBNSVQgbGljZW5zZSAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tbWl4ZWQtb3BlcmF0b3JzICovXG5jb25zdCBjc3NLZXl3b3JkcyA9IHJlcXVpcmUoJ2NvbG9yLW5hbWUnKTtcblxuLy8gTk9URTogY29udmVyc2lvbnMgc2hvdWxkIG9ubHkgcmV0dXJuIHByaW1pdGl2ZSB2YWx1ZXMgKGkuZS4gYXJyYXlzLCBvclxuLy8gICAgICAgdmFsdWVzIHRoYXQgZ2l2ZSBjb3JyZWN0IGB0eXBlb2ZgIHJlc3VsdHMpLlxuLy8gICAgICAgZG8gbm90IHVzZSBib3ggdmFsdWVzIHR5cGVzIChpLmUuIE51bWJlcigpLCBTdHJpbmcoKSwgZXRjLilcblxuY29uc3QgcmV2ZXJzZUtleXdvcmRzID0ge307XG5mb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhjc3NLZXl3b3JkcykpIHtcblx0cmV2ZXJzZUtleXdvcmRzW2Nzc0tleXdvcmRzW2tleV1dID0ga2V5O1xufVxuXG5jb25zdCBjb252ZXJ0ID0ge1xuXHRyZ2I6IHtjaGFubmVsczogMywgbGFiZWxzOiAncmdiJ30sXG5cdGhzbDoge2NoYW5uZWxzOiAzLCBsYWJlbHM6ICdoc2wnfSxcblx0aHN2OiB7Y2hhbm5lbHM6IDMsIGxhYmVsczogJ2hzdid9LFxuXHRod2I6IHtjaGFubmVsczogMywgbGFiZWxzOiAnaHdiJ30sXG5cdGNteWs6IHtjaGFubmVsczogNCwgbGFiZWxzOiAnY215ayd9LFxuXHR4eXo6IHtjaGFubmVsczogMywgbGFiZWxzOiAneHl6J30sXG5cdGxhYjoge2NoYW5uZWxzOiAzLCBsYWJlbHM6ICdsYWInfSxcblx0bGNoOiB7Y2hhbm5lbHM6IDMsIGxhYmVsczogJ2xjaCd9LFxuXHRoZXg6IHtjaGFubmVsczogMSwgbGFiZWxzOiBbJ2hleCddfSxcblx0a2V5d29yZDoge2NoYW5uZWxzOiAxLCBsYWJlbHM6IFsna2V5d29yZCddfSxcblx0YW5zaTE2OiB7Y2hhbm5lbHM6IDEsIGxhYmVsczogWydhbnNpMTYnXX0sXG5cdGFuc2kyNTY6IHtjaGFubmVsczogMSwgbGFiZWxzOiBbJ2Fuc2kyNTYnXX0sXG5cdGhjZzoge2NoYW5uZWxzOiAzLCBsYWJlbHM6IFsnaCcsICdjJywgJ2cnXX0sXG5cdGFwcGxlOiB7Y2hhbm5lbHM6IDMsIGxhYmVsczogWydyMTYnLCAnZzE2JywgJ2IxNiddfSxcblx0Z3JheToge2NoYW5uZWxzOiAxLCBsYWJlbHM6IFsnZ3JheSddfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBjb252ZXJ0O1xuXG4vLyBIaWRlIC5jaGFubmVscyBhbmQgLmxhYmVscyBwcm9wZXJ0aWVzXG5mb3IgKGNvbnN0IG1vZGVsIG9mIE9iamVjdC5rZXlzKGNvbnZlcnQpKSB7XG5cdGlmICghKCdjaGFubmVscycgaW4gY29udmVydFttb2RlbF0pKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIGNoYW5uZWxzIHByb3BlcnR5OiAnICsgbW9kZWwpO1xuXHR9XG5cblx0aWYgKCEoJ2xhYmVscycgaW4gY29udmVydFttb2RlbF0pKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIGNoYW5uZWwgbGFiZWxzIHByb3BlcnR5OiAnICsgbW9kZWwpO1xuXHR9XG5cblx0aWYgKGNvbnZlcnRbbW9kZWxdLmxhYmVscy5sZW5ndGggIT09IGNvbnZlcnRbbW9kZWxdLmNoYW5uZWxzKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdjaGFubmVsIGFuZCBsYWJlbCBjb3VudHMgbWlzbWF0Y2g6ICcgKyBtb2RlbCk7XG5cdH1cblxuXHRjb25zdCB7Y2hhbm5lbHMsIGxhYmVsc30gPSBjb252ZXJ0W21vZGVsXTtcblx0ZGVsZXRlIGNvbnZlcnRbbW9kZWxdLmNoYW5uZWxzO1xuXHRkZWxldGUgY29udmVydFttb2RlbF0ubGFiZWxzO1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoY29udmVydFttb2RlbF0sICdjaGFubmVscycsIHt2YWx1ZTogY2hhbm5lbHN9KTtcblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGNvbnZlcnRbbW9kZWxdLCAnbGFiZWxzJywge3ZhbHVlOiBsYWJlbHN9KTtcbn1cblxuY29udmVydC5yZ2IuaHNsID0gZnVuY3Rpb24gKHJnYikge1xuXHRjb25zdCByID0gcmdiWzBdIC8gMjU1O1xuXHRjb25zdCBnID0gcmdiWzFdIC8gMjU1O1xuXHRjb25zdCBiID0gcmdiWzJdIC8gMjU1O1xuXHRjb25zdCBtaW4gPSBNYXRoLm1pbihyLCBnLCBiKTtcblx0Y29uc3QgbWF4ID0gTWF0aC5tYXgociwgZywgYik7XG5cdGNvbnN0IGRlbHRhID0gbWF4IC0gbWluO1xuXHRsZXQgaDtcblx0bGV0IHM7XG5cblx0aWYgKG1heCA9PT0gbWluKSB7XG5cdFx0aCA9IDA7XG5cdH0gZWxzZSBpZiAociA9PT0gbWF4KSB7XG5cdFx0aCA9IChnIC0gYikgLyBkZWx0YTtcblx0fSBlbHNlIGlmIChnID09PSBtYXgpIHtcblx0XHRoID0gMiArIChiIC0gcikgLyBkZWx0YTtcblx0fSBlbHNlIGlmIChiID09PSBtYXgpIHtcblx0XHRoID0gNCArIChyIC0gZykgLyBkZWx0YTtcblx0fVxuXG5cdGggPSBNYXRoLm1pbihoICogNjAsIDM2MCk7XG5cblx0aWYgKGggPCAwKSB7XG5cdFx0aCArPSAzNjA7XG5cdH1cblxuXHRjb25zdCBsID0gKG1pbiArIG1heCkgLyAyO1xuXG5cdGlmIChtYXggPT09IG1pbikge1xuXHRcdHMgPSAwO1xuXHR9IGVsc2UgaWYgKGwgPD0gMC41KSB7XG5cdFx0cyA9IGRlbHRhIC8gKG1heCArIG1pbik7XG5cdH0gZWxzZSB7XG5cdFx0cyA9IGRlbHRhIC8gKDIgLSBtYXggLSBtaW4pO1xuXHR9XG5cblx0cmV0dXJuIFtoLCBzICogMTAwLCBsICogMTAwXTtcbn07XG5cbmNvbnZlcnQucmdiLmhzdiA9IGZ1bmN0aW9uIChyZ2IpIHtcblx0bGV0IHJkaWY7XG5cdGxldCBnZGlmO1xuXHRsZXQgYmRpZjtcblx0bGV0IGg7XG5cdGxldCBzO1xuXG5cdGNvbnN0IHIgPSByZ2JbMF0gLyAyNTU7XG5cdGNvbnN0IGcgPSByZ2JbMV0gLyAyNTU7XG5cdGNvbnN0IGIgPSByZ2JbMl0gLyAyNTU7XG5cdGNvbnN0IHYgPSBNYXRoLm1heChyLCBnLCBiKTtcblx0Y29uc3QgZGlmZiA9IHYgLSBNYXRoLm1pbihyLCBnLCBiKTtcblx0Y29uc3QgZGlmZmMgPSBmdW5jdGlvbiAoYykge1xuXHRcdHJldHVybiAodiAtIGMpIC8gNiAvIGRpZmYgKyAxIC8gMjtcblx0fTtcblxuXHRpZiAoZGlmZiA9PT0gMCkge1xuXHRcdGggPSAwO1xuXHRcdHMgPSAwO1xuXHR9IGVsc2Uge1xuXHRcdHMgPSBkaWZmIC8gdjtcblx0XHRyZGlmID0gZGlmZmMocik7XG5cdFx0Z2RpZiA9IGRpZmZjKGcpO1xuXHRcdGJkaWYgPSBkaWZmYyhiKTtcblxuXHRcdGlmIChyID09PSB2KSB7XG5cdFx0XHRoID0gYmRpZiAtIGdkaWY7XG5cdFx0fSBlbHNlIGlmIChnID09PSB2KSB7XG5cdFx0XHRoID0gKDEgLyAzKSArIHJkaWYgLSBiZGlmO1xuXHRcdH0gZWxzZSBpZiAoYiA9PT0gdikge1xuXHRcdFx0aCA9ICgyIC8gMykgKyBnZGlmIC0gcmRpZjtcblx0XHR9XG5cblx0XHRpZiAoaCA8IDApIHtcblx0XHRcdGggKz0gMTtcblx0XHR9IGVsc2UgaWYgKGggPiAxKSB7XG5cdFx0XHRoIC09IDE7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIFtcblx0XHRoICogMzYwLFxuXHRcdHMgKiAxMDAsXG5cdFx0diAqIDEwMFxuXHRdO1xufTtcblxuY29udmVydC5yZ2IuaHdiID0gZnVuY3Rpb24gKHJnYikge1xuXHRjb25zdCByID0gcmdiWzBdO1xuXHRjb25zdCBnID0gcmdiWzFdO1xuXHRsZXQgYiA9IHJnYlsyXTtcblx0Y29uc3QgaCA9IGNvbnZlcnQucmdiLmhzbChyZ2IpWzBdO1xuXHRjb25zdCB3ID0gMSAvIDI1NSAqIE1hdGgubWluKHIsIE1hdGgubWluKGcsIGIpKTtcblxuXHRiID0gMSAtIDEgLyAyNTUgKiBNYXRoLm1heChyLCBNYXRoLm1heChnLCBiKSk7XG5cblx0cmV0dXJuIFtoLCB3ICogMTAwLCBiICogMTAwXTtcbn07XG5cbmNvbnZlcnQucmdiLmNteWsgPSBmdW5jdGlvbiAocmdiKSB7XG5cdGNvbnN0IHIgPSByZ2JbMF0gLyAyNTU7XG5cdGNvbnN0IGcgPSByZ2JbMV0gLyAyNTU7XG5cdGNvbnN0IGIgPSByZ2JbMl0gLyAyNTU7XG5cblx0Y29uc3QgayA9IE1hdGgubWluKDEgLSByLCAxIC0gZywgMSAtIGIpO1xuXHRjb25zdCBjID0gKDEgLSByIC0gaykgLyAoMSAtIGspIHx8IDA7XG5cdGNvbnN0IG0gPSAoMSAtIGcgLSBrKSAvICgxIC0gaykgfHwgMDtcblx0Y29uc3QgeSA9ICgxIC0gYiAtIGspIC8gKDEgLSBrKSB8fCAwO1xuXG5cdHJldHVybiBbYyAqIDEwMCwgbSAqIDEwMCwgeSAqIDEwMCwgayAqIDEwMF07XG59O1xuXG5mdW5jdGlvbiBjb21wYXJhdGl2ZURpc3RhbmNlKHgsIHkpIHtcblx0Lypcblx0XHRTZWUgaHR0cHM6Ly9lbi5tLndpa2lwZWRpYS5vcmcvd2lraS9FdWNsaWRlYW5fZGlzdGFuY2UjU3F1YXJlZF9FdWNsaWRlYW5fZGlzdGFuY2Vcblx0Ki9cblx0cmV0dXJuIChcblx0XHQoKHhbMF0gLSB5WzBdKSAqKiAyKSArXG5cdFx0KCh4WzFdIC0geVsxXSkgKiogMikgK1xuXHRcdCgoeFsyXSAtIHlbMl0pICoqIDIpXG5cdCk7XG59XG5cbmNvbnZlcnQucmdiLmtleXdvcmQgPSBmdW5jdGlvbiAocmdiKSB7XG5cdGNvbnN0IHJldmVyc2VkID0gcmV2ZXJzZUtleXdvcmRzW3JnYl07XG5cdGlmIChyZXZlcnNlZCkge1xuXHRcdHJldHVybiByZXZlcnNlZDtcblx0fVxuXG5cdGxldCBjdXJyZW50Q2xvc2VzdERpc3RhbmNlID0gSW5maW5pdHk7XG5cdGxldCBjdXJyZW50Q2xvc2VzdEtleXdvcmQ7XG5cblx0Zm9yIChjb25zdCBrZXl3b3JkIG9mIE9iamVjdC5rZXlzKGNzc0tleXdvcmRzKSkge1xuXHRcdGNvbnN0IHZhbHVlID0gY3NzS2V5d29yZHNba2V5d29yZF07XG5cblx0XHQvLyBDb21wdXRlIGNvbXBhcmF0aXZlIGRpc3RhbmNlXG5cdFx0Y29uc3QgZGlzdGFuY2UgPSBjb21wYXJhdGl2ZURpc3RhbmNlKHJnYiwgdmFsdWUpO1xuXG5cdFx0Ly8gQ2hlY2sgaWYgaXRzIGxlc3MsIGlmIHNvIHNldCBhcyBjbG9zZXN0XG5cdFx0aWYgKGRpc3RhbmNlIDwgY3VycmVudENsb3Nlc3REaXN0YW5jZSkge1xuXHRcdFx0Y3VycmVudENsb3Nlc3REaXN0YW5jZSA9IGRpc3RhbmNlO1xuXHRcdFx0Y3VycmVudENsb3Nlc3RLZXl3b3JkID0ga2V5d29yZDtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gY3VycmVudENsb3Nlc3RLZXl3b3JkO1xufTtcblxuY29udmVydC5rZXl3b3JkLnJnYiA9IGZ1bmN0aW9uIChrZXl3b3JkKSB7XG5cdHJldHVybiBjc3NLZXl3b3Jkc1trZXl3b3JkXTtcbn07XG5cbmNvbnZlcnQucmdiLnh5eiA9IGZ1bmN0aW9uIChyZ2IpIHtcblx0bGV0IHIgPSByZ2JbMF0gLyAyNTU7XG5cdGxldCBnID0gcmdiWzFdIC8gMjU1O1xuXHRsZXQgYiA9IHJnYlsyXSAvIDI1NTtcblxuXHQvLyBBc3N1bWUgc1JHQlxuXHRyID0gciA+IDAuMDQwNDUgPyAoKChyICsgMC4wNTUpIC8gMS4wNTUpICoqIDIuNCkgOiAociAvIDEyLjkyKTtcblx0ZyA9IGcgPiAwLjA0MDQ1ID8gKCgoZyArIDAuMDU1KSAvIDEuMDU1KSAqKiAyLjQpIDogKGcgLyAxMi45Mik7XG5cdGIgPSBiID4gMC4wNDA0NSA/ICgoKGIgKyAwLjA1NSkgLyAxLjA1NSkgKiogMi40KSA6IChiIC8gMTIuOTIpO1xuXG5cdGNvbnN0IHggPSAociAqIDAuNDEyNCkgKyAoZyAqIDAuMzU3NikgKyAoYiAqIDAuMTgwNSk7XG5cdGNvbnN0IHkgPSAociAqIDAuMjEyNikgKyAoZyAqIDAuNzE1MikgKyAoYiAqIDAuMDcyMik7XG5cdGNvbnN0IHogPSAociAqIDAuMDE5MykgKyAoZyAqIDAuMTE5MikgKyAoYiAqIDAuOTUwNSk7XG5cblx0cmV0dXJuIFt4ICogMTAwLCB5ICogMTAwLCB6ICogMTAwXTtcbn07XG5cbmNvbnZlcnQucmdiLmxhYiA9IGZ1bmN0aW9uIChyZ2IpIHtcblx0Y29uc3QgeHl6ID0gY29udmVydC5yZ2IueHl6KHJnYik7XG5cdGxldCB4ID0geHl6WzBdO1xuXHRsZXQgeSA9IHh5elsxXTtcblx0bGV0IHogPSB4eXpbMl07XG5cblx0eCAvPSA5NS4wNDc7XG5cdHkgLz0gMTAwO1xuXHR6IC89IDEwOC44ODM7XG5cblx0eCA9IHggPiAwLjAwODg1NiA/ICh4ICoqICgxIC8gMykpIDogKDcuNzg3ICogeCkgKyAoMTYgLyAxMTYpO1xuXHR5ID0geSA+IDAuMDA4ODU2ID8gKHkgKiogKDEgLyAzKSkgOiAoNy43ODcgKiB5KSArICgxNiAvIDExNik7XG5cdHogPSB6ID4gMC4wMDg4NTYgPyAoeiAqKiAoMSAvIDMpKSA6ICg3Ljc4NyAqIHopICsgKDE2IC8gMTE2KTtcblxuXHRjb25zdCBsID0gKDExNiAqIHkpIC0gMTY7XG5cdGNvbnN0IGEgPSA1MDAgKiAoeCAtIHkpO1xuXHRjb25zdCBiID0gMjAwICogKHkgLSB6KTtcblxuXHRyZXR1cm4gW2wsIGEsIGJdO1xufTtcblxuY29udmVydC5oc2wucmdiID0gZnVuY3Rpb24gKGhzbCkge1xuXHRjb25zdCBoID0gaHNsWzBdIC8gMzYwO1xuXHRjb25zdCBzID0gaHNsWzFdIC8gMTAwO1xuXHRjb25zdCBsID0gaHNsWzJdIC8gMTAwO1xuXHRsZXQgdDI7XG5cdGxldCB0Mztcblx0bGV0IHZhbDtcblxuXHRpZiAocyA9PT0gMCkge1xuXHRcdHZhbCA9IGwgKiAyNTU7XG5cdFx0cmV0dXJuIFt2YWwsIHZhbCwgdmFsXTtcblx0fVxuXG5cdGlmIChsIDwgMC41KSB7XG5cdFx0dDIgPSBsICogKDEgKyBzKTtcblx0fSBlbHNlIHtcblx0XHR0MiA9IGwgKyBzIC0gbCAqIHM7XG5cdH1cblxuXHRjb25zdCB0MSA9IDIgKiBsIC0gdDI7XG5cblx0Y29uc3QgcmdiID0gWzAsIDAsIDBdO1xuXHRmb3IgKGxldCBpID0gMDsgaSA8IDM7IGkrKykge1xuXHRcdHQzID0gaCArIDEgLyAzICogLShpIC0gMSk7XG5cdFx0aWYgKHQzIDwgMCkge1xuXHRcdFx0dDMrKztcblx0XHR9XG5cblx0XHRpZiAodDMgPiAxKSB7XG5cdFx0XHR0My0tO1xuXHRcdH1cblxuXHRcdGlmICg2ICogdDMgPCAxKSB7XG5cdFx0XHR2YWwgPSB0MSArICh0MiAtIHQxKSAqIDYgKiB0Mztcblx0XHR9IGVsc2UgaWYgKDIgKiB0MyA8IDEpIHtcblx0XHRcdHZhbCA9IHQyO1xuXHRcdH0gZWxzZSBpZiAoMyAqIHQzIDwgMikge1xuXHRcdFx0dmFsID0gdDEgKyAodDIgLSB0MSkgKiAoMiAvIDMgLSB0MykgKiA2O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR2YWwgPSB0MTtcblx0XHR9XG5cblx0XHRyZ2JbaV0gPSB2YWwgKiAyNTU7XG5cdH1cblxuXHRyZXR1cm4gcmdiO1xufTtcblxuY29udmVydC5oc2wuaHN2ID0gZnVuY3Rpb24gKGhzbCkge1xuXHRjb25zdCBoID0gaHNsWzBdO1xuXHRsZXQgcyA9IGhzbFsxXSAvIDEwMDtcblx0bGV0IGwgPSBoc2xbMl0gLyAxMDA7XG5cdGxldCBzbWluID0gcztcblx0Y29uc3QgbG1pbiA9IE1hdGgubWF4KGwsIDAuMDEpO1xuXG5cdGwgKj0gMjtcblx0cyAqPSAobCA8PSAxKSA/IGwgOiAyIC0gbDtcblx0c21pbiAqPSBsbWluIDw9IDEgPyBsbWluIDogMiAtIGxtaW47XG5cdGNvbnN0IHYgPSAobCArIHMpIC8gMjtcblx0Y29uc3Qgc3YgPSBsID09PSAwID8gKDIgKiBzbWluKSAvIChsbWluICsgc21pbikgOiAoMiAqIHMpIC8gKGwgKyBzKTtcblxuXHRyZXR1cm4gW2gsIHN2ICogMTAwLCB2ICogMTAwXTtcbn07XG5cbmNvbnZlcnQuaHN2LnJnYiA9IGZ1bmN0aW9uIChoc3YpIHtcblx0Y29uc3QgaCA9IGhzdlswXSAvIDYwO1xuXHRjb25zdCBzID0gaHN2WzFdIC8gMTAwO1xuXHRsZXQgdiA9IGhzdlsyXSAvIDEwMDtcblx0Y29uc3QgaGkgPSBNYXRoLmZsb29yKGgpICUgNjtcblxuXHRjb25zdCBmID0gaCAtIE1hdGguZmxvb3IoaCk7XG5cdGNvbnN0IHAgPSAyNTUgKiB2ICogKDEgLSBzKTtcblx0Y29uc3QgcSA9IDI1NSAqIHYgKiAoMSAtIChzICogZikpO1xuXHRjb25zdCB0ID0gMjU1ICogdiAqICgxIC0gKHMgKiAoMSAtIGYpKSk7XG5cdHYgKj0gMjU1O1xuXG5cdHN3aXRjaCAoaGkpIHtcblx0XHRjYXNlIDA6XG5cdFx0XHRyZXR1cm4gW3YsIHQsIHBdO1xuXHRcdGNhc2UgMTpcblx0XHRcdHJldHVybiBbcSwgdiwgcF07XG5cdFx0Y2FzZSAyOlxuXHRcdFx0cmV0dXJuIFtwLCB2LCB0XTtcblx0XHRjYXNlIDM6XG5cdFx0XHRyZXR1cm4gW3AsIHEsIHZdO1xuXHRcdGNhc2UgNDpcblx0XHRcdHJldHVybiBbdCwgcCwgdl07XG5cdFx0Y2FzZSA1OlxuXHRcdFx0cmV0dXJuIFt2LCBwLCBxXTtcblx0fVxufTtcblxuY29udmVydC5oc3YuaHNsID0gZnVuY3Rpb24gKGhzdikge1xuXHRjb25zdCBoID0gaHN2WzBdO1xuXHRjb25zdCBzID0gaHN2WzFdIC8gMTAwO1xuXHRjb25zdCB2ID0gaHN2WzJdIC8gMTAwO1xuXHRjb25zdCB2bWluID0gTWF0aC5tYXgodiwgMC4wMSk7XG5cdGxldCBzbDtcblx0bGV0IGw7XG5cblx0bCA9ICgyIC0gcykgKiB2O1xuXHRjb25zdCBsbWluID0gKDIgLSBzKSAqIHZtaW47XG5cdHNsID0gcyAqIHZtaW47XG5cdHNsIC89IChsbWluIDw9IDEpID8gbG1pbiA6IDIgLSBsbWluO1xuXHRzbCA9IHNsIHx8IDA7XG5cdGwgLz0gMjtcblxuXHRyZXR1cm4gW2gsIHNsICogMTAwLCBsICogMTAwXTtcbn07XG5cbi8vIGh0dHA6Ly9kZXYudzMub3JnL2Nzc3dnL2Nzcy1jb2xvci8jaHdiLXRvLXJnYlxuY29udmVydC5od2IucmdiID0gZnVuY3Rpb24gKGh3Yikge1xuXHRjb25zdCBoID0gaHdiWzBdIC8gMzYwO1xuXHRsZXQgd2ggPSBod2JbMV0gLyAxMDA7XG5cdGxldCBibCA9IGh3YlsyXSAvIDEwMDtcblx0Y29uc3QgcmF0aW8gPSB3aCArIGJsO1xuXHRsZXQgZjtcblxuXHQvLyBXaCArIGJsIGNhbnQgYmUgPiAxXG5cdGlmIChyYXRpbyA+IDEpIHtcblx0XHR3aCAvPSByYXRpbztcblx0XHRibCAvPSByYXRpbztcblx0fVxuXG5cdGNvbnN0IGkgPSBNYXRoLmZsb29yKDYgKiBoKTtcblx0Y29uc3QgdiA9IDEgLSBibDtcblx0ZiA9IDYgKiBoIC0gaTtcblxuXHRpZiAoKGkgJiAweDAxKSAhPT0gMCkge1xuXHRcdGYgPSAxIC0gZjtcblx0fVxuXG5cdGNvbnN0IG4gPSB3aCArIGYgKiAodiAtIHdoKTsgLy8gTGluZWFyIGludGVycG9sYXRpb25cblxuXHRsZXQgcjtcblx0bGV0IGc7XG5cdGxldCBiO1xuXHQvKiBlc2xpbnQtZGlzYWJsZSBtYXgtc3RhdGVtZW50cy1wZXItbGluZSxuby1tdWx0aS1zcGFjZXMgKi9cblx0c3dpdGNoIChpKSB7XG5cdFx0ZGVmYXVsdDpcblx0XHRjYXNlIDY6XG5cdFx0Y2FzZSAwOiByID0gdjsgIGcgPSBuOyAgYiA9IHdoOyBicmVhaztcblx0XHRjYXNlIDE6IHIgPSBuOyAgZyA9IHY7ICBiID0gd2g7IGJyZWFrO1xuXHRcdGNhc2UgMjogciA9IHdoOyBnID0gdjsgIGIgPSBuOyBicmVhaztcblx0XHRjYXNlIDM6IHIgPSB3aDsgZyA9IG47ICBiID0gdjsgYnJlYWs7XG5cdFx0Y2FzZSA0OiByID0gbjsgIGcgPSB3aDsgYiA9IHY7IGJyZWFrO1xuXHRcdGNhc2UgNTogciA9IHY7ICBnID0gd2g7IGIgPSBuOyBicmVhaztcblx0fVxuXHQvKiBlc2xpbnQtZW5hYmxlIG1heC1zdGF0ZW1lbnRzLXBlci1saW5lLG5vLW11bHRpLXNwYWNlcyAqL1xuXG5cdHJldHVybiBbciAqIDI1NSwgZyAqIDI1NSwgYiAqIDI1NV07XG59O1xuXG5jb252ZXJ0LmNteWsucmdiID0gZnVuY3Rpb24gKGNteWspIHtcblx0Y29uc3QgYyA9IGNteWtbMF0gLyAxMDA7XG5cdGNvbnN0IG0gPSBjbXlrWzFdIC8gMTAwO1xuXHRjb25zdCB5ID0gY215a1syXSAvIDEwMDtcblx0Y29uc3QgayA9IGNteWtbM10gLyAxMDA7XG5cblx0Y29uc3QgciA9IDEgLSBNYXRoLm1pbigxLCBjICogKDEgLSBrKSArIGspO1xuXHRjb25zdCBnID0gMSAtIE1hdGgubWluKDEsIG0gKiAoMSAtIGspICsgayk7XG5cdGNvbnN0IGIgPSAxIC0gTWF0aC5taW4oMSwgeSAqICgxIC0gaykgKyBrKTtcblxuXHRyZXR1cm4gW3IgKiAyNTUsIGcgKiAyNTUsIGIgKiAyNTVdO1xufTtcblxuY29udmVydC54eXoucmdiID0gZnVuY3Rpb24gKHh5eikge1xuXHRjb25zdCB4ID0geHl6WzBdIC8gMTAwO1xuXHRjb25zdCB5ID0geHl6WzFdIC8gMTAwO1xuXHRjb25zdCB6ID0geHl6WzJdIC8gMTAwO1xuXHRsZXQgcjtcblx0bGV0IGc7XG5cdGxldCBiO1xuXG5cdHIgPSAoeCAqIDMuMjQwNikgKyAoeSAqIC0xLjUzNzIpICsgKHogKiAtMC40OTg2KTtcblx0ZyA9ICh4ICogLTAuOTY4OSkgKyAoeSAqIDEuODc1OCkgKyAoeiAqIDAuMDQxNSk7XG5cdGIgPSAoeCAqIDAuMDU1NykgKyAoeSAqIC0wLjIwNDApICsgKHogKiAxLjA1NzApO1xuXG5cdC8vIEFzc3VtZSBzUkdCXG5cdHIgPSByID4gMC4wMDMxMzA4XG5cdFx0PyAoKDEuMDU1ICogKHIgKiogKDEuMCAvIDIuNCkpKSAtIDAuMDU1KVxuXHRcdDogciAqIDEyLjkyO1xuXG5cdGcgPSBnID4gMC4wMDMxMzA4XG5cdFx0PyAoKDEuMDU1ICogKGcgKiogKDEuMCAvIDIuNCkpKSAtIDAuMDU1KVxuXHRcdDogZyAqIDEyLjkyO1xuXG5cdGIgPSBiID4gMC4wMDMxMzA4XG5cdFx0PyAoKDEuMDU1ICogKGIgKiogKDEuMCAvIDIuNCkpKSAtIDAuMDU1KVxuXHRcdDogYiAqIDEyLjkyO1xuXG5cdHIgPSBNYXRoLm1pbihNYXRoLm1heCgwLCByKSwgMSk7XG5cdGcgPSBNYXRoLm1pbihNYXRoLm1heCgwLCBnKSwgMSk7XG5cdGIgPSBNYXRoLm1pbihNYXRoLm1heCgwLCBiKSwgMSk7XG5cblx0cmV0dXJuIFtyICogMjU1LCBnICogMjU1LCBiICogMjU1XTtcbn07XG5cbmNvbnZlcnQueHl6LmxhYiA9IGZ1bmN0aW9uICh4eXopIHtcblx0bGV0IHggPSB4eXpbMF07XG5cdGxldCB5ID0geHl6WzFdO1xuXHRsZXQgeiA9IHh5elsyXTtcblxuXHR4IC89IDk1LjA0Nztcblx0eSAvPSAxMDA7XG5cdHogLz0gMTA4Ljg4MztcblxuXHR4ID0geCA+IDAuMDA4ODU2ID8gKHggKiogKDEgLyAzKSkgOiAoNy43ODcgKiB4KSArICgxNiAvIDExNik7XG5cdHkgPSB5ID4gMC4wMDg4NTYgPyAoeSAqKiAoMSAvIDMpKSA6ICg3Ljc4NyAqIHkpICsgKDE2IC8gMTE2KTtcblx0eiA9IHogPiAwLjAwODg1NiA/ICh6ICoqICgxIC8gMykpIDogKDcuNzg3ICogeikgKyAoMTYgLyAxMTYpO1xuXG5cdGNvbnN0IGwgPSAoMTE2ICogeSkgLSAxNjtcblx0Y29uc3QgYSA9IDUwMCAqICh4IC0geSk7XG5cdGNvbnN0IGIgPSAyMDAgKiAoeSAtIHopO1xuXG5cdHJldHVybiBbbCwgYSwgYl07XG59O1xuXG5jb252ZXJ0LmxhYi54eXogPSBmdW5jdGlvbiAobGFiKSB7XG5cdGNvbnN0IGwgPSBsYWJbMF07XG5cdGNvbnN0IGEgPSBsYWJbMV07XG5cdGNvbnN0IGIgPSBsYWJbMl07XG5cdGxldCB4O1xuXHRsZXQgeTtcblx0bGV0IHo7XG5cblx0eSA9IChsICsgMTYpIC8gMTE2O1xuXHR4ID0gYSAvIDUwMCArIHk7XG5cdHogPSB5IC0gYiAvIDIwMDtcblxuXHRjb25zdCB5MiA9IHkgKiogMztcblx0Y29uc3QgeDIgPSB4ICoqIDM7XG5cdGNvbnN0IHoyID0geiAqKiAzO1xuXHR5ID0geTIgPiAwLjAwODg1NiA/IHkyIDogKHkgLSAxNiAvIDExNikgLyA3Ljc4Nztcblx0eCA9IHgyID4gMC4wMDg4NTYgPyB4MiA6ICh4IC0gMTYgLyAxMTYpIC8gNy43ODc7XG5cdHogPSB6MiA+IDAuMDA4ODU2ID8gejIgOiAoeiAtIDE2IC8gMTE2KSAvIDcuNzg3O1xuXG5cdHggKj0gOTUuMDQ3O1xuXHR5ICo9IDEwMDtcblx0eiAqPSAxMDguODgzO1xuXG5cdHJldHVybiBbeCwgeSwgel07XG59O1xuXG5jb252ZXJ0LmxhYi5sY2ggPSBmdW5jdGlvbiAobGFiKSB7XG5cdGNvbnN0IGwgPSBsYWJbMF07XG5cdGNvbnN0IGEgPSBsYWJbMV07XG5cdGNvbnN0IGIgPSBsYWJbMl07XG5cdGxldCBoO1xuXG5cdGNvbnN0IGhyID0gTWF0aC5hdGFuMihiLCBhKTtcblx0aCA9IGhyICogMzYwIC8gMiAvIE1hdGguUEk7XG5cblx0aWYgKGggPCAwKSB7XG5cdFx0aCArPSAzNjA7XG5cdH1cblxuXHRjb25zdCBjID0gTWF0aC5zcXJ0KGEgKiBhICsgYiAqIGIpO1xuXG5cdHJldHVybiBbbCwgYywgaF07XG59O1xuXG5jb252ZXJ0LmxjaC5sYWIgPSBmdW5jdGlvbiAobGNoKSB7XG5cdGNvbnN0IGwgPSBsY2hbMF07XG5cdGNvbnN0IGMgPSBsY2hbMV07XG5cdGNvbnN0IGggPSBsY2hbMl07XG5cblx0Y29uc3QgaHIgPSBoIC8gMzYwICogMiAqIE1hdGguUEk7XG5cdGNvbnN0IGEgPSBjICogTWF0aC5jb3MoaHIpO1xuXHRjb25zdCBiID0gYyAqIE1hdGguc2luKGhyKTtcblxuXHRyZXR1cm4gW2wsIGEsIGJdO1xufTtcblxuY29udmVydC5yZ2IuYW5zaTE2ID0gZnVuY3Rpb24gKGFyZ3MsIHNhdHVyYXRpb24gPSBudWxsKSB7XG5cdGNvbnN0IFtyLCBnLCBiXSA9IGFyZ3M7XG5cdGxldCB2YWx1ZSA9IHNhdHVyYXRpb24gPT09IG51bGwgPyBjb252ZXJ0LnJnYi5oc3YoYXJncylbMl0gOiBzYXR1cmF0aW9uOyAvLyBIc3YgLT4gYW5zaTE2IG9wdGltaXphdGlvblxuXG5cdHZhbHVlID0gTWF0aC5yb3VuZCh2YWx1ZSAvIDUwKTtcblxuXHRpZiAodmFsdWUgPT09IDApIHtcblx0XHRyZXR1cm4gMzA7XG5cdH1cblxuXHRsZXQgYW5zaSA9IDMwXG5cdFx0KyAoKE1hdGgucm91bmQoYiAvIDI1NSkgPDwgMilcblx0XHR8IChNYXRoLnJvdW5kKGcgLyAyNTUpIDw8IDEpXG5cdFx0fCBNYXRoLnJvdW5kKHIgLyAyNTUpKTtcblxuXHRpZiAodmFsdWUgPT09IDIpIHtcblx0XHRhbnNpICs9IDYwO1xuXHR9XG5cblx0cmV0dXJuIGFuc2k7XG59O1xuXG5jb252ZXJ0Lmhzdi5hbnNpMTYgPSBmdW5jdGlvbiAoYXJncykge1xuXHQvLyBPcHRpbWl6YXRpb24gaGVyZTsgd2UgYWxyZWFkeSBrbm93IHRoZSB2YWx1ZSBhbmQgZG9uJ3QgbmVlZCB0byBnZXRcblx0Ly8gaXQgY29udmVydGVkIGZvciB1cy5cblx0cmV0dXJuIGNvbnZlcnQucmdiLmFuc2kxNihjb252ZXJ0Lmhzdi5yZ2IoYXJncyksIGFyZ3NbMl0pO1xufTtcblxuY29udmVydC5yZ2IuYW5zaTI1NiA9IGZ1bmN0aW9uIChhcmdzKSB7XG5cdGNvbnN0IHIgPSBhcmdzWzBdO1xuXHRjb25zdCBnID0gYXJnc1sxXTtcblx0Y29uc3QgYiA9IGFyZ3NbMl07XG5cblx0Ly8gV2UgdXNlIHRoZSBleHRlbmRlZCBncmV5c2NhbGUgcGFsZXR0ZSBoZXJlLCB3aXRoIHRoZSBleGNlcHRpb24gb2Zcblx0Ly8gYmxhY2sgYW5kIHdoaXRlLiBub3JtYWwgcGFsZXR0ZSBvbmx5IGhhcyA0IGdyZXlzY2FsZSBzaGFkZXMuXG5cdGlmIChyID09PSBnICYmIGcgPT09IGIpIHtcblx0XHRpZiAociA8IDgpIHtcblx0XHRcdHJldHVybiAxNjtcblx0XHR9XG5cblx0XHRpZiAociA+IDI0OCkge1xuXHRcdFx0cmV0dXJuIDIzMTtcblx0XHR9XG5cblx0XHRyZXR1cm4gTWF0aC5yb3VuZCgoKHIgLSA4KSAvIDI0NykgKiAyNCkgKyAyMzI7XG5cdH1cblxuXHRjb25zdCBhbnNpID0gMTZcblx0XHQrICgzNiAqIE1hdGgucm91bmQociAvIDI1NSAqIDUpKVxuXHRcdCsgKDYgKiBNYXRoLnJvdW5kKGcgLyAyNTUgKiA1KSlcblx0XHQrIE1hdGgucm91bmQoYiAvIDI1NSAqIDUpO1xuXG5cdHJldHVybiBhbnNpO1xufTtcblxuY29udmVydC5hbnNpMTYucmdiID0gZnVuY3Rpb24gKGFyZ3MpIHtcblx0bGV0IGNvbG9yID0gYXJncyAlIDEwO1xuXG5cdC8vIEhhbmRsZSBncmV5c2NhbGVcblx0aWYgKGNvbG9yID09PSAwIHx8IGNvbG9yID09PSA3KSB7XG5cdFx0aWYgKGFyZ3MgPiA1MCkge1xuXHRcdFx0Y29sb3IgKz0gMy41O1xuXHRcdH1cblxuXHRcdGNvbG9yID0gY29sb3IgLyAxMC41ICogMjU1O1xuXG5cdFx0cmV0dXJuIFtjb2xvciwgY29sb3IsIGNvbG9yXTtcblx0fVxuXG5cdGNvbnN0IG11bHQgPSAofn4oYXJncyA+IDUwKSArIDEpICogMC41O1xuXHRjb25zdCByID0gKChjb2xvciAmIDEpICogbXVsdCkgKiAyNTU7XG5cdGNvbnN0IGcgPSAoKChjb2xvciA+PiAxKSAmIDEpICogbXVsdCkgKiAyNTU7XG5cdGNvbnN0IGIgPSAoKChjb2xvciA+PiAyKSAmIDEpICogbXVsdCkgKiAyNTU7XG5cblx0cmV0dXJuIFtyLCBnLCBiXTtcbn07XG5cbmNvbnZlcnQuYW5zaTI1Ni5yZ2IgPSBmdW5jdGlvbiAoYXJncykge1xuXHQvLyBIYW5kbGUgZ3JleXNjYWxlXG5cdGlmIChhcmdzID49IDIzMikge1xuXHRcdGNvbnN0IGMgPSAoYXJncyAtIDIzMikgKiAxMCArIDg7XG5cdFx0cmV0dXJuIFtjLCBjLCBjXTtcblx0fVxuXG5cdGFyZ3MgLT0gMTY7XG5cblx0bGV0IHJlbTtcblx0Y29uc3QgciA9IE1hdGguZmxvb3IoYXJncyAvIDM2KSAvIDUgKiAyNTU7XG5cdGNvbnN0IGcgPSBNYXRoLmZsb29yKChyZW0gPSBhcmdzICUgMzYpIC8gNikgLyA1ICogMjU1O1xuXHRjb25zdCBiID0gKHJlbSAlIDYpIC8gNSAqIDI1NTtcblxuXHRyZXR1cm4gW3IsIGcsIGJdO1xufTtcblxuY29udmVydC5yZ2IuaGV4ID0gZnVuY3Rpb24gKGFyZ3MpIHtcblx0Y29uc3QgaW50ZWdlciA9ICgoTWF0aC5yb3VuZChhcmdzWzBdKSAmIDB4RkYpIDw8IDE2KVxuXHRcdCsgKChNYXRoLnJvdW5kKGFyZ3NbMV0pICYgMHhGRikgPDwgOClcblx0XHQrIChNYXRoLnJvdW5kKGFyZ3NbMl0pICYgMHhGRik7XG5cblx0Y29uc3Qgc3RyaW5nID0gaW50ZWdlci50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtcblx0cmV0dXJuICcwMDAwMDAnLnN1YnN0cmluZyhzdHJpbmcubGVuZ3RoKSArIHN0cmluZztcbn07XG5cbmNvbnZlcnQuaGV4LnJnYiA9IGZ1bmN0aW9uIChhcmdzKSB7XG5cdGNvbnN0IG1hdGNoID0gYXJncy50b1N0cmluZygxNikubWF0Y2goL1thLWYwLTldezZ9fFthLWYwLTldezN9L2kpO1xuXHRpZiAoIW1hdGNoKSB7XG5cdFx0cmV0dXJuIFswLCAwLCAwXTtcblx0fVxuXG5cdGxldCBjb2xvclN0cmluZyA9IG1hdGNoWzBdO1xuXG5cdGlmIChtYXRjaFswXS5sZW5ndGggPT09IDMpIHtcblx0XHRjb2xvclN0cmluZyA9IGNvbG9yU3RyaW5nLnNwbGl0KCcnKS5tYXAoY2hhciA9PiB7XG5cdFx0XHRyZXR1cm4gY2hhciArIGNoYXI7XG5cdFx0fSkuam9pbignJyk7XG5cdH1cblxuXHRjb25zdCBpbnRlZ2VyID0gcGFyc2VJbnQoY29sb3JTdHJpbmcsIDE2KTtcblx0Y29uc3QgciA9IChpbnRlZ2VyID4+IDE2KSAmIDB4RkY7XG5cdGNvbnN0IGcgPSAoaW50ZWdlciA+PiA4KSAmIDB4RkY7XG5cdGNvbnN0IGIgPSBpbnRlZ2VyICYgMHhGRjtcblxuXHRyZXR1cm4gW3IsIGcsIGJdO1xufTtcblxuY29udmVydC5yZ2IuaGNnID0gZnVuY3Rpb24gKHJnYikge1xuXHRjb25zdCByID0gcmdiWzBdIC8gMjU1O1xuXHRjb25zdCBnID0gcmdiWzFdIC8gMjU1O1xuXHRjb25zdCBiID0gcmdiWzJdIC8gMjU1O1xuXHRjb25zdCBtYXggPSBNYXRoLm1heChNYXRoLm1heChyLCBnKSwgYik7XG5cdGNvbnN0IG1pbiA9IE1hdGgubWluKE1hdGgubWluKHIsIGcpLCBiKTtcblx0Y29uc3QgY2hyb21hID0gKG1heCAtIG1pbik7XG5cdGxldCBncmF5c2NhbGU7XG5cdGxldCBodWU7XG5cblx0aWYgKGNocm9tYSA8IDEpIHtcblx0XHRncmF5c2NhbGUgPSBtaW4gLyAoMSAtIGNocm9tYSk7XG5cdH0gZWxzZSB7XG5cdFx0Z3JheXNjYWxlID0gMDtcblx0fVxuXG5cdGlmIChjaHJvbWEgPD0gMCkge1xuXHRcdGh1ZSA9IDA7XG5cdH0gZWxzZVxuXHRpZiAobWF4ID09PSByKSB7XG5cdFx0aHVlID0gKChnIC0gYikgLyBjaHJvbWEpICUgNjtcblx0fSBlbHNlXG5cdGlmIChtYXggPT09IGcpIHtcblx0XHRodWUgPSAyICsgKGIgLSByKSAvIGNocm9tYTtcblx0fSBlbHNlIHtcblx0XHRodWUgPSA0ICsgKHIgLSBnKSAvIGNocm9tYTtcblx0fVxuXG5cdGh1ZSAvPSA2O1xuXHRodWUgJT0gMTtcblxuXHRyZXR1cm4gW2h1ZSAqIDM2MCwgY2hyb21hICogMTAwLCBncmF5c2NhbGUgKiAxMDBdO1xufTtcblxuY29udmVydC5oc2wuaGNnID0gZnVuY3Rpb24gKGhzbCkge1xuXHRjb25zdCBzID0gaHNsWzFdIC8gMTAwO1xuXHRjb25zdCBsID0gaHNsWzJdIC8gMTAwO1xuXG5cdGNvbnN0IGMgPSBsIDwgMC41ID8gKDIuMCAqIHMgKiBsKSA6ICgyLjAgKiBzICogKDEuMCAtIGwpKTtcblxuXHRsZXQgZiA9IDA7XG5cdGlmIChjIDwgMS4wKSB7XG5cdFx0ZiA9IChsIC0gMC41ICogYykgLyAoMS4wIC0gYyk7XG5cdH1cblxuXHRyZXR1cm4gW2hzbFswXSwgYyAqIDEwMCwgZiAqIDEwMF07XG59O1xuXG5jb252ZXJ0Lmhzdi5oY2cgPSBmdW5jdGlvbiAoaHN2KSB7XG5cdGNvbnN0IHMgPSBoc3ZbMV0gLyAxMDA7XG5cdGNvbnN0IHYgPSBoc3ZbMl0gLyAxMDA7XG5cblx0Y29uc3QgYyA9IHMgKiB2O1xuXHRsZXQgZiA9IDA7XG5cblx0aWYgKGMgPCAxLjApIHtcblx0XHRmID0gKHYgLSBjKSAvICgxIC0gYyk7XG5cdH1cblxuXHRyZXR1cm4gW2hzdlswXSwgYyAqIDEwMCwgZiAqIDEwMF07XG59O1xuXG5jb252ZXJ0LmhjZy5yZ2IgPSBmdW5jdGlvbiAoaGNnKSB7XG5cdGNvbnN0IGggPSBoY2dbMF0gLyAzNjA7XG5cdGNvbnN0IGMgPSBoY2dbMV0gLyAxMDA7XG5cdGNvbnN0IGcgPSBoY2dbMl0gLyAxMDA7XG5cblx0aWYgKGMgPT09IDAuMCkge1xuXHRcdHJldHVybiBbZyAqIDI1NSwgZyAqIDI1NSwgZyAqIDI1NV07XG5cdH1cblxuXHRjb25zdCBwdXJlID0gWzAsIDAsIDBdO1xuXHRjb25zdCBoaSA9IChoICUgMSkgKiA2O1xuXHRjb25zdCB2ID0gaGkgJSAxO1xuXHRjb25zdCB3ID0gMSAtIHY7XG5cdGxldCBtZyA9IDA7XG5cblx0LyogZXNsaW50LWRpc2FibGUgbWF4LXN0YXRlbWVudHMtcGVyLWxpbmUgKi9cblx0c3dpdGNoIChNYXRoLmZsb29yKGhpKSkge1xuXHRcdGNhc2UgMDpcblx0XHRcdHB1cmVbMF0gPSAxOyBwdXJlWzFdID0gdjsgcHVyZVsyXSA9IDA7IGJyZWFrO1xuXHRcdGNhc2UgMTpcblx0XHRcdHB1cmVbMF0gPSB3OyBwdXJlWzFdID0gMTsgcHVyZVsyXSA9IDA7IGJyZWFrO1xuXHRcdGNhc2UgMjpcblx0XHRcdHB1cmVbMF0gPSAwOyBwdXJlWzFdID0gMTsgcHVyZVsyXSA9IHY7IGJyZWFrO1xuXHRcdGNhc2UgMzpcblx0XHRcdHB1cmVbMF0gPSAwOyBwdXJlWzFdID0gdzsgcHVyZVsyXSA9IDE7IGJyZWFrO1xuXHRcdGNhc2UgNDpcblx0XHRcdHB1cmVbMF0gPSB2OyBwdXJlWzFdID0gMDsgcHVyZVsyXSA9IDE7IGJyZWFrO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHRwdXJlWzBdID0gMTsgcHVyZVsxXSA9IDA7IHB1cmVbMl0gPSB3O1xuXHR9XG5cdC8qIGVzbGludC1lbmFibGUgbWF4LXN0YXRlbWVudHMtcGVyLWxpbmUgKi9cblxuXHRtZyA9ICgxLjAgLSBjKSAqIGc7XG5cblx0cmV0dXJuIFtcblx0XHQoYyAqIHB1cmVbMF0gKyBtZykgKiAyNTUsXG5cdFx0KGMgKiBwdXJlWzFdICsgbWcpICogMjU1LFxuXHRcdChjICogcHVyZVsyXSArIG1nKSAqIDI1NVxuXHRdO1xufTtcblxuY29udmVydC5oY2cuaHN2ID0gZnVuY3Rpb24gKGhjZykge1xuXHRjb25zdCBjID0gaGNnWzFdIC8gMTAwO1xuXHRjb25zdCBnID0gaGNnWzJdIC8gMTAwO1xuXG5cdGNvbnN0IHYgPSBjICsgZyAqICgxLjAgLSBjKTtcblx0bGV0IGYgPSAwO1xuXG5cdGlmICh2ID4gMC4wKSB7XG5cdFx0ZiA9IGMgLyB2O1xuXHR9XG5cblx0cmV0dXJuIFtoY2dbMF0sIGYgKiAxMDAsIHYgKiAxMDBdO1xufTtcblxuY29udmVydC5oY2cuaHNsID0gZnVuY3Rpb24gKGhjZykge1xuXHRjb25zdCBjID0gaGNnWzFdIC8gMTAwO1xuXHRjb25zdCBnID0gaGNnWzJdIC8gMTAwO1xuXG5cdGNvbnN0IGwgPSBnICogKDEuMCAtIGMpICsgMC41ICogYztcblx0bGV0IHMgPSAwO1xuXG5cdGlmIChsID4gMC4wICYmIGwgPCAwLjUpIHtcblx0XHRzID0gYyAvICgyICogbCk7XG5cdH0gZWxzZVxuXHRpZiAobCA+PSAwLjUgJiYgbCA8IDEuMCkge1xuXHRcdHMgPSBjIC8gKDIgKiAoMSAtIGwpKTtcblx0fVxuXG5cdHJldHVybiBbaGNnWzBdLCBzICogMTAwLCBsICogMTAwXTtcbn07XG5cbmNvbnZlcnQuaGNnLmh3YiA9IGZ1bmN0aW9uIChoY2cpIHtcblx0Y29uc3QgYyA9IGhjZ1sxXSAvIDEwMDtcblx0Y29uc3QgZyA9IGhjZ1syXSAvIDEwMDtcblx0Y29uc3QgdiA9IGMgKyBnICogKDEuMCAtIGMpO1xuXHRyZXR1cm4gW2hjZ1swXSwgKHYgLSBjKSAqIDEwMCwgKDEgLSB2KSAqIDEwMF07XG59O1xuXG5jb252ZXJ0Lmh3Yi5oY2cgPSBmdW5jdGlvbiAoaHdiKSB7XG5cdGNvbnN0IHcgPSBod2JbMV0gLyAxMDA7XG5cdGNvbnN0IGIgPSBod2JbMl0gLyAxMDA7XG5cdGNvbnN0IHYgPSAxIC0gYjtcblx0Y29uc3QgYyA9IHYgLSB3O1xuXHRsZXQgZyA9IDA7XG5cblx0aWYgKGMgPCAxKSB7XG5cdFx0ZyA9ICh2IC0gYykgLyAoMSAtIGMpO1xuXHR9XG5cblx0cmV0dXJuIFtod2JbMF0sIGMgKiAxMDAsIGcgKiAxMDBdO1xufTtcblxuY29udmVydC5hcHBsZS5yZ2IgPSBmdW5jdGlvbiAoYXBwbGUpIHtcblx0cmV0dXJuIFsoYXBwbGVbMF0gLyA2NTUzNSkgKiAyNTUsIChhcHBsZVsxXSAvIDY1NTM1KSAqIDI1NSwgKGFwcGxlWzJdIC8gNjU1MzUpICogMjU1XTtcbn07XG5cbmNvbnZlcnQucmdiLmFwcGxlID0gZnVuY3Rpb24gKHJnYikge1xuXHRyZXR1cm4gWyhyZ2JbMF0gLyAyNTUpICogNjU1MzUsIChyZ2JbMV0gLyAyNTUpICogNjU1MzUsIChyZ2JbMl0gLyAyNTUpICogNjU1MzVdO1xufTtcblxuY29udmVydC5ncmF5LnJnYiA9IGZ1bmN0aW9uIChhcmdzKSB7XG5cdHJldHVybiBbYXJnc1swXSAvIDEwMCAqIDI1NSwgYXJnc1swXSAvIDEwMCAqIDI1NSwgYXJnc1swXSAvIDEwMCAqIDI1NV07XG59O1xuXG5jb252ZXJ0LmdyYXkuaHNsID0gZnVuY3Rpb24gKGFyZ3MpIHtcblx0cmV0dXJuIFswLCAwLCBhcmdzWzBdXTtcbn07XG5cbmNvbnZlcnQuZ3JheS5oc3YgPSBjb252ZXJ0LmdyYXkuaHNsO1xuXG5jb252ZXJ0LmdyYXkuaHdiID0gZnVuY3Rpb24gKGdyYXkpIHtcblx0cmV0dXJuIFswLCAxMDAsIGdyYXlbMF1dO1xufTtcblxuY29udmVydC5ncmF5LmNteWsgPSBmdW5jdGlvbiAoZ3JheSkge1xuXHRyZXR1cm4gWzAsIDAsIDAsIGdyYXlbMF1dO1xufTtcblxuY29udmVydC5ncmF5LmxhYiA9IGZ1bmN0aW9uIChncmF5KSB7XG5cdHJldHVybiBbZ3JheVswXSwgMCwgMF07XG59O1xuXG5jb252ZXJ0LmdyYXkuaGV4ID0gZnVuY3Rpb24gKGdyYXkpIHtcblx0Y29uc3QgdmFsID0gTWF0aC5yb3VuZChncmF5WzBdIC8gMTAwICogMjU1KSAmIDB4RkY7XG5cdGNvbnN0IGludGVnZXIgPSAodmFsIDw8IDE2KSArICh2YWwgPDwgOCkgKyB2YWw7XG5cblx0Y29uc3Qgc3RyaW5nID0gaW50ZWdlci50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtcblx0cmV0dXJuICcwMDAwMDAnLnN1YnN0cmluZyhzdHJpbmcubGVuZ3RoKSArIHN0cmluZztcbn07XG5cbmNvbnZlcnQucmdiLmdyYXkgPSBmdW5jdGlvbiAocmdiKSB7XG5cdGNvbnN0IHZhbCA9IChyZ2JbMF0gKyByZ2JbMV0gKyByZ2JbMl0pIC8gMztcblx0cmV0dXJuIFt2YWwgLyAyNTUgKiAxMDBdO1xufTtcbiIsICJjb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoJy4vY29udmVyc2lvbnMnKTtcblxuLypcblx0VGhpcyBmdW5jdGlvbiByb3V0ZXMgYSBtb2RlbCB0byBhbGwgb3RoZXIgbW9kZWxzLlxuXG5cdGFsbCBmdW5jdGlvbnMgdGhhdCBhcmUgcm91dGVkIGhhdmUgYSBwcm9wZXJ0eSBgLmNvbnZlcnNpb25gIGF0dGFjaGVkXG5cdHRvIHRoZSByZXR1cm5lZCBzeW50aGV0aWMgZnVuY3Rpb24uIFRoaXMgcHJvcGVydHkgaXMgYW4gYXJyYXlcblx0b2Ygc3RyaW5ncywgZWFjaCB3aXRoIHRoZSBzdGVwcyBpbiBiZXR3ZWVuIHRoZSAnZnJvbScgYW5kICd0bydcblx0Y29sb3IgbW9kZWxzIChpbmNsdXNpdmUpLlxuXG5cdGNvbnZlcnNpb25zIHRoYXQgYXJlIG5vdCBwb3NzaWJsZSBzaW1wbHkgYXJlIG5vdCBpbmNsdWRlZC5cbiovXG5cbmZ1bmN0aW9uIGJ1aWxkR3JhcGgoKSB7XG5cdGNvbnN0IGdyYXBoID0ge307XG5cdC8vIGh0dHBzOi8vanNwZXJmLmNvbS9vYmplY3Qta2V5cy12cy1mb3ItaW4td2l0aC1jbG9zdXJlLzNcblx0Y29uc3QgbW9kZWxzID0gT2JqZWN0LmtleXMoY29udmVyc2lvbnMpO1xuXG5cdGZvciAobGV0IGxlbiA9IG1vZGVscy5sZW5ndGgsIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcblx0XHRncmFwaFttb2RlbHNbaV1dID0ge1xuXHRcdFx0Ly8gaHR0cDovL2pzcGVyZi5jb20vMS12cy1pbmZpbml0eVxuXHRcdFx0Ly8gbWljcm8tb3B0LCBidXQgdGhpcyBpcyBzaW1wbGUuXG5cdFx0XHRkaXN0YW5jZTogLTEsXG5cdFx0XHRwYXJlbnQ6IG51bGxcblx0XHR9O1xuXHR9XG5cblx0cmV0dXJuIGdyYXBoO1xufVxuXG4vLyBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9CcmVhZHRoLWZpcnN0X3NlYXJjaFxuZnVuY3Rpb24gZGVyaXZlQkZTKGZyb21Nb2RlbCkge1xuXHRjb25zdCBncmFwaCA9IGJ1aWxkR3JhcGgoKTtcblx0Y29uc3QgcXVldWUgPSBbZnJvbU1vZGVsXTsgLy8gVW5zaGlmdCAtPiBxdWV1ZSAtPiBwb3BcblxuXHRncmFwaFtmcm9tTW9kZWxdLmRpc3RhbmNlID0gMDtcblxuXHR3aGlsZSAocXVldWUubGVuZ3RoKSB7XG5cdFx0Y29uc3QgY3VycmVudCA9IHF1ZXVlLnBvcCgpO1xuXHRcdGNvbnN0IGFkamFjZW50cyA9IE9iamVjdC5rZXlzKGNvbnZlcnNpb25zW2N1cnJlbnRdKTtcblxuXHRcdGZvciAobGV0IGxlbiA9IGFkamFjZW50cy5sZW5ndGgsIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcblx0XHRcdGNvbnN0IGFkamFjZW50ID0gYWRqYWNlbnRzW2ldO1xuXHRcdFx0Y29uc3Qgbm9kZSA9IGdyYXBoW2FkamFjZW50XTtcblxuXHRcdFx0aWYgKG5vZGUuZGlzdGFuY2UgPT09IC0xKSB7XG5cdFx0XHRcdG5vZGUuZGlzdGFuY2UgPSBncmFwaFtjdXJyZW50XS5kaXN0YW5jZSArIDE7XG5cdFx0XHRcdG5vZGUucGFyZW50ID0gY3VycmVudDtcblx0XHRcdFx0cXVldWUudW5zaGlmdChhZGphY2VudCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGdyYXBoO1xufVxuXG5mdW5jdGlvbiBsaW5rKGZyb20sIHRvKSB7XG5cdHJldHVybiBmdW5jdGlvbiAoYXJncykge1xuXHRcdHJldHVybiB0byhmcm9tKGFyZ3MpKTtcblx0fTtcbn1cblxuZnVuY3Rpb24gd3JhcENvbnZlcnNpb24odG9Nb2RlbCwgZ3JhcGgpIHtcblx0Y29uc3QgcGF0aCA9IFtncmFwaFt0b01vZGVsXS5wYXJlbnQsIHRvTW9kZWxdO1xuXHRsZXQgZm4gPSBjb252ZXJzaW9uc1tncmFwaFt0b01vZGVsXS5wYXJlbnRdW3RvTW9kZWxdO1xuXG5cdGxldCBjdXIgPSBncmFwaFt0b01vZGVsXS5wYXJlbnQ7XG5cdHdoaWxlIChncmFwaFtjdXJdLnBhcmVudCkge1xuXHRcdHBhdGgudW5zaGlmdChncmFwaFtjdXJdLnBhcmVudCk7XG5cdFx0Zm4gPSBsaW5rKGNvbnZlcnNpb25zW2dyYXBoW2N1cl0ucGFyZW50XVtjdXJdLCBmbik7XG5cdFx0Y3VyID0gZ3JhcGhbY3VyXS5wYXJlbnQ7XG5cdH1cblxuXHRmbi5jb252ZXJzaW9uID0gcGF0aDtcblx0cmV0dXJuIGZuO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChmcm9tTW9kZWwpIHtcblx0Y29uc3QgZ3JhcGggPSBkZXJpdmVCRlMoZnJvbU1vZGVsKTtcblx0Y29uc3QgY29udmVyc2lvbiA9IHt9O1xuXG5cdGNvbnN0IG1vZGVscyA9IE9iamVjdC5rZXlzKGdyYXBoKTtcblx0Zm9yIChsZXQgbGVuID0gbW9kZWxzLmxlbmd0aCwgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuXHRcdGNvbnN0IHRvTW9kZWwgPSBtb2RlbHNbaV07XG5cdFx0Y29uc3Qgbm9kZSA9IGdyYXBoW3RvTW9kZWxdO1xuXG5cdFx0aWYgKG5vZGUucGFyZW50ID09PSBudWxsKSB7XG5cdFx0XHQvLyBObyBwb3NzaWJsZSBjb252ZXJzaW9uLCBvciB0aGlzIG5vZGUgaXMgdGhlIHNvdXJjZSBtb2RlbC5cblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGNvbnZlcnNpb25bdG9Nb2RlbF0gPSB3cmFwQ29udmVyc2lvbih0b01vZGVsLCBncmFwaCk7XG5cdH1cblxuXHRyZXR1cm4gY29udmVyc2lvbjtcbn07XG5cbiIsICJjb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoJy4vY29udmVyc2lvbnMnKTtcbmNvbnN0IHJvdXRlID0gcmVxdWlyZSgnLi9yb3V0ZScpO1xuXG5jb25zdCBjb252ZXJ0ID0ge307XG5cbmNvbnN0IG1vZGVscyA9IE9iamVjdC5rZXlzKGNvbnZlcnNpb25zKTtcblxuZnVuY3Rpb24gd3JhcFJhdyhmbikge1xuXHRjb25zdCB3cmFwcGVkRm4gPSBmdW5jdGlvbiAoLi4uYXJncykge1xuXHRcdGNvbnN0IGFyZzAgPSBhcmdzWzBdO1xuXHRcdGlmIChhcmcwID09PSB1bmRlZmluZWQgfHwgYXJnMCA9PT0gbnVsbCkge1xuXHRcdFx0cmV0dXJuIGFyZzA7XG5cdFx0fVxuXG5cdFx0aWYgKGFyZzAubGVuZ3RoID4gMSkge1xuXHRcdFx0YXJncyA9IGFyZzA7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZuKGFyZ3MpO1xuXHR9O1xuXG5cdC8vIFByZXNlcnZlIC5jb252ZXJzaW9uIHByb3BlcnR5IGlmIHRoZXJlIGlzIG9uZVxuXHRpZiAoJ2NvbnZlcnNpb24nIGluIGZuKSB7XG5cdFx0d3JhcHBlZEZuLmNvbnZlcnNpb24gPSBmbi5jb252ZXJzaW9uO1xuXHR9XG5cblx0cmV0dXJuIHdyYXBwZWRGbjtcbn1cblxuZnVuY3Rpb24gd3JhcFJvdW5kZWQoZm4pIHtcblx0Y29uc3Qgd3JhcHBlZEZuID0gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcblx0XHRjb25zdCBhcmcwID0gYXJnc1swXTtcblxuXHRcdGlmIChhcmcwID09PSB1bmRlZmluZWQgfHwgYXJnMCA9PT0gbnVsbCkge1xuXHRcdFx0cmV0dXJuIGFyZzA7XG5cdFx0fVxuXG5cdFx0aWYgKGFyZzAubGVuZ3RoID4gMSkge1xuXHRcdFx0YXJncyA9IGFyZzA7XG5cdFx0fVxuXG5cdFx0Y29uc3QgcmVzdWx0ID0gZm4oYXJncyk7XG5cblx0XHQvLyBXZSdyZSBhc3N1bWluZyB0aGUgcmVzdWx0IGlzIGFuIGFycmF5IGhlcmUuXG5cdFx0Ly8gc2VlIG5vdGljZSBpbiBjb252ZXJzaW9ucy5qczsgZG9uJ3QgdXNlIGJveCB0eXBlc1xuXHRcdC8vIGluIGNvbnZlcnNpb24gZnVuY3Rpb25zLlxuXHRcdGlmICh0eXBlb2YgcmVzdWx0ID09PSAnb2JqZWN0Jykge1xuXHRcdFx0Zm9yIChsZXQgbGVuID0gcmVzdWx0Lmxlbmd0aCwgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuXHRcdFx0XHRyZXN1bHRbaV0gPSBNYXRoLnJvdW5kKHJlc3VsdFtpXSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fTtcblxuXHQvLyBQcmVzZXJ2ZSAuY29udmVyc2lvbiBwcm9wZXJ0eSBpZiB0aGVyZSBpcyBvbmVcblx0aWYgKCdjb252ZXJzaW9uJyBpbiBmbikge1xuXHRcdHdyYXBwZWRGbi5jb252ZXJzaW9uID0gZm4uY29udmVyc2lvbjtcblx0fVxuXG5cdHJldHVybiB3cmFwcGVkRm47XG59XG5cbm1vZGVscy5mb3JFYWNoKGZyb21Nb2RlbCA9PiB7XG5cdGNvbnZlcnRbZnJvbU1vZGVsXSA9IHt9O1xuXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb252ZXJ0W2Zyb21Nb2RlbF0sICdjaGFubmVscycsIHt2YWx1ZTogY29udmVyc2lvbnNbZnJvbU1vZGVsXS5jaGFubmVsc30pO1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoY29udmVydFtmcm9tTW9kZWxdLCAnbGFiZWxzJywge3ZhbHVlOiBjb252ZXJzaW9uc1tmcm9tTW9kZWxdLmxhYmVsc30pO1xuXG5cdGNvbnN0IHJvdXRlcyA9IHJvdXRlKGZyb21Nb2RlbCk7XG5cdGNvbnN0IHJvdXRlTW9kZWxzID0gT2JqZWN0LmtleXMocm91dGVzKTtcblxuXHRyb3V0ZU1vZGVscy5mb3JFYWNoKHRvTW9kZWwgPT4ge1xuXHRcdGNvbnN0IGZuID0gcm91dGVzW3RvTW9kZWxdO1xuXG5cdFx0Y29udmVydFtmcm9tTW9kZWxdW3RvTW9kZWxdID0gd3JhcFJvdW5kZWQoZm4pO1xuXHRcdGNvbnZlcnRbZnJvbU1vZGVsXVt0b01vZGVsXS5yYXcgPSB3cmFwUmF3KGZuKTtcblx0fSk7XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBjb252ZXJ0O1xuIiwgIid1c2Ugc3RyaWN0JztcblxuY29uc3Qgd3JhcEFuc2kxNiA9IChmbiwgb2Zmc2V0KSA9PiAoLi4uYXJncykgPT4ge1xuXHRjb25zdCBjb2RlID0gZm4oLi4uYXJncyk7XG5cdHJldHVybiBgXFx1MDAxQlske2NvZGUgKyBvZmZzZXR9bWA7XG59O1xuXG5jb25zdCB3cmFwQW5zaTI1NiA9IChmbiwgb2Zmc2V0KSA9PiAoLi4uYXJncykgPT4ge1xuXHRjb25zdCBjb2RlID0gZm4oLi4uYXJncyk7XG5cdHJldHVybiBgXFx1MDAxQlskezM4ICsgb2Zmc2V0fTs1OyR7Y29kZX1tYDtcbn07XG5cbmNvbnN0IHdyYXBBbnNpMTZtID0gKGZuLCBvZmZzZXQpID0+ICguLi5hcmdzKSA9PiB7XG5cdGNvbnN0IHJnYiA9IGZuKC4uLmFyZ3MpO1xuXHRyZXR1cm4gYFxcdTAwMUJbJHszOCArIG9mZnNldH07Mjske3JnYlswXX07JHtyZ2JbMV19OyR7cmdiWzJdfW1gO1xufTtcblxuY29uc3QgYW5zaTJhbnNpID0gbiA9PiBuO1xuY29uc3QgcmdiMnJnYiA9IChyLCBnLCBiKSA9PiBbciwgZywgYl07XG5cbmNvbnN0IHNldExhenlQcm9wZXJ0eSA9IChvYmplY3QsIHByb3BlcnR5LCBnZXQpID0+IHtcblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG9iamVjdCwgcHJvcGVydHksIHtcblx0XHRnZXQ6ICgpID0+IHtcblx0XHRcdGNvbnN0IHZhbHVlID0gZ2V0KCk7XG5cblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmplY3QsIHByb3BlcnR5LCB7XG5cdFx0XHRcdHZhbHVlLFxuXHRcdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRjb25maWd1cmFibGU6IHRydWVcblx0XHRcdH0pO1xuXG5cdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0fSxcblx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZVxuXHR9KTtcbn07XG5cbi8qKiBAdHlwZSB7dHlwZW9mIGltcG9ydCgnY29sb3ItY29udmVydCcpfSAqL1xubGV0IGNvbG9yQ29udmVydDtcbmNvbnN0IG1ha2VEeW5hbWljU3R5bGVzID0gKHdyYXAsIHRhcmdldFNwYWNlLCBpZGVudGl0eSwgaXNCYWNrZ3JvdW5kKSA9PiB7XG5cdGlmIChjb2xvckNvbnZlcnQgPT09IHVuZGVmaW5lZCkge1xuXHRcdGNvbG9yQ29udmVydCA9IHJlcXVpcmUoJ2NvbG9yLWNvbnZlcnQnKTtcblx0fVxuXG5cdGNvbnN0IG9mZnNldCA9IGlzQmFja2dyb3VuZCA/IDEwIDogMDtcblx0Y29uc3Qgc3R5bGVzID0ge307XG5cblx0Zm9yIChjb25zdCBbc291cmNlU3BhY2UsIHN1aXRlXSBvZiBPYmplY3QuZW50cmllcyhjb2xvckNvbnZlcnQpKSB7XG5cdFx0Y29uc3QgbmFtZSA9IHNvdXJjZVNwYWNlID09PSAnYW5zaTE2JyA/ICdhbnNpJyA6IHNvdXJjZVNwYWNlO1xuXHRcdGlmIChzb3VyY2VTcGFjZSA9PT0gdGFyZ2V0U3BhY2UpIHtcblx0XHRcdHN0eWxlc1tuYW1lXSA9IHdyYXAoaWRlbnRpdHksIG9mZnNldCk7XG5cdFx0fSBlbHNlIGlmICh0eXBlb2Ygc3VpdGUgPT09ICdvYmplY3QnKSB7XG5cdFx0XHRzdHlsZXNbbmFtZV0gPSB3cmFwKHN1aXRlW3RhcmdldFNwYWNlXSwgb2Zmc2V0KTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gc3R5bGVzO1xufTtcblxuZnVuY3Rpb24gYXNzZW1ibGVTdHlsZXMoKSB7XG5cdGNvbnN0IGNvZGVzID0gbmV3IE1hcCgpO1xuXHRjb25zdCBzdHlsZXMgPSB7XG5cdFx0bW9kaWZpZXI6IHtcblx0XHRcdHJlc2V0OiBbMCwgMF0sXG5cdFx0XHQvLyAyMSBpc24ndCB3aWRlbHkgc3VwcG9ydGVkIGFuZCAyMiBkb2VzIHRoZSBzYW1lIHRoaW5nXG5cdFx0XHRib2xkOiBbMSwgMjJdLFxuXHRcdFx0ZGltOiBbMiwgMjJdLFxuXHRcdFx0aXRhbGljOiBbMywgMjNdLFxuXHRcdFx0dW5kZXJsaW5lOiBbNCwgMjRdLFxuXHRcdFx0aW52ZXJzZTogWzcsIDI3XSxcblx0XHRcdGhpZGRlbjogWzgsIDI4XSxcblx0XHRcdHN0cmlrZXRocm91Z2g6IFs5LCAyOV1cblx0XHR9LFxuXHRcdGNvbG9yOiB7XG5cdFx0XHRibGFjazogWzMwLCAzOV0sXG5cdFx0XHRyZWQ6IFszMSwgMzldLFxuXHRcdFx0Z3JlZW46IFszMiwgMzldLFxuXHRcdFx0eWVsbG93OiBbMzMsIDM5XSxcblx0XHRcdGJsdWU6IFszNCwgMzldLFxuXHRcdFx0bWFnZW50YTogWzM1LCAzOV0sXG5cdFx0XHRjeWFuOiBbMzYsIDM5XSxcblx0XHRcdHdoaXRlOiBbMzcsIDM5XSxcblxuXHRcdFx0Ly8gQnJpZ2h0IGNvbG9yXG5cdFx0XHRibGFja0JyaWdodDogWzkwLCAzOV0sXG5cdFx0XHRyZWRCcmlnaHQ6IFs5MSwgMzldLFxuXHRcdFx0Z3JlZW5CcmlnaHQ6IFs5MiwgMzldLFxuXHRcdFx0eWVsbG93QnJpZ2h0OiBbOTMsIDM5XSxcblx0XHRcdGJsdWVCcmlnaHQ6IFs5NCwgMzldLFxuXHRcdFx0bWFnZW50YUJyaWdodDogWzk1LCAzOV0sXG5cdFx0XHRjeWFuQnJpZ2h0OiBbOTYsIDM5XSxcblx0XHRcdHdoaXRlQnJpZ2h0OiBbOTcsIDM5XVxuXHRcdH0sXG5cdFx0YmdDb2xvcjoge1xuXHRcdFx0YmdCbGFjazogWzQwLCA0OV0sXG5cdFx0XHRiZ1JlZDogWzQxLCA0OV0sXG5cdFx0XHRiZ0dyZWVuOiBbNDIsIDQ5XSxcblx0XHRcdGJnWWVsbG93OiBbNDMsIDQ5XSxcblx0XHRcdGJnQmx1ZTogWzQ0LCA0OV0sXG5cdFx0XHRiZ01hZ2VudGE6IFs0NSwgNDldLFxuXHRcdFx0YmdDeWFuOiBbNDYsIDQ5XSxcblx0XHRcdGJnV2hpdGU6IFs0NywgNDldLFxuXG5cdFx0XHQvLyBCcmlnaHQgY29sb3Jcblx0XHRcdGJnQmxhY2tCcmlnaHQ6IFsxMDAsIDQ5XSxcblx0XHRcdGJnUmVkQnJpZ2h0OiBbMTAxLCA0OV0sXG5cdFx0XHRiZ0dyZWVuQnJpZ2h0OiBbMTAyLCA0OV0sXG5cdFx0XHRiZ1llbGxvd0JyaWdodDogWzEwMywgNDldLFxuXHRcdFx0YmdCbHVlQnJpZ2h0OiBbMTA0LCA0OV0sXG5cdFx0XHRiZ01hZ2VudGFCcmlnaHQ6IFsxMDUsIDQ5XSxcblx0XHRcdGJnQ3lhbkJyaWdodDogWzEwNiwgNDldLFxuXHRcdFx0YmdXaGl0ZUJyaWdodDogWzEwNywgNDldXG5cdFx0fVxuXHR9O1xuXG5cdC8vIEFsaWFzIGJyaWdodCBibGFjayBhcyBncmF5IChhbmQgZ3JleSlcblx0c3R5bGVzLmNvbG9yLmdyYXkgPSBzdHlsZXMuY29sb3IuYmxhY2tCcmlnaHQ7XG5cdHN0eWxlcy5iZ0NvbG9yLmJnR3JheSA9IHN0eWxlcy5iZ0NvbG9yLmJnQmxhY2tCcmlnaHQ7XG5cdHN0eWxlcy5jb2xvci5ncmV5ID0gc3R5bGVzLmNvbG9yLmJsYWNrQnJpZ2h0O1xuXHRzdHlsZXMuYmdDb2xvci5iZ0dyZXkgPSBzdHlsZXMuYmdDb2xvci5iZ0JsYWNrQnJpZ2h0O1xuXG5cdGZvciAoY29uc3QgW2dyb3VwTmFtZSwgZ3JvdXBdIG9mIE9iamVjdC5lbnRyaWVzKHN0eWxlcykpIHtcblx0XHRmb3IgKGNvbnN0IFtzdHlsZU5hbWUsIHN0eWxlXSBvZiBPYmplY3QuZW50cmllcyhncm91cCkpIHtcblx0XHRcdHN0eWxlc1tzdHlsZU5hbWVdID0ge1xuXHRcdFx0XHRvcGVuOiBgXFx1MDAxQlske3N0eWxlWzBdfW1gLFxuXHRcdFx0XHRjbG9zZTogYFxcdTAwMUJbJHtzdHlsZVsxXX1tYFxuXHRcdFx0fTtcblxuXHRcdFx0Z3JvdXBbc3R5bGVOYW1lXSA9IHN0eWxlc1tzdHlsZU5hbWVdO1xuXG5cdFx0XHRjb2Rlcy5zZXQoc3R5bGVbMF0sIHN0eWxlWzFdKTtcblx0XHR9XG5cblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoc3R5bGVzLCBncm91cE5hbWUsIHtcblx0XHRcdHZhbHVlOiBncm91cCxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlXG5cdFx0fSk7XG5cdH1cblxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoc3R5bGVzLCAnY29kZXMnLCB7XG5cdFx0dmFsdWU6IGNvZGVzLFxuXHRcdGVudW1lcmFibGU6IGZhbHNlXG5cdH0pO1xuXG5cdHN0eWxlcy5jb2xvci5jbG9zZSA9ICdcXHUwMDFCWzM5bSc7XG5cdHN0eWxlcy5iZ0NvbG9yLmNsb3NlID0gJ1xcdTAwMUJbNDltJztcblxuXHRzZXRMYXp5UHJvcGVydHkoc3R5bGVzLmNvbG9yLCAnYW5zaScsICgpID0+IG1ha2VEeW5hbWljU3R5bGVzKHdyYXBBbnNpMTYsICdhbnNpMTYnLCBhbnNpMmFuc2ksIGZhbHNlKSk7XG5cdHNldExhenlQcm9wZXJ0eShzdHlsZXMuY29sb3IsICdhbnNpMjU2JywgKCkgPT4gbWFrZUR5bmFtaWNTdHlsZXMod3JhcEFuc2kyNTYsICdhbnNpMjU2JywgYW5zaTJhbnNpLCBmYWxzZSkpO1xuXHRzZXRMYXp5UHJvcGVydHkoc3R5bGVzLmNvbG9yLCAnYW5zaTE2bScsICgpID0+IG1ha2VEeW5hbWljU3R5bGVzKHdyYXBBbnNpMTZtLCAncmdiJywgcmdiMnJnYiwgZmFsc2UpKTtcblx0c2V0TGF6eVByb3BlcnR5KHN0eWxlcy5iZ0NvbG9yLCAnYW5zaScsICgpID0+IG1ha2VEeW5hbWljU3R5bGVzKHdyYXBBbnNpMTYsICdhbnNpMTYnLCBhbnNpMmFuc2ksIHRydWUpKTtcblx0c2V0TGF6eVByb3BlcnR5KHN0eWxlcy5iZ0NvbG9yLCAnYW5zaTI1NicsICgpID0+IG1ha2VEeW5hbWljU3R5bGVzKHdyYXBBbnNpMjU2LCAnYW5zaTI1NicsIGFuc2kyYW5zaSwgdHJ1ZSkpO1xuXHRzZXRMYXp5UHJvcGVydHkoc3R5bGVzLmJnQ29sb3IsICdhbnNpMTZtJywgKCkgPT4gbWFrZUR5bmFtaWNTdHlsZXMod3JhcEFuc2kxNm0sICdyZ2InLCByZ2IycmdiLCB0cnVlKSk7XG5cblx0cmV0dXJuIHN0eWxlcztcbn1cblxuLy8gTWFrZSB0aGUgZXhwb3J0IGltbXV0YWJsZVxuT2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgJ2V4cG9ydHMnLCB7XG5cdGVudW1lcmFibGU6IHRydWUsXG5cdGdldDogYXNzZW1ibGVTdHlsZXNcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSAoZmxhZywgYXJndiA9IHByb2Nlc3MuYXJndikgPT4ge1xuXHRjb25zdCBwcmVmaXggPSBmbGFnLnN0YXJ0c1dpdGgoJy0nKSA/ICcnIDogKGZsYWcubGVuZ3RoID09PSAxID8gJy0nIDogJy0tJyk7XG5cdGNvbnN0IHBvc2l0aW9uID0gYXJndi5pbmRleE9mKHByZWZpeCArIGZsYWcpO1xuXHRjb25zdCB0ZXJtaW5hdG9yUG9zaXRpb24gPSBhcmd2LmluZGV4T2YoJy0tJyk7XG5cdHJldHVybiBwb3NpdGlvbiAhPT0gLTEgJiYgKHRlcm1pbmF0b3JQb3NpdGlvbiA9PT0gLTEgfHwgcG9zaXRpb24gPCB0ZXJtaW5hdG9yUG9zaXRpb24pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG5jb25zdCBvcyA9IHJlcXVpcmUoJ29zJyk7XG5jb25zdCB0dHkgPSByZXF1aXJlKCd0dHknKTtcbmNvbnN0IGhhc0ZsYWcgPSByZXF1aXJlKCdoYXMtZmxhZycpO1xuXG5jb25zdCB7ZW52fSA9IHByb2Nlc3M7XG5cbmxldCBmb3JjZUNvbG9yO1xuaWYgKGhhc0ZsYWcoJ25vLWNvbG9yJykgfHxcblx0aGFzRmxhZygnbm8tY29sb3JzJykgfHxcblx0aGFzRmxhZygnY29sb3I9ZmFsc2UnKSB8fFxuXHRoYXNGbGFnKCdjb2xvcj1uZXZlcicpKSB7XG5cdGZvcmNlQ29sb3IgPSAwO1xufSBlbHNlIGlmIChoYXNGbGFnKCdjb2xvcicpIHx8XG5cdGhhc0ZsYWcoJ2NvbG9ycycpIHx8XG5cdGhhc0ZsYWcoJ2NvbG9yPXRydWUnKSB8fFxuXHRoYXNGbGFnKCdjb2xvcj1hbHdheXMnKSkge1xuXHRmb3JjZUNvbG9yID0gMTtcbn1cblxuaWYgKCdGT1JDRV9DT0xPUicgaW4gZW52KSB7XG5cdGlmIChlbnYuRk9SQ0VfQ09MT1IgPT09ICd0cnVlJykge1xuXHRcdGZvcmNlQ29sb3IgPSAxO1xuXHR9IGVsc2UgaWYgKGVudi5GT1JDRV9DT0xPUiA9PT0gJ2ZhbHNlJykge1xuXHRcdGZvcmNlQ29sb3IgPSAwO1xuXHR9IGVsc2Uge1xuXHRcdGZvcmNlQ29sb3IgPSBlbnYuRk9SQ0VfQ09MT1IubGVuZ3RoID09PSAwID8gMSA6IE1hdGgubWluKHBhcnNlSW50KGVudi5GT1JDRV9DT0xPUiwgMTApLCAzKTtcblx0fVxufVxuXG5mdW5jdGlvbiB0cmFuc2xhdGVMZXZlbChsZXZlbCkge1xuXHRpZiAobGV2ZWwgPT09IDApIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdGxldmVsLFxuXHRcdGhhc0Jhc2ljOiB0cnVlLFxuXHRcdGhhczI1NjogbGV2ZWwgPj0gMixcblx0XHRoYXMxNm06IGxldmVsID49IDNcblx0fTtcbn1cblxuZnVuY3Rpb24gc3VwcG9ydHNDb2xvcihoYXZlU3RyZWFtLCBzdHJlYW1Jc1RUWSkge1xuXHRpZiAoZm9yY2VDb2xvciA9PT0gMCkge1xuXHRcdHJldHVybiAwO1xuXHR9XG5cblx0aWYgKGhhc0ZsYWcoJ2NvbG9yPTE2bScpIHx8XG5cdFx0aGFzRmxhZygnY29sb3I9ZnVsbCcpIHx8XG5cdFx0aGFzRmxhZygnY29sb3I9dHJ1ZWNvbG9yJykpIHtcblx0XHRyZXR1cm4gMztcblx0fVxuXG5cdGlmIChoYXNGbGFnKCdjb2xvcj0yNTYnKSkge1xuXHRcdHJldHVybiAyO1xuXHR9XG5cblx0aWYgKGhhdmVTdHJlYW0gJiYgIXN0cmVhbUlzVFRZICYmIGZvcmNlQ29sb3IgPT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiAwO1xuXHR9XG5cblx0Y29uc3QgbWluID0gZm9yY2VDb2xvciB8fCAwO1xuXG5cdGlmIChlbnYuVEVSTSA9PT0gJ2R1bWInKSB7XG5cdFx0cmV0dXJuIG1pbjtcblx0fVxuXG5cdGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInKSB7XG5cdFx0Ly8gV2luZG93cyAxMCBidWlsZCAxMDU4NiBpcyB0aGUgZmlyc3QgV2luZG93cyByZWxlYXNlIHRoYXQgc3VwcG9ydHMgMjU2IGNvbG9ycy5cblx0XHQvLyBXaW5kb3dzIDEwIGJ1aWxkIDE0OTMxIGlzIHRoZSBmaXJzdCByZWxlYXNlIHRoYXQgc3VwcG9ydHMgMTZtL1RydWVDb2xvci5cblx0XHRjb25zdCBvc1JlbGVhc2UgPSBvcy5yZWxlYXNlKCkuc3BsaXQoJy4nKTtcblx0XHRpZiAoXG5cdFx0XHROdW1iZXIob3NSZWxlYXNlWzBdKSA+PSAxMCAmJlxuXHRcdFx0TnVtYmVyKG9zUmVsZWFzZVsyXSkgPj0gMTA1ODZcblx0XHQpIHtcblx0XHRcdHJldHVybiBOdW1iZXIob3NSZWxlYXNlWzJdKSA+PSAxNDkzMSA/IDMgOiAyO1xuXHRcdH1cblxuXHRcdHJldHVybiAxO1xuXHR9XG5cblx0aWYgKCdDSScgaW4gZW52KSB7XG5cdFx0aWYgKFsnVFJBVklTJywgJ0NJUkNMRUNJJywgJ0FQUFZFWU9SJywgJ0dJVExBQl9DSScsICdHSVRIVUJfQUNUSU9OUycsICdCVUlMREtJVEUnXS5zb21lKHNpZ24gPT4gc2lnbiBpbiBlbnYpIHx8IGVudi5DSV9OQU1FID09PSAnY29kZXNoaXAnKSB7XG5cdFx0XHRyZXR1cm4gMTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbWluO1xuXHR9XG5cblx0aWYgKCdURUFNQ0lUWV9WRVJTSU9OJyBpbiBlbnYpIHtcblx0XHRyZXR1cm4gL14oOVxcLigwKlsxLTldXFxkKilcXC58XFxkezIsfVxcLikvLnRlc3QoZW52LlRFQU1DSVRZX1ZFUlNJT04pID8gMSA6IDA7XG5cdH1cblxuXHRpZiAoZW52LkNPTE9SVEVSTSA9PT0gJ3RydWVjb2xvcicpIHtcblx0XHRyZXR1cm4gMztcblx0fVxuXG5cdGlmICgnVEVSTV9QUk9HUkFNJyBpbiBlbnYpIHtcblx0XHRjb25zdCB2ZXJzaW9uID0gcGFyc2VJbnQoKGVudi5URVJNX1BST0dSQU1fVkVSU0lPTiB8fCAnJykuc3BsaXQoJy4nKVswXSwgMTApO1xuXG5cdFx0c3dpdGNoIChlbnYuVEVSTV9QUk9HUkFNKSB7XG5cdFx0XHRjYXNlICdpVGVybS5hcHAnOlxuXHRcdFx0XHRyZXR1cm4gdmVyc2lvbiA+PSAzID8gMyA6IDI7XG5cdFx0XHRjYXNlICdBcHBsZV9UZXJtaW5hbCc6XG5cdFx0XHRcdHJldHVybiAyO1xuXHRcdFx0Ly8gTm8gZGVmYXVsdFxuXHRcdH1cblx0fVxuXG5cdGlmICgvLTI1Nihjb2xvcik/JC9pLnRlc3QoZW52LlRFUk0pKSB7XG5cdFx0cmV0dXJuIDI7XG5cdH1cblxuXHRpZiAoL15zY3JlZW58Xnh0ZXJtfF52dDEwMHxednQyMjB8XnJ4dnR8Y29sb3J8YW5zaXxjeWd3aW58bGludXgvaS50ZXN0KGVudi5URVJNKSkge1xuXHRcdHJldHVybiAxO1xuXHR9XG5cblx0aWYgKCdDT0xPUlRFUk0nIGluIGVudikge1xuXHRcdHJldHVybiAxO1xuXHR9XG5cblx0cmV0dXJuIG1pbjtcbn1cblxuZnVuY3Rpb24gZ2V0U3VwcG9ydExldmVsKHN0cmVhbSkge1xuXHRjb25zdCBsZXZlbCA9IHN1cHBvcnRzQ29sb3Ioc3RyZWFtLCBzdHJlYW0gJiYgc3RyZWFtLmlzVFRZKTtcblx0cmV0dXJuIHRyYW5zbGF0ZUxldmVsKGxldmVsKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG5cdHN1cHBvcnRzQ29sb3I6IGdldFN1cHBvcnRMZXZlbCxcblx0c3Rkb3V0OiB0cmFuc2xhdGVMZXZlbChzdXBwb3J0c0NvbG9yKHRydWUsIHR0eS5pc2F0dHkoMSkpKSxcblx0c3RkZXJyOiB0cmFuc2xhdGVMZXZlbChzdXBwb3J0c0NvbG9yKHRydWUsIHR0eS5pc2F0dHkoMikpKVxufTtcbiIsICIndXNlIHN0cmljdCc7XG5cbmNvbnN0IHN0cmluZ1JlcGxhY2VBbGwgPSAoc3RyaW5nLCBzdWJzdHJpbmcsIHJlcGxhY2VyKSA9PiB7XG5cdGxldCBpbmRleCA9IHN0cmluZy5pbmRleE9mKHN1YnN0cmluZyk7XG5cdGlmIChpbmRleCA9PT0gLTEpIHtcblx0XHRyZXR1cm4gc3RyaW5nO1xuXHR9XG5cblx0Y29uc3Qgc3Vic3RyaW5nTGVuZ3RoID0gc3Vic3RyaW5nLmxlbmd0aDtcblx0bGV0IGVuZEluZGV4ID0gMDtcblx0bGV0IHJldHVyblZhbHVlID0gJyc7XG5cdGRvIHtcblx0XHRyZXR1cm5WYWx1ZSArPSBzdHJpbmcuc3Vic3RyKGVuZEluZGV4LCBpbmRleCAtIGVuZEluZGV4KSArIHN1YnN0cmluZyArIHJlcGxhY2VyO1xuXHRcdGVuZEluZGV4ID0gaW5kZXggKyBzdWJzdHJpbmdMZW5ndGg7XG5cdFx0aW5kZXggPSBzdHJpbmcuaW5kZXhPZihzdWJzdHJpbmcsIGVuZEluZGV4KTtcblx0fSB3aGlsZSAoaW5kZXggIT09IC0xKTtcblxuXHRyZXR1cm5WYWx1ZSArPSBzdHJpbmcuc3Vic3RyKGVuZEluZGV4KTtcblx0cmV0dXJuIHJldHVyblZhbHVlO1xufTtcblxuY29uc3Qgc3RyaW5nRW5jYXNlQ1JMRldpdGhGaXJzdEluZGV4ID0gKHN0cmluZywgcHJlZml4LCBwb3N0Zml4LCBpbmRleCkgPT4ge1xuXHRsZXQgZW5kSW5kZXggPSAwO1xuXHRsZXQgcmV0dXJuVmFsdWUgPSAnJztcblx0ZG8ge1xuXHRcdGNvbnN0IGdvdENSID0gc3RyaW5nW2luZGV4IC0gMV0gPT09ICdcXHInO1xuXHRcdHJldHVyblZhbHVlICs9IHN0cmluZy5zdWJzdHIoZW5kSW5kZXgsIChnb3RDUiA/IGluZGV4IC0gMSA6IGluZGV4KSAtIGVuZEluZGV4KSArIHByZWZpeCArIChnb3RDUiA/ICdcXHJcXG4nIDogJ1xcbicpICsgcG9zdGZpeDtcblx0XHRlbmRJbmRleCA9IGluZGV4ICsgMTtcblx0XHRpbmRleCA9IHN0cmluZy5pbmRleE9mKCdcXG4nLCBlbmRJbmRleCk7XG5cdH0gd2hpbGUgKGluZGV4ICE9PSAtMSk7XG5cblx0cmV0dXJuVmFsdWUgKz0gc3RyaW5nLnN1YnN0cihlbmRJbmRleCk7XG5cdHJldHVybiByZXR1cm5WYWx1ZTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuXHRzdHJpbmdSZXBsYWNlQWxsLFxuXHRzdHJpbmdFbmNhc2VDUkxGV2l0aEZpcnN0SW5kZXhcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuY29uc3QgVEVNUExBVEVfUkVHRVggPSAvKD86XFxcXCh1KD86W2EtZlxcZF17NH18XFx7W2EtZlxcZF17MSw2fVxcfSl8eFthLWZcXGRdezJ9fC4pKXwoPzpcXHsofik/KFxcdysoPzpcXChbXildKlxcKSk/KD86XFwuXFx3Kyg/OlxcKFteKV0qXFwpKT8pKikoPzpbIFxcdF18KD89XFxyP1xcbikpKXwoXFx9KXwoKD86LnxbXFxyXFxuXFxmXSkrPykvZ2k7XG5jb25zdCBTVFlMRV9SRUdFWCA9IC8oPzpefFxcLikoXFx3KykoPzpcXCgoW14pXSopXFwpKT8vZztcbmNvbnN0IFNUUklOR19SRUdFWCA9IC9eKFsnXCJdKSgoPzpcXFxcLnwoPyFcXDEpW15cXFxcXSkqKVxcMSQvO1xuY29uc3QgRVNDQVBFX1JFR0VYID0gL1xcXFwodSg/OlthLWZcXGRdezR9fHtbYS1mXFxkXXsxLDZ9fSl8eFthLWZcXGRdezJ9fC4pfChbXlxcXFxdKS9naTtcblxuY29uc3QgRVNDQVBFUyA9IG5ldyBNYXAoW1xuXHRbJ24nLCAnXFxuJ10sXG5cdFsncicsICdcXHInXSxcblx0Wyd0JywgJ1xcdCddLFxuXHRbJ2InLCAnXFxiJ10sXG5cdFsnZicsICdcXGYnXSxcblx0Wyd2JywgJ1xcdiddLFxuXHRbJzAnLCAnXFwwJ10sXG5cdFsnXFxcXCcsICdcXFxcJ10sXG5cdFsnZScsICdcXHUwMDFCJ10sXG5cdFsnYScsICdcXHUwMDA3J11cbl0pO1xuXG5mdW5jdGlvbiB1bmVzY2FwZShjKSB7XG5cdGNvbnN0IHUgPSBjWzBdID09PSAndSc7XG5cdGNvbnN0IGJyYWNrZXQgPSBjWzFdID09PSAneyc7XG5cblx0aWYgKCh1ICYmICFicmFja2V0ICYmIGMubGVuZ3RoID09PSA1KSB8fCAoY1swXSA9PT0gJ3gnICYmIGMubGVuZ3RoID09PSAzKSkge1xuXHRcdHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KGMuc2xpY2UoMSksIDE2KSk7XG5cdH1cblxuXHRpZiAodSAmJiBicmFja2V0KSB7XG5cdFx0cmV0dXJuIFN0cmluZy5mcm9tQ29kZVBvaW50KHBhcnNlSW50KGMuc2xpY2UoMiwgLTEpLCAxNikpO1xuXHR9XG5cblx0cmV0dXJuIEVTQ0FQRVMuZ2V0KGMpIHx8IGM7XG59XG5cbmZ1bmN0aW9uIHBhcnNlQXJndW1lbnRzKG5hbWUsIGFyZ3VtZW50c18pIHtcblx0Y29uc3QgcmVzdWx0cyA9IFtdO1xuXHRjb25zdCBjaHVua3MgPSBhcmd1bWVudHNfLnRyaW0oKS5zcGxpdCgvXFxzKixcXHMqL2cpO1xuXHRsZXQgbWF0Y2hlcztcblxuXHRmb3IgKGNvbnN0IGNodW5rIG9mIGNodW5rcykge1xuXHRcdGNvbnN0IG51bWJlciA9IE51bWJlcihjaHVuayk7XG5cdFx0aWYgKCFOdW1iZXIuaXNOYU4obnVtYmVyKSkge1xuXHRcdFx0cmVzdWx0cy5wdXNoKG51bWJlcik7XG5cdFx0fSBlbHNlIGlmICgobWF0Y2hlcyA9IGNodW5rLm1hdGNoKFNUUklOR19SRUdFWCkpKSB7XG5cdFx0XHRyZXN1bHRzLnB1c2gobWF0Y2hlc1syXS5yZXBsYWNlKEVTQ0FQRV9SRUdFWCwgKG0sIGVzY2FwZSwgY2hhcmFjdGVyKSA9PiBlc2NhcGUgPyB1bmVzY2FwZShlc2NhcGUpIDogY2hhcmFjdGVyKSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBDaGFsayB0ZW1wbGF0ZSBzdHlsZSBhcmd1bWVudDogJHtjaHVua30gKGluIHN0eWxlICcke25hbWV9JylgKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gcmVzdWx0cztcbn1cblxuZnVuY3Rpb24gcGFyc2VTdHlsZShzdHlsZSkge1xuXHRTVFlMRV9SRUdFWC5sYXN0SW5kZXggPSAwO1xuXG5cdGNvbnN0IHJlc3VsdHMgPSBbXTtcblx0bGV0IG1hdGNoZXM7XG5cblx0d2hpbGUgKChtYXRjaGVzID0gU1RZTEVfUkVHRVguZXhlYyhzdHlsZSkpICE9PSBudWxsKSB7XG5cdFx0Y29uc3QgbmFtZSA9IG1hdGNoZXNbMV07XG5cblx0XHRpZiAobWF0Y2hlc1syXSkge1xuXHRcdFx0Y29uc3QgYXJncyA9IHBhcnNlQXJndW1lbnRzKG5hbWUsIG1hdGNoZXNbMl0pO1xuXHRcdFx0cmVzdWx0cy5wdXNoKFtuYW1lXS5jb25jYXQoYXJncykpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXN1bHRzLnB1c2goW25hbWVdKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gcmVzdWx0cztcbn1cblxuZnVuY3Rpb24gYnVpbGRTdHlsZShjaGFsaywgc3R5bGVzKSB7XG5cdGNvbnN0IGVuYWJsZWQgPSB7fTtcblxuXHRmb3IgKGNvbnN0IGxheWVyIG9mIHN0eWxlcykge1xuXHRcdGZvciAoY29uc3Qgc3R5bGUgb2YgbGF5ZXIuc3R5bGVzKSB7XG5cdFx0XHRlbmFibGVkW3N0eWxlWzBdXSA9IGxheWVyLmludmVyc2UgPyBudWxsIDogc3R5bGUuc2xpY2UoMSk7XG5cdFx0fVxuXHR9XG5cblx0bGV0IGN1cnJlbnQgPSBjaGFsaztcblx0Zm9yIChjb25zdCBbc3R5bGVOYW1lLCBzdHlsZXNdIG9mIE9iamVjdC5lbnRyaWVzKGVuYWJsZWQpKSB7XG5cdFx0aWYgKCFBcnJheS5pc0FycmF5KHN0eWxlcykpIHtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGlmICghKHN0eWxlTmFtZSBpbiBjdXJyZW50KSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKGBVbmtub3duIENoYWxrIHN0eWxlOiAke3N0eWxlTmFtZX1gKTtcblx0XHR9XG5cblx0XHRjdXJyZW50ID0gc3R5bGVzLmxlbmd0aCA+IDAgPyBjdXJyZW50W3N0eWxlTmFtZV0oLi4uc3R5bGVzKSA6IGN1cnJlbnRbc3R5bGVOYW1lXTtcblx0fVxuXG5cdHJldHVybiBjdXJyZW50O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IChjaGFsaywgdGVtcG9yYXJ5KSA9PiB7XG5cdGNvbnN0IHN0eWxlcyA9IFtdO1xuXHRjb25zdCBjaHVua3MgPSBbXTtcblx0bGV0IGNodW5rID0gW107XG5cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1wYXJhbXNcblx0dGVtcG9yYXJ5LnJlcGxhY2UoVEVNUExBVEVfUkVHRVgsIChtLCBlc2NhcGVDaGFyYWN0ZXIsIGludmVyc2UsIHN0eWxlLCBjbG9zZSwgY2hhcmFjdGVyKSA9PiB7XG5cdFx0aWYgKGVzY2FwZUNoYXJhY3Rlcikge1xuXHRcdFx0Y2h1bmsucHVzaCh1bmVzY2FwZShlc2NhcGVDaGFyYWN0ZXIpKTtcblx0XHR9IGVsc2UgaWYgKHN0eWxlKSB7XG5cdFx0XHRjb25zdCBzdHJpbmcgPSBjaHVuay5qb2luKCcnKTtcblx0XHRcdGNodW5rID0gW107XG5cdFx0XHRjaHVua3MucHVzaChzdHlsZXMubGVuZ3RoID09PSAwID8gc3RyaW5nIDogYnVpbGRTdHlsZShjaGFsaywgc3R5bGVzKShzdHJpbmcpKTtcblx0XHRcdHN0eWxlcy5wdXNoKHtpbnZlcnNlLCBzdHlsZXM6IHBhcnNlU3R5bGUoc3R5bGUpfSk7XG5cdFx0fSBlbHNlIGlmIChjbG9zZSkge1xuXHRcdFx0aWYgKHN0eWxlcy5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCdGb3VuZCBleHRyYW5lb3VzIH0gaW4gQ2hhbGsgdGVtcGxhdGUgbGl0ZXJhbCcpO1xuXHRcdFx0fVxuXG5cdFx0XHRjaHVua3MucHVzaChidWlsZFN0eWxlKGNoYWxrLCBzdHlsZXMpKGNodW5rLmpvaW4oJycpKSk7XG5cdFx0XHRjaHVuayA9IFtdO1xuXHRcdFx0c3R5bGVzLnBvcCgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjaHVuay5wdXNoKGNoYXJhY3Rlcik7XG5cdFx0fVxuXHR9KTtcblxuXHRjaHVua3MucHVzaChjaHVuay5qb2luKCcnKSk7XG5cblx0aWYgKHN0eWxlcy5sZW5ndGggPiAwKSB7XG5cdFx0Y29uc3QgZXJyTWVzc2FnZSA9IGBDaGFsayB0ZW1wbGF0ZSBsaXRlcmFsIGlzIG1pc3NpbmcgJHtzdHlsZXMubGVuZ3RofSBjbG9zaW5nIGJyYWNrZXQke3N0eWxlcy5sZW5ndGggPT09IDEgPyAnJyA6ICdzJ30gKFxcYH1cXGApYDtcblx0XHR0aHJvdyBuZXcgRXJyb3IoZXJyTWVzc2FnZSk7XG5cdH1cblxuXHRyZXR1cm4gY2h1bmtzLmpvaW4oJycpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG5jb25zdCBhbnNpU3R5bGVzID0gcmVxdWlyZSgnYW5zaS1zdHlsZXMnKTtcbmNvbnN0IHtzdGRvdXQ6IHN0ZG91dENvbG9yLCBzdGRlcnI6IHN0ZGVyckNvbG9yfSA9IHJlcXVpcmUoJ3N1cHBvcnRzLWNvbG9yJyk7XG5jb25zdCB7XG5cdHN0cmluZ1JlcGxhY2VBbGwsXG5cdHN0cmluZ0VuY2FzZUNSTEZXaXRoRmlyc3RJbmRleFxufSA9IHJlcXVpcmUoJy4vdXRpbCcpO1xuXG5jb25zdCB7aXNBcnJheX0gPSBBcnJheTtcblxuLy8gYHN1cHBvcnRzQ29sb3IubGV2ZWxgIFx1MjE5MiBgYW5zaVN0eWxlcy5jb2xvcltuYW1lXWAgbWFwcGluZ1xuY29uc3QgbGV2ZWxNYXBwaW5nID0gW1xuXHQnYW5zaScsXG5cdCdhbnNpJyxcblx0J2Fuc2kyNTYnLFxuXHQnYW5zaTE2bSdcbl07XG5cbmNvbnN0IHN0eWxlcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbmNvbnN0IGFwcGx5T3B0aW9ucyA9IChvYmplY3QsIG9wdGlvbnMgPSB7fSkgPT4ge1xuXHRpZiAob3B0aW9ucy5sZXZlbCAmJiAhKE51bWJlci5pc0ludGVnZXIob3B0aW9ucy5sZXZlbCkgJiYgb3B0aW9ucy5sZXZlbCA+PSAwICYmIG9wdGlvbnMubGV2ZWwgPD0gMykpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ1RoZSBgbGV2ZWxgIG9wdGlvbiBzaG91bGQgYmUgYW4gaW50ZWdlciBmcm9tIDAgdG8gMycpO1xuXHR9XG5cblx0Ly8gRGV0ZWN0IGxldmVsIGlmIG5vdCBzZXQgbWFudWFsbHlcblx0Y29uc3QgY29sb3JMZXZlbCA9IHN0ZG91dENvbG9yID8gc3Rkb3V0Q29sb3IubGV2ZWwgOiAwO1xuXHRvYmplY3QubGV2ZWwgPSBvcHRpb25zLmxldmVsID09PSB1bmRlZmluZWQgPyBjb2xvckxldmVsIDogb3B0aW9ucy5sZXZlbDtcbn07XG5cbmNsYXNzIENoYWxrQ2xhc3Mge1xuXHRjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnN0cnVjdG9yLXJldHVyblxuXHRcdHJldHVybiBjaGFsa0ZhY3Rvcnkob3B0aW9ucyk7XG5cdH1cbn1cblxuY29uc3QgY2hhbGtGYWN0b3J5ID0gb3B0aW9ucyA9PiB7XG5cdGNvbnN0IGNoYWxrID0ge307XG5cdGFwcGx5T3B0aW9ucyhjaGFsaywgb3B0aW9ucyk7XG5cblx0Y2hhbGsudGVtcGxhdGUgPSAoLi4uYXJndW1lbnRzXykgPT4gY2hhbGtUYWcoY2hhbGsudGVtcGxhdGUsIC4uLmFyZ3VtZW50c18pO1xuXG5cdE9iamVjdC5zZXRQcm90b3R5cGVPZihjaGFsaywgQ2hhbGsucHJvdG90eXBlKTtcblx0T2JqZWN0LnNldFByb3RvdHlwZU9mKGNoYWxrLnRlbXBsYXRlLCBjaGFsayk7XG5cblx0Y2hhbGsudGVtcGxhdGUuY29uc3RydWN0b3IgPSAoKSA9PiB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdgY2hhbGsuY29uc3RydWN0b3IoKWAgaXMgZGVwcmVjYXRlZC4gVXNlIGBuZXcgY2hhbGsuSW5zdGFuY2UoKWAgaW5zdGVhZC4nKTtcblx0fTtcblxuXHRjaGFsay50ZW1wbGF0ZS5JbnN0YW5jZSA9IENoYWxrQ2xhc3M7XG5cblx0cmV0dXJuIGNoYWxrLnRlbXBsYXRlO1xufTtcblxuZnVuY3Rpb24gQ2hhbGsob3B0aW9ucykge1xuXHRyZXR1cm4gY2hhbGtGYWN0b3J5KG9wdGlvbnMpO1xufVxuXG5mb3IgKGNvbnN0IFtzdHlsZU5hbWUsIHN0eWxlXSBvZiBPYmplY3QuZW50cmllcyhhbnNpU3R5bGVzKSkge1xuXHRzdHlsZXNbc3R5bGVOYW1lXSA9IHtcblx0XHRnZXQoKSB7XG5cdFx0XHRjb25zdCBidWlsZGVyID0gY3JlYXRlQnVpbGRlcih0aGlzLCBjcmVhdGVTdHlsZXIoc3R5bGUub3Blbiwgc3R5bGUuY2xvc2UsIHRoaXMuX3N0eWxlciksIHRoaXMuX2lzRW1wdHkpO1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIHN0eWxlTmFtZSwge3ZhbHVlOiBidWlsZGVyfSk7XG5cdFx0XHRyZXR1cm4gYnVpbGRlcjtcblx0XHR9XG5cdH07XG59XG5cbnN0eWxlcy52aXNpYmxlID0ge1xuXHRnZXQoKSB7XG5cdFx0Y29uc3QgYnVpbGRlciA9IGNyZWF0ZUJ1aWxkZXIodGhpcywgdGhpcy5fc3R5bGVyLCB0cnVlKTtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ3Zpc2libGUnLCB7dmFsdWU6IGJ1aWxkZXJ9KTtcblx0XHRyZXR1cm4gYnVpbGRlcjtcblx0fVxufTtcblxuY29uc3QgdXNlZE1vZGVscyA9IFsncmdiJywgJ2hleCcsICdrZXl3b3JkJywgJ2hzbCcsICdoc3YnLCAnaHdiJywgJ2Fuc2knLCAnYW5zaTI1NiddO1xuXG5mb3IgKGNvbnN0IG1vZGVsIG9mIHVzZWRNb2RlbHMpIHtcblx0c3R5bGVzW21vZGVsXSA9IHtcblx0XHRnZXQoKSB7XG5cdFx0XHRjb25zdCB7bGV2ZWx9ID0gdGhpcztcblx0XHRcdHJldHVybiBmdW5jdGlvbiAoLi4uYXJndW1lbnRzXykge1xuXHRcdFx0XHRjb25zdCBzdHlsZXIgPSBjcmVhdGVTdHlsZXIoYW5zaVN0eWxlcy5jb2xvcltsZXZlbE1hcHBpbmdbbGV2ZWxdXVttb2RlbF0oLi4uYXJndW1lbnRzXyksIGFuc2lTdHlsZXMuY29sb3IuY2xvc2UsIHRoaXMuX3N0eWxlcik7XG5cdFx0XHRcdHJldHVybiBjcmVhdGVCdWlsZGVyKHRoaXMsIHN0eWxlciwgdGhpcy5faXNFbXB0eSk7XG5cdFx0XHR9O1xuXHRcdH1cblx0fTtcbn1cblxuZm9yIChjb25zdCBtb2RlbCBvZiB1c2VkTW9kZWxzKSB7XG5cdGNvbnN0IGJnTW9kZWwgPSAnYmcnICsgbW9kZWxbMF0udG9VcHBlckNhc2UoKSArIG1vZGVsLnNsaWNlKDEpO1xuXHRzdHlsZXNbYmdNb2RlbF0gPSB7XG5cdFx0Z2V0KCkge1xuXHRcdFx0Y29uc3Qge2xldmVsfSA9IHRoaXM7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24gKC4uLmFyZ3VtZW50c18pIHtcblx0XHRcdFx0Y29uc3Qgc3R5bGVyID0gY3JlYXRlU3R5bGVyKGFuc2lTdHlsZXMuYmdDb2xvcltsZXZlbE1hcHBpbmdbbGV2ZWxdXVttb2RlbF0oLi4uYXJndW1lbnRzXyksIGFuc2lTdHlsZXMuYmdDb2xvci5jbG9zZSwgdGhpcy5fc3R5bGVyKTtcblx0XHRcdFx0cmV0dXJuIGNyZWF0ZUJ1aWxkZXIodGhpcywgc3R5bGVyLCB0aGlzLl9pc0VtcHR5KTtcblx0XHRcdH07XG5cdFx0fVxuXHR9O1xufVxuXG5jb25zdCBwcm90byA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKCgpID0+IHt9LCB7XG5cdC4uLnN0eWxlcyxcblx0bGV2ZWw6IHtcblx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdGdldCgpIHtcblx0XHRcdHJldHVybiB0aGlzLl9nZW5lcmF0b3IubGV2ZWw7XG5cdFx0fSxcblx0XHRzZXQobGV2ZWwpIHtcblx0XHRcdHRoaXMuX2dlbmVyYXRvci5sZXZlbCA9IGxldmVsO1xuXHRcdH1cblx0fVxufSk7XG5cbmNvbnN0IGNyZWF0ZVN0eWxlciA9IChvcGVuLCBjbG9zZSwgcGFyZW50KSA9PiB7XG5cdGxldCBvcGVuQWxsO1xuXHRsZXQgY2xvc2VBbGw7XG5cdGlmIChwYXJlbnQgPT09IHVuZGVmaW5lZCkge1xuXHRcdG9wZW5BbGwgPSBvcGVuO1xuXHRcdGNsb3NlQWxsID0gY2xvc2U7XG5cdH0gZWxzZSB7XG5cdFx0b3BlbkFsbCA9IHBhcmVudC5vcGVuQWxsICsgb3Blbjtcblx0XHRjbG9zZUFsbCA9IGNsb3NlICsgcGFyZW50LmNsb3NlQWxsO1xuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRvcGVuLFxuXHRcdGNsb3NlLFxuXHRcdG9wZW5BbGwsXG5cdFx0Y2xvc2VBbGwsXG5cdFx0cGFyZW50XG5cdH07XG59O1xuXG5jb25zdCBjcmVhdGVCdWlsZGVyID0gKHNlbGYsIF9zdHlsZXIsIF9pc0VtcHR5KSA9PiB7XG5cdGNvbnN0IGJ1aWxkZXIgPSAoLi4uYXJndW1lbnRzXykgPT4ge1xuXHRcdGlmIChpc0FycmF5KGFyZ3VtZW50c19bMF0pICYmIGlzQXJyYXkoYXJndW1lbnRzX1swXS5yYXcpKSB7XG5cdFx0XHQvLyBDYWxsZWQgYXMgYSB0ZW1wbGF0ZSBsaXRlcmFsLCBmb3IgZXhhbXBsZTogY2hhbGsucmVkYDIgKyAzID0ge2JvbGQgJHsyKzN9fWBcblx0XHRcdHJldHVybiBhcHBseVN0eWxlKGJ1aWxkZXIsIGNoYWxrVGFnKGJ1aWxkZXIsIC4uLmFyZ3VtZW50c18pKTtcblx0XHR9XG5cblx0XHQvLyBTaW5nbGUgYXJndW1lbnQgaXMgaG90IHBhdGgsIGltcGxpY2l0IGNvZXJjaW9uIGlzIGZhc3RlciB0aGFuIGFueXRoaW5nXG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWltcGxpY2l0LWNvZXJjaW9uXG5cdFx0cmV0dXJuIGFwcGx5U3R5bGUoYnVpbGRlciwgKGFyZ3VtZW50c18ubGVuZ3RoID09PSAxKSA/ICgnJyArIGFyZ3VtZW50c19bMF0pIDogYXJndW1lbnRzXy5qb2luKCcgJykpO1xuXHR9O1xuXG5cdC8vIFdlIGFsdGVyIHRoZSBwcm90b3R5cGUgYmVjYXVzZSB3ZSBtdXN0IHJldHVybiBhIGZ1bmN0aW9uLCBidXQgdGhlcmUgaXNcblx0Ly8gbm8gd2F5IHRvIGNyZWF0ZSBhIGZ1bmN0aW9uIHdpdGggYSBkaWZmZXJlbnQgcHJvdG90eXBlXG5cdE9iamVjdC5zZXRQcm90b3R5cGVPZihidWlsZGVyLCBwcm90byk7XG5cblx0YnVpbGRlci5fZ2VuZXJhdG9yID0gc2VsZjtcblx0YnVpbGRlci5fc3R5bGVyID0gX3N0eWxlcjtcblx0YnVpbGRlci5faXNFbXB0eSA9IF9pc0VtcHR5O1xuXG5cdHJldHVybiBidWlsZGVyO1xufTtcblxuY29uc3QgYXBwbHlTdHlsZSA9IChzZWxmLCBzdHJpbmcpID0+IHtcblx0aWYgKHNlbGYubGV2ZWwgPD0gMCB8fCAhc3RyaW5nKSB7XG5cdFx0cmV0dXJuIHNlbGYuX2lzRW1wdHkgPyAnJyA6IHN0cmluZztcblx0fVxuXG5cdGxldCBzdHlsZXIgPSBzZWxmLl9zdHlsZXI7XG5cblx0aWYgKHN0eWxlciA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIHN0cmluZztcblx0fVxuXG5cdGNvbnN0IHtvcGVuQWxsLCBjbG9zZUFsbH0gPSBzdHlsZXI7XG5cdGlmIChzdHJpbmcuaW5kZXhPZignXFx1MDAxQicpICE9PSAtMSkge1xuXHRcdHdoaWxlIChzdHlsZXIgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Ly8gUmVwbGFjZSBhbnkgaW5zdGFuY2VzIGFscmVhZHkgcHJlc2VudCB3aXRoIGEgcmUtb3BlbmluZyBjb2RlXG5cdFx0XHQvLyBvdGhlcndpc2Ugb25seSB0aGUgcGFydCBvZiB0aGUgc3RyaW5nIHVudGlsIHNhaWQgY2xvc2luZyBjb2RlXG5cdFx0XHQvLyB3aWxsIGJlIGNvbG9yZWQsIGFuZCB0aGUgcmVzdCB3aWxsIHNpbXBseSBiZSAncGxhaW4nLlxuXHRcdFx0c3RyaW5nID0gc3RyaW5nUmVwbGFjZUFsbChzdHJpbmcsIHN0eWxlci5jbG9zZSwgc3R5bGVyLm9wZW4pO1xuXG5cdFx0XHRzdHlsZXIgPSBzdHlsZXIucGFyZW50O1xuXHRcdH1cblx0fVxuXG5cdC8vIFdlIGNhbiBtb3ZlIGJvdGggbmV4dCBhY3Rpb25zIG91dCBvZiBsb29wLCBiZWNhdXNlIHJlbWFpbmluZyBhY3Rpb25zIGluIGxvb3Agd29uJ3QgaGF2ZVxuXHQvLyBhbnkvdmlzaWJsZSBlZmZlY3Qgb24gcGFydHMgd2UgYWRkIGhlcmUuIENsb3NlIHRoZSBzdHlsaW5nIGJlZm9yZSBhIGxpbmVicmVhayBhbmQgcmVvcGVuXG5cdC8vIGFmdGVyIG5leHQgbGluZSB0byBmaXggYSBibGVlZCBpc3N1ZSBvbiBtYWNPUzogaHR0cHM6Ly9naXRodWIuY29tL2NoYWxrL2NoYWxrL3B1bGwvOTJcblx0Y29uc3QgbGZJbmRleCA9IHN0cmluZy5pbmRleE9mKCdcXG4nKTtcblx0aWYgKGxmSW5kZXggIT09IC0xKSB7XG5cdFx0c3RyaW5nID0gc3RyaW5nRW5jYXNlQ1JMRldpdGhGaXJzdEluZGV4KHN0cmluZywgY2xvc2VBbGwsIG9wZW5BbGwsIGxmSW5kZXgpO1xuXHR9XG5cblx0cmV0dXJuIG9wZW5BbGwgKyBzdHJpbmcgKyBjbG9zZUFsbDtcbn07XG5cbmxldCB0ZW1wbGF0ZTtcbmNvbnN0IGNoYWxrVGFnID0gKGNoYWxrLCAuLi5zdHJpbmdzKSA9PiB7XG5cdGNvbnN0IFtmaXJzdFN0cmluZ10gPSBzdHJpbmdzO1xuXG5cdGlmICghaXNBcnJheShmaXJzdFN0cmluZykgfHwgIWlzQXJyYXkoZmlyc3RTdHJpbmcucmF3KSkge1xuXHRcdC8vIElmIGNoYWxrKCkgd2FzIGNhbGxlZCBieSBpdHNlbGYgb3Igd2l0aCBhIHN0cmluZyxcblx0XHQvLyByZXR1cm4gdGhlIHN0cmluZyBpdHNlbGYgYXMgYSBzdHJpbmcuXG5cdFx0cmV0dXJuIHN0cmluZ3Muam9pbignICcpO1xuXHR9XG5cblx0Y29uc3QgYXJndW1lbnRzXyA9IHN0cmluZ3Muc2xpY2UoMSk7XG5cdGNvbnN0IHBhcnRzID0gW2ZpcnN0U3RyaW5nLnJhd1swXV07XG5cblx0Zm9yIChsZXQgaSA9IDE7IGkgPCBmaXJzdFN0cmluZy5sZW5ndGg7IGkrKykge1xuXHRcdHBhcnRzLnB1c2goXG5cdFx0XHRTdHJpbmcoYXJndW1lbnRzX1tpIC0gMV0pLnJlcGxhY2UoL1t7fVxcXFxdL2csICdcXFxcJCYnKSxcblx0XHRcdFN0cmluZyhmaXJzdFN0cmluZy5yYXdbaV0pXG5cdFx0KTtcblx0fVxuXG5cdGlmICh0ZW1wbGF0ZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dGVtcGxhdGUgPSByZXF1aXJlKCcuL3RlbXBsYXRlcycpO1xuXHR9XG5cblx0cmV0dXJuIHRlbXBsYXRlKGNoYWxrLCBwYXJ0cy5qb2luKCcnKSk7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDaGFsay5wcm90b3R5cGUsIHN0eWxlcyk7XG5cbmNvbnN0IGNoYWxrID0gQ2hhbGsoKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuZXctY2FwXG5jaGFsay5zdXBwb3J0c0NvbG9yID0gc3Rkb3V0Q29sb3I7XG5jaGFsay5zdGRlcnIgPSBDaGFsayh7bGV2ZWw6IHN0ZGVyckNvbG9yID8gc3RkZXJyQ29sb3IubGV2ZWwgOiAwfSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbmV3LWNhcFxuY2hhbGsuc3RkZXJyLnN1cHBvcnRzQ29sb3IgPSBzdGRlcnJDb2xvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBjaGFsaztcbiIsICIvLyBzb3VyY2Ugb2YgaW5zcGlyYXRpb246IGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5kcmVzb3JodXMvcmVxdWlyZS1mb29sLXdlYnBhY2tcbnZhciByZXF1aXJlRm9vbFdlYnBhY2sgPSBldmFsKFxuICAgICd0eXBlb2YgcmVxdWlyZSAhPT0gXFwndW5kZWZpbmVkXFwnICcgK1xuICAgICc/IHJlcXVpcmUgJyArXG4gICAgJzogZnVuY3Rpb24gKG1vZHVsZSkgeyB0aHJvdyBuZXcgRXJyb3IoXFwnTW9kdWxlIFwiICsgbW9kdWxlICsgXCIgbm90IGZvdW5kLlxcJykgfSdcbik7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZUZvb2xXZWJwYWNrO1xuIiwgInZhciByZXF1aXJlRm9vbFdlYnBhY2sgPSByZXF1aXJlKCcuL3JlcXVpcmVGb29sV2VicGFjaycpO1xuXG4vLyBzb3VyY2U6IGh0dHBzOi8vZ2l0aHViLmNvbS9mbGV4ZGluZXNoL2Jyb3dzZXItb3Itbm9kZVxudmFyIGlzTm9kZSA9IGZ1bmN0aW9uIChub2RlUHJvY2Vzcykge1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiBub2RlUHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICBub2RlUHJvY2Vzcy52ZXJzaW9ucyAhPSBudWxsICYmXG4gICAgbm9kZVByb2Nlc3MudmVyc2lvbnMubm9kZSAhPSBudWxsXG4gICk7XG59XG5tb2R1bGUuZXhwb3J0cy5pc05vZGUgPSBpc05vZGVcblxuLy8gZGV0ZXJtaW5lcyB0aGUgSmF2YVNjcmlwdCBwbGF0Zm9ybTogYnJvd3NlciBvciBub2RlXG5tb2R1bGUuZXhwb3J0cy5wbGF0Zm9ybSA9IHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiBpc05vZGUocHJvY2VzcylcbiAgPyAnbm9kZSdcbiAgOiAnYnJvd3Nlcic7XG5cbi8vIGRldGVybWluZXMgd2hldGhlciB0aGUgY29kZSBpcyBydW5uaW5nIGluIG1haW4gdGhyZWFkIG9yIG5vdFxuLy8gbm90ZSB0aGF0IGluIG5vZGUuanMgd2UgaGF2ZSB0byBjaGVjayBib3RoIHdvcmtlcl90aHJlYWQgYW5kIGNoaWxkX3Byb2Nlc3NcbnZhciB3b3JrZXJfdGhyZWFkcyA9IHRyeVJlcXVpcmVGb29sV2VicGFjaygnd29ya2VyX3RocmVhZHMnKTtcbm1vZHVsZS5leHBvcnRzLmlzTWFpblRocmVhZCA9IG1vZHVsZS5leHBvcnRzLnBsYXRmb3JtID09PSAnbm9kZSdcbiAgPyAoKCF3b3JrZXJfdGhyZWFkcyB8fCB3b3JrZXJfdGhyZWFkcy5pc01haW5UaHJlYWQpICYmICFwcm9jZXNzLmNvbm5lY3RlZClcbiAgOiB0eXBlb2YgV2luZG93ICE9PSAndW5kZWZpbmVkJztcblxuLy8gZGV0ZXJtaW5lcyB0aGUgbnVtYmVyIG9mIGNwdXMgYXZhaWxhYmxlXG5tb2R1bGUuZXhwb3J0cy5jcHVzID0gbW9kdWxlLmV4cG9ydHMucGxhdGZvcm0gPT09ICdicm93c2VyJ1xuICA/IHNlbGYubmF2aWdhdG9yLmhhcmR3YXJlQ29uY3VycmVuY3lcbiAgOiByZXF1aXJlRm9vbFdlYnBhY2soJ29zJykuY3B1cygpLmxlbmd0aDtcblxuZnVuY3Rpb24gdHJ5UmVxdWlyZUZvb2xXZWJwYWNrIChtb2R1bGUpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gcmVxdWlyZUZvb2xXZWJwYWNrKG1vZHVsZSk7XG4gIH0gY2F0Y2goZXJyKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxufVxuIiwgIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBQcm9taXNlXG4gKlxuICogSW5zcGlyZWQgYnkgaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vUnViYVhhLzg1MDEzNTkgZnJvbSBSdWJhWGEgPHRyYXNoQHJ1YmF4YS5vcmc+XG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaGFuZGxlciAgIENhbGxlZCBhcyBoYW5kbGVyKHJlc29sdmU6IEZ1bmN0aW9uLCByZWplY3Q6IEZ1bmN0aW9uKVxuICogQHBhcmFtIHtQcm9taXNlfSBbcGFyZW50XSAgIFBhcmVudCBwcm9taXNlIGZvciBwcm9wYWdhdGlvbiBvZiBjYW5jZWwgYW5kIHRpbWVvdXRcbiAqL1xuZnVuY3Rpb24gUHJvbWlzZShoYW5kbGVyLCBwYXJlbnQpIHtcbiAgdmFyIG1lID0gdGhpcztcblxuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUHJvbWlzZSkpIHtcbiAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0NvbnN0cnVjdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBvcGVyYXRvcicpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBoYW5kbGVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdGdW5jdGlvbiBwYXJhbWV0ZXIgaGFuZGxlcihyZXNvbHZlLCByZWplY3QpIG1pc3NpbmcnKTtcbiAgfVxuXG4gIHZhciBfb25TdWNjZXNzID0gW107XG4gIHZhciBfb25GYWlsID0gW107XG5cbiAgLy8gc3RhdHVzXG4gIHRoaXMucmVzb2x2ZWQgPSBmYWxzZTtcbiAgdGhpcy5yZWplY3RlZCA9IGZhbHNlO1xuICB0aGlzLnBlbmRpbmcgPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBQcm9jZXNzIG9uU3VjY2VzcyBhbmQgb25GYWlsIGNhbGxiYWNrczogYWRkIHRoZW0gdG8gdGhlIHF1ZXVlLlxuICAgKiBPbmNlIHRoZSBwcm9taXNlIGlzIHJlc29sdmUsIHRoZSBmdW5jdGlvbiBfcHJvbWlzZSBpcyByZXBsYWNlLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBvblN1Y2Nlc3NcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gb25GYWlsXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICB2YXIgX3Byb2Nlc3MgPSBmdW5jdGlvbiAob25TdWNjZXNzLCBvbkZhaWwpIHtcbiAgICBfb25TdWNjZXNzLnB1c2gob25TdWNjZXNzKTtcbiAgICBfb25GYWlsLnB1c2gob25GYWlsKTtcbiAgfTtcblxuICAvKipcbiAgICogQWRkIGFuIG9uU3VjY2VzcyBjYWxsYmFjayBhbmQgb3B0aW9uYWxseSBhbiBvbkZhaWwgY2FsbGJhY2sgdG8gdGhlIFByb21pc2VcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gb25TdWNjZXNzXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtvbkZhaWxdXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfSBwcm9taXNlXG4gICAqL1xuICB0aGlzLnRoZW4gPSBmdW5jdGlvbiAob25TdWNjZXNzLCBvbkZhaWwpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdmFyIHMgPSBvblN1Y2Nlc3MgPyBfdGhlbihvblN1Y2Nlc3MsIHJlc29sdmUsIHJlamVjdCkgOiByZXNvbHZlO1xuICAgICAgdmFyIGYgPSBvbkZhaWwgICAgPyBfdGhlbihvbkZhaWwsICAgIHJlc29sdmUsIHJlamVjdCkgOiByZWplY3Q7XG5cbiAgICAgIF9wcm9jZXNzKHMsIGYpO1xuICAgIH0sIG1lKTtcbiAgfTtcblxuICAvKipcbiAgICogUmVzb2x2ZSB0aGUgcHJvbWlzZVxuICAgKiBAcGFyYW0geyp9IHJlc3VsdFxuICAgKiBAdHlwZSB7RnVuY3Rpb259XG4gICAqL1xuICB2YXIgX3Jlc29sdmUgPSBmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgLy8gdXBkYXRlIHN0YXR1c1xuICAgIG1lLnJlc29sdmVkID0gdHJ1ZTtcbiAgICBtZS5yZWplY3RlZCA9IGZhbHNlO1xuICAgIG1lLnBlbmRpbmcgPSBmYWxzZTtcblxuICAgIF9vblN1Y2Nlc3MuZm9yRWFjaChmdW5jdGlvbiAoZm4pIHtcbiAgICAgIGZuKHJlc3VsdCk7XG4gICAgfSk7XG5cbiAgICBfcHJvY2VzcyA9IGZ1bmN0aW9uIChvblN1Y2Nlc3MsIG9uRmFpbCkge1xuICAgICAgb25TdWNjZXNzKHJlc3VsdCk7XG4gICAgfTtcblxuICAgIF9yZXNvbHZlID0gX3JlamVjdCA9IGZ1bmN0aW9uICgpIHsgfTtcblxuICAgIHJldHVybiBtZTtcbiAgfTtcblxuICAvKipcbiAgICogUmVqZWN0IHRoZSBwcm9taXNlXG4gICAqIEBwYXJhbSB7RXJyb3J9IGVycm9yXG4gICAqIEB0eXBlIHtGdW5jdGlvbn1cbiAgICovXG4gIHZhciBfcmVqZWN0ID0gZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgLy8gdXBkYXRlIHN0YXR1c1xuICAgIG1lLnJlc29sdmVkID0gZmFsc2U7XG4gICAgbWUucmVqZWN0ZWQgPSB0cnVlO1xuICAgIG1lLnBlbmRpbmcgPSBmYWxzZTtcblxuICAgIF9vbkZhaWwuZm9yRWFjaChmdW5jdGlvbiAoZm4pIHtcbiAgICAgIGZuKGVycm9yKTtcbiAgICB9KTtcblxuICAgIF9wcm9jZXNzID0gZnVuY3Rpb24gKG9uU3VjY2Vzcywgb25GYWlsKSB7XG4gICAgICBvbkZhaWwoZXJyb3IpO1xuICAgIH07XG5cbiAgICBfcmVzb2x2ZSA9IF9yZWplY3QgPSBmdW5jdGlvbiAoKSB7IH1cblxuICAgIHJldHVybiBtZTtcbiAgfTtcblxuICAvKipcbiAgICogQ2FuY2VsIHRlIHByb21pc2UuIFRoaXMgd2lsbCByZWplY3QgdGhlIHByb21pc2Ugd2l0aCBhIENhbmNlbGxhdGlvbkVycm9yXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfSBzZWxmXG4gICAqL1xuICB0aGlzLmNhbmNlbCA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAocGFyZW50KSB7XG4gICAgICBwYXJlbnQuY2FuY2VsKCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgX3JlamVjdChuZXcgQ2FuY2VsbGF0aW9uRXJyb3IoKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1lO1xuICB9O1xuXG4gIC8qKlxuICAgKiBTZXQgYSB0aW1lb3V0IGZvciB0aGUgcHJvbWlzZS4gSWYgdGhlIHByb21pc2UgaXMgbm90IHJlc29sdmVkIHdpdGhpblxuICAgKiB0aGUgdGltZSwgdGhlIHByb21pc2Ugd2lsbCBiZSBjYW5jZWxsZWQgYW5kIGEgVGltZW91dEVycm9yIGlzIHRocm93bi5cbiAgICogSWYgdGhlIHByb21pc2UgaXMgcmVzb2x2ZWQgaW4gdGltZSwgdGhlIHRpbWVvdXQgaXMgcmVtb3ZlZC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGRlbGF5ICAgICBEZWxheSBpbiBtaWxsaXNlY29uZHNcbiAgICogQHJldHVybnMge1Byb21pc2V9IHNlbGZcbiAgICovXG4gIHRoaXMudGltZW91dCA9IGZ1bmN0aW9uIChkZWxheSkge1xuICAgIGlmIChwYXJlbnQpIHtcbiAgICAgIHBhcmVudC50aW1lb3V0KGRlbGF5KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB2YXIgdGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3JlamVjdChuZXcgVGltZW91dEVycm9yKCdQcm9taXNlIHRpbWVkIG91dCBhZnRlciAnICsgZGVsYXkgKyAnIG1zJykpO1xuICAgICAgfSwgZGVsYXkpO1xuXG4gICAgICBtZS5hbHdheXMoZnVuY3Rpb24gKCkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1lO1xuICB9O1xuXG4gIC8vIGF0dGFjaCBoYW5kbGVyIHBhc3NpbmcgdGhlIHJlc29sdmUgYW5kIHJlamVjdCBmdW5jdGlvbnNcbiAgaGFuZGxlcihmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgX3Jlc29sdmUocmVzdWx0KTtcbiAgfSwgZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgX3JlamVjdChlcnJvcik7XG4gIH0pO1xufVxuXG4vKipcbiAqIEV4ZWN1dGUgZ2l2ZW4gY2FsbGJhY2ssIHRoZW4gY2FsbCByZXNvbHZlL3JlamVjdCBiYXNlZCBvbiB0aGUgcmV0dXJuZWQgcmVzdWx0XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVzb2x2ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVqZWN0XG4gKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBfdGhlbihjYWxsYmFjaywgcmVzb2x2ZSwgcmVqZWN0KSB7XG4gIHJldHVybiBmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgdHJ5IHtcbiAgICAgIHZhciByZXMgPSBjYWxsYmFjayhyZXN1bHQpO1xuICAgICAgaWYgKHJlcyAmJiB0eXBlb2YgcmVzLnRoZW4gPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHJlc1snY2F0Y2gnXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAvLyBtZXRob2QgcmV0dXJuZWQgYSBwcm9taXNlXG4gICAgICAgIHJlcy50aGVuKHJlc29sdmUsIHJlamVjdCk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgcmVzb2x2ZShyZXMpO1xuICAgICAgfVxuICAgIH1cbiAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJlamVjdChlcnJvcik7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQWRkIGFuIG9uRmFpbCBjYWxsYmFjayB0byB0aGUgUHJvbWlzZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gb25GYWlsXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gcHJvbWlzZVxuICovXG5Qcm9taXNlLnByb3RvdHlwZVsnY2F0Y2gnXSA9IGZ1bmN0aW9uIChvbkZhaWwpIHtcbiAgcmV0dXJuIHRoaXMudGhlbihudWxsLCBvbkZhaWwpO1xufTtcblxuLy8gVE9ETzogYWRkIHN1cHBvcnQgZm9yIFByb21pc2UuY2F0Y2goRXJyb3IsIGNhbGxiYWNrKVxuLy8gVE9ETzogYWRkIHN1cHBvcnQgZm9yIFByb21pc2UuY2F0Y2goRXJyb3IsIEVycm9yLCBjYWxsYmFjaylcblxuLyoqXG4gKiBFeGVjdXRlIGdpdmVuIGNhbGxiYWNrIHdoZW4gdGhlIHByb21pc2UgZWl0aGVyIHJlc29sdmVzIG9yIHJlamVjdHMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICogQHJldHVybnMge1Byb21pc2V9IHByb21pc2VcbiAqL1xuUHJvbWlzZS5wcm90b3R5cGUuYWx3YXlzID0gZnVuY3Rpb24gKGZuKSB7XG4gIHJldHVybiB0aGlzLnRoZW4oZm4sIGZuKTtcbn07XG5cbi8qKlxuICogQ3JlYXRlIGEgcHJvbWlzZSB3aGljaCByZXNvbHZlcyB3aGVuIGFsbCBwcm92aWRlZCBwcm9taXNlcyBhcmUgcmVzb2x2ZWQsXG4gKiBhbmQgZmFpbHMgd2hlbiBhbnkgb2YgdGhlIHByb21pc2VzIHJlc29sdmVzLlxuICogQHBhcmFtIHtQcm9taXNlW119IHByb21pc2VzXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gcHJvbWlzZVxuICovXG5Qcm9taXNlLmFsbCA9IGZ1bmN0aW9uIChwcm9taXNlcyl7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgdmFyIHJlbWFpbmluZyA9IHByb21pc2VzLmxlbmd0aCxcbiAgICAgICAgcmVzdWx0cyA9IFtdO1xuXG4gICAgaWYgKHJlbWFpbmluZykge1xuICAgICAgcHJvbWlzZXMuZm9yRWFjaChmdW5jdGlvbiAocCwgaSkge1xuICAgICAgICBwLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgICAgIHJlc3VsdHNbaV0gPSByZXN1bHQ7XG4gICAgICAgICAgcmVtYWluaW5nLS07XG4gICAgICAgICAgaWYgKHJlbWFpbmluZyA9PSAwKSB7XG4gICAgICAgICAgICByZXNvbHZlKHJlc3VsdHMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgcmVtYWluaW5nID0gMDtcbiAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHJlc29sdmUocmVzdWx0cyk7XG4gICAgfVxuICB9KTtcbn07XG5cbi8qKlxuICogQ3JlYXRlIGEgcHJvbWlzZSByZXNvbHZlclxuICogQHJldHVybnMge3twcm9taXNlOiBQcm9taXNlLCByZXNvbHZlOiBGdW5jdGlvbiwgcmVqZWN0OiBGdW5jdGlvbn19IHJlc29sdmVyXG4gKi9cblByb21pc2UuZGVmZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciByZXNvbHZlciA9IHt9O1xuXG4gIHJlc29sdmVyLnByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgcmVzb2x2ZXIucmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgcmVzb2x2ZXIucmVqZWN0ID0gcmVqZWN0O1xuICB9KTtcblxuICByZXR1cm4gcmVzb2x2ZXI7XG59O1xuXG4vKipcbiAqIENyZWF0ZSBhIGNhbmNlbGxhdGlvbiBlcnJvclxuICogQHBhcmFtIHtTdHJpbmd9IFttZXNzYWdlXVxuICogQGV4dGVuZHMgRXJyb3JcbiAqL1xuZnVuY3Rpb24gQ2FuY2VsbGF0aW9uRXJyb3IobWVzc2FnZSkge1xuICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdwcm9taXNlIGNhbmNlbGxlZCc7XG4gIHRoaXMuc3RhY2sgPSAobmV3IEVycm9yKCkpLnN0YWNrO1xufVxuXG5DYW5jZWxsYXRpb25FcnJvci5wcm90b3R5cGUgPSBuZXcgRXJyb3IoKTtcbkNhbmNlbGxhdGlvbkVycm9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEVycm9yO1xuQ2FuY2VsbGF0aW9uRXJyb3IucHJvdG90eXBlLm5hbWUgPSAnQ2FuY2VsbGF0aW9uRXJyb3InO1xuXG5Qcm9taXNlLkNhbmNlbGxhdGlvbkVycm9yID0gQ2FuY2VsbGF0aW9uRXJyb3I7XG5cblxuLyoqXG4gKiBDcmVhdGUgYSB0aW1lb3V0IGVycm9yXG4gKiBAcGFyYW0ge1N0cmluZ30gW21lc3NhZ2VdXG4gKiBAZXh0ZW5kcyBFcnJvclxuICovXG5mdW5jdGlvbiBUaW1lb3V0RXJyb3IobWVzc2FnZSkge1xuICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICd0aW1lb3V0IGV4Y2VlZGVkJztcbiAgdGhpcy5zdGFjayA9IChuZXcgRXJyb3IoKSkuc3RhY2s7XG59XG5cblRpbWVvdXRFcnJvci5wcm90b3R5cGUgPSBuZXcgRXJyb3IoKTtcblRpbWVvdXRFcnJvci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBFcnJvcjtcblRpbWVvdXRFcnJvci5wcm90b3R5cGUubmFtZSA9ICdUaW1lb3V0RXJyb3InO1xuXG5Qcm9taXNlLlRpbWVvdXRFcnJvciA9IFRpbWVvdXRFcnJvcjtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IFByb21pc2U7XG4iLCAiLyoqXG4gKiBlbWJlZGRlZFdvcmtlci5qcyBjb250YWlucyBhbiBlbWJlZGRlZCB2ZXJzaW9uIG9mIHdvcmtlci5qcy5cbiAqIFRoaXMgZmlsZSBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCxcbiAqIGNoYW5nZXMgbWFkZSBpbiB0aGlzIGZpbGUgd2lsbCBiZSBvdmVyd3JpdHRlbi5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBcIiFmdW5jdGlvbigpe3ZhciBfX3dlYnBhY2tfbW9kdWxlc19fPXs1Nzc6ZnVuY3Rpb24oZSl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUscil7dGhpcy5tZXNzYWdlPWUsdGhpcy50cmFuc2Zlcj1yfX19LF9fd2VicGFja19tb2R1bGVfY2FjaGVfXz17fTtmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKGUpe3ZhciByPV9fd2VicGFja19tb2R1bGVfY2FjaGVfX1tlXTtyZXR1cm4gdm9pZCAwIT09cnx8KHI9X193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW2VdPXtleHBvcnRzOnt9fSxfX3dlYnBhY2tfbW9kdWxlc19fW2VdKHIsci5leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pKSxyLmV4cG9ydHN9dmFyIF9fd2VicGFja19leHBvcnRzX189e307IWZ1bmN0aW9uKCl7dmFyIGV4cG9ydHM9X193ZWJwYWNrX2V4cG9ydHNfXyxfX3dlYnBhY2tfdW51c2VkX2V4cG9ydF9fO2Z1bmN0aW9uIF90eXBlb2YoZSl7cmV0dXJuKF90eXBlb2Y9XFxcImZ1bmN0aW9uXFxcIj09dHlwZW9mIFN5bWJvbCYmXFxcInN5bWJvbFxcXCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmXFxcImZ1bmN0aW9uXFxcIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/XFxcInN5bWJvbFxcXCI6dHlwZW9mIGV9KShlKX12YXIgVHJhbnNmZXI9X193ZWJwYWNrX3JlcXVpcmVfXyg1NzcpLHJlcXVpcmVGb29sV2VicGFjaz1ldmFsKFxcXCJ0eXBlb2YgcmVxdWlyZSAhPT0gJ3VuZGVmaW5lZCcgPyByZXF1aXJlIDogZnVuY3Rpb24gKG1vZHVsZSkgeyB0aHJvdyBuZXcgRXJyb3IoJ01vZHVsZSBcXFxcXFxcIiArIG1vZHVsZSArIFxcXFxcXFwiIG5vdCBmb3VuZC4nKSB9XFxcIiksVEVSTUlOQVRFX01FVEhPRF9JRD1cXFwiX193b3JrZXJwb29sLXRlcm1pbmF0ZV9fXFxcIix3b3JrZXI9e2V4aXQ6ZnVuY3Rpb24oKXt9fSxXb3JrZXJUaHJlYWRzLHBhcmVudFBvcnQ7aWYoXFxcInVuZGVmaW5lZFxcXCIhPXR5cGVvZiBzZWxmJiZcXFwiZnVuY3Rpb25cXFwiPT10eXBlb2YgcG9zdE1lc3NhZ2UmJlxcXCJmdW5jdGlvblxcXCI9PXR5cGVvZiBhZGRFdmVudExpc3RlbmVyKXdvcmtlci5vbj1mdW5jdGlvbihlLHIpe2FkZEV2ZW50TGlzdGVuZXIoZSxmdW5jdGlvbihlKXtyKGUuZGF0YSl9KX0sd29ya2VyLnNlbmQ9ZnVuY3Rpb24oZSl7cG9zdE1lc3NhZ2UoZSl9O2Vsc2V7aWYoXFxcInVuZGVmaW5lZFxcXCI9PXR5cGVvZiBwcm9jZXNzKXRocm93IG5ldyBFcnJvcihcXFwiU2NyaXB0IG11c3QgYmUgZXhlY3V0ZWQgYXMgYSB3b3JrZXJcXFwiKTt0cnl7V29ya2VyVGhyZWFkcz1yZXF1aXJlRm9vbFdlYnBhY2soXFxcIndvcmtlcl90aHJlYWRzXFxcIil9Y2F0Y2goZXJyb3Ipe2lmKFxcXCJvYmplY3RcXFwiIT09X3R5cGVvZihlcnJvcil8fG51bGw9PT1lcnJvcnx8XFxcIk1PRFVMRV9OT1RfRk9VTkRcXFwiIT09ZXJyb3IuY29kZSl0aHJvdyBlcnJvcn1Xb3JrZXJUaHJlYWRzJiZudWxsIT09V29ya2VyVGhyZWFkcy5wYXJlbnRQb3J0PyhwYXJlbnRQb3J0PVdvcmtlclRocmVhZHMucGFyZW50UG9ydCx3b3JrZXIuc2VuZD1wYXJlbnRQb3J0LnBvc3RNZXNzYWdlLmJpbmQocGFyZW50UG9ydCksd29ya2VyLm9uPXBhcmVudFBvcnQub24uYmluZChwYXJlbnRQb3J0KSk6KHdvcmtlci5vbj1wcm9jZXNzLm9uLmJpbmQocHJvY2Vzcyksd29ya2VyLnNlbmQ9ZnVuY3Rpb24oZSl7cHJvY2Vzcy5zZW5kKGUpfSx3b3JrZXIub24oXFxcImRpc2Nvbm5lY3RcXFwiLGZ1bmN0aW9uKCl7cHJvY2Vzcy5leGl0KDEpfSkpLHdvcmtlci5leGl0PXByb2Nlc3MuZXhpdC5iaW5kKHByb2Nlc3MpfWZ1bmN0aW9uIGNvbnZlcnRFcnJvcihvKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMobykucmVkdWNlKGZ1bmN0aW9uKGUscil7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIse3ZhbHVlOm9bcl0sZW51bWVyYWJsZTohMH0pfSx7fSl9ZnVuY3Rpb24gaXNQcm9taXNlKGUpe3JldHVybiBlJiZcXFwiZnVuY3Rpb25cXFwiPT10eXBlb2YgZS50aGVuJiZcXFwiZnVuY3Rpb25cXFwiPT10eXBlb2YgZS5jYXRjaH13b3JrZXIubWV0aG9kcz17fSx3b3JrZXIubWV0aG9kcy5ydW49ZnVuY3Rpb24oZSxyKXtlPW5ldyBGdW5jdGlvbihcXFwicmV0dXJuIChcXFwiK2UrXFxcIikuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcXFwiKTtyZXR1cm4gZS5hcHBseShlLHIpfSx3b3JrZXIubWV0aG9kcy5tZXRob2RzPWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5rZXlzKHdvcmtlci5tZXRob2RzKX0sd29ya2VyLnRlcm1pbmF0aW9uSGFuZGxlcj12b2lkIDAsd29ya2VyLmNsZWFudXBBbmRFeGl0PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIoKXt3b3JrZXIuZXhpdChlKX1pZighd29ya2VyLnRlcm1pbmF0aW9uSGFuZGxlcilyZXR1cm4gcigpO3ZhciBvPXdvcmtlci50ZXJtaW5hdGlvbkhhbmRsZXIoZSk7aXNQcm9taXNlKG8pP28udGhlbihyLHIpOnIoKX07dmFyIGN1cnJlbnRSZXF1ZXN0SWQ9bnVsbDt3b3JrZXIub24oXFxcIm1lc3NhZ2VcXFwiLGZ1bmN0aW9uKHIpe2lmKHI9PT1URVJNSU5BVEVfTUVUSE9EX0lEKXJldHVybiB3b3JrZXIuY2xlYW51cEFuZEV4aXQoMCk7dHJ5e3ZhciBlPXdvcmtlci5tZXRob2RzW3IubWV0aG9kXTtpZighZSl0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gbWV0aG9kIFxcXCInK3IubWV0aG9kKydcXFwiJyk7Y3VycmVudFJlcXVlc3RJZD1yLmlkO3ZhciBvPWUuYXBwbHkoZSxyLnBhcmFtcyk7aXNQcm9taXNlKG8pP28udGhlbihmdW5jdGlvbihlKXtlIGluc3RhbmNlb2YgVHJhbnNmZXI/d29ya2VyLnNlbmQoe2lkOnIuaWQscmVzdWx0OmUubWVzc2FnZSxlcnJvcjpudWxsfSxlLnRyYW5zZmVyKTp3b3JrZXIuc2VuZCh7aWQ6ci5pZCxyZXN1bHQ6ZSxlcnJvcjpudWxsfSksY3VycmVudFJlcXVlc3RJZD1udWxsfSkuY2F0Y2goZnVuY3Rpb24oZSl7d29ya2VyLnNlbmQoe2lkOnIuaWQscmVzdWx0Om51bGwsZXJyb3I6Y29udmVydEVycm9yKGUpfSksY3VycmVudFJlcXVlc3RJZD1udWxsfSk6KG8gaW5zdGFuY2VvZiBUcmFuc2Zlcj93b3JrZXIuc2VuZCh7aWQ6ci5pZCxyZXN1bHQ6by5tZXNzYWdlLGVycm9yOm51bGx9LG8udHJhbnNmZXIpOndvcmtlci5zZW5kKHtpZDpyLmlkLHJlc3VsdDpvLGVycm9yOm51bGx9KSxjdXJyZW50UmVxdWVzdElkPW51bGwpfWNhdGNoKGUpe3dvcmtlci5zZW5kKHtpZDpyLmlkLHJlc3VsdDpudWxsLGVycm9yOmNvbnZlcnRFcnJvcihlKX0pfX0pLHdvcmtlci5yZWdpc3Rlcj1mdW5jdGlvbihlLHIpe2lmKGUpZm9yKHZhciBvIGluIGUpZS5oYXNPd25Qcm9wZXJ0eShvKSYmKHdvcmtlci5tZXRob2RzW29dPWVbb10pO3ImJih3b3JrZXIudGVybWluYXRpb25IYW5kbGVyPXIub25UZXJtaW5hdGUpLHdvcmtlci5zZW5kKFxcXCJyZWFkeVxcXCIpfSx3b3JrZXIuZW1pdD1mdW5jdGlvbihlKXtjdXJyZW50UmVxdWVzdElkJiYoZSBpbnN0YW5jZW9mIFRyYW5zZmVyP3dvcmtlci5zZW5kKHtpZDpjdXJyZW50UmVxdWVzdElkLGlzRXZlbnQ6ITAscGF5bG9hZDplLm1lc3NhZ2V9LGUudHJhbnNmZXIpOndvcmtlci5zZW5kKHtpZDpjdXJyZW50UmVxdWVzdElkLGlzRXZlbnQ6ITAscGF5bG9hZDplfSkpfSxfX3dlYnBhY2tfdW51c2VkX2V4cG9ydF9fPXdvcmtlci5yZWdpc3Rlcix3b3JrZXIuZW1pdH0oKX0oKTtcIjtcbiIsICIndXNlIHN0cmljdCc7XG5cbnZhciBQcm9taXNlID0gcmVxdWlyZSgnLi9Qcm9taXNlJyk7XG52YXIgZW52aXJvbm1lbnQgPSByZXF1aXJlKCcuL2Vudmlyb25tZW50Jyk7XG52YXIgcmVxdWlyZUZvb2xXZWJwYWNrID0gcmVxdWlyZSgnLi9yZXF1aXJlRm9vbFdlYnBhY2snKTtcblxuLyoqXG4gKiBTcGVjaWFsIG1lc3NhZ2Ugc2VudCBieSBwYXJlbnQgd2hpY2ggY2F1c2VzIGEgY2hpbGQgcHJvY2VzcyB3b3JrZXIgdG8gdGVybWluYXRlIGl0c2VsZi5cbiAqIE5vdCBhIFwibWVzc2FnZSBvYmplY3RcIjsgdGhpcyBzdHJpbmcgaXMgdGhlIGVudGlyZSBtZXNzYWdlLlxuICovXG52YXIgVEVSTUlOQVRFX01FVEhPRF9JRCA9ICdfX3dvcmtlcnBvb2wtdGVybWluYXRlX18nO1xuXG5mdW5jdGlvbiBlbnN1cmVXb3JrZXJUaHJlYWRzKCkge1xuICB2YXIgV29ya2VyVGhyZWFkcyA9IHRyeVJlcXVpcmVXb3JrZXJUaHJlYWRzKClcbiAgaWYgKCFXb3JrZXJUaHJlYWRzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdXb3JrZXJQb29sOiB3b3JrZXJUeXBlID0gXFwndGhyZWFkXFwnIGlzIG5vdCBzdXBwb3J0ZWQsIE5vZGUgPj0gMTEuNy4wIHJlcXVpcmVkJylcbiAgfVxuXG4gIHJldHVybiBXb3JrZXJUaHJlYWRzO1xufVxuXG4vLyBjaGVjayB3aGV0aGVyIFdvcmtlciBpcyBzdXBwb3J0ZWQgYnkgdGhlIGJyb3dzZXJcbmZ1bmN0aW9uIGVuc3VyZVdlYldvcmtlcigpIHtcbiAgLy8gV29ya2Fyb3VuZCBmb3IgYSBidWcgaW4gUGhhbnRvbUpTIChPciBRdFdlYmtpdCk6IGh0dHBzOi8vZ2l0aHViLmNvbS9hcml5YS9waGFudG9tanMvaXNzdWVzLzE0NTM0XG4gIGlmICh0eXBlb2YgV29ya2VyICE9PSAnZnVuY3Rpb24nICYmICh0eXBlb2YgV29ya2VyICE9PSAnb2JqZWN0JyB8fCB0eXBlb2YgV29ya2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciAhPT0gJ2Z1bmN0aW9uJykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1dvcmtlclBvb2w6IFdlYiBXb3JrZXJzIG5vdCBzdXBwb3J0ZWQnKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0cnlSZXF1aXJlV29ya2VyVGhyZWFkcygpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gcmVxdWlyZUZvb2xXZWJwYWNrKCd3b3JrZXJfdGhyZWFkcycpO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgaWYgKHR5cGVvZiBlcnJvciA9PT0gJ29iamVjdCcgJiYgZXJyb3IgIT09IG51bGwgJiYgZXJyb3IuY29kZSA9PT0gJ01PRFVMRV9OT1RfRk9VTkQnKSB7XG4gICAgICAvLyBubyB3b3JrZXJfdGhyZWFkcyBhdmFpbGFibGUgKG9sZCB2ZXJzaW9uIG9mIG5vZGUuanMpXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG59XG5cbi8vIGdldCB0aGUgZGVmYXVsdCB3b3JrZXIgc2NyaXB0XG5mdW5jdGlvbiBnZXREZWZhdWx0V29ya2VyKCkge1xuICBpZiAoZW52aXJvbm1lbnQucGxhdGZvcm0gPT09ICdicm93c2VyJykge1xuICAgIC8vIHRlc3Qgd2hldGhlciB0aGUgYnJvd3NlciBzdXBwb3J0cyBhbGwgZmVhdHVyZXMgdGhhdCB3ZSBuZWVkXG4gICAgaWYgKHR5cGVvZiBCbG9iID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdCbG9iIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGJyb3dzZXInKTtcbiAgICB9XG4gICAgaWYgKCF3aW5kb3cuVVJMIHx8IHR5cGVvZiB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVUkwuY3JlYXRlT2JqZWN0VVJMIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGJyb3dzZXInKTtcbiAgICB9XG5cbiAgICAvLyB1c2UgZW1iZWRkZWQgd29ya2VyLmpzXG4gICAgdmFyIGJsb2IgPSBuZXcgQmxvYihbcmVxdWlyZSgnLi9nZW5lcmF0ZWQvZW1iZWRkZWRXb3JrZXInKV0sIHt0eXBlOiAndGV4dC9qYXZhc2NyaXB0J30pO1xuICAgIHJldHVybiB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcbiAgfVxuICBlbHNlIHtcbiAgICAvLyB1c2UgZXh0ZXJuYWwgd29ya2VyLmpzIGluIGN1cnJlbnQgZGlyZWN0b3J5XG4gICAgcmV0dXJuIF9fZGlybmFtZSArICcvd29ya2VyLmpzJztcbiAgfVxufVxuXG5mdW5jdGlvbiBzZXR1cFdvcmtlcihzY3JpcHQsIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMud29ya2VyVHlwZSA9PT0gJ3dlYicpIHsgLy8gYnJvd3NlciBvbmx5XG4gICAgZW5zdXJlV2ViV29ya2VyKCk7XG4gICAgcmV0dXJuIHNldHVwQnJvd3NlcldvcmtlcihzY3JpcHQsIG9wdGlvbnMud29ya2VyT3B0cywgV29ya2VyKTtcbiAgfSBlbHNlIGlmIChvcHRpb25zLndvcmtlclR5cGUgPT09ICd0aHJlYWQnKSB7IC8vIG5vZGUuanMgb25seVxuICAgIFdvcmtlclRocmVhZHMgPSBlbnN1cmVXb3JrZXJUaHJlYWRzKCk7XG4gICAgcmV0dXJuIHNldHVwV29ya2VyVGhyZWFkV29ya2VyKHNjcmlwdCwgV29ya2VyVGhyZWFkcywgb3B0aW9ucy53b3JrZXJUaHJlYWRPcHRzKTtcbiAgfSBlbHNlIGlmIChvcHRpb25zLndvcmtlclR5cGUgPT09ICdwcm9jZXNzJyB8fCAhb3B0aW9ucy53b3JrZXJUeXBlKSB7IC8vIG5vZGUuanMgb25seVxuICAgIHJldHVybiBzZXR1cFByb2Nlc3NXb3JrZXIoc2NyaXB0LCByZXNvbHZlRm9ya09wdGlvbnMob3B0aW9ucyksIHJlcXVpcmVGb29sV2VicGFjaygnY2hpbGRfcHJvY2VzcycpKTtcbiAgfSBlbHNlIHsgLy8gb3B0aW9ucy53b3JrZXJUeXBlID09PSAnYXV0bycgb3IgdW5kZWZpbmVkXG4gICAgaWYgKGVudmlyb25tZW50LnBsYXRmb3JtID09PSAnYnJvd3NlcicpIHtcbiAgICAgIGVuc3VyZVdlYldvcmtlcigpO1xuICAgICAgcmV0dXJuIHNldHVwQnJvd3NlcldvcmtlcihzY3JpcHQsIG9wdGlvbnMud29ya2VyT3B0cywgV29ya2VyKTtcbiAgICB9XG4gICAgZWxzZSB7IC8vIGVudmlyb25tZW50LnBsYXRmb3JtID09PSAnbm9kZSdcbiAgICAgIHZhciBXb3JrZXJUaHJlYWRzID0gdHJ5UmVxdWlyZVdvcmtlclRocmVhZHMoKTtcbiAgICAgIGlmIChXb3JrZXJUaHJlYWRzKSB7XG4gICAgICAgIHJldHVybiBzZXR1cFdvcmtlclRocmVhZFdvcmtlcihzY3JpcHQsIFdvcmtlclRocmVhZHMsIG9wdGlvbnMud29ya2VyVGhyZWFkT3B0cyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gc2V0dXBQcm9jZXNzV29ya2VyKHNjcmlwdCwgcmVzb2x2ZUZvcmtPcHRpb25zKG9wdGlvbnMpLCByZXF1aXJlRm9vbFdlYnBhY2soJ2NoaWxkX3Byb2Nlc3MnKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHNldHVwQnJvd3NlcldvcmtlcihzY3JpcHQsIHdvcmtlck9wdHMsIFdvcmtlcikge1xuICAvLyBjcmVhdGUgdGhlIHdlYiB3b3JrZXJcbiAgdmFyIHdvcmtlciA9IG5ldyBXb3JrZXIoc2NyaXB0LCB3b3JrZXJPcHRzKTtcblxuICB3b3JrZXIuaXNCcm93c2VyV29ya2VyID0gdHJ1ZTtcbiAgLy8gYWRkIG5vZGUuanMgQVBJIHRvIHRoZSB3ZWIgd29ya2VyXG4gIHdvcmtlci5vbiA9IGZ1bmN0aW9uIChldmVudCwgY2FsbGJhY2spIHtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIGZ1bmN0aW9uIChtZXNzYWdlKSB7XG4gICAgICBjYWxsYmFjayhtZXNzYWdlLmRhdGEpO1xuICAgIH0pO1xuICB9O1xuICB3b3JrZXIuc2VuZCA9IGZ1bmN0aW9uIChtZXNzYWdlLCB0cmFuc2Zlcikge1xuICAgIHRoaXMucG9zdE1lc3NhZ2UobWVzc2FnZSwgdHJhbnNmZXIpO1xuICB9O1xuICByZXR1cm4gd29ya2VyO1xufVxuXG5mdW5jdGlvbiBzZXR1cFdvcmtlclRocmVhZFdvcmtlcihzY3JpcHQsIFdvcmtlclRocmVhZHMsIHdvcmtlclRocmVhZE9wdGlvbnMpIHtcbiAgdmFyIHdvcmtlciA9IG5ldyBXb3JrZXJUaHJlYWRzLldvcmtlcihzY3JpcHQsIHtcbiAgICBzdGRvdXQ6IGZhbHNlLCAvLyBhdXRvbWF0aWNhbGx5IHBpcGUgd29ya2VyLlNURE9VVCB0byBwcm9jZXNzLlNURE9VVFxuICAgIHN0ZGVycjogZmFsc2UsICAvLyBhdXRvbWF0aWNhbGx5IHBpcGUgd29ya2VyLlNUREVSUiB0byBwcm9jZXNzLlNUREVSUlxuICAgIC4uLndvcmtlclRocmVhZE9wdGlvbnNcbiAgfSk7XG4gIHdvcmtlci5pc1dvcmtlclRocmVhZCA9IHRydWU7XG4gIHdvcmtlci5zZW5kID0gZnVuY3Rpb24obWVzc2FnZSwgdHJhbnNmZXIpIHtcbiAgICB0aGlzLnBvc3RNZXNzYWdlKG1lc3NhZ2UsIHRyYW5zZmVyKTtcbiAgfTtcblxuICB3b3JrZXIua2lsbCA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMudGVybWluYXRlKCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG5cbiAgd29ya2VyLmRpc2Nvbm5lY3QgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnRlcm1pbmF0ZSgpO1xuICB9O1xuXG4gIHJldHVybiB3b3JrZXI7XG59XG5cbmZ1bmN0aW9uIHNldHVwUHJvY2Vzc1dvcmtlcihzY3JpcHQsIG9wdGlvbnMsIGNoaWxkX3Byb2Nlc3MpIHtcbiAgLy8gbm8gV29ya2VyVGhyZWFkcywgZmFsbGJhY2sgdG8gc3ViLXByb2Nlc3MgYmFzZWQgd29ya2Vyc1xuICB2YXIgd29ya2VyID0gY2hpbGRfcHJvY2Vzcy5mb3JrKFxuICAgIHNjcmlwdCxcbiAgICBvcHRpb25zLmZvcmtBcmdzLFxuICAgIG9wdGlvbnMuZm9ya09wdHNcbiAgKTtcblxuICAvLyBpZ25vcmUgdHJhbnNmZXIgYXJndW1lbnQgc2luY2UgaXQgaXMgbm90IHN1cHBvcnRlZCBieSBwcm9jZXNzXG4gIHZhciBzZW5kID0gd29ya2VyLnNlbmQ7XG4gIHdvcmtlci5zZW5kID0gZnVuY3Rpb24gKG1lc3NhZ2UpIHtcbiAgICByZXR1cm4gc2VuZC5jYWxsKHdvcmtlciwgbWVzc2FnZSk7XG4gIH07XG5cbiAgd29ya2VyLmlzQ2hpbGRQcm9jZXNzID0gdHJ1ZTtcbiAgcmV0dXJuIHdvcmtlcjtcbn1cblxuLy8gYWRkIGRlYnVnIGZsYWdzIHRvIGNoaWxkIHByb2Nlc3NlcyBpZiB0aGUgbm9kZSBpbnNwZWN0b3IgaXMgYWN0aXZlXG5mdW5jdGlvbiByZXNvbHZlRm9ya09wdGlvbnMob3B0cykge1xuICBvcHRzID0gb3B0cyB8fCB7fTtcblxuICB2YXIgcHJvY2Vzc0V4ZWNBcmd2ID0gcHJvY2Vzcy5leGVjQXJndi5qb2luKCcgJyk7XG4gIHZhciBpbnNwZWN0b3JBY3RpdmUgPSBwcm9jZXNzRXhlY0FyZ3YuaW5kZXhPZignLS1pbnNwZWN0JykgIT09IC0xO1xuICB2YXIgZGVidWdCcmsgPSBwcm9jZXNzRXhlY0FyZ3YuaW5kZXhPZignLS1kZWJ1Zy1icmsnKSAhPT0gLTE7XG5cbiAgdmFyIGV4ZWNBcmd2ID0gW107XG4gIGlmIChpbnNwZWN0b3JBY3RpdmUpIHtcbiAgICBleGVjQXJndi5wdXNoKCctLWluc3BlY3Q9JyArIG9wdHMuZGVidWdQb3J0KTtcblxuICAgIGlmIChkZWJ1Z0Jyaykge1xuICAgICAgZXhlY0FyZ3YucHVzaCgnLS1kZWJ1Zy1icmsnKTtcbiAgICB9XG4gIH1cblxuICBwcm9jZXNzLmV4ZWNBcmd2LmZvckVhY2goZnVuY3Rpb24oYXJnKSB7XG4gICAgaWYgKGFyZy5pbmRleE9mKCctLW1heC1vbGQtc3BhY2Utc2l6ZScpID4gLTEpIHtcbiAgICAgIGV4ZWNBcmd2LnB1c2goYXJnKVxuICAgIH1cbiAgfSlcblxuICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgb3B0cywge1xuICAgIGZvcmtBcmdzOiBvcHRzLmZvcmtBcmdzLFxuICAgIGZvcmtPcHRzOiBPYmplY3QuYXNzaWduKHt9LCBvcHRzLmZvcmtPcHRzLCB7XG4gICAgICBleGVjQXJndjogKG9wdHMuZm9ya09wdHMgJiYgb3B0cy5mb3JrT3B0cy5leGVjQXJndiB8fCBbXSlcbiAgICAgIC5jb25jYXQoZXhlY0FyZ3YpXG4gICAgfSlcbiAgfSk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYSBzZXJpYWxpemVkIGVycm9yIHRvIEVycm9yXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqIEVycm9yIHRoYXQgaGFzIGJlZW4gc2VyaWFsaXplZCBhbmQgcGFyc2VkIHRvIG9iamVjdFxuICogQHJldHVybiB7RXJyb3J9IFRoZSBlcXVpdmFsZW50IEVycm9yLlxuICovXG5mdW5jdGlvbiBvYmplY3RUb0Vycm9yIChvYmopIHtcbiAgdmFyIHRlbXAgPSBuZXcgRXJyb3IoJycpXG4gIHZhciBwcm9wcyA9IE9iamVjdC5rZXlzKG9iailcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgdGVtcFtwcm9wc1tpXV0gPSBvYmpbcHJvcHNbaV1dXG4gIH1cblxuICByZXR1cm4gdGVtcFxufVxuXG4vKipcbiAqIEEgV29ya2VySGFuZGxlciBjb250cm9scyBhIHNpbmdsZSB3b3JrZXIuIFRoaXMgd29ya2VyIGNhbiBiZSBhIGNoaWxkIHByb2Nlc3NcbiAqIG9uIG5vZGUuanMgb3IgYSBXZWJXb3JrZXIgaW4gYSBicm93c2VyIGVudmlyb25tZW50LlxuICogQHBhcmFtIHtTdHJpbmd9IFtzY3JpcHRdIElmIG5vIHNjcmlwdCBpcyBwcm92aWRlZCwgYSBkZWZhdWx0IHdvcmtlciB3aXRoIGFcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBydW4gd2lsbCBiZSBjcmVhdGVkLlxuICogQHBhcmFtIHtXb3JrZXJQb29sT3B0aW9uc30gX29wdGlvbnMgU2VlIGRvY3NcbiAqIEBjb25zdHJ1Y3RvclxuICovXG5mdW5jdGlvbiBXb3JrZXJIYW5kbGVyKHNjcmlwdCwgX29wdGlvbnMpIHtcbiAgdmFyIG1lID0gdGhpcztcbiAgdmFyIG9wdGlvbnMgPSBfb3B0aW9ucyB8fCB7fTtcblxuICB0aGlzLnNjcmlwdCA9IHNjcmlwdCB8fCBnZXREZWZhdWx0V29ya2VyKCk7XG4gIHRoaXMud29ya2VyID0gc2V0dXBXb3JrZXIodGhpcy5zY3JpcHQsIG9wdGlvbnMpO1xuICB0aGlzLmRlYnVnUG9ydCA9IG9wdGlvbnMuZGVidWdQb3J0O1xuICB0aGlzLmZvcmtPcHRzID0gb3B0aW9ucy5mb3JrT3B0cztcbiAgdGhpcy5mb3JrQXJncyA9IG9wdGlvbnMuZm9ya0FyZ3M7XG4gIHRoaXMud29ya2VyT3B0cyA9IG9wdGlvbnMud29ya2VyT3B0cztcbiAgdGhpcy53b3JrZXJUaHJlYWRPcHRzID0gb3B0aW9ucy53b3JrZXJUaHJlYWRPcHRzXG4gIHRoaXMud29ya2VyVGVybWluYXRlVGltZW91dCA9IG9wdGlvbnMud29ya2VyVGVybWluYXRlVGltZW91dDtcblxuICAvLyBUaGUgcmVhZHkgbWVzc2FnZSBpcyBvbmx5IHNlbnQgaWYgdGhlIHdvcmtlci5hZGQgbWV0aG9kIGlzIGNhbGxlZCAoQW5kIHRoZSBkZWZhdWx0IHNjcmlwdCBpcyBub3QgdXNlZClcbiAgaWYgKCFzY3JpcHQpIHtcbiAgICB0aGlzLndvcmtlci5yZWFkeSA9IHRydWU7XG4gIH1cblxuICAvLyBxdWV1ZSBmb3IgcmVxdWVzdHMgdGhhdCBhcmUgcmVjZWl2ZWQgYmVmb3JlIHRoZSB3b3JrZXIgaXMgcmVhZHlcbiAgdGhpcy5yZXF1ZXN0UXVldWUgPSBbXTtcbiAgdGhpcy53b3JrZXIub24oJ21lc3NhZ2UnLCBmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICBpZiAobWUudGVybWluYXRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHJlc3BvbnNlID09PSAnc3RyaW5nJyAmJiByZXNwb25zZSA9PT0gJ3JlYWR5Jykge1xuICAgICAgbWUud29ya2VyLnJlYWR5ID0gdHJ1ZTtcbiAgICAgIGRpc3BhdGNoUXVldWVkUmVxdWVzdHMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZmluZCB0aGUgdGFzayBmcm9tIHRoZSBwcm9jZXNzaW5nIHF1ZXVlLCBhbmQgcnVuIHRoZSB0YXNrcyBjYWxsYmFja1xuICAgICAgdmFyIGlkID0gcmVzcG9uc2UuaWQ7XG4gICAgICB2YXIgdGFzayA9IG1lLnByb2Nlc3NpbmdbaWRdO1xuICAgICAgaWYgKHRhc2sgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAocmVzcG9uc2UuaXNFdmVudCkge1xuICAgICAgICAgIGlmICh0YXNrLm9wdGlvbnMgJiYgdHlwZW9mIHRhc2sub3B0aW9ucy5vbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGFzay5vcHRpb25zLm9uKHJlc3BvbnNlLnBheWxvYWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyByZW1vdmUgdGhlIHRhc2sgZnJvbSB0aGUgcXVldWVcbiAgICAgICAgICBkZWxldGUgbWUucHJvY2Vzc2luZ1tpZF07XG5cbiAgICAgICAgICAvLyB0ZXN0IGlmIHdlIG5lZWQgdG8gdGVybWluYXRlXG4gICAgICAgICAgaWYgKG1lLnRlcm1pbmF0aW5nID09PSB0cnVlKSB7XG4gICAgICAgICAgICAvLyBjb21wbGV0ZSB3b3JrZXIgdGVybWluYXRpb24gaWYgYWxsIHRhc2tzIGFyZSBmaW5pc2hlZFxuICAgICAgICAgICAgbWUudGVybWluYXRlKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gcmVzb2x2ZSB0aGUgdGFzaydzIHByb21pc2VcbiAgICAgICAgICBpZiAocmVzcG9uc2UuZXJyb3IpIHtcbiAgICAgICAgICAgIHRhc2sucmVzb2x2ZXIucmVqZWN0KG9iamVjdFRvRXJyb3IocmVzcG9uc2UuZXJyb3IpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0YXNrLnJlc29sdmVyLnJlc29sdmUocmVzcG9uc2UucmVzdWx0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIC8vIHJlamVjdCBhbGwgcnVubmluZyB0YXNrcyBvbiB3b3JrZXIgZXJyb3JcbiAgZnVuY3Rpb24gb25FcnJvcihlcnJvcikge1xuICAgIG1lLnRlcm1pbmF0ZWQgPSB0cnVlO1xuXG4gICAgZm9yICh2YXIgaWQgaW4gbWUucHJvY2Vzc2luZykge1xuICAgICAgaWYgKG1lLnByb2Nlc3NpbmdbaWRdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbWUucHJvY2Vzc2luZ1tpZF0ucmVzb2x2ZXIucmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG4gICAgbWUucHJvY2Vzc2luZyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIH1cblxuICAvLyBzZW5kIGFsbCBxdWV1ZWQgcmVxdWVzdHMgdG8gd29ya2VyXG4gIGZ1bmN0aW9uIGRpc3BhdGNoUXVldWVkUmVxdWVzdHMoKVxuICB7XG4gICAgZm9yKGNvbnN0IHJlcXVlc3Qgb2YgbWUucmVxdWVzdFF1ZXVlLnNwbGljZSgwKSkge1xuICAgICAgbWUud29ya2VyLnNlbmQocmVxdWVzdC5tZXNzYWdlLCByZXF1ZXN0LnRyYW5zZmVyKTtcbiAgICB9XG4gIH1cblxuICB2YXIgd29ya2VyID0gdGhpcy53b3JrZXI7XG4gIC8vIGxpc3RlbiBmb3Igd29ya2VyIG1lc3NhZ2VzIGVycm9yIGFuZCBleGl0XG4gIHRoaXMud29ya2VyLm9uKCdlcnJvcicsIG9uRXJyb3IpO1xuICB0aGlzLndvcmtlci5vbignZXhpdCcsIGZ1bmN0aW9uIChleGl0Q29kZSwgc2lnbmFsQ29kZSkge1xuICAgIHZhciBtZXNzYWdlID0gJ1dvcmtlcnBvb2wgV29ya2VyIHRlcm1pbmF0ZWQgVW5leHBlY3RlZGx5XFxuJztcblxuICAgIG1lc3NhZ2UgKz0gJyAgICBleGl0Q29kZTogYCcgKyBleGl0Q29kZSArICdgXFxuJztcbiAgICBtZXNzYWdlICs9ICcgICAgc2lnbmFsQ29kZTogYCcgKyBzaWduYWxDb2RlICsgJ2BcXG4nO1xuXG4gICAgbWVzc2FnZSArPSAnICAgIHdvcmtlcnBvb2wuc2NyaXB0OiBgJyArICBtZS5zY3JpcHQgKyAnYFxcbic7XG4gICAgbWVzc2FnZSArPSAnICAgIHNwYXduQXJnczogYCcgKyAgd29ya2VyLnNwYXduYXJncyArICdgXFxuJztcbiAgICBtZXNzYWdlICs9ICcgICAgc3Bhd25maWxlOiBgJyArIHdvcmtlci5zcGF3bmZpbGUgKyAnYFxcbidcblxuICAgIG1lc3NhZ2UgKz0gJyAgICBzdGRvdXQ6IGAnICsgd29ya2VyLnN0ZG91dCArICdgXFxuJ1xuICAgIG1lc3NhZ2UgKz0gJyAgICBzdGRlcnI6IGAnICsgd29ya2VyLnN0ZGVyciArICdgXFxuJ1xuXG4gICAgb25FcnJvcihuZXcgRXJyb3IobWVzc2FnZSkpO1xuICB9KTtcblxuICB0aGlzLnByb2Nlc3NpbmcgPSBPYmplY3QuY3JlYXRlKG51bGwpOyAvLyBxdWV1ZSB3aXRoIHRhc2tzIGN1cnJlbnRseSBpbiBwcm9ncmVzc1xuXG4gIHRoaXMudGVybWluYXRpbmcgPSBmYWxzZTtcbiAgdGhpcy50ZXJtaW5hdGVkID0gZmFsc2U7XG4gIHRoaXMuY2xlYW5pbmcgPSBmYWxzZTtcbiAgdGhpcy50ZXJtaW5hdGlvbkhhbmRsZXIgPSBudWxsO1xuICB0aGlzLmxhc3RJZCA9IDA7XG59XG5cbi8qKlxuICogR2V0IGEgbGlzdCB3aXRoIG1ldGhvZHMgYXZhaWxhYmxlIG9uIHRoZSB3b3JrZXIuXG4gKiBAcmV0dXJuIHtQcm9taXNlLjxTdHJpbmdbXSwgRXJyb3I+fSBtZXRob2RzXG4gKi9cbldvcmtlckhhbmRsZXIucHJvdG90eXBlLm1ldGhvZHMgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmV4ZWMoJ21ldGhvZHMnKTtcbn07XG5cbi8qKlxuICogRXhlY3V0ZSBhIG1ldGhvZCB3aXRoIGdpdmVuIHBhcmFtZXRlcnMgb24gdGhlIHdvcmtlclxuICogQHBhcmFtIHtTdHJpbmd9IG1ldGhvZFxuICogQHBhcmFtIHtBcnJheX0gW3BhcmFtc11cbiAqIEBwYXJhbSB7e3Jlc29sdmU6IEZ1bmN0aW9uLCByZWplY3Q6IEZ1bmN0aW9ufX0gW3Jlc29sdmVyXVxuICogQHBhcmFtIHtFeGVjT3B0aW9uc30gIFtvcHRpb25zXVxuICogQHJldHVybiB7UHJvbWlzZS48KiwgRXJyb3I+fSByZXN1bHRcbiAqL1xuV29ya2VySGFuZGxlci5wcm90b3R5cGUuZXhlYyA9IGZ1bmN0aW9uKG1ldGhvZCwgcGFyYW1zLCByZXNvbHZlciwgb3B0aW9ucykge1xuICBpZiAoIXJlc29sdmVyKSB7XG4gICAgcmVzb2x2ZXIgPSBQcm9taXNlLmRlZmVyKCk7XG4gIH1cblxuICAvLyBnZW5lcmF0ZSBhIHVuaXF1ZSBpZCBmb3IgdGhlIHRhc2tcbiAgdmFyIGlkID0gKyt0aGlzLmxhc3RJZDtcblxuICAvLyByZWdpc3RlciBhIG5ldyB0YXNrIGFzIGJlaW5nIGluIHByb2dyZXNzXG4gIHRoaXMucHJvY2Vzc2luZ1tpZF0gPSB7XG4gICAgaWQ6IGlkLFxuICAgIHJlc29sdmVyOiByZXNvbHZlcixcbiAgICBvcHRpb25zOiBvcHRpb25zXG4gIH07XG5cbiAgLy8gYnVpbGQgYSBKU09OLVJQQyByZXF1ZXN0XG4gIHZhciByZXF1ZXN0ID0ge1xuICAgIG1lc3NhZ2U6IHtcbiAgICAgIGlkOiBpZCxcbiAgICAgIG1ldGhvZDogbWV0aG9kLFxuICAgICAgcGFyYW1zOiBwYXJhbXNcbiAgICB9LFxuICAgIHRyYW5zZmVyOiBvcHRpb25zICYmIG9wdGlvbnMudHJhbnNmZXJcbiAgfTtcblxuICBpZiAodGhpcy50ZXJtaW5hdGVkKSB7XG4gICAgcmVzb2x2ZXIucmVqZWN0KG5ldyBFcnJvcignV29ya2VyIGlzIHRlcm1pbmF0ZWQnKSk7XG4gIH0gZWxzZSBpZiAodGhpcy53b3JrZXIucmVhZHkpIHtcbiAgICAvLyBzZW5kIHRoZSByZXF1ZXN0IHRvIHRoZSB3b3JrZXJcbiAgICB0aGlzLndvcmtlci5zZW5kKHJlcXVlc3QubWVzc2FnZSwgcmVxdWVzdC50cmFuc2Zlcik7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5yZXF1ZXN0UXVldWUucHVzaChyZXF1ZXN0KTtcbiAgfVxuXG4gIC8vIG9uIGNhbmNlbGxhdGlvbiwgZm9yY2UgdGhlIHdvcmtlciB0byB0ZXJtaW5hdGVcbiAgdmFyIG1lID0gdGhpcztcbiAgcmV0dXJuIHJlc29sdmVyLnByb21pc2UuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgUHJvbWlzZS5DYW5jZWxsYXRpb25FcnJvciB8fCBlcnJvciBpbnN0YW5jZW9mIFByb21pc2UuVGltZW91dEVycm9yKSB7XG4gICAgICAvLyByZW1vdmUgdGhpcyB0YXNrIGZyb20gdGhlIHF1ZXVlLiBJdCBpcyBhbHJlYWR5IHJlamVjdGVkIChoZW5jZSB0aGlzXG4gICAgICAvLyBjYXRjaCBldmVudCksIGFuZCBlbHNlIGl0IHdpbGwgYmUgcmVqZWN0ZWQgYWdhaW4gd2hlbiB0ZXJtaW5hdGluZ1xuICAgICAgZGVsZXRlIG1lLnByb2Nlc3NpbmdbaWRdO1xuXG4gICAgICAvLyB0ZXJtaW5hdGUgd29ya2VyXG4gICAgICByZXR1cm4gbWUudGVybWluYXRlQW5kTm90aWZ5KHRydWUpXG4gICAgICAgIC50aGVuKGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9LCBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH0pXG59O1xuXG4vKipcbiAqIFRlc3Qgd2hldGhlciB0aGUgd29ya2VyIGlzIHByb2Nlc3NpbmcgYW55IHRhc2tzIG9yIGNsZWFuaW5nIHVwIGJlZm9yZSB0ZXJtaW5hdGlvbi5cbiAqIEByZXR1cm4ge2Jvb2xlYW59IFJldHVybnMgdHJ1ZSBpZiB0aGUgd29ya2VyIGlzIGJ1c3lcbiAqL1xuV29ya2VySGFuZGxlci5wcm90b3R5cGUuYnVzeSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuY2xlYW5pbmcgfHwgT2JqZWN0LmtleXModGhpcy5wcm9jZXNzaW5nKS5sZW5ndGggPiAwO1xufTtcblxuLyoqXG4gKiBUZXJtaW5hdGUgdGhlIHdvcmtlci5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2ZvcmNlPWZhbHNlXSAgIElmIGZhbHNlIChkZWZhdWx0KSwgdGhlIHdvcmtlciBpcyB0ZXJtaW5hdGVkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZnRlciBmaW5pc2hpbmcgYWxsIHRhc2tzIGN1cnJlbnRseSBpblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3Jlc3MuIElmIHRydWUsIHRoZSB3b3JrZXIgd2lsbCBiZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVybWluYXRlZCBpbW1lZGlhdGVseS5cbiAqIEBwYXJhbSB7ZnVuY3Rpb259IFtjYWxsYmFjaz1udWxsXSBJZiBwcm92aWRlZCwgd2lsbCBiZSBjYWxsZWQgd2hlbiBwcm9jZXNzIHRlcm1pbmF0ZXMuXG4gKi9cbldvcmtlckhhbmRsZXIucHJvdG90eXBlLnRlcm1pbmF0ZSA9IGZ1bmN0aW9uIChmb3JjZSwgY2FsbGJhY2spIHtcbiAgdmFyIG1lID0gdGhpcztcbiAgaWYgKGZvcmNlKSB7XG4gICAgLy8gY2FuY2VsIGFsbCB0YXNrcyBpbiBwcm9ncmVzc1xuICAgIGZvciAodmFyIGlkIGluIHRoaXMucHJvY2Vzc2luZykge1xuICAgICAgaWYgKHRoaXMucHJvY2Vzc2luZ1tpZF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLnByb2Nlc3NpbmdbaWRdLnJlc29sdmVyLnJlamVjdChuZXcgRXJyb3IoJ1dvcmtlciB0ZXJtaW5hdGVkJykpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnByb2Nlc3NpbmcgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHRoaXMudGVybWluYXRpb25IYW5kbGVyID0gY2FsbGJhY2s7XG4gIH1cbiAgaWYgKCF0aGlzLmJ1c3koKSkge1xuICAgIC8vIGFsbCB0YXNrcyBhcmUgZmluaXNoZWQuIGtpbGwgdGhlIHdvcmtlclxuICAgIHZhciBjbGVhbnVwID0gZnVuY3Rpb24oZXJyKSB7XG4gICAgICBtZS50ZXJtaW5hdGVkID0gdHJ1ZTtcbiAgICAgIG1lLmNsZWFuaW5nID0gZmFsc2U7XG4gICAgICBpZiAobWUud29ya2VyICE9IG51bGwgJiYgbWUud29ya2VyLnJlbW92ZUFsbExpc3RlbmVycykge1xuICAgICAgICAvLyByZW1vdmVBbGxMaXN0ZW5lcnMgaXMgb25seSBhdmFpbGFibGUgZm9yIGNoaWxkX3Byb2Nlc3NcbiAgICAgICAgbWUud29ya2VyLnJlbW92ZUFsbExpc3RlbmVycygnbWVzc2FnZScpO1xuICAgICAgfVxuICAgICAgbWUud29ya2VyID0gbnVsbDtcbiAgICAgIG1lLnRlcm1pbmF0aW5nID0gZmFsc2U7XG4gICAgICBpZiAobWUudGVybWluYXRpb25IYW5kbGVyKSB7XG4gICAgICAgIG1lLnRlcm1pbmF0aW9uSGFuZGxlcihlcnIsIG1lKTtcbiAgICAgIH0gZWxzZSBpZiAoZXJyKSB7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy53b3JrZXIpIHtcbiAgICAgIGlmICh0eXBlb2YgdGhpcy53b3JrZXIua2lsbCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBpZiAodGhpcy53b3JrZXIua2lsbGVkKSB7XG4gICAgICAgICAgY2xlYW51cChuZXcgRXJyb3IoJ3dvcmtlciBhbHJlYWR5IGtpbGxlZCEnKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY2hpbGQgcHJvY2VzcyBhbmQgd29ya2VyIHRocmVhZHNcbiAgICAgICAgdmFyIGNsZWFuRXhpdFRpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGlmIChtZS53b3JrZXIpIHtcbiAgICAgICAgICAgIG1lLndvcmtlci5raWxsKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LCB0aGlzLndvcmtlclRlcm1pbmF0ZVRpbWVvdXQpO1xuXG4gICAgICAgIHRoaXMud29ya2VyLm9uY2UoJ2V4aXQnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQoY2xlYW5FeGl0VGltZW91dCk7XG4gICAgICAgICAgaWYgKG1lLndvcmtlcikge1xuICAgICAgICAgICAgbWUud29ya2VyLmtpbGxlZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNsZWFudXAoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHRoaXMud29ya2VyLnJlYWR5KSB7XG4gICAgICAgICAgdGhpcy53b3JrZXIuc2VuZChURVJNSU5BVEVfTUVUSE9EX0lEKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnJlcXVlc3RRdWV1ZS5wdXNoKHsgbWVzc2FnZTogVEVSTUlOQVRFX01FVEhPRF9JRCB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG1hcmsgdGhhdCB0aGUgd29ya2VyIGlzIGNsZWFuaW5nIHVwIHJlc291cmNlc1xuICAgICAgICAvLyB0byBwcmV2ZW50IG5ldyB0YXNrcyBmcm9tIGJlaW5nIGV4ZWN1dGVkXG4gICAgICAgIHRoaXMuY2xlYW5pbmcgPSB0cnVlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBlbHNlIGlmICh0eXBlb2YgdGhpcy53b3JrZXIudGVybWluYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRoaXMud29ya2VyLnRlcm1pbmF0ZSgpOyAvLyB3ZWIgd29ya2VyXG4gICAgICAgIHRoaXMud29ya2VyLmtpbGxlZCA9IHRydWU7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gdGVybWluYXRlIHdvcmtlcicpO1xuICAgICAgfVxuICAgIH1cbiAgICBjbGVhbnVwKCk7XG4gIH1cbiAgZWxzZSB7XG4gICAgLy8gd2UgY2FuJ3QgdGVybWluYXRlIGltbWVkaWF0ZWx5LCB0aGVyZSBhcmUgc3RpbGwgdGFza3MgYmVpbmcgZXhlY3V0ZWRcbiAgICB0aGlzLnRlcm1pbmF0aW5nID0gdHJ1ZTtcbiAgfVxufTtcblxuLyoqXG4gKiBUZXJtaW5hdGUgdGhlIHdvcmtlciwgcmV0dXJuaW5nIGEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHRlcm1pbmF0aW9uIGhhcyBiZWVuIGRvbmUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtmb3JjZT1mYWxzZV0gICBJZiBmYWxzZSAoZGVmYXVsdCksIHRoZSB3b3JrZXIgaXMgdGVybWluYXRlZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXIgZmluaXNoaW5nIGFsbCB0YXNrcyBjdXJyZW50bHkgaW5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyZXNzLiBJZiB0cnVlLCB0aGUgd29ya2VyIHdpbGwgYmVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlcm1pbmF0ZWQgaW1tZWRpYXRlbHkuXG4gKiBAcGFyYW0ge251bWJlcn0gW3RpbWVvdXRdICAgICAgICBJZiBwcm92aWRlZCBhbmQgbm9uLXplcm8sIHdvcmtlciB0ZXJtaW5hdGlvbiBwcm9taXNlIHdpbGwgYmUgcmVqZWN0ZWRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVyIHRpbWVvdXQgaWYgd29ya2VyIHByb2Nlc3MgaGFzIG5vdCBiZWVuIHRlcm1pbmF0ZWQuXG4gKiBAcmV0dXJuIHtQcm9taXNlLjxXb3JrZXJIYW5kbGVyLCBFcnJvcj59XG4gKi9cbldvcmtlckhhbmRsZXIucHJvdG90eXBlLnRlcm1pbmF0ZUFuZE5vdGlmeSA9IGZ1bmN0aW9uIChmb3JjZSwgdGltZW91dCkge1xuICB2YXIgcmVzb2x2ZXIgPSBQcm9taXNlLmRlZmVyKCk7XG4gIGlmICh0aW1lb3V0KSB7XG4gICAgcmVzb2x2ZXIucHJvbWlzZS50aW1lb3V0KHRpbWVvdXQpO1xuICB9XG4gIHRoaXMudGVybWluYXRlKGZvcmNlLCBmdW5jdGlvbihlcnIsIHdvcmtlcikge1xuICAgIGlmIChlcnIpIHtcbiAgICAgIHJlc29sdmVyLnJlamVjdChlcnIpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXNvbHZlci5yZXNvbHZlKHdvcmtlcik7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc29sdmVyLnByb21pc2U7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFdvcmtlckhhbmRsZXI7XG5tb2R1bGUuZXhwb3J0cy5fdHJ5UmVxdWlyZVdvcmtlclRocmVhZHMgPSB0cnlSZXF1aXJlV29ya2VyVGhyZWFkcztcbm1vZHVsZS5leHBvcnRzLl9zZXR1cFByb2Nlc3NXb3JrZXIgPSBzZXR1cFByb2Nlc3NXb3JrZXI7XG5tb2R1bGUuZXhwb3J0cy5fc2V0dXBCcm93c2VyV29ya2VyID0gc2V0dXBCcm93c2VyV29ya2VyO1xubW9kdWxlLmV4cG9ydHMuX3NldHVwV29ya2VyVGhyZWFkV29ya2VyID0gc2V0dXBXb3JrZXJUaHJlYWRXb3JrZXI7XG5tb2R1bGUuZXhwb3J0cy5lbnN1cmVXb3JrZXJUaHJlYWRzID0gZW5zdXJlV29ya2VyVGhyZWFkcztcbiIsICIndXNlIHN0cmljdCc7XG5cbnZhciBNQVhfUE9SVFMgPSA2NTUzNTtcbm1vZHVsZS5leHBvcnRzID0gRGVidWdQb3J0QWxsb2NhdG9yO1xuZnVuY3Rpb24gRGVidWdQb3J0QWxsb2NhdG9yKCkge1xuICB0aGlzLnBvcnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgdGhpcy5sZW5ndGggPSAwO1xufVxuXG5EZWJ1Z1BvcnRBbGxvY2F0b3IucHJvdG90eXBlLm5leHRBdmFpbGFibGVTdGFydGluZ0F0ID0gZnVuY3Rpb24oc3RhcnRpbmcpIHtcbiAgd2hpbGUgKHRoaXMucG9ydHNbc3RhcnRpbmddID09PSB0cnVlKSB7XG4gICAgc3RhcnRpbmcrKztcbiAgfVxuXG4gIGlmIChzdGFydGluZyA+PSBNQVhfUE9SVFMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1dvcmtlclBvb2wgZGVidWcgcG9ydCBsaW1pdCByZWFjaGVkOiAnICsgc3RhcnRpbmcgKyAnPj0gJyArIE1BWF9QT1JUUyApO1xuICB9XG5cbiAgdGhpcy5wb3J0c1tzdGFydGluZ10gPSB0cnVlO1xuICB0aGlzLmxlbmd0aCsrO1xuICByZXR1cm4gc3RhcnRpbmc7XG59O1xuXG5EZWJ1Z1BvcnRBbGxvY2F0b3IucHJvdG90eXBlLnJlbGVhc2VQb3J0ID0gZnVuY3Rpb24ocG9ydCkge1xuICBkZWxldGUgdGhpcy5wb3J0c1twb3J0XTtcbiAgdGhpcy5sZW5ndGgtLTtcbn07XG5cbiIsICJ2YXIgUHJvbWlzZSA9IHJlcXVpcmUoJy4vUHJvbWlzZScpO1xudmFyIFdvcmtlckhhbmRsZXIgPSByZXF1aXJlKCcuL1dvcmtlckhhbmRsZXInKTtcbnZhciBlbnZpcm9ubWVudCA9IHJlcXVpcmUoJy4vZW52aXJvbm1lbnQnKTtcbnZhciBEZWJ1Z1BvcnRBbGxvY2F0b3IgPSByZXF1aXJlKCcuL2RlYnVnLXBvcnQtYWxsb2NhdG9yJyk7XG52YXIgREVCVUdfUE9SVF9BTExPQ0FUT1IgPSBuZXcgRGVidWdQb3J0QWxsb2NhdG9yKCk7XG4vKipcbiAqIEEgcG9vbCB0byBtYW5hZ2Ugd29ya2Vyc1xuICogQHBhcmFtIHtTdHJpbmd9IFtzY3JpcHRdICAgT3B0aW9uYWwgd29ya2VyIHNjcmlwdFxuICogQHBhcmFtIHtXb3JrZXJQb29sT3B0aW9uc30gW29wdGlvbnNdICBTZWUgZG9jc1xuICogQGNvbnN0cnVjdG9yXG4gKi9cbmZ1bmN0aW9uIFBvb2woc2NyaXB0LCBvcHRpb25zKSB7XG4gIGlmICh0eXBlb2Ygc2NyaXB0ID09PSAnc3RyaW5nJykge1xuICAgIHRoaXMuc2NyaXB0ID0gc2NyaXB0IHx8IG51bGw7XG4gIH1cbiAgZWxzZSB7XG4gICAgdGhpcy5zY3JpcHQgPSBudWxsO1xuICAgIG9wdGlvbnMgPSBzY3JpcHQ7XG4gIH1cblxuICB0aGlzLndvcmtlcnMgPSBbXTsgIC8vIHF1ZXVlIHdpdGggYWxsIHdvcmtlcnNcbiAgdGhpcy50YXNrcyA9IFtdOyAgICAvLyBxdWV1ZSB3aXRoIHRhc2tzIGF3YWl0aW5nIGV4ZWN1dGlvblxuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gIHRoaXMuZm9ya0FyZ3MgPSBPYmplY3QuZnJlZXplKG9wdGlvbnMuZm9ya0FyZ3MgfHwgW10pO1xuICB0aGlzLmZvcmtPcHRzID0gT2JqZWN0LmZyZWV6ZShvcHRpb25zLmZvcmtPcHRzIHx8IHt9KTtcbiAgdGhpcy53b3JrZXJPcHRzID0gT2JqZWN0LmZyZWV6ZShvcHRpb25zLndvcmtlck9wdHMgfHwge30pO1xuICB0aGlzLndvcmtlclRocmVhZE9wdHMgPSBPYmplY3QuZnJlZXplKG9wdGlvbnMud29ya2VyVGhyZWFkT3B0cyB8fCB7fSlcbiAgdGhpcy5kZWJ1Z1BvcnRTdGFydCA9IChvcHRpb25zLmRlYnVnUG9ydFN0YXJ0IHx8IDQzMjEwKTtcbiAgdGhpcy5ub2RlV29ya2VyID0gb3B0aW9ucy5ub2RlV29ya2VyO1xuICB0aGlzLndvcmtlclR5cGUgPSBvcHRpb25zLndvcmtlclR5cGUgfHwgb3B0aW9ucy5ub2RlV29ya2VyIHx8ICdhdXRvJ1xuICB0aGlzLm1heFF1ZXVlU2l6ZSA9IG9wdGlvbnMubWF4UXVldWVTaXplIHx8IEluZmluaXR5O1xuICB0aGlzLndvcmtlclRlcm1pbmF0ZVRpbWVvdXQgPSBvcHRpb25zLndvcmtlclRlcm1pbmF0ZVRpbWVvdXQgfHwgMTAwMDtcblxuICB0aGlzLm9uQ3JlYXRlV29ya2VyID0gb3B0aW9ucy5vbkNyZWF0ZVdvcmtlciB8fCAoKCkgPT4gbnVsbCk7XG4gIHRoaXMub25UZXJtaW5hdGVXb3JrZXIgPSBvcHRpb25zLm9uVGVybWluYXRlV29ya2VyIHx8ICgoKSA9PiBudWxsKTtcblxuICAvLyBjb25maWd1cmF0aW9uXG4gIGlmIChvcHRpb25zICYmICdtYXhXb3JrZXJzJyBpbiBvcHRpb25zKSB7XG4gICAgdmFsaWRhdGVNYXhXb3JrZXJzKG9wdGlvbnMubWF4V29ya2Vycyk7XG4gICAgdGhpcy5tYXhXb3JrZXJzID0gb3B0aW9ucy5tYXhXb3JrZXJzO1xuICB9XG4gIGVsc2Uge1xuICAgIHRoaXMubWF4V29ya2VycyA9IE1hdGgubWF4KChlbnZpcm9ubWVudC5jcHVzIHx8IDQpIC0gMSwgMSk7XG4gIH1cblxuICBpZiAob3B0aW9ucyAmJiAnbWluV29ya2VycycgaW4gb3B0aW9ucykge1xuICAgIGlmKG9wdGlvbnMubWluV29ya2VycyA9PT0gJ21heCcpIHtcbiAgICAgIHRoaXMubWluV29ya2VycyA9IHRoaXMubWF4V29ya2VycztcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsaWRhdGVNaW5Xb3JrZXJzKG9wdGlvbnMubWluV29ya2Vycyk7XG4gICAgICB0aGlzLm1pbldvcmtlcnMgPSBvcHRpb25zLm1pbldvcmtlcnM7XG4gICAgICB0aGlzLm1heFdvcmtlcnMgPSBNYXRoLm1heCh0aGlzLm1pbldvcmtlcnMsIHRoaXMubWF4V29ya2Vycyk7ICAgICAvLyBpbiBjYXNlIG1pbldvcmtlcnMgaXMgaGlnaGVyIHRoYW4gbWF4V29ya2Vyc1xuICAgIH1cbiAgICB0aGlzLl9lbnN1cmVNaW5Xb3JrZXJzKCk7XG4gIH1cblxuICB0aGlzLl9ib3VuZE5leHQgPSB0aGlzLl9uZXh0LmJpbmQodGhpcyk7XG5cblxuICBpZiAodGhpcy53b3JrZXJUeXBlID09PSAndGhyZWFkJykge1xuICAgIFdvcmtlckhhbmRsZXIuZW5zdXJlV29ya2VyVGhyZWFkcygpO1xuICB9XG59XG5cblxuLyoqXG4gKiBFeGVjdXRlIGEgZnVuY3Rpb24gb24gYSB3b3JrZXIuXG4gKlxuICogRXhhbXBsZSB1c2FnZTpcbiAqXG4gKiAgIHZhciBwb29sID0gbmV3IFBvb2woKVxuICpcbiAqICAgLy8gY2FsbCBhIGZ1bmN0aW9uIGF2YWlsYWJsZSBvbiB0aGUgd29ya2VyXG4gKiAgIHBvb2wuZXhlYygnZmlib25hY2NpJywgWzZdKVxuICpcbiAqICAgLy8gb2ZmbG9hZCBhIGZ1bmN0aW9uXG4gKiAgIGZ1bmN0aW9uIGFkZChhLCBiKSB7XG4gKiAgICAgcmV0dXJuIGEgKyBiXG4gKiAgIH07XG4gKiAgIHBvb2wuZXhlYyhhZGQsIFsyLCA0XSlcbiAqICAgICAgIC50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAqICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0KTsgLy8gb3V0cHV0cyA2XG4gKiAgICAgICB9KVxuICogICAgICAgLmNhdGNoKGZ1bmN0aW9uKGVycm9yKSB7XG4gKiAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcbiAqICAgICAgIH0pO1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nIHwgRnVuY3Rpb259IG1ldGhvZCAgRnVuY3Rpb24gbmFtZSBvciBmdW5jdGlvbi5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgYG1ldGhvZGAgaXMgYSBzdHJpbmcsIHRoZSBjb3JyZXNwb25kaW5nXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZCBvbiB0aGUgd29ya2VyIHdpbGwgYmUgZXhlY3V0ZWRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgYG1ldGhvZGAgaXMgYSBGdW5jdGlvbiwgdGhlIGZ1bmN0aW9uXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbGwgYmUgc3RyaW5naWZpZWQgYW5kIGV4ZWN1dGVkIHZpYSB0aGVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya2VycyBidWlsdC1pbiBmdW5jdGlvbiBgcnVuKGZuLCBhcmdzKWAuXG4gKiBAcGFyYW0ge0FycmF5fSBbcGFyYW1zXSAgRnVuY3Rpb24gYXJndW1lbnRzIGFwcGxpZWQgd2hlbiBjYWxsaW5nIHRoZSBmdW5jdGlvblxuICogQHBhcmFtIHtFeGVjT3B0aW9uc30gW29wdGlvbnNdICBPcHRpb25zIG9iamVjdFxuICogQHJldHVybiB7UHJvbWlzZS48KiwgRXJyb3I+fSByZXN1bHRcbiAqL1xuUG9vbC5wcm90b3R5cGUuZXhlYyA9IGZ1bmN0aW9uIChtZXRob2QsIHBhcmFtcywgb3B0aW9ucykge1xuICAvLyB2YWxpZGF0ZSB0eXBlIG9mIGFyZ3VtZW50c1xuICBpZiAocGFyYW1zICYmICFBcnJheS5pc0FycmF5KHBhcmFtcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheSBleHBlY3RlZCBhcyBhcmd1bWVudCBcInBhcmFtc1wiJyk7XG4gIH1cblxuICBpZiAodHlwZW9mIG1ldGhvZCA9PT0gJ3N0cmluZycpIHtcbiAgICB2YXIgcmVzb2x2ZXIgPSBQcm9taXNlLmRlZmVyKCk7XG5cbiAgICBpZiAodGhpcy50YXNrcy5sZW5ndGggPj0gdGhpcy5tYXhRdWV1ZVNpemUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWF4IHF1ZXVlIHNpemUgb2YgJyArIHRoaXMubWF4UXVldWVTaXplICsgJyByZWFjaGVkJyk7XG4gICAgfVxuXG4gICAgLy8gYWRkIGEgbmV3IHRhc2sgdG8gdGhlIHF1ZXVlXG4gICAgdmFyIHRhc2tzID0gdGhpcy50YXNrcztcbiAgICB2YXIgdGFzayA9IHtcbiAgICAgIG1ldGhvZDogIG1ldGhvZCxcbiAgICAgIHBhcmFtczogIHBhcmFtcyxcbiAgICAgIHJlc29sdmVyOiByZXNvbHZlcixcbiAgICAgIHRpbWVvdXQ6IG51bGwsXG4gICAgICBvcHRpb25zOiBvcHRpb25zXG4gICAgfTtcbiAgICB0YXNrcy5wdXNoKHRhc2spO1xuXG4gICAgLy8gcmVwbGFjZSB0aGUgdGltZW91dCBtZXRob2Qgb2YgdGhlIFByb21pc2Ugd2l0aCBvdXIgb3duLFxuICAgIC8vIHdoaWNoIHN0YXJ0cyB0aGUgdGltZXIgYXMgc29vbiBhcyB0aGUgdGFzayBpcyBhY3R1YWxseSBzdGFydGVkXG4gICAgdmFyIG9yaWdpbmFsVGltZW91dCA9IHJlc29sdmVyLnByb21pc2UudGltZW91dDtcbiAgICByZXNvbHZlci5wcm9taXNlLnRpbWVvdXQgPSBmdW5jdGlvbiB0aW1lb3V0IChkZWxheSkge1xuICAgICAgaWYgKHRhc2tzLmluZGV4T2YodGFzaykgIT09IC0xKSB7XG4gICAgICAgIC8vIHRhc2sgaXMgc3RpbGwgcXVldWVkIC0+IHN0YXJ0IHRoZSB0aW1lciBsYXRlciBvblxuICAgICAgICB0YXNrLnRpbWVvdXQgPSBkZWxheTtcbiAgICAgICAgcmV0dXJuIHJlc29sdmVyLnByb21pc2U7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgLy8gdGFzayBpcyBhbHJlYWR5IGJlaW5nIGV4ZWN1dGVkIC0+IHN0YXJ0IHRpbWVyIGltbWVkaWF0ZWx5XG4gICAgICAgIHJldHVybiBvcmlnaW5hbFRpbWVvdXQuY2FsbChyZXNvbHZlci5wcm9taXNlLCBkZWxheSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8vIHRyaWdnZXIgdGFzayBleGVjdXRpb25cbiAgICB0aGlzLl9uZXh0KCk7XG5cbiAgICByZXR1cm4gcmVzb2x2ZXIucHJvbWlzZTtcbiAgfVxuICBlbHNlIGlmICh0eXBlb2YgbWV0aG9kID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gc2VuZCBzdHJpbmdpZmllZCBmdW5jdGlvbiBhbmQgZnVuY3Rpb24gYXJndW1lbnRzIHRvIHdvcmtlclxuICAgIHJldHVybiB0aGlzLmV4ZWMoJ3J1bicsIFtTdHJpbmcobWV0aG9kKSwgcGFyYW1zXSk7XG4gIH1cbiAgZWxzZSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRnVuY3Rpb24gb3Igc3RyaW5nIGV4cGVjdGVkIGFzIGFyZ3VtZW50IFwibWV0aG9kXCInKTtcbiAgfVxufTtcblxuLyoqXG4gKiBDcmVhdGUgYSBwcm94eSBmb3IgY3VycmVudCB3b3JrZXIuIFJldHVybnMgYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsXG4gKiBtZXRob2RzIGF2YWlsYWJsZSBvbiB0aGUgd29ya2VyLiBUaGUgbWV0aG9kcyBhbHdheXMgcmV0dXJuIGEgcHJvbWlzZS5cbiAqXG4gKiBAcmV0dXJuIHtQcm9taXNlLjxPYmplY3QsIEVycm9yPn0gcHJveHlcbiAqL1xuUG9vbC5wcm90b3R5cGUucHJveHkgPSBmdW5jdGlvbiAoKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignTm8gYXJndW1lbnRzIGV4cGVjdGVkJyk7XG4gIH1cblxuICB2YXIgcG9vbCA9IHRoaXM7XG4gIHJldHVybiB0aGlzLmV4ZWMoJ21ldGhvZHMnKVxuICAgICAgLnRoZW4oZnVuY3Rpb24gKG1ldGhvZHMpIHtcbiAgICAgICAgdmFyIHByb3h5ID0ge307XG5cbiAgICAgICAgbWV0aG9kcy5mb3JFYWNoKGZ1bmN0aW9uIChtZXRob2QpIHtcbiAgICAgICAgICBwcm94eVttZXRob2RdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHBvb2wuZXhlYyhtZXRob2QsIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHByb3h5O1xuICAgICAgfSk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgbmV3IGFycmF5IHdpdGggdGhlIHJlc3VsdHMgb2YgY2FsbGluZyBhIHByb3ZpZGVkIGNhbGxiYWNrIGZ1bmN0aW9uXG4gKiBvbiBldmVyeSBlbGVtZW50IGluIHRoaXMgYXJyYXkuXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheVxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgIEZ1bmN0aW9uIHRha2luZyB0d28gYXJndW1lbnRzOlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBjYWxsYmFjayhjdXJyZW50VmFsdWUsIGluZGV4KWBcbiAqIEByZXR1cm4ge1Byb21pc2UuPEFycmF5Pn0gUmV0dXJucyBhIHByb21pc2Ugd2hpY2ggcmVzb2x2ZXMgIHdpdGggYW4gQXJyYXlcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmluZyB0aGUgcmVzdWx0cyBvZiB0aGUgY2FsbGJhY2sgZnVuY3Rpb25cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZWQgZm9yIGVhY2ggb2YgdGhlIGFycmF5IGVsZW1lbnRzLlxuICovXG4vKiBUT0RPOiBpbXBsZW1lbnQgbWFwXG5Qb29sLnByb3RvdHlwZS5tYXAgPSBmdW5jdGlvbiAoYXJyYXksIGNhbGxiYWNrKSB7XG59O1xuKi9cblxuLyoqXG4gKiBHcmFiIHRoZSBmaXJzdCB0YXNrIGZyb20gdGhlIHF1ZXVlLCBmaW5kIGEgZnJlZSB3b3JrZXIsIGFuZCBhc3NpZ24gdGhlXG4gKiB3b3JrZXIgdG8gdGhlIHRhc2suXG4gKiBAcHJvdGVjdGVkXG4gKi9cblBvb2wucHJvdG90eXBlLl9uZXh0ID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy50YXNrcy5sZW5ndGggPiAwKSB7XG4gICAgLy8gdGhlcmUgYXJlIHRhc2tzIGluIHRoZSBxdWV1ZVxuXG4gICAgLy8gZmluZCBhbiBhdmFpbGFibGUgd29ya2VyXG4gICAgdmFyIHdvcmtlciA9IHRoaXMuX2dldFdvcmtlcigpO1xuICAgIGlmICh3b3JrZXIpIHtcbiAgICAgIC8vIGdldCB0aGUgZmlyc3QgdGFzayBmcm9tIHRoZSBxdWV1ZVxuICAgICAgdmFyIG1lID0gdGhpcztcbiAgICAgIHZhciB0YXNrID0gdGhpcy50YXNrcy5zaGlmdCgpO1xuXG4gICAgICAvLyBjaGVjayBpZiB0aGUgdGFzayBpcyBzdGlsbCBwZW5kaW5nIChhbmQgbm90IGNhbmNlbGxlZCAtPiBwcm9taXNlIHJlamVjdGVkKVxuICAgICAgaWYgKHRhc2sucmVzb2x2ZXIucHJvbWlzZS5wZW5kaW5nKSB7XG4gICAgICAgIC8vIHNlbmQgdGhlIHJlcXVlc3QgdG8gdGhlIHdvcmtlclxuICAgICAgICB2YXIgcHJvbWlzZSA9IHdvcmtlci5leGVjKHRhc2subWV0aG9kLCB0YXNrLnBhcmFtcywgdGFzay5yZXNvbHZlciwgdGFzay5vcHRpb25zKVxuICAgICAgICAgIC50aGVuKG1lLl9ib3VuZE5leHQpXG4gICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIC8vIGlmIHRoZSB3b3JrZXIgY3Jhc2hlZCBhbmQgdGVybWluYXRlZCwgcmVtb3ZlIGl0IGZyb20gdGhlIHBvb2xcbiAgICAgICAgICAgIGlmICh3b3JrZXIudGVybWluYXRlZCkge1xuICAgICAgICAgICAgICByZXR1cm4gbWUuX3JlbW92ZVdvcmtlcih3b3JrZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBtZS5fbmV4dCgpOyAvLyB0cmlnZ2VyIG5leHQgdGFzayBpbiB0aGUgcXVldWVcbiAgICAgICAgICB9KTtcblxuICAgICAgICAvLyBzdGFydCBxdWV1ZWQgdGltZXIgbm93XG4gICAgICAgIGlmICh0eXBlb2YgdGFzay50aW1lb3V0ID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIHByb21pc2UudGltZW91dCh0YXNrLnRpbWVvdXQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUaGUgdGFzayB0YWtlbiB3YXMgYWxyZWFkeSBjb21wbGV0ZSAoZWl0aGVyIHJlamVjdGVkIG9yIHJlc29sdmVkKSwgc28ganVzdCB0cmlnZ2VyIG5leHQgdGFzayBpbiB0aGUgcXVldWVcbiAgICAgICAgbWUuX25leHQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG5cbi8qKlxuICogR2V0IGFuIGF2YWlsYWJsZSB3b3JrZXIuIElmIG5vIHdvcmtlciBpcyBhdmFpbGFibGUgYW5kIHRoZSBtYXhpbXVtIG51bWJlclxuICogb2Ygd29ya2VycyBpc24ndCB5ZXQgcmVhY2hlZCwgYSBuZXcgd29ya2VyIHdpbGwgYmUgY3JlYXRlZCBhbmQgcmV0dXJuZWQuXG4gKiBJZiBubyB3b3JrZXIgaXMgYXZhaWxhYmxlIGFuZCB0aGUgbWF4aW11bSBudW1iZXIgb2Ygd29ya2VycyBpcyByZWFjaGVkLFxuICogbnVsbCB3aWxsIGJlIHJldHVybmVkLlxuICpcbiAqIEByZXR1cm4ge1dvcmtlckhhbmRsZXIgfCBudWxsfSB3b3JrZXJcbiAqIEBwcml2YXRlXG4gKi9cblBvb2wucHJvdG90eXBlLl9nZXRXb3JrZXIgPSBmdW5jdGlvbigpIHtcbiAgLy8gZmluZCBhIG5vbi1idXN5IHdvcmtlclxuICB2YXIgd29ya2VycyA9IHRoaXMud29ya2VycztcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB3b3JrZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHdvcmtlciA9IHdvcmtlcnNbaV07XG4gICAgaWYgKHdvcmtlci5idXN5KCkgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gd29ya2VyO1xuICAgIH1cbiAgfVxuXG4gIGlmICh3b3JrZXJzLmxlbmd0aCA8IHRoaXMubWF4V29ya2Vycykge1xuICAgIC8vIGNyZWF0ZSBhIG5ldyB3b3JrZXJcbiAgICB3b3JrZXIgPSB0aGlzLl9jcmVhdGVXb3JrZXJIYW5kbGVyKCk7XG4gICAgd29ya2Vycy5wdXNoKHdvcmtlcik7XG4gICAgcmV0dXJuIHdvcmtlcjtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYSB3b3JrZXIgZnJvbSB0aGUgcG9vbC5cbiAqIEF0dGVtcHRzIHRvIHRlcm1pbmF0ZSB3b3JrZXIgaWYgbm90IGFscmVhZHkgdGVybWluYXRlZCwgYW5kIGVuc3VyZXMgdGhlIG1pbmltdW1cbiAqIHBvb2wgc2l6ZSBpcyBtZXQuXG4gKiBAcGFyYW0ge1dvcmtlckhhbmRsZXJ9IHdvcmtlclxuICogQHJldHVybiB7UHJvbWlzZTxXb3JrZXJIYW5kbGVyPn1cbiAqIEBwcm90ZWN0ZWRcbiAqL1xuUG9vbC5wcm90b3R5cGUuX3JlbW92ZVdvcmtlciA9IGZ1bmN0aW9uKHdvcmtlcikge1xuICB2YXIgbWUgPSB0aGlzO1xuXG4gIERFQlVHX1BPUlRfQUxMT0NBVE9SLnJlbGVhc2VQb3J0KHdvcmtlci5kZWJ1Z1BvcnQpO1xuICAvLyBfcmVtb3ZlV29ya2VyIHdpbGwgY2FsbCB0aGlzLCBidXQgd2UgbmVlZCBpdCB0byBiZSByZW1vdmVkIHN5bmNocm9ub3VzbHlcbiAgdGhpcy5fcmVtb3ZlV29ya2VyRnJvbUxpc3Qod29ya2VyKTtcbiAgLy8gSWYgbWluV29ya2VycyBzZXQsIHNwaW4gdXAgbmV3IHdvcmtlcnMgdG8gcmVwbGFjZSB0aGUgY3Jhc2hlZCBvbmVzXG4gIHRoaXMuX2Vuc3VyZU1pbldvcmtlcnMoKTtcbiAgLy8gdGVybWluYXRlIHRoZSB3b3JrZXIgKGlmIG5vdCBhbHJlYWR5IHRlcm1pbmF0ZWQpXG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICB3b3JrZXIudGVybWluYXRlKGZhbHNlLCBmdW5jdGlvbihlcnIpIHtcbiAgICAgIG1lLm9uVGVybWluYXRlV29ya2VyKHtcbiAgICAgICAgZm9ya0FyZ3M6IHdvcmtlci5mb3JrQXJncyxcbiAgICAgICAgZm9ya09wdHM6IHdvcmtlci5mb3JrT3B0cyxcbiAgICAgICAgd29ya2VyVGhyZWFkT3B0czogd29ya2VyLndvcmtlclRocmVhZE9wdHMsXG4gICAgICAgIHNjcmlwdDogd29ya2VyLnNjcmlwdFxuICAgICAgfSk7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzb2x2ZSh3b3JrZXIpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGEgd29ya2VyIGZyb20gdGhlIHBvb2wgbGlzdC5cbiAqIEBwYXJhbSB7V29ya2VySGFuZGxlcn0gd29ya2VyXG4gKiBAcHJvdGVjdGVkXG4gKi9cblBvb2wucHJvdG90eXBlLl9yZW1vdmVXb3JrZXJGcm9tTGlzdCA9IGZ1bmN0aW9uKHdvcmtlcikge1xuICAvLyByZW1vdmUgZnJvbSB0aGUgbGlzdCB3aXRoIHdvcmtlcnNcbiAgdmFyIGluZGV4ID0gdGhpcy53b3JrZXJzLmluZGV4T2Yod29ya2VyKTtcbiAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgIHRoaXMud29ya2Vycy5zcGxpY2UoaW5kZXgsIDEpO1xuICB9XG59O1xuXG4vKipcbiAqIENsb3NlIGFsbCBhY3RpdmUgd29ya2Vycy4gVGFza3MgY3VycmVudGx5IGJlaW5nIGV4ZWN1dGVkIHdpbGwgYmUgZmluaXNoZWQgZmlyc3QuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtmb3JjZT1mYWxzZV0gICBJZiBmYWxzZSAoZGVmYXVsdCksIHRoZSB3b3JrZXJzIGFyZSB0ZXJtaW5hdGVkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZnRlciBmaW5pc2hpbmcgYWxsIHRhc2tzIGN1cnJlbnRseSBpblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3Jlc3MuIElmIHRydWUsIHRoZSB3b3JrZXJzIHdpbGwgYmVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlcm1pbmF0ZWQgaW1tZWRpYXRlbHkuXG4gKiBAcGFyYW0ge251bWJlcn0gW3RpbWVvdXRdICAgICAgICBJZiBwcm92aWRlZCBhbmQgbm9uLXplcm8sIHdvcmtlciB0ZXJtaW5hdGlvbiBwcm9taXNlIHdpbGwgYmUgcmVqZWN0ZWRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVyIHRpbWVvdXQgaWYgd29ya2VyIHByb2Nlc3MgaGFzIG5vdCBiZWVuIHRlcm1pbmF0ZWQuXG4gKiBAcmV0dXJuIHtQcm9taXNlLjx2b2lkLCBFcnJvcj59XG4gKi9cblBvb2wucHJvdG90eXBlLnRlcm1pbmF0ZSA9IGZ1bmN0aW9uIChmb3JjZSwgdGltZW91dCkge1xuICB2YXIgbWUgPSB0aGlzO1xuXG4gIC8vIGNhbmNlbCBhbnkgcGVuZGluZyB0YXNrc1xuICB0aGlzLnRhc2tzLmZvckVhY2goZnVuY3Rpb24gKHRhc2spIHtcbiAgICB0YXNrLnJlc29sdmVyLnJlamVjdChuZXcgRXJyb3IoJ1Bvb2wgdGVybWluYXRlZCcpKTtcbiAgfSk7XG4gIHRoaXMudGFza3MubGVuZ3RoID0gMDtcblxuICB2YXIgZiA9IGZ1bmN0aW9uICh3b3JrZXIpIHtcbiAgICBERUJVR19QT1JUX0FMTE9DQVRPUi5yZWxlYXNlUG9ydCh3b3JrZXIuZGVidWdQb3J0KTtcbiAgICB0aGlzLl9yZW1vdmVXb3JrZXJGcm9tTGlzdCh3b3JrZXIpO1xuICB9O1xuICB2YXIgcmVtb3ZlV29ya2VyID0gZi5iaW5kKHRoaXMpO1xuXG4gIHZhciBwcm9taXNlcyA9IFtdO1xuICB2YXIgd29ya2VycyA9IHRoaXMud29ya2Vycy5zbGljZSgpO1xuICB3b3JrZXJzLmZvckVhY2goZnVuY3Rpb24gKHdvcmtlcikge1xuICAgIHZhciB0ZXJtUHJvbWlzZSA9IHdvcmtlci50ZXJtaW5hdGVBbmROb3RpZnkoZm9yY2UsIHRpbWVvdXQpXG4gICAgICAudGhlbihyZW1vdmVXb3JrZXIpXG4gICAgICAuYWx3YXlzKGZ1bmN0aW9uKCkge1xuICAgICAgICBtZS5vblRlcm1pbmF0ZVdvcmtlcih7XG4gICAgICAgICAgZm9ya0FyZ3M6IHdvcmtlci5mb3JrQXJncyxcbiAgICAgICAgICBmb3JrT3B0czogd29ya2VyLmZvcmtPcHRzLFxuICAgICAgICAgIHdvcmtlclRocmVhZE9wdHM6IHdvcmtlci53b3JrZXJUaHJlYWRPcHRzLFxuICAgICAgICAgIHNjcmlwdDogd29ya2VyLnNjcmlwdFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIHByb21pc2VzLnB1c2godGVybVByb21pc2UpO1xuICB9KTtcbiAgcmV0dXJuIFByb21pc2UuYWxsKHByb21pc2VzKTtcbn07XG5cbi8qKlxuICogUmV0cmlldmUgc3RhdGlzdGljcyBvbiB0YXNrcyBhbmQgd29ya2Vycy5cbiAqIEByZXR1cm4ge3t0b3RhbFdvcmtlcnM6IG51bWJlciwgYnVzeVdvcmtlcnM6IG51bWJlciwgaWRsZVdvcmtlcnM6IG51bWJlciwgcGVuZGluZ1Rhc2tzOiBudW1iZXIsIGFjdGl2ZVRhc2tzOiBudW1iZXJ9fSBSZXR1cm5zIGFuIG9iamVjdCB3aXRoIHN0YXRpc3RpY3NcbiAqL1xuUG9vbC5wcm90b3R5cGUuc3RhdHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciB0b3RhbFdvcmtlcnMgPSB0aGlzLndvcmtlcnMubGVuZ3RoO1xuICB2YXIgYnVzeVdvcmtlcnMgPSB0aGlzLndvcmtlcnMuZmlsdGVyKGZ1bmN0aW9uICh3b3JrZXIpIHtcbiAgICByZXR1cm4gd29ya2VyLmJ1c3koKTtcbiAgfSkubGVuZ3RoO1xuXG4gIHJldHVybiB7XG4gICAgdG90YWxXb3JrZXJzOiAgdG90YWxXb3JrZXJzLFxuICAgIGJ1c3lXb3JrZXJzOiAgIGJ1c3lXb3JrZXJzLFxuICAgIGlkbGVXb3JrZXJzOiAgIHRvdGFsV29ya2VycyAtIGJ1c3lXb3JrZXJzLFxuXG4gICAgcGVuZGluZ1Rhc2tzOiAgdGhpcy50YXNrcy5sZW5ndGgsXG4gICAgYWN0aXZlVGFza3M6ICAgYnVzeVdvcmtlcnNcbiAgfTtcbn07XG5cbi8qKlxuICogRW5zdXJlcyB0aGF0IGEgbWluaW11bSBvZiBtaW5Xb3JrZXJzIGlzIHVwIGFuZCBydW5uaW5nXG4gKiBAcHJvdGVjdGVkXG4gKi9cblBvb2wucHJvdG90eXBlLl9lbnN1cmVNaW5Xb3JrZXJzID0gZnVuY3Rpb24oKSB7XG4gIGlmICh0aGlzLm1pbldvcmtlcnMpIHtcbiAgICBmb3IodmFyIGkgPSB0aGlzLndvcmtlcnMubGVuZ3RoOyBpIDwgdGhpcy5taW5Xb3JrZXJzOyBpKyspIHtcbiAgICAgIHRoaXMud29ya2Vycy5wdXNoKHRoaXMuX2NyZWF0ZVdvcmtlckhhbmRsZXIoKSk7XG4gICAgfVxuICB9XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0byBjcmVhdGUgYSBuZXcgV29ya2VySGFuZGxlciBhbmQgcGFzcyBhbGwgb3B0aW9ucy5cbiAqIEByZXR1cm4ge1dvcmtlckhhbmRsZXJ9XG4gKiBAcHJpdmF0ZVxuICovXG5Qb29sLnByb3RvdHlwZS5fY3JlYXRlV29ya2VySGFuZGxlciA9IGZ1bmN0aW9uICgpIHtcbiAgY29uc3Qgb3ZlcnJpZGRlblBhcmFtcyA9IHRoaXMub25DcmVhdGVXb3JrZXIoe1xuICAgIGZvcmtBcmdzOiB0aGlzLmZvcmtBcmdzLFxuICAgIGZvcmtPcHRzOiB0aGlzLmZvcmtPcHRzLFxuICAgIHdvcmtlck9wdHM6IHRoaXMud29ya2VyT3B0cyxcbiAgICB3b3JrZXJUaHJlYWRPcHRzOiB0aGlzLndvcmtlclRocmVhZE9wdHMsXG4gICAgc2NyaXB0OiB0aGlzLnNjcmlwdFxuICB9KSB8fCB7fTtcblxuICByZXR1cm4gbmV3IFdvcmtlckhhbmRsZXIob3ZlcnJpZGRlblBhcmFtcy5zY3JpcHQgfHwgdGhpcy5zY3JpcHQsIHtcbiAgICBmb3JrQXJnczogb3ZlcnJpZGRlblBhcmFtcy5mb3JrQXJncyB8fCB0aGlzLmZvcmtBcmdzLFxuICAgIGZvcmtPcHRzOiBvdmVycmlkZGVuUGFyYW1zLmZvcmtPcHRzIHx8IHRoaXMuZm9ya09wdHMsXG4gICAgd29ya2VyT3B0czogb3ZlcnJpZGRlblBhcmFtcy53b3JrZXJPcHRzIHx8IHRoaXMud29ya2VyT3B0cyxcbiAgICB3b3JrZXJUaHJlYWRPcHRzOiBvdmVycmlkZGVuUGFyYW1zLndvcmtlclRocmVhZE9wdHMgfHwgdGhpcy53b3JrZXJUaHJlYWRPcHRzLFxuICAgIGRlYnVnUG9ydDogREVCVUdfUE9SVF9BTExPQ0FUT1IubmV4dEF2YWlsYWJsZVN0YXJ0aW5nQXQodGhpcy5kZWJ1Z1BvcnRTdGFydCksXG4gICAgd29ya2VyVHlwZTogdGhpcy53b3JrZXJUeXBlLFxuICAgIHdvcmtlclRlcm1pbmF0ZVRpbWVvdXQ6IHRoaXMud29ya2VyVGVybWluYXRlVGltZW91dCxcbiAgfSk7XG59XG5cbi8qKlxuICogRW5zdXJlIHRoYXQgdGhlIG1heFdvcmtlcnMgb3B0aW9uIGlzIGFuIGludGVnZXIgPj0gMVxuICogQHBhcmFtIHsqfSBtYXhXb3JrZXJzXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gcmV0dXJucyB0cnVlIG1heFdvcmtlcnMgaGFzIGEgdmFsaWQgdmFsdWVcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVNYXhXb3JrZXJzKG1heFdvcmtlcnMpIHtcbiAgaWYgKCFpc051bWJlcihtYXhXb3JrZXJzKSB8fCAhaXNJbnRlZ2VyKG1heFdvcmtlcnMpIHx8IG1heFdvcmtlcnMgPCAxKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignT3B0aW9uIG1heFdvcmtlcnMgbXVzdCBiZSBhbiBpbnRlZ2VyIG51bWJlciA+PSAxJyk7XG4gIH1cbn1cblxuLyoqXG4gKiBFbnN1cmUgdGhhdCB0aGUgbWluV29ya2VycyBvcHRpb24gaXMgYW4gaW50ZWdlciA+PSAwXG4gKiBAcGFyYW0geyp9IG1pbldvcmtlcnNcbiAqIEByZXR1cm5zIHtib29sZWFufSByZXR1cm5zIHRydWUgd2hlbiBtaW5Xb3JrZXJzIGhhcyBhIHZhbGlkIHZhbHVlXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlTWluV29ya2VycyhtaW5Xb3JrZXJzKSB7XG4gIGlmICghaXNOdW1iZXIobWluV29ya2VycykgfHwgIWlzSW50ZWdlcihtaW5Xb3JrZXJzKSB8fCBtaW5Xb3JrZXJzIDwgMCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ09wdGlvbiBtaW5Xb3JrZXJzIG11c3QgYmUgYW4gaW50ZWdlciBudW1iZXIgPj0gMCcpO1xuICB9XG59XG5cbi8qKlxuICogVGVzdCB3aGV0aGVyIGEgdmFyaWFibGUgaXMgYSBudW1iZXJcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm5zIHtib29sZWFufSByZXR1cm5zIHRydWUgd2hlbiB2YWx1ZSBpcyBhIG51bWJlclxuICovXG5mdW5jdGlvbiBpc051bWJlcih2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJztcbn1cblxuLyoqXG4gKiBUZXN0IHdoZXRoZXIgYSBudW1iZXIgaXMgYW4gaW50ZWdlclxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyB0cnVlIGlmIHZhbHVlIGlzIGFuIGludGVnZXJcbiAqL1xuZnVuY3Rpb24gaXNJbnRlZ2VyKHZhbHVlKSB7XG4gIHJldHVybiBNYXRoLnJvdW5kKHZhbHVlKSA9PSB2YWx1ZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBQb29sO1xuIiwgIi8qKlxuICogVGhlIGhlbHBlciBjbGFzcyBmb3IgdHJhbnNmZXJyaW5nIGRhdGEgZnJvbSB0aGUgd29ya2VyIHRvIHRoZSBtYWluIHRocmVhZC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gbWVzc2FnZSBUaGUgb2JqZWN0IHRvIGRlbGl2ZXIgdG8gdGhlIG1haW4gdGhyZWFkLlxuICogQHBhcmFtIHtPYmplY3RbXX0gdHJhbnNmZXIgQW4gYXJyYXkgb2YgdHJhbnNmZXJhYmxlIE9iamVjdHMgdG8gdHJhbnNmZXIgb3duZXJzaGlwIG9mLlxuICovXG5mdW5jdGlvbiBUcmFuc2ZlcihtZXNzYWdlLCB0cmFuc2Zlcikge1xuICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICB0aGlzLnRyYW5zZmVyID0gdHJhbnNmZXI7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gVHJhbnNmZXI7XG4iLCAiLyoqXG4gKiB3b3JrZXIgbXVzdCBiZSBzdGFydGVkIGFzIGEgY2hpbGQgcHJvY2VzcyBvciBhIHdlYiB3b3JrZXIuXG4gKiBJdCBsaXN0ZW5zIGZvciBSUEMgbWVzc2FnZXMgZnJvbSB0aGUgcGFyZW50IHByb2Nlc3MuXG4gKi9cbnZhciBUcmFuc2ZlciA9IHJlcXVpcmUoJy4vdHJhbnNmZXInKTtcblxuLy8gc291cmNlIG9mIGluc3BpcmF0aW9uOiBodHRwczovL2dpdGh1Yi5jb20vc2luZHJlc29yaHVzL3JlcXVpcmUtZm9vbC13ZWJwYWNrXG52YXIgcmVxdWlyZUZvb2xXZWJwYWNrID0gZXZhbChcbiAgICAndHlwZW9mIHJlcXVpcmUgIT09IFxcJ3VuZGVmaW5lZFxcJycgK1xuICAgICcgPyByZXF1aXJlJyArXG4gICAgJyA6IGZ1bmN0aW9uIChtb2R1bGUpIHsgdGhyb3cgbmV3IEVycm9yKFxcJ01vZHVsZSBcIiArIG1vZHVsZSArIFwiIG5vdCBmb3VuZC5cXCcpIH0nXG4pO1xuXG4vKipcbiAqIFNwZWNpYWwgbWVzc2FnZSBzZW50IGJ5IHBhcmVudCB3aGljaCBjYXVzZXMgdGhlIHdvcmtlciB0byB0ZXJtaW5hdGUgaXRzZWxmLlxuICogTm90IGEgXCJtZXNzYWdlIG9iamVjdFwiOyB0aGlzIHN0cmluZyBpcyB0aGUgZW50aXJlIG1lc3NhZ2UuXG4gKi9cbnZhciBURVJNSU5BVEVfTUVUSE9EX0lEID0gJ19fd29ya2VycG9vbC10ZXJtaW5hdGVfXyc7XG5cbi8vIHZhciBub2RlT1NQbGF0Zm9ybSA9IHJlcXVpcmUoJy4vZW52aXJvbm1lbnQnKS5ub2RlT1NQbGF0Zm9ybTtcblxuLy8gY3JlYXRlIGEgd29ya2VyIEFQSSBmb3Igc2VuZGluZyBhbmQgcmVjZWl2aW5nIG1lc3NhZ2VzIHdoaWNoIHdvcmtzIGJvdGggb25cbi8vIG5vZGUuanMgYW5kIGluIHRoZSBicm93c2VyXG52YXIgd29ya2VyID0ge1xuICBleGl0OiBmdW5jdGlvbigpIHt9XG59O1xuaWYgKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgcG9zdE1lc3NhZ2UgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGFkZEV2ZW50TGlzdGVuZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgLy8gd29ya2VyIGluIHRoZSBicm93c2VyXG4gIHdvcmtlci5vbiA9IGZ1bmN0aW9uIChldmVudCwgY2FsbGJhY2spIHtcbiAgICBhZGRFdmVudExpc3RlbmVyKGV2ZW50LCBmdW5jdGlvbiAobWVzc2FnZSkge1xuICAgICAgY2FsbGJhY2sobWVzc2FnZS5kYXRhKTtcbiAgICB9KVxuICB9O1xuICB3b3JrZXIuc2VuZCA9IGZ1bmN0aW9uIChtZXNzYWdlKSB7XG4gICAgcG9zdE1lc3NhZ2UobWVzc2FnZSk7XG4gIH07XG59XG5lbHNlIGlmICh0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgLy8gbm9kZS5qc1xuXG4gIHZhciBXb3JrZXJUaHJlYWRzO1xuICB0cnkge1xuICAgIFdvcmtlclRocmVhZHMgPSByZXF1aXJlRm9vbFdlYnBhY2soJ3dvcmtlcl90aHJlYWRzJyk7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBpZiAodHlwZW9mIGVycm9yID09PSAnb2JqZWN0JyAmJiBlcnJvciAhPT0gbnVsbCAmJiBlcnJvci5jb2RlID09PSAnTU9EVUxFX05PVF9GT1VORCcpIHtcbiAgICAgIC8vIG5vIHdvcmtlcl90aHJlYWRzLCBmYWxsYmFjayB0byBzdWItcHJvY2VzcyBiYXNlZCB3b3JrZXJzXG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIGlmIChXb3JrZXJUaHJlYWRzICYmXG4gICAgLyogaWYgdGhlcmUgaXMgYSBwYXJlbnRQb3J0LCB3ZSBhcmUgaW4gYSBXb3JrZXJUaHJlYWQgKi9cbiAgICBXb3JrZXJUaHJlYWRzLnBhcmVudFBvcnQgIT09IG51bGwpIHtcbiAgICB2YXIgcGFyZW50UG9ydCAgPSBXb3JrZXJUaHJlYWRzLnBhcmVudFBvcnQ7XG4gICAgd29ya2VyLnNlbmQgPSBwYXJlbnRQb3J0LnBvc3RNZXNzYWdlLmJpbmQocGFyZW50UG9ydCk7XG4gICAgd29ya2VyLm9uID0gcGFyZW50UG9ydC5vbi5iaW5kKHBhcmVudFBvcnQpO1xuICAgIHdvcmtlci5leGl0ID0gcHJvY2Vzcy5leGl0LmJpbmQocHJvY2Vzcyk7XG4gIH0gZWxzZSB7XG4gICAgd29ya2VyLm9uID0gcHJvY2Vzcy5vbi5iaW5kKHByb2Nlc3MpO1xuICAgIC8vIGlnbm9yZSB0cmFuc2ZlciBhcmd1bWVudCBzaW5jZSBpdCBpcyBub3Qgc3VwcG9ydGVkIGJ5IHByb2Nlc3NcbiAgICB3b3JrZXIuc2VuZCA9IGZ1bmN0aW9uIChtZXNzYWdlKSB7XG4gICAgICBwcm9jZXNzLnNlbmQobWVzc2FnZSk7XG4gICAgfTtcbiAgICAvLyByZWdpc3RlciBkaXNjb25uZWN0IGhhbmRsZXIgb25seSBmb3Igc3VicHJvY2VzcyB3b3JrZXIgdG8gZXhpdCB3aGVuIHBhcmVudCBpcyBraWxsZWQgdW5leHBlY3RlZGx5XG4gICAgd29ya2VyLm9uKCdkaXNjb25uZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH0pO1xuICAgIHdvcmtlci5leGl0ID0gcHJvY2Vzcy5leGl0LmJpbmQocHJvY2Vzcyk7XG4gIH1cbn1cbmVsc2Uge1xuICB0aHJvdyBuZXcgRXJyb3IoJ1NjcmlwdCBtdXN0IGJlIGV4ZWN1dGVkIGFzIGEgd29ya2VyJyk7XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRFcnJvcihlcnJvcikge1xuICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZXJyb3IpLnJlZHVjZShmdW5jdGlvbihwcm9kdWN0LCBuYW1lKSB7XG4gICAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm9kdWN0LCBuYW1lLCB7XG5cdHZhbHVlOiBlcnJvcltuYW1lXSxcblx0ZW51bWVyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9LCB7fSk7XG59XG5cbi8qKlxuICogVGVzdCB3aGV0aGVyIGEgdmFsdWUgaXMgYSBQcm9taXNlIHZpYSBkdWNrIHR5cGluZy5cbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIHRydWUgd2hlbiBnaXZlbiB2YWx1ZSBpcyBhbiBvYmplY3RcbiAqICAgICAgICAgICAgICAgICAgICBoYXZpbmcgZnVuY3Rpb25zIGB0aGVuYCBhbmQgYGNhdGNoYC5cbiAqL1xuZnVuY3Rpb24gaXNQcm9taXNlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAmJiAodHlwZW9mIHZhbHVlLnRoZW4gPT09ICdmdW5jdGlvbicpICYmICh0eXBlb2YgdmFsdWUuY2F0Y2ggPT09ICdmdW5jdGlvbicpO1xufVxuXG4vLyBmdW5jdGlvbnMgYXZhaWxhYmxlIGV4dGVybmFsbHlcbndvcmtlci5tZXRob2RzID0ge307XG5cbi8qKlxuICogRXhlY3V0ZSBhIGZ1bmN0aW9uIHdpdGggcHJvdmlkZWQgYXJndW1lbnRzXG4gKiBAcGFyYW0ge1N0cmluZ30gZm4gICAgIFN0cmluZ2lmaWVkIGZ1bmN0aW9uXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJnc10gIEZ1bmN0aW9uIGFyZ3VtZW50c1xuICogQHJldHVybnMgeyp9XG4gKi9cbndvcmtlci5tZXRob2RzLnJ1biA9IGZ1bmN0aW9uIHJ1bihmbiwgYXJncykge1xuICB2YXIgZiA9IG5ldyBGdW5jdGlvbigncmV0dXJuICgnICsgZm4gKyAnKS5hcHBseShudWxsLCBhcmd1bWVudHMpOycpO1xuICByZXR1cm4gZi5hcHBseShmLCBhcmdzKTtcbn07XG5cbi8qKlxuICogR2V0IGEgbGlzdCB3aXRoIG1ldGhvZHMgYXZhaWxhYmxlIG9uIHRoaXMgd29ya2VyXG4gKiBAcmV0dXJuIHtTdHJpbmdbXX0gbWV0aG9kc1xuICovXG53b3JrZXIubWV0aG9kcy5tZXRob2RzID0gZnVuY3Rpb24gbWV0aG9kcygpIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKHdvcmtlci5tZXRob2RzKTtcbn07XG5cbi8qKlxuICogQ3VzdG9tIGhhbmRsZXIgZm9yIHdoZW4gdGhlIHdvcmtlciBpcyB0ZXJtaW5hdGVkLlxuICovXG53b3JrZXIudGVybWluYXRpb25IYW5kbGVyID0gdW5kZWZpbmVkO1xuXG4vKipcbiAqIENsZWFudXAgYW5kIGV4aXQgdGhlIHdvcmtlci5cbiAqIEBwYXJhbSB7TnVtYmVyfSBjb2RlIFxuICogQHJldHVybnMgXG4gKi9cbndvcmtlci5jbGVhbnVwQW5kRXhpdCA9IGZ1bmN0aW9uKGNvZGUpIHtcbiAgdmFyIF9leGl0ID0gZnVuY3Rpb24oKSB7XG4gICAgd29ya2VyLmV4aXQoY29kZSk7XG4gIH1cblxuICBpZighd29ya2VyLnRlcm1pbmF0aW9uSGFuZGxlcikge1xuICAgIHJldHVybiBfZXhpdCgpO1xuICB9XG5cbiAgdmFyIHJlc3VsdCA9IHdvcmtlci50ZXJtaW5hdGlvbkhhbmRsZXIoY29kZSk7XG4gIGlmIChpc1Byb21pc2UocmVzdWx0KSkge1xuICAgIHJlc3VsdC50aGVuKF9leGl0LCBfZXhpdCk7XG4gIH0gZWxzZSB7XG4gICAgX2V4aXQoKTtcbiAgfVxufVxuXG52YXIgY3VycmVudFJlcXVlc3RJZCA9IG51bGw7XG5cbndvcmtlci5vbignbWVzc2FnZScsIGZ1bmN0aW9uIChyZXF1ZXN0KSB7XG4gIGlmIChyZXF1ZXN0ID09PSBURVJNSU5BVEVfTUVUSE9EX0lEKSB7XG4gICAgcmV0dXJuIHdvcmtlci5jbGVhbnVwQW5kRXhpdCgwKTtcbiAgfVxuICB0cnkge1xuICAgIHZhciBtZXRob2QgPSB3b3JrZXIubWV0aG9kc1tyZXF1ZXN0Lm1ldGhvZF07XG5cbiAgICBpZiAobWV0aG9kKSB7XG4gICAgICBjdXJyZW50UmVxdWVzdElkID0gcmVxdWVzdC5pZDtcbiAgICAgIFxuICAgICAgLy8gZXhlY3V0ZSB0aGUgZnVuY3Rpb25cbiAgICAgIHZhciByZXN1bHQgPSBtZXRob2QuYXBwbHkobWV0aG9kLCByZXF1ZXN0LnBhcmFtcyk7XG5cbiAgICAgIGlmIChpc1Byb21pc2UocmVzdWx0KSkge1xuICAgICAgICAvLyBwcm9taXNlIHJldHVybmVkLCByZXNvbHZlIHRoaXMgYW5kIHRoZW4gcmV0dXJuXG4gICAgICAgIHJlc3VsdFxuICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgVHJhbnNmZXIpIHtcbiAgICAgICAgICAgICAgICB3b3JrZXIuc2VuZCh7XG4gICAgICAgICAgICAgICAgICBpZDogcmVxdWVzdC5pZCxcbiAgICAgICAgICAgICAgICAgIHJlc3VsdDogcmVzdWx0Lm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICBlcnJvcjogbnVsbFxuICAgICAgICAgICAgICAgIH0sIHJlc3VsdC50cmFuc2Zlcik7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgd29ya2VyLnNlbmQoe1xuICAgICAgICAgICAgICAgICAgaWQ6IHJlcXVlc3QuaWQsXG4gICAgICAgICAgICAgICAgICByZXN1bHQ6IHJlc3VsdCxcbiAgICAgICAgICAgICAgICAgIGVycm9yOiBudWxsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY3VycmVudFJlcXVlc3RJZCA9IG51bGw7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgd29ya2VyLnNlbmQoe1xuICAgICAgICAgICAgICAgIGlkOiByZXF1ZXN0LmlkLFxuICAgICAgICAgICAgICAgIHJlc3VsdDogbnVsbCxcbiAgICAgICAgICAgICAgICBlcnJvcjogY29udmVydEVycm9yKGVycilcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGN1cnJlbnRSZXF1ZXN0SWQgPSBudWxsO1xuICAgICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgLy8gaW1tZWRpYXRlIHJlc3VsdFxuICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgVHJhbnNmZXIpIHtcbiAgICAgICAgICB3b3JrZXIuc2VuZCh7XG4gICAgICAgICAgICBpZDogcmVxdWVzdC5pZCxcbiAgICAgICAgICAgIHJlc3VsdDogcmVzdWx0Lm1lc3NhZ2UsXG4gICAgICAgICAgICBlcnJvcjogbnVsbFxuICAgICAgICAgIH0sIHJlc3VsdC50cmFuc2Zlcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgd29ya2VyLnNlbmQoe1xuICAgICAgICAgICAgaWQ6IHJlcXVlc3QuaWQsXG4gICAgICAgICAgICByZXN1bHQ6IHJlc3VsdCxcbiAgICAgICAgICAgIGVycm9yOiBudWxsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjdXJyZW50UmVxdWVzdElkID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gbWV0aG9kIFwiJyArIHJlcXVlc3QubWV0aG9kICsgJ1wiJyk7XG4gICAgfVxuICB9XG4gIGNhdGNoIChlcnIpIHtcbiAgICB3b3JrZXIuc2VuZCh7XG4gICAgICBpZDogcmVxdWVzdC5pZCxcbiAgICAgIHJlc3VsdDogbnVsbCxcbiAgICAgIGVycm9yOiBjb252ZXJ0RXJyb3IoZXJyKVxuICAgIH0pO1xuICB9XG59KTtcblxuLyoqXG4gKiBSZWdpc3RlciBtZXRob2RzIHRvIHRoZSB3b3JrZXJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbbWV0aG9kc11cbiAqIEBwYXJhbSB7V29ya2VyUmVnaXN0ZXJPcHRpb25zfSBbb3B0aW9uc11cbiAqL1xud29ya2VyLnJlZ2lzdGVyID0gZnVuY3Rpb24gKG1ldGhvZHMsIG9wdGlvbnMpIHtcblxuICBpZiAobWV0aG9kcykge1xuICAgIGZvciAodmFyIG5hbWUgaW4gbWV0aG9kcykge1xuICAgICAgaWYgKG1ldGhvZHMuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgICAgd29ya2VyLm1ldGhvZHNbbmFtZV0gPSBtZXRob2RzW25hbWVdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChvcHRpb25zKSB7XG4gICAgd29ya2VyLnRlcm1pbmF0aW9uSGFuZGxlciA9IG9wdGlvbnMub25UZXJtaW5hdGU7XG4gIH1cblxuICB3b3JrZXIuc2VuZCgncmVhZHknKTtcbn07XG5cbndvcmtlci5lbWl0ID0gZnVuY3Rpb24gKHBheWxvYWQpIHtcbiAgaWYgKGN1cnJlbnRSZXF1ZXN0SWQpIHtcbiAgICBpZiAocGF5bG9hZCBpbnN0YW5jZW9mIFRyYW5zZmVyKSB7XG4gICAgICB3b3JrZXIuc2VuZCh7XG4gICAgICAgIGlkOiBjdXJyZW50UmVxdWVzdElkLFxuICAgICAgICBpc0V2ZW50OiB0cnVlLFxuICAgICAgICBwYXlsb2FkOiBwYXlsb2FkLm1lc3NhZ2VcbiAgICAgIH0sIHBheWxvYWQudHJhbnNmZXIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHdvcmtlci5zZW5kKHtcbiAgICAgIGlkOiBjdXJyZW50UmVxdWVzdElkLFxuICAgICAgaXNFdmVudDogdHJ1ZSxcbiAgICAgIHBheWxvYWRcbiAgICB9KTtcbiAgfVxufTtcblxuaWYgKHR5cGVvZiBleHBvcnRzICE9PSAndW5kZWZpbmVkJykge1xuICBleHBvcnRzLmFkZCA9IHdvcmtlci5yZWdpc3RlcjtcbiAgZXhwb3J0cy5lbWl0ID0gd29ya2VyLmVtaXQ7XG59XG4iLCAidmFyIGVudmlyb25tZW50ID0gcmVxdWlyZSgnLi9lbnZpcm9ubWVudCcpO1xuXG4vKipcbiAqIENyZWF0ZSBhIG5ldyB3b3JrZXIgcG9vbFxuICogQHBhcmFtIHtzdHJpbmd9IFtzY3JpcHRdXG4gKiBAcGFyYW0ge1dvcmtlclBvb2xPcHRpb25zfSBbb3B0aW9uc11cbiAqIEByZXR1cm5zIHtQb29sfSBwb29sXG4gKi9cbmV4cG9ydHMucG9vbCA9IGZ1bmN0aW9uIHBvb2woc2NyaXB0LCBvcHRpb25zKSB7XG4gIHZhciBQb29sID0gcmVxdWlyZSgnLi9Qb29sJyk7XG5cbiAgcmV0dXJuIG5ldyBQb29sKHNjcmlwdCwgb3B0aW9ucyk7XG59O1xuXG4vKipcbiAqIENyZWF0ZSBhIHdvcmtlciBhbmQgb3B0aW9uYWxseSByZWdpc3RlciBhIHNldCBvZiBtZXRob2RzIHRvIHRoZSB3b3JrZXIuXG4gKiBAcGFyYW0ge09iamVjdH0gW21ldGhvZHNdXG4gKiBAcGFyYW0ge1dvcmtlclJlZ2lzdGVyT3B0aW9uc30gW29wdGlvbnNdXG4gKi9cbmV4cG9ydHMud29ya2VyID0gZnVuY3Rpb24gd29ya2VyKG1ldGhvZHMsIG9wdGlvbnMpIHtcbiAgdmFyIHdvcmtlciA9IHJlcXVpcmUoJy4vd29ya2VyJyk7XG4gIHdvcmtlci5hZGQobWV0aG9kcywgb3B0aW9ucyk7XG59O1xuXG4vKipcbiAqIFNlbmRzIGFuIGV2ZW50IHRvIHRoZSBwYXJlbnQgd29ya2VyIHBvb2wuXG4gKiBAcGFyYW0ge2FueX0gcGF5bG9hZCBcbiAqL1xuZXhwb3J0cy53b3JrZXJFbWl0ID0gZnVuY3Rpb24gd29ya2VyRW1pdChwYXlsb2FkKSB7XG4gIHZhciB3b3JrZXIgPSByZXF1aXJlKCcuL3dvcmtlcicpO1xuICB3b3JrZXIuZW1pdChwYXlsb2FkKTtcbn07XG5cbi8qKlxuICogQ3JlYXRlIGEgcHJvbWlzZS5cbiAqIEB0eXBlIHtQcm9taXNlfSBwcm9taXNlXG4gKi9cbmV4cG9ydHMuUHJvbWlzZSA9IHJlcXVpcmUoJy4vUHJvbWlzZScpO1xuXG4vKipcbiAqIENyZWF0ZSBhIHRyYW5zZmVyIG9iamVjdC5cbiAqIEB0eXBlIHtUcmFuc2Zlcn0gdHJhbnNmZXJcbiAqL1xuZXhwb3J0cy5UcmFuc2ZlciA9IHJlcXVpcmUoJy4vdHJhbnNmZXInKTtcblxuZXhwb3J0cy5wbGF0Zm9ybSA9IGVudmlyb25tZW50LnBsYXRmb3JtO1xuZXhwb3J0cy5pc01haW5UaHJlYWQgPSBlbnZpcm9ubWVudC5pc01haW5UaHJlYWQ7XG5leHBvcnRzLmNwdXMgPSBlbnZpcm9ubWVudC5jcHVzOyIsICJpbXBvcnQgeyBXcml0YWJsZSB9IGZyb20gJ3N0cmVhbSc7XG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gJ3V0aWwnO1xuaW1wb3J0ICogYXMgY2hhbGsgZnJvbSAnY2hhbGsnO1xuXG50eXBlIFN0eWxlRm4gPSAoc3RyOiBzdHJpbmcpID0+IHN0cmluZztcbmNvbnN0IHsgc3RkZXJyIH0gPSBwcm9jZXNzO1xuXG5jb25zdCBsb2dnZXIgPSAoc3RyZWFtOiBXcml0YWJsZSwgc3R5bGVzPzogU3R5bGVGbltdKSA9PiAoZm10OiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKSA9PiB7XG4gIGxldCBzdHIgPSB1dGlsLmZvcm1hdChmbXQsIC4uLmFyZ3MpO1xuICBpZiAoc3R5bGVzICYmIHN0eWxlcy5sZW5ndGgpIHtcbiAgICBzdHIgPSBzdHlsZXMucmVkdWNlKChhLCBzdHlsZSkgPT4gc3R5bGUoYSksIHN0cik7XG4gIH1cbiAgc3RyZWFtLndyaXRlKHN0ciArICdcXG4nKTtcbn07XG5cbmV4cG9ydCBjb25zdCBwcmludCA9IGxvZ2dlcihzdGRlcnIpO1xuZXhwb3J0IGNvbnN0IGVycm9yID0gbG9nZ2VyKHN0ZGVyciwgW2NoYWxrLnJlZF0pO1xuZXhwb3J0IGNvbnN0IHdhcm5pbmcgPSBsb2dnZXIoc3RkZXJyLCBbY2hhbGsueWVsbG93XSk7XG5leHBvcnQgY29uc3Qgc3VjY2VzcyA9IGxvZ2dlcihzdGRlcnIsIFtjaGFsay5ncmVlbl0pO1xuZXhwb3J0IGNvbnN0IGhpZ2hsaWdodCA9IGxvZ2dlcihzdGRlcnIsIFtjaGFsay5ib2xkXSk7XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmV4cG9ydHMuZnJvbUNhbGxiYWNrID0gZnVuY3Rpb24gKGZuKSB7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICBpZiAodHlwZW9mIGFyZ3NbYXJncy5sZW5ndGggLSAxXSA9PT0gJ2Z1bmN0aW9uJykgZm4uYXBwbHkodGhpcywgYXJncylcbiAgICBlbHNlIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGFyZ3MucHVzaCgoZXJyLCByZXMpID0+IChlcnIgIT0gbnVsbCkgPyByZWplY3QoZXJyKSA6IHJlc29sdmUocmVzKSlcbiAgICAgICAgZm4uYXBwbHkodGhpcywgYXJncylcbiAgICAgIH0pXG4gICAgfVxuICB9LCAnbmFtZScsIHsgdmFsdWU6IGZuLm5hbWUgfSlcbn1cblxuZXhwb3J0cy5mcm9tUHJvbWlzZSA9IGZ1bmN0aW9uIChmbikge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgY29uc3QgY2IgPSBhcmdzW2FyZ3MubGVuZ3RoIC0gMV1cbiAgICBpZiAodHlwZW9mIGNiICE9PSAnZnVuY3Rpb24nKSByZXR1cm4gZm4uYXBwbHkodGhpcywgYXJncylcbiAgICBlbHNlIHtcbiAgICAgIGFyZ3MucG9wKClcbiAgICAgIGZuLmFwcGx5KHRoaXMsIGFyZ3MpLnRoZW4ociA9PiBjYihudWxsLCByKSwgY2IpXG4gICAgfVxuICB9LCAnbmFtZScsIHsgdmFsdWU6IGZuLm5hbWUgfSlcbn1cbiIsICJ2YXIgY29uc3RhbnRzID0gcmVxdWlyZSgnY29uc3RhbnRzJylcblxudmFyIG9yaWdDd2QgPSBwcm9jZXNzLmN3ZFxudmFyIGN3ZCA9IG51bGxcblxudmFyIHBsYXRmb3JtID0gcHJvY2Vzcy5lbnYuR1JBQ0VGVUxfRlNfUExBVEZPUk0gfHwgcHJvY2Vzcy5wbGF0Zm9ybVxuXG5wcm9jZXNzLmN3ZCA9IGZ1bmN0aW9uKCkge1xuICBpZiAoIWN3ZClcbiAgICBjd2QgPSBvcmlnQ3dkLmNhbGwocHJvY2VzcylcbiAgcmV0dXJuIGN3ZFxufVxudHJ5IHtcbiAgcHJvY2Vzcy5jd2QoKVxufSBjYXRjaCAoZXIpIHt9XG5cbi8vIFRoaXMgY2hlY2sgaXMgbmVlZGVkIHVudGlsIG5vZGUuanMgMTIgaXMgcmVxdWlyZWRcbmlmICh0eXBlb2YgcHJvY2Vzcy5jaGRpciA9PT0gJ2Z1bmN0aW9uJykge1xuICB2YXIgY2hkaXIgPSBwcm9jZXNzLmNoZGlyXG4gIHByb2Nlc3MuY2hkaXIgPSBmdW5jdGlvbiAoZCkge1xuICAgIGN3ZCA9IG51bGxcbiAgICBjaGRpci5jYWxsKHByb2Nlc3MsIGQpXG4gIH1cbiAgaWYgKE9iamVjdC5zZXRQcm90b3R5cGVPZikgT2JqZWN0LnNldFByb3RvdHlwZU9mKHByb2Nlc3MuY2hkaXIsIGNoZGlyKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGNoXG5cbmZ1bmN0aW9uIHBhdGNoIChmcykge1xuICAvLyAocmUtKWltcGxlbWVudCBzb21lIHRoaW5ncyB0aGF0IGFyZSBrbm93biBidXN0ZWQgb3IgbWlzc2luZy5cblxuICAvLyBsY2htb2QsIGJyb2tlbiBwcmlvciB0byAwLjYuMlxuICAvLyBiYWNrLXBvcnQgdGhlIGZpeCBoZXJlLlxuICBpZiAoY29uc3RhbnRzLmhhc093blByb3BlcnR5KCdPX1NZTUxJTksnKSAmJlxuICAgICAgcHJvY2Vzcy52ZXJzaW9uLm1hdGNoKC9edjBcXC42XFwuWzAtMl18XnYwXFwuNVxcLi8pKSB7XG4gICAgcGF0Y2hMY2htb2QoZnMpXG4gIH1cblxuICAvLyBsdXRpbWVzIGltcGxlbWVudGF0aW9uLCBvciBuby1vcFxuICBpZiAoIWZzLmx1dGltZXMpIHtcbiAgICBwYXRjaEx1dGltZXMoZnMpXG4gIH1cblxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vaXNhYWNzL25vZGUtZ3JhY2VmdWwtZnMvaXNzdWVzLzRcbiAgLy8gQ2hvd24gc2hvdWxkIG5vdCBmYWlsIG9uIGVpbnZhbCBvciBlcGVybSBpZiBub24tcm9vdC5cbiAgLy8gSXQgc2hvdWxkIG5vdCBmYWlsIG9uIGVub3N5cyBldmVyLCBhcyB0aGlzIGp1c3QgaW5kaWNhdGVzXG4gIC8vIHRoYXQgYSBmcyBkb2Vzbid0IHN1cHBvcnQgdGhlIGludGVuZGVkIG9wZXJhdGlvbi5cblxuICBmcy5jaG93biA9IGNob3duRml4KGZzLmNob3duKVxuICBmcy5mY2hvd24gPSBjaG93bkZpeChmcy5mY2hvd24pXG4gIGZzLmxjaG93biA9IGNob3duRml4KGZzLmxjaG93bilcblxuICBmcy5jaG1vZCA9IGNobW9kRml4KGZzLmNobW9kKVxuICBmcy5mY2htb2QgPSBjaG1vZEZpeChmcy5mY2htb2QpXG4gIGZzLmxjaG1vZCA9IGNobW9kRml4KGZzLmxjaG1vZClcblxuICBmcy5jaG93blN5bmMgPSBjaG93bkZpeFN5bmMoZnMuY2hvd25TeW5jKVxuICBmcy5mY2hvd25TeW5jID0gY2hvd25GaXhTeW5jKGZzLmZjaG93blN5bmMpXG4gIGZzLmxjaG93blN5bmMgPSBjaG93bkZpeFN5bmMoZnMubGNob3duU3luYylcblxuICBmcy5jaG1vZFN5bmMgPSBjaG1vZEZpeFN5bmMoZnMuY2htb2RTeW5jKVxuICBmcy5mY2htb2RTeW5jID0gY2htb2RGaXhTeW5jKGZzLmZjaG1vZFN5bmMpXG4gIGZzLmxjaG1vZFN5bmMgPSBjaG1vZEZpeFN5bmMoZnMubGNobW9kU3luYylcblxuICBmcy5zdGF0ID0gc3RhdEZpeChmcy5zdGF0KVxuICBmcy5mc3RhdCA9IHN0YXRGaXgoZnMuZnN0YXQpXG4gIGZzLmxzdGF0ID0gc3RhdEZpeChmcy5sc3RhdClcblxuICBmcy5zdGF0U3luYyA9IHN0YXRGaXhTeW5jKGZzLnN0YXRTeW5jKVxuICBmcy5mc3RhdFN5bmMgPSBzdGF0Rml4U3luYyhmcy5mc3RhdFN5bmMpXG4gIGZzLmxzdGF0U3luYyA9IHN0YXRGaXhTeW5jKGZzLmxzdGF0U3luYylcblxuICAvLyBpZiBsY2htb2QvbGNob3duIGRvIG5vdCBleGlzdCwgdGhlbiBtYWtlIHRoZW0gbm8tb3BzXG4gIGlmIChmcy5jaG1vZCAmJiAhZnMubGNobW9kKSB7XG4gICAgZnMubGNobW9kID0gZnVuY3Rpb24gKHBhdGgsIG1vZGUsIGNiKSB7XG4gICAgICBpZiAoY2IpIHByb2Nlc3MubmV4dFRpY2soY2IpXG4gICAgfVxuICAgIGZzLmxjaG1vZFN5bmMgPSBmdW5jdGlvbiAoKSB7fVxuICB9XG4gIGlmIChmcy5jaG93biAmJiAhZnMubGNob3duKSB7XG4gICAgZnMubGNob3duID0gZnVuY3Rpb24gKHBhdGgsIHVpZCwgZ2lkLCBjYikge1xuICAgICAgaWYgKGNiKSBwcm9jZXNzLm5leHRUaWNrKGNiKVxuICAgIH1cbiAgICBmcy5sY2hvd25TeW5jID0gZnVuY3Rpb24gKCkge31cbiAgfVxuXG4gIC8vIG9uIFdpbmRvd3MsIEEvViBzb2Z0d2FyZSBjYW4gbG9jayB0aGUgZGlyZWN0b3J5LCBjYXVzaW5nIHRoaXNcbiAgLy8gdG8gZmFpbCB3aXRoIGFuIEVBQ0NFUyBvciBFUEVSTSBpZiB0aGUgZGlyZWN0b3J5IGNvbnRhaW5zIG5ld2x5XG4gIC8vIGNyZWF0ZWQgZmlsZXMuICBUcnkgYWdhaW4gb24gZmFpbHVyZSwgZm9yIHVwIHRvIDYwIHNlY29uZHMuXG5cbiAgLy8gU2V0IHRoZSB0aW1lb3V0IHRoaXMgbG9uZyBiZWNhdXNlIHNvbWUgV2luZG93cyBBbnRpLVZpcnVzLCBzdWNoIGFzIFBhcml0eVxuICAvLyBiaXQ5LCBtYXkgbG9jayBmaWxlcyBmb3IgdXAgdG8gYSBtaW51dGUsIGNhdXNpbmcgbnBtIHBhY2thZ2UgaW5zdGFsbFxuICAvLyBmYWlsdXJlcy4gQWxzbywgdGFrZSBjYXJlIHRvIHlpZWxkIHRoZSBzY2hlZHVsZXIuIFdpbmRvd3Mgc2NoZWR1bGluZyBnaXZlc1xuICAvLyBDUFUgdG8gYSBidXN5IGxvb3BpbmcgcHJvY2Vzcywgd2hpY2ggY2FuIGNhdXNlIHRoZSBwcm9ncmFtIGNhdXNpbmcgdGhlIGxvY2tcbiAgLy8gY29udGVudGlvbiB0byBiZSBzdGFydmVkIG9mIENQVSBieSBub2RlLCBzbyB0aGUgY29udGVudGlvbiBkb2Vzbid0IHJlc29sdmUuXG4gIGlmIChwbGF0Zm9ybSA9PT0gXCJ3aW4zMlwiKSB7XG4gICAgZnMucmVuYW1lID0gdHlwZW9mIGZzLnJlbmFtZSAhPT0gJ2Z1bmN0aW9uJyA/IGZzLnJlbmFtZVxuICAgIDogKGZ1bmN0aW9uIChmcyRyZW5hbWUpIHtcbiAgICAgIGZ1bmN0aW9uIHJlbmFtZSAoZnJvbSwgdG8sIGNiKSB7XG4gICAgICAgIHZhciBzdGFydCA9IERhdGUubm93KClcbiAgICAgICAgdmFyIGJhY2tvZmYgPSAwO1xuICAgICAgICBmcyRyZW5hbWUoZnJvbSwgdG8sIGZ1bmN0aW9uIENCIChlcikge1xuICAgICAgICAgIGlmIChlclxuICAgICAgICAgICAgICAmJiAoZXIuY29kZSA9PT0gXCJFQUNDRVNcIiB8fCBlci5jb2RlID09PSBcIkVQRVJNXCIgfHwgZXIuY29kZSA9PT0gXCJFQlVTWVwiKVxuICAgICAgICAgICAgICAmJiBEYXRlLm5vdygpIC0gc3RhcnQgPCA2MDAwMCkge1xuICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgZnMuc3RhdCh0bywgZnVuY3Rpb24gKHN0YXRlciwgc3QpIHtcbiAgICAgICAgICAgICAgICBpZiAoc3RhdGVyICYmIHN0YXRlci5jb2RlID09PSBcIkVOT0VOVFwiKVxuICAgICAgICAgICAgICAgICAgZnMkcmVuYW1lKGZyb20sIHRvLCBDQik7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgY2IoZXIpXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9LCBiYWNrb2ZmKVxuICAgICAgICAgICAgaWYgKGJhY2tvZmYgPCAxMDApXG4gICAgICAgICAgICAgIGJhY2tvZmYgKz0gMTA7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChjYikgY2IoZXIpXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBpZiAoT2JqZWN0LnNldFByb3RvdHlwZU9mKSBPYmplY3Quc2V0UHJvdG90eXBlT2YocmVuYW1lLCBmcyRyZW5hbWUpXG4gICAgICByZXR1cm4gcmVuYW1lXG4gICAgfSkoZnMucmVuYW1lKVxuICB9XG5cbiAgLy8gaWYgcmVhZCgpIHJldHVybnMgRUFHQUlOLCB0aGVuIGp1c3QgdHJ5IGl0IGFnYWluLlxuICBmcy5yZWFkID0gdHlwZW9mIGZzLnJlYWQgIT09ICdmdW5jdGlvbicgPyBmcy5yZWFkXG4gIDogKGZ1bmN0aW9uIChmcyRyZWFkKSB7XG4gICAgZnVuY3Rpb24gcmVhZCAoZmQsIGJ1ZmZlciwgb2Zmc2V0LCBsZW5ndGgsIHBvc2l0aW9uLCBjYWxsYmFja18pIHtcbiAgICAgIHZhciBjYWxsYmFja1xuICAgICAgaWYgKGNhbGxiYWNrXyAmJiB0eXBlb2YgY2FsbGJhY2tfID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHZhciBlYWdDb3VudGVyID0gMFxuICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uIChlciwgXywgX18pIHtcbiAgICAgICAgICBpZiAoZXIgJiYgZXIuY29kZSA9PT0gJ0VBR0FJTicgJiYgZWFnQ291bnRlciA8IDEwKSB7XG4gICAgICAgICAgICBlYWdDb3VudGVyICsrXG4gICAgICAgICAgICByZXR1cm4gZnMkcmVhZC5jYWxsKGZzLCBmZCwgYnVmZmVyLCBvZmZzZXQsIGxlbmd0aCwgcG9zaXRpb24sIGNhbGxiYWNrKVxuICAgICAgICAgIH1cbiAgICAgICAgICBjYWxsYmFja18uYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZnMkcmVhZC5jYWxsKGZzLCBmZCwgYnVmZmVyLCBvZmZzZXQsIGxlbmd0aCwgcG9zaXRpb24sIGNhbGxiYWNrKVxuICAgIH1cblxuICAgIC8vIFRoaXMgZW5zdXJlcyBgdXRpbC5wcm9taXNpZnlgIHdvcmtzIGFzIGl0IGRvZXMgZm9yIG5hdGl2ZSBgZnMucmVhZGAuXG4gICAgaWYgKE9iamVjdC5zZXRQcm90b3R5cGVPZikgT2JqZWN0LnNldFByb3RvdHlwZU9mKHJlYWQsIGZzJHJlYWQpXG4gICAgcmV0dXJuIHJlYWRcbiAgfSkoZnMucmVhZClcblxuICBmcy5yZWFkU3luYyA9IHR5cGVvZiBmcy5yZWFkU3luYyAhPT0gJ2Z1bmN0aW9uJyA/IGZzLnJlYWRTeW5jXG4gIDogKGZ1bmN0aW9uIChmcyRyZWFkU3luYykgeyByZXR1cm4gZnVuY3Rpb24gKGZkLCBidWZmZXIsIG9mZnNldCwgbGVuZ3RoLCBwb3NpdGlvbikge1xuICAgIHZhciBlYWdDb3VudGVyID0gMFxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gZnMkcmVhZFN5bmMuY2FsbChmcywgZmQsIGJ1ZmZlciwgb2Zmc2V0LCBsZW5ndGgsIHBvc2l0aW9uKVxuICAgICAgfSBjYXRjaCAoZXIpIHtcbiAgICAgICAgaWYgKGVyLmNvZGUgPT09ICdFQUdBSU4nICYmIGVhZ0NvdW50ZXIgPCAxMCkge1xuICAgICAgICAgIGVhZ0NvdW50ZXIgKytcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIHRocm93IGVyXG4gICAgICB9XG4gICAgfVxuICB9fSkoZnMucmVhZFN5bmMpXG5cbiAgZnVuY3Rpb24gcGF0Y2hMY2htb2QgKGZzKSB7XG4gICAgZnMubGNobW9kID0gZnVuY3Rpb24gKHBhdGgsIG1vZGUsIGNhbGxiYWNrKSB7XG4gICAgICBmcy5vcGVuKCBwYXRoXG4gICAgICAgICAgICAgLCBjb25zdGFudHMuT19XUk9OTFkgfCBjb25zdGFudHMuT19TWU1MSU5LXG4gICAgICAgICAgICAgLCBtb2RlXG4gICAgICAgICAgICAgLCBmdW5jdGlvbiAoZXJyLCBmZCkge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgaWYgKGNhbGxiYWNrKSBjYWxsYmFjayhlcnIpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgLy8gcHJlZmVyIHRvIHJldHVybiB0aGUgY2htb2QgZXJyb3IsIGlmIG9uZSBvY2N1cnMsXG4gICAgICAgIC8vIGJ1dCBzdGlsbCB0cnkgdG8gY2xvc2UsIGFuZCByZXBvcnQgY2xvc2luZyBlcnJvcnMgaWYgdGhleSBvY2N1ci5cbiAgICAgICAgZnMuZmNobW9kKGZkLCBtb2RlLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgZnMuY2xvc2UoZmQsIGZ1bmN0aW9uKGVycjIpIHtcbiAgICAgICAgICAgIGlmIChjYWxsYmFjaykgY2FsbGJhY2soZXJyIHx8IGVycjIpXG4gICAgICAgICAgfSlcbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgZnMubGNobW9kU3luYyA9IGZ1bmN0aW9uIChwYXRoLCBtb2RlKSB7XG4gICAgICB2YXIgZmQgPSBmcy5vcGVuU3luYyhwYXRoLCBjb25zdGFudHMuT19XUk9OTFkgfCBjb25zdGFudHMuT19TWU1MSU5LLCBtb2RlKVxuXG4gICAgICAvLyBwcmVmZXIgdG8gcmV0dXJuIHRoZSBjaG1vZCBlcnJvciwgaWYgb25lIG9jY3VycyxcbiAgICAgIC8vIGJ1dCBzdGlsbCB0cnkgdG8gY2xvc2UsIGFuZCByZXBvcnQgY2xvc2luZyBlcnJvcnMgaWYgdGhleSBvY2N1ci5cbiAgICAgIHZhciB0aHJldyA9IHRydWVcbiAgICAgIHZhciByZXRcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldCA9IGZzLmZjaG1vZFN5bmMoZmQsIG1vZGUpXG4gICAgICAgIHRocmV3ID0gZmFsc2VcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmICh0aHJldykge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmcy5jbG9zZVN5bmMoZmQpXG4gICAgICAgICAgfSBjYXRjaCAoZXIpIHt9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZnMuY2xvc2VTeW5jKGZkKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmV0XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcGF0Y2hMdXRpbWVzIChmcykge1xuICAgIGlmIChjb25zdGFudHMuaGFzT3duUHJvcGVydHkoXCJPX1NZTUxJTktcIikgJiYgZnMuZnV0aW1lcykge1xuICAgICAgZnMubHV0aW1lcyA9IGZ1bmN0aW9uIChwYXRoLCBhdCwgbXQsIGNiKSB7XG4gICAgICAgIGZzLm9wZW4ocGF0aCwgY29uc3RhbnRzLk9fU1lNTElOSywgZnVuY3Rpb24gKGVyLCBmZCkge1xuICAgICAgICAgIGlmIChlcikge1xuICAgICAgICAgICAgaWYgKGNiKSBjYihlcilcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cbiAgICAgICAgICBmcy5mdXRpbWVzKGZkLCBhdCwgbXQsIGZ1bmN0aW9uIChlcikge1xuICAgICAgICAgICAgZnMuY2xvc2UoZmQsIGZ1bmN0aW9uIChlcjIpIHtcbiAgICAgICAgICAgICAgaWYgKGNiKSBjYihlciB8fCBlcjIpXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGZzLmx1dGltZXNTeW5jID0gZnVuY3Rpb24gKHBhdGgsIGF0LCBtdCkge1xuICAgICAgICB2YXIgZmQgPSBmcy5vcGVuU3luYyhwYXRoLCBjb25zdGFudHMuT19TWU1MSU5LKVxuICAgICAgICB2YXIgcmV0XG4gICAgICAgIHZhciB0aHJldyA9IHRydWVcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXQgPSBmcy5mdXRpbWVzU3luYyhmZCwgYXQsIG10KVxuICAgICAgICAgIHRocmV3ID0gZmFsc2VcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBpZiAodGhyZXcpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGZzLmNsb3NlU3luYyhmZClcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVyKSB7fVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmcy5jbG9zZVN5bmMoZmQpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXRcbiAgICAgIH1cblxuICAgIH0gZWxzZSBpZiAoZnMuZnV0aW1lcykge1xuICAgICAgZnMubHV0aW1lcyA9IGZ1bmN0aW9uIChfYSwgX2IsIF9jLCBjYikgeyBpZiAoY2IpIHByb2Nlc3MubmV4dFRpY2soY2IpIH1cbiAgICAgIGZzLmx1dGltZXNTeW5jID0gZnVuY3Rpb24gKCkge31cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjaG1vZEZpeCAob3JpZykge1xuICAgIGlmICghb3JpZykgcmV0dXJuIG9yaWdcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwgbW9kZSwgY2IpIHtcbiAgICAgIHJldHVybiBvcmlnLmNhbGwoZnMsIHRhcmdldCwgbW9kZSwgZnVuY3Rpb24gKGVyKSB7XG4gICAgICAgIGlmIChjaG93bkVyT2soZXIpKSBlciA9IG51bGxcbiAgICAgICAgaWYgKGNiKSBjYi5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNobW9kRml4U3luYyAob3JpZykge1xuICAgIGlmICghb3JpZykgcmV0dXJuIG9yaWdcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwgbW9kZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG9yaWcuY2FsbChmcywgdGFyZ2V0LCBtb2RlKVxuICAgICAgfSBjYXRjaCAoZXIpIHtcbiAgICAgICAgaWYgKCFjaG93bkVyT2soZXIpKSB0aHJvdyBlclxuICAgICAgfVxuICAgIH1cbiAgfVxuXG5cbiAgZnVuY3Rpb24gY2hvd25GaXggKG9yaWcpIHtcbiAgICBpZiAoIW9yaWcpIHJldHVybiBvcmlnXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIHVpZCwgZ2lkLCBjYikge1xuICAgICAgcmV0dXJuIG9yaWcuY2FsbChmcywgdGFyZ2V0LCB1aWQsIGdpZCwgZnVuY3Rpb24gKGVyKSB7XG4gICAgICAgIGlmIChjaG93bkVyT2soZXIpKSBlciA9IG51bGxcbiAgICAgICAgaWYgKGNiKSBjYi5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNob3duRml4U3luYyAob3JpZykge1xuICAgIGlmICghb3JpZykgcmV0dXJuIG9yaWdcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwgdWlkLCBnaWQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBvcmlnLmNhbGwoZnMsIHRhcmdldCwgdWlkLCBnaWQpXG4gICAgICB9IGNhdGNoIChlcikge1xuICAgICAgICBpZiAoIWNob3duRXJPayhlcikpIHRocm93IGVyXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gc3RhdEZpeCAob3JpZykge1xuICAgIGlmICghb3JpZykgcmV0dXJuIG9yaWdcbiAgICAvLyBPbGRlciB2ZXJzaW9ucyBvZiBOb2RlIGVycm9uZW91c2x5IHJldHVybmVkIHNpZ25lZCBpbnRlZ2VycyBmb3JcbiAgICAvLyB1aWQgKyBnaWQuXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIG9wdGlvbnMsIGNiKSB7XG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY2IgPSBvcHRpb25zXG4gICAgICAgIG9wdGlvbnMgPSBudWxsXG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBjYWxsYmFjayAoZXIsIHN0YXRzKSB7XG4gICAgICAgIGlmIChzdGF0cykge1xuICAgICAgICAgIGlmIChzdGF0cy51aWQgPCAwKSBzdGF0cy51aWQgKz0gMHgxMDAwMDAwMDBcbiAgICAgICAgICBpZiAoc3RhdHMuZ2lkIDwgMCkgc3RhdHMuZ2lkICs9IDB4MTAwMDAwMDAwXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNiKSBjYi5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICB9XG4gICAgICByZXR1cm4gb3B0aW9ucyA/IG9yaWcuY2FsbChmcywgdGFyZ2V0LCBvcHRpb25zLCBjYWxsYmFjaylcbiAgICAgICAgOiBvcmlnLmNhbGwoZnMsIHRhcmdldCwgY2FsbGJhY2spXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gc3RhdEZpeFN5bmMgKG9yaWcpIHtcbiAgICBpZiAoIW9yaWcpIHJldHVybiBvcmlnXG4gICAgLy8gT2xkZXIgdmVyc2lvbnMgb2YgTm9kZSBlcnJvbmVvdXNseSByZXR1cm5lZCBzaWduZWQgaW50ZWdlcnMgZm9yXG4gICAgLy8gdWlkICsgZ2lkLlxuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBvcHRpb25zKSB7XG4gICAgICB2YXIgc3RhdHMgPSBvcHRpb25zID8gb3JpZy5jYWxsKGZzLCB0YXJnZXQsIG9wdGlvbnMpXG4gICAgICAgIDogb3JpZy5jYWxsKGZzLCB0YXJnZXQpXG4gICAgICBpZiAoc3RhdHMpIHtcbiAgICAgICAgaWYgKHN0YXRzLnVpZCA8IDApIHN0YXRzLnVpZCArPSAweDEwMDAwMDAwMFxuICAgICAgICBpZiAoc3RhdHMuZ2lkIDwgMCkgc3RhdHMuZ2lkICs9IDB4MTAwMDAwMDAwXG4gICAgICB9XG4gICAgICByZXR1cm4gc3RhdHM7XG4gICAgfVxuICB9XG5cbiAgLy8gRU5PU1lTIG1lYW5zIHRoYXQgdGhlIGZzIGRvZXNuJ3Qgc3VwcG9ydCB0aGUgb3AuIEp1c3QgaWdub3JlXG4gIC8vIHRoYXQsIGJlY2F1c2UgaXQgZG9lc24ndCBtYXR0ZXIuXG4gIC8vXG4gIC8vIGlmIHRoZXJlJ3Mgbm8gZ2V0dWlkLCBvciBpZiBnZXR1aWQoKSBpcyBzb21ldGhpbmcgb3RoZXJcbiAgLy8gdGhhbiAwLCBhbmQgdGhlIGVycm9yIGlzIEVJTlZBTCBvciBFUEVSTSwgdGhlbiBqdXN0IGlnbm9yZVxuICAvLyBpdC5cbiAgLy9cbiAgLy8gVGhpcyBzcGVjaWZpYyBjYXNlIGlzIGEgc2lsZW50IGZhaWx1cmUgaW4gY3AsIGluc3RhbGwsIHRhcixcbiAgLy8gYW5kIG1vc3Qgb3RoZXIgdW5peCB0b29scyB0aGF0IG1hbmFnZSBwZXJtaXNzaW9ucy5cbiAgLy9cbiAgLy8gV2hlbiBydW5uaW5nIGFzIHJvb3QsIG9yIGlmIG90aGVyIHR5cGVzIG9mIGVycm9ycyBhcmVcbiAgLy8gZW5jb3VudGVyZWQsIHRoZW4gaXQncyBzdHJpY3QuXG4gIGZ1bmN0aW9uIGNob3duRXJPayAoZXIpIHtcbiAgICBpZiAoIWVyKVxuICAgICAgcmV0dXJuIHRydWVcblxuICAgIGlmIChlci5jb2RlID09PSBcIkVOT1NZU1wiKVxuICAgICAgcmV0dXJuIHRydWVcblxuICAgIHZhciBub25yb290ID0gIXByb2Nlc3MuZ2V0dWlkIHx8IHByb2Nlc3MuZ2V0dWlkKCkgIT09IDBcbiAgICBpZiAobm9ucm9vdCkge1xuICAgICAgaWYgKGVyLmNvZGUgPT09IFwiRUlOVkFMXCIgfHwgZXIuY29kZSA9PT0gXCJFUEVSTVwiKVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG4iLCAidmFyIFN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbScpLlN0cmVhbVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxlZ2FjeVxuXG5mdW5jdGlvbiBsZWdhY3kgKGZzKSB7XG4gIHJldHVybiB7XG4gICAgUmVhZFN0cmVhbTogUmVhZFN0cmVhbSxcbiAgICBXcml0ZVN0cmVhbTogV3JpdGVTdHJlYW1cbiAgfVxuXG4gIGZ1bmN0aW9uIFJlYWRTdHJlYW0gKHBhdGgsIG9wdGlvbnMpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUmVhZFN0cmVhbSkpIHJldHVybiBuZXcgUmVhZFN0cmVhbShwYXRoLCBvcHRpb25zKTtcblxuICAgIFN0cmVhbS5jYWxsKHRoaXMpO1xuXG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgdGhpcy5wYXRoID0gcGF0aDtcbiAgICB0aGlzLmZkID0gbnVsbDtcbiAgICB0aGlzLnJlYWRhYmxlID0gdHJ1ZTtcbiAgICB0aGlzLnBhdXNlZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5mbGFncyA9ICdyJztcbiAgICB0aGlzLm1vZGUgPSA0Mzg7IC8qPTA2NjYqL1xuICAgIHRoaXMuYnVmZmVyU2l6ZSA9IDY0ICogMTAyNDtcblxuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgLy8gTWl4aW4gb3B0aW9ucyBpbnRvIHRoaXNcbiAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9wdGlvbnMpO1xuICAgIGZvciAodmFyIGluZGV4ID0gMCwgbGVuZ3RoID0ga2V5cy5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpbmRleF07XG4gICAgICB0aGlzW2tleV0gPSBvcHRpb25zW2tleV07XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZW5jb2RpbmcpIHRoaXMuc2V0RW5jb2RpbmcodGhpcy5lbmNvZGluZyk7XG5cbiAgICBpZiAodGhpcy5zdGFydCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoJ251bWJlcicgIT09IHR5cGVvZiB0aGlzLnN0YXJ0KSB7XG4gICAgICAgIHRocm93IFR5cGVFcnJvcignc3RhcnQgbXVzdCBiZSBhIE51bWJlcicpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuZW5kID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5lbmQgPSBJbmZpbml0eTtcbiAgICAgIH0gZWxzZSBpZiAoJ251bWJlcicgIT09IHR5cGVvZiB0aGlzLmVuZCkge1xuICAgICAgICB0aHJvdyBUeXBlRXJyb3IoJ2VuZCBtdXN0IGJlIGEgTnVtYmVyJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnN0YXJ0ID4gdGhpcy5lbmQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzdGFydCBtdXN0IGJlIDw9IGVuZCcpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnBvcyA9IHRoaXMuc3RhcnQ7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZmQgIT09IG51bGwpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24oKSB7XG4gICAgICAgIHNlbGYuX3JlYWQoKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZzLm9wZW4odGhpcy5wYXRoLCB0aGlzLmZsYWdzLCB0aGlzLm1vZGUsIGZ1bmN0aW9uIChlcnIsIGZkKSB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIHNlbGYuZW1pdCgnZXJyb3InLCBlcnIpO1xuICAgICAgICBzZWxmLnJlYWRhYmxlID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgc2VsZi5mZCA9IGZkO1xuICAgICAgc2VsZi5lbWl0KCdvcGVuJywgZmQpO1xuICAgICAgc2VsZi5fcmVhZCgpO1xuICAgIH0pXG4gIH1cblxuICBmdW5jdGlvbiBXcml0ZVN0cmVhbSAocGF0aCwgb3B0aW9ucykge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBXcml0ZVN0cmVhbSkpIHJldHVybiBuZXcgV3JpdGVTdHJlYW0ocGF0aCwgb3B0aW9ucyk7XG5cbiAgICBTdHJlYW0uY2FsbCh0aGlzKTtcblxuICAgIHRoaXMucGF0aCA9IHBhdGg7XG4gICAgdGhpcy5mZCA9IG51bGw7XG4gICAgdGhpcy53cml0YWJsZSA9IHRydWU7XG5cbiAgICB0aGlzLmZsYWdzID0gJ3cnO1xuICAgIHRoaXMuZW5jb2RpbmcgPSAnYmluYXJ5JztcbiAgICB0aGlzLm1vZGUgPSA0Mzg7IC8qPTA2NjYqL1xuICAgIHRoaXMuYnl0ZXNXcml0dGVuID0gMDtcblxuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgLy8gTWl4aW4gb3B0aW9ucyBpbnRvIHRoaXNcbiAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9wdGlvbnMpO1xuICAgIGZvciAodmFyIGluZGV4ID0gMCwgbGVuZ3RoID0ga2V5cy5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpbmRleF07XG4gICAgICB0aGlzW2tleV0gPSBvcHRpb25zW2tleV07XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc3RhcnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKCdudW1iZXInICE9PSB0eXBlb2YgdGhpcy5zdGFydCkge1xuICAgICAgICB0aHJvdyBUeXBlRXJyb3IoJ3N0YXJ0IG11c3QgYmUgYSBOdW1iZXInKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnN0YXJ0IDwgMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3N0YXJ0IG11c3QgYmUgPj0gemVybycpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnBvcyA9IHRoaXMuc3RhcnQ7XG4gICAgfVxuXG4gICAgdGhpcy5idXN5ID0gZmFsc2U7XG4gICAgdGhpcy5fcXVldWUgPSBbXTtcblxuICAgIGlmICh0aGlzLmZkID09PSBudWxsKSB7XG4gICAgICB0aGlzLl9vcGVuID0gZnMub3BlbjtcbiAgICAgIHRoaXMuX3F1ZXVlLnB1c2goW3RoaXMuX29wZW4sIHRoaXMucGF0aCwgdGhpcy5mbGFncywgdGhpcy5tb2RlLCB1bmRlZmluZWRdKTtcbiAgICAgIHRoaXMuZmx1c2goKTtcbiAgICB9XG4gIH1cbn1cbiIsICIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMgPSBjbG9uZVxuXG52YXIgZ2V0UHJvdG90eXBlT2YgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gKG9iaikge1xuICByZXR1cm4gb2JqLl9fcHJvdG9fX1xufVxuXG5mdW5jdGlvbiBjbG9uZSAob2JqKSB7XG4gIGlmIChvYmogPT09IG51bGwgfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcpXG4gICAgcmV0dXJuIG9ialxuXG4gIGlmIChvYmogaW5zdGFuY2VvZiBPYmplY3QpXG4gICAgdmFyIGNvcHkgPSB7IF9fcHJvdG9fXzogZ2V0UHJvdG90eXBlT2Yob2JqKSB9XG4gIGVsc2VcbiAgICB2YXIgY29weSA9IE9iamVjdC5jcmVhdGUobnVsbClcblxuICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmopLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb3B5LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCBrZXkpKVxuICB9KVxuXG4gIHJldHVybiBjb3B5XG59XG4iLCAidmFyIGZzID0gcmVxdWlyZSgnZnMnKVxudmFyIHBvbHlmaWxscyA9IHJlcXVpcmUoJy4vcG9seWZpbGxzLmpzJylcbnZhciBsZWdhY3kgPSByZXF1aXJlKCcuL2xlZ2FjeS1zdHJlYW1zLmpzJylcbnZhciBjbG9uZSA9IHJlcXVpcmUoJy4vY2xvbmUuanMnKVxuXG52YXIgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKVxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAtIG5vZGUgMC54IHBvbHlmaWxsICovXG52YXIgZ3JhY2VmdWxRdWV1ZVxudmFyIHByZXZpb3VzU3ltYm9sXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlIC0gbm9kZSAwLnggcG9seWZpbGwgKi9cbmlmICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBTeW1ib2wuZm9yID09PSAnZnVuY3Rpb24nKSB7XG4gIGdyYWNlZnVsUXVldWUgPSBTeW1ib2wuZm9yKCdncmFjZWZ1bC1mcy5xdWV1ZScpXG4gIC8vIFRoaXMgaXMgdXNlZCBpbiB0ZXN0aW5nIGJ5IGZ1dHVyZSB2ZXJzaW9uc1xuICBwcmV2aW91c1N5bWJvbCA9IFN5bWJvbC5mb3IoJ2dyYWNlZnVsLWZzLnByZXZpb3VzJylcbn0gZWxzZSB7XG4gIGdyYWNlZnVsUXVldWUgPSAnX19fZ3JhY2VmdWwtZnMucXVldWUnXG4gIHByZXZpb3VzU3ltYm9sID0gJ19fX2dyYWNlZnVsLWZzLnByZXZpb3VzJ1xufVxuXG5mdW5jdGlvbiBub29wICgpIHt9XG5cbmZ1bmN0aW9uIHB1Ymxpc2hRdWV1ZShjb250ZXh0LCBxdWV1ZSkge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29udGV4dCwgZ3JhY2VmdWxRdWV1ZSwge1xuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gcXVldWVcbiAgICB9XG4gIH0pXG59XG5cbnZhciBkZWJ1ZyA9IG5vb3BcbmlmICh1dGlsLmRlYnVnbG9nKVxuICBkZWJ1ZyA9IHV0aWwuZGVidWdsb2coJ2dmczQnKVxuZWxzZSBpZiAoL1xcYmdmczRcXGIvaS50ZXN0KHByb2Nlc3MuZW52Lk5PREVfREVCVUcgfHwgJycpKVxuICBkZWJ1ZyA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBtID0gdXRpbC5mb3JtYXQuYXBwbHkodXRpbCwgYXJndW1lbnRzKVxuICAgIG0gPSAnR0ZTNDogJyArIG0uc3BsaXQoL1xcbi8pLmpvaW4oJ1xcbkdGUzQ6ICcpXG4gICAgY29uc29sZS5lcnJvcihtKVxuICB9XG5cbi8vIE9uY2UgdGltZSBpbml0aWFsaXphdGlvblxuaWYgKCFmc1tncmFjZWZ1bFF1ZXVlXSkge1xuICAvLyBUaGlzIHF1ZXVlIGNhbiBiZSBzaGFyZWQgYnkgbXVsdGlwbGUgbG9hZGVkIGluc3RhbmNlc1xuICB2YXIgcXVldWUgPSBnbG9iYWxbZ3JhY2VmdWxRdWV1ZV0gfHwgW11cbiAgcHVibGlzaFF1ZXVlKGZzLCBxdWV1ZSlcblxuICAvLyBQYXRjaCBmcy5jbG9zZS9jbG9zZVN5bmMgdG8gc2hhcmVkIHF1ZXVlIHZlcnNpb24sIGJlY2F1c2Ugd2UgbmVlZFxuICAvLyB0byByZXRyeSgpIHdoZW5ldmVyIGEgY2xvc2UgaGFwcGVucyAqYW55d2hlcmUqIGluIHRoZSBwcm9ncmFtLlxuICAvLyBUaGlzIGlzIGVzc2VudGlhbCB3aGVuIG11bHRpcGxlIGdyYWNlZnVsLWZzIGluc3RhbmNlcyBhcmVcbiAgLy8gaW4gcGxheSBhdCB0aGUgc2FtZSB0aW1lLlxuICBmcy5jbG9zZSA9IChmdW5jdGlvbiAoZnMkY2xvc2UpIHtcbiAgICBmdW5jdGlvbiBjbG9zZSAoZmQsIGNiKSB7XG4gICAgICByZXR1cm4gZnMkY2xvc2UuY2FsbChmcywgZmQsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgLy8gVGhpcyBmdW5jdGlvbiB1c2VzIHRoZSBncmFjZWZ1bC1mcyBzaGFyZWQgcXVldWVcbiAgICAgICAgaWYgKCFlcnIpIHtcbiAgICAgICAgICByZXNldFF1ZXVlKClcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpXG4gICAgICAgICAgY2IuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY2xvc2UsIHByZXZpb3VzU3ltYm9sLCB7XG4gICAgICB2YWx1ZTogZnMkY2xvc2VcbiAgICB9KVxuICAgIHJldHVybiBjbG9zZVxuICB9KShmcy5jbG9zZSlcblxuICBmcy5jbG9zZVN5bmMgPSAoZnVuY3Rpb24gKGZzJGNsb3NlU3luYykge1xuICAgIGZ1bmN0aW9uIGNsb3NlU3luYyAoZmQpIHtcbiAgICAgIC8vIFRoaXMgZnVuY3Rpb24gdXNlcyB0aGUgZ3JhY2VmdWwtZnMgc2hhcmVkIHF1ZXVlXG4gICAgICBmcyRjbG9zZVN5bmMuYXBwbHkoZnMsIGFyZ3VtZW50cylcbiAgICAgIHJlc2V0UXVldWUoKVxuICAgIH1cblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjbG9zZVN5bmMsIHByZXZpb3VzU3ltYm9sLCB7XG4gICAgICB2YWx1ZTogZnMkY2xvc2VTeW5jXG4gICAgfSlcbiAgICByZXR1cm4gY2xvc2VTeW5jXG4gIH0pKGZzLmNsb3NlU3luYylcblxuICBpZiAoL1xcYmdmczRcXGIvaS50ZXN0KHByb2Nlc3MuZW52Lk5PREVfREVCVUcgfHwgJycpKSB7XG4gICAgcHJvY2Vzcy5vbignZXhpdCcsIGZ1bmN0aW9uKCkge1xuICAgICAgZGVidWcoZnNbZ3JhY2VmdWxRdWV1ZV0pXG4gICAgICByZXF1aXJlKCdhc3NlcnQnKS5lcXVhbChmc1tncmFjZWZ1bFF1ZXVlXS5sZW5ndGgsIDApXG4gICAgfSlcbiAgfVxufVxuXG5pZiAoIWdsb2JhbFtncmFjZWZ1bFF1ZXVlXSkge1xuICBwdWJsaXNoUXVldWUoZ2xvYmFsLCBmc1tncmFjZWZ1bFF1ZXVlXSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0Y2goY2xvbmUoZnMpKVxuaWYgKHByb2Nlc3MuZW52LlRFU1RfR1JBQ0VGVUxfRlNfR0xPQkFMX1BBVENIICYmICFmcy5fX3BhdGNoZWQpIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IHBhdGNoKGZzKVxuICAgIGZzLl9fcGF0Y2hlZCA9IHRydWU7XG59XG5cbmZ1bmN0aW9uIHBhdGNoIChmcykge1xuICAvLyBFdmVyeXRoaW5nIHRoYXQgcmVmZXJlbmNlcyB0aGUgb3BlbigpIGZ1bmN0aW9uIG5lZWRzIHRvIGJlIGluIGhlcmVcbiAgcG9seWZpbGxzKGZzKVxuICBmcy5ncmFjZWZ1bGlmeSA9IHBhdGNoXG5cbiAgZnMuY3JlYXRlUmVhZFN0cmVhbSA9IGNyZWF0ZVJlYWRTdHJlYW1cbiAgZnMuY3JlYXRlV3JpdGVTdHJlYW0gPSBjcmVhdGVXcml0ZVN0cmVhbVxuICB2YXIgZnMkcmVhZEZpbGUgPSBmcy5yZWFkRmlsZVxuICBmcy5yZWFkRmlsZSA9IHJlYWRGaWxlXG4gIGZ1bmN0aW9uIHJlYWRGaWxlIChwYXRoLCBvcHRpb25zLCBjYikge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgIGNiID0gb3B0aW9ucywgb3B0aW9ucyA9IG51bGxcblxuICAgIHJldHVybiBnbyRyZWFkRmlsZShwYXRoLCBvcHRpb25zLCBjYilcblxuICAgIGZ1bmN0aW9uIGdvJHJlYWRGaWxlIChwYXRoLCBvcHRpb25zLCBjYiwgc3RhcnRUaW1lKSB7XG4gICAgICByZXR1cm4gZnMkcmVhZEZpbGUocGF0aCwgb3B0aW9ucywgZnVuY3Rpb24gKGVycikge1xuICAgICAgICBpZiAoZXJyICYmIChlcnIuY29kZSA9PT0gJ0VNRklMRScgfHwgZXJyLmNvZGUgPT09ICdFTkZJTEUnKSlcbiAgICAgICAgICBlbnF1ZXVlKFtnbyRyZWFkRmlsZSwgW3BhdGgsIG9wdGlvbnMsIGNiXSwgZXJyLCBzdGFydFRpbWUgfHwgRGF0ZS5ub3coKSwgRGF0ZS5ub3coKV0pXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpXG4gICAgICAgICAgICBjYi5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgdmFyIGZzJHdyaXRlRmlsZSA9IGZzLndyaXRlRmlsZVxuICBmcy53cml0ZUZpbGUgPSB3cml0ZUZpbGVcbiAgZnVuY3Rpb24gd3JpdGVGaWxlIChwYXRoLCBkYXRhLCBvcHRpb25zLCBjYikge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgIGNiID0gb3B0aW9ucywgb3B0aW9ucyA9IG51bGxcblxuICAgIHJldHVybiBnbyR3cml0ZUZpbGUocGF0aCwgZGF0YSwgb3B0aW9ucywgY2IpXG5cbiAgICBmdW5jdGlvbiBnbyR3cml0ZUZpbGUgKHBhdGgsIGRhdGEsIG9wdGlvbnMsIGNiLCBzdGFydFRpbWUpIHtcbiAgICAgIHJldHVybiBmcyR3cml0ZUZpbGUocGF0aCwgZGF0YSwgb3B0aW9ucywgZnVuY3Rpb24gKGVycikge1xuICAgICAgICBpZiAoZXJyICYmIChlcnIuY29kZSA9PT0gJ0VNRklMRScgfHwgZXJyLmNvZGUgPT09ICdFTkZJTEUnKSlcbiAgICAgICAgICBlbnF1ZXVlKFtnbyR3cml0ZUZpbGUsIFtwYXRoLCBkYXRhLCBvcHRpb25zLCBjYl0sIGVyciwgc3RhcnRUaW1lIHx8IERhdGUubm93KCksIERhdGUubm93KCldKVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBpZiAodHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKVxuICAgICAgICAgICAgY2IuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIHZhciBmcyRhcHBlbmRGaWxlID0gZnMuYXBwZW5kRmlsZVxuICBpZiAoZnMkYXBwZW5kRmlsZSlcbiAgICBmcy5hcHBlbmRGaWxlID0gYXBwZW5kRmlsZVxuICBmdW5jdGlvbiBhcHBlbmRGaWxlIChwYXRoLCBkYXRhLCBvcHRpb25zLCBjYikge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgIGNiID0gb3B0aW9ucywgb3B0aW9ucyA9IG51bGxcblxuICAgIHJldHVybiBnbyRhcHBlbmRGaWxlKHBhdGgsIGRhdGEsIG9wdGlvbnMsIGNiKVxuXG4gICAgZnVuY3Rpb24gZ28kYXBwZW5kRmlsZSAocGF0aCwgZGF0YSwgb3B0aW9ucywgY2IsIHN0YXJ0VGltZSkge1xuICAgICAgcmV0dXJuIGZzJGFwcGVuZEZpbGUocGF0aCwgZGF0YSwgb3B0aW9ucywgZnVuY3Rpb24gKGVycikge1xuICAgICAgICBpZiAoZXJyICYmIChlcnIuY29kZSA9PT0gJ0VNRklMRScgfHwgZXJyLmNvZGUgPT09ICdFTkZJTEUnKSlcbiAgICAgICAgICBlbnF1ZXVlKFtnbyRhcHBlbmRGaWxlLCBbcGF0aCwgZGF0YSwgb3B0aW9ucywgY2JdLCBlcnIsIHN0YXJ0VGltZSB8fCBEYXRlLm5vdygpLCBEYXRlLm5vdygpXSlcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICAgIGNiLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICB2YXIgZnMkY29weUZpbGUgPSBmcy5jb3B5RmlsZVxuICBpZiAoZnMkY29weUZpbGUpXG4gICAgZnMuY29weUZpbGUgPSBjb3B5RmlsZVxuICBmdW5jdGlvbiBjb3B5RmlsZSAoc3JjLCBkZXN0LCBmbGFncywgY2IpIHtcbiAgICBpZiAodHlwZW9mIGZsYWdzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjYiA9IGZsYWdzXG4gICAgICBmbGFncyA9IDBcbiAgICB9XG4gICAgcmV0dXJuIGdvJGNvcHlGaWxlKHNyYywgZGVzdCwgZmxhZ3MsIGNiKVxuXG4gICAgZnVuY3Rpb24gZ28kY29weUZpbGUgKHNyYywgZGVzdCwgZmxhZ3MsIGNiLCBzdGFydFRpbWUpIHtcbiAgICAgIHJldHVybiBmcyRjb3B5RmlsZShzcmMsIGRlc3QsIGZsYWdzLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIGlmIChlcnIgJiYgKGVyci5jb2RlID09PSAnRU1GSUxFJyB8fCBlcnIuY29kZSA9PT0gJ0VORklMRScpKVxuICAgICAgICAgIGVucXVldWUoW2dvJGNvcHlGaWxlLCBbc3JjLCBkZXN0LCBmbGFncywgY2JdLCBlcnIsIHN0YXJ0VGltZSB8fCBEYXRlLm5vdygpLCBEYXRlLm5vdygpXSlcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICAgIGNiLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICB2YXIgZnMkcmVhZGRpciA9IGZzLnJlYWRkaXJcbiAgZnMucmVhZGRpciA9IHJlYWRkaXJcbiAgdmFyIG5vUmVhZGRpck9wdGlvblZlcnNpb25zID0gL152WzAtNV1cXC4vXG4gIGZ1bmN0aW9uIHJlYWRkaXIgKHBhdGgsIG9wdGlvbnMsIGNiKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKVxuICAgICAgY2IgPSBvcHRpb25zLCBvcHRpb25zID0gbnVsbFxuXG4gICAgdmFyIGdvJHJlYWRkaXIgPSBub1JlYWRkaXJPcHRpb25WZXJzaW9ucy50ZXN0KHByb2Nlc3MudmVyc2lvbilcbiAgICAgID8gZnVuY3Rpb24gZ28kcmVhZGRpciAocGF0aCwgb3B0aW9ucywgY2IsIHN0YXJ0VGltZSkge1xuICAgICAgICByZXR1cm4gZnMkcmVhZGRpcihwYXRoLCBmcyRyZWFkZGlyQ2FsbGJhY2soXG4gICAgICAgICAgcGF0aCwgb3B0aW9ucywgY2IsIHN0YXJ0VGltZVxuICAgICAgICApKVxuICAgICAgfVxuICAgICAgOiBmdW5jdGlvbiBnbyRyZWFkZGlyIChwYXRoLCBvcHRpb25zLCBjYiwgc3RhcnRUaW1lKSB7XG4gICAgICAgIHJldHVybiBmcyRyZWFkZGlyKHBhdGgsIG9wdGlvbnMsIGZzJHJlYWRkaXJDYWxsYmFjayhcbiAgICAgICAgICBwYXRoLCBvcHRpb25zLCBjYiwgc3RhcnRUaW1lXG4gICAgICAgICkpXG4gICAgICB9XG5cbiAgICByZXR1cm4gZ28kcmVhZGRpcihwYXRoLCBvcHRpb25zLCBjYilcblxuICAgIGZ1bmN0aW9uIGZzJHJlYWRkaXJDYWxsYmFjayAocGF0aCwgb3B0aW9ucywgY2IsIHN0YXJ0VGltZSkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIChlcnIsIGZpbGVzKSB7XG4gICAgICAgIGlmIChlcnIgJiYgKGVyci5jb2RlID09PSAnRU1GSUxFJyB8fCBlcnIuY29kZSA9PT0gJ0VORklMRScpKVxuICAgICAgICAgIGVucXVldWUoW1xuICAgICAgICAgICAgZ28kcmVhZGRpcixcbiAgICAgICAgICAgIFtwYXRoLCBvcHRpb25zLCBjYl0sXG4gICAgICAgICAgICBlcnIsXG4gICAgICAgICAgICBzdGFydFRpbWUgfHwgRGF0ZS5ub3coKSxcbiAgICAgICAgICAgIERhdGUubm93KClcbiAgICAgICAgICBdKVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBpZiAoZmlsZXMgJiYgZmlsZXMuc29ydClcbiAgICAgICAgICAgIGZpbGVzLnNvcnQoKVxuXG4gICAgICAgICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICAgIGNiLmNhbGwodGhpcywgZXJyLCBmaWxlcylcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChwcm9jZXNzLnZlcnNpb24uc3Vic3RyKDAsIDQpID09PSAndjAuOCcpIHtcbiAgICB2YXIgbGVnU3RyZWFtcyA9IGxlZ2FjeShmcylcbiAgICBSZWFkU3RyZWFtID0gbGVnU3RyZWFtcy5SZWFkU3RyZWFtXG4gICAgV3JpdGVTdHJlYW0gPSBsZWdTdHJlYW1zLldyaXRlU3RyZWFtXG4gIH1cblxuICB2YXIgZnMkUmVhZFN0cmVhbSA9IGZzLlJlYWRTdHJlYW1cbiAgaWYgKGZzJFJlYWRTdHJlYW0pIHtcbiAgICBSZWFkU3RyZWFtLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoZnMkUmVhZFN0cmVhbS5wcm90b3R5cGUpXG4gICAgUmVhZFN0cmVhbS5wcm90b3R5cGUub3BlbiA9IFJlYWRTdHJlYW0kb3BlblxuICB9XG5cbiAgdmFyIGZzJFdyaXRlU3RyZWFtID0gZnMuV3JpdGVTdHJlYW1cbiAgaWYgKGZzJFdyaXRlU3RyZWFtKSB7XG4gICAgV3JpdGVTdHJlYW0ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShmcyRXcml0ZVN0cmVhbS5wcm90b3R5cGUpXG4gICAgV3JpdGVTdHJlYW0ucHJvdG90eXBlLm9wZW4gPSBXcml0ZVN0cmVhbSRvcGVuXG4gIH1cblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnMsICdSZWFkU3RyZWFtJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIFJlYWRTdHJlYW1cbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgUmVhZFN0cmVhbSA9IHZhbFxuICAgIH0sXG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSlcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZzLCAnV3JpdGVTdHJlYW0nLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gV3JpdGVTdHJlYW1cbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgV3JpdGVTdHJlYW0gPSB2YWxcbiAgICB9LFxuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0pXG5cbiAgLy8gbGVnYWN5IG5hbWVzXG4gIHZhciBGaWxlUmVhZFN0cmVhbSA9IFJlYWRTdHJlYW1cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZzLCAnRmlsZVJlYWRTdHJlYW0nLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gRmlsZVJlYWRTdHJlYW1cbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgRmlsZVJlYWRTdHJlYW0gPSB2YWxcbiAgICB9LFxuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0pXG4gIHZhciBGaWxlV3JpdGVTdHJlYW0gPSBXcml0ZVN0cmVhbVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnMsICdGaWxlV3JpdGVTdHJlYW0nLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gRmlsZVdyaXRlU3RyZWFtXG4gICAgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgIEZpbGVXcml0ZVN0cmVhbSA9IHZhbFxuICAgIH0sXG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSlcblxuICBmdW5jdGlvbiBSZWFkU3RyZWFtIChwYXRoLCBvcHRpb25zKSB7XG4gICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBSZWFkU3RyZWFtKVxuICAgICAgcmV0dXJuIGZzJFJlYWRTdHJlYW0uYXBwbHkodGhpcywgYXJndW1lbnRzKSwgdGhpc1xuICAgIGVsc2VcbiAgICAgIHJldHVybiBSZWFkU3RyZWFtLmFwcGx5KE9iamVjdC5jcmVhdGUoUmVhZFN0cmVhbS5wcm90b3R5cGUpLCBhcmd1bWVudHMpXG4gIH1cblxuICBmdW5jdGlvbiBSZWFkU3RyZWFtJG9wZW4gKCkge1xuICAgIHZhciB0aGF0ID0gdGhpc1xuICAgIG9wZW4odGhhdC5wYXRoLCB0aGF0LmZsYWdzLCB0aGF0Lm1vZGUsIGZ1bmN0aW9uIChlcnIsIGZkKSB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIGlmICh0aGF0LmF1dG9DbG9zZSlcbiAgICAgICAgICB0aGF0LmRlc3Ryb3koKVxuXG4gICAgICAgIHRoYXQuZW1pdCgnZXJyb3InLCBlcnIpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGF0LmZkID0gZmRcbiAgICAgICAgdGhhdC5lbWl0KCdvcGVuJywgZmQpXG4gICAgICAgIHRoYXQucmVhZCgpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIFdyaXRlU3RyZWFtIChwYXRoLCBvcHRpb25zKSB7XG4gICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBXcml0ZVN0cmVhbSlcbiAgICAgIHJldHVybiBmcyRXcml0ZVN0cmVhbS5hcHBseSh0aGlzLCBhcmd1bWVudHMpLCB0aGlzXG4gICAgZWxzZVxuICAgICAgcmV0dXJuIFdyaXRlU3RyZWFtLmFwcGx5KE9iamVjdC5jcmVhdGUoV3JpdGVTdHJlYW0ucHJvdG90eXBlKSwgYXJndW1lbnRzKVxuICB9XG5cbiAgZnVuY3Rpb24gV3JpdGVTdHJlYW0kb3BlbiAoKSB7XG4gICAgdmFyIHRoYXQgPSB0aGlzXG4gICAgb3Blbih0aGF0LnBhdGgsIHRoYXQuZmxhZ3MsIHRoYXQubW9kZSwgZnVuY3Rpb24gKGVyciwgZmQpIHtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgdGhhdC5kZXN0cm95KClcbiAgICAgICAgdGhhdC5lbWl0KCdlcnJvcicsIGVycilcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoYXQuZmQgPSBmZFxuICAgICAgICB0aGF0LmVtaXQoJ29wZW4nLCBmZClcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlUmVhZFN0cmVhbSAocGF0aCwgb3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgZnMuUmVhZFN0cmVhbShwYXRoLCBvcHRpb25zKVxuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlV3JpdGVTdHJlYW0gKHBhdGgsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IGZzLldyaXRlU3RyZWFtKHBhdGgsIG9wdGlvbnMpXG4gIH1cblxuICB2YXIgZnMkb3BlbiA9IGZzLm9wZW5cbiAgZnMub3BlbiA9IG9wZW5cbiAgZnVuY3Rpb24gb3BlbiAocGF0aCwgZmxhZ3MsIG1vZGUsIGNiKSB7XG4gICAgaWYgKHR5cGVvZiBtb2RlID09PSAnZnVuY3Rpb24nKVxuICAgICAgY2IgPSBtb2RlLCBtb2RlID0gbnVsbFxuXG4gICAgcmV0dXJuIGdvJG9wZW4ocGF0aCwgZmxhZ3MsIG1vZGUsIGNiKVxuXG4gICAgZnVuY3Rpb24gZ28kb3BlbiAocGF0aCwgZmxhZ3MsIG1vZGUsIGNiLCBzdGFydFRpbWUpIHtcbiAgICAgIHJldHVybiBmcyRvcGVuKHBhdGgsIGZsYWdzLCBtb2RlLCBmdW5jdGlvbiAoZXJyLCBmZCkge1xuICAgICAgICBpZiAoZXJyICYmIChlcnIuY29kZSA9PT0gJ0VNRklMRScgfHwgZXJyLmNvZGUgPT09ICdFTkZJTEUnKSlcbiAgICAgICAgICBlbnF1ZXVlKFtnbyRvcGVuLCBbcGF0aCwgZmxhZ3MsIG1vZGUsIGNiXSwgZXJyLCBzdGFydFRpbWUgfHwgRGF0ZS5ub3coKSwgRGF0ZS5ub3coKV0pXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpXG4gICAgICAgICAgICBjYi5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZzXG59XG5cbmZ1bmN0aW9uIGVucXVldWUgKGVsZW0pIHtcbiAgZGVidWcoJ0VOUVVFVUUnLCBlbGVtWzBdLm5hbWUsIGVsZW1bMV0pXG4gIGZzW2dyYWNlZnVsUXVldWVdLnB1c2goZWxlbSlcbiAgcmV0cnkoKVxufVxuXG4vLyBrZWVwIHRyYWNrIG9mIHRoZSB0aW1lb3V0IGJldHdlZW4gcmV0cnkoKSBjYWxsc1xudmFyIHJldHJ5VGltZXJcblxuLy8gcmVzZXQgdGhlIHN0YXJ0VGltZSBhbmQgbGFzdFRpbWUgdG8gbm93XG4vLyB0aGlzIHJlc2V0cyB0aGUgc3RhcnQgb2YgdGhlIDYwIHNlY29uZCBvdmVyYWxsIHRpbWVvdXQgYXMgd2VsbCBhcyB0aGVcbi8vIGRlbGF5IGJldHdlZW4gYXR0ZW1wdHMgc28gdGhhdCB3ZSdsbCByZXRyeSB0aGVzZSBqb2JzIHNvb25lclxuZnVuY3Rpb24gcmVzZXRRdWV1ZSAoKSB7XG4gIHZhciBub3cgPSBEYXRlLm5vdygpXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZnNbZ3JhY2VmdWxRdWV1ZV0ubGVuZ3RoOyArK2kpIHtcbiAgICAvLyBlbnRyaWVzIHRoYXQgYXJlIG9ubHkgYSBsZW5ndGggb2YgMiBhcmUgZnJvbSBhbiBvbGRlciB2ZXJzaW9uLCBkb24ndFxuICAgIC8vIGJvdGhlciBtb2RpZnlpbmcgdGhvc2Ugc2luY2UgdGhleSdsbCBiZSByZXRyaWVkIGFueXdheS5cbiAgICBpZiAoZnNbZ3JhY2VmdWxRdWV1ZV1baV0ubGVuZ3RoID4gMikge1xuICAgICAgZnNbZ3JhY2VmdWxRdWV1ZV1baV1bM10gPSBub3cgLy8gc3RhcnRUaW1lXG4gICAgICBmc1tncmFjZWZ1bFF1ZXVlXVtpXVs0XSA9IG5vdyAvLyBsYXN0VGltZVxuICAgIH1cbiAgfVxuICAvLyBjYWxsIHJldHJ5IHRvIG1ha2Ugc3VyZSB3ZSdyZSBhY3RpdmVseSBwcm9jZXNzaW5nIHRoZSBxdWV1ZVxuICByZXRyeSgpXG59XG5cbmZ1bmN0aW9uIHJldHJ5ICgpIHtcbiAgLy8gY2xlYXIgdGhlIHRpbWVyIGFuZCByZW1vdmUgaXQgdG8gaGVscCBwcmV2ZW50IHVuaW50ZW5kZWQgY29uY3VycmVuY3lcbiAgY2xlYXJUaW1lb3V0KHJldHJ5VGltZXIpXG4gIHJldHJ5VGltZXIgPSB1bmRlZmluZWRcblxuICBpZiAoZnNbZ3JhY2VmdWxRdWV1ZV0ubGVuZ3RoID09PSAwKVxuICAgIHJldHVyblxuXG4gIHZhciBlbGVtID0gZnNbZ3JhY2VmdWxRdWV1ZV0uc2hpZnQoKVxuICB2YXIgZm4gPSBlbGVtWzBdXG4gIHZhciBhcmdzID0gZWxlbVsxXVxuICAvLyB0aGVzZSBpdGVtcyBtYXkgYmUgdW5zZXQgaWYgdGhleSB3ZXJlIGFkZGVkIGJ5IGFuIG9sZGVyIGdyYWNlZnVsLWZzXG4gIHZhciBlcnIgPSBlbGVtWzJdXG4gIHZhciBzdGFydFRpbWUgPSBlbGVtWzNdXG4gIHZhciBsYXN0VGltZSA9IGVsZW1bNF1cblxuICAvLyBpZiB3ZSBkb24ndCBoYXZlIGEgc3RhcnRUaW1lIHdlIGhhdmUgbm8gd2F5IG9mIGtub3dpbmcgaWYgd2UndmUgd2FpdGVkXG4gIC8vIGxvbmcgZW5vdWdoLCBzbyBnbyBhaGVhZCBhbmQgcmV0cnkgdGhpcyBpdGVtIG5vd1xuICBpZiAoc3RhcnRUaW1lID09PSB1bmRlZmluZWQpIHtcbiAgICBkZWJ1ZygnUkVUUlknLCBmbi5uYW1lLCBhcmdzKVxuICAgIGZuLmFwcGx5KG51bGwsIGFyZ3MpXG4gIH0gZWxzZSBpZiAoRGF0ZS5ub3coKSAtIHN0YXJ0VGltZSA+PSA2MDAwMCkge1xuICAgIC8vIGl0J3MgYmVlbiBtb3JlIHRoYW4gNjAgc2Vjb25kcyB0b3RhbCwgYmFpbCBub3dcbiAgICBkZWJ1ZygnVElNRU9VVCcsIGZuLm5hbWUsIGFyZ3MpXG4gICAgdmFyIGNiID0gYXJncy5wb3AoKVxuICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpXG4gICAgICBjYi5jYWxsKG51bGwsIGVycilcbiAgfSBlbHNlIHtcbiAgICAvLyB0aGUgYW1vdW50IG9mIHRpbWUgYmV0d2VlbiB0aGUgbGFzdCBhdHRlbXB0IGFuZCByaWdodCBub3dcbiAgICB2YXIgc2luY2VBdHRlbXB0ID0gRGF0ZS5ub3coKSAtIGxhc3RUaW1lXG4gICAgLy8gdGhlIGFtb3VudCBvZiB0aW1lIGJldHdlZW4gd2hlbiB3ZSBmaXJzdCB0cmllZCwgYW5kIHdoZW4gd2UgbGFzdCB0cmllZFxuICAgIC8vIHJvdW5kZWQgdXAgdG8gYXQgbGVhc3QgMVxuICAgIHZhciBzaW5jZVN0YXJ0ID0gTWF0aC5tYXgobGFzdFRpbWUgLSBzdGFydFRpbWUsIDEpXG4gICAgLy8gYmFja29mZi4gd2FpdCBsb25nZXIgdGhhbiB0aGUgdG90YWwgdGltZSB3ZSd2ZSBiZWVuIHJldHJ5aW5nLCBidXQgb25seVxuICAgIC8vIHVwIHRvIGEgbWF4aW11bSBvZiAxMDBtc1xuICAgIHZhciBkZXNpcmVkRGVsYXkgPSBNYXRoLm1pbihzaW5jZVN0YXJ0ICogMS4yLCAxMDApXG4gICAgLy8gaXQncyBiZWVuIGxvbmcgZW5vdWdoIHNpbmNlIHRoZSBsYXN0IHJldHJ5LCBkbyBpdCBhZ2FpblxuICAgIGlmIChzaW5jZUF0dGVtcHQgPj0gZGVzaXJlZERlbGF5KSB7XG4gICAgICBkZWJ1ZygnUkVUUlknLCBmbi5uYW1lLCBhcmdzKVxuICAgICAgZm4uYXBwbHkobnVsbCwgYXJncy5jb25jYXQoW3N0YXJ0VGltZV0pKVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpZiB3ZSBjYW4ndCBkbyB0aGlzIGpvYiB5ZXQsIHB1c2ggaXQgdG8gdGhlIGVuZCBvZiB0aGUgcXVldWVcbiAgICAgIC8vIGFuZCBsZXQgdGhlIG5leHQgaXRlcmF0aW9uIGNoZWNrIGFnYWluXG4gICAgICBmc1tncmFjZWZ1bFF1ZXVlXS5wdXNoKGVsZW0pXG4gICAgfVxuICB9XG5cbiAgLy8gc2NoZWR1bGUgb3VyIG5leHQgcnVuIGlmIG9uZSBpc24ndCBhbHJlYWR5IHNjaGVkdWxlZFxuICBpZiAocmV0cnlUaW1lciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0cnlUaW1lciA9IHNldFRpbWVvdXQocmV0cnksIDApXG4gIH1cbn1cbiIsICIndXNlIHN0cmljdCdcbi8vIFRoaXMgaXMgYWRhcHRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9ub3JtYWxpemUvbXpcbi8vIENvcHlyaWdodCAoYykgMjAxNC0yMDE2IEpvbmF0aGFuIE9uZyBtZUBqb25nbGViZXJyeS5jb20gYW5kIENvbnRyaWJ1dG9yc1xuY29uc3QgdSA9IHJlcXVpcmUoJ3VuaXZlcnNhbGlmeScpLmZyb21DYWxsYmFja1xuY29uc3QgZnMgPSByZXF1aXJlKCdncmFjZWZ1bC1mcycpXG5cbmNvbnN0IGFwaSA9IFtcbiAgJ2FjY2VzcycsXG4gICdhcHBlbmRGaWxlJyxcbiAgJ2NobW9kJyxcbiAgJ2Nob3duJyxcbiAgJ2Nsb3NlJyxcbiAgJ2NvcHlGaWxlJyxcbiAgJ2ZjaG1vZCcsXG4gICdmY2hvd24nLFxuICAnZmRhdGFzeW5jJyxcbiAgJ2ZzdGF0JyxcbiAgJ2ZzeW5jJyxcbiAgJ2Z0cnVuY2F0ZScsXG4gICdmdXRpbWVzJyxcbiAgJ2xjaG1vZCcsXG4gICdsY2hvd24nLFxuICAnbGluaycsXG4gICdsc3RhdCcsXG4gICdta2RpcicsXG4gICdta2R0ZW1wJyxcbiAgJ29wZW4nLFxuICAnb3BlbmRpcicsXG4gICdyZWFkZGlyJyxcbiAgJ3JlYWRGaWxlJyxcbiAgJ3JlYWRsaW5rJyxcbiAgJ3JlYWxwYXRoJyxcbiAgJ3JlbmFtZScsXG4gICdybScsXG4gICdybWRpcicsXG4gICdzdGF0JyxcbiAgJ3N5bWxpbmsnLFxuICAndHJ1bmNhdGUnLFxuICAndW5saW5rJyxcbiAgJ3V0aW1lcycsXG4gICd3cml0ZUZpbGUnXG5dLmZpbHRlcihrZXkgPT4ge1xuICAvLyBTb21lIGNvbW1hbmRzIGFyZSBub3QgYXZhaWxhYmxlIG9uIHNvbWUgc3lzdGVtcy4gRXg6XG4gIC8vIGZzLm9wZW5kaXIgd2FzIGFkZGVkIGluIE5vZGUuanMgdjEyLjEyLjBcbiAgLy8gZnMucm0gd2FzIGFkZGVkIGluIE5vZGUuanMgdjE0LjE0LjBcbiAgLy8gZnMubGNob3duIGlzIG5vdCBhdmFpbGFibGUgb24gYXQgbGVhc3Qgc29tZSBMaW51eFxuICByZXR1cm4gdHlwZW9mIGZzW2tleV0gPT09ICdmdW5jdGlvbidcbn0pXG5cbi8vIEV4cG9ydCBhbGwga2V5czpcbk9iamVjdC5rZXlzKGZzKS5mb3JFYWNoKGtleSA9PiB7XG4gIGlmIChrZXkgPT09ICdwcm9taXNlcycpIHtcbiAgICAvLyBmcy5wcm9taXNlcyBpcyBhIGdldHRlciBwcm9wZXJ0eSB0aGF0IHRyaWdnZXJzIEV4cGVyaW1lbnRhbFdhcm5pbmdcbiAgICAvLyBEb24ndCByZS1leHBvcnQgaXQgaGVyZSwgdGhlIGdldHRlciBpcyBkZWZpbmVkIGluIFwibGliL2luZGV4LmpzXCJcbiAgICByZXR1cm5cbiAgfVxuICBleHBvcnRzW2tleV0gPSBmc1trZXldXG59KVxuXG4vLyBVbml2ZXJzYWxpZnkgYXN5bmMgbWV0aG9kczpcbmFwaS5mb3JFYWNoKG1ldGhvZCA9PiB7XG4gIGV4cG9ydHNbbWV0aG9kXSA9IHUoZnNbbWV0aG9kXSlcbn0pXG5cbi8vIFdlIGRpZmZlciBmcm9tIG16L2ZzIGluIHRoYXQgd2Ugc3RpbGwgc2hpcCB0aGUgb2xkLCBicm9rZW4sIGZzLmV4aXN0cygpXG4vLyBzaW5jZSB3ZSBhcmUgYSBkcm9wLWluIHJlcGxhY2VtZW50IGZvciB0aGUgbmF0aXZlIG1vZHVsZVxuZXhwb3J0cy5leGlzdHMgPSBmdW5jdGlvbiAoZmlsZW5hbWUsIGNhbGxiYWNrKSB7XG4gIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZnMuZXhpc3RzKGZpbGVuYW1lLCBjYWxsYmFjaylcbiAgfVxuICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgcmV0dXJuIGZzLmV4aXN0cyhmaWxlbmFtZSwgcmVzb2x2ZSlcbiAgfSlcbn1cblxuLy8gZnMucmVhZCgpLCBmcy53cml0ZSgpLCAmIGZzLndyaXRldigpIG5lZWQgc3BlY2lhbCB0cmVhdG1lbnQgZHVlIHRvIG11bHRpcGxlIGNhbGxiYWNrIGFyZ3NcblxuZXhwb3J0cy5yZWFkID0gZnVuY3Rpb24gKGZkLCBidWZmZXIsIG9mZnNldCwgbGVuZ3RoLCBwb3NpdGlvbiwgY2FsbGJhY2spIHtcbiAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBmcy5yZWFkKGZkLCBidWZmZXIsIG9mZnNldCwgbGVuZ3RoLCBwb3NpdGlvbiwgY2FsbGJhY2spXG4gIH1cbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBmcy5yZWFkKGZkLCBidWZmZXIsIG9mZnNldCwgbGVuZ3RoLCBwb3NpdGlvbiwgKGVyciwgYnl0ZXNSZWFkLCBidWZmZXIpID0+IHtcbiAgICAgIGlmIChlcnIpIHJldHVybiByZWplY3QoZXJyKVxuICAgICAgcmVzb2x2ZSh7IGJ5dGVzUmVhZCwgYnVmZmVyIH0pXG4gICAgfSlcbiAgfSlcbn1cblxuLy8gRnVuY3Rpb24gc2lnbmF0dXJlIGNhbiBiZVxuLy8gZnMud3JpdGUoZmQsIGJ1ZmZlclssIG9mZnNldFssIGxlbmd0aFssIHBvc2l0aW9uXV1dLCBjYWxsYmFjaylcbi8vIE9SXG4vLyBmcy53cml0ZShmZCwgc3RyaW5nWywgcG9zaXRpb25bLCBlbmNvZGluZ11dLCBjYWxsYmFjaylcbi8vIFdlIG5lZWQgdG8gaGFuZGxlIGJvdGggY2FzZXMsIHNvIHdlIHVzZSAuLi5hcmdzXG5leHBvcnRzLndyaXRlID0gZnVuY3Rpb24gKGZkLCBidWZmZXIsIC4uLmFyZ3MpIHtcbiAgaWYgKHR5cGVvZiBhcmdzW2FyZ3MubGVuZ3RoIC0gMV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZnMud3JpdGUoZmQsIGJ1ZmZlciwgLi4uYXJncylcbiAgfVxuXG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgZnMud3JpdGUoZmQsIGJ1ZmZlciwgLi4uYXJncywgKGVyciwgYnl0ZXNXcml0dGVuLCBidWZmZXIpID0+IHtcbiAgICAgIGlmIChlcnIpIHJldHVybiByZWplY3QoZXJyKVxuICAgICAgcmVzb2x2ZSh7IGJ5dGVzV3JpdHRlbiwgYnVmZmVyIH0pXG4gICAgfSlcbiAgfSlcbn1cblxuLy8gZnMud3JpdGV2IG9ubHkgYXZhaWxhYmxlIGluIE5vZGUgdjEyLjkuMCtcbmlmICh0eXBlb2YgZnMud3JpdGV2ID09PSAnZnVuY3Rpb24nKSB7XG4gIC8vIEZ1bmN0aW9uIHNpZ25hdHVyZSBpc1xuICAvLyBzLndyaXRldihmZCwgYnVmZmVyc1ssIHBvc2l0aW9uXSwgY2FsbGJhY2spXG4gIC8vIFdlIG5lZWQgdG8gaGFuZGxlIHRoZSBvcHRpb25hbCBhcmcsIHNvIHdlIHVzZSAuLi5hcmdzXG4gIGV4cG9ydHMud3JpdGV2ID0gZnVuY3Rpb24gKGZkLCBidWZmZXJzLCAuLi5hcmdzKSB7XG4gICAgaWYgKHR5cGVvZiBhcmdzW2FyZ3MubGVuZ3RoIC0gMV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBmcy53cml0ZXYoZmQsIGJ1ZmZlcnMsIC4uLmFyZ3MpXG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGZzLndyaXRldihmZCwgYnVmZmVycywgLi4uYXJncywgKGVyciwgYnl0ZXNXcml0dGVuLCBidWZmZXJzKSA9PiB7XG4gICAgICAgIGlmIChlcnIpIHJldHVybiByZWplY3QoZXJyKVxuICAgICAgICByZXNvbHZlKHsgYnl0ZXNXcml0dGVuLCBidWZmZXJzIH0pXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cblxuLy8gZnMucmVhbHBhdGgubmF0aXZlIG9ubHkgYXZhaWxhYmxlIGluIE5vZGUgdjkuMitcbmlmICh0eXBlb2YgZnMucmVhbHBhdGgubmF0aXZlID09PSAnZnVuY3Rpb24nKSB7XG4gIGV4cG9ydHMucmVhbHBhdGgubmF0aXZlID0gdShmcy5yZWFscGF0aC5uYXRpdmUpXG59XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByID0+IHtcbiAgY29uc3QgbiA9IHByb2Nlc3MudmVyc2lvbnMubm9kZS5zcGxpdCgnLicpLm1hcCh4ID0+IHBhcnNlSW50KHgsIDEwKSlcbiAgciA9IHIuc3BsaXQoJy4nKS5tYXAoeCA9PiBwYXJzZUludCh4LCAxMCkpXG4gIHJldHVybiBuWzBdID4gclswXSB8fCAoblswXSA9PT0gclswXSAmJiAoblsxXSA+IHJbMV0gfHwgKG5bMV0gPT09IHJbMV0gJiYgblsyXSA+PSByWzJdKSkpXG59XG4iLCAiLy8gQWRhcHRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5kcmVzb3JodXMvbWFrZS1kaXJcbi8vIENvcHlyaWdodCAoYykgU2luZHJlIFNvcmh1cyA8c2luZHJlc29yaHVzQGdtYWlsLmNvbT4gKHNpbmRyZXNvcmh1cy5jb20pXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbid1c2Ugc3RyaWN0J1xuY29uc3QgZnMgPSByZXF1aXJlKCcuLi9mcycpXG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpXG5jb25zdCBhdExlYXN0Tm9kZSA9IHJlcXVpcmUoJ2F0LWxlYXN0LW5vZGUnKVxuXG5jb25zdCB1c2VOYXRpdmVSZWN1cnNpdmVPcHRpb24gPSBhdExlYXN0Tm9kZSgnMTAuMTIuMCcpXG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9pc3N1ZXMvODk4N1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL2xpYnV2L2xpYnV2L3B1bGwvMTA4OFxuY29uc3QgY2hlY2tQYXRoID0gcHRoID0+IHtcbiAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicpIHtcbiAgICBjb25zdCBwYXRoSGFzSW52YWxpZFdpbkNoYXJhY3RlcnMgPSAvWzw+OlwifD8qXS8udGVzdChwdGgucmVwbGFjZShwYXRoLnBhcnNlKHB0aCkucm9vdCwgJycpKVxuXG4gICAgaWYgKHBhdGhIYXNJbnZhbGlkV2luQ2hhcmFjdGVycykge1xuICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoYFBhdGggY29udGFpbnMgaW52YWxpZCBjaGFyYWN0ZXJzOiAke3B0aH1gKVxuICAgICAgZXJyb3IuY29kZSA9ICdFSU5WQUwnXG4gICAgICB0aHJvdyBlcnJvclxuICAgIH1cbiAgfVxufVxuXG5jb25zdCBwcm9jZXNzT3B0aW9ucyA9IG9wdGlvbnMgPT4ge1xuICBjb25zdCBkZWZhdWx0cyA9IHsgbW9kZTogMG83NzcgfVxuICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdudW1iZXInKSBvcHRpb25zID0geyBtb2RlOiBvcHRpb25zIH1cbiAgcmV0dXJuIHsgLi4uZGVmYXVsdHMsIC4uLm9wdGlvbnMgfVxufVxuXG5jb25zdCBwZXJtaXNzaW9uRXJyb3IgPSBwdGggPT4ge1xuICAvLyBUaGlzIHJlcGxpY2F0ZXMgdGhlIGV4Y2VwdGlvbiBvZiBgZnMubWtkaXJgIHdpdGggbmF0aXZlIHRoZVxuICAvLyBgcmVjdXNpdmVgIG9wdGlvbiB3aGVuIHJ1biBvbiBhbiBpbnZhbGlkIGRyaXZlIHVuZGVyIFdpbmRvd3MuXG4gIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKGBvcGVyYXRpb24gbm90IHBlcm1pdHRlZCwgbWtkaXIgJyR7cHRofSdgKVxuICBlcnJvci5jb2RlID0gJ0VQRVJNJ1xuICBlcnJvci5lcnJubyA9IC00MDQ4XG4gIGVycm9yLnBhdGggPSBwdGhcbiAgZXJyb3Iuc3lzY2FsbCA9ICdta2RpcidcbiAgcmV0dXJuIGVycm9yXG59XG5cbm1vZHVsZS5leHBvcnRzLm1ha2VEaXIgPSBhc3luYyAoaW5wdXQsIG9wdGlvbnMpID0+IHtcbiAgY2hlY2tQYXRoKGlucHV0KVxuICBvcHRpb25zID0gcHJvY2Vzc09wdGlvbnMob3B0aW9ucylcblxuICBpZiAodXNlTmF0aXZlUmVjdXJzaXZlT3B0aW9uKSB7XG4gICAgY29uc3QgcHRoID0gcGF0aC5yZXNvbHZlKGlucHV0KVxuXG4gICAgcmV0dXJuIGZzLm1rZGlyKHB0aCwge1xuICAgICAgbW9kZTogb3B0aW9ucy5tb2RlLFxuICAgICAgcmVjdXJzaXZlOiB0cnVlXG4gICAgfSlcbiAgfVxuXG4gIGNvbnN0IG1ha2UgPSBhc3luYyBwdGggPT4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBmcy5ta2RpcihwdGgsIG9wdGlvbnMubW9kZSlcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKGVycm9yLmNvZGUgPT09ICdFUEVSTScpIHtcbiAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgIH1cblxuICAgICAgaWYgKGVycm9yLmNvZGUgPT09ICdFTk9FTlQnKSB7XG4gICAgICAgIGlmIChwYXRoLmRpcm5hbWUocHRoKSA9PT0gcHRoKSB7XG4gICAgICAgICAgdGhyb3cgcGVybWlzc2lvbkVycm9yKHB0aClcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlcnJvci5tZXNzYWdlLmluY2x1ZGVzKCdudWxsIGJ5dGVzJykpIHtcbiAgICAgICAgICB0aHJvdyBlcnJvclxuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgbWFrZShwYXRoLmRpcm5hbWUocHRoKSlcbiAgICAgICAgcmV0dXJuIG1ha2UocHRoKVxuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBzdGF0cyA9IGF3YWl0IGZzLnN0YXQocHRoKVxuICAgICAgICBpZiAoIXN0YXRzLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgICAgICAvLyBUaGlzIGVycm9yIGlzIG5ldmVyIGV4cG9zZWQgdG8gdGhlIHVzZXJcbiAgICAgICAgICAvLyBpdCBpcyBjYXVnaHQgYmVsb3csIGFuZCB0aGUgb3JpZ2luYWwgZXJyb3IgaXMgdGhyb3duXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgcGF0aCBpcyBub3QgYSBkaXJlY3RvcnknKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbWFrZShwYXRoLnJlc29sdmUoaW5wdXQpKVxufVxuXG5tb2R1bGUuZXhwb3J0cy5tYWtlRGlyU3luYyA9IChpbnB1dCwgb3B0aW9ucykgPT4ge1xuICBjaGVja1BhdGgoaW5wdXQpXG4gIG9wdGlvbnMgPSBwcm9jZXNzT3B0aW9ucyhvcHRpb25zKVxuXG4gIGlmICh1c2VOYXRpdmVSZWN1cnNpdmVPcHRpb24pIHtcbiAgICBjb25zdCBwdGggPSBwYXRoLnJlc29sdmUoaW5wdXQpXG5cbiAgICByZXR1cm4gZnMubWtkaXJTeW5jKHB0aCwge1xuICAgICAgbW9kZTogb3B0aW9ucy5tb2RlLFxuICAgICAgcmVjdXJzaXZlOiB0cnVlXG4gICAgfSlcbiAgfVxuXG4gIGNvbnN0IG1ha2UgPSBwdGggPT4ge1xuICAgIHRyeSB7XG4gICAgICBmcy5ta2RpclN5bmMocHRoLCBvcHRpb25zLm1vZGUpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChlcnJvci5jb2RlID09PSAnRVBFUk0nKSB7XG4gICAgICAgIHRocm93IGVycm9yXG4gICAgICB9XG5cbiAgICAgIGlmIChlcnJvci5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgICBpZiAocGF0aC5kaXJuYW1lKHB0aCkgPT09IHB0aCkge1xuICAgICAgICAgIHRocm93IHBlcm1pc3Npb25FcnJvcihwdGgpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXJyb3IubWVzc2FnZS5pbmNsdWRlcygnbnVsbCBieXRlcycpKSB7XG4gICAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgICAgfVxuXG4gICAgICAgIG1ha2UocGF0aC5kaXJuYW1lKHB0aCkpXG4gICAgICAgIHJldHVybiBtYWtlKHB0aClcbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKCFmcy5zdGF0U3luYyhwdGgpLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgICAgICAvLyBUaGlzIGVycm9yIGlzIG5ldmVyIGV4cG9zZWQgdG8gdGhlIHVzZXJcbiAgICAgICAgICAvLyBpdCBpcyBjYXVnaHQgYmVsb3csIGFuZCB0aGUgb3JpZ2luYWwgZXJyb3IgaXMgdGhyb3duXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgcGF0aCBpcyBub3QgYSBkaXJlY3RvcnknKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbWFrZShwYXRoLnJlc29sdmUoaW5wdXQpKVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuY29uc3QgdSA9IHJlcXVpcmUoJ3VuaXZlcnNhbGlmeScpLmZyb21Qcm9taXNlXG5jb25zdCB7IG1ha2VEaXI6IF9tYWtlRGlyLCBtYWtlRGlyU3luYyB9ID0gcmVxdWlyZSgnLi9tYWtlLWRpcicpXG5jb25zdCBtYWtlRGlyID0gdShfbWFrZURpcilcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG1rZGlyczogbWFrZURpcixcbiAgbWtkaXJzU3luYzogbWFrZURpclN5bmMsXG4gIC8vIGFsaWFzXG4gIG1rZGlycDogbWFrZURpcixcbiAgbWtkaXJwU3luYzogbWFrZURpclN5bmMsXG4gIGVuc3VyZURpcjogbWFrZURpcixcbiAgZW5zdXJlRGlyU3luYzogbWFrZURpclN5bmNcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgZnMgPSByZXF1aXJlKCdncmFjZWZ1bC1mcycpXG5cbmZ1bmN0aW9uIHV0aW1lc01pbGxpcyAocGF0aCwgYXRpbWUsIG10aW1lLCBjYWxsYmFjaykge1xuICAvLyBpZiAoIUhBU19NSUxMSVNfUkVTKSByZXR1cm4gZnMudXRpbWVzKHBhdGgsIGF0aW1lLCBtdGltZSwgY2FsbGJhY2spXG4gIGZzLm9wZW4ocGF0aCwgJ3IrJywgKGVyciwgZmQpID0+IHtcbiAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKVxuICAgIGZzLmZ1dGltZXMoZmQsIGF0aW1lLCBtdGltZSwgZnV0aW1lc0VyciA9PiB7XG4gICAgICBmcy5jbG9zZShmZCwgY2xvc2VFcnIgPT4ge1xuICAgICAgICBpZiAoY2FsbGJhY2spIGNhbGxiYWNrKGZ1dGltZXNFcnIgfHwgY2xvc2VFcnIpXG4gICAgICB9KVxuICAgIH0pXG4gIH0pXG59XG5cbmZ1bmN0aW9uIHV0aW1lc01pbGxpc1N5bmMgKHBhdGgsIGF0aW1lLCBtdGltZSkge1xuICBjb25zdCBmZCA9IGZzLm9wZW5TeW5jKHBhdGgsICdyKycpXG4gIGZzLmZ1dGltZXNTeW5jKGZkLCBhdGltZSwgbXRpbWUpXG4gIHJldHVybiBmcy5jbG9zZVN5bmMoZmQpXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICB1dGltZXNNaWxsaXMsXG4gIHV0aW1lc01pbGxpc1N5bmNcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgZnMgPSByZXF1aXJlKCcuLi9mcycpXG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgndXRpbCcpXG5jb25zdCBhdExlYXN0Tm9kZSA9IHJlcXVpcmUoJ2F0LWxlYXN0LW5vZGUnKVxuXG5jb25zdCBub2RlU3VwcG9ydHNCaWdJbnQgPSBhdExlYXN0Tm9kZSgnMTAuNS4wJylcbmNvbnN0IHN0YXQgPSAoZmlsZSkgPT4gbm9kZVN1cHBvcnRzQmlnSW50ID8gZnMuc3RhdChmaWxlLCB7IGJpZ2ludDogdHJ1ZSB9KSA6IGZzLnN0YXQoZmlsZSlcbmNvbnN0IHN0YXRTeW5jID0gKGZpbGUpID0+IG5vZGVTdXBwb3J0c0JpZ0ludCA/IGZzLnN0YXRTeW5jKGZpbGUsIHsgYmlnaW50OiB0cnVlIH0pIDogZnMuc3RhdFN5bmMoZmlsZSlcblxuZnVuY3Rpb24gZ2V0U3RhdHMgKHNyYywgZGVzdCkge1xuICByZXR1cm4gUHJvbWlzZS5hbGwoW1xuICAgIHN0YXQoc3JjKSxcbiAgICBzdGF0KGRlc3QpLmNhdGNoKGVyciA9PiB7XG4gICAgICBpZiAoZXJyLmNvZGUgPT09ICdFTk9FTlQnKSByZXR1cm4gbnVsbFxuICAgICAgdGhyb3cgZXJyXG4gICAgfSlcbiAgXSkudGhlbigoW3NyY1N0YXQsIGRlc3RTdGF0XSkgPT4gKHsgc3JjU3RhdCwgZGVzdFN0YXQgfSkpXG59XG5cbmZ1bmN0aW9uIGdldFN0YXRzU3luYyAoc3JjLCBkZXN0KSB7XG4gIGxldCBkZXN0U3RhdFxuICBjb25zdCBzcmNTdGF0ID0gc3RhdFN5bmMoc3JjKVxuICB0cnkge1xuICAgIGRlc3RTdGF0ID0gc3RhdFN5bmMoZGVzdClcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKGVyci5jb2RlID09PSAnRU5PRU5UJykgcmV0dXJuIHsgc3JjU3RhdCwgZGVzdFN0YXQ6IG51bGwgfVxuICAgIHRocm93IGVyclxuICB9XG4gIHJldHVybiB7IHNyY1N0YXQsIGRlc3RTdGF0IH1cbn1cblxuZnVuY3Rpb24gY2hlY2tQYXRocyAoc3JjLCBkZXN0LCBmdW5jTmFtZSwgY2IpIHtcbiAgdXRpbC5jYWxsYmFja2lmeShnZXRTdGF0cykoc3JjLCBkZXN0LCAoZXJyLCBzdGF0cykgPT4ge1xuICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgY29uc3QgeyBzcmNTdGF0LCBkZXN0U3RhdCB9ID0gc3RhdHNcbiAgICBpZiAoZGVzdFN0YXQgJiYgYXJlSWRlbnRpY2FsKHNyY1N0YXQsIGRlc3RTdGF0KSkge1xuICAgICAgcmV0dXJuIGNiKG5ldyBFcnJvcignU291cmNlIGFuZCBkZXN0aW5hdGlvbiBtdXN0IG5vdCBiZSB0aGUgc2FtZS4nKSlcbiAgICB9XG4gICAgaWYgKHNyY1N0YXQuaXNEaXJlY3RvcnkoKSAmJiBpc1NyY1N1YmRpcihzcmMsIGRlc3QpKSB7XG4gICAgICByZXR1cm4gY2IobmV3IEVycm9yKGVyck1zZyhzcmMsIGRlc3QsIGZ1bmNOYW1lKSkpXG4gICAgfVxuICAgIHJldHVybiBjYihudWxsLCB7IHNyY1N0YXQsIGRlc3RTdGF0IH0pXG4gIH0pXG59XG5cbmZ1bmN0aW9uIGNoZWNrUGF0aHNTeW5jIChzcmMsIGRlc3QsIGZ1bmNOYW1lKSB7XG4gIGNvbnN0IHsgc3JjU3RhdCwgZGVzdFN0YXQgfSA9IGdldFN0YXRzU3luYyhzcmMsIGRlc3QpXG4gIGlmIChkZXN0U3RhdCAmJiBhcmVJZGVudGljYWwoc3JjU3RhdCwgZGVzdFN0YXQpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdTb3VyY2UgYW5kIGRlc3RpbmF0aW9uIG11c3Qgbm90IGJlIHRoZSBzYW1lLicpXG4gIH1cbiAgaWYgKHNyY1N0YXQuaXNEaXJlY3RvcnkoKSAmJiBpc1NyY1N1YmRpcihzcmMsIGRlc3QpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGVyck1zZyhzcmMsIGRlc3QsIGZ1bmNOYW1lKSlcbiAgfVxuICByZXR1cm4geyBzcmNTdGF0LCBkZXN0U3RhdCB9XG59XG5cbi8vIHJlY3Vyc2l2ZWx5IGNoZWNrIGlmIGRlc3QgcGFyZW50IGlzIGEgc3ViZGlyZWN0b3J5IG9mIHNyYy5cbi8vIEl0IHdvcmtzIGZvciBhbGwgZmlsZSB0eXBlcyBpbmNsdWRpbmcgc3ltbGlua3Mgc2luY2UgaXRcbi8vIGNoZWNrcyB0aGUgc3JjIGFuZCBkZXN0IGlub2Rlcy4gSXQgc3RhcnRzIGZyb20gdGhlIGRlZXBlc3Rcbi8vIHBhcmVudCBhbmQgc3RvcHMgb25jZSBpdCByZWFjaGVzIHRoZSBzcmMgcGFyZW50IG9yIHRoZSByb290IHBhdGguXG5mdW5jdGlvbiBjaGVja1BhcmVudFBhdGhzIChzcmMsIHNyY1N0YXQsIGRlc3QsIGZ1bmNOYW1lLCBjYikge1xuICBjb25zdCBzcmNQYXJlbnQgPSBwYXRoLnJlc29sdmUocGF0aC5kaXJuYW1lKHNyYykpXG4gIGNvbnN0IGRlc3RQYXJlbnQgPSBwYXRoLnJlc29sdmUocGF0aC5kaXJuYW1lKGRlc3QpKVxuICBpZiAoZGVzdFBhcmVudCA9PT0gc3JjUGFyZW50IHx8IGRlc3RQYXJlbnQgPT09IHBhdGgucGFyc2UoZGVzdFBhcmVudCkucm9vdCkgcmV0dXJuIGNiKClcbiAgY29uc3QgY2FsbGJhY2sgPSAoZXJyLCBkZXN0U3RhdCkgPT4ge1xuICAgIGlmIChlcnIpIHtcbiAgICAgIGlmIChlcnIuY29kZSA9PT0gJ0VOT0VOVCcpIHJldHVybiBjYigpXG4gICAgICByZXR1cm4gY2IoZXJyKVxuICAgIH1cbiAgICBpZiAoYXJlSWRlbnRpY2FsKHNyY1N0YXQsIGRlc3RTdGF0KSkge1xuICAgICAgcmV0dXJuIGNiKG5ldyBFcnJvcihlcnJNc2coc3JjLCBkZXN0LCBmdW5jTmFtZSkpKVxuICAgIH1cbiAgICByZXR1cm4gY2hlY2tQYXJlbnRQYXRocyhzcmMsIHNyY1N0YXQsIGRlc3RQYXJlbnQsIGZ1bmNOYW1lLCBjYilcbiAgfVxuICBpZiAobm9kZVN1cHBvcnRzQmlnSW50KSBmcy5zdGF0KGRlc3RQYXJlbnQsIHsgYmlnaW50OiB0cnVlIH0sIGNhbGxiYWNrKVxuICBlbHNlIGZzLnN0YXQoZGVzdFBhcmVudCwgY2FsbGJhY2spXG59XG5cbmZ1bmN0aW9uIGNoZWNrUGFyZW50UGF0aHNTeW5jIChzcmMsIHNyY1N0YXQsIGRlc3QsIGZ1bmNOYW1lKSB7XG4gIGNvbnN0IHNyY1BhcmVudCA9IHBhdGgucmVzb2x2ZShwYXRoLmRpcm5hbWUoc3JjKSlcbiAgY29uc3QgZGVzdFBhcmVudCA9IHBhdGgucmVzb2x2ZShwYXRoLmRpcm5hbWUoZGVzdCkpXG4gIGlmIChkZXN0UGFyZW50ID09PSBzcmNQYXJlbnQgfHwgZGVzdFBhcmVudCA9PT0gcGF0aC5wYXJzZShkZXN0UGFyZW50KS5yb290KSByZXR1cm5cbiAgbGV0IGRlc3RTdGF0XG4gIHRyeSB7XG4gICAgZGVzdFN0YXQgPSBzdGF0U3luYyhkZXN0UGFyZW50KVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAoZXJyLmNvZGUgPT09ICdFTk9FTlQnKSByZXR1cm5cbiAgICB0aHJvdyBlcnJcbiAgfVxuICBpZiAoYXJlSWRlbnRpY2FsKHNyY1N0YXQsIGRlc3RTdGF0KSkge1xuICAgIHRocm93IG5ldyBFcnJvcihlcnJNc2coc3JjLCBkZXN0LCBmdW5jTmFtZSkpXG4gIH1cbiAgcmV0dXJuIGNoZWNrUGFyZW50UGF0aHNTeW5jKHNyYywgc3JjU3RhdCwgZGVzdFBhcmVudCwgZnVuY05hbWUpXG59XG5cbmZ1bmN0aW9uIGFyZUlkZW50aWNhbCAoc3JjU3RhdCwgZGVzdFN0YXQpIHtcbiAgaWYgKGRlc3RTdGF0LmlubyAmJiBkZXN0U3RhdC5kZXYgJiYgZGVzdFN0YXQuaW5vID09PSBzcmNTdGF0LmlubyAmJiBkZXN0U3RhdC5kZXYgPT09IHNyY1N0YXQuZGV2KSB7XG4gICAgaWYgKG5vZGVTdXBwb3J0c0JpZ0ludCB8fCBkZXN0U3RhdC5pbm8gPCBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikge1xuICAgICAgLy8gZGVmaW5pdGl2ZSBhbnN3ZXJcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIC8vIFVzZSBhZGRpdGlvbmFsIGhldXJpc3RpY3MgaWYgd2UgY2FuJ3QgdXNlICdiaWdpbnQnLlxuICAgIC8vIERpZmZlcmVudCAnaW5vJyBjb3VsZCBiZSByZXByZXNlbnRlZCB0aGUgc2FtZSBpZiB0aGV5IGFyZSA+PSBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUlxuICAgIC8vIFNlZSBpc3N1ZSA2NTdcbiAgICBpZiAoZGVzdFN0YXQuc2l6ZSA9PT0gc3JjU3RhdC5zaXplICYmXG4gICAgICAgIGRlc3RTdGF0Lm1vZGUgPT09IHNyY1N0YXQubW9kZSAmJlxuICAgICAgICBkZXN0U3RhdC5ubGluayA9PT0gc3JjU3RhdC5ubGluayAmJlxuICAgICAgICBkZXN0U3RhdC5hdGltZU1zID09PSBzcmNTdGF0LmF0aW1lTXMgJiZcbiAgICAgICAgZGVzdFN0YXQubXRpbWVNcyA9PT0gc3JjU3RhdC5tdGltZU1zICYmXG4gICAgICAgIGRlc3RTdGF0LmN0aW1lTXMgPT09IHNyY1N0YXQuY3RpbWVNcyAmJlxuICAgICAgICBkZXN0U3RhdC5iaXJ0aHRpbWVNcyA9PT0gc3JjU3RhdC5iaXJ0aHRpbWVNcykge1xuICAgICAgLy8gaGV1cmlzdGljIGFuc3dlclxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG5cbi8vIHJldHVybiB0cnVlIGlmIGRlc3QgaXMgYSBzdWJkaXIgb2Ygc3JjLCBvdGhlcndpc2UgZmFsc2UuXG4vLyBJdCBvbmx5IGNoZWNrcyB0aGUgcGF0aCBzdHJpbmdzLlxuZnVuY3Rpb24gaXNTcmNTdWJkaXIgKHNyYywgZGVzdCkge1xuICBjb25zdCBzcmNBcnIgPSBwYXRoLnJlc29sdmUoc3JjKS5zcGxpdChwYXRoLnNlcCkuZmlsdGVyKGkgPT4gaSlcbiAgY29uc3QgZGVzdEFyciA9IHBhdGgucmVzb2x2ZShkZXN0KS5zcGxpdChwYXRoLnNlcCkuZmlsdGVyKGkgPT4gaSlcbiAgcmV0dXJuIHNyY0Fyci5yZWR1Y2UoKGFjYywgY3VyLCBpKSA9PiBhY2MgJiYgZGVzdEFycltpXSA9PT0gY3VyLCB0cnVlKVxufVxuXG5mdW5jdGlvbiBlcnJNc2cgKHNyYywgZGVzdCwgZnVuY05hbWUpIHtcbiAgcmV0dXJuIGBDYW5ub3QgJHtmdW5jTmFtZX0gJyR7c3JjfScgdG8gYSBzdWJkaXJlY3Rvcnkgb2YgaXRzZWxmLCAnJHtkZXN0fScuYFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgY2hlY2tQYXRocyxcbiAgY2hlY2tQYXRoc1N5bmMsXG4gIGNoZWNrUGFyZW50UGF0aHMsXG4gIGNoZWNrUGFyZW50UGF0aHNTeW5jLFxuICBpc1NyY1N1YmRpclxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBmcyA9IHJlcXVpcmUoJ2dyYWNlZnVsLWZzJylcbmNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJylcbmNvbnN0IG1rZGlyc1N5bmMgPSByZXF1aXJlKCcuLi9ta2RpcnMnKS5ta2RpcnNTeW5jXG5jb25zdCB1dGltZXNNaWxsaXNTeW5jID0gcmVxdWlyZSgnLi4vdXRpbC91dGltZXMnKS51dGltZXNNaWxsaXNTeW5jXG5jb25zdCBzdGF0ID0gcmVxdWlyZSgnLi4vdXRpbC9zdGF0JylcblxuZnVuY3Rpb24gY29weVN5bmMgKHNyYywgZGVzdCwgb3B0cykge1xuICBpZiAodHlwZW9mIG9wdHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBvcHRzID0geyBmaWx0ZXI6IG9wdHMgfVxuICB9XG5cbiAgb3B0cyA9IG9wdHMgfHwge31cbiAgb3B0cy5jbG9iYmVyID0gJ2Nsb2JiZXInIGluIG9wdHMgPyAhIW9wdHMuY2xvYmJlciA6IHRydWUgLy8gZGVmYXVsdCB0byB0cnVlIGZvciBub3dcbiAgb3B0cy5vdmVyd3JpdGUgPSAnb3ZlcndyaXRlJyBpbiBvcHRzID8gISFvcHRzLm92ZXJ3cml0ZSA6IG9wdHMuY2xvYmJlciAvLyBvdmVyd3JpdGUgZmFsbHMgYmFjayB0byBjbG9iYmVyXG5cbiAgLy8gV2FybiBhYm91dCB1c2luZyBwcmVzZXJ2ZVRpbWVzdGFtcHMgb24gMzItYml0IG5vZGVcbiAgaWYgKG9wdHMucHJlc2VydmVUaW1lc3RhbXBzICYmIHByb2Nlc3MuYXJjaCA9PT0gJ2lhMzInKSB7XG4gICAgY29uc29sZS53YXJuKGBmcy1leHRyYTogVXNpbmcgdGhlIHByZXNlcnZlVGltZXN0YW1wcyBvcHRpb24gaW4gMzItYml0IG5vZGUgaXMgbm90IHJlY29tbWVuZGVkO1xcblxuICAgIHNlZSBodHRwczovL2dpdGh1Yi5jb20vanByaWNoYXJkc29uL25vZGUtZnMtZXh0cmEvaXNzdWVzLzI2OWApXG4gIH1cblxuICBjb25zdCB7IHNyY1N0YXQsIGRlc3RTdGF0IH0gPSBzdGF0LmNoZWNrUGF0aHNTeW5jKHNyYywgZGVzdCwgJ2NvcHknKVxuICBzdGF0LmNoZWNrUGFyZW50UGF0aHNTeW5jKHNyYywgc3JjU3RhdCwgZGVzdCwgJ2NvcHknKVxuICByZXR1cm4gaGFuZGxlRmlsdGVyQW5kQ29weShkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzKVxufVxuXG5mdW5jdGlvbiBoYW5kbGVGaWx0ZXJBbmRDb3B5IChkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzKSB7XG4gIGlmIChvcHRzLmZpbHRlciAmJiAhb3B0cy5maWx0ZXIoc3JjLCBkZXN0KSkgcmV0dXJuXG4gIGNvbnN0IGRlc3RQYXJlbnQgPSBwYXRoLmRpcm5hbWUoZGVzdClcbiAgaWYgKCFmcy5leGlzdHNTeW5jKGRlc3RQYXJlbnQpKSBta2RpcnNTeW5jKGRlc3RQYXJlbnQpXG4gIHJldHVybiBzdGFydENvcHkoZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cylcbn1cblxuZnVuY3Rpb24gc3RhcnRDb3B5IChkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzKSB7XG4gIGlmIChvcHRzLmZpbHRlciAmJiAhb3B0cy5maWx0ZXIoc3JjLCBkZXN0KSkgcmV0dXJuXG4gIHJldHVybiBnZXRTdGF0cyhkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzKVxufVxuXG5mdW5jdGlvbiBnZXRTdGF0cyAoZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cykge1xuICBjb25zdCBzdGF0U3luYyA9IG9wdHMuZGVyZWZlcmVuY2UgPyBmcy5zdGF0U3luYyA6IGZzLmxzdGF0U3luY1xuICBjb25zdCBzcmNTdGF0ID0gc3RhdFN5bmMoc3JjKVxuXG4gIGlmIChzcmNTdGF0LmlzRGlyZWN0b3J5KCkpIHJldHVybiBvbkRpcihzcmNTdGF0LCBkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzKVxuICBlbHNlIGlmIChzcmNTdGF0LmlzRmlsZSgpIHx8XG4gICAgICAgICAgIHNyY1N0YXQuaXNDaGFyYWN0ZXJEZXZpY2UoKSB8fFxuICAgICAgICAgICBzcmNTdGF0LmlzQmxvY2tEZXZpY2UoKSkgcmV0dXJuIG9uRmlsZShzcmNTdGF0LCBkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzKVxuICBlbHNlIGlmIChzcmNTdGF0LmlzU3ltYm9saWNMaW5rKCkpIHJldHVybiBvbkxpbmsoZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cylcbn1cblxuZnVuY3Rpb24gb25GaWxlIChzcmNTdGF0LCBkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzKSB7XG4gIGlmICghZGVzdFN0YXQpIHJldHVybiBjb3B5RmlsZShzcmNTdGF0LCBzcmMsIGRlc3QsIG9wdHMpXG4gIHJldHVybiBtYXlDb3B5RmlsZShzcmNTdGF0LCBzcmMsIGRlc3QsIG9wdHMpXG59XG5cbmZ1bmN0aW9uIG1heUNvcHlGaWxlIChzcmNTdGF0LCBzcmMsIGRlc3QsIG9wdHMpIHtcbiAgaWYgKG9wdHMub3ZlcndyaXRlKSB7XG4gICAgZnMudW5saW5rU3luYyhkZXN0KVxuICAgIHJldHVybiBjb3B5RmlsZShzcmNTdGF0LCBzcmMsIGRlc3QsIG9wdHMpXG4gIH0gZWxzZSBpZiAob3B0cy5lcnJvck9uRXhpc3QpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCcke2Rlc3R9JyBhbHJlYWR5IGV4aXN0c2ApXG4gIH1cbn1cblxuZnVuY3Rpb24gY29weUZpbGUgKHNyY1N0YXQsIHNyYywgZGVzdCwgb3B0cykge1xuICBmcy5jb3B5RmlsZVN5bmMoc3JjLCBkZXN0KVxuICBpZiAob3B0cy5wcmVzZXJ2ZVRpbWVzdGFtcHMpIGhhbmRsZVRpbWVzdGFtcHMoc3JjU3RhdC5tb2RlLCBzcmMsIGRlc3QpXG4gIHJldHVybiBzZXREZXN0TW9kZShkZXN0LCBzcmNTdGF0Lm1vZGUpXG59XG5cbmZ1bmN0aW9uIGhhbmRsZVRpbWVzdGFtcHMgKHNyY01vZGUsIHNyYywgZGVzdCkge1xuICAvLyBNYWtlIHN1cmUgdGhlIGZpbGUgaXMgd3JpdGFibGUgYmVmb3JlIHNldHRpbmcgdGhlIHRpbWVzdGFtcFxuICAvLyBvdGhlcndpc2Ugb3BlbiBmYWlscyB3aXRoIEVQRVJNIHdoZW4gaW52b2tlZCB3aXRoICdyKydcbiAgLy8gKHRocm91Z2ggdXRpbWVzIGNhbGwpXG4gIGlmIChmaWxlSXNOb3RXcml0YWJsZShzcmNNb2RlKSkgbWFrZUZpbGVXcml0YWJsZShkZXN0LCBzcmNNb2RlKVxuICByZXR1cm4gc2V0RGVzdFRpbWVzdGFtcHMoc3JjLCBkZXN0KVxufVxuXG5mdW5jdGlvbiBmaWxlSXNOb3RXcml0YWJsZSAoc3JjTW9kZSkge1xuICByZXR1cm4gKHNyY01vZGUgJiAwbzIwMCkgPT09IDBcbn1cblxuZnVuY3Rpb24gbWFrZUZpbGVXcml0YWJsZSAoZGVzdCwgc3JjTW9kZSkge1xuICByZXR1cm4gc2V0RGVzdE1vZGUoZGVzdCwgc3JjTW9kZSB8IDBvMjAwKVxufVxuXG5mdW5jdGlvbiBzZXREZXN0TW9kZSAoZGVzdCwgc3JjTW9kZSkge1xuICByZXR1cm4gZnMuY2htb2RTeW5jKGRlc3QsIHNyY01vZGUpXG59XG5cbmZ1bmN0aW9uIHNldERlc3RUaW1lc3RhbXBzIChzcmMsIGRlc3QpIHtcbiAgLy8gVGhlIGluaXRpYWwgc3JjU3RhdC5hdGltZSBjYW5ub3QgYmUgdHJ1c3RlZFxuICAvLyBiZWNhdXNlIGl0IGlzIG1vZGlmaWVkIGJ5IHRoZSByZWFkKDIpIHN5c3RlbSBjYWxsXG4gIC8vIChTZWUgaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9mcy5odG1sI2ZzX3N0YXRfdGltZV92YWx1ZXMpXG4gIGNvbnN0IHVwZGF0ZWRTcmNTdGF0ID0gZnMuc3RhdFN5bmMoc3JjKVxuICByZXR1cm4gdXRpbWVzTWlsbGlzU3luYyhkZXN0LCB1cGRhdGVkU3JjU3RhdC5hdGltZSwgdXBkYXRlZFNyY1N0YXQubXRpbWUpXG59XG5cbmZ1bmN0aW9uIG9uRGlyIChzcmNTdGF0LCBkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzKSB7XG4gIGlmICghZGVzdFN0YXQpIHJldHVybiBta0RpckFuZENvcHkoc3JjU3RhdC5tb2RlLCBzcmMsIGRlc3QsIG9wdHMpXG4gIGlmIChkZXN0U3RhdCAmJiAhZGVzdFN0YXQuaXNEaXJlY3RvcnkoKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IG92ZXJ3cml0ZSBub24tZGlyZWN0b3J5ICcke2Rlc3R9JyB3aXRoIGRpcmVjdG9yeSAnJHtzcmN9Jy5gKVxuICB9XG4gIHJldHVybiBjb3B5RGlyKHNyYywgZGVzdCwgb3B0cylcbn1cblxuZnVuY3Rpb24gbWtEaXJBbmRDb3B5IChzcmNNb2RlLCBzcmMsIGRlc3QsIG9wdHMpIHtcbiAgZnMubWtkaXJTeW5jKGRlc3QpXG4gIGNvcHlEaXIoc3JjLCBkZXN0LCBvcHRzKVxuICByZXR1cm4gc2V0RGVzdE1vZGUoZGVzdCwgc3JjTW9kZSlcbn1cblxuZnVuY3Rpb24gY29weURpciAoc3JjLCBkZXN0LCBvcHRzKSB7XG4gIGZzLnJlYWRkaXJTeW5jKHNyYykuZm9yRWFjaChpdGVtID0+IGNvcHlEaXJJdGVtKGl0ZW0sIHNyYywgZGVzdCwgb3B0cykpXG59XG5cbmZ1bmN0aW9uIGNvcHlEaXJJdGVtIChpdGVtLCBzcmMsIGRlc3QsIG9wdHMpIHtcbiAgY29uc3Qgc3JjSXRlbSA9IHBhdGguam9pbihzcmMsIGl0ZW0pXG4gIGNvbnN0IGRlc3RJdGVtID0gcGF0aC5qb2luKGRlc3QsIGl0ZW0pXG4gIGNvbnN0IHsgZGVzdFN0YXQgfSA9IHN0YXQuY2hlY2tQYXRoc1N5bmMoc3JjSXRlbSwgZGVzdEl0ZW0sICdjb3B5JylcbiAgcmV0dXJuIHN0YXJ0Q29weShkZXN0U3RhdCwgc3JjSXRlbSwgZGVzdEl0ZW0sIG9wdHMpXG59XG5cbmZ1bmN0aW9uIG9uTGluayAoZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cykge1xuICBsZXQgcmVzb2x2ZWRTcmMgPSBmcy5yZWFkbGlua1N5bmMoc3JjKVxuICBpZiAob3B0cy5kZXJlZmVyZW5jZSkge1xuICAgIHJlc29sdmVkU3JjID0gcGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCksIHJlc29sdmVkU3JjKVxuICB9XG5cbiAgaWYgKCFkZXN0U3RhdCkge1xuICAgIHJldHVybiBmcy5zeW1saW5rU3luYyhyZXNvbHZlZFNyYywgZGVzdClcbiAgfSBlbHNlIHtcbiAgICBsZXQgcmVzb2x2ZWREZXN0XG4gICAgdHJ5IHtcbiAgICAgIHJlc29sdmVkRGVzdCA9IGZzLnJlYWRsaW5rU3luYyhkZXN0KVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLy8gZGVzdCBleGlzdHMgYW5kIGlzIGEgcmVndWxhciBmaWxlIG9yIGRpcmVjdG9yeSxcbiAgICAgIC8vIFdpbmRvd3MgbWF5IHRocm93IFVOS05PV04gZXJyb3IuIElmIGRlc3QgYWxyZWFkeSBleGlzdHMsXG4gICAgICAvLyBmcyB0aHJvd3MgZXJyb3IgYW55d2F5LCBzbyBubyBuZWVkIHRvIGd1YXJkIGFnYWluc3QgaXQgaGVyZS5cbiAgICAgIGlmIChlcnIuY29kZSA9PT0gJ0VJTlZBTCcgfHwgZXJyLmNvZGUgPT09ICdVTktOT1dOJykgcmV0dXJuIGZzLnN5bWxpbmtTeW5jKHJlc29sdmVkU3JjLCBkZXN0KVxuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuICAgIGlmIChvcHRzLmRlcmVmZXJlbmNlKSB7XG4gICAgICByZXNvbHZlZERlc3QgPSBwYXRoLnJlc29sdmUocHJvY2Vzcy5jd2QoKSwgcmVzb2x2ZWREZXN0KVxuICAgIH1cbiAgICBpZiAoc3RhdC5pc1NyY1N1YmRpcihyZXNvbHZlZFNyYywgcmVzb2x2ZWREZXN0KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgY29weSAnJHtyZXNvbHZlZFNyY30nIHRvIGEgc3ViZGlyZWN0b3J5IG9mIGl0c2VsZiwgJyR7cmVzb2x2ZWREZXN0fScuYClcbiAgICB9XG5cbiAgICAvLyBwcmV2ZW50IGNvcHkgaWYgc3JjIGlzIGEgc3ViZGlyIG9mIGRlc3Qgc2luY2UgdW5saW5raW5nXG4gICAgLy8gZGVzdCBpbiB0aGlzIGNhc2Ugd291bGQgcmVzdWx0IGluIHJlbW92aW5nIHNyYyBjb250ZW50c1xuICAgIC8vIGFuZCB0aGVyZWZvcmUgYSBicm9rZW4gc3ltbGluayB3b3VsZCBiZSBjcmVhdGVkLlxuICAgIGlmIChmcy5zdGF0U3luYyhkZXN0KS5pc0RpcmVjdG9yeSgpICYmIHN0YXQuaXNTcmNTdWJkaXIocmVzb2x2ZWREZXN0LCByZXNvbHZlZFNyYykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IG92ZXJ3cml0ZSAnJHtyZXNvbHZlZERlc3R9JyB3aXRoICcke3Jlc29sdmVkU3JjfScuYClcbiAgICB9XG4gICAgcmV0dXJuIGNvcHlMaW5rKHJlc29sdmVkU3JjLCBkZXN0KVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvcHlMaW5rIChyZXNvbHZlZFNyYywgZGVzdCkge1xuICBmcy51bmxpbmtTeW5jKGRlc3QpXG4gIHJldHVybiBmcy5zeW1saW5rU3luYyhyZXNvbHZlZFNyYywgZGVzdClcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb3B5U3luY1xuIiwgIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgY29weVN5bmM6IHJlcXVpcmUoJy4vY29weS1zeW5jJylcbn1cbiIsICIndXNlIHN0cmljdCdcbmNvbnN0IHUgPSByZXF1aXJlKCd1bml2ZXJzYWxpZnknKS5mcm9tUHJvbWlzZVxuY29uc3QgZnMgPSByZXF1aXJlKCcuLi9mcycpXG5cbmZ1bmN0aW9uIHBhdGhFeGlzdHMgKHBhdGgpIHtcbiAgcmV0dXJuIGZzLmFjY2VzcyhwYXRoKS50aGVuKCgpID0+IHRydWUpLmNhdGNoKCgpID0+IGZhbHNlKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgcGF0aEV4aXN0czogdShwYXRoRXhpc3RzKSxcbiAgcGF0aEV4aXN0c1N5bmM6IGZzLmV4aXN0c1N5bmNcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgZnMgPSByZXF1aXJlKCdncmFjZWZ1bC1mcycpXG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpXG5jb25zdCBta2RpcnMgPSByZXF1aXJlKCcuLi9ta2RpcnMnKS5ta2RpcnNcbmNvbnN0IHBhdGhFeGlzdHMgPSByZXF1aXJlKCcuLi9wYXRoLWV4aXN0cycpLnBhdGhFeGlzdHNcbmNvbnN0IHV0aW1lc01pbGxpcyA9IHJlcXVpcmUoJy4uL3V0aWwvdXRpbWVzJykudXRpbWVzTWlsbGlzXG5jb25zdCBzdGF0ID0gcmVxdWlyZSgnLi4vdXRpbC9zdGF0JylcblxuZnVuY3Rpb24gY29weSAoc3JjLCBkZXN0LCBvcHRzLCBjYikge1xuICBpZiAodHlwZW9mIG9wdHMgPT09ICdmdW5jdGlvbicgJiYgIWNiKSB7XG4gICAgY2IgPSBvcHRzXG4gICAgb3B0cyA9IHt9XG4gIH0gZWxzZSBpZiAodHlwZW9mIG9wdHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBvcHRzID0geyBmaWx0ZXI6IG9wdHMgfVxuICB9XG5cbiAgY2IgPSBjYiB8fCBmdW5jdGlvbiAoKSB7fVxuICBvcHRzID0gb3B0cyB8fCB7fVxuXG4gIG9wdHMuY2xvYmJlciA9ICdjbG9iYmVyJyBpbiBvcHRzID8gISFvcHRzLmNsb2JiZXIgOiB0cnVlIC8vIGRlZmF1bHQgdG8gdHJ1ZSBmb3Igbm93XG4gIG9wdHMub3ZlcndyaXRlID0gJ292ZXJ3cml0ZScgaW4gb3B0cyA/ICEhb3B0cy5vdmVyd3JpdGUgOiBvcHRzLmNsb2JiZXIgLy8gb3ZlcndyaXRlIGZhbGxzIGJhY2sgdG8gY2xvYmJlclxuXG4gIC8vIFdhcm4gYWJvdXQgdXNpbmcgcHJlc2VydmVUaW1lc3RhbXBzIG9uIDMyLWJpdCBub2RlXG4gIGlmIChvcHRzLnByZXNlcnZlVGltZXN0YW1wcyAmJiBwcm9jZXNzLmFyY2ggPT09ICdpYTMyJykge1xuICAgIGNvbnNvbGUud2FybihgZnMtZXh0cmE6IFVzaW5nIHRoZSBwcmVzZXJ2ZVRpbWVzdGFtcHMgb3B0aW9uIGluIDMyLWJpdCBub2RlIGlzIG5vdCByZWNvbW1lbmRlZDtcXG5cbiAgICBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2pwcmljaGFyZHNvbi9ub2RlLWZzLWV4dHJhL2lzc3Vlcy8yNjlgKVxuICB9XG5cbiAgc3RhdC5jaGVja1BhdGhzKHNyYywgZGVzdCwgJ2NvcHknLCAoZXJyLCBzdGF0cykgPT4ge1xuICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgY29uc3QgeyBzcmNTdGF0LCBkZXN0U3RhdCB9ID0gc3RhdHNcbiAgICBzdGF0LmNoZWNrUGFyZW50UGF0aHMoc3JjLCBzcmNTdGF0LCBkZXN0LCAnY29weScsIGVyciA9PiB7XG4gICAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgICAgaWYgKG9wdHMuZmlsdGVyKSByZXR1cm4gaGFuZGxlRmlsdGVyKGNoZWNrUGFyZW50RGlyLCBkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzLCBjYilcbiAgICAgIHJldHVybiBjaGVja1BhcmVudERpcihkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzLCBjYilcbiAgICB9KVxuICB9KVxufVxuXG5mdW5jdGlvbiBjaGVja1BhcmVudERpciAoZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cywgY2IpIHtcbiAgY29uc3QgZGVzdFBhcmVudCA9IHBhdGguZGlybmFtZShkZXN0KVxuICBwYXRoRXhpc3RzKGRlc3RQYXJlbnQsIChlcnIsIGRpckV4aXN0cykgPT4ge1xuICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgaWYgKGRpckV4aXN0cykgcmV0dXJuIHN0YXJ0Q29weShkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzLCBjYilcbiAgICBta2RpcnMoZGVzdFBhcmVudCwgZXJyID0+IHtcbiAgICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgICByZXR1cm4gc3RhcnRDb3B5KGRlc3RTdGF0LCBzcmMsIGRlc3QsIG9wdHMsIGNiKVxuICAgIH0pXG4gIH0pXG59XG5cbmZ1bmN0aW9uIGhhbmRsZUZpbHRlciAob25JbmNsdWRlLCBkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzLCBjYikge1xuICBQcm9taXNlLnJlc29sdmUob3B0cy5maWx0ZXIoc3JjLCBkZXN0KSkudGhlbihpbmNsdWRlID0+IHtcbiAgICBpZiAoaW5jbHVkZSkgcmV0dXJuIG9uSW5jbHVkZShkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzLCBjYilcbiAgICByZXR1cm4gY2IoKVxuICB9LCBlcnJvciA9PiBjYihlcnJvcikpXG59XG5cbmZ1bmN0aW9uIHN0YXJ0Q29weSAoZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cywgY2IpIHtcbiAgaWYgKG9wdHMuZmlsdGVyKSByZXR1cm4gaGFuZGxlRmlsdGVyKGdldFN0YXRzLCBkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzLCBjYilcbiAgcmV0dXJuIGdldFN0YXRzKGRlc3RTdGF0LCBzcmMsIGRlc3QsIG9wdHMsIGNiKVxufVxuXG5mdW5jdGlvbiBnZXRTdGF0cyAoZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cywgY2IpIHtcbiAgY29uc3Qgc3RhdCA9IG9wdHMuZGVyZWZlcmVuY2UgPyBmcy5zdGF0IDogZnMubHN0YXRcbiAgc3RhdChzcmMsIChlcnIsIHNyY1N0YXQpID0+IHtcbiAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuXG4gICAgaWYgKHNyY1N0YXQuaXNEaXJlY3RvcnkoKSkgcmV0dXJuIG9uRGlyKHNyY1N0YXQsIGRlc3RTdGF0LCBzcmMsIGRlc3QsIG9wdHMsIGNiKVxuICAgIGVsc2UgaWYgKHNyY1N0YXQuaXNGaWxlKCkgfHxcbiAgICAgICAgICAgICBzcmNTdGF0LmlzQ2hhcmFjdGVyRGV2aWNlKCkgfHxcbiAgICAgICAgICAgICBzcmNTdGF0LmlzQmxvY2tEZXZpY2UoKSkgcmV0dXJuIG9uRmlsZShzcmNTdGF0LCBkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzLCBjYilcbiAgICBlbHNlIGlmIChzcmNTdGF0LmlzU3ltYm9saWNMaW5rKCkpIHJldHVybiBvbkxpbmsoZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cywgY2IpXG4gIH0pXG59XG5cbmZ1bmN0aW9uIG9uRmlsZSAoc3JjU3RhdCwgZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cywgY2IpIHtcbiAgaWYgKCFkZXN0U3RhdCkgcmV0dXJuIGNvcHlGaWxlKHNyY1N0YXQsIHNyYywgZGVzdCwgb3B0cywgY2IpXG4gIHJldHVybiBtYXlDb3B5RmlsZShzcmNTdGF0LCBzcmMsIGRlc3QsIG9wdHMsIGNiKVxufVxuXG5mdW5jdGlvbiBtYXlDb3B5RmlsZSAoc3JjU3RhdCwgc3JjLCBkZXN0LCBvcHRzLCBjYikge1xuICBpZiAob3B0cy5vdmVyd3JpdGUpIHtcbiAgICBmcy51bmxpbmsoZGVzdCwgZXJyID0+IHtcbiAgICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgICByZXR1cm4gY29weUZpbGUoc3JjU3RhdCwgc3JjLCBkZXN0LCBvcHRzLCBjYilcbiAgICB9KVxuICB9IGVsc2UgaWYgKG9wdHMuZXJyb3JPbkV4aXN0KSB7XG4gICAgcmV0dXJuIGNiKG5ldyBFcnJvcihgJyR7ZGVzdH0nIGFscmVhZHkgZXhpc3RzYCkpXG4gIH0gZWxzZSByZXR1cm4gY2IoKVxufVxuXG5mdW5jdGlvbiBjb3B5RmlsZSAoc3JjU3RhdCwgc3JjLCBkZXN0LCBvcHRzLCBjYikge1xuICBmcy5jb3B5RmlsZShzcmMsIGRlc3QsIGVyciA9PiB7XG4gICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICBpZiAob3B0cy5wcmVzZXJ2ZVRpbWVzdGFtcHMpIHJldHVybiBoYW5kbGVUaW1lc3RhbXBzQW5kTW9kZShzcmNTdGF0Lm1vZGUsIHNyYywgZGVzdCwgY2IpXG4gICAgcmV0dXJuIHNldERlc3RNb2RlKGRlc3QsIHNyY1N0YXQubW9kZSwgY2IpXG4gIH0pXG59XG5cbmZ1bmN0aW9uIGhhbmRsZVRpbWVzdGFtcHNBbmRNb2RlIChzcmNNb2RlLCBzcmMsIGRlc3QsIGNiKSB7XG4gIC8vIE1ha2Ugc3VyZSB0aGUgZmlsZSBpcyB3cml0YWJsZSBiZWZvcmUgc2V0dGluZyB0aGUgdGltZXN0YW1wXG4gIC8vIG90aGVyd2lzZSBvcGVuIGZhaWxzIHdpdGggRVBFUk0gd2hlbiBpbnZva2VkIHdpdGggJ3IrJ1xuICAvLyAodGhyb3VnaCB1dGltZXMgY2FsbClcbiAgaWYgKGZpbGVJc05vdFdyaXRhYmxlKHNyY01vZGUpKSB7XG4gICAgcmV0dXJuIG1ha2VGaWxlV3JpdGFibGUoZGVzdCwgc3JjTW9kZSwgZXJyID0+IHtcbiAgICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgICByZXR1cm4gc2V0RGVzdFRpbWVzdGFtcHNBbmRNb2RlKHNyY01vZGUsIHNyYywgZGVzdCwgY2IpXG4gICAgfSlcbiAgfVxuICByZXR1cm4gc2V0RGVzdFRpbWVzdGFtcHNBbmRNb2RlKHNyY01vZGUsIHNyYywgZGVzdCwgY2IpXG59XG5cbmZ1bmN0aW9uIGZpbGVJc05vdFdyaXRhYmxlIChzcmNNb2RlKSB7XG4gIHJldHVybiAoc3JjTW9kZSAmIDBvMjAwKSA9PT0gMFxufVxuXG5mdW5jdGlvbiBtYWtlRmlsZVdyaXRhYmxlIChkZXN0LCBzcmNNb2RlLCBjYikge1xuICByZXR1cm4gc2V0RGVzdE1vZGUoZGVzdCwgc3JjTW9kZSB8IDBvMjAwLCBjYilcbn1cblxuZnVuY3Rpb24gc2V0RGVzdFRpbWVzdGFtcHNBbmRNb2RlIChzcmNNb2RlLCBzcmMsIGRlc3QsIGNiKSB7XG4gIHNldERlc3RUaW1lc3RhbXBzKHNyYywgZGVzdCwgZXJyID0+IHtcbiAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgIHJldHVybiBzZXREZXN0TW9kZShkZXN0LCBzcmNNb2RlLCBjYilcbiAgfSlcbn1cblxuZnVuY3Rpb24gc2V0RGVzdE1vZGUgKGRlc3QsIHNyY01vZGUsIGNiKSB7XG4gIHJldHVybiBmcy5jaG1vZChkZXN0LCBzcmNNb2RlLCBjYilcbn1cblxuZnVuY3Rpb24gc2V0RGVzdFRpbWVzdGFtcHMgKHNyYywgZGVzdCwgY2IpIHtcbiAgLy8gVGhlIGluaXRpYWwgc3JjU3RhdC5hdGltZSBjYW5ub3QgYmUgdHJ1c3RlZFxuICAvLyBiZWNhdXNlIGl0IGlzIG1vZGlmaWVkIGJ5IHRoZSByZWFkKDIpIHN5c3RlbSBjYWxsXG4gIC8vIChTZWUgaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9mcy5odG1sI2ZzX3N0YXRfdGltZV92YWx1ZXMpXG4gIGZzLnN0YXQoc3JjLCAoZXJyLCB1cGRhdGVkU3JjU3RhdCkgPT4ge1xuICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgcmV0dXJuIHV0aW1lc01pbGxpcyhkZXN0LCB1cGRhdGVkU3JjU3RhdC5hdGltZSwgdXBkYXRlZFNyY1N0YXQubXRpbWUsIGNiKVxuICB9KVxufVxuXG5mdW5jdGlvbiBvbkRpciAoc3JjU3RhdCwgZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cywgY2IpIHtcbiAgaWYgKCFkZXN0U3RhdCkgcmV0dXJuIG1rRGlyQW5kQ29weShzcmNTdGF0Lm1vZGUsIHNyYywgZGVzdCwgb3B0cywgY2IpXG4gIGlmIChkZXN0U3RhdCAmJiAhZGVzdFN0YXQuaXNEaXJlY3RvcnkoKSkge1xuICAgIHJldHVybiBjYihuZXcgRXJyb3IoYENhbm5vdCBvdmVyd3JpdGUgbm9uLWRpcmVjdG9yeSAnJHtkZXN0fScgd2l0aCBkaXJlY3RvcnkgJyR7c3JjfScuYCkpXG4gIH1cbiAgcmV0dXJuIGNvcHlEaXIoc3JjLCBkZXN0LCBvcHRzLCBjYilcbn1cblxuZnVuY3Rpb24gbWtEaXJBbmRDb3B5IChzcmNNb2RlLCBzcmMsIGRlc3QsIG9wdHMsIGNiKSB7XG4gIGZzLm1rZGlyKGRlc3QsIGVyciA9PiB7XG4gICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICBjb3B5RGlyKHNyYywgZGVzdCwgb3B0cywgZXJyID0+IHtcbiAgICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgICByZXR1cm4gc2V0RGVzdE1vZGUoZGVzdCwgc3JjTW9kZSwgY2IpXG4gICAgfSlcbiAgfSlcbn1cblxuZnVuY3Rpb24gY29weURpciAoc3JjLCBkZXN0LCBvcHRzLCBjYikge1xuICBmcy5yZWFkZGlyKHNyYywgKGVyciwgaXRlbXMpID0+IHtcbiAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgIHJldHVybiBjb3B5RGlySXRlbXMoaXRlbXMsIHNyYywgZGVzdCwgb3B0cywgY2IpXG4gIH0pXG59XG5cbmZ1bmN0aW9uIGNvcHlEaXJJdGVtcyAoaXRlbXMsIHNyYywgZGVzdCwgb3B0cywgY2IpIHtcbiAgY29uc3QgaXRlbSA9IGl0ZW1zLnBvcCgpXG4gIGlmICghaXRlbSkgcmV0dXJuIGNiKClcbiAgcmV0dXJuIGNvcHlEaXJJdGVtKGl0ZW1zLCBpdGVtLCBzcmMsIGRlc3QsIG9wdHMsIGNiKVxufVxuXG5mdW5jdGlvbiBjb3B5RGlySXRlbSAoaXRlbXMsIGl0ZW0sIHNyYywgZGVzdCwgb3B0cywgY2IpIHtcbiAgY29uc3Qgc3JjSXRlbSA9IHBhdGguam9pbihzcmMsIGl0ZW0pXG4gIGNvbnN0IGRlc3RJdGVtID0gcGF0aC5qb2luKGRlc3QsIGl0ZW0pXG4gIHN0YXQuY2hlY2tQYXRocyhzcmNJdGVtLCBkZXN0SXRlbSwgJ2NvcHknLCAoZXJyLCBzdGF0cykgPT4ge1xuICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgY29uc3QgeyBkZXN0U3RhdCB9ID0gc3RhdHNcbiAgICBzdGFydENvcHkoZGVzdFN0YXQsIHNyY0l0ZW0sIGRlc3RJdGVtLCBvcHRzLCBlcnIgPT4ge1xuICAgICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICAgIHJldHVybiBjb3B5RGlySXRlbXMoaXRlbXMsIHNyYywgZGVzdCwgb3B0cywgY2IpXG4gICAgfSlcbiAgfSlcbn1cblxuZnVuY3Rpb24gb25MaW5rIChkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzLCBjYikge1xuICBmcy5yZWFkbGluayhzcmMsIChlcnIsIHJlc29sdmVkU3JjKSA9PiB7XG4gICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICBpZiAob3B0cy5kZXJlZmVyZW5jZSkge1xuICAgICAgcmVzb2x2ZWRTcmMgPSBwYXRoLnJlc29sdmUocHJvY2Vzcy5jd2QoKSwgcmVzb2x2ZWRTcmMpXG4gICAgfVxuXG4gICAgaWYgKCFkZXN0U3RhdCkge1xuICAgICAgcmV0dXJuIGZzLnN5bWxpbmsocmVzb2x2ZWRTcmMsIGRlc3QsIGNiKVxuICAgIH0gZWxzZSB7XG4gICAgICBmcy5yZWFkbGluayhkZXN0LCAoZXJyLCByZXNvbHZlZERlc3QpID0+IHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIC8vIGRlc3QgZXhpc3RzIGFuZCBpcyBhIHJlZ3VsYXIgZmlsZSBvciBkaXJlY3RvcnksXG4gICAgICAgICAgLy8gV2luZG93cyBtYXkgdGhyb3cgVU5LTk9XTiBlcnJvci4gSWYgZGVzdCBhbHJlYWR5IGV4aXN0cyxcbiAgICAgICAgICAvLyBmcyB0aHJvd3MgZXJyb3IgYW55d2F5LCBzbyBubyBuZWVkIHRvIGd1YXJkIGFnYWluc3QgaXQgaGVyZS5cbiAgICAgICAgICBpZiAoZXJyLmNvZGUgPT09ICdFSU5WQUwnIHx8IGVyci5jb2RlID09PSAnVU5LTk9XTicpIHJldHVybiBmcy5zeW1saW5rKHJlc29sdmVkU3JjLCBkZXN0LCBjYilcbiAgICAgICAgICByZXR1cm4gY2IoZXJyKVxuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRzLmRlcmVmZXJlbmNlKSB7XG4gICAgICAgICAgcmVzb2x2ZWREZXN0ID0gcGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCksIHJlc29sdmVkRGVzdClcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhdC5pc1NyY1N1YmRpcihyZXNvbHZlZFNyYywgcmVzb2x2ZWREZXN0KSkge1xuICAgICAgICAgIHJldHVybiBjYihuZXcgRXJyb3IoYENhbm5vdCBjb3B5ICcke3Jlc29sdmVkU3JjfScgdG8gYSBzdWJkaXJlY3Rvcnkgb2YgaXRzZWxmLCAnJHtyZXNvbHZlZERlc3R9Jy5gKSlcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGRvIG5vdCBjb3B5IGlmIHNyYyBpcyBhIHN1YmRpciBvZiBkZXN0IHNpbmNlIHVubGlua2luZ1xuICAgICAgICAvLyBkZXN0IGluIHRoaXMgY2FzZSB3b3VsZCByZXN1bHQgaW4gcmVtb3Zpbmcgc3JjIGNvbnRlbnRzXG4gICAgICAgIC8vIGFuZCB0aGVyZWZvcmUgYSBicm9rZW4gc3ltbGluayB3b3VsZCBiZSBjcmVhdGVkLlxuICAgICAgICBpZiAoZGVzdFN0YXQuaXNEaXJlY3RvcnkoKSAmJiBzdGF0LmlzU3JjU3ViZGlyKHJlc29sdmVkRGVzdCwgcmVzb2x2ZWRTcmMpKSB7XG4gICAgICAgICAgcmV0dXJuIGNiKG5ldyBFcnJvcihgQ2Fubm90IG92ZXJ3cml0ZSAnJHtyZXNvbHZlZERlc3R9JyB3aXRoICcke3Jlc29sdmVkU3JjfScuYCkpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvcHlMaW5rKHJlc29sdmVkU3JjLCBkZXN0LCBjYilcbiAgICAgIH0pXG4gICAgfVxuICB9KVxufVxuXG5mdW5jdGlvbiBjb3B5TGluayAocmVzb2x2ZWRTcmMsIGRlc3QsIGNiKSB7XG4gIGZzLnVubGluayhkZXN0LCBlcnIgPT4ge1xuICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgcmV0dXJuIGZzLnN5bWxpbmsocmVzb2x2ZWRTcmMsIGRlc3QsIGNiKVxuICB9KVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvcHlcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgdSA9IHJlcXVpcmUoJ3VuaXZlcnNhbGlmeScpLmZyb21DYWxsYmFja1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGNvcHk6IHUocmVxdWlyZSgnLi9jb3B5JykpXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGZzID0gcmVxdWlyZSgnZ3JhY2VmdWwtZnMnKVxuY29uc3QgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcblxuY29uc3QgaXNXaW5kb3dzID0gKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicpXG5cbmZ1bmN0aW9uIGRlZmF1bHRzIChvcHRpb25zKSB7XG4gIGNvbnN0IG1ldGhvZHMgPSBbXG4gICAgJ3VubGluaycsXG4gICAgJ2NobW9kJyxcbiAgICAnc3RhdCcsXG4gICAgJ2xzdGF0JyxcbiAgICAncm1kaXInLFxuICAgICdyZWFkZGlyJ1xuICBdXG4gIG1ldGhvZHMuZm9yRWFjaChtID0+IHtcbiAgICBvcHRpb25zW21dID0gb3B0aW9uc1ttXSB8fCBmc1ttXVxuICAgIG0gPSBtICsgJ1N5bmMnXG4gICAgb3B0aW9uc1ttXSA9IG9wdGlvbnNbbV0gfHwgZnNbbV1cbiAgfSlcblxuICBvcHRpb25zLm1heEJ1c3lUcmllcyA9IG9wdGlvbnMubWF4QnVzeVRyaWVzIHx8IDNcbn1cblxuZnVuY3Rpb24gcmltcmFmIChwLCBvcHRpb25zLCBjYikge1xuICBsZXQgYnVzeVRyaWVzID0gMFxuXG4gIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNiID0gb3B0aW9uc1xuICAgIG9wdGlvbnMgPSB7fVxuICB9XG5cbiAgYXNzZXJ0KHAsICdyaW1yYWY6IG1pc3NpbmcgcGF0aCcpXG4gIGFzc2VydC5zdHJpY3RFcXVhbCh0eXBlb2YgcCwgJ3N0cmluZycsICdyaW1yYWY6IHBhdGggc2hvdWxkIGJlIGEgc3RyaW5nJylcbiAgYXNzZXJ0LnN0cmljdEVxdWFsKHR5cGVvZiBjYiwgJ2Z1bmN0aW9uJywgJ3JpbXJhZjogY2FsbGJhY2sgZnVuY3Rpb24gcmVxdWlyZWQnKVxuICBhc3NlcnQob3B0aW9ucywgJ3JpbXJhZjogaW52YWxpZCBvcHRpb25zIGFyZ3VtZW50IHByb3ZpZGVkJylcbiAgYXNzZXJ0LnN0cmljdEVxdWFsKHR5cGVvZiBvcHRpb25zLCAnb2JqZWN0JywgJ3JpbXJhZjogb3B0aW9ucyBzaG91bGQgYmUgb2JqZWN0JylcblxuICBkZWZhdWx0cyhvcHRpb25zKVxuXG4gIHJpbXJhZl8ocCwgb3B0aW9ucywgZnVuY3Rpb24gQ0IgKGVyKSB7XG4gICAgaWYgKGVyKSB7XG4gICAgICBpZiAoKGVyLmNvZGUgPT09ICdFQlVTWScgfHwgZXIuY29kZSA9PT0gJ0VOT1RFTVBUWScgfHwgZXIuY29kZSA9PT0gJ0VQRVJNJykgJiZcbiAgICAgICAgICBidXN5VHJpZXMgPCBvcHRpb25zLm1heEJ1c3lUcmllcykge1xuICAgICAgICBidXN5VHJpZXMrK1xuICAgICAgICBjb25zdCB0aW1lID0gYnVzeVRyaWVzICogMTAwXG4gICAgICAgIC8vIHRyeSBhZ2Fpbiwgd2l0aCB0aGUgc2FtZSBleGFjdCBjYWxsYmFjayBhcyB0aGlzIG9uZS5cbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoKCkgPT4gcmltcmFmXyhwLCBvcHRpb25zLCBDQiksIHRpbWUpXG4gICAgICB9XG5cbiAgICAgIC8vIGFscmVhZHkgZ29uZVxuICAgICAgaWYgKGVyLmNvZGUgPT09ICdFTk9FTlQnKSBlciA9IG51bGxcbiAgICB9XG5cbiAgICBjYihlcilcbiAgfSlcbn1cblxuLy8gVHdvIHBvc3NpYmxlIHN0cmF0ZWdpZXMuXG4vLyAxLiBBc3N1bWUgaXQncyBhIGZpbGUuICB1bmxpbmsgaXQsIHRoZW4gZG8gdGhlIGRpciBzdHVmZiBvbiBFUEVSTSBvciBFSVNESVJcbi8vIDIuIEFzc3VtZSBpdCdzIGEgZGlyZWN0b3J5LiAgcmVhZGRpciwgdGhlbiBkbyB0aGUgZmlsZSBzdHVmZiBvbiBFTk9URElSXG4vL1xuLy8gQm90aCByZXN1bHQgaW4gYW4gZXh0cmEgc3lzY2FsbCB3aGVuIHlvdSBndWVzcyB3cm9uZy4gIEhvd2V2ZXIsIHRoZXJlXG4vLyBhcmUgbGlrZWx5IGZhciBtb3JlIG5vcm1hbCBmaWxlcyBpbiB0aGUgd29ybGQgdGhhbiBkaXJlY3Rvcmllcy4gIFRoaXNcbi8vIGlzIGJhc2VkIG9uIHRoZSBhc3N1bXB0aW9uIHRoYXQgYSB0aGUgYXZlcmFnZSBudW1iZXIgb2YgZmlsZXMgcGVyXG4vLyBkaXJlY3RvcnkgaXMgPj0gMS5cbi8vXG4vLyBJZiBhbnlvbmUgZXZlciBjb21wbGFpbnMgYWJvdXQgdGhpcywgdGhlbiBJIGd1ZXNzIHRoZSBzdHJhdGVneSBjb3VsZFxuLy8gYmUgbWFkZSBjb25maWd1cmFibGUgc29tZWhvdy4gIEJ1dCB1bnRpbCB0aGVuLCBZQUdOSS5cbmZ1bmN0aW9uIHJpbXJhZl8gKHAsIG9wdGlvbnMsIGNiKSB7XG4gIGFzc2VydChwKVxuICBhc3NlcnQob3B0aW9ucylcbiAgYXNzZXJ0KHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJylcblxuICAvLyBzdW5vcyBsZXRzIHRoZSByb290IHVzZXIgdW5saW5rIGRpcmVjdG9yaWVzLCB3aGljaCBpcy4uLiB3ZWlyZC5cbiAgLy8gc28gd2UgaGF2ZSB0byBsc3RhdCBoZXJlIGFuZCBtYWtlIHN1cmUgaXQncyBub3QgYSBkaXIuXG4gIG9wdGlvbnMubHN0YXQocCwgKGVyLCBzdCkgPT4ge1xuICAgIGlmIChlciAmJiBlci5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgcmV0dXJuIGNiKG51bGwpXG4gICAgfVxuXG4gICAgLy8gV2luZG93cyBjYW4gRVBFUk0gb24gc3RhdC4gIExpZmUgaXMgc3VmZmVyaW5nLlxuICAgIGlmIChlciAmJiBlci5jb2RlID09PSAnRVBFUk0nICYmIGlzV2luZG93cykge1xuICAgICAgcmV0dXJuIGZpeFdpbkVQRVJNKHAsIG9wdGlvbnMsIGVyLCBjYilcbiAgICB9XG5cbiAgICBpZiAoc3QgJiYgc3QuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgcmV0dXJuIHJtZGlyKHAsIG9wdGlvbnMsIGVyLCBjYilcbiAgICB9XG5cbiAgICBvcHRpb25zLnVubGluayhwLCBlciA9PiB7XG4gICAgICBpZiAoZXIpIHtcbiAgICAgICAgaWYgKGVyLmNvZGUgPT09ICdFTk9FTlQnKSB7XG4gICAgICAgICAgcmV0dXJuIGNiKG51bGwpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVyLmNvZGUgPT09ICdFUEVSTScpIHtcbiAgICAgICAgICByZXR1cm4gKGlzV2luZG93cylcbiAgICAgICAgICAgID8gZml4V2luRVBFUk0ocCwgb3B0aW9ucywgZXIsIGNiKVxuICAgICAgICAgICAgOiBybWRpcihwLCBvcHRpb25zLCBlciwgY2IpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVyLmNvZGUgPT09ICdFSVNESVInKSB7XG4gICAgICAgICAgcmV0dXJuIHJtZGlyKHAsIG9wdGlvbnMsIGVyLCBjYilcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGNiKGVyKVxuICAgIH0pXG4gIH0pXG59XG5cbmZ1bmN0aW9uIGZpeFdpbkVQRVJNIChwLCBvcHRpb25zLCBlciwgY2IpIHtcbiAgYXNzZXJ0KHApXG4gIGFzc2VydChvcHRpb25zKVxuICBhc3NlcnQodHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKVxuXG4gIG9wdGlvbnMuY2htb2QocCwgMG82NjYsIGVyMiA9PiB7XG4gICAgaWYgKGVyMikge1xuICAgICAgY2IoZXIyLmNvZGUgPT09ICdFTk9FTlQnID8gbnVsbCA6IGVyKVxuICAgIH0gZWxzZSB7XG4gICAgICBvcHRpb25zLnN0YXQocCwgKGVyMywgc3RhdHMpID0+IHtcbiAgICAgICAgaWYgKGVyMykge1xuICAgICAgICAgIGNiKGVyMy5jb2RlID09PSAnRU5PRU5UJyA/IG51bGwgOiBlcilcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0cy5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgICAgcm1kaXIocCwgb3B0aW9ucywgZXIsIGNiKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9wdGlvbnMudW5saW5rKHAsIGNiKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfSlcbn1cblxuZnVuY3Rpb24gZml4V2luRVBFUk1TeW5jIChwLCBvcHRpb25zLCBlcikge1xuICBsZXQgc3RhdHNcblxuICBhc3NlcnQocClcbiAgYXNzZXJ0KG9wdGlvbnMpXG5cbiAgdHJ5IHtcbiAgICBvcHRpb25zLmNobW9kU3luYyhwLCAwbzY2NilcbiAgfSBjYXRjaCAoZXIyKSB7XG4gICAgaWYgKGVyMi5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgcmV0dXJuXG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IGVyXG4gICAgfVxuICB9XG5cbiAgdHJ5IHtcbiAgICBzdGF0cyA9IG9wdGlvbnMuc3RhdFN5bmMocClcbiAgfSBjYXRjaCAoZXIzKSB7XG4gICAgaWYgKGVyMy5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgcmV0dXJuXG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IGVyXG4gICAgfVxuICB9XG5cbiAgaWYgKHN0YXRzLmlzRGlyZWN0b3J5KCkpIHtcbiAgICBybWRpclN5bmMocCwgb3B0aW9ucywgZXIpXG4gIH0gZWxzZSB7XG4gICAgb3B0aW9ucy51bmxpbmtTeW5jKHApXG4gIH1cbn1cblxuZnVuY3Rpb24gcm1kaXIgKHAsIG9wdGlvbnMsIG9yaWdpbmFsRXIsIGNiKSB7XG4gIGFzc2VydChwKVxuICBhc3NlcnQob3B0aW9ucylcbiAgYXNzZXJ0KHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJylcblxuICAvLyB0cnkgdG8gcm1kaXIgZmlyc3QsIGFuZCBvbmx5IHJlYWRkaXIgb24gRU5PVEVNUFRZIG9yIEVFWElTVCAoU3VuT1MpXG4gIC8vIGlmIHdlIGd1ZXNzZWQgd3JvbmcsIGFuZCBpdCdzIG5vdCBhIGRpcmVjdG9yeSwgdGhlblxuICAvLyByYWlzZSB0aGUgb3JpZ2luYWwgZXJyb3IuXG4gIG9wdGlvbnMucm1kaXIocCwgZXIgPT4ge1xuICAgIGlmIChlciAmJiAoZXIuY29kZSA9PT0gJ0VOT1RFTVBUWScgfHwgZXIuY29kZSA9PT0gJ0VFWElTVCcgfHwgZXIuY29kZSA9PT0gJ0VQRVJNJykpIHtcbiAgICAgIHJta2lkcyhwLCBvcHRpb25zLCBjYilcbiAgICB9IGVsc2UgaWYgKGVyICYmIGVyLmNvZGUgPT09ICdFTk9URElSJykge1xuICAgICAgY2Iob3JpZ2luYWxFcilcbiAgICB9IGVsc2Uge1xuICAgICAgY2IoZXIpXG4gICAgfVxuICB9KVxufVxuXG5mdW5jdGlvbiBybWtpZHMgKHAsIG9wdGlvbnMsIGNiKSB7XG4gIGFzc2VydChwKVxuICBhc3NlcnQob3B0aW9ucylcbiAgYXNzZXJ0KHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJylcblxuICBvcHRpb25zLnJlYWRkaXIocCwgKGVyLCBmaWxlcykgPT4ge1xuICAgIGlmIChlcikgcmV0dXJuIGNiKGVyKVxuXG4gICAgbGV0IG4gPSBmaWxlcy5sZW5ndGhcbiAgICBsZXQgZXJyU3RhdGVcblxuICAgIGlmIChuID09PSAwKSByZXR1cm4gb3B0aW9ucy5ybWRpcihwLCBjYilcblxuICAgIGZpbGVzLmZvckVhY2goZiA9PiB7XG4gICAgICByaW1yYWYocGF0aC5qb2luKHAsIGYpLCBvcHRpb25zLCBlciA9PiB7XG4gICAgICAgIGlmIChlcnJTdGF0ZSkge1xuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGlmIChlcikgcmV0dXJuIGNiKGVyclN0YXRlID0gZXIpXG4gICAgICAgIGlmICgtLW4gPT09IDApIHtcbiAgICAgICAgICBvcHRpb25zLnJtZGlyKHAsIGNiKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0pXG4gIH0pXG59XG5cbi8vIHRoaXMgbG9va3Mgc2ltcGxlciwgYW5kIGlzIHN0cmljdGx5ICpmYXN0ZXIqLCBidXQgd2lsbFxuLy8gdGllIHVwIHRoZSBKYXZhU2NyaXB0IHRocmVhZCBhbmQgZmFpbCBvbiBleGNlc3NpdmVseVxuLy8gZGVlcCBkaXJlY3RvcnkgdHJlZXMuXG5mdW5jdGlvbiByaW1yYWZTeW5jIChwLCBvcHRpb25zKSB7XG4gIGxldCBzdFxuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9XG4gIGRlZmF1bHRzKG9wdGlvbnMpXG5cbiAgYXNzZXJ0KHAsICdyaW1yYWY6IG1pc3NpbmcgcGF0aCcpXG4gIGFzc2VydC5zdHJpY3RFcXVhbCh0eXBlb2YgcCwgJ3N0cmluZycsICdyaW1yYWY6IHBhdGggc2hvdWxkIGJlIGEgc3RyaW5nJylcbiAgYXNzZXJ0KG9wdGlvbnMsICdyaW1yYWY6IG1pc3Npbmcgb3B0aW9ucycpXG4gIGFzc2VydC5zdHJpY3RFcXVhbCh0eXBlb2Ygb3B0aW9ucywgJ29iamVjdCcsICdyaW1yYWY6IG9wdGlvbnMgc2hvdWxkIGJlIG9iamVjdCcpXG5cbiAgdHJ5IHtcbiAgICBzdCA9IG9wdGlvbnMubHN0YXRTeW5jKHApXG4gIH0gY2F0Y2ggKGVyKSB7XG4gICAgaWYgKGVyLmNvZGUgPT09ICdFTk9FTlQnKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBXaW5kb3dzIGNhbiBFUEVSTSBvbiBzdGF0LiAgTGlmZSBpcyBzdWZmZXJpbmcuXG4gICAgaWYgKGVyLmNvZGUgPT09ICdFUEVSTScgJiYgaXNXaW5kb3dzKSB7XG4gICAgICBmaXhXaW5FUEVSTVN5bmMocCwgb3B0aW9ucywgZXIpXG4gICAgfVxuICB9XG5cbiAgdHJ5IHtcbiAgICAvLyBzdW5vcyBsZXRzIHRoZSByb290IHVzZXIgdW5saW5rIGRpcmVjdG9yaWVzLCB3aGljaCBpcy4uLiB3ZWlyZC5cbiAgICBpZiAoc3QgJiYgc3QuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgcm1kaXJTeW5jKHAsIG9wdGlvbnMsIG51bGwpXG4gICAgfSBlbHNlIHtcbiAgICAgIG9wdGlvbnMudW5saW5rU3luYyhwKVxuICAgIH1cbiAgfSBjYXRjaCAoZXIpIHtcbiAgICBpZiAoZXIuY29kZSA9PT0gJ0VOT0VOVCcpIHtcbiAgICAgIHJldHVyblxuICAgIH0gZWxzZSBpZiAoZXIuY29kZSA9PT0gJ0VQRVJNJykge1xuICAgICAgcmV0dXJuIGlzV2luZG93cyA/IGZpeFdpbkVQRVJNU3luYyhwLCBvcHRpb25zLCBlcikgOiBybWRpclN5bmMocCwgb3B0aW9ucywgZXIpXG4gICAgfSBlbHNlIGlmIChlci5jb2RlICE9PSAnRUlTRElSJykge1xuICAgICAgdGhyb3cgZXJcbiAgICB9XG4gICAgcm1kaXJTeW5jKHAsIG9wdGlvbnMsIGVyKVxuICB9XG59XG5cbmZ1bmN0aW9uIHJtZGlyU3luYyAocCwgb3B0aW9ucywgb3JpZ2luYWxFcikge1xuICBhc3NlcnQocClcbiAgYXNzZXJ0KG9wdGlvbnMpXG5cbiAgdHJ5IHtcbiAgICBvcHRpb25zLnJtZGlyU3luYyhwKVxuICB9IGNhdGNoIChlcikge1xuICAgIGlmIChlci5jb2RlID09PSAnRU5PVERJUicpIHtcbiAgICAgIHRocm93IG9yaWdpbmFsRXJcbiAgICB9IGVsc2UgaWYgKGVyLmNvZGUgPT09ICdFTk9URU1QVFknIHx8IGVyLmNvZGUgPT09ICdFRVhJU1QnIHx8IGVyLmNvZGUgPT09ICdFUEVSTScpIHtcbiAgICAgIHJta2lkc1N5bmMocCwgb3B0aW9ucylcbiAgICB9IGVsc2UgaWYgKGVyLmNvZGUgIT09ICdFTk9FTlQnKSB7XG4gICAgICB0aHJvdyBlclxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBybWtpZHNTeW5jIChwLCBvcHRpb25zKSB7XG4gIGFzc2VydChwKVxuICBhc3NlcnQob3B0aW9ucylcbiAgb3B0aW9ucy5yZWFkZGlyU3luYyhwKS5mb3JFYWNoKGYgPT4gcmltcmFmU3luYyhwYXRoLmpvaW4ocCwgZiksIG9wdGlvbnMpKVxuXG4gIGlmIChpc1dpbmRvd3MpIHtcbiAgICAvLyBXZSBvbmx5IGVuZCB1cCBoZXJlIG9uY2Ugd2UgZ290IEVOT1RFTVBUWSBhdCBsZWFzdCBvbmNlLCBhbmRcbiAgICAvLyBhdCB0aGlzIHBvaW50LCB3ZSBhcmUgZ3VhcmFudGVlZCB0byBoYXZlIHJlbW92ZWQgYWxsIHRoZSBraWRzLlxuICAgIC8vIFNvLCB3ZSBrbm93IHRoYXQgaXQgd29uJ3QgYmUgRU5PRU5UIG9yIEVOT1RESVIgb3IgYW55dGhpbmcgZWxzZS5cbiAgICAvLyB0cnkgcmVhbGx5IGhhcmQgdG8gZGVsZXRlIHN0dWZmIG9uIHdpbmRvd3MsIGJlY2F1c2UgaXQgaGFzIGFcbiAgICAvLyBQUk9GT1VORExZIGFubm95aW5nIGhhYml0IG9mIG5vdCBjbG9zaW5nIGhhbmRsZXMgcHJvbXB0bHkgd2hlblxuICAgIC8vIGZpbGVzIGFyZSBkZWxldGVkLCByZXN1bHRpbmcgaW4gc3B1cmlvdXMgRU5PVEVNUFRZIGVycm9ycy5cbiAgICBjb25zdCBzdGFydFRpbWUgPSBEYXRlLm5vdygpXG4gICAgZG8ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmV0ID0gb3B0aW9ucy5ybWRpclN5bmMocCwgb3B0aW9ucylcbiAgICAgICAgcmV0dXJuIHJldFxuICAgICAgfSBjYXRjaCB7fVxuICAgIH0gd2hpbGUgKERhdGUubm93KCkgLSBzdGFydFRpbWUgPCA1MDApIC8vIGdpdmUgdXAgYWZ0ZXIgNTAwbXNcbiAgfSBlbHNlIHtcbiAgICBjb25zdCByZXQgPSBvcHRpb25zLnJtZGlyU3luYyhwLCBvcHRpb25zKVxuICAgIHJldHVybiByZXRcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHJpbXJhZlxucmltcmFmLnN5bmMgPSByaW1yYWZTeW5jXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHUgPSByZXF1aXJlKCd1bml2ZXJzYWxpZnknKS5mcm9tQ2FsbGJhY2tcbmNvbnN0IHJpbXJhZiA9IHJlcXVpcmUoJy4vcmltcmFmJylcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHJlbW92ZTogdShyaW1yYWYpLFxuICByZW1vdmVTeW5jOiByaW1yYWYuc3luY1xufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB1ID0gcmVxdWlyZSgndW5pdmVyc2FsaWZ5JykuZnJvbUNhbGxiYWNrXG5jb25zdCBmcyA9IHJlcXVpcmUoJ2dyYWNlZnVsLWZzJylcbmNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJylcbmNvbnN0IG1rZGlyID0gcmVxdWlyZSgnLi4vbWtkaXJzJylcbmNvbnN0IHJlbW92ZSA9IHJlcXVpcmUoJy4uL3JlbW92ZScpXG5cbmNvbnN0IGVtcHR5RGlyID0gdShmdW5jdGlvbiBlbXB0eURpciAoZGlyLCBjYWxsYmFjaykge1xuICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9XG4gIGZzLnJlYWRkaXIoZGlyLCAoZXJyLCBpdGVtcykgPT4ge1xuICAgIGlmIChlcnIpIHJldHVybiBta2Rpci5ta2RpcnMoZGlyLCBjYWxsYmFjaylcblxuICAgIGl0ZW1zID0gaXRlbXMubWFwKGl0ZW0gPT4gcGF0aC5qb2luKGRpciwgaXRlbSkpXG5cbiAgICBkZWxldGVJdGVtKClcblxuICAgIGZ1bmN0aW9uIGRlbGV0ZUl0ZW0gKCkge1xuICAgICAgY29uc3QgaXRlbSA9IGl0ZW1zLnBvcCgpXG4gICAgICBpZiAoIWl0ZW0pIHJldHVybiBjYWxsYmFjaygpXG4gICAgICByZW1vdmUucmVtb3ZlKGl0ZW0sIGVyciA9PiB7XG4gICAgICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpXG4gICAgICAgIGRlbGV0ZUl0ZW0oKVxuICAgICAgfSlcbiAgICB9XG4gIH0pXG59KVxuXG5mdW5jdGlvbiBlbXB0eURpclN5bmMgKGRpcikge1xuICBsZXQgaXRlbXNcbiAgdHJ5IHtcbiAgICBpdGVtcyA9IGZzLnJlYWRkaXJTeW5jKGRpcilcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIG1rZGlyLm1rZGlyc1N5bmMoZGlyKVxuICB9XG5cbiAgaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICBpdGVtID0gcGF0aC5qb2luKGRpciwgaXRlbSlcbiAgICByZW1vdmUucmVtb3ZlU3luYyhpdGVtKVxuICB9KVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZW1wdHlEaXJTeW5jLFxuICBlbXB0eWRpclN5bmM6IGVtcHR5RGlyU3luYyxcbiAgZW1wdHlEaXIsXG4gIGVtcHR5ZGlyOiBlbXB0eURpclxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB1ID0gcmVxdWlyZSgndW5pdmVyc2FsaWZ5JykuZnJvbUNhbGxiYWNrXG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpXG5jb25zdCBmcyA9IHJlcXVpcmUoJ2dyYWNlZnVsLWZzJylcbmNvbnN0IG1rZGlyID0gcmVxdWlyZSgnLi4vbWtkaXJzJylcblxuZnVuY3Rpb24gY3JlYXRlRmlsZSAoZmlsZSwgY2FsbGJhY2spIHtcbiAgZnVuY3Rpb24gbWFrZUZpbGUgKCkge1xuICAgIGZzLndyaXRlRmlsZShmaWxlLCAnJywgZXJyID0+IHtcbiAgICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpXG4gICAgICBjYWxsYmFjaygpXG4gICAgfSlcbiAgfVxuXG4gIGZzLnN0YXQoZmlsZSwgKGVyciwgc3RhdHMpID0+IHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBoYW5kbGUtY2FsbGJhY2stZXJyXG4gICAgaWYgKCFlcnIgJiYgc3RhdHMuaXNGaWxlKCkpIHJldHVybiBjYWxsYmFjaygpXG4gICAgY29uc3QgZGlyID0gcGF0aC5kaXJuYW1lKGZpbGUpXG4gICAgZnMuc3RhdChkaXIsIChlcnIsIHN0YXRzKSA9PiB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIC8vIGlmIHRoZSBkaXJlY3RvcnkgZG9lc24ndCBleGlzdCwgbWFrZSBpdFxuICAgICAgICBpZiAoZXJyLmNvZGUgPT09ICdFTk9FTlQnKSB7XG4gICAgICAgICAgcmV0dXJuIG1rZGlyLm1rZGlycyhkaXIsIGVyciA9PiB7XG4gICAgICAgICAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKVxuICAgICAgICAgICAgbWFrZUZpbGUoKVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycilcbiAgICAgIH1cblxuICAgICAgaWYgKHN0YXRzLmlzRGlyZWN0b3J5KCkpIG1ha2VGaWxlKClcbiAgICAgIGVsc2Uge1xuICAgICAgICAvLyBwYXJlbnQgaXMgbm90IGEgZGlyZWN0b3J5XG4gICAgICAgIC8vIFRoaXMgaXMganVzdCB0byBjYXVzZSBhbiBpbnRlcm5hbCBFTk9URElSIGVycm9yIHRvIGJlIHRocm93blxuICAgICAgICBmcy5yZWFkZGlyKGRpciwgZXJyID0+IHtcbiAgICAgICAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0pXG4gIH0pXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUZpbGVTeW5jIChmaWxlKSB7XG4gIGxldCBzdGF0c1xuICB0cnkge1xuICAgIHN0YXRzID0gZnMuc3RhdFN5bmMoZmlsZSlcbiAgfSBjYXRjaCB7fVxuICBpZiAoc3RhdHMgJiYgc3RhdHMuaXNGaWxlKCkpIHJldHVyblxuXG4gIGNvbnN0IGRpciA9IHBhdGguZGlybmFtZShmaWxlKVxuICB0cnkge1xuICAgIGlmICghZnMuc3RhdFN5bmMoZGlyKS5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAvLyBwYXJlbnQgaXMgbm90IGEgZGlyZWN0b3J5XG4gICAgICAvLyBUaGlzIGlzIGp1c3QgdG8gY2F1c2UgYW4gaW50ZXJuYWwgRU5PVERJUiBlcnJvciB0byBiZSB0aHJvd25cbiAgICAgIGZzLnJlYWRkaXJTeW5jKGRpcilcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIC8vIElmIHRoZSBzdGF0IGNhbGwgYWJvdmUgZmFpbGVkIGJlY2F1c2UgdGhlIGRpcmVjdG9yeSBkb2Vzbid0IGV4aXN0LCBjcmVhdGUgaXRcbiAgICBpZiAoZXJyICYmIGVyci5jb2RlID09PSAnRU5PRU5UJykgbWtkaXIubWtkaXJzU3luYyhkaXIpXG4gICAgZWxzZSB0aHJvdyBlcnJcbiAgfVxuXG4gIGZzLndyaXRlRmlsZVN5bmMoZmlsZSwgJycpXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBjcmVhdGVGaWxlOiB1KGNyZWF0ZUZpbGUpLFxuICBjcmVhdGVGaWxlU3luY1xufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB1ID0gcmVxdWlyZSgndW5pdmVyc2FsaWZ5JykuZnJvbUNhbGxiYWNrXG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpXG5jb25zdCBmcyA9IHJlcXVpcmUoJ2dyYWNlZnVsLWZzJylcbmNvbnN0IG1rZGlyID0gcmVxdWlyZSgnLi4vbWtkaXJzJylcbmNvbnN0IHBhdGhFeGlzdHMgPSByZXF1aXJlKCcuLi9wYXRoLWV4aXN0cycpLnBhdGhFeGlzdHNcblxuZnVuY3Rpb24gY3JlYXRlTGluayAoc3JjcGF0aCwgZHN0cGF0aCwgY2FsbGJhY2spIHtcbiAgZnVuY3Rpb24gbWFrZUxpbmsgKHNyY3BhdGgsIGRzdHBhdGgpIHtcbiAgICBmcy5saW5rKHNyY3BhdGgsIGRzdHBhdGgsIGVyciA9PiB7XG4gICAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKVxuICAgICAgY2FsbGJhY2sobnVsbClcbiAgICB9KVxuICB9XG5cbiAgcGF0aEV4aXN0cyhkc3RwYXRoLCAoZXJyLCBkZXN0aW5hdGlvbkV4aXN0cykgPT4ge1xuICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpXG4gICAgaWYgKGRlc3RpbmF0aW9uRXhpc3RzKSByZXR1cm4gY2FsbGJhY2sobnVsbClcbiAgICBmcy5sc3RhdChzcmNwYXRoLCAoZXJyKSA9PiB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIGVyci5tZXNzYWdlID0gZXJyLm1lc3NhZ2UucmVwbGFjZSgnbHN0YXQnLCAnZW5zdXJlTGluaycpXG4gICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRpciA9IHBhdGguZGlybmFtZShkc3RwYXRoKVxuICAgICAgcGF0aEV4aXN0cyhkaXIsIChlcnIsIGRpckV4aXN0cykgPT4ge1xuICAgICAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKVxuICAgICAgICBpZiAoZGlyRXhpc3RzKSByZXR1cm4gbWFrZUxpbmsoc3JjcGF0aCwgZHN0cGF0aClcbiAgICAgICAgbWtkaXIubWtkaXJzKGRpciwgZXJyID0+IHtcbiAgICAgICAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKVxuICAgICAgICAgIG1ha2VMaW5rKHNyY3BhdGgsIGRzdHBhdGgpXG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgIH0pXG4gIH0pXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUxpbmtTeW5jIChzcmNwYXRoLCBkc3RwYXRoKSB7XG4gIGNvbnN0IGRlc3RpbmF0aW9uRXhpc3RzID0gZnMuZXhpc3RzU3luYyhkc3RwYXRoKVxuICBpZiAoZGVzdGluYXRpb25FeGlzdHMpIHJldHVybiB1bmRlZmluZWRcblxuICB0cnkge1xuICAgIGZzLmxzdGF0U3luYyhzcmNwYXRoKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBlcnIubWVzc2FnZSA9IGVyci5tZXNzYWdlLnJlcGxhY2UoJ2xzdGF0JywgJ2Vuc3VyZUxpbmsnKVxuICAgIHRocm93IGVyclxuICB9XG5cbiAgY29uc3QgZGlyID0gcGF0aC5kaXJuYW1lKGRzdHBhdGgpXG4gIGNvbnN0IGRpckV4aXN0cyA9IGZzLmV4aXN0c1N5bmMoZGlyKVxuICBpZiAoZGlyRXhpc3RzKSByZXR1cm4gZnMubGlua1N5bmMoc3JjcGF0aCwgZHN0cGF0aClcbiAgbWtkaXIubWtkaXJzU3luYyhkaXIpXG5cbiAgcmV0dXJuIGZzLmxpbmtTeW5jKHNyY3BhdGgsIGRzdHBhdGgpXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBjcmVhdGVMaW5rOiB1KGNyZWF0ZUxpbmspLFxuICBjcmVhdGVMaW5rU3luY1xufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpXG5jb25zdCBmcyA9IHJlcXVpcmUoJ2dyYWNlZnVsLWZzJylcbmNvbnN0IHBhdGhFeGlzdHMgPSByZXF1aXJlKCcuLi9wYXRoLWV4aXN0cycpLnBhdGhFeGlzdHNcblxuLyoqXG4gKiBGdW5jdGlvbiB0aGF0IHJldHVybnMgdHdvIHR5cGVzIG9mIHBhdGhzLCBvbmUgcmVsYXRpdmUgdG8gc3ltbGluaywgYW5kIG9uZVxuICogcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuIENoZWNrcyBpZiBwYXRoIGlzIGFic29sdXRlIG9yXG4gKiByZWxhdGl2ZS4gSWYgdGhlIHBhdGggaXMgcmVsYXRpdmUsIHRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmIHRoZSBwYXRoIGlzXG4gKiByZWxhdGl2ZSB0byBzeW1saW5rIG9yIHJlbGF0aXZlIHRvIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuIFRoaXMgaXMgYW5cbiAqIGluaXRpYXRpdmUgdG8gZmluZCBhIHNtYXJ0ZXIgYHNyY3BhdGhgIHRvIHN1cHBseSB3aGVuIGJ1aWxkaW5nIHN5bWxpbmtzLlxuICogVGhpcyBhbGxvd3MgeW91IHRvIGRldGVybWluZSB3aGljaCBwYXRoIHRvIHVzZSBvdXQgb2Ygb25lIG9mIHRocmVlIHBvc3NpYmxlXG4gKiB0eXBlcyBvZiBzb3VyY2UgcGF0aHMuIFRoZSBmaXJzdCBpcyBhbiBhYnNvbHV0ZSBwYXRoLiBUaGlzIGlzIGRldGVjdGVkIGJ5XG4gKiBgcGF0aC5pc0Fic29sdXRlKClgLiBXaGVuIGFuIGFic29sdXRlIHBhdGggaXMgcHJvdmlkZWQsIGl0IGlzIGNoZWNrZWQgdG9cbiAqIHNlZSBpZiBpdCBleGlzdHMuIElmIGl0IGRvZXMgaXQncyB1c2VkLCBpZiBub3QgYW4gZXJyb3IgaXMgcmV0dXJuZWRcbiAqIChjYWxsYmFjaykvIHRocm93biAoc3luYykuIFRoZSBvdGhlciB0d28gb3B0aW9ucyBmb3IgYHNyY3BhdGhgIGFyZSBhXG4gKiByZWxhdGl2ZSB1cmwuIEJ5IGRlZmF1bHQgTm9kZSdzIGBmcy5zeW1saW5rYCB3b3JrcyBieSBjcmVhdGluZyBhIHN5bWxpbmtcbiAqIHVzaW5nIGBkc3RwYXRoYCBhbmQgZXhwZWN0cyB0aGUgYHNyY3BhdGhgIHRvIGJlIHJlbGF0aXZlIHRvIHRoZSBuZXdseVxuICogY3JlYXRlZCBzeW1saW5rLiBJZiB5b3UgcHJvdmlkZSBhIGBzcmNwYXRoYCB0aGF0IGRvZXMgbm90IGV4aXN0IG9uIHRoZSBmaWxlXG4gKiBzeXN0ZW0gaXQgcmVzdWx0cyBpbiBhIGJyb2tlbiBzeW1saW5rLiBUbyBtaW5pbWl6ZSB0aGlzLCB0aGUgZnVuY3Rpb25cbiAqIGNoZWNrcyB0byBzZWUgaWYgdGhlICdyZWxhdGl2ZSB0byBzeW1saW5rJyBzb3VyY2UgZmlsZSBleGlzdHMsIGFuZCBpZiBpdFxuICogZG9lcyBpdCB3aWxsIHVzZSBpdC4gSWYgaXQgZG9lcyBub3QsIGl0IGNoZWNrcyBpZiB0aGVyZSdzIGEgZmlsZSB0aGF0XG4gKiBleGlzdHMgdGhhdCBpcyByZWxhdGl2ZSB0byB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSwgaWYgZG9lcyBpdHMgdXNlZC5cbiAqIFRoaXMgcHJlc2VydmVzIHRoZSBleHBlY3RhdGlvbnMgb2YgdGhlIG9yaWdpbmFsIGZzLnN5bWxpbmsgc3BlYyBhbmQgYWRkc1xuICogdGhlIGFiaWxpdHkgdG8gcGFzcyBpbiBgcmVsYXRpdmUgdG8gY3VycmVudCB3b3JraW5nIGRpcmVjb3RyeWAgcGF0aHMuXG4gKi9cblxuZnVuY3Rpb24gc3ltbGlua1BhdGhzIChzcmNwYXRoLCBkc3RwYXRoLCBjYWxsYmFjaykge1xuICBpZiAocGF0aC5pc0Fic29sdXRlKHNyY3BhdGgpKSB7XG4gICAgcmV0dXJuIGZzLmxzdGF0KHNyY3BhdGgsIChlcnIpID0+IHtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgZXJyLm1lc3NhZ2UgPSBlcnIubWVzc2FnZS5yZXBsYWNlKCdsc3RhdCcsICdlbnN1cmVTeW1saW5rJylcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycilcbiAgICAgIH1cbiAgICAgIHJldHVybiBjYWxsYmFjayhudWxsLCB7XG4gICAgICAgIHRvQ3dkOiBzcmNwYXRoLFxuICAgICAgICB0b0RzdDogc3JjcGF0aFxuICAgICAgfSlcbiAgICB9KVxuICB9IGVsc2Uge1xuICAgIGNvbnN0IGRzdGRpciA9IHBhdGguZGlybmFtZShkc3RwYXRoKVxuICAgIGNvbnN0IHJlbGF0aXZlVG9Ec3QgPSBwYXRoLmpvaW4oZHN0ZGlyLCBzcmNwYXRoKVxuICAgIHJldHVybiBwYXRoRXhpc3RzKHJlbGF0aXZlVG9Ec3QsIChlcnIsIGV4aXN0cykgPT4ge1xuICAgICAgaWYgKGVycikgcmV0dXJuIGNhbGxiYWNrKGVycilcbiAgICAgIGlmIChleGlzdHMpIHtcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwsIHtcbiAgICAgICAgICB0b0N3ZDogcmVsYXRpdmVUb0RzdCxcbiAgICAgICAgICB0b0RzdDogc3JjcGF0aFxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZzLmxzdGF0KHNyY3BhdGgsIChlcnIpID0+IHtcbiAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICBlcnIubWVzc2FnZSA9IGVyci5tZXNzYWdlLnJlcGxhY2UoJ2xzdGF0JywgJ2Vuc3VyZVN5bWxpbmsnKVxuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycilcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwsIHtcbiAgICAgICAgICAgIHRvQ3dkOiBzcmNwYXRoLFxuICAgICAgICAgICAgdG9Ec3Q6IHBhdGgucmVsYXRpdmUoZHN0ZGlyLCBzcmNwYXRoKVxuICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSlcbiAgfVxufVxuXG5mdW5jdGlvbiBzeW1saW5rUGF0aHNTeW5jIChzcmNwYXRoLCBkc3RwYXRoKSB7XG4gIGxldCBleGlzdHNcbiAgaWYgKHBhdGguaXNBYnNvbHV0ZShzcmNwYXRoKSkge1xuICAgIGV4aXN0cyA9IGZzLmV4aXN0c1N5bmMoc3JjcGF0aClcbiAgICBpZiAoIWV4aXN0cykgdGhyb3cgbmV3IEVycm9yKCdhYnNvbHV0ZSBzcmNwYXRoIGRvZXMgbm90IGV4aXN0JylcbiAgICByZXR1cm4ge1xuICAgICAgdG9Dd2Q6IHNyY3BhdGgsXG4gICAgICB0b0RzdDogc3JjcGF0aFxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjb25zdCBkc3RkaXIgPSBwYXRoLmRpcm5hbWUoZHN0cGF0aClcbiAgICBjb25zdCByZWxhdGl2ZVRvRHN0ID0gcGF0aC5qb2luKGRzdGRpciwgc3JjcGF0aClcbiAgICBleGlzdHMgPSBmcy5leGlzdHNTeW5jKHJlbGF0aXZlVG9Ec3QpXG4gICAgaWYgKGV4aXN0cykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdG9Dd2Q6IHJlbGF0aXZlVG9Ec3QsXG4gICAgICAgIHRvRHN0OiBzcmNwYXRoXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGV4aXN0cyA9IGZzLmV4aXN0c1N5bmMoc3JjcGF0aClcbiAgICAgIGlmICghZXhpc3RzKSB0aHJvdyBuZXcgRXJyb3IoJ3JlbGF0aXZlIHNyY3BhdGggZG9lcyBub3QgZXhpc3QnKVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdG9Dd2Q6IHNyY3BhdGgsXG4gICAgICAgIHRvRHN0OiBwYXRoLnJlbGF0aXZlKGRzdGRpciwgc3JjcGF0aClcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHN5bWxpbmtQYXRocyxcbiAgc3ltbGlua1BhdGhzU3luY1xufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBmcyA9IHJlcXVpcmUoJ2dyYWNlZnVsLWZzJylcblxuZnVuY3Rpb24gc3ltbGlua1R5cGUgKHNyY3BhdGgsIHR5cGUsIGNhbGxiYWNrKSB7XG4gIGNhbGxiYWNrID0gKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSA/IHR5cGUgOiBjYWxsYmFja1xuICB0eXBlID0gKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSA/IGZhbHNlIDogdHlwZVxuICBpZiAodHlwZSkgcmV0dXJuIGNhbGxiYWNrKG51bGwsIHR5cGUpXG4gIGZzLmxzdGF0KHNyY3BhdGgsIChlcnIsIHN0YXRzKSA9PiB7XG4gICAgaWYgKGVycikgcmV0dXJuIGNhbGxiYWNrKG51bGwsICdmaWxlJylcbiAgICB0eXBlID0gKHN0YXRzICYmIHN0YXRzLmlzRGlyZWN0b3J5KCkpID8gJ2RpcicgOiAnZmlsZSdcbiAgICBjYWxsYmFjayhudWxsLCB0eXBlKVxuICB9KVxufVxuXG5mdW5jdGlvbiBzeW1saW5rVHlwZVN5bmMgKHNyY3BhdGgsIHR5cGUpIHtcbiAgbGV0IHN0YXRzXG5cbiAgaWYgKHR5cGUpIHJldHVybiB0eXBlXG4gIHRyeSB7XG4gICAgc3RhdHMgPSBmcy5sc3RhdFN5bmMoc3JjcGF0aClcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuICdmaWxlJ1xuICB9XG4gIHJldHVybiAoc3RhdHMgJiYgc3RhdHMuaXNEaXJlY3RvcnkoKSkgPyAnZGlyJyA6ICdmaWxlJ1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc3ltbGlua1R5cGUsXG4gIHN5bWxpbmtUeXBlU3luY1xufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB1ID0gcmVxdWlyZSgndW5pdmVyc2FsaWZ5JykuZnJvbUNhbGxiYWNrXG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpXG5jb25zdCBmcyA9IHJlcXVpcmUoJ2dyYWNlZnVsLWZzJylcbmNvbnN0IF9ta2RpcnMgPSByZXF1aXJlKCcuLi9ta2RpcnMnKVxuY29uc3QgbWtkaXJzID0gX21rZGlycy5ta2RpcnNcbmNvbnN0IG1rZGlyc1N5bmMgPSBfbWtkaXJzLm1rZGlyc1N5bmNcblxuY29uc3QgX3N5bWxpbmtQYXRocyA9IHJlcXVpcmUoJy4vc3ltbGluay1wYXRocycpXG5jb25zdCBzeW1saW5rUGF0aHMgPSBfc3ltbGlua1BhdGhzLnN5bWxpbmtQYXRoc1xuY29uc3Qgc3ltbGlua1BhdGhzU3luYyA9IF9zeW1saW5rUGF0aHMuc3ltbGlua1BhdGhzU3luY1xuXG5jb25zdCBfc3ltbGlua1R5cGUgPSByZXF1aXJlKCcuL3N5bWxpbmstdHlwZScpXG5jb25zdCBzeW1saW5rVHlwZSA9IF9zeW1saW5rVHlwZS5zeW1saW5rVHlwZVxuY29uc3Qgc3ltbGlua1R5cGVTeW5jID0gX3N5bWxpbmtUeXBlLnN5bWxpbmtUeXBlU3luY1xuXG5jb25zdCBwYXRoRXhpc3RzID0gcmVxdWlyZSgnLi4vcGF0aC1leGlzdHMnKS5wYXRoRXhpc3RzXG5cbmZ1bmN0aW9uIGNyZWF0ZVN5bWxpbmsgKHNyY3BhdGgsIGRzdHBhdGgsIHR5cGUsIGNhbGxiYWNrKSB7XG4gIGNhbGxiYWNrID0gKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSA/IHR5cGUgOiBjYWxsYmFja1xuICB0eXBlID0gKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSA/IGZhbHNlIDogdHlwZVxuXG4gIHBhdGhFeGlzdHMoZHN0cGF0aCwgKGVyciwgZGVzdGluYXRpb25FeGlzdHMpID0+IHtcbiAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKVxuICAgIGlmIChkZXN0aW5hdGlvbkV4aXN0cykgcmV0dXJuIGNhbGxiYWNrKG51bGwpXG4gICAgc3ltbGlua1BhdGhzKHNyY3BhdGgsIGRzdHBhdGgsIChlcnIsIHJlbGF0aXZlKSA9PiB7XG4gICAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKVxuICAgICAgc3JjcGF0aCA9IHJlbGF0aXZlLnRvRHN0XG4gICAgICBzeW1saW5rVHlwZShyZWxhdGl2ZS50b0N3ZCwgdHlwZSwgKGVyciwgdHlwZSkgPT4ge1xuICAgICAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKVxuICAgICAgICBjb25zdCBkaXIgPSBwYXRoLmRpcm5hbWUoZHN0cGF0aClcbiAgICAgICAgcGF0aEV4aXN0cyhkaXIsIChlcnIsIGRpckV4aXN0cykgPT4ge1xuICAgICAgICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpXG4gICAgICAgICAgaWYgKGRpckV4aXN0cykgcmV0dXJuIGZzLnN5bWxpbmsoc3JjcGF0aCwgZHN0cGF0aCwgdHlwZSwgY2FsbGJhY2spXG4gICAgICAgICAgbWtkaXJzKGRpciwgZXJyID0+IHtcbiAgICAgICAgICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpXG4gICAgICAgICAgICBmcy5zeW1saW5rKHNyY3BhdGgsIGRzdHBhdGgsIHR5cGUsIGNhbGxiYWNrKVxuICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgIH0pXG4gIH0pXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVN5bWxpbmtTeW5jIChzcmNwYXRoLCBkc3RwYXRoLCB0eXBlKSB7XG4gIGNvbnN0IGRlc3RpbmF0aW9uRXhpc3RzID0gZnMuZXhpc3RzU3luYyhkc3RwYXRoKVxuICBpZiAoZGVzdGluYXRpb25FeGlzdHMpIHJldHVybiB1bmRlZmluZWRcblxuICBjb25zdCByZWxhdGl2ZSA9IHN5bWxpbmtQYXRoc1N5bmMoc3JjcGF0aCwgZHN0cGF0aClcbiAgc3JjcGF0aCA9IHJlbGF0aXZlLnRvRHN0XG4gIHR5cGUgPSBzeW1saW5rVHlwZVN5bmMocmVsYXRpdmUudG9Dd2QsIHR5cGUpXG4gIGNvbnN0IGRpciA9IHBhdGguZGlybmFtZShkc3RwYXRoKVxuICBjb25zdCBleGlzdHMgPSBmcy5leGlzdHNTeW5jKGRpcilcbiAgaWYgKGV4aXN0cykgcmV0dXJuIGZzLnN5bWxpbmtTeW5jKHNyY3BhdGgsIGRzdHBhdGgsIHR5cGUpXG4gIG1rZGlyc1N5bmMoZGlyKVxuICByZXR1cm4gZnMuc3ltbGlua1N5bmMoc3JjcGF0aCwgZHN0cGF0aCwgdHlwZSlcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGNyZWF0ZVN5bWxpbms6IHUoY3JlYXRlU3ltbGluayksXG4gIGNyZWF0ZVN5bWxpbmtTeW5jXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGZpbGUgPSByZXF1aXJlKCcuL2ZpbGUnKVxuY29uc3QgbGluayA9IHJlcXVpcmUoJy4vbGluaycpXG5jb25zdCBzeW1saW5rID0gcmVxdWlyZSgnLi9zeW1saW5rJylcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGZpbGVcbiAgY3JlYXRlRmlsZTogZmlsZS5jcmVhdGVGaWxlLFxuICBjcmVhdGVGaWxlU3luYzogZmlsZS5jcmVhdGVGaWxlU3luYyxcbiAgZW5zdXJlRmlsZTogZmlsZS5jcmVhdGVGaWxlLFxuICBlbnN1cmVGaWxlU3luYzogZmlsZS5jcmVhdGVGaWxlU3luYyxcbiAgLy8gbGlua1xuICBjcmVhdGVMaW5rOiBsaW5rLmNyZWF0ZUxpbmssXG4gIGNyZWF0ZUxpbmtTeW5jOiBsaW5rLmNyZWF0ZUxpbmtTeW5jLFxuICBlbnN1cmVMaW5rOiBsaW5rLmNyZWF0ZUxpbmssXG4gIGVuc3VyZUxpbmtTeW5jOiBsaW5rLmNyZWF0ZUxpbmtTeW5jLFxuICAvLyBzeW1saW5rXG4gIGNyZWF0ZVN5bWxpbms6IHN5bWxpbmsuY3JlYXRlU3ltbGluayxcbiAgY3JlYXRlU3ltbGlua1N5bmM6IHN5bWxpbmsuY3JlYXRlU3ltbGlua1N5bmMsXG4gIGVuc3VyZVN5bWxpbms6IHN5bWxpbmsuY3JlYXRlU3ltbGluayxcbiAgZW5zdXJlU3ltbGlua1N5bmM6IHN5bWxpbmsuY3JlYXRlU3ltbGlua1N5bmNcbn1cbiIsICJmdW5jdGlvbiBzdHJpbmdpZnkgKG9iaiwgeyBFT0wgPSAnXFxuJywgZmluYWxFT0wgPSB0cnVlLCByZXBsYWNlciA9IG51bGwsIHNwYWNlcyB9ID0ge30pIHtcbiAgY29uc3QgRU9GID0gZmluYWxFT0wgPyBFT0wgOiAnJ1xuICBjb25zdCBzdHIgPSBKU09OLnN0cmluZ2lmeShvYmosIHJlcGxhY2VyLCBzcGFjZXMpXG5cbiAgcmV0dXJuIHN0ci5yZXBsYWNlKC9cXG4vZywgRU9MKSArIEVPRlxufVxuXG5mdW5jdGlvbiBzdHJpcEJvbSAoY29udGVudCkge1xuICAvLyB3ZSBkbyB0aGlzIGJlY2F1c2UgSlNPTi5wYXJzZSB3b3VsZCBjb252ZXJ0IGl0IHRvIGEgdXRmOCBzdHJpbmcgaWYgZW5jb2Rpbmcgd2Fzbid0IHNwZWNpZmllZFxuICBpZiAoQnVmZmVyLmlzQnVmZmVyKGNvbnRlbnQpKSBjb250ZW50ID0gY29udGVudC50b1N0cmluZygndXRmOCcpXG4gIHJldHVybiBjb250ZW50LnJlcGxhY2UoL15cXHVGRUZGLywgJycpXG59XG5cbm1vZHVsZS5leHBvcnRzID0geyBzdHJpbmdpZnksIHN0cmlwQm9tIH1cbiIsICJsZXQgX2ZzXG50cnkge1xuICBfZnMgPSByZXF1aXJlKCdncmFjZWZ1bC1mcycpXG59IGNhdGNoIChfKSB7XG4gIF9mcyA9IHJlcXVpcmUoJ2ZzJylcbn1cbmNvbnN0IHVuaXZlcnNhbGlmeSA9IHJlcXVpcmUoJ3VuaXZlcnNhbGlmeScpXG5jb25zdCB7IHN0cmluZ2lmeSwgc3RyaXBCb20gfSA9IHJlcXVpcmUoJy4vdXRpbHMnKVxuXG5hc3luYyBmdW5jdGlvbiBfcmVhZEZpbGUgKGZpbGUsIG9wdGlvbnMgPSB7fSkge1xuICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdzdHJpbmcnKSB7XG4gICAgb3B0aW9ucyA9IHsgZW5jb2Rpbmc6IG9wdGlvbnMgfVxuICB9XG5cbiAgY29uc3QgZnMgPSBvcHRpb25zLmZzIHx8IF9mc1xuXG4gIGNvbnN0IHNob3VsZFRocm93ID0gJ3Rocm93cycgaW4gb3B0aW9ucyA/IG9wdGlvbnMudGhyb3dzIDogdHJ1ZVxuXG4gIGxldCBkYXRhID0gYXdhaXQgdW5pdmVyc2FsaWZ5LmZyb21DYWxsYmFjayhmcy5yZWFkRmlsZSkoZmlsZSwgb3B0aW9ucylcblxuICBkYXRhID0gc3RyaXBCb20oZGF0YSlcblxuICBsZXQgb2JqXG4gIHRyeSB7XG4gICAgb2JqID0gSlNPTi5wYXJzZShkYXRhLCBvcHRpb25zID8gb3B0aW9ucy5yZXZpdmVyIDogbnVsbClcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKHNob3VsZFRocm93KSB7XG4gICAgICBlcnIubWVzc2FnZSA9IGAke2ZpbGV9OiAke2Vyci5tZXNzYWdlfWBcbiAgICAgIHRocm93IGVyclxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvYmpcbn1cblxuY29uc3QgcmVhZEZpbGUgPSB1bml2ZXJzYWxpZnkuZnJvbVByb21pc2UoX3JlYWRGaWxlKVxuXG5mdW5jdGlvbiByZWFkRmlsZVN5bmMgKGZpbGUsIG9wdGlvbnMgPSB7fSkge1xuICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdzdHJpbmcnKSB7XG4gICAgb3B0aW9ucyA9IHsgZW5jb2Rpbmc6IG9wdGlvbnMgfVxuICB9XG5cbiAgY29uc3QgZnMgPSBvcHRpb25zLmZzIHx8IF9mc1xuXG4gIGNvbnN0IHNob3VsZFRocm93ID0gJ3Rocm93cycgaW4gb3B0aW9ucyA/IG9wdGlvbnMudGhyb3dzIDogdHJ1ZVxuXG4gIHRyeSB7XG4gICAgbGV0IGNvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMoZmlsZSwgb3B0aW9ucylcbiAgICBjb250ZW50ID0gc3RyaXBCb20oY29udGVudClcbiAgICByZXR1cm4gSlNPTi5wYXJzZShjb250ZW50LCBvcHRpb25zLnJldml2ZXIpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmIChzaG91bGRUaHJvdykge1xuICAgICAgZXJyLm1lc3NhZ2UgPSBgJHtmaWxlfTogJHtlcnIubWVzc2FnZX1gXG4gICAgICB0aHJvdyBlcnJcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gX3dyaXRlRmlsZSAoZmlsZSwgb2JqLCBvcHRpb25zID0ge30pIHtcbiAgY29uc3QgZnMgPSBvcHRpb25zLmZzIHx8IF9mc1xuXG4gIGNvbnN0IHN0ciA9IHN0cmluZ2lmeShvYmosIG9wdGlvbnMpXG5cbiAgYXdhaXQgdW5pdmVyc2FsaWZ5LmZyb21DYWxsYmFjayhmcy53cml0ZUZpbGUpKGZpbGUsIHN0ciwgb3B0aW9ucylcbn1cblxuY29uc3Qgd3JpdGVGaWxlID0gdW5pdmVyc2FsaWZ5LmZyb21Qcm9taXNlKF93cml0ZUZpbGUpXG5cbmZ1bmN0aW9uIHdyaXRlRmlsZVN5bmMgKGZpbGUsIG9iaiwgb3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IGZzID0gb3B0aW9ucy5mcyB8fCBfZnNcblxuICBjb25zdCBzdHIgPSBzdHJpbmdpZnkob2JqLCBvcHRpb25zKVxuICAvLyBub3Qgc3VyZSBpZiBmcy53cml0ZUZpbGVTeW5jIHJldHVybnMgYW55dGhpbmcsIGJ1dCBqdXN0IGluIGNhc2VcbiAgcmV0dXJuIGZzLndyaXRlRmlsZVN5bmMoZmlsZSwgc3RyLCBvcHRpb25zKVxufVxuXG5jb25zdCBqc29uZmlsZSA9IHtcbiAgcmVhZEZpbGUsXG4gIHJlYWRGaWxlU3luYyxcbiAgd3JpdGVGaWxlLFxuICB3cml0ZUZpbGVTeW5jXG59XG5cbm1vZHVsZS5leHBvcnRzID0ganNvbmZpbGVcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QganNvbkZpbGUgPSByZXF1aXJlKCdqc29uZmlsZScpXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBqc29uZmlsZSBleHBvcnRzXG4gIHJlYWRKc29uOiBqc29uRmlsZS5yZWFkRmlsZSxcbiAgcmVhZEpzb25TeW5jOiBqc29uRmlsZS5yZWFkRmlsZVN5bmMsXG4gIHdyaXRlSnNvbjoganNvbkZpbGUud3JpdGVGaWxlLFxuICB3cml0ZUpzb25TeW5jOiBqc29uRmlsZS53cml0ZUZpbGVTeW5jXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHUgPSByZXF1aXJlKCd1bml2ZXJzYWxpZnknKS5mcm9tQ2FsbGJhY2tcbmNvbnN0IGZzID0gcmVxdWlyZSgnZ3JhY2VmdWwtZnMnKVxuY29uc3QgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKVxuY29uc3QgbWtkaXIgPSByZXF1aXJlKCcuLi9ta2RpcnMnKVxuY29uc3QgcGF0aEV4aXN0cyA9IHJlcXVpcmUoJy4uL3BhdGgtZXhpc3RzJykucGF0aEV4aXN0c1xuXG5mdW5jdGlvbiBvdXRwdXRGaWxlIChmaWxlLCBkYXRhLCBlbmNvZGluZywgY2FsbGJhY2spIHtcbiAgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNhbGxiYWNrID0gZW5jb2RpbmdcbiAgICBlbmNvZGluZyA9ICd1dGY4J1xuICB9XG5cbiAgY29uc3QgZGlyID0gcGF0aC5kaXJuYW1lKGZpbGUpXG4gIHBhdGhFeGlzdHMoZGlyLCAoZXJyLCBpdERvZXMpID0+IHtcbiAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKVxuICAgIGlmIChpdERvZXMpIHJldHVybiBmcy53cml0ZUZpbGUoZmlsZSwgZGF0YSwgZW5jb2RpbmcsIGNhbGxiYWNrKVxuXG4gICAgbWtkaXIubWtkaXJzKGRpciwgZXJyID0+IHtcbiAgICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpXG5cbiAgICAgIGZzLndyaXRlRmlsZShmaWxlLCBkYXRhLCBlbmNvZGluZywgY2FsbGJhY2spXG4gICAgfSlcbiAgfSlcbn1cblxuZnVuY3Rpb24gb3V0cHV0RmlsZVN5bmMgKGZpbGUsIC4uLmFyZ3MpIHtcbiAgY29uc3QgZGlyID0gcGF0aC5kaXJuYW1lKGZpbGUpXG4gIGlmIChmcy5leGlzdHNTeW5jKGRpcikpIHtcbiAgICByZXR1cm4gZnMud3JpdGVGaWxlU3luYyhmaWxlLCAuLi5hcmdzKVxuICB9XG4gIG1rZGlyLm1rZGlyc1N5bmMoZGlyKVxuICBmcy53cml0ZUZpbGVTeW5jKGZpbGUsIC4uLmFyZ3MpXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBvdXRwdXRGaWxlOiB1KG91dHB1dEZpbGUpLFxuICBvdXRwdXRGaWxlU3luY1xufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IHN0cmluZ2lmeSB9ID0gcmVxdWlyZSgnanNvbmZpbGUvdXRpbHMnKVxuY29uc3QgeyBvdXRwdXRGaWxlIH0gPSByZXF1aXJlKCcuLi9vdXRwdXQnKVxuXG5hc3luYyBmdW5jdGlvbiBvdXRwdXRKc29uIChmaWxlLCBkYXRhLCBvcHRpb25zID0ge30pIHtcbiAgY29uc3Qgc3RyID0gc3RyaW5naWZ5KGRhdGEsIG9wdGlvbnMpXG5cbiAgYXdhaXQgb3V0cHV0RmlsZShmaWxlLCBzdHIsIG9wdGlvbnMpXG59XG5cbm1vZHVsZS5leHBvcnRzID0gb3V0cHV0SnNvblxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IHN0cmluZ2lmeSB9ID0gcmVxdWlyZSgnanNvbmZpbGUvdXRpbHMnKVxuY29uc3QgeyBvdXRwdXRGaWxlU3luYyB9ID0gcmVxdWlyZSgnLi4vb3V0cHV0JylcblxuZnVuY3Rpb24gb3V0cHV0SnNvblN5bmMgKGZpbGUsIGRhdGEsIG9wdGlvbnMpIHtcbiAgY29uc3Qgc3RyID0gc3RyaW5naWZ5KGRhdGEsIG9wdGlvbnMpXG5cbiAgb3V0cHV0RmlsZVN5bmMoZmlsZSwgc3RyLCBvcHRpb25zKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG91dHB1dEpzb25TeW5jXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHUgPSByZXF1aXJlKCd1bml2ZXJzYWxpZnknKS5mcm9tUHJvbWlzZVxuY29uc3QganNvbkZpbGUgPSByZXF1aXJlKCcuL2pzb25maWxlJylcblxuanNvbkZpbGUub3V0cHV0SnNvbiA9IHUocmVxdWlyZSgnLi9vdXRwdXQtanNvbicpKVxuanNvbkZpbGUub3V0cHV0SnNvblN5bmMgPSByZXF1aXJlKCcuL291dHB1dC1qc29uLXN5bmMnKVxuLy8gYWxpYXNlc1xuanNvbkZpbGUub3V0cHV0SlNPTiA9IGpzb25GaWxlLm91dHB1dEpzb25cbmpzb25GaWxlLm91dHB1dEpTT05TeW5jID0ganNvbkZpbGUub3V0cHV0SnNvblN5bmNcbmpzb25GaWxlLndyaXRlSlNPTiA9IGpzb25GaWxlLndyaXRlSnNvblxuanNvbkZpbGUud3JpdGVKU09OU3luYyA9IGpzb25GaWxlLndyaXRlSnNvblN5bmNcbmpzb25GaWxlLnJlYWRKU09OID0ganNvbkZpbGUucmVhZEpzb25cbmpzb25GaWxlLnJlYWRKU09OU3luYyA9IGpzb25GaWxlLnJlYWRKc29uU3luY1xuXG5tb2R1bGUuZXhwb3J0cyA9IGpzb25GaWxlXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGZzID0gcmVxdWlyZSgnZ3JhY2VmdWwtZnMnKVxuY29uc3QgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKVxuY29uc3QgY29weVN5bmMgPSByZXF1aXJlKCcuLi9jb3B5LXN5bmMnKS5jb3B5U3luY1xuY29uc3QgcmVtb3ZlU3luYyA9IHJlcXVpcmUoJy4uL3JlbW92ZScpLnJlbW92ZVN5bmNcbmNvbnN0IG1rZGlycFN5bmMgPSByZXF1aXJlKCcuLi9ta2RpcnMnKS5ta2RpcnBTeW5jXG5jb25zdCBzdGF0ID0gcmVxdWlyZSgnLi4vdXRpbC9zdGF0JylcblxuZnVuY3Rpb24gbW92ZVN5bmMgKHNyYywgZGVzdCwgb3B0cykge1xuICBvcHRzID0gb3B0cyB8fCB7fVxuICBjb25zdCBvdmVyd3JpdGUgPSBvcHRzLm92ZXJ3cml0ZSB8fCBvcHRzLmNsb2JiZXIgfHwgZmFsc2VcblxuICBjb25zdCB7IHNyY1N0YXQgfSA9IHN0YXQuY2hlY2tQYXRoc1N5bmMoc3JjLCBkZXN0LCAnbW92ZScpXG4gIHN0YXQuY2hlY2tQYXJlbnRQYXRoc1N5bmMoc3JjLCBzcmNTdGF0LCBkZXN0LCAnbW92ZScpXG4gIG1rZGlycFN5bmMocGF0aC5kaXJuYW1lKGRlc3QpKVxuICByZXR1cm4gZG9SZW5hbWUoc3JjLCBkZXN0LCBvdmVyd3JpdGUpXG59XG5cbmZ1bmN0aW9uIGRvUmVuYW1lIChzcmMsIGRlc3QsIG92ZXJ3cml0ZSkge1xuICBpZiAob3ZlcndyaXRlKSB7XG4gICAgcmVtb3ZlU3luYyhkZXN0KVxuICAgIHJldHVybiByZW5hbWUoc3JjLCBkZXN0LCBvdmVyd3JpdGUpXG4gIH1cbiAgaWYgKGZzLmV4aXN0c1N5bmMoZGVzdCkpIHRocm93IG5ldyBFcnJvcignZGVzdCBhbHJlYWR5IGV4aXN0cy4nKVxuICByZXR1cm4gcmVuYW1lKHNyYywgZGVzdCwgb3ZlcndyaXRlKVxufVxuXG5mdW5jdGlvbiByZW5hbWUgKHNyYywgZGVzdCwgb3ZlcndyaXRlKSB7XG4gIHRyeSB7XG4gICAgZnMucmVuYW1lU3luYyhzcmMsIGRlc3QpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmIChlcnIuY29kZSAhPT0gJ0VYREVWJykgdGhyb3cgZXJyXG4gICAgcmV0dXJuIG1vdmVBY3Jvc3NEZXZpY2Uoc3JjLCBkZXN0LCBvdmVyd3JpdGUpXG4gIH1cbn1cblxuZnVuY3Rpb24gbW92ZUFjcm9zc0RldmljZSAoc3JjLCBkZXN0LCBvdmVyd3JpdGUpIHtcbiAgY29uc3Qgb3B0cyA9IHtcbiAgICBvdmVyd3JpdGUsXG4gICAgZXJyb3JPbkV4aXN0OiB0cnVlXG4gIH1cbiAgY29weVN5bmMoc3JjLCBkZXN0LCBvcHRzKVxuICByZXR1cm4gcmVtb3ZlU3luYyhzcmMpXG59XG5cbm1vZHVsZS5leHBvcnRzID0gbW92ZVN5bmNcbiIsICIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG1vdmVTeW5jOiByZXF1aXJlKCcuL21vdmUtc3luYycpXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGZzID0gcmVxdWlyZSgnZ3JhY2VmdWwtZnMnKVxuY29uc3QgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKVxuY29uc3QgY29weSA9IHJlcXVpcmUoJy4uL2NvcHknKS5jb3B5XG5jb25zdCByZW1vdmUgPSByZXF1aXJlKCcuLi9yZW1vdmUnKS5yZW1vdmVcbmNvbnN0IG1rZGlycCA9IHJlcXVpcmUoJy4uL21rZGlycycpLm1rZGlycFxuY29uc3QgcGF0aEV4aXN0cyA9IHJlcXVpcmUoJy4uL3BhdGgtZXhpc3RzJykucGF0aEV4aXN0c1xuY29uc3Qgc3RhdCA9IHJlcXVpcmUoJy4uL3V0aWwvc3RhdCcpXG5cbmZ1bmN0aW9uIG1vdmUgKHNyYywgZGVzdCwgb3B0cywgY2IpIHtcbiAgaWYgKHR5cGVvZiBvcHRzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2IgPSBvcHRzXG4gICAgb3B0cyA9IHt9XG4gIH1cblxuICBjb25zdCBvdmVyd3JpdGUgPSBvcHRzLm92ZXJ3cml0ZSB8fCBvcHRzLmNsb2JiZXIgfHwgZmFsc2VcblxuICBzdGF0LmNoZWNrUGF0aHMoc3JjLCBkZXN0LCAnbW92ZScsIChlcnIsIHN0YXRzKSA9PiB7XG4gICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICBjb25zdCB7IHNyY1N0YXQgfSA9IHN0YXRzXG4gICAgc3RhdC5jaGVja1BhcmVudFBhdGhzKHNyYywgc3JjU3RhdCwgZGVzdCwgJ21vdmUnLCBlcnIgPT4ge1xuICAgICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICAgIG1rZGlycChwYXRoLmRpcm5hbWUoZGVzdCksIGVyciA9PiB7XG4gICAgICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgICAgIHJldHVybiBkb1JlbmFtZShzcmMsIGRlc3QsIG92ZXJ3cml0ZSwgY2IpXG4gICAgICB9KVxuICAgIH0pXG4gIH0pXG59XG5cbmZ1bmN0aW9uIGRvUmVuYW1lIChzcmMsIGRlc3QsIG92ZXJ3cml0ZSwgY2IpIHtcbiAgaWYgKG92ZXJ3cml0ZSkge1xuICAgIHJldHVybiByZW1vdmUoZGVzdCwgZXJyID0+IHtcbiAgICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgICByZXR1cm4gcmVuYW1lKHNyYywgZGVzdCwgb3ZlcndyaXRlLCBjYilcbiAgICB9KVxuICB9XG4gIHBhdGhFeGlzdHMoZGVzdCwgKGVyciwgZGVzdEV4aXN0cykgPT4ge1xuICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgaWYgKGRlc3RFeGlzdHMpIHJldHVybiBjYihuZXcgRXJyb3IoJ2Rlc3QgYWxyZWFkeSBleGlzdHMuJykpXG4gICAgcmV0dXJuIHJlbmFtZShzcmMsIGRlc3QsIG92ZXJ3cml0ZSwgY2IpXG4gIH0pXG59XG5cbmZ1bmN0aW9uIHJlbmFtZSAoc3JjLCBkZXN0LCBvdmVyd3JpdGUsIGNiKSB7XG4gIGZzLnJlbmFtZShzcmMsIGRlc3QsIGVyciA9PiB7XG4gICAgaWYgKCFlcnIpIHJldHVybiBjYigpXG4gICAgaWYgKGVyci5jb2RlICE9PSAnRVhERVYnKSByZXR1cm4gY2IoZXJyKVxuICAgIHJldHVybiBtb3ZlQWNyb3NzRGV2aWNlKHNyYywgZGVzdCwgb3ZlcndyaXRlLCBjYilcbiAgfSlcbn1cblxuZnVuY3Rpb24gbW92ZUFjcm9zc0RldmljZSAoc3JjLCBkZXN0LCBvdmVyd3JpdGUsIGNiKSB7XG4gIGNvbnN0IG9wdHMgPSB7XG4gICAgb3ZlcndyaXRlLFxuICAgIGVycm9yT25FeGlzdDogdHJ1ZVxuICB9XG4gIGNvcHkoc3JjLCBkZXN0LCBvcHRzLCBlcnIgPT4ge1xuICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgcmV0dXJuIHJlbW92ZShzcmMsIGNiKVxuICB9KVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1vdmVcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgdSA9IHJlcXVpcmUoJ3VuaXZlcnNhbGlmeScpLmZyb21DYWxsYmFja1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG1vdmU6IHUocmVxdWlyZSgnLi9tb3ZlJykpXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBFeHBvcnQgcHJvbWlzZWlmaWVkIGdyYWNlZnVsLWZzOlxuICAuLi5yZXF1aXJlKCcuL2ZzJyksXG4gIC8vIEV4cG9ydCBleHRyYSBtZXRob2RzOlxuICAuLi5yZXF1aXJlKCcuL2NvcHktc3luYycpLFxuICAuLi5yZXF1aXJlKCcuL2NvcHknKSxcbiAgLi4ucmVxdWlyZSgnLi9lbXB0eScpLFxuICAuLi5yZXF1aXJlKCcuL2Vuc3VyZScpLFxuICAuLi5yZXF1aXJlKCcuL2pzb24nKSxcbiAgLi4ucmVxdWlyZSgnLi9ta2RpcnMnKSxcbiAgLi4ucmVxdWlyZSgnLi9tb3ZlLXN5bmMnKSxcbiAgLi4ucmVxdWlyZSgnLi9tb3ZlJyksXG4gIC4uLnJlcXVpcmUoJy4vb3V0cHV0JyksXG4gIC4uLnJlcXVpcmUoJy4vcGF0aC1leGlzdHMnKSxcbiAgLi4ucmVxdWlyZSgnLi9yZW1vdmUnKVxufVxuXG4vLyBFeHBvcnQgZnMucHJvbWlzZXMgYXMgYSBnZXR0ZXIgcHJvcGVydHkgc28gdGhhdCB3ZSBkb24ndCB0cmlnZ2VyXG4vLyBFeHBlcmltZW50YWxXYXJuaW5nIGJlZm9yZSBmcy5wcm9taXNlcyBpcyBhY3R1YWxseSBhY2Nlc3NlZC5cbmNvbnN0IGZzID0gcmVxdWlyZSgnZnMnKVxuaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZnMsICdwcm9taXNlcycpKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUuZXhwb3J0cywgJ3Byb21pc2VzJywge1xuICAgIGdldCAoKSB7IHJldHVybiBmcy5wcm9taXNlcyB9XG4gIH0pXG59XG4iLCAiaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzLWV4dHJhJztcblxuY29uc3QgQ0RLX09VVERJUl9QUkVGSVggPSAnY2RrLWludGVnLm91dCc7XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIHNpbmdsZSBpbnRlZ3JhdGlvbiB0ZXN0XG4gKlxuICogVGhpcyB0eXBlIGlzIGEgZGF0YS1vbmx5IHN0cnVjdHVyZSwgc28gaXQgY2FuIHRyaXZpYWxseSBiZSBwYXNzZWQgdG8gd29ya2Vycy5cbiAqIERlcml2ZWQgYXR0cmlidXRlcyBhcmUgY2FsY3VsYXRlZCB1c2luZyB0aGUgYEludGVnVGVzdGAgY2xhc3MuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW50ZWdUZXN0SW5mbyB7XG4gIC8qKlxuICAgKiBQYXRoIHRvIHRoZSBmaWxlIHRvIHJ1blxuICAgKlxuICAgKiBQYXRoIGlzIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LlxuICAgKi9cbiAgcmVhZG9ubHkgZmlsZU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHJvb3QgZGlyZWN0b3J5IHdlIGRpc2NvdmVyZWQgdGhpcyB0ZXN0IGZyb21cbiAgICpcbiAgICogUGF0aCBpcyByZWxhdGl2ZSB0byB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS5cbiAgICovXG4gIHJlYWRvbmx5IGRpc2NvdmVyeVJvb3Q6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIENMSSBjb21tYW5kIHVzZWQgdG8gcnVuIHRoaXMgdGVzdC5cbiAgICogSWYgaXQgY29udGFpbnMge2ZpbGVQYXRofSwgdGhlIHRlc3QgZmlsZSBuYW1lcyB3aWxsIGJlIHN1YnN0aXR1dGVkIGF0IHRoYXQgcGxhY2UgaW4gdGhlIGNvbW1hbmQgZm9yIGVhY2ggcnVuLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRlc3QgcnVuIGNvbW1hbmQgd2lsbCBiZSBgbm9kZSB7ZmlsZVBhdGh9YFxuICAgKi9cbiAgcmVhZG9ubHkgYXBwQ29tbWFuZD86IHN0cmluZztcblxuICAvKipcbiAgICogdHJ1ZSBpZiB0aGlzIHRlc3QgaXMgcnVubmluZyBpbiB3YXRjaCBtb2RlXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSB3YXRjaD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogRGVyaXZlZCBpbmZvcm1hdGlvbiBmb3IgSW50ZWdUZXN0c1xuICovXG5leHBvcnQgY2xhc3MgSW50ZWdUZXN0IHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBmaWxlIHRvIHJ1blxuICAgKlxuICAgKiBQYXRoIGlzIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGZpbGVOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFJlbGF0aXZlIHBhdGggdG8gdGhlIGZpbGUgdG8gcnVuXG4gICAqXG4gICAqIFJlbGF0aXZlIGZyb20gdGhlIFwiZGlzY292ZXJ5IHJvb3RcIi5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBkaXNjb3ZlcnlSZWxhdGl2ZUZpbGVOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBmaWxlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYWJzb2x1dGVGaWxlTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbm9ybWFsaXplZCBuYW1lIG9mIHRoZSB0ZXN0LiBUaGlzIG5hbWVcbiAgICogd2lsbCBiZSB0aGUgc2FtZSByZWdhcmRsZXNzIG9mIHdoYXQgZGlyZWN0b3J5IHRoZSB0b29sXG4gICAqIGlzIHJ1biBmcm9tLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG5vcm1hbGl6ZWRUZXN0TmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBEaXJlY3RvcnkgdGhlIHRlc3QgaXMgaW5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBkaXJlY3Rvcnk6IHN0cmluZztcblxuICAvKipcbiAgICogRGlzcGxheSBuYW1lIGZvciB0aGUgdGVzdFxuICAgKlxuICAgKiBEZXBlbmRzIG9uIHRoZSBkaXNjb3ZlcnkgZGlyZWN0b3J5LlxuICAgKlxuICAgKiBMb29rcyBsaWtlIGBpbnRlZy5teXRlc3RgIG9yIGBwYWNrYWdlL3Rlc3QvaW50ZWcubXl0ZXN0YC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB0ZXN0TmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQYXRoIG9mIHRoZSBzbmFwc2hvdCBkaXJlY3RvcnkgZm9yIHRoaXMgdGVzdFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHNuYXBzaG90RGlyOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBhdGggdG8gdGhlIHRlbXBvcmFyeSBvdXRwdXQgZGlyZWN0b3J5IGZvciB0aGlzIHRlc3RcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB0ZW1wb3JhcnlPdXRwdXREaXI6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIENMSSBjb21tYW5kIHVzZWQgdG8gcnVuIHRoaXMgdGVzdC5cbiAgICogSWYgaXQgY29udGFpbnMge2ZpbGVQYXRofSwgdGhlIHRlc3QgZmlsZSBuYW1lcyB3aWxsIGJlIHN1YnN0aXR1dGVkIGF0IHRoYXQgcGxhY2UgaW4gdGhlIGNvbW1hbmQgZm9yIGVhY2ggcnVuLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRlc3QgcnVuIGNvbW1hbmQgd2lsbCBiZSBgbm9kZSB7ZmlsZVBhdGh9YFxuICAgKi9cbiAgcmVhZG9ubHkgYXBwQ29tbWFuZDogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSBpbmZvOiBJbnRlZ1Rlc3RJbmZvKSB7XG4gICAgdGhpcy5hcHBDb21tYW5kID0gaW5mby5hcHBDb21tYW5kID8/ICdub2RlIHtmaWxlUGF0aH0nO1xuICAgIHRoaXMuYWJzb2x1dGVGaWxlTmFtZSA9IHBhdGgucmVzb2x2ZShpbmZvLmZpbGVOYW1lKTtcbiAgICB0aGlzLmZpbGVOYW1lID0gcGF0aC5yZWxhdGl2ZShwcm9jZXNzLmN3ZCgpLCBpbmZvLmZpbGVOYW1lKTtcblxuICAgIGNvbnN0IHBhcnNlZCA9IHBhdGgucGFyc2UodGhpcy5maWxlTmFtZSk7XG4gICAgdGhpcy5kaXNjb3ZlcnlSZWxhdGl2ZUZpbGVOYW1lID0gcGF0aC5yZWxhdGl2ZShpbmZvLmRpc2NvdmVyeVJvb3QsIGluZm8uZmlsZU5hbWUpO1xuICAgIC8vIGlmIGAtLXdhdGNoYCB0aGVuIHdlIG5lZWQgdGhlIGRpcmVjdG9yeSB0byBiZSB0aGUgY3dkXG4gICAgdGhpcy5kaXJlY3RvcnkgPSBpbmZvLndhdGNoID8gcHJvY2Vzcy5jd2QoKSA6IHBhcnNlZC5kaXI7XG5cbiAgICAvLyBpZiB3ZSBhcmUgcnVubmluZyBpbiBhIHBhY2thZ2UgZGlyZWN0b3J5IHRoZW4ganVzdCB1c2UgdGhlIGZpbGVOYW1lXG4gICAgLy8gYXMgdGhlIHRlc3RuYW1lLCBidXQgaWYgd2UgYXJlIHJ1bm5pbmcgaW4gYSBwYXJlbnQgZGlyZWN0b3J5IHdpdGhcbiAgICAvLyBtdWx0aXBsZSBwYWNrYWdlcyB0aGVuIHVzZSB0aGUgZGlyZWN0b3J5L2ZpbGVuYW1lIGFzIHRoZSB0ZXN0bmFtZVxuICAgIC8vXG4gICAgLy8gTG9va3MgZWl0aGVyIGxpa2UgYGludGVnLm15dGVzdGAgb3IgYHBhY2thZ2UvdGVzdC9pbnRlZy5teXRlc3RgLlxuICAgIGNvbnN0IHJlbERpc2NvdmVyeVJvb3QgPSBwYXRoLnJlbGF0aXZlKHByb2Nlc3MuY3dkKCksIGluZm8uZGlzY292ZXJ5Um9vdCk7XG4gICAgdGhpcy50ZXN0TmFtZSA9IHRoaXMuZGlyZWN0b3J5ID09PSBwYXRoLmpvaW4ocmVsRGlzY292ZXJ5Um9vdCwgJ3Rlc3QnKSB8fCB0aGlzLmRpcmVjdG9yeSA9PT0gcGF0aC5qb2luKHJlbERpc2NvdmVyeVJvb3QpXG4gICAgICA/IHBhcnNlZC5uYW1lXG4gICAgICA6IHBhdGguam9pbihwYXRoLnJlbGF0aXZlKHRoaXMuaW5mby5kaXNjb3ZlcnlSb290LCBwYXJzZWQuZGlyKSwgcGFyc2VkLm5hbWUpO1xuXG4gICAgdGhpcy5ub3JtYWxpemVkVGVzdE5hbWUgPSBwYXJzZWQubmFtZTtcbiAgICB0aGlzLnNuYXBzaG90RGlyID0gcGF0aC5qb2luKHBhcnNlZC5kaXIsIGAke3BhcnNlZC5iYXNlfS5zbmFwc2hvdGApO1xuICAgIHRoaXMudGVtcG9yYXJ5T3V0cHV0RGlyID0gcGF0aC5qb2luKHBhcnNlZC5kaXIsIGAke0NES19PVVRESVJfUFJFRklYfS4ke3BhcnNlZC5iYXNlfS5zbmFwc2hvdGApO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhpcyB0ZXN0IG1hdGNoZXMgdGhlIHVzZXItZ2l2ZW4gbmFtZVxuICAgKlxuICAgKiBXZSBhcmUgdmVyeSBsZW5pZW50IGhlcmUuIEEgbmFtZSBtYXRjaGVzIGlmIGl0IG1hdGNoZXM6XG4gICAqXG4gICAqIC0gVGhlIENXRC1yZWxhdGl2ZSBmaWxlbmFtZVxuICAgKiAtIFRoZSBkaXNjb3Zlcnkgcm9vdC1yZWxhdGl2ZSBmaWxlbmFtZVxuICAgKiAtIFRoZSBzdWl0ZSBuYW1lXG4gICAqIC0gVGhlIGFic29sdXRlIGZpbGVuYW1lXG4gICAqL1xuICBwdWJsaWMgbWF0Y2hlcyhuYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gW1xuICAgICAgdGhpcy5maWxlTmFtZSxcbiAgICAgIHRoaXMuZGlzY292ZXJ5UmVsYXRpdmVGaWxlTmFtZSxcbiAgICAgIHRoaXMudGVzdE5hbWUsXG4gICAgICB0aGlzLmFic29sdXRlRmlsZU5hbWUsXG4gICAgXS5pbmNsdWRlcyhuYW1lKTtcbiAgfVxufVxuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBob3cgaW50ZWdyYXRpb24gdGVzdCBmaWxlcyBhcmUgZGlzY292ZXJlZFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEludGVncmF0aW9uVGVzdHNEaXNjb3ZlcnlPcHRpb25zIHtcbiAgLyoqXG4gICAqIElmIHRoaXMgaXMgc2V0IHRvIHRydWUgdGhlbiB0aGUgbGlzdCBvZiB0ZXN0c1xuICAgKiBwcm92aWRlZCB3aWxsIGJlIGV4Y2x1ZGVkXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBleGNsdWRlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICAqIExpc3Qgb2YgdGVzdHMgdG8gaW5jbHVkZSAob3IgZXhjbHVkZSBpZiBgZXhjbHVkZT10cnVlYClcbiAgICAqXG4gICAgKiBAZGVmYXVsdCAtIGFsbCBtYXRjaGVkIGZpbGVzXG4gICAgKi9cbiAgcmVhZG9ubHkgdGVzdHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogQSBtYXAgb2Ygb2YgdGhlIGFwcCBjb21tYW5kcyB0byBydW4gaW50ZWdyYXRpb24gdGVzdHMgd2l0aCxcbiAgICogYW5kIHRoZSByZWdleCBwYXR0ZXJucyBtYXRjaGluZyB0aGUgaW50ZWdyYXRpb24gdGVzdCBmaWxlcyBlYWNoIGFwcCBjb21tYW5kLlxuICAgKlxuICAgKiBJZiB0aGUgYXBwIGNvbW1hbmQgY29udGFpbnMge2ZpbGVQYXRofSwgdGhlIHRlc3QgZmlsZSBuYW1lcyB3aWxsIGJlIHN1YnN0aXR1dGVkIGF0IHRoYXQgcGxhY2UgaW4gdGhlIGNvbW1hbmQgZm9yIGVhY2ggcnVuLlxuICAgKi9cbiAgcmVhZG9ubHkgdGVzdENhc2VzOiB7XG4gICAgW2FwcDogc3RyaW5nXTogc3RyaW5nW11cbiAgfVxufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIFB5dGhvbiBleGVjdXRhYmxlIGZvciB0aGUgY3VycmVudCBPU1xuICovXG5mdW5jdGlvbiBweXRob25FeGVjdXRhYmxlKCkge1xuICBsZXQgcHl0aG9uID0gJ3B5dGhvbjMnO1xuICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xuICAgIHB5dGhvbiA9ICdweXRob24nO1xuICB9XG4gIHJldHVybiBweXRob247XG59XG5cbi8qKlxuICogRGlzY292ZXIgaW50ZWdyYXRpb24gdGVzdHNcbiAqL1xuZXhwb3J0IGNsYXNzIEludGVncmF0aW9uVGVzdHMge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGRpcmVjdG9yeTogc3RyaW5nKSB7fVxuXG4gIC8qKlxuICAgKiBHZXQgaW50ZWdyYXRpb24gdGVzdHMgZGlzY292ZXJ5IG9wdGlvbnMgZnJvbSBDTEkgb3B0aW9uc1xuICAgKi9cbiAgcHVibGljIGFzeW5jIGZyb21DbGlPcHRpb25zKG9wdGlvbnM6IHtcbiAgICBhcHA/OiBzdHJpbmc7XG4gICAgZXhjbHVkZT86IGJvb2xlYW4sXG4gICAgbGFuZ3VhZ2U/OiBzdHJpbmdbXSxcbiAgICB0ZXN0UmVnZXg/OiBzdHJpbmdbXSxcbiAgICB0ZXN0cz86IHN0cmluZ1tdLFxuICB9KTogUHJvbWlzZTxJbnRlZ1Rlc3RbXT4ge1xuICAgIGNvbnN0IGJhc2VPcHRpb25zID0ge1xuICAgICAgdGVzdHM6IG9wdGlvbnMudGVzdHMsXG4gICAgICBleGNsdWRlOiBvcHRpb25zLmV4Y2x1ZGUsXG4gICAgfTtcblxuICAgIC8vIEV4cGxpY2l0bHkgc2V0IGJvdGgsIGFwcCBhbmQgdGVzdC1yZWdleFxuICAgIGlmIChvcHRpb25zLmFwcCAmJiBvcHRpb25zLnRlc3RSZWdleCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGlzY292ZXIoe1xuICAgICAgICB0ZXN0Q2FzZXM6IHtcbiAgICAgICAgICBbb3B0aW9ucy5hcHBdOiBvcHRpb25zLnRlc3RSZWdleCxcbiAgICAgICAgfSxcbiAgICAgICAgLi4uYmFzZU9wdGlvbnMsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBVc2UgdGhlIHNlbGVjdGVkIHByZXNldHNcbiAgICBpZiAoIW9wdGlvbnMuYXBwICYmICFvcHRpb25zLnRlc3RSZWdleCkge1xuICAgICAgLy8gT25seSBjYXNlIHdpdGggbXVsdGlwbGUgbGFuZ3VhZ2VzLCBpLmUuIHRoZSBvbmx5IHRpbWUgd2UgbmVlZCB0byBjaGVjayB0aGUgc3BlY2lhbCBjYXNlXG4gICAgICBjb25zdCBpZ25vcmVVbmNvbXBpbGVkVHlwZVNjcmlwdCA9IG9wdGlvbnMubGFuZ3VhZ2U/LmluY2x1ZGVzKCdqYXZhc2NyaXB0JykgJiYgb3B0aW9ucy5sYW5ndWFnZT8uaW5jbHVkZXMoJ3R5cGVzY3JpcHQnKTtcblxuICAgICAgcmV0dXJuIHRoaXMuZGlzY292ZXIoe1xuICAgICAgICB0ZXN0Q2FzZXM6IHRoaXMuZ2V0TGFuZ3VhZ2VQcmVzZXRzKG9wdGlvbnMubGFuZ3VhZ2UpLFxuICAgICAgICAuLi5iYXNlT3B0aW9ucyxcbiAgICAgIH0sIGlnbm9yZVVuY29tcGlsZWRUeXBlU2NyaXB0KTtcbiAgICB9XG5cbiAgICAvLyBPbmx5IG9uZSBvZiBhcHAgb3IgdGVzdC1yZWdleCBpcyBzZXQsIHdpdGggYSBzaW5nbGUgcHJlc2V0IHNlbGVjdGVkXG4gICAgLy8gPT4gb3ZlcnJpZGUgZWl0aGVyIGFwcCBvciB0ZXN0LXJlZ2V4XG4gICAgaWYgKG9wdGlvbnMubGFuZ3VhZ2U/Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgY29uc3QgW3ByZXNldEFwcCwgcHJlc2V0VGVzdFJlZ2V4XSA9IHRoaXMuZ2V0TGFuZ3VhZ2VQcmVzZXQob3B0aW9ucy5sYW5ndWFnZVswXSk7XG4gICAgICByZXR1cm4gdGhpcy5kaXNjb3Zlcih7XG4gICAgICAgIHRlc3RDYXNlczoge1xuICAgICAgICAgIFtvcHRpb25zLmFwcCA/PyBwcmVzZXRBcHBdOiBvcHRpb25zLnRlc3RSZWdleCA/PyBwcmVzZXRUZXN0UmVnZXgsXG4gICAgICAgIH0sXG4gICAgICAgIC4uLmJhc2VPcHRpb25zLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gT25seSBvbmUgb2YgYXBwIG9yIHRlc3QtcmVnZXggaXMgc2V0LCB3aXRoIG11bHRpcGxlIHByZXNldHNcbiAgICAvLyA9PiBpbXBvc3NpYmxlIHRvIHJlc29sdmVcbiAgICBjb25zdCBvcHRpb24gPSBvcHRpb25zLmFwcCA/ICctLWFwcCcgOiAnLS10ZXN0LXJlZ2V4JztcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE9ubHkgYSBzaW5nbGUgXCItLWxhbmd1YWdlXCIgY2FuIGJlIHVzZWQgd2l0aCBcIiR7b3B0aW9ufVwiLiBBbHRlcm5hdGl2ZWx5IHByb3ZpZGUgYm90aCBcIi0tYXBwXCIgYW5kIFwiLS10ZXN0LXJlZ2V4XCIgdG8gZnVsbHkgY3VzdG9taXplIHRoZSBjb25maWd1cmF0aW9uLmApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGZvciBhIGxhbmd1YWdlXG4gICAqL1xuICBwcml2YXRlIGdldExhbmd1YWdlUHJlc2V0KGxhbmd1YWdlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBsYW5ndWFnZVByZXNldHM6IHtcbiAgICAgIFtsYW5ndWFnZTogc3RyaW5nXTogW3N0cmluZywgc3RyaW5nW11dXG4gICAgfSA9IHtcbiAgICAgIGphdmFzY3JpcHQ6IFsnbm9kZSB7ZmlsZVBhdGh9JywgWydeaW50ZWdcXFxcLi4qXFxcXC5qcyQnXV0sXG4gICAgICB0eXBlc2NyaXB0OiBbJ25vZGUgLXIgdHMtbm9kZS9yZWdpc3RlciB7ZmlsZVBhdGh9JywgWydeaW50ZWdcXFxcLig/IS4qXFxcXC5kXFxcXC50cyQpLipcXFxcLnRzJCddXSxcbiAgICAgIHB5dGhvbjogW2Ake3B5dGhvbkV4ZWN1dGFibGUoKX0ge2ZpbGVQYXRofWAsIFsnXmludGVnXy4qXFxcXC5weSQnXV0sXG4gICAgICBnbzogWydnbyBydW4ge2ZpbGVQYXRofScsIFsnXmludGVnXy4qXFxcXC5nbyQnXV0sXG4gICAgfTtcblxuICAgIHJldHVybiBsYW5ndWFnZVByZXNldHNbbGFuZ3VhZ2VdO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgY29uZmlnIGZvciBhbGwgc2VsZWN0ZWQgbGFuZ3VhZ2VzXG4gICAqL1xuICBwcml2YXRlIGdldExhbmd1YWdlUHJlc2V0cyhsYW5ndWFnZXM6IHN0cmluZ1tdID0gW10pIHtcbiAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgbGFuZ3VhZ2VzXG4gICAgICAgIC5tYXAobGFuZ3VhZ2UgPT4gdGhpcy5nZXRMYW5ndWFnZVByZXNldChsYW5ndWFnZSkpXG4gICAgICAgIC5maWx0ZXIoQm9vbGVhbiksXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJZiB0aGUgdXNlciBwcm92aWRlcyBhIGxpc3Qgb2YgdGVzdHMsIHRoZXNlIGNhbiBlaXRoZXIgYmUgYSBsaXN0IG9mIHRlc3RzIHRvIGluY2x1ZGUgb3IgYSBsaXN0IG9mIHRlc3RzIHRvIGV4Y2x1ZGUuXG4gICAqXG4gICAqIC0gSWYgaXQgaXMgYSBsaXN0IG9mIHRlc3RzIHRvIGluY2x1ZGUgdGhlbiB3ZSBkaXNjb3ZlciBhbGwgYXZhaWxhYmxlIHRlc3RzIGFuZCBjaGVjayB3aGV0aGVyIHRoZXkgaGF2ZSBwcm92aWRlZCB2YWxpZCB0ZXN0cy5cbiAgICogICBJZiB0aGV5IGhhdmUgcHJvdmlkZWQgYSB0ZXN0IG5hbWUgdGhhdCB3ZSBkb24ndCBmaW5kLCB0aGVuIHdlIHdyaXRlIG91dCB0aGF0IGVycm9yIG1lc3NhZ2UuXG4gICAqIC0gSWYgaXQgaXMgYSBsaXN0IG9mIHRlc3RzIHRvIGV4Y2x1ZGUsIHRoZW4gd2UgZGlzY292ZXIgYWxsIGF2YWlsYWJsZSB0ZXN0cyBhbmQgZmlsdGVyIG91dCB0aGUgdGVzdHMgdGhhdCB3ZXJlIHByb3ZpZGVkIGJ5IHRoZSB1c2VyLlxuICAgKi9cbiAgcHJpdmF0ZSBmaWx0ZXJUZXN0cyhkaXNjb3ZlcmVkVGVzdHM6IEludGVnVGVzdFtdLCByZXF1ZXN0ZWRUZXN0cz86IHN0cmluZ1tdLCBleGNsdWRlPzogYm9vbGVhbik6IEludGVnVGVzdFtdIHtcbiAgICBpZiAoIXJlcXVlc3RlZFRlc3RzKSB7XG4gICAgICByZXR1cm4gZGlzY292ZXJlZFRlc3RzO1xuICAgIH1cblxuICAgIGNvbnN0IGFsbFRlc3RzID0gZGlzY292ZXJlZFRlc3RzLmZpbHRlcih0ID0+IHtcbiAgICAgIGNvbnN0IG1hdGNoZXMgPSByZXF1ZXN0ZWRUZXN0cy5zb21lKHBhdHRlcm4gPT4gdC5tYXRjaGVzKHBhdHRlcm4pKTtcbiAgICAgIHJldHVybiBtYXRjaGVzICE9PSAhIWV4Y2x1ZGU7IC8vIExvb2tzIHdlaXJkIGJ1dCBpcyBlcXVhbCB0byAobWF0Y2hlcyAmJiAhZXhjbHVkZSkgfHwgKCFtYXRjaGVzICYmIGV4Y2x1ZGUpXG4gICAgfSk7XG5cbiAgICAvLyBJZiBub3QgZXhjbHVkaW5nLCBhbGwgcGF0dGVybnMgbXVzdCBoYXZlIG1hdGNoZWQgYXQgbGVhc3Qgb25lIHRlc3RcbiAgICBpZiAoIWV4Y2x1ZGUpIHtcbiAgICAgIGNvbnN0IHVubWF0Y2hlZFBhdHRlcm5zID0gcmVxdWVzdGVkVGVzdHMuZmlsdGVyKHBhdHRlcm4gPT4gIWRpc2NvdmVyZWRUZXN0cy5zb21lKHQgPT4gdC5tYXRjaGVzKHBhdHRlcm4pKSk7XG4gICAgICBmb3IgKGNvbnN0IHVubWF0Y2hlZCBvZiB1bm1hdGNoZWRQYXR0ZXJucykge1xuICAgICAgICBwcm9jZXNzLnN0ZGVyci53cml0ZShgTm8gc3VjaCBpbnRlZyB0ZXN0OiAke3VubWF0Y2hlZH1cXG5gKTtcbiAgICAgIH1cbiAgICAgIGlmICh1bm1hdGNoZWRQYXR0ZXJucy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHByb2Nlc3Muc3RkZXJyLndyaXRlKGBBdmFpbGFibGUgdGVzdHM6ICR7ZGlzY292ZXJlZFRlc3RzLm1hcCh0ID0+IHQuZGlzY292ZXJ5UmVsYXRpdmVGaWxlTmFtZSkuam9pbignICcpfVxcbmApO1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGFsbFRlc3RzO1xuICB9XG5cbiAgLyoqXG4gICAqIFRha2VzIGFuIG9wdGlvbmFsIGxpc3Qgb2YgdGVzdHMgdG8gbG9vayBmb3IsIG90aGVyd2lzZVxuICAgKiBpdCB3aWxsIGxvb2sgZm9yIGFsbCB0ZXN0cyBmcm9tIHRoZSBkaXJlY3RvcnlcbiAgICpcbiAgICogQHBhcmFtIHRlc3RzIFRlc3RzIHRvIGluY2x1ZGUgb3IgZXhjbHVkZSwgdW5kZWZpbmVkIG1lYW5zIGluY2x1ZGUgYWxsIHRlc3RzLlxuICAgKiBAcGFyYW0gZXhjbHVkZSBXaGV0aGVyIHRoZSAndGVzdHMnIGxpc3QgaXMgaW5jbHVzaXZlIG9yIGV4Y2x1c2l2ZSAoaW5jbHVzaXZlIGJ5IGRlZmF1bHQpLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBkaXNjb3ZlcihvcHRpb25zOiBJbnRlZ3JhdGlvblRlc3RzRGlzY292ZXJ5T3B0aW9ucywgaWdub3JlVW5jb21waWxlZFR5cGVTY3JpcHQ6IGJvb2xlYW4gPSBmYWxzZSk6IFByb21pc2U8SW50ZWdUZXN0W10+IHtcbiAgICBjb25zdCBmaWxlcyA9IGF3YWl0IHRoaXMucmVhZFRyZWUoKTtcblxuICAgIGNvbnN0IHRlc3RDYXNlcyA9IE9iamVjdC5lbnRyaWVzKG9wdGlvbnMudGVzdENhc2VzKVxuICAgICAgLmZsYXRNYXAoKFthcHBDb21tYW5kLCBwYXR0ZXJuc10pID0+IGZpbGVzXG4gICAgICAgIC5maWx0ZXIoZmlsZU5hbWUgPT4gcGF0dGVybnMuc29tZSgocGF0dGVybikgPT4ge1xuICAgICAgICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChwYXR0ZXJuKTtcbiAgICAgICAgICByZXR1cm4gcmVnZXgudGVzdChmaWxlTmFtZSkgfHwgcmVnZXgudGVzdChwYXRoLmJhc2VuYW1lKGZpbGVOYW1lKSk7XG4gICAgICAgIH0pKVxuICAgICAgICAubWFwKGZpbGVOYW1lID0+IG5ldyBJbnRlZ1Rlc3Qoe1xuICAgICAgICAgIGRpc2NvdmVyeVJvb3Q6IHRoaXMuZGlyZWN0b3J5LFxuICAgICAgICAgIGZpbGVOYW1lLFxuICAgICAgICAgIGFwcENvbW1hbmQsXG4gICAgICAgIH0pKSxcbiAgICAgICk7XG5cbiAgICBjb25zdCBkaXNjb3ZlcmVkVGVzdHMgPSBpZ25vcmVVbmNvbXBpbGVkVHlwZVNjcmlwdCA/IHRoaXMuZmlsdGVyVW5jb21waWxlZFR5cGVTY3JpcHQodGVzdENhc2VzKSA6IHRlc3RDYXNlcztcblxuICAgIHJldHVybiB0aGlzLmZpbHRlclRlc3RzKGRpc2NvdmVyZWRUZXN0cywgb3B0aW9ucy50ZXN0cywgb3B0aW9ucy5leGNsdWRlKTtcbiAgfVxuXG4gIHByaXZhdGUgZmlsdGVyVW5jb21waWxlZFR5cGVTY3JpcHQodGVzdENhc2VzOiBJbnRlZ1Rlc3RbXSk6IEludGVnVGVzdFtdIHtcbiAgICBjb25zdCBqc1Rlc3RDYXNlcyA9IHRlc3RDYXNlcy5maWx0ZXIodCA9PiB0LmZpbGVOYW1lLmVuZHNXaXRoKCcuanMnKSk7XG5cbiAgICByZXR1cm4gdGVzdENhc2VzXG4gICAgICAvLyBSZW1vdmUgYWxsIFR5cGVTY3JpcHQgdGVzdCBjYXNlcyAoZW5kaW5nIGluIC50cylcbiAgICAgIC8vIGZvciB3aGljaCBhIGNvbXBpbGVkIHZlcnNpb24gaXMgcHJlc2VudCAoc2FtZSBuYW1lLCBlbmRpbmcgaW4gLmpzKVxuICAgICAgLmZpbHRlcigodHNDYW5kaWRhdGUpID0+IHtcbiAgICAgICAgaWYgKCF0c0NhbmRpZGF0ZS5maWxlTmFtZS5lbmRzV2l0aCgnLnRzJykpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ganNUZXN0Q2FzZXMuZmluZEluZGV4KGpzVGVzdCA9PiBqc1Rlc3QudGVzdE5hbWUgPT09IHRzQ2FuZGlkYXRlLnRlc3ROYW1lKSA9PT0gLTE7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVhZFRyZWUoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIGNvbnN0IHJldCA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG5cbiAgICBhc3luYyBmdW5jdGlvbiByZWN1cnNlKGRpcjogc3RyaW5nKSB7XG4gICAgICBjb25zdCBmaWxlcyA9IGF3YWl0IGZzLnJlYWRkaXIoZGlyKTtcbiAgICAgIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xuICAgICAgICBjb25zdCBmdWxsUGF0aCA9IHBhdGguam9pbihkaXIsIGZpbGUpO1xuICAgICAgICBjb25zdCBzdGF0ZiA9IGF3YWl0IGZzLnN0YXQoZnVsbFBhdGgpO1xuICAgICAgICBpZiAoc3RhdGYuaXNGaWxlKCkpIHsgcmV0LnB1c2goZnVsbFBhdGgpOyB9XG4gICAgICAgIGlmIChzdGF0Zi5pc0RpcmVjdG9yeSgpKSB7IGF3YWl0IHJlY3Vyc2UoZnVsbFBhdGgpOyB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgYXdhaXQgcmVjdXJzZSh0aGlzLmRpcmVjdG9yeSk7XG4gICAgcmV0dXJuIHJldDtcbiAgfVxufVxuIiwgImltcG9ydCB7IGZvcm1hdCB9IGZyb20gJ3V0aWwnO1xuaW1wb3J0IHsgUmVzb3VyY2VJbXBhY3QgfSBmcm9tICdAYXdzLWNkay9jbG91ZGZvcm1hdGlvbi1kaWZmJztcbmltcG9ydCAqIGFzIGNoYWxrIGZyb20gJ2NoYWxrJztcbmltcG9ydCAqIGFzIGxvZ2dlciBmcm9tICcuLi9sb2dnZXInO1xuaW1wb3J0IHsgSW50ZWdUZXN0SW5mbyB9IGZyb20gJy4uL3J1bm5lci9pbnRlZ3JhdGlvbi10ZXN0cyc7XG5cbi8qKlxuICogVGhlIGFnZ3JlZ2F0ZSByZXN1bHRzIGZyb20gcnVubmluZyBhc3NlcnRpb25zIG9uIGEgdGVzdCBjYXNlXG4gKi9cbmV4cG9ydCB0eXBlIEFzc2VydGlvblJlc3VsdHMgPSB7IFtpZDogc3RyaW5nXTogQXNzZXJ0aW9uUmVzdWx0IH07XG5cbi8qKlxuICogVGhlIHJlc3VsdCBvZiBhbiBpbmRpdmlkdWFsIGFzc2VydGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFzc2VydGlvblJlc3VsdCB7XG4gIC8qKlxuICAgKiBUaGUgYXNzZXJ0aW9uIG1lc3NhZ2UuIElmIHRoZSBhc3NlcnRpb24gZmFpbGVkLCB0aGlzIHdpbGxcbiAgICogaW5jbHVkZSB0aGUgcmVhc29uLlxuICAgKi9cbiAgcmVhZG9ubHkgbWVzc2FnZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBhc3NlcnRpb24gc3VjY2VlZGVkIG9yIGZhaWxlZFxuICAgKi9cbiAgcmVhZG9ubHkgc3RhdHVzOiAnc3VjY2VzcycgfCAnZmFpbCc7XG59XG5cbi8qKlxuICogQ29uZmlnIGZvciBhbiBpbnRlZ3JhdGlvbiB0ZXN0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW50ZWdUZXN0V29ya2VyQ29uZmlnIGV4dGVuZHMgSW50ZWdUZXN0SW5mbyB7XG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgYW55IGRlc3RydWN0aXZlIGNoYW5nZXNcbiAgICpcbiAgICogQGRlZmF1bHQgW11cbiAgICovXG4gIHJlYWRvbmx5IGRlc3RydWN0aXZlQ2hhbmdlcz86IERlc3RydWN0aXZlQ2hhbmdlW107XG59XG5cbi8qKlxuICogSW5mb3JtYXRpb24gb24gYW55IGRlc3RydWN0aXZlIGNoYW5nZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZXN0cnVjdGl2ZUNoYW5nZSB7XG4gIC8qKlxuICAgKiBUaGUgbG9naWNhbElkIG9mIHRoZSByZXNvdXJjZSB3aXRoIGEgZGVzdHJ1Y3RpdmUgY2hhbmdlXG4gICAqL1xuICByZWFkb25seSBsb2dpY2FsSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHN0YWNrIHRoYXQgY29udGFpbnMgdGhlIGRlc3RydWN0aXZlIGNoYW5nZVxuICAgKi9cbiAgcmVhZG9ubHkgc3RhY2tOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBpbXBhY3Qgb2YgdGhlIGRlc3RydWN0aXZlIGNoYW5nZVxuICAgKi9cbiAgcmVhZG9ubHkgaW1wYWN0OiBSZXNvdXJjZUltcGFjdDtcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGludGVncmF0aW9uIHRlc3RzIG1ldHJpY3MgZm9yIGEgZ2l2ZW4gd29ya2VyXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW50ZWdSdW5uZXJNZXRyaWNzIHtcbiAgLyoqXG4gICAqIFRoZSByZWdpb24gdGhlIHRlc3Qgd2FzIHJ1biBpblxuICAgKi9cbiAgcmVhZG9ubHkgcmVnaW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB0b3RhbCBkdXJhdGlvbiBvZiB0aGUgd29ya2VyLlxuICAgKiBUaGlzIHdpbGwgYmUgdGhlIHN1bSBvZiBhbGwgaW5kaXZpZHVhbCB0ZXN0IGR1cmF0aW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgZHVyYXRpb246IG51bWJlcjtcblxuICAvKipcbiAgICogQ29udGFpbnMgdGhlIGR1cmF0aW9uIG9mIGluZGl2aWR1YWwgdGVzdHMgdGhhdCB0aGVcbiAgICogd29ya2VyIGV4ZWN1dGVkLlxuICAgKlxuICAgKiBNYXAgb2YgdGVzdE5hbWUgdG8gZHVyYXRpb24uXG4gICAqL1xuICByZWFkb25seSB0ZXN0czogeyBbdGVzdE5hbWU6IHN0cmluZ106IG51bWJlciB9O1xuXG4gIC8qKlxuICAgKiBUaGUgcHJvZmlsZSB0aGF0IHdhcyB1c2VkIHRvIHJ1biB0aGUgdGVzdFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGRlZmF1bHQgcHJvZmlsZVxuICAgKi9cbiAgcmVhZG9ubHkgcHJvZmlsZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTbmFwc2hvdFZlcmlmaWNhdGlvbk9wdGlvbnMge1xuICAvKipcbiAgICogUmV0YWluIGZhaWxlZCBzbmFwc2hvdCBjb21wYXJpc29uc1xuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgcmV0YWluPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVmVyYm9zZSBtb2RlXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSB2ZXJib3NlPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBJbnRlZ3JhdGlvbiB0ZXN0IHJlc3VsdHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnRlZ0JhdGNoUmVzcG9uc2Uge1xuICAvKipcbiAgICogTGlzdCBvZiBmYWlsZWQgdGVzdHNcbiAgICovXG4gIHJlYWRvbmx5IGZhaWxlZFRlc3RzOiBJbnRlZ1Rlc3RJbmZvW107XG5cbiAgLyoqXG4gICAqIExpc3Qgb2YgSW50ZWdyYXRpb24gdGVzdCBtZXRyaWNzLiBFYWNoIGVudHJ5IGluIHRoZVxuICAgKiBsaXN0IHJlcHJlc2VudHMgbWV0cmljcyBmcm9tIGEgc2luZ2xlIHdvcmtlciAoYWNjb3VudCArIHJlZ2lvbikuXG4gICAqL1xuICByZWFkb25seSBtZXRyaWNzOiBJbnRlZ1J1bm5lck1ldHJpY3NbXTtcbn1cblxuLyoqXG4gKiBDb21tb24gb3B0aW9ucyBmb3IgcnVubmluZyBpbnRlZ3JhdGlvbiB0ZXN0c1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEludGVnVGVzdE9wdGlvbnMge1xuICAvKipcbiAgICogQSBsaXN0IG9mIGludGVncmF0aW9uIHRlc3RzIHRvIHJ1blxuICAgKiBpbiB0aGlzIGJhdGNoXG4gICAqL1xuICByZWFkb25seSB0ZXN0czogSW50ZWdUZXN0V29ya2VyQ29uZmlnW107XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgb3Igbm90IHRvIGRlc3Ryb3kgdGhlIHN0YWNrcyBhdCB0aGVcbiAgICogZW5kIG9mIHRoZSB0ZXN0XG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGNsZWFuPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hlbiB0aGlzIGlzIHNldCB0byBgdHJ1ZWAgdGhlIHNuYXBzaG90IHdpbGxcbiAgICogYmUgY3JlYXRlZCBfd2l0aG91dF8gcnVubmluZyB0aGUgaW50ZWdyYXRpb24gdGVzdFxuICAgKiBUaGUgcmVzdWx0aW5nIHNuYXBzaG90IFNIT1VMRCBOT1QgYmUgY2hlY2tlZCBpblxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgZHJ5UnVuPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGxldmVsIG9mIHZlcmJvc2l0eSBmb3IgbG9nZ2luZy5cbiAgICogSGlnaGVyIG51bWJlciBtZWFucyBtb3JlIG91dHB1dC5cbiAgICpcbiAgICogQGRlZmF1bHQgMFxuICAgKi9cbiAgcmVhZG9ubHkgdmVyYm9zaXR5PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBJZiB0aGlzIGlzIHNldCB0byB0cnVlIHRoZW4gdGhlIHN0YWNrIHVwZGF0ZSB3b3JrZmxvdyB3aWxsIGJlIGRpc2FibGVkXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IHVwZGF0ZVdvcmtmbG93PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogdHJ1ZSBpZiBydW5uaW5nIGluIHdhdGNoIG1vZGVcbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHdhdGNoPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIHBvc3NpYmxlIHJlYXNvbnMgZm9yIGEgZGlhZ25vc3RpY1xuICovXG5leHBvcnQgZW51bSBEaWFnbm9zdGljUmVhc29uIHtcbiAgLyoqXG4gICAqIFRoZSBpbnRlZ3JhdGlvbiB0ZXN0IGZhaWxlZCBiZWNhdXNlIHRoZXJlXG4gICAqIGlzIG5vdCBleGlzdGluZyBzbmFwc2hvdFxuICAgKi9cbiAgTk9fU05BUFNIT1QgPSAnTk9fU05BUFNIT1QnLFxuXG4gIC8qKlxuICAgKiBUaGUgaW50ZWdyYXRpb24gdGVzdCBmYWlsZWRcbiAgICovXG4gIFRFU1RfRkFJTEVEID0gJ1RFU1RfRkFJTEVEJyxcblxuICAvKipcbiAgICogVGhlcmUgd2FzIGFuIGVycm9yIHJ1bm5pbmcgdGhlIGludGVncmF0aW9uIHRlc3RcbiAgICovXG4gIFRFU1RfRVJST1IgPSAnVEVTVF9FUlJPUicsXG5cbiAgLyoqXG4gICAqIFRoZSBzbmFwc2hvdCB0ZXN0IGZhaWxlZCBiZWNhdXNlIHRoZSBhY3R1YWxcbiAgICogc25hcHNob3Qgd2FzIGRpZmZlcmVudCB0aGFuIHRoZSBleHBlY3RlZCBzbmFwc2hvdFxuICAgKi9cbiAgU05BUFNIT1RfRkFJTEVEID0gJ1NOQVBTSE9UX0ZBSUxFRCcsXG5cbiAgLyoqXG4gICAqIFRoZSBzbmFwc2hvdCB0ZXN0IGZhaWxlZCBiZWNhdXNlIHRoZXJlIHdhcyBhbiBlcnJvciBleGVjdXRpbmcgaXRcbiAgICovXG4gIFNOQVBTSE9UX0VSUk9SID0gJ1NOQVBTSE9UX0VSUk9SJyxcblxuICAvKipcbiAgICogVGhlIHNuYXBzaG90IHRlc3Qgc3VjY2VlZGVkXG4gICAqL1xuICBTTkFQU0hPVF9TVUNDRVNTID0gJ1NOQVBTSE9UX1NVQ0NFU1MnLFxuXG4gIC8qKlxuICAgKiBUaGUgaW50ZWdyYXRpb24gdGVzdCBzdWNjZWVkZWRcbiAgICovXG4gIFRFU1RfU1VDQ0VTUyA9ICdURVNUX1NVQ0NFU1MnLFxuXG4gIC8qKlxuICAgKiBUaGUgYXNzZXJ0aW9uIGZhaWxlZFxuICAgKi9cbiAgQVNTRVJUSU9OX0ZBSUxFRCA9ICdBU1NFUlRJT05fRkFJTEVEJyxcbn1cblxuLyoqXG4gKiBJbnRlZ3JhdGlvbiB0ZXN0IGRpYWdub3N0aWNzXG4gKiBUaGlzIGlzIHVzZWQgdG8gcmVwb3J0IGJhY2sgdGhlIHN0YXR1cyBvZiBlYWNoIHRlc3RcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEaWFnbm9zdGljIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSB0ZXN0XG4gICAqL1xuICByZWFkb25seSB0ZXN0TmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgc3RhY2tcbiAgICovXG4gIHJlYWRvbmx5IHN0YWNrTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZGlhZ25vc3RpYyBtZXNzYWdlXG4gICAqL1xuICByZWFkb25seSBtZXNzYWdlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB0aW1lIGl0IHRvb2sgdG8gcnVuIHRoZSB0ZXN0XG4gICAqL1xuICByZWFkb25seSBkdXJhdGlvbj86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIHJlYXNvbiBmb3IgdGhlIGRpYWdub3N0aWNcbiAgICovXG4gIHJlYWRvbmx5IHJlYXNvbjogRGlhZ25vc3RpY1JlYXNvbjtcblxuICAvKipcbiAgICogQWRkaXRpb25hbCBtZXNzYWdlcyB0byBwcmludFxuICAgKi9cbiAgcmVhZG9ubHkgYWRkaXRpb25hbE1lc3NhZ2VzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFJlbGV2YW50IGNvbmZpZyBvcHRpb25zIHRoYXQgd2VyZSB1c2VkIGZvciB0aGUgaW50ZWcgdGVzdFxuICAgKi9cbiAgcmVhZG9ubHkgY29uZmlnPzogUmVjb3JkPHN0cmluZywgYW55Pjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByaW50U3VtbWFyeSh0b3RhbDogbnVtYmVyLCBmYWlsZWQ6IG51bWJlcik6IHZvaWQge1xuICBpZiAoZmFpbGVkID4gMCkge1xuICAgIGxvZ2dlci5wcmludCgnJXM6ICAgICVzICVzLCAlcyB0b3RhbCcsIGNoYWxrLmJvbGQoJ1Rlc3RzJyksIGNoYWxrLnJlZChmYWlsZWQpLCBjaGFsay5yZWQoJ2ZhaWxlZCcpLCB0b3RhbCk7XG4gIH0gZWxzZSB7XG4gICAgbG9nZ2VyLnByaW50KCclczogICAgJXMgJXMsICVzIHRvdGFsJywgY2hhbGsuYm9sZCgnVGVzdHMnKSwgY2hhbGsuZ3JlZW4odG90YWwpLCBjaGFsay5ncmVlbigncGFzc2VkJyksIHRvdGFsKTtcbiAgfVxufVxuXG4vKipcbiAqIEZvcm1hdCB0aGUgYXNzZXJ0aW9uIHJlc3VsdHMgc28gdGhhdCB0aGUgcmVzdWx0cyBjYW4gYmVcbiAqIHByaW50ZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdEFzc2VydGlvblJlc3VsdHMocmVzdWx0czogQXNzZXJ0aW9uUmVzdWx0cyk6IHN0cmluZyB7XG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHRzKVxuICAgIC5tYXAoKFtpZCwgcmVzdWx0XSkgPT4gZm9ybWF0KCclcyVzJywgaWQsIHJlc3VsdC5zdGF0dXMgPT09ICdzdWNjZXNzJyA/IGAgLSAke3Jlc3VsdC5zdGF0dXN9YCA6IGBcXG4ke3Jlc3VsdC5tZXNzYWdlfWApKVxuICAgIC5qb2luKCdcXG4gICAgICAnKTtcbn1cblxuLyoqXG4gKiBQcmludCBvdXQgdGhlIHJlc3VsdHMgZnJvbSB0ZXN0c1xuICovXG5leHBvcnQgZnVuY3Rpb24gcHJpbnRSZXN1bHRzKGRpYWdub3N0aWM6IERpYWdub3N0aWMpOiB2b2lkIHtcbiAgc3dpdGNoIChkaWFnbm9zdGljLnJlYXNvbikge1xuICAgIGNhc2UgRGlhZ25vc3RpY1JlYXNvbi5TTkFQU0hPVF9TVUNDRVNTOlxuICAgICAgbG9nZ2VyLnN1Y2Nlc3MoJyAgVU5DSEFOR0VEICAlcyAlcycsIGRpYWdub3N0aWMudGVzdE5hbWUsIGNoYWxrLmdyYXkoYCR7ZGlhZ25vc3RpYy5kdXJhdGlvbn1zYCkpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBEaWFnbm9zdGljUmVhc29uLlRFU1RfU1VDQ0VTUzpcbiAgICAgIGxvZ2dlci5zdWNjZXNzKCcgIFNVQ0NFU1MgICAgJXMgJXNcXG4gICAgICAnLCBkaWFnbm9zdGljLnRlc3ROYW1lLCBjaGFsay5ncmF5KGAke2RpYWdub3N0aWMuZHVyYXRpb259c2ApLCBkaWFnbm9zdGljLm1lc3NhZ2UpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBEaWFnbm9zdGljUmVhc29uLk5PX1NOQVBTSE9UOlxuICAgICAgbG9nZ2VyLmVycm9yKCcgIE5FVyAgICAgICAgJXMgJXMnLCBkaWFnbm9zdGljLnRlc3ROYW1lLCBjaGFsay5ncmF5KGAke2RpYWdub3N0aWMuZHVyYXRpb259c2ApKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgRGlhZ25vc3RpY1JlYXNvbi5TTkFQU0hPVF9GQUlMRUQ6XG4gICAgICBsb2dnZXIuZXJyb3IoJyAgQ0hBTkdFRCAgICAlcyAlc1xcbiAgICAgICVzJywgZGlhZ25vc3RpYy50ZXN0TmFtZSwgY2hhbGsuZ3JheShgJHtkaWFnbm9zdGljLmR1cmF0aW9ufXNgKSwgZGlhZ25vc3RpYy5tZXNzYWdlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgRGlhZ25vc3RpY1JlYXNvbi5TTkFQU0hPVF9FUlJPUjpcbiAgICBjYXNlIERpYWdub3N0aWNSZWFzb24uVEVTVF9FUlJPUjpcbiAgICAgIGxvZ2dlci5lcnJvcignICBFUlJPUiAgICAgICVzICVzXFxuICAgICAgJXMnLCBkaWFnbm9zdGljLnRlc3ROYW1lLCBjaGFsay5ncmF5KGAke2RpYWdub3N0aWMuZHVyYXRpb259c2ApLCBkaWFnbm9zdGljLm1lc3NhZ2UpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBEaWFnbm9zdGljUmVhc29uLlRFU1RfRkFJTEVEOlxuICAgICAgbG9nZ2VyLmVycm9yKCcgIEZBSUxFRCAgICAgJXMgJXNcXG4gICAgICAlcycsIGRpYWdub3N0aWMudGVzdE5hbWUsIGNoYWxrLmdyYXkoYCR7ZGlhZ25vc3RpYy5kdXJhdGlvbn1zYCksIGRpYWdub3N0aWMubWVzc2FnZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIERpYWdub3N0aWNSZWFzb24uQVNTRVJUSU9OX0ZBSUxFRDpcbiAgICAgIGxvZ2dlci5lcnJvcignICBBU1NFUlQgICAgICVzICVzXFxuICAgICAgJXMnLCBkaWFnbm9zdGljLnRlc3ROYW1lLCBjaGFsay5ncmF5KGAke2RpYWdub3N0aWMuZHVyYXRpb259c2ApLCBkaWFnbm9zdGljLm1lc3NhZ2UpO1xuICAgICAgYnJlYWs7XG4gIH1cbiAgZm9yIChjb25zdCBhZGRsIG9mIGRpYWdub3N0aWMuYWRkaXRpb25hbE1lc3NhZ2VzID8/IFtdKSB7XG4gICAgbG9nZ2VyLnByaW50KGAgICAgICAke2FkZGx9YCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByaW50TGFnZ2FyZHModGVzdE5hbWVzOiBTZXQ8c3RyaW5nPikge1xuICBjb25zdCBwYXJ0cyA9IFtcbiAgICAnICAnLFxuICAgIGBXYWl0aW5nIGZvciAke3Rlc3ROYW1lcy5zaXplfSBtb3JlYCxcbiAgICB0ZXN0TmFtZXMuc2l6ZSA8IDEwID8gWycoJywgQXJyYXkuZnJvbSh0ZXN0TmFtZXMpLmpvaW4oJywgJyksICcpJ10uam9pbignJykgOiAnJyxcbiAgXTtcblxuICBsb2dnZXIucHJpbnQoY2hhbGsuZ3JleShwYXJ0cy5maWx0ZXIoeCA9PiB4KS5qb2luKCcgJykpKTtcbn1cbiIsICIvLyBIZWxwZXIgZnVuY3Rpb25zIGZvciBDREsgRXhlY1xuaW1wb3J0IHsgc3Bhd25TeW5jIH0gZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XG5cbi8qKlxuICogT3VyIG93biBleGVjdXRlIGZ1bmN0aW9uIHdoaWNoIGRvZXNuJ3QgdXNlIHNoZWxscyBhbmQgc3RyaW5ncy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4ZWMoY29tbWFuZExpbmU6IHN0cmluZ1tdLCBvcHRpb25zOiB7IGN3ZD86IHN0cmluZywgdmVyYm9zZT86IGJvb2xlYW4sIGVudj86IGFueSB9ID0geyB9KTogYW55IHtcbiAgY29uc3QgcHJvYyA9IHNwYXduU3luYyhjb21tYW5kTGluZVswXSwgY29tbWFuZExpbmUuc2xpY2UoMSksIHtcbiAgICBzdGRpbzogWydpZ25vcmUnLCAncGlwZScsIG9wdGlvbnMudmVyYm9zZSA/ICdpbmhlcml0JyA6ICdwaXBlJ10sIC8vIGluaGVyaXQgU1RERVJSIGluIHZlcmJvc2UgbW9kZVxuICAgIGVudjoge1xuICAgICAgLi4ucHJvY2Vzcy5lbnYsXG4gICAgICAuLi5vcHRpb25zLmVudixcbiAgICB9LFxuICAgIGN3ZDogb3B0aW9ucy5jd2QsXG4gIH0pO1xuXG4gIGlmIChwcm9jLmVycm9yKSB7IHRocm93IHByb2MuZXJyb3I7IH1cbiAgaWYgKHByb2Muc3RhdHVzICE9PSAwKSB7XG4gICAgaWYgKHByb2Nlc3Muc3RkZXJyKSB7IC8vIHdpbGwgYmUgJ251bGwnIGluIHZlcmJvc2UgbW9kZVxuICAgICAgcHJvY2Vzcy5zdGRlcnIud3JpdGUocHJvYy5zdGRlcnIpO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYENvbW1hbmQgZXhpdGVkIHdpdGggJHtwcm9jLnN0YXR1cyA/IGBzdGF0dXMgJHtwcm9jLnN0YXR1c31gIDogYHNpZ25hbCAke3Byb2Muc2lnbmFsfWB9YCk7XG4gIH1cblxuICBjb25zdCBvdXRwdXQgPSBwcm9jLnN0ZG91dC50b1N0cmluZygndXRmLTgnKS50cmltKCk7XG5cbiAgcmV0dXJuIG91dHB1dDtcbn1cblxuLyoqXG4gKiBGbGF0dGVuIGEgbGlzdCBvZiBsaXN0cyBpbnRvIGEgbGlzdCBvZiBlbGVtZW50c1xuICovXG5leHBvcnQgZnVuY3Rpb24gZmxhdHRlbjxUPih4czogVFtdW10pOiBUW10ge1xuICByZXR1cm4gQXJyYXkucHJvdG90eXBlLmNvbmNhdC5hcHBseShbXSwgeHMpO1xufVxuXG4vKipcbiAqIENoYWluIGNvbW1hbmRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGFpbihjb21tYW5kczogc3RyaW5nW10pOiBzdHJpbmcge1xuICByZXR1cm4gY29tbWFuZHMuZmlsdGVyKGMgPT4gISFjKS5qb2luKCcgJiYgJyk7XG59XG5cbi8qKlxuICogU3BsaXQgY29tbWFuZCB0byBjaHVua3MgYnkgc3BhY2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNodW5rcyhjb21tYW5kOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IHJlc3VsdCA9IGNvbW1hbmQubWF0Y2goLyg/OlteXFxzXCJdK3xcIlteXCJdKlwiKSsvZyk7XG4gIHJldHVybiByZXN1bHQgPz8gW107XG59XG5cbi8qKlxuICogQSBjbGFzcyBob2xkaW5nIGEgc2V0IG9mIGl0ZW1zIHdoaWNoIGFyZSBiZWluZyBjcm9zc2VkIG9mZiBpbiB0aW1lXG4gKlxuICogSWYgaXQgdGFrZXMgdG9vIGxvbmcgdG8gY3Jvc3Mgb2ZmIGEgbmV3IGl0ZW0sIHByaW50IHRoZSBsaXN0LlxuICovXG5leHBvcnQgY2xhc3MgV29ya0xpc3Q8QT4ge1xuICBwcml2YXRlIHJlYWRvbmx5IHJlbWFpbmluZyA9IG5ldyBTZXQodGhpcy5pdGVtcyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgdGltZW91dDogbnVtYmVyO1xuICBwcml2YXRlIHRpbWVyPzogTm9kZUpTLlRpbWVvdXQ7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBpdGVtczogQVtdLCBwcml2YXRlIHJlYWRvbmx5IG9wdGlvbnM6IFdvcmtMaXN0T3B0aW9uczxBPiA9IHt9KSB7XG4gICAgdGhpcy50aW1lb3V0ID0gb3B0aW9ucy50aW1lb3V0ID8/IDYwXzAwMDtcbiAgICB0aGlzLnNjaGVkdWxlVGltZXIoKTtcbiAgfVxuXG4gIHB1YmxpYyBjcm9zc09mZihpdGVtOiBBKSB7XG4gICAgdGhpcy5yZW1haW5pbmcuZGVsZXRlKGl0ZW0pO1xuICAgIHRoaXMuc3RvcFRpbWVyKCk7XG4gICAgaWYgKHRoaXMucmVtYWluaW5nLnNpemUgPiAwKSB7XG4gICAgICB0aGlzLnNjaGVkdWxlVGltZXIoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZG9uZSgpIHtcbiAgICB0aGlzLnJlbWFpbmluZy5jbGVhcigpO1xuICAgIHRoaXMuc3RvcFRpbWVyKCk7XG4gIH1cblxuICBwcml2YXRlIHN0b3BUaW1lcigpIHtcbiAgICBpZiAodGhpcy50aW1lcikge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZXIpO1xuICAgICAgdGhpcy50aW1lciA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNjaGVkdWxlVGltZXIoKSB7XG4gICAgdGhpcy50aW1lciA9IHNldFRpbWVvdXQoKCkgPT4gdGhpcy5yZXBvcnQoKSwgdGhpcy50aW1lb3V0KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVwb3J0KCkge1xuICAgIHRoaXMub3B0aW9ucy5vblRpbWVvdXQ/Lih0aGlzLnJlbWFpbmluZyk7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBXb3JrTGlzdE9wdGlvbnM8QT4ge1xuICAvKipcbiAgICogV2hlbiB0byByZXBseSB3aXRoIHJlbWFpbmluZyBpdGVtc1xuICAgKlxuICAgKiBAZGVmYXVsdCA2MDAwMFxuICAgKi9cbiAgcmVhZG9ubHkgdGltZW91dD86IG51bWJlcjtcblxuICAvKipcbiAgICogRnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRpbWVvdXQgaGl0c1xuICAgKi9cbiAgcmVhZG9ubHkgb25UaW1lb3V0PzogKHg6IFNldDxBPikgPT4gdm9pZDtcbn0iLCAiaW1wb3J0ICogYXMgd29ya2VycG9vbCBmcm9tICd3b3JrZXJwb29sJztcbmltcG9ydCB7IHByaW50UmVzdWx0cywgcHJpbnRTdW1tYXJ5LCBJbnRlZ0JhdGNoUmVzcG9uc2UsIEludGVnVGVzdE9wdGlvbnMsIEludGVnUnVubmVyTWV0cmljcyB9IGZyb20gJy4vY29tbW9uJztcbmltcG9ydCAqIGFzIGxvZ2dlciBmcm9tICcuLi9sb2dnZXInO1xuaW1wb3J0IHsgSW50ZWdUZXN0SW5mbyB9IGZyb20gJy4uL3J1bm5lci9pbnRlZ3JhdGlvbi10ZXN0cyc7XG5pbXBvcnQgeyBmbGF0dGVuIH0gZnJvbSAnLi4vdXRpbHMnO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGFuIGludGVncmF0aW9uIHRlc3QgYmF0Y2hcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnRlZ1Rlc3RCYXRjaFJlcXVlc3QgZXh0ZW5kcyBJbnRlZ1Rlc3RPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBBV1MgcmVnaW9uIHRvIHJ1biB0aGlzIGJhdGNoIGluXG4gICAqL1xuICByZWFkb25seSByZWdpb246IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEFXUyBwcm9maWxlIHRvIHVzZSB3aGVuIHJ1bm5pbmcgdGhpcyB0ZXN0XG4gICAqL1xuICByZWFkb25seSBwcm9maWxlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHJ1bm5pbmcgYWxsIGludGVncmF0aW9uIHRlc3RzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW50ZWdUZXN0UnVuT3B0aW9ucyBleHRlbmRzIEludGVnVGVzdE9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIHJlZ2lvbnMgdG8gcnVuIHRoZSBpbnRlZ3JhdGlvbiB0ZXN0cyBhY3Jvc3MuXG4gICAqIFRoaXMgYWxsb3dzIHRoZSBydW5uZXIgdG8gcnVuIGludGVncmF0aW9uIHRlc3RzIGluIHBhcmFsbGVsXG4gICAqL1xuICByZWFkb25seSByZWdpb25zOiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogTGlzdCBvZiBBV1MgcHJvZmlsZXMuIFRoaXMgd2lsbCBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggYHJlZ2lvbnNgXG4gICAqIHRvIHJ1biB0ZXN0cyBpbiBwYXJhbGxlbCBhY3Jvc3MgYWNjb3VudHMgKyByZWdpb25zXG4gICAqL1xuICByZWFkb25seSBwcm9maWxlcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgd29ya2VycG9vbCB0byB1c2VcbiAgICovXG4gIHJlYWRvbmx5IHBvb2w6IHdvcmtlcnBvb2wuV29ya2VyUG9vbDtcbn1cblxuLyoqXG4gKiBSdW4gSW50ZWdyYXRpb24gdGVzdHMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5JbnRlZ3JhdGlvblRlc3RzKG9wdGlvbnM6IEludGVnVGVzdFJ1bk9wdGlvbnMpOiBQcm9taXNlPHsgc3VjY2VzczogYm9vbGVhbiwgbWV0cmljczogSW50ZWdSdW5uZXJNZXRyaWNzW10gfT4ge1xuICBsb2dnZXIuaGlnaGxpZ2h0KCdcXG5SdW5uaW5nIGludGVncmF0aW9uIHRlc3RzIGZvciBmYWlsZWQgdGVzdHMuLi5cXG4nKTtcbiAgbG9nZ2VyLnByaW50KFxuICAgICdSdW5uaW5nIGluIHBhcmFsbGVsIGFjcm9zcyAlc3JlZ2lvbnM6ICVzJyxcbiAgICBvcHRpb25zLnByb2ZpbGVzID8gYHByb2ZpbGVzICR7b3B0aW9ucy5wcm9maWxlcy5qb2luKCcsICcpfSBhbmQgYDogJycsXG4gICAgb3B0aW9ucy5yZWdpb25zLmpvaW4oJywgJykpO1xuICBjb25zdCB0b3RhbFRlc3RzID0gb3B0aW9ucy50ZXN0cy5sZW5ndGg7XG5cbiAgY29uc3QgcmVzcG9uc2VzID0gYXdhaXQgcnVuSW50ZWdyYXRpb25UZXN0c0luUGFyYWxsZWwob3B0aW9ucyk7XG4gIGxvZ2dlci5oaWdobGlnaHQoJ1xcblRlc3QgUmVzdWx0czogXFxuJyk7XG4gIHByaW50U3VtbWFyeSh0b3RhbFRlc3RzLCByZXNwb25zZXMuZmFpbGVkVGVzdHMubGVuZ3RoKTtcbiAgcmV0dXJuIHtcbiAgICBzdWNjZXNzOiByZXNwb25zZXMuZmFpbGVkVGVzdHMubGVuZ3RoID09PSAwLFxuICAgIG1ldHJpY3M6IHJlc3BvbnNlcy5tZXRyaWNzLFxuICB9O1xufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYSB3b3JrZXIgZm9yIGEgc2luZ2xlIGFjY291bnQgKyByZWdpb25cbiAqL1xuaW50ZXJmYWNlIEFjY291bnRXb3JrZXIge1xuICAvKipcbiAgICogVGhlIHJlZ2lvbiB0aGUgd29ya2VyIHNob3VsZCBydW4gaW5cbiAgICovXG4gIHJlYWRvbmx5IHJlZ2lvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgQVdTIHByb2ZpbGUgdGhhdCB0aGUgd29ya2VyIHNob3VsZCB1c2VcbiAgICogVGhpcyB3aWxsIGJlIHBhc3NlZCBhcyB0aGUgJy0tcHJvZmlsZScgb3B0aW9uIHRvIHRoZSBDREsgQ0xJXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZGVmYXVsdCBwcm9maWxlXG4gICAqL1xuICByZWFkb25seSBwcm9maWxlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBsaXN0IG9mIEFjY291bnRXb3JrZXJzIGJhc2VkIG9uIHRoZSBsaXN0IG9mIHJlZ2lvbnMgYW5kIHByb2ZpbGVzXG4gKiBnaXZlbiB0byB0aGUgQ0xJLlxuICovXG5mdW5jdGlvbiBnZXRBY2NvdW50V29ya2VycyhyZWdpb25zOiBzdHJpbmdbXSwgcHJvZmlsZXM/OiBzdHJpbmdbXSk6IEFjY291bnRXb3JrZXJbXSB7XG4gIGNvbnN0IHdvcmtlcnM6IEFjY291bnRXb3JrZXJbXSA9IFtdO1xuICBmdW5jdGlvbiBwdXNoV29ya2VyKHByb2ZpbGU/OiBzdHJpbmcpIHtcbiAgICBmb3IgKGNvbnN0IHJlZ2lvbiBvZiByZWdpb25zKSB7XG4gICAgICB3b3JrZXJzLnB1c2goe1xuICAgICAgICByZWdpb24sXG4gICAgICAgIHByb2ZpbGUsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgaWYgKHByb2ZpbGVzICYmIHByb2ZpbGVzLmxlbmd0aCA+IDApIHtcbiAgICBmb3IgKGNvbnN0IHByb2ZpbGUgb2YgcHJvZmlsZXMgPz8gW10pIHtcbiAgICAgIHB1c2hXb3JrZXIocHJvZmlsZSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHB1c2hXb3JrZXIoKTtcbiAgfVxuICByZXR1cm4gd29ya2Vycztcbn1cblxuLyoqXG4gKiBSdW5zIGEgc2V0IG9mIGludGVncmF0aW9uIHRlc3RzIGluIHBhcmFsbGVsIGFjcm9zcyBhIGxpc3Qgb2YgQVdTIHJlZ2lvbnMuXG4gKiBPbmx5IGEgc2luZ2xlIHRlc3QgY2FuIGJlIHJ1biBhdCBhIHRpbWUgaW4gYSBnaXZlbiByZWdpb24uIE9uY2UgYSByZWdpb25cbiAqIGlzIGRvbmUgcnVubmluZyBhIHRlc3QsIHRoZSBuZXh0IHRlc3Qgd2lsbCBiZSBwdWxsZWQgZnJvbSB0aGUgcXVldWVcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bkludGVncmF0aW9uVGVzdHNJblBhcmFsbGVsKFxuICBvcHRpb25zOiBJbnRlZ1Rlc3RSdW5PcHRpb25zLFxuKTogUHJvbWlzZTxJbnRlZ0JhdGNoUmVzcG9uc2U+IHtcblxuICBjb25zdCBxdWV1ZSA9IG9wdGlvbnMudGVzdHM7XG4gIGNvbnN0IHJlc3VsdHM6IEludGVnQmF0Y2hSZXNwb25zZSA9IHtcbiAgICBtZXRyaWNzOiBbXSxcbiAgICBmYWlsZWRUZXN0czogW10sXG4gIH07XG4gIGNvbnN0IGFjY291bnRXb3JrZXJzOiBBY2NvdW50V29ya2VyW10gPSBnZXRBY2NvdW50V29ya2VycyhvcHRpb25zLnJlZ2lvbnMsIG9wdGlvbnMucHJvZmlsZXMpO1xuXG4gIGFzeW5jIGZ1bmN0aW9uIHJ1blRlc3Qod29ya2VyOiBBY2NvdW50V29ya2VyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHRlc3RzOiB7IFt0ZXN0TmFtZTogc3RyaW5nXTogbnVtYmVyIH0gPSB7fTtcbiAgICBkbyB7XG4gICAgICBjb25zdCB0ZXN0ID0gcXVldWUucG9wKCk7XG4gICAgICBpZiAoIXRlc3QpIGJyZWFrO1xuICAgICAgY29uc3QgdGVzdFN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICAgIGxvZ2dlci5oaWdobGlnaHQoYFJ1bm5pbmcgdGVzdCAke3Rlc3QuZmlsZU5hbWV9IGluICR7d29ya2VyLnByb2ZpbGUgPyB3b3JrZXIucHJvZmlsZSArICcvJyA6ICcnfSR7d29ya2VyLnJlZ2lvbn1gKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlOiBJbnRlZ1Rlc3RJbmZvW11bXSA9IGF3YWl0IG9wdGlvbnMucG9vbC5leGVjKCdpbnRlZ1Rlc3RXb3JrZXInLCBbe1xuICAgICAgICB3YXRjaDogb3B0aW9ucy53YXRjaCxcbiAgICAgICAgcmVnaW9uOiB3b3JrZXIucmVnaW9uLFxuICAgICAgICBwcm9maWxlOiB3b3JrZXIucHJvZmlsZSxcbiAgICAgICAgdGVzdHM6IFt0ZXN0XSxcbiAgICAgICAgY2xlYW46IG9wdGlvbnMuY2xlYW4sXG4gICAgICAgIGRyeVJ1bjogb3B0aW9ucy5kcnlSdW4sXG4gICAgICAgIHZlcmJvc2l0eTogb3B0aW9ucy52ZXJib3NpdHksXG4gICAgICAgIHVwZGF0ZVdvcmtmbG93OiBvcHRpb25zLnVwZGF0ZVdvcmtmbG93LFxuICAgICAgfV0sIHtcbiAgICAgICAgb246IHByaW50UmVzdWx0cyxcbiAgICAgIH0pO1xuXG4gICAgICByZXN1bHRzLmZhaWxlZFRlc3RzLnB1c2goLi4uZmxhdHRlbihyZXNwb25zZSkpO1xuICAgICAgdGVzdHNbdGVzdC5maWxlTmFtZV0gPSAoRGF0ZS5ub3coKSAtIHRlc3RTdGFydCkgLyAxMDAwO1xuICAgIH0gd2hpbGUgKHF1ZXVlLmxlbmd0aCA+IDApO1xuICAgIGNvbnN0IG1ldHJpY3M6IEludGVnUnVubmVyTWV0cmljcyA9IHtcbiAgICAgIHJlZ2lvbjogd29ya2VyLnJlZ2lvbixcbiAgICAgIHByb2ZpbGU6IHdvcmtlci5wcm9maWxlLFxuICAgICAgZHVyYXRpb246IChEYXRlLm5vdygpIC0gc3RhcnQpIC8gMTAwMCxcbiAgICAgIHRlc3RzLFxuICAgIH07XG4gICAgaWYgKE9iamVjdC5rZXlzKHRlc3RzKS5sZW5ndGggPiAwKSB7XG4gICAgICByZXN1bHRzLm1ldHJpY3MucHVzaChtZXRyaWNzKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCB3b3JrZXJzID0gYWNjb3VudFdvcmtlcnMubWFwKCh3b3JrZXIpID0+IHJ1blRlc3Qod29ya2VyKSk7XG4gIGF3YWl0IFByb21pc2UuYWxsKHdvcmtlcnMpO1xuICByZXR1cm4gcmVzdWx0cztcbn1cbiIsICJpbXBvcnQgKiBhcyB3b3JrZXJwb29sIGZyb20gJ3dvcmtlcnBvb2wnO1xuaW1wb3J0IHsgcHJpbnRTdW1tYXJ5LCBwcmludFJlc3VsdHMsIEludGVnVGVzdFdvcmtlckNvbmZpZywgU25hcHNob3RWZXJpZmljYXRpb25PcHRpb25zLCBwcmludExhZ2dhcmRzIH0gZnJvbSAnLi9jb21tb24nO1xuaW1wb3J0ICogYXMgbG9nZ2VyIGZyb20gJy4uL2xvZ2dlcic7XG5pbXBvcnQgeyBJbnRlZ1Rlc3QgfSBmcm9tICcuLi9ydW5uZXIvaW50ZWdyYXRpb24tdGVzdHMnO1xuaW1wb3J0IHsgZmxhdHRlbiwgV29ya0xpc3QgfSBmcm9tICcuLi91dGlscyc7XG5cbi8qKlxuICogUnVuIFNuYXBzaG90IHRlc3RzXG4gKiBGaXJzdCBiYXRjaCB1cCB0aGUgdGVzdHMuIEJ5IGRlZmF1bHQgdGhlcmUgd2lsbCBiZSAzIHRlc3RzIHBlciBiYXRjaC5cbiAqIFVzZSBhIHdvcmtlcnBvb2wgdG8gcnVuIHRoZSBiYXRjaGVzIGluIHBhcmFsbGVsLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuU25hcHNob3RUZXN0cyhcbiAgcG9vbDogd29ya2VycG9vbC5Xb3JrZXJQb29sLFxuICB0ZXN0czogSW50ZWdUZXN0W10sXG4gIG9wdGlvbnM6IFNuYXBzaG90VmVyaWZpY2F0aW9uT3B0aW9ucyxcbik6IFByb21pc2U8SW50ZWdUZXN0V29ya2VyQ29uZmlnW10+IHtcbiAgbG9nZ2VyLmhpZ2hsaWdodCgnXFxuVmVyaWZ5aW5nIGludGVncmF0aW9uIHRlc3Qgc25hcHNob3RzLi4uXFxuJyk7XG5cbiAgY29uc3QgdG9kbyA9IG5ldyBXb3JrTGlzdCh0ZXN0cy5tYXAodCA9PiB0LnRlc3ROYW1lKSwge1xuICAgIG9uVGltZW91dDogcHJpbnRMYWdnYXJkcyxcbiAgfSk7XG5cbiAgY29uc3QgZmFpbGVkVGVzdHM6IEludGVnVGVzdFdvcmtlckNvbmZpZ1tdW10gPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICB0ZXN0cy5tYXAoKHRlc3QpID0+IHBvb2wuZXhlYygnc25hcHNob3RUZXN0V29ya2VyJywgW3Rlc3QuaW5mbyAvKiBEZWh5ZHJhdGUgY2xhc3MgLT4gZGF0YSAqLywgb3B0aW9uc10sIHtcbiAgICAgIG9uOiAoeCkgPT4ge1xuICAgICAgICB0b2RvLmNyb3NzT2ZmKHgudGVzdE5hbWUpO1xuICAgICAgICBwcmludFJlc3VsdHMoeCk7XG4gICAgICB9LFxuICAgIH0pKSxcbiAgKTtcbiAgdG9kby5kb25lKCk7XG4gIGNvbnN0IHRlc3RzVG9SdW4gPSBmbGF0dGVuKGZhaWxlZFRlc3RzKTtcblxuICBsb2dnZXIuaGlnaGxpZ2h0KCdcXG5TbmFwc2hvdCBSZXN1bHRzOiBcXG4nKTtcbiAgcHJpbnRTdW1tYXJ5KHRlc3RzLmxlbmd0aCwgdGVzdHNUb1J1bi5sZW5ndGgpO1xuICByZXR1cm4gdGVzdHNUb1J1bjtcblxufVxuIiwgImV4cG9ydCAqIGZyb20gJy4vY29tbW9uJztcbmV4cG9ydCAqIGZyb20gJy4vaW50ZWctdGVzdC13b3JrZXInO1xuZXhwb3J0ICogZnJvbSAnLi9pbnRlZy1zbmFwc2hvdC13b3JrZXInO1xuIiwgImltcG9ydCAqIGFzIHdvcmtlcnBvb2wgZnJvbSAnd29ya2VycG9vbCc7XG5pbXBvcnQgeyBwcmludFJlc3VsdHMgfSBmcm9tICcuL2NvbW1vbic7XG5pbXBvcnQgeyBJbnRlZ1Rlc3RJbmZvIH0gZnJvbSAnLi4vcnVubmVyJztcblxuZXhwb3J0IGludGVyZmFjZSBJbnRlZ1dhdGNoT3B0aW9ucyBleHRlbmRzIEludGVnVGVzdEluZm8ge1xuICByZWFkb25seSByZWdpb246IHN0cmluZztcbiAgcmVhZG9ubHkgcHJvZmlsZT86IHN0cmluZztcbiAgcmVhZG9ubHkgdmVyYm9zaXR5PzogbnVtYmVyO1xufVxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdhdGNoSW50ZWdyYXRpb25UZXN0KHBvb2w6IHdvcmtlcnBvb2wuV29ya2VyUG9vbCwgb3B0aW9uczogSW50ZWdXYXRjaE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgcG9vbC5leGVjKCd3YXRjaFRlc3RXb3JrZXInLCBbb3B0aW9uc10sIHtcbiAgICBvbjogcHJpbnRSZXN1bHRzLFxuICB9KTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbnZhciBmcyA9IHJlcXVpcmUoJ2ZzJyk7XG52YXIgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xuXG5sZXQgc2hpbTtcbmNsYXNzIFkxOE4ge1xuICAgIGNvbnN0cnVjdG9yKG9wdHMpIHtcbiAgICAgICAgLy8gY29uZmlndXJhYmxlIG9wdGlvbnMuXG4gICAgICAgIG9wdHMgPSBvcHRzIHx8IHt9O1xuICAgICAgICB0aGlzLmRpcmVjdG9yeSA9IG9wdHMuZGlyZWN0b3J5IHx8ICcuL2xvY2FsZXMnO1xuICAgICAgICB0aGlzLnVwZGF0ZUZpbGVzID0gdHlwZW9mIG9wdHMudXBkYXRlRmlsZXMgPT09ICdib29sZWFuJyA/IG9wdHMudXBkYXRlRmlsZXMgOiB0cnVlO1xuICAgICAgICB0aGlzLmxvY2FsZSA9IG9wdHMubG9jYWxlIHx8ICdlbic7XG4gICAgICAgIHRoaXMuZmFsbGJhY2tUb0xhbmd1YWdlID0gdHlwZW9mIG9wdHMuZmFsbGJhY2tUb0xhbmd1YWdlID09PSAnYm9vbGVhbicgPyBvcHRzLmZhbGxiYWNrVG9MYW5ndWFnZSA6IHRydWU7XG4gICAgICAgIC8vIGludGVybmFsIHN0dWZmLlxuICAgICAgICB0aGlzLmNhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgdGhpcy53cml0ZVF1ZXVlID0gW107XG4gICAgfVxuICAgIF9fKC4uLmFyZ3MpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBhcmd1bWVudHNbMF0gIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdGFnZ2VkTGl0ZXJhbChhcmd1bWVudHNbMF0sIC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3RyID0gYXJncy5zaGlmdCgpO1xuICAgICAgICBsZXQgY2IgPSBmdW5jdGlvbiAoKSB7IH07IC8vIHN0YXJ0IHdpdGggbm9vcC5cbiAgICAgICAgaWYgKHR5cGVvZiBhcmdzW2FyZ3MubGVuZ3RoIC0gMV0gPT09ICdmdW5jdGlvbicpXG4gICAgICAgICAgICBjYiA9IGFyZ3MucG9wKCk7XG4gICAgICAgIGNiID0gY2IgfHwgZnVuY3Rpb24gKCkgeyB9OyAvLyBub29wLlxuICAgICAgICBpZiAoIXRoaXMuY2FjaGVbdGhpcy5sb2NhbGVdKVxuICAgICAgICAgICAgdGhpcy5fcmVhZExvY2FsZUZpbGUoKTtcbiAgICAgICAgLy8gd2UndmUgb2JzZXJ2ZWQgYSBuZXcgc3RyaW5nLCB1cGRhdGUgdGhlIGxhbmd1YWdlIGZpbGUuXG4gICAgICAgIGlmICghdGhpcy5jYWNoZVt0aGlzLmxvY2FsZV1bc3RyXSAmJiB0aGlzLnVwZGF0ZUZpbGVzKSB7XG4gICAgICAgICAgICB0aGlzLmNhY2hlW3RoaXMubG9jYWxlXVtzdHJdID0gc3RyO1xuICAgICAgICAgICAgLy8gaW5jbHVkZSB0aGUgY3VycmVudCBkaXJlY3RvcnkgYW5kIGxvY2FsZSxcbiAgICAgICAgICAgIC8vIHNpbmNlIHRoZXNlIHZhbHVlcyBjb3VsZCBjaGFuZ2UgYmVmb3JlIHRoZVxuICAgICAgICAgICAgLy8gd3JpdGUgaXMgcGVyZm9ybWVkLlxuICAgICAgICAgICAgdGhpcy5fZW5xdWV1ZVdyaXRlKHtcbiAgICAgICAgICAgICAgICBkaXJlY3Rvcnk6IHRoaXMuZGlyZWN0b3J5LFxuICAgICAgICAgICAgICAgIGxvY2FsZTogdGhpcy5sb2NhbGUsXG4gICAgICAgICAgICAgICAgY2JcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY2IoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2hpbS5mb3JtYXQuYXBwbHkoc2hpbS5mb3JtYXQsIFt0aGlzLmNhY2hlW3RoaXMubG9jYWxlXVtzdHJdIHx8IHN0cl0uY29uY2F0KGFyZ3MpKTtcbiAgICB9XG4gICAgX19uKCkge1xuICAgICAgICBjb25zdCBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICAgICAgY29uc3Qgc2luZ3VsYXIgPSBhcmdzLnNoaWZ0KCk7XG4gICAgICAgIGNvbnN0IHBsdXJhbCA9IGFyZ3Muc2hpZnQoKTtcbiAgICAgICAgY29uc3QgcXVhbnRpdHkgPSBhcmdzLnNoaWZ0KCk7XG4gICAgICAgIGxldCBjYiA9IGZ1bmN0aW9uICgpIHsgfTsgLy8gc3RhcnQgd2l0aCBub29wLlxuICAgICAgICBpZiAodHlwZW9mIGFyZ3NbYXJncy5sZW5ndGggLSAxXSA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICAgIGNiID0gYXJncy5wb3AoKTtcbiAgICAgICAgaWYgKCF0aGlzLmNhY2hlW3RoaXMubG9jYWxlXSlcbiAgICAgICAgICAgIHRoaXMuX3JlYWRMb2NhbGVGaWxlKCk7XG4gICAgICAgIGxldCBzdHIgPSBxdWFudGl0eSA9PT0gMSA/IHNpbmd1bGFyIDogcGx1cmFsO1xuICAgICAgICBpZiAodGhpcy5jYWNoZVt0aGlzLmxvY2FsZV1bc2luZ3VsYXJdKSB7XG4gICAgICAgICAgICBjb25zdCBlbnRyeSA9IHRoaXMuY2FjaGVbdGhpcy5sb2NhbGVdW3Npbmd1bGFyXTtcbiAgICAgICAgICAgIHN0ciA9IGVudHJ5W3F1YW50aXR5ID09PSAxID8gJ29uZScgOiAnb3RoZXInXTtcbiAgICAgICAgfVxuICAgICAgICAvLyB3ZSd2ZSBvYnNlcnZlZCBhIG5ldyBzdHJpbmcsIHVwZGF0ZSB0aGUgbGFuZ3VhZ2UgZmlsZS5cbiAgICAgICAgaWYgKCF0aGlzLmNhY2hlW3RoaXMubG9jYWxlXVtzaW5ndWxhcl0gJiYgdGhpcy51cGRhdGVGaWxlcykge1xuICAgICAgICAgICAgdGhpcy5jYWNoZVt0aGlzLmxvY2FsZV1bc2luZ3VsYXJdID0ge1xuICAgICAgICAgICAgICAgIG9uZTogc2luZ3VsYXIsXG4gICAgICAgICAgICAgICAgb3RoZXI6IHBsdXJhbFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIC8vIGluY2x1ZGUgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGFuZCBsb2NhbGUsXG4gICAgICAgICAgICAvLyBzaW5jZSB0aGVzZSB2YWx1ZXMgY291bGQgY2hhbmdlIGJlZm9yZSB0aGVcbiAgICAgICAgICAgIC8vIHdyaXRlIGlzIHBlcmZvcm1lZC5cbiAgICAgICAgICAgIHRoaXMuX2VucXVldWVXcml0ZSh7XG4gICAgICAgICAgICAgICAgZGlyZWN0b3J5OiB0aGlzLmRpcmVjdG9yeSxcbiAgICAgICAgICAgICAgICBsb2NhbGU6IHRoaXMubG9jYWxlLFxuICAgICAgICAgICAgICAgIGNiXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNiKCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYgYSAlZCBwbGFjZWhvbGRlciBpcyBwcm92aWRlZCwgYWRkIHF1YW50aXR5XG4gICAgICAgIC8vIHRvIHRoZSBhcmd1bWVudHMgZXhwYW5kZWQgYnkgdXRpbC5mb3JtYXQuXG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IFtzdHJdO1xuICAgICAgICBpZiAofnN0ci5pbmRleE9mKCclZCcpKVxuICAgICAgICAgICAgdmFsdWVzLnB1c2gocXVhbnRpdHkpO1xuICAgICAgICByZXR1cm4gc2hpbS5mb3JtYXQuYXBwbHkoc2hpbS5mb3JtYXQsIHZhbHVlcy5jb25jYXQoYXJncykpO1xuICAgIH1cbiAgICBzZXRMb2NhbGUobG9jYWxlKSB7XG4gICAgICAgIHRoaXMubG9jYWxlID0gbG9jYWxlO1xuICAgIH1cbiAgICBnZXRMb2NhbGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsZTtcbiAgICB9XG4gICAgdXBkYXRlTG9jYWxlKG9iaikge1xuICAgICAgICBpZiAoIXRoaXMuY2FjaGVbdGhpcy5sb2NhbGVdKVxuICAgICAgICAgICAgdGhpcy5fcmVhZExvY2FsZUZpbGUoKTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gb2JqKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FjaGVbdGhpcy5sb2NhbGVdW2tleV0gPSBvYmpba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBfdGFnZ2VkTGl0ZXJhbChwYXJ0cywgLi4uYXJncykge1xuICAgICAgICBsZXQgc3RyID0gJyc7XG4gICAgICAgIHBhcnRzLmZvckVhY2goZnVuY3Rpb24gKHBhcnQsIGkpIHtcbiAgICAgICAgICAgIGNvbnN0IGFyZyA9IGFyZ3NbaSArIDFdO1xuICAgICAgICAgICAgc3RyICs9IHBhcnQ7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGFyZyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICBzdHIgKz0gJyVzJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLl9fLmFwcGx5KHRoaXMsIFtzdHJdLmNvbmNhdChbXS5zbGljZS5jYWxsKGFyZ3MsIDEpKSk7XG4gICAgfVxuICAgIF9lbnF1ZXVlV3JpdGUod29yaykge1xuICAgICAgICB0aGlzLndyaXRlUXVldWUucHVzaCh3b3JrKTtcbiAgICAgICAgaWYgKHRoaXMud3JpdGVRdWV1ZS5sZW5ndGggPT09IDEpXG4gICAgICAgICAgICB0aGlzLl9wcm9jZXNzV3JpdGVRdWV1ZSgpO1xuICAgIH1cbiAgICBfcHJvY2Vzc1dyaXRlUXVldWUoKSB7XG4gICAgICAgIGNvbnN0IF90aGlzID0gdGhpcztcbiAgICAgICAgY29uc3Qgd29yayA9IHRoaXMud3JpdGVRdWV1ZVswXTtcbiAgICAgICAgLy8gZGVzdHJ1Y3R1cmUgdGhlIGVucXVldWVkIHdvcmsuXG4gICAgICAgIGNvbnN0IGRpcmVjdG9yeSA9IHdvcmsuZGlyZWN0b3J5O1xuICAgICAgICBjb25zdCBsb2NhbGUgPSB3b3JrLmxvY2FsZTtcbiAgICAgICAgY29uc3QgY2IgPSB3b3JrLmNiO1xuICAgICAgICBjb25zdCBsYW5ndWFnZUZpbGUgPSB0aGlzLl9yZXNvbHZlTG9jYWxlRmlsZShkaXJlY3RvcnksIGxvY2FsZSk7XG4gICAgICAgIGNvbnN0IHNlcmlhbGl6ZWRMb2NhbGUgPSBKU09OLnN0cmluZ2lmeSh0aGlzLmNhY2hlW2xvY2FsZV0sIG51bGwsIDIpO1xuICAgICAgICBzaGltLmZzLndyaXRlRmlsZShsYW5ndWFnZUZpbGUsIHNlcmlhbGl6ZWRMb2NhbGUsICd1dGYtOCcsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIF90aGlzLndyaXRlUXVldWUuc2hpZnQoKTtcbiAgICAgICAgICAgIGlmIChfdGhpcy53cml0ZVF1ZXVlLmxlbmd0aCA+IDApXG4gICAgICAgICAgICAgICAgX3RoaXMuX3Byb2Nlc3NXcml0ZVF1ZXVlKCk7XG4gICAgICAgICAgICBjYihlcnIpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgX3JlYWRMb2NhbGVGaWxlKCkge1xuICAgICAgICBsZXQgbG9jYWxlTG9va3VwID0ge307XG4gICAgICAgIGNvbnN0IGxhbmd1YWdlRmlsZSA9IHRoaXMuX3Jlc29sdmVMb2NhbGVGaWxlKHRoaXMuZGlyZWN0b3J5LCB0aGlzLmxvY2FsZSk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHVzaW5nIGEgYnVuZGxlciBzdWNoIGFzIHdlYnBhY2ssIHJlYWRGaWxlU3luYyBtYXkgbm90IGJlIGRlZmluZWQ6XG4gICAgICAgICAgICBpZiAoc2hpbS5mcy5yZWFkRmlsZVN5bmMpIHtcbiAgICAgICAgICAgICAgICBsb2NhbGVMb29rdXAgPSBKU09OLnBhcnNlKHNoaW0uZnMucmVhZEZpbGVTeW5jKGxhbmd1YWdlRmlsZSwgJ3V0Zi04JykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBTeW50YXhFcnJvcikge1xuICAgICAgICAgICAgICAgIGVyci5tZXNzYWdlID0gJ3N5bnRheCBlcnJvciBpbiAnICsgbGFuZ3VhZ2VGaWxlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGVyci5jb2RlID09PSAnRU5PRU5UJylcbiAgICAgICAgICAgICAgICBsb2NhbGVMb29rdXAgPSB7fTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jYWNoZVt0aGlzLmxvY2FsZV0gPSBsb2NhbGVMb29rdXA7XG4gICAgfVxuICAgIF9yZXNvbHZlTG9jYWxlRmlsZShkaXJlY3RvcnksIGxvY2FsZSkge1xuICAgICAgICBsZXQgZmlsZSA9IHNoaW0ucmVzb2x2ZShkaXJlY3RvcnksICcuLycsIGxvY2FsZSArICcuanNvbicpO1xuICAgICAgICBpZiAodGhpcy5mYWxsYmFja1RvTGFuZ3VhZ2UgJiYgIXRoaXMuX2ZpbGVFeGlzdHNTeW5jKGZpbGUpICYmIH5sb2NhbGUubGFzdEluZGV4T2YoJ18nKSkge1xuICAgICAgICAgICAgLy8gYXR0ZW1wdCBmYWxsYmFjayB0byBsYW5ndWFnZSBvbmx5XG4gICAgICAgICAgICBjb25zdCBsYW5ndWFnZUZpbGUgPSBzaGltLnJlc29sdmUoZGlyZWN0b3J5LCAnLi8nLCBsb2NhbGUuc3BsaXQoJ18nKVswXSArICcuanNvbicpO1xuICAgICAgICAgICAgaWYgKHRoaXMuX2ZpbGVFeGlzdHNTeW5jKGxhbmd1YWdlRmlsZSkpXG4gICAgICAgICAgICAgICAgZmlsZSA9IGxhbmd1YWdlRmlsZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmlsZTtcbiAgICB9XG4gICAgX2ZpbGVFeGlzdHNTeW5jKGZpbGUpIHtcbiAgICAgICAgcmV0dXJuIHNoaW0uZXhpc3RzKGZpbGUpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHkxOG4kMShvcHRzLCBfc2hpbSkge1xuICAgIHNoaW0gPSBfc2hpbTtcbiAgICBjb25zdCB5MThuID0gbmV3IFkxOE4ob3B0cyk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgX186IHkxOG4uX18uYmluZCh5MThuKSxcbiAgICAgICAgX19uOiB5MThuLl9fbi5iaW5kKHkxOG4pLFxuICAgICAgICBzZXRMb2NhbGU6IHkxOG4uc2V0TG9jYWxlLmJpbmQoeTE4biksXG4gICAgICAgIGdldExvY2FsZTogeTE4bi5nZXRMb2NhbGUuYmluZCh5MThuKSxcbiAgICAgICAgdXBkYXRlTG9jYWxlOiB5MThuLnVwZGF0ZUxvY2FsZS5iaW5kKHkxOG4pLFxuICAgICAgICBsb2NhbGU6IHkxOG4ubG9jYWxlXG4gICAgfTtcbn1cblxudmFyIG5vZGVQbGF0Zm9ybVNoaW0gPSB7XG4gICAgZnM6IHtcbiAgICAgICAgcmVhZEZpbGVTeW5jOiBmcy5yZWFkRmlsZVN5bmMsXG4gICAgICAgIHdyaXRlRmlsZTogZnMud3JpdGVGaWxlXG4gICAgfSxcbiAgICBmb3JtYXQ6IHV0aWwuZm9ybWF0LFxuICAgIHJlc29sdmU6IHBhdGgucmVzb2x2ZSxcbiAgICBleGlzdHM6IChmaWxlKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gZnMuc3RhdFN5bmMoZmlsZSkuaXNGaWxlKCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuY29uc3QgeTE4biA9IChvcHRzKSA9PiB7XG4gICAgcmV0dXJuIHkxOG4kMShvcHRzLCBub2RlUGxhdGZvcm1TaGltKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0geTE4bjtcbiIsICIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xudmFyIGZzID0gcmVxdWlyZSgnZnMnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xuXG5mdW5jdGlvbiBjYW1lbENhc2Uoc3RyKSB7XG4gICAgY29uc3QgaXNDYW1lbENhc2UgPSBzdHIgIT09IHN0ci50b0xvd2VyQ2FzZSgpICYmIHN0ciAhPT0gc3RyLnRvVXBwZXJDYXNlKCk7XG4gICAgaWYgKCFpc0NhbWVsQ2FzZSkge1xuICAgICAgICBzdHIgPSBzdHIudG9Mb3dlckNhc2UoKTtcbiAgICB9XG4gICAgaWYgKHN0ci5pbmRleE9mKCctJykgPT09IC0xICYmIHN0ci5pbmRleE9mKCdfJykgPT09IC0xKSB7XG4gICAgICAgIHJldHVybiBzdHI7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBsZXQgY2FtZWxjYXNlID0gJyc7XG4gICAgICAgIGxldCBuZXh0Q2hyVXBwZXIgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgbGVhZGluZ0h5cGhlbnMgPSBzdHIubWF0Y2goL14tKy8pO1xuICAgICAgICBmb3IgKGxldCBpID0gbGVhZGluZ0h5cGhlbnMgPyBsZWFkaW5nSHlwaGVuc1swXS5sZW5ndGggOiAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgY2hyID0gc3RyLmNoYXJBdChpKTtcbiAgICAgICAgICAgIGlmIChuZXh0Q2hyVXBwZXIpIHtcbiAgICAgICAgICAgICAgICBuZXh0Q2hyVXBwZXIgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBjaHIgPSBjaHIudG9VcHBlckNhc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpICE9PSAwICYmIChjaHIgPT09ICctJyB8fCBjaHIgPT09ICdfJykpIHtcbiAgICAgICAgICAgICAgICBuZXh0Q2hyVXBwZXIgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hyICE9PSAnLScgJiYgY2hyICE9PSAnXycpIHtcbiAgICAgICAgICAgICAgICBjYW1lbGNhc2UgKz0gY2hyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjYW1lbGNhc2U7XG4gICAgfVxufVxuZnVuY3Rpb24gZGVjYW1lbGl6ZShzdHIsIGpvaW5TdHJpbmcpIHtcbiAgICBjb25zdCBsb3dlcmNhc2UgPSBzdHIudG9Mb3dlckNhc2UoKTtcbiAgICBqb2luU3RyaW5nID0gam9pblN0cmluZyB8fCAnLSc7XG4gICAgbGV0IG5vdENhbWVsY2FzZSA9ICcnO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGNockxvd2VyID0gbG93ZXJjYXNlLmNoYXJBdChpKTtcbiAgICAgICAgY29uc3QgY2hyU3RyaW5nID0gc3RyLmNoYXJBdChpKTtcbiAgICAgICAgaWYgKGNockxvd2VyICE9PSBjaHJTdHJpbmcgJiYgaSA+IDApIHtcbiAgICAgICAgICAgIG5vdENhbWVsY2FzZSArPSBgJHtqb2luU3RyaW5nfSR7bG93ZXJjYXNlLmNoYXJBdChpKX1gO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgbm90Q2FtZWxjYXNlICs9IGNoclN0cmluZztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbm90Q2FtZWxjYXNlO1xufVxuZnVuY3Rpb24gbG9va3NMaWtlTnVtYmVyKHgpIHtcbiAgICBpZiAoeCA9PT0gbnVsbCB8fCB4ID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBpZiAodHlwZW9mIHggPT09ICdudW1iZXInKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoL14weFswLTlhLWZdKyQvaS50ZXN0KHgpKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoL14wW14uXS8udGVzdCh4KSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiAvXlstXT8oPzpcXGQrKD86XFwuXFxkKik/fFxcLlxcZCspKGVbLStdP1xcZCspPyQvLnRlc3QoeCk7XG59XG5cbmZ1bmN0aW9uIHRva2VuaXplQXJnU3RyaW5nKGFyZ1N0cmluZykge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGFyZ1N0cmluZykpIHtcbiAgICAgICAgcmV0dXJuIGFyZ1N0cmluZy5tYXAoZSA9PiB0eXBlb2YgZSAhPT0gJ3N0cmluZycgPyBlICsgJycgOiBlKTtcbiAgICB9XG4gICAgYXJnU3RyaW5nID0gYXJnU3RyaW5nLnRyaW0oKTtcbiAgICBsZXQgaSA9IDA7XG4gICAgbGV0IHByZXZDID0gbnVsbDtcbiAgICBsZXQgYyA9IG51bGw7XG4gICAgbGV0IG9wZW5pbmcgPSBudWxsO1xuICAgIGNvbnN0IGFyZ3MgPSBbXTtcbiAgICBmb3IgKGxldCBpaSA9IDA7IGlpIDwgYXJnU3RyaW5nLmxlbmd0aDsgaWkrKykge1xuICAgICAgICBwcmV2QyA9IGM7XG4gICAgICAgIGMgPSBhcmdTdHJpbmcuY2hhckF0KGlpKTtcbiAgICAgICAgaWYgKGMgPT09ICcgJyAmJiAhb3BlbmluZykge1xuICAgICAgICAgICAgaWYgKCEocHJldkMgPT09ICcgJykpIHtcbiAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYyA9PT0gb3BlbmluZykge1xuICAgICAgICAgICAgb3BlbmluZyA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoKGMgPT09IFwiJ1wiIHx8IGMgPT09ICdcIicpICYmICFvcGVuaW5nKSB7XG4gICAgICAgICAgICBvcGVuaW5nID0gYztcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWFyZ3NbaV0pXG4gICAgICAgICAgICBhcmdzW2ldID0gJyc7XG4gICAgICAgIGFyZ3NbaV0gKz0gYztcbiAgICB9XG4gICAgcmV0dXJuIGFyZ3M7XG59XG5cbnZhciBEZWZhdWx0VmFsdWVzRm9yVHlwZUtleTtcbihmdW5jdGlvbiAoRGVmYXVsdFZhbHVlc0ZvclR5cGVLZXkpIHtcbiAgICBEZWZhdWx0VmFsdWVzRm9yVHlwZUtleVtcIkJPT0xFQU5cIl0gPSBcImJvb2xlYW5cIjtcbiAgICBEZWZhdWx0VmFsdWVzRm9yVHlwZUtleVtcIlNUUklOR1wiXSA9IFwic3RyaW5nXCI7XG4gICAgRGVmYXVsdFZhbHVlc0ZvclR5cGVLZXlbXCJOVU1CRVJcIl0gPSBcIm51bWJlclwiO1xuICAgIERlZmF1bHRWYWx1ZXNGb3JUeXBlS2V5W1wiQVJSQVlcIl0gPSBcImFycmF5XCI7XG59KShEZWZhdWx0VmFsdWVzRm9yVHlwZUtleSB8fCAoRGVmYXVsdFZhbHVlc0ZvclR5cGVLZXkgPSB7fSkpO1xuXG5sZXQgbWl4aW47XG5jbGFzcyBZYXJnc1BhcnNlciB7XG4gICAgY29uc3RydWN0b3IoX21peGluKSB7XG4gICAgICAgIG1peGluID0gX21peGluO1xuICAgIH1cbiAgICBwYXJzZShhcmdzSW5wdXQsIG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3Qgb3B0cyA9IE9iamVjdC5hc3NpZ24oe1xuICAgICAgICAgICAgYWxpYXM6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGFycmF5OiB1bmRlZmluZWQsXG4gICAgICAgICAgICBib29sZWFuOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBjb25maWc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGNvbmZpZ09iamVjdHM6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGNvbmZpZ3VyYXRpb246IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGNvZXJjZTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgY291bnQ6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGRlZmF1bHQ6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGVudlByZWZpeDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgbmFyZzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgbm9ybWFsaXplOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBzdHJpbmc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIG51bWJlcjogdW5kZWZpbmVkLFxuICAgICAgICAgICAgX186IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGtleTogdW5kZWZpbmVkXG4gICAgICAgIH0sIG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBhcmdzID0gdG9rZW5pemVBcmdTdHJpbmcoYXJnc0lucHV0KTtcbiAgICAgICAgY29uc3QgYWxpYXNlcyA9IGNvbWJpbmVBbGlhc2VzKE9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShudWxsKSwgb3B0cy5hbGlhcykpO1xuICAgICAgICBjb25zdCBjb25maWd1cmF0aW9uID0gT2JqZWN0LmFzc2lnbih7XG4gICAgICAgICAgICAnYm9vbGVhbi1uZWdhdGlvbic6IHRydWUsXG4gICAgICAgICAgICAnY2FtZWwtY2FzZS1leHBhbnNpb24nOiB0cnVlLFxuICAgICAgICAgICAgJ2NvbWJpbmUtYXJyYXlzJzogZmFsc2UsXG4gICAgICAgICAgICAnZG90LW5vdGF0aW9uJzogdHJ1ZSxcbiAgICAgICAgICAgICdkdXBsaWNhdGUtYXJndW1lbnRzLWFycmF5JzogdHJ1ZSxcbiAgICAgICAgICAgICdmbGF0dGVuLWR1cGxpY2F0ZS1hcnJheXMnOiB0cnVlLFxuICAgICAgICAgICAgJ2dyZWVkeS1hcnJheXMnOiB0cnVlLFxuICAgICAgICAgICAgJ2hhbHQtYXQtbm9uLW9wdGlvbic6IGZhbHNlLFxuICAgICAgICAgICAgJ25hcmdzLWVhdHMtb3B0aW9ucyc6IGZhbHNlLFxuICAgICAgICAgICAgJ25lZ2F0aW9uLXByZWZpeCc6ICduby0nLFxuICAgICAgICAgICAgJ3BhcnNlLW51bWJlcnMnOiB0cnVlLFxuICAgICAgICAgICAgJ3BhcnNlLXBvc2l0aW9uYWwtbnVtYmVycyc6IHRydWUsXG4gICAgICAgICAgICAncG9wdWxhdGUtLSc6IGZhbHNlLFxuICAgICAgICAgICAgJ3NldC1wbGFjZWhvbGRlci1rZXknOiBmYWxzZSxcbiAgICAgICAgICAgICdzaG9ydC1vcHRpb24tZ3JvdXBzJzogdHJ1ZSxcbiAgICAgICAgICAgICdzdHJpcC1hbGlhc2VkJzogZmFsc2UsXG4gICAgICAgICAgICAnc3RyaXAtZGFzaGVkJzogZmFsc2UsXG4gICAgICAgICAgICAndW5rbm93bi1vcHRpb25zLWFzLWFyZ3MnOiBmYWxzZVxuICAgICAgICB9LCBvcHRzLmNvbmZpZ3VyYXRpb24pO1xuICAgICAgICBjb25zdCBkZWZhdWx0cyA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShudWxsKSwgb3B0cy5kZWZhdWx0KTtcbiAgICAgICAgY29uc3QgY29uZmlnT2JqZWN0cyA9IG9wdHMuY29uZmlnT2JqZWN0cyB8fCBbXTtcbiAgICAgICAgY29uc3QgZW52UHJlZml4ID0gb3B0cy5lbnZQcmVmaXg7XG4gICAgICAgIGNvbnN0IG5vdEZsYWdzT3B0aW9uID0gY29uZmlndXJhdGlvblsncG9wdWxhdGUtLSddO1xuICAgICAgICBjb25zdCBub3RGbGFnc0FyZ3YgPSBub3RGbGFnc09wdGlvbiA/ICctLScgOiAnXyc7XG4gICAgICAgIGNvbnN0IG5ld0FsaWFzZXMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICBjb25zdCBkZWZhdWx0ZWQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICBjb25zdCBfXyA9IG9wdHMuX18gfHwgbWl4aW4uZm9ybWF0O1xuICAgICAgICBjb25zdCBmbGFncyA9IHtcbiAgICAgICAgICAgIGFsaWFzZXM6IE9iamVjdC5jcmVhdGUobnVsbCksXG4gICAgICAgICAgICBhcnJheXM6IE9iamVjdC5jcmVhdGUobnVsbCksXG4gICAgICAgICAgICBib29sczogT2JqZWN0LmNyZWF0ZShudWxsKSxcbiAgICAgICAgICAgIHN0cmluZ3M6IE9iamVjdC5jcmVhdGUobnVsbCksXG4gICAgICAgICAgICBudW1iZXJzOiBPYmplY3QuY3JlYXRlKG51bGwpLFxuICAgICAgICAgICAgY291bnRzOiBPYmplY3QuY3JlYXRlKG51bGwpLFxuICAgICAgICAgICAgbm9ybWFsaXplOiBPYmplY3QuY3JlYXRlKG51bGwpLFxuICAgICAgICAgICAgY29uZmlnczogT2JqZWN0LmNyZWF0ZShudWxsKSxcbiAgICAgICAgICAgIG5hcmdzOiBPYmplY3QuY3JlYXRlKG51bGwpLFxuICAgICAgICAgICAgY29lcmNpb25zOiBPYmplY3QuY3JlYXRlKG51bGwpLFxuICAgICAgICAgICAga2V5czogW11cbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgbmVnYXRpdmUgPSAvXi0oWzAtOV0rKFxcLlswLTldKyk/fFxcLlswLTldKykkLztcbiAgICAgICAgY29uc3QgbmVnYXRlZEJvb2xlYW4gPSBuZXcgUmVnRXhwKCdeLS0nICsgY29uZmlndXJhdGlvblsnbmVnYXRpb24tcHJlZml4J10gKyAnKC4rKScpO1xuICAgICAgICBbXS5jb25jYXQob3B0cy5hcnJheSB8fCBbXSkuZmlsdGVyKEJvb2xlYW4pLmZvckVhY2goZnVuY3Rpb24gKG9wdCkge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gdHlwZW9mIG9wdCA9PT0gJ29iamVjdCcgPyBvcHQua2V5IDogb3B0O1xuICAgICAgICAgICAgY29uc3QgYXNzaWdubWVudCA9IE9iamVjdC5rZXlzKG9wdCkubWFwKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhcnJheUZsYWdLZXlzID0ge1xuICAgICAgICAgICAgICAgICAgICBib29sZWFuOiAnYm9vbHMnLFxuICAgICAgICAgICAgICAgICAgICBzdHJpbmc6ICdzdHJpbmdzJyxcbiAgICAgICAgICAgICAgICAgICAgbnVtYmVyOiAnbnVtYmVycydcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHJldHVybiBhcnJheUZsYWdLZXlzW2tleV07XG4gICAgICAgICAgICB9KS5maWx0ZXIoQm9vbGVhbikucG9wKCk7XG4gICAgICAgICAgICBpZiAoYXNzaWdubWVudCkge1xuICAgICAgICAgICAgICAgIGZsYWdzW2Fzc2lnbm1lbnRdW2tleV0gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmxhZ3MuYXJyYXlzW2tleV0gPSB0cnVlO1xuICAgICAgICAgICAgZmxhZ3Mua2V5cy5wdXNoKGtleSk7XG4gICAgICAgIH0pO1xuICAgICAgICBbXS5jb25jYXQob3B0cy5ib29sZWFuIHx8IFtdKS5maWx0ZXIoQm9vbGVhbikuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICBmbGFncy5ib29sc1trZXldID0gdHJ1ZTtcbiAgICAgICAgICAgIGZsYWdzLmtleXMucHVzaChrZXkpO1xuICAgICAgICB9KTtcbiAgICAgICAgW10uY29uY2F0KG9wdHMuc3RyaW5nIHx8IFtdKS5maWx0ZXIoQm9vbGVhbikuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICBmbGFncy5zdHJpbmdzW2tleV0gPSB0cnVlO1xuICAgICAgICAgICAgZmxhZ3Mua2V5cy5wdXNoKGtleSk7XG4gICAgICAgIH0pO1xuICAgICAgICBbXS5jb25jYXQob3B0cy5udW1iZXIgfHwgW10pLmZpbHRlcihCb29sZWFuKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIGZsYWdzLm51bWJlcnNba2V5XSA9IHRydWU7XG4gICAgICAgICAgICBmbGFncy5rZXlzLnB1c2goa2V5KTtcbiAgICAgICAgfSk7XG4gICAgICAgIFtdLmNvbmNhdChvcHRzLmNvdW50IHx8IFtdKS5maWx0ZXIoQm9vbGVhbikuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICBmbGFncy5jb3VudHNba2V5XSA9IHRydWU7XG4gICAgICAgICAgICBmbGFncy5rZXlzLnB1c2goa2V5KTtcbiAgICAgICAgfSk7XG4gICAgICAgIFtdLmNvbmNhdChvcHRzLm5vcm1hbGl6ZSB8fCBbXSkuZmlsdGVyKEJvb2xlYW4pLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgZmxhZ3Mubm9ybWFsaXplW2tleV0gPSB0cnVlO1xuICAgICAgICAgICAgZmxhZ3Mua2V5cy5wdXNoKGtleSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAodHlwZW9mIG9wdHMubmFyZyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKG9wdHMubmFyZykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3MubmFyZ3Nba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBmbGFncy5rZXlzLnB1c2goa2V5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIG9wdHMuY29lcmNlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMob3B0cy5jb2VyY2UpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3MuY29lcmNpb25zW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3Mua2V5cy5wdXNoKGtleSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBvcHRzLmNvbmZpZyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9wdHMuY29uZmlnKSB8fCB0eXBlb2Ygb3B0cy5jb25maWcgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgW10uY29uY2F0KG9wdHMuY29uZmlnKS5maWx0ZXIoQm9vbGVhbikuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIGZsYWdzLmNvbmZpZ3Nba2V5XSA9IHRydWU7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlb2Ygb3B0cy5jb25maWcgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMob3B0cy5jb25maWcpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicgfHwgdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmbGFncy5jb25maWdzW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGV4dGVuZEFsaWFzZXMob3B0cy5rZXksIGFsaWFzZXMsIG9wdHMuZGVmYXVsdCwgZmxhZ3MuYXJyYXlzKTtcbiAgICAgICAgT2JqZWN0LmtleXMoZGVmYXVsdHMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgKGZsYWdzLmFsaWFzZXNba2V5XSB8fCBbXSkuZm9yRWFjaChmdW5jdGlvbiAoYWxpYXMpIHtcbiAgICAgICAgICAgICAgICBkZWZhdWx0c1thbGlhc10gPSBkZWZhdWx0c1trZXldO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgZXJyb3IgPSBudWxsO1xuICAgICAgICBjaGVja0NvbmZpZ3VyYXRpb24oKTtcbiAgICAgICAgbGV0IG5vdEZsYWdzID0gW107XG4gICAgICAgIGNvbnN0IGFyZ3YgPSBPYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUobnVsbCksIHsgXzogW10gfSk7XG4gICAgICAgIGNvbnN0IGFyZ3ZSZXR1cm4gPSB7fTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBhcmcgPSBhcmdzW2ldO1xuICAgICAgICAgICAgY29uc3QgdHJ1bmNhdGVkQXJnID0gYXJnLnJlcGxhY2UoL14tezMsfS8sICctLS0nKTtcbiAgICAgICAgICAgIGxldCBicm9rZW47XG4gICAgICAgICAgICBsZXQga2V5O1xuICAgICAgICAgICAgbGV0IGxldHRlcnM7XG4gICAgICAgICAgICBsZXQgbTtcbiAgICAgICAgICAgIGxldCBuZXh0O1xuICAgICAgICAgICAgbGV0IHZhbHVlO1xuICAgICAgICAgICAgaWYgKGFyZyAhPT0gJy0tJyAmJiBpc1Vua25vd25PcHRpb25Bc0FyZyhhcmcpKSB7XG4gICAgICAgICAgICAgICAgcHVzaFBvc2l0aW9uYWwoYXJnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRydW5jYXRlZEFyZy5tYXRjaCgvLS0tKyg9fCQpLykpIHtcbiAgICAgICAgICAgICAgICBwdXNoUG9zaXRpb25hbChhcmcpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoYXJnLm1hdGNoKC9eLS0uKz0vKSB8fCAoIWNvbmZpZ3VyYXRpb25bJ3Nob3J0LW9wdGlvbi1ncm91cHMnXSAmJiBhcmcubWF0Y2goL14tLis9LykpKSB7XG4gICAgICAgICAgICAgICAgbSA9IGFyZy5tYXRjaCgvXi0tPyhbXj1dKyk9KFtcXHNcXFNdKikkLyk7XG4gICAgICAgICAgICAgICAgaWYgKG0gIT09IG51bGwgJiYgQXJyYXkuaXNBcnJheShtKSAmJiBtLmxlbmd0aCA+PSAzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjaGVja0FsbEFsaWFzZXMobVsxXSwgZmxhZ3MuYXJyYXlzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGVhdEFycmF5KGksIG1bMV0sIGFyZ3MsIG1bMl0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrQWxsQWxpYXNlcyhtWzFdLCBmbGFncy5uYXJncykgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpID0gZWF0TmFyZ3MoaSwgbVsxXSwgYXJncywgbVsyXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRBcmcobVsxXSwgbVsyXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChhcmcubWF0Y2gobmVnYXRlZEJvb2xlYW4pICYmIGNvbmZpZ3VyYXRpb25bJ2Jvb2xlYW4tbmVnYXRpb24nXSkge1xuICAgICAgICAgICAgICAgIG0gPSBhcmcubWF0Y2gobmVnYXRlZEJvb2xlYW4pO1xuICAgICAgICAgICAgICAgIGlmIChtICE9PSBudWxsICYmIEFycmF5LmlzQXJyYXkobSkgJiYgbS5sZW5ndGggPj0gMikge1xuICAgICAgICAgICAgICAgICAgICBrZXkgPSBtWzFdO1xuICAgICAgICAgICAgICAgICAgICBzZXRBcmcoa2V5LCBjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5hcnJheXMpID8gW2ZhbHNlXSA6IGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChhcmcubWF0Y2goL14tLS4rLykgfHwgKCFjb25maWd1cmF0aW9uWydzaG9ydC1vcHRpb24tZ3JvdXBzJ10gJiYgYXJnLm1hdGNoKC9eLVteLV0rLykpKSB7XG4gICAgICAgICAgICAgICAgbSA9IGFyZy5tYXRjaCgvXi0tPyguKykvKTtcbiAgICAgICAgICAgICAgICBpZiAobSAhPT0gbnVsbCAmJiBBcnJheS5pc0FycmF5KG0pICYmIG0ubGVuZ3RoID49IDIpIHtcbiAgICAgICAgICAgICAgICAgICAga2V5ID0gbVsxXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmFycmF5cykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBlYXRBcnJheShpLCBrZXksIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLm5hcmdzKSAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBlYXROYXJncyhpLCBrZXksIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCA9IGFyZ3NbaSArIDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5leHQgIT09IHVuZGVmaW5lZCAmJiAoIW5leHQubWF0Y2goL14tLykgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0Lm1hdGNoKG5lZ2F0aXZlKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuYm9vbHMpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIWNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmNvdW50cykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRBcmcoa2V5LCBuZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgvXih0cnVlfGZhbHNlKSQvLnRlc3QobmV4dCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRBcmcoa2V5LCBuZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRBcmcoa2V5LCBkZWZhdWx0VmFsdWUoa2V5KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChhcmcubWF0Y2goL14tLlxcLi4rPS8pKSB7XG4gICAgICAgICAgICAgICAgbSA9IGFyZy5tYXRjaCgvXi0oW149XSspPShbXFxzXFxTXSopJC8pO1xuICAgICAgICAgICAgICAgIGlmIChtICE9PSBudWxsICYmIEFycmF5LmlzQXJyYXkobSkgJiYgbS5sZW5ndGggPj0gMykge1xuICAgICAgICAgICAgICAgICAgICBzZXRBcmcobVsxXSwgbVsyXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoYXJnLm1hdGNoKC9eLS5cXC4uKy8pICYmICFhcmcubWF0Y2gobmVnYXRpdmUpKSB7XG4gICAgICAgICAgICAgICAgbmV4dCA9IGFyZ3NbaSArIDFdO1xuICAgICAgICAgICAgICAgIG0gPSBhcmcubWF0Y2goL14tKC5cXC4uKykvKTtcbiAgICAgICAgICAgICAgICBpZiAobSAhPT0gbnVsbCAmJiBBcnJheS5pc0FycmF5KG0pICYmIG0ubGVuZ3RoID49IDIpIHtcbiAgICAgICAgICAgICAgICAgICAga2V5ID0gbVsxXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5leHQgIT09IHVuZGVmaW5lZCAmJiAhbmV4dC5tYXRjaCgvXi0vKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgIWNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmJvb2xzKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgIWNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmNvdW50cykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEFyZyhrZXksIG5leHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0QXJnKGtleSwgZGVmYXVsdFZhbHVlKGtleSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoYXJnLm1hdGNoKC9eLVteLV0rLykgJiYgIWFyZy5tYXRjaChuZWdhdGl2ZSkpIHtcbiAgICAgICAgICAgICAgICBsZXR0ZXJzID0gYXJnLnNsaWNlKDEsIC0xKS5zcGxpdCgnJyk7XG4gICAgICAgICAgICAgICAgYnJva2VuID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBsZXR0ZXJzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgIG5leHQgPSBhcmcuc2xpY2UoaiArIDIpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobGV0dGVyc1tqICsgMV0gJiYgbGV0dGVyc1tqICsgMV0gPT09ICc9Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBhcmcuc2xpY2UoaiArIDMpO1xuICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0gbGV0dGVyc1tqXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5hcnJheXMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGVhdEFycmF5KGksIGtleSwgYXJncywgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MubmFyZ3MpICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBlYXROYXJncyhpLCBrZXksIGFyZ3MsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEFyZyhrZXksIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyb2tlbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCA9PT0gJy0nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRBcmcobGV0dGVyc1tqXSwgbmV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoL1tBLVphLXpdLy50ZXN0KGxldHRlcnNbal0pICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAvXi0/XFxkKyhcXC5cXGQqKT8oZS0/XFxkKyk/JC8udGVzdChuZXh0KSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tBbGxBbGlhc2VzKG5leHQsIGZsYWdzLmJvb2xzKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEFyZyhsZXR0ZXJzW2pdLCBuZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyb2tlbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAobGV0dGVyc1tqICsgMV0gJiYgbGV0dGVyc1tqICsgMV0ubWF0Y2goL1xcVy8pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRBcmcobGV0dGVyc1tqXSwgbmV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicm9rZW4gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRBcmcobGV0dGVyc1tqXSwgZGVmYXVsdFZhbHVlKGxldHRlcnNbal0pKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBrZXkgPSBhcmcuc2xpY2UoLTEpWzBdO1xuICAgICAgICAgICAgICAgIGlmICghYnJva2VuICYmIGtleSAhPT0gJy0nKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5hcnJheXMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpID0gZWF0QXJyYXkoaSwga2V5LCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5uYXJncykgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpID0gZWF0TmFyZ3MoaSwga2V5LCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgPSBhcmdzW2kgKyAxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0ICE9PSB1bmRlZmluZWQgJiYgKCEvXigtfC0tKVteLV0vLnRlc3QobmV4dCkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0Lm1hdGNoKG5lZ2F0aXZlKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuYm9vbHMpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIWNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmNvdW50cykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRBcmcoa2V5LCBuZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgvXih0cnVlfGZhbHNlKSQvLnRlc3QobmV4dCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRBcmcoa2V5LCBuZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRBcmcoa2V5LCBkZWZhdWx0VmFsdWUoa2V5KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChhcmcubWF0Y2goL14tWzAtOV0kLykgJiZcbiAgICAgICAgICAgICAgICBhcmcubWF0Y2gobmVnYXRpdmUpICYmXG4gICAgICAgICAgICAgICAgY2hlY2tBbGxBbGlhc2VzKGFyZy5zbGljZSgxKSwgZmxhZ3MuYm9vbHMpKSB7XG4gICAgICAgICAgICAgICAga2V5ID0gYXJnLnNsaWNlKDEpO1xuICAgICAgICAgICAgICAgIHNldEFyZyhrZXksIGRlZmF1bHRWYWx1ZShrZXkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGFyZyA9PT0gJy0tJykge1xuICAgICAgICAgICAgICAgIG5vdEZsYWdzID0gYXJncy5zbGljZShpICsgMSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjb25maWd1cmF0aW9uWydoYWx0LWF0LW5vbi1vcHRpb24nXSkge1xuICAgICAgICAgICAgICAgIG5vdEZsYWdzID0gYXJncy5zbGljZShpKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHB1c2hQb3NpdGlvbmFsKGFyZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYXBwbHlFbnZWYXJzKGFyZ3YsIHRydWUpO1xuICAgICAgICBhcHBseUVudlZhcnMoYXJndiwgZmFsc2UpO1xuICAgICAgICBzZXRDb25maWcoYXJndik7XG4gICAgICAgIHNldENvbmZpZ09iamVjdHMoKTtcbiAgICAgICAgYXBwbHlEZWZhdWx0c0FuZEFsaWFzZXMoYXJndiwgZmxhZ3MuYWxpYXNlcywgZGVmYXVsdHMsIHRydWUpO1xuICAgICAgICBhcHBseUNvZXJjaW9ucyhhcmd2KTtcbiAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb25bJ3NldC1wbGFjZWhvbGRlci1rZXknXSlcbiAgICAgICAgICAgIHNldFBsYWNlaG9sZGVyS2V5cyhhcmd2KTtcbiAgICAgICAgT2JqZWN0LmtleXMoZmxhZ3MuY291bnRzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIGlmICghaGFzS2V5KGFyZ3YsIGtleS5zcGxpdCgnLicpKSlcbiAgICAgICAgICAgICAgICBzZXRBcmcoa2V5LCAwKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChub3RGbGFnc09wdGlvbiAmJiBub3RGbGFncy5sZW5ndGgpXG4gICAgICAgICAgICBhcmd2W25vdEZsYWdzQXJndl0gPSBbXTtcbiAgICAgICAgbm90RmxhZ3MuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICBhcmd2W25vdEZsYWdzQXJndl0ucHVzaChrZXkpO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb25bJ2NhbWVsLWNhc2UtZXhwYW5zaW9uJ10gJiYgY29uZmlndXJhdGlvblsnc3RyaXAtZGFzaGVkJ10pIHtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGFyZ3YpLmZpbHRlcihrZXkgPT4ga2V5ICE9PSAnLS0nICYmIGtleS5pbmNsdWRlcygnLScpKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIGFyZ3Zba2V5XTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb25maWd1cmF0aW9uWydzdHJpcC1hbGlhc2VkJ10pIHtcbiAgICAgICAgICAgIFtdLmNvbmNhdCguLi5PYmplY3Qua2V5cyhhbGlhc2VzKS5tYXAoayA9PiBhbGlhc2VzW2tdKSkuZm9yRWFjaChhbGlhcyA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb25bJ2NhbWVsLWNhc2UtZXhwYW5zaW9uJ10gJiYgYWxpYXMuaW5jbHVkZXMoJy0nKSkge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgYXJndlthbGlhcy5zcGxpdCgnLicpLm1hcChwcm9wID0+IGNhbWVsQ2FzZShwcm9wKSkuam9pbignLicpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGVsZXRlIGFyZ3ZbYWxpYXNdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gcHVzaFBvc2l0aW9uYWwoYXJnKSB7XG4gICAgICAgICAgICBjb25zdCBtYXliZUNvZXJjZWROdW1iZXIgPSBtYXliZUNvZXJjZU51bWJlcignXycsIGFyZyk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG1heWJlQ29lcmNlZE51bWJlciA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIG1heWJlQ29lcmNlZE51bWJlciA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICBhcmd2Ll8ucHVzaChtYXliZUNvZXJjZWROdW1iZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGVhdE5hcmdzKGksIGtleSwgYXJncywgYXJnQWZ0ZXJFcXVhbFNpZ24pIHtcbiAgICAgICAgICAgIGxldCBpaTtcbiAgICAgICAgICAgIGxldCB0b0VhdCA9IGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLm5hcmdzKTtcbiAgICAgICAgICAgIHRvRWF0ID0gdHlwZW9mIHRvRWF0ICE9PSAnbnVtYmVyJyB8fCBpc05hTih0b0VhdCkgPyAxIDogdG9FYXQ7XG4gICAgICAgICAgICBpZiAodG9FYXQgPT09IDApIHtcbiAgICAgICAgICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGFyZ0FmdGVyRXF1YWxTaWduKSkge1xuICAgICAgICAgICAgICAgICAgICBlcnJvciA9IEVycm9yKF9fKCdBcmd1bWVudCB1bmV4cGVjdGVkIGZvcjogJXMnLCBrZXkpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc2V0QXJnKGtleSwgZGVmYXVsdFZhbHVlKGtleSkpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IGF2YWlsYWJsZSA9IGlzVW5kZWZpbmVkKGFyZ0FmdGVyRXF1YWxTaWduKSA/IDAgOiAxO1xuICAgICAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb25bJ25hcmdzLWVhdHMtb3B0aW9ucyddKSB7XG4gICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIC0gKGkgKyAxKSArIGF2YWlsYWJsZSA8IHRvRWF0KSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yID0gRXJyb3IoX18oJ05vdCBlbm91Z2ggYXJndW1lbnRzIGZvbGxvd2luZzogJXMnLCBrZXkpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXZhaWxhYmxlID0gdG9FYXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBmb3IgKGlpID0gaSArIDE7IGlpIDwgYXJncy5sZW5ndGg7IGlpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFhcmdzW2lpXS5tYXRjaCgvXi1bXjAtOV0vKSB8fCBhcmdzW2lpXS5tYXRjaChuZWdhdGl2ZSkgfHwgaXNVbmtub3duT3B0aW9uQXNBcmcoYXJnc1tpaV0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlKys7XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoYXZhaWxhYmxlIDwgdG9FYXQpXG4gICAgICAgICAgICAgICAgICAgIGVycm9yID0gRXJyb3IoX18oJ05vdCBlbm91Z2ggYXJndW1lbnRzIGZvbGxvd2luZzogJXMnLCBrZXkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBjb25zdW1lZCA9IE1hdGgubWluKGF2YWlsYWJsZSwgdG9FYXQpO1xuICAgICAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChhcmdBZnRlckVxdWFsU2lnbikgJiYgY29uc3VtZWQgPiAwKSB7XG4gICAgICAgICAgICAgICAgc2V0QXJnKGtleSwgYXJnQWZ0ZXJFcXVhbFNpZ24pO1xuICAgICAgICAgICAgICAgIGNvbnN1bWVkLS07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGlpID0gaSArIDE7IGlpIDwgKGNvbnN1bWVkICsgaSArIDEpOyBpaSsrKSB7XG4gICAgICAgICAgICAgICAgc2V0QXJnKGtleSwgYXJnc1tpaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIChpICsgY29uc3VtZWQpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGVhdEFycmF5KGksIGtleSwgYXJncywgYXJnQWZ0ZXJFcXVhbFNpZ24pIHtcbiAgICAgICAgICAgIGxldCBhcmdzVG9TZXQgPSBbXTtcbiAgICAgICAgICAgIGxldCBuZXh0ID0gYXJnQWZ0ZXJFcXVhbFNpZ24gfHwgYXJnc1tpICsgMV07XG4gICAgICAgICAgICBjb25zdCBuYXJnc0NvdW50ID0gY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MubmFyZ3MpO1xuICAgICAgICAgICAgaWYgKGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmJvb2xzKSAmJiAhKC9eKHRydWV8ZmFsc2UpJC8udGVzdChuZXh0KSkpIHtcbiAgICAgICAgICAgICAgICBhcmdzVG9TZXQucHVzaCh0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGlzVW5kZWZpbmVkKG5leHQpIHx8XG4gICAgICAgICAgICAgICAgKGlzVW5kZWZpbmVkKGFyZ0FmdGVyRXF1YWxTaWduKSAmJiAvXi0vLnRlc3QobmV4dCkgJiYgIW5lZ2F0aXZlLnRlc3QobmV4dCkgJiYgIWlzVW5rbm93bk9wdGlvbkFzQXJnKG5leHQpKSkge1xuICAgICAgICAgICAgICAgIGlmIChkZWZhdWx0c1trZXldICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVmVmFsID0gZGVmYXVsdHNba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgYXJnc1RvU2V0ID0gQXJyYXkuaXNBcnJheShkZWZWYWwpID8gZGVmVmFsIDogW2RlZlZhbF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChhcmdBZnRlckVxdWFsU2lnbikpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJnc1RvU2V0LnB1c2gocHJvY2Vzc1ZhbHVlKGtleSwgYXJnQWZ0ZXJFcXVhbFNpZ24pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaWkgPSBpICsgMTsgaWkgPCBhcmdzLmxlbmd0aDsgaWkrKykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoKCFjb25maWd1cmF0aW9uWydncmVlZHktYXJyYXlzJ10gJiYgYXJnc1RvU2V0Lmxlbmd0aCA+IDApIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAobmFyZ3NDb3VudCAmJiB0eXBlb2YgbmFyZ3NDb3VudCA9PT0gJ251bWJlcicgJiYgYXJnc1RvU2V0Lmxlbmd0aCA+PSBuYXJnc0NvdW50KSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBuZXh0ID0gYXJnc1tpaV07XG4gICAgICAgICAgICAgICAgICAgIGlmICgvXi0vLnRlc3QobmV4dCkgJiYgIW5lZ2F0aXZlLnRlc3QobmV4dCkgJiYgIWlzVW5rbm93bk9wdGlvbkFzQXJnKG5leHQpKVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGkgPSBpaTtcbiAgICAgICAgICAgICAgICAgICAgYXJnc1RvU2V0LnB1c2gocHJvY2Vzc1ZhbHVlKGtleSwgbmV4dCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2YgbmFyZ3NDb3VudCA9PT0gJ251bWJlcicgJiYgKChuYXJnc0NvdW50ICYmIGFyZ3NUb1NldC5sZW5ndGggPCBuYXJnc0NvdW50KSB8fFxuICAgICAgICAgICAgICAgIChpc05hTihuYXJnc0NvdW50KSAmJiBhcmdzVG9TZXQubGVuZ3RoID09PSAwKSkpIHtcbiAgICAgICAgICAgICAgICBlcnJvciA9IEVycm9yKF9fKCdOb3QgZW5vdWdoIGFyZ3VtZW50cyBmb2xsb3dpbmc6ICVzJywga2V5KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZXRBcmcoa2V5LCBhcmdzVG9TZXQpO1xuICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gc2V0QXJnKGtleSwgdmFsKSB7XG4gICAgICAgICAgICBpZiAoLy0vLnRlc3Qoa2V5KSAmJiBjb25maWd1cmF0aW9uWydjYW1lbC1jYXNlLWV4cGFuc2lvbiddKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWxpYXMgPSBrZXkuc3BsaXQoJy4nKS5tYXAoZnVuY3Rpb24gKHByb3ApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbWVsQ2FzZShwcm9wKTtcbiAgICAgICAgICAgICAgICB9KS5qb2luKCcuJyk7XG4gICAgICAgICAgICAgICAgYWRkTmV3QWxpYXMoa2V5LCBhbGlhcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHByb2Nlc3NWYWx1ZShrZXksIHZhbCk7XG4gICAgICAgICAgICBjb25zdCBzcGxpdEtleSA9IGtleS5zcGxpdCgnLicpO1xuICAgICAgICAgICAgc2V0S2V5KGFyZ3YsIHNwbGl0S2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICBpZiAoZmxhZ3MuYWxpYXNlc1trZXldKSB7XG4gICAgICAgICAgICAgICAgZmxhZ3MuYWxpYXNlc1trZXldLmZvckVhY2goZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qga2V5UHJvcGVydGllcyA9IHguc3BsaXQoJy4nKTtcbiAgICAgICAgICAgICAgICAgICAgc2V0S2V5KGFyZ3YsIGtleVByb3BlcnRpZXMsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzcGxpdEtleS5sZW5ndGggPiAxICYmIGNvbmZpZ3VyYXRpb25bJ2RvdC1ub3RhdGlvbiddKSB7XG4gICAgICAgICAgICAgICAgKGZsYWdzLmFsaWFzZXNbc3BsaXRLZXlbMF1dIHx8IFtdKS5mb3JFYWNoKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBrZXlQcm9wZXJ0aWVzID0geC5zcGxpdCgnLicpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhID0gW10uY29uY2F0KHNwbGl0S2V5KTtcbiAgICAgICAgICAgICAgICAgICAgYS5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICBrZXlQcm9wZXJ0aWVzID0ga2V5UHJvcGVydGllcy5jb25jYXQoYSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghKGZsYWdzLmFsaWFzZXNba2V5XSB8fCBbXSkuaW5jbHVkZXMoa2V5UHJvcGVydGllcy5qb2luKCcuJykpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRLZXkoYXJndiwga2V5UHJvcGVydGllcywgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3Mubm9ybWFsaXplKSAmJiAhY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuYXJyYXlzKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGtleXMgPSBba2V5XS5jb25jYXQoZmxhZ3MuYWxpYXNlc1trZXldIHx8IFtdKTtcbiAgICAgICAgICAgICAgICBrZXlzLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoYXJndlJldHVybiwga2V5LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWw7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IG1peGluLm5vcm1hbGl6ZSh2YWx1ZSkgOiB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gYWRkTmV3QWxpYXMoa2V5LCBhbGlhcykge1xuICAgICAgICAgICAgaWYgKCEoZmxhZ3MuYWxpYXNlc1trZXldICYmIGZsYWdzLmFsaWFzZXNba2V5XS5sZW5ndGgpKSB7XG4gICAgICAgICAgICAgICAgZmxhZ3MuYWxpYXNlc1trZXldID0gW2FsaWFzXTtcbiAgICAgICAgICAgICAgICBuZXdBbGlhc2VzW2FsaWFzXSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIShmbGFncy5hbGlhc2VzW2FsaWFzXSAmJiBmbGFncy5hbGlhc2VzW2FsaWFzXS5sZW5ndGgpKSB7XG4gICAgICAgICAgICAgICAgYWRkTmV3QWxpYXMoYWxpYXMsIGtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gcHJvY2Vzc1ZhbHVlKGtleSwgdmFsKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICAgICAgICAodmFsWzBdID09PSBcIidcIiB8fCB2YWxbMF0gPT09ICdcIicpICYmXG4gICAgICAgICAgICAgICAgdmFsW3ZhbC5sZW5ndGggLSAxXSA9PT0gdmFsWzBdKSB7XG4gICAgICAgICAgICAgICAgdmFsID0gdmFsLnN1YnN0cmluZygxLCB2YWwubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuYm9vbHMpIHx8IGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmNvdW50cykpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpXG4gICAgICAgICAgICAgICAgICAgIHZhbCA9IHZhbCA9PT0gJ3RydWUnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IHZhbHVlID0gQXJyYXkuaXNBcnJheSh2YWwpXG4gICAgICAgICAgICAgICAgPyB2YWwubWFwKGZ1bmN0aW9uICh2KSB7IHJldHVybiBtYXliZUNvZXJjZU51bWJlcihrZXksIHYpOyB9KVxuICAgICAgICAgICAgICAgIDogbWF5YmVDb2VyY2VOdW1iZXIoa2V5LCB2YWwpO1xuICAgICAgICAgICAgaWYgKGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmNvdW50cykgJiYgKGlzVW5kZWZpbmVkKHZhbHVlKSB8fCB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJykpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGluY3JlbWVudCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLm5vcm1hbGl6ZSkgJiYgY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuYXJyYXlzKSkge1xuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbCkpXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsLm1hcCgodmFsKSA9PiB7IHJldHVybiBtaXhpbi5ub3JtYWxpemUodmFsKTsgfSk7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IG1peGluLm5vcm1hbGl6ZSh2YWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIG1heWJlQ29lcmNlTnVtYmVyKGtleSwgdmFsdWUpIHtcbiAgICAgICAgICAgIGlmICghY29uZmlndXJhdGlvblsncGFyc2UtcG9zaXRpb25hbC1udW1iZXJzJ10gJiYga2V5ID09PSAnXycpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgaWYgKCFjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5zdHJpbmdzKSAmJiAhY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuYm9vbHMpICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNob3VsZENvZXJjZU51bWJlciA9IGxvb2tzTGlrZU51bWJlcih2YWx1ZSkgJiYgY29uZmlndXJhdGlvblsncGFyc2UtbnVtYmVycyddICYmIChOdW1iZXIuaXNTYWZlSW50ZWdlcihNYXRoLmZsb29yKHBhcnNlRmxvYXQoYCR7dmFsdWV9YCkpKSk7XG4gICAgICAgICAgICAgICAgaWYgKHNob3VsZENvZXJjZU51bWJlciB8fCAoIWlzVW5kZWZpbmVkKHZhbHVlKSAmJiBjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5udW1iZXJzKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBOdW1iZXIodmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBzZXRDb25maWcoYXJndikge1xuICAgICAgICAgICAgY29uc3QgY29uZmlnTG9va3VwID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICAgIGFwcGx5RGVmYXVsdHNBbmRBbGlhc2VzKGNvbmZpZ0xvb2t1cCwgZmxhZ3MuYWxpYXNlcywgZGVmYXVsdHMpO1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoZmxhZ3MuY29uZmlncykuZm9yRWFjaChmdW5jdGlvbiAoY29uZmlnS2V5KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29uZmlnUGF0aCA9IGFyZ3ZbY29uZmlnS2V5XSB8fCBjb25maWdMb29rdXBbY29uZmlnS2V5XTtcbiAgICAgICAgICAgICAgICBpZiAoY29uZmlnUGF0aCkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbmZpZyA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXNvbHZlZENvbmZpZ1BhdGggPSBtaXhpbi5yZXNvbHZlKG1peGluLmN3ZCgpLCBjb25maWdQYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc29sdmVDb25maWcgPSBmbGFncy5jb25maWdzW2NvbmZpZ0tleV07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHJlc29sdmVDb25maWcgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcgPSByZXNvbHZlQ29uZmlnKHJlc29sdmVkQ29uZmlnUGF0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZyA9IGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25maWcgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IGNvbmZpZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZyA9IG1peGluLnJlcXVpcmUocmVzb2x2ZWRDb25maWdQYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHNldENvbmZpZ09iamVjdChjb25maWcpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4Lm5hbWUgPT09ICdQZXJtaXNzaW9uRGVuaWVkJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IGV4O1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoYXJndltjb25maWdLZXldKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gRXJyb3IoX18oJ0ludmFsaWQgSlNPTiBjb25maWcgZmlsZTogJXMnLCBjb25maWdQYXRoKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBzZXRDb25maWdPYmplY3QoY29uZmlnLCBwcmV2KSB7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhjb25maWcpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gY29uZmlnW2tleV07XG4gICAgICAgICAgICAgICAgY29uc3QgZnVsbEtleSA9IHByZXYgPyBwcmV2ICsgJy4nICsga2V5IDoga2V5O1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSAmJiBjb25maWd1cmF0aW9uWydkb3Qtbm90YXRpb24nXSkge1xuICAgICAgICAgICAgICAgICAgICBzZXRDb25maWdPYmplY3QodmFsdWUsIGZ1bGxLZXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXNLZXkoYXJndiwgZnVsbEtleS5zcGxpdCgnLicpKSB8fCAoY2hlY2tBbGxBbGlhc2VzKGZ1bGxLZXksIGZsYWdzLmFycmF5cykgJiYgY29uZmlndXJhdGlvblsnY29tYmluZS1hcnJheXMnXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEFyZyhmdWxsS2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBzZXRDb25maWdPYmplY3RzKCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25maWdPYmplY3RzICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIGNvbmZpZ09iamVjdHMuZm9yRWFjaChmdW5jdGlvbiAoY29uZmlnT2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgIHNldENvbmZpZ09iamVjdChjb25maWdPYmplY3QpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGFwcGx5RW52VmFycyhhcmd2LCBjb25maWdPbmx5KSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGVudlByZWZpeCA9PT0gJ3VuZGVmaW5lZCcpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgY29uc3QgcHJlZml4ID0gdHlwZW9mIGVudlByZWZpeCA9PT0gJ3N0cmluZycgPyBlbnZQcmVmaXggOiAnJztcbiAgICAgICAgICAgIGNvbnN0IGVudiA9IG1peGluLmVudigpO1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoZW52KS5mb3JFYWNoKGZ1bmN0aW9uIChlbnZWYXIpIHtcbiAgICAgICAgICAgICAgICBpZiAocHJlZml4ID09PSAnJyB8fCBlbnZWYXIubGFzdEluZGV4T2YocHJlZml4LCAwKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBrZXlzID0gZW52VmFyLnNwbGl0KCdfXycpLm1hcChmdW5jdGlvbiAoa2V5LCBpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9IGtleS5zdWJzdHJpbmcocHJlZml4Lmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FtZWxDYXNlKGtleSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoKChjb25maWdPbmx5ICYmIGZsYWdzLmNvbmZpZ3Nba2V5cy5qb2luKCcuJyldKSB8fCAhY29uZmlnT25seSkgJiYgIWhhc0tleShhcmd2LCBrZXlzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0QXJnKGtleXMuam9pbignLicpLCBlbnZbZW52VmFyXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBhcHBseUNvZXJjaW9ucyhhcmd2KSB7XG4gICAgICAgICAgICBsZXQgY29lcmNlO1xuICAgICAgICAgICAgY29uc3QgYXBwbGllZCA9IG5ldyBTZXQoKTtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGFyZ3YpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgICAgIGlmICghYXBwbGllZC5oYXMoa2V5KSkge1xuICAgICAgICAgICAgICAgICAgICBjb2VyY2UgPSBjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5jb2VyY2lvbnMpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvZXJjZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IG1heWJlQ29lcmNlTnVtYmVyKGtleSwgY29lcmNlKGFyZ3Zba2V5XSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChbXS5jb25jYXQoZmxhZ3MuYWxpYXNlc1trZXldIHx8IFtdLCBrZXkpKS5mb3JFYWNoKGFsaSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGxpZWQuYWRkKGFsaSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3ZbYWxpXSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gZXJyO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gc2V0UGxhY2Vob2xkZXJLZXlzKGFyZ3YpIHtcbiAgICAgICAgICAgIGZsYWdzLmtleXMuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKH5rZXkuaW5kZXhPZignLicpKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBhcmd2W2tleV0gPT09ICd1bmRlZmluZWQnKVxuICAgICAgICAgICAgICAgICAgICBhcmd2W2tleV0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBhcmd2O1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGFwcGx5RGVmYXVsdHNBbmRBbGlhc2VzKG9iaiwgYWxpYXNlcywgZGVmYXVsdHMsIGNhbkxvZyA9IGZhbHNlKSB7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhkZWZhdWx0cykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICAgICAgaWYgKCFoYXNLZXkob2JqLCBrZXkuc3BsaXQoJy4nKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0S2V5KG9iaiwga2V5LnNwbGl0KCcuJyksIGRlZmF1bHRzW2tleV0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2FuTG9nKVxuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdGVkW2tleV0gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAoYWxpYXNlc1trZXldIHx8IFtdKS5mb3JFYWNoKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzS2V5KG9iaiwgeC5zcGxpdCgnLicpKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRLZXkob2JqLCB4LnNwbGl0KCcuJyksIGRlZmF1bHRzW2tleV0pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBoYXNLZXkob2JqLCBrZXlzKSB7XG4gICAgICAgICAgICBsZXQgbyA9IG9iajtcbiAgICAgICAgICAgIGlmICghY29uZmlndXJhdGlvblsnZG90LW5vdGF0aW9uJ10pXG4gICAgICAgICAgICAgICAga2V5cyA9IFtrZXlzLmpvaW4oJy4nKV07XG4gICAgICAgICAgICBrZXlzLnNsaWNlKDAsIC0xKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgICAgICBvID0gKG9ba2V5XSB8fCB7fSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IGtleXNba2V5cy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgbyAhPT0gJ29iamVjdCcpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHJldHVybiBrZXkgaW4gbztcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBzZXRLZXkob2JqLCBrZXlzLCB2YWx1ZSkge1xuICAgICAgICAgICAgbGV0IG8gPSBvYmo7XG4gICAgICAgICAgICBpZiAoIWNvbmZpZ3VyYXRpb25bJ2RvdC1ub3RhdGlvbiddKVxuICAgICAgICAgICAgICAgIGtleXMgPSBba2V5cy5qb2luKCcuJyldO1xuICAgICAgICAgICAga2V5cy5zbGljZSgwLCAtMSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICAgICAga2V5ID0gc2FuaXRpemVLZXkoa2V5KTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG8gPT09ICdvYmplY3QnICYmIG9ba2V5XSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIG9ba2V5XSA9IHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9ba2V5XSAhPT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheShvW2tleV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9ba2V5XSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9ba2V5XS5wdXNoKHt9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9ba2V5XSA9IFtvW2tleV0sIHt9XTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBvID0gb1trZXldW29ba2V5XS5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG8gPSBvW2tleV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSBzYW5pdGl6ZUtleShrZXlzW2tleXMubGVuZ3RoIC0gMV0pO1xuICAgICAgICAgICAgY29uc3QgaXNUeXBlQXJyYXkgPSBjaGVja0FsbEFsaWFzZXMoa2V5cy5qb2luKCcuJyksIGZsYWdzLmFycmF5cyk7XG4gICAgICAgICAgICBjb25zdCBpc1ZhbHVlQXJyYXkgPSBBcnJheS5pc0FycmF5KHZhbHVlKTtcbiAgICAgICAgICAgIGxldCBkdXBsaWNhdGUgPSBjb25maWd1cmF0aW9uWydkdXBsaWNhdGUtYXJndW1lbnRzLWFycmF5J107XG4gICAgICAgICAgICBpZiAoIWR1cGxpY2F0ZSAmJiBjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5uYXJncykpIHtcbiAgICAgICAgICAgICAgICBkdXBsaWNhdGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGlmICgoIWlzVW5kZWZpbmVkKG9ba2V5XSkgJiYgZmxhZ3MubmFyZ3Nba2V5XSA9PT0gMSkgfHwgKEFycmF5LmlzQXJyYXkob1trZXldKSAmJiBvW2tleV0ubGVuZ3RoID09PSBmbGFncy5uYXJnc1trZXldKSkge1xuICAgICAgICAgICAgICAgICAgICBvW2tleV0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHZhbHVlID09PSBpbmNyZW1lbnQoKSkge1xuICAgICAgICAgICAgICAgIG9ba2V5XSA9IGluY3JlbWVudChvW2tleV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShvW2tleV0pKSB7XG4gICAgICAgICAgICAgICAgaWYgKGR1cGxpY2F0ZSAmJiBpc1R5cGVBcnJheSAmJiBpc1ZhbHVlQXJyYXkpIHtcbiAgICAgICAgICAgICAgICAgICAgb1trZXldID0gY29uZmlndXJhdGlvblsnZmxhdHRlbi1kdXBsaWNhdGUtYXJyYXlzJ10gPyBvW2tleV0uY29uY2F0KHZhbHVlKSA6IChBcnJheS5pc0FycmF5KG9ba2V5XVswXSkgPyBvW2tleV0gOiBbb1trZXldXSkuY29uY2F0KFt2YWx1ZV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICghZHVwbGljYXRlICYmIEJvb2xlYW4oaXNUeXBlQXJyYXkpID09PSBCb29sZWFuKGlzVmFsdWVBcnJheSkpIHtcbiAgICAgICAgICAgICAgICAgICAgb1trZXldID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBvW2tleV0gPSBvW2tleV0uY29uY2F0KFt2YWx1ZV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG9ba2V5XSA9PT0gdW5kZWZpbmVkICYmIGlzVHlwZUFycmF5KSB7XG4gICAgICAgICAgICAgICAgb1trZXldID0gaXNWYWx1ZUFycmF5ID8gdmFsdWUgOiBbdmFsdWVdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZHVwbGljYXRlICYmICEob1trZXldID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgICAgICBjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5jb3VudHMpIHx8XG4gICAgICAgICAgICAgICAgY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuYm9vbHMpKSkge1xuICAgICAgICAgICAgICAgIG9ba2V5XSA9IFtvW2tleV0sIHZhbHVlXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIG9ba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGV4dGVuZEFsaWFzZXMoLi4uYXJncykge1xuICAgICAgICAgICAgYXJncy5mb3JFYWNoKGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhvYmogfHwge30pLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmxhZ3MuYWxpYXNlc1trZXldKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICBmbGFncy5hbGlhc2VzW2tleV0gPSBbXS5jb25jYXQoYWxpYXNlc1trZXldIHx8IFtdKTtcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3MuYWxpYXNlc1trZXldLmNvbmNhdChrZXkpLmZvckVhY2goZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgvLS8udGVzdCh4KSAmJiBjb25maWd1cmF0aW9uWydjYW1lbC1jYXNlLWV4cGFuc2lvbiddKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYyA9IGNhbWVsQ2FzZSh4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyAhPT0ga2V5ICYmIGZsYWdzLmFsaWFzZXNba2V5XS5pbmRleE9mKGMpID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncy5hbGlhc2VzW2tleV0ucHVzaChjKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3QWxpYXNlc1tjXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3MuYWxpYXNlc1trZXldLmNvbmNhdChrZXkpLmZvckVhY2goZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4Lmxlbmd0aCA+IDEgJiYgL1tBLVpdLy50ZXN0KHgpICYmIGNvbmZpZ3VyYXRpb25bJ2NhbWVsLWNhc2UtZXhwYW5zaW9uJ10pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjID0gZGVjYW1lbGl6ZSh4LCAnLScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjICE9PSBrZXkgJiYgZmxhZ3MuYWxpYXNlc1trZXldLmluZGV4T2YoYykgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzLmFsaWFzZXNba2V5XS5wdXNoKGMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdBbGlhc2VzW2NdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBmbGFncy5hbGlhc2VzW2tleV0uZm9yRWFjaChmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MuYWxpYXNlc1t4XSA9IFtrZXldLmNvbmNhdChmbGFncy5hbGlhc2VzW2tleV0uZmlsdGVyKGZ1bmN0aW9uICh5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHggIT09IHk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZykge1xuICAgICAgICAgICAgY29uc3QgdG9DaGVjayA9IFtdLmNvbmNhdChmbGFncy5hbGlhc2VzW2tleV0gfHwgW10sIGtleSk7XG4gICAgICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoZmxhZyk7XG4gICAgICAgICAgICBjb25zdCBzZXRBbGlhcyA9IHRvQ2hlY2suZmluZChrZXkgPT4ga2V5cy5pbmNsdWRlcyhrZXkpKTtcbiAgICAgICAgICAgIHJldHVybiBzZXRBbGlhcyA/IGZsYWdbc2V0QWxpYXNdIDogZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gaGFzQW55RmxhZyhrZXkpIHtcbiAgICAgICAgICAgIGNvbnN0IGZsYWdzS2V5cyA9IE9iamVjdC5rZXlzKGZsYWdzKTtcbiAgICAgICAgICAgIGNvbnN0IHRvQ2hlY2sgPSBbXS5jb25jYXQoZmxhZ3NLZXlzLm1hcChrID0+IGZsYWdzW2tdKSk7XG4gICAgICAgICAgICByZXR1cm4gdG9DaGVjay5zb21lKGZ1bmN0aW9uIChmbGFnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoZmxhZykgPyBmbGFnLmluY2x1ZGVzKGtleSkgOiBmbGFnW2tleV07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBoYXNGbGFnc01hdGNoaW5nKGFyZywgLi4ucGF0dGVybnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHRvQ2hlY2sgPSBbXS5jb25jYXQoLi4ucGF0dGVybnMpO1xuICAgICAgICAgICAgcmV0dXJuIHRvQ2hlY2suc29tZShmdW5jdGlvbiAocGF0dGVybikge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1hdGNoID0gYXJnLm1hdGNoKHBhdHRlcm4pO1xuICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaCAmJiBoYXNBbnlGbGFnKG1hdGNoWzFdKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGhhc0FsbFNob3J0RmxhZ3MoYXJnKSB7XG4gICAgICAgICAgICBpZiAoYXJnLm1hdGNoKG5lZ2F0aXZlKSB8fCAhYXJnLm1hdGNoKC9eLVteLV0rLykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgaGFzQWxsRmxhZ3MgPSB0cnVlO1xuICAgICAgICAgICAgbGV0IG5leHQ7XG4gICAgICAgICAgICBjb25zdCBsZXR0ZXJzID0gYXJnLnNsaWNlKDEpLnNwbGl0KCcnKTtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbGV0dGVycy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIG5leHQgPSBhcmcuc2xpY2UoaiArIDIpO1xuICAgICAgICAgICAgICAgIGlmICghaGFzQW55RmxhZyhsZXR0ZXJzW2pdKSkge1xuICAgICAgICAgICAgICAgICAgICBoYXNBbGxGbGFncyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKChsZXR0ZXJzW2ogKyAxXSAmJiBsZXR0ZXJzW2ogKyAxXSA9PT0gJz0nKSB8fFxuICAgICAgICAgICAgICAgICAgICBuZXh0ID09PSAnLScgfHxcbiAgICAgICAgICAgICAgICAgICAgKC9bQS1aYS16XS8udGVzdChsZXR0ZXJzW2pdKSAmJiAvXi0/XFxkKyhcXC5cXGQqKT8oZS0/XFxkKyk/JC8udGVzdChuZXh0KSkgfHxcbiAgICAgICAgICAgICAgICAgICAgKGxldHRlcnNbaiArIDFdICYmIGxldHRlcnNbaiArIDFdLm1hdGNoKC9cXFcvKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGhhc0FsbEZsYWdzO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGlzVW5rbm93bk9wdGlvbkFzQXJnKGFyZykge1xuICAgICAgICAgICAgcmV0dXJuIGNvbmZpZ3VyYXRpb25bJ3Vua25vd24tb3B0aW9ucy1hcy1hcmdzJ10gJiYgaXNVbmtub3duT3B0aW9uKGFyZyk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gaXNVbmtub3duT3B0aW9uKGFyZykge1xuICAgICAgICAgICAgYXJnID0gYXJnLnJlcGxhY2UoL14tezMsfS8sICctLScpO1xuICAgICAgICAgICAgaWYgKGFyZy5tYXRjaChuZWdhdGl2ZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaGFzQWxsU2hvcnRGbGFncyhhcmcpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZmxhZ1dpdGhFcXVhbHMgPSAvXi0rKFtePV0rPyk9W1xcc1xcU10qJC87XG4gICAgICAgICAgICBjb25zdCBub3JtYWxGbGFnID0gL14tKyhbXj1dKz8pJC87XG4gICAgICAgICAgICBjb25zdCBmbGFnRW5kaW5nSW5IeXBoZW4gPSAvXi0rKFtePV0rPyktJC87XG4gICAgICAgICAgICBjb25zdCBmbGFnRW5kaW5nSW5EaWdpdHMgPSAvXi0rKFtePV0rP1xcZCspJC87XG4gICAgICAgICAgICBjb25zdCBmbGFnRW5kaW5nSW5Ob25Xb3JkQ2hhcmFjdGVycyA9IC9eLSsoW149XSs/KVxcVysuKiQvO1xuICAgICAgICAgICAgcmV0dXJuICFoYXNGbGFnc01hdGNoaW5nKGFyZywgZmxhZ1dpdGhFcXVhbHMsIG5lZ2F0ZWRCb29sZWFuLCBub3JtYWxGbGFnLCBmbGFnRW5kaW5nSW5IeXBoZW4sIGZsYWdFbmRpbmdJbkRpZ2l0cywgZmxhZ0VuZGluZ0luTm9uV29yZENoYXJhY3RlcnMpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGRlZmF1bHRWYWx1ZShrZXkpIHtcbiAgICAgICAgICAgIGlmICghY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuYm9vbHMpICYmXG4gICAgICAgICAgICAgICAgIWNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmNvdW50cykgJiZcbiAgICAgICAgICAgICAgICBgJHtrZXl9YCBpbiBkZWZhdWx0cykge1xuICAgICAgICAgICAgICAgIHJldHVybiBkZWZhdWx0c1trZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHRGb3JUeXBlKGd1ZXNzVHlwZShrZXkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBkZWZhdWx0Rm9yVHlwZSh0eXBlKSB7XG4gICAgICAgICAgICBjb25zdCBkZWYgPSB7XG4gICAgICAgICAgICAgICAgW0RlZmF1bHRWYWx1ZXNGb3JUeXBlS2V5LkJPT0xFQU5dOiB0cnVlLFxuICAgICAgICAgICAgICAgIFtEZWZhdWx0VmFsdWVzRm9yVHlwZUtleS5TVFJJTkddOiAnJyxcbiAgICAgICAgICAgICAgICBbRGVmYXVsdFZhbHVlc0ZvclR5cGVLZXkuTlVNQkVSXTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIFtEZWZhdWx0VmFsdWVzRm9yVHlwZUtleS5BUlJBWV06IFtdXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIGRlZlt0eXBlXTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBndWVzc1R5cGUoa2V5KSB7XG4gICAgICAgICAgICBsZXQgdHlwZSA9IERlZmF1bHRWYWx1ZXNGb3JUeXBlS2V5LkJPT0xFQU47XG4gICAgICAgICAgICBpZiAoY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3Muc3RyaW5ncykpXG4gICAgICAgICAgICAgICAgdHlwZSA9IERlZmF1bHRWYWx1ZXNGb3JUeXBlS2V5LlNUUklORztcbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLm51bWJlcnMpKVxuICAgICAgICAgICAgICAgIHR5cGUgPSBEZWZhdWx0VmFsdWVzRm9yVHlwZUtleS5OVU1CRVI7XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5ib29scykpXG4gICAgICAgICAgICAgICAgdHlwZSA9IERlZmF1bHRWYWx1ZXNGb3JUeXBlS2V5LkJPT0xFQU47XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5hcnJheXMpKVxuICAgICAgICAgICAgICAgIHR5cGUgPSBEZWZhdWx0VmFsdWVzRm9yVHlwZUtleS5BUlJBWTtcbiAgICAgICAgICAgIHJldHVybiB0eXBlO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGlzVW5kZWZpbmVkKG51bSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bSA9PT0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGNoZWNrQ29uZmlndXJhdGlvbigpIHtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGZsYWdzLmNvdW50cykuZmluZChrZXkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5hcnJheXMpKSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yID0gRXJyb3IoX18oJ0ludmFsaWQgY29uZmlndXJhdGlvbjogJXMsIG9wdHMuY291bnQgZXhjbHVkZXMgb3B0cy5hcnJheS4nLCBrZXkpKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLm5hcmdzKSkge1xuICAgICAgICAgICAgICAgICAgICBlcnJvciA9IEVycm9yKF9fKCdJbnZhbGlkIGNvbmZpZ3VyYXRpb246ICVzLCBvcHRzLmNvdW50IGV4Y2x1ZGVzIG9wdHMubmFyZy4nLCBrZXkpKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhbGlhc2VzOiBPYmplY3QuYXNzaWduKHt9LCBmbGFncy5hbGlhc2VzKSxcbiAgICAgICAgICAgIGFyZ3Y6IE9iamVjdC5hc3NpZ24oYXJndlJldHVybiwgYXJndiksXG4gICAgICAgICAgICBjb25maWd1cmF0aW9uOiBjb25maWd1cmF0aW9uLFxuICAgICAgICAgICAgZGVmYXVsdGVkOiBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0ZWQpLFxuICAgICAgICAgICAgZXJyb3I6IGVycm9yLFxuICAgICAgICAgICAgbmV3QWxpYXNlczogT2JqZWN0LmFzc2lnbih7fSwgbmV3QWxpYXNlcylcbiAgICAgICAgfTtcbiAgICB9XG59XG5mdW5jdGlvbiBjb21iaW5lQWxpYXNlcyhhbGlhc2VzKSB7XG4gICAgY29uc3QgYWxpYXNBcnJheXMgPSBbXTtcbiAgICBjb25zdCBjb21iaW5lZCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgbGV0IGNoYW5nZSA9IHRydWU7XG4gICAgT2JqZWN0LmtleXMoYWxpYXNlcykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIGFsaWFzQXJyYXlzLnB1c2goW10uY29uY2F0KGFsaWFzZXNba2V5XSwga2V5KSk7XG4gICAgfSk7XG4gICAgd2hpbGUgKGNoYW5nZSkge1xuICAgICAgICBjaGFuZ2UgPSBmYWxzZTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhbGlhc0FycmF5cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgZm9yIChsZXQgaWkgPSBpICsgMTsgaWkgPCBhbGlhc0FycmF5cy5sZW5ndGg7IGlpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbnRlcnNlY3QgPSBhbGlhc0FycmF5c1tpXS5maWx0ZXIoZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFsaWFzQXJyYXlzW2lpXS5pbmRleE9mKHYpICE9PSAtMTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAoaW50ZXJzZWN0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBhbGlhc0FycmF5c1tpXSA9IGFsaWFzQXJyYXlzW2ldLmNvbmNhdChhbGlhc0FycmF5c1tpaV0pO1xuICAgICAgICAgICAgICAgICAgICBhbGlhc0FycmF5cy5zcGxpY2UoaWksIDEpO1xuICAgICAgICAgICAgICAgICAgICBjaGFuZ2UgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgYWxpYXNBcnJheXMuZm9yRWFjaChmdW5jdGlvbiAoYWxpYXNBcnJheSkge1xuICAgICAgICBhbGlhc0FycmF5ID0gYWxpYXNBcnJheS5maWx0ZXIoZnVuY3Rpb24gKHYsIGksIHNlbGYpIHtcbiAgICAgICAgICAgIHJldHVybiBzZWxmLmluZGV4T2YodikgPT09IGk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBsYXN0QWxpYXMgPSBhbGlhc0FycmF5LnBvcCgpO1xuICAgICAgICBpZiAobGFzdEFsaWFzICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIGxhc3RBbGlhcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGNvbWJpbmVkW2xhc3RBbGlhc10gPSBhbGlhc0FycmF5O1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGNvbWJpbmVkO1xufVxuZnVuY3Rpb24gaW5jcmVtZW50KG9yaWcpIHtcbiAgICByZXR1cm4gb3JpZyAhPT0gdW5kZWZpbmVkID8gb3JpZyArIDEgOiAxO1xufVxuZnVuY3Rpb24gc2FuaXRpemVLZXkoa2V5KSB7XG4gICAgaWYgKGtleSA9PT0gJ19fcHJvdG9fXycpXG4gICAgICAgIHJldHVybiAnX19fcHJvdG9fX18nO1xuICAgIHJldHVybiBrZXk7XG59XG5cbmNvbnN0IG1pbk5vZGVWZXJzaW9uID0gKHByb2Nlc3MgJiYgcHJvY2Vzcy5lbnYgJiYgcHJvY2Vzcy5lbnYuWUFSR1NfTUlOX05PREVfVkVSU0lPTilcbiAgICA/IE51bWJlcihwcm9jZXNzLmVudi5ZQVJHU19NSU5fTk9ERV9WRVJTSU9OKVxuICAgIDogMTA7XG5pZiAocHJvY2VzcyAmJiBwcm9jZXNzLnZlcnNpb24pIHtcbiAgICBjb25zdCBtYWpvciA9IE51bWJlcihwcm9jZXNzLnZlcnNpb24ubWF0Y2goL3YoW14uXSspLylbMV0pO1xuICAgIGlmIChtYWpvciA8IG1pbk5vZGVWZXJzaW9uKSB7XG4gICAgICAgIHRocm93IEVycm9yKGB5YXJncyBwYXJzZXIgc3VwcG9ydHMgYSBtaW5pbXVtIE5vZGUuanMgdmVyc2lvbiBvZiAke21pbk5vZGVWZXJzaW9ufS4gUmVhZCBvdXIgdmVyc2lvbiBzdXBwb3J0IHBvbGljeTogaHR0cHM6Ly9naXRodWIuY29tL3lhcmdzL3lhcmdzLXBhcnNlciNzdXBwb3J0ZWQtbm9kZWpzLXZlcnNpb25zYCk7XG4gICAgfVxufVxuY29uc3QgZW52ID0gcHJvY2VzcyA/IHByb2Nlc3MuZW52IDoge307XG5jb25zdCBwYXJzZXIgPSBuZXcgWWFyZ3NQYXJzZXIoe1xuICAgIGN3ZDogcHJvY2Vzcy5jd2QsXG4gICAgZW52OiAoKSA9PiB7XG4gICAgICAgIHJldHVybiBlbnY7XG4gICAgfSxcbiAgICBmb3JtYXQ6IHV0aWwuZm9ybWF0LFxuICAgIG5vcm1hbGl6ZTogcGF0aC5ub3JtYWxpemUsXG4gICAgcmVzb2x2ZTogcGF0aC5yZXNvbHZlLFxuICAgIHJlcXVpcmU6IChwYXRoKSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgcmVxdWlyZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHJldHVybiByZXF1aXJlKHBhdGgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHBhdGgubWF0Y2goL1xcLmpzb24kLykpIHtcbiAgICAgICAgICAgIHJldHVybiBmcy5yZWFkRmlsZVN5bmMocGF0aCwgJ3V0ZjgnKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCdvbmx5IC5qc29uIGNvbmZpZyBmaWxlcyBhcmUgc3VwcG9ydGVkIGluIEVTTScpO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5jb25zdCB5YXJnc1BhcnNlciA9IGZ1bmN0aW9uIFBhcnNlcihhcmdzLCBvcHRzKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gcGFyc2VyLnBhcnNlKGFyZ3Muc2xpY2UoKSwgb3B0cyk7XG4gICAgcmV0dXJuIHJlc3VsdC5hcmd2O1xufTtcbnlhcmdzUGFyc2VyLmRldGFpbGVkID0gZnVuY3Rpb24gKGFyZ3MsIG9wdHMpIHtcbiAgICByZXR1cm4gcGFyc2VyLnBhcnNlKGFyZ3Muc2xpY2UoKSwgb3B0cyk7XG59O1xueWFyZ3NQYXJzZXIuY2FtZWxDYXNlID0gY2FtZWxDYXNlO1xueWFyZ3NQYXJzZXIuZGVjYW1lbGl6ZSA9IGRlY2FtZWxpemU7XG55YXJnc1BhcnNlci5sb29rc0xpa2VOdW1iZXIgPSBsb29rc0xpa2VOdW1iZXI7XG5cbm1vZHVsZS5leHBvcnRzID0geWFyZ3NQYXJzZXI7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICh7b25seUZpcnN0ID0gZmFsc2V9ID0ge30pID0+IHtcblx0Y29uc3QgcGF0dGVybiA9IFtcblx0XHQnW1xcXFx1MDAxQlxcXFx1MDA5Ql1bW1xcXFxdKCkjOz9dKig/Oig/Oig/Oig/OjtbLWEtekEtWlxcXFxkXFxcXC8jJi46PT8lQH5fXSspKnxbYS16QS1aXFxcXGRdKyg/OjtbLWEtekEtWlxcXFxkXFxcXC8jJi46PT8lQH5fXSopKik/XFxcXHUwMDA3KScsXG5cdFx0Jyg/Oig/OlxcXFxkezEsNH0oPzo7XFxcXGR7MCw0fSkqKT9bXFxcXGRBLVBSLVRaY2YtbnRxcnk9Pjx+XSkpJ1xuXHRdLmpvaW4oJ3wnKTtcblxuXHRyZXR1cm4gbmV3IFJlZ0V4cChwYXR0ZXJuLCBvbmx5Rmlyc3QgPyB1bmRlZmluZWQgOiAnZycpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG5jb25zdCBhbnNpUmVnZXggPSByZXF1aXJlKCdhbnNpLXJlZ2V4Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gc3RyaW5nID0+IHR5cGVvZiBzdHJpbmcgPT09ICdzdHJpbmcnID8gc3RyaW5nLnJlcGxhY2UoYW5zaVJlZ2V4KCksICcnKSA6IHN0cmluZztcbiIsICIvKiBlc2xpbnQtZGlzYWJsZSB5b2RhICovXG4ndXNlIHN0cmljdCc7XG5cbmNvbnN0IGlzRnVsbHdpZHRoQ29kZVBvaW50ID0gY29kZVBvaW50ID0+IHtcblx0aWYgKE51bWJlci5pc05hTihjb2RlUG9pbnQpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0Ly8gQ29kZSBwb2ludHMgYXJlIGRlcml2ZWQgZnJvbTpcblx0Ly8gaHR0cDovL3d3dy51bml4Lm9yZy9QdWJsaWMvVU5JREFUQS9FYXN0QXNpYW5XaWR0aC50eHRcblx0aWYgKFxuXHRcdGNvZGVQb2ludCA+PSAweDExMDAgJiYgKFxuXHRcdFx0Y29kZVBvaW50IDw9IDB4MTE1RiB8fCAvLyBIYW5ndWwgSmFtb1xuXHRcdFx0Y29kZVBvaW50ID09PSAweDIzMjkgfHwgLy8gTEVGVC1QT0lOVElORyBBTkdMRSBCUkFDS0VUXG5cdFx0XHRjb2RlUG9pbnQgPT09IDB4MjMyQSB8fCAvLyBSSUdIVC1QT0lOVElORyBBTkdMRSBCUkFDS0VUXG5cdFx0XHQvLyBDSksgUmFkaWNhbHMgU3VwcGxlbWVudCAuLiBFbmNsb3NlZCBDSksgTGV0dGVycyBhbmQgTW9udGhzXG5cdFx0XHQoMHgyRTgwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgzMjQ3ICYmIGNvZGVQb2ludCAhPT0gMHgzMDNGKSB8fFxuXHRcdFx0Ly8gRW5jbG9zZWQgQ0pLIExldHRlcnMgYW5kIE1vbnRocyAuLiBDSksgVW5pZmllZCBJZGVvZ3JhcGhzIEV4dGVuc2lvbiBBXG5cdFx0XHQoMHgzMjUwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHg0REJGKSB8fFxuXHRcdFx0Ly8gQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyAuLiBZaSBSYWRpY2Fsc1xuXHRcdFx0KDB4NEUwMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4QTRDNikgfHxcblx0XHRcdC8vIEhhbmd1bCBKYW1vIEV4dGVuZGVkLUFcblx0XHRcdCgweEE5NjAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweEE5N0MpIHx8XG5cdFx0XHQvLyBIYW5ndWwgU3lsbGFibGVzXG5cdFx0XHQoMHhBQzAwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHhEN0EzKSB8fFxuXHRcdFx0Ly8gQ0pLIENvbXBhdGliaWxpdHkgSWRlb2dyYXBoc1xuXHRcdFx0KDB4RjkwMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4RkFGRikgfHxcblx0XHRcdC8vIFZlcnRpY2FsIEZvcm1zXG5cdFx0XHQoMHhGRTEwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHhGRTE5KSB8fFxuXHRcdFx0Ly8gQ0pLIENvbXBhdGliaWxpdHkgRm9ybXMgLi4gU21hbGwgRm9ybSBWYXJpYW50c1xuXHRcdFx0KDB4RkUzMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4RkU2QikgfHxcblx0XHRcdC8vIEhhbGZ3aWR0aCBhbmQgRnVsbHdpZHRoIEZvcm1zXG5cdFx0XHQoMHhGRjAxIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHhGRjYwKSB8fFxuXHRcdFx0KDB4RkZFMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4RkZFNikgfHxcblx0XHRcdC8vIEthbmEgU3VwcGxlbWVudFxuXHRcdFx0KDB4MUIwMDAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDFCMDAxKSB8fFxuXHRcdFx0Ly8gRW5jbG9zZWQgSWRlb2dyYXBoaWMgU3VwcGxlbWVudFxuXHRcdFx0KDB4MUYyMDAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDFGMjUxKSB8fFxuXHRcdFx0Ly8gQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyBFeHRlbnNpb24gQiAuLiBUZXJ0aWFyeSBJZGVvZ3JhcGhpYyBQbGFuZVxuXHRcdFx0KDB4MjAwMDAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDNGRkZEKVxuXHRcdClcblx0KSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRyZXR1cm4gZmFsc2U7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzRnVsbHdpZHRoQ29kZVBvaW50O1xubW9kdWxlLmV4cG9ydHMuZGVmYXVsdCA9IGlzRnVsbHdpZHRoQ29kZVBvaW50O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgLy8gaHR0cHM6Ly9tdGhzLmJlL2Vtb2ppXG4gIHJldHVybiAvXFx1RDgzQ1xcdURGRjRcXHVEQjQwXFx1REM2N1xcdURCNDBcXHVEQzYyKD86XFx1REI0MFxcdURDNjVcXHVEQjQwXFx1REM2RVxcdURCNDBcXHVEQzY3fFxcdURCNDBcXHVEQzczXFx1REI0MFxcdURDNjNcXHVEQjQwXFx1REM3NHxcXHVEQjQwXFx1REM3N1xcdURCNDBcXHVEQzZDXFx1REI0MFxcdURDNzMpXFx1REI0MFxcdURDN0Z8XFx1RDgzRFxcdURDNjgoPzpcXHVEODNDXFx1REZGQ1xcdTIwMEQoPzpcXHVEODNFXFx1REQxRFxcdTIwMERcXHVEODNEXFx1REM2OFxcdUQ4M0NcXHVERkZCfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0VbXFx1RERBRi1cXHVEREIzXFx1RERCQ1xcdUREQkRdKXxcXHVEODNDXFx1REZGRlxcdTIwMEQoPzpcXHVEODNFXFx1REQxRFxcdTIwMERcXHVEODNEXFx1REM2OCg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZFXSl8XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRVtcXHVEREFGLVxcdUREQjNcXHVEREJDXFx1RERCRF0pfFxcdUQ4M0NcXHVERkZFXFx1MjAwRCg/OlxcdUQ4M0VcXHVERDFEXFx1MjAwRFxcdUQ4M0RcXHVEQzY4KD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkRdKXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFW1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXSl8XFx1RDgzQ1xcdURGRkRcXHUyMDBEKD86XFx1RDgzRVxcdUREMURcXHUyMDBEXFx1RDgzRFxcdURDNjgoPzpcXHVEODNDW1xcdURGRkJcXHVERkZDXSl8XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRVtcXHVEREFGLVxcdUREQjNcXHVEREJDXFx1RERCRF0pfFxcdTIwMEQoPzpcXHUyNzY0XFx1RkUwRlxcdTIwMEQoPzpcXHVEODNEXFx1REM4QlxcdTIwMEQpP1xcdUQ4M0RcXHVEQzY4fCg/OlxcdUQ4M0RbXFx1REM2OFxcdURDNjldKVxcdTIwMEQoPzpcXHVEODNEXFx1REM2NlxcdTIwMERcXHVEODNEXFx1REM2NnxcXHVEODNEXFx1REM2N1xcdTIwMEQoPzpcXHVEODNEW1xcdURDNjZcXHVEQzY3XSkpfFxcdUQ4M0RcXHVEQzY2XFx1MjAwRFxcdUQ4M0RcXHVEQzY2fFxcdUQ4M0RcXHVEQzY3XFx1MjAwRCg/OlxcdUQ4M0RbXFx1REM2NlxcdURDNjddKXwoPzpcXHVEODNEW1xcdURDNjhcXHVEQzY5XSlcXHUyMDBEKD86XFx1RDgzRFtcXHVEQzY2XFx1REM2N10pfFtcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRnxcXHVEODNEW1xcdURDNjZcXHVEQzY3XXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFW1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXSl8KD86XFx1RDgzQ1xcdURGRkJcXHUyMDBEW1xcdTI2OTVcXHUyNjk2XFx1MjcwOF18XFx1RDgzQ1xcdURGRkZcXHUyMDBEW1xcdTI2OTVcXHUyNjk2XFx1MjcwOF18XFx1RDgzQ1xcdURGRkVcXHUyMDBEW1xcdTI2OTVcXHUyNjk2XFx1MjcwOF18XFx1RDgzQ1xcdURGRkRcXHUyMDBEW1xcdTI2OTVcXHUyNjk2XFx1MjcwOF18XFx1RDgzQ1xcdURGRkNcXHUyMDBEW1xcdTI2OTVcXHUyNjk2XFx1MjcwOF0pXFx1RkUwRnxcXHVEODNDXFx1REZGQlxcdTIwMEQoPzpcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFW1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXSl8XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKXwoPzpcXHVEODNFXFx1REREMVxcdUQ4M0NcXHVERkZCXFx1MjAwRFxcdUQ4M0VcXHVERDFEXFx1MjAwRFxcdUQ4M0VcXHVEREQxfFxcdUQ4M0RcXHVEQzY5XFx1RDgzQ1xcdURGRkNcXHUyMDBEXFx1RDgzRVxcdUREMURcXHUyMDBEXFx1RDgzRFxcdURDNjkpXFx1RDgzQ1xcdURGRkJ8XFx1RDgzRVxcdURERDEoPzpcXHVEODNDXFx1REZGRlxcdTIwMERcXHVEODNFXFx1REQxRFxcdTIwMERcXHVEODNFXFx1REREMSg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSl8XFx1MjAwRFxcdUQ4M0VcXHVERDFEXFx1MjAwRFxcdUQ4M0VcXHVEREQxKXwoPzpcXHVEODNFXFx1REREMVxcdUQ4M0NcXHVERkZFXFx1MjAwRFxcdUQ4M0VcXHVERDFEXFx1MjAwRFxcdUQ4M0VcXHVEREQxfFxcdUQ4M0RcXHVEQzY5XFx1RDgzQ1xcdURGRkZcXHUyMDBEXFx1RDgzRVxcdUREMURcXHUyMDBEKD86XFx1RDgzRFtcXHVEQzY4XFx1REM2OV0pKSg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZFXSl8KD86XFx1RDgzRVxcdURERDFcXHVEODNDXFx1REZGQ1xcdTIwMERcXHVEODNFXFx1REQxRFxcdTIwMERcXHVEODNFXFx1REREMXxcXHVEODNEXFx1REM2OVxcdUQ4M0NcXHVERkZEXFx1MjAwRFxcdUQ4M0VcXHVERDFEXFx1MjAwRFxcdUQ4M0RcXHVEQzY5KSg/OlxcdUQ4M0NbXFx1REZGQlxcdURGRkNdKXxcXHVEODNEXFx1REM2OSg/OlxcdUQ4M0NcXHVERkZFXFx1MjAwRCg/OlxcdUQ4M0VcXHVERDFEXFx1MjAwRFxcdUQ4M0RcXHVEQzY4KD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkRcXHVERkZGXSl8XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRVtcXHVEREFGLVxcdUREQjNcXHVEREJDXFx1RERCRF0pfFxcdUQ4M0NcXHVERkZDXFx1MjAwRCg/OlxcdUQ4M0VcXHVERDFEXFx1MjAwRFxcdUQ4M0RcXHVEQzY4KD86XFx1RDgzQ1tcXHVERkZCXFx1REZGRC1cXHVERkZGXSl8XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRVtcXHVEREFGLVxcdUREQjNcXHVEREJDXFx1RERCRF0pfFxcdUQ4M0NcXHVERkZCXFx1MjAwRCg/OlxcdUQ4M0VcXHVERDFEXFx1MjAwRFxcdUQ4M0RcXHVEQzY4KD86XFx1RDgzQ1tcXHVERkZDLVxcdURGRkZdKXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFW1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXSl8XFx1RDgzQ1xcdURGRkRcXHUyMDBEKD86XFx1RDgzRVxcdUREMURcXHUyMDBEXFx1RDgzRFxcdURDNjgoPzpcXHVEODNDW1xcdURGRkJcXHVERkZDXFx1REZGRVxcdURGRkZdKXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFW1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXSl8XFx1MjAwRCg/OlxcdTI3NjRcXHVGRTBGXFx1MjAwRCg/OlxcdUQ4M0RcXHVEQzhCXFx1MjAwRCg/OlxcdUQ4M0RbXFx1REM2OFxcdURDNjldKXxcXHVEODNEW1xcdURDNjhcXHVEQzY5XSl8XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRVtcXHVEREFGLVxcdUREQjNcXHVEREJDXFx1RERCRF0pfFxcdUQ4M0NcXHVERkZGXFx1MjAwRCg/OlxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0VbXFx1RERBRi1cXHVEREIzXFx1RERCQ1xcdUREQkRdKSl8XFx1RDgzRFxcdURDNjlcXHUyMDBEXFx1RDgzRFxcdURDNjlcXHUyMDBEKD86XFx1RDgzRFxcdURDNjZcXHUyMDBEXFx1RDgzRFxcdURDNjZ8XFx1RDgzRFxcdURDNjdcXHUyMDBEKD86XFx1RDgzRFtcXHVEQzY2XFx1REM2N10pKXwoPzpcXHVEODNFXFx1REREMVxcdUQ4M0NcXHVERkZEXFx1MjAwRFxcdUQ4M0VcXHVERDFEXFx1MjAwRFxcdUQ4M0VcXHVEREQxfFxcdUQ4M0RcXHVEQzY5XFx1RDgzQ1xcdURGRkVcXHUyMDBEXFx1RDgzRVxcdUREMURcXHUyMDBEXFx1RDgzRFxcdURDNjkpKD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkRdKXxcXHVEODNEXFx1REM2OVxcdTIwMERcXHVEODNEXFx1REM2NlxcdTIwMERcXHVEODNEXFx1REM2NnxcXHVEODNEXFx1REM2OVxcdTIwMERcXHVEODNEXFx1REM2OVxcdTIwMEQoPzpcXHVEODNEW1xcdURDNjZcXHVEQzY3XSl8KD86XFx1RDgzRFxcdURDNDFcXHVGRTBGXFx1MjAwRFxcdUQ4M0RcXHVEREU4fFxcdUQ4M0RcXHVEQzY5KD86XFx1RDgzQ1xcdURGRkZcXHUyMDBEW1xcdTI2OTVcXHUyNjk2XFx1MjcwOF18XFx1RDgzQ1xcdURGRkVcXHUyMDBEW1xcdTI2OTVcXHUyNjk2XFx1MjcwOF18XFx1RDgzQ1xcdURGRkNcXHUyMDBEW1xcdTI2OTVcXHUyNjk2XFx1MjcwOF18XFx1RDgzQ1xcdURGRkJcXHUyMDBEW1xcdTI2OTVcXHUyNjk2XFx1MjcwOF18XFx1RDgzQ1xcdURGRkRcXHUyMDBEW1xcdTI2OTVcXHUyNjk2XFx1MjcwOF18XFx1MjAwRFtcXHUyNjk1XFx1MjY5NlxcdTI3MDhdKXwoPzooPzpcXHUyNkY5fFxcdUQ4M0NbXFx1REZDQlxcdURGQ0NdfFxcdUQ4M0RcXHVERDc1KVxcdUZFMEZ8XFx1RDgzRFxcdURDNkZ8XFx1RDgzRVtcXHVERDNDXFx1RERERVxcdUREREZdKVxcdTIwMERbXFx1MjY0MFxcdTI2NDJdfCg/OlxcdTI2Rjl8XFx1RDgzQ1tcXHVERkNCXFx1REZDQ118XFx1RDgzRFxcdURENzUpKD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKVxcdTIwMERbXFx1MjY0MFxcdTI2NDJdfCg/OlxcdUQ4M0NbXFx1REZDM1xcdURGQzRcXHVERkNBXXxcXHVEODNEW1xcdURDNkVcXHVEQzcxXFx1REM3M1xcdURDNzdcXHVEQzgxXFx1REM4MlxcdURDODZcXHVEQzg3XFx1REU0NS1cXHVERTQ3XFx1REU0QlxcdURFNERcXHVERTRFXFx1REVBM1xcdURFQjQtXFx1REVCNl18XFx1RDgzRVtcXHVERDI2XFx1REQzNy1cXHVERDM5XFx1REQzRFxcdUREM0VcXHVEREI4XFx1RERCOVxcdUREQ0QtXFx1RERDRlxcdURERDYtXFx1RERERF0pKD86KD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKVxcdTIwMERbXFx1MjY0MFxcdTI2NDJdfFxcdTIwMERbXFx1MjY0MFxcdTI2NDJdKXxcXHVEODNDXFx1REZGNFxcdTIwMERcXHUyNjIwKVxcdUZFMEZ8XFx1RDgzRFxcdURDNjlcXHUyMDBEXFx1RDgzRFxcdURDNjdcXHUyMDBEKD86XFx1RDgzRFtcXHVEQzY2XFx1REM2N10pfFxcdUQ4M0NcXHVERkYzXFx1RkUwRlxcdTIwMERcXHVEODNDXFx1REYwOHxcXHVEODNEXFx1REMxNVxcdTIwMERcXHVEODNFXFx1RERCQXxcXHVEODNEXFx1REM2OVxcdTIwMERcXHVEODNEXFx1REM2NnxcXHVEODNEXFx1REM2OVxcdTIwMERcXHVEODNEXFx1REM2N3xcXHVEODNDXFx1RERGRFxcdUQ4M0NcXHVEREYwfFxcdUQ4M0NcXHVEREY0XFx1RDgzQ1xcdURERjJ8XFx1RDgzQ1xcdURERjZcXHVEODNDXFx1RERFNnxbI1xcKjAtOV1cXHVGRTBGXFx1MjBFM3xcXHVEODNDXFx1RERFNyg/OlxcdUQ4M0NbXFx1RERFNlxcdURERTdcXHVEREU5LVxcdURERUZcXHVEREYxLVxcdURERjRcXHVEREY2LVxcdURERjlcXHVEREZCXFx1RERGQ1xcdURERkVcXHVEREZGXSl8XFx1RDgzQ1xcdURERjkoPzpcXHVEODNDW1xcdURERTZcXHVEREU4XFx1RERFOVxcdURERUItXFx1RERFRFxcdURERUYtXFx1RERGNFxcdURERjdcXHVEREY5XFx1RERGQlxcdURERkNcXHVEREZGXSl8XFx1RDgzQ1xcdURERUEoPzpcXHVEODNDW1xcdURERTZcXHVEREU4XFx1RERFQVxcdURERUNcXHVEREVEXFx1RERGNy1cXHVEREZBXSl8XFx1RDgzRVxcdURERDEoPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl0pfFxcdUQ4M0NcXHVEREY3KD86XFx1RDgzQ1tcXHVEREVBXFx1RERGNFxcdURERjhcXHVEREZBXFx1RERGQ10pfFxcdUQ4M0RcXHVEQzY5KD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKXxcXHVEODNDXFx1RERGMig/OlxcdUQ4M0NbXFx1RERFNlxcdURERTgtXFx1RERFRFxcdURERjAtXFx1RERGRl0pfFxcdUQ4M0NcXHVEREU2KD86XFx1RDgzQ1tcXHVEREU4LVxcdURERUNcXHVEREVFXFx1RERGMVxcdURERjJcXHVEREY0XFx1RERGNi1cXHVEREZBXFx1RERGQ1xcdURERkRcXHVEREZGXSl8XFx1RDgzQ1xcdURERjAoPzpcXHVEODNDW1xcdURERUFcXHVEREVDLVxcdURERUVcXHVEREYyXFx1RERGM1xcdURERjVcXHVEREY3XFx1RERGQ1xcdURERkVcXHVEREZGXSl8XFx1RDgzQ1xcdURERUQoPzpcXHVEODNDW1xcdURERjBcXHVEREYyXFx1RERGM1xcdURERjdcXHVEREY5XFx1RERGQV0pfFxcdUQ4M0NcXHVEREU5KD86XFx1RDgzQ1tcXHVEREVBXFx1RERFQ1xcdURERUZcXHVEREYwXFx1RERGMlxcdURERjRcXHVEREZGXSl8XFx1RDgzQ1xcdURERkUoPzpcXHVEODNDW1xcdURERUFcXHVEREY5XSl8XFx1RDgzQ1xcdURERUMoPzpcXHVEODNDW1xcdURERTZcXHVEREU3XFx1RERFOS1cXHVEREVFXFx1RERGMS1cXHVEREYzXFx1RERGNS1cXHVEREZBXFx1RERGQ1xcdURERkVdKXxcXHVEODNDXFx1RERGOCg/OlxcdUQ4M0NbXFx1RERFNi1cXHVEREVBXFx1RERFQy1cXHVEREY0XFx1RERGNy1cXHVEREY5XFx1RERGQlxcdURERkQtXFx1RERGRl0pfFxcdUQ4M0NcXHVEREVCKD86XFx1RDgzQ1tcXHVEREVFLVxcdURERjBcXHVEREYyXFx1RERGNFxcdURERjddKXxcXHVEODNDXFx1RERGNSg/OlxcdUQ4M0NbXFx1RERFNlxcdURERUEtXFx1RERFRFxcdURERjAtXFx1RERGM1xcdURERjctXFx1RERGOVxcdURERkNcXHVEREZFXSl8XFx1RDgzQ1xcdURERkIoPzpcXHVEODNDW1xcdURERTZcXHVEREU4XFx1RERFQVxcdURERUNcXHVEREVFXFx1RERGM1xcdURERkFdKXxcXHVEODNDXFx1RERGMyg/OlxcdUQ4M0NbXFx1RERFNlxcdURERThcXHVEREVBLVxcdURERUNcXHVEREVFXFx1RERGMVxcdURERjRcXHVEREY1XFx1RERGN1xcdURERkFcXHVEREZGXSl8XFx1RDgzQ1xcdURERTgoPzpcXHVEODNDW1xcdURERTZcXHVEREU4XFx1RERFOVxcdURERUItXFx1RERFRVxcdURERjAtXFx1RERGNVxcdURERjdcXHVEREZBLVxcdURERkZdKXxcXHVEODNDXFx1RERGMSg/OlxcdUQ4M0NbXFx1RERFNi1cXHVEREU4XFx1RERFRVxcdURERjBcXHVEREY3LVxcdURERkJcXHVEREZFXSl8XFx1RDgzQ1xcdURERkYoPzpcXHVEODNDW1xcdURERTZcXHVEREYyXFx1RERGQ10pfFxcdUQ4M0NcXHVEREZDKD86XFx1RDgzQ1tcXHVEREVCXFx1RERGOF0pfFxcdUQ4M0NcXHVEREZBKD86XFx1RDgzQ1tcXHVEREU2XFx1RERFQ1xcdURERjJcXHVEREYzXFx1RERGOFxcdURERkVcXHVEREZGXSl8XFx1RDgzQ1xcdURERUUoPzpcXHVEODNDW1xcdURERTgtXFx1RERFQVxcdURERjEtXFx1RERGNFxcdURERjYtXFx1RERGOV0pfFxcdUQ4M0NcXHVEREVGKD86XFx1RDgzQ1tcXHVEREVBXFx1RERGMlxcdURERjRcXHVEREY1XSl8KD86XFx1RDgzQ1tcXHVERkMzXFx1REZDNFxcdURGQ0FdfFxcdUQ4M0RbXFx1REM2RVxcdURDNzFcXHVEQzczXFx1REM3N1xcdURDODFcXHVEQzgyXFx1REM4NlxcdURDODdcXHVERTQ1LVxcdURFNDdcXHVERTRCXFx1REU0RFxcdURFNEVcXHVERUEzXFx1REVCNC1cXHVERUI2XXxcXHVEODNFW1xcdUREMjZcXHVERDM3LVxcdUREMzlcXHVERDNEXFx1REQzRVxcdUREQjhcXHVEREI5XFx1RERDRC1cXHVERENGXFx1RERENi1cXHVEREREXSkoPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl0pfCg/OlxcdTI2Rjl8XFx1RDgzQ1tcXHVERkNCXFx1REZDQ118XFx1RDgzRFxcdURENzUpKD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKXwoPzpbXFx1MjYxRFxcdTI3MEEtXFx1MjcwRF18XFx1RDgzQ1tcXHVERjg1XFx1REZDMlxcdURGQzddfFxcdUQ4M0RbXFx1REM0MlxcdURDNDNcXHVEQzQ2LVxcdURDNTBcXHVEQzY2XFx1REM2N1xcdURDNkItXFx1REM2RFxcdURDNzBcXHVEQzcyXFx1REM3NC1cXHVEQzc2XFx1REM3OFxcdURDN0NcXHVEQzgzXFx1REM4NVxcdURDQUFcXHVERDc0XFx1REQ3QVxcdUREOTBcXHVERDk1XFx1REQ5NlxcdURFNENcXHVERTRGXFx1REVDMFxcdURFQ0NdfFxcdUQ4M0VbXFx1REQwRlxcdUREMTgtXFx1REQxQ1xcdUREMUVcXHVERDFGXFx1REQzMC1cXHVERDM2XFx1RERCNVxcdUREQjZcXHVEREJCXFx1REREMi1cXHVEREQ1XSkoPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl0pfCg/OltcXHUyMzFBXFx1MjMxQlxcdTIzRTktXFx1MjNFQ1xcdTIzRjBcXHUyM0YzXFx1MjVGRFxcdTI1RkVcXHUyNjE0XFx1MjYxNVxcdTI2NDgtXFx1MjY1M1xcdTI2N0ZcXHUyNjkzXFx1MjZBMVxcdTI2QUFcXHUyNkFCXFx1MjZCRFxcdTI2QkVcXHUyNkM0XFx1MjZDNVxcdTI2Q0VcXHUyNkQ0XFx1MjZFQVxcdTI2RjJcXHUyNkYzXFx1MjZGNVxcdTI2RkFcXHUyNkZEXFx1MjcwNVxcdTI3MEFcXHUyNzBCXFx1MjcyOFxcdTI3NENcXHUyNzRFXFx1Mjc1My1cXHUyNzU1XFx1Mjc1N1xcdTI3OTUtXFx1Mjc5N1xcdTI3QjBcXHUyN0JGXFx1MkIxQlxcdTJCMUNcXHUyQjUwXFx1MkI1NV18XFx1RDgzQ1tcXHVEQzA0XFx1RENDRlxcdUREOEVcXHVERDkxLVxcdUREOUFcXHVEREU2LVxcdURERkZcXHVERTAxXFx1REUxQVxcdURFMkZcXHVERTMyLVxcdURFMzZcXHVERTM4LVxcdURFM0FcXHVERTUwXFx1REU1MVxcdURGMDAtXFx1REYyMFxcdURGMkQtXFx1REYzNVxcdURGMzctXFx1REY3Q1xcdURGN0UtXFx1REY5M1xcdURGQTAtXFx1REZDQVxcdURGQ0YtXFx1REZEM1xcdURGRTAtXFx1REZGMFxcdURGRjRcXHVERkY4LVxcdURGRkZdfFxcdUQ4M0RbXFx1REMwMC1cXHVEQzNFXFx1REM0MFxcdURDNDItXFx1RENGQ1xcdURDRkYtXFx1REQzRFxcdURENEItXFx1REQ0RVxcdURENTAtXFx1REQ2N1xcdUREN0FcXHVERDk1XFx1REQ5NlxcdUREQTRcXHVEREZCLVxcdURFNEZcXHVERTgwLVxcdURFQzVcXHVERUNDXFx1REVEMC1cXHVERUQyXFx1REVENVxcdURFRUJcXHVERUVDXFx1REVGNC1cXHVERUZBXFx1REZFMC1cXHVERkVCXXxcXHVEODNFW1xcdUREMEQtXFx1REQzQVxcdUREM0MtXFx1REQ0NVxcdURENDctXFx1REQ3MVxcdURENzMtXFx1REQ3NlxcdUREN0EtXFx1RERBMlxcdUREQTUtXFx1RERBQVxcdUREQUUtXFx1RERDQVxcdUREQ0QtXFx1RERGRlxcdURFNzAtXFx1REU3M1xcdURFNzgtXFx1REU3QVxcdURFODAtXFx1REU4MlxcdURFOTAtXFx1REU5NV0pfCg/OlsjXFwqMC05XFx4QTlcXHhBRVxcdTIwM0NcXHUyMDQ5XFx1MjEyMlxcdTIxMzlcXHUyMTk0LVxcdTIxOTlcXHUyMUE5XFx1MjFBQVxcdTIzMUFcXHUyMzFCXFx1MjMyOFxcdTIzQ0ZcXHUyM0U5LVxcdTIzRjNcXHUyM0Y4LVxcdTIzRkFcXHUyNEMyXFx1MjVBQVxcdTI1QUJcXHUyNUI2XFx1MjVDMFxcdTI1RkItXFx1MjVGRVxcdTI2MDAtXFx1MjYwNFxcdTI2MEVcXHUyNjExXFx1MjYxNFxcdTI2MTVcXHUyNjE4XFx1MjYxRFxcdTI2MjBcXHUyNjIyXFx1MjYyM1xcdTI2MjZcXHUyNjJBXFx1MjYyRVxcdTI2MkZcXHUyNjM4LVxcdTI2M0FcXHUyNjQwXFx1MjY0MlxcdTI2NDgtXFx1MjY1M1xcdTI2NUZcXHUyNjYwXFx1MjY2M1xcdTI2NjVcXHUyNjY2XFx1MjY2OFxcdTI2N0JcXHUyNjdFXFx1MjY3RlxcdTI2OTItXFx1MjY5N1xcdTI2OTlcXHUyNjlCXFx1MjY5Q1xcdTI2QTBcXHUyNkExXFx1MjZBQVxcdTI2QUJcXHUyNkIwXFx1MjZCMVxcdTI2QkRcXHUyNkJFXFx1MjZDNFxcdTI2QzVcXHUyNkM4XFx1MjZDRVxcdTI2Q0ZcXHUyNkQxXFx1MjZEM1xcdTI2RDRcXHUyNkU5XFx1MjZFQVxcdTI2RjAtXFx1MjZGNVxcdTI2RjctXFx1MjZGQVxcdTI2RkRcXHUyNzAyXFx1MjcwNVxcdTI3MDgtXFx1MjcwRFxcdTI3MEZcXHUyNzEyXFx1MjcxNFxcdTI3MTZcXHUyNzFEXFx1MjcyMVxcdTI3MjhcXHUyNzMzXFx1MjczNFxcdTI3NDRcXHUyNzQ3XFx1Mjc0Q1xcdTI3NEVcXHUyNzUzLVxcdTI3NTVcXHUyNzU3XFx1Mjc2M1xcdTI3NjRcXHUyNzk1LVxcdTI3OTdcXHUyN0ExXFx1MjdCMFxcdTI3QkZcXHUyOTM0XFx1MjkzNVxcdTJCMDUtXFx1MkIwN1xcdTJCMUJcXHUyQjFDXFx1MkI1MFxcdTJCNTVcXHUzMDMwXFx1MzAzRFxcdTMyOTdcXHUzMjk5XXxcXHVEODNDW1xcdURDMDRcXHVEQ0NGXFx1REQ3MFxcdURENzFcXHVERDdFXFx1REQ3RlxcdUREOEVcXHVERDkxLVxcdUREOUFcXHVEREU2LVxcdURERkZcXHVERTAxXFx1REUwMlxcdURFMUFcXHVERTJGXFx1REUzMi1cXHVERTNBXFx1REU1MFxcdURFNTFcXHVERjAwLVxcdURGMjFcXHVERjI0LVxcdURGOTNcXHVERjk2XFx1REY5N1xcdURGOTktXFx1REY5QlxcdURGOUUtXFx1REZGMFxcdURGRjMtXFx1REZGNVxcdURGRjctXFx1REZGRl18XFx1RDgzRFtcXHVEQzAwLVxcdURDRkRcXHVEQ0ZGLVxcdUREM0RcXHVERDQ5LVxcdURENEVcXHVERDUwLVxcdURENjdcXHVERDZGXFx1REQ3MFxcdURENzMtXFx1REQ3QVxcdUREODdcXHVERDhBLVxcdUREOERcXHVERDkwXFx1REQ5NVxcdUREOTZcXHVEREE0XFx1RERBNVxcdUREQThcXHVEREIxXFx1RERCMlxcdUREQkNcXHVEREMyLVxcdUREQzRcXHVEREQxLVxcdURERDNcXHVERERDLVxcdUREREVcXHVEREUxXFx1RERFM1xcdURERThcXHVEREVGXFx1RERGM1xcdURERkEtXFx1REU0RlxcdURFODAtXFx1REVDNVxcdURFQ0ItXFx1REVEMlxcdURFRDVcXHVERUUwLVxcdURFRTVcXHVERUU5XFx1REVFQlxcdURFRUNcXHVERUYwXFx1REVGMy1cXHVERUZBXFx1REZFMC1cXHVERkVCXXxcXHVEODNFW1xcdUREMEQtXFx1REQzQVxcdUREM0MtXFx1REQ0NVxcdURENDctXFx1REQ3MVxcdURENzMtXFx1REQ3NlxcdUREN0EtXFx1RERBMlxcdUREQTUtXFx1RERBQVxcdUREQUUtXFx1RERDQVxcdUREQ0QtXFx1RERGRlxcdURFNzAtXFx1REU3M1xcdURFNzgtXFx1REU3QVxcdURFODAtXFx1REU4MlxcdURFOTAtXFx1REU5NV0pXFx1RkUwRnwoPzpbXFx1MjYxRFxcdTI2RjlcXHUyNzBBLVxcdTI3MERdfFxcdUQ4M0NbXFx1REY4NVxcdURGQzItXFx1REZDNFxcdURGQzdcXHVERkNBLVxcdURGQ0NdfFxcdUQ4M0RbXFx1REM0MlxcdURDNDNcXHVEQzQ2LVxcdURDNTBcXHVEQzY2LVxcdURDNzhcXHVEQzdDXFx1REM4MS1cXHVEQzgzXFx1REM4NS1cXHVEQzg3XFx1REM4RlxcdURDOTFcXHVEQ0FBXFx1REQ3NFxcdURENzVcXHVERDdBXFx1REQ5MFxcdUREOTVcXHVERDk2XFx1REU0NS1cXHVERTQ3XFx1REU0Qi1cXHVERTRGXFx1REVBM1xcdURFQjQtXFx1REVCNlxcdURFQzBcXHVERUNDXXxcXHVEODNFW1xcdUREMEZcXHVERDE4LVxcdUREMUZcXHVERDI2XFx1REQzMC1cXHVERDM5XFx1REQzQy1cXHVERDNFXFx1RERCNVxcdUREQjZcXHVEREI4XFx1RERCOVxcdUREQkJcXHVERENELVxcdUREQ0ZcXHVEREQxLVxcdURERERdKS9nO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG5jb25zdCBzdHJpcEFuc2kgPSByZXF1aXJlKCdzdHJpcC1hbnNpJyk7XG5jb25zdCBpc0Z1bGx3aWR0aENvZGVQb2ludCA9IHJlcXVpcmUoJ2lzLWZ1bGx3aWR0aC1jb2RlLXBvaW50Jyk7XG5jb25zdCBlbW9qaVJlZ2V4ID0gcmVxdWlyZSgnZW1vamktcmVnZXgnKTtcblxuY29uc3Qgc3RyaW5nV2lkdGggPSBzdHJpbmcgPT4ge1xuXHRpZiAodHlwZW9mIHN0cmluZyAhPT0gJ3N0cmluZycgfHwgc3RyaW5nLmxlbmd0aCA9PT0gMCkge1xuXHRcdHJldHVybiAwO1xuXHR9XG5cblx0c3RyaW5nID0gc3RyaXBBbnNpKHN0cmluZyk7XG5cblx0aWYgKHN0cmluZy5sZW5ndGggPT09IDApIHtcblx0XHRyZXR1cm4gMDtcblx0fVxuXG5cdHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKGVtb2ppUmVnZXgoKSwgJyAgJyk7XG5cblx0bGV0IHdpZHRoID0gMDtcblxuXHRmb3IgKGxldCBpID0gMDsgaSA8IHN0cmluZy5sZW5ndGg7IGkrKykge1xuXHRcdGNvbnN0IGNvZGUgPSBzdHJpbmcuY29kZVBvaW50QXQoaSk7XG5cblx0XHQvLyBJZ25vcmUgY29udHJvbCBjaGFyYWN0ZXJzXG5cdFx0aWYgKGNvZGUgPD0gMHgxRiB8fCAoY29kZSA+PSAweDdGICYmIGNvZGUgPD0gMHg5RikpIHtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdC8vIElnbm9yZSBjb21iaW5pbmcgY2hhcmFjdGVyc1xuXHRcdGlmIChjb2RlID49IDB4MzAwICYmIGNvZGUgPD0gMHgzNkYpIHtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdC8vIFN1cnJvZ2F0ZXNcblx0XHRpZiAoY29kZSA+IDB4RkZGRikge1xuXHRcdFx0aSsrO1xuXHRcdH1cblxuXHRcdHdpZHRoICs9IGlzRnVsbHdpZHRoQ29kZVBvaW50KGNvZGUpID8gMiA6IDE7XG5cdH1cblxuXHRyZXR1cm4gd2lkdGg7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHN0cmluZ1dpZHRoO1xuLy8gVE9ETzogcmVtb3ZlIHRoaXMgaW4gdGhlIG5leHQgbWFqb3IgdmVyc2lvblxubW9kdWxlLmV4cG9ydHMuZGVmYXVsdCA9IHN0cmluZ1dpZHRoO1xuIiwgIid1c2Ugc3RyaWN0JztcbmNvbnN0IHN0cmluZ1dpZHRoID0gcmVxdWlyZSgnc3RyaW5nLXdpZHRoJyk7XG5jb25zdCBzdHJpcEFuc2kgPSByZXF1aXJlKCdzdHJpcC1hbnNpJyk7XG5jb25zdCBhbnNpU3R5bGVzID0gcmVxdWlyZSgnYW5zaS1zdHlsZXMnKTtcblxuY29uc3QgRVNDQVBFUyA9IG5ldyBTZXQoW1xuXHQnXFx1MDAxQicsXG5cdCdcXHUwMDlCJ1xuXSk7XG5cbmNvbnN0IEVORF9DT0RFID0gMzk7XG5cbmNvbnN0IEFOU0lfRVNDQVBFX0JFTEwgPSAnXFx1MDAwNyc7XG5jb25zdCBBTlNJX0NTSSA9ICdbJztcbmNvbnN0IEFOU0lfT1NDID0gJ10nO1xuY29uc3QgQU5TSV9TR1JfVEVSTUlOQVRPUiA9ICdtJztcbmNvbnN0IEFOU0lfRVNDQVBFX0xJTksgPSBgJHtBTlNJX09TQ304OztgO1xuXG5jb25zdCB3cmFwQW5zaSA9IGNvZGUgPT4gYCR7RVNDQVBFUy52YWx1ZXMoKS5uZXh0KCkudmFsdWV9JHtBTlNJX0NTSX0ke2NvZGV9JHtBTlNJX1NHUl9URVJNSU5BVE9SfWA7XG5jb25zdCB3cmFwQW5zaUh5cGVybGluayA9IHVyaSA9PiBgJHtFU0NBUEVTLnZhbHVlcygpLm5leHQoKS52YWx1ZX0ke0FOU0lfRVNDQVBFX0xJTkt9JHt1cml9JHtBTlNJX0VTQ0FQRV9CRUxMfWA7XG5cbi8vIENhbGN1bGF0ZSB0aGUgbGVuZ3RoIG9mIHdvcmRzIHNwbGl0IG9uICcgJywgaWdub3Jpbmdcbi8vIHRoZSBleHRyYSBjaGFyYWN0ZXJzIGFkZGVkIGJ5IGFuc2kgZXNjYXBlIGNvZGVzXG5jb25zdCB3b3JkTGVuZ3RocyA9IHN0cmluZyA9PiBzdHJpbmcuc3BsaXQoJyAnKS5tYXAoY2hhcmFjdGVyID0+IHN0cmluZ1dpZHRoKGNoYXJhY3RlcikpO1xuXG4vLyBXcmFwIGEgbG9uZyB3b3JkIGFjcm9zcyBtdWx0aXBsZSByb3dzXG4vLyBBbnNpIGVzY2FwZSBjb2RlcyBkbyBub3QgY291bnQgdG93YXJkcyBsZW5ndGhcbmNvbnN0IHdyYXBXb3JkID0gKHJvd3MsIHdvcmQsIGNvbHVtbnMpID0+IHtcblx0Y29uc3QgY2hhcmFjdGVycyA9IFsuLi53b3JkXTtcblxuXHRsZXQgaXNJbnNpZGVFc2NhcGUgPSBmYWxzZTtcblx0bGV0IGlzSW5zaWRlTGlua0VzY2FwZSA9IGZhbHNlO1xuXHRsZXQgdmlzaWJsZSA9IHN0cmluZ1dpZHRoKHN0cmlwQW5zaShyb3dzW3Jvd3MubGVuZ3RoIC0gMV0pKTtcblxuXHRmb3IgKGNvbnN0IFtpbmRleCwgY2hhcmFjdGVyXSBvZiBjaGFyYWN0ZXJzLmVudHJpZXMoKSkge1xuXHRcdGNvbnN0IGNoYXJhY3Rlckxlbmd0aCA9IHN0cmluZ1dpZHRoKGNoYXJhY3Rlcik7XG5cblx0XHRpZiAodmlzaWJsZSArIGNoYXJhY3Rlckxlbmd0aCA8PSBjb2x1bW5zKSB7XG5cdFx0XHRyb3dzW3Jvd3MubGVuZ3RoIC0gMV0gKz0gY2hhcmFjdGVyO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyb3dzLnB1c2goY2hhcmFjdGVyKTtcblx0XHRcdHZpc2libGUgPSAwO1xuXHRcdH1cblxuXHRcdGlmIChFU0NBUEVTLmhhcyhjaGFyYWN0ZXIpKSB7XG5cdFx0XHRpc0luc2lkZUVzY2FwZSA9IHRydWU7XG5cdFx0XHRpc0luc2lkZUxpbmtFc2NhcGUgPSBjaGFyYWN0ZXJzLnNsaWNlKGluZGV4ICsgMSkuam9pbignJykuc3RhcnRzV2l0aChBTlNJX0VTQ0FQRV9MSU5LKTtcblx0XHR9XG5cblx0XHRpZiAoaXNJbnNpZGVFc2NhcGUpIHtcblx0XHRcdGlmIChpc0luc2lkZUxpbmtFc2NhcGUpIHtcblx0XHRcdFx0aWYgKGNoYXJhY3RlciA9PT0gQU5TSV9FU0NBUEVfQkVMTCkge1xuXHRcdFx0XHRcdGlzSW5zaWRlRXNjYXBlID0gZmFsc2U7XG5cdFx0XHRcdFx0aXNJbnNpZGVMaW5rRXNjYXBlID0gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoY2hhcmFjdGVyID09PSBBTlNJX1NHUl9URVJNSU5BVE9SKSB7XG5cdFx0XHRcdGlzSW5zaWRlRXNjYXBlID0gZmFsc2U7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdHZpc2libGUgKz0gY2hhcmFjdGVyTGVuZ3RoO1xuXG5cdFx0aWYgKHZpc2libGUgPT09IGNvbHVtbnMgJiYgaW5kZXggPCBjaGFyYWN0ZXJzLmxlbmd0aCAtIDEpIHtcblx0XHRcdHJvd3MucHVzaCgnJyk7XG5cdFx0XHR2aXNpYmxlID0gMDtcblx0XHR9XG5cdH1cblxuXHQvLyBJdCdzIHBvc3NpYmxlIHRoYXQgdGhlIGxhc3Qgcm93IHdlIGNvcHkgb3ZlciBpcyBvbmx5XG5cdC8vIGFuc2kgZXNjYXBlIGNoYXJhY3RlcnMsIGhhbmRsZSB0aGlzIGVkZ2UtY2FzZVxuXHRpZiAoIXZpc2libGUgJiYgcm93c1tyb3dzLmxlbmd0aCAtIDFdLmxlbmd0aCA+IDAgJiYgcm93cy5sZW5ndGggPiAxKSB7XG5cdFx0cm93c1tyb3dzLmxlbmd0aCAtIDJdICs9IHJvd3MucG9wKCk7XG5cdH1cbn07XG5cbi8vIFRyaW1zIHNwYWNlcyBmcm9tIGEgc3RyaW5nIGlnbm9yaW5nIGludmlzaWJsZSBzZXF1ZW5jZXNcbmNvbnN0IHN0cmluZ1Zpc2libGVUcmltU3BhY2VzUmlnaHQgPSBzdHJpbmcgPT4ge1xuXHRjb25zdCB3b3JkcyA9IHN0cmluZy5zcGxpdCgnICcpO1xuXHRsZXQgbGFzdCA9IHdvcmRzLmxlbmd0aDtcblxuXHR3aGlsZSAobGFzdCA+IDApIHtcblx0XHRpZiAoc3RyaW5nV2lkdGgod29yZHNbbGFzdCAtIDFdKSA+IDApIHtcblx0XHRcdGJyZWFrO1xuXHRcdH1cblxuXHRcdGxhc3QtLTtcblx0fVxuXG5cdGlmIChsYXN0ID09PSB3b3Jkcy5sZW5ndGgpIHtcblx0XHRyZXR1cm4gc3RyaW5nO1xuXHR9XG5cblx0cmV0dXJuIHdvcmRzLnNsaWNlKDAsIGxhc3QpLmpvaW4oJyAnKSArIHdvcmRzLnNsaWNlKGxhc3QpLmpvaW4oJycpO1xufTtcblxuLy8gVGhlIHdyYXAtYW5zaSBtb2R1bGUgY2FuIGJlIGludm9rZWQgaW4gZWl0aGVyICdoYXJkJyBvciAnc29mdCcgd3JhcCBtb2RlXG4vL1xuLy8gJ2hhcmQnIHdpbGwgbmV2ZXIgYWxsb3cgYSBzdHJpbmcgdG8gdGFrZSB1cCBtb3JlIHRoYW4gY29sdW1ucyBjaGFyYWN0ZXJzXG4vL1xuLy8gJ3NvZnQnIGFsbG93cyBsb25nIHdvcmRzIHRvIGV4cGFuZCBwYXN0IHRoZSBjb2x1bW4gbGVuZ3RoXG5jb25zdCBleGVjID0gKHN0cmluZywgY29sdW1ucywgb3B0aW9ucyA9IHt9KSA9PiB7XG5cdGlmIChvcHRpb25zLnRyaW0gIT09IGZhbHNlICYmIHN0cmluZy50cmltKCkgPT09ICcnKSB7XG5cdFx0cmV0dXJuICcnO1xuXHR9XG5cblx0bGV0IHJldHVyblZhbHVlID0gJyc7XG5cdGxldCBlc2NhcGVDb2RlO1xuXHRsZXQgZXNjYXBlVXJsO1xuXG5cdGNvbnN0IGxlbmd0aHMgPSB3b3JkTGVuZ3RocyhzdHJpbmcpO1xuXHRsZXQgcm93cyA9IFsnJ107XG5cblx0Zm9yIChjb25zdCBbaW5kZXgsIHdvcmRdIG9mIHN0cmluZy5zcGxpdCgnICcpLmVudHJpZXMoKSkge1xuXHRcdGlmIChvcHRpb25zLnRyaW0gIT09IGZhbHNlKSB7XG5cdFx0XHRyb3dzW3Jvd3MubGVuZ3RoIC0gMV0gPSByb3dzW3Jvd3MubGVuZ3RoIC0gMV0udHJpbVN0YXJ0KCk7XG5cdFx0fVxuXG5cdFx0bGV0IHJvd0xlbmd0aCA9IHN0cmluZ1dpZHRoKHJvd3Nbcm93cy5sZW5ndGggLSAxXSk7XG5cblx0XHRpZiAoaW5kZXggIT09IDApIHtcblx0XHRcdGlmIChyb3dMZW5ndGggPj0gY29sdW1ucyAmJiAob3B0aW9ucy53b3JkV3JhcCA9PT0gZmFsc2UgfHwgb3B0aW9ucy50cmltID09PSBmYWxzZSkpIHtcblx0XHRcdFx0Ly8gSWYgd2Ugc3RhcnQgd2l0aCBhIG5ldyB3b3JkIGJ1dCB0aGUgY3VycmVudCByb3cgbGVuZ3RoIGVxdWFscyB0aGUgbGVuZ3RoIG9mIHRoZSBjb2x1bW5zLCBhZGQgYSBuZXcgcm93XG5cdFx0XHRcdHJvd3MucHVzaCgnJyk7XG5cdFx0XHRcdHJvd0xlbmd0aCA9IDA7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChyb3dMZW5ndGggPiAwIHx8IG9wdGlvbnMudHJpbSA9PT0gZmFsc2UpIHtcblx0XHRcdFx0cm93c1tyb3dzLmxlbmd0aCAtIDFdICs9ICcgJztcblx0XHRcdFx0cm93TGVuZ3RoKys7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gSW4gJ2hhcmQnIHdyYXAgbW9kZSwgdGhlIGxlbmd0aCBvZiBhIGxpbmUgaXMgbmV2ZXIgYWxsb3dlZCB0byBleHRlbmQgcGFzdCAnY29sdW1ucydcblx0XHRpZiAob3B0aW9ucy5oYXJkICYmIGxlbmd0aHNbaW5kZXhdID4gY29sdW1ucykge1xuXHRcdFx0Y29uc3QgcmVtYWluaW5nQ29sdW1ucyA9IChjb2x1bW5zIC0gcm93TGVuZ3RoKTtcblx0XHRcdGNvbnN0IGJyZWFrc1N0YXJ0aW5nVGhpc0xpbmUgPSAxICsgTWF0aC5mbG9vcigobGVuZ3Roc1tpbmRleF0gLSByZW1haW5pbmdDb2x1bW5zIC0gMSkgLyBjb2x1bW5zKTtcblx0XHRcdGNvbnN0IGJyZWFrc1N0YXJ0aW5nTmV4dExpbmUgPSBNYXRoLmZsb29yKChsZW5ndGhzW2luZGV4XSAtIDEpIC8gY29sdW1ucyk7XG5cdFx0XHRpZiAoYnJlYWtzU3RhcnRpbmdOZXh0TGluZSA8IGJyZWFrc1N0YXJ0aW5nVGhpc0xpbmUpIHtcblx0XHRcdFx0cm93cy5wdXNoKCcnKTtcblx0XHRcdH1cblxuXHRcdFx0d3JhcFdvcmQocm93cywgd29yZCwgY29sdW1ucyk7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRpZiAocm93TGVuZ3RoICsgbGVuZ3Roc1tpbmRleF0gPiBjb2x1bW5zICYmIHJvd0xlbmd0aCA+IDAgJiYgbGVuZ3Roc1tpbmRleF0gPiAwKSB7XG5cdFx0XHRpZiAob3B0aW9ucy53b3JkV3JhcCA9PT0gZmFsc2UgJiYgcm93TGVuZ3RoIDwgY29sdW1ucykge1xuXHRcdFx0XHR3cmFwV29yZChyb3dzLCB3b3JkLCBjb2x1bW5zKTtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdHJvd3MucHVzaCgnJyk7XG5cdFx0fVxuXG5cdFx0aWYgKHJvd0xlbmd0aCArIGxlbmd0aHNbaW5kZXhdID4gY29sdW1ucyAmJiBvcHRpb25zLndvcmRXcmFwID09PSBmYWxzZSkge1xuXHRcdFx0d3JhcFdvcmQocm93cywgd29yZCwgY29sdW1ucyk7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRyb3dzW3Jvd3MubGVuZ3RoIC0gMV0gKz0gd29yZDtcblx0fVxuXG5cdGlmIChvcHRpb25zLnRyaW0gIT09IGZhbHNlKSB7XG5cdFx0cm93cyA9IHJvd3MubWFwKHN0cmluZ1Zpc2libGVUcmltU3BhY2VzUmlnaHQpO1xuXHR9XG5cblx0Y29uc3QgcHJlID0gWy4uLnJvd3Muam9pbignXFxuJyldO1xuXG5cdGZvciAoY29uc3QgW2luZGV4LCBjaGFyYWN0ZXJdIG9mIHByZS5lbnRyaWVzKCkpIHtcblx0XHRyZXR1cm5WYWx1ZSArPSBjaGFyYWN0ZXI7XG5cblx0XHRpZiAoRVNDQVBFUy5oYXMoY2hhcmFjdGVyKSkge1xuXHRcdFx0Y29uc3Qge2dyb3Vwc30gPSBuZXcgUmVnRXhwKGAoPzpcXFxcJHtBTlNJX0NTSX0oPzxjb2RlPlxcXFxkKyltfFxcXFwke0FOU0lfRVNDQVBFX0xJTkt9KD88dXJpPi4qKSR7QU5TSV9FU0NBUEVfQkVMTH0pYCkuZXhlYyhwcmUuc2xpY2UoaW5kZXgpLmpvaW4oJycpKSB8fCB7Z3JvdXBzOiB7fX07XG5cdFx0XHRpZiAoZ3JvdXBzLmNvZGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRjb25zdCBjb2RlID0gTnVtYmVyLnBhcnNlRmxvYXQoZ3JvdXBzLmNvZGUpO1xuXHRcdFx0XHRlc2NhcGVDb2RlID0gY29kZSA9PT0gRU5EX0NPREUgPyB1bmRlZmluZWQgOiBjb2RlO1xuXHRcdFx0fSBlbHNlIGlmIChncm91cHMudXJpICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0ZXNjYXBlVXJsID0gZ3JvdXBzLnVyaS5sZW5ndGggPT09IDAgPyB1bmRlZmluZWQgOiBncm91cHMudXJpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGNvbnN0IGNvZGUgPSBhbnNpU3R5bGVzLmNvZGVzLmdldChOdW1iZXIoZXNjYXBlQ29kZSkpO1xuXG5cdFx0aWYgKHByZVtpbmRleCArIDFdID09PSAnXFxuJykge1xuXHRcdFx0aWYgKGVzY2FwZVVybCkge1xuXHRcdFx0XHRyZXR1cm5WYWx1ZSArPSB3cmFwQW5zaUh5cGVybGluaygnJyk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChlc2NhcGVDb2RlICYmIGNvZGUpIHtcblx0XHRcdFx0cmV0dXJuVmFsdWUgKz0gd3JhcEFuc2koY29kZSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChjaGFyYWN0ZXIgPT09ICdcXG4nKSB7XG5cdFx0XHRpZiAoZXNjYXBlQ29kZSAmJiBjb2RlKSB7XG5cdFx0XHRcdHJldHVyblZhbHVlICs9IHdyYXBBbnNpKGVzY2FwZUNvZGUpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoZXNjYXBlVXJsKSB7XG5cdFx0XHRcdHJldHVyblZhbHVlICs9IHdyYXBBbnNpSHlwZXJsaW5rKGVzY2FwZVVybCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHJldHVyblZhbHVlO1xufTtcblxuLy8gRm9yIGVhY2ggbmV3bGluZSwgaW52b2tlIHRoZSBtZXRob2Qgc2VwYXJhdGVseVxubW9kdWxlLmV4cG9ydHMgPSAoc3RyaW5nLCBjb2x1bW5zLCBvcHRpb25zKSA9PiB7XG5cdHJldHVybiBTdHJpbmcoc3RyaW5nKVxuXHRcdC5ub3JtYWxpemUoKVxuXHRcdC5yZXBsYWNlKC9cXHJcXG4vZywgJ1xcbicpXG5cdFx0LnNwbGl0KCdcXG4nKVxuXHRcdC5tYXAobGluZSA9PiBleGVjKGxpbmUsIGNvbHVtbnMsIG9wdGlvbnMpKVxuXHRcdC5qb2luKCdcXG4nKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBhbGlnbiA9IHtcbiAgICByaWdodDogYWxpZ25SaWdodCxcbiAgICBjZW50ZXI6IGFsaWduQ2VudGVyXG59O1xuY29uc3QgdG9wID0gMDtcbmNvbnN0IHJpZ2h0ID0gMTtcbmNvbnN0IGJvdHRvbSA9IDI7XG5jb25zdCBsZWZ0ID0gMztcbmNsYXNzIFVJIHtcbiAgICBjb25zdHJ1Y3RvcihvcHRzKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgdGhpcy53aWR0aCA9IG9wdHMud2lkdGg7XG4gICAgICAgIHRoaXMud3JhcCA9IChfYSA9IG9wdHMud3JhcCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogdHJ1ZTtcbiAgICAgICAgdGhpcy5yb3dzID0gW107XG4gICAgfVxuICAgIHNwYW4oLi4uYXJncykge1xuICAgICAgICBjb25zdCBjb2xzID0gdGhpcy5kaXYoLi4uYXJncyk7XG4gICAgICAgIGNvbHMuc3BhbiA9IHRydWU7XG4gICAgfVxuICAgIHJlc2V0T3V0cHV0KCkge1xuICAgICAgICB0aGlzLnJvd3MgPSBbXTtcbiAgICB9XG4gICAgZGl2KC4uLmFyZ3MpIHtcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmRpdignJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMud3JhcCAmJiB0aGlzLnNob3VsZEFwcGx5TGF5b3V0RFNMKC4uLmFyZ3MpICYmIHR5cGVvZiBhcmdzWzBdID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXBwbHlMYXlvdXREU0woYXJnc1swXSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29scyA9IGFyZ3MubWFwKGFyZyA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGFyZyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb2xGcm9tU3RyaW5nKGFyZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYXJnO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5yb3dzLnB1c2goY29scyk7XG4gICAgICAgIHJldHVybiBjb2xzO1xuICAgIH1cbiAgICBzaG91bGRBcHBseUxheW91dERTTCguLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiBhcmdzLmxlbmd0aCA9PT0gMSAmJiB0eXBlb2YgYXJnc1swXSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICAgIC9bXFx0XFxuXS8udGVzdChhcmdzWzBdKTtcbiAgICB9XG4gICAgYXBwbHlMYXlvdXREU0woc3RyKSB7XG4gICAgICAgIGNvbnN0IHJvd3MgPSBzdHIuc3BsaXQoJ1xcbicpLm1hcChyb3cgPT4gcm93LnNwbGl0KCdcXHQnKSk7XG4gICAgICAgIGxldCBsZWZ0Q29sdW1uV2lkdGggPSAwO1xuICAgICAgICAvLyBzaW1wbGUgaGV1cmlzdGljIGZvciBsYXlvdXQsIG1ha2Ugc3VyZSB0aGVcbiAgICAgICAgLy8gc2Vjb25kIGNvbHVtbiBsaW5lcyB1cCBhbG9uZyB0aGUgbGVmdC1oYW5kLlxuICAgICAgICAvLyBkb24ndCBhbGxvdyB0aGUgZmlyc3QgY29sdW1uIHRvIHRha2UgdXAgbW9yZVxuICAgICAgICAvLyB0aGFuIDUwJSBvZiB0aGUgc2NyZWVuLlxuICAgICAgICByb3dzLmZvckVhY2goY29sdW1ucyA9PiB7XG4gICAgICAgICAgICBpZiAoY29sdW1ucy5sZW5ndGggPiAxICYmIG1peGluLnN0cmluZ1dpZHRoKGNvbHVtbnNbMF0pID4gbGVmdENvbHVtbldpZHRoKSB7XG4gICAgICAgICAgICAgICAgbGVmdENvbHVtbldpZHRoID0gTWF0aC5taW4oTWF0aC5mbG9vcih0aGlzLndpZHRoICogMC41KSwgbWl4aW4uc3RyaW5nV2lkdGgoY29sdW1uc1swXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgLy8gZ2VuZXJhdGUgYSB0YWJsZTpcbiAgICAgICAgLy8gIHJlcGxhY2luZyAnICcgd2l0aCBwYWRkaW5nIGNhbGN1bGF0aW9ucy5cbiAgICAgICAgLy8gIHVzaW5nIHRoZSBhbGdvcml0aG1pY2FsbHkgZ2VuZXJhdGVkIHdpZHRoLlxuICAgICAgICByb3dzLmZvckVhY2goY29sdW1ucyA9PiB7XG4gICAgICAgICAgICB0aGlzLmRpdiguLi5jb2x1bW5zLm1hcCgociwgaSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHRleHQ6IHIudHJpbSgpLFxuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiB0aGlzLm1lYXN1cmVQYWRkaW5nKHIpLFxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogKGkgPT09IDAgJiYgY29sdW1ucy5sZW5ndGggPiAxKSA/IGxlZnRDb2x1bW5XaWR0aCA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5yb3dzW3RoaXMucm93cy5sZW5ndGggLSAxXTtcbiAgICB9XG4gICAgY29sRnJvbVN0cmluZyh0ZXh0KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0ZXh0LFxuICAgICAgICAgICAgcGFkZGluZzogdGhpcy5tZWFzdXJlUGFkZGluZyh0ZXh0KVxuICAgICAgICB9O1xuICAgIH1cbiAgICBtZWFzdXJlUGFkZGluZyhzdHIpIHtcbiAgICAgICAgLy8gbWVhc3VyZSBwYWRkaW5nIHdpdGhvdXQgYW5zaSBlc2NhcGUgY29kZXNcbiAgICAgICAgY29uc3Qgbm9BbnNpID0gbWl4aW4uc3RyaXBBbnNpKHN0cik7XG4gICAgICAgIHJldHVybiBbMCwgbm9BbnNpLm1hdGNoKC9cXHMqJC8pWzBdLmxlbmd0aCwgMCwgbm9BbnNpLm1hdGNoKC9eXFxzKi8pWzBdLmxlbmd0aF07XG4gICAgfVxuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICBjb25zdCBsaW5lcyA9IFtdO1xuICAgICAgICB0aGlzLnJvd3MuZm9yRWFjaChyb3cgPT4ge1xuICAgICAgICAgICAgdGhpcy5yb3dUb1N0cmluZyhyb3csIGxpbmVzKTtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIGRvbid0IGRpc3BsYXkgYW55IGxpbmVzIHdpdGggdGhlXG4gICAgICAgIC8vIGhpZGRlbiBmbGFnIHNldC5cbiAgICAgICAgcmV0dXJuIGxpbmVzXG4gICAgICAgICAgICAuZmlsdGVyKGxpbmUgPT4gIWxpbmUuaGlkZGVuKVxuICAgICAgICAgICAgLm1hcChsaW5lID0+IGxpbmUudGV4dClcbiAgICAgICAgICAgIC5qb2luKCdcXG4nKTtcbiAgICB9XG4gICAgcm93VG9TdHJpbmcocm93LCBsaW5lcykge1xuICAgICAgICB0aGlzLnJhc3Rlcml6ZShyb3cpLmZvckVhY2goKHJyb3csIHIpID0+IHtcbiAgICAgICAgICAgIGxldCBzdHIgPSAnJztcbiAgICAgICAgICAgIHJyb3cuZm9yRWFjaCgoY29sLCBjKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyB3aWR0aCB9ID0gcm93W2NdOyAvLyB0aGUgd2lkdGggd2l0aCBwYWRkaW5nLlxuICAgICAgICAgICAgICAgIGNvbnN0IHdyYXBXaWR0aCA9IHRoaXMubmVnYXRlUGFkZGluZyhyb3dbY10pOyAvLyB0aGUgd2lkdGggd2l0aG91dCBwYWRkaW5nLlxuICAgICAgICAgICAgICAgIGxldCB0cyA9IGNvbDsgLy8gdGVtcG9yYXJ5IHN0cmluZyB1c2VkIGR1cmluZyBhbGlnbm1lbnQvcGFkZGluZy5cbiAgICAgICAgICAgICAgICBpZiAod3JhcFdpZHRoID4gbWl4aW4uc3RyaW5nV2lkdGgoY29sKSkge1xuICAgICAgICAgICAgICAgICAgICB0cyArPSAnICcucmVwZWF0KHdyYXBXaWR0aCAtIG1peGluLnN0cmluZ1dpZHRoKGNvbCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBhbGlnbiB0aGUgc3RyaW5nIHdpdGhpbiBpdHMgY29sdW1uLlxuICAgICAgICAgICAgICAgIGlmIChyb3dbY10uYWxpZ24gJiYgcm93W2NdLmFsaWduICE9PSAnbGVmdCcgJiYgdGhpcy53cmFwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZuID0gYWxpZ25bcm93W2NdLmFsaWduXTtcbiAgICAgICAgICAgICAgICAgICAgdHMgPSBmbih0cywgd3JhcFdpZHRoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1peGluLnN0cmluZ1dpZHRoKHRzKSA8IHdyYXBXaWR0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHMgKz0gJyAnLnJlcGVhdCgod2lkdGggfHwgMCkgLSBtaXhpbi5zdHJpbmdXaWR0aCh0cykgLSAxKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBhcHBseSBib3JkZXIgYW5kIHBhZGRpbmcgdG8gc3RyaW5nLlxuICAgICAgICAgICAgICAgIGNvbnN0IHBhZGRpbmcgPSByb3dbY10ucGFkZGluZyB8fCBbMCwgMCwgMCwgMF07XG4gICAgICAgICAgICAgICAgaWYgKHBhZGRpbmdbbGVmdF0pIHtcbiAgICAgICAgICAgICAgICAgICAgc3RyICs9ICcgJy5yZXBlYXQocGFkZGluZ1tsZWZ0XSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHN0ciArPSBhZGRCb3JkZXIocm93W2NdLCB0cywgJ3wgJyk7XG4gICAgICAgICAgICAgICAgc3RyICs9IHRzO1xuICAgICAgICAgICAgICAgIHN0ciArPSBhZGRCb3JkZXIocm93W2NdLCB0cywgJyB8Jyk7XG4gICAgICAgICAgICAgICAgaWYgKHBhZGRpbmdbcmlnaHRdKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0ciArPSAnICcucmVwZWF0KHBhZGRpbmdbcmlnaHRdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gaWYgcHJpb3Igcm93IGlzIHNwYW4sIHRyeSB0byByZW5kZXIgdGhlXG4gICAgICAgICAgICAgICAgLy8gY3VycmVudCByb3cgb24gdGhlIHByaW9yIGxpbmUuXG4gICAgICAgICAgICAgICAgaWYgKHIgPT09IDAgJiYgbGluZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBzdHIgPSB0aGlzLnJlbmRlcklubGluZShzdHIsIGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIHJlbW92ZSB0cmFpbGluZyB3aGl0ZXNwYWNlLlxuICAgICAgICAgICAgbGluZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgdGV4dDogc3RyLnJlcGxhY2UoLyArJC8sICcnKSxcbiAgICAgICAgICAgICAgICBzcGFuOiByb3cuc3BhblxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbGluZXM7XG4gICAgfVxuICAgIC8vIGlmIHRoZSBmdWxsICdzb3VyY2UnIGNhbiByZW5kZXIgaW5cbiAgICAvLyB0aGUgdGFyZ2V0IGxpbmUsIGRvIHNvLlxuICAgIHJlbmRlcklubGluZShzb3VyY2UsIHByZXZpb3VzTGluZSkge1xuICAgICAgICBjb25zdCBtYXRjaCA9IHNvdXJjZS5tYXRjaCgvXiAqLyk7XG4gICAgICAgIGNvbnN0IGxlYWRpbmdXaGl0ZXNwYWNlID0gbWF0Y2ggPyBtYXRjaFswXS5sZW5ndGggOiAwO1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBwcmV2aW91c0xpbmUudGV4dDtcbiAgICAgICAgY29uc3QgdGFyZ2V0VGV4dFdpZHRoID0gbWl4aW4uc3RyaW5nV2lkdGgodGFyZ2V0LnRyaW1SaWdodCgpKTtcbiAgICAgICAgaWYgKCFwcmV2aW91c0xpbmUuc3Bhbikge1xuICAgICAgICAgICAgcmV0dXJuIHNvdXJjZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBpZiB3ZSdyZSBub3QgYXBwbHlpbmcgd3JhcHBpbmcgbG9naWMsXG4gICAgICAgIC8vIGp1c3QgYWx3YXlzIGFwcGVuZCB0byB0aGUgc3Bhbi5cbiAgICAgICAgaWYgKCF0aGlzLndyYXApIHtcbiAgICAgICAgICAgIHByZXZpb3VzTGluZS5oaWRkZW4gPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIHRhcmdldCArIHNvdXJjZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobGVhZGluZ1doaXRlc3BhY2UgPCB0YXJnZXRUZXh0V2lkdGgpIHtcbiAgICAgICAgICAgIHJldHVybiBzb3VyY2U7XG4gICAgICAgIH1cbiAgICAgICAgcHJldmlvdXNMaW5lLmhpZGRlbiA9IHRydWU7XG4gICAgICAgIHJldHVybiB0YXJnZXQudHJpbVJpZ2h0KCkgKyAnICcucmVwZWF0KGxlYWRpbmdXaGl0ZXNwYWNlIC0gdGFyZ2V0VGV4dFdpZHRoKSArIHNvdXJjZS50cmltTGVmdCgpO1xuICAgIH1cbiAgICByYXN0ZXJpemUocm93KSB7XG4gICAgICAgIGNvbnN0IHJyb3dzID0gW107XG4gICAgICAgIGNvbnN0IHdpZHRocyA9IHRoaXMuY29sdW1uV2lkdGhzKHJvdyk7XG4gICAgICAgIGxldCB3cmFwcGVkO1xuICAgICAgICAvLyB3b3JkIHdyYXAgYWxsIGNvbHVtbnMsIGFuZCBjcmVhdGVcbiAgICAgICAgLy8gYSBkYXRhLXN0cnVjdHVyZSB0aGF0IGlzIGVhc3kgdG8gcmFzdGVyaXplLlxuICAgICAgICByb3cuZm9yRWFjaCgoY29sLCBjKSA9PiB7XG4gICAgICAgICAgICAvLyBsZWF2ZSByb29tIGZvciBsZWZ0IGFuZCByaWdodCBwYWRkaW5nLlxuICAgICAgICAgICAgY29sLndpZHRoID0gd2lkdGhzW2NdO1xuICAgICAgICAgICAgaWYgKHRoaXMud3JhcCkge1xuICAgICAgICAgICAgICAgIHdyYXBwZWQgPSBtaXhpbi53cmFwKGNvbC50ZXh0LCB0aGlzLm5lZ2F0ZVBhZGRpbmcoY29sKSwgeyBoYXJkOiB0cnVlIH0pLnNwbGl0KCdcXG4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHdyYXBwZWQgPSBjb2wudGV4dC5zcGxpdCgnXFxuJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY29sLmJvcmRlcikge1xuICAgICAgICAgICAgICAgIHdyYXBwZWQudW5zaGlmdCgnLicgKyAnLScucmVwZWF0KHRoaXMubmVnYXRlUGFkZGluZyhjb2wpICsgMikgKyAnLicpO1xuICAgICAgICAgICAgICAgIHdyYXBwZWQucHVzaChcIidcIiArICctJy5yZXBlYXQodGhpcy5uZWdhdGVQYWRkaW5nKGNvbCkgKyAyKSArIFwiJ1wiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGFkZCB0b3AgYW5kIGJvdHRvbSBwYWRkaW5nLlxuICAgICAgICAgICAgaWYgKGNvbC5wYWRkaW5nKSB7XG4gICAgICAgICAgICAgICAgd3JhcHBlZC51bnNoaWZ0KC4uLm5ldyBBcnJheShjb2wucGFkZGluZ1t0b3BdIHx8IDApLmZpbGwoJycpKTtcbiAgICAgICAgICAgICAgICB3cmFwcGVkLnB1c2goLi4ubmV3IEFycmF5KGNvbC5wYWRkaW5nW2JvdHRvbV0gfHwgMCkuZmlsbCgnJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd3JhcHBlZC5mb3JFYWNoKChzdHIsIHIpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXJyb3dzW3JdKSB7XG4gICAgICAgICAgICAgICAgICAgIHJyb3dzLnB1c2goW10pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBycm93ID0gcnJvd3Nbcl07XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJyb3dbaV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcnJvdy5wdXNoKCcnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBycm93LnB1c2goc3RyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJyb3dzO1xuICAgIH1cbiAgICBuZWdhdGVQYWRkaW5nKGNvbCkge1xuICAgICAgICBsZXQgd3JhcFdpZHRoID0gY29sLndpZHRoIHx8IDA7XG4gICAgICAgIGlmIChjb2wucGFkZGluZykge1xuICAgICAgICAgICAgd3JhcFdpZHRoIC09IChjb2wucGFkZGluZ1tsZWZ0XSB8fCAwKSArIChjb2wucGFkZGluZ1tyaWdodF0gfHwgMCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbC5ib3JkZXIpIHtcbiAgICAgICAgICAgIHdyYXBXaWR0aCAtPSA0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB3cmFwV2lkdGg7XG4gICAgfVxuICAgIGNvbHVtbldpZHRocyhyb3cpIHtcbiAgICAgICAgaWYgKCF0aGlzLndyYXApIHtcbiAgICAgICAgICAgIHJldHVybiByb3cubWFwKGNvbCA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbC53aWR0aCB8fCBtaXhpbi5zdHJpbmdXaWR0aChjb2wudGV4dCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgdW5zZXQgPSByb3cubGVuZ3RoO1xuICAgICAgICBsZXQgcmVtYWluaW5nV2lkdGggPSB0aGlzLndpZHRoO1xuICAgICAgICAvLyBjb2x1bW4gd2lkdGhzIGNhbiBiZSBzZXQgaW4gY29uZmlnLlxuICAgICAgICBjb25zdCB3aWR0aHMgPSByb3cubWFwKGNvbCA9PiB7XG4gICAgICAgICAgICBpZiAoY29sLndpZHRoKSB7XG4gICAgICAgICAgICAgICAgdW5zZXQtLTtcbiAgICAgICAgICAgICAgICByZW1haW5pbmdXaWR0aCAtPSBjb2wud2lkdGg7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbC53aWR0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBhbnkgdW5zZXQgd2lkdGhzIHNob3VsZCBiZSBjYWxjdWxhdGVkLlxuICAgICAgICBjb25zdCB1bnNldFdpZHRoID0gdW5zZXQgPyBNYXRoLmZsb29yKHJlbWFpbmluZ1dpZHRoIC8gdW5zZXQpIDogMDtcbiAgICAgICAgcmV0dXJuIHdpZHRocy5tYXAoKHcsIGkpID0+IHtcbiAgICAgICAgICAgIGlmICh3ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5tYXgodW5zZXRXaWR0aCwgX21pbldpZHRoKHJvd1tpXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHc7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGFkZEJvcmRlcihjb2wsIHRzLCBzdHlsZSkge1xuICAgIGlmIChjb2wuYm9yZGVyKSB7XG4gICAgICAgIGlmICgvWy4nXS0rWy4nXS8udGVzdCh0cykpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgICBpZiAodHMudHJpbSgpLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHN0eWxlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnICAnO1xuICAgIH1cbiAgICByZXR1cm4gJyc7XG59XG4vLyBjYWxjdWxhdGVzIHRoZSBtaW5pbXVtIHdpZHRoIG9mXG4vLyBhIGNvbHVtbiwgYmFzZWQgb24gcGFkZGluZyBwcmVmZXJlbmNlcy5cbmZ1bmN0aW9uIF9taW5XaWR0aChjb2wpIHtcbiAgICBjb25zdCBwYWRkaW5nID0gY29sLnBhZGRpbmcgfHwgW107XG4gICAgY29uc3QgbWluV2lkdGggPSAxICsgKHBhZGRpbmdbbGVmdF0gfHwgMCkgKyAocGFkZGluZ1tyaWdodF0gfHwgMCk7XG4gICAgaWYgKGNvbC5ib3JkZXIpIHtcbiAgICAgICAgcmV0dXJuIG1pbldpZHRoICsgNDtcbiAgICB9XG4gICAgcmV0dXJuIG1pbldpZHRoO1xufVxuZnVuY3Rpb24gZ2V0V2luZG93V2lkdGgoKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQ6IGRlcGVuZHMgb24gdGVybWluYWwgKi9cbiAgICBpZiAodHlwZW9mIHByb2Nlc3MgPT09ICdvYmplY3QnICYmIHByb2Nlc3Muc3Rkb3V0ICYmIHByb2Nlc3Muc3Rkb3V0LmNvbHVtbnMpIHtcbiAgICAgICAgcmV0dXJuIHByb2Nlc3Muc3Rkb3V0LmNvbHVtbnM7XG4gICAgfVxuICAgIHJldHVybiA4MDtcbn1cbmZ1bmN0aW9uIGFsaWduUmlnaHQoc3RyLCB3aWR0aCkge1xuICAgIHN0ciA9IHN0ci50cmltKCk7XG4gICAgY29uc3Qgc3RyV2lkdGggPSBtaXhpbi5zdHJpbmdXaWR0aChzdHIpO1xuICAgIGlmIChzdHJXaWR0aCA8IHdpZHRoKSB7XG4gICAgICAgIHJldHVybiAnICcucmVwZWF0KHdpZHRoIC0gc3RyV2lkdGgpICsgc3RyO1xuICAgIH1cbiAgICByZXR1cm4gc3RyO1xufVxuZnVuY3Rpb24gYWxpZ25DZW50ZXIoc3RyLCB3aWR0aCkge1xuICAgIHN0ciA9IHN0ci50cmltKCk7XG4gICAgY29uc3Qgc3RyV2lkdGggPSBtaXhpbi5zdHJpbmdXaWR0aChzdHIpO1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgaWYgKHN0cldpZHRoID49IHdpZHRoKSB7XG4gICAgICAgIHJldHVybiBzdHI7XG4gICAgfVxuICAgIHJldHVybiAnICcucmVwZWF0KCh3aWR0aCAtIHN0cldpZHRoKSA+PiAxKSArIHN0cjtcbn1cbmxldCBtaXhpbjtcbmZ1bmN0aW9uIGNsaXVpKG9wdHMsIF9taXhpbikge1xuICAgIG1peGluID0gX21peGluO1xuICAgIHJldHVybiBuZXcgVUkoe1xuICAgICAgICB3aWR0aDogKG9wdHMgPT09IG51bGwgfHwgb3B0cyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0cy53aWR0aCkgfHwgZ2V0V2luZG93V2lkdGgoKSxcbiAgICAgICAgd3JhcDogb3B0cyA9PT0gbnVsbCB8fCBvcHRzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRzLndyYXBcbiAgICB9KTtcbn1cblxuLy8gQm9vdHN0cmFwIGNsaXVpIHdpdGggQ29tbW9uSlMgZGVwZW5kZW5jaWVzOlxuY29uc3Qgc3RyaW5nV2lkdGggPSByZXF1aXJlKCdzdHJpbmctd2lkdGgnKTtcbmNvbnN0IHN0cmlwQW5zaSA9IHJlcXVpcmUoJ3N0cmlwLWFuc2knKTtcbmNvbnN0IHdyYXAgPSByZXF1aXJlKCd3cmFwLWFuc2knKTtcbmZ1bmN0aW9uIHVpKG9wdHMpIHtcbiAgICByZXR1cm4gY2xpdWkob3B0cywge1xuICAgICAgICBzdHJpbmdXaWR0aCxcbiAgICAgICAgc3RyaXBBbnNpLFxuICAgICAgICB3cmFwXG4gICAgfSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdWk7XG4iLCAiY29uc3QgeyBkaXJuYW1lLCByZXNvbHZlIH0gPSByZXF1aXJlKCdwYXRoJyk7XG5jb25zdCB7IHJlYWRkaXJTeW5jLCBzdGF0U3luYyB9ID0gcmVxdWlyZSgnZnMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc3RhcnQsIGNhbGxiYWNrKSB7XG5cdGxldCBkaXIgPSByZXNvbHZlKCcuJywgc3RhcnQpO1xuXHRsZXQgdG1wLCBzdGF0cyA9IHN0YXRTeW5jKGRpcik7XG5cblx0aWYgKCFzdGF0cy5pc0RpcmVjdG9yeSgpKSB7XG5cdFx0ZGlyID0gZGlybmFtZShkaXIpO1xuXHR9XG5cblx0d2hpbGUgKHRydWUpIHtcblx0XHR0bXAgPSBjYWxsYmFjayhkaXIsIHJlYWRkaXJTeW5jKGRpcikpO1xuXHRcdGlmICh0bXApIHJldHVybiByZXNvbHZlKGRpciwgdG1wKTtcblx0XHRkaXIgPSBkaXJuYW1lKHRtcCA9IGRpcik7XG5cdFx0aWYgKHRtcCA9PT0gZGlyKSBicmVhaztcblx0fVxufVxuIiwgbnVsbCwgIid1c2Ugc3RyaWN0JztcblxudmFyIGZzID0gcmVxdWlyZSgnZnMnKSxcbiAgam9pbiA9IHJlcXVpcmUoJ3BhdGgnKS5qb2luLFxuICByZXNvbHZlID0gcmVxdWlyZSgncGF0aCcpLnJlc29sdmUsXG4gIGRpcm5hbWUgPSByZXF1aXJlKCdwYXRoJykuZGlybmFtZSxcbiAgZGVmYXVsdE9wdGlvbnMgPSB7XG4gICAgZXh0ZW5zaW9uczogWydqcycsICdqc29uJywgJ2NvZmZlZSddLFxuICAgIHJlY3Vyc2U6IHRydWUsXG4gICAgcmVuYW1lOiBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgcmV0dXJuIG5hbWU7XG4gICAgfSxcbiAgICB2aXNpdDogZnVuY3Rpb24gKG9iaikge1xuICAgICAgcmV0dXJuIG9iajtcbiAgICB9XG4gIH07XG5cbmZ1bmN0aW9uIGNoZWNrRmlsZUluY2x1c2lvbihwYXRoLCBmaWxlbmFtZSwgb3B0aW9ucykge1xuICByZXR1cm4gKFxuICAgIC8vIHZlcmlmeSBmaWxlIGhhcyB2YWxpZCBleHRlbnNpb25cbiAgICAobmV3IFJlZ0V4cCgnXFxcXC4oJyArIG9wdGlvbnMuZXh0ZW5zaW9ucy5qb2luKCd8JykgKyAnKSQnLCAnaScpLnRlc3QoZmlsZW5hbWUpKSAmJlxuXG4gICAgLy8gaWYgb3B0aW9ucy5pbmNsdWRlIGlzIGEgUmVnRXhwLCBldmFsdWF0ZSBpdCBhbmQgbWFrZSBzdXJlIHRoZSBwYXRoIHBhc3Nlc1xuICAgICEob3B0aW9ucy5pbmNsdWRlICYmIG9wdGlvbnMuaW5jbHVkZSBpbnN0YW5jZW9mIFJlZ0V4cCAmJiAhb3B0aW9ucy5pbmNsdWRlLnRlc3QocGF0aCkpICYmXG5cbiAgICAvLyBpZiBvcHRpb25zLmluY2x1ZGUgaXMgYSBmdW5jdGlvbiwgZXZhbHVhdGUgaXQgYW5kIG1ha2Ugc3VyZSB0aGUgcGF0aCBwYXNzZXNcbiAgICAhKG9wdGlvbnMuaW5jbHVkZSAmJiB0eXBlb2Ygb3B0aW9ucy5pbmNsdWRlID09PSAnZnVuY3Rpb24nICYmICFvcHRpb25zLmluY2x1ZGUocGF0aCwgZmlsZW5hbWUpKSAmJlxuXG4gICAgLy8gaWYgb3B0aW9ucy5leGNsdWRlIGlzIGEgUmVnRXhwLCBldmFsdWF0ZSBpdCBhbmQgbWFrZSBzdXJlIHRoZSBwYXRoIGRvZXNuJ3QgcGFzc1xuICAgICEob3B0aW9ucy5leGNsdWRlICYmIG9wdGlvbnMuZXhjbHVkZSBpbnN0YW5jZW9mIFJlZ0V4cCAmJiBvcHRpb25zLmV4Y2x1ZGUudGVzdChwYXRoKSkgJiZcblxuICAgIC8vIGlmIG9wdGlvbnMuZXhjbHVkZSBpcyBhIGZ1bmN0aW9uLCBldmFsdWF0ZSBpdCBhbmQgbWFrZSBzdXJlIHRoZSBwYXRoIGRvZXNuJ3QgcGFzc1xuICAgICEob3B0aW9ucy5leGNsdWRlICYmIHR5cGVvZiBvcHRpb25zLmV4Y2x1ZGUgPT09ICdmdW5jdGlvbicgJiYgb3B0aW9ucy5leGNsdWRlKHBhdGgsIGZpbGVuYW1lKSlcbiAgKTtcbn1cblxuZnVuY3Rpb24gcmVxdWlyZURpcmVjdG9yeShtLCBwYXRoLCBvcHRpb25zKSB7XG4gIHZhciByZXR2YWwgPSB7fTtcblxuICAvLyBwYXRoIGlzIG9wdGlvbmFsXG4gIGlmIChwYXRoICYmICFvcHRpb25zICYmIHR5cGVvZiBwYXRoICE9PSAnc3RyaW5nJykge1xuICAgIG9wdGlvbnMgPSBwYXRoO1xuICAgIHBhdGggPSBudWxsO1xuICB9XG5cbiAgLy8gZGVmYXVsdCBvcHRpb25zXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBmb3IgKHZhciBwcm9wIGluIGRlZmF1bHRPcHRpb25zKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zW3Byb3BdID09PSAndW5kZWZpbmVkJykge1xuICAgICAgb3B0aW9uc1twcm9wXSA9IGRlZmF1bHRPcHRpb25zW3Byb3BdO1xuICAgIH1cbiAgfVxuXG4gIC8vIGlmIG5vIHBhdGggd2FzIHBhc3NlZCBpbiwgYXNzdW1lIHRoZSBlcXVpdmVsYW50IG9mIF9fZGlybmFtZSBmcm9tIGNhbGxlclxuICAvLyBvdGhlcndpc2UsIHJlc29sdmUgcGF0aCByZWxhdGl2ZSB0byB0aGUgZXF1aXZhbGVudCBvZiBfX2Rpcm5hbWVcbiAgcGF0aCA9ICFwYXRoID8gZGlybmFtZShtLmZpbGVuYW1lKSA6IHJlc29sdmUoZGlybmFtZShtLmZpbGVuYW1lKSwgcGF0aCk7XG5cbiAgLy8gZ2V0IHRoZSBwYXRoIG9mIGVhY2ggZmlsZSBpbiBzcGVjaWZpZWQgZGlyZWN0b3J5LCBhcHBlbmQgdG8gY3VycmVudCB0cmVlIG5vZGUsIHJlY3Vyc2VcbiAgZnMucmVhZGRpclN5bmMocGF0aCkuZm9yRWFjaChmdW5jdGlvbiAoZmlsZW5hbWUpIHtcbiAgICB2YXIgam9pbmVkID0gam9pbihwYXRoLCBmaWxlbmFtZSksXG4gICAgICBmaWxlcyxcbiAgICAgIGtleSxcbiAgICAgIG9iajtcblxuICAgIGlmIChmcy5zdGF0U3luYyhqb2luZWQpLmlzRGlyZWN0b3J5KCkgJiYgb3B0aW9ucy5yZWN1cnNlKSB7XG4gICAgICAvLyB0aGlzIG5vZGUgaXMgYSBkaXJlY3Rvcnk7IHJlY3Vyc2VcbiAgICAgIGZpbGVzID0gcmVxdWlyZURpcmVjdG9yeShtLCBqb2luZWQsIG9wdGlvbnMpO1xuICAgICAgLy8gZXhjbHVkZSBlbXB0eSBkaXJlY3Rvcmllc1xuICAgICAgaWYgKE9iamVjdC5rZXlzKGZpbGVzKS5sZW5ndGgpIHtcbiAgICAgICAgcmV0dmFsW29wdGlvbnMucmVuYW1lKGZpbGVuYW1lLCBqb2luZWQsIGZpbGVuYW1lKV0gPSBmaWxlcztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGpvaW5lZCAhPT0gbS5maWxlbmFtZSAmJiBjaGVja0ZpbGVJbmNsdXNpb24oam9pbmVkLCBmaWxlbmFtZSwgb3B0aW9ucykpIHtcbiAgICAgICAgLy8gaGFzaCBub2RlIGtleSBzaG91bGRuJ3QgaW5jbHVkZSBmaWxlIGV4dGVuc2lvblxuICAgICAgICBrZXkgPSBmaWxlbmFtZS5zdWJzdHJpbmcoMCwgZmlsZW5hbWUubGFzdEluZGV4T2YoJy4nKSk7XG4gICAgICAgIG9iaiA9IG0ucmVxdWlyZShqb2luZWQpO1xuICAgICAgICByZXR2YWxbb3B0aW9ucy5yZW5hbWUoa2V5LCBqb2luZWQsIGZpbGVuYW1lKV0gPSBvcHRpb25zLnZpc2l0KG9iaiwgam9pbmVkLCBmaWxlbmFtZSkgfHwgb2JqO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHJldHZhbDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlRGlyZWN0b3J5O1xubW9kdWxlLmV4cG9ydHMuZGVmYXVsdHMgPSBkZWZhdWx0T3B0aW9ucztcbiIsICIndXNlIHN0cmljdCc7XG5cbnZhciBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKTtcblxuY2xhc3MgWUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKG1zZykge1xuICAgICAgICBzdXBlcihtc2cgfHwgJ3lhcmdzIGVycm9yJyk7XG4gICAgICAgIHRoaXMubmFtZSA9ICdZRXJyb3InO1xuICAgICAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBZRXJyb3IpO1xuICAgIH1cbn1cblxubGV0IHByZXZpb3VzbHlWaXNpdGVkQ29uZmlncyA9IFtdO1xubGV0IHNoaW07XG5mdW5jdGlvbiBhcHBseUV4dGVuZHMoY29uZmlnLCBjd2QsIG1lcmdlRXh0ZW5kcywgX3NoaW0pIHtcbiAgICBzaGltID0gX3NoaW07XG4gICAgbGV0IGRlZmF1bHRDb25maWcgPSB7fTtcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywgJ2V4dGVuZHMnKSkge1xuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZy5leHRlbmRzICE9PSAnc3RyaW5nJylcbiAgICAgICAgICAgIHJldHVybiBkZWZhdWx0Q29uZmlnO1xuICAgICAgICBjb25zdCBpc1BhdGggPSAvXFwuanNvbnxcXC4uKnJjJC8udGVzdChjb25maWcuZXh0ZW5kcyk7XG4gICAgICAgIGxldCBwYXRoVG9EZWZhdWx0ID0gbnVsbDtcbiAgICAgICAgaWYgKCFpc1BhdGgpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcGF0aFRvRGVmYXVsdCA9IHJlcXVpcmUucmVzb2x2ZShjb25maWcuZXh0ZW5kcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoX2Vycikge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb25maWc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBwYXRoVG9EZWZhdWx0ID0gZ2V0UGF0aFRvRGVmYXVsdENvbmZpZyhjd2QsIGNvbmZpZy5leHRlbmRzKTtcbiAgICAgICAgfVxuICAgICAgICBjaGVja0ZvckNpcmN1bGFyRXh0ZW5kcyhwYXRoVG9EZWZhdWx0KTtcbiAgICAgICAgcHJldmlvdXNseVZpc2l0ZWRDb25maWdzLnB1c2gocGF0aFRvRGVmYXVsdCk7XG4gICAgICAgIGRlZmF1bHRDb25maWcgPSBpc1BhdGhcbiAgICAgICAgICAgID8gSlNPTi5wYXJzZShzaGltLnJlYWRGaWxlU3luYyhwYXRoVG9EZWZhdWx0LCAndXRmOCcpKVxuICAgICAgICAgICAgOiByZXF1aXJlKGNvbmZpZy5leHRlbmRzKTtcbiAgICAgICAgZGVsZXRlIGNvbmZpZy5leHRlbmRzO1xuICAgICAgICBkZWZhdWx0Q29uZmlnID0gYXBwbHlFeHRlbmRzKGRlZmF1bHRDb25maWcsIHNoaW0ucGF0aC5kaXJuYW1lKHBhdGhUb0RlZmF1bHQpLCBtZXJnZUV4dGVuZHMsIHNoaW0pO1xuICAgIH1cbiAgICBwcmV2aW91c2x5VmlzaXRlZENvbmZpZ3MgPSBbXTtcbiAgICByZXR1cm4gbWVyZ2VFeHRlbmRzXG4gICAgICAgID8gbWVyZ2VEZWVwKGRlZmF1bHRDb25maWcsIGNvbmZpZylcbiAgICAgICAgOiBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0Q29uZmlnLCBjb25maWcpO1xufVxuZnVuY3Rpb24gY2hlY2tGb3JDaXJjdWxhckV4dGVuZHMoY2ZnUGF0aCkge1xuICAgIGlmIChwcmV2aW91c2x5VmlzaXRlZENvbmZpZ3MuaW5kZXhPZihjZmdQYXRoKSA+IC0xKSB7XG4gICAgICAgIHRocm93IG5ldyBZRXJyb3IoYENpcmN1bGFyIGV4dGVuZGVkIGNvbmZpZ3VyYXRpb25zOiAnJHtjZmdQYXRofScuYCk7XG4gICAgfVxufVxuZnVuY3Rpb24gZ2V0UGF0aFRvRGVmYXVsdENvbmZpZyhjd2QsIHBhdGhUb0V4dGVuZCkge1xuICAgIHJldHVybiBzaGltLnBhdGgucmVzb2x2ZShjd2QsIHBhdGhUb0V4dGVuZCk7XG59XG5mdW5jdGlvbiBtZXJnZURlZXAoY29uZmlnMSwgY29uZmlnMikge1xuICAgIGNvbnN0IHRhcmdldCA9IHt9O1xuICAgIGZ1bmN0aW9uIGlzT2JqZWN0KG9iaikge1xuICAgICAgICByZXR1cm4gb2JqICYmIHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KG9iaik7XG4gICAgfVxuICAgIE9iamVjdC5hc3NpZ24odGFyZ2V0LCBjb25maWcxKTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhjb25maWcyKSkge1xuICAgICAgICBpZiAoaXNPYmplY3QoY29uZmlnMltrZXldKSAmJiBpc09iamVjdCh0YXJnZXRba2V5XSkpIHtcbiAgICAgICAgICAgIHRhcmdldFtrZXldID0gbWVyZ2VEZWVwKGNvbmZpZzFba2V5XSwgY29uZmlnMltrZXldKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRhcmdldFtrZXldID0gY29uZmlnMltrZXldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0YXJnZXQ7XG59XG5cbmZ1bmN0aW9uIHBhcnNlQ29tbWFuZChjbWQpIHtcbiAgICBjb25zdCBleHRyYVNwYWNlc1N0cmlwcGVkQ29tbWFuZCA9IGNtZC5yZXBsYWNlKC9cXHN7Mix9L2csICcgJyk7XG4gICAgY29uc3Qgc3BsaXRDb21tYW5kID0gZXh0cmFTcGFjZXNTdHJpcHBlZENvbW1hbmQuc3BsaXQoL1xccysoPyFbXltdKl18W148XSo+KS8pO1xuICAgIGNvbnN0IGJyZWdleCA9IC9cXC4qW1xcXVs8Pl0vZztcbiAgICBjb25zdCBmaXJzdENvbW1hbmQgPSBzcGxpdENvbW1hbmQuc2hpZnQoKTtcbiAgICBpZiAoIWZpcnN0Q29tbWFuZClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBjb21tYW5kIGZvdW5kIGluOiAke2NtZH1gKTtcbiAgICBjb25zdCBwYXJzZWRDb21tYW5kID0ge1xuICAgICAgICBjbWQ6IGZpcnN0Q29tbWFuZC5yZXBsYWNlKGJyZWdleCwgJycpLFxuICAgICAgICBkZW1hbmRlZDogW10sXG4gICAgICAgIG9wdGlvbmFsOiBbXSxcbiAgICB9O1xuICAgIHNwbGl0Q29tbWFuZC5mb3JFYWNoKChjbWQsIGkpID0+IHtcbiAgICAgICAgbGV0IHZhcmlhZGljID0gZmFsc2U7XG4gICAgICAgIGNtZCA9IGNtZC5yZXBsYWNlKC9cXHMvZywgJycpO1xuICAgICAgICBpZiAoL1xcLitbXFxdPl0vLnRlc3QoY21kKSAmJiBpID09PSBzcGxpdENvbW1hbmQubGVuZ3RoIC0gMSlcbiAgICAgICAgICAgIHZhcmlhZGljID0gdHJ1ZTtcbiAgICAgICAgaWYgKC9eXFxbLy50ZXN0KGNtZCkpIHtcbiAgICAgICAgICAgIHBhcnNlZENvbW1hbmQub3B0aW9uYWwucHVzaCh7XG4gICAgICAgICAgICAgICAgY21kOiBjbWQucmVwbGFjZShicmVnZXgsICcnKS5zcGxpdCgnfCcpLFxuICAgICAgICAgICAgICAgIHZhcmlhZGljLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBwYXJzZWRDb21tYW5kLmRlbWFuZGVkLnB1c2goe1xuICAgICAgICAgICAgICAgIGNtZDogY21kLnJlcGxhY2UoYnJlZ2V4LCAnJykuc3BsaXQoJ3wnKSxcbiAgICAgICAgICAgICAgICB2YXJpYWRpYyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHBhcnNlZENvbW1hbmQ7XG59XG5cbmNvbnN0IHBvc2l0aW9uTmFtZSA9IFsnZmlyc3QnLCAnc2Vjb25kJywgJ3RoaXJkJywgJ2ZvdXJ0aCcsICdmaWZ0aCcsICdzaXh0aCddO1xuZnVuY3Rpb24gYXJnc2VydChhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgZnVuY3Rpb24gcGFyc2VBcmdzKCkge1xuICAgICAgICByZXR1cm4gdHlwZW9mIGFyZzEgPT09ICdvYmplY3QnXG4gICAgICAgICAgICA/IFt7IGRlbWFuZGVkOiBbXSwgb3B0aW9uYWw6IFtdIH0sIGFyZzEsIGFyZzJdXG4gICAgICAgICAgICA6IFtcbiAgICAgICAgICAgICAgICBwYXJzZUNvbW1hbmQoYGNtZCAke2FyZzF9YCksXG4gICAgICAgICAgICAgICAgYXJnMixcbiAgICAgICAgICAgICAgICBhcmczLFxuICAgICAgICAgICAgXTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgbGV0IHBvc2l0aW9uID0gMDtcbiAgICAgICAgY29uc3QgW3BhcnNlZCwgY2FsbGVyQXJndW1lbnRzLCBfbGVuZ3RoXSA9IHBhcnNlQXJncygpO1xuICAgICAgICBjb25zdCBhcmdzID0gW10uc2xpY2UuY2FsbChjYWxsZXJBcmd1bWVudHMpO1xuICAgICAgICB3aGlsZSAoYXJncy5sZW5ndGggJiYgYXJnc1thcmdzLmxlbmd0aCAtIDFdID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICBhcmdzLnBvcCgpO1xuICAgICAgICBjb25zdCBsZW5ndGggPSBfbGVuZ3RoIHx8IGFyZ3MubGVuZ3RoO1xuICAgICAgICBpZiAobGVuZ3RoIDwgcGFyc2VkLmRlbWFuZGVkLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFlFcnJvcihgTm90IGVub3VnaCBhcmd1bWVudHMgcHJvdmlkZWQuIEV4cGVjdGVkICR7cGFyc2VkLmRlbWFuZGVkLmxlbmd0aH0gYnV0IHJlY2VpdmVkICR7YXJncy5sZW5ndGh9LmApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRvdGFsQ29tbWFuZHMgPSBwYXJzZWQuZGVtYW5kZWQubGVuZ3RoICsgcGFyc2VkLm9wdGlvbmFsLmxlbmd0aDtcbiAgICAgICAgaWYgKGxlbmd0aCA+IHRvdGFsQ29tbWFuZHMpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBZRXJyb3IoYFRvbyBtYW55IGFyZ3VtZW50cyBwcm92aWRlZC4gRXhwZWN0ZWQgbWF4ICR7dG90YWxDb21tYW5kc30gYnV0IHJlY2VpdmVkICR7bGVuZ3RofS5gKTtcbiAgICAgICAgfVxuICAgICAgICBwYXJzZWQuZGVtYW5kZWQuZm9yRWFjaChkZW1hbmRlZCA9PiB7XG4gICAgICAgICAgICBjb25zdCBhcmcgPSBhcmdzLnNoaWZ0KCk7XG4gICAgICAgICAgICBjb25zdCBvYnNlcnZlZFR5cGUgPSBndWVzc1R5cGUoYXJnKTtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoaW5nVHlwZXMgPSBkZW1hbmRlZC5jbWQuZmlsdGVyKHR5cGUgPT4gdHlwZSA9PT0gb2JzZXJ2ZWRUeXBlIHx8IHR5cGUgPT09ICcqJyk7XG4gICAgICAgICAgICBpZiAobWF0Y2hpbmdUeXBlcy5sZW5ndGggPT09IDApXG4gICAgICAgICAgICAgICAgYXJndW1lbnRUeXBlRXJyb3Iob2JzZXJ2ZWRUeXBlLCBkZW1hbmRlZC5jbWQsIHBvc2l0aW9uKTtcbiAgICAgICAgICAgIHBvc2l0aW9uICs9IDE7XG4gICAgICAgIH0pO1xuICAgICAgICBwYXJzZWQub3B0aW9uYWwuZm9yRWFjaChvcHRpb25hbCA9PiB7XG4gICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPT09IDApXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgY29uc3QgYXJnID0gYXJncy5zaGlmdCgpO1xuICAgICAgICAgICAgY29uc3Qgb2JzZXJ2ZWRUeXBlID0gZ3Vlc3NUeXBlKGFyZyk7XG4gICAgICAgICAgICBjb25zdCBtYXRjaGluZ1R5cGVzID0gb3B0aW9uYWwuY21kLmZpbHRlcih0eXBlID0+IHR5cGUgPT09IG9ic2VydmVkVHlwZSB8fCB0eXBlID09PSAnKicpO1xuICAgICAgICAgICAgaWYgKG1hdGNoaW5nVHlwZXMubGVuZ3RoID09PSAwKVxuICAgICAgICAgICAgICAgIGFyZ3VtZW50VHlwZUVycm9yKG9ic2VydmVkVHlwZSwgb3B0aW9uYWwuY21kLCBwb3NpdGlvbik7XG4gICAgICAgICAgICBwb3NpdGlvbiArPSAxO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLndhcm4oZXJyLnN0YWNrKTtcbiAgICB9XG59XG5mdW5jdGlvbiBndWVzc1R5cGUoYXJnKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYXJnKSkge1xuICAgICAgICByZXR1cm4gJ2FycmF5JztcbiAgICB9XG4gICAgZWxzZSBpZiAoYXJnID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiAnbnVsbCc7XG4gICAgfVxuICAgIHJldHVybiB0eXBlb2YgYXJnO1xufVxuZnVuY3Rpb24gYXJndW1lbnRUeXBlRXJyb3Iob2JzZXJ2ZWRUeXBlLCBhbGxvd2VkVHlwZXMsIHBvc2l0aW9uKSB7XG4gICAgdGhyb3cgbmV3IFlFcnJvcihgSW52YWxpZCAke3Bvc2l0aW9uTmFtZVtwb3NpdGlvbl0gfHwgJ21hbnlpdGgnfSBhcmd1bWVudC4gRXhwZWN0ZWQgJHthbGxvd2VkVHlwZXMuam9pbignIG9yICcpfSBidXQgcmVjZWl2ZWQgJHtvYnNlcnZlZFR5cGV9LmApO1xufVxuXG5mdW5jdGlvbiBpc1Byb21pc2UobWF5YmVQcm9taXNlKSB7XG4gICAgcmV0dXJuICghIW1heWJlUHJvbWlzZSAmJlxuICAgICAgICAhIW1heWJlUHJvbWlzZS50aGVuICYmXG4gICAgICAgIHR5cGVvZiBtYXliZVByb21pc2UudGhlbiA9PT0gJ2Z1bmN0aW9uJyk7XG59XG5cbmZ1bmN0aW9uIGFzc2VydE5vdFN0cmljdEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIHNoaW0sIG1lc3NhZ2UpIHtcbiAgICBzaGltLmFzc2VydC5ub3RTdHJpY3RFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlKTtcbn1cbmZ1bmN0aW9uIGFzc2VydFNpbmdsZUtleShhY3R1YWwsIHNoaW0pIHtcbiAgICBzaGltLmFzc2VydC5zdHJpY3RFcXVhbCh0eXBlb2YgYWN0dWFsLCAnc3RyaW5nJyk7XG59XG5mdW5jdGlvbiBvYmplY3RLZXlzKG9iamVjdCkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmplY3QpO1xufVxuXG5mdW5jdGlvbiBvYmpGaWx0ZXIob3JpZ2luYWwgPSB7fSwgZmlsdGVyID0gKCkgPT4gdHJ1ZSkge1xuICAgIGNvbnN0IG9iaiA9IHt9O1xuICAgIG9iamVjdEtleXMob3JpZ2luYWwpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgaWYgKGZpbHRlcihrZXksIG9yaWdpbmFsW2tleV0pKSB7XG4gICAgICAgICAgICBvYmpba2V5XSA9IG9yaWdpbmFsW2tleV07XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gb2JqO1xufVxuXG5mdW5jdGlvbiBnbG9iYWxNaWRkbGV3YXJlRmFjdG9yeShnbG9iYWxNaWRkbGV3YXJlLCBjb250ZXh0KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChjYWxsYmFjaywgYXBwbHlCZWZvcmVWYWxpZGF0aW9uID0gZmFsc2UpIHtcbiAgICAgICAgYXJnc2VydCgnPGFycmF5fGZ1bmN0aW9uPiBbYm9vbGVhbl0nLCBbY2FsbGJhY2ssIGFwcGx5QmVmb3JlVmFsaWRhdGlvbl0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjYWxsYmFjaykpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2FsbGJhY2subGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrW2ldICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKCdtaWRkbGV3YXJlIG11c3QgYmUgYSBmdW5jdGlvbicpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFja1tpXS5hcHBseUJlZm9yZVZhbGlkYXRpb24gPSBhcHBseUJlZm9yZVZhbGlkYXRpb247XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShnbG9iYWxNaWRkbGV3YXJlLCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWxsYmFjay5hcHBseUJlZm9yZVZhbGlkYXRpb24gPSBhcHBseUJlZm9yZVZhbGlkYXRpb247XG4gICAgICAgICAgICBnbG9iYWxNaWRkbGV3YXJlLnB1c2goY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb250ZXh0O1xuICAgIH07XG59XG5mdW5jdGlvbiBjb21tYW5kTWlkZGxld2FyZUZhY3RvcnkoY29tbWFuZE1pZGRsZXdhcmUpIHtcbiAgICBpZiAoIWNvbW1hbmRNaWRkbGV3YXJlKVxuICAgICAgICByZXR1cm4gW107XG4gICAgcmV0dXJuIGNvbW1hbmRNaWRkbGV3YXJlLm1hcChtaWRkbGV3YXJlID0+IHtcbiAgICAgICAgbWlkZGxld2FyZS5hcHBseUJlZm9yZVZhbGlkYXRpb24gPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIG1pZGRsZXdhcmU7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBhcHBseU1pZGRsZXdhcmUoYXJndiwgeWFyZ3MsIG1pZGRsZXdhcmVzLCBiZWZvcmVWYWxpZGF0aW9uKSB7XG4gICAgY29uc3QgYmVmb3JlVmFsaWRhdGlvbkVycm9yID0gbmV3IEVycm9yKCdtaWRkbGV3YXJlIGNhbm5vdCByZXR1cm4gYSBwcm9taXNlIHdoZW4gYXBwbHlCZWZvcmVWYWxpZGF0aW9uIGlzIHRydWUnKTtcbiAgICByZXR1cm4gbWlkZGxld2FyZXMucmVkdWNlKChhY2MsIG1pZGRsZXdhcmUpID0+IHtcbiAgICAgICAgaWYgKG1pZGRsZXdhcmUuYXBwbHlCZWZvcmVWYWxpZGF0aW9uICE9PSBiZWZvcmVWYWxpZGF0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1Byb21pc2UoYWNjKSkge1xuICAgICAgICAgICAgcmV0dXJuIGFjY1xuICAgICAgICAgICAgICAgIC50aGVuKGluaXRpYWxPYmogPT4gUHJvbWlzZS5hbGwoW1xuICAgICAgICAgICAgICAgIGluaXRpYWxPYmosXG4gICAgICAgICAgICAgICAgbWlkZGxld2FyZShpbml0aWFsT2JqLCB5YXJncyksXG4gICAgICAgICAgICBdKSlcbiAgICAgICAgICAgICAgICAudGhlbigoW2luaXRpYWxPYmosIG1pZGRsZXdhcmVPYmpdKSA9PiBPYmplY3QuYXNzaWduKGluaXRpYWxPYmosIG1pZGRsZXdhcmVPYmopKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IG1pZGRsZXdhcmUoYWNjLCB5YXJncyk7XG4gICAgICAgICAgICBpZiAoYmVmb3JlVmFsaWRhdGlvbiAmJiBpc1Byb21pc2UocmVzdWx0KSlcbiAgICAgICAgICAgICAgICB0aHJvdyBiZWZvcmVWYWxpZGF0aW9uRXJyb3I7XG4gICAgICAgICAgICByZXR1cm4gaXNQcm9taXNlKHJlc3VsdClcbiAgICAgICAgICAgICAgICA/IHJlc3VsdC50aGVuKG1pZGRsZXdhcmVPYmogPT4gT2JqZWN0LmFzc2lnbihhY2MsIG1pZGRsZXdhcmVPYmopKVxuICAgICAgICAgICAgICAgIDogT2JqZWN0LmFzc2lnbihhY2MsIHJlc3VsdCk7XG4gICAgICAgIH1cbiAgICB9LCBhcmd2KTtcbn1cblxuZnVuY3Rpb24gZ2V0UHJvY2Vzc0FyZ3ZCaW5JbmRleCgpIHtcbiAgICBpZiAoaXNCdW5kbGVkRWxlY3Ryb25BcHAoKSlcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgcmV0dXJuIDE7XG59XG5mdW5jdGlvbiBpc0J1bmRsZWRFbGVjdHJvbkFwcCgpIHtcbiAgICByZXR1cm4gaXNFbGVjdHJvbkFwcCgpICYmICFwcm9jZXNzLmRlZmF1bHRBcHA7XG59XG5mdW5jdGlvbiBpc0VsZWN0cm9uQXBwKCkge1xuICAgIHJldHVybiAhIXByb2Nlc3MudmVyc2lvbnMuZWxlY3Ryb247XG59XG5mdW5jdGlvbiBoaWRlQmluKGFyZ3YpIHtcbiAgICByZXR1cm4gYXJndi5zbGljZShnZXRQcm9jZXNzQXJndkJpbkluZGV4KCkgKyAxKTtcbn1cbmZ1bmN0aW9uIGdldFByb2Nlc3NBcmd2QmluKCkge1xuICAgIHJldHVybiBwcm9jZXNzLmFyZ3ZbZ2V0UHJvY2Vzc0FyZ3ZCaW5JbmRleCgpXTtcbn1cblxudmFyIHByb2Nlc3NBcmd2ID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICBfX3Byb3RvX186IG51bGwsXG4gIGhpZGVCaW46IGhpZGVCaW4sXG4gIGdldFByb2Nlc3NBcmd2QmluOiBnZXRQcm9jZXNzQXJndkJpblxufSk7XG5cbmZ1bmN0aW9uIHdoaWNoTW9kdWxlKGV4cG9ydGVkKSB7XG4gICAgaWYgKHR5cGVvZiByZXF1aXJlID09PSAndW5kZWZpbmVkJylcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgZm9yIChsZXQgaSA9IDAsIGZpbGVzID0gT2JqZWN0LmtleXMocmVxdWlyZS5jYWNoZSksIG1vZDsgaSA8IGZpbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIG1vZCA9IHJlcXVpcmUuY2FjaGVbZmlsZXNbaV1dO1xuICAgICAgICBpZiAobW9kLmV4cG9ydHMgPT09IGV4cG9ydGVkKVxuICAgICAgICAgICAgcmV0dXJuIG1vZDtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59XG5cbmNvbnN0IERFRkFVTFRfTUFSS0VSID0gLyheXFwqKXwoXlxcJDApLztcbmZ1bmN0aW9uIGNvbW1hbmQoeWFyZ3MsIHVzYWdlLCB2YWxpZGF0aW9uLCBnbG9iYWxNaWRkbGV3YXJlID0gW10sIHNoaW0pIHtcbiAgICBjb25zdCBzZWxmID0ge307XG4gICAgbGV0IGhhbmRsZXJzID0ge307XG4gICAgbGV0IGFsaWFzTWFwID0ge307XG4gICAgbGV0IGRlZmF1bHRDb21tYW5kO1xuICAgIHNlbGYuYWRkSGFuZGxlciA9IGZ1bmN0aW9uIGFkZEhhbmRsZXIoY21kLCBkZXNjcmlwdGlvbiwgYnVpbGRlciwgaGFuZGxlciwgY29tbWFuZE1pZGRsZXdhcmUsIGRlcHJlY2F0ZWQpIHtcbiAgICAgICAgbGV0IGFsaWFzZXMgPSBbXTtcbiAgICAgICAgY29uc3QgbWlkZGxld2FyZXMgPSBjb21tYW5kTWlkZGxld2FyZUZhY3RvcnkoY29tbWFuZE1pZGRsZXdhcmUpO1xuICAgICAgICBoYW5kbGVyID0gaGFuZGxlciB8fCAoKCkgPT4geyB9KTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY21kKSkge1xuICAgICAgICAgICAgaWYgKGlzQ29tbWFuZEFuZEFsaWFzZXMoY21kKSkge1xuICAgICAgICAgICAgICAgIFtjbWQsIC4uLmFsaWFzZXNdID0gY21kO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBjb21tYW5kIG9mIGNtZCkge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmFkZEhhbmRsZXIoY29tbWFuZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzQ29tbWFuZEhhbmRsZXJEZWZpbml0aW9uKGNtZCkpIHtcbiAgICAgICAgICAgIGxldCBjb21tYW5kID0gQXJyYXkuaXNBcnJheShjbWQuY29tbWFuZCkgfHwgdHlwZW9mIGNtZC5jb21tYW5kID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgICAgID8gY21kLmNvbW1hbmRcbiAgICAgICAgICAgICAgICA6IG1vZHVsZU5hbWUoY21kKTtcbiAgICAgICAgICAgIGlmIChjbWQuYWxpYXNlcylcbiAgICAgICAgICAgICAgICBjb21tYW5kID0gW10uY29uY2F0KGNvbW1hbmQpLmNvbmNhdChjbWQuYWxpYXNlcyk7XG4gICAgICAgICAgICBzZWxmLmFkZEhhbmRsZXIoY29tbWFuZCwgZXh0cmFjdERlc2MoY21kKSwgY21kLmJ1aWxkZXIsIGNtZC5oYW5kbGVyLCBjbWQubWlkZGxld2FyZXMsIGNtZC5kZXByZWNhdGVkKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc0NvbW1hbmRCdWlsZGVyRGVmaW5pdGlvbihidWlsZGVyKSkge1xuICAgICAgICAgICAgc2VsZi5hZGRIYW5kbGVyKFtjbWRdLmNvbmNhdChhbGlhc2VzKSwgZGVzY3JpcHRpb24sIGJ1aWxkZXIuYnVpbGRlciwgYnVpbGRlci5oYW5kbGVyLCBidWlsZGVyLm1pZGRsZXdhcmVzLCBidWlsZGVyLmRlcHJlY2F0ZWQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgY21kID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkQ29tbWFuZCA9IHBhcnNlQ29tbWFuZChjbWQpO1xuICAgICAgICAgICAgYWxpYXNlcyA9IGFsaWFzZXMubWFwKGFsaWFzID0+IHBhcnNlQ29tbWFuZChhbGlhcykuY21kKTtcbiAgICAgICAgICAgIGxldCBpc0RlZmF1bHQgPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZEFsaWFzZXMgPSBbcGFyc2VkQ29tbWFuZC5jbWRdLmNvbmNhdChhbGlhc2VzKS5maWx0ZXIoYyA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKERFRkFVTFRfTUFSS0VSLnRlc3QoYykpIHtcbiAgICAgICAgICAgICAgICAgICAgaXNEZWZhdWx0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKHBhcnNlZEFsaWFzZXMubGVuZ3RoID09PSAwICYmIGlzRGVmYXVsdClcbiAgICAgICAgICAgICAgICBwYXJzZWRBbGlhc2VzLnB1c2goJyQwJyk7XG4gICAgICAgICAgICBpZiAoaXNEZWZhdWx0KSB7XG4gICAgICAgICAgICAgICAgcGFyc2VkQ29tbWFuZC5jbWQgPSBwYXJzZWRBbGlhc2VzWzBdO1xuICAgICAgICAgICAgICAgIGFsaWFzZXMgPSBwYXJzZWRBbGlhc2VzLnNsaWNlKDEpO1xuICAgICAgICAgICAgICAgIGNtZCA9IGNtZC5yZXBsYWNlKERFRkFVTFRfTUFSS0VSLCBwYXJzZWRDb21tYW5kLmNtZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhbGlhc2VzLmZvckVhY2goYWxpYXMgPT4ge1xuICAgICAgICAgICAgICAgIGFsaWFzTWFwW2FsaWFzXSA9IHBhcnNlZENvbW1hbmQuY21kO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoZGVzY3JpcHRpb24gIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgdXNhZ2UuY29tbWFuZChjbWQsIGRlc2NyaXB0aW9uLCBpc0RlZmF1bHQsIGFsaWFzZXMsIGRlcHJlY2F0ZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaGFuZGxlcnNbcGFyc2VkQ29tbWFuZC5jbWRdID0ge1xuICAgICAgICAgICAgICAgIG9yaWdpbmFsOiBjbWQsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb24sXG4gICAgICAgICAgICAgICAgaGFuZGxlcixcbiAgICAgICAgICAgICAgICBidWlsZGVyOiBidWlsZGVyIHx8IHt9LFxuICAgICAgICAgICAgICAgIG1pZGRsZXdhcmVzLFxuICAgICAgICAgICAgICAgIGRlcHJlY2F0ZWQsXG4gICAgICAgICAgICAgICAgZGVtYW5kZWQ6IHBhcnNlZENvbW1hbmQuZGVtYW5kZWQsXG4gICAgICAgICAgICAgICAgb3B0aW9uYWw6IHBhcnNlZENvbW1hbmQub3B0aW9uYWwsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKGlzRGVmYXVsdClcbiAgICAgICAgICAgICAgICBkZWZhdWx0Q29tbWFuZCA9IGhhbmRsZXJzW3BhcnNlZENvbW1hbmQuY21kXTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgc2VsZi5hZGREaXJlY3RvcnkgPSBmdW5jdGlvbiBhZGREaXJlY3RvcnkoZGlyLCBjb250ZXh0LCByZXEsIGNhbGxlckZpbGUsIG9wdHMpIHtcbiAgICAgICAgb3B0cyA9IG9wdHMgfHwge307XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0cy5yZWN1cnNlICE9PSAnYm9vbGVhbicpXG4gICAgICAgICAgICBvcHRzLnJlY3Vyc2UgPSBmYWxzZTtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG9wdHMuZXh0ZW5zaW9ucykpXG4gICAgICAgICAgICBvcHRzLmV4dGVuc2lvbnMgPSBbJ2pzJ107XG4gICAgICAgIGNvbnN0IHBhcmVudFZpc2l0ID0gdHlwZW9mIG9wdHMudmlzaXQgPT09ICdmdW5jdGlvbicgPyBvcHRzLnZpc2l0IDogKG8pID0+IG87XG4gICAgICAgIG9wdHMudmlzaXQgPSBmdW5jdGlvbiB2aXNpdChvYmosIGpvaW5lZCwgZmlsZW5hbWUpIHtcbiAgICAgICAgICAgIGNvbnN0IHZpc2l0ZWQgPSBwYXJlbnRWaXNpdChvYmosIGpvaW5lZCwgZmlsZW5hbWUpO1xuICAgICAgICAgICAgaWYgKHZpc2l0ZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAofmNvbnRleHQuZmlsZXMuaW5kZXhPZihqb2luZWQpKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmlzaXRlZDtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGVzLnB1c2goam9pbmVkKTtcbiAgICAgICAgICAgICAgICBzZWxmLmFkZEhhbmRsZXIodmlzaXRlZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdmlzaXRlZDtcbiAgICAgICAgfTtcbiAgICAgICAgc2hpbS5yZXF1aXJlRGlyZWN0b3J5KHsgcmVxdWlyZTogcmVxLCBmaWxlbmFtZTogY2FsbGVyRmlsZSB9LCBkaXIsIG9wdHMpO1xuICAgIH07XG4gICAgZnVuY3Rpb24gbW9kdWxlTmFtZShvYmopIHtcbiAgICAgICAgY29uc3QgbW9kID0gd2hpY2hNb2R1bGUob2JqKTtcbiAgICAgICAgaWYgKCFtb2QpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIGNvbW1hbmQgbmFtZSBnaXZlbiBmb3IgbW9kdWxlOiAke3NoaW0uaW5zcGVjdChvYmopfWApO1xuICAgICAgICByZXR1cm4gY29tbWFuZEZyb21GaWxlbmFtZShtb2QuZmlsZW5hbWUpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb21tYW5kRnJvbUZpbGVuYW1lKGZpbGVuYW1lKSB7XG4gICAgICAgIHJldHVybiBzaGltLnBhdGguYmFzZW5hbWUoZmlsZW5hbWUsIHNoaW0ucGF0aC5leHRuYW1lKGZpbGVuYW1lKSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGV4dHJhY3REZXNjKHsgZGVzY3JpYmUsIGRlc2NyaXB0aW9uLCBkZXNjLCB9KSB7XG4gICAgICAgIGZvciAoY29uc3QgdGVzdCBvZiBbZGVzY3JpYmUsIGRlc2NyaXB0aW9uLCBkZXNjXSkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB0ZXN0ID09PSAnc3RyaW5nJyB8fCB0ZXN0ID09PSBmYWxzZSlcbiAgICAgICAgICAgICAgICByZXR1cm4gdGVzdDtcbiAgICAgICAgICAgIGFzc2VydE5vdFN0cmljdEVxdWFsKHRlc3QsIHRydWUsIHNoaW0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgc2VsZi5nZXRDb21tYW5kcyA9ICgpID0+IE9iamVjdC5rZXlzKGhhbmRsZXJzKS5jb25jYXQoT2JqZWN0LmtleXMoYWxpYXNNYXApKTtcbiAgICBzZWxmLmdldENvbW1hbmRIYW5kbGVycyA9ICgpID0+IGhhbmRsZXJzO1xuICAgIHNlbGYuaGFzRGVmYXVsdENvbW1hbmQgPSAoKSA9PiAhIWRlZmF1bHRDb21tYW5kO1xuICAgIHNlbGYucnVuQ29tbWFuZCA9IGZ1bmN0aW9uIHJ1bkNvbW1hbmQoY29tbWFuZCwgeWFyZ3MsIHBhcnNlZCwgY29tbWFuZEluZGV4KSB7XG4gICAgICAgIGxldCBhbGlhc2VzID0gcGFyc2VkLmFsaWFzZXM7XG4gICAgICAgIGNvbnN0IGNvbW1hbmRIYW5kbGVyID0gaGFuZGxlcnNbY29tbWFuZF0gfHwgaGFuZGxlcnNbYWxpYXNNYXBbY29tbWFuZF1dIHx8IGRlZmF1bHRDb21tYW5kO1xuICAgICAgICBjb25zdCBjdXJyZW50Q29udGV4dCA9IHlhcmdzLmdldENvbnRleHQoKTtcbiAgICAgICAgbGV0IG51bUZpbGVzID0gY3VycmVudENvbnRleHQuZmlsZXMubGVuZ3RoO1xuICAgICAgICBjb25zdCBwYXJlbnRDb21tYW5kcyA9IGN1cnJlbnRDb250ZXh0LmNvbW1hbmRzLnNsaWNlKCk7XG4gICAgICAgIGxldCBpbm5lckFyZ3YgPSBwYXJzZWQuYXJndjtcbiAgICAgICAgbGV0IHBvc2l0aW9uYWxNYXAgPSB7fTtcbiAgICAgICAgaWYgKGNvbW1hbmQpIHtcbiAgICAgICAgICAgIGN1cnJlbnRDb250ZXh0LmNvbW1hbmRzLnB1c2goY29tbWFuZCk7XG4gICAgICAgICAgICBjdXJyZW50Q29udGV4dC5mdWxsQ29tbWFuZHMucHVzaChjb21tYW5kSGFuZGxlci5vcmlnaW5hbCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYnVpbGRlciA9IGNvbW1hbmRIYW5kbGVyLmJ1aWxkZXI7XG4gICAgICAgIGlmIChpc0NvbW1hbmRCdWlsZGVyQ2FsbGJhY2soYnVpbGRlcikpIHtcbiAgICAgICAgICAgIGNvbnN0IGJ1aWxkZXJPdXRwdXQgPSBidWlsZGVyKHlhcmdzLnJlc2V0KHBhcnNlZC5hbGlhc2VzKSk7XG4gICAgICAgICAgICBjb25zdCBpbm5lcllhcmdzID0gaXNZYXJnc0luc3RhbmNlKGJ1aWxkZXJPdXRwdXQpID8gYnVpbGRlck91dHB1dCA6IHlhcmdzO1xuICAgICAgICAgICAgaWYgKHNob3VsZFVwZGF0ZVVzYWdlKGlubmVyWWFyZ3MpKSB7XG4gICAgICAgICAgICAgICAgaW5uZXJZYXJnc1xuICAgICAgICAgICAgICAgICAgICAuZ2V0VXNhZ2VJbnN0YW5jZSgpXG4gICAgICAgICAgICAgICAgICAgIC51c2FnZSh1c2FnZUZyb21QYXJlbnRDb21tYW5kc0NvbW1hbmRIYW5kbGVyKHBhcmVudENvbW1hbmRzLCBjb21tYW5kSGFuZGxlciksIGNvbW1hbmRIYW5kbGVyLmRlc2NyaXB0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlubmVyQXJndiA9IGlubmVyWWFyZ3MuX3BhcnNlQXJncyhudWxsLCBudWxsLCB0cnVlLCBjb21tYW5kSW5kZXgpO1xuICAgICAgICAgICAgYWxpYXNlcyA9IGlubmVyWWFyZ3MucGFyc2VkLmFsaWFzZXM7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNDb21tYW5kQnVpbGRlck9wdGlvbkRlZmluaXRpb25zKGJ1aWxkZXIpKSB7XG4gICAgICAgICAgICBjb25zdCBpbm5lcllhcmdzID0geWFyZ3MucmVzZXQocGFyc2VkLmFsaWFzZXMpO1xuICAgICAgICAgICAgaWYgKHNob3VsZFVwZGF0ZVVzYWdlKGlubmVyWWFyZ3MpKSB7XG4gICAgICAgICAgICAgICAgaW5uZXJZYXJnc1xuICAgICAgICAgICAgICAgICAgICAuZ2V0VXNhZ2VJbnN0YW5jZSgpXG4gICAgICAgICAgICAgICAgICAgIC51c2FnZSh1c2FnZUZyb21QYXJlbnRDb21tYW5kc0NvbW1hbmRIYW5kbGVyKHBhcmVudENvbW1hbmRzLCBjb21tYW5kSGFuZGxlciksIGNvbW1hbmRIYW5kbGVyLmRlc2NyaXB0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGNvbW1hbmRIYW5kbGVyLmJ1aWxkZXIpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgICAgICBpbm5lcllhcmdzLm9wdGlvbihrZXksIGJ1aWxkZXJba2V5XSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlubmVyQXJndiA9IGlubmVyWWFyZ3MuX3BhcnNlQXJncyhudWxsLCBudWxsLCB0cnVlLCBjb21tYW5kSW5kZXgpO1xuICAgICAgICAgICAgYWxpYXNlcyA9IGlubmVyWWFyZ3MucGFyc2VkLmFsaWFzZXM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF5YXJncy5faGFzT3V0cHV0KCkpIHtcbiAgICAgICAgICAgIHBvc2l0aW9uYWxNYXAgPSBwb3B1bGF0ZVBvc2l0aW9uYWxzKGNvbW1hbmRIYW5kbGVyLCBpbm5lckFyZ3YsIGN1cnJlbnRDb250ZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtaWRkbGV3YXJlcyA9IGdsb2JhbE1pZGRsZXdhcmVcbiAgICAgICAgICAgIC5zbGljZSgwKVxuICAgICAgICAgICAgLmNvbmNhdChjb21tYW5kSGFuZGxlci5taWRkbGV3YXJlcyk7XG4gICAgICAgIGFwcGx5TWlkZGxld2FyZShpbm5lckFyZ3YsIHlhcmdzLCBtaWRkbGV3YXJlcywgdHJ1ZSk7XG4gICAgICAgIGlmICgheWFyZ3MuX2hhc091dHB1dCgpKSB7XG4gICAgICAgICAgICB5YXJncy5fcnVuVmFsaWRhdGlvbihpbm5lckFyZ3YsIGFsaWFzZXMsIHBvc2l0aW9uYWxNYXAsIHlhcmdzLnBhcnNlZC5lcnJvciwgIWNvbW1hbmQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb21tYW5kSGFuZGxlci5oYW5kbGVyICYmICF5YXJncy5faGFzT3V0cHV0KCkpIHtcbiAgICAgICAgICAgIHlhcmdzLl9zZXRIYXNPdXRwdXQoKTtcbiAgICAgICAgICAgIGNvbnN0IHBvcHVsYXRlRG91YmxlRGFzaCA9ICEheWFyZ3MuZ2V0T3B0aW9ucygpLmNvbmZpZ3VyYXRpb25bJ3BvcHVsYXRlLS0nXTtcbiAgICAgICAgICAgIHlhcmdzLl9wb3N0UHJvY2Vzcyhpbm5lckFyZ3YsIHBvcHVsYXRlRG91YmxlRGFzaCk7XG4gICAgICAgICAgICBpbm5lckFyZ3YgPSBhcHBseU1pZGRsZXdhcmUoaW5uZXJBcmd2LCB5YXJncywgbWlkZGxld2FyZXMsIGZhbHNlKTtcbiAgICAgICAgICAgIGxldCBoYW5kbGVyUmVzdWx0O1xuICAgICAgICAgICAgaWYgKGlzUHJvbWlzZShpbm5lckFyZ3YpKSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlclJlc3VsdCA9IGlubmVyQXJndi50aGVuKGFyZ3YgPT4gY29tbWFuZEhhbmRsZXIuaGFuZGxlcihhcmd2KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBoYW5kbGVyUmVzdWx0ID0gY29tbWFuZEhhbmRsZXIuaGFuZGxlcihpbm5lckFyZ3YpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgaGFuZGxlckZpbmlzaENvbW1hbmQgPSB5YXJncy5nZXRIYW5kbGVyRmluaXNoQ29tbWFuZCgpO1xuICAgICAgICAgICAgaWYgKGlzUHJvbWlzZShoYW5kbGVyUmVzdWx0KSkge1xuICAgICAgICAgICAgICAgIHlhcmdzLmdldFVzYWdlSW5zdGFuY2UoKS5jYWNoZUhlbHBNZXNzYWdlKCk7XG4gICAgICAgICAgICAgICAgaGFuZGxlclJlc3VsdFxuICAgICAgICAgICAgICAgICAgICAudGhlbih2YWx1ZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChoYW5kbGVyRmluaXNoQ29tbWFuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlckZpbmlzaENvbW1hbmQodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHlhcmdzLmdldFVzYWdlSW5zdGFuY2UoKS5mYWlsKG51bGwsIGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHlhcmdzLmdldFVzYWdlSW5zdGFuY2UoKS5jbGVhckNhY2hlZEhlbHBNZXNzYWdlKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoaGFuZGxlckZpbmlzaENvbW1hbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlckZpbmlzaENvbW1hbmQoaGFuZGxlclJlc3VsdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChjb21tYW5kKSB7XG4gICAgICAgICAgICBjdXJyZW50Q29udGV4dC5jb21tYW5kcy5wb3AoKTtcbiAgICAgICAgICAgIGN1cnJlbnRDb250ZXh0LmZ1bGxDb21tYW5kcy5wb3AoKTtcbiAgICAgICAgfVxuICAgICAgICBudW1GaWxlcyA9IGN1cnJlbnRDb250ZXh0LmZpbGVzLmxlbmd0aCAtIG51bUZpbGVzO1xuICAgICAgICBpZiAobnVtRmlsZXMgPiAwKVxuICAgICAgICAgICAgY3VycmVudENvbnRleHQuZmlsZXMuc3BsaWNlKG51bUZpbGVzICogLTEsIG51bUZpbGVzKTtcbiAgICAgICAgcmV0dXJuIGlubmVyQXJndjtcbiAgICB9O1xuICAgIGZ1bmN0aW9uIHNob3VsZFVwZGF0ZVVzYWdlKHlhcmdzKSB7XG4gICAgICAgIHJldHVybiAoIXlhcmdzLmdldFVzYWdlSW5zdGFuY2UoKS5nZXRVc2FnZURpc2FibGVkKCkgJiZcbiAgICAgICAgICAgIHlhcmdzLmdldFVzYWdlSW5zdGFuY2UoKS5nZXRVc2FnZSgpLmxlbmd0aCA9PT0gMCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHVzYWdlRnJvbVBhcmVudENvbW1hbmRzQ29tbWFuZEhhbmRsZXIocGFyZW50Q29tbWFuZHMsIGNvbW1hbmRIYW5kbGVyKSB7XG4gICAgICAgIGNvbnN0IGMgPSBERUZBVUxUX01BUktFUi50ZXN0KGNvbW1hbmRIYW5kbGVyLm9yaWdpbmFsKVxuICAgICAgICAgICAgPyBjb21tYW5kSGFuZGxlci5vcmlnaW5hbC5yZXBsYWNlKERFRkFVTFRfTUFSS0VSLCAnJykudHJpbSgpXG4gICAgICAgICAgICA6IGNvbW1hbmRIYW5kbGVyLm9yaWdpbmFsO1xuICAgICAgICBjb25zdCBwYyA9IHBhcmVudENvbW1hbmRzLmZpbHRlcihjID0+IHtcbiAgICAgICAgICAgIHJldHVybiAhREVGQVVMVF9NQVJLRVIudGVzdChjKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHBjLnB1c2goYyk7XG4gICAgICAgIHJldHVybiBgJDAgJHtwYy5qb2luKCcgJyl9YDtcbiAgICB9XG4gICAgc2VsZi5ydW5EZWZhdWx0QnVpbGRlck9uID0gZnVuY3Rpb24gKHlhcmdzKSB7XG4gICAgICAgIGFzc2VydE5vdFN0cmljdEVxdWFsKGRlZmF1bHRDb21tYW5kLCB1bmRlZmluZWQsIHNoaW0pO1xuICAgICAgICBpZiAoc2hvdWxkVXBkYXRlVXNhZ2UoeWFyZ3MpKSB7XG4gICAgICAgICAgICBjb25zdCBjb21tYW5kU3RyaW5nID0gREVGQVVMVF9NQVJLRVIudGVzdChkZWZhdWx0Q29tbWFuZC5vcmlnaW5hbClcbiAgICAgICAgICAgICAgICA/IGRlZmF1bHRDb21tYW5kLm9yaWdpbmFsXG4gICAgICAgICAgICAgICAgOiBkZWZhdWx0Q29tbWFuZC5vcmlnaW5hbC5yZXBsYWNlKC9eW15bXFxdPD5dKi8sICckMCAnKTtcbiAgICAgICAgICAgIHlhcmdzLmdldFVzYWdlSW5zdGFuY2UoKS51c2FnZShjb21tYW5kU3RyaW5nLCBkZWZhdWx0Q29tbWFuZC5kZXNjcmlwdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYnVpbGRlciA9IGRlZmF1bHRDb21tYW5kLmJ1aWxkZXI7XG4gICAgICAgIGlmIChpc0NvbW1hbmRCdWlsZGVyQ2FsbGJhY2soYnVpbGRlcikpIHtcbiAgICAgICAgICAgIGJ1aWxkZXIoeWFyZ3MpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCFpc0NvbW1hbmRCdWlsZGVyRGVmaW5pdGlvbihidWlsZGVyKSkge1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoYnVpbGRlcikuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgIHlhcmdzLm9wdGlvbihrZXksIGJ1aWxkZXJba2V5XSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgZnVuY3Rpb24gcG9wdWxhdGVQb3NpdGlvbmFscyhjb21tYW5kSGFuZGxlciwgYXJndiwgY29udGV4dCkge1xuICAgICAgICBhcmd2Ll8gPSBhcmd2Ll8uc2xpY2UoY29udGV4dC5jb21tYW5kcy5sZW5ndGgpO1xuICAgICAgICBjb25zdCBkZW1hbmRlZCA9IGNvbW1hbmRIYW5kbGVyLmRlbWFuZGVkLnNsaWNlKDApO1xuICAgICAgICBjb25zdCBvcHRpb25hbCA9IGNvbW1hbmRIYW5kbGVyLm9wdGlvbmFsLnNsaWNlKDApO1xuICAgICAgICBjb25zdCBwb3NpdGlvbmFsTWFwID0ge307XG4gICAgICAgIHZhbGlkYXRpb24ucG9zaXRpb25hbENvdW50KGRlbWFuZGVkLmxlbmd0aCwgYXJndi5fLmxlbmd0aCk7XG4gICAgICAgIHdoaWxlIChkZW1hbmRlZC5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGRlbWFuZCA9IGRlbWFuZGVkLnNoaWZ0KCk7XG4gICAgICAgICAgICBwb3B1bGF0ZVBvc2l0aW9uYWwoZGVtYW5kLCBhcmd2LCBwb3NpdGlvbmFsTWFwKTtcbiAgICAgICAgfVxuICAgICAgICB3aGlsZSAob3B0aW9uYWwubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBtYXliZSA9IG9wdGlvbmFsLnNoaWZ0KCk7XG4gICAgICAgICAgICBwb3B1bGF0ZVBvc2l0aW9uYWwobWF5YmUsIGFyZ3YsIHBvc2l0aW9uYWxNYXApO1xuICAgICAgICB9XG4gICAgICAgIGFyZ3YuXyA9IGNvbnRleHQuY29tbWFuZHMuY29uY2F0KGFyZ3YuXy5tYXAoYSA9PiAnJyArIGEpKTtcbiAgICAgICAgcG9zdFByb2Nlc3NQb3NpdGlvbmFscyhhcmd2LCBwb3NpdGlvbmFsTWFwLCBzZWxmLmNtZFRvUGFyc2VPcHRpb25zKGNvbW1hbmRIYW5kbGVyLm9yaWdpbmFsKSk7XG4gICAgICAgIHJldHVybiBwb3NpdGlvbmFsTWFwO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwb3B1bGF0ZVBvc2l0aW9uYWwocG9zaXRpb25hbCwgYXJndiwgcG9zaXRpb25hbE1hcCkge1xuICAgICAgICBjb25zdCBjbWQgPSBwb3NpdGlvbmFsLmNtZFswXTtcbiAgICAgICAgaWYgKHBvc2l0aW9uYWwudmFyaWFkaWMpIHtcbiAgICAgICAgICAgIHBvc2l0aW9uYWxNYXBbY21kXSA9IGFyZ3YuXy5zcGxpY2UoMCkubWFwKFN0cmluZyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoYXJndi5fLmxlbmd0aClcbiAgICAgICAgICAgICAgICBwb3NpdGlvbmFsTWFwW2NtZF0gPSBbU3RyaW5nKGFyZ3YuXy5zaGlmdCgpKV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gcG9zdFByb2Nlc3NQb3NpdGlvbmFscyhhcmd2LCBwb3NpdGlvbmFsTWFwLCBwYXJzZU9wdGlvbnMpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIHlhcmdzLmdldE9wdGlvbnMoKSk7XG4gICAgICAgIG9wdGlvbnMuZGVmYXVsdCA9IE9iamVjdC5hc3NpZ24ocGFyc2VPcHRpb25zLmRlZmF1bHQsIG9wdGlvbnMuZGVmYXVsdCk7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHBhcnNlT3B0aW9ucy5hbGlhcykpIHtcbiAgICAgICAgICAgIG9wdGlvbnMuYWxpYXNba2V5XSA9IChvcHRpb25zLmFsaWFzW2tleV0gfHwgW10pLmNvbmNhdChwYXJzZU9wdGlvbnMuYWxpYXNba2V5XSk7XG4gICAgICAgIH1cbiAgICAgICAgb3B0aW9ucy5hcnJheSA9IG9wdGlvbnMuYXJyYXkuY29uY2F0KHBhcnNlT3B0aW9ucy5hcnJheSk7XG4gICAgICAgIG9wdGlvbnMuY29uZmlnID0ge307XG4gICAgICAgIGNvbnN0IHVucGFyc2VkID0gW107XG4gICAgICAgIE9iamVjdC5rZXlzKHBvc2l0aW9uYWxNYXApLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIHBvc2l0aW9uYWxNYXBba2V5XS5tYXAodmFsdWUgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmNvbmZpZ3VyYXRpb25bJ3Vua25vd24tb3B0aW9ucy1hcy1hcmdzJ10pXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMua2V5W2tleV0gPSB0cnVlO1xuICAgICAgICAgICAgICAgIHVucGFyc2VkLnB1c2goYC0tJHtrZXl9YCk7XG4gICAgICAgICAgICAgICAgdW5wYXJzZWQucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghdW5wYXJzZWQubGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBjb25maWcgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLmNvbmZpZ3VyYXRpb24sIHtcbiAgICAgICAgICAgICdwb3B1bGF0ZS0tJzogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IHNoaW0uUGFyc2VyLmRldGFpbGVkKHVucGFyc2VkLCBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLCB7XG4gICAgICAgICAgICBjb25maWd1cmF0aW9uOiBjb25maWcsXG4gICAgICAgIH0pKTtcbiAgICAgICAgaWYgKHBhcnNlZC5lcnJvcikge1xuICAgICAgICAgICAgeWFyZ3MuZ2V0VXNhZ2VJbnN0YW5jZSgpLmZhaWwocGFyc2VkLmVycm9yLm1lc3NhZ2UsIHBhcnNlZC5lcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBwb3NpdGlvbmFsS2V5cyA9IE9iamVjdC5rZXlzKHBvc2l0aW9uYWxNYXApO1xuICAgICAgICAgICAgT2JqZWN0LmtleXMocG9zaXRpb25hbE1hcCkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uYWxLZXlzLnB1c2goLi4ucGFyc2VkLmFsaWFzZXNba2V5XSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHBhcnNlZC5hcmd2KS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHBvc2l0aW9uYWxLZXlzLmluZGV4T2Yoa2V5KSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFwb3NpdGlvbmFsTWFwW2tleV0pXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbmFsTWFwW2tleV0gPSBwYXJzZWQuYXJndltrZXldO1xuICAgICAgICAgICAgICAgICAgICBhcmd2W2tleV0gPSBwYXJzZWQuYXJndltrZXldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHNlbGYuY21kVG9QYXJzZU9wdGlvbnMgPSBmdW5jdGlvbiAoY21kU3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHBhcnNlT3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGFycmF5OiBbXSxcbiAgICAgICAgICAgIGRlZmF1bHQ6IHt9LFxuICAgICAgICAgICAgYWxpYXM6IHt9LFxuICAgICAgICAgICAgZGVtYW5kOiB7fSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gcGFyc2VDb21tYW5kKGNtZFN0cmluZyk7XG4gICAgICAgIHBhcnNlZC5kZW1hbmRlZC5mb3JFYWNoKGQgPT4ge1xuICAgICAgICAgICAgY29uc3QgW2NtZCwgLi4uYWxpYXNlc10gPSBkLmNtZDtcbiAgICAgICAgICAgIGlmIChkLnZhcmlhZGljKSB7XG4gICAgICAgICAgICAgICAgcGFyc2VPcHRpb25zLmFycmF5LnB1c2goY21kKTtcbiAgICAgICAgICAgICAgICBwYXJzZU9wdGlvbnMuZGVmYXVsdFtjbWRdID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwYXJzZU9wdGlvbnMuYWxpYXNbY21kXSA9IGFsaWFzZXM7XG4gICAgICAgICAgICBwYXJzZU9wdGlvbnMuZGVtYW5kW2NtZF0gPSB0cnVlO1xuICAgICAgICB9KTtcbiAgICAgICAgcGFyc2VkLm9wdGlvbmFsLmZvckVhY2gobyA9PiB7XG4gICAgICAgICAgICBjb25zdCBbY21kLCAuLi5hbGlhc2VzXSA9IG8uY21kO1xuICAgICAgICAgICAgaWYgKG8udmFyaWFkaWMpIHtcbiAgICAgICAgICAgICAgICBwYXJzZU9wdGlvbnMuYXJyYXkucHVzaChjbWQpO1xuICAgICAgICAgICAgICAgIHBhcnNlT3B0aW9ucy5kZWZhdWx0W2NtZF0gPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhcnNlT3B0aW9ucy5hbGlhc1tjbWRdID0gYWxpYXNlcztcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBwYXJzZU9wdGlvbnM7XG4gICAgfTtcbiAgICBzZWxmLnJlc2V0ID0gKCkgPT4ge1xuICAgICAgICBoYW5kbGVycyA9IHt9O1xuICAgICAgICBhbGlhc01hcCA9IHt9O1xuICAgICAgICBkZWZhdWx0Q29tbWFuZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBjb25zdCBmcm96ZW5zID0gW107XG4gICAgc2VsZi5mcmVlemUgPSAoKSA9PiB7XG4gICAgICAgIGZyb3plbnMucHVzaCh7XG4gICAgICAgICAgICBoYW5kbGVycyxcbiAgICAgICAgICAgIGFsaWFzTWFwLFxuICAgICAgICAgICAgZGVmYXVsdENvbW1hbmQsXG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgc2VsZi51bmZyZWV6ZSA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgZnJvemVuID0gZnJvemVucy5wb3AoKTtcbiAgICAgICAgYXNzZXJ0Tm90U3RyaWN0RXF1YWwoZnJvemVuLCB1bmRlZmluZWQsIHNoaW0pO1xuICAgICAgICAoeyBoYW5kbGVycywgYWxpYXNNYXAsIGRlZmF1bHRDb21tYW5kIH0gPSBmcm96ZW4pO1xuICAgIH07XG4gICAgcmV0dXJuIHNlbGY7XG59XG5mdW5jdGlvbiBpc0NvbW1hbmRCdWlsZGVyRGVmaW5pdGlvbihidWlsZGVyKSB7XG4gICAgcmV0dXJuICh0eXBlb2YgYnVpbGRlciA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgISFidWlsZGVyLmJ1aWxkZXIgJiZcbiAgICAgICAgdHlwZW9mIGJ1aWxkZXIuaGFuZGxlciA9PT0gJ2Z1bmN0aW9uJyk7XG59XG5mdW5jdGlvbiBpc0NvbW1hbmRBbmRBbGlhc2VzKGNtZCkge1xuICAgIGlmIChjbWQuZXZlcnkoYyA9PiB0eXBlb2YgYyA9PT0gJ3N0cmluZycpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGlzQ29tbWFuZEJ1aWxkZXJDYWxsYmFjayhidWlsZGVyKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBidWlsZGVyID09PSAnZnVuY3Rpb24nO1xufVxuZnVuY3Rpb24gaXNDb21tYW5kQnVpbGRlck9wdGlvbkRlZmluaXRpb25zKGJ1aWxkZXIpIHtcbiAgICByZXR1cm4gdHlwZW9mIGJ1aWxkZXIgPT09ICdvYmplY3QnO1xufVxuZnVuY3Rpb24gaXNDb21tYW5kSGFuZGxlckRlZmluaXRpb24oY21kKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBjbWQgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KGNtZCk7XG59XG5cbmZ1bmN0aW9uIHNldEJsb2NraW5nKGJsb2NraW5nKSB7XG4gICAgaWYgKHR5cGVvZiBwcm9jZXNzID09PSAndW5kZWZpbmVkJylcbiAgICAgICAgcmV0dXJuO1xuICAgIFtwcm9jZXNzLnN0ZG91dCwgcHJvY2Vzcy5zdGRlcnJdLmZvckVhY2goX3N0cmVhbSA9PiB7XG4gICAgICAgIGNvbnN0IHN0cmVhbSA9IF9zdHJlYW07XG4gICAgICAgIGlmIChzdHJlYW0uX2hhbmRsZSAmJlxuICAgICAgICAgICAgc3RyZWFtLmlzVFRZICYmXG4gICAgICAgICAgICB0eXBlb2Ygc3RyZWFtLl9oYW5kbGUuc2V0QmxvY2tpbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHN0cmVhbS5faGFuZGxlLnNldEJsb2NraW5nKGJsb2NraW5nKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuXG5mdW5jdGlvbiB1c2FnZSh5YXJncywgeTE4biwgc2hpbSkge1xuICAgIGNvbnN0IF9fID0geTE4bi5fXztcbiAgICBjb25zdCBzZWxmID0ge307XG4gICAgY29uc3QgZmFpbHMgPSBbXTtcbiAgICBzZWxmLmZhaWxGbiA9IGZ1bmN0aW9uIGZhaWxGbihmKSB7XG4gICAgICAgIGZhaWxzLnB1c2goZik7XG4gICAgfTtcbiAgICBsZXQgZmFpbE1lc3NhZ2UgPSBudWxsO1xuICAgIGxldCBzaG93SGVscE9uRmFpbCA9IHRydWU7XG4gICAgc2VsZi5zaG93SGVscE9uRmFpbCA9IGZ1bmN0aW9uIHNob3dIZWxwT25GYWlsRm4oYXJnMSA9IHRydWUsIGFyZzIpIHtcbiAgICAgICAgZnVuY3Rpb24gcGFyc2VGdW5jdGlvbkFyZ3MoKSB7XG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIGFyZzEgPT09ICdzdHJpbmcnID8gW3RydWUsIGFyZzFdIDogW2FyZzEsIGFyZzJdO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IFtlbmFibGVkLCBtZXNzYWdlXSA9IHBhcnNlRnVuY3Rpb25BcmdzKCk7XG4gICAgICAgIGZhaWxNZXNzYWdlID0gbWVzc2FnZTtcbiAgICAgICAgc2hvd0hlbHBPbkZhaWwgPSBlbmFibGVkO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIGxldCBmYWlsdXJlT3V0cHV0ID0gZmFsc2U7XG4gICAgc2VsZi5mYWlsID0gZnVuY3Rpb24gZmFpbChtc2csIGVycikge1xuICAgICAgICBjb25zdCBsb2dnZXIgPSB5YXJncy5fZ2V0TG9nZ2VySW5zdGFuY2UoKTtcbiAgICAgICAgaWYgKGZhaWxzLmxlbmd0aCkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IGZhaWxzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgICAgICAgICAgZmFpbHNbaV0obXNnLCBlcnIsIHNlbGYpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKHlhcmdzLmdldEV4aXRQcm9jZXNzKCkpXG4gICAgICAgICAgICAgICAgc2V0QmxvY2tpbmcodHJ1ZSk7XG4gICAgICAgICAgICBpZiAoIWZhaWx1cmVPdXRwdXQpIHtcbiAgICAgICAgICAgICAgICBmYWlsdXJlT3V0cHV0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBpZiAoc2hvd0hlbHBPbkZhaWwpIHtcbiAgICAgICAgICAgICAgICAgICAgeWFyZ3Muc2hvd0hlbHAoJ2Vycm9yJyk7XG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAobXNnIHx8IGVycilcbiAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKG1zZyB8fCBlcnIpO1xuICAgICAgICAgICAgICAgIGlmIChmYWlsTWVzc2FnZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAobXNnIHx8IGVycilcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcignJyk7XG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihmYWlsTWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZXJyID0gZXJyIHx8IG5ldyBZRXJyb3IobXNnKTtcbiAgICAgICAgICAgIGlmICh5YXJncy5nZXRFeGl0UHJvY2VzcygpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHlhcmdzLmV4aXQoMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh5YXJncy5faGFzUGFyc2VDYWxsYmFjaygpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHlhcmdzLmV4aXQoMSwgZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgbGV0IHVzYWdlcyA9IFtdO1xuICAgIGxldCB1c2FnZURpc2FibGVkID0gZmFsc2U7XG4gICAgc2VsZi51c2FnZSA9IChtc2csIGRlc2NyaXB0aW9uKSA9PiB7XG4gICAgICAgIGlmIChtc2cgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHVzYWdlRGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgdXNhZ2VzID0gW107XG4gICAgICAgICAgICByZXR1cm4gc2VsZjtcbiAgICAgICAgfVxuICAgICAgICB1c2FnZURpc2FibGVkID0gZmFsc2U7XG4gICAgICAgIHVzYWdlcy5wdXNoKFttc2csIGRlc2NyaXB0aW9uIHx8ICcnXSk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5nZXRVc2FnZSA9ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHVzYWdlcztcbiAgICB9O1xuICAgIHNlbGYuZ2V0VXNhZ2VEaXNhYmxlZCA9ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHVzYWdlRGlzYWJsZWQ7XG4gICAgfTtcbiAgICBzZWxmLmdldFBvc2l0aW9uYWxHcm91cE5hbWUgPSAoKSA9PiB7XG4gICAgICAgIHJldHVybiBfXygnUG9zaXRpb25hbHM6Jyk7XG4gICAgfTtcbiAgICBsZXQgZXhhbXBsZXMgPSBbXTtcbiAgICBzZWxmLmV4YW1wbGUgPSAoY21kLCBkZXNjcmlwdGlvbikgPT4ge1xuICAgICAgICBleGFtcGxlcy5wdXNoKFtjbWQsIGRlc2NyaXB0aW9uIHx8ICcnXSk7XG4gICAgfTtcbiAgICBsZXQgY29tbWFuZHMgPSBbXTtcbiAgICBzZWxmLmNvbW1hbmQgPSBmdW5jdGlvbiBjb21tYW5kKGNtZCwgZGVzY3JpcHRpb24sIGlzRGVmYXVsdCwgYWxpYXNlcywgZGVwcmVjYXRlZCA9IGZhbHNlKSB7XG4gICAgICAgIGlmIChpc0RlZmF1bHQpIHtcbiAgICAgICAgICAgIGNvbW1hbmRzID0gY29tbWFuZHMubWFwKGNtZEFycmF5ID0+IHtcbiAgICAgICAgICAgICAgICBjbWRBcnJheVsyXSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJldHVybiBjbWRBcnJheTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNvbW1hbmRzLnB1c2goW2NtZCwgZGVzY3JpcHRpb24gfHwgJycsIGlzRGVmYXVsdCwgYWxpYXNlcywgZGVwcmVjYXRlZF0pO1xuICAgIH07XG4gICAgc2VsZi5nZXRDb21tYW5kcyA9ICgpID0+IGNvbW1hbmRzO1xuICAgIGxldCBkZXNjcmlwdGlvbnMgPSB7fTtcbiAgICBzZWxmLmRlc2NyaWJlID0gZnVuY3Rpb24gZGVzY3JpYmUoa2V5T3JLZXlzLCBkZXNjKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGtleU9yS2V5cykpIHtcbiAgICAgICAgICAgIGtleU9yS2V5cy5mb3JFYWNoKGsgPT4ge1xuICAgICAgICAgICAgICAgIHNlbGYuZGVzY3JpYmUoaywgZGVzYyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2Yga2V5T3JLZXlzID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoa2V5T3JLZXlzKS5mb3JFYWNoKGsgPT4ge1xuICAgICAgICAgICAgICAgIHNlbGYuZGVzY3JpYmUoaywga2V5T3JLZXlzW2tdKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZGVzY3JpcHRpb25zW2tleU9yS2V5c10gPSBkZXNjO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBzZWxmLmdldERlc2NyaXB0aW9ucyA9ICgpID0+IGRlc2NyaXB0aW9ucztcbiAgICBsZXQgZXBpbG9ncyA9IFtdO1xuICAgIHNlbGYuZXBpbG9nID0gbXNnID0+IHtcbiAgICAgICAgZXBpbG9ncy5wdXNoKG1zZyk7XG4gICAgfTtcbiAgICBsZXQgd3JhcFNldCA9IGZhbHNlO1xuICAgIGxldCB3cmFwO1xuICAgIHNlbGYud3JhcCA9IGNvbHMgPT4ge1xuICAgICAgICB3cmFwU2V0ID0gdHJ1ZTtcbiAgICAgICAgd3JhcCA9IGNvbHM7XG4gICAgfTtcbiAgICBmdW5jdGlvbiBnZXRXcmFwKCkge1xuICAgICAgICBpZiAoIXdyYXBTZXQpIHtcbiAgICAgICAgICAgIHdyYXAgPSB3aW5kb3dXaWR0aCgpO1xuICAgICAgICAgICAgd3JhcFNldCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHdyYXA7XG4gICAgfVxuICAgIGNvbnN0IGRlZmVyWTE4bkxvb2t1cFByZWZpeCA9ICdfX3lhcmdzU3RyaW5nX186JztcbiAgICBzZWxmLmRlZmVyWTE4bkxvb2t1cCA9IHN0ciA9PiBkZWZlclkxOG5Mb29rdXBQcmVmaXggKyBzdHI7XG4gICAgc2VsZi5oZWxwID0gZnVuY3Rpb24gaGVscCgpIHtcbiAgICAgICAgaWYgKGNhY2hlZEhlbHBNZXNzYWdlKVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZEhlbHBNZXNzYWdlO1xuICAgICAgICBub3JtYWxpemVBbGlhc2VzKCk7XG4gICAgICAgIGNvbnN0IGJhc2UkMCA9IHlhcmdzLmN1c3RvbVNjcmlwdE5hbWVcbiAgICAgICAgICAgID8geWFyZ3MuJDBcbiAgICAgICAgICAgIDogc2hpbS5wYXRoLmJhc2VuYW1lKHlhcmdzLiQwKTtcbiAgICAgICAgY29uc3QgZGVtYW5kZWRPcHRpb25zID0geWFyZ3MuZ2V0RGVtYW5kZWRPcHRpb25zKCk7XG4gICAgICAgIGNvbnN0IGRlbWFuZGVkQ29tbWFuZHMgPSB5YXJncy5nZXREZW1hbmRlZENvbW1hbmRzKCk7XG4gICAgICAgIGNvbnN0IGRlcHJlY2F0ZWRPcHRpb25zID0geWFyZ3MuZ2V0RGVwcmVjYXRlZE9wdGlvbnMoKTtcbiAgICAgICAgY29uc3QgZ3JvdXBzID0geWFyZ3MuZ2V0R3JvdXBzKCk7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB5YXJncy5nZXRPcHRpb25zKCk7XG4gICAgICAgIGxldCBrZXlzID0gW107XG4gICAgICAgIGtleXMgPSBrZXlzLmNvbmNhdChPYmplY3Qua2V5cyhkZXNjcmlwdGlvbnMpKTtcbiAgICAgICAga2V5cyA9IGtleXMuY29uY2F0KE9iamVjdC5rZXlzKGRlbWFuZGVkT3B0aW9ucykpO1xuICAgICAgICBrZXlzID0ga2V5cy5jb25jYXQoT2JqZWN0LmtleXMoZGVtYW5kZWRDb21tYW5kcykpO1xuICAgICAgICBrZXlzID0ga2V5cy5jb25jYXQoT2JqZWN0LmtleXMob3B0aW9ucy5kZWZhdWx0KSk7XG4gICAgICAgIGtleXMgPSBrZXlzLmZpbHRlcihmaWx0ZXJIaWRkZW5PcHRpb25zKTtcbiAgICAgICAga2V5cyA9IE9iamVjdC5rZXlzKGtleXMucmVkdWNlKChhY2MsIGtleSkgPT4ge1xuICAgICAgICAgICAgaWYgKGtleSAhPT0gJ18nKVxuICAgICAgICAgICAgICAgIGFjY1trZXldID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH0sIHt9KSk7XG4gICAgICAgIGNvbnN0IHRoZVdyYXAgPSBnZXRXcmFwKCk7XG4gICAgICAgIGNvbnN0IHVpID0gc2hpbS5jbGl1aSh7XG4gICAgICAgICAgICB3aWR0aDogdGhlV3JhcCxcbiAgICAgICAgICAgIHdyYXA6ICEhdGhlV3JhcCxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghdXNhZ2VEaXNhYmxlZCkge1xuICAgICAgICAgICAgaWYgKHVzYWdlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB1c2FnZXMuZm9yRWFjaCh1c2FnZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHVpLmRpdihgJHt1c2FnZVswXS5yZXBsYWNlKC9cXCQwL2csIGJhc2UkMCl9YCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1c2FnZVsxXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdWkuZGl2KHsgdGV4dDogYCR7dXNhZ2VbMV19YCwgcGFkZGluZzogWzEsIDAsIDAsIDBdIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdWkuZGl2KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjb21tYW5kcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBsZXQgdSA9IG51bGw7XG4gICAgICAgICAgICAgICAgaWYgKGRlbWFuZGVkQ29tbWFuZHMuXykge1xuICAgICAgICAgICAgICAgICAgICB1ID0gYCR7YmFzZSQwfSA8JHtfXygnY29tbWFuZCcpfT5cXG5gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdSA9IGAke2Jhc2UkMH0gWyR7X18oJ2NvbW1hbmQnKX1dXFxuYDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdWkuZGl2KGAke3V9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbW1hbmRzLmxlbmd0aCkge1xuICAgICAgICAgICAgdWkuZGl2KF9fKCdDb21tYW5kczonKSk7XG4gICAgICAgICAgICBjb25zdCBjb250ZXh0ID0geWFyZ3MuZ2V0Q29udGV4dCgpO1xuICAgICAgICAgICAgY29uc3QgcGFyZW50Q29tbWFuZHMgPSBjb250ZXh0LmNvbW1hbmRzLmxlbmd0aFxuICAgICAgICAgICAgICAgID8gYCR7Y29udGV4dC5jb21tYW5kcy5qb2luKCcgJyl9IGBcbiAgICAgICAgICAgICAgICA6ICcnO1xuICAgICAgICAgICAgaWYgKHlhcmdzLmdldFBhcnNlckNvbmZpZ3VyYXRpb24oKVsnc29ydC1jb21tYW5kcyddID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgY29tbWFuZHMgPSBjb21tYW5kcy5zb3J0KChhLCBiKSA9PiBhWzBdLmxvY2FsZUNvbXBhcmUoYlswXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29tbWFuZHMuZm9yRWFjaChjb21tYW5kID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb21tYW5kU3RyaW5nID0gYCR7YmFzZSQwfSAke3BhcmVudENvbW1hbmRzfSR7Y29tbWFuZFswXS5yZXBsYWNlKC9eXFwkMCA/LywgJycpfWA7XG4gICAgICAgICAgICAgICAgdWkuc3Bhbih7XG4gICAgICAgICAgICAgICAgICAgIHRleHQ6IGNvbW1hbmRTdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IFswLCAyLCAwLCAyXSxcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IG1heFdpZHRoKGNvbW1hbmRzLCB0aGVXcmFwLCBgJHtiYXNlJDB9JHtwYXJlbnRDb21tYW5kc31gKSArIDQsXG4gICAgICAgICAgICAgICAgfSwgeyB0ZXh0OiBjb21tYW5kWzFdIH0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGhpbnRzID0gW107XG4gICAgICAgICAgICAgICAgaWYgKGNvbW1hbmRbMl0pXG4gICAgICAgICAgICAgICAgICAgIGhpbnRzLnB1c2goYFske19fKCdkZWZhdWx0Jyl9XWApO1xuICAgICAgICAgICAgICAgIGlmIChjb21tYW5kWzNdICYmIGNvbW1hbmRbM10ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGhpbnRzLnB1c2goYFske19fKCdhbGlhc2VzOicpfSAke2NvbW1hbmRbM10uam9pbignLCAnKX1dYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChjb21tYW5kWzRdKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY29tbWFuZFs0XSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhpbnRzLnB1c2goYFske19fKCdkZXByZWNhdGVkOiAlcycsIGNvbW1hbmRbNF0pfV1gKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhpbnRzLnB1c2goYFske19fKCdkZXByZWNhdGVkJyl9XWApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChoaW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdWkuZGl2KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IGhpbnRzLmpvaW4oJyAnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IFswLCAwLCAwLCAyXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsaWduOiAncmlnaHQnLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHVpLmRpdigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdWkuZGl2KCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYWxpYXNLZXlzID0gKE9iamVjdC5rZXlzKG9wdGlvbnMuYWxpYXMpIHx8IFtdKS5jb25jYXQoT2JqZWN0LmtleXMoeWFyZ3MucGFyc2VkLm5ld0FsaWFzZXMpIHx8IFtdKTtcbiAgICAgICAga2V5cyA9IGtleXMuZmlsdGVyKGtleSA9PiAheWFyZ3MucGFyc2VkLm5ld0FsaWFzZXNba2V5XSAmJlxuICAgICAgICAgICAgYWxpYXNLZXlzLmV2ZXJ5KGFsaWFzID0+IChvcHRpb25zLmFsaWFzW2FsaWFzXSB8fCBbXSkuaW5kZXhPZihrZXkpID09PSAtMSkpO1xuICAgICAgICBjb25zdCBkZWZhdWx0R3JvdXAgPSBfXygnT3B0aW9uczonKTtcbiAgICAgICAgaWYgKCFncm91cHNbZGVmYXVsdEdyb3VwXSlcbiAgICAgICAgICAgIGdyb3Vwc1tkZWZhdWx0R3JvdXBdID0gW107XG4gICAgICAgIGFkZFVuZ3JvdXBlZEtleXMoa2V5cywgb3B0aW9ucy5hbGlhcywgZ3JvdXBzLCBkZWZhdWx0R3JvdXApO1xuICAgICAgICBjb25zdCBpc0xvbmdTd2l0Y2ggPSAoc3cpID0+IC9eLS0vLnRlc3QoZ2V0VGV4dChzdykpO1xuICAgICAgICBjb25zdCBkaXNwbGF5ZWRHcm91cHMgPSBPYmplY3Qua2V5cyhncm91cHMpXG4gICAgICAgICAgICAuZmlsdGVyKGdyb3VwTmFtZSA9PiBncm91cHNbZ3JvdXBOYW1lXS5sZW5ndGggPiAwKVxuICAgICAgICAgICAgLm1hcChncm91cE5hbWUgPT4ge1xuICAgICAgICAgICAgY29uc3Qgbm9ybWFsaXplZEtleXMgPSBncm91cHNbZ3JvdXBOYW1lXVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoZmlsdGVySGlkZGVuT3B0aW9ucylcbiAgICAgICAgICAgICAgICAubWFwKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKH5hbGlhc0tleXMuaW5kZXhPZihrZXkpKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ga2V5O1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBhbGlhc0tleTsgKGFsaWFzS2V5ID0gYWxpYXNLZXlzW2ldKSAhPT0gdW5kZWZpbmVkOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKH4ob3B0aW9ucy5hbGlhc1thbGlhc0tleV0gfHwgW10pLmluZGV4T2Yoa2V5KSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhbGlhc0tleTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGtleTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHsgZ3JvdXBOYW1lLCBub3JtYWxpemVkS2V5cyB9O1xuICAgICAgICB9KVxuICAgICAgICAgICAgLmZpbHRlcigoeyBub3JtYWxpemVkS2V5cyB9KSA9PiBub3JtYWxpemVkS2V5cy5sZW5ndGggPiAwKVxuICAgICAgICAgICAgLm1hcCgoeyBncm91cE5hbWUsIG5vcm1hbGl6ZWRLZXlzIH0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHN3aXRjaGVzID0gbm9ybWFsaXplZEtleXMucmVkdWNlKChhY2MsIGtleSkgPT4ge1xuICAgICAgICAgICAgICAgIGFjY1trZXldID0gW2tleV1cbiAgICAgICAgICAgICAgICAgICAgLmNvbmNhdChvcHRpb25zLmFsaWFzW2tleV0gfHwgW10pXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoc3cgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZ3JvdXBOYW1lID09PSBzZWxmLmdldFBvc2l0aW9uYWxHcm91cE5hbWUoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdztcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCgvXlswLTldJC8udGVzdChzdylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IH5vcHRpb25zLmJvb2xlYW4uaW5kZXhPZihrZXkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJy0nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJy0tJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogc3cubGVuZ3RoID4gMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICctLSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnLScpICsgc3cpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLnNvcnQoKHN3MSwgc3cyKSA9PiBpc0xvbmdTd2l0Y2goc3cxKSA9PT0gaXNMb25nU3dpdGNoKHN3MilcbiAgICAgICAgICAgICAgICAgICAgPyAwXG4gICAgICAgICAgICAgICAgICAgIDogaXNMb25nU3dpdGNoKHN3MSlcbiAgICAgICAgICAgICAgICAgICAgICAgID8gMVxuICAgICAgICAgICAgICAgICAgICAgICAgOiAtMSlcbiAgICAgICAgICAgICAgICAgICAgLmpvaW4oJywgJyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICAgIH0sIHt9KTtcbiAgICAgICAgICAgIHJldHVybiB7IGdyb3VwTmFtZSwgbm9ybWFsaXplZEtleXMsIHN3aXRjaGVzIH07XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBzaG9ydFN3aXRjaGVzVXNlZCA9IGRpc3BsYXllZEdyb3Vwc1xuICAgICAgICAgICAgLmZpbHRlcigoeyBncm91cE5hbWUgfSkgPT4gZ3JvdXBOYW1lICE9PSBzZWxmLmdldFBvc2l0aW9uYWxHcm91cE5hbWUoKSlcbiAgICAgICAgICAgIC5zb21lKCh7IG5vcm1hbGl6ZWRLZXlzLCBzd2l0Y2hlcyB9KSA9PiAhbm9ybWFsaXplZEtleXMuZXZlcnkoa2V5ID0+IGlzTG9uZ1N3aXRjaChzd2l0Y2hlc1trZXldKSkpO1xuICAgICAgICBpZiAoc2hvcnRTd2l0Y2hlc1VzZWQpIHtcbiAgICAgICAgICAgIGRpc3BsYXllZEdyb3Vwc1xuICAgICAgICAgICAgICAgIC5maWx0ZXIoKHsgZ3JvdXBOYW1lIH0pID0+IGdyb3VwTmFtZSAhPT0gc2VsZi5nZXRQb3NpdGlvbmFsR3JvdXBOYW1lKCkpXG4gICAgICAgICAgICAgICAgLmZvckVhY2goKHsgbm9ybWFsaXplZEtleXMsIHN3aXRjaGVzIH0pID0+IHtcbiAgICAgICAgICAgICAgICBub3JtYWxpemVkS2V5cy5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0xvbmdTd2l0Y2goc3dpdGNoZXNba2V5XSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaGVzW2tleV0gPSBhZGRJbmRlbnRhdGlvbihzd2l0Y2hlc1trZXldLCAnLXgsICcubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZGlzcGxheWVkR3JvdXBzLmZvckVhY2goKHsgZ3JvdXBOYW1lLCBub3JtYWxpemVkS2V5cywgc3dpdGNoZXMgfSkgPT4ge1xuICAgICAgICAgICAgdWkuZGl2KGdyb3VwTmFtZSk7XG4gICAgICAgICAgICBub3JtYWxpemVkS2V5cy5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qga3N3aXRjaCA9IHN3aXRjaGVzW2tleV07XG4gICAgICAgICAgICAgICAgbGV0IGRlc2MgPSBkZXNjcmlwdGlvbnNba2V5XSB8fCAnJztcbiAgICAgICAgICAgICAgICBsZXQgdHlwZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgaWYgKH5kZXNjLmxhc3RJbmRleE9mKGRlZmVyWTE4bkxvb2t1cFByZWZpeCkpXG4gICAgICAgICAgICAgICAgICAgIGRlc2MgPSBfXyhkZXNjLnN1YnN0cmluZyhkZWZlclkxOG5Mb29rdXBQcmVmaXgubGVuZ3RoKSk7XG4gICAgICAgICAgICAgICAgaWYgKH5vcHRpb25zLmJvb2xlYW4uaW5kZXhPZihrZXkpKVxuICAgICAgICAgICAgICAgICAgICB0eXBlID0gYFske19fKCdib29sZWFuJyl9XWA7XG4gICAgICAgICAgICAgICAgaWYgKH5vcHRpb25zLmNvdW50LmluZGV4T2Yoa2V5KSlcbiAgICAgICAgICAgICAgICAgICAgdHlwZSA9IGBbJHtfXygnY291bnQnKX1dYDtcbiAgICAgICAgICAgICAgICBpZiAofm9wdGlvbnMuc3RyaW5nLmluZGV4T2Yoa2V5KSlcbiAgICAgICAgICAgICAgICAgICAgdHlwZSA9IGBbJHtfXygnc3RyaW5nJyl9XWA7XG4gICAgICAgICAgICAgICAgaWYgKH5vcHRpb25zLm5vcm1hbGl6ZS5pbmRleE9mKGtleSkpXG4gICAgICAgICAgICAgICAgICAgIHR5cGUgPSBgWyR7X18oJ3N0cmluZycpfV1gO1xuICAgICAgICAgICAgICAgIGlmICh+b3B0aW9ucy5hcnJheS5pbmRleE9mKGtleSkpXG4gICAgICAgICAgICAgICAgICAgIHR5cGUgPSBgWyR7X18oJ2FycmF5Jyl9XWA7XG4gICAgICAgICAgICAgICAgaWYgKH5vcHRpb25zLm51bWJlci5pbmRleE9mKGtleSkpXG4gICAgICAgICAgICAgICAgICAgIHR5cGUgPSBgWyR7X18oJ251bWJlcicpfV1gO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRlcHJlY2F0ZWRFeHRyYSA9IChkZXByZWNhdGVkKSA9PiB0eXBlb2YgZGVwcmVjYXRlZCA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgICAgICAgICAgPyBgWyR7X18oJ2RlcHJlY2F0ZWQ6ICVzJywgZGVwcmVjYXRlZCl9XWBcbiAgICAgICAgICAgICAgICAgICAgOiBgWyR7X18oJ2RlcHJlY2F0ZWQnKX1dYDtcbiAgICAgICAgICAgICAgICBjb25zdCBleHRyYSA9IFtcbiAgICAgICAgICAgICAgICAgICAga2V5IGluIGRlcHJlY2F0ZWRPcHRpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGRlcHJlY2F0ZWRFeHRyYShkZXByZWNhdGVkT3B0aW9uc1trZXldKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgICAgICAgICBrZXkgaW4gZGVtYW5kZWRPcHRpb25zID8gYFske19fKCdyZXF1aXJlZCcpfV1gIDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5jaG9pY2VzICYmIG9wdGlvbnMuY2hvaWNlc1trZXldXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGBbJHtfXygnY2hvaWNlczonKX0gJHtzZWxmLnN0cmluZ2lmaWVkVmFsdWVzKG9wdGlvbnMuY2hvaWNlc1trZXldKX1dYFxuICAgICAgICAgICAgICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0U3RyaW5nKG9wdGlvbnMuZGVmYXVsdFtrZXldLCBvcHRpb25zLmRlZmF1bHREZXNjcmlwdGlvbltrZXldKSxcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgICAgICAgICAgICAgLmpvaW4oJyAnKTtcbiAgICAgICAgICAgICAgICB1aS5zcGFuKHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dDogZ2V0VGV4dChrc3dpdGNoKSxcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogWzAsIDIsIDAsIDIgKyBnZXRJbmRlbnRhdGlvbihrc3dpdGNoKV0sXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiBtYXhXaWR0aChzd2l0Y2hlcywgdGhlV3JhcCkgKyA0LFxuICAgICAgICAgICAgICAgIH0sIGRlc2MpO1xuICAgICAgICAgICAgICAgIGlmIChleHRyYSlcbiAgICAgICAgICAgICAgICAgICAgdWkuZGl2KHsgdGV4dDogZXh0cmEsIHBhZGRpbmc6IFswLCAwLCAwLCAyXSwgYWxpZ246ICdyaWdodCcgfSk7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB1aS5kaXYoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdWkuZGl2KCk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoZXhhbXBsZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICB1aS5kaXYoX18oJ0V4YW1wbGVzOicpKTtcbiAgICAgICAgICAgIGV4YW1wbGVzLmZvckVhY2goZXhhbXBsZSA9PiB7XG4gICAgICAgICAgICAgICAgZXhhbXBsZVswXSA9IGV4YW1wbGVbMF0ucmVwbGFjZSgvXFwkMC9nLCBiYXNlJDApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBleGFtcGxlcy5mb3JFYWNoKGV4YW1wbGUgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChleGFtcGxlWzFdID09PSAnJykge1xuICAgICAgICAgICAgICAgICAgICB1aS5kaXYoe1xuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogZXhhbXBsZVswXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IFswLCAyLCAwLCAyXSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB1aS5kaXYoe1xuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogZXhhbXBsZVswXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IFswLCAyLCAwLCAyXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBtYXhXaWR0aChleGFtcGxlcywgdGhlV3JhcCkgKyA0LFxuICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBleGFtcGxlWzFdLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHVpLmRpdigpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlcGlsb2dzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGUgPSBlcGlsb2dzXG4gICAgICAgICAgICAgICAgLm1hcChlcGlsb2cgPT4gZXBpbG9nLnJlcGxhY2UoL1xcJDAvZywgYmFzZSQwKSlcbiAgICAgICAgICAgICAgICAuam9pbignXFxuJyk7XG4gICAgICAgICAgICB1aS5kaXYoYCR7ZX1cXG5gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdWkudG9TdHJpbmcoKS5yZXBsYWNlKC9cXHMqJC8sICcnKTtcbiAgICB9O1xuICAgIGZ1bmN0aW9uIG1heFdpZHRoKHRhYmxlLCB0aGVXcmFwLCBtb2RpZmllcikge1xuICAgICAgICBsZXQgd2lkdGggPSAwO1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodGFibGUpKSB7XG4gICAgICAgICAgICB0YWJsZSA9IE9iamVjdC52YWx1ZXModGFibGUpLm1hcCh2ID0+IFt2XSk7XG4gICAgICAgIH1cbiAgICAgICAgdGFibGUuZm9yRWFjaCh2ID0+IHtcbiAgICAgICAgICAgIHdpZHRoID0gTWF0aC5tYXgoc2hpbS5zdHJpbmdXaWR0aChtb2RpZmllciA/IGAke21vZGlmaWVyfSAke2dldFRleHQodlswXSl9YCA6IGdldFRleHQodlswXSkpICsgZ2V0SW5kZW50YXRpb24odlswXSksIHdpZHRoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICh0aGVXcmFwKVxuICAgICAgICAgICAgd2lkdGggPSBNYXRoLm1pbih3aWR0aCwgcGFyc2VJbnQoKHRoZVdyYXAgKiAwLjUpLnRvU3RyaW5nKCksIDEwKSk7XG4gICAgICAgIHJldHVybiB3aWR0aDtcbiAgICB9XG4gICAgZnVuY3Rpb24gbm9ybWFsaXplQWxpYXNlcygpIHtcbiAgICAgICAgY29uc3QgZGVtYW5kZWRPcHRpb25zID0geWFyZ3MuZ2V0RGVtYW5kZWRPcHRpb25zKCk7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB5YXJncy5nZXRPcHRpb25zKCk7XG4gICAgICAgIChPYmplY3Qua2V5cyhvcHRpb25zLmFsaWFzKSB8fCBbXSkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgb3B0aW9ucy5hbGlhc1trZXldLmZvckVhY2goYWxpYXMgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChkZXNjcmlwdGlvbnNbYWxpYXNdKVxuICAgICAgICAgICAgICAgICAgICBzZWxmLmRlc2NyaWJlKGtleSwgZGVzY3JpcHRpb25zW2FsaWFzXSk7XG4gICAgICAgICAgICAgICAgaWYgKGFsaWFzIGluIGRlbWFuZGVkT3B0aW9ucylcbiAgICAgICAgICAgICAgICAgICAgeWFyZ3MuZGVtYW5kT3B0aW9uKGtleSwgZGVtYW5kZWRPcHRpb25zW2FsaWFzXSk7XG4gICAgICAgICAgICAgICAgaWYgKH5vcHRpb25zLmJvb2xlYW4uaW5kZXhPZihhbGlhcykpXG4gICAgICAgICAgICAgICAgICAgIHlhcmdzLmJvb2xlYW4oa2V5KTtcbiAgICAgICAgICAgICAgICBpZiAofm9wdGlvbnMuY291bnQuaW5kZXhPZihhbGlhcykpXG4gICAgICAgICAgICAgICAgICAgIHlhcmdzLmNvdW50KGtleSk7XG4gICAgICAgICAgICAgICAgaWYgKH5vcHRpb25zLnN0cmluZy5pbmRleE9mKGFsaWFzKSlcbiAgICAgICAgICAgICAgICAgICAgeWFyZ3Muc3RyaW5nKGtleSk7XG4gICAgICAgICAgICAgICAgaWYgKH5vcHRpb25zLm5vcm1hbGl6ZS5pbmRleE9mKGFsaWFzKSlcbiAgICAgICAgICAgICAgICAgICAgeWFyZ3Mubm9ybWFsaXplKGtleSk7XG4gICAgICAgICAgICAgICAgaWYgKH5vcHRpb25zLmFycmF5LmluZGV4T2YoYWxpYXMpKVxuICAgICAgICAgICAgICAgICAgICB5YXJncy5hcnJheShrZXkpO1xuICAgICAgICAgICAgICAgIGlmICh+b3B0aW9ucy5udW1iZXIuaW5kZXhPZihhbGlhcykpXG4gICAgICAgICAgICAgICAgICAgIHlhcmdzLm51bWJlcihrZXkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBsZXQgY2FjaGVkSGVscE1lc3NhZ2U7XG4gICAgc2VsZi5jYWNoZUhlbHBNZXNzYWdlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBjYWNoZWRIZWxwTWVzc2FnZSA9IHRoaXMuaGVscCgpO1xuICAgIH07XG4gICAgc2VsZi5jbGVhckNhY2hlZEhlbHBNZXNzYWdlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBjYWNoZWRIZWxwTWVzc2FnZSA9IHVuZGVmaW5lZDtcbiAgICB9O1xuICAgIGZ1bmN0aW9uIGFkZFVuZ3JvdXBlZEtleXMoa2V5cywgYWxpYXNlcywgZ3JvdXBzLCBkZWZhdWx0R3JvdXApIHtcbiAgICAgICAgbGV0IGdyb3VwZWRLZXlzID0gW107XG4gICAgICAgIGxldCB0b0NoZWNrID0gbnVsbDtcbiAgICAgICAgT2JqZWN0LmtleXMoZ3JvdXBzKS5mb3JFYWNoKGdyb3VwID0+IHtcbiAgICAgICAgICAgIGdyb3VwZWRLZXlzID0gZ3JvdXBlZEtleXMuY29uY2F0KGdyb3Vwc1tncm91cF0pO1xuICAgICAgICB9KTtcbiAgICAgICAga2V5cy5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICB0b0NoZWNrID0gW2tleV0uY29uY2F0KGFsaWFzZXNba2V5XSk7XG4gICAgICAgICAgICBpZiAoIXRvQ2hlY2suc29tZShrID0+IGdyb3VwZWRLZXlzLmluZGV4T2YoaykgIT09IC0xKSkge1xuICAgICAgICAgICAgICAgIGdyb3Vwc1tkZWZhdWx0R3JvdXBdLnB1c2goa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBncm91cGVkS2V5cztcbiAgICB9XG4gICAgZnVuY3Rpb24gZmlsdGVySGlkZGVuT3B0aW9ucyhrZXkpIHtcbiAgICAgICAgcmV0dXJuICh5YXJncy5nZXRPcHRpb25zKCkuaGlkZGVuT3B0aW9ucy5pbmRleE9mKGtleSkgPCAwIHx8XG4gICAgICAgICAgICB5YXJncy5wYXJzZWQuYXJndlt5YXJncy5nZXRPcHRpb25zKCkuc2hvd0hpZGRlbk9wdF0pO1xuICAgIH1cbiAgICBzZWxmLnNob3dIZWxwID0gKGxldmVsKSA9PiB7XG4gICAgICAgIGNvbnN0IGxvZ2dlciA9IHlhcmdzLl9nZXRMb2dnZXJJbnN0YW5jZSgpO1xuICAgICAgICBpZiAoIWxldmVsKVxuICAgICAgICAgICAgbGV2ZWwgPSAnZXJyb3InO1xuICAgICAgICBjb25zdCBlbWl0ID0gdHlwZW9mIGxldmVsID09PSAnZnVuY3Rpb24nID8gbGV2ZWwgOiBsb2dnZXJbbGV2ZWxdO1xuICAgICAgICBlbWl0KHNlbGYuaGVscCgpKTtcbiAgICB9O1xuICAgIHNlbGYuZnVuY3Rpb25EZXNjcmlwdGlvbiA9IGZuID0+IHtcbiAgICAgICAgY29uc3QgZGVzY3JpcHRpb24gPSBmbi5uYW1lXG4gICAgICAgICAgICA/IHNoaW0uUGFyc2VyLmRlY2FtZWxpemUoZm4ubmFtZSwgJy0nKVxuICAgICAgICAgICAgOiBfXygnZ2VuZXJhdGVkLXZhbHVlJyk7XG4gICAgICAgIHJldHVybiBbJygnLCBkZXNjcmlwdGlvbiwgJyknXS5qb2luKCcnKTtcbiAgICB9O1xuICAgIHNlbGYuc3RyaW5naWZpZWRWYWx1ZXMgPSBmdW5jdGlvbiBzdHJpbmdpZmllZFZhbHVlcyh2YWx1ZXMsIHNlcGFyYXRvcikge1xuICAgICAgICBsZXQgc3RyaW5nID0gJyc7XG4gICAgICAgIGNvbnN0IHNlcCA9IHNlcGFyYXRvciB8fCAnLCAnO1xuICAgICAgICBjb25zdCBhcnJheSA9IFtdLmNvbmNhdCh2YWx1ZXMpO1xuICAgICAgICBpZiAoIXZhbHVlcyB8fCAhYXJyYXkubGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuIHN0cmluZztcbiAgICAgICAgYXJyYXkuZm9yRWFjaCh2YWx1ZSA9PiB7XG4gICAgICAgICAgICBpZiAoc3RyaW5nLmxlbmd0aClcbiAgICAgICAgICAgICAgICBzdHJpbmcgKz0gc2VwO1xuICAgICAgICAgICAgc3RyaW5nICs9IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBzdHJpbmc7XG4gICAgfTtcbiAgICBmdW5jdGlvbiBkZWZhdWx0U3RyaW5nKHZhbHVlLCBkZWZhdWx0RGVzY3JpcHRpb24pIHtcbiAgICAgICAgbGV0IHN0cmluZyA9IGBbJHtfXygnZGVmYXVsdDonKX0gYDtcbiAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgIWRlZmF1bHREZXNjcmlwdGlvbilcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICBpZiAoZGVmYXVsdERlc2NyaXB0aW9uKSB7XG4gICAgICAgICAgICBzdHJpbmcgKz0gZGVmYXVsdERlc2NyaXB0aW9uO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc3dpdGNoICh0eXBlb2YgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICAgICAgICAgICAgICBzdHJpbmcgKz0gYFwiJHt2YWx1ZX1cImA7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgICAgICAgICAgICAgIHN0cmluZyArPSBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHN0cmluZyArPSB2YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYCR7c3RyaW5nfV1gO1xuICAgIH1cbiAgICBmdW5jdGlvbiB3aW5kb3dXaWR0aCgpIHtcbiAgICAgICAgY29uc3QgbWF4V2lkdGggPSA4MDtcbiAgICAgICAgaWYgKHNoaW0ucHJvY2Vzcy5zdGRDb2x1bW5zKSB7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5taW4obWF4V2lkdGgsIHNoaW0ucHJvY2Vzcy5zdGRDb2x1bW5zKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBtYXhXaWR0aDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBsZXQgdmVyc2lvbiA9IG51bGw7XG4gICAgc2VsZi52ZXJzaW9uID0gdmVyID0+IHtcbiAgICAgICAgdmVyc2lvbiA9IHZlcjtcbiAgICB9O1xuICAgIHNlbGYuc2hvd1ZlcnNpb24gPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGxvZ2dlciA9IHlhcmdzLl9nZXRMb2dnZXJJbnN0YW5jZSgpO1xuICAgICAgICBsb2dnZXIubG9nKHZlcnNpb24pO1xuICAgIH07XG4gICAgc2VsZi5yZXNldCA9IGZ1bmN0aW9uIHJlc2V0KGxvY2FsTG9va3VwKSB7XG4gICAgICAgIGZhaWxNZXNzYWdlID0gbnVsbDtcbiAgICAgICAgZmFpbHVyZU91dHB1dCA9IGZhbHNlO1xuICAgICAgICB1c2FnZXMgPSBbXTtcbiAgICAgICAgdXNhZ2VEaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICBlcGlsb2dzID0gW107XG4gICAgICAgIGV4YW1wbGVzID0gW107XG4gICAgICAgIGNvbW1hbmRzID0gW107XG4gICAgICAgIGRlc2NyaXB0aW9ucyA9IG9iakZpbHRlcihkZXNjcmlwdGlvbnMsIGsgPT4gIWxvY2FsTG9va3VwW2tdKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBjb25zdCBmcm96ZW5zID0gW107XG4gICAgc2VsZi5mcmVlemUgPSBmdW5jdGlvbiBmcmVlemUoKSB7XG4gICAgICAgIGZyb3plbnMucHVzaCh7XG4gICAgICAgICAgICBmYWlsTWVzc2FnZSxcbiAgICAgICAgICAgIGZhaWx1cmVPdXRwdXQsXG4gICAgICAgICAgICB1c2FnZXMsXG4gICAgICAgICAgICB1c2FnZURpc2FibGVkLFxuICAgICAgICAgICAgZXBpbG9ncyxcbiAgICAgICAgICAgIGV4YW1wbGVzLFxuICAgICAgICAgICAgY29tbWFuZHMsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbnMsXG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgc2VsZi51bmZyZWV6ZSA9IGZ1bmN0aW9uIHVuZnJlZXplKCkge1xuICAgICAgICBjb25zdCBmcm96ZW4gPSBmcm96ZW5zLnBvcCgpO1xuICAgICAgICBhc3NlcnROb3RTdHJpY3RFcXVhbChmcm96ZW4sIHVuZGVmaW5lZCwgc2hpbSk7XG4gICAgICAgICh7XG4gICAgICAgICAgICBmYWlsTWVzc2FnZSxcbiAgICAgICAgICAgIGZhaWx1cmVPdXRwdXQsXG4gICAgICAgICAgICB1c2FnZXMsXG4gICAgICAgICAgICB1c2FnZURpc2FibGVkLFxuICAgICAgICAgICAgZXBpbG9ncyxcbiAgICAgICAgICAgIGV4YW1wbGVzLFxuICAgICAgICAgICAgY29tbWFuZHMsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbnMsXG4gICAgICAgIH0gPSBmcm96ZW4pO1xuICAgIH07XG4gICAgcmV0dXJuIHNlbGY7XG59XG5mdW5jdGlvbiBpc0luZGVudGVkVGV4dCh0ZXh0KSB7XG4gICAgcmV0dXJuIHR5cGVvZiB0ZXh0ID09PSAnb2JqZWN0Jztcbn1cbmZ1bmN0aW9uIGFkZEluZGVudGF0aW9uKHRleHQsIGluZGVudCkge1xuICAgIHJldHVybiBpc0luZGVudGVkVGV4dCh0ZXh0KVxuICAgICAgICA/IHsgdGV4dDogdGV4dC50ZXh0LCBpbmRlbnRhdGlvbjogdGV4dC5pbmRlbnRhdGlvbiArIGluZGVudCB9XG4gICAgICAgIDogeyB0ZXh0LCBpbmRlbnRhdGlvbjogaW5kZW50IH07XG59XG5mdW5jdGlvbiBnZXRJbmRlbnRhdGlvbih0ZXh0KSB7XG4gICAgcmV0dXJuIGlzSW5kZW50ZWRUZXh0KHRleHQpID8gdGV4dC5pbmRlbnRhdGlvbiA6IDA7XG59XG5mdW5jdGlvbiBnZXRUZXh0KHRleHQpIHtcbiAgICByZXR1cm4gaXNJbmRlbnRlZFRleHQodGV4dCkgPyB0ZXh0LnRleHQgOiB0ZXh0O1xufVxuXG5jb25zdCBjb21wbGV0aW9uU2hUZW1wbGF0ZSA9IGAjIyMtYmVnaW4te3thcHBfbmFtZX19LWNvbXBsZXRpb25zLSMjI1xuI1xuIyB5YXJncyBjb21tYW5kIGNvbXBsZXRpb24gc2NyaXB0XG4jXG4jIEluc3RhbGxhdGlvbjoge3thcHBfcGF0aH19IHt7Y29tcGxldGlvbl9jb21tYW5kfX0gPj4gfi8uYmFzaHJjXG4jICAgIG9yIHt7YXBwX3BhdGh9fSB7e2NvbXBsZXRpb25fY29tbWFuZH19ID4+IH4vLmJhc2hfcHJvZmlsZSBvbiBPU1guXG4jXG5feWFyZ3NfY29tcGxldGlvbnMoKVxue1xuICAgIGxvY2FsIGN1cl93b3JkIGFyZ3MgdHlwZV9saXN0XG5cbiAgICBjdXJfd29yZD1cIlxcJHtDT01QX1dPUkRTW0NPTVBfQ1dPUkRdfVwiXG4gICAgYXJncz0oXCJcXCR7Q09NUF9XT1JEU1tAXX1cIilcblxuICAgICMgYXNrIHlhcmdzIHRvIGdlbmVyYXRlIGNvbXBsZXRpb25zLlxuICAgIHR5cGVfbGlzdD0kKHt7YXBwX3BhdGh9fSAtLWdldC15YXJncy1jb21wbGV0aW9ucyBcIlxcJHthcmdzW0BdfVwiKVxuXG4gICAgQ09NUFJFUExZPSggJChjb21wZ2VuIC1XIFwiXFwke3R5cGVfbGlzdH1cIiAtLSBcXCR7Y3VyX3dvcmR9KSApXG5cbiAgICAjIGlmIG5vIG1hdGNoIHdhcyBmb3VuZCwgZmFsbCBiYWNrIHRvIGZpbGVuYW1lIGNvbXBsZXRpb25cbiAgICBpZiBbIFxcJHsjQ09NUFJFUExZW0BdfSAtZXEgMCBdOyB0aGVuXG4gICAgICBDT01QUkVQTFk9KClcbiAgICBmaVxuXG4gICAgcmV0dXJuIDBcbn1cbmNvbXBsZXRlIC1vIGRlZmF1bHQgLUYgX3lhcmdzX2NvbXBsZXRpb25zIHt7YXBwX25hbWV9fVxuIyMjLWVuZC17e2FwcF9uYW1lfX0tY29tcGxldGlvbnMtIyMjXG5gO1xuY29uc3QgY29tcGxldGlvblpzaFRlbXBsYXRlID0gYCMjIy1iZWdpbi17e2FwcF9uYW1lfX0tY29tcGxldGlvbnMtIyMjXG4jXG4jIHlhcmdzIGNvbW1hbmQgY29tcGxldGlvbiBzY3JpcHRcbiNcbiMgSW5zdGFsbGF0aW9uOiB7e2FwcF9wYXRofX0ge3tjb21wbGV0aW9uX2NvbW1hbmR9fSA+PiB+Ly56c2hyY1xuIyAgICBvciB7e2FwcF9wYXRofX0ge3tjb21wbGV0aW9uX2NvbW1hbmR9fSA+PiB+Ly56c2hfcHJvZmlsZSBvbiBPU1guXG4jXG5fe3thcHBfbmFtZX19X3lhcmdzX2NvbXBsZXRpb25zKClcbntcbiAgbG9jYWwgcmVwbHlcbiAgbG9jYWwgc2k9JElGU1xuICBJRlM9JCdcXG4nIHJlcGx5PSgkKENPTVBfQ1dPUkQ9XCIkKChDVVJSRU5ULTEpKVwiIENPTVBfTElORT1cIiRCVUZGRVJcIiBDT01QX1BPSU5UPVwiJENVUlNPUlwiIHt7YXBwX3BhdGh9fSAtLWdldC15YXJncy1jb21wbGV0aW9ucyBcIlxcJHt3b3Jkc1tAXX1cIikpXG4gIElGUz0kc2lcbiAgX2Rlc2NyaWJlICd2YWx1ZXMnIHJlcGx5XG59XG5jb21wZGVmIF97e2FwcF9uYW1lfX1feWFyZ3NfY29tcGxldGlvbnMge3thcHBfbmFtZX19XG4jIyMtZW5kLXt7YXBwX25hbWV9fS1jb21wbGV0aW9ucy0jIyNcbmA7XG5cbmZ1bmN0aW9uIGNvbXBsZXRpb24oeWFyZ3MsIHVzYWdlLCBjb21tYW5kLCBzaGltKSB7XG4gICAgY29uc3Qgc2VsZiA9IHtcbiAgICAgICAgY29tcGxldGlvbktleTogJ2dldC15YXJncy1jb21wbGV0aW9ucycsXG4gICAgfTtcbiAgICBsZXQgYWxpYXNlcztcbiAgICBzZWxmLnNldFBhcnNlZCA9IGZ1bmN0aW9uIHNldFBhcnNlZChwYXJzZWQpIHtcbiAgICAgICAgYWxpYXNlcyA9IHBhcnNlZC5hbGlhc2VzO1xuICAgIH07XG4gICAgY29uc3QgenNoU2hlbGwgPSAoc2hpbS5nZXRFbnYoJ1NIRUxMJykgJiYgc2hpbS5nZXRFbnYoJ1NIRUxMJykuaW5kZXhPZignenNoJykgIT09IC0xKSB8fFxuICAgICAgICAoc2hpbS5nZXRFbnYoJ1pTSF9OQU1FJykgJiYgc2hpbS5nZXRFbnYoJ1pTSF9OQU1FJykuaW5kZXhPZignenNoJykgIT09IC0xKTtcbiAgICBzZWxmLmdldENvbXBsZXRpb24gPSBmdW5jdGlvbiBnZXRDb21wbGV0aW9uKGFyZ3MsIGRvbmUpIHtcbiAgICAgICAgY29uc3QgY29tcGxldGlvbnMgPSBbXTtcbiAgICAgICAgY29uc3QgY3VycmVudCA9IGFyZ3MubGVuZ3RoID8gYXJnc1thcmdzLmxlbmd0aCAtIDFdIDogJyc7XG4gICAgICAgIGNvbnN0IGFyZ3YgPSB5YXJncy5wYXJzZShhcmdzLCB0cnVlKTtcbiAgICAgICAgY29uc3QgcGFyZW50Q29tbWFuZHMgPSB5YXJncy5nZXRDb250ZXh0KCkuY29tbWFuZHM7XG4gICAgICAgIGZ1bmN0aW9uIHJ1bkNvbXBsZXRpb25GdW5jdGlvbihhcmd2KSB7XG4gICAgICAgICAgICBhc3NlcnROb3RTdHJpY3RFcXVhbChjb21wbGV0aW9uRnVuY3Rpb24sIG51bGwsIHNoaW0pO1xuICAgICAgICAgICAgaWYgKGlzU3luY0NvbXBsZXRpb25GdW5jdGlvbihjb21wbGV0aW9uRnVuY3Rpb24pKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gY29tcGxldGlvbkZ1bmN0aW9uKGN1cnJlbnQsIGFyZ3YpO1xuICAgICAgICAgICAgICAgIGlmIChpc1Byb21pc2UocmVzdWx0KSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICAgICAgICAgICAgICAgICAgICAudGhlbihsaXN0ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNoaW0ucHJvY2Vzcy5uZXh0VGljaygoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZShsaXN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaGltLnByb2Nlc3MubmV4dFRpY2soKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRvbmUocmVzdWx0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb21wbGV0aW9uRnVuY3Rpb24oY3VycmVudCwgYXJndiwgY29tcGxldGlvbnMgPT4ge1xuICAgICAgICAgICAgICAgICAgICBkb25lKGNvbXBsZXRpb25zKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoY29tcGxldGlvbkZ1bmN0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gaXNQcm9taXNlKGFyZ3YpXG4gICAgICAgICAgICAgICAgPyBhcmd2LnRoZW4ocnVuQ29tcGxldGlvbkZ1bmN0aW9uKVxuICAgICAgICAgICAgICAgIDogcnVuQ29tcGxldGlvbkZ1bmN0aW9uKGFyZ3YpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGhhbmRsZXJzID0gY29tbWFuZC5nZXRDb21tYW5kSGFuZGxlcnMoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGlpID0gYXJncy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XG4gICAgICAgICAgICBpZiAoaGFuZGxlcnNbYXJnc1tpXV0gJiYgaGFuZGxlcnNbYXJnc1tpXV0uYnVpbGRlcikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJ1aWxkZXIgPSBoYW5kbGVyc1thcmdzW2ldXS5idWlsZGVyO1xuICAgICAgICAgICAgICAgIGlmIChpc0NvbW1hbmRCdWlsZGVyQ2FsbGJhY2soYnVpbGRlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeSA9IHlhcmdzLnJlc2V0KCk7XG4gICAgICAgICAgICAgICAgICAgIGJ1aWxkZXIoeSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB5LmFyZ3Y7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghY3VycmVudC5tYXRjaCgvXi0vKSAmJlxuICAgICAgICAgICAgcGFyZW50Q29tbWFuZHNbcGFyZW50Q29tbWFuZHMubGVuZ3RoIC0gMV0gIT09IGN1cnJlbnQpIHtcbiAgICAgICAgICAgIHVzYWdlLmdldENvbW1hbmRzKCkuZm9yRWFjaCh1c2FnZUNvbW1hbmQgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbW1hbmROYW1lID0gcGFyc2VDb21tYW5kKHVzYWdlQ29tbWFuZFswXSkuY21kO1xuICAgICAgICAgICAgICAgIGlmIChhcmdzLmluZGV4T2YoY29tbWFuZE5hbWUpID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXpzaFNoZWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0aW9ucy5wdXNoKGNvbW1hbmROYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlc2MgPSB1c2FnZUNvbW1hbmRbMV0gfHwgJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0aW9ucy5wdXNoKGNvbW1hbmROYW1lLnJlcGxhY2UoLzovZywgJ1xcXFw6JykgKyAnOicgKyBkZXNjKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjdXJyZW50Lm1hdGNoKC9eLS8pIHx8IChjdXJyZW50ID09PSAnJyAmJiBjb21wbGV0aW9ucy5sZW5ndGggPT09IDApKSB7XG4gICAgICAgICAgICBjb25zdCBkZXNjcyA9IHVzYWdlLmdldERlc2NyaXB0aW9ucygpO1xuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHlhcmdzLmdldE9wdGlvbnMoKTtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKG9wdGlvbnMua2V5KS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmVnYWJsZSA9ICEhb3B0aW9ucy5jb25maWd1cmF0aW9uWydib29sZWFuLW5lZ2F0aW9uJ10gJiZcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5ib29sZWFuLmluY2x1ZGVzKGtleSk7XG4gICAgICAgICAgICAgICAgbGV0IGtleUFuZEFsaWFzZXMgPSBba2V5XS5jb25jYXQoYWxpYXNlc1trZXldIHx8IFtdKTtcbiAgICAgICAgICAgICAgICBpZiAobmVnYWJsZSlcbiAgICAgICAgICAgICAgICAgICAga2V5QW5kQWxpYXNlcyA9IGtleUFuZEFsaWFzZXMuY29uY2F0KGtleUFuZEFsaWFzZXMubWFwKGtleSA9PiBgbm8tJHtrZXl9YCkpO1xuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNvbXBsZXRlT3B0aW9uS2V5KGtleSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBub3RJbkFyZ3MgPSBrZXlBbmRBbGlhc2VzLmV2ZXJ5KHZhbCA9PiBhcmdzLmluZGV4T2YoYC0tJHt2YWx9YCkgPT09IC0xKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5vdEluQXJncykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RhcnRzQnlUd29EYXNoZXMgPSAocykgPT4gL14tLS8udGVzdChzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzU2hvcnRPcHRpb24gPSAocykgPT4gL15bXjAtOV0kLy50ZXN0KHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGFzaGVzID0gIXN0YXJ0c0J5VHdvRGFzaGVzKGN1cnJlbnQpICYmIGlzU2hvcnRPcHRpb24oa2V5KSA/ICctJyA6ICctLSc7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXpzaFNoZWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGlvbnMucHVzaChkYXNoZXMgKyBrZXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVzYyA9IGRlc2NzW2tleV0gfHwgJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGlvbnMucHVzaChkYXNoZXMgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgJHtrZXkucmVwbGFjZSgvOi9nLCAnXFxcXDonKX06JHtkZXNjLnJlcGxhY2UoJ19feWFyZ3NTdHJpbmdfXzonLCAnJyl9YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29tcGxldGVPcHRpb25LZXkoa2V5KTtcbiAgICAgICAgICAgICAgICBpZiAobmVnYWJsZSAmJiAhIW9wdGlvbnMuZGVmYXVsdFtrZXldKVxuICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZU9wdGlvbktleShgbm8tJHtrZXl9YCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBkb25lKGNvbXBsZXRpb25zKTtcbiAgICB9O1xuICAgIHNlbGYuZ2VuZXJhdGVDb21wbGV0aW9uU2NyaXB0ID0gZnVuY3Rpb24gZ2VuZXJhdGVDb21wbGV0aW9uU2NyaXB0KCQwLCBjbWQpIHtcbiAgICAgICAgbGV0IHNjcmlwdCA9IHpzaFNoZWxsXG4gICAgICAgICAgICA/IGNvbXBsZXRpb25ac2hUZW1wbGF0ZVxuICAgICAgICAgICAgOiBjb21wbGV0aW9uU2hUZW1wbGF0ZTtcbiAgICAgICAgY29uc3QgbmFtZSA9IHNoaW0ucGF0aC5iYXNlbmFtZSgkMCk7XG4gICAgICAgIGlmICgkMC5tYXRjaCgvXFwuanMkLykpXG4gICAgICAgICAgICAkMCA9IGAuLyR7JDB9YDtcbiAgICAgICAgc2NyaXB0ID0gc2NyaXB0LnJlcGxhY2UoL3t7YXBwX25hbWV9fS9nLCBuYW1lKTtcbiAgICAgICAgc2NyaXB0ID0gc2NyaXB0LnJlcGxhY2UoL3t7Y29tcGxldGlvbl9jb21tYW5kfX0vZywgY21kKTtcbiAgICAgICAgcmV0dXJuIHNjcmlwdC5yZXBsYWNlKC97e2FwcF9wYXRofX0vZywgJDApO1xuICAgIH07XG4gICAgbGV0IGNvbXBsZXRpb25GdW5jdGlvbiA9IG51bGw7XG4gICAgc2VsZi5yZWdpc3RlckZ1bmN0aW9uID0gZm4gPT4ge1xuICAgICAgICBjb21wbGV0aW9uRnVuY3Rpb24gPSBmbjtcbiAgICB9O1xuICAgIHJldHVybiBzZWxmO1xufVxuZnVuY3Rpb24gaXNTeW5jQ29tcGxldGlvbkZ1bmN0aW9uKGNvbXBsZXRpb25GdW5jdGlvbikge1xuICAgIHJldHVybiBjb21wbGV0aW9uRnVuY3Rpb24ubGVuZ3RoIDwgMztcbn1cblxuZnVuY3Rpb24gbGV2ZW5zaHRlaW4oYSwgYikge1xuICAgIGlmIChhLmxlbmd0aCA9PT0gMClcbiAgICAgICAgcmV0dXJuIGIubGVuZ3RoO1xuICAgIGlmIChiLmxlbmd0aCA9PT0gMClcbiAgICAgICAgcmV0dXJuIGEubGVuZ3RoO1xuICAgIGNvbnN0IG1hdHJpeCA9IFtdO1xuICAgIGxldCBpO1xuICAgIGZvciAoaSA9IDA7IGkgPD0gYi5sZW5ndGg7IGkrKykge1xuICAgICAgICBtYXRyaXhbaV0gPSBbaV07XG4gICAgfVxuICAgIGxldCBqO1xuICAgIGZvciAoaiA9IDA7IGogPD0gYS5sZW5ndGg7IGorKykge1xuICAgICAgICBtYXRyaXhbMF1bal0gPSBqO1xuICAgIH1cbiAgICBmb3IgKGkgPSAxOyBpIDw9IGIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgZm9yIChqID0gMTsgaiA8PSBhLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICBpZiAoYi5jaGFyQXQoaSAtIDEpID09PSBhLmNoYXJBdChqIC0gMSkpIHtcbiAgICAgICAgICAgICAgICBtYXRyaXhbaV1bal0gPSBtYXRyaXhbaSAtIDFdW2ogLSAxXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIG1hdHJpeFtpXVtqXSA9IE1hdGgubWluKG1hdHJpeFtpIC0gMV1baiAtIDFdICsgMSwgTWF0aC5taW4obWF0cml4W2ldW2ogLSAxXSArIDEsIG1hdHJpeFtpIC0gMV1bal0gKyAxKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1hdHJpeFtiLmxlbmd0aF1bYS5sZW5ndGhdO1xufVxuXG5jb25zdCBzcGVjaWFsS2V5cyA9IFsnJDAnLCAnLS0nLCAnXyddO1xuZnVuY3Rpb24gdmFsaWRhdGlvbih5YXJncywgdXNhZ2UsIHkxOG4sIHNoaW0pIHtcbiAgICBjb25zdCBfXyA9IHkxOG4uX187XG4gICAgY29uc3QgX19uID0geTE4bi5fX247XG4gICAgY29uc3Qgc2VsZiA9IHt9O1xuICAgIHNlbGYubm9uT3B0aW9uQ291bnQgPSBmdW5jdGlvbiBub25PcHRpb25Db3VudChhcmd2KSB7XG4gICAgICAgIGNvbnN0IGRlbWFuZGVkQ29tbWFuZHMgPSB5YXJncy5nZXREZW1hbmRlZENvbW1hbmRzKCk7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uYWxDb3VudCA9IGFyZ3YuXy5sZW5ndGggKyAoYXJndlsnLS0nXSA/IGFyZ3ZbJy0tJ10ubGVuZ3RoIDogMCk7XG4gICAgICAgIGNvbnN0IF9zID0gcG9zaXRpb25hbENvdW50IC0geWFyZ3MuZ2V0Q29udGV4dCgpLmNvbW1hbmRzLmxlbmd0aDtcbiAgICAgICAgaWYgKGRlbWFuZGVkQ29tbWFuZHMuXyAmJlxuICAgICAgICAgICAgKF9zIDwgZGVtYW5kZWRDb21tYW5kcy5fLm1pbiB8fCBfcyA+IGRlbWFuZGVkQ29tbWFuZHMuXy5tYXgpKSB7XG4gICAgICAgICAgICBpZiAoX3MgPCBkZW1hbmRlZENvbW1hbmRzLl8ubWluKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRlbWFuZGVkQ29tbWFuZHMuXy5taW5Nc2cgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICB1c2FnZS5mYWlsKGRlbWFuZGVkQ29tbWFuZHMuXy5taW5Nc2dcbiAgICAgICAgICAgICAgICAgICAgICAgID8gZGVtYW5kZWRDb21tYW5kcy5fLm1pbk1zZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXCQwL2csIF9zLnRvU3RyaW5nKCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcJDEvLCBkZW1hbmRlZENvbW1hbmRzLl8ubWluLnRvU3RyaW5nKCkpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IG51bGwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdXNhZ2UuZmFpbChfX24oJ05vdCBlbm91Z2ggbm9uLW9wdGlvbiBhcmd1bWVudHM6IGdvdCAlcywgbmVlZCBhdCBsZWFzdCAlcycsICdOb3QgZW5vdWdoIG5vbi1vcHRpb24gYXJndW1lbnRzOiBnb3QgJXMsIG5lZWQgYXQgbGVhc3QgJXMnLCBfcywgX3MudG9TdHJpbmcoKSwgZGVtYW5kZWRDb21tYW5kcy5fLm1pbi50b1N0cmluZygpKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoX3MgPiBkZW1hbmRlZENvbW1hbmRzLl8ubWF4KSB7XG4gICAgICAgICAgICAgICAgaWYgKGRlbWFuZGVkQ29tbWFuZHMuXy5tYXhNc2cgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICB1c2FnZS5mYWlsKGRlbWFuZGVkQ29tbWFuZHMuXy5tYXhNc2dcbiAgICAgICAgICAgICAgICAgICAgICAgID8gZGVtYW5kZWRDb21tYW5kcy5fLm1heE1zZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXCQwL2csIF9zLnRvU3RyaW5nKCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcJDEvLCBkZW1hbmRlZENvbW1hbmRzLl8ubWF4LnRvU3RyaW5nKCkpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IG51bGwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdXNhZ2UuZmFpbChfX24oJ1RvbyBtYW55IG5vbi1vcHRpb24gYXJndW1lbnRzOiBnb3QgJXMsIG1heGltdW0gb2YgJXMnLCAnVG9vIG1hbnkgbm9uLW9wdGlvbiBhcmd1bWVudHM6IGdvdCAlcywgbWF4aW11bSBvZiAlcycsIF9zLCBfcy50b1N0cmluZygpLCBkZW1hbmRlZENvbW1hbmRzLl8ubWF4LnRvU3RyaW5nKCkpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHNlbGYucG9zaXRpb25hbENvdW50ID0gZnVuY3Rpb24gcG9zaXRpb25hbENvdW50KHJlcXVpcmVkLCBvYnNlcnZlZCkge1xuICAgICAgICBpZiAob2JzZXJ2ZWQgPCByZXF1aXJlZCkge1xuICAgICAgICAgICAgdXNhZ2UuZmFpbChfX24oJ05vdCBlbm91Z2ggbm9uLW9wdGlvbiBhcmd1bWVudHM6IGdvdCAlcywgbmVlZCBhdCBsZWFzdCAlcycsICdOb3QgZW5vdWdoIG5vbi1vcHRpb24gYXJndW1lbnRzOiBnb3QgJXMsIG5lZWQgYXQgbGVhc3QgJXMnLCBvYnNlcnZlZCwgb2JzZXJ2ZWQgKyAnJywgcmVxdWlyZWQgKyAnJykpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBzZWxmLnJlcXVpcmVkQXJndW1lbnRzID0gZnVuY3Rpb24gcmVxdWlyZWRBcmd1bWVudHMoYXJndikge1xuICAgICAgICBjb25zdCBkZW1hbmRlZE9wdGlvbnMgPSB5YXJncy5nZXREZW1hbmRlZE9wdGlvbnMoKTtcbiAgICAgICAgbGV0IG1pc3NpbmcgPSBudWxsO1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhkZW1hbmRlZE9wdGlvbnMpKSB7XG4gICAgICAgICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhcmd2LCBrZXkpIHx8XG4gICAgICAgICAgICAgICAgdHlwZW9mIGFyZ3Zba2V5XSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICBtaXNzaW5nID0gbWlzc2luZyB8fCB7fTtcbiAgICAgICAgICAgICAgICBtaXNzaW5nW2tleV0gPSBkZW1hbmRlZE9wdGlvbnNba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobWlzc2luZykge1xuICAgICAgICAgICAgY29uc3QgY3VzdG9tTXNncyA9IFtdO1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMobWlzc2luZykpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtc2cgPSBtaXNzaW5nW2tleV07XG4gICAgICAgICAgICAgICAgaWYgKG1zZyAmJiBjdXN0b21Nc2dzLmluZGV4T2YobXNnKSA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgY3VzdG9tTXNncy5wdXNoKG1zZyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgY3VzdG9tTXNnID0gY3VzdG9tTXNncy5sZW5ndGggPyBgXFxuJHtjdXN0b21Nc2dzLmpvaW4oJ1xcbicpfWAgOiAnJztcbiAgICAgICAgICAgIHVzYWdlLmZhaWwoX19uKCdNaXNzaW5nIHJlcXVpcmVkIGFyZ3VtZW50OiAlcycsICdNaXNzaW5nIHJlcXVpcmVkIGFyZ3VtZW50czogJXMnLCBPYmplY3Qua2V5cyhtaXNzaW5nKS5sZW5ndGgsIE9iamVjdC5rZXlzKG1pc3NpbmcpLmpvaW4oJywgJykgKyBjdXN0b21Nc2cpKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgc2VsZi51bmtub3duQXJndW1lbnRzID0gZnVuY3Rpb24gdW5rbm93bkFyZ3VtZW50cyhhcmd2LCBhbGlhc2VzLCBwb3NpdGlvbmFsTWFwLCBpc0RlZmF1bHRDb21tYW5kLCBjaGVja1Bvc2l0aW9uYWxzID0gdHJ1ZSkge1xuICAgICAgICBjb25zdCBjb21tYW5kS2V5cyA9IHlhcmdzLmdldENvbW1hbmRJbnN0YW5jZSgpLmdldENvbW1hbmRzKCk7XG4gICAgICAgIGNvbnN0IHVua25vd24gPSBbXTtcbiAgICAgICAgY29uc3QgY3VycmVudENvbnRleHQgPSB5YXJncy5nZXRDb250ZXh0KCk7XG4gICAgICAgIE9iamVjdC5rZXlzKGFyZ3YpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIGlmIChzcGVjaWFsS2V5cy5pbmRleE9mKGtleSkgPT09IC0xICYmXG4gICAgICAgICAgICAgICAgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwb3NpdGlvbmFsTWFwLCBrZXkpICYmXG4gICAgICAgICAgICAgICAgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh5YXJncy5fZ2V0UGFyc2VDb250ZXh0KCksIGtleSkgJiZcbiAgICAgICAgICAgICAgICAhc2VsZi5pc1ZhbGlkQW5kU29tZUFsaWFzSXNOb3ROZXcoa2V5LCBhbGlhc2VzKSkge1xuICAgICAgICAgICAgICAgIHVua25vd24ucHVzaChrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGNoZWNrUG9zaXRpb25hbHMgJiZcbiAgICAgICAgICAgIChjdXJyZW50Q29udGV4dC5jb21tYW5kcy5sZW5ndGggPiAwIHx8XG4gICAgICAgICAgICAgICAgY29tbWFuZEtleXMubGVuZ3RoID4gMCB8fFxuICAgICAgICAgICAgICAgIGlzRGVmYXVsdENvbW1hbmQpKSB7XG4gICAgICAgICAgICBhcmd2Ll8uc2xpY2UoY3VycmVudENvbnRleHQuY29tbWFuZHMubGVuZ3RoKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbW1hbmRLZXlzLmluZGV4T2YoJycgKyBrZXkpID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICB1bmtub3duLnB1c2goJycgKyBrZXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh1bmtub3duLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHVzYWdlLmZhaWwoX19uKCdVbmtub3duIGFyZ3VtZW50OiAlcycsICdVbmtub3duIGFyZ3VtZW50czogJXMnLCB1bmtub3duLmxlbmd0aCwgdW5rbm93bi5qb2luKCcsICcpKSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHNlbGYudW5rbm93bkNvbW1hbmRzID0gZnVuY3Rpb24gdW5rbm93bkNvbW1hbmRzKGFyZ3YpIHtcbiAgICAgICAgY29uc3QgY29tbWFuZEtleXMgPSB5YXJncy5nZXRDb21tYW5kSW5zdGFuY2UoKS5nZXRDb21tYW5kcygpO1xuICAgICAgICBjb25zdCB1bmtub3duID0gW107XG4gICAgICAgIGNvbnN0IGN1cnJlbnRDb250ZXh0ID0geWFyZ3MuZ2V0Q29udGV4dCgpO1xuICAgICAgICBpZiAoY3VycmVudENvbnRleHQuY29tbWFuZHMubGVuZ3RoID4gMCB8fCBjb21tYW5kS2V5cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBhcmd2Ll8uc2xpY2UoY3VycmVudENvbnRleHQuY29tbWFuZHMubGVuZ3RoKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbW1hbmRLZXlzLmluZGV4T2YoJycgKyBrZXkpID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICB1bmtub3duLnB1c2goJycgKyBrZXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh1bmtub3duLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHVzYWdlLmZhaWwoX19uKCdVbmtub3duIGNvbW1hbmQ6ICVzJywgJ1Vua25vd24gY29tbWFuZHM6ICVzJywgdW5rbm93bi5sZW5ndGgsIHVua25vd24uam9pbignLCAnKSkpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHNlbGYuaXNWYWxpZEFuZFNvbWVBbGlhc0lzTm90TmV3ID0gZnVuY3Rpb24gaXNWYWxpZEFuZFNvbWVBbGlhc0lzTm90TmV3KGtleSwgYWxpYXNlcykge1xuICAgICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhbGlhc2VzLCBrZXkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbmV3QWxpYXNlcyA9IHlhcmdzLnBhcnNlZC5uZXdBbGlhc2VzO1xuICAgICAgICBmb3IgKGNvbnN0IGEgb2YgW2tleSwgLi4uYWxpYXNlc1trZXldXSkge1xuICAgICAgICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobmV3QWxpYXNlcywgYSkgfHxcbiAgICAgICAgICAgICAgICAhbmV3QWxpYXNlc1trZXldKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG4gICAgc2VsZi5saW1pdGVkQ2hvaWNlcyA9IGZ1bmN0aW9uIGxpbWl0ZWRDaG9pY2VzKGFyZ3YpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHlhcmdzLmdldE9wdGlvbnMoKTtcbiAgICAgICAgY29uc3QgaW52YWxpZCA9IHt9O1xuICAgICAgICBpZiAoIU9iamVjdC5rZXlzKG9wdGlvbnMuY2hvaWNlcykubGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBPYmplY3Qua2V5cyhhcmd2KS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICBpZiAoc3BlY2lhbEtleXMuaW5kZXhPZihrZXkpID09PSAtMSAmJlxuICAgICAgICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvcHRpb25zLmNob2ljZXMsIGtleSkpIHtcbiAgICAgICAgICAgICAgICBbXS5jb25jYXQoYXJndltrZXldKS5mb3JFYWNoKHZhbHVlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuY2hvaWNlc1trZXldLmluZGV4T2YodmFsdWUpID09PSAtMSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaW52YWxpZFtrZXldID0gKGludmFsaWRba2V5XSB8fCBbXSkuY29uY2F0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgaW52YWxpZEtleXMgPSBPYmplY3Qua2V5cyhpbnZhbGlkKTtcbiAgICAgICAgaWYgKCFpbnZhbGlkS2V5cy5sZW5ndGgpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGxldCBtc2cgPSBfXygnSW52YWxpZCB2YWx1ZXM6Jyk7XG4gICAgICAgIGludmFsaWRLZXlzLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIG1zZyArPSBgXFxuICAke19fKCdBcmd1bWVudDogJXMsIEdpdmVuOiAlcywgQ2hvaWNlczogJXMnLCBrZXksIHVzYWdlLnN0cmluZ2lmaWVkVmFsdWVzKGludmFsaWRba2V5XSksIHVzYWdlLnN0cmluZ2lmaWVkVmFsdWVzKG9wdGlvbnMuY2hvaWNlc1trZXldKSl9YDtcbiAgICAgICAgfSk7XG4gICAgICAgIHVzYWdlLmZhaWwobXNnKTtcbiAgICB9O1xuICAgIGxldCBjaGVja3MgPSBbXTtcbiAgICBzZWxmLmNoZWNrID0gZnVuY3Rpb24gY2hlY2soZiwgZ2xvYmFsKSB7XG4gICAgICAgIGNoZWNrcy5wdXNoKHtcbiAgICAgICAgICAgIGZ1bmM6IGYsXG4gICAgICAgICAgICBnbG9iYWwsXG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgc2VsZi5jdXN0b21DaGVja3MgPSBmdW5jdGlvbiBjdXN0b21DaGVja3MoYXJndiwgYWxpYXNlcykge1xuICAgICAgICBmb3IgKGxldCBpID0gMCwgZjsgKGYgPSBjaGVja3NbaV0pICE9PSB1bmRlZmluZWQ7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgZnVuYyA9IGYuZnVuYztcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSBudWxsO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBmdW5jKGFyZ3YsIGFsaWFzZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIHVzYWdlLmZhaWwoZXJyLm1lc3NhZ2UgPyBlcnIubWVzc2FnZSA6IGVyciwgZXJyKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghcmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgdXNhZ2UuZmFpbChfXygnQXJndW1lbnQgY2hlY2sgZmFpbGVkOiAlcycsIGZ1bmMudG9TdHJpbmcoKSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIHJlc3VsdCA9PT0gJ3N0cmluZycgfHwgcmVzdWx0IGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgICAgICB1c2FnZS5mYWlsKHJlc3VsdC50b1N0cmluZygpLCByZXN1bHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBsZXQgaW1wbGllZCA9IHt9O1xuICAgIHNlbGYuaW1wbGllcyA9IGZ1bmN0aW9uIGltcGxpZXMoa2V5LCB2YWx1ZSkge1xuICAgICAgICBhcmdzZXJ0KCc8c3RyaW5nfG9iamVjdD4gW2FycmF5fG51bWJlcnxzdHJpbmddJywgW2tleSwgdmFsdWVdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgaWYgKHR5cGVvZiBrZXkgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhrZXkpLmZvckVhY2goayA9PiB7XG4gICAgICAgICAgICAgICAgc2VsZi5pbXBsaWVzKGssIGtleVtrXSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHlhcmdzLmdsb2JhbChrZXkpO1xuICAgICAgICAgICAgaWYgKCFpbXBsaWVkW2tleV0pIHtcbiAgICAgICAgICAgICAgICBpbXBsaWVkW2tleV0gPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHZhbHVlLmZvckVhY2goaSA9PiBzZWxmLmltcGxpZXMoa2V5LCBpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBhc3NlcnROb3RTdHJpY3RFcXVhbCh2YWx1ZSwgdW5kZWZpbmVkLCBzaGltKTtcbiAgICAgICAgICAgICAgICBpbXBsaWVkW2tleV0ucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHNlbGYuZ2V0SW1wbGllZCA9IGZ1bmN0aW9uIGdldEltcGxpZWQoKSB7XG4gICAgICAgIHJldHVybiBpbXBsaWVkO1xuICAgIH07XG4gICAgZnVuY3Rpb24ga2V5RXhpc3RzKGFyZ3YsIHZhbCkge1xuICAgICAgICBjb25zdCBudW0gPSBOdW1iZXIodmFsKTtcbiAgICAgICAgdmFsID0gaXNOYU4obnVtKSA/IHZhbCA6IG51bTtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICB2YWwgPSBhcmd2Ll8ubGVuZ3RoID49IHZhbDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh2YWwubWF0Y2goL14tLW5vLS4rLykpIHtcbiAgICAgICAgICAgIHZhbCA9IHZhbC5tYXRjaCgvXi0tbm8tKC4rKS8pWzFdO1xuICAgICAgICAgICAgdmFsID0gIWFyZ3ZbdmFsXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZhbCA9IGFyZ3ZbdmFsXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsO1xuICAgIH1cbiAgICBzZWxmLmltcGxpY2F0aW9ucyA9IGZ1bmN0aW9uIGltcGxpY2F0aW9ucyhhcmd2KSB7XG4gICAgICAgIGNvbnN0IGltcGx5RmFpbCA9IFtdO1xuICAgICAgICBPYmplY3Qua2V5cyhpbXBsaWVkKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICBjb25zdCBvcmlnS2V5ID0ga2V5O1xuICAgICAgICAgICAgKGltcGxpZWRba2V5XSB8fCBbXSkuZm9yRWFjaCh2YWx1ZSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IGtleSA9IG9yaWdLZXk7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3JpZ1ZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICAgICAga2V5ID0ga2V5RXhpc3RzKGFyZ3YsIGtleSk7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBrZXlFeGlzdHMoYXJndiwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmIChrZXkgJiYgIXZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGltcGx5RmFpbC5wdXNoKGAgJHtvcmlnS2V5fSAtPiAke29yaWdWYWx1ZX1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChpbXBseUZhaWwubGVuZ3RoKSB7XG4gICAgICAgICAgICBsZXQgbXNnID0gYCR7X18oJ0ltcGxpY2F0aW9ucyBmYWlsZWQ6Jyl9XFxuYDtcbiAgICAgICAgICAgIGltcGx5RmFpbC5mb3JFYWNoKHZhbHVlID0+IHtcbiAgICAgICAgICAgICAgICBtc2cgKz0gdmFsdWU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHVzYWdlLmZhaWwobXNnKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgbGV0IGNvbmZsaWN0aW5nID0ge307XG4gICAgc2VsZi5jb25mbGljdHMgPSBmdW5jdGlvbiBjb25mbGljdHMoa2V5LCB2YWx1ZSkge1xuICAgICAgICBhcmdzZXJ0KCc8c3RyaW5nfG9iamVjdD4gW2FycmF5fHN0cmluZ10nLCBba2V5LCB2YWx1ZV0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBpZiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGtleSkuZm9yRWFjaChrID0+IHtcbiAgICAgICAgICAgICAgICBzZWxmLmNvbmZsaWN0cyhrLCBrZXlba10pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB5YXJncy5nbG9iYWwoa2V5KTtcbiAgICAgICAgICAgIGlmICghY29uZmxpY3Rpbmdba2V5XSkge1xuICAgICAgICAgICAgICAgIGNvbmZsaWN0aW5nW2tleV0gPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHZhbHVlLmZvckVhY2goaSA9PiBzZWxmLmNvbmZsaWN0cyhrZXksIGkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbmZsaWN0aW5nW2tleV0ucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHNlbGYuZ2V0Q29uZmxpY3RpbmcgPSAoKSA9PiBjb25mbGljdGluZztcbiAgICBzZWxmLmNvbmZsaWN0aW5nID0gZnVuY3Rpb24gY29uZmxpY3RpbmdGbihhcmd2KSB7XG4gICAgICAgIE9iamVjdC5rZXlzKGFyZ3YpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIGlmIChjb25mbGljdGluZ1trZXldKSB7XG4gICAgICAgICAgICAgICAgY29uZmxpY3Rpbmdba2V5XS5mb3JFYWNoKHZhbHVlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlICYmIGFyZ3Zba2V5XSAhPT0gdW5kZWZpbmVkICYmIGFyZ3ZbdmFsdWVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzYWdlLmZhaWwoX18oJ0FyZ3VtZW50cyAlcyBhbmQgJXMgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZScsIGtleSwgdmFsdWUpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIHNlbGYucmVjb21tZW5kQ29tbWFuZHMgPSBmdW5jdGlvbiByZWNvbW1lbmRDb21tYW5kcyhjbWQsIHBvdGVudGlhbENvbW1hbmRzKSB7XG4gICAgICAgIGNvbnN0IHRocmVzaG9sZCA9IDM7XG4gICAgICAgIHBvdGVudGlhbENvbW1hbmRzID0gcG90ZW50aWFsQ29tbWFuZHMuc29ydCgoYSwgYikgPT4gYi5sZW5ndGggLSBhLmxlbmd0aCk7XG4gICAgICAgIGxldCByZWNvbW1lbmRlZCA9IG51bGw7XG4gICAgICAgIGxldCBiZXN0RGlzdGFuY2UgPSBJbmZpbml0eTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGNhbmRpZGF0ZTsgKGNhbmRpZGF0ZSA9IHBvdGVudGlhbENvbW1hbmRzW2ldKSAhPT0gdW5kZWZpbmVkOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGQgPSBsZXZlbnNodGVpbihjbWQsIGNhbmRpZGF0ZSk7XG4gICAgICAgICAgICBpZiAoZCA8PSB0aHJlc2hvbGQgJiYgZCA8IGJlc3REaXN0YW5jZSkge1xuICAgICAgICAgICAgICAgIGJlc3REaXN0YW5jZSA9IGQ7XG4gICAgICAgICAgICAgICAgcmVjb21tZW5kZWQgPSBjYW5kaWRhdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlY29tbWVuZGVkKVxuICAgICAgICAgICAgdXNhZ2UuZmFpbChfXygnRGlkIHlvdSBtZWFuICVzPycsIHJlY29tbWVuZGVkKSk7XG4gICAgfTtcbiAgICBzZWxmLnJlc2V0ID0gZnVuY3Rpb24gcmVzZXQobG9jYWxMb29rdXApIHtcbiAgICAgICAgaW1wbGllZCA9IG9iakZpbHRlcihpbXBsaWVkLCBrID0+ICFsb2NhbExvb2t1cFtrXSk7XG4gICAgICAgIGNvbmZsaWN0aW5nID0gb2JqRmlsdGVyKGNvbmZsaWN0aW5nLCBrID0+ICFsb2NhbExvb2t1cFtrXSk7XG4gICAgICAgIGNoZWNrcyA9IGNoZWNrcy5maWx0ZXIoYyA9PiBjLmdsb2JhbCk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgY29uc3QgZnJvemVucyA9IFtdO1xuICAgIHNlbGYuZnJlZXplID0gZnVuY3Rpb24gZnJlZXplKCkge1xuICAgICAgICBmcm96ZW5zLnB1c2goe1xuICAgICAgICAgICAgaW1wbGllZCxcbiAgICAgICAgICAgIGNoZWNrcyxcbiAgICAgICAgICAgIGNvbmZsaWN0aW5nLFxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIHNlbGYudW5mcmVlemUgPSBmdW5jdGlvbiB1bmZyZWV6ZSgpIHtcbiAgICAgICAgY29uc3QgZnJvemVuID0gZnJvemVucy5wb3AoKTtcbiAgICAgICAgYXNzZXJ0Tm90U3RyaWN0RXF1YWwoZnJvemVuLCB1bmRlZmluZWQsIHNoaW0pO1xuICAgICAgICAoeyBpbXBsaWVkLCBjaGVja3MsIGNvbmZsaWN0aW5nIH0gPSBmcm96ZW4pO1xuICAgIH07XG4gICAgcmV0dXJuIHNlbGY7XG59XG5cbmxldCBzaGltJDE7XG5mdW5jdGlvbiBZYXJnc1dpdGhTaGltKF9zaGltKSB7XG4gICAgc2hpbSQxID0gX3NoaW07XG4gICAgcmV0dXJuIFlhcmdzO1xufVxuZnVuY3Rpb24gWWFyZ3MocHJvY2Vzc0FyZ3MgPSBbXSwgY3dkID0gc2hpbSQxLnByb2Nlc3MuY3dkKCksIHBhcmVudFJlcXVpcmUpIHtcbiAgICBjb25zdCBzZWxmID0ge307XG4gICAgbGV0IGNvbW1hbmQkMTtcbiAgICBsZXQgY29tcGxldGlvbiQxID0gbnVsbDtcbiAgICBsZXQgZ3JvdXBzID0ge307XG4gICAgY29uc3QgZ2xvYmFsTWlkZGxld2FyZSA9IFtdO1xuICAgIGxldCBvdXRwdXQgPSAnJztcbiAgICBjb25zdCBwcmVzZXJ2ZWRHcm91cHMgPSB7fTtcbiAgICBsZXQgdXNhZ2UkMTtcbiAgICBsZXQgdmFsaWRhdGlvbiQxO1xuICAgIGxldCBoYW5kbGVyRmluaXNoQ29tbWFuZCA9IG51bGw7XG4gICAgY29uc3QgeTE4biA9IHNoaW0kMS55MThuO1xuICAgIHNlbGYubWlkZGxld2FyZSA9IGdsb2JhbE1pZGRsZXdhcmVGYWN0b3J5KGdsb2JhbE1pZGRsZXdhcmUsIHNlbGYpO1xuICAgIHNlbGYuc2NyaXB0TmFtZSA9IGZ1bmN0aW9uIChzY3JpcHROYW1lKSB7XG4gICAgICAgIHNlbGYuY3VzdG9tU2NyaXB0TmFtZSA9IHRydWU7XG4gICAgICAgIHNlbGYuJDAgPSBzY3JpcHROYW1lO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIGxldCBkZWZhdWx0JDA7XG4gICAgaWYgKC9cXGIobm9kZXxpb2pzfGVsZWN0cm9uKShcXC5leGUpPyQvLnRlc3Qoc2hpbSQxLnByb2Nlc3MuYXJndigpWzBdKSkge1xuICAgICAgICBkZWZhdWx0JDAgPSBzaGltJDEucHJvY2Vzcy5hcmd2KCkuc2xpY2UoMSwgMik7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBkZWZhdWx0JDAgPSBzaGltJDEucHJvY2Vzcy5hcmd2KCkuc2xpY2UoMCwgMSk7XG4gICAgfVxuICAgIHNlbGYuJDAgPSBkZWZhdWx0JDBcbiAgICAgICAgLm1hcCh4ID0+IHtcbiAgICAgICAgY29uc3QgYiA9IHJlYmFzZShjd2QsIHgpO1xuICAgICAgICByZXR1cm4geC5tYXRjaCgvXihcXC98KFthLXpBLVpdOik/XFxcXCkvKSAmJiBiLmxlbmd0aCA8IHgubGVuZ3RoID8gYiA6IHg7XG4gICAgfSlcbiAgICAgICAgLmpvaW4oJyAnKVxuICAgICAgICAudHJpbSgpO1xuICAgIGlmIChzaGltJDEuZ2V0RW52KCdfJykgJiYgc2hpbSQxLmdldFByb2Nlc3NBcmd2QmluKCkgPT09IHNoaW0kMS5nZXRFbnYoJ18nKSkge1xuICAgICAgICBzZWxmLiQwID0gc2hpbSQxXG4gICAgICAgICAgICAuZ2V0RW52KCdfJylcbiAgICAgICAgICAgIC5yZXBsYWNlKGAke3NoaW0kMS5wYXRoLmRpcm5hbWUoc2hpbSQxLnByb2Nlc3MuZXhlY1BhdGgoKSl9L2AsICcnKTtcbiAgICB9XG4gICAgY29uc3QgY29udGV4dCA9IHsgcmVzZXRzOiAtMSwgY29tbWFuZHM6IFtdLCBmdWxsQ29tbWFuZHM6IFtdLCBmaWxlczogW10gfTtcbiAgICBzZWxmLmdldENvbnRleHQgPSAoKSA9PiBjb250ZXh0O1xuICAgIGxldCBoYXNPdXRwdXQgPSBmYWxzZTtcbiAgICBsZXQgZXhpdEVycm9yID0gbnVsbDtcbiAgICBzZWxmLmV4aXQgPSAoY29kZSwgZXJyKSA9PiB7XG4gICAgICAgIGhhc091dHB1dCA9IHRydWU7XG4gICAgICAgIGV4aXRFcnJvciA9IGVycjtcbiAgICAgICAgaWYgKGV4aXRQcm9jZXNzKVxuICAgICAgICAgICAgc2hpbSQxLnByb2Nlc3MuZXhpdChjb2RlKTtcbiAgICB9O1xuICAgIGxldCBjb21wbGV0aW9uQ29tbWFuZCA9IG51bGw7XG4gICAgc2VsZi5jb21wbGV0aW9uID0gZnVuY3Rpb24gKGNtZCwgZGVzYywgZm4pIHtcbiAgICAgICAgYXJnc2VydCgnW3N0cmluZ10gW3N0cmluZ3xib29sZWFufGZ1bmN0aW9uXSBbZnVuY3Rpb25dJywgW2NtZCwgZGVzYywgZm5dLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgaWYgKHR5cGVvZiBkZXNjID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBmbiA9IGRlc2M7XG4gICAgICAgICAgICBkZXNjID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGNvbXBsZXRpb25Db21tYW5kID0gY21kIHx8IGNvbXBsZXRpb25Db21tYW5kIHx8ICdjb21wbGV0aW9uJztcbiAgICAgICAgaWYgKCFkZXNjICYmIGRlc2MgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICBkZXNjID0gJ2dlbmVyYXRlIGNvbXBsZXRpb24gc2NyaXB0JztcbiAgICAgICAgfVxuICAgICAgICBzZWxmLmNvbW1hbmQoY29tcGxldGlvbkNvbW1hbmQsIGRlc2MpO1xuICAgICAgICBpZiAoZm4pXG4gICAgICAgICAgICBjb21wbGV0aW9uJDEucmVnaXN0ZXJGdW5jdGlvbihmbik7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgbGV0IG9wdGlvbnM7XG4gICAgc2VsZi5yZXNldE9wdGlvbnMgPSBzZWxmLnJlc2V0ID0gZnVuY3Rpb24gcmVzZXRPcHRpb25zKGFsaWFzZXMgPSB7fSkge1xuICAgICAgICBjb250ZXh0LnJlc2V0cysrO1xuICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICAgICAgY29uc3QgdG1wT3B0aW9ucyA9IHt9O1xuICAgICAgICB0bXBPcHRpb25zLmxvY2FsID0gb3B0aW9ucy5sb2NhbCA/IG9wdGlvbnMubG9jYWwgOiBbXTtcbiAgICAgICAgdG1wT3B0aW9ucy5jb25maWdPYmplY3RzID0gb3B0aW9ucy5jb25maWdPYmplY3RzXG4gICAgICAgICAgICA/IG9wdGlvbnMuY29uZmlnT2JqZWN0c1xuICAgICAgICAgICAgOiBbXTtcbiAgICAgICAgY29uc3QgbG9jYWxMb29rdXAgPSB7fTtcbiAgICAgICAgdG1wT3B0aW9ucy5sb2NhbC5mb3JFYWNoKGwgPT4ge1xuICAgICAgICAgICAgbG9jYWxMb29rdXBbbF0gPSB0cnVlO1xuICAgICAgICAgICAgKGFsaWFzZXNbbF0gfHwgW10pLmZvckVhY2goYSA9PiB7XG4gICAgICAgICAgICAgICAgbG9jYWxMb29rdXBbYV0gPSB0cnVlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3QuYXNzaWduKHByZXNlcnZlZEdyb3VwcywgT2JqZWN0LmtleXMoZ3JvdXBzKS5yZWR1Y2UoKGFjYywgZ3JvdXBOYW1lKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBrZXlzID0gZ3JvdXBzW2dyb3VwTmFtZV0uZmlsdGVyKGtleSA9PiAhKGtleSBpbiBsb2NhbExvb2t1cCkpO1xuICAgICAgICAgICAgaWYgKGtleXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGFjY1tncm91cE5hbWVdID0ga2V5cztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH0sIHt9KSk7XG4gICAgICAgIGdyb3VwcyA9IHt9O1xuICAgICAgICBjb25zdCBhcnJheU9wdGlvbnMgPSBbXG4gICAgICAgICAgICAnYXJyYXknLFxuICAgICAgICAgICAgJ2Jvb2xlYW4nLFxuICAgICAgICAgICAgJ3N0cmluZycsXG4gICAgICAgICAgICAnc2tpcFZhbGlkYXRpb24nLFxuICAgICAgICAgICAgJ2NvdW50JyxcbiAgICAgICAgICAgICdub3JtYWxpemUnLFxuICAgICAgICAgICAgJ251bWJlcicsXG4gICAgICAgICAgICAnaGlkZGVuT3B0aW9ucycsXG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IG9iamVjdE9wdGlvbnMgPSBbXG4gICAgICAgICAgICAnbmFyZycsXG4gICAgICAgICAgICAna2V5JyxcbiAgICAgICAgICAgICdhbGlhcycsXG4gICAgICAgICAgICAnZGVmYXVsdCcsXG4gICAgICAgICAgICAnZGVmYXVsdERlc2NyaXB0aW9uJyxcbiAgICAgICAgICAgICdjb25maWcnLFxuICAgICAgICAgICAgJ2Nob2ljZXMnLFxuICAgICAgICAgICAgJ2RlbWFuZGVkT3B0aW9ucycsXG4gICAgICAgICAgICAnZGVtYW5kZWRDb21tYW5kcycsXG4gICAgICAgICAgICAnY29lcmNlJyxcbiAgICAgICAgICAgICdkZXByZWNhdGVkT3B0aW9ucycsXG4gICAgICAgIF07XG4gICAgICAgIGFycmF5T3B0aW9ucy5mb3JFYWNoKGsgPT4ge1xuICAgICAgICAgICAgdG1wT3B0aW9uc1trXSA9IChvcHRpb25zW2tdIHx8IFtdKS5maWx0ZXIoKGspID0+ICFsb2NhbExvb2t1cFtrXSk7XG4gICAgICAgIH0pO1xuICAgICAgICBvYmplY3RPcHRpb25zLmZvckVhY2goKGspID0+IHtcbiAgICAgICAgICAgIHRtcE9wdGlvbnNba10gPSBvYmpGaWx0ZXIob3B0aW9uc1trXSwgayA9PiAhbG9jYWxMb29rdXBba10pO1xuICAgICAgICB9KTtcbiAgICAgICAgdG1wT3B0aW9ucy5lbnZQcmVmaXggPSBvcHRpb25zLmVudlByZWZpeDtcbiAgICAgICAgb3B0aW9ucyA9IHRtcE9wdGlvbnM7XG4gICAgICAgIHVzYWdlJDEgPSB1c2FnZSQxID8gdXNhZ2UkMS5yZXNldChsb2NhbExvb2t1cCkgOiB1c2FnZShzZWxmLCB5MThuLCBzaGltJDEpO1xuICAgICAgICB2YWxpZGF0aW9uJDEgPSB2YWxpZGF0aW9uJDFcbiAgICAgICAgICAgID8gdmFsaWRhdGlvbiQxLnJlc2V0KGxvY2FsTG9va3VwKVxuICAgICAgICAgICAgOiB2YWxpZGF0aW9uKHNlbGYsIHVzYWdlJDEsIHkxOG4sIHNoaW0kMSk7XG4gICAgICAgIGNvbW1hbmQkMSA9IGNvbW1hbmQkMVxuICAgICAgICAgICAgPyBjb21tYW5kJDEucmVzZXQoKVxuICAgICAgICAgICAgOiBjb21tYW5kKHNlbGYsIHVzYWdlJDEsIHZhbGlkYXRpb24kMSwgZ2xvYmFsTWlkZGxld2FyZSwgc2hpbSQxKTtcbiAgICAgICAgaWYgKCFjb21wbGV0aW9uJDEpXG4gICAgICAgICAgICBjb21wbGV0aW9uJDEgPSBjb21wbGV0aW9uKHNlbGYsIHVzYWdlJDEsIGNvbW1hbmQkMSwgc2hpbSQxKTtcbiAgICAgICAgY29tcGxldGlvbkNvbW1hbmQgPSBudWxsO1xuICAgICAgICBvdXRwdXQgPSAnJztcbiAgICAgICAgZXhpdEVycm9yID0gbnVsbDtcbiAgICAgICAgaGFzT3V0cHV0ID0gZmFsc2U7XG4gICAgICAgIHNlbGYucGFyc2VkID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5yZXNldE9wdGlvbnMoKTtcbiAgICBjb25zdCBmcm96ZW5zID0gW107XG4gICAgZnVuY3Rpb24gZnJlZXplKCkge1xuICAgICAgICBmcm96ZW5zLnB1c2goe1xuICAgICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICAgIGNvbmZpZ09iamVjdHM6IG9wdGlvbnMuY29uZmlnT2JqZWN0cy5zbGljZSgwKSxcbiAgICAgICAgICAgIGV4aXRQcm9jZXNzLFxuICAgICAgICAgICAgZ3JvdXBzLFxuICAgICAgICAgICAgc3RyaWN0LFxuICAgICAgICAgICAgc3RyaWN0Q29tbWFuZHMsXG4gICAgICAgICAgICBzdHJpY3RPcHRpb25zLFxuICAgICAgICAgICAgY29tcGxldGlvbkNvbW1hbmQsXG4gICAgICAgICAgICBvdXRwdXQsXG4gICAgICAgICAgICBleGl0RXJyb3IsXG4gICAgICAgICAgICBoYXNPdXRwdXQsXG4gICAgICAgICAgICBwYXJzZWQ6IHNlbGYucGFyc2VkLFxuICAgICAgICAgICAgcGFyc2VGbixcbiAgICAgICAgICAgIHBhcnNlQ29udGV4dCxcbiAgICAgICAgICAgIGhhbmRsZXJGaW5pc2hDb21tYW5kLFxuICAgICAgICB9KTtcbiAgICAgICAgdXNhZ2UkMS5mcmVlemUoKTtcbiAgICAgICAgdmFsaWRhdGlvbiQxLmZyZWV6ZSgpO1xuICAgICAgICBjb21tYW5kJDEuZnJlZXplKCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHVuZnJlZXplKCkge1xuICAgICAgICBjb25zdCBmcm96ZW4gPSBmcm96ZW5zLnBvcCgpO1xuICAgICAgICBhc3NlcnROb3RTdHJpY3RFcXVhbChmcm96ZW4sIHVuZGVmaW5lZCwgc2hpbSQxKTtcbiAgICAgICAgbGV0IGNvbmZpZ09iamVjdHM7XG4gICAgICAgICh7XG4gICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgICAgY29uZmlnT2JqZWN0cyxcbiAgICAgICAgICAgIGV4aXRQcm9jZXNzLFxuICAgICAgICAgICAgZ3JvdXBzLFxuICAgICAgICAgICAgb3V0cHV0LFxuICAgICAgICAgICAgZXhpdEVycm9yLFxuICAgICAgICAgICAgaGFzT3V0cHV0LFxuICAgICAgICAgICAgcGFyc2VkOiBzZWxmLnBhcnNlZCxcbiAgICAgICAgICAgIHN0cmljdCxcbiAgICAgICAgICAgIHN0cmljdENvbW1hbmRzLFxuICAgICAgICAgICAgc3RyaWN0T3B0aW9ucyxcbiAgICAgICAgICAgIGNvbXBsZXRpb25Db21tYW5kLFxuICAgICAgICAgICAgcGFyc2VGbixcbiAgICAgICAgICAgIHBhcnNlQ29udGV4dCxcbiAgICAgICAgICAgIGhhbmRsZXJGaW5pc2hDb21tYW5kLFxuICAgICAgICB9ID0gZnJvemVuKTtcbiAgICAgICAgb3B0aW9ucy5jb25maWdPYmplY3RzID0gY29uZmlnT2JqZWN0cztcbiAgICAgICAgdXNhZ2UkMS51bmZyZWV6ZSgpO1xuICAgICAgICB2YWxpZGF0aW9uJDEudW5mcmVlemUoKTtcbiAgICAgICAgY29tbWFuZCQxLnVuZnJlZXplKCk7XG4gICAgfVxuICAgIHNlbGYuYm9vbGVhbiA9IGZ1bmN0aW9uIChrZXlzKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxhcnJheXxzdHJpbmc+JywgW2tleXNdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgcG9wdWxhdGVQYXJzZXJIaW50QXJyYXkoJ2Jvb2xlYW4nLCBrZXlzKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLmFycmF5ID0gZnVuY3Rpb24gKGtleXMpIHtcbiAgICAgICAgYXJnc2VydCgnPGFycmF5fHN0cmluZz4nLCBba2V5c10sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBwb3B1bGF0ZVBhcnNlckhpbnRBcnJheSgnYXJyYXknLCBrZXlzKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLm51bWJlciA9IGZ1bmN0aW9uIChrZXlzKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxhcnJheXxzdHJpbmc+JywgW2tleXNdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgcG9wdWxhdGVQYXJzZXJIaW50QXJyYXkoJ251bWJlcicsIGtleXMpO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIHNlbGYubm9ybWFsaXplID0gZnVuY3Rpb24gKGtleXMpIHtcbiAgICAgICAgYXJnc2VydCgnPGFycmF5fHN0cmluZz4nLCBba2V5c10sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBwb3B1bGF0ZVBhcnNlckhpbnRBcnJheSgnbm9ybWFsaXplJywga2V5cyk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5jb3VudCA9IGZ1bmN0aW9uIChrZXlzKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxhcnJheXxzdHJpbmc+JywgW2tleXNdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgcG9wdWxhdGVQYXJzZXJIaW50QXJyYXkoJ2NvdW50Jywga2V5cyk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5zdHJpbmcgPSBmdW5jdGlvbiAoa2V5cykge1xuICAgICAgICBhcmdzZXJ0KCc8YXJyYXl8c3RyaW5nPicsIFtrZXlzXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIHBvcHVsYXRlUGFyc2VySGludEFycmF5KCdzdHJpbmcnLCBrZXlzKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLnJlcXVpcmVzQXJnID0gZnVuY3Rpb24gKGtleXMpIHtcbiAgICAgICAgYXJnc2VydCgnPGFycmF5fHN0cmluZ3xvYmplY3Q+IFtudW1iZXJdJywgW2tleXNdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgaWYgKHR5cGVvZiBrZXlzID09PSAnc3RyaW5nJyAmJiBvcHRpb25zLm5hcmdba2V5c10pIHtcbiAgICAgICAgICAgIHJldHVybiBzZWxmO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcG9wdWxhdGVQYXJzZXJIaW50U2luZ2xlVmFsdWVEaWN0aW9uYXJ5KHNlbGYucmVxdWlyZXNBcmcsICduYXJnJywga2V5cywgTmFOKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIHNlbGYuc2tpcFZhbGlkYXRpb24gPSBmdW5jdGlvbiAoa2V5cykge1xuICAgICAgICBhcmdzZXJ0KCc8YXJyYXl8c3RyaW5nPicsIFtrZXlzXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIHBvcHVsYXRlUGFyc2VySGludEFycmF5KCdza2lwVmFsaWRhdGlvbicsIGtleXMpO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIGZ1bmN0aW9uIHBvcHVsYXRlUGFyc2VySGludEFycmF5KHR5cGUsIGtleXMpIHtcbiAgICAgICAga2V5cyA9IFtdLmNvbmNhdChrZXlzKTtcbiAgICAgICAga2V5cy5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICBrZXkgPSBzYW5pdGl6ZUtleShrZXkpO1xuICAgICAgICAgICAgb3B0aW9uc1t0eXBlXS5wdXNoKGtleSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBzZWxmLm5hcmdzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgICAgYXJnc2VydCgnPHN0cmluZ3xvYmplY3R8YXJyYXk+IFtudW1iZXJdJywgW2tleSwgdmFsdWVdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgcG9wdWxhdGVQYXJzZXJIaW50U2luZ2xlVmFsdWVEaWN0aW9uYXJ5KHNlbGYubmFyZ3MsICduYXJnJywga2V5LCB2YWx1ZSk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5jaG9pY2VzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgICAgYXJnc2VydCgnPG9iamVjdHxzdHJpbmd8YXJyYXk+IFtzdHJpbmd8YXJyYXldJywgW2tleSwgdmFsdWVdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgcG9wdWxhdGVQYXJzZXJIaW50QXJyYXlEaWN0aW9uYXJ5KHNlbGYuY2hvaWNlcywgJ2Nob2ljZXMnLCBrZXksIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLmFsaWFzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgICAgYXJnc2VydCgnPG9iamVjdHxzdHJpbmd8YXJyYXk+IFtzdHJpbmd8YXJyYXldJywgW2tleSwgdmFsdWVdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgcG9wdWxhdGVQYXJzZXJIaW50QXJyYXlEaWN0aW9uYXJ5KHNlbGYuYWxpYXMsICdhbGlhcycsIGtleSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIHNlbGYuZGVmYXVsdCA9IHNlbGYuZGVmYXVsdHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSwgZGVmYXVsdERlc2NyaXB0aW9uKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxvYmplY3R8c3RyaW5nfGFycmF5PiBbKl0gW3N0cmluZ10nLCBba2V5LCB2YWx1ZSwgZGVmYXVsdERlc2NyaXB0aW9uXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGlmIChkZWZhdWx0RGVzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIGFzc2VydFNpbmdsZUtleShrZXksIHNoaW0kMSk7XG4gICAgICAgICAgICBvcHRpb25zLmRlZmF1bHREZXNjcmlwdGlvbltrZXldID0gZGVmYXVsdERlc2NyaXB0aW9uO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGFzc2VydFNpbmdsZUtleShrZXksIHNoaW0kMSk7XG4gICAgICAgICAgICBpZiAoIW9wdGlvbnMuZGVmYXVsdERlc2NyaXB0aW9uW2tleV0pXG4gICAgICAgICAgICAgICAgb3B0aW9ucy5kZWZhdWx0RGVzY3JpcHRpb25ba2V5XSA9IHVzYWdlJDEuZnVuY3Rpb25EZXNjcmlwdGlvbih2YWx1ZSk7XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLmNhbGwoKTtcbiAgICAgICAgfVxuICAgICAgICBwb3B1bGF0ZVBhcnNlckhpbnRTaW5nbGVWYWx1ZURpY3Rpb25hcnkoc2VsZi5kZWZhdWx0LCAnZGVmYXVsdCcsIGtleSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIHNlbGYuZGVzY3JpYmUgPSBmdW5jdGlvbiAoa2V5LCBkZXNjKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxvYmplY3R8c3RyaW5nfGFycmF5PiBbc3RyaW5nXScsIFtrZXksIGRlc2NdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgc2V0S2V5KGtleSwgdHJ1ZSk7XG4gICAgICAgIHVzYWdlJDEuZGVzY3JpYmUoa2V5LCBkZXNjKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBmdW5jdGlvbiBzZXRLZXkoa2V5LCBzZXQpIHtcbiAgICAgICAgcG9wdWxhdGVQYXJzZXJIaW50U2luZ2xlVmFsdWVEaWN0aW9uYXJ5KHNldEtleSwgJ2tleScsIGtleSwgc2V0KTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRlbWFuZE9wdGlvbihrZXlzLCBtc2cpIHtcbiAgICAgICAgYXJnc2VydCgnPG9iamVjdHxzdHJpbmd8YXJyYXk+IFtzdHJpbmddJywgW2tleXMsIG1zZ10sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBwb3B1bGF0ZVBhcnNlckhpbnRTaW5nbGVWYWx1ZURpY3Rpb25hcnkoc2VsZi5kZW1hbmRPcHRpb24sICdkZW1hbmRlZE9wdGlvbnMnLCBrZXlzLCBtc2cpO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9XG4gICAgc2VsZi5kZW1hbmRPcHRpb24gPSBkZW1hbmRPcHRpb247XG4gICAgc2VsZi5jb2VyY2UgPSBmdW5jdGlvbiAoa2V5cywgdmFsdWUpIHtcbiAgICAgICAgYXJnc2VydCgnPG9iamVjdHxzdHJpbmd8YXJyYXk+IFtmdW5jdGlvbl0nLCBba2V5cywgdmFsdWVdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgcG9wdWxhdGVQYXJzZXJIaW50U2luZ2xlVmFsdWVEaWN0aW9uYXJ5KHNlbGYuY29lcmNlLCAnY29lcmNlJywga2V5cywgdmFsdWUpO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIGZ1bmN0aW9uIHBvcHVsYXRlUGFyc2VySGludFNpbmdsZVZhbHVlRGljdGlvbmFyeShidWlsZGVyLCB0eXBlLCBrZXksIHZhbHVlKSB7XG4gICAgICAgIHBvcHVsYXRlUGFyc2VySGludERpY3Rpb25hcnkoYnVpbGRlciwgdHlwZSwga2V5LCB2YWx1ZSwgKHR5cGUsIGtleSwgdmFsdWUpID0+IHtcbiAgICAgICAgICAgIG9wdGlvbnNbdHlwZV1ba2V5XSA9IHZhbHVlO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcG9wdWxhdGVQYXJzZXJIaW50QXJyYXlEaWN0aW9uYXJ5KGJ1aWxkZXIsIHR5cGUsIGtleSwgdmFsdWUpIHtcbiAgICAgICAgcG9wdWxhdGVQYXJzZXJIaW50RGljdGlvbmFyeShidWlsZGVyLCB0eXBlLCBrZXksIHZhbHVlLCAodHlwZSwga2V5LCB2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgb3B0aW9uc1t0eXBlXVtrZXldID0gKG9wdGlvbnNbdHlwZV1ba2V5XSB8fCBbXSkuY29uY2F0KHZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBvcHVsYXRlUGFyc2VySGludERpY3Rpb25hcnkoYnVpbGRlciwgdHlwZSwga2V5LCB2YWx1ZSwgc2luZ2xlS2V5SGFuZGxlcikge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShrZXkpKSB7XG4gICAgICAgICAgICBrZXkuZm9yRWFjaChrID0+IHtcbiAgICAgICAgICAgICAgICBidWlsZGVyKGssIHZhbHVlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCgoa2V5KSA9PiB0eXBlb2Yga2V5ID09PSAnb2JqZWN0Jykoa2V5KSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBrIG9mIG9iamVjdEtleXMoa2V5KSkge1xuICAgICAgICAgICAgICAgIGJ1aWxkZXIoaywga2V5W2tdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHNpbmdsZUtleUhhbmRsZXIodHlwZSwgc2FuaXRpemVLZXkoa2V5KSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNhbml0aXplS2V5KGtleSkge1xuICAgICAgICBpZiAoa2V5ID09PSAnX19wcm90b19fJylcbiAgICAgICAgICAgIHJldHVybiAnX19fcHJvdG9fX18nO1xuICAgICAgICByZXR1cm4ga2V5O1xuICAgIH1cbiAgICBmdW5jdGlvbiBkZWxldGVGcm9tUGFyc2VySGludE9iamVjdChvcHRpb25LZXkpIHtcbiAgICAgICAgb2JqZWN0S2V5cyhvcHRpb25zKS5mb3JFYWNoKChoaW50S2V5KSA9PiB7XG4gICAgICAgICAgICBpZiAoKChrZXkpID0+IGtleSA9PT0gJ2NvbmZpZ09iamVjdHMnKShoaW50S2V5KSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjb25zdCBoaW50ID0gb3B0aW9uc1toaW50S2V5XTtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGhpbnQpKSB7XG4gICAgICAgICAgICAgICAgaWYgKH5oaW50LmluZGV4T2Yob3B0aW9uS2V5KSlcbiAgICAgICAgICAgICAgICAgICAgaGludC5zcGxpY2UoaGludC5pbmRleE9mKG9wdGlvbktleSksIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIGhpbnQgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIGhpbnRbb3B0aW9uS2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGRlbGV0ZSB1c2FnZSQxLmdldERlc2NyaXB0aW9ucygpW29wdGlvbktleV07XG4gICAgfVxuICAgIHNlbGYuY29uZmlnID0gZnVuY3Rpb24gY29uZmlnKGtleSA9ICdjb25maWcnLCBtc2csIHBhcnNlRm4pIHtcbiAgICAgICAgYXJnc2VydCgnW29iamVjdHxzdHJpbmddIFtzdHJpbmd8ZnVuY3Rpb25dIFtmdW5jdGlvbl0nLCBba2V5LCBtc2csIHBhcnNlRm5dLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgaWYgKHR5cGVvZiBrZXkgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KGtleSkpIHtcbiAgICAgICAgICAgIGtleSA9IGFwcGx5RXh0ZW5kcyhrZXksIGN3ZCwgc2VsZi5nZXRQYXJzZXJDb25maWd1cmF0aW9uKClbJ2RlZXAtbWVyZ2UtY29uZmlnJ10gfHwgZmFsc2UsIHNoaW0kMSk7XG4gICAgICAgICAgICBvcHRpb25zLmNvbmZpZ09iamVjdHMgPSAob3B0aW9ucy5jb25maWdPYmplY3RzIHx8IFtdKS5jb25jYXQoa2V5KTtcbiAgICAgICAgICAgIHJldHVybiBzZWxmO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgbXNnID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBwYXJzZUZuID0gbXNnO1xuICAgICAgICAgICAgbXNnID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHNlbGYuZGVzY3JpYmUoa2V5LCBtc2cgfHwgdXNhZ2UkMS5kZWZlclkxOG5Mb29rdXAoJ1BhdGggdG8gSlNPTiBjb25maWcgZmlsZScpKTtcbiAgICAgICAgKEFycmF5LmlzQXJyYXkoa2V5KSA/IGtleSA6IFtrZXldKS5mb3JFYWNoKGsgPT4ge1xuICAgICAgICAgICAgb3B0aW9ucy5jb25maWdba10gPSBwYXJzZUZuIHx8IHRydWU7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIHNlbGYuZXhhbXBsZSA9IGZ1bmN0aW9uIChjbWQsIGRlc2NyaXB0aW9uKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxzdHJpbmd8YXJyYXk+IFtzdHJpbmddJywgW2NtZCwgZGVzY3JpcHRpb25dLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY21kKSkge1xuICAgICAgICAgICAgY21kLmZvckVhY2goZXhhbXBsZVBhcmFtcyA9PiBzZWxmLmV4YW1wbGUoLi4uZXhhbXBsZVBhcmFtcykpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdXNhZ2UkMS5leGFtcGxlKGNtZCwgZGVzY3JpcHRpb24pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5jb21tYW5kID0gZnVuY3Rpb24gKGNtZCwgZGVzY3JpcHRpb24sIGJ1aWxkZXIsIGhhbmRsZXIsIG1pZGRsZXdhcmVzLCBkZXByZWNhdGVkKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxzdHJpbmd8YXJyYXl8b2JqZWN0PiBbc3RyaW5nfGJvb2xlYW5dIFtmdW5jdGlvbnxvYmplY3RdIFtmdW5jdGlvbl0gW2FycmF5XSBbYm9vbGVhbnxzdHJpbmddJywgW2NtZCwgZGVzY3JpcHRpb24sIGJ1aWxkZXIsIGhhbmRsZXIsIG1pZGRsZXdhcmVzLCBkZXByZWNhdGVkXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGNvbW1hbmQkMS5hZGRIYW5kbGVyKGNtZCwgZGVzY3JpcHRpb24sIGJ1aWxkZXIsIGhhbmRsZXIsIG1pZGRsZXdhcmVzLCBkZXByZWNhdGVkKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLmNvbW1hbmREaXIgPSBmdW5jdGlvbiAoZGlyLCBvcHRzKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxzdHJpbmc+IFtvYmplY3RdJywgW2Rpciwgb3B0c10sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBjb25zdCByZXEgPSBwYXJlbnRSZXF1aXJlIHx8IHNoaW0kMS5yZXF1aXJlO1xuICAgICAgICBjb21tYW5kJDEuYWRkRGlyZWN0b3J5KGRpciwgc2VsZi5nZXRDb250ZXh0KCksIHJlcSwgc2hpbSQxLmdldENhbGxlckZpbGUoKSwgb3B0cyk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5kZW1hbmQgPSBzZWxmLnJlcXVpcmVkID0gc2VsZi5yZXF1aXJlID0gZnVuY3Rpb24gZGVtYW5kKGtleXMsIG1heCwgbXNnKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG1heCkpIHtcbiAgICAgICAgICAgIG1heC5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgYXNzZXJ0Tm90U3RyaWN0RXF1YWwobXNnLCB0cnVlLCBzaGltJDEpO1xuICAgICAgICAgICAgICAgIGRlbWFuZE9wdGlvbihrZXksIG1zZyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIG1heCA9IEluZmluaXR5O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiBtYXggIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICBtc2cgPSBtYXg7XG4gICAgICAgICAgICBtYXggPSBJbmZpbml0eTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGtleXMgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICBhc3NlcnROb3RTdHJpY3RFcXVhbChtc2csIHRydWUsIHNoaW0kMSk7XG4gICAgICAgICAgICBzZWxmLmRlbWFuZENvbW1hbmQoa2V5cywgbWF4LCBtc2csIG1zZyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShrZXlzKSkge1xuICAgICAgICAgICAga2V5cy5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgYXNzZXJ0Tm90U3RyaWN0RXF1YWwobXNnLCB0cnVlLCBzaGltJDEpO1xuICAgICAgICAgICAgICAgIGRlbWFuZE9wdGlvbihrZXksIG1zZyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgbXNnID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGRlbWFuZE9wdGlvbihrZXlzLCBtc2cpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobXNnID09PSB0cnVlIHx8IHR5cGVvZiBtc2cgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgZGVtYW5kT3B0aW9uKGtleXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5kZW1hbmRDb21tYW5kID0gZnVuY3Rpb24gZGVtYW5kQ29tbWFuZChtaW4gPSAxLCBtYXgsIG1pbk1zZywgbWF4TXNnKSB7XG4gICAgICAgIGFyZ3NlcnQoJ1tudW1iZXJdIFtudW1iZXJ8c3RyaW5nXSBbc3RyaW5nfG51bGx8dW5kZWZpbmVkXSBbc3RyaW5nfG51bGx8dW5kZWZpbmVkXScsIFttaW4sIG1heCwgbWluTXNnLCBtYXhNc2ddLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgaWYgKHR5cGVvZiBtYXggIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICBtaW5Nc2cgPSBtYXg7XG4gICAgICAgICAgICBtYXggPSBJbmZpbml0eTtcbiAgICAgICAgfVxuICAgICAgICBzZWxmLmdsb2JhbCgnXycsIGZhbHNlKTtcbiAgICAgICAgb3B0aW9ucy5kZW1hbmRlZENvbW1hbmRzLl8gPSB7XG4gICAgICAgICAgICBtaW4sXG4gICAgICAgICAgICBtYXgsXG4gICAgICAgICAgICBtaW5Nc2csXG4gICAgICAgICAgICBtYXhNc2csXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5nZXREZW1hbmRlZE9wdGlvbnMgPSAoKSA9PiB7XG4gICAgICAgIGFyZ3NlcnQoW10sIDApO1xuICAgICAgICByZXR1cm4gb3B0aW9ucy5kZW1hbmRlZE9wdGlvbnM7XG4gICAgfTtcbiAgICBzZWxmLmdldERlbWFuZGVkQ29tbWFuZHMgPSAoKSA9PiB7XG4gICAgICAgIGFyZ3NlcnQoW10sIDApO1xuICAgICAgICByZXR1cm4gb3B0aW9ucy5kZW1hbmRlZENvbW1hbmRzO1xuICAgIH07XG4gICAgc2VsZi5kZXByZWNhdGVPcHRpb24gPSBmdW5jdGlvbiBkZXByZWNhdGVPcHRpb24ob3B0aW9uLCBtZXNzYWdlKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxzdHJpbmc+IFtzdHJpbmd8Ym9vbGVhbl0nLCBbb3B0aW9uLCBtZXNzYWdlXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIG9wdGlvbnMuZGVwcmVjYXRlZE9wdGlvbnNbb3B0aW9uXSA9IG1lc3NhZ2U7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5nZXREZXByZWNhdGVkT3B0aW9ucyA9ICgpID0+IHtcbiAgICAgICAgYXJnc2VydChbXSwgMCk7XG4gICAgICAgIHJldHVybiBvcHRpb25zLmRlcHJlY2F0ZWRPcHRpb25zO1xuICAgIH07XG4gICAgc2VsZi5pbXBsaWVzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgICAgYXJnc2VydCgnPHN0cmluZ3xvYmplY3Q+IFtudW1iZXJ8c3RyaW5nfGFycmF5XScsIFtrZXksIHZhbHVlXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIHZhbGlkYXRpb24kMS5pbXBsaWVzKGtleSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIHNlbGYuY29uZmxpY3RzID0gZnVuY3Rpb24gKGtleTEsIGtleTIpIHtcbiAgICAgICAgYXJnc2VydCgnPHN0cmluZ3xvYmplY3Q+IFtzdHJpbmd8YXJyYXldJywgW2tleTEsIGtleTJdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgdmFsaWRhdGlvbiQxLmNvbmZsaWN0cyhrZXkxLCBrZXkyKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLnVzYWdlID0gZnVuY3Rpb24gKG1zZywgZGVzY3JpcHRpb24sIGJ1aWxkZXIsIGhhbmRsZXIpIHtcbiAgICAgICAgYXJnc2VydCgnPHN0cmluZ3xudWxsfHVuZGVmaW5lZD4gW3N0cmluZ3xib29sZWFuXSBbZnVuY3Rpb258b2JqZWN0XSBbZnVuY3Rpb25dJywgW21zZywgZGVzY3JpcHRpb24sIGJ1aWxkZXIsIGhhbmRsZXJdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgaWYgKGRlc2NyaXB0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGFzc2VydE5vdFN0cmljdEVxdWFsKG1zZywgbnVsbCwgc2hpbSQxKTtcbiAgICAgICAgICAgIGlmICgobXNnIHx8ICcnKS5tYXRjaCgvXlxcJDAoIHwkKS8pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuY29tbWFuZChtc2csIGRlc2NyaXB0aW9uLCBidWlsZGVyLCBoYW5kbGVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBZRXJyb3IoJy51c2FnZSgpIGRlc2NyaXB0aW9uIG11c3Qgc3RhcnQgd2l0aCAkMCBpZiBiZWluZyB1c2VkIGFzIGFsaWFzIGZvciAuY29tbWFuZCgpJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB1c2FnZSQxLnVzYWdlKG1zZyk7XG4gICAgICAgICAgICByZXR1cm4gc2VsZjtcbiAgICAgICAgfVxuICAgIH07XG4gICAgc2VsZi5lcGlsb2d1ZSA9IHNlbGYuZXBpbG9nID0gZnVuY3Rpb24gKG1zZykge1xuICAgICAgICBhcmdzZXJ0KCc8c3RyaW5nPicsIFttc2ddLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgdXNhZ2UkMS5lcGlsb2cobXNnKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLmZhaWwgPSBmdW5jdGlvbiAoZikge1xuICAgICAgICBhcmdzZXJ0KCc8ZnVuY3Rpb24+JywgW2ZdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgdXNhZ2UkMS5mYWlsRm4oZik7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5vbkZpbmlzaENvbW1hbmQgPSBmdW5jdGlvbiAoZikge1xuICAgICAgICBhcmdzZXJ0KCc8ZnVuY3Rpb24+JywgW2ZdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgaGFuZGxlckZpbmlzaENvbW1hbmQgPSBmO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIHNlbGYuZ2V0SGFuZGxlckZpbmlzaENvbW1hbmQgPSAoKSA9PiBoYW5kbGVyRmluaXNoQ29tbWFuZDtcbiAgICBzZWxmLmNoZWNrID0gZnVuY3Rpb24gKGYsIF9nbG9iYWwpIHtcbiAgICAgICAgYXJnc2VydCgnPGZ1bmN0aW9uPiBbYm9vbGVhbl0nLCBbZiwgX2dsb2JhbF0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICB2YWxpZGF0aW9uJDEuY2hlY2soZiwgX2dsb2JhbCAhPT0gZmFsc2UpO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIHNlbGYuZ2xvYmFsID0gZnVuY3Rpb24gZ2xvYmFsKGdsb2JhbHMsIGdsb2JhbCkge1xuICAgICAgICBhcmdzZXJ0KCc8c3RyaW5nfGFycmF5PiBbYm9vbGVhbl0nLCBbZ2xvYmFscywgZ2xvYmFsXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGdsb2JhbHMgPSBbXS5jb25jYXQoZ2xvYmFscyk7XG4gICAgICAgIGlmIChnbG9iYWwgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICBvcHRpb25zLmxvY2FsID0gb3B0aW9ucy5sb2NhbC5maWx0ZXIobCA9PiBnbG9iYWxzLmluZGV4T2YobCkgPT09IC0xKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGdsb2JhbHMuZm9yRWFjaChnID0+IHtcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5sb2NhbC5pbmRleE9mKGcpID09PSAtMSlcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5sb2NhbC5wdXNoKGcpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLnBrZ0NvbmYgPSBmdW5jdGlvbiBwa2dDb25mKGtleSwgcm9vdFBhdGgpIHtcbiAgICAgICAgYXJnc2VydCgnPHN0cmluZz4gW3N0cmluZ10nLCBba2V5LCByb290UGF0aF0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBsZXQgY29uZiA9IG51bGw7XG4gICAgICAgIGNvbnN0IG9iaiA9IHBrZ1VwKHJvb3RQYXRoIHx8IGN3ZCk7XG4gICAgICAgIGlmIChvYmpba2V5XSAmJiB0eXBlb2Ygb2JqW2tleV0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBjb25mID0gYXBwbHlFeHRlbmRzKG9ialtrZXldLCByb290UGF0aCB8fCBjd2QsIHNlbGYuZ2V0UGFyc2VyQ29uZmlndXJhdGlvbigpWydkZWVwLW1lcmdlLWNvbmZpZyddIHx8IGZhbHNlLCBzaGltJDEpO1xuICAgICAgICAgICAgb3B0aW9ucy5jb25maWdPYmplY3RzID0gKG9wdGlvbnMuY29uZmlnT2JqZWN0cyB8fCBbXSkuY29uY2F0KGNvbmYpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgY29uc3QgcGtncyA9IHt9O1xuICAgIGZ1bmN0aW9uIHBrZ1VwKHJvb3RQYXRoKSB7XG4gICAgICAgIGNvbnN0IG5wYXRoID0gcm9vdFBhdGggfHwgJyonO1xuICAgICAgICBpZiAocGtnc1tucGF0aF0pXG4gICAgICAgICAgICByZXR1cm4gcGtnc1tucGF0aF07XG4gICAgICAgIGxldCBvYmogPSB7fTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxldCBzdGFydERpciA9IHJvb3RQYXRoIHx8IHNoaW0kMS5tYWluRmlsZW5hbWU7XG4gICAgICAgICAgICBpZiAoIXJvb3RQYXRoICYmIHNoaW0kMS5wYXRoLmV4dG5hbWUoc3RhcnREaXIpKSB7XG4gICAgICAgICAgICAgICAgc3RhcnREaXIgPSBzaGltJDEucGF0aC5kaXJuYW1lKHN0YXJ0RGlyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHBrZ0pzb25QYXRoID0gc2hpbSQxLmZpbmRVcChzdGFydERpciwgKGRpciwgbmFtZXMpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAobmFtZXMuaW5jbHVkZXMoJ3BhY2thZ2UuanNvbicpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAncGFja2FnZS5qc29uJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBhc3NlcnROb3RTdHJpY3RFcXVhbChwa2dKc29uUGF0aCwgdW5kZWZpbmVkLCBzaGltJDEpO1xuICAgICAgICAgICAgb2JqID0gSlNPTi5wYXJzZShzaGltJDEucmVhZEZpbGVTeW5jKHBrZ0pzb25QYXRoLCAndXRmOCcpKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoX25vb3ApIHsgfVxuICAgICAgICBwa2dzW25wYXRoXSA9IG9iaiB8fCB7fTtcbiAgICAgICAgcmV0dXJuIHBrZ3NbbnBhdGhdO1xuICAgIH1cbiAgICBsZXQgcGFyc2VGbiA9IG51bGw7XG4gICAgbGV0IHBhcnNlQ29udGV4dCA9IG51bGw7XG4gICAgc2VsZi5wYXJzZSA9IGZ1bmN0aW9uIHBhcnNlKGFyZ3MsIHNob3J0Q2lyY3VpdCwgX3BhcnNlRm4pIHtcbiAgICAgICAgYXJnc2VydCgnW3N0cmluZ3xhcnJheV0gW2Z1bmN0aW9ufGJvb2xlYW58b2JqZWN0XSBbZnVuY3Rpb25dJywgW2FyZ3MsIHNob3J0Q2lyY3VpdCwgX3BhcnNlRm5dLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgZnJlZXplKCk7XG4gICAgICAgIGlmICh0eXBlb2YgYXJncyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGFyZ3YgPSBzZWxmLl9wYXJzZUFyZ3MocHJvY2Vzc0FyZ3MpO1xuICAgICAgICAgICAgY29uc3QgdG1wUGFyc2VkID0gc2VsZi5wYXJzZWQ7XG4gICAgICAgICAgICB1bmZyZWV6ZSgpO1xuICAgICAgICAgICAgc2VsZi5wYXJzZWQgPSB0bXBQYXJzZWQ7XG4gICAgICAgICAgICByZXR1cm4gYXJndjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHNob3J0Q2lyY3VpdCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHBhcnNlQ29udGV4dCA9IHNob3J0Q2lyY3VpdDtcbiAgICAgICAgICAgIHNob3J0Q2lyY3VpdCA9IF9wYXJzZUZuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2Ygc2hvcnRDaXJjdWl0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBwYXJzZUZuID0gc2hvcnRDaXJjdWl0O1xuICAgICAgICAgICAgc2hvcnRDaXJjdWl0ID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFzaG9ydENpcmN1aXQpXG4gICAgICAgICAgICBwcm9jZXNzQXJncyA9IGFyZ3M7XG4gICAgICAgIGlmIChwYXJzZUZuKVxuICAgICAgICAgICAgZXhpdFByb2Nlc3MgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gc2VsZi5fcGFyc2VBcmdzKGFyZ3MsICEhc2hvcnRDaXJjdWl0KTtcbiAgICAgICAgY29tcGxldGlvbiQxLnNldFBhcnNlZChzZWxmLnBhcnNlZCk7XG4gICAgICAgIGlmIChwYXJzZUZuKVxuICAgICAgICAgICAgcGFyc2VGbihleGl0RXJyb3IsIHBhcnNlZCwgb3V0cHV0KTtcbiAgICAgICAgdW5mcmVlemUoKTtcbiAgICAgICAgcmV0dXJuIHBhcnNlZDtcbiAgICB9O1xuICAgIHNlbGYuX2dldFBhcnNlQ29udGV4dCA9ICgpID0+IHBhcnNlQ29udGV4dCB8fCB7fTtcbiAgICBzZWxmLl9oYXNQYXJzZUNhbGxiYWNrID0gKCkgPT4gISFwYXJzZUZuO1xuICAgIHNlbGYub3B0aW9uID0gc2VsZi5vcHRpb25zID0gZnVuY3Rpb24gb3B0aW9uKGtleSwgb3B0KSB7XG4gICAgICAgIGFyZ3NlcnQoJzxzdHJpbmd8b2JqZWN0PiBbb2JqZWN0XScsIFtrZXksIG9wdF0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBpZiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGtleSkuZm9yRWFjaChrID0+IHtcbiAgICAgICAgICAgICAgICBzZWxmLm9wdGlvbnMoaywga2V5W2tdKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHQgIT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgb3B0ID0ge307XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvcHRpb25zLmtleVtrZXldID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChvcHQuYWxpYXMpXG4gICAgICAgICAgICAgICAgc2VsZi5hbGlhcyhrZXksIG9wdC5hbGlhcyk7XG4gICAgICAgICAgICBjb25zdCBkZXByZWNhdGUgPSBvcHQuZGVwcmVjYXRlIHx8IG9wdC5kZXByZWNhdGVkO1xuICAgICAgICAgICAgaWYgKGRlcHJlY2F0ZSkge1xuICAgICAgICAgICAgICAgIHNlbGYuZGVwcmVjYXRlT3B0aW9uKGtleSwgZGVwcmVjYXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGRlbWFuZCA9IG9wdC5kZW1hbmQgfHwgb3B0LnJlcXVpcmVkIHx8IG9wdC5yZXF1aXJlO1xuICAgICAgICAgICAgaWYgKGRlbWFuZCkge1xuICAgICAgICAgICAgICAgIHNlbGYuZGVtYW5kKGtleSwgZGVtYW5kKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQuZGVtYW5kT3B0aW9uKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5kZW1hbmRPcHRpb24oa2V5LCB0eXBlb2Ygb3B0LmRlbWFuZE9wdGlvbiA9PT0gJ3N0cmluZycgPyBvcHQuZGVtYW5kT3B0aW9uIDogdW5kZWZpbmVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQuY29uZmxpY3RzKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5jb25mbGljdHMoa2V5LCBvcHQuY29uZmxpY3RzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgnZGVmYXVsdCcgaW4gb3B0KSB7XG4gICAgICAgICAgICAgICAgc2VsZi5kZWZhdWx0KGtleSwgb3B0LmRlZmF1bHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdC5pbXBsaWVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmltcGxpZXMoa2V5LCBvcHQuaW1wbGllcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0Lm5hcmdzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBzZWxmLm5hcmdzKGtleSwgb3B0Lm5hcmdzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQuY29uZmlnKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5jb25maWcoa2V5LCBvcHQuY29uZmlnUGFyc2VyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQubm9ybWFsaXplKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5ub3JtYWxpemUoa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQuY2hvaWNlcykge1xuICAgICAgICAgICAgICAgIHNlbGYuY2hvaWNlcyhrZXksIG9wdC5jaG9pY2VzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQuY29lcmNlKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5jb2VyY2Uoa2V5LCBvcHQuY29lcmNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQuZ3JvdXApIHtcbiAgICAgICAgICAgICAgICBzZWxmLmdyb3VwKGtleSwgb3B0Lmdyb3VwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQuYm9vbGVhbiB8fCBvcHQudHlwZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5ib29sZWFuKGtleSk7XG4gICAgICAgICAgICAgICAgaWYgKG9wdC5hbGlhcylcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5ib29sZWFuKG9wdC5hbGlhcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0LmFycmF5IHx8IG9wdC50eXBlID09PSAnYXJyYXknKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5hcnJheShrZXkpO1xuICAgICAgICAgICAgICAgIGlmIChvcHQuYWxpYXMpXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuYXJyYXkob3B0LmFsaWFzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQubnVtYmVyIHx8IG9wdC50eXBlID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHNlbGYubnVtYmVyKGtleSk7XG4gICAgICAgICAgICAgICAgaWYgKG9wdC5hbGlhcylcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5udW1iZXIob3B0LmFsaWFzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQuc3RyaW5nIHx8IG9wdC50eXBlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHNlbGYuc3RyaW5nKGtleSk7XG4gICAgICAgICAgICAgICAgaWYgKG9wdC5hbGlhcylcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5zdHJpbmcob3B0LmFsaWFzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQuY291bnQgfHwgb3B0LnR5cGUgPT09ICdjb3VudCcpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmNvdW50KGtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdC5nbG9iYWwgPT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgICAgIHNlbGYuZ2xvYmFsKGtleSwgb3B0Lmdsb2JhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0LmRlZmF1bHREZXNjcmlwdGlvbikge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMuZGVmYXVsdERlc2NyaXB0aW9uW2tleV0gPSBvcHQuZGVmYXVsdERlc2NyaXB0aW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdC5za2lwVmFsaWRhdGlvbikge1xuICAgICAgICAgICAgICAgIHNlbGYuc2tpcFZhbGlkYXRpb24oa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGRlc2MgPSBvcHQuZGVzY3JpYmUgfHwgb3B0LmRlc2NyaXB0aW9uIHx8IG9wdC5kZXNjO1xuICAgICAgICAgICAgc2VsZi5kZXNjcmliZShrZXksIGRlc2MpO1xuICAgICAgICAgICAgaWYgKG9wdC5oaWRkZW4pIHtcbiAgICAgICAgICAgICAgICBzZWxmLmhpZGUoa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQucmVxdWlyZXNBcmcpIHtcbiAgICAgICAgICAgICAgICBzZWxmLnJlcXVpcmVzQXJnKGtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLmdldE9wdGlvbnMgPSAoKSA9PiBvcHRpb25zO1xuICAgIHNlbGYucG9zaXRpb25hbCA9IGZ1bmN0aW9uIChrZXksIG9wdHMpIHtcbiAgICAgICAgYXJnc2VydCgnPHN0cmluZz4gPG9iamVjdD4nLCBba2V5LCBvcHRzXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGlmIChjb250ZXh0LnJlc2V0cyA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFlFcnJvcihcIi5wb3NpdGlvbmFsKCkgY2FuIG9ubHkgYmUgY2FsbGVkIGluIGEgY29tbWFuZCdzIGJ1aWxkZXIgZnVuY3Rpb25cIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3VwcG9ydGVkT3B0cyA9IFtcbiAgICAgICAgICAgICdkZWZhdWx0JyxcbiAgICAgICAgICAgICdkZWZhdWx0RGVzY3JpcHRpb24nLFxuICAgICAgICAgICAgJ2ltcGxpZXMnLFxuICAgICAgICAgICAgJ25vcm1hbGl6ZScsXG4gICAgICAgICAgICAnY2hvaWNlcycsXG4gICAgICAgICAgICAnY29uZmxpY3RzJyxcbiAgICAgICAgICAgICdjb2VyY2UnLFxuICAgICAgICAgICAgJ3R5cGUnLFxuICAgICAgICAgICAgJ2Rlc2NyaWJlJyxcbiAgICAgICAgICAgICdkZXNjJyxcbiAgICAgICAgICAgICdkZXNjcmlwdGlvbicsXG4gICAgICAgICAgICAnYWxpYXMnLFxuICAgICAgICBdO1xuICAgICAgICBvcHRzID0gb2JqRmlsdGVyKG9wdHMsIChrLCB2KSA9PiB7XG4gICAgICAgICAgICBsZXQgYWNjZXB0ID0gc3VwcG9ydGVkT3B0cy5pbmRleE9mKGspICE9PSAtMTtcbiAgICAgICAgICAgIGlmIChrID09PSAndHlwZScgJiYgWydzdHJpbmcnLCAnbnVtYmVyJywgJ2Jvb2xlYW4nXS5pbmRleE9mKHYpID09PSAtMSlcbiAgICAgICAgICAgICAgICBhY2NlcHQgPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybiBhY2NlcHQ7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBmdWxsQ29tbWFuZCA9IGNvbnRleHQuZnVsbENvbW1hbmRzW2NvbnRleHQuZnVsbENvbW1hbmRzLmxlbmd0aCAtIDFdO1xuICAgICAgICBjb25zdCBwYXJzZU9wdGlvbnMgPSBmdWxsQ29tbWFuZFxuICAgICAgICAgICAgPyBjb21tYW5kJDEuY21kVG9QYXJzZU9wdGlvbnMoZnVsbENvbW1hbmQpXG4gICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICBhcnJheTogW10sXG4gICAgICAgICAgICAgICAgYWxpYXM6IHt9LFxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHt9LFxuICAgICAgICAgICAgICAgIGRlbWFuZDoge30sXG4gICAgICAgICAgICB9O1xuICAgICAgICBvYmplY3RLZXlzKHBhcnNlT3B0aW9ucykuZm9yRWFjaChwayA9PiB7XG4gICAgICAgICAgICBjb25zdCBwYXJzZU9wdGlvbiA9IHBhcnNlT3B0aW9uc1twa107XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwYXJzZU9wdGlvbikpIHtcbiAgICAgICAgICAgICAgICBpZiAocGFyc2VPcHRpb24uaW5kZXhPZihrZXkpICE9PSAtMSlcbiAgICAgICAgICAgICAgICAgICAgb3B0c1twa10gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHBhcnNlT3B0aW9uW2tleV0gJiYgIShwayBpbiBvcHRzKSlcbiAgICAgICAgICAgICAgICAgICAgb3B0c1twa10gPSBwYXJzZU9wdGlvbltrZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgc2VsZi5ncm91cChrZXksIHVzYWdlJDEuZ2V0UG9zaXRpb25hbEdyb3VwTmFtZSgpKTtcbiAgICAgICAgcmV0dXJuIHNlbGYub3B0aW9uKGtleSwgb3B0cyk7XG4gICAgfTtcbiAgICBzZWxmLmdyb3VwID0gZnVuY3Rpb24gZ3JvdXAob3B0cywgZ3JvdXBOYW1lKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxzdHJpbmd8YXJyYXk+IDxzdHJpbmc+JywgW29wdHMsIGdyb3VwTmFtZV0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBjb25zdCBleGlzdGluZyA9IHByZXNlcnZlZEdyb3Vwc1tncm91cE5hbWVdIHx8IGdyb3Vwc1tncm91cE5hbWVdO1xuICAgICAgICBpZiAocHJlc2VydmVkR3JvdXBzW2dyb3VwTmFtZV0pIHtcbiAgICAgICAgICAgIGRlbGV0ZSBwcmVzZXJ2ZWRHcm91cHNbZ3JvdXBOYW1lXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzZWVuID0ge307XG4gICAgICAgIGdyb3Vwc1tncm91cE5hbWVdID0gKGV4aXN0aW5nIHx8IFtdKS5jb25jYXQob3B0cykuZmlsdGVyKGtleSA9PiB7XG4gICAgICAgICAgICBpZiAoc2VlbltrZXldKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybiAoc2VlbltrZXldID0gdHJ1ZSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIHNlbGYuZ2V0R3JvdXBzID0gKCkgPT4gT2JqZWN0LmFzc2lnbih7fSwgZ3JvdXBzLCBwcmVzZXJ2ZWRHcm91cHMpO1xuICAgIHNlbGYuZW52ID0gZnVuY3Rpb24gKHByZWZpeCkge1xuICAgICAgICBhcmdzZXJ0KCdbc3RyaW5nfGJvb2xlYW5dJywgW3ByZWZpeF0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBpZiAocHJlZml4ID09PSBmYWxzZSlcbiAgICAgICAgICAgIGRlbGV0ZSBvcHRpb25zLmVudlByZWZpeDtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgb3B0aW9ucy5lbnZQcmVmaXggPSBwcmVmaXggfHwgJyc7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi53cmFwID0gZnVuY3Rpb24gKGNvbHMpIHtcbiAgICAgICAgYXJnc2VydCgnPG51bWJlcnxudWxsfHVuZGVmaW5lZD4nLCBbY29sc10sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICB1c2FnZSQxLndyYXAoY29scyk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgbGV0IHN0cmljdCA9IGZhbHNlO1xuICAgIHNlbGYuc3RyaWN0ID0gZnVuY3Rpb24gKGVuYWJsZWQpIHtcbiAgICAgICAgYXJnc2VydCgnW2Jvb2xlYW5dJywgW2VuYWJsZWRdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgc3RyaWN0ID0gZW5hYmxlZCAhPT0gZmFsc2U7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5nZXRTdHJpY3QgPSAoKSA9PiBzdHJpY3Q7XG4gICAgbGV0IHN0cmljdENvbW1hbmRzID0gZmFsc2U7XG4gICAgc2VsZi5zdHJpY3RDb21tYW5kcyA9IGZ1bmN0aW9uIChlbmFibGVkKSB7XG4gICAgICAgIGFyZ3NlcnQoJ1tib29sZWFuXScsIFtlbmFibGVkXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIHN0cmljdENvbW1hbmRzID0gZW5hYmxlZCAhPT0gZmFsc2U7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5nZXRTdHJpY3RDb21tYW5kcyA9ICgpID0+IHN0cmljdENvbW1hbmRzO1xuICAgIGxldCBzdHJpY3RPcHRpb25zID0gZmFsc2U7XG4gICAgc2VsZi5zdHJpY3RPcHRpb25zID0gZnVuY3Rpb24gKGVuYWJsZWQpIHtcbiAgICAgICAgYXJnc2VydCgnW2Jvb2xlYW5dJywgW2VuYWJsZWRdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgc3RyaWN0T3B0aW9ucyA9IGVuYWJsZWQgIT09IGZhbHNlO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIHNlbGYuZ2V0U3RyaWN0T3B0aW9ucyA9ICgpID0+IHN0cmljdE9wdGlvbnM7XG4gICAgbGV0IHBhcnNlckNvbmZpZyA9IHt9O1xuICAgIHNlbGYucGFyc2VyQ29uZmlndXJhdGlvbiA9IGZ1bmN0aW9uIHBhcnNlckNvbmZpZ3VyYXRpb24oY29uZmlnKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxvYmplY3Q+JywgW2NvbmZpZ10sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBwYXJzZXJDb25maWcgPSBjb25maWc7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5nZXRQYXJzZXJDb25maWd1cmF0aW9uID0gKCkgPT4gcGFyc2VyQ29uZmlnO1xuICAgIHNlbGYuc2hvd0hlbHAgPSBmdW5jdGlvbiAobGV2ZWwpIHtcbiAgICAgICAgYXJnc2VydCgnW3N0cmluZ3xmdW5jdGlvbl0nLCBbbGV2ZWxdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgaWYgKCFzZWxmLnBhcnNlZClcbiAgICAgICAgICAgIHNlbGYuX3BhcnNlQXJncyhwcm9jZXNzQXJncyk7XG4gICAgICAgIGlmIChjb21tYW5kJDEuaGFzRGVmYXVsdENvbW1hbmQoKSkge1xuICAgICAgICAgICAgY29udGV4dC5yZXNldHMrKztcbiAgICAgICAgICAgIGNvbW1hbmQkMS5ydW5EZWZhdWx0QnVpbGRlck9uKHNlbGYpO1xuICAgICAgICB9XG4gICAgICAgIHVzYWdlJDEuc2hvd0hlbHAobGV2ZWwpO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIGxldCB2ZXJzaW9uT3B0ID0gbnVsbDtcbiAgICBzZWxmLnZlcnNpb24gPSBmdW5jdGlvbiB2ZXJzaW9uKG9wdCwgbXNnLCB2ZXIpIHtcbiAgICAgICAgY29uc3QgZGVmYXVsdFZlcnNpb25PcHQgPSAndmVyc2lvbic7XG4gICAgICAgIGFyZ3NlcnQoJ1tib29sZWFufHN0cmluZ10gW3N0cmluZ10gW3N0cmluZ10nLCBbb3B0LCBtc2csIHZlcl0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBpZiAodmVyc2lvbk9wdCkge1xuICAgICAgICAgICAgZGVsZXRlRnJvbVBhcnNlckhpbnRPYmplY3QodmVyc2lvbk9wdCk7XG4gICAgICAgICAgICB1c2FnZSQxLnZlcnNpb24odW5kZWZpbmVkKTtcbiAgICAgICAgICAgIHZlcnNpb25PcHQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB2ZXIgPSBndWVzc1ZlcnNpb24oKTtcbiAgICAgICAgICAgIG9wdCA9IGRlZmF1bHRWZXJzaW9uT3B0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIGlmIChvcHQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2ZXIgPSBvcHQ7XG4gICAgICAgICAgICBvcHQgPSBkZWZhdWx0VmVyc2lvbk9wdDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICB2ZXIgPSBtc2c7XG4gICAgICAgICAgICBtc2cgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgdmVyc2lvbk9wdCA9IHR5cGVvZiBvcHQgPT09ICdzdHJpbmcnID8gb3B0IDogZGVmYXVsdFZlcnNpb25PcHQ7XG4gICAgICAgIG1zZyA9IG1zZyB8fCB1c2FnZSQxLmRlZmVyWTE4bkxvb2t1cCgnU2hvdyB2ZXJzaW9uIG51bWJlcicpO1xuICAgICAgICB1c2FnZSQxLnZlcnNpb24odmVyIHx8IHVuZGVmaW5lZCk7XG4gICAgICAgIHNlbGYuYm9vbGVhbih2ZXJzaW9uT3B0KTtcbiAgICAgICAgc2VsZi5kZXNjcmliZSh2ZXJzaW9uT3B0LCBtc2cpO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIGZ1bmN0aW9uIGd1ZXNzVmVyc2lvbigpIHtcbiAgICAgICAgY29uc3Qgb2JqID0gcGtnVXAoKTtcbiAgICAgICAgcmV0dXJuIG9iai52ZXJzaW9uIHx8ICd1bmtub3duJztcbiAgICB9XG4gICAgbGV0IGhlbHBPcHQgPSBudWxsO1xuICAgIHNlbGYuYWRkSGVscE9wdCA9IHNlbGYuaGVscCA9IGZ1bmN0aW9uIGFkZEhlbHBPcHQob3B0LCBtc2cpIHtcbiAgICAgICAgY29uc3QgZGVmYXVsdEhlbHBPcHQgPSAnaGVscCc7XG4gICAgICAgIGFyZ3NlcnQoJ1tzdHJpbmd8Ym9vbGVhbl0gW3N0cmluZ10nLCBbb3B0LCBtc2ddLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgaWYgKGhlbHBPcHQpIHtcbiAgICAgICAgICAgIGRlbGV0ZUZyb21QYXJzZXJIaW50T2JqZWN0KGhlbHBPcHQpO1xuICAgICAgICAgICAgaGVscE9wdCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIGlmIChvcHQgPT09IGZhbHNlKVxuICAgICAgICAgICAgICAgIHJldHVybiBzZWxmO1xuICAgICAgICB9XG4gICAgICAgIGhlbHBPcHQgPSB0eXBlb2Ygb3B0ID09PSAnc3RyaW5nJyA/IG9wdCA6IGRlZmF1bHRIZWxwT3B0O1xuICAgICAgICBzZWxmLmJvb2xlYW4oaGVscE9wdCk7XG4gICAgICAgIHNlbGYuZGVzY3JpYmUoaGVscE9wdCwgbXNnIHx8IHVzYWdlJDEuZGVmZXJZMThuTG9va3VwKCdTaG93IGhlbHAnKSk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgY29uc3QgZGVmYXVsdFNob3dIaWRkZW5PcHQgPSAnc2hvdy1oaWRkZW4nO1xuICAgIG9wdGlvbnMuc2hvd0hpZGRlbk9wdCA9IGRlZmF1bHRTaG93SGlkZGVuT3B0O1xuICAgIHNlbGYuYWRkU2hvd0hpZGRlbk9wdCA9IHNlbGYuc2hvd0hpZGRlbiA9IGZ1bmN0aW9uIGFkZFNob3dIaWRkZW5PcHQob3B0LCBtc2cpIHtcbiAgICAgICAgYXJnc2VydCgnW3N0cmluZ3xib29sZWFuXSBbc3RyaW5nXScsIFtvcHQsIG1zZ10sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgaWYgKG9wdCA9PT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2hvd0hpZGRlbk9wdCA9IHR5cGVvZiBvcHQgPT09ICdzdHJpbmcnID8gb3B0IDogZGVmYXVsdFNob3dIaWRkZW5PcHQ7XG4gICAgICAgIHNlbGYuYm9vbGVhbihzaG93SGlkZGVuT3B0KTtcbiAgICAgICAgc2VsZi5kZXNjcmliZShzaG93SGlkZGVuT3B0LCBtc2cgfHwgdXNhZ2UkMS5kZWZlclkxOG5Mb29rdXAoJ1Nob3cgaGlkZGVuIG9wdGlvbnMnKSk7XG4gICAgICAgIG9wdGlvbnMuc2hvd0hpZGRlbk9wdCA9IHNob3dIaWRkZW5PcHQ7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5oaWRlID0gZnVuY3Rpb24gaGlkZShrZXkpIHtcbiAgICAgICAgYXJnc2VydCgnPHN0cmluZz4nLCBba2V5XSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIG9wdGlvbnMuaGlkZGVuT3B0aW9ucy5wdXNoKGtleSk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5zaG93SGVscE9uRmFpbCA9IGZ1bmN0aW9uIHNob3dIZWxwT25GYWlsKGVuYWJsZWQsIG1lc3NhZ2UpIHtcbiAgICAgICAgYXJnc2VydCgnW2Jvb2xlYW58c3RyaW5nXSBbc3RyaW5nXScsIFtlbmFibGVkLCBtZXNzYWdlXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIHVzYWdlJDEuc2hvd0hlbHBPbkZhaWwoZW5hYmxlZCwgbWVzc2FnZSk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgbGV0IGV4aXRQcm9jZXNzID0gdHJ1ZTtcbiAgICBzZWxmLmV4aXRQcm9jZXNzID0gZnVuY3Rpb24gKGVuYWJsZWQgPSB0cnVlKSB7XG4gICAgICAgIGFyZ3NlcnQoJ1tib29sZWFuXScsIFtlbmFibGVkXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGV4aXRQcm9jZXNzID0gZW5hYmxlZDtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLmdldEV4aXRQcm9jZXNzID0gKCkgPT4gZXhpdFByb2Nlc3M7XG4gICAgc2VsZi5zaG93Q29tcGxldGlvblNjcmlwdCA9IGZ1bmN0aW9uICgkMCwgY21kKSB7XG4gICAgICAgIGFyZ3NlcnQoJ1tzdHJpbmddIFtzdHJpbmddJywgWyQwLCBjbWRdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgJDAgPSAkMCB8fCBzZWxmLiQwO1xuICAgICAgICBfbG9nZ2VyLmxvZyhjb21wbGV0aW9uJDEuZ2VuZXJhdGVDb21wbGV0aW9uU2NyaXB0KCQwLCBjbWQgfHwgY29tcGxldGlvbkNvbW1hbmQgfHwgJ2NvbXBsZXRpb24nKSk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5nZXRDb21wbGV0aW9uID0gZnVuY3Rpb24gKGFyZ3MsIGRvbmUpIHtcbiAgICAgICAgYXJnc2VydCgnPGFycmF5PiA8ZnVuY3Rpb24+JywgW2FyZ3MsIGRvbmVdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgY29tcGxldGlvbiQxLmdldENvbXBsZXRpb24oYXJncywgZG9uZSk7XG4gICAgfTtcbiAgICBzZWxmLmxvY2FsZSA9IGZ1bmN0aW9uIChsb2NhbGUpIHtcbiAgICAgICAgYXJnc2VydCgnW3N0cmluZ10nLCBbbG9jYWxlXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGlmICghbG9jYWxlKSB7XG4gICAgICAgICAgICBndWVzc0xvY2FsZSgpO1xuICAgICAgICAgICAgcmV0dXJuIHkxOG4uZ2V0TG9jYWxlKCk7XG4gICAgICAgIH1cbiAgICAgICAgZGV0ZWN0TG9jYWxlID0gZmFsc2U7XG4gICAgICAgIHkxOG4uc2V0TG9jYWxlKGxvY2FsZSk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi51cGRhdGVTdHJpbmdzID0gc2VsZi51cGRhdGVMb2NhbGUgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxvYmplY3Q+JywgW29ial0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBkZXRlY3RMb2NhbGUgPSBmYWxzZTtcbiAgICAgICAgeTE4bi51cGRhdGVMb2NhbGUob2JqKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBsZXQgZGV0ZWN0TG9jYWxlID0gdHJ1ZTtcbiAgICBzZWxmLmRldGVjdExvY2FsZSA9IGZ1bmN0aW9uIChkZXRlY3QpIHtcbiAgICAgICAgYXJnc2VydCgnPGJvb2xlYW4+JywgW2RldGVjdF0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBkZXRlY3RMb2NhbGUgPSBkZXRlY3Q7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5nZXREZXRlY3RMb2NhbGUgPSAoKSA9PiBkZXRlY3RMb2NhbGU7XG4gICAgY29uc3QgX2xvZ2dlciA9IHtcbiAgICAgICAgbG9nKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgIGlmICghc2VsZi5faGFzUGFyc2VDYWxsYmFjaygpKVxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKC4uLmFyZ3MpO1xuICAgICAgICAgICAgaGFzT3V0cHV0ID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChvdXRwdXQubGVuZ3RoKVxuICAgICAgICAgICAgICAgIG91dHB1dCArPSAnXFxuJztcbiAgICAgICAgICAgIG91dHB1dCArPSBhcmdzLmpvaW4oJyAnKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3IoLi4uYXJncykge1xuICAgICAgICAgICAgaWYgKCFzZWxmLl9oYXNQYXJzZUNhbGxiYWNrKCkpXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvciguLi5hcmdzKTtcbiAgICAgICAgICAgIGhhc091dHB1dCA9IHRydWU7XG4gICAgICAgICAgICBpZiAob3V0cHV0Lmxlbmd0aClcbiAgICAgICAgICAgICAgICBvdXRwdXQgKz0gJ1xcbic7XG4gICAgICAgICAgICBvdXRwdXQgKz0gYXJncy5qb2luKCcgJyk7XG4gICAgICAgIH0sXG4gICAgfTtcbiAgICBzZWxmLl9nZXRMb2dnZXJJbnN0YW5jZSA9ICgpID0+IF9sb2dnZXI7XG4gICAgc2VsZi5faGFzT3V0cHV0ID0gKCkgPT4gaGFzT3V0cHV0O1xuICAgIHNlbGYuX3NldEhhc091dHB1dCA9ICgpID0+IHtcbiAgICAgICAgaGFzT3V0cHV0ID0gdHJ1ZTtcbiAgICB9O1xuICAgIGxldCByZWNvbW1lbmRDb21tYW5kcztcbiAgICBzZWxmLnJlY29tbWVuZENvbW1hbmRzID0gZnVuY3Rpb24gKHJlY29tbWVuZCA9IHRydWUpIHtcbiAgICAgICAgYXJnc2VydCgnW2Jvb2xlYW5dJywgW3JlY29tbWVuZF0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICByZWNvbW1lbmRDb21tYW5kcyA9IHJlY29tbWVuZDtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLmdldFVzYWdlSW5zdGFuY2UgPSAoKSA9PiB1c2FnZSQxO1xuICAgIHNlbGYuZ2V0VmFsaWRhdGlvbkluc3RhbmNlID0gKCkgPT4gdmFsaWRhdGlvbiQxO1xuICAgIHNlbGYuZ2V0Q29tbWFuZEluc3RhbmNlID0gKCkgPT4gY29tbWFuZCQxO1xuICAgIHNlbGYudGVybWluYWxXaWR0aCA9ICgpID0+IHtcbiAgICAgICAgYXJnc2VydChbXSwgMCk7XG4gICAgICAgIHJldHVybiBzaGltJDEucHJvY2Vzcy5zdGRDb2x1bW5zO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHNlbGYsICdhcmd2Jywge1xuICAgICAgICBnZXQ6ICgpID0+IHNlbGYuX3BhcnNlQXJncyhwcm9jZXNzQXJncyksXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgfSk7XG4gICAgc2VsZi5fcGFyc2VBcmdzID0gZnVuY3Rpb24gcGFyc2VBcmdzKGFyZ3MsIHNob3J0Q2lyY3VpdCwgX2NhbGxlZEZyb21Db21tYW5kLCBjb21tYW5kSW5kZXgpIHtcbiAgICAgICAgbGV0IHNraXBWYWxpZGF0aW9uID0gISFfY2FsbGVkRnJvbUNvbW1hbmQ7XG4gICAgICAgIGFyZ3MgPSBhcmdzIHx8IHByb2Nlc3NBcmdzO1xuICAgICAgICBvcHRpb25zLl9fID0geTE4bi5fXztcbiAgICAgICAgb3B0aW9ucy5jb25maWd1cmF0aW9uID0gc2VsZi5nZXRQYXJzZXJDb25maWd1cmF0aW9uKCk7XG4gICAgICAgIGNvbnN0IHBvcHVsYXRlRG91YmxlRGFzaCA9ICEhb3B0aW9ucy5jb25maWd1cmF0aW9uWydwb3B1bGF0ZS0tJ107XG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuY29uZmlndXJhdGlvbiwge1xuICAgICAgICAgICAgJ3BvcHVsYXRlLS0nOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gc2hpbSQxLlBhcnNlci5kZXRhaWxlZChhcmdzLCBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLCB7XG4gICAgICAgICAgICBjb25maWd1cmF0aW9uOiBPYmplY3QuYXNzaWduKHsgJ3BhcnNlLXBvc2l0aW9uYWwtbnVtYmVycyc6IGZhbHNlIH0sIGNvbmZpZyksXG4gICAgICAgIH0pKTtcbiAgICAgICAgbGV0IGFyZ3YgPSBwYXJzZWQuYXJndjtcbiAgICAgICAgaWYgKHBhcnNlQ29udGV4dClcbiAgICAgICAgICAgIGFyZ3YgPSBPYmplY3QuYXNzaWduKHt9LCBhcmd2LCBwYXJzZUNvbnRleHQpO1xuICAgICAgICBjb25zdCBhbGlhc2VzID0gcGFyc2VkLmFsaWFzZXM7XG4gICAgICAgIGFyZ3YuJDAgPSBzZWxmLiQwO1xuICAgICAgICBzZWxmLnBhcnNlZCA9IHBhcnNlZDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGd1ZXNzTG9jYWxlKCk7XG4gICAgICAgICAgICBpZiAoc2hvcnRDaXJjdWl0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3Bvc3RQcm9jZXNzKGFyZ3YsIHBvcHVsYXRlRG91YmxlRGFzaCwgX2NhbGxlZEZyb21Db21tYW5kKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChoZWxwT3B0KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaGVscENtZHMgPSBbaGVscE9wdF1cbiAgICAgICAgICAgICAgICAgICAgLmNvbmNhdChhbGlhc2VzW2hlbHBPcHRdIHx8IFtdKVxuICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKGsgPT4gay5sZW5ndGggPiAxKTtcbiAgICAgICAgICAgICAgICBpZiAofmhlbHBDbWRzLmluZGV4T2YoJycgKyBhcmd2Ll9bYXJndi5fLmxlbmd0aCAtIDFdKSkge1xuICAgICAgICAgICAgICAgICAgICBhcmd2Ll8ucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3ZbaGVscE9wdF0gPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZXJLZXlzID0gY29tbWFuZCQxLmdldENvbW1hbmRzKCk7XG4gICAgICAgICAgICBjb25zdCByZXF1ZXN0Q29tcGxldGlvbnMgPSBjb21wbGV0aW9uJDEuY29tcGxldGlvbktleSBpbiBhcmd2O1xuICAgICAgICAgICAgY29uc3Qgc2tpcFJlY29tbWVuZGF0aW9uID0gYXJndltoZWxwT3B0XSB8fCByZXF1ZXN0Q29tcGxldGlvbnM7XG4gICAgICAgICAgICBjb25zdCBza2lwRGVmYXVsdENvbW1hbmQgPSBza2lwUmVjb21tZW5kYXRpb24gJiZcbiAgICAgICAgICAgICAgICAoaGFuZGxlcktleXMubGVuZ3RoID4gMSB8fCBoYW5kbGVyS2V5c1swXSAhPT0gJyQwJyk7XG4gICAgICAgICAgICBpZiAoYXJndi5fLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGlmIChoYW5kbGVyS2V5cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGZpcnN0VW5rbm93bkNvbW1hbmQ7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSBjb21tYW5kSW5kZXggfHwgMCwgY21kOyBhcmd2Ll9baV0gIT09IHVuZGVmaW5lZDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbWQgPSBTdHJpbmcoYXJndi5fW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh+aGFuZGxlcktleXMuaW5kZXhPZihjbWQpICYmIGNtZCAhPT0gY29tcGxldGlvbkNvbW1hbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbm5lckFyZ3YgPSBjb21tYW5kJDEucnVuQ29tbWFuZChjbWQsIHNlbGYsIHBhcnNlZCwgaSArIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9wb3N0UHJvY2Vzcyhpbm5lckFyZ3YsIHBvcHVsYXRlRG91YmxlRGFzaCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICghZmlyc3RVbmtub3duQ29tbWFuZCAmJiBjbWQgIT09IGNvbXBsZXRpb25Db21tYW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RVbmtub3duQ29tbWFuZCA9IGNtZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoY29tbWFuZCQxLmhhc0RlZmF1bHRDb21tYW5kKCkgJiYgIXNraXBEZWZhdWx0Q29tbWFuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5uZXJBcmd2ID0gY29tbWFuZCQxLnJ1bkNvbW1hbmQobnVsbCwgc2VsZiwgcGFyc2VkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9wb3N0UHJvY2Vzcyhpbm5lckFyZ3YsIHBvcHVsYXRlRG91YmxlRGFzaCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlY29tbWVuZENvbW1hbmRzICYmIGZpcnN0VW5rbm93bkNvbW1hbmQgJiYgIXNraXBSZWNvbW1lbmRhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbiQxLnJlY29tbWVuZENvbW1hbmRzKGZpcnN0VW5rbm93bkNvbW1hbmQsIGhhbmRsZXJLZXlzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoY29tcGxldGlvbkNvbW1hbmQgJiZcbiAgICAgICAgICAgICAgICAgICAgfmFyZ3YuXy5pbmRleE9mKGNvbXBsZXRpb25Db21tYW5kKSAmJlxuICAgICAgICAgICAgICAgICAgICAhcmVxdWVzdENvbXBsZXRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChleGl0UHJvY2VzcylcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEJsb2NraW5nKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICBzZWxmLnNob3dDb21wbGV0aW9uU2NyaXB0KCk7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuZXhpdCgwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjb21tYW5kJDEuaGFzRGVmYXVsdENvbW1hbmQoKSAmJiAhc2tpcERlZmF1bHRDb21tYW5kKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5uZXJBcmd2ID0gY29tbWFuZCQxLnJ1bkNvbW1hbmQobnVsbCwgc2VsZiwgcGFyc2VkKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fcG9zdFByb2Nlc3MoaW5uZXJBcmd2LCBwb3B1bGF0ZURvdWJsZURhc2gpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlcXVlc3RDb21wbGV0aW9ucykge1xuICAgICAgICAgICAgICAgIGlmIChleGl0UHJvY2VzcylcbiAgICAgICAgICAgICAgICAgICAgc2V0QmxvY2tpbmcodHJ1ZSk7XG4gICAgICAgICAgICAgICAgYXJncyA9IFtdLmNvbmNhdChhcmdzKTtcbiAgICAgICAgICAgICAgICBjb25zdCBjb21wbGV0aW9uQXJncyA9IGFyZ3Muc2xpY2UoYXJncy5pbmRleE9mKGAtLSR7Y29tcGxldGlvbiQxLmNvbXBsZXRpb25LZXl9YCkgKyAxKTtcbiAgICAgICAgICAgICAgICBjb21wbGV0aW9uJDEuZ2V0Q29tcGxldGlvbihjb21wbGV0aW9uQXJncywgY29tcGxldGlvbnMgPT4ge1xuICAgICAgICAgICAgICAgICAgICAoY29tcGxldGlvbnMgfHwgW10pLmZvckVhY2goY29tcGxldGlvbiA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfbG9nZ2VyLmxvZyhjb21wbGV0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuZXhpdCgwKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fcG9zdFByb2Nlc3MoYXJndiwgIXBvcHVsYXRlRG91YmxlRGFzaCwgX2NhbGxlZEZyb21Db21tYW5kKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghaGFzT3V0cHV0KSB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmtleXMoYXJndikuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSBoZWxwT3B0ICYmIGFyZ3Zba2V5XSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4aXRQcm9jZXNzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEJsb2NraW5nKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2tpcFZhbGlkYXRpb24gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zaG93SGVscCgnbG9nJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmV4aXQoMCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoa2V5ID09PSB2ZXJzaW9uT3B0ICYmIGFyZ3Zba2V5XSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4aXRQcm9jZXNzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEJsb2NraW5nKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2tpcFZhbGlkYXRpb24gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdXNhZ2UkMS5zaG93VmVyc2lvbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5leGl0KDApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXNraXBWYWxpZGF0aW9uICYmIG9wdGlvbnMuc2tpcFZhbGlkYXRpb24ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHNraXBWYWxpZGF0aW9uID0gT2JqZWN0LmtleXMoYXJndikuc29tZShrZXkgPT4gb3B0aW9ucy5za2lwVmFsaWRhdGlvbi5pbmRleE9mKGtleSkgPj0gMCAmJiBhcmd2W2tleV0gPT09IHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFza2lwVmFsaWRhdGlvbikge1xuICAgICAgICAgICAgICAgIGlmIChwYXJzZWQuZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBZRXJyb3IocGFyc2VkLmVycm9yLm1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgIGlmICghcmVxdWVzdENvbXBsZXRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuX3J1blZhbGlkYXRpb24oYXJndiwgYWxpYXNlcywge30sIHBhcnNlZC5lcnJvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBZRXJyb3IpXG4gICAgICAgICAgICAgICAgdXNhZ2UkMS5mYWlsKGVyci5tZXNzYWdlLCBlcnIpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2VsZi5fcG9zdFByb2Nlc3MoYXJndiwgcG9wdWxhdGVEb3VibGVEYXNoLCBfY2FsbGVkRnJvbUNvbW1hbmQpO1xuICAgIH07XG4gICAgc2VsZi5fcG9zdFByb2Nlc3MgPSBmdW5jdGlvbiAoYXJndiwgcG9wdWxhdGVEb3VibGVEYXNoLCBjYWxsZWRGcm9tQ29tbWFuZCA9IGZhbHNlKSB7XG4gICAgICAgIGlmIChpc1Byb21pc2UoYXJndikpXG4gICAgICAgICAgICByZXR1cm4gYXJndjtcbiAgICAgICAgaWYgKGNhbGxlZEZyb21Db21tYW5kKVxuICAgICAgICAgICAgcmV0dXJuIGFyZ3Y7XG4gICAgICAgIGlmICghcG9wdWxhdGVEb3VibGVEYXNoKSB7XG4gICAgICAgICAgICBhcmd2ID0gc2VsZi5fY29weURvdWJsZURhc2goYXJndik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFyc2VQb3NpdGlvbmFsTnVtYmVycyA9IHNlbGYuZ2V0UGFyc2VyQ29uZmlndXJhdGlvbigpWydwYXJzZS1wb3NpdGlvbmFsLW51bWJlcnMnXSB8fFxuICAgICAgICAgICAgc2VsZi5nZXRQYXJzZXJDb25maWd1cmF0aW9uKClbJ3BhcnNlLXBvc2l0aW9uYWwtbnVtYmVycyddID09PSB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChwYXJzZVBvc2l0aW9uYWxOdW1iZXJzKSB7XG4gICAgICAgICAgICBhcmd2ID0gc2VsZi5fcGFyc2VQb3NpdGlvbmFsTnVtYmVycyhhcmd2KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXJndjtcbiAgICB9O1xuICAgIHNlbGYuX2NvcHlEb3VibGVEYXNoID0gZnVuY3Rpb24gKGFyZ3YpIHtcbiAgICAgICAgaWYgKCFhcmd2Ll8gfHwgIWFyZ3ZbJy0tJ10pXG4gICAgICAgICAgICByZXR1cm4gYXJndjtcbiAgICAgICAgYXJndi5fLnB1c2guYXBwbHkoYXJndi5fLCBhcmd2WyctLSddKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGRlbGV0ZSBhcmd2WyctLSddO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChfZXJyKSB7IH1cbiAgICAgICAgcmV0dXJuIGFyZ3Y7XG4gICAgfTtcbiAgICBzZWxmLl9wYXJzZVBvc2l0aW9uYWxOdW1iZXJzID0gZnVuY3Rpb24gKGFyZ3YpIHtcbiAgICAgICAgY29uc3QgYXJncyA9IGFyZ3ZbJy0tJ10gPyBhcmd2WyctLSddIDogYXJndi5fO1xuICAgICAgICBmb3IgKGxldCBpID0gMCwgYXJnOyAoYXJnID0gYXJnc1tpXSkgIT09IHVuZGVmaW5lZDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoc2hpbSQxLlBhcnNlci5sb29rc0xpa2VOdW1iZXIoYXJnKSAmJlxuICAgICAgICAgICAgICAgIE51bWJlci5pc1NhZmVJbnRlZ2VyKE1hdGguZmxvb3IocGFyc2VGbG9hdChgJHthcmd9YCkpKSkge1xuICAgICAgICAgICAgICAgIGFyZ3NbaV0gPSBOdW1iZXIoYXJnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXJndjtcbiAgICB9O1xuICAgIHNlbGYuX3J1blZhbGlkYXRpb24gPSBmdW5jdGlvbiBydW5WYWxpZGF0aW9uKGFyZ3YsIGFsaWFzZXMsIHBvc2l0aW9uYWxNYXAsIHBhcnNlRXJyb3JzLCBpc0RlZmF1bHRDb21tYW5kID0gZmFsc2UpIHtcbiAgICAgICAgaWYgKHBhcnNlRXJyb3JzKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFlFcnJvcihwYXJzZUVycm9ycy5tZXNzYWdlKTtcbiAgICAgICAgdmFsaWRhdGlvbiQxLm5vbk9wdGlvbkNvdW50KGFyZ3YpO1xuICAgICAgICB2YWxpZGF0aW9uJDEucmVxdWlyZWRBcmd1bWVudHMoYXJndik7XG4gICAgICAgIGxldCBmYWlsZWRTdHJpY3RDb21tYW5kcyA9IGZhbHNlO1xuICAgICAgICBpZiAoc3RyaWN0Q29tbWFuZHMpIHtcbiAgICAgICAgICAgIGZhaWxlZFN0cmljdENvbW1hbmRzID0gdmFsaWRhdGlvbiQxLnVua25vd25Db21tYW5kcyhhcmd2KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RyaWN0ICYmICFmYWlsZWRTdHJpY3RDb21tYW5kcykge1xuICAgICAgICAgICAgdmFsaWRhdGlvbiQxLnVua25vd25Bcmd1bWVudHMoYXJndiwgYWxpYXNlcywgcG9zaXRpb25hbE1hcCwgaXNEZWZhdWx0Q29tbWFuZCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoc3RyaWN0T3B0aW9ucykge1xuICAgICAgICAgICAgdmFsaWRhdGlvbiQxLnVua25vd25Bcmd1bWVudHMoYXJndiwgYWxpYXNlcywge30sIGZhbHNlLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFsaWRhdGlvbiQxLmN1c3RvbUNoZWNrcyhhcmd2LCBhbGlhc2VzKTtcbiAgICAgICAgdmFsaWRhdGlvbiQxLmxpbWl0ZWRDaG9pY2VzKGFyZ3YpO1xuICAgICAgICB2YWxpZGF0aW9uJDEuaW1wbGljYXRpb25zKGFyZ3YpO1xuICAgICAgICB2YWxpZGF0aW9uJDEuY29uZmxpY3RpbmcoYXJndik7XG4gICAgfTtcbiAgICBmdW5jdGlvbiBndWVzc0xvY2FsZSgpIHtcbiAgICAgICAgaWYgKCFkZXRlY3RMb2NhbGUpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IGxvY2FsZSA9IHNoaW0kMS5nZXRFbnYoJ0xDX0FMTCcpIHx8XG4gICAgICAgICAgICBzaGltJDEuZ2V0RW52KCdMQ19NRVNTQUdFUycpIHx8XG4gICAgICAgICAgICBzaGltJDEuZ2V0RW52KCdMQU5HJykgfHxcbiAgICAgICAgICAgIHNoaW0kMS5nZXRFbnYoJ0xBTkdVQUdFJykgfHxcbiAgICAgICAgICAgICdlbl9VUyc7XG4gICAgICAgIHNlbGYubG9jYWxlKGxvY2FsZS5yZXBsYWNlKC9bLjpdLiovLCAnJykpO1xuICAgIH1cbiAgICBzZWxmLmhlbHAoKTtcbiAgICBzZWxmLnZlcnNpb24oKTtcbiAgICByZXR1cm4gc2VsZjtcbn1cbmNvbnN0IHJlYmFzZSA9IChiYXNlLCBkaXIpID0+IHNoaW0kMS5wYXRoLnJlbGF0aXZlKGJhc2UsIGRpcik7XG5mdW5jdGlvbiBpc1lhcmdzSW5zdGFuY2UoeSkge1xuICAgIHJldHVybiAhIXkgJiYgdHlwZW9mIHkuX3BhcnNlQXJncyA9PT0gJ2Z1bmN0aW9uJztcbn1cblxudmFyIF9hLCBfYjtcbmNvbnN0IHsgcmVhZEZpbGVTeW5jIH0gPSByZXF1aXJlKCdmcycpO1xuY29uc3QgeyBpbnNwZWN0IH0gPSByZXF1aXJlKCd1dGlsJyk7XG5jb25zdCB7IHJlc29sdmUgfSA9IHJlcXVpcmUoJ3BhdGgnKTtcbmNvbnN0IHkxOG4gPSByZXF1aXJlKCd5MThuJyk7XG5jb25zdCBQYXJzZXIgPSByZXF1aXJlKCd5YXJncy1wYXJzZXInKTtcbnZhciBjanNQbGF0Zm9ybVNoaW0gPSB7XG4gICAgYXNzZXJ0OiB7XG4gICAgICAgIG5vdFN0cmljdEVxdWFsOiBhc3NlcnQubm90U3RyaWN0RXF1YWwsXG4gICAgICAgIHN0cmljdEVxdWFsOiBhc3NlcnQuc3RyaWN0RXF1YWwsXG4gICAgfSxcbiAgICBjbGl1aTogcmVxdWlyZSgnY2xpdWknKSxcbiAgICBmaW5kVXA6IHJlcXVpcmUoJ2VzY2FsYWRlL3N5bmMnKSxcbiAgICBnZXRFbnY6IChrZXkpID0+IHtcbiAgICAgICAgcmV0dXJuIHByb2Nlc3MuZW52W2tleV07XG4gICAgfSxcbiAgICBnZXRDYWxsZXJGaWxlOiByZXF1aXJlKCdnZXQtY2FsbGVyLWZpbGUnKSxcbiAgICBnZXRQcm9jZXNzQXJndkJpbjogZ2V0UHJvY2Vzc0FyZ3ZCaW4sXG4gICAgaW5zcGVjdCxcbiAgICBtYWluRmlsZW5hbWU6IChfYiA9IChfYSA9IHJlcXVpcmUgPT09IG51bGwgfHwgcmVxdWlyZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogcmVxdWlyZS5tYWluKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZmlsZW5hbWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IHByb2Nlc3MuY3dkKCksXG4gICAgUGFyc2VyLFxuICAgIHBhdGg6IHJlcXVpcmUoJ3BhdGgnKSxcbiAgICBwcm9jZXNzOiB7XG4gICAgICAgIGFyZ3Y6ICgpID0+IHByb2Nlc3MuYXJndixcbiAgICAgICAgY3dkOiBwcm9jZXNzLmN3ZCxcbiAgICAgICAgZXhlY1BhdGg6ICgpID0+IHByb2Nlc3MuZXhlY1BhdGgsXG4gICAgICAgIGV4aXQ6IChjb2RlKSA9PiB7XG4gICAgICAgICAgICBwcm9jZXNzLmV4aXQoY29kZSk7XG4gICAgICAgIH0sXG4gICAgICAgIG5leHRUaWNrOiBwcm9jZXNzLm5leHRUaWNrLFxuICAgICAgICBzdGRDb2x1bW5zOiB0eXBlb2YgcHJvY2Vzcy5zdGRvdXQuY29sdW1ucyAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAgICAgID8gcHJvY2Vzcy5zdGRvdXQuY29sdW1uc1xuICAgICAgICAgICAgOiBudWxsLFxuICAgIH0sXG4gICAgcmVhZEZpbGVTeW5jLFxuICAgIHJlcXVpcmU6IHJlcXVpcmUsXG4gICAgcmVxdWlyZURpcmVjdG9yeTogcmVxdWlyZSgncmVxdWlyZS1kaXJlY3RvcnknKSxcbiAgICBzdHJpbmdXaWR0aDogcmVxdWlyZSgnc3RyaW5nLXdpZHRoJyksXG4gICAgeTE4bjogeTE4bih7XG4gICAgICAgIGRpcmVjdG9yeTogcmVzb2x2ZShfX2Rpcm5hbWUsICcuLi9sb2NhbGVzJyksXG4gICAgICAgIHVwZGF0ZUZpbGVzOiBmYWxzZSxcbiAgICB9KSxcbn07XG5cbmNvbnN0IG1pbk5vZGVWZXJzaW9uID0gcHJvY2VzcyAmJiBwcm9jZXNzLmVudiAmJiBwcm9jZXNzLmVudi5ZQVJHU19NSU5fTk9ERV9WRVJTSU9OXG4gICAgPyBOdW1iZXIocHJvY2Vzcy5lbnYuWUFSR1NfTUlOX05PREVfVkVSU0lPTilcbiAgICA6IDEwO1xuaWYgKHByb2Nlc3MgJiYgcHJvY2Vzcy52ZXJzaW9uKSB7XG4gICAgY29uc3QgbWFqb3IgPSBOdW1iZXIocHJvY2Vzcy52ZXJzaW9uLm1hdGNoKC92KFteLl0rKS8pWzFdKTtcbiAgICBpZiAobWFqb3IgPCBtaW5Ob2RlVmVyc2lvbikge1xuICAgICAgICB0aHJvdyBFcnJvcihgeWFyZ3Mgc3VwcG9ydHMgYSBtaW5pbXVtIE5vZGUuanMgdmVyc2lvbiBvZiAke21pbk5vZGVWZXJzaW9ufS4gUmVhZCBvdXIgdmVyc2lvbiBzdXBwb3J0IHBvbGljeTogaHR0cHM6Ly9naXRodWIuY29tL3lhcmdzL3lhcmdzI3N1cHBvcnRlZC1ub2RlanMtdmVyc2lvbnNgKTtcbiAgICB9XG59XG5jb25zdCBQYXJzZXIkMSA9IHJlcXVpcmUoJ3lhcmdzLXBhcnNlcicpO1xuY29uc3QgWWFyZ3MkMSA9IFlhcmdzV2l0aFNoaW0oY2pzUGxhdGZvcm1TaGltKTtcbnZhciBjanMgPSB7XG4gICAgYXBwbHlFeHRlbmRzLFxuICAgIGNqc1BsYXRmb3JtU2hpbSxcbiAgICBZYXJnczogWWFyZ3MkMSxcbiAgICBhcmdzZXJ0LFxuICAgIGdsb2JhbE1pZGRsZXdhcmVGYWN0b3J5LFxuICAgIGlzUHJvbWlzZSxcbiAgICBvYmpGaWx0ZXIsXG4gICAgcGFyc2VDb21tYW5kLFxuICAgIFBhcnNlcjogUGFyc2VyJDEsXG4gICAgcHJvY2Vzc0FyZ3YsXG4gICAgcmViYXNlLFxuICAgIFlFcnJvcixcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gY2pzO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIGNsYXNzaWMgc2luZ2xldG9uIHlhcmdzIEFQSSwgdG8gdXNlIHlhcmdzXG4vLyB3aXRob3V0IHJ1bm5pbmcgYXMgYSBzaW5nbGV0b24gZG86XG4vLyByZXF1aXJlKCd5YXJncy95YXJncycpKHByb2Nlc3MuYXJndi5zbGljZSgyKSlcbmNvbnN0IHtZYXJncywgcHJvY2Vzc0FyZ3Z9ID0gcmVxdWlyZSgnLi9idWlsZC9pbmRleC5janMnKTtcblxuQXJndihwcm9jZXNzQXJndi5oaWRlQmluKHByb2Nlc3MuYXJndikpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEFyZ3Y7XG5cbmZ1bmN0aW9uIEFyZ3YocHJvY2Vzc0FyZ3MsIGN3ZCkge1xuICBjb25zdCBhcmd2ID0gWWFyZ3MocHJvY2Vzc0FyZ3MsIGN3ZCwgcmVxdWlyZSk7XG4gIHNpbmdsZXRvbmlmeShhcmd2KTtcbiAgcmV0dXJuIGFyZ3Y7XG59XG5cbi8qICBIYWNrIGFuIGluc3RhbmNlIG9mIEFyZ3Ygd2l0aCBwcm9jZXNzLmFyZ3YgaW50byBBcmd2XG4gICAgc28gcGVvcGxlIGNhbiBkb1xuICAgIHJlcXVpcmUoJ3lhcmdzJykoWyctLWJlZWJsZT0xJywnLXonLCd6aXp6bGUnXSkuYXJndlxuICAgIHRvIHBhcnNlIGEgbGlzdCBvZiBhcmdzIGFuZFxuICAgIHJlcXVpcmUoJ3lhcmdzJykuYXJndlxuICAgIHRvIGdldCBhIHBhcnNlZCB2ZXJzaW9uIG9mIHByb2Nlc3MuYXJndi5cbiovXG5mdW5jdGlvbiBzaW5nbGV0b25pZnkoaW5zdCkge1xuICBPYmplY3Qua2V5cyhpbnN0KS5mb3JFYWNoKGtleSA9PiB7XG4gICAgaWYgKGtleSA9PT0gJ2FyZ3YnKSB7XG4gICAgICBBcmd2Ll9fZGVmaW5lR2V0dGVyX18oa2V5LCBpbnN0Ll9fbG9va3VwR2V0dGVyX18oa2V5KSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgaW5zdFtrZXldID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBBcmd2W2tleV0gPSBpbnN0W2tleV0uYmluZChpbnN0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgQXJndi5fX2RlZmluZUdldHRlcl9fKCckMCcsICgpID0+IHtcbiAgICAgICAgcmV0dXJuIGluc3QuJDA7XG4gICAgICB9KTtcbiAgICAgIEFyZ3YuX19kZWZpbmVHZXR0ZXJfXygncGFyc2VkJywgKCkgPT4ge1xuICAgICAgICByZXR1cm4gaW5zdC5wYXJzZWQ7XG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xufVxuIiwgIi8vIEV4ZXJjaXNlIGFsbCBpbnRlZyBzdGFja3MgYW5kIGlmIHRoZXkgZGVwbG95LCB1cGRhdGUgdGhlIGV4cGVjdGVkIHN5bnRoIGZpbGVzXG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0ICogYXMgY2hhbGsgZnJvbSAnY2hhbGsnO1xuaW1wb3J0ICogYXMgd29ya2VycG9vbCBmcm9tICd3b3JrZXJwb29sJztcbmltcG9ydCAqIGFzIGxvZ2dlciBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgeyBJbnRlZ3JhdGlvblRlc3RzLCBJbnRlZ1Rlc3QsIEludGVnVGVzdEluZm8gfSBmcm9tICcuL3J1bm5lci9pbnRlZ3JhdGlvbi10ZXN0cyc7XG5pbXBvcnQgeyBydW5TbmFwc2hvdFRlc3RzLCBydW5JbnRlZ3JhdGlvblRlc3RzLCBJbnRlZ1J1bm5lck1ldHJpY3MsIEludGVnVGVzdFdvcmtlckNvbmZpZywgRGVzdHJ1Y3RpdmVDaGFuZ2UgfSBmcm9tICcuL3dvcmtlcnMnO1xuaW1wb3J0IHsgd2F0Y2hJbnRlZ3JhdGlvblRlc3QgfSBmcm9tICcuL3dvcmtlcnMvaW50ZWctd2F0Y2gtd29ya2VyJztcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3lhcmdzL3lhcmdzL2lzc3Vlcy8xOTI5XG4vLyBodHRwczovL2dpdGh1Yi5jb20vZXZhbncvZXNidWlsZC9pc3N1ZXMvMTQ5MlxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHNcbmNvbnN0IHlhcmdzID0gcmVxdWlyZSgneWFyZ3MnKTtcblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQ2xpQXJncyhhcmdzOiBzdHJpbmdbXSA9IFtdKSB7XG4gIGNvbnN0IGFyZ3YgPSB5YXJnc1xuICAgIC51c2FnZSgnVXNhZ2U6IGludGVnLXJ1bm5lciBbVEVTVC4uLl0nKVxuICAgIC5vcHRpb24oJ2NvbmZpZycsIHtcbiAgICAgIGNvbmZpZzogdHJ1ZSxcbiAgICAgIGNvbmZpZ1BhcnNlcjogY29uZmlnRnJvbUZpbGUsXG4gICAgICBkZWZhdWx0OiAnaW50ZWcuY29uZmlnLmpzb24nLFxuICAgICAgZGVzYzogJ0xvYWQgb3B0aW9ucyBmcm9tIGEgSlNPTiBjb25maWcgZmlsZS4gT3B0aW9ucyBwcm92aWRlZCBhcyBDTEkgYXJndW1lbnRzIHRha2UgcHJlY2VkZW50LicsXG4gICAgfSlcbiAgICAub3B0aW9uKCd3YXRjaCcsIHsgdHlwZTogJ2Jvb2xlYW4nLCBkZWZhdWx0OiBmYWxzZSwgZGVzYzogJ1BlcmZvcm0gaW50ZWcgdGVzdHMgaW4gd2F0Y2ggbW9kZScgfSlcbiAgICAub3B0aW9uKCdsaXN0JywgeyB0eXBlOiAnYm9vbGVhbicsIGRlZmF1bHQ6IGZhbHNlLCBkZXNjOiAnTGlzdCB0ZXN0cyBpbnN0ZWFkIG9mIHJ1bm5pbmcgdGhlbScgfSlcbiAgICAub3B0aW9uKCdjbGVhbicsIHsgdHlwZTogJ2Jvb2xlYW4nLCBkZWZhdWx0OiB0cnVlLCBkZXNjOiAnU2tpcHMgc3RhY2sgY2xlYW4gdXAgYWZ0ZXIgdGVzdCBpcyBjb21wbGV0ZWQgKHVzZSAtLW5vLWNsZWFuIHRvIG5lZ2F0ZSknIH0pXG4gICAgLm9wdGlvbigndmVyYm9zZScsIHsgdHlwZTogJ2Jvb2xlYW4nLCBkZWZhdWx0OiBmYWxzZSwgYWxpYXM6ICd2JywgY291bnQ6IHRydWUsIGRlc2M6ICdWZXJib3NlIGxvZ3MgYW5kIG1ldHJpY3Mgb24gaW50ZWdyYXRpb24gdGVzdHMgZHVyYXRpb25zIChzcGVjaWZ5IG11bHRpcGxlIHRpbWVzIHRvIGluY3JlYXNlIHZlcmJvc2l0eSknIH0pXG4gICAgLm9wdGlvbignZHJ5LXJ1bicsIHsgdHlwZTogJ2Jvb2xlYW4nLCBkZWZhdWx0OiBmYWxzZSwgZGVzYzogJ2RvIG5vdCBhY3R1YWxseSBkZXBsb3kgdGhlIHN0YWNrLiBqdXN0IHVwZGF0ZSB0aGUgc25hcHNob3QgKG5vdCByZWNvbW1lbmRlZCEpJyB9KVxuICAgIC5vcHRpb24oJ3VwZGF0ZS1vbi1mYWlsZWQnLCB7IHR5cGU6ICdib29sZWFuJywgZGVmYXVsdDogZmFsc2UsIGRlc2M6ICdyZXJ1biBpbnRlZ3JhdGlvbiB0ZXN0cyBhbmQgdXBkYXRlIHNuYXBzaG90cyBmb3IgZmFpbGVkIHRlc3RzLicgfSlcbiAgICAub3B0aW9uKCdmb3JjZScsIHsgdHlwZTogJ2Jvb2xlYW4nLCBkZWZhdWx0OiBmYWxzZSwgZGVzYzogJ1JlcnVuIGFsbCBpbnRlZ3JhdGlvbiB0ZXN0cyBldmVuIGlmIHRlc3RzIGFyZSBwYXNzaW5nJyB9KVxuICAgIC5vcHRpb24oJ3BhcmFsbGVsLXJlZ2lvbnMnLCB7IHR5cGU6ICdhcnJheScsIGRlc2M6ICdUZXN0cyBhcmUgcnVuIGluIHBhcmFsbGVsIGFjcm9zcyB0aGVzZSByZWdpb25zLiBUbyBwcmV2ZW50IHRlc3RzIGZyb20gcnVubmluZyBpbiBwYXJhbGxlbCwgcHJvdmlkZSBvbmx5IGEgc2luZ2xlIHJlZ2lvbicsIGRlZmF1bHQ6IFtdIH0pXG4gICAgLm9wdGlvbnMoJ2RpcmVjdG9yeScsIHsgdHlwZTogJ3N0cmluZycsIGRlZmF1bHQ6ICd0ZXN0JywgZGVzYzogJ3N0YXJ0aW5nIGRpcmVjdG9yeSB0byBkaXNjb3ZlciBpbnRlZ3JhdGlvbiB0ZXN0cy4gVGVzdHMgd2lsbCBiZSBkaXNjb3ZlcmVkIHJlY3Vyc2l2ZWx5IGZyb20gdGhpcyBkaXJlY3RvcnknIH0pXG4gICAgLm9wdGlvbnMoJ3Byb2ZpbGVzJywgeyB0eXBlOiAnYXJyYXknLCBkZXNjOiAnbGlzdCBvZiBBV1MgcHJvZmlsZXMgdG8gdXNlLiBUZXN0cyB3aWxsIGJlIHJ1biBpbiBwYXJhbGxlbCBhY3Jvc3MgZWFjaCBwcm9maWxlK3JlZ2lvbnMnLCBkZWZhdWx0OiBbXSB9KVxuICAgIC5vcHRpb25zKCdtYXgtd29ya2VycycsIHsgdHlwZTogJ251bWJlcicsIGRlc2M6ICdUaGUgbWF4IG51bWJlciBvZiB3b3JrZXJwb29sIHdvcmtlcnMgdG8gdXNlIHdoZW4gcnVubmluZyBpbnRlZ3JhdGlvbiB0ZXN0cyBpbiBwYXJhbGxlbCcsIGRlZmF1bHQ6IDE2IH0pXG4gICAgLm9wdGlvbnMoJ2V4Y2x1ZGUnLCB7IHR5cGU6ICdib29sZWFuJywgZGVzYzogJ1J1biBhbGwgdGVzdHMgaW4gdGhlIGRpcmVjdG9yeSwgZXhjZXB0IHRoZSBzcGVjaWZpZWQgVEVTVHMnLCBkZWZhdWx0OiBmYWxzZSB9KVxuICAgIC5vcHRpb25zKCdmcm9tLWZpbGUnLCB7IHR5cGU6ICdzdHJpbmcnLCBkZXNjOiAnUmVhZCBURVNUIG5hbWVzIGZyb20gYSBmaWxlIChvbmUgVEVTVCBwZXIgbGluZSknIH0pXG4gICAgLm9wdGlvbignaW5zcGVjdC1mYWlsdXJlcycsIHsgdHlwZTogJ2Jvb2xlYW4nLCBkZXNjOiAnS2VlcCB0aGUgaW50ZWcgdGVzdCBjbG91ZCBhc3NlbWJseSBpZiBhIGZhaWx1cmUgb2NjdXJzIGZvciBpbnNwZWN0aW9uJywgZGVmYXVsdDogZmFsc2UgfSlcbiAgICAub3B0aW9uKCdkaXNhYmxlLXVwZGF0ZS13b3JrZmxvdycsIHsgdHlwZTogJ2Jvb2xlYW4nLCBkZWZhdWx0OiBmYWxzZSwgZGVzYzogJ0lmIHRoaXMgaXMgXCJ0cnVlXCIgdGhlbiB0aGUgc3RhY2sgdXBkYXRlIHdvcmtmbG93IHdpbGwgYmUgZGlzYWJsZWQnIH0pXG4gICAgLm9wdGlvbignbGFuZ3VhZ2UnLCB7XG4gICAgICBhbGlhczogJ2wnLFxuICAgICAgZGVmYXVsdDogWydqYXZhc2NyaXB0JywgJ3R5cGVzY3JpcHQnLCAncHl0aG9uJywgJ2dvJ10sXG4gICAgICBjaG9pY2VzOiBbJ2phdmFzY3JpcHQnLCAndHlwZXNjcmlwdCcsICdweXRob24nLCAnZ28nXSxcbiAgICAgIHR5cGU6ICdhcnJheScsXG4gICAgICBkZXNjOiAnVXNlIHRoZXNlIHByZXNldHMgdG8gcnVuIGludGVncmF0aW9uIHRlc3RzIGZvciB0aGUgc2VsZWN0ZWQgbGFuZ3VhZ2VzJyxcbiAgICB9KVxuICAgIC5vcHRpb24oJ2FwcCcsIHsgdHlwZTogJ3N0cmluZycsIGRlZmF1bHQ6IHVuZGVmaW5lZCwgZGVzYzogJ1RoZSBjdXN0b20gQ0xJIGNvbW1hbmQgdGhhdCB3aWxsIGJlIHVzZWQgdG8gcnVuIHRoZSB0ZXN0IGZpbGVzLiBZb3UgY2FuIGluY2x1ZGUge2ZpbGVQYXRofSB0byBzcGVjaWZ5IHdoZXJlIGluIHRoZSBjb21tYW5kIHRoZSB0ZXN0IGZpbGUgcGF0aCBzaG91bGQgYmUgaW5zZXJ0ZWQuIEV4YW1wbGU6IC0tYXBwPVwicHl0aG9uMy44IHtmaWxlUGF0aH1cIi4nIH0pXG4gICAgLm9wdGlvbigndGVzdC1yZWdleCcsIHsgdHlwZTogJ2FycmF5JywgZGVzYzogJ0RldGVjdCBpbnRlZ3JhdGlvbiB0ZXN0IGZpbGVzIG1hdGNoaW5nIHRoaXMgSmF2YVNjcmlwdCByZWdleCBwYXR0ZXJuLiBJZiB1c2VkIG11bHRpcGxlIHRpbWVzLCBhbGwgZmlsZXMgbWF0Y2hpbmcgYW55IG9uZSBvZiB0aGUgcGF0dGVybnMgYXJlIGRldGVjdGVkLicsIGRlZmF1bHQ6IFtdIH0pXG4gICAgLnN0cmljdCgpXG4gICAgLnBhcnNlKGFyZ3MpO1xuXG4gIGNvbnN0IHRlc3RzOiBzdHJpbmdbXSA9IGFyZ3YuXztcbiAgY29uc3QgcGFyYWxsZWxSZWdpb25zID0gYXJyYXlGcm9tWWFyZ3MoYXJndlsncGFyYWxsZWwtcmVnaW9ucyddKTtcbiAgY29uc3QgdGVzdFJlZ2lvbnM6IHN0cmluZ1tdID0gcGFyYWxsZWxSZWdpb25zID8/IFsndXMtZWFzdC0xJywgJ3VzLWVhc3QtMicsICd1cy13ZXN0LTInXTtcbiAgY29uc3QgcHJvZmlsZXMgPSBhcnJheUZyb21ZYXJncyhhcmd2LnByb2ZpbGVzKTtcbiAgY29uc3QgZnJvbUZpbGU6IHN0cmluZyB8IHVuZGVmaW5lZCA9IGFyZ3ZbJ2Zyb20tZmlsZSddO1xuICBjb25zdCBtYXhXb3JrZXJzOiBudW1iZXIgPSBhcmd2WydtYXgtd29ya2VycyddO1xuICBjb25zdCB2ZXJib3NpdHk6IG51bWJlciA9IGFyZ3YudmVyYm9zZTtcbiAgY29uc3QgdmVyYm9zZTogYm9vbGVhbiA9IHZlcmJvc2l0eSA+PSAxO1xuXG4gIGNvbnN0IG51bVRlc3RzID0gdGVzdFJlZ2lvbnMubGVuZ3RoICogKHByb2ZpbGVzID8/IFsxXSkubGVuZ3RoO1xuICBpZiAobWF4V29ya2VycyA8IG51bVRlc3RzKSB7XG4gICAgbG9nZ2VyLndhcm5pbmcoJ1lvdSBhcmUgYXR0ZW1wdGluZyB0byBydW4gJXMgdGVzdHMgaW4gcGFyYWxsZWwsIGJ1dCBvbmx5IGhhdmUgJXMgd29ya2Vycy4gTm90IGFsbCBvZiB5b3VyIHByb2ZpbGVzK3JlZ2lvbnMgd2lsbCBiZSB1dGlsaXplZCcsIG51bVRlc3RzLCBtYXhXb3JrZXJzKTtcbiAgfVxuXG4gIGlmICh0ZXN0cy5sZW5ndGggPiAwICYmIGZyb21GaWxlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdBIGxpc3Qgb2YgdGVzdHMgY2Fubm90IGJlIHByb3ZpZGVkIGlmIFwiLS1mcm9tLWZpbGVcIiBpcyBwcm92aWRlZCcpO1xuICB9XG4gIGNvbnN0IHJlcXVlc3RlZFRlc3RzID0gZnJvbUZpbGVcbiAgICA/IChmcy5yZWFkRmlsZVN5bmMoZnJvbUZpbGUsIHsgZW5jb2Rpbmc6ICd1dGY4JyB9KSkuc3BsaXQoJ1xcbicpLmZpbHRlcih4ID0+IHgpXG4gICAgOiAodGVzdHMubGVuZ3RoID4gMCA/IHRlc3RzIDogdW5kZWZpbmVkKTsgLy8gJ3VuZGVmaW5lZCcgbWVhbnMgbm8gcmVxdWVzdFxuXG4gIHJldHVybiB7XG4gICAgdGVzdHM6IHJlcXVlc3RlZFRlc3RzLFxuICAgIGFwcDogYXJndi5hcHAgYXMgKHN0cmluZyB8IHVuZGVmaW5lZCksXG4gICAgdGVzdFJlZ2V4OiBhcnJheUZyb21ZYXJncyhhcmd2Wyd0ZXN0LXJlZ2V4J10pLFxuICAgIHRlc3RSZWdpb25zLFxuICAgIG9yaWdpbmFsUmVnaW9uczogcGFyYWxsZWxSZWdpb25zLFxuICAgIHByb2ZpbGVzLFxuICAgIHJ1blVwZGF0ZU9uRmFpbGVkOiAoYXJndlsndXBkYXRlLW9uLWZhaWxlZCddID8/IGZhbHNlKSBhcyBib29sZWFuLFxuICAgIGZyb21GaWxlLFxuICAgIGV4Y2x1ZGU6IGFyZ3YuZXhjbHVkZSBhcyBib29sZWFuLFxuICAgIG1heFdvcmtlcnMsXG4gICAgbGlzdDogYXJndi5saXN0IGFzIGJvb2xlYW4sXG4gICAgZGlyZWN0b3J5OiBhcmd2LmRpcmVjdG9yeSBhcyBzdHJpbmcsXG4gICAgaW5zcGVjdEZhaWx1cmVzOiBhcmd2WydpbnNwZWN0LWZhaWx1cmVzJ10gYXMgYm9vbGVhbixcbiAgICB2ZXJib3NpdHksXG4gICAgdmVyYm9zZSxcbiAgICBjbGVhbjogYXJndi5jbGVhbiBhcyBib29sZWFuLFxuICAgIGZvcmNlOiBhcmd2LmZvcmNlIGFzIGJvb2xlYW4sXG4gICAgZHJ5UnVuOiBhcmd2WydkcnktcnVuJ10gYXMgYm9vbGVhbixcbiAgICBkaXNhYmxlVXBkYXRlV29ya2Zsb3c6IGFyZ3ZbJ2Rpc2FibGUtdXBkYXRlLXdvcmtmbG93J10gYXMgYm9vbGVhbixcbiAgICBsYW5ndWFnZTogYXJyYXlGcm9tWWFyZ3MoYXJndi5sYW5ndWFnZSksXG4gICAgd2F0Y2g6IGFyZ3Yud2F0Y2ggYXMgYm9vbGVhbixcbiAgfTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG1haW4oYXJnczogc3RyaW5nW10pIHtcbiAgY29uc3Qgb3B0aW9ucyA9IHBhcnNlQ2xpQXJncyhhcmdzKTtcblxuICBjb25zdCB0ZXN0c0Zyb21BcmdzID0gYXdhaXQgbmV3IEludGVncmF0aW9uVGVzdHMocGF0aC5yZXNvbHZlKG9wdGlvbnMuZGlyZWN0b3J5KSkuZnJvbUNsaU9wdGlvbnMob3B0aW9ucyk7XG5cbiAgLy8gTGlzdCBvbmx5IHByaW50cyB0aGUgZGlzY292ZXJlZCB0ZXN0c1xuICBpZiAob3B0aW9ucy5saXN0KSB7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUodGVzdHNGcm9tQXJncy5tYXAodCA9PiB0LmRpc2NvdmVyeVJlbGF0aXZlRmlsZU5hbWUpLmpvaW4oJ1xcbicpICsgJ1xcbicpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHBvb2wgPSB3b3JrZXJwb29sLnBvb2wocGF0aC5qb2luKF9fZGlybmFtZSwgJy4uL2xpYi93b3JrZXJzL2V4dHJhY3QvaW5kZXguanMnKSwge1xuICAgIG1heFdvcmtlcnM6IG9wdGlvbnMud2F0Y2ggPyAxIDogb3B0aW9ucy5tYXhXb3JrZXJzLFxuICB9KTtcblxuICBjb25zdCB0ZXN0c1RvUnVuOiBJbnRlZ1Rlc3RXb3JrZXJDb25maWdbXSA9IFtdO1xuICBsZXQgZGVzdHJ1Y3RpdmVDaGFuZ2VzOiBib29sZWFuID0gZmFsc2U7XG4gIGxldCBmYWlsZWRTbmFwc2hvdHM6IEludGVnVGVzdFdvcmtlckNvbmZpZ1tdID0gW107XG4gIGxldCB0ZXN0c1N1Y2NlZWRlZCA9IGZhbHNlO1xuICB2YWxpZGF0ZVdhdGNoQXJncyh7XG4gICAgLi4ub3B0aW9ucyxcbiAgICB0ZXN0UmVnaW9uczogb3B0aW9ucy5vcmlnaW5hbFJlZ2lvbnMsXG4gICAgdGVzdHM6IHRlc3RzRnJvbUFyZ3MsXG4gIH0pO1xuXG4gIHRyeSB7XG4gICAgaWYgKCFvcHRpb25zLndhdGNoKSB7XG4gICAgICAvLyBhbHdheXMgcnVuIHNuYXBzaG90IHRlc3RzLCBidXQgaWYgJy0tZm9yY2UnIGlzIHBhc3NlZCB0aGVuXG4gICAgICAvLyBydW4gaW50ZWdyYXRpb24gdGVzdHMgb24gYWxsIGZhaWxlZCB0ZXN0cywgbm90IGp1c3QgdGhvc2UgdGhhdFxuICAgICAgLy8gZmFpbGVkIHNuYXBzaG90IHRlc3RzXG4gICAgICBmYWlsZWRTbmFwc2hvdHMgPSBhd2FpdCBydW5TbmFwc2hvdFRlc3RzKHBvb2wsIHRlc3RzRnJvbUFyZ3MsIHtcbiAgICAgICAgcmV0YWluOiBvcHRpb25zLmluc3BlY3RGYWlsdXJlcyxcbiAgICAgICAgdmVyYm9zZTogb3B0aW9ucy52ZXJib3NlLFxuICAgICAgfSk7XG4gICAgICBmb3IgKGNvbnN0IGZhaWx1cmUgb2YgZmFpbGVkU25hcHNob3RzKSB7XG4gICAgICAgIGxvZ2dlci53YXJuaW5nKGBGYWlsZWQ6ICR7ZmFpbHVyZS5maWxlTmFtZX1gKTtcbiAgICAgICAgaWYgKGZhaWx1cmUuZGVzdHJ1Y3RpdmVDaGFuZ2VzICYmIGZhaWx1cmUuZGVzdHJ1Y3RpdmVDaGFuZ2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBwcmludERlc3RydWN0aXZlQ2hhbmdlcyhmYWlsdXJlLmRlc3RydWN0aXZlQ2hhbmdlcyk7XG4gICAgICAgICAgZGVzdHJ1Y3RpdmVDaGFuZ2VzID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCFvcHRpb25zLmZvcmNlKSB7XG4gICAgICAgIHRlc3RzVG9SdW4ucHVzaCguLi5mYWlsZWRTbmFwc2hvdHMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gaWYgYW55IG9mIHRoZSB0ZXN0IGZhaWxlZCBzbmFwc2hvdCB0ZXN0cywga2VlcCB0aG9zZSByZXN1bHRzXG4gICAgICAgIC8vIGFuZCBtZXJnZSB3aXRoIHRoZSByZXN0IG9mIHRoZSB0ZXN0cyBmcm9tIGFyZ3NcbiAgICAgICAgdGVzdHNUb1J1bi5wdXNoKC4uLm1lcmdlVGVzdHModGVzdHNGcm9tQXJncy5tYXAodCA9PiB0LmluZm8pLCBmYWlsZWRTbmFwc2hvdHMpKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGVzdHNUb1J1bi5wdXNoKC4uLnRlc3RzRnJvbUFyZ3MubWFwKHQgPT4gdC5pbmZvKSk7XG4gICAgfVxuXG4gICAgLy8gcnVuIGludGVncmF0aW9uIHRlc3RzIGlmIGAtLXVwZGF0ZS1vbi1mYWlsZWRgIE9SIGAtLWZvcmNlYCBpcyB1c2VkXG4gICAgaWYgKG9wdGlvbnMucnVuVXBkYXRlT25GYWlsZWQgfHwgb3B0aW9ucy5mb3JjZSkge1xuICAgICAgY29uc3QgeyBzdWNjZXNzLCBtZXRyaWNzIH0gPSBhd2FpdCBydW5JbnRlZ3JhdGlvblRlc3RzKHtcbiAgICAgICAgcG9vbCxcbiAgICAgICAgdGVzdHM6IHRlc3RzVG9SdW4sXG4gICAgICAgIHJlZ2lvbnM6IG9wdGlvbnMudGVzdFJlZ2lvbnMsXG4gICAgICAgIHByb2ZpbGVzOiBvcHRpb25zLnByb2ZpbGVzLFxuICAgICAgICBjbGVhbjogb3B0aW9ucy5jbGVhbixcbiAgICAgICAgZHJ5UnVuOiBvcHRpb25zLmRyeVJ1bixcbiAgICAgICAgdmVyYm9zaXR5OiBvcHRpb25zLnZlcmJvc2l0eSxcbiAgICAgICAgdXBkYXRlV29ya2Zsb3c6ICFvcHRpb25zLmRpc2FibGVVcGRhdGVXb3JrZmxvdyxcbiAgICAgICAgd2F0Y2g6IG9wdGlvbnMud2F0Y2gsXG4gICAgICB9KTtcbiAgICAgIHRlc3RzU3VjY2VlZGVkID0gc3VjY2VzcztcblxuICAgICAgaWYgKG9wdGlvbnMuY2xlYW4gPT09IGZhbHNlKSB7XG4gICAgICAgIGxvZ2dlci53YXJuaW5nKCdOb3QgY2xlYW5pbmcgdXAgc3RhY2tzIHNpbmNlIFwiLS1uby1jbGVhblwiIHdhcyB1c2VkJyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChCb29sZWFuKG9wdGlvbnMudmVyYm9zZSkpIHtcbiAgICAgICAgcHJpbnRNZXRyaWNzKG1ldHJpY3MpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXN1Y2Nlc3MpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTb21lIGludGVncmF0aW9uIHRlc3RzIGZhaWxlZCEnKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMud2F0Y2gpIHtcbiAgICAgIGF3YWl0IHdhdGNoSW50ZWdyYXRpb25UZXN0KHBvb2wsIHtcbiAgICAgICAgd2F0Y2g6IHRydWUsXG4gICAgICAgIHZlcmJvc2l0eTogb3B0aW9ucy52ZXJib3NpdHksXG4gICAgICAgIC4uLnRlc3RzVG9SdW5bMF0sXG4gICAgICAgIHByb2ZpbGU6IG9wdGlvbnMucHJvZmlsZXMgPyBvcHRpb25zLnByb2ZpbGVzWzBdIDogdW5kZWZpbmVkLFxuICAgICAgICByZWdpb246IG9wdGlvbnMudGVzdFJlZ2lvbnNbMF0sXG4gICAgICB9KTtcbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgdm9pZCBwb29sLnRlcm1pbmF0ZSgpO1xuICB9XG5cbiAgaWYgKGRlc3RydWN0aXZlQ2hhbmdlcykge1xuICAgIHRocm93IG5ldyBFcnJvcignU29tZSBjaGFuZ2VzIHdlcmUgZGVzdHJ1Y3RpdmUhJyk7XG4gIH1cbiAgaWYgKGZhaWxlZFNuYXBzaG90cy5sZW5ndGggPiAwKSB7XG4gICAgbGV0IG1lc3NhZ2UgPSAnJztcbiAgICBpZiAoIW9wdGlvbnMucnVuVXBkYXRlT25GYWlsZWQpIHtcbiAgICAgIG1lc3NhZ2UgPSAnVG8gcmUtcnVuIGZhaWxlZCB0ZXN0cyBydW46IGludGVnLXJ1bm5lciAtLXVwZGF0ZS1vbi1mYWlsZWQnO1xuICAgIH1cbiAgICBpZiAoIXRlc3RzU3VjY2VlZGVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFNvbWUgdGVzdHMgZmFpbGVkIVxcbiR7bWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVdhdGNoQXJncyhhcmdzOiB7XG4gIHRlc3RzOiBJbnRlZ1Rlc3RbXSxcbiAgdGVzdFJlZ2lvbnM/OiBzdHJpbmdbXSxcbiAgcHJvZmlsZXM/OiBzdHJpbmdbXSxcbiAgbWF4V29ya2VyczogbnVtYmVyLFxuICBmb3JjZTogYm9vbGVhbixcbiAgZHJ5UnVuOiBib29sZWFuLFxuICBkaXNhYmxlVXBkYXRlV29ya2Zsb3c6IGJvb2xlYW4sXG4gIHJ1blVwZGF0ZU9uRmFpbGVkOiBib29sZWFuLFxuICB3YXRjaDogYm9vbGVhbixcbn0pIHtcbiAgaWYgKGFyZ3Mud2F0Y2gpIHtcbiAgICBpZiAoXG4gICAgICAoYXJncy50ZXN0UmVnaW9ucyAmJiBhcmdzLnRlc3RSZWdpb25zLmxlbmd0aCA+IDEpXG4gICAgICAgIHx8IChhcmdzLnByb2ZpbGVzICYmIGFyZ3MucHJvZmlsZXMubGVuZ3RoID4gMSlcbiAgICAgICAgfHwgYXJncy50ZXN0cy5sZW5ndGggPiAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1J1bm5pbmcgd2l0aCB3YXRjaCBvbmx5IHN1cHBvcnRzIGEgc2luZ2xlIHRlc3QuIE9ubHkgcHJvdmlkZSBhIHNpbmdsZSBvcHRpb24nK1xuICAgICAgICAndG8gYC0tcHJvZmlsZXNgIGAtLXBhcmFsbGVsLXJlZ2lvbnNgIGAtLW1heC13b3JrZXJzJyk7XG4gICAgfVxuXG4gICAgaWYgKGFyZ3MucnVuVXBkYXRlT25GYWlsZWQgfHwgYXJncy5kaXNhYmxlVXBkYXRlV29ya2Zsb3cgfHwgYXJncy5mb3JjZSB8fCBhcmdzLmRyeVJ1bikge1xuICAgICAgbG9nZ2VyLndhcm5pbmcoJ2FyZ3MgYC0tdXBkYXRlLW9uLWZhaWxlZGAsIGAtLWRpc2FibGUtdXBkYXRlLXdvcmtmbG93YCwgYC0tZm9yY2VgLCBgLS1kcnktcnVuYCBoYXZlIG5vIGVmZmVjdCB3aGVuIHJ1bm5pbmcgd2l0aCBgLS13YXRjaGAnKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJpbnREZXN0cnVjdGl2ZUNoYW5nZXMoY2hhbmdlczogRGVzdHJ1Y3RpdmVDaGFuZ2VbXSk6IHZvaWQge1xuICBpZiAoY2hhbmdlcy5sZW5ndGggPiAwKSB7XG4gICAgbG9nZ2VyLndhcm5pbmcoJyEhISBUaGlzIHRlc3QgY29udGFpbnMgJXMgISEhJywgY2hhbGsuYm9sZCgnZGVzdHJ1Y3RpdmUgY2hhbmdlcycpKTtcbiAgICBjaGFuZ2VzLmZvckVhY2goY2hhbmdlID0+IHtcbiAgICAgIGxvZ2dlci53YXJuaW5nKCcgICAgU3RhY2s6ICVzIC0gUmVzb3VyY2U6ICVzIC0gSW1wYWN0OiAlcycsIGNoYW5nZS5zdGFja05hbWUsIGNoYW5nZS5sb2dpY2FsSWQsIGNoYW5nZS5pbXBhY3QpO1xuICAgIH0pO1xuICAgIGxvZ2dlci53YXJuaW5nKCchISEgSWYgdGhlc2UgZGVzdHJ1Y3RpdmUgY2hhbmdlcyBhcmUgbmVjZXNzYXJ5LCBwbGVhc2UgaW5kaWNhdGUgdGhpcyBvbiB0aGUgUFIgISEhJyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJpbnRNZXRyaWNzKG1ldHJpY3M6IEludGVnUnVubmVyTWV0cmljc1tdKTogdm9pZCB7XG4gIGxvZ2dlci5oaWdobGlnaHQoJyAgIC0tLSBJbnRlZ3JhdGlvbiB0ZXN0IG1ldHJpY3MgLS0tJyk7XG4gIGNvbnN0IHNvcnRlZE1ldHJpY3MgPSBtZXRyaWNzLnNvcnQoKGEsIGIpID0+IGEuZHVyYXRpb24gLSBiLmR1cmF0aW9uKTtcbiAgc29ydGVkTWV0cmljcy5mb3JFYWNoKG1ldHJpYyA9PiB7XG4gICAgbG9nZ2VyLnByaW50KCdQcm9maWxlICVzICsgUmVnaW9uICVzIHRvdGFsIHRpbWU6ICVzJywgbWV0cmljLnByb2ZpbGUsIG1ldHJpYy5yZWdpb24sIG1ldHJpYy5kdXJhdGlvbik7XG4gICAgY29uc3Qgc29ydGVkVGVzdHMgPSBPYmplY3QuZW50cmllcyhtZXRyaWMudGVzdHMpLnNvcnQoKGEsIGIpID0+IGFbMV0gLSBiWzFdKTtcbiAgICBzb3J0ZWRUZXN0cy5mb3JFYWNoKHRlc3QgPT4gbG9nZ2VyLnByaW50KCcgICVzOiAlcycsIHRlc3RbMF0sIHRlc3RbMV0pKTtcbiAgfSk7XG59XG5cbi8qKlxuICogVHJhbnNsYXRlIGEgWWFyZ3MgaW5wdXQgYXJyYXkgdG8gc29tZXRoaW5nIHRoYXQgbWFrZXMgbW9yZSBzZW5zZSBpbiBhIHByb2dyYW1taW5nIGxhbmd1YWdlXG4gKiBtb2RlbCAodGVsbGluZyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGFic2VuY2UgYW5kIGFuIGVtcHR5IGFycmF5KVxuICpcbiAqIC0gQW4gZW1wdHkgYXJyYXkgaXMgdGhlIGRlZmF1bHQgY2FzZSwgbWVhbmluZyB0aGUgdXNlciBkaWRuJ3QgcGFzcyBhbnkgYXJndW1lbnRzLiBXZSByZXR1cm5cbiAqICAgdW5kZWZpbmVkLlxuICogLSBJZiB0aGUgdXNlciBwYXNzZWQgYSBzaW5nbGUgZW1wdHkgc3RyaW5nLCB0aGV5IGRpZCBzb21ldGhpbmcgbGlrZSBgLS1hcnJheT1gLCB3aGljaCB3ZSdsbFxuICogICB0YWtlIHRvIG1lYW4gdGhleSBwYXNzZWQgYW4gZW1wdHkgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGFycmF5RnJvbVlhcmdzKHhzOiBzdHJpbmdbXSk6IHN0cmluZ1tdIHwgdW5kZWZpbmVkIHtcbiAgaWYgKHhzLmxlbmd0aCA9PT0gMCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIHJldHVybiB4cy5maWx0ZXIoeCA9PiB4ICE9PSAnJyk7XG59XG5cbi8qKlxuICogTWVyZ2UgdGhlIHRlc3RzIHdlIHJlY2VpdmVkIGZyb20gY29tbWFuZCBsaW5lIGFyZ3VtZW50cyB3aXRoXG4gKiB0ZXN0cyB0aGF0IGZhaWxlZCBzbmFwc2hvdCB0ZXN0cy4gVGhlIGZhaWxlZCBzbmFwc2hvdCB0ZXN0cyBoYXZlIGFkZGl0aW9uYWxcbiAqIGluZm9ybWF0aW9uIHRoYXQgd2Ugd2FudCB0byBrZWVwIHNvIHRoaXMgc2hvdWxkIG92ZXJyaWRlIGFueSB0ZXN0IGZyb20gYXJnc1xuICovXG5mdW5jdGlvbiBtZXJnZVRlc3RzKHRlc3RGcm9tQXJnczogSW50ZWdUZXN0SW5mb1tdLCBmYWlsZWRTbmFwc2hvdFRlc3RzOiBJbnRlZ1Rlc3RXb3JrZXJDb25maWdbXSk6IEludGVnVGVzdFdvcmtlckNvbmZpZ1tdIHtcbiAgY29uc3QgZmFpbGVkVGVzdE5hbWVzID0gbmV3IFNldChmYWlsZWRTbmFwc2hvdFRlc3RzLm1hcCh0ZXN0ID0+IHRlc3QuZmlsZU5hbWUpKTtcbiAgY29uc3QgZmluYWw6IEludGVnVGVzdFdvcmtlckNvbmZpZ1tdID0gZmFpbGVkU25hcHNob3RUZXN0cztcbiAgZmluYWwucHVzaCguLi50ZXN0RnJvbUFyZ3MuZmlsdGVyKHRlc3QgPT4gIWZhaWxlZFRlc3ROYW1lcy5oYXModGVzdC5maWxlTmFtZSkpKTtcbiAgcmV0dXJuIGZpbmFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xpKGFyZ3M6IHN0cmluZ1tdID0gcHJvY2Vzcy5hcmd2LnNsaWNlKDIpKSB7XG4gIG1haW4oYXJncykudGhlbigpLmNhdGNoKGVyciA9PiB7XG4gICAgbG9nZ2VyLmVycm9yKGVycik7XG4gICAgcHJvY2Vzcy5leGl0Q29kZSA9IDE7XG4gIH0pO1xufVxuXG4vKipcbiAqIFJlYWQgQ0xJIG9wdGlvbnMgZnJvbSBhIGNvbmZpZyBmaWxlIGlmIHByb3ZpZGVkLlxuICpcbiAqIEBwYXJhbSBmaWxlTmFtZVxuICogQHJldHVybnMgcGFyc2VkIENMSSBjb25maWcgb3B0aW9uc1xuICovXG5mdW5jdGlvbiBjb25maWdGcm9tRmlsZShmaWxlTmFtZT86IHN0cmluZyk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICBpZiAoIWZpbGVOYW1lKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmMoZmlsZU5hbWUsIHsgZW5jb2Rpbmc6ICd1dGYtOCcgfSkpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4ge307XG4gIH1cbn1cbiIsICJleHBvcnQgeyBjbGkgfSBmcm9tICcuL2NsaSc7XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBLDhDQUFBQSxVQUFBQyxTQUFBO0FBQUE7QUFFQSxJQUFBQSxRQUFPLFVBQVU7QUFBQSxNQUNoQixhQUFhLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUMzQixnQkFBZ0IsQ0FBQyxLQUFLLEtBQUssR0FBRztBQUFBLE1BQzlCLFFBQVEsQ0FBQyxHQUFHLEtBQUssR0FBRztBQUFBLE1BQ3BCLGNBQWMsQ0FBQyxLQUFLLEtBQUssR0FBRztBQUFBLE1BQzVCLFNBQVMsQ0FBQyxLQUFLLEtBQUssR0FBRztBQUFBLE1BQ3ZCLFNBQVMsQ0FBQyxLQUFLLEtBQUssR0FBRztBQUFBLE1BQ3ZCLFVBQVUsQ0FBQyxLQUFLLEtBQUssR0FBRztBQUFBLE1BQ3hCLFNB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QSxFQUFBLFlBQUEsTUFBQSxLQUFBLFdBQUE7QUFBQSxTQUFBLE1BQUE7QUFBRyxFQUFBLENBQUE7IiwKICAibmFtZXMiOiBbImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdyYXkiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicGF0aCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJjaGFsayIsICJzdHlsZXMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiY2hhbGsiLCAic2VsZiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJyZXF1aXJlRm9vbFdlYnBhY2siLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiUHJvbWlzZSIsICJyZXNvbHZlIiwgImVycm9yIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIlByb21pc2UiLCAicmVxdWlyZUZvb2xXZWJwYWNrIiwgIlRFUk1JTkFURV9NRVRIT0RfSUQiLCAiV29ya2VyVGhyZWFkcyIsICJlcnJvciIsICJXb3JrZXIiLCAid29ya2VyIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIlByb21pc2UiLCAicG9vbCIsICJ3b3JrZXIiLCAicmVzb2x2ZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJUcmFuc2ZlciIsICJlcnJvciIsICJyZXN1bHQiLCAiZXhwb3J0cyIsICJwb29sIiwgIndvcmtlciIsICJleHBvcnRzIiwgInJlc29sdmUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZnMiLCAicGF0aCIsICJlcnIiLCAiZXJyMiIsICJlciIsICJlcjIiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZnMiLCAicGF0aCIsICJzZWxmIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImZzIiwgInV0aWwiLCAicXVldWUiLCAicGF0aCIsICJvcHRpb25zIiwgImNiIiwgImRhdGEiLCAic3JjIiwgImRlc3QiLCAiZmxhZ3MiLCAicmVhZGRpciIsICJnbyRyZWFkZGlyIiwgIm1vZGUiLCAiZXhwb3J0cyIsICJmcyIsICJyZXNvbHZlIiwgImJ1ZmZlciIsICJidWZmZXJzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImZzIiwgInBhdGgiLCAiZXJyb3IiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZnMiLCAicGF0aCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJmcyIsICJwYXRoIiwgInV0aWwiLCAic3RhdCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJmcyIsICJwYXRoIiwgInN0YXQiLCAicmVxdWlyZV9jb3B5X3N5bmMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZnMiLCAicGF0aCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJmcyIsICJwYXRoIiwgInN0YXQiLCAiZXJyIiwgImVycm9yIiwgInJlcXVpcmVfY29weSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJmcyIsICJwYXRoIiwgImVyIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImZzIiwgInBhdGgiLCAiZW1wdHlEaXIiLCAiZXJyIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInBhdGgiLCAiZnMiLCAiZXJyIiwgInN0YXRzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInBhdGgiLCAiZnMiLCAic3JjcGF0aCIsICJkc3RwYXRoIiwgImVyciIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJwYXRoIiwgImZzIiwgImVyciIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJmcyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJwYXRoIiwgImZzIiwgImVyciIsICJyZWxhdGl2ZSIsICJ0eXBlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImZzIiwgInJlYWRGaWxlU3luYyIsICJyZXF1aXJlX2pzb25maWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImZzIiwgInBhdGgiLCAiZXJyIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImZzIiwgInBhdGgiLCAic3RhdCIsICJyZXF1aXJlX21vdmVfc3luYyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJmcyIsICJwYXRoIiwgInN0YXQiLCAiZXJyIiwgInJlcXVpcmVfbW92ZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJmcyIsICJjaGFsayIsICJ3b3JrZXIiLCAicG9vbCIsICJwb29sIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImZzIiwgInV0aWwiLCAicGF0aCIsICJ5MThuIiwgInJlcXVpcmVfYnVpbGQiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAidXRpbCIsICJmcyIsICJwYXRoIiwgIkRlZmF1bHRWYWx1ZXNGb3JUeXBlS2V5IiwgImtleSIsICJlcnJvciIsICJhcmdzIiwgInZhbHVlIiwgInZhbCIsICJhcmd2IiwgImVudiIsICJhbGlhc2VzIiwgImRlZmF1bHRzIiwgInNlbGYiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiY29kZSIsICJyZXF1aXJlX2J1aWxkIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInJlc29sdmUiLCAibW9kdWxlIiwgInN0YWNrIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImZzIiwgImpvaW4iLCAicmVzb2x2ZSIsICJwYXRoIiwgInJlcXVpcmVfYnVpbGQiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiY21kIiwgImlzUHJvbWlzZSIsICJzaGltIiwgInlhcmdzIiwgInVzYWdlIiwgInZhbGlkYXRpb24iLCAic2VsZiIsICJjb21tYW5kIiwgImVycm9yIiwgImMiLCAieTE4biIsICJsb2dnZXIiLCAibWF4V2lkdGgiLCAiYXJndiIsICJjb21wbGV0aW9ucyIsICJrZXkiLCAiZ2xvYmFsIiwgImsiLCAidHlwZSIsICJ2YWx1ZSIsICJwYXJzZUZuIiwgInBhcnNlIiwgImNvbXBsZXRpb24iLCAicmVhZEZpbGVTeW5jIiwgInJlc29sdmUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicG9vbCIsICJzdWNjZXNzIiwgImZzIiwgInBhdGgiLCAiY2hhbGsiXQp9Cg==
|
|
10507
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvbG9yLW5hbWUvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Fuc2ktc3R5bGVzL25vZGVfbW9kdWxlcy9jb2xvci1jb252ZXJ0L2NvbnZlcnNpb25zLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9hbnNpLXN0eWxlcy9ub2RlX21vZHVsZXMvY29sb3ItY29udmVydC9yb3V0ZS5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYW5zaS1zdHlsZXMvbm9kZV9tb2R1bGVzL2NvbG9yLWNvbnZlcnQvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Fuc2ktc3R5bGVzL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9oYXMtZmxhZy9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3VwcG9ydHMtY29sb3IvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NoYWxrL3NvdXJjZS91dGlsLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jaGFsay9zb3VyY2UvdGVtcGxhdGVzLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jaGFsay9zb3VyY2UvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3dvcmtlcnBvb2wvc3JjL3JlcXVpcmVGb29sV2VicGFjay5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvd29ya2VycG9vbC9zcmMvZW52aXJvbm1lbnQuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3dvcmtlcnBvb2wvc3JjL1Byb21pc2UuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3dvcmtlcnBvb2wvc3JjL2dlbmVyYXRlZC9lbWJlZGRlZFdvcmtlci5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvd29ya2VycG9vbC9zcmMvV29ya2VySGFuZGxlci5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvd29ya2VycG9vbC9zcmMvZGVidWctcG9ydC1hbGxvY2F0b3IuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3dvcmtlcnBvb2wvc3JjL1Bvb2wuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3dvcmtlcnBvb2wvc3JjL3RyYW5zZmVyLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy93b3JrZXJwb29sL3NyYy93b3JrZXIuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3dvcmtlcnBvb2wvc3JjL2luZGV4LmpzIiwgImxvZ2dlci50cyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdW5pdmVyc2FsaWZ5L2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9ncmFjZWZ1bC1mcy9wb2x5ZmlsbHMuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2dyYWNlZnVsLWZzL2xlZ2FjeS1zdHJlYW1zLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9ncmFjZWZ1bC1mcy9jbG9uZS5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZ3JhY2VmdWwtZnMvZ3JhY2VmdWwtZnMuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9mcy9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXQtbGVhc3Qtbm9kZS9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL21rZGlycy9tYWtlLWRpci5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL21rZGlycy9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL3V0aWwvdXRpbWVzLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvdXRpbC9zdGF0LmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvY29weS1zeW5jL2NvcHktc3luYy5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL2NvcHktc3luYy9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL3BhdGgtZXhpc3RzL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvY29weS9jb3B5LmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvY29weS9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL3JlbW92ZS9yaW1yYWYuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9yZW1vdmUvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9lbXB0eS9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL2Vuc3VyZS9maWxlLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvZW5zdXJlL2xpbmsuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9lbnN1cmUvc3ltbGluay1wYXRocy5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL2Vuc3VyZS9zeW1saW5rLXR5cGUuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9lbnN1cmUvc3ltbGluay5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL2Vuc3VyZS9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvanNvbmZpbGUvdXRpbHMuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2pzb25maWxlL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvanNvbi9qc29uZmlsZS5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL291dHB1dC9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL2pzb24vb3V0cHV0LWpzb24uanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9qc29uL291dHB1dC1qc29uLXN5bmMuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9qc29uL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvbW92ZS1zeW5jL21vdmUtc3luYy5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL21vdmUtc3luYy9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL21vdmUvbW92ZS5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL21vdmUvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9pbmRleC5qcyIsICJydW5uZXIvaW50ZWdyYXRpb24tdGVzdHMudHMiLCAid29ya2Vycy9jb21tb24udHMiLCAidXRpbHMudHMiLCAid29ya2Vycy9pbnRlZy10ZXN0LXdvcmtlci50cyIsICJ3b3JrZXJzL2ludGVnLXNuYXBzaG90LXdvcmtlci50cyIsICJ3b3JrZXJzL2luZGV4LnRzIiwgIndvcmtlcnMvaW50ZWctd2F0Y2gtd29ya2VyLnRzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy95MThuL2J1aWxkL2luZGV4LmNqcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMveWFyZ3Mvbm9kZV9tb2R1bGVzL3lhcmdzLXBhcnNlci9idWlsZC9pbmRleC5janMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Fuc2ktcmVnZXgvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0cmlwLWFuc2kvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2lzLWZ1bGx3aWR0aC1jb2RlLXBvaW50L2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9lbW9qaS1yZWdleC9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3RyaW5nLXdpZHRoL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy93cmFwLWFuc2kvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3lhcmdzL25vZGVfbW9kdWxlcy9jbGl1aS9idWlsZC9pbmRleC5janMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2VzY2FsYWRlL3N5bmMvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2dldC1jYWxsZXItZmlsZS9pbmRleC50cyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmVxdWlyZS1kaXJlY3RvcnkvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3lhcmdzL2J1aWxkL2luZGV4LmNqcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMveWFyZ3MvaW5kZXguY2pzIiwgImNsaS50cyIsICJpbmRleC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiJ3VzZSBzdHJpY3QnXHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IHtcclxuXHRcImFsaWNlYmx1ZVwiOiBbMjQwLCAyNDgsIDI1NV0sXHJcblx0XCJhbnRpcXVld2hpdGVcIjogWzI1MCwgMjM1LCAyMTVdLFxyXG5cdFwiYXF1YVwiOiBbMCwgMjU1LCAyNTVdLFxyXG5cdFwiYXF1YW1hcmluZVwiOiBbMTI3LCAyNTUsIDIxMl0sXHJcblx0XCJhenVyZVwiOiBbMjQwLCAyNTUsIDI1NV0sXHJcblx0XCJiZWlnZVwiOiBbMjQ1LCAyNDUsIDIyMF0sXHJcblx0XCJiaXNxdWVcIjogWzI1NSwgMjI4LCAxOTZdLFxyXG5cdFwiYmxhY2tcIjogWzAsIDAsIDBdLFxyXG5cdFwiYmxhbmNoZWRhbG1vbmRcIjogWzI1NSwgMjM1LCAyMDVdLFxyXG5cdFwiYmx1ZVwiOiBbMCwgMCwgMjU1XSxcclxuXHRcImJsdWV2aW9sZXRcIjogWzEzOCwgNDMsIDIyNl0sXHJcblx0XCJicm93blwiOiBbMTY1LCA0MiwgNDJdLFxyXG5cdFwiYnVybHl3b29kXCI6IFsyMjIsIDE4NCwgMTM1XSxcclxuXHRcImNhZGV0Ymx1ZVwiOiBbOTUsIDE1OCwgMTYwXSxcclxuXHRcImNoYXJ0cmV1c2VcIjogWzEyNywgMjU1LCAwXSxcclxuXHRcImNob2NvbGF0ZVwiOiBbMjEwLCAxMDUsIDMwXSxcclxuXHRcImNvcmFsXCI6IFsyNTUsIDEyNywgODBdLFxyXG5cdFwiY29ybmZsb3dlcmJsdWVcIjogWzEwMCwgMTQ5LCAyMzddLFxyXG5cdFwiY29ybnNpbGtcIjogWzI1NSwgMjQ4LCAyMjBdLFxyXG5cdFwiY3JpbXNvblwiOiBbMjIwLCAyMCwgNjBdLFxyXG5cdFwiY3lhblwiOiBbMCwgMjU1LCAyNTVdLFxyXG5cdFwiZGFya2JsdWVcIjogWzAsIDAsIDEzOV0sXHJcblx0XCJkYXJrY3lhblwiOiBbMCwgMTM5LCAxMzldLFxyXG5cdFwiZGFya2dvbGRlbnJvZFwiOiBbMTg0LCAxMzQsIDExXSxcclxuXHRcImRhcmtncmF5XCI6IFsxNjksIDE2OSwgMTY5XSxcclxuXHRcImRhcmtncmVlblwiOiBbMCwgMTAwLCAwXSxcclxuXHRcImRhcmtncmV5XCI6IFsxNjksIDE2OSwgMTY5XSxcclxuXHRcImRhcmtraGFraVwiOiBbMTg5LCAxODMsIDEwN10sXHJcblx0XCJkYXJrbWFnZW50YVwiOiBbMTM5LCAwLCAxMzldLFxyXG5cdFwiZGFya29saXZlZ3JlZW5cIjogWzg1LCAxMDcsIDQ3XSxcclxuXHRcImRhcmtvcmFuZ2VcIjogWzI1NSwgMTQwLCAwXSxcclxuXHRcImRhcmtvcmNoaWRcIjogWzE1MywgNTAsIDIwNF0sXHJcblx0XCJkYXJrcmVkXCI6IFsxMzksIDAsIDBdLFxyXG5cdFwiZGFya3NhbG1vblwiOiBbMjMzLCAxNTAsIDEyMl0sXHJcblx0XCJkYXJrc2VhZ3JlZW5cIjogWzE0MywgMTg4LCAxNDNdLFxyXG5cdFwiZGFya3NsYXRlYmx1ZVwiOiBbNzIsIDYxLCAxMzldLFxyXG5cdFwiZGFya3NsYXRlZ3JheVwiOiBbNDcsIDc5LCA3OV0sXHJcblx0XCJkYXJrc2xhdGVncmV5XCI6IFs0NywgNzksIDc5XSxcclxuXHRcImRhcmt0dXJxdW9pc2VcIjogWzAsIDIwNiwgMjA5XSxcclxuXHRcImRhcmt2aW9sZXRcIjogWzE0OCwgMCwgMjExXSxcclxuXHRcImRlZXBwaW5rXCI6IFsyNTUsIDIwLCAxNDddLFxyXG5cdFwiZGVlcHNreWJsdWVcIjogWzAsIDE5MSwgMjU1XSxcclxuXHRcImRpbWdyYXlcIjogWzEwNSwgMTA1LCAxMDVdLFxyXG5cdFwiZGltZ3JleVwiOiBbMTA1LCAxMDUsIDEwNV0sXHJcblx0XCJkb2RnZXJibHVlXCI6IFszMCwgMTQ0LCAyNTVdLFxyXG5cdFwiZmlyZWJyaWNrXCI6IFsxNzgsIDM0LCAzNF0sXHJcblx0XCJmbG9yYWx3aGl0ZVwiOiBbMjU1LCAyNTAsIDI0MF0sXHJcblx0XCJmb3Jlc3RncmVlblwiOiBbMzQsIDEzOSwgMzRdLFxyXG5cdFwiZnVjaHNpYVwiOiBbMjU1LCAwLCAyNTVdLFxyXG5cdFwiZ2FpbnNib3JvXCI6IFsyMjAsIDIyMCwgMjIwXSxcclxuXHRcImdob3N0d2hpdGVcIjogWzI0OCwgMjQ4LCAyNTVdLFxyXG5cdFwiZ29sZFwiOiBbMjU1LCAyMTUsIDBdLFxyXG5cdFwiZ29sZGVucm9kXCI6IFsyMTgsIDE2NSwgMzJdLFxyXG5cdFwiZ3JheVwiOiBbMTI4LCAxMjgsIDEyOF0sXHJcblx0XCJncmVlblwiOiBbMCwgMTI4LCAwXSxcclxuXHRcImdyZWVueWVsbG93XCI6IFsxNzMsIDI1NSwgNDddLFxyXG5cdFwiZ3JleVwiOiBbMTI4LCAxMjgsIDEyOF0sXHJcblx0XCJob25leWRld1wiOiBbMjQwLCAyNTUsIDI0MF0sXHJcblx0XCJob3RwaW5rXCI6IFsyNTUsIDEwNSwgMTgwXSxcclxuXHRcImluZGlhbnJlZFwiOiBbMjA1LCA5MiwgOTJdLFxyXG5cdFwiaW5kaWdvXCI6IFs3NSwgMCwgMTMwXSxcclxuXHRcIml2b3J5XCI6IFsyNTUsIDI1NSwgMjQwXSxcclxuXHRcImtoYWtpXCI6IFsyNDAsIDIzMCwgMTQwXSxcclxuXHRcImxhdmVuZGVyXCI6IFsyMzAsIDIzMCwgMjUwXSxcclxuXHRcImxhdmVuZGVyYmx1c2hcIjogWzI1NSwgMjQwLCAyNDVdLFxyXG5cdFwibGF3bmdyZWVuXCI6IFsxMjQsIDI1MiwgMF0sXHJcblx0XCJsZW1vbmNoaWZmb25cIjogWzI1NSwgMjUwLCAyMDVdLFxyXG5cdFwibGlnaHRibHVlXCI6IFsxNzMsIDIxNiwgMjMwXSxcclxuXHRcImxpZ2h0Y29yYWxcIjogWzI0MCwgMTI4LCAxMjhdLFxyXG5cdFwibGlnaHRjeWFuXCI6IFsyMjQsIDI1NSwgMjU1XSxcclxuXHRcImxpZ2h0Z29sZGVucm9keWVsbG93XCI6IFsyNTAsIDI1MCwgMjEwXSxcclxuXHRcImxpZ2h0Z3JheVwiOiBbMjExLCAyMTEsIDIxMV0sXHJcblx0XCJsaWdodGdyZWVuXCI6IFsxNDQsIDIzOCwgMTQ0XSxcclxuXHRcImxpZ2h0Z3JleVwiOiBbMjExLCAyMTEsIDIxMV0sXHJcblx0XCJsaWdodHBpbmtcIjogWzI1NSwgMTgyLCAxOTNdLFxyXG5cdFwibGlnaHRzYWxtb25cIjogWzI1NSwgMTYwLCAxMjJdLFxyXG5cdFwibGlnaHRzZWFncmVlblwiOiBbMzIsIDE3OCwgMTcwXSxcclxuXHRcImxpZ2h0c2t5Ymx1ZVwiOiBbMTM1LCAyMDYsIDI1MF0sXHJcblx0XCJsaWdodHNsYXRlZ3JheVwiOiBbMTE5LCAxMzYsIDE1M10sXHJcblx0XCJsaWdodHNsYXRlZ3JleVwiOiBbMTE5LCAxMzYsIDE1M10sXHJcblx0XCJsaWdodHN0ZWVsYmx1ZVwiOiBbMTc2LCAxOTYsIDIyMl0sXHJcblx0XCJsaWdodHllbGxvd1wiOiBbMjU1LCAyNTUsIDIyNF0sXHJcblx0XCJsaW1lXCI6IFswLCAyNTUsIDBdLFxyXG5cdFwibGltZWdyZWVuXCI6IFs1MCwgMjA1LCA1MF0sXHJcblx0XCJsaW5lblwiOiBbMjUwLCAyNDAsIDIzMF0sXHJcblx0XCJtYWdlbnRhXCI6IFsyNTUsIDAsIDI1NV0sXHJcblx0XCJtYXJvb25cIjogWzEyOCwgMCwgMF0sXHJcblx0XCJtZWRpdW1hcXVhbWFyaW5lXCI6IFsxMDIsIDIwNSwgMTcwXSxcclxuXHRcIm1lZGl1bWJsdWVcIjogWzAsIDAsIDIwNV0sXHJcblx0XCJtZWRpdW1vcmNoaWRcIjogWzE4NiwgODUsIDIxMV0sXHJcblx0XCJtZWRpdW1wdXJwbGVcIjogWzE0NywgMTEyLCAyMTldLFxyXG5cdFwibWVkaXVtc2VhZ3JlZW5cIjogWzYwLCAxNzksIDExM10sXHJcblx0XCJtZWRpdW1zbGF0ZWJsdWVcIjogWzEyMywgMTA0LCAyMzhdLFxyXG5cdFwibWVkaXVtc3ByaW5nZ3JlZW5cIjogWzAsIDI1MCwgMTU0XSxcclxuXHRcIm1lZGl1bXR1cnF1b2lzZVwiOiBbNzIsIDIwOSwgMjA0XSxcclxuXHRcIm1lZGl1bXZpb2xldHJlZFwiOiBbMTk5LCAyMSwgMTMzXSxcclxuXHRcIm1pZG5pZ2h0Ymx1ZVwiOiBbMjUsIDI1LCAxMTJdLFxyXG5cdFwibWludGNyZWFtXCI6IFsyNDUsIDI1NSwgMjUwXSxcclxuXHRcIm1pc3R5cm9zZVwiOiBbMjU1LCAyMjgsIDIyNV0sXHJcblx0XCJtb2NjYXNpblwiOiBbMjU1LCAyMjgsIDE4MV0sXHJcblx0XCJuYXZham93aGl0ZVwiOiBbMjU1LCAyMjIsIDE3M10sXHJcblx0XCJuYXZ5XCI6IFswLCAwLCAxMjhdLFxyXG5cdFwib2xkbGFjZVwiOiBbMjUzLCAyNDUsIDIzMF0sXHJcblx0XCJvbGl2ZVwiOiBbMTI4LCAxMjgsIDBdLFxyXG5cdFwib2xpdmVkcmFiXCI6IFsxMDcsIDE0MiwgMzVdLFxyXG5cdFwib3JhbmdlXCI6IFsyNTUsIDE2NSwgMF0sXHJcblx0XCJvcmFuZ2VyZWRcIjogWzI1NSwgNjksIDBdLFxyXG5cdFwib3JjaGlkXCI6IFsyMTgsIDExMiwgMjE0XSxcclxuXHRcInBhbGVnb2xkZW5yb2RcIjogWzIzOCwgMjMyLCAxNzBdLFxyXG5cdFwicGFsZWdyZWVuXCI6IFsxNTIsIDI1MSwgMTUyXSxcclxuXHRcInBhbGV0dXJxdW9pc2VcIjogWzE3NSwgMjM4LCAyMzhdLFxyXG5cdFwicGFsZXZpb2xldHJlZFwiOiBbMjE5LCAxMTIsIDE0N10sXHJcblx0XCJwYXBheWF3aGlwXCI6IFsyNTUsIDIzOSwgMjEzXSxcclxuXHRcInBlYWNocHVmZlwiOiBbMjU1LCAyMTgsIDE4NV0sXHJcblx0XCJwZXJ1XCI6IFsyMDUsIDEzMywgNjNdLFxyXG5cdFwicGlua1wiOiBbMjU1LCAxOTIsIDIwM10sXHJcblx0XCJwbHVtXCI6IFsyMjEsIDE2MCwgMjIxXSxcclxuXHRcInBvd2RlcmJsdWVcIjogWzE3NiwgMjI0LCAyMzBdLFxyXG5cdFwicHVycGxlXCI6IFsxMjgsIDAsIDEyOF0sXHJcblx0XCJyZWJlY2NhcHVycGxlXCI6IFsxMDIsIDUxLCAxNTNdLFxyXG5cdFwicmVkXCI6IFsyNTUsIDAsIDBdLFxyXG5cdFwicm9zeWJyb3duXCI6IFsxODgsIDE0MywgMTQzXSxcclxuXHRcInJveWFsYmx1ZVwiOiBbNjUsIDEwNSwgMjI1XSxcclxuXHRcInNhZGRsZWJyb3duXCI6IFsxMzksIDY5LCAxOV0sXHJcblx0XCJzYWxtb25cIjogWzI1MCwgMTI4LCAxMTRdLFxyXG5cdFwic2FuZHlicm93blwiOiBbMjQ0LCAxNjQsIDk2XSxcclxuXHRcInNlYWdyZWVuXCI6IFs0NiwgMTM5LCA4N10sXHJcblx0XCJzZWFzaGVsbFwiOiBbMjU1LCAyNDUsIDIzOF0sXHJcblx0XCJzaWVubmFcIjogWzE2MCwgODIsIDQ1XSxcclxuXHRcInNpbHZlclwiOiBbMTkyLCAxOTIsIDE5Ml0sXHJcblx0XCJza3libHVlXCI6IFsxMzUsIDIwNiwgMjM1XSxcclxuXHRcInNsYXRlYmx1ZVwiOiBbMTA2LCA5MCwgMjA1XSxcclxuXHRcInNsYXRlZ3JheVwiOiBbMTEyLCAxMjgsIDE0NF0sXHJcblx0XCJzbGF0ZWdyZXlcIjogWzExMiwgMTI4LCAxNDRdLFxyXG5cdFwic25vd1wiOiBbMjU1LCAyNTAsIDI1MF0sXHJcblx0XCJzcHJpbmdncmVlblwiOiBbMCwgMjU1LCAxMjddLFxyXG5cdFwic3RlZWxibHVlXCI6IFs3MCwgMTMwLCAxODBdLFxyXG5cdFwidGFuXCI6IFsyMTAsIDE4MCwgMTQwXSxcclxuXHRcInRlYWxcIjogWzAsIDEyOCwgMTI4XSxcclxuXHRcInRoaXN0bGVcIjogWzIxNiwgMTkxLCAyMTZdLFxyXG5cdFwidG9tYXRvXCI6IFsyNTUsIDk5LCA3MV0sXHJcblx0XCJ0dXJxdW9pc2VcIjogWzY0LCAyMjQsIDIwOF0sXHJcblx0XCJ2aW9sZXRcIjogWzIzOCwgMTMwLCAyMzhdLFxyXG5cdFwid2hlYXRcIjogWzI0NSwgMjIyLCAxNzldLFxyXG5cdFwid2hpdGVcIjogWzI1NSwgMjU1LCAyNTVdLFxyXG5cdFwid2hpdGVzbW9rZVwiOiBbMjQ1LCAyNDUsIDI0NV0sXHJcblx0XCJ5ZWxsb3dcIjogWzI1NSwgMjU1LCAwXSxcclxuXHRcInllbGxvd2dyZWVuXCI6IFsxNTQsIDIwNSwgNTBdXHJcbn07XHJcbiIsICIvKiBNSVQgbGljZW5zZSAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tbWl4ZWQtb3BlcmF0b3JzICovXG5jb25zdCBjc3NLZXl3b3JkcyA9IHJlcXVpcmUoJ2NvbG9yLW5hbWUnKTtcblxuLy8gTk9URTogY29udmVyc2lvbnMgc2hvdWxkIG9ubHkgcmV0dXJuIHByaW1pdGl2ZSB2YWx1ZXMgKGkuZS4gYXJyYXlzLCBvclxuLy8gICAgICAgdmFsdWVzIHRoYXQgZ2l2ZSBjb3JyZWN0IGB0eXBlb2ZgIHJlc3VsdHMpLlxuLy8gICAgICAgZG8gbm90IHVzZSBib3ggdmFsdWVzIHR5cGVzIChpLmUuIE51bWJlcigpLCBTdHJpbmcoKSwgZXRjLilcblxuY29uc3QgcmV2ZXJzZUtleXdvcmRzID0ge307XG5mb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhjc3NLZXl3b3JkcykpIHtcblx0cmV2ZXJzZUtleXdvcmRzW2Nzc0tleXdvcmRzW2tleV1dID0ga2V5O1xufVxuXG5jb25zdCBjb252ZXJ0ID0ge1xuXHRyZ2I6IHtjaGFubmVsczogMywgbGFiZWxzOiAncmdiJ30sXG5cdGhzbDoge2NoYW5uZWxzOiAzLCBsYWJlbHM6ICdoc2wnfSxcblx0aHN2OiB7Y2hhbm5lbHM6IDMsIGxhYmVsczogJ2hzdid9LFxuXHRod2I6IHtjaGFubmVsczogMywgbGFiZWxzOiAnaHdiJ30sXG5cdGNteWs6IHtjaGFubmVsczogNCwgbGFiZWxzOiAnY215ayd9LFxuXHR4eXo6IHtjaGFubmVsczogMywgbGFiZWxzOiAneHl6J30sXG5cdGxhYjoge2NoYW5uZWxzOiAzLCBsYWJlbHM6ICdsYWInfSxcblx0bGNoOiB7Y2hhbm5lbHM6IDMsIGxhYmVsczogJ2xjaCd9LFxuXHRoZXg6IHtjaGFubmVsczogMSwgbGFiZWxzOiBbJ2hleCddfSxcblx0a2V5d29yZDoge2NoYW5uZWxzOiAxLCBsYWJlbHM6IFsna2V5d29yZCddfSxcblx0YW5zaTE2OiB7Y2hhbm5lbHM6IDEsIGxhYmVsczogWydhbnNpMTYnXX0sXG5cdGFuc2kyNTY6IHtjaGFubmVsczogMSwgbGFiZWxzOiBbJ2Fuc2kyNTYnXX0sXG5cdGhjZzoge2NoYW5uZWxzOiAzLCBsYWJlbHM6IFsnaCcsICdjJywgJ2cnXX0sXG5cdGFwcGxlOiB7Y2hhbm5lbHM6IDMsIGxhYmVsczogWydyMTYnLCAnZzE2JywgJ2IxNiddfSxcblx0Z3JheToge2NoYW5uZWxzOiAxLCBsYWJlbHM6IFsnZ3JheSddfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBjb252ZXJ0O1xuXG4vLyBIaWRlIC5jaGFubmVscyBhbmQgLmxhYmVscyBwcm9wZXJ0aWVzXG5mb3IgKGNvbnN0IG1vZGVsIG9mIE9iamVjdC5rZXlzKGNvbnZlcnQpKSB7XG5cdGlmICghKCdjaGFubmVscycgaW4gY29udmVydFttb2RlbF0pKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIGNoYW5uZWxzIHByb3BlcnR5OiAnICsgbW9kZWwpO1xuXHR9XG5cblx0aWYgKCEoJ2xhYmVscycgaW4gY29udmVydFttb2RlbF0pKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIGNoYW5uZWwgbGFiZWxzIHByb3BlcnR5OiAnICsgbW9kZWwpO1xuXHR9XG5cblx0aWYgKGNvbnZlcnRbbW9kZWxdLmxhYmVscy5sZW5ndGggIT09IGNvbnZlcnRbbW9kZWxdLmNoYW5uZWxzKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdjaGFubmVsIGFuZCBsYWJlbCBjb3VudHMgbWlzbWF0Y2g6ICcgKyBtb2RlbCk7XG5cdH1cblxuXHRjb25zdCB7Y2hhbm5lbHMsIGxhYmVsc30gPSBjb252ZXJ0W21vZGVsXTtcblx0ZGVsZXRlIGNvbnZlcnRbbW9kZWxdLmNoYW5uZWxzO1xuXHRkZWxldGUgY29udmVydFttb2RlbF0ubGFiZWxzO1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoY29udmVydFttb2RlbF0sICdjaGFubmVscycsIHt2YWx1ZTogY2hhbm5lbHN9KTtcblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGNvbnZlcnRbbW9kZWxdLCAnbGFiZWxzJywge3ZhbHVlOiBsYWJlbHN9KTtcbn1cblxuY29udmVydC5yZ2IuaHNsID0gZnVuY3Rpb24gKHJnYikge1xuXHRjb25zdCByID0gcmdiWzBdIC8gMjU1O1xuXHRjb25zdCBnID0gcmdiWzFdIC8gMjU1O1xuXHRjb25zdCBiID0gcmdiWzJdIC8gMjU1O1xuXHRjb25zdCBtaW4gPSBNYXRoLm1pbihyLCBnLCBiKTtcblx0Y29uc3QgbWF4ID0gTWF0aC5tYXgociwgZywgYik7XG5cdGNvbnN0IGRlbHRhID0gbWF4IC0gbWluO1xuXHRsZXQgaDtcblx0bGV0IHM7XG5cblx0aWYgKG1heCA9PT0gbWluKSB7XG5cdFx0aCA9IDA7XG5cdH0gZWxzZSBpZiAociA9PT0gbWF4KSB7XG5cdFx0aCA9IChnIC0gYikgLyBkZWx0YTtcblx0fSBlbHNlIGlmIChnID09PSBtYXgpIHtcblx0XHRoID0gMiArIChiIC0gcikgLyBkZWx0YTtcblx0fSBlbHNlIGlmIChiID09PSBtYXgpIHtcblx0XHRoID0gNCArIChyIC0gZykgLyBkZWx0YTtcblx0fVxuXG5cdGggPSBNYXRoLm1pbihoICogNjAsIDM2MCk7XG5cblx0aWYgKGggPCAwKSB7XG5cdFx0aCArPSAzNjA7XG5cdH1cblxuXHRjb25zdCBsID0gKG1pbiArIG1heCkgLyAyO1xuXG5cdGlmIChtYXggPT09IG1pbikge1xuXHRcdHMgPSAwO1xuXHR9IGVsc2UgaWYgKGwgPD0gMC41KSB7XG5cdFx0cyA9IGRlbHRhIC8gKG1heCArIG1pbik7XG5cdH0gZWxzZSB7XG5cdFx0cyA9IGRlbHRhIC8gKDIgLSBtYXggLSBtaW4pO1xuXHR9XG5cblx0cmV0dXJuIFtoLCBzICogMTAwLCBsICogMTAwXTtcbn07XG5cbmNvbnZlcnQucmdiLmhzdiA9IGZ1bmN0aW9uIChyZ2IpIHtcblx0bGV0IHJkaWY7XG5cdGxldCBnZGlmO1xuXHRsZXQgYmRpZjtcblx0bGV0IGg7XG5cdGxldCBzO1xuXG5cdGNvbnN0IHIgPSByZ2JbMF0gLyAyNTU7XG5cdGNvbnN0IGcgPSByZ2JbMV0gLyAyNTU7XG5cdGNvbnN0IGIgPSByZ2JbMl0gLyAyNTU7XG5cdGNvbnN0IHYgPSBNYXRoLm1heChyLCBnLCBiKTtcblx0Y29uc3QgZGlmZiA9IHYgLSBNYXRoLm1pbihyLCBnLCBiKTtcblx0Y29uc3QgZGlmZmMgPSBmdW5jdGlvbiAoYykge1xuXHRcdHJldHVybiAodiAtIGMpIC8gNiAvIGRpZmYgKyAxIC8gMjtcblx0fTtcblxuXHRpZiAoZGlmZiA9PT0gMCkge1xuXHRcdGggPSAwO1xuXHRcdHMgPSAwO1xuXHR9IGVsc2Uge1xuXHRcdHMgPSBkaWZmIC8gdjtcblx0XHRyZGlmID0gZGlmZmMocik7XG5cdFx0Z2RpZiA9IGRpZmZjKGcpO1xuXHRcdGJkaWYgPSBkaWZmYyhiKTtcblxuXHRcdGlmIChyID09PSB2KSB7XG5cdFx0XHRoID0gYmRpZiAtIGdkaWY7XG5cdFx0fSBlbHNlIGlmIChnID09PSB2KSB7XG5cdFx0XHRoID0gKDEgLyAzKSArIHJkaWYgLSBiZGlmO1xuXHRcdH0gZWxzZSBpZiAoYiA9PT0gdikge1xuXHRcdFx0aCA9ICgyIC8gMykgKyBnZGlmIC0gcmRpZjtcblx0XHR9XG5cblx0XHRpZiAoaCA8IDApIHtcblx0XHRcdGggKz0gMTtcblx0XHR9IGVsc2UgaWYgKGggPiAxKSB7XG5cdFx0XHRoIC09IDE7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIFtcblx0XHRoICogMzYwLFxuXHRcdHMgKiAxMDAsXG5cdFx0diAqIDEwMFxuXHRdO1xufTtcblxuY29udmVydC5yZ2IuaHdiID0gZnVuY3Rpb24gKHJnYikge1xuXHRjb25zdCByID0gcmdiWzBdO1xuXHRjb25zdCBnID0gcmdiWzFdO1xuXHRsZXQgYiA9IHJnYlsyXTtcblx0Y29uc3QgaCA9IGNvbnZlcnQucmdiLmhzbChyZ2IpWzBdO1xuXHRjb25zdCB3ID0gMSAvIDI1NSAqIE1hdGgubWluKHIsIE1hdGgubWluKGcsIGIpKTtcblxuXHRiID0gMSAtIDEgLyAyNTUgKiBNYXRoLm1heChyLCBNYXRoLm1heChnLCBiKSk7XG5cblx0cmV0dXJuIFtoLCB3ICogMTAwLCBiICogMTAwXTtcbn07XG5cbmNvbnZlcnQucmdiLmNteWsgPSBmdW5jdGlvbiAocmdiKSB7XG5cdGNvbnN0IHIgPSByZ2JbMF0gLyAyNTU7XG5cdGNvbnN0IGcgPSByZ2JbMV0gLyAyNTU7XG5cdGNvbnN0IGIgPSByZ2JbMl0gLyAyNTU7XG5cblx0Y29uc3QgayA9IE1hdGgubWluKDEgLSByLCAxIC0gZywgMSAtIGIpO1xuXHRjb25zdCBjID0gKDEgLSByIC0gaykgLyAoMSAtIGspIHx8IDA7XG5cdGNvbnN0IG0gPSAoMSAtIGcgLSBrKSAvICgxIC0gaykgfHwgMDtcblx0Y29uc3QgeSA9ICgxIC0gYiAtIGspIC8gKDEgLSBrKSB8fCAwO1xuXG5cdHJldHVybiBbYyAqIDEwMCwgbSAqIDEwMCwgeSAqIDEwMCwgayAqIDEwMF07XG59O1xuXG5mdW5jdGlvbiBjb21wYXJhdGl2ZURpc3RhbmNlKHgsIHkpIHtcblx0Lypcblx0XHRTZWUgaHR0cHM6Ly9lbi5tLndpa2lwZWRpYS5vcmcvd2lraS9FdWNsaWRlYW5fZGlzdGFuY2UjU3F1YXJlZF9FdWNsaWRlYW5fZGlzdGFuY2Vcblx0Ki9cblx0cmV0dXJuIChcblx0XHQoKHhbMF0gLSB5WzBdKSAqKiAyKSArXG5cdFx0KCh4WzFdIC0geVsxXSkgKiogMikgK1xuXHRcdCgoeFsyXSAtIHlbMl0pICoqIDIpXG5cdCk7XG59XG5cbmNvbnZlcnQucmdiLmtleXdvcmQgPSBmdW5jdGlvbiAocmdiKSB7XG5cdGNvbnN0IHJldmVyc2VkID0gcmV2ZXJzZUtleXdvcmRzW3JnYl07XG5cdGlmIChyZXZlcnNlZCkge1xuXHRcdHJldHVybiByZXZlcnNlZDtcblx0fVxuXG5cdGxldCBjdXJyZW50Q2xvc2VzdERpc3RhbmNlID0gSW5maW5pdHk7XG5cdGxldCBjdXJyZW50Q2xvc2VzdEtleXdvcmQ7XG5cblx0Zm9yIChjb25zdCBrZXl3b3JkIG9mIE9iamVjdC5rZXlzKGNzc0tleXdvcmRzKSkge1xuXHRcdGNvbnN0IHZhbHVlID0gY3NzS2V5d29yZHNba2V5d29yZF07XG5cblx0XHQvLyBDb21wdXRlIGNvbXBhcmF0aXZlIGRpc3RhbmNlXG5cdFx0Y29uc3QgZGlzdGFuY2UgPSBjb21wYXJhdGl2ZURpc3RhbmNlKHJnYiwgdmFsdWUpO1xuXG5cdFx0Ly8gQ2hlY2sgaWYgaXRzIGxlc3MsIGlmIHNvIHNldCBhcyBjbG9zZXN0XG5cdFx0aWYgKGRpc3RhbmNlIDwgY3VycmVudENsb3Nlc3REaXN0YW5jZSkge1xuXHRcdFx0Y3VycmVudENsb3Nlc3REaXN0YW5jZSA9IGRpc3RhbmNlO1xuXHRcdFx0Y3VycmVudENsb3Nlc3RLZXl3b3JkID0ga2V5d29yZDtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gY3VycmVudENsb3Nlc3RLZXl3b3JkO1xufTtcblxuY29udmVydC5rZXl3b3JkLnJnYiA9IGZ1bmN0aW9uIChrZXl3b3JkKSB7XG5cdHJldHVybiBjc3NLZXl3b3Jkc1trZXl3b3JkXTtcbn07XG5cbmNvbnZlcnQucmdiLnh5eiA9IGZ1bmN0aW9uIChyZ2IpIHtcblx0bGV0IHIgPSByZ2JbMF0gLyAyNTU7XG5cdGxldCBnID0gcmdiWzFdIC8gMjU1O1xuXHRsZXQgYiA9IHJnYlsyXSAvIDI1NTtcblxuXHQvLyBBc3N1bWUgc1JHQlxuXHRyID0gciA+IDAuMDQwNDUgPyAoKChyICsgMC4wNTUpIC8gMS4wNTUpICoqIDIuNCkgOiAociAvIDEyLjkyKTtcblx0ZyA9IGcgPiAwLjA0MDQ1ID8gKCgoZyArIDAuMDU1KSAvIDEuMDU1KSAqKiAyLjQpIDogKGcgLyAxMi45Mik7XG5cdGIgPSBiID4gMC4wNDA0NSA/ICgoKGIgKyAwLjA1NSkgLyAxLjA1NSkgKiogMi40KSA6IChiIC8gMTIuOTIpO1xuXG5cdGNvbnN0IHggPSAociAqIDAuNDEyNCkgKyAoZyAqIDAuMzU3NikgKyAoYiAqIDAuMTgwNSk7XG5cdGNvbnN0IHkgPSAociAqIDAuMjEyNikgKyAoZyAqIDAuNzE1MikgKyAoYiAqIDAuMDcyMik7XG5cdGNvbnN0IHogPSAociAqIDAuMDE5MykgKyAoZyAqIDAuMTE5MikgKyAoYiAqIDAuOTUwNSk7XG5cblx0cmV0dXJuIFt4ICogMTAwLCB5ICogMTAwLCB6ICogMTAwXTtcbn07XG5cbmNvbnZlcnQucmdiLmxhYiA9IGZ1bmN0aW9uIChyZ2IpIHtcblx0Y29uc3QgeHl6ID0gY29udmVydC5yZ2IueHl6KHJnYik7XG5cdGxldCB4ID0geHl6WzBdO1xuXHRsZXQgeSA9IHh5elsxXTtcblx0bGV0IHogPSB4eXpbMl07XG5cblx0eCAvPSA5NS4wNDc7XG5cdHkgLz0gMTAwO1xuXHR6IC89IDEwOC44ODM7XG5cblx0eCA9IHggPiAwLjAwODg1NiA/ICh4ICoqICgxIC8gMykpIDogKDcuNzg3ICogeCkgKyAoMTYgLyAxMTYpO1xuXHR5ID0geSA+IDAuMDA4ODU2ID8gKHkgKiogKDEgLyAzKSkgOiAoNy43ODcgKiB5KSArICgxNiAvIDExNik7XG5cdHogPSB6ID4gMC4wMDg4NTYgPyAoeiAqKiAoMSAvIDMpKSA6ICg3Ljc4NyAqIHopICsgKDE2IC8gMTE2KTtcblxuXHRjb25zdCBsID0gKDExNiAqIHkpIC0gMTY7XG5cdGNvbnN0IGEgPSA1MDAgKiAoeCAtIHkpO1xuXHRjb25zdCBiID0gMjAwICogKHkgLSB6KTtcblxuXHRyZXR1cm4gW2wsIGEsIGJdO1xufTtcblxuY29udmVydC5oc2wucmdiID0gZnVuY3Rpb24gKGhzbCkge1xuXHRjb25zdCBoID0gaHNsWzBdIC8gMzYwO1xuXHRjb25zdCBzID0gaHNsWzFdIC8gMTAwO1xuXHRjb25zdCBsID0gaHNsWzJdIC8gMTAwO1xuXHRsZXQgdDI7XG5cdGxldCB0Mztcblx0bGV0IHZhbDtcblxuXHRpZiAocyA9PT0gMCkge1xuXHRcdHZhbCA9IGwgKiAyNTU7XG5cdFx0cmV0dXJuIFt2YWwsIHZhbCwgdmFsXTtcblx0fVxuXG5cdGlmIChsIDwgMC41KSB7XG5cdFx0dDIgPSBsICogKDEgKyBzKTtcblx0fSBlbHNlIHtcblx0XHR0MiA9IGwgKyBzIC0gbCAqIHM7XG5cdH1cblxuXHRjb25zdCB0MSA9IDIgKiBsIC0gdDI7XG5cblx0Y29uc3QgcmdiID0gWzAsIDAsIDBdO1xuXHRmb3IgKGxldCBpID0gMDsgaSA8IDM7IGkrKykge1xuXHRcdHQzID0gaCArIDEgLyAzICogLShpIC0gMSk7XG5cdFx0aWYgKHQzIDwgMCkge1xuXHRcdFx0dDMrKztcblx0XHR9XG5cblx0XHRpZiAodDMgPiAxKSB7XG5cdFx0XHR0My0tO1xuXHRcdH1cblxuXHRcdGlmICg2ICogdDMgPCAxKSB7XG5cdFx0XHR2YWwgPSB0MSArICh0MiAtIHQxKSAqIDYgKiB0Mztcblx0XHR9IGVsc2UgaWYgKDIgKiB0MyA8IDEpIHtcblx0XHRcdHZhbCA9IHQyO1xuXHRcdH0gZWxzZSBpZiAoMyAqIHQzIDwgMikge1xuXHRcdFx0dmFsID0gdDEgKyAodDIgLSB0MSkgKiAoMiAvIDMgLSB0MykgKiA2O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR2YWwgPSB0MTtcblx0XHR9XG5cblx0XHRyZ2JbaV0gPSB2YWwgKiAyNTU7XG5cdH1cblxuXHRyZXR1cm4gcmdiO1xufTtcblxuY29udmVydC5oc2wuaHN2ID0gZnVuY3Rpb24gKGhzbCkge1xuXHRjb25zdCBoID0gaHNsWzBdO1xuXHRsZXQgcyA9IGhzbFsxXSAvIDEwMDtcblx0bGV0IGwgPSBoc2xbMl0gLyAxMDA7XG5cdGxldCBzbWluID0gcztcblx0Y29uc3QgbG1pbiA9IE1hdGgubWF4KGwsIDAuMDEpO1xuXG5cdGwgKj0gMjtcblx0cyAqPSAobCA8PSAxKSA/IGwgOiAyIC0gbDtcblx0c21pbiAqPSBsbWluIDw9IDEgPyBsbWluIDogMiAtIGxtaW47XG5cdGNvbnN0IHYgPSAobCArIHMpIC8gMjtcblx0Y29uc3Qgc3YgPSBsID09PSAwID8gKDIgKiBzbWluKSAvIChsbWluICsgc21pbikgOiAoMiAqIHMpIC8gKGwgKyBzKTtcblxuXHRyZXR1cm4gW2gsIHN2ICogMTAwLCB2ICogMTAwXTtcbn07XG5cbmNvbnZlcnQuaHN2LnJnYiA9IGZ1bmN0aW9uIChoc3YpIHtcblx0Y29uc3QgaCA9IGhzdlswXSAvIDYwO1xuXHRjb25zdCBzID0gaHN2WzFdIC8gMTAwO1xuXHRsZXQgdiA9IGhzdlsyXSAvIDEwMDtcblx0Y29uc3QgaGkgPSBNYXRoLmZsb29yKGgpICUgNjtcblxuXHRjb25zdCBmID0gaCAtIE1hdGguZmxvb3IoaCk7XG5cdGNvbnN0IHAgPSAyNTUgKiB2ICogKDEgLSBzKTtcblx0Y29uc3QgcSA9IDI1NSAqIHYgKiAoMSAtIChzICogZikpO1xuXHRjb25zdCB0ID0gMjU1ICogdiAqICgxIC0gKHMgKiAoMSAtIGYpKSk7XG5cdHYgKj0gMjU1O1xuXG5cdHN3aXRjaCAoaGkpIHtcblx0XHRjYXNlIDA6XG5cdFx0XHRyZXR1cm4gW3YsIHQsIHBdO1xuXHRcdGNhc2UgMTpcblx0XHRcdHJldHVybiBbcSwgdiwgcF07XG5cdFx0Y2FzZSAyOlxuXHRcdFx0cmV0dXJuIFtwLCB2LCB0XTtcblx0XHRjYXNlIDM6XG5cdFx0XHRyZXR1cm4gW3AsIHEsIHZdO1xuXHRcdGNhc2UgNDpcblx0XHRcdHJldHVybiBbdCwgcCwgdl07XG5cdFx0Y2FzZSA1OlxuXHRcdFx0cmV0dXJuIFt2LCBwLCBxXTtcblx0fVxufTtcblxuY29udmVydC5oc3YuaHNsID0gZnVuY3Rpb24gKGhzdikge1xuXHRjb25zdCBoID0gaHN2WzBdO1xuXHRjb25zdCBzID0gaHN2WzFdIC8gMTAwO1xuXHRjb25zdCB2ID0gaHN2WzJdIC8gMTAwO1xuXHRjb25zdCB2bWluID0gTWF0aC5tYXgodiwgMC4wMSk7XG5cdGxldCBzbDtcblx0bGV0IGw7XG5cblx0bCA9ICgyIC0gcykgKiB2O1xuXHRjb25zdCBsbWluID0gKDIgLSBzKSAqIHZtaW47XG5cdHNsID0gcyAqIHZtaW47XG5cdHNsIC89IChsbWluIDw9IDEpID8gbG1pbiA6IDIgLSBsbWluO1xuXHRzbCA9IHNsIHx8IDA7XG5cdGwgLz0gMjtcblxuXHRyZXR1cm4gW2gsIHNsICogMTAwLCBsICogMTAwXTtcbn07XG5cbi8vIGh0dHA6Ly9kZXYudzMub3JnL2Nzc3dnL2Nzcy1jb2xvci8jaHdiLXRvLXJnYlxuY29udmVydC5od2IucmdiID0gZnVuY3Rpb24gKGh3Yikge1xuXHRjb25zdCBoID0gaHdiWzBdIC8gMzYwO1xuXHRsZXQgd2ggPSBod2JbMV0gLyAxMDA7XG5cdGxldCBibCA9IGh3YlsyXSAvIDEwMDtcblx0Y29uc3QgcmF0aW8gPSB3aCArIGJsO1xuXHRsZXQgZjtcblxuXHQvLyBXaCArIGJsIGNhbnQgYmUgPiAxXG5cdGlmIChyYXRpbyA+IDEpIHtcblx0XHR3aCAvPSByYXRpbztcblx0XHRibCAvPSByYXRpbztcblx0fVxuXG5cdGNvbnN0IGkgPSBNYXRoLmZsb29yKDYgKiBoKTtcblx0Y29uc3QgdiA9IDEgLSBibDtcblx0ZiA9IDYgKiBoIC0gaTtcblxuXHRpZiAoKGkgJiAweDAxKSAhPT0gMCkge1xuXHRcdGYgPSAxIC0gZjtcblx0fVxuXG5cdGNvbnN0IG4gPSB3aCArIGYgKiAodiAtIHdoKTsgLy8gTGluZWFyIGludGVycG9sYXRpb25cblxuXHRsZXQgcjtcblx0bGV0IGc7XG5cdGxldCBiO1xuXHQvKiBlc2xpbnQtZGlzYWJsZSBtYXgtc3RhdGVtZW50cy1wZXItbGluZSxuby1tdWx0aS1zcGFjZXMgKi9cblx0c3dpdGNoIChpKSB7XG5cdFx0ZGVmYXVsdDpcblx0XHRjYXNlIDY6XG5cdFx0Y2FzZSAwOiByID0gdjsgIGcgPSBuOyAgYiA9IHdoOyBicmVhaztcblx0XHRjYXNlIDE6IHIgPSBuOyAgZyA9IHY7ICBiID0gd2g7IGJyZWFrO1xuXHRcdGNhc2UgMjogciA9IHdoOyBnID0gdjsgIGIgPSBuOyBicmVhaztcblx0XHRjYXNlIDM6IHIgPSB3aDsgZyA9IG47ICBiID0gdjsgYnJlYWs7XG5cdFx0Y2FzZSA0OiByID0gbjsgIGcgPSB3aDsgYiA9IHY7IGJyZWFrO1xuXHRcdGNhc2UgNTogciA9IHY7ICBnID0gd2g7IGIgPSBuOyBicmVhaztcblx0fVxuXHQvKiBlc2xpbnQtZW5hYmxlIG1heC1zdGF0ZW1lbnRzLXBlci1saW5lLG5vLW11bHRpLXNwYWNlcyAqL1xuXG5cdHJldHVybiBbciAqIDI1NSwgZyAqIDI1NSwgYiAqIDI1NV07XG59O1xuXG5jb252ZXJ0LmNteWsucmdiID0gZnVuY3Rpb24gKGNteWspIHtcblx0Y29uc3QgYyA9IGNteWtbMF0gLyAxMDA7XG5cdGNvbnN0IG0gPSBjbXlrWzFdIC8gMTAwO1xuXHRjb25zdCB5ID0gY215a1syXSAvIDEwMDtcblx0Y29uc3QgayA9IGNteWtbM10gLyAxMDA7XG5cblx0Y29uc3QgciA9IDEgLSBNYXRoLm1pbigxLCBjICogKDEgLSBrKSArIGspO1xuXHRjb25zdCBnID0gMSAtIE1hdGgubWluKDEsIG0gKiAoMSAtIGspICsgayk7XG5cdGNvbnN0IGIgPSAxIC0gTWF0aC5taW4oMSwgeSAqICgxIC0gaykgKyBrKTtcblxuXHRyZXR1cm4gW3IgKiAyNTUsIGcgKiAyNTUsIGIgKiAyNTVdO1xufTtcblxuY29udmVydC54eXoucmdiID0gZnVuY3Rpb24gKHh5eikge1xuXHRjb25zdCB4ID0geHl6WzBdIC8gMTAwO1xuXHRjb25zdCB5ID0geHl6WzFdIC8gMTAwO1xuXHRjb25zdCB6ID0geHl6WzJdIC8gMTAwO1xuXHRsZXQgcjtcblx0bGV0IGc7XG5cdGxldCBiO1xuXG5cdHIgPSAoeCAqIDMuMjQwNikgKyAoeSAqIC0xLjUzNzIpICsgKHogKiAtMC40OTg2KTtcblx0ZyA9ICh4ICogLTAuOTY4OSkgKyAoeSAqIDEuODc1OCkgKyAoeiAqIDAuMDQxNSk7XG5cdGIgPSAoeCAqIDAuMDU1NykgKyAoeSAqIC0wLjIwNDApICsgKHogKiAxLjA1NzApO1xuXG5cdC8vIEFzc3VtZSBzUkdCXG5cdHIgPSByID4gMC4wMDMxMzA4XG5cdFx0PyAoKDEuMDU1ICogKHIgKiogKDEuMCAvIDIuNCkpKSAtIDAuMDU1KVxuXHRcdDogciAqIDEyLjkyO1xuXG5cdGcgPSBnID4gMC4wMDMxMzA4XG5cdFx0PyAoKDEuMDU1ICogKGcgKiogKDEuMCAvIDIuNCkpKSAtIDAuMDU1KVxuXHRcdDogZyAqIDEyLjkyO1xuXG5cdGIgPSBiID4gMC4wMDMxMzA4XG5cdFx0PyAoKDEuMDU1ICogKGIgKiogKDEuMCAvIDIuNCkpKSAtIDAuMDU1KVxuXHRcdDogYiAqIDEyLjkyO1xuXG5cdHIgPSBNYXRoLm1pbihNYXRoLm1heCgwLCByKSwgMSk7XG5cdGcgPSBNYXRoLm1pbihNYXRoLm1heCgwLCBnKSwgMSk7XG5cdGIgPSBNYXRoLm1pbihNYXRoLm1heCgwLCBiKSwgMSk7XG5cblx0cmV0dXJuIFtyICogMjU1LCBnICogMjU1LCBiICogMjU1XTtcbn07XG5cbmNvbnZlcnQueHl6LmxhYiA9IGZ1bmN0aW9uICh4eXopIHtcblx0bGV0IHggPSB4eXpbMF07XG5cdGxldCB5ID0geHl6WzFdO1xuXHRsZXQgeiA9IHh5elsyXTtcblxuXHR4IC89IDk1LjA0Nztcblx0eSAvPSAxMDA7XG5cdHogLz0gMTA4Ljg4MztcblxuXHR4ID0geCA+IDAuMDA4ODU2ID8gKHggKiogKDEgLyAzKSkgOiAoNy43ODcgKiB4KSArICgxNiAvIDExNik7XG5cdHkgPSB5ID4gMC4wMDg4NTYgPyAoeSAqKiAoMSAvIDMpKSA6ICg3Ljc4NyAqIHkpICsgKDE2IC8gMTE2KTtcblx0eiA9IHogPiAwLjAwODg1NiA/ICh6ICoqICgxIC8gMykpIDogKDcuNzg3ICogeikgKyAoMTYgLyAxMTYpO1xuXG5cdGNvbnN0IGwgPSAoMTE2ICogeSkgLSAxNjtcblx0Y29uc3QgYSA9IDUwMCAqICh4IC0geSk7XG5cdGNvbnN0IGIgPSAyMDAgKiAoeSAtIHopO1xuXG5cdHJldHVybiBbbCwgYSwgYl07XG59O1xuXG5jb252ZXJ0LmxhYi54eXogPSBmdW5jdGlvbiAobGFiKSB7XG5cdGNvbnN0IGwgPSBsYWJbMF07XG5cdGNvbnN0IGEgPSBsYWJbMV07XG5cdGNvbnN0IGIgPSBsYWJbMl07XG5cdGxldCB4O1xuXHRsZXQgeTtcblx0bGV0IHo7XG5cblx0eSA9IChsICsgMTYpIC8gMTE2O1xuXHR4ID0gYSAvIDUwMCArIHk7XG5cdHogPSB5IC0gYiAvIDIwMDtcblxuXHRjb25zdCB5MiA9IHkgKiogMztcblx0Y29uc3QgeDIgPSB4ICoqIDM7XG5cdGNvbnN0IHoyID0geiAqKiAzO1xuXHR5ID0geTIgPiAwLjAwODg1NiA/IHkyIDogKHkgLSAxNiAvIDExNikgLyA3Ljc4Nztcblx0eCA9IHgyID4gMC4wMDg4NTYgPyB4MiA6ICh4IC0gMTYgLyAxMTYpIC8gNy43ODc7XG5cdHogPSB6MiA+IDAuMDA4ODU2ID8gejIgOiAoeiAtIDE2IC8gMTE2KSAvIDcuNzg3O1xuXG5cdHggKj0gOTUuMDQ3O1xuXHR5ICo9IDEwMDtcblx0eiAqPSAxMDguODgzO1xuXG5cdHJldHVybiBbeCwgeSwgel07XG59O1xuXG5jb252ZXJ0LmxhYi5sY2ggPSBmdW5jdGlvbiAobGFiKSB7XG5cdGNvbnN0IGwgPSBsYWJbMF07XG5cdGNvbnN0IGEgPSBsYWJbMV07XG5cdGNvbnN0IGIgPSBsYWJbMl07XG5cdGxldCBoO1xuXG5cdGNvbnN0IGhyID0gTWF0aC5hdGFuMihiLCBhKTtcblx0aCA9IGhyICogMzYwIC8gMiAvIE1hdGguUEk7XG5cblx0aWYgKGggPCAwKSB7XG5cdFx0aCArPSAzNjA7XG5cdH1cblxuXHRjb25zdCBjID0gTWF0aC5zcXJ0KGEgKiBhICsgYiAqIGIpO1xuXG5cdHJldHVybiBbbCwgYywgaF07XG59O1xuXG5jb252ZXJ0LmxjaC5sYWIgPSBmdW5jdGlvbiAobGNoKSB7XG5cdGNvbnN0IGwgPSBsY2hbMF07XG5cdGNvbnN0IGMgPSBsY2hbMV07XG5cdGNvbnN0IGggPSBsY2hbMl07XG5cblx0Y29uc3QgaHIgPSBoIC8gMzYwICogMiAqIE1hdGguUEk7XG5cdGNvbnN0IGEgPSBjICogTWF0aC5jb3MoaHIpO1xuXHRjb25zdCBiID0gYyAqIE1hdGguc2luKGhyKTtcblxuXHRyZXR1cm4gW2wsIGEsIGJdO1xufTtcblxuY29udmVydC5yZ2IuYW5zaTE2ID0gZnVuY3Rpb24gKGFyZ3MsIHNhdHVyYXRpb24gPSBudWxsKSB7XG5cdGNvbnN0IFtyLCBnLCBiXSA9IGFyZ3M7XG5cdGxldCB2YWx1ZSA9IHNhdHVyYXRpb24gPT09IG51bGwgPyBjb252ZXJ0LnJnYi5oc3YoYXJncylbMl0gOiBzYXR1cmF0aW9uOyAvLyBIc3YgLT4gYW5zaTE2IG9wdGltaXphdGlvblxuXG5cdHZhbHVlID0gTWF0aC5yb3VuZCh2YWx1ZSAvIDUwKTtcblxuXHRpZiAodmFsdWUgPT09IDApIHtcblx0XHRyZXR1cm4gMzA7XG5cdH1cblxuXHRsZXQgYW5zaSA9IDMwXG5cdFx0KyAoKE1hdGgucm91bmQoYiAvIDI1NSkgPDwgMilcblx0XHR8IChNYXRoLnJvdW5kKGcgLyAyNTUpIDw8IDEpXG5cdFx0fCBNYXRoLnJvdW5kKHIgLyAyNTUpKTtcblxuXHRpZiAodmFsdWUgPT09IDIpIHtcblx0XHRhbnNpICs9IDYwO1xuXHR9XG5cblx0cmV0dXJuIGFuc2k7XG59O1xuXG5jb252ZXJ0Lmhzdi5hbnNpMTYgPSBmdW5jdGlvbiAoYXJncykge1xuXHQvLyBPcHRpbWl6YXRpb24gaGVyZTsgd2UgYWxyZWFkeSBrbm93IHRoZSB2YWx1ZSBhbmQgZG9uJ3QgbmVlZCB0byBnZXRcblx0Ly8gaXQgY29udmVydGVkIGZvciB1cy5cblx0cmV0dXJuIGNvbnZlcnQucmdiLmFuc2kxNihjb252ZXJ0Lmhzdi5yZ2IoYXJncyksIGFyZ3NbMl0pO1xufTtcblxuY29udmVydC5yZ2IuYW5zaTI1NiA9IGZ1bmN0aW9uIChhcmdzKSB7XG5cdGNvbnN0IHIgPSBhcmdzWzBdO1xuXHRjb25zdCBnID0gYXJnc1sxXTtcblx0Y29uc3QgYiA9IGFyZ3NbMl07XG5cblx0Ly8gV2UgdXNlIHRoZSBleHRlbmRlZCBncmV5c2NhbGUgcGFsZXR0ZSBoZXJlLCB3aXRoIHRoZSBleGNlcHRpb24gb2Zcblx0Ly8gYmxhY2sgYW5kIHdoaXRlLiBub3JtYWwgcGFsZXR0ZSBvbmx5IGhhcyA0IGdyZXlzY2FsZSBzaGFkZXMuXG5cdGlmIChyID09PSBnICYmIGcgPT09IGIpIHtcblx0XHRpZiAociA8IDgpIHtcblx0XHRcdHJldHVybiAxNjtcblx0XHR9XG5cblx0XHRpZiAociA+IDI0OCkge1xuXHRcdFx0cmV0dXJuIDIzMTtcblx0XHR9XG5cblx0XHRyZXR1cm4gTWF0aC5yb3VuZCgoKHIgLSA4KSAvIDI0NykgKiAyNCkgKyAyMzI7XG5cdH1cblxuXHRjb25zdCBhbnNpID0gMTZcblx0XHQrICgzNiAqIE1hdGgucm91bmQociAvIDI1NSAqIDUpKVxuXHRcdCsgKDYgKiBNYXRoLnJvdW5kKGcgLyAyNTUgKiA1KSlcblx0XHQrIE1hdGgucm91bmQoYiAvIDI1NSAqIDUpO1xuXG5cdHJldHVybiBhbnNpO1xufTtcblxuY29udmVydC5hbnNpMTYucmdiID0gZnVuY3Rpb24gKGFyZ3MpIHtcblx0bGV0IGNvbG9yID0gYXJncyAlIDEwO1xuXG5cdC8vIEhhbmRsZSBncmV5c2NhbGVcblx0aWYgKGNvbG9yID09PSAwIHx8IGNvbG9yID09PSA3KSB7XG5cdFx0aWYgKGFyZ3MgPiA1MCkge1xuXHRcdFx0Y29sb3IgKz0gMy41O1xuXHRcdH1cblxuXHRcdGNvbG9yID0gY29sb3IgLyAxMC41ICogMjU1O1xuXG5cdFx0cmV0dXJuIFtjb2xvciwgY29sb3IsIGNvbG9yXTtcblx0fVxuXG5cdGNvbnN0IG11bHQgPSAofn4oYXJncyA+IDUwKSArIDEpICogMC41O1xuXHRjb25zdCByID0gKChjb2xvciAmIDEpICogbXVsdCkgKiAyNTU7XG5cdGNvbnN0IGcgPSAoKChjb2xvciA+PiAxKSAmIDEpICogbXVsdCkgKiAyNTU7XG5cdGNvbnN0IGIgPSAoKChjb2xvciA+PiAyKSAmIDEpICogbXVsdCkgKiAyNTU7XG5cblx0cmV0dXJuIFtyLCBnLCBiXTtcbn07XG5cbmNvbnZlcnQuYW5zaTI1Ni5yZ2IgPSBmdW5jdGlvbiAoYXJncykge1xuXHQvLyBIYW5kbGUgZ3JleXNjYWxlXG5cdGlmIChhcmdzID49IDIzMikge1xuXHRcdGNvbnN0IGMgPSAoYXJncyAtIDIzMikgKiAxMCArIDg7XG5cdFx0cmV0dXJuIFtjLCBjLCBjXTtcblx0fVxuXG5cdGFyZ3MgLT0gMTY7XG5cblx0bGV0IHJlbTtcblx0Y29uc3QgciA9IE1hdGguZmxvb3IoYXJncyAvIDM2KSAvIDUgKiAyNTU7XG5cdGNvbnN0IGcgPSBNYXRoLmZsb29yKChyZW0gPSBhcmdzICUgMzYpIC8gNikgLyA1ICogMjU1O1xuXHRjb25zdCBiID0gKHJlbSAlIDYpIC8gNSAqIDI1NTtcblxuXHRyZXR1cm4gW3IsIGcsIGJdO1xufTtcblxuY29udmVydC5yZ2IuaGV4ID0gZnVuY3Rpb24gKGFyZ3MpIHtcblx0Y29uc3QgaW50ZWdlciA9ICgoTWF0aC5yb3VuZChhcmdzWzBdKSAmIDB4RkYpIDw8IDE2KVxuXHRcdCsgKChNYXRoLnJvdW5kKGFyZ3NbMV0pICYgMHhGRikgPDwgOClcblx0XHQrIChNYXRoLnJvdW5kKGFyZ3NbMl0pICYgMHhGRik7XG5cblx0Y29uc3Qgc3RyaW5nID0gaW50ZWdlci50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtcblx0cmV0dXJuICcwMDAwMDAnLnN1YnN0cmluZyhzdHJpbmcubGVuZ3RoKSArIHN0cmluZztcbn07XG5cbmNvbnZlcnQuaGV4LnJnYiA9IGZ1bmN0aW9uIChhcmdzKSB7XG5cdGNvbnN0IG1hdGNoID0gYXJncy50b1N0cmluZygxNikubWF0Y2goL1thLWYwLTldezZ9fFthLWYwLTldezN9L2kpO1xuXHRpZiAoIW1hdGNoKSB7XG5cdFx0cmV0dXJuIFswLCAwLCAwXTtcblx0fVxuXG5cdGxldCBjb2xvclN0cmluZyA9IG1hdGNoWzBdO1xuXG5cdGlmIChtYXRjaFswXS5sZW5ndGggPT09IDMpIHtcblx0XHRjb2xvclN0cmluZyA9IGNvbG9yU3RyaW5nLnNwbGl0KCcnKS5tYXAoY2hhciA9PiB7XG5cdFx0XHRyZXR1cm4gY2hhciArIGNoYXI7XG5cdFx0fSkuam9pbignJyk7XG5cdH1cblxuXHRjb25zdCBpbnRlZ2VyID0gcGFyc2VJbnQoY29sb3JTdHJpbmcsIDE2KTtcblx0Y29uc3QgciA9IChpbnRlZ2VyID4+IDE2KSAmIDB4RkY7XG5cdGNvbnN0IGcgPSAoaW50ZWdlciA+PiA4KSAmIDB4RkY7XG5cdGNvbnN0IGIgPSBpbnRlZ2VyICYgMHhGRjtcblxuXHRyZXR1cm4gW3IsIGcsIGJdO1xufTtcblxuY29udmVydC5yZ2IuaGNnID0gZnVuY3Rpb24gKHJnYikge1xuXHRjb25zdCByID0gcmdiWzBdIC8gMjU1O1xuXHRjb25zdCBnID0gcmdiWzFdIC8gMjU1O1xuXHRjb25zdCBiID0gcmdiWzJdIC8gMjU1O1xuXHRjb25zdCBtYXggPSBNYXRoLm1heChNYXRoLm1heChyLCBnKSwgYik7XG5cdGNvbnN0IG1pbiA9IE1hdGgubWluKE1hdGgubWluKHIsIGcpLCBiKTtcblx0Y29uc3QgY2hyb21hID0gKG1heCAtIG1pbik7XG5cdGxldCBncmF5c2NhbGU7XG5cdGxldCBodWU7XG5cblx0aWYgKGNocm9tYSA8IDEpIHtcblx0XHRncmF5c2NhbGUgPSBtaW4gLyAoMSAtIGNocm9tYSk7XG5cdH0gZWxzZSB7XG5cdFx0Z3JheXNjYWxlID0gMDtcblx0fVxuXG5cdGlmIChjaHJvbWEgPD0gMCkge1xuXHRcdGh1ZSA9IDA7XG5cdH0gZWxzZVxuXHRpZiAobWF4ID09PSByKSB7XG5cdFx0aHVlID0gKChnIC0gYikgLyBjaHJvbWEpICUgNjtcblx0fSBlbHNlXG5cdGlmIChtYXggPT09IGcpIHtcblx0XHRodWUgPSAyICsgKGIgLSByKSAvIGNocm9tYTtcblx0fSBlbHNlIHtcblx0XHRodWUgPSA0ICsgKHIgLSBnKSAvIGNocm9tYTtcblx0fVxuXG5cdGh1ZSAvPSA2O1xuXHRodWUgJT0gMTtcblxuXHRyZXR1cm4gW2h1ZSAqIDM2MCwgY2hyb21hICogMTAwLCBncmF5c2NhbGUgKiAxMDBdO1xufTtcblxuY29udmVydC5oc2wuaGNnID0gZnVuY3Rpb24gKGhzbCkge1xuXHRjb25zdCBzID0gaHNsWzFdIC8gMTAwO1xuXHRjb25zdCBsID0gaHNsWzJdIC8gMTAwO1xuXG5cdGNvbnN0IGMgPSBsIDwgMC41ID8gKDIuMCAqIHMgKiBsKSA6ICgyLjAgKiBzICogKDEuMCAtIGwpKTtcblxuXHRsZXQgZiA9IDA7XG5cdGlmIChjIDwgMS4wKSB7XG5cdFx0ZiA9IChsIC0gMC41ICogYykgLyAoMS4wIC0gYyk7XG5cdH1cblxuXHRyZXR1cm4gW2hzbFswXSwgYyAqIDEwMCwgZiAqIDEwMF07XG59O1xuXG5jb252ZXJ0Lmhzdi5oY2cgPSBmdW5jdGlvbiAoaHN2KSB7XG5cdGNvbnN0IHMgPSBoc3ZbMV0gLyAxMDA7XG5cdGNvbnN0IHYgPSBoc3ZbMl0gLyAxMDA7XG5cblx0Y29uc3QgYyA9IHMgKiB2O1xuXHRsZXQgZiA9IDA7XG5cblx0aWYgKGMgPCAxLjApIHtcblx0XHRmID0gKHYgLSBjKSAvICgxIC0gYyk7XG5cdH1cblxuXHRyZXR1cm4gW2hzdlswXSwgYyAqIDEwMCwgZiAqIDEwMF07XG59O1xuXG5jb252ZXJ0LmhjZy5yZ2IgPSBmdW5jdGlvbiAoaGNnKSB7XG5cdGNvbnN0IGggPSBoY2dbMF0gLyAzNjA7XG5cdGNvbnN0IGMgPSBoY2dbMV0gLyAxMDA7XG5cdGNvbnN0IGcgPSBoY2dbMl0gLyAxMDA7XG5cblx0aWYgKGMgPT09IDAuMCkge1xuXHRcdHJldHVybiBbZyAqIDI1NSwgZyAqIDI1NSwgZyAqIDI1NV07XG5cdH1cblxuXHRjb25zdCBwdXJlID0gWzAsIDAsIDBdO1xuXHRjb25zdCBoaSA9IChoICUgMSkgKiA2O1xuXHRjb25zdCB2ID0gaGkgJSAxO1xuXHRjb25zdCB3ID0gMSAtIHY7XG5cdGxldCBtZyA9IDA7XG5cblx0LyogZXNsaW50LWRpc2FibGUgbWF4LXN0YXRlbWVudHMtcGVyLWxpbmUgKi9cblx0c3dpdGNoIChNYXRoLmZsb29yKGhpKSkge1xuXHRcdGNhc2UgMDpcblx0XHRcdHB1cmVbMF0gPSAxOyBwdXJlWzFdID0gdjsgcHVyZVsyXSA9IDA7IGJyZWFrO1xuXHRcdGNhc2UgMTpcblx0XHRcdHB1cmVbMF0gPSB3OyBwdXJlWzFdID0gMTsgcHVyZVsyXSA9IDA7IGJyZWFrO1xuXHRcdGNhc2UgMjpcblx0XHRcdHB1cmVbMF0gPSAwOyBwdXJlWzFdID0gMTsgcHVyZVsyXSA9IHY7IGJyZWFrO1xuXHRcdGNhc2UgMzpcblx0XHRcdHB1cmVbMF0gPSAwOyBwdXJlWzFdID0gdzsgcHVyZVsyXSA9IDE7IGJyZWFrO1xuXHRcdGNhc2UgNDpcblx0XHRcdHB1cmVbMF0gPSB2OyBwdXJlWzFdID0gMDsgcHVyZVsyXSA9IDE7IGJyZWFrO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHRwdXJlWzBdID0gMTsgcHVyZVsxXSA9IDA7IHB1cmVbMl0gPSB3O1xuXHR9XG5cdC8qIGVzbGludC1lbmFibGUgbWF4LXN0YXRlbWVudHMtcGVyLWxpbmUgKi9cblxuXHRtZyA9ICgxLjAgLSBjKSAqIGc7XG5cblx0cmV0dXJuIFtcblx0XHQoYyAqIHB1cmVbMF0gKyBtZykgKiAyNTUsXG5cdFx0KGMgKiBwdXJlWzFdICsgbWcpICogMjU1LFxuXHRcdChjICogcHVyZVsyXSArIG1nKSAqIDI1NVxuXHRdO1xufTtcblxuY29udmVydC5oY2cuaHN2ID0gZnVuY3Rpb24gKGhjZykge1xuXHRjb25zdCBjID0gaGNnWzFdIC8gMTAwO1xuXHRjb25zdCBnID0gaGNnWzJdIC8gMTAwO1xuXG5cdGNvbnN0IHYgPSBjICsgZyAqICgxLjAgLSBjKTtcblx0bGV0IGYgPSAwO1xuXG5cdGlmICh2ID4gMC4wKSB7XG5cdFx0ZiA9IGMgLyB2O1xuXHR9XG5cblx0cmV0dXJuIFtoY2dbMF0sIGYgKiAxMDAsIHYgKiAxMDBdO1xufTtcblxuY29udmVydC5oY2cuaHNsID0gZnVuY3Rpb24gKGhjZykge1xuXHRjb25zdCBjID0gaGNnWzFdIC8gMTAwO1xuXHRjb25zdCBnID0gaGNnWzJdIC8gMTAwO1xuXG5cdGNvbnN0IGwgPSBnICogKDEuMCAtIGMpICsgMC41ICogYztcblx0bGV0IHMgPSAwO1xuXG5cdGlmIChsID4gMC4wICYmIGwgPCAwLjUpIHtcblx0XHRzID0gYyAvICgyICogbCk7XG5cdH0gZWxzZVxuXHRpZiAobCA+PSAwLjUgJiYgbCA8IDEuMCkge1xuXHRcdHMgPSBjIC8gKDIgKiAoMSAtIGwpKTtcblx0fVxuXG5cdHJldHVybiBbaGNnWzBdLCBzICogMTAwLCBsICogMTAwXTtcbn07XG5cbmNvbnZlcnQuaGNnLmh3YiA9IGZ1bmN0aW9uIChoY2cpIHtcblx0Y29uc3QgYyA9IGhjZ1sxXSAvIDEwMDtcblx0Y29uc3QgZyA9IGhjZ1syXSAvIDEwMDtcblx0Y29uc3QgdiA9IGMgKyBnICogKDEuMCAtIGMpO1xuXHRyZXR1cm4gW2hjZ1swXSwgKHYgLSBjKSAqIDEwMCwgKDEgLSB2KSAqIDEwMF07XG59O1xuXG5jb252ZXJ0Lmh3Yi5oY2cgPSBmdW5jdGlvbiAoaHdiKSB7XG5cdGNvbnN0IHcgPSBod2JbMV0gLyAxMDA7XG5cdGNvbnN0IGIgPSBod2JbMl0gLyAxMDA7XG5cdGNvbnN0IHYgPSAxIC0gYjtcblx0Y29uc3QgYyA9IHYgLSB3O1xuXHRsZXQgZyA9IDA7XG5cblx0aWYgKGMgPCAxKSB7XG5cdFx0ZyA9ICh2IC0gYykgLyAoMSAtIGMpO1xuXHR9XG5cblx0cmV0dXJuIFtod2JbMF0sIGMgKiAxMDAsIGcgKiAxMDBdO1xufTtcblxuY29udmVydC5hcHBsZS5yZ2IgPSBmdW5jdGlvbiAoYXBwbGUpIHtcblx0cmV0dXJuIFsoYXBwbGVbMF0gLyA2NTUzNSkgKiAyNTUsIChhcHBsZVsxXSAvIDY1NTM1KSAqIDI1NSwgKGFwcGxlWzJdIC8gNjU1MzUpICogMjU1XTtcbn07XG5cbmNvbnZlcnQucmdiLmFwcGxlID0gZnVuY3Rpb24gKHJnYikge1xuXHRyZXR1cm4gWyhyZ2JbMF0gLyAyNTUpICogNjU1MzUsIChyZ2JbMV0gLyAyNTUpICogNjU1MzUsIChyZ2JbMl0gLyAyNTUpICogNjU1MzVdO1xufTtcblxuY29udmVydC5ncmF5LnJnYiA9IGZ1bmN0aW9uIChhcmdzKSB7XG5cdHJldHVybiBbYXJnc1swXSAvIDEwMCAqIDI1NSwgYXJnc1swXSAvIDEwMCAqIDI1NSwgYXJnc1swXSAvIDEwMCAqIDI1NV07XG59O1xuXG5jb252ZXJ0LmdyYXkuaHNsID0gZnVuY3Rpb24gKGFyZ3MpIHtcblx0cmV0dXJuIFswLCAwLCBhcmdzWzBdXTtcbn07XG5cbmNvbnZlcnQuZ3JheS5oc3YgPSBjb252ZXJ0LmdyYXkuaHNsO1xuXG5jb252ZXJ0LmdyYXkuaHdiID0gZnVuY3Rpb24gKGdyYXkpIHtcblx0cmV0dXJuIFswLCAxMDAsIGdyYXlbMF1dO1xufTtcblxuY29udmVydC5ncmF5LmNteWsgPSBmdW5jdGlvbiAoZ3JheSkge1xuXHRyZXR1cm4gWzAsIDAsIDAsIGdyYXlbMF1dO1xufTtcblxuY29udmVydC5ncmF5LmxhYiA9IGZ1bmN0aW9uIChncmF5KSB7XG5cdHJldHVybiBbZ3JheVswXSwgMCwgMF07XG59O1xuXG5jb252ZXJ0LmdyYXkuaGV4ID0gZnVuY3Rpb24gKGdyYXkpIHtcblx0Y29uc3QgdmFsID0gTWF0aC5yb3VuZChncmF5WzBdIC8gMTAwICogMjU1KSAmIDB4RkY7XG5cdGNvbnN0IGludGVnZXIgPSAodmFsIDw8IDE2KSArICh2YWwgPDwgOCkgKyB2YWw7XG5cblx0Y29uc3Qgc3RyaW5nID0gaW50ZWdlci50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtcblx0cmV0dXJuICcwMDAwMDAnLnN1YnN0cmluZyhzdHJpbmcubGVuZ3RoKSArIHN0cmluZztcbn07XG5cbmNvbnZlcnQucmdiLmdyYXkgPSBmdW5jdGlvbiAocmdiKSB7XG5cdGNvbnN0IHZhbCA9IChyZ2JbMF0gKyByZ2JbMV0gKyByZ2JbMl0pIC8gMztcblx0cmV0dXJuIFt2YWwgLyAyNTUgKiAxMDBdO1xufTtcbiIsICJjb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoJy4vY29udmVyc2lvbnMnKTtcblxuLypcblx0VGhpcyBmdW5jdGlvbiByb3V0ZXMgYSBtb2RlbCB0byBhbGwgb3RoZXIgbW9kZWxzLlxuXG5cdGFsbCBmdW5jdGlvbnMgdGhhdCBhcmUgcm91dGVkIGhhdmUgYSBwcm9wZXJ0eSBgLmNvbnZlcnNpb25gIGF0dGFjaGVkXG5cdHRvIHRoZSByZXR1cm5lZCBzeW50aGV0aWMgZnVuY3Rpb24uIFRoaXMgcHJvcGVydHkgaXMgYW4gYXJyYXlcblx0b2Ygc3RyaW5ncywgZWFjaCB3aXRoIHRoZSBzdGVwcyBpbiBiZXR3ZWVuIHRoZSAnZnJvbScgYW5kICd0bydcblx0Y29sb3IgbW9kZWxzIChpbmNsdXNpdmUpLlxuXG5cdGNvbnZlcnNpb25zIHRoYXQgYXJlIG5vdCBwb3NzaWJsZSBzaW1wbHkgYXJlIG5vdCBpbmNsdWRlZC5cbiovXG5cbmZ1bmN0aW9uIGJ1aWxkR3JhcGgoKSB7XG5cdGNvbnN0IGdyYXBoID0ge307XG5cdC8vIGh0dHBzOi8vanNwZXJmLmNvbS9vYmplY3Qta2V5cy12cy1mb3ItaW4td2l0aC1jbG9zdXJlLzNcblx0Y29uc3QgbW9kZWxzID0gT2JqZWN0LmtleXMoY29udmVyc2lvbnMpO1xuXG5cdGZvciAobGV0IGxlbiA9IG1vZGVscy5sZW5ndGgsIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcblx0XHRncmFwaFttb2RlbHNbaV1dID0ge1xuXHRcdFx0Ly8gaHR0cDovL2pzcGVyZi5jb20vMS12cy1pbmZpbml0eVxuXHRcdFx0Ly8gbWljcm8tb3B0LCBidXQgdGhpcyBpcyBzaW1wbGUuXG5cdFx0XHRkaXN0YW5jZTogLTEsXG5cdFx0XHRwYXJlbnQ6IG51bGxcblx0XHR9O1xuXHR9XG5cblx0cmV0dXJuIGdyYXBoO1xufVxuXG4vLyBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9CcmVhZHRoLWZpcnN0X3NlYXJjaFxuZnVuY3Rpb24gZGVyaXZlQkZTKGZyb21Nb2RlbCkge1xuXHRjb25zdCBncmFwaCA9IGJ1aWxkR3JhcGgoKTtcblx0Y29uc3QgcXVldWUgPSBbZnJvbU1vZGVsXTsgLy8gVW5zaGlmdCAtPiBxdWV1ZSAtPiBwb3BcblxuXHRncmFwaFtmcm9tTW9kZWxdLmRpc3RhbmNlID0gMDtcblxuXHR3aGlsZSAocXVldWUubGVuZ3RoKSB7XG5cdFx0Y29uc3QgY3VycmVudCA9IHF1ZXVlLnBvcCgpO1xuXHRcdGNvbnN0IGFkamFjZW50cyA9IE9iamVjdC5rZXlzKGNvbnZlcnNpb25zW2N1cnJlbnRdKTtcblxuXHRcdGZvciAobGV0IGxlbiA9IGFkamFjZW50cy5sZW5ndGgsIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcblx0XHRcdGNvbnN0IGFkamFjZW50ID0gYWRqYWNlbnRzW2ldO1xuXHRcdFx0Y29uc3Qgbm9kZSA9IGdyYXBoW2FkamFjZW50XTtcblxuXHRcdFx0aWYgKG5vZGUuZGlzdGFuY2UgPT09IC0xKSB7XG5cdFx0XHRcdG5vZGUuZGlzdGFuY2UgPSBncmFwaFtjdXJyZW50XS5kaXN0YW5jZSArIDE7XG5cdFx0XHRcdG5vZGUucGFyZW50ID0gY3VycmVudDtcblx0XHRcdFx0cXVldWUudW5zaGlmdChhZGphY2VudCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGdyYXBoO1xufVxuXG5mdW5jdGlvbiBsaW5rKGZyb20sIHRvKSB7XG5cdHJldHVybiBmdW5jdGlvbiAoYXJncykge1xuXHRcdHJldHVybiB0byhmcm9tKGFyZ3MpKTtcblx0fTtcbn1cblxuZnVuY3Rpb24gd3JhcENvbnZlcnNpb24odG9Nb2RlbCwgZ3JhcGgpIHtcblx0Y29uc3QgcGF0aCA9IFtncmFwaFt0b01vZGVsXS5wYXJlbnQsIHRvTW9kZWxdO1xuXHRsZXQgZm4gPSBjb252ZXJzaW9uc1tncmFwaFt0b01vZGVsXS5wYXJlbnRdW3RvTW9kZWxdO1xuXG5cdGxldCBjdXIgPSBncmFwaFt0b01vZGVsXS5wYXJlbnQ7XG5cdHdoaWxlIChncmFwaFtjdXJdLnBhcmVudCkge1xuXHRcdHBhdGgudW5zaGlmdChncmFwaFtjdXJdLnBhcmVudCk7XG5cdFx0Zm4gPSBsaW5rKGNvbnZlcnNpb25zW2dyYXBoW2N1cl0ucGFyZW50XVtjdXJdLCBmbik7XG5cdFx0Y3VyID0gZ3JhcGhbY3VyXS5wYXJlbnQ7XG5cdH1cblxuXHRmbi5jb252ZXJzaW9uID0gcGF0aDtcblx0cmV0dXJuIGZuO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChmcm9tTW9kZWwpIHtcblx0Y29uc3QgZ3JhcGggPSBkZXJpdmVCRlMoZnJvbU1vZGVsKTtcblx0Y29uc3QgY29udmVyc2lvbiA9IHt9O1xuXG5cdGNvbnN0IG1vZGVscyA9IE9iamVjdC5rZXlzKGdyYXBoKTtcblx0Zm9yIChsZXQgbGVuID0gbW9kZWxzLmxlbmd0aCwgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuXHRcdGNvbnN0IHRvTW9kZWwgPSBtb2RlbHNbaV07XG5cdFx0Y29uc3Qgbm9kZSA9IGdyYXBoW3RvTW9kZWxdO1xuXG5cdFx0aWYgKG5vZGUucGFyZW50ID09PSBudWxsKSB7XG5cdFx0XHQvLyBObyBwb3NzaWJsZSBjb252ZXJzaW9uLCBvciB0aGlzIG5vZGUgaXMgdGhlIHNvdXJjZSBtb2RlbC5cblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGNvbnZlcnNpb25bdG9Nb2RlbF0gPSB3cmFwQ29udmVyc2lvbih0b01vZGVsLCBncmFwaCk7XG5cdH1cblxuXHRyZXR1cm4gY29udmVyc2lvbjtcbn07XG5cbiIsICJjb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoJy4vY29udmVyc2lvbnMnKTtcbmNvbnN0IHJvdXRlID0gcmVxdWlyZSgnLi9yb3V0ZScpO1xuXG5jb25zdCBjb252ZXJ0ID0ge307XG5cbmNvbnN0IG1vZGVscyA9IE9iamVjdC5rZXlzKGNvbnZlcnNpb25zKTtcblxuZnVuY3Rpb24gd3JhcFJhdyhmbikge1xuXHRjb25zdCB3cmFwcGVkRm4gPSBmdW5jdGlvbiAoLi4uYXJncykge1xuXHRcdGNvbnN0IGFyZzAgPSBhcmdzWzBdO1xuXHRcdGlmIChhcmcwID09PSB1bmRlZmluZWQgfHwgYXJnMCA9PT0gbnVsbCkge1xuXHRcdFx0cmV0dXJuIGFyZzA7XG5cdFx0fVxuXG5cdFx0aWYgKGFyZzAubGVuZ3RoID4gMSkge1xuXHRcdFx0YXJncyA9IGFyZzA7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZuKGFyZ3MpO1xuXHR9O1xuXG5cdC8vIFByZXNlcnZlIC5jb252ZXJzaW9uIHByb3BlcnR5IGlmIHRoZXJlIGlzIG9uZVxuXHRpZiAoJ2NvbnZlcnNpb24nIGluIGZuKSB7XG5cdFx0d3JhcHBlZEZuLmNvbnZlcnNpb24gPSBmbi5jb252ZXJzaW9uO1xuXHR9XG5cblx0cmV0dXJuIHdyYXBwZWRGbjtcbn1cblxuZnVuY3Rpb24gd3JhcFJvdW5kZWQoZm4pIHtcblx0Y29uc3Qgd3JhcHBlZEZuID0gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcblx0XHRjb25zdCBhcmcwID0gYXJnc1swXTtcblxuXHRcdGlmIChhcmcwID09PSB1bmRlZmluZWQgfHwgYXJnMCA9PT0gbnVsbCkge1xuXHRcdFx0cmV0dXJuIGFyZzA7XG5cdFx0fVxuXG5cdFx0aWYgKGFyZzAubGVuZ3RoID4gMSkge1xuXHRcdFx0YXJncyA9IGFyZzA7XG5cdFx0fVxuXG5cdFx0Y29uc3QgcmVzdWx0ID0gZm4oYXJncyk7XG5cblx0XHQvLyBXZSdyZSBhc3N1bWluZyB0aGUgcmVzdWx0IGlzIGFuIGFycmF5IGhlcmUuXG5cdFx0Ly8gc2VlIG5vdGljZSBpbiBjb252ZXJzaW9ucy5qczsgZG9uJ3QgdXNlIGJveCB0eXBlc1xuXHRcdC8vIGluIGNvbnZlcnNpb24gZnVuY3Rpb25zLlxuXHRcdGlmICh0eXBlb2YgcmVzdWx0ID09PSAnb2JqZWN0Jykge1xuXHRcdFx0Zm9yIChsZXQgbGVuID0gcmVzdWx0Lmxlbmd0aCwgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuXHRcdFx0XHRyZXN1bHRbaV0gPSBNYXRoLnJvdW5kKHJlc3VsdFtpXSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fTtcblxuXHQvLyBQcmVzZXJ2ZSAuY29udmVyc2lvbiBwcm9wZXJ0eSBpZiB0aGVyZSBpcyBvbmVcblx0aWYgKCdjb252ZXJzaW9uJyBpbiBmbikge1xuXHRcdHdyYXBwZWRGbi5jb252ZXJzaW9uID0gZm4uY29udmVyc2lvbjtcblx0fVxuXG5cdHJldHVybiB3cmFwcGVkRm47XG59XG5cbm1vZGVscy5mb3JFYWNoKGZyb21Nb2RlbCA9PiB7XG5cdGNvbnZlcnRbZnJvbU1vZGVsXSA9IHt9O1xuXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb252ZXJ0W2Zyb21Nb2RlbF0sICdjaGFubmVscycsIHt2YWx1ZTogY29udmVyc2lvbnNbZnJvbU1vZGVsXS5jaGFubmVsc30pO1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoY29udmVydFtmcm9tTW9kZWxdLCAnbGFiZWxzJywge3ZhbHVlOiBjb252ZXJzaW9uc1tmcm9tTW9kZWxdLmxhYmVsc30pO1xuXG5cdGNvbnN0IHJvdXRlcyA9IHJvdXRlKGZyb21Nb2RlbCk7XG5cdGNvbnN0IHJvdXRlTW9kZWxzID0gT2JqZWN0LmtleXMocm91dGVzKTtcblxuXHRyb3V0ZU1vZGVscy5mb3JFYWNoKHRvTW9kZWwgPT4ge1xuXHRcdGNvbnN0IGZuID0gcm91dGVzW3RvTW9kZWxdO1xuXG5cdFx0Y29udmVydFtmcm9tTW9kZWxdW3RvTW9kZWxdID0gd3JhcFJvdW5kZWQoZm4pO1xuXHRcdGNvbnZlcnRbZnJvbU1vZGVsXVt0b01vZGVsXS5yYXcgPSB3cmFwUmF3KGZuKTtcblx0fSk7XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBjb252ZXJ0O1xuIiwgIid1c2Ugc3RyaWN0JztcblxuY29uc3Qgd3JhcEFuc2kxNiA9IChmbiwgb2Zmc2V0KSA9PiAoLi4uYXJncykgPT4ge1xuXHRjb25zdCBjb2RlID0gZm4oLi4uYXJncyk7XG5cdHJldHVybiBgXFx1MDAxQlske2NvZGUgKyBvZmZzZXR9bWA7XG59O1xuXG5jb25zdCB3cmFwQW5zaTI1NiA9IChmbiwgb2Zmc2V0KSA9PiAoLi4uYXJncykgPT4ge1xuXHRjb25zdCBjb2RlID0gZm4oLi4uYXJncyk7XG5cdHJldHVybiBgXFx1MDAxQlskezM4ICsgb2Zmc2V0fTs1OyR7Y29kZX1tYDtcbn07XG5cbmNvbnN0IHdyYXBBbnNpMTZtID0gKGZuLCBvZmZzZXQpID0+ICguLi5hcmdzKSA9PiB7XG5cdGNvbnN0IHJnYiA9IGZuKC4uLmFyZ3MpO1xuXHRyZXR1cm4gYFxcdTAwMUJbJHszOCArIG9mZnNldH07Mjske3JnYlswXX07JHtyZ2JbMV19OyR7cmdiWzJdfW1gO1xufTtcblxuY29uc3QgYW5zaTJhbnNpID0gbiA9PiBuO1xuY29uc3QgcmdiMnJnYiA9IChyLCBnLCBiKSA9PiBbciwgZywgYl07XG5cbmNvbnN0IHNldExhenlQcm9wZXJ0eSA9IChvYmplY3QsIHByb3BlcnR5LCBnZXQpID0+IHtcblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG9iamVjdCwgcHJvcGVydHksIHtcblx0XHRnZXQ6ICgpID0+IHtcblx0XHRcdGNvbnN0IHZhbHVlID0gZ2V0KCk7XG5cblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmplY3QsIHByb3BlcnR5LCB7XG5cdFx0XHRcdHZhbHVlLFxuXHRcdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRjb25maWd1cmFibGU6IHRydWVcblx0XHRcdH0pO1xuXG5cdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0fSxcblx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZVxuXHR9KTtcbn07XG5cbi8qKiBAdHlwZSB7dHlwZW9mIGltcG9ydCgnY29sb3ItY29udmVydCcpfSAqL1xubGV0IGNvbG9yQ29udmVydDtcbmNvbnN0IG1ha2VEeW5hbWljU3R5bGVzID0gKHdyYXAsIHRhcmdldFNwYWNlLCBpZGVudGl0eSwgaXNCYWNrZ3JvdW5kKSA9PiB7XG5cdGlmIChjb2xvckNvbnZlcnQgPT09IHVuZGVmaW5lZCkge1xuXHRcdGNvbG9yQ29udmVydCA9IHJlcXVpcmUoJ2NvbG9yLWNvbnZlcnQnKTtcblx0fVxuXG5cdGNvbnN0IG9mZnNldCA9IGlzQmFja2dyb3VuZCA/IDEwIDogMDtcblx0Y29uc3Qgc3R5bGVzID0ge307XG5cblx0Zm9yIChjb25zdCBbc291cmNlU3BhY2UsIHN1aXRlXSBvZiBPYmplY3QuZW50cmllcyhjb2xvckNvbnZlcnQpKSB7XG5cdFx0Y29uc3QgbmFtZSA9IHNvdXJjZVNwYWNlID09PSAnYW5zaTE2JyA/ICdhbnNpJyA6IHNvdXJjZVNwYWNlO1xuXHRcdGlmIChzb3VyY2VTcGFjZSA9PT0gdGFyZ2V0U3BhY2UpIHtcblx0XHRcdHN0eWxlc1tuYW1lXSA9IHdyYXAoaWRlbnRpdHksIG9mZnNldCk7XG5cdFx0fSBlbHNlIGlmICh0eXBlb2Ygc3VpdGUgPT09ICdvYmplY3QnKSB7XG5cdFx0XHRzdHlsZXNbbmFtZV0gPSB3cmFwKHN1aXRlW3RhcmdldFNwYWNlXSwgb2Zmc2V0KTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gc3R5bGVzO1xufTtcblxuZnVuY3Rpb24gYXNzZW1ibGVTdHlsZXMoKSB7XG5cdGNvbnN0IGNvZGVzID0gbmV3IE1hcCgpO1xuXHRjb25zdCBzdHlsZXMgPSB7XG5cdFx0bW9kaWZpZXI6IHtcblx0XHRcdHJlc2V0OiBbMCwgMF0sXG5cdFx0XHQvLyAyMSBpc24ndCB3aWRlbHkgc3VwcG9ydGVkIGFuZCAyMiBkb2VzIHRoZSBzYW1lIHRoaW5nXG5cdFx0XHRib2xkOiBbMSwgMjJdLFxuXHRcdFx0ZGltOiBbMiwgMjJdLFxuXHRcdFx0aXRhbGljOiBbMywgMjNdLFxuXHRcdFx0dW5kZXJsaW5lOiBbNCwgMjRdLFxuXHRcdFx0aW52ZXJzZTogWzcsIDI3XSxcblx0XHRcdGhpZGRlbjogWzgsIDI4XSxcblx0XHRcdHN0cmlrZXRocm91Z2g6IFs5LCAyOV1cblx0XHR9LFxuXHRcdGNvbG9yOiB7XG5cdFx0XHRibGFjazogWzMwLCAzOV0sXG5cdFx0XHRyZWQ6IFszMSwgMzldLFxuXHRcdFx0Z3JlZW46IFszMiwgMzldLFxuXHRcdFx0eWVsbG93OiBbMzMsIDM5XSxcblx0XHRcdGJsdWU6IFszNCwgMzldLFxuXHRcdFx0bWFnZW50YTogWzM1LCAzOV0sXG5cdFx0XHRjeWFuOiBbMzYsIDM5XSxcblx0XHRcdHdoaXRlOiBbMzcsIDM5XSxcblxuXHRcdFx0Ly8gQnJpZ2h0IGNvbG9yXG5cdFx0XHRibGFja0JyaWdodDogWzkwLCAzOV0sXG5cdFx0XHRyZWRCcmlnaHQ6IFs5MSwgMzldLFxuXHRcdFx0Z3JlZW5CcmlnaHQ6IFs5MiwgMzldLFxuXHRcdFx0eWVsbG93QnJpZ2h0OiBbOTMsIDM5XSxcblx0XHRcdGJsdWVCcmlnaHQ6IFs5NCwgMzldLFxuXHRcdFx0bWFnZW50YUJyaWdodDogWzk1LCAzOV0sXG5cdFx0XHRjeWFuQnJpZ2h0OiBbOTYsIDM5XSxcblx0XHRcdHdoaXRlQnJpZ2h0OiBbOTcsIDM5XVxuXHRcdH0sXG5cdFx0YmdDb2xvcjoge1xuXHRcdFx0YmdCbGFjazogWzQwLCA0OV0sXG5cdFx0XHRiZ1JlZDogWzQxLCA0OV0sXG5cdFx0XHRiZ0dyZWVuOiBbNDIsIDQ5XSxcblx0XHRcdGJnWWVsbG93OiBbNDMsIDQ5XSxcblx0XHRcdGJnQmx1ZTogWzQ0LCA0OV0sXG5cdFx0XHRiZ01hZ2VudGE6IFs0NSwgNDldLFxuXHRcdFx0YmdDeWFuOiBbNDYsIDQ5XSxcblx0XHRcdGJnV2hpdGU6IFs0NywgNDldLFxuXG5cdFx0XHQvLyBCcmlnaHQgY29sb3Jcblx0XHRcdGJnQmxhY2tCcmlnaHQ6IFsxMDAsIDQ5XSxcblx0XHRcdGJnUmVkQnJpZ2h0OiBbMTAxLCA0OV0sXG5cdFx0XHRiZ0dyZWVuQnJpZ2h0OiBbMTAyLCA0OV0sXG5cdFx0XHRiZ1llbGxvd0JyaWdodDogWzEwMywgNDldLFxuXHRcdFx0YmdCbHVlQnJpZ2h0OiBbMTA0LCA0OV0sXG5cdFx0XHRiZ01hZ2VudGFCcmlnaHQ6IFsxMDUsIDQ5XSxcblx0XHRcdGJnQ3lhbkJyaWdodDogWzEwNiwgNDldLFxuXHRcdFx0YmdXaGl0ZUJyaWdodDogWzEwNywgNDldXG5cdFx0fVxuXHR9O1xuXG5cdC8vIEFsaWFzIGJyaWdodCBibGFjayBhcyBncmF5IChhbmQgZ3JleSlcblx0c3R5bGVzLmNvbG9yLmdyYXkgPSBzdHlsZXMuY29sb3IuYmxhY2tCcmlnaHQ7XG5cdHN0eWxlcy5iZ0NvbG9yLmJnR3JheSA9IHN0eWxlcy5iZ0NvbG9yLmJnQmxhY2tCcmlnaHQ7XG5cdHN0eWxlcy5jb2xvci5ncmV5ID0gc3R5bGVzLmNvbG9yLmJsYWNrQnJpZ2h0O1xuXHRzdHlsZXMuYmdDb2xvci5iZ0dyZXkgPSBzdHlsZXMuYmdDb2xvci5iZ0JsYWNrQnJpZ2h0O1xuXG5cdGZvciAoY29uc3QgW2dyb3VwTmFtZSwgZ3JvdXBdIG9mIE9iamVjdC5lbnRyaWVzKHN0eWxlcykpIHtcblx0XHRmb3IgKGNvbnN0IFtzdHlsZU5hbWUsIHN0eWxlXSBvZiBPYmplY3QuZW50cmllcyhncm91cCkpIHtcblx0XHRcdHN0eWxlc1tzdHlsZU5hbWVdID0ge1xuXHRcdFx0XHRvcGVuOiBgXFx1MDAxQlske3N0eWxlWzBdfW1gLFxuXHRcdFx0XHRjbG9zZTogYFxcdTAwMUJbJHtzdHlsZVsxXX1tYFxuXHRcdFx0fTtcblxuXHRcdFx0Z3JvdXBbc3R5bGVOYW1lXSA9IHN0eWxlc1tzdHlsZU5hbWVdO1xuXG5cdFx0XHRjb2Rlcy5zZXQoc3R5bGVbMF0sIHN0eWxlWzFdKTtcblx0XHR9XG5cblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoc3R5bGVzLCBncm91cE5hbWUsIHtcblx0XHRcdHZhbHVlOiBncm91cCxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlXG5cdFx0fSk7XG5cdH1cblxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoc3R5bGVzLCAnY29kZXMnLCB7XG5cdFx0dmFsdWU6IGNvZGVzLFxuXHRcdGVudW1lcmFibGU6IGZhbHNlXG5cdH0pO1xuXG5cdHN0eWxlcy5jb2xvci5jbG9zZSA9ICdcXHUwMDFCWzM5bSc7XG5cdHN0eWxlcy5iZ0NvbG9yLmNsb3NlID0gJ1xcdTAwMUJbNDltJztcblxuXHRzZXRMYXp5UHJvcGVydHkoc3R5bGVzLmNvbG9yLCAnYW5zaScsICgpID0+IG1ha2VEeW5hbWljU3R5bGVzKHdyYXBBbnNpMTYsICdhbnNpMTYnLCBhbnNpMmFuc2ksIGZhbHNlKSk7XG5cdHNldExhenlQcm9wZXJ0eShzdHlsZXMuY29sb3IsICdhbnNpMjU2JywgKCkgPT4gbWFrZUR5bmFtaWNTdHlsZXMod3JhcEFuc2kyNTYsICdhbnNpMjU2JywgYW5zaTJhbnNpLCBmYWxzZSkpO1xuXHRzZXRMYXp5UHJvcGVydHkoc3R5bGVzLmNvbG9yLCAnYW5zaTE2bScsICgpID0+IG1ha2VEeW5hbWljU3R5bGVzKHdyYXBBbnNpMTZtLCAncmdiJywgcmdiMnJnYiwgZmFsc2UpKTtcblx0c2V0TGF6eVByb3BlcnR5KHN0eWxlcy5iZ0NvbG9yLCAnYW5zaScsICgpID0+IG1ha2VEeW5hbWljU3R5bGVzKHdyYXBBbnNpMTYsICdhbnNpMTYnLCBhbnNpMmFuc2ksIHRydWUpKTtcblx0c2V0TGF6eVByb3BlcnR5KHN0eWxlcy5iZ0NvbG9yLCAnYW5zaTI1NicsICgpID0+IG1ha2VEeW5hbWljU3R5bGVzKHdyYXBBbnNpMjU2LCAnYW5zaTI1NicsIGFuc2kyYW5zaSwgdHJ1ZSkpO1xuXHRzZXRMYXp5UHJvcGVydHkoc3R5bGVzLmJnQ29sb3IsICdhbnNpMTZtJywgKCkgPT4gbWFrZUR5bmFtaWNTdHlsZXMod3JhcEFuc2kxNm0sICdyZ2InLCByZ2IycmdiLCB0cnVlKSk7XG5cblx0cmV0dXJuIHN0eWxlcztcbn1cblxuLy8gTWFrZSB0aGUgZXhwb3J0IGltbXV0YWJsZVxuT2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgJ2V4cG9ydHMnLCB7XG5cdGVudW1lcmFibGU6IHRydWUsXG5cdGdldDogYXNzZW1ibGVTdHlsZXNcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSAoZmxhZywgYXJndiA9IHByb2Nlc3MuYXJndikgPT4ge1xuXHRjb25zdCBwcmVmaXggPSBmbGFnLnN0YXJ0c1dpdGgoJy0nKSA/ICcnIDogKGZsYWcubGVuZ3RoID09PSAxID8gJy0nIDogJy0tJyk7XG5cdGNvbnN0IHBvc2l0aW9uID0gYXJndi5pbmRleE9mKHByZWZpeCArIGZsYWcpO1xuXHRjb25zdCB0ZXJtaW5hdG9yUG9zaXRpb24gPSBhcmd2LmluZGV4T2YoJy0tJyk7XG5cdHJldHVybiBwb3NpdGlvbiAhPT0gLTEgJiYgKHRlcm1pbmF0b3JQb3NpdGlvbiA9PT0gLTEgfHwgcG9zaXRpb24gPCB0ZXJtaW5hdG9yUG9zaXRpb24pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG5jb25zdCBvcyA9IHJlcXVpcmUoJ29zJyk7XG5jb25zdCB0dHkgPSByZXF1aXJlKCd0dHknKTtcbmNvbnN0IGhhc0ZsYWcgPSByZXF1aXJlKCdoYXMtZmxhZycpO1xuXG5jb25zdCB7ZW52fSA9IHByb2Nlc3M7XG5cbmxldCBmb3JjZUNvbG9yO1xuaWYgKGhhc0ZsYWcoJ25vLWNvbG9yJykgfHxcblx0aGFzRmxhZygnbm8tY29sb3JzJykgfHxcblx0aGFzRmxhZygnY29sb3I9ZmFsc2UnKSB8fFxuXHRoYXNGbGFnKCdjb2xvcj1uZXZlcicpKSB7XG5cdGZvcmNlQ29sb3IgPSAwO1xufSBlbHNlIGlmIChoYXNGbGFnKCdjb2xvcicpIHx8XG5cdGhhc0ZsYWcoJ2NvbG9ycycpIHx8XG5cdGhhc0ZsYWcoJ2NvbG9yPXRydWUnKSB8fFxuXHRoYXNGbGFnKCdjb2xvcj1hbHdheXMnKSkge1xuXHRmb3JjZUNvbG9yID0gMTtcbn1cblxuaWYgKCdGT1JDRV9DT0xPUicgaW4gZW52KSB7XG5cdGlmIChlbnYuRk9SQ0VfQ09MT1IgPT09ICd0cnVlJykge1xuXHRcdGZvcmNlQ29sb3IgPSAxO1xuXHR9IGVsc2UgaWYgKGVudi5GT1JDRV9DT0xPUiA9PT0gJ2ZhbHNlJykge1xuXHRcdGZvcmNlQ29sb3IgPSAwO1xuXHR9IGVsc2Uge1xuXHRcdGZvcmNlQ29sb3IgPSBlbnYuRk9SQ0VfQ09MT1IubGVuZ3RoID09PSAwID8gMSA6IE1hdGgubWluKHBhcnNlSW50KGVudi5GT1JDRV9DT0xPUiwgMTApLCAzKTtcblx0fVxufVxuXG5mdW5jdGlvbiB0cmFuc2xhdGVMZXZlbChsZXZlbCkge1xuXHRpZiAobGV2ZWwgPT09IDApIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdGxldmVsLFxuXHRcdGhhc0Jhc2ljOiB0cnVlLFxuXHRcdGhhczI1NjogbGV2ZWwgPj0gMixcblx0XHRoYXMxNm06IGxldmVsID49IDNcblx0fTtcbn1cblxuZnVuY3Rpb24gc3VwcG9ydHNDb2xvcihoYXZlU3RyZWFtLCBzdHJlYW1Jc1RUWSkge1xuXHRpZiAoZm9yY2VDb2xvciA9PT0gMCkge1xuXHRcdHJldHVybiAwO1xuXHR9XG5cblx0aWYgKGhhc0ZsYWcoJ2NvbG9yPTE2bScpIHx8XG5cdFx0aGFzRmxhZygnY29sb3I9ZnVsbCcpIHx8XG5cdFx0aGFzRmxhZygnY29sb3I9dHJ1ZWNvbG9yJykpIHtcblx0XHRyZXR1cm4gMztcblx0fVxuXG5cdGlmIChoYXNGbGFnKCdjb2xvcj0yNTYnKSkge1xuXHRcdHJldHVybiAyO1xuXHR9XG5cblx0aWYgKGhhdmVTdHJlYW0gJiYgIXN0cmVhbUlzVFRZICYmIGZvcmNlQ29sb3IgPT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiAwO1xuXHR9XG5cblx0Y29uc3QgbWluID0gZm9yY2VDb2xvciB8fCAwO1xuXG5cdGlmIChlbnYuVEVSTSA9PT0gJ2R1bWInKSB7XG5cdFx0cmV0dXJuIG1pbjtcblx0fVxuXG5cdGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInKSB7XG5cdFx0Ly8gV2luZG93cyAxMCBidWlsZCAxMDU4NiBpcyB0aGUgZmlyc3QgV2luZG93cyByZWxlYXNlIHRoYXQgc3VwcG9ydHMgMjU2IGNvbG9ycy5cblx0XHQvLyBXaW5kb3dzIDEwIGJ1aWxkIDE0OTMxIGlzIHRoZSBmaXJzdCByZWxlYXNlIHRoYXQgc3VwcG9ydHMgMTZtL1RydWVDb2xvci5cblx0XHRjb25zdCBvc1JlbGVhc2UgPSBvcy5yZWxlYXNlKCkuc3BsaXQoJy4nKTtcblx0XHRpZiAoXG5cdFx0XHROdW1iZXIob3NSZWxlYXNlWzBdKSA+PSAxMCAmJlxuXHRcdFx0TnVtYmVyKG9zUmVsZWFzZVsyXSkgPj0gMTA1ODZcblx0XHQpIHtcblx0XHRcdHJldHVybiBOdW1iZXIob3NSZWxlYXNlWzJdKSA+PSAxNDkzMSA/IDMgOiAyO1xuXHRcdH1cblxuXHRcdHJldHVybiAxO1xuXHR9XG5cblx0aWYgKCdDSScgaW4gZW52KSB7XG5cdFx0aWYgKFsnVFJBVklTJywgJ0NJUkNMRUNJJywgJ0FQUFZFWU9SJywgJ0dJVExBQl9DSScsICdHSVRIVUJfQUNUSU9OUycsICdCVUlMREtJVEUnXS5zb21lKHNpZ24gPT4gc2lnbiBpbiBlbnYpIHx8IGVudi5DSV9OQU1FID09PSAnY29kZXNoaXAnKSB7XG5cdFx0XHRyZXR1cm4gMTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbWluO1xuXHR9XG5cblx0aWYgKCdURUFNQ0lUWV9WRVJTSU9OJyBpbiBlbnYpIHtcblx0XHRyZXR1cm4gL14oOVxcLigwKlsxLTldXFxkKilcXC58XFxkezIsfVxcLikvLnRlc3QoZW52LlRFQU1DSVRZX1ZFUlNJT04pID8gMSA6IDA7XG5cdH1cblxuXHRpZiAoZW52LkNPTE9SVEVSTSA9PT0gJ3RydWVjb2xvcicpIHtcblx0XHRyZXR1cm4gMztcblx0fVxuXG5cdGlmICgnVEVSTV9QUk9HUkFNJyBpbiBlbnYpIHtcblx0XHRjb25zdCB2ZXJzaW9uID0gcGFyc2VJbnQoKGVudi5URVJNX1BST0dSQU1fVkVSU0lPTiB8fCAnJykuc3BsaXQoJy4nKVswXSwgMTApO1xuXG5cdFx0c3dpdGNoIChlbnYuVEVSTV9QUk9HUkFNKSB7XG5cdFx0XHRjYXNlICdpVGVybS5hcHAnOlxuXHRcdFx0XHRyZXR1cm4gdmVyc2lvbiA+PSAzID8gMyA6IDI7XG5cdFx0XHRjYXNlICdBcHBsZV9UZXJtaW5hbCc6XG5cdFx0XHRcdHJldHVybiAyO1xuXHRcdFx0Ly8gTm8gZGVmYXVsdFxuXHRcdH1cblx0fVxuXG5cdGlmICgvLTI1Nihjb2xvcik/JC9pLnRlc3QoZW52LlRFUk0pKSB7XG5cdFx0cmV0dXJuIDI7XG5cdH1cblxuXHRpZiAoL15zY3JlZW58Xnh0ZXJtfF52dDEwMHxednQyMjB8XnJ4dnR8Y29sb3J8YW5zaXxjeWd3aW58bGludXgvaS50ZXN0KGVudi5URVJNKSkge1xuXHRcdHJldHVybiAxO1xuXHR9XG5cblx0aWYgKCdDT0xPUlRFUk0nIGluIGVudikge1xuXHRcdHJldHVybiAxO1xuXHR9XG5cblx0cmV0dXJuIG1pbjtcbn1cblxuZnVuY3Rpb24gZ2V0U3VwcG9ydExldmVsKHN0cmVhbSkge1xuXHRjb25zdCBsZXZlbCA9IHN1cHBvcnRzQ29sb3Ioc3RyZWFtLCBzdHJlYW0gJiYgc3RyZWFtLmlzVFRZKTtcblx0cmV0dXJuIHRyYW5zbGF0ZUxldmVsKGxldmVsKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG5cdHN1cHBvcnRzQ29sb3I6IGdldFN1cHBvcnRMZXZlbCxcblx0c3Rkb3V0OiB0cmFuc2xhdGVMZXZlbChzdXBwb3J0c0NvbG9yKHRydWUsIHR0eS5pc2F0dHkoMSkpKSxcblx0c3RkZXJyOiB0cmFuc2xhdGVMZXZlbChzdXBwb3J0c0NvbG9yKHRydWUsIHR0eS5pc2F0dHkoMikpKVxufTtcbiIsICIndXNlIHN0cmljdCc7XG5cbmNvbnN0IHN0cmluZ1JlcGxhY2VBbGwgPSAoc3RyaW5nLCBzdWJzdHJpbmcsIHJlcGxhY2VyKSA9PiB7XG5cdGxldCBpbmRleCA9IHN0cmluZy5pbmRleE9mKHN1YnN0cmluZyk7XG5cdGlmIChpbmRleCA9PT0gLTEpIHtcblx0XHRyZXR1cm4gc3RyaW5nO1xuXHR9XG5cblx0Y29uc3Qgc3Vic3RyaW5nTGVuZ3RoID0gc3Vic3RyaW5nLmxlbmd0aDtcblx0bGV0IGVuZEluZGV4ID0gMDtcblx0bGV0IHJldHVyblZhbHVlID0gJyc7XG5cdGRvIHtcblx0XHRyZXR1cm5WYWx1ZSArPSBzdHJpbmcuc3Vic3RyKGVuZEluZGV4LCBpbmRleCAtIGVuZEluZGV4KSArIHN1YnN0cmluZyArIHJlcGxhY2VyO1xuXHRcdGVuZEluZGV4ID0gaW5kZXggKyBzdWJzdHJpbmdMZW5ndGg7XG5cdFx0aW5kZXggPSBzdHJpbmcuaW5kZXhPZihzdWJzdHJpbmcsIGVuZEluZGV4KTtcblx0fSB3aGlsZSAoaW5kZXggIT09IC0xKTtcblxuXHRyZXR1cm5WYWx1ZSArPSBzdHJpbmcuc3Vic3RyKGVuZEluZGV4KTtcblx0cmV0dXJuIHJldHVyblZhbHVlO1xufTtcblxuY29uc3Qgc3RyaW5nRW5jYXNlQ1JMRldpdGhGaXJzdEluZGV4ID0gKHN0cmluZywgcHJlZml4LCBwb3N0Zml4LCBpbmRleCkgPT4ge1xuXHRsZXQgZW5kSW5kZXggPSAwO1xuXHRsZXQgcmV0dXJuVmFsdWUgPSAnJztcblx0ZG8ge1xuXHRcdGNvbnN0IGdvdENSID0gc3RyaW5nW2luZGV4IC0gMV0gPT09ICdcXHInO1xuXHRcdHJldHVyblZhbHVlICs9IHN0cmluZy5zdWJzdHIoZW5kSW5kZXgsIChnb3RDUiA/IGluZGV4IC0gMSA6IGluZGV4KSAtIGVuZEluZGV4KSArIHByZWZpeCArIChnb3RDUiA/ICdcXHJcXG4nIDogJ1xcbicpICsgcG9zdGZpeDtcblx0XHRlbmRJbmRleCA9IGluZGV4ICsgMTtcblx0XHRpbmRleCA9IHN0cmluZy5pbmRleE9mKCdcXG4nLCBlbmRJbmRleCk7XG5cdH0gd2hpbGUgKGluZGV4ICE9PSAtMSk7XG5cblx0cmV0dXJuVmFsdWUgKz0gc3RyaW5nLnN1YnN0cihlbmRJbmRleCk7XG5cdHJldHVybiByZXR1cm5WYWx1ZTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuXHRzdHJpbmdSZXBsYWNlQWxsLFxuXHRzdHJpbmdFbmNhc2VDUkxGV2l0aEZpcnN0SW5kZXhcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuY29uc3QgVEVNUExBVEVfUkVHRVggPSAvKD86XFxcXCh1KD86W2EtZlxcZF17NH18XFx7W2EtZlxcZF17MSw2fVxcfSl8eFthLWZcXGRdezJ9fC4pKXwoPzpcXHsofik/KFxcdysoPzpcXChbXildKlxcKSk/KD86XFwuXFx3Kyg/OlxcKFteKV0qXFwpKT8pKikoPzpbIFxcdF18KD89XFxyP1xcbikpKXwoXFx9KXwoKD86LnxbXFxyXFxuXFxmXSkrPykvZ2k7XG5jb25zdCBTVFlMRV9SRUdFWCA9IC8oPzpefFxcLikoXFx3KykoPzpcXCgoW14pXSopXFwpKT8vZztcbmNvbnN0IFNUUklOR19SRUdFWCA9IC9eKFsnXCJdKSgoPzpcXFxcLnwoPyFcXDEpW15cXFxcXSkqKVxcMSQvO1xuY29uc3QgRVNDQVBFX1JFR0VYID0gL1xcXFwodSg/OlthLWZcXGRdezR9fHtbYS1mXFxkXXsxLDZ9fSl8eFthLWZcXGRdezJ9fC4pfChbXlxcXFxdKS9naTtcblxuY29uc3QgRVNDQVBFUyA9IG5ldyBNYXAoW1xuXHRbJ24nLCAnXFxuJ10sXG5cdFsncicsICdcXHInXSxcblx0Wyd0JywgJ1xcdCddLFxuXHRbJ2InLCAnXFxiJ10sXG5cdFsnZicsICdcXGYnXSxcblx0Wyd2JywgJ1xcdiddLFxuXHRbJzAnLCAnXFwwJ10sXG5cdFsnXFxcXCcsICdcXFxcJ10sXG5cdFsnZScsICdcXHUwMDFCJ10sXG5cdFsnYScsICdcXHUwMDA3J11cbl0pO1xuXG5mdW5jdGlvbiB1bmVzY2FwZShjKSB7XG5cdGNvbnN0IHUgPSBjWzBdID09PSAndSc7XG5cdGNvbnN0IGJyYWNrZXQgPSBjWzFdID09PSAneyc7XG5cblx0aWYgKCh1ICYmICFicmFja2V0ICYmIGMubGVuZ3RoID09PSA1KSB8fCAoY1swXSA9PT0gJ3gnICYmIGMubGVuZ3RoID09PSAzKSkge1xuXHRcdHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KGMuc2xpY2UoMSksIDE2KSk7XG5cdH1cblxuXHRpZiAodSAmJiBicmFja2V0KSB7XG5cdFx0cmV0dXJuIFN0cmluZy5mcm9tQ29kZVBvaW50KHBhcnNlSW50KGMuc2xpY2UoMiwgLTEpLCAxNikpO1xuXHR9XG5cblx0cmV0dXJuIEVTQ0FQRVMuZ2V0KGMpIHx8IGM7XG59XG5cbmZ1bmN0aW9uIHBhcnNlQXJndW1lbnRzKG5hbWUsIGFyZ3VtZW50c18pIHtcblx0Y29uc3QgcmVzdWx0cyA9IFtdO1xuXHRjb25zdCBjaHVua3MgPSBhcmd1bWVudHNfLnRyaW0oKS5zcGxpdCgvXFxzKixcXHMqL2cpO1xuXHRsZXQgbWF0Y2hlcztcblxuXHRmb3IgKGNvbnN0IGNodW5rIG9mIGNodW5rcykge1xuXHRcdGNvbnN0IG51bWJlciA9IE51bWJlcihjaHVuayk7XG5cdFx0aWYgKCFOdW1iZXIuaXNOYU4obnVtYmVyKSkge1xuXHRcdFx0cmVzdWx0cy5wdXNoKG51bWJlcik7XG5cdFx0fSBlbHNlIGlmICgobWF0Y2hlcyA9IGNodW5rLm1hdGNoKFNUUklOR19SRUdFWCkpKSB7XG5cdFx0XHRyZXN1bHRzLnB1c2gobWF0Y2hlc1syXS5yZXBsYWNlKEVTQ0FQRV9SRUdFWCwgKG0sIGVzY2FwZSwgY2hhcmFjdGVyKSA9PiBlc2NhcGUgPyB1bmVzY2FwZShlc2NhcGUpIDogY2hhcmFjdGVyKSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBDaGFsayB0ZW1wbGF0ZSBzdHlsZSBhcmd1bWVudDogJHtjaHVua30gKGluIHN0eWxlICcke25hbWV9JylgKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gcmVzdWx0cztcbn1cblxuZnVuY3Rpb24gcGFyc2VTdHlsZShzdHlsZSkge1xuXHRTVFlMRV9SRUdFWC5sYXN0SW5kZXggPSAwO1xuXG5cdGNvbnN0IHJlc3VsdHMgPSBbXTtcblx0bGV0IG1hdGNoZXM7XG5cblx0d2hpbGUgKChtYXRjaGVzID0gU1RZTEVfUkVHRVguZXhlYyhzdHlsZSkpICE9PSBudWxsKSB7XG5cdFx0Y29uc3QgbmFtZSA9IG1hdGNoZXNbMV07XG5cblx0XHRpZiAobWF0Y2hlc1syXSkge1xuXHRcdFx0Y29uc3QgYXJncyA9IHBhcnNlQXJndW1lbnRzKG5hbWUsIG1hdGNoZXNbMl0pO1xuXHRcdFx0cmVzdWx0cy5wdXNoKFtuYW1lXS5jb25jYXQoYXJncykpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXN1bHRzLnB1c2goW25hbWVdKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gcmVzdWx0cztcbn1cblxuZnVuY3Rpb24gYnVpbGRTdHlsZShjaGFsaywgc3R5bGVzKSB7XG5cdGNvbnN0IGVuYWJsZWQgPSB7fTtcblxuXHRmb3IgKGNvbnN0IGxheWVyIG9mIHN0eWxlcykge1xuXHRcdGZvciAoY29uc3Qgc3R5bGUgb2YgbGF5ZXIuc3R5bGVzKSB7XG5cdFx0XHRlbmFibGVkW3N0eWxlWzBdXSA9IGxheWVyLmludmVyc2UgPyBudWxsIDogc3R5bGUuc2xpY2UoMSk7XG5cdFx0fVxuXHR9XG5cblx0bGV0IGN1cnJlbnQgPSBjaGFsaztcblx0Zm9yIChjb25zdCBbc3R5bGVOYW1lLCBzdHlsZXNdIG9mIE9iamVjdC5lbnRyaWVzKGVuYWJsZWQpKSB7XG5cdFx0aWYgKCFBcnJheS5pc0FycmF5KHN0eWxlcykpIHtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGlmICghKHN0eWxlTmFtZSBpbiBjdXJyZW50KSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKGBVbmtub3duIENoYWxrIHN0eWxlOiAke3N0eWxlTmFtZX1gKTtcblx0XHR9XG5cblx0XHRjdXJyZW50ID0gc3R5bGVzLmxlbmd0aCA+IDAgPyBjdXJyZW50W3N0eWxlTmFtZV0oLi4uc3R5bGVzKSA6IGN1cnJlbnRbc3R5bGVOYW1lXTtcblx0fVxuXG5cdHJldHVybiBjdXJyZW50O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IChjaGFsaywgdGVtcG9yYXJ5KSA9PiB7XG5cdGNvbnN0IHN0eWxlcyA9IFtdO1xuXHRjb25zdCBjaHVua3MgPSBbXTtcblx0bGV0IGNodW5rID0gW107XG5cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1wYXJhbXNcblx0dGVtcG9yYXJ5LnJlcGxhY2UoVEVNUExBVEVfUkVHRVgsIChtLCBlc2NhcGVDaGFyYWN0ZXIsIGludmVyc2UsIHN0eWxlLCBjbG9zZSwgY2hhcmFjdGVyKSA9PiB7XG5cdFx0aWYgKGVzY2FwZUNoYXJhY3Rlcikge1xuXHRcdFx0Y2h1bmsucHVzaCh1bmVzY2FwZShlc2NhcGVDaGFyYWN0ZXIpKTtcblx0XHR9IGVsc2UgaWYgKHN0eWxlKSB7XG5cdFx0XHRjb25zdCBzdHJpbmcgPSBjaHVuay5qb2luKCcnKTtcblx0XHRcdGNodW5rID0gW107XG5cdFx0XHRjaHVua3MucHVzaChzdHlsZXMubGVuZ3RoID09PSAwID8gc3RyaW5nIDogYnVpbGRTdHlsZShjaGFsaywgc3R5bGVzKShzdHJpbmcpKTtcblx0XHRcdHN0eWxlcy5wdXNoKHtpbnZlcnNlLCBzdHlsZXM6IHBhcnNlU3R5bGUoc3R5bGUpfSk7XG5cdFx0fSBlbHNlIGlmIChjbG9zZSkge1xuXHRcdFx0aWYgKHN0eWxlcy5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCdGb3VuZCBleHRyYW5lb3VzIH0gaW4gQ2hhbGsgdGVtcGxhdGUgbGl0ZXJhbCcpO1xuXHRcdFx0fVxuXG5cdFx0XHRjaHVua3MucHVzaChidWlsZFN0eWxlKGNoYWxrLCBzdHlsZXMpKGNodW5rLmpvaW4oJycpKSk7XG5cdFx0XHRjaHVuayA9IFtdO1xuXHRcdFx0c3R5bGVzLnBvcCgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjaHVuay5wdXNoKGNoYXJhY3Rlcik7XG5cdFx0fVxuXHR9KTtcblxuXHRjaHVua3MucHVzaChjaHVuay5qb2luKCcnKSk7XG5cblx0aWYgKHN0eWxlcy5sZW5ndGggPiAwKSB7XG5cdFx0Y29uc3QgZXJyTWVzc2FnZSA9IGBDaGFsayB0ZW1wbGF0ZSBsaXRlcmFsIGlzIG1pc3NpbmcgJHtzdHlsZXMubGVuZ3RofSBjbG9zaW5nIGJyYWNrZXQke3N0eWxlcy5sZW5ndGggPT09IDEgPyAnJyA6ICdzJ30gKFxcYH1cXGApYDtcblx0XHR0aHJvdyBuZXcgRXJyb3IoZXJyTWVzc2FnZSk7XG5cdH1cblxuXHRyZXR1cm4gY2h1bmtzLmpvaW4oJycpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG5jb25zdCBhbnNpU3R5bGVzID0gcmVxdWlyZSgnYW5zaS1zdHlsZXMnKTtcbmNvbnN0IHtzdGRvdXQ6IHN0ZG91dENvbG9yLCBzdGRlcnI6IHN0ZGVyckNvbG9yfSA9IHJlcXVpcmUoJ3N1cHBvcnRzLWNvbG9yJyk7XG5jb25zdCB7XG5cdHN0cmluZ1JlcGxhY2VBbGwsXG5cdHN0cmluZ0VuY2FzZUNSTEZXaXRoRmlyc3RJbmRleFxufSA9IHJlcXVpcmUoJy4vdXRpbCcpO1xuXG5jb25zdCB7aXNBcnJheX0gPSBBcnJheTtcblxuLy8gYHN1cHBvcnRzQ29sb3IubGV2ZWxgIFx1MjE5MiBgYW5zaVN0eWxlcy5jb2xvcltuYW1lXWAgbWFwcGluZ1xuY29uc3QgbGV2ZWxNYXBwaW5nID0gW1xuXHQnYW5zaScsXG5cdCdhbnNpJyxcblx0J2Fuc2kyNTYnLFxuXHQnYW5zaTE2bSdcbl07XG5cbmNvbnN0IHN0eWxlcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbmNvbnN0IGFwcGx5T3B0aW9ucyA9IChvYmplY3QsIG9wdGlvbnMgPSB7fSkgPT4ge1xuXHRpZiAob3B0aW9ucy5sZXZlbCAmJiAhKE51bWJlci5pc0ludGVnZXIob3B0aW9ucy5sZXZlbCkgJiYgb3B0aW9ucy5sZXZlbCA+PSAwICYmIG9wdGlvbnMubGV2ZWwgPD0gMykpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ1RoZSBgbGV2ZWxgIG9wdGlvbiBzaG91bGQgYmUgYW4gaW50ZWdlciBmcm9tIDAgdG8gMycpO1xuXHR9XG5cblx0Ly8gRGV0ZWN0IGxldmVsIGlmIG5vdCBzZXQgbWFudWFsbHlcblx0Y29uc3QgY29sb3JMZXZlbCA9IHN0ZG91dENvbG9yID8gc3Rkb3V0Q29sb3IubGV2ZWwgOiAwO1xuXHRvYmplY3QubGV2ZWwgPSBvcHRpb25zLmxldmVsID09PSB1bmRlZmluZWQgPyBjb2xvckxldmVsIDogb3B0aW9ucy5sZXZlbDtcbn07XG5cbmNsYXNzIENoYWxrQ2xhc3Mge1xuXHRjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnN0cnVjdG9yLXJldHVyblxuXHRcdHJldHVybiBjaGFsa0ZhY3Rvcnkob3B0aW9ucyk7XG5cdH1cbn1cblxuY29uc3QgY2hhbGtGYWN0b3J5ID0gb3B0aW9ucyA9PiB7XG5cdGNvbnN0IGNoYWxrID0ge307XG5cdGFwcGx5T3B0aW9ucyhjaGFsaywgb3B0aW9ucyk7XG5cblx0Y2hhbGsudGVtcGxhdGUgPSAoLi4uYXJndW1lbnRzXykgPT4gY2hhbGtUYWcoY2hhbGsudGVtcGxhdGUsIC4uLmFyZ3VtZW50c18pO1xuXG5cdE9iamVjdC5zZXRQcm90b3R5cGVPZihjaGFsaywgQ2hhbGsucHJvdG90eXBlKTtcblx0T2JqZWN0LnNldFByb3RvdHlwZU9mKGNoYWxrLnRlbXBsYXRlLCBjaGFsayk7XG5cblx0Y2hhbGsudGVtcGxhdGUuY29uc3RydWN0b3IgPSAoKSA9PiB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdgY2hhbGsuY29uc3RydWN0b3IoKWAgaXMgZGVwcmVjYXRlZC4gVXNlIGBuZXcgY2hhbGsuSW5zdGFuY2UoKWAgaW5zdGVhZC4nKTtcblx0fTtcblxuXHRjaGFsay50ZW1wbGF0ZS5JbnN0YW5jZSA9IENoYWxrQ2xhc3M7XG5cblx0cmV0dXJuIGNoYWxrLnRlbXBsYXRlO1xufTtcblxuZnVuY3Rpb24gQ2hhbGsob3B0aW9ucykge1xuXHRyZXR1cm4gY2hhbGtGYWN0b3J5KG9wdGlvbnMpO1xufVxuXG5mb3IgKGNvbnN0IFtzdHlsZU5hbWUsIHN0eWxlXSBvZiBPYmplY3QuZW50cmllcyhhbnNpU3R5bGVzKSkge1xuXHRzdHlsZXNbc3R5bGVOYW1lXSA9IHtcblx0XHRnZXQoKSB7XG5cdFx0XHRjb25zdCBidWlsZGVyID0gY3JlYXRlQnVpbGRlcih0aGlzLCBjcmVhdGVTdHlsZXIoc3R5bGUub3Blbiwgc3R5bGUuY2xvc2UsIHRoaXMuX3N0eWxlciksIHRoaXMuX2lzRW1wdHkpO1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIHN0eWxlTmFtZSwge3ZhbHVlOiBidWlsZGVyfSk7XG5cdFx0XHRyZXR1cm4gYnVpbGRlcjtcblx0XHR9XG5cdH07XG59XG5cbnN0eWxlcy52aXNpYmxlID0ge1xuXHRnZXQoKSB7XG5cdFx0Y29uc3QgYnVpbGRlciA9IGNyZWF0ZUJ1aWxkZXIodGhpcywgdGhpcy5fc3R5bGVyLCB0cnVlKTtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ3Zpc2libGUnLCB7dmFsdWU6IGJ1aWxkZXJ9KTtcblx0XHRyZXR1cm4gYnVpbGRlcjtcblx0fVxufTtcblxuY29uc3QgdXNlZE1vZGVscyA9IFsncmdiJywgJ2hleCcsICdrZXl3b3JkJywgJ2hzbCcsICdoc3YnLCAnaHdiJywgJ2Fuc2knLCAnYW5zaTI1NiddO1xuXG5mb3IgKGNvbnN0IG1vZGVsIG9mIHVzZWRNb2RlbHMpIHtcblx0c3R5bGVzW21vZGVsXSA9IHtcblx0XHRnZXQoKSB7XG5cdFx0XHRjb25zdCB7bGV2ZWx9ID0gdGhpcztcblx0XHRcdHJldHVybiBmdW5jdGlvbiAoLi4uYXJndW1lbnRzXykge1xuXHRcdFx0XHRjb25zdCBzdHlsZXIgPSBjcmVhdGVTdHlsZXIoYW5zaVN0eWxlcy5jb2xvcltsZXZlbE1hcHBpbmdbbGV2ZWxdXVttb2RlbF0oLi4uYXJndW1lbnRzXyksIGFuc2lTdHlsZXMuY29sb3IuY2xvc2UsIHRoaXMuX3N0eWxlcik7XG5cdFx0XHRcdHJldHVybiBjcmVhdGVCdWlsZGVyKHRoaXMsIHN0eWxlciwgdGhpcy5faXNFbXB0eSk7XG5cdFx0XHR9O1xuXHRcdH1cblx0fTtcbn1cblxuZm9yIChjb25zdCBtb2RlbCBvZiB1c2VkTW9kZWxzKSB7XG5cdGNvbnN0IGJnTW9kZWwgPSAnYmcnICsgbW9kZWxbMF0udG9VcHBlckNhc2UoKSArIG1vZGVsLnNsaWNlKDEpO1xuXHRzdHlsZXNbYmdNb2RlbF0gPSB7XG5cdFx0Z2V0KCkge1xuXHRcdFx0Y29uc3Qge2xldmVsfSA9IHRoaXM7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24gKC4uLmFyZ3VtZW50c18pIHtcblx0XHRcdFx0Y29uc3Qgc3R5bGVyID0gY3JlYXRlU3R5bGVyKGFuc2lTdHlsZXMuYmdDb2xvcltsZXZlbE1hcHBpbmdbbGV2ZWxdXVttb2RlbF0oLi4uYXJndW1lbnRzXyksIGFuc2lTdHlsZXMuYmdDb2xvci5jbG9zZSwgdGhpcy5fc3R5bGVyKTtcblx0XHRcdFx0cmV0dXJuIGNyZWF0ZUJ1aWxkZXIodGhpcywgc3R5bGVyLCB0aGlzLl9pc0VtcHR5KTtcblx0XHRcdH07XG5cdFx0fVxuXHR9O1xufVxuXG5jb25zdCBwcm90byA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKCgpID0+IHt9LCB7XG5cdC4uLnN0eWxlcyxcblx0bGV2ZWw6IHtcblx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdGdldCgpIHtcblx0XHRcdHJldHVybiB0aGlzLl9nZW5lcmF0b3IubGV2ZWw7XG5cdFx0fSxcblx0XHRzZXQobGV2ZWwpIHtcblx0XHRcdHRoaXMuX2dlbmVyYXRvci5sZXZlbCA9IGxldmVsO1xuXHRcdH1cblx0fVxufSk7XG5cbmNvbnN0IGNyZWF0ZVN0eWxlciA9IChvcGVuLCBjbG9zZSwgcGFyZW50KSA9PiB7XG5cdGxldCBvcGVuQWxsO1xuXHRsZXQgY2xvc2VBbGw7XG5cdGlmIChwYXJlbnQgPT09IHVuZGVmaW5lZCkge1xuXHRcdG9wZW5BbGwgPSBvcGVuO1xuXHRcdGNsb3NlQWxsID0gY2xvc2U7XG5cdH0gZWxzZSB7XG5cdFx0b3BlbkFsbCA9IHBhcmVudC5vcGVuQWxsICsgb3Blbjtcblx0XHRjbG9zZUFsbCA9IGNsb3NlICsgcGFyZW50LmNsb3NlQWxsO1xuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRvcGVuLFxuXHRcdGNsb3NlLFxuXHRcdG9wZW5BbGwsXG5cdFx0Y2xvc2VBbGwsXG5cdFx0cGFyZW50XG5cdH07XG59O1xuXG5jb25zdCBjcmVhdGVCdWlsZGVyID0gKHNlbGYsIF9zdHlsZXIsIF9pc0VtcHR5KSA9PiB7XG5cdGNvbnN0IGJ1aWxkZXIgPSAoLi4uYXJndW1lbnRzXykgPT4ge1xuXHRcdGlmIChpc0FycmF5KGFyZ3VtZW50c19bMF0pICYmIGlzQXJyYXkoYXJndW1lbnRzX1swXS5yYXcpKSB7XG5cdFx0XHQvLyBDYWxsZWQgYXMgYSB0ZW1wbGF0ZSBsaXRlcmFsLCBmb3IgZXhhbXBsZTogY2hhbGsucmVkYDIgKyAzID0ge2JvbGQgJHsyKzN9fWBcblx0XHRcdHJldHVybiBhcHBseVN0eWxlKGJ1aWxkZXIsIGNoYWxrVGFnKGJ1aWxkZXIsIC4uLmFyZ3VtZW50c18pKTtcblx0XHR9XG5cblx0XHQvLyBTaW5nbGUgYXJndW1lbnQgaXMgaG90IHBhdGgsIGltcGxpY2l0IGNvZXJjaW9uIGlzIGZhc3RlciB0aGFuIGFueXRoaW5nXG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWltcGxpY2l0LWNvZXJjaW9uXG5cdFx0cmV0dXJuIGFwcGx5U3R5bGUoYnVpbGRlciwgKGFyZ3VtZW50c18ubGVuZ3RoID09PSAxKSA/ICgnJyArIGFyZ3VtZW50c19bMF0pIDogYXJndW1lbnRzXy5qb2luKCcgJykpO1xuXHR9O1xuXG5cdC8vIFdlIGFsdGVyIHRoZSBwcm90b3R5cGUgYmVjYXVzZSB3ZSBtdXN0IHJldHVybiBhIGZ1bmN0aW9uLCBidXQgdGhlcmUgaXNcblx0Ly8gbm8gd2F5IHRvIGNyZWF0ZSBhIGZ1bmN0aW9uIHdpdGggYSBkaWZmZXJlbnQgcHJvdG90eXBlXG5cdE9iamVjdC5zZXRQcm90b3R5cGVPZihidWlsZGVyLCBwcm90byk7XG5cblx0YnVpbGRlci5fZ2VuZXJhdG9yID0gc2VsZjtcblx0YnVpbGRlci5fc3R5bGVyID0gX3N0eWxlcjtcblx0YnVpbGRlci5faXNFbXB0eSA9IF9pc0VtcHR5O1xuXG5cdHJldHVybiBidWlsZGVyO1xufTtcblxuY29uc3QgYXBwbHlTdHlsZSA9IChzZWxmLCBzdHJpbmcpID0+IHtcblx0aWYgKHNlbGYubGV2ZWwgPD0gMCB8fCAhc3RyaW5nKSB7XG5cdFx0cmV0dXJuIHNlbGYuX2lzRW1wdHkgPyAnJyA6IHN0cmluZztcblx0fVxuXG5cdGxldCBzdHlsZXIgPSBzZWxmLl9zdHlsZXI7XG5cblx0aWYgKHN0eWxlciA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIHN0cmluZztcblx0fVxuXG5cdGNvbnN0IHtvcGVuQWxsLCBjbG9zZUFsbH0gPSBzdHlsZXI7XG5cdGlmIChzdHJpbmcuaW5kZXhPZignXFx1MDAxQicpICE9PSAtMSkge1xuXHRcdHdoaWxlIChzdHlsZXIgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Ly8gUmVwbGFjZSBhbnkgaW5zdGFuY2VzIGFscmVhZHkgcHJlc2VudCB3aXRoIGEgcmUtb3BlbmluZyBjb2RlXG5cdFx0XHQvLyBvdGhlcndpc2Ugb25seSB0aGUgcGFydCBvZiB0aGUgc3RyaW5nIHVudGlsIHNhaWQgY2xvc2luZyBjb2RlXG5cdFx0XHQvLyB3aWxsIGJlIGNvbG9yZWQsIGFuZCB0aGUgcmVzdCB3aWxsIHNpbXBseSBiZSAncGxhaW4nLlxuXHRcdFx0c3RyaW5nID0gc3RyaW5nUmVwbGFjZUFsbChzdHJpbmcsIHN0eWxlci5jbG9zZSwgc3R5bGVyLm9wZW4pO1xuXG5cdFx0XHRzdHlsZXIgPSBzdHlsZXIucGFyZW50O1xuXHRcdH1cblx0fVxuXG5cdC8vIFdlIGNhbiBtb3ZlIGJvdGggbmV4dCBhY3Rpb25zIG91dCBvZiBsb29wLCBiZWNhdXNlIHJlbWFpbmluZyBhY3Rpb25zIGluIGxvb3Agd29uJ3QgaGF2ZVxuXHQvLyBhbnkvdmlzaWJsZSBlZmZlY3Qgb24gcGFydHMgd2UgYWRkIGhlcmUuIENsb3NlIHRoZSBzdHlsaW5nIGJlZm9yZSBhIGxpbmVicmVhayBhbmQgcmVvcGVuXG5cdC8vIGFmdGVyIG5leHQgbGluZSB0byBmaXggYSBibGVlZCBpc3N1ZSBvbiBtYWNPUzogaHR0cHM6Ly9naXRodWIuY29tL2NoYWxrL2NoYWxrL3B1bGwvOTJcblx0Y29uc3QgbGZJbmRleCA9IHN0cmluZy5pbmRleE9mKCdcXG4nKTtcblx0aWYgKGxmSW5kZXggIT09IC0xKSB7XG5cdFx0c3RyaW5nID0gc3RyaW5nRW5jYXNlQ1JMRldpdGhGaXJzdEluZGV4KHN0cmluZywgY2xvc2VBbGwsIG9wZW5BbGwsIGxmSW5kZXgpO1xuXHR9XG5cblx0cmV0dXJuIG9wZW5BbGwgKyBzdHJpbmcgKyBjbG9zZUFsbDtcbn07XG5cbmxldCB0ZW1wbGF0ZTtcbmNvbnN0IGNoYWxrVGFnID0gKGNoYWxrLCAuLi5zdHJpbmdzKSA9PiB7XG5cdGNvbnN0IFtmaXJzdFN0cmluZ10gPSBzdHJpbmdzO1xuXG5cdGlmICghaXNBcnJheShmaXJzdFN0cmluZykgfHwgIWlzQXJyYXkoZmlyc3RTdHJpbmcucmF3KSkge1xuXHRcdC8vIElmIGNoYWxrKCkgd2FzIGNhbGxlZCBieSBpdHNlbGYgb3Igd2l0aCBhIHN0cmluZyxcblx0XHQvLyByZXR1cm4gdGhlIHN0cmluZyBpdHNlbGYgYXMgYSBzdHJpbmcuXG5cdFx0cmV0dXJuIHN0cmluZ3Muam9pbignICcpO1xuXHR9XG5cblx0Y29uc3QgYXJndW1lbnRzXyA9IHN0cmluZ3Muc2xpY2UoMSk7XG5cdGNvbnN0IHBhcnRzID0gW2ZpcnN0U3RyaW5nLnJhd1swXV07XG5cblx0Zm9yIChsZXQgaSA9IDE7IGkgPCBmaXJzdFN0cmluZy5sZW5ndGg7IGkrKykge1xuXHRcdHBhcnRzLnB1c2goXG5cdFx0XHRTdHJpbmcoYXJndW1lbnRzX1tpIC0gMV0pLnJlcGxhY2UoL1t7fVxcXFxdL2csICdcXFxcJCYnKSxcblx0XHRcdFN0cmluZyhmaXJzdFN0cmluZy5yYXdbaV0pXG5cdFx0KTtcblx0fVxuXG5cdGlmICh0ZW1wbGF0ZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dGVtcGxhdGUgPSByZXF1aXJlKCcuL3RlbXBsYXRlcycpO1xuXHR9XG5cblx0cmV0dXJuIHRlbXBsYXRlKGNoYWxrLCBwYXJ0cy5qb2luKCcnKSk7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDaGFsay5wcm90b3R5cGUsIHN0eWxlcyk7XG5cbmNvbnN0IGNoYWxrID0gQ2hhbGsoKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuZXctY2FwXG5jaGFsay5zdXBwb3J0c0NvbG9yID0gc3Rkb3V0Q29sb3I7XG5jaGFsay5zdGRlcnIgPSBDaGFsayh7bGV2ZWw6IHN0ZGVyckNvbG9yID8gc3RkZXJyQ29sb3IubGV2ZWwgOiAwfSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbmV3LWNhcFxuY2hhbGsuc3RkZXJyLnN1cHBvcnRzQ29sb3IgPSBzdGRlcnJDb2xvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBjaGFsaztcbiIsICIvLyBzb3VyY2Ugb2YgaW5zcGlyYXRpb246IGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5kcmVzb3JodXMvcmVxdWlyZS1mb29sLXdlYnBhY2tcbnZhciByZXF1aXJlRm9vbFdlYnBhY2sgPSBldmFsKFxuICAgICd0eXBlb2YgcmVxdWlyZSAhPT0gXFwndW5kZWZpbmVkXFwnICcgK1xuICAgICc/IHJlcXVpcmUgJyArXG4gICAgJzogZnVuY3Rpb24gKG1vZHVsZSkgeyB0aHJvdyBuZXcgRXJyb3IoXFwnTW9kdWxlIFwiICsgbW9kdWxlICsgXCIgbm90IGZvdW5kLlxcJykgfSdcbik7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZUZvb2xXZWJwYWNrO1xuIiwgInZhciByZXF1aXJlRm9vbFdlYnBhY2sgPSByZXF1aXJlKCcuL3JlcXVpcmVGb29sV2VicGFjaycpO1xuXG4vLyBzb3VyY2U6IGh0dHBzOi8vZ2l0aHViLmNvbS9mbGV4ZGluZXNoL2Jyb3dzZXItb3Itbm9kZVxudmFyIGlzTm9kZSA9IGZ1bmN0aW9uIChub2RlUHJvY2Vzcykge1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiBub2RlUHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICBub2RlUHJvY2Vzcy52ZXJzaW9ucyAhPSBudWxsICYmXG4gICAgbm9kZVByb2Nlc3MudmVyc2lvbnMubm9kZSAhPSBudWxsXG4gICk7XG59XG5tb2R1bGUuZXhwb3J0cy5pc05vZGUgPSBpc05vZGVcblxuLy8gZGV0ZXJtaW5lcyB0aGUgSmF2YVNjcmlwdCBwbGF0Zm9ybTogYnJvd3NlciBvciBub2RlXG5tb2R1bGUuZXhwb3J0cy5wbGF0Zm9ybSA9IHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiBpc05vZGUocHJvY2VzcylcbiAgPyAnbm9kZSdcbiAgOiAnYnJvd3Nlcic7XG5cbi8vIGRldGVybWluZXMgd2hldGhlciB0aGUgY29kZSBpcyBydW5uaW5nIGluIG1haW4gdGhyZWFkIG9yIG5vdFxuLy8gbm90ZSB0aGF0IGluIG5vZGUuanMgd2UgaGF2ZSB0byBjaGVjayBib3RoIHdvcmtlcl90aHJlYWQgYW5kIGNoaWxkX3Byb2Nlc3NcbnZhciB3b3JrZXJfdGhyZWFkcyA9IHRyeVJlcXVpcmVGb29sV2VicGFjaygnd29ya2VyX3RocmVhZHMnKTtcbm1vZHVsZS5leHBvcnRzLmlzTWFpblRocmVhZCA9IG1vZHVsZS5leHBvcnRzLnBsYXRmb3JtID09PSAnbm9kZSdcbiAgPyAoKCF3b3JrZXJfdGhyZWFkcyB8fCB3b3JrZXJfdGhyZWFkcy5pc01haW5UaHJlYWQpICYmICFwcm9jZXNzLmNvbm5lY3RlZClcbiAgOiB0eXBlb2YgV2luZG93ICE9PSAndW5kZWZpbmVkJztcblxuLy8gZGV0ZXJtaW5lcyB0aGUgbnVtYmVyIG9mIGNwdXMgYXZhaWxhYmxlXG5tb2R1bGUuZXhwb3J0cy5jcHVzID0gbW9kdWxlLmV4cG9ydHMucGxhdGZvcm0gPT09ICdicm93c2VyJ1xuICA/IHNlbGYubmF2aWdhdG9yLmhhcmR3YXJlQ29uY3VycmVuY3lcbiAgOiByZXF1aXJlRm9vbFdlYnBhY2soJ29zJykuY3B1cygpLmxlbmd0aDtcblxuZnVuY3Rpb24gdHJ5UmVxdWlyZUZvb2xXZWJwYWNrIChtb2R1bGUpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gcmVxdWlyZUZvb2xXZWJwYWNrKG1vZHVsZSk7XG4gIH0gY2F0Y2goZXJyKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxufVxuIiwgIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBQcm9taXNlXG4gKlxuICogSW5zcGlyZWQgYnkgaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vUnViYVhhLzg1MDEzNTkgZnJvbSBSdWJhWGEgPHRyYXNoQHJ1YmF4YS5vcmc+XG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaGFuZGxlciAgIENhbGxlZCBhcyBoYW5kbGVyKHJlc29sdmU6IEZ1bmN0aW9uLCByZWplY3Q6IEZ1bmN0aW9uKVxuICogQHBhcmFtIHtQcm9taXNlfSBbcGFyZW50XSAgIFBhcmVudCBwcm9taXNlIGZvciBwcm9wYWdhdGlvbiBvZiBjYW5jZWwgYW5kIHRpbWVvdXRcbiAqL1xuZnVuY3Rpb24gUHJvbWlzZShoYW5kbGVyLCBwYXJlbnQpIHtcbiAgdmFyIG1lID0gdGhpcztcblxuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUHJvbWlzZSkpIHtcbiAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0NvbnN0cnVjdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBvcGVyYXRvcicpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBoYW5kbGVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdGdW5jdGlvbiBwYXJhbWV0ZXIgaGFuZGxlcihyZXNvbHZlLCByZWplY3QpIG1pc3NpbmcnKTtcbiAgfVxuXG4gIHZhciBfb25TdWNjZXNzID0gW107XG4gIHZhciBfb25GYWlsID0gW107XG5cbiAgLy8gc3RhdHVzXG4gIHRoaXMucmVzb2x2ZWQgPSBmYWxzZTtcbiAgdGhpcy5yZWplY3RlZCA9IGZhbHNlO1xuICB0aGlzLnBlbmRpbmcgPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBQcm9jZXNzIG9uU3VjY2VzcyBhbmQgb25GYWlsIGNhbGxiYWNrczogYWRkIHRoZW0gdG8gdGhlIHF1ZXVlLlxuICAgKiBPbmNlIHRoZSBwcm9taXNlIGlzIHJlc29sdmUsIHRoZSBmdW5jdGlvbiBfcHJvbWlzZSBpcyByZXBsYWNlLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBvblN1Y2Nlc3NcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gb25GYWlsXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICB2YXIgX3Byb2Nlc3MgPSBmdW5jdGlvbiAob25TdWNjZXNzLCBvbkZhaWwpIHtcbiAgICBfb25TdWNjZXNzLnB1c2gob25TdWNjZXNzKTtcbiAgICBfb25GYWlsLnB1c2gob25GYWlsKTtcbiAgfTtcblxuICAvKipcbiAgICogQWRkIGFuIG9uU3VjY2VzcyBjYWxsYmFjayBhbmQgb3B0aW9uYWxseSBhbiBvbkZhaWwgY2FsbGJhY2sgdG8gdGhlIFByb21pc2VcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gb25TdWNjZXNzXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtvbkZhaWxdXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfSBwcm9taXNlXG4gICAqL1xuICB0aGlzLnRoZW4gPSBmdW5jdGlvbiAob25TdWNjZXNzLCBvbkZhaWwpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdmFyIHMgPSBvblN1Y2Nlc3MgPyBfdGhlbihvblN1Y2Nlc3MsIHJlc29sdmUsIHJlamVjdCkgOiByZXNvbHZlO1xuICAgICAgdmFyIGYgPSBvbkZhaWwgICAgPyBfdGhlbihvbkZhaWwsICAgIHJlc29sdmUsIHJlamVjdCkgOiByZWplY3Q7XG5cbiAgICAgIF9wcm9jZXNzKHMsIGYpO1xuICAgIH0sIG1lKTtcbiAgfTtcblxuICAvKipcbiAgICogUmVzb2x2ZSB0aGUgcHJvbWlzZVxuICAgKiBAcGFyYW0geyp9IHJlc3VsdFxuICAgKiBAdHlwZSB7RnVuY3Rpb259XG4gICAqL1xuICB2YXIgX3Jlc29sdmUgPSBmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgLy8gdXBkYXRlIHN0YXR1c1xuICAgIG1lLnJlc29sdmVkID0gdHJ1ZTtcbiAgICBtZS5yZWplY3RlZCA9IGZhbHNlO1xuICAgIG1lLnBlbmRpbmcgPSBmYWxzZTtcblxuICAgIF9vblN1Y2Nlc3MuZm9yRWFjaChmdW5jdGlvbiAoZm4pIHtcbiAgICAgIGZuKHJlc3VsdCk7XG4gICAgfSk7XG5cbiAgICBfcHJvY2VzcyA9IGZ1bmN0aW9uIChvblN1Y2Nlc3MsIG9uRmFpbCkge1xuICAgICAgb25TdWNjZXNzKHJlc3VsdCk7XG4gICAgfTtcblxuICAgIF9yZXNvbHZlID0gX3JlamVjdCA9IGZ1bmN0aW9uICgpIHsgfTtcblxuICAgIHJldHVybiBtZTtcbiAgfTtcblxuICAvKipcbiAgICogUmVqZWN0IHRoZSBwcm9taXNlXG4gICAqIEBwYXJhbSB7RXJyb3J9IGVycm9yXG4gICAqIEB0eXBlIHtGdW5jdGlvbn1cbiAgICovXG4gIHZhciBfcmVqZWN0ID0gZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgLy8gdXBkYXRlIHN0YXR1c1xuICAgIG1lLnJlc29sdmVkID0gZmFsc2U7XG4gICAgbWUucmVqZWN0ZWQgPSB0cnVlO1xuICAgIG1lLnBlbmRpbmcgPSBmYWxzZTtcblxuICAgIF9vbkZhaWwuZm9yRWFjaChmdW5jdGlvbiAoZm4pIHtcbiAgICAgIGZuKGVycm9yKTtcbiAgICB9KTtcblxuICAgIF9wcm9jZXNzID0gZnVuY3Rpb24gKG9uU3VjY2Vzcywgb25GYWlsKSB7XG4gICAgICBvbkZhaWwoZXJyb3IpO1xuICAgIH07XG5cbiAgICBfcmVzb2x2ZSA9IF9yZWplY3QgPSBmdW5jdGlvbiAoKSB7IH1cblxuICAgIHJldHVybiBtZTtcbiAgfTtcblxuICAvKipcbiAgICogQ2FuY2VsIHRlIHByb21pc2UuIFRoaXMgd2lsbCByZWplY3QgdGhlIHByb21pc2Ugd2l0aCBhIENhbmNlbGxhdGlvbkVycm9yXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfSBzZWxmXG4gICAqL1xuICB0aGlzLmNhbmNlbCA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAocGFyZW50KSB7XG4gICAgICBwYXJlbnQuY2FuY2VsKCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgX3JlamVjdChuZXcgQ2FuY2VsbGF0aW9uRXJyb3IoKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1lO1xuICB9O1xuXG4gIC8qKlxuICAgKiBTZXQgYSB0aW1lb3V0IGZvciB0aGUgcHJvbWlzZS4gSWYgdGhlIHByb21pc2UgaXMgbm90IHJlc29sdmVkIHdpdGhpblxuICAgKiB0aGUgdGltZSwgdGhlIHByb21pc2Ugd2lsbCBiZSBjYW5jZWxsZWQgYW5kIGEgVGltZW91dEVycm9yIGlzIHRocm93bi5cbiAgICogSWYgdGhlIHByb21pc2UgaXMgcmVzb2x2ZWQgaW4gdGltZSwgdGhlIHRpbWVvdXQgaXMgcmVtb3ZlZC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGRlbGF5ICAgICBEZWxheSBpbiBtaWxsaXNlY29uZHNcbiAgICogQHJldHVybnMge1Byb21pc2V9IHNlbGZcbiAgICovXG4gIHRoaXMudGltZW91dCA9IGZ1bmN0aW9uIChkZWxheSkge1xuICAgIGlmIChwYXJlbnQpIHtcbiAgICAgIHBhcmVudC50aW1lb3V0KGRlbGF5KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB2YXIgdGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3JlamVjdChuZXcgVGltZW91dEVycm9yKCdQcm9taXNlIHRpbWVkIG91dCBhZnRlciAnICsgZGVsYXkgKyAnIG1zJykpO1xuICAgICAgfSwgZGVsYXkpO1xuXG4gICAgICBtZS5hbHdheXMoZnVuY3Rpb24gKCkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1lO1xuICB9O1xuXG4gIC8vIGF0dGFjaCBoYW5kbGVyIHBhc3NpbmcgdGhlIHJlc29sdmUgYW5kIHJlamVjdCBmdW5jdGlvbnNcbiAgaGFuZGxlcihmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgX3Jlc29sdmUocmVzdWx0KTtcbiAgfSwgZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgX3JlamVjdChlcnJvcik7XG4gIH0pO1xufVxuXG4vKipcbiAqIEV4ZWN1dGUgZ2l2ZW4gY2FsbGJhY2ssIHRoZW4gY2FsbCByZXNvbHZlL3JlamVjdCBiYXNlZCBvbiB0aGUgcmV0dXJuZWQgcmVzdWx0XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVzb2x2ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVqZWN0XG4gKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBfdGhlbihjYWxsYmFjaywgcmVzb2x2ZSwgcmVqZWN0KSB7XG4gIHJldHVybiBmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgdHJ5IHtcbiAgICAgIHZhciByZXMgPSBjYWxsYmFjayhyZXN1bHQpO1xuICAgICAgaWYgKHJlcyAmJiB0eXBlb2YgcmVzLnRoZW4gPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHJlc1snY2F0Y2gnXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAvLyBtZXRob2QgcmV0dXJuZWQgYSBwcm9taXNlXG4gICAgICAgIHJlcy50aGVuKHJlc29sdmUsIHJlamVjdCk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgcmVzb2x2ZShyZXMpO1xuICAgICAgfVxuICAgIH1cbiAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJlamVjdChlcnJvcik7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQWRkIGFuIG9uRmFpbCBjYWxsYmFjayB0byB0aGUgUHJvbWlzZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gb25GYWlsXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gcHJvbWlzZVxuICovXG5Qcm9taXNlLnByb3RvdHlwZVsnY2F0Y2gnXSA9IGZ1bmN0aW9uIChvbkZhaWwpIHtcbiAgcmV0dXJuIHRoaXMudGhlbihudWxsLCBvbkZhaWwpO1xufTtcblxuLy8gVE9ETzogYWRkIHN1cHBvcnQgZm9yIFByb21pc2UuY2F0Y2goRXJyb3IsIGNhbGxiYWNrKVxuLy8gVE9ETzogYWRkIHN1cHBvcnQgZm9yIFByb21pc2UuY2F0Y2goRXJyb3IsIEVycm9yLCBjYWxsYmFjaylcblxuLyoqXG4gKiBFeGVjdXRlIGdpdmVuIGNhbGxiYWNrIHdoZW4gdGhlIHByb21pc2UgZWl0aGVyIHJlc29sdmVzIG9yIHJlamVjdHMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICogQHJldHVybnMge1Byb21pc2V9IHByb21pc2VcbiAqL1xuUHJvbWlzZS5wcm90b3R5cGUuYWx3YXlzID0gZnVuY3Rpb24gKGZuKSB7XG4gIHJldHVybiB0aGlzLnRoZW4oZm4sIGZuKTtcbn07XG5cbi8qKlxuICogQ3JlYXRlIGEgcHJvbWlzZSB3aGljaCByZXNvbHZlcyB3aGVuIGFsbCBwcm92aWRlZCBwcm9taXNlcyBhcmUgcmVzb2x2ZWQsXG4gKiBhbmQgZmFpbHMgd2hlbiBhbnkgb2YgdGhlIHByb21pc2VzIHJlc29sdmVzLlxuICogQHBhcmFtIHtQcm9taXNlW119IHByb21pc2VzXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gcHJvbWlzZVxuICovXG5Qcm9taXNlLmFsbCA9IGZ1bmN0aW9uIChwcm9taXNlcyl7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgdmFyIHJlbWFpbmluZyA9IHByb21pc2VzLmxlbmd0aCxcbiAgICAgICAgcmVzdWx0cyA9IFtdO1xuXG4gICAgaWYgKHJlbWFpbmluZykge1xuICAgICAgcHJvbWlzZXMuZm9yRWFjaChmdW5jdGlvbiAocCwgaSkge1xuICAgICAgICBwLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgICAgIHJlc3VsdHNbaV0gPSByZXN1bHQ7XG4gICAgICAgICAgcmVtYWluaW5nLS07XG4gICAgICAgICAgaWYgKHJlbWFpbmluZyA9PSAwKSB7XG4gICAgICAgICAgICByZXNvbHZlKHJlc3VsdHMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgcmVtYWluaW5nID0gMDtcbiAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHJlc29sdmUocmVzdWx0cyk7XG4gICAgfVxuICB9KTtcbn07XG5cbi8qKlxuICogQ3JlYXRlIGEgcHJvbWlzZSByZXNvbHZlclxuICogQHJldHVybnMge3twcm9taXNlOiBQcm9taXNlLCByZXNvbHZlOiBGdW5jdGlvbiwgcmVqZWN0OiBGdW5jdGlvbn19IHJlc29sdmVyXG4gKi9cblByb21pc2UuZGVmZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciByZXNvbHZlciA9IHt9O1xuXG4gIHJlc29sdmVyLnByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgcmVzb2x2ZXIucmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgcmVzb2x2ZXIucmVqZWN0ID0gcmVqZWN0O1xuICB9KTtcblxuICByZXR1cm4gcmVzb2x2ZXI7XG59O1xuXG4vKipcbiAqIENyZWF0ZSBhIGNhbmNlbGxhdGlvbiBlcnJvclxuICogQHBhcmFtIHtTdHJpbmd9IFttZXNzYWdlXVxuICogQGV4dGVuZHMgRXJyb3JcbiAqL1xuZnVuY3Rpb24gQ2FuY2VsbGF0aW9uRXJyb3IobWVzc2FnZSkge1xuICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdwcm9taXNlIGNhbmNlbGxlZCc7XG4gIHRoaXMuc3RhY2sgPSAobmV3IEVycm9yKCkpLnN0YWNrO1xufVxuXG5DYW5jZWxsYXRpb25FcnJvci5wcm90b3R5cGUgPSBuZXcgRXJyb3IoKTtcbkNhbmNlbGxhdGlvbkVycm9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEVycm9yO1xuQ2FuY2VsbGF0aW9uRXJyb3IucHJvdG90eXBlLm5hbWUgPSAnQ2FuY2VsbGF0aW9uRXJyb3InO1xuXG5Qcm9taXNlLkNhbmNlbGxhdGlvbkVycm9yID0gQ2FuY2VsbGF0aW9uRXJyb3I7XG5cblxuLyoqXG4gKiBDcmVhdGUgYSB0aW1lb3V0IGVycm9yXG4gKiBAcGFyYW0ge1N0cmluZ30gW21lc3NhZ2VdXG4gKiBAZXh0ZW5kcyBFcnJvclxuICovXG5mdW5jdGlvbiBUaW1lb3V0RXJyb3IobWVzc2FnZSkge1xuICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICd0aW1lb3V0IGV4Y2VlZGVkJztcbiAgdGhpcy5zdGFjayA9IChuZXcgRXJyb3IoKSkuc3RhY2s7XG59XG5cblRpbWVvdXRFcnJvci5wcm90b3R5cGUgPSBuZXcgRXJyb3IoKTtcblRpbWVvdXRFcnJvci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBFcnJvcjtcblRpbWVvdXRFcnJvci5wcm90b3R5cGUubmFtZSA9ICdUaW1lb3V0RXJyb3InO1xuXG5Qcm9taXNlLlRpbWVvdXRFcnJvciA9IFRpbWVvdXRFcnJvcjtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IFByb21pc2U7XG4iLCAiLyoqXG4gKiBlbWJlZGRlZFdvcmtlci5qcyBjb250YWlucyBhbiBlbWJlZGRlZCB2ZXJzaW9uIG9mIHdvcmtlci5qcy5cbiAqIFRoaXMgZmlsZSBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCxcbiAqIGNoYW5nZXMgbWFkZSBpbiB0aGlzIGZpbGUgd2lsbCBiZSBvdmVyd3JpdHRlbi5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBcIiFmdW5jdGlvbigpe3ZhciBfX3dlYnBhY2tfbW9kdWxlc19fPXs1Nzc6ZnVuY3Rpb24oZSl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUscil7dGhpcy5tZXNzYWdlPWUsdGhpcy50cmFuc2Zlcj1yfX19LF9fd2VicGFja19tb2R1bGVfY2FjaGVfXz17fTtmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKGUpe3ZhciByPV9fd2VicGFja19tb2R1bGVfY2FjaGVfX1tlXTtyZXR1cm4gdm9pZCAwIT09cnx8KHI9X193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW2VdPXtleHBvcnRzOnt9fSxfX3dlYnBhY2tfbW9kdWxlc19fW2VdKHIsci5leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pKSxyLmV4cG9ydHN9dmFyIF9fd2VicGFja19leHBvcnRzX189e307IWZ1bmN0aW9uKCl7dmFyIGV4cG9ydHM9X193ZWJwYWNrX2V4cG9ydHNfXyxfX3dlYnBhY2tfdW51c2VkX2V4cG9ydF9fO2Z1bmN0aW9uIF90eXBlb2YoZSl7cmV0dXJuKF90eXBlb2Y9XFxcImZ1bmN0aW9uXFxcIj09dHlwZW9mIFN5bWJvbCYmXFxcInN5bWJvbFxcXCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmXFxcImZ1bmN0aW9uXFxcIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/XFxcInN5bWJvbFxcXCI6dHlwZW9mIGV9KShlKX12YXIgVHJhbnNmZXI9X193ZWJwYWNrX3JlcXVpcmVfXyg1NzcpLHJlcXVpcmVGb29sV2VicGFjaz1ldmFsKFxcXCJ0eXBlb2YgcmVxdWlyZSAhPT0gJ3VuZGVmaW5lZCcgPyByZXF1aXJlIDogZnVuY3Rpb24gKG1vZHVsZSkgeyB0aHJvdyBuZXcgRXJyb3IoJ01vZHVsZSBcXFxcXFxcIiArIG1vZHVsZSArIFxcXFxcXFwiIG5vdCBmb3VuZC4nKSB9XFxcIiksVEVSTUlOQVRFX01FVEhPRF9JRD1cXFwiX193b3JrZXJwb29sLXRlcm1pbmF0ZV9fXFxcIix3b3JrZXI9e2V4aXQ6ZnVuY3Rpb24oKXt9fSxXb3JrZXJUaHJlYWRzLHBhcmVudFBvcnQ7aWYoXFxcInVuZGVmaW5lZFxcXCIhPXR5cGVvZiBzZWxmJiZcXFwiZnVuY3Rpb25cXFwiPT10eXBlb2YgcG9zdE1lc3NhZ2UmJlxcXCJmdW5jdGlvblxcXCI9PXR5cGVvZiBhZGRFdmVudExpc3RlbmVyKXdvcmtlci5vbj1mdW5jdGlvbihlLHIpe2FkZEV2ZW50TGlzdGVuZXIoZSxmdW5jdGlvbihlKXtyKGUuZGF0YSl9KX0sd29ya2VyLnNlbmQ9ZnVuY3Rpb24oZSl7cG9zdE1lc3NhZ2UoZSl9O2Vsc2V7aWYoXFxcInVuZGVmaW5lZFxcXCI9PXR5cGVvZiBwcm9jZXNzKXRocm93IG5ldyBFcnJvcihcXFwiU2NyaXB0IG11c3QgYmUgZXhlY3V0ZWQgYXMgYSB3b3JrZXJcXFwiKTt0cnl7V29ya2VyVGhyZWFkcz1yZXF1aXJlRm9vbFdlYnBhY2soXFxcIndvcmtlcl90aHJlYWRzXFxcIil9Y2F0Y2goZXJyb3Ipe2lmKFxcXCJvYmplY3RcXFwiIT09X3R5cGVvZihlcnJvcil8fG51bGw9PT1lcnJvcnx8XFxcIk1PRFVMRV9OT1RfRk9VTkRcXFwiIT09ZXJyb3IuY29kZSl0aHJvdyBlcnJvcn1Xb3JrZXJUaHJlYWRzJiZudWxsIT09V29ya2VyVGhyZWFkcy5wYXJlbnRQb3J0PyhwYXJlbnRQb3J0PVdvcmtlclRocmVhZHMucGFyZW50UG9ydCx3b3JrZXIuc2VuZD1wYXJlbnRQb3J0LnBvc3RNZXNzYWdlLmJpbmQocGFyZW50UG9ydCksd29ya2VyLm9uPXBhcmVudFBvcnQub24uYmluZChwYXJlbnRQb3J0KSk6KHdvcmtlci5vbj1wcm9jZXNzLm9uLmJpbmQocHJvY2Vzcyksd29ya2VyLnNlbmQ9ZnVuY3Rpb24oZSl7cHJvY2Vzcy5zZW5kKGUpfSx3b3JrZXIub24oXFxcImRpc2Nvbm5lY3RcXFwiLGZ1bmN0aW9uKCl7cHJvY2Vzcy5leGl0KDEpfSkpLHdvcmtlci5leGl0PXByb2Nlc3MuZXhpdC5iaW5kKHByb2Nlc3MpfWZ1bmN0aW9uIGNvbnZlcnRFcnJvcihvKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMobykucmVkdWNlKGZ1bmN0aW9uKGUscil7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIse3ZhbHVlOm9bcl0sZW51bWVyYWJsZTohMH0pfSx7fSl9ZnVuY3Rpb24gaXNQcm9taXNlKGUpe3JldHVybiBlJiZcXFwiZnVuY3Rpb25cXFwiPT10eXBlb2YgZS50aGVuJiZcXFwiZnVuY3Rpb25cXFwiPT10eXBlb2YgZS5jYXRjaH13b3JrZXIubWV0aG9kcz17fSx3b3JrZXIubWV0aG9kcy5ydW49ZnVuY3Rpb24oZSxyKXtlPW5ldyBGdW5jdGlvbihcXFwicmV0dXJuIChcXFwiK2UrXFxcIikuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcXFwiKTtyZXR1cm4gZS5hcHBseShlLHIpfSx3b3JrZXIubWV0aG9kcy5tZXRob2RzPWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5rZXlzKHdvcmtlci5tZXRob2RzKX0sd29ya2VyLnRlcm1pbmF0aW9uSGFuZGxlcj12b2lkIDAsd29ya2VyLmNsZWFudXBBbmRFeGl0PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIoKXt3b3JrZXIuZXhpdChlKX1pZighd29ya2VyLnRlcm1pbmF0aW9uSGFuZGxlcilyZXR1cm4gcigpO3ZhciBvPXdvcmtlci50ZXJtaW5hdGlvbkhhbmRsZXIoZSk7aXNQcm9taXNlKG8pP28udGhlbihyLHIpOnIoKX07dmFyIGN1cnJlbnRSZXF1ZXN0SWQ9bnVsbDt3b3JrZXIub24oXFxcIm1lc3NhZ2VcXFwiLGZ1bmN0aW9uKHIpe2lmKHI9PT1URVJNSU5BVEVfTUVUSE9EX0lEKXJldHVybiB3b3JrZXIuY2xlYW51cEFuZEV4aXQoMCk7dHJ5e3ZhciBlPXdvcmtlci5tZXRob2RzW3IubWV0aG9kXTtpZighZSl0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gbWV0aG9kIFxcXCInK3IubWV0aG9kKydcXFwiJyk7Y3VycmVudFJlcXVlc3RJZD1yLmlkO3ZhciBvPWUuYXBwbHkoZSxyLnBhcmFtcyk7aXNQcm9taXNlKG8pP28udGhlbihmdW5jdGlvbihlKXtlIGluc3RhbmNlb2YgVHJhbnNmZXI/d29ya2VyLnNlbmQoe2lkOnIuaWQscmVzdWx0OmUubWVzc2FnZSxlcnJvcjpudWxsfSxlLnRyYW5zZmVyKTp3b3JrZXIuc2VuZCh7aWQ6ci5pZCxyZXN1bHQ6ZSxlcnJvcjpudWxsfSksY3VycmVudFJlcXVlc3RJZD1udWxsfSkuY2F0Y2goZnVuY3Rpb24oZSl7d29ya2VyLnNlbmQoe2lkOnIuaWQscmVzdWx0Om51bGwsZXJyb3I6Y29udmVydEVycm9yKGUpfSksY3VycmVudFJlcXVlc3RJZD1udWxsfSk6KG8gaW5zdGFuY2VvZiBUcmFuc2Zlcj93b3JrZXIuc2VuZCh7aWQ6ci5pZCxyZXN1bHQ6by5tZXNzYWdlLGVycm9yOm51bGx9LG8udHJhbnNmZXIpOndvcmtlci5zZW5kKHtpZDpyLmlkLHJlc3VsdDpvLGVycm9yOm51bGx9KSxjdXJyZW50UmVxdWVzdElkPW51bGwpfWNhdGNoKGUpe3dvcmtlci5zZW5kKHtpZDpyLmlkLHJlc3VsdDpudWxsLGVycm9yOmNvbnZlcnRFcnJvcihlKX0pfX0pLHdvcmtlci5yZWdpc3Rlcj1mdW5jdGlvbihlLHIpe2lmKGUpZm9yKHZhciBvIGluIGUpZS5oYXNPd25Qcm9wZXJ0eShvKSYmKHdvcmtlci5tZXRob2RzW29dPWVbb10pO3ImJih3b3JrZXIudGVybWluYXRpb25IYW5kbGVyPXIub25UZXJtaW5hdGUpLHdvcmtlci5zZW5kKFxcXCJyZWFkeVxcXCIpfSx3b3JrZXIuZW1pdD1mdW5jdGlvbihlKXtjdXJyZW50UmVxdWVzdElkJiYoZSBpbnN0YW5jZW9mIFRyYW5zZmVyP3dvcmtlci5zZW5kKHtpZDpjdXJyZW50UmVxdWVzdElkLGlzRXZlbnQ6ITAscGF5bG9hZDplLm1lc3NhZ2V9LGUudHJhbnNmZXIpOndvcmtlci5zZW5kKHtpZDpjdXJyZW50UmVxdWVzdElkLGlzRXZlbnQ6ITAscGF5bG9hZDplfSkpfSxfX3dlYnBhY2tfdW51c2VkX2V4cG9ydF9fPXdvcmtlci5yZWdpc3Rlcix3b3JrZXIuZW1pdH0oKX0oKTtcIjtcbiIsICIndXNlIHN0cmljdCc7XG5cbnZhciBQcm9taXNlID0gcmVxdWlyZSgnLi9Qcm9taXNlJyk7XG52YXIgZW52aXJvbm1lbnQgPSByZXF1aXJlKCcuL2Vudmlyb25tZW50Jyk7XG52YXIgcmVxdWlyZUZvb2xXZWJwYWNrID0gcmVxdWlyZSgnLi9yZXF1aXJlRm9vbFdlYnBhY2snKTtcblxuLyoqXG4gKiBTcGVjaWFsIG1lc3NhZ2Ugc2VudCBieSBwYXJlbnQgd2hpY2ggY2F1c2VzIGEgY2hpbGQgcHJvY2VzcyB3b3JrZXIgdG8gdGVybWluYXRlIGl0c2VsZi5cbiAqIE5vdCBhIFwibWVzc2FnZSBvYmplY3RcIjsgdGhpcyBzdHJpbmcgaXMgdGhlIGVudGlyZSBtZXNzYWdlLlxuICovXG52YXIgVEVSTUlOQVRFX01FVEhPRF9JRCA9ICdfX3dvcmtlcnBvb2wtdGVybWluYXRlX18nO1xuXG5mdW5jdGlvbiBlbnN1cmVXb3JrZXJUaHJlYWRzKCkge1xuICB2YXIgV29ya2VyVGhyZWFkcyA9IHRyeVJlcXVpcmVXb3JrZXJUaHJlYWRzKClcbiAgaWYgKCFXb3JrZXJUaHJlYWRzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdXb3JrZXJQb29sOiB3b3JrZXJUeXBlID0gXFwndGhyZWFkXFwnIGlzIG5vdCBzdXBwb3J0ZWQsIE5vZGUgPj0gMTEuNy4wIHJlcXVpcmVkJylcbiAgfVxuXG4gIHJldHVybiBXb3JrZXJUaHJlYWRzO1xufVxuXG4vLyBjaGVjayB3aGV0aGVyIFdvcmtlciBpcyBzdXBwb3J0ZWQgYnkgdGhlIGJyb3dzZXJcbmZ1bmN0aW9uIGVuc3VyZVdlYldvcmtlcigpIHtcbiAgLy8gV29ya2Fyb3VuZCBmb3IgYSBidWcgaW4gUGhhbnRvbUpTIChPciBRdFdlYmtpdCk6IGh0dHBzOi8vZ2l0aHViLmNvbS9hcml5YS9waGFudG9tanMvaXNzdWVzLzE0NTM0XG4gIGlmICh0eXBlb2YgV29ya2VyICE9PSAnZnVuY3Rpb24nICYmICh0eXBlb2YgV29ya2VyICE9PSAnb2JqZWN0JyB8fCB0eXBlb2YgV29ya2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciAhPT0gJ2Z1bmN0aW9uJykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1dvcmtlclBvb2w6IFdlYiBXb3JrZXJzIG5vdCBzdXBwb3J0ZWQnKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0cnlSZXF1aXJlV29ya2VyVGhyZWFkcygpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gcmVxdWlyZUZvb2xXZWJwYWNrKCd3b3JrZXJfdGhyZWFkcycpO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgaWYgKHR5cGVvZiBlcnJvciA9PT0gJ29iamVjdCcgJiYgZXJyb3IgIT09IG51bGwgJiYgZXJyb3IuY29kZSA9PT0gJ01PRFVMRV9OT1RfRk9VTkQnKSB7XG4gICAgICAvLyBubyB3b3JrZXJfdGhyZWFkcyBhdmFpbGFibGUgKG9sZCB2ZXJzaW9uIG9mIG5vZGUuanMpXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG59XG5cbi8vIGdldCB0aGUgZGVmYXVsdCB3b3JrZXIgc2NyaXB0XG5mdW5jdGlvbiBnZXREZWZhdWx0V29ya2VyKCkge1xuICBpZiAoZW52aXJvbm1lbnQucGxhdGZvcm0gPT09ICdicm93c2VyJykge1xuICAgIC8vIHRlc3Qgd2hldGhlciB0aGUgYnJvd3NlciBzdXBwb3J0cyBhbGwgZmVhdHVyZXMgdGhhdCB3ZSBuZWVkXG4gICAgaWYgKHR5cGVvZiBCbG9iID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdCbG9iIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGJyb3dzZXInKTtcbiAgICB9XG4gICAgaWYgKCF3aW5kb3cuVVJMIHx8IHR5cGVvZiB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVUkwuY3JlYXRlT2JqZWN0VVJMIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGJyb3dzZXInKTtcbiAgICB9XG5cbiAgICAvLyB1c2UgZW1iZWRkZWQgd29ya2VyLmpzXG4gICAgdmFyIGJsb2IgPSBuZXcgQmxvYihbcmVxdWlyZSgnLi9nZW5lcmF0ZWQvZW1iZWRkZWRXb3JrZXInKV0sIHt0eXBlOiAndGV4dC9qYXZhc2NyaXB0J30pO1xuICAgIHJldHVybiB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcbiAgfVxuICBlbHNlIHtcbiAgICAvLyB1c2UgZXh0ZXJuYWwgd29ya2VyLmpzIGluIGN1cnJlbnQgZGlyZWN0b3J5XG4gICAgcmV0dXJuIF9fZGlybmFtZSArICcvd29ya2VyLmpzJztcbiAgfVxufVxuXG5mdW5jdGlvbiBzZXR1cFdvcmtlcihzY3JpcHQsIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMud29ya2VyVHlwZSA9PT0gJ3dlYicpIHsgLy8gYnJvd3NlciBvbmx5XG4gICAgZW5zdXJlV2ViV29ya2VyKCk7XG4gICAgcmV0dXJuIHNldHVwQnJvd3NlcldvcmtlcihzY3JpcHQsIG9wdGlvbnMud29ya2VyT3B0cywgV29ya2VyKTtcbiAgfSBlbHNlIGlmIChvcHRpb25zLndvcmtlclR5cGUgPT09ICd0aHJlYWQnKSB7IC8vIG5vZGUuanMgb25seVxuICAgIFdvcmtlclRocmVhZHMgPSBlbnN1cmVXb3JrZXJUaHJlYWRzKCk7XG4gICAgcmV0dXJuIHNldHVwV29ya2VyVGhyZWFkV29ya2VyKHNjcmlwdCwgV29ya2VyVGhyZWFkcywgb3B0aW9ucy53b3JrZXJUaHJlYWRPcHRzKTtcbiAgfSBlbHNlIGlmIChvcHRpb25zLndvcmtlclR5cGUgPT09ICdwcm9jZXNzJyB8fCAhb3B0aW9ucy53b3JrZXJUeXBlKSB7IC8vIG5vZGUuanMgb25seVxuICAgIHJldHVybiBzZXR1cFByb2Nlc3NXb3JrZXIoc2NyaXB0LCByZXNvbHZlRm9ya09wdGlvbnMob3B0aW9ucyksIHJlcXVpcmVGb29sV2VicGFjaygnY2hpbGRfcHJvY2VzcycpKTtcbiAgfSBlbHNlIHsgLy8gb3B0aW9ucy53b3JrZXJUeXBlID09PSAnYXV0bycgb3IgdW5kZWZpbmVkXG4gICAgaWYgKGVudmlyb25tZW50LnBsYXRmb3JtID09PSAnYnJvd3NlcicpIHtcbiAgICAgIGVuc3VyZVdlYldvcmtlcigpO1xuICAgICAgcmV0dXJuIHNldHVwQnJvd3NlcldvcmtlcihzY3JpcHQsIG9wdGlvbnMud29ya2VyT3B0cywgV29ya2VyKTtcbiAgICB9XG4gICAgZWxzZSB7IC8vIGVudmlyb25tZW50LnBsYXRmb3JtID09PSAnbm9kZSdcbiAgICAgIHZhciBXb3JrZXJUaHJlYWRzID0gdHJ5UmVxdWlyZVdvcmtlclRocmVhZHMoKTtcbiAgICAgIGlmIChXb3JrZXJUaHJlYWRzKSB7XG4gICAgICAgIHJldHVybiBzZXR1cFdvcmtlclRocmVhZFdvcmtlcihzY3JpcHQsIFdvcmtlclRocmVhZHMsIG9wdGlvbnMud29ya2VyVGhyZWFkT3B0cyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gc2V0dXBQcm9jZXNzV29ya2VyKHNjcmlwdCwgcmVzb2x2ZUZvcmtPcHRpb25zKG9wdGlvbnMpLCByZXF1aXJlRm9vbFdlYnBhY2soJ2NoaWxkX3Byb2Nlc3MnKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHNldHVwQnJvd3NlcldvcmtlcihzY3JpcHQsIHdvcmtlck9wdHMsIFdvcmtlcikge1xuICAvLyBjcmVhdGUgdGhlIHdlYiB3b3JrZXJcbiAgdmFyIHdvcmtlciA9IG5ldyBXb3JrZXIoc2NyaXB0LCB3b3JrZXJPcHRzKTtcblxuICB3b3JrZXIuaXNCcm93c2VyV29ya2VyID0gdHJ1ZTtcbiAgLy8gYWRkIG5vZGUuanMgQVBJIHRvIHRoZSB3ZWIgd29ya2VyXG4gIHdvcmtlci5vbiA9IGZ1bmN0aW9uIChldmVudCwgY2FsbGJhY2spIHtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIGZ1bmN0aW9uIChtZXNzYWdlKSB7XG4gICAgICBjYWxsYmFjayhtZXNzYWdlLmRhdGEpO1xuICAgIH0pO1xuICB9O1xuICB3b3JrZXIuc2VuZCA9IGZ1bmN0aW9uIChtZXNzYWdlLCB0cmFuc2Zlcikge1xuICAgIHRoaXMucG9zdE1lc3NhZ2UobWVzc2FnZSwgdHJhbnNmZXIpO1xuICB9O1xuICByZXR1cm4gd29ya2VyO1xufVxuXG5mdW5jdGlvbiBzZXR1cFdvcmtlclRocmVhZFdvcmtlcihzY3JpcHQsIFdvcmtlclRocmVhZHMsIHdvcmtlclRocmVhZE9wdGlvbnMpIHtcbiAgdmFyIHdvcmtlciA9IG5ldyBXb3JrZXJUaHJlYWRzLldvcmtlcihzY3JpcHQsIHtcbiAgICBzdGRvdXQ6IGZhbHNlLCAvLyBhdXRvbWF0aWNhbGx5IHBpcGUgd29ya2VyLlNURE9VVCB0byBwcm9jZXNzLlNURE9VVFxuICAgIHN0ZGVycjogZmFsc2UsICAvLyBhdXRvbWF0aWNhbGx5IHBpcGUgd29ya2VyLlNUREVSUiB0byBwcm9jZXNzLlNUREVSUlxuICAgIC4uLndvcmtlclRocmVhZE9wdGlvbnNcbiAgfSk7XG4gIHdvcmtlci5pc1dvcmtlclRocmVhZCA9IHRydWU7XG4gIHdvcmtlci5zZW5kID0gZnVuY3Rpb24obWVzc2FnZSwgdHJhbnNmZXIpIHtcbiAgICB0aGlzLnBvc3RNZXNzYWdlKG1lc3NhZ2UsIHRyYW5zZmVyKTtcbiAgfTtcblxuICB3b3JrZXIua2lsbCA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMudGVybWluYXRlKCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG5cbiAgd29ya2VyLmRpc2Nvbm5lY3QgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnRlcm1pbmF0ZSgpO1xuICB9O1xuXG4gIHJldHVybiB3b3JrZXI7XG59XG5cbmZ1bmN0aW9uIHNldHVwUHJvY2Vzc1dvcmtlcihzY3JpcHQsIG9wdGlvbnMsIGNoaWxkX3Byb2Nlc3MpIHtcbiAgLy8gbm8gV29ya2VyVGhyZWFkcywgZmFsbGJhY2sgdG8gc3ViLXByb2Nlc3MgYmFzZWQgd29ya2Vyc1xuICB2YXIgd29ya2VyID0gY2hpbGRfcHJvY2Vzcy5mb3JrKFxuICAgIHNjcmlwdCxcbiAgICBvcHRpb25zLmZvcmtBcmdzLFxuICAgIG9wdGlvbnMuZm9ya09wdHNcbiAgKTtcblxuICAvLyBpZ25vcmUgdHJhbnNmZXIgYXJndW1lbnQgc2luY2UgaXQgaXMgbm90IHN1cHBvcnRlZCBieSBwcm9jZXNzXG4gIHZhciBzZW5kID0gd29ya2VyLnNlbmQ7XG4gIHdvcmtlci5zZW5kID0gZnVuY3Rpb24gKG1lc3NhZ2UpIHtcbiAgICByZXR1cm4gc2VuZC5jYWxsKHdvcmtlciwgbWVzc2FnZSk7XG4gIH07XG5cbiAgd29ya2VyLmlzQ2hpbGRQcm9jZXNzID0gdHJ1ZTtcbiAgcmV0dXJuIHdvcmtlcjtcbn1cblxuLy8gYWRkIGRlYnVnIGZsYWdzIHRvIGNoaWxkIHByb2Nlc3NlcyBpZiB0aGUgbm9kZSBpbnNwZWN0b3IgaXMgYWN0aXZlXG5mdW5jdGlvbiByZXNvbHZlRm9ya09wdGlvbnMob3B0cykge1xuICBvcHRzID0gb3B0cyB8fCB7fTtcblxuICB2YXIgcHJvY2Vzc0V4ZWNBcmd2ID0gcHJvY2Vzcy5leGVjQXJndi5qb2luKCcgJyk7XG4gIHZhciBpbnNwZWN0b3JBY3RpdmUgPSBwcm9jZXNzRXhlY0FyZ3YuaW5kZXhPZignLS1pbnNwZWN0JykgIT09IC0xO1xuICB2YXIgZGVidWdCcmsgPSBwcm9jZXNzRXhlY0FyZ3YuaW5kZXhPZignLS1kZWJ1Zy1icmsnKSAhPT0gLTE7XG5cbiAgdmFyIGV4ZWNBcmd2ID0gW107XG4gIGlmIChpbnNwZWN0b3JBY3RpdmUpIHtcbiAgICBleGVjQXJndi5wdXNoKCctLWluc3BlY3Q9JyArIG9wdHMuZGVidWdQb3J0KTtcblxuICAgIGlmIChkZWJ1Z0Jyaykge1xuICAgICAgZXhlY0FyZ3YucHVzaCgnLS1kZWJ1Zy1icmsnKTtcbiAgICB9XG4gIH1cblxuICBwcm9jZXNzLmV4ZWNBcmd2LmZvckVhY2goZnVuY3Rpb24oYXJnKSB7XG4gICAgaWYgKGFyZy5pbmRleE9mKCctLW1heC1vbGQtc3BhY2Utc2l6ZScpID4gLTEpIHtcbiAgICAgIGV4ZWNBcmd2LnB1c2goYXJnKVxuICAgIH1cbiAgfSlcblxuICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgb3B0cywge1xuICAgIGZvcmtBcmdzOiBvcHRzLmZvcmtBcmdzLFxuICAgIGZvcmtPcHRzOiBPYmplY3QuYXNzaWduKHt9LCBvcHRzLmZvcmtPcHRzLCB7XG4gICAgICBleGVjQXJndjogKG9wdHMuZm9ya09wdHMgJiYgb3B0cy5mb3JrT3B0cy5leGVjQXJndiB8fCBbXSlcbiAgICAgIC5jb25jYXQoZXhlY0FyZ3YpXG4gICAgfSlcbiAgfSk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYSBzZXJpYWxpemVkIGVycm9yIHRvIEVycm9yXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqIEVycm9yIHRoYXQgaGFzIGJlZW4gc2VyaWFsaXplZCBhbmQgcGFyc2VkIHRvIG9iamVjdFxuICogQHJldHVybiB7RXJyb3J9IFRoZSBlcXVpdmFsZW50IEVycm9yLlxuICovXG5mdW5jdGlvbiBvYmplY3RUb0Vycm9yIChvYmopIHtcbiAgdmFyIHRlbXAgPSBuZXcgRXJyb3IoJycpXG4gIHZhciBwcm9wcyA9IE9iamVjdC5rZXlzKG9iailcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgdGVtcFtwcm9wc1tpXV0gPSBvYmpbcHJvcHNbaV1dXG4gIH1cblxuICByZXR1cm4gdGVtcFxufVxuXG4vKipcbiAqIEEgV29ya2VySGFuZGxlciBjb250cm9scyBhIHNpbmdsZSB3b3JrZXIuIFRoaXMgd29ya2VyIGNhbiBiZSBhIGNoaWxkIHByb2Nlc3NcbiAqIG9uIG5vZGUuanMgb3IgYSBXZWJXb3JrZXIgaW4gYSBicm93c2VyIGVudmlyb25tZW50LlxuICogQHBhcmFtIHtTdHJpbmd9IFtzY3JpcHRdIElmIG5vIHNjcmlwdCBpcyBwcm92aWRlZCwgYSBkZWZhdWx0IHdvcmtlciB3aXRoIGFcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBydW4gd2lsbCBiZSBjcmVhdGVkLlxuICogQHBhcmFtIHtXb3JrZXJQb29sT3B0aW9uc30gX29wdGlvbnMgU2VlIGRvY3NcbiAqIEBjb25zdHJ1Y3RvclxuICovXG5mdW5jdGlvbiBXb3JrZXJIYW5kbGVyKHNjcmlwdCwgX29wdGlvbnMpIHtcbiAgdmFyIG1lID0gdGhpcztcbiAgdmFyIG9wdGlvbnMgPSBfb3B0aW9ucyB8fCB7fTtcblxuICB0aGlzLnNjcmlwdCA9IHNjcmlwdCB8fCBnZXREZWZhdWx0V29ya2VyKCk7XG4gIHRoaXMud29ya2VyID0gc2V0dXBXb3JrZXIodGhpcy5zY3JpcHQsIG9wdGlvbnMpO1xuICB0aGlzLmRlYnVnUG9ydCA9IG9wdGlvbnMuZGVidWdQb3J0O1xuICB0aGlzLmZvcmtPcHRzID0gb3B0aW9ucy5mb3JrT3B0cztcbiAgdGhpcy5mb3JrQXJncyA9IG9wdGlvbnMuZm9ya0FyZ3M7XG4gIHRoaXMud29ya2VyT3B0cyA9IG9wdGlvbnMud29ya2VyT3B0cztcbiAgdGhpcy53b3JrZXJUaHJlYWRPcHRzID0gb3B0aW9ucy53b3JrZXJUaHJlYWRPcHRzXG4gIHRoaXMud29ya2VyVGVybWluYXRlVGltZW91dCA9IG9wdGlvbnMud29ya2VyVGVybWluYXRlVGltZW91dDtcblxuICAvLyBUaGUgcmVhZHkgbWVzc2FnZSBpcyBvbmx5IHNlbnQgaWYgdGhlIHdvcmtlci5hZGQgbWV0aG9kIGlzIGNhbGxlZCAoQW5kIHRoZSBkZWZhdWx0IHNjcmlwdCBpcyBub3QgdXNlZClcbiAgaWYgKCFzY3JpcHQpIHtcbiAgICB0aGlzLndvcmtlci5yZWFkeSA9IHRydWU7XG4gIH1cblxuICAvLyBxdWV1ZSBmb3IgcmVxdWVzdHMgdGhhdCBhcmUgcmVjZWl2ZWQgYmVmb3JlIHRoZSB3b3JrZXIgaXMgcmVhZHlcbiAgdGhpcy5yZXF1ZXN0UXVldWUgPSBbXTtcbiAgdGhpcy53b3JrZXIub24oJ21lc3NhZ2UnLCBmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICBpZiAobWUudGVybWluYXRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHJlc3BvbnNlID09PSAnc3RyaW5nJyAmJiByZXNwb25zZSA9PT0gJ3JlYWR5Jykge1xuICAgICAgbWUud29ya2VyLnJlYWR5ID0gdHJ1ZTtcbiAgICAgIGRpc3BhdGNoUXVldWVkUmVxdWVzdHMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZmluZCB0aGUgdGFzayBmcm9tIHRoZSBwcm9jZXNzaW5nIHF1ZXVlLCBhbmQgcnVuIHRoZSB0YXNrcyBjYWxsYmFja1xuICAgICAgdmFyIGlkID0gcmVzcG9uc2UuaWQ7XG4gICAgICB2YXIgdGFzayA9IG1lLnByb2Nlc3NpbmdbaWRdO1xuICAgICAgaWYgKHRhc2sgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAocmVzcG9uc2UuaXNFdmVudCkge1xuICAgICAgICAgIGlmICh0YXNrLm9wdGlvbnMgJiYgdHlwZW9mIHRhc2sub3B0aW9ucy5vbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGFzay5vcHRpb25zLm9uKHJlc3BvbnNlLnBheWxvYWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyByZW1vdmUgdGhlIHRhc2sgZnJvbSB0aGUgcXVldWVcbiAgICAgICAgICBkZWxldGUgbWUucHJvY2Vzc2luZ1tpZF07XG5cbiAgICAgICAgICAvLyB0ZXN0IGlmIHdlIG5lZWQgdG8gdGVybWluYXRlXG4gICAgICAgICAgaWYgKG1lLnRlcm1pbmF0aW5nID09PSB0cnVlKSB7XG4gICAgICAgICAgICAvLyBjb21wbGV0ZSB3b3JrZXIgdGVybWluYXRpb24gaWYgYWxsIHRhc2tzIGFyZSBmaW5pc2hlZFxuICAgICAgICAgICAgbWUudGVybWluYXRlKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gcmVzb2x2ZSB0aGUgdGFzaydzIHByb21pc2VcbiAgICAgICAgICBpZiAocmVzcG9uc2UuZXJyb3IpIHtcbiAgICAgICAgICAgIHRhc2sucmVzb2x2ZXIucmVqZWN0KG9iamVjdFRvRXJyb3IocmVzcG9uc2UuZXJyb3IpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0YXNrLnJlc29sdmVyLnJlc29sdmUocmVzcG9uc2UucmVzdWx0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIC8vIHJlamVjdCBhbGwgcnVubmluZyB0YXNrcyBvbiB3b3JrZXIgZXJyb3JcbiAgZnVuY3Rpb24gb25FcnJvcihlcnJvcikge1xuICAgIG1lLnRlcm1pbmF0ZWQgPSB0cnVlO1xuXG4gICAgZm9yICh2YXIgaWQgaW4gbWUucHJvY2Vzc2luZykge1xuICAgICAgaWYgKG1lLnByb2Nlc3NpbmdbaWRdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbWUucHJvY2Vzc2luZ1tpZF0ucmVzb2x2ZXIucmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG4gICAgbWUucHJvY2Vzc2luZyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIH1cblxuICAvLyBzZW5kIGFsbCBxdWV1ZWQgcmVxdWVzdHMgdG8gd29ya2VyXG4gIGZ1bmN0aW9uIGRpc3BhdGNoUXVldWVkUmVxdWVzdHMoKVxuICB7XG4gICAgZm9yKGNvbnN0IHJlcXVlc3Qgb2YgbWUucmVxdWVzdFF1ZXVlLnNwbGljZSgwKSkge1xuICAgICAgbWUud29ya2VyLnNlbmQocmVxdWVzdC5tZXNzYWdlLCByZXF1ZXN0LnRyYW5zZmVyKTtcbiAgICB9XG4gIH1cblxuICB2YXIgd29ya2VyID0gdGhpcy53b3JrZXI7XG4gIC8vIGxpc3RlbiBmb3Igd29ya2VyIG1lc3NhZ2VzIGVycm9yIGFuZCBleGl0XG4gIHRoaXMud29ya2VyLm9uKCdlcnJvcicsIG9uRXJyb3IpO1xuICB0aGlzLndvcmtlci5vbignZXhpdCcsIGZ1bmN0aW9uIChleGl0Q29kZSwgc2lnbmFsQ29kZSkge1xuICAgIHZhciBtZXNzYWdlID0gJ1dvcmtlcnBvb2wgV29ya2VyIHRlcm1pbmF0ZWQgVW5leHBlY3RlZGx5XFxuJztcblxuICAgIG1lc3NhZ2UgKz0gJyAgICBleGl0Q29kZTogYCcgKyBleGl0Q29kZSArICdgXFxuJztcbiAgICBtZXNzYWdlICs9ICcgICAgc2lnbmFsQ29kZTogYCcgKyBzaWduYWxDb2RlICsgJ2BcXG4nO1xuXG4gICAgbWVzc2FnZSArPSAnICAgIHdvcmtlcnBvb2wuc2NyaXB0OiBgJyArICBtZS5zY3JpcHQgKyAnYFxcbic7XG4gICAgbWVzc2FnZSArPSAnICAgIHNwYXduQXJnczogYCcgKyAgd29ya2VyLnNwYXduYXJncyArICdgXFxuJztcbiAgICBtZXNzYWdlICs9ICcgICAgc3Bhd25maWxlOiBgJyArIHdvcmtlci5zcGF3bmZpbGUgKyAnYFxcbidcblxuICAgIG1lc3NhZ2UgKz0gJyAgICBzdGRvdXQ6IGAnICsgd29ya2VyLnN0ZG91dCArICdgXFxuJ1xuICAgIG1lc3NhZ2UgKz0gJyAgICBzdGRlcnI6IGAnICsgd29ya2VyLnN0ZGVyciArICdgXFxuJ1xuXG4gICAgb25FcnJvcihuZXcgRXJyb3IobWVzc2FnZSkpO1xuICB9KTtcblxuICB0aGlzLnByb2Nlc3NpbmcgPSBPYmplY3QuY3JlYXRlKG51bGwpOyAvLyBxdWV1ZSB3aXRoIHRhc2tzIGN1cnJlbnRseSBpbiBwcm9ncmVzc1xuXG4gIHRoaXMudGVybWluYXRpbmcgPSBmYWxzZTtcbiAgdGhpcy50ZXJtaW5hdGVkID0gZmFsc2U7XG4gIHRoaXMuY2xlYW5pbmcgPSBmYWxzZTtcbiAgdGhpcy50ZXJtaW5hdGlvbkhhbmRsZXIgPSBudWxsO1xuICB0aGlzLmxhc3RJZCA9IDA7XG59XG5cbi8qKlxuICogR2V0IGEgbGlzdCB3aXRoIG1ldGhvZHMgYXZhaWxhYmxlIG9uIHRoZSB3b3JrZXIuXG4gKiBAcmV0dXJuIHtQcm9taXNlLjxTdHJpbmdbXSwgRXJyb3I+fSBtZXRob2RzXG4gKi9cbldvcmtlckhhbmRsZXIucHJvdG90eXBlLm1ldGhvZHMgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmV4ZWMoJ21ldGhvZHMnKTtcbn07XG5cbi8qKlxuICogRXhlY3V0ZSBhIG1ldGhvZCB3aXRoIGdpdmVuIHBhcmFtZXRlcnMgb24gdGhlIHdvcmtlclxuICogQHBhcmFtIHtTdHJpbmd9IG1ldGhvZFxuICogQHBhcmFtIHtBcnJheX0gW3BhcmFtc11cbiAqIEBwYXJhbSB7e3Jlc29sdmU6IEZ1bmN0aW9uLCByZWplY3Q6IEZ1bmN0aW9ufX0gW3Jlc29sdmVyXVxuICogQHBhcmFtIHtFeGVjT3B0aW9uc30gIFtvcHRpb25zXVxuICogQHJldHVybiB7UHJvbWlzZS48KiwgRXJyb3I+fSByZXN1bHRcbiAqL1xuV29ya2VySGFuZGxlci5wcm90b3R5cGUuZXhlYyA9IGZ1bmN0aW9uKG1ldGhvZCwgcGFyYW1zLCByZXNvbHZlciwgb3B0aW9ucykge1xuICBpZiAoIXJlc29sdmVyKSB7XG4gICAgcmVzb2x2ZXIgPSBQcm9taXNlLmRlZmVyKCk7XG4gIH1cblxuICAvLyBnZW5lcmF0ZSBhIHVuaXF1ZSBpZCBmb3IgdGhlIHRhc2tcbiAgdmFyIGlkID0gKyt0aGlzLmxhc3RJZDtcblxuICAvLyByZWdpc3RlciBhIG5ldyB0YXNrIGFzIGJlaW5nIGluIHByb2dyZXNzXG4gIHRoaXMucHJvY2Vzc2luZ1tpZF0gPSB7XG4gICAgaWQ6IGlkLFxuICAgIHJlc29sdmVyOiByZXNvbHZlcixcbiAgICBvcHRpb25zOiBvcHRpb25zXG4gIH07XG5cbiAgLy8gYnVpbGQgYSBKU09OLVJQQyByZXF1ZXN0XG4gIHZhciByZXF1ZXN0ID0ge1xuICAgIG1lc3NhZ2U6IHtcbiAgICAgIGlkOiBpZCxcbiAgICAgIG1ldGhvZDogbWV0aG9kLFxuICAgICAgcGFyYW1zOiBwYXJhbXNcbiAgICB9LFxuICAgIHRyYW5zZmVyOiBvcHRpb25zICYmIG9wdGlvbnMudHJhbnNmZXJcbiAgfTtcblxuICBpZiAodGhpcy50ZXJtaW5hdGVkKSB7XG4gICAgcmVzb2x2ZXIucmVqZWN0KG5ldyBFcnJvcignV29ya2VyIGlzIHRlcm1pbmF0ZWQnKSk7XG4gIH0gZWxzZSBpZiAodGhpcy53b3JrZXIucmVhZHkpIHtcbiAgICAvLyBzZW5kIHRoZSByZXF1ZXN0IHRvIHRoZSB3b3JrZXJcbiAgICB0aGlzLndvcmtlci5zZW5kKHJlcXVlc3QubWVzc2FnZSwgcmVxdWVzdC50cmFuc2Zlcik7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5yZXF1ZXN0UXVldWUucHVzaChyZXF1ZXN0KTtcbiAgfVxuXG4gIC8vIG9uIGNhbmNlbGxhdGlvbiwgZm9yY2UgdGhlIHdvcmtlciB0byB0ZXJtaW5hdGVcbiAgdmFyIG1lID0gdGhpcztcbiAgcmV0dXJuIHJlc29sdmVyLnByb21pc2UuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgUHJvbWlzZS5DYW5jZWxsYXRpb25FcnJvciB8fCBlcnJvciBpbnN0YW5jZW9mIFByb21pc2UuVGltZW91dEVycm9yKSB7XG4gICAgICAvLyByZW1vdmUgdGhpcyB0YXNrIGZyb20gdGhlIHF1ZXVlLiBJdCBpcyBhbHJlYWR5IHJlamVjdGVkIChoZW5jZSB0aGlzXG4gICAgICAvLyBjYXRjaCBldmVudCksIGFuZCBlbHNlIGl0IHdpbGwgYmUgcmVqZWN0ZWQgYWdhaW4gd2hlbiB0ZXJtaW5hdGluZ1xuICAgICAgZGVsZXRlIG1lLnByb2Nlc3NpbmdbaWRdO1xuXG4gICAgICAvLyB0ZXJtaW5hdGUgd29ya2VyXG4gICAgICByZXR1cm4gbWUudGVybWluYXRlQW5kTm90aWZ5KHRydWUpXG4gICAgICAgIC50aGVuKGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9LCBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH0pXG59O1xuXG4vKipcbiAqIFRlc3Qgd2hldGhlciB0aGUgd29ya2VyIGlzIHByb2Nlc3NpbmcgYW55IHRhc2tzIG9yIGNsZWFuaW5nIHVwIGJlZm9yZSB0ZXJtaW5hdGlvbi5cbiAqIEByZXR1cm4ge2Jvb2xlYW59IFJldHVybnMgdHJ1ZSBpZiB0aGUgd29ya2VyIGlzIGJ1c3lcbiAqL1xuV29ya2VySGFuZGxlci5wcm90b3R5cGUuYnVzeSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuY2xlYW5pbmcgfHwgT2JqZWN0LmtleXModGhpcy5wcm9jZXNzaW5nKS5sZW5ndGggPiAwO1xufTtcblxuLyoqXG4gKiBUZXJtaW5hdGUgdGhlIHdvcmtlci5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2ZvcmNlPWZhbHNlXSAgIElmIGZhbHNlIChkZWZhdWx0KSwgdGhlIHdvcmtlciBpcyB0ZXJtaW5hdGVkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZnRlciBmaW5pc2hpbmcgYWxsIHRhc2tzIGN1cnJlbnRseSBpblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3Jlc3MuIElmIHRydWUsIHRoZSB3b3JrZXIgd2lsbCBiZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVybWluYXRlZCBpbW1lZGlhdGVseS5cbiAqIEBwYXJhbSB7ZnVuY3Rpb259IFtjYWxsYmFjaz1udWxsXSBJZiBwcm92aWRlZCwgd2lsbCBiZSBjYWxsZWQgd2hlbiBwcm9jZXNzIHRlcm1pbmF0ZXMuXG4gKi9cbldvcmtlckhhbmRsZXIucHJvdG90eXBlLnRlcm1pbmF0ZSA9IGZ1bmN0aW9uIChmb3JjZSwgY2FsbGJhY2spIHtcbiAgdmFyIG1lID0gdGhpcztcbiAgaWYgKGZvcmNlKSB7XG4gICAgLy8gY2FuY2VsIGFsbCB0YXNrcyBpbiBwcm9ncmVzc1xuICAgIGZvciAodmFyIGlkIGluIHRoaXMucHJvY2Vzc2luZykge1xuICAgICAgaWYgKHRoaXMucHJvY2Vzc2luZ1tpZF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLnByb2Nlc3NpbmdbaWRdLnJlc29sdmVyLnJlamVjdChuZXcgRXJyb3IoJ1dvcmtlciB0ZXJtaW5hdGVkJykpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnByb2Nlc3NpbmcgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHRoaXMudGVybWluYXRpb25IYW5kbGVyID0gY2FsbGJhY2s7XG4gIH1cbiAgaWYgKCF0aGlzLmJ1c3koKSkge1xuICAgIC8vIGFsbCB0YXNrcyBhcmUgZmluaXNoZWQuIGtpbGwgdGhlIHdvcmtlclxuICAgIHZhciBjbGVhbnVwID0gZnVuY3Rpb24oZXJyKSB7XG4gICAgICBtZS50ZXJtaW5hdGVkID0gdHJ1ZTtcbiAgICAgIG1lLmNsZWFuaW5nID0gZmFsc2U7XG4gICAgICBpZiAobWUud29ya2VyICE9IG51bGwgJiYgbWUud29ya2VyLnJlbW92ZUFsbExpc3RlbmVycykge1xuICAgICAgICAvLyByZW1vdmVBbGxMaXN0ZW5lcnMgaXMgb25seSBhdmFpbGFibGUgZm9yIGNoaWxkX3Byb2Nlc3NcbiAgICAgICAgbWUud29ya2VyLnJlbW92ZUFsbExpc3RlbmVycygnbWVzc2FnZScpO1xuICAgICAgfVxuICAgICAgbWUud29ya2VyID0gbnVsbDtcbiAgICAgIG1lLnRlcm1pbmF0aW5nID0gZmFsc2U7XG4gICAgICBpZiAobWUudGVybWluYXRpb25IYW5kbGVyKSB7XG4gICAgICAgIG1lLnRlcm1pbmF0aW9uSGFuZGxlcihlcnIsIG1lKTtcbiAgICAgIH0gZWxzZSBpZiAoZXJyKSB7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy53b3JrZXIpIHtcbiAgICAgIGlmICh0eXBlb2YgdGhpcy53b3JrZXIua2lsbCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBpZiAodGhpcy53b3JrZXIua2lsbGVkKSB7XG4gICAgICAgICAgY2xlYW51cChuZXcgRXJyb3IoJ3dvcmtlciBhbHJlYWR5IGtpbGxlZCEnKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY2hpbGQgcHJvY2VzcyBhbmQgd29ya2VyIHRocmVhZHNcbiAgICAgICAgdmFyIGNsZWFuRXhpdFRpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGlmIChtZS53b3JrZXIpIHtcbiAgICAgICAgICAgIG1lLndvcmtlci5raWxsKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LCB0aGlzLndvcmtlclRlcm1pbmF0ZVRpbWVvdXQpO1xuXG4gICAgICAgIHRoaXMud29ya2VyLm9uY2UoJ2V4aXQnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQoY2xlYW5FeGl0VGltZW91dCk7XG4gICAgICAgICAgaWYgKG1lLndvcmtlcikge1xuICAgICAgICAgICAgbWUud29ya2VyLmtpbGxlZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNsZWFudXAoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHRoaXMud29ya2VyLnJlYWR5KSB7XG4gICAgICAgICAgdGhpcy53b3JrZXIuc2VuZChURVJNSU5BVEVfTUVUSE9EX0lEKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnJlcXVlc3RRdWV1ZS5wdXNoKHsgbWVzc2FnZTogVEVSTUlOQVRFX01FVEhPRF9JRCB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG1hcmsgdGhhdCB0aGUgd29ya2VyIGlzIGNsZWFuaW5nIHVwIHJlc291cmNlc1xuICAgICAgICAvLyB0byBwcmV2ZW50IG5ldyB0YXNrcyBmcm9tIGJlaW5nIGV4ZWN1dGVkXG4gICAgICAgIHRoaXMuY2xlYW5pbmcgPSB0cnVlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBlbHNlIGlmICh0eXBlb2YgdGhpcy53b3JrZXIudGVybWluYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRoaXMud29ya2VyLnRlcm1pbmF0ZSgpOyAvLyB3ZWIgd29ya2VyXG4gICAgICAgIHRoaXMud29ya2VyLmtpbGxlZCA9IHRydWU7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gdGVybWluYXRlIHdvcmtlcicpO1xuICAgICAgfVxuICAgIH1cbiAgICBjbGVhbnVwKCk7XG4gIH1cbiAgZWxzZSB7XG4gICAgLy8gd2UgY2FuJ3QgdGVybWluYXRlIGltbWVkaWF0ZWx5LCB0aGVyZSBhcmUgc3RpbGwgdGFza3MgYmVpbmcgZXhlY3V0ZWRcbiAgICB0aGlzLnRlcm1pbmF0aW5nID0gdHJ1ZTtcbiAgfVxufTtcblxuLyoqXG4gKiBUZXJtaW5hdGUgdGhlIHdvcmtlciwgcmV0dXJuaW5nIGEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHRlcm1pbmF0aW9uIGhhcyBiZWVuIGRvbmUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtmb3JjZT1mYWxzZV0gICBJZiBmYWxzZSAoZGVmYXVsdCksIHRoZSB3b3JrZXIgaXMgdGVybWluYXRlZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXIgZmluaXNoaW5nIGFsbCB0YXNrcyBjdXJyZW50bHkgaW5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyZXNzLiBJZiB0cnVlLCB0aGUgd29ya2VyIHdpbGwgYmVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlcm1pbmF0ZWQgaW1tZWRpYXRlbHkuXG4gKiBAcGFyYW0ge251bWJlcn0gW3RpbWVvdXRdICAgICAgICBJZiBwcm92aWRlZCBhbmQgbm9uLXplcm8sIHdvcmtlciB0ZXJtaW5hdGlvbiBwcm9taXNlIHdpbGwgYmUgcmVqZWN0ZWRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVyIHRpbWVvdXQgaWYgd29ya2VyIHByb2Nlc3MgaGFzIG5vdCBiZWVuIHRlcm1pbmF0ZWQuXG4gKiBAcmV0dXJuIHtQcm9taXNlLjxXb3JrZXJIYW5kbGVyLCBFcnJvcj59XG4gKi9cbldvcmtlckhhbmRsZXIucHJvdG90eXBlLnRlcm1pbmF0ZUFuZE5vdGlmeSA9IGZ1bmN0aW9uIChmb3JjZSwgdGltZW91dCkge1xuICB2YXIgcmVzb2x2ZXIgPSBQcm9taXNlLmRlZmVyKCk7XG4gIGlmICh0aW1lb3V0KSB7XG4gICAgcmVzb2x2ZXIucHJvbWlzZS50aW1lb3V0KHRpbWVvdXQpO1xuICB9XG4gIHRoaXMudGVybWluYXRlKGZvcmNlLCBmdW5jdGlvbihlcnIsIHdvcmtlcikge1xuICAgIGlmIChlcnIpIHtcbiAgICAgIHJlc29sdmVyLnJlamVjdChlcnIpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXNvbHZlci5yZXNvbHZlKHdvcmtlcik7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc29sdmVyLnByb21pc2U7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFdvcmtlckhhbmRsZXI7XG5tb2R1bGUuZXhwb3J0cy5fdHJ5UmVxdWlyZVdvcmtlclRocmVhZHMgPSB0cnlSZXF1aXJlV29ya2VyVGhyZWFkcztcbm1vZHVsZS5leHBvcnRzLl9zZXR1cFByb2Nlc3NXb3JrZXIgPSBzZXR1cFByb2Nlc3NXb3JrZXI7XG5tb2R1bGUuZXhwb3J0cy5fc2V0dXBCcm93c2VyV29ya2VyID0gc2V0dXBCcm93c2VyV29ya2VyO1xubW9kdWxlLmV4cG9ydHMuX3NldHVwV29ya2VyVGhyZWFkV29ya2VyID0gc2V0dXBXb3JrZXJUaHJlYWRXb3JrZXI7XG5tb2R1bGUuZXhwb3J0cy5lbnN1cmVXb3JrZXJUaHJlYWRzID0gZW5zdXJlV29ya2VyVGhyZWFkcztcbiIsICIndXNlIHN0cmljdCc7XG5cbnZhciBNQVhfUE9SVFMgPSA2NTUzNTtcbm1vZHVsZS5leHBvcnRzID0gRGVidWdQb3J0QWxsb2NhdG9yO1xuZnVuY3Rpb24gRGVidWdQb3J0QWxsb2NhdG9yKCkge1xuICB0aGlzLnBvcnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgdGhpcy5sZW5ndGggPSAwO1xufVxuXG5EZWJ1Z1BvcnRBbGxvY2F0b3IucHJvdG90eXBlLm5leHRBdmFpbGFibGVTdGFydGluZ0F0ID0gZnVuY3Rpb24oc3RhcnRpbmcpIHtcbiAgd2hpbGUgKHRoaXMucG9ydHNbc3RhcnRpbmddID09PSB0cnVlKSB7XG4gICAgc3RhcnRpbmcrKztcbiAgfVxuXG4gIGlmIChzdGFydGluZyA+PSBNQVhfUE9SVFMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1dvcmtlclBvb2wgZGVidWcgcG9ydCBsaW1pdCByZWFjaGVkOiAnICsgc3RhcnRpbmcgKyAnPj0gJyArIE1BWF9QT1JUUyApO1xuICB9XG5cbiAgdGhpcy5wb3J0c1tzdGFydGluZ10gPSB0cnVlO1xuICB0aGlzLmxlbmd0aCsrO1xuICByZXR1cm4gc3RhcnRpbmc7XG59O1xuXG5EZWJ1Z1BvcnRBbGxvY2F0b3IucHJvdG90eXBlLnJlbGVhc2VQb3J0ID0gZnVuY3Rpb24ocG9ydCkge1xuICBkZWxldGUgdGhpcy5wb3J0c1twb3J0XTtcbiAgdGhpcy5sZW5ndGgtLTtcbn07XG5cbiIsICJ2YXIgUHJvbWlzZSA9IHJlcXVpcmUoJy4vUHJvbWlzZScpO1xudmFyIFdvcmtlckhhbmRsZXIgPSByZXF1aXJlKCcuL1dvcmtlckhhbmRsZXInKTtcbnZhciBlbnZpcm9ubWVudCA9IHJlcXVpcmUoJy4vZW52aXJvbm1lbnQnKTtcbnZhciBEZWJ1Z1BvcnRBbGxvY2F0b3IgPSByZXF1aXJlKCcuL2RlYnVnLXBvcnQtYWxsb2NhdG9yJyk7XG52YXIgREVCVUdfUE9SVF9BTExPQ0FUT1IgPSBuZXcgRGVidWdQb3J0QWxsb2NhdG9yKCk7XG4vKipcbiAqIEEgcG9vbCB0byBtYW5hZ2Ugd29ya2Vyc1xuICogQHBhcmFtIHtTdHJpbmd9IFtzY3JpcHRdICAgT3B0aW9uYWwgd29ya2VyIHNjcmlwdFxuICogQHBhcmFtIHtXb3JrZXJQb29sT3B0aW9uc30gW29wdGlvbnNdICBTZWUgZG9jc1xuICogQGNvbnN0cnVjdG9yXG4gKi9cbmZ1bmN0aW9uIFBvb2woc2NyaXB0LCBvcHRpb25zKSB7XG4gIGlmICh0eXBlb2Ygc2NyaXB0ID09PSAnc3RyaW5nJykge1xuICAgIHRoaXMuc2NyaXB0ID0gc2NyaXB0IHx8IG51bGw7XG4gIH1cbiAgZWxzZSB7XG4gICAgdGhpcy5zY3JpcHQgPSBudWxsO1xuICAgIG9wdGlvbnMgPSBzY3JpcHQ7XG4gIH1cblxuICB0aGlzLndvcmtlcnMgPSBbXTsgIC8vIHF1ZXVlIHdpdGggYWxsIHdvcmtlcnNcbiAgdGhpcy50YXNrcyA9IFtdOyAgICAvLyBxdWV1ZSB3aXRoIHRhc2tzIGF3YWl0aW5nIGV4ZWN1dGlvblxuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gIHRoaXMuZm9ya0FyZ3MgPSBPYmplY3QuZnJlZXplKG9wdGlvbnMuZm9ya0FyZ3MgfHwgW10pO1xuICB0aGlzLmZvcmtPcHRzID0gT2JqZWN0LmZyZWV6ZShvcHRpb25zLmZvcmtPcHRzIHx8IHt9KTtcbiAgdGhpcy53b3JrZXJPcHRzID0gT2JqZWN0LmZyZWV6ZShvcHRpb25zLndvcmtlck9wdHMgfHwge30pO1xuICB0aGlzLndvcmtlclRocmVhZE9wdHMgPSBPYmplY3QuZnJlZXplKG9wdGlvbnMud29ya2VyVGhyZWFkT3B0cyB8fCB7fSlcbiAgdGhpcy5kZWJ1Z1BvcnRTdGFydCA9IChvcHRpb25zLmRlYnVnUG9ydFN0YXJ0IHx8IDQzMjEwKTtcbiAgdGhpcy5ub2RlV29ya2VyID0gb3B0aW9ucy5ub2RlV29ya2VyO1xuICB0aGlzLndvcmtlclR5cGUgPSBvcHRpb25zLndvcmtlclR5cGUgfHwgb3B0aW9ucy5ub2RlV29ya2VyIHx8ICdhdXRvJ1xuICB0aGlzLm1heFF1ZXVlU2l6ZSA9IG9wdGlvbnMubWF4UXVldWVTaXplIHx8IEluZmluaXR5O1xuICB0aGlzLndvcmtlclRlcm1pbmF0ZVRpbWVvdXQgPSBvcHRpb25zLndvcmtlclRlcm1pbmF0ZVRpbWVvdXQgfHwgMTAwMDtcblxuICB0aGlzLm9uQ3JlYXRlV29ya2VyID0gb3B0aW9ucy5vbkNyZWF0ZVdvcmtlciB8fCAoKCkgPT4gbnVsbCk7XG4gIHRoaXMub25UZXJtaW5hdGVXb3JrZXIgPSBvcHRpb25zLm9uVGVybWluYXRlV29ya2VyIHx8ICgoKSA9PiBudWxsKTtcblxuICAvLyBjb25maWd1cmF0aW9uXG4gIGlmIChvcHRpb25zICYmICdtYXhXb3JrZXJzJyBpbiBvcHRpb25zKSB7XG4gICAgdmFsaWRhdGVNYXhXb3JrZXJzKG9wdGlvbnMubWF4V29ya2Vycyk7XG4gICAgdGhpcy5tYXhXb3JrZXJzID0gb3B0aW9ucy5tYXhXb3JrZXJzO1xuICB9XG4gIGVsc2Uge1xuICAgIHRoaXMubWF4V29ya2VycyA9IE1hdGgubWF4KChlbnZpcm9ubWVudC5jcHVzIHx8IDQpIC0gMSwgMSk7XG4gIH1cblxuICBpZiAob3B0aW9ucyAmJiAnbWluV29ya2VycycgaW4gb3B0aW9ucykge1xuICAgIGlmKG9wdGlvbnMubWluV29ya2VycyA9PT0gJ21heCcpIHtcbiAgICAgIHRoaXMubWluV29ya2VycyA9IHRoaXMubWF4V29ya2VycztcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsaWRhdGVNaW5Xb3JrZXJzKG9wdGlvbnMubWluV29ya2Vycyk7XG4gICAgICB0aGlzLm1pbldvcmtlcnMgPSBvcHRpb25zLm1pbldvcmtlcnM7XG4gICAgICB0aGlzLm1heFdvcmtlcnMgPSBNYXRoLm1heCh0aGlzLm1pbldvcmtlcnMsIHRoaXMubWF4V29ya2Vycyk7ICAgICAvLyBpbiBjYXNlIG1pbldvcmtlcnMgaXMgaGlnaGVyIHRoYW4gbWF4V29ya2Vyc1xuICAgIH1cbiAgICB0aGlzLl9lbnN1cmVNaW5Xb3JrZXJzKCk7XG4gIH1cblxuICB0aGlzLl9ib3VuZE5leHQgPSB0aGlzLl9uZXh0LmJpbmQodGhpcyk7XG5cblxuICBpZiAodGhpcy53b3JrZXJUeXBlID09PSAndGhyZWFkJykge1xuICAgIFdvcmtlckhhbmRsZXIuZW5zdXJlV29ya2VyVGhyZWFkcygpO1xuICB9XG59XG5cblxuLyoqXG4gKiBFeGVjdXRlIGEgZnVuY3Rpb24gb24gYSB3b3JrZXIuXG4gKlxuICogRXhhbXBsZSB1c2FnZTpcbiAqXG4gKiAgIHZhciBwb29sID0gbmV3IFBvb2woKVxuICpcbiAqICAgLy8gY2FsbCBhIGZ1bmN0aW9uIGF2YWlsYWJsZSBvbiB0aGUgd29ya2VyXG4gKiAgIHBvb2wuZXhlYygnZmlib25hY2NpJywgWzZdKVxuICpcbiAqICAgLy8gb2ZmbG9hZCBhIGZ1bmN0aW9uXG4gKiAgIGZ1bmN0aW9uIGFkZChhLCBiKSB7XG4gKiAgICAgcmV0dXJuIGEgKyBiXG4gKiAgIH07XG4gKiAgIHBvb2wuZXhlYyhhZGQsIFsyLCA0XSlcbiAqICAgICAgIC50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAqICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0KTsgLy8gb3V0cHV0cyA2XG4gKiAgICAgICB9KVxuICogICAgICAgLmNhdGNoKGZ1bmN0aW9uKGVycm9yKSB7XG4gKiAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcbiAqICAgICAgIH0pO1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nIHwgRnVuY3Rpb259IG1ldGhvZCAgRnVuY3Rpb24gbmFtZSBvciBmdW5jdGlvbi5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgYG1ldGhvZGAgaXMgYSBzdHJpbmcsIHRoZSBjb3JyZXNwb25kaW5nXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZCBvbiB0aGUgd29ya2VyIHdpbGwgYmUgZXhlY3V0ZWRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgYG1ldGhvZGAgaXMgYSBGdW5jdGlvbiwgdGhlIGZ1bmN0aW9uXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbGwgYmUgc3RyaW5naWZpZWQgYW5kIGV4ZWN1dGVkIHZpYSB0aGVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya2VycyBidWlsdC1pbiBmdW5jdGlvbiBgcnVuKGZuLCBhcmdzKWAuXG4gKiBAcGFyYW0ge0FycmF5fSBbcGFyYW1zXSAgRnVuY3Rpb24gYXJndW1lbnRzIGFwcGxpZWQgd2hlbiBjYWxsaW5nIHRoZSBmdW5jdGlvblxuICogQHBhcmFtIHtFeGVjT3B0aW9uc30gW29wdGlvbnNdICBPcHRpb25zIG9iamVjdFxuICogQHJldHVybiB7UHJvbWlzZS48KiwgRXJyb3I+fSByZXN1bHRcbiAqL1xuUG9vbC5wcm90b3R5cGUuZXhlYyA9IGZ1bmN0aW9uIChtZXRob2QsIHBhcmFtcywgb3B0aW9ucykge1xuICAvLyB2YWxpZGF0ZSB0eXBlIG9mIGFyZ3VtZW50c1xuICBpZiAocGFyYW1zICYmICFBcnJheS5pc0FycmF5KHBhcmFtcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheSBleHBlY3RlZCBhcyBhcmd1bWVudCBcInBhcmFtc1wiJyk7XG4gIH1cblxuICBpZiAodHlwZW9mIG1ldGhvZCA9PT0gJ3N0cmluZycpIHtcbiAgICB2YXIgcmVzb2x2ZXIgPSBQcm9taXNlLmRlZmVyKCk7XG5cbiAgICBpZiAodGhpcy50YXNrcy5sZW5ndGggPj0gdGhpcy5tYXhRdWV1ZVNpemUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWF4IHF1ZXVlIHNpemUgb2YgJyArIHRoaXMubWF4UXVldWVTaXplICsgJyByZWFjaGVkJyk7XG4gICAgfVxuXG4gICAgLy8gYWRkIGEgbmV3IHRhc2sgdG8gdGhlIHF1ZXVlXG4gICAgdmFyIHRhc2tzID0gdGhpcy50YXNrcztcbiAgICB2YXIgdGFzayA9IHtcbiAgICAgIG1ldGhvZDogIG1ldGhvZCxcbiAgICAgIHBhcmFtczogIHBhcmFtcyxcbiAgICAgIHJlc29sdmVyOiByZXNvbHZlcixcbiAgICAgIHRpbWVvdXQ6IG51bGwsXG4gICAgICBvcHRpb25zOiBvcHRpb25zXG4gICAgfTtcbiAgICB0YXNrcy5wdXNoKHRhc2spO1xuXG4gICAgLy8gcmVwbGFjZSB0aGUgdGltZW91dCBtZXRob2Qgb2YgdGhlIFByb21pc2Ugd2l0aCBvdXIgb3duLFxuICAgIC8vIHdoaWNoIHN0YXJ0cyB0aGUgdGltZXIgYXMgc29vbiBhcyB0aGUgdGFzayBpcyBhY3R1YWxseSBzdGFydGVkXG4gICAgdmFyIG9yaWdpbmFsVGltZW91dCA9IHJlc29sdmVyLnByb21pc2UudGltZW91dDtcbiAgICByZXNvbHZlci5wcm9taXNlLnRpbWVvdXQgPSBmdW5jdGlvbiB0aW1lb3V0IChkZWxheSkge1xuICAgICAgaWYgKHRhc2tzLmluZGV4T2YodGFzaykgIT09IC0xKSB7XG4gICAgICAgIC8vIHRhc2sgaXMgc3RpbGwgcXVldWVkIC0+IHN0YXJ0IHRoZSB0aW1lciBsYXRlciBvblxuICAgICAgICB0YXNrLnRpbWVvdXQgPSBkZWxheTtcbiAgICAgICAgcmV0dXJuIHJlc29sdmVyLnByb21pc2U7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgLy8gdGFzayBpcyBhbHJlYWR5IGJlaW5nIGV4ZWN1dGVkIC0+IHN0YXJ0IHRpbWVyIGltbWVkaWF0ZWx5XG4gICAgICAgIHJldHVybiBvcmlnaW5hbFRpbWVvdXQuY2FsbChyZXNvbHZlci5wcm9taXNlLCBkZWxheSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8vIHRyaWdnZXIgdGFzayBleGVjdXRpb25cbiAgICB0aGlzLl9uZXh0KCk7XG5cbiAgICByZXR1cm4gcmVzb2x2ZXIucHJvbWlzZTtcbiAgfVxuICBlbHNlIGlmICh0eXBlb2YgbWV0aG9kID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gc2VuZCBzdHJpbmdpZmllZCBmdW5jdGlvbiBhbmQgZnVuY3Rpb24gYXJndW1lbnRzIHRvIHdvcmtlclxuICAgIHJldHVybiB0aGlzLmV4ZWMoJ3J1bicsIFtTdHJpbmcobWV0aG9kKSwgcGFyYW1zXSk7XG4gIH1cbiAgZWxzZSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRnVuY3Rpb24gb3Igc3RyaW5nIGV4cGVjdGVkIGFzIGFyZ3VtZW50IFwibWV0aG9kXCInKTtcbiAgfVxufTtcblxuLyoqXG4gKiBDcmVhdGUgYSBwcm94eSBmb3IgY3VycmVudCB3b3JrZXIuIFJldHVybnMgYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsXG4gKiBtZXRob2RzIGF2YWlsYWJsZSBvbiB0aGUgd29ya2VyLiBUaGUgbWV0aG9kcyBhbHdheXMgcmV0dXJuIGEgcHJvbWlzZS5cbiAqXG4gKiBAcmV0dXJuIHtQcm9taXNlLjxPYmplY3QsIEVycm9yPn0gcHJveHlcbiAqL1xuUG9vbC5wcm90b3R5cGUucHJveHkgPSBmdW5jdGlvbiAoKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignTm8gYXJndW1lbnRzIGV4cGVjdGVkJyk7XG4gIH1cblxuICB2YXIgcG9vbCA9IHRoaXM7XG4gIHJldHVybiB0aGlzLmV4ZWMoJ21ldGhvZHMnKVxuICAgICAgLnRoZW4oZnVuY3Rpb24gKG1ldGhvZHMpIHtcbiAgICAgICAgdmFyIHByb3h5ID0ge307XG5cbiAgICAgICAgbWV0aG9kcy5mb3JFYWNoKGZ1bmN0aW9uIChtZXRob2QpIHtcbiAgICAgICAgICBwcm94eVttZXRob2RdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHBvb2wuZXhlYyhtZXRob2QsIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHByb3h5O1xuICAgICAgfSk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgbmV3IGFycmF5IHdpdGggdGhlIHJlc3VsdHMgb2YgY2FsbGluZyBhIHByb3ZpZGVkIGNhbGxiYWNrIGZ1bmN0aW9uXG4gKiBvbiBldmVyeSBlbGVtZW50IGluIHRoaXMgYXJyYXkuXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheVxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgIEZ1bmN0aW9uIHRha2luZyB0d28gYXJndW1lbnRzOlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBjYWxsYmFjayhjdXJyZW50VmFsdWUsIGluZGV4KWBcbiAqIEByZXR1cm4ge1Byb21pc2UuPEFycmF5Pn0gUmV0dXJucyBhIHByb21pc2Ugd2hpY2ggcmVzb2x2ZXMgIHdpdGggYW4gQXJyYXlcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmluZyB0aGUgcmVzdWx0cyBvZiB0aGUgY2FsbGJhY2sgZnVuY3Rpb25cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZWQgZm9yIGVhY2ggb2YgdGhlIGFycmF5IGVsZW1lbnRzLlxuICovXG4vKiBUT0RPOiBpbXBsZW1lbnQgbWFwXG5Qb29sLnByb3RvdHlwZS5tYXAgPSBmdW5jdGlvbiAoYXJyYXksIGNhbGxiYWNrKSB7XG59O1xuKi9cblxuLyoqXG4gKiBHcmFiIHRoZSBmaXJzdCB0YXNrIGZyb20gdGhlIHF1ZXVlLCBmaW5kIGEgZnJlZSB3b3JrZXIsIGFuZCBhc3NpZ24gdGhlXG4gKiB3b3JrZXIgdG8gdGhlIHRhc2suXG4gKiBAcHJvdGVjdGVkXG4gKi9cblBvb2wucHJvdG90eXBlLl9uZXh0ID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy50YXNrcy5sZW5ndGggPiAwKSB7XG4gICAgLy8gdGhlcmUgYXJlIHRhc2tzIGluIHRoZSBxdWV1ZVxuXG4gICAgLy8gZmluZCBhbiBhdmFpbGFibGUgd29ya2VyXG4gICAgdmFyIHdvcmtlciA9IHRoaXMuX2dldFdvcmtlcigpO1xuICAgIGlmICh3b3JrZXIpIHtcbiAgICAgIC8vIGdldCB0aGUgZmlyc3QgdGFzayBmcm9tIHRoZSBxdWV1ZVxuICAgICAgdmFyIG1lID0gdGhpcztcbiAgICAgIHZhciB0YXNrID0gdGhpcy50YXNrcy5zaGlmdCgpO1xuXG4gICAgICAvLyBjaGVjayBpZiB0aGUgdGFzayBpcyBzdGlsbCBwZW5kaW5nIChhbmQgbm90IGNhbmNlbGxlZCAtPiBwcm9taXNlIHJlamVjdGVkKVxuICAgICAgaWYgKHRhc2sucmVzb2x2ZXIucHJvbWlzZS5wZW5kaW5nKSB7XG4gICAgICAgIC8vIHNlbmQgdGhlIHJlcXVlc3QgdG8gdGhlIHdvcmtlclxuICAgICAgICB2YXIgcHJvbWlzZSA9IHdvcmtlci5leGVjKHRhc2subWV0aG9kLCB0YXNrLnBhcmFtcywgdGFzay5yZXNvbHZlciwgdGFzay5vcHRpb25zKVxuICAgICAgICAgIC50aGVuKG1lLl9ib3VuZE5leHQpXG4gICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIC8vIGlmIHRoZSB3b3JrZXIgY3Jhc2hlZCBhbmQgdGVybWluYXRlZCwgcmVtb3ZlIGl0IGZyb20gdGhlIHBvb2xcbiAgICAgICAgICAgIGlmICh3b3JrZXIudGVybWluYXRlZCkge1xuICAgICAgICAgICAgICByZXR1cm4gbWUuX3JlbW92ZVdvcmtlcih3b3JrZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBtZS5fbmV4dCgpOyAvLyB0cmlnZ2VyIG5leHQgdGFzayBpbiB0aGUgcXVldWVcbiAgICAgICAgICB9KTtcblxuICAgICAgICAvLyBzdGFydCBxdWV1ZWQgdGltZXIgbm93XG4gICAgICAgIGlmICh0eXBlb2YgdGFzay50aW1lb3V0ID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIHByb21pc2UudGltZW91dCh0YXNrLnRpbWVvdXQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUaGUgdGFzayB0YWtlbiB3YXMgYWxyZWFkeSBjb21wbGV0ZSAoZWl0aGVyIHJlamVjdGVkIG9yIHJlc29sdmVkKSwgc28ganVzdCB0cmlnZ2VyIG5leHQgdGFzayBpbiB0aGUgcXVldWVcbiAgICAgICAgbWUuX25leHQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG5cbi8qKlxuICogR2V0IGFuIGF2YWlsYWJsZSB3b3JrZXIuIElmIG5vIHdvcmtlciBpcyBhdmFpbGFibGUgYW5kIHRoZSBtYXhpbXVtIG51bWJlclxuICogb2Ygd29ya2VycyBpc24ndCB5ZXQgcmVhY2hlZCwgYSBuZXcgd29ya2VyIHdpbGwgYmUgY3JlYXRlZCBhbmQgcmV0dXJuZWQuXG4gKiBJZiBubyB3b3JrZXIgaXMgYXZhaWxhYmxlIGFuZCB0aGUgbWF4aW11bSBudW1iZXIgb2Ygd29ya2VycyBpcyByZWFjaGVkLFxuICogbnVsbCB3aWxsIGJlIHJldHVybmVkLlxuICpcbiAqIEByZXR1cm4ge1dvcmtlckhhbmRsZXIgfCBudWxsfSB3b3JrZXJcbiAqIEBwcml2YXRlXG4gKi9cblBvb2wucHJvdG90eXBlLl9nZXRXb3JrZXIgPSBmdW5jdGlvbigpIHtcbiAgLy8gZmluZCBhIG5vbi1idXN5IHdvcmtlclxuICB2YXIgd29ya2VycyA9IHRoaXMud29ya2VycztcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB3b3JrZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHdvcmtlciA9IHdvcmtlcnNbaV07XG4gICAgaWYgKHdvcmtlci5idXN5KCkgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gd29ya2VyO1xuICAgIH1cbiAgfVxuXG4gIGlmICh3b3JrZXJzLmxlbmd0aCA8IHRoaXMubWF4V29ya2Vycykge1xuICAgIC8vIGNyZWF0ZSBhIG5ldyB3b3JrZXJcbiAgICB3b3JrZXIgPSB0aGlzLl9jcmVhdGVXb3JrZXJIYW5kbGVyKCk7XG4gICAgd29ya2Vycy5wdXNoKHdvcmtlcik7XG4gICAgcmV0dXJuIHdvcmtlcjtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYSB3b3JrZXIgZnJvbSB0aGUgcG9vbC5cbiAqIEF0dGVtcHRzIHRvIHRlcm1pbmF0ZSB3b3JrZXIgaWYgbm90IGFscmVhZHkgdGVybWluYXRlZCwgYW5kIGVuc3VyZXMgdGhlIG1pbmltdW1cbiAqIHBvb2wgc2l6ZSBpcyBtZXQuXG4gKiBAcGFyYW0ge1dvcmtlckhhbmRsZXJ9IHdvcmtlclxuICogQHJldHVybiB7UHJvbWlzZTxXb3JrZXJIYW5kbGVyPn1cbiAqIEBwcm90ZWN0ZWRcbiAqL1xuUG9vbC5wcm90b3R5cGUuX3JlbW92ZVdvcmtlciA9IGZ1bmN0aW9uKHdvcmtlcikge1xuICB2YXIgbWUgPSB0aGlzO1xuXG4gIERFQlVHX1BPUlRfQUxMT0NBVE9SLnJlbGVhc2VQb3J0KHdvcmtlci5kZWJ1Z1BvcnQpO1xuICAvLyBfcmVtb3ZlV29ya2VyIHdpbGwgY2FsbCB0aGlzLCBidXQgd2UgbmVlZCBpdCB0byBiZSByZW1vdmVkIHN5bmNocm9ub3VzbHlcbiAgdGhpcy5fcmVtb3ZlV29ya2VyRnJvbUxpc3Qod29ya2VyKTtcbiAgLy8gSWYgbWluV29ya2VycyBzZXQsIHNwaW4gdXAgbmV3IHdvcmtlcnMgdG8gcmVwbGFjZSB0aGUgY3Jhc2hlZCBvbmVzXG4gIHRoaXMuX2Vuc3VyZU1pbldvcmtlcnMoKTtcbiAgLy8gdGVybWluYXRlIHRoZSB3b3JrZXIgKGlmIG5vdCBhbHJlYWR5IHRlcm1pbmF0ZWQpXG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICB3b3JrZXIudGVybWluYXRlKGZhbHNlLCBmdW5jdGlvbihlcnIpIHtcbiAgICAgIG1lLm9uVGVybWluYXRlV29ya2VyKHtcbiAgICAgICAgZm9ya0FyZ3M6IHdvcmtlci5mb3JrQXJncyxcbiAgICAgICAgZm9ya09wdHM6IHdvcmtlci5mb3JrT3B0cyxcbiAgICAgICAgd29ya2VyVGhyZWFkT3B0czogd29ya2VyLndvcmtlclRocmVhZE9wdHMsXG4gICAgICAgIHNjcmlwdDogd29ya2VyLnNjcmlwdFxuICAgICAgfSk7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzb2x2ZSh3b3JrZXIpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGEgd29ya2VyIGZyb20gdGhlIHBvb2wgbGlzdC5cbiAqIEBwYXJhbSB7V29ya2VySGFuZGxlcn0gd29ya2VyXG4gKiBAcHJvdGVjdGVkXG4gKi9cblBvb2wucHJvdG90eXBlLl9yZW1vdmVXb3JrZXJGcm9tTGlzdCA9IGZ1bmN0aW9uKHdvcmtlcikge1xuICAvLyByZW1vdmUgZnJvbSB0aGUgbGlzdCB3aXRoIHdvcmtlcnNcbiAgdmFyIGluZGV4ID0gdGhpcy53b3JrZXJzLmluZGV4T2Yod29ya2VyKTtcbiAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgIHRoaXMud29ya2Vycy5zcGxpY2UoaW5kZXgsIDEpO1xuICB9XG59O1xuXG4vKipcbiAqIENsb3NlIGFsbCBhY3RpdmUgd29ya2Vycy4gVGFza3MgY3VycmVudGx5IGJlaW5nIGV4ZWN1dGVkIHdpbGwgYmUgZmluaXNoZWQgZmlyc3QuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtmb3JjZT1mYWxzZV0gICBJZiBmYWxzZSAoZGVmYXVsdCksIHRoZSB3b3JrZXJzIGFyZSB0ZXJtaW5hdGVkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZnRlciBmaW5pc2hpbmcgYWxsIHRhc2tzIGN1cnJlbnRseSBpblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3Jlc3MuIElmIHRydWUsIHRoZSB3b3JrZXJzIHdpbGwgYmVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlcm1pbmF0ZWQgaW1tZWRpYXRlbHkuXG4gKiBAcGFyYW0ge251bWJlcn0gW3RpbWVvdXRdICAgICAgICBJZiBwcm92aWRlZCBhbmQgbm9uLXplcm8sIHdvcmtlciB0ZXJtaW5hdGlvbiBwcm9taXNlIHdpbGwgYmUgcmVqZWN0ZWRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVyIHRpbWVvdXQgaWYgd29ya2VyIHByb2Nlc3MgaGFzIG5vdCBiZWVuIHRlcm1pbmF0ZWQuXG4gKiBAcmV0dXJuIHtQcm9taXNlLjx2b2lkLCBFcnJvcj59XG4gKi9cblBvb2wucHJvdG90eXBlLnRlcm1pbmF0ZSA9IGZ1bmN0aW9uIChmb3JjZSwgdGltZW91dCkge1xuICB2YXIgbWUgPSB0aGlzO1xuXG4gIC8vIGNhbmNlbCBhbnkgcGVuZGluZyB0YXNrc1xuICB0aGlzLnRhc2tzLmZvckVhY2goZnVuY3Rpb24gKHRhc2spIHtcbiAgICB0YXNrLnJlc29sdmVyLnJlamVjdChuZXcgRXJyb3IoJ1Bvb2wgdGVybWluYXRlZCcpKTtcbiAgfSk7XG4gIHRoaXMudGFza3MubGVuZ3RoID0gMDtcblxuICB2YXIgZiA9IGZ1bmN0aW9uICh3b3JrZXIpIHtcbiAgICBERUJVR19QT1JUX0FMTE9DQVRPUi5yZWxlYXNlUG9ydCh3b3JrZXIuZGVidWdQb3J0KTtcbiAgICB0aGlzLl9yZW1vdmVXb3JrZXJGcm9tTGlzdCh3b3JrZXIpO1xuICB9O1xuICB2YXIgcmVtb3ZlV29ya2VyID0gZi5iaW5kKHRoaXMpO1xuXG4gIHZhciBwcm9taXNlcyA9IFtdO1xuICB2YXIgd29ya2VycyA9IHRoaXMud29ya2Vycy5zbGljZSgpO1xuICB3b3JrZXJzLmZvckVhY2goZnVuY3Rpb24gKHdvcmtlcikge1xuICAgIHZhciB0ZXJtUHJvbWlzZSA9IHdvcmtlci50ZXJtaW5hdGVBbmROb3RpZnkoZm9yY2UsIHRpbWVvdXQpXG4gICAgICAudGhlbihyZW1vdmVXb3JrZXIpXG4gICAgICAuYWx3YXlzKGZ1bmN0aW9uKCkge1xuICAgICAgICBtZS5vblRlcm1pbmF0ZVdvcmtlcih7XG4gICAgICAgICAgZm9ya0FyZ3M6IHdvcmtlci5mb3JrQXJncyxcbiAgICAgICAgICBmb3JrT3B0czogd29ya2VyLmZvcmtPcHRzLFxuICAgICAgICAgIHdvcmtlclRocmVhZE9wdHM6IHdvcmtlci53b3JrZXJUaHJlYWRPcHRzLFxuICAgICAgICAgIHNjcmlwdDogd29ya2VyLnNjcmlwdFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIHByb21pc2VzLnB1c2godGVybVByb21pc2UpO1xuICB9KTtcbiAgcmV0dXJuIFByb21pc2UuYWxsKHByb21pc2VzKTtcbn07XG5cbi8qKlxuICogUmV0cmlldmUgc3RhdGlzdGljcyBvbiB0YXNrcyBhbmQgd29ya2Vycy5cbiAqIEByZXR1cm4ge3t0b3RhbFdvcmtlcnM6IG51bWJlciwgYnVzeVdvcmtlcnM6IG51bWJlciwgaWRsZVdvcmtlcnM6IG51bWJlciwgcGVuZGluZ1Rhc2tzOiBudW1iZXIsIGFjdGl2ZVRhc2tzOiBudW1iZXJ9fSBSZXR1cm5zIGFuIG9iamVjdCB3aXRoIHN0YXRpc3RpY3NcbiAqL1xuUG9vbC5wcm90b3R5cGUuc3RhdHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciB0b3RhbFdvcmtlcnMgPSB0aGlzLndvcmtlcnMubGVuZ3RoO1xuICB2YXIgYnVzeVdvcmtlcnMgPSB0aGlzLndvcmtlcnMuZmlsdGVyKGZ1bmN0aW9uICh3b3JrZXIpIHtcbiAgICByZXR1cm4gd29ya2VyLmJ1c3koKTtcbiAgfSkubGVuZ3RoO1xuXG4gIHJldHVybiB7XG4gICAgdG90YWxXb3JrZXJzOiAgdG90YWxXb3JrZXJzLFxuICAgIGJ1c3lXb3JrZXJzOiAgIGJ1c3lXb3JrZXJzLFxuICAgIGlkbGVXb3JrZXJzOiAgIHRvdGFsV29ya2VycyAtIGJ1c3lXb3JrZXJzLFxuXG4gICAgcGVuZGluZ1Rhc2tzOiAgdGhpcy50YXNrcy5sZW5ndGgsXG4gICAgYWN0aXZlVGFza3M6ICAgYnVzeVdvcmtlcnNcbiAgfTtcbn07XG5cbi8qKlxuICogRW5zdXJlcyB0aGF0IGEgbWluaW11bSBvZiBtaW5Xb3JrZXJzIGlzIHVwIGFuZCBydW5uaW5nXG4gKiBAcHJvdGVjdGVkXG4gKi9cblBvb2wucHJvdG90eXBlLl9lbnN1cmVNaW5Xb3JrZXJzID0gZnVuY3Rpb24oKSB7XG4gIGlmICh0aGlzLm1pbldvcmtlcnMpIHtcbiAgICBmb3IodmFyIGkgPSB0aGlzLndvcmtlcnMubGVuZ3RoOyBpIDwgdGhpcy5taW5Xb3JrZXJzOyBpKyspIHtcbiAgICAgIHRoaXMud29ya2Vycy5wdXNoKHRoaXMuX2NyZWF0ZVdvcmtlckhhbmRsZXIoKSk7XG4gICAgfVxuICB9XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0byBjcmVhdGUgYSBuZXcgV29ya2VySGFuZGxlciBhbmQgcGFzcyBhbGwgb3B0aW9ucy5cbiAqIEByZXR1cm4ge1dvcmtlckhhbmRsZXJ9XG4gKiBAcHJpdmF0ZVxuICovXG5Qb29sLnByb3RvdHlwZS5fY3JlYXRlV29ya2VySGFuZGxlciA9IGZ1bmN0aW9uICgpIHtcbiAgY29uc3Qgb3ZlcnJpZGRlblBhcmFtcyA9IHRoaXMub25DcmVhdGVXb3JrZXIoe1xuICAgIGZvcmtBcmdzOiB0aGlzLmZvcmtBcmdzLFxuICAgIGZvcmtPcHRzOiB0aGlzLmZvcmtPcHRzLFxuICAgIHdvcmtlck9wdHM6IHRoaXMud29ya2VyT3B0cyxcbiAgICB3b3JrZXJUaHJlYWRPcHRzOiB0aGlzLndvcmtlclRocmVhZE9wdHMsXG4gICAgc2NyaXB0OiB0aGlzLnNjcmlwdFxuICB9KSB8fCB7fTtcblxuICByZXR1cm4gbmV3IFdvcmtlckhhbmRsZXIob3ZlcnJpZGRlblBhcmFtcy5zY3JpcHQgfHwgdGhpcy5zY3JpcHQsIHtcbiAgICBmb3JrQXJnczogb3ZlcnJpZGRlblBhcmFtcy5mb3JrQXJncyB8fCB0aGlzLmZvcmtBcmdzLFxuICAgIGZvcmtPcHRzOiBvdmVycmlkZGVuUGFyYW1zLmZvcmtPcHRzIHx8IHRoaXMuZm9ya09wdHMsXG4gICAgd29ya2VyT3B0czogb3ZlcnJpZGRlblBhcmFtcy53b3JrZXJPcHRzIHx8IHRoaXMud29ya2VyT3B0cyxcbiAgICB3b3JrZXJUaHJlYWRPcHRzOiBvdmVycmlkZGVuUGFyYW1zLndvcmtlclRocmVhZE9wdHMgfHwgdGhpcy53b3JrZXJUaHJlYWRPcHRzLFxuICAgIGRlYnVnUG9ydDogREVCVUdfUE9SVF9BTExPQ0FUT1IubmV4dEF2YWlsYWJsZVN0YXJ0aW5nQXQodGhpcy5kZWJ1Z1BvcnRTdGFydCksXG4gICAgd29ya2VyVHlwZTogdGhpcy53b3JrZXJUeXBlLFxuICAgIHdvcmtlclRlcm1pbmF0ZVRpbWVvdXQ6IHRoaXMud29ya2VyVGVybWluYXRlVGltZW91dCxcbiAgfSk7XG59XG5cbi8qKlxuICogRW5zdXJlIHRoYXQgdGhlIG1heFdvcmtlcnMgb3B0aW9uIGlzIGFuIGludGVnZXIgPj0gMVxuICogQHBhcmFtIHsqfSBtYXhXb3JrZXJzXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gcmV0dXJucyB0cnVlIG1heFdvcmtlcnMgaGFzIGEgdmFsaWQgdmFsdWVcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVNYXhXb3JrZXJzKG1heFdvcmtlcnMpIHtcbiAgaWYgKCFpc051bWJlcihtYXhXb3JrZXJzKSB8fCAhaXNJbnRlZ2VyKG1heFdvcmtlcnMpIHx8IG1heFdvcmtlcnMgPCAxKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignT3B0aW9uIG1heFdvcmtlcnMgbXVzdCBiZSBhbiBpbnRlZ2VyIG51bWJlciA+PSAxJyk7XG4gIH1cbn1cblxuLyoqXG4gKiBFbnN1cmUgdGhhdCB0aGUgbWluV29ya2VycyBvcHRpb24gaXMgYW4gaW50ZWdlciA+PSAwXG4gKiBAcGFyYW0geyp9IG1pbldvcmtlcnNcbiAqIEByZXR1cm5zIHtib29sZWFufSByZXR1cm5zIHRydWUgd2hlbiBtaW5Xb3JrZXJzIGhhcyBhIHZhbGlkIHZhbHVlXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlTWluV29ya2VycyhtaW5Xb3JrZXJzKSB7XG4gIGlmICghaXNOdW1iZXIobWluV29ya2VycykgfHwgIWlzSW50ZWdlcihtaW5Xb3JrZXJzKSB8fCBtaW5Xb3JrZXJzIDwgMCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ09wdGlvbiBtaW5Xb3JrZXJzIG11c3QgYmUgYW4gaW50ZWdlciBudW1iZXIgPj0gMCcpO1xuICB9XG59XG5cbi8qKlxuICogVGVzdCB3aGV0aGVyIGEgdmFyaWFibGUgaXMgYSBudW1iZXJcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm5zIHtib29sZWFufSByZXR1cm5zIHRydWUgd2hlbiB2YWx1ZSBpcyBhIG51bWJlclxuICovXG5mdW5jdGlvbiBpc051bWJlcih2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJztcbn1cblxuLyoqXG4gKiBUZXN0IHdoZXRoZXIgYSBudW1iZXIgaXMgYW4gaW50ZWdlclxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyB0cnVlIGlmIHZhbHVlIGlzIGFuIGludGVnZXJcbiAqL1xuZnVuY3Rpb24gaXNJbnRlZ2VyKHZhbHVlKSB7XG4gIHJldHVybiBNYXRoLnJvdW5kKHZhbHVlKSA9PSB2YWx1ZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBQb29sO1xuIiwgIi8qKlxuICogVGhlIGhlbHBlciBjbGFzcyBmb3IgdHJhbnNmZXJyaW5nIGRhdGEgZnJvbSB0aGUgd29ya2VyIHRvIHRoZSBtYWluIHRocmVhZC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gbWVzc2FnZSBUaGUgb2JqZWN0IHRvIGRlbGl2ZXIgdG8gdGhlIG1haW4gdGhyZWFkLlxuICogQHBhcmFtIHtPYmplY3RbXX0gdHJhbnNmZXIgQW4gYXJyYXkgb2YgdHJhbnNmZXJhYmxlIE9iamVjdHMgdG8gdHJhbnNmZXIgb3duZXJzaGlwIG9mLlxuICovXG5mdW5jdGlvbiBUcmFuc2ZlcihtZXNzYWdlLCB0cmFuc2Zlcikge1xuICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICB0aGlzLnRyYW5zZmVyID0gdHJhbnNmZXI7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gVHJhbnNmZXI7XG4iLCAiLyoqXG4gKiB3b3JrZXIgbXVzdCBiZSBzdGFydGVkIGFzIGEgY2hpbGQgcHJvY2VzcyBvciBhIHdlYiB3b3JrZXIuXG4gKiBJdCBsaXN0ZW5zIGZvciBSUEMgbWVzc2FnZXMgZnJvbSB0aGUgcGFyZW50IHByb2Nlc3MuXG4gKi9cbnZhciBUcmFuc2ZlciA9IHJlcXVpcmUoJy4vdHJhbnNmZXInKTtcblxuLy8gc291cmNlIG9mIGluc3BpcmF0aW9uOiBodHRwczovL2dpdGh1Yi5jb20vc2luZHJlc29yaHVzL3JlcXVpcmUtZm9vbC13ZWJwYWNrXG52YXIgcmVxdWlyZUZvb2xXZWJwYWNrID0gZXZhbChcbiAgICAndHlwZW9mIHJlcXVpcmUgIT09IFxcJ3VuZGVmaW5lZFxcJycgK1xuICAgICcgPyByZXF1aXJlJyArXG4gICAgJyA6IGZ1bmN0aW9uIChtb2R1bGUpIHsgdGhyb3cgbmV3IEVycm9yKFxcJ01vZHVsZSBcIiArIG1vZHVsZSArIFwiIG5vdCBmb3VuZC5cXCcpIH0nXG4pO1xuXG4vKipcbiAqIFNwZWNpYWwgbWVzc2FnZSBzZW50IGJ5IHBhcmVudCB3aGljaCBjYXVzZXMgdGhlIHdvcmtlciB0byB0ZXJtaW5hdGUgaXRzZWxmLlxuICogTm90IGEgXCJtZXNzYWdlIG9iamVjdFwiOyB0aGlzIHN0cmluZyBpcyB0aGUgZW50aXJlIG1lc3NhZ2UuXG4gKi9cbnZhciBURVJNSU5BVEVfTUVUSE9EX0lEID0gJ19fd29ya2VycG9vbC10ZXJtaW5hdGVfXyc7XG5cbi8vIHZhciBub2RlT1NQbGF0Zm9ybSA9IHJlcXVpcmUoJy4vZW52aXJvbm1lbnQnKS5ub2RlT1NQbGF0Zm9ybTtcblxuLy8gY3JlYXRlIGEgd29ya2VyIEFQSSBmb3Igc2VuZGluZyBhbmQgcmVjZWl2aW5nIG1lc3NhZ2VzIHdoaWNoIHdvcmtzIGJvdGggb25cbi8vIG5vZGUuanMgYW5kIGluIHRoZSBicm93c2VyXG52YXIgd29ya2VyID0ge1xuICBleGl0OiBmdW5jdGlvbigpIHt9XG59O1xuaWYgKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgcG9zdE1lc3NhZ2UgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGFkZEV2ZW50TGlzdGVuZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgLy8gd29ya2VyIGluIHRoZSBicm93c2VyXG4gIHdvcmtlci5vbiA9IGZ1bmN0aW9uIChldmVudCwgY2FsbGJhY2spIHtcbiAgICBhZGRFdmVudExpc3RlbmVyKGV2ZW50LCBmdW5jdGlvbiAobWVzc2FnZSkge1xuICAgICAgY2FsbGJhY2sobWVzc2FnZS5kYXRhKTtcbiAgICB9KVxuICB9O1xuICB3b3JrZXIuc2VuZCA9IGZ1bmN0aW9uIChtZXNzYWdlKSB7XG4gICAgcG9zdE1lc3NhZ2UobWVzc2FnZSk7XG4gIH07XG59XG5lbHNlIGlmICh0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgLy8gbm9kZS5qc1xuXG4gIHZhciBXb3JrZXJUaHJlYWRzO1xuICB0cnkge1xuICAgIFdvcmtlclRocmVhZHMgPSByZXF1aXJlRm9vbFdlYnBhY2soJ3dvcmtlcl90aHJlYWRzJyk7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBpZiAodHlwZW9mIGVycm9yID09PSAnb2JqZWN0JyAmJiBlcnJvciAhPT0gbnVsbCAmJiBlcnJvci5jb2RlID09PSAnTU9EVUxFX05PVF9GT1VORCcpIHtcbiAgICAgIC8vIG5vIHdvcmtlcl90aHJlYWRzLCBmYWxsYmFjayB0byBzdWItcHJvY2VzcyBiYXNlZCB3b3JrZXJzXG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIGlmIChXb3JrZXJUaHJlYWRzICYmXG4gICAgLyogaWYgdGhlcmUgaXMgYSBwYXJlbnRQb3J0LCB3ZSBhcmUgaW4gYSBXb3JrZXJUaHJlYWQgKi9cbiAgICBXb3JrZXJUaHJlYWRzLnBhcmVudFBvcnQgIT09IG51bGwpIHtcbiAgICB2YXIgcGFyZW50UG9ydCAgPSBXb3JrZXJUaHJlYWRzLnBhcmVudFBvcnQ7XG4gICAgd29ya2VyLnNlbmQgPSBwYXJlbnRQb3J0LnBvc3RNZXNzYWdlLmJpbmQocGFyZW50UG9ydCk7XG4gICAgd29ya2VyLm9uID0gcGFyZW50UG9ydC5vbi5iaW5kKHBhcmVudFBvcnQpO1xuICAgIHdvcmtlci5leGl0ID0gcHJvY2Vzcy5leGl0LmJpbmQocHJvY2Vzcyk7XG4gIH0gZWxzZSB7XG4gICAgd29ya2VyLm9uID0gcHJvY2Vzcy5vbi5iaW5kKHByb2Nlc3MpO1xuICAgIC8vIGlnbm9yZSB0cmFuc2ZlciBhcmd1bWVudCBzaW5jZSBpdCBpcyBub3Qgc3VwcG9ydGVkIGJ5IHByb2Nlc3NcbiAgICB3b3JrZXIuc2VuZCA9IGZ1bmN0aW9uIChtZXNzYWdlKSB7XG4gICAgICBwcm9jZXNzLnNlbmQobWVzc2FnZSk7XG4gICAgfTtcbiAgICAvLyByZWdpc3RlciBkaXNjb25uZWN0IGhhbmRsZXIgb25seSBmb3Igc3VicHJvY2VzcyB3b3JrZXIgdG8gZXhpdCB3aGVuIHBhcmVudCBpcyBraWxsZWQgdW5leHBlY3RlZGx5XG4gICAgd29ya2VyLm9uKCdkaXNjb25uZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH0pO1xuICAgIHdvcmtlci5leGl0ID0gcHJvY2Vzcy5leGl0LmJpbmQocHJvY2Vzcyk7XG4gIH1cbn1cbmVsc2Uge1xuICB0aHJvdyBuZXcgRXJyb3IoJ1NjcmlwdCBtdXN0IGJlIGV4ZWN1dGVkIGFzIGEgd29ya2VyJyk7XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRFcnJvcihlcnJvcikge1xuICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZXJyb3IpLnJlZHVjZShmdW5jdGlvbihwcm9kdWN0LCBuYW1lKSB7XG4gICAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm9kdWN0LCBuYW1lLCB7XG5cdHZhbHVlOiBlcnJvcltuYW1lXSxcblx0ZW51bWVyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9LCB7fSk7XG59XG5cbi8qKlxuICogVGVzdCB3aGV0aGVyIGEgdmFsdWUgaXMgYSBQcm9taXNlIHZpYSBkdWNrIHR5cGluZy5cbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIHRydWUgd2hlbiBnaXZlbiB2YWx1ZSBpcyBhbiBvYmplY3RcbiAqICAgICAgICAgICAgICAgICAgICBoYXZpbmcgZnVuY3Rpb25zIGB0aGVuYCBhbmQgYGNhdGNoYC5cbiAqL1xuZnVuY3Rpb24gaXNQcm9taXNlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAmJiAodHlwZW9mIHZhbHVlLnRoZW4gPT09ICdmdW5jdGlvbicpICYmICh0eXBlb2YgdmFsdWUuY2F0Y2ggPT09ICdmdW5jdGlvbicpO1xufVxuXG4vLyBmdW5jdGlvbnMgYXZhaWxhYmxlIGV4dGVybmFsbHlcbndvcmtlci5tZXRob2RzID0ge307XG5cbi8qKlxuICogRXhlY3V0ZSBhIGZ1bmN0aW9uIHdpdGggcHJvdmlkZWQgYXJndW1lbnRzXG4gKiBAcGFyYW0ge1N0cmluZ30gZm4gICAgIFN0cmluZ2lmaWVkIGZ1bmN0aW9uXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJnc10gIEZ1bmN0aW9uIGFyZ3VtZW50c1xuICogQHJldHVybnMgeyp9XG4gKi9cbndvcmtlci5tZXRob2RzLnJ1biA9IGZ1bmN0aW9uIHJ1bihmbiwgYXJncykge1xuICB2YXIgZiA9IG5ldyBGdW5jdGlvbigncmV0dXJuICgnICsgZm4gKyAnKS5hcHBseShudWxsLCBhcmd1bWVudHMpOycpO1xuICByZXR1cm4gZi5hcHBseShmLCBhcmdzKTtcbn07XG5cbi8qKlxuICogR2V0IGEgbGlzdCB3aXRoIG1ldGhvZHMgYXZhaWxhYmxlIG9uIHRoaXMgd29ya2VyXG4gKiBAcmV0dXJuIHtTdHJpbmdbXX0gbWV0aG9kc1xuICovXG53b3JrZXIubWV0aG9kcy5tZXRob2RzID0gZnVuY3Rpb24gbWV0aG9kcygpIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKHdvcmtlci5tZXRob2RzKTtcbn07XG5cbi8qKlxuICogQ3VzdG9tIGhhbmRsZXIgZm9yIHdoZW4gdGhlIHdvcmtlciBpcyB0ZXJtaW5hdGVkLlxuICovXG53b3JrZXIudGVybWluYXRpb25IYW5kbGVyID0gdW5kZWZpbmVkO1xuXG4vKipcbiAqIENsZWFudXAgYW5kIGV4aXQgdGhlIHdvcmtlci5cbiAqIEBwYXJhbSB7TnVtYmVyfSBjb2RlIFxuICogQHJldHVybnMgXG4gKi9cbndvcmtlci5jbGVhbnVwQW5kRXhpdCA9IGZ1bmN0aW9uKGNvZGUpIHtcbiAgdmFyIF9leGl0ID0gZnVuY3Rpb24oKSB7XG4gICAgd29ya2VyLmV4aXQoY29kZSk7XG4gIH1cblxuICBpZighd29ya2VyLnRlcm1pbmF0aW9uSGFuZGxlcikge1xuICAgIHJldHVybiBfZXhpdCgpO1xuICB9XG5cbiAgdmFyIHJlc3VsdCA9IHdvcmtlci50ZXJtaW5hdGlvbkhhbmRsZXIoY29kZSk7XG4gIGlmIChpc1Byb21pc2UocmVzdWx0KSkge1xuICAgIHJlc3VsdC50aGVuKF9leGl0LCBfZXhpdCk7XG4gIH0gZWxzZSB7XG4gICAgX2V4aXQoKTtcbiAgfVxufVxuXG52YXIgY3VycmVudFJlcXVlc3RJZCA9IG51bGw7XG5cbndvcmtlci5vbignbWVzc2FnZScsIGZ1bmN0aW9uIChyZXF1ZXN0KSB7XG4gIGlmIChyZXF1ZXN0ID09PSBURVJNSU5BVEVfTUVUSE9EX0lEKSB7XG4gICAgcmV0dXJuIHdvcmtlci5jbGVhbnVwQW5kRXhpdCgwKTtcbiAgfVxuICB0cnkge1xuICAgIHZhciBtZXRob2QgPSB3b3JrZXIubWV0aG9kc1tyZXF1ZXN0Lm1ldGhvZF07XG5cbiAgICBpZiAobWV0aG9kKSB7XG4gICAgICBjdXJyZW50UmVxdWVzdElkID0gcmVxdWVzdC5pZDtcbiAgICAgIFxuICAgICAgLy8gZXhlY3V0ZSB0aGUgZnVuY3Rpb25cbiAgICAgIHZhciByZXN1bHQgPSBtZXRob2QuYXBwbHkobWV0aG9kLCByZXF1ZXN0LnBhcmFtcyk7XG5cbiAgICAgIGlmIChpc1Byb21pc2UocmVzdWx0KSkge1xuICAgICAgICAvLyBwcm9taXNlIHJldHVybmVkLCByZXNvbHZlIHRoaXMgYW5kIHRoZW4gcmV0dXJuXG4gICAgICAgIHJlc3VsdFxuICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgVHJhbnNmZXIpIHtcbiAgICAgICAgICAgICAgICB3b3JrZXIuc2VuZCh7XG4gICAgICAgICAgICAgICAgICBpZDogcmVxdWVzdC5pZCxcbiAgICAgICAgICAgICAgICAgIHJlc3VsdDogcmVzdWx0Lm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICBlcnJvcjogbnVsbFxuICAgICAgICAgICAgICAgIH0sIHJlc3VsdC50cmFuc2Zlcik7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgd29ya2VyLnNlbmQoe1xuICAgICAgICAgICAgICAgICAgaWQ6IHJlcXVlc3QuaWQsXG4gICAgICAgICAgICAgICAgICByZXN1bHQ6IHJlc3VsdCxcbiAgICAgICAgICAgICAgICAgIGVycm9yOiBudWxsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY3VycmVudFJlcXVlc3RJZCA9IG51bGw7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgd29ya2VyLnNlbmQoe1xuICAgICAgICAgICAgICAgIGlkOiByZXF1ZXN0LmlkLFxuICAgICAgICAgICAgICAgIHJlc3VsdDogbnVsbCxcbiAgICAgICAgICAgICAgICBlcnJvcjogY29udmVydEVycm9yKGVycilcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGN1cnJlbnRSZXF1ZXN0SWQgPSBudWxsO1xuICAgICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgLy8gaW1tZWRpYXRlIHJlc3VsdFxuICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgVHJhbnNmZXIpIHtcbiAgICAgICAgICB3b3JrZXIuc2VuZCh7XG4gICAgICAgICAgICBpZDogcmVxdWVzdC5pZCxcbiAgICAgICAgICAgIHJlc3VsdDogcmVzdWx0Lm1lc3NhZ2UsXG4gICAgICAgICAgICBlcnJvcjogbnVsbFxuICAgICAgICAgIH0sIHJlc3VsdC50cmFuc2Zlcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgd29ya2VyLnNlbmQoe1xuICAgICAgICAgICAgaWQ6IHJlcXVlc3QuaWQsXG4gICAgICAgICAgICByZXN1bHQ6IHJlc3VsdCxcbiAgICAgICAgICAgIGVycm9yOiBudWxsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjdXJyZW50UmVxdWVzdElkID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gbWV0aG9kIFwiJyArIHJlcXVlc3QubWV0aG9kICsgJ1wiJyk7XG4gICAgfVxuICB9XG4gIGNhdGNoIChlcnIpIHtcbiAgICB3b3JrZXIuc2VuZCh7XG4gICAgICBpZDogcmVxdWVzdC5pZCxcbiAgICAgIHJlc3VsdDogbnVsbCxcbiAgICAgIGVycm9yOiBjb252ZXJ0RXJyb3IoZXJyKVxuICAgIH0pO1xuICB9XG59KTtcblxuLyoqXG4gKiBSZWdpc3RlciBtZXRob2RzIHRvIHRoZSB3b3JrZXJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbbWV0aG9kc11cbiAqIEBwYXJhbSB7V29ya2VyUmVnaXN0ZXJPcHRpb25zfSBbb3B0aW9uc11cbiAqL1xud29ya2VyLnJlZ2lzdGVyID0gZnVuY3Rpb24gKG1ldGhvZHMsIG9wdGlvbnMpIHtcblxuICBpZiAobWV0aG9kcykge1xuICAgIGZvciAodmFyIG5hbWUgaW4gbWV0aG9kcykge1xuICAgICAgaWYgKG1ldGhvZHMuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgICAgd29ya2VyLm1ldGhvZHNbbmFtZV0gPSBtZXRob2RzW25hbWVdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChvcHRpb25zKSB7XG4gICAgd29ya2VyLnRlcm1pbmF0aW9uSGFuZGxlciA9IG9wdGlvbnMub25UZXJtaW5hdGU7XG4gIH1cblxuICB3b3JrZXIuc2VuZCgncmVhZHknKTtcbn07XG5cbndvcmtlci5lbWl0ID0gZnVuY3Rpb24gKHBheWxvYWQpIHtcbiAgaWYgKGN1cnJlbnRSZXF1ZXN0SWQpIHtcbiAgICBpZiAocGF5bG9hZCBpbnN0YW5jZW9mIFRyYW5zZmVyKSB7XG4gICAgICB3b3JrZXIuc2VuZCh7XG4gICAgICAgIGlkOiBjdXJyZW50UmVxdWVzdElkLFxuICAgICAgICBpc0V2ZW50OiB0cnVlLFxuICAgICAgICBwYXlsb2FkOiBwYXlsb2FkLm1lc3NhZ2VcbiAgICAgIH0sIHBheWxvYWQudHJhbnNmZXIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHdvcmtlci5zZW5kKHtcbiAgICAgIGlkOiBjdXJyZW50UmVxdWVzdElkLFxuICAgICAgaXNFdmVudDogdHJ1ZSxcbiAgICAgIHBheWxvYWRcbiAgICB9KTtcbiAgfVxufTtcblxuaWYgKHR5cGVvZiBleHBvcnRzICE9PSAndW5kZWZpbmVkJykge1xuICBleHBvcnRzLmFkZCA9IHdvcmtlci5yZWdpc3RlcjtcbiAgZXhwb3J0cy5lbWl0ID0gd29ya2VyLmVtaXQ7XG59XG4iLCAidmFyIGVudmlyb25tZW50ID0gcmVxdWlyZSgnLi9lbnZpcm9ubWVudCcpO1xuXG4vKipcbiAqIENyZWF0ZSBhIG5ldyB3b3JrZXIgcG9vbFxuICogQHBhcmFtIHtzdHJpbmd9IFtzY3JpcHRdXG4gKiBAcGFyYW0ge1dvcmtlclBvb2xPcHRpb25zfSBbb3B0aW9uc11cbiAqIEByZXR1cm5zIHtQb29sfSBwb29sXG4gKi9cbmV4cG9ydHMucG9vbCA9IGZ1bmN0aW9uIHBvb2woc2NyaXB0LCBvcHRpb25zKSB7XG4gIHZhciBQb29sID0gcmVxdWlyZSgnLi9Qb29sJyk7XG5cbiAgcmV0dXJuIG5ldyBQb29sKHNjcmlwdCwgb3B0aW9ucyk7XG59O1xuXG4vKipcbiAqIENyZWF0ZSBhIHdvcmtlciBhbmQgb3B0aW9uYWxseSByZWdpc3RlciBhIHNldCBvZiBtZXRob2RzIHRvIHRoZSB3b3JrZXIuXG4gKiBAcGFyYW0ge09iamVjdH0gW21ldGhvZHNdXG4gKiBAcGFyYW0ge1dvcmtlclJlZ2lzdGVyT3B0aW9uc30gW29wdGlvbnNdXG4gKi9cbmV4cG9ydHMud29ya2VyID0gZnVuY3Rpb24gd29ya2VyKG1ldGhvZHMsIG9wdGlvbnMpIHtcbiAgdmFyIHdvcmtlciA9IHJlcXVpcmUoJy4vd29ya2VyJyk7XG4gIHdvcmtlci5hZGQobWV0aG9kcywgb3B0aW9ucyk7XG59O1xuXG4vKipcbiAqIFNlbmRzIGFuIGV2ZW50IHRvIHRoZSBwYXJlbnQgd29ya2VyIHBvb2wuXG4gKiBAcGFyYW0ge2FueX0gcGF5bG9hZCBcbiAqL1xuZXhwb3J0cy53b3JrZXJFbWl0ID0gZnVuY3Rpb24gd29ya2VyRW1pdChwYXlsb2FkKSB7XG4gIHZhciB3b3JrZXIgPSByZXF1aXJlKCcuL3dvcmtlcicpO1xuICB3b3JrZXIuZW1pdChwYXlsb2FkKTtcbn07XG5cbi8qKlxuICogQ3JlYXRlIGEgcHJvbWlzZS5cbiAqIEB0eXBlIHtQcm9taXNlfSBwcm9taXNlXG4gKi9cbmV4cG9ydHMuUHJvbWlzZSA9IHJlcXVpcmUoJy4vUHJvbWlzZScpO1xuXG4vKipcbiAqIENyZWF0ZSBhIHRyYW5zZmVyIG9iamVjdC5cbiAqIEB0eXBlIHtUcmFuc2Zlcn0gdHJhbnNmZXJcbiAqL1xuZXhwb3J0cy5UcmFuc2ZlciA9IHJlcXVpcmUoJy4vdHJhbnNmZXInKTtcblxuZXhwb3J0cy5wbGF0Zm9ybSA9IGVudmlyb25tZW50LnBsYXRmb3JtO1xuZXhwb3J0cy5pc01haW5UaHJlYWQgPSBlbnZpcm9ubWVudC5pc01haW5UaHJlYWQ7XG5leHBvcnRzLmNwdXMgPSBlbnZpcm9ubWVudC5jcHVzOyIsICJpbXBvcnQgeyBXcml0YWJsZSB9IGZyb20gJ3N0cmVhbSc7XG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gJ3V0aWwnO1xuaW1wb3J0ICogYXMgY2hhbGsgZnJvbSAnY2hhbGsnO1xuXG50eXBlIFN0eWxlRm4gPSAoc3RyOiBzdHJpbmcpID0+IHN0cmluZztcbmNvbnN0IHsgc3RkZXJyIH0gPSBwcm9jZXNzO1xuXG5jb25zdCBsb2dnZXIgPSAoc3RyZWFtOiBXcml0YWJsZSwgc3R5bGVzPzogU3R5bGVGbltdKSA9PiAoZm10OiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKSA9PiB7XG4gIGxldCBzdHIgPSB1dGlsLmZvcm1hdChmbXQsIC4uLmFyZ3MpO1xuICBpZiAoc3R5bGVzICYmIHN0eWxlcy5sZW5ndGgpIHtcbiAgICBzdHIgPSBzdHlsZXMucmVkdWNlKChhLCBzdHlsZSkgPT4gc3R5bGUoYSksIHN0cik7XG4gIH1cbiAgc3RyZWFtLndyaXRlKHN0ciArICdcXG4nKTtcbn07XG5cbmV4cG9ydCBjb25zdCBwcmludCA9IGxvZ2dlcihzdGRlcnIpO1xuZXhwb3J0IGNvbnN0IGVycm9yID0gbG9nZ2VyKHN0ZGVyciwgW2NoYWxrLnJlZF0pO1xuZXhwb3J0IGNvbnN0IHdhcm5pbmcgPSBsb2dnZXIoc3RkZXJyLCBbY2hhbGsueWVsbG93XSk7XG5leHBvcnQgY29uc3Qgc3VjY2VzcyA9IGxvZ2dlcihzdGRlcnIsIFtjaGFsay5ncmVlbl0pO1xuZXhwb3J0IGNvbnN0IGhpZ2hsaWdodCA9IGxvZ2dlcihzdGRlcnIsIFtjaGFsay5ib2xkXSk7XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmV4cG9ydHMuZnJvbUNhbGxiYWNrID0gZnVuY3Rpb24gKGZuKSB7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICBpZiAodHlwZW9mIGFyZ3NbYXJncy5sZW5ndGggLSAxXSA9PT0gJ2Z1bmN0aW9uJykgZm4uYXBwbHkodGhpcywgYXJncylcbiAgICBlbHNlIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGFyZ3MucHVzaCgoZXJyLCByZXMpID0+IChlcnIgIT0gbnVsbCkgPyByZWplY3QoZXJyKSA6IHJlc29sdmUocmVzKSlcbiAgICAgICAgZm4uYXBwbHkodGhpcywgYXJncylcbiAgICAgIH0pXG4gICAgfVxuICB9LCAnbmFtZScsIHsgdmFsdWU6IGZuLm5hbWUgfSlcbn1cblxuZXhwb3J0cy5mcm9tUHJvbWlzZSA9IGZ1bmN0aW9uIChmbikge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgY29uc3QgY2IgPSBhcmdzW2FyZ3MubGVuZ3RoIC0gMV1cbiAgICBpZiAodHlwZW9mIGNiICE9PSAnZnVuY3Rpb24nKSByZXR1cm4gZm4uYXBwbHkodGhpcywgYXJncylcbiAgICBlbHNlIHtcbiAgICAgIGFyZ3MucG9wKClcbiAgICAgIGZuLmFwcGx5KHRoaXMsIGFyZ3MpLnRoZW4ociA9PiBjYihudWxsLCByKSwgY2IpXG4gICAgfVxuICB9LCAnbmFtZScsIHsgdmFsdWU6IGZuLm5hbWUgfSlcbn1cbiIsICJ2YXIgY29uc3RhbnRzID0gcmVxdWlyZSgnY29uc3RhbnRzJylcblxudmFyIG9yaWdDd2QgPSBwcm9jZXNzLmN3ZFxudmFyIGN3ZCA9IG51bGxcblxudmFyIHBsYXRmb3JtID0gcHJvY2Vzcy5lbnYuR1JBQ0VGVUxfRlNfUExBVEZPUk0gfHwgcHJvY2Vzcy5wbGF0Zm9ybVxuXG5wcm9jZXNzLmN3ZCA9IGZ1bmN0aW9uKCkge1xuICBpZiAoIWN3ZClcbiAgICBjd2QgPSBvcmlnQ3dkLmNhbGwocHJvY2VzcylcbiAgcmV0dXJuIGN3ZFxufVxudHJ5IHtcbiAgcHJvY2Vzcy5jd2QoKVxufSBjYXRjaCAoZXIpIHt9XG5cbi8vIFRoaXMgY2hlY2sgaXMgbmVlZGVkIHVudGlsIG5vZGUuanMgMTIgaXMgcmVxdWlyZWRcbmlmICh0eXBlb2YgcHJvY2Vzcy5jaGRpciA9PT0gJ2Z1bmN0aW9uJykge1xuICB2YXIgY2hkaXIgPSBwcm9jZXNzLmNoZGlyXG4gIHByb2Nlc3MuY2hkaXIgPSBmdW5jdGlvbiAoZCkge1xuICAgIGN3ZCA9IG51bGxcbiAgICBjaGRpci5jYWxsKHByb2Nlc3MsIGQpXG4gIH1cbiAgaWYgKE9iamVjdC5zZXRQcm90b3R5cGVPZikgT2JqZWN0LnNldFByb3RvdHlwZU9mKHByb2Nlc3MuY2hkaXIsIGNoZGlyKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGNoXG5cbmZ1bmN0aW9uIHBhdGNoIChmcykge1xuICAvLyAocmUtKWltcGxlbWVudCBzb21lIHRoaW5ncyB0aGF0IGFyZSBrbm93biBidXN0ZWQgb3IgbWlzc2luZy5cblxuICAvLyBsY2htb2QsIGJyb2tlbiBwcmlvciB0byAwLjYuMlxuICAvLyBiYWNrLXBvcnQgdGhlIGZpeCBoZXJlLlxuICBpZiAoY29uc3RhbnRzLmhhc093blByb3BlcnR5KCdPX1NZTUxJTksnKSAmJlxuICAgICAgcHJvY2Vzcy52ZXJzaW9uLm1hdGNoKC9edjBcXC42XFwuWzAtMl18XnYwXFwuNVxcLi8pKSB7XG4gICAgcGF0Y2hMY2htb2QoZnMpXG4gIH1cblxuICAvLyBsdXRpbWVzIGltcGxlbWVudGF0aW9uLCBvciBuby1vcFxuICBpZiAoIWZzLmx1dGltZXMpIHtcbiAgICBwYXRjaEx1dGltZXMoZnMpXG4gIH1cblxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vaXNhYWNzL25vZGUtZ3JhY2VmdWwtZnMvaXNzdWVzLzRcbiAgLy8gQ2hvd24gc2hvdWxkIG5vdCBmYWlsIG9uIGVpbnZhbCBvciBlcGVybSBpZiBub24tcm9vdC5cbiAgLy8gSXQgc2hvdWxkIG5vdCBmYWlsIG9uIGVub3N5cyBldmVyLCBhcyB0aGlzIGp1c3QgaW5kaWNhdGVzXG4gIC8vIHRoYXQgYSBmcyBkb2Vzbid0IHN1cHBvcnQgdGhlIGludGVuZGVkIG9wZXJhdGlvbi5cblxuICBmcy5jaG93biA9IGNob3duRml4KGZzLmNob3duKVxuICBmcy5mY2hvd24gPSBjaG93bkZpeChmcy5mY2hvd24pXG4gIGZzLmxjaG93biA9IGNob3duRml4KGZzLmxjaG93bilcblxuICBmcy5jaG1vZCA9IGNobW9kRml4KGZzLmNobW9kKVxuICBmcy5mY2htb2QgPSBjaG1vZEZpeChmcy5mY2htb2QpXG4gIGZzLmxjaG1vZCA9IGNobW9kRml4KGZzLmxjaG1vZClcblxuICBmcy5jaG93blN5bmMgPSBjaG93bkZpeFN5bmMoZnMuY2hvd25TeW5jKVxuICBmcy5mY2hvd25TeW5jID0gY2hvd25GaXhTeW5jKGZzLmZjaG93blN5bmMpXG4gIGZzLmxjaG93blN5bmMgPSBjaG93bkZpeFN5bmMoZnMubGNob3duU3luYylcblxuICBmcy5jaG1vZFN5bmMgPSBjaG1vZEZpeFN5bmMoZnMuY2htb2RTeW5jKVxuICBmcy5mY2htb2RTeW5jID0gY2htb2RGaXhTeW5jKGZzLmZjaG1vZFN5bmMpXG4gIGZzLmxjaG1vZFN5bmMgPSBjaG1vZEZpeFN5bmMoZnMubGNobW9kU3luYylcblxuICBmcy5zdGF0ID0gc3RhdEZpeChmcy5zdGF0KVxuICBmcy5mc3RhdCA9IHN0YXRGaXgoZnMuZnN0YXQpXG4gIGZzLmxzdGF0ID0gc3RhdEZpeChmcy5sc3RhdClcblxuICBmcy5zdGF0U3luYyA9IHN0YXRGaXhTeW5jKGZzLnN0YXRTeW5jKVxuICBmcy5mc3RhdFN5bmMgPSBzdGF0Rml4U3luYyhmcy5mc3RhdFN5bmMpXG4gIGZzLmxzdGF0U3luYyA9IHN0YXRGaXhTeW5jKGZzLmxzdGF0U3luYylcblxuICAvLyBpZiBsY2htb2QvbGNob3duIGRvIG5vdCBleGlzdCwgdGhlbiBtYWtlIHRoZW0gbm8tb3BzXG4gIGlmIChmcy5jaG1vZCAmJiAhZnMubGNobW9kKSB7XG4gICAgZnMubGNobW9kID0gZnVuY3Rpb24gKHBhdGgsIG1vZGUsIGNiKSB7XG4gICAgICBpZiAoY2IpIHByb2Nlc3MubmV4dFRpY2soY2IpXG4gICAgfVxuICAgIGZzLmxjaG1vZFN5bmMgPSBmdW5jdGlvbiAoKSB7fVxuICB9XG4gIGlmIChmcy5jaG93biAmJiAhZnMubGNob3duKSB7XG4gICAgZnMubGNob3duID0gZnVuY3Rpb24gKHBhdGgsIHVpZCwgZ2lkLCBjYikge1xuICAgICAgaWYgKGNiKSBwcm9jZXNzLm5leHRUaWNrKGNiKVxuICAgIH1cbiAgICBmcy5sY2hvd25TeW5jID0gZnVuY3Rpb24gKCkge31cbiAgfVxuXG4gIC8vIG9uIFdpbmRvd3MsIEEvViBzb2Z0d2FyZSBjYW4gbG9jayB0aGUgZGlyZWN0b3J5LCBjYXVzaW5nIHRoaXNcbiAgLy8gdG8gZmFpbCB3aXRoIGFuIEVBQ0NFUyBvciBFUEVSTSBpZiB0aGUgZGlyZWN0b3J5IGNvbnRhaW5zIG5ld2x5XG4gIC8vIGNyZWF0ZWQgZmlsZXMuICBUcnkgYWdhaW4gb24gZmFpbHVyZSwgZm9yIHVwIHRvIDYwIHNlY29uZHMuXG5cbiAgLy8gU2V0IHRoZSB0aW1lb3V0IHRoaXMgbG9uZyBiZWNhdXNlIHNvbWUgV2luZG93cyBBbnRpLVZpcnVzLCBzdWNoIGFzIFBhcml0eVxuICAvLyBiaXQ5LCBtYXkgbG9jayBmaWxlcyBmb3IgdXAgdG8gYSBtaW51dGUsIGNhdXNpbmcgbnBtIHBhY2thZ2UgaW5zdGFsbFxuICAvLyBmYWlsdXJlcy4gQWxzbywgdGFrZSBjYXJlIHRvIHlpZWxkIHRoZSBzY2hlZHVsZXIuIFdpbmRvd3Mgc2NoZWR1bGluZyBnaXZlc1xuICAvLyBDUFUgdG8gYSBidXN5IGxvb3BpbmcgcHJvY2Vzcywgd2hpY2ggY2FuIGNhdXNlIHRoZSBwcm9ncmFtIGNhdXNpbmcgdGhlIGxvY2tcbiAgLy8gY29udGVudGlvbiB0byBiZSBzdGFydmVkIG9mIENQVSBieSBub2RlLCBzbyB0aGUgY29udGVudGlvbiBkb2Vzbid0IHJlc29sdmUuXG4gIGlmIChwbGF0Zm9ybSA9PT0gXCJ3aW4zMlwiKSB7XG4gICAgZnMucmVuYW1lID0gdHlwZW9mIGZzLnJlbmFtZSAhPT0gJ2Z1bmN0aW9uJyA/IGZzLnJlbmFtZVxuICAgIDogKGZ1bmN0aW9uIChmcyRyZW5hbWUpIHtcbiAgICAgIGZ1bmN0aW9uIHJlbmFtZSAoZnJvbSwgdG8sIGNiKSB7XG4gICAgICAgIHZhciBzdGFydCA9IERhdGUubm93KClcbiAgICAgICAgdmFyIGJhY2tvZmYgPSAwO1xuICAgICAgICBmcyRyZW5hbWUoZnJvbSwgdG8sIGZ1bmN0aW9uIENCIChlcikge1xuICAgICAgICAgIGlmIChlclxuICAgICAgICAgICAgICAmJiAoZXIuY29kZSA9PT0gXCJFQUNDRVNcIiB8fCBlci5jb2RlID09PSBcIkVQRVJNXCIgfHwgZXIuY29kZSA9PT0gXCJFQlVTWVwiKVxuICAgICAgICAgICAgICAmJiBEYXRlLm5vdygpIC0gc3RhcnQgPCA2MDAwMCkge1xuICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgZnMuc3RhdCh0bywgZnVuY3Rpb24gKHN0YXRlciwgc3QpIHtcbiAgICAgICAgICAgICAgICBpZiAoc3RhdGVyICYmIHN0YXRlci5jb2RlID09PSBcIkVOT0VOVFwiKVxuICAgICAgICAgICAgICAgICAgZnMkcmVuYW1lKGZyb20sIHRvLCBDQik7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgY2IoZXIpXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9LCBiYWNrb2ZmKVxuICAgICAgICAgICAgaWYgKGJhY2tvZmYgPCAxMDApXG4gICAgICAgICAgICAgIGJhY2tvZmYgKz0gMTA7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChjYikgY2IoZXIpXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBpZiAoT2JqZWN0LnNldFByb3RvdHlwZU9mKSBPYmplY3Quc2V0UHJvdG90eXBlT2YocmVuYW1lLCBmcyRyZW5hbWUpXG4gICAgICByZXR1cm4gcmVuYW1lXG4gICAgfSkoZnMucmVuYW1lKVxuICB9XG5cbiAgLy8gaWYgcmVhZCgpIHJldHVybnMgRUFHQUlOLCB0aGVuIGp1c3QgdHJ5IGl0IGFnYWluLlxuICBmcy5yZWFkID0gdHlwZW9mIGZzLnJlYWQgIT09ICdmdW5jdGlvbicgPyBmcy5yZWFkXG4gIDogKGZ1bmN0aW9uIChmcyRyZWFkKSB7XG4gICAgZnVuY3Rpb24gcmVhZCAoZmQsIGJ1ZmZlciwgb2Zmc2V0LCBsZW5ndGgsIHBvc2l0aW9uLCBjYWxsYmFja18pIHtcbiAgICAgIHZhciBjYWxsYmFja1xuICAgICAgaWYgKGNhbGxiYWNrXyAmJiB0eXBlb2YgY2FsbGJhY2tfID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHZhciBlYWdDb3VudGVyID0gMFxuICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uIChlciwgXywgX18pIHtcbiAgICAgICAgICBpZiAoZXIgJiYgZXIuY29kZSA9PT0gJ0VBR0FJTicgJiYgZWFnQ291bnRlciA8IDEwKSB7XG4gICAgICAgICAgICBlYWdDb3VudGVyICsrXG4gICAgICAgICAgICByZXR1cm4gZnMkcmVhZC5jYWxsKGZzLCBmZCwgYnVmZmVyLCBvZmZzZXQsIGxlbmd0aCwgcG9zaXRpb24sIGNhbGxiYWNrKVxuICAgICAgICAgIH1cbiAgICAgICAgICBjYWxsYmFja18uYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZnMkcmVhZC5jYWxsKGZzLCBmZCwgYnVmZmVyLCBvZmZzZXQsIGxlbmd0aCwgcG9zaXRpb24sIGNhbGxiYWNrKVxuICAgIH1cblxuICAgIC8vIFRoaXMgZW5zdXJlcyBgdXRpbC5wcm9taXNpZnlgIHdvcmtzIGFzIGl0IGRvZXMgZm9yIG5hdGl2ZSBgZnMucmVhZGAuXG4gICAgaWYgKE9iamVjdC5zZXRQcm90b3R5cGVPZikgT2JqZWN0LnNldFByb3RvdHlwZU9mKHJlYWQsIGZzJHJlYWQpXG4gICAgcmV0dXJuIHJlYWRcbiAgfSkoZnMucmVhZClcblxuICBmcy5yZWFkU3luYyA9IHR5cGVvZiBmcy5yZWFkU3luYyAhPT0gJ2Z1bmN0aW9uJyA/IGZzLnJlYWRTeW5jXG4gIDogKGZ1bmN0aW9uIChmcyRyZWFkU3luYykgeyByZXR1cm4gZnVuY3Rpb24gKGZkLCBidWZmZXIsIG9mZnNldCwgbGVuZ3RoLCBwb3NpdGlvbikge1xuICAgIHZhciBlYWdDb3VudGVyID0gMFxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gZnMkcmVhZFN5bmMuY2FsbChmcywgZmQsIGJ1ZmZlciwgb2Zmc2V0LCBsZW5ndGgsIHBvc2l0aW9uKVxuICAgICAgfSBjYXRjaCAoZXIpIHtcbiAgICAgICAgaWYgKGVyLmNvZGUgPT09ICdFQUdBSU4nICYmIGVhZ0NvdW50ZXIgPCAxMCkge1xuICAgICAgICAgIGVhZ0NvdW50ZXIgKytcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIHRocm93IGVyXG4gICAgICB9XG4gICAgfVxuICB9fSkoZnMucmVhZFN5bmMpXG5cbiAgZnVuY3Rpb24gcGF0Y2hMY2htb2QgKGZzKSB7XG4gICAgZnMubGNobW9kID0gZnVuY3Rpb24gKHBhdGgsIG1vZGUsIGNhbGxiYWNrKSB7XG4gICAgICBmcy5vcGVuKCBwYXRoXG4gICAgICAgICAgICAgLCBjb25zdGFudHMuT19XUk9OTFkgfCBjb25zdGFudHMuT19TWU1MSU5LXG4gICAgICAgICAgICAgLCBtb2RlXG4gICAgICAgICAgICAgLCBmdW5jdGlvbiAoZXJyLCBmZCkge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgaWYgKGNhbGxiYWNrKSBjYWxsYmFjayhlcnIpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgLy8gcHJlZmVyIHRvIHJldHVybiB0aGUgY2htb2QgZXJyb3IsIGlmIG9uZSBvY2N1cnMsXG4gICAgICAgIC8vIGJ1dCBzdGlsbCB0cnkgdG8gY2xvc2UsIGFuZCByZXBvcnQgY2xvc2luZyBlcnJvcnMgaWYgdGhleSBvY2N1ci5cbiAgICAgICAgZnMuZmNobW9kKGZkLCBtb2RlLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgZnMuY2xvc2UoZmQsIGZ1bmN0aW9uKGVycjIpIHtcbiAgICAgICAgICAgIGlmIChjYWxsYmFjaykgY2FsbGJhY2soZXJyIHx8IGVycjIpXG4gICAgICAgICAgfSlcbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgZnMubGNobW9kU3luYyA9IGZ1bmN0aW9uIChwYXRoLCBtb2RlKSB7XG4gICAgICB2YXIgZmQgPSBmcy5vcGVuU3luYyhwYXRoLCBjb25zdGFudHMuT19XUk9OTFkgfCBjb25zdGFudHMuT19TWU1MSU5LLCBtb2RlKVxuXG4gICAgICAvLyBwcmVmZXIgdG8gcmV0dXJuIHRoZSBjaG1vZCBlcnJvciwgaWYgb25lIG9jY3VycyxcbiAgICAgIC8vIGJ1dCBzdGlsbCB0cnkgdG8gY2xvc2UsIGFuZCByZXBvcnQgY2xvc2luZyBlcnJvcnMgaWYgdGhleSBvY2N1ci5cbiAgICAgIHZhciB0aHJldyA9IHRydWVcbiAgICAgIHZhciByZXRcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldCA9IGZzLmZjaG1vZFN5bmMoZmQsIG1vZGUpXG4gICAgICAgIHRocmV3ID0gZmFsc2VcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmICh0aHJldykge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmcy5jbG9zZVN5bmMoZmQpXG4gICAgICAgICAgfSBjYXRjaCAoZXIpIHt9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZnMuY2xvc2VTeW5jKGZkKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmV0XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcGF0Y2hMdXRpbWVzIChmcykge1xuICAgIGlmIChjb25zdGFudHMuaGFzT3duUHJvcGVydHkoXCJPX1NZTUxJTktcIikgJiYgZnMuZnV0aW1lcykge1xuICAgICAgZnMubHV0aW1lcyA9IGZ1bmN0aW9uIChwYXRoLCBhdCwgbXQsIGNiKSB7XG4gICAgICAgIGZzLm9wZW4ocGF0aCwgY29uc3RhbnRzLk9fU1lNTElOSywgZnVuY3Rpb24gKGVyLCBmZCkge1xuICAgICAgICAgIGlmIChlcikge1xuICAgICAgICAgICAgaWYgKGNiKSBjYihlcilcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cbiAgICAgICAgICBmcy5mdXRpbWVzKGZkLCBhdCwgbXQsIGZ1bmN0aW9uIChlcikge1xuICAgICAgICAgICAgZnMuY2xvc2UoZmQsIGZ1bmN0aW9uIChlcjIpIHtcbiAgICAgICAgICAgICAgaWYgKGNiKSBjYihlciB8fCBlcjIpXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGZzLmx1dGltZXNTeW5jID0gZnVuY3Rpb24gKHBhdGgsIGF0LCBtdCkge1xuICAgICAgICB2YXIgZmQgPSBmcy5vcGVuU3luYyhwYXRoLCBjb25zdGFudHMuT19TWU1MSU5LKVxuICAgICAgICB2YXIgcmV0XG4gICAgICAgIHZhciB0aHJldyA9IHRydWVcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXQgPSBmcy5mdXRpbWVzU3luYyhmZCwgYXQsIG10KVxuICAgICAgICAgIHRocmV3ID0gZmFsc2VcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBpZiAodGhyZXcpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGZzLmNsb3NlU3luYyhmZClcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVyKSB7fVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmcy5jbG9zZVN5bmMoZmQpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXRcbiAgICAgIH1cblxuICAgIH0gZWxzZSBpZiAoZnMuZnV0aW1lcykge1xuICAgICAgZnMubHV0aW1lcyA9IGZ1bmN0aW9uIChfYSwgX2IsIF9jLCBjYikgeyBpZiAoY2IpIHByb2Nlc3MubmV4dFRpY2soY2IpIH1cbiAgICAgIGZzLmx1dGltZXNTeW5jID0gZnVuY3Rpb24gKCkge31cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjaG1vZEZpeCAob3JpZykge1xuICAgIGlmICghb3JpZykgcmV0dXJuIG9yaWdcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwgbW9kZSwgY2IpIHtcbiAgICAgIHJldHVybiBvcmlnLmNhbGwoZnMsIHRhcmdldCwgbW9kZSwgZnVuY3Rpb24gKGVyKSB7XG4gICAgICAgIGlmIChjaG93bkVyT2soZXIpKSBlciA9IG51bGxcbiAgICAgICAgaWYgKGNiKSBjYi5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNobW9kRml4U3luYyAob3JpZykge1xuICAgIGlmICghb3JpZykgcmV0dXJuIG9yaWdcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwgbW9kZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG9yaWcuY2FsbChmcywgdGFyZ2V0LCBtb2RlKVxuICAgICAgfSBjYXRjaCAoZXIpIHtcbiAgICAgICAgaWYgKCFjaG93bkVyT2soZXIpKSB0aHJvdyBlclxuICAgICAgfVxuICAgIH1cbiAgfVxuXG5cbiAgZnVuY3Rpb24gY2hvd25GaXggKG9yaWcpIHtcbiAgICBpZiAoIW9yaWcpIHJldHVybiBvcmlnXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIHVpZCwgZ2lkLCBjYikge1xuICAgICAgcmV0dXJuIG9yaWcuY2FsbChmcywgdGFyZ2V0LCB1aWQsIGdpZCwgZnVuY3Rpb24gKGVyKSB7XG4gICAgICAgIGlmIChjaG93bkVyT2soZXIpKSBlciA9IG51bGxcbiAgICAgICAgaWYgKGNiKSBjYi5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNob3duRml4U3luYyAob3JpZykge1xuICAgIGlmICghb3JpZykgcmV0dXJuIG9yaWdcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwgdWlkLCBnaWQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBvcmlnLmNhbGwoZnMsIHRhcmdldCwgdWlkLCBnaWQpXG4gICAgICB9IGNhdGNoIChlcikge1xuICAgICAgICBpZiAoIWNob3duRXJPayhlcikpIHRocm93IGVyXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gc3RhdEZpeCAob3JpZykge1xuICAgIGlmICghb3JpZykgcmV0dXJuIG9yaWdcbiAgICAvLyBPbGRlciB2ZXJzaW9ucyBvZiBOb2RlIGVycm9uZW91c2x5IHJldHVybmVkIHNpZ25lZCBpbnRlZ2VycyBmb3JcbiAgICAvLyB1aWQgKyBnaWQuXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIG9wdGlvbnMsIGNiKSB7XG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY2IgPSBvcHRpb25zXG4gICAgICAgIG9wdGlvbnMgPSBudWxsXG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBjYWxsYmFjayAoZXIsIHN0YXRzKSB7XG4gICAgICAgIGlmIChzdGF0cykge1xuICAgICAgICAgIGlmIChzdGF0cy51aWQgPCAwKSBzdGF0cy51aWQgKz0gMHgxMDAwMDAwMDBcbiAgICAgICAgICBpZiAoc3RhdHMuZ2lkIDwgMCkgc3RhdHMuZ2lkICs9IDB4MTAwMDAwMDAwXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNiKSBjYi5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICB9XG4gICAgICByZXR1cm4gb3B0aW9ucyA/IG9yaWcuY2FsbChmcywgdGFyZ2V0LCBvcHRpb25zLCBjYWxsYmFjaylcbiAgICAgICAgOiBvcmlnLmNhbGwoZnMsIHRhcmdldCwgY2FsbGJhY2spXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gc3RhdEZpeFN5bmMgKG9yaWcpIHtcbiAgICBpZiAoIW9yaWcpIHJldHVybiBvcmlnXG4gICAgLy8gT2xkZXIgdmVyc2lvbnMgb2YgTm9kZSBlcnJvbmVvdXNseSByZXR1cm5lZCBzaWduZWQgaW50ZWdlcnMgZm9yXG4gICAgLy8gdWlkICsgZ2lkLlxuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBvcHRpb25zKSB7XG4gICAgICB2YXIgc3RhdHMgPSBvcHRpb25zID8gb3JpZy5jYWxsKGZzLCB0YXJnZXQsIG9wdGlvbnMpXG4gICAgICAgIDogb3JpZy5jYWxsKGZzLCB0YXJnZXQpXG4gICAgICBpZiAoc3RhdHMpIHtcbiAgICAgICAgaWYgKHN0YXRzLnVpZCA8IDApIHN0YXRzLnVpZCArPSAweDEwMDAwMDAwMFxuICAgICAgICBpZiAoc3RhdHMuZ2lkIDwgMCkgc3RhdHMuZ2lkICs9IDB4MTAwMDAwMDAwXG4gICAgICB9XG4gICAgICByZXR1cm4gc3RhdHM7XG4gICAgfVxuICB9XG5cbiAgLy8gRU5PU1lTIG1lYW5zIHRoYXQgdGhlIGZzIGRvZXNuJ3Qgc3VwcG9ydCB0aGUgb3AuIEp1c3QgaWdub3JlXG4gIC8vIHRoYXQsIGJlY2F1c2UgaXQgZG9lc24ndCBtYXR0ZXIuXG4gIC8vXG4gIC8vIGlmIHRoZXJlJ3Mgbm8gZ2V0dWlkLCBvciBpZiBnZXR1aWQoKSBpcyBzb21ldGhpbmcgb3RoZXJcbiAgLy8gdGhhbiAwLCBhbmQgdGhlIGVycm9yIGlzIEVJTlZBTCBvciBFUEVSTSwgdGhlbiBqdXN0IGlnbm9yZVxuICAvLyBpdC5cbiAgLy9cbiAgLy8gVGhpcyBzcGVjaWZpYyBjYXNlIGlzIGEgc2lsZW50IGZhaWx1cmUgaW4gY3AsIGluc3RhbGwsIHRhcixcbiAgLy8gYW5kIG1vc3Qgb3RoZXIgdW5peCB0b29scyB0aGF0IG1hbmFnZSBwZXJtaXNzaW9ucy5cbiAgLy9cbiAgLy8gV2hlbiBydW5uaW5nIGFzIHJvb3QsIG9yIGlmIG90aGVyIHR5cGVzIG9mIGVycm9ycyBhcmVcbiAgLy8gZW5jb3VudGVyZWQsIHRoZW4gaXQncyBzdHJpY3QuXG4gIGZ1bmN0aW9uIGNob3duRXJPayAoZXIpIHtcbiAgICBpZiAoIWVyKVxuICAgICAgcmV0dXJuIHRydWVcblxuICAgIGlmIChlci5jb2RlID09PSBcIkVOT1NZU1wiKVxuICAgICAgcmV0dXJuIHRydWVcblxuICAgIHZhciBub25yb290ID0gIXByb2Nlc3MuZ2V0dWlkIHx8IHByb2Nlc3MuZ2V0dWlkKCkgIT09IDBcbiAgICBpZiAobm9ucm9vdCkge1xuICAgICAgaWYgKGVyLmNvZGUgPT09IFwiRUlOVkFMXCIgfHwgZXIuY29kZSA9PT0gXCJFUEVSTVwiKVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG4iLCAidmFyIFN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbScpLlN0cmVhbVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxlZ2FjeVxuXG5mdW5jdGlvbiBsZWdhY3kgKGZzKSB7XG4gIHJldHVybiB7XG4gICAgUmVhZFN0cmVhbTogUmVhZFN0cmVhbSxcbiAgICBXcml0ZVN0cmVhbTogV3JpdGVTdHJlYW1cbiAgfVxuXG4gIGZ1bmN0aW9uIFJlYWRTdHJlYW0gKHBhdGgsIG9wdGlvbnMpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUmVhZFN0cmVhbSkpIHJldHVybiBuZXcgUmVhZFN0cmVhbShwYXRoLCBvcHRpb25zKTtcblxuICAgIFN0cmVhbS5jYWxsKHRoaXMpO1xuXG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgdGhpcy5wYXRoID0gcGF0aDtcbiAgICB0aGlzLmZkID0gbnVsbDtcbiAgICB0aGlzLnJlYWRhYmxlID0gdHJ1ZTtcbiAgICB0aGlzLnBhdXNlZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5mbGFncyA9ICdyJztcbiAgICB0aGlzLm1vZGUgPSA0Mzg7IC8qPTA2NjYqL1xuICAgIHRoaXMuYnVmZmVyU2l6ZSA9IDY0ICogMTAyNDtcblxuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgLy8gTWl4aW4gb3B0aW9ucyBpbnRvIHRoaXNcbiAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9wdGlvbnMpO1xuICAgIGZvciAodmFyIGluZGV4ID0gMCwgbGVuZ3RoID0ga2V5cy5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpbmRleF07XG4gICAgICB0aGlzW2tleV0gPSBvcHRpb25zW2tleV07XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZW5jb2RpbmcpIHRoaXMuc2V0RW5jb2RpbmcodGhpcy5lbmNvZGluZyk7XG5cbiAgICBpZiAodGhpcy5zdGFydCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoJ251bWJlcicgIT09IHR5cGVvZiB0aGlzLnN0YXJ0KSB7XG4gICAgICAgIHRocm93IFR5cGVFcnJvcignc3RhcnQgbXVzdCBiZSBhIE51bWJlcicpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuZW5kID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5lbmQgPSBJbmZpbml0eTtcbiAgICAgIH0gZWxzZSBpZiAoJ251bWJlcicgIT09IHR5cGVvZiB0aGlzLmVuZCkge1xuICAgICAgICB0aHJvdyBUeXBlRXJyb3IoJ2VuZCBtdXN0IGJlIGEgTnVtYmVyJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnN0YXJ0ID4gdGhpcy5lbmQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzdGFydCBtdXN0IGJlIDw9IGVuZCcpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnBvcyA9IHRoaXMuc3RhcnQ7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZmQgIT09IG51bGwpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24oKSB7XG4gICAgICAgIHNlbGYuX3JlYWQoKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZzLm9wZW4odGhpcy5wYXRoLCB0aGlzLmZsYWdzLCB0aGlzLm1vZGUsIGZ1bmN0aW9uIChlcnIsIGZkKSB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIHNlbGYuZW1pdCgnZXJyb3InLCBlcnIpO1xuICAgICAgICBzZWxmLnJlYWRhYmxlID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgc2VsZi5mZCA9IGZkO1xuICAgICAgc2VsZi5lbWl0KCdvcGVuJywgZmQpO1xuICAgICAgc2VsZi5fcmVhZCgpO1xuICAgIH0pXG4gIH1cblxuICBmdW5jdGlvbiBXcml0ZVN0cmVhbSAocGF0aCwgb3B0aW9ucykge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBXcml0ZVN0cmVhbSkpIHJldHVybiBuZXcgV3JpdGVTdHJlYW0ocGF0aCwgb3B0aW9ucyk7XG5cbiAgICBTdHJlYW0uY2FsbCh0aGlzKTtcblxuICAgIHRoaXMucGF0aCA9IHBhdGg7XG4gICAgdGhpcy5mZCA9IG51bGw7XG4gICAgdGhpcy53cml0YWJsZSA9IHRydWU7XG5cbiAgICB0aGlzLmZsYWdzID0gJ3cnO1xuICAgIHRoaXMuZW5jb2RpbmcgPSAnYmluYXJ5JztcbiAgICB0aGlzLm1vZGUgPSA0Mzg7IC8qPTA2NjYqL1xuICAgIHRoaXMuYnl0ZXNXcml0dGVuID0gMDtcblxuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgLy8gTWl4aW4gb3B0aW9ucyBpbnRvIHRoaXNcbiAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9wdGlvbnMpO1xuICAgIGZvciAodmFyIGluZGV4ID0gMCwgbGVuZ3RoID0ga2V5cy5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpbmRleF07XG4gICAgICB0aGlzW2tleV0gPSBvcHRpb25zW2tleV07XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc3RhcnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKCdudW1iZXInICE9PSB0eXBlb2YgdGhpcy5zdGFydCkge1xuICAgICAgICB0aHJvdyBUeXBlRXJyb3IoJ3N0YXJ0IG11c3QgYmUgYSBOdW1iZXInKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnN0YXJ0IDwgMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3N0YXJ0IG11c3QgYmUgPj0gemVybycpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnBvcyA9IHRoaXMuc3RhcnQ7XG4gICAgfVxuXG4gICAgdGhpcy5idXN5ID0gZmFsc2U7XG4gICAgdGhpcy5fcXVldWUgPSBbXTtcblxuICAgIGlmICh0aGlzLmZkID09PSBudWxsKSB7XG4gICAgICB0aGlzLl9vcGVuID0gZnMub3BlbjtcbiAgICAgIHRoaXMuX3F1ZXVlLnB1c2goW3RoaXMuX29wZW4sIHRoaXMucGF0aCwgdGhpcy5mbGFncywgdGhpcy5tb2RlLCB1bmRlZmluZWRdKTtcbiAgICAgIHRoaXMuZmx1c2goKTtcbiAgICB9XG4gIH1cbn1cbiIsICIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMgPSBjbG9uZVxuXG52YXIgZ2V0UHJvdG90eXBlT2YgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gKG9iaikge1xuICByZXR1cm4gb2JqLl9fcHJvdG9fX1xufVxuXG5mdW5jdGlvbiBjbG9uZSAob2JqKSB7XG4gIGlmIChvYmogPT09IG51bGwgfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcpXG4gICAgcmV0dXJuIG9ialxuXG4gIGlmIChvYmogaW5zdGFuY2VvZiBPYmplY3QpXG4gICAgdmFyIGNvcHkgPSB7IF9fcHJvdG9fXzogZ2V0UHJvdG90eXBlT2Yob2JqKSB9XG4gIGVsc2VcbiAgICB2YXIgY29weSA9IE9iamVjdC5jcmVhdGUobnVsbClcblxuICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmopLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb3B5LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCBrZXkpKVxuICB9KVxuXG4gIHJldHVybiBjb3B5XG59XG4iLCAidmFyIGZzID0gcmVxdWlyZSgnZnMnKVxudmFyIHBvbHlmaWxscyA9IHJlcXVpcmUoJy4vcG9seWZpbGxzLmpzJylcbnZhciBsZWdhY3kgPSByZXF1aXJlKCcuL2xlZ2FjeS1zdHJlYW1zLmpzJylcbnZhciBjbG9uZSA9IHJlcXVpcmUoJy4vY2xvbmUuanMnKVxuXG52YXIgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKVxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAtIG5vZGUgMC54IHBvbHlmaWxsICovXG52YXIgZ3JhY2VmdWxRdWV1ZVxudmFyIHByZXZpb3VzU3ltYm9sXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlIC0gbm9kZSAwLnggcG9seWZpbGwgKi9cbmlmICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBTeW1ib2wuZm9yID09PSAnZnVuY3Rpb24nKSB7XG4gIGdyYWNlZnVsUXVldWUgPSBTeW1ib2wuZm9yKCdncmFjZWZ1bC1mcy5xdWV1ZScpXG4gIC8vIFRoaXMgaXMgdXNlZCBpbiB0ZXN0aW5nIGJ5IGZ1dHVyZSB2ZXJzaW9uc1xuICBwcmV2aW91c1N5bWJvbCA9IFN5bWJvbC5mb3IoJ2dyYWNlZnVsLWZzLnByZXZpb3VzJylcbn0gZWxzZSB7XG4gIGdyYWNlZnVsUXVldWUgPSAnX19fZ3JhY2VmdWwtZnMucXVldWUnXG4gIHByZXZpb3VzU3ltYm9sID0gJ19fX2dyYWNlZnVsLWZzLnByZXZpb3VzJ1xufVxuXG5mdW5jdGlvbiBub29wICgpIHt9XG5cbmZ1bmN0aW9uIHB1Ymxpc2hRdWV1ZShjb250ZXh0LCBxdWV1ZSkge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29udGV4dCwgZ3JhY2VmdWxRdWV1ZSwge1xuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gcXVldWVcbiAgICB9XG4gIH0pXG59XG5cbnZhciBkZWJ1ZyA9IG5vb3BcbmlmICh1dGlsLmRlYnVnbG9nKVxuICBkZWJ1ZyA9IHV0aWwuZGVidWdsb2coJ2dmczQnKVxuZWxzZSBpZiAoL1xcYmdmczRcXGIvaS50ZXN0KHByb2Nlc3MuZW52Lk5PREVfREVCVUcgfHwgJycpKVxuICBkZWJ1ZyA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBtID0gdXRpbC5mb3JtYXQuYXBwbHkodXRpbCwgYXJndW1lbnRzKVxuICAgIG0gPSAnR0ZTNDogJyArIG0uc3BsaXQoL1xcbi8pLmpvaW4oJ1xcbkdGUzQ6ICcpXG4gICAgY29uc29sZS5lcnJvcihtKVxuICB9XG5cbi8vIE9uY2UgdGltZSBpbml0aWFsaXphdGlvblxuaWYgKCFmc1tncmFjZWZ1bFF1ZXVlXSkge1xuICAvLyBUaGlzIHF1ZXVlIGNhbiBiZSBzaGFyZWQgYnkgbXVsdGlwbGUgbG9hZGVkIGluc3RhbmNlc1xuICB2YXIgcXVldWUgPSBnbG9iYWxbZ3JhY2VmdWxRdWV1ZV0gfHwgW11cbiAgcHVibGlzaFF1ZXVlKGZzLCBxdWV1ZSlcblxuICAvLyBQYXRjaCBmcy5jbG9zZS9jbG9zZVN5bmMgdG8gc2hhcmVkIHF1ZXVlIHZlcnNpb24sIGJlY2F1c2Ugd2UgbmVlZFxuICAvLyB0byByZXRyeSgpIHdoZW5ldmVyIGEgY2xvc2UgaGFwcGVucyAqYW55d2hlcmUqIGluIHRoZSBwcm9ncmFtLlxuICAvLyBUaGlzIGlzIGVzc2VudGlhbCB3aGVuIG11bHRpcGxlIGdyYWNlZnVsLWZzIGluc3RhbmNlcyBhcmVcbiAgLy8gaW4gcGxheSBhdCB0aGUgc2FtZSB0aW1lLlxuICBmcy5jbG9zZSA9IChmdW5jdGlvbiAoZnMkY2xvc2UpIHtcbiAgICBmdW5jdGlvbiBjbG9zZSAoZmQsIGNiKSB7XG4gICAgICByZXR1cm4gZnMkY2xvc2UuY2FsbChmcywgZmQsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgLy8gVGhpcyBmdW5jdGlvbiB1c2VzIHRoZSBncmFjZWZ1bC1mcyBzaGFyZWQgcXVldWVcbiAgICAgICAgaWYgKCFlcnIpIHtcbiAgICAgICAgICByZXNldFF1ZXVlKClcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpXG4gICAgICAgICAgY2IuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY2xvc2UsIHByZXZpb3VzU3ltYm9sLCB7XG4gICAgICB2YWx1ZTogZnMkY2xvc2VcbiAgICB9KVxuICAgIHJldHVybiBjbG9zZVxuICB9KShmcy5jbG9zZSlcblxuICBmcy5jbG9zZVN5bmMgPSAoZnVuY3Rpb24gKGZzJGNsb3NlU3luYykge1xuICAgIGZ1bmN0aW9uIGNsb3NlU3luYyAoZmQpIHtcbiAgICAgIC8vIFRoaXMgZnVuY3Rpb24gdXNlcyB0aGUgZ3JhY2VmdWwtZnMgc2hhcmVkIHF1ZXVlXG4gICAgICBmcyRjbG9zZVN5bmMuYXBwbHkoZnMsIGFyZ3VtZW50cylcbiAgICAgIHJlc2V0UXVldWUoKVxuICAgIH1cblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjbG9zZVN5bmMsIHByZXZpb3VzU3ltYm9sLCB7XG4gICAgICB2YWx1ZTogZnMkY2xvc2VTeW5jXG4gICAgfSlcbiAgICByZXR1cm4gY2xvc2VTeW5jXG4gIH0pKGZzLmNsb3NlU3luYylcblxuICBpZiAoL1xcYmdmczRcXGIvaS50ZXN0KHByb2Nlc3MuZW52Lk5PREVfREVCVUcgfHwgJycpKSB7XG4gICAgcHJvY2Vzcy5vbignZXhpdCcsIGZ1bmN0aW9uKCkge1xuICAgICAgZGVidWcoZnNbZ3JhY2VmdWxRdWV1ZV0pXG4gICAgICByZXF1aXJlKCdhc3NlcnQnKS5lcXVhbChmc1tncmFjZWZ1bFF1ZXVlXS5sZW5ndGgsIDApXG4gICAgfSlcbiAgfVxufVxuXG5pZiAoIWdsb2JhbFtncmFjZWZ1bFF1ZXVlXSkge1xuICBwdWJsaXNoUXVldWUoZ2xvYmFsLCBmc1tncmFjZWZ1bFF1ZXVlXSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0Y2goY2xvbmUoZnMpKVxuaWYgKHByb2Nlc3MuZW52LlRFU1RfR1JBQ0VGVUxfRlNfR0xPQkFMX1BBVENIICYmICFmcy5fX3BhdGNoZWQpIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IHBhdGNoKGZzKVxuICAgIGZzLl9fcGF0Y2hlZCA9IHRydWU7XG59XG5cbmZ1bmN0aW9uIHBhdGNoIChmcykge1xuICAvLyBFdmVyeXRoaW5nIHRoYXQgcmVmZXJlbmNlcyB0aGUgb3BlbigpIGZ1bmN0aW9uIG5lZWRzIHRvIGJlIGluIGhlcmVcbiAgcG9seWZpbGxzKGZzKVxuICBmcy5ncmFjZWZ1bGlmeSA9IHBhdGNoXG5cbiAgZnMuY3JlYXRlUmVhZFN0cmVhbSA9IGNyZWF0ZVJlYWRTdHJlYW1cbiAgZnMuY3JlYXRlV3JpdGVTdHJlYW0gPSBjcmVhdGVXcml0ZVN0cmVhbVxuICB2YXIgZnMkcmVhZEZpbGUgPSBmcy5yZWFkRmlsZVxuICBmcy5yZWFkRmlsZSA9IHJlYWRGaWxlXG4gIGZ1bmN0aW9uIHJlYWRGaWxlIChwYXRoLCBvcHRpb25zLCBjYikge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgIGNiID0gb3B0aW9ucywgb3B0aW9ucyA9IG51bGxcblxuICAgIHJldHVybiBnbyRyZWFkRmlsZShwYXRoLCBvcHRpb25zLCBjYilcblxuICAgIGZ1bmN0aW9uIGdvJHJlYWRGaWxlIChwYXRoLCBvcHRpb25zLCBjYiwgc3RhcnRUaW1lKSB7XG4gICAgICByZXR1cm4gZnMkcmVhZEZpbGUocGF0aCwgb3B0aW9ucywgZnVuY3Rpb24gKGVycikge1xuICAgICAgICBpZiAoZXJyICYmIChlcnIuY29kZSA9PT0gJ0VNRklMRScgfHwgZXJyLmNvZGUgPT09ICdFTkZJTEUnKSlcbiAgICAgICAgICBlbnF1ZXVlKFtnbyRyZWFkRmlsZSwgW3BhdGgsIG9wdGlvbnMsIGNiXSwgZXJyLCBzdGFydFRpbWUgfHwgRGF0ZS5ub3coKSwgRGF0ZS5ub3coKV0pXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpXG4gICAgICAgICAgICBjYi5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgdmFyIGZzJHdyaXRlRmlsZSA9IGZzLndyaXRlRmlsZVxuICBmcy53cml0ZUZpbGUgPSB3cml0ZUZpbGVcbiAgZnVuY3Rpb24gd3JpdGVGaWxlIChwYXRoLCBkYXRhLCBvcHRpb25zLCBjYikge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgIGNiID0gb3B0aW9ucywgb3B0aW9ucyA9IG51bGxcblxuICAgIHJldHVybiBnbyR3cml0ZUZpbGUocGF0aCwgZGF0YSwgb3B0aW9ucywgY2IpXG5cbiAgICBmdW5jdGlvbiBnbyR3cml0ZUZpbGUgKHBhdGgsIGRhdGEsIG9wdGlvbnMsIGNiLCBzdGFydFRpbWUpIHtcbiAgICAgIHJldHVybiBmcyR3cml0ZUZpbGUocGF0aCwgZGF0YSwgb3B0aW9ucywgZnVuY3Rpb24gKGVycikge1xuICAgICAgICBpZiAoZXJyICYmIChlcnIuY29kZSA9PT0gJ0VNRklMRScgfHwgZXJyLmNvZGUgPT09ICdFTkZJTEUnKSlcbiAgICAgICAgICBlbnF1ZXVlKFtnbyR3cml0ZUZpbGUsIFtwYXRoLCBkYXRhLCBvcHRpb25zLCBjYl0sIGVyciwgc3RhcnRUaW1lIHx8IERhdGUubm93KCksIERhdGUubm93KCldKVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBpZiAodHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKVxuICAgICAgICAgICAgY2IuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIHZhciBmcyRhcHBlbmRGaWxlID0gZnMuYXBwZW5kRmlsZVxuICBpZiAoZnMkYXBwZW5kRmlsZSlcbiAgICBmcy5hcHBlbmRGaWxlID0gYXBwZW5kRmlsZVxuICBmdW5jdGlvbiBhcHBlbmRGaWxlIChwYXRoLCBkYXRhLCBvcHRpb25zLCBjYikge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgIGNiID0gb3B0aW9ucywgb3B0aW9ucyA9IG51bGxcblxuICAgIHJldHVybiBnbyRhcHBlbmRGaWxlKHBhdGgsIGRhdGEsIG9wdGlvbnMsIGNiKVxuXG4gICAgZnVuY3Rpb24gZ28kYXBwZW5kRmlsZSAocGF0aCwgZGF0YSwgb3B0aW9ucywgY2IsIHN0YXJ0VGltZSkge1xuICAgICAgcmV0dXJuIGZzJGFwcGVuZEZpbGUocGF0aCwgZGF0YSwgb3B0aW9ucywgZnVuY3Rpb24gKGVycikge1xuICAgICAgICBpZiAoZXJyICYmIChlcnIuY29kZSA9PT0gJ0VNRklMRScgfHwgZXJyLmNvZGUgPT09ICdFTkZJTEUnKSlcbiAgICAgICAgICBlbnF1ZXVlKFtnbyRhcHBlbmRGaWxlLCBbcGF0aCwgZGF0YSwgb3B0aW9ucywgY2JdLCBlcnIsIHN0YXJ0VGltZSB8fCBEYXRlLm5vdygpLCBEYXRlLm5vdygpXSlcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICAgIGNiLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICB2YXIgZnMkY29weUZpbGUgPSBmcy5jb3B5RmlsZVxuICBpZiAoZnMkY29weUZpbGUpXG4gICAgZnMuY29weUZpbGUgPSBjb3B5RmlsZVxuICBmdW5jdGlvbiBjb3B5RmlsZSAoc3JjLCBkZXN0LCBmbGFncywgY2IpIHtcbiAgICBpZiAodHlwZW9mIGZsYWdzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjYiA9IGZsYWdzXG4gICAgICBmbGFncyA9IDBcbiAgICB9XG4gICAgcmV0dXJuIGdvJGNvcHlGaWxlKHNyYywgZGVzdCwgZmxhZ3MsIGNiKVxuXG4gICAgZnVuY3Rpb24gZ28kY29weUZpbGUgKHNyYywgZGVzdCwgZmxhZ3MsIGNiLCBzdGFydFRpbWUpIHtcbiAgICAgIHJldHVybiBmcyRjb3B5RmlsZShzcmMsIGRlc3QsIGZsYWdzLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIGlmIChlcnIgJiYgKGVyci5jb2RlID09PSAnRU1GSUxFJyB8fCBlcnIuY29kZSA9PT0gJ0VORklMRScpKVxuICAgICAgICAgIGVucXVldWUoW2dvJGNvcHlGaWxlLCBbc3JjLCBkZXN0LCBmbGFncywgY2JdLCBlcnIsIHN0YXJ0VGltZSB8fCBEYXRlLm5vdygpLCBEYXRlLm5vdygpXSlcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICAgIGNiLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICB2YXIgZnMkcmVhZGRpciA9IGZzLnJlYWRkaXJcbiAgZnMucmVhZGRpciA9IHJlYWRkaXJcbiAgdmFyIG5vUmVhZGRpck9wdGlvblZlcnNpb25zID0gL152WzAtNV1cXC4vXG4gIGZ1bmN0aW9uIHJlYWRkaXIgKHBhdGgsIG9wdGlvbnMsIGNiKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKVxuICAgICAgY2IgPSBvcHRpb25zLCBvcHRpb25zID0gbnVsbFxuXG4gICAgdmFyIGdvJHJlYWRkaXIgPSBub1JlYWRkaXJPcHRpb25WZXJzaW9ucy50ZXN0KHByb2Nlc3MudmVyc2lvbilcbiAgICAgID8gZnVuY3Rpb24gZ28kcmVhZGRpciAocGF0aCwgb3B0aW9ucywgY2IsIHN0YXJ0VGltZSkge1xuICAgICAgICByZXR1cm4gZnMkcmVhZGRpcihwYXRoLCBmcyRyZWFkZGlyQ2FsbGJhY2soXG4gICAgICAgICAgcGF0aCwgb3B0aW9ucywgY2IsIHN0YXJ0VGltZVxuICAgICAgICApKVxuICAgICAgfVxuICAgICAgOiBmdW5jdGlvbiBnbyRyZWFkZGlyIChwYXRoLCBvcHRpb25zLCBjYiwgc3RhcnRUaW1lKSB7XG4gICAgICAgIHJldHVybiBmcyRyZWFkZGlyKHBhdGgsIG9wdGlvbnMsIGZzJHJlYWRkaXJDYWxsYmFjayhcbiAgICAgICAgICBwYXRoLCBvcHRpb25zLCBjYiwgc3RhcnRUaW1lXG4gICAgICAgICkpXG4gICAgICB9XG5cbiAgICByZXR1cm4gZ28kcmVhZGRpcihwYXRoLCBvcHRpb25zLCBjYilcblxuICAgIGZ1bmN0aW9uIGZzJHJlYWRkaXJDYWxsYmFjayAocGF0aCwgb3B0aW9ucywgY2IsIHN0YXJ0VGltZSkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIChlcnIsIGZpbGVzKSB7XG4gICAgICAgIGlmIChlcnIgJiYgKGVyci5jb2RlID09PSAnRU1GSUxFJyB8fCBlcnIuY29kZSA9PT0gJ0VORklMRScpKVxuICAgICAgICAgIGVucXVldWUoW1xuICAgICAgICAgICAgZ28kcmVhZGRpcixcbiAgICAgICAgICAgIFtwYXRoLCBvcHRpb25zLCBjYl0sXG4gICAgICAgICAgICBlcnIsXG4gICAgICAgICAgICBzdGFydFRpbWUgfHwgRGF0ZS5ub3coKSxcbiAgICAgICAgICAgIERhdGUubm93KClcbiAgICAgICAgICBdKVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBpZiAoZmlsZXMgJiYgZmlsZXMuc29ydClcbiAgICAgICAgICAgIGZpbGVzLnNvcnQoKVxuXG4gICAgICAgICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICAgIGNiLmNhbGwodGhpcywgZXJyLCBmaWxlcylcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChwcm9jZXNzLnZlcnNpb24uc3Vic3RyKDAsIDQpID09PSAndjAuOCcpIHtcbiAgICB2YXIgbGVnU3RyZWFtcyA9IGxlZ2FjeShmcylcbiAgICBSZWFkU3RyZWFtID0gbGVnU3RyZWFtcy5SZWFkU3RyZWFtXG4gICAgV3JpdGVTdHJlYW0gPSBsZWdTdHJlYW1zLldyaXRlU3RyZWFtXG4gIH1cblxuICB2YXIgZnMkUmVhZFN0cmVhbSA9IGZzLlJlYWRTdHJlYW1cbiAgaWYgKGZzJFJlYWRTdHJlYW0pIHtcbiAgICBSZWFkU3RyZWFtLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoZnMkUmVhZFN0cmVhbS5wcm90b3R5cGUpXG4gICAgUmVhZFN0cmVhbS5wcm90b3R5cGUub3BlbiA9IFJlYWRTdHJlYW0kb3BlblxuICB9XG5cbiAgdmFyIGZzJFdyaXRlU3RyZWFtID0gZnMuV3JpdGVTdHJlYW1cbiAgaWYgKGZzJFdyaXRlU3RyZWFtKSB7XG4gICAgV3JpdGVTdHJlYW0ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShmcyRXcml0ZVN0cmVhbS5wcm90b3R5cGUpXG4gICAgV3JpdGVTdHJlYW0ucHJvdG90eXBlLm9wZW4gPSBXcml0ZVN0cmVhbSRvcGVuXG4gIH1cblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnMsICdSZWFkU3RyZWFtJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIFJlYWRTdHJlYW1cbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgUmVhZFN0cmVhbSA9IHZhbFxuICAgIH0sXG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSlcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZzLCAnV3JpdGVTdHJlYW0nLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gV3JpdGVTdHJlYW1cbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgV3JpdGVTdHJlYW0gPSB2YWxcbiAgICB9LFxuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0pXG5cbiAgLy8gbGVnYWN5IG5hbWVzXG4gIHZhciBGaWxlUmVhZFN0cmVhbSA9IFJlYWRTdHJlYW1cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZzLCAnRmlsZVJlYWRTdHJlYW0nLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gRmlsZVJlYWRTdHJlYW1cbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgRmlsZVJlYWRTdHJlYW0gPSB2YWxcbiAgICB9LFxuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0pXG4gIHZhciBGaWxlV3JpdGVTdHJlYW0gPSBXcml0ZVN0cmVhbVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnMsICdGaWxlV3JpdGVTdHJlYW0nLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gRmlsZVdyaXRlU3RyZWFtXG4gICAgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgIEZpbGVXcml0ZVN0cmVhbSA9IHZhbFxuICAgIH0sXG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSlcblxuICBmdW5jdGlvbiBSZWFkU3RyZWFtIChwYXRoLCBvcHRpb25zKSB7XG4gICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBSZWFkU3RyZWFtKVxuICAgICAgcmV0dXJuIGZzJFJlYWRTdHJlYW0uYXBwbHkodGhpcywgYXJndW1lbnRzKSwgdGhpc1xuICAgIGVsc2VcbiAgICAgIHJldHVybiBSZWFkU3RyZWFtLmFwcGx5KE9iamVjdC5jcmVhdGUoUmVhZFN0cmVhbS5wcm90b3R5cGUpLCBhcmd1bWVudHMpXG4gIH1cblxuICBmdW5jdGlvbiBSZWFkU3RyZWFtJG9wZW4gKCkge1xuICAgIHZhciB0aGF0ID0gdGhpc1xuICAgIG9wZW4odGhhdC5wYXRoLCB0aGF0LmZsYWdzLCB0aGF0Lm1vZGUsIGZ1bmN0aW9uIChlcnIsIGZkKSB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIGlmICh0aGF0LmF1dG9DbG9zZSlcbiAgICAgICAgICB0aGF0LmRlc3Ryb3koKVxuXG4gICAgICAgIHRoYXQuZW1pdCgnZXJyb3InLCBlcnIpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGF0LmZkID0gZmRcbiAgICAgICAgdGhhdC5lbWl0KCdvcGVuJywgZmQpXG4gICAgICAgIHRoYXQucmVhZCgpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIFdyaXRlU3RyZWFtIChwYXRoLCBvcHRpb25zKSB7XG4gICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBXcml0ZVN0cmVhbSlcbiAgICAgIHJldHVybiBmcyRXcml0ZVN0cmVhbS5hcHBseSh0aGlzLCBhcmd1bWVudHMpLCB0aGlzXG4gICAgZWxzZVxuICAgICAgcmV0dXJuIFdyaXRlU3RyZWFtLmFwcGx5KE9iamVjdC5jcmVhdGUoV3JpdGVTdHJlYW0ucHJvdG90eXBlKSwgYXJndW1lbnRzKVxuICB9XG5cbiAgZnVuY3Rpb24gV3JpdGVTdHJlYW0kb3BlbiAoKSB7XG4gICAgdmFyIHRoYXQgPSB0aGlzXG4gICAgb3Blbih0aGF0LnBhdGgsIHRoYXQuZmxhZ3MsIHRoYXQubW9kZSwgZnVuY3Rpb24gKGVyciwgZmQpIHtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgdGhhdC5kZXN0cm95KClcbiAgICAgICAgdGhhdC5lbWl0KCdlcnJvcicsIGVycilcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoYXQuZmQgPSBmZFxuICAgICAgICB0aGF0LmVtaXQoJ29wZW4nLCBmZClcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlUmVhZFN0cmVhbSAocGF0aCwgb3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgZnMuUmVhZFN0cmVhbShwYXRoLCBvcHRpb25zKVxuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlV3JpdGVTdHJlYW0gKHBhdGgsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IGZzLldyaXRlU3RyZWFtKHBhdGgsIG9wdGlvbnMpXG4gIH1cblxuICB2YXIgZnMkb3BlbiA9IGZzLm9wZW5cbiAgZnMub3BlbiA9IG9wZW5cbiAgZnVuY3Rpb24gb3BlbiAocGF0aCwgZmxhZ3MsIG1vZGUsIGNiKSB7XG4gICAgaWYgKHR5cGVvZiBtb2RlID09PSAnZnVuY3Rpb24nKVxuICAgICAgY2IgPSBtb2RlLCBtb2RlID0gbnVsbFxuXG4gICAgcmV0dXJuIGdvJG9wZW4ocGF0aCwgZmxhZ3MsIG1vZGUsIGNiKVxuXG4gICAgZnVuY3Rpb24gZ28kb3BlbiAocGF0aCwgZmxhZ3MsIG1vZGUsIGNiLCBzdGFydFRpbWUpIHtcbiAgICAgIHJldHVybiBmcyRvcGVuKHBhdGgsIGZsYWdzLCBtb2RlLCBmdW5jdGlvbiAoZXJyLCBmZCkge1xuICAgICAgICBpZiAoZXJyICYmIChlcnIuY29kZSA9PT0gJ0VNRklMRScgfHwgZXJyLmNvZGUgPT09ICdFTkZJTEUnKSlcbiAgICAgICAgICBlbnF1ZXVlKFtnbyRvcGVuLCBbcGF0aCwgZmxhZ3MsIG1vZGUsIGNiXSwgZXJyLCBzdGFydFRpbWUgfHwgRGF0ZS5ub3coKSwgRGF0ZS5ub3coKV0pXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpXG4gICAgICAgICAgICBjYi5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZzXG59XG5cbmZ1bmN0aW9uIGVucXVldWUgKGVsZW0pIHtcbiAgZGVidWcoJ0VOUVVFVUUnLCBlbGVtWzBdLm5hbWUsIGVsZW1bMV0pXG4gIGZzW2dyYWNlZnVsUXVldWVdLnB1c2goZWxlbSlcbiAgcmV0cnkoKVxufVxuXG4vLyBrZWVwIHRyYWNrIG9mIHRoZSB0aW1lb3V0IGJldHdlZW4gcmV0cnkoKSBjYWxsc1xudmFyIHJldHJ5VGltZXJcblxuLy8gcmVzZXQgdGhlIHN0YXJ0VGltZSBhbmQgbGFzdFRpbWUgdG8gbm93XG4vLyB0aGlzIHJlc2V0cyB0aGUgc3RhcnQgb2YgdGhlIDYwIHNlY29uZCBvdmVyYWxsIHRpbWVvdXQgYXMgd2VsbCBhcyB0aGVcbi8vIGRlbGF5IGJldHdlZW4gYXR0ZW1wdHMgc28gdGhhdCB3ZSdsbCByZXRyeSB0aGVzZSBqb2JzIHNvb25lclxuZnVuY3Rpb24gcmVzZXRRdWV1ZSAoKSB7XG4gIHZhciBub3cgPSBEYXRlLm5vdygpXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZnNbZ3JhY2VmdWxRdWV1ZV0ubGVuZ3RoOyArK2kpIHtcbiAgICAvLyBlbnRyaWVzIHRoYXQgYXJlIG9ubHkgYSBsZW5ndGggb2YgMiBhcmUgZnJvbSBhbiBvbGRlciB2ZXJzaW9uLCBkb24ndFxuICAgIC8vIGJvdGhlciBtb2RpZnlpbmcgdGhvc2Ugc2luY2UgdGhleSdsbCBiZSByZXRyaWVkIGFueXdheS5cbiAgICBpZiAoZnNbZ3JhY2VmdWxRdWV1ZV1baV0ubGVuZ3RoID4gMikge1xuICAgICAgZnNbZ3JhY2VmdWxRdWV1ZV1baV1bM10gPSBub3cgLy8gc3RhcnRUaW1lXG4gICAgICBmc1tncmFjZWZ1bFF1ZXVlXVtpXVs0XSA9IG5vdyAvLyBsYXN0VGltZVxuICAgIH1cbiAgfVxuICAvLyBjYWxsIHJldHJ5IHRvIG1ha2Ugc3VyZSB3ZSdyZSBhY3RpdmVseSBwcm9jZXNzaW5nIHRoZSBxdWV1ZVxuICByZXRyeSgpXG59XG5cbmZ1bmN0aW9uIHJldHJ5ICgpIHtcbiAgLy8gY2xlYXIgdGhlIHRpbWVyIGFuZCByZW1vdmUgaXQgdG8gaGVscCBwcmV2ZW50IHVuaW50ZW5kZWQgY29uY3VycmVuY3lcbiAgY2xlYXJUaW1lb3V0KHJldHJ5VGltZXIpXG4gIHJldHJ5VGltZXIgPSB1bmRlZmluZWRcblxuICBpZiAoZnNbZ3JhY2VmdWxRdWV1ZV0ubGVuZ3RoID09PSAwKVxuICAgIHJldHVyblxuXG4gIHZhciBlbGVtID0gZnNbZ3JhY2VmdWxRdWV1ZV0uc2hpZnQoKVxuICB2YXIgZm4gPSBlbGVtWzBdXG4gIHZhciBhcmdzID0gZWxlbVsxXVxuICAvLyB0aGVzZSBpdGVtcyBtYXkgYmUgdW5zZXQgaWYgdGhleSB3ZXJlIGFkZGVkIGJ5IGFuIG9sZGVyIGdyYWNlZnVsLWZzXG4gIHZhciBlcnIgPSBlbGVtWzJdXG4gIHZhciBzdGFydFRpbWUgPSBlbGVtWzNdXG4gIHZhciBsYXN0VGltZSA9IGVsZW1bNF1cblxuICAvLyBpZiB3ZSBkb24ndCBoYXZlIGEgc3RhcnRUaW1lIHdlIGhhdmUgbm8gd2F5IG9mIGtub3dpbmcgaWYgd2UndmUgd2FpdGVkXG4gIC8vIGxvbmcgZW5vdWdoLCBzbyBnbyBhaGVhZCBhbmQgcmV0cnkgdGhpcyBpdGVtIG5vd1xuICBpZiAoc3RhcnRUaW1lID09PSB1bmRlZmluZWQpIHtcbiAgICBkZWJ1ZygnUkVUUlknLCBmbi5uYW1lLCBhcmdzKVxuICAgIGZuLmFwcGx5KG51bGwsIGFyZ3MpXG4gIH0gZWxzZSBpZiAoRGF0ZS5ub3coKSAtIHN0YXJ0VGltZSA+PSA2MDAwMCkge1xuICAgIC8vIGl0J3MgYmVlbiBtb3JlIHRoYW4gNjAgc2Vjb25kcyB0b3RhbCwgYmFpbCBub3dcbiAgICBkZWJ1ZygnVElNRU9VVCcsIGZuLm5hbWUsIGFyZ3MpXG4gICAgdmFyIGNiID0gYXJncy5wb3AoKVxuICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpXG4gICAgICBjYi5jYWxsKG51bGwsIGVycilcbiAgfSBlbHNlIHtcbiAgICAvLyB0aGUgYW1vdW50IG9mIHRpbWUgYmV0d2VlbiB0aGUgbGFzdCBhdHRlbXB0IGFuZCByaWdodCBub3dcbiAgICB2YXIgc2luY2VBdHRlbXB0ID0gRGF0ZS5ub3coKSAtIGxhc3RUaW1lXG4gICAgLy8gdGhlIGFtb3VudCBvZiB0aW1lIGJldHdlZW4gd2hlbiB3ZSBmaXJzdCB0cmllZCwgYW5kIHdoZW4gd2UgbGFzdCB0cmllZFxuICAgIC8vIHJvdW5kZWQgdXAgdG8gYXQgbGVhc3QgMVxuICAgIHZhciBzaW5jZVN0YXJ0ID0gTWF0aC5tYXgobGFzdFRpbWUgLSBzdGFydFRpbWUsIDEpXG4gICAgLy8gYmFja29mZi4gd2FpdCBsb25nZXIgdGhhbiB0aGUgdG90YWwgdGltZSB3ZSd2ZSBiZWVuIHJldHJ5aW5nLCBidXQgb25seVxuICAgIC8vIHVwIHRvIGEgbWF4aW11bSBvZiAxMDBtc1xuICAgIHZhciBkZXNpcmVkRGVsYXkgPSBNYXRoLm1pbihzaW5jZVN0YXJ0ICogMS4yLCAxMDApXG4gICAgLy8gaXQncyBiZWVuIGxvbmcgZW5vdWdoIHNpbmNlIHRoZSBsYXN0IHJldHJ5LCBkbyBpdCBhZ2FpblxuICAgIGlmIChzaW5jZUF0dGVtcHQgPj0gZGVzaXJlZERlbGF5KSB7XG4gICAgICBkZWJ1ZygnUkVUUlknLCBmbi5uYW1lLCBhcmdzKVxuICAgICAgZm4uYXBwbHkobnVsbCwgYXJncy5jb25jYXQoW3N0YXJ0VGltZV0pKVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpZiB3ZSBjYW4ndCBkbyB0aGlzIGpvYiB5ZXQsIHB1c2ggaXQgdG8gdGhlIGVuZCBvZiB0aGUgcXVldWVcbiAgICAgIC8vIGFuZCBsZXQgdGhlIG5leHQgaXRlcmF0aW9uIGNoZWNrIGFnYWluXG4gICAgICBmc1tncmFjZWZ1bFF1ZXVlXS5wdXNoKGVsZW0pXG4gICAgfVxuICB9XG5cbiAgLy8gc2NoZWR1bGUgb3VyIG5leHQgcnVuIGlmIG9uZSBpc24ndCBhbHJlYWR5IHNjaGVkdWxlZFxuICBpZiAocmV0cnlUaW1lciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0cnlUaW1lciA9IHNldFRpbWVvdXQocmV0cnksIDApXG4gIH1cbn1cbiIsICIndXNlIHN0cmljdCdcbi8vIFRoaXMgaXMgYWRhcHRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9ub3JtYWxpemUvbXpcbi8vIENvcHlyaWdodCAoYykgMjAxNC0yMDE2IEpvbmF0aGFuIE9uZyBtZUBqb25nbGViZXJyeS5jb20gYW5kIENvbnRyaWJ1dG9yc1xuY29uc3QgdSA9IHJlcXVpcmUoJ3VuaXZlcnNhbGlmeScpLmZyb21DYWxsYmFja1xuY29uc3QgZnMgPSByZXF1aXJlKCdncmFjZWZ1bC1mcycpXG5cbmNvbnN0IGFwaSA9IFtcbiAgJ2FjY2VzcycsXG4gICdhcHBlbmRGaWxlJyxcbiAgJ2NobW9kJyxcbiAgJ2Nob3duJyxcbiAgJ2Nsb3NlJyxcbiAgJ2NvcHlGaWxlJyxcbiAgJ2ZjaG1vZCcsXG4gICdmY2hvd24nLFxuICAnZmRhdGFzeW5jJyxcbiAgJ2ZzdGF0JyxcbiAgJ2ZzeW5jJyxcbiAgJ2Z0cnVuY2F0ZScsXG4gICdmdXRpbWVzJyxcbiAgJ2xjaG1vZCcsXG4gICdsY2hvd24nLFxuICAnbGluaycsXG4gICdsc3RhdCcsXG4gICdta2RpcicsXG4gICdta2R0ZW1wJyxcbiAgJ29wZW4nLFxuICAnb3BlbmRpcicsXG4gICdyZWFkZGlyJyxcbiAgJ3JlYWRGaWxlJyxcbiAgJ3JlYWRsaW5rJyxcbiAgJ3JlYWxwYXRoJyxcbiAgJ3JlbmFtZScsXG4gICdybScsXG4gICdybWRpcicsXG4gICdzdGF0JyxcbiAgJ3N5bWxpbmsnLFxuICAndHJ1bmNhdGUnLFxuICAndW5saW5rJyxcbiAgJ3V0aW1lcycsXG4gICd3cml0ZUZpbGUnXG5dLmZpbHRlcihrZXkgPT4ge1xuICAvLyBTb21lIGNvbW1hbmRzIGFyZSBub3QgYXZhaWxhYmxlIG9uIHNvbWUgc3lzdGVtcy4gRXg6XG4gIC8vIGZzLm9wZW5kaXIgd2FzIGFkZGVkIGluIE5vZGUuanMgdjEyLjEyLjBcbiAgLy8gZnMucm0gd2FzIGFkZGVkIGluIE5vZGUuanMgdjE0LjE0LjBcbiAgLy8gZnMubGNob3duIGlzIG5vdCBhdmFpbGFibGUgb24gYXQgbGVhc3Qgc29tZSBMaW51eFxuICByZXR1cm4gdHlwZW9mIGZzW2tleV0gPT09ICdmdW5jdGlvbidcbn0pXG5cbi8vIEV4cG9ydCBhbGwga2V5czpcbk9iamVjdC5rZXlzKGZzKS5mb3JFYWNoKGtleSA9PiB7XG4gIGlmIChrZXkgPT09ICdwcm9taXNlcycpIHtcbiAgICAvLyBmcy5wcm9taXNlcyBpcyBhIGdldHRlciBwcm9wZXJ0eSB0aGF0IHRyaWdnZXJzIEV4cGVyaW1lbnRhbFdhcm5pbmdcbiAgICAvLyBEb24ndCByZS1leHBvcnQgaXQgaGVyZSwgdGhlIGdldHRlciBpcyBkZWZpbmVkIGluIFwibGliL2luZGV4LmpzXCJcbiAgICByZXR1cm5cbiAgfVxuICBleHBvcnRzW2tleV0gPSBmc1trZXldXG59KVxuXG4vLyBVbml2ZXJzYWxpZnkgYXN5bmMgbWV0aG9kczpcbmFwaS5mb3JFYWNoKG1ldGhvZCA9PiB7XG4gIGV4cG9ydHNbbWV0aG9kXSA9IHUoZnNbbWV0aG9kXSlcbn0pXG5cbi8vIFdlIGRpZmZlciBmcm9tIG16L2ZzIGluIHRoYXQgd2Ugc3RpbGwgc2hpcCB0aGUgb2xkLCBicm9rZW4sIGZzLmV4aXN0cygpXG4vLyBzaW5jZSB3ZSBhcmUgYSBkcm9wLWluIHJlcGxhY2VtZW50IGZvciB0aGUgbmF0aXZlIG1vZHVsZVxuZXhwb3J0cy5leGlzdHMgPSBmdW5jdGlvbiAoZmlsZW5hbWUsIGNhbGxiYWNrKSB7XG4gIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZnMuZXhpc3RzKGZpbGVuYW1lLCBjYWxsYmFjaylcbiAgfVxuICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgcmV0dXJuIGZzLmV4aXN0cyhmaWxlbmFtZSwgcmVzb2x2ZSlcbiAgfSlcbn1cblxuLy8gZnMucmVhZCgpLCBmcy53cml0ZSgpLCAmIGZzLndyaXRldigpIG5lZWQgc3BlY2lhbCB0cmVhdG1lbnQgZHVlIHRvIG11bHRpcGxlIGNhbGxiYWNrIGFyZ3NcblxuZXhwb3J0cy5yZWFkID0gZnVuY3Rpb24gKGZkLCBidWZmZXIsIG9mZnNldCwgbGVuZ3RoLCBwb3NpdGlvbiwgY2FsbGJhY2spIHtcbiAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBmcy5yZWFkKGZkLCBidWZmZXIsIG9mZnNldCwgbGVuZ3RoLCBwb3NpdGlvbiwgY2FsbGJhY2spXG4gIH1cbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBmcy5yZWFkKGZkLCBidWZmZXIsIG9mZnNldCwgbGVuZ3RoLCBwb3NpdGlvbiwgKGVyciwgYnl0ZXNSZWFkLCBidWZmZXIpID0+IHtcbiAgICAgIGlmIChlcnIpIHJldHVybiByZWplY3QoZXJyKVxuICAgICAgcmVzb2x2ZSh7IGJ5dGVzUmVhZCwgYnVmZmVyIH0pXG4gICAgfSlcbiAgfSlcbn1cblxuLy8gRnVuY3Rpb24gc2lnbmF0dXJlIGNhbiBiZVxuLy8gZnMud3JpdGUoZmQsIGJ1ZmZlclssIG9mZnNldFssIGxlbmd0aFssIHBvc2l0aW9uXV1dLCBjYWxsYmFjaylcbi8vIE9SXG4vLyBmcy53cml0ZShmZCwgc3RyaW5nWywgcG9zaXRpb25bLCBlbmNvZGluZ11dLCBjYWxsYmFjaylcbi8vIFdlIG5lZWQgdG8gaGFuZGxlIGJvdGggY2FzZXMsIHNvIHdlIHVzZSAuLi5hcmdzXG5leHBvcnRzLndyaXRlID0gZnVuY3Rpb24gKGZkLCBidWZmZXIsIC4uLmFyZ3MpIHtcbiAgaWYgKHR5cGVvZiBhcmdzW2FyZ3MubGVuZ3RoIC0gMV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZnMud3JpdGUoZmQsIGJ1ZmZlciwgLi4uYXJncylcbiAgfVxuXG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgZnMud3JpdGUoZmQsIGJ1ZmZlciwgLi4uYXJncywgKGVyciwgYnl0ZXNXcml0dGVuLCBidWZmZXIpID0+IHtcbiAgICAgIGlmIChlcnIpIHJldHVybiByZWplY3QoZXJyKVxuICAgICAgcmVzb2x2ZSh7IGJ5dGVzV3JpdHRlbiwgYnVmZmVyIH0pXG4gICAgfSlcbiAgfSlcbn1cblxuLy8gZnMud3JpdGV2IG9ubHkgYXZhaWxhYmxlIGluIE5vZGUgdjEyLjkuMCtcbmlmICh0eXBlb2YgZnMud3JpdGV2ID09PSAnZnVuY3Rpb24nKSB7XG4gIC8vIEZ1bmN0aW9uIHNpZ25hdHVyZSBpc1xuICAvLyBzLndyaXRldihmZCwgYnVmZmVyc1ssIHBvc2l0aW9uXSwgY2FsbGJhY2spXG4gIC8vIFdlIG5lZWQgdG8gaGFuZGxlIHRoZSBvcHRpb25hbCBhcmcsIHNvIHdlIHVzZSAuLi5hcmdzXG4gIGV4cG9ydHMud3JpdGV2ID0gZnVuY3Rpb24gKGZkLCBidWZmZXJzLCAuLi5hcmdzKSB7XG4gICAgaWYgKHR5cGVvZiBhcmdzW2FyZ3MubGVuZ3RoIC0gMV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBmcy53cml0ZXYoZmQsIGJ1ZmZlcnMsIC4uLmFyZ3MpXG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGZzLndyaXRldihmZCwgYnVmZmVycywgLi4uYXJncywgKGVyciwgYnl0ZXNXcml0dGVuLCBidWZmZXJzKSA9PiB7XG4gICAgICAgIGlmIChlcnIpIHJldHVybiByZWplY3QoZXJyKVxuICAgICAgICByZXNvbHZlKHsgYnl0ZXNXcml0dGVuLCBidWZmZXJzIH0pXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cblxuLy8gZnMucmVhbHBhdGgubmF0aXZlIG9ubHkgYXZhaWxhYmxlIGluIE5vZGUgdjkuMitcbmlmICh0eXBlb2YgZnMucmVhbHBhdGgubmF0aXZlID09PSAnZnVuY3Rpb24nKSB7XG4gIGV4cG9ydHMucmVhbHBhdGgubmF0aXZlID0gdShmcy5yZWFscGF0aC5uYXRpdmUpXG59XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByID0+IHtcbiAgY29uc3QgbiA9IHByb2Nlc3MudmVyc2lvbnMubm9kZS5zcGxpdCgnLicpLm1hcCh4ID0+IHBhcnNlSW50KHgsIDEwKSlcbiAgciA9IHIuc3BsaXQoJy4nKS5tYXAoeCA9PiBwYXJzZUludCh4LCAxMCkpXG4gIHJldHVybiBuWzBdID4gclswXSB8fCAoblswXSA9PT0gclswXSAmJiAoblsxXSA+IHJbMV0gfHwgKG5bMV0gPT09IHJbMV0gJiYgblsyXSA+PSByWzJdKSkpXG59XG4iLCAiLy8gQWRhcHRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5kcmVzb3JodXMvbWFrZS1kaXJcbi8vIENvcHlyaWdodCAoYykgU2luZHJlIFNvcmh1cyA8c2luZHJlc29yaHVzQGdtYWlsLmNvbT4gKHNpbmRyZXNvcmh1cy5jb20pXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbid1c2Ugc3RyaWN0J1xuY29uc3QgZnMgPSByZXF1aXJlKCcuLi9mcycpXG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpXG5jb25zdCBhdExlYXN0Tm9kZSA9IHJlcXVpcmUoJ2F0LWxlYXN0LW5vZGUnKVxuXG5jb25zdCB1c2VOYXRpdmVSZWN1cnNpdmVPcHRpb24gPSBhdExlYXN0Tm9kZSgnMTAuMTIuMCcpXG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9pc3N1ZXMvODk4N1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL2xpYnV2L2xpYnV2L3B1bGwvMTA4OFxuY29uc3QgY2hlY2tQYXRoID0gcHRoID0+IHtcbiAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicpIHtcbiAgICBjb25zdCBwYXRoSGFzSW52YWxpZFdpbkNoYXJhY3RlcnMgPSAvWzw+OlwifD8qXS8udGVzdChwdGgucmVwbGFjZShwYXRoLnBhcnNlKHB0aCkucm9vdCwgJycpKVxuXG4gICAgaWYgKHBhdGhIYXNJbnZhbGlkV2luQ2hhcmFjdGVycykge1xuICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoYFBhdGggY29udGFpbnMgaW52YWxpZCBjaGFyYWN0ZXJzOiAke3B0aH1gKVxuICAgICAgZXJyb3IuY29kZSA9ICdFSU5WQUwnXG4gICAgICB0aHJvdyBlcnJvclxuICAgIH1cbiAgfVxufVxuXG5jb25zdCBwcm9jZXNzT3B0aW9ucyA9IG9wdGlvbnMgPT4ge1xuICBjb25zdCBkZWZhdWx0cyA9IHsgbW9kZTogMG83NzcgfVxuICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdudW1iZXInKSBvcHRpb25zID0geyBtb2RlOiBvcHRpb25zIH1cbiAgcmV0dXJuIHsgLi4uZGVmYXVsdHMsIC4uLm9wdGlvbnMgfVxufVxuXG5jb25zdCBwZXJtaXNzaW9uRXJyb3IgPSBwdGggPT4ge1xuICAvLyBUaGlzIHJlcGxpY2F0ZXMgdGhlIGV4Y2VwdGlvbiBvZiBgZnMubWtkaXJgIHdpdGggbmF0aXZlIHRoZVxuICAvLyBgcmVjdXNpdmVgIG9wdGlvbiB3aGVuIHJ1biBvbiBhbiBpbnZhbGlkIGRyaXZlIHVuZGVyIFdpbmRvd3MuXG4gIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKGBvcGVyYXRpb24gbm90IHBlcm1pdHRlZCwgbWtkaXIgJyR7cHRofSdgKVxuICBlcnJvci5jb2RlID0gJ0VQRVJNJ1xuICBlcnJvci5lcnJubyA9IC00MDQ4XG4gIGVycm9yLnBhdGggPSBwdGhcbiAgZXJyb3Iuc3lzY2FsbCA9ICdta2RpcidcbiAgcmV0dXJuIGVycm9yXG59XG5cbm1vZHVsZS5leHBvcnRzLm1ha2VEaXIgPSBhc3luYyAoaW5wdXQsIG9wdGlvbnMpID0+IHtcbiAgY2hlY2tQYXRoKGlucHV0KVxuICBvcHRpb25zID0gcHJvY2Vzc09wdGlvbnMob3B0aW9ucylcblxuICBpZiAodXNlTmF0aXZlUmVjdXJzaXZlT3B0aW9uKSB7XG4gICAgY29uc3QgcHRoID0gcGF0aC5yZXNvbHZlKGlucHV0KVxuXG4gICAgcmV0dXJuIGZzLm1rZGlyKHB0aCwge1xuICAgICAgbW9kZTogb3B0aW9ucy5tb2RlLFxuICAgICAgcmVjdXJzaXZlOiB0cnVlXG4gICAgfSlcbiAgfVxuXG4gIGNvbnN0IG1ha2UgPSBhc3luYyBwdGggPT4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBmcy5ta2RpcihwdGgsIG9wdGlvbnMubW9kZSlcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKGVycm9yLmNvZGUgPT09ICdFUEVSTScpIHtcbiAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgIH1cblxuICAgICAgaWYgKGVycm9yLmNvZGUgPT09ICdFTk9FTlQnKSB7XG4gICAgICAgIGlmIChwYXRoLmRpcm5hbWUocHRoKSA9PT0gcHRoKSB7XG4gICAgICAgICAgdGhyb3cgcGVybWlzc2lvbkVycm9yKHB0aClcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlcnJvci5tZXNzYWdlLmluY2x1ZGVzKCdudWxsIGJ5dGVzJykpIHtcbiAgICAgICAgICB0aHJvdyBlcnJvclxuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgbWFrZShwYXRoLmRpcm5hbWUocHRoKSlcbiAgICAgICAgcmV0dXJuIG1ha2UocHRoKVxuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBzdGF0cyA9IGF3YWl0IGZzLnN0YXQocHRoKVxuICAgICAgICBpZiAoIXN0YXRzLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgICAgICAvLyBUaGlzIGVycm9yIGlzIG5ldmVyIGV4cG9zZWQgdG8gdGhlIHVzZXJcbiAgICAgICAgICAvLyBpdCBpcyBjYXVnaHQgYmVsb3csIGFuZCB0aGUgb3JpZ2luYWwgZXJyb3IgaXMgdGhyb3duXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgcGF0aCBpcyBub3QgYSBkaXJlY3RvcnknKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbWFrZShwYXRoLnJlc29sdmUoaW5wdXQpKVxufVxuXG5tb2R1bGUuZXhwb3J0cy5tYWtlRGlyU3luYyA9IChpbnB1dCwgb3B0aW9ucykgPT4ge1xuICBjaGVja1BhdGgoaW5wdXQpXG4gIG9wdGlvbnMgPSBwcm9jZXNzT3B0aW9ucyhvcHRpb25zKVxuXG4gIGlmICh1c2VOYXRpdmVSZWN1cnNpdmVPcHRpb24pIHtcbiAgICBjb25zdCBwdGggPSBwYXRoLnJlc29sdmUoaW5wdXQpXG5cbiAgICByZXR1cm4gZnMubWtkaXJTeW5jKHB0aCwge1xuICAgICAgbW9kZTogb3B0aW9ucy5tb2RlLFxuICAgICAgcmVjdXJzaXZlOiB0cnVlXG4gICAgfSlcbiAgfVxuXG4gIGNvbnN0IG1ha2UgPSBwdGggPT4ge1xuICAgIHRyeSB7XG4gICAgICBmcy5ta2RpclN5bmMocHRoLCBvcHRpb25zLm1vZGUpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChlcnJvci5jb2RlID09PSAnRVBFUk0nKSB7XG4gICAgICAgIHRocm93IGVycm9yXG4gICAgICB9XG5cbiAgICAgIGlmIChlcnJvci5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgICBpZiAocGF0aC5kaXJuYW1lKHB0aCkgPT09IHB0aCkge1xuICAgICAgICAgIHRocm93IHBlcm1pc3Npb25FcnJvcihwdGgpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXJyb3IubWVzc2FnZS5pbmNsdWRlcygnbnVsbCBieXRlcycpKSB7XG4gICAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgICAgfVxuXG4gICAgICAgIG1ha2UocGF0aC5kaXJuYW1lKHB0aCkpXG4gICAgICAgIHJldHVybiBtYWtlKHB0aClcbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKCFmcy5zdGF0U3luYyhwdGgpLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgICAgICAvLyBUaGlzIGVycm9yIGlzIG5ldmVyIGV4cG9zZWQgdG8gdGhlIHVzZXJcbiAgICAgICAgICAvLyBpdCBpcyBjYXVnaHQgYmVsb3csIGFuZCB0aGUgb3JpZ2luYWwgZXJyb3IgaXMgdGhyb3duXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgcGF0aCBpcyBub3QgYSBkaXJlY3RvcnknKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbWFrZShwYXRoLnJlc29sdmUoaW5wdXQpKVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuY29uc3QgdSA9IHJlcXVpcmUoJ3VuaXZlcnNhbGlmeScpLmZyb21Qcm9taXNlXG5jb25zdCB7IG1ha2VEaXI6IF9tYWtlRGlyLCBtYWtlRGlyU3luYyB9ID0gcmVxdWlyZSgnLi9tYWtlLWRpcicpXG5jb25zdCBtYWtlRGlyID0gdShfbWFrZURpcilcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG1rZGlyczogbWFrZURpcixcbiAgbWtkaXJzU3luYzogbWFrZURpclN5bmMsXG4gIC8vIGFsaWFzXG4gIG1rZGlycDogbWFrZURpcixcbiAgbWtkaXJwU3luYzogbWFrZURpclN5bmMsXG4gIGVuc3VyZURpcjogbWFrZURpcixcbiAgZW5zdXJlRGlyU3luYzogbWFrZURpclN5bmNcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgZnMgPSByZXF1aXJlKCdncmFjZWZ1bC1mcycpXG5cbmZ1bmN0aW9uIHV0aW1lc01pbGxpcyAocGF0aCwgYXRpbWUsIG10aW1lLCBjYWxsYmFjaykge1xuICAvLyBpZiAoIUhBU19NSUxMSVNfUkVTKSByZXR1cm4gZnMudXRpbWVzKHBhdGgsIGF0aW1lLCBtdGltZSwgY2FsbGJhY2spXG4gIGZzLm9wZW4ocGF0aCwgJ3IrJywgKGVyciwgZmQpID0+IHtcbiAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKVxuICAgIGZzLmZ1dGltZXMoZmQsIGF0aW1lLCBtdGltZSwgZnV0aW1lc0VyciA9PiB7XG4gICAgICBmcy5jbG9zZShmZCwgY2xvc2VFcnIgPT4ge1xuICAgICAgICBpZiAoY2FsbGJhY2spIGNhbGxiYWNrKGZ1dGltZXNFcnIgfHwgY2xvc2VFcnIpXG4gICAgICB9KVxuICAgIH0pXG4gIH0pXG59XG5cbmZ1bmN0aW9uIHV0aW1lc01pbGxpc1N5bmMgKHBhdGgsIGF0aW1lLCBtdGltZSkge1xuICBjb25zdCBmZCA9IGZzLm9wZW5TeW5jKHBhdGgsICdyKycpXG4gIGZzLmZ1dGltZXNTeW5jKGZkLCBhdGltZSwgbXRpbWUpXG4gIHJldHVybiBmcy5jbG9zZVN5bmMoZmQpXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICB1dGltZXNNaWxsaXMsXG4gIHV0aW1lc01pbGxpc1N5bmNcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgZnMgPSByZXF1aXJlKCcuLi9mcycpXG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgndXRpbCcpXG5jb25zdCBhdExlYXN0Tm9kZSA9IHJlcXVpcmUoJ2F0LWxlYXN0LW5vZGUnKVxuXG5jb25zdCBub2RlU3VwcG9ydHNCaWdJbnQgPSBhdExlYXN0Tm9kZSgnMTAuNS4wJylcbmNvbnN0IHN0YXQgPSAoZmlsZSkgPT4gbm9kZVN1cHBvcnRzQmlnSW50ID8gZnMuc3RhdChmaWxlLCB7IGJpZ2ludDogdHJ1ZSB9KSA6IGZzLnN0YXQoZmlsZSlcbmNvbnN0IHN0YXRTeW5jID0gKGZpbGUpID0+IG5vZGVTdXBwb3J0c0JpZ0ludCA/IGZzLnN0YXRTeW5jKGZpbGUsIHsgYmlnaW50OiB0cnVlIH0pIDogZnMuc3RhdFN5bmMoZmlsZSlcblxuZnVuY3Rpb24gZ2V0U3RhdHMgKHNyYywgZGVzdCkge1xuICByZXR1cm4gUHJvbWlzZS5hbGwoW1xuICAgIHN0YXQoc3JjKSxcbiAgICBzdGF0KGRlc3QpLmNhdGNoKGVyciA9PiB7XG4gICAgICBpZiAoZXJyLmNvZGUgPT09ICdFTk9FTlQnKSByZXR1cm4gbnVsbFxuICAgICAgdGhyb3cgZXJyXG4gICAgfSlcbiAgXSkudGhlbigoW3NyY1N0YXQsIGRlc3RTdGF0XSkgPT4gKHsgc3JjU3RhdCwgZGVzdFN0YXQgfSkpXG59XG5cbmZ1bmN0aW9uIGdldFN0YXRzU3luYyAoc3JjLCBkZXN0KSB7XG4gIGxldCBkZXN0U3RhdFxuICBjb25zdCBzcmNTdGF0ID0gc3RhdFN5bmMoc3JjKVxuICB0cnkge1xuICAgIGRlc3RTdGF0ID0gc3RhdFN5bmMoZGVzdClcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKGVyci5jb2RlID09PSAnRU5PRU5UJykgcmV0dXJuIHsgc3JjU3RhdCwgZGVzdFN0YXQ6IG51bGwgfVxuICAgIHRocm93IGVyclxuICB9XG4gIHJldHVybiB7IHNyY1N0YXQsIGRlc3RTdGF0IH1cbn1cblxuZnVuY3Rpb24gY2hlY2tQYXRocyAoc3JjLCBkZXN0LCBmdW5jTmFtZSwgY2IpIHtcbiAgdXRpbC5jYWxsYmFja2lmeShnZXRTdGF0cykoc3JjLCBkZXN0LCAoZXJyLCBzdGF0cykgPT4ge1xuICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgY29uc3QgeyBzcmNTdGF0LCBkZXN0U3RhdCB9ID0gc3RhdHNcbiAgICBpZiAoZGVzdFN0YXQgJiYgYXJlSWRlbnRpY2FsKHNyY1N0YXQsIGRlc3RTdGF0KSkge1xuICAgICAgcmV0dXJuIGNiKG5ldyBFcnJvcignU291cmNlIGFuZCBkZXN0aW5hdGlvbiBtdXN0IG5vdCBiZSB0aGUgc2FtZS4nKSlcbiAgICB9XG4gICAgaWYgKHNyY1N0YXQuaXNEaXJlY3RvcnkoKSAmJiBpc1NyY1N1YmRpcihzcmMsIGRlc3QpKSB7XG4gICAgICByZXR1cm4gY2IobmV3IEVycm9yKGVyck1zZyhzcmMsIGRlc3QsIGZ1bmNOYW1lKSkpXG4gICAgfVxuICAgIHJldHVybiBjYihudWxsLCB7IHNyY1N0YXQsIGRlc3RTdGF0IH0pXG4gIH0pXG59XG5cbmZ1bmN0aW9uIGNoZWNrUGF0aHNTeW5jIChzcmMsIGRlc3QsIGZ1bmNOYW1lKSB7XG4gIGNvbnN0IHsgc3JjU3RhdCwgZGVzdFN0YXQgfSA9IGdldFN0YXRzU3luYyhzcmMsIGRlc3QpXG4gIGlmIChkZXN0U3RhdCAmJiBhcmVJZGVudGljYWwoc3JjU3RhdCwgZGVzdFN0YXQpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdTb3VyY2UgYW5kIGRlc3RpbmF0aW9uIG11c3Qgbm90IGJlIHRoZSBzYW1lLicpXG4gIH1cbiAgaWYgKHNyY1N0YXQuaXNEaXJlY3RvcnkoKSAmJiBpc1NyY1N1YmRpcihzcmMsIGRlc3QpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGVyck1zZyhzcmMsIGRlc3QsIGZ1bmNOYW1lKSlcbiAgfVxuICByZXR1cm4geyBzcmNTdGF0LCBkZXN0U3RhdCB9XG59XG5cbi8vIHJlY3Vyc2l2ZWx5IGNoZWNrIGlmIGRlc3QgcGFyZW50IGlzIGEgc3ViZGlyZWN0b3J5IG9mIHNyYy5cbi8vIEl0IHdvcmtzIGZvciBhbGwgZmlsZSB0eXBlcyBpbmNsdWRpbmcgc3ltbGlua3Mgc2luY2UgaXRcbi8vIGNoZWNrcyB0aGUgc3JjIGFuZCBkZXN0IGlub2Rlcy4gSXQgc3RhcnRzIGZyb20gdGhlIGRlZXBlc3Rcbi8vIHBhcmVudCBhbmQgc3RvcHMgb25jZSBpdCByZWFjaGVzIHRoZSBzcmMgcGFyZW50IG9yIHRoZSByb290IHBhdGguXG5mdW5jdGlvbiBjaGVja1BhcmVudFBhdGhzIChzcmMsIHNyY1N0YXQsIGRlc3QsIGZ1bmNOYW1lLCBjYikge1xuICBjb25zdCBzcmNQYXJlbnQgPSBwYXRoLnJlc29sdmUocGF0aC5kaXJuYW1lKHNyYykpXG4gIGNvbnN0IGRlc3RQYXJlbnQgPSBwYXRoLnJlc29sdmUocGF0aC5kaXJuYW1lKGRlc3QpKVxuICBpZiAoZGVzdFBhcmVudCA9PT0gc3JjUGFyZW50IHx8IGRlc3RQYXJlbnQgPT09IHBhdGgucGFyc2UoZGVzdFBhcmVudCkucm9vdCkgcmV0dXJuIGNiKClcbiAgY29uc3QgY2FsbGJhY2sgPSAoZXJyLCBkZXN0U3RhdCkgPT4ge1xuICAgIGlmIChlcnIpIHtcbiAgICAgIGlmIChlcnIuY29kZSA9PT0gJ0VOT0VOVCcpIHJldHVybiBjYigpXG4gICAgICByZXR1cm4gY2IoZXJyKVxuICAgIH1cbiAgICBpZiAoYXJlSWRlbnRpY2FsKHNyY1N0YXQsIGRlc3RTdGF0KSkge1xuICAgICAgcmV0dXJuIGNiKG5ldyBFcnJvcihlcnJNc2coc3JjLCBkZXN0LCBmdW5jTmFtZSkpKVxuICAgIH1cbiAgICByZXR1cm4gY2hlY2tQYXJlbnRQYXRocyhzcmMsIHNyY1N0YXQsIGRlc3RQYXJlbnQsIGZ1bmNOYW1lLCBjYilcbiAgfVxuICBpZiAobm9kZVN1cHBvcnRzQmlnSW50KSBmcy5zdGF0KGRlc3RQYXJlbnQsIHsgYmlnaW50OiB0cnVlIH0sIGNhbGxiYWNrKVxuICBlbHNlIGZzLnN0YXQoZGVzdFBhcmVudCwgY2FsbGJhY2spXG59XG5cbmZ1bmN0aW9uIGNoZWNrUGFyZW50UGF0aHNTeW5jIChzcmMsIHNyY1N0YXQsIGRlc3QsIGZ1bmNOYW1lKSB7XG4gIGNvbnN0IHNyY1BhcmVudCA9IHBhdGgucmVzb2x2ZShwYXRoLmRpcm5hbWUoc3JjKSlcbiAgY29uc3QgZGVzdFBhcmVudCA9IHBhdGgucmVzb2x2ZShwYXRoLmRpcm5hbWUoZGVzdCkpXG4gIGlmIChkZXN0UGFyZW50ID09PSBzcmNQYXJlbnQgfHwgZGVzdFBhcmVudCA9PT0gcGF0aC5wYXJzZShkZXN0UGFyZW50KS5yb290KSByZXR1cm5cbiAgbGV0IGRlc3RTdGF0XG4gIHRyeSB7XG4gICAgZGVzdFN0YXQgPSBzdGF0U3luYyhkZXN0UGFyZW50KVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAoZXJyLmNvZGUgPT09ICdFTk9FTlQnKSByZXR1cm5cbiAgICB0aHJvdyBlcnJcbiAgfVxuICBpZiAoYXJlSWRlbnRpY2FsKHNyY1N0YXQsIGRlc3RTdGF0KSkge1xuICAgIHRocm93IG5ldyBFcnJvcihlcnJNc2coc3JjLCBkZXN0LCBmdW5jTmFtZSkpXG4gIH1cbiAgcmV0dXJuIGNoZWNrUGFyZW50UGF0aHNTeW5jKHNyYywgc3JjU3RhdCwgZGVzdFBhcmVudCwgZnVuY05hbWUpXG59XG5cbmZ1bmN0aW9uIGFyZUlkZW50aWNhbCAoc3JjU3RhdCwgZGVzdFN0YXQpIHtcbiAgaWYgKGRlc3RTdGF0LmlubyAmJiBkZXN0U3RhdC5kZXYgJiYgZGVzdFN0YXQuaW5vID09PSBzcmNTdGF0LmlubyAmJiBkZXN0U3RhdC5kZXYgPT09IHNyY1N0YXQuZGV2KSB7XG4gICAgaWYgKG5vZGVTdXBwb3J0c0JpZ0ludCB8fCBkZXN0U3RhdC5pbm8gPCBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikge1xuICAgICAgLy8gZGVmaW5pdGl2ZSBhbnN3ZXJcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIC8vIFVzZSBhZGRpdGlvbmFsIGhldXJpc3RpY3MgaWYgd2UgY2FuJ3QgdXNlICdiaWdpbnQnLlxuICAgIC8vIERpZmZlcmVudCAnaW5vJyBjb3VsZCBiZSByZXByZXNlbnRlZCB0aGUgc2FtZSBpZiB0aGV5IGFyZSA+PSBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUlxuICAgIC8vIFNlZSBpc3N1ZSA2NTdcbiAgICBpZiAoZGVzdFN0YXQuc2l6ZSA9PT0gc3JjU3RhdC5zaXplICYmXG4gICAgICAgIGRlc3RTdGF0Lm1vZGUgPT09IHNyY1N0YXQubW9kZSAmJlxuICAgICAgICBkZXN0U3RhdC5ubGluayA9PT0gc3JjU3RhdC5ubGluayAmJlxuICAgICAgICBkZXN0U3RhdC5hdGltZU1zID09PSBzcmNTdGF0LmF0aW1lTXMgJiZcbiAgICAgICAgZGVzdFN0YXQubXRpbWVNcyA9PT0gc3JjU3RhdC5tdGltZU1zICYmXG4gICAgICAgIGRlc3RTdGF0LmN0aW1lTXMgPT09IHNyY1N0YXQuY3RpbWVNcyAmJlxuICAgICAgICBkZXN0U3RhdC5iaXJ0aHRpbWVNcyA9PT0gc3JjU3RhdC5iaXJ0aHRpbWVNcykge1xuICAgICAgLy8gaGV1cmlzdGljIGFuc3dlclxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG5cbi8vIHJldHVybiB0cnVlIGlmIGRlc3QgaXMgYSBzdWJkaXIgb2Ygc3JjLCBvdGhlcndpc2UgZmFsc2UuXG4vLyBJdCBvbmx5IGNoZWNrcyB0aGUgcGF0aCBzdHJpbmdzLlxuZnVuY3Rpb24gaXNTcmNTdWJkaXIgKHNyYywgZGVzdCkge1xuICBjb25zdCBzcmNBcnIgPSBwYXRoLnJlc29sdmUoc3JjKS5zcGxpdChwYXRoLnNlcCkuZmlsdGVyKGkgPT4gaSlcbiAgY29uc3QgZGVzdEFyciA9IHBhdGgucmVzb2x2ZShkZXN0KS5zcGxpdChwYXRoLnNlcCkuZmlsdGVyKGkgPT4gaSlcbiAgcmV0dXJuIHNyY0Fyci5yZWR1Y2UoKGFjYywgY3VyLCBpKSA9PiBhY2MgJiYgZGVzdEFycltpXSA9PT0gY3VyLCB0cnVlKVxufVxuXG5mdW5jdGlvbiBlcnJNc2cgKHNyYywgZGVzdCwgZnVuY05hbWUpIHtcbiAgcmV0dXJuIGBDYW5ub3QgJHtmdW5jTmFtZX0gJyR7c3JjfScgdG8gYSBzdWJkaXJlY3Rvcnkgb2YgaXRzZWxmLCAnJHtkZXN0fScuYFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgY2hlY2tQYXRocyxcbiAgY2hlY2tQYXRoc1N5bmMsXG4gIGNoZWNrUGFyZW50UGF0aHMsXG4gIGNoZWNrUGFyZW50UGF0aHNTeW5jLFxuICBpc1NyY1N1YmRpclxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBmcyA9IHJlcXVpcmUoJ2dyYWNlZnVsLWZzJylcbmNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJylcbmNvbnN0IG1rZGlyc1N5bmMgPSByZXF1aXJlKCcuLi9ta2RpcnMnKS5ta2RpcnNTeW5jXG5jb25zdCB1dGltZXNNaWxsaXNTeW5jID0gcmVxdWlyZSgnLi4vdXRpbC91dGltZXMnKS51dGltZXNNaWxsaXNTeW5jXG5jb25zdCBzdGF0ID0gcmVxdWlyZSgnLi4vdXRpbC9zdGF0JylcblxuZnVuY3Rpb24gY29weVN5bmMgKHNyYywgZGVzdCwgb3B0cykge1xuICBpZiAodHlwZW9mIG9wdHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBvcHRzID0geyBmaWx0ZXI6IG9wdHMgfVxuICB9XG5cbiAgb3B0cyA9IG9wdHMgfHwge31cbiAgb3B0cy5jbG9iYmVyID0gJ2Nsb2JiZXInIGluIG9wdHMgPyAhIW9wdHMuY2xvYmJlciA6IHRydWUgLy8gZGVmYXVsdCB0byB0cnVlIGZvciBub3dcbiAgb3B0cy5vdmVyd3JpdGUgPSAnb3ZlcndyaXRlJyBpbiBvcHRzID8gISFvcHRzLm92ZXJ3cml0ZSA6IG9wdHMuY2xvYmJlciAvLyBvdmVyd3JpdGUgZmFsbHMgYmFjayB0byBjbG9iYmVyXG5cbiAgLy8gV2FybiBhYm91dCB1c2luZyBwcmVzZXJ2ZVRpbWVzdGFtcHMgb24gMzItYml0IG5vZGVcbiAgaWYgKG9wdHMucHJlc2VydmVUaW1lc3RhbXBzICYmIHByb2Nlc3MuYXJjaCA9PT0gJ2lhMzInKSB7XG4gICAgY29uc29sZS53YXJuKGBmcy1leHRyYTogVXNpbmcgdGhlIHByZXNlcnZlVGltZXN0YW1wcyBvcHRpb24gaW4gMzItYml0IG5vZGUgaXMgbm90IHJlY29tbWVuZGVkO1xcblxuICAgIHNlZSBodHRwczovL2dpdGh1Yi5jb20vanByaWNoYXJkc29uL25vZGUtZnMtZXh0cmEvaXNzdWVzLzI2OWApXG4gIH1cblxuICBjb25zdCB7IHNyY1N0YXQsIGRlc3RTdGF0IH0gPSBzdGF0LmNoZWNrUGF0aHNTeW5jKHNyYywgZGVzdCwgJ2NvcHknKVxuICBzdGF0LmNoZWNrUGFyZW50UGF0aHNTeW5jKHNyYywgc3JjU3RhdCwgZGVzdCwgJ2NvcHknKVxuICByZXR1cm4gaGFuZGxlRmlsdGVyQW5kQ29weShkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzKVxufVxuXG5mdW5jdGlvbiBoYW5kbGVGaWx0ZXJBbmRDb3B5IChkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzKSB7XG4gIGlmIChvcHRzLmZpbHRlciAmJiAhb3B0cy5maWx0ZXIoc3JjLCBkZXN0KSkgcmV0dXJuXG4gIGNvbnN0IGRlc3RQYXJlbnQgPSBwYXRoLmRpcm5hbWUoZGVzdClcbiAgaWYgKCFmcy5leGlzdHNTeW5jKGRlc3RQYXJlbnQpKSBta2RpcnNTeW5jKGRlc3RQYXJlbnQpXG4gIHJldHVybiBzdGFydENvcHkoZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cylcbn1cblxuZnVuY3Rpb24gc3RhcnRDb3B5IChkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzKSB7XG4gIGlmIChvcHRzLmZpbHRlciAmJiAhb3B0cy5maWx0ZXIoc3JjLCBkZXN0KSkgcmV0dXJuXG4gIHJldHVybiBnZXRTdGF0cyhkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzKVxufVxuXG5mdW5jdGlvbiBnZXRTdGF0cyAoZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cykge1xuICBjb25zdCBzdGF0U3luYyA9IG9wdHMuZGVyZWZlcmVuY2UgPyBmcy5zdGF0U3luYyA6IGZzLmxzdGF0U3luY1xuICBjb25zdCBzcmNTdGF0ID0gc3RhdFN5bmMoc3JjKVxuXG4gIGlmIChzcmNTdGF0LmlzRGlyZWN0b3J5KCkpIHJldHVybiBvbkRpcihzcmNTdGF0LCBkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzKVxuICBlbHNlIGlmIChzcmNTdGF0LmlzRmlsZSgpIHx8XG4gICAgICAgICAgIHNyY1N0YXQuaXNDaGFyYWN0ZXJEZXZpY2UoKSB8fFxuICAgICAgICAgICBzcmNTdGF0LmlzQmxvY2tEZXZpY2UoKSkgcmV0dXJuIG9uRmlsZShzcmNTdGF0LCBkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzKVxuICBlbHNlIGlmIChzcmNTdGF0LmlzU3ltYm9saWNMaW5rKCkpIHJldHVybiBvbkxpbmsoZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cylcbn1cblxuZnVuY3Rpb24gb25GaWxlIChzcmNTdGF0LCBkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzKSB7XG4gIGlmICghZGVzdFN0YXQpIHJldHVybiBjb3B5RmlsZShzcmNTdGF0LCBzcmMsIGRlc3QsIG9wdHMpXG4gIHJldHVybiBtYXlDb3B5RmlsZShzcmNTdGF0LCBzcmMsIGRlc3QsIG9wdHMpXG59XG5cbmZ1bmN0aW9uIG1heUNvcHlGaWxlIChzcmNTdGF0LCBzcmMsIGRlc3QsIG9wdHMpIHtcbiAgaWYgKG9wdHMub3ZlcndyaXRlKSB7XG4gICAgZnMudW5saW5rU3luYyhkZXN0KVxuICAgIHJldHVybiBjb3B5RmlsZShzcmNTdGF0LCBzcmMsIGRlc3QsIG9wdHMpXG4gIH0gZWxzZSBpZiAob3B0cy5lcnJvck9uRXhpc3QpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCcke2Rlc3R9JyBhbHJlYWR5IGV4aXN0c2ApXG4gIH1cbn1cblxuZnVuY3Rpb24gY29weUZpbGUgKHNyY1N0YXQsIHNyYywgZGVzdCwgb3B0cykge1xuICBmcy5jb3B5RmlsZVN5bmMoc3JjLCBkZXN0KVxuICBpZiAob3B0cy5wcmVzZXJ2ZVRpbWVzdGFtcHMpIGhhbmRsZVRpbWVzdGFtcHMoc3JjU3RhdC5tb2RlLCBzcmMsIGRlc3QpXG4gIHJldHVybiBzZXREZXN0TW9kZShkZXN0LCBzcmNTdGF0Lm1vZGUpXG59XG5cbmZ1bmN0aW9uIGhhbmRsZVRpbWVzdGFtcHMgKHNyY01vZGUsIHNyYywgZGVzdCkge1xuICAvLyBNYWtlIHN1cmUgdGhlIGZpbGUgaXMgd3JpdGFibGUgYmVmb3JlIHNldHRpbmcgdGhlIHRpbWVzdGFtcFxuICAvLyBvdGhlcndpc2Ugb3BlbiBmYWlscyB3aXRoIEVQRVJNIHdoZW4gaW52b2tlZCB3aXRoICdyKydcbiAgLy8gKHRocm91Z2ggdXRpbWVzIGNhbGwpXG4gIGlmIChmaWxlSXNOb3RXcml0YWJsZShzcmNNb2RlKSkgbWFrZUZpbGVXcml0YWJsZShkZXN0LCBzcmNNb2RlKVxuICByZXR1cm4gc2V0RGVzdFRpbWVzdGFtcHMoc3JjLCBkZXN0KVxufVxuXG5mdW5jdGlvbiBmaWxlSXNOb3RXcml0YWJsZSAoc3JjTW9kZSkge1xuICByZXR1cm4gKHNyY01vZGUgJiAwbzIwMCkgPT09IDBcbn1cblxuZnVuY3Rpb24gbWFrZUZpbGVXcml0YWJsZSAoZGVzdCwgc3JjTW9kZSkge1xuICByZXR1cm4gc2V0RGVzdE1vZGUoZGVzdCwgc3JjTW9kZSB8IDBvMjAwKVxufVxuXG5mdW5jdGlvbiBzZXREZXN0TW9kZSAoZGVzdCwgc3JjTW9kZSkge1xuICByZXR1cm4gZnMuY2htb2RTeW5jKGRlc3QsIHNyY01vZGUpXG59XG5cbmZ1bmN0aW9uIHNldERlc3RUaW1lc3RhbXBzIChzcmMsIGRlc3QpIHtcbiAgLy8gVGhlIGluaXRpYWwgc3JjU3RhdC5hdGltZSBjYW5ub3QgYmUgdHJ1c3RlZFxuICAvLyBiZWNhdXNlIGl0IGlzIG1vZGlmaWVkIGJ5IHRoZSByZWFkKDIpIHN5c3RlbSBjYWxsXG4gIC8vIChTZWUgaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9mcy5odG1sI2ZzX3N0YXRfdGltZV92YWx1ZXMpXG4gIGNvbnN0IHVwZGF0ZWRTcmNTdGF0ID0gZnMuc3RhdFN5bmMoc3JjKVxuICByZXR1cm4gdXRpbWVzTWlsbGlzU3luYyhkZXN0LCB1cGRhdGVkU3JjU3RhdC5hdGltZSwgdXBkYXRlZFNyY1N0YXQubXRpbWUpXG59XG5cbmZ1bmN0aW9uIG9uRGlyIChzcmNTdGF0LCBkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzKSB7XG4gIGlmICghZGVzdFN0YXQpIHJldHVybiBta0RpckFuZENvcHkoc3JjU3RhdC5tb2RlLCBzcmMsIGRlc3QsIG9wdHMpXG4gIGlmIChkZXN0U3RhdCAmJiAhZGVzdFN0YXQuaXNEaXJlY3RvcnkoKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IG92ZXJ3cml0ZSBub24tZGlyZWN0b3J5ICcke2Rlc3R9JyB3aXRoIGRpcmVjdG9yeSAnJHtzcmN9Jy5gKVxuICB9XG4gIHJldHVybiBjb3B5RGlyKHNyYywgZGVzdCwgb3B0cylcbn1cblxuZnVuY3Rpb24gbWtEaXJBbmRDb3B5IChzcmNNb2RlLCBzcmMsIGRlc3QsIG9wdHMpIHtcbiAgZnMubWtkaXJTeW5jKGRlc3QpXG4gIGNvcHlEaXIoc3JjLCBkZXN0LCBvcHRzKVxuICByZXR1cm4gc2V0RGVzdE1vZGUoZGVzdCwgc3JjTW9kZSlcbn1cblxuZnVuY3Rpb24gY29weURpciAoc3JjLCBkZXN0LCBvcHRzKSB7XG4gIGZzLnJlYWRkaXJTeW5jKHNyYykuZm9yRWFjaChpdGVtID0+IGNvcHlEaXJJdGVtKGl0ZW0sIHNyYywgZGVzdCwgb3B0cykpXG59XG5cbmZ1bmN0aW9uIGNvcHlEaXJJdGVtIChpdGVtLCBzcmMsIGRlc3QsIG9wdHMpIHtcbiAgY29uc3Qgc3JjSXRlbSA9IHBhdGguam9pbihzcmMsIGl0ZW0pXG4gIGNvbnN0IGRlc3RJdGVtID0gcGF0aC5qb2luKGRlc3QsIGl0ZW0pXG4gIGNvbnN0IHsgZGVzdFN0YXQgfSA9IHN0YXQuY2hlY2tQYXRoc1N5bmMoc3JjSXRlbSwgZGVzdEl0ZW0sICdjb3B5JylcbiAgcmV0dXJuIHN0YXJ0Q29weShkZXN0U3RhdCwgc3JjSXRlbSwgZGVzdEl0ZW0sIG9wdHMpXG59XG5cbmZ1bmN0aW9uIG9uTGluayAoZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cykge1xuICBsZXQgcmVzb2x2ZWRTcmMgPSBmcy5yZWFkbGlua1N5bmMoc3JjKVxuICBpZiAob3B0cy5kZXJlZmVyZW5jZSkge1xuICAgIHJlc29sdmVkU3JjID0gcGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCksIHJlc29sdmVkU3JjKVxuICB9XG5cbiAgaWYgKCFkZXN0U3RhdCkge1xuICAgIHJldHVybiBmcy5zeW1saW5rU3luYyhyZXNvbHZlZFNyYywgZGVzdClcbiAgfSBlbHNlIHtcbiAgICBsZXQgcmVzb2x2ZWREZXN0XG4gICAgdHJ5IHtcbiAgICAgIHJlc29sdmVkRGVzdCA9IGZzLnJlYWRsaW5rU3luYyhkZXN0KVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLy8gZGVzdCBleGlzdHMgYW5kIGlzIGEgcmVndWxhciBmaWxlIG9yIGRpcmVjdG9yeSxcbiAgICAgIC8vIFdpbmRvd3MgbWF5IHRocm93IFVOS05PV04gZXJyb3IuIElmIGRlc3QgYWxyZWFkeSBleGlzdHMsXG4gICAgICAvLyBmcyB0aHJvd3MgZXJyb3IgYW55d2F5LCBzbyBubyBuZWVkIHRvIGd1YXJkIGFnYWluc3QgaXQgaGVyZS5cbiAgICAgIGlmIChlcnIuY29kZSA9PT0gJ0VJTlZBTCcgfHwgZXJyLmNvZGUgPT09ICdVTktOT1dOJykgcmV0dXJuIGZzLnN5bWxpbmtTeW5jKHJlc29sdmVkU3JjLCBkZXN0KVxuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuICAgIGlmIChvcHRzLmRlcmVmZXJlbmNlKSB7XG4gICAgICByZXNvbHZlZERlc3QgPSBwYXRoLnJlc29sdmUocHJvY2Vzcy5jd2QoKSwgcmVzb2x2ZWREZXN0KVxuICAgIH1cbiAgICBpZiAoc3RhdC5pc1NyY1N1YmRpcihyZXNvbHZlZFNyYywgcmVzb2x2ZWREZXN0KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgY29weSAnJHtyZXNvbHZlZFNyY30nIHRvIGEgc3ViZGlyZWN0b3J5IG9mIGl0c2VsZiwgJyR7cmVzb2x2ZWREZXN0fScuYClcbiAgICB9XG5cbiAgICAvLyBwcmV2ZW50IGNvcHkgaWYgc3JjIGlzIGEgc3ViZGlyIG9mIGRlc3Qgc2luY2UgdW5saW5raW5nXG4gICAgLy8gZGVzdCBpbiB0aGlzIGNhc2Ugd291bGQgcmVzdWx0IGluIHJlbW92aW5nIHNyYyBjb250ZW50c1xuICAgIC8vIGFuZCB0aGVyZWZvcmUgYSBicm9rZW4gc3ltbGluayB3b3VsZCBiZSBjcmVhdGVkLlxuICAgIGlmIChmcy5zdGF0U3luYyhkZXN0KS5pc0RpcmVjdG9yeSgpICYmIHN0YXQuaXNTcmNTdWJkaXIocmVzb2x2ZWREZXN0LCByZXNvbHZlZFNyYykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IG92ZXJ3cml0ZSAnJHtyZXNvbHZlZERlc3R9JyB3aXRoICcke3Jlc29sdmVkU3JjfScuYClcbiAgICB9XG4gICAgcmV0dXJuIGNvcHlMaW5rKHJlc29sdmVkU3JjLCBkZXN0KVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvcHlMaW5rIChyZXNvbHZlZFNyYywgZGVzdCkge1xuICBmcy51bmxpbmtTeW5jKGRlc3QpXG4gIHJldHVybiBmcy5zeW1saW5rU3luYyhyZXNvbHZlZFNyYywgZGVzdClcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb3B5U3luY1xuIiwgIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgY29weVN5bmM6IHJlcXVpcmUoJy4vY29weS1zeW5jJylcbn1cbiIsICIndXNlIHN0cmljdCdcbmNvbnN0IHUgPSByZXF1aXJlKCd1bml2ZXJzYWxpZnknKS5mcm9tUHJvbWlzZVxuY29uc3QgZnMgPSByZXF1aXJlKCcuLi9mcycpXG5cbmZ1bmN0aW9uIHBhdGhFeGlzdHMgKHBhdGgpIHtcbiAgcmV0dXJuIGZzLmFjY2VzcyhwYXRoKS50aGVuKCgpID0+IHRydWUpLmNhdGNoKCgpID0+IGZhbHNlKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgcGF0aEV4aXN0czogdShwYXRoRXhpc3RzKSxcbiAgcGF0aEV4aXN0c1N5bmM6IGZzLmV4aXN0c1N5bmNcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgZnMgPSByZXF1aXJlKCdncmFjZWZ1bC1mcycpXG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpXG5jb25zdCBta2RpcnMgPSByZXF1aXJlKCcuLi9ta2RpcnMnKS5ta2RpcnNcbmNvbnN0IHBhdGhFeGlzdHMgPSByZXF1aXJlKCcuLi9wYXRoLWV4aXN0cycpLnBhdGhFeGlzdHNcbmNvbnN0IHV0aW1lc01pbGxpcyA9IHJlcXVpcmUoJy4uL3V0aWwvdXRpbWVzJykudXRpbWVzTWlsbGlzXG5jb25zdCBzdGF0ID0gcmVxdWlyZSgnLi4vdXRpbC9zdGF0JylcblxuZnVuY3Rpb24gY29weSAoc3JjLCBkZXN0LCBvcHRzLCBjYikge1xuICBpZiAodHlwZW9mIG9wdHMgPT09ICdmdW5jdGlvbicgJiYgIWNiKSB7XG4gICAgY2IgPSBvcHRzXG4gICAgb3B0cyA9IHt9XG4gIH0gZWxzZSBpZiAodHlwZW9mIG9wdHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBvcHRzID0geyBmaWx0ZXI6IG9wdHMgfVxuICB9XG5cbiAgY2IgPSBjYiB8fCBmdW5jdGlvbiAoKSB7fVxuICBvcHRzID0gb3B0cyB8fCB7fVxuXG4gIG9wdHMuY2xvYmJlciA9ICdjbG9iYmVyJyBpbiBvcHRzID8gISFvcHRzLmNsb2JiZXIgOiB0cnVlIC8vIGRlZmF1bHQgdG8gdHJ1ZSBmb3Igbm93XG4gIG9wdHMub3ZlcndyaXRlID0gJ292ZXJ3cml0ZScgaW4gb3B0cyA/ICEhb3B0cy5vdmVyd3JpdGUgOiBvcHRzLmNsb2JiZXIgLy8gb3ZlcndyaXRlIGZhbGxzIGJhY2sgdG8gY2xvYmJlclxuXG4gIC8vIFdhcm4gYWJvdXQgdXNpbmcgcHJlc2VydmVUaW1lc3RhbXBzIG9uIDMyLWJpdCBub2RlXG4gIGlmIChvcHRzLnByZXNlcnZlVGltZXN0YW1wcyAmJiBwcm9jZXNzLmFyY2ggPT09ICdpYTMyJykge1xuICAgIGNvbnNvbGUud2FybihgZnMtZXh0cmE6IFVzaW5nIHRoZSBwcmVzZXJ2ZVRpbWVzdGFtcHMgb3B0aW9uIGluIDMyLWJpdCBub2RlIGlzIG5vdCByZWNvbW1lbmRlZDtcXG5cbiAgICBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2pwcmljaGFyZHNvbi9ub2RlLWZzLWV4dHJhL2lzc3Vlcy8yNjlgKVxuICB9XG5cbiAgc3RhdC5jaGVja1BhdGhzKHNyYywgZGVzdCwgJ2NvcHknLCAoZXJyLCBzdGF0cykgPT4ge1xuICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgY29uc3QgeyBzcmNTdGF0LCBkZXN0U3RhdCB9ID0gc3RhdHNcbiAgICBzdGF0LmNoZWNrUGFyZW50UGF0aHMoc3JjLCBzcmNTdGF0LCBkZXN0LCAnY29weScsIGVyciA9PiB7XG4gICAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgICAgaWYgKG9wdHMuZmlsdGVyKSByZXR1cm4gaGFuZGxlRmlsdGVyKGNoZWNrUGFyZW50RGlyLCBkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzLCBjYilcbiAgICAgIHJldHVybiBjaGVja1BhcmVudERpcihkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzLCBjYilcbiAgICB9KVxuICB9KVxufVxuXG5mdW5jdGlvbiBjaGVja1BhcmVudERpciAoZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cywgY2IpIHtcbiAgY29uc3QgZGVzdFBhcmVudCA9IHBhdGguZGlybmFtZShkZXN0KVxuICBwYXRoRXhpc3RzKGRlc3RQYXJlbnQsIChlcnIsIGRpckV4aXN0cykgPT4ge1xuICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgaWYgKGRpckV4aXN0cykgcmV0dXJuIHN0YXJ0Q29weShkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzLCBjYilcbiAgICBta2RpcnMoZGVzdFBhcmVudCwgZXJyID0+IHtcbiAgICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgICByZXR1cm4gc3RhcnRDb3B5KGRlc3RTdGF0LCBzcmMsIGRlc3QsIG9wdHMsIGNiKVxuICAgIH0pXG4gIH0pXG59XG5cbmZ1bmN0aW9uIGhhbmRsZUZpbHRlciAob25JbmNsdWRlLCBkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzLCBjYikge1xuICBQcm9taXNlLnJlc29sdmUob3B0cy5maWx0ZXIoc3JjLCBkZXN0KSkudGhlbihpbmNsdWRlID0+IHtcbiAgICBpZiAoaW5jbHVkZSkgcmV0dXJuIG9uSW5jbHVkZShkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzLCBjYilcbiAgICByZXR1cm4gY2IoKVxuICB9LCBlcnJvciA9PiBjYihlcnJvcikpXG59XG5cbmZ1bmN0aW9uIHN0YXJ0Q29weSAoZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cywgY2IpIHtcbiAgaWYgKG9wdHMuZmlsdGVyKSByZXR1cm4gaGFuZGxlRmlsdGVyKGdldFN0YXRzLCBkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzLCBjYilcbiAgcmV0dXJuIGdldFN0YXRzKGRlc3RTdGF0LCBzcmMsIGRlc3QsIG9wdHMsIGNiKVxufVxuXG5mdW5jdGlvbiBnZXRTdGF0cyAoZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cywgY2IpIHtcbiAgY29uc3Qgc3RhdCA9IG9wdHMuZGVyZWZlcmVuY2UgPyBmcy5zdGF0IDogZnMubHN0YXRcbiAgc3RhdChzcmMsIChlcnIsIHNyY1N0YXQpID0+IHtcbiAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuXG4gICAgaWYgKHNyY1N0YXQuaXNEaXJlY3RvcnkoKSkgcmV0dXJuIG9uRGlyKHNyY1N0YXQsIGRlc3RTdGF0LCBzcmMsIGRlc3QsIG9wdHMsIGNiKVxuICAgIGVsc2UgaWYgKHNyY1N0YXQuaXNGaWxlKCkgfHxcbiAgICAgICAgICAgICBzcmNTdGF0LmlzQ2hhcmFjdGVyRGV2aWNlKCkgfHxcbiAgICAgICAgICAgICBzcmNTdGF0LmlzQmxvY2tEZXZpY2UoKSkgcmV0dXJuIG9uRmlsZShzcmNTdGF0LCBkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzLCBjYilcbiAgICBlbHNlIGlmIChzcmNTdGF0LmlzU3ltYm9saWNMaW5rKCkpIHJldHVybiBvbkxpbmsoZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cywgY2IpXG4gIH0pXG59XG5cbmZ1bmN0aW9uIG9uRmlsZSAoc3JjU3RhdCwgZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cywgY2IpIHtcbiAgaWYgKCFkZXN0U3RhdCkgcmV0dXJuIGNvcHlGaWxlKHNyY1N0YXQsIHNyYywgZGVzdCwgb3B0cywgY2IpXG4gIHJldHVybiBtYXlDb3B5RmlsZShzcmNTdGF0LCBzcmMsIGRlc3QsIG9wdHMsIGNiKVxufVxuXG5mdW5jdGlvbiBtYXlDb3B5RmlsZSAoc3JjU3RhdCwgc3JjLCBkZXN0LCBvcHRzLCBjYikge1xuICBpZiAob3B0cy5vdmVyd3JpdGUpIHtcbiAgICBmcy51bmxpbmsoZGVzdCwgZXJyID0+IHtcbiAgICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgICByZXR1cm4gY29weUZpbGUoc3JjU3RhdCwgc3JjLCBkZXN0LCBvcHRzLCBjYilcbiAgICB9KVxuICB9IGVsc2UgaWYgKG9wdHMuZXJyb3JPbkV4aXN0KSB7XG4gICAgcmV0dXJuIGNiKG5ldyBFcnJvcihgJyR7ZGVzdH0nIGFscmVhZHkgZXhpc3RzYCkpXG4gIH0gZWxzZSByZXR1cm4gY2IoKVxufVxuXG5mdW5jdGlvbiBjb3B5RmlsZSAoc3JjU3RhdCwgc3JjLCBkZXN0LCBvcHRzLCBjYikge1xuICBmcy5jb3B5RmlsZShzcmMsIGRlc3QsIGVyciA9PiB7XG4gICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICBpZiAob3B0cy5wcmVzZXJ2ZVRpbWVzdGFtcHMpIHJldHVybiBoYW5kbGVUaW1lc3RhbXBzQW5kTW9kZShzcmNTdGF0Lm1vZGUsIHNyYywgZGVzdCwgY2IpXG4gICAgcmV0dXJuIHNldERlc3RNb2RlKGRlc3QsIHNyY1N0YXQubW9kZSwgY2IpXG4gIH0pXG59XG5cbmZ1bmN0aW9uIGhhbmRsZVRpbWVzdGFtcHNBbmRNb2RlIChzcmNNb2RlLCBzcmMsIGRlc3QsIGNiKSB7XG4gIC8vIE1ha2Ugc3VyZSB0aGUgZmlsZSBpcyB3cml0YWJsZSBiZWZvcmUgc2V0dGluZyB0aGUgdGltZXN0YW1wXG4gIC8vIG90aGVyd2lzZSBvcGVuIGZhaWxzIHdpdGggRVBFUk0gd2hlbiBpbnZva2VkIHdpdGggJ3IrJ1xuICAvLyAodGhyb3VnaCB1dGltZXMgY2FsbClcbiAgaWYgKGZpbGVJc05vdFdyaXRhYmxlKHNyY01vZGUpKSB7XG4gICAgcmV0dXJuIG1ha2VGaWxlV3JpdGFibGUoZGVzdCwgc3JjTW9kZSwgZXJyID0+IHtcbiAgICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgICByZXR1cm4gc2V0RGVzdFRpbWVzdGFtcHNBbmRNb2RlKHNyY01vZGUsIHNyYywgZGVzdCwgY2IpXG4gICAgfSlcbiAgfVxuICByZXR1cm4gc2V0RGVzdFRpbWVzdGFtcHNBbmRNb2RlKHNyY01vZGUsIHNyYywgZGVzdCwgY2IpXG59XG5cbmZ1bmN0aW9uIGZpbGVJc05vdFdyaXRhYmxlIChzcmNNb2RlKSB7XG4gIHJldHVybiAoc3JjTW9kZSAmIDBvMjAwKSA9PT0gMFxufVxuXG5mdW5jdGlvbiBtYWtlRmlsZVdyaXRhYmxlIChkZXN0LCBzcmNNb2RlLCBjYikge1xuICByZXR1cm4gc2V0RGVzdE1vZGUoZGVzdCwgc3JjTW9kZSB8IDBvMjAwLCBjYilcbn1cblxuZnVuY3Rpb24gc2V0RGVzdFRpbWVzdGFtcHNBbmRNb2RlIChzcmNNb2RlLCBzcmMsIGRlc3QsIGNiKSB7XG4gIHNldERlc3RUaW1lc3RhbXBzKHNyYywgZGVzdCwgZXJyID0+IHtcbiAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgIHJldHVybiBzZXREZXN0TW9kZShkZXN0LCBzcmNNb2RlLCBjYilcbiAgfSlcbn1cblxuZnVuY3Rpb24gc2V0RGVzdE1vZGUgKGRlc3QsIHNyY01vZGUsIGNiKSB7XG4gIHJldHVybiBmcy5jaG1vZChkZXN0LCBzcmNNb2RlLCBjYilcbn1cblxuZnVuY3Rpb24gc2V0RGVzdFRpbWVzdGFtcHMgKHNyYywgZGVzdCwgY2IpIHtcbiAgLy8gVGhlIGluaXRpYWwgc3JjU3RhdC5hdGltZSBjYW5ub3QgYmUgdHJ1c3RlZFxuICAvLyBiZWNhdXNlIGl0IGlzIG1vZGlmaWVkIGJ5IHRoZSByZWFkKDIpIHN5c3RlbSBjYWxsXG4gIC8vIChTZWUgaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9mcy5odG1sI2ZzX3N0YXRfdGltZV92YWx1ZXMpXG4gIGZzLnN0YXQoc3JjLCAoZXJyLCB1cGRhdGVkU3JjU3RhdCkgPT4ge1xuICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgcmV0dXJuIHV0aW1lc01pbGxpcyhkZXN0LCB1cGRhdGVkU3JjU3RhdC5hdGltZSwgdXBkYXRlZFNyY1N0YXQubXRpbWUsIGNiKVxuICB9KVxufVxuXG5mdW5jdGlvbiBvbkRpciAoc3JjU3RhdCwgZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cywgY2IpIHtcbiAgaWYgKCFkZXN0U3RhdCkgcmV0dXJuIG1rRGlyQW5kQ29weShzcmNTdGF0Lm1vZGUsIHNyYywgZGVzdCwgb3B0cywgY2IpXG4gIGlmIChkZXN0U3RhdCAmJiAhZGVzdFN0YXQuaXNEaXJlY3RvcnkoKSkge1xuICAgIHJldHVybiBjYihuZXcgRXJyb3IoYENhbm5vdCBvdmVyd3JpdGUgbm9uLWRpcmVjdG9yeSAnJHtkZXN0fScgd2l0aCBkaXJlY3RvcnkgJyR7c3JjfScuYCkpXG4gIH1cbiAgcmV0dXJuIGNvcHlEaXIoc3JjLCBkZXN0LCBvcHRzLCBjYilcbn1cblxuZnVuY3Rpb24gbWtEaXJBbmRDb3B5IChzcmNNb2RlLCBzcmMsIGRlc3QsIG9wdHMsIGNiKSB7XG4gIGZzLm1rZGlyKGRlc3QsIGVyciA9PiB7XG4gICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICBjb3B5RGlyKHNyYywgZGVzdCwgb3B0cywgZXJyID0+IHtcbiAgICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgICByZXR1cm4gc2V0RGVzdE1vZGUoZGVzdCwgc3JjTW9kZSwgY2IpXG4gICAgfSlcbiAgfSlcbn1cblxuZnVuY3Rpb24gY29weURpciAoc3JjLCBkZXN0LCBvcHRzLCBjYikge1xuICBmcy5yZWFkZGlyKHNyYywgKGVyciwgaXRlbXMpID0+IHtcbiAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgIHJldHVybiBjb3B5RGlySXRlbXMoaXRlbXMsIHNyYywgZGVzdCwgb3B0cywgY2IpXG4gIH0pXG59XG5cbmZ1bmN0aW9uIGNvcHlEaXJJdGVtcyAoaXRlbXMsIHNyYywgZGVzdCwgb3B0cywgY2IpIHtcbiAgY29uc3QgaXRlbSA9IGl0ZW1zLnBvcCgpXG4gIGlmICghaXRlbSkgcmV0dXJuIGNiKClcbiAgcmV0dXJuIGNvcHlEaXJJdGVtKGl0ZW1zLCBpdGVtLCBzcmMsIGRlc3QsIG9wdHMsIGNiKVxufVxuXG5mdW5jdGlvbiBjb3B5RGlySXRlbSAoaXRlbXMsIGl0ZW0sIHNyYywgZGVzdCwgb3B0cywgY2IpIHtcbiAgY29uc3Qgc3JjSXRlbSA9IHBhdGguam9pbihzcmMsIGl0ZW0pXG4gIGNvbnN0IGRlc3RJdGVtID0gcGF0aC5qb2luKGRlc3QsIGl0ZW0pXG4gIHN0YXQuY2hlY2tQYXRocyhzcmNJdGVtLCBkZXN0SXRlbSwgJ2NvcHknLCAoZXJyLCBzdGF0cykgPT4ge1xuICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgY29uc3QgeyBkZXN0U3RhdCB9ID0gc3RhdHNcbiAgICBzdGFydENvcHkoZGVzdFN0YXQsIHNyY0l0ZW0sIGRlc3RJdGVtLCBvcHRzLCBlcnIgPT4ge1xuICAgICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICAgIHJldHVybiBjb3B5RGlySXRlbXMoaXRlbXMsIHNyYywgZGVzdCwgb3B0cywgY2IpXG4gICAgfSlcbiAgfSlcbn1cblxuZnVuY3Rpb24gb25MaW5rIChkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzLCBjYikge1xuICBmcy5yZWFkbGluayhzcmMsIChlcnIsIHJlc29sdmVkU3JjKSA9PiB7XG4gICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICBpZiAob3B0cy5kZXJlZmVyZW5jZSkge1xuICAgICAgcmVzb2x2ZWRTcmMgPSBwYXRoLnJlc29sdmUocHJvY2Vzcy5jd2QoKSwgcmVzb2x2ZWRTcmMpXG4gICAgfVxuXG4gICAgaWYgKCFkZXN0U3RhdCkge1xuICAgICAgcmV0dXJuIGZzLnN5bWxpbmsocmVzb2x2ZWRTcmMsIGRlc3QsIGNiKVxuICAgIH0gZWxzZSB7XG4gICAgICBmcy5yZWFkbGluayhkZXN0LCAoZXJyLCByZXNvbHZlZERlc3QpID0+IHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIC8vIGRlc3QgZXhpc3RzIGFuZCBpcyBhIHJlZ3VsYXIgZmlsZSBvciBkaXJlY3RvcnksXG4gICAgICAgICAgLy8gV2luZG93cyBtYXkgdGhyb3cgVU5LTk9XTiBlcnJvci4gSWYgZGVzdCBhbHJlYWR5IGV4aXN0cyxcbiAgICAgICAgICAvLyBmcyB0aHJvd3MgZXJyb3IgYW55d2F5LCBzbyBubyBuZWVkIHRvIGd1YXJkIGFnYWluc3QgaXQgaGVyZS5cbiAgICAgICAgICBpZiAoZXJyLmNvZGUgPT09ICdFSU5WQUwnIHx8IGVyci5jb2RlID09PSAnVU5LTk9XTicpIHJldHVybiBmcy5zeW1saW5rKHJlc29sdmVkU3JjLCBkZXN0LCBjYilcbiAgICAgICAgICByZXR1cm4gY2IoZXJyKVxuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRzLmRlcmVmZXJlbmNlKSB7XG4gICAgICAgICAgcmVzb2x2ZWREZXN0ID0gcGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCksIHJlc29sdmVkRGVzdClcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhdC5pc1NyY1N1YmRpcihyZXNvbHZlZFNyYywgcmVzb2x2ZWREZXN0KSkge1xuICAgICAgICAgIHJldHVybiBjYihuZXcgRXJyb3IoYENhbm5vdCBjb3B5ICcke3Jlc29sdmVkU3JjfScgdG8gYSBzdWJkaXJlY3Rvcnkgb2YgaXRzZWxmLCAnJHtyZXNvbHZlZERlc3R9Jy5gKSlcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGRvIG5vdCBjb3B5IGlmIHNyYyBpcyBhIHN1YmRpciBvZiBkZXN0IHNpbmNlIHVubGlua2luZ1xuICAgICAgICAvLyBkZXN0IGluIHRoaXMgY2FzZSB3b3VsZCByZXN1bHQgaW4gcmVtb3Zpbmcgc3JjIGNvbnRlbnRzXG4gICAgICAgIC8vIGFuZCB0aGVyZWZvcmUgYSBicm9rZW4gc3ltbGluayB3b3VsZCBiZSBjcmVhdGVkLlxuICAgICAgICBpZiAoZGVzdFN0YXQuaXNEaXJlY3RvcnkoKSAmJiBzdGF0LmlzU3JjU3ViZGlyKHJlc29sdmVkRGVzdCwgcmVzb2x2ZWRTcmMpKSB7XG4gICAgICAgICAgcmV0dXJuIGNiKG5ldyBFcnJvcihgQ2Fubm90IG92ZXJ3cml0ZSAnJHtyZXNvbHZlZERlc3R9JyB3aXRoICcke3Jlc29sdmVkU3JjfScuYCkpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvcHlMaW5rKHJlc29sdmVkU3JjLCBkZXN0LCBjYilcbiAgICAgIH0pXG4gICAgfVxuICB9KVxufVxuXG5mdW5jdGlvbiBjb3B5TGluayAocmVzb2x2ZWRTcmMsIGRlc3QsIGNiKSB7XG4gIGZzLnVubGluayhkZXN0LCBlcnIgPT4ge1xuICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgcmV0dXJuIGZzLnN5bWxpbmsocmVzb2x2ZWRTcmMsIGRlc3QsIGNiKVxuICB9KVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvcHlcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgdSA9IHJlcXVpcmUoJ3VuaXZlcnNhbGlmeScpLmZyb21DYWxsYmFja1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGNvcHk6IHUocmVxdWlyZSgnLi9jb3B5JykpXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGZzID0gcmVxdWlyZSgnZ3JhY2VmdWwtZnMnKVxuY29uc3QgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcblxuY29uc3QgaXNXaW5kb3dzID0gKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicpXG5cbmZ1bmN0aW9uIGRlZmF1bHRzIChvcHRpb25zKSB7XG4gIGNvbnN0IG1ldGhvZHMgPSBbXG4gICAgJ3VubGluaycsXG4gICAgJ2NobW9kJyxcbiAgICAnc3RhdCcsXG4gICAgJ2xzdGF0JyxcbiAgICAncm1kaXInLFxuICAgICdyZWFkZGlyJ1xuICBdXG4gIG1ldGhvZHMuZm9yRWFjaChtID0+IHtcbiAgICBvcHRpb25zW21dID0gb3B0aW9uc1ttXSB8fCBmc1ttXVxuICAgIG0gPSBtICsgJ1N5bmMnXG4gICAgb3B0aW9uc1ttXSA9IG9wdGlvbnNbbV0gfHwgZnNbbV1cbiAgfSlcblxuICBvcHRpb25zLm1heEJ1c3lUcmllcyA9IG9wdGlvbnMubWF4QnVzeVRyaWVzIHx8IDNcbn1cblxuZnVuY3Rpb24gcmltcmFmIChwLCBvcHRpb25zLCBjYikge1xuICBsZXQgYnVzeVRyaWVzID0gMFxuXG4gIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNiID0gb3B0aW9uc1xuICAgIG9wdGlvbnMgPSB7fVxuICB9XG5cbiAgYXNzZXJ0KHAsICdyaW1yYWY6IG1pc3NpbmcgcGF0aCcpXG4gIGFzc2VydC5zdHJpY3RFcXVhbCh0eXBlb2YgcCwgJ3N0cmluZycsICdyaW1yYWY6IHBhdGggc2hvdWxkIGJlIGEgc3RyaW5nJylcbiAgYXNzZXJ0LnN0cmljdEVxdWFsKHR5cGVvZiBjYiwgJ2Z1bmN0aW9uJywgJ3JpbXJhZjogY2FsbGJhY2sgZnVuY3Rpb24gcmVxdWlyZWQnKVxuICBhc3NlcnQob3B0aW9ucywgJ3JpbXJhZjogaW52YWxpZCBvcHRpb25zIGFyZ3VtZW50IHByb3ZpZGVkJylcbiAgYXNzZXJ0LnN0cmljdEVxdWFsKHR5cGVvZiBvcHRpb25zLCAnb2JqZWN0JywgJ3JpbXJhZjogb3B0aW9ucyBzaG91bGQgYmUgb2JqZWN0JylcblxuICBkZWZhdWx0cyhvcHRpb25zKVxuXG4gIHJpbXJhZl8ocCwgb3B0aW9ucywgZnVuY3Rpb24gQ0IgKGVyKSB7XG4gICAgaWYgKGVyKSB7XG4gICAgICBpZiAoKGVyLmNvZGUgPT09ICdFQlVTWScgfHwgZXIuY29kZSA9PT0gJ0VOT1RFTVBUWScgfHwgZXIuY29kZSA9PT0gJ0VQRVJNJykgJiZcbiAgICAgICAgICBidXN5VHJpZXMgPCBvcHRpb25zLm1heEJ1c3lUcmllcykge1xuICAgICAgICBidXN5VHJpZXMrK1xuICAgICAgICBjb25zdCB0aW1lID0gYnVzeVRyaWVzICogMTAwXG4gICAgICAgIC8vIHRyeSBhZ2Fpbiwgd2l0aCB0aGUgc2FtZSBleGFjdCBjYWxsYmFjayBhcyB0aGlzIG9uZS5cbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoKCkgPT4gcmltcmFmXyhwLCBvcHRpb25zLCBDQiksIHRpbWUpXG4gICAgICB9XG5cbiAgICAgIC8vIGFscmVhZHkgZ29uZVxuICAgICAgaWYgKGVyLmNvZGUgPT09ICdFTk9FTlQnKSBlciA9IG51bGxcbiAgICB9XG5cbiAgICBjYihlcilcbiAgfSlcbn1cblxuLy8gVHdvIHBvc3NpYmxlIHN0cmF0ZWdpZXMuXG4vLyAxLiBBc3N1bWUgaXQncyBhIGZpbGUuICB1bmxpbmsgaXQsIHRoZW4gZG8gdGhlIGRpciBzdHVmZiBvbiBFUEVSTSBvciBFSVNESVJcbi8vIDIuIEFzc3VtZSBpdCdzIGEgZGlyZWN0b3J5LiAgcmVhZGRpciwgdGhlbiBkbyB0aGUgZmlsZSBzdHVmZiBvbiBFTk9URElSXG4vL1xuLy8gQm90aCByZXN1bHQgaW4gYW4gZXh0cmEgc3lzY2FsbCB3aGVuIHlvdSBndWVzcyB3cm9uZy4gIEhvd2V2ZXIsIHRoZXJlXG4vLyBhcmUgbGlrZWx5IGZhciBtb3JlIG5vcm1hbCBmaWxlcyBpbiB0aGUgd29ybGQgdGhhbiBkaXJlY3Rvcmllcy4gIFRoaXNcbi8vIGlzIGJhc2VkIG9uIHRoZSBhc3N1bXB0aW9uIHRoYXQgYSB0aGUgYXZlcmFnZSBudW1iZXIgb2YgZmlsZXMgcGVyXG4vLyBkaXJlY3RvcnkgaXMgPj0gMS5cbi8vXG4vLyBJZiBhbnlvbmUgZXZlciBjb21wbGFpbnMgYWJvdXQgdGhpcywgdGhlbiBJIGd1ZXNzIHRoZSBzdHJhdGVneSBjb3VsZFxuLy8gYmUgbWFkZSBjb25maWd1cmFibGUgc29tZWhvdy4gIEJ1dCB1bnRpbCB0aGVuLCBZQUdOSS5cbmZ1bmN0aW9uIHJpbXJhZl8gKHAsIG9wdGlvbnMsIGNiKSB7XG4gIGFzc2VydChwKVxuICBhc3NlcnQob3B0aW9ucylcbiAgYXNzZXJ0KHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJylcblxuICAvLyBzdW5vcyBsZXRzIHRoZSByb290IHVzZXIgdW5saW5rIGRpcmVjdG9yaWVzLCB3aGljaCBpcy4uLiB3ZWlyZC5cbiAgLy8gc28gd2UgaGF2ZSB0byBsc3RhdCBoZXJlIGFuZCBtYWtlIHN1cmUgaXQncyBub3QgYSBkaXIuXG4gIG9wdGlvbnMubHN0YXQocCwgKGVyLCBzdCkgPT4ge1xuICAgIGlmIChlciAmJiBlci5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgcmV0dXJuIGNiKG51bGwpXG4gICAgfVxuXG4gICAgLy8gV2luZG93cyBjYW4gRVBFUk0gb24gc3RhdC4gIExpZmUgaXMgc3VmZmVyaW5nLlxuICAgIGlmIChlciAmJiBlci5jb2RlID09PSAnRVBFUk0nICYmIGlzV2luZG93cykge1xuICAgICAgcmV0dXJuIGZpeFdpbkVQRVJNKHAsIG9wdGlvbnMsIGVyLCBjYilcbiAgICB9XG5cbiAgICBpZiAoc3QgJiYgc3QuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgcmV0dXJuIHJtZGlyKHAsIG9wdGlvbnMsIGVyLCBjYilcbiAgICB9XG5cbiAgICBvcHRpb25zLnVubGluayhwLCBlciA9PiB7XG4gICAgICBpZiAoZXIpIHtcbiAgICAgICAgaWYgKGVyLmNvZGUgPT09ICdFTk9FTlQnKSB7XG4gICAgICAgICAgcmV0dXJuIGNiKG51bGwpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVyLmNvZGUgPT09ICdFUEVSTScpIHtcbiAgICAgICAgICByZXR1cm4gKGlzV2luZG93cylcbiAgICAgICAgICAgID8gZml4V2luRVBFUk0ocCwgb3B0aW9ucywgZXIsIGNiKVxuICAgICAgICAgICAgOiBybWRpcihwLCBvcHRpb25zLCBlciwgY2IpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVyLmNvZGUgPT09ICdFSVNESVInKSB7XG4gICAgICAgICAgcmV0dXJuIHJtZGlyKHAsIG9wdGlvbnMsIGVyLCBjYilcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGNiKGVyKVxuICAgIH0pXG4gIH0pXG59XG5cbmZ1bmN0aW9uIGZpeFdpbkVQRVJNIChwLCBvcHRpb25zLCBlciwgY2IpIHtcbiAgYXNzZXJ0KHApXG4gIGFzc2VydChvcHRpb25zKVxuICBhc3NlcnQodHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKVxuXG4gIG9wdGlvbnMuY2htb2QocCwgMG82NjYsIGVyMiA9PiB7XG4gICAgaWYgKGVyMikge1xuICAgICAgY2IoZXIyLmNvZGUgPT09ICdFTk9FTlQnID8gbnVsbCA6IGVyKVxuICAgIH0gZWxzZSB7XG4gICAgICBvcHRpb25zLnN0YXQocCwgKGVyMywgc3RhdHMpID0+IHtcbiAgICAgICAgaWYgKGVyMykge1xuICAgICAgICAgIGNiKGVyMy5jb2RlID09PSAnRU5PRU5UJyA/IG51bGwgOiBlcilcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0cy5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgICAgcm1kaXIocCwgb3B0aW9ucywgZXIsIGNiKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9wdGlvbnMudW5saW5rKHAsIGNiKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfSlcbn1cblxuZnVuY3Rpb24gZml4V2luRVBFUk1TeW5jIChwLCBvcHRpb25zLCBlcikge1xuICBsZXQgc3RhdHNcblxuICBhc3NlcnQocClcbiAgYXNzZXJ0KG9wdGlvbnMpXG5cbiAgdHJ5IHtcbiAgICBvcHRpb25zLmNobW9kU3luYyhwLCAwbzY2NilcbiAgfSBjYXRjaCAoZXIyKSB7XG4gICAgaWYgKGVyMi5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgcmV0dXJuXG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IGVyXG4gICAgfVxuICB9XG5cbiAgdHJ5IHtcbiAgICBzdGF0cyA9IG9wdGlvbnMuc3RhdFN5bmMocClcbiAgfSBjYXRjaCAoZXIzKSB7XG4gICAgaWYgKGVyMy5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgcmV0dXJuXG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IGVyXG4gICAgfVxuICB9XG5cbiAgaWYgKHN0YXRzLmlzRGlyZWN0b3J5KCkpIHtcbiAgICBybWRpclN5bmMocCwgb3B0aW9ucywgZXIpXG4gIH0gZWxzZSB7XG4gICAgb3B0aW9ucy51bmxpbmtTeW5jKHApXG4gIH1cbn1cblxuZnVuY3Rpb24gcm1kaXIgKHAsIG9wdGlvbnMsIG9yaWdpbmFsRXIsIGNiKSB7XG4gIGFzc2VydChwKVxuICBhc3NlcnQob3B0aW9ucylcbiAgYXNzZXJ0KHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJylcblxuICAvLyB0cnkgdG8gcm1kaXIgZmlyc3QsIGFuZCBvbmx5IHJlYWRkaXIgb24gRU5PVEVNUFRZIG9yIEVFWElTVCAoU3VuT1MpXG4gIC8vIGlmIHdlIGd1ZXNzZWQgd3JvbmcsIGFuZCBpdCdzIG5vdCBhIGRpcmVjdG9yeSwgdGhlblxuICAvLyByYWlzZSB0aGUgb3JpZ2luYWwgZXJyb3IuXG4gIG9wdGlvbnMucm1kaXIocCwgZXIgPT4ge1xuICAgIGlmIChlciAmJiAoZXIuY29kZSA9PT0gJ0VOT1RFTVBUWScgfHwgZXIuY29kZSA9PT0gJ0VFWElTVCcgfHwgZXIuY29kZSA9PT0gJ0VQRVJNJykpIHtcbiAgICAgIHJta2lkcyhwLCBvcHRpb25zLCBjYilcbiAgICB9IGVsc2UgaWYgKGVyICYmIGVyLmNvZGUgPT09ICdFTk9URElSJykge1xuICAgICAgY2Iob3JpZ2luYWxFcilcbiAgICB9IGVsc2Uge1xuICAgICAgY2IoZXIpXG4gICAgfVxuICB9KVxufVxuXG5mdW5jdGlvbiBybWtpZHMgKHAsIG9wdGlvbnMsIGNiKSB7XG4gIGFzc2VydChwKVxuICBhc3NlcnQob3B0aW9ucylcbiAgYXNzZXJ0KHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJylcblxuICBvcHRpb25zLnJlYWRkaXIocCwgKGVyLCBmaWxlcykgPT4ge1xuICAgIGlmIChlcikgcmV0dXJuIGNiKGVyKVxuXG4gICAgbGV0IG4gPSBmaWxlcy5sZW5ndGhcbiAgICBsZXQgZXJyU3RhdGVcblxuICAgIGlmIChuID09PSAwKSByZXR1cm4gb3B0aW9ucy5ybWRpcihwLCBjYilcblxuICAgIGZpbGVzLmZvckVhY2goZiA9PiB7XG4gICAgICByaW1yYWYocGF0aC5qb2luKHAsIGYpLCBvcHRpb25zLCBlciA9PiB7XG4gICAgICAgIGlmIChlcnJTdGF0ZSkge1xuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGlmIChlcikgcmV0dXJuIGNiKGVyclN0YXRlID0gZXIpXG4gICAgICAgIGlmICgtLW4gPT09IDApIHtcbiAgICAgICAgICBvcHRpb25zLnJtZGlyKHAsIGNiKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0pXG4gIH0pXG59XG5cbi8vIHRoaXMgbG9va3Mgc2ltcGxlciwgYW5kIGlzIHN0cmljdGx5ICpmYXN0ZXIqLCBidXQgd2lsbFxuLy8gdGllIHVwIHRoZSBKYXZhU2NyaXB0IHRocmVhZCBhbmQgZmFpbCBvbiBleGNlc3NpdmVseVxuLy8gZGVlcCBkaXJlY3RvcnkgdHJlZXMuXG5mdW5jdGlvbiByaW1yYWZTeW5jIChwLCBvcHRpb25zKSB7XG4gIGxldCBzdFxuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9XG4gIGRlZmF1bHRzKG9wdGlvbnMpXG5cbiAgYXNzZXJ0KHAsICdyaW1yYWY6IG1pc3NpbmcgcGF0aCcpXG4gIGFzc2VydC5zdHJpY3RFcXVhbCh0eXBlb2YgcCwgJ3N0cmluZycsICdyaW1yYWY6IHBhdGggc2hvdWxkIGJlIGEgc3RyaW5nJylcbiAgYXNzZXJ0KG9wdGlvbnMsICdyaW1yYWY6IG1pc3Npbmcgb3B0aW9ucycpXG4gIGFzc2VydC5zdHJpY3RFcXVhbCh0eXBlb2Ygb3B0aW9ucywgJ29iamVjdCcsICdyaW1yYWY6IG9wdGlvbnMgc2hvdWxkIGJlIG9iamVjdCcpXG5cbiAgdHJ5IHtcbiAgICBzdCA9IG9wdGlvbnMubHN0YXRTeW5jKHApXG4gIH0gY2F0Y2ggKGVyKSB7XG4gICAgaWYgKGVyLmNvZGUgPT09ICdFTk9FTlQnKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBXaW5kb3dzIGNhbiBFUEVSTSBvbiBzdGF0LiAgTGlmZSBpcyBzdWZmZXJpbmcuXG4gICAgaWYgKGVyLmNvZGUgPT09ICdFUEVSTScgJiYgaXNXaW5kb3dzKSB7XG4gICAgICBmaXhXaW5FUEVSTVN5bmMocCwgb3B0aW9ucywgZXIpXG4gICAgfVxuICB9XG5cbiAgdHJ5IHtcbiAgICAvLyBzdW5vcyBsZXRzIHRoZSByb290IHVzZXIgdW5saW5rIGRpcmVjdG9yaWVzLCB3aGljaCBpcy4uLiB3ZWlyZC5cbiAgICBpZiAoc3QgJiYgc3QuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgcm1kaXJTeW5jKHAsIG9wdGlvbnMsIG51bGwpXG4gICAgfSBlbHNlIHtcbiAgICAgIG9wdGlvbnMudW5saW5rU3luYyhwKVxuICAgIH1cbiAgfSBjYXRjaCAoZXIpIHtcbiAgICBpZiAoZXIuY29kZSA9PT0gJ0VOT0VOVCcpIHtcbiAgICAgIHJldHVyblxuICAgIH0gZWxzZSBpZiAoZXIuY29kZSA9PT0gJ0VQRVJNJykge1xuICAgICAgcmV0dXJuIGlzV2luZG93cyA/IGZpeFdpbkVQRVJNU3luYyhwLCBvcHRpb25zLCBlcikgOiBybWRpclN5bmMocCwgb3B0aW9ucywgZXIpXG4gICAgfSBlbHNlIGlmIChlci5jb2RlICE9PSAnRUlTRElSJykge1xuICAgICAgdGhyb3cgZXJcbiAgICB9XG4gICAgcm1kaXJTeW5jKHAsIG9wdGlvbnMsIGVyKVxuICB9XG59XG5cbmZ1bmN0aW9uIHJtZGlyU3luYyAocCwgb3B0aW9ucywgb3JpZ2luYWxFcikge1xuICBhc3NlcnQocClcbiAgYXNzZXJ0KG9wdGlvbnMpXG5cbiAgdHJ5IHtcbiAgICBvcHRpb25zLnJtZGlyU3luYyhwKVxuICB9IGNhdGNoIChlcikge1xuICAgIGlmIChlci5jb2RlID09PSAnRU5PVERJUicpIHtcbiAgICAgIHRocm93IG9yaWdpbmFsRXJcbiAgICB9IGVsc2UgaWYgKGVyLmNvZGUgPT09ICdFTk9URU1QVFknIHx8IGVyLmNvZGUgPT09ICdFRVhJU1QnIHx8IGVyLmNvZGUgPT09ICdFUEVSTScpIHtcbiAgICAgIHJta2lkc1N5bmMocCwgb3B0aW9ucylcbiAgICB9IGVsc2UgaWYgKGVyLmNvZGUgIT09ICdFTk9FTlQnKSB7XG4gICAgICB0aHJvdyBlclxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBybWtpZHNTeW5jIChwLCBvcHRpb25zKSB7XG4gIGFzc2VydChwKVxuICBhc3NlcnQob3B0aW9ucylcbiAgb3B0aW9ucy5yZWFkZGlyU3luYyhwKS5mb3JFYWNoKGYgPT4gcmltcmFmU3luYyhwYXRoLmpvaW4ocCwgZiksIG9wdGlvbnMpKVxuXG4gIGlmIChpc1dpbmRvd3MpIHtcbiAgICAvLyBXZSBvbmx5IGVuZCB1cCBoZXJlIG9uY2Ugd2UgZ290IEVOT1RFTVBUWSBhdCBsZWFzdCBvbmNlLCBhbmRcbiAgICAvLyBhdCB0aGlzIHBvaW50LCB3ZSBhcmUgZ3VhcmFudGVlZCB0byBoYXZlIHJlbW92ZWQgYWxsIHRoZSBraWRzLlxuICAgIC8vIFNvLCB3ZSBrbm93IHRoYXQgaXQgd29uJ3QgYmUgRU5PRU5UIG9yIEVOT1RESVIgb3IgYW55dGhpbmcgZWxzZS5cbiAgICAvLyB0cnkgcmVhbGx5IGhhcmQgdG8gZGVsZXRlIHN0dWZmIG9uIHdpbmRvd3MsIGJlY2F1c2UgaXQgaGFzIGFcbiAgICAvLyBQUk9GT1VORExZIGFubm95aW5nIGhhYml0IG9mIG5vdCBjbG9zaW5nIGhhbmRsZXMgcHJvbXB0bHkgd2hlblxuICAgIC8vIGZpbGVzIGFyZSBkZWxldGVkLCByZXN1bHRpbmcgaW4gc3B1cmlvdXMgRU5PVEVNUFRZIGVycm9ycy5cbiAgICBjb25zdCBzdGFydFRpbWUgPSBEYXRlLm5vdygpXG4gICAgZG8ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmV0ID0gb3B0aW9ucy5ybWRpclN5bmMocCwgb3B0aW9ucylcbiAgICAgICAgcmV0dXJuIHJldFxuICAgICAgfSBjYXRjaCB7fVxuICAgIH0gd2hpbGUgKERhdGUubm93KCkgLSBzdGFydFRpbWUgPCA1MDApIC8vIGdpdmUgdXAgYWZ0ZXIgNTAwbXNcbiAgfSBlbHNlIHtcbiAgICBjb25zdCByZXQgPSBvcHRpb25zLnJtZGlyU3luYyhwLCBvcHRpb25zKVxuICAgIHJldHVybiByZXRcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHJpbXJhZlxucmltcmFmLnN5bmMgPSByaW1yYWZTeW5jXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHUgPSByZXF1aXJlKCd1bml2ZXJzYWxpZnknKS5mcm9tQ2FsbGJhY2tcbmNvbnN0IHJpbXJhZiA9IHJlcXVpcmUoJy4vcmltcmFmJylcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHJlbW92ZTogdShyaW1yYWYpLFxuICByZW1vdmVTeW5jOiByaW1yYWYuc3luY1xufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB1ID0gcmVxdWlyZSgndW5pdmVyc2FsaWZ5JykuZnJvbUNhbGxiYWNrXG5jb25zdCBmcyA9IHJlcXVpcmUoJ2dyYWNlZnVsLWZzJylcbmNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJylcbmNvbnN0IG1rZGlyID0gcmVxdWlyZSgnLi4vbWtkaXJzJylcbmNvbnN0IHJlbW92ZSA9IHJlcXVpcmUoJy4uL3JlbW92ZScpXG5cbmNvbnN0IGVtcHR5RGlyID0gdShmdW5jdGlvbiBlbXB0eURpciAoZGlyLCBjYWxsYmFjaykge1xuICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9XG4gIGZzLnJlYWRkaXIoZGlyLCAoZXJyLCBpdGVtcykgPT4ge1xuICAgIGlmIChlcnIpIHJldHVybiBta2Rpci5ta2RpcnMoZGlyLCBjYWxsYmFjaylcblxuICAgIGl0ZW1zID0gaXRlbXMubWFwKGl0ZW0gPT4gcGF0aC5qb2luKGRpciwgaXRlbSkpXG5cbiAgICBkZWxldGVJdGVtKClcblxuICAgIGZ1bmN0aW9uIGRlbGV0ZUl0ZW0gKCkge1xuICAgICAgY29uc3QgaXRlbSA9IGl0ZW1zLnBvcCgpXG4gICAgICBpZiAoIWl0ZW0pIHJldHVybiBjYWxsYmFjaygpXG4gICAgICByZW1vdmUucmVtb3ZlKGl0ZW0sIGVyciA9PiB7XG4gICAgICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpXG4gICAgICAgIGRlbGV0ZUl0ZW0oKVxuICAgICAgfSlcbiAgICB9XG4gIH0pXG59KVxuXG5mdW5jdGlvbiBlbXB0eURpclN5bmMgKGRpcikge1xuICBsZXQgaXRlbXNcbiAgdHJ5IHtcbiAgICBpdGVtcyA9IGZzLnJlYWRkaXJTeW5jKGRpcilcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIG1rZGlyLm1rZGlyc1N5bmMoZGlyKVxuICB9XG5cbiAgaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICBpdGVtID0gcGF0aC5qb2luKGRpciwgaXRlbSlcbiAgICByZW1vdmUucmVtb3ZlU3luYyhpdGVtKVxuICB9KVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZW1wdHlEaXJTeW5jLFxuICBlbXB0eWRpclN5bmM6IGVtcHR5RGlyU3luYyxcbiAgZW1wdHlEaXIsXG4gIGVtcHR5ZGlyOiBlbXB0eURpclxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB1ID0gcmVxdWlyZSgndW5pdmVyc2FsaWZ5JykuZnJvbUNhbGxiYWNrXG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpXG5jb25zdCBmcyA9IHJlcXVpcmUoJ2dyYWNlZnVsLWZzJylcbmNvbnN0IG1rZGlyID0gcmVxdWlyZSgnLi4vbWtkaXJzJylcblxuZnVuY3Rpb24gY3JlYXRlRmlsZSAoZmlsZSwgY2FsbGJhY2spIHtcbiAgZnVuY3Rpb24gbWFrZUZpbGUgKCkge1xuICAgIGZzLndyaXRlRmlsZShmaWxlLCAnJywgZXJyID0+IHtcbiAgICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpXG4gICAgICBjYWxsYmFjaygpXG4gICAgfSlcbiAgfVxuXG4gIGZzLnN0YXQoZmlsZSwgKGVyciwgc3RhdHMpID0+IHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBoYW5kbGUtY2FsbGJhY2stZXJyXG4gICAgaWYgKCFlcnIgJiYgc3RhdHMuaXNGaWxlKCkpIHJldHVybiBjYWxsYmFjaygpXG4gICAgY29uc3QgZGlyID0gcGF0aC5kaXJuYW1lKGZpbGUpXG4gICAgZnMuc3RhdChkaXIsIChlcnIsIHN0YXRzKSA9PiB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIC8vIGlmIHRoZSBkaXJlY3RvcnkgZG9lc24ndCBleGlzdCwgbWFrZSBpdFxuICAgICAgICBpZiAoZXJyLmNvZGUgPT09ICdFTk9FTlQnKSB7XG4gICAgICAgICAgcmV0dXJuIG1rZGlyLm1rZGlycyhkaXIsIGVyciA9PiB7XG4gICAgICAgICAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKVxuICAgICAgICAgICAgbWFrZUZpbGUoKVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycilcbiAgICAgIH1cblxuICAgICAgaWYgKHN0YXRzLmlzRGlyZWN0b3J5KCkpIG1ha2VGaWxlKClcbiAgICAgIGVsc2Uge1xuICAgICAgICAvLyBwYXJlbnQgaXMgbm90IGEgZGlyZWN0b3J5XG4gICAgICAgIC8vIFRoaXMgaXMganVzdCB0byBjYXVzZSBhbiBpbnRlcm5hbCBFTk9URElSIGVycm9yIHRvIGJlIHRocm93blxuICAgICAgICBmcy5yZWFkZGlyKGRpciwgZXJyID0+IHtcbiAgICAgICAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0pXG4gIH0pXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUZpbGVTeW5jIChmaWxlKSB7XG4gIGxldCBzdGF0c1xuICB0cnkge1xuICAgIHN0YXRzID0gZnMuc3RhdFN5bmMoZmlsZSlcbiAgfSBjYXRjaCB7fVxuICBpZiAoc3RhdHMgJiYgc3RhdHMuaXNGaWxlKCkpIHJldHVyblxuXG4gIGNvbnN0IGRpciA9IHBhdGguZGlybmFtZShmaWxlKVxuICB0cnkge1xuICAgIGlmICghZnMuc3RhdFN5bmMoZGlyKS5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAvLyBwYXJlbnQgaXMgbm90IGEgZGlyZWN0b3J5XG4gICAgICAvLyBUaGlzIGlzIGp1c3QgdG8gY2F1c2UgYW4gaW50ZXJuYWwgRU5PVERJUiBlcnJvciB0byBiZSB0aHJvd25cbiAgICAgIGZzLnJlYWRkaXJTeW5jKGRpcilcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIC8vIElmIHRoZSBzdGF0IGNhbGwgYWJvdmUgZmFpbGVkIGJlY2F1c2UgdGhlIGRpcmVjdG9yeSBkb2Vzbid0IGV4aXN0LCBjcmVhdGUgaXRcbiAgICBpZiAoZXJyICYmIGVyci5jb2RlID09PSAnRU5PRU5UJykgbWtkaXIubWtkaXJzU3luYyhkaXIpXG4gICAgZWxzZSB0aHJvdyBlcnJcbiAgfVxuXG4gIGZzLndyaXRlRmlsZVN5bmMoZmlsZSwgJycpXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBjcmVhdGVGaWxlOiB1KGNyZWF0ZUZpbGUpLFxuICBjcmVhdGVGaWxlU3luY1xufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB1ID0gcmVxdWlyZSgndW5pdmVyc2FsaWZ5JykuZnJvbUNhbGxiYWNrXG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpXG5jb25zdCBmcyA9IHJlcXVpcmUoJ2dyYWNlZnVsLWZzJylcbmNvbnN0IG1rZGlyID0gcmVxdWlyZSgnLi4vbWtkaXJzJylcbmNvbnN0IHBhdGhFeGlzdHMgPSByZXF1aXJlKCcuLi9wYXRoLWV4aXN0cycpLnBhdGhFeGlzdHNcblxuZnVuY3Rpb24gY3JlYXRlTGluayAoc3JjcGF0aCwgZHN0cGF0aCwgY2FsbGJhY2spIHtcbiAgZnVuY3Rpb24gbWFrZUxpbmsgKHNyY3BhdGgsIGRzdHBhdGgpIHtcbiAgICBmcy5saW5rKHNyY3BhdGgsIGRzdHBhdGgsIGVyciA9PiB7XG4gICAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKVxuICAgICAgY2FsbGJhY2sobnVsbClcbiAgICB9KVxuICB9XG5cbiAgcGF0aEV4aXN0cyhkc3RwYXRoLCAoZXJyLCBkZXN0aW5hdGlvbkV4aXN0cykgPT4ge1xuICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpXG4gICAgaWYgKGRlc3RpbmF0aW9uRXhpc3RzKSByZXR1cm4gY2FsbGJhY2sobnVsbClcbiAgICBmcy5sc3RhdChzcmNwYXRoLCAoZXJyKSA9PiB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIGVyci5tZXNzYWdlID0gZXJyLm1lc3NhZ2UucmVwbGFjZSgnbHN0YXQnLCAnZW5zdXJlTGluaycpXG4gICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRpciA9IHBhdGguZGlybmFtZShkc3RwYXRoKVxuICAgICAgcGF0aEV4aXN0cyhkaXIsIChlcnIsIGRpckV4aXN0cykgPT4ge1xuICAgICAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKVxuICAgICAgICBpZiAoZGlyRXhpc3RzKSByZXR1cm4gbWFrZUxpbmsoc3JjcGF0aCwgZHN0cGF0aClcbiAgICAgICAgbWtkaXIubWtkaXJzKGRpciwgZXJyID0+IHtcbiAgICAgICAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKVxuICAgICAgICAgIG1ha2VMaW5rKHNyY3BhdGgsIGRzdHBhdGgpXG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgIH0pXG4gIH0pXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUxpbmtTeW5jIChzcmNwYXRoLCBkc3RwYXRoKSB7XG4gIGNvbnN0IGRlc3RpbmF0aW9uRXhpc3RzID0gZnMuZXhpc3RzU3luYyhkc3RwYXRoKVxuICBpZiAoZGVzdGluYXRpb25FeGlzdHMpIHJldHVybiB1bmRlZmluZWRcblxuICB0cnkge1xuICAgIGZzLmxzdGF0U3luYyhzcmNwYXRoKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBlcnIubWVzc2FnZSA9IGVyci5tZXNzYWdlLnJlcGxhY2UoJ2xzdGF0JywgJ2Vuc3VyZUxpbmsnKVxuICAgIHRocm93IGVyclxuICB9XG5cbiAgY29uc3QgZGlyID0gcGF0aC5kaXJuYW1lKGRzdHBhdGgpXG4gIGNvbnN0IGRpckV4aXN0cyA9IGZzLmV4aXN0c1N5bmMoZGlyKVxuICBpZiAoZGlyRXhpc3RzKSByZXR1cm4gZnMubGlua1N5bmMoc3JjcGF0aCwgZHN0cGF0aClcbiAgbWtkaXIubWtkaXJzU3luYyhkaXIpXG5cbiAgcmV0dXJuIGZzLmxpbmtTeW5jKHNyY3BhdGgsIGRzdHBhdGgpXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBjcmVhdGVMaW5rOiB1KGNyZWF0ZUxpbmspLFxuICBjcmVhdGVMaW5rU3luY1xufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpXG5jb25zdCBmcyA9IHJlcXVpcmUoJ2dyYWNlZnVsLWZzJylcbmNvbnN0IHBhdGhFeGlzdHMgPSByZXF1aXJlKCcuLi9wYXRoLWV4aXN0cycpLnBhdGhFeGlzdHNcblxuLyoqXG4gKiBGdW5jdGlvbiB0aGF0IHJldHVybnMgdHdvIHR5cGVzIG9mIHBhdGhzLCBvbmUgcmVsYXRpdmUgdG8gc3ltbGluaywgYW5kIG9uZVxuICogcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuIENoZWNrcyBpZiBwYXRoIGlzIGFic29sdXRlIG9yXG4gKiByZWxhdGl2ZS4gSWYgdGhlIHBhdGggaXMgcmVsYXRpdmUsIHRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmIHRoZSBwYXRoIGlzXG4gKiByZWxhdGl2ZSB0byBzeW1saW5rIG9yIHJlbGF0aXZlIHRvIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuIFRoaXMgaXMgYW5cbiAqIGluaXRpYXRpdmUgdG8gZmluZCBhIHNtYXJ0ZXIgYHNyY3BhdGhgIHRvIHN1cHBseSB3aGVuIGJ1aWxkaW5nIHN5bWxpbmtzLlxuICogVGhpcyBhbGxvd3MgeW91IHRvIGRldGVybWluZSB3aGljaCBwYXRoIHRvIHVzZSBvdXQgb2Ygb25lIG9mIHRocmVlIHBvc3NpYmxlXG4gKiB0eXBlcyBvZiBzb3VyY2UgcGF0aHMuIFRoZSBmaXJzdCBpcyBhbiBhYnNvbHV0ZSBwYXRoLiBUaGlzIGlzIGRldGVjdGVkIGJ5XG4gKiBgcGF0aC5pc0Fic29sdXRlKClgLiBXaGVuIGFuIGFic29sdXRlIHBhdGggaXMgcHJvdmlkZWQsIGl0IGlzIGNoZWNrZWQgdG9cbiAqIHNlZSBpZiBpdCBleGlzdHMuIElmIGl0IGRvZXMgaXQncyB1c2VkLCBpZiBub3QgYW4gZXJyb3IgaXMgcmV0dXJuZWRcbiAqIChjYWxsYmFjaykvIHRocm93biAoc3luYykuIFRoZSBvdGhlciB0d28gb3B0aW9ucyBmb3IgYHNyY3BhdGhgIGFyZSBhXG4gKiByZWxhdGl2ZSB1cmwuIEJ5IGRlZmF1bHQgTm9kZSdzIGBmcy5zeW1saW5rYCB3b3JrcyBieSBjcmVhdGluZyBhIHN5bWxpbmtcbiAqIHVzaW5nIGBkc3RwYXRoYCBhbmQgZXhwZWN0cyB0aGUgYHNyY3BhdGhgIHRvIGJlIHJlbGF0aXZlIHRvIHRoZSBuZXdseVxuICogY3JlYXRlZCBzeW1saW5rLiBJZiB5b3UgcHJvdmlkZSBhIGBzcmNwYXRoYCB0aGF0IGRvZXMgbm90IGV4aXN0IG9uIHRoZSBmaWxlXG4gKiBzeXN0ZW0gaXQgcmVzdWx0cyBpbiBhIGJyb2tlbiBzeW1saW5rLiBUbyBtaW5pbWl6ZSB0aGlzLCB0aGUgZnVuY3Rpb25cbiAqIGNoZWNrcyB0byBzZWUgaWYgdGhlICdyZWxhdGl2ZSB0byBzeW1saW5rJyBzb3VyY2UgZmlsZSBleGlzdHMsIGFuZCBpZiBpdFxuICogZG9lcyBpdCB3aWxsIHVzZSBpdC4gSWYgaXQgZG9lcyBub3QsIGl0IGNoZWNrcyBpZiB0aGVyZSdzIGEgZmlsZSB0aGF0XG4gKiBleGlzdHMgdGhhdCBpcyByZWxhdGl2ZSB0byB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSwgaWYgZG9lcyBpdHMgdXNlZC5cbiAqIFRoaXMgcHJlc2VydmVzIHRoZSBleHBlY3RhdGlvbnMgb2YgdGhlIG9yaWdpbmFsIGZzLnN5bWxpbmsgc3BlYyBhbmQgYWRkc1xuICogdGhlIGFiaWxpdHkgdG8gcGFzcyBpbiBgcmVsYXRpdmUgdG8gY3VycmVudCB3b3JraW5nIGRpcmVjb3RyeWAgcGF0aHMuXG4gKi9cblxuZnVuY3Rpb24gc3ltbGlua1BhdGhzIChzcmNwYXRoLCBkc3RwYXRoLCBjYWxsYmFjaykge1xuICBpZiAocGF0aC5pc0Fic29sdXRlKHNyY3BhdGgpKSB7XG4gICAgcmV0dXJuIGZzLmxzdGF0KHNyY3BhdGgsIChlcnIpID0+IHtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgZXJyLm1lc3NhZ2UgPSBlcnIubWVzc2FnZS5yZXBsYWNlKCdsc3RhdCcsICdlbnN1cmVTeW1saW5rJylcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycilcbiAgICAgIH1cbiAgICAgIHJldHVybiBjYWxsYmFjayhudWxsLCB7XG4gICAgICAgIHRvQ3dkOiBzcmNwYXRoLFxuICAgICAgICB0b0RzdDogc3JjcGF0aFxuICAgICAgfSlcbiAgICB9KVxuICB9IGVsc2Uge1xuICAgIGNvbnN0IGRzdGRpciA9IHBhdGguZGlybmFtZShkc3RwYXRoKVxuICAgIGNvbnN0IHJlbGF0aXZlVG9Ec3QgPSBwYXRoLmpvaW4oZHN0ZGlyLCBzcmNwYXRoKVxuICAgIHJldHVybiBwYXRoRXhpc3RzKHJlbGF0aXZlVG9Ec3QsIChlcnIsIGV4aXN0cykgPT4ge1xuICAgICAgaWYgKGVycikgcmV0dXJuIGNhbGxiYWNrKGVycilcbiAgICAgIGlmIChleGlzdHMpIHtcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwsIHtcbiAgICAgICAgICB0b0N3ZDogcmVsYXRpdmVUb0RzdCxcbiAgICAgICAgICB0b0RzdDogc3JjcGF0aFxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZzLmxzdGF0KHNyY3BhdGgsIChlcnIpID0+IHtcbiAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICBlcnIubWVzc2FnZSA9IGVyci5tZXNzYWdlLnJlcGxhY2UoJ2xzdGF0JywgJ2Vuc3VyZVN5bWxpbmsnKVxuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycilcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwsIHtcbiAgICAgICAgICAgIHRvQ3dkOiBzcmNwYXRoLFxuICAgICAgICAgICAgdG9Ec3Q6IHBhdGgucmVsYXRpdmUoZHN0ZGlyLCBzcmNwYXRoKVxuICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSlcbiAgfVxufVxuXG5mdW5jdGlvbiBzeW1saW5rUGF0aHNTeW5jIChzcmNwYXRoLCBkc3RwYXRoKSB7XG4gIGxldCBleGlzdHNcbiAgaWYgKHBhdGguaXNBYnNvbHV0ZShzcmNwYXRoKSkge1xuICAgIGV4aXN0cyA9IGZzLmV4aXN0c1N5bmMoc3JjcGF0aClcbiAgICBpZiAoIWV4aXN0cykgdGhyb3cgbmV3IEVycm9yKCdhYnNvbHV0ZSBzcmNwYXRoIGRvZXMgbm90IGV4aXN0JylcbiAgICByZXR1cm4ge1xuICAgICAgdG9Dd2Q6IHNyY3BhdGgsXG4gICAgICB0b0RzdDogc3JjcGF0aFxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjb25zdCBkc3RkaXIgPSBwYXRoLmRpcm5hbWUoZHN0cGF0aClcbiAgICBjb25zdCByZWxhdGl2ZVRvRHN0ID0gcGF0aC5qb2luKGRzdGRpciwgc3JjcGF0aClcbiAgICBleGlzdHMgPSBmcy5leGlzdHNTeW5jKHJlbGF0aXZlVG9Ec3QpXG4gICAgaWYgKGV4aXN0cykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdG9Dd2Q6IHJlbGF0aXZlVG9Ec3QsXG4gICAgICAgIHRvRHN0OiBzcmNwYXRoXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGV4aXN0cyA9IGZzLmV4aXN0c1N5bmMoc3JjcGF0aClcbiAgICAgIGlmICghZXhpc3RzKSB0aHJvdyBuZXcgRXJyb3IoJ3JlbGF0aXZlIHNyY3BhdGggZG9lcyBub3QgZXhpc3QnKVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdG9Dd2Q6IHNyY3BhdGgsXG4gICAgICAgIHRvRHN0OiBwYXRoLnJlbGF0aXZlKGRzdGRpciwgc3JjcGF0aClcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHN5bWxpbmtQYXRocyxcbiAgc3ltbGlua1BhdGhzU3luY1xufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBmcyA9IHJlcXVpcmUoJ2dyYWNlZnVsLWZzJylcblxuZnVuY3Rpb24gc3ltbGlua1R5cGUgKHNyY3BhdGgsIHR5cGUsIGNhbGxiYWNrKSB7XG4gIGNhbGxiYWNrID0gKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSA/IHR5cGUgOiBjYWxsYmFja1xuICB0eXBlID0gKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSA/IGZhbHNlIDogdHlwZVxuICBpZiAodHlwZSkgcmV0dXJuIGNhbGxiYWNrKG51bGwsIHR5cGUpXG4gIGZzLmxzdGF0KHNyY3BhdGgsIChlcnIsIHN0YXRzKSA9PiB7XG4gICAgaWYgKGVycikgcmV0dXJuIGNhbGxiYWNrKG51bGwsICdmaWxlJylcbiAgICB0eXBlID0gKHN0YXRzICYmIHN0YXRzLmlzRGlyZWN0b3J5KCkpID8gJ2RpcicgOiAnZmlsZSdcbiAgICBjYWxsYmFjayhudWxsLCB0eXBlKVxuICB9KVxufVxuXG5mdW5jdGlvbiBzeW1saW5rVHlwZVN5bmMgKHNyY3BhdGgsIHR5cGUpIHtcbiAgbGV0IHN0YXRzXG5cbiAgaWYgKHR5cGUpIHJldHVybiB0eXBlXG4gIHRyeSB7XG4gICAgc3RhdHMgPSBmcy5sc3RhdFN5bmMoc3JjcGF0aClcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuICdmaWxlJ1xuICB9XG4gIHJldHVybiAoc3RhdHMgJiYgc3RhdHMuaXNEaXJlY3RvcnkoKSkgPyAnZGlyJyA6ICdmaWxlJ1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc3ltbGlua1R5cGUsXG4gIHN5bWxpbmtUeXBlU3luY1xufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB1ID0gcmVxdWlyZSgndW5pdmVyc2FsaWZ5JykuZnJvbUNhbGxiYWNrXG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpXG5jb25zdCBmcyA9IHJlcXVpcmUoJ2dyYWNlZnVsLWZzJylcbmNvbnN0IF9ta2RpcnMgPSByZXF1aXJlKCcuLi9ta2RpcnMnKVxuY29uc3QgbWtkaXJzID0gX21rZGlycy5ta2RpcnNcbmNvbnN0IG1rZGlyc1N5bmMgPSBfbWtkaXJzLm1rZGlyc1N5bmNcblxuY29uc3QgX3N5bWxpbmtQYXRocyA9IHJlcXVpcmUoJy4vc3ltbGluay1wYXRocycpXG5jb25zdCBzeW1saW5rUGF0aHMgPSBfc3ltbGlua1BhdGhzLnN5bWxpbmtQYXRoc1xuY29uc3Qgc3ltbGlua1BhdGhzU3luYyA9IF9zeW1saW5rUGF0aHMuc3ltbGlua1BhdGhzU3luY1xuXG5jb25zdCBfc3ltbGlua1R5cGUgPSByZXF1aXJlKCcuL3N5bWxpbmstdHlwZScpXG5jb25zdCBzeW1saW5rVHlwZSA9IF9zeW1saW5rVHlwZS5zeW1saW5rVHlwZVxuY29uc3Qgc3ltbGlua1R5cGVTeW5jID0gX3N5bWxpbmtUeXBlLnN5bWxpbmtUeXBlU3luY1xuXG5jb25zdCBwYXRoRXhpc3RzID0gcmVxdWlyZSgnLi4vcGF0aC1leGlzdHMnKS5wYXRoRXhpc3RzXG5cbmZ1bmN0aW9uIGNyZWF0ZVN5bWxpbmsgKHNyY3BhdGgsIGRzdHBhdGgsIHR5cGUsIGNhbGxiYWNrKSB7XG4gIGNhbGxiYWNrID0gKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSA/IHR5cGUgOiBjYWxsYmFja1xuICB0eXBlID0gKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSA/IGZhbHNlIDogdHlwZVxuXG4gIHBhdGhFeGlzdHMoZHN0cGF0aCwgKGVyciwgZGVzdGluYXRpb25FeGlzdHMpID0+IHtcbiAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKVxuICAgIGlmIChkZXN0aW5hdGlvbkV4aXN0cykgcmV0dXJuIGNhbGxiYWNrKG51bGwpXG4gICAgc3ltbGlua1BhdGhzKHNyY3BhdGgsIGRzdHBhdGgsIChlcnIsIHJlbGF0aXZlKSA9PiB7XG4gICAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKVxuICAgICAgc3JjcGF0aCA9IHJlbGF0aXZlLnRvRHN0XG4gICAgICBzeW1saW5rVHlwZShyZWxhdGl2ZS50b0N3ZCwgdHlwZSwgKGVyciwgdHlwZSkgPT4ge1xuICAgICAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKVxuICAgICAgICBjb25zdCBkaXIgPSBwYXRoLmRpcm5hbWUoZHN0cGF0aClcbiAgICAgICAgcGF0aEV4aXN0cyhkaXIsIChlcnIsIGRpckV4aXN0cykgPT4ge1xuICAgICAgICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpXG4gICAgICAgICAgaWYgKGRpckV4aXN0cykgcmV0dXJuIGZzLnN5bWxpbmsoc3JjcGF0aCwgZHN0cGF0aCwgdHlwZSwgY2FsbGJhY2spXG4gICAgICAgICAgbWtkaXJzKGRpciwgZXJyID0+IHtcbiAgICAgICAgICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpXG4gICAgICAgICAgICBmcy5zeW1saW5rKHNyY3BhdGgsIGRzdHBhdGgsIHR5cGUsIGNhbGxiYWNrKVxuICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgIH0pXG4gIH0pXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVN5bWxpbmtTeW5jIChzcmNwYXRoLCBkc3RwYXRoLCB0eXBlKSB7XG4gIGNvbnN0IGRlc3RpbmF0aW9uRXhpc3RzID0gZnMuZXhpc3RzU3luYyhkc3RwYXRoKVxuICBpZiAoZGVzdGluYXRpb25FeGlzdHMpIHJldHVybiB1bmRlZmluZWRcblxuICBjb25zdCByZWxhdGl2ZSA9IHN5bWxpbmtQYXRoc1N5bmMoc3JjcGF0aCwgZHN0cGF0aClcbiAgc3JjcGF0aCA9IHJlbGF0aXZlLnRvRHN0XG4gIHR5cGUgPSBzeW1saW5rVHlwZVN5bmMocmVsYXRpdmUudG9Dd2QsIHR5cGUpXG4gIGNvbnN0IGRpciA9IHBhdGguZGlybmFtZShkc3RwYXRoKVxuICBjb25zdCBleGlzdHMgPSBmcy5leGlzdHNTeW5jKGRpcilcbiAgaWYgKGV4aXN0cykgcmV0dXJuIGZzLnN5bWxpbmtTeW5jKHNyY3BhdGgsIGRzdHBhdGgsIHR5cGUpXG4gIG1rZGlyc1N5bmMoZGlyKVxuICByZXR1cm4gZnMuc3ltbGlua1N5bmMoc3JjcGF0aCwgZHN0cGF0aCwgdHlwZSlcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGNyZWF0ZVN5bWxpbms6IHUoY3JlYXRlU3ltbGluayksXG4gIGNyZWF0ZVN5bWxpbmtTeW5jXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGZpbGUgPSByZXF1aXJlKCcuL2ZpbGUnKVxuY29uc3QgbGluayA9IHJlcXVpcmUoJy4vbGluaycpXG5jb25zdCBzeW1saW5rID0gcmVxdWlyZSgnLi9zeW1saW5rJylcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGZpbGVcbiAgY3JlYXRlRmlsZTogZmlsZS5jcmVhdGVGaWxlLFxuICBjcmVhdGVGaWxlU3luYzogZmlsZS5jcmVhdGVGaWxlU3luYyxcbiAgZW5zdXJlRmlsZTogZmlsZS5jcmVhdGVGaWxlLFxuICBlbnN1cmVGaWxlU3luYzogZmlsZS5jcmVhdGVGaWxlU3luYyxcbiAgLy8gbGlua1xuICBjcmVhdGVMaW5rOiBsaW5rLmNyZWF0ZUxpbmssXG4gIGNyZWF0ZUxpbmtTeW5jOiBsaW5rLmNyZWF0ZUxpbmtTeW5jLFxuICBlbnN1cmVMaW5rOiBsaW5rLmNyZWF0ZUxpbmssXG4gIGVuc3VyZUxpbmtTeW5jOiBsaW5rLmNyZWF0ZUxpbmtTeW5jLFxuICAvLyBzeW1saW5rXG4gIGNyZWF0ZVN5bWxpbms6IHN5bWxpbmsuY3JlYXRlU3ltbGluayxcbiAgY3JlYXRlU3ltbGlua1N5bmM6IHN5bWxpbmsuY3JlYXRlU3ltbGlua1N5bmMsXG4gIGVuc3VyZVN5bWxpbms6IHN5bWxpbmsuY3JlYXRlU3ltbGluayxcbiAgZW5zdXJlU3ltbGlua1N5bmM6IHN5bWxpbmsuY3JlYXRlU3ltbGlua1N5bmNcbn1cbiIsICJmdW5jdGlvbiBzdHJpbmdpZnkgKG9iaiwgeyBFT0wgPSAnXFxuJywgZmluYWxFT0wgPSB0cnVlLCByZXBsYWNlciA9IG51bGwsIHNwYWNlcyB9ID0ge30pIHtcbiAgY29uc3QgRU9GID0gZmluYWxFT0wgPyBFT0wgOiAnJ1xuICBjb25zdCBzdHIgPSBKU09OLnN0cmluZ2lmeShvYmosIHJlcGxhY2VyLCBzcGFjZXMpXG5cbiAgcmV0dXJuIHN0ci5yZXBsYWNlKC9cXG4vZywgRU9MKSArIEVPRlxufVxuXG5mdW5jdGlvbiBzdHJpcEJvbSAoY29udGVudCkge1xuICAvLyB3ZSBkbyB0aGlzIGJlY2F1c2UgSlNPTi5wYXJzZSB3b3VsZCBjb252ZXJ0IGl0IHRvIGEgdXRmOCBzdHJpbmcgaWYgZW5jb2Rpbmcgd2Fzbid0IHNwZWNpZmllZFxuICBpZiAoQnVmZmVyLmlzQnVmZmVyKGNvbnRlbnQpKSBjb250ZW50ID0gY29udGVudC50b1N0cmluZygndXRmOCcpXG4gIHJldHVybiBjb250ZW50LnJlcGxhY2UoL15cXHVGRUZGLywgJycpXG59XG5cbm1vZHVsZS5leHBvcnRzID0geyBzdHJpbmdpZnksIHN0cmlwQm9tIH1cbiIsICJsZXQgX2ZzXG50cnkge1xuICBfZnMgPSByZXF1aXJlKCdncmFjZWZ1bC1mcycpXG59IGNhdGNoIChfKSB7XG4gIF9mcyA9IHJlcXVpcmUoJ2ZzJylcbn1cbmNvbnN0IHVuaXZlcnNhbGlmeSA9IHJlcXVpcmUoJ3VuaXZlcnNhbGlmeScpXG5jb25zdCB7IHN0cmluZ2lmeSwgc3RyaXBCb20gfSA9IHJlcXVpcmUoJy4vdXRpbHMnKVxuXG5hc3luYyBmdW5jdGlvbiBfcmVhZEZpbGUgKGZpbGUsIG9wdGlvbnMgPSB7fSkge1xuICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdzdHJpbmcnKSB7XG4gICAgb3B0aW9ucyA9IHsgZW5jb2Rpbmc6IG9wdGlvbnMgfVxuICB9XG5cbiAgY29uc3QgZnMgPSBvcHRpb25zLmZzIHx8IF9mc1xuXG4gIGNvbnN0IHNob3VsZFRocm93ID0gJ3Rocm93cycgaW4gb3B0aW9ucyA/IG9wdGlvbnMudGhyb3dzIDogdHJ1ZVxuXG4gIGxldCBkYXRhID0gYXdhaXQgdW5pdmVyc2FsaWZ5LmZyb21DYWxsYmFjayhmcy5yZWFkRmlsZSkoZmlsZSwgb3B0aW9ucylcblxuICBkYXRhID0gc3RyaXBCb20oZGF0YSlcblxuICBsZXQgb2JqXG4gIHRyeSB7XG4gICAgb2JqID0gSlNPTi5wYXJzZShkYXRhLCBvcHRpb25zID8gb3B0aW9ucy5yZXZpdmVyIDogbnVsbClcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKHNob3VsZFRocm93KSB7XG4gICAgICBlcnIubWVzc2FnZSA9IGAke2ZpbGV9OiAke2Vyci5tZXNzYWdlfWBcbiAgICAgIHRocm93IGVyclxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvYmpcbn1cblxuY29uc3QgcmVhZEZpbGUgPSB1bml2ZXJzYWxpZnkuZnJvbVByb21pc2UoX3JlYWRGaWxlKVxuXG5mdW5jdGlvbiByZWFkRmlsZVN5bmMgKGZpbGUsIG9wdGlvbnMgPSB7fSkge1xuICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdzdHJpbmcnKSB7XG4gICAgb3B0aW9ucyA9IHsgZW5jb2Rpbmc6IG9wdGlvbnMgfVxuICB9XG5cbiAgY29uc3QgZnMgPSBvcHRpb25zLmZzIHx8IF9mc1xuXG4gIGNvbnN0IHNob3VsZFRocm93ID0gJ3Rocm93cycgaW4gb3B0aW9ucyA/IG9wdGlvbnMudGhyb3dzIDogdHJ1ZVxuXG4gIHRyeSB7XG4gICAgbGV0IGNvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMoZmlsZSwgb3B0aW9ucylcbiAgICBjb250ZW50ID0gc3RyaXBCb20oY29udGVudClcbiAgICByZXR1cm4gSlNPTi5wYXJzZShjb250ZW50LCBvcHRpb25zLnJldml2ZXIpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmIChzaG91bGRUaHJvdykge1xuICAgICAgZXJyLm1lc3NhZ2UgPSBgJHtmaWxlfTogJHtlcnIubWVzc2FnZX1gXG4gICAgICB0aHJvdyBlcnJcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gX3dyaXRlRmlsZSAoZmlsZSwgb2JqLCBvcHRpb25zID0ge30pIHtcbiAgY29uc3QgZnMgPSBvcHRpb25zLmZzIHx8IF9mc1xuXG4gIGNvbnN0IHN0ciA9IHN0cmluZ2lmeShvYmosIG9wdGlvbnMpXG5cbiAgYXdhaXQgdW5pdmVyc2FsaWZ5LmZyb21DYWxsYmFjayhmcy53cml0ZUZpbGUpKGZpbGUsIHN0ciwgb3B0aW9ucylcbn1cblxuY29uc3Qgd3JpdGVGaWxlID0gdW5pdmVyc2FsaWZ5LmZyb21Qcm9taXNlKF93cml0ZUZpbGUpXG5cbmZ1bmN0aW9uIHdyaXRlRmlsZVN5bmMgKGZpbGUsIG9iaiwgb3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IGZzID0gb3B0aW9ucy5mcyB8fCBfZnNcblxuICBjb25zdCBzdHIgPSBzdHJpbmdpZnkob2JqLCBvcHRpb25zKVxuICAvLyBub3Qgc3VyZSBpZiBmcy53cml0ZUZpbGVTeW5jIHJldHVybnMgYW55dGhpbmcsIGJ1dCBqdXN0IGluIGNhc2VcbiAgcmV0dXJuIGZzLndyaXRlRmlsZVN5bmMoZmlsZSwgc3RyLCBvcHRpb25zKVxufVxuXG5jb25zdCBqc29uZmlsZSA9IHtcbiAgcmVhZEZpbGUsXG4gIHJlYWRGaWxlU3luYyxcbiAgd3JpdGVGaWxlLFxuICB3cml0ZUZpbGVTeW5jXG59XG5cbm1vZHVsZS5leHBvcnRzID0ganNvbmZpbGVcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QganNvbkZpbGUgPSByZXF1aXJlKCdqc29uZmlsZScpXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBqc29uZmlsZSBleHBvcnRzXG4gIHJlYWRKc29uOiBqc29uRmlsZS5yZWFkRmlsZSxcbiAgcmVhZEpzb25TeW5jOiBqc29uRmlsZS5yZWFkRmlsZVN5bmMsXG4gIHdyaXRlSnNvbjoganNvbkZpbGUud3JpdGVGaWxlLFxuICB3cml0ZUpzb25TeW5jOiBqc29uRmlsZS53cml0ZUZpbGVTeW5jXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHUgPSByZXF1aXJlKCd1bml2ZXJzYWxpZnknKS5mcm9tQ2FsbGJhY2tcbmNvbnN0IGZzID0gcmVxdWlyZSgnZ3JhY2VmdWwtZnMnKVxuY29uc3QgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKVxuY29uc3QgbWtkaXIgPSByZXF1aXJlKCcuLi9ta2RpcnMnKVxuY29uc3QgcGF0aEV4aXN0cyA9IHJlcXVpcmUoJy4uL3BhdGgtZXhpc3RzJykucGF0aEV4aXN0c1xuXG5mdW5jdGlvbiBvdXRwdXRGaWxlIChmaWxlLCBkYXRhLCBlbmNvZGluZywgY2FsbGJhY2spIHtcbiAgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNhbGxiYWNrID0gZW5jb2RpbmdcbiAgICBlbmNvZGluZyA9ICd1dGY4J1xuICB9XG5cbiAgY29uc3QgZGlyID0gcGF0aC5kaXJuYW1lKGZpbGUpXG4gIHBhdGhFeGlzdHMoZGlyLCAoZXJyLCBpdERvZXMpID0+IHtcbiAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKVxuICAgIGlmIChpdERvZXMpIHJldHVybiBmcy53cml0ZUZpbGUoZmlsZSwgZGF0YSwgZW5jb2RpbmcsIGNhbGxiYWNrKVxuXG4gICAgbWtkaXIubWtkaXJzKGRpciwgZXJyID0+IHtcbiAgICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpXG5cbiAgICAgIGZzLndyaXRlRmlsZShmaWxlLCBkYXRhLCBlbmNvZGluZywgY2FsbGJhY2spXG4gICAgfSlcbiAgfSlcbn1cblxuZnVuY3Rpb24gb3V0cHV0RmlsZVN5bmMgKGZpbGUsIC4uLmFyZ3MpIHtcbiAgY29uc3QgZGlyID0gcGF0aC5kaXJuYW1lKGZpbGUpXG4gIGlmIChmcy5leGlzdHNTeW5jKGRpcikpIHtcbiAgICByZXR1cm4gZnMud3JpdGVGaWxlU3luYyhmaWxlLCAuLi5hcmdzKVxuICB9XG4gIG1rZGlyLm1rZGlyc1N5bmMoZGlyKVxuICBmcy53cml0ZUZpbGVTeW5jKGZpbGUsIC4uLmFyZ3MpXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBvdXRwdXRGaWxlOiB1KG91dHB1dEZpbGUpLFxuICBvdXRwdXRGaWxlU3luY1xufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IHN0cmluZ2lmeSB9ID0gcmVxdWlyZSgnanNvbmZpbGUvdXRpbHMnKVxuY29uc3QgeyBvdXRwdXRGaWxlIH0gPSByZXF1aXJlKCcuLi9vdXRwdXQnKVxuXG5hc3luYyBmdW5jdGlvbiBvdXRwdXRKc29uIChmaWxlLCBkYXRhLCBvcHRpb25zID0ge30pIHtcbiAgY29uc3Qgc3RyID0gc3RyaW5naWZ5KGRhdGEsIG9wdGlvbnMpXG5cbiAgYXdhaXQgb3V0cHV0RmlsZShmaWxlLCBzdHIsIG9wdGlvbnMpXG59XG5cbm1vZHVsZS5leHBvcnRzID0gb3V0cHV0SnNvblxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IHN0cmluZ2lmeSB9ID0gcmVxdWlyZSgnanNvbmZpbGUvdXRpbHMnKVxuY29uc3QgeyBvdXRwdXRGaWxlU3luYyB9ID0gcmVxdWlyZSgnLi4vb3V0cHV0JylcblxuZnVuY3Rpb24gb3V0cHV0SnNvblN5bmMgKGZpbGUsIGRhdGEsIG9wdGlvbnMpIHtcbiAgY29uc3Qgc3RyID0gc3RyaW5naWZ5KGRhdGEsIG9wdGlvbnMpXG5cbiAgb3V0cHV0RmlsZVN5bmMoZmlsZSwgc3RyLCBvcHRpb25zKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG91dHB1dEpzb25TeW5jXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHUgPSByZXF1aXJlKCd1bml2ZXJzYWxpZnknKS5mcm9tUHJvbWlzZVxuY29uc3QganNvbkZpbGUgPSByZXF1aXJlKCcuL2pzb25maWxlJylcblxuanNvbkZpbGUub3V0cHV0SnNvbiA9IHUocmVxdWlyZSgnLi9vdXRwdXQtanNvbicpKVxuanNvbkZpbGUub3V0cHV0SnNvblN5bmMgPSByZXF1aXJlKCcuL291dHB1dC1qc29uLXN5bmMnKVxuLy8gYWxpYXNlc1xuanNvbkZpbGUub3V0cHV0SlNPTiA9IGpzb25GaWxlLm91dHB1dEpzb25cbmpzb25GaWxlLm91dHB1dEpTT05TeW5jID0ganNvbkZpbGUub3V0cHV0SnNvblN5bmNcbmpzb25GaWxlLndyaXRlSlNPTiA9IGpzb25GaWxlLndyaXRlSnNvblxuanNvbkZpbGUud3JpdGVKU09OU3luYyA9IGpzb25GaWxlLndyaXRlSnNvblN5bmNcbmpzb25GaWxlLnJlYWRKU09OID0ganNvbkZpbGUucmVhZEpzb25cbmpzb25GaWxlLnJlYWRKU09OU3luYyA9IGpzb25GaWxlLnJlYWRKc29uU3luY1xuXG5tb2R1bGUuZXhwb3J0cyA9IGpzb25GaWxlXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGZzID0gcmVxdWlyZSgnZ3JhY2VmdWwtZnMnKVxuY29uc3QgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKVxuY29uc3QgY29weVN5bmMgPSByZXF1aXJlKCcuLi9jb3B5LXN5bmMnKS5jb3B5U3luY1xuY29uc3QgcmVtb3ZlU3luYyA9IHJlcXVpcmUoJy4uL3JlbW92ZScpLnJlbW92ZVN5bmNcbmNvbnN0IG1rZGlycFN5bmMgPSByZXF1aXJlKCcuLi9ta2RpcnMnKS5ta2RpcnBTeW5jXG5jb25zdCBzdGF0ID0gcmVxdWlyZSgnLi4vdXRpbC9zdGF0JylcblxuZnVuY3Rpb24gbW92ZVN5bmMgKHNyYywgZGVzdCwgb3B0cykge1xuICBvcHRzID0gb3B0cyB8fCB7fVxuICBjb25zdCBvdmVyd3JpdGUgPSBvcHRzLm92ZXJ3cml0ZSB8fCBvcHRzLmNsb2JiZXIgfHwgZmFsc2VcblxuICBjb25zdCB7IHNyY1N0YXQgfSA9IHN0YXQuY2hlY2tQYXRoc1N5bmMoc3JjLCBkZXN0LCAnbW92ZScpXG4gIHN0YXQuY2hlY2tQYXJlbnRQYXRoc1N5bmMoc3JjLCBzcmNTdGF0LCBkZXN0LCAnbW92ZScpXG4gIG1rZGlycFN5bmMocGF0aC5kaXJuYW1lKGRlc3QpKVxuICByZXR1cm4gZG9SZW5hbWUoc3JjLCBkZXN0LCBvdmVyd3JpdGUpXG59XG5cbmZ1bmN0aW9uIGRvUmVuYW1lIChzcmMsIGRlc3QsIG92ZXJ3cml0ZSkge1xuICBpZiAob3ZlcndyaXRlKSB7XG4gICAgcmVtb3ZlU3luYyhkZXN0KVxuICAgIHJldHVybiByZW5hbWUoc3JjLCBkZXN0LCBvdmVyd3JpdGUpXG4gIH1cbiAgaWYgKGZzLmV4aXN0c1N5bmMoZGVzdCkpIHRocm93IG5ldyBFcnJvcignZGVzdCBhbHJlYWR5IGV4aXN0cy4nKVxuICByZXR1cm4gcmVuYW1lKHNyYywgZGVzdCwgb3ZlcndyaXRlKVxufVxuXG5mdW5jdGlvbiByZW5hbWUgKHNyYywgZGVzdCwgb3ZlcndyaXRlKSB7XG4gIHRyeSB7XG4gICAgZnMucmVuYW1lU3luYyhzcmMsIGRlc3QpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmIChlcnIuY29kZSAhPT0gJ0VYREVWJykgdGhyb3cgZXJyXG4gICAgcmV0dXJuIG1vdmVBY3Jvc3NEZXZpY2Uoc3JjLCBkZXN0LCBvdmVyd3JpdGUpXG4gIH1cbn1cblxuZnVuY3Rpb24gbW92ZUFjcm9zc0RldmljZSAoc3JjLCBkZXN0LCBvdmVyd3JpdGUpIHtcbiAgY29uc3Qgb3B0cyA9IHtcbiAgICBvdmVyd3JpdGUsXG4gICAgZXJyb3JPbkV4aXN0OiB0cnVlXG4gIH1cbiAgY29weVN5bmMoc3JjLCBkZXN0LCBvcHRzKVxuICByZXR1cm4gcmVtb3ZlU3luYyhzcmMpXG59XG5cbm1vZHVsZS5leHBvcnRzID0gbW92ZVN5bmNcbiIsICIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG1vdmVTeW5jOiByZXF1aXJlKCcuL21vdmUtc3luYycpXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGZzID0gcmVxdWlyZSgnZ3JhY2VmdWwtZnMnKVxuY29uc3QgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKVxuY29uc3QgY29weSA9IHJlcXVpcmUoJy4uL2NvcHknKS5jb3B5XG5jb25zdCByZW1vdmUgPSByZXF1aXJlKCcuLi9yZW1vdmUnKS5yZW1vdmVcbmNvbnN0IG1rZGlycCA9IHJlcXVpcmUoJy4uL21rZGlycycpLm1rZGlycFxuY29uc3QgcGF0aEV4aXN0cyA9IHJlcXVpcmUoJy4uL3BhdGgtZXhpc3RzJykucGF0aEV4aXN0c1xuY29uc3Qgc3RhdCA9IHJlcXVpcmUoJy4uL3V0aWwvc3RhdCcpXG5cbmZ1bmN0aW9uIG1vdmUgKHNyYywgZGVzdCwgb3B0cywgY2IpIHtcbiAgaWYgKHR5cGVvZiBvcHRzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2IgPSBvcHRzXG4gICAgb3B0cyA9IHt9XG4gIH1cblxuICBjb25zdCBvdmVyd3JpdGUgPSBvcHRzLm92ZXJ3cml0ZSB8fCBvcHRzLmNsb2JiZXIgfHwgZmFsc2VcblxuICBzdGF0LmNoZWNrUGF0aHMoc3JjLCBkZXN0LCAnbW92ZScsIChlcnIsIHN0YXRzKSA9PiB7XG4gICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICBjb25zdCB7IHNyY1N0YXQgfSA9IHN0YXRzXG4gICAgc3RhdC5jaGVja1BhcmVudFBhdGhzKHNyYywgc3JjU3RhdCwgZGVzdCwgJ21vdmUnLCBlcnIgPT4ge1xuICAgICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICAgIG1rZGlycChwYXRoLmRpcm5hbWUoZGVzdCksIGVyciA9PiB7XG4gICAgICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgICAgIHJldHVybiBkb1JlbmFtZShzcmMsIGRlc3QsIG92ZXJ3cml0ZSwgY2IpXG4gICAgICB9KVxuICAgIH0pXG4gIH0pXG59XG5cbmZ1bmN0aW9uIGRvUmVuYW1lIChzcmMsIGRlc3QsIG92ZXJ3cml0ZSwgY2IpIHtcbiAgaWYgKG92ZXJ3cml0ZSkge1xuICAgIHJldHVybiByZW1vdmUoZGVzdCwgZXJyID0+IHtcbiAgICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgICByZXR1cm4gcmVuYW1lKHNyYywgZGVzdCwgb3ZlcndyaXRlLCBjYilcbiAgICB9KVxuICB9XG4gIHBhdGhFeGlzdHMoZGVzdCwgKGVyciwgZGVzdEV4aXN0cykgPT4ge1xuICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgaWYgKGRlc3RFeGlzdHMpIHJldHVybiBjYihuZXcgRXJyb3IoJ2Rlc3QgYWxyZWFkeSBleGlzdHMuJykpXG4gICAgcmV0dXJuIHJlbmFtZShzcmMsIGRlc3QsIG92ZXJ3cml0ZSwgY2IpXG4gIH0pXG59XG5cbmZ1bmN0aW9uIHJlbmFtZSAoc3JjLCBkZXN0LCBvdmVyd3JpdGUsIGNiKSB7XG4gIGZzLnJlbmFtZShzcmMsIGRlc3QsIGVyciA9PiB7XG4gICAgaWYgKCFlcnIpIHJldHVybiBjYigpXG4gICAgaWYgKGVyci5jb2RlICE9PSAnRVhERVYnKSByZXR1cm4gY2IoZXJyKVxuICAgIHJldHVybiBtb3ZlQWNyb3NzRGV2aWNlKHNyYywgZGVzdCwgb3ZlcndyaXRlLCBjYilcbiAgfSlcbn1cblxuZnVuY3Rpb24gbW92ZUFjcm9zc0RldmljZSAoc3JjLCBkZXN0LCBvdmVyd3JpdGUsIGNiKSB7XG4gIGNvbnN0IG9wdHMgPSB7XG4gICAgb3ZlcndyaXRlLFxuICAgIGVycm9yT25FeGlzdDogdHJ1ZVxuICB9XG4gIGNvcHkoc3JjLCBkZXN0LCBvcHRzLCBlcnIgPT4ge1xuICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgcmV0dXJuIHJlbW92ZShzcmMsIGNiKVxuICB9KVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1vdmVcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgdSA9IHJlcXVpcmUoJ3VuaXZlcnNhbGlmeScpLmZyb21DYWxsYmFja1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG1vdmU6IHUocmVxdWlyZSgnLi9tb3ZlJykpXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBFeHBvcnQgcHJvbWlzZWlmaWVkIGdyYWNlZnVsLWZzOlxuICAuLi5yZXF1aXJlKCcuL2ZzJyksXG4gIC8vIEV4cG9ydCBleHRyYSBtZXRob2RzOlxuICAuLi5yZXF1aXJlKCcuL2NvcHktc3luYycpLFxuICAuLi5yZXF1aXJlKCcuL2NvcHknKSxcbiAgLi4ucmVxdWlyZSgnLi9lbXB0eScpLFxuICAuLi5yZXF1aXJlKCcuL2Vuc3VyZScpLFxuICAuLi5yZXF1aXJlKCcuL2pzb24nKSxcbiAgLi4ucmVxdWlyZSgnLi9ta2RpcnMnKSxcbiAgLi4ucmVxdWlyZSgnLi9tb3ZlLXN5bmMnKSxcbiAgLi4ucmVxdWlyZSgnLi9tb3ZlJyksXG4gIC4uLnJlcXVpcmUoJy4vb3V0cHV0JyksXG4gIC4uLnJlcXVpcmUoJy4vcGF0aC1leGlzdHMnKSxcbiAgLi4ucmVxdWlyZSgnLi9yZW1vdmUnKVxufVxuXG4vLyBFeHBvcnQgZnMucHJvbWlzZXMgYXMgYSBnZXR0ZXIgcHJvcGVydHkgc28gdGhhdCB3ZSBkb24ndCB0cmlnZ2VyXG4vLyBFeHBlcmltZW50YWxXYXJuaW5nIGJlZm9yZSBmcy5wcm9taXNlcyBpcyBhY3R1YWxseSBhY2Nlc3NlZC5cbmNvbnN0IGZzID0gcmVxdWlyZSgnZnMnKVxuaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZnMsICdwcm9taXNlcycpKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUuZXhwb3J0cywgJ3Byb21pc2VzJywge1xuICAgIGdldCAoKSB7IHJldHVybiBmcy5wcm9taXNlcyB9XG4gIH0pXG59XG4iLCAiaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzLWV4dHJhJztcblxuY29uc3QgQ0RLX09VVERJUl9QUkVGSVggPSAnY2RrLWludGVnLm91dCc7XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIHNpbmdsZSBpbnRlZ3JhdGlvbiB0ZXN0XG4gKlxuICogVGhpcyB0eXBlIGlzIGEgZGF0YS1vbmx5IHN0cnVjdHVyZSwgc28gaXQgY2FuIHRyaXZpYWxseSBiZSBwYXNzZWQgdG8gd29ya2Vycy5cbiAqIERlcml2ZWQgYXR0cmlidXRlcyBhcmUgY2FsY3VsYXRlZCB1c2luZyB0aGUgYEludGVnVGVzdGAgY2xhc3MuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW50ZWdUZXN0SW5mbyB7XG4gIC8qKlxuICAgKiBQYXRoIHRvIHRoZSBmaWxlIHRvIHJ1blxuICAgKlxuICAgKiBQYXRoIGlzIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LlxuICAgKi9cbiAgcmVhZG9ubHkgZmlsZU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHJvb3QgZGlyZWN0b3J5IHdlIGRpc2NvdmVyZWQgdGhpcyB0ZXN0IGZyb21cbiAgICpcbiAgICogUGF0aCBpcyByZWxhdGl2ZSB0byB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS5cbiAgICovXG4gIHJlYWRvbmx5IGRpc2NvdmVyeVJvb3Q6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIENMSSBjb21tYW5kIHVzZWQgdG8gcnVuIHRoaXMgdGVzdC5cbiAgICogSWYgaXQgY29udGFpbnMge2ZpbGVQYXRofSwgdGhlIHRlc3QgZmlsZSBuYW1lcyB3aWxsIGJlIHN1YnN0aXR1dGVkIGF0IHRoYXQgcGxhY2UgaW4gdGhlIGNvbW1hbmQgZm9yIGVhY2ggcnVuLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRlc3QgcnVuIGNvbW1hbmQgd2lsbCBiZSBgbm9kZSB7ZmlsZVBhdGh9YFxuICAgKi9cbiAgcmVhZG9ubHkgYXBwQ29tbWFuZD86IHN0cmluZztcblxuICAvKipcbiAgICogdHJ1ZSBpZiB0aGlzIHRlc3QgaXMgcnVubmluZyBpbiB3YXRjaCBtb2RlXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSB3YXRjaD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogRGVyaXZlZCBpbmZvcm1hdGlvbiBmb3IgSW50ZWdUZXN0c1xuICovXG5leHBvcnQgY2xhc3MgSW50ZWdUZXN0IHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBmaWxlIHRvIHJ1blxuICAgKlxuICAgKiBQYXRoIGlzIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGZpbGVOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFJlbGF0aXZlIHBhdGggdG8gdGhlIGZpbGUgdG8gcnVuXG4gICAqXG4gICAqIFJlbGF0aXZlIGZyb20gdGhlIFwiZGlzY292ZXJ5IHJvb3RcIi5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBkaXNjb3ZlcnlSZWxhdGl2ZUZpbGVOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBmaWxlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYWJzb2x1dGVGaWxlTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbm9ybWFsaXplZCBuYW1lIG9mIHRoZSB0ZXN0LiBUaGlzIG5hbWVcbiAgICogd2lsbCBiZSB0aGUgc2FtZSByZWdhcmRsZXNzIG9mIHdoYXQgZGlyZWN0b3J5IHRoZSB0b29sXG4gICAqIGlzIHJ1biBmcm9tLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG5vcm1hbGl6ZWRUZXN0TmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBEaXJlY3RvcnkgdGhlIHRlc3QgaXMgaW5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBkaXJlY3Rvcnk6IHN0cmluZztcblxuICAvKipcbiAgICogRGlzcGxheSBuYW1lIGZvciB0aGUgdGVzdFxuICAgKlxuICAgKiBEZXBlbmRzIG9uIHRoZSBkaXNjb3ZlcnkgZGlyZWN0b3J5LlxuICAgKlxuICAgKiBMb29rcyBsaWtlIGBpbnRlZy5teXRlc3RgIG9yIGBwYWNrYWdlL3Rlc3QvaW50ZWcubXl0ZXN0YC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB0ZXN0TmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQYXRoIG9mIHRoZSBzbmFwc2hvdCBkaXJlY3RvcnkgZm9yIHRoaXMgdGVzdFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHNuYXBzaG90RGlyOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBhdGggdG8gdGhlIHRlbXBvcmFyeSBvdXRwdXQgZGlyZWN0b3J5IGZvciB0aGlzIHRlc3RcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB0ZW1wb3JhcnlPdXRwdXREaXI6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIENMSSBjb21tYW5kIHVzZWQgdG8gcnVuIHRoaXMgdGVzdC5cbiAgICogSWYgaXQgY29udGFpbnMge2ZpbGVQYXRofSwgdGhlIHRlc3QgZmlsZSBuYW1lcyB3aWxsIGJlIHN1YnN0aXR1dGVkIGF0IHRoYXQgcGxhY2UgaW4gdGhlIGNvbW1hbmQgZm9yIGVhY2ggcnVuLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRlc3QgcnVuIGNvbW1hbmQgd2lsbCBiZSBgbm9kZSB7ZmlsZVBhdGh9YFxuICAgKi9cbiAgcmVhZG9ubHkgYXBwQ29tbWFuZDogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSBpbmZvOiBJbnRlZ1Rlc3RJbmZvKSB7XG4gICAgdGhpcy5hcHBDb21tYW5kID0gaW5mby5hcHBDb21tYW5kID8/ICdub2RlIHtmaWxlUGF0aH0nO1xuICAgIHRoaXMuYWJzb2x1dGVGaWxlTmFtZSA9IHBhdGgucmVzb2x2ZShpbmZvLmZpbGVOYW1lKTtcbiAgICB0aGlzLmZpbGVOYW1lID0gcGF0aC5yZWxhdGl2ZShwcm9jZXNzLmN3ZCgpLCBpbmZvLmZpbGVOYW1lKTtcblxuICAgIGNvbnN0IHBhcnNlZCA9IHBhdGgucGFyc2UodGhpcy5maWxlTmFtZSk7XG4gICAgdGhpcy5kaXNjb3ZlcnlSZWxhdGl2ZUZpbGVOYW1lID0gcGF0aC5yZWxhdGl2ZShpbmZvLmRpc2NvdmVyeVJvb3QsIGluZm8uZmlsZU5hbWUpO1xuICAgIC8vIGlmIGAtLXdhdGNoYCB0aGVuIHdlIG5lZWQgdGhlIGRpcmVjdG9yeSB0byBiZSB0aGUgY3dkXG4gICAgdGhpcy5kaXJlY3RvcnkgPSBpbmZvLndhdGNoID8gcHJvY2Vzcy5jd2QoKSA6IHBhcnNlZC5kaXI7XG5cbiAgICAvLyBpZiB3ZSBhcmUgcnVubmluZyBpbiBhIHBhY2thZ2UgZGlyZWN0b3J5IHRoZW4ganVzdCB1c2UgdGhlIGZpbGVOYW1lXG4gICAgLy8gYXMgdGhlIHRlc3RuYW1lLCBidXQgaWYgd2UgYXJlIHJ1bm5pbmcgaW4gYSBwYXJlbnQgZGlyZWN0b3J5IHdpdGhcbiAgICAvLyBtdWx0aXBsZSBwYWNrYWdlcyB0aGVuIHVzZSB0aGUgZGlyZWN0b3J5L2ZpbGVuYW1lIGFzIHRoZSB0ZXN0bmFtZVxuICAgIC8vXG4gICAgLy8gTG9va3MgZWl0aGVyIGxpa2UgYGludGVnLm15dGVzdGAgb3IgYHBhY2thZ2UvdGVzdC9pbnRlZy5teXRlc3RgLlxuICAgIGNvbnN0IHJlbERpc2NvdmVyeVJvb3QgPSBwYXRoLnJlbGF0aXZlKHByb2Nlc3MuY3dkKCksIGluZm8uZGlzY292ZXJ5Um9vdCk7XG4gICAgdGhpcy50ZXN0TmFtZSA9IHRoaXMuZGlyZWN0b3J5ID09PSBwYXRoLmpvaW4ocmVsRGlzY292ZXJ5Um9vdCwgJ3Rlc3QnKSB8fCB0aGlzLmRpcmVjdG9yeSA9PT0gcGF0aC5qb2luKHJlbERpc2NvdmVyeVJvb3QpXG4gICAgICA/IHBhcnNlZC5uYW1lXG4gICAgICA6IHBhdGguam9pbihwYXRoLnJlbGF0aXZlKHRoaXMuaW5mby5kaXNjb3ZlcnlSb290LCBwYXJzZWQuZGlyKSwgcGFyc2VkLm5hbWUpO1xuXG4gICAgdGhpcy5ub3JtYWxpemVkVGVzdE5hbWUgPSBwYXJzZWQubmFtZTtcbiAgICB0aGlzLnNuYXBzaG90RGlyID0gcGF0aC5qb2luKHBhcnNlZC5kaXIsIGAke3BhcnNlZC5iYXNlfS5zbmFwc2hvdGApO1xuICAgIHRoaXMudGVtcG9yYXJ5T3V0cHV0RGlyID0gcGF0aC5qb2luKHBhcnNlZC5kaXIsIGAke0NES19PVVRESVJfUFJFRklYfS4ke3BhcnNlZC5iYXNlfS5zbmFwc2hvdGApO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhpcyB0ZXN0IG1hdGNoZXMgdGhlIHVzZXItZ2l2ZW4gbmFtZVxuICAgKlxuICAgKiBXZSBhcmUgdmVyeSBsZW5pZW50IGhlcmUuIEEgbmFtZSBtYXRjaGVzIGlmIGl0IG1hdGNoZXM6XG4gICAqXG4gICAqIC0gVGhlIENXRC1yZWxhdGl2ZSBmaWxlbmFtZVxuICAgKiAtIFRoZSBkaXNjb3Zlcnkgcm9vdC1yZWxhdGl2ZSBmaWxlbmFtZVxuICAgKiAtIFRoZSBzdWl0ZSBuYW1lXG4gICAqIC0gVGhlIGFic29sdXRlIGZpbGVuYW1lXG4gICAqL1xuICBwdWJsaWMgbWF0Y2hlcyhuYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gW1xuICAgICAgdGhpcy5maWxlTmFtZSxcbiAgICAgIHRoaXMuZGlzY292ZXJ5UmVsYXRpdmVGaWxlTmFtZSxcbiAgICAgIHRoaXMudGVzdE5hbWUsXG4gICAgICB0aGlzLmFic29sdXRlRmlsZU5hbWUsXG4gICAgXS5pbmNsdWRlcyhuYW1lKTtcbiAgfVxufVxuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBob3cgaW50ZWdyYXRpb24gdGVzdCBmaWxlcyBhcmUgZGlzY292ZXJlZFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEludGVncmF0aW9uVGVzdHNEaXNjb3ZlcnlPcHRpb25zIHtcbiAgLyoqXG4gICAqIElmIHRoaXMgaXMgc2V0IHRvIHRydWUgdGhlbiB0aGUgbGlzdCBvZiB0ZXN0c1xuICAgKiBwcm92aWRlZCB3aWxsIGJlIGV4Y2x1ZGVkXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBleGNsdWRlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICAqIExpc3Qgb2YgdGVzdHMgdG8gaW5jbHVkZSAob3IgZXhjbHVkZSBpZiBgZXhjbHVkZT10cnVlYClcbiAgICAqXG4gICAgKiBAZGVmYXVsdCAtIGFsbCBtYXRjaGVkIGZpbGVzXG4gICAgKi9cbiAgcmVhZG9ubHkgdGVzdHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogQSBtYXAgb2Ygb2YgdGhlIGFwcCBjb21tYW5kcyB0byBydW4gaW50ZWdyYXRpb24gdGVzdHMgd2l0aCxcbiAgICogYW5kIHRoZSByZWdleCBwYXR0ZXJucyBtYXRjaGluZyB0aGUgaW50ZWdyYXRpb24gdGVzdCBmaWxlcyBlYWNoIGFwcCBjb21tYW5kLlxuICAgKlxuICAgKiBJZiB0aGUgYXBwIGNvbW1hbmQgY29udGFpbnMge2ZpbGVQYXRofSwgdGhlIHRlc3QgZmlsZSBuYW1lcyB3aWxsIGJlIHN1YnN0aXR1dGVkIGF0IHRoYXQgcGxhY2UgaW4gdGhlIGNvbW1hbmQgZm9yIGVhY2ggcnVuLlxuICAgKi9cbiAgcmVhZG9ubHkgdGVzdENhc2VzOiB7XG4gICAgW2FwcDogc3RyaW5nXTogc3RyaW5nW11cbiAgfVxufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIFB5dGhvbiBleGVjdXRhYmxlIGZvciB0aGUgY3VycmVudCBPU1xuICovXG5mdW5jdGlvbiBweXRob25FeGVjdXRhYmxlKCkge1xuICBsZXQgcHl0aG9uID0gJ3B5dGhvbjMnO1xuICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xuICAgIHB5dGhvbiA9ICdweXRob24nO1xuICB9XG4gIHJldHVybiBweXRob247XG59XG5cbi8qKlxuICogRGlzY292ZXIgaW50ZWdyYXRpb24gdGVzdHNcbiAqL1xuZXhwb3J0IGNsYXNzIEludGVncmF0aW9uVGVzdHMge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGRpcmVjdG9yeTogc3RyaW5nKSB7fVxuXG4gIC8qKlxuICAgKiBHZXQgaW50ZWdyYXRpb24gdGVzdHMgZGlzY292ZXJ5IG9wdGlvbnMgZnJvbSBDTEkgb3B0aW9uc1xuICAgKi9cbiAgcHVibGljIGFzeW5jIGZyb21DbGlPcHRpb25zKG9wdGlvbnM6IHtcbiAgICBhcHA/OiBzdHJpbmc7XG4gICAgZXhjbHVkZT86IGJvb2xlYW4sXG4gICAgbGFuZ3VhZ2U/OiBzdHJpbmdbXSxcbiAgICB0ZXN0UmVnZXg/OiBzdHJpbmdbXSxcbiAgICB0ZXN0cz86IHN0cmluZ1tdLFxuICB9KTogUHJvbWlzZTxJbnRlZ1Rlc3RbXT4ge1xuICAgIGNvbnN0IGJhc2VPcHRpb25zID0ge1xuICAgICAgdGVzdHM6IG9wdGlvbnMudGVzdHMsXG4gICAgICBleGNsdWRlOiBvcHRpb25zLmV4Y2x1ZGUsXG4gICAgfTtcblxuICAgIC8vIEV4cGxpY2l0bHkgc2V0IGJvdGgsIGFwcCBhbmQgdGVzdC1yZWdleFxuICAgIGlmIChvcHRpb25zLmFwcCAmJiBvcHRpb25zLnRlc3RSZWdleCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGlzY292ZXIoe1xuICAgICAgICB0ZXN0Q2FzZXM6IHtcbiAgICAgICAgICBbb3B0aW9ucy5hcHBdOiBvcHRpb25zLnRlc3RSZWdleCxcbiAgICAgICAgfSxcbiAgICAgICAgLi4uYmFzZU9wdGlvbnMsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBVc2UgdGhlIHNlbGVjdGVkIHByZXNldHNcbiAgICBpZiAoIW9wdGlvbnMuYXBwICYmICFvcHRpb25zLnRlc3RSZWdleCkge1xuICAgICAgLy8gT25seSBjYXNlIHdpdGggbXVsdGlwbGUgbGFuZ3VhZ2VzLCBpLmUuIHRoZSBvbmx5IHRpbWUgd2UgbmVlZCB0byBjaGVjayB0aGUgc3BlY2lhbCBjYXNlXG4gICAgICBjb25zdCBpZ25vcmVVbmNvbXBpbGVkVHlwZVNjcmlwdCA9IG9wdGlvbnMubGFuZ3VhZ2U/LmluY2x1ZGVzKCdqYXZhc2NyaXB0JykgJiYgb3B0aW9ucy5sYW5ndWFnZT8uaW5jbHVkZXMoJ3R5cGVzY3JpcHQnKTtcblxuICAgICAgcmV0dXJuIHRoaXMuZGlzY292ZXIoe1xuICAgICAgICB0ZXN0Q2FzZXM6IHRoaXMuZ2V0TGFuZ3VhZ2VQcmVzZXRzKG9wdGlvbnMubGFuZ3VhZ2UpLFxuICAgICAgICAuLi5iYXNlT3B0aW9ucyxcbiAgICAgIH0sIGlnbm9yZVVuY29tcGlsZWRUeXBlU2NyaXB0KTtcbiAgICB9XG5cbiAgICAvLyBPbmx5IG9uZSBvZiBhcHAgb3IgdGVzdC1yZWdleCBpcyBzZXQsIHdpdGggYSBzaW5nbGUgcHJlc2V0IHNlbGVjdGVkXG4gICAgLy8gPT4gb3ZlcnJpZGUgZWl0aGVyIGFwcCBvciB0ZXN0LXJlZ2V4XG4gICAgaWYgKG9wdGlvbnMubGFuZ3VhZ2U/Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgY29uc3QgW3ByZXNldEFwcCwgcHJlc2V0VGVzdFJlZ2V4XSA9IHRoaXMuZ2V0TGFuZ3VhZ2VQcmVzZXQob3B0aW9ucy5sYW5ndWFnZVswXSk7XG4gICAgICByZXR1cm4gdGhpcy5kaXNjb3Zlcih7XG4gICAgICAgIHRlc3RDYXNlczoge1xuICAgICAgICAgIFtvcHRpb25zLmFwcCA/PyBwcmVzZXRBcHBdOiBvcHRpb25zLnRlc3RSZWdleCA/PyBwcmVzZXRUZXN0UmVnZXgsXG4gICAgICAgIH0sXG4gICAgICAgIC4uLmJhc2VPcHRpb25zLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gT25seSBvbmUgb2YgYXBwIG9yIHRlc3QtcmVnZXggaXMgc2V0LCB3aXRoIG11bHRpcGxlIHByZXNldHNcbiAgICAvLyA9PiBpbXBvc3NpYmxlIHRvIHJlc29sdmVcbiAgICBjb25zdCBvcHRpb24gPSBvcHRpb25zLmFwcCA/ICctLWFwcCcgOiAnLS10ZXN0LXJlZ2V4JztcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE9ubHkgYSBzaW5nbGUgXCItLWxhbmd1YWdlXCIgY2FuIGJlIHVzZWQgd2l0aCBcIiR7b3B0aW9ufVwiLiBBbHRlcm5hdGl2ZWx5IHByb3ZpZGUgYm90aCBcIi0tYXBwXCIgYW5kIFwiLS10ZXN0LXJlZ2V4XCIgdG8gZnVsbHkgY3VzdG9taXplIHRoZSBjb25maWd1cmF0aW9uLmApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGZvciBhIGxhbmd1YWdlXG4gICAqL1xuICBwcml2YXRlIGdldExhbmd1YWdlUHJlc2V0KGxhbmd1YWdlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBsYW5ndWFnZVByZXNldHM6IHtcbiAgICAgIFtsYW5ndWFnZTogc3RyaW5nXTogW3N0cmluZywgc3RyaW5nW11dXG4gICAgfSA9IHtcbiAgICAgIGphdmFzY3JpcHQ6IFsnbm9kZSB7ZmlsZVBhdGh9JywgWydeaW50ZWdcXFxcLi4qXFxcXC5qcyQnXV0sXG4gICAgICB0eXBlc2NyaXB0OiBbJ25vZGUgLXIgdHMtbm9kZS9yZWdpc3RlciB7ZmlsZVBhdGh9JywgWydeaW50ZWdcXFxcLig/IS4qXFxcXC5kXFxcXC50cyQpLipcXFxcLnRzJCddXSxcbiAgICAgIHB5dGhvbjogW2Ake3B5dGhvbkV4ZWN1dGFibGUoKX0ge2ZpbGVQYXRofWAsIFsnXmludGVnXy4qXFxcXC5weSQnXV0sXG4gICAgICBnbzogWydnbyBydW4ge2ZpbGVQYXRofScsIFsnXmludGVnXy4qXFxcXC5nbyQnXV0sXG4gICAgfTtcblxuICAgIHJldHVybiBsYW5ndWFnZVByZXNldHNbbGFuZ3VhZ2VdO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgY29uZmlnIGZvciBhbGwgc2VsZWN0ZWQgbGFuZ3VhZ2VzXG4gICAqL1xuICBwcml2YXRlIGdldExhbmd1YWdlUHJlc2V0cyhsYW5ndWFnZXM6IHN0cmluZ1tdID0gW10pIHtcbiAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgbGFuZ3VhZ2VzXG4gICAgICAgIC5tYXAobGFuZ3VhZ2UgPT4gdGhpcy5nZXRMYW5ndWFnZVByZXNldChsYW5ndWFnZSkpXG4gICAgICAgIC5maWx0ZXIoQm9vbGVhbiksXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJZiB0aGUgdXNlciBwcm92aWRlcyBhIGxpc3Qgb2YgdGVzdHMsIHRoZXNlIGNhbiBlaXRoZXIgYmUgYSBsaXN0IG9mIHRlc3RzIHRvIGluY2x1ZGUgb3IgYSBsaXN0IG9mIHRlc3RzIHRvIGV4Y2x1ZGUuXG4gICAqXG4gICAqIC0gSWYgaXQgaXMgYSBsaXN0IG9mIHRlc3RzIHRvIGluY2x1ZGUgdGhlbiB3ZSBkaXNjb3ZlciBhbGwgYXZhaWxhYmxlIHRlc3RzIGFuZCBjaGVjayB3aGV0aGVyIHRoZXkgaGF2ZSBwcm92aWRlZCB2YWxpZCB0ZXN0cy5cbiAgICogICBJZiB0aGV5IGhhdmUgcHJvdmlkZWQgYSB0ZXN0IG5hbWUgdGhhdCB3ZSBkb24ndCBmaW5kLCB0aGVuIHdlIHdyaXRlIG91dCB0aGF0IGVycm9yIG1lc3NhZ2UuXG4gICAqIC0gSWYgaXQgaXMgYSBsaXN0IG9mIHRlc3RzIHRvIGV4Y2x1ZGUsIHRoZW4gd2UgZGlzY292ZXIgYWxsIGF2YWlsYWJsZSB0ZXN0cyBhbmQgZmlsdGVyIG91dCB0aGUgdGVzdHMgdGhhdCB3ZXJlIHByb3ZpZGVkIGJ5IHRoZSB1c2VyLlxuICAgKi9cbiAgcHJpdmF0ZSBmaWx0ZXJUZXN0cyhkaXNjb3ZlcmVkVGVzdHM6IEludGVnVGVzdFtdLCByZXF1ZXN0ZWRUZXN0cz86IHN0cmluZ1tdLCBleGNsdWRlPzogYm9vbGVhbik6IEludGVnVGVzdFtdIHtcbiAgICBpZiAoIXJlcXVlc3RlZFRlc3RzKSB7XG4gICAgICByZXR1cm4gZGlzY292ZXJlZFRlc3RzO1xuICAgIH1cblxuICAgIGNvbnN0IGFsbFRlc3RzID0gZGlzY292ZXJlZFRlc3RzLmZpbHRlcih0ID0+IHtcbiAgICAgIGNvbnN0IG1hdGNoZXMgPSByZXF1ZXN0ZWRUZXN0cy5zb21lKHBhdHRlcm4gPT4gdC5tYXRjaGVzKHBhdHRlcm4pKTtcbiAgICAgIHJldHVybiBtYXRjaGVzICE9PSAhIWV4Y2x1ZGU7IC8vIExvb2tzIHdlaXJkIGJ1dCBpcyBlcXVhbCB0byAobWF0Y2hlcyAmJiAhZXhjbHVkZSkgfHwgKCFtYXRjaGVzICYmIGV4Y2x1ZGUpXG4gICAgfSk7XG5cbiAgICAvLyBJZiBub3QgZXhjbHVkaW5nLCBhbGwgcGF0dGVybnMgbXVzdCBoYXZlIG1hdGNoZWQgYXQgbGVhc3Qgb25lIHRlc3RcbiAgICBpZiAoIWV4Y2x1ZGUpIHtcbiAgICAgIGNvbnN0IHVubWF0Y2hlZFBhdHRlcm5zID0gcmVxdWVzdGVkVGVzdHMuZmlsdGVyKHBhdHRlcm4gPT4gIWRpc2NvdmVyZWRUZXN0cy5zb21lKHQgPT4gdC5tYXRjaGVzKHBhdHRlcm4pKSk7XG4gICAgICBmb3IgKGNvbnN0IHVubWF0Y2hlZCBvZiB1bm1hdGNoZWRQYXR0ZXJucykge1xuICAgICAgICBwcm9jZXNzLnN0ZGVyci53cml0ZShgTm8gc3VjaCBpbnRlZyB0ZXN0OiAke3VubWF0Y2hlZH1cXG5gKTtcbiAgICAgIH1cbiAgICAgIGlmICh1bm1hdGNoZWRQYXR0ZXJucy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHByb2Nlc3Muc3RkZXJyLndyaXRlKGBBdmFpbGFibGUgdGVzdHM6ICR7ZGlzY292ZXJlZFRlc3RzLm1hcCh0ID0+IHQuZGlzY292ZXJ5UmVsYXRpdmVGaWxlTmFtZSkuam9pbignICcpfVxcbmApO1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGFsbFRlc3RzO1xuICB9XG5cbiAgLyoqXG4gICAqIFRha2VzIGFuIG9wdGlvbmFsIGxpc3Qgb2YgdGVzdHMgdG8gbG9vayBmb3IsIG90aGVyd2lzZVxuICAgKiBpdCB3aWxsIGxvb2sgZm9yIGFsbCB0ZXN0cyBmcm9tIHRoZSBkaXJlY3RvcnlcbiAgICpcbiAgICogQHBhcmFtIHRlc3RzIFRlc3RzIHRvIGluY2x1ZGUgb3IgZXhjbHVkZSwgdW5kZWZpbmVkIG1lYW5zIGluY2x1ZGUgYWxsIHRlc3RzLlxuICAgKiBAcGFyYW0gZXhjbHVkZSBXaGV0aGVyIHRoZSAndGVzdHMnIGxpc3QgaXMgaW5jbHVzaXZlIG9yIGV4Y2x1c2l2ZSAoaW5jbHVzaXZlIGJ5IGRlZmF1bHQpLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBkaXNjb3ZlcihvcHRpb25zOiBJbnRlZ3JhdGlvblRlc3RzRGlzY292ZXJ5T3B0aW9ucywgaWdub3JlVW5jb21waWxlZFR5cGVTY3JpcHQ6IGJvb2xlYW4gPSBmYWxzZSk6IFByb21pc2U8SW50ZWdUZXN0W10+IHtcbiAgICBjb25zdCBmaWxlcyA9IGF3YWl0IHRoaXMucmVhZFRyZWUoKTtcblxuICAgIGNvbnN0IHRlc3RDYXNlcyA9IE9iamVjdC5lbnRyaWVzKG9wdGlvbnMudGVzdENhc2VzKVxuICAgICAgLmZsYXRNYXAoKFthcHBDb21tYW5kLCBwYXR0ZXJuc10pID0+IGZpbGVzXG4gICAgICAgIC5maWx0ZXIoZmlsZU5hbWUgPT4gcGF0dGVybnMuc29tZSgocGF0dGVybikgPT4ge1xuICAgICAgICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChwYXR0ZXJuKTtcbiAgICAgICAgICByZXR1cm4gcmVnZXgudGVzdChmaWxlTmFtZSkgfHwgcmVnZXgudGVzdChwYXRoLmJhc2VuYW1lKGZpbGVOYW1lKSk7XG4gICAgICAgIH0pKVxuICAgICAgICAubWFwKGZpbGVOYW1lID0+IG5ldyBJbnRlZ1Rlc3Qoe1xuICAgICAgICAgIGRpc2NvdmVyeVJvb3Q6IHRoaXMuZGlyZWN0b3J5LFxuICAgICAgICAgIGZpbGVOYW1lLFxuICAgICAgICAgIGFwcENvbW1hbmQsXG4gICAgICAgIH0pKSxcbiAgICAgICk7XG5cbiAgICBjb25zdCBkaXNjb3ZlcmVkVGVzdHMgPSBpZ25vcmVVbmNvbXBpbGVkVHlwZVNjcmlwdCA/IHRoaXMuZmlsdGVyVW5jb21waWxlZFR5cGVTY3JpcHQodGVzdENhc2VzKSA6IHRlc3RDYXNlcztcblxuICAgIHJldHVybiB0aGlzLmZpbHRlclRlc3RzKGRpc2NvdmVyZWRUZXN0cywgb3B0aW9ucy50ZXN0cywgb3B0aW9ucy5leGNsdWRlKTtcbiAgfVxuXG4gIHByaXZhdGUgZmlsdGVyVW5jb21waWxlZFR5cGVTY3JpcHQodGVzdENhc2VzOiBJbnRlZ1Rlc3RbXSk6IEludGVnVGVzdFtdIHtcbiAgICBjb25zdCBqc1Rlc3RDYXNlcyA9IHRlc3RDYXNlcy5maWx0ZXIodCA9PiB0LmZpbGVOYW1lLmVuZHNXaXRoKCcuanMnKSk7XG5cbiAgICByZXR1cm4gdGVzdENhc2VzXG4gICAgICAvLyBSZW1vdmUgYWxsIFR5cGVTY3JpcHQgdGVzdCBjYXNlcyAoZW5kaW5nIGluIC50cylcbiAgICAgIC8vIGZvciB3aGljaCBhIGNvbXBpbGVkIHZlcnNpb24gaXMgcHJlc2VudCAoc2FtZSBuYW1lLCBlbmRpbmcgaW4gLmpzKVxuICAgICAgLmZpbHRlcigodHNDYW5kaWRhdGUpID0+IHtcbiAgICAgICAgaWYgKCF0c0NhbmRpZGF0ZS5maWxlTmFtZS5lbmRzV2l0aCgnLnRzJykpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ganNUZXN0Q2FzZXMuZmluZEluZGV4KGpzVGVzdCA9PiBqc1Rlc3QudGVzdE5hbWUgPT09IHRzQ2FuZGlkYXRlLnRlc3ROYW1lKSA9PT0gLTE7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVhZFRyZWUoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIGNvbnN0IHJldCA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG5cbiAgICBhc3luYyBmdW5jdGlvbiByZWN1cnNlKGRpcjogc3RyaW5nKSB7XG4gICAgICBjb25zdCBmaWxlcyA9IGF3YWl0IGZzLnJlYWRkaXIoZGlyKTtcbiAgICAgIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xuICAgICAgICBjb25zdCBmdWxsUGF0aCA9IHBhdGguam9pbihkaXIsIGZpbGUpO1xuICAgICAgICBjb25zdCBzdGF0ZiA9IGF3YWl0IGZzLnN0YXQoZnVsbFBhdGgpO1xuICAgICAgICBpZiAoc3RhdGYuaXNGaWxlKCkpIHsgcmV0LnB1c2goZnVsbFBhdGgpOyB9XG4gICAgICAgIGlmIChzdGF0Zi5pc0RpcmVjdG9yeSgpKSB7IGF3YWl0IHJlY3Vyc2UoZnVsbFBhdGgpOyB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgYXdhaXQgcmVjdXJzZSh0aGlzLmRpcmVjdG9yeSk7XG4gICAgcmV0dXJuIHJldDtcbiAgfVxufVxuIiwgImltcG9ydCB7IGZvcm1hdCB9IGZyb20gJ3V0aWwnO1xuaW1wb3J0IHsgUmVzb3VyY2VJbXBhY3QgfSBmcm9tICdAYXdzLWNkay9jbG91ZGZvcm1hdGlvbi1kaWZmJztcbmltcG9ydCAqIGFzIGNoYWxrIGZyb20gJ2NoYWxrJztcbmltcG9ydCAqIGFzIGxvZ2dlciBmcm9tICcuLi9sb2dnZXInO1xuaW1wb3J0IHsgSW50ZWdUZXN0SW5mbyB9IGZyb20gJy4uL3J1bm5lci9pbnRlZ3JhdGlvbi10ZXN0cyc7XG5cbi8qKlxuICogVGhlIGFnZ3JlZ2F0ZSByZXN1bHRzIGZyb20gcnVubmluZyBhc3NlcnRpb25zIG9uIGEgdGVzdCBjYXNlXG4gKi9cbmV4cG9ydCB0eXBlIEFzc2VydGlvblJlc3VsdHMgPSB7IFtpZDogc3RyaW5nXTogQXNzZXJ0aW9uUmVzdWx0IH07XG5cbi8qKlxuICogVGhlIHJlc3VsdCBvZiBhbiBpbmRpdmlkdWFsIGFzc2VydGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFzc2VydGlvblJlc3VsdCB7XG4gIC8qKlxuICAgKiBUaGUgYXNzZXJ0aW9uIG1lc3NhZ2UuIElmIHRoZSBhc3NlcnRpb24gZmFpbGVkLCB0aGlzIHdpbGxcbiAgICogaW5jbHVkZSB0aGUgcmVhc29uLlxuICAgKi9cbiAgcmVhZG9ubHkgbWVzc2FnZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBhc3NlcnRpb24gc3VjY2VlZGVkIG9yIGZhaWxlZFxuICAgKi9cbiAgcmVhZG9ubHkgc3RhdHVzOiAnc3VjY2VzcycgfCAnZmFpbCc7XG59XG5cbi8qKlxuICogQ29uZmlnIGZvciBhbiBpbnRlZ3JhdGlvbiB0ZXN0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW50ZWdUZXN0V29ya2VyQ29uZmlnIGV4dGVuZHMgSW50ZWdUZXN0SW5mbyB7XG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgYW55IGRlc3RydWN0aXZlIGNoYW5nZXNcbiAgICpcbiAgICogQGRlZmF1bHQgW11cbiAgICovXG4gIHJlYWRvbmx5IGRlc3RydWN0aXZlQ2hhbmdlcz86IERlc3RydWN0aXZlQ2hhbmdlW107XG59XG5cbi8qKlxuICogSW5mb3JtYXRpb24gb24gYW55IGRlc3RydWN0aXZlIGNoYW5nZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZXN0cnVjdGl2ZUNoYW5nZSB7XG4gIC8qKlxuICAgKiBUaGUgbG9naWNhbElkIG9mIHRoZSByZXNvdXJjZSB3aXRoIGEgZGVzdHJ1Y3RpdmUgY2hhbmdlXG4gICAqL1xuICByZWFkb25seSBsb2dpY2FsSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHN0YWNrIHRoYXQgY29udGFpbnMgdGhlIGRlc3RydWN0aXZlIGNoYW5nZVxuICAgKi9cbiAgcmVhZG9ubHkgc3RhY2tOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBpbXBhY3Qgb2YgdGhlIGRlc3RydWN0aXZlIGNoYW5nZVxuICAgKi9cbiAgcmVhZG9ubHkgaW1wYWN0OiBSZXNvdXJjZUltcGFjdDtcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGludGVncmF0aW9uIHRlc3RzIG1ldHJpY3MgZm9yIGEgZ2l2ZW4gd29ya2VyXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW50ZWdSdW5uZXJNZXRyaWNzIHtcbiAgLyoqXG4gICAqIFRoZSByZWdpb24gdGhlIHRlc3Qgd2FzIHJ1biBpblxuICAgKi9cbiAgcmVhZG9ubHkgcmVnaW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB0b3RhbCBkdXJhdGlvbiBvZiB0aGUgd29ya2VyLlxuICAgKiBUaGlzIHdpbGwgYmUgdGhlIHN1bSBvZiBhbGwgaW5kaXZpZHVhbCB0ZXN0IGR1cmF0aW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgZHVyYXRpb246IG51bWJlcjtcblxuICAvKipcbiAgICogQ29udGFpbnMgdGhlIGR1cmF0aW9uIG9mIGluZGl2aWR1YWwgdGVzdHMgdGhhdCB0aGVcbiAgICogd29ya2VyIGV4ZWN1dGVkLlxuICAgKlxuICAgKiBNYXAgb2YgdGVzdE5hbWUgdG8gZHVyYXRpb24uXG4gICAqL1xuICByZWFkb25seSB0ZXN0czogeyBbdGVzdE5hbWU6IHN0cmluZ106IG51bWJlciB9O1xuXG4gIC8qKlxuICAgKiBUaGUgcHJvZmlsZSB0aGF0IHdhcyB1c2VkIHRvIHJ1biB0aGUgdGVzdFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGRlZmF1bHQgcHJvZmlsZVxuICAgKi9cbiAgcmVhZG9ubHkgcHJvZmlsZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTbmFwc2hvdFZlcmlmaWNhdGlvbk9wdGlvbnMge1xuICAvKipcbiAgICogUmV0YWluIGZhaWxlZCBzbmFwc2hvdCBjb21wYXJpc29uc1xuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgcmV0YWluPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVmVyYm9zZSBtb2RlXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSB2ZXJib3NlPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBJbnRlZ3JhdGlvbiB0ZXN0IHJlc3VsdHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnRlZ0JhdGNoUmVzcG9uc2Uge1xuICAvKipcbiAgICogTGlzdCBvZiBmYWlsZWQgdGVzdHNcbiAgICovXG4gIHJlYWRvbmx5IGZhaWxlZFRlc3RzOiBJbnRlZ1Rlc3RJbmZvW107XG5cbiAgLyoqXG4gICAqIExpc3Qgb2YgSW50ZWdyYXRpb24gdGVzdCBtZXRyaWNzLiBFYWNoIGVudHJ5IGluIHRoZVxuICAgKiBsaXN0IHJlcHJlc2VudHMgbWV0cmljcyBmcm9tIGEgc2luZ2xlIHdvcmtlciAoYWNjb3VudCArIHJlZ2lvbikuXG4gICAqL1xuICByZWFkb25seSBtZXRyaWNzOiBJbnRlZ1J1bm5lck1ldHJpY3NbXTtcbn1cblxuLyoqXG4gKiBDb21tb24gb3B0aW9ucyBmb3IgcnVubmluZyBpbnRlZ3JhdGlvbiB0ZXN0c1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEludGVnVGVzdE9wdGlvbnMge1xuICAvKipcbiAgICogQSBsaXN0IG9mIGludGVncmF0aW9uIHRlc3RzIHRvIHJ1blxuICAgKiBpbiB0aGlzIGJhdGNoXG4gICAqL1xuICByZWFkb25seSB0ZXN0czogSW50ZWdUZXN0V29ya2VyQ29uZmlnW107XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgb3Igbm90IHRvIGRlc3Ryb3kgdGhlIHN0YWNrcyBhdCB0aGVcbiAgICogZW5kIG9mIHRoZSB0ZXN0XG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGNsZWFuPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hlbiB0aGlzIGlzIHNldCB0byBgdHJ1ZWAgdGhlIHNuYXBzaG90IHdpbGxcbiAgICogYmUgY3JlYXRlZCBfd2l0aG91dF8gcnVubmluZyB0aGUgaW50ZWdyYXRpb24gdGVzdFxuICAgKiBUaGUgcmVzdWx0aW5nIHNuYXBzaG90IFNIT1VMRCBOT1QgYmUgY2hlY2tlZCBpblxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgZHJ5UnVuPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGxldmVsIG9mIHZlcmJvc2l0eSBmb3IgbG9nZ2luZy5cbiAgICogSGlnaGVyIG51bWJlciBtZWFucyBtb3JlIG91dHB1dC5cbiAgICpcbiAgICogQGRlZmF1bHQgMFxuICAgKi9cbiAgcmVhZG9ubHkgdmVyYm9zaXR5PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBJZiB0aGlzIGlzIHNldCB0byB0cnVlIHRoZW4gdGhlIHN0YWNrIHVwZGF0ZSB3b3JrZmxvdyB3aWxsIGJlIGRpc2FibGVkXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IHVwZGF0ZVdvcmtmbG93PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogdHJ1ZSBpZiBydW5uaW5nIGluIHdhdGNoIG1vZGVcbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHdhdGNoPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIHBvc3NpYmxlIHJlYXNvbnMgZm9yIGEgZGlhZ25vc3RpY1xuICovXG5leHBvcnQgZW51bSBEaWFnbm9zdGljUmVhc29uIHtcbiAgLyoqXG4gICAqIFRoZSBpbnRlZ3JhdGlvbiB0ZXN0IGZhaWxlZCBiZWNhdXNlIHRoZXJlXG4gICAqIGlzIG5vdCBleGlzdGluZyBzbmFwc2hvdFxuICAgKi9cbiAgTk9fU05BUFNIT1QgPSAnTk9fU05BUFNIT1QnLFxuXG4gIC8qKlxuICAgKiBUaGUgaW50ZWdyYXRpb24gdGVzdCBmYWlsZWRcbiAgICovXG4gIFRFU1RfRkFJTEVEID0gJ1RFU1RfRkFJTEVEJyxcblxuICAvKipcbiAgICogVGhlcmUgd2FzIGFuIGVycm9yIHJ1bm5pbmcgdGhlIGludGVncmF0aW9uIHRlc3RcbiAgICovXG4gIFRFU1RfRVJST1IgPSAnVEVTVF9FUlJPUicsXG5cbiAgLyoqXG4gICAqIFRoZSBzbmFwc2hvdCB0ZXN0IGZhaWxlZCBiZWNhdXNlIHRoZSBhY3R1YWxcbiAgICogc25hcHNob3Qgd2FzIGRpZmZlcmVudCB0aGFuIHRoZSBleHBlY3RlZCBzbmFwc2hvdFxuICAgKi9cbiAgU05BUFNIT1RfRkFJTEVEID0gJ1NOQVBTSE9UX0ZBSUxFRCcsXG5cbiAgLyoqXG4gICAqIFRoZSBzbmFwc2hvdCB0ZXN0IGZhaWxlZCBiZWNhdXNlIHRoZXJlIHdhcyBhbiBlcnJvciBleGVjdXRpbmcgaXRcbiAgICovXG4gIFNOQVBTSE9UX0VSUk9SID0gJ1NOQVBTSE9UX0VSUk9SJyxcblxuICAvKipcbiAgICogVGhlIHNuYXBzaG90IHRlc3Qgc3VjY2VlZGVkXG4gICAqL1xuICBTTkFQU0hPVF9TVUNDRVNTID0gJ1NOQVBTSE9UX1NVQ0NFU1MnLFxuXG4gIC8qKlxuICAgKiBUaGUgaW50ZWdyYXRpb24gdGVzdCBzdWNjZWVkZWRcbiAgICovXG4gIFRFU1RfU1VDQ0VTUyA9ICdURVNUX1NVQ0NFU1MnLFxuXG4gIC8qKlxuICAgKiBUaGUgYXNzZXJ0aW9uIGZhaWxlZFxuICAgKi9cbiAgQVNTRVJUSU9OX0ZBSUxFRCA9ICdBU1NFUlRJT05fRkFJTEVEJyxcbn1cblxuLyoqXG4gKiBJbnRlZ3JhdGlvbiB0ZXN0IGRpYWdub3N0aWNzXG4gKiBUaGlzIGlzIHVzZWQgdG8gcmVwb3J0IGJhY2sgdGhlIHN0YXR1cyBvZiBlYWNoIHRlc3RcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEaWFnbm9zdGljIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSB0ZXN0XG4gICAqL1xuICByZWFkb25seSB0ZXN0TmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgc3RhY2tcbiAgICovXG4gIHJlYWRvbmx5IHN0YWNrTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZGlhZ25vc3RpYyBtZXNzYWdlXG4gICAqL1xuICByZWFkb25seSBtZXNzYWdlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB0aW1lIGl0IHRvb2sgdG8gcnVuIHRoZSB0ZXN0XG4gICAqL1xuICByZWFkb25seSBkdXJhdGlvbj86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIHJlYXNvbiBmb3IgdGhlIGRpYWdub3N0aWNcbiAgICovXG4gIHJlYWRvbmx5IHJlYXNvbjogRGlhZ25vc3RpY1JlYXNvbjtcblxuICAvKipcbiAgICogQWRkaXRpb25hbCBtZXNzYWdlcyB0byBwcmludFxuICAgKi9cbiAgcmVhZG9ubHkgYWRkaXRpb25hbE1lc3NhZ2VzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFJlbGV2YW50IGNvbmZpZyBvcHRpb25zIHRoYXQgd2VyZSB1c2VkIGZvciB0aGUgaW50ZWcgdGVzdFxuICAgKi9cbiAgcmVhZG9ubHkgY29uZmlnPzogUmVjb3JkPHN0cmluZywgYW55Pjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByaW50U3VtbWFyeSh0b3RhbDogbnVtYmVyLCBmYWlsZWQ6IG51bWJlcik6IHZvaWQge1xuICBpZiAoZmFpbGVkID4gMCkge1xuICAgIGxvZ2dlci5wcmludCgnJXM6ICAgICVzICVzLCAlcyB0b3RhbCcsIGNoYWxrLmJvbGQoJ1Rlc3RzJyksIGNoYWxrLnJlZChmYWlsZWQpLCBjaGFsay5yZWQoJ2ZhaWxlZCcpLCB0b3RhbCk7XG4gIH0gZWxzZSB7XG4gICAgbG9nZ2VyLnByaW50KCclczogICAgJXMgJXMsICVzIHRvdGFsJywgY2hhbGsuYm9sZCgnVGVzdHMnKSwgY2hhbGsuZ3JlZW4odG90YWwpLCBjaGFsay5ncmVlbigncGFzc2VkJyksIHRvdGFsKTtcbiAgfVxufVxuXG4vKipcbiAqIEZvcm1hdCB0aGUgYXNzZXJ0aW9uIHJlc3VsdHMgc28gdGhhdCB0aGUgcmVzdWx0cyBjYW4gYmVcbiAqIHByaW50ZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdEFzc2VydGlvblJlc3VsdHMocmVzdWx0czogQXNzZXJ0aW9uUmVzdWx0cyk6IHN0cmluZyB7XG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHRzKVxuICAgIC5tYXAoKFtpZCwgcmVzdWx0XSkgPT4gZm9ybWF0KCclcyVzJywgaWQsIHJlc3VsdC5zdGF0dXMgPT09ICdzdWNjZXNzJyA/IGAgLSAke3Jlc3VsdC5zdGF0dXN9YCA6IGBcXG4ke3Jlc3VsdC5tZXNzYWdlfWApKVxuICAgIC5qb2luKCdcXG4gICAgICAnKTtcbn1cblxuLyoqXG4gKiBQcmludCBvdXQgdGhlIHJlc3VsdHMgZnJvbSB0ZXN0c1xuICovXG5leHBvcnQgZnVuY3Rpb24gcHJpbnRSZXN1bHRzKGRpYWdub3N0aWM6IERpYWdub3N0aWMpOiB2b2lkIHtcbiAgc3dpdGNoIChkaWFnbm9zdGljLnJlYXNvbikge1xuICAgIGNhc2UgRGlhZ25vc3RpY1JlYXNvbi5TTkFQU0hPVF9TVUNDRVNTOlxuICAgICAgbG9nZ2VyLnN1Y2Nlc3MoJyAgVU5DSEFOR0VEICAlcyAlcycsIGRpYWdub3N0aWMudGVzdE5hbWUsIGNoYWxrLmdyYXkoYCR7ZGlhZ25vc3RpYy5kdXJhdGlvbn1zYCkpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBEaWFnbm9zdGljUmVhc29uLlRFU1RfU1VDQ0VTUzpcbiAgICAgIGxvZ2dlci5zdWNjZXNzKCcgIFNVQ0NFU1MgICAgJXMgJXNcXG4gICAgICAnLCBkaWFnbm9zdGljLnRlc3ROYW1lLCBjaGFsay5ncmF5KGAke2RpYWdub3N0aWMuZHVyYXRpb259c2ApLCBkaWFnbm9zdGljLm1lc3NhZ2UpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBEaWFnbm9zdGljUmVhc29uLk5PX1NOQVBTSE9UOlxuICAgICAgbG9nZ2VyLmVycm9yKCcgIE5FVyAgICAgICAgJXMgJXMnLCBkaWFnbm9zdGljLnRlc3ROYW1lLCBjaGFsay5ncmF5KGAke2RpYWdub3N0aWMuZHVyYXRpb259c2ApKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgRGlhZ25vc3RpY1JlYXNvbi5TTkFQU0hPVF9GQUlMRUQ6XG4gICAgICBsb2dnZXIuZXJyb3IoJyAgQ0hBTkdFRCAgICAlcyAlc1xcbiAgICAgICVzJywgZGlhZ25vc3RpYy50ZXN0TmFtZSwgY2hhbGsuZ3JheShgJHtkaWFnbm9zdGljLmR1cmF0aW9ufXNgKSwgZGlhZ25vc3RpYy5tZXNzYWdlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgRGlhZ25vc3RpY1JlYXNvbi5TTkFQU0hPVF9FUlJPUjpcbiAgICBjYXNlIERpYWdub3N0aWNSZWFzb24uVEVTVF9FUlJPUjpcbiAgICAgIGxvZ2dlci5lcnJvcignICBFUlJPUiAgICAgICVzICVzXFxuICAgICAgJXMnLCBkaWFnbm9zdGljLnRlc3ROYW1lLCBjaGFsay5ncmF5KGAke2RpYWdub3N0aWMuZHVyYXRpb259c2ApLCBkaWFnbm9zdGljLm1lc3NhZ2UpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBEaWFnbm9zdGljUmVhc29uLlRFU1RfRkFJTEVEOlxuICAgICAgbG9nZ2VyLmVycm9yKCcgIEZBSUxFRCAgICAgJXMgJXNcXG4gICAgICAlcycsIGRpYWdub3N0aWMudGVzdE5hbWUsIGNoYWxrLmdyYXkoYCR7ZGlhZ25vc3RpYy5kdXJhdGlvbn1zYCksIGRpYWdub3N0aWMubWVzc2FnZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIERpYWdub3N0aWNSZWFzb24uQVNTRVJUSU9OX0ZBSUxFRDpcbiAgICAgIGxvZ2dlci5lcnJvcignICBBU1NFUlQgICAgICVzICVzXFxuICAgICAgJXMnLCBkaWFnbm9zdGljLnRlc3ROYW1lLCBjaGFsay5ncmF5KGAke2RpYWdub3N0aWMuZHVyYXRpb259c2ApLCBkaWFnbm9zdGljLm1lc3NhZ2UpO1xuICAgICAgYnJlYWs7XG4gIH1cbiAgZm9yIChjb25zdCBhZGRsIG9mIGRpYWdub3N0aWMuYWRkaXRpb25hbE1lc3NhZ2VzID8/IFtdKSB7XG4gICAgbG9nZ2VyLnByaW50KGAgICAgICAke2FkZGx9YCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByaW50TGFnZ2FyZHModGVzdE5hbWVzOiBTZXQ8c3RyaW5nPikge1xuICBjb25zdCBwYXJ0cyA9IFtcbiAgICAnICAnLFxuICAgIGBXYWl0aW5nIGZvciAke3Rlc3ROYW1lcy5zaXplfSBtb3JlYCxcbiAgICB0ZXN0TmFtZXMuc2l6ZSA8IDEwID8gWycoJywgQXJyYXkuZnJvbSh0ZXN0TmFtZXMpLmpvaW4oJywgJyksICcpJ10uam9pbignJykgOiAnJyxcbiAgXTtcblxuICBsb2dnZXIucHJpbnQoY2hhbGsuZ3JleShwYXJ0cy5maWx0ZXIoeCA9PiB4KS5qb2luKCcgJykpKTtcbn1cbiIsICIvLyBIZWxwZXIgZnVuY3Rpb25zIGZvciBDREsgRXhlY1xuaW1wb3J0IHsgc3Bhd25TeW5jIH0gZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XG5cbi8qKlxuICogT3VyIG93biBleGVjdXRlIGZ1bmN0aW9uIHdoaWNoIGRvZXNuJ3QgdXNlIHNoZWxscyBhbmQgc3RyaW5ncy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4ZWMoY29tbWFuZExpbmU6IHN0cmluZ1tdLCBvcHRpb25zOiB7IGN3ZD86IHN0cmluZywgdmVyYm9zZT86IGJvb2xlYW4sIGVudj86IGFueSB9ID0geyB9KTogYW55IHtcbiAgY29uc3QgcHJvYyA9IHNwYXduU3luYyhjb21tYW5kTGluZVswXSwgY29tbWFuZExpbmUuc2xpY2UoMSksIHtcbiAgICBzdGRpbzogWydpZ25vcmUnLCAncGlwZScsIG9wdGlvbnMudmVyYm9zZSA/ICdpbmhlcml0JyA6ICdwaXBlJ10sIC8vIGluaGVyaXQgU1RERVJSIGluIHZlcmJvc2UgbW9kZVxuICAgIGVudjoge1xuICAgICAgLi4ucHJvY2Vzcy5lbnYsXG4gICAgICAuLi5vcHRpb25zLmVudixcbiAgICB9LFxuICAgIGN3ZDogb3B0aW9ucy5jd2QsXG4gIH0pO1xuXG4gIGlmIChwcm9jLmVycm9yKSB7IHRocm93IHByb2MuZXJyb3I7IH1cbiAgaWYgKHByb2Muc3RhdHVzICE9PSAwKSB7XG4gICAgaWYgKHByb2Nlc3Muc3RkZXJyKSB7IC8vIHdpbGwgYmUgJ251bGwnIGluIHZlcmJvc2UgbW9kZVxuICAgICAgcHJvY2Vzcy5zdGRlcnIud3JpdGUocHJvYy5zdGRlcnIpO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYENvbW1hbmQgZXhpdGVkIHdpdGggJHtwcm9jLnN0YXR1cyA/IGBzdGF0dXMgJHtwcm9jLnN0YXR1c31gIDogYHNpZ25hbCAke3Byb2Muc2lnbmFsfWB9YCk7XG4gIH1cblxuICBjb25zdCBvdXRwdXQgPSBwcm9jLnN0ZG91dC50b1N0cmluZygndXRmLTgnKS50cmltKCk7XG5cbiAgcmV0dXJuIG91dHB1dDtcbn1cblxuLyoqXG4gKiBGbGF0dGVuIGEgbGlzdCBvZiBsaXN0cyBpbnRvIGEgbGlzdCBvZiBlbGVtZW50c1xuICovXG5leHBvcnQgZnVuY3Rpb24gZmxhdHRlbjxUPih4czogVFtdW10pOiBUW10ge1xuICByZXR1cm4gQXJyYXkucHJvdG90eXBlLmNvbmNhdC5hcHBseShbXSwgeHMpO1xufVxuXG4vKipcbiAqIENoYWluIGNvbW1hbmRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGFpbihjb21tYW5kczogc3RyaW5nW10pOiBzdHJpbmcge1xuICByZXR1cm4gY29tbWFuZHMuZmlsdGVyKGMgPT4gISFjKS5qb2luKCcgJiYgJyk7XG59XG5cbi8qKlxuICogU3BsaXQgY29tbWFuZCB0byBjaHVua3MgYnkgc3BhY2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNodW5rcyhjb21tYW5kOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IHJlc3VsdCA9IGNvbW1hbmQubWF0Y2goLyg/OlteXFxzXCJdK3xcIlteXCJdKlwiKSsvZyk7XG4gIHJldHVybiByZXN1bHQgPz8gW107XG59XG5cbi8qKlxuICogQSBjbGFzcyBob2xkaW5nIGEgc2V0IG9mIGl0ZW1zIHdoaWNoIGFyZSBiZWluZyBjcm9zc2VkIG9mZiBpbiB0aW1lXG4gKlxuICogSWYgaXQgdGFrZXMgdG9vIGxvbmcgdG8gY3Jvc3Mgb2ZmIGEgbmV3IGl0ZW0sIHByaW50IHRoZSBsaXN0LlxuICovXG5leHBvcnQgY2xhc3MgV29ya0xpc3Q8QT4ge1xuICBwcml2YXRlIHJlYWRvbmx5IHJlbWFpbmluZyA9IG5ldyBTZXQodGhpcy5pdGVtcyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgdGltZW91dDogbnVtYmVyO1xuICBwcml2YXRlIHRpbWVyPzogTm9kZUpTLlRpbWVvdXQ7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBpdGVtczogQVtdLCBwcml2YXRlIHJlYWRvbmx5IG9wdGlvbnM6IFdvcmtMaXN0T3B0aW9uczxBPiA9IHt9KSB7XG4gICAgdGhpcy50aW1lb3V0ID0gb3B0aW9ucy50aW1lb3V0ID8/IDYwXzAwMDtcbiAgICB0aGlzLnNjaGVkdWxlVGltZXIoKTtcbiAgfVxuXG4gIHB1YmxpYyBjcm9zc09mZihpdGVtOiBBKSB7XG4gICAgdGhpcy5yZW1haW5pbmcuZGVsZXRlKGl0ZW0pO1xuICAgIHRoaXMuc3RvcFRpbWVyKCk7XG4gICAgaWYgKHRoaXMucmVtYWluaW5nLnNpemUgPiAwKSB7XG4gICAgICB0aGlzLnNjaGVkdWxlVGltZXIoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZG9uZSgpIHtcbiAgICB0aGlzLnJlbWFpbmluZy5jbGVhcigpO1xuICAgIHRoaXMuc3RvcFRpbWVyKCk7XG4gIH1cblxuICBwcml2YXRlIHN0b3BUaW1lcigpIHtcbiAgICBpZiAodGhpcy50aW1lcikge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZXIpO1xuICAgICAgdGhpcy50aW1lciA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNjaGVkdWxlVGltZXIoKSB7XG4gICAgdGhpcy50aW1lciA9IHNldFRpbWVvdXQoKCkgPT4gdGhpcy5yZXBvcnQoKSwgdGhpcy50aW1lb3V0KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVwb3J0KCkge1xuICAgIHRoaXMub3B0aW9ucy5vblRpbWVvdXQ/Lih0aGlzLnJlbWFpbmluZyk7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBXb3JrTGlzdE9wdGlvbnM8QT4ge1xuICAvKipcbiAgICogV2hlbiB0byByZXBseSB3aXRoIHJlbWFpbmluZyBpdGVtc1xuICAgKlxuICAgKiBAZGVmYXVsdCA2MDAwMFxuICAgKi9cbiAgcmVhZG9ubHkgdGltZW91dD86IG51bWJlcjtcblxuICAvKipcbiAgICogRnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRpbWVvdXQgaGl0c1xuICAgKi9cbiAgcmVhZG9ubHkgb25UaW1lb3V0PzogKHg6IFNldDxBPikgPT4gdm9pZDtcbn0iLCAiaW1wb3J0ICogYXMgd29ya2VycG9vbCBmcm9tICd3b3JrZXJwb29sJztcbmltcG9ydCB7IHByaW50UmVzdWx0cywgcHJpbnRTdW1tYXJ5LCBJbnRlZ0JhdGNoUmVzcG9uc2UsIEludGVnVGVzdE9wdGlvbnMsIEludGVnUnVubmVyTWV0cmljcyB9IGZyb20gJy4vY29tbW9uJztcbmltcG9ydCAqIGFzIGxvZ2dlciBmcm9tICcuLi9sb2dnZXInO1xuaW1wb3J0IHsgSW50ZWdUZXN0SW5mbyB9IGZyb20gJy4uL3J1bm5lci9pbnRlZ3JhdGlvbi10ZXN0cyc7XG5pbXBvcnQgeyBmbGF0dGVuIH0gZnJvbSAnLi4vdXRpbHMnO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGFuIGludGVncmF0aW9uIHRlc3QgYmF0Y2hcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnRlZ1Rlc3RCYXRjaFJlcXVlc3QgZXh0ZW5kcyBJbnRlZ1Rlc3RPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBBV1MgcmVnaW9uIHRvIHJ1biB0aGlzIGJhdGNoIGluXG4gICAqL1xuICByZWFkb25seSByZWdpb246IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEFXUyBwcm9maWxlIHRvIHVzZSB3aGVuIHJ1bm5pbmcgdGhpcyB0ZXN0XG4gICAqL1xuICByZWFkb25seSBwcm9maWxlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHJ1bm5pbmcgYWxsIGludGVncmF0aW9uIHRlc3RzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW50ZWdUZXN0UnVuT3B0aW9ucyBleHRlbmRzIEludGVnVGVzdE9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIHJlZ2lvbnMgdG8gcnVuIHRoZSBpbnRlZ3JhdGlvbiB0ZXN0cyBhY3Jvc3MuXG4gICAqIFRoaXMgYWxsb3dzIHRoZSBydW5uZXIgdG8gcnVuIGludGVncmF0aW9uIHRlc3RzIGluIHBhcmFsbGVsXG4gICAqL1xuICByZWFkb25seSByZWdpb25zOiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogTGlzdCBvZiBBV1MgcHJvZmlsZXMuIFRoaXMgd2lsbCBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggYHJlZ2lvbnNgXG4gICAqIHRvIHJ1biB0ZXN0cyBpbiBwYXJhbGxlbCBhY3Jvc3MgYWNjb3VudHMgKyByZWdpb25zXG4gICAqL1xuICByZWFkb25seSBwcm9maWxlcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgd29ya2VycG9vbCB0byB1c2VcbiAgICovXG4gIHJlYWRvbmx5IHBvb2w6IHdvcmtlcnBvb2wuV29ya2VyUG9vbDtcbn1cblxuLyoqXG4gKiBSdW4gSW50ZWdyYXRpb24gdGVzdHMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5JbnRlZ3JhdGlvblRlc3RzKG9wdGlvbnM6IEludGVnVGVzdFJ1bk9wdGlvbnMpOiBQcm9taXNlPHsgc3VjY2VzczogYm9vbGVhbiwgbWV0cmljczogSW50ZWdSdW5uZXJNZXRyaWNzW10gfT4ge1xuICBsb2dnZXIuaGlnaGxpZ2h0KCdcXG5SdW5uaW5nIGludGVncmF0aW9uIHRlc3RzIGZvciBmYWlsZWQgdGVzdHMuLi5cXG4nKTtcbiAgbG9nZ2VyLnByaW50KFxuICAgICdSdW5uaW5nIGluIHBhcmFsbGVsIGFjcm9zcyAlc3JlZ2lvbnM6ICVzJyxcbiAgICBvcHRpb25zLnByb2ZpbGVzID8gYHByb2ZpbGVzICR7b3B0aW9ucy5wcm9maWxlcy5qb2luKCcsICcpfSBhbmQgYDogJycsXG4gICAgb3B0aW9ucy5yZWdpb25zLmpvaW4oJywgJykpO1xuICBjb25zdCB0b3RhbFRlc3RzID0gb3B0aW9ucy50ZXN0cy5sZW5ndGg7XG5cbiAgY29uc3QgcmVzcG9uc2VzID0gYXdhaXQgcnVuSW50ZWdyYXRpb25UZXN0c0luUGFyYWxsZWwob3B0aW9ucyk7XG4gIGxvZ2dlci5oaWdobGlnaHQoJ1xcblRlc3QgUmVzdWx0czogXFxuJyk7XG4gIHByaW50U3VtbWFyeSh0b3RhbFRlc3RzLCByZXNwb25zZXMuZmFpbGVkVGVzdHMubGVuZ3RoKTtcbiAgcmV0dXJuIHtcbiAgICBzdWNjZXNzOiByZXNwb25zZXMuZmFpbGVkVGVzdHMubGVuZ3RoID09PSAwLFxuICAgIG1ldHJpY3M6IHJlc3BvbnNlcy5tZXRyaWNzLFxuICB9O1xufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYSB3b3JrZXIgZm9yIGEgc2luZ2xlIGFjY291bnQgKyByZWdpb25cbiAqL1xuaW50ZXJmYWNlIEFjY291bnRXb3JrZXIge1xuICAvKipcbiAgICogVGhlIHJlZ2lvbiB0aGUgd29ya2VyIHNob3VsZCBydW4gaW5cbiAgICovXG4gIHJlYWRvbmx5IHJlZ2lvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgQVdTIHByb2ZpbGUgdGhhdCB0aGUgd29ya2VyIHNob3VsZCB1c2VcbiAgICogVGhpcyB3aWxsIGJlIHBhc3NlZCBhcyB0aGUgJy0tcHJvZmlsZScgb3B0aW9uIHRvIHRoZSBDREsgQ0xJXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZGVmYXVsdCBwcm9maWxlXG4gICAqL1xuICByZWFkb25seSBwcm9maWxlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBsaXN0IG9mIEFjY291bnRXb3JrZXJzIGJhc2VkIG9uIHRoZSBsaXN0IG9mIHJlZ2lvbnMgYW5kIHByb2ZpbGVzXG4gKiBnaXZlbiB0byB0aGUgQ0xJLlxuICovXG5mdW5jdGlvbiBnZXRBY2NvdW50V29ya2VycyhyZWdpb25zOiBzdHJpbmdbXSwgcHJvZmlsZXM/OiBzdHJpbmdbXSk6IEFjY291bnRXb3JrZXJbXSB7XG4gIGNvbnN0IHdvcmtlcnM6IEFjY291bnRXb3JrZXJbXSA9IFtdO1xuICBmdW5jdGlvbiBwdXNoV29ya2VyKHByb2ZpbGU/OiBzdHJpbmcpIHtcbiAgICBmb3IgKGNvbnN0IHJlZ2lvbiBvZiByZWdpb25zKSB7XG4gICAgICB3b3JrZXJzLnB1c2goe1xuICAgICAgICByZWdpb24sXG4gICAgICAgIHByb2ZpbGUsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgaWYgKHByb2ZpbGVzICYmIHByb2ZpbGVzLmxlbmd0aCA+IDApIHtcbiAgICBmb3IgKGNvbnN0IHByb2ZpbGUgb2YgcHJvZmlsZXMgPz8gW10pIHtcbiAgICAgIHB1c2hXb3JrZXIocHJvZmlsZSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHB1c2hXb3JrZXIoKTtcbiAgfVxuICByZXR1cm4gd29ya2Vycztcbn1cblxuLyoqXG4gKiBSdW5zIGEgc2V0IG9mIGludGVncmF0aW9uIHRlc3RzIGluIHBhcmFsbGVsIGFjcm9zcyBhIGxpc3Qgb2YgQVdTIHJlZ2lvbnMuXG4gKiBPbmx5IGEgc2luZ2xlIHRlc3QgY2FuIGJlIHJ1biBhdCBhIHRpbWUgaW4gYSBnaXZlbiByZWdpb24uIE9uY2UgYSByZWdpb25cbiAqIGlzIGRvbmUgcnVubmluZyBhIHRlc3QsIHRoZSBuZXh0IHRlc3Qgd2lsbCBiZSBwdWxsZWQgZnJvbSB0aGUgcXVldWVcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bkludGVncmF0aW9uVGVzdHNJblBhcmFsbGVsKFxuICBvcHRpb25zOiBJbnRlZ1Rlc3RSdW5PcHRpb25zLFxuKTogUHJvbWlzZTxJbnRlZ0JhdGNoUmVzcG9uc2U+IHtcblxuICBjb25zdCBxdWV1ZSA9IG9wdGlvbnMudGVzdHM7XG4gIGNvbnN0IHJlc3VsdHM6IEludGVnQmF0Y2hSZXNwb25zZSA9IHtcbiAgICBtZXRyaWNzOiBbXSxcbiAgICBmYWlsZWRUZXN0czogW10sXG4gIH07XG4gIGNvbnN0IGFjY291bnRXb3JrZXJzOiBBY2NvdW50V29ya2VyW10gPSBnZXRBY2NvdW50V29ya2VycyhvcHRpb25zLnJlZ2lvbnMsIG9wdGlvbnMucHJvZmlsZXMpO1xuXG4gIGFzeW5jIGZ1bmN0aW9uIHJ1blRlc3Qod29ya2VyOiBBY2NvdW50V29ya2VyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHRlc3RzOiB7IFt0ZXN0TmFtZTogc3RyaW5nXTogbnVtYmVyIH0gPSB7fTtcbiAgICBkbyB7XG4gICAgICBjb25zdCB0ZXN0ID0gcXVldWUucG9wKCk7XG4gICAgICBpZiAoIXRlc3QpIGJyZWFrO1xuICAgICAgY29uc3QgdGVzdFN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICAgIGxvZ2dlci5oaWdobGlnaHQoYFJ1bm5pbmcgdGVzdCAke3Rlc3QuZmlsZU5hbWV9IGluICR7d29ya2VyLnByb2ZpbGUgPyB3b3JrZXIucHJvZmlsZSArICcvJyA6ICcnfSR7d29ya2VyLnJlZ2lvbn1gKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlOiBJbnRlZ1Rlc3RJbmZvW11bXSA9IGF3YWl0IG9wdGlvbnMucG9vbC5leGVjKCdpbnRlZ1Rlc3RXb3JrZXInLCBbe1xuICAgICAgICB3YXRjaDogb3B0aW9ucy53YXRjaCxcbiAgICAgICAgcmVnaW9uOiB3b3JrZXIucmVnaW9uLFxuICAgICAgICBwcm9maWxlOiB3b3JrZXIucHJvZmlsZSxcbiAgICAgICAgdGVzdHM6IFt0ZXN0XSxcbiAgICAgICAgY2xlYW46IG9wdGlvbnMuY2xlYW4sXG4gICAgICAgIGRyeVJ1bjogb3B0aW9ucy5kcnlSdW4sXG4gICAgICAgIHZlcmJvc2l0eTogb3B0aW9ucy52ZXJib3NpdHksXG4gICAgICAgIHVwZGF0ZVdvcmtmbG93OiBvcHRpb25zLnVwZGF0ZVdvcmtmbG93LFxuICAgICAgfV0sIHtcbiAgICAgICAgb246IHByaW50UmVzdWx0cyxcbiAgICAgIH0pO1xuXG4gICAgICByZXN1bHRzLmZhaWxlZFRlc3RzLnB1c2goLi4uZmxhdHRlbihyZXNwb25zZSkpO1xuICAgICAgdGVzdHNbdGVzdC5maWxlTmFtZV0gPSAoRGF0ZS5ub3coKSAtIHRlc3RTdGFydCkgLyAxMDAwO1xuICAgIH0gd2hpbGUgKHF1ZXVlLmxlbmd0aCA+IDApO1xuICAgIGNvbnN0IG1ldHJpY3M6IEludGVnUnVubmVyTWV0cmljcyA9IHtcbiAgICAgIHJlZ2lvbjogd29ya2VyLnJlZ2lvbixcbiAgICAgIHByb2ZpbGU6IHdvcmtlci5wcm9maWxlLFxuICAgICAgZHVyYXRpb246IChEYXRlLm5vdygpIC0gc3RhcnQpIC8gMTAwMCxcbiAgICAgIHRlc3RzLFxuICAgIH07XG4gICAgaWYgKE9iamVjdC5rZXlzKHRlc3RzKS5sZW5ndGggPiAwKSB7XG4gICAgICByZXN1bHRzLm1ldHJpY3MucHVzaChtZXRyaWNzKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCB3b3JrZXJzID0gYWNjb3VudFdvcmtlcnMubWFwKCh3b3JrZXIpID0+IHJ1blRlc3Qod29ya2VyKSk7XG4gIGF3YWl0IFByb21pc2UuYWxsKHdvcmtlcnMpO1xuICByZXR1cm4gcmVzdWx0cztcbn1cbiIsICJpbXBvcnQgKiBhcyB3b3JrZXJwb29sIGZyb20gJ3dvcmtlcnBvb2wnO1xuaW1wb3J0IHsgcHJpbnRTdW1tYXJ5LCBwcmludFJlc3VsdHMsIEludGVnVGVzdFdvcmtlckNvbmZpZywgU25hcHNob3RWZXJpZmljYXRpb25PcHRpb25zLCBwcmludExhZ2dhcmRzIH0gZnJvbSAnLi9jb21tb24nO1xuaW1wb3J0ICogYXMgbG9nZ2VyIGZyb20gJy4uL2xvZ2dlcic7XG5pbXBvcnQgeyBJbnRlZ1Rlc3QgfSBmcm9tICcuLi9ydW5uZXIvaW50ZWdyYXRpb24tdGVzdHMnO1xuaW1wb3J0IHsgZmxhdHRlbiwgV29ya0xpc3QgfSBmcm9tICcuLi91dGlscyc7XG5cbi8qKlxuICogUnVuIFNuYXBzaG90IHRlc3RzXG4gKiBGaXJzdCBiYXRjaCB1cCB0aGUgdGVzdHMuIEJ5IGRlZmF1bHQgdGhlcmUgd2lsbCBiZSAzIHRlc3RzIHBlciBiYXRjaC5cbiAqIFVzZSBhIHdvcmtlcnBvb2wgdG8gcnVuIHRoZSBiYXRjaGVzIGluIHBhcmFsbGVsLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuU25hcHNob3RUZXN0cyhcbiAgcG9vbDogd29ya2VycG9vbC5Xb3JrZXJQb29sLFxuICB0ZXN0czogSW50ZWdUZXN0W10sXG4gIG9wdGlvbnM6IFNuYXBzaG90VmVyaWZpY2F0aW9uT3B0aW9ucyxcbik6IFByb21pc2U8SW50ZWdUZXN0V29ya2VyQ29uZmlnW10+IHtcbiAgbG9nZ2VyLmhpZ2hsaWdodCgnXFxuVmVyaWZ5aW5nIGludGVncmF0aW9uIHRlc3Qgc25hcHNob3RzLi4uXFxuJyk7XG5cbiAgY29uc3QgdG9kbyA9IG5ldyBXb3JrTGlzdCh0ZXN0cy5tYXAodCA9PiB0LnRlc3ROYW1lKSwge1xuICAgIG9uVGltZW91dDogcHJpbnRMYWdnYXJkcyxcbiAgfSk7XG5cbiAgY29uc3QgZmFpbGVkVGVzdHM6IEludGVnVGVzdFdvcmtlckNvbmZpZ1tdW10gPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICB0ZXN0cy5tYXAoKHRlc3QpID0+IHBvb2wuZXhlYygnc25hcHNob3RUZXN0V29ya2VyJywgW3Rlc3QuaW5mbyAvKiBEZWh5ZHJhdGUgY2xhc3MgLT4gZGF0YSAqLywgb3B0aW9uc10sIHtcbiAgICAgIG9uOiAoeCkgPT4ge1xuICAgICAgICB0b2RvLmNyb3NzT2ZmKHgudGVzdE5hbWUpO1xuICAgICAgICBwcmludFJlc3VsdHMoeCk7XG4gICAgICB9LFxuICAgIH0pKSxcbiAgKTtcbiAgdG9kby5kb25lKCk7XG4gIGNvbnN0IHRlc3RzVG9SdW4gPSBmbGF0dGVuKGZhaWxlZFRlc3RzKTtcblxuICBsb2dnZXIuaGlnaGxpZ2h0KCdcXG5TbmFwc2hvdCBSZXN1bHRzOiBcXG4nKTtcbiAgcHJpbnRTdW1tYXJ5KHRlc3RzLmxlbmd0aCwgdGVzdHNUb1J1bi5sZW5ndGgpO1xuICByZXR1cm4gdGVzdHNUb1J1bjtcblxufVxuIiwgImV4cG9ydCAqIGZyb20gJy4vY29tbW9uJztcbmV4cG9ydCAqIGZyb20gJy4vaW50ZWctdGVzdC13b3JrZXInO1xuZXhwb3J0ICogZnJvbSAnLi9pbnRlZy1zbmFwc2hvdC13b3JrZXInO1xuIiwgImltcG9ydCAqIGFzIHdvcmtlcnBvb2wgZnJvbSAnd29ya2VycG9vbCc7XG5pbXBvcnQgeyBwcmludFJlc3VsdHMgfSBmcm9tICcuL2NvbW1vbic7XG5pbXBvcnQgeyBJbnRlZ1Rlc3RJbmZvIH0gZnJvbSAnLi4vcnVubmVyJztcblxuZXhwb3J0IGludGVyZmFjZSBJbnRlZ1dhdGNoT3B0aW9ucyBleHRlbmRzIEludGVnVGVzdEluZm8ge1xuICByZWFkb25seSByZWdpb246IHN0cmluZztcbiAgcmVhZG9ubHkgcHJvZmlsZT86IHN0cmluZztcbiAgcmVhZG9ubHkgdmVyYm9zaXR5PzogbnVtYmVyO1xufVxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdhdGNoSW50ZWdyYXRpb25UZXN0KHBvb2w6IHdvcmtlcnBvb2wuV29ya2VyUG9vbCwgb3B0aW9uczogSW50ZWdXYXRjaE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgcG9vbC5leGVjKCd3YXRjaFRlc3RXb3JrZXInLCBbb3B0aW9uc10sIHtcbiAgICBvbjogcHJpbnRSZXN1bHRzLFxuICB9KTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbnZhciBmcyA9IHJlcXVpcmUoJ2ZzJyk7XG52YXIgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xuXG5sZXQgc2hpbTtcbmNsYXNzIFkxOE4ge1xuICAgIGNvbnN0cnVjdG9yKG9wdHMpIHtcbiAgICAgICAgLy8gY29uZmlndXJhYmxlIG9wdGlvbnMuXG4gICAgICAgIG9wdHMgPSBvcHRzIHx8IHt9O1xuICAgICAgICB0aGlzLmRpcmVjdG9yeSA9IG9wdHMuZGlyZWN0b3J5IHx8ICcuL2xvY2FsZXMnO1xuICAgICAgICB0aGlzLnVwZGF0ZUZpbGVzID0gdHlwZW9mIG9wdHMudXBkYXRlRmlsZXMgPT09ICdib29sZWFuJyA/IG9wdHMudXBkYXRlRmlsZXMgOiB0cnVlO1xuICAgICAgICB0aGlzLmxvY2FsZSA9IG9wdHMubG9jYWxlIHx8ICdlbic7XG4gICAgICAgIHRoaXMuZmFsbGJhY2tUb0xhbmd1YWdlID0gdHlwZW9mIG9wdHMuZmFsbGJhY2tUb0xhbmd1YWdlID09PSAnYm9vbGVhbicgPyBvcHRzLmZhbGxiYWNrVG9MYW5ndWFnZSA6IHRydWU7XG4gICAgICAgIC8vIGludGVybmFsIHN0dWZmLlxuICAgICAgICB0aGlzLmNhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgdGhpcy53cml0ZVF1ZXVlID0gW107XG4gICAgfVxuICAgIF9fKC4uLmFyZ3MpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBhcmd1bWVudHNbMF0gIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdGFnZ2VkTGl0ZXJhbChhcmd1bWVudHNbMF0sIC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3RyID0gYXJncy5zaGlmdCgpO1xuICAgICAgICBsZXQgY2IgPSBmdW5jdGlvbiAoKSB7IH07IC8vIHN0YXJ0IHdpdGggbm9vcC5cbiAgICAgICAgaWYgKHR5cGVvZiBhcmdzW2FyZ3MubGVuZ3RoIC0gMV0gPT09ICdmdW5jdGlvbicpXG4gICAgICAgICAgICBjYiA9IGFyZ3MucG9wKCk7XG4gICAgICAgIGNiID0gY2IgfHwgZnVuY3Rpb24gKCkgeyB9OyAvLyBub29wLlxuICAgICAgICBpZiAoIXRoaXMuY2FjaGVbdGhpcy5sb2NhbGVdKVxuICAgICAgICAgICAgdGhpcy5fcmVhZExvY2FsZUZpbGUoKTtcbiAgICAgICAgLy8gd2UndmUgb2JzZXJ2ZWQgYSBuZXcgc3RyaW5nLCB1cGRhdGUgdGhlIGxhbmd1YWdlIGZpbGUuXG4gICAgICAgIGlmICghdGhpcy5jYWNoZVt0aGlzLmxvY2FsZV1bc3RyXSAmJiB0aGlzLnVwZGF0ZUZpbGVzKSB7XG4gICAgICAgICAgICB0aGlzLmNhY2hlW3RoaXMubG9jYWxlXVtzdHJdID0gc3RyO1xuICAgICAgICAgICAgLy8gaW5jbHVkZSB0aGUgY3VycmVudCBkaXJlY3RvcnkgYW5kIGxvY2FsZSxcbiAgICAgICAgICAgIC8vIHNpbmNlIHRoZXNlIHZhbHVlcyBjb3VsZCBjaGFuZ2UgYmVmb3JlIHRoZVxuICAgICAgICAgICAgLy8gd3JpdGUgaXMgcGVyZm9ybWVkLlxuICAgICAgICAgICAgdGhpcy5fZW5xdWV1ZVdyaXRlKHtcbiAgICAgICAgICAgICAgICBkaXJlY3Rvcnk6IHRoaXMuZGlyZWN0b3J5LFxuICAgICAgICAgICAgICAgIGxvY2FsZTogdGhpcy5sb2NhbGUsXG4gICAgICAgICAgICAgICAgY2JcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY2IoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2hpbS5mb3JtYXQuYXBwbHkoc2hpbS5mb3JtYXQsIFt0aGlzLmNhY2hlW3RoaXMubG9jYWxlXVtzdHJdIHx8IHN0cl0uY29uY2F0KGFyZ3MpKTtcbiAgICB9XG4gICAgX19uKCkge1xuICAgICAgICBjb25zdCBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICAgICAgY29uc3Qgc2luZ3VsYXIgPSBhcmdzLnNoaWZ0KCk7XG4gICAgICAgIGNvbnN0IHBsdXJhbCA9IGFyZ3Muc2hpZnQoKTtcbiAgICAgICAgY29uc3QgcXVhbnRpdHkgPSBhcmdzLnNoaWZ0KCk7XG4gICAgICAgIGxldCBjYiA9IGZ1bmN0aW9uICgpIHsgfTsgLy8gc3RhcnQgd2l0aCBub29wLlxuICAgICAgICBpZiAodHlwZW9mIGFyZ3NbYXJncy5sZW5ndGggLSAxXSA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICAgIGNiID0gYXJncy5wb3AoKTtcbiAgICAgICAgaWYgKCF0aGlzLmNhY2hlW3RoaXMubG9jYWxlXSlcbiAgICAgICAgICAgIHRoaXMuX3JlYWRMb2NhbGVGaWxlKCk7XG4gICAgICAgIGxldCBzdHIgPSBxdWFudGl0eSA9PT0gMSA/IHNpbmd1bGFyIDogcGx1cmFsO1xuICAgICAgICBpZiAodGhpcy5jYWNoZVt0aGlzLmxvY2FsZV1bc2luZ3VsYXJdKSB7XG4gICAgICAgICAgICBjb25zdCBlbnRyeSA9IHRoaXMuY2FjaGVbdGhpcy5sb2NhbGVdW3Npbmd1bGFyXTtcbiAgICAgICAgICAgIHN0ciA9IGVudHJ5W3F1YW50aXR5ID09PSAxID8gJ29uZScgOiAnb3RoZXInXTtcbiAgICAgICAgfVxuICAgICAgICAvLyB3ZSd2ZSBvYnNlcnZlZCBhIG5ldyBzdHJpbmcsIHVwZGF0ZSB0aGUgbGFuZ3VhZ2UgZmlsZS5cbiAgICAgICAgaWYgKCF0aGlzLmNhY2hlW3RoaXMubG9jYWxlXVtzaW5ndWxhcl0gJiYgdGhpcy51cGRhdGVGaWxlcykge1xuICAgICAgICAgICAgdGhpcy5jYWNoZVt0aGlzLmxvY2FsZV1bc2luZ3VsYXJdID0ge1xuICAgICAgICAgICAgICAgIG9uZTogc2luZ3VsYXIsXG4gICAgICAgICAgICAgICAgb3RoZXI6IHBsdXJhbFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIC8vIGluY2x1ZGUgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGFuZCBsb2NhbGUsXG4gICAgICAgICAgICAvLyBzaW5jZSB0aGVzZSB2YWx1ZXMgY291bGQgY2hhbmdlIGJlZm9yZSB0aGVcbiAgICAgICAgICAgIC8vIHdyaXRlIGlzIHBlcmZvcm1lZC5cbiAgICAgICAgICAgIHRoaXMuX2VucXVldWVXcml0ZSh7XG4gICAgICAgICAgICAgICAgZGlyZWN0b3J5OiB0aGlzLmRpcmVjdG9yeSxcbiAgICAgICAgICAgICAgICBsb2NhbGU6IHRoaXMubG9jYWxlLFxuICAgICAgICAgICAgICAgIGNiXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNiKCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYgYSAlZCBwbGFjZWhvbGRlciBpcyBwcm92aWRlZCwgYWRkIHF1YW50aXR5XG4gICAgICAgIC8vIHRvIHRoZSBhcmd1bWVudHMgZXhwYW5kZWQgYnkgdXRpbC5mb3JtYXQuXG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IFtzdHJdO1xuICAgICAgICBpZiAofnN0ci5pbmRleE9mKCclZCcpKVxuICAgICAgICAgICAgdmFsdWVzLnB1c2gocXVhbnRpdHkpO1xuICAgICAgICByZXR1cm4gc2hpbS5mb3JtYXQuYXBwbHkoc2hpbS5mb3JtYXQsIHZhbHVlcy5jb25jYXQoYXJncykpO1xuICAgIH1cbiAgICBzZXRMb2NhbGUobG9jYWxlKSB7XG4gICAgICAgIHRoaXMubG9jYWxlID0gbG9jYWxlO1xuICAgIH1cbiAgICBnZXRMb2NhbGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsZTtcbiAgICB9XG4gICAgdXBkYXRlTG9jYWxlKG9iaikge1xuICAgICAgICBpZiAoIXRoaXMuY2FjaGVbdGhpcy5sb2NhbGVdKVxuICAgICAgICAgICAgdGhpcy5fcmVhZExvY2FsZUZpbGUoKTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gb2JqKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FjaGVbdGhpcy5sb2NhbGVdW2tleV0gPSBvYmpba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBfdGFnZ2VkTGl0ZXJhbChwYXJ0cywgLi4uYXJncykge1xuICAgICAgICBsZXQgc3RyID0gJyc7XG4gICAgICAgIHBhcnRzLmZvckVhY2goZnVuY3Rpb24gKHBhcnQsIGkpIHtcbiAgICAgICAgICAgIGNvbnN0IGFyZyA9IGFyZ3NbaSArIDFdO1xuICAgICAgICAgICAgc3RyICs9IHBhcnQ7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGFyZyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICBzdHIgKz0gJyVzJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLl9fLmFwcGx5KHRoaXMsIFtzdHJdLmNvbmNhdChbXS5zbGljZS5jYWxsKGFyZ3MsIDEpKSk7XG4gICAgfVxuICAgIF9lbnF1ZXVlV3JpdGUod29yaykge1xuICAgICAgICB0aGlzLndyaXRlUXVldWUucHVzaCh3b3JrKTtcbiAgICAgICAgaWYgKHRoaXMud3JpdGVRdWV1ZS5sZW5ndGggPT09IDEpXG4gICAgICAgICAgICB0aGlzLl9wcm9jZXNzV3JpdGVRdWV1ZSgpO1xuICAgIH1cbiAgICBfcHJvY2Vzc1dyaXRlUXVldWUoKSB7XG4gICAgICAgIGNvbnN0IF90aGlzID0gdGhpcztcbiAgICAgICAgY29uc3Qgd29yayA9IHRoaXMud3JpdGVRdWV1ZVswXTtcbiAgICAgICAgLy8gZGVzdHJ1Y3R1cmUgdGhlIGVucXVldWVkIHdvcmsuXG4gICAgICAgIGNvbnN0IGRpcmVjdG9yeSA9IHdvcmsuZGlyZWN0b3J5O1xuICAgICAgICBjb25zdCBsb2NhbGUgPSB3b3JrLmxvY2FsZTtcbiAgICAgICAgY29uc3QgY2IgPSB3b3JrLmNiO1xuICAgICAgICBjb25zdCBsYW5ndWFnZUZpbGUgPSB0aGlzLl9yZXNvbHZlTG9jYWxlRmlsZShkaXJlY3RvcnksIGxvY2FsZSk7XG4gICAgICAgIGNvbnN0IHNlcmlhbGl6ZWRMb2NhbGUgPSBKU09OLnN0cmluZ2lmeSh0aGlzLmNhY2hlW2xvY2FsZV0sIG51bGwsIDIpO1xuICAgICAgICBzaGltLmZzLndyaXRlRmlsZShsYW5ndWFnZUZpbGUsIHNlcmlhbGl6ZWRMb2NhbGUsICd1dGYtOCcsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIF90aGlzLndyaXRlUXVldWUuc2hpZnQoKTtcbiAgICAgICAgICAgIGlmIChfdGhpcy53cml0ZVF1ZXVlLmxlbmd0aCA+IDApXG4gICAgICAgICAgICAgICAgX3RoaXMuX3Byb2Nlc3NXcml0ZVF1ZXVlKCk7XG4gICAgICAgICAgICBjYihlcnIpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgX3JlYWRMb2NhbGVGaWxlKCkge1xuICAgICAgICBsZXQgbG9jYWxlTG9va3VwID0ge307XG4gICAgICAgIGNvbnN0IGxhbmd1YWdlRmlsZSA9IHRoaXMuX3Jlc29sdmVMb2NhbGVGaWxlKHRoaXMuZGlyZWN0b3J5LCB0aGlzLmxvY2FsZSk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHVzaW5nIGEgYnVuZGxlciBzdWNoIGFzIHdlYnBhY2ssIHJlYWRGaWxlU3luYyBtYXkgbm90IGJlIGRlZmluZWQ6XG4gICAgICAgICAgICBpZiAoc2hpbS5mcy5yZWFkRmlsZVN5bmMpIHtcbiAgICAgICAgICAgICAgICBsb2NhbGVMb29rdXAgPSBKU09OLnBhcnNlKHNoaW0uZnMucmVhZEZpbGVTeW5jKGxhbmd1YWdlRmlsZSwgJ3V0Zi04JykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBTeW50YXhFcnJvcikge1xuICAgICAgICAgICAgICAgIGVyci5tZXNzYWdlID0gJ3N5bnRheCBlcnJvciBpbiAnICsgbGFuZ3VhZ2VGaWxlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGVyci5jb2RlID09PSAnRU5PRU5UJylcbiAgICAgICAgICAgICAgICBsb2NhbGVMb29rdXAgPSB7fTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jYWNoZVt0aGlzLmxvY2FsZV0gPSBsb2NhbGVMb29rdXA7XG4gICAgfVxuICAgIF9yZXNvbHZlTG9jYWxlRmlsZShkaXJlY3RvcnksIGxvY2FsZSkge1xuICAgICAgICBsZXQgZmlsZSA9IHNoaW0ucmVzb2x2ZShkaXJlY3RvcnksICcuLycsIGxvY2FsZSArICcuanNvbicpO1xuICAgICAgICBpZiAodGhpcy5mYWxsYmFja1RvTGFuZ3VhZ2UgJiYgIXRoaXMuX2ZpbGVFeGlzdHNTeW5jKGZpbGUpICYmIH5sb2NhbGUubGFzdEluZGV4T2YoJ18nKSkge1xuICAgICAgICAgICAgLy8gYXR0ZW1wdCBmYWxsYmFjayB0byBsYW5ndWFnZSBvbmx5XG4gICAgICAgICAgICBjb25zdCBsYW5ndWFnZUZpbGUgPSBzaGltLnJlc29sdmUoZGlyZWN0b3J5LCAnLi8nLCBsb2NhbGUuc3BsaXQoJ18nKVswXSArICcuanNvbicpO1xuICAgICAgICAgICAgaWYgKHRoaXMuX2ZpbGVFeGlzdHNTeW5jKGxhbmd1YWdlRmlsZSkpXG4gICAgICAgICAgICAgICAgZmlsZSA9IGxhbmd1YWdlRmlsZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmlsZTtcbiAgICB9XG4gICAgX2ZpbGVFeGlzdHNTeW5jKGZpbGUpIHtcbiAgICAgICAgcmV0dXJuIHNoaW0uZXhpc3RzKGZpbGUpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHkxOG4kMShvcHRzLCBfc2hpbSkge1xuICAgIHNoaW0gPSBfc2hpbTtcbiAgICBjb25zdCB5MThuID0gbmV3IFkxOE4ob3B0cyk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgX186IHkxOG4uX18uYmluZCh5MThuKSxcbiAgICAgICAgX19uOiB5MThuLl9fbi5iaW5kKHkxOG4pLFxuICAgICAgICBzZXRMb2NhbGU6IHkxOG4uc2V0TG9jYWxlLmJpbmQoeTE4biksXG4gICAgICAgIGdldExvY2FsZTogeTE4bi5nZXRMb2NhbGUuYmluZCh5MThuKSxcbiAgICAgICAgdXBkYXRlTG9jYWxlOiB5MThuLnVwZGF0ZUxvY2FsZS5iaW5kKHkxOG4pLFxuICAgICAgICBsb2NhbGU6IHkxOG4ubG9jYWxlXG4gICAgfTtcbn1cblxudmFyIG5vZGVQbGF0Zm9ybVNoaW0gPSB7XG4gICAgZnM6IHtcbiAgICAgICAgcmVhZEZpbGVTeW5jOiBmcy5yZWFkRmlsZVN5bmMsXG4gICAgICAgIHdyaXRlRmlsZTogZnMud3JpdGVGaWxlXG4gICAgfSxcbiAgICBmb3JtYXQ6IHV0aWwuZm9ybWF0LFxuICAgIHJlc29sdmU6IHBhdGgucmVzb2x2ZSxcbiAgICBleGlzdHM6IChmaWxlKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gZnMuc3RhdFN5bmMoZmlsZSkuaXNGaWxlKCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuY29uc3QgeTE4biA9IChvcHRzKSA9PiB7XG4gICAgcmV0dXJuIHkxOG4kMShvcHRzLCBub2RlUGxhdGZvcm1TaGltKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0geTE4bjtcbiIsICIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xudmFyIGZzID0gcmVxdWlyZSgnZnMnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xuXG5mdW5jdGlvbiBjYW1lbENhc2Uoc3RyKSB7XG4gICAgY29uc3QgaXNDYW1lbENhc2UgPSBzdHIgIT09IHN0ci50b0xvd2VyQ2FzZSgpICYmIHN0ciAhPT0gc3RyLnRvVXBwZXJDYXNlKCk7XG4gICAgaWYgKCFpc0NhbWVsQ2FzZSkge1xuICAgICAgICBzdHIgPSBzdHIudG9Mb3dlckNhc2UoKTtcbiAgICB9XG4gICAgaWYgKHN0ci5pbmRleE9mKCctJykgPT09IC0xICYmIHN0ci5pbmRleE9mKCdfJykgPT09IC0xKSB7XG4gICAgICAgIHJldHVybiBzdHI7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBsZXQgY2FtZWxjYXNlID0gJyc7XG4gICAgICAgIGxldCBuZXh0Q2hyVXBwZXIgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgbGVhZGluZ0h5cGhlbnMgPSBzdHIubWF0Y2goL14tKy8pO1xuICAgICAgICBmb3IgKGxldCBpID0gbGVhZGluZ0h5cGhlbnMgPyBsZWFkaW5nSHlwaGVuc1swXS5sZW5ndGggOiAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgY2hyID0gc3RyLmNoYXJBdChpKTtcbiAgICAgICAgICAgIGlmIChuZXh0Q2hyVXBwZXIpIHtcbiAgICAgICAgICAgICAgICBuZXh0Q2hyVXBwZXIgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBjaHIgPSBjaHIudG9VcHBlckNhc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpICE9PSAwICYmIChjaHIgPT09ICctJyB8fCBjaHIgPT09ICdfJykpIHtcbiAgICAgICAgICAgICAgICBuZXh0Q2hyVXBwZXIgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hyICE9PSAnLScgJiYgY2hyICE9PSAnXycpIHtcbiAgICAgICAgICAgICAgICBjYW1lbGNhc2UgKz0gY2hyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjYW1lbGNhc2U7XG4gICAgfVxufVxuZnVuY3Rpb24gZGVjYW1lbGl6ZShzdHIsIGpvaW5TdHJpbmcpIHtcbiAgICBjb25zdCBsb3dlcmNhc2UgPSBzdHIudG9Mb3dlckNhc2UoKTtcbiAgICBqb2luU3RyaW5nID0gam9pblN0cmluZyB8fCAnLSc7XG4gICAgbGV0IG5vdENhbWVsY2FzZSA9ICcnO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGNockxvd2VyID0gbG93ZXJjYXNlLmNoYXJBdChpKTtcbiAgICAgICAgY29uc3QgY2hyU3RyaW5nID0gc3RyLmNoYXJBdChpKTtcbiAgICAgICAgaWYgKGNockxvd2VyICE9PSBjaHJTdHJpbmcgJiYgaSA+IDApIHtcbiAgICAgICAgICAgIG5vdENhbWVsY2FzZSArPSBgJHtqb2luU3RyaW5nfSR7bG93ZXJjYXNlLmNoYXJBdChpKX1gO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgbm90Q2FtZWxjYXNlICs9IGNoclN0cmluZztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbm90Q2FtZWxjYXNlO1xufVxuZnVuY3Rpb24gbG9va3NMaWtlTnVtYmVyKHgpIHtcbiAgICBpZiAoeCA9PT0gbnVsbCB8fCB4ID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBpZiAodHlwZW9mIHggPT09ICdudW1iZXInKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoL14weFswLTlhLWZdKyQvaS50ZXN0KHgpKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoL14wW14uXS8udGVzdCh4KSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiAvXlstXT8oPzpcXGQrKD86XFwuXFxkKik/fFxcLlxcZCspKGVbLStdP1xcZCspPyQvLnRlc3QoeCk7XG59XG5cbmZ1bmN0aW9uIHRva2VuaXplQXJnU3RyaW5nKGFyZ1N0cmluZykge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGFyZ1N0cmluZykpIHtcbiAgICAgICAgcmV0dXJuIGFyZ1N0cmluZy5tYXAoZSA9PiB0eXBlb2YgZSAhPT0gJ3N0cmluZycgPyBlICsgJycgOiBlKTtcbiAgICB9XG4gICAgYXJnU3RyaW5nID0gYXJnU3RyaW5nLnRyaW0oKTtcbiAgICBsZXQgaSA9IDA7XG4gICAgbGV0IHByZXZDID0gbnVsbDtcbiAgICBsZXQgYyA9IG51bGw7XG4gICAgbGV0IG9wZW5pbmcgPSBudWxsO1xuICAgIGNvbnN0IGFyZ3MgPSBbXTtcbiAgICBmb3IgKGxldCBpaSA9IDA7IGlpIDwgYXJnU3RyaW5nLmxlbmd0aDsgaWkrKykge1xuICAgICAgICBwcmV2QyA9IGM7XG4gICAgICAgIGMgPSBhcmdTdHJpbmcuY2hhckF0KGlpKTtcbiAgICAgICAgaWYgKGMgPT09ICcgJyAmJiAhb3BlbmluZykge1xuICAgICAgICAgICAgaWYgKCEocHJldkMgPT09ICcgJykpIHtcbiAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYyA9PT0gb3BlbmluZykge1xuICAgICAgICAgICAgb3BlbmluZyA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoKGMgPT09IFwiJ1wiIHx8IGMgPT09ICdcIicpICYmICFvcGVuaW5nKSB7XG4gICAgICAgICAgICBvcGVuaW5nID0gYztcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWFyZ3NbaV0pXG4gICAgICAgICAgICBhcmdzW2ldID0gJyc7XG4gICAgICAgIGFyZ3NbaV0gKz0gYztcbiAgICB9XG4gICAgcmV0dXJuIGFyZ3M7XG59XG5cbnZhciBEZWZhdWx0VmFsdWVzRm9yVHlwZUtleTtcbihmdW5jdGlvbiAoRGVmYXVsdFZhbHVlc0ZvclR5cGVLZXkpIHtcbiAgICBEZWZhdWx0VmFsdWVzRm9yVHlwZUtleVtcIkJPT0xFQU5cIl0gPSBcImJvb2xlYW5cIjtcbiAgICBEZWZhdWx0VmFsdWVzRm9yVHlwZUtleVtcIlNUUklOR1wiXSA9IFwic3RyaW5nXCI7XG4gICAgRGVmYXVsdFZhbHVlc0ZvclR5cGVLZXlbXCJOVU1CRVJcIl0gPSBcIm51bWJlclwiO1xuICAgIERlZmF1bHRWYWx1ZXNGb3JUeXBlS2V5W1wiQVJSQVlcIl0gPSBcImFycmF5XCI7XG59KShEZWZhdWx0VmFsdWVzRm9yVHlwZUtleSB8fCAoRGVmYXVsdFZhbHVlc0ZvclR5cGVLZXkgPSB7fSkpO1xuXG5sZXQgbWl4aW47XG5jbGFzcyBZYXJnc1BhcnNlciB7XG4gICAgY29uc3RydWN0b3IoX21peGluKSB7XG4gICAgICAgIG1peGluID0gX21peGluO1xuICAgIH1cbiAgICBwYXJzZShhcmdzSW5wdXQsIG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3Qgb3B0cyA9IE9iamVjdC5hc3NpZ24oe1xuICAgICAgICAgICAgYWxpYXM6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGFycmF5OiB1bmRlZmluZWQsXG4gICAgICAgICAgICBib29sZWFuOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBjb25maWc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGNvbmZpZ09iamVjdHM6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGNvbmZpZ3VyYXRpb246IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGNvZXJjZTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgY291bnQ6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGRlZmF1bHQ6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGVudlByZWZpeDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgbmFyZzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgbm9ybWFsaXplOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBzdHJpbmc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIG51bWJlcjogdW5kZWZpbmVkLFxuICAgICAgICAgICAgX186IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGtleTogdW5kZWZpbmVkXG4gICAgICAgIH0sIG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBhcmdzID0gdG9rZW5pemVBcmdTdHJpbmcoYXJnc0lucHV0KTtcbiAgICAgICAgY29uc3QgYWxpYXNlcyA9IGNvbWJpbmVBbGlhc2VzKE9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShudWxsKSwgb3B0cy5hbGlhcykpO1xuICAgICAgICBjb25zdCBjb25maWd1cmF0aW9uID0gT2JqZWN0LmFzc2lnbih7XG4gICAgICAgICAgICAnYm9vbGVhbi1uZWdhdGlvbic6IHRydWUsXG4gICAgICAgICAgICAnY2FtZWwtY2FzZS1leHBhbnNpb24nOiB0cnVlLFxuICAgICAgICAgICAgJ2NvbWJpbmUtYXJyYXlzJzogZmFsc2UsXG4gICAgICAgICAgICAnZG90LW5vdGF0aW9uJzogdHJ1ZSxcbiAgICAgICAgICAgICdkdXBsaWNhdGUtYXJndW1lbnRzLWFycmF5JzogdHJ1ZSxcbiAgICAgICAgICAgICdmbGF0dGVuLWR1cGxpY2F0ZS1hcnJheXMnOiB0cnVlLFxuICAgICAgICAgICAgJ2dyZWVkeS1hcnJheXMnOiB0cnVlLFxuICAgICAgICAgICAgJ2hhbHQtYXQtbm9uLW9wdGlvbic6IGZhbHNlLFxuICAgICAgICAgICAgJ25hcmdzLWVhdHMtb3B0aW9ucyc6IGZhbHNlLFxuICAgICAgICAgICAgJ25lZ2F0aW9uLXByZWZpeCc6ICduby0nLFxuICAgICAgICAgICAgJ3BhcnNlLW51bWJlcnMnOiB0cnVlLFxuICAgICAgICAgICAgJ3BhcnNlLXBvc2l0aW9uYWwtbnVtYmVycyc6IHRydWUsXG4gICAgICAgICAgICAncG9wdWxhdGUtLSc6IGZhbHNlLFxuICAgICAgICAgICAgJ3NldC1wbGFjZWhvbGRlci1rZXknOiBmYWxzZSxcbiAgICAgICAgICAgICdzaG9ydC1vcHRpb24tZ3JvdXBzJzogdHJ1ZSxcbiAgICAgICAgICAgICdzdHJpcC1hbGlhc2VkJzogZmFsc2UsXG4gICAgICAgICAgICAnc3RyaXAtZGFzaGVkJzogZmFsc2UsXG4gICAgICAgICAgICAndW5rbm93bi1vcHRpb25zLWFzLWFyZ3MnOiBmYWxzZVxuICAgICAgICB9LCBvcHRzLmNvbmZpZ3VyYXRpb24pO1xuICAgICAgICBjb25zdCBkZWZhdWx0cyA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShudWxsKSwgb3B0cy5kZWZhdWx0KTtcbiAgICAgICAgY29uc3QgY29uZmlnT2JqZWN0cyA9IG9wdHMuY29uZmlnT2JqZWN0cyB8fCBbXTtcbiAgICAgICAgY29uc3QgZW52UHJlZml4ID0gb3B0cy5lbnZQcmVmaXg7XG4gICAgICAgIGNvbnN0IG5vdEZsYWdzT3B0aW9uID0gY29uZmlndXJhdGlvblsncG9wdWxhdGUtLSddO1xuICAgICAgICBjb25zdCBub3RGbGFnc0FyZ3YgPSBub3RGbGFnc09wdGlvbiA/ICctLScgOiAnXyc7XG4gICAgICAgIGNvbnN0IG5ld0FsaWFzZXMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICBjb25zdCBkZWZhdWx0ZWQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICBjb25zdCBfXyA9IG9wdHMuX18gfHwgbWl4aW4uZm9ybWF0O1xuICAgICAgICBjb25zdCBmbGFncyA9IHtcbiAgICAgICAgICAgIGFsaWFzZXM6IE9iamVjdC5jcmVhdGUobnVsbCksXG4gICAgICAgICAgICBhcnJheXM6IE9iamVjdC5jcmVhdGUobnVsbCksXG4gICAgICAgICAgICBib29sczogT2JqZWN0LmNyZWF0ZShudWxsKSxcbiAgICAgICAgICAgIHN0cmluZ3M6IE9iamVjdC5jcmVhdGUobnVsbCksXG4gICAgICAgICAgICBudW1iZXJzOiBPYmplY3QuY3JlYXRlKG51bGwpLFxuICAgICAgICAgICAgY291bnRzOiBPYmplY3QuY3JlYXRlKG51bGwpLFxuICAgICAgICAgICAgbm9ybWFsaXplOiBPYmplY3QuY3JlYXRlKG51bGwpLFxuICAgICAgICAgICAgY29uZmlnczogT2JqZWN0LmNyZWF0ZShudWxsKSxcbiAgICAgICAgICAgIG5hcmdzOiBPYmplY3QuY3JlYXRlKG51bGwpLFxuICAgICAgICAgICAgY29lcmNpb25zOiBPYmplY3QuY3JlYXRlKG51bGwpLFxuICAgICAgICAgICAga2V5czogW11cbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgbmVnYXRpdmUgPSAvXi0oWzAtOV0rKFxcLlswLTldKyk/fFxcLlswLTldKykkLztcbiAgICAgICAgY29uc3QgbmVnYXRlZEJvb2xlYW4gPSBuZXcgUmVnRXhwKCdeLS0nICsgY29uZmlndXJhdGlvblsnbmVnYXRpb24tcHJlZml4J10gKyAnKC4rKScpO1xuICAgICAgICBbXS5jb25jYXQob3B0cy5hcnJheSB8fCBbXSkuZmlsdGVyKEJvb2xlYW4pLmZvckVhY2goZnVuY3Rpb24gKG9wdCkge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gdHlwZW9mIG9wdCA9PT0gJ29iamVjdCcgPyBvcHQua2V5IDogb3B0O1xuICAgICAgICAgICAgY29uc3QgYXNzaWdubWVudCA9IE9iamVjdC5rZXlzKG9wdCkubWFwKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhcnJheUZsYWdLZXlzID0ge1xuICAgICAgICAgICAgICAgICAgICBib29sZWFuOiAnYm9vbHMnLFxuICAgICAgICAgICAgICAgICAgICBzdHJpbmc6ICdzdHJpbmdzJyxcbiAgICAgICAgICAgICAgICAgICAgbnVtYmVyOiAnbnVtYmVycydcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHJldHVybiBhcnJheUZsYWdLZXlzW2tleV07XG4gICAgICAgICAgICB9KS5maWx0ZXIoQm9vbGVhbikucG9wKCk7XG4gICAgICAgICAgICBpZiAoYXNzaWdubWVudCkge1xuICAgICAgICAgICAgICAgIGZsYWdzW2Fzc2lnbm1lbnRdW2tleV0gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmxhZ3MuYXJyYXlzW2tleV0gPSB0cnVlO1xuICAgICAgICAgICAgZmxhZ3Mua2V5cy5wdXNoKGtleSk7XG4gICAgICAgIH0pO1xuICAgICAgICBbXS5jb25jYXQob3B0cy5ib29sZWFuIHx8IFtdKS5maWx0ZXIoQm9vbGVhbikuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICBmbGFncy5ib29sc1trZXldID0gdHJ1ZTtcbiAgICAgICAgICAgIGZsYWdzLmtleXMucHVzaChrZXkpO1xuICAgICAgICB9KTtcbiAgICAgICAgW10uY29uY2F0KG9wdHMuc3RyaW5nIHx8IFtdKS5maWx0ZXIoQm9vbGVhbikuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICBmbGFncy5zdHJpbmdzW2tleV0gPSB0cnVlO1xuICAgICAgICAgICAgZmxhZ3Mua2V5cy5wdXNoKGtleSk7XG4gICAgICAgIH0pO1xuICAgICAgICBbXS5jb25jYXQob3B0cy5udW1iZXIgfHwgW10pLmZpbHRlcihCb29sZWFuKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIGZsYWdzLm51bWJlcnNba2V5XSA9IHRydWU7XG4gICAgICAgICAgICBmbGFncy5rZXlzLnB1c2goa2V5KTtcbiAgICAgICAgfSk7XG4gICAgICAgIFtdLmNvbmNhdChvcHRzLmNvdW50IHx8IFtdKS5maWx0ZXIoQm9vbGVhbikuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICBmbGFncy5jb3VudHNba2V5XSA9IHRydWU7XG4gICAgICAgICAgICBmbGFncy5rZXlzLnB1c2goa2V5KTtcbiAgICAgICAgfSk7XG4gICAgICAgIFtdLmNvbmNhdChvcHRzLm5vcm1hbGl6ZSB8fCBbXSkuZmlsdGVyKEJvb2xlYW4pLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgZmxhZ3Mubm9ybWFsaXplW2tleV0gPSB0cnVlO1xuICAgICAgICAgICAgZmxhZ3Mua2V5cy5wdXNoKGtleSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAodHlwZW9mIG9wdHMubmFyZyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKG9wdHMubmFyZykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3MubmFyZ3Nba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBmbGFncy5rZXlzLnB1c2goa2V5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIG9wdHMuY29lcmNlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMob3B0cy5jb2VyY2UpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3MuY29lcmNpb25zW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3Mua2V5cy5wdXNoKGtleSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBvcHRzLmNvbmZpZyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9wdHMuY29uZmlnKSB8fCB0eXBlb2Ygb3B0cy5jb25maWcgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgW10uY29uY2F0KG9wdHMuY29uZmlnKS5maWx0ZXIoQm9vbGVhbikuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIGZsYWdzLmNvbmZpZ3Nba2V5XSA9IHRydWU7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlb2Ygb3B0cy5jb25maWcgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMob3B0cy5jb25maWcpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicgfHwgdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmbGFncy5jb25maWdzW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGV4dGVuZEFsaWFzZXMob3B0cy5rZXksIGFsaWFzZXMsIG9wdHMuZGVmYXVsdCwgZmxhZ3MuYXJyYXlzKTtcbiAgICAgICAgT2JqZWN0LmtleXMoZGVmYXVsdHMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgKGZsYWdzLmFsaWFzZXNba2V5XSB8fCBbXSkuZm9yRWFjaChmdW5jdGlvbiAoYWxpYXMpIHtcbiAgICAgICAgICAgICAgICBkZWZhdWx0c1thbGlhc10gPSBkZWZhdWx0c1trZXldO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgZXJyb3IgPSBudWxsO1xuICAgICAgICBjaGVja0NvbmZpZ3VyYXRpb24oKTtcbiAgICAgICAgbGV0IG5vdEZsYWdzID0gW107XG4gICAgICAgIGNvbnN0IGFyZ3YgPSBPYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUobnVsbCksIHsgXzogW10gfSk7XG4gICAgICAgIGNvbnN0IGFyZ3ZSZXR1cm4gPSB7fTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBhcmcgPSBhcmdzW2ldO1xuICAgICAgICAgICAgY29uc3QgdHJ1bmNhdGVkQXJnID0gYXJnLnJlcGxhY2UoL14tezMsfS8sICctLS0nKTtcbiAgICAgICAgICAgIGxldCBicm9rZW47XG4gICAgICAgICAgICBsZXQga2V5O1xuICAgICAgICAgICAgbGV0IGxldHRlcnM7XG4gICAgICAgICAgICBsZXQgbTtcbiAgICAgICAgICAgIGxldCBuZXh0O1xuICAgICAgICAgICAgbGV0IHZhbHVlO1xuICAgICAgICAgICAgaWYgKGFyZyAhPT0gJy0tJyAmJiBpc1Vua25vd25PcHRpb25Bc0FyZyhhcmcpKSB7XG4gICAgICAgICAgICAgICAgcHVzaFBvc2l0aW9uYWwoYXJnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRydW5jYXRlZEFyZy5tYXRjaCgvLS0tKyg9fCQpLykpIHtcbiAgICAgICAgICAgICAgICBwdXNoUG9zaXRpb25hbChhcmcpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoYXJnLm1hdGNoKC9eLS0uKz0vKSB8fCAoIWNvbmZpZ3VyYXRpb25bJ3Nob3J0LW9wdGlvbi1ncm91cHMnXSAmJiBhcmcubWF0Y2goL14tLis9LykpKSB7XG4gICAgICAgICAgICAgICAgbSA9IGFyZy5tYXRjaCgvXi0tPyhbXj1dKyk9KFtcXHNcXFNdKikkLyk7XG4gICAgICAgICAgICAgICAgaWYgKG0gIT09IG51bGwgJiYgQXJyYXkuaXNBcnJheShtKSAmJiBtLmxlbmd0aCA+PSAzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjaGVja0FsbEFsaWFzZXMobVsxXSwgZmxhZ3MuYXJyYXlzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGVhdEFycmF5KGksIG1bMV0sIGFyZ3MsIG1bMl0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrQWxsQWxpYXNlcyhtWzFdLCBmbGFncy5uYXJncykgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpID0gZWF0TmFyZ3MoaSwgbVsxXSwgYXJncywgbVsyXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRBcmcobVsxXSwgbVsyXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChhcmcubWF0Y2gobmVnYXRlZEJvb2xlYW4pICYmIGNvbmZpZ3VyYXRpb25bJ2Jvb2xlYW4tbmVnYXRpb24nXSkge1xuICAgICAgICAgICAgICAgIG0gPSBhcmcubWF0Y2gobmVnYXRlZEJvb2xlYW4pO1xuICAgICAgICAgICAgICAgIGlmIChtICE9PSBudWxsICYmIEFycmF5LmlzQXJyYXkobSkgJiYgbS5sZW5ndGggPj0gMikge1xuICAgICAgICAgICAgICAgICAgICBrZXkgPSBtWzFdO1xuICAgICAgICAgICAgICAgICAgICBzZXRBcmcoa2V5LCBjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5hcnJheXMpID8gW2ZhbHNlXSA6IGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChhcmcubWF0Y2goL14tLS4rLykgfHwgKCFjb25maWd1cmF0aW9uWydzaG9ydC1vcHRpb24tZ3JvdXBzJ10gJiYgYXJnLm1hdGNoKC9eLVteLV0rLykpKSB7XG4gICAgICAgICAgICAgICAgbSA9IGFyZy5tYXRjaCgvXi0tPyguKykvKTtcbiAgICAgICAgICAgICAgICBpZiAobSAhPT0gbnVsbCAmJiBBcnJheS5pc0FycmF5KG0pICYmIG0ubGVuZ3RoID49IDIpIHtcbiAgICAgICAgICAgICAgICAgICAga2V5ID0gbVsxXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmFycmF5cykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBlYXRBcnJheShpLCBrZXksIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLm5hcmdzKSAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBlYXROYXJncyhpLCBrZXksIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCA9IGFyZ3NbaSArIDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5leHQgIT09IHVuZGVmaW5lZCAmJiAoIW5leHQubWF0Y2goL14tLykgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0Lm1hdGNoKG5lZ2F0aXZlKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuYm9vbHMpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIWNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmNvdW50cykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRBcmcoa2V5LCBuZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgvXih0cnVlfGZhbHNlKSQvLnRlc3QobmV4dCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRBcmcoa2V5LCBuZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRBcmcoa2V5LCBkZWZhdWx0VmFsdWUoa2V5KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChhcmcubWF0Y2goL14tLlxcLi4rPS8pKSB7XG4gICAgICAgICAgICAgICAgbSA9IGFyZy5tYXRjaCgvXi0oW149XSspPShbXFxzXFxTXSopJC8pO1xuICAgICAgICAgICAgICAgIGlmIChtICE9PSBudWxsICYmIEFycmF5LmlzQXJyYXkobSkgJiYgbS5sZW5ndGggPj0gMykge1xuICAgICAgICAgICAgICAgICAgICBzZXRBcmcobVsxXSwgbVsyXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoYXJnLm1hdGNoKC9eLS5cXC4uKy8pICYmICFhcmcubWF0Y2gobmVnYXRpdmUpKSB7XG4gICAgICAgICAgICAgICAgbmV4dCA9IGFyZ3NbaSArIDFdO1xuICAgICAgICAgICAgICAgIG0gPSBhcmcubWF0Y2goL14tKC5cXC4uKykvKTtcbiAgICAgICAgICAgICAgICBpZiAobSAhPT0gbnVsbCAmJiBBcnJheS5pc0FycmF5KG0pICYmIG0ubGVuZ3RoID49IDIpIHtcbiAgICAgICAgICAgICAgICAgICAga2V5ID0gbVsxXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5leHQgIT09IHVuZGVmaW5lZCAmJiAhbmV4dC5tYXRjaCgvXi0vKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgIWNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmJvb2xzKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgIWNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmNvdW50cykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEFyZyhrZXksIG5leHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0QXJnKGtleSwgZGVmYXVsdFZhbHVlKGtleSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoYXJnLm1hdGNoKC9eLVteLV0rLykgJiYgIWFyZy5tYXRjaChuZWdhdGl2ZSkpIHtcbiAgICAgICAgICAgICAgICBsZXR0ZXJzID0gYXJnLnNsaWNlKDEsIC0xKS5zcGxpdCgnJyk7XG4gICAgICAgICAgICAgICAgYnJva2VuID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBsZXR0ZXJzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgIG5leHQgPSBhcmcuc2xpY2UoaiArIDIpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobGV0dGVyc1tqICsgMV0gJiYgbGV0dGVyc1tqICsgMV0gPT09ICc9Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBhcmcuc2xpY2UoaiArIDMpO1xuICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0gbGV0dGVyc1tqXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5hcnJheXMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGVhdEFycmF5KGksIGtleSwgYXJncywgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MubmFyZ3MpICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBlYXROYXJncyhpLCBrZXksIGFyZ3MsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEFyZyhrZXksIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyb2tlbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCA9PT0gJy0nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRBcmcobGV0dGVyc1tqXSwgbmV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoL1tBLVphLXpdLy50ZXN0KGxldHRlcnNbal0pICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAvXi0/XFxkKyhcXC5cXGQqKT8oZS0/XFxkKyk/JC8udGVzdChuZXh0KSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tBbGxBbGlhc2VzKG5leHQsIGZsYWdzLmJvb2xzKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEFyZyhsZXR0ZXJzW2pdLCBuZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyb2tlbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAobGV0dGVyc1tqICsgMV0gJiYgbGV0dGVyc1tqICsgMV0ubWF0Y2goL1xcVy8pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRBcmcobGV0dGVyc1tqXSwgbmV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicm9rZW4gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRBcmcobGV0dGVyc1tqXSwgZGVmYXVsdFZhbHVlKGxldHRlcnNbal0pKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBrZXkgPSBhcmcuc2xpY2UoLTEpWzBdO1xuICAgICAgICAgICAgICAgIGlmICghYnJva2VuICYmIGtleSAhPT0gJy0nKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5hcnJheXMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpID0gZWF0QXJyYXkoaSwga2V5LCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5uYXJncykgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpID0gZWF0TmFyZ3MoaSwga2V5LCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgPSBhcmdzW2kgKyAxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0ICE9PSB1bmRlZmluZWQgJiYgKCEvXigtfC0tKVteLV0vLnRlc3QobmV4dCkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0Lm1hdGNoKG5lZ2F0aXZlKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuYm9vbHMpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIWNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmNvdW50cykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRBcmcoa2V5LCBuZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgvXih0cnVlfGZhbHNlKSQvLnRlc3QobmV4dCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRBcmcoa2V5LCBuZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRBcmcoa2V5LCBkZWZhdWx0VmFsdWUoa2V5KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChhcmcubWF0Y2goL14tWzAtOV0kLykgJiZcbiAgICAgICAgICAgICAgICBhcmcubWF0Y2gobmVnYXRpdmUpICYmXG4gICAgICAgICAgICAgICAgY2hlY2tBbGxBbGlhc2VzKGFyZy5zbGljZSgxKSwgZmxhZ3MuYm9vbHMpKSB7XG4gICAgICAgICAgICAgICAga2V5ID0gYXJnLnNsaWNlKDEpO1xuICAgICAgICAgICAgICAgIHNldEFyZyhrZXksIGRlZmF1bHRWYWx1ZShrZXkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGFyZyA9PT0gJy0tJykge1xuICAgICAgICAgICAgICAgIG5vdEZsYWdzID0gYXJncy5zbGljZShpICsgMSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjb25maWd1cmF0aW9uWydoYWx0LWF0LW5vbi1vcHRpb24nXSkge1xuICAgICAgICAgICAgICAgIG5vdEZsYWdzID0gYXJncy5zbGljZShpKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHB1c2hQb3NpdGlvbmFsKGFyZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYXBwbHlFbnZWYXJzKGFyZ3YsIHRydWUpO1xuICAgICAgICBhcHBseUVudlZhcnMoYXJndiwgZmFsc2UpO1xuICAgICAgICBzZXRDb25maWcoYXJndik7XG4gICAgICAgIHNldENvbmZpZ09iamVjdHMoKTtcbiAgICAgICAgYXBwbHlEZWZhdWx0c0FuZEFsaWFzZXMoYXJndiwgZmxhZ3MuYWxpYXNlcywgZGVmYXVsdHMsIHRydWUpO1xuICAgICAgICBhcHBseUNvZXJjaW9ucyhhcmd2KTtcbiAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb25bJ3NldC1wbGFjZWhvbGRlci1rZXknXSlcbiAgICAgICAgICAgIHNldFBsYWNlaG9sZGVyS2V5cyhhcmd2KTtcbiAgICAgICAgT2JqZWN0LmtleXMoZmxhZ3MuY291bnRzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIGlmICghaGFzS2V5KGFyZ3YsIGtleS5zcGxpdCgnLicpKSlcbiAgICAgICAgICAgICAgICBzZXRBcmcoa2V5LCAwKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChub3RGbGFnc09wdGlvbiAmJiBub3RGbGFncy5sZW5ndGgpXG4gICAgICAgICAgICBhcmd2W25vdEZsYWdzQXJndl0gPSBbXTtcbiAgICAgICAgbm90RmxhZ3MuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICBhcmd2W25vdEZsYWdzQXJndl0ucHVzaChrZXkpO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb25bJ2NhbWVsLWNhc2UtZXhwYW5zaW9uJ10gJiYgY29uZmlndXJhdGlvblsnc3RyaXAtZGFzaGVkJ10pIHtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGFyZ3YpLmZpbHRlcihrZXkgPT4ga2V5ICE9PSAnLS0nICYmIGtleS5pbmNsdWRlcygnLScpKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIGFyZ3Zba2V5XTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb25maWd1cmF0aW9uWydzdHJpcC1hbGlhc2VkJ10pIHtcbiAgICAgICAgICAgIFtdLmNvbmNhdCguLi5PYmplY3Qua2V5cyhhbGlhc2VzKS5tYXAoayA9PiBhbGlhc2VzW2tdKSkuZm9yRWFjaChhbGlhcyA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb25bJ2NhbWVsLWNhc2UtZXhwYW5zaW9uJ10gJiYgYWxpYXMuaW5jbHVkZXMoJy0nKSkge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgYXJndlthbGlhcy5zcGxpdCgnLicpLm1hcChwcm9wID0+IGNhbWVsQ2FzZShwcm9wKSkuam9pbignLicpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGVsZXRlIGFyZ3ZbYWxpYXNdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gcHVzaFBvc2l0aW9uYWwoYXJnKSB7XG4gICAgICAgICAgICBjb25zdCBtYXliZUNvZXJjZWROdW1iZXIgPSBtYXliZUNvZXJjZU51bWJlcignXycsIGFyZyk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG1heWJlQ29lcmNlZE51bWJlciA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIG1heWJlQ29lcmNlZE51bWJlciA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICBhcmd2Ll8ucHVzaChtYXliZUNvZXJjZWROdW1iZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGVhdE5hcmdzKGksIGtleSwgYXJncywgYXJnQWZ0ZXJFcXVhbFNpZ24pIHtcbiAgICAgICAgICAgIGxldCBpaTtcbiAgICAgICAgICAgIGxldCB0b0VhdCA9IGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLm5hcmdzKTtcbiAgICAgICAgICAgIHRvRWF0ID0gdHlwZW9mIHRvRWF0ICE9PSAnbnVtYmVyJyB8fCBpc05hTih0b0VhdCkgPyAxIDogdG9FYXQ7XG4gICAgICAgICAgICBpZiAodG9FYXQgPT09IDApIHtcbiAgICAgICAgICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGFyZ0FmdGVyRXF1YWxTaWduKSkge1xuICAgICAgICAgICAgICAgICAgICBlcnJvciA9IEVycm9yKF9fKCdBcmd1bWVudCB1bmV4cGVjdGVkIGZvcjogJXMnLCBrZXkpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc2V0QXJnKGtleSwgZGVmYXVsdFZhbHVlKGtleSkpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IGF2YWlsYWJsZSA9IGlzVW5kZWZpbmVkKGFyZ0FmdGVyRXF1YWxTaWduKSA/IDAgOiAxO1xuICAgICAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb25bJ25hcmdzLWVhdHMtb3B0aW9ucyddKSB7XG4gICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIC0gKGkgKyAxKSArIGF2YWlsYWJsZSA8IHRvRWF0KSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yID0gRXJyb3IoX18oJ05vdCBlbm91Z2ggYXJndW1lbnRzIGZvbGxvd2luZzogJXMnLCBrZXkpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXZhaWxhYmxlID0gdG9FYXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBmb3IgKGlpID0gaSArIDE7IGlpIDwgYXJncy5sZW5ndGg7IGlpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFhcmdzW2lpXS5tYXRjaCgvXi1bXjAtOV0vKSB8fCBhcmdzW2lpXS5tYXRjaChuZWdhdGl2ZSkgfHwgaXNVbmtub3duT3B0aW9uQXNBcmcoYXJnc1tpaV0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlKys7XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoYXZhaWxhYmxlIDwgdG9FYXQpXG4gICAgICAgICAgICAgICAgICAgIGVycm9yID0gRXJyb3IoX18oJ05vdCBlbm91Z2ggYXJndW1lbnRzIGZvbGxvd2luZzogJXMnLCBrZXkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBjb25zdW1lZCA9IE1hdGgubWluKGF2YWlsYWJsZSwgdG9FYXQpO1xuICAgICAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChhcmdBZnRlckVxdWFsU2lnbikgJiYgY29uc3VtZWQgPiAwKSB7XG4gICAgICAgICAgICAgICAgc2V0QXJnKGtleSwgYXJnQWZ0ZXJFcXVhbFNpZ24pO1xuICAgICAgICAgICAgICAgIGNvbnN1bWVkLS07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGlpID0gaSArIDE7IGlpIDwgKGNvbnN1bWVkICsgaSArIDEpOyBpaSsrKSB7XG4gICAgICAgICAgICAgICAgc2V0QXJnKGtleSwgYXJnc1tpaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIChpICsgY29uc3VtZWQpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGVhdEFycmF5KGksIGtleSwgYXJncywgYXJnQWZ0ZXJFcXVhbFNpZ24pIHtcbiAgICAgICAgICAgIGxldCBhcmdzVG9TZXQgPSBbXTtcbiAgICAgICAgICAgIGxldCBuZXh0ID0gYXJnQWZ0ZXJFcXVhbFNpZ24gfHwgYXJnc1tpICsgMV07XG4gICAgICAgICAgICBjb25zdCBuYXJnc0NvdW50ID0gY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MubmFyZ3MpO1xuICAgICAgICAgICAgaWYgKGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmJvb2xzKSAmJiAhKC9eKHRydWV8ZmFsc2UpJC8udGVzdChuZXh0KSkpIHtcbiAgICAgICAgICAgICAgICBhcmdzVG9TZXQucHVzaCh0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGlzVW5kZWZpbmVkKG5leHQpIHx8XG4gICAgICAgICAgICAgICAgKGlzVW5kZWZpbmVkKGFyZ0FmdGVyRXF1YWxTaWduKSAmJiAvXi0vLnRlc3QobmV4dCkgJiYgIW5lZ2F0aXZlLnRlc3QobmV4dCkgJiYgIWlzVW5rbm93bk9wdGlvbkFzQXJnKG5leHQpKSkge1xuICAgICAgICAgICAgICAgIGlmIChkZWZhdWx0c1trZXldICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVmVmFsID0gZGVmYXVsdHNba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgYXJnc1RvU2V0ID0gQXJyYXkuaXNBcnJheShkZWZWYWwpID8gZGVmVmFsIDogW2RlZlZhbF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChhcmdBZnRlckVxdWFsU2lnbikpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJnc1RvU2V0LnB1c2gocHJvY2Vzc1ZhbHVlKGtleSwgYXJnQWZ0ZXJFcXVhbFNpZ24pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaWkgPSBpICsgMTsgaWkgPCBhcmdzLmxlbmd0aDsgaWkrKykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoKCFjb25maWd1cmF0aW9uWydncmVlZHktYXJyYXlzJ10gJiYgYXJnc1RvU2V0Lmxlbmd0aCA+IDApIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAobmFyZ3NDb3VudCAmJiB0eXBlb2YgbmFyZ3NDb3VudCA9PT0gJ251bWJlcicgJiYgYXJnc1RvU2V0Lmxlbmd0aCA+PSBuYXJnc0NvdW50KSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBuZXh0ID0gYXJnc1tpaV07XG4gICAgICAgICAgICAgICAgICAgIGlmICgvXi0vLnRlc3QobmV4dCkgJiYgIW5lZ2F0aXZlLnRlc3QobmV4dCkgJiYgIWlzVW5rbm93bk9wdGlvbkFzQXJnKG5leHQpKVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGkgPSBpaTtcbiAgICAgICAgICAgICAgICAgICAgYXJnc1RvU2V0LnB1c2gocHJvY2Vzc1ZhbHVlKGtleSwgbmV4dCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2YgbmFyZ3NDb3VudCA9PT0gJ251bWJlcicgJiYgKChuYXJnc0NvdW50ICYmIGFyZ3NUb1NldC5sZW5ndGggPCBuYXJnc0NvdW50KSB8fFxuICAgICAgICAgICAgICAgIChpc05hTihuYXJnc0NvdW50KSAmJiBhcmdzVG9TZXQubGVuZ3RoID09PSAwKSkpIHtcbiAgICAgICAgICAgICAgICBlcnJvciA9IEVycm9yKF9fKCdOb3QgZW5vdWdoIGFyZ3VtZW50cyBmb2xsb3dpbmc6ICVzJywga2V5KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZXRBcmcoa2V5LCBhcmdzVG9TZXQpO1xuICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gc2V0QXJnKGtleSwgdmFsKSB7XG4gICAgICAgICAgICBpZiAoLy0vLnRlc3Qoa2V5KSAmJiBjb25maWd1cmF0aW9uWydjYW1lbC1jYXNlLWV4cGFuc2lvbiddKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWxpYXMgPSBrZXkuc3BsaXQoJy4nKS5tYXAoZnVuY3Rpb24gKHByb3ApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbWVsQ2FzZShwcm9wKTtcbiAgICAgICAgICAgICAgICB9KS5qb2luKCcuJyk7XG4gICAgICAgICAgICAgICAgYWRkTmV3QWxpYXMoa2V5LCBhbGlhcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHByb2Nlc3NWYWx1ZShrZXksIHZhbCk7XG4gICAgICAgICAgICBjb25zdCBzcGxpdEtleSA9IGtleS5zcGxpdCgnLicpO1xuICAgICAgICAgICAgc2V0S2V5KGFyZ3YsIHNwbGl0S2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICBpZiAoZmxhZ3MuYWxpYXNlc1trZXldKSB7XG4gICAgICAgICAgICAgICAgZmxhZ3MuYWxpYXNlc1trZXldLmZvckVhY2goZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qga2V5UHJvcGVydGllcyA9IHguc3BsaXQoJy4nKTtcbiAgICAgICAgICAgICAgICAgICAgc2V0S2V5KGFyZ3YsIGtleVByb3BlcnRpZXMsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzcGxpdEtleS5sZW5ndGggPiAxICYmIGNvbmZpZ3VyYXRpb25bJ2RvdC1ub3RhdGlvbiddKSB7XG4gICAgICAgICAgICAgICAgKGZsYWdzLmFsaWFzZXNbc3BsaXRLZXlbMF1dIHx8IFtdKS5mb3JFYWNoKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBrZXlQcm9wZXJ0aWVzID0geC5zcGxpdCgnLicpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhID0gW10uY29uY2F0KHNwbGl0S2V5KTtcbiAgICAgICAgICAgICAgICAgICAgYS5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICBrZXlQcm9wZXJ0aWVzID0ga2V5UHJvcGVydGllcy5jb25jYXQoYSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghKGZsYWdzLmFsaWFzZXNba2V5XSB8fCBbXSkuaW5jbHVkZXMoa2V5UHJvcGVydGllcy5qb2luKCcuJykpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRLZXkoYXJndiwga2V5UHJvcGVydGllcywgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3Mubm9ybWFsaXplKSAmJiAhY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuYXJyYXlzKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGtleXMgPSBba2V5XS5jb25jYXQoZmxhZ3MuYWxpYXNlc1trZXldIHx8IFtdKTtcbiAgICAgICAgICAgICAgICBrZXlzLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoYXJndlJldHVybiwga2V5LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWw7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IG1peGluLm5vcm1hbGl6ZSh2YWx1ZSkgOiB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gYWRkTmV3QWxpYXMoa2V5LCBhbGlhcykge1xuICAgICAgICAgICAgaWYgKCEoZmxhZ3MuYWxpYXNlc1trZXldICYmIGZsYWdzLmFsaWFzZXNba2V5XS5sZW5ndGgpKSB7XG4gICAgICAgICAgICAgICAgZmxhZ3MuYWxpYXNlc1trZXldID0gW2FsaWFzXTtcbiAgICAgICAgICAgICAgICBuZXdBbGlhc2VzW2FsaWFzXSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIShmbGFncy5hbGlhc2VzW2FsaWFzXSAmJiBmbGFncy5hbGlhc2VzW2FsaWFzXS5sZW5ndGgpKSB7XG4gICAgICAgICAgICAgICAgYWRkTmV3QWxpYXMoYWxpYXMsIGtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gcHJvY2Vzc1ZhbHVlKGtleSwgdmFsKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICAgICAgICAodmFsWzBdID09PSBcIidcIiB8fCB2YWxbMF0gPT09ICdcIicpICYmXG4gICAgICAgICAgICAgICAgdmFsW3ZhbC5sZW5ndGggLSAxXSA9PT0gdmFsWzBdKSB7XG4gICAgICAgICAgICAgICAgdmFsID0gdmFsLnN1YnN0cmluZygxLCB2YWwubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuYm9vbHMpIHx8IGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmNvdW50cykpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpXG4gICAgICAgICAgICAgICAgICAgIHZhbCA9IHZhbCA9PT0gJ3RydWUnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IHZhbHVlID0gQXJyYXkuaXNBcnJheSh2YWwpXG4gICAgICAgICAgICAgICAgPyB2YWwubWFwKGZ1bmN0aW9uICh2KSB7IHJldHVybiBtYXliZUNvZXJjZU51bWJlcihrZXksIHYpOyB9KVxuICAgICAgICAgICAgICAgIDogbWF5YmVDb2VyY2VOdW1iZXIoa2V5LCB2YWwpO1xuICAgICAgICAgICAgaWYgKGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmNvdW50cykgJiYgKGlzVW5kZWZpbmVkKHZhbHVlKSB8fCB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJykpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGluY3JlbWVudCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLm5vcm1hbGl6ZSkgJiYgY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuYXJyYXlzKSkge1xuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbCkpXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsLm1hcCgodmFsKSA9PiB7IHJldHVybiBtaXhpbi5ub3JtYWxpemUodmFsKTsgfSk7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IG1peGluLm5vcm1hbGl6ZSh2YWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIG1heWJlQ29lcmNlTnVtYmVyKGtleSwgdmFsdWUpIHtcbiAgICAgICAgICAgIGlmICghY29uZmlndXJhdGlvblsncGFyc2UtcG9zaXRpb25hbC1udW1iZXJzJ10gJiYga2V5ID09PSAnXycpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgaWYgKCFjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5zdHJpbmdzKSAmJiAhY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuYm9vbHMpICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNob3VsZENvZXJjZU51bWJlciA9IGxvb2tzTGlrZU51bWJlcih2YWx1ZSkgJiYgY29uZmlndXJhdGlvblsncGFyc2UtbnVtYmVycyddICYmIChOdW1iZXIuaXNTYWZlSW50ZWdlcihNYXRoLmZsb29yKHBhcnNlRmxvYXQoYCR7dmFsdWV9YCkpKSk7XG4gICAgICAgICAgICAgICAgaWYgKHNob3VsZENvZXJjZU51bWJlciB8fCAoIWlzVW5kZWZpbmVkKHZhbHVlKSAmJiBjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5udW1iZXJzKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBOdW1iZXIodmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBzZXRDb25maWcoYXJndikge1xuICAgICAgICAgICAgY29uc3QgY29uZmlnTG9va3VwID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICAgIGFwcGx5RGVmYXVsdHNBbmRBbGlhc2VzKGNvbmZpZ0xvb2t1cCwgZmxhZ3MuYWxpYXNlcywgZGVmYXVsdHMpO1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoZmxhZ3MuY29uZmlncykuZm9yRWFjaChmdW5jdGlvbiAoY29uZmlnS2V5KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29uZmlnUGF0aCA9IGFyZ3ZbY29uZmlnS2V5XSB8fCBjb25maWdMb29rdXBbY29uZmlnS2V5XTtcbiAgICAgICAgICAgICAgICBpZiAoY29uZmlnUGF0aCkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbmZpZyA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXNvbHZlZENvbmZpZ1BhdGggPSBtaXhpbi5yZXNvbHZlKG1peGluLmN3ZCgpLCBjb25maWdQYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc29sdmVDb25maWcgPSBmbGFncy5jb25maWdzW2NvbmZpZ0tleV07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHJlc29sdmVDb25maWcgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcgPSByZXNvbHZlQ29uZmlnKHJlc29sdmVkQ29uZmlnUGF0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZyA9IGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25maWcgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IGNvbmZpZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZyA9IG1peGluLnJlcXVpcmUocmVzb2x2ZWRDb25maWdQYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHNldENvbmZpZ09iamVjdChjb25maWcpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4Lm5hbWUgPT09ICdQZXJtaXNzaW9uRGVuaWVkJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IGV4O1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoYXJndltjb25maWdLZXldKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gRXJyb3IoX18oJ0ludmFsaWQgSlNPTiBjb25maWcgZmlsZTogJXMnLCBjb25maWdQYXRoKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBzZXRDb25maWdPYmplY3QoY29uZmlnLCBwcmV2KSB7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhjb25maWcpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gY29uZmlnW2tleV07XG4gICAgICAgICAgICAgICAgY29uc3QgZnVsbEtleSA9IHByZXYgPyBwcmV2ICsgJy4nICsga2V5IDoga2V5O1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSAmJiBjb25maWd1cmF0aW9uWydkb3Qtbm90YXRpb24nXSkge1xuICAgICAgICAgICAgICAgICAgICBzZXRDb25maWdPYmplY3QodmFsdWUsIGZ1bGxLZXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXNLZXkoYXJndiwgZnVsbEtleS5zcGxpdCgnLicpKSB8fCAoY2hlY2tBbGxBbGlhc2VzKGZ1bGxLZXksIGZsYWdzLmFycmF5cykgJiYgY29uZmlndXJhdGlvblsnY29tYmluZS1hcnJheXMnXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEFyZyhmdWxsS2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBzZXRDb25maWdPYmplY3RzKCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25maWdPYmplY3RzICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIGNvbmZpZ09iamVjdHMuZm9yRWFjaChmdW5jdGlvbiAoY29uZmlnT2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgIHNldENvbmZpZ09iamVjdChjb25maWdPYmplY3QpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGFwcGx5RW52VmFycyhhcmd2LCBjb25maWdPbmx5KSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGVudlByZWZpeCA9PT0gJ3VuZGVmaW5lZCcpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgY29uc3QgcHJlZml4ID0gdHlwZW9mIGVudlByZWZpeCA9PT0gJ3N0cmluZycgPyBlbnZQcmVmaXggOiAnJztcbiAgICAgICAgICAgIGNvbnN0IGVudiA9IG1peGluLmVudigpO1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoZW52KS5mb3JFYWNoKGZ1bmN0aW9uIChlbnZWYXIpIHtcbiAgICAgICAgICAgICAgICBpZiAocHJlZml4ID09PSAnJyB8fCBlbnZWYXIubGFzdEluZGV4T2YocHJlZml4LCAwKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBrZXlzID0gZW52VmFyLnNwbGl0KCdfXycpLm1hcChmdW5jdGlvbiAoa2V5LCBpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9IGtleS5zdWJzdHJpbmcocHJlZml4Lmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FtZWxDYXNlKGtleSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoKChjb25maWdPbmx5ICYmIGZsYWdzLmNvbmZpZ3Nba2V5cy5qb2luKCcuJyldKSB8fCAhY29uZmlnT25seSkgJiYgIWhhc0tleShhcmd2LCBrZXlzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0QXJnKGtleXMuam9pbignLicpLCBlbnZbZW52VmFyXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBhcHBseUNvZXJjaW9ucyhhcmd2KSB7XG4gICAgICAgICAgICBsZXQgY29lcmNlO1xuICAgICAgICAgICAgY29uc3QgYXBwbGllZCA9IG5ldyBTZXQoKTtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGFyZ3YpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgICAgIGlmICghYXBwbGllZC5oYXMoa2V5KSkge1xuICAgICAgICAgICAgICAgICAgICBjb2VyY2UgPSBjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5jb2VyY2lvbnMpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvZXJjZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IG1heWJlQ29lcmNlTnVtYmVyKGtleSwgY29lcmNlKGFyZ3Zba2V5XSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChbXS5jb25jYXQoZmxhZ3MuYWxpYXNlc1trZXldIHx8IFtdLCBrZXkpKS5mb3JFYWNoKGFsaSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGxpZWQuYWRkKGFsaSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3ZbYWxpXSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gZXJyO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gc2V0UGxhY2Vob2xkZXJLZXlzKGFyZ3YpIHtcbiAgICAgICAgICAgIGZsYWdzLmtleXMuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKH5rZXkuaW5kZXhPZignLicpKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBhcmd2W2tleV0gPT09ICd1bmRlZmluZWQnKVxuICAgICAgICAgICAgICAgICAgICBhcmd2W2tleV0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBhcmd2O1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGFwcGx5RGVmYXVsdHNBbmRBbGlhc2VzKG9iaiwgYWxpYXNlcywgZGVmYXVsdHMsIGNhbkxvZyA9IGZhbHNlKSB7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhkZWZhdWx0cykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICAgICAgaWYgKCFoYXNLZXkob2JqLCBrZXkuc3BsaXQoJy4nKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0S2V5KG9iaiwga2V5LnNwbGl0KCcuJyksIGRlZmF1bHRzW2tleV0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2FuTG9nKVxuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdGVkW2tleV0gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAoYWxpYXNlc1trZXldIHx8IFtdKS5mb3JFYWNoKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzS2V5KG9iaiwgeC5zcGxpdCgnLicpKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRLZXkob2JqLCB4LnNwbGl0KCcuJyksIGRlZmF1bHRzW2tleV0pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBoYXNLZXkob2JqLCBrZXlzKSB7XG4gICAgICAgICAgICBsZXQgbyA9IG9iajtcbiAgICAgICAgICAgIGlmICghY29uZmlndXJhdGlvblsnZG90LW5vdGF0aW9uJ10pXG4gICAgICAgICAgICAgICAga2V5cyA9IFtrZXlzLmpvaW4oJy4nKV07XG4gICAgICAgICAgICBrZXlzLnNsaWNlKDAsIC0xKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgICAgICBvID0gKG9ba2V5XSB8fCB7fSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IGtleXNba2V5cy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgbyAhPT0gJ29iamVjdCcpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHJldHVybiBrZXkgaW4gbztcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBzZXRLZXkob2JqLCBrZXlzLCB2YWx1ZSkge1xuICAgICAgICAgICAgbGV0IG8gPSBvYmo7XG4gICAgICAgICAgICBpZiAoIWNvbmZpZ3VyYXRpb25bJ2RvdC1ub3RhdGlvbiddKVxuICAgICAgICAgICAgICAgIGtleXMgPSBba2V5cy5qb2luKCcuJyldO1xuICAgICAgICAgICAga2V5cy5zbGljZSgwLCAtMSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICAgICAga2V5ID0gc2FuaXRpemVLZXkoa2V5KTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG8gPT09ICdvYmplY3QnICYmIG9ba2V5XSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIG9ba2V5XSA9IHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9ba2V5XSAhPT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheShvW2tleV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9ba2V5XSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9ba2V5XS5wdXNoKHt9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9ba2V5XSA9IFtvW2tleV0sIHt9XTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBvID0gb1trZXldW29ba2V5XS5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG8gPSBvW2tleV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSBzYW5pdGl6ZUtleShrZXlzW2tleXMubGVuZ3RoIC0gMV0pO1xuICAgICAgICAgICAgY29uc3QgaXNUeXBlQXJyYXkgPSBjaGVja0FsbEFsaWFzZXMoa2V5cy5qb2luKCcuJyksIGZsYWdzLmFycmF5cyk7XG4gICAgICAgICAgICBjb25zdCBpc1ZhbHVlQXJyYXkgPSBBcnJheS5pc0FycmF5KHZhbHVlKTtcbiAgICAgICAgICAgIGxldCBkdXBsaWNhdGUgPSBjb25maWd1cmF0aW9uWydkdXBsaWNhdGUtYXJndW1lbnRzLWFycmF5J107XG4gICAgICAgICAgICBpZiAoIWR1cGxpY2F0ZSAmJiBjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5uYXJncykpIHtcbiAgICAgICAgICAgICAgICBkdXBsaWNhdGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGlmICgoIWlzVW5kZWZpbmVkKG9ba2V5XSkgJiYgZmxhZ3MubmFyZ3Nba2V5XSA9PT0gMSkgfHwgKEFycmF5LmlzQXJyYXkob1trZXldKSAmJiBvW2tleV0ubGVuZ3RoID09PSBmbGFncy5uYXJnc1trZXldKSkge1xuICAgICAgICAgICAgICAgICAgICBvW2tleV0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHZhbHVlID09PSBpbmNyZW1lbnQoKSkge1xuICAgICAgICAgICAgICAgIG9ba2V5XSA9IGluY3JlbWVudChvW2tleV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShvW2tleV0pKSB7XG4gICAgICAgICAgICAgICAgaWYgKGR1cGxpY2F0ZSAmJiBpc1R5cGVBcnJheSAmJiBpc1ZhbHVlQXJyYXkpIHtcbiAgICAgICAgICAgICAgICAgICAgb1trZXldID0gY29uZmlndXJhdGlvblsnZmxhdHRlbi1kdXBsaWNhdGUtYXJyYXlzJ10gPyBvW2tleV0uY29uY2F0KHZhbHVlKSA6IChBcnJheS5pc0FycmF5KG9ba2V5XVswXSkgPyBvW2tleV0gOiBbb1trZXldXSkuY29uY2F0KFt2YWx1ZV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICghZHVwbGljYXRlICYmIEJvb2xlYW4oaXNUeXBlQXJyYXkpID09PSBCb29sZWFuKGlzVmFsdWVBcnJheSkpIHtcbiAgICAgICAgICAgICAgICAgICAgb1trZXldID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBvW2tleV0gPSBvW2tleV0uY29uY2F0KFt2YWx1ZV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG9ba2V5XSA9PT0gdW5kZWZpbmVkICYmIGlzVHlwZUFycmF5KSB7XG4gICAgICAgICAgICAgICAgb1trZXldID0gaXNWYWx1ZUFycmF5ID8gdmFsdWUgOiBbdmFsdWVdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZHVwbGljYXRlICYmICEob1trZXldID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgICAgICBjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5jb3VudHMpIHx8XG4gICAgICAgICAgICAgICAgY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuYm9vbHMpKSkge1xuICAgICAgICAgICAgICAgIG9ba2V5XSA9IFtvW2tleV0sIHZhbHVlXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIG9ba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGV4dGVuZEFsaWFzZXMoLi4uYXJncykge1xuICAgICAgICAgICAgYXJncy5mb3JFYWNoKGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhvYmogfHwge30pLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmxhZ3MuYWxpYXNlc1trZXldKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICBmbGFncy5hbGlhc2VzW2tleV0gPSBbXS5jb25jYXQoYWxpYXNlc1trZXldIHx8IFtdKTtcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3MuYWxpYXNlc1trZXldLmNvbmNhdChrZXkpLmZvckVhY2goZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgvLS8udGVzdCh4KSAmJiBjb25maWd1cmF0aW9uWydjYW1lbC1jYXNlLWV4cGFuc2lvbiddKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYyA9IGNhbWVsQ2FzZSh4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyAhPT0ga2V5ICYmIGZsYWdzLmFsaWFzZXNba2V5XS5pbmRleE9mKGMpID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncy5hbGlhc2VzW2tleV0ucHVzaChjKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3QWxpYXNlc1tjXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3MuYWxpYXNlc1trZXldLmNvbmNhdChrZXkpLmZvckVhY2goZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4Lmxlbmd0aCA+IDEgJiYgL1tBLVpdLy50ZXN0KHgpICYmIGNvbmZpZ3VyYXRpb25bJ2NhbWVsLWNhc2UtZXhwYW5zaW9uJ10pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjID0gZGVjYW1lbGl6ZSh4LCAnLScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjICE9PSBrZXkgJiYgZmxhZ3MuYWxpYXNlc1trZXldLmluZGV4T2YoYykgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzLmFsaWFzZXNba2V5XS5wdXNoKGMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdBbGlhc2VzW2NdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBmbGFncy5hbGlhc2VzW2tleV0uZm9yRWFjaChmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MuYWxpYXNlc1t4XSA9IFtrZXldLmNvbmNhdChmbGFncy5hbGlhc2VzW2tleV0uZmlsdGVyKGZ1bmN0aW9uICh5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHggIT09IHk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZykge1xuICAgICAgICAgICAgY29uc3QgdG9DaGVjayA9IFtdLmNvbmNhdChmbGFncy5hbGlhc2VzW2tleV0gfHwgW10sIGtleSk7XG4gICAgICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoZmxhZyk7XG4gICAgICAgICAgICBjb25zdCBzZXRBbGlhcyA9IHRvQ2hlY2suZmluZChrZXkgPT4ga2V5cy5pbmNsdWRlcyhrZXkpKTtcbiAgICAgICAgICAgIHJldHVybiBzZXRBbGlhcyA/IGZsYWdbc2V0QWxpYXNdIDogZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gaGFzQW55RmxhZyhrZXkpIHtcbiAgICAgICAgICAgIGNvbnN0IGZsYWdzS2V5cyA9IE9iamVjdC5rZXlzKGZsYWdzKTtcbiAgICAgICAgICAgIGNvbnN0IHRvQ2hlY2sgPSBbXS5jb25jYXQoZmxhZ3NLZXlzLm1hcChrID0+IGZsYWdzW2tdKSk7XG4gICAgICAgICAgICByZXR1cm4gdG9DaGVjay5zb21lKGZ1bmN0aW9uIChmbGFnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoZmxhZykgPyBmbGFnLmluY2x1ZGVzKGtleSkgOiBmbGFnW2tleV07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBoYXNGbGFnc01hdGNoaW5nKGFyZywgLi4ucGF0dGVybnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHRvQ2hlY2sgPSBbXS5jb25jYXQoLi4ucGF0dGVybnMpO1xuICAgICAgICAgICAgcmV0dXJuIHRvQ2hlY2suc29tZShmdW5jdGlvbiAocGF0dGVybikge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1hdGNoID0gYXJnLm1hdGNoKHBhdHRlcm4pO1xuICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaCAmJiBoYXNBbnlGbGFnKG1hdGNoWzFdKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGhhc0FsbFNob3J0RmxhZ3MoYXJnKSB7XG4gICAgICAgICAgICBpZiAoYXJnLm1hdGNoKG5lZ2F0aXZlKSB8fCAhYXJnLm1hdGNoKC9eLVteLV0rLykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgaGFzQWxsRmxhZ3MgPSB0cnVlO1xuICAgICAgICAgICAgbGV0IG5leHQ7XG4gICAgICAgICAgICBjb25zdCBsZXR0ZXJzID0gYXJnLnNsaWNlKDEpLnNwbGl0KCcnKTtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbGV0dGVycy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIG5leHQgPSBhcmcuc2xpY2UoaiArIDIpO1xuICAgICAgICAgICAgICAgIGlmICghaGFzQW55RmxhZyhsZXR0ZXJzW2pdKSkge1xuICAgICAgICAgICAgICAgICAgICBoYXNBbGxGbGFncyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKChsZXR0ZXJzW2ogKyAxXSAmJiBsZXR0ZXJzW2ogKyAxXSA9PT0gJz0nKSB8fFxuICAgICAgICAgICAgICAgICAgICBuZXh0ID09PSAnLScgfHxcbiAgICAgICAgICAgICAgICAgICAgKC9bQS1aYS16XS8udGVzdChsZXR0ZXJzW2pdKSAmJiAvXi0/XFxkKyhcXC5cXGQqKT8oZS0/XFxkKyk/JC8udGVzdChuZXh0KSkgfHxcbiAgICAgICAgICAgICAgICAgICAgKGxldHRlcnNbaiArIDFdICYmIGxldHRlcnNbaiArIDFdLm1hdGNoKC9cXFcvKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGhhc0FsbEZsYWdzO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGlzVW5rbm93bk9wdGlvbkFzQXJnKGFyZykge1xuICAgICAgICAgICAgcmV0dXJuIGNvbmZpZ3VyYXRpb25bJ3Vua25vd24tb3B0aW9ucy1hcy1hcmdzJ10gJiYgaXNVbmtub3duT3B0aW9uKGFyZyk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gaXNVbmtub3duT3B0aW9uKGFyZykge1xuICAgICAgICAgICAgYXJnID0gYXJnLnJlcGxhY2UoL14tezMsfS8sICctLScpO1xuICAgICAgICAgICAgaWYgKGFyZy5tYXRjaChuZWdhdGl2ZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaGFzQWxsU2hvcnRGbGFncyhhcmcpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZmxhZ1dpdGhFcXVhbHMgPSAvXi0rKFtePV0rPyk9W1xcc1xcU10qJC87XG4gICAgICAgICAgICBjb25zdCBub3JtYWxGbGFnID0gL14tKyhbXj1dKz8pJC87XG4gICAgICAgICAgICBjb25zdCBmbGFnRW5kaW5nSW5IeXBoZW4gPSAvXi0rKFtePV0rPyktJC87XG4gICAgICAgICAgICBjb25zdCBmbGFnRW5kaW5nSW5EaWdpdHMgPSAvXi0rKFtePV0rP1xcZCspJC87XG4gICAgICAgICAgICBjb25zdCBmbGFnRW5kaW5nSW5Ob25Xb3JkQ2hhcmFjdGVycyA9IC9eLSsoW149XSs/KVxcVysuKiQvO1xuICAgICAgICAgICAgcmV0dXJuICFoYXNGbGFnc01hdGNoaW5nKGFyZywgZmxhZ1dpdGhFcXVhbHMsIG5lZ2F0ZWRCb29sZWFuLCBub3JtYWxGbGFnLCBmbGFnRW5kaW5nSW5IeXBoZW4sIGZsYWdFbmRpbmdJbkRpZ2l0cywgZmxhZ0VuZGluZ0luTm9uV29yZENoYXJhY3RlcnMpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGRlZmF1bHRWYWx1ZShrZXkpIHtcbiAgICAgICAgICAgIGlmICghY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuYm9vbHMpICYmXG4gICAgICAgICAgICAgICAgIWNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmNvdW50cykgJiZcbiAgICAgICAgICAgICAgICBgJHtrZXl9YCBpbiBkZWZhdWx0cykge1xuICAgICAgICAgICAgICAgIHJldHVybiBkZWZhdWx0c1trZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHRGb3JUeXBlKGd1ZXNzVHlwZShrZXkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBkZWZhdWx0Rm9yVHlwZSh0eXBlKSB7XG4gICAgICAgICAgICBjb25zdCBkZWYgPSB7XG4gICAgICAgICAgICAgICAgW0RlZmF1bHRWYWx1ZXNGb3JUeXBlS2V5LkJPT0xFQU5dOiB0cnVlLFxuICAgICAgICAgICAgICAgIFtEZWZhdWx0VmFsdWVzRm9yVHlwZUtleS5TVFJJTkddOiAnJyxcbiAgICAgICAgICAgICAgICBbRGVmYXVsdFZhbHVlc0ZvclR5cGVLZXkuTlVNQkVSXTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIFtEZWZhdWx0VmFsdWVzRm9yVHlwZUtleS5BUlJBWV06IFtdXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIGRlZlt0eXBlXTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBndWVzc1R5cGUoa2V5KSB7XG4gICAgICAgICAgICBsZXQgdHlwZSA9IERlZmF1bHRWYWx1ZXNGb3JUeXBlS2V5LkJPT0xFQU47XG4gICAgICAgICAgICBpZiAoY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3Muc3RyaW5ncykpXG4gICAgICAgICAgICAgICAgdHlwZSA9IERlZmF1bHRWYWx1ZXNGb3JUeXBlS2V5LlNUUklORztcbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLm51bWJlcnMpKVxuICAgICAgICAgICAgICAgIHR5cGUgPSBEZWZhdWx0VmFsdWVzRm9yVHlwZUtleS5OVU1CRVI7XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5ib29scykpXG4gICAgICAgICAgICAgICAgdHlwZSA9IERlZmF1bHRWYWx1ZXNGb3JUeXBlS2V5LkJPT0xFQU47XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5hcnJheXMpKVxuICAgICAgICAgICAgICAgIHR5cGUgPSBEZWZhdWx0VmFsdWVzRm9yVHlwZUtleS5BUlJBWTtcbiAgICAgICAgICAgIHJldHVybiB0eXBlO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGlzVW5kZWZpbmVkKG51bSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bSA9PT0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGNoZWNrQ29uZmlndXJhdGlvbigpIHtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGZsYWdzLmNvdW50cykuZmluZChrZXkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5hcnJheXMpKSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yID0gRXJyb3IoX18oJ0ludmFsaWQgY29uZmlndXJhdGlvbjogJXMsIG9wdHMuY291bnQgZXhjbHVkZXMgb3B0cy5hcnJheS4nLCBrZXkpKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLm5hcmdzKSkge1xuICAgICAgICAgICAgICAgICAgICBlcnJvciA9IEVycm9yKF9fKCdJbnZhbGlkIGNvbmZpZ3VyYXRpb246ICVzLCBvcHRzLmNvdW50IGV4Y2x1ZGVzIG9wdHMubmFyZy4nLCBrZXkpKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhbGlhc2VzOiBPYmplY3QuYXNzaWduKHt9LCBmbGFncy5hbGlhc2VzKSxcbiAgICAgICAgICAgIGFyZ3Y6IE9iamVjdC5hc3NpZ24oYXJndlJldHVybiwgYXJndiksXG4gICAgICAgICAgICBjb25maWd1cmF0aW9uOiBjb25maWd1cmF0aW9uLFxuICAgICAgICAgICAgZGVmYXVsdGVkOiBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0ZWQpLFxuICAgICAgICAgICAgZXJyb3I6IGVycm9yLFxuICAgICAgICAgICAgbmV3QWxpYXNlczogT2JqZWN0LmFzc2lnbih7fSwgbmV3QWxpYXNlcylcbiAgICAgICAgfTtcbiAgICB9XG59XG5mdW5jdGlvbiBjb21iaW5lQWxpYXNlcyhhbGlhc2VzKSB7XG4gICAgY29uc3QgYWxpYXNBcnJheXMgPSBbXTtcbiAgICBjb25zdCBjb21iaW5lZCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgbGV0IGNoYW5nZSA9IHRydWU7XG4gICAgT2JqZWN0LmtleXMoYWxpYXNlcykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIGFsaWFzQXJyYXlzLnB1c2goW10uY29uY2F0KGFsaWFzZXNba2V5XSwga2V5KSk7XG4gICAgfSk7XG4gICAgd2hpbGUgKGNoYW5nZSkge1xuICAgICAgICBjaGFuZ2UgPSBmYWxzZTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhbGlhc0FycmF5cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgZm9yIChsZXQgaWkgPSBpICsgMTsgaWkgPCBhbGlhc0FycmF5cy5sZW5ndGg7IGlpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbnRlcnNlY3QgPSBhbGlhc0FycmF5c1tpXS5maWx0ZXIoZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFsaWFzQXJyYXlzW2lpXS5pbmRleE9mKHYpICE9PSAtMTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAoaW50ZXJzZWN0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBhbGlhc0FycmF5c1tpXSA9IGFsaWFzQXJyYXlzW2ldLmNvbmNhdChhbGlhc0FycmF5c1tpaV0pO1xuICAgICAgICAgICAgICAgICAgICBhbGlhc0FycmF5cy5zcGxpY2UoaWksIDEpO1xuICAgICAgICAgICAgICAgICAgICBjaGFuZ2UgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgYWxpYXNBcnJheXMuZm9yRWFjaChmdW5jdGlvbiAoYWxpYXNBcnJheSkge1xuICAgICAgICBhbGlhc0FycmF5ID0gYWxpYXNBcnJheS5maWx0ZXIoZnVuY3Rpb24gKHYsIGksIHNlbGYpIHtcbiAgICAgICAgICAgIHJldHVybiBzZWxmLmluZGV4T2YodikgPT09IGk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBsYXN0QWxpYXMgPSBhbGlhc0FycmF5LnBvcCgpO1xuICAgICAgICBpZiAobGFzdEFsaWFzICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIGxhc3RBbGlhcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGNvbWJpbmVkW2xhc3RBbGlhc10gPSBhbGlhc0FycmF5O1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGNvbWJpbmVkO1xufVxuZnVuY3Rpb24gaW5jcmVtZW50KG9yaWcpIHtcbiAgICByZXR1cm4gb3JpZyAhPT0gdW5kZWZpbmVkID8gb3JpZyArIDEgOiAxO1xufVxuZnVuY3Rpb24gc2FuaXRpemVLZXkoa2V5KSB7XG4gICAgaWYgKGtleSA9PT0gJ19fcHJvdG9fXycpXG4gICAgICAgIHJldHVybiAnX19fcHJvdG9fX18nO1xuICAgIHJldHVybiBrZXk7XG59XG5cbmNvbnN0IG1pbk5vZGVWZXJzaW9uID0gKHByb2Nlc3MgJiYgcHJvY2Vzcy5lbnYgJiYgcHJvY2Vzcy5lbnYuWUFSR1NfTUlOX05PREVfVkVSU0lPTilcbiAgICA/IE51bWJlcihwcm9jZXNzLmVudi5ZQVJHU19NSU5fTk9ERV9WRVJTSU9OKVxuICAgIDogMTA7XG5pZiAocHJvY2VzcyAmJiBwcm9jZXNzLnZlcnNpb24pIHtcbiAgICBjb25zdCBtYWpvciA9IE51bWJlcihwcm9jZXNzLnZlcnNpb24ubWF0Y2goL3YoW14uXSspLylbMV0pO1xuICAgIGlmIChtYWpvciA8IG1pbk5vZGVWZXJzaW9uKSB7XG4gICAgICAgIHRocm93IEVycm9yKGB5YXJncyBwYXJzZXIgc3VwcG9ydHMgYSBtaW5pbXVtIE5vZGUuanMgdmVyc2lvbiBvZiAke21pbk5vZGVWZXJzaW9ufS4gUmVhZCBvdXIgdmVyc2lvbiBzdXBwb3J0IHBvbGljeTogaHR0cHM6Ly9naXRodWIuY29tL3lhcmdzL3lhcmdzLXBhcnNlciNzdXBwb3J0ZWQtbm9kZWpzLXZlcnNpb25zYCk7XG4gICAgfVxufVxuY29uc3QgZW52ID0gcHJvY2VzcyA/IHByb2Nlc3MuZW52IDoge307XG5jb25zdCBwYXJzZXIgPSBuZXcgWWFyZ3NQYXJzZXIoe1xuICAgIGN3ZDogcHJvY2Vzcy5jd2QsXG4gICAgZW52OiAoKSA9PiB7XG4gICAgICAgIHJldHVybiBlbnY7XG4gICAgfSxcbiAgICBmb3JtYXQ6IHV0aWwuZm9ybWF0LFxuICAgIG5vcm1hbGl6ZTogcGF0aC5ub3JtYWxpemUsXG4gICAgcmVzb2x2ZTogcGF0aC5yZXNvbHZlLFxuICAgIHJlcXVpcmU6IChwYXRoKSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgcmVxdWlyZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHJldHVybiByZXF1aXJlKHBhdGgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHBhdGgubWF0Y2goL1xcLmpzb24kLykpIHtcbiAgICAgICAgICAgIHJldHVybiBmcy5yZWFkRmlsZVN5bmMocGF0aCwgJ3V0ZjgnKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCdvbmx5IC5qc29uIGNvbmZpZyBmaWxlcyBhcmUgc3VwcG9ydGVkIGluIEVTTScpO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5jb25zdCB5YXJnc1BhcnNlciA9IGZ1bmN0aW9uIFBhcnNlcihhcmdzLCBvcHRzKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gcGFyc2VyLnBhcnNlKGFyZ3Muc2xpY2UoKSwgb3B0cyk7XG4gICAgcmV0dXJuIHJlc3VsdC5hcmd2O1xufTtcbnlhcmdzUGFyc2VyLmRldGFpbGVkID0gZnVuY3Rpb24gKGFyZ3MsIG9wdHMpIHtcbiAgICByZXR1cm4gcGFyc2VyLnBhcnNlKGFyZ3Muc2xpY2UoKSwgb3B0cyk7XG59O1xueWFyZ3NQYXJzZXIuY2FtZWxDYXNlID0gY2FtZWxDYXNlO1xueWFyZ3NQYXJzZXIuZGVjYW1lbGl6ZSA9IGRlY2FtZWxpemU7XG55YXJnc1BhcnNlci5sb29rc0xpa2VOdW1iZXIgPSBsb29rc0xpa2VOdW1iZXI7XG5cbm1vZHVsZS5leHBvcnRzID0geWFyZ3NQYXJzZXI7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICh7b25seUZpcnN0ID0gZmFsc2V9ID0ge30pID0+IHtcblx0Y29uc3QgcGF0dGVybiA9IFtcblx0XHQnW1xcXFx1MDAxQlxcXFx1MDA5Ql1bW1xcXFxdKCkjOz9dKig/Oig/Oig/Oig/OjtbLWEtekEtWlxcXFxkXFxcXC8jJi46PT8lQH5fXSspKnxbYS16QS1aXFxcXGRdKyg/OjtbLWEtekEtWlxcXFxkXFxcXC8jJi46PT8lQH5fXSopKik/XFxcXHUwMDA3KScsXG5cdFx0Jyg/Oig/OlxcXFxkezEsNH0oPzo7XFxcXGR7MCw0fSkqKT9bXFxcXGRBLVBSLVRaY2YtbnRxcnk9Pjx+XSkpJ1xuXHRdLmpvaW4oJ3wnKTtcblxuXHRyZXR1cm4gbmV3IFJlZ0V4cChwYXR0ZXJuLCBvbmx5Rmlyc3QgPyB1bmRlZmluZWQgOiAnZycpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG5jb25zdCBhbnNpUmVnZXggPSByZXF1aXJlKCdhbnNpLXJlZ2V4Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gc3RyaW5nID0+IHR5cGVvZiBzdHJpbmcgPT09ICdzdHJpbmcnID8gc3RyaW5nLnJlcGxhY2UoYW5zaVJlZ2V4KCksICcnKSA6IHN0cmluZztcbiIsICIvKiBlc2xpbnQtZGlzYWJsZSB5b2RhICovXG4ndXNlIHN0cmljdCc7XG5cbmNvbnN0IGlzRnVsbHdpZHRoQ29kZVBvaW50ID0gY29kZVBvaW50ID0+IHtcblx0aWYgKE51bWJlci5pc05hTihjb2RlUG9pbnQpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0Ly8gQ29kZSBwb2ludHMgYXJlIGRlcml2ZWQgZnJvbTpcblx0Ly8gaHR0cDovL3d3dy51bml4Lm9yZy9QdWJsaWMvVU5JREFUQS9FYXN0QXNpYW5XaWR0aC50eHRcblx0aWYgKFxuXHRcdGNvZGVQb2ludCA+PSAweDExMDAgJiYgKFxuXHRcdFx0Y29kZVBvaW50IDw9IDB4MTE1RiB8fCAvLyBIYW5ndWwgSmFtb1xuXHRcdFx0Y29kZVBvaW50ID09PSAweDIzMjkgfHwgLy8gTEVGVC1QT0lOVElORyBBTkdMRSBCUkFDS0VUXG5cdFx0XHRjb2RlUG9pbnQgPT09IDB4MjMyQSB8fCAvLyBSSUdIVC1QT0lOVElORyBBTkdMRSBCUkFDS0VUXG5cdFx0XHQvLyBDSksgUmFkaWNhbHMgU3VwcGxlbWVudCAuLiBFbmNsb3NlZCBDSksgTGV0dGVycyBhbmQgTW9udGhzXG5cdFx0XHQoMHgyRTgwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgzMjQ3ICYmIGNvZGVQb2ludCAhPT0gMHgzMDNGKSB8fFxuXHRcdFx0Ly8gRW5jbG9zZWQgQ0pLIExldHRlcnMgYW5kIE1vbnRocyAuLiBDSksgVW5pZmllZCBJZGVvZ3JhcGhzIEV4dGVuc2lvbiBBXG5cdFx0XHQoMHgzMjUwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHg0REJGKSB8fFxuXHRcdFx0Ly8gQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyAuLiBZaSBSYWRpY2Fsc1xuXHRcdFx0KDB4NEUwMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4QTRDNikgfHxcblx0XHRcdC8vIEhhbmd1bCBKYW1vIEV4dGVuZGVkLUFcblx0XHRcdCgweEE5NjAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweEE5N0MpIHx8XG5cdFx0XHQvLyBIYW5ndWwgU3lsbGFibGVzXG5cdFx0XHQoMHhBQzAwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHhEN0EzKSB8fFxuXHRcdFx0Ly8gQ0pLIENvbXBhdGliaWxpdHkgSWRlb2dyYXBoc1xuXHRcdFx0KDB4RjkwMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4RkFGRikgfHxcblx0XHRcdC8vIFZlcnRpY2FsIEZvcm1zXG5cdFx0XHQoMHhGRTEwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHhGRTE5KSB8fFxuXHRcdFx0Ly8gQ0pLIENvbXBhdGliaWxpdHkgRm9ybXMgLi4gU21hbGwgRm9ybSBWYXJpYW50c1xuXHRcdFx0KDB4RkUzMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4RkU2QikgfHxcblx0XHRcdC8vIEhhbGZ3aWR0aCBhbmQgRnVsbHdpZHRoIEZvcm1zXG5cdFx0XHQoMHhGRjAxIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHhGRjYwKSB8fFxuXHRcdFx0KDB4RkZFMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4RkZFNikgfHxcblx0XHRcdC8vIEthbmEgU3VwcGxlbWVudFxuXHRcdFx0KDB4MUIwMDAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDFCMDAxKSB8fFxuXHRcdFx0Ly8gRW5jbG9zZWQgSWRlb2dyYXBoaWMgU3VwcGxlbWVudFxuXHRcdFx0KDB4MUYyMDAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDFGMjUxKSB8fFxuXHRcdFx0Ly8gQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyBFeHRlbnNpb24gQiAuLiBUZXJ0aWFyeSBJZGVvZ3JhcGhpYyBQbGFuZVxuXHRcdFx0KDB4MjAwMDAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDNGRkZEKVxuXHRcdClcblx0KSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRyZXR1cm4gZmFsc2U7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzRnVsbHdpZHRoQ29kZVBvaW50O1xubW9kdWxlLmV4cG9ydHMuZGVmYXVsdCA9IGlzRnVsbHdpZHRoQ29kZVBvaW50O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgLy8gaHR0cHM6Ly9tdGhzLmJlL2Vtb2ppXG4gIHJldHVybiAvXFx1RDgzQ1xcdURGRjRcXHVEQjQwXFx1REM2N1xcdURCNDBcXHVEQzYyKD86XFx1REI0MFxcdURDNjVcXHVEQjQwXFx1REM2RVxcdURCNDBcXHVEQzY3fFxcdURCNDBcXHVEQzczXFx1REI0MFxcdURDNjNcXHVEQjQwXFx1REM3NHxcXHVEQjQwXFx1REM3N1xcdURCNDBcXHVEQzZDXFx1REI0MFxcdURDNzMpXFx1REI0MFxcdURDN0Z8XFx1RDgzRFxcdURDNjgoPzpcXHVEODNDXFx1REZGQ1xcdTIwMEQoPzpcXHVEODNFXFx1REQxRFxcdTIwMERcXHVEODNEXFx1REM2OFxcdUQ4M0NcXHVERkZCfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0VbXFx1RERBRi1cXHVEREIzXFx1RERCQ1xcdUREQkRdKXxcXHVEODNDXFx1REZGRlxcdTIwMEQoPzpcXHVEODNFXFx1REQxRFxcdTIwMERcXHVEODNEXFx1REM2OCg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZFXSl8XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRVtcXHVEREFGLVxcdUREQjNcXHVEREJDXFx1RERCRF0pfFxcdUQ4M0NcXHVERkZFXFx1MjAwRCg/OlxcdUQ4M0VcXHVERDFEXFx1MjAwRFxcdUQ4M0RcXHVEQzY4KD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkRdKXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFW1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXSl8XFx1RDgzQ1xcdURGRkRcXHUyMDBEKD86XFx1RDgzRVxcdUREMURcXHUyMDBEXFx1RDgzRFxcdURDNjgoPzpcXHVEODNDW1xcdURGRkJcXHVERkZDXSl8XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRVtcXHVEREFGLVxcdUREQjNcXHVEREJDXFx1RERCRF0pfFxcdTIwMEQoPzpcXHUyNzY0XFx1RkUwRlxcdTIwMEQoPzpcXHVEODNEXFx1REM4QlxcdTIwMEQpP1xcdUQ4M0RcXHVEQzY4fCg/OlxcdUQ4M0RbXFx1REM2OFxcdURDNjldKVxcdTIwMEQoPzpcXHVEODNEXFx1REM2NlxcdTIwMERcXHVEODNEXFx1REM2NnxcXHVEODNEXFx1REM2N1xcdTIwMEQoPzpcXHVEODNEW1xcdURDNjZcXHVEQzY3XSkpfFxcdUQ4M0RcXHVEQzY2XFx1MjAwRFxcdUQ4M0RcXHVEQzY2fFxcdUQ4M0RcXHVEQzY3XFx1MjAwRCg/OlxcdUQ4M0RbXFx1REM2NlxcdURDNjddKXwoPzpcXHVEODNEW1xcdURDNjhcXHVEQzY5XSlcXHUyMDBEKD86XFx1RDgzRFtcXHVEQzY2XFx1REM2N10pfFtcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRnxcXHVEODNEW1xcdURDNjZcXHVEQzY3XXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFW1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXSl8KD86XFx1RDgzQ1xcdURGRkJcXHUyMDBEW1xcdTI2OTVcXHUyNjk2XFx1MjcwOF18XFx1RDgzQ1xcdURGRkZcXHUyMDBEW1xcdTI2OTVcXHUyNjk2XFx1MjcwOF18XFx1RDgzQ1xcdURGRkVcXHUyMDBEW1xcdTI2OTVcXHUyNjk2XFx1MjcwOF18XFx1RDgzQ1xcdURGRkRcXHUyMDBEW1xcdTI2OTVcXHUyNjk2XFx1MjcwOF18XFx1RDgzQ1xcdURGRkNcXHUyMDBEW1xcdTI2OTVcXHUyNjk2XFx1MjcwOF0pXFx1RkUwRnxcXHVEODNDXFx1REZGQlxcdTIwMEQoPzpcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFW1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXSl8XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKXwoPzpcXHVEODNFXFx1REREMVxcdUQ4M0NcXHVERkZCXFx1MjAwRFxcdUQ4M0VcXHVERDFEXFx1MjAwRFxcdUQ4M0VcXHVEREQxfFxcdUQ4M0RcXHVEQzY5XFx1RDgzQ1xcdURGRkNcXHUyMDBEXFx1RDgzRVxcdUREMURcXHUyMDBEXFx1RDgzRFxcdURDNjkpXFx1RDgzQ1xcdURGRkJ8XFx1RDgzRVxcdURERDEoPzpcXHVEODNDXFx1REZGRlxcdTIwMERcXHVEODNFXFx1REQxRFxcdTIwMERcXHVEODNFXFx1REREMSg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSl8XFx1MjAwRFxcdUQ4M0VcXHVERDFEXFx1MjAwRFxcdUQ4M0VcXHVEREQxKXwoPzpcXHVEODNFXFx1REREMVxcdUQ4M0NcXHVERkZFXFx1MjAwRFxcdUQ4M0VcXHVERDFEXFx1MjAwRFxcdUQ4M0VcXHVEREQxfFxcdUQ4M0RcXHVEQzY5XFx1RDgzQ1xcdURGRkZcXHUyMDBEXFx1RDgzRVxcdUREMURcXHUyMDBEKD86XFx1RDgzRFtcXHVEQzY4XFx1REM2OV0pKSg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZFXSl8KD86XFx1RDgzRVxcdURERDFcXHVEODNDXFx1REZGQ1xcdTIwMERcXHVEODNFXFx1REQxRFxcdTIwMERcXHVEODNFXFx1REREMXxcXHVEODNEXFx1REM2OVxcdUQ4M0NcXHVERkZEXFx1MjAwRFxcdUQ4M0VcXHVERDFEXFx1MjAwRFxcdUQ4M0RcXHVEQzY5KSg/OlxcdUQ4M0NbXFx1REZGQlxcdURGRkNdKXxcXHVEODNEXFx1REM2OSg/OlxcdUQ4M0NcXHVERkZFXFx1MjAwRCg/OlxcdUQ4M0VcXHVERDFEXFx1MjAwRFxcdUQ4M0RcXHVEQzY4KD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkRcXHVERkZGXSl8XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRVtcXHVEREFGLVxcdUREQjNcXHVEREJDXFx1RERCRF0pfFxcdUQ4M0NcXHVERkZDXFx1MjAwRCg/OlxcdUQ4M0VcXHVERDFEXFx1MjAwRFxcdUQ4M0RcXHVEQzY4KD86XFx1RDgzQ1tcXHVERkZCXFx1REZGRC1cXHVERkZGXSl8XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRVtcXHVEREFGLVxcdUREQjNcXHVEREJDXFx1RERCRF0pfFxcdUQ4M0NcXHVERkZCXFx1MjAwRCg/OlxcdUQ4M0VcXHVERDFEXFx1MjAwRFxcdUQ4M0RcXHVEQzY4KD86XFx1RDgzQ1tcXHVERkZDLVxcdURGRkZdKXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFW1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXSl8XFx1RDgzQ1xcdURGRkRcXHUyMDBEKD86XFx1RDgzRVxcdUREMURcXHUyMDBEXFx1RDgzRFxcdURDNjgoPzpcXHVEODNDW1xcdURGRkJcXHVERkZDXFx1REZGRVxcdURGRkZdKXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFW1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXSl8XFx1MjAwRCg/OlxcdTI3NjRcXHVGRTBGXFx1MjAwRCg/OlxcdUQ4M0RcXHVEQzhCXFx1MjAwRCg/OlxcdUQ4M0RbXFx1REM2OFxcdURDNjldKXxcXHVEODNEW1xcdURDNjhcXHVEQzY5XSl8XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRVtcXHVEREFGLVxcdUREQjNcXHVEREJDXFx1RERCRF0pfFxcdUQ4M0NcXHVERkZGXFx1MjAwRCg/OlxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0VbXFx1RERBRi1cXHVEREIzXFx1RERCQ1xcdUREQkRdKSl8XFx1RDgzRFxcdURDNjlcXHUyMDBEXFx1RDgzRFxcdURDNjlcXHUyMDBEKD86XFx1RDgzRFxcdURDNjZcXHUyMDBEXFx1RDgzRFxcdURDNjZ8XFx1RDgzRFxcdURDNjdcXHUyMDBEKD86XFx1RDgzRFtcXHVEQzY2XFx1REM2N10pKXwoPzpcXHVEODNFXFx1REREMVxcdUQ4M0NcXHVERkZEXFx1MjAwRFxcdUQ4M0VcXHVERDFEXFx1MjAwRFxcdUQ4M0VcXHVEREQxfFxcdUQ4M0RcXHVEQzY5XFx1RDgzQ1xcdURGRkVcXHUyMDBEXFx1RDgzRVxcdUREMURcXHUyMDBEXFx1RDgzRFxcdURDNjkpKD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkRdKXxcXHVEODNEXFx1REM2OVxcdTIwMERcXHVEODNEXFx1REM2NlxcdTIwMERcXHVEODNEXFx1REM2NnxcXHVEODNEXFx1REM2OVxcdTIwMERcXHVEODNEXFx1REM2OVxcdTIwMEQoPzpcXHVEODNEW1xcdURDNjZcXHVEQzY3XSl8KD86XFx1RDgzRFxcdURDNDFcXHVGRTBGXFx1MjAwRFxcdUQ4M0RcXHVEREU4fFxcdUQ4M0RcXHVEQzY5KD86XFx1RDgzQ1xcdURGRkZcXHUyMDBEW1xcdTI2OTVcXHUyNjk2XFx1MjcwOF18XFx1RDgzQ1xcdURGRkVcXHUyMDBEW1xcdTI2OTVcXHUyNjk2XFx1MjcwOF18XFx1RDgzQ1xcdURGRkNcXHUyMDBEW1xcdTI2OTVcXHUyNjk2XFx1MjcwOF18XFx1RDgzQ1xcdURGRkJcXHUyMDBEW1xcdTI2OTVcXHUyNjk2XFx1MjcwOF18XFx1RDgzQ1xcdURGRkRcXHUyMDBEW1xcdTI2OTVcXHUyNjk2XFx1MjcwOF18XFx1MjAwRFtcXHUyNjk1XFx1MjY5NlxcdTI3MDhdKXwoPzooPzpcXHUyNkY5fFxcdUQ4M0NbXFx1REZDQlxcdURGQ0NdfFxcdUQ4M0RcXHVERDc1KVxcdUZFMEZ8XFx1RDgzRFxcdURDNkZ8XFx1RDgzRVtcXHVERDNDXFx1RERERVxcdUREREZdKVxcdTIwMERbXFx1MjY0MFxcdTI2NDJdfCg/OlxcdTI2Rjl8XFx1RDgzQ1tcXHVERkNCXFx1REZDQ118XFx1RDgzRFxcdURENzUpKD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKVxcdTIwMERbXFx1MjY0MFxcdTI2NDJdfCg/OlxcdUQ4M0NbXFx1REZDM1xcdURGQzRcXHVERkNBXXxcXHVEODNEW1xcdURDNkVcXHVEQzcxXFx1REM3M1xcdURDNzdcXHVEQzgxXFx1REM4MlxcdURDODZcXHVEQzg3XFx1REU0NS1cXHVERTQ3XFx1REU0QlxcdURFNERcXHVERTRFXFx1REVBM1xcdURFQjQtXFx1REVCNl18XFx1RDgzRVtcXHVERDI2XFx1REQzNy1cXHVERDM5XFx1REQzRFxcdUREM0VcXHVEREI4XFx1RERCOVxcdUREQ0QtXFx1RERDRlxcdURERDYtXFx1RERERF0pKD86KD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKVxcdTIwMERbXFx1MjY0MFxcdTI2NDJdfFxcdTIwMERbXFx1MjY0MFxcdTI2NDJdKXxcXHVEODNDXFx1REZGNFxcdTIwMERcXHUyNjIwKVxcdUZFMEZ8XFx1RDgzRFxcdURDNjlcXHUyMDBEXFx1RDgzRFxcdURDNjdcXHUyMDBEKD86XFx1RDgzRFtcXHVEQzY2XFx1REM2N10pfFxcdUQ4M0NcXHVERkYzXFx1RkUwRlxcdTIwMERcXHVEODNDXFx1REYwOHxcXHVEODNEXFx1REMxNVxcdTIwMERcXHVEODNFXFx1RERCQXxcXHVEODNEXFx1REM2OVxcdTIwMERcXHVEODNEXFx1REM2NnxcXHVEODNEXFx1REM2OVxcdTIwMERcXHVEODNEXFx1REM2N3xcXHVEODNDXFx1RERGRFxcdUQ4M0NcXHVEREYwfFxcdUQ4M0NcXHVEREY0XFx1RDgzQ1xcdURERjJ8XFx1RDgzQ1xcdURERjZcXHVEODNDXFx1RERFNnxbI1xcKjAtOV1cXHVGRTBGXFx1MjBFM3xcXHVEODNDXFx1RERFNyg/OlxcdUQ4M0NbXFx1RERFNlxcdURERTdcXHVEREU5LVxcdURERUZcXHVEREYxLVxcdURERjRcXHVEREY2LVxcdURERjlcXHVEREZCXFx1RERGQ1xcdURERkVcXHVEREZGXSl8XFx1RDgzQ1xcdURERjkoPzpcXHVEODNDW1xcdURERTZcXHVEREU4XFx1RERFOVxcdURERUItXFx1RERFRFxcdURERUYtXFx1RERGNFxcdURERjdcXHVEREY5XFx1RERGQlxcdURERkNcXHVEREZGXSl8XFx1RDgzQ1xcdURERUEoPzpcXHVEODNDW1xcdURERTZcXHVEREU4XFx1RERFQVxcdURERUNcXHVEREVEXFx1RERGNy1cXHVEREZBXSl8XFx1RDgzRVxcdURERDEoPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl0pfFxcdUQ4M0NcXHVEREY3KD86XFx1RDgzQ1tcXHVEREVBXFx1RERGNFxcdURERjhcXHVEREZBXFx1RERGQ10pfFxcdUQ4M0RcXHVEQzY5KD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKXxcXHVEODNDXFx1RERGMig/OlxcdUQ4M0NbXFx1RERFNlxcdURERTgtXFx1RERFRFxcdURERjAtXFx1RERGRl0pfFxcdUQ4M0NcXHVEREU2KD86XFx1RDgzQ1tcXHVEREU4LVxcdURERUNcXHVEREVFXFx1RERGMVxcdURERjJcXHVEREY0XFx1RERGNi1cXHVEREZBXFx1RERGQ1xcdURERkRcXHVEREZGXSl8XFx1RDgzQ1xcdURERjAoPzpcXHVEODNDW1xcdURERUFcXHVEREVDLVxcdURERUVcXHVEREYyXFx1RERGM1xcdURERjVcXHVEREY3XFx1RERGQ1xcdURERkVcXHVEREZGXSl8XFx1RDgzQ1xcdURERUQoPzpcXHVEODNDW1xcdURERjBcXHVEREYyXFx1RERGM1xcdURERjdcXHVEREY5XFx1RERGQV0pfFxcdUQ4M0NcXHVEREU5KD86XFx1RDgzQ1tcXHVEREVBXFx1RERFQ1xcdURERUZcXHVEREYwXFx1RERGMlxcdURERjRcXHVEREZGXSl8XFx1RDgzQ1xcdURERkUoPzpcXHVEODNDW1xcdURERUFcXHVEREY5XSl8XFx1RDgzQ1xcdURERUMoPzpcXHVEODNDW1xcdURERTZcXHVEREU3XFx1RERFOS1cXHVEREVFXFx1RERGMS1cXHVEREYzXFx1RERGNS1cXHVEREZBXFx1RERGQ1xcdURERkVdKXxcXHVEODNDXFx1RERGOCg/OlxcdUQ4M0NbXFx1RERFNi1cXHVEREVBXFx1RERFQy1cXHVEREY0XFx1RERGNy1cXHVEREY5XFx1RERGQlxcdURERkQtXFx1RERGRl0pfFxcdUQ4M0NcXHVEREVCKD86XFx1RDgzQ1tcXHVEREVFLVxcdURERjBcXHVEREYyXFx1RERGNFxcdURERjddKXxcXHVEODNDXFx1RERGNSg/OlxcdUQ4M0NbXFx1RERFNlxcdURERUEtXFx1RERFRFxcdURERjAtXFx1RERGM1xcdURERjctXFx1RERGOVxcdURERkNcXHVEREZFXSl8XFx1RDgzQ1xcdURERkIoPzpcXHVEODNDW1xcdURERTZcXHVEREU4XFx1RERFQVxcdURERUNcXHVEREVFXFx1RERGM1xcdURERkFdKXxcXHVEODNDXFx1RERGMyg/OlxcdUQ4M0NbXFx1RERFNlxcdURERThcXHVEREVBLVxcdURERUNcXHVEREVFXFx1RERGMVxcdURERjRcXHVEREY1XFx1RERGN1xcdURERkFcXHVEREZGXSl8XFx1RDgzQ1xcdURERTgoPzpcXHVEODNDW1xcdURERTZcXHVEREU4XFx1RERFOVxcdURERUItXFx1RERFRVxcdURERjAtXFx1RERGNVxcdURERjdcXHVEREZBLVxcdURERkZdKXxcXHVEODNDXFx1RERGMSg/OlxcdUQ4M0NbXFx1RERFNi1cXHVEREU4XFx1RERFRVxcdURERjBcXHVEREY3LVxcdURERkJcXHVEREZFXSl8XFx1RDgzQ1xcdURERkYoPzpcXHVEODNDW1xcdURERTZcXHVEREYyXFx1RERGQ10pfFxcdUQ4M0NcXHVEREZDKD86XFx1RDgzQ1tcXHVEREVCXFx1RERGOF0pfFxcdUQ4M0NcXHVEREZBKD86XFx1RDgzQ1tcXHVEREU2XFx1RERFQ1xcdURERjJcXHVEREYzXFx1RERGOFxcdURERkVcXHVEREZGXSl8XFx1RDgzQ1xcdURERUUoPzpcXHVEODNDW1xcdURERTgtXFx1RERFQVxcdURERjEtXFx1RERGNFxcdURERjYtXFx1RERGOV0pfFxcdUQ4M0NcXHVEREVGKD86XFx1RDgzQ1tcXHVEREVBXFx1RERGMlxcdURERjRcXHVEREY1XSl8KD86XFx1RDgzQ1tcXHVERkMzXFx1REZDNFxcdURGQ0FdfFxcdUQ4M0RbXFx1REM2RVxcdURDNzFcXHVEQzczXFx1REM3N1xcdURDODFcXHVEQzgyXFx1REM4NlxcdURDODdcXHVERTQ1LVxcdURFNDdcXHVERTRCXFx1REU0RFxcdURFNEVcXHVERUEzXFx1REVCNC1cXHVERUI2XXxcXHVEODNFW1xcdUREMjZcXHVERDM3LVxcdUREMzlcXHVERDNEXFx1REQzRVxcdUREQjhcXHVEREI5XFx1RERDRC1cXHVERENGXFx1RERENi1cXHVEREREXSkoPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl0pfCg/OlxcdTI2Rjl8XFx1RDgzQ1tcXHVERkNCXFx1REZDQ118XFx1RDgzRFxcdURENzUpKD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKXwoPzpbXFx1MjYxRFxcdTI3MEEtXFx1MjcwRF18XFx1RDgzQ1tcXHVERjg1XFx1REZDMlxcdURGQzddfFxcdUQ4M0RbXFx1REM0MlxcdURDNDNcXHVEQzQ2LVxcdURDNTBcXHVEQzY2XFx1REM2N1xcdURDNkItXFx1REM2RFxcdURDNzBcXHVEQzcyXFx1REM3NC1cXHVEQzc2XFx1REM3OFxcdURDN0NcXHVEQzgzXFx1REM4NVxcdURDQUFcXHVERDc0XFx1REQ3QVxcdUREOTBcXHVERDk1XFx1REQ5NlxcdURFNENcXHVERTRGXFx1REVDMFxcdURFQ0NdfFxcdUQ4M0VbXFx1REQwRlxcdUREMTgtXFx1REQxQ1xcdUREMUVcXHVERDFGXFx1REQzMC1cXHVERDM2XFx1RERCNVxcdUREQjZcXHVEREJCXFx1REREMi1cXHVEREQ1XSkoPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl0pfCg/OltcXHUyMzFBXFx1MjMxQlxcdTIzRTktXFx1MjNFQ1xcdTIzRjBcXHUyM0YzXFx1MjVGRFxcdTI1RkVcXHUyNjE0XFx1MjYxNVxcdTI2NDgtXFx1MjY1M1xcdTI2N0ZcXHUyNjkzXFx1MjZBMVxcdTI2QUFcXHUyNkFCXFx1MjZCRFxcdTI2QkVcXHUyNkM0XFx1MjZDNVxcdTI2Q0VcXHUyNkQ0XFx1MjZFQVxcdTI2RjJcXHUyNkYzXFx1MjZGNVxcdTI2RkFcXHUyNkZEXFx1MjcwNVxcdTI3MEFcXHUyNzBCXFx1MjcyOFxcdTI3NENcXHUyNzRFXFx1Mjc1My1cXHUyNzU1XFx1Mjc1N1xcdTI3OTUtXFx1Mjc5N1xcdTI3QjBcXHUyN0JGXFx1MkIxQlxcdTJCMUNcXHUyQjUwXFx1MkI1NV18XFx1RDgzQ1tcXHVEQzA0XFx1RENDRlxcdUREOEVcXHVERDkxLVxcdUREOUFcXHVEREU2LVxcdURERkZcXHVERTAxXFx1REUxQVxcdURFMkZcXHVERTMyLVxcdURFMzZcXHVERTM4LVxcdURFM0FcXHVERTUwXFx1REU1MVxcdURGMDAtXFx1REYyMFxcdURGMkQtXFx1REYzNVxcdURGMzctXFx1REY3Q1xcdURGN0UtXFx1REY5M1xcdURGQTAtXFx1REZDQVxcdURGQ0YtXFx1REZEM1xcdURGRTAtXFx1REZGMFxcdURGRjRcXHVERkY4LVxcdURGRkZdfFxcdUQ4M0RbXFx1REMwMC1cXHVEQzNFXFx1REM0MFxcdURDNDItXFx1RENGQ1xcdURDRkYtXFx1REQzRFxcdURENEItXFx1REQ0RVxcdURENTAtXFx1REQ2N1xcdUREN0FcXHVERDk1XFx1REQ5NlxcdUREQTRcXHVEREZCLVxcdURFNEZcXHVERTgwLVxcdURFQzVcXHVERUNDXFx1REVEMC1cXHVERUQyXFx1REVENVxcdURFRUJcXHVERUVDXFx1REVGNC1cXHVERUZBXFx1REZFMC1cXHVERkVCXXxcXHVEODNFW1xcdUREMEQtXFx1REQzQVxcdUREM0MtXFx1REQ0NVxcdURENDctXFx1REQ3MVxcdURENzMtXFx1REQ3NlxcdUREN0EtXFx1RERBMlxcdUREQTUtXFx1RERBQVxcdUREQUUtXFx1RERDQVxcdUREQ0QtXFx1RERGRlxcdURFNzAtXFx1REU3M1xcdURFNzgtXFx1REU3QVxcdURFODAtXFx1REU4MlxcdURFOTAtXFx1REU5NV0pfCg/OlsjXFwqMC05XFx4QTlcXHhBRVxcdTIwM0NcXHUyMDQ5XFx1MjEyMlxcdTIxMzlcXHUyMTk0LVxcdTIxOTlcXHUyMUE5XFx1MjFBQVxcdTIzMUFcXHUyMzFCXFx1MjMyOFxcdTIzQ0ZcXHUyM0U5LVxcdTIzRjNcXHUyM0Y4LVxcdTIzRkFcXHUyNEMyXFx1MjVBQVxcdTI1QUJcXHUyNUI2XFx1MjVDMFxcdTI1RkItXFx1MjVGRVxcdTI2MDAtXFx1MjYwNFxcdTI2MEVcXHUyNjExXFx1MjYxNFxcdTI2MTVcXHUyNjE4XFx1MjYxRFxcdTI2MjBcXHUyNjIyXFx1MjYyM1xcdTI2MjZcXHUyNjJBXFx1MjYyRVxcdTI2MkZcXHUyNjM4LVxcdTI2M0FcXHUyNjQwXFx1MjY0MlxcdTI2NDgtXFx1MjY1M1xcdTI2NUZcXHUyNjYwXFx1MjY2M1xcdTI2NjVcXHUyNjY2XFx1MjY2OFxcdTI2N0JcXHUyNjdFXFx1MjY3RlxcdTI2OTItXFx1MjY5N1xcdTI2OTlcXHUyNjlCXFx1MjY5Q1xcdTI2QTBcXHUyNkExXFx1MjZBQVxcdTI2QUJcXHUyNkIwXFx1MjZCMVxcdTI2QkRcXHUyNkJFXFx1MjZDNFxcdTI2QzVcXHUyNkM4XFx1MjZDRVxcdTI2Q0ZcXHUyNkQxXFx1MjZEM1xcdTI2RDRcXHUyNkU5XFx1MjZFQVxcdTI2RjAtXFx1MjZGNVxcdTI2RjctXFx1MjZGQVxcdTI2RkRcXHUyNzAyXFx1MjcwNVxcdTI3MDgtXFx1MjcwRFxcdTI3MEZcXHUyNzEyXFx1MjcxNFxcdTI3MTZcXHUyNzFEXFx1MjcyMVxcdTI3MjhcXHUyNzMzXFx1MjczNFxcdTI3NDRcXHUyNzQ3XFx1Mjc0Q1xcdTI3NEVcXHUyNzUzLVxcdTI3NTVcXHUyNzU3XFx1Mjc2M1xcdTI3NjRcXHUyNzk1LVxcdTI3OTdcXHUyN0ExXFx1MjdCMFxcdTI3QkZcXHUyOTM0XFx1MjkzNVxcdTJCMDUtXFx1MkIwN1xcdTJCMUJcXHUyQjFDXFx1MkI1MFxcdTJCNTVcXHUzMDMwXFx1MzAzRFxcdTMyOTdcXHUzMjk5XXxcXHVEODNDW1xcdURDMDRcXHVEQ0NGXFx1REQ3MFxcdURENzFcXHVERDdFXFx1REQ3RlxcdUREOEVcXHVERDkxLVxcdUREOUFcXHVEREU2LVxcdURERkZcXHVERTAxXFx1REUwMlxcdURFMUFcXHVERTJGXFx1REUzMi1cXHVERTNBXFx1REU1MFxcdURFNTFcXHVERjAwLVxcdURGMjFcXHVERjI0LVxcdURGOTNcXHVERjk2XFx1REY5N1xcdURGOTktXFx1REY5QlxcdURGOUUtXFx1REZGMFxcdURGRjMtXFx1REZGNVxcdURGRjctXFx1REZGRl18XFx1RDgzRFtcXHVEQzAwLVxcdURDRkRcXHVEQ0ZGLVxcdUREM0RcXHVERDQ5LVxcdURENEVcXHVERDUwLVxcdURENjdcXHVERDZGXFx1REQ3MFxcdURENzMtXFx1REQ3QVxcdUREODdcXHVERDhBLVxcdUREOERcXHVERDkwXFx1REQ5NVxcdUREOTZcXHVEREE0XFx1RERBNVxcdUREQThcXHVEREIxXFx1RERCMlxcdUREQkNcXHVEREMyLVxcdUREQzRcXHVEREQxLVxcdURERDNcXHVERERDLVxcdUREREVcXHVEREUxXFx1RERFM1xcdURERThcXHVEREVGXFx1RERGM1xcdURERkEtXFx1REU0RlxcdURFODAtXFx1REVDNVxcdURFQ0ItXFx1REVEMlxcdURFRDVcXHVERUUwLVxcdURFRTVcXHVERUU5XFx1REVFQlxcdURFRUNcXHVERUYwXFx1REVGMy1cXHVERUZBXFx1REZFMC1cXHVERkVCXXxcXHVEODNFW1xcdUREMEQtXFx1REQzQVxcdUREM0MtXFx1REQ0NVxcdURENDctXFx1REQ3MVxcdURENzMtXFx1REQ3NlxcdUREN0EtXFx1RERBMlxcdUREQTUtXFx1RERBQVxcdUREQUUtXFx1RERDQVxcdUREQ0QtXFx1RERGRlxcdURFNzAtXFx1REU3M1xcdURFNzgtXFx1REU3QVxcdURFODAtXFx1REU4MlxcdURFOTAtXFx1REU5NV0pXFx1RkUwRnwoPzpbXFx1MjYxRFxcdTI2RjlcXHUyNzBBLVxcdTI3MERdfFxcdUQ4M0NbXFx1REY4NVxcdURGQzItXFx1REZDNFxcdURGQzdcXHVERkNBLVxcdURGQ0NdfFxcdUQ4M0RbXFx1REM0MlxcdURDNDNcXHVEQzQ2LVxcdURDNTBcXHVEQzY2LVxcdURDNzhcXHVEQzdDXFx1REM4MS1cXHVEQzgzXFx1REM4NS1cXHVEQzg3XFx1REM4RlxcdURDOTFcXHVEQ0FBXFx1REQ3NFxcdURENzVcXHVERDdBXFx1REQ5MFxcdUREOTVcXHVERDk2XFx1REU0NS1cXHVERTQ3XFx1REU0Qi1cXHVERTRGXFx1REVBM1xcdURFQjQtXFx1REVCNlxcdURFQzBcXHVERUNDXXxcXHVEODNFW1xcdUREMEZcXHVERDE4LVxcdUREMUZcXHVERDI2XFx1REQzMC1cXHVERDM5XFx1REQzQy1cXHVERDNFXFx1RERCNVxcdUREQjZcXHVEREI4XFx1RERCOVxcdUREQkJcXHVERENELVxcdUREQ0ZcXHVEREQxLVxcdURERERdKS9nO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG5jb25zdCBzdHJpcEFuc2kgPSByZXF1aXJlKCdzdHJpcC1hbnNpJyk7XG5jb25zdCBpc0Z1bGx3aWR0aENvZGVQb2ludCA9IHJlcXVpcmUoJ2lzLWZ1bGx3aWR0aC1jb2RlLXBvaW50Jyk7XG5jb25zdCBlbW9qaVJlZ2V4ID0gcmVxdWlyZSgnZW1vamktcmVnZXgnKTtcblxuY29uc3Qgc3RyaW5nV2lkdGggPSBzdHJpbmcgPT4ge1xuXHRpZiAodHlwZW9mIHN0cmluZyAhPT0gJ3N0cmluZycgfHwgc3RyaW5nLmxlbmd0aCA9PT0gMCkge1xuXHRcdHJldHVybiAwO1xuXHR9XG5cblx0c3RyaW5nID0gc3RyaXBBbnNpKHN0cmluZyk7XG5cblx0aWYgKHN0cmluZy5sZW5ndGggPT09IDApIHtcblx0XHRyZXR1cm4gMDtcblx0fVxuXG5cdHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKGVtb2ppUmVnZXgoKSwgJyAgJyk7XG5cblx0bGV0IHdpZHRoID0gMDtcblxuXHRmb3IgKGxldCBpID0gMDsgaSA8IHN0cmluZy5sZW5ndGg7IGkrKykge1xuXHRcdGNvbnN0IGNvZGUgPSBzdHJpbmcuY29kZVBvaW50QXQoaSk7XG5cblx0XHQvLyBJZ25vcmUgY29udHJvbCBjaGFyYWN0ZXJzXG5cdFx0aWYgKGNvZGUgPD0gMHgxRiB8fCAoY29kZSA+PSAweDdGICYmIGNvZGUgPD0gMHg5RikpIHtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdC8vIElnbm9yZSBjb21iaW5pbmcgY2hhcmFjdGVyc1xuXHRcdGlmIChjb2RlID49IDB4MzAwICYmIGNvZGUgPD0gMHgzNkYpIHtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdC8vIFN1cnJvZ2F0ZXNcblx0XHRpZiAoY29kZSA+IDB4RkZGRikge1xuXHRcdFx0aSsrO1xuXHRcdH1cblxuXHRcdHdpZHRoICs9IGlzRnVsbHdpZHRoQ29kZVBvaW50KGNvZGUpID8gMiA6IDE7XG5cdH1cblxuXHRyZXR1cm4gd2lkdGg7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHN0cmluZ1dpZHRoO1xuLy8gVE9ETzogcmVtb3ZlIHRoaXMgaW4gdGhlIG5leHQgbWFqb3IgdmVyc2lvblxubW9kdWxlLmV4cG9ydHMuZGVmYXVsdCA9IHN0cmluZ1dpZHRoO1xuIiwgIid1c2Ugc3RyaWN0JztcbmNvbnN0IHN0cmluZ1dpZHRoID0gcmVxdWlyZSgnc3RyaW5nLXdpZHRoJyk7XG5jb25zdCBzdHJpcEFuc2kgPSByZXF1aXJlKCdzdHJpcC1hbnNpJyk7XG5jb25zdCBhbnNpU3R5bGVzID0gcmVxdWlyZSgnYW5zaS1zdHlsZXMnKTtcblxuY29uc3QgRVNDQVBFUyA9IG5ldyBTZXQoW1xuXHQnXFx1MDAxQicsXG5cdCdcXHUwMDlCJ1xuXSk7XG5cbmNvbnN0IEVORF9DT0RFID0gMzk7XG5cbmNvbnN0IEFOU0lfRVNDQVBFX0JFTEwgPSAnXFx1MDAwNyc7XG5jb25zdCBBTlNJX0NTSSA9ICdbJztcbmNvbnN0IEFOU0lfT1NDID0gJ10nO1xuY29uc3QgQU5TSV9TR1JfVEVSTUlOQVRPUiA9ICdtJztcbmNvbnN0IEFOU0lfRVNDQVBFX0xJTksgPSBgJHtBTlNJX09TQ304OztgO1xuXG5jb25zdCB3cmFwQW5zaSA9IGNvZGUgPT4gYCR7RVNDQVBFUy52YWx1ZXMoKS5uZXh0KCkudmFsdWV9JHtBTlNJX0NTSX0ke2NvZGV9JHtBTlNJX1NHUl9URVJNSU5BVE9SfWA7XG5jb25zdCB3cmFwQW5zaUh5cGVybGluayA9IHVyaSA9PiBgJHtFU0NBUEVTLnZhbHVlcygpLm5leHQoKS52YWx1ZX0ke0FOU0lfRVNDQVBFX0xJTkt9JHt1cml9JHtBTlNJX0VTQ0FQRV9CRUxMfWA7XG5cbi8vIENhbGN1bGF0ZSB0aGUgbGVuZ3RoIG9mIHdvcmRzIHNwbGl0IG9uICcgJywgaWdub3Jpbmdcbi8vIHRoZSBleHRyYSBjaGFyYWN0ZXJzIGFkZGVkIGJ5IGFuc2kgZXNjYXBlIGNvZGVzXG5jb25zdCB3b3JkTGVuZ3RocyA9IHN0cmluZyA9PiBzdHJpbmcuc3BsaXQoJyAnKS5tYXAoY2hhcmFjdGVyID0+IHN0cmluZ1dpZHRoKGNoYXJhY3RlcikpO1xuXG4vLyBXcmFwIGEgbG9uZyB3b3JkIGFjcm9zcyBtdWx0aXBsZSByb3dzXG4vLyBBbnNpIGVzY2FwZSBjb2RlcyBkbyBub3QgY291bnQgdG93YXJkcyBsZW5ndGhcbmNvbnN0IHdyYXBXb3JkID0gKHJvd3MsIHdvcmQsIGNvbHVtbnMpID0+IHtcblx0Y29uc3QgY2hhcmFjdGVycyA9IFsuLi53b3JkXTtcblxuXHRsZXQgaXNJbnNpZGVFc2NhcGUgPSBmYWxzZTtcblx0bGV0IGlzSW5zaWRlTGlua0VzY2FwZSA9IGZhbHNlO1xuXHRsZXQgdmlzaWJsZSA9IHN0cmluZ1dpZHRoKHN0cmlwQW5zaShyb3dzW3Jvd3MubGVuZ3RoIC0gMV0pKTtcblxuXHRmb3IgKGNvbnN0IFtpbmRleCwgY2hhcmFjdGVyXSBvZiBjaGFyYWN0ZXJzLmVudHJpZXMoKSkge1xuXHRcdGNvbnN0IGNoYXJhY3Rlckxlbmd0aCA9IHN0cmluZ1dpZHRoKGNoYXJhY3Rlcik7XG5cblx0XHRpZiAodmlzaWJsZSArIGNoYXJhY3Rlckxlbmd0aCA8PSBjb2x1bW5zKSB7XG5cdFx0XHRyb3dzW3Jvd3MubGVuZ3RoIC0gMV0gKz0gY2hhcmFjdGVyO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyb3dzLnB1c2goY2hhcmFjdGVyKTtcblx0XHRcdHZpc2libGUgPSAwO1xuXHRcdH1cblxuXHRcdGlmIChFU0NBUEVTLmhhcyhjaGFyYWN0ZXIpKSB7XG5cdFx0XHRpc0luc2lkZUVzY2FwZSA9IHRydWU7XG5cdFx0XHRpc0luc2lkZUxpbmtFc2NhcGUgPSBjaGFyYWN0ZXJzLnNsaWNlKGluZGV4ICsgMSkuam9pbignJykuc3RhcnRzV2l0aChBTlNJX0VTQ0FQRV9MSU5LKTtcblx0XHR9XG5cblx0XHRpZiAoaXNJbnNpZGVFc2NhcGUpIHtcblx0XHRcdGlmIChpc0luc2lkZUxpbmtFc2NhcGUpIHtcblx0XHRcdFx0aWYgKGNoYXJhY3RlciA9PT0gQU5TSV9FU0NBUEVfQkVMTCkge1xuXHRcdFx0XHRcdGlzSW5zaWRlRXNjYXBlID0gZmFsc2U7XG5cdFx0XHRcdFx0aXNJbnNpZGVMaW5rRXNjYXBlID0gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoY2hhcmFjdGVyID09PSBBTlNJX1NHUl9URVJNSU5BVE9SKSB7XG5cdFx0XHRcdGlzSW5zaWRlRXNjYXBlID0gZmFsc2U7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdHZpc2libGUgKz0gY2hhcmFjdGVyTGVuZ3RoO1xuXG5cdFx0aWYgKHZpc2libGUgPT09IGNvbHVtbnMgJiYgaW5kZXggPCBjaGFyYWN0ZXJzLmxlbmd0aCAtIDEpIHtcblx0XHRcdHJvd3MucHVzaCgnJyk7XG5cdFx0XHR2aXNpYmxlID0gMDtcblx0XHR9XG5cdH1cblxuXHQvLyBJdCdzIHBvc3NpYmxlIHRoYXQgdGhlIGxhc3Qgcm93IHdlIGNvcHkgb3ZlciBpcyBvbmx5XG5cdC8vIGFuc2kgZXNjYXBlIGNoYXJhY3RlcnMsIGhhbmRsZSB0aGlzIGVkZ2UtY2FzZVxuXHRpZiAoIXZpc2libGUgJiYgcm93c1tyb3dzLmxlbmd0aCAtIDFdLmxlbmd0aCA+IDAgJiYgcm93cy5sZW5ndGggPiAxKSB7XG5cdFx0cm93c1tyb3dzLmxlbmd0aCAtIDJdICs9IHJvd3MucG9wKCk7XG5cdH1cbn07XG5cbi8vIFRyaW1zIHNwYWNlcyBmcm9tIGEgc3RyaW5nIGlnbm9yaW5nIGludmlzaWJsZSBzZXF1ZW5jZXNcbmNvbnN0IHN0cmluZ1Zpc2libGVUcmltU3BhY2VzUmlnaHQgPSBzdHJpbmcgPT4ge1xuXHRjb25zdCB3b3JkcyA9IHN0cmluZy5zcGxpdCgnICcpO1xuXHRsZXQgbGFzdCA9IHdvcmRzLmxlbmd0aDtcblxuXHR3aGlsZSAobGFzdCA+IDApIHtcblx0XHRpZiAoc3RyaW5nV2lkdGgod29yZHNbbGFzdCAtIDFdKSA+IDApIHtcblx0XHRcdGJyZWFrO1xuXHRcdH1cblxuXHRcdGxhc3QtLTtcblx0fVxuXG5cdGlmIChsYXN0ID09PSB3b3Jkcy5sZW5ndGgpIHtcblx0XHRyZXR1cm4gc3RyaW5nO1xuXHR9XG5cblx0cmV0dXJuIHdvcmRzLnNsaWNlKDAsIGxhc3QpLmpvaW4oJyAnKSArIHdvcmRzLnNsaWNlKGxhc3QpLmpvaW4oJycpO1xufTtcblxuLy8gVGhlIHdyYXAtYW5zaSBtb2R1bGUgY2FuIGJlIGludm9rZWQgaW4gZWl0aGVyICdoYXJkJyBvciAnc29mdCcgd3JhcCBtb2RlXG4vL1xuLy8gJ2hhcmQnIHdpbGwgbmV2ZXIgYWxsb3cgYSBzdHJpbmcgdG8gdGFrZSB1cCBtb3JlIHRoYW4gY29sdW1ucyBjaGFyYWN0ZXJzXG4vL1xuLy8gJ3NvZnQnIGFsbG93cyBsb25nIHdvcmRzIHRvIGV4cGFuZCBwYXN0IHRoZSBjb2x1bW4gbGVuZ3RoXG5jb25zdCBleGVjID0gKHN0cmluZywgY29sdW1ucywgb3B0aW9ucyA9IHt9KSA9PiB7XG5cdGlmIChvcHRpb25zLnRyaW0gIT09IGZhbHNlICYmIHN0cmluZy50cmltKCkgPT09ICcnKSB7XG5cdFx0cmV0dXJuICcnO1xuXHR9XG5cblx0bGV0IHJldHVyblZhbHVlID0gJyc7XG5cdGxldCBlc2NhcGVDb2RlO1xuXHRsZXQgZXNjYXBlVXJsO1xuXG5cdGNvbnN0IGxlbmd0aHMgPSB3b3JkTGVuZ3RocyhzdHJpbmcpO1xuXHRsZXQgcm93cyA9IFsnJ107XG5cblx0Zm9yIChjb25zdCBbaW5kZXgsIHdvcmRdIG9mIHN0cmluZy5zcGxpdCgnICcpLmVudHJpZXMoKSkge1xuXHRcdGlmIChvcHRpb25zLnRyaW0gIT09IGZhbHNlKSB7XG5cdFx0XHRyb3dzW3Jvd3MubGVuZ3RoIC0gMV0gPSByb3dzW3Jvd3MubGVuZ3RoIC0gMV0udHJpbVN0YXJ0KCk7XG5cdFx0fVxuXG5cdFx0bGV0IHJvd0xlbmd0aCA9IHN0cmluZ1dpZHRoKHJvd3Nbcm93cy5sZW5ndGggLSAxXSk7XG5cblx0XHRpZiAoaW5kZXggIT09IDApIHtcblx0XHRcdGlmIChyb3dMZW5ndGggPj0gY29sdW1ucyAmJiAob3B0aW9ucy53b3JkV3JhcCA9PT0gZmFsc2UgfHwgb3B0aW9ucy50cmltID09PSBmYWxzZSkpIHtcblx0XHRcdFx0Ly8gSWYgd2Ugc3RhcnQgd2l0aCBhIG5ldyB3b3JkIGJ1dCB0aGUgY3VycmVudCByb3cgbGVuZ3RoIGVxdWFscyB0aGUgbGVuZ3RoIG9mIHRoZSBjb2x1bW5zLCBhZGQgYSBuZXcgcm93XG5cdFx0XHRcdHJvd3MucHVzaCgnJyk7XG5cdFx0XHRcdHJvd0xlbmd0aCA9IDA7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChyb3dMZW5ndGggPiAwIHx8IG9wdGlvbnMudHJpbSA9PT0gZmFsc2UpIHtcblx0XHRcdFx0cm93c1tyb3dzLmxlbmd0aCAtIDFdICs9ICcgJztcblx0XHRcdFx0cm93TGVuZ3RoKys7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gSW4gJ2hhcmQnIHdyYXAgbW9kZSwgdGhlIGxlbmd0aCBvZiBhIGxpbmUgaXMgbmV2ZXIgYWxsb3dlZCB0byBleHRlbmQgcGFzdCAnY29sdW1ucydcblx0XHRpZiAob3B0aW9ucy5oYXJkICYmIGxlbmd0aHNbaW5kZXhdID4gY29sdW1ucykge1xuXHRcdFx0Y29uc3QgcmVtYWluaW5nQ29sdW1ucyA9IChjb2x1bW5zIC0gcm93TGVuZ3RoKTtcblx0XHRcdGNvbnN0IGJyZWFrc1N0YXJ0aW5nVGhpc0xpbmUgPSAxICsgTWF0aC5mbG9vcigobGVuZ3Roc1tpbmRleF0gLSByZW1haW5pbmdDb2x1bW5zIC0gMSkgLyBjb2x1bW5zKTtcblx0XHRcdGNvbnN0IGJyZWFrc1N0YXJ0aW5nTmV4dExpbmUgPSBNYXRoLmZsb29yKChsZW5ndGhzW2luZGV4XSAtIDEpIC8gY29sdW1ucyk7XG5cdFx0XHRpZiAoYnJlYWtzU3RhcnRpbmdOZXh0TGluZSA8IGJyZWFrc1N0YXJ0aW5nVGhpc0xpbmUpIHtcblx0XHRcdFx0cm93cy5wdXNoKCcnKTtcblx0XHRcdH1cblxuXHRcdFx0d3JhcFdvcmQocm93cywgd29yZCwgY29sdW1ucyk7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRpZiAocm93TGVuZ3RoICsgbGVuZ3Roc1tpbmRleF0gPiBjb2x1bW5zICYmIHJvd0xlbmd0aCA+IDAgJiYgbGVuZ3Roc1tpbmRleF0gPiAwKSB7XG5cdFx0XHRpZiAob3B0aW9ucy53b3JkV3JhcCA9PT0gZmFsc2UgJiYgcm93TGVuZ3RoIDwgY29sdW1ucykge1xuXHRcdFx0XHR3cmFwV29yZChyb3dzLCB3b3JkLCBjb2x1bW5zKTtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdHJvd3MucHVzaCgnJyk7XG5cdFx0fVxuXG5cdFx0aWYgKHJvd0xlbmd0aCArIGxlbmd0aHNbaW5kZXhdID4gY29sdW1ucyAmJiBvcHRpb25zLndvcmRXcmFwID09PSBmYWxzZSkge1xuXHRcdFx0d3JhcFdvcmQocm93cywgd29yZCwgY29sdW1ucyk7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRyb3dzW3Jvd3MubGVuZ3RoIC0gMV0gKz0gd29yZDtcblx0fVxuXG5cdGlmIChvcHRpb25zLnRyaW0gIT09IGZhbHNlKSB7XG5cdFx0cm93cyA9IHJvd3MubWFwKHN0cmluZ1Zpc2libGVUcmltU3BhY2VzUmlnaHQpO1xuXHR9XG5cblx0Y29uc3QgcHJlID0gWy4uLnJvd3Muam9pbignXFxuJyldO1xuXG5cdGZvciAoY29uc3QgW2luZGV4LCBjaGFyYWN0ZXJdIG9mIHByZS5lbnRyaWVzKCkpIHtcblx0XHRyZXR1cm5WYWx1ZSArPSBjaGFyYWN0ZXI7XG5cblx0XHRpZiAoRVNDQVBFUy5oYXMoY2hhcmFjdGVyKSkge1xuXHRcdFx0Y29uc3Qge2dyb3Vwc30gPSBuZXcgUmVnRXhwKGAoPzpcXFxcJHtBTlNJX0NTSX0oPzxjb2RlPlxcXFxkKyltfFxcXFwke0FOU0lfRVNDQVBFX0xJTkt9KD88dXJpPi4qKSR7QU5TSV9FU0NBUEVfQkVMTH0pYCkuZXhlYyhwcmUuc2xpY2UoaW5kZXgpLmpvaW4oJycpKSB8fCB7Z3JvdXBzOiB7fX07XG5cdFx0XHRpZiAoZ3JvdXBzLmNvZGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRjb25zdCBjb2RlID0gTnVtYmVyLnBhcnNlRmxvYXQoZ3JvdXBzLmNvZGUpO1xuXHRcdFx0XHRlc2NhcGVDb2RlID0gY29kZSA9PT0gRU5EX0NPREUgPyB1bmRlZmluZWQgOiBjb2RlO1xuXHRcdFx0fSBlbHNlIGlmIChncm91cHMudXJpICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0ZXNjYXBlVXJsID0gZ3JvdXBzLnVyaS5sZW5ndGggPT09IDAgPyB1bmRlZmluZWQgOiBncm91cHMudXJpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGNvbnN0IGNvZGUgPSBhbnNpU3R5bGVzLmNvZGVzLmdldChOdW1iZXIoZXNjYXBlQ29kZSkpO1xuXG5cdFx0aWYgKHByZVtpbmRleCArIDFdID09PSAnXFxuJykge1xuXHRcdFx0aWYgKGVzY2FwZVVybCkge1xuXHRcdFx0XHRyZXR1cm5WYWx1ZSArPSB3cmFwQW5zaUh5cGVybGluaygnJyk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChlc2NhcGVDb2RlICYmIGNvZGUpIHtcblx0XHRcdFx0cmV0dXJuVmFsdWUgKz0gd3JhcEFuc2koY29kZSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChjaGFyYWN0ZXIgPT09ICdcXG4nKSB7XG5cdFx0XHRpZiAoZXNjYXBlQ29kZSAmJiBjb2RlKSB7XG5cdFx0XHRcdHJldHVyblZhbHVlICs9IHdyYXBBbnNpKGVzY2FwZUNvZGUpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoZXNjYXBlVXJsKSB7XG5cdFx0XHRcdHJldHVyblZhbHVlICs9IHdyYXBBbnNpSHlwZXJsaW5rKGVzY2FwZVVybCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHJldHVyblZhbHVlO1xufTtcblxuLy8gRm9yIGVhY2ggbmV3bGluZSwgaW52b2tlIHRoZSBtZXRob2Qgc2VwYXJhdGVseVxubW9kdWxlLmV4cG9ydHMgPSAoc3RyaW5nLCBjb2x1bW5zLCBvcHRpb25zKSA9PiB7XG5cdHJldHVybiBTdHJpbmcoc3RyaW5nKVxuXHRcdC5ub3JtYWxpemUoKVxuXHRcdC5yZXBsYWNlKC9cXHJcXG4vZywgJ1xcbicpXG5cdFx0LnNwbGl0KCdcXG4nKVxuXHRcdC5tYXAobGluZSA9PiBleGVjKGxpbmUsIGNvbHVtbnMsIG9wdGlvbnMpKVxuXHRcdC5qb2luKCdcXG4nKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBhbGlnbiA9IHtcbiAgICByaWdodDogYWxpZ25SaWdodCxcbiAgICBjZW50ZXI6IGFsaWduQ2VudGVyXG59O1xuY29uc3QgdG9wID0gMDtcbmNvbnN0IHJpZ2h0ID0gMTtcbmNvbnN0IGJvdHRvbSA9IDI7XG5jb25zdCBsZWZ0ID0gMztcbmNsYXNzIFVJIHtcbiAgICBjb25zdHJ1Y3RvcihvcHRzKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgdGhpcy53aWR0aCA9IG9wdHMud2lkdGg7XG4gICAgICAgIHRoaXMud3JhcCA9IChfYSA9IG9wdHMud3JhcCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogdHJ1ZTtcbiAgICAgICAgdGhpcy5yb3dzID0gW107XG4gICAgfVxuICAgIHNwYW4oLi4uYXJncykge1xuICAgICAgICBjb25zdCBjb2xzID0gdGhpcy5kaXYoLi4uYXJncyk7XG4gICAgICAgIGNvbHMuc3BhbiA9IHRydWU7XG4gICAgfVxuICAgIHJlc2V0T3V0cHV0KCkge1xuICAgICAgICB0aGlzLnJvd3MgPSBbXTtcbiAgICB9XG4gICAgZGl2KC4uLmFyZ3MpIHtcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmRpdignJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMud3JhcCAmJiB0aGlzLnNob3VsZEFwcGx5TGF5b3V0RFNMKC4uLmFyZ3MpICYmIHR5cGVvZiBhcmdzWzBdID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXBwbHlMYXlvdXREU0woYXJnc1swXSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29scyA9IGFyZ3MubWFwKGFyZyA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGFyZyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb2xGcm9tU3RyaW5nKGFyZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYXJnO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5yb3dzLnB1c2goY29scyk7XG4gICAgICAgIHJldHVybiBjb2xzO1xuICAgIH1cbiAgICBzaG91bGRBcHBseUxheW91dERTTCguLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiBhcmdzLmxlbmd0aCA9PT0gMSAmJiB0eXBlb2YgYXJnc1swXSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICAgIC9bXFx0XFxuXS8udGVzdChhcmdzWzBdKTtcbiAgICB9XG4gICAgYXBwbHlMYXlvdXREU0woc3RyKSB7XG4gICAgICAgIGNvbnN0IHJvd3MgPSBzdHIuc3BsaXQoJ1xcbicpLm1hcChyb3cgPT4gcm93LnNwbGl0KCdcXHQnKSk7XG4gICAgICAgIGxldCBsZWZ0Q29sdW1uV2lkdGggPSAwO1xuICAgICAgICAvLyBzaW1wbGUgaGV1cmlzdGljIGZvciBsYXlvdXQsIG1ha2Ugc3VyZSB0aGVcbiAgICAgICAgLy8gc2Vjb25kIGNvbHVtbiBsaW5lcyB1cCBhbG9uZyB0aGUgbGVmdC1oYW5kLlxuICAgICAgICAvLyBkb24ndCBhbGxvdyB0aGUgZmlyc3QgY29sdW1uIHRvIHRha2UgdXAgbW9yZVxuICAgICAgICAvLyB0aGFuIDUwJSBvZiB0aGUgc2NyZWVuLlxuICAgICAgICByb3dzLmZvckVhY2goY29sdW1ucyA9PiB7XG4gICAgICAgICAgICBpZiAoY29sdW1ucy5sZW5ndGggPiAxICYmIG1peGluLnN0cmluZ1dpZHRoKGNvbHVtbnNbMF0pID4gbGVmdENvbHVtbldpZHRoKSB7XG4gICAgICAgICAgICAgICAgbGVmdENvbHVtbldpZHRoID0gTWF0aC5taW4oTWF0aC5mbG9vcih0aGlzLndpZHRoICogMC41KSwgbWl4aW4uc3RyaW5nV2lkdGgoY29sdW1uc1swXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgLy8gZ2VuZXJhdGUgYSB0YWJsZTpcbiAgICAgICAgLy8gIHJlcGxhY2luZyAnICcgd2l0aCBwYWRkaW5nIGNhbGN1bGF0aW9ucy5cbiAgICAgICAgLy8gIHVzaW5nIHRoZSBhbGdvcml0aG1pY2FsbHkgZ2VuZXJhdGVkIHdpZHRoLlxuICAgICAgICByb3dzLmZvckVhY2goY29sdW1ucyA9PiB7XG4gICAgICAgICAgICB0aGlzLmRpdiguLi5jb2x1bW5zLm1hcCgociwgaSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHRleHQ6IHIudHJpbSgpLFxuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiB0aGlzLm1lYXN1cmVQYWRkaW5nKHIpLFxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogKGkgPT09IDAgJiYgY29sdW1ucy5sZW5ndGggPiAxKSA/IGxlZnRDb2x1bW5XaWR0aCA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5yb3dzW3RoaXMucm93cy5sZW5ndGggLSAxXTtcbiAgICB9XG4gICAgY29sRnJvbVN0cmluZyh0ZXh0KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0ZXh0LFxuICAgICAgICAgICAgcGFkZGluZzogdGhpcy5tZWFzdXJlUGFkZGluZyh0ZXh0KVxuICAgICAgICB9O1xuICAgIH1cbiAgICBtZWFzdXJlUGFkZGluZyhzdHIpIHtcbiAgICAgICAgLy8gbWVhc3VyZSBwYWRkaW5nIHdpdGhvdXQgYW5zaSBlc2NhcGUgY29kZXNcbiAgICAgICAgY29uc3Qgbm9BbnNpID0gbWl4aW4uc3RyaXBBbnNpKHN0cik7XG4gICAgICAgIHJldHVybiBbMCwgbm9BbnNpLm1hdGNoKC9cXHMqJC8pWzBdLmxlbmd0aCwgMCwgbm9BbnNpLm1hdGNoKC9eXFxzKi8pWzBdLmxlbmd0aF07XG4gICAgfVxuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICBjb25zdCBsaW5lcyA9IFtdO1xuICAgICAgICB0aGlzLnJvd3MuZm9yRWFjaChyb3cgPT4ge1xuICAgICAgICAgICAgdGhpcy5yb3dUb1N0cmluZyhyb3csIGxpbmVzKTtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIGRvbid0IGRpc3BsYXkgYW55IGxpbmVzIHdpdGggdGhlXG4gICAgICAgIC8vIGhpZGRlbiBmbGFnIHNldC5cbiAgICAgICAgcmV0dXJuIGxpbmVzXG4gICAgICAgICAgICAuZmlsdGVyKGxpbmUgPT4gIWxpbmUuaGlkZGVuKVxuICAgICAgICAgICAgLm1hcChsaW5lID0+IGxpbmUudGV4dClcbiAgICAgICAgICAgIC5qb2luKCdcXG4nKTtcbiAgICB9XG4gICAgcm93VG9TdHJpbmcocm93LCBsaW5lcykge1xuICAgICAgICB0aGlzLnJhc3Rlcml6ZShyb3cpLmZvckVhY2goKHJyb3csIHIpID0+IHtcbiAgICAgICAgICAgIGxldCBzdHIgPSAnJztcbiAgICAgICAgICAgIHJyb3cuZm9yRWFjaCgoY29sLCBjKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyB3aWR0aCB9ID0gcm93W2NdOyAvLyB0aGUgd2lkdGggd2l0aCBwYWRkaW5nLlxuICAgICAgICAgICAgICAgIGNvbnN0IHdyYXBXaWR0aCA9IHRoaXMubmVnYXRlUGFkZGluZyhyb3dbY10pOyAvLyB0aGUgd2lkdGggd2l0aG91dCBwYWRkaW5nLlxuICAgICAgICAgICAgICAgIGxldCB0cyA9IGNvbDsgLy8gdGVtcG9yYXJ5IHN0cmluZyB1c2VkIGR1cmluZyBhbGlnbm1lbnQvcGFkZGluZy5cbiAgICAgICAgICAgICAgICBpZiAod3JhcFdpZHRoID4gbWl4aW4uc3RyaW5nV2lkdGgoY29sKSkge1xuICAgICAgICAgICAgICAgICAgICB0cyArPSAnICcucmVwZWF0KHdyYXBXaWR0aCAtIG1peGluLnN0cmluZ1dpZHRoKGNvbCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBhbGlnbiB0aGUgc3RyaW5nIHdpdGhpbiBpdHMgY29sdW1uLlxuICAgICAgICAgICAgICAgIGlmIChyb3dbY10uYWxpZ24gJiYgcm93W2NdLmFsaWduICE9PSAnbGVmdCcgJiYgdGhpcy53cmFwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZuID0gYWxpZ25bcm93W2NdLmFsaWduXTtcbiAgICAgICAgICAgICAgICAgICAgdHMgPSBmbih0cywgd3JhcFdpZHRoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1peGluLnN0cmluZ1dpZHRoKHRzKSA8IHdyYXBXaWR0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHMgKz0gJyAnLnJlcGVhdCgod2lkdGggfHwgMCkgLSBtaXhpbi5zdHJpbmdXaWR0aCh0cykgLSAxKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBhcHBseSBib3JkZXIgYW5kIHBhZGRpbmcgdG8gc3RyaW5nLlxuICAgICAgICAgICAgICAgIGNvbnN0IHBhZGRpbmcgPSByb3dbY10ucGFkZGluZyB8fCBbMCwgMCwgMCwgMF07XG4gICAgICAgICAgICAgICAgaWYgKHBhZGRpbmdbbGVmdF0pIHtcbiAgICAgICAgICAgICAgICAgICAgc3RyICs9ICcgJy5yZXBlYXQocGFkZGluZ1tsZWZ0XSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHN0ciArPSBhZGRCb3JkZXIocm93W2NdLCB0cywgJ3wgJyk7XG4gICAgICAgICAgICAgICAgc3RyICs9IHRzO1xuICAgICAgICAgICAgICAgIHN0ciArPSBhZGRCb3JkZXIocm93W2NdLCB0cywgJyB8Jyk7XG4gICAgICAgICAgICAgICAgaWYgKHBhZGRpbmdbcmlnaHRdKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0ciArPSAnICcucmVwZWF0KHBhZGRpbmdbcmlnaHRdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gaWYgcHJpb3Igcm93IGlzIHNwYW4sIHRyeSB0byByZW5kZXIgdGhlXG4gICAgICAgICAgICAgICAgLy8gY3VycmVudCByb3cgb24gdGhlIHByaW9yIGxpbmUuXG4gICAgICAgICAgICAgICAgaWYgKHIgPT09IDAgJiYgbGluZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBzdHIgPSB0aGlzLnJlbmRlcklubGluZShzdHIsIGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIHJlbW92ZSB0cmFpbGluZyB3aGl0ZXNwYWNlLlxuICAgICAgICAgICAgbGluZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgdGV4dDogc3RyLnJlcGxhY2UoLyArJC8sICcnKSxcbiAgICAgICAgICAgICAgICBzcGFuOiByb3cuc3BhblxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbGluZXM7XG4gICAgfVxuICAgIC8vIGlmIHRoZSBmdWxsICdzb3VyY2UnIGNhbiByZW5kZXIgaW5cbiAgICAvLyB0aGUgdGFyZ2V0IGxpbmUsIGRvIHNvLlxuICAgIHJlbmRlcklubGluZShzb3VyY2UsIHByZXZpb3VzTGluZSkge1xuICAgICAgICBjb25zdCBtYXRjaCA9IHNvdXJjZS5tYXRjaCgvXiAqLyk7XG4gICAgICAgIGNvbnN0IGxlYWRpbmdXaGl0ZXNwYWNlID0gbWF0Y2ggPyBtYXRjaFswXS5sZW5ndGggOiAwO1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBwcmV2aW91c0xpbmUudGV4dDtcbiAgICAgICAgY29uc3QgdGFyZ2V0VGV4dFdpZHRoID0gbWl4aW4uc3RyaW5nV2lkdGgodGFyZ2V0LnRyaW1SaWdodCgpKTtcbiAgICAgICAgaWYgKCFwcmV2aW91c0xpbmUuc3Bhbikge1xuICAgICAgICAgICAgcmV0dXJuIHNvdXJjZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBpZiB3ZSdyZSBub3QgYXBwbHlpbmcgd3JhcHBpbmcgbG9naWMsXG4gICAgICAgIC8vIGp1c3QgYWx3YXlzIGFwcGVuZCB0byB0aGUgc3Bhbi5cbiAgICAgICAgaWYgKCF0aGlzLndyYXApIHtcbiAgICAgICAgICAgIHByZXZpb3VzTGluZS5oaWRkZW4gPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIHRhcmdldCArIHNvdXJjZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobGVhZGluZ1doaXRlc3BhY2UgPCB0YXJnZXRUZXh0V2lkdGgpIHtcbiAgICAgICAgICAgIHJldHVybiBzb3VyY2U7XG4gICAgICAgIH1cbiAgICAgICAgcHJldmlvdXNMaW5lLmhpZGRlbiA9IHRydWU7XG4gICAgICAgIHJldHVybiB0YXJnZXQudHJpbVJpZ2h0KCkgKyAnICcucmVwZWF0KGxlYWRpbmdXaGl0ZXNwYWNlIC0gdGFyZ2V0VGV4dFdpZHRoKSArIHNvdXJjZS50cmltTGVmdCgpO1xuICAgIH1cbiAgICByYXN0ZXJpemUocm93KSB7XG4gICAgICAgIGNvbnN0IHJyb3dzID0gW107XG4gICAgICAgIGNvbnN0IHdpZHRocyA9IHRoaXMuY29sdW1uV2lkdGhzKHJvdyk7XG4gICAgICAgIGxldCB3cmFwcGVkO1xuICAgICAgICAvLyB3b3JkIHdyYXAgYWxsIGNvbHVtbnMsIGFuZCBjcmVhdGVcbiAgICAgICAgLy8gYSBkYXRhLXN0cnVjdHVyZSB0aGF0IGlzIGVhc3kgdG8gcmFzdGVyaXplLlxuICAgICAgICByb3cuZm9yRWFjaCgoY29sLCBjKSA9PiB7XG4gICAgICAgICAgICAvLyBsZWF2ZSByb29tIGZvciBsZWZ0IGFuZCByaWdodCBwYWRkaW5nLlxuICAgICAgICAgICAgY29sLndpZHRoID0gd2lkdGhzW2NdO1xuICAgICAgICAgICAgaWYgKHRoaXMud3JhcCkge1xuICAgICAgICAgICAgICAgIHdyYXBwZWQgPSBtaXhpbi53cmFwKGNvbC50ZXh0LCB0aGlzLm5lZ2F0ZVBhZGRpbmcoY29sKSwgeyBoYXJkOiB0cnVlIH0pLnNwbGl0KCdcXG4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHdyYXBwZWQgPSBjb2wudGV4dC5zcGxpdCgnXFxuJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY29sLmJvcmRlcikge1xuICAgICAgICAgICAgICAgIHdyYXBwZWQudW5zaGlmdCgnLicgKyAnLScucmVwZWF0KHRoaXMubmVnYXRlUGFkZGluZyhjb2wpICsgMikgKyAnLicpO1xuICAgICAgICAgICAgICAgIHdyYXBwZWQucHVzaChcIidcIiArICctJy5yZXBlYXQodGhpcy5uZWdhdGVQYWRkaW5nKGNvbCkgKyAyKSArIFwiJ1wiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGFkZCB0b3AgYW5kIGJvdHRvbSBwYWRkaW5nLlxuICAgICAgICAgICAgaWYgKGNvbC5wYWRkaW5nKSB7XG4gICAgICAgICAgICAgICAgd3JhcHBlZC51bnNoaWZ0KC4uLm5ldyBBcnJheShjb2wucGFkZGluZ1t0b3BdIHx8IDApLmZpbGwoJycpKTtcbiAgICAgICAgICAgICAgICB3cmFwcGVkLnB1c2goLi4ubmV3IEFycmF5KGNvbC5wYWRkaW5nW2JvdHRvbV0gfHwgMCkuZmlsbCgnJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd3JhcHBlZC5mb3JFYWNoKChzdHIsIHIpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXJyb3dzW3JdKSB7XG4gICAgICAgICAgICAgICAgICAgIHJyb3dzLnB1c2goW10pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBycm93ID0gcnJvd3Nbcl07XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJyb3dbaV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcnJvdy5wdXNoKCcnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBycm93LnB1c2goc3RyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJyb3dzO1xuICAgIH1cbiAgICBuZWdhdGVQYWRkaW5nKGNvbCkge1xuICAgICAgICBsZXQgd3JhcFdpZHRoID0gY29sLndpZHRoIHx8IDA7XG4gICAgICAgIGlmIChjb2wucGFkZGluZykge1xuICAgICAgICAgICAgd3JhcFdpZHRoIC09IChjb2wucGFkZGluZ1tsZWZ0XSB8fCAwKSArIChjb2wucGFkZGluZ1tyaWdodF0gfHwgMCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbC5ib3JkZXIpIHtcbiAgICAgICAgICAgIHdyYXBXaWR0aCAtPSA0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB3cmFwV2lkdGg7XG4gICAgfVxuICAgIGNvbHVtbldpZHRocyhyb3cpIHtcbiAgICAgICAgaWYgKCF0aGlzLndyYXApIHtcbiAgICAgICAgICAgIHJldHVybiByb3cubWFwKGNvbCA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbC53aWR0aCB8fCBtaXhpbi5zdHJpbmdXaWR0aChjb2wudGV4dCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgdW5zZXQgPSByb3cubGVuZ3RoO1xuICAgICAgICBsZXQgcmVtYWluaW5nV2lkdGggPSB0aGlzLndpZHRoO1xuICAgICAgICAvLyBjb2x1bW4gd2lkdGhzIGNhbiBiZSBzZXQgaW4gY29uZmlnLlxuICAgICAgICBjb25zdCB3aWR0aHMgPSByb3cubWFwKGNvbCA9PiB7XG4gICAgICAgICAgICBpZiAoY29sLndpZHRoKSB7XG4gICAgICAgICAgICAgICAgdW5zZXQtLTtcbiAgICAgICAgICAgICAgICByZW1haW5pbmdXaWR0aCAtPSBjb2wud2lkdGg7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbC53aWR0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBhbnkgdW5zZXQgd2lkdGhzIHNob3VsZCBiZSBjYWxjdWxhdGVkLlxuICAgICAgICBjb25zdCB1bnNldFdpZHRoID0gdW5zZXQgPyBNYXRoLmZsb29yKHJlbWFpbmluZ1dpZHRoIC8gdW5zZXQpIDogMDtcbiAgICAgICAgcmV0dXJuIHdpZHRocy5tYXAoKHcsIGkpID0+IHtcbiAgICAgICAgICAgIGlmICh3ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5tYXgodW5zZXRXaWR0aCwgX21pbldpZHRoKHJvd1tpXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHc7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGFkZEJvcmRlcihjb2wsIHRzLCBzdHlsZSkge1xuICAgIGlmIChjb2wuYm9yZGVyKSB7XG4gICAgICAgIGlmICgvWy4nXS0rWy4nXS8udGVzdCh0cykpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgICBpZiAodHMudHJpbSgpLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHN0eWxlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnICAnO1xuICAgIH1cbiAgICByZXR1cm4gJyc7XG59XG4vLyBjYWxjdWxhdGVzIHRoZSBtaW5pbXVtIHdpZHRoIG9mXG4vLyBhIGNvbHVtbiwgYmFzZWQgb24gcGFkZGluZyBwcmVmZXJlbmNlcy5cbmZ1bmN0aW9uIF9taW5XaWR0aChjb2wpIHtcbiAgICBjb25zdCBwYWRkaW5nID0gY29sLnBhZGRpbmcgfHwgW107XG4gICAgY29uc3QgbWluV2lkdGggPSAxICsgKHBhZGRpbmdbbGVmdF0gfHwgMCkgKyAocGFkZGluZ1tyaWdodF0gfHwgMCk7XG4gICAgaWYgKGNvbC5ib3JkZXIpIHtcbiAgICAgICAgcmV0dXJuIG1pbldpZHRoICsgNDtcbiAgICB9XG4gICAgcmV0dXJuIG1pbldpZHRoO1xufVxuZnVuY3Rpb24gZ2V0V2luZG93V2lkdGgoKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQ6IGRlcGVuZHMgb24gdGVybWluYWwgKi9cbiAgICBpZiAodHlwZW9mIHByb2Nlc3MgPT09ICdvYmplY3QnICYmIHByb2Nlc3Muc3Rkb3V0ICYmIHByb2Nlc3Muc3Rkb3V0LmNvbHVtbnMpIHtcbiAgICAgICAgcmV0dXJuIHByb2Nlc3Muc3Rkb3V0LmNvbHVtbnM7XG4gICAgfVxuICAgIHJldHVybiA4MDtcbn1cbmZ1bmN0aW9uIGFsaWduUmlnaHQoc3RyLCB3aWR0aCkge1xuICAgIHN0ciA9IHN0ci50cmltKCk7XG4gICAgY29uc3Qgc3RyV2lkdGggPSBtaXhpbi5zdHJpbmdXaWR0aChzdHIpO1xuICAgIGlmIChzdHJXaWR0aCA8IHdpZHRoKSB7XG4gICAgICAgIHJldHVybiAnICcucmVwZWF0KHdpZHRoIC0gc3RyV2lkdGgpICsgc3RyO1xuICAgIH1cbiAgICByZXR1cm4gc3RyO1xufVxuZnVuY3Rpb24gYWxpZ25DZW50ZXIoc3RyLCB3aWR0aCkge1xuICAgIHN0ciA9IHN0ci50cmltKCk7XG4gICAgY29uc3Qgc3RyV2lkdGggPSBtaXhpbi5zdHJpbmdXaWR0aChzdHIpO1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgaWYgKHN0cldpZHRoID49IHdpZHRoKSB7XG4gICAgICAgIHJldHVybiBzdHI7XG4gICAgfVxuICAgIHJldHVybiAnICcucmVwZWF0KCh3aWR0aCAtIHN0cldpZHRoKSA+PiAxKSArIHN0cjtcbn1cbmxldCBtaXhpbjtcbmZ1bmN0aW9uIGNsaXVpKG9wdHMsIF9taXhpbikge1xuICAgIG1peGluID0gX21peGluO1xuICAgIHJldHVybiBuZXcgVUkoe1xuICAgICAgICB3aWR0aDogKG9wdHMgPT09IG51bGwgfHwgb3B0cyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0cy53aWR0aCkgfHwgZ2V0V2luZG93V2lkdGgoKSxcbiAgICAgICAgd3JhcDogb3B0cyA9PT0gbnVsbCB8fCBvcHRzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRzLndyYXBcbiAgICB9KTtcbn1cblxuLy8gQm9vdHN0cmFwIGNsaXVpIHdpdGggQ29tbW9uSlMgZGVwZW5kZW5jaWVzOlxuY29uc3Qgc3RyaW5nV2lkdGggPSByZXF1aXJlKCdzdHJpbmctd2lkdGgnKTtcbmNvbnN0IHN0cmlwQW5zaSA9IHJlcXVpcmUoJ3N0cmlwLWFuc2knKTtcbmNvbnN0IHdyYXAgPSByZXF1aXJlKCd3cmFwLWFuc2knKTtcbmZ1bmN0aW9uIHVpKG9wdHMpIHtcbiAgICByZXR1cm4gY2xpdWkob3B0cywge1xuICAgICAgICBzdHJpbmdXaWR0aCxcbiAgICAgICAgc3RyaXBBbnNpLFxuICAgICAgICB3cmFwXG4gICAgfSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdWk7XG4iLCAiY29uc3QgeyBkaXJuYW1lLCByZXNvbHZlIH0gPSByZXF1aXJlKCdwYXRoJyk7XG5jb25zdCB7IHJlYWRkaXJTeW5jLCBzdGF0U3luYyB9ID0gcmVxdWlyZSgnZnMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc3RhcnQsIGNhbGxiYWNrKSB7XG5cdGxldCBkaXIgPSByZXNvbHZlKCcuJywgc3RhcnQpO1xuXHRsZXQgdG1wLCBzdGF0cyA9IHN0YXRTeW5jKGRpcik7XG5cblx0aWYgKCFzdGF0cy5pc0RpcmVjdG9yeSgpKSB7XG5cdFx0ZGlyID0gZGlybmFtZShkaXIpO1xuXHR9XG5cblx0d2hpbGUgKHRydWUpIHtcblx0XHR0bXAgPSBjYWxsYmFjayhkaXIsIHJlYWRkaXJTeW5jKGRpcikpO1xuXHRcdGlmICh0bXApIHJldHVybiByZXNvbHZlKGRpciwgdG1wKTtcblx0XHRkaXIgPSBkaXJuYW1lKHRtcCA9IGRpcik7XG5cdFx0aWYgKHRtcCA9PT0gZGlyKSBicmVhaztcblx0fVxufVxuIiwgbnVsbCwgIid1c2Ugc3RyaWN0JztcblxudmFyIGZzID0gcmVxdWlyZSgnZnMnKSxcbiAgam9pbiA9IHJlcXVpcmUoJ3BhdGgnKS5qb2luLFxuICByZXNvbHZlID0gcmVxdWlyZSgncGF0aCcpLnJlc29sdmUsXG4gIGRpcm5hbWUgPSByZXF1aXJlKCdwYXRoJykuZGlybmFtZSxcbiAgZGVmYXVsdE9wdGlvbnMgPSB7XG4gICAgZXh0ZW5zaW9uczogWydqcycsICdqc29uJywgJ2NvZmZlZSddLFxuICAgIHJlY3Vyc2U6IHRydWUsXG4gICAgcmVuYW1lOiBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgcmV0dXJuIG5hbWU7XG4gICAgfSxcbiAgICB2aXNpdDogZnVuY3Rpb24gKG9iaikge1xuICAgICAgcmV0dXJuIG9iajtcbiAgICB9XG4gIH07XG5cbmZ1bmN0aW9uIGNoZWNrRmlsZUluY2x1c2lvbihwYXRoLCBmaWxlbmFtZSwgb3B0aW9ucykge1xuICByZXR1cm4gKFxuICAgIC8vIHZlcmlmeSBmaWxlIGhhcyB2YWxpZCBleHRlbnNpb25cbiAgICAobmV3IFJlZ0V4cCgnXFxcXC4oJyArIG9wdGlvbnMuZXh0ZW5zaW9ucy5qb2luKCd8JykgKyAnKSQnLCAnaScpLnRlc3QoZmlsZW5hbWUpKSAmJlxuXG4gICAgLy8gaWYgb3B0aW9ucy5pbmNsdWRlIGlzIGEgUmVnRXhwLCBldmFsdWF0ZSBpdCBhbmQgbWFrZSBzdXJlIHRoZSBwYXRoIHBhc3Nlc1xuICAgICEob3B0aW9ucy5pbmNsdWRlICYmIG9wdGlvbnMuaW5jbHVkZSBpbnN0YW5jZW9mIFJlZ0V4cCAmJiAhb3B0aW9ucy5pbmNsdWRlLnRlc3QocGF0aCkpICYmXG5cbiAgICAvLyBpZiBvcHRpb25zLmluY2x1ZGUgaXMgYSBmdW5jdGlvbiwgZXZhbHVhdGUgaXQgYW5kIG1ha2Ugc3VyZSB0aGUgcGF0aCBwYXNzZXNcbiAgICAhKG9wdGlvbnMuaW5jbHVkZSAmJiB0eXBlb2Ygb3B0aW9ucy5pbmNsdWRlID09PSAnZnVuY3Rpb24nICYmICFvcHRpb25zLmluY2x1ZGUocGF0aCwgZmlsZW5hbWUpKSAmJlxuXG4gICAgLy8gaWYgb3B0aW9ucy5leGNsdWRlIGlzIGEgUmVnRXhwLCBldmFsdWF0ZSBpdCBhbmQgbWFrZSBzdXJlIHRoZSBwYXRoIGRvZXNuJ3QgcGFzc1xuICAgICEob3B0aW9ucy5leGNsdWRlICYmIG9wdGlvbnMuZXhjbHVkZSBpbnN0YW5jZW9mIFJlZ0V4cCAmJiBvcHRpb25zLmV4Y2x1ZGUudGVzdChwYXRoKSkgJiZcblxuICAgIC8vIGlmIG9wdGlvbnMuZXhjbHVkZSBpcyBhIGZ1bmN0aW9uLCBldmFsdWF0ZSBpdCBhbmQgbWFrZSBzdXJlIHRoZSBwYXRoIGRvZXNuJ3QgcGFzc1xuICAgICEob3B0aW9ucy5leGNsdWRlICYmIHR5cGVvZiBvcHRpb25zLmV4Y2x1ZGUgPT09ICdmdW5jdGlvbicgJiYgb3B0aW9ucy5leGNsdWRlKHBhdGgsIGZpbGVuYW1lKSlcbiAgKTtcbn1cblxuZnVuY3Rpb24gcmVxdWlyZURpcmVjdG9yeShtLCBwYXRoLCBvcHRpb25zKSB7XG4gIHZhciByZXR2YWwgPSB7fTtcblxuICAvLyBwYXRoIGlzIG9wdGlvbmFsXG4gIGlmIChwYXRoICYmICFvcHRpb25zICYmIHR5cGVvZiBwYXRoICE9PSAnc3RyaW5nJykge1xuICAgIG9wdGlvbnMgPSBwYXRoO1xuICAgIHBhdGggPSBudWxsO1xuICB9XG5cbiAgLy8gZGVmYXVsdCBvcHRpb25zXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBmb3IgKHZhciBwcm9wIGluIGRlZmF1bHRPcHRpb25zKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zW3Byb3BdID09PSAndW5kZWZpbmVkJykge1xuICAgICAgb3B0aW9uc1twcm9wXSA9IGRlZmF1bHRPcHRpb25zW3Byb3BdO1xuICAgIH1cbiAgfVxuXG4gIC8vIGlmIG5vIHBhdGggd2FzIHBhc3NlZCBpbiwgYXNzdW1lIHRoZSBlcXVpdmVsYW50IG9mIF9fZGlybmFtZSBmcm9tIGNhbGxlclxuICAvLyBvdGhlcndpc2UsIHJlc29sdmUgcGF0aCByZWxhdGl2ZSB0byB0aGUgZXF1aXZhbGVudCBvZiBfX2Rpcm5hbWVcbiAgcGF0aCA9ICFwYXRoID8gZGlybmFtZShtLmZpbGVuYW1lKSA6IHJlc29sdmUoZGlybmFtZShtLmZpbGVuYW1lKSwgcGF0aCk7XG5cbiAgLy8gZ2V0IHRoZSBwYXRoIG9mIGVhY2ggZmlsZSBpbiBzcGVjaWZpZWQgZGlyZWN0b3J5LCBhcHBlbmQgdG8gY3VycmVudCB0cmVlIG5vZGUsIHJlY3Vyc2VcbiAgZnMucmVhZGRpclN5bmMocGF0aCkuZm9yRWFjaChmdW5jdGlvbiAoZmlsZW5hbWUpIHtcbiAgICB2YXIgam9pbmVkID0gam9pbihwYXRoLCBmaWxlbmFtZSksXG4gICAgICBmaWxlcyxcbiAgICAgIGtleSxcbiAgICAgIG9iajtcblxuICAgIGlmIChmcy5zdGF0U3luYyhqb2luZWQpLmlzRGlyZWN0b3J5KCkgJiYgb3B0aW9ucy5yZWN1cnNlKSB7XG4gICAgICAvLyB0aGlzIG5vZGUgaXMgYSBkaXJlY3Rvcnk7IHJlY3Vyc2VcbiAgICAgIGZpbGVzID0gcmVxdWlyZURpcmVjdG9yeShtLCBqb2luZWQsIG9wdGlvbnMpO1xuICAgICAgLy8gZXhjbHVkZSBlbXB0eSBkaXJlY3Rvcmllc1xuICAgICAgaWYgKE9iamVjdC5rZXlzKGZpbGVzKS5sZW5ndGgpIHtcbiAgICAgICAgcmV0dmFsW29wdGlvbnMucmVuYW1lKGZpbGVuYW1lLCBqb2luZWQsIGZpbGVuYW1lKV0gPSBmaWxlcztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGpvaW5lZCAhPT0gbS5maWxlbmFtZSAmJiBjaGVja0ZpbGVJbmNsdXNpb24oam9pbmVkLCBmaWxlbmFtZSwgb3B0aW9ucykpIHtcbiAgICAgICAgLy8gaGFzaCBub2RlIGtleSBzaG91bGRuJ3QgaW5jbHVkZSBmaWxlIGV4dGVuc2lvblxuICAgICAgICBrZXkgPSBmaWxlbmFtZS5zdWJzdHJpbmcoMCwgZmlsZW5hbWUubGFzdEluZGV4T2YoJy4nKSk7XG4gICAgICAgIG9iaiA9IG0ucmVxdWlyZShqb2luZWQpO1xuICAgICAgICByZXR2YWxbb3B0aW9ucy5yZW5hbWUoa2V5LCBqb2luZWQsIGZpbGVuYW1lKV0gPSBvcHRpb25zLnZpc2l0KG9iaiwgam9pbmVkLCBmaWxlbmFtZSkgfHwgb2JqO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHJldHZhbDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlRGlyZWN0b3J5O1xubW9kdWxlLmV4cG9ydHMuZGVmYXVsdHMgPSBkZWZhdWx0T3B0aW9ucztcbiIsICIndXNlIHN0cmljdCc7XG5cbnZhciBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKTtcblxuY2xhc3MgWUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKG1zZykge1xuICAgICAgICBzdXBlcihtc2cgfHwgJ3lhcmdzIGVycm9yJyk7XG4gICAgICAgIHRoaXMubmFtZSA9ICdZRXJyb3InO1xuICAgICAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBZRXJyb3IpO1xuICAgIH1cbn1cblxubGV0IHByZXZpb3VzbHlWaXNpdGVkQ29uZmlncyA9IFtdO1xubGV0IHNoaW07XG5mdW5jdGlvbiBhcHBseUV4dGVuZHMoY29uZmlnLCBjd2QsIG1lcmdlRXh0ZW5kcywgX3NoaW0pIHtcbiAgICBzaGltID0gX3NoaW07XG4gICAgbGV0IGRlZmF1bHRDb25maWcgPSB7fTtcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywgJ2V4dGVuZHMnKSkge1xuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZy5leHRlbmRzICE9PSAnc3RyaW5nJylcbiAgICAgICAgICAgIHJldHVybiBkZWZhdWx0Q29uZmlnO1xuICAgICAgICBjb25zdCBpc1BhdGggPSAvXFwuanNvbnxcXC4uKnJjJC8udGVzdChjb25maWcuZXh0ZW5kcyk7XG4gICAgICAgIGxldCBwYXRoVG9EZWZhdWx0ID0gbnVsbDtcbiAgICAgICAgaWYgKCFpc1BhdGgpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcGF0aFRvRGVmYXVsdCA9IHJlcXVpcmUucmVzb2x2ZShjb25maWcuZXh0ZW5kcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoX2Vycikge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb25maWc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBwYXRoVG9EZWZhdWx0ID0gZ2V0UGF0aFRvRGVmYXVsdENvbmZpZyhjd2QsIGNvbmZpZy5leHRlbmRzKTtcbiAgICAgICAgfVxuICAgICAgICBjaGVja0ZvckNpcmN1bGFyRXh0ZW5kcyhwYXRoVG9EZWZhdWx0KTtcbiAgICAgICAgcHJldmlvdXNseVZpc2l0ZWRDb25maWdzLnB1c2gocGF0aFRvRGVmYXVsdCk7XG4gICAgICAgIGRlZmF1bHRDb25maWcgPSBpc1BhdGhcbiAgICAgICAgICAgID8gSlNPTi5wYXJzZShzaGltLnJlYWRGaWxlU3luYyhwYXRoVG9EZWZhdWx0LCAndXRmOCcpKVxuICAgICAgICAgICAgOiByZXF1aXJlKGNvbmZpZy5leHRlbmRzKTtcbiAgICAgICAgZGVsZXRlIGNvbmZpZy5leHRlbmRzO1xuICAgICAgICBkZWZhdWx0Q29uZmlnID0gYXBwbHlFeHRlbmRzKGRlZmF1bHRDb25maWcsIHNoaW0ucGF0aC5kaXJuYW1lKHBhdGhUb0RlZmF1bHQpLCBtZXJnZUV4dGVuZHMsIHNoaW0pO1xuICAgIH1cbiAgICBwcmV2aW91c2x5VmlzaXRlZENvbmZpZ3MgPSBbXTtcbiAgICByZXR1cm4gbWVyZ2VFeHRlbmRzXG4gICAgICAgID8gbWVyZ2VEZWVwKGRlZmF1bHRDb25maWcsIGNvbmZpZylcbiAgICAgICAgOiBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0Q29uZmlnLCBjb25maWcpO1xufVxuZnVuY3Rpb24gY2hlY2tGb3JDaXJjdWxhckV4dGVuZHMoY2ZnUGF0aCkge1xuICAgIGlmIChwcmV2aW91c2x5VmlzaXRlZENvbmZpZ3MuaW5kZXhPZihjZmdQYXRoKSA+IC0xKSB7XG4gICAgICAgIHRocm93IG5ldyBZRXJyb3IoYENpcmN1bGFyIGV4dGVuZGVkIGNvbmZpZ3VyYXRpb25zOiAnJHtjZmdQYXRofScuYCk7XG4gICAgfVxufVxuZnVuY3Rpb24gZ2V0UGF0aFRvRGVmYXVsdENvbmZpZyhjd2QsIHBhdGhUb0V4dGVuZCkge1xuICAgIHJldHVybiBzaGltLnBhdGgucmVzb2x2ZShjd2QsIHBhdGhUb0V4dGVuZCk7XG59XG5mdW5jdGlvbiBtZXJnZURlZXAoY29uZmlnMSwgY29uZmlnMikge1xuICAgIGNvbnN0IHRhcmdldCA9IHt9O1xuICAgIGZ1bmN0aW9uIGlzT2JqZWN0KG9iaikge1xuICAgICAgICByZXR1cm4gb2JqICYmIHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KG9iaik7XG4gICAgfVxuICAgIE9iamVjdC5hc3NpZ24odGFyZ2V0LCBjb25maWcxKTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhjb25maWcyKSkge1xuICAgICAgICBpZiAoaXNPYmplY3QoY29uZmlnMltrZXldKSAmJiBpc09iamVjdCh0YXJnZXRba2V5XSkpIHtcbiAgICAgICAgICAgIHRhcmdldFtrZXldID0gbWVyZ2VEZWVwKGNvbmZpZzFba2V5XSwgY29uZmlnMltrZXldKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRhcmdldFtrZXldID0gY29uZmlnMltrZXldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0YXJnZXQ7XG59XG5cbmZ1bmN0aW9uIHBhcnNlQ29tbWFuZChjbWQpIHtcbiAgICBjb25zdCBleHRyYVNwYWNlc1N0cmlwcGVkQ29tbWFuZCA9IGNtZC5yZXBsYWNlKC9cXHN7Mix9L2csICcgJyk7XG4gICAgY29uc3Qgc3BsaXRDb21tYW5kID0gZXh0cmFTcGFjZXNTdHJpcHBlZENvbW1hbmQuc3BsaXQoL1xccysoPyFbXltdKl18W148XSo+KS8pO1xuICAgIGNvbnN0IGJyZWdleCA9IC9cXC4qW1xcXVs8Pl0vZztcbiAgICBjb25zdCBmaXJzdENvbW1hbmQgPSBzcGxpdENvbW1hbmQuc2hpZnQoKTtcbiAgICBpZiAoIWZpcnN0Q29tbWFuZClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBjb21tYW5kIGZvdW5kIGluOiAke2NtZH1gKTtcbiAgICBjb25zdCBwYXJzZWRDb21tYW5kID0ge1xuICAgICAgICBjbWQ6IGZpcnN0Q29tbWFuZC5yZXBsYWNlKGJyZWdleCwgJycpLFxuICAgICAgICBkZW1hbmRlZDogW10sXG4gICAgICAgIG9wdGlvbmFsOiBbXSxcbiAgICB9O1xuICAgIHNwbGl0Q29tbWFuZC5mb3JFYWNoKChjbWQsIGkpID0+IHtcbiAgICAgICAgbGV0IHZhcmlhZGljID0gZmFsc2U7XG4gICAgICAgIGNtZCA9IGNtZC5yZXBsYWNlKC9cXHMvZywgJycpO1xuICAgICAgICBpZiAoL1xcLitbXFxdPl0vLnRlc3QoY21kKSAmJiBpID09PSBzcGxpdENvbW1hbmQubGVuZ3RoIC0gMSlcbiAgICAgICAgICAgIHZhcmlhZGljID0gdHJ1ZTtcbiAgICAgICAgaWYgKC9eXFxbLy50ZXN0KGNtZCkpIHtcbiAgICAgICAgICAgIHBhcnNlZENvbW1hbmQub3B0aW9uYWwucHVzaCh7XG4gICAgICAgICAgICAgICAgY21kOiBjbWQucmVwbGFjZShicmVnZXgsICcnKS5zcGxpdCgnfCcpLFxuICAgICAgICAgICAgICAgIHZhcmlhZGljLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBwYXJzZWRDb21tYW5kLmRlbWFuZGVkLnB1c2goe1xuICAgICAgICAgICAgICAgIGNtZDogY21kLnJlcGxhY2UoYnJlZ2V4LCAnJykuc3BsaXQoJ3wnKSxcbiAgICAgICAgICAgICAgICB2YXJpYWRpYyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHBhcnNlZENvbW1hbmQ7XG59XG5cbmNvbnN0IHBvc2l0aW9uTmFtZSA9IFsnZmlyc3QnLCAnc2Vjb25kJywgJ3RoaXJkJywgJ2ZvdXJ0aCcsICdmaWZ0aCcsICdzaXh0aCddO1xuZnVuY3Rpb24gYXJnc2VydChhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgZnVuY3Rpb24gcGFyc2VBcmdzKCkge1xuICAgICAgICByZXR1cm4gdHlwZW9mIGFyZzEgPT09ICdvYmplY3QnXG4gICAgICAgICAgICA/IFt7IGRlbWFuZGVkOiBbXSwgb3B0aW9uYWw6IFtdIH0sIGFyZzEsIGFyZzJdXG4gICAgICAgICAgICA6IFtcbiAgICAgICAgICAgICAgICBwYXJzZUNvbW1hbmQoYGNtZCAke2FyZzF9YCksXG4gICAgICAgICAgICAgICAgYXJnMixcbiAgICAgICAgICAgICAgICBhcmczLFxuICAgICAgICAgICAgXTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgbGV0IHBvc2l0aW9uID0gMDtcbiAgICAgICAgY29uc3QgW3BhcnNlZCwgY2FsbGVyQXJndW1lbnRzLCBfbGVuZ3RoXSA9IHBhcnNlQXJncygpO1xuICAgICAgICBjb25zdCBhcmdzID0gW10uc2xpY2UuY2FsbChjYWxsZXJBcmd1bWVudHMpO1xuICAgICAgICB3aGlsZSAoYXJncy5sZW5ndGggJiYgYXJnc1thcmdzLmxlbmd0aCAtIDFdID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICBhcmdzLnBvcCgpO1xuICAgICAgICBjb25zdCBsZW5ndGggPSBfbGVuZ3RoIHx8IGFyZ3MubGVuZ3RoO1xuICAgICAgICBpZiAobGVuZ3RoIDwgcGFyc2VkLmRlbWFuZGVkLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFlFcnJvcihgTm90IGVub3VnaCBhcmd1bWVudHMgcHJvdmlkZWQuIEV4cGVjdGVkICR7cGFyc2VkLmRlbWFuZGVkLmxlbmd0aH0gYnV0IHJlY2VpdmVkICR7YXJncy5sZW5ndGh9LmApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRvdGFsQ29tbWFuZHMgPSBwYXJzZWQuZGVtYW5kZWQubGVuZ3RoICsgcGFyc2VkLm9wdGlvbmFsLmxlbmd0aDtcbiAgICAgICAgaWYgKGxlbmd0aCA+IHRvdGFsQ29tbWFuZHMpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBZRXJyb3IoYFRvbyBtYW55IGFyZ3VtZW50cyBwcm92aWRlZC4gRXhwZWN0ZWQgbWF4ICR7dG90YWxDb21tYW5kc30gYnV0IHJlY2VpdmVkICR7bGVuZ3RofS5gKTtcbiAgICAgICAgfVxuICAgICAgICBwYXJzZWQuZGVtYW5kZWQuZm9yRWFjaChkZW1hbmRlZCA9PiB7XG4gICAgICAgICAgICBjb25zdCBhcmcgPSBhcmdzLnNoaWZ0KCk7XG4gICAgICAgICAgICBjb25zdCBvYnNlcnZlZFR5cGUgPSBndWVzc1R5cGUoYXJnKTtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoaW5nVHlwZXMgPSBkZW1hbmRlZC5jbWQuZmlsdGVyKHR5cGUgPT4gdHlwZSA9PT0gb2JzZXJ2ZWRUeXBlIHx8IHR5cGUgPT09ICcqJyk7XG4gICAgICAgICAgICBpZiAobWF0Y2hpbmdUeXBlcy5sZW5ndGggPT09IDApXG4gICAgICAgICAgICAgICAgYXJndW1lbnRUeXBlRXJyb3Iob2JzZXJ2ZWRUeXBlLCBkZW1hbmRlZC5jbWQsIHBvc2l0aW9uKTtcbiAgICAgICAgICAgIHBvc2l0aW9uICs9IDE7XG4gICAgICAgIH0pO1xuICAgICAgICBwYXJzZWQub3B0aW9uYWwuZm9yRWFjaChvcHRpb25hbCA9PiB7XG4gICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPT09IDApXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgY29uc3QgYXJnID0gYXJncy5zaGlmdCgpO1xuICAgICAgICAgICAgY29uc3Qgb2JzZXJ2ZWRUeXBlID0gZ3Vlc3NUeXBlKGFyZyk7XG4gICAgICAgICAgICBjb25zdCBtYXRjaGluZ1R5cGVzID0gb3B0aW9uYWwuY21kLmZpbHRlcih0eXBlID0+IHR5cGUgPT09IG9ic2VydmVkVHlwZSB8fCB0eXBlID09PSAnKicpO1xuICAgICAgICAgICAgaWYgKG1hdGNoaW5nVHlwZXMubGVuZ3RoID09PSAwKVxuICAgICAgICAgICAgICAgIGFyZ3VtZW50VHlwZUVycm9yKG9ic2VydmVkVHlwZSwgb3B0aW9uYWwuY21kLCBwb3NpdGlvbik7XG4gICAgICAgICAgICBwb3NpdGlvbiArPSAxO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLndhcm4oZXJyLnN0YWNrKTtcbiAgICB9XG59XG5mdW5jdGlvbiBndWVzc1R5cGUoYXJnKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYXJnKSkge1xuICAgICAgICByZXR1cm4gJ2FycmF5JztcbiAgICB9XG4gICAgZWxzZSBpZiAoYXJnID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiAnbnVsbCc7XG4gICAgfVxuICAgIHJldHVybiB0eXBlb2YgYXJnO1xufVxuZnVuY3Rpb24gYXJndW1lbnRUeXBlRXJyb3Iob2JzZXJ2ZWRUeXBlLCBhbGxvd2VkVHlwZXMsIHBvc2l0aW9uKSB7XG4gICAgdGhyb3cgbmV3IFlFcnJvcihgSW52YWxpZCAke3Bvc2l0aW9uTmFtZVtwb3NpdGlvbl0gfHwgJ21hbnlpdGgnfSBhcmd1bWVudC4gRXhwZWN0ZWQgJHthbGxvd2VkVHlwZXMuam9pbignIG9yICcpfSBidXQgcmVjZWl2ZWQgJHtvYnNlcnZlZFR5cGV9LmApO1xufVxuXG5mdW5jdGlvbiBpc1Byb21pc2UobWF5YmVQcm9taXNlKSB7XG4gICAgcmV0dXJuICghIW1heWJlUHJvbWlzZSAmJlxuICAgICAgICAhIW1heWJlUHJvbWlzZS50aGVuICYmXG4gICAgICAgIHR5cGVvZiBtYXliZVByb21pc2UudGhlbiA9PT0gJ2Z1bmN0aW9uJyk7XG59XG5cbmZ1bmN0aW9uIGFzc2VydE5vdFN0cmljdEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIHNoaW0sIG1lc3NhZ2UpIHtcbiAgICBzaGltLmFzc2VydC5ub3RTdHJpY3RFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlKTtcbn1cbmZ1bmN0aW9uIGFzc2VydFNpbmdsZUtleShhY3R1YWwsIHNoaW0pIHtcbiAgICBzaGltLmFzc2VydC5zdHJpY3RFcXVhbCh0eXBlb2YgYWN0dWFsLCAnc3RyaW5nJyk7XG59XG5mdW5jdGlvbiBvYmplY3RLZXlzKG9iamVjdCkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmplY3QpO1xufVxuXG5mdW5jdGlvbiBvYmpGaWx0ZXIob3JpZ2luYWwgPSB7fSwgZmlsdGVyID0gKCkgPT4gdHJ1ZSkge1xuICAgIGNvbnN0IG9iaiA9IHt9O1xuICAgIG9iamVjdEtleXMob3JpZ2luYWwpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgaWYgKGZpbHRlcihrZXksIG9yaWdpbmFsW2tleV0pKSB7XG4gICAgICAgICAgICBvYmpba2V5XSA9IG9yaWdpbmFsW2tleV07XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gb2JqO1xufVxuXG5mdW5jdGlvbiBnbG9iYWxNaWRkbGV3YXJlRmFjdG9yeShnbG9iYWxNaWRkbGV3YXJlLCBjb250ZXh0KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChjYWxsYmFjaywgYXBwbHlCZWZvcmVWYWxpZGF0aW9uID0gZmFsc2UpIHtcbiAgICAgICAgYXJnc2VydCgnPGFycmF5fGZ1bmN0aW9uPiBbYm9vbGVhbl0nLCBbY2FsbGJhY2ssIGFwcGx5QmVmb3JlVmFsaWRhdGlvbl0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjYWxsYmFjaykpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2FsbGJhY2subGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrW2ldICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKCdtaWRkbGV3YXJlIG11c3QgYmUgYSBmdW5jdGlvbicpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFja1tpXS5hcHBseUJlZm9yZVZhbGlkYXRpb24gPSBhcHBseUJlZm9yZVZhbGlkYXRpb247XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShnbG9iYWxNaWRkbGV3YXJlLCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWxsYmFjay5hcHBseUJlZm9yZVZhbGlkYXRpb24gPSBhcHBseUJlZm9yZVZhbGlkYXRpb247XG4gICAgICAgICAgICBnbG9iYWxNaWRkbGV3YXJlLnB1c2goY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb250ZXh0O1xuICAgIH07XG59XG5mdW5jdGlvbiBjb21tYW5kTWlkZGxld2FyZUZhY3RvcnkoY29tbWFuZE1pZGRsZXdhcmUpIHtcbiAgICBpZiAoIWNvbW1hbmRNaWRkbGV3YXJlKVxuICAgICAgICByZXR1cm4gW107XG4gICAgcmV0dXJuIGNvbW1hbmRNaWRkbGV3YXJlLm1hcChtaWRkbGV3YXJlID0+IHtcbiAgICAgICAgbWlkZGxld2FyZS5hcHBseUJlZm9yZVZhbGlkYXRpb24gPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIG1pZGRsZXdhcmU7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBhcHBseU1pZGRsZXdhcmUoYXJndiwgeWFyZ3MsIG1pZGRsZXdhcmVzLCBiZWZvcmVWYWxpZGF0aW9uKSB7XG4gICAgY29uc3QgYmVmb3JlVmFsaWRhdGlvbkVycm9yID0gbmV3IEVycm9yKCdtaWRkbGV3YXJlIGNhbm5vdCByZXR1cm4gYSBwcm9taXNlIHdoZW4gYXBwbHlCZWZvcmVWYWxpZGF0aW9uIGlzIHRydWUnKTtcbiAgICByZXR1cm4gbWlkZGxld2FyZXMucmVkdWNlKChhY2MsIG1pZGRsZXdhcmUpID0+IHtcbiAgICAgICAgaWYgKG1pZGRsZXdhcmUuYXBwbHlCZWZvcmVWYWxpZGF0aW9uICE9PSBiZWZvcmVWYWxpZGF0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1Byb21pc2UoYWNjKSkge1xuICAgICAgICAgICAgcmV0dXJuIGFjY1xuICAgICAgICAgICAgICAgIC50aGVuKGluaXRpYWxPYmogPT4gUHJvbWlzZS5hbGwoW1xuICAgICAgICAgICAgICAgIGluaXRpYWxPYmosXG4gICAgICAgICAgICAgICAgbWlkZGxld2FyZShpbml0aWFsT2JqLCB5YXJncyksXG4gICAgICAgICAgICBdKSlcbiAgICAgICAgICAgICAgICAudGhlbigoW2luaXRpYWxPYmosIG1pZGRsZXdhcmVPYmpdKSA9PiBPYmplY3QuYXNzaWduKGluaXRpYWxPYmosIG1pZGRsZXdhcmVPYmopKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IG1pZGRsZXdhcmUoYWNjLCB5YXJncyk7XG4gICAgICAgICAgICBpZiAoYmVmb3JlVmFsaWRhdGlvbiAmJiBpc1Byb21pc2UocmVzdWx0KSlcbiAgICAgICAgICAgICAgICB0aHJvdyBiZWZvcmVWYWxpZGF0aW9uRXJyb3I7XG4gICAgICAgICAgICByZXR1cm4gaXNQcm9taXNlKHJlc3VsdClcbiAgICAgICAgICAgICAgICA/IHJlc3VsdC50aGVuKG1pZGRsZXdhcmVPYmogPT4gT2JqZWN0LmFzc2lnbihhY2MsIG1pZGRsZXdhcmVPYmopKVxuICAgICAgICAgICAgICAgIDogT2JqZWN0LmFzc2lnbihhY2MsIHJlc3VsdCk7XG4gICAgICAgIH1cbiAgICB9LCBhcmd2KTtcbn1cblxuZnVuY3Rpb24gZ2V0UHJvY2Vzc0FyZ3ZCaW5JbmRleCgpIHtcbiAgICBpZiAoaXNCdW5kbGVkRWxlY3Ryb25BcHAoKSlcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgcmV0dXJuIDE7XG59XG5mdW5jdGlvbiBpc0J1bmRsZWRFbGVjdHJvbkFwcCgpIHtcbiAgICByZXR1cm4gaXNFbGVjdHJvbkFwcCgpICYmICFwcm9jZXNzLmRlZmF1bHRBcHA7XG59XG5mdW5jdGlvbiBpc0VsZWN0cm9uQXBwKCkge1xuICAgIHJldHVybiAhIXByb2Nlc3MudmVyc2lvbnMuZWxlY3Ryb247XG59XG5mdW5jdGlvbiBoaWRlQmluKGFyZ3YpIHtcbiAgICByZXR1cm4gYXJndi5zbGljZShnZXRQcm9jZXNzQXJndkJpbkluZGV4KCkgKyAxKTtcbn1cbmZ1bmN0aW9uIGdldFByb2Nlc3NBcmd2QmluKCkge1xuICAgIHJldHVybiBwcm9jZXNzLmFyZ3ZbZ2V0UHJvY2Vzc0FyZ3ZCaW5JbmRleCgpXTtcbn1cblxudmFyIHByb2Nlc3NBcmd2ID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICBfX3Byb3RvX186IG51bGwsXG4gIGhpZGVCaW46IGhpZGVCaW4sXG4gIGdldFByb2Nlc3NBcmd2QmluOiBnZXRQcm9jZXNzQXJndkJpblxufSk7XG5cbmZ1bmN0aW9uIHdoaWNoTW9kdWxlKGV4cG9ydGVkKSB7XG4gICAgaWYgKHR5cGVvZiByZXF1aXJlID09PSAndW5kZWZpbmVkJylcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgZm9yIChsZXQgaSA9IDAsIGZpbGVzID0gT2JqZWN0LmtleXMocmVxdWlyZS5jYWNoZSksIG1vZDsgaSA8IGZpbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIG1vZCA9IHJlcXVpcmUuY2FjaGVbZmlsZXNbaV1dO1xuICAgICAgICBpZiAobW9kLmV4cG9ydHMgPT09IGV4cG9ydGVkKVxuICAgICAgICAgICAgcmV0dXJuIG1vZDtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59XG5cbmNvbnN0IERFRkFVTFRfTUFSS0VSID0gLyheXFwqKXwoXlxcJDApLztcbmZ1bmN0aW9uIGNvbW1hbmQoeWFyZ3MsIHVzYWdlLCB2YWxpZGF0aW9uLCBnbG9iYWxNaWRkbGV3YXJlID0gW10sIHNoaW0pIHtcbiAgICBjb25zdCBzZWxmID0ge307XG4gICAgbGV0IGhhbmRsZXJzID0ge307XG4gICAgbGV0IGFsaWFzTWFwID0ge307XG4gICAgbGV0IGRlZmF1bHRDb21tYW5kO1xuICAgIHNlbGYuYWRkSGFuZGxlciA9IGZ1bmN0aW9uIGFkZEhhbmRsZXIoY21kLCBkZXNjcmlwdGlvbiwgYnVpbGRlciwgaGFuZGxlciwgY29tbWFuZE1pZGRsZXdhcmUsIGRlcHJlY2F0ZWQpIHtcbiAgICAgICAgbGV0IGFsaWFzZXMgPSBbXTtcbiAgICAgICAgY29uc3QgbWlkZGxld2FyZXMgPSBjb21tYW5kTWlkZGxld2FyZUZhY3RvcnkoY29tbWFuZE1pZGRsZXdhcmUpO1xuICAgICAgICBoYW5kbGVyID0gaGFuZGxlciB8fCAoKCkgPT4geyB9KTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY21kKSkge1xuICAgICAgICAgICAgaWYgKGlzQ29tbWFuZEFuZEFsaWFzZXMoY21kKSkge1xuICAgICAgICAgICAgICAgIFtjbWQsIC4uLmFsaWFzZXNdID0gY21kO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBjb21tYW5kIG9mIGNtZCkge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmFkZEhhbmRsZXIoY29tbWFuZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzQ29tbWFuZEhhbmRsZXJEZWZpbml0aW9uKGNtZCkpIHtcbiAgICAgICAgICAgIGxldCBjb21tYW5kID0gQXJyYXkuaXNBcnJheShjbWQuY29tbWFuZCkgfHwgdHlwZW9mIGNtZC5jb21tYW5kID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgICAgID8gY21kLmNvbW1hbmRcbiAgICAgICAgICAgICAgICA6IG1vZHVsZU5hbWUoY21kKTtcbiAgICAgICAgICAgIGlmIChjbWQuYWxpYXNlcylcbiAgICAgICAgICAgICAgICBjb21tYW5kID0gW10uY29uY2F0KGNvbW1hbmQpLmNvbmNhdChjbWQuYWxpYXNlcyk7XG4gICAgICAgICAgICBzZWxmLmFkZEhhbmRsZXIoY29tbWFuZCwgZXh0cmFjdERlc2MoY21kKSwgY21kLmJ1aWxkZXIsIGNtZC5oYW5kbGVyLCBjbWQubWlkZGxld2FyZXMsIGNtZC5kZXByZWNhdGVkKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc0NvbW1hbmRCdWlsZGVyRGVmaW5pdGlvbihidWlsZGVyKSkge1xuICAgICAgICAgICAgc2VsZi5hZGRIYW5kbGVyKFtjbWRdLmNvbmNhdChhbGlhc2VzKSwgZGVzY3JpcHRpb24sIGJ1aWxkZXIuYnVpbGRlciwgYnVpbGRlci5oYW5kbGVyLCBidWlsZGVyLm1pZGRsZXdhcmVzLCBidWlsZGVyLmRlcHJlY2F0ZWQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgY21kID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkQ29tbWFuZCA9IHBhcnNlQ29tbWFuZChjbWQpO1xuICAgICAgICAgICAgYWxpYXNlcyA9IGFsaWFzZXMubWFwKGFsaWFzID0+IHBhcnNlQ29tbWFuZChhbGlhcykuY21kKTtcbiAgICAgICAgICAgIGxldCBpc0RlZmF1bHQgPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZEFsaWFzZXMgPSBbcGFyc2VkQ29tbWFuZC5jbWRdLmNvbmNhdChhbGlhc2VzKS5maWx0ZXIoYyA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKERFRkFVTFRfTUFSS0VSLnRlc3QoYykpIHtcbiAgICAgICAgICAgICAgICAgICAgaXNEZWZhdWx0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKHBhcnNlZEFsaWFzZXMubGVuZ3RoID09PSAwICYmIGlzRGVmYXVsdClcbiAgICAgICAgICAgICAgICBwYXJzZWRBbGlhc2VzLnB1c2goJyQwJyk7XG4gICAgICAgICAgICBpZiAoaXNEZWZhdWx0KSB7XG4gICAgICAgICAgICAgICAgcGFyc2VkQ29tbWFuZC5jbWQgPSBwYXJzZWRBbGlhc2VzWzBdO1xuICAgICAgICAgICAgICAgIGFsaWFzZXMgPSBwYXJzZWRBbGlhc2VzLnNsaWNlKDEpO1xuICAgICAgICAgICAgICAgIGNtZCA9IGNtZC5yZXBsYWNlKERFRkFVTFRfTUFSS0VSLCBwYXJzZWRDb21tYW5kLmNtZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhbGlhc2VzLmZvckVhY2goYWxpYXMgPT4ge1xuICAgICAgICAgICAgICAgIGFsaWFzTWFwW2FsaWFzXSA9IHBhcnNlZENvbW1hbmQuY21kO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoZGVzY3JpcHRpb24gIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgdXNhZ2UuY29tbWFuZChjbWQsIGRlc2NyaXB0aW9uLCBpc0RlZmF1bHQsIGFsaWFzZXMsIGRlcHJlY2F0ZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaGFuZGxlcnNbcGFyc2VkQ29tbWFuZC5jbWRdID0ge1xuICAgICAgICAgICAgICAgIG9yaWdpbmFsOiBjbWQsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb24sXG4gICAgICAgICAgICAgICAgaGFuZGxlcixcbiAgICAgICAgICAgICAgICBidWlsZGVyOiBidWlsZGVyIHx8IHt9LFxuICAgICAgICAgICAgICAgIG1pZGRsZXdhcmVzLFxuICAgICAgICAgICAgICAgIGRlcHJlY2F0ZWQsXG4gICAgICAgICAgICAgICAgZGVtYW5kZWQ6IHBhcnNlZENvbW1hbmQuZGVtYW5kZWQsXG4gICAgICAgICAgICAgICAgb3B0aW9uYWw6IHBhcnNlZENvbW1hbmQub3B0aW9uYWwsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKGlzRGVmYXVsdClcbiAgICAgICAgICAgICAgICBkZWZhdWx0Q29tbWFuZCA9IGhhbmRsZXJzW3BhcnNlZENvbW1hbmQuY21kXTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgc2VsZi5hZGREaXJlY3RvcnkgPSBmdW5jdGlvbiBhZGREaXJlY3RvcnkoZGlyLCBjb250ZXh0LCByZXEsIGNhbGxlckZpbGUsIG9wdHMpIHtcbiAgICAgICAgb3B0cyA9IG9wdHMgfHwge307XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0cy5yZWN1cnNlICE9PSAnYm9vbGVhbicpXG4gICAgICAgICAgICBvcHRzLnJlY3Vyc2UgPSBmYWxzZTtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG9wdHMuZXh0ZW5zaW9ucykpXG4gICAgICAgICAgICBvcHRzLmV4dGVuc2lvbnMgPSBbJ2pzJ107XG4gICAgICAgIGNvbnN0IHBhcmVudFZpc2l0ID0gdHlwZW9mIG9wdHMudmlzaXQgPT09ICdmdW5jdGlvbicgPyBvcHRzLnZpc2l0IDogKG8pID0+IG87XG4gICAgICAgIG9wdHMudmlzaXQgPSBmdW5jdGlvbiB2aXNpdChvYmosIGpvaW5lZCwgZmlsZW5hbWUpIHtcbiAgICAgICAgICAgIGNvbnN0IHZpc2l0ZWQgPSBwYXJlbnRWaXNpdChvYmosIGpvaW5lZCwgZmlsZW5hbWUpO1xuICAgICAgICAgICAgaWYgKHZpc2l0ZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAofmNvbnRleHQuZmlsZXMuaW5kZXhPZihqb2luZWQpKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmlzaXRlZDtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGVzLnB1c2goam9pbmVkKTtcbiAgICAgICAgICAgICAgICBzZWxmLmFkZEhhbmRsZXIodmlzaXRlZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdmlzaXRlZDtcbiAgICAgICAgfTtcbiAgICAgICAgc2hpbS5yZXF1aXJlRGlyZWN0b3J5KHsgcmVxdWlyZTogcmVxLCBmaWxlbmFtZTogY2FsbGVyRmlsZSB9LCBkaXIsIG9wdHMpO1xuICAgIH07XG4gICAgZnVuY3Rpb24gbW9kdWxlTmFtZShvYmopIHtcbiAgICAgICAgY29uc3QgbW9kID0gd2hpY2hNb2R1bGUob2JqKTtcbiAgICAgICAgaWYgKCFtb2QpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIGNvbW1hbmQgbmFtZSBnaXZlbiBmb3IgbW9kdWxlOiAke3NoaW0uaW5zcGVjdChvYmopfWApO1xuICAgICAgICByZXR1cm4gY29tbWFuZEZyb21GaWxlbmFtZShtb2QuZmlsZW5hbWUpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb21tYW5kRnJvbUZpbGVuYW1lKGZpbGVuYW1lKSB7XG4gICAgICAgIHJldHVybiBzaGltLnBhdGguYmFzZW5hbWUoZmlsZW5hbWUsIHNoaW0ucGF0aC5leHRuYW1lKGZpbGVuYW1lKSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGV4dHJhY3REZXNjKHsgZGVzY3JpYmUsIGRlc2NyaXB0aW9uLCBkZXNjLCB9KSB7XG4gICAgICAgIGZvciAoY29uc3QgdGVzdCBvZiBbZGVzY3JpYmUsIGRlc2NyaXB0aW9uLCBkZXNjXSkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB0ZXN0ID09PSAnc3RyaW5nJyB8fCB0ZXN0ID09PSBmYWxzZSlcbiAgICAgICAgICAgICAgICByZXR1cm4gdGVzdDtcbiAgICAgICAgICAgIGFzc2VydE5vdFN0cmljdEVxdWFsKHRlc3QsIHRydWUsIHNoaW0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgc2VsZi5nZXRDb21tYW5kcyA9ICgpID0+IE9iamVjdC5rZXlzKGhhbmRsZXJzKS5jb25jYXQoT2JqZWN0LmtleXMoYWxpYXNNYXApKTtcbiAgICBzZWxmLmdldENvbW1hbmRIYW5kbGVycyA9ICgpID0+IGhhbmRsZXJzO1xuICAgIHNlbGYuaGFzRGVmYXVsdENvbW1hbmQgPSAoKSA9PiAhIWRlZmF1bHRDb21tYW5kO1xuICAgIHNlbGYucnVuQ29tbWFuZCA9IGZ1bmN0aW9uIHJ1bkNvbW1hbmQoY29tbWFuZCwgeWFyZ3MsIHBhcnNlZCwgY29tbWFuZEluZGV4KSB7XG4gICAgICAgIGxldCBhbGlhc2VzID0gcGFyc2VkLmFsaWFzZXM7XG4gICAgICAgIGNvbnN0IGNvbW1hbmRIYW5kbGVyID0gaGFuZGxlcnNbY29tbWFuZF0gfHwgaGFuZGxlcnNbYWxpYXNNYXBbY29tbWFuZF1dIHx8IGRlZmF1bHRDb21tYW5kO1xuICAgICAgICBjb25zdCBjdXJyZW50Q29udGV4dCA9IHlhcmdzLmdldENvbnRleHQoKTtcbiAgICAgICAgbGV0IG51bUZpbGVzID0gY3VycmVudENvbnRleHQuZmlsZXMubGVuZ3RoO1xuICAgICAgICBjb25zdCBwYXJlbnRDb21tYW5kcyA9IGN1cnJlbnRDb250ZXh0LmNvbW1hbmRzLnNsaWNlKCk7XG4gICAgICAgIGxldCBpbm5lckFyZ3YgPSBwYXJzZWQuYXJndjtcbiAgICAgICAgbGV0IHBvc2l0aW9uYWxNYXAgPSB7fTtcbiAgICAgICAgaWYgKGNvbW1hbmQpIHtcbiAgICAgICAgICAgIGN1cnJlbnRDb250ZXh0LmNvbW1hbmRzLnB1c2goY29tbWFuZCk7XG4gICAgICAgICAgICBjdXJyZW50Q29udGV4dC5mdWxsQ29tbWFuZHMucHVzaChjb21tYW5kSGFuZGxlci5vcmlnaW5hbCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYnVpbGRlciA9IGNvbW1hbmRIYW5kbGVyLmJ1aWxkZXI7XG4gICAgICAgIGlmIChpc0NvbW1hbmRCdWlsZGVyQ2FsbGJhY2soYnVpbGRlcikpIHtcbiAgICAgICAgICAgIGNvbnN0IGJ1aWxkZXJPdXRwdXQgPSBidWlsZGVyKHlhcmdzLnJlc2V0KHBhcnNlZC5hbGlhc2VzKSk7XG4gICAgICAgICAgICBjb25zdCBpbm5lcllhcmdzID0gaXNZYXJnc0luc3RhbmNlKGJ1aWxkZXJPdXRwdXQpID8gYnVpbGRlck91dHB1dCA6IHlhcmdzO1xuICAgICAgICAgICAgaWYgKHNob3VsZFVwZGF0ZVVzYWdlKGlubmVyWWFyZ3MpKSB7XG4gICAgICAgICAgICAgICAgaW5uZXJZYXJnc1xuICAgICAgICAgICAgICAgICAgICAuZ2V0VXNhZ2VJbnN0YW5jZSgpXG4gICAgICAgICAgICAgICAgICAgIC51c2FnZSh1c2FnZUZyb21QYXJlbnRDb21tYW5kc0NvbW1hbmRIYW5kbGVyKHBhcmVudENvbW1hbmRzLCBjb21tYW5kSGFuZGxlciksIGNvbW1hbmRIYW5kbGVyLmRlc2NyaXB0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlubmVyQXJndiA9IGlubmVyWWFyZ3MuX3BhcnNlQXJncyhudWxsLCBudWxsLCB0cnVlLCBjb21tYW5kSW5kZXgpO1xuICAgICAgICAgICAgYWxpYXNlcyA9IGlubmVyWWFyZ3MucGFyc2VkLmFsaWFzZXM7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNDb21tYW5kQnVpbGRlck9wdGlvbkRlZmluaXRpb25zKGJ1aWxkZXIpKSB7XG4gICAgICAgICAgICBjb25zdCBpbm5lcllhcmdzID0geWFyZ3MucmVzZXQocGFyc2VkLmFsaWFzZXMpO1xuICAgICAgICAgICAgaWYgKHNob3VsZFVwZGF0ZVVzYWdlKGlubmVyWWFyZ3MpKSB7XG4gICAgICAgICAgICAgICAgaW5uZXJZYXJnc1xuICAgICAgICAgICAgICAgICAgICAuZ2V0VXNhZ2VJbnN0YW5jZSgpXG4gICAgICAgICAgICAgICAgICAgIC51c2FnZSh1c2FnZUZyb21QYXJlbnRDb21tYW5kc0NvbW1hbmRIYW5kbGVyKHBhcmVudENvbW1hbmRzLCBjb21tYW5kSGFuZGxlciksIGNvbW1hbmRIYW5kbGVyLmRlc2NyaXB0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGNvbW1hbmRIYW5kbGVyLmJ1aWxkZXIpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgICAgICBpbm5lcllhcmdzLm9wdGlvbihrZXksIGJ1aWxkZXJba2V5XSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlubmVyQXJndiA9IGlubmVyWWFyZ3MuX3BhcnNlQXJncyhudWxsLCBudWxsLCB0cnVlLCBjb21tYW5kSW5kZXgpO1xuICAgICAgICAgICAgYWxpYXNlcyA9IGlubmVyWWFyZ3MucGFyc2VkLmFsaWFzZXM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF5YXJncy5faGFzT3V0cHV0KCkpIHtcbiAgICAgICAgICAgIHBvc2l0aW9uYWxNYXAgPSBwb3B1bGF0ZVBvc2l0aW9uYWxzKGNvbW1hbmRIYW5kbGVyLCBpbm5lckFyZ3YsIGN1cnJlbnRDb250ZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtaWRkbGV3YXJlcyA9IGdsb2JhbE1pZGRsZXdhcmVcbiAgICAgICAgICAgIC5zbGljZSgwKVxuICAgICAgICAgICAgLmNvbmNhdChjb21tYW5kSGFuZGxlci5taWRkbGV3YXJlcyk7XG4gICAgICAgIGFwcGx5TWlkZGxld2FyZShpbm5lckFyZ3YsIHlhcmdzLCBtaWRkbGV3YXJlcywgdHJ1ZSk7XG4gICAgICAgIGlmICgheWFyZ3MuX2hhc091dHB1dCgpKSB7XG4gICAgICAgICAgICB5YXJncy5fcnVuVmFsaWRhdGlvbihpbm5lckFyZ3YsIGFsaWFzZXMsIHBvc2l0aW9uYWxNYXAsIHlhcmdzLnBhcnNlZC5lcnJvciwgIWNvbW1hbmQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb21tYW5kSGFuZGxlci5oYW5kbGVyICYmICF5YXJncy5faGFzT3V0cHV0KCkpIHtcbiAgICAgICAgICAgIHlhcmdzLl9zZXRIYXNPdXRwdXQoKTtcbiAgICAgICAgICAgIGNvbnN0IHBvcHVsYXRlRG91YmxlRGFzaCA9ICEheWFyZ3MuZ2V0T3B0aW9ucygpLmNvbmZpZ3VyYXRpb25bJ3BvcHVsYXRlLS0nXTtcbiAgICAgICAgICAgIHlhcmdzLl9wb3N0UHJvY2Vzcyhpbm5lckFyZ3YsIHBvcHVsYXRlRG91YmxlRGFzaCk7XG4gICAgICAgICAgICBpbm5lckFyZ3YgPSBhcHBseU1pZGRsZXdhcmUoaW5uZXJBcmd2LCB5YXJncywgbWlkZGxld2FyZXMsIGZhbHNlKTtcbiAgICAgICAgICAgIGxldCBoYW5kbGVyUmVzdWx0O1xuICAgICAgICAgICAgaWYgKGlzUHJvbWlzZShpbm5lckFyZ3YpKSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlclJlc3VsdCA9IGlubmVyQXJndi50aGVuKGFyZ3YgPT4gY29tbWFuZEhhbmRsZXIuaGFuZGxlcihhcmd2KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBoYW5kbGVyUmVzdWx0ID0gY29tbWFuZEhhbmRsZXIuaGFuZGxlcihpbm5lckFyZ3YpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgaGFuZGxlckZpbmlzaENvbW1hbmQgPSB5YXJncy5nZXRIYW5kbGVyRmluaXNoQ29tbWFuZCgpO1xuICAgICAgICAgICAgaWYgKGlzUHJvbWlzZShoYW5kbGVyUmVzdWx0KSkge1xuICAgICAgICAgICAgICAgIHlhcmdzLmdldFVzYWdlSW5zdGFuY2UoKS5jYWNoZUhlbHBNZXNzYWdlKCk7XG4gICAgICAgICAgICAgICAgaGFuZGxlclJlc3VsdFxuICAgICAgICAgICAgICAgICAgICAudGhlbih2YWx1ZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChoYW5kbGVyRmluaXNoQ29tbWFuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlckZpbmlzaENvbW1hbmQodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHlhcmdzLmdldFVzYWdlSW5zdGFuY2UoKS5mYWlsKG51bGwsIGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHlhcmdzLmdldFVzYWdlSW5zdGFuY2UoKS5jbGVhckNhY2hlZEhlbHBNZXNzYWdlKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoaGFuZGxlckZpbmlzaENvbW1hbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlckZpbmlzaENvbW1hbmQoaGFuZGxlclJlc3VsdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChjb21tYW5kKSB7XG4gICAgICAgICAgICBjdXJyZW50Q29udGV4dC5jb21tYW5kcy5wb3AoKTtcbiAgICAgICAgICAgIGN1cnJlbnRDb250ZXh0LmZ1bGxDb21tYW5kcy5wb3AoKTtcbiAgICAgICAgfVxuICAgICAgICBudW1GaWxlcyA9IGN1cnJlbnRDb250ZXh0LmZpbGVzLmxlbmd0aCAtIG51bUZpbGVzO1xuICAgICAgICBpZiAobnVtRmlsZXMgPiAwKVxuICAgICAgICAgICAgY3VycmVudENvbnRleHQuZmlsZXMuc3BsaWNlKG51bUZpbGVzICogLTEsIG51bUZpbGVzKTtcbiAgICAgICAgcmV0dXJuIGlubmVyQXJndjtcbiAgICB9O1xuICAgIGZ1bmN0aW9uIHNob3VsZFVwZGF0ZVVzYWdlKHlhcmdzKSB7XG4gICAgICAgIHJldHVybiAoIXlhcmdzLmdldFVzYWdlSW5zdGFuY2UoKS5nZXRVc2FnZURpc2FibGVkKCkgJiZcbiAgICAgICAgICAgIHlhcmdzLmdldFVzYWdlSW5zdGFuY2UoKS5nZXRVc2FnZSgpLmxlbmd0aCA9PT0gMCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHVzYWdlRnJvbVBhcmVudENvbW1hbmRzQ29tbWFuZEhhbmRsZXIocGFyZW50Q29tbWFuZHMsIGNvbW1hbmRIYW5kbGVyKSB7XG4gICAgICAgIGNvbnN0IGMgPSBERUZBVUxUX01BUktFUi50ZXN0KGNvbW1hbmRIYW5kbGVyLm9yaWdpbmFsKVxuICAgICAgICAgICAgPyBjb21tYW5kSGFuZGxlci5vcmlnaW5hbC5yZXBsYWNlKERFRkFVTFRfTUFSS0VSLCAnJykudHJpbSgpXG4gICAgICAgICAgICA6IGNvbW1hbmRIYW5kbGVyLm9yaWdpbmFsO1xuICAgICAgICBjb25zdCBwYyA9IHBhcmVudENvbW1hbmRzLmZpbHRlcihjID0+IHtcbiAgICAgICAgICAgIHJldHVybiAhREVGQVVMVF9NQVJLRVIudGVzdChjKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHBjLnB1c2goYyk7XG4gICAgICAgIHJldHVybiBgJDAgJHtwYy5qb2luKCcgJyl9YDtcbiAgICB9XG4gICAgc2VsZi5ydW5EZWZhdWx0QnVpbGRlck9uID0gZnVuY3Rpb24gKHlhcmdzKSB7XG4gICAgICAgIGFzc2VydE5vdFN0cmljdEVxdWFsKGRlZmF1bHRDb21tYW5kLCB1bmRlZmluZWQsIHNoaW0pO1xuICAgICAgICBpZiAoc2hvdWxkVXBkYXRlVXNhZ2UoeWFyZ3MpKSB7XG4gICAgICAgICAgICBjb25zdCBjb21tYW5kU3RyaW5nID0gREVGQVVMVF9NQVJLRVIudGVzdChkZWZhdWx0Q29tbWFuZC5vcmlnaW5hbClcbiAgICAgICAgICAgICAgICA/IGRlZmF1bHRDb21tYW5kLm9yaWdpbmFsXG4gICAgICAgICAgICAgICAgOiBkZWZhdWx0Q29tbWFuZC5vcmlnaW5hbC5yZXBsYWNlKC9eW15bXFxdPD5dKi8sICckMCAnKTtcbiAgICAgICAgICAgIHlhcmdzLmdldFVzYWdlSW5zdGFuY2UoKS51c2FnZShjb21tYW5kU3RyaW5nLCBkZWZhdWx0Q29tbWFuZC5kZXNjcmlwdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYnVpbGRlciA9IGRlZmF1bHRDb21tYW5kLmJ1aWxkZXI7XG4gICAgICAgIGlmIChpc0NvbW1hbmRCdWlsZGVyQ2FsbGJhY2soYnVpbGRlcikpIHtcbiAgICAgICAgICAgIGJ1aWxkZXIoeWFyZ3MpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCFpc0NvbW1hbmRCdWlsZGVyRGVmaW5pdGlvbihidWlsZGVyKSkge1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoYnVpbGRlcikuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgIHlhcmdzLm9wdGlvbihrZXksIGJ1aWxkZXJba2V5XSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgZnVuY3Rpb24gcG9wdWxhdGVQb3NpdGlvbmFscyhjb21tYW5kSGFuZGxlciwgYXJndiwgY29udGV4dCkge1xuICAgICAgICBhcmd2Ll8gPSBhcmd2Ll8uc2xpY2UoY29udGV4dC5jb21tYW5kcy5sZW5ndGgpO1xuICAgICAgICBjb25zdCBkZW1hbmRlZCA9IGNvbW1hbmRIYW5kbGVyLmRlbWFuZGVkLnNsaWNlKDApO1xuICAgICAgICBjb25zdCBvcHRpb25hbCA9IGNvbW1hbmRIYW5kbGVyLm9wdGlvbmFsLnNsaWNlKDApO1xuICAgICAgICBjb25zdCBwb3NpdGlvbmFsTWFwID0ge307XG4gICAgICAgIHZhbGlkYXRpb24ucG9zaXRpb25hbENvdW50KGRlbWFuZGVkLmxlbmd0aCwgYXJndi5fLmxlbmd0aCk7XG4gICAgICAgIHdoaWxlIChkZW1hbmRlZC5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGRlbWFuZCA9IGRlbWFuZGVkLnNoaWZ0KCk7XG4gICAgICAgICAgICBwb3B1bGF0ZVBvc2l0aW9uYWwoZGVtYW5kLCBhcmd2LCBwb3NpdGlvbmFsTWFwKTtcbiAgICAgICAgfVxuICAgICAgICB3aGlsZSAob3B0aW9uYWwubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBtYXliZSA9IG9wdGlvbmFsLnNoaWZ0KCk7XG4gICAgICAgICAgICBwb3B1bGF0ZVBvc2l0aW9uYWwobWF5YmUsIGFyZ3YsIHBvc2l0aW9uYWxNYXApO1xuICAgICAgICB9XG4gICAgICAgIGFyZ3YuXyA9IGNvbnRleHQuY29tbWFuZHMuY29uY2F0KGFyZ3YuXy5tYXAoYSA9PiAnJyArIGEpKTtcbiAgICAgICAgcG9zdFByb2Nlc3NQb3NpdGlvbmFscyhhcmd2LCBwb3NpdGlvbmFsTWFwLCBzZWxmLmNtZFRvUGFyc2VPcHRpb25zKGNvbW1hbmRIYW5kbGVyLm9yaWdpbmFsKSk7XG4gICAgICAgIHJldHVybiBwb3NpdGlvbmFsTWFwO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwb3B1bGF0ZVBvc2l0aW9uYWwocG9zaXRpb25hbCwgYXJndiwgcG9zaXRpb25hbE1hcCkge1xuICAgICAgICBjb25zdCBjbWQgPSBwb3NpdGlvbmFsLmNtZFswXTtcbiAgICAgICAgaWYgKHBvc2l0aW9uYWwudmFyaWFkaWMpIHtcbiAgICAgICAgICAgIHBvc2l0aW9uYWxNYXBbY21kXSA9IGFyZ3YuXy5zcGxpY2UoMCkubWFwKFN0cmluZyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoYXJndi5fLmxlbmd0aClcbiAgICAgICAgICAgICAgICBwb3NpdGlvbmFsTWFwW2NtZF0gPSBbU3RyaW5nKGFyZ3YuXy5zaGlmdCgpKV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gcG9zdFByb2Nlc3NQb3NpdGlvbmFscyhhcmd2LCBwb3NpdGlvbmFsTWFwLCBwYXJzZU9wdGlvbnMpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIHlhcmdzLmdldE9wdGlvbnMoKSk7XG4gICAgICAgIG9wdGlvbnMuZGVmYXVsdCA9IE9iamVjdC5hc3NpZ24ocGFyc2VPcHRpb25zLmRlZmF1bHQsIG9wdGlvbnMuZGVmYXVsdCk7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHBhcnNlT3B0aW9ucy5hbGlhcykpIHtcbiAgICAgICAgICAgIG9wdGlvbnMuYWxpYXNba2V5XSA9IChvcHRpb25zLmFsaWFzW2tleV0gfHwgW10pLmNvbmNhdChwYXJzZU9wdGlvbnMuYWxpYXNba2V5XSk7XG4gICAgICAgIH1cbiAgICAgICAgb3B0aW9ucy5hcnJheSA9IG9wdGlvbnMuYXJyYXkuY29uY2F0KHBhcnNlT3B0aW9ucy5hcnJheSk7XG4gICAgICAgIG9wdGlvbnMuY29uZmlnID0ge307XG4gICAgICAgIGNvbnN0IHVucGFyc2VkID0gW107XG4gICAgICAgIE9iamVjdC5rZXlzKHBvc2l0aW9uYWxNYXApLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIHBvc2l0aW9uYWxNYXBba2V5XS5tYXAodmFsdWUgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmNvbmZpZ3VyYXRpb25bJ3Vua25vd24tb3B0aW9ucy1hcy1hcmdzJ10pXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMua2V5W2tleV0gPSB0cnVlO1xuICAgICAgICAgICAgICAgIHVucGFyc2VkLnB1c2goYC0tJHtrZXl9YCk7XG4gICAgICAgICAgICAgICAgdW5wYXJzZWQucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghdW5wYXJzZWQubGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBjb25maWcgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLmNvbmZpZ3VyYXRpb24sIHtcbiAgICAgICAgICAgICdwb3B1bGF0ZS0tJzogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IHNoaW0uUGFyc2VyLmRldGFpbGVkKHVucGFyc2VkLCBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLCB7XG4gICAgICAgICAgICBjb25maWd1cmF0aW9uOiBjb25maWcsXG4gICAgICAgIH0pKTtcbiAgICAgICAgaWYgKHBhcnNlZC5lcnJvcikge1xuICAgICAgICAgICAgeWFyZ3MuZ2V0VXNhZ2VJbnN0YW5jZSgpLmZhaWwocGFyc2VkLmVycm9yLm1lc3NhZ2UsIHBhcnNlZC5lcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBwb3NpdGlvbmFsS2V5cyA9IE9iamVjdC5rZXlzKHBvc2l0aW9uYWxNYXApO1xuICAgICAgICAgICAgT2JqZWN0LmtleXMocG9zaXRpb25hbE1hcCkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uYWxLZXlzLnB1c2goLi4ucGFyc2VkLmFsaWFzZXNba2V5XSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHBhcnNlZC5hcmd2KS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHBvc2l0aW9uYWxLZXlzLmluZGV4T2Yoa2V5KSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFwb3NpdGlvbmFsTWFwW2tleV0pXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbmFsTWFwW2tleV0gPSBwYXJzZWQuYXJndltrZXldO1xuICAgICAgICAgICAgICAgICAgICBhcmd2W2tleV0gPSBwYXJzZWQuYXJndltrZXldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHNlbGYuY21kVG9QYXJzZU9wdGlvbnMgPSBmdW5jdGlvbiAoY21kU3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHBhcnNlT3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGFycmF5OiBbXSxcbiAgICAgICAgICAgIGRlZmF1bHQ6IHt9LFxuICAgICAgICAgICAgYWxpYXM6IHt9LFxuICAgICAgICAgICAgZGVtYW5kOiB7fSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gcGFyc2VDb21tYW5kKGNtZFN0cmluZyk7XG4gICAgICAgIHBhcnNlZC5kZW1hbmRlZC5mb3JFYWNoKGQgPT4ge1xuICAgICAgICAgICAgY29uc3QgW2NtZCwgLi4uYWxpYXNlc10gPSBkLmNtZDtcbiAgICAgICAgICAgIGlmIChkLnZhcmlhZGljKSB7XG4gICAgICAgICAgICAgICAgcGFyc2VPcHRpb25zLmFycmF5LnB1c2goY21kKTtcbiAgICAgICAgICAgICAgICBwYXJzZU9wdGlvbnMuZGVmYXVsdFtjbWRdID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwYXJzZU9wdGlvbnMuYWxpYXNbY21kXSA9IGFsaWFzZXM7XG4gICAgICAgICAgICBwYXJzZU9wdGlvbnMuZGVtYW5kW2NtZF0gPSB0cnVlO1xuICAgICAgICB9KTtcbiAgICAgICAgcGFyc2VkLm9wdGlvbmFsLmZvckVhY2gobyA9PiB7XG4gICAgICAgICAgICBjb25zdCBbY21kLCAuLi5hbGlhc2VzXSA9IG8uY21kO1xuICAgICAgICAgICAgaWYgKG8udmFyaWFkaWMpIHtcbiAgICAgICAgICAgICAgICBwYXJzZU9wdGlvbnMuYXJyYXkucHVzaChjbWQpO1xuICAgICAgICAgICAgICAgIHBhcnNlT3B0aW9ucy5kZWZhdWx0W2NtZF0gPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhcnNlT3B0aW9ucy5hbGlhc1tjbWRdID0gYWxpYXNlcztcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBwYXJzZU9wdGlvbnM7XG4gICAgfTtcbiAgICBzZWxmLnJlc2V0ID0gKCkgPT4ge1xuICAgICAgICBoYW5kbGVycyA9IHt9O1xuICAgICAgICBhbGlhc01hcCA9IHt9O1xuICAgICAgICBkZWZhdWx0Q29tbWFuZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBjb25zdCBmcm96ZW5zID0gW107XG4gICAgc2VsZi5mcmVlemUgPSAoKSA9PiB7XG4gICAgICAgIGZyb3plbnMucHVzaCh7XG4gICAgICAgICAgICBoYW5kbGVycyxcbiAgICAgICAgICAgIGFsaWFzTWFwLFxuICAgICAgICAgICAgZGVmYXVsdENvbW1hbmQsXG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgc2VsZi51bmZyZWV6ZSA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgZnJvemVuID0gZnJvemVucy5wb3AoKTtcbiAgICAgICAgYXNzZXJ0Tm90U3RyaWN0RXF1YWwoZnJvemVuLCB1bmRlZmluZWQsIHNoaW0pO1xuICAgICAgICAoeyBoYW5kbGVycywgYWxpYXNNYXAsIGRlZmF1bHRDb21tYW5kIH0gPSBmcm96ZW4pO1xuICAgIH07XG4gICAgcmV0dXJuIHNlbGY7XG59XG5mdW5jdGlvbiBpc0NvbW1hbmRCdWlsZGVyRGVmaW5pdGlvbihidWlsZGVyKSB7XG4gICAgcmV0dXJuICh0eXBlb2YgYnVpbGRlciA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgISFidWlsZGVyLmJ1aWxkZXIgJiZcbiAgICAgICAgdHlwZW9mIGJ1aWxkZXIuaGFuZGxlciA9PT0gJ2Z1bmN0aW9uJyk7XG59XG5mdW5jdGlvbiBpc0NvbW1hbmRBbmRBbGlhc2VzKGNtZCkge1xuICAgIGlmIChjbWQuZXZlcnkoYyA9PiB0eXBlb2YgYyA9PT0gJ3N0cmluZycpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGlzQ29tbWFuZEJ1aWxkZXJDYWxsYmFjayhidWlsZGVyKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBidWlsZGVyID09PSAnZnVuY3Rpb24nO1xufVxuZnVuY3Rpb24gaXNDb21tYW5kQnVpbGRlck9wdGlvbkRlZmluaXRpb25zKGJ1aWxkZXIpIHtcbiAgICByZXR1cm4gdHlwZW9mIGJ1aWxkZXIgPT09ICdvYmplY3QnO1xufVxuZnVuY3Rpb24gaXNDb21tYW5kSGFuZGxlckRlZmluaXRpb24oY21kKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBjbWQgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KGNtZCk7XG59XG5cbmZ1bmN0aW9uIHNldEJsb2NraW5nKGJsb2NraW5nKSB7XG4gICAgaWYgKHR5cGVvZiBwcm9jZXNzID09PSAndW5kZWZpbmVkJylcbiAgICAgICAgcmV0dXJuO1xuICAgIFtwcm9jZXNzLnN0ZG91dCwgcHJvY2Vzcy5zdGRlcnJdLmZvckVhY2goX3N0cmVhbSA9PiB7XG4gICAgICAgIGNvbnN0IHN0cmVhbSA9IF9zdHJlYW07XG4gICAgICAgIGlmIChzdHJlYW0uX2hhbmRsZSAmJlxuICAgICAgICAgICAgc3RyZWFtLmlzVFRZICYmXG4gICAgICAgICAgICB0eXBlb2Ygc3RyZWFtLl9oYW5kbGUuc2V0QmxvY2tpbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHN0cmVhbS5faGFuZGxlLnNldEJsb2NraW5nKGJsb2NraW5nKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuXG5mdW5jdGlvbiB1c2FnZSh5YXJncywgeTE4biwgc2hpbSkge1xuICAgIGNvbnN0IF9fID0geTE4bi5fXztcbiAgICBjb25zdCBzZWxmID0ge307XG4gICAgY29uc3QgZmFpbHMgPSBbXTtcbiAgICBzZWxmLmZhaWxGbiA9IGZ1bmN0aW9uIGZhaWxGbihmKSB7XG4gICAgICAgIGZhaWxzLnB1c2goZik7XG4gICAgfTtcbiAgICBsZXQgZmFpbE1lc3NhZ2UgPSBudWxsO1xuICAgIGxldCBzaG93SGVscE9uRmFpbCA9IHRydWU7XG4gICAgc2VsZi5zaG93SGVscE9uRmFpbCA9IGZ1bmN0aW9uIHNob3dIZWxwT25GYWlsRm4oYXJnMSA9IHRydWUsIGFyZzIpIHtcbiAgICAgICAgZnVuY3Rpb24gcGFyc2VGdW5jdGlvbkFyZ3MoKSB7XG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIGFyZzEgPT09ICdzdHJpbmcnID8gW3RydWUsIGFyZzFdIDogW2FyZzEsIGFyZzJdO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IFtlbmFibGVkLCBtZXNzYWdlXSA9IHBhcnNlRnVuY3Rpb25BcmdzKCk7XG4gICAgICAgIGZhaWxNZXNzYWdlID0gbWVzc2FnZTtcbiAgICAgICAgc2hvd0hlbHBPbkZhaWwgPSBlbmFibGVkO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIGxldCBmYWlsdXJlT3V0cHV0ID0gZmFsc2U7XG4gICAgc2VsZi5mYWlsID0gZnVuY3Rpb24gZmFpbChtc2csIGVycikge1xuICAgICAgICBjb25zdCBsb2dnZXIgPSB5YXJncy5fZ2V0TG9nZ2VySW5zdGFuY2UoKTtcbiAgICAgICAgaWYgKGZhaWxzLmxlbmd0aCkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IGZhaWxzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgICAgICAgICAgZmFpbHNbaV0obXNnLCBlcnIsIHNlbGYpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKHlhcmdzLmdldEV4aXRQcm9jZXNzKCkpXG4gICAgICAgICAgICAgICAgc2V0QmxvY2tpbmcodHJ1ZSk7XG4gICAgICAgICAgICBpZiAoIWZhaWx1cmVPdXRwdXQpIHtcbiAgICAgICAgICAgICAgICBmYWlsdXJlT3V0cHV0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBpZiAoc2hvd0hlbHBPbkZhaWwpIHtcbiAgICAgICAgICAgICAgICAgICAgeWFyZ3Muc2hvd0hlbHAoJ2Vycm9yJyk7XG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAobXNnIHx8IGVycilcbiAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKG1zZyB8fCBlcnIpO1xuICAgICAgICAgICAgICAgIGlmIChmYWlsTWVzc2FnZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAobXNnIHx8IGVycilcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcignJyk7XG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihmYWlsTWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZXJyID0gZXJyIHx8IG5ldyBZRXJyb3IobXNnKTtcbiAgICAgICAgICAgIGlmICh5YXJncy5nZXRFeGl0UHJvY2VzcygpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHlhcmdzLmV4aXQoMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh5YXJncy5faGFzUGFyc2VDYWxsYmFjaygpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHlhcmdzLmV4aXQoMSwgZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgbGV0IHVzYWdlcyA9IFtdO1xuICAgIGxldCB1c2FnZURpc2FibGVkID0gZmFsc2U7XG4gICAgc2VsZi51c2FnZSA9IChtc2csIGRlc2NyaXB0aW9uKSA9PiB7XG4gICAgICAgIGlmIChtc2cgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHVzYWdlRGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgdXNhZ2VzID0gW107XG4gICAgICAgICAgICByZXR1cm4gc2VsZjtcbiAgICAgICAgfVxuICAgICAgICB1c2FnZURpc2FibGVkID0gZmFsc2U7XG4gICAgICAgIHVzYWdlcy5wdXNoKFttc2csIGRlc2NyaXB0aW9uIHx8ICcnXSk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5nZXRVc2FnZSA9ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHVzYWdlcztcbiAgICB9O1xuICAgIHNlbGYuZ2V0VXNhZ2VEaXNhYmxlZCA9ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHVzYWdlRGlzYWJsZWQ7XG4gICAgfTtcbiAgICBzZWxmLmdldFBvc2l0aW9uYWxHcm91cE5hbWUgPSAoKSA9PiB7XG4gICAgICAgIHJldHVybiBfXygnUG9zaXRpb25hbHM6Jyk7XG4gICAgfTtcbiAgICBsZXQgZXhhbXBsZXMgPSBbXTtcbiAgICBzZWxmLmV4YW1wbGUgPSAoY21kLCBkZXNjcmlwdGlvbikgPT4ge1xuICAgICAgICBleGFtcGxlcy5wdXNoKFtjbWQsIGRlc2NyaXB0aW9uIHx8ICcnXSk7XG4gICAgfTtcbiAgICBsZXQgY29tbWFuZHMgPSBbXTtcbiAgICBzZWxmLmNvbW1hbmQgPSBmdW5jdGlvbiBjb21tYW5kKGNtZCwgZGVzY3JpcHRpb24sIGlzRGVmYXVsdCwgYWxpYXNlcywgZGVwcmVjYXRlZCA9IGZhbHNlKSB7XG4gICAgICAgIGlmIChpc0RlZmF1bHQpIHtcbiAgICAgICAgICAgIGNvbW1hbmRzID0gY29tbWFuZHMubWFwKGNtZEFycmF5ID0+IHtcbiAgICAgICAgICAgICAgICBjbWRBcnJheVsyXSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJldHVybiBjbWRBcnJheTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNvbW1hbmRzLnB1c2goW2NtZCwgZGVzY3JpcHRpb24gfHwgJycsIGlzRGVmYXVsdCwgYWxpYXNlcywgZGVwcmVjYXRlZF0pO1xuICAgIH07XG4gICAgc2VsZi5nZXRDb21tYW5kcyA9ICgpID0+IGNvbW1hbmRzO1xuICAgIGxldCBkZXNjcmlwdGlvbnMgPSB7fTtcbiAgICBzZWxmLmRlc2NyaWJlID0gZnVuY3Rpb24gZGVzY3JpYmUoa2V5T3JLZXlzLCBkZXNjKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGtleU9yS2V5cykpIHtcbiAgICAgICAgICAgIGtleU9yS2V5cy5mb3JFYWNoKGsgPT4ge1xuICAgICAgICAgICAgICAgIHNlbGYuZGVzY3JpYmUoaywgZGVzYyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2Yga2V5T3JLZXlzID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoa2V5T3JLZXlzKS5mb3JFYWNoKGsgPT4ge1xuICAgICAgICAgICAgICAgIHNlbGYuZGVzY3JpYmUoaywga2V5T3JLZXlzW2tdKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZGVzY3JpcHRpb25zW2tleU9yS2V5c10gPSBkZXNjO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBzZWxmLmdldERlc2NyaXB0aW9ucyA9ICgpID0+IGRlc2NyaXB0aW9ucztcbiAgICBsZXQgZXBpbG9ncyA9IFtdO1xuICAgIHNlbGYuZXBpbG9nID0gbXNnID0+IHtcbiAgICAgICAgZXBpbG9ncy5wdXNoKG1zZyk7XG4gICAgfTtcbiAgICBsZXQgd3JhcFNldCA9IGZhbHNlO1xuICAgIGxldCB3cmFwO1xuICAgIHNlbGYud3JhcCA9IGNvbHMgPT4ge1xuICAgICAgICB3cmFwU2V0ID0gdHJ1ZTtcbiAgICAgICAgd3JhcCA9IGNvbHM7XG4gICAgfTtcbiAgICBmdW5jdGlvbiBnZXRXcmFwKCkge1xuICAgICAgICBpZiAoIXdyYXBTZXQpIHtcbiAgICAgICAgICAgIHdyYXAgPSB3aW5kb3dXaWR0aCgpO1xuICAgICAgICAgICAgd3JhcFNldCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHdyYXA7XG4gICAgfVxuICAgIGNvbnN0IGRlZmVyWTE4bkxvb2t1cFByZWZpeCA9ICdfX3lhcmdzU3RyaW5nX186JztcbiAgICBzZWxmLmRlZmVyWTE4bkxvb2t1cCA9IHN0ciA9PiBkZWZlclkxOG5Mb29rdXBQcmVmaXggKyBzdHI7XG4gICAgc2VsZi5oZWxwID0gZnVuY3Rpb24gaGVscCgpIHtcbiAgICAgICAgaWYgKGNhY2hlZEhlbHBNZXNzYWdlKVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZEhlbHBNZXNzYWdlO1xuICAgICAgICBub3JtYWxpemVBbGlhc2VzKCk7XG4gICAgICAgIGNvbnN0IGJhc2UkMCA9IHlhcmdzLmN1c3RvbVNjcmlwdE5hbWVcbiAgICAgICAgICAgID8geWFyZ3MuJDBcbiAgICAgICAgICAgIDogc2hpbS5wYXRoLmJhc2VuYW1lKHlhcmdzLiQwKTtcbiAgICAgICAgY29uc3QgZGVtYW5kZWRPcHRpb25zID0geWFyZ3MuZ2V0RGVtYW5kZWRPcHRpb25zKCk7XG4gICAgICAgIGNvbnN0IGRlbWFuZGVkQ29tbWFuZHMgPSB5YXJncy5nZXREZW1hbmRlZENvbW1hbmRzKCk7XG4gICAgICAgIGNvbnN0IGRlcHJlY2F0ZWRPcHRpb25zID0geWFyZ3MuZ2V0RGVwcmVjYXRlZE9wdGlvbnMoKTtcbiAgICAgICAgY29uc3QgZ3JvdXBzID0geWFyZ3MuZ2V0R3JvdXBzKCk7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB5YXJncy5nZXRPcHRpb25zKCk7XG4gICAgICAgIGxldCBrZXlzID0gW107XG4gICAgICAgIGtleXMgPSBrZXlzLmNvbmNhdChPYmplY3Qua2V5cyhkZXNjcmlwdGlvbnMpKTtcbiAgICAgICAga2V5cyA9IGtleXMuY29uY2F0KE9iamVjdC5rZXlzKGRlbWFuZGVkT3B0aW9ucykpO1xuICAgICAgICBrZXlzID0ga2V5cy5jb25jYXQoT2JqZWN0LmtleXMoZGVtYW5kZWRDb21tYW5kcykpO1xuICAgICAgICBrZXlzID0ga2V5cy5jb25jYXQoT2JqZWN0LmtleXMob3B0aW9ucy5kZWZhdWx0KSk7XG4gICAgICAgIGtleXMgPSBrZXlzLmZpbHRlcihmaWx0ZXJIaWRkZW5PcHRpb25zKTtcbiAgICAgICAga2V5cyA9IE9iamVjdC5rZXlzKGtleXMucmVkdWNlKChhY2MsIGtleSkgPT4ge1xuICAgICAgICAgICAgaWYgKGtleSAhPT0gJ18nKVxuICAgICAgICAgICAgICAgIGFjY1trZXldID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH0sIHt9KSk7XG4gICAgICAgIGNvbnN0IHRoZVdyYXAgPSBnZXRXcmFwKCk7XG4gICAgICAgIGNvbnN0IHVpID0gc2hpbS5jbGl1aSh7XG4gICAgICAgICAgICB3aWR0aDogdGhlV3JhcCxcbiAgICAgICAgICAgIHdyYXA6ICEhdGhlV3JhcCxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghdXNhZ2VEaXNhYmxlZCkge1xuICAgICAgICAgICAgaWYgKHVzYWdlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB1c2FnZXMuZm9yRWFjaCh1c2FnZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHVpLmRpdihgJHt1c2FnZVswXS5yZXBsYWNlKC9cXCQwL2csIGJhc2UkMCl9YCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1c2FnZVsxXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdWkuZGl2KHsgdGV4dDogYCR7dXNhZ2VbMV19YCwgcGFkZGluZzogWzEsIDAsIDAsIDBdIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdWkuZGl2KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjb21tYW5kcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBsZXQgdSA9IG51bGw7XG4gICAgICAgICAgICAgICAgaWYgKGRlbWFuZGVkQ29tbWFuZHMuXykge1xuICAgICAgICAgICAgICAgICAgICB1ID0gYCR7YmFzZSQwfSA8JHtfXygnY29tbWFuZCcpfT5cXG5gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdSA9IGAke2Jhc2UkMH0gWyR7X18oJ2NvbW1hbmQnKX1dXFxuYDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdWkuZGl2KGAke3V9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbW1hbmRzLmxlbmd0aCkge1xuICAgICAgICAgICAgdWkuZGl2KF9fKCdDb21tYW5kczonKSk7XG4gICAgICAgICAgICBjb25zdCBjb250ZXh0ID0geWFyZ3MuZ2V0Q29udGV4dCgpO1xuICAgICAgICAgICAgY29uc3QgcGFyZW50Q29tbWFuZHMgPSBjb250ZXh0LmNvbW1hbmRzLmxlbmd0aFxuICAgICAgICAgICAgICAgID8gYCR7Y29udGV4dC5jb21tYW5kcy5qb2luKCcgJyl9IGBcbiAgICAgICAgICAgICAgICA6ICcnO1xuICAgICAgICAgICAgaWYgKHlhcmdzLmdldFBhcnNlckNvbmZpZ3VyYXRpb24oKVsnc29ydC1jb21tYW5kcyddID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgY29tbWFuZHMgPSBjb21tYW5kcy5zb3J0KChhLCBiKSA9PiBhWzBdLmxvY2FsZUNvbXBhcmUoYlswXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29tbWFuZHMuZm9yRWFjaChjb21tYW5kID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb21tYW5kU3RyaW5nID0gYCR7YmFzZSQwfSAke3BhcmVudENvbW1hbmRzfSR7Y29tbWFuZFswXS5yZXBsYWNlKC9eXFwkMCA/LywgJycpfWA7XG4gICAgICAgICAgICAgICAgdWkuc3Bhbih7XG4gICAgICAgICAgICAgICAgICAgIHRleHQ6IGNvbW1hbmRTdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IFswLCAyLCAwLCAyXSxcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IG1heFdpZHRoKGNvbW1hbmRzLCB0aGVXcmFwLCBgJHtiYXNlJDB9JHtwYXJlbnRDb21tYW5kc31gKSArIDQsXG4gICAgICAgICAgICAgICAgfSwgeyB0ZXh0OiBjb21tYW5kWzFdIH0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGhpbnRzID0gW107XG4gICAgICAgICAgICAgICAgaWYgKGNvbW1hbmRbMl0pXG4gICAgICAgICAgICAgICAgICAgIGhpbnRzLnB1c2goYFske19fKCdkZWZhdWx0Jyl9XWApO1xuICAgICAgICAgICAgICAgIGlmIChjb21tYW5kWzNdICYmIGNvbW1hbmRbM10ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGhpbnRzLnB1c2goYFske19fKCdhbGlhc2VzOicpfSAke2NvbW1hbmRbM10uam9pbignLCAnKX1dYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChjb21tYW5kWzRdKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY29tbWFuZFs0XSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhpbnRzLnB1c2goYFske19fKCdkZXByZWNhdGVkOiAlcycsIGNvbW1hbmRbNF0pfV1gKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhpbnRzLnB1c2goYFske19fKCdkZXByZWNhdGVkJyl9XWApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChoaW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdWkuZGl2KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IGhpbnRzLmpvaW4oJyAnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IFswLCAwLCAwLCAyXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsaWduOiAncmlnaHQnLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHVpLmRpdigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdWkuZGl2KCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYWxpYXNLZXlzID0gKE9iamVjdC5rZXlzKG9wdGlvbnMuYWxpYXMpIHx8IFtdKS5jb25jYXQoT2JqZWN0LmtleXMoeWFyZ3MucGFyc2VkLm5ld0FsaWFzZXMpIHx8IFtdKTtcbiAgICAgICAga2V5cyA9IGtleXMuZmlsdGVyKGtleSA9PiAheWFyZ3MucGFyc2VkLm5ld0FsaWFzZXNba2V5XSAmJlxuICAgICAgICAgICAgYWxpYXNLZXlzLmV2ZXJ5KGFsaWFzID0+IChvcHRpb25zLmFsaWFzW2FsaWFzXSB8fCBbXSkuaW5kZXhPZihrZXkpID09PSAtMSkpO1xuICAgICAgICBjb25zdCBkZWZhdWx0R3JvdXAgPSBfXygnT3B0aW9uczonKTtcbiAgICAgICAgaWYgKCFncm91cHNbZGVmYXVsdEdyb3VwXSlcbiAgICAgICAgICAgIGdyb3Vwc1tkZWZhdWx0R3JvdXBdID0gW107XG4gICAgICAgIGFkZFVuZ3JvdXBlZEtleXMoa2V5cywgb3B0aW9ucy5hbGlhcywgZ3JvdXBzLCBkZWZhdWx0R3JvdXApO1xuICAgICAgICBjb25zdCBpc0xvbmdTd2l0Y2ggPSAoc3cpID0+IC9eLS0vLnRlc3QoZ2V0VGV4dChzdykpO1xuICAgICAgICBjb25zdCBkaXNwbGF5ZWRHcm91cHMgPSBPYmplY3Qua2V5cyhncm91cHMpXG4gICAgICAgICAgICAuZmlsdGVyKGdyb3VwTmFtZSA9PiBncm91cHNbZ3JvdXBOYW1lXS5sZW5ndGggPiAwKVxuICAgICAgICAgICAgLm1hcChncm91cE5hbWUgPT4ge1xuICAgICAgICAgICAgY29uc3Qgbm9ybWFsaXplZEtleXMgPSBncm91cHNbZ3JvdXBOYW1lXVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoZmlsdGVySGlkZGVuT3B0aW9ucylcbiAgICAgICAgICAgICAgICAubWFwKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKH5hbGlhc0tleXMuaW5kZXhPZihrZXkpKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ga2V5O1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBhbGlhc0tleTsgKGFsaWFzS2V5ID0gYWxpYXNLZXlzW2ldKSAhPT0gdW5kZWZpbmVkOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKH4ob3B0aW9ucy5hbGlhc1thbGlhc0tleV0gfHwgW10pLmluZGV4T2Yoa2V5KSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhbGlhc0tleTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGtleTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHsgZ3JvdXBOYW1lLCBub3JtYWxpemVkS2V5cyB9O1xuICAgICAgICB9KVxuICAgICAgICAgICAgLmZpbHRlcigoeyBub3JtYWxpemVkS2V5cyB9KSA9PiBub3JtYWxpemVkS2V5cy5sZW5ndGggPiAwKVxuICAgICAgICAgICAgLm1hcCgoeyBncm91cE5hbWUsIG5vcm1hbGl6ZWRLZXlzIH0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHN3aXRjaGVzID0gbm9ybWFsaXplZEtleXMucmVkdWNlKChhY2MsIGtleSkgPT4ge1xuICAgICAgICAgICAgICAgIGFjY1trZXldID0gW2tleV1cbiAgICAgICAgICAgICAgICAgICAgLmNvbmNhdChvcHRpb25zLmFsaWFzW2tleV0gfHwgW10pXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoc3cgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZ3JvdXBOYW1lID09PSBzZWxmLmdldFBvc2l0aW9uYWxHcm91cE5hbWUoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdztcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCgvXlswLTldJC8udGVzdChzdylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IH5vcHRpb25zLmJvb2xlYW4uaW5kZXhPZihrZXkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJy0nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJy0tJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogc3cubGVuZ3RoID4gMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICctLSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnLScpICsgc3cpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLnNvcnQoKHN3MSwgc3cyKSA9PiBpc0xvbmdTd2l0Y2goc3cxKSA9PT0gaXNMb25nU3dpdGNoKHN3MilcbiAgICAgICAgICAgICAgICAgICAgPyAwXG4gICAgICAgICAgICAgICAgICAgIDogaXNMb25nU3dpdGNoKHN3MSlcbiAgICAgICAgICAgICAgICAgICAgICAgID8gMVxuICAgICAgICAgICAgICAgICAgICAgICAgOiAtMSlcbiAgICAgICAgICAgICAgICAgICAgLmpvaW4oJywgJyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICAgIH0sIHt9KTtcbiAgICAgICAgICAgIHJldHVybiB7IGdyb3VwTmFtZSwgbm9ybWFsaXplZEtleXMsIHN3aXRjaGVzIH07XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBzaG9ydFN3aXRjaGVzVXNlZCA9IGRpc3BsYXllZEdyb3Vwc1xuICAgICAgICAgICAgLmZpbHRlcigoeyBncm91cE5hbWUgfSkgPT4gZ3JvdXBOYW1lICE9PSBzZWxmLmdldFBvc2l0aW9uYWxHcm91cE5hbWUoKSlcbiAgICAgICAgICAgIC5zb21lKCh7IG5vcm1hbGl6ZWRLZXlzLCBzd2l0Y2hlcyB9KSA9PiAhbm9ybWFsaXplZEtleXMuZXZlcnkoa2V5ID0+IGlzTG9uZ1N3aXRjaChzd2l0Y2hlc1trZXldKSkpO1xuICAgICAgICBpZiAoc2hvcnRTd2l0Y2hlc1VzZWQpIHtcbiAgICAgICAgICAgIGRpc3BsYXllZEdyb3Vwc1xuICAgICAgICAgICAgICAgIC5maWx0ZXIoKHsgZ3JvdXBOYW1lIH0pID0+IGdyb3VwTmFtZSAhPT0gc2VsZi5nZXRQb3NpdGlvbmFsR3JvdXBOYW1lKCkpXG4gICAgICAgICAgICAgICAgLmZvckVhY2goKHsgbm9ybWFsaXplZEtleXMsIHN3aXRjaGVzIH0pID0+IHtcbiAgICAgICAgICAgICAgICBub3JtYWxpemVkS2V5cy5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0xvbmdTd2l0Y2goc3dpdGNoZXNba2V5XSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaGVzW2tleV0gPSBhZGRJbmRlbnRhdGlvbihzd2l0Y2hlc1trZXldLCAnLXgsICcubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZGlzcGxheWVkR3JvdXBzLmZvckVhY2goKHsgZ3JvdXBOYW1lLCBub3JtYWxpemVkS2V5cywgc3dpdGNoZXMgfSkgPT4ge1xuICAgICAgICAgICAgdWkuZGl2KGdyb3VwTmFtZSk7XG4gICAgICAgICAgICBub3JtYWxpemVkS2V5cy5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qga3N3aXRjaCA9IHN3aXRjaGVzW2tleV07XG4gICAgICAgICAgICAgICAgbGV0IGRlc2MgPSBkZXNjcmlwdGlvbnNba2V5XSB8fCAnJztcbiAgICAgICAgICAgICAgICBsZXQgdHlwZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgaWYgKH5kZXNjLmxhc3RJbmRleE9mKGRlZmVyWTE4bkxvb2t1cFByZWZpeCkpXG4gICAgICAgICAgICAgICAgICAgIGRlc2MgPSBfXyhkZXNjLnN1YnN0cmluZyhkZWZlclkxOG5Mb29rdXBQcmVmaXgubGVuZ3RoKSk7XG4gICAgICAgICAgICAgICAgaWYgKH5vcHRpb25zLmJvb2xlYW4uaW5kZXhPZihrZXkpKVxuICAgICAgICAgICAgICAgICAgICB0eXBlID0gYFske19fKCdib29sZWFuJyl9XWA7XG4gICAgICAgICAgICAgICAgaWYgKH5vcHRpb25zLmNvdW50LmluZGV4T2Yoa2V5KSlcbiAgICAgICAgICAgICAgICAgICAgdHlwZSA9IGBbJHtfXygnY291bnQnKX1dYDtcbiAgICAgICAgICAgICAgICBpZiAofm9wdGlvbnMuc3RyaW5nLmluZGV4T2Yoa2V5KSlcbiAgICAgICAgICAgICAgICAgICAgdHlwZSA9IGBbJHtfXygnc3RyaW5nJyl9XWA7XG4gICAgICAgICAgICAgICAgaWYgKH5vcHRpb25zLm5vcm1hbGl6ZS5pbmRleE9mKGtleSkpXG4gICAgICAgICAgICAgICAgICAgIHR5cGUgPSBgWyR7X18oJ3N0cmluZycpfV1gO1xuICAgICAgICAgICAgICAgIGlmICh+b3B0aW9ucy5hcnJheS5pbmRleE9mKGtleSkpXG4gICAgICAgICAgICAgICAgICAgIHR5cGUgPSBgWyR7X18oJ2FycmF5Jyl9XWA7XG4gICAgICAgICAgICAgICAgaWYgKH5vcHRpb25zLm51bWJlci5pbmRleE9mKGtleSkpXG4gICAgICAgICAgICAgICAgICAgIHR5cGUgPSBgWyR7X18oJ251bWJlcicpfV1gO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRlcHJlY2F0ZWRFeHRyYSA9IChkZXByZWNhdGVkKSA9PiB0eXBlb2YgZGVwcmVjYXRlZCA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgICAgICAgICAgPyBgWyR7X18oJ2RlcHJlY2F0ZWQ6ICVzJywgZGVwcmVjYXRlZCl9XWBcbiAgICAgICAgICAgICAgICAgICAgOiBgWyR7X18oJ2RlcHJlY2F0ZWQnKX1dYDtcbiAgICAgICAgICAgICAgICBjb25zdCBleHRyYSA9IFtcbiAgICAgICAgICAgICAgICAgICAga2V5IGluIGRlcHJlY2F0ZWRPcHRpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGRlcHJlY2F0ZWRFeHRyYShkZXByZWNhdGVkT3B0aW9uc1trZXldKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgICAgICAgICBrZXkgaW4gZGVtYW5kZWRPcHRpb25zID8gYFske19fKCdyZXF1aXJlZCcpfV1gIDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5jaG9pY2VzICYmIG9wdGlvbnMuY2hvaWNlc1trZXldXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGBbJHtfXygnY2hvaWNlczonKX0gJHtzZWxmLnN0cmluZ2lmaWVkVmFsdWVzKG9wdGlvbnMuY2hvaWNlc1trZXldKX1dYFxuICAgICAgICAgICAgICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0U3RyaW5nKG9wdGlvbnMuZGVmYXVsdFtrZXldLCBvcHRpb25zLmRlZmF1bHREZXNjcmlwdGlvbltrZXldKSxcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgICAgICAgICAgICAgLmpvaW4oJyAnKTtcbiAgICAgICAgICAgICAgICB1aS5zcGFuKHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dDogZ2V0VGV4dChrc3dpdGNoKSxcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogWzAsIDIsIDAsIDIgKyBnZXRJbmRlbnRhdGlvbihrc3dpdGNoKV0sXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiBtYXhXaWR0aChzd2l0Y2hlcywgdGhlV3JhcCkgKyA0LFxuICAgICAgICAgICAgICAgIH0sIGRlc2MpO1xuICAgICAgICAgICAgICAgIGlmIChleHRyYSlcbiAgICAgICAgICAgICAgICAgICAgdWkuZGl2KHsgdGV4dDogZXh0cmEsIHBhZGRpbmc6IFswLCAwLCAwLCAyXSwgYWxpZ246ICdyaWdodCcgfSk7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB1aS5kaXYoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdWkuZGl2KCk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoZXhhbXBsZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICB1aS5kaXYoX18oJ0V4YW1wbGVzOicpKTtcbiAgICAgICAgICAgIGV4YW1wbGVzLmZvckVhY2goZXhhbXBsZSA9PiB7XG4gICAgICAgICAgICAgICAgZXhhbXBsZVswXSA9IGV4YW1wbGVbMF0ucmVwbGFjZSgvXFwkMC9nLCBiYXNlJDApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBleGFtcGxlcy5mb3JFYWNoKGV4YW1wbGUgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChleGFtcGxlWzFdID09PSAnJykge1xuICAgICAgICAgICAgICAgICAgICB1aS5kaXYoe1xuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogZXhhbXBsZVswXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IFswLCAyLCAwLCAyXSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB1aS5kaXYoe1xuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogZXhhbXBsZVswXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IFswLCAyLCAwLCAyXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBtYXhXaWR0aChleGFtcGxlcywgdGhlV3JhcCkgKyA0LFxuICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBleGFtcGxlWzFdLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHVpLmRpdigpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlcGlsb2dzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGUgPSBlcGlsb2dzXG4gICAgICAgICAgICAgICAgLm1hcChlcGlsb2cgPT4gZXBpbG9nLnJlcGxhY2UoL1xcJDAvZywgYmFzZSQwKSlcbiAgICAgICAgICAgICAgICAuam9pbignXFxuJyk7XG4gICAgICAgICAgICB1aS5kaXYoYCR7ZX1cXG5gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdWkudG9TdHJpbmcoKS5yZXBsYWNlKC9cXHMqJC8sICcnKTtcbiAgICB9O1xuICAgIGZ1bmN0aW9uIG1heFdpZHRoKHRhYmxlLCB0aGVXcmFwLCBtb2RpZmllcikge1xuICAgICAgICBsZXQgd2lkdGggPSAwO1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodGFibGUpKSB7XG4gICAgICAgICAgICB0YWJsZSA9IE9iamVjdC52YWx1ZXModGFibGUpLm1hcCh2ID0+IFt2XSk7XG4gICAgICAgIH1cbiAgICAgICAgdGFibGUuZm9yRWFjaCh2ID0+IHtcbiAgICAgICAgICAgIHdpZHRoID0gTWF0aC5tYXgoc2hpbS5zdHJpbmdXaWR0aChtb2RpZmllciA/IGAke21vZGlmaWVyfSAke2dldFRleHQodlswXSl9YCA6IGdldFRleHQodlswXSkpICsgZ2V0SW5kZW50YXRpb24odlswXSksIHdpZHRoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICh0aGVXcmFwKVxuICAgICAgICAgICAgd2lkdGggPSBNYXRoLm1pbih3aWR0aCwgcGFyc2VJbnQoKHRoZVdyYXAgKiAwLjUpLnRvU3RyaW5nKCksIDEwKSk7XG4gICAgICAgIHJldHVybiB3aWR0aDtcbiAgICB9XG4gICAgZnVuY3Rpb24gbm9ybWFsaXplQWxpYXNlcygpIHtcbiAgICAgICAgY29uc3QgZGVtYW5kZWRPcHRpb25zID0geWFyZ3MuZ2V0RGVtYW5kZWRPcHRpb25zKCk7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB5YXJncy5nZXRPcHRpb25zKCk7XG4gICAgICAgIChPYmplY3Qua2V5cyhvcHRpb25zLmFsaWFzKSB8fCBbXSkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgb3B0aW9ucy5hbGlhc1trZXldLmZvckVhY2goYWxpYXMgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChkZXNjcmlwdGlvbnNbYWxpYXNdKVxuICAgICAgICAgICAgICAgICAgICBzZWxmLmRlc2NyaWJlKGtleSwgZGVzY3JpcHRpb25zW2FsaWFzXSk7XG4gICAgICAgICAgICAgICAgaWYgKGFsaWFzIGluIGRlbWFuZGVkT3B0aW9ucylcbiAgICAgICAgICAgICAgICAgICAgeWFyZ3MuZGVtYW5kT3B0aW9uKGtleSwgZGVtYW5kZWRPcHRpb25zW2FsaWFzXSk7XG4gICAgICAgICAgICAgICAgaWYgKH5vcHRpb25zLmJvb2xlYW4uaW5kZXhPZihhbGlhcykpXG4gICAgICAgICAgICAgICAgICAgIHlhcmdzLmJvb2xlYW4oa2V5KTtcbiAgICAgICAgICAgICAgICBpZiAofm9wdGlvbnMuY291bnQuaW5kZXhPZihhbGlhcykpXG4gICAgICAgICAgICAgICAgICAgIHlhcmdzLmNvdW50KGtleSk7XG4gICAgICAgICAgICAgICAgaWYgKH5vcHRpb25zLnN0cmluZy5pbmRleE9mKGFsaWFzKSlcbiAgICAgICAgICAgICAgICAgICAgeWFyZ3Muc3RyaW5nKGtleSk7XG4gICAgICAgICAgICAgICAgaWYgKH5vcHRpb25zLm5vcm1hbGl6ZS5pbmRleE9mKGFsaWFzKSlcbiAgICAgICAgICAgICAgICAgICAgeWFyZ3Mubm9ybWFsaXplKGtleSk7XG4gICAgICAgICAgICAgICAgaWYgKH5vcHRpb25zLmFycmF5LmluZGV4T2YoYWxpYXMpKVxuICAgICAgICAgICAgICAgICAgICB5YXJncy5hcnJheShrZXkpO1xuICAgICAgICAgICAgICAgIGlmICh+b3B0aW9ucy5udW1iZXIuaW5kZXhPZihhbGlhcykpXG4gICAgICAgICAgICAgICAgICAgIHlhcmdzLm51bWJlcihrZXkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBsZXQgY2FjaGVkSGVscE1lc3NhZ2U7XG4gICAgc2VsZi5jYWNoZUhlbHBNZXNzYWdlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBjYWNoZWRIZWxwTWVzc2FnZSA9IHRoaXMuaGVscCgpO1xuICAgIH07XG4gICAgc2VsZi5jbGVhckNhY2hlZEhlbHBNZXNzYWdlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBjYWNoZWRIZWxwTWVzc2FnZSA9IHVuZGVmaW5lZDtcbiAgICB9O1xuICAgIGZ1bmN0aW9uIGFkZFVuZ3JvdXBlZEtleXMoa2V5cywgYWxpYXNlcywgZ3JvdXBzLCBkZWZhdWx0R3JvdXApIHtcbiAgICAgICAgbGV0IGdyb3VwZWRLZXlzID0gW107XG4gICAgICAgIGxldCB0b0NoZWNrID0gbnVsbDtcbiAgICAgICAgT2JqZWN0LmtleXMoZ3JvdXBzKS5mb3JFYWNoKGdyb3VwID0+IHtcbiAgICAgICAgICAgIGdyb3VwZWRLZXlzID0gZ3JvdXBlZEtleXMuY29uY2F0KGdyb3Vwc1tncm91cF0pO1xuICAgICAgICB9KTtcbiAgICAgICAga2V5cy5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICB0b0NoZWNrID0gW2tleV0uY29uY2F0KGFsaWFzZXNba2V5XSk7XG4gICAgICAgICAgICBpZiAoIXRvQ2hlY2suc29tZShrID0+IGdyb3VwZWRLZXlzLmluZGV4T2YoaykgIT09IC0xKSkge1xuICAgICAgICAgICAgICAgIGdyb3Vwc1tkZWZhdWx0R3JvdXBdLnB1c2goa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBncm91cGVkS2V5cztcbiAgICB9XG4gICAgZnVuY3Rpb24gZmlsdGVySGlkZGVuT3B0aW9ucyhrZXkpIHtcbiAgICAgICAgcmV0dXJuICh5YXJncy5nZXRPcHRpb25zKCkuaGlkZGVuT3B0aW9ucy5pbmRleE9mKGtleSkgPCAwIHx8XG4gICAgICAgICAgICB5YXJncy5wYXJzZWQuYXJndlt5YXJncy5nZXRPcHRpb25zKCkuc2hvd0hpZGRlbk9wdF0pO1xuICAgIH1cbiAgICBzZWxmLnNob3dIZWxwID0gKGxldmVsKSA9PiB7XG4gICAgICAgIGNvbnN0IGxvZ2dlciA9IHlhcmdzLl9nZXRMb2dnZXJJbnN0YW5jZSgpO1xuICAgICAgICBpZiAoIWxldmVsKVxuICAgICAgICAgICAgbGV2ZWwgPSAnZXJyb3InO1xuICAgICAgICBjb25zdCBlbWl0ID0gdHlwZW9mIGxldmVsID09PSAnZnVuY3Rpb24nID8gbGV2ZWwgOiBsb2dnZXJbbGV2ZWxdO1xuICAgICAgICBlbWl0KHNlbGYuaGVscCgpKTtcbiAgICB9O1xuICAgIHNlbGYuZnVuY3Rpb25EZXNjcmlwdGlvbiA9IGZuID0+IHtcbiAgICAgICAgY29uc3QgZGVzY3JpcHRpb24gPSBmbi5uYW1lXG4gICAgICAgICAgICA/IHNoaW0uUGFyc2VyLmRlY2FtZWxpemUoZm4ubmFtZSwgJy0nKVxuICAgICAgICAgICAgOiBfXygnZ2VuZXJhdGVkLXZhbHVlJyk7XG4gICAgICAgIHJldHVybiBbJygnLCBkZXNjcmlwdGlvbiwgJyknXS5qb2luKCcnKTtcbiAgICB9O1xuICAgIHNlbGYuc3RyaW5naWZpZWRWYWx1ZXMgPSBmdW5jdGlvbiBzdHJpbmdpZmllZFZhbHVlcyh2YWx1ZXMsIHNlcGFyYXRvcikge1xuICAgICAgICBsZXQgc3RyaW5nID0gJyc7XG4gICAgICAgIGNvbnN0IHNlcCA9IHNlcGFyYXRvciB8fCAnLCAnO1xuICAgICAgICBjb25zdCBhcnJheSA9IFtdLmNvbmNhdCh2YWx1ZXMpO1xuICAgICAgICBpZiAoIXZhbHVlcyB8fCAhYXJyYXkubGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuIHN0cmluZztcbiAgICAgICAgYXJyYXkuZm9yRWFjaCh2YWx1ZSA9PiB7XG4gICAgICAgICAgICBpZiAoc3RyaW5nLmxlbmd0aClcbiAgICAgICAgICAgICAgICBzdHJpbmcgKz0gc2VwO1xuICAgICAgICAgICAgc3RyaW5nICs9IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBzdHJpbmc7XG4gICAgfTtcbiAgICBmdW5jdGlvbiBkZWZhdWx0U3RyaW5nKHZhbHVlLCBkZWZhdWx0RGVzY3JpcHRpb24pIHtcbiAgICAgICAgbGV0IHN0cmluZyA9IGBbJHtfXygnZGVmYXVsdDonKX0gYDtcbiAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgIWRlZmF1bHREZXNjcmlwdGlvbilcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICBpZiAoZGVmYXVsdERlc2NyaXB0aW9uKSB7XG4gICAgICAgICAgICBzdHJpbmcgKz0gZGVmYXVsdERlc2NyaXB0aW9uO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc3dpdGNoICh0eXBlb2YgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICAgICAgICAgICAgICBzdHJpbmcgKz0gYFwiJHt2YWx1ZX1cImA7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgICAgICAgICAgICAgIHN0cmluZyArPSBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHN0cmluZyArPSB2YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYCR7c3RyaW5nfV1gO1xuICAgIH1cbiAgICBmdW5jdGlvbiB3aW5kb3dXaWR0aCgpIHtcbiAgICAgICAgY29uc3QgbWF4V2lkdGggPSA4MDtcbiAgICAgICAgaWYgKHNoaW0ucHJvY2Vzcy5zdGRDb2x1bW5zKSB7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5taW4obWF4V2lkdGgsIHNoaW0ucHJvY2Vzcy5zdGRDb2x1bW5zKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBtYXhXaWR0aDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBsZXQgdmVyc2lvbiA9IG51bGw7XG4gICAgc2VsZi52ZXJzaW9uID0gdmVyID0+IHtcbiAgICAgICAgdmVyc2lvbiA9IHZlcjtcbiAgICB9O1xuICAgIHNlbGYuc2hvd1ZlcnNpb24gPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGxvZ2dlciA9IHlhcmdzLl9nZXRMb2dnZXJJbnN0YW5jZSgpO1xuICAgICAgICBsb2dnZXIubG9nKHZlcnNpb24pO1xuICAgIH07XG4gICAgc2VsZi5yZXNldCA9IGZ1bmN0aW9uIHJlc2V0KGxvY2FsTG9va3VwKSB7XG4gICAgICAgIGZhaWxNZXNzYWdlID0gbnVsbDtcbiAgICAgICAgZmFpbHVyZU91dHB1dCA9IGZhbHNlO1xuICAgICAgICB1c2FnZXMgPSBbXTtcbiAgICAgICAgdXNhZ2VEaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICBlcGlsb2dzID0gW107XG4gICAgICAgIGV4YW1wbGVzID0gW107XG4gICAgICAgIGNvbW1hbmRzID0gW107XG4gICAgICAgIGRlc2NyaXB0aW9ucyA9IG9iakZpbHRlcihkZXNjcmlwdGlvbnMsIGsgPT4gIWxvY2FsTG9va3VwW2tdKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBjb25zdCBmcm96ZW5zID0gW107XG4gICAgc2VsZi5mcmVlemUgPSBmdW5jdGlvbiBmcmVlemUoKSB7XG4gICAgICAgIGZyb3plbnMucHVzaCh7XG4gICAgICAgICAgICBmYWlsTWVzc2FnZSxcbiAgICAgICAgICAgIGZhaWx1cmVPdXRwdXQsXG4gICAgICAgICAgICB1c2FnZXMsXG4gICAgICAgICAgICB1c2FnZURpc2FibGVkLFxuICAgICAgICAgICAgZXBpbG9ncyxcbiAgICAgICAgICAgIGV4YW1wbGVzLFxuICAgICAgICAgICAgY29tbWFuZHMsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbnMsXG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgc2VsZi51bmZyZWV6ZSA9IGZ1bmN0aW9uIHVuZnJlZXplKCkge1xuICAgICAgICBjb25zdCBmcm96ZW4gPSBmcm96ZW5zLnBvcCgpO1xuICAgICAgICBhc3NlcnROb3RTdHJpY3RFcXVhbChmcm96ZW4sIHVuZGVmaW5lZCwgc2hpbSk7XG4gICAgICAgICh7XG4gICAgICAgICAgICBmYWlsTWVzc2FnZSxcbiAgICAgICAgICAgIGZhaWx1cmVPdXRwdXQsXG4gICAgICAgICAgICB1c2FnZXMsXG4gICAgICAgICAgICB1c2FnZURpc2FibGVkLFxuICAgICAgICAgICAgZXBpbG9ncyxcbiAgICAgICAgICAgIGV4YW1wbGVzLFxuICAgICAgICAgICAgY29tbWFuZHMsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbnMsXG4gICAgICAgIH0gPSBmcm96ZW4pO1xuICAgIH07XG4gICAgcmV0dXJuIHNlbGY7XG59XG5mdW5jdGlvbiBpc0luZGVudGVkVGV4dCh0ZXh0KSB7XG4gICAgcmV0dXJuIHR5cGVvZiB0ZXh0ID09PSAnb2JqZWN0Jztcbn1cbmZ1bmN0aW9uIGFkZEluZGVudGF0aW9uKHRleHQsIGluZGVudCkge1xuICAgIHJldHVybiBpc0luZGVudGVkVGV4dCh0ZXh0KVxuICAgICAgICA/IHsgdGV4dDogdGV4dC50ZXh0LCBpbmRlbnRhdGlvbjogdGV4dC5pbmRlbnRhdGlvbiArIGluZGVudCB9XG4gICAgICAgIDogeyB0ZXh0LCBpbmRlbnRhdGlvbjogaW5kZW50IH07XG59XG5mdW5jdGlvbiBnZXRJbmRlbnRhdGlvbih0ZXh0KSB7XG4gICAgcmV0dXJuIGlzSW5kZW50ZWRUZXh0KHRleHQpID8gdGV4dC5pbmRlbnRhdGlvbiA6IDA7XG59XG5mdW5jdGlvbiBnZXRUZXh0KHRleHQpIHtcbiAgICByZXR1cm4gaXNJbmRlbnRlZFRleHQodGV4dCkgPyB0ZXh0LnRleHQgOiB0ZXh0O1xufVxuXG5jb25zdCBjb21wbGV0aW9uU2hUZW1wbGF0ZSA9IGAjIyMtYmVnaW4te3thcHBfbmFtZX19LWNvbXBsZXRpb25zLSMjI1xuI1xuIyB5YXJncyBjb21tYW5kIGNvbXBsZXRpb24gc2NyaXB0XG4jXG4jIEluc3RhbGxhdGlvbjoge3thcHBfcGF0aH19IHt7Y29tcGxldGlvbl9jb21tYW5kfX0gPj4gfi8uYmFzaHJjXG4jICAgIG9yIHt7YXBwX3BhdGh9fSB7e2NvbXBsZXRpb25fY29tbWFuZH19ID4+IH4vLmJhc2hfcHJvZmlsZSBvbiBPU1guXG4jXG5feWFyZ3NfY29tcGxldGlvbnMoKVxue1xuICAgIGxvY2FsIGN1cl93b3JkIGFyZ3MgdHlwZV9saXN0XG5cbiAgICBjdXJfd29yZD1cIlxcJHtDT01QX1dPUkRTW0NPTVBfQ1dPUkRdfVwiXG4gICAgYXJncz0oXCJcXCR7Q09NUF9XT1JEU1tAXX1cIilcblxuICAgICMgYXNrIHlhcmdzIHRvIGdlbmVyYXRlIGNvbXBsZXRpb25zLlxuICAgIHR5cGVfbGlzdD0kKHt7YXBwX3BhdGh9fSAtLWdldC15YXJncy1jb21wbGV0aW9ucyBcIlxcJHthcmdzW0BdfVwiKVxuXG4gICAgQ09NUFJFUExZPSggJChjb21wZ2VuIC1XIFwiXFwke3R5cGVfbGlzdH1cIiAtLSBcXCR7Y3VyX3dvcmR9KSApXG5cbiAgICAjIGlmIG5vIG1hdGNoIHdhcyBmb3VuZCwgZmFsbCBiYWNrIHRvIGZpbGVuYW1lIGNvbXBsZXRpb25cbiAgICBpZiBbIFxcJHsjQ09NUFJFUExZW0BdfSAtZXEgMCBdOyB0aGVuXG4gICAgICBDT01QUkVQTFk9KClcbiAgICBmaVxuXG4gICAgcmV0dXJuIDBcbn1cbmNvbXBsZXRlIC1vIGRlZmF1bHQgLUYgX3lhcmdzX2NvbXBsZXRpb25zIHt7YXBwX25hbWV9fVxuIyMjLWVuZC17e2FwcF9uYW1lfX0tY29tcGxldGlvbnMtIyMjXG5gO1xuY29uc3QgY29tcGxldGlvblpzaFRlbXBsYXRlID0gYCMjIy1iZWdpbi17e2FwcF9uYW1lfX0tY29tcGxldGlvbnMtIyMjXG4jXG4jIHlhcmdzIGNvbW1hbmQgY29tcGxldGlvbiBzY3JpcHRcbiNcbiMgSW5zdGFsbGF0aW9uOiB7e2FwcF9wYXRofX0ge3tjb21wbGV0aW9uX2NvbW1hbmR9fSA+PiB+Ly56c2hyY1xuIyAgICBvciB7e2FwcF9wYXRofX0ge3tjb21wbGV0aW9uX2NvbW1hbmR9fSA+PiB+Ly56c2hfcHJvZmlsZSBvbiBPU1guXG4jXG5fe3thcHBfbmFtZX19X3lhcmdzX2NvbXBsZXRpb25zKClcbntcbiAgbG9jYWwgcmVwbHlcbiAgbG9jYWwgc2k9JElGU1xuICBJRlM9JCdcXG4nIHJlcGx5PSgkKENPTVBfQ1dPUkQ9XCIkKChDVVJSRU5ULTEpKVwiIENPTVBfTElORT1cIiRCVUZGRVJcIiBDT01QX1BPSU5UPVwiJENVUlNPUlwiIHt7YXBwX3BhdGh9fSAtLWdldC15YXJncy1jb21wbGV0aW9ucyBcIlxcJHt3b3Jkc1tAXX1cIikpXG4gIElGUz0kc2lcbiAgX2Rlc2NyaWJlICd2YWx1ZXMnIHJlcGx5XG59XG5jb21wZGVmIF97e2FwcF9uYW1lfX1feWFyZ3NfY29tcGxldGlvbnMge3thcHBfbmFtZX19XG4jIyMtZW5kLXt7YXBwX25hbWV9fS1jb21wbGV0aW9ucy0jIyNcbmA7XG5cbmZ1bmN0aW9uIGNvbXBsZXRpb24oeWFyZ3MsIHVzYWdlLCBjb21tYW5kLCBzaGltKSB7XG4gICAgY29uc3Qgc2VsZiA9IHtcbiAgICAgICAgY29tcGxldGlvbktleTogJ2dldC15YXJncy1jb21wbGV0aW9ucycsXG4gICAgfTtcbiAgICBsZXQgYWxpYXNlcztcbiAgICBzZWxmLnNldFBhcnNlZCA9IGZ1bmN0aW9uIHNldFBhcnNlZChwYXJzZWQpIHtcbiAgICAgICAgYWxpYXNlcyA9IHBhcnNlZC5hbGlhc2VzO1xuICAgIH07XG4gICAgY29uc3QgenNoU2hlbGwgPSAoc2hpbS5nZXRFbnYoJ1NIRUxMJykgJiYgc2hpbS5nZXRFbnYoJ1NIRUxMJykuaW5kZXhPZignenNoJykgIT09IC0xKSB8fFxuICAgICAgICAoc2hpbS5nZXRFbnYoJ1pTSF9OQU1FJykgJiYgc2hpbS5nZXRFbnYoJ1pTSF9OQU1FJykuaW5kZXhPZignenNoJykgIT09IC0xKTtcbiAgICBzZWxmLmdldENvbXBsZXRpb24gPSBmdW5jdGlvbiBnZXRDb21wbGV0aW9uKGFyZ3MsIGRvbmUpIHtcbiAgICAgICAgY29uc3QgY29tcGxldGlvbnMgPSBbXTtcbiAgICAgICAgY29uc3QgY3VycmVudCA9IGFyZ3MubGVuZ3RoID8gYXJnc1thcmdzLmxlbmd0aCAtIDFdIDogJyc7XG4gICAgICAgIGNvbnN0IGFyZ3YgPSB5YXJncy5wYXJzZShhcmdzLCB0cnVlKTtcbiAgICAgICAgY29uc3QgcGFyZW50Q29tbWFuZHMgPSB5YXJncy5nZXRDb250ZXh0KCkuY29tbWFuZHM7XG4gICAgICAgIGZ1bmN0aW9uIHJ1bkNvbXBsZXRpb25GdW5jdGlvbihhcmd2KSB7XG4gICAgICAgICAgICBhc3NlcnROb3RTdHJpY3RFcXVhbChjb21wbGV0aW9uRnVuY3Rpb24sIG51bGwsIHNoaW0pO1xuICAgICAgICAgICAgaWYgKGlzU3luY0NvbXBsZXRpb25GdW5jdGlvbihjb21wbGV0aW9uRnVuY3Rpb24pKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gY29tcGxldGlvbkZ1bmN0aW9uKGN1cnJlbnQsIGFyZ3YpO1xuICAgICAgICAgICAgICAgIGlmIChpc1Byb21pc2UocmVzdWx0KSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICAgICAgICAgICAgICAgICAgICAudGhlbihsaXN0ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNoaW0ucHJvY2Vzcy5uZXh0VGljaygoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZShsaXN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaGltLnByb2Nlc3MubmV4dFRpY2soKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRvbmUocmVzdWx0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb21wbGV0aW9uRnVuY3Rpb24oY3VycmVudCwgYXJndiwgY29tcGxldGlvbnMgPT4ge1xuICAgICAgICAgICAgICAgICAgICBkb25lKGNvbXBsZXRpb25zKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoY29tcGxldGlvbkZ1bmN0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gaXNQcm9taXNlKGFyZ3YpXG4gICAgICAgICAgICAgICAgPyBhcmd2LnRoZW4ocnVuQ29tcGxldGlvbkZ1bmN0aW9uKVxuICAgICAgICAgICAgICAgIDogcnVuQ29tcGxldGlvbkZ1bmN0aW9uKGFyZ3YpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGhhbmRsZXJzID0gY29tbWFuZC5nZXRDb21tYW5kSGFuZGxlcnMoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGlpID0gYXJncy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XG4gICAgICAgICAgICBpZiAoaGFuZGxlcnNbYXJnc1tpXV0gJiYgaGFuZGxlcnNbYXJnc1tpXV0uYnVpbGRlcikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJ1aWxkZXIgPSBoYW5kbGVyc1thcmdzW2ldXS5idWlsZGVyO1xuICAgICAgICAgICAgICAgIGlmIChpc0NvbW1hbmRCdWlsZGVyQ2FsbGJhY2soYnVpbGRlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeSA9IHlhcmdzLnJlc2V0KCk7XG4gICAgICAgICAgICAgICAgICAgIGJ1aWxkZXIoeSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB5LmFyZ3Y7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghY3VycmVudC5tYXRjaCgvXi0vKSAmJlxuICAgICAgICAgICAgcGFyZW50Q29tbWFuZHNbcGFyZW50Q29tbWFuZHMubGVuZ3RoIC0gMV0gIT09IGN1cnJlbnQpIHtcbiAgICAgICAgICAgIHVzYWdlLmdldENvbW1hbmRzKCkuZm9yRWFjaCh1c2FnZUNvbW1hbmQgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbW1hbmROYW1lID0gcGFyc2VDb21tYW5kKHVzYWdlQ29tbWFuZFswXSkuY21kO1xuICAgICAgICAgICAgICAgIGlmIChhcmdzLmluZGV4T2YoY29tbWFuZE5hbWUpID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXpzaFNoZWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0aW9ucy5wdXNoKGNvbW1hbmROYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlc2MgPSB1c2FnZUNvbW1hbmRbMV0gfHwgJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0aW9ucy5wdXNoKGNvbW1hbmROYW1lLnJlcGxhY2UoLzovZywgJ1xcXFw6JykgKyAnOicgKyBkZXNjKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjdXJyZW50Lm1hdGNoKC9eLS8pIHx8IChjdXJyZW50ID09PSAnJyAmJiBjb21wbGV0aW9ucy5sZW5ndGggPT09IDApKSB7XG4gICAgICAgICAgICBjb25zdCBkZXNjcyA9IHVzYWdlLmdldERlc2NyaXB0aW9ucygpO1xuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHlhcmdzLmdldE9wdGlvbnMoKTtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKG9wdGlvbnMua2V5KS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmVnYWJsZSA9ICEhb3B0aW9ucy5jb25maWd1cmF0aW9uWydib29sZWFuLW5lZ2F0aW9uJ10gJiZcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5ib29sZWFuLmluY2x1ZGVzKGtleSk7XG4gICAgICAgICAgICAgICAgbGV0IGtleUFuZEFsaWFzZXMgPSBba2V5XS5jb25jYXQoYWxpYXNlc1trZXldIHx8IFtdKTtcbiAgICAgICAgICAgICAgICBpZiAobmVnYWJsZSlcbiAgICAgICAgICAgICAgICAgICAga2V5QW5kQWxpYXNlcyA9IGtleUFuZEFsaWFzZXMuY29uY2F0KGtleUFuZEFsaWFzZXMubWFwKGtleSA9PiBgbm8tJHtrZXl9YCkpO1xuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNvbXBsZXRlT3B0aW9uS2V5KGtleSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBub3RJbkFyZ3MgPSBrZXlBbmRBbGlhc2VzLmV2ZXJ5KHZhbCA9PiBhcmdzLmluZGV4T2YoYC0tJHt2YWx9YCkgPT09IC0xKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5vdEluQXJncykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RhcnRzQnlUd29EYXNoZXMgPSAocykgPT4gL14tLS8udGVzdChzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzU2hvcnRPcHRpb24gPSAocykgPT4gL15bXjAtOV0kLy50ZXN0KHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGFzaGVzID0gIXN0YXJ0c0J5VHdvRGFzaGVzKGN1cnJlbnQpICYmIGlzU2hvcnRPcHRpb24oa2V5KSA/ICctJyA6ICctLSc7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXpzaFNoZWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGlvbnMucHVzaChkYXNoZXMgKyBrZXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVzYyA9IGRlc2NzW2tleV0gfHwgJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGlvbnMucHVzaChkYXNoZXMgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgJHtrZXkucmVwbGFjZSgvOi9nLCAnXFxcXDonKX06JHtkZXNjLnJlcGxhY2UoJ19feWFyZ3NTdHJpbmdfXzonLCAnJyl9YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29tcGxldGVPcHRpb25LZXkoa2V5KTtcbiAgICAgICAgICAgICAgICBpZiAobmVnYWJsZSAmJiAhIW9wdGlvbnMuZGVmYXVsdFtrZXldKVxuICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZU9wdGlvbktleShgbm8tJHtrZXl9YCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBkb25lKGNvbXBsZXRpb25zKTtcbiAgICB9O1xuICAgIHNlbGYuZ2VuZXJhdGVDb21wbGV0aW9uU2NyaXB0ID0gZnVuY3Rpb24gZ2VuZXJhdGVDb21wbGV0aW9uU2NyaXB0KCQwLCBjbWQpIHtcbiAgICAgICAgbGV0IHNjcmlwdCA9IHpzaFNoZWxsXG4gICAgICAgICAgICA/IGNvbXBsZXRpb25ac2hUZW1wbGF0ZVxuICAgICAgICAgICAgOiBjb21wbGV0aW9uU2hUZW1wbGF0ZTtcbiAgICAgICAgY29uc3QgbmFtZSA9IHNoaW0ucGF0aC5iYXNlbmFtZSgkMCk7XG4gICAgICAgIGlmICgkMC5tYXRjaCgvXFwuanMkLykpXG4gICAgICAgICAgICAkMCA9IGAuLyR7JDB9YDtcbiAgICAgICAgc2NyaXB0ID0gc2NyaXB0LnJlcGxhY2UoL3t7YXBwX25hbWV9fS9nLCBuYW1lKTtcbiAgICAgICAgc2NyaXB0ID0gc2NyaXB0LnJlcGxhY2UoL3t7Y29tcGxldGlvbl9jb21tYW5kfX0vZywgY21kKTtcbiAgICAgICAgcmV0dXJuIHNjcmlwdC5yZXBsYWNlKC97e2FwcF9wYXRofX0vZywgJDApO1xuICAgIH07XG4gICAgbGV0IGNvbXBsZXRpb25GdW5jdGlvbiA9IG51bGw7XG4gICAgc2VsZi5yZWdpc3RlckZ1bmN0aW9uID0gZm4gPT4ge1xuICAgICAgICBjb21wbGV0aW9uRnVuY3Rpb24gPSBmbjtcbiAgICB9O1xuICAgIHJldHVybiBzZWxmO1xufVxuZnVuY3Rpb24gaXNTeW5jQ29tcGxldGlvbkZ1bmN0aW9uKGNvbXBsZXRpb25GdW5jdGlvbikge1xuICAgIHJldHVybiBjb21wbGV0aW9uRnVuY3Rpb24ubGVuZ3RoIDwgMztcbn1cblxuZnVuY3Rpb24gbGV2ZW5zaHRlaW4oYSwgYikge1xuICAgIGlmIChhLmxlbmd0aCA9PT0gMClcbiAgICAgICAgcmV0dXJuIGIubGVuZ3RoO1xuICAgIGlmIChiLmxlbmd0aCA9PT0gMClcbiAgICAgICAgcmV0dXJuIGEubGVuZ3RoO1xuICAgIGNvbnN0IG1hdHJpeCA9IFtdO1xuICAgIGxldCBpO1xuICAgIGZvciAoaSA9IDA7IGkgPD0gYi5sZW5ndGg7IGkrKykge1xuICAgICAgICBtYXRyaXhbaV0gPSBbaV07XG4gICAgfVxuICAgIGxldCBqO1xuICAgIGZvciAoaiA9IDA7IGogPD0gYS5sZW5ndGg7IGorKykge1xuICAgICAgICBtYXRyaXhbMF1bal0gPSBqO1xuICAgIH1cbiAgICBmb3IgKGkgPSAxOyBpIDw9IGIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgZm9yIChqID0gMTsgaiA8PSBhLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICBpZiAoYi5jaGFyQXQoaSAtIDEpID09PSBhLmNoYXJBdChqIC0gMSkpIHtcbiAgICAgICAgICAgICAgICBtYXRyaXhbaV1bal0gPSBtYXRyaXhbaSAtIDFdW2ogLSAxXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIG1hdHJpeFtpXVtqXSA9IE1hdGgubWluKG1hdHJpeFtpIC0gMV1baiAtIDFdICsgMSwgTWF0aC5taW4obWF0cml4W2ldW2ogLSAxXSArIDEsIG1hdHJpeFtpIC0gMV1bal0gKyAxKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1hdHJpeFtiLmxlbmd0aF1bYS5sZW5ndGhdO1xufVxuXG5jb25zdCBzcGVjaWFsS2V5cyA9IFsnJDAnLCAnLS0nLCAnXyddO1xuZnVuY3Rpb24gdmFsaWRhdGlvbih5YXJncywgdXNhZ2UsIHkxOG4sIHNoaW0pIHtcbiAgICBjb25zdCBfXyA9IHkxOG4uX187XG4gICAgY29uc3QgX19uID0geTE4bi5fX247XG4gICAgY29uc3Qgc2VsZiA9IHt9O1xuICAgIHNlbGYubm9uT3B0aW9uQ291bnQgPSBmdW5jdGlvbiBub25PcHRpb25Db3VudChhcmd2KSB7XG4gICAgICAgIGNvbnN0IGRlbWFuZGVkQ29tbWFuZHMgPSB5YXJncy5nZXREZW1hbmRlZENvbW1hbmRzKCk7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uYWxDb3VudCA9IGFyZ3YuXy5sZW5ndGggKyAoYXJndlsnLS0nXSA/IGFyZ3ZbJy0tJ10ubGVuZ3RoIDogMCk7XG4gICAgICAgIGNvbnN0IF9zID0gcG9zaXRpb25hbENvdW50IC0geWFyZ3MuZ2V0Q29udGV4dCgpLmNvbW1hbmRzLmxlbmd0aDtcbiAgICAgICAgaWYgKGRlbWFuZGVkQ29tbWFuZHMuXyAmJlxuICAgICAgICAgICAgKF9zIDwgZGVtYW5kZWRDb21tYW5kcy5fLm1pbiB8fCBfcyA+IGRlbWFuZGVkQ29tbWFuZHMuXy5tYXgpKSB7XG4gICAgICAgICAgICBpZiAoX3MgPCBkZW1hbmRlZENvbW1hbmRzLl8ubWluKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRlbWFuZGVkQ29tbWFuZHMuXy5taW5Nc2cgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICB1c2FnZS5mYWlsKGRlbWFuZGVkQ29tbWFuZHMuXy5taW5Nc2dcbiAgICAgICAgICAgICAgICAgICAgICAgID8gZGVtYW5kZWRDb21tYW5kcy5fLm1pbk1zZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXCQwL2csIF9zLnRvU3RyaW5nKCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcJDEvLCBkZW1hbmRlZENvbW1hbmRzLl8ubWluLnRvU3RyaW5nKCkpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IG51bGwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdXNhZ2UuZmFpbChfX24oJ05vdCBlbm91Z2ggbm9uLW9wdGlvbiBhcmd1bWVudHM6IGdvdCAlcywgbmVlZCBhdCBsZWFzdCAlcycsICdOb3QgZW5vdWdoIG5vbi1vcHRpb24gYXJndW1lbnRzOiBnb3QgJXMsIG5lZWQgYXQgbGVhc3QgJXMnLCBfcywgX3MudG9TdHJpbmcoKSwgZGVtYW5kZWRDb21tYW5kcy5fLm1pbi50b1N0cmluZygpKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoX3MgPiBkZW1hbmRlZENvbW1hbmRzLl8ubWF4KSB7XG4gICAgICAgICAgICAgICAgaWYgKGRlbWFuZGVkQ29tbWFuZHMuXy5tYXhNc2cgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICB1c2FnZS5mYWlsKGRlbWFuZGVkQ29tbWFuZHMuXy5tYXhNc2dcbiAgICAgICAgICAgICAgICAgICAgICAgID8gZGVtYW5kZWRDb21tYW5kcy5fLm1heE1zZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXCQwL2csIF9zLnRvU3RyaW5nKCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcJDEvLCBkZW1hbmRlZENvbW1hbmRzLl8ubWF4LnRvU3RyaW5nKCkpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IG51bGwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdXNhZ2UuZmFpbChfX24oJ1RvbyBtYW55IG5vbi1vcHRpb24gYXJndW1lbnRzOiBnb3QgJXMsIG1heGltdW0gb2YgJXMnLCAnVG9vIG1hbnkgbm9uLW9wdGlvbiBhcmd1bWVudHM6IGdvdCAlcywgbWF4aW11bSBvZiAlcycsIF9zLCBfcy50b1N0cmluZygpLCBkZW1hbmRlZENvbW1hbmRzLl8ubWF4LnRvU3RyaW5nKCkpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHNlbGYucG9zaXRpb25hbENvdW50ID0gZnVuY3Rpb24gcG9zaXRpb25hbENvdW50KHJlcXVpcmVkLCBvYnNlcnZlZCkge1xuICAgICAgICBpZiAob2JzZXJ2ZWQgPCByZXF1aXJlZCkge1xuICAgICAgICAgICAgdXNhZ2UuZmFpbChfX24oJ05vdCBlbm91Z2ggbm9uLW9wdGlvbiBhcmd1bWVudHM6IGdvdCAlcywgbmVlZCBhdCBsZWFzdCAlcycsICdOb3QgZW5vdWdoIG5vbi1vcHRpb24gYXJndW1lbnRzOiBnb3QgJXMsIG5lZWQgYXQgbGVhc3QgJXMnLCBvYnNlcnZlZCwgb2JzZXJ2ZWQgKyAnJywgcmVxdWlyZWQgKyAnJykpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBzZWxmLnJlcXVpcmVkQXJndW1lbnRzID0gZnVuY3Rpb24gcmVxdWlyZWRBcmd1bWVudHMoYXJndikge1xuICAgICAgICBjb25zdCBkZW1hbmRlZE9wdGlvbnMgPSB5YXJncy5nZXREZW1hbmRlZE9wdGlvbnMoKTtcbiAgICAgICAgbGV0IG1pc3NpbmcgPSBudWxsO1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhkZW1hbmRlZE9wdGlvbnMpKSB7XG4gICAgICAgICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhcmd2LCBrZXkpIHx8XG4gICAgICAgICAgICAgICAgdHlwZW9mIGFyZ3Zba2V5XSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICBtaXNzaW5nID0gbWlzc2luZyB8fCB7fTtcbiAgICAgICAgICAgICAgICBtaXNzaW5nW2tleV0gPSBkZW1hbmRlZE9wdGlvbnNba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobWlzc2luZykge1xuICAgICAgICAgICAgY29uc3QgY3VzdG9tTXNncyA9IFtdO1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMobWlzc2luZykpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtc2cgPSBtaXNzaW5nW2tleV07XG4gICAgICAgICAgICAgICAgaWYgKG1zZyAmJiBjdXN0b21Nc2dzLmluZGV4T2YobXNnKSA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgY3VzdG9tTXNncy5wdXNoKG1zZyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgY3VzdG9tTXNnID0gY3VzdG9tTXNncy5sZW5ndGggPyBgXFxuJHtjdXN0b21Nc2dzLmpvaW4oJ1xcbicpfWAgOiAnJztcbiAgICAgICAgICAgIHVzYWdlLmZhaWwoX19uKCdNaXNzaW5nIHJlcXVpcmVkIGFyZ3VtZW50OiAlcycsICdNaXNzaW5nIHJlcXVpcmVkIGFyZ3VtZW50czogJXMnLCBPYmplY3Qua2V5cyhtaXNzaW5nKS5sZW5ndGgsIE9iamVjdC5rZXlzKG1pc3NpbmcpLmpvaW4oJywgJykgKyBjdXN0b21Nc2cpKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgc2VsZi51bmtub3duQXJndW1lbnRzID0gZnVuY3Rpb24gdW5rbm93bkFyZ3VtZW50cyhhcmd2LCBhbGlhc2VzLCBwb3NpdGlvbmFsTWFwLCBpc0RlZmF1bHRDb21tYW5kLCBjaGVja1Bvc2l0aW9uYWxzID0gdHJ1ZSkge1xuICAgICAgICBjb25zdCBjb21tYW5kS2V5cyA9IHlhcmdzLmdldENvbW1hbmRJbnN0YW5jZSgpLmdldENvbW1hbmRzKCk7XG4gICAgICAgIGNvbnN0IHVua25vd24gPSBbXTtcbiAgICAgICAgY29uc3QgY3VycmVudENvbnRleHQgPSB5YXJncy5nZXRDb250ZXh0KCk7XG4gICAgICAgIE9iamVjdC5rZXlzKGFyZ3YpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIGlmIChzcGVjaWFsS2V5cy5pbmRleE9mKGtleSkgPT09IC0xICYmXG4gICAgICAgICAgICAgICAgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwb3NpdGlvbmFsTWFwLCBrZXkpICYmXG4gICAgICAgICAgICAgICAgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh5YXJncy5fZ2V0UGFyc2VDb250ZXh0KCksIGtleSkgJiZcbiAgICAgICAgICAgICAgICAhc2VsZi5pc1ZhbGlkQW5kU29tZUFsaWFzSXNOb3ROZXcoa2V5LCBhbGlhc2VzKSkge1xuICAgICAgICAgICAgICAgIHVua25vd24ucHVzaChrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGNoZWNrUG9zaXRpb25hbHMgJiZcbiAgICAgICAgICAgIChjdXJyZW50Q29udGV4dC5jb21tYW5kcy5sZW5ndGggPiAwIHx8XG4gICAgICAgICAgICAgICAgY29tbWFuZEtleXMubGVuZ3RoID4gMCB8fFxuICAgICAgICAgICAgICAgIGlzRGVmYXVsdENvbW1hbmQpKSB7XG4gICAgICAgICAgICBhcmd2Ll8uc2xpY2UoY3VycmVudENvbnRleHQuY29tbWFuZHMubGVuZ3RoKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbW1hbmRLZXlzLmluZGV4T2YoJycgKyBrZXkpID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICB1bmtub3duLnB1c2goJycgKyBrZXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh1bmtub3duLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHVzYWdlLmZhaWwoX19uKCdVbmtub3duIGFyZ3VtZW50OiAlcycsICdVbmtub3duIGFyZ3VtZW50czogJXMnLCB1bmtub3duLmxlbmd0aCwgdW5rbm93bi5qb2luKCcsICcpKSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHNlbGYudW5rbm93bkNvbW1hbmRzID0gZnVuY3Rpb24gdW5rbm93bkNvbW1hbmRzKGFyZ3YpIHtcbiAgICAgICAgY29uc3QgY29tbWFuZEtleXMgPSB5YXJncy5nZXRDb21tYW5kSW5zdGFuY2UoKS5nZXRDb21tYW5kcygpO1xuICAgICAgICBjb25zdCB1bmtub3duID0gW107XG4gICAgICAgIGNvbnN0IGN1cnJlbnRDb250ZXh0ID0geWFyZ3MuZ2V0Q29udGV4dCgpO1xuICAgICAgICBpZiAoY3VycmVudENvbnRleHQuY29tbWFuZHMubGVuZ3RoID4gMCB8fCBjb21tYW5kS2V5cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBhcmd2Ll8uc2xpY2UoY3VycmVudENvbnRleHQuY29tbWFuZHMubGVuZ3RoKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbW1hbmRLZXlzLmluZGV4T2YoJycgKyBrZXkpID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICB1bmtub3duLnB1c2goJycgKyBrZXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh1bmtub3duLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHVzYWdlLmZhaWwoX19uKCdVbmtub3duIGNvbW1hbmQ6ICVzJywgJ1Vua25vd24gY29tbWFuZHM6ICVzJywgdW5rbm93bi5sZW5ndGgsIHVua25vd24uam9pbignLCAnKSkpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHNlbGYuaXNWYWxpZEFuZFNvbWVBbGlhc0lzTm90TmV3ID0gZnVuY3Rpb24gaXNWYWxpZEFuZFNvbWVBbGlhc0lzTm90TmV3KGtleSwgYWxpYXNlcykge1xuICAgICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhbGlhc2VzLCBrZXkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbmV3QWxpYXNlcyA9IHlhcmdzLnBhcnNlZC5uZXdBbGlhc2VzO1xuICAgICAgICBmb3IgKGNvbnN0IGEgb2YgW2tleSwgLi4uYWxpYXNlc1trZXldXSkge1xuICAgICAgICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobmV3QWxpYXNlcywgYSkgfHxcbiAgICAgICAgICAgICAgICAhbmV3QWxpYXNlc1trZXldKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG4gICAgc2VsZi5saW1pdGVkQ2hvaWNlcyA9IGZ1bmN0aW9uIGxpbWl0ZWRDaG9pY2VzKGFyZ3YpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHlhcmdzLmdldE9wdGlvbnMoKTtcbiAgICAgICAgY29uc3QgaW52YWxpZCA9IHt9O1xuICAgICAgICBpZiAoIU9iamVjdC5rZXlzKG9wdGlvbnMuY2hvaWNlcykubGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBPYmplY3Qua2V5cyhhcmd2KS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICBpZiAoc3BlY2lhbEtleXMuaW5kZXhPZihrZXkpID09PSAtMSAmJlxuICAgICAgICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvcHRpb25zLmNob2ljZXMsIGtleSkpIHtcbiAgICAgICAgICAgICAgICBbXS5jb25jYXQoYXJndltrZXldKS5mb3JFYWNoKHZhbHVlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuY2hvaWNlc1trZXldLmluZGV4T2YodmFsdWUpID09PSAtMSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaW52YWxpZFtrZXldID0gKGludmFsaWRba2V5XSB8fCBbXSkuY29uY2F0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgaW52YWxpZEtleXMgPSBPYmplY3Qua2V5cyhpbnZhbGlkKTtcbiAgICAgICAgaWYgKCFpbnZhbGlkS2V5cy5sZW5ndGgpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGxldCBtc2cgPSBfXygnSW52YWxpZCB2YWx1ZXM6Jyk7XG4gICAgICAgIGludmFsaWRLZXlzLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIG1zZyArPSBgXFxuICAke19fKCdBcmd1bWVudDogJXMsIEdpdmVuOiAlcywgQ2hvaWNlczogJXMnLCBrZXksIHVzYWdlLnN0cmluZ2lmaWVkVmFsdWVzKGludmFsaWRba2V5XSksIHVzYWdlLnN0cmluZ2lmaWVkVmFsdWVzKG9wdGlvbnMuY2hvaWNlc1trZXldKSl9YDtcbiAgICAgICAgfSk7XG4gICAgICAgIHVzYWdlLmZhaWwobXNnKTtcbiAgICB9O1xuICAgIGxldCBjaGVja3MgPSBbXTtcbiAgICBzZWxmLmNoZWNrID0gZnVuY3Rpb24gY2hlY2soZiwgZ2xvYmFsKSB7XG4gICAgICAgIGNoZWNrcy5wdXNoKHtcbiAgICAgICAgICAgIGZ1bmM6IGYsXG4gICAgICAgICAgICBnbG9iYWwsXG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgc2VsZi5jdXN0b21DaGVja3MgPSBmdW5jdGlvbiBjdXN0b21DaGVja3MoYXJndiwgYWxpYXNlcykge1xuICAgICAgICBmb3IgKGxldCBpID0gMCwgZjsgKGYgPSBjaGVja3NbaV0pICE9PSB1bmRlZmluZWQ7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgZnVuYyA9IGYuZnVuYztcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSBudWxsO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBmdW5jKGFyZ3YsIGFsaWFzZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIHVzYWdlLmZhaWwoZXJyLm1lc3NhZ2UgPyBlcnIubWVzc2FnZSA6IGVyciwgZXJyKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghcmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgdXNhZ2UuZmFpbChfXygnQXJndW1lbnQgY2hlY2sgZmFpbGVkOiAlcycsIGZ1bmMudG9TdHJpbmcoKSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIHJlc3VsdCA9PT0gJ3N0cmluZycgfHwgcmVzdWx0IGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgICAgICB1c2FnZS5mYWlsKHJlc3VsdC50b1N0cmluZygpLCByZXN1bHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBsZXQgaW1wbGllZCA9IHt9O1xuICAgIHNlbGYuaW1wbGllcyA9IGZ1bmN0aW9uIGltcGxpZXMoa2V5LCB2YWx1ZSkge1xuICAgICAgICBhcmdzZXJ0KCc8c3RyaW5nfG9iamVjdD4gW2FycmF5fG51bWJlcnxzdHJpbmddJywgW2tleSwgdmFsdWVdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgaWYgKHR5cGVvZiBrZXkgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhrZXkpLmZvckVhY2goayA9PiB7XG4gICAgICAgICAgICAgICAgc2VsZi5pbXBsaWVzKGssIGtleVtrXSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHlhcmdzLmdsb2JhbChrZXkpO1xuICAgICAgICAgICAgaWYgKCFpbXBsaWVkW2tleV0pIHtcbiAgICAgICAgICAgICAgICBpbXBsaWVkW2tleV0gPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHZhbHVlLmZvckVhY2goaSA9PiBzZWxmLmltcGxpZXMoa2V5LCBpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBhc3NlcnROb3RTdHJpY3RFcXVhbCh2YWx1ZSwgdW5kZWZpbmVkLCBzaGltKTtcbiAgICAgICAgICAgICAgICBpbXBsaWVkW2tleV0ucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHNlbGYuZ2V0SW1wbGllZCA9IGZ1bmN0aW9uIGdldEltcGxpZWQoKSB7XG4gICAgICAgIHJldHVybiBpbXBsaWVkO1xuICAgIH07XG4gICAgZnVuY3Rpb24ga2V5RXhpc3RzKGFyZ3YsIHZhbCkge1xuICAgICAgICBjb25zdCBudW0gPSBOdW1iZXIodmFsKTtcbiAgICAgICAgdmFsID0gaXNOYU4obnVtKSA/IHZhbCA6IG51bTtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICB2YWwgPSBhcmd2Ll8ubGVuZ3RoID49IHZhbDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh2YWwubWF0Y2goL14tLW5vLS4rLykpIHtcbiAgICAgICAgICAgIHZhbCA9IHZhbC5tYXRjaCgvXi0tbm8tKC4rKS8pWzFdO1xuICAgICAgICAgICAgdmFsID0gIWFyZ3ZbdmFsXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZhbCA9IGFyZ3ZbdmFsXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsO1xuICAgIH1cbiAgICBzZWxmLmltcGxpY2F0aW9ucyA9IGZ1bmN0aW9uIGltcGxpY2F0aW9ucyhhcmd2KSB7XG4gICAgICAgIGNvbnN0IGltcGx5RmFpbCA9IFtdO1xuICAgICAgICBPYmplY3Qua2V5cyhpbXBsaWVkKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICBjb25zdCBvcmlnS2V5ID0ga2V5O1xuICAgICAgICAgICAgKGltcGxpZWRba2V5XSB8fCBbXSkuZm9yRWFjaCh2YWx1ZSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IGtleSA9IG9yaWdLZXk7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3JpZ1ZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICAgICAga2V5ID0ga2V5RXhpc3RzKGFyZ3YsIGtleSk7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBrZXlFeGlzdHMoYXJndiwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmIChrZXkgJiYgIXZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGltcGx5RmFpbC5wdXNoKGAgJHtvcmlnS2V5fSAtPiAke29yaWdWYWx1ZX1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChpbXBseUZhaWwubGVuZ3RoKSB7XG4gICAgICAgICAgICBsZXQgbXNnID0gYCR7X18oJ0ltcGxpY2F0aW9ucyBmYWlsZWQ6Jyl9XFxuYDtcbiAgICAgICAgICAgIGltcGx5RmFpbC5mb3JFYWNoKHZhbHVlID0+IHtcbiAgICAgICAgICAgICAgICBtc2cgKz0gdmFsdWU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHVzYWdlLmZhaWwobXNnKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgbGV0IGNvbmZsaWN0aW5nID0ge307XG4gICAgc2VsZi5jb25mbGljdHMgPSBmdW5jdGlvbiBjb25mbGljdHMoa2V5LCB2YWx1ZSkge1xuICAgICAgICBhcmdzZXJ0KCc8c3RyaW5nfG9iamVjdD4gW2FycmF5fHN0cmluZ10nLCBba2V5LCB2YWx1ZV0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBpZiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGtleSkuZm9yRWFjaChrID0+IHtcbiAgICAgICAgICAgICAgICBzZWxmLmNvbmZsaWN0cyhrLCBrZXlba10pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB5YXJncy5nbG9iYWwoa2V5KTtcbiAgICAgICAgICAgIGlmICghY29uZmxpY3Rpbmdba2V5XSkge1xuICAgICAgICAgICAgICAgIGNvbmZsaWN0aW5nW2tleV0gPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHZhbHVlLmZvckVhY2goaSA9PiBzZWxmLmNvbmZsaWN0cyhrZXksIGkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbmZsaWN0aW5nW2tleV0ucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHNlbGYuZ2V0Q29uZmxpY3RpbmcgPSAoKSA9PiBjb25mbGljdGluZztcbiAgICBzZWxmLmNvbmZsaWN0aW5nID0gZnVuY3Rpb24gY29uZmxpY3RpbmdGbihhcmd2KSB7XG4gICAgICAgIE9iamVjdC5rZXlzKGFyZ3YpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIGlmIChjb25mbGljdGluZ1trZXldKSB7XG4gICAgICAgICAgICAgICAgY29uZmxpY3Rpbmdba2V5XS5mb3JFYWNoKHZhbHVlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlICYmIGFyZ3Zba2V5XSAhPT0gdW5kZWZpbmVkICYmIGFyZ3ZbdmFsdWVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzYWdlLmZhaWwoX18oJ0FyZ3VtZW50cyAlcyBhbmQgJXMgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZScsIGtleSwgdmFsdWUpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIHNlbGYucmVjb21tZW5kQ29tbWFuZHMgPSBmdW5jdGlvbiByZWNvbW1lbmRDb21tYW5kcyhjbWQsIHBvdGVudGlhbENvbW1hbmRzKSB7XG4gICAgICAgIGNvbnN0IHRocmVzaG9sZCA9IDM7XG4gICAgICAgIHBvdGVudGlhbENvbW1hbmRzID0gcG90ZW50aWFsQ29tbWFuZHMuc29ydCgoYSwgYikgPT4gYi5sZW5ndGggLSBhLmxlbmd0aCk7XG4gICAgICAgIGxldCByZWNvbW1lbmRlZCA9IG51bGw7XG4gICAgICAgIGxldCBiZXN0RGlzdGFuY2UgPSBJbmZpbml0eTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGNhbmRpZGF0ZTsgKGNhbmRpZGF0ZSA9IHBvdGVudGlhbENvbW1hbmRzW2ldKSAhPT0gdW5kZWZpbmVkOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGQgPSBsZXZlbnNodGVpbihjbWQsIGNhbmRpZGF0ZSk7XG4gICAgICAgICAgICBpZiAoZCA8PSB0aHJlc2hvbGQgJiYgZCA8IGJlc3REaXN0YW5jZSkge1xuICAgICAgICAgICAgICAgIGJlc3REaXN0YW5jZSA9IGQ7XG4gICAgICAgICAgICAgICAgcmVjb21tZW5kZWQgPSBjYW5kaWRhdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlY29tbWVuZGVkKVxuICAgICAgICAgICAgdXNhZ2UuZmFpbChfXygnRGlkIHlvdSBtZWFuICVzPycsIHJlY29tbWVuZGVkKSk7XG4gICAgfTtcbiAgICBzZWxmLnJlc2V0ID0gZnVuY3Rpb24gcmVzZXQobG9jYWxMb29rdXApIHtcbiAgICAgICAgaW1wbGllZCA9IG9iakZpbHRlcihpbXBsaWVkLCBrID0+ICFsb2NhbExvb2t1cFtrXSk7XG4gICAgICAgIGNvbmZsaWN0aW5nID0gb2JqRmlsdGVyKGNvbmZsaWN0aW5nLCBrID0+ICFsb2NhbExvb2t1cFtrXSk7XG4gICAgICAgIGNoZWNrcyA9IGNoZWNrcy5maWx0ZXIoYyA9PiBjLmdsb2JhbCk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgY29uc3QgZnJvemVucyA9IFtdO1xuICAgIHNlbGYuZnJlZXplID0gZnVuY3Rpb24gZnJlZXplKCkge1xuICAgICAgICBmcm96ZW5zLnB1c2goe1xuICAgICAgICAgICAgaW1wbGllZCxcbiAgICAgICAgICAgIGNoZWNrcyxcbiAgICAgICAgICAgIGNvbmZsaWN0aW5nLFxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIHNlbGYudW5mcmVlemUgPSBmdW5jdGlvbiB1bmZyZWV6ZSgpIHtcbiAgICAgICAgY29uc3QgZnJvemVuID0gZnJvemVucy5wb3AoKTtcbiAgICAgICAgYXNzZXJ0Tm90U3RyaWN0RXF1YWwoZnJvemVuLCB1bmRlZmluZWQsIHNoaW0pO1xuICAgICAgICAoeyBpbXBsaWVkLCBjaGVja3MsIGNvbmZsaWN0aW5nIH0gPSBmcm96ZW4pO1xuICAgIH07XG4gICAgcmV0dXJuIHNlbGY7XG59XG5cbmxldCBzaGltJDE7XG5mdW5jdGlvbiBZYXJnc1dpdGhTaGltKF9zaGltKSB7XG4gICAgc2hpbSQxID0gX3NoaW07XG4gICAgcmV0dXJuIFlhcmdzO1xufVxuZnVuY3Rpb24gWWFyZ3MocHJvY2Vzc0FyZ3MgPSBbXSwgY3dkID0gc2hpbSQxLnByb2Nlc3MuY3dkKCksIHBhcmVudFJlcXVpcmUpIHtcbiAgICBjb25zdCBzZWxmID0ge307XG4gICAgbGV0IGNvbW1hbmQkMTtcbiAgICBsZXQgY29tcGxldGlvbiQxID0gbnVsbDtcbiAgICBsZXQgZ3JvdXBzID0ge307XG4gICAgY29uc3QgZ2xvYmFsTWlkZGxld2FyZSA9IFtdO1xuICAgIGxldCBvdXRwdXQgPSAnJztcbiAgICBjb25zdCBwcmVzZXJ2ZWRHcm91cHMgPSB7fTtcbiAgICBsZXQgdXNhZ2UkMTtcbiAgICBsZXQgdmFsaWRhdGlvbiQxO1xuICAgIGxldCBoYW5kbGVyRmluaXNoQ29tbWFuZCA9IG51bGw7XG4gICAgY29uc3QgeTE4biA9IHNoaW0kMS55MThuO1xuICAgIHNlbGYubWlkZGxld2FyZSA9IGdsb2JhbE1pZGRsZXdhcmVGYWN0b3J5KGdsb2JhbE1pZGRsZXdhcmUsIHNlbGYpO1xuICAgIHNlbGYuc2NyaXB0TmFtZSA9IGZ1bmN0aW9uIChzY3JpcHROYW1lKSB7XG4gICAgICAgIHNlbGYuY3VzdG9tU2NyaXB0TmFtZSA9IHRydWU7XG4gICAgICAgIHNlbGYuJDAgPSBzY3JpcHROYW1lO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIGxldCBkZWZhdWx0JDA7XG4gICAgaWYgKC9cXGIobm9kZXxpb2pzfGVsZWN0cm9uKShcXC5leGUpPyQvLnRlc3Qoc2hpbSQxLnByb2Nlc3MuYXJndigpWzBdKSkge1xuICAgICAgICBkZWZhdWx0JDAgPSBzaGltJDEucHJvY2Vzcy5hcmd2KCkuc2xpY2UoMSwgMik7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBkZWZhdWx0JDAgPSBzaGltJDEucHJvY2Vzcy5hcmd2KCkuc2xpY2UoMCwgMSk7XG4gICAgfVxuICAgIHNlbGYuJDAgPSBkZWZhdWx0JDBcbiAgICAgICAgLm1hcCh4ID0+IHtcbiAgICAgICAgY29uc3QgYiA9IHJlYmFzZShjd2QsIHgpO1xuICAgICAgICByZXR1cm4geC5tYXRjaCgvXihcXC98KFthLXpBLVpdOik/XFxcXCkvKSAmJiBiLmxlbmd0aCA8IHgubGVuZ3RoID8gYiA6IHg7XG4gICAgfSlcbiAgICAgICAgLmpvaW4oJyAnKVxuICAgICAgICAudHJpbSgpO1xuICAgIGlmIChzaGltJDEuZ2V0RW52KCdfJykgJiYgc2hpbSQxLmdldFByb2Nlc3NBcmd2QmluKCkgPT09IHNoaW0kMS5nZXRFbnYoJ18nKSkge1xuICAgICAgICBzZWxmLiQwID0gc2hpbSQxXG4gICAgICAgICAgICAuZ2V0RW52KCdfJylcbiAgICAgICAgICAgIC5yZXBsYWNlKGAke3NoaW0kMS5wYXRoLmRpcm5hbWUoc2hpbSQxLnByb2Nlc3MuZXhlY1BhdGgoKSl9L2AsICcnKTtcbiAgICB9XG4gICAgY29uc3QgY29udGV4dCA9IHsgcmVzZXRzOiAtMSwgY29tbWFuZHM6IFtdLCBmdWxsQ29tbWFuZHM6IFtdLCBmaWxlczogW10gfTtcbiAgICBzZWxmLmdldENvbnRleHQgPSAoKSA9PiBjb250ZXh0O1xuICAgIGxldCBoYXNPdXRwdXQgPSBmYWxzZTtcbiAgICBsZXQgZXhpdEVycm9yID0gbnVsbDtcbiAgICBzZWxmLmV4aXQgPSAoY29kZSwgZXJyKSA9PiB7XG4gICAgICAgIGhhc091dHB1dCA9IHRydWU7XG4gICAgICAgIGV4aXRFcnJvciA9IGVycjtcbiAgICAgICAgaWYgKGV4aXRQcm9jZXNzKVxuICAgICAgICAgICAgc2hpbSQxLnByb2Nlc3MuZXhpdChjb2RlKTtcbiAgICB9O1xuICAgIGxldCBjb21wbGV0aW9uQ29tbWFuZCA9IG51bGw7XG4gICAgc2VsZi5jb21wbGV0aW9uID0gZnVuY3Rpb24gKGNtZCwgZGVzYywgZm4pIHtcbiAgICAgICAgYXJnc2VydCgnW3N0cmluZ10gW3N0cmluZ3xib29sZWFufGZ1bmN0aW9uXSBbZnVuY3Rpb25dJywgW2NtZCwgZGVzYywgZm5dLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgaWYgKHR5cGVvZiBkZXNjID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBmbiA9IGRlc2M7XG4gICAgICAgICAgICBkZXNjID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGNvbXBsZXRpb25Db21tYW5kID0gY21kIHx8IGNvbXBsZXRpb25Db21tYW5kIHx8ICdjb21wbGV0aW9uJztcbiAgICAgICAgaWYgKCFkZXNjICYmIGRlc2MgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICBkZXNjID0gJ2dlbmVyYXRlIGNvbXBsZXRpb24gc2NyaXB0JztcbiAgICAgICAgfVxuICAgICAgICBzZWxmLmNvbW1hbmQoY29tcGxldGlvbkNvbW1hbmQsIGRlc2MpO1xuICAgICAgICBpZiAoZm4pXG4gICAgICAgICAgICBjb21wbGV0aW9uJDEucmVnaXN0ZXJGdW5jdGlvbihmbik7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgbGV0IG9wdGlvbnM7XG4gICAgc2VsZi5yZXNldE9wdGlvbnMgPSBzZWxmLnJlc2V0ID0gZnVuY3Rpb24gcmVzZXRPcHRpb25zKGFsaWFzZXMgPSB7fSkge1xuICAgICAgICBjb250ZXh0LnJlc2V0cysrO1xuICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICAgICAgY29uc3QgdG1wT3B0aW9ucyA9IHt9O1xuICAgICAgICB0bXBPcHRpb25zLmxvY2FsID0gb3B0aW9ucy5sb2NhbCA/IG9wdGlvbnMubG9jYWwgOiBbXTtcbiAgICAgICAgdG1wT3B0aW9ucy5jb25maWdPYmplY3RzID0gb3B0aW9ucy5jb25maWdPYmplY3RzXG4gICAgICAgICAgICA/IG9wdGlvbnMuY29uZmlnT2JqZWN0c1xuICAgICAgICAgICAgOiBbXTtcbiAgICAgICAgY29uc3QgbG9jYWxMb29rdXAgPSB7fTtcbiAgICAgICAgdG1wT3B0aW9ucy5sb2NhbC5mb3JFYWNoKGwgPT4ge1xuICAgICAgICAgICAgbG9jYWxMb29rdXBbbF0gPSB0cnVlO1xuICAgICAgICAgICAgKGFsaWFzZXNbbF0gfHwgW10pLmZvckVhY2goYSA9PiB7XG4gICAgICAgICAgICAgICAgbG9jYWxMb29rdXBbYV0gPSB0cnVlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3QuYXNzaWduKHByZXNlcnZlZEdyb3VwcywgT2JqZWN0LmtleXMoZ3JvdXBzKS5yZWR1Y2UoKGFjYywgZ3JvdXBOYW1lKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBrZXlzID0gZ3JvdXBzW2dyb3VwTmFtZV0uZmlsdGVyKGtleSA9PiAhKGtleSBpbiBsb2NhbExvb2t1cCkpO1xuICAgICAgICAgICAgaWYgKGtleXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGFjY1tncm91cE5hbWVdID0ga2V5cztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH0sIHt9KSk7XG4gICAgICAgIGdyb3VwcyA9IHt9O1xuICAgICAgICBjb25zdCBhcnJheU9wdGlvbnMgPSBbXG4gICAgICAgICAgICAnYXJyYXknLFxuICAgICAgICAgICAgJ2Jvb2xlYW4nLFxuICAgICAgICAgICAgJ3N0cmluZycsXG4gICAgICAgICAgICAnc2tpcFZhbGlkYXRpb24nLFxuICAgICAgICAgICAgJ2NvdW50JyxcbiAgICAgICAgICAgICdub3JtYWxpemUnLFxuICAgICAgICAgICAgJ251bWJlcicsXG4gICAgICAgICAgICAnaGlkZGVuT3B0aW9ucycsXG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IG9iamVjdE9wdGlvbnMgPSBbXG4gICAgICAgICAgICAnbmFyZycsXG4gICAgICAgICAgICAna2V5JyxcbiAgICAgICAgICAgICdhbGlhcycsXG4gICAgICAgICAgICAnZGVmYXVsdCcsXG4gICAgICAgICAgICAnZGVmYXVsdERlc2NyaXB0aW9uJyxcbiAgICAgICAgICAgICdjb25maWcnLFxuICAgICAgICAgICAgJ2Nob2ljZXMnLFxuICAgICAgICAgICAgJ2RlbWFuZGVkT3B0aW9ucycsXG4gICAgICAgICAgICAnZGVtYW5kZWRDb21tYW5kcycsXG4gICAgICAgICAgICAnY29lcmNlJyxcbiAgICAgICAgICAgICdkZXByZWNhdGVkT3B0aW9ucycsXG4gICAgICAgIF07XG4gICAgICAgIGFycmF5T3B0aW9ucy5mb3JFYWNoKGsgPT4ge1xuICAgICAgICAgICAgdG1wT3B0aW9uc1trXSA9IChvcHRpb25zW2tdIHx8IFtdKS5maWx0ZXIoKGspID0+ICFsb2NhbExvb2t1cFtrXSk7XG4gICAgICAgIH0pO1xuICAgICAgICBvYmplY3RPcHRpb25zLmZvckVhY2goKGspID0+IHtcbiAgICAgICAgICAgIHRtcE9wdGlvbnNba10gPSBvYmpGaWx0ZXIob3B0aW9uc1trXSwgayA9PiAhbG9jYWxMb29rdXBba10pO1xuICAgICAgICB9KTtcbiAgICAgICAgdG1wT3B0aW9ucy5lbnZQcmVmaXggPSBvcHRpb25zLmVudlByZWZpeDtcbiAgICAgICAgb3B0aW9ucyA9IHRtcE9wdGlvbnM7XG4gICAgICAgIHVzYWdlJDEgPSB1c2FnZSQxID8gdXNhZ2UkMS5yZXNldChsb2NhbExvb2t1cCkgOiB1c2FnZShzZWxmLCB5MThuLCBzaGltJDEpO1xuICAgICAgICB2YWxpZGF0aW9uJDEgPSB2YWxpZGF0aW9uJDFcbiAgICAgICAgICAgID8gdmFsaWRhdGlvbiQxLnJlc2V0KGxvY2FsTG9va3VwKVxuICAgICAgICAgICAgOiB2YWxpZGF0aW9uKHNlbGYsIHVzYWdlJDEsIHkxOG4sIHNoaW0kMSk7XG4gICAgICAgIGNvbW1hbmQkMSA9IGNvbW1hbmQkMVxuICAgICAgICAgICAgPyBjb21tYW5kJDEucmVzZXQoKVxuICAgICAgICAgICAgOiBjb21tYW5kKHNlbGYsIHVzYWdlJDEsIHZhbGlkYXRpb24kMSwgZ2xvYmFsTWlkZGxld2FyZSwgc2hpbSQxKTtcbiAgICAgICAgaWYgKCFjb21wbGV0aW9uJDEpXG4gICAgICAgICAgICBjb21wbGV0aW9uJDEgPSBjb21wbGV0aW9uKHNlbGYsIHVzYWdlJDEsIGNvbW1hbmQkMSwgc2hpbSQxKTtcbiAgICAgICAgY29tcGxldGlvbkNvbW1hbmQgPSBudWxsO1xuICAgICAgICBvdXRwdXQgPSAnJztcbiAgICAgICAgZXhpdEVycm9yID0gbnVsbDtcbiAgICAgICAgaGFzT3V0cHV0ID0gZmFsc2U7XG4gICAgICAgIHNlbGYucGFyc2VkID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5yZXNldE9wdGlvbnMoKTtcbiAgICBjb25zdCBmcm96ZW5zID0gW107XG4gICAgZnVuY3Rpb24gZnJlZXplKCkge1xuICAgICAgICBmcm96ZW5zLnB1c2goe1xuICAgICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICAgIGNvbmZpZ09iamVjdHM6IG9wdGlvbnMuY29uZmlnT2JqZWN0cy5zbGljZSgwKSxcbiAgICAgICAgICAgIGV4aXRQcm9jZXNzLFxuICAgICAgICAgICAgZ3JvdXBzLFxuICAgICAgICAgICAgc3RyaWN0LFxuICAgICAgICAgICAgc3RyaWN0Q29tbWFuZHMsXG4gICAgICAgICAgICBzdHJpY3RPcHRpb25zLFxuICAgICAgICAgICAgY29tcGxldGlvbkNvbW1hbmQsXG4gICAgICAgICAgICBvdXRwdXQsXG4gICAgICAgICAgICBleGl0RXJyb3IsXG4gICAgICAgICAgICBoYXNPdXRwdXQsXG4gICAgICAgICAgICBwYXJzZWQ6IHNlbGYucGFyc2VkLFxuICAgICAgICAgICAgcGFyc2VGbixcbiAgICAgICAgICAgIHBhcnNlQ29udGV4dCxcbiAgICAgICAgICAgIGhhbmRsZXJGaW5pc2hDb21tYW5kLFxuICAgICAgICB9KTtcbiAgICAgICAgdXNhZ2UkMS5mcmVlemUoKTtcbiAgICAgICAgdmFsaWRhdGlvbiQxLmZyZWV6ZSgpO1xuICAgICAgICBjb21tYW5kJDEuZnJlZXplKCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHVuZnJlZXplKCkge1xuICAgICAgICBjb25zdCBmcm96ZW4gPSBmcm96ZW5zLnBvcCgpO1xuICAgICAgICBhc3NlcnROb3RTdHJpY3RFcXVhbChmcm96ZW4sIHVuZGVmaW5lZCwgc2hpbSQxKTtcbiAgICAgICAgbGV0IGNvbmZpZ09iamVjdHM7XG4gICAgICAgICh7XG4gICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgICAgY29uZmlnT2JqZWN0cyxcbiAgICAgICAgICAgIGV4aXRQcm9jZXNzLFxuICAgICAgICAgICAgZ3JvdXBzLFxuICAgICAgICAgICAgb3V0cHV0LFxuICAgICAgICAgICAgZXhpdEVycm9yLFxuICAgICAgICAgICAgaGFzT3V0cHV0LFxuICAgICAgICAgICAgcGFyc2VkOiBzZWxmLnBhcnNlZCxcbiAgICAgICAgICAgIHN0cmljdCxcbiAgICAgICAgICAgIHN0cmljdENvbW1hbmRzLFxuICAgICAgICAgICAgc3RyaWN0T3B0aW9ucyxcbiAgICAgICAgICAgIGNvbXBsZXRpb25Db21tYW5kLFxuICAgICAgICAgICAgcGFyc2VGbixcbiAgICAgICAgICAgIHBhcnNlQ29udGV4dCxcbiAgICAgICAgICAgIGhhbmRsZXJGaW5pc2hDb21tYW5kLFxuICAgICAgICB9ID0gZnJvemVuKTtcbiAgICAgICAgb3B0aW9ucy5jb25maWdPYmplY3RzID0gY29uZmlnT2JqZWN0cztcbiAgICAgICAgdXNhZ2UkMS51bmZyZWV6ZSgpO1xuICAgICAgICB2YWxpZGF0aW9uJDEudW5mcmVlemUoKTtcbiAgICAgICAgY29tbWFuZCQxLnVuZnJlZXplKCk7XG4gICAgfVxuICAgIHNlbGYuYm9vbGVhbiA9IGZ1bmN0aW9uIChrZXlzKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxhcnJheXxzdHJpbmc+JywgW2tleXNdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgcG9wdWxhdGVQYXJzZXJIaW50QXJyYXkoJ2Jvb2xlYW4nLCBrZXlzKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLmFycmF5ID0gZnVuY3Rpb24gKGtleXMpIHtcbiAgICAgICAgYXJnc2VydCgnPGFycmF5fHN0cmluZz4nLCBba2V5c10sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBwb3B1bGF0ZVBhcnNlckhpbnRBcnJheSgnYXJyYXknLCBrZXlzKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLm51bWJlciA9IGZ1bmN0aW9uIChrZXlzKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxhcnJheXxzdHJpbmc+JywgW2tleXNdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgcG9wdWxhdGVQYXJzZXJIaW50QXJyYXkoJ251bWJlcicsIGtleXMpO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIHNlbGYubm9ybWFsaXplID0gZnVuY3Rpb24gKGtleXMpIHtcbiAgICAgICAgYXJnc2VydCgnPGFycmF5fHN0cmluZz4nLCBba2V5c10sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBwb3B1bGF0ZVBhcnNlckhpbnRBcnJheSgnbm9ybWFsaXplJywga2V5cyk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5jb3VudCA9IGZ1bmN0aW9uIChrZXlzKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxhcnJheXxzdHJpbmc+JywgW2tleXNdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgcG9wdWxhdGVQYXJzZXJIaW50QXJyYXkoJ2NvdW50Jywga2V5cyk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5zdHJpbmcgPSBmdW5jdGlvbiAoa2V5cykge1xuICAgICAgICBhcmdzZXJ0KCc8YXJyYXl8c3RyaW5nPicsIFtrZXlzXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIHBvcHVsYXRlUGFyc2VySGludEFycmF5KCdzdHJpbmcnLCBrZXlzKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLnJlcXVpcmVzQXJnID0gZnVuY3Rpb24gKGtleXMpIHtcbiAgICAgICAgYXJnc2VydCgnPGFycmF5fHN0cmluZ3xvYmplY3Q+IFtudW1iZXJdJywgW2tleXNdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgaWYgKHR5cGVvZiBrZXlzID09PSAnc3RyaW5nJyAmJiBvcHRpb25zLm5hcmdba2V5c10pIHtcbiAgICAgICAgICAgIHJldHVybiBzZWxmO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcG9wdWxhdGVQYXJzZXJIaW50U2luZ2xlVmFsdWVEaWN0aW9uYXJ5KHNlbGYucmVxdWlyZXNBcmcsICduYXJnJywga2V5cywgTmFOKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIHNlbGYuc2tpcFZhbGlkYXRpb24gPSBmdW5jdGlvbiAoa2V5cykge1xuICAgICAgICBhcmdzZXJ0KCc8YXJyYXl8c3RyaW5nPicsIFtrZXlzXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIHBvcHVsYXRlUGFyc2VySGludEFycmF5KCdza2lwVmFsaWRhdGlvbicsIGtleXMpO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIGZ1bmN0aW9uIHBvcHVsYXRlUGFyc2VySGludEFycmF5KHR5cGUsIGtleXMpIHtcbiAgICAgICAga2V5cyA9IFtdLmNvbmNhdChrZXlzKTtcbiAgICAgICAga2V5cy5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICBrZXkgPSBzYW5pdGl6ZUtleShrZXkpO1xuICAgICAgICAgICAgb3B0aW9uc1t0eXBlXS5wdXNoKGtleSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBzZWxmLm5hcmdzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgICAgYXJnc2VydCgnPHN0cmluZ3xvYmplY3R8YXJyYXk+IFtudW1iZXJdJywgW2tleSwgdmFsdWVdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgcG9wdWxhdGVQYXJzZXJIaW50U2luZ2xlVmFsdWVEaWN0aW9uYXJ5KHNlbGYubmFyZ3MsICduYXJnJywga2V5LCB2YWx1ZSk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5jaG9pY2VzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgICAgYXJnc2VydCgnPG9iamVjdHxzdHJpbmd8YXJyYXk+IFtzdHJpbmd8YXJyYXldJywgW2tleSwgdmFsdWVdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgcG9wdWxhdGVQYXJzZXJIaW50QXJyYXlEaWN0aW9uYXJ5KHNlbGYuY2hvaWNlcywgJ2Nob2ljZXMnLCBrZXksIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLmFsaWFzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgICAgYXJnc2VydCgnPG9iamVjdHxzdHJpbmd8YXJyYXk+IFtzdHJpbmd8YXJyYXldJywgW2tleSwgdmFsdWVdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgcG9wdWxhdGVQYXJzZXJIaW50QXJyYXlEaWN0aW9uYXJ5KHNlbGYuYWxpYXMsICdhbGlhcycsIGtleSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIHNlbGYuZGVmYXVsdCA9IHNlbGYuZGVmYXVsdHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSwgZGVmYXVsdERlc2NyaXB0aW9uKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxvYmplY3R8c3RyaW5nfGFycmF5PiBbKl0gW3N0cmluZ10nLCBba2V5LCB2YWx1ZSwgZGVmYXVsdERlc2NyaXB0aW9uXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGlmIChkZWZhdWx0RGVzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIGFzc2VydFNpbmdsZUtleShrZXksIHNoaW0kMSk7XG4gICAgICAgICAgICBvcHRpb25zLmRlZmF1bHREZXNjcmlwdGlvbltrZXldID0gZGVmYXVsdERlc2NyaXB0aW9uO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGFzc2VydFNpbmdsZUtleShrZXksIHNoaW0kMSk7XG4gICAgICAgICAgICBpZiAoIW9wdGlvbnMuZGVmYXVsdERlc2NyaXB0aW9uW2tleV0pXG4gICAgICAgICAgICAgICAgb3B0aW9ucy5kZWZhdWx0RGVzY3JpcHRpb25ba2V5XSA9IHVzYWdlJDEuZnVuY3Rpb25EZXNjcmlwdGlvbih2YWx1ZSk7XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLmNhbGwoKTtcbiAgICAgICAgfVxuICAgICAgICBwb3B1bGF0ZVBhcnNlckhpbnRTaW5nbGVWYWx1ZURpY3Rpb25hcnkoc2VsZi5kZWZhdWx0LCAnZGVmYXVsdCcsIGtleSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIHNlbGYuZGVzY3JpYmUgPSBmdW5jdGlvbiAoa2V5LCBkZXNjKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxvYmplY3R8c3RyaW5nfGFycmF5PiBbc3RyaW5nXScsIFtrZXksIGRlc2NdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgc2V0S2V5KGtleSwgdHJ1ZSk7XG4gICAgICAgIHVzYWdlJDEuZGVzY3JpYmUoa2V5LCBkZXNjKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBmdW5jdGlvbiBzZXRLZXkoa2V5LCBzZXQpIHtcbiAgICAgICAgcG9wdWxhdGVQYXJzZXJIaW50U2luZ2xlVmFsdWVEaWN0aW9uYXJ5KHNldEtleSwgJ2tleScsIGtleSwgc2V0KTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRlbWFuZE9wdGlvbihrZXlzLCBtc2cpIHtcbiAgICAgICAgYXJnc2VydCgnPG9iamVjdHxzdHJpbmd8YXJyYXk+IFtzdHJpbmddJywgW2tleXMsIG1zZ10sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBwb3B1bGF0ZVBhcnNlckhpbnRTaW5nbGVWYWx1ZURpY3Rpb25hcnkoc2VsZi5kZW1hbmRPcHRpb24sICdkZW1hbmRlZE9wdGlvbnMnLCBrZXlzLCBtc2cpO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9XG4gICAgc2VsZi5kZW1hbmRPcHRpb24gPSBkZW1hbmRPcHRpb247XG4gICAgc2VsZi5jb2VyY2UgPSBmdW5jdGlvbiAoa2V5cywgdmFsdWUpIHtcbiAgICAgICAgYXJnc2VydCgnPG9iamVjdHxzdHJpbmd8YXJyYXk+IFtmdW5jdGlvbl0nLCBba2V5cywgdmFsdWVdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgcG9wdWxhdGVQYXJzZXJIaW50U2luZ2xlVmFsdWVEaWN0aW9uYXJ5KHNlbGYuY29lcmNlLCAnY29lcmNlJywga2V5cywgdmFsdWUpO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIGZ1bmN0aW9uIHBvcHVsYXRlUGFyc2VySGludFNpbmdsZVZhbHVlRGljdGlvbmFyeShidWlsZGVyLCB0eXBlLCBrZXksIHZhbHVlKSB7XG4gICAgICAgIHBvcHVsYXRlUGFyc2VySGludERpY3Rpb25hcnkoYnVpbGRlciwgdHlwZSwga2V5LCB2YWx1ZSwgKHR5cGUsIGtleSwgdmFsdWUpID0+IHtcbiAgICAgICAgICAgIG9wdGlvbnNbdHlwZV1ba2V5XSA9IHZhbHVlO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcG9wdWxhdGVQYXJzZXJIaW50QXJyYXlEaWN0aW9uYXJ5KGJ1aWxkZXIsIHR5cGUsIGtleSwgdmFsdWUpIHtcbiAgICAgICAgcG9wdWxhdGVQYXJzZXJIaW50RGljdGlvbmFyeShidWlsZGVyLCB0eXBlLCBrZXksIHZhbHVlLCAodHlwZSwga2V5LCB2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgb3B0aW9uc1t0eXBlXVtrZXldID0gKG9wdGlvbnNbdHlwZV1ba2V5XSB8fCBbXSkuY29uY2F0KHZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBvcHVsYXRlUGFyc2VySGludERpY3Rpb25hcnkoYnVpbGRlciwgdHlwZSwga2V5LCB2YWx1ZSwgc2luZ2xlS2V5SGFuZGxlcikge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShrZXkpKSB7XG4gICAgICAgICAgICBrZXkuZm9yRWFjaChrID0+IHtcbiAgICAgICAgICAgICAgICBidWlsZGVyKGssIHZhbHVlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCgoa2V5KSA9PiB0eXBlb2Yga2V5ID09PSAnb2JqZWN0Jykoa2V5KSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBrIG9mIG9iamVjdEtleXMoa2V5KSkge1xuICAgICAgICAgICAgICAgIGJ1aWxkZXIoaywga2V5W2tdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHNpbmdsZUtleUhhbmRsZXIodHlwZSwgc2FuaXRpemVLZXkoa2V5KSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNhbml0aXplS2V5KGtleSkge1xuICAgICAgICBpZiAoa2V5ID09PSAnX19wcm90b19fJylcbiAgICAgICAgICAgIHJldHVybiAnX19fcHJvdG9fX18nO1xuICAgICAgICByZXR1cm4ga2V5O1xuICAgIH1cbiAgICBmdW5jdGlvbiBkZWxldGVGcm9tUGFyc2VySGludE9iamVjdChvcHRpb25LZXkpIHtcbiAgICAgICAgb2JqZWN0S2V5cyhvcHRpb25zKS5mb3JFYWNoKChoaW50S2V5KSA9PiB7XG4gICAgICAgICAgICBpZiAoKChrZXkpID0+IGtleSA9PT0gJ2NvbmZpZ09iamVjdHMnKShoaW50S2V5KSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjb25zdCBoaW50ID0gb3B0aW9uc1toaW50S2V5XTtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGhpbnQpKSB7XG4gICAgICAgICAgICAgICAgaWYgKH5oaW50LmluZGV4T2Yob3B0aW9uS2V5KSlcbiAgICAgICAgICAgICAgICAgICAgaGludC5zcGxpY2UoaGludC5pbmRleE9mKG9wdGlvbktleSksIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIGhpbnQgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIGhpbnRbb3B0aW9uS2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGRlbGV0ZSB1c2FnZSQxLmdldERlc2NyaXB0aW9ucygpW29wdGlvbktleV07XG4gICAgfVxuICAgIHNlbGYuY29uZmlnID0gZnVuY3Rpb24gY29uZmlnKGtleSA9ICdjb25maWcnLCBtc2csIHBhcnNlRm4pIHtcbiAgICAgICAgYXJnc2VydCgnW29iamVjdHxzdHJpbmddIFtzdHJpbmd8ZnVuY3Rpb25dIFtmdW5jdGlvbl0nLCBba2V5LCBtc2csIHBhcnNlRm5dLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgaWYgKHR5cGVvZiBrZXkgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KGtleSkpIHtcbiAgICAgICAgICAgIGtleSA9IGFwcGx5RXh0ZW5kcyhrZXksIGN3ZCwgc2VsZi5nZXRQYXJzZXJDb25maWd1cmF0aW9uKClbJ2RlZXAtbWVyZ2UtY29uZmlnJ10gfHwgZmFsc2UsIHNoaW0kMSk7XG4gICAgICAgICAgICBvcHRpb25zLmNvbmZpZ09iamVjdHMgPSAob3B0aW9ucy5jb25maWdPYmplY3RzIHx8IFtdKS5jb25jYXQoa2V5KTtcbiAgICAgICAgICAgIHJldHVybiBzZWxmO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgbXNnID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBwYXJzZUZuID0gbXNnO1xuICAgICAgICAgICAgbXNnID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHNlbGYuZGVzY3JpYmUoa2V5LCBtc2cgfHwgdXNhZ2UkMS5kZWZlclkxOG5Mb29rdXAoJ1BhdGggdG8gSlNPTiBjb25maWcgZmlsZScpKTtcbiAgICAgICAgKEFycmF5LmlzQXJyYXkoa2V5KSA/IGtleSA6IFtrZXldKS5mb3JFYWNoKGsgPT4ge1xuICAgICAgICAgICAgb3B0aW9ucy5jb25maWdba10gPSBwYXJzZUZuIHx8IHRydWU7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIHNlbGYuZXhhbXBsZSA9IGZ1bmN0aW9uIChjbWQsIGRlc2NyaXB0aW9uKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxzdHJpbmd8YXJyYXk+IFtzdHJpbmddJywgW2NtZCwgZGVzY3JpcHRpb25dLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY21kKSkge1xuICAgICAgICAgICAgY21kLmZvckVhY2goZXhhbXBsZVBhcmFtcyA9PiBzZWxmLmV4YW1wbGUoLi4uZXhhbXBsZVBhcmFtcykpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdXNhZ2UkMS5leGFtcGxlKGNtZCwgZGVzY3JpcHRpb24pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5jb21tYW5kID0gZnVuY3Rpb24gKGNtZCwgZGVzY3JpcHRpb24sIGJ1aWxkZXIsIGhhbmRsZXIsIG1pZGRsZXdhcmVzLCBkZXByZWNhdGVkKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxzdHJpbmd8YXJyYXl8b2JqZWN0PiBbc3RyaW5nfGJvb2xlYW5dIFtmdW5jdGlvbnxvYmplY3RdIFtmdW5jdGlvbl0gW2FycmF5XSBbYm9vbGVhbnxzdHJpbmddJywgW2NtZCwgZGVzY3JpcHRpb24sIGJ1aWxkZXIsIGhhbmRsZXIsIG1pZGRsZXdhcmVzLCBkZXByZWNhdGVkXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGNvbW1hbmQkMS5hZGRIYW5kbGVyKGNtZCwgZGVzY3JpcHRpb24sIGJ1aWxkZXIsIGhhbmRsZXIsIG1pZGRsZXdhcmVzLCBkZXByZWNhdGVkKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLmNvbW1hbmREaXIgPSBmdW5jdGlvbiAoZGlyLCBvcHRzKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxzdHJpbmc+IFtvYmplY3RdJywgW2Rpciwgb3B0c10sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBjb25zdCByZXEgPSBwYXJlbnRSZXF1aXJlIHx8IHNoaW0kMS5yZXF1aXJlO1xuICAgICAgICBjb21tYW5kJDEuYWRkRGlyZWN0b3J5KGRpciwgc2VsZi5nZXRDb250ZXh0KCksIHJlcSwgc2hpbSQxLmdldENhbGxlckZpbGUoKSwgb3B0cyk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5kZW1hbmQgPSBzZWxmLnJlcXVpcmVkID0gc2VsZi5yZXF1aXJlID0gZnVuY3Rpb24gZGVtYW5kKGtleXMsIG1heCwgbXNnKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG1heCkpIHtcbiAgICAgICAgICAgIG1heC5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgYXNzZXJ0Tm90U3RyaWN0RXF1YWwobXNnLCB0cnVlLCBzaGltJDEpO1xuICAgICAgICAgICAgICAgIGRlbWFuZE9wdGlvbihrZXksIG1zZyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIG1heCA9IEluZmluaXR5O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiBtYXggIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICBtc2cgPSBtYXg7XG4gICAgICAgICAgICBtYXggPSBJbmZpbml0eTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGtleXMgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICBhc3NlcnROb3RTdHJpY3RFcXVhbChtc2csIHRydWUsIHNoaW0kMSk7XG4gICAgICAgICAgICBzZWxmLmRlbWFuZENvbW1hbmQoa2V5cywgbWF4LCBtc2csIG1zZyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShrZXlzKSkge1xuICAgICAgICAgICAga2V5cy5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgYXNzZXJ0Tm90U3RyaWN0RXF1YWwobXNnLCB0cnVlLCBzaGltJDEpO1xuICAgICAgICAgICAgICAgIGRlbWFuZE9wdGlvbihrZXksIG1zZyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgbXNnID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGRlbWFuZE9wdGlvbihrZXlzLCBtc2cpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobXNnID09PSB0cnVlIHx8IHR5cGVvZiBtc2cgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgZGVtYW5kT3B0aW9uKGtleXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5kZW1hbmRDb21tYW5kID0gZnVuY3Rpb24gZGVtYW5kQ29tbWFuZChtaW4gPSAxLCBtYXgsIG1pbk1zZywgbWF4TXNnKSB7XG4gICAgICAgIGFyZ3NlcnQoJ1tudW1iZXJdIFtudW1iZXJ8c3RyaW5nXSBbc3RyaW5nfG51bGx8dW5kZWZpbmVkXSBbc3RyaW5nfG51bGx8dW5kZWZpbmVkXScsIFttaW4sIG1heCwgbWluTXNnLCBtYXhNc2ddLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgaWYgKHR5cGVvZiBtYXggIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICBtaW5Nc2cgPSBtYXg7XG4gICAgICAgICAgICBtYXggPSBJbmZpbml0eTtcbiAgICAgICAgfVxuICAgICAgICBzZWxmLmdsb2JhbCgnXycsIGZhbHNlKTtcbiAgICAgICAgb3B0aW9ucy5kZW1hbmRlZENvbW1hbmRzLl8gPSB7XG4gICAgICAgICAgICBtaW4sXG4gICAgICAgICAgICBtYXgsXG4gICAgICAgICAgICBtaW5Nc2csXG4gICAgICAgICAgICBtYXhNc2csXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5nZXREZW1hbmRlZE9wdGlvbnMgPSAoKSA9PiB7XG4gICAgICAgIGFyZ3NlcnQoW10sIDApO1xuICAgICAgICByZXR1cm4gb3B0aW9ucy5kZW1hbmRlZE9wdGlvbnM7XG4gICAgfTtcbiAgICBzZWxmLmdldERlbWFuZGVkQ29tbWFuZHMgPSAoKSA9PiB7XG4gICAgICAgIGFyZ3NlcnQoW10sIDApO1xuICAgICAgICByZXR1cm4gb3B0aW9ucy5kZW1hbmRlZENvbW1hbmRzO1xuICAgIH07XG4gICAgc2VsZi5kZXByZWNhdGVPcHRpb24gPSBmdW5jdGlvbiBkZXByZWNhdGVPcHRpb24ob3B0aW9uLCBtZXNzYWdlKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxzdHJpbmc+IFtzdHJpbmd8Ym9vbGVhbl0nLCBbb3B0aW9uLCBtZXNzYWdlXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIG9wdGlvbnMuZGVwcmVjYXRlZE9wdGlvbnNbb3B0aW9uXSA9IG1lc3NhZ2U7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5nZXREZXByZWNhdGVkT3B0aW9ucyA9ICgpID0+IHtcbiAgICAgICAgYXJnc2VydChbXSwgMCk7XG4gICAgICAgIHJldHVybiBvcHRpb25zLmRlcHJlY2F0ZWRPcHRpb25zO1xuICAgIH07XG4gICAgc2VsZi5pbXBsaWVzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgICAgYXJnc2VydCgnPHN0cmluZ3xvYmplY3Q+IFtudW1iZXJ8c3RyaW5nfGFycmF5XScsIFtrZXksIHZhbHVlXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIHZhbGlkYXRpb24kMS5pbXBsaWVzKGtleSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIHNlbGYuY29uZmxpY3RzID0gZnVuY3Rpb24gKGtleTEsIGtleTIpIHtcbiAgICAgICAgYXJnc2VydCgnPHN0cmluZ3xvYmplY3Q+IFtzdHJpbmd8YXJyYXldJywgW2tleTEsIGtleTJdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgdmFsaWRhdGlvbiQxLmNvbmZsaWN0cyhrZXkxLCBrZXkyKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLnVzYWdlID0gZnVuY3Rpb24gKG1zZywgZGVzY3JpcHRpb24sIGJ1aWxkZXIsIGhhbmRsZXIpIHtcbiAgICAgICAgYXJnc2VydCgnPHN0cmluZ3xudWxsfHVuZGVmaW5lZD4gW3N0cmluZ3xib29sZWFuXSBbZnVuY3Rpb258b2JqZWN0XSBbZnVuY3Rpb25dJywgW21zZywgZGVzY3JpcHRpb24sIGJ1aWxkZXIsIGhhbmRsZXJdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgaWYgKGRlc2NyaXB0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGFzc2VydE5vdFN0cmljdEVxdWFsKG1zZywgbnVsbCwgc2hpbSQxKTtcbiAgICAgICAgICAgIGlmICgobXNnIHx8ICcnKS5tYXRjaCgvXlxcJDAoIHwkKS8pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuY29tbWFuZChtc2csIGRlc2NyaXB0aW9uLCBidWlsZGVyLCBoYW5kbGVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBZRXJyb3IoJy51c2FnZSgpIGRlc2NyaXB0aW9uIG11c3Qgc3RhcnQgd2l0aCAkMCBpZiBiZWluZyB1c2VkIGFzIGFsaWFzIGZvciAuY29tbWFuZCgpJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB1c2FnZSQxLnVzYWdlKG1zZyk7XG4gICAgICAgICAgICByZXR1cm4gc2VsZjtcbiAgICAgICAgfVxuICAgIH07XG4gICAgc2VsZi5lcGlsb2d1ZSA9IHNlbGYuZXBpbG9nID0gZnVuY3Rpb24gKG1zZykge1xuICAgICAgICBhcmdzZXJ0KCc8c3RyaW5nPicsIFttc2ddLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgdXNhZ2UkMS5lcGlsb2cobXNnKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLmZhaWwgPSBmdW5jdGlvbiAoZikge1xuICAgICAgICBhcmdzZXJ0KCc8ZnVuY3Rpb24+JywgW2ZdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgdXNhZ2UkMS5mYWlsRm4oZik7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5vbkZpbmlzaENvbW1hbmQgPSBmdW5jdGlvbiAoZikge1xuICAgICAgICBhcmdzZXJ0KCc8ZnVuY3Rpb24+JywgW2ZdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgaGFuZGxlckZpbmlzaENvbW1hbmQgPSBmO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIHNlbGYuZ2V0SGFuZGxlckZpbmlzaENvbW1hbmQgPSAoKSA9PiBoYW5kbGVyRmluaXNoQ29tbWFuZDtcbiAgICBzZWxmLmNoZWNrID0gZnVuY3Rpb24gKGYsIF9nbG9iYWwpIHtcbiAgICAgICAgYXJnc2VydCgnPGZ1bmN0aW9uPiBbYm9vbGVhbl0nLCBbZiwgX2dsb2JhbF0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICB2YWxpZGF0aW9uJDEuY2hlY2soZiwgX2dsb2JhbCAhPT0gZmFsc2UpO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIHNlbGYuZ2xvYmFsID0gZnVuY3Rpb24gZ2xvYmFsKGdsb2JhbHMsIGdsb2JhbCkge1xuICAgICAgICBhcmdzZXJ0KCc8c3RyaW5nfGFycmF5PiBbYm9vbGVhbl0nLCBbZ2xvYmFscywgZ2xvYmFsXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGdsb2JhbHMgPSBbXS5jb25jYXQoZ2xvYmFscyk7XG4gICAgICAgIGlmIChnbG9iYWwgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICBvcHRpb25zLmxvY2FsID0gb3B0aW9ucy5sb2NhbC5maWx0ZXIobCA9PiBnbG9iYWxzLmluZGV4T2YobCkgPT09IC0xKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGdsb2JhbHMuZm9yRWFjaChnID0+IHtcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5sb2NhbC5pbmRleE9mKGcpID09PSAtMSlcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5sb2NhbC5wdXNoKGcpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLnBrZ0NvbmYgPSBmdW5jdGlvbiBwa2dDb25mKGtleSwgcm9vdFBhdGgpIHtcbiAgICAgICAgYXJnc2VydCgnPHN0cmluZz4gW3N0cmluZ10nLCBba2V5LCByb290UGF0aF0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBsZXQgY29uZiA9IG51bGw7XG4gICAgICAgIGNvbnN0IG9iaiA9IHBrZ1VwKHJvb3RQYXRoIHx8IGN3ZCk7XG4gICAgICAgIGlmIChvYmpba2V5XSAmJiB0eXBlb2Ygb2JqW2tleV0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBjb25mID0gYXBwbHlFeHRlbmRzKG9ialtrZXldLCByb290UGF0aCB8fCBjd2QsIHNlbGYuZ2V0UGFyc2VyQ29uZmlndXJhdGlvbigpWydkZWVwLW1lcmdlLWNvbmZpZyddIHx8IGZhbHNlLCBzaGltJDEpO1xuICAgICAgICAgICAgb3B0aW9ucy5jb25maWdPYmplY3RzID0gKG9wdGlvbnMuY29uZmlnT2JqZWN0cyB8fCBbXSkuY29uY2F0KGNvbmYpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgY29uc3QgcGtncyA9IHt9O1xuICAgIGZ1bmN0aW9uIHBrZ1VwKHJvb3RQYXRoKSB7XG4gICAgICAgIGNvbnN0IG5wYXRoID0gcm9vdFBhdGggfHwgJyonO1xuICAgICAgICBpZiAocGtnc1tucGF0aF0pXG4gICAgICAgICAgICByZXR1cm4gcGtnc1tucGF0aF07XG4gICAgICAgIGxldCBvYmogPSB7fTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxldCBzdGFydERpciA9IHJvb3RQYXRoIHx8IHNoaW0kMS5tYWluRmlsZW5hbWU7XG4gICAgICAgICAgICBpZiAoIXJvb3RQYXRoICYmIHNoaW0kMS5wYXRoLmV4dG5hbWUoc3RhcnREaXIpKSB7XG4gICAgICAgICAgICAgICAgc3RhcnREaXIgPSBzaGltJDEucGF0aC5kaXJuYW1lKHN0YXJ0RGlyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHBrZ0pzb25QYXRoID0gc2hpbSQxLmZpbmRVcChzdGFydERpciwgKGRpciwgbmFtZXMpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAobmFtZXMuaW5jbHVkZXMoJ3BhY2thZ2UuanNvbicpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAncGFja2FnZS5qc29uJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBhc3NlcnROb3RTdHJpY3RFcXVhbChwa2dKc29uUGF0aCwgdW5kZWZpbmVkLCBzaGltJDEpO1xuICAgICAgICAgICAgb2JqID0gSlNPTi5wYXJzZShzaGltJDEucmVhZEZpbGVTeW5jKHBrZ0pzb25QYXRoLCAndXRmOCcpKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoX25vb3ApIHsgfVxuICAgICAgICBwa2dzW25wYXRoXSA9IG9iaiB8fCB7fTtcbiAgICAgICAgcmV0dXJuIHBrZ3NbbnBhdGhdO1xuICAgIH1cbiAgICBsZXQgcGFyc2VGbiA9IG51bGw7XG4gICAgbGV0IHBhcnNlQ29udGV4dCA9IG51bGw7XG4gICAgc2VsZi5wYXJzZSA9IGZ1bmN0aW9uIHBhcnNlKGFyZ3MsIHNob3J0Q2lyY3VpdCwgX3BhcnNlRm4pIHtcbiAgICAgICAgYXJnc2VydCgnW3N0cmluZ3xhcnJheV0gW2Z1bmN0aW9ufGJvb2xlYW58b2JqZWN0XSBbZnVuY3Rpb25dJywgW2FyZ3MsIHNob3J0Q2lyY3VpdCwgX3BhcnNlRm5dLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgZnJlZXplKCk7XG4gICAgICAgIGlmICh0eXBlb2YgYXJncyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGFyZ3YgPSBzZWxmLl9wYXJzZUFyZ3MocHJvY2Vzc0FyZ3MpO1xuICAgICAgICAgICAgY29uc3QgdG1wUGFyc2VkID0gc2VsZi5wYXJzZWQ7XG4gICAgICAgICAgICB1bmZyZWV6ZSgpO1xuICAgICAgICAgICAgc2VsZi5wYXJzZWQgPSB0bXBQYXJzZWQ7XG4gICAgICAgICAgICByZXR1cm4gYXJndjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHNob3J0Q2lyY3VpdCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHBhcnNlQ29udGV4dCA9IHNob3J0Q2lyY3VpdDtcbiAgICAgICAgICAgIHNob3J0Q2lyY3VpdCA9IF9wYXJzZUZuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2Ygc2hvcnRDaXJjdWl0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBwYXJzZUZuID0gc2hvcnRDaXJjdWl0O1xuICAgICAgICAgICAgc2hvcnRDaXJjdWl0ID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFzaG9ydENpcmN1aXQpXG4gICAgICAgICAgICBwcm9jZXNzQXJncyA9IGFyZ3M7XG4gICAgICAgIGlmIChwYXJzZUZuKVxuICAgICAgICAgICAgZXhpdFByb2Nlc3MgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gc2VsZi5fcGFyc2VBcmdzKGFyZ3MsICEhc2hvcnRDaXJjdWl0KTtcbiAgICAgICAgY29tcGxldGlvbiQxLnNldFBhcnNlZChzZWxmLnBhcnNlZCk7XG4gICAgICAgIGlmIChwYXJzZUZuKVxuICAgICAgICAgICAgcGFyc2VGbihleGl0RXJyb3IsIHBhcnNlZCwgb3V0cHV0KTtcbiAgICAgICAgdW5mcmVlemUoKTtcbiAgICAgICAgcmV0dXJuIHBhcnNlZDtcbiAgICB9O1xuICAgIHNlbGYuX2dldFBhcnNlQ29udGV4dCA9ICgpID0+IHBhcnNlQ29udGV4dCB8fCB7fTtcbiAgICBzZWxmLl9oYXNQYXJzZUNhbGxiYWNrID0gKCkgPT4gISFwYXJzZUZuO1xuICAgIHNlbGYub3B0aW9uID0gc2VsZi5vcHRpb25zID0gZnVuY3Rpb24gb3B0aW9uKGtleSwgb3B0KSB7XG4gICAgICAgIGFyZ3NlcnQoJzxzdHJpbmd8b2JqZWN0PiBbb2JqZWN0XScsIFtrZXksIG9wdF0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBpZiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGtleSkuZm9yRWFjaChrID0+IHtcbiAgICAgICAgICAgICAgICBzZWxmLm9wdGlvbnMoaywga2V5W2tdKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHQgIT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgb3B0ID0ge307XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvcHRpb25zLmtleVtrZXldID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChvcHQuYWxpYXMpXG4gICAgICAgICAgICAgICAgc2VsZi5hbGlhcyhrZXksIG9wdC5hbGlhcyk7XG4gICAgICAgICAgICBjb25zdCBkZXByZWNhdGUgPSBvcHQuZGVwcmVjYXRlIHx8IG9wdC5kZXByZWNhdGVkO1xuICAgICAgICAgICAgaWYgKGRlcHJlY2F0ZSkge1xuICAgICAgICAgICAgICAgIHNlbGYuZGVwcmVjYXRlT3B0aW9uKGtleSwgZGVwcmVjYXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGRlbWFuZCA9IG9wdC5kZW1hbmQgfHwgb3B0LnJlcXVpcmVkIHx8IG9wdC5yZXF1aXJlO1xuICAgICAgICAgICAgaWYgKGRlbWFuZCkge1xuICAgICAgICAgICAgICAgIHNlbGYuZGVtYW5kKGtleSwgZGVtYW5kKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQuZGVtYW5kT3B0aW9uKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5kZW1hbmRPcHRpb24oa2V5LCB0eXBlb2Ygb3B0LmRlbWFuZE9wdGlvbiA9PT0gJ3N0cmluZycgPyBvcHQuZGVtYW5kT3B0aW9uIDogdW5kZWZpbmVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQuY29uZmxpY3RzKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5jb25mbGljdHMoa2V5LCBvcHQuY29uZmxpY3RzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgnZGVmYXVsdCcgaW4gb3B0KSB7XG4gICAgICAgICAgICAgICAgc2VsZi5kZWZhdWx0KGtleSwgb3B0LmRlZmF1bHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdC5pbXBsaWVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmltcGxpZXMoa2V5LCBvcHQuaW1wbGllcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0Lm5hcmdzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBzZWxmLm5hcmdzKGtleSwgb3B0Lm5hcmdzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQuY29uZmlnKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5jb25maWcoa2V5LCBvcHQuY29uZmlnUGFyc2VyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQubm9ybWFsaXplKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5ub3JtYWxpemUoa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQuY2hvaWNlcykge1xuICAgICAgICAgICAgICAgIHNlbGYuY2hvaWNlcyhrZXksIG9wdC5jaG9pY2VzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQuY29lcmNlKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5jb2VyY2Uoa2V5LCBvcHQuY29lcmNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQuZ3JvdXApIHtcbiAgICAgICAgICAgICAgICBzZWxmLmdyb3VwKGtleSwgb3B0Lmdyb3VwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQuYm9vbGVhbiB8fCBvcHQudHlwZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5ib29sZWFuKGtleSk7XG4gICAgICAgICAgICAgICAgaWYgKG9wdC5hbGlhcylcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5ib29sZWFuKG9wdC5hbGlhcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0LmFycmF5IHx8IG9wdC50eXBlID09PSAnYXJyYXknKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5hcnJheShrZXkpO1xuICAgICAgICAgICAgICAgIGlmIChvcHQuYWxpYXMpXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuYXJyYXkob3B0LmFsaWFzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQubnVtYmVyIHx8IG9wdC50eXBlID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHNlbGYubnVtYmVyKGtleSk7XG4gICAgICAgICAgICAgICAgaWYgKG9wdC5hbGlhcylcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5udW1iZXIob3B0LmFsaWFzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQuc3RyaW5nIHx8IG9wdC50eXBlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHNlbGYuc3RyaW5nKGtleSk7XG4gICAgICAgICAgICAgICAgaWYgKG9wdC5hbGlhcylcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5zdHJpbmcob3B0LmFsaWFzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQuY291bnQgfHwgb3B0LnR5cGUgPT09ICdjb3VudCcpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmNvdW50KGtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdC5nbG9iYWwgPT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgICAgIHNlbGYuZ2xvYmFsKGtleSwgb3B0Lmdsb2JhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0LmRlZmF1bHREZXNjcmlwdGlvbikge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMuZGVmYXVsdERlc2NyaXB0aW9uW2tleV0gPSBvcHQuZGVmYXVsdERlc2NyaXB0aW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdC5za2lwVmFsaWRhdGlvbikge1xuICAgICAgICAgICAgICAgIHNlbGYuc2tpcFZhbGlkYXRpb24oa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGRlc2MgPSBvcHQuZGVzY3JpYmUgfHwgb3B0LmRlc2NyaXB0aW9uIHx8IG9wdC5kZXNjO1xuICAgICAgICAgICAgc2VsZi5kZXNjcmliZShrZXksIGRlc2MpO1xuICAgICAgICAgICAgaWYgKG9wdC5oaWRkZW4pIHtcbiAgICAgICAgICAgICAgICBzZWxmLmhpZGUoa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQucmVxdWlyZXNBcmcpIHtcbiAgICAgICAgICAgICAgICBzZWxmLnJlcXVpcmVzQXJnKGtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLmdldE9wdGlvbnMgPSAoKSA9PiBvcHRpb25zO1xuICAgIHNlbGYucG9zaXRpb25hbCA9IGZ1bmN0aW9uIChrZXksIG9wdHMpIHtcbiAgICAgICAgYXJnc2VydCgnPHN0cmluZz4gPG9iamVjdD4nLCBba2V5LCBvcHRzXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGlmIChjb250ZXh0LnJlc2V0cyA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFlFcnJvcihcIi5wb3NpdGlvbmFsKCkgY2FuIG9ubHkgYmUgY2FsbGVkIGluIGEgY29tbWFuZCdzIGJ1aWxkZXIgZnVuY3Rpb25cIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3VwcG9ydGVkT3B0cyA9IFtcbiAgICAgICAgICAgICdkZWZhdWx0JyxcbiAgICAgICAgICAgICdkZWZhdWx0RGVzY3JpcHRpb24nLFxuICAgICAgICAgICAgJ2ltcGxpZXMnLFxuICAgICAgICAgICAgJ25vcm1hbGl6ZScsXG4gICAgICAgICAgICAnY2hvaWNlcycsXG4gICAgICAgICAgICAnY29uZmxpY3RzJyxcbiAgICAgICAgICAgICdjb2VyY2UnLFxuICAgICAgICAgICAgJ3R5cGUnLFxuICAgICAgICAgICAgJ2Rlc2NyaWJlJyxcbiAgICAgICAgICAgICdkZXNjJyxcbiAgICAgICAgICAgICdkZXNjcmlwdGlvbicsXG4gICAgICAgICAgICAnYWxpYXMnLFxuICAgICAgICBdO1xuICAgICAgICBvcHRzID0gb2JqRmlsdGVyKG9wdHMsIChrLCB2KSA9PiB7XG4gICAgICAgICAgICBsZXQgYWNjZXB0ID0gc3VwcG9ydGVkT3B0cy5pbmRleE9mKGspICE9PSAtMTtcbiAgICAgICAgICAgIGlmIChrID09PSAndHlwZScgJiYgWydzdHJpbmcnLCAnbnVtYmVyJywgJ2Jvb2xlYW4nXS5pbmRleE9mKHYpID09PSAtMSlcbiAgICAgICAgICAgICAgICBhY2NlcHQgPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybiBhY2NlcHQ7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBmdWxsQ29tbWFuZCA9IGNvbnRleHQuZnVsbENvbW1hbmRzW2NvbnRleHQuZnVsbENvbW1hbmRzLmxlbmd0aCAtIDFdO1xuICAgICAgICBjb25zdCBwYXJzZU9wdGlvbnMgPSBmdWxsQ29tbWFuZFxuICAgICAgICAgICAgPyBjb21tYW5kJDEuY21kVG9QYXJzZU9wdGlvbnMoZnVsbENvbW1hbmQpXG4gICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICBhcnJheTogW10sXG4gICAgICAgICAgICAgICAgYWxpYXM6IHt9LFxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHt9LFxuICAgICAgICAgICAgICAgIGRlbWFuZDoge30sXG4gICAgICAgICAgICB9O1xuICAgICAgICBvYmplY3RLZXlzKHBhcnNlT3B0aW9ucykuZm9yRWFjaChwayA9PiB7XG4gICAgICAgICAgICBjb25zdCBwYXJzZU9wdGlvbiA9IHBhcnNlT3B0aW9uc1twa107XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwYXJzZU9wdGlvbikpIHtcbiAgICAgICAgICAgICAgICBpZiAocGFyc2VPcHRpb24uaW5kZXhPZihrZXkpICE9PSAtMSlcbiAgICAgICAgICAgICAgICAgICAgb3B0c1twa10gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHBhcnNlT3B0aW9uW2tleV0gJiYgIShwayBpbiBvcHRzKSlcbiAgICAgICAgICAgICAgICAgICAgb3B0c1twa10gPSBwYXJzZU9wdGlvbltrZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgc2VsZi5ncm91cChrZXksIHVzYWdlJDEuZ2V0UG9zaXRpb25hbEdyb3VwTmFtZSgpKTtcbiAgICAgICAgcmV0dXJuIHNlbGYub3B0aW9uKGtleSwgb3B0cyk7XG4gICAgfTtcbiAgICBzZWxmLmdyb3VwID0gZnVuY3Rpb24gZ3JvdXAob3B0cywgZ3JvdXBOYW1lKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxzdHJpbmd8YXJyYXk+IDxzdHJpbmc+JywgW29wdHMsIGdyb3VwTmFtZV0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBjb25zdCBleGlzdGluZyA9IHByZXNlcnZlZEdyb3Vwc1tncm91cE5hbWVdIHx8IGdyb3Vwc1tncm91cE5hbWVdO1xuICAgICAgICBpZiAocHJlc2VydmVkR3JvdXBzW2dyb3VwTmFtZV0pIHtcbiAgICAgICAgICAgIGRlbGV0ZSBwcmVzZXJ2ZWRHcm91cHNbZ3JvdXBOYW1lXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzZWVuID0ge307XG4gICAgICAgIGdyb3Vwc1tncm91cE5hbWVdID0gKGV4aXN0aW5nIHx8IFtdKS5jb25jYXQob3B0cykuZmlsdGVyKGtleSA9PiB7XG4gICAgICAgICAgICBpZiAoc2VlbltrZXldKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybiAoc2VlbltrZXldID0gdHJ1ZSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIHNlbGYuZ2V0R3JvdXBzID0gKCkgPT4gT2JqZWN0LmFzc2lnbih7fSwgZ3JvdXBzLCBwcmVzZXJ2ZWRHcm91cHMpO1xuICAgIHNlbGYuZW52ID0gZnVuY3Rpb24gKHByZWZpeCkge1xuICAgICAgICBhcmdzZXJ0KCdbc3RyaW5nfGJvb2xlYW5dJywgW3ByZWZpeF0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBpZiAocHJlZml4ID09PSBmYWxzZSlcbiAgICAgICAgICAgIGRlbGV0ZSBvcHRpb25zLmVudlByZWZpeDtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgb3B0aW9ucy5lbnZQcmVmaXggPSBwcmVmaXggfHwgJyc7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi53cmFwID0gZnVuY3Rpb24gKGNvbHMpIHtcbiAgICAgICAgYXJnc2VydCgnPG51bWJlcnxudWxsfHVuZGVmaW5lZD4nLCBbY29sc10sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICB1c2FnZSQxLndyYXAoY29scyk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgbGV0IHN0cmljdCA9IGZhbHNlO1xuICAgIHNlbGYuc3RyaWN0ID0gZnVuY3Rpb24gKGVuYWJsZWQpIHtcbiAgICAgICAgYXJnc2VydCgnW2Jvb2xlYW5dJywgW2VuYWJsZWRdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgc3RyaWN0ID0gZW5hYmxlZCAhPT0gZmFsc2U7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5nZXRTdHJpY3QgPSAoKSA9PiBzdHJpY3Q7XG4gICAgbGV0IHN0cmljdENvbW1hbmRzID0gZmFsc2U7XG4gICAgc2VsZi5zdHJpY3RDb21tYW5kcyA9IGZ1bmN0aW9uIChlbmFibGVkKSB7XG4gICAgICAgIGFyZ3NlcnQoJ1tib29sZWFuXScsIFtlbmFibGVkXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIHN0cmljdENvbW1hbmRzID0gZW5hYmxlZCAhPT0gZmFsc2U7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5nZXRTdHJpY3RDb21tYW5kcyA9ICgpID0+IHN0cmljdENvbW1hbmRzO1xuICAgIGxldCBzdHJpY3RPcHRpb25zID0gZmFsc2U7XG4gICAgc2VsZi5zdHJpY3RPcHRpb25zID0gZnVuY3Rpb24gKGVuYWJsZWQpIHtcbiAgICAgICAgYXJnc2VydCgnW2Jvb2xlYW5dJywgW2VuYWJsZWRdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgc3RyaWN0T3B0aW9ucyA9IGVuYWJsZWQgIT09IGZhbHNlO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIHNlbGYuZ2V0U3RyaWN0T3B0aW9ucyA9ICgpID0+IHN0cmljdE9wdGlvbnM7XG4gICAgbGV0IHBhcnNlckNvbmZpZyA9IHt9O1xuICAgIHNlbGYucGFyc2VyQ29uZmlndXJhdGlvbiA9IGZ1bmN0aW9uIHBhcnNlckNvbmZpZ3VyYXRpb24oY29uZmlnKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxvYmplY3Q+JywgW2NvbmZpZ10sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBwYXJzZXJDb25maWcgPSBjb25maWc7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5nZXRQYXJzZXJDb25maWd1cmF0aW9uID0gKCkgPT4gcGFyc2VyQ29uZmlnO1xuICAgIHNlbGYuc2hvd0hlbHAgPSBmdW5jdGlvbiAobGV2ZWwpIHtcbiAgICAgICAgYXJnc2VydCgnW3N0cmluZ3xmdW5jdGlvbl0nLCBbbGV2ZWxdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgaWYgKCFzZWxmLnBhcnNlZClcbiAgICAgICAgICAgIHNlbGYuX3BhcnNlQXJncyhwcm9jZXNzQXJncyk7XG4gICAgICAgIGlmIChjb21tYW5kJDEuaGFzRGVmYXVsdENvbW1hbmQoKSkge1xuICAgICAgICAgICAgY29udGV4dC5yZXNldHMrKztcbiAgICAgICAgICAgIGNvbW1hbmQkMS5ydW5EZWZhdWx0QnVpbGRlck9uKHNlbGYpO1xuICAgICAgICB9XG4gICAgICAgIHVzYWdlJDEuc2hvd0hlbHAobGV2ZWwpO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIGxldCB2ZXJzaW9uT3B0ID0gbnVsbDtcbiAgICBzZWxmLnZlcnNpb24gPSBmdW5jdGlvbiB2ZXJzaW9uKG9wdCwgbXNnLCB2ZXIpIHtcbiAgICAgICAgY29uc3QgZGVmYXVsdFZlcnNpb25PcHQgPSAndmVyc2lvbic7XG4gICAgICAgIGFyZ3NlcnQoJ1tib29sZWFufHN0cmluZ10gW3N0cmluZ10gW3N0cmluZ10nLCBbb3B0LCBtc2csIHZlcl0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBpZiAodmVyc2lvbk9wdCkge1xuICAgICAgICAgICAgZGVsZXRlRnJvbVBhcnNlckhpbnRPYmplY3QodmVyc2lvbk9wdCk7XG4gICAgICAgICAgICB1c2FnZSQxLnZlcnNpb24odW5kZWZpbmVkKTtcbiAgICAgICAgICAgIHZlcnNpb25PcHQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB2ZXIgPSBndWVzc1ZlcnNpb24oKTtcbiAgICAgICAgICAgIG9wdCA9IGRlZmF1bHRWZXJzaW9uT3B0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIGlmIChvcHQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2ZXIgPSBvcHQ7XG4gICAgICAgICAgICBvcHQgPSBkZWZhdWx0VmVyc2lvbk9wdDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICB2ZXIgPSBtc2c7XG4gICAgICAgICAgICBtc2cgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgdmVyc2lvbk9wdCA9IHR5cGVvZiBvcHQgPT09ICdzdHJpbmcnID8gb3B0IDogZGVmYXVsdFZlcnNpb25PcHQ7XG4gICAgICAgIG1zZyA9IG1zZyB8fCB1c2FnZSQxLmRlZmVyWTE4bkxvb2t1cCgnU2hvdyB2ZXJzaW9uIG51bWJlcicpO1xuICAgICAgICB1c2FnZSQxLnZlcnNpb24odmVyIHx8IHVuZGVmaW5lZCk7XG4gICAgICAgIHNlbGYuYm9vbGVhbih2ZXJzaW9uT3B0KTtcbiAgICAgICAgc2VsZi5kZXNjcmliZSh2ZXJzaW9uT3B0LCBtc2cpO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIGZ1bmN0aW9uIGd1ZXNzVmVyc2lvbigpIHtcbiAgICAgICAgY29uc3Qgb2JqID0gcGtnVXAoKTtcbiAgICAgICAgcmV0dXJuIG9iai52ZXJzaW9uIHx8ICd1bmtub3duJztcbiAgICB9XG4gICAgbGV0IGhlbHBPcHQgPSBudWxsO1xuICAgIHNlbGYuYWRkSGVscE9wdCA9IHNlbGYuaGVscCA9IGZ1bmN0aW9uIGFkZEhlbHBPcHQob3B0LCBtc2cpIHtcbiAgICAgICAgY29uc3QgZGVmYXVsdEhlbHBPcHQgPSAnaGVscCc7XG4gICAgICAgIGFyZ3NlcnQoJ1tzdHJpbmd8Ym9vbGVhbl0gW3N0cmluZ10nLCBbb3B0LCBtc2ddLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgaWYgKGhlbHBPcHQpIHtcbiAgICAgICAgICAgIGRlbGV0ZUZyb21QYXJzZXJIaW50T2JqZWN0KGhlbHBPcHQpO1xuICAgICAgICAgICAgaGVscE9wdCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIGlmIChvcHQgPT09IGZhbHNlKVxuICAgICAgICAgICAgICAgIHJldHVybiBzZWxmO1xuICAgICAgICB9XG4gICAgICAgIGhlbHBPcHQgPSB0eXBlb2Ygb3B0ID09PSAnc3RyaW5nJyA/IG9wdCA6IGRlZmF1bHRIZWxwT3B0O1xuICAgICAgICBzZWxmLmJvb2xlYW4oaGVscE9wdCk7XG4gICAgICAgIHNlbGYuZGVzY3JpYmUoaGVscE9wdCwgbXNnIHx8IHVzYWdlJDEuZGVmZXJZMThuTG9va3VwKCdTaG93IGhlbHAnKSk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgY29uc3QgZGVmYXVsdFNob3dIaWRkZW5PcHQgPSAnc2hvdy1oaWRkZW4nO1xuICAgIG9wdGlvbnMuc2hvd0hpZGRlbk9wdCA9IGRlZmF1bHRTaG93SGlkZGVuT3B0O1xuICAgIHNlbGYuYWRkU2hvd0hpZGRlbk9wdCA9IHNlbGYuc2hvd0hpZGRlbiA9IGZ1bmN0aW9uIGFkZFNob3dIaWRkZW5PcHQob3B0LCBtc2cpIHtcbiAgICAgICAgYXJnc2VydCgnW3N0cmluZ3xib29sZWFuXSBbc3RyaW5nXScsIFtvcHQsIG1zZ10sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgaWYgKG9wdCA9PT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2hvd0hpZGRlbk9wdCA9IHR5cGVvZiBvcHQgPT09ICdzdHJpbmcnID8gb3B0IDogZGVmYXVsdFNob3dIaWRkZW5PcHQ7XG4gICAgICAgIHNlbGYuYm9vbGVhbihzaG93SGlkZGVuT3B0KTtcbiAgICAgICAgc2VsZi5kZXNjcmliZShzaG93SGlkZGVuT3B0LCBtc2cgfHwgdXNhZ2UkMS5kZWZlclkxOG5Mb29rdXAoJ1Nob3cgaGlkZGVuIG9wdGlvbnMnKSk7XG4gICAgICAgIG9wdGlvbnMuc2hvd0hpZGRlbk9wdCA9IHNob3dIaWRkZW5PcHQ7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5oaWRlID0gZnVuY3Rpb24gaGlkZShrZXkpIHtcbiAgICAgICAgYXJnc2VydCgnPHN0cmluZz4nLCBba2V5XSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIG9wdGlvbnMuaGlkZGVuT3B0aW9ucy5wdXNoKGtleSk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5zaG93SGVscE9uRmFpbCA9IGZ1bmN0aW9uIHNob3dIZWxwT25GYWlsKGVuYWJsZWQsIG1lc3NhZ2UpIHtcbiAgICAgICAgYXJnc2VydCgnW2Jvb2xlYW58c3RyaW5nXSBbc3RyaW5nXScsIFtlbmFibGVkLCBtZXNzYWdlXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIHVzYWdlJDEuc2hvd0hlbHBPbkZhaWwoZW5hYmxlZCwgbWVzc2FnZSk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgbGV0IGV4aXRQcm9jZXNzID0gdHJ1ZTtcbiAgICBzZWxmLmV4aXRQcm9jZXNzID0gZnVuY3Rpb24gKGVuYWJsZWQgPSB0cnVlKSB7XG4gICAgICAgIGFyZ3NlcnQoJ1tib29sZWFuXScsIFtlbmFibGVkXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGV4aXRQcm9jZXNzID0gZW5hYmxlZDtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLmdldEV4aXRQcm9jZXNzID0gKCkgPT4gZXhpdFByb2Nlc3M7XG4gICAgc2VsZi5zaG93Q29tcGxldGlvblNjcmlwdCA9IGZ1bmN0aW9uICgkMCwgY21kKSB7XG4gICAgICAgIGFyZ3NlcnQoJ1tzdHJpbmddIFtzdHJpbmddJywgWyQwLCBjbWRdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgJDAgPSAkMCB8fCBzZWxmLiQwO1xuICAgICAgICBfbG9nZ2VyLmxvZyhjb21wbGV0aW9uJDEuZ2VuZXJhdGVDb21wbGV0aW9uU2NyaXB0KCQwLCBjbWQgfHwgY29tcGxldGlvbkNvbW1hbmQgfHwgJ2NvbXBsZXRpb24nKSk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5nZXRDb21wbGV0aW9uID0gZnVuY3Rpb24gKGFyZ3MsIGRvbmUpIHtcbiAgICAgICAgYXJnc2VydCgnPGFycmF5PiA8ZnVuY3Rpb24+JywgW2FyZ3MsIGRvbmVdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgY29tcGxldGlvbiQxLmdldENvbXBsZXRpb24oYXJncywgZG9uZSk7XG4gICAgfTtcbiAgICBzZWxmLmxvY2FsZSA9IGZ1bmN0aW9uIChsb2NhbGUpIHtcbiAgICAgICAgYXJnc2VydCgnW3N0cmluZ10nLCBbbG9jYWxlXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGlmICghbG9jYWxlKSB7XG4gICAgICAgICAgICBndWVzc0xvY2FsZSgpO1xuICAgICAgICAgICAgcmV0dXJuIHkxOG4uZ2V0TG9jYWxlKCk7XG4gICAgICAgIH1cbiAgICAgICAgZGV0ZWN0TG9jYWxlID0gZmFsc2U7XG4gICAgICAgIHkxOG4uc2V0TG9jYWxlKGxvY2FsZSk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi51cGRhdGVTdHJpbmdzID0gc2VsZi51cGRhdGVMb2NhbGUgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxvYmplY3Q+JywgW29ial0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBkZXRlY3RMb2NhbGUgPSBmYWxzZTtcbiAgICAgICAgeTE4bi51cGRhdGVMb2NhbGUob2JqKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBsZXQgZGV0ZWN0TG9jYWxlID0gdHJ1ZTtcbiAgICBzZWxmLmRldGVjdExvY2FsZSA9IGZ1bmN0aW9uIChkZXRlY3QpIHtcbiAgICAgICAgYXJnc2VydCgnPGJvb2xlYW4+JywgW2RldGVjdF0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBkZXRlY3RMb2NhbGUgPSBkZXRlY3Q7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5nZXREZXRlY3RMb2NhbGUgPSAoKSA9PiBkZXRlY3RMb2NhbGU7XG4gICAgY29uc3QgX2xvZ2dlciA9IHtcbiAgICAgICAgbG9nKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgIGlmICghc2VsZi5faGFzUGFyc2VDYWxsYmFjaygpKVxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKC4uLmFyZ3MpO1xuICAgICAgICAgICAgaGFzT3V0cHV0ID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChvdXRwdXQubGVuZ3RoKVxuICAgICAgICAgICAgICAgIG91dHB1dCArPSAnXFxuJztcbiAgICAgICAgICAgIG91dHB1dCArPSBhcmdzLmpvaW4oJyAnKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3IoLi4uYXJncykge1xuICAgICAgICAgICAgaWYgKCFzZWxmLl9oYXNQYXJzZUNhbGxiYWNrKCkpXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvciguLi5hcmdzKTtcbiAgICAgICAgICAgIGhhc091dHB1dCA9IHRydWU7XG4gICAgICAgICAgICBpZiAob3V0cHV0Lmxlbmd0aClcbiAgICAgICAgICAgICAgICBvdXRwdXQgKz0gJ1xcbic7XG4gICAgICAgICAgICBvdXRwdXQgKz0gYXJncy5qb2luKCcgJyk7XG4gICAgICAgIH0sXG4gICAgfTtcbiAgICBzZWxmLl9nZXRMb2dnZXJJbnN0YW5jZSA9ICgpID0+IF9sb2dnZXI7XG4gICAgc2VsZi5faGFzT3V0cHV0ID0gKCkgPT4gaGFzT3V0cHV0O1xuICAgIHNlbGYuX3NldEhhc091dHB1dCA9ICgpID0+IHtcbiAgICAgICAgaGFzT3V0cHV0ID0gdHJ1ZTtcbiAgICB9O1xuICAgIGxldCByZWNvbW1lbmRDb21tYW5kcztcbiAgICBzZWxmLnJlY29tbWVuZENvbW1hbmRzID0gZnVuY3Rpb24gKHJlY29tbWVuZCA9IHRydWUpIHtcbiAgICAgICAgYXJnc2VydCgnW2Jvb2xlYW5dJywgW3JlY29tbWVuZF0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICByZWNvbW1lbmRDb21tYW5kcyA9IHJlY29tbWVuZDtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLmdldFVzYWdlSW5zdGFuY2UgPSAoKSA9PiB1c2FnZSQxO1xuICAgIHNlbGYuZ2V0VmFsaWRhdGlvbkluc3RhbmNlID0gKCkgPT4gdmFsaWRhdGlvbiQxO1xuICAgIHNlbGYuZ2V0Q29tbWFuZEluc3RhbmNlID0gKCkgPT4gY29tbWFuZCQxO1xuICAgIHNlbGYudGVybWluYWxXaWR0aCA9ICgpID0+IHtcbiAgICAgICAgYXJnc2VydChbXSwgMCk7XG4gICAgICAgIHJldHVybiBzaGltJDEucHJvY2Vzcy5zdGRDb2x1bW5zO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHNlbGYsICdhcmd2Jywge1xuICAgICAgICBnZXQ6ICgpID0+IHNlbGYuX3BhcnNlQXJncyhwcm9jZXNzQXJncyksXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgfSk7XG4gICAgc2VsZi5fcGFyc2VBcmdzID0gZnVuY3Rpb24gcGFyc2VBcmdzKGFyZ3MsIHNob3J0Q2lyY3VpdCwgX2NhbGxlZEZyb21Db21tYW5kLCBjb21tYW5kSW5kZXgpIHtcbiAgICAgICAgbGV0IHNraXBWYWxpZGF0aW9uID0gISFfY2FsbGVkRnJvbUNvbW1hbmQ7XG4gICAgICAgIGFyZ3MgPSBhcmdzIHx8IHByb2Nlc3NBcmdzO1xuICAgICAgICBvcHRpb25zLl9fID0geTE4bi5fXztcbiAgICAgICAgb3B0aW9ucy5jb25maWd1cmF0aW9uID0gc2VsZi5nZXRQYXJzZXJDb25maWd1cmF0aW9uKCk7XG4gICAgICAgIGNvbnN0IHBvcHVsYXRlRG91YmxlRGFzaCA9ICEhb3B0aW9ucy5jb25maWd1cmF0aW9uWydwb3B1bGF0ZS0tJ107XG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuY29uZmlndXJhdGlvbiwge1xuICAgICAgICAgICAgJ3BvcHVsYXRlLS0nOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gc2hpbSQxLlBhcnNlci5kZXRhaWxlZChhcmdzLCBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLCB7XG4gICAgICAgICAgICBjb25maWd1cmF0aW9uOiBPYmplY3QuYXNzaWduKHsgJ3BhcnNlLXBvc2l0aW9uYWwtbnVtYmVycyc6IGZhbHNlIH0sIGNvbmZpZyksXG4gICAgICAgIH0pKTtcbiAgICAgICAgbGV0IGFyZ3YgPSBwYXJzZWQuYXJndjtcbiAgICAgICAgaWYgKHBhcnNlQ29udGV4dClcbiAgICAgICAgICAgIGFyZ3YgPSBPYmplY3QuYXNzaWduKHt9LCBhcmd2LCBwYXJzZUNvbnRleHQpO1xuICAgICAgICBjb25zdCBhbGlhc2VzID0gcGFyc2VkLmFsaWFzZXM7XG4gICAgICAgIGFyZ3YuJDAgPSBzZWxmLiQwO1xuICAgICAgICBzZWxmLnBhcnNlZCA9IHBhcnNlZDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGd1ZXNzTG9jYWxlKCk7XG4gICAgICAgICAgICBpZiAoc2hvcnRDaXJjdWl0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3Bvc3RQcm9jZXNzKGFyZ3YsIHBvcHVsYXRlRG91YmxlRGFzaCwgX2NhbGxlZEZyb21Db21tYW5kKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChoZWxwT3B0KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaGVscENtZHMgPSBbaGVscE9wdF1cbiAgICAgICAgICAgICAgICAgICAgLmNvbmNhdChhbGlhc2VzW2hlbHBPcHRdIHx8IFtdKVxuICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKGsgPT4gay5sZW5ndGggPiAxKTtcbiAgICAgICAgICAgICAgICBpZiAofmhlbHBDbWRzLmluZGV4T2YoJycgKyBhcmd2Ll9bYXJndi5fLmxlbmd0aCAtIDFdKSkge1xuICAgICAgICAgICAgICAgICAgICBhcmd2Ll8ucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3ZbaGVscE9wdF0gPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZXJLZXlzID0gY29tbWFuZCQxLmdldENvbW1hbmRzKCk7XG4gICAgICAgICAgICBjb25zdCByZXF1ZXN0Q29tcGxldGlvbnMgPSBjb21wbGV0aW9uJDEuY29tcGxldGlvbktleSBpbiBhcmd2O1xuICAgICAgICAgICAgY29uc3Qgc2tpcFJlY29tbWVuZGF0aW9uID0gYXJndltoZWxwT3B0XSB8fCByZXF1ZXN0Q29tcGxldGlvbnM7XG4gICAgICAgICAgICBjb25zdCBza2lwRGVmYXVsdENvbW1hbmQgPSBza2lwUmVjb21tZW5kYXRpb24gJiZcbiAgICAgICAgICAgICAgICAoaGFuZGxlcktleXMubGVuZ3RoID4gMSB8fCBoYW5kbGVyS2V5c1swXSAhPT0gJyQwJyk7XG4gICAgICAgICAgICBpZiAoYXJndi5fLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGlmIChoYW5kbGVyS2V5cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGZpcnN0VW5rbm93bkNvbW1hbmQ7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSBjb21tYW5kSW5kZXggfHwgMCwgY21kOyBhcmd2Ll9baV0gIT09IHVuZGVmaW5lZDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbWQgPSBTdHJpbmcoYXJndi5fW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh+aGFuZGxlcktleXMuaW5kZXhPZihjbWQpICYmIGNtZCAhPT0gY29tcGxldGlvbkNvbW1hbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbm5lckFyZ3YgPSBjb21tYW5kJDEucnVuQ29tbWFuZChjbWQsIHNlbGYsIHBhcnNlZCwgaSArIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9wb3N0UHJvY2Vzcyhpbm5lckFyZ3YsIHBvcHVsYXRlRG91YmxlRGFzaCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICghZmlyc3RVbmtub3duQ29tbWFuZCAmJiBjbWQgIT09IGNvbXBsZXRpb25Db21tYW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RVbmtub3duQ29tbWFuZCA9IGNtZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoY29tbWFuZCQxLmhhc0RlZmF1bHRDb21tYW5kKCkgJiYgIXNraXBEZWZhdWx0Q29tbWFuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5uZXJBcmd2ID0gY29tbWFuZCQxLnJ1bkNvbW1hbmQobnVsbCwgc2VsZiwgcGFyc2VkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9wb3N0UHJvY2Vzcyhpbm5lckFyZ3YsIHBvcHVsYXRlRG91YmxlRGFzaCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlY29tbWVuZENvbW1hbmRzICYmIGZpcnN0VW5rbm93bkNvbW1hbmQgJiYgIXNraXBSZWNvbW1lbmRhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbiQxLnJlY29tbWVuZENvbW1hbmRzKGZpcnN0VW5rbm93bkNvbW1hbmQsIGhhbmRsZXJLZXlzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoY29tcGxldGlvbkNvbW1hbmQgJiZcbiAgICAgICAgICAgICAgICAgICAgfmFyZ3YuXy5pbmRleE9mKGNvbXBsZXRpb25Db21tYW5kKSAmJlxuICAgICAgICAgICAgICAgICAgICAhcmVxdWVzdENvbXBsZXRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChleGl0UHJvY2VzcylcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEJsb2NraW5nKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICBzZWxmLnNob3dDb21wbGV0aW9uU2NyaXB0KCk7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuZXhpdCgwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjb21tYW5kJDEuaGFzRGVmYXVsdENvbW1hbmQoKSAmJiAhc2tpcERlZmF1bHRDb21tYW5kKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5uZXJBcmd2ID0gY29tbWFuZCQxLnJ1bkNvbW1hbmQobnVsbCwgc2VsZiwgcGFyc2VkKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fcG9zdFByb2Nlc3MoaW5uZXJBcmd2LCBwb3B1bGF0ZURvdWJsZURhc2gpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlcXVlc3RDb21wbGV0aW9ucykge1xuICAgICAgICAgICAgICAgIGlmIChleGl0UHJvY2VzcylcbiAgICAgICAgICAgICAgICAgICAgc2V0QmxvY2tpbmcodHJ1ZSk7XG4gICAgICAgICAgICAgICAgYXJncyA9IFtdLmNvbmNhdChhcmdzKTtcbiAgICAgICAgICAgICAgICBjb25zdCBjb21wbGV0aW9uQXJncyA9IGFyZ3Muc2xpY2UoYXJncy5pbmRleE9mKGAtLSR7Y29tcGxldGlvbiQxLmNvbXBsZXRpb25LZXl9YCkgKyAxKTtcbiAgICAgICAgICAgICAgICBjb21wbGV0aW9uJDEuZ2V0Q29tcGxldGlvbihjb21wbGV0aW9uQXJncywgY29tcGxldGlvbnMgPT4ge1xuICAgICAgICAgICAgICAgICAgICAoY29tcGxldGlvbnMgfHwgW10pLmZvckVhY2goY29tcGxldGlvbiA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfbG9nZ2VyLmxvZyhjb21wbGV0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuZXhpdCgwKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fcG9zdFByb2Nlc3MoYXJndiwgIXBvcHVsYXRlRG91YmxlRGFzaCwgX2NhbGxlZEZyb21Db21tYW5kKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghaGFzT3V0cHV0KSB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmtleXMoYXJndikuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSBoZWxwT3B0ICYmIGFyZ3Zba2V5XSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4aXRQcm9jZXNzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEJsb2NraW5nKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2tpcFZhbGlkYXRpb24gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zaG93SGVscCgnbG9nJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmV4aXQoMCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoa2V5ID09PSB2ZXJzaW9uT3B0ICYmIGFyZ3Zba2V5XSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4aXRQcm9jZXNzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEJsb2NraW5nKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2tpcFZhbGlkYXRpb24gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdXNhZ2UkMS5zaG93VmVyc2lvbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5leGl0KDApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXNraXBWYWxpZGF0aW9uICYmIG9wdGlvbnMuc2tpcFZhbGlkYXRpb24ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHNraXBWYWxpZGF0aW9uID0gT2JqZWN0LmtleXMoYXJndikuc29tZShrZXkgPT4gb3B0aW9ucy5za2lwVmFsaWRhdGlvbi5pbmRleE9mKGtleSkgPj0gMCAmJiBhcmd2W2tleV0gPT09IHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFza2lwVmFsaWRhdGlvbikge1xuICAgICAgICAgICAgICAgIGlmIChwYXJzZWQuZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBZRXJyb3IocGFyc2VkLmVycm9yLm1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgIGlmICghcmVxdWVzdENvbXBsZXRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuX3J1blZhbGlkYXRpb24oYXJndiwgYWxpYXNlcywge30sIHBhcnNlZC5lcnJvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBZRXJyb3IpXG4gICAgICAgICAgICAgICAgdXNhZ2UkMS5mYWlsKGVyci5tZXNzYWdlLCBlcnIpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2VsZi5fcG9zdFByb2Nlc3MoYXJndiwgcG9wdWxhdGVEb3VibGVEYXNoLCBfY2FsbGVkRnJvbUNvbW1hbmQpO1xuICAgIH07XG4gICAgc2VsZi5fcG9zdFByb2Nlc3MgPSBmdW5jdGlvbiAoYXJndiwgcG9wdWxhdGVEb3VibGVEYXNoLCBjYWxsZWRGcm9tQ29tbWFuZCA9IGZhbHNlKSB7XG4gICAgICAgIGlmIChpc1Byb21pc2UoYXJndikpXG4gICAgICAgICAgICByZXR1cm4gYXJndjtcbiAgICAgICAgaWYgKGNhbGxlZEZyb21Db21tYW5kKVxuICAgICAgICAgICAgcmV0dXJuIGFyZ3Y7XG4gICAgICAgIGlmICghcG9wdWxhdGVEb3VibGVEYXNoKSB7XG4gICAgICAgICAgICBhcmd2ID0gc2VsZi5fY29weURvdWJsZURhc2goYXJndik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFyc2VQb3NpdGlvbmFsTnVtYmVycyA9IHNlbGYuZ2V0UGFyc2VyQ29uZmlndXJhdGlvbigpWydwYXJzZS1wb3NpdGlvbmFsLW51bWJlcnMnXSB8fFxuICAgICAgICAgICAgc2VsZi5nZXRQYXJzZXJDb25maWd1cmF0aW9uKClbJ3BhcnNlLXBvc2l0aW9uYWwtbnVtYmVycyddID09PSB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChwYXJzZVBvc2l0aW9uYWxOdW1iZXJzKSB7XG4gICAgICAgICAgICBhcmd2ID0gc2VsZi5fcGFyc2VQb3NpdGlvbmFsTnVtYmVycyhhcmd2KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXJndjtcbiAgICB9O1xuICAgIHNlbGYuX2NvcHlEb3VibGVEYXNoID0gZnVuY3Rpb24gKGFyZ3YpIHtcbiAgICAgICAgaWYgKCFhcmd2Ll8gfHwgIWFyZ3ZbJy0tJ10pXG4gICAgICAgICAgICByZXR1cm4gYXJndjtcbiAgICAgICAgYXJndi5fLnB1c2guYXBwbHkoYXJndi5fLCBhcmd2WyctLSddKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGRlbGV0ZSBhcmd2WyctLSddO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChfZXJyKSB7IH1cbiAgICAgICAgcmV0dXJuIGFyZ3Y7XG4gICAgfTtcbiAgICBzZWxmLl9wYXJzZVBvc2l0aW9uYWxOdW1iZXJzID0gZnVuY3Rpb24gKGFyZ3YpIHtcbiAgICAgICAgY29uc3QgYXJncyA9IGFyZ3ZbJy0tJ10gPyBhcmd2WyctLSddIDogYXJndi5fO1xuICAgICAgICBmb3IgKGxldCBpID0gMCwgYXJnOyAoYXJnID0gYXJnc1tpXSkgIT09IHVuZGVmaW5lZDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoc2hpbSQxLlBhcnNlci5sb29rc0xpa2VOdW1iZXIoYXJnKSAmJlxuICAgICAgICAgICAgICAgIE51bWJlci5pc1NhZmVJbnRlZ2VyKE1hdGguZmxvb3IocGFyc2VGbG9hdChgJHthcmd9YCkpKSkge1xuICAgICAgICAgICAgICAgIGFyZ3NbaV0gPSBOdW1iZXIoYXJnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXJndjtcbiAgICB9O1xuICAgIHNlbGYuX3J1blZhbGlkYXRpb24gPSBmdW5jdGlvbiBydW5WYWxpZGF0aW9uKGFyZ3YsIGFsaWFzZXMsIHBvc2l0aW9uYWxNYXAsIHBhcnNlRXJyb3JzLCBpc0RlZmF1bHRDb21tYW5kID0gZmFsc2UpIHtcbiAgICAgICAgaWYgKHBhcnNlRXJyb3JzKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFlFcnJvcihwYXJzZUVycm9ycy5tZXNzYWdlKTtcbiAgICAgICAgdmFsaWRhdGlvbiQxLm5vbk9wdGlvbkNvdW50KGFyZ3YpO1xuICAgICAgICB2YWxpZGF0aW9uJDEucmVxdWlyZWRBcmd1bWVudHMoYXJndik7XG4gICAgICAgIGxldCBmYWlsZWRTdHJpY3RDb21tYW5kcyA9IGZhbHNlO1xuICAgICAgICBpZiAoc3RyaWN0Q29tbWFuZHMpIHtcbiAgICAgICAgICAgIGZhaWxlZFN0cmljdENvbW1hbmRzID0gdmFsaWRhdGlvbiQxLnVua25vd25Db21tYW5kcyhhcmd2KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RyaWN0ICYmICFmYWlsZWRTdHJpY3RDb21tYW5kcykge1xuICAgICAgICAgICAgdmFsaWRhdGlvbiQxLnVua25vd25Bcmd1bWVudHMoYXJndiwgYWxpYXNlcywgcG9zaXRpb25hbE1hcCwgaXNEZWZhdWx0Q29tbWFuZCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoc3RyaWN0T3B0aW9ucykge1xuICAgICAgICAgICAgdmFsaWRhdGlvbiQxLnVua25vd25Bcmd1bWVudHMoYXJndiwgYWxpYXNlcywge30sIGZhbHNlLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFsaWRhdGlvbiQxLmN1c3RvbUNoZWNrcyhhcmd2LCBhbGlhc2VzKTtcbiAgICAgICAgdmFsaWRhdGlvbiQxLmxpbWl0ZWRDaG9pY2VzKGFyZ3YpO1xuICAgICAgICB2YWxpZGF0aW9uJDEuaW1wbGljYXRpb25zKGFyZ3YpO1xuICAgICAgICB2YWxpZGF0aW9uJDEuY29uZmxpY3RpbmcoYXJndik7XG4gICAgfTtcbiAgICBmdW5jdGlvbiBndWVzc0xvY2FsZSgpIHtcbiAgICAgICAgaWYgKCFkZXRlY3RMb2NhbGUpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IGxvY2FsZSA9IHNoaW0kMS5nZXRFbnYoJ0xDX0FMTCcpIHx8XG4gICAgICAgICAgICBzaGltJDEuZ2V0RW52KCdMQ19NRVNTQUdFUycpIHx8XG4gICAgICAgICAgICBzaGltJDEuZ2V0RW52KCdMQU5HJykgfHxcbiAgICAgICAgICAgIHNoaW0kMS5nZXRFbnYoJ0xBTkdVQUdFJykgfHxcbiAgICAgICAgICAgICdlbl9VUyc7XG4gICAgICAgIHNlbGYubG9jYWxlKGxvY2FsZS5yZXBsYWNlKC9bLjpdLiovLCAnJykpO1xuICAgIH1cbiAgICBzZWxmLmhlbHAoKTtcbiAgICBzZWxmLnZlcnNpb24oKTtcbiAgICByZXR1cm4gc2VsZjtcbn1cbmNvbnN0IHJlYmFzZSA9IChiYXNlLCBkaXIpID0+IHNoaW0kMS5wYXRoLnJlbGF0aXZlKGJhc2UsIGRpcik7XG5mdW5jdGlvbiBpc1lhcmdzSW5zdGFuY2UoeSkge1xuICAgIHJldHVybiAhIXkgJiYgdHlwZW9mIHkuX3BhcnNlQXJncyA9PT0gJ2Z1bmN0aW9uJztcbn1cblxudmFyIF9hLCBfYjtcbmNvbnN0IHsgcmVhZEZpbGVTeW5jIH0gPSByZXF1aXJlKCdmcycpO1xuY29uc3QgeyBpbnNwZWN0IH0gPSByZXF1aXJlKCd1dGlsJyk7XG5jb25zdCB7IHJlc29sdmUgfSA9IHJlcXVpcmUoJ3BhdGgnKTtcbmNvbnN0IHkxOG4gPSByZXF1aXJlKCd5MThuJyk7XG5jb25zdCBQYXJzZXIgPSByZXF1aXJlKCd5YXJncy1wYXJzZXInKTtcbnZhciBjanNQbGF0Zm9ybVNoaW0gPSB7XG4gICAgYXNzZXJ0OiB7XG4gICAgICAgIG5vdFN0cmljdEVxdWFsOiBhc3NlcnQubm90U3RyaWN0RXF1YWwsXG4gICAgICAgIHN0cmljdEVxdWFsOiBhc3NlcnQuc3RyaWN0RXF1YWwsXG4gICAgfSxcbiAgICBjbGl1aTogcmVxdWlyZSgnY2xpdWknKSxcbiAgICBmaW5kVXA6IHJlcXVpcmUoJ2VzY2FsYWRlL3N5bmMnKSxcbiAgICBnZXRFbnY6IChrZXkpID0+IHtcbiAgICAgICAgcmV0dXJuIHByb2Nlc3MuZW52W2tleV07XG4gICAgfSxcbiAgICBnZXRDYWxsZXJGaWxlOiByZXF1aXJlKCdnZXQtY2FsbGVyLWZpbGUnKSxcbiAgICBnZXRQcm9jZXNzQXJndkJpbjogZ2V0UHJvY2Vzc0FyZ3ZCaW4sXG4gICAgaW5zcGVjdCxcbiAgICBtYWluRmlsZW5hbWU6IChfYiA9IChfYSA9IHJlcXVpcmUgPT09IG51bGwgfHwgcmVxdWlyZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogcmVxdWlyZS5tYWluKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZmlsZW5hbWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IHByb2Nlc3MuY3dkKCksXG4gICAgUGFyc2VyLFxuICAgIHBhdGg6IHJlcXVpcmUoJ3BhdGgnKSxcbiAgICBwcm9jZXNzOiB7XG4gICAgICAgIGFyZ3Y6ICgpID0+IHByb2Nlc3MuYXJndixcbiAgICAgICAgY3dkOiBwcm9jZXNzLmN3ZCxcbiAgICAgICAgZXhlY1BhdGg6ICgpID0+IHByb2Nlc3MuZXhlY1BhdGgsXG4gICAgICAgIGV4aXQ6IChjb2RlKSA9PiB7XG4gICAgICAgICAgICBwcm9jZXNzLmV4aXQoY29kZSk7XG4gICAgICAgIH0sXG4gICAgICAgIG5leHRUaWNrOiBwcm9jZXNzLm5leHRUaWNrLFxuICAgICAgICBzdGRDb2x1bW5zOiB0eXBlb2YgcHJvY2Vzcy5zdGRvdXQuY29sdW1ucyAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAgICAgID8gcHJvY2Vzcy5zdGRvdXQuY29sdW1uc1xuICAgICAgICAgICAgOiBudWxsLFxuICAgIH0sXG4gICAgcmVhZEZpbGVTeW5jLFxuICAgIHJlcXVpcmU6IHJlcXVpcmUsXG4gICAgcmVxdWlyZURpcmVjdG9yeTogcmVxdWlyZSgncmVxdWlyZS1kaXJlY3RvcnknKSxcbiAgICBzdHJpbmdXaWR0aDogcmVxdWlyZSgnc3RyaW5nLXdpZHRoJyksXG4gICAgeTE4bjogeTE4bih7XG4gICAgICAgIGRpcmVjdG9yeTogcmVzb2x2ZShfX2Rpcm5hbWUsICcuLi9sb2NhbGVzJyksXG4gICAgICAgIHVwZGF0ZUZpbGVzOiBmYWxzZSxcbiAgICB9KSxcbn07XG5cbmNvbnN0IG1pbk5vZGVWZXJzaW9uID0gcHJvY2VzcyAmJiBwcm9jZXNzLmVudiAmJiBwcm9jZXNzLmVudi5ZQVJHU19NSU5fTk9ERV9WRVJTSU9OXG4gICAgPyBOdW1iZXIocHJvY2Vzcy5lbnYuWUFSR1NfTUlOX05PREVfVkVSU0lPTilcbiAgICA6IDEwO1xuaWYgKHByb2Nlc3MgJiYgcHJvY2Vzcy52ZXJzaW9uKSB7XG4gICAgY29uc3QgbWFqb3IgPSBOdW1iZXIocHJvY2Vzcy52ZXJzaW9uLm1hdGNoKC92KFteLl0rKS8pWzFdKTtcbiAgICBpZiAobWFqb3IgPCBtaW5Ob2RlVmVyc2lvbikge1xuICAgICAgICB0aHJvdyBFcnJvcihgeWFyZ3Mgc3VwcG9ydHMgYSBtaW5pbXVtIE5vZGUuanMgdmVyc2lvbiBvZiAke21pbk5vZGVWZXJzaW9ufS4gUmVhZCBvdXIgdmVyc2lvbiBzdXBwb3J0IHBvbGljeTogaHR0cHM6Ly9naXRodWIuY29tL3lhcmdzL3lhcmdzI3N1cHBvcnRlZC1ub2RlanMtdmVyc2lvbnNgKTtcbiAgICB9XG59XG5jb25zdCBQYXJzZXIkMSA9IHJlcXVpcmUoJ3lhcmdzLXBhcnNlcicpO1xuY29uc3QgWWFyZ3MkMSA9IFlhcmdzV2l0aFNoaW0oY2pzUGxhdGZvcm1TaGltKTtcbnZhciBjanMgPSB7XG4gICAgYXBwbHlFeHRlbmRzLFxuICAgIGNqc1BsYXRmb3JtU2hpbSxcbiAgICBZYXJnczogWWFyZ3MkMSxcbiAgICBhcmdzZXJ0LFxuICAgIGdsb2JhbE1pZGRsZXdhcmVGYWN0b3J5LFxuICAgIGlzUHJvbWlzZSxcbiAgICBvYmpGaWx0ZXIsXG4gICAgcGFyc2VDb21tYW5kLFxuICAgIFBhcnNlcjogUGFyc2VyJDEsXG4gICAgcHJvY2Vzc0FyZ3YsXG4gICAgcmViYXNlLFxuICAgIFlFcnJvcixcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gY2pzO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIGNsYXNzaWMgc2luZ2xldG9uIHlhcmdzIEFQSSwgdG8gdXNlIHlhcmdzXG4vLyB3aXRob3V0IHJ1bm5pbmcgYXMgYSBzaW5nbGV0b24gZG86XG4vLyByZXF1aXJlKCd5YXJncy95YXJncycpKHByb2Nlc3MuYXJndi5zbGljZSgyKSlcbmNvbnN0IHtZYXJncywgcHJvY2Vzc0FyZ3Z9ID0gcmVxdWlyZSgnLi9idWlsZC9pbmRleC5janMnKTtcblxuQXJndihwcm9jZXNzQXJndi5oaWRlQmluKHByb2Nlc3MuYXJndikpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEFyZ3Y7XG5cbmZ1bmN0aW9uIEFyZ3YocHJvY2Vzc0FyZ3MsIGN3ZCkge1xuICBjb25zdCBhcmd2ID0gWWFyZ3MocHJvY2Vzc0FyZ3MsIGN3ZCwgcmVxdWlyZSk7XG4gIHNpbmdsZXRvbmlmeShhcmd2KTtcbiAgcmV0dXJuIGFyZ3Y7XG59XG5cbi8qICBIYWNrIGFuIGluc3RhbmNlIG9mIEFyZ3Ygd2l0aCBwcm9jZXNzLmFyZ3YgaW50byBBcmd2XG4gICAgc28gcGVvcGxlIGNhbiBkb1xuICAgIHJlcXVpcmUoJ3lhcmdzJykoWyctLWJlZWJsZT0xJywnLXonLCd6aXp6bGUnXSkuYXJndlxuICAgIHRvIHBhcnNlIGEgbGlzdCBvZiBhcmdzIGFuZFxuICAgIHJlcXVpcmUoJ3lhcmdzJykuYXJndlxuICAgIHRvIGdldCBhIHBhcnNlZCB2ZXJzaW9uIG9mIHByb2Nlc3MuYXJndi5cbiovXG5mdW5jdGlvbiBzaW5nbGV0b25pZnkoaW5zdCkge1xuICBPYmplY3Qua2V5cyhpbnN0KS5mb3JFYWNoKGtleSA9PiB7XG4gICAgaWYgKGtleSA9PT0gJ2FyZ3YnKSB7XG4gICAgICBBcmd2Ll9fZGVmaW5lR2V0dGVyX18oa2V5LCBpbnN0Ll9fbG9va3VwR2V0dGVyX18oa2V5KSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgaW5zdFtrZXldID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBBcmd2W2tleV0gPSBpbnN0W2tleV0uYmluZChpbnN0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgQXJndi5fX2RlZmluZUdldHRlcl9fKCckMCcsICgpID0+IHtcbiAgICAgICAgcmV0dXJuIGluc3QuJDA7XG4gICAgICB9KTtcbiAgICAgIEFyZ3YuX19kZWZpbmVHZXR0ZXJfXygncGFyc2VkJywgKCkgPT4ge1xuICAgICAgICByZXR1cm4gaW5zdC5wYXJzZWQ7XG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xufVxuIiwgIi8vIEV4ZXJjaXNlIGFsbCBpbnRlZyBzdGFja3MgYW5kIGlmIHRoZXkgZGVwbG95LCB1cGRhdGUgdGhlIGV4cGVjdGVkIHN5bnRoIGZpbGVzXG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0ICogYXMgY2hhbGsgZnJvbSAnY2hhbGsnO1xuaW1wb3J0ICogYXMgd29ya2VycG9vbCBmcm9tICd3b3JrZXJwb29sJztcbmltcG9ydCAqIGFzIGxvZ2dlciBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgeyBJbnRlZ3JhdGlvblRlc3RzLCBJbnRlZ1Rlc3QsIEludGVnVGVzdEluZm8gfSBmcm9tICcuL3J1bm5lci9pbnRlZ3JhdGlvbi10ZXN0cyc7XG5pbXBvcnQgeyBydW5TbmFwc2hvdFRlc3RzLCBydW5JbnRlZ3JhdGlvblRlc3RzLCBJbnRlZ1J1bm5lck1ldHJpY3MsIEludGVnVGVzdFdvcmtlckNvbmZpZywgRGVzdHJ1Y3RpdmVDaGFuZ2UgfSBmcm9tICcuL3dvcmtlcnMnO1xuaW1wb3J0IHsgd2F0Y2hJbnRlZ3JhdGlvblRlc3QgfSBmcm9tICcuL3dvcmtlcnMvaW50ZWctd2F0Y2gtd29ya2VyJztcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3lhcmdzL3lhcmdzL2lzc3Vlcy8xOTI5XG4vLyBodHRwczovL2dpdGh1Yi5jb20vZXZhbncvZXNidWlsZC9pc3N1ZXMvMTQ5MlxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHNcbmNvbnN0IHlhcmdzID0gcmVxdWlyZSgneWFyZ3MnKTtcblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQ2xpQXJncyhhcmdzOiBzdHJpbmdbXSA9IFtdKSB7XG4gIGNvbnN0IGFyZ3YgPSB5YXJnc1xuICAgIC51c2FnZSgnVXNhZ2U6IGludGVnLXJ1bm5lciBbVEVTVC4uLl0nKVxuICAgIC5vcHRpb24oJ2NvbmZpZycsIHtcbiAgICAgIGNvbmZpZzogdHJ1ZSxcbiAgICAgIGNvbmZpZ1BhcnNlcjogY29uZmlnRnJvbUZpbGUsXG4gICAgICBkZWZhdWx0OiAnaW50ZWcuY29uZmlnLmpzb24nLFxuICAgICAgZGVzYzogJ0xvYWQgb3B0aW9ucyBmcm9tIGEgSlNPTiBjb25maWcgZmlsZS4gT3B0aW9ucyBwcm92aWRlZCBhcyBDTEkgYXJndW1lbnRzIHRha2UgcHJlY2VkZW50LicsXG4gICAgfSlcbiAgICAub3B0aW9uKCd3YXRjaCcsIHsgdHlwZTogJ2Jvb2xlYW4nLCBkZWZhdWx0OiBmYWxzZSwgZGVzYzogJ1BlcmZvcm0gaW50ZWcgdGVzdHMgaW4gd2F0Y2ggbW9kZScgfSlcbiAgICAub3B0aW9uKCdsaXN0JywgeyB0eXBlOiAnYm9vbGVhbicsIGRlZmF1bHQ6IGZhbHNlLCBkZXNjOiAnTGlzdCB0ZXN0cyBpbnN0ZWFkIG9mIHJ1bm5pbmcgdGhlbScgfSlcbiAgICAub3B0aW9uKCdjbGVhbicsIHsgdHlwZTogJ2Jvb2xlYW4nLCBkZWZhdWx0OiB0cnVlLCBkZXNjOiAnU2tpcHMgc3RhY2sgY2xlYW4gdXAgYWZ0ZXIgdGVzdCBpcyBjb21wbGV0ZWQgKHVzZSAtLW5vLWNsZWFuIHRvIG5lZ2F0ZSknIH0pXG4gICAgLm9wdGlvbigndmVyYm9zZScsIHsgdHlwZTogJ2Jvb2xlYW4nLCBkZWZhdWx0OiBmYWxzZSwgYWxpYXM6ICd2JywgY291bnQ6IHRydWUsIGRlc2M6ICdWZXJib3NlIGxvZ3MgYW5kIG1ldHJpY3Mgb24gaW50ZWdyYXRpb24gdGVzdHMgZHVyYXRpb25zIChzcGVjaWZ5IG11bHRpcGxlIHRpbWVzIHRvIGluY3JlYXNlIHZlcmJvc2l0eSknIH0pXG4gICAgLm9wdGlvbignZHJ5LXJ1bicsIHsgdHlwZTogJ2Jvb2xlYW4nLCBkZWZhdWx0OiBmYWxzZSwgZGVzYzogJ2RvIG5vdCBhY3R1YWxseSBkZXBsb3kgdGhlIHN0YWNrLiBqdXN0IHVwZGF0ZSB0aGUgc25hcHNob3QgKG5vdCByZWNvbW1lbmRlZCEpJyB9KVxuICAgIC5vcHRpb24oJ3VwZGF0ZS1vbi1mYWlsZWQnLCB7IHR5cGU6ICdib29sZWFuJywgZGVmYXVsdDogZmFsc2UsIGRlc2M6ICdyZXJ1biBpbnRlZ3JhdGlvbiB0ZXN0cyBhbmQgdXBkYXRlIHNuYXBzaG90cyBmb3IgZmFpbGVkIHRlc3RzLicgfSlcbiAgICAub3B0aW9uKCdmb3JjZScsIHsgdHlwZTogJ2Jvb2xlYW4nLCBkZWZhdWx0OiBmYWxzZSwgZGVzYzogJ1JlcnVuIGFsbCBpbnRlZ3JhdGlvbiB0ZXN0cyBldmVuIGlmIHRlc3RzIGFyZSBwYXNzaW5nJyB9KVxuICAgIC5vcHRpb24oJ3BhcmFsbGVsLXJlZ2lvbnMnLCB7IHR5cGU6ICdhcnJheScsIGRlc2M6ICdUZXN0cyBhcmUgcnVuIGluIHBhcmFsbGVsIGFjcm9zcyB0aGVzZSByZWdpb25zLiBUbyBwcmV2ZW50IHRlc3RzIGZyb20gcnVubmluZyBpbiBwYXJhbGxlbCwgcHJvdmlkZSBvbmx5IGEgc2luZ2xlIHJlZ2lvbicsIGRlZmF1bHQ6IFtdIH0pXG4gICAgLm9wdGlvbnMoJ2RpcmVjdG9yeScsIHsgdHlwZTogJ3N0cmluZycsIGRlZmF1bHQ6ICd0ZXN0JywgZGVzYzogJ3N0YXJ0aW5nIGRpcmVjdG9yeSB0byBkaXNjb3ZlciBpbnRlZ3JhdGlvbiB0ZXN0cy4gVGVzdHMgd2lsbCBiZSBkaXNjb3ZlcmVkIHJlY3Vyc2l2ZWx5IGZyb20gdGhpcyBkaXJlY3RvcnknIH0pXG4gICAgLm9wdGlvbnMoJ3Byb2ZpbGVzJywgeyB0eXBlOiAnYXJyYXknLCBkZXNjOiAnbGlzdCBvZiBBV1MgcHJvZmlsZXMgdG8gdXNlLiBUZXN0cyB3aWxsIGJlIHJ1biBpbiBwYXJhbGxlbCBhY3Jvc3MgZWFjaCBwcm9maWxlK3JlZ2lvbnMnLCBkZWZhdWx0OiBbXSB9KVxuICAgIC5vcHRpb25zKCdtYXgtd29ya2VycycsIHsgdHlwZTogJ251bWJlcicsIGRlc2M6ICdUaGUgbWF4IG51bWJlciBvZiB3b3JrZXJwb29sIHdvcmtlcnMgdG8gdXNlIHdoZW4gcnVubmluZyBpbnRlZ3JhdGlvbiB0ZXN0cyBpbiBwYXJhbGxlbCcsIGRlZmF1bHQ6IDE2IH0pXG4gICAgLm9wdGlvbnMoJ2V4Y2x1ZGUnLCB7IHR5cGU6ICdib29sZWFuJywgZGVzYzogJ1J1biBhbGwgdGVzdHMgaW4gdGhlIGRpcmVjdG9yeSwgZXhjZXB0IHRoZSBzcGVjaWZpZWQgVEVTVHMnLCBkZWZhdWx0OiBmYWxzZSB9KVxuICAgIC5vcHRpb25zKCdmcm9tLWZpbGUnLCB7IHR5cGU6ICdzdHJpbmcnLCBkZXNjOiAnUmVhZCBURVNUIG5hbWVzIGZyb20gYSBmaWxlIChvbmUgVEVTVCBwZXIgbGluZSknIH0pXG4gICAgLm9wdGlvbignaW5zcGVjdC1mYWlsdXJlcycsIHsgdHlwZTogJ2Jvb2xlYW4nLCBkZXNjOiAnS2VlcCB0aGUgaW50ZWcgdGVzdCBjbG91ZCBhc3NlbWJseSBpZiBhIGZhaWx1cmUgb2NjdXJzIGZvciBpbnNwZWN0aW9uJywgZGVmYXVsdDogZmFsc2UgfSlcbiAgICAub3B0aW9uKCdkaXNhYmxlLXVwZGF0ZS13b3JrZmxvdycsIHsgdHlwZTogJ2Jvb2xlYW4nLCBkZWZhdWx0OiBmYWxzZSwgZGVzYzogJ0lmIHRoaXMgaXMgXCJ0cnVlXCIgdGhlbiB0aGUgc3RhY2sgdXBkYXRlIHdvcmtmbG93IHdpbGwgYmUgZGlzYWJsZWQnIH0pXG4gICAgLm9wdGlvbignbGFuZ3VhZ2UnLCB7XG4gICAgICBhbGlhczogJ2wnLFxuICAgICAgZGVmYXVsdDogWydqYXZhc2NyaXB0JywgJ3R5cGVzY3JpcHQnLCAncHl0aG9uJywgJ2dvJ10sXG4gICAgICBjaG9pY2VzOiBbJ2phdmFzY3JpcHQnLCAndHlwZXNjcmlwdCcsICdweXRob24nLCAnZ28nXSxcbiAgICAgIHR5cGU6ICdhcnJheScsXG4gICAgICBkZXNjOiAnVXNlIHRoZXNlIHByZXNldHMgdG8gcnVuIGludGVncmF0aW9uIHRlc3RzIGZvciB0aGUgc2VsZWN0ZWQgbGFuZ3VhZ2VzJyxcbiAgICB9KVxuICAgIC5vcHRpb24oJ2FwcCcsIHsgdHlwZTogJ3N0cmluZycsIGRlZmF1bHQ6IHVuZGVmaW5lZCwgZGVzYzogJ1RoZSBjdXN0b20gQ0xJIGNvbW1hbmQgdGhhdCB3aWxsIGJlIHVzZWQgdG8gcnVuIHRoZSB0ZXN0IGZpbGVzLiBZb3UgY2FuIGluY2x1ZGUge2ZpbGVQYXRofSB0byBzcGVjaWZ5IHdoZXJlIGluIHRoZSBjb21tYW5kIHRoZSB0ZXN0IGZpbGUgcGF0aCBzaG91bGQgYmUgaW5zZXJ0ZWQuIEV4YW1wbGU6IC0tYXBwPVwicHl0aG9uMy44IHtmaWxlUGF0aH1cIi4nIH0pXG4gICAgLm9wdGlvbigndGVzdC1yZWdleCcsIHsgdHlwZTogJ2FycmF5JywgZGVzYzogJ0RldGVjdCBpbnRlZ3JhdGlvbiB0ZXN0IGZpbGVzIG1hdGNoaW5nIHRoaXMgSmF2YVNjcmlwdCByZWdleCBwYXR0ZXJuLiBJZiB1c2VkIG11bHRpcGxlIHRpbWVzLCBhbGwgZmlsZXMgbWF0Y2hpbmcgYW55IG9uZSBvZiB0aGUgcGF0dGVybnMgYXJlIGRldGVjdGVkLicsIGRlZmF1bHQ6IFtdIH0pXG4gICAgLnN0cmljdCgpXG4gICAgLnBhcnNlKGFyZ3MpO1xuXG4gIGNvbnN0IHRlc3RzOiBzdHJpbmdbXSA9IGFyZ3YuXztcbiAgY29uc3QgcGFyYWxsZWxSZWdpb25zID0gYXJyYXlGcm9tWWFyZ3MoYXJndlsncGFyYWxsZWwtcmVnaW9ucyddKTtcbiAgY29uc3QgdGVzdFJlZ2lvbnM6IHN0cmluZ1tdID0gcGFyYWxsZWxSZWdpb25zID8/IFsndXMtZWFzdC0xJywgJ3VzLWVhc3QtMicsICd1cy13ZXN0LTInXTtcbiAgY29uc3QgcHJvZmlsZXMgPSBhcnJheUZyb21ZYXJncyhhcmd2LnByb2ZpbGVzKTtcbiAgY29uc3QgZnJvbUZpbGU6IHN0cmluZyB8IHVuZGVmaW5lZCA9IGFyZ3ZbJ2Zyb20tZmlsZSddO1xuICBjb25zdCBtYXhXb3JrZXJzOiBudW1iZXIgPSBhcmd2WydtYXgtd29ya2VycyddO1xuICBjb25zdCB2ZXJib3NpdHk6IG51bWJlciA9IGFyZ3YudmVyYm9zZTtcbiAgY29uc3QgdmVyYm9zZTogYm9vbGVhbiA9IHZlcmJvc2l0eSA+PSAxO1xuXG4gIGNvbnN0IG51bVRlc3RzID0gdGVzdFJlZ2lvbnMubGVuZ3RoICogKHByb2ZpbGVzID8/IFsxXSkubGVuZ3RoO1xuICBpZiAobWF4V29ya2VycyA8IG51bVRlc3RzKSB7XG4gICAgbG9nZ2VyLndhcm5pbmcoJ1lvdSBhcmUgYXR0ZW1wdGluZyB0byBydW4gJXMgdGVzdHMgaW4gcGFyYWxsZWwsIGJ1dCBvbmx5IGhhdmUgJXMgd29ya2Vycy4gTm90IGFsbCBvZiB5b3VyIHByb2ZpbGVzK3JlZ2lvbnMgd2lsbCBiZSB1dGlsaXplZCcsIG51bVRlc3RzLCBtYXhXb3JrZXJzKTtcbiAgfVxuXG4gIGlmICh0ZXN0cy5sZW5ndGggPiAwICYmIGZyb21GaWxlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdBIGxpc3Qgb2YgdGVzdHMgY2Fubm90IGJlIHByb3ZpZGVkIGlmIFwiLS1mcm9tLWZpbGVcIiBpcyBwcm92aWRlZCcpO1xuICB9XG4gIGNvbnN0IHJlcXVlc3RlZFRlc3RzID0gZnJvbUZpbGVcbiAgICA/IChmcy5yZWFkRmlsZVN5bmMoZnJvbUZpbGUsIHsgZW5jb2Rpbmc6ICd1dGY4JyB9KSkuc3BsaXQoJ1xcbicpLmZpbHRlcih4ID0+IHgpXG4gICAgOiAodGVzdHMubGVuZ3RoID4gMCA/IHRlc3RzIDogdW5kZWZpbmVkKTsgLy8gJ3VuZGVmaW5lZCcgbWVhbnMgbm8gcmVxdWVzdFxuXG4gIHJldHVybiB7XG4gICAgdGVzdHM6IHJlcXVlc3RlZFRlc3RzLFxuICAgIGFwcDogYXJndi5hcHAgYXMgKHN0cmluZyB8IHVuZGVmaW5lZCksXG4gICAgdGVzdFJlZ2V4OiBhcnJheUZyb21ZYXJncyhhcmd2Wyd0ZXN0LXJlZ2V4J10pLFxuICAgIHRlc3RSZWdpb25zLFxuICAgIG9yaWdpbmFsUmVnaW9uczogcGFyYWxsZWxSZWdpb25zLFxuICAgIHByb2ZpbGVzLFxuICAgIHJ1blVwZGF0ZU9uRmFpbGVkOiAoYXJndlsndXBkYXRlLW9uLWZhaWxlZCddID8/IGZhbHNlKSBhcyBib29sZWFuLFxuICAgIGZyb21GaWxlLFxuICAgIGV4Y2x1ZGU6IGFyZ3YuZXhjbHVkZSBhcyBib29sZWFuLFxuICAgIG1heFdvcmtlcnMsXG4gICAgbGlzdDogYXJndi5saXN0IGFzIGJvb2xlYW4sXG4gICAgZGlyZWN0b3J5OiBhcmd2LmRpcmVjdG9yeSBhcyBzdHJpbmcsXG4gICAgaW5zcGVjdEZhaWx1cmVzOiBhcmd2WydpbnNwZWN0LWZhaWx1cmVzJ10gYXMgYm9vbGVhbixcbiAgICB2ZXJib3NpdHksXG4gICAgdmVyYm9zZSxcbiAgICBjbGVhbjogYXJndi5jbGVhbiBhcyBib29sZWFuLFxuICAgIGZvcmNlOiBhcmd2LmZvcmNlIGFzIGJvb2xlYW4sXG4gICAgZHJ5UnVuOiBhcmd2WydkcnktcnVuJ10gYXMgYm9vbGVhbixcbiAgICBkaXNhYmxlVXBkYXRlV29ya2Zsb3c6IGFyZ3ZbJ2Rpc2FibGUtdXBkYXRlLXdvcmtmbG93J10gYXMgYm9vbGVhbixcbiAgICBsYW5ndWFnZTogYXJyYXlGcm9tWWFyZ3MoYXJndi5sYW5ndWFnZSksXG4gICAgd2F0Y2g6IGFyZ3Yud2F0Y2ggYXMgYm9vbGVhbixcbiAgfTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG1haW4oYXJnczogc3RyaW5nW10pIHtcbiAgY29uc3Qgb3B0aW9ucyA9IHBhcnNlQ2xpQXJncyhhcmdzKTtcblxuICBjb25zdCB0ZXN0c0Zyb21BcmdzID0gYXdhaXQgbmV3IEludGVncmF0aW9uVGVzdHMocGF0aC5yZXNvbHZlKG9wdGlvbnMuZGlyZWN0b3J5KSkuZnJvbUNsaU9wdGlvbnMob3B0aW9ucyk7XG5cbiAgLy8gTGlzdCBvbmx5IHByaW50cyB0aGUgZGlzY292ZXJlZCB0ZXN0c1xuICBpZiAob3B0aW9ucy5saXN0KSB7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUodGVzdHNGcm9tQXJncy5tYXAodCA9PiB0LmRpc2NvdmVyeVJlbGF0aXZlRmlsZU5hbWUpLmpvaW4oJ1xcbicpICsgJ1xcbicpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHBvb2wgPSB3b3JrZXJwb29sLnBvb2wocGF0aC5qb2luKF9fZGlybmFtZSwgJy4uL2xpYi93b3JrZXJzL2V4dHJhY3QvaW5kZXguanMnKSwge1xuICAgIG1heFdvcmtlcnM6IG9wdGlvbnMud2F0Y2ggPyAxIDogb3B0aW9ucy5tYXhXb3JrZXJzLFxuICB9KTtcblxuICBjb25zdCB0ZXN0c1RvUnVuOiBJbnRlZ1Rlc3RXb3JrZXJDb25maWdbXSA9IFtdO1xuICBsZXQgZGVzdHJ1Y3RpdmVDaGFuZ2VzOiBib29sZWFuID0gZmFsc2U7XG4gIGxldCBmYWlsZWRTbmFwc2hvdHM6IEludGVnVGVzdFdvcmtlckNvbmZpZ1tdID0gW107XG4gIGxldCB0ZXN0c1N1Y2NlZWRlZCA9IGZhbHNlO1xuICB2YWxpZGF0ZVdhdGNoQXJncyh7XG4gICAgLi4ub3B0aW9ucyxcbiAgICB0ZXN0UmVnaW9uczogb3B0aW9ucy5vcmlnaW5hbFJlZ2lvbnMsXG4gICAgdGVzdHM6IHRlc3RzRnJvbUFyZ3MsXG4gIH0pO1xuXG4gIHRyeSB7XG4gICAgaWYgKCFvcHRpb25zLndhdGNoKSB7XG4gICAgICAvLyBhbHdheXMgcnVuIHNuYXBzaG90IHRlc3RzLCBidXQgaWYgJy0tZm9yY2UnIGlzIHBhc3NlZCB0aGVuXG4gICAgICAvLyBydW4gaW50ZWdyYXRpb24gdGVzdHMgb24gYWxsIGZhaWxlZCB0ZXN0cywgbm90IGp1c3QgdGhvc2UgdGhhdFxuICAgICAgLy8gZmFpbGVkIHNuYXBzaG90IHRlc3RzXG4gICAgICBmYWlsZWRTbmFwc2hvdHMgPSBhd2FpdCBydW5TbmFwc2hvdFRlc3RzKHBvb2wsIHRlc3RzRnJvbUFyZ3MsIHtcbiAgICAgICAgcmV0YWluOiBvcHRpb25zLmluc3BlY3RGYWlsdXJlcyxcbiAgICAgICAgdmVyYm9zZTogb3B0aW9ucy52ZXJib3NlLFxuICAgICAgfSk7XG4gICAgICBmb3IgKGNvbnN0IGZhaWx1cmUgb2YgZmFpbGVkU25hcHNob3RzKSB7XG4gICAgICAgIGxvZ2dlci53YXJuaW5nKGBGYWlsZWQ6ICR7ZmFpbHVyZS5maWxlTmFtZX1gKTtcbiAgICAgICAgaWYgKGZhaWx1cmUuZGVzdHJ1Y3RpdmVDaGFuZ2VzICYmIGZhaWx1cmUuZGVzdHJ1Y3RpdmVDaGFuZ2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBwcmludERlc3RydWN0aXZlQ2hhbmdlcyhmYWlsdXJlLmRlc3RydWN0aXZlQ2hhbmdlcyk7XG4gICAgICAgICAgZGVzdHJ1Y3RpdmVDaGFuZ2VzID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCFvcHRpb25zLmZvcmNlKSB7XG4gICAgICAgIHRlc3RzVG9SdW4ucHVzaCguLi5mYWlsZWRTbmFwc2hvdHMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gaWYgYW55IG9mIHRoZSB0ZXN0IGZhaWxlZCBzbmFwc2hvdCB0ZXN0cywga2VlcCB0aG9zZSByZXN1bHRzXG4gICAgICAgIC8vIGFuZCBtZXJnZSB3aXRoIHRoZSByZXN0IG9mIHRoZSB0ZXN0cyBmcm9tIGFyZ3NcbiAgICAgICAgdGVzdHNUb1J1bi5wdXNoKC4uLm1lcmdlVGVzdHModGVzdHNGcm9tQXJncy5tYXAodCA9PiB0LmluZm8pLCBmYWlsZWRTbmFwc2hvdHMpKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGVzdHNUb1J1bi5wdXNoKC4uLnRlc3RzRnJvbUFyZ3MubWFwKHQgPT4gdC5pbmZvKSk7XG4gICAgfVxuXG4gICAgLy8gcnVuIGludGVncmF0aW9uIHRlc3RzIGlmIGAtLXVwZGF0ZS1vbi1mYWlsZWRgIE9SIGAtLWZvcmNlYCBpcyB1c2VkXG4gICAgaWYgKG9wdGlvbnMucnVuVXBkYXRlT25GYWlsZWQgfHwgb3B0aW9ucy5mb3JjZSkge1xuICAgICAgY29uc3QgeyBzdWNjZXNzLCBtZXRyaWNzIH0gPSBhd2FpdCBydW5JbnRlZ3JhdGlvblRlc3RzKHtcbiAgICAgICAgcG9vbCxcbiAgICAgICAgdGVzdHM6IHRlc3RzVG9SdW4sXG4gICAgICAgIHJlZ2lvbnM6IG9wdGlvbnMudGVzdFJlZ2lvbnMsXG4gICAgICAgIHByb2ZpbGVzOiBvcHRpb25zLnByb2ZpbGVzLFxuICAgICAgICBjbGVhbjogb3B0aW9ucy5jbGVhbixcbiAgICAgICAgZHJ5UnVuOiBvcHRpb25zLmRyeVJ1bixcbiAgICAgICAgdmVyYm9zaXR5OiBvcHRpb25zLnZlcmJvc2l0eSxcbiAgICAgICAgdXBkYXRlV29ya2Zsb3c6ICFvcHRpb25zLmRpc2FibGVVcGRhdGVXb3JrZmxvdyxcbiAgICAgICAgd2F0Y2g6IG9wdGlvbnMud2F0Y2gsXG4gICAgICB9KTtcbiAgICAgIHRlc3RzU3VjY2VlZGVkID0gc3VjY2VzcztcblxuICAgICAgaWYgKG9wdGlvbnMuY2xlYW4gPT09IGZhbHNlKSB7XG4gICAgICAgIGxvZ2dlci53YXJuaW5nKCdOb3QgY2xlYW5pbmcgdXAgc3RhY2tzIHNpbmNlIFwiLS1uby1jbGVhblwiIHdhcyB1c2VkJyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChCb29sZWFuKG9wdGlvbnMudmVyYm9zZSkpIHtcbiAgICAgICAgcHJpbnRNZXRyaWNzKG1ldHJpY3MpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXN1Y2Nlc3MpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTb21lIGludGVncmF0aW9uIHRlc3RzIGZhaWxlZCEnKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMud2F0Y2gpIHtcbiAgICAgIGF3YWl0IHdhdGNoSW50ZWdyYXRpb25UZXN0KHBvb2wsIHtcbiAgICAgICAgd2F0Y2g6IHRydWUsXG4gICAgICAgIHZlcmJvc2l0eTogb3B0aW9ucy52ZXJib3NpdHksXG4gICAgICAgIC4uLnRlc3RzVG9SdW5bMF0sXG4gICAgICAgIHByb2ZpbGU6IG9wdGlvbnMucHJvZmlsZXMgPyBvcHRpb25zLnByb2ZpbGVzWzBdIDogdW5kZWZpbmVkLFxuICAgICAgICByZWdpb246IG9wdGlvbnMudGVzdFJlZ2lvbnNbMF0sXG4gICAgICB9KTtcbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgdm9pZCBwb29sLnRlcm1pbmF0ZSgpO1xuICB9XG5cbiAgaWYgKGRlc3RydWN0aXZlQ2hhbmdlcykge1xuICAgIHRocm93IG5ldyBFcnJvcignU29tZSBjaGFuZ2VzIHdlcmUgZGVzdHJ1Y3RpdmUhJyk7XG4gIH1cbiAgaWYgKGZhaWxlZFNuYXBzaG90cy5sZW5ndGggPiAwKSB7XG4gICAgbGV0IG1lc3NhZ2UgPSAnJztcbiAgICBpZiAoIW9wdGlvbnMucnVuVXBkYXRlT25GYWlsZWQpIHtcbiAgICAgIG1lc3NhZ2UgPSAnVG8gcmUtcnVuIGZhaWxlZCB0ZXN0cyBydW46IGludGVnLXJ1bm5lciAtLXVwZGF0ZS1vbi1mYWlsZWQnO1xuICAgIH1cbiAgICBpZiAoIXRlc3RzU3VjY2VlZGVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFNvbWUgdGVzdHMgZmFpbGVkIVxcbiR7bWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVdhdGNoQXJncyhhcmdzOiB7XG4gIHRlc3RzOiBJbnRlZ1Rlc3RbXSxcbiAgdGVzdFJlZ2lvbnM/OiBzdHJpbmdbXSxcbiAgcHJvZmlsZXM/OiBzdHJpbmdbXSxcbiAgbWF4V29ya2VyczogbnVtYmVyLFxuICBmb3JjZTogYm9vbGVhbixcbiAgZHJ5UnVuOiBib29sZWFuLFxuICBkaXNhYmxlVXBkYXRlV29ya2Zsb3c6IGJvb2xlYW4sXG4gIHJ1blVwZGF0ZU9uRmFpbGVkOiBib29sZWFuLFxuICB3YXRjaDogYm9vbGVhbixcbn0pIHtcbiAgaWYgKGFyZ3Mud2F0Y2gpIHtcbiAgICBpZiAoXG4gICAgICAoYXJncy50ZXN0UmVnaW9ucyAmJiBhcmdzLnRlc3RSZWdpb25zLmxlbmd0aCA+IDEpXG4gICAgICAgIHx8IChhcmdzLnByb2ZpbGVzICYmIGFyZ3MucHJvZmlsZXMubGVuZ3RoID4gMSlcbiAgICAgICAgfHwgYXJncy50ZXN0cy5sZW5ndGggPiAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1J1bm5pbmcgd2l0aCB3YXRjaCBvbmx5IHN1cHBvcnRzIGEgc2luZ2xlIHRlc3QuIE9ubHkgcHJvdmlkZSBhIHNpbmdsZSBvcHRpb24nK1xuICAgICAgICAndG8gYC0tcHJvZmlsZXNgIGAtLXBhcmFsbGVsLXJlZ2lvbnNgIGAtLW1heC13b3JrZXJzJyk7XG4gICAgfVxuXG4gICAgaWYgKGFyZ3MucnVuVXBkYXRlT25GYWlsZWQgfHwgYXJncy5kaXNhYmxlVXBkYXRlV29ya2Zsb3cgfHwgYXJncy5mb3JjZSB8fCBhcmdzLmRyeVJ1bikge1xuICAgICAgbG9nZ2VyLndhcm5pbmcoJ2FyZ3MgYC0tdXBkYXRlLW9uLWZhaWxlZGAsIGAtLWRpc2FibGUtdXBkYXRlLXdvcmtmbG93YCwgYC0tZm9yY2VgLCBgLS1kcnktcnVuYCBoYXZlIG5vIGVmZmVjdCB3aGVuIHJ1bm5pbmcgd2l0aCBgLS13YXRjaGAnKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJpbnREZXN0cnVjdGl2ZUNoYW5nZXMoY2hhbmdlczogRGVzdHJ1Y3RpdmVDaGFuZ2VbXSk6IHZvaWQge1xuICBpZiAoY2hhbmdlcy5sZW5ndGggPiAwKSB7XG4gICAgbG9nZ2VyLndhcm5pbmcoJyEhISBUaGlzIHRlc3QgY29udGFpbnMgJXMgISEhJywgY2hhbGsuYm9sZCgnZGVzdHJ1Y3RpdmUgY2hhbmdlcycpKTtcbiAgICBjaGFuZ2VzLmZvckVhY2goY2hhbmdlID0+IHtcbiAgICAgIGxvZ2dlci53YXJuaW5nKCcgICAgU3RhY2s6ICVzIC0gUmVzb3VyY2U6ICVzIC0gSW1wYWN0OiAlcycsIGNoYW5nZS5zdGFja05hbWUsIGNoYW5nZS5sb2dpY2FsSWQsIGNoYW5nZS5pbXBhY3QpO1xuICAgIH0pO1xuICAgIGxvZ2dlci53YXJuaW5nKCchISEgSWYgdGhlc2UgZGVzdHJ1Y3RpdmUgY2hhbmdlcyBhcmUgbmVjZXNzYXJ5LCBwbGVhc2UgaW5kaWNhdGUgdGhpcyBvbiB0aGUgUFIgISEhJyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJpbnRNZXRyaWNzKG1ldHJpY3M6IEludGVnUnVubmVyTWV0cmljc1tdKTogdm9pZCB7XG4gIGxvZ2dlci5oaWdobGlnaHQoJyAgIC0tLSBJbnRlZ3JhdGlvbiB0ZXN0IG1ldHJpY3MgLS0tJyk7XG4gIGNvbnN0IHNvcnRlZE1ldHJpY3MgPSBtZXRyaWNzLnNvcnQoKGEsIGIpID0+IGEuZHVyYXRpb24gLSBiLmR1cmF0aW9uKTtcbiAgc29ydGVkTWV0cmljcy5mb3JFYWNoKG1ldHJpYyA9PiB7XG4gICAgbG9nZ2VyLnByaW50KCdQcm9maWxlICVzICsgUmVnaW9uICVzIHRvdGFsIHRpbWU6ICVzJywgbWV0cmljLnByb2ZpbGUsIG1ldHJpYy5yZWdpb24sIG1ldHJpYy5kdXJhdGlvbik7XG4gICAgY29uc3Qgc29ydGVkVGVzdHMgPSBPYmplY3QuZW50cmllcyhtZXRyaWMudGVzdHMpLnNvcnQoKGEsIGIpID0+IGFbMV0gLSBiWzFdKTtcbiAgICBzb3J0ZWRUZXN0cy5mb3JFYWNoKHRlc3QgPT4gbG9nZ2VyLnByaW50KCcgICVzOiAlcycsIHRlc3RbMF0sIHRlc3RbMV0pKTtcbiAgfSk7XG59XG5cbi8qKlxuICogVHJhbnNsYXRlIGEgWWFyZ3MgaW5wdXQgYXJyYXkgdG8gc29tZXRoaW5nIHRoYXQgbWFrZXMgbW9yZSBzZW5zZSBpbiBhIHByb2dyYW1taW5nIGxhbmd1YWdlXG4gKiBtb2RlbCAodGVsbGluZyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGFic2VuY2UgYW5kIGFuIGVtcHR5IGFycmF5KVxuICpcbiAqIC0gQW4gZW1wdHkgYXJyYXkgaXMgdGhlIGRlZmF1bHQgY2FzZSwgbWVhbmluZyB0aGUgdXNlciBkaWRuJ3QgcGFzcyBhbnkgYXJndW1lbnRzLiBXZSByZXR1cm5cbiAqICAgdW5kZWZpbmVkLlxuICogLSBJZiB0aGUgdXNlciBwYXNzZWQgYSBzaW5nbGUgZW1wdHkgc3RyaW5nLCB0aGV5IGRpZCBzb21ldGhpbmcgbGlrZSBgLS1hcnJheT1gLCB3aGljaCB3ZSdsbFxuICogICB0YWtlIHRvIG1lYW4gdGhleSBwYXNzZWQgYW4gZW1wdHkgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGFycmF5RnJvbVlhcmdzKHhzOiBzdHJpbmdbXSk6IHN0cmluZ1tdIHwgdW5kZWZpbmVkIHtcbiAgaWYgKHhzLmxlbmd0aCA9PT0gMCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIHJldHVybiB4cy5maWx0ZXIoeCA9PiB4ICE9PSAnJyk7XG59XG5cbi8qKlxuICogTWVyZ2UgdGhlIHRlc3RzIHdlIHJlY2VpdmVkIGZyb20gY29tbWFuZCBsaW5lIGFyZ3VtZW50cyB3aXRoXG4gKiB0ZXN0cyB0aGF0IGZhaWxlZCBzbmFwc2hvdCB0ZXN0cy4gVGhlIGZhaWxlZCBzbmFwc2hvdCB0ZXN0cyBoYXZlIGFkZGl0aW9uYWxcbiAqIGluZm9ybWF0aW9uIHRoYXQgd2Ugd2FudCB0byBrZWVwIHNvIHRoaXMgc2hvdWxkIG92ZXJyaWRlIGFueSB0ZXN0IGZyb20gYXJnc1xuICovXG5mdW5jdGlvbiBtZXJnZVRlc3RzKHRlc3RGcm9tQXJnczogSW50ZWdUZXN0SW5mb1tdLCBmYWlsZWRTbmFwc2hvdFRlc3RzOiBJbnRlZ1Rlc3RXb3JrZXJDb25maWdbXSk6IEludGVnVGVzdFdvcmtlckNvbmZpZ1tdIHtcbiAgY29uc3QgZmFpbGVkVGVzdE5hbWVzID0gbmV3IFNldChmYWlsZWRTbmFwc2hvdFRlc3RzLm1hcCh0ZXN0ID0+IHRlc3QuZmlsZU5hbWUpKTtcbiAgY29uc3QgZmluYWw6IEludGVnVGVzdFdvcmtlckNvbmZpZ1tdID0gZmFpbGVkU25hcHNob3RUZXN0cztcbiAgZmluYWwucHVzaCguLi50ZXN0RnJvbUFyZ3MuZmlsdGVyKHRlc3QgPT4gIWZhaWxlZFRlc3ROYW1lcy5oYXModGVzdC5maWxlTmFtZSkpKTtcbiAgcmV0dXJuIGZpbmFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xpKGFyZ3M6IHN0cmluZ1tdID0gcHJvY2Vzcy5hcmd2LnNsaWNlKDIpKSB7XG4gIG1haW4oYXJncykudGhlbigpLmNhdGNoKGVyciA9PiB7XG4gICAgbG9nZ2VyLmVycm9yKGVycik7XG4gICAgcHJvY2Vzcy5leGl0Q29kZSA9IDE7XG4gIH0pO1xufVxuXG4vKipcbiAqIFJlYWQgQ0xJIG9wdGlvbnMgZnJvbSBhIGNvbmZpZyBmaWxlIGlmIHByb3ZpZGVkLlxuICpcbiAqIEBwYXJhbSBmaWxlTmFtZVxuICogQHJldHVybnMgcGFyc2VkIENMSSBjb25maWcgb3B0aW9uc1xuICovXG5mdW5jdGlvbiBjb25maWdGcm9tRmlsZShmaWxlTmFtZT86IHN0cmluZyk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICBpZiAoIWZpbGVOYW1lKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmMoZmlsZU5hbWUsIHsgZW5jb2Rpbmc6ICd1dGYtOCcgfSkpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4ge307XG4gIH1cbn1cbiIsICJleHBvcnQgeyBjbGkgfSBmcm9tICcuL2NsaSc7XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBLDhDQUFBQSxVQUFBQyxTQUFBO0FBQUE7QUFFQSxJQUFBQSxRQUFPLFVBQVU7QUFBQSxNQUNoQixhQUFhLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUMzQixnQkFBZ0IsQ0FBQyxLQUFLLEtBQUssR0FBRztBQUFBLE1BQzlCLFFBQVEsQ0FBQyxHQUFHLEtBQUssR0FBRztBQUFBLE1BQ3BCLGNBQWMsQ0FBQyxLQUFLLEtBQUssR0FBRztBQUFBLE1BQzVCLFNBQVMsQ0FBQyxLQUFLLEtBQUssR0FBRztBQUFBLE1BQ3ZCLFNBQVMsQ0FBQyxLQUFLLEtBQUssR0FBRztBQUFBLE1BQ3ZCLFVBQVUsQ0FBQyxLQUFLLEtBQUssR0FBRztBQUFBLE1BQ3hCLFNB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T0FBQSxFQUFBLFlBQUEsTUFBQSxLQUFBLFdBQUE7QUFBQSxTQUFBLE1BQUE7QUFBRyxFQUFBLENBQUE7IiwKICAibmFtZXMiOiBbImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdyYXkiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicGF0aCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJjaGFsayIsICJzdHlsZXMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiY2hhbGsiLCAic2VsZiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJyZXF1aXJlRm9vbFdlYnBhY2siLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiUHJvbWlzZSIsICJyZXNvbHZlIiwgImVycm9yIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIlByb21pc2UiLCAicmVxdWlyZUZvb2xXZWJwYWNrIiwgIlRFUk1JTkFURV9NRVRIT0RfSUQiLCAiV29ya2VyVGhyZWFkcyIsICJlcnJvciIsICJXb3JrZXIiLCAid29ya2VyIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIlByb21pc2UiLCAicG9vbCIsICJ3b3JrZXIiLCAicmVzb2x2ZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJUcmFuc2ZlciIsICJlcnJvciIsICJyZXN1bHQiLCAiZXhwb3J0cyIsICJwb29sIiwgIndvcmtlciIsICJleHBvcnRzIiwgInJlc29sdmUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZnMiLCAicGF0aCIsICJlcnIiLCAiZXJyMiIsICJlciIsICJlcjIiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZnMiLCAicGF0aCIsICJzZWxmIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImZzIiwgInV0aWwiLCAicXVldWUiLCAicGF0aCIsICJvcHRpb25zIiwgImNiIiwgImRhdGEiLCAic3JjIiwgImRlc3QiLCAiZmxhZ3MiLCAicmVhZGRpciIsICJnbyRyZWFkZGlyIiwgIm1vZGUiLCAiZXhwb3J0cyIsICJmcyIsICJyZXNvbHZlIiwgImJ1ZmZlciIsICJidWZmZXJzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImZzIiwgInBhdGgiLCAiZXJyb3IiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZnMiLCAicGF0aCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJmcyIsICJwYXRoIiwgInV0aWwiLCAic3RhdCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJmcyIsICJwYXRoIiwgInN0YXQiLCAicmVxdWlyZV9jb3B5X3N5bmMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZnMiLCAicGF0aCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJmcyIsICJwYXRoIiwgInN0YXQiLCAiZXJyIiwgImVycm9yIiwgInJlcXVpcmVfY29weSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJmcyIsICJwYXRoIiwgImVyIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImZzIiwgInBhdGgiLCAiZW1wdHlEaXIiLCAiZXJyIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInBhdGgiLCAiZnMiLCAiZXJyIiwgInN0YXRzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInBhdGgiLCAiZnMiLCAic3JjcGF0aCIsICJkc3RwYXRoIiwgImVyciIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJwYXRoIiwgImZzIiwgImVyciIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJmcyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJwYXRoIiwgImZzIiwgImVyciIsICJyZWxhdGl2ZSIsICJ0eXBlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImZzIiwgInJlYWRGaWxlU3luYyIsICJyZXF1aXJlX2pzb25maWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImZzIiwgInBhdGgiLCAiZXJyIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImZzIiwgInBhdGgiLCAic3RhdCIsICJyZXF1aXJlX21vdmVfc3luYyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJmcyIsICJwYXRoIiwgInN0YXQiLCAiZXJyIiwgInJlcXVpcmVfbW92ZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJmcyIsICJjaGFsayIsICJ3b3JrZXIiLCAicG9vbCIsICJwb29sIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImZzIiwgInV0aWwiLCAicGF0aCIsICJ5MThuIiwgInJlcXVpcmVfYnVpbGQiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAidXRpbCIsICJmcyIsICJwYXRoIiwgIkRlZmF1bHRWYWx1ZXNGb3JUeXBlS2V5IiwgImtleSIsICJlcnJvciIsICJhcmdzIiwgInZhbHVlIiwgInZhbCIsICJhcmd2IiwgImVudiIsICJhbGlhc2VzIiwgImRlZmF1bHRzIiwgInNlbGYiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiY29kZSIsICJyZXF1aXJlX2J1aWxkIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInJlc29sdmUiLCAibW9kdWxlIiwgInN0YWNrIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImZzIiwgImpvaW4iLCAicmVzb2x2ZSIsICJwYXRoIiwgInJlcXVpcmVfYnVpbGQiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiY21kIiwgImlzUHJvbWlzZSIsICJzaGltIiwgInlhcmdzIiwgInVzYWdlIiwgInZhbGlkYXRpb24iLCAic2VsZiIsICJjb21tYW5kIiwgImVycm9yIiwgImMiLCAieTE4biIsICJsb2dnZXIiLCAibWF4V2lkdGgiLCAiYXJndiIsICJjb21wbGV0aW9ucyIsICJrZXkiLCAiZ2xvYmFsIiwgImsiLCAidHlwZSIsICJ2YWx1ZSIsICJwYXJzZUZuIiwgInBhcnNlIiwgImNvbXBsZXRpb24iLCAicmVhZEZpbGVTeW5jIiwgInJlc29sdmUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicG9vbCIsICJzdWNjZXNzIiwgImZzIiwgInBhdGgiLCAiY2hhbGsiXQp9Cg==
|