@decaf-ts/utils 0.3.4 → 0.3.6

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.
@@ -10098,6 +10098,12 @@ var Modes;
10098
10098
  Modes["CJS"] = "commonjs";
10099
10099
  Modes["ESM"] = "es2022";
10100
10100
  })(Modes || (Modes = {}));
10101
+ var BuildMode;
10102
+ (function (BuildMode) {
10103
+ BuildMode["BUILD"] = "build";
10104
+ BuildMode["BUNDLE"] = "bundle";
10105
+ BuildMode["ALL"] = "all";
10106
+ })(BuildMode || (BuildMode = {}));
10101
10107
  const Commands = ["update-scripts", "tag-release", "build-scripts"];
10102
10108
  const options = {
10103
10109
  prod: {
@@ -10108,6 +10114,10 @@ const options = {
10108
10114
  type: "boolean",
10109
10115
  default: false,
10110
10116
  },
10117
+ buildMode: {
10118
+ type: "string",
10119
+ default: BuildMode.ALL,
10120
+ },
10111
10121
  docs: {
10112
10122
  type: "boolean",
10113
10123
  default: false,
@@ -10415,7 +10425,7 @@ class BuildScripts extends Command {
10415
10425
  throw new Error(`Failed to bundle: ${e}`);
10416
10426
  }
10417
10427
  }
10418
- async buildByEnv(isDev) {
10428
+ async buildByEnv(isDev, mode = BuildMode.ALL) {
10419
10429
  try {
10420
10430
  deletePath("lib");
10421
10431
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
@@ -10432,20 +10442,24 @@ class BuildScripts extends Command {
10432
10442
  }
10433
10443
  fs.mkdirSync("lib");
10434
10444
  fs.mkdirSync("dist");
10435
- await this.build(isDev, Modes.ESM);
10436
- await this.build(isDev, Modes.CJS);
10437
- await this.bundle(Modes.ESM, true, false);
10438
- await this.bundle(Modes.CJS, true, false);
10439
- this.patchFiles("lib");
10440
- this.patchFiles("dist");
10445
+ if ([BuildMode.ALL, BuildMode.BUILD].includes(mode)) {
10446
+ await this.build(isDev, Modes.ESM);
10447
+ await this.build(isDev, Modes.CJS);
10448
+ this.patchFiles("lib");
10449
+ }
10450
+ if ([BuildMode.ALL, BuildMode.BUNDLE].includes(mode)) {
10451
+ await this.bundle(Modes.ESM, true, false);
10452
+ await this.bundle(Modes.CJS, true, false);
10453
+ this.patchFiles("dist");
10454
+ }
10441
10455
  this.copyAssets(Modes.CJS);
10442
10456
  this.copyAssets(Modes.ESM);
10443
10457
  }
10444
- async buildDev() {
10445
- return this.buildByEnv(true);
10458
+ async buildDev(mode = BuildMode.ALL) {
10459
+ return this.buildByEnv(true, mode);
10446
10460
  }
10447
- async buildProd() {
10448
- return this.buildByEnv(false);
10461
+ async buildProd(mode = BuildMode.ALL) {
10462
+ return this.buildByEnv(false, mode);
10449
10463
  }
10450
10464
  async buildDocs() {
10451
10465
  await runCommand(`npm install better-docs taffydb`).promise;
@@ -10479,15 +10493,15 @@ class BuildScripts extends Command {
10479
10493
  });
10480
10494
  }
10481
10495
  async run(answers) {
10482
- const { dev, prod, docs, commands } = answers;
10496
+ const { dev, prod, docs, commands, buildMode } = answers;
10483
10497
  if (commands) {
10484
10498
  await this.buildCommands();
10485
10499
  }
10486
10500
  if (dev) {
10487
- return await this.buildDev();
10501
+ return await this.buildDev(buildMode);
10488
10502
  }
10489
10503
  if (prod) {
10490
- return await this.buildProd();
10504
+ return await this.buildProd(buildMode);
10491
10505
  }
10492
10506
  if (docs) {
10493
10507
  return await this.buildDocs();
@@ -10502,4 +10516,4 @@ new BuildScripts()
10502
10516
  BuildScripts.log.error(`Error building scripts: ${e}`);
10503
10517
  process.exit(1);
10504
10518
  });
10505
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGQtc2NyaXB0cy5janMiLCJzb3VyY2VzIjpbIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2Rpc3QvdXRpbC9hY3Rpb24uanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9kaXN0L3V0aWwvc3RyaXAuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9kaXN0L3V0aWwvY2xlYXIuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9kaXN0L3V0aWwvZmlndXJlcy5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2Rpc3QvdXRpbC9zdHlsZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2Rpc3QvdXRpbC9saW5lcy5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2Rpc3QvdXRpbC93cmFwLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvZGlzdC91dGlsL2VudHJpZXNUb0Rpc3BsYXkuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9kaXN0L3V0aWwvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9kaXN0L2VsZW1lbnRzL3Byb21wdC5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2Rpc3QvZWxlbWVudHMvdGV4dC5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2Rpc3QvZWxlbWVudHMvc2VsZWN0LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvZGlzdC9lbGVtZW50cy90b2dnbGUuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9kaXN0L2RhdGVwYXJ0cy9kYXRlcGFydC5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2Rpc3QvZGF0ZXBhcnRzL21lcmlkaWVtLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvZGlzdC9kYXRlcGFydHMvZGF5LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvZGlzdC9kYXRlcGFydHMvaG91cnMuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9kaXN0L2RhdGVwYXJ0cy9taWxsaXNlY29uZHMuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9kaXN0L2RhdGVwYXJ0cy9taW51dGVzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvZGlzdC9kYXRlcGFydHMvbW9udGguanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9kaXN0L2RhdGVwYXJ0cy9zZWNvbmRzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvZGlzdC9kYXRlcGFydHMveWVhci5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2Rpc3QvZGF0ZXBhcnRzL2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvZGlzdC9lbGVtZW50cy9kYXRlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvZGlzdC9lbGVtZW50cy9udW1iZXIuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9kaXN0L2VsZW1lbnRzL211bHRpc2VsZWN0LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvZGlzdC9lbGVtZW50cy9hdXRvY29tcGxldGUuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9kaXN0L2VsZW1lbnRzL2F1dG9jb21wbGV0ZU11bHRpc2VsZWN0LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvZGlzdC9lbGVtZW50cy9jb25maXJtLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvZGlzdC9lbGVtZW50cy9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2Rpc3QvcHJvbXB0cy5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2Rpc3QvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9saWIvdXRpbC9hY3Rpb24uanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9saWIvdXRpbC9zdHJpcC5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2xpYi91dGlsL2NsZWFyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvbGliL3V0aWwvZmlndXJlcy5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2xpYi91dGlsL3N0eWxlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvbGliL3V0aWwvbGluZXMuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9saWIvdXRpbC93cmFwLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvbGliL3V0aWwvZW50cmllc1RvRGlzcGxheS5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2xpYi91dGlsL2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvbGliL2VsZW1lbnRzL3Byb21wdC5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2xpYi9lbGVtZW50cy90ZXh0LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvbGliL2VsZW1lbnRzL3NlbGVjdC5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2xpYi9lbGVtZW50cy90b2dnbGUuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9saWIvZGF0ZXBhcnRzL2RhdGVwYXJ0LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvbGliL2RhdGVwYXJ0cy9tZXJpZGllbS5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2xpYi9kYXRlcGFydHMvZGF5LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvbGliL2RhdGVwYXJ0cy9ob3Vycy5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2xpYi9kYXRlcGFydHMvbWlsbGlzZWNvbmRzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvbGliL2RhdGVwYXJ0cy9taW51dGVzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvbGliL2RhdGVwYXJ0cy9tb250aC5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2xpYi9kYXRlcGFydHMvc2Vjb25kcy5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2xpYi9kYXRlcGFydHMveWVhci5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2xpYi9kYXRlcGFydHMvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9saWIvZWxlbWVudHMvZGF0ZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2xpYi9lbGVtZW50cy9udW1iZXIuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9saWIvZWxlbWVudHMvbXVsdGlzZWxlY3QuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9saWIvZWxlbWVudHMvYXV0b2NvbXBsZXRlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvbGliL2VsZW1lbnRzL2F1dG9jb21wbGV0ZU11bHRpc2VsZWN0LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvbGliL2VsZW1lbnRzL2NvbmZpcm0uanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9saWIvZWxlbWVudHMvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9saWIvcHJvbXB0cy5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2xpYi9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL0BkZWNhZi10cy9sb2dnaW5nL2xpYi9lc20vY29uc3RhbnRzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3N0eWxlZC1zdHJpbmctYnVpbGRlci9saWIvZXNtL2NvbnN0YW50cy5qcyIsIi4uL25vZGVfbW9kdWxlcy9zdHlsZWQtc3RyaW5nLWJ1aWxkZXIvbGliL2VzbS9jb2xvcnMuanMiLCIuLi9ub2RlX21vZHVsZXMvc3R5bGVkLXN0cmluZy1idWlsZGVyL2xpYi9lc20vc3RyaW5ncy5qcyIsIi4uL25vZGVfbW9kdWxlcy9AZGVjYWYtdHMvbG9nZ2luZy9saWIvZXNtL2xvZ2dpbmcuanMiLCIuLi9zcmMvaW5wdXQvaW5wdXQudHMiLCIuLi9zcmMvY2xpL2NvbnN0YW50cy50cyIsIi4uL3NyYy91dGlscy90ZXh0LnRzIiwiLi4vc3JjL3V0aWxzL2NvbnN0YW50cy50cyIsIi4uL3NyYy93cml0ZXJzL1N0YW5kYXJkT3V0cHV0V3JpdGVyLnRzIiwiLi4vc3JjL3V0aWxzL3V0aWxzLnRzIiwiLi4vc3JjL3V0aWxzL2ZzLnRzIiwiLi4vc3JjL291dHB1dC9jb21tb24udHMiLCIuLi9zcmMvdXRpbHMvd2ViLnRzIiwiLi4vbm9kZV9tb2R1bGVzL3R5cGVkLW9iamVjdC1hY2N1bXVsYXRvci9saWIvZXNtL2FjY3VtdWxhdG9yLmpzIiwiLi4vc3JjL3V0aWxzL2Vudmlyb25tZW50LnRzIiwiLi4vc3JjL2NsaS9jb21tYW5kLnRzIiwiLi4vc3JjL3V0aWxzL2h0dHAudHMiLCIuLi9zcmMvY2xpL2NvbW1hbmRzL2J1aWxkLXNjcmlwdHMudHMiLCIuLi9zcmMvYmluL2J1aWxkLXNjcmlwdHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IChrZXksIGlzU2VsZWN0KSA9PiB7XG4gIGlmIChrZXkubWV0YSAmJiBrZXkubmFtZSAhPT0gJ2VzY2FwZScpIHJldHVybjtcblxuICBpZiAoa2V5LmN0cmwpIHtcbiAgICBpZiAoa2V5Lm5hbWUgPT09ICdhJykgcmV0dXJuICdmaXJzdCc7XG4gICAgaWYgKGtleS5uYW1lID09PSAnYycpIHJldHVybiAnYWJvcnQnO1xuICAgIGlmIChrZXkubmFtZSA9PT0gJ2QnKSByZXR1cm4gJ2Fib3J0JztcbiAgICBpZiAoa2V5Lm5hbWUgPT09ICdlJykgcmV0dXJuICdsYXN0JztcbiAgICBpZiAoa2V5Lm5hbWUgPT09ICdnJykgcmV0dXJuICdyZXNldCc7XG4gIH1cblxuICBpZiAoaXNTZWxlY3QpIHtcbiAgICBpZiAoa2V5Lm5hbWUgPT09ICdqJykgcmV0dXJuICdkb3duJztcbiAgICBpZiAoa2V5Lm5hbWUgPT09ICdrJykgcmV0dXJuICd1cCc7XG4gIH1cblxuICBpZiAoa2V5Lm5hbWUgPT09ICdyZXR1cm4nKSByZXR1cm4gJ3N1Ym1pdCc7XG4gIGlmIChrZXkubmFtZSA9PT0gJ2VudGVyJykgcmV0dXJuICdzdWJtaXQnOyAvLyBjdHJsICsgSlxuXG4gIGlmIChrZXkubmFtZSA9PT0gJ2JhY2tzcGFjZScpIHJldHVybiAnZGVsZXRlJztcbiAgaWYgKGtleS5uYW1lID09PSAnZGVsZXRlJykgcmV0dXJuICdkZWxldGVGb3J3YXJkJztcbiAgaWYgKGtleS5uYW1lID09PSAnYWJvcnQnKSByZXR1cm4gJ2Fib3J0JztcbiAgaWYgKGtleS5uYW1lID09PSAnZXNjYXBlJykgcmV0dXJuICdleGl0JztcbiAgaWYgKGtleS5uYW1lID09PSAndGFiJykgcmV0dXJuICduZXh0JztcbiAgaWYgKGtleS5uYW1lID09PSAncGFnZWRvd24nKSByZXR1cm4gJ25leHRQYWdlJztcbiAgaWYgKGtleS5uYW1lID09PSAncGFnZXVwJykgcmV0dXJuICdwcmV2UGFnZSc7IC8vIFRPRE8gY3JlYXRlIGhvbWUoKSBpbiBwcm9tcHQgdHlwZXMgKGUuZy4gVGV4dFByb21wdClcblxuICBpZiAoa2V5Lm5hbWUgPT09ICdob21lJykgcmV0dXJuICdob21lJzsgLy8gVE9ETyBjcmVhdGUgZW5kKCkgaW4gcHJvbXB0IHR5cGVzIChlLmcuIFRleHRQcm9tcHQpXG5cbiAgaWYgKGtleS5uYW1lID09PSAnZW5kJykgcmV0dXJuICdlbmQnO1xuICBpZiAoa2V5Lm5hbWUgPT09ICd1cCcpIHJldHVybiAndXAnO1xuICBpZiAoa2V5Lm5hbWUgPT09ICdkb3duJykgcmV0dXJuICdkb3duJztcbiAgaWYgKGtleS5uYW1lID09PSAncmlnaHQnKSByZXR1cm4gJ3JpZ2h0JztcbiAgaWYgKGtleS5uYW1lID09PSAnbGVmdCcpIHJldHVybiAnbGVmdCc7XG4gIHJldHVybiBmYWxzZTtcbn07IiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHN0ciA9PiB7XG4gIGNvbnN0IHBhdHRlcm4gPSBbJ1tcXFxcdTAwMUJcXFxcdTAwOUJdW1tcXFxcXSgpIzs/XSooPzooPzooPzooPzo7Wy1hLXpBLVpcXFxcZFxcXFwvIyYuOj0/JUB+X10rKSp8W2EtekEtWlxcXFxkXSsoPzo7Wy1hLXpBLVpcXFxcZFxcXFwvIyYuOj0/JUB+X10qKSopP1xcXFx1MDAwNyknLCAnKD86KD86XFxcXGR7MSw0fSg/OjtcXFxcZHswLDR9KSopP1tcXFxcZEEtUFJaY2YtbnRxcnk9Pjx+XSkpJ10uam9pbignfCcpO1xuICBjb25zdCBSR1ggPSBuZXcgUmVnRXhwKHBhdHRlcm4sICdnJyk7XG4gIHJldHVybiB0eXBlb2Ygc3RyID09PSAnc3RyaW5nJyA/IHN0ci5yZXBsYWNlKFJHWCwgJycpIDogc3RyO1xufTsiLCIndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyKG8sIGFsbG93QXJyYXlMaWtlKSB7IHZhciBpdCA9IHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdIHx8IG9bXCJAQGl0ZXJhdG9yXCJdOyBpZiAoIWl0KSB7IGlmIChBcnJheS5pc0FycmF5KG8pIHx8IChpdCA9IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvKSkgfHwgYWxsb3dBcnJheUxpa2UgJiYgbyAmJiB0eXBlb2Ygby5sZW5ndGggPT09IFwibnVtYmVyXCIpIHsgaWYgKGl0KSBvID0gaXQ7IHZhciBpID0gMDsgdmFyIEYgPSBmdW5jdGlvbiBGKCkge307IHJldHVybiB7IHM6IEYsIG46IGZ1bmN0aW9uIG4oKSB7IGlmIChpID49IG8ubGVuZ3RoKSByZXR1cm4geyBkb25lOiB0cnVlIH07IHJldHVybiB7IGRvbmU6IGZhbHNlLCB2YWx1ZTogb1tpKytdIH07IH0sIGU6IGZ1bmN0aW9uIGUoX2UpIHsgdGhyb3cgX2U7IH0sIGY6IEYgfTsgfSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH0gdmFyIG5vcm1hbENvbXBsZXRpb24gPSB0cnVlLCBkaWRFcnIgPSBmYWxzZSwgZXJyOyByZXR1cm4geyBzOiBmdW5jdGlvbiBzKCkgeyBpdCA9IGl0LmNhbGwobyk7IH0sIG46IGZ1bmN0aW9uIG4oKSB7IHZhciBzdGVwID0gaXQubmV4dCgpOyBub3JtYWxDb21wbGV0aW9uID0gc3RlcC5kb25lOyByZXR1cm4gc3RlcDsgfSwgZTogZnVuY3Rpb24gZShfZTIpIHsgZGlkRXJyID0gdHJ1ZTsgZXJyID0gX2UyOyB9LCBmOiBmdW5jdGlvbiBmKCkgeyB0cnkgeyBpZiAoIW5vcm1hbENvbXBsZXRpb24gJiYgaXQucmV0dXJuICE9IG51bGwpIGl0LnJldHVybigpOyB9IGZpbmFsbHkgeyBpZiAoZGlkRXJyKSB0aHJvdyBlcnI7IH0gfSB9OyB9XG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHsgaWYgKCFvKSByZXR1cm47IGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTsgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTsgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7IGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikgeyBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSBhcnIyW2ldID0gYXJyW2ldOyByZXR1cm4gYXJyMjsgfVxuXG5jb25zdCBzdHJpcCA9IHJlcXVpcmUoJy4vc3RyaXAnKTtcblxuY29uc3QgX3JlcXVpcmUgPSByZXF1aXJlKCdzaXN0ZXJhbnNpJyksXG4gICAgICBlcmFzZSA9IF9yZXF1aXJlLmVyYXNlLFxuICAgICAgY3Vyc29yID0gX3JlcXVpcmUuY3Vyc29yO1xuXG5jb25zdCB3aWR0aCA9IHN0ciA9PiBbLi4uc3RyaXAoc3RyKV0ubGVuZ3RoO1xuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gcHJvbXB0XG4gKiBAcGFyYW0ge251bWJlcn0gcGVyTGluZVxuICovXG5cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAocHJvbXB0LCBwZXJMaW5lKSB7XG4gIGlmICghcGVyTGluZSkgcmV0dXJuIGVyYXNlLmxpbmUgKyBjdXJzb3IudG8oMCk7XG4gIGxldCByb3dzID0gMDtcbiAgY29uc3QgbGluZXMgPSBwcm9tcHQuc3BsaXQoL1xccj9cXG4vKTtcblxuICB2YXIgX2l0ZXJhdG9yID0gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIobGluZXMpLFxuICAgICAgX3N0ZXA7XG5cbiAgdHJ5IHtcbiAgICBmb3IgKF9pdGVyYXRvci5zKCk7ICEoX3N0ZXAgPSBfaXRlcmF0b3IubigpKS5kb25lOykge1xuICAgICAgbGV0IGxpbmUgPSBfc3RlcC52YWx1ZTtcbiAgICAgIHJvd3MgKz0gMSArIE1hdGguZmxvb3IoTWF0aC5tYXgod2lkdGgobGluZSkgLSAxLCAwKSAvIHBlckxpbmUpO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgX2l0ZXJhdG9yLmUoZXJyKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBfaXRlcmF0b3IuZigpO1xuICB9XG5cbiAgcmV0dXJuIGVyYXNlLmxpbmVzKHJvd3MpO1xufTsiLCIndXNlIHN0cmljdCc7XG5cbmNvbnN0IG1haW4gPSB7XG4gIGFycm93VXA6ICfihpEnLFxuICBhcnJvd0Rvd246ICfihpMnLFxuICBhcnJvd0xlZnQ6ICfihpAnLFxuICBhcnJvd1JpZ2h0OiAn4oaSJyxcbiAgcmFkaW9PbjogJ+KXiScsXG4gIHJhZGlvT2ZmOiAn4pevJyxcbiAgdGljazogJ+KclCcsXG4gIGNyb3NzOiAn4pyWJyxcbiAgZWxsaXBzaXM6ICfigKYnLFxuICBwb2ludGVyU21hbGw6ICfigLonLFxuICBsaW5lOiAn4pSAJyxcbiAgcG9pbnRlcjogJ+Kdrydcbn07XG5jb25zdCB3aW4gPSB7XG4gIGFycm93VXA6IG1haW4uYXJyb3dVcCxcbiAgYXJyb3dEb3duOiBtYWluLmFycm93RG93bixcbiAgYXJyb3dMZWZ0OiBtYWluLmFycm93TGVmdCxcbiAgYXJyb3dSaWdodDogbWFpbi5hcnJvd1JpZ2h0LFxuICByYWRpb09uOiAnKCopJyxcbiAgcmFkaW9PZmY6ICcoICknLFxuICB0aWNrOiAn4oiaJyxcbiAgY3Jvc3M6ICfDlycsXG4gIGVsbGlwc2lzOiAnLi4uJyxcbiAgcG9pbnRlclNtYWxsOiAnwrsnLFxuICBsaW5lOiAn4pSAJyxcbiAgcG9pbnRlcjogJz4nXG59O1xuY29uc3QgZmlndXJlcyA9IHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicgPyB3aW4gOiBtYWluO1xubW9kdWxlLmV4cG9ydHMgPSBmaWd1cmVzOyIsIid1c2Ugc3RyaWN0JztcblxuY29uc3QgYyA9IHJlcXVpcmUoJ2tsZXVyJyk7XG5cbmNvbnN0IGZpZ3VyZXMgPSByZXF1aXJlKCcuL2ZpZ3VyZXMnKTsgLy8gcmVuZGVyaW5nIHVzZXIgaW5wdXQuXG5cblxuY29uc3Qgc3R5bGVzID0gT2JqZWN0LmZyZWV6ZSh7XG4gIHBhc3N3b3JkOiB7XG4gICAgc2NhbGU6IDEsXG4gICAgcmVuZGVyOiBpbnB1dCA9PiAnKicucmVwZWF0KGlucHV0Lmxlbmd0aClcbiAgfSxcbiAgZW1vamk6IHtcbiAgICBzY2FsZTogMixcbiAgICByZW5kZXI6IGlucHV0ID0+ICfwn5iDJy5yZXBlYXQoaW5wdXQubGVuZ3RoKVxuICB9LFxuICBpbnZpc2libGU6IHtcbiAgICBzY2FsZTogMCxcbiAgICByZW5kZXI6IGlucHV0ID0+ICcnXG4gIH0sXG4gIGRlZmF1bHQ6IHtcbiAgICBzY2FsZTogMSxcbiAgICByZW5kZXI6IGlucHV0ID0+IGAke2lucHV0fWBcbiAgfVxufSk7XG5cbmNvbnN0IHJlbmRlciA9IHR5cGUgPT4gc3R5bGVzW3R5cGVdIHx8IHN0eWxlcy5kZWZhdWx0OyAvLyBpY29uIHRvIHNpZ25hbGl6ZSBhIHByb21wdC5cblxuXG5jb25zdCBzeW1ib2xzID0gT2JqZWN0LmZyZWV6ZSh7XG4gIGFib3J0ZWQ6IGMucmVkKGZpZ3VyZXMuY3Jvc3MpLFxuICBkb25lOiBjLmdyZWVuKGZpZ3VyZXMudGljayksXG4gIGV4aXRlZDogYy55ZWxsb3coZmlndXJlcy5jcm9zcyksXG4gIGRlZmF1bHQ6IGMuY3lhbignPycpXG59KTtcblxuY29uc3Qgc3ltYm9sID0gKGRvbmUsIGFib3J0ZWQsIGV4aXRlZCkgPT4gYWJvcnRlZCA/IHN5bWJvbHMuYWJvcnRlZCA6IGV4aXRlZCA/IHN5bWJvbHMuZXhpdGVkIDogZG9uZSA/IHN5bWJvbHMuZG9uZSA6IHN5bWJvbHMuZGVmYXVsdDsgLy8gYmV0d2VlbiB0aGUgcXVlc3Rpb24gYW5kIHRoZSB1c2VyJ3MgaW5wdXQuXG5cblxuY29uc3QgZGVsaW1pdGVyID0gY29tcGxldGluZyA9PiBjLmdyYXkoY29tcGxldGluZyA/IGZpZ3VyZXMuZWxsaXBzaXMgOiBmaWd1cmVzLnBvaW50ZXJTbWFsbCk7XG5cbmNvbnN0IGl0ZW0gPSAoZXhwYW5kYWJsZSwgZXhwYW5kZWQpID0+IGMuZ3JheShleHBhbmRhYmxlID8gZXhwYW5kZWQgPyBmaWd1cmVzLnBvaW50ZXJTbWFsbCA6ICcrJyA6IGZpZ3VyZXMubGluZSk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzdHlsZXMsXG4gIHJlbmRlcixcbiAgc3ltYm9scyxcbiAgc3ltYm9sLFxuICBkZWxpbWl0ZXIsXG4gIGl0ZW1cbn07IiwiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBzdHJpcCA9IHJlcXVpcmUoJy4vc3RyaXAnKTtcbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IG1zZ1xuICogQHBhcmFtIHtudW1iZXJ9IHBlckxpbmVcbiAqL1xuXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG1zZywgcGVyTGluZSkge1xuICBsZXQgbGluZXMgPSBTdHJpbmcoc3RyaXAobXNnKSB8fCAnJykuc3BsaXQoL1xccj9cXG4vKTtcbiAgaWYgKCFwZXJMaW5lKSByZXR1cm4gbGluZXMubGVuZ3RoO1xuICByZXR1cm4gbGluZXMubWFwKGwgPT4gTWF0aC5jZWlsKGwubGVuZ3RoIC8gcGVyTGluZSkpLnJlZHVjZSgoYSwgYikgPT4gYSArIGIpO1xufTsiLCIndXNlIHN0cmljdCc7XG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBtc2cgVGhlIG1lc3NhZ2UgdG8gd3JhcFxuICogQHBhcmFtIHtvYmplY3R9IG9wdHNcbiAqIEBwYXJhbSB7bnVtYmVyfHN0cmluZ30gW29wdHMubWFyZ2luXSBMZWZ0IG1hcmdpblxuICogQHBhcmFtIHtudW1iZXJ9IG9wdHMud2lkdGggTWF4aW11bSBjaGFyYWN0ZXJzIHBlciBsaW5lIGluY2x1ZGluZyB0aGUgbWFyZ2luXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSAobXNnLCBvcHRzID0ge30pID0+IHtcbiAgY29uc3QgdGFiID0gTnVtYmVyLmlzU2FmZUludGVnZXIocGFyc2VJbnQob3B0cy5tYXJnaW4pKSA/IG5ldyBBcnJheShwYXJzZUludChvcHRzLm1hcmdpbikpLmZpbGwoJyAnKS5qb2luKCcnKSA6IG9wdHMubWFyZ2luIHx8ICcnO1xuICBjb25zdCB3aWR0aCA9IG9wdHMud2lkdGg7XG4gIHJldHVybiAobXNnIHx8ICcnKS5zcGxpdCgvXFxyP1xcbi9nKS5tYXAobGluZSA9PiBsaW5lLnNwbGl0KC9cXHMrL2cpLnJlZHVjZSgoYXJyLCB3KSA9PiB7XG4gICAgaWYgKHcubGVuZ3RoICsgdGFiLmxlbmd0aCA+PSB3aWR0aCB8fCBhcnJbYXJyLmxlbmd0aCAtIDFdLmxlbmd0aCArIHcubGVuZ3RoICsgMSA8IHdpZHRoKSBhcnJbYXJyLmxlbmd0aCAtIDFdICs9IGAgJHt3fWA7ZWxzZSBhcnIucHVzaChgJHt0YWJ9JHt3fWApO1xuICAgIHJldHVybiBhcnI7XG4gIH0sIFt0YWJdKS5qb2luKCdcXG4nKSkuam9pbignXFxuJyk7XG59OyIsIid1c2Ugc3RyaWN0Jztcbi8qKlxuICogRGV0ZXJtaW5lIHdoYXQgZW50cmllcyBzaG91bGQgYmUgZGlzcGxheWVkIG9uIHRoZSBzY3JlZW4sIGJhc2VkIG9uIHRoZVxuICogY3VycmVudGx5IHNlbGVjdGVkIGluZGV4IGFuZCB0aGUgbWF4aW11bSB2aXNpYmxlLiBVc2VkIGluIGxpc3QtYmFzZWRcbiAqIHByb21wdHMgbGlrZSBgc2VsZWN0YCBhbmQgYG11bHRpc2VsZWN0YC5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gY3Vyc29yIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgZW50cnlcbiAqIEBwYXJhbSB7bnVtYmVyfSB0b3RhbCB0aGUgdG90YWwgZW50cmllcyBhdmFpbGFibGUgdG8gZGlzcGxheVxuICogQHBhcmFtIHtudW1iZXJ9IFttYXhWaXNpYmxlXSB0aGUgbnVtYmVyIG9mIGVudHJpZXMgdGhhdCBjYW4gYmUgZGlzcGxheWVkXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSAoY3Vyc29yLCB0b3RhbCwgbWF4VmlzaWJsZSkgPT4ge1xuICBtYXhWaXNpYmxlID0gbWF4VmlzaWJsZSB8fCB0b3RhbDtcbiAgbGV0IHN0YXJ0SW5kZXggPSBNYXRoLm1pbih0b3RhbCAtIG1heFZpc2libGUsIGN1cnNvciAtIE1hdGguZmxvb3IobWF4VmlzaWJsZSAvIDIpKTtcbiAgaWYgKHN0YXJ0SW5kZXggPCAwKSBzdGFydEluZGV4ID0gMDtcbiAgbGV0IGVuZEluZGV4ID0gTWF0aC5taW4oc3RhcnRJbmRleCArIG1heFZpc2libGUsIHRvdGFsKTtcbiAgcmV0dXJuIHtcbiAgICBzdGFydEluZGV4LFxuICAgIGVuZEluZGV4XG4gIH07XG59OyIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGFjdGlvbjogcmVxdWlyZSgnLi9hY3Rpb24nKSxcbiAgY2xlYXI6IHJlcXVpcmUoJy4vY2xlYXInKSxcbiAgc3R5bGU6IHJlcXVpcmUoJy4vc3R5bGUnKSxcbiAgc3RyaXA6IHJlcXVpcmUoJy4vc3RyaXAnKSxcbiAgZmlndXJlczogcmVxdWlyZSgnLi9maWd1cmVzJyksXG4gIGxpbmVzOiByZXF1aXJlKCcuL2xpbmVzJyksXG4gIHdyYXA6IHJlcXVpcmUoJy4vd3JhcCcpLFxuICBlbnRyaWVzVG9EaXNwbGF5OiByZXF1aXJlKCcuL2VudHJpZXNUb0Rpc3BsYXknKVxufTsiLCIndXNlIHN0cmljdCc7XG5cbmNvbnN0IHJlYWRsaW5lID0gcmVxdWlyZSgncmVhZGxpbmUnKTtcblxuY29uc3QgX3JlcXVpcmUgPSByZXF1aXJlKCcuLi91dGlsJyksXG4gICAgICBhY3Rpb24gPSBfcmVxdWlyZS5hY3Rpb247XG5cbmNvbnN0IEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50cycpO1xuXG5jb25zdCBfcmVxdWlyZTIgPSByZXF1aXJlKCdzaXN0ZXJhbnNpJyksXG4gICAgICBiZWVwID0gX3JlcXVpcmUyLmJlZXAsXG4gICAgICBjdXJzb3IgPSBfcmVxdWlyZTIuY3Vyc29yO1xuXG5jb25zdCBjb2xvciA9IHJlcXVpcmUoJ2tsZXVyJyk7XG4vKipcbiAqIEJhc2UgcHJvbXB0IHNrZWxldG9uXG4gKiBAcGFyYW0ge1N0cmVhbX0gW29wdHMuc3RkaW5dIFRoZSBSZWFkYWJsZSBzdHJlYW0gdG8gbGlzdGVuIHRvXG4gKiBAcGFyYW0ge1N0cmVhbX0gW29wdHMuc3Rkb3V0XSBUaGUgV3JpdGFibGUgc3RyZWFtIHRvIHdyaXRlIHJlYWRsaW5lIGRhdGEgdG9cbiAqL1xuXG5cbmNsYXNzIFByb21wdCBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG4gIGNvbnN0cnVjdG9yKG9wdHMgPSB7fSkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5maXJzdFJlbmRlciA9IHRydWU7XG4gICAgdGhpcy5pbiA9IG9wdHMuc3RkaW4gfHwgcHJvY2Vzcy5zdGRpbjtcbiAgICB0aGlzLm91dCA9IG9wdHMuc3Rkb3V0IHx8IHByb2Nlc3Muc3Rkb3V0O1xuXG4gICAgdGhpcy5vblJlbmRlciA9IChvcHRzLm9uUmVuZGVyIHx8ICgoKSA9PiB2b2lkIDApKS5iaW5kKHRoaXMpO1xuXG4gICAgY29uc3QgcmwgPSByZWFkbGluZS5jcmVhdGVJbnRlcmZhY2Uoe1xuICAgICAgaW5wdXQ6IHRoaXMuaW4sXG4gICAgICBlc2NhcGVDb2RlVGltZW91dDogNTBcbiAgICB9KTtcbiAgICByZWFkbGluZS5lbWl0S2V5cHJlc3NFdmVudHModGhpcy5pbiwgcmwpO1xuICAgIGlmICh0aGlzLmluLmlzVFRZKSB0aGlzLmluLnNldFJhd01vZGUodHJ1ZSk7XG4gICAgY29uc3QgaXNTZWxlY3QgPSBbJ1NlbGVjdFByb21wdCcsICdNdWx0aXNlbGVjdFByb21wdCddLmluZGV4T2YodGhpcy5jb25zdHJ1Y3Rvci5uYW1lKSA+IC0xO1xuXG4gICAgY29uc3Qga2V5cHJlc3MgPSAoc3RyLCBrZXkpID0+IHtcbiAgICAgIGxldCBhID0gYWN0aW9uKGtleSwgaXNTZWxlY3QpO1xuXG4gICAgICBpZiAoYSA9PT0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5fICYmIHRoaXMuXyhzdHIsIGtleSk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzW2FdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRoaXNbYV0oa2V5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuYmVsbCgpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLmNsb3NlID0gKCkgPT4ge1xuICAgICAgdGhpcy5vdXQud3JpdGUoY3Vyc29yLnNob3cpO1xuICAgICAgdGhpcy5pbi5yZW1vdmVMaXN0ZW5lcigna2V5cHJlc3MnLCBrZXlwcmVzcyk7XG4gICAgICBpZiAodGhpcy5pbi5pc1RUWSkgdGhpcy5pbi5zZXRSYXdNb2RlKGZhbHNlKTtcbiAgICAgIHJsLmNsb3NlKCk7XG4gICAgICB0aGlzLmVtaXQodGhpcy5hYm9ydGVkID8gJ2Fib3J0JyA6IHRoaXMuZXhpdGVkID8gJ2V4aXQnIDogJ3N1Ym1pdCcsIHRoaXMudmFsdWUpO1xuICAgICAgdGhpcy5jbG9zZWQgPSB0cnVlO1xuICAgIH07XG5cbiAgICB0aGlzLmluLm9uKCdrZXlwcmVzcycsIGtleXByZXNzKTtcbiAgfVxuXG4gIGZpcmUoKSB7XG4gICAgdGhpcy5lbWl0KCdzdGF0ZScsIHtcbiAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgYWJvcnRlZDogISF0aGlzLmFib3J0ZWQsXG4gICAgICBleGl0ZWQ6ICEhdGhpcy5leGl0ZWRcbiAgICB9KTtcbiAgfVxuXG4gIGJlbGwoKSB7XG4gICAgdGhpcy5vdXQud3JpdGUoYmVlcCk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgdGhpcy5vblJlbmRlcihjb2xvcik7XG4gICAgaWYgKHRoaXMuZmlyc3RSZW5kZXIpIHRoaXMuZmlyc3RSZW5kZXIgPSBmYWxzZTtcbiAgfVxuXG59XG5cbm1vZHVsZS5leHBvcnRzID0gUHJvbXB0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5mdW5jdGlvbiBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIGtleSwgYXJnKSB7IHRyeSB7IHZhciBpbmZvID0gZ2VuW2tleV0oYXJnKTsgdmFyIHZhbHVlID0gaW5mby52YWx1ZTsgfSBjYXRjaCAoZXJyb3IpIHsgcmVqZWN0KGVycm9yKTsgcmV0dXJuOyB9IGlmIChpbmZvLmRvbmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0gZWxzZSB7IFByb21pc2UucmVzb2x2ZSh2YWx1ZSkudGhlbihfbmV4dCwgX3Rocm93KTsgfSB9XG5cbmZ1bmN0aW9uIF9hc3luY1RvR2VuZXJhdG9yKGZuKSB7IHJldHVybiBmdW5jdGlvbiAoKSB7IHZhciBzZWxmID0gdGhpcywgYXJncyA9IGFyZ3VtZW50czsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsgdmFyIGdlbiA9IGZuLmFwcGx5KHNlbGYsIGFyZ3MpOyBmdW5jdGlvbiBfbmV4dCh2YWx1ZSkgeyBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIFwibmV4dFwiLCB2YWx1ZSk7IH0gZnVuY3Rpb24gX3Rocm93KGVycikgeyBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIFwidGhyb3dcIiwgZXJyKTsgfSBfbmV4dCh1bmRlZmluZWQpOyB9KTsgfTsgfVxuXG5jb25zdCBjb2xvciA9IHJlcXVpcmUoJ2tsZXVyJyk7XG5cbmNvbnN0IFByb21wdCA9IHJlcXVpcmUoJy4vcHJvbXB0Jyk7XG5cbmNvbnN0IF9yZXF1aXJlID0gcmVxdWlyZSgnc2lzdGVyYW5zaScpLFxuICAgICAgZXJhc2UgPSBfcmVxdWlyZS5lcmFzZSxcbiAgICAgIGN1cnNvciA9IF9yZXF1aXJlLmN1cnNvcjtcblxuY29uc3QgX3JlcXVpcmUyID0gcmVxdWlyZSgnLi4vdXRpbCcpLFxuICAgICAgc3R5bGUgPSBfcmVxdWlyZTIuc3R5bGUsXG4gICAgICBjbGVhciA9IF9yZXF1aXJlMi5jbGVhcixcbiAgICAgIGxpbmVzID0gX3JlcXVpcmUyLmxpbmVzLFxuICAgICAgZmlndXJlcyA9IF9yZXF1aXJlMi5maWd1cmVzO1xuLyoqXG4gKiBUZXh0UHJvbXB0IEJhc2UgRWxlbWVudFxuICogQHBhcmFtIHtPYmplY3R9IG9wdHMgT3B0aW9uc1xuICogQHBhcmFtIHtTdHJpbmd9IG9wdHMubWVzc2FnZSBNZXNzYWdlXG4gKiBAcGFyYW0ge1N0cmluZ30gW29wdHMuc3R5bGU9J2RlZmF1bHQnXSBSZW5kZXIgc3R5bGVcbiAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5pbml0aWFsXSBEZWZhdWx0IHZhbHVlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0cy52YWxpZGF0ZV0gVmFsaWRhdGUgZnVuY3Rpb25cbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLmVycm9yXSBUaGUgaW52YWxpZCBlcnJvciBsYWJlbFxuICovXG5cblxuY2xhc3MgVGV4dFByb21wdCBleHRlbmRzIFByb21wdCB7XG4gIGNvbnN0cnVjdG9yKG9wdHMgPSB7fSkge1xuICAgIHN1cGVyKG9wdHMpO1xuICAgIHRoaXMudHJhbnNmb3JtID0gc3R5bGUucmVuZGVyKG9wdHMuc3R5bGUpO1xuICAgIHRoaXMuc2NhbGUgPSB0aGlzLnRyYW5zZm9ybS5zY2FsZTtcbiAgICB0aGlzLm1zZyA9IG9wdHMubWVzc2FnZTtcbiAgICB0aGlzLmluaXRpYWwgPSBvcHRzLmluaXRpYWwgfHwgYGA7XG5cbiAgICB0aGlzLnZhbGlkYXRvciA9IG9wdHMudmFsaWRhdGUgfHwgKCgpID0+IHRydWUpO1xuXG4gICAgdGhpcy52YWx1ZSA9IGBgO1xuICAgIHRoaXMuZXJyb3JNc2cgPSBvcHRzLmVycm9yIHx8IGBQbGVhc2UgRW50ZXIgQSBWYWxpZCBWYWx1ZWA7XG4gICAgdGhpcy5jdXJzb3IgPSBOdW1iZXIoISF0aGlzLmluaXRpYWwpO1xuICAgIHRoaXMuY3Vyc29yT2Zmc2V0ID0gMDtcbiAgICB0aGlzLmNsZWFyID0gY2xlYXIoYGAsIHRoaXMub3V0LmNvbHVtbnMpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBzZXQgdmFsdWUodikge1xuICAgIGlmICghdiAmJiB0aGlzLmluaXRpYWwpIHtcbiAgICAgIHRoaXMucGxhY2Vob2xkZXIgPSB0cnVlO1xuICAgICAgdGhpcy5yZW5kZXJlZCA9IGNvbG9yLmdyYXkodGhpcy50cmFuc2Zvcm0ucmVuZGVyKHRoaXMuaW5pdGlhbCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBsYWNlaG9sZGVyID0gZmFsc2U7XG4gICAgICB0aGlzLnJlbmRlcmVkID0gdGhpcy50cmFuc2Zvcm0ucmVuZGVyKHYpO1xuICAgIH1cblxuICAgIHRoaXMuX3ZhbHVlID0gdjtcbiAgICB0aGlzLmZpcmUoKTtcbiAgfVxuXG4gIGdldCB2YWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gIH1cblxuICByZXNldCgpIHtcbiAgICB0aGlzLnZhbHVlID0gYGA7XG4gICAgdGhpcy5jdXJzb3IgPSBOdW1iZXIoISF0aGlzLmluaXRpYWwpO1xuICAgIHRoaXMuY3Vyc29yT2Zmc2V0ID0gMDtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZXhpdCgpIHtcbiAgICB0aGlzLmFib3J0KCk7XG4gIH1cblxuICBhYm9ydCgpIHtcbiAgICB0aGlzLnZhbHVlID0gdGhpcy52YWx1ZSB8fCB0aGlzLmluaXRpYWw7XG4gICAgdGhpcy5kb25lID0gdGhpcy5hYm9ydGVkID0gdHJ1ZTtcbiAgICB0aGlzLmVycm9yID0gZmFsc2U7XG4gICAgdGhpcy5yZWQgPSBmYWxzZTtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICAgIHRoaXMub3V0LndyaXRlKCdcXG4nKTtcbiAgICB0aGlzLmNsb3NlKCk7XG4gIH1cblxuICB2YWxpZGF0ZSgpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgcmV0dXJuIF9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKiAoKSB7XG4gICAgICBsZXQgdmFsaWQgPSB5aWVsZCBfdGhpcy52YWxpZGF0b3IoX3RoaXMudmFsdWUpO1xuXG4gICAgICBpZiAodHlwZW9mIHZhbGlkID09PSBgc3RyaW5nYCkge1xuICAgICAgICBfdGhpcy5lcnJvck1zZyA9IHZhbGlkO1xuICAgICAgICB2YWxpZCA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBfdGhpcy5lcnJvciA9ICF2YWxpZDtcbiAgICB9KSgpO1xuICB9XG5cbiAgc3VibWl0KCkge1xuICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgcmV0dXJuIF9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKiAoKSB7XG4gICAgICBfdGhpczIudmFsdWUgPSBfdGhpczIudmFsdWUgfHwgX3RoaXMyLmluaXRpYWw7XG4gICAgICBfdGhpczIuY3Vyc29yT2Zmc2V0ID0gMDtcbiAgICAgIF90aGlzMi5jdXJzb3IgPSBfdGhpczIucmVuZGVyZWQubGVuZ3RoO1xuICAgICAgeWllbGQgX3RoaXMyLnZhbGlkYXRlKCk7XG5cbiAgICAgIGlmIChfdGhpczIuZXJyb3IpIHtcbiAgICAgICAgX3RoaXMyLnJlZCA9IHRydWU7XG5cbiAgICAgICAgX3RoaXMyLmZpcmUoKTtcblxuICAgICAgICBfdGhpczIucmVuZGVyKCk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBfdGhpczIuZG9uZSA9IHRydWU7XG4gICAgICBfdGhpczIuYWJvcnRlZCA9IGZhbHNlO1xuXG4gICAgICBfdGhpczIuZmlyZSgpO1xuXG4gICAgICBfdGhpczIucmVuZGVyKCk7XG5cbiAgICAgIF90aGlzMi5vdXQud3JpdGUoJ1xcbicpO1xuXG4gICAgICBfdGhpczIuY2xvc2UoKTtcbiAgICB9KSgpO1xuICB9XG5cbiAgbmV4dCgpIHtcbiAgICBpZiAoIXRoaXMucGxhY2Vob2xkZXIpIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgICB0aGlzLnZhbHVlID0gdGhpcy5pbml0aWFsO1xuICAgIHRoaXMuY3Vyc29yID0gdGhpcy5yZW5kZXJlZC5sZW5ndGg7XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIG1vdmVDdXJzb3Iobikge1xuICAgIGlmICh0aGlzLnBsYWNlaG9sZGVyKSByZXR1cm47XG4gICAgdGhpcy5jdXJzb3IgPSB0aGlzLmN1cnNvciArIG47XG4gICAgdGhpcy5jdXJzb3JPZmZzZXQgKz0gbjtcbiAgfVxuXG4gIF8oYywga2V5KSB7XG4gICAgbGV0IHMxID0gdGhpcy52YWx1ZS5zbGljZSgwLCB0aGlzLmN1cnNvcik7XG4gICAgbGV0IHMyID0gdGhpcy52YWx1ZS5zbGljZSh0aGlzLmN1cnNvcik7XG4gICAgdGhpcy52YWx1ZSA9IGAke3MxfSR7Y30ke3MyfWA7XG4gICAgdGhpcy5yZWQgPSBmYWxzZTtcbiAgICB0aGlzLmN1cnNvciA9IHRoaXMucGxhY2Vob2xkZXIgPyAwIDogczEubGVuZ3RoICsgMTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZGVsZXRlKCkge1xuICAgIGlmICh0aGlzLmlzQ3Vyc29yQXRTdGFydCgpKSByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgbGV0IHMxID0gdGhpcy52YWx1ZS5zbGljZSgwLCB0aGlzLmN1cnNvciAtIDEpO1xuICAgIGxldCBzMiA9IHRoaXMudmFsdWUuc2xpY2UodGhpcy5jdXJzb3IpO1xuICAgIHRoaXMudmFsdWUgPSBgJHtzMX0ke3MyfWA7XG4gICAgdGhpcy5yZWQgPSBmYWxzZTtcblxuICAgIGlmICh0aGlzLmlzQ3Vyc29yQXRTdGFydCgpKSB7XG4gICAgICB0aGlzLmN1cnNvck9mZnNldCA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY3Vyc29yT2Zmc2V0Kys7XG4gICAgICB0aGlzLm1vdmVDdXJzb3IoLTEpO1xuICAgIH1cblxuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBkZWxldGVGb3J3YXJkKCkge1xuICAgIGlmICh0aGlzLmN1cnNvciAqIHRoaXMuc2NhbGUgPj0gdGhpcy5yZW5kZXJlZC5sZW5ndGggfHwgdGhpcy5wbGFjZWhvbGRlcikgcmV0dXJuIHRoaXMuYmVsbCgpO1xuICAgIGxldCBzMSA9IHRoaXMudmFsdWUuc2xpY2UoMCwgdGhpcy5jdXJzb3IpO1xuICAgIGxldCBzMiA9IHRoaXMudmFsdWUuc2xpY2UodGhpcy5jdXJzb3IgKyAxKTtcbiAgICB0aGlzLnZhbHVlID0gYCR7czF9JHtzMn1gO1xuICAgIHRoaXMucmVkID0gZmFsc2U7XG5cbiAgICBpZiAodGhpcy5pc0N1cnNvckF0RW5kKCkpIHtcbiAgICAgIHRoaXMuY3Vyc29yT2Zmc2V0ID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jdXJzb3JPZmZzZXQrKztcbiAgICB9XG5cbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZmlyc3QoKSB7XG4gICAgdGhpcy5jdXJzb3IgPSAwO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBsYXN0KCkge1xuICAgIHRoaXMuY3Vyc29yID0gdGhpcy52YWx1ZS5sZW5ndGg7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIGxlZnQoKSB7XG4gICAgaWYgKHRoaXMuY3Vyc29yIDw9IDAgfHwgdGhpcy5wbGFjZWhvbGRlcikgcmV0dXJuIHRoaXMuYmVsbCgpO1xuICAgIHRoaXMubW92ZUN1cnNvcigtMSk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHJpZ2h0KCkge1xuICAgIGlmICh0aGlzLmN1cnNvciAqIHRoaXMuc2NhbGUgPj0gdGhpcy5yZW5kZXJlZC5sZW5ndGggfHwgdGhpcy5wbGFjZWhvbGRlcikgcmV0dXJuIHRoaXMuYmVsbCgpO1xuICAgIHRoaXMubW92ZUN1cnNvcigxKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgaXNDdXJzb3JBdFN0YXJ0KCkge1xuICAgIHJldHVybiB0aGlzLmN1cnNvciA9PT0gMCB8fCB0aGlzLnBsYWNlaG9sZGVyICYmIHRoaXMuY3Vyc29yID09PSAxO1xuICB9XG5cbiAgaXNDdXJzb3JBdEVuZCgpIHtcbiAgICByZXR1cm4gdGhpcy5jdXJzb3IgPT09IHRoaXMucmVuZGVyZWQubGVuZ3RoIHx8IHRoaXMucGxhY2Vob2xkZXIgJiYgdGhpcy5jdXJzb3IgPT09IHRoaXMucmVuZGVyZWQubGVuZ3RoICsgMTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBpZiAodGhpcy5jbG9zZWQpIHJldHVybjtcblxuICAgIGlmICghdGhpcy5maXJzdFJlbmRlcikge1xuICAgICAgaWYgKHRoaXMub3V0cHV0RXJyb3IpIHRoaXMub3V0LndyaXRlKGN1cnNvci5kb3duKGxpbmVzKHRoaXMub3V0cHV0RXJyb3IsIHRoaXMub3V0LmNvbHVtbnMpIC0gMSkgKyBjbGVhcih0aGlzLm91dHB1dEVycm9yLCB0aGlzLm91dC5jb2x1bW5zKSk7XG4gICAgICB0aGlzLm91dC53cml0ZShjbGVhcih0aGlzLm91dHB1dFRleHQsIHRoaXMub3V0LmNvbHVtbnMpKTtcbiAgICB9XG5cbiAgICBzdXBlci5yZW5kZXIoKTtcbiAgICB0aGlzLm91dHB1dEVycm9yID0gJyc7XG4gICAgdGhpcy5vdXRwdXRUZXh0ID0gW3N0eWxlLnN5bWJvbCh0aGlzLmRvbmUsIHRoaXMuYWJvcnRlZCksIGNvbG9yLmJvbGQodGhpcy5tc2cpLCBzdHlsZS5kZWxpbWl0ZXIodGhpcy5kb25lKSwgdGhpcy5yZWQgPyBjb2xvci5yZWQodGhpcy5yZW5kZXJlZCkgOiB0aGlzLnJlbmRlcmVkXS5qb2luKGAgYCk7XG5cbiAgICBpZiAodGhpcy5lcnJvcikge1xuICAgICAgdGhpcy5vdXRwdXRFcnJvciArPSB0aGlzLmVycm9yTXNnLnNwbGl0KGBcXG5gKS5yZWR1Y2UoKGEsIGwsIGkpID0+IGEgKyBgXFxuJHtpID8gJyAnIDogZmlndXJlcy5wb2ludGVyU21hbGx9ICR7Y29sb3IucmVkKCkuaXRhbGljKGwpfWAsIGBgKTtcbiAgICB9XG5cbiAgICB0aGlzLm91dC53cml0ZShlcmFzZS5saW5lICsgY3Vyc29yLnRvKDApICsgdGhpcy5vdXRwdXRUZXh0ICsgY3Vyc29yLnNhdmUgKyB0aGlzLm91dHB1dEVycm9yICsgY3Vyc29yLnJlc3RvcmUgKyBjdXJzb3IubW92ZSh0aGlzLmN1cnNvck9mZnNldCwgMCkpO1xuICB9XG5cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBUZXh0UHJvbXB0OyIsIid1c2Ugc3RyaWN0JztcblxuY29uc3QgY29sb3IgPSByZXF1aXJlKCdrbGV1cicpO1xuXG5jb25zdCBQcm9tcHQgPSByZXF1aXJlKCcuL3Byb21wdCcpO1xuXG5jb25zdCBfcmVxdWlyZSA9IHJlcXVpcmUoJy4uL3V0aWwnKSxcbiAgICAgIHN0eWxlID0gX3JlcXVpcmUuc3R5bGUsXG4gICAgICBjbGVhciA9IF9yZXF1aXJlLmNsZWFyLFxuICAgICAgZmlndXJlcyA9IF9yZXF1aXJlLmZpZ3VyZXMsXG4gICAgICB3cmFwID0gX3JlcXVpcmUud3JhcCxcbiAgICAgIGVudHJpZXNUb0Rpc3BsYXkgPSBfcmVxdWlyZS5lbnRyaWVzVG9EaXNwbGF5O1xuXG5jb25zdCBfcmVxdWlyZTIgPSByZXF1aXJlKCdzaXN0ZXJhbnNpJyksXG4gICAgICBjdXJzb3IgPSBfcmVxdWlyZTIuY3Vyc29yO1xuLyoqXG4gKiBTZWxlY3RQcm9tcHQgQmFzZSBFbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyBPcHRpb25zXG4gKiBAcGFyYW0ge1N0cmluZ30gb3B0cy5tZXNzYWdlIE1lc3NhZ2VcbiAqIEBwYXJhbSB7QXJyYXl9IG9wdHMuY2hvaWNlcyBBcnJheSBvZiBjaG9pY2Ugb2JqZWN0c1xuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLmhpbnRdIEhpbnQgdG8gZGlzcGxheVxuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLmluaXRpYWxdIEluZGV4IG9mIGRlZmF1bHQgdmFsdWVcbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLm9wdGlvbnNQZXJQYWdlPTEwXSBNYXggb3B0aW9ucyB0byBkaXNwbGF5IGF0IG9uY2VcbiAqL1xuXG5cbmNsYXNzIFNlbGVjdFByb21wdCBleHRlbmRzIFByb21wdCB7XG4gIGNvbnN0cnVjdG9yKG9wdHMgPSB7fSkge1xuICAgIHN1cGVyKG9wdHMpO1xuICAgIHRoaXMubXNnID0gb3B0cy5tZXNzYWdlO1xuICAgIHRoaXMuaGludCA9IG9wdHMuaGludCB8fCAnLSBVc2UgYXJyb3cta2V5cy4gUmV0dXJuIHRvIHN1Ym1pdC4nO1xuICAgIHRoaXMud2FybiA9IG9wdHMud2FybiB8fCAnLSBUaGlzIG9wdGlvbiBpcyBkaXNhYmxlZCc7XG4gICAgdGhpcy5jdXJzb3IgPSBvcHRzLmluaXRpYWwgfHwgMDtcbiAgICB0aGlzLmNob2ljZXMgPSBvcHRzLmNob2ljZXMubWFwKChjaCwgaWR4KSA9PiB7XG4gICAgICBpZiAodHlwZW9mIGNoID09PSAnc3RyaW5nJykgY2ggPSB7XG4gICAgICAgIHRpdGxlOiBjaCxcbiAgICAgICAgdmFsdWU6IGlkeFxuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRpdGxlOiBjaCAmJiAoY2gudGl0bGUgfHwgY2gudmFsdWUgfHwgY2gpLFxuICAgICAgICB2YWx1ZTogY2ggJiYgKGNoLnZhbHVlID09PSB1bmRlZmluZWQgPyBpZHggOiBjaC52YWx1ZSksXG4gICAgICAgIGRlc2NyaXB0aW9uOiBjaCAmJiBjaC5kZXNjcmlwdGlvbixcbiAgICAgICAgc2VsZWN0ZWQ6IGNoICYmIGNoLnNlbGVjdGVkLFxuICAgICAgICBkaXNhYmxlZDogY2ggJiYgY2guZGlzYWJsZWRcbiAgICAgIH07XG4gICAgfSk7XG4gICAgdGhpcy5vcHRpb25zUGVyUGFnZSA9IG9wdHMub3B0aW9uc1BlclBhZ2UgfHwgMTA7XG4gICAgdGhpcy52YWx1ZSA9ICh0aGlzLmNob2ljZXNbdGhpcy5jdXJzb3JdIHx8IHt9KS52YWx1ZTtcbiAgICB0aGlzLmNsZWFyID0gY2xlYXIoJycsIHRoaXMub3V0LmNvbHVtbnMpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBtb3ZlQ3Vyc29yKG4pIHtcbiAgICB0aGlzLmN1cnNvciA9IG47XG4gICAgdGhpcy52YWx1ZSA9IHRoaXMuY2hvaWNlc1tuXS52YWx1ZTtcbiAgICB0aGlzLmZpcmUoKTtcbiAgfVxuXG4gIHJlc2V0KCkge1xuICAgIHRoaXMubW92ZUN1cnNvcigwKTtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZXhpdCgpIHtcbiAgICB0aGlzLmFib3J0KCk7XG4gIH1cblxuICBhYm9ydCgpIHtcbiAgICB0aGlzLmRvbmUgPSB0aGlzLmFib3J0ZWQgPSB0cnVlO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gICAgdGhpcy5vdXQud3JpdGUoJ1xcbicpO1xuICAgIHRoaXMuY2xvc2UoKTtcbiAgfVxuXG4gIHN1Ym1pdCgpIHtcbiAgICBpZiAoIXRoaXMuc2VsZWN0aW9uLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLmRvbmUgPSB0cnVlO1xuICAgICAgdGhpcy5hYm9ydGVkID0gZmFsc2U7XG4gICAgICB0aGlzLmZpcmUoKTtcbiAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgICB0aGlzLm91dC53cml0ZSgnXFxuJyk7XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfSBlbHNlIHRoaXMuYmVsbCgpO1xuICB9XG5cbiAgZmlyc3QoKSB7XG4gICAgdGhpcy5tb3ZlQ3Vyc29yKDApO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBsYXN0KCkge1xuICAgIHRoaXMubW92ZUN1cnNvcih0aGlzLmNob2ljZXMubGVuZ3RoIC0gMSk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHVwKCkge1xuICAgIGlmICh0aGlzLmN1cnNvciA9PT0gMCkge1xuICAgICAgdGhpcy5tb3ZlQ3Vyc29yKHRoaXMuY2hvaWNlcy5sZW5ndGggLSAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5tb3ZlQ3Vyc29yKHRoaXMuY3Vyc29yIC0gMSk7XG4gICAgfVxuXG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIGRvd24oKSB7XG4gICAgaWYgKHRoaXMuY3Vyc29yID09PSB0aGlzLmNob2ljZXMubGVuZ3RoIC0gMSkge1xuICAgICAgdGhpcy5tb3ZlQ3Vyc29yKDApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm1vdmVDdXJzb3IodGhpcy5jdXJzb3IgKyAxKTtcbiAgICB9XG5cbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgbmV4dCgpIHtcbiAgICB0aGlzLm1vdmVDdXJzb3IoKHRoaXMuY3Vyc29yICsgMSkgJSB0aGlzLmNob2ljZXMubGVuZ3RoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgXyhjLCBrZXkpIHtcbiAgICBpZiAoYyA9PT0gJyAnKSByZXR1cm4gdGhpcy5zdWJtaXQoKTtcbiAgfVxuXG4gIGdldCBzZWxlY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuY2hvaWNlc1t0aGlzLmN1cnNvcl07XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgaWYgKHRoaXMuY2xvc2VkKSByZXR1cm47XG4gICAgaWYgKHRoaXMuZmlyc3RSZW5kZXIpIHRoaXMub3V0LndyaXRlKGN1cnNvci5oaWRlKTtlbHNlIHRoaXMub3V0LndyaXRlKGNsZWFyKHRoaXMub3V0cHV0VGV4dCwgdGhpcy5vdXQuY29sdW1ucykpO1xuICAgIHN1cGVyLnJlbmRlcigpO1xuXG4gICAgbGV0IF9lbnRyaWVzVG9EaXNwbGF5ID0gZW50cmllc1RvRGlzcGxheSh0aGlzLmN1cnNvciwgdGhpcy5jaG9pY2VzLmxlbmd0aCwgdGhpcy5vcHRpb25zUGVyUGFnZSksXG4gICAgICAgIHN0YXJ0SW5kZXggPSBfZW50cmllc1RvRGlzcGxheS5zdGFydEluZGV4LFxuICAgICAgICBlbmRJbmRleCA9IF9lbnRyaWVzVG9EaXNwbGF5LmVuZEluZGV4OyAvLyBQcmludCBwcm9tcHRcblxuXG4gICAgdGhpcy5vdXRwdXRUZXh0ID0gW3N0eWxlLnN5bWJvbCh0aGlzLmRvbmUsIHRoaXMuYWJvcnRlZCksIGNvbG9yLmJvbGQodGhpcy5tc2cpLCBzdHlsZS5kZWxpbWl0ZXIoZmFsc2UpLCB0aGlzLmRvbmUgPyB0aGlzLnNlbGVjdGlvbi50aXRsZSA6IHRoaXMuc2VsZWN0aW9uLmRpc2FibGVkID8gY29sb3IueWVsbG93KHRoaXMud2FybikgOiBjb2xvci5ncmF5KHRoaXMuaGludCldLmpvaW4oJyAnKTsgLy8gUHJpbnQgY2hvaWNlc1xuXG4gICAgaWYgKCF0aGlzLmRvbmUpIHtcbiAgICAgIHRoaXMub3V0cHV0VGV4dCArPSAnXFxuJztcblxuICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0SW5kZXg7IGkgPCBlbmRJbmRleDsgaSsrKSB7XG4gICAgICAgIGxldCB0aXRsZSxcbiAgICAgICAgICAgIHByZWZpeCxcbiAgICAgICAgICAgIGRlc2MgPSAnJyxcbiAgICAgICAgICAgIHYgPSB0aGlzLmNob2ljZXNbaV07IC8vIERldGVybWluZSB3aGV0aGVyIHRvIGRpc3BsYXkgXCJtb3JlIGNob2ljZXNcIiBpbmRpY2F0b3JzXG5cbiAgICAgICAgaWYgKGkgPT09IHN0YXJ0SW5kZXggJiYgc3RhcnRJbmRleCA+IDApIHtcbiAgICAgICAgICBwcmVmaXggPSBmaWd1cmVzLmFycm93VXA7XG4gICAgICAgIH0gZWxzZSBpZiAoaSA9PT0gZW5kSW5kZXggLSAxICYmIGVuZEluZGV4IDwgdGhpcy5jaG9pY2VzLmxlbmd0aCkge1xuICAgICAgICAgIHByZWZpeCA9IGZpZ3VyZXMuYXJyb3dEb3duO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByZWZpeCA9ICcgJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2LmRpc2FibGVkKSB7XG4gICAgICAgICAgdGl0bGUgPSB0aGlzLmN1cnNvciA9PT0gaSA/IGNvbG9yLmdyYXkoKS51bmRlcmxpbmUodi50aXRsZSkgOiBjb2xvci5zdHJpa2V0aHJvdWdoKCkuZ3JheSh2LnRpdGxlKTtcbiAgICAgICAgICBwcmVmaXggPSAodGhpcy5jdXJzb3IgPT09IGkgPyBjb2xvci5ib2xkKCkuZ3JheShmaWd1cmVzLnBvaW50ZXIpICsgJyAnIDogJyAgJykgKyBwcmVmaXg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGl0bGUgPSB0aGlzLmN1cnNvciA9PT0gaSA/IGNvbG9yLmN5YW4oKS51bmRlcmxpbmUodi50aXRsZSkgOiB2LnRpdGxlO1xuICAgICAgICAgIHByZWZpeCA9ICh0aGlzLmN1cnNvciA9PT0gaSA/IGNvbG9yLmN5YW4oZmlndXJlcy5wb2ludGVyKSArICcgJyA6ICcgICcpICsgcHJlZml4O1xuXG4gICAgICAgICAgaWYgKHYuZGVzY3JpcHRpb24gJiYgdGhpcy5jdXJzb3IgPT09IGkpIHtcbiAgICAgICAgICAgIGRlc2MgPSBgIC0gJHt2LmRlc2NyaXB0aW9ufWA7XG5cbiAgICAgICAgICAgIGlmIChwcmVmaXgubGVuZ3RoICsgdGl0bGUubGVuZ3RoICsgZGVzYy5sZW5ndGggPj0gdGhpcy5vdXQuY29sdW1ucyB8fCB2LmRlc2NyaXB0aW9uLnNwbGl0KC9cXHI/XFxuLykubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICBkZXNjID0gJ1xcbicgKyB3cmFwKHYuZGVzY3JpcHRpb24sIHtcbiAgICAgICAgICAgICAgICBtYXJnaW46IDMsXG4gICAgICAgICAgICAgICAgd2lkdGg6IHRoaXMub3V0LmNvbHVtbnNcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5vdXRwdXRUZXh0ICs9IGAke3ByZWZpeH0gJHt0aXRsZX0ke2NvbG9yLmdyYXkoZGVzYyl9XFxuYDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLm91dC53cml0ZSh0aGlzLm91dHB1dFRleHQpO1xuICB9XG5cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBTZWxlY3RQcm9tcHQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbG9yID0gcmVxdWlyZSgna2xldXInKTtcblxuY29uc3QgUHJvbXB0ID0gcmVxdWlyZSgnLi9wcm9tcHQnKTtcblxuY29uc3QgX3JlcXVpcmUgPSByZXF1aXJlKCcuLi91dGlsJyksXG4gICAgICBzdHlsZSA9IF9yZXF1aXJlLnN0eWxlLFxuICAgICAgY2xlYXIgPSBfcmVxdWlyZS5jbGVhcjtcblxuY29uc3QgX3JlcXVpcmUyID0gcmVxdWlyZSgnc2lzdGVyYW5zaScpLFxuICAgICAgY3Vyc29yID0gX3JlcXVpcmUyLmN1cnNvcixcbiAgICAgIGVyYXNlID0gX3JlcXVpcmUyLmVyYXNlO1xuLyoqXG4gKiBUb2dnbGVQcm9tcHQgQmFzZSBFbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyBPcHRpb25zXG4gKiBAcGFyYW0ge1N0cmluZ30gb3B0cy5tZXNzYWdlIE1lc3NhZ2VcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdHMuaW5pdGlhbD1mYWxzZV0gRGVmYXVsdCB2YWx1ZVxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLmFjdGl2ZT0nbm8nXSBBY3RpdmUgbGFiZWxcbiAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5pbmFjdGl2ZT0nb2ZmJ10gSW5hY3RpdmUgbGFiZWxcbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICovXG5cblxuY2xhc3MgVG9nZ2xlUHJvbXB0IGV4dGVuZHMgUHJvbXB0IHtcbiAgY29uc3RydWN0b3Iob3B0cyA9IHt9KSB7XG4gICAgc3VwZXIob3B0cyk7XG4gICAgdGhpcy5tc2cgPSBvcHRzLm1lc3NhZ2U7XG4gICAgdGhpcy52YWx1ZSA9ICEhb3B0cy5pbml0aWFsO1xuICAgIHRoaXMuYWN0aXZlID0gb3B0cy5hY3RpdmUgfHwgJ29uJztcbiAgICB0aGlzLmluYWN0aXZlID0gb3B0cy5pbmFjdGl2ZSB8fCAnb2ZmJztcbiAgICB0aGlzLmluaXRpYWxWYWx1ZSA9IHRoaXMudmFsdWU7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHJlc2V0KCkge1xuICAgIHRoaXMudmFsdWUgPSB0aGlzLmluaXRpYWxWYWx1ZTtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZXhpdCgpIHtcbiAgICB0aGlzLmFib3J0KCk7XG4gIH1cblxuICBhYm9ydCgpIHtcbiAgICB0aGlzLmRvbmUgPSB0aGlzLmFib3J0ZWQgPSB0cnVlO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gICAgdGhpcy5vdXQud3JpdGUoJ1xcbicpO1xuICAgIHRoaXMuY2xvc2UoKTtcbiAgfVxuXG4gIHN1Ym1pdCgpIHtcbiAgICB0aGlzLmRvbmUgPSB0cnVlO1xuICAgIHRoaXMuYWJvcnRlZCA9IGZhbHNlO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gICAgdGhpcy5vdXQud3JpdGUoJ1xcbicpO1xuICAgIHRoaXMuY2xvc2UoKTtcbiAgfVxuXG4gIGRlYWN0aXZhdGUoKSB7XG4gICAgaWYgKHRoaXMudmFsdWUgPT09IGZhbHNlKSByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgdGhpcy52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBhY3RpdmF0ZSgpIHtcbiAgICBpZiAodGhpcy52YWx1ZSA9PT0gdHJ1ZSkgcmV0dXJuIHRoaXMuYmVsbCgpO1xuICAgIHRoaXMudmFsdWUgPSB0cnVlO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBkZWxldGUoKSB7XG4gICAgdGhpcy5kZWFjdGl2YXRlKCk7XG4gIH1cblxuICBsZWZ0KCkge1xuICAgIHRoaXMuZGVhY3RpdmF0ZSgpO1xuICB9XG5cbiAgcmlnaHQoKSB7XG4gICAgdGhpcy5hY3RpdmF0ZSgpO1xuICB9XG5cbiAgZG93bigpIHtcbiAgICB0aGlzLmRlYWN0aXZhdGUoKTtcbiAgfVxuXG4gIHVwKCkge1xuICAgIHRoaXMuYWN0aXZhdGUoKTtcbiAgfVxuXG4gIG5leHQoKSB7XG4gICAgdGhpcy52YWx1ZSA9ICF0aGlzLnZhbHVlO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBfKGMsIGtleSkge1xuICAgIGlmIChjID09PSAnICcpIHtcbiAgICAgIHRoaXMudmFsdWUgPSAhdGhpcy52YWx1ZTtcbiAgICB9IGVsc2UgaWYgKGMgPT09ICcxJykge1xuICAgICAgdGhpcy52YWx1ZSA9IHRydWU7XG4gICAgfSBlbHNlIGlmIChjID09PSAnMCcpIHtcbiAgICAgIHRoaXMudmFsdWUgPSBmYWxzZTtcbiAgICB9IGVsc2UgcmV0dXJuIHRoaXMuYmVsbCgpO1xuXG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBpZiAodGhpcy5jbG9zZWQpIHJldHVybjtcbiAgICBpZiAodGhpcy5maXJzdFJlbmRlcikgdGhpcy5vdXQud3JpdGUoY3Vyc29yLmhpZGUpO2Vsc2UgdGhpcy5vdXQud3JpdGUoY2xlYXIodGhpcy5vdXRwdXRUZXh0LCB0aGlzLm91dC5jb2x1bW5zKSk7XG4gICAgc3VwZXIucmVuZGVyKCk7XG4gICAgdGhpcy5vdXRwdXRUZXh0ID0gW3N0eWxlLnN5bWJvbCh0aGlzLmRvbmUsIHRoaXMuYWJvcnRlZCksIGNvbG9yLmJvbGQodGhpcy5tc2cpLCBzdHlsZS5kZWxpbWl0ZXIodGhpcy5kb25lKSwgdGhpcy52YWx1ZSA/IHRoaXMuaW5hY3RpdmUgOiBjb2xvci5jeWFuKCkudW5kZXJsaW5lKHRoaXMuaW5hY3RpdmUpLCBjb2xvci5ncmF5KCcvJyksIHRoaXMudmFsdWUgPyBjb2xvci5jeWFuKCkudW5kZXJsaW5lKHRoaXMuYWN0aXZlKSA6IHRoaXMuYWN0aXZlXS5qb2luKCcgJyk7XG4gICAgdGhpcy5vdXQud3JpdGUoZXJhc2UubGluZSArIGN1cnNvci50bygwKSArIHRoaXMub3V0cHV0VGV4dCk7XG4gIH1cblxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFRvZ2dsZVByb21wdDsiLCIndXNlIHN0cmljdCc7XG5cbmNsYXNzIERhdGVQYXJ0IHtcbiAgY29uc3RydWN0b3Ioe1xuICAgIHRva2VuLFxuICAgIGRhdGUsXG4gICAgcGFydHMsXG4gICAgbG9jYWxlc1xuICB9KSB7XG4gICAgdGhpcy50b2tlbiA9IHRva2VuO1xuICAgIHRoaXMuZGF0ZSA9IGRhdGUgfHwgbmV3IERhdGUoKTtcbiAgICB0aGlzLnBhcnRzID0gcGFydHMgfHwgW3RoaXNdO1xuICAgIHRoaXMubG9jYWxlcyA9IGxvY2FsZXMgfHwge307XG4gIH1cblxuICB1cCgpIHt9XG5cbiAgZG93bigpIHt9XG5cbiAgbmV4dCgpIHtcbiAgICBjb25zdCBjdXJyZW50SWR4ID0gdGhpcy5wYXJ0cy5pbmRleE9mKHRoaXMpO1xuICAgIHJldHVybiB0aGlzLnBhcnRzLmZpbmQoKHBhcnQsIGlkeCkgPT4gaWR4ID4gY3VycmVudElkeCAmJiBwYXJ0IGluc3RhbmNlb2YgRGF0ZVBhcnQpO1xuICB9XG5cbiAgc2V0VG8odmFsKSB7fVxuXG4gIHByZXYoKSB7XG4gICAgbGV0IHBhcnRzID0gW10uY29uY2F0KHRoaXMucGFydHMpLnJldmVyc2UoKTtcbiAgICBjb25zdCBjdXJyZW50SWR4ID0gcGFydHMuaW5kZXhPZih0aGlzKTtcbiAgICByZXR1cm4gcGFydHMuZmluZCgocGFydCwgaWR4KSA9PiBpZHggPiBjdXJyZW50SWR4ICYmIHBhcnQgaW5zdGFuY2VvZiBEYXRlUGFydCk7XG4gIH1cblxuICB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gU3RyaW5nKHRoaXMuZGF0ZSk7XG4gIH1cblxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IERhdGVQYXJ0OyIsIid1c2Ugc3RyaWN0JztcblxuY29uc3QgRGF0ZVBhcnQgPSByZXF1aXJlKCcuL2RhdGVwYXJ0Jyk7XG5cbmNsYXNzIE1lcmlkaWVtIGV4dGVuZHMgRGF0ZVBhcnQge1xuICBjb25zdHJ1Y3RvcihvcHRzID0ge30pIHtcbiAgICBzdXBlcihvcHRzKTtcbiAgfVxuXG4gIHVwKCkge1xuICAgIHRoaXMuZGF0ZS5zZXRIb3VycygodGhpcy5kYXRlLmdldEhvdXJzKCkgKyAxMikgJSAyNCk7XG4gIH1cblxuICBkb3duKCkge1xuICAgIHRoaXMudXAoKTtcbiAgfVxuXG4gIHRvU3RyaW5nKCkge1xuICAgIGxldCBtZXJpZGllbSA9IHRoaXMuZGF0ZS5nZXRIb3VycygpID4gMTIgPyAncG0nIDogJ2FtJztcbiAgICByZXR1cm4gL1xcQS8udGVzdCh0aGlzLnRva2VuKSA/IG1lcmlkaWVtLnRvVXBwZXJDYXNlKCkgOiBtZXJpZGllbTtcbiAgfVxuXG59XG5cbm1vZHVsZS5leHBvcnRzID0gTWVyaWRpZW07IiwiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBEYXRlUGFydCA9IHJlcXVpcmUoJy4vZGF0ZXBhcnQnKTtcblxuY29uc3QgcG9zID0gbiA9PiB7XG4gIG4gPSBuICUgMTA7XG4gIHJldHVybiBuID09PSAxID8gJ3N0JyA6IG4gPT09IDIgPyAnbmQnIDogbiA9PT0gMyA/ICdyZCcgOiAndGgnO1xufTtcblxuY2xhc3MgRGF5IGV4dGVuZHMgRGF0ZVBhcnQge1xuICBjb25zdHJ1Y3RvcihvcHRzID0ge30pIHtcbiAgICBzdXBlcihvcHRzKTtcbiAgfVxuXG4gIHVwKCkge1xuICAgIHRoaXMuZGF0ZS5zZXREYXRlKHRoaXMuZGF0ZS5nZXREYXRlKCkgKyAxKTtcbiAgfVxuXG4gIGRvd24oKSB7XG4gICAgdGhpcy5kYXRlLnNldERhdGUodGhpcy5kYXRlLmdldERhdGUoKSAtIDEpO1xuICB9XG5cbiAgc2V0VG8odmFsKSB7XG4gICAgdGhpcy5kYXRlLnNldERhdGUocGFyc2VJbnQodmFsLnN1YnN0cigtMikpKTtcbiAgfVxuXG4gIHRvU3RyaW5nKCkge1xuICAgIGxldCBkYXRlID0gdGhpcy5kYXRlLmdldERhdGUoKTtcbiAgICBsZXQgZGF5ID0gdGhpcy5kYXRlLmdldERheSgpO1xuICAgIHJldHVybiB0aGlzLnRva2VuID09PSAnREQnID8gU3RyaW5nKGRhdGUpLnBhZFN0YXJ0KDIsICcwJykgOiB0aGlzLnRva2VuID09PSAnRG8nID8gZGF0ZSArIHBvcyhkYXRlKSA6IHRoaXMudG9rZW4gPT09ICdkJyA/IGRheSArIDEgOiB0aGlzLnRva2VuID09PSAnZGRkJyA/IHRoaXMubG9jYWxlcy53ZWVrZGF5c1Nob3J0W2RheV0gOiB0aGlzLnRva2VuID09PSAnZGRkZCcgPyB0aGlzLmxvY2FsZXMud2Vla2RheXNbZGF5XSA6IGRhdGU7XG4gIH1cblxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IERheTsiLCIndXNlIHN0cmljdCc7XG5cbmNvbnN0IERhdGVQYXJ0ID0gcmVxdWlyZSgnLi9kYXRlcGFydCcpO1xuXG5jbGFzcyBIb3VycyBleHRlbmRzIERhdGVQYXJ0IHtcbiAgY29uc3RydWN0b3Iob3B0cyA9IHt9KSB7XG4gICAgc3VwZXIob3B0cyk7XG4gIH1cblxuICB1cCgpIHtcbiAgICB0aGlzLmRhdGUuc2V0SG91cnModGhpcy5kYXRlLmdldEhvdXJzKCkgKyAxKTtcbiAgfVxuXG4gIGRvd24oKSB7XG4gICAgdGhpcy5kYXRlLnNldEhvdXJzKHRoaXMuZGF0ZS5nZXRIb3VycygpIC0gMSk7XG4gIH1cblxuICBzZXRUbyh2YWwpIHtcbiAgICB0aGlzLmRhdGUuc2V0SG91cnMocGFyc2VJbnQodmFsLnN1YnN0cigtMikpKTtcbiAgfVxuXG4gIHRvU3RyaW5nKCkge1xuICAgIGxldCBob3VycyA9IHRoaXMuZGF0ZS5nZXRIb3VycygpO1xuICAgIGlmICgvaC8udGVzdCh0aGlzLnRva2VuKSkgaG91cnMgPSBob3VycyAlIDEyIHx8IDEyO1xuICAgIHJldHVybiB0aGlzLnRva2VuLmxlbmd0aCA+IDEgPyBTdHJpbmcoaG91cnMpLnBhZFN0YXJ0KDIsICcwJykgOiBob3VycztcbiAgfVxuXG59XG5cbm1vZHVsZS5leHBvcnRzID0gSG91cnM7IiwiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBEYXRlUGFydCA9IHJlcXVpcmUoJy4vZGF0ZXBhcnQnKTtcblxuY2xhc3MgTWlsbGlzZWNvbmRzIGV4dGVuZHMgRGF0ZVBhcnQge1xuICBjb25zdHJ1Y3RvcihvcHRzID0ge30pIHtcbiAgICBzdXBlcihvcHRzKTtcbiAgfVxuXG4gIHVwKCkge1xuICAgIHRoaXMuZGF0ZS5zZXRNaWxsaXNlY29uZHModGhpcy5kYXRlLmdldE1pbGxpc2Vjb25kcygpICsgMSk7XG4gIH1cblxuICBkb3duKCkge1xuICAgIHRoaXMuZGF0ZS5zZXRNaWxsaXNlY29uZHModGhpcy5kYXRlLmdldE1pbGxpc2Vjb25kcygpIC0gMSk7XG4gIH1cblxuICBzZXRUbyh2YWwpIHtcbiAgICB0aGlzLmRhdGUuc2V0TWlsbGlzZWNvbmRzKHBhcnNlSW50KHZhbC5zdWJzdHIoLXRoaXMudG9rZW4ubGVuZ3RoKSkpO1xuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIFN0cmluZyh0aGlzLmRhdGUuZ2V0TWlsbGlzZWNvbmRzKCkpLnBhZFN0YXJ0KDQsICcwJykuc3Vic3RyKDAsIHRoaXMudG9rZW4ubGVuZ3RoKTtcbiAgfVxuXG59XG5cbm1vZHVsZS5leHBvcnRzID0gTWlsbGlzZWNvbmRzOyIsIid1c2Ugc3RyaWN0JztcblxuY29uc3QgRGF0ZVBhcnQgPSByZXF1aXJlKCcuL2RhdGVwYXJ0Jyk7XG5cbmNsYXNzIE1pbnV0ZXMgZXh0ZW5kcyBEYXRlUGFydCB7XG4gIGNvbnN0cnVjdG9yKG9wdHMgPSB7fSkge1xuICAgIHN1cGVyKG9wdHMpO1xuICB9XG5cbiAgdXAoKSB7XG4gICAgdGhpcy5kYXRlLnNldE1pbnV0ZXModGhpcy5kYXRlLmdldE1pbnV0ZXMoKSArIDEpO1xuICB9XG5cbiAgZG93bigpIHtcbiAgICB0aGlzLmRhdGUuc2V0TWludXRlcyh0aGlzLmRhdGUuZ2V0TWludXRlcygpIC0gMSk7XG4gIH1cblxuICBzZXRUbyh2YWwpIHtcbiAgICB0aGlzLmRhdGUuc2V0TWludXRlcyhwYXJzZUludCh2YWwuc3Vic3RyKC0yKSkpO1xuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgbGV0IG0gPSB0aGlzLmRhdGUuZ2V0TWludXRlcygpO1xuICAgIHJldHVybiB0aGlzLnRva2VuLmxlbmd0aCA+IDEgPyBTdHJpbmcobSkucGFkU3RhcnQoMiwgJzAnKSA6IG07XG4gIH1cblxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IE1pbnV0ZXM7IiwiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBEYXRlUGFydCA9IHJlcXVpcmUoJy4vZGF0ZXBhcnQnKTtcblxuY2xhc3MgTW9udGggZXh0ZW5kcyBEYXRlUGFydCB7XG4gIGNvbnN0cnVjdG9yKG9wdHMgPSB7fSkge1xuICAgIHN1cGVyKG9wdHMpO1xuICB9XG5cbiAgdXAoKSB7XG4gICAgdGhpcy5kYXRlLnNldE1vbnRoKHRoaXMuZGF0ZS5nZXRNb250aCgpICsgMSk7XG4gIH1cblxuICBkb3duKCkge1xuICAgIHRoaXMuZGF0ZS5zZXRNb250aCh0aGlzLmRhdGUuZ2V0TW9udGgoKSAtIDEpO1xuICB9XG5cbiAgc2V0VG8odmFsKSB7XG4gICAgdmFsID0gcGFyc2VJbnQodmFsLnN1YnN0cigtMikpIC0gMTtcbiAgICB0aGlzLmRhdGUuc2V0TW9udGgodmFsIDwgMCA/IDAgOiB2YWwpO1xuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgbGV0IG1vbnRoID0gdGhpcy5kYXRlLmdldE1vbnRoKCk7XG4gICAgbGV0IHRsID0gdGhpcy50b2tlbi5sZW5ndGg7XG4gICAgcmV0dXJuIHRsID09PSAyID8gU3RyaW5nKG1vbnRoICsgMSkucGFkU3RhcnQoMiwgJzAnKSA6IHRsID09PSAzID8gdGhpcy5sb2NhbGVzLm1vbnRoc1Nob3J0W21vbnRoXSA6IHRsID09PSA0ID8gdGhpcy5sb2NhbGVzLm1vbnRoc1ttb250aF0gOiBTdHJpbmcobW9udGggKyAxKTtcbiAgfVxuXG59XG5cbm1vZHVsZS5leHBvcnRzID0gTW9udGg7IiwiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBEYXRlUGFydCA9IHJlcXVpcmUoJy4vZGF0ZXBhcnQnKTtcblxuY2xhc3MgU2Vjb25kcyBleHRlbmRzIERhdGVQYXJ0IHtcbiAgY29uc3RydWN0b3Iob3B0cyA9IHt9KSB7XG4gICAgc3VwZXIob3B0cyk7XG4gIH1cblxuICB1cCgpIHtcbiAgICB0aGlzLmRhdGUuc2V0U2Vjb25kcyh0aGlzLmRhdGUuZ2V0U2Vjb25kcygpICsgMSk7XG4gIH1cblxuICBkb3duKCkge1xuICAgIHRoaXMuZGF0ZS5zZXRTZWNvbmRzKHRoaXMuZGF0ZS5nZXRTZWNvbmRzKCkgLSAxKTtcbiAgfVxuXG4gIHNldFRvKHZhbCkge1xuICAgIHRoaXMuZGF0ZS5zZXRTZWNvbmRzKHBhcnNlSW50KHZhbC5zdWJzdHIoLTIpKSk7XG4gIH1cblxuICB0b1N0cmluZygpIHtcbiAgICBsZXQgcyA9IHRoaXMuZGF0ZS5nZXRTZWNvbmRzKCk7XG4gICAgcmV0dXJuIHRoaXMudG9rZW4ubGVuZ3RoID4gMSA/IFN0cmluZyhzKS5wYWRTdGFydCgyLCAnMCcpIDogcztcbiAgfVxuXG59XG5cbm1vZHVsZS5leHBvcnRzID0gU2Vjb25kczsiLCIndXNlIHN0cmljdCc7XG5cbmNvbnN0IERhdGVQYXJ0ID0gcmVxdWlyZSgnLi9kYXRlcGFydCcpO1xuXG5jbGFzcyBZZWFyIGV4dGVuZHMgRGF0ZVBhcnQge1xuICBjb25zdHJ1Y3RvcihvcHRzID0ge30pIHtcbiAgICBzdXBlcihvcHRzKTtcbiAgfVxuXG4gIHVwKCkge1xuICAgIHRoaXMuZGF0ZS5zZXRGdWxsWWVhcih0aGlzLmRhdGUuZ2V0RnVsbFllYXIoKSArIDEpO1xuICB9XG5cbiAgZG93bigpIHtcbiAgICB0aGlzLmRhdGUuc2V0RnVsbFllYXIodGhpcy5kYXRlLmdldEZ1bGxZZWFyKCkgLSAxKTtcbiAgfVxuXG4gIHNldFRvKHZhbCkge1xuICAgIHRoaXMuZGF0ZS5zZXRGdWxsWWVhcih2YWwuc3Vic3RyKC00KSk7XG4gIH1cblxuICB0b1N0cmluZygpIHtcbiAgICBsZXQgeWVhciA9IFN0cmluZyh0aGlzLmRhdGUuZ2V0RnVsbFllYXIoKSkucGFkU3RhcnQoNCwgJzAnKTtcbiAgICByZXR1cm4gdGhpcy50b2tlbi5sZW5ndGggPT09IDIgPyB5ZWFyLnN1YnN0cigtMikgOiB5ZWFyO1xuICB9XG5cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBZZWFyOyIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIERhdGVQYXJ0OiByZXF1aXJlKCcuL2RhdGVwYXJ0JyksXG4gIE1lcmlkaWVtOiByZXF1aXJlKCcuL21lcmlkaWVtJyksXG4gIERheTogcmVxdWlyZSgnLi9kYXknKSxcbiAgSG91cnM6IHJlcXVpcmUoJy4vaG91cnMnKSxcbiAgTWlsbGlzZWNvbmRzOiByZXF1aXJlKCcuL21pbGxpc2Vjb25kcycpLFxuICBNaW51dGVzOiByZXF1aXJlKCcuL21pbnV0ZXMnKSxcbiAgTW9udGg6IHJlcXVpcmUoJy4vbW9udGgnKSxcbiAgU2Vjb25kczogcmVxdWlyZSgnLi9zZWNvbmRzJyksXG4gIFllYXI6IHJlcXVpcmUoJy4veWVhcicpXG59OyIsIid1c2Ugc3RyaWN0JztcblxuZnVuY3Rpb24gYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBrZXksIGFyZykgeyB0cnkgeyB2YXIgaW5mbyA9IGdlbltrZXldKGFyZyk7IHZhciB2YWx1ZSA9IGluZm8udmFsdWU7IH0gY2F0Y2ggKGVycm9yKSB7IHJlamVjdChlcnJvcik7IHJldHVybjsgfSBpZiAoaW5mby5kb25lKSB7IHJlc29sdmUodmFsdWUpOyB9IGVsc2UgeyBQcm9taXNlLnJlc29sdmUodmFsdWUpLnRoZW4oX25leHQsIF90aHJvdyk7IH0gfVxuXG5mdW5jdGlvbiBfYXN5bmNUb0dlbmVyYXRvcihmbikgeyByZXR1cm4gZnVuY3Rpb24gKCkgeyB2YXIgc2VsZiA9IHRoaXMsIGFyZ3MgPSBhcmd1bWVudHM7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7IHZhciBnZW4gPSBmbi5hcHBseShzZWxmLCBhcmdzKTsgZnVuY3Rpb24gX25leHQodmFsdWUpIHsgYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBcIm5leHRcIiwgdmFsdWUpOyB9IGZ1bmN0aW9uIF90aHJvdyhlcnIpIHsgYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBcInRocm93XCIsIGVycik7IH0gX25leHQodW5kZWZpbmVkKTsgfSk7IH07IH1cblxuY29uc3QgY29sb3IgPSByZXF1aXJlKCdrbGV1cicpO1xuXG5jb25zdCBQcm9tcHQgPSByZXF1aXJlKCcuL3Byb21wdCcpO1xuXG5jb25zdCBfcmVxdWlyZSA9IHJlcXVpcmUoJy4uL3V0aWwnKSxcbiAgICAgIHN0eWxlID0gX3JlcXVpcmUuc3R5bGUsXG4gICAgICBjbGVhciA9IF9yZXF1aXJlLmNsZWFyLFxuICAgICAgZmlndXJlcyA9IF9yZXF1aXJlLmZpZ3VyZXM7XG5cbmNvbnN0IF9yZXF1aXJlMiA9IHJlcXVpcmUoJ3Npc3RlcmFuc2knKSxcbiAgICAgIGVyYXNlID0gX3JlcXVpcmUyLmVyYXNlLFxuICAgICAgY3Vyc29yID0gX3JlcXVpcmUyLmN1cnNvcjtcblxuY29uc3QgX3JlcXVpcmUzID0gcmVxdWlyZSgnLi4vZGF0ZXBhcnRzJyksXG4gICAgICBEYXRlUGFydCA9IF9yZXF1aXJlMy5EYXRlUGFydCxcbiAgICAgIE1lcmlkaWVtID0gX3JlcXVpcmUzLk1lcmlkaWVtLFxuICAgICAgRGF5ID0gX3JlcXVpcmUzLkRheSxcbiAgICAgIEhvdXJzID0gX3JlcXVpcmUzLkhvdXJzLFxuICAgICAgTWlsbGlzZWNvbmRzID0gX3JlcXVpcmUzLk1pbGxpc2Vjb25kcyxcbiAgICAgIE1pbnV0ZXMgPSBfcmVxdWlyZTMuTWludXRlcyxcbiAgICAgIE1vbnRoID0gX3JlcXVpcmUzLk1vbnRoLFxuICAgICAgU2Vjb25kcyA9IF9yZXF1aXJlMy5TZWNvbmRzLFxuICAgICAgWWVhciA9IF9yZXF1aXJlMy5ZZWFyO1xuXG5jb25zdCByZWdleCA9IC9cXFxcKC4pfFwiKCg/OlxcXFxbXCJcXFxcXXxbXlwiXSkrKVwifChEW0RvXT98ZHszLDR9fGQpfChNezEsNH0pfChZWSg/OllZKT8pfChbYUFdKXwoW0hoXXsxLDJ9KXwobXsxLDJ9KXwoc3sxLDJ9KXwoU3sxLDR9KXwuL2c7XG5jb25zdCByZWdleEdyb3VwcyA9IHtcbiAgMTogKHtcbiAgICB0b2tlblxuICB9KSA9PiB0b2tlbi5yZXBsYWNlKC9cXFxcKC4pL2csICckMScpLFxuICAyOiBvcHRzID0+IG5ldyBEYXkob3B0cyksXG4gIC8vIERheSAvLyBUT0RPXG4gIDM6IG9wdHMgPT4gbmV3IE1vbnRoKG9wdHMpLFxuICAvLyBNb250aFxuICA0OiBvcHRzID0+IG5ldyBZZWFyKG9wdHMpLFxuICAvLyBZZWFyXG4gIDU6IG9wdHMgPT4gbmV3IE1lcmlkaWVtKG9wdHMpLFxuICAvLyBBTS9QTSAvLyBUT0RPIChzcGVjaWFsKVxuICA2OiBvcHRzID0+IG5ldyBIb3VycyhvcHRzKSxcbiAgLy8gSG91cnNcbiAgNzogb3B0cyA9PiBuZXcgTWludXRlcyhvcHRzKSxcbiAgLy8gTWludXRlc1xuICA4OiBvcHRzID0+IG5ldyBTZWNvbmRzKG9wdHMpLFxuICAvLyBTZWNvbmRzXG4gIDk6IG9wdHMgPT4gbmV3IE1pbGxpc2Vjb25kcyhvcHRzKSAvLyBGcmFjdGlvbmFsIHNlY29uZHNcblxufTtcbmNvbnN0IGRmbHRMb2NhbGVzID0ge1xuICBtb250aHM6ICdKYW51YXJ5LEZlYnJ1YXJ5LE1hcmNoLEFwcmlsLE1heSxKdW5lLEp1bHksQXVndXN0LFNlcHRlbWJlcixPY3RvYmVyLE5vdmVtYmVyLERlY2VtYmVyJy5zcGxpdCgnLCcpLFxuICBtb250aHNTaG9ydDogJ0phbixGZWIsTWFyLEFwcixNYXksSnVuLEp1bCxBdWcsU2VwLE9jdCxOb3YsRGVjJy5zcGxpdCgnLCcpLFxuICB3ZWVrZGF5czogJ1N1bmRheSxNb25kYXksVHVlc2RheSxXZWRuZXNkYXksVGh1cnNkYXksRnJpZGF5LFNhdHVyZGF5Jy5zcGxpdCgnLCcpLFxuICB3ZWVrZGF5c1Nob3J0OiAnU3VuLE1vbixUdWUsV2VkLFRodSxGcmksU2F0Jy5zcGxpdCgnLCcpXG59O1xuLyoqXG4gKiBEYXRlUHJvbXB0IEJhc2UgRWxlbWVudFxuICogQHBhcmFtIHtPYmplY3R9IG9wdHMgT3B0aW9uc1xuICogQHBhcmFtIHtTdHJpbmd9IG9wdHMubWVzc2FnZSBNZXNzYWdlXG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMuaW5pdGlhbF0gSW5kZXggb2YgZGVmYXVsdCB2YWx1ZVxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLm1hc2tdIFRoZSBmb3JtYXQgbWFza1xuICogQHBhcmFtIHtvYmplY3R9IFtvcHRzLmxvY2FsZXNdIFRoZSBkYXRlIGxvY2FsZXNcbiAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5lcnJvcl0gVGhlIGVycm9yIG1lc3NhZ2Ugc2hvd24gb24gaW52YWxpZCB2YWx1ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdHMudmFsaWRhdGVdIEZ1bmN0aW9uIHRvIHZhbGlkYXRlIHRoZSBzdWJtaXR0ZWQgdmFsdWVcbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICovXG5cbmNsYXNzIERhdGVQcm9tcHQgZXh0ZW5kcyBQcm9tcHQge1xuICBjb25zdHJ1Y3RvcihvcHRzID0ge30pIHtcbiAgICBzdXBlcihvcHRzKTtcbiAgICB0aGlzLm1zZyA9IG9wdHMubWVzc2FnZTtcbiAgICB0aGlzLmN1cnNvciA9IDA7XG4gICAgdGhpcy50eXBlZCA9ICcnO1xuICAgIHRoaXMubG9jYWxlcyA9IE9iamVjdC5hc3NpZ24oZGZsdExvY2FsZXMsIG9wdHMubG9jYWxlcyk7XG4gICAgdGhpcy5fZGF0ZSA9IG9wdHMuaW5pdGlhbCB8fCBuZXcgRGF0ZSgpO1xuICAgIHRoaXMuZXJyb3JNc2cgPSBvcHRzLmVycm9yIHx8ICdQbGVhc2UgRW50ZXIgQSBWYWxpZCBWYWx1ZSc7XG5cbiAgICB0aGlzLnZhbGlkYXRvciA9IG9wdHMudmFsaWRhdGUgfHwgKCgpID0+IHRydWUpO1xuXG4gICAgdGhpcy5tYXNrID0gb3B0cy5tYXNrIHx8ICdZWVlZLU1NLUREIEhIOm1tOnNzJztcbiAgICB0aGlzLmNsZWFyID0gY2xlYXIoJycsIHRoaXMub3V0LmNvbHVtbnMpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBnZXQgdmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0ZTtcbiAgfVxuXG4gIGdldCBkYXRlKCkge1xuICAgIHJldHVybiB0aGlzLl9kYXRlO1xuICB9XG5cbiAgc2V0IGRhdGUoZGF0ZSkge1xuICAgIGlmIChkYXRlKSB0aGlzLl9kYXRlLnNldFRpbWUoZGF0ZS5nZXRUaW1lKCkpO1xuICB9XG5cbiAgc2V0IG1hc2sobWFzaykge1xuICAgIGxldCByZXN1bHQ7XG4gICAgdGhpcy5wYXJ0cyA9IFtdO1xuXG4gICAgd2hpbGUgKHJlc3VsdCA9IHJlZ2V4LmV4ZWMobWFzaykpIHtcbiAgICAgIGxldCBtYXRjaCA9IHJlc3VsdC5zaGlmdCgpO1xuICAgICAgbGV0IGlkeCA9IHJlc3VsdC5maW5kSW5kZXgoZ3IgPT4gZ3IgIT0gbnVsbCk7XG4gICAgICB0aGlzLnBhcnRzLnB1c2goaWR4IGluIHJlZ2V4R3JvdXBzID8gcmVnZXhHcm91cHNbaWR4XSh7XG4gICAgICAgIHRva2VuOiByZXN1bHRbaWR4XSB8fCBtYXRjaCxcbiAgICAgICAgZGF0ZTogdGhpcy5kYXRlLFxuICAgICAgICBwYXJ0czogdGhpcy5wYXJ0cyxcbiAgICAgICAgbG9jYWxlczogdGhpcy5sb2NhbGVzXG4gICAgICB9KSA6IHJlc3VsdFtpZHhdIHx8IG1hdGNoKTtcbiAgICB9XG5cbiAgICBsZXQgcGFydHMgPSB0aGlzLnBhcnRzLnJlZHVjZSgoYXJyLCBpKSA9PiB7XG4gICAgICBpZiAodHlwZW9mIGkgPT09ICdzdHJpbmcnICYmIHR5cGVvZiBhcnJbYXJyLmxlbmd0aCAtIDFdID09PSAnc3RyaW5nJykgYXJyW2Fyci5sZW5ndGggLSAxXSArPSBpO2Vsc2UgYXJyLnB1c2goaSk7XG4gICAgICByZXR1cm4gYXJyO1xuICAgIH0sIFtdKTtcbiAgICB0aGlzLnBhcnRzLnNwbGljZSgwKTtcbiAgICB0aGlzLnBhcnRzLnB1c2goLi4ucGFydHMpO1xuICAgIHRoaXMucmVzZXQoKTtcbiAgfVxuXG4gIG1vdmVDdXJzb3Iobikge1xuICAgIHRoaXMudHlwZWQgPSAnJztcbiAgICB0aGlzLmN1cnNvciA9IG47XG4gICAgdGhpcy5maXJlKCk7XG4gIH1cblxuICByZXNldCgpIHtcbiAgICB0aGlzLm1vdmVDdXJzb3IodGhpcy5wYXJ0cy5maW5kSW5kZXgocCA9PiBwIGluc3RhbmNlb2YgRGF0ZVBhcnQpKTtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZXhpdCgpIHtcbiAgICB0aGlzLmFib3J0KCk7XG4gIH1cblxuICBhYm9ydCgpIHtcbiAgICB0aGlzLmRvbmUgPSB0aGlzLmFib3J0ZWQgPSB0cnVlO1xuICAgIHRoaXMuZXJyb3IgPSBmYWxzZTtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICAgIHRoaXMub3V0LndyaXRlKCdcXG4nKTtcbiAgICB0aGlzLmNsb3NlKCk7XG4gIH1cblxuICB2YWxpZGF0ZSgpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgcmV0dXJuIF9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKiAoKSB7XG4gICAgICBsZXQgdmFsaWQgPSB5aWVsZCBfdGhpcy52YWxpZGF0b3IoX3RoaXMudmFsdWUpO1xuXG4gICAgICBpZiAodHlwZW9mIHZhbGlkID09PSAnc3RyaW5nJykge1xuICAgICAgICBfdGhpcy5lcnJvck1zZyA9IHZhbGlkO1xuICAgICAgICB2YWxpZCA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBfdGhpcy5lcnJvciA9ICF2YWxpZDtcbiAgICB9KSgpO1xuICB9XG5cbiAgc3VibWl0KCkge1xuICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgcmV0dXJuIF9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKiAoKSB7XG4gICAgICB5aWVsZCBfdGhpczIudmFsaWRhdGUoKTtcblxuICAgICAgaWYgKF90aGlzMi5lcnJvcikge1xuICAgICAgICBfdGhpczIuY29sb3IgPSAncmVkJztcblxuICAgICAgICBfdGhpczIuZmlyZSgpO1xuXG4gICAgICAgIF90aGlzMi5yZW5kZXIoKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIF90aGlzMi5kb25lID0gdHJ1ZTtcbiAgICAgIF90aGlzMi5hYm9ydGVkID0gZmFsc2U7XG5cbiAgICAgIF90aGlzMi5maXJlKCk7XG5cbiAgICAgIF90aGlzMi5yZW5kZXIoKTtcblxuICAgICAgX3RoaXMyLm91dC53cml0ZSgnXFxuJyk7XG5cbiAgICAgIF90aGlzMi5jbG9zZSgpO1xuICAgIH0pKCk7XG4gIH1cblxuICB1cCgpIHtcbiAgICB0aGlzLnR5cGVkID0gJyc7XG4gICAgdGhpcy5wYXJ0c1t0aGlzLmN1cnNvcl0udXAoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZG93bigpIHtcbiAgICB0aGlzLnR5cGVkID0gJyc7XG4gICAgdGhpcy5wYXJ0c1t0aGlzLmN1cnNvcl0uZG93bigpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBsZWZ0KCkge1xuICAgIGxldCBwcmV2ID0gdGhpcy5wYXJ0c1t0aGlzLmN1cnNvcl0ucHJldigpO1xuICAgIGlmIChwcmV2ID09IG51bGwpIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgICB0aGlzLm1vdmVDdXJzb3IodGhpcy5wYXJ0cy5pbmRleE9mKHByZXYpKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgcmlnaHQoKSB7XG4gICAgbGV0IG5leHQgPSB0aGlzLnBhcnRzW3RoaXMuY3Vyc29yXS5uZXh0KCk7XG4gICAgaWYgKG5leHQgPT0gbnVsbCkgcmV0dXJuIHRoaXMuYmVsbCgpO1xuICAgIHRoaXMubW92ZUN1cnNvcih0aGlzLnBhcnRzLmluZGV4T2YobmV4dCkpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBuZXh0KCkge1xuICAgIGxldCBuZXh0ID0gdGhpcy5wYXJ0c1t0aGlzLmN1cnNvcl0ubmV4dCgpO1xuICAgIHRoaXMubW92ZUN1cnNvcihuZXh0ID8gdGhpcy5wYXJ0cy5pbmRleE9mKG5leHQpIDogdGhpcy5wYXJ0cy5maW5kSW5kZXgocGFydCA9PiBwYXJ0IGluc3RhbmNlb2YgRGF0ZVBhcnQpKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgXyhjKSB7XG4gICAgaWYgKC9cXGQvLnRlc3QoYykpIHtcbiAgICAgIHRoaXMudHlwZWQgKz0gYztcbiAgICAgIHRoaXMucGFydHNbdGhpcy5jdXJzb3JdLnNldFRvKHRoaXMudHlwZWQpO1xuICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICB9XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgaWYgKHRoaXMuY2xvc2VkKSByZXR1cm47XG4gICAgaWYgKHRoaXMuZmlyc3RSZW5kZXIpIHRoaXMub3V0LndyaXRlKGN1cnNvci5oaWRlKTtlbHNlIHRoaXMub3V0LndyaXRlKGNsZWFyKHRoaXMub3V0cHV0VGV4dCwgdGhpcy5vdXQuY29sdW1ucykpO1xuICAgIHN1cGVyLnJlbmRlcigpOyAvLyBQcmludCBwcm9tcHRcblxuICAgIHRoaXMub3V0cHV0VGV4dCA9IFtzdHlsZS5zeW1ib2wodGhpcy5kb25lLCB0aGlzLmFib3J0ZWQpLCBjb2xvci5ib2xkKHRoaXMubXNnKSwgc3R5bGUuZGVsaW1pdGVyKGZhbHNlKSwgdGhpcy5wYXJ0cy5yZWR1Y2UoKGFyciwgcCwgaWR4KSA9PiBhcnIuY29uY2F0KGlkeCA9PT0gdGhpcy5jdXJzb3IgJiYgIXRoaXMuZG9uZSA/IGNvbG9yLmN5YW4oKS51bmRlcmxpbmUocC50b1N0cmluZygpKSA6IHApLCBbXSkuam9pbignJyldLmpvaW4oJyAnKTsgLy8gUHJpbnQgZXJyb3JcblxuICAgIGlmICh0aGlzLmVycm9yKSB7XG4gICAgICB0aGlzLm91dHB1dFRleHQgKz0gdGhpcy5lcnJvck1zZy5zcGxpdCgnXFxuJykucmVkdWNlKChhLCBsLCBpKSA9PiBhICsgYFxcbiR7aSA/IGAgYCA6IGZpZ3VyZXMucG9pbnRlclNtYWxsfSAke2NvbG9yLnJlZCgpLml0YWxpYyhsKX1gLCBgYCk7XG4gICAgfVxuXG4gICAgdGhpcy5vdXQud3JpdGUoZXJhc2UubGluZSArIGN1cnNvci50bygwKSArIHRoaXMub3V0cHV0VGV4dCk7XG4gIH1cblxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IERhdGVQcm9tcHQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmZ1bmN0aW9uIGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywga2V5LCBhcmcpIHsgdHJ5IHsgdmFyIGluZm8gPSBnZW5ba2V5XShhcmcpOyB2YXIgdmFsdWUgPSBpbmZvLnZhbHVlOyB9IGNhdGNoIChlcnJvcikgeyByZWplY3QoZXJyb3IpOyByZXR1cm47IH0gaWYgKGluZm8uZG9uZSkgeyByZXNvbHZlKHZhbHVlKTsgfSBlbHNlIHsgUHJvbWlzZS5yZXNvbHZlKHZhbHVlKS50aGVuKF9uZXh0LCBfdGhyb3cpOyB9IH1cblxuZnVuY3Rpb24gX2FzeW5jVG9HZW5lcmF0b3IoZm4pIHsgcmV0dXJuIGZ1bmN0aW9uICgpIHsgdmFyIHNlbGYgPSB0aGlzLCBhcmdzID0gYXJndW1lbnRzOyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2YXIgZ2VuID0gZm4uYXBwbHkoc2VsZiwgYXJncyk7IGZ1bmN0aW9uIF9uZXh0KHZhbHVlKSB7IGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJuZXh0XCIsIHZhbHVlKTsgfSBmdW5jdGlvbiBfdGhyb3coZXJyKSB7IGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJ0aHJvd1wiLCBlcnIpOyB9IF9uZXh0KHVuZGVmaW5lZCk7IH0pOyB9OyB9XG5cbmNvbnN0IGNvbG9yID0gcmVxdWlyZSgna2xldXInKTtcblxuY29uc3QgUHJvbXB0ID0gcmVxdWlyZSgnLi9wcm9tcHQnKTtcblxuY29uc3QgX3JlcXVpcmUgPSByZXF1aXJlKCdzaXN0ZXJhbnNpJyksXG4gICAgICBjdXJzb3IgPSBfcmVxdWlyZS5jdXJzb3IsXG4gICAgICBlcmFzZSA9IF9yZXF1aXJlLmVyYXNlO1xuXG5jb25zdCBfcmVxdWlyZTIgPSByZXF1aXJlKCcuLi91dGlsJyksXG4gICAgICBzdHlsZSA9IF9yZXF1aXJlMi5zdHlsZSxcbiAgICAgIGZpZ3VyZXMgPSBfcmVxdWlyZTIuZmlndXJlcyxcbiAgICAgIGNsZWFyID0gX3JlcXVpcmUyLmNsZWFyLFxuICAgICAgbGluZXMgPSBfcmVxdWlyZTIubGluZXM7XG5cbmNvbnN0IGlzTnVtYmVyID0gL1swLTldLztcblxuY29uc3QgaXNEZWYgPSBhbnkgPT4gYW55ICE9PSB1bmRlZmluZWQ7XG5cbmNvbnN0IHJvdW5kID0gKG51bWJlciwgcHJlY2lzaW9uKSA9PiB7XG4gIGxldCBmYWN0b3IgPSBNYXRoLnBvdygxMCwgcHJlY2lzaW9uKTtcbiAgcmV0dXJuIE1hdGgucm91bmQobnVtYmVyICogZmFjdG9yKSAvIGZhY3Rvcjtcbn07XG4vKipcbiAqIE51bWJlclByb21wdCBCYXNlIEVsZW1lbnRcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIE9wdGlvbnNcbiAqIEBwYXJhbSB7U3RyaW5nfSBvcHRzLm1lc3NhZ2UgTWVzc2FnZVxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLnN0eWxlPSdkZWZhdWx0J10gUmVuZGVyIHN0eWxlXG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMuaW5pdGlhbF0gRGVmYXVsdCB2YWx1ZVxuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLm1heD0rSW5maW5pdHldIE1heCB2YWx1ZVxuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLm1pbj0tSW5maW5pdHldIE1pbiB2YWx1ZVxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0cy5mbG9hdD1mYWxzZV0gUGFyc2UgaW5wdXQgYXMgZmxvYXRzXG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMucm91bmQ9Ml0gUm91bmQgZmxvYXRzIHRvIHggZGVjaW1hbHNcbiAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0cy5pbmNyZW1lbnQ9MV0gTnVtYmVyIHRvIGluY3JlbWVudCBieSB3aGVuIHVzaW5nIGFycm93LWtleXNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRzLnZhbGlkYXRlXSBWYWxpZGF0ZSBmdW5jdGlvblxuICogQHBhcmFtIHtTdHJlYW19IFtvcHRzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFtvcHRzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKiBAcGFyYW0ge1N0cmluZ30gW29wdHMuZXJyb3JdIFRoZSBpbnZhbGlkIGVycm9yIGxhYmVsXG4gKi9cblxuXG5jbGFzcyBOdW1iZXJQcm9tcHQgZXh0ZW5kcyBQcm9tcHQge1xuICBjb25zdHJ1Y3RvcihvcHRzID0ge30pIHtcbiAgICBzdXBlcihvcHRzKTtcbiAgICB0aGlzLnRyYW5zZm9ybSA9IHN0eWxlLnJlbmRlcihvcHRzLnN0eWxlKTtcbiAgICB0aGlzLm1zZyA9IG9wdHMubWVzc2FnZTtcbiAgICB0aGlzLmluaXRpYWwgPSBpc0RlZihvcHRzLmluaXRpYWwpID8gb3B0cy5pbml0aWFsIDogJyc7XG4gICAgdGhpcy5mbG9hdCA9ICEhb3B0cy5mbG9hdDtcbiAgICB0aGlzLnJvdW5kID0gb3B0cy5yb3VuZCB8fCAyO1xuICAgIHRoaXMuaW5jID0gb3B0cy5pbmNyZW1lbnQgfHwgMTtcbiAgICB0aGlzLm1pbiA9IGlzRGVmKG9wdHMubWluKSA/IG9wdHMubWluIDogLUluZmluaXR5O1xuICAgIHRoaXMubWF4ID0gaXNEZWYob3B0cy5tYXgpID8gb3B0cy5tYXggOiBJbmZpbml0eTtcbiAgICB0aGlzLmVycm9yTXNnID0gb3B0cy5lcnJvciB8fCBgUGxlYXNlIEVudGVyIEEgVmFsaWQgVmFsdWVgO1xuXG4gICAgdGhpcy52YWxpZGF0b3IgPSBvcHRzLnZhbGlkYXRlIHx8ICgoKSA9PiB0cnVlKTtcblxuICAgIHRoaXMuY29sb3IgPSBgY3lhbmA7XG4gICAgdGhpcy52YWx1ZSA9IGBgO1xuICAgIHRoaXMudHlwZWQgPSBgYDtcbiAgICB0aGlzLmxhc3RIaXQgPSAwO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBzZXQgdmFsdWUodikge1xuICAgIGlmICghdiAmJiB2ICE9PSAwKSB7XG4gICAgICB0aGlzLnBsYWNlaG9sZGVyID0gdHJ1ZTtcbiAgICAgIHRoaXMucmVuZGVyZWQgPSBjb2xvci5ncmF5KHRoaXMudHJhbnNmb3JtLnJlbmRlcihgJHt0aGlzLmluaXRpYWx9YCkpO1xuICAgICAgdGhpcy5fdmFsdWUgPSBgYDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wbGFjZWhvbGRlciA9IGZhbHNlO1xuICAgICAgdGhpcy5yZW5kZXJlZCA9IHRoaXMudHJhbnNmb3JtLnJlbmRlcihgJHtyb3VuZCh2LCB0aGlzLnJvdW5kKX1gKTtcbiAgICAgIHRoaXMuX3ZhbHVlID0gcm91bmQodiwgdGhpcy5yb3VuZCk7XG4gICAgfVxuXG4gICAgdGhpcy5maXJlKCk7XG4gIH1cblxuICBnZXQgdmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG5cbiAgcGFyc2UoeCkge1xuICAgIHJldHVybiB0aGlzLmZsb2F0ID8gcGFyc2VGbG9hdCh4KSA6IHBhcnNlSW50KHgpO1xuICB9XG5cbiAgdmFsaWQoYykge1xuICAgIHJldHVybiBjID09PSBgLWAgfHwgYyA9PT0gYC5gICYmIHRoaXMuZmxvYXQgfHwgaXNOdW1iZXIudGVzdChjKTtcbiAgfVxuXG4gIHJlc2V0KCkge1xuICAgIHRoaXMudHlwZWQgPSBgYDtcbiAgICB0aGlzLnZhbHVlID0gYGA7XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIGV4aXQoKSB7XG4gICAgdGhpcy5hYm9ydCgpO1xuICB9XG5cbiAgYWJvcnQoKSB7XG4gICAgbGV0IHggPSB0aGlzLnZhbHVlO1xuICAgIHRoaXMudmFsdWUgPSB4ICE9PSBgYCA/IHggOiB0aGlzLmluaXRpYWw7XG4gICAgdGhpcy5kb25lID0gdGhpcy5hYm9ydGVkID0gdHJ1ZTtcbiAgICB0aGlzLmVycm9yID0gZmFsc2U7XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgICB0aGlzLm91dC53cml0ZShgXFxuYCk7XG4gICAgdGhpcy5jbG9zZSgpO1xuICB9XG5cbiAgdmFsaWRhdGUoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHJldHVybiBfYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiogKCkge1xuICAgICAgbGV0IHZhbGlkID0geWllbGQgX3RoaXMudmFsaWRhdG9yKF90aGlzLnZhbHVlKTtcblxuICAgICAgaWYgKHR5cGVvZiB2YWxpZCA9PT0gYHN0cmluZ2ApIHtcbiAgICAgICAgX3RoaXMuZXJyb3JNc2cgPSB2YWxpZDtcbiAgICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgX3RoaXMuZXJyb3IgPSAhdmFsaWQ7XG4gICAgfSkoKTtcbiAgfVxuXG4gIHN1Ym1pdCgpIHtcbiAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgIHJldHVybiBfYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiogKCkge1xuICAgICAgeWllbGQgX3RoaXMyLnZhbGlkYXRlKCk7XG5cbiAgICAgIGlmIChfdGhpczIuZXJyb3IpIHtcbiAgICAgICAgX3RoaXMyLmNvbG9yID0gYHJlZGA7XG5cbiAgICAgICAgX3RoaXMyLmZpcmUoKTtcblxuICAgICAgICBfdGhpczIucmVuZGVyKCk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBsZXQgeCA9IF90aGlzMi52YWx1ZTtcbiAgICAgIF90aGlzMi52YWx1ZSA9IHggIT09IGBgID8geCA6IF90aGlzMi5pbml0aWFsO1xuICAgICAgX3RoaXMyLmRvbmUgPSB0cnVlO1xuICAgICAgX3RoaXMyLmFib3J0ZWQgPSBmYWxzZTtcbiAgICAgIF90aGlzMi5lcnJvciA9IGZhbHNlO1xuXG4gICAgICBfdGhpczIuZmlyZSgpO1xuXG4gICAgICBfdGhpczIucmVuZGVyKCk7XG5cbiAgICAgIF90aGlzMi5vdXQud3JpdGUoYFxcbmApO1xuXG4gICAgICBfdGhpczIuY2xvc2UoKTtcbiAgICB9KSgpO1xuICB9XG5cbiAgdXAoKSB7XG4gICAgdGhpcy50eXBlZCA9IGBgO1xuXG4gICAgaWYgKHRoaXMudmFsdWUgPT09ICcnKSB7XG4gICAgICB0aGlzLnZhbHVlID0gdGhpcy5taW4gLSB0aGlzLmluYztcbiAgICB9XG5cbiAgICBpZiAodGhpcy52YWx1ZSA+PSB0aGlzLm1heCkgcmV0dXJuIHRoaXMuYmVsbCgpO1xuICAgIHRoaXMudmFsdWUgKz0gdGhpcy5pbmM7XG4gICAgdGhpcy5jb2xvciA9IGBjeWFuYDtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZG93bigpIHtcbiAgICB0aGlzLnR5cGVkID0gYGA7XG5cbiAgICBpZiAodGhpcy52YWx1ZSA9PT0gJycpIHtcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm1pbiArIHRoaXMuaW5jO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnZhbHVlIDw9IHRoaXMubWluKSByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgdGhpcy52YWx1ZSAtPSB0aGlzLmluYztcbiAgICB0aGlzLmNvbG9yID0gYGN5YW5gO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBkZWxldGUoKSB7XG4gICAgbGV0IHZhbCA9IHRoaXMudmFsdWUudG9TdHJpbmcoKTtcbiAgICBpZiAodmFsLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHRoaXMuYmVsbCgpO1xuICAgIHRoaXMudmFsdWUgPSB0aGlzLnBhcnNlKHZhbCA9IHZhbC5zbGljZSgwLCAtMSkpIHx8IGBgO1xuXG4gICAgaWYgKHRoaXMudmFsdWUgIT09ICcnICYmIHRoaXMudmFsdWUgPCB0aGlzLm1pbikge1xuICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubWluO1xuICAgIH1cblxuICAgIHRoaXMuY29sb3IgPSBgY3lhbmA7XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIG5leHQoKSB7XG4gICAgdGhpcy52YWx1ZSA9IHRoaXMuaW5pdGlhbDtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgXyhjLCBrZXkpIHtcbiAgICBpZiAoIXRoaXMudmFsaWQoYykpIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGlmIChub3cgLSB0aGlzLmxhc3RIaXQgPiAxMDAwKSB0aGlzLnR5cGVkID0gYGA7IC8vIDFzIGVsYXBzZWRcblxuICAgIHRoaXMudHlwZWQgKz0gYztcbiAgICB0aGlzLmxhc3RIaXQgPSBub3c7XG4gICAgdGhpcy5jb2xvciA9IGBjeWFuYDtcbiAgICBpZiAoYyA9PT0gYC5gKSByZXR1cm4gdGhpcy5maXJlKCk7XG4gICAgdGhpcy52YWx1ZSA9IE1hdGgubWluKHRoaXMucGFyc2UodGhpcy50eXBlZCksIHRoaXMubWF4KTtcbiAgICBpZiAodGhpcy52YWx1ZSA+IHRoaXMubWF4KSB0aGlzLnZhbHVlID0gdGhpcy5tYXg7XG4gICAgaWYgKHRoaXMudmFsdWUgPCB0aGlzLm1pbikgdGhpcy52YWx1ZSA9IHRoaXMubWluO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgaWYgKHRoaXMuY2xvc2VkKSByZXR1cm47XG5cbiAgICBpZiAoIXRoaXMuZmlyc3RSZW5kZXIpIHtcbiAgICAgIGlmICh0aGlzLm91dHB1dEVycm9yKSB0aGlzLm91dC53cml0ZShjdXJzb3IuZG93bihsaW5lcyh0aGlzLm91dHB1dEVycm9yLCB0aGlzLm91dC5jb2x1bW5zKSAtIDEpICsgY2xlYXIodGhpcy5vdXRwdXRFcnJvciwgdGhpcy5vdXQuY29sdW1ucykpO1xuICAgICAgdGhpcy5vdXQud3JpdGUoY2xlYXIodGhpcy5vdXRwdXRUZXh0LCB0aGlzLm91dC5jb2x1bW5zKSk7XG4gICAgfVxuXG4gICAgc3VwZXIucmVuZGVyKCk7XG4gICAgdGhpcy5vdXRwdXRFcnJvciA9ICcnOyAvLyBQcmludCBwcm9tcHRcblxuICAgIHRoaXMub3V0cHV0VGV4dCA9IFtzdHlsZS5zeW1ib2wodGhpcy5kb25lLCB0aGlzLmFib3J0ZWQpLCBjb2xvci5ib2xkKHRoaXMubXNnKSwgc3R5bGUuZGVsaW1pdGVyKHRoaXMuZG9uZSksICF0aGlzLmRvbmUgfHwgIXRoaXMuZG9uZSAmJiAhdGhpcy5wbGFjZWhvbGRlciA/IGNvbG9yW3RoaXMuY29sb3JdKCkudW5kZXJsaW5lKHRoaXMucmVuZGVyZWQpIDogdGhpcy5yZW5kZXJlZF0uam9pbihgIGApOyAvLyBQcmludCBlcnJvclxuXG4gICAgaWYgKHRoaXMuZXJyb3IpIHtcbiAgICAgIHRoaXMub3V0cHV0RXJyb3IgKz0gdGhpcy5lcnJvck1zZy5zcGxpdChgXFxuYCkucmVkdWNlKChhLCBsLCBpKSA9PiBhICsgYFxcbiR7aSA/IGAgYCA6IGZpZ3VyZXMucG9pbnRlclNtYWxsfSAke2NvbG9yLnJlZCgpLml0YWxpYyhsKX1gLCBgYCk7XG4gICAgfVxuXG4gICAgdGhpcy5vdXQud3JpdGUoZXJhc2UubGluZSArIGN1cnNvci50bygwKSArIHRoaXMub3V0cHV0VGV4dCArIGN1cnNvci5zYXZlICsgdGhpcy5vdXRwdXRFcnJvciArIGN1cnNvci5yZXN0b3JlKTtcbiAgfVxuXG59XG5cbm1vZHVsZS5leHBvcnRzID0gTnVtYmVyUHJvbXB0OyIsIid1c2Ugc3RyaWN0JztcblxuY29uc3QgY29sb3IgPSByZXF1aXJlKCdrbGV1cicpO1xuXG5jb25zdCBfcmVxdWlyZSA9IHJlcXVpcmUoJ3Npc3RlcmFuc2knKSxcbiAgICAgIGN1cnNvciA9IF9yZXF1aXJlLmN1cnNvcjtcblxuY29uc3QgUHJvbXB0ID0gcmVxdWlyZSgnLi9wcm9tcHQnKTtcblxuY29uc3QgX3JlcXVpcmUyID0gcmVxdWlyZSgnLi4vdXRpbCcpLFxuICAgICAgY2xlYXIgPSBfcmVxdWlyZTIuY2xlYXIsXG4gICAgICBmaWd1cmVzID0gX3JlcXVpcmUyLmZpZ3VyZXMsXG4gICAgICBzdHlsZSA9IF9yZXF1aXJlMi5zdHlsZSxcbiAgICAgIHdyYXAgPSBfcmVxdWlyZTIud3JhcCxcbiAgICAgIGVudHJpZXNUb0Rpc3BsYXkgPSBfcmVxdWlyZTIuZW50cmllc1RvRGlzcGxheTtcbi8qKlxuICogTXVsdGlzZWxlY3RQcm9tcHQgQmFzZSBFbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyBPcHRpb25zXG4gKiBAcGFyYW0ge1N0cmluZ30gb3B0cy5tZXNzYWdlIE1lc3NhZ2VcbiAqIEBwYXJhbSB7QXJyYXl9IG9wdHMuY2hvaWNlcyBBcnJheSBvZiBjaG9pY2Ugb2JqZWN0c1xuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLmhpbnRdIEhpbnQgdG8gZGlzcGxheVxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLndhcm5dIEhpbnQgc2hvd24gZm9yIGRpc2FibGVkIGNob2ljZXNcbiAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0cy5tYXhdIE1heCBjaG9pY2VzXG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMuY3Vyc29yPTBdIEN1cnNvciBzdGFydCBwb3NpdGlvblxuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLm9wdGlvbnNQZXJQYWdlPTEwXSBNYXggb3B0aW9ucyB0byBkaXNwbGF5IGF0IG9uY2VcbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICovXG5cblxuY2xhc3MgTXVsdGlzZWxlY3RQcm9tcHQgZXh0ZW5kcyBQcm9tcHQge1xuICBjb25zdHJ1Y3RvcihvcHRzID0ge30pIHtcbiAgICBzdXBlcihvcHRzKTtcbiAgICB0aGlzLm1zZyA9IG9wdHMubWVzc2FnZTtcbiAgICB0aGlzLmN1cnNvciA9IG9wdHMuY3Vyc29yIHx8IDA7XG4gICAgdGhpcy5zY3JvbGxJbmRleCA9IG9wdHMuY3Vyc29yIHx8IDA7XG4gICAgdGhpcy5oaW50ID0gb3B0cy5oaW50IHx8ICcnO1xuICAgIHRoaXMud2FybiA9IG9wdHMud2FybiB8fCAnLSBUaGlzIG9wdGlvbiBpcyBkaXNhYmxlZCAtJztcbiAgICB0aGlzLm1pblNlbGVjdGVkID0gb3B0cy5taW47XG4gICAgdGhpcy5zaG93TWluRXJyb3IgPSBmYWxzZTtcbiAgICB0aGlzLm1heENob2ljZXMgPSBvcHRzLm1heDtcbiAgICB0aGlzLmluc3RydWN0aW9ucyA9IG9wdHMuaW5zdHJ1Y3Rpb25zO1xuICAgIHRoaXMub3B0aW9uc1BlclBhZ2UgPSBvcHRzLm9wdGlvbnNQZXJQYWdlIHx8IDEwO1xuICAgIHRoaXMudmFsdWUgPSBvcHRzLmNob2ljZXMubWFwKChjaCwgaWR4KSA9PiB7XG4gICAgICBpZiAodHlwZW9mIGNoID09PSAnc3RyaW5nJykgY2ggPSB7XG4gICAgICAgIHRpdGxlOiBjaCxcbiAgICAgICAgdmFsdWU6IGlkeFxuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRpdGxlOiBjaCAmJiAoY2gudGl0bGUgfHwgY2gudmFsdWUgfHwgY2gpLFxuICAgICAgICBkZXNjcmlwdGlvbjogY2ggJiYgY2guZGVzY3JpcHRpb24sXG4gICAgICAgIHZhbHVlOiBjaCAmJiAoY2gudmFsdWUgPT09IHVuZGVmaW5lZCA/IGlkeCA6IGNoLnZhbHVlKSxcbiAgICAgICAgc2VsZWN0ZWQ6IGNoICYmIGNoLnNlbGVjdGVkLFxuICAgICAgICBkaXNhYmxlZDogY2ggJiYgY2guZGlzYWJsZWRcbiAgICAgIH07XG4gICAgfSk7XG4gICAgdGhpcy5jbGVhciA9IGNsZWFyKCcnLCB0aGlzLm91dC5jb2x1bW5zKTtcblxuICAgIGlmICghb3B0cy5vdmVycmlkZVJlbmRlcikge1xuICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICB9XG4gIH1cblxuICByZXNldCgpIHtcbiAgICB0aGlzLnZhbHVlLm1hcCh2ID0+ICF2LnNlbGVjdGVkKTtcbiAgICB0aGlzLmN1cnNvciA9IDA7XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHNlbGVjdGVkKCkge1xuICAgIHJldHVybiB0aGlzLnZhbHVlLmZpbHRlcih2ID0+IHYuc2VsZWN0ZWQpO1xuICB9XG5cbiAgZXhpdCgpIHtcbiAgICB0aGlzLmFib3J0KCk7XG4gIH1cblxuICBhYm9ydCgpIHtcbiAgICB0aGlzLmRvbmUgPSB0aGlzLmFib3J0ZWQgPSB0cnVlO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gICAgdGhpcy5vdXQud3JpdGUoJ1xcbicpO1xuICAgIHRoaXMuY2xvc2UoKTtcbiAgfVxuXG4gIHN1Ym1pdCgpIHtcbiAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMudmFsdWUuZmlsdGVyKGUgPT4gZS5zZWxlY3RlZCk7XG5cbiAgICBpZiAodGhpcy5taW5TZWxlY3RlZCAmJiBzZWxlY3RlZC5sZW5ndGggPCB0aGlzLm1pblNlbGVjdGVkKSB7XG4gICAgICB0aGlzLnNob3dNaW5FcnJvciA9IHRydWU7XG4gICAgICB0aGlzLnJlbmRlcigpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRvbmUgPSB0cnVlO1xuICAgICAgdGhpcy5hYm9ydGVkID0gZmFsc2U7XG4gICAgICB0aGlzLmZpcmUoKTtcbiAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgICB0aGlzLm91dC53cml0ZSgnXFxuJyk7XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfVxuICB9XG5cbiAgZmlyc3QoKSB7XG4gICAgdGhpcy5jdXJzb3IgPSAwO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBsYXN0KCkge1xuICAgIHRoaXMuY3Vyc29yID0gdGhpcy52YWx1ZS5sZW5ndGggLSAxO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBuZXh0KCkge1xuICAgIHRoaXMuY3Vyc29yID0gKHRoaXMuY3Vyc29yICsgMSkgJSB0aGlzLnZhbHVlLmxlbmd0aDtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgdXAoKSB7XG4gICAgaWYgKHRoaXMuY3Vyc29yID09PSAwKSB7XG4gICAgICB0aGlzLmN1cnNvciA9IHRoaXMudmFsdWUubGVuZ3RoIC0gMTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jdXJzb3ItLTtcbiAgICB9XG5cbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZG93bigpIHtcbiAgICBpZiAodGhpcy5jdXJzb3IgPT09IHRoaXMudmFsdWUubGVuZ3RoIC0gMSkge1xuICAgICAgdGhpcy5jdXJzb3IgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmN1cnNvcisrO1xuICAgIH1cblxuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBsZWZ0KCkge1xuICAgIHRoaXMudmFsdWVbdGhpcy5jdXJzb3JdLnNlbGVjdGVkID0gZmFsc2U7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHJpZ2h0KCkge1xuICAgIGlmICh0aGlzLnZhbHVlLmZpbHRlcihlID0+IGUuc2VsZWN0ZWQpLmxlbmd0aCA+PSB0aGlzLm1heENob2ljZXMpIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgICB0aGlzLnZhbHVlW3RoaXMuY3Vyc29yXS5zZWxlY3RlZCA9IHRydWU7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIGhhbmRsZVNwYWNlVG9nZ2xlKCkge1xuICAgIGNvbnN0IHYgPSB0aGlzLnZhbHVlW3RoaXMuY3Vyc29yXTtcblxuICAgIGlmICh2LnNlbGVjdGVkKSB7XG4gICAgICB2LnNlbGVjdGVkID0gZmFsc2U7XG4gICAgICB0aGlzLnJlbmRlcigpO1xuICAgIH0gZWxzZSBpZiAodi5kaXNhYmxlZCB8fCB0aGlzLnZhbHVlLmZpbHRlcihlID0+IGUuc2VsZWN0ZWQpLmxlbmd0aCA+PSB0aGlzLm1heENob2ljZXMpIHtcbiAgICAgIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdi5zZWxlY3RlZCA9IHRydWU7XG4gICAgICB0aGlzLnJlbmRlcigpO1xuICAgIH1cbiAgfVxuXG4gIHRvZ2dsZUFsbCgpIHtcbiAgICBpZiAodGhpcy5tYXhDaG9pY2VzICE9PSB1bmRlZmluZWQgfHwgdGhpcy52YWx1ZVt0aGlzLmN1cnNvcl0uZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgICB9XG5cbiAgICBjb25zdCBuZXdTZWxlY3RlZCA9ICF0aGlzLnZhbHVlW3RoaXMuY3Vyc29yXS5zZWxlY3RlZDtcbiAgICB0aGlzLnZhbHVlLmZpbHRlcih2ID0+ICF2LmRpc2FibGVkKS5mb3JFYWNoKHYgPT4gdi5zZWxlY3RlZCA9IG5ld1NlbGVjdGVkKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgXyhjLCBrZXkpIHtcbiAgICBpZiAoYyA9PT0gJyAnKSB7XG4gICAgICB0aGlzLmhhbmRsZVNwYWNlVG9nZ2xlKCk7XG4gICAgfSBlbHNlIGlmIChjID09PSAnYScpIHtcbiAgICAgIHRoaXMudG9nZ2xlQWxsKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgICB9XG4gIH1cblxuICByZW5kZXJJbnN0cnVjdGlvbnMoKSB7XG4gICAgaWYgKHRoaXMuaW5zdHJ1Y3Rpb25zID09PSB1bmRlZmluZWQgfHwgdGhpcy5pbnN0cnVjdGlvbnMpIHtcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5pbnN0cnVjdGlvbnMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmluc3RydWN0aW9ucztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuICdcXG5JbnN0cnVjdGlvbnM6XFxuJyArIGAgICAgJHtmaWd1cmVzLmFycm93VXB9LyR7ZmlndXJlcy5hcnJvd0Rvd259OiBIaWdobGlnaHQgb3B0aW9uXFxuYCArIGAgICAgJHtmaWd1cmVzLmFycm93TGVmdH0vJHtmaWd1cmVzLmFycm93UmlnaHR9L1tzcGFjZV06IFRvZ2dsZSBzZWxlY3Rpb25cXG5gICsgKHRoaXMubWF4Q2hvaWNlcyA9PT0gdW5kZWZpbmVkID8gYCAgICBhOiBUb2dnbGUgYWxsXFxuYCA6ICcnKSArIGAgICAgZW50ZXIvcmV0dXJuOiBDb21wbGV0ZSBhbnN3ZXJgO1xuICAgIH1cblxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIHJlbmRlck9wdGlvbihjdXJzb3IsIHYsIGksIGFycm93SW5kaWNhdG9yKSB7XG4gICAgY29uc3QgcHJlZml4ID0gKHYuc2VsZWN0ZWQgPyBjb2xvci5ncmVlbihmaWd1cmVzLnJhZGlvT24pIDogZmlndXJlcy5yYWRpb09mZikgKyAnICcgKyBhcnJvd0luZGljYXRvciArICcgJztcbiAgICBsZXQgdGl0bGUsIGRlc2M7XG5cbiAgICBpZiAodi5kaXNhYmxlZCkge1xuICAgICAgdGl0bGUgPSBjdXJzb3IgPT09IGkgPyBjb2xvci5ncmF5KCkudW5kZXJsaW5lKHYudGl0bGUpIDogY29sb3Iuc3RyaWtldGhyb3VnaCgpLmdyYXkodi50aXRsZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRpdGxlID0gY3Vyc29yID09PSBpID8gY29sb3IuY3lhbigpLnVuZGVybGluZSh2LnRpdGxlKSA6IHYudGl0bGU7XG5cbiAgICAgIGlmIChjdXJzb3IgPT09IGkgJiYgdi5kZXNjcmlwdGlvbikge1xuICAgICAgICBkZXNjID0gYCAtICR7di5kZXNjcmlwdGlvbn1gO1xuXG4gICAgICAgIGlmIChwcmVmaXgubGVuZ3RoICsgdGl0bGUubGVuZ3RoICsgZGVzYy5sZW5ndGggPj0gdGhpcy5vdXQuY29sdW1ucyB8fCB2LmRlc2NyaXB0aW9uLnNwbGl0KC9cXHI/XFxuLykubGVuZ3RoID4gMSkge1xuICAgICAgICAgIGRlc2MgPSAnXFxuJyArIHdyYXAodi5kZXNjcmlwdGlvbiwge1xuICAgICAgICAgICAgbWFyZ2luOiBwcmVmaXgubGVuZ3RoLFxuICAgICAgICAgICAgd2lkdGg6IHRoaXMub3V0LmNvbHVtbnNcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwcmVmaXggKyB0aXRsZSArIGNvbG9yLmdyYXkoZGVzYyB8fCAnJyk7XG4gIH0gLy8gc2hhcmVkIHdpdGggYXV0b2NvbXBsZXRlTXVsdGlzZWxlY3RcblxuXG4gIHBhZ2luYXRlT3B0aW9ucyhvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gY29sb3IucmVkKCdObyBtYXRjaGVzIGZvciB0aGlzIHF1ZXJ5LicpO1xuICAgIH1cblxuICAgIGxldCBfZW50cmllc1RvRGlzcGxheSA9IGVudHJpZXNUb0Rpc3BsYXkodGhpcy5jdXJzb3IsIG9wdGlvbnMubGVuZ3RoLCB0aGlzLm9wdGlvbnNQZXJQYWdlKSxcbiAgICAgICAgc3RhcnRJbmRleCA9IF9lbnRyaWVzVG9EaXNwbGF5LnN0YXJ0SW5kZXgsXG4gICAgICAgIGVuZEluZGV4ID0gX2VudHJpZXNUb0Rpc3BsYXkuZW5kSW5kZXg7XG5cbiAgICBsZXQgcHJlZml4LFxuICAgICAgICBzdHlsZWRPcHRpb25zID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gc3RhcnRJbmRleDsgaSA8IGVuZEluZGV4OyBpKyspIHtcbiAgICAgIGlmIChpID09PSBzdGFydEluZGV4ICYmIHN0YXJ0SW5kZXggPiAwKSB7XG4gICAgICAgIHByZWZpeCA9IGZpZ3VyZXMuYXJyb3dVcDtcbiAgICAgIH0gZWxzZSBpZiAoaSA9PT0gZW5kSW5kZXggLSAxICYmIGVuZEluZGV4IDwgb3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgcHJlZml4ID0gZmlndXJlcy5hcnJvd0Rvd247XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcmVmaXggPSAnICc7XG4gICAgICB9XG5cbiAgICAgIHN0eWxlZE9wdGlvbnMucHVzaCh0aGlzLnJlbmRlck9wdGlvbih0aGlzLmN1cnNvciwgb3B0aW9uc1tpXSwgaSwgcHJlZml4KSk7XG4gICAgfVxuXG4gICAgcmV0dXJuICdcXG4nICsgc3R5bGVkT3B0aW9ucy5qb2luKCdcXG4nKTtcbiAgfSAvLyBzaGFyZWQgd2l0aCBhdXRvY29tbGV0ZU11bHRpc2VsZWN0XG5cblxuICByZW5kZXJPcHRpb25zKG9wdGlvbnMpIHtcbiAgICBpZiAoIXRoaXMuZG9uZSkge1xuICAgICAgcmV0dXJuIHRoaXMucGFnaW5hdGVPcHRpb25zKG9wdGlvbnMpO1xuICAgIH1cblxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIHJlbmRlckRvbmVPckluc3RydWN0aW9ucygpIHtcbiAgICBpZiAodGhpcy5kb25lKSB7XG4gICAgICByZXR1cm4gdGhpcy52YWx1ZS5maWx0ZXIoZSA9PiBlLnNlbGVjdGVkKS5tYXAodiA9PiB2LnRpdGxlKS5qb2luKCcsICcpO1xuICAgIH1cblxuICAgIGNvbnN0IG91dHB1dCA9IFtjb2xvci5ncmF5KHRoaXMuaGludCksIHRoaXMucmVuZGVySW5zdHJ1Y3Rpb25zKCldO1xuXG4gICAgaWYgKHRoaXMudmFsdWVbdGhpcy5jdXJzb3JdLmRpc2FibGVkKSB7XG4gICAgICBvdXRwdXQucHVzaChjb2xvci55ZWxsb3codGhpcy53YXJuKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dHB1dC5qb2luKCcgJyk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgaWYgKHRoaXMuY2xvc2VkKSByZXR1cm47XG4gICAgaWYgKHRoaXMuZmlyc3RSZW5kZXIpIHRoaXMub3V0LndyaXRlKGN1cnNvci5oaWRlKTtcbiAgICBzdXBlci5yZW5kZXIoKTsgLy8gcHJpbnQgcHJvbXB0XG5cbiAgICBsZXQgcHJvbXB0ID0gW3N0eWxlLnN5bWJvbCh0aGlzLmRvbmUsIHRoaXMuYWJvcnRlZCksIGNvbG9yLmJvbGQodGhpcy5tc2cpLCBzdHlsZS5kZWxpbWl0ZXIoZmFsc2UpLCB0aGlzLnJlbmRlckRvbmVPckluc3RydWN0aW9ucygpXS5qb2luKCcgJyk7XG5cbiAgICBpZiAodGhpcy5zaG93TWluRXJyb3IpIHtcbiAgICAgIHByb21wdCArPSBjb2xvci5yZWQoYFlvdSBtdXN0IHNlbGVjdCBhIG1pbmltdW0gb2YgJHt0aGlzLm1pblNlbGVjdGVkfSBjaG9pY2VzLmApO1xuICAgICAgdGhpcy5zaG93TWluRXJyb3IgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBwcm9tcHQgKz0gdGhpcy5yZW5kZXJPcHRpb25zKHRoaXMudmFsdWUpO1xuICAgIHRoaXMub3V0LndyaXRlKHRoaXMuY2xlYXIgKyBwcm9tcHQpO1xuICAgIHRoaXMuY2xlYXIgPSBjbGVhcihwcm9tcHQsIHRoaXMub3V0LmNvbHVtbnMpO1xuICB9XG5cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBNdWx0aXNlbGVjdFByb21wdDsiLCIndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywga2V5LCBhcmcpIHsgdHJ5IHsgdmFyIGluZm8gPSBnZW5ba2V5XShhcmcpOyB2YXIgdmFsdWUgPSBpbmZvLnZhbHVlOyB9IGNhdGNoIChlcnJvcikgeyByZWplY3QoZXJyb3IpOyByZXR1cm47IH0gaWYgKGluZm8uZG9uZSkgeyByZXNvbHZlKHZhbHVlKTsgfSBlbHNlIHsgUHJvbWlzZS5yZXNvbHZlKHZhbHVlKS50aGVuKF9uZXh0LCBfdGhyb3cpOyB9IH1cblxuZnVuY3Rpb24gX2FzeW5jVG9HZW5lcmF0b3IoZm4pIHsgcmV0dXJuIGZ1bmN0aW9uICgpIHsgdmFyIHNlbGYgPSB0aGlzLCBhcmdzID0gYXJndW1lbnRzOyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2YXIgZ2VuID0gZm4uYXBwbHkoc2VsZiwgYXJncyk7IGZ1bmN0aW9uIF9uZXh0KHZhbHVlKSB7IGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJuZXh0XCIsIHZhbHVlKTsgfSBmdW5jdGlvbiBfdGhyb3coZXJyKSB7IGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJ0aHJvd1wiLCBlcnIpOyB9IF9uZXh0KHVuZGVmaW5lZCk7IH0pOyB9OyB9XG5cbmNvbnN0IGNvbG9yID0gcmVxdWlyZSgna2xldXInKTtcblxuY29uc3QgUHJvbXB0ID0gcmVxdWlyZSgnLi9wcm9tcHQnKTtcblxuY29uc3QgX3JlcXVpcmUgPSByZXF1aXJlKCdzaXN0ZXJhbnNpJyksXG4gICAgICBlcmFzZSA9IF9yZXF1aXJlLmVyYXNlLFxuICAgICAgY3Vyc29yID0gX3JlcXVpcmUuY3Vyc29yO1xuXG5jb25zdCBfcmVxdWlyZTIgPSByZXF1aXJlKCcuLi91dGlsJyksXG4gICAgICBzdHlsZSA9IF9yZXF1aXJlMi5zdHlsZSxcbiAgICAgIGNsZWFyID0gX3JlcXVpcmUyLmNsZWFyLFxuICAgICAgZmlndXJlcyA9IF9yZXF1aXJlMi5maWd1cmVzLFxuICAgICAgd3JhcCA9IF9yZXF1aXJlMi53cmFwLFxuICAgICAgZW50cmllc1RvRGlzcGxheSA9IF9yZXF1aXJlMi5lbnRyaWVzVG9EaXNwbGF5O1xuXG5jb25zdCBnZXRWYWwgPSAoYXJyLCBpKSA9PiBhcnJbaV0gJiYgKGFycltpXS52YWx1ZSB8fCBhcnJbaV0udGl0bGUgfHwgYXJyW2ldKTtcblxuY29uc3QgZ2V0VGl0bGUgPSAoYXJyLCBpKSA9PiBhcnJbaV0gJiYgKGFycltpXS50aXRsZSB8fCBhcnJbaV0udmFsdWUgfHwgYXJyW2ldKTtcblxuY29uc3QgZ2V0SW5kZXggPSAoYXJyLCB2YWxPclRpdGxlKSA9PiB7XG4gIGNvbnN0IGluZGV4ID0gYXJyLmZpbmRJbmRleChlbCA9PiBlbC52YWx1ZSA9PT0gdmFsT3JUaXRsZSB8fCBlbC50aXRsZSA9PT0gdmFsT3JUaXRsZSk7XG4gIHJldHVybiBpbmRleCA+IC0xID8gaW5kZXggOiB1bmRlZmluZWQ7XG59O1xuLyoqXG4gKiBUZXh0UHJvbXB0IEJhc2UgRWxlbWVudFxuICogQHBhcmFtIHtPYmplY3R9IG9wdHMgT3B0aW9uc1xuICogQHBhcmFtIHtTdHJpbmd9IG9wdHMubWVzc2FnZSBNZXNzYWdlXG4gKiBAcGFyYW0ge0FycmF5fSBvcHRzLmNob2ljZXMgQXJyYXkgb2YgYXV0by1jb21wbGV0ZSBjaG9pY2VzIG9iamVjdHNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRzLnN1Z2dlc3RdIEZpbHRlciBmdW5jdGlvbi4gRGVmYXVsdHMgdG8gc29ydCBieSB0aXRsZVxuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLmxpbWl0PTEwXSBNYXggbnVtYmVyIG9mIHJlc3VsdHMgdG8gc2hvd1xuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLmN1cnNvcj0wXSBDdXJzb3Igc3RhcnQgcG9zaXRpb25cbiAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5zdHlsZT0nZGVmYXVsdCddIFJlbmRlciBzdHlsZVxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLmZhbGxiYWNrXSBGYWxsYmFjayBtZXNzYWdlIC0gaW5pdGlhbCB0byBkZWZhdWx0IHZhbHVlXG4gKiBAcGFyYW0ge1N0cmluZ30gW29wdHMuaW5pdGlhbF0gSW5kZXggb2YgdGhlIGRlZmF1bHQgdmFsdWVcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdHMuY2xlYXJGaXJzdF0gVGhlIGZpcnN0IEVTQ0FQRSBrZXlwcmVzcyB3aWxsIGNsZWFyIHRoZSBpbnB1dFxuICogQHBhcmFtIHtTdHJlYW19IFtvcHRzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFtvcHRzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKiBAcGFyYW0ge1N0cmluZ30gW29wdHMubm9NYXRjaGVzXSBUaGUgbm8gbWF0Y2hlcyBmb3VuZCBsYWJlbFxuICovXG5cblxuY2xhc3MgQXV0b2NvbXBsZXRlUHJvbXB0IGV4dGVuZHMgUHJvbXB0IHtcbiAgY29uc3RydWN0b3Iob3B0cyA9IHt9KSB7XG4gICAgc3VwZXIob3B0cyk7XG4gICAgdGhpcy5tc2cgPSBvcHRzLm1lc3NhZ2U7XG4gICAgdGhpcy5zdWdnZXN0ID0gb3B0cy5zdWdnZXN0O1xuICAgIHRoaXMuY2hvaWNlcyA9IG9wdHMuY2hvaWNlcztcbiAgICB0aGlzLmluaXRpYWwgPSB0eXBlb2Ygb3B0cy5pbml0aWFsID09PSAnbnVtYmVyJyA/IG9wdHMuaW5pdGlhbCA6IGdldEluZGV4KG9wdHMuY2hvaWNlcywgb3B0cy5pbml0aWFsKTtcbiAgICB0aGlzLnNlbGVjdCA9IHRoaXMuaW5pdGlhbCB8fCBvcHRzLmN1cnNvciB8fCAwO1xuICAgIHRoaXMuaTE4biA9IHtcbiAgICAgIG5vTWF0Y2hlczogb3B0cy5ub01hdGNoZXMgfHwgJ25vIG1hdGNoZXMgZm91bmQnXG4gICAgfTtcbiAgICB0aGlzLmZhbGxiYWNrID0gb3B0cy5mYWxsYmFjayB8fCB0aGlzLmluaXRpYWw7XG4gICAgdGhpcy5jbGVhckZpcnN0ID0gb3B0cy5jbGVhckZpcnN0IHx8IGZhbHNlO1xuICAgIHRoaXMuc3VnZ2VzdGlvbnMgPSBbXTtcbiAgICB0aGlzLmlucHV0ID0gJyc7XG4gICAgdGhpcy5saW1pdCA9IG9wdHMubGltaXQgfHwgMTA7XG4gICAgdGhpcy5jdXJzb3IgPSAwO1xuICAgIHRoaXMudHJhbnNmb3JtID0gc3R5bGUucmVuZGVyKG9wdHMuc3R5bGUpO1xuICAgIHRoaXMuc2NhbGUgPSB0aGlzLnRyYW5zZm9ybS5zY2FsZTtcbiAgICB0aGlzLnJlbmRlciA9IHRoaXMucmVuZGVyLmJpbmQodGhpcyk7XG4gICAgdGhpcy5jb21wbGV0ZSA9IHRoaXMuY29tcGxldGUuYmluZCh0aGlzKTtcbiAgICB0aGlzLmNsZWFyID0gY2xlYXIoJycsIHRoaXMub3V0LmNvbHVtbnMpO1xuICAgIHRoaXMuY29tcGxldGUodGhpcy5yZW5kZXIpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBzZXQgZmFsbGJhY2soZmIpIHtcbiAgICB0aGlzLl9mYiA9IE51bWJlci5pc1NhZmVJbnRlZ2VyKHBhcnNlSW50KGZiKSkgPyBwYXJzZUludChmYikgOiBmYjtcbiAgfVxuXG4gIGdldCBmYWxsYmFjaygpIHtcbiAgICBsZXQgY2hvaWNlO1xuICAgIGlmICh0eXBlb2YgdGhpcy5fZmIgPT09ICdudW1iZXInKSBjaG9pY2UgPSB0aGlzLmNob2ljZXNbdGhpcy5fZmJdO2Vsc2UgaWYgKHR5cGVvZiB0aGlzLl9mYiA9PT0gJ3N0cmluZycpIGNob2ljZSA9IHtcbiAgICAgIHRpdGxlOiB0aGlzLl9mYlxuICAgIH07XG4gICAgcmV0dXJuIGNob2ljZSB8fCB0aGlzLl9mYiB8fCB7XG4gICAgICB0aXRsZTogdGhpcy5pMThuLm5vTWF0Y2hlc1xuICAgIH07XG4gIH1cblxuICBtb3ZlU2VsZWN0KGkpIHtcbiAgICB0aGlzLnNlbGVjdCA9IGk7XG4gICAgaWYgKHRoaXMuc3VnZ2VzdGlvbnMubGVuZ3RoID4gMCkgdGhpcy52YWx1ZSA9IGdldFZhbCh0aGlzLnN1Z2dlc3Rpb25zLCBpKTtlbHNlIHRoaXMudmFsdWUgPSB0aGlzLmZhbGxiYWNrLnZhbHVlO1xuICAgIHRoaXMuZmlyZSgpO1xuICB9XG5cbiAgY29tcGxldGUoY2IpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgcmV0dXJuIF9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKiAoKSB7XG4gICAgICBjb25zdCBwID0gX3RoaXMuY29tcGxldGluZyA9IF90aGlzLnN1Z2dlc3QoX3RoaXMuaW5wdXQsIF90aGlzLmNob2ljZXMpO1xuXG4gICAgICBjb25zdCBzdWdnZXN0aW9ucyA9IHlpZWxkIHA7XG4gICAgICBpZiAoX3RoaXMuY29tcGxldGluZyAhPT0gcCkgcmV0dXJuO1xuICAgICAgX3RoaXMuc3VnZ2VzdGlvbnMgPSBzdWdnZXN0aW9ucy5tYXAoKHMsIGksIGFycikgPT4gKHtcbiAgICAgICAgdGl0bGU6IGdldFRpdGxlKGFyciwgaSksXG4gICAgICAgIHZhbHVlOiBnZXRWYWwoYXJyLCBpKSxcbiAgICAgICAgZGVzY3JpcHRpb246IHMuZGVzY3JpcHRpb25cbiAgICAgIH0pKTtcbiAgICAgIF90aGlzLmNvbXBsZXRpbmcgPSBmYWxzZTtcbiAgICAgIGNvbnN0IGwgPSBNYXRoLm1heChzdWdnZXN0aW9ucy5sZW5ndGggLSAxLCAwKTtcblxuICAgICAgX3RoaXMubW92ZVNlbGVjdChNYXRoLm1pbihsLCBfdGhpcy5zZWxlY3QpKTtcblxuICAgICAgY2IgJiYgY2IoKTtcbiAgICB9KSgpO1xuICB9XG5cbiAgcmVzZXQoKSB7XG4gICAgdGhpcy5pbnB1dCA9ICcnO1xuICAgIHRoaXMuY29tcGxldGUoKCkgPT4ge1xuICAgICAgdGhpcy5tb3ZlU2VsZWN0KHRoaXMuaW5pdGlhbCAhPT0gdm9pZCAwID8gdGhpcy5pbml0aWFsIDogMCk7XG4gICAgICB0aGlzLnJlbmRlcigpO1xuICAgIH0pO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBleGl0KCkge1xuICAgIGlmICh0aGlzLmNsZWFyRmlyc3QgJiYgdGhpcy5pbnB1dC5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnJlc2V0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZG9uZSA9IHRoaXMuZXhpdGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMuYWJvcnRlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5maXJlKCk7XG4gICAgICB0aGlzLnJlbmRlcigpO1xuICAgICAgdGhpcy5vdXQud3JpdGUoJ1xcbicpO1xuICAgICAgdGhpcy5jbG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIGFib3J0KCkge1xuICAgIHRoaXMuZG9uZSA9IHRoaXMuYWJvcnRlZCA9IHRydWU7XG4gICAgdGhpcy5leGl0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICAgIHRoaXMub3V0LndyaXRlKCdcXG4nKTtcbiAgICB0aGlzLmNsb3NlKCk7XG4gIH1cblxuICBzdWJtaXQoKSB7XG4gICAgdGhpcy5kb25lID0gdHJ1ZTtcbiAgICB0aGlzLmFib3J0ZWQgPSB0aGlzLmV4aXRlZCA9IGZhbHNlO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gICAgdGhpcy5vdXQud3JpdGUoJ1xcbicpO1xuICAgIHRoaXMuY2xvc2UoKTtcbiAgfVxuXG4gIF8oYywga2V5KSB7XG4gICAgbGV0IHMxID0gdGhpcy5pbnB1dC5zbGljZSgwLCB0aGlzLmN1cnNvcik7XG4gICAgbGV0IHMyID0gdGhpcy5pbnB1dC5zbGljZSh0aGlzLmN1cnNvcik7XG4gICAgdGhpcy5pbnB1dCA9IGAke3MxfSR7Y30ke3MyfWA7XG4gICAgdGhpcy5jdXJzb3IgPSBzMS5sZW5ndGggKyAxO1xuICAgIHRoaXMuY29tcGxldGUodGhpcy5yZW5kZXIpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBkZWxldGUoKSB7XG4gICAgaWYgKHRoaXMuY3Vyc29yID09PSAwKSByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgbGV0IHMxID0gdGhpcy5pbnB1dC5zbGljZSgwLCB0aGlzLmN1cnNvciAtIDEpO1xuICAgIGxldCBzMiA9IHRoaXMuaW5wdXQuc2xpY2UodGhpcy5jdXJzb3IpO1xuICAgIHRoaXMuaW5wdXQgPSBgJHtzMX0ke3MyfWA7XG4gICAgdGhpcy5jb21wbGV0ZSh0aGlzLnJlbmRlcik7XG4gICAgdGhpcy5jdXJzb3IgPSB0aGlzLmN1cnNvciAtIDE7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIGRlbGV0ZUZvcndhcmQoKSB7XG4gICAgaWYgKHRoaXMuY3Vyc29yICogdGhpcy5zY2FsZSA+PSB0aGlzLnJlbmRlcmVkLmxlbmd0aCkgcmV0dXJuIHRoaXMuYmVsbCgpO1xuICAgIGxldCBzMSA9IHRoaXMuaW5wdXQuc2xpY2UoMCwgdGhpcy5jdXJzb3IpO1xuICAgIGxldCBzMiA9IHRoaXMuaW5wdXQuc2xpY2UodGhpcy5jdXJzb3IgKyAxKTtcbiAgICB0aGlzLmlucHV0ID0gYCR7czF9JHtzMn1gO1xuICAgIHRoaXMuY29tcGxldGUodGhpcy5yZW5kZXIpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBmaXJzdCgpIHtcbiAgICB0aGlzLm1vdmVTZWxlY3QoMCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIGxhc3QoKSB7XG4gICAgdGhpcy5tb3ZlU2VsZWN0KHRoaXMuc3VnZ2VzdGlvbnMubGVuZ3RoIC0gMSk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHVwKCkge1xuICAgIGlmICh0aGlzLnNlbGVjdCA9PT0gMCkge1xuICAgICAgdGhpcy5tb3ZlU2VsZWN0KHRoaXMuc3VnZ2VzdGlvbnMubGVuZ3RoIC0gMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubW92ZVNlbGVjdCh0aGlzLnNlbGVjdCAtIDEpO1xuICAgIH1cblxuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBkb3duKCkge1xuICAgIGlmICh0aGlzLnNlbGVjdCA9PT0gdGhpcy5zdWdnZXN0aW9ucy5sZW5ndGggLSAxKSB7XG4gICAgICB0aGlzLm1vdmVTZWxlY3QoMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubW92ZVNlbGVjdCh0aGlzLnNlbGVjdCArIDEpO1xuICAgIH1cblxuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBuZXh0KCkge1xuICAgIGlmICh0aGlzLnNlbGVjdCA9PT0gdGhpcy5zdWdnZXN0aW9ucy5sZW5ndGggLSAxKSB7XG4gICAgICB0aGlzLm1vdmVTZWxlY3QoMCk7XG4gICAgfSBlbHNlIHRoaXMubW92ZVNlbGVjdCh0aGlzLnNlbGVjdCArIDEpO1xuXG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIG5leHRQYWdlKCkge1xuICAgIHRoaXMubW92ZVNlbGVjdChNYXRoLm1pbih0aGlzLnNlbGVjdCArIHRoaXMubGltaXQsIHRoaXMuc3VnZ2VzdGlvbnMubGVuZ3RoIC0gMSkpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBwcmV2UGFnZSgpIHtcbiAgICB0aGlzLm1vdmVTZWxlY3QoTWF0aC5tYXgodGhpcy5zZWxlY3QgLSB0aGlzLmxpbWl0LCAwKSk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIGxlZnQoKSB7XG4gICAgaWYgKHRoaXMuY3Vyc29yIDw9IDApIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgICB0aGlzLmN1cnNvciA9IHRoaXMuY3Vyc29yIC0gMTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgcmlnaHQoKSB7XG4gICAgaWYgKHRoaXMuY3Vyc29yICogdGhpcy5zY2FsZSA+PSB0aGlzLnJlbmRlcmVkLmxlbmd0aCkgcmV0dXJuIHRoaXMuYmVsbCgpO1xuICAgIHRoaXMuY3Vyc29yID0gdGhpcy5jdXJzb3IgKyAxO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICByZW5kZXJPcHRpb24odiwgaG92ZXJlZCwgaXNTdGFydCwgaXNFbmQpIHtcbiAgICBsZXQgZGVzYztcbiAgICBsZXQgcHJlZml4ID0gaXNTdGFydCA/IGZpZ3VyZXMuYXJyb3dVcCA6IGlzRW5kID8gZmlndXJlcy5hcnJvd0Rvd24gOiAnICc7XG4gICAgbGV0IHRpdGxlID0gaG92ZXJlZCA/IGNvbG9yLmN5YW4oKS51bmRlcmxpbmUodi50aXRsZSkgOiB2LnRpdGxlO1xuICAgIHByZWZpeCA9IChob3ZlcmVkID8gY29sb3IuY3lhbihmaWd1cmVzLnBvaW50ZXIpICsgJyAnIDogJyAgJykgKyBwcmVmaXg7XG5cbiAgICBpZiAodi5kZXNjcmlwdGlvbikge1xuICAgICAgZGVzYyA9IGAgLSAke3YuZGVzY3JpcHRpb259YDtcblxuICAgICAgaWYgKHByZWZpeC5sZW5ndGggKyB0aXRsZS5sZW5ndGggKyBkZXNjLmxlbmd0aCA+PSB0aGlzLm91dC5jb2x1bW5zIHx8IHYuZGVzY3JpcHRpb24uc3BsaXQoL1xccj9cXG4vKS5sZW5ndGggPiAxKSB7XG4gICAgICAgIGRlc2MgPSAnXFxuJyArIHdyYXAodi5kZXNjcmlwdGlvbiwge1xuICAgICAgICAgIG1hcmdpbjogMyxcbiAgICAgICAgICB3aWR0aDogdGhpcy5vdXQuY29sdW1uc1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcHJlZml4ICsgJyAnICsgdGl0bGUgKyBjb2xvci5ncmF5KGRlc2MgfHwgJycpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGlmICh0aGlzLmNsb3NlZCkgcmV0dXJuO1xuICAgIGlmICh0aGlzLmZpcnN0UmVuZGVyKSB0aGlzLm91dC53cml0ZShjdXJzb3IuaGlkZSk7ZWxzZSB0aGlzLm91dC53cml0ZShjbGVhcih0aGlzLm91dHB1dFRleHQsIHRoaXMub3V0LmNvbHVtbnMpKTtcbiAgICBzdXBlci5yZW5kZXIoKTtcblxuICAgIGxldCBfZW50cmllc1RvRGlzcGxheSA9IGVudHJpZXNUb0Rpc3BsYXkodGhpcy5zZWxlY3QsIHRoaXMuY2hvaWNlcy5sZW5ndGgsIHRoaXMubGltaXQpLFxuICAgICAgICBzdGFydEluZGV4ID0gX2VudHJpZXNUb0Rpc3BsYXkuc3RhcnRJbmRleCxcbiAgICAgICAgZW5kSW5kZXggPSBfZW50cmllc1RvRGlzcGxheS5lbmRJbmRleDtcblxuICAgIHRoaXMub3V0cHV0VGV4dCA9IFtzdHlsZS5zeW1ib2wodGhpcy5kb25lLCB0aGlzLmFib3J0ZWQsIHRoaXMuZXhpdGVkKSwgY29sb3IuYm9sZCh0aGlzLm1zZyksIHN0eWxlLmRlbGltaXRlcih0aGlzLmNvbXBsZXRpbmcpLCB0aGlzLmRvbmUgJiYgdGhpcy5zdWdnZXN0aW9uc1t0aGlzLnNlbGVjdF0gPyB0aGlzLnN1Z2dlc3Rpb25zW3RoaXMuc2VsZWN0XS50aXRsZSA6IHRoaXMucmVuZGVyZWQgPSB0aGlzLnRyYW5zZm9ybS5yZW5kZXIodGhpcy5pbnB1dCldLmpvaW4oJyAnKTtcblxuICAgIGlmICghdGhpcy5kb25lKSB7XG4gICAgICBjb25zdCBzdWdnZXN0aW9ucyA9IHRoaXMuc3VnZ2VzdGlvbnMuc2xpY2Uoc3RhcnRJbmRleCwgZW5kSW5kZXgpLm1hcCgoaXRlbSwgaSkgPT4gdGhpcy5yZW5kZXJPcHRpb24oaXRlbSwgdGhpcy5zZWxlY3QgPT09IGkgKyBzdGFydEluZGV4LCBpID09PSAwICYmIHN0YXJ0SW5kZXggPiAwLCBpICsgc3RhcnRJbmRleCA9PT0gZW5kSW5kZXggLSAxICYmIGVuZEluZGV4IDwgdGhpcy5jaG9pY2VzLmxlbmd0aCkpLmpvaW4oJ1xcbicpO1xuICAgICAgdGhpcy5vdXRwdXRUZXh0ICs9IGBcXG5gICsgKHN1Z2dlc3Rpb25zIHx8IGNvbG9yLmdyYXkodGhpcy5mYWxsYmFjay50aXRsZSkpO1xuICAgIH1cblxuICAgIHRoaXMub3V0LndyaXRlKGVyYXNlLmxpbmUgKyBjdXJzb3IudG8oMCkgKyB0aGlzLm91dHB1dFRleHQpO1xuICB9XG5cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBBdXRvY29tcGxldGVQcm9tcHQ7IiwiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBjb2xvciA9IHJlcXVpcmUoJ2tsZXVyJyk7XG5cbmNvbnN0IF9yZXF1aXJlID0gcmVxdWlyZSgnc2lzdGVyYW5zaScpLFxuICAgICAgY3Vyc29yID0gX3JlcXVpcmUuY3Vyc29yO1xuXG5jb25zdCBNdWx0aXNlbGVjdFByb21wdCA9IHJlcXVpcmUoJy4vbXVsdGlzZWxlY3QnKTtcblxuY29uc3QgX3JlcXVpcmUyID0gcmVxdWlyZSgnLi4vdXRpbCcpLFxuICAgICAgY2xlYXIgPSBfcmVxdWlyZTIuY2xlYXIsXG4gICAgICBzdHlsZSA9IF9yZXF1aXJlMi5zdHlsZSxcbiAgICAgIGZpZ3VyZXMgPSBfcmVxdWlyZTIuZmlndXJlcztcbi8qKlxuICogTXVsdGlzZWxlY3RQcm9tcHQgQmFzZSBFbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyBPcHRpb25zXG4gKiBAcGFyYW0ge1N0cmluZ30gb3B0cy5tZXNzYWdlIE1lc3NhZ2VcbiAqIEBwYXJhbSB7QXJyYXl9IG9wdHMuY2hvaWNlcyBBcnJheSBvZiBjaG9pY2Ugb2JqZWN0c1xuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLmhpbnRdIEhpbnQgdG8gZGlzcGxheVxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLndhcm5dIEhpbnQgc2hvd24gZm9yIGRpc2FibGVkIGNob2ljZXNcbiAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0cy5tYXhdIE1heCBjaG9pY2VzXG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMuY3Vyc29yPTBdIEN1cnNvciBzdGFydCBwb3NpdGlvblxuICogQHBhcmFtIHtTdHJlYW19IFtvcHRzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFtvcHRzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKi9cblxuXG5jbGFzcyBBdXRvY29tcGxldGVNdWx0aXNlbGVjdFByb21wdCBleHRlbmRzIE11bHRpc2VsZWN0UHJvbXB0IHtcbiAgY29uc3RydWN0b3Iob3B0cyA9IHt9KSB7XG4gICAgb3B0cy5vdmVycmlkZVJlbmRlciA9IHRydWU7XG4gICAgc3VwZXIob3B0cyk7XG4gICAgdGhpcy5pbnB1dFZhbHVlID0gJyc7XG4gICAgdGhpcy5jbGVhciA9IGNsZWFyKCcnLCB0aGlzLm91dC5jb2x1bW5zKTtcbiAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IHRoaXMudmFsdWU7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIGxhc3QoKSB7XG4gICAgdGhpcy5jdXJzb3IgPSB0aGlzLmZpbHRlcmVkT3B0aW9ucy5sZW5ndGggLSAxO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBuZXh0KCkge1xuICAgIHRoaXMuY3Vyc29yID0gKHRoaXMuY3Vyc29yICsgMSkgJSB0aGlzLmZpbHRlcmVkT3B0aW9ucy5sZW5ndGg7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHVwKCkge1xuICAgIGlmICh0aGlzLmN1cnNvciA9PT0gMCkge1xuICAgICAgdGhpcy5jdXJzb3IgPSB0aGlzLmZpbHRlcmVkT3B0aW9ucy5sZW5ndGggLSAxO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmN1cnNvci0tO1xuICAgIH1cblxuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBkb3duKCkge1xuICAgIGlmICh0aGlzLmN1cnNvciA9PT0gdGhpcy5maWx0ZXJlZE9wdGlvbnMubGVuZ3RoIC0gMSkge1xuICAgICAgdGhpcy5jdXJzb3IgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmN1cnNvcisrO1xuICAgIH1cblxuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBsZWZ0KCkge1xuICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zW3RoaXMuY3Vyc29yXS5zZWxlY3RlZCA9IGZhbHNlO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICByaWdodCgpIHtcbiAgICBpZiAodGhpcy52YWx1ZS5maWx0ZXIoZSA9PiBlLnNlbGVjdGVkKS5sZW5ndGggPj0gdGhpcy5tYXhDaG9pY2VzKSByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgdGhpcy5maWx0ZXJlZE9wdGlvbnNbdGhpcy5jdXJzb3JdLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZGVsZXRlKCkge1xuICAgIGlmICh0aGlzLmlucHV0VmFsdWUubGVuZ3RoKSB7XG4gICAgICB0aGlzLmlucHV0VmFsdWUgPSB0aGlzLmlucHV0VmFsdWUuc3Vic3RyKDAsIHRoaXMuaW5wdXRWYWx1ZS5sZW5ndGggLSAxKTtcbiAgICAgIHRoaXMudXBkYXRlRmlsdGVyZWRPcHRpb25zKCk7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlRmlsdGVyZWRPcHRpb25zKCkge1xuICAgIGNvbnN0IGN1cnJlbnRIaWdobGlnaHQgPSB0aGlzLmZpbHRlcmVkT3B0aW9uc1t0aGlzLmN1cnNvcl07XG4gICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSB0aGlzLnZhbHVlLmZpbHRlcih2ID0+IHtcbiAgICAgIGlmICh0aGlzLmlucHV0VmFsdWUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB2LnRpdGxlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIGlmICh2LnRpdGxlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5pbnB1dFZhbHVlLnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIHYudmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgaWYgKHYudmFsdWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLmlucHV0VmFsdWUudG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG4gICAgY29uc3QgbmV3SGlnaGxpZ2h0SW5kZXggPSB0aGlzLmZpbHRlcmVkT3B0aW9ucy5maW5kSW5kZXgodiA9PiB2ID09PSBjdXJyZW50SGlnaGxpZ2h0KTtcbiAgICB0aGlzLmN1cnNvciA9IG5ld0hpZ2hsaWdodEluZGV4IDwgMCA/IDAgOiBuZXdIaWdobGlnaHRJbmRleDtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgaGFuZGxlU3BhY2VUb2dnbGUoKSB7XG4gICAgY29uc3QgdiA9IHRoaXMuZmlsdGVyZWRPcHRpb25zW3RoaXMuY3Vyc29yXTtcblxuICAgIGlmICh2LnNlbGVjdGVkKSB7XG4gICAgICB2LnNlbGVjdGVkID0gZmFsc2U7XG4gICAgICB0aGlzLnJlbmRlcigpO1xuICAgIH0gZWxzZSBpZiAodi5kaXNhYmxlZCB8fCB0aGlzLnZhbHVlLmZpbHRlcihlID0+IGUuc2VsZWN0ZWQpLmxlbmd0aCA+PSB0aGlzLm1heENob2ljZXMpIHtcbiAgICAgIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdi5zZWxlY3RlZCA9IHRydWU7XG4gICAgICB0aGlzLnJlbmRlcigpO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZUlucHV0Q2hhbmdlKGMpIHtcbiAgICB0aGlzLmlucHV0VmFsdWUgPSB0aGlzLmlucHV0VmFsdWUgKyBjO1xuICAgIHRoaXMudXBkYXRlRmlsdGVyZWRPcHRpb25zKCk7XG4gIH1cblxuICBfKGMsIGtleSkge1xuICAgIGlmIChjID09PSAnICcpIHtcbiAgICAgIHRoaXMuaGFuZGxlU3BhY2VUb2dnbGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5oYW5kbGVJbnB1dENoYW5nZShjKTtcbiAgICB9XG4gIH1cblxuICByZW5kZXJJbnN0cnVjdGlvbnMoKSB7XG4gICAgaWYgKHRoaXMuaW5zdHJ1Y3Rpb25zID09PSB1bmRlZmluZWQgfHwgdGhpcy5pbnN0cnVjdGlvbnMpIHtcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5pbnN0cnVjdGlvbnMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmluc3RydWN0aW9ucztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGBcbkluc3RydWN0aW9uczpcbiAgICAke2ZpZ3VyZXMuYXJyb3dVcH0vJHtmaWd1cmVzLmFycm93RG93bn06IEhpZ2hsaWdodCBvcHRpb25cbiAgICAke2ZpZ3VyZXMuYXJyb3dMZWZ0fS8ke2ZpZ3VyZXMuYXJyb3dSaWdodH0vW3NwYWNlXTogVG9nZ2xlIHNlbGVjdGlvblxuICAgIFthLGIsY10vZGVsZXRlOiBGaWx0ZXIgY2hvaWNlc1xuICAgIGVudGVyL3JldHVybjogQ29tcGxldGUgYW5zd2VyXG5gO1xuICAgIH1cblxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIHJlbmRlckN1cnJlbnRJbnB1dCgpIHtcbiAgICByZXR1cm4gYFxuRmlsdGVyZWQgcmVzdWx0cyBmb3I6ICR7dGhpcy5pbnB1dFZhbHVlID8gdGhpcy5pbnB1dFZhbHVlIDogY29sb3IuZ3JheSgnRW50ZXIgc29tZXRoaW5nIHRvIGZpbHRlcicpfVxcbmA7XG4gIH1cblxuICByZW5kZXJPcHRpb24oY3Vyc29yLCB2LCBpKSB7XG4gICAgbGV0IHRpdGxlO1xuICAgIGlmICh2LmRpc2FibGVkKSB0aXRsZSA9IGN1cnNvciA9PT0gaSA/IGNvbG9yLmdyYXkoKS51bmRlcmxpbmUodi50aXRsZSkgOiBjb2xvci5zdHJpa2V0aHJvdWdoKCkuZ3JheSh2LnRpdGxlKTtlbHNlIHRpdGxlID0gY3Vyc29yID09PSBpID8gY29sb3IuY3lhbigpLnVuZGVybGluZSh2LnRpdGxlKSA6IHYudGl0bGU7XG4gICAgcmV0dXJuICh2LnNlbGVjdGVkID8gY29sb3IuZ3JlZW4oZmlndXJlcy5yYWRpb09uKSA6IGZpZ3VyZXMucmFkaW9PZmYpICsgJyAgJyArIHRpdGxlO1xuICB9XG5cbiAgcmVuZGVyRG9uZU9ySW5zdHJ1Y3Rpb25zKCkge1xuICAgIGlmICh0aGlzLmRvbmUpIHtcbiAgICAgIHJldHVybiB0aGlzLnZhbHVlLmZpbHRlcihlID0+IGUuc2VsZWN0ZWQpLm1hcCh2ID0+IHYudGl0bGUpLmpvaW4oJywgJyk7XG4gICAgfVxuXG4gICAgY29uc3Qgb3V0cHV0ID0gW2NvbG9yLmdyYXkodGhpcy5oaW50KSwgdGhpcy5yZW5kZXJJbnN0cnVjdGlvbnMoKSwgdGhpcy5yZW5kZXJDdXJyZW50SW5wdXQoKV07XG5cbiAgICBpZiAodGhpcy5maWx0ZXJlZE9wdGlvbnMubGVuZ3RoICYmIHRoaXMuZmlsdGVyZWRPcHRpb25zW3RoaXMuY3Vyc29yXS5kaXNhYmxlZCkge1xuICAgICAgb3V0cHV0LnB1c2goY29sb3IueWVsbG93KHRoaXMud2FybikpO1xuICAgIH1cblxuICAgIHJldHVybiBvdXRwdXQuam9pbignICcpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGlmICh0aGlzLmNsb3NlZCkgcmV0dXJuO1xuICAgIGlmICh0aGlzLmZpcnN0UmVuZGVyKSB0aGlzLm91dC53cml0ZShjdXJzb3IuaGlkZSk7XG4gICAgc3VwZXIucmVuZGVyKCk7IC8vIHByaW50IHByb21wdFxuXG4gICAgbGV0IHByb21wdCA9IFtzdHlsZS5zeW1ib2wodGhpcy5kb25lLCB0aGlzLmFib3J0ZWQpLCBjb2xvci5ib2xkKHRoaXMubXNnKSwgc3R5bGUuZGVsaW1pdGVyKGZhbHNlKSwgdGhpcy5yZW5kZXJEb25lT3JJbnN0cnVjdGlvbnMoKV0uam9pbignICcpO1xuXG4gICAgaWYgKHRoaXMuc2hvd01pbkVycm9yKSB7XG4gICAgICBwcm9tcHQgKz0gY29sb3IucmVkKGBZb3UgbXVzdCBzZWxlY3QgYSBtaW5pbXVtIG9mICR7dGhpcy5taW5TZWxlY3RlZH0gY2hvaWNlcy5gKTtcbiAgICAgIHRoaXMuc2hvd01pbkVycm9yID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcHJvbXB0ICs9IHRoaXMucmVuZGVyT3B0aW9ucyh0aGlzLmZpbHRlcmVkT3B0aW9ucyk7XG4gICAgdGhpcy5vdXQud3JpdGUodGhpcy5jbGVhciArIHByb21wdCk7XG4gICAgdGhpcy5jbGVhciA9IGNsZWFyKHByb21wdCwgdGhpcy5vdXQuY29sdW1ucyk7XG4gIH1cblxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEF1dG9jb21wbGV0ZU11bHRpc2VsZWN0UHJvbXB0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBjb2xvciA9IHJlcXVpcmUoJ2tsZXVyJyk7XG5cbmNvbnN0IFByb21wdCA9IHJlcXVpcmUoJy4vcHJvbXB0Jyk7XG5cbmNvbnN0IF9yZXF1aXJlID0gcmVxdWlyZSgnLi4vdXRpbCcpLFxuICAgICAgc3R5bGUgPSBfcmVxdWlyZS5zdHlsZSxcbiAgICAgIGNsZWFyID0gX3JlcXVpcmUuY2xlYXI7XG5cbmNvbnN0IF9yZXF1aXJlMiA9IHJlcXVpcmUoJ3Npc3RlcmFuc2knKSxcbiAgICAgIGVyYXNlID0gX3JlcXVpcmUyLmVyYXNlLFxuICAgICAgY3Vyc29yID0gX3JlcXVpcmUyLmN1cnNvcjtcbi8qKlxuICogQ29uZmlybVByb21wdCBCYXNlIEVsZW1lbnRcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIE9wdGlvbnNcbiAqIEBwYXJhbSB7U3RyaW5nfSBvcHRzLm1lc3NhZ2UgTWVzc2FnZVxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0cy5pbml0aWFsXSBEZWZhdWx0IHZhbHVlICh0cnVlL2ZhbHNlKVxuICogQHBhcmFtIHtTdHJlYW19IFtvcHRzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFtvcHRzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKiBAcGFyYW0ge1N0cmluZ30gW29wdHMueWVzXSBUaGUgXCJZZXNcIiBsYWJlbFxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLnllc09wdGlvbl0gVGhlIFwiWWVzXCIgb3B0aW9uIHdoZW4gY2hvb3NpbmcgYmV0d2VlbiB5ZXMvbm9cbiAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5ub10gVGhlIFwiTm9cIiBsYWJlbFxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLm5vT3B0aW9uXSBUaGUgXCJOb1wiIG9wdGlvbiB3aGVuIGNob29zaW5nIGJldHdlZW4geWVzL25vXG4gKi9cblxuXG5jbGFzcyBDb25maXJtUHJvbXB0IGV4dGVuZHMgUHJvbXB0IHtcbiAgY29uc3RydWN0b3Iob3B0cyA9IHt9KSB7XG4gICAgc3VwZXIob3B0cyk7XG4gICAgdGhpcy5tc2cgPSBvcHRzLm1lc3NhZ2U7XG4gICAgdGhpcy52YWx1ZSA9IG9wdHMuaW5pdGlhbDtcbiAgICB0aGlzLmluaXRpYWxWYWx1ZSA9ICEhb3B0cy5pbml0aWFsO1xuICAgIHRoaXMueWVzTXNnID0gb3B0cy55ZXMgfHwgJ3llcyc7XG4gICAgdGhpcy55ZXNPcHRpb24gPSBvcHRzLnllc09wdGlvbiB8fCAnKFkvbiknO1xuICAgIHRoaXMubm9Nc2cgPSBvcHRzLm5vIHx8ICdubyc7XG4gICAgdGhpcy5ub09wdGlvbiA9IG9wdHMubm9PcHRpb24gfHwgJyh5L04pJztcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgcmVzZXQoKSB7XG4gICAgdGhpcy52YWx1ZSA9IHRoaXMuaW5pdGlhbFZhbHVlO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBleGl0KCkge1xuICAgIHRoaXMuYWJvcnQoKTtcbiAgfVxuXG4gIGFib3J0KCkge1xuICAgIHRoaXMuZG9uZSA9IHRoaXMuYWJvcnRlZCA9IHRydWU7XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgICB0aGlzLm91dC53cml0ZSgnXFxuJyk7XG4gICAgdGhpcy5jbG9zZSgpO1xuICB9XG5cbiAgc3VibWl0KCkge1xuICAgIHRoaXMudmFsdWUgPSB0aGlzLnZhbHVlIHx8IGZhbHNlO1xuICAgIHRoaXMuZG9uZSA9IHRydWU7XG4gICAgdGhpcy5hYm9ydGVkID0gZmFsc2U7XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgICB0aGlzLm91dC53cml0ZSgnXFxuJyk7XG4gICAgdGhpcy5jbG9zZSgpO1xuICB9XG5cbiAgXyhjLCBrZXkpIHtcbiAgICBpZiAoYy50b0xvd2VyQ2FzZSgpID09PSAneScpIHtcbiAgICAgIHRoaXMudmFsdWUgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRoaXMuc3VibWl0KCk7XG4gICAgfVxuXG4gICAgaWYgKGMudG9Mb3dlckNhc2UoKSA9PT0gJ24nKSB7XG4gICAgICB0aGlzLnZhbHVlID0gZmFsc2U7XG4gICAgICByZXR1cm4gdGhpcy5zdWJtaXQoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5iZWxsKCk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgaWYgKHRoaXMuY2xvc2VkKSByZXR1cm47XG4gICAgaWYgKHRoaXMuZmlyc3RSZW5kZXIpIHRoaXMub3V0LndyaXRlKGN1cnNvci5oaWRlKTtlbHNlIHRoaXMub3V0LndyaXRlKGNsZWFyKHRoaXMub3V0cHV0VGV4dCwgdGhpcy5vdXQuY29sdW1ucykpO1xuICAgIHN1cGVyLnJlbmRlcigpO1xuICAgIHRoaXMub3V0cHV0VGV4dCA9IFtzdHlsZS5zeW1ib2wodGhpcy5kb25lLCB0aGlzLmFib3J0ZWQpLCBjb2xvci5ib2xkKHRoaXMubXNnKSwgc3R5bGUuZGVsaW1pdGVyKHRoaXMuZG9uZSksIHRoaXMuZG9uZSA/IHRoaXMudmFsdWUgPyB0aGlzLnllc01zZyA6IHRoaXMubm9Nc2cgOiBjb2xvci5ncmF5KHRoaXMuaW5pdGlhbFZhbHVlID8gdGhpcy55ZXNPcHRpb24gOiB0aGlzLm5vT3B0aW9uKV0uam9pbignICcpO1xuICAgIHRoaXMub3V0LndyaXRlKGVyYXNlLmxpbmUgKyBjdXJzb3IudG8oMCkgKyB0aGlzLm91dHB1dFRleHQpO1xuICB9XG5cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBDb25maXJtUHJvbXB0OyIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIFRleHRQcm9tcHQ6IHJlcXVpcmUoJy4vdGV4dCcpLFxuICBTZWxlY3RQcm9tcHQ6IHJlcXVpcmUoJy4vc2VsZWN0JyksXG4gIFRvZ2dsZVByb21wdDogcmVxdWlyZSgnLi90b2dnbGUnKSxcbiAgRGF0ZVByb21wdDogcmVxdWlyZSgnLi9kYXRlJyksXG4gIE51bWJlclByb21wdDogcmVxdWlyZSgnLi9udW1iZXInKSxcbiAgTXVsdGlzZWxlY3RQcm9tcHQ6IHJlcXVpcmUoJy4vbXVsdGlzZWxlY3QnKSxcbiAgQXV0b2NvbXBsZXRlUHJvbXB0OiByZXF1aXJlKCcuL2F1dG9jb21wbGV0ZScpLFxuICBBdXRvY29tcGxldGVNdWx0aXNlbGVjdFByb21wdDogcmVxdWlyZSgnLi9hdXRvY29tcGxldGVNdWx0aXNlbGVjdCcpLFxuICBDb25maXJtUHJvbXB0OiByZXF1aXJlKCcuL2NvbmZpcm0nKVxufTsiLCIndXNlIHN0cmljdCc7XG5cbmNvbnN0ICQgPSBleHBvcnRzO1xuXG5jb25zdCBlbCA9IHJlcXVpcmUoJy4vZWxlbWVudHMnKTtcblxuY29uc3Qgbm9vcCA9IHYgPT4gdjtcblxuZnVuY3Rpb24gdG9Qcm9tcHQodHlwZSwgYXJncywgb3B0cyA9IHt9KSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzLCByZWopID0+IHtcbiAgICBjb25zdCBwID0gbmV3IGVsW3R5cGVdKGFyZ3MpO1xuICAgIGNvbnN0IG9uQWJvcnQgPSBvcHRzLm9uQWJvcnQgfHwgbm9vcDtcbiAgICBjb25zdCBvblN1Ym1pdCA9IG9wdHMub25TdWJtaXQgfHwgbm9vcDtcbiAgICBjb25zdCBvbkV4aXQgPSBvcHRzLm9uRXhpdCB8fCBub29wO1xuICAgIHAub24oJ3N0YXRlJywgYXJncy5vblN0YXRlIHx8IG5vb3ApO1xuICAgIHAub24oJ3N1Ym1pdCcsIHggPT4gcmVzKG9uU3VibWl0KHgpKSk7XG4gICAgcC5vbignZXhpdCcsIHggPT4gcmVzKG9uRXhpdCh4KSkpO1xuICAgIHAub24oJ2Fib3J0JywgeCA9PiByZWoob25BYm9ydCh4KSkpO1xuICB9KTtcbn1cbi8qKlxuICogVGV4dCBwcm9tcHRcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLm1lc3NhZ2UgUHJvbXB0IG1lc3NhZ2UgdG8gZGlzcGxheVxuICogQHBhcmFtIHtzdHJpbmd9IFthcmdzLmluaXRpYWxdIERlZmF1bHQgc3RyaW5nIHZhbHVlXG4gKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3Muc3R5bGU9XCJkZWZhdWx0XCJdIFJlbmRlciBzdHlsZSAoJ2RlZmF1bHQnLCAncGFzc3dvcmQnLCAnaW52aXNpYmxlJylcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IFthcmdzLm9uU3RhdGVdIE9uIHN0YXRlIGNoYW5nZSBjYWxsYmFja1xuICogQHBhcmFtIHtmdW5jdGlvbn0gW2FyZ3MudmFsaWRhdGVdIEZ1bmN0aW9uIHRvIHZhbGlkYXRlIHVzZXIgaW5wdXRcbiAqIEBwYXJhbSB7U3RyZWFtfSBbYXJncy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbYXJncy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICogQHJldHVybnMge1Byb21pc2V9IFByb21pc2Ugd2l0aCB1c2VyIGlucHV0XG4gKi9cblxuXG4kLnRleHQgPSBhcmdzID0+IHRvUHJvbXB0KCdUZXh0UHJvbXB0JywgYXJncyk7XG4vKipcbiAqIFBhc3N3b3JkIHByb21wdCB3aXRoIG1hc2tlZCBpbnB1dFxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MubWVzc2FnZSBQcm9tcHQgbWVzc2FnZSB0byBkaXNwbGF5XG4gKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3MuaW5pdGlhbF0gRGVmYXVsdCBzdHJpbmcgdmFsdWVcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IFthcmdzLm9uU3RhdGVdIE9uIHN0YXRlIGNoYW5nZSBjYWxsYmFja1xuICogQHBhcmFtIHtmdW5jdGlvbn0gW2FyZ3MudmFsaWRhdGVdIEZ1bmN0aW9uIHRvIHZhbGlkYXRlIHVzZXIgaW5wdXRcbiAqIEBwYXJhbSB7U3RyZWFtfSBbYXJncy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbYXJncy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICogQHJldHVybnMge1Byb21pc2V9IFByb21pc2Ugd2l0aCB1c2VyIGlucHV0XG4gKi9cblxuXG4kLnBhc3N3b3JkID0gYXJncyA9PiB7XG4gIGFyZ3Muc3R5bGUgPSAncGFzc3dvcmQnO1xuICByZXR1cm4gJC50ZXh0KGFyZ3MpO1xufTtcbi8qKlxuICogUHJvbXB0IHdoZXJlIGlucHV0IGlzIGludmlzaWJsZSwgbGlrZSBzdWRvXG4gKiBAcGFyYW0ge3N0cmluZ30gYXJncy5tZXNzYWdlIFByb21wdCBtZXNzYWdlIHRvIGRpc3BsYXlcbiAqIEBwYXJhbSB7c3RyaW5nfSBbYXJncy5pbml0aWFsXSBEZWZhdWx0IHN0cmluZyB2YWx1ZVxuICogQHBhcmFtIHtmdW5jdGlvbn0gW2FyZ3Mub25TdGF0ZV0gT24gc3RhdGUgY2hhbmdlIGNhbGxiYWNrXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBbYXJncy52YWxpZGF0ZV0gRnVuY3Rpb24gdG8gdmFsaWRhdGUgdXNlciBpbnB1dFxuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSB3aXRoIHVzZXIgaW5wdXRcbiAqL1xuXG5cbiQuaW52aXNpYmxlID0gYXJncyA9PiB7XG4gIGFyZ3Muc3R5bGUgPSAnaW52aXNpYmxlJztcbiAgcmV0dXJuICQudGV4dChhcmdzKTtcbn07XG4vKipcbiAqIE51bWJlciBwcm9tcHRcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLm1lc3NhZ2UgUHJvbXB0IG1lc3NhZ2UgdG8gZGlzcGxheVxuICogQHBhcmFtIHtudW1iZXJ9IGFyZ3MuaW5pdGlhbCBEZWZhdWx0IG51bWJlciB2YWx1ZVxuICogQHBhcmFtIHtmdW5jdGlvbn0gW2FyZ3Mub25TdGF0ZV0gT24gc3RhdGUgY2hhbmdlIGNhbGxiYWNrXG4gKiBAcGFyYW0ge251bWJlcn0gW2FyZ3MubWF4XSBNYXggdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBbYXJncy5taW5dIE1pbiB2YWx1ZVxuICogQHBhcmFtIHtzdHJpbmd9IFthcmdzLnN0eWxlPVwiZGVmYXVsdFwiXSBSZW5kZXIgc3R5bGUgKCdkZWZhdWx0JywgJ3Bhc3N3b3JkJywgJ2ludmlzaWJsZScpXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRzLmZsb2F0PWZhbHNlXSBQYXJzZSBpbnB1dCBhcyBmbG9hdHNcbiAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0cy5yb3VuZD0yXSBSb3VuZCBmbG9hdHMgdG8geCBkZWNpbWFsc1xuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLmluY3JlbWVudD0xXSBOdW1iZXIgdG8gaW5jcmVtZW50IGJ5IHdoZW4gdXNpbmcgYXJyb3cta2V5c1xuICogQHBhcmFtIHtmdW5jdGlvbn0gW2FyZ3MudmFsaWRhdGVdIEZ1bmN0aW9uIHRvIHZhbGlkYXRlIHVzZXIgaW5wdXRcbiAqIEBwYXJhbSB7U3RyZWFtfSBbYXJncy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbYXJncy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICogQHJldHVybnMge1Byb21pc2V9IFByb21pc2Ugd2l0aCB1c2VyIGlucHV0XG4gKi9cblxuXG4kLm51bWJlciA9IGFyZ3MgPT4gdG9Qcm9tcHQoJ051bWJlclByb21wdCcsIGFyZ3MpO1xuLyoqXG4gKiBEYXRlIHByb21wdFxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MubWVzc2FnZSBQcm9tcHQgbWVzc2FnZSB0byBkaXNwbGF5XG4gKiBAcGFyYW0ge251bWJlcn0gYXJncy5pbml0aWFsIERlZmF1bHQgbnVtYmVyIHZhbHVlXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBbYXJncy5vblN0YXRlXSBPbiBzdGF0ZSBjaGFuZ2UgY2FsbGJhY2tcbiAqIEBwYXJhbSB7bnVtYmVyfSBbYXJncy5tYXhdIE1heCB2YWx1ZVxuICogQHBhcmFtIHtudW1iZXJ9IFthcmdzLm1pbl0gTWluIHZhbHVlXG4gKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3Muc3R5bGU9XCJkZWZhdWx0XCJdIFJlbmRlciBzdHlsZSAoJ2RlZmF1bHQnLCAncGFzc3dvcmQnLCAnaW52aXNpYmxlJylcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdHMuZmxvYXQ9ZmFsc2VdIFBhcnNlIGlucHV0IGFzIGZsb2F0c1xuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLnJvdW5kPTJdIFJvdW5kIGZsb2F0cyB0byB4IGRlY2ltYWxzXG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMuaW5jcmVtZW50PTFdIE51bWJlciB0byBpbmNyZW1lbnQgYnkgd2hlbiB1c2luZyBhcnJvdy1rZXlzXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBbYXJncy52YWxpZGF0ZV0gRnVuY3Rpb24gdG8gdmFsaWRhdGUgdXNlciBpbnB1dFxuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSB3aXRoIHVzZXIgaW5wdXRcbiAqL1xuXG5cbiQuZGF0ZSA9IGFyZ3MgPT4gdG9Qcm9tcHQoJ0RhdGVQcm9tcHQnLCBhcmdzKTtcbi8qKlxuICogQ2xhc3NpYyB5ZXMvbm8gcHJvbXB0XG4gKiBAcGFyYW0ge3N0cmluZ30gYXJncy5tZXNzYWdlIFByb21wdCBtZXNzYWdlIHRvIGRpc3BsYXlcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2FyZ3MuaW5pdGlhbD1mYWxzZV0gRGVmYXVsdCB2YWx1ZVxuICogQHBhcmFtIHtmdW5jdGlvbn0gW2FyZ3Mub25TdGF0ZV0gT24gc3RhdGUgY2hhbmdlIGNhbGxiYWNrXG4gKiBAcGFyYW0ge1N0cmVhbX0gW2FyZ3Muc3RkaW5dIFRoZSBSZWFkYWJsZSBzdHJlYW0gdG8gbGlzdGVuIHRvXG4gKiBAcGFyYW0ge1N0cmVhbX0gW2FyZ3Muc3Rkb3V0XSBUaGUgV3JpdGFibGUgc3RyZWFtIHRvIHdyaXRlIHJlYWRsaW5lIGRhdGEgdG9cbiAqIEByZXR1cm5zIHtQcm9taXNlfSBQcm9taXNlIHdpdGggdXNlciBpbnB1dFxuICovXG5cblxuJC5jb25maXJtID0gYXJncyA9PiB0b1Byb21wdCgnQ29uZmlybVByb21wdCcsIGFyZ3MpO1xuLyoqXG4gKiBMaXN0IHByb21wdCwgc3BsaXQgaW50cHV0IHN0cmluZyBieSBgc2VwZXJhdG9yYFxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MubWVzc2FnZSBQcm9tcHQgbWVzc2FnZSB0byBkaXNwbGF5XG4gKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3MuaW5pdGlhbF0gRGVmYXVsdCBzdHJpbmcgdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBbYXJncy5zdHlsZT1cImRlZmF1bHRcIl0gUmVuZGVyIHN0eWxlICgnZGVmYXVsdCcsICdwYXNzd29yZCcsICdpbnZpc2libGUnKVxuICogQHBhcmFtIHtzdHJpbmd9IFthcmdzLnNlcGFyYXRvcl0gU3RyaW5nIHNlcGFyYXRvclxuICogQHBhcmFtIHtmdW5jdGlvbn0gW2FyZ3Mub25TdGF0ZV0gT24gc3RhdGUgY2hhbmdlIGNhbGxiYWNrXG4gKiBAcGFyYW0ge1N0cmVhbX0gW2FyZ3Muc3RkaW5dIFRoZSBSZWFkYWJsZSBzdHJlYW0gdG8gbGlzdGVuIHRvXG4gKiBAcGFyYW0ge1N0cmVhbX0gW2FyZ3Muc3Rkb3V0XSBUaGUgV3JpdGFibGUgc3RyZWFtIHRvIHdyaXRlIHJlYWRsaW5lIGRhdGEgdG9cbiAqIEByZXR1cm5zIHtQcm9taXNlfSBQcm9taXNlIHdpdGggdXNlciBpbnB1dCwgaW4gZm9ybSBvZiBhbiBgQXJyYXlgXG4gKi9cblxuXG4kLmxpc3QgPSBhcmdzID0+IHtcbiAgY29uc3Qgc2VwID0gYXJncy5zZXBhcmF0b3IgfHwgJywnO1xuICByZXR1cm4gdG9Qcm9tcHQoJ1RleHRQcm9tcHQnLCBhcmdzLCB7XG4gICAgb25TdWJtaXQ6IHN0ciA9PiBzdHIuc3BsaXQoc2VwKS5tYXAocyA9PiBzLnRyaW0oKSlcbiAgfSk7XG59O1xuLyoqXG4gKiBUb2dnbGUvc3dpdGNoIHByb21wdFxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MubWVzc2FnZSBQcm9tcHQgbWVzc2FnZSB0byBkaXNwbGF5XG4gKiBAcGFyYW0ge2Jvb2xlYW59IFthcmdzLmluaXRpYWw9ZmFsc2VdIERlZmF1bHQgdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBbYXJncy5hY3RpdmU9XCJvblwiXSBUZXh0IGZvciBgYWN0aXZlYCBzdGF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IFthcmdzLmluYWN0aXZlPVwib2ZmXCJdIFRleHQgZm9yIGBpbmFjdGl2ZWAgc3RhdGVcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IFthcmdzLm9uU3RhdGVdIE9uIHN0YXRlIGNoYW5nZSBjYWxsYmFja1xuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSB3aXRoIHVzZXIgaW5wdXRcbiAqL1xuXG5cbiQudG9nZ2xlID0gYXJncyA9PiB0b1Byb21wdCgnVG9nZ2xlUHJvbXB0JywgYXJncyk7XG4vKipcbiAqIEludGVyYWN0aXZlIHNlbGVjdCBwcm9tcHRcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLm1lc3NhZ2UgUHJvbXB0IG1lc3NhZ2UgdG8gZGlzcGxheVxuICogQHBhcmFtIHtBcnJheX0gYXJncy5jaG9pY2VzIEFycmF5IG9mIGNob2ljZXMgb2JqZWN0cyBgW3sgdGl0bGUsIHZhbHVlIH0sIC4uLl1gXG4gKiBAcGFyYW0ge251bWJlcn0gW2FyZ3MuaW5pdGlhbF0gSW5kZXggb2YgZGVmYXVsdCB2YWx1ZVxuICogQHBhcmFtIHtTdHJpbmd9IFthcmdzLmhpbnRdIEhpbnQgdG8gZGlzcGxheVxuICogQHBhcmFtIHtmdW5jdGlvbn0gW2FyZ3Mub25TdGF0ZV0gT24gc3RhdGUgY2hhbmdlIGNhbGxiYWNrXG4gKiBAcGFyYW0ge1N0cmVhbX0gW2FyZ3Muc3RkaW5dIFRoZSBSZWFkYWJsZSBzdHJlYW0gdG8gbGlzdGVuIHRvXG4gKiBAcGFyYW0ge1N0cmVhbX0gW2FyZ3Muc3Rkb3V0XSBUaGUgV3JpdGFibGUgc3RyZWFtIHRvIHdyaXRlIHJlYWRsaW5lIGRhdGEgdG9cbiAqIEByZXR1cm5zIHtQcm9taXNlfSBQcm9taXNlIHdpdGggdXNlciBpbnB1dFxuICovXG5cblxuJC5zZWxlY3QgPSBhcmdzID0+IHRvUHJvbXB0KCdTZWxlY3RQcm9tcHQnLCBhcmdzKTtcbi8qKlxuICogSW50ZXJhY3RpdmUgbXVsdGktc2VsZWN0IC8gYXV0b2NvbXBsZXRlTXVsdGlzZWxlY3QgcHJvbXB0XG4gKiBAcGFyYW0ge3N0cmluZ30gYXJncy5tZXNzYWdlIFByb21wdCBtZXNzYWdlIHRvIGRpc3BsYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFyZ3MuY2hvaWNlcyBBcnJheSBvZiBjaG9pY2VzIG9iamVjdHMgYFt7IHRpdGxlLCB2YWx1ZSwgW3NlbGVjdGVkXSB9LCAuLi5dYFxuICogQHBhcmFtIHtudW1iZXJ9IFthcmdzLm1heF0gTWF4IHNlbGVjdFxuICogQHBhcmFtIHtzdHJpbmd9IFthcmdzLmhpbnRdIEhpbnQgdG8gZGlzcGxheSB1c2VyXG4gKiBAcGFyYW0ge051bWJlcn0gW2FyZ3MuY3Vyc29yPTBdIEN1cnNvciBzdGFydCBwb3NpdGlvblxuICogQHBhcmFtIHtmdW5jdGlvbn0gW2FyZ3Mub25TdGF0ZV0gT24gc3RhdGUgY2hhbmdlIGNhbGxiYWNrXG4gKiBAcGFyYW0ge1N0cmVhbX0gW2FyZ3Muc3RkaW5dIFRoZSBSZWFkYWJsZSBzdHJlYW0gdG8gbGlzdGVuIHRvXG4gKiBAcGFyYW0ge1N0cmVhbX0gW2FyZ3Muc3Rkb3V0XSBUaGUgV3JpdGFibGUgc3RyZWFtIHRvIHdyaXRlIHJlYWRsaW5lIGRhdGEgdG9cbiAqIEByZXR1cm5zIHtQcm9taXNlfSBQcm9taXNlIHdpdGggdXNlciBpbnB1dFxuICovXG5cblxuJC5tdWx0aXNlbGVjdCA9IGFyZ3MgPT4ge1xuICBhcmdzLmNob2ljZXMgPSBbXS5jb25jYXQoYXJncy5jaG9pY2VzIHx8IFtdKTtcblxuICBjb25zdCB0b1NlbGVjdGVkID0gaXRlbXMgPT4gaXRlbXMuZmlsdGVyKGl0ZW0gPT4gaXRlbS5zZWxlY3RlZCkubWFwKGl0ZW0gPT4gaXRlbS52YWx1ZSk7XG5cbiAgcmV0dXJuIHRvUHJvbXB0KCdNdWx0aXNlbGVjdFByb21wdCcsIGFyZ3MsIHtcbiAgICBvbkFib3J0OiB0b1NlbGVjdGVkLFxuICAgIG9uU3VibWl0OiB0b1NlbGVjdGVkXG4gIH0pO1xufTtcblxuJC5hdXRvY29tcGxldGVNdWx0aXNlbGVjdCA9IGFyZ3MgPT4ge1xuICBhcmdzLmNob2ljZXMgPSBbXS5jb25jYXQoYXJncy5jaG9pY2VzIHx8IFtdKTtcblxuICBjb25zdCB0b1NlbGVjdGVkID0gaXRlbXMgPT4gaXRlbXMuZmlsdGVyKGl0ZW0gPT4gaXRlbS5zZWxlY3RlZCkubWFwKGl0ZW0gPT4gaXRlbS52YWx1ZSk7XG5cbiAgcmV0dXJuIHRvUHJvbXB0KCdBdXRvY29tcGxldGVNdWx0aXNlbGVjdFByb21wdCcsIGFyZ3MsIHtcbiAgICBvbkFib3J0OiB0b1NlbGVjdGVkLFxuICAgIG9uU3VibWl0OiB0b1NlbGVjdGVkXG4gIH0pO1xufTtcblxuY29uc3QgYnlUaXRsZSA9IChpbnB1dCwgY2hvaWNlcykgPT4gUHJvbWlzZS5yZXNvbHZlKGNob2ljZXMuZmlsdGVyKGl0ZW0gPT4gaXRlbS50aXRsZS5zbGljZSgwLCBpbnB1dC5sZW5ndGgpLnRvTG93ZXJDYXNlKCkgPT09IGlucHV0LnRvTG93ZXJDYXNlKCkpKTtcbi8qKlxuICogSW50ZXJhY3RpdmUgYXV0by1jb21wbGV0ZSBwcm9tcHRcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLm1lc3NhZ2UgUHJvbXB0IG1lc3NhZ2UgdG8gZGlzcGxheVxuICogQHBhcmFtIHtBcnJheX0gYXJncy5jaG9pY2VzIEFycmF5IG9mIGF1dG8tY29tcGxldGUgY2hvaWNlcyBvYmplY3RzIGBbeyB0aXRsZSwgdmFsdWUgfSwgLi4uXWBcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFthcmdzLnN1Z2dlc3RdIEZ1bmN0aW9uIHRvIGZpbHRlciByZXN1bHRzIGJhc2VkIG9uIHVzZXIgaW5wdXQuIERlZmF1bHRzIHRvIHNvcnQgYnkgYHRpdGxlYFxuICogQHBhcmFtIHtudW1iZXJ9IFthcmdzLmxpbWl0PTEwXSBNYXggbnVtYmVyIG9mIHJlc3VsdHMgdG8gc2hvd1xuICogQHBhcmFtIHtzdHJpbmd9IFthcmdzLnN0eWxlPVwiZGVmYXVsdFwiXSBSZW5kZXIgc3R5bGUgKCdkZWZhdWx0JywgJ3Bhc3N3b3JkJywgJ2ludmlzaWJsZScpXG4gKiBAcGFyYW0ge1N0cmluZ30gW2FyZ3MuaW5pdGlhbF0gSW5kZXggb2YgdGhlIGRlZmF1bHQgdmFsdWVcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuY2xlYXJGaXJzdF0gVGhlIGZpcnN0IEVTQ0FQRSBrZXlwcmVzcyB3aWxsIGNsZWFyIHRoZSBpbnB1dFxuICogQHBhcmFtIHtTdHJpbmd9IFthcmdzLmZhbGxiYWNrXSBGYWxsYmFjayBtZXNzYWdlIC0gZGVmYXVsdHMgdG8gaW5pdGlhbCB2YWx1ZVxuICogQHBhcmFtIHtmdW5jdGlvbn0gW2FyZ3Mub25TdGF0ZV0gT24gc3RhdGUgY2hhbmdlIGNhbGxiYWNrXG4gKiBAcGFyYW0ge1N0cmVhbX0gW2FyZ3Muc3RkaW5dIFRoZSBSZWFkYWJsZSBzdHJlYW0gdG8gbGlzdGVuIHRvXG4gKiBAcGFyYW0ge1N0cmVhbX0gW2FyZ3Muc3Rkb3V0XSBUaGUgV3JpdGFibGUgc3RyZWFtIHRvIHdyaXRlIHJlYWRsaW5lIGRhdGEgdG9cbiAqIEByZXR1cm5zIHtQcm9taXNlfSBQcm9taXNlIHdpdGggdXNlciBpbnB1dFxuICovXG5cblxuJC5hdXRvY29tcGxldGUgPSBhcmdzID0+IHtcbiAgYXJncy5zdWdnZXN0ID0gYXJncy5zdWdnZXN0IHx8IGJ5VGl0bGU7XG4gIGFyZ3MuY2hvaWNlcyA9IFtdLmNvbmNhdChhcmdzLmNob2ljZXMgfHwgW10pO1xuICByZXR1cm4gdG9Qcm9tcHQoJ0F1dG9jb21wbGV0ZVByb21wdCcsIGFyZ3MpO1xufTsiLCIndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHsgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyB9IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIobywgYWxsb3dBcnJheUxpa2UpIHsgdmFyIGl0ID0gdHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl0gfHwgb1tcIkBAaXRlcmF0b3JcIl07IGlmICghaXQpIHsgaWYgKEFycmF5LmlzQXJyYXkobykgfHwgKGl0ID0gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8pKSB8fCBhbGxvd0FycmF5TGlrZSAmJiBvICYmIHR5cGVvZiBvLmxlbmd0aCA9PT0gXCJudW1iZXJcIikgeyBpZiAoaXQpIG8gPSBpdDsgdmFyIGkgPSAwOyB2YXIgRiA9IGZ1bmN0aW9uIEYoKSB7fTsgcmV0dXJuIHsgczogRiwgbjogZnVuY3Rpb24gbigpIHsgaWYgKGkgPj0gby5sZW5ndGgpIHJldHVybiB7IGRvbmU6IHRydWUgfTsgcmV0dXJuIHsgZG9uZTogZmFsc2UsIHZhbHVlOiBvW2krK10gfTsgfSwgZTogZnVuY3Rpb24gZShfZSkgeyB0aHJvdyBfZTsgfSwgZjogRiB9OyB9IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfSB2YXIgbm9ybWFsQ29tcGxldGlvbiA9IHRydWUsIGRpZEVyciA9IGZhbHNlLCBlcnI7IHJldHVybiB7IHM6IGZ1bmN0aW9uIHMoKSB7IGl0ID0gaXQuY2FsbChvKTsgfSwgbjogZnVuY3Rpb24gbigpIHsgdmFyIHN0ZXAgPSBpdC5uZXh0KCk7IG5vcm1hbENvbXBsZXRpb24gPSBzdGVwLmRvbmU7IHJldHVybiBzdGVwOyB9LCBlOiBmdW5jdGlvbiBlKF9lMikgeyBkaWRFcnIgPSB0cnVlOyBlcnIgPSBfZTI7IH0sIGY6IGZ1bmN0aW9uIGYoKSB7IHRyeSB7IGlmICghbm9ybWFsQ29tcGxldGlvbiAmJiBpdC5yZXR1cm4gIT0gbnVsbCkgaXQucmV0dXJuKCk7IH0gZmluYWxseSB7IGlmIChkaWRFcnIpIHRocm93IGVycjsgfSB9IH07IH1cblxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikgeyBpZiAoIW8pIHJldHVybjsgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpOyBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lOyBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTsgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB9XG5cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7IGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoOyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIGFycjJbaV0gPSBhcnJbaV07IHJldHVybiBhcnIyOyB9XG5cbmZ1bmN0aW9uIGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywga2V5LCBhcmcpIHsgdHJ5IHsgdmFyIGluZm8gPSBnZW5ba2V5XShhcmcpOyB2YXIgdmFsdWUgPSBpbmZvLnZhbHVlOyB9IGNhdGNoIChlcnJvcikgeyByZWplY3QoZXJyb3IpOyByZXR1cm47IH0gaWYgKGluZm8uZG9uZSkgeyByZXNvbHZlKHZhbHVlKTsgfSBlbHNlIHsgUHJvbWlzZS5yZXNvbHZlKHZhbHVlKS50aGVuKF9uZXh0LCBfdGhyb3cpOyB9IH1cblxuZnVuY3Rpb24gX2FzeW5jVG9HZW5lcmF0b3IoZm4pIHsgcmV0dXJuIGZ1bmN0aW9uICgpIHsgdmFyIHNlbGYgPSB0aGlzLCBhcmdzID0gYXJndW1lbnRzOyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2YXIgZ2VuID0gZm4uYXBwbHkoc2VsZiwgYXJncyk7IGZ1bmN0aW9uIF9uZXh0KHZhbHVlKSB7IGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJuZXh0XCIsIHZhbHVlKTsgfSBmdW5jdGlvbiBfdGhyb3coZXJyKSB7IGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJ0aHJvd1wiLCBlcnIpOyB9IF9uZXh0KHVuZGVmaW5lZCk7IH0pOyB9OyB9XG5cbmNvbnN0IHByb21wdHMgPSByZXF1aXJlKCcuL3Byb21wdHMnKTtcblxuY29uc3QgcGFzc09uID0gWydzdWdnZXN0JywgJ2Zvcm1hdCcsICdvblN0YXRlJywgJ3ZhbGlkYXRlJywgJ29uUmVuZGVyJywgJ3R5cGUnXTtcblxuY29uc3Qgbm9vcCA9ICgpID0+IHt9O1xuLyoqXG4gKiBQcm9tcHQgZm9yIGEgc2VyaWVzIG9mIHF1ZXN0aW9uc1xuICogQHBhcmFtIHtBcnJheXxPYmplY3R9IHF1ZXN0aW9ucyBTaW5nbGUgcXVlc3Rpb24gb2JqZWN0IG9yIEFycmF5IG9mIHF1ZXN0aW9uIG9iamVjdHNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtvblN1Ym1pdF0gQ2FsbGJhY2sgZnVuY3Rpb24gY2FsbGVkIG9uIHByb21wdCBzdWJtaXRcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtvbkNhbmNlbF0gQ2FsbGJhY2sgZnVuY3Rpb24gY2FsbGVkIG9uIGNhbmNlbC9hYm9ydFxuICogQHJldHVybnMge09iamVjdH0gT2JqZWN0IHdpdGggdmFsdWVzIGZyb20gdXNlciBpbnB1dFxuICovXG5cblxuZnVuY3Rpb24gcHJvbXB0KCkge1xuICByZXR1cm4gX3Byb21wdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufVxuXG5mdW5jdGlvbiBfcHJvbXB0KCkge1xuICBfcHJvbXB0ID0gX2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qIChxdWVzdGlvbnMgPSBbXSwge1xuICAgIG9uU3VibWl0ID0gbm9vcCxcbiAgICBvbkNhbmNlbCA9IG5vb3BcbiAgfSA9IHt9KSB7XG4gICAgY29uc3QgYW5zd2VycyA9IHt9O1xuICAgIGNvbnN0IG92ZXJyaWRlID0gcHJvbXB0Ll9vdmVycmlkZSB8fCB7fTtcbiAgICBxdWVzdGlvbnMgPSBbXS5jb25jYXQocXVlc3Rpb25zKTtcbiAgICBsZXQgYW5zd2VyLCBxdWVzdGlvbiwgcXVpdCwgbmFtZSwgdHlwZSwgbGFzdFByb21wdDtcblxuICAgIGNvbnN0IGdldEZvcm1hdHRlZEFuc3dlciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgX3JlZiA9IF9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKiAocXVlc3Rpb24sIGFuc3dlciwgc2tpcFZhbGlkYXRpb24gPSBmYWxzZSkge1xuICAgICAgICBpZiAoIXNraXBWYWxpZGF0aW9uICYmIHF1ZXN0aW9uLnZhbGlkYXRlICYmIHF1ZXN0aW9uLnZhbGlkYXRlKGFuc3dlcikgIT09IHRydWUpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcXVlc3Rpb24uZm9ybWF0ID8geWllbGQgcXVlc3Rpb24uZm9ybWF0KGFuc3dlciwgYW5zd2VycykgOiBhbnN3ZXI7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGZ1bmN0aW9uIGdldEZvcm1hdHRlZEFuc3dlcihfeCwgX3gyKSB7XG4gICAgICAgIHJldHVybiBfcmVmLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB9O1xuICAgIH0oKTtcblxuICAgIHZhciBfaXRlcmF0b3IgPSBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlcihxdWVzdGlvbnMpLFxuICAgICAgICBfc3RlcDtcblxuICAgIHRyeSB7XG4gICAgICBmb3IgKF9pdGVyYXRvci5zKCk7ICEoX3N0ZXAgPSBfaXRlcmF0b3IubigpKS5kb25lOykge1xuICAgICAgICBxdWVzdGlvbiA9IF9zdGVwLnZhbHVlO1xuICAgICAgICB2YXIgX3F1ZXN0aW9uID0gcXVlc3Rpb247XG4gICAgICAgIG5hbWUgPSBfcXVlc3Rpb24ubmFtZTtcbiAgICAgICAgdHlwZSA9IF9xdWVzdGlvbi50eXBlO1xuXG4gICAgICAgIC8vIGV2YWx1YXRlIHR5cGUgZmlyc3QgYW5kIHNraXAgaWYgdHlwZSBpcyBhIGZhbHN5IHZhbHVlXG4gICAgICAgIGlmICh0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHR5cGUgPSB5aWVsZCB0eXBlKGFuc3dlciwgX29iamVjdFNwcmVhZCh7fSwgYW5zd2VycyksIHF1ZXN0aW9uKTtcbiAgICAgICAgICBxdWVzdGlvblsndHlwZSddID0gdHlwZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdHlwZSkgY29udGludWU7IC8vIGlmIHByb3BlcnR5IGlzIGEgZnVuY3Rpb24sIGludm9rZSBpdCB1bmxlc3MgaXQncyBhIHNwZWNpYWwgZnVuY3Rpb25cblxuICAgICAgICBmb3IgKGxldCBrZXkgaW4gcXVlc3Rpb24pIHtcbiAgICAgICAgICBpZiAocGFzc09uLmluY2x1ZGVzKGtleSkpIGNvbnRpbnVlO1xuICAgICAgICAgIGxldCB2YWx1ZSA9IHF1ZXN0aW9uW2tleV07XG4gICAgICAgICAgcXVlc3Rpb25ba2V5XSA9IHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyA/IHlpZWxkIHZhbHVlKGFuc3dlciwgX29iamVjdFNwcmVhZCh7fSwgYW5zd2VycyksIGxhc3RQcm9tcHQpIDogdmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICBsYXN0UHJvbXB0ID0gcXVlc3Rpb247XG5cbiAgICAgICAgaWYgKHR5cGVvZiBxdWVzdGlvbi5tZXNzYWdlICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcigncHJvbXB0IG1lc3NhZ2UgaXMgcmVxdWlyZWQnKTtcbiAgICAgICAgfSAvLyB1cGRhdGUgdmFycyBpbiBjYXNlIHRoZXkgY2hhbmdlZFxuXG5cbiAgICAgICAgdmFyIF9xdWVzdGlvbjIgPSBxdWVzdGlvbjtcbiAgICAgICAgbmFtZSA9IF9xdWVzdGlvbjIubmFtZTtcbiAgICAgICAgdHlwZSA9IF9xdWVzdGlvbjIudHlwZTtcblxuICAgICAgICBpZiAocHJvbXB0c1t0eXBlXSA9PT0gdm9pZCAwKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBwcm9tcHQgdHlwZSAoJHt0eXBlfSkgaXMgbm90IGRlZmluZWRgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvdmVycmlkZVtxdWVzdGlvbi5uYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgYW5zd2VyID0geWllbGQgZ2V0Rm9ybWF0dGVkQW5zd2VyKHF1ZXN0aW9uLCBvdmVycmlkZVtxdWVzdGlvbi5uYW1lXSk7XG5cbiAgICAgICAgICBpZiAoYW5zd2VyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGFuc3dlcnNbbmFtZV0gPSBhbnN3ZXI7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIEdldCB0aGUgaW5qZWN0ZWQgYW5zd2VyIGlmIHRoZXJlIGlzIG9uZSBvciBwcm9tcHQgdGhlIHVzZXJcbiAgICAgICAgICBhbnN3ZXIgPSBwcm9tcHQuX2luamVjdGVkID8gZ2V0SW5qZWN0ZWRBbnN3ZXIocHJvbXB0Ll9pbmplY3RlZCwgcXVlc3Rpb24uaW5pdGlhbCkgOiB5aWVsZCBwcm9tcHRzW3R5cGVdKHF1ZXN0aW9uKTtcbiAgICAgICAgICBhbnN3ZXJzW25hbWVdID0gYW5zd2VyID0geWllbGQgZ2V0Rm9ybWF0dGVkQW5zd2VyKHF1ZXN0aW9uLCBhbnN3ZXIsIHRydWUpO1xuICAgICAgICAgIHF1aXQgPSB5aWVsZCBvblN1Ym1pdChxdWVzdGlvbiwgYW5zd2VyLCBhbnN3ZXJzKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgcXVpdCA9ICEoeWllbGQgb25DYW5jZWwocXVlc3Rpb24sIGFuc3dlcnMpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChxdWl0KSByZXR1cm4gYW5zd2VycztcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIF9pdGVyYXRvci5lKGVycik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIF9pdGVyYXRvci5mKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFuc3dlcnM7XG4gIH0pO1xuICByZXR1cm4gX3Byb21wdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufVxuXG5mdW5jdGlvbiBnZXRJbmplY3RlZEFuc3dlcihpbmplY3RlZCwgZGVhZnVsdFZhbHVlKSB7XG4gIGNvbnN0IGFuc3dlciA9IGluamVjdGVkLnNoaWZ0KCk7XG5cbiAgaWYgKGFuc3dlciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgdGhyb3cgYW5zd2VyO1xuICB9XG5cbiAgcmV0dXJuIGFuc3dlciA9PT0gdW5kZWZpbmVkID8gZGVhZnVsdFZhbHVlIDogYW5zd2VyO1xufVxuXG5mdW5jdGlvbiBpbmplY3QoYW5zd2Vycykge1xuICBwcm9tcHQuX2luamVjdGVkID0gKHByb21wdC5faW5qZWN0ZWQgfHwgW10pLmNvbmNhdChhbnN3ZXJzKTtcbn1cblxuZnVuY3Rpb24gb3ZlcnJpZGUoYW5zd2Vycykge1xuICBwcm9tcHQuX292ZXJyaWRlID0gT2JqZWN0LmFzc2lnbih7fSwgYW5zd2Vycyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmFzc2lnbihwcm9tcHQsIHtcbiAgcHJvbXB0LFxuICBwcm9tcHRzLFxuICBpbmplY3QsXG4gIG92ZXJyaWRlXG59KTsiLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gKGtleSwgaXNTZWxlY3QpID0+IHtcbiAgaWYgKGtleS5tZXRhICYmIGtleS5uYW1lICE9PSAnZXNjYXBlJykgcmV0dXJuO1xuICBcbiAgaWYgKGtleS5jdHJsKSB7XG4gICAgaWYgKGtleS5uYW1lID09PSAnYScpIHJldHVybiAnZmlyc3QnO1xuICAgIGlmIChrZXkubmFtZSA9PT0gJ2MnKSByZXR1cm4gJ2Fib3J0JztcbiAgICBpZiAoa2V5Lm5hbWUgPT09ICdkJykgcmV0dXJuICdhYm9ydCc7XG4gICAgaWYgKGtleS5uYW1lID09PSAnZScpIHJldHVybiAnbGFzdCc7XG4gICAgaWYgKGtleS5uYW1lID09PSAnZycpIHJldHVybiAncmVzZXQnO1xuICB9XG4gIFxuICBpZiAoaXNTZWxlY3QpIHtcbiAgICBpZiAoa2V5Lm5hbWUgPT09ICdqJykgcmV0dXJuICdkb3duJztcbiAgICBpZiAoa2V5Lm5hbWUgPT09ICdrJykgcmV0dXJuICd1cCc7XG4gIH1cblxuICBpZiAoa2V5Lm5hbWUgPT09ICdyZXR1cm4nKSByZXR1cm4gJ3N1Ym1pdCc7XG4gIGlmIChrZXkubmFtZSA9PT0gJ2VudGVyJykgcmV0dXJuICdzdWJtaXQnOyAvLyBjdHJsICsgSlxuICBpZiAoa2V5Lm5hbWUgPT09ICdiYWNrc3BhY2UnKSByZXR1cm4gJ2RlbGV0ZSc7XG4gIGlmIChrZXkubmFtZSA9PT0gJ2RlbGV0ZScpIHJldHVybiAnZGVsZXRlRm9yd2FyZCc7XG4gIGlmIChrZXkubmFtZSA9PT0gJ2Fib3J0JykgcmV0dXJuICdhYm9ydCc7XG4gIGlmIChrZXkubmFtZSA9PT0gJ2VzY2FwZScpIHJldHVybiAnZXhpdCc7XG4gIGlmIChrZXkubmFtZSA9PT0gJ3RhYicpIHJldHVybiAnbmV4dCc7XG4gIGlmIChrZXkubmFtZSA9PT0gJ3BhZ2Vkb3duJykgcmV0dXJuICduZXh0UGFnZSc7XG4gIGlmIChrZXkubmFtZSA9PT0gJ3BhZ2V1cCcpIHJldHVybiAncHJldlBhZ2UnO1xuICAvLyBUT0RPIGNyZWF0ZSBob21lKCkgaW4gcHJvbXB0IHR5cGVzIChlLmcuIFRleHRQcm9tcHQpXG4gIGlmIChrZXkubmFtZSA9PT0gJ2hvbWUnKSByZXR1cm4gJ2hvbWUnO1xuICAvLyBUT0RPIGNyZWF0ZSBlbmQoKSBpbiBwcm9tcHQgdHlwZXMgKGUuZy4gVGV4dFByb21wdClcbiAgaWYgKGtleS5uYW1lID09PSAnZW5kJykgcmV0dXJuICdlbmQnO1xuXG4gIGlmIChrZXkubmFtZSA9PT0gJ3VwJykgcmV0dXJuICd1cCc7XG4gIGlmIChrZXkubmFtZSA9PT0gJ2Rvd24nKSByZXR1cm4gJ2Rvd24nO1xuICBpZiAoa2V5Lm5hbWUgPT09ICdyaWdodCcpIHJldHVybiAncmlnaHQnO1xuICBpZiAoa2V5Lm5hbWUgPT09ICdsZWZ0JykgcmV0dXJuICdsZWZ0JztcblxuICByZXR1cm4gZmFsc2U7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHN0ciA9PiB7XG4gIGNvbnN0IHBhdHRlcm4gPSBbXG4gICAgJ1tcXFxcdTAwMUJcXFxcdTAwOUJdW1tcXFxcXSgpIzs/XSooPzooPzooPzooPzo7Wy1hLXpBLVpcXFxcZFxcXFwvIyYuOj0/JUB+X10rKSp8W2EtekEtWlxcXFxkXSsoPzo7Wy1hLXpBLVpcXFxcZFxcXFwvIyYuOj0/JUB+X10qKSopP1xcXFx1MDAwNyknLFxuICAgICcoPzooPzpcXFxcZHsxLDR9KD86O1xcXFxkezAsNH0pKik/W1xcXFxkQS1QUlpjZi1udHFyeT0+PH5dKSknXG4gIF0uam9pbignfCcpO1xuXG4gIGNvbnN0IFJHWCA9IG5ldyBSZWdFeHAocGF0dGVybiwgJ2cnKTtcbiAgcmV0dXJuIHR5cGVvZiBzdHIgPT09ICdzdHJpbmcnID8gc3RyLnJlcGxhY2UoUkdYLCAnJykgOiBzdHI7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBzdHJpcCA9IHJlcXVpcmUoJy4vc3RyaXAnKTtcbmNvbnN0IHsgZXJhc2UsIGN1cnNvciB9ID0gcmVxdWlyZSgnc2lzdGVyYW5zaScpO1xuXG5jb25zdCB3aWR0aCA9IHN0ciA9PiBbLi4uc3RyaXAoc3RyKV0ubGVuZ3RoO1xuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9tcHRcbiAqIEBwYXJhbSB7bnVtYmVyfSBwZXJMaW5lXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ocHJvbXB0LCBwZXJMaW5lKSB7XG4gIGlmICghcGVyTGluZSkgcmV0dXJuIGVyYXNlLmxpbmUgKyBjdXJzb3IudG8oMCk7XG5cbiAgbGV0IHJvd3MgPSAwO1xuICBjb25zdCBsaW5lcyA9IHByb21wdC5zcGxpdCgvXFxyP1xcbi8pO1xuICBmb3IgKGxldCBsaW5lIG9mIGxpbmVzKSB7XG4gICAgcm93cyArPSAxICsgTWF0aC5mbG9vcihNYXRoLm1heCh3aWR0aChsaW5lKSAtIDEsIDApIC8gcGVyTGluZSk7XG4gIH1cblxuICByZXR1cm4gZXJhc2UubGluZXMocm93cyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1x0XG5cbiBjb25zdCBtYWluID0ge1xuICBhcnJvd1VwOiAn4oaRJyxcbiAgYXJyb3dEb3duOiAn4oaTJyxcbiAgYXJyb3dMZWZ0OiAn4oaQJyxcbiAgYXJyb3dSaWdodDogJ+KGkicsXG4gIHJhZGlvT246ICfil4knLFxuICByYWRpb09mZjogJ+KXrycsXG4gIHRpY2s6ICfinJQnLFx0XG4gIGNyb3NzOiAn4pyWJyxcdFxuICBlbGxpcHNpczogJ+KApicsXHRcbiAgcG9pbnRlclNtYWxsOiAn4oC6JyxcdFxuICBsaW5lOiAn4pSAJyxcdFxuICBwb2ludGVyOiAn4p2vJ1x0XG59O1x0XG5jb25zdCB3aW4gPSB7XG4gIGFycm93VXA6IG1haW4uYXJyb3dVcCxcbiAgYXJyb3dEb3duOiBtYWluLmFycm93RG93bixcbiAgYXJyb3dMZWZ0OiBtYWluLmFycm93TGVmdCxcbiAgYXJyb3dSaWdodDogbWFpbi5hcnJvd1JpZ2h0LFxuICByYWRpb09uOiAnKCopJyxcbiAgcmFkaW9PZmY6ICcoICknLFx0XG4gIHRpY2s6ICfiiJonLFx0XG4gIGNyb3NzOiAnw5cnLFx0XG4gIGVsbGlwc2lzOiAnLi4uJyxcdFxuICBwb2ludGVyU21hbGw6ICfCuycsXHRcbiAgbGluZTogJ+KUgCcsXHRcbiAgcG9pbnRlcjogJz4nXHRcbn07XHRcbmNvbnN0IGZpZ3VyZXMgPSBwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInID8gd2luIDogbWFpbjtcdFxuXG4gbW9kdWxlLmV4cG9ydHMgPSBmaWd1cmVzO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBjID0gcmVxdWlyZSgna2xldXInKTtcbmNvbnN0IGZpZ3VyZXMgPSByZXF1aXJlKCcuL2ZpZ3VyZXMnKTtcblxuLy8gcmVuZGVyaW5nIHVzZXIgaW5wdXQuXG5jb25zdCBzdHlsZXMgPSBPYmplY3QuZnJlZXplKHtcbiAgcGFzc3dvcmQ6IHsgc2NhbGU6IDEsIHJlbmRlcjogaW5wdXQgPT4gJyonLnJlcGVhdChpbnB1dC5sZW5ndGgpIH0sXG4gIGVtb2ppOiB7IHNjYWxlOiAyLCByZW5kZXI6IGlucHV0ID0+ICfwn5iDJy5yZXBlYXQoaW5wdXQubGVuZ3RoKSB9LFxuICBpbnZpc2libGU6IHsgc2NhbGU6IDAsIHJlbmRlcjogaW5wdXQgPT4gJycgfSxcbiAgZGVmYXVsdDogeyBzY2FsZTogMSwgcmVuZGVyOiBpbnB1dCA9PiBgJHtpbnB1dH1gIH1cbn0pO1xuY29uc3QgcmVuZGVyID0gdHlwZSA9PiBzdHlsZXNbdHlwZV0gfHwgc3R5bGVzLmRlZmF1bHQ7XG5cbi8vIGljb24gdG8gc2lnbmFsaXplIGEgcHJvbXB0LlxuY29uc3Qgc3ltYm9scyA9IE9iamVjdC5mcmVlemUoe1xuICBhYm9ydGVkOiBjLnJlZChmaWd1cmVzLmNyb3NzKSxcbiAgZG9uZTogYy5ncmVlbihmaWd1cmVzLnRpY2spLFxuICBleGl0ZWQ6IGMueWVsbG93KGZpZ3VyZXMuY3Jvc3MpLFxuICBkZWZhdWx0OiBjLmN5YW4oJz8nKVxufSk7XG5cbmNvbnN0IHN5bWJvbCA9IChkb25lLCBhYm9ydGVkLCBleGl0ZWQpID0+XG4gIGFib3J0ZWQgPyBzeW1ib2xzLmFib3J0ZWQgOiBleGl0ZWQgPyBzeW1ib2xzLmV4aXRlZCA6IGRvbmUgPyBzeW1ib2xzLmRvbmUgOiBzeW1ib2xzLmRlZmF1bHQ7XG5cbi8vIGJldHdlZW4gdGhlIHF1ZXN0aW9uIGFuZCB0aGUgdXNlcidzIGlucHV0LlxuY29uc3QgZGVsaW1pdGVyID0gY29tcGxldGluZyA9PlxuICBjLmdyYXkoY29tcGxldGluZyA/IGZpZ3VyZXMuZWxsaXBzaXMgOiBmaWd1cmVzLnBvaW50ZXJTbWFsbCk7XG5cbmNvbnN0IGl0ZW0gPSAoZXhwYW5kYWJsZSwgZXhwYW5kZWQpID0+XG4gIGMuZ3JheShleHBhbmRhYmxlID8gKGV4cGFuZGVkID8gZmlndXJlcy5wb2ludGVyU21hbGwgOiAnKycpIDogZmlndXJlcy5saW5lKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHN0eWxlcyxcbiAgcmVuZGVyLFxuICBzeW1ib2xzLFxuICBzeW1ib2wsXG4gIGRlbGltaXRlcixcbiAgaXRlbVxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuY29uc3Qgc3RyaXAgPSByZXF1aXJlKCcuL3N0cmlwJyk7XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IG1zZ1xuICogQHBhcmFtIHtudW1iZXJ9IHBlckxpbmVcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobXNnLCBwZXJMaW5lKSB7XG4gIGxldCBsaW5lcyA9IFN0cmluZyhzdHJpcChtc2cpIHx8ICcnKS5zcGxpdCgvXFxyP1xcbi8pO1xuXG4gIGlmICghcGVyTGluZSkgcmV0dXJuIGxpbmVzLmxlbmd0aDtcbiAgcmV0dXJuIGxpbmVzLm1hcChsID0+IE1hdGguY2VpbChsLmxlbmd0aCAvIHBlckxpbmUpKVxuICAgICAgLnJlZHVjZSgoYSwgYikgPT4gYSArIGIpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gbXNnIFRoZSBtZXNzYWdlIHRvIHdyYXBcbiAqIEBwYXJhbSB7b2JqZWN0fSBvcHRzXG4gKiBAcGFyYW0ge251bWJlcnxzdHJpbmd9IFtvcHRzLm1hcmdpbl0gTGVmdCBtYXJnaW5cbiAqIEBwYXJhbSB7bnVtYmVyfSBvcHRzLndpZHRoIE1heGltdW0gY2hhcmFjdGVycyBwZXIgbGluZSBpbmNsdWRpbmcgdGhlIG1hcmdpblxuICovXG5tb2R1bGUuZXhwb3J0cyA9IChtc2csIG9wdHMgPSB7fSkgPT4ge1xuICBjb25zdCB0YWIgPSBOdW1iZXIuaXNTYWZlSW50ZWdlcihwYXJzZUludChvcHRzLm1hcmdpbikpXG4gICAgPyBuZXcgQXJyYXkocGFyc2VJbnQob3B0cy5tYXJnaW4pKS5maWxsKCcgJykuam9pbignJylcbiAgICA6IChvcHRzLm1hcmdpbiB8fCAnJyk7XG5cbiAgY29uc3Qgd2lkdGggPSBvcHRzLndpZHRoO1xuXG4gIHJldHVybiAobXNnIHx8ICcnKS5zcGxpdCgvXFxyP1xcbi9nKVxuICAgIC5tYXAobGluZSA9PiBsaW5lXG4gICAgICAuc3BsaXQoL1xccysvZylcbiAgICAgIC5yZWR1Y2UoKGFyciwgdykgPT4ge1xuICAgICAgICBpZiAody5sZW5ndGggKyB0YWIubGVuZ3RoID49IHdpZHRoIHx8IGFyclthcnIubGVuZ3RoIC0gMV0ubGVuZ3RoICsgdy5sZW5ndGggKyAxIDwgd2lkdGgpXG4gICAgICAgICAgYXJyW2Fyci5sZW5ndGggLSAxXSArPSBgICR7d31gO1xuICAgICAgICBlbHNlIGFyci5wdXNoKGAke3RhYn0ke3d9YCk7XG4gICAgICAgIHJldHVybiBhcnI7XG4gICAgICB9LCBbIHRhYiBdKVxuICAgICAgLmpvaW4oJ1xcbicpKVxuICAgIC5qb2luKCdcXG4nKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogRGV0ZXJtaW5lIHdoYXQgZW50cmllcyBzaG91bGQgYmUgZGlzcGxheWVkIG9uIHRoZSBzY3JlZW4sIGJhc2VkIG9uIHRoZVxuICogY3VycmVudGx5IHNlbGVjdGVkIGluZGV4IGFuZCB0aGUgbWF4aW11bSB2aXNpYmxlLiBVc2VkIGluIGxpc3QtYmFzZWRcbiAqIHByb21wdHMgbGlrZSBgc2VsZWN0YCBhbmQgYG11bHRpc2VsZWN0YC5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gY3Vyc29yIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgZW50cnlcbiAqIEBwYXJhbSB7bnVtYmVyfSB0b3RhbCB0aGUgdG90YWwgZW50cmllcyBhdmFpbGFibGUgdG8gZGlzcGxheVxuICogQHBhcmFtIHtudW1iZXJ9IFttYXhWaXNpYmxlXSB0aGUgbnVtYmVyIG9mIGVudHJpZXMgdGhhdCBjYW4gYmUgZGlzcGxheWVkXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gKGN1cnNvciwgdG90YWwsIG1heFZpc2libGUpICA9PiB7XG4gIG1heFZpc2libGUgPSBtYXhWaXNpYmxlIHx8IHRvdGFsO1xuXG4gIGxldCBzdGFydEluZGV4ID0gTWF0aC5taW4odG90YWwtIG1heFZpc2libGUsIGN1cnNvciAtIE1hdGguZmxvb3IobWF4VmlzaWJsZSAvIDIpKTtcbiAgaWYgKHN0YXJ0SW5kZXggPCAwKSBzdGFydEluZGV4ID0gMDtcblxuICBsZXQgZW5kSW5kZXggPSBNYXRoLm1pbihzdGFydEluZGV4ICsgbWF4VmlzaWJsZSwgdG90YWwpO1xuXG4gIHJldHVybiB7IHN0YXJ0SW5kZXgsIGVuZEluZGV4IH07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgYWN0aW9uOiByZXF1aXJlKCcuL2FjdGlvbicpLFxuICBjbGVhcjogcmVxdWlyZSgnLi9jbGVhcicpLFxuICBzdHlsZTogcmVxdWlyZSgnLi9zdHlsZScpLFxuICBzdHJpcDogcmVxdWlyZSgnLi9zdHJpcCcpLFxuICBmaWd1cmVzOiByZXF1aXJlKCcuL2ZpZ3VyZXMnKSxcbiAgbGluZXM6IHJlcXVpcmUoJy4vbGluZXMnKSxcbiAgd3JhcDogcmVxdWlyZSgnLi93cmFwJyksXG4gIGVudHJpZXNUb0Rpc3BsYXk6IHJlcXVpcmUoJy4vZW50cmllc1RvRGlzcGxheScpXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCByZWFkbGluZSA9IHJlcXVpcmUoJ3JlYWRsaW5lJyk7XG5jb25zdCB7IGFjdGlvbiB9ID0gcmVxdWlyZSgnLi4vdXRpbCcpO1xuY29uc3QgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRzJyk7XG5jb25zdCB7IGJlZXAsIGN1cnNvciB9ID0gcmVxdWlyZSgnc2lzdGVyYW5zaScpO1xuY29uc3QgY29sb3IgPSByZXF1aXJlKCdrbGV1cicpO1xuXG4vKipcbiAqIEJhc2UgcHJvbXB0IHNrZWxldG9uXG4gKiBAcGFyYW0ge1N0cmVhbX0gW29wdHMuc3RkaW5dIFRoZSBSZWFkYWJsZSBzdHJlYW0gdG8gbGlzdGVuIHRvXG4gKiBAcGFyYW0ge1N0cmVhbX0gW29wdHMuc3Rkb3V0XSBUaGUgV3JpdGFibGUgc3RyZWFtIHRvIHdyaXRlIHJlYWRsaW5lIGRhdGEgdG9cbiAqL1xuY2xhc3MgUHJvbXB0IGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcbiAgY29uc3RydWN0b3Iob3B0cz17fSkge1xuICAgIHN1cGVyKCk7XG5cbiAgICB0aGlzLmZpcnN0UmVuZGVyID0gdHJ1ZTtcbiAgICB0aGlzLmluID0gb3B0cy5zdGRpbiB8fCBwcm9jZXNzLnN0ZGluO1xuICAgIHRoaXMub3V0ID0gb3B0cy5zdGRvdXQgfHwgcHJvY2Vzcy5zdGRvdXQ7XG4gICAgdGhpcy5vblJlbmRlciA9IChvcHRzLm9uUmVuZGVyIHx8ICgoKSA9PiB2b2lkIDApKS5iaW5kKHRoaXMpO1xuICAgIGNvbnN0IHJsID0gcmVhZGxpbmUuY3JlYXRlSW50ZXJmYWNlKHsgaW5wdXQ6dGhpcy5pbiwgZXNjYXBlQ29kZVRpbWVvdXQ6NTAgfSk7XG4gICAgcmVhZGxpbmUuZW1pdEtleXByZXNzRXZlbnRzKHRoaXMuaW4sIHJsKTtcblxuICAgIGlmICh0aGlzLmluLmlzVFRZKSB0aGlzLmluLnNldFJhd01vZGUodHJ1ZSk7XG4gICAgY29uc3QgaXNTZWxlY3QgPSBbICdTZWxlY3RQcm9tcHQnLCAnTXVsdGlzZWxlY3RQcm9tcHQnIF0uaW5kZXhPZih0aGlzLmNvbnN0cnVjdG9yLm5hbWUpID4gLTE7XG4gICAgY29uc3Qga2V5cHJlc3MgPSAoc3RyLCBrZXkpID0+IHtcbiAgICAgIGxldCBhID0gYWN0aW9uKGtleSwgaXNTZWxlY3QpO1xuICAgICAgaWYgKGEgPT09IGZhbHNlKSB7XG4gICAgICAgIHRoaXMuXyAmJiB0aGlzLl8oc3RyLCBrZXkpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGhpc1thXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzW2FdKGtleSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmJlbGwoKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy5jbG9zZSA9ICgpID0+IHtcbiAgICAgIHRoaXMub3V0LndyaXRlKGN1cnNvci5zaG93KTtcbiAgICAgIHRoaXMuaW4ucmVtb3ZlTGlzdGVuZXIoJ2tleXByZXNzJywga2V5cHJlc3MpO1xuICAgICAgaWYgKHRoaXMuaW4uaXNUVFkpIHRoaXMuaW4uc2V0UmF3TW9kZShmYWxzZSk7XG4gICAgICBybC5jbG9zZSgpO1xuICAgICAgdGhpcy5lbWl0KHRoaXMuYWJvcnRlZCA/ICdhYm9ydCcgOiB0aGlzLmV4aXRlZCA/ICdleGl0JyA6ICdzdWJtaXQnLCB0aGlzLnZhbHVlKTtcbiAgICAgIHRoaXMuY2xvc2VkID0gdHJ1ZTtcbiAgICB9O1xuXG4gICAgdGhpcy5pbi5vbigna2V5cHJlc3MnLCBrZXlwcmVzcyk7XG4gIH1cblxuICBmaXJlKCkge1xuICAgIHRoaXMuZW1pdCgnc3RhdGUnLCB7XG4gICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgIGFib3J0ZWQ6ICEhdGhpcy5hYm9ydGVkLFxuICAgICAgZXhpdGVkOiAhIXRoaXMuZXhpdGVkXG4gICAgfSk7XG4gIH1cblxuICBiZWxsKCkge1xuICAgIHRoaXMub3V0LndyaXRlKGJlZXApO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIHRoaXMub25SZW5kZXIoY29sb3IpO1xuICAgIGlmICh0aGlzLmZpcnN0UmVuZGVyKSB0aGlzLmZpcnN0UmVuZGVyID0gZmFsc2U7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBQcm9tcHQ7XG4iLCJjb25zdCBjb2xvciA9IHJlcXVpcmUoJ2tsZXVyJyk7XG5jb25zdCBQcm9tcHQgPSByZXF1aXJlKCcuL3Byb21wdCcpO1xuY29uc3QgeyBlcmFzZSwgY3Vyc29yIH0gPSByZXF1aXJlKCdzaXN0ZXJhbnNpJyk7XG5jb25zdCB7IHN0eWxlLCBjbGVhciwgbGluZXMsIGZpZ3VyZXMgfSA9IHJlcXVpcmUoJy4uL3V0aWwnKTtcblxuLyoqXG4gKiBUZXh0UHJvbXB0IEJhc2UgRWxlbWVudFxuICogQHBhcmFtIHtPYmplY3R9IG9wdHMgT3B0aW9uc1xuICogQHBhcmFtIHtTdHJpbmd9IG9wdHMubWVzc2FnZSBNZXNzYWdlXG4gKiBAcGFyYW0ge1N0cmluZ30gW29wdHMuc3R5bGU9J2RlZmF1bHQnXSBSZW5kZXIgc3R5bGVcbiAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5pbml0aWFsXSBEZWZhdWx0IHZhbHVlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0cy52YWxpZGF0ZV0gVmFsaWRhdGUgZnVuY3Rpb25cbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLmVycm9yXSBUaGUgaW52YWxpZCBlcnJvciBsYWJlbFxuICovXG5jbGFzcyBUZXh0UHJvbXB0IGV4dGVuZHMgUHJvbXB0IHtcbiAgY29uc3RydWN0b3Iob3B0cz17fSkge1xuICAgIHN1cGVyKG9wdHMpO1xuICAgIHRoaXMudHJhbnNmb3JtID0gc3R5bGUucmVuZGVyKG9wdHMuc3R5bGUpO1xuICAgIHRoaXMuc2NhbGUgPSB0aGlzLnRyYW5zZm9ybS5zY2FsZTtcbiAgICB0aGlzLm1zZyA9IG9wdHMubWVzc2FnZTtcbiAgICB0aGlzLmluaXRpYWwgPSBvcHRzLmluaXRpYWwgfHwgYGA7XG4gICAgdGhpcy52YWxpZGF0b3IgPSBvcHRzLnZhbGlkYXRlIHx8ICgoKSA9PiB0cnVlKTtcbiAgICB0aGlzLnZhbHVlID0gYGA7XG4gICAgdGhpcy5lcnJvck1zZyA9IG9wdHMuZXJyb3IgfHwgYFBsZWFzZSBFbnRlciBBIFZhbGlkIFZhbHVlYDtcbiAgICB0aGlzLmN1cnNvciA9IE51bWJlcighIXRoaXMuaW5pdGlhbCk7XG4gICAgdGhpcy5jdXJzb3JPZmZzZXQgPSAwO1xuICAgIHRoaXMuY2xlYXIgPSBjbGVhcihgYCwgdGhpcy5vdXQuY29sdW1ucyk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHNldCB2YWx1ZSh2KSB7XG4gICAgaWYgKCF2ICYmIHRoaXMuaW5pdGlhbCkge1xuICAgICAgdGhpcy5wbGFjZWhvbGRlciA9IHRydWU7XG4gICAgICB0aGlzLnJlbmRlcmVkID0gY29sb3IuZ3JheSh0aGlzLnRyYW5zZm9ybS5yZW5kZXIodGhpcy5pbml0aWFsKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucGxhY2Vob2xkZXIgPSBmYWxzZTtcbiAgICAgIHRoaXMucmVuZGVyZWQgPSB0aGlzLnRyYW5zZm9ybS5yZW5kZXIodik7XG4gICAgfVxuICAgIHRoaXMuX3ZhbHVlID0gdjtcbiAgICB0aGlzLmZpcmUoKTtcbiAgfVxuXG4gIGdldCB2YWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gIH1cblxuICByZXNldCgpIHtcbiAgICB0aGlzLnZhbHVlID0gYGA7XG4gICAgdGhpcy5jdXJzb3IgPSBOdW1iZXIoISF0aGlzLmluaXRpYWwpO1xuICAgIHRoaXMuY3Vyc29yT2Zmc2V0ID0gMDtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZXhpdCgpIHtcbiAgICB0aGlzLmFib3J0KCk7XG4gIH1cblxuICBhYm9ydCgpIHtcbiAgICB0aGlzLnZhbHVlID0gdGhpcy52YWx1ZSB8fCB0aGlzLmluaXRpYWw7XG4gICAgdGhpcy5kb25lID0gdGhpcy5hYm9ydGVkID0gdHJ1ZTtcbiAgICB0aGlzLmVycm9yID0gZmFsc2U7XG4gICAgdGhpcy5yZWQgPSBmYWxzZTtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICAgIHRoaXMub3V0LndyaXRlKCdcXG4nKTtcbiAgICB0aGlzLmNsb3NlKCk7XG4gIH1cblxuICBhc3luYyB2YWxpZGF0ZSgpIHtcbiAgICBsZXQgdmFsaWQgPSBhd2FpdCB0aGlzLnZhbGlkYXRvcih0aGlzLnZhbHVlKTtcbiAgICBpZiAodHlwZW9mIHZhbGlkID09PSBgc3RyaW5nYCkge1xuICAgICAgdGhpcy5lcnJvck1zZyA9IHZhbGlkO1xuICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5lcnJvciA9ICF2YWxpZDtcbiAgfVxuXG4gIGFzeW5jIHN1Ym1pdCgpIHtcbiAgICB0aGlzLnZhbHVlID0gdGhpcy52YWx1ZSB8fCB0aGlzLmluaXRpYWw7XG4gICAgdGhpcy5jdXJzb3JPZmZzZXQgPSAwO1xuICAgIHRoaXMuY3Vyc29yID0gdGhpcy5yZW5kZXJlZC5sZW5ndGg7XG4gICAgYXdhaXQgdGhpcy52YWxpZGF0ZSgpO1xuICAgIGlmICh0aGlzLmVycm9yKSB7XG4gICAgICB0aGlzLnJlZCA9IHRydWU7XG4gICAgICB0aGlzLmZpcmUoKTtcbiAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuZG9uZSA9IHRydWU7XG4gICAgdGhpcy5hYm9ydGVkID0gZmFsc2U7XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgICB0aGlzLm91dC53cml0ZSgnXFxuJyk7XG4gICAgdGhpcy5jbG9zZSgpO1xuICB9XG5cbiAgbmV4dCgpIHtcbiAgICBpZiAoIXRoaXMucGxhY2Vob2xkZXIpIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgICB0aGlzLnZhbHVlID0gdGhpcy5pbml0aWFsO1xuICAgIHRoaXMuY3Vyc29yID0gdGhpcy5yZW5kZXJlZC5sZW5ndGg7XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIG1vdmVDdXJzb3Iobikge1xuICAgIGlmICh0aGlzLnBsYWNlaG9sZGVyKSByZXR1cm47XG4gICAgdGhpcy5jdXJzb3IgPSB0aGlzLmN1cnNvcituO1xuICAgIHRoaXMuY3Vyc29yT2Zmc2V0ICs9IG47XG4gIH1cblxuICBfKGMsIGtleSkge1xuICAgIGxldCBzMSA9IHRoaXMudmFsdWUuc2xpY2UoMCwgdGhpcy5jdXJzb3IpO1xuICAgIGxldCBzMiA9IHRoaXMudmFsdWUuc2xpY2UodGhpcy5jdXJzb3IpO1xuICAgIHRoaXMudmFsdWUgPSBgJHtzMX0ke2N9JHtzMn1gO1xuICAgIHRoaXMucmVkID0gZmFsc2U7XG4gICAgdGhpcy5jdXJzb3IgPSB0aGlzLnBsYWNlaG9sZGVyID8gMCA6IHMxLmxlbmd0aCsxO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBkZWxldGUoKSB7XG4gICAgaWYgKHRoaXMuaXNDdXJzb3JBdFN0YXJ0KCkpIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgICBsZXQgczEgPSB0aGlzLnZhbHVlLnNsaWNlKDAsIHRoaXMuY3Vyc29yLTEpO1xuICAgIGxldCBzMiA9IHRoaXMudmFsdWUuc2xpY2UodGhpcy5jdXJzb3IpO1xuICAgIHRoaXMudmFsdWUgPSBgJHtzMX0ke3MyfWA7XG4gICAgdGhpcy5yZWQgPSBmYWxzZTtcbiAgICBpZiAodGhpcy5pc0N1cnNvckF0U3RhcnQoKSkge1xuICAgICAgdGhpcy5jdXJzb3JPZmZzZXQgPSAwXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY3Vyc29yT2Zmc2V0Kys7XG4gICAgICB0aGlzLm1vdmVDdXJzb3IoLTEpO1xuICAgIH1cbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZGVsZXRlRm9yd2FyZCgpIHtcbiAgICBpZih0aGlzLmN1cnNvcip0aGlzLnNjYWxlID49IHRoaXMucmVuZGVyZWQubGVuZ3RoIHx8IHRoaXMucGxhY2Vob2xkZXIpIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgICBsZXQgczEgPSB0aGlzLnZhbHVlLnNsaWNlKDAsIHRoaXMuY3Vyc29yKTtcbiAgICBsZXQgczIgPSB0aGlzLnZhbHVlLnNsaWNlKHRoaXMuY3Vyc29yKzEpO1xuICAgIHRoaXMudmFsdWUgPSBgJHtzMX0ke3MyfWA7XG4gICAgdGhpcy5yZWQgPSBmYWxzZTtcbiAgICBpZiAodGhpcy5pc0N1cnNvckF0RW5kKCkpIHtcbiAgICAgIHRoaXMuY3Vyc29yT2Zmc2V0ID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jdXJzb3JPZmZzZXQrKztcbiAgICB9XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIGZpcnN0KCkge1xuICAgIHRoaXMuY3Vyc29yID0gMDtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgbGFzdCgpIHtcbiAgICB0aGlzLmN1cnNvciA9IHRoaXMudmFsdWUubGVuZ3RoO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBsZWZ0KCkge1xuICAgIGlmICh0aGlzLmN1cnNvciA8PSAwIHx8IHRoaXMucGxhY2Vob2xkZXIpIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgICB0aGlzLm1vdmVDdXJzb3IoLTEpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICByaWdodCgpIHtcbiAgICBpZiAodGhpcy5jdXJzb3IqdGhpcy5zY2FsZSA+PSB0aGlzLnJlbmRlcmVkLmxlbmd0aCB8fCB0aGlzLnBsYWNlaG9sZGVyKSByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgdGhpcy5tb3ZlQ3Vyc29yKDEpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBpc0N1cnNvckF0U3RhcnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY3Vyc29yID09PSAwIHx8ICh0aGlzLnBsYWNlaG9sZGVyICYmIHRoaXMuY3Vyc29yID09PSAxKTtcbiAgfVxuXG4gIGlzQ3Vyc29yQXRFbmQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY3Vyc29yID09PSB0aGlzLnJlbmRlcmVkLmxlbmd0aCB8fCAodGhpcy5wbGFjZWhvbGRlciAmJiB0aGlzLmN1cnNvciA9PT0gdGhpcy5yZW5kZXJlZC5sZW5ndGggKyAxKVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGlmICh0aGlzLmNsb3NlZCkgcmV0dXJuO1xuICAgIGlmICghdGhpcy5maXJzdFJlbmRlcikge1xuICAgICAgaWYgKHRoaXMub3V0cHV0RXJyb3IpXG4gICAgICAgIHRoaXMub3V0LndyaXRlKGN1cnNvci5kb3duKGxpbmVzKHRoaXMub3V0cHV0RXJyb3IsIHRoaXMub3V0LmNvbHVtbnMpIC0gMSkgKyBjbGVhcih0aGlzLm91dHB1dEVycm9yLCB0aGlzLm91dC5jb2x1bW5zKSk7XG4gICAgICB0aGlzLm91dC53cml0ZShjbGVhcih0aGlzLm91dHB1dFRleHQsIHRoaXMub3V0LmNvbHVtbnMpKTtcbiAgICB9XG4gICAgc3VwZXIucmVuZGVyKCk7XG4gICAgdGhpcy5vdXRwdXRFcnJvciA9ICcnO1xuXG4gICAgdGhpcy5vdXRwdXRUZXh0ID0gW1xuICAgICAgc3R5bGUuc3ltYm9sKHRoaXMuZG9uZSwgdGhpcy5hYm9ydGVkKSxcbiAgICAgIGNvbG9yLmJvbGQodGhpcy5tc2cpLFxuICAgICAgc3R5bGUuZGVsaW1pdGVyKHRoaXMuZG9uZSksXG4gICAgICB0aGlzLnJlZCA/IGNvbG9yLnJlZCh0aGlzLnJlbmRlcmVkKSA6IHRoaXMucmVuZGVyZWRcbiAgICBdLmpvaW4oYCBgKTtcblxuICAgIGlmICh0aGlzLmVycm9yKSB7XG4gICAgICB0aGlzLm91dHB1dEVycm9yICs9IHRoaXMuZXJyb3JNc2cuc3BsaXQoYFxcbmApXG4gICAgICAgICAgLnJlZHVjZSgoYSwgbCwgaSkgPT4gYSArIGBcXG4ke2kgPyAnICcgOiBmaWd1cmVzLnBvaW50ZXJTbWFsbH0gJHtjb2xvci5yZWQoKS5pdGFsaWMobCl9YCwgYGApO1xuICAgIH1cblxuICAgIHRoaXMub3V0LndyaXRlKGVyYXNlLmxpbmUgKyBjdXJzb3IudG8oMCkgKyB0aGlzLm91dHB1dFRleHQgKyBjdXJzb3Iuc2F2ZSArIHRoaXMub3V0cHV0RXJyb3IgKyBjdXJzb3IucmVzdG9yZSArIGN1cnNvci5tb3ZlKHRoaXMuY3Vyc29yT2Zmc2V0LCAwKSk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBUZXh0UHJvbXB0OyIsIid1c2Ugc3RyaWN0JztcblxuY29uc3QgY29sb3IgPSByZXF1aXJlKCdrbGV1cicpO1xuY29uc3QgUHJvbXB0ID0gcmVxdWlyZSgnLi9wcm9tcHQnKTtcbmNvbnN0IHsgc3R5bGUsIGNsZWFyLCBmaWd1cmVzLCB3cmFwLCBlbnRyaWVzVG9EaXNwbGF5IH0gPSByZXF1aXJlKCcuLi91dGlsJyk7XG5jb25zdCB7IGN1cnNvciB9ID0gcmVxdWlyZSgnc2lzdGVyYW5zaScpO1xuXG4vKipcbiAqIFNlbGVjdFByb21wdCBCYXNlIEVsZW1lbnRcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIE9wdGlvbnNcbiAqIEBwYXJhbSB7U3RyaW5nfSBvcHRzLm1lc3NhZ2UgTWVzc2FnZVxuICogQHBhcmFtIHtBcnJheX0gb3B0cy5jaG9pY2VzIEFycmF5IG9mIGNob2ljZSBvYmplY3RzXG4gKiBAcGFyYW0ge1N0cmluZ30gW29wdHMuaGludF0gSGludCB0byBkaXNwbGF5XG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMuaW5pdGlhbF0gSW5kZXggb2YgZGVmYXVsdCB2YWx1ZVxuICogQHBhcmFtIHtTdHJlYW19IFtvcHRzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFtvcHRzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMub3B0aW9uc1BlclBhZ2U9MTBdIE1heCBvcHRpb25zIHRvIGRpc3BsYXkgYXQgb25jZVxuICovXG5jbGFzcyBTZWxlY3RQcm9tcHQgZXh0ZW5kcyBQcm9tcHQge1xuICBjb25zdHJ1Y3RvcihvcHRzPXt9KSB7XG4gICAgc3VwZXIob3B0cyk7XG4gICAgdGhpcy5tc2cgPSBvcHRzLm1lc3NhZ2U7XG4gICAgdGhpcy5oaW50ID0gb3B0cy5oaW50IHx8ICctIFVzZSBhcnJvdy1rZXlzLiBSZXR1cm4gdG8gc3VibWl0Lic7XG4gICAgdGhpcy53YXJuID0gb3B0cy53YXJuIHx8ICctIFRoaXMgb3B0aW9uIGlzIGRpc2FibGVkJztcbiAgICB0aGlzLmN1cnNvciA9IG9wdHMuaW5pdGlhbCB8fCAwO1xuICAgIHRoaXMuY2hvaWNlcyA9IG9wdHMuY2hvaWNlcy5tYXAoKGNoLCBpZHgpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgY2ggPT09ICdzdHJpbmcnKVxuICAgICAgICBjaCA9IHt0aXRsZTogY2gsIHZhbHVlOiBpZHh9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdGl0bGU6IGNoICYmIChjaC50aXRsZSB8fCBjaC52YWx1ZSB8fCBjaCksXG4gICAgICAgIHZhbHVlOiBjaCAmJiAoY2gudmFsdWUgPT09IHVuZGVmaW5lZCA/IGlkeCA6IGNoLnZhbHVlKSxcbiAgICAgICAgZGVzY3JpcHRpb246IGNoICYmIGNoLmRlc2NyaXB0aW9uLFxuICAgICAgICBzZWxlY3RlZDogY2ggJiYgY2guc2VsZWN0ZWQsXG4gICAgICAgIGRpc2FibGVkOiBjaCAmJiBjaC5kaXNhYmxlZFxuICAgICAgfTtcbiAgICB9KTtcbiAgICB0aGlzLm9wdGlvbnNQZXJQYWdlID0gb3B0cy5vcHRpb25zUGVyUGFnZSB8fCAxMDtcbiAgICB0aGlzLnZhbHVlID0gKHRoaXMuY2hvaWNlc1t0aGlzLmN1cnNvcl0gfHwge30pLnZhbHVlO1xuICAgIHRoaXMuY2xlYXIgPSBjbGVhcignJywgdGhpcy5vdXQuY29sdW1ucyk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIG1vdmVDdXJzb3Iobikge1xuICAgIHRoaXMuY3Vyc29yID0gbjtcbiAgICB0aGlzLnZhbHVlID0gdGhpcy5jaG9pY2VzW25dLnZhbHVlO1xuICAgIHRoaXMuZmlyZSgpO1xuICB9XG5cbiAgcmVzZXQoKSB7XG4gICAgdGhpcy5tb3ZlQ3Vyc29yKDApO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBleGl0KCkge1xuICAgIHRoaXMuYWJvcnQoKTtcbiAgfVxuXG4gIGFib3J0KCkge1xuICAgIHRoaXMuZG9uZSA9IHRoaXMuYWJvcnRlZCA9IHRydWU7XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgICB0aGlzLm91dC53cml0ZSgnXFxuJyk7XG4gICAgdGhpcy5jbG9zZSgpO1xuICB9XG5cbiAgc3VibWl0KCkge1xuICAgIGlmICghdGhpcy5zZWxlY3Rpb24uZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuZG9uZSA9IHRydWU7XG4gICAgICB0aGlzLmFib3J0ZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuZmlyZSgpO1xuICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICAgIHRoaXMub3V0LndyaXRlKCdcXG4nKTtcbiAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICB9IGVsc2VcbiAgICAgIHRoaXMuYmVsbCgpO1xuICB9XG5cbiAgZmlyc3QoKSB7XG4gICAgdGhpcy5tb3ZlQ3Vyc29yKDApO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBsYXN0KCkge1xuICAgIHRoaXMubW92ZUN1cnNvcih0aGlzLmNob2ljZXMubGVuZ3RoIC0gMSk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHVwKCkge1xuICAgIGlmICh0aGlzLmN1cnNvciA9PT0gMCkge1xuICAgICAgdGhpcy5tb3ZlQ3Vyc29yKHRoaXMuY2hvaWNlcy5sZW5ndGggLSAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5tb3ZlQ3Vyc29yKHRoaXMuY3Vyc29yIC0gMSk7XG4gICAgfVxuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBkb3duKCkge1xuICAgIGlmICh0aGlzLmN1cnNvciA9PT0gdGhpcy5jaG9pY2VzLmxlbmd0aCAtIDEpIHtcbiAgICAgIHRoaXMubW92ZUN1cnNvcigwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5tb3ZlQ3Vyc29yKHRoaXMuY3Vyc29yICsgMSk7XG4gICAgfVxuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBuZXh0KCkge1xuICAgIHRoaXMubW92ZUN1cnNvcigodGhpcy5jdXJzb3IgKyAxKSAlIHRoaXMuY2hvaWNlcy5sZW5ndGgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBfKGMsIGtleSkge1xuICAgIGlmIChjID09PSAnICcpIHJldHVybiB0aGlzLnN1Ym1pdCgpO1xuICB9XG5cbiAgZ2V0IHNlbGVjdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5jaG9pY2VzW3RoaXMuY3Vyc29yXTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBpZiAodGhpcy5jbG9zZWQpIHJldHVybjtcbiAgICBpZiAodGhpcy5maXJzdFJlbmRlcikgdGhpcy5vdXQud3JpdGUoY3Vyc29yLmhpZGUpO1xuICAgIGVsc2UgdGhpcy5vdXQud3JpdGUoY2xlYXIodGhpcy5vdXRwdXRUZXh0LCB0aGlzLm91dC5jb2x1bW5zKSk7XG4gICAgc3VwZXIucmVuZGVyKCk7XG5cbiAgICBsZXQgeyBzdGFydEluZGV4LCBlbmRJbmRleCB9ID0gZW50cmllc1RvRGlzcGxheSh0aGlzLmN1cnNvciwgdGhpcy5jaG9pY2VzLmxlbmd0aCwgdGhpcy5vcHRpb25zUGVyUGFnZSk7XG5cbiAgICAvLyBQcmludCBwcm9tcHRcbiAgICB0aGlzLm91dHB1dFRleHQgPSBbXG4gICAgICBzdHlsZS5zeW1ib2wodGhpcy5kb25lLCB0aGlzLmFib3J0ZWQpLFxuICAgICAgY29sb3IuYm9sZCh0aGlzLm1zZyksXG4gICAgICBzdHlsZS5kZWxpbWl0ZXIoZmFsc2UpLFxuICAgICAgdGhpcy5kb25lID8gdGhpcy5zZWxlY3Rpb24udGl0bGUgOiB0aGlzLnNlbGVjdGlvbi5kaXNhYmxlZFxuICAgICAgICAgID8gY29sb3IueWVsbG93KHRoaXMud2FybikgOiBjb2xvci5ncmF5KHRoaXMuaGludClcbiAgICBdLmpvaW4oJyAnKTtcblxuICAgIC8vIFByaW50IGNob2ljZXNcbiAgICBpZiAoIXRoaXMuZG9uZSkge1xuICAgICAgdGhpcy5vdXRwdXRUZXh0ICs9ICdcXG4nO1xuICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0SW5kZXg7IGkgPCBlbmRJbmRleDsgaSsrKSB7XG4gICAgICAgIGxldCB0aXRsZSwgcHJlZml4LCBkZXNjID0gJycsIHYgPSB0aGlzLmNob2ljZXNbaV07XG5cbiAgICAgICAgLy8gRGV0ZXJtaW5lIHdoZXRoZXIgdG8gZGlzcGxheSBcIm1vcmUgY2hvaWNlc1wiIGluZGljYXRvcnNcbiAgICAgICAgaWYgKGkgPT09IHN0YXJ0SW5kZXggJiYgc3RhcnRJbmRleCA+IDApIHtcbiAgICAgICAgICBwcmVmaXggPSBmaWd1cmVzLmFycm93VXA7XG4gICAgICAgIH0gZWxzZSBpZiAoaSA9PT0gZW5kSW5kZXggLSAxICYmIGVuZEluZGV4IDwgdGhpcy5jaG9pY2VzLmxlbmd0aCkge1xuICAgICAgICAgIHByZWZpeCA9IGZpZ3VyZXMuYXJyb3dEb3duO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByZWZpeCA9ICcgJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2LmRpc2FibGVkKSB7XG4gICAgICAgICAgdGl0bGUgPSB0aGlzLmN1cnNvciA9PT0gaSA/IGNvbG9yLmdyYXkoKS51bmRlcmxpbmUodi50aXRsZSkgOiBjb2xvci5zdHJpa2V0aHJvdWdoKCkuZ3JheSh2LnRpdGxlKTtcbiAgICAgICAgICBwcmVmaXggPSAodGhpcy5jdXJzb3IgPT09IGkgPyBjb2xvci5ib2xkKCkuZ3JheShmaWd1cmVzLnBvaW50ZXIpICsgJyAnIDogJyAgJykgKyBwcmVmaXg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGl0bGUgPSB0aGlzLmN1cnNvciA9PT0gaSA/IGNvbG9yLmN5YW4oKS51bmRlcmxpbmUodi50aXRsZSkgOiB2LnRpdGxlO1xuICAgICAgICAgIHByZWZpeCA9ICh0aGlzLmN1cnNvciA9PT0gaSA/IGNvbG9yLmN5YW4oZmlndXJlcy5wb2ludGVyKSArICcgJyA6ICcgICcpICsgcHJlZml4O1xuICAgICAgICAgIGlmICh2LmRlc2NyaXB0aW9uICYmIHRoaXMuY3Vyc29yID09PSBpKSB7XG4gICAgICAgICAgICBkZXNjID0gYCAtICR7di5kZXNjcmlwdGlvbn1gO1xuICAgICAgICAgICAgaWYgKHByZWZpeC5sZW5ndGggKyB0aXRsZS5sZW5ndGggKyBkZXNjLmxlbmd0aCA+PSB0aGlzLm91dC5jb2x1bW5zXG4gICAgICAgICAgICAgICAgfHwgdi5kZXNjcmlwdGlvbi5zcGxpdCgvXFxyP1xcbi8pLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgZGVzYyA9ICdcXG4nICsgd3JhcCh2LmRlc2NyaXB0aW9uLCB7IG1hcmdpbjogMywgd2lkdGg6IHRoaXMub3V0LmNvbHVtbnMgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5vdXRwdXRUZXh0ICs9IGAke3ByZWZpeH0gJHt0aXRsZX0ke2NvbG9yLmdyYXkoZGVzYyl9XFxuYDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLm91dC53cml0ZSh0aGlzLm91dHB1dFRleHQpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gU2VsZWN0UHJvbXB0O1xuIiwiY29uc3QgY29sb3IgPSByZXF1aXJlKCdrbGV1cicpO1xuY29uc3QgUHJvbXB0ID0gcmVxdWlyZSgnLi9wcm9tcHQnKTtcbmNvbnN0IHsgc3R5bGUsIGNsZWFyIH0gPSByZXF1aXJlKCcuLi91dGlsJyk7XG5jb25zdCB7IGN1cnNvciwgZXJhc2UgfSA9IHJlcXVpcmUoJ3Npc3RlcmFuc2knKTtcblxuLyoqXG4gKiBUb2dnbGVQcm9tcHQgQmFzZSBFbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyBPcHRpb25zXG4gKiBAcGFyYW0ge1N0cmluZ30gb3B0cy5tZXNzYWdlIE1lc3NhZ2VcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdHMuaW5pdGlhbD1mYWxzZV0gRGVmYXVsdCB2YWx1ZVxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLmFjdGl2ZT0nbm8nXSBBY3RpdmUgbGFiZWxcbiAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5pbmFjdGl2ZT0nb2ZmJ10gSW5hY3RpdmUgbGFiZWxcbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICovXG5jbGFzcyBUb2dnbGVQcm9tcHQgZXh0ZW5kcyBQcm9tcHQge1xuICBjb25zdHJ1Y3RvcihvcHRzPXt9KSB7XG4gICAgc3VwZXIob3B0cyk7XG4gICAgdGhpcy5tc2cgPSBvcHRzLm1lc3NhZ2U7XG4gICAgdGhpcy52YWx1ZSA9ICEhb3B0cy5pbml0aWFsO1xuICAgIHRoaXMuYWN0aXZlID0gb3B0cy5hY3RpdmUgfHwgJ29uJztcbiAgICB0aGlzLmluYWN0aXZlID0gb3B0cy5pbmFjdGl2ZSB8fCAnb2ZmJztcbiAgICB0aGlzLmluaXRpYWxWYWx1ZSA9IHRoaXMudmFsdWU7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHJlc2V0KCkge1xuICAgIHRoaXMudmFsdWUgPSB0aGlzLmluaXRpYWxWYWx1ZTtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZXhpdCgpIHtcbiAgICB0aGlzLmFib3J0KCk7XG4gIH1cblxuICBhYm9ydCgpIHtcbiAgICB0aGlzLmRvbmUgPSB0aGlzLmFib3J0ZWQgPSB0cnVlO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gICAgdGhpcy5vdXQud3JpdGUoJ1xcbicpO1xuICAgIHRoaXMuY2xvc2UoKTtcbiAgfVxuXG4gIHN1Ym1pdCgpIHtcbiAgICB0aGlzLmRvbmUgPSB0cnVlO1xuICAgIHRoaXMuYWJvcnRlZCA9IGZhbHNlO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gICAgdGhpcy5vdXQud3JpdGUoJ1xcbicpO1xuICAgIHRoaXMuY2xvc2UoKTtcbiAgfVxuXG4gIGRlYWN0aXZhdGUoKSB7XG4gICAgaWYgKHRoaXMudmFsdWUgPT09IGZhbHNlKSByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgdGhpcy52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBhY3RpdmF0ZSgpIHtcbiAgICBpZiAodGhpcy52YWx1ZSA9PT0gdHJ1ZSkgcmV0dXJuIHRoaXMuYmVsbCgpO1xuICAgIHRoaXMudmFsdWUgPSB0cnVlO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBkZWxldGUoKSB7XG4gICAgdGhpcy5kZWFjdGl2YXRlKCk7XG4gIH1cbiAgbGVmdCgpIHtcbiAgICB0aGlzLmRlYWN0aXZhdGUoKTtcbiAgfVxuICByaWdodCgpIHtcbiAgICB0aGlzLmFjdGl2YXRlKCk7XG4gIH1cbiAgZG93bigpIHtcbiAgICB0aGlzLmRlYWN0aXZhdGUoKTtcbiAgfVxuICB1cCgpIHtcbiAgICB0aGlzLmFjdGl2YXRlKCk7XG4gIH1cblxuICBuZXh0KCkge1xuICAgIHRoaXMudmFsdWUgPSAhdGhpcy52YWx1ZTtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgXyhjLCBrZXkpIHtcbiAgICBpZiAoYyA9PT0gJyAnKSB7XG4gICAgICB0aGlzLnZhbHVlID0gIXRoaXMudmFsdWU7XG4gICAgfSBlbHNlIGlmIChjID09PSAnMScpIHtcbiAgICAgIHRoaXMudmFsdWUgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAoYyA9PT0gJzAnKSB7XG4gICAgICB0aGlzLnZhbHVlID0gZmFsc2U7XG4gICAgfSBlbHNlIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGlmICh0aGlzLmNsb3NlZCkgcmV0dXJuO1xuICAgIGlmICh0aGlzLmZpcnN0UmVuZGVyKSB0aGlzLm91dC53cml0ZShjdXJzb3IuaGlkZSk7XG4gICAgZWxzZSB0aGlzLm91dC53cml0ZShjbGVhcih0aGlzLm91dHB1dFRleHQsIHRoaXMub3V0LmNvbHVtbnMpKTtcbiAgICBzdXBlci5yZW5kZXIoKTtcblxuICAgIHRoaXMub3V0cHV0VGV4dCA9IFtcbiAgICAgIHN0eWxlLnN5bWJvbCh0aGlzLmRvbmUsIHRoaXMuYWJvcnRlZCksXG4gICAgICBjb2xvci5ib2xkKHRoaXMubXNnKSxcbiAgICAgIHN0eWxlLmRlbGltaXRlcih0aGlzLmRvbmUpLFxuICAgICAgdGhpcy52YWx1ZSA/IHRoaXMuaW5hY3RpdmUgOiBjb2xvci5jeWFuKCkudW5kZXJsaW5lKHRoaXMuaW5hY3RpdmUpLFxuICAgICAgY29sb3IuZ3JheSgnLycpLFxuICAgICAgdGhpcy52YWx1ZSA/IGNvbG9yLmN5YW4oKS51bmRlcmxpbmUodGhpcy5hY3RpdmUpIDogdGhpcy5hY3RpdmVcbiAgICBdLmpvaW4oJyAnKTtcblxuICAgIHRoaXMub3V0LndyaXRlKGVyYXNlLmxpbmUgKyBjdXJzb3IudG8oMCkgKyB0aGlzLm91dHB1dFRleHQpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gVG9nZ2xlUHJvbXB0O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5jbGFzcyBEYXRlUGFydCB7XG4gIGNvbnN0cnVjdG9yKHt0b2tlbiwgZGF0ZSwgcGFydHMsIGxvY2FsZXN9KSB7XG4gICAgdGhpcy50b2tlbiA9IHRva2VuO1xuICAgIHRoaXMuZGF0ZSA9IGRhdGUgfHwgbmV3IERhdGUoKTtcbiAgICB0aGlzLnBhcnRzID0gcGFydHMgfHwgW3RoaXNdO1xuICAgIHRoaXMubG9jYWxlcyA9IGxvY2FsZXMgfHwge307XG4gIH1cblxuICB1cCgpIHt9XG5cbiAgZG93bigpIHt9XG5cbiAgbmV4dCgpIHtcbiAgICBjb25zdCBjdXJyZW50SWR4ID0gdGhpcy5wYXJ0cy5pbmRleE9mKHRoaXMpO1xuICAgIHJldHVybiB0aGlzLnBhcnRzLmZpbmQoKHBhcnQsIGlkeCkgPT4gaWR4ID4gY3VycmVudElkeCAmJiBwYXJ0IGluc3RhbmNlb2YgRGF0ZVBhcnQpO1xuICB9XG5cbiAgc2V0VG8odmFsKSB7fVxuXG4gIHByZXYoKSB7XG4gICAgbGV0IHBhcnRzID0gW10uY29uY2F0KHRoaXMucGFydHMpLnJldmVyc2UoKTtcbiAgICBjb25zdCBjdXJyZW50SWR4ID0gcGFydHMuaW5kZXhPZih0aGlzKTtcbiAgICByZXR1cm4gcGFydHMuZmluZCgocGFydCwgaWR4KSA9PiBpZHggPiBjdXJyZW50SWR4ICYmIHBhcnQgaW5zdGFuY2VvZiBEYXRlUGFydCk7XG4gIH1cblxuICB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gU3RyaW5nKHRoaXMuZGF0ZSk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBEYXRlUGFydDtcblxuXG4iLCIndXNlIHN0cmljdCc7XG5cbmNvbnN0IERhdGVQYXJ0ID0gcmVxdWlyZSgnLi9kYXRlcGFydCcpO1xuXG5jbGFzcyBNZXJpZGllbSBleHRlbmRzIERhdGVQYXJ0IHtcbiAgY29uc3RydWN0b3Iob3B0cz17fSkge1xuICAgIHN1cGVyKG9wdHMpO1xuICB9XG5cbiAgdXAoKSB7XG4gICAgdGhpcy5kYXRlLnNldEhvdXJzKCh0aGlzLmRhdGUuZ2V0SG91cnMoKSArIDEyKSAlIDI0KTtcbiAgfVxuXG4gIGRvd24oKSB7XG4gICAgdGhpcy51cCgpO1xuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgbGV0IG1lcmlkaWVtID0gdGhpcy5kYXRlLmdldEhvdXJzKCkgPiAxMiA/ICdwbScgOiAnYW0nO1xuICAgIHJldHVybiAvXFxBLy50ZXN0KHRoaXMudG9rZW4pID8gbWVyaWRpZW0udG9VcHBlckNhc2UoKSA6IG1lcmlkaWVtO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gTWVyaWRpZW07XG4iLCIndXNlIHN0cmljdCc7XG5cbmNvbnN0IERhdGVQYXJ0ID0gcmVxdWlyZSgnLi9kYXRlcGFydCcpO1xuXG5jb25zdCBwb3MgPSBuID0+IHtcbiAgbiA9IG4gJSAxMDtcbiAgcmV0dXJuIG4gPT09IDEgPyAnc3QnXG4gICAgICAgOiBuID09PSAyID8gJ25kJ1xuICAgICAgIDogbiA9PT0gMyA/ICdyZCdcbiAgICAgICA6ICd0aCc7XG59XG5cbmNsYXNzIERheSBleHRlbmRzIERhdGVQYXJ0IHtcbiAgY29uc3RydWN0b3Iob3B0cz17fSkge1xuICAgIHN1cGVyKG9wdHMpO1xuICB9XG5cbiAgdXAoKSB7XG4gICAgdGhpcy5kYXRlLnNldERhdGUodGhpcy5kYXRlLmdldERhdGUoKSArIDEpO1xuICB9XG5cbiAgZG93bigpIHtcbiAgICB0aGlzLmRhdGUuc2V0RGF0ZSh0aGlzLmRhdGUuZ2V0RGF0ZSgpIC0gMSk7XG4gIH1cblxuICBzZXRUbyh2YWwpIHtcbiAgICB0aGlzLmRhdGUuc2V0RGF0ZShwYXJzZUludCh2YWwuc3Vic3RyKC0yKSkpO1xuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgbGV0IGRhdGUgPSB0aGlzLmRhdGUuZ2V0RGF0ZSgpO1xuICAgIGxldCBkYXkgPSB0aGlzLmRhdGUuZ2V0RGF5KCk7XG4gICAgcmV0dXJuIHRoaXMudG9rZW4gPT09ICdERCcgPyBTdHJpbmcoZGF0ZSkucGFkU3RhcnQoMiwgJzAnKVxuICAgICAgICAgOiB0aGlzLnRva2VuID09PSAnRG8nID8gZGF0ZSArIHBvcyhkYXRlKVxuICAgICAgICAgOiB0aGlzLnRva2VuID09PSAnZCcgPyBkYXkgKyAxXG4gICAgICAgICA6IHRoaXMudG9rZW4gPT09ICdkZGQnID8gdGhpcy5sb2NhbGVzLndlZWtkYXlzU2hvcnRbZGF5XVxuICAgICAgICAgOiB0aGlzLnRva2VuID09PSAnZGRkZCcgPyB0aGlzLmxvY2FsZXMud2Vla2RheXNbZGF5XVxuICAgICAgICAgOiBkYXRlO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gRGF5O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBEYXRlUGFydCA9IHJlcXVpcmUoJy4vZGF0ZXBhcnQnKTtcblxuY2xhc3MgSG91cnMgZXh0ZW5kcyBEYXRlUGFydCB7XG4gIGNvbnN0cnVjdG9yKG9wdHM9e30pIHtcbiAgICBzdXBlcihvcHRzKTtcbiAgfVxuXG4gIHVwKCkge1xuICAgIHRoaXMuZGF0ZS5zZXRIb3Vycyh0aGlzLmRhdGUuZ2V0SG91cnMoKSArIDEpO1xuICB9XG5cbiAgZG93bigpIHtcbiAgICB0aGlzLmRhdGUuc2V0SG91cnModGhpcy5kYXRlLmdldEhvdXJzKCkgLSAxKTtcbiAgfVxuXG4gIHNldFRvKHZhbCkge1xuICAgIHRoaXMuZGF0ZS5zZXRIb3VycyhwYXJzZUludCh2YWwuc3Vic3RyKC0yKSkpO1xuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgbGV0IGhvdXJzID0gdGhpcy5kYXRlLmdldEhvdXJzKCk7XG4gICAgaWYgKC9oLy50ZXN0KHRoaXMudG9rZW4pKVxuICAgICAgaG91cnMgPSAoaG91cnMgJSAxMikgfHwgMTI7XG4gICAgcmV0dXJuIHRoaXMudG9rZW4ubGVuZ3RoID4gMSA/IFN0cmluZyhob3VycykucGFkU3RhcnQoMiwgJzAnKSA6IGhvdXJzO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gSG91cnM7XG4iLCIndXNlIHN0cmljdCc7XG5cbmNvbnN0IERhdGVQYXJ0ID0gcmVxdWlyZSgnLi9kYXRlcGFydCcpO1xuXG5jbGFzcyBNaWxsaXNlY29uZHMgZXh0ZW5kcyBEYXRlUGFydCB7XG4gIGNvbnN0cnVjdG9yKG9wdHM9e30pIHtcbiAgICBzdXBlcihvcHRzKTtcbiAgfVxuXG4gIHVwKCkge1xuICAgIHRoaXMuZGF0ZS5zZXRNaWxsaXNlY29uZHModGhpcy5kYXRlLmdldE1pbGxpc2Vjb25kcygpICsgMSk7XG4gIH1cblxuICBkb3duKCkge1xuICAgIHRoaXMuZGF0ZS5zZXRNaWxsaXNlY29uZHModGhpcy5kYXRlLmdldE1pbGxpc2Vjb25kcygpIC0gMSk7XG4gIH1cblxuICBzZXRUbyh2YWwpIHtcbiAgICB0aGlzLmRhdGUuc2V0TWlsbGlzZWNvbmRzKHBhcnNlSW50KHZhbC5zdWJzdHIoLSh0aGlzLnRva2VuLmxlbmd0aCkpKSk7XG4gIH1cblxuICB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gU3RyaW5nKHRoaXMuZGF0ZS5nZXRNaWxsaXNlY29uZHMoKSkucGFkU3RhcnQoNCwgJzAnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zdWJzdHIoMCwgdGhpcy50b2tlbi5sZW5ndGgpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gTWlsbGlzZWNvbmRzO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBEYXRlUGFydCA9IHJlcXVpcmUoJy4vZGF0ZXBhcnQnKTtcblxuY2xhc3MgTWludXRlcyBleHRlbmRzIERhdGVQYXJ0IHtcbiAgY29uc3RydWN0b3Iob3B0cz17fSkge1xuICAgIHN1cGVyKG9wdHMpO1xuICB9XG5cbiAgdXAoKSB7XG4gICAgdGhpcy5kYXRlLnNldE1pbnV0ZXModGhpcy5kYXRlLmdldE1pbnV0ZXMoKSArIDEpO1xuICB9XG5cbiAgZG93bigpIHtcbiAgICB0aGlzLmRhdGUuc2V0TWludXRlcyh0aGlzLmRhdGUuZ2V0TWludXRlcygpIC0gMSk7XG4gIH1cblxuICBzZXRUbyh2YWwpIHtcbiAgICB0aGlzLmRhdGUuc2V0TWludXRlcyhwYXJzZUludCh2YWwuc3Vic3RyKC0yKSkpO1xuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgbGV0IG0gPSB0aGlzLmRhdGUuZ2V0TWludXRlcygpO1xuICAgIHJldHVybiB0aGlzLnRva2VuLmxlbmd0aCA+IDEgPyBTdHJpbmcobSkucGFkU3RhcnQoMiwgJzAnKSA6IG07XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBNaW51dGVzO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBEYXRlUGFydCA9IHJlcXVpcmUoJy4vZGF0ZXBhcnQnKTtcblxuY2xhc3MgTW9udGggZXh0ZW5kcyBEYXRlUGFydCB7XG4gIGNvbnN0cnVjdG9yKG9wdHM9e30pIHtcbiAgICBzdXBlcihvcHRzKTtcbiAgfVxuXG4gIHVwKCkge1xuICAgIHRoaXMuZGF0ZS5zZXRNb250aCh0aGlzLmRhdGUuZ2V0TW9udGgoKSArIDEpO1xuICB9XG5cbiAgZG93bigpIHtcbiAgICB0aGlzLmRhdGUuc2V0TW9udGgodGhpcy5kYXRlLmdldE1vbnRoKCkgLSAxKTtcbiAgfVxuXG4gIHNldFRvKHZhbCkge1xuICAgIHZhbCA9IHBhcnNlSW50KHZhbC5zdWJzdHIoLTIpKSAtIDE7XG4gICAgdGhpcy5kYXRlLnNldE1vbnRoKHZhbCA8IDAgPyAwIDogdmFsKTtcbiAgfVxuXG4gIHRvU3RyaW5nKCkge1xuICAgIGxldCBtb250aCA9IHRoaXMuZGF0ZS5nZXRNb250aCgpO1xuICAgIGxldCB0bCA9IHRoaXMudG9rZW4ubGVuZ3RoO1xuICAgIHJldHVybiB0bCA9PT0gMiA/IFN0cmluZyhtb250aCArIDEpLnBhZFN0YXJ0KDIsICcwJylcbiAgICAgICAgICAgOiB0bCA9PT0gMyA/IHRoaXMubG9jYWxlcy5tb250aHNTaG9ydFttb250aF1cbiAgICAgICAgICAgICA6IHRsID09PSA0ID8gdGhpcy5sb2NhbGVzLm1vbnRoc1ttb250aF1cbiAgICAgICAgICAgICAgIDogU3RyaW5nKG1vbnRoICsgMSk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBNb250aDtcbiIsIid1c2Ugc3RyaWN0JztcblxuY29uc3QgRGF0ZVBhcnQgPSByZXF1aXJlKCcuL2RhdGVwYXJ0Jyk7XG5cbmNsYXNzIFNlY29uZHMgZXh0ZW5kcyBEYXRlUGFydCB7XG4gIGNvbnN0cnVjdG9yKG9wdHM9e30pIHtcbiAgICBzdXBlcihvcHRzKTtcbiAgfVxuXG4gIHVwKCkge1xuICAgIHRoaXMuZGF0ZS5zZXRTZWNvbmRzKHRoaXMuZGF0ZS5nZXRTZWNvbmRzKCkgKyAxKTtcbiAgfVxuXG4gIGRvd24oKSB7XG4gICAgdGhpcy5kYXRlLnNldFNlY29uZHModGhpcy5kYXRlLmdldFNlY29uZHMoKSAtIDEpO1xuICB9XG5cbiAgc2V0VG8odmFsKSB7XG4gICAgdGhpcy5kYXRlLnNldFNlY29uZHMocGFyc2VJbnQodmFsLnN1YnN0cigtMikpKTtcbiAgfVxuXG4gIHRvU3RyaW5nKCkge1xuICAgIGxldCBzID0gdGhpcy5kYXRlLmdldFNlY29uZHMoKTtcbiAgICByZXR1cm4gdGhpcy50b2tlbi5sZW5ndGggPiAxID8gU3RyaW5nKHMpLnBhZFN0YXJ0KDIsICcwJykgOiBzO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gU2Vjb25kcztcbiIsIid1c2Ugc3RyaWN0JztcblxuY29uc3QgRGF0ZVBhcnQgPSByZXF1aXJlKCcuL2RhdGVwYXJ0Jyk7XG5cbmNsYXNzIFllYXIgZXh0ZW5kcyBEYXRlUGFydCB7XG4gIGNvbnN0cnVjdG9yKG9wdHM9e30pIHtcbiAgICBzdXBlcihvcHRzKTtcbiAgfVxuXG4gIHVwKCkge1xuICAgIHRoaXMuZGF0ZS5zZXRGdWxsWWVhcih0aGlzLmRhdGUuZ2V0RnVsbFllYXIoKSArIDEpO1xuICB9XG5cbiAgZG93bigpIHtcbiAgICB0aGlzLmRhdGUuc2V0RnVsbFllYXIodGhpcy5kYXRlLmdldEZ1bGxZZWFyKCkgLSAxKTtcbiAgfVxuXG4gIHNldFRvKHZhbCkge1xuICAgIHRoaXMuZGF0ZS5zZXRGdWxsWWVhcih2YWwuc3Vic3RyKC00KSk7XG4gIH1cblxuICB0b1N0cmluZygpIHtcbiAgICBsZXQgeWVhciA9IFN0cmluZyh0aGlzLmRhdGUuZ2V0RnVsbFllYXIoKSkucGFkU3RhcnQoNCwgJzAnKTtcbiAgICByZXR1cm4gdGhpcy50b2tlbi5sZW5ndGggPT09IDIgPyB5ZWFyLnN1YnN0cigtMikgOiB5ZWFyO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gWWVhcjtcbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIERhdGVQYXJ0OiByZXF1aXJlKCcuL2RhdGVwYXJ0JyksXG4gIE1lcmlkaWVtOiByZXF1aXJlKCcuL21lcmlkaWVtJyksXG4gIERheTogcmVxdWlyZSgnLi9kYXknKSxcbiAgSG91cnM6IHJlcXVpcmUoJy4vaG91cnMnKSxcbiAgTWlsbGlzZWNvbmRzOiByZXF1aXJlKCcuL21pbGxpc2Vjb25kcycpLFxuICBNaW51dGVzOiByZXF1aXJlKCcuL21pbnV0ZXMnKSxcbiAgTW9udGg6IHJlcXVpcmUoJy4vbW9udGgnKSxcbiAgU2Vjb25kczogcmVxdWlyZSgnLi9zZWNvbmRzJyksXG4gIFllYXI6IHJlcXVpcmUoJy4veWVhcicpLFxufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBjb2xvciA9IHJlcXVpcmUoJ2tsZXVyJyk7XG5jb25zdCBQcm9tcHQgPSByZXF1aXJlKCcuL3Byb21wdCcpO1xuY29uc3QgeyBzdHlsZSwgY2xlYXIsIGZpZ3VyZXMgfSA9IHJlcXVpcmUoJy4uL3V0aWwnKTtcbmNvbnN0IHsgZXJhc2UsIGN1cnNvciB9ID0gcmVxdWlyZSgnc2lzdGVyYW5zaScpO1xuY29uc3QgeyBEYXRlUGFydCwgTWVyaWRpZW0sIERheSwgSG91cnMsIE1pbGxpc2Vjb25kcywgTWludXRlcywgTW9udGgsIFNlY29uZHMsIFllYXIgfSA9IHJlcXVpcmUoJy4uL2RhdGVwYXJ0cycpO1xuXG5jb25zdCByZWdleCA9IC9cXFxcKC4pfFwiKCg/OlxcXFxbXCJcXFxcXXxbXlwiXSkrKVwifChEW0RvXT98ZHszLDR9fGQpfChNezEsNH0pfChZWSg/OllZKT8pfChbYUFdKXwoW0hoXXsxLDJ9KXwobXsxLDJ9KXwoc3sxLDJ9KXwoU3sxLDR9KXwuL2c7XG5jb25zdCByZWdleEdyb3VwcyA9IHtcbiAgMTogKHt0b2tlbn0pID0+IHRva2VuLnJlcGxhY2UoL1xcXFwoLikvZywgJyQxJyksXG4gIDI6IChvcHRzKSA9PiBuZXcgRGF5KG9wdHMpLCAvLyBEYXkgLy8gVE9ET1xuICAzOiAob3B0cykgPT4gbmV3IE1vbnRoKG9wdHMpLCAvLyBNb250aFxuICA0OiAob3B0cykgPT4gbmV3IFllYXIob3B0cyksIC8vIFllYXJcbiAgNTogKG9wdHMpID0+IG5ldyBNZXJpZGllbShvcHRzKSwgLy8gQU0vUE0gLy8gVE9ETyAoc3BlY2lhbClcbiAgNjogKG9wdHMpID0+IG5ldyBIb3VycyhvcHRzKSwgLy8gSG91cnNcbiAgNzogKG9wdHMpID0+IG5ldyBNaW51dGVzKG9wdHMpLCAvLyBNaW51dGVzXG4gIDg6IChvcHRzKSA9PiBuZXcgU2Vjb25kcyhvcHRzKSwgLy8gU2Vjb25kc1xuICA5OiAob3B0cykgPT4gbmV3IE1pbGxpc2Vjb25kcyhvcHRzKSwgLy8gRnJhY3Rpb25hbCBzZWNvbmRzXG59XG5cbmNvbnN0IGRmbHRMb2NhbGVzID0ge1xuICBtb250aHM6ICdKYW51YXJ5LEZlYnJ1YXJ5LE1hcmNoLEFwcmlsLE1heSxKdW5lLEp1bHksQXVndXN0LFNlcHRlbWJlcixPY3RvYmVyLE5vdmVtYmVyLERlY2VtYmVyJy5zcGxpdCgnLCcpLFxuICBtb250aHNTaG9ydDogJ0phbixGZWIsTWFyLEFwcixNYXksSnVuLEp1bCxBdWcsU2VwLE9jdCxOb3YsRGVjJy5zcGxpdCgnLCcpLFxuICB3ZWVrZGF5czogJ1N1bmRheSxNb25kYXksVHVlc2RheSxXZWRuZXNkYXksVGh1cnNkYXksRnJpZGF5LFNhdHVyZGF5Jy5zcGxpdCgnLCcpLFxuICB3ZWVrZGF5c1Nob3J0OiAnU3VuLE1vbixUdWUsV2VkLFRodSxGcmksU2F0Jy5zcGxpdCgnLCcpXG59XG5cblxuLyoqXG4gKiBEYXRlUHJvbXB0IEJhc2UgRWxlbWVudFxuICogQHBhcmFtIHtPYmplY3R9IG9wdHMgT3B0aW9uc1xuICogQHBhcmFtIHtTdHJpbmd9IG9wdHMubWVzc2FnZSBNZXNzYWdlXG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMuaW5pdGlhbF0gSW5kZXggb2YgZGVmYXVsdCB2YWx1ZVxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLm1hc2tdIFRoZSBmb3JtYXQgbWFza1xuICogQHBhcmFtIHtvYmplY3R9IFtvcHRzLmxvY2FsZXNdIFRoZSBkYXRlIGxvY2FsZXNcbiAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5lcnJvcl0gVGhlIGVycm9yIG1lc3NhZ2Ugc2hvd24gb24gaW52YWxpZCB2YWx1ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdHMudmFsaWRhdGVdIEZ1bmN0aW9uIHRvIHZhbGlkYXRlIHRoZSBzdWJtaXR0ZWQgdmFsdWVcbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICovXG5jbGFzcyBEYXRlUHJvbXB0IGV4dGVuZHMgUHJvbXB0IHtcbiAgY29uc3RydWN0b3Iob3B0cz17fSkge1xuICAgIHN1cGVyKG9wdHMpO1xuICAgIHRoaXMubXNnID0gb3B0cy5tZXNzYWdlO1xuICAgIHRoaXMuY3Vyc29yID0gMDtcbiAgICB0aGlzLnR5cGVkID0gJyc7XG4gICAgdGhpcy5sb2NhbGVzID0gT2JqZWN0LmFzc2lnbihkZmx0TG9jYWxlcywgb3B0cy5sb2NhbGVzKTtcbiAgICB0aGlzLl9kYXRlID0gb3B0cy5pbml0aWFsIHx8IG5ldyBEYXRlKCk7XG4gICAgdGhpcy5lcnJvck1zZyA9IG9wdHMuZXJyb3IgfHwgJ1BsZWFzZSBFbnRlciBBIFZhbGlkIFZhbHVlJztcbiAgICB0aGlzLnZhbGlkYXRvciA9IG9wdHMudmFsaWRhdGUgfHwgKCgpID0+IHRydWUpO1xuICAgIHRoaXMubWFzayA9IG9wdHMubWFzayB8fCAnWVlZWS1NTS1ERCBISDptbTpzcyc7XG4gICAgdGhpcy5jbGVhciA9IGNsZWFyKCcnLCB0aGlzLm91dC5jb2x1bW5zKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZ2V0IHZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLmRhdGVcbiAgfVxuXG4gIGdldCBkYXRlKCkge1xuICAgIHJldHVybiB0aGlzLl9kYXRlO1xuICB9XG5cbiAgc2V0IGRhdGUoZGF0ZSkge1xuICAgIGlmIChkYXRlKSB0aGlzLl9kYXRlLnNldFRpbWUoZGF0ZS5nZXRUaW1lKCkpO1xuICB9XG5cbiAgc2V0IG1hc2sobWFzaykge1xuICAgIGxldCByZXN1bHQ7XG4gICAgdGhpcy5wYXJ0cyA9IFtdO1xuICAgIHdoaWxlKHJlc3VsdCA9IHJlZ2V4LmV4ZWMobWFzaykpIHtcbiAgICAgIGxldCBtYXRjaCA9IHJlc3VsdC5zaGlmdCgpO1xuICAgICAgbGV0IGlkeCA9IHJlc3VsdC5maW5kSW5kZXgoZ3IgPT4gZ3IgIT0gbnVsbCk7XG4gICAgICB0aGlzLnBhcnRzLnB1c2goaWR4IGluIHJlZ2V4R3JvdXBzXG4gICAgICAgID8gcmVnZXhHcm91cHNbaWR4XSh7IHRva2VuOiByZXN1bHRbaWR4XSB8fCBtYXRjaCwgZGF0ZTogdGhpcy5kYXRlLCBwYXJ0czogdGhpcy5wYXJ0cywgbG9jYWxlczogdGhpcy5sb2NhbGVzIH0pXG4gICAgICAgIDogcmVzdWx0W2lkeF0gfHwgbWF0Y2gpO1xuICAgIH1cblxuICAgIGxldCBwYXJ0cyA9IHRoaXMucGFydHMucmVkdWNlKChhcnIsIGkpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgaSA9PT0gJ3N0cmluZycgJiYgdHlwZW9mIGFyclthcnIubGVuZ3RoIC0gMV0gPT09ICdzdHJpbmcnKVxuICAgICAgICBhcnJbYXJyLmxlbmd0aCAtIDFdICs9IGk7XG4gICAgICBlbHNlIGFyci5wdXNoKGkpO1xuICAgICAgcmV0dXJuIGFycjtcbiAgICB9LCBbXSk7XG5cbiAgICB0aGlzLnBhcnRzLnNwbGljZSgwKTtcbiAgICB0aGlzLnBhcnRzLnB1c2goLi4ucGFydHMpO1xuICAgIHRoaXMucmVzZXQoKTtcbiAgfVxuXG4gIG1vdmVDdXJzb3Iobikge1xuICAgIHRoaXMudHlwZWQgPSAnJztcbiAgICB0aGlzLmN1cnNvciA9IG47XG4gICAgdGhpcy5maXJlKCk7XG4gIH1cblxuICByZXNldCgpIHtcbiAgICB0aGlzLm1vdmVDdXJzb3IodGhpcy5wYXJ0cy5maW5kSW5kZXgocCA9PiBwIGluc3RhbmNlb2YgRGF0ZVBhcnQpKTtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZXhpdCgpIHtcbiAgICB0aGlzLmFib3J0KCk7XG4gIH1cblxuICBhYm9ydCgpIHtcbiAgICB0aGlzLmRvbmUgPSB0aGlzLmFib3J0ZWQgPSB0cnVlO1xuICAgIHRoaXMuZXJyb3IgPSBmYWxzZTtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICAgIHRoaXMub3V0LndyaXRlKCdcXG4nKTtcbiAgICB0aGlzLmNsb3NlKCk7XG4gIH1cblxuICBhc3luYyB2YWxpZGF0ZSgpIHtcbiAgICBsZXQgdmFsaWQgPSBhd2FpdCB0aGlzLnZhbGlkYXRvcih0aGlzLnZhbHVlKTtcbiAgICBpZiAodHlwZW9mIHZhbGlkID09PSAnc3RyaW5nJykge1xuICAgICAgdGhpcy5lcnJvck1zZyA9IHZhbGlkO1xuICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5lcnJvciA9ICF2YWxpZDtcbiAgfVxuXG4gIGFzeW5jIHN1Ym1pdCgpIHtcbiAgICBhd2FpdCB0aGlzLnZhbGlkYXRlKCk7XG4gICAgaWYgKHRoaXMuZXJyb3IpIHtcbiAgICAgIHRoaXMuY29sb3IgPSAncmVkJztcbiAgICAgIHRoaXMuZmlyZSgpO1xuICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5kb25lID0gdHJ1ZTtcbiAgICB0aGlzLmFib3J0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICAgIHRoaXMub3V0LndyaXRlKCdcXG4nKTtcbiAgICB0aGlzLmNsb3NlKCk7XG4gIH1cblxuICB1cCgpIHtcbiAgICB0aGlzLnR5cGVkID0gJyc7XG4gICAgdGhpcy5wYXJ0c1t0aGlzLmN1cnNvcl0udXAoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZG93bigpIHtcbiAgICB0aGlzLnR5cGVkID0gJyc7XG4gICAgdGhpcy5wYXJ0c1t0aGlzLmN1cnNvcl0uZG93bigpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBsZWZ0KCkge1xuICAgIGxldCBwcmV2ID0gdGhpcy5wYXJ0c1t0aGlzLmN1cnNvcl0ucHJldigpO1xuICAgIGlmIChwcmV2ID09IG51bGwpIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgICB0aGlzLm1vdmVDdXJzb3IodGhpcy5wYXJ0cy5pbmRleE9mKHByZXYpKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgcmlnaHQoKSB7XG4gICAgbGV0IG5leHQgPSB0aGlzLnBhcnRzW3RoaXMuY3Vyc29yXS5uZXh0KCk7XG4gICAgaWYgKG5leHQgPT0gbnVsbCkgcmV0dXJuIHRoaXMuYmVsbCgpO1xuICAgIHRoaXMubW92ZUN1cnNvcih0aGlzLnBhcnRzLmluZGV4T2YobmV4dCkpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBuZXh0KCkge1xuICAgIGxldCBuZXh0ID0gdGhpcy5wYXJ0c1t0aGlzLmN1cnNvcl0ubmV4dCgpO1xuICAgIHRoaXMubW92ZUN1cnNvcihuZXh0XG4gICAgICA/IHRoaXMucGFydHMuaW5kZXhPZihuZXh0KVxuICAgICAgOiB0aGlzLnBhcnRzLmZpbmRJbmRleCgocGFydCkgPT4gcGFydCBpbnN0YW5jZW9mIERhdGVQYXJ0KSk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIF8oYykge1xuICAgIGlmICgvXFxkLy50ZXN0KGMpKSB7XG4gICAgICB0aGlzLnR5cGVkICs9IGM7XG4gICAgICB0aGlzLnBhcnRzW3RoaXMuY3Vyc29yXS5zZXRUbyh0aGlzLnR5cGVkKTtcbiAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGlmICh0aGlzLmNsb3NlZCkgcmV0dXJuO1xuICAgIGlmICh0aGlzLmZpcnN0UmVuZGVyKSB0aGlzLm91dC53cml0ZShjdXJzb3IuaGlkZSk7XG4gICAgZWxzZSB0aGlzLm91dC53cml0ZShjbGVhcih0aGlzLm91dHB1dFRleHQsIHRoaXMub3V0LmNvbHVtbnMpKTtcbiAgICBzdXBlci5yZW5kZXIoKTtcblxuICAgIC8vIFByaW50IHByb21wdFxuICAgIHRoaXMub3V0cHV0VGV4dCA9IFtcbiAgICAgIHN0eWxlLnN5bWJvbCh0aGlzLmRvbmUsIHRoaXMuYWJvcnRlZCksXG4gICAgICBjb2xvci5ib2xkKHRoaXMubXNnKSxcbiAgICAgIHN0eWxlLmRlbGltaXRlcihmYWxzZSksXG4gICAgICB0aGlzLnBhcnRzLnJlZHVjZSgoYXJyLCBwLCBpZHgpID0+IGFyci5jb25jYXQoaWR4ID09PSB0aGlzLmN1cnNvciAmJiAhdGhpcy5kb25lID8gY29sb3IuY3lhbigpLnVuZGVybGluZShwLnRvU3RyaW5nKCkpIDogcCksIFtdKVxuICAgICAgICAgIC5qb2luKCcnKVxuICAgIF0uam9pbignICcpO1xuXG4gICAgLy8gUHJpbnQgZXJyb3JcbiAgICBpZiAodGhpcy5lcnJvcikge1xuICAgICAgdGhpcy5vdXRwdXRUZXh0ICs9IHRoaXMuZXJyb3JNc2cuc3BsaXQoJ1xcbicpLnJlZHVjZShcbiAgICAgICAgICAoYSwgbCwgaSkgPT4gYSArIGBcXG4ke2kgPyBgIGAgOiBmaWd1cmVzLnBvaW50ZXJTbWFsbH0gJHtjb2xvci5yZWQoKS5pdGFsaWMobCl9YCwgYGApO1xuICAgIH1cblxuICAgIHRoaXMub3V0LndyaXRlKGVyYXNlLmxpbmUgKyBjdXJzb3IudG8oMCkgKyB0aGlzLm91dHB1dFRleHQpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gRGF0ZVByb21wdDtcbiIsImNvbnN0IGNvbG9yID0gcmVxdWlyZSgna2xldXInKTtcbmNvbnN0IFByb21wdCA9IHJlcXVpcmUoJy4vcHJvbXB0Jyk7XG5jb25zdCB7IGN1cnNvciwgZXJhc2UgfSA9IHJlcXVpcmUoJ3Npc3RlcmFuc2knKTtcbmNvbnN0IHsgc3R5bGUsIGZpZ3VyZXMsIGNsZWFyLCBsaW5lcyB9ID0gcmVxdWlyZSgnLi4vdXRpbCcpO1xuXG5jb25zdCBpc051bWJlciA9IC9bMC05XS87XG5jb25zdCBpc0RlZiA9IGFueSA9PiBhbnkgIT09IHVuZGVmaW5lZDtcbmNvbnN0IHJvdW5kID0gKG51bWJlciwgcHJlY2lzaW9uKSA9PiB7XG4gIGxldCBmYWN0b3IgPSBNYXRoLnBvdygxMCwgcHJlY2lzaW9uKTtcbiAgcmV0dXJuIE1hdGgucm91bmQobnVtYmVyICogZmFjdG9yKSAvIGZhY3Rvcjtcbn1cblxuLyoqXG4gKiBOdW1iZXJQcm9tcHQgQmFzZSBFbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyBPcHRpb25zXG4gKiBAcGFyYW0ge1N0cmluZ30gb3B0cy5tZXNzYWdlIE1lc3NhZ2VcbiAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5zdHlsZT0nZGVmYXVsdCddIFJlbmRlciBzdHlsZVxuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLmluaXRpYWxdIERlZmF1bHQgdmFsdWVcbiAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0cy5tYXg9K0luZmluaXR5XSBNYXggdmFsdWVcbiAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0cy5taW49LUluZmluaXR5XSBNaW4gdmFsdWVcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdHMuZmxvYXQ9ZmFsc2VdIFBhcnNlIGlucHV0IGFzIGZsb2F0c1xuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLnJvdW5kPTJdIFJvdW5kIGZsb2F0cyB0byB4IGRlY2ltYWxzXG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMuaW5jcmVtZW50PTFdIE51bWJlciB0byBpbmNyZW1lbnQgYnkgd2hlbiB1c2luZyBhcnJvdy1rZXlzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0cy52YWxpZGF0ZV0gVmFsaWRhdGUgZnVuY3Rpb25cbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLmVycm9yXSBUaGUgaW52YWxpZCBlcnJvciBsYWJlbFxuICovXG5jbGFzcyBOdW1iZXJQcm9tcHQgZXh0ZW5kcyBQcm9tcHQge1xuICBjb25zdHJ1Y3RvcihvcHRzPXt9KSB7XG4gICAgc3VwZXIob3B0cyk7XG4gICAgdGhpcy50cmFuc2Zvcm0gPSBzdHlsZS5yZW5kZXIob3B0cy5zdHlsZSk7XG4gICAgdGhpcy5tc2cgPSBvcHRzLm1lc3NhZ2U7XG4gICAgdGhpcy5pbml0aWFsID0gaXNEZWYob3B0cy5pbml0aWFsKSA/IG9wdHMuaW5pdGlhbCA6ICcnO1xuICAgIHRoaXMuZmxvYXQgPSAhIW9wdHMuZmxvYXQ7XG4gICAgdGhpcy5yb3VuZCA9IG9wdHMucm91bmQgfHwgMjtcbiAgICB0aGlzLmluYyA9IG9wdHMuaW5jcmVtZW50IHx8IDE7XG4gICAgdGhpcy5taW4gPSBpc0RlZihvcHRzLm1pbikgPyBvcHRzLm1pbiA6IC1JbmZpbml0eTtcbiAgICB0aGlzLm1heCA9IGlzRGVmKG9wdHMubWF4KSA/IG9wdHMubWF4IDogSW5maW5pdHk7XG4gICAgdGhpcy5lcnJvck1zZyA9IG9wdHMuZXJyb3IgfHwgYFBsZWFzZSBFbnRlciBBIFZhbGlkIFZhbHVlYDtcbiAgICB0aGlzLnZhbGlkYXRvciA9IG9wdHMudmFsaWRhdGUgfHwgKCgpID0+IHRydWUpO1xuICAgIHRoaXMuY29sb3IgPSBgY3lhbmA7XG4gICAgdGhpcy52YWx1ZSA9IGBgO1xuICAgIHRoaXMudHlwZWQgPSBgYDtcbiAgICB0aGlzLmxhc3RIaXQgPSAwO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBzZXQgdmFsdWUodikge1xuICAgIGlmICghdiAmJiB2ICE9PSAwKSB7XG4gICAgICB0aGlzLnBsYWNlaG9sZGVyID0gdHJ1ZTtcbiAgICAgIHRoaXMucmVuZGVyZWQgPSBjb2xvci5ncmF5KHRoaXMudHJhbnNmb3JtLnJlbmRlcihgJHt0aGlzLmluaXRpYWx9YCkpO1xuICAgICAgdGhpcy5fdmFsdWUgPSBgYDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wbGFjZWhvbGRlciA9IGZhbHNlO1xuICAgICAgdGhpcy5yZW5kZXJlZCA9IHRoaXMudHJhbnNmb3JtLnJlbmRlcihgJHtyb3VuZCh2LCB0aGlzLnJvdW5kKX1gKTtcbiAgICAgIHRoaXMuX3ZhbHVlID0gcm91bmQodiwgdGhpcy5yb3VuZCk7XG4gICAgfVxuICAgIHRoaXMuZmlyZSgpO1xuICB9XG5cbiAgZ2V0IHZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgfVxuXG4gIHBhcnNlKHgpIHtcbiAgICByZXR1cm4gdGhpcy5mbG9hdCA/IHBhcnNlRmxvYXQoeCkgOiBwYXJzZUludCh4KTtcbiAgfVxuXG4gIHZhbGlkKGMpIHtcbiAgICByZXR1cm4gYyA9PT0gYC1gIHx8IGMgPT09IGAuYCAmJiB0aGlzLmZsb2F0IHx8IGlzTnVtYmVyLnRlc3QoYylcbiAgfVxuXG4gIHJlc2V0KCkge1xuICAgIHRoaXMudHlwZWQgPSBgYDtcbiAgICB0aGlzLnZhbHVlID0gYGA7XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIGV4aXQoKSB7XG4gICAgdGhpcy5hYm9ydCgpO1xuICB9XG5cbiAgYWJvcnQoKSB7XG4gICAgbGV0IHggPSB0aGlzLnZhbHVlO1xuICAgIHRoaXMudmFsdWUgPSB4ICE9PSBgYCA/IHggOiB0aGlzLmluaXRpYWw7XG4gICAgdGhpcy5kb25lID0gdGhpcy5hYm9ydGVkID0gdHJ1ZTtcbiAgICB0aGlzLmVycm9yID0gZmFsc2U7XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgICB0aGlzLm91dC53cml0ZShgXFxuYCk7XG4gICAgdGhpcy5jbG9zZSgpO1xuICB9XG5cbiAgYXN5bmMgdmFsaWRhdGUoKSB7XG4gICAgbGV0IHZhbGlkID0gYXdhaXQgdGhpcy52YWxpZGF0b3IodGhpcy52YWx1ZSk7XG4gICAgaWYgKHR5cGVvZiB2YWxpZCA9PT0gYHN0cmluZ2ApIHtcbiAgICAgIHRoaXMuZXJyb3JNc2cgPSB2YWxpZDtcbiAgICAgIHZhbGlkID0gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuZXJyb3IgPSAhdmFsaWQ7XG4gIH1cblxuICBhc3luYyBzdWJtaXQoKSB7XG4gICAgYXdhaXQgdGhpcy52YWxpZGF0ZSgpO1xuICAgIGlmICh0aGlzLmVycm9yKSB7XG4gICAgICB0aGlzLmNvbG9yID0gYHJlZGA7XG4gICAgICB0aGlzLmZpcmUoKTtcbiAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCB4ID0gdGhpcy52YWx1ZTtcbiAgICB0aGlzLnZhbHVlID0geCAhPT0gYGAgPyB4IDogdGhpcy5pbml0aWFsO1xuICAgIHRoaXMuZG9uZSA9IHRydWU7XG4gICAgdGhpcy5hYm9ydGVkID0gZmFsc2U7XG4gICAgdGhpcy5lcnJvciA9IGZhbHNlO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gICAgdGhpcy5vdXQud3JpdGUoYFxcbmApO1xuICAgIHRoaXMuY2xvc2UoKTtcbiAgfVxuXG4gIHVwKCkge1xuICAgIHRoaXMudHlwZWQgPSBgYDtcbiAgICBpZih0aGlzLnZhbHVlID09PSAnJykge1xuICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubWluIC0gdGhpcy5pbmM7XG4gICAgfVxuICAgIGlmICh0aGlzLnZhbHVlID49IHRoaXMubWF4KSByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgdGhpcy52YWx1ZSArPSB0aGlzLmluYztcbiAgICB0aGlzLmNvbG9yID0gYGN5YW5gO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBkb3duKCkge1xuICAgIHRoaXMudHlwZWQgPSBgYDtcbiAgICBpZih0aGlzLnZhbHVlID09PSAnJykge1xuICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubWluICsgdGhpcy5pbmM7XG4gICAgfVxuICAgIGlmICh0aGlzLnZhbHVlIDw9IHRoaXMubWluKSByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgdGhpcy52YWx1ZSAtPSB0aGlzLmluYztcbiAgICB0aGlzLmNvbG9yID0gYGN5YW5gO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBkZWxldGUoKSB7XG4gICAgbGV0IHZhbCA9IHRoaXMudmFsdWUudG9TdHJpbmcoKTtcbiAgICBpZiAodmFsLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHRoaXMuYmVsbCgpO1xuICAgIHRoaXMudmFsdWUgPSB0aGlzLnBhcnNlKCh2YWwgPSB2YWwuc2xpY2UoMCwgLTEpKSkgfHwgYGA7XG4gICAgaWYgKHRoaXMudmFsdWUgIT09ICcnICYmIHRoaXMudmFsdWUgPCB0aGlzLm1pbikge1xuICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubWluO1xuICAgIH1cbiAgICB0aGlzLmNvbG9yID0gYGN5YW5gO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBuZXh0KCkge1xuICAgIHRoaXMudmFsdWUgPSB0aGlzLmluaXRpYWw7XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIF8oYywga2V5KSB7XG4gICAgaWYgKCF0aGlzLnZhbGlkKGMpKSByZXR1cm4gdGhpcy5iZWxsKCk7XG5cbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGlmIChub3cgLSB0aGlzLmxhc3RIaXQgPiAxMDAwKSB0aGlzLnR5cGVkID0gYGA7IC8vIDFzIGVsYXBzZWRcbiAgICB0aGlzLnR5cGVkICs9IGM7XG4gICAgdGhpcy5sYXN0SGl0ID0gbm93O1xuICAgIHRoaXMuY29sb3IgPSBgY3lhbmA7XG5cbiAgICBpZiAoYyA9PT0gYC5gKSByZXR1cm4gdGhpcy5maXJlKCk7XG5cbiAgICB0aGlzLnZhbHVlID0gTWF0aC5taW4odGhpcy5wYXJzZSh0aGlzLnR5cGVkKSwgdGhpcy5tYXgpO1xuICAgIGlmICh0aGlzLnZhbHVlID4gdGhpcy5tYXgpIHRoaXMudmFsdWUgPSB0aGlzLm1heDtcbiAgICBpZiAodGhpcy52YWx1ZSA8IHRoaXMubWluKSB0aGlzLnZhbHVlID0gdGhpcy5taW47XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBpZiAodGhpcy5jbG9zZWQpIHJldHVybjtcbiAgICBpZiAoIXRoaXMuZmlyc3RSZW5kZXIpIHtcbiAgICAgIGlmICh0aGlzLm91dHB1dEVycm9yKVxuICAgICAgICB0aGlzLm91dC53cml0ZShjdXJzb3IuZG93bihsaW5lcyh0aGlzLm91dHB1dEVycm9yLCB0aGlzLm91dC5jb2x1bW5zKSAtIDEpICsgY2xlYXIodGhpcy5vdXRwdXRFcnJvciwgdGhpcy5vdXQuY29sdW1ucykpO1xuICAgICAgdGhpcy5vdXQud3JpdGUoY2xlYXIodGhpcy5vdXRwdXRUZXh0LCB0aGlzLm91dC5jb2x1bW5zKSk7XG4gICAgfVxuICAgIHN1cGVyLnJlbmRlcigpO1xuICAgIHRoaXMub3V0cHV0RXJyb3IgPSAnJztcblxuICAgIC8vIFByaW50IHByb21wdFxuICAgIHRoaXMub3V0cHV0VGV4dCA9IFtcbiAgICAgIHN0eWxlLnN5bWJvbCh0aGlzLmRvbmUsIHRoaXMuYWJvcnRlZCksXG4gICAgICBjb2xvci5ib2xkKHRoaXMubXNnKSxcbiAgICAgIHN0eWxlLmRlbGltaXRlcih0aGlzLmRvbmUpLFxuICAgICAgIXRoaXMuZG9uZSB8fCAoIXRoaXMuZG9uZSAmJiAhdGhpcy5wbGFjZWhvbGRlcilcbiAgICAgICAgICA/IGNvbG9yW3RoaXMuY29sb3JdKCkudW5kZXJsaW5lKHRoaXMucmVuZGVyZWQpIDogdGhpcy5yZW5kZXJlZFxuICAgIF0uam9pbihgIGApO1xuXG4gICAgLy8gUHJpbnQgZXJyb3JcbiAgICBpZiAodGhpcy5lcnJvcikge1xuICAgICAgdGhpcy5vdXRwdXRFcnJvciArPSB0aGlzLmVycm9yTXNnLnNwbGl0KGBcXG5gKVxuICAgICAgICAgIC5yZWR1Y2UoKGEsIGwsIGkpID0+IGEgKyBgXFxuJHtpID8gYCBgIDogZmlndXJlcy5wb2ludGVyU21hbGx9ICR7Y29sb3IucmVkKCkuaXRhbGljKGwpfWAsIGBgKTtcbiAgICB9XG5cbiAgICB0aGlzLm91dC53cml0ZShlcmFzZS5saW5lICsgY3Vyc29yLnRvKDApICsgdGhpcy5vdXRwdXRUZXh0ICsgY3Vyc29yLnNhdmUgKyB0aGlzLm91dHB1dEVycm9yICsgY3Vyc29yLnJlc3RvcmUpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gTnVtYmVyUHJvbXB0O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBjb2xvciA9IHJlcXVpcmUoJ2tsZXVyJyk7XG5jb25zdCB7IGN1cnNvciB9ID0gcmVxdWlyZSgnc2lzdGVyYW5zaScpO1xuY29uc3QgUHJvbXB0ID0gcmVxdWlyZSgnLi9wcm9tcHQnKTtcbmNvbnN0IHsgY2xlYXIsIGZpZ3VyZXMsIHN0eWxlLCB3cmFwLCBlbnRyaWVzVG9EaXNwbGF5IH0gPSByZXF1aXJlKCcuLi91dGlsJyk7XG5cbi8qKlxuICogTXVsdGlzZWxlY3RQcm9tcHQgQmFzZSBFbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyBPcHRpb25zXG4gKiBAcGFyYW0ge1N0cmluZ30gb3B0cy5tZXNzYWdlIE1lc3NhZ2VcbiAqIEBwYXJhbSB7QXJyYXl9IG9wdHMuY2hvaWNlcyBBcnJheSBvZiBjaG9pY2Ugb2JqZWN0c1xuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLmhpbnRdIEhpbnQgdG8gZGlzcGxheVxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLndhcm5dIEhpbnQgc2hvd24gZm9yIGRpc2FibGVkIGNob2ljZXNcbiAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0cy5tYXhdIE1heCBjaG9pY2VzXG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMuY3Vyc29yPTBdIEN1cnNvciBzdGFydCBwb3NpdGlvblxuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLm9wdGlvbnNQZXJQYWdlPTEwXSBNYXggb3B0aW9ucyB0byBkaXNwbGF5IGF0IG9uY2VcbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICovXG5jbGFzcyBNdWx0aXNlbGVjdFByb21wdCBleHRlbmRzIFByb21wdCB7XG4gIGNvbnN0cnVjdG9yKG9wdHM9e30pIHtcbiAgICBzdXBlcihvcHRzKTtcbiAgICB0aGlzLm1zZyA9IG9wdHMubWVzc2FnZTtcbiAgICB0aGlzLmN1cnNvciA9IG9wdHMuY3Vyc29yIHx8IDA7XG4gICAgdGhpcy5zY3JvbGxJbmRleCA9IG9wdHMuY3Vyc29yIHx8IDA7XG4gICAgdGhpcy5oaW50ID0gb3B0cy5oaW50IHx8ICcnO1xuICAgIHRoaXMud2FybiA9IG9wdHMud2FybiB8fCAnLSBUaGlzIG9wdGlvbiBpcyBkaXNhYmxlZCAtJztcbiAgICB0aGlzLm1pblNlbGVjdGVkID0gb3B0cy5taW47XG4gICAgdGhpcy5zaG93TWluRXJyb3IgPSBmYWxzZTtcbiAgICB0aGlzLm1heENob2ljZXMgPSBvcHRzLm1heDtcbiAgICB0aGlzLmluc3RydWN0aW9ucyA9IG9wdHMuaW5zdHJ1Y3Rpb25zO1xuICAgIHRoaXMub3B0aW9uc1BlclBhZ2UgPSBvcHRzLm9wdGlvbnNQZXJQYWdlIHx8IDEwO1xuICAgIHRoaXMudmFsdWUgPSBvcHRzLmNob2ljZXMubWFwKChjaCwgaWR4KSA9PiB7XG4gICAgICBpZiAodHlwZW9mIGNoID09PSAnc3RyaW5nJylcbiAgICAgICAgY2ggPSB7dGl0bGU6IGNoLCB2YWx1ZTogaWR4fTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRpdGxlOiBjaCAmJiAoY2gudGl0bGUgfHwgY2gudmFsdWUgfHwgY2gpLFxuICAgICAgICBkZXNjcmlwdGlvbjogY2ggJiYgY2guZGVzY3JpcHRpb24sXG4gICAgICAgIHZhbHVlOiBjaCAmJiAoY2gudmFsdWUgPT09IHVuZGVmaW5lZCA/IGlkeCA6IGNoLnZhbHVlKSxcbiAgICAgICAgc2VsZWN0ZWQ6IGNoICYmIGNoLnNlbGVjdGVkLFxuICAgICAgICBkaXNhYmxlZDogY2ggJiYgY2guZGlzYWJsZWRcbiAgICAgIH07XG4gICAgfSk7XG4gICAgdGhpcy5jbGVhciA9IGNsZWFyKCcnLCB0aGlzLm91dC5jb2x1bW5zKTtcbiAgICBpZiAoIW9wdHMub3ZlcnJpZGVSZW5kZXIpIHtcbiAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgfVxuICB9XG5cbiAgcmVzZXQoKSB7XG4gICAgdGhpcy52YWx1ZS5tYXAodiA9PiAhdi5zZWxlY3RlZCk7XG4gICAgdGhpcy5jdXJzb3IgPSAwO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBzZWxlY3RlZCgpIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZS5maWx0ZXIodiA9PiB2LnNlbGVjdGVkKTtcbiAgfVxuXG4gIGV4aXQoKSB7XG4gICAgdGhpcy5hYm9ydCgpO1xuICB9XG5cbiAgYWJvcnQoKSB7XG4gICAgdGhpcy5kb25lID0gdGhpcy5hYm9ydGVkID0gdHJ1ZTtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICAgIHRoaXMub3V0LndyaXRlKCdcXG4nKTtcbiAgICB0aGlzLmNsb3NlKCk7XG4gIH1cblxuICBzdWJtaXQoKSB7XG4gICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLnZhbHVlXG4gICAgICAuZmlsdGVyKGUgPT4gZS5zZWxlY3RlZCk7XG4gICAgaWYgKHRoaXMubWluU2VsZWN0ZWQgJiYgc2VsZWN0ZWQubGVuZ3RoIDwgdGhpcy5taW5TZWxlY3RlZCkge1xuICAgICAgdGhpcy5zaG93TWluRXJyb3IgPSB0cnVlO1xuICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kb25lID0gdHJ1ZTtcbiAgICAgIHRoaXMuYWJvcnRlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5maXJlKCk7XG4gICAgICB0aGlzLnJlbmRlcigpO1xuICAgICAgdGhpcy5vdXQud3JpdGUoJ1xcbicpO1xuICAgICAgdGhpcy5jbG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIGZpcnN0KCkge1xuICAgIHRoaXMuY3Vyc29yID0gMDtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgbGFzdCgpIHtcbiAgICB0aGlzLmN1cnNvciA9IHRoaXMudmFsdWUubGVuZ3RoIC0gMTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG4gIG5leHQoKSB7XG4gICAgdGhpcy5jdXJzb3IgPSAodGhpcy5jdXJzb3IgKyAxKSAlIHRoaXMudmFsdWUubGVuZ3RoO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICB1cCgpIHtcbiAgICBpZiAodGhpcy5jdXJzb3IgPT09IDApIHtcbiAgICAgIHRoaXMuY3Vyc29yID0gdGhpcy52YWx1ZS5sZW5ndGggLSAxO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmN1cnNvci0tO1xuICAgIH1cbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZG93bigpIHtcbiAgICBpZiAodGhpcy5jdXJzb3IgPT09IHRoaXMudmFsdWUubGVuZ3RoIC0gMSkge1xuICAgICAgdGhpcy5jdXJzb3IgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmN1cnNvcisrO1xuICAgIH1cbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgbGVmdCgpIHtcbiAgICB0aGlzLnZhbHVlW3RoaXMuY3Vyc29yXS5zZWxlY3RlZCA9IGZhbHNlO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICByaWdodCgpIHtcbiAgICBpZiAodGhpcy52YWx1ZS5maWx0ZXIoZSA9PiBlLnNlbGVjdGVkKS5sZW5ndGggPj0gdGhpcy5tYXhDaG9pY2VzKSByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgdGhpcy52YWx1ZVt0aGlzLmN1cnNvcl0uc2VsZWN0ZWQgPSB0cnVlO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBoYW5kbGVTcGFjZVRvZ2dsZSgpIHtcbiAgICBjb25zdCB2ID0gdGhpcy52YWx1ZVt0aGlzLmN1cnNvcl07XG5cbiAgICBpZiAodi5zZWxlY3RlZCkge1xuICAgICAgdi5zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICB9IGVsc2UgaWYgKHYuZGlzYWJsZWQgfHwgdGhpcy52YWx1ZS5maWx0ZXIoZSA9PiBlLnNlbGVjdGVkKS5sZW5ndGggPj0gdGhpcy5tYXhDaG9pY2VzKSB7XG4gICAgICByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHYuc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICB9XG4gIH1cblxuICB0b2dnbGVBbGwoKSB7XG4gICAgaWYgKHRoaXMubWF4Q2hvaWNlcyAhPT0gdW5kZWZpbmVkIHx8IHRoaXMudmFsdWVbdGhpcy5jdXJzb3JdLmRpc2FibGVkKSB7XG4gICAgICByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgfVxuXG4gICAgY29uc3QgbmV3U2VsZWN0ZWQgPSAhdGhpcy52YWx1ZVt0aGlzLmN1cnNvcl0uc2VsZWN0ZWQ7XG4gICAgdGhpcy52YWx1ZS5maWx0ZXIodiA9PiAhdi5kaXNhYmxlZCkuZm9yRWFjaCh2ID0+IHYuc2VsZWN0ZWQgPSBuZXdTZWxlY3RlZCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIF8oYywga2V5KSB7XG4gICAgaWYgKGMgPT09ICcgJykge1xuICAgICAgdGhpcy5oYW5kbGVTcGFjZVRvZ2dsZSgpO1xuICAgIH0gZWxzZSBpZiAoYyA9PT0gJ2EnKSB7XG4gICAgICB0aGlzLnRvZ2dsZUFsbCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVySW5zdHJ1Y3Rpb25zKCkge1xuICAgIGlmICh0aGlzLmluc3RydWN0aW9ucyA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuaW5zdHJ1Y3Rpb25zKSB7XG4gICAgICBpZiAodHlwZW9mIHRoaXMuaW5zdHJ1Y3Rpb25zID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gdGhpcy5pbnN0cnVjdGlvbnM7XG4gICAgICB9XG4gICAgICByZXR1cm4gJ1xcbkluc3RydWN0aW9uczpcXG4nXG4gICAgICAgICsgYCAgICAke2ZpZ3VyZXMuYXJyb3dVcH0vJHtmaWd1cmVzLmFycm93RG93bn06IEhpZ2hsaWdodCBvcHRpb25cXG5gXG4gICAgICAgICsgYCAgICAke2ZpZ3VyZXMuYXJyb3dMZWZ0fS8ke2ZpZ3VyZXMuYXJyb3dSaWdodH0vW3NwYWNlXTogVG9nZ2xlIHNlbGVjdGlvblxcbmBcbiAgICAgICAgKyAodGhpcy5tYXhDaG9pY2VzID09PSB1bmRlZmluZWQgPyBgICAgIGE6IFRvZ2dsZSBhbGxcXG5gIDogJycpXG4gICAgICAgICsgYCAgICBlbnRlci9yZXR1cm46IENvbXBsZXRlIGFuc3dlcmA7XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIHJlbmRlck9wdGlvbihjdXJzb3IsIHYsIGksIGFycm93SW5kaWNhdG9yKSB7XG4gICAgY29uc3QgcHJlZml4ID0gKHYuc2VsZWN0ZWQgPyBjb2xvci5ncmVlbihmaWd1cmVzLnJhZGlvT24pIDogZmlndXJlcy5yYWRpb09mZikgKyAnICcgKyBhcnJvd0luZGljYXRvciArICcgJztcbiAgICBsZXQgdGl0bGUsIGRlc2M7XG5cbiAgICBpZiAodi5kaXNhYmxlZCkge1xuICAgICAgdGl0bGUgPSBjdXJzb3IgPT09IGkgPyBjb2xvci5ncmF5KCkudW5kZXJsaW5lKHYudGl0bGUpIDogY29sb3Iuc3RyaWtldGhyb3VnaCgpLmdyYXkodi50aXRsZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRpdGxlID0gY3Vyc29yID09PSBpID8gY29sb3IuY3lhbigpLnVuZGVybGluZSh2LnRpdGxlKSA6IHYudGl0bGU7XG4gICAgICBpZiAoY3Vyc29yID09PSBpICYmIHYuZGVzY3JpcHRpb24pIHtcbiAgICAgICAgZGVzYyA9IGAgLSAke3YuZGVzY3JpcHRpb259YDtcbiAgICAgICAgaWYgKHByZWZpeC5sZW5ndGggKyB0aXRsZS5sZW5ndGggKyBkZXNjLmxlbmd0aCA+PSB0aGlzLm91dC5jb2x1bW5zXG4gICAgICAgICAgfHwgdi5kZXNjcmlwdGlvbi5zcGxpdCgvXFxyP1xcbi8pLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICBkZXNjID0gJ1xcbicgKyB3cmFwKHYuZGVzY3JpcHRpb24sIHsgbWFyZ2luOiBwcmVmaXgubGVuZ3RoLCB3aWR0aDogdGhpcy5vdXQuY29sdW1ucyB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwcmVmaXggKyB0aXRsZSArIGNvbG9yLmdyYXkoZGVzYyB8fCAnJyk7XG4gIH1cblxuICAvLyBzaGFyZWQgd2l0aCBhdXRvY29tcGxldGVNdWx0aXNlbGVjdFxuICBwYWdpbmF0ZU9wdGlvbnMob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGNvbG9yLnJlZCgnTm8gbWF0Y2hlcyBmb3IgdGhpcyBxdWVyeS4nKTtcbiAgICB9XG5cbiAgICBsZXQgeyBzdGFydEluZGV4LCBlbmRJbmRleCB9ID0gZW50cmllc1RvRGlzcGxheSh0aGlzLmN1cnNvciwgb3B0aW9ucy5sZW5ndGgsIHRoaXMub3B0aW9uc1BlclBhZ2UpO1xuICAgIGxldCBwcmVmaXgsIHN0eWxlZE9wdGlvbnMgPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSBzdGFydEluZGV4OyBpIDwgZW5kSW5kZXg7IGkrKykge1xuICAgICAgaWYgKGkgPT09IHN0YXJ0SW5kZXggJiYgc3RhcnRJbmRleCA+IDApIHtcbiAgICAgICAgcHJlZml4ID0gZmlndXJlcy5hcnJvd1VwO1xuICAgICAgfSBlbHNlIGlmIChpID09PSBlbmRJbmRleCAtIDEgJiYgZW5kSW5kZXggPCBvcHRpb25zLmxlbmd0aCkge1xuICAgICAgICBwcmVmaXggPSBmaWd1cmVzLmFycm93RG93bjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHByZWZpeCA9ICcgJztcbiAgICAgIH1cbiAgICAgIHN0eWxlZE9wdGlvbnMucHVzaCh0aGlzLnJlbmRlck9wdGlvbih0aGlzLmN1cnNvciwgb3B0aW9uc1tpXSwgaSwgcHJlZml4KSk7XG4gICAgfVxuXG4gICAgcmV0dXJuICdcXG4nICsgc3R5bGVkT3B0aW9ucy5qb2luKCdcXG4nKTtcbiAgfVxuXG4gIC8vIHNoYXJlZCB3aXRoIGF1dG9jb21sZXRlTXVsdGlzZWxlY3RcbiAgcmVuZGVyT3B0aW9ucyhvcHRpb25zKSB7XG4gICAgaWYgKCF0aGlzLmRvbmUpIHtcbiAgICAgIHJldHVybiB0aGlzLnBhZ2luYXRlT3B0aW9ucyhvcHRpb25zKTtcbiAgICB9XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgcmVuZGVyRG9uZU9ySW5zdHJ1Y3Rpb25zKCkge1xuICAgIGlmICh0aGlzLmRvbmUpIHtcbiAgICAgIHJldHVybiB0aGlzLnZhbHVlXG4gICAgICAgIC5maWx0ZXIoZSA9PiBlLnNlbGVjdGVkKVxuICAgICAgICAubWFwKHYgPT4gdi50aXRsZSlcbiAgICAgICAgLmpvaW4oJywgJyk7XG4gICAgfVxuXG4gICAgY29uc3Qgb3V0cHV0ID0gW2NvbG9yLmdyYXkodGhpcy5oaW50KSwgdGhpcy5yZW5kZXJJbnN0cnVjdGlvbnMoKV07XG5cbiAgICBpZiAodGhpcy52YWx1ZVt0aGlzLmN1cnNvcl0uZGlzYWJsZWQpIHtcbiAgICAgIG91dHB1dC5wdXNoKGNvbG9yLnllbGxvdyh0aGlzLndhcm4pKTtcbiAgICB9XG4gICAgcmV0dXJuIG91dHB1dC5qb2luKCcgJyk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgaWYgKHRoaXMuY2xvc2VkKSByZXR1cm47XG4gICAgaWYgKHRoaXMuZmlyc3RSZW5kZXIpIHRoaXMub3V0LndyaXRlKGN1cnNvci5oaWRlKTtcbiAgICBzdXBlci5yZW5kZXIoKTtcblxuICAgIC8vIHByaW50IHByb21wdFxuICAgIGxldCBwcm9tcHQgPSBbXG4gICAgICBzdHlsZS5zeW1ib2wodGhpcy5kb25lLCB0aGlzLmFib3J0ZWQpLFxuICAgICAgY29sb3IuYm9sZCh0aGlzLm1zZyksXG4gICAgICBzdHlsZS5kZWxpbWl0ZXIoZmFsc2UpLFxuICAgICAgdGhpcy5yZW5kZXJEb25lT3JJbnN0cnVjdGlvbnMoKVxuICAgIF0uam9pbignICcpO1xuICAgIGlmICh0aGlzLnNob3dNaW5FcnJvcikge1xuICAgICAgcHJvbXB0ICs9IGNvbG9yLnJlZChgWW91IG11c3Qgc2VsZWN0IGEgbWluaW11bSBvZiAke3RoaXMubWluU2VsZWN0ZWR9IGNob2ljZXMuYCk7XG4gICAgICB0aGlzLnNob3dNaW5FcnJvciA9IGZhbHNlO1xuICAgIH1cbiAgICBwcm9tcHQgKz0gdGhpcy5yZW5kZXJPcHRpb25zKHRoaXMudmFsdWUpO1xuXG4gICAgdGhpcy5vdXQud3JpdGUodGhpcy5jbGVhciArIHByb21wdCk7XG4gICAgdGhpcy5jbGVhciA9IGNsZWFyKHByb21wdCwgdGhpcy5vdXQuY29sdW1ucyk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBNdWx0aXNlbGVjdFByb21wdDtcbiIsIid1c2Ugc3RyaWN0JztcblxuY29uc3QgY29sb3IgPSByZXF1aXJlKCdrbGV1cicpO1xuY29uc3QgUHJvbXB0ID0gcmVxdWlyZSgnLi9wcm9tcHQnKTtcbmNvbnN0IHsgZXJhc2UsIGN1cnNvciB9ID0gcmVxdWlyZSgnc2lzdGVyYW5zaScpO1xuY29uc3QgeyBzdHlsZSwgY2xlYXIsIGZpZ3VyZXMsIHdyYXAsIGVudHJpZXNUb0Rpc3BsYXkgfSA9IHJlcXVpcmUoJy4uL3V0aWwnKTtcblxuY29uc3QgZ2V0VmFsID0gKGFyciwgaSkgPT4gYXJyW2ldICYmIChhcnJbaV0udmFsdWUgfHwgYXJyW2ldLnRpdGxlIHx8IGFycltpXSk7XG5jb25zdCBnZXRUaXRsZSA9IChhcnIsIGkpID0+IGFycltpXSAmJiAoYXJyW2ldLnRpdGxlIHx8IGFycltpXS52YWx1ZSB8fCBhcnJbaV0pO1xuY29uc3QgZ2V0SW5kZXggPSAoYXJyLCB2YWxPclRpdGxlKSA9PiB7XG4gIGNvbnN0IGluZGV4ID0gYXJyLmZpbmRJbmRleChlbCA9PiBlbC52YWx1ZSA9PT0gdmFsT3JUaXRsZSB8fCBlbC50aXRsZSA9PT0gdmFsT3JUaXRsZSk7XG4gIHJldHVybiBpbmRleCA+IC0xID8gaW5kZXggOiB1bmRlZmluZWQ7XG59O1xuXG4vKipcbiAqIFRleHRQcm9tcHQgQmFzZSBFbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyBPcHRpb25zXG4gKiBAcGFyYW0ge1N0cmluZ30gb3B0cy5tZXNzYWdlIE1lc3NhZ2VcbiAqIEBwYXJhbSB7QXJyYXl9IG9wdHMuY2hvaWNlcyBBcnJheSBvZiBhdXRvLWNvbXBsZXRlIGNob2ljZXMgb2JqZWN0c1xuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdHMuc3VnZ2VzdF0gRmlsdGVyIGZ1bmN0aW9uLiBEZWZhdWx0cyB0byBzb3J0IGJ5IHRpdGxlXG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMubGltaXQ9MTBdIE1heCBudW1iZXIgb2YgcmVzdWx0cyB0byBzaG93XG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMuY3Vyc29yPTBdIEN1cnNvciBzdGFydCBwb3NpdGlvblxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLnN0eWxlPSdkZWZhdWx0J10gUmVuZGVyIHN0eWxlXG4gKiBAcGFyYW0ge1N0cmluZ30gW29wdHMuZmFsbGJhY2tdIEZhbGxiYWNrIG1lc3NhZ2UgLSBpbml0aWFsIHRvIGRlZmF1bHQgdmFsdWVcbiAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5pbml0aWFsXSBJbmRleCBvZiB0aGUgZGVmYXVsdCB2YWx1ZVxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0cy5jbGVhckZpcnN0XSBUaGUgZmlyc3QgRVNDQVBFIGtleXByZXNzIHdpbGwgY2xlYXIgdGhlIGlucHV0XG4gKiBAcGFyYW0ge1N0cmVhbX0gW29wdHMuc3RkaW5dIFRoZSBSZWFkYWJsZSBzdHJlYW0gdG8gbGlzdGVuIHRvXG4gKiBAcGFyYW0ge1N0cmVhbX0gW29wdHMuc3Rkb3V0XSBUaGUgV3JpdGFibGUgc3RyZWFtIHRvIHdyaXRlIHJlYWRsaW5lIGRhdGEgdG9cbiAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5ub01hdGNoZXNdIFRoZSBubyBtYXRjaGVzIGZvdW5kIGxhYmVsXG4gKi9cbmNsYXNzIEF1dG9jb21wbGV0ZVByb21wdCBleHRlbmRzIFByb21wdCB7XG4gIGNvbnN0cnVjdG9yKG9wdHM9e30pIHtcbiAgICBzdXBlcihvcHRzKTtcbiAgICB0aGlzLm1zZyA9IG9wdHMubWVzc2FnZTtcbiAgICB0aGlzLnN1Z2dlc3QgPSBvcHRzLnN1Z2dlc3Q7XG4gICAgdGhpcy5jaG9pY2VzID0gb3B0cy5jaG9pY2VzO1xuICAgIHRoaXMuaW5pdGlhbCA9IHR5cGVvZiBvcHRzLmluaXRpYWwgPT09ICdudW1iZXInXG4gICAgICA/IG9wdHMuaW5pdGlhbFxuICAgICAgOiBnZXRJbmRleChvcHRzLmNob2ljZXMsIG9wdHMuaW5pdGlhbCk7XG4gICAgdGhpcy5zZWxlY3QgPSB0aGlzLmluaXRpYWwgfHwgb3B0cy5jdXJzb3IgfHwgMDtcbiAgICB0aGlzLmkxOG4gPSB7IG5vTWF0Y2hlczogb3B0cy5ub01hdGNoZXMgfHwgJ25vIG1hdGNoZXMgZm91bmQnIH07XG4gICAgdGhpcy5mYWxsYmFjayA9IG9wdHMuZmFsbGJhY2sgfHwgdGhpcy5pbml0aWFsO1xuICAgIHRoaXMuY2xlYXJGaXJzdCA9IG9wdHMuY2xlYXJGaXJzdCB8fCBmYWxzZTtcbiAgICB0aGlzLnN1Z2dlc3Rpb25zID0gW107XG4gICAgdGhpcy5pbnB1dCA9ICcnO1xuICAgIHRoaXMubGltaXQgPSBvcHRzLmxpbWl0IHx8IDEwO1xuICAgIHRoaXMuY3Vyc29yID0gMDtcbiAgICB0aGlzLnRyYW5zZm9ybSA9IHN0eWxlLnJlbmRlcihvcHRzLnN0eWxlKTtcbiAgICB0aGlzLnNjYWxlID0gdGhpcy50cmFuc2Zvcm0uc2NhbGU7XG4gICAgdGhpcy5yZW5kZXIgPSB0aGlzLnJlbmRlci5iaW5kKHRoaXMpO1xuICAgIHRoaXMuY29tcGxldGUgPSB0aGlzLmNvbXBsZXRlLmJpbmQodGhpcyk7XG4gICAgdGhpcy5jbGVhciA9IGNsZWFyKCcnLCB0aGlzLm91dC5jb2x1bW5zKTtcbiAgICB0aGlzLmNvbXBsZXRlKHRoaXMucmVuZGVyKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgc2V0IGZhbGxiYWNrKGZiKSB7XG4gICAgdGhpcy5fZmIgPSBOdW1iZXIuaXNTYWZlSW50ZWdlcihwYXJzZUludChmYikpID8gcGFyc2VJbnQoZmIpIDogZmI7XG4gIH1cblxuICBnZXQgZmFsbGJhY2soKSB7XG4gICAgbGV0IGNob2ljZTtcbiAgICBpZiAodHlwZW9mIHRoaXMuX2ZiID09PSAnbnVtYmVyJylcbiAgICAgIGNob2ljZSA9IHRoaXMuY2hvaWNlc1t0aGlzLl9mYl07XG4gICAgZWxzZSBpZiAodHlwZW9mIHRoaXMuX2ZiID09PSAnc3RyaW5nJylcbiAgICAgIGNob2ljZSA9IHsgdGl0bGU6IHRoaXMuX2ZiIH07XG4gICAgcmV0dXJuIGNob2ljZSB8fCB0aGlzLl9mYiB8fCB7IHRpdGxlOiB0aGlzLmkxOG4ubm9NYXRjaGVzIH07XG4gIH1cblxuICBtb3ZlU2VsZWN0KGkpIHtcbiAgICB0aGlzLnNlbGVjdCA9IGk7XG4gICAgaWYgKHRoaXMuc3VnZ2VzdGlvbnMubGVuZ3RoID4gMClcbiAgICAgIHRoaXMudmFsdWUgPSBnZXRWYWwodGhpcy5zdWdnZXN0aW9ucywgaSk7XG4gICAgZWxzZSB0aGlzLnZhbHVlID0gdGhpcy5mYWxsYmFjay52YWx1ZTtcbiAgICB0aGlzLmZpcmUoKTtcbiAgfVxuXG4gIGFzeW5jIGNvbXBsZXRlKGNiKSB7XG4gICAgY29uc3QgcCA9ICh0aGlzLmNvbXBsZXRpbmcgPSB0aGlzLnN1Z2dlc3QodGhpcy5pbnB1dCwgdGhpcy5jaG9pY2VzKSk7XG4gICAgY29uc3Qgc3VnZ2VzdGlvbnMgPSBhd2FpdCBwO1xuXG4gICAgaWYgKHRoaXMuY29tcGxldGluZyAhPT0gcCkgcmV0dXJuO1xuICAgIHRoaXMuc3VnZ2VzdGlvbnMgPSBzdWdnZXN0aW9uc1xuICAgICAgLm1hcCgocywgaSwgYXJyKSA9PiAoeyB0aXRsZTogZ2V0VGl0bGUoYXJyLCBpKSwgdmFsdWU6IGdldFZhbChhcnIsIGkpLCBkZXNjcmlwdGlvbjogcy5kZXNjcmlwdGlvbiB9KSk7XG4gICAgdGhpcy5jb21wbGV0aW5nID0gZmFsc2U7XG4gICAgY29uc3QgbCA9IE1hdGgubWF4KHN1Z2dlc3Rpb25zLmxlbmd0aCAtIDEsIDApO1xuICAgIHRoaXMubW92ZVNlbGVjdChNYXRoLm1pbihsLCB0aGlzLnNlbGVjdCkpO1xuXG4gICAgY2IgJiYgY2IoKTtcbiAgfVxuXG4gIHJlc2V0KCkge1xuICAgIHRoaXMuaW5wdXQgPSAnJztcbiAgICB0aGlzLmNvbXBsZXRlKCgpID0+IHtcbiAgICAgIHRoaXMubW92ZVNlbGVjdCh0aGlzLmluaXRpYWwgIT09IHZvaWQgMCA/IHRoaXMuaW5pdGlhbCA6IDApO1xuICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICB9KTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZXhpdCgpIHtcbiAgICBpZiAodGhpcy5jbGVhckZpcnN0ICYmIHRoaXMuaW5wdXQubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5yZXNldCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRvbmUgPSB0aGlzLmV4aXRlZCA9IHRydWU7IFxuICAgICAgdGhpcy5hYm9ydGVkID0gZmFsc2U7XG4gICAgICB0aGlzLmZpcmUoKTtcbiAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgICB0aGlzLm91dC53cml0ZSgnXFxuJyk7XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfVxuICB9XG5cbiAgYWJvcnQoKSB7XG4gICAgdGhpcy5kb25lID0gdGhpcy5hYm9ydGVkID0gdHJ1ZTtcbiAgICB0aGlzLmV4aXRlZCA9IGZhbHNlO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gICAgdGhpcy5vdXQud3JpdGUoJ1xcbicpO1xuICAgIHRoaXMuY2xvc2UoKTtcbiAgfVxuXG4gIHN1Ym1pdCgpIHtcbiAgICB0aGlzLmRvbmUgPSB0cnVlO1xuICAgIHRoaXMuYWJvcnRlZCA9IHRoaXMuZXhpdGVkID0gZmFsc2U7XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgICB0aGlzLm91dC53cml0ZSgnXFxuJyk7XG4gICAgdGhpcy5jbG9zZSgpO1xuICB9XG5cbiAgXyhjLCBrZXkpIHtcbiAgICBsZXQgczEgPSB0aGlzLmlucHV0LnNsaWNlKDAsIHRoaXMuY3Vyc29yKTtcbiAgICBsZXQgczIgPSB0aGlzLmlucHV0LnNsaWNlKHRoaXMuY3Vyc29yKTtcbiAgICB0aGlzLmlucHV0ID0gYCR7czF9JHtjfSR7czJ9YDtcbiAgICB0aGlzLmN1cnNvciA9IHMxLmxlbmd0aCsxO1xuICAgIHRoaXMuY29tcGxldGUodGhpcy5yZW5kZXIpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBkZWxldGUoKSB7XG4gICAgaWYgKHRoaXMuY3Vyc29yID09PSAwKSByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgbGV0IHMxID0gdGhpcy5pbnB1dC5zbGljZSgwLCB0aGlzLmN1cnNvci0xKTtcbiAgICBsZXQgczIgPSB0aGlzLmlucHV0LnNsaWNlKHRoaXMuY3Vyc29yKTtcbiAgICB0aGlzLmlucHV0ID0gYCR7czF9JHtzMn1gO1xuICAgIHRoaXMuY29tcGxldGUodGhpcy5yZW5kZXIpO1xuICAgIHRoaXMuY3Vyc29yID0gdGhpcy5jdXJzb3ItMTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZGVsZXRlRm9yd2FyZCgpIHtcbiAgICBpZih0aGlzLmN1cnNvcip0aGlzLnNjYWxlID49IHRoaXMucmVuZGVyZWQubGVuZ3RoKSByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgbGV0IHMxID0gdGhpcy5pbnB1dC5zbGljZSgwLCB0aGlzLmN1cnNvcik7XG4gICAgbGV0IHMyID0gdGhpcy5pbnB1dC5zbGljZSh0aGlzLmN1cnNvcisxKTtcbiAgICB0aGlzLmlucHV0ID0gYCR7czF9JHtzMn1gO1xuICAgIHRoaXMuY29tcGxldGUodGhpcy5yZW5kZXIpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBmaXJzdCgpIHtcbiAgICB0aGlzLm1vdmVTZWxlY3QoMCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIGxhc3QoKSB7XG4gICAgdGhpcy5tb3ZlU2VsZWN0KHRoaXMuc3VnZ2VzdGlvbnMubGVuZ3RoIC0gMSk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHVwKCkge1xuICAgIGlmICh0aGlzLnNlbGVjdCA9PT0gMCkge1xuICAgICAgdGhpcy5tb3ZlU2VsZWN0KHRoaXMuc3VnZ2VzdGlvbnMubGVuZ3RoIC0gMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubW92ZVNlbGVjdCh0aGlzLnNlbGVjdCAtIDEpO1xuICAgIH1cbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZG93bigpIHtcbiAgICBpZiAodGhpcy5zZWxlY3QgPT09IHRoaXMuc3VnZ2VzdGlvbnMubGVuZ3RoIC0gMSkge1xuICAgICAgdGhpcy5tb3ZlU2VsZWN0KDApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm1vdmVTZWxlY3QodGhpcy5zZWxlY3QgKyAxKTtcbiAgICB9XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIG5leHQoKSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ID09PSB0aGlzLnN1Z2dlc3Rpb25zLmxlbmd0aCAtIDEpIHtcbiAgICAgIHRoaXMubW92ZVNlbGVjdCgwKTtcbiAgICB9IGVsc2UgdGhpcy5tb3ZlU2VsZWN0KHRoaXMuc2VsZWN0ICsgMSk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIG5leHRQYWdlKCkge1xuICAgIHRoaXMubW92ZVNlbGVjdChNYXRoLm1pbih0aGlzLnNlbGVjdCArIHRoaXMubGltaXQsIHRoaXMuc3VnZ2VzdGlvbnMubGVuZ3RoIC0gMSkpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBwcmV2UGFnZSgpIHtcbiAgICB0aGlzLm1vdmVTZWxlY3QoTWF0aC5tYXgodGhpcy5zZWxlY3QgLSB0aGlzLmxpbWl0LCAwKSk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIGxlZnQoKSB7XG4gICAgaWYgKHRoaXMuY3Vyc29yIDw9IDApIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgICB0aGlzLmN1cnNvciA9IHRoaXMuY3Vyc29yLTE7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHJpZ2h0KCkge1xuICAgIGlmICh0aGlzLmN1cnNvcip0aGlzLnNjYWxlID49IHRoaXMucmVuZGVyZWQubGVuZ3RoKSByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgdGhpcy5jdXJzb3IgPSB0aGlzLmN1cnNvcisxO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICByZW5kZXJPcHRpb24odiwgaG92ZXJlZCwgaXNTdGFydCwgaXNFbmQpIHtcbiAgICBsZXQgZGVzYztcbiAgICBsZXQgcHJlZml4ID0gaXNTdGFydCA/IGZpZ3VyZXMuYXJyb3dVcCA6IGlzRW5kID8gZmlndXJlcy5hcnJvd0Rvd24gOiAnICc7XG4gICAgbGV0IHRpdGxlID0gaG92ZXJlZCA/IGNvbG9yLmN5YW4oKS51bmRlcmxpbmUodi50aXRsZSkgOiB2LnRpdGxlO1xuICAgIHByZWZpeCA9IChob3ZlcmVkID8gY29sb3IuY3lhbihmaWd1cmVzLnBvaW50ZXIpICsgJyAnIDogJyAgJykgKyBwcmVmaXg7XG4gICAgaWYgKHYuZGVzY3JpcHRpb24pIHtcbiAgICAgIGRlc2MgPSBgIC0gJHt2LmRlc2NyaXB0aW9ufWA7XG4gICAgICBpZiAocHJlZml4Lmxlbmd0aCArIHRpdGxlLmxlbmd0aCArIGRlc2MubGVuZ3RoID49IHRoaXMub3V0LmNvbHVtbnNcbiAgICAgICAgfHwgdi5kZXNjcmlwdGlvbi5zcGxpdCgvXFxyP1xcbi8pLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgZGVzYyA9ICdcXG4nICsgd3JhcCh2LmRlc2NyaXB0aW9uLCB7IG1hcmdpbjogMywgd2lkdGg6IHRoaXMub3V0LmNvbHVtbnMgfSlcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHByZWZpeCArICcgJyArIHRpdGxlICsgY29sb3IuZ3JheShkZXNjIHx8ICcnKTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBpZiAodGhpcy5jbG9zZWQpIHJldHVybjtcbiAgICBpZiAodGhpcy5maXJzdFJlbmRlcikgdGhpcy5vdXQud3JpdGUoY3Vyc29yLmhpZGUpO1xuICAgIGVsc2UgdGhpcy5vdXQud3JpdGUoY2xlYXIodGhpcy5vdXRwdXRUZXh0LCB0aGlzLm91dC5jb2x1bW5zKSk7XG4gICAgc3VwZXIucmVuZGVyKCk7XG5cbiAgICBsZXQgeyBzdGFydEluZGV4LCBlbmRJbmRleCB9ID0gZW50cmllc1RvRGlzcGxheSh0aGlzLnNlbGVjdCwgdGhpcy5jaG9pY2VzLmxlbmd0aCwgdGhpcy5saW1pdCk7XG5cbiAgICB0aGlzLm91dHB1dFRleHQgPSBbXG4gICAgICBzdHlsZS5zeW1ib2wodGhpcy5kb25lLCB0aGlzLmFib3J0ZWQsIHRoaXMuZXhpdGVkKSxcbiAgICAgIGNvbG9yLmJvbGQodGhpcy5tc2cpLFxuICAgICAgc3R5bGUuZGVsaW1pdGVyKHRoaXMuY29tcGxldGluZyksXG4gICAgICB0aGlzLmRvbmUgJiYgdGhpcy5zdWdnZXN0aW9uc1t0aGlzLnNlbGVjdF1cbiAgICAgICAgPyB0aGlzLnN1Z2dlc3Rpb25zW3RoaXMuc2VsZWN0XS50aXRsZVxuICAgICAgICA6IHRoaXMucmVuZGVyZWQgPSB0aGlzLnRyYW5zZm9ybS5yZW5kZXIodGhpcy5pbnB1dClcbiAgICBdLmpvaW4oJyAnKTtcblxuICAgIGlmICghdGhpcy5kb25lKSB7XG4gICAgICBjb25zdCBzdWdnZXN0aW9ucyA9IHRoaXMuc3VnZ2VzdGlvbnNcbiAgICAgICAgLnNsaWNlKHN0YXJ0SW5kZXgsIGVuZEluZGV4KVxuICAgICAgICAubWFwKChpdGVtLCBpKSA9PiAgdGhpcy5yZW5kZXJPcHRpb24oaXRlbSxcbiAgICAgICAgICB0aGlzLnNlbGVjdCA9PT0gaSArIHN0YXJ0SW5kZXgsXG4gICAgICAgICAgaSA9PT0gMCAmJiBzdGFydEluZGV4ID4gMCxcbiAgICAgICAgICBpICsgc3RhcnRJbmRleCA9PT0gZW5kSW5kZXggLSAxICYmIGVuZEluZGV4IDwgdGhpcy5jaG9pY2VzLmxlbmd0aCkpXG4gICAgICAgIC5qb2luKCdcXG4nKTtcbiAgICAgIHRoaXMub3V0cHV0VGV4dCArPSBgXFxuYCArIChzdWdnZXN0aW9ucyB8fCBjb2xvci5ncmF5KHRoaXMuZmFsbGJhY2sudGl0bGUpKTtcbiAgICB9XG5cbiAgICB0aGlzLm91dC53cml0ZShlcmFzZS5saW5lICsgY3Vyc29yLnRvKDApICsgdGhpcy5vdXRwdXRUZXh0KTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEF1dG9jb21wbGV0ZVByb21wdDtcbiIsIid1c2Ugc3RyaWN0JztcblxuY29uc3QgY29sb3IgPSByZXF1aXJlKCdrbGV1cicpO1xuY29uc3QgeyBjdXJzb3IgfSA9IHJlcXVpcmUoJ3Npc3RlcmFuc2knKTtcbmNvbnN0IE11bHRpc2VsZWN0UHJvbXB0ID0gcmVxdWlyZSgnLi9tdWx0aXNlbGVjdCcpO1xuY29uc3QgeyBjbGVhciwgc3R5bGUsIGZpZ3VyZXMgfSA9IHJlcXVpcmUoJy4uL3V0aWwnKTtcbi8qKlxuICogTXVsdGlzZWxlY3RQcm9tcHQgQmFzZSBFbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyBPcHRpb25zXG4gKiBAcGFyYW0ge1N0cmluZ30gb3B0cy5tZXNzYWdlIE1lc3NhZ2VcbiAqIEBwYXJhbSB7QXJyYXl9IG9wdHMuY2hvaWNlcyBBcnJheSBvZiBjaG9pY2Ugb2JqZWN0c1xuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLmhpbnRdIEhpbnQgdG8gZGlzcGxheVxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLndhcm5dIEhpbnQgc2hvd24gZm9yIGRpc2FibGVkIGNob2ljZXNcbiAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0cy5tYXhdIE1heCBjaG9pY2VzXG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMuY3Vyc29yPTBdIEN1cnNvciBzdGFydCBwb3NpdGlvblxuICogQHBhcmFtIHtTdHJlYW19IFtvcHRzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFtvcHRzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKi9cbmNsYXNzIEF1dG9jb21wbGV0ZU11bHRpc2VsZWN0UHJvbXB0IGV4dGVuZHMgTXVsdGlzZWxlY3RQcm9tcHQge1xuICBjb25zdHJ1Y3RvcihvcHRzPXt9KSB7XG4gICAgb3B0cy5vdmVycmlkZVJlbmRlciA9IHRydWU7XG4gICAgc3VwZXIob3B0cyk7XG4gICAgdGhpcy5pbnB1dFZhbHVlID0gJyc7XG4gICAgdGhpcy5jbGVhciA9IGNsZWFyKCcnLCB0aGlzLm91dC5jb2x1bW5zKTtcbiAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IHRoaXMudmFsdWU7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIGxhc3QoKSB7XG4gICAgdGhpcy5jdXJzb3IgPSB0aGlzLmZpbHRlcmVkT3B0aW9ucy5sZW5ndGggLSAxO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cbiAgbmV4dCgpIHtcbiAgICB0aGlzLmN1cnNvciA9ICh0aGlzLmN1cnNvciArIDEpICUgdGhpcy5maWx0ZXJlZE9wdGlvbnMubGVuZ3RoO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICB1cCgpIHtcbiAgICBpZiAodGhpcy5jdXJzb3IgPT09IDApIHtcbiAgICAgIHRoaXMuY3Vyc29yID0gdGhpcy5maWx0ZXJlZE9wdGlvbnMubGVuZ3RoIC0gMTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jdXJzb3ItLTtcbiAgICB9XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIGRvd24oKSB7XG4gICAgaWYgKHRoaXMuY3Vyc29yID09PSB0aGlzLmZpbHRlcmVkT3B0aW9ucy5sZW5ndGggLSAxKSB7XG4gICAgICB0aGlzLmN1cnNvciA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY3Vyc29yKys7XG4gICAgfVxuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBsZWZ0KCkge1xuICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zW3RoaXMuY3Vyc29yXS5zZWxlY3RlZCA9IGZhbHNlO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICByaWdodCgpIHtcbiAgICBpZiAodGhpcy52YWx1ZS5maWx0ZXIoZSA9PiBlLnNlbGVjdGVkKS5sZW5ndGggPj0gdGhpcy5tYXhDaG9pY2VzKSByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgdGhpcy5maWx0ZXJlZE9wdGlvbnNbdGhpcy5jdXJzb3JdLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZGVsZXRlKCkge1xuICAgIGlmICh0aGlzLmlucHV0VmFsdWUubGVuZ3RoKSB7XG4gICAgICB0aGlzLmlucHV0VmFsdWUgPSB0aGlzLmlucHV0VmFsdWUuc3Vic3RyKDAsIHRoaXMuaW5wdXRWYWx1ZS5sZW5ndGggLSAxKTtcbiAgICAgIHRoaXMudXBkYXRlRmlsdGVyZWRPcHRpb25zKCk7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlRmlsdGVyZWRPcHRpb25zKCkge1xuICAgIGNvbnN0IGN1cnJlbnRIaWdobGlnaHQgPSB0aGlzLmZpbHRlcmVkT3B0aW9uc1t0aGlzLmN1cnNvcl07XG4gICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSB0aGlzLnZhbHVlXG4gICAgICAuZmlsdGVyKHYgPT4ge1xuICAgICAgICBpZiAodGhpcy5pbnB1dFZhbHVlKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiB2LnRpdGxlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgaWYgKHYudGl0bGUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLmlucHV0VmFsdWUudG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0eXBlb2Ygdi52YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGlmICh2LnZhbHVlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5pbnB1dFZhbHVlLnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9KTtcbiAgICBjb25zdCBuZXdIaWdobGlnaHRJbmRleCA9IHRoaXMuZmlsdGVyZWRPcHRpb25zLmZpbmRJbmRleCh2ID0+IHYgPT09IGN1cnJlbnRIaWdobGlnaHQpXG4gICAgdGhpcy5jdXJzb3IgPSBuZXdIaWdobGlnaHRJbmRleCA8IDAgPyAwIDogbmV3SGlnaGxpZ2h0SW5kZXg7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIGhhbmRsZVNwYWNlVG9nZ2xlKCkge1xuICAgIGNvbnN0IHYgPSB0aGlzLmZpbHRlcmVkT3B0aW9uc1t0aGlzLmN1cnNvcl07XG5cbiAgICBpZiAodi5zZWxlY3RlZCkge1xuICAgICAgdi5zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICB9IGVsc2UgaWYgKHYuZGlzYWJsZWQgfHwgdGhpcy52YWx1ZS5maWx0ZXIoZSA9PiBlLnNlbGVjdGVkKS5sZW5ndGggPj0gdGhpcy5tYXhDaG9pY2VzKSB7XG4gICAgICByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHYuc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVJbnB1dENoYW5nZShjKSB7XG4gICAgdGhpcy5pbnB1dFZhbHVlID0gdGhpcy5pbnB1dFZhbHVlICsgYztcbiAgICB0aGlzLnVwZGF0ZUZpbHRlcmVkT3B0aW9ucygpO1xuICB9XG5cbiAgXyhjLCBrZXkpIHtcbiAgICBpZiAoYyA9PT0gJyAnKSB7XG4gICAgICB0aGlzLmhhbmRsZVNwYWNlVG9nZ2xlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaGFuZGxlSW5wdXRDaGFuZ2UoYyk7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVySW5zdHJ1Y3Rpb25zKCkge1xuICAgIGlmICh0aGlzLmluc3RydWN0aW9ucyA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuaW5zdHJ1Y3Rpb25zKSB7XG4gICAgICBpZiAodHlwZW9mIHRoaXMuaW5zdHJ1Y3Rpb25zID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gdGhpcy5pbnN0cnVjdGlvbnM7XG4gICAgICB9XG4gICAgICByZXR1cm4gYFxuSW5zdHJ1Y3Rpb25zOlxuICAgICR7ZmlndXJlcy5hcnJvd1VwfS8ke2ZpZ3VyZXMuYXJyb3dEb3dufTogSGlnaGxpZ2h0IG9wdGlvblxuICAgICR7ZmlndXJlcy5hcnJvd0xlZnR9LyR7ZmlndXJlcy5hcnJvd1JpZ2h0fS9bc3BhY2VdOiBUb2dnbGUgc2VsZWN0aW9uXG4gICAgW2EsYixjXS9kZWxldGU6IEZpbHRlciBjaG9pY2VzXG4gICAgZW50ZXIvcmV0dXJuOiBDb21wbGV0ZSBhbnN3ZXJcbmA7XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIHJlbmRlckN1cnJlbnRJbnB1dCgpIHtcbiAgICByZXR1cm4gYFxuRmlsdGVyZWQgcmVzdWx0cyBmb3I6ICR7dGhpcy5pbnB1dFZhbHVlID8gdGhpcy5pbnB1dFZhbHVlIDogY29sb3IuZ3JheSgnRW50ZXIgc29tZXRoaW5nIHRvIGZpbHRlcicpfVxcbmA7XG4gIH1cblxuICByZW5kZXJPcHRpb24oY3Vyc29yLCB2LCBpKSB7XG4gICAgbGV0IHRpdGxlO1xuICAgIGlmICh2LmRpc2FibGVkKSB0aXRsZSA9IGN1cnNvciA9PT0gaSA/IGNvbG9yLmdyYXkoKS51bmRlcmxpbmUodi50aXRsZSkgOiBjb2xvci5zdHJpa2V0aHJvdWdoKCkuZ3JheSh2LnRpdGxlKTtcbiAgICBlbHNlIHRpdGxlID0gY3Vyc29yID09PSBpID8gY29sb3IuY3lhbigpLnVuZGVybGluZSh2LnRpdGxlKSA6IHYudGl0bGU7XG4gICAgcmV0dXJuICh2LnNlbGVjdGVkID8gY29sb3IuZ3JlZW4oZmlndXJlcy5yYWRpb09uKSA6IGZpZ3VyZXMucmFkaW9PZmYpICsgJyAgJyArIHRpdGxlXG4gIH1cblxuICByZW5kZXJEb25lT3JJbnN0cnVjdGlvbnMoKSB7XG4gICAgaWYgKHRoaXMuZG9uZSkge1xuICAgICAgcmV0dXJuIHRoaXMudmFsdWVcbiAgICAgICAgLmZpbHRlcihlID0+IGUuc2VsZWN0ZWQpXG4gICAgICAgIC5tYXAodiA9PiB2LnRpdGxlKVxuICAgICAgICAuam9pbignLCAnKTtcbiAgICB9XG5cbiAgICBjb25zdCBvdXRwdXQgPSBbY29sb3IuZ3JheSh0aGlzLmhpbnQpLCB0aGlzLnJlbmRlckluc3RydWN0aW9ucygpLCB0aGlzLnJlbmRlckN1cnJlbnRJbnB1dCgpXTtcblxuICAgIGlmICh0aGlzLmZpbHRlcmVkT3B0aW9ucy5sZW5ndGggJiYgdGhpcy5maWx0ZXJlZE9wdGlvbnNbdGhpcy5jdXJzb3JdLmRpc2FibGVkKSB7XG4gICAgICBvdXRwdXQucHVzaChjb2xvci55ZWxsb3codGhpcy53YXJuKSk7XG4gICAgfVxuICAgIHJldHVybiBvdXRwdXQuam9pbignICcpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGlmICh0aGlzLmNsb3NlZCkgcmV0dXJuO1xuICAgIGlmICh0aGlzLmZpcnN0UmVuZGVyKSB0aGlzLm91dC53cml0ZShjdXJzb3IuaGlkZSk7XG4gICAgc3VwZXIucmVuZGVyKCk7XG5cbiAgICAvLyBwcmludCBwcm9tcHRcblxuICAgIGxldCBwcm9tcHQgPSBbXG4gICAgICBzdHlsZS5zeW1ib2wodGhpcy5kb25lLCB0aGlzLmFib3J0ZWQpLFxuICAgICAgY29sb3IuYm9sZCh0aGlzLm1zZyksXG4gICAgICBzdHlsZS5kZWxpbWl0ZXIoZmFsc2UpLFxuICAgICAgdGhpcy5yZW5kZXJEb25lT3JJbnN0cnVjdGlvbnMoKVxuICAgIF0uam9pbignICcpO1xuXG4gICAgaWYgKHRoaXMuc2hvd01pbkVycm9yKSB7XG4gICAgICBwcm9tcHQgKz0gY29sb3IucmVkKGBZb3UgbXVzdCBzZWxlY3QgYSBtaW5pbXVtIG9mICR7dGhpcy5taW5TZWxlY3RlZH0gY2hvaWNlcy5gKTtcbiAgICAgIHRoaXMuc2hvd01pbkVycm9yID0gZmFsc2U7XG4gICAgfVxuICAgIHByb21wdCArPSB0aGlzLnJlbmRlck9wdGlvbnModGhpcy5maWx0ZXJlZE9wdGlvbnMpO1xuXG4gICAgdGhpcy5vdXQud3JpdGUodGhpcy5jbGVhciArIHByb21wdCk7XG4gICAgdGhpcy5jbGVhciA9IGNsZWFyKHByb21wdCwgdGhpcy5vdXQuY29sdW1ucyk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBBdXRvY29tcGxldGVNdWx0aXNlbGVjdFByb21wdDtcbiIsImNvbnN0IGNvbG9yID0gcmVxdWlyZSgna2xldXInKTtcbmNvbnN0IFByb21wdCA9IHJlcXVpcmUoJy4vcHJvbXB0Jyk7XG5jb25zdCB7IHN0eWxlLCBjbGVhciB9ID0gcmVxdWlyZSgnLi4vdXRpbCcpO1xuY29uc3QgeyBlcmFzZSwgY3Vyc29yIH0gPSByZXF1aXJlKCdzaXN0ZXJhbnNpJyk7XG5cbi8qKlxuICogQ29uZmlybVByb21wdCBCYXNlIEVsZW1lbnRcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIE9wdGlvbnNcbiAqIEBwYXJhbSB7U3RyaW5nfSBvcHRzLm1lc3NhZ2UgTWVzc2FnZVxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0cy5pbml0aWFsXSBEZWZhdWx0IHZhbHVlICh0cnVlL2ZhbHNlKVxuICogQHBhcmFtIHtTdHJlYW19IFtvcHRzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFtvcHRzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKiBAcGFyYW0ge1N0cmluZ30gW29wdHMueWVzXSBUaGUgXCJZZXNcIiBsYWJlbFxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLnllc09wdGlvbl0gVGhlIFwiWWVzXCIgb3B0aW9uIHdoZW4gY2hvb3NpbmcgYmV0d2VlbiB5ZXMvbm9cbiAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5ub10gVGhlIFwiTm9cIiBsYWJlbFxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLm5vT3B0aW9uXSBUaGUgXCJOb1wiIG9wdGlvbiB3aGVuIGNob29zaW5nIGJldHdlZW4geWVzL25vXG4gKi9cbmNsYXNzIENvbmZpcm1Qcm9tcHQgZXh0ZW5kcyBQcm9tcHQge1xuICBjb25zdHJ1Y3RvcihvcHRzPXt9KSB7XG4gICAgc3VwZXIob3B0cyk7XG4gICAgdGhpcy5tc2cgPSBvcHRzLm1lc3NhZ2U7XG4gICAgdGhpcy52YWx1ZSA9IG9wdHMuaW5pdGlhbDtcbiAgICB0aGlzLmluaXRpYWxWYWx1ZSA9ICEhb3B0cy5pbml0aWFsO1xuICAgIHRoaXMueWVzTXNnID0gb3B0cy55ZXMgfHwgJ3llcyc7XG4gICAgdGhpcy55ZXNPcHRpb24gPSBvcHRzLnllc09wdGlvbiB8fCAnKFkvbiknO1xuICAgIHRoaXMubm9Nc2cgPSBvcHRzLm5vIHx8ICdubyc7XG4gICAgdGhpcy5ub09wdGlvbiA9IG9wdHMubm9PcHRpb24gfHwgJyh5L04pJztcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgcmVzZXQoKSB7XG4gICAgdGhpcy52YWx1ZSA9IHRoaXMuaW5pdGlhbFZhbHVlO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBleGl0KCkge1xuICAgIHRoaXMuYWJvcnQoKTtcbiAgfVxuXG4gIGFib3J0KCkge1xuICAgIHRoaXMuZG9uZSA9IHRoaXMuYWJvcnRlZCA9IHRydWU7XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgICB0aGlzLm91dC53cml0ZSgnXFxuJyk7XG4gICAgdGhpcy5jbG9zZSgpO1xuICB9XG5cbiAgc3VibWl0KCkge1xuICAgIHRoaXMudmFsdWUgPSB0aGlzLnZhbHVlIHx8IGZhbHNlO1xuICAgIHRoaXMuZG9uZSA9IHRydWU7XG4gICAgdGhpcy5hYm9ydGVkID0gZmFsc2U7XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgICB0aGlzLm91dC53cml0ZSgnXFxuJyk7XG4gICAgdGhpcy5jbG9zZSgpO1xuICB9XG5cbiAgXyhjLCBrZXkpIHtcbiAgICBpZiAoYy50b0xvd2VyQ2FzZSgpID09PSAneScpIHtcbiAgICAgIHRoaXMudmFsdWUgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRoaXMuc3VibWl0KCk7XG4gICAgfVxuICAgIGlmIChjLnRvTG93ZXJDYXNlKCkgPT09ICduJykge1xuICAgICAgdGhpcy52YWx1ZSA9IGZhbHNlO1xuICAgICAgcmV0dXJuIHRoaXMuc3VibWl0KCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBpZiAodGhpcy5jbG9zZWQpIHJldHVybjtcbiAgICBpZiAodGhpcy5maXJzdFJlbmRlcikgdGhpcy5vdXQud3JpdGUoY3Vyc29yLmhpZGUpO1xuICAgIGVsc2UgdGhpcy5vdXQud3JpdGUoY2xlYXIodGhpcy5vdXRwdXRUZXh0LCB0aGlzLm91dC5jb2x1bW5zKSk7XG4gICAgc3VwZXIucmVuZGVyKCk7XG5cbiAgICB0aGlzLm91dHB1dFRleHQgPSBbXG4gICAgICBzdHlsZS5zeW1ib2wodGhpcy5kb25lLCB0aGlzLmFib3J0ZWQpLFxuICAgICAgY29sb3IuYm9sZCh0aGlzLm1zZyksXG4gICAgICBzdHlsZS5kZWxpbWl0ZXIodGhpcy5kb25lKSxcbiAgICAgIHRoaXMuZG9uZSA/ICh0aGlzLnZhbHVlID8gdGhpcy55ZXNNc2cgOiB0aGlzLm5vTXNnKVxuICAgICAgICAgIDogY29sb3IuZ3JheSh0aGlzLmluaXRpYWxWYWx1ZSA/IHRoaXMueWVzT3B0aW9uIDogdGhpcy5ub09wdGlvbilcbiAgICBdLmpvaW4oJyAnKTtcblxuICAgIHRoaXMub3V0LndyaXRlKGVyYXNlLmxpbmUgKyBjdXJzb3IudG8oMCkgKyB0aGlzLm91dHB1dFRleHQpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gQ29uZmlybVByb21wdDtcbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIFRleHRQcm9tcHQ6IHJlcXVpcmUoJy4vdGV4dCcpLFxuICBTZWxlY3RQcm9tcHQ6IHJlcXVpcmUoJy4vc2VsZWN0JyksXG4gIFRvZ2dsZVByb21wdDogcmVxdWlyZSgnLi90b2dnbGUnKSxcbiAgRGF0ZVByb21wdDogcmVxdWlyZSgnLi9kYXRlJyksXG4gIE51bWJlclByb21wdDogcmVxdWlyZSgnLi9udW1iZXInKSxcbiAgTXVsdGlzZWxlY3RQcm9tcHQ6IHJlcXVpcmUoJy4vbXVsdGlzZWxlY3QnKSxcbiAgQXV0b2NvbXBsZXRlUHJvbXB0OiByZXF1aXJlKCcuL2F1dG9jb21wbGV0ZScpLFxuICBBdXRvY29tcGxldGVNdWx0aXNlbGVjdFByb21wdDogcmVxdWlyZSgnLi9hdXRvY29tcGxldGVNdWx0aXNlbGVjdCcpLFxuICBDb25maXJtUHJvbXB0OiByZXF1aXJlKCcuL2NvbmZpcm0nKVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbmNvbnN0ICQgPSBleHBvcnRzO1xuY29uc3QgZWwgPSByZXF1aXJlKCcuL2VsZW1lbnRzJyk7XG5jb25zdCBub29wID0gdiA9PiB2O1xuXG5mdW5jdGlvbiB0b1Byb21wdCh0eXBlLCBhcmdzLCBvcHRzPXt9KSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzLCByZWopID0+IHtcbiAgICBjb25zdCBwID0gbmV3IGVsW3R5cGVdKGFyZ3MpO1xuICAgIGNvbnN0IG9uQWJvcnQgPSBvcHRzLm9uQWJvcnQgfHwgbm9vcDtcbiAgICBjb25zdCBvblN1Ym1pdCA9IG9wdHMub25TdWJtaXQgfHwgbm9vcDtcbiAgICBjb25zdCBvbkV4aXQgPSBvcHRzLm9uRXhpdCB8fCBub29wO1xuICAgIHAub24oJ3N0YXRlJywgYXJncy5vblN0YXRlIHx8IG5vb3ApO1xuICAgIHAub24oJ3N1Ym1pdCcsIHggPT4gcmVzKG9uU3VibWl0KHgpKSk7XG4gICAgcC5vbignZXhpdCcsIHggPT4gcmVzKG9uRXhpdCh4KSkpO1xuICAgIHAub24oJ2Fib3J0JywgeCA9PiByZWoob25BYm9ydCh4KSkpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBUZXh0IHByb21wdFxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MubWVzc2FnZSBQcm9tcHQgbWVzc2FnZSB0byBkaXNwbGF5XG4gKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3MuaW5pdGlhbF0gRGVmYXVsdCBzdHJpbmcgdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBbYXJncy5zdHlsZT1cImRlZmF1bHRcIl0gUmVuZGVyIHN0eWxlICgnZGVmYXVsdCcsICdwYXNzd29yZCcsICdpbnZpc2libGUnKVxuICogQHBhcmFtIHtmdW5jdGlvbn0gW2FyZ3Mub25TdGF0ZV0gT24gc3RhdGUgY2hhbmdlIGNhbGxiYWNrXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBbYXJncy52YWxpZGF0ZV0gRnVuY3Rpb24gdG8gdmFsaWRhdGUgdXNlciBpbnB1dFxuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSB3aXRoIHVzZXIgaW5wdXRcbiAqL1xuJC50ZXh0ID0gYXJncyA9PiB0b1Byb21wdCgnVGV4dFByb21wdCcsIGFyZ3MpO1xuXG4vKipcbiAqIFBhc3N3b3JkIHByb21wdCB3aXRoIG1hc2tlZCBpbnB1dFxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MubWVzc2FnZSBQcm9tcHQgbWVzc2FnZSB0byBkaXNwbGF5XG4gKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3MuaW5pdGlhbF0gRGVmYXVsdCBzdHJpbmcgdmFsdWVcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IFthcmdzLm9uU3RhdGVdIE9uIHN0YXRlIGNoYW5nZSBjYWxsYmFja1xuICogQHBhcmFtIHtmdW5jdGlvbn0gW2FyZ3MudmFsaWRhdGVdIEZ1bmN0aW9uIHRvIHZhbGlkYXRlIHVzZXIgaW5wdXRcbiAqIEBwYXJhbSB7U3RyZWFtfSBbYXJncy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbYXJncy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICogQHJldHVybnMge1Byb21pc2V9IFByb21pc2Ugd2l0aCB1c2VyIGlucHV0XG4gKi9cbiQucGFzc3dvcmQgPSBhcmdzID0+IHtcbiAgYXJncy5zdHlsZSA9ICdwYXNzd29yZCc7XG4gIHJldHVybiAkLnRleHQoYXJncyk7XG59O1xuXG4vKipcbiAqIFByb21wdCB3aGVyZSBpbnB1dCBpcyBpbnZpc2libGUsIGxpa2Ugc3Vkb1xuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MubWVzc2FnZSBQcm9tcHQgbWVzc2FnZSB0byBkaXNwbGF5XG4gKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3MuaW5pdGlhbF0gRGVmYXVsdCBzdHJpbmcgdmFsdWVcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IFthcmdzLm9uU3RhdGVdIE9uIHN0YXRlIGNoYW5nZSBjYWxsYmFja1xuICogQHBhcmFtIHtmdW5jdGlvbn0gW2FyZ3MudmFsaWRhdGVdIEZ1bmN0aW9uIHRvIHZhbGlkYXRlIHVzZXIgaW5wdXRcbiAqIEBwYXJhbSB7U3RyZWFtfSBbYXJncy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbYXJncy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICogQHJldHVybnMge1Byb21pc2V9IFByb21pc2Ugd2l0aCB1c2VyIGlucHV0XG4gKi9cbiQuaW52aXNpYmxlID0gYXJncyA9PiB7XG4gIGFyZ3Muc3R5bGUgPSAnaW52aXNpYmxlJztcbiAgcmV0dXJuICQudGV4dChhcmdzKTtcbn07XG5cbi8qKlxuICogTnVtYmVyIHByb21wdFxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MubWVzc2FnZSBQcm9tcHQgbWVzc2FnZSB0byBkaXNwbGF5XG4gKiBAcGFyYW0ge251bWJlcn0gYXJncy5pbml0aWFsIERlZmF1bHQgbnVtYmVyIHZhbHVlXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBbYXJncy5vblN0YXRlXSBPbiBzdGF0ZSBjaGFuZ2UgY2FsbGJhY2tcbiAqIEBwYXJhbSB7bnVtYmVyfSBbYXJncy5tYXhdIE1heCB2YWx1ZVxuICogQHBhcmFtIHtudW1iZXJ9IFthcmdzLm1pbl0gTWluIHZhbHVlXG4gKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3Muc3R5bGU9XCJkZWZhdWx0XCJdIFJlbmRlciBzdHlsZSAoJ2RlZmF1bHQnLCAncGFzc3dvcmQnLCAnaW52aXNpYmxlJylcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdHMuZmxvYXQ9ZmFsc2VdIFBhcnNlIGlucHV0IGFzIGZsb2F0c1xuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLnJvdW5kPTJdIFJvdW5kIGZsb2F0cyB0byB4IGRlY2ltYWxzXG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMuaW5jcmVtZW50PTFdIE51bWJlciB0byBpbmNyZW1lbnQgYnkgd2hlbiB1c2luZyBhcnJvdy1rZXlzXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBbYXJncy52YWxpZGF0ZV0gRnVuY3Rpb24gdG8gdmFsaWRhdGUgdXNlciBpbnB1dFxuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSB3aXRoIHVzZXIgaW5wdXRcbiAqL1xuJC5udW1iZXIgPSBhcmdzID0+IHRvUHJvbXB0KCdOdW1iZXJQcm9tcHQnLCBhcmdzKTtcblxuLyoqXG4gKiBEYXRlIHByb21wdFxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MubWVzc2FnZSBQcm9tcHQgbWVzc2FnZSB0byBkaXNwbGF5XG4gKiBAcGFyYW0ge251bWJlcn0gYXJncy5pbml0aWFsIERlZmF1bHQgbnVtYmVyIHZhbHVlXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBbYXJncy5vblN0YXRlXSBPbiBzdGF0ZSBjaGFuZ2UgY2FsbGJhY2tcbiAqIEBwYXJhbSB7bnVtYmVyfSBbYXJncy5tYXhdIE1heCB2YWx1ZVxuICogQHBhcmFtIHtudW1iZXJ9IFthcmdzLm1pbl0gTWluIHZhbHVlXG4gKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3Muc3R5bGU9XCJkZWZhdWx0XCJdIFJlbmRlciBzdHlsZSAoJ2RlZmF1bHQnLCAncGFzc3dvcmQnLCAnaW52aXNpYmxlJylcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdHMuZmxvYXQ9ZmFsc2VdIFBhcnNlIGlucHV0IGFzIGZsb2F0c1xuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLnJvdW5kPTJdIFJvdW5kIGZsb2F0cyB0byB4IGRlY2ltYWxzXG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMuaW5jcmVtZW50PTFdIE51bWJlciB0byBpbmNyZW1lbnQgYnkgd2hlbiB1c2luZyBhcnJvdy1rZXlzXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBbYXJncy52YWxpZGF0ZV0gRnVuY3Rpb24gdG8gdmFsaWRhdGUgdXNlciBpbnB1dFxuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSB3aXRoIHVzZXIgaW5wdXRcbiAqL1xuJC5kYXRlID0gYXJncyA9PiB0b1Byb21wdCgnRGF0ZVByb21wdCcsIGFyZ3MpO1xuXG4vKipcbiAqIENsYXNzaWMgeWVzL25vIHByb21wdFxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MubWVzc2FnZSBQcm9tcHQgbWVzc2FnZSB0byBkaXNwbGF5XG4gKiBAcGFyYW0ge2Jvb2xlYW59IFthcmdzLmluaXRpYWw9ZmFsc2VdIERlZmF1bHQgdmFsdWVcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IFthcmdzLm9uU3RhdGVdIE9uIHN0YXRlIGNoYW5nZSBjYWxsYmFja1xuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSB3aXRoIHVzZXIgaW5wdXRcbiAqL1xuJC5jb25maXJtID0gYXJncyA9PiB0b1Byb21wdCgnQ29uZmlybVByb21wdCcsIGFyZ3MpO1xuXG4vKipcbiAqIExpc3QgcHJvbXB0LCBzcGxpdCBpbnRwdXQgc3RyaW5nIGJ5IGBzZXBlcmF0b3JgXG4gKiBAcGFyYW0ge3N0cmluZ30gYXJncy5tZXNzYWdlIFByb21wdCBtZXNzYWdlIHRvIGRpc3BsYXlcbiAqIEBwYXJhbSB7c3RyaW5nfSBbYXJncy5pbml0aWFsXSBEZWZhdWx0IHN0cmluZyB2YWx1ZVxuICogQHBhcmFtIHtzdHJpbmd9IFthcmdzLnN0eWxlPVwiZGVmYXVsdFwiXSBSZW5kZXIgc3R5bGUgKCdkZWZhdWx0JywgJ3Bhc3N3b3JkJywgJ2ludmlzaWJsZScpXG4gKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3Muc2VwYXJhdG9yXSBTdHJpbmcgc2VwYXJhdG9yXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBbYXJncy5vblN0YXRlXSBPbiBzdGF0ZSBjaGFuZ2UgY2FsbGJhY2tcbiAqIEBwYXJhbSB7U3RyZWFtfSBbYXJncy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbYXJncy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICogQHJldHVybnMge1Byb21pc2V9IFByb21pc2Ugd2l0aCB1c2VyIGlucHV0LCBpbiBmb3JtIG9mIGFuIGBBcnJheWBcbiAqL1xuJC5saXN0ID0gYXJncyA9PiB7XG4gIGNvbnN0IHNlcCA9IGFyZ3Muc2VwYXJhdG9yIHx8ICcsJztcbiAgcmV0dXJuIHRvUHJvbXB0KCdUZXh0UHJvbXB0JywgYXJncywge1xuICAgIG9uU3VibWl0OiBzdHIgPT4gc3RyLnNwbGl0KHNlcCkubWFwKHMgPT4gcy50cmltKCkpXG4gIH0pO1xufTtcblxuLyoqXG4gKiBUb2dnbGUvc3dpdGNoIHByb21wdFxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MubWVzc2FnZSBQcm9tcHQgbWVzc2FnZSB0byBkaXNwbGF5XG4gKiBAcGFyYW0ge2Jvb2xlYW59IFthcmdzLmluaXRpYWw9ZmFsc2VdIERlZmF1bHQgdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBbYXJncy5hY3RpdmU9XCJvblwiXSBUZXh0IGZvciBgYWN0aXZlYCBzdGF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IFthcmdzLmluYWN0aXZlPVwib2ZmXCJdIFRleHQgZm9yIGBpbmFjdGl2ZWAgc3RhdGVcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IFthcmdzLm9uU3RhdGVdIE9uIHN0YXRlIGNoYW5nZSBjYWxsYmFja1xuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSB3aXRoIHVzZXIgaW5wdXRcbiAqL1xuJC50b2dnbGUgPSBhcmdzID0+IHRvUHJvbXB0KCdUb2dnbGVQcm9tcHQnLCBhcmdzKTtcblxuLyoqXG4gKiBJbnRlcmFjdGl2ZSBzZWxlY3QgcHJvbXB0XG4gKiBAcGFyYW0ge3N0cmluZ30gYXJncy5tZXNzYWdlIFByb21wdCBtZXNzYWdlIHRvIGRpc3BsYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFyZ3MuY2hvaWNlcyBBcnJheSBvZiBjaG9pY2VzIG9iamVjdHMgYFt7IHRpdGxlLCB2YWx1ZSB9LCAuLi5dYFxuICogQHBhcmFtIHtudW1iZXJ9IFthcmdzLmluaXRpYWxdIEluZGV4IG9mIGRlZmF1bHQgdmFsdWVcbiAqIEBwYXJhbSB7U3RyaW5nfSBbYXJncy5oaW50XSBIaW50IHRvIGRpc3BsYXlcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IFthcmdzLm9uU3RhdGVdIE9uIHN0YXRlIGNoYW5nZSBjYWxsYmFja1xuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSB3aXRoIHVzZXIgaW5wdXRcbiAqL1xuJC5zZWxlY3QgPSBhcmdzID0+IHRvUHJvbXB0KCdTZWxlY3RQcm9tcHQnLCBhcmdzKTtcblxuLyoqXG4gKiBJbnRlcmFjdGl2ZSBtdWx0aS1zZWxlY3QgLyBhdXRvY29tcGxldGVNdWx0aXNlbGVjdCBwcm9tcHRcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLm1lc3NhZ2UgUHJvbXB0IG1lc3NhZ2UgdG8gZGlzcGxheVxuICogQHBhcmFtIHtBcnJheX0gYXJncy5jaG9pY2VzIEFycmF5IG9mIGNob2ljZXMgb2JqZWN0cyBgW3sgdGl0bGUsIHZhbHVlLCBbc2VsZWN0ZWRdIH0sIC4uLl1gXG4gKiBAcGFyYW0ge251bWJlcn0gW2FyZ3MubWF4XSBNYXggc2VsZWN0XG4gKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3MuaGludF0gSGludCB0byBkaXNwbGF5IHVzZXJcbiAqIEBwYXJhbSB7TnVtYmVyfSBbYXJncy5jdXJzb3I9MF0gQ3Vyc29yIHN0YXJ0IHBvc2l0aW9uXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBbYXJncy5vblN0YXRlXSBPbiBzdGF0ZSBjaGFuZ2UgY2FsbGJhY2tcbiAqIEBwYXJhbSB7U3RyZWFtfSBbYXJncy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbYXJncy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICogQHJldHVybnMge1Byb21pc2V9IFByb21pc2Ugd2l0aCB1c2VyIGlucHV0XG4gKi9cbiQubXVsdGlzZWxlY3QgPSBhcmdzID0+IHtcbiAgYXJncy5jaG9pY2VzID0gW10uY29uY2F0KGFyZ3MuY2hvaWNlcyB8fCBbXSk7XG4gIGNvbnN0IHRvU2VsZWN0ZWQgPSBpdGVtcyA9PiBpdGVtcy5maWx0ZXIoaXRlbSA9PiBpdGVtLnNlbGVjdGVkKS5tYXAoaXRlbSA9PiBpdGVtLnZhbHVlKTtcbiAgcmV0dXJuIHRvUHJvbXB0KCdNdWx0aXNlbGVjdFByb21wdCcsIGFyZ3MsIHtcbiAgICBvbkFib3J0OiB0b1NlbGVjdGVkLFxuICAgIG9uU3VibWl0OiB0b1NlbGVjdGVkXG4gIH0pO1xufTtcblxuJC5hdXRvY29tcGxldGVNdWx0aXNlbGVjdCA9IGFyZ3MgPT4ge1xuICBhcmdzLmNob2ljZXMgPSBbXS5jb25jYXQoYXJncy5jaG9pY2VzIHx8IFtdKTtcbiAgY29uc3QgdG9TZWxlY3RlZCA9IGl0ZW1zID0+IGl0ZW1zLmZpbHRlcihpdGVtID0+IGl0ZW0uc2VsZWN0ZWQpLm1hcChpdGVtID0+IGl0ZW0udmFsdWUpO1xuICByZXR1cm4gdG9Qcm9tcHQoJ0F1dG9jb21wbGV0ZU11bHRpc2VsZWN0UHJvbXB0JywgYXJncywge1xuICAgIG9uQWJvcnQ6IHRvU2VsZWN0ZWQsXG4gICAgb25TdWJtaXQ6IHRvU2VsZWN0ZWRcbiAgfSk7XG59O1xuXG5jb25zdCBieVRpdGxlID0gKGlucHV0LCBjaG9pY2VzKSA9PiBQcm9taXNlLnJlc29sdmUoXG4gIGNob2ljZXMuZmlsdGVyKGl0ZW0gPT4gaXRlbS50aXRsZS5zbGljZSgwLCBpbnB1dC5sZW5ndGgpLnRvTG93ZXJDYXNlKCkgPT09IGlucHV0LnRvTG93ZXJDYXNlKCkpXG4pO1xuXG4vKipcbiAqIEludGVyYWN0aXZlIGF1dG8tY29tcGxldGUgcHJvbXB0XG4gKiBAcGFyYW0ge3N0cmluZ30gYXJncy5tZXNzYWdlIFByb21wdCBtZXNzYWdlIHRvIGRpc3BsYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFyZ3MuY2hvaWNlcyBBcnJheSBvZiBhdXRvLWNvbXBsZXRlIGNob2ljZXMgb2JqZWN0cyBgW3sgdGl0bGUsIHZhbHVlIH0sIC4uLl1gXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbYXJncy5zdWdnZXN0XSBGdW5jdGlvbiB0byBmaWx0ZXIgcmVzdWx0cyBiYXNlZCBvbiB1c2VyIGlucHV0LiBEZWZhdWx0cyB0byBzb3J0IGJ5IGB0aXRsZWBcbiAqIEBwYXJhbSB7bnVtYmVyfSBbYXJncy5saW1pdD0xMF0gTWF4IG51bWJlciBvZiByZXN1bHRzIHRvIHNob3dcbiAqIEBwYXJhbSB7c3RyaW5nfSBbYXJncy5zdHlsZT1cImRlZmF1bHRcIl0gUmVuZGVyIHN0eWxlICgnZGVmYXVsdCcsICdwYXNzd29yZCcsICdpbnZpc2libGUnKVxuICogQHBhcmFtIHtTdHJpbmd9IFthcmdzLmluaXRpYWxdIEluZGV4IG9mIHRoZSBkZWZhdWx0IHZhbHVlXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLmNsZWFyRmlyc3RdIFRoZSBmaXJzdCBFU0NBUEUga2V5cHJlc3Mgd2lsbCBjbGVhciB0aGUgaW5wdXRcbiAqIEBwYXJhbSB7U3RyaW5nfSBbYXJncy5mYWxsYmFja10gRmFsbGJhY2sgbWVzc2FnZSAtIGRlZmF1bHRzIHRvIGluaXRpYWwgdmFsdWVcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IFthcmdzLm9uU3RhdGVdIE9uIHN0YXRlIGNoYW5nZSBjYWxsYmFja1xuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSB3aXRoIHVzZXIgaW5wdXRcbiAqL1xuJC5hdXRvY29tcGxldGUgPSBhcmdzID0+IHtcbiAgYXJncy5zdWdnZXN0ID0gYXJncy5zdWdnZXN0IHx8IGJ5VGl0bGU7XG4gIGFyZ3MuY2hvaWNlcyA9IFtdLmNvbmNhdChhcmdzLmNob2ljZXMgfHwgW10pO1xuICByZXR1cm4gdG9Qcm9tcHQoJ0F1dG9jb21wbGV0ZVByb21wdCcsIGFyZ3MpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuY29uc3QgcHJvbXB0cyA9IHJlcXVpcmUoJy4vcHJvbXB0cycpO1xuXG5jb25zdCBwYXNzT24gPSBbJ3N1Z2dlc3QnLCAnZm9ybWF0JywgJ29uU3RhdGUnLCAndmFsaWRhdGUnLCAnb25SZW5kZXInLCAndHlwZSddO1xuY29uc3Qgbm9vcCA9ICgpID0+IHt9O1xuXG4vKipcbiAqIFByb21wdCBmb3IgYSBzZXJpZXMgb2YgcXVlc3Rpb25zXG4gKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gcXVlc3Rpb25zIFNpbmdsZSBxdWVzdGlvbiBvYmplY3Qgb3IgQXJyYXkgb2YgcXVlc3Rpb24gb2JqZWN0c1xuICogQHBhcmFtIHtGdW5jdGlvbn0gW29uU3VibWl0XSBDYWxsYmFjayBmdW5jdGlvbiBjYWxsZWQgb24gcHJvbXB0IHN1Ym1pdFxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29uQ2FuY2VsXSBDYWxsYmFjayBmdW5jdGlvbiBjYWxsZWQgb24gY2FuY2VsL2Fib3J0XG4gKiBAcmV0dXJucyB7T2JqZWN0fSBPYmplY3Qgd2l0aCB2YWx1ZXMgZnJvbSB1c2VyIGlucHV0XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHByb21wdChxdWVzdGlvbnM9W10sIHsgb25TdWJtaXQ9bm9vcCwgb25DYW5jZWw9bm9vcCB9PXt9KSB7XG4gIGNvbnN0IGFuc3dlcnMgPSB7fTtcbiAgY29uc3Qgb3ZlcnJpZGUgPSBwcm9tcHQuX292ZXJyaWRlIHx8IHt9O1xuICBxdWVzdGlvbnMgPSBbXS5jb25jYXQocXVlc3Rpb25zKTtcbiAgbGV0IGFuc3dlciwgcXVlc3Rpb24sIHF1aXQsIG5hbWUsIHR5cGUsIGxhc3RQcm9tcHQ7XG5cbiAgY29uc3QgZ2V0Rm9ybWF0dGVkQW5zd2VyID0gYXN5bmMgKHF1ZXN0aW9uLCBhbnN3ZXIsIHNraXBWYWxpZGF0aW9uID0gZmFsc2UpID0+IHtcbiAgICBpZiAoIXNraXBWYWxpZGF0aW9uICYmIHF1ZXN0aW9uLnZhbGlkYXRlICYmIHF1ZXN0aW9uLnZhbGlkYXRlKGFuc3dlcikgIT09IHRydWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcmV0dXJuIHF1ZXN0aW9uLmZvcm1hdCA/IGF3YWl0IHF1ZXN0aW9uLmZvcm1hdChhbnN3ZXIsIGFuc3dlcnMpIDogYW5zd2VyXG4gIH07XG5cbiAgZm9yIChxdWVzdGlvbiBvZiBxdWVzdGlvbnMpIHtcbiAgICAoeyBuYW1lLCB0eXBlIH0gPSBxdWVzdGlvbik7XG5cbiAgICAvLyBldmFsdWF0ZSB0eXBlIGZpcnN0IGFuZCBza2lwIGlmIHR5cGUgaXMgYSBmYWxzeSB2YWx1ZVxuICAgIGlmICh0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdHlwZSA9IGF3YWl0IHR5cGUoYW5zd2VyLCB7IC4uLmFuc3dlcnMgfSwgcXVlc3Rpb24pXG4gICAgICBxdWVzdGlvblsndHlwZSddID0gdHlwZVxuICAgIH1cbiAgICBpZiAoIXR5cGUpIGNvbnRpbnVlO1xuXG4gICAgLy8gaWYgcHJvcGVydHkgaXMgYSBmdW5jdGlvbiwgaW52b2tlIGl0IHVubGVzcyBpdCdzIGEgc3BlY2lhbCBmdW5jdGlvblxuICAgIGZvciAobGV0IGtleSBpbiBxdWVzdGlvbikge1xuICAgICAgaWYgKHBhc3NPbi5pbmNsdWRlcyhrZXkpKSBjb250aW51ZTtcbiAgICAgIGxldCB2YWx1ZSA9IHF1ZXN0aW9uW2tleV07XG4gICAgICBxdWVzdGlvbltrZXldID0gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nID8gYXdhaXQgdmFsdWUoYW5zd2VyLCB7IC4uLmFuc3dlcnMgfSwgbGFzdFByb21wdCkgOiB2YWx1ZTtcbiAgICB9XG5cbiAgICBsYXN0UHJvbXB0ID0gcXVlc3Rpb247XG5cbiAgICBpZiAodHlwZW9mIHF1ZXN0aW9uLm1lc3NhZ2UgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb21wdCBtZXNzYWdlIGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuXG4gICAgLy8gdXBkYXRlIHZhcnMgaW4gY2FzZSB0aGV5IGNoYW5nZWRcbiAgICAoeyBuYW1lLCB0eXBlIH0gPSBxdWVzdGlvbik7XG5cbiAgICBpZiAocHJvbXB0c1t0eXBlXSA9PT0gdm9pZCAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHByb21wdCB0eXBlICgke3R5cGV9KSBpcyBub3QgZGVmaW5lZGApO1xuICAgIH1cblxuICAgIGlmIChvdmVycmlkZVtxdWVzdGlvbi5uYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBhbnN3ZXIgPSBhd2FpdCBnZXRGb3JtYXR0ZWRBbnN3ZXIocXVlc3Rpb24sIG92ZXJyaWRlW3F1ZXN0aW9uLm5hbWVdKTtcbiAgICAgIGlmIChhbnN3ZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBhbnN3ZXJzW25hbWVdID0gYW5zd2VyO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgLy8gR2V0IHRoZSBpbmplY3RlZCBhbnN3ZXIgaWYgdGhlcmUgaXMgb25lIG9yIHByb21wdCB0aGUgdXNlclxuICAgICAgYW5zd2VyID0gcHJvbXB0Ll9pbmplY3RlZCA/IGdldEluamVjdGVkQW5zd2VyKHByb21wdC5faW5qZWN0ZWQsIHF1ZXN0aW9uLmluaXRpYWwpIDogYXdhaXQgcHJvbXB0c1t0eXBlXShxdWVzdGlvbik7XG4gICAgICBhbnN3ZXJzW25hbWVdID0gYW5zd2VyID0gYXdhaXQgZ2V0Rm9ybWF0dGVkQW5zd2VyKHF1ZXN0aW9uLCBhbnN3ZXIsIHRydWUpO1xuICAgICAgcXVpdCA9IGF3YWl0IG9uU3VibWl0KHF1ZXN0aW9uLCBhbnN3ZXIsIGFuc3dlcnMpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcXVpdCA9ICEoYXdhaXQgb25DYW5jZWwocXVlc3Rpb24sIGFuc3dlcnMpKTtcbiAgICB9XG5cbiAgICBpZiAocXVpdCkgcmV0dXJuIGFuc3dlcnM7XG4gIH1cblxuICByZXR1cm4gYW5zd2Vycztcbn1cblxuZnVuY3Rpb24gZ2V0SW5qZWN0ZWRBbnN3ZXIoaW5qZWN0ZWQsIGRlYWZ1bHRWYWx1ZSkge1xuICBjb25zdCBhbnN3ZXIgPSBpbmplY3RlZC5zaGlmdCgpO1xuICAgIGlmIChhbnN3ZXIgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgdGhyb3cgYW5zd2VyO1xuICAgIH1cblxuICAgIHJldHVybiAoYW5zd2VyID09PSB1bmRlZmluZWQpID8gZGVhZnVsdFZhbHVlIDogYW5zd2VyO1xufVxuXG5mdW5jdGlvbiBpbmplY3QoYW5zd2Vycykge1xuICBwcm9tcHQuX2luamVjdGVkID0gKHByb21wdC5faW5qZWN0ZWQgfHwgW10pLmNvbmNhdChhbnN3ZXJzKTtcbn1cblxuZnVuY3Rpb24gb3ZlcnJpZGUoYW5zd2Vycykge1xuICBwcm9tcHQuX292ZXJyaWRlID0gT2JqZWN0LmFzc2lnbih7fSwgYW5zd2Vycyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmFzc2lnbihwcm9tcHQsIHsgcHJvbXB0LCBwcm9tcHRzLCBpbmplY3QsIG92ZXJyaWRlIH0pO1xuIiwiZnVuY3Rpb24gaXNOb2RlTFQodGFyKSB7XG4gIHRhciA9IChBcnJheS5pc0FycmF5KHRhcikgPyB0YXIgOiB0YXIuc3BsaXQoJy4nKSkubWFwKE51bWJlcik7XG4gIGxldCBpPTAsIHNyYz1wcm9jZXNzLnZlcnNpb25zLm5vZGUuc3BsaXQoJy4nKS5tYXAoTnVtYmVyKTtcbiAgZm9yICg7IGkgPCB0YXIubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoc3JjW2ldID4gdGFyW2ldKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHRhcltpXSA+IHNyY1tpXSkgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9XG4gIGlzTm9kZUxUKCc4LjYuMCcpXG4gICAgPyByZXF1aXJlKCcuL2Rpc3QvaW5kZXguanMnKVxuICAgIDogcmVxdWlyZSgnLi9saWIvaW5kZXguanMnKTtcbiIsIi8qKlxuICogQGRlc2NyaXB0aW9uIEVudW0gZm9yIGxvZyBsZXZlbHMuXG4gKiBAc3VtbWFyeSBEZWZpbmVzIGRpZmZlcmVudCBsZXZlbHMgb2YgbG9nZ2luZyBmb3IgdGhlIGFwcGxpY2F0aW9uLlxuICogQGVudW0ge3N0cmluZ31cbiAqIEBtZW1iZXJPZiBtb2R1bGU6TG9nZ2luZ1xuICovXG5leHBvcnQgdmFyIExvZ0xldmVsO1xuKGZ1bmN0aW9uIChMb2dMZXZlbCkge1xuICAgIC8qKiBFcnJvciBldmVudHMgdGhhdCBhcmUgbGlrZWx5IHRvIGNhdXNlIHByb2JsZW1zLiAqL1xuICAgIExvZ0xldmVsW1wiZXJyb3JcIl0gPSBcImVycm9yXCI7XG4gICAgLyoqIFJvdXRpbmUgaW5mb3JtYXRpb24sIHN1Y2ggYXMgb25nb2luZyBzdGF0dXMgb3IgcGVyZm9ybWFuY2UuICovXG4gICAgTG9nTGV2ZWxbXCJpbmZvXCJdID0gXCJpbmZvXCI7XG4gICAgLyoqIEFkZGl0aW9uYWwgcmVsZXZhbnQgaW5mb3JtYXRpb24uICovXG4gICAgTG9nTGV2ZWxbXCJ2ZXJib3NlXCJdID0gXCJ2ZXJib3NlXCI7XG4gICAgLyoqIERlYnVnIG9yIHRyYWNlIGluZm9ybWF0aW9uLiAqL1xuICAgIExvZ0xldmVsW1wiZGVidWdcIl0gPSBcImRlYnVnXCI7XG4gICAgLyoqIHdheSB0b28gdmVyYm9zZSBvciBzaWxseSBpbmZvcm1hdGlvbi4gKi9cbiAgICBMb2dMZXZlbFtcInNpbGx5XCJdID0gXCJzaWxseVwiO1xufSkoTG9nTGV2ZWwgfHwgKExvZ0xldmVsID0ge30pKTtcbi8qKlxuICogQGRlc2NyaXB0aW9uIE51bWVyaWMgdmFsdWVzIGFzc29jaWF0ZWQgd2l0aCBsb2cgbGV2ZWxzLlxuICogQHN1bW1hcnkgUHJvdmlkZXMgYSBudW1lcmljIHJlcHJlc2VudGF0aW9uIG9mIGxvZyBsZXZlbHMgZm9yIGNvbXBhcmlzb24gYW5kIGZpbHRlcmluZy5cbiAqIEBjb25zdCBOdW1lcmljTG9nTGV2ZWxzXG4gKiBAcHJvcGVydHkge251bWJlcn0gZXJyb3IgLSBOdW1lcmljIHZhbHVlIGZvciBlcnJvciBsZXZlbCAoMikuXG4gKiBAcHJvcGVydHkge251bWJlcn0gaW5mbyAtIE51bWVyaWMgdmFsdWUgZm9yIGluZm8gbGV2ZWwgKDQpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IHZlcmJvc2UgLSBOdW1lcmljIHZhbHVlIGZvciB2ZXJib3NlIGxldmVsICg2KS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBkZWJ1ZyAtIE51bWVyaWMgdmFsdWUgZm9yIGRlYnVnIGxldmVsICg3KS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBzaWxseSAtIE51bWVyaWMgdmFsdWUgZm9yIHNpbGx5IGxldmVsICg5KS5cbiAqIEBtZW1iZXJPZiBtb2R1bGU6TG9nZ2luZ1xuICovXG5leHBvcnQgY29uc3QgTnVtZXJpY0xvZ0xldmVscyA9IHtcbiAgICBlcnJvcjogMixcbiAgICBpbmZvOiA0LFxuICAgIHZlcmJvc2U6IDYsXG4gICAgZGVidWc6IDcsXG4gICAgc2lsbHk6IDksXG59O1xuLyoqXG4gKiBAZGVzY3JpcHRpb24gRW51bSBmb3IgbG9nZ2luZyBvdXRwdXQgbW9kZXMuXG4gKiBAc3VtbWFyeSBEZWZpbmVzIGRpZmZlcmVudCBvdXRwdXQgZm9ybWF0cyBmb3IgbG9nIG1lc3NhZ2VzLlxuICogQGVudW0ge3N0cmluZ31cbiAqIEBtZW1iZXJPZiBtb2R1bGU6TG9nZ2luZ1xuICovXG5leHBvcnQgdmFyIExvZ2dpbmdNb2RlO1xuKGZ1bmN0aW9uIChMb2dnaW5nTW9kZSkge1xuICAgIC8qKiBSYXcgdGV4dCBmb3JtYXQgZm9yIGh1bWFuIHJlYWRhYmlsaXR5ICovXG4gICAgTG9nZ2luZ01vZGVbXCJSQVdcIl0gPSBcInJhd1wiO1xuICAgIC8qKiBKU09OIGZvcm1hdCBmb3IgbWFjaGluZSBwYXJzaW5nICovXG4gICAgTG9nZ2luZ01vZGVbXCJKU09OXCJdID0gXCJqc29uXCI7XG59KShMb2dnaW5nTW9kZSB8fCAoTG9nZ2luZ01vZGUgPSB7fSkpO1xuLyoqXG4gKiBAZGVzY3JpcHRpb24gRGVmYXVsdCB0aGVtZSBmb3Igc3R5bGluZyBsb2cgb3V0cHV0LlxuICogQHN1bW1hcnkgRGVmaW5lcyB0aGUgZGVmYXVsdCBjb2xvciBhbmQgc3R5bGUgc2V0dGluZ3MgZm9yIHZhcmlvdXMgY29tcG9uZW50cyBvZiBsb2cgbWVzc2FnZXMuXG4gKiBAY29uc3QgRGVmYXVsdFRoZW1lXG4gKiBAdHlwZWRlZiB7VGhlbWV9IERlZmF1bHRUaGVtZVxuICogQHByb3BlcnR5IHtPYmplY3R9IGNsYXNzIC0gU3R5bGluZyBmb3IgY2xhc3MgbmFtZXMuXG4gKiBAcHJvcGVydHkge251bWJlcn0gY2xhc3MuZmcgLSBGb3JlZ3JvdW5kIGNvbG9yIGNvZGUgZm9yIGNsYXNzIG5hbWVzICgzNCkuXG4gKiBAcHJvcGVydHkge09iamVjdH0gaWQgLSBTdHlsaW5nIGZvciBpZGVudGlmaWVycy5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBpZC5mZyAtIEZvcmVncm91bmQgY29sb3IgY29kZSBmb3IgaWRlbnRpZmllcnMgKDM2KS5cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBzdGFjayAtIFN0eWxpbmcgZm9yIHN0YWNrIHRyYWNlcyAoZW1wdHkgb2JqZWN0KS5cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0aW1lc3RhbXAgLSBTdHlsaW5nIGZvciB0aW1lc3RhbXBzIChlbXB0eSBvYmplY3QpLlxuICogQHByb3BlcnR5IHtPYmplY3R9IG1lc3NhZ2UgLSBTdHlsaW5nIGZvciBkaWZmZXJlbnQgdHlwZXMgb2YgbWVzc2FnZXMuXG4gKiBAcHJvcGVydHkge09iamVjdH0gbWVzc2FnZS5lcnJvciAtIFN0eWxpbmcgZm9yIGVycm9yIG1lc3NhZ2VzLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IG1lc3NhZ2UuZXJyb3IuZmcgLSBGb3JlZ3JvdW5kIGNvbG9yIGNvZGUgZm9yIGVycm9yIG1lc3NhZ2VzICgzMSkuXG4gKiBAcHJvcGVydHkge09iamVjdH0gbWV0aG9kIC0gU3R5bGluZyBmb3IgbWV0aG9kIG5hbWVzIChlbXB0eSBvYmplY3QpLlxuICogQHByb3BlcnR5IHtPYmplY3R9IGxvZ0xldmVsIC0gU3R5bGluZyBmb3IgZGlmZmVyZW50IGxvZyBsZXZlbHMuXG4gKiBAcHJvcGVydHkge09iamVjdH0gbG9nTGV2ZWwuZXJyb3IgLSBTdHlsaW5nIGZvciBlcnJvciBsZXZlbCBsb2dzLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGxvZ0xldmVsLmVycm9yLmZnIC0gRm9yZWdyb3VuZCBjb2xvciBjb2RlIGZvciBlcnJvciBsZXZlbCBsb2dzICgzMSkuXG4gKiBAcHJvcGVydHkge3N0cmluZ1tdfSBsb2dMZXZlbC5lcnJvci5zdHlsZSAtIFN0eWxlIGF0dHJpYnV0ZXMgZm9yIGVycm9yIGxldmVsIGxvZ3MgKFtcImJvbGRcIl0pLlxuICogQHByb3BlcnR5IHtPYmplY3R9IGxvZ0xldmVsLmluZm8gLSBTdHlsaW5nIGZvciBpbmZvIGxldmVsIGxvZ3MgKGVtcHR5IG9iamVjdCkuXG4gKiBAcHJvcGVydHkge09iamVjdH0gbG9nTGV2ZWwudmVyYm9zZSAtIFN0eWxpbmcgZm9yIHZlcmJvc2UgbGV2ZWwgbG9ncyAoZW1wdHkgb2JqZWN0KS5cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBsb2dMZXZlbC5kZWJ1ZyAtIFN0eWxpbmcgZm9yIGRlYnVnIGxldmVsIGxvZ3MuXG4gKiBAcHJvcGVydHkge251bWJlcn0gbG9nTGV2ZWwuZGVidWcuZmcgLSBGb3JlZ3JvdW5kIGNvbG9yIGNvZGUgZm9yIGRlYnVnIGxldmVsIGxvZ3MgKDMzKS5cbiAqIEBtZW1iZXJPZiBtb2R1bGU6TG9nZ2luZ1xuICovXG5leHBvcnQgY29uc3QgRGVmYXVsdFRoZW1lID0ge1xuICAgIGNsYXNzOiB7XG4gICAgICAgIGZnOiAzNCxcbiAgICB9LFxuICAgIGlkOiB7XG4gICAgICAgIGZnOiAzNixcbiAgICB9LFxuICAgIHN0YWNrOiB7fSxcbiAgICB0aW1lc3RhbXA6IHt9LFxuICAgIG1lc3NhZ2U6IHtcbiAgICAgICAgZXJyb3I6IHtcbiAgICAgICAgICAgIGZnOiAzMSxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIG1ldGhvZDoge30sXG4gICAgbG9nTGV2ZWw6IHtcbiAgICAgICAgZXJyb3I6IHtcbiAgICAgICAgICAgIGZnOiAzMSxcbiAgICAgICAgICAgIHN0eWxlOiBbXCJib2xkXCJdLFxuICAgICAgICB9LFxuICAgICAgICBpbmZvOiB7fSxcbiAgICAgICAgdmVyYm9zZToge30sXG4gICAgICAgIGRlYnVnOiB7XG4gICAgICAgICAgICBmZzogMzMsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG4vKipcbiAqIEBkZXNjcmlwdGlvbiBEZWZhdWx0IGNvbmZpZ3VyYXRpb24gZm9yIGxvZ2dpbmcuXG4gKiBAc3VtbWFyeSBEZWZpbmVzIHRoZSBkZWZhdWx0IHNldHRpbmdzIGZvciB0aGUgbG9nZ2luZyBzeXN0ZW0sIGluY2x1ZGluZyB2ZXJib3NpdHksIGxvZyBsZXZlbCwgc3R5bGluZywgYW5kIHRpbWVzdGFtcCBmb3JtYXQuXG4gKiBAY29uc3QgRGVmYXVsdExvZ2dpbmdDb25maWdcbiAqIEB0eXBlZGVmIHtMb2dnaW5nQ29uZmlnfSBEZWZhdWx0TG9nZ2luZ0NvbmZpZ1xuICogQHByb3BlcnR5IHtudW1iZXJ9IHZlcmJvc2UgLSBWZXJib3NpdHkgbGV2ZWwgKDApLlxuICogQHByb3BlcnR5IHtMb2dMZXZlbH0gbGV2ZWwgLSBEZWZhdWx0IGxvZyBsZXZlbCAoTG9nTGV2ZWwuaW5mbykuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGxvZ0xldmVsIC0gV2hldGhlciB0byBkaXNwbGF5IGxvZyBsZXZlbCBpbiBvdXRwdXQgKHRydWUpLlxuICogQHByb3BlcnR5IHtMb2dnaW5nTW9kZX0gbW9kZSAtIE91dHB1dCBmb3JtYXQgbW9kZSAoTG9nZ2luZ01vZGUuUkFXKS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gc3R5bGUgLSBXaGV0aGVyIHRvIGFwcGx5IHN0eWxpbmcgdG8gbG9nIG91dHB1dCAoZmFsc2UpLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHNlcGFyYXRvciAtIFNlcGFyYXRvciBiZXR3ZWVuIGxvZyBjb21wb25lbnRzIChcIiAtIFwiKS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gdGltZXN0YW1wIC0gV2hldGhlciB0byBpbmNsdWRlIHRpbWVzdGFtcHMgaW4gbG9nIG1lc3NhZ2VzICh0cnVlKS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0aW1lc3RhbXBGb3JtYXQgLSBGb3JtYXQgZm9yIHRpbWVzdGFtcHMgKFwiSEg6bW06c3MuU1NTXCIpLlxuICogQHByb3BlcnR5IHtib29sZWFufSBjb250ZXh0IC0gV2hldGhlciB0byBpbmNsdWRlIGNvbnRleHQgaW5mb3JtYXRpb24gaW4gbG9nIG1lc3NhZ2VzICh0cnVlKS5cbiAqIEBwcm9wZXJ0eSB7VGhlbWV9IHRoZW1lIC0gVGhlIHRoZW1lIHRvIHVzZSBmb3Igc3R5bGluZyBsb2cgbWVzc2FnZXMgKERlZmF1bHRUaGVtZSkuXG4gKiBAbWVtYmVyT2YgbW9kdWxlOkxvZ2dpbmdcbiAqL1xuZXhwb3J0IGNvbnN0IERlZmF1bHRMb2dnaW5nQ29uZmlnID0ge1xuICAgIHZlcmJvc2U6IDAsXG4gICAgbGV2ZWw6IExvZ0xldmVsLmluZm8sXG4gICAgbG9nTGV2ZWw6IHRydWUsXG4gICAgbW9kZTogTG9nZ2luZ01vZGUuUkFXLFxuICAgIHN0eWxlOiBmYWxzZSxcbiAgICBjb250ZXh0U2VwYXJhdG9yOiBcIi5cIixcbiAgICBzZXBhcmF0b3I6IFwiIC0gXCIsXG4gICAgdGltZXN0YW1wOiB0cnVlLFxuICAgIHRpbWVzdGFtcEZvcm1hdDogXCJISDptbTpzcy5TU1NcIixcbiAgICBjb250ZXh0OiB0cnVlLFxuICAgIHRoZW1lOiBEZWZhdWx0VGhlbWUsXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pWTI5dWMzUmhiblJ6TG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhNaU9sc2lMaTR2TGk0dmMzSmpMMk52Ym5OMFlXNTBjeTUwY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pUVVGRlFUczdPenM3UjBGTFJ6dEJRVU5JTEUxQlFVMHNRMEZCVGl4SlFVRlpMRkZCVjFnN1FVRllSQ3hYUVVGWkxGRkJRVkU3U1VGRGJFSXNjMFJCUVhORU8wbEJRM1JFTERKQ1FVRmxMRU5CUVVFN1NVRkRaaXhyUlVGQmEwVTdTVUZEYkVVc2VVSkJRV0VzUTBGQlFUdEpRVU5pTEhWRFFVRjFRenRKUVVOMlF5d3JRa0ZCYlVJc1EwRkJRVHRKUVVOdVFpeHJRMEZCYTBNN1NVRkRiRU1zTWtKQlFXVXNRMEZCUVR0SlFVTm1MRFJEUVVFMFF6dEpRVU0xUXl3eVFrRkJaU3hEUVVGQk8wRkJRMnBDTEVOQlFVTXNSVUZZVnl4UlFVRlJMRXRCUVZJc1VVRkJVU3hSUVZkdVFqdEJRVVZFT3pzN096czdPenM3TzBkQlZVYzdRVUZEU0N4TlFVRk5MRU5CUVVNc1RVRkJUU3huUWtGQlowSXNSMEZCUnp0SlFVTTVRaXhMUVVGTExFVkJRVVVzUTBGQlF6dEpRVU5TTEVsQlFVa3NSVUZCUlN4RFFVRkRPMGxCUTFBc1QwRkJUeXhGUVVGRkxFTkJRVU03U1VGRFZpeExRVUZMTEVWQlFVVXNRMEZCUXp0SlFVTlNMRXRCUVVzc1JVRkJSU3hEUVVGRE8wTkJRMVFzUTBGQlF6dEJRVVZHT3pzN096dEhRVXRITzBGQlEwZ3NUVUZCVFN4RFFVRk9MRWxCUVZrc1YwRkxXRHRCUVV4RUxGZEJRVmtzVjBGQlZ6dEpRVU55UWl3MFEwRkJORU03U1VGRE5VTXNNRUpCUVZjc1EwRkJRVHRKUVVOWUxITkRRVUZ6UXp0SlFVTjBReXcwUWtGQllTeERRVUZCTzBGQlEyWXNRMEZCUXl4RlFVeFhMRmRCUVZjc1MwRkJXQ3hYUVVGWExGRkJTM1JDTzBGQlJVUTdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3p0SFFYZENSenRCUVVOSUxFMUJRVTBzUTBGQlF5eE5RVUZOTEZsQlFWa3NSMEZCVlR0SlFVTnFReXhMUVVGTExFVkJRVVU3VVVGRFRDeEZRVUZGTEVWQlFVVXNSVUZCUlR0TFFVTlFPMGxCUTBRc1JVRkJSU3hGUVVGRk8xRkJRMFlzUlVGQlJTeEZRVUZGTEVWQlFVVTdTMEZEVUR0SlFVTkVMRXRCUVVzc1JVRkJSU3hGUVVGRk8wbEJRMVFzVTBGQlV5eEZRVUZGTEVWQlFVVTdTVUZEWWl4UFFVRlBMRVZCUVVVN1VVRkRVQ3hMUVVGTExFVkJRVVU3V1VGRFRDeEZRVUZGTEVWQlFVVXNSVUZCUlR0VFFVTlFPMHRCUTBZN1NVRkRSQ3hOUVVGTkxFVkJRVVVzUlVGQlJUdEpRVU5XTEZGQlFWRXNSVUZCUlR0UlFVTlNMRXRCUVVzc1JVRkJSVHRaUVVOTUxFVkJRVVVzUlVGQlJTeEZRVUZGTzFsQlEwNHNTMEZCU3l4RlFVRkZMRU5CUVVNc1RVRkJUU3hEUVVGRE8xTkJRMmhDTzFGQlEwUXNTVUZCU1N4RlFVRkZMRVZCUVVVN1VVRkRVaXhQUVVGUExFVkJRVVVzUlVGQlJUdFJRVU5ZTEV0QlFVc3NSVUZCUlR0WlFVTk1MRVZCUVVVc1JVRkJSU3hGUVVGRk8xTkJRMUE3UzBGRFJqdERRVU5HTEVOQlFVTTdRVUZGUmpzN096czdPenM3T3pzN096czdPenRIUVdkQ1J6dEJRVU5JTEUxQlFVMHNRMEZCUXl4TlFVRk5MRzlDUVVGdlFpeEhRVUZyUWp0SlFVTnFSQ3hQUVVGUExFVkJRVVVzUTBGQlF6dEpRVU5XTEV0QlFVc3NSVUZCUlN4UlFVRlJMRU5CUVVNc1NVRkJTVHRKUVVOd1FpeFJRVUZSTEVWQlFVVXNTVUZCU1R0SlFVTmtMRWxCUVVrc1JVRkJSU3hYUVVGWExFTkJRVU1zUjBGQlJ6dEpRVU55UWl4TFFVRkxMRVZCUVVVc1MwRkJTenRKUVVOYUxHZENRVUZuUWl4RlFVRkZMRWRCUVVjN1NVRkRja0lzVTBGQlV5eEZRVUZGTEV0QlFVczdTVUZEYUVJc1UwRkJVeXhGUVVGRkxFbEJRVWs3U1VGRFppeGxRVUZsTEVWQlFVVXNZMEZCWXp0SlFVTXZRaXhQUVVGUExFVkJRVVVzU1VGQlNUdEpRVU5pTEV0QlFVc3NSVUZCUlN4WlFVRlpPME5CUTNCQ0xFTkJRVU1pTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lKcGJYQnZjblFnZXlCTWIyZG5hVzVuUTI5dVptbG5MQ0JVYUdWdFpTQjlJR1p5YjIwZ1hDSXVMM1I1Y0dWelhDSTdYRzVjYmk4cUtseHVJQ29nUUdSbGMyTnlhWEIwYVc5dUlFVnVkVzBnWm05eUlHeHZaeUJzWlhabGJITXVYRzRnS2lCQWMzVnRiV0Z5ZVNCRVpXWnBibVZ6SUdScFptWmxjbVZ1ZENCc1pYWmxiSE1nYjJZZ2JHOW5aMmx1WnlCbWIzSWdkR2hsSUdGd2NHeHBZMkYwYVc5dUxseHVJQ29nUUdWdWRXMGdlM04wY21sdVozMWNiaUFxSUVCdFpXMWlaWEpQWmlCdGIyUjFiR1U2VEc5bloybHVaMXh1SUNvdlhHNWxlSEJ2Y25RZ1pXNTFiU0JNYjJkTVpYWmxiQ0I3WEc0Z0lDOHFLaUJGY25KdmNpQmxkbVZ1ZEhNZ2RHaGhkQ0JoY21VZ2JHbHJaV3g1SUhSdklHTmhkWE5sSUhCeWIySnNaVzF6TGlBcUwxeHVJQ0JsY25KdmNpQTlJRndpWlhKeWIzSmNJaXhjYmlBZ0x5b3FJRkp2ZFhScGJtVWdhVzVtYjNKdFlYUnBiMjRzSUhOMVkyZ2dZWE1nYjI1bmIybHVaeUJ6ZEdGMGRYTWdiM0lnY0dWeVptOXliV0Z1WTJVdUlDb3ZYRzRnSUdsdVptOGdQU0JjSW1sdVptOWNJaXhjYmlBZ0x5b3FJRUZrWkdsMGFXOXVZV3dnY21Wc1pYWmhiblFnYVc1bWIzSnRZWFJwYjI0dUlDb3ZYRzRnSUhabGNtSnZjMlVnUFNCY0luWmxjbUp2YzJWY0lpeGNiaUFnTHlvcUlFUmxZblZuSUc5eUlIUnlZV05sSUdsdVptOXliV0YwYVc5dUxpQXFMMXh1SUNCa1pXSjFaeUE5SUZ3aVpHVmlkV2RjSWl4Y2JpQWdMeW9xSUhkaGVTQjBiMjhnZG1WeVltOXpaU0J2Y2lCemFXeHNlU0JwYm1admNtMWhkR2x2Ymk0Z0tpOWNiaUFnYzJsc2JIa2dQU0JjSW5OcGJHeDVYQ0lzWEc1OVhHNWNiaThxS2x4dUlDb2dRR1JsYzJOeWFYQjBhVzl1SUU1MWJXVnlhV01nZG1Gc2RXVnpJR0Z6YzI5amFXRjBaV1FnZDJsMGFDQnNiMmNnYkdWMlpXeHpMbHh1SUNvZ1FITjFiVzFoY25rZ1VISnZkbWxrWlhNZ1lTQnVkVzFsY21saklISmxjSEpsYzJWdWRHRjBhVzl1SUc5bUlHeHZaeUJzWlhabGJITWdabTl5SUdOdmJYQmhjbWx6YjI0Z1lXNWtJR1pwYkhSbGNtbHVaeTVjYmlBcUlFQmpiMjV6ZENCT2RXMWxjbWxqVEc5blRHVjJaV3h6WEc0Z0tpQkFjSEp2Y0dWeWRIa2dlMjUxYldKbGNuMGdaWEp5YjNJZ0xTQk9kVzFsY21saklIWmhiSFZsSUdadmNpQmxjbkp2Y2lCc1pYWmxiQ0FvTWlrdVhHNGdLaUJBY0hKdmNHVnlkSGtnZTI1MWJXSmxjbjBnYVc1bWJ5QXRJRTUxYldWeWFXTWdkbUZzZFdVZ1ptOXlJR2x1Wm04Z2JHVjJaV3dnS0RRcExseHVJQ29nUUhCeWIzQmxjblI1SUh0dWRXMWlaWEo5SUhabGNtSnZjMlVnTFNCT2RXMWxjbWxqSUhaaGJIVmxJR1p2Y2lCMlpYSmliM05sSUd4bGRtVnNJQ2cyS1M1Y2JpQXFJRUJ3Y205d1pYSjBlU0I3Ym5WdFltVnlmU0JrWldKMVp5QXRJRTUxYldWeWFXTWdkbUZzZFdVZ1ptOXlJR1JsWW5WbklHeGxkbVZzSUNnM0tTNWNiaUFxSUVCd2NtOXdaWEowZVNCN2JuVnRZbVZ5ZlNCemFXeHNlU0F0SUU1MWJXVnlhV01nZG1Gc2RXVWdabTl5SUhOcGJHeDVJR3hsZG1Wc0lDZzVLUzVjYmlBcUlFQnRaVzFpWlhKUFppQnRiMlIxYkdVNlRHOW5aMmx1WjF4dUlDb3ZYRzVsZUhCdmNuUWdZMjl1YzNRZ1RuVnRaWEpwWTB4dloweGxkbVZzY3lBOUlIdGNiaUFnWlhKeWIzSTZJRElzWEc0Z0lHbHVabTg2SURRc1hHNGdJSFpsY21KdmMyVTZJRFlzWEc0Z0lHUmxZblZuT2lBM0xGeHVJQ0J6YVd4c2VUb2dPU3hjYm4wN1hHNWNiaThxS2x4dUlDb2dRR1JsYzJOeWFYQjBhVzl1SUVWdWRXMGdabTl5SUd4dloyZHBibWNnYjNWMGNIVjBJRzF2WkdWekxseHVJQ29nUUhOMWJXMWhjbmtnUkdWbWFXNWxjeUJrYVdabVpYSmxiblFnYjNWMGNIVjBJR1p2Y20xaGRITWdabTl5SUd4dlp5QnRaWE56WVdkbGN5NWNiaUFxSUVCbGJuVnRJSHR6ZEhKcGJtZDlYRzRnS2lCQWJXVnRZbVZ5VDJZZ2JXOWtkV3hsT2t4dloyZHBibWRjYmlBcUwxeHVaWGh3YjNKMElHVnVkVzBnVEc5bloybHVaMDF2WkdVZ2UxeHVJQ0F2S2lvZ1VtRjNJSFJsZUhRZ1ptOXliV0YwSUdadmNpQm9kVzFoYmlCeVpXRmtZV0pwYkdsMGVTQXFMMXh1SUNCU1FWY2dQU0JjSW5KaGQxd2lMRnh1SUNBdktpb2dTbE5QVGlCbWIzSnRZWFFnWm05eUlHMWhZMmhwYm1VZ2NHRnljMmx1WnlBcUwxeHVJQ0JLVTA5T0lEMGdYQ0pxYzI5dVhDSXNYRzU5WEc1Y2JpOHFLbHh1SUNvZ1FHUmxjMk55YVhCMGFXOXVJRVJsWm1GMWJIUWdkR2hsYldVZ1ptOXlJSE4wZVd4cGJtY2diRzluSUc5MWRIQjFkQzVjYmlBcUlFQnpkVzF0WVhKNUlFUmxabWx1WlhNZ2RHaGxJR1JsWm1GMWJIUWdZMjlzYjNJZ1lXNWtJSE4wZVd4bElITmxkSFJwYm1keklHWnZjaUIyWVhKcGIzVnpJR052YlhCdmJtVnVkSE1nYjJZZ2JHOW5JRzFsYzNOaFoyVnpMbHh1SUNvZ1FHTnZibk4wSUVSbFptRjFiSFJVYUdWdFpWeHVJQ29nUUhSNWNHVmtaV1lnZTFSb1pXMWxmU0JFWldaaGRXeDBWR2hsYldWY2JpQXFJRUJ3Y205d1pYSjBlU0I3VDJKcVpXTjBmU0JqYkdGemN5QXRJRk4wZVd4cGJtY2dabTl5SUdOc1lYTnpJRzVoYldWekxseHVJQ29nUUhCeWIzQmxjblI1SUh0dWRXMWlaWEo5SUdOc1lYTnpMbVpuSUMwZ1JtOXlaV2R5YjNWdVpDQmpiMnh2Y2lCamIyUmxJR1p2Y2lCamJHRnpjeUJ1WVcxbGN5QW9NelFwTGx4dUlDb2dRSEJ5YjNCbGNuUjVJSHRQWW1wbFkzUjlJR2xrSUMwZ1UzUjViR2x1WnlCbWIzSWdhV1JsYm5ScFptbGxjbk11WEc0Z0tpQkFjSEp2Y0dWeWRIa2dlMjUxYldKbGNuMGdhV1F1Wm1jZ0xTQkdiM0psWjNKdmRXNWtJR052Ykc5eUlHTnZaR1VnWm05eUlHbGtaVzUwYVdacFpYSnpJQ2d6TmlrdVhHNGdLaUJBY0hKdmNHVnlkSGtnZTA5aWFtVmpkSDBnYzNSaFkyc2dMU0JUZEhsc2FXNW5JR1p2Y2lCemRHRmpheUIwY21GalpYTWdLR1Z0Y0hSNUlHOWlhbVZqZENrdVhHNGdLaUJBY0hKdmNHVnlkSGtnZTA5aWFtVmpkSDBnZEdsdFpYTjBZVzF3SUMwZ1UzUjViR2x1WnlCbWIzSWdkR2x0WlhOMFlXMXdjeUFvWlcxd2RIa2diMkpxWldOMEtTNWNiaUFxSUVCd2NtOXdaWEowZVNCN1QySnFaV04wZlNCdFpYTnpZV2RsSUMwZ1UzUjViR2x1WnlCbWIzSWdaR2xtWm1WeVpXNTBJSFI1Y0dWeklHOW1JRzFsYzNOaFoyVnpMbHh1SUNvZ1FIQnliM0JsY25SNUlIdFBZbXBsWTNSOUlHMWxjM05oWjJVdVpYSnliM0lnTFNCVGRIbHNhVzVuSUdadmNpQmxjbkp2Y2lCdFpYTnpZV2RsY3k1Y2JpQXFJRUJ3Y205d1pYSjBlU0I3Ym5WdFltVnlmU0J0WlhOellXZGxMbVZ5Y205eUxtWm5JQzBnUm05eVpXZHliM1Z1WkNCamIyeHZjaUJqYjJSbElHWnZjaUJsY25KdmNpQnRaWE56WVdkbGN5QW9NekVwTGx4dUlDb2dRSEJ5YjNCbGNuUjVJSHRQWW1wbFkzUjlJRzFsZEdodlpDQXRJRk4wZVd4cGJtY2dabTl5SUcxbGRHaHZaQ0J1WVcxbGN5QW9aVzF3ZEhrZ2IySnFaV04wS1M1Y2JpQXFJRUJ3Y205d1pYSjBlU0I3VDJKcVpXTjBmU0JzYjJkTVpYWmxiQ0F0SUZOMGVXeHBibWNnWm05eUlHUnBabVpsY21WdWRDQnNiMmNnYkdWMlpXeHpMbHh1SUNvZ1FIQnliM0JsY25SNUlIdFBZbXBsWTNSOUlHeHZaMHhsZG1Wc0xtVnljbTl5SUMwZ1UzUjViR2x1WnlCbWIzSWdaWEp5YjNJZ2JHVjJaV3dnYkc5bmN5NWNiaUFxSUVCd2NtOXdaWEowZVNCN2JuVnRZbVZ5ZlNCc2IyZE1aWFpsYkM1bGNuSnZjaTVtWnlBdElFWnZjbVZuY205MWJtUWdZMjlzYjNJZ1kyOWtaU0JtYjNJZ1pYSnliM0lnYkdWMlpXd2diRzluY3lBb016RXBMbHh1SUNvZ1FIQnliM0JsY25SNUlIdHpkSEpwYm1kYlhYMGdiRzluVEdWMlpXd3VaWEp5YjNJdWMzUjViR1VnTFNCVGRIbHNaU0JoZEhSeWFXSjFkR1Z6SUdadmNpQmxjbkp2Y2lCc1pYWmxiQ0JzYjJkeklDaGJYQ0ppYjJ4a1hDSmRLUzVjYmlBcUlFQndjbTl3WlhKMGVTQjdUMkpxWldOMGZTQnNiMmRNWlhabGJDNXBibVp2SUMwZ1UzUjViR2x1WnlCbWIzSWdhVzVtYnlCc1pYWmxiQ0JzYjJkeklDaGxiWEIwZVNCdlltcGxZM1FwTGx4dUlDb2dRSEJ5YjNCbGNuUjVJSHRQWW1wbFkzUjlJR3h2WjB4bGRtVnNMblpsY21KdmMyVWdMU0JUZEhsc2FXNW5JR1p2Y2lCMlpYSmliM05sSUd4bGRtVnNJR3h2WjNNZ0tHVnRjSFI1SUc5aWFtVmpkQ2t1WEc0Z0tpQkFjSEp2Y0dWeWRIa2dlMDlpYW1WamRIMGdiRzluVEdWMlpXd3VaR1ZpZFdjZ0xTQlRkSGxzYVc1bklHWnZjaUJrWldKMVp5QnNaWFpsYkNCc2IyZHpMbHh1SUNvZ1FIQnliM0JsY25SNUlIdHVkVzFpWlhKOUlHeHZaMHhsZG1Wc0xtUmxZblZuTG1abklDMGdSbTl5WldkeWIzVnVaQ0JqYjJ4dmNpQmpiMlJsSUdadmNpQmtaV0oxWnlCc1pYWmxiQ0JzYjJkeklDZ3pNeWt1WEc0Z0tpQkFiV1Z0WW1WeVQyWWdiVzlrZFd4bE9reHZaMmRwYm1kY2JpQXFMMXh1Wlhod2IzSjBJR052Ym5OMElFUmxabUYxYkhSVWFHVnRaVG9nVkdobGJXVWdQU0I3WEc0Z0lHTnNZWE56T2lCN1hHNGdJQ0FnWm1jNklETTBMRnh1SUNCOUxGeHVJQ0JwWkRvZ2UxeHVJQ0FnSUdabk9pQXpOaXhjYmlBZ2ZTeGNiaUFnYzNSaFkyczZJSHQ5TEZ4dUlDQjBhVzFsYzNSaGJYQTZJSHQ5TEZ4dUlDQnRaWE56WVdkbE9pQjdYRzRnSUNBZ1pYSnliM0k2SUh0Y2JpQWdJQ0FnSUdabk9pQXpNU3hjYmlBZ0lDQjlMRnh1SUNCOUxGeHVJQ0J0WlhSb2IyUTZJSHQ5TEZ4dUlDQnNiMmRNWlhabGJEb2dlMXh1SUNBZ0lHVnljbTl5T2lCN1hHNGdJQ0FnSUNCbVp6b2dNekVzWEc0Z0lDQWdJQ0J6ZEhsc1pUb2dXMXdpWW05c1pGd2lYU3hjYmlBZ0lDQjlMRnh1SUNBZ0lHbHVabTg2SUh0OUxGeHVJQ0FnSUhabGNtSnZjMlU2SUh0OUxGeHVJQ0FnSUdSbFluVm5PaUI3WEc0Z0lDQWdJQ0JtWnpvZ016TXNYRzRnSUNBZ2ZTeGNiaUFnZlN4Y2JuMDdYRzVjYmk4cUtseHVJQ29nUUdSbGMyTnlhWEIwYVc5dUlFUmxabUYxYkhRZ1kyOXVabWxuZFhKaGRHbHZiaUJtYjNJZ2JHOW5aMmx1Wnk1Y2JpQXFJRUJ6ZFcxdFlYSjVJRVJsWm1sdVpYTWdkR2hsSUdSbFptRjFiSFFnYzJWMGRHbHVaM01nWm05eUlIUm9aU0JzYjJkbmFXNW5JSE41YzNSbGJTd2dhVzVqYkhWa2FXNW5JSFpsY21KdmMybDBlU3dnYkc5bklHeGxkbVZzTENCemRIbHNhVzVuTENCaGJtUWdkR2x0WlhOMFlXMXdJR1p2Y20xaGRDNWNiaUFxSUVCamIyNXpkQ0JFWldaaGRXeDBURzluWjJsdVowTnZibVpwWjF4dUlDb2dRSFI1Y0dWa1pXWWdlMHh2WjJkcGJtZERiMjVtYVdkOUlFUmxabUYxYkhSTWIyZG5hVzVuUTI5dVptbG5YRzRnS2lCQWNISnZjR1Z5ZEhrZ2UyNTFiV0psY24wZ2RtVnlZbTl6WlNBdElGWmxjbUp2YzJsMGVTQnNaWFpsYkNBb01Da3VYRzRnS2lCQWNISnZjR1Z5ZEhrZ2UweHZaMHhsZG1Wc2ZTQnNaWFpsYkNBdElFUmxabUYxYkhRZ2JHOW5JR3hsZG1Wc0lDaE1iMmRNWlhabGJDNXBibVp2S1M1Y2JpQXFJRUJ3Y205d1pYSjBlU0I3WW05dmJHVmhibjBnYkc5blRHVjJaV3dnTFNCWGFHVjBhR1Z5SUhSdklHUnBjM0JzWVhrZ2JHOW5JR3hsZG1Wc0lHbHVJRzkxZEhCMWRDQW9kSEoxWlNrdVhHNGdLaUJBY0hKdmNHVnlkSGtnZTB4dloyZHBibWROYjJSbGZTQnRiMlJsSUMwZ1QzVjBjSFYwSUdadmNtMWhkQ0J0YjJSbElDaE1iMmRuYVc1blRXOWtaUzVTUVZjcExseHVJQ29nUUhCeWIzQmxjblI1SUh0aWIyOXNaV0Z1ZlNCemRIbHNaU0F0SUZkb1pYUm9aWElnZEc4Z1lYQndiSGtnYzNSNWJHbHVaeUIwYnlCc2IyY2diM1YwY0hWMElDaG1ZV3h6WlNrdVhHNGdLaUJBY0hKdmNHVnlkSGtnZTNOMGNtbHVaMzBnYzJWd1lYSmhkRzl5SUMwZ1UyVndZWEpoZEc5eUlHSmxkSGRsWlc0Z2JHOW5JR052YlhCdmJtVnVkSE1nS0Z3aUlDMGdYQ0lwTGx4dUlDb2dRSEJ5YjNCbGNuUjVJSHRpYjI5c1pXRnVmU0IwYVcxbGMzUmhiWEFnTFNCWGFHVjBhR1Z5SUhSdklHbHVZMngxWkdVZ2RHbHRaWE4wWVcxd2N5QnBiaUJzYjJjZ2JXVnpjMkZuWlhNZ0tIUnlkV1VwTGx4dUlDb2dRSEJ5YjNCbGNuUjVJSHR6ZEhKcGJtZDlJSFJwYldWemRHRnRjRVp2Y20xaGRDQXRJRVp2Y20xaGRDQm1iM0lnZEdsdFpYTjBZVzF3Y3lBb1hDSklTRHB0YlRwemN5NVRVMU5jSWlrdVhHNGdLaUJBY0hKdmNHVnlkSGtnZTJKdmIyeGxZVzU5SUdOdmJuUmxlSFFnTFNCWGFHVjBhR1Z5SUhSdklHbHVZMngxWkdVZ1kyOXVkR1Y0ZENCcGJtWnZjbTFoZEdsdmJpQnBiaUJzYjJjZ2JXVnpjMkZuWlhNZ0tIUnlkV1VwTGx4dUlDb2dRSEJ5YjNCbGNuUjVJSHRVYUdWdFpYMGdkR2hsYldVZ0xTQlVhR1VnZEdobGJXVWdkRzhnZFhObElHWnZjaUJ6ZEhsc2FXNW5JR3h2WnlCdFpYTnpZV2RsY3lBb1JHVm1ZWFZzZEZSb1pXMWxLUzVjYmlBcUlFQnRaVzFpWlhKUFppQnRiMlIxYkdVNlRHOW5aMmx1WjF4dUlDb3ZYRzVsZUhCdmNuUWdZMjl1YzNRZ1JHVm1ZWFZzZEV4dloyZHBibWREYjI1bWFXYzZJRXh2WjJkcGJtZERiMjVtYVdjZ1BTQjdYRzRnSUhabGNtSnZjMlU2SURBc1hHNGdJR3hsZG1Wc09pQk1iMmRNWlhabGJDNXBibVp2TEZ4dUlDQnNiMmRNWlhabGJEb2dkSEoxWlN4Y2JpQWdiVzlrWlRvZ1RHOW5aMmx1WjAxdlpHVXVVa0ZYTEZ4dUlDQnpkSGxzWlRvZ1ptRnNjMlVzWEc0Z0lHTnZiblJsZUhSVFpYQmhjbUYwYjNJNklGd2lMbHdpTEZ4dUlDQnpaWEJoY21GMGIzSTZJRndpSUMwZ1hDSXNYRzRnSUhScGJXVnpkR0Z0Y0RvZ2RISjFaU3hjYmlBZ2RHbHRaWE4wWVcxd1JtOXliV0YwT2lCY0lraElPbTF0T25OekxsTlRVMXdpTEZ4dUlDQmpiMjUwWlhoME9pQjBjblZsTEZ4dUlDQjBhR1Z0WlRvZ1JHVm1ZWFZzZEZSb1pXMWxMRnh1ZlR0Y2JpSmRmUT09IiwiLyoqXG4gKiBAZGVzY3JpcHRpb24gQU5TSSBlc2NhcGUgY29kZSBmb3IgcmVzZXR0aW5nIHRleHQgZm9ybWF0dGluZy5cbiAqIEBzdW1tYXJ5IFRoaXMgY29uc3RhbnQgaG9sZHMgdGhlIEFOU0kgZXNjYXBlIHNlcXVlbmNlIHVzZWQgdG8gcmVzZXQgYWxsIHRleHQgZm9ybWF0dGluZyB0byBkZWZhdWx0LlxuICogQGNvbnN0IEFuc2lSZXNldFxuICogQG1lbWJlck9mIG1vZHVsZTpTdHlsZWRTdHJpbmdcbiAqL1xuZXhwb3J0IGNvbnN0IEFuc2lSZXNldCA9IFwiXFx4MWJbMG1cIjtcbi8qKlxuICogQGRlc2NyaXB0aW9uIFN0YW5kYXJkIGZvcmVncm91bmQgY29sb3IgY29kZXMgZm9yIEFOU0kgdGV4dCBmb3JtYXR0aW5nLlxuICogQHN1bW1hcnkgVGhpcyBvYmplY3QgbWFwcyBjb2xvciBuYW1lcyB0byB0aGVpciBjb3JyZXNwb25kaW5nIEFOU0kgY29sb3IgY29kZXMgZm9yIHN0YW5kYXJkIGZvcmVncm91bmQgY29sb3JzLlxuICogQGNvbnN0IFN0YW5kYXJkRm9yZWdyb3VuZENvbG9yc1xuICogQHByb3BlcnR5IHtudW1iZXJ9IGJsYWNrIC0gQU5TSSBjb2RlIGZvciBibGFjayB0ZXh0ICgzMCkuXG4gKiBAcHJvcGVydHkge251bWJlcn0gcmVkIC0gQU5TSSBjb2RlIGZvciByZWQgdGV4dCAoMzEpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGdyZWVuIC0gQU5TSSBjb2RlIGZvciBncmVlbiB0ZXh0ICgzMikuXG4gKiBAcHJvcGVydHkge251bWJlcn0geWVsbG93IC0gQU5TSSBjb2RlIGZvciB5ZWxsb3cgdGV4dCAoMzMpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGJsdWUgLSBBTlNJIGNvZGUgZm9yIGJsdWUgdGV4dCAoMzQpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IG1hZ2VudGEgLSBBTlNJIGNvZGUgZm9yIG1hZ2VudGEgdGV4dCAoMzUpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGN5YW4gLSBBTlNJIGNvZGUgZm9yIGN5YW4gdGV4dCAoMzYpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IHdoaXRlIC0gQU5TSSBjb2RlIGZvciB3aGl0ZSB0ZXh0ICgzNykuXG4gKiBAbWVtYmVyT2YgbW9kdWxlOlN0eWxlZFN0cmluZ1xuICovXG5leHBvcnQgY29uc3QgU3RhbmRhcmRGb3JlZ3JvdW5kQ29sb3JzID0ge1xuICAgIGJsYWNrOiAzMCxcbiAgICByZWQ6IDMxLFxuICAgIGdyZWVuOiAzMixcbiAgICB5ZWxsb3c6IDMzLFxuICAgIGJsdWU6IDM0LFxuICAgIG1hZ2VudGE6IDM1LFxuICAgIGN5YW46IDM2LFxuICAgIHdoaXRlOiAzNyxcbn07XG4vKipcbiAqIEBkZXNjcmlwdGlvbiBCcmlnaHQgZm9yZWdyb3VuZCBjb2xvciBjb2RlcyBmb3IgQU5TSSB0ZXh0IGZvcm1hdHRpbmcuXG4gKiBAc3VtbWFyeSBUaGlzIG9iamVjdCBtYXBzIGNvbG9yIG5hbWVzIHRvIHRoZWlyIGNvcnJlc3BvbmRpbmcgQU5TSSBjb2xvciBjb2RlcyBmb3IgYnJpZ2h0IGZvcmVncm91bmQgY29sb3JzLlxuICogQGNvbnN0IEJyaWdodEZvcmVncm91bmRDb2xvcnNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBibGFjayAtIEFOU0kgY29kZSBmb3IgYnJpZ2h0IGJsYWNrIHRleHQgKDkwKS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSByZWQgLSBBTlNJIGNvZGUgZm9yIGJyaWdodCByZWQgdGV4dCAoOTEpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGdyZWVuIC0gQU5TSSBjb2RlIGZvciBicmlnaHQgZ3JlZW4gdGV4dCAoOTIpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IHllbGxvdyAtIEFOU0kgY29kZSBmb3IgYnJpZ2h0IHllbGxvdyB0ZXh0ICg5MykuXG4gKiBAcHJvcGVydHkge251bWJlcn0gYmx1ZSAtIEFOU0kgY29kZSBmb3IgYnJpZ2h0IGJsdWUgdGV4dCAoOTQpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IG1hZ2VudGEgLSBBTlNJIGNvZGUgZm9yIGJyaWdodCBtYWdlbnRhIHRleHQgKDk1KS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBjeWFuIC0gQU5TSSBjb2RlIGZvciBicmlnaHQgY3lhbiB0ZXh0ICg5NikuXG4gKiBAcHJvcGVydHkge251bWJlcn0gd2hpdGUgLSBBTlNJIGNvZGUgZm9yIGJyaWdodCB3aGl0ZSB0ZXh0ICg5NykuXG4gKiBAbWVtYmVyT2YgbW9kdWxlOkBTdHlsZWRTdHJpbmdcbiAqL1xuZXhwb3J0IGNvbnN0IEJyaWdodEZvcmVncm91bmRDb2xvcnMgPSB7XG4gICAgYnJpZ2h0QmxhY2s6IDkwLFxuICAgIGJyaWdodFJlZDogOTEsXG4gICAgYnJpZ2h0R3JlZW46IDkyLFxuICAgIGJyaWdodFllbGxvdzogOTMsXG4gICAgYnJpZ2h0Qmx1ZTogOTQsXG4gICAgYnJpZ2h0TWFnZW50YTogOTUsXG4gICAgYnJpZ2h0Q3lhbjogOTYsXG4gICAgYnJpZ2h0V2hpdGU6IDk3LFxufTtcbi8qKlxuICogQGRlc2NyaXB0aW9uIFN0YW5kYXJkIGJhY2tncm91bmQgY29sb3IgY29kZXMgZm9yIEFOU0kgdGV4dCBmb3JtYXR0aW5nLlxuICogQHN1bW1hcnkgVGhpcyBvYmplY3QgbWFwcyBjb2xvciBuYW1lcyB0byB0aGVpciBjb3JyZXNwb25kaW5nIEFOU0kgY29sb3IgY29kZXMgZm9yIHN0YW5kYXJkIGJhY2tncm91bmQgY29sb3JzLlxuICogQGNvbnN0IFN0YW5kYXJkQmFja2dyb3VuZENvbG9yc1xuICogQHByb3BlcnR5IHtudW1iZXJ9IGJnQmxhY2sgLSBBTlNJIGNvZGUgZm9yIGJsYWNrIGJhY2tncm91bmQgKDQwKS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBiZ1JlZCAtIEFOU0kgY29kZSBmb3IgcmVkIGJhY2tncm91bmQgKDQxKS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBiZ0dyZWVuIC0gQU5TSSBjb2RlIGZvciBncmVlbiBiYWNrZ3JvdW5kICg0MikuXG4gKiBAcHJvcGVydHkge251bWJlcn0gYmdZZWxsb3cgLSBBTlNJIGNvZGUgZm9yIHllbGxvdyBiYWNrZ3JvdW5kICg0MykuXG4gKiBAcHJvcGVydHkge251bWJlcn0gYmdCbHVlIC0gQU5TSSBjb2RlIGZvciBibHVlIGJhY2tncm91bmQgKDQ0KS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBiZ01hZ2VudGEgLSBBTlNJIGNvZGUgZm9yIG1hZ2VudGEgYmFja2dyb3VuZCAoNDUpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGJnQ3lhbiAtIEFOU0kgY29kZSBmb3IgY3lhbiBiYWNrZ3JvdW5kICg0NikuXG4gKiBAcHJvcGVydHkge251bWJlcn0gYmdXaGl0ZSAtIEFOU0kgY29kZSBmb3Igd2hpdGUgYmFja2dyb3VuZCAoNDcpLlxuICogQG1lbWJlck9mIG1vZHVsZTpAU3R5bGVkU3RyaW5nXG4gKi9cbmV4cG9ydCBjb25zdCBTdGFuZGFyZEJhY2tncm91bmRDb2xvcnMgPSB7XG4gICAgYmdCbGFjazogNDAsXG4gICAgYmdSZWQ6IDQxLFxuICAgIGJnR3JlZW46IDQyLFxuICAgIGJnWWVsbG93OiA0MyxcbiAgICBiZ0JsdWU6IDQ0LFxuICAgIGJnTWFnZW50YTogNDUsXG4gICAgYmdDeWFuOiA0NixcbiAgICBiZ1doaXRlOiA0Nyxcbn07XG4vKipcbiAqIEBkZXNjcmlwdGlvbiBCcmlnaHQgYmFja2dyb3VuZCBjb2xvciBjb2RlcyBmb3IgQU5TSSB0ZXh0IGZvcm1hdHRpbmcuXG4gKiBAc3VtbWFyeSBUaGlzIG9iamVjdCBtYXBzIGNvbG9yIG5hbWVzIHRvIHRoZWlyIGNvcnJlc3BvbmRpbmcgQU5TSSBjb2xvciBjb2RlcyBmb3IgYnJpZ2h0IGJhY2tncm91bmQgY29sb3JzLlxuICogQGNvbnN0IEJyaWdodEJhY2tncm91bmRDb2xvcnNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBiZ0JyaWdodEJsYWNrIC0gQU5TSSBjb2RlIGZvciBicmlnaHQgYmxhY2sgYmFja2dyb3VuZCAoMTAwKS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBiZ0JyaWdodFJlZCAtIEFOU0kgY29kZSBmb3IgYnJpZ2h0IHJlZCBiYWNrZ3JvdW5kICgxMDEpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGJnQnJpZ2h0R3JlZW4gLSBBTlNJIGNvZGUgZm9yIGJyaWdodCBncmVlbiBiYWNrZ3JvdW5kICgxMDIpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGJnQnJpZ2h0WWVsbG93IC0gQU5TSSBjb2RlIGZvciBicmlnaHQgeWVsbG93IGJhY2tncm91bmQgKDEwMykuXG4gKiBAcHJvcGVydHkge251bWJlcn0gYmdCcmlnaHRCbHVlIC0gQU5TSSBjb2RlIGZvciBicmlnaHQgYmx1ZSBiYWNrZ3JvdW5kICgxMDQpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGJnQnJpZ2h0TWFnZW50YSAtIEFOU0kgY29kZSBmb3IgYnJpZ2h0IG1hZ2VudGEgYmFja2dyb3VuZCAoMTA1KS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBiZ0JyaWdodEN5YW4gLSBBTlNJIGNvZGUgZm9yIGJyaWdodCBjeWFuIGJhY2tncm91bmQgKDEwNikuXG4gKiBAcHJvcGVydHkge251bWJlcn0gYmdCcmlnaHRXaGl0ZSAtIEFOU0kgY29kZSBmb3IgYnJpZ2h0IHdoaXRlIGJhY2tncm91bmQgKDEwNykuXG4gKiBAbWVtYmVyT2YgbW9kdWxlOkBTdHlsZWRTdHJpbmdcbiAqL1xuZXhwb3J0IGNvbnN0IEJyaWdodEJhY2tncm91bmRDb2xvcnMgPSB7XG4gICAgYmdCcmlnaHRCbGFjazogMTAwLFxuICAgIGJnQnJpZ2h0UmVkOiAxMDEsXG4gICAgYmdCcmlnaHRHcmVlbjogMTAyLFxuICAgIGJnQnJpZ2h0WWVsbG93OiAxMDMsXG4gICAgYmdCcmlnaHRCbHVlOiAxMDQsXG4gICAgYmdCcmlnaHRNYWdlbnRhOiAxMDUsXG4gICAgYmdCcmlnaHRDeWFuOiAxMDYsXG4gICAgYmdCcmlnaHRXaGl0ZTogMTA3LFxufTtcbi8qKlxuICogQGRlc2NyaXB0aW9uIFRleHQgc3R5bGUgY29kZXMgZm9yIEFOU0kgdGV4dCBmb3JtYXR0aW5nLlxuICogQHN1bW1hcnkgVGhpcyBvYmplY3QgbWFwcyBzdHlsZSBuYW1lcyB0byB0aGVpciBjb3JyZXNwb25kaW5nIEFOU0kgY29kZXMgZm9yIHZhcmlvdXMgdGV4dCBzdHlsZXMuXG4gKiBAY29uc3Qgc3R5bGVzXG4gKiBAcHJvcGVydHkge251bWJlcn0gcmVzZXQgLSBBTlNJIGNvZGUgdG8gcmVzZXQgYWxsIHN0eWxlcyAoMCkuXG4gKiBAcHJvcGVydHkge251bWJlcn0gYm9sZCAtIEFOU0kgY29kZSBmb3IgYm9sZCB0ZXh0ICgxKS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBkaW0gLSBBTlNJIGNvZGUgZm9yIGRpbSB0ZXh0ICgyKS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBpdGFsaWMgLSBBTlNJIGNvZGUgZm9yIGl0YWxpYyB0ZXh0ICgzKS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB1bmRlcmxpbmUgLSBBTlNJIGNvZGUgZm9yIHVuZGVybGluZWQgdGV4dCAoNCkuXG4gKiBAcHJvcGVydHkge251bWJlcn0gYmxpbmsgLSBBTlNJIGNvZGUgZm9yIGJsaW5raW5nIHRleHQgKDUpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGludmVyc2UgLSBBTlNJIGNvZGUgZm9yIGludmVyc2UgY29sb3JzICg3KS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBoaWRkZW4gLSBBTlNJIGNvZGUgZm9yIGhpZGRlbiB0ZXh0ICg4KS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBzdHJpa2V0aHJvdWdoIC0gQU5TSSBjb2RlIGZvciBzdHJpa2V0aHJvdWdoIHRleHQgKDkpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGRvdWJsZVVuZGVybGluZSAtIEFOU0kgY29kZSBmb3IgZG91YmxlIHVuZGVybGluZWQgdGV4dCAoMjEpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IG5vcm1hbENvbG9yIC0gQU5TSSBjb2RlIHRvIHJlc2V0IGNvbG9yIHRvIG5vcm1hbCAoMjIpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IG5vSXRhbGljT3JGcmFrdHVyIC0gQU5TSSBjb2RlIHRvIHR1cm4gb2ZmIGl0YWxpYyAoMjMpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IG5vVW5kZXJsaW5lIC0gQU5TSSBjb2RlIHRvIHR1cm4gb2ZmIHVuZGVybGluZSAoMjQpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IG5vQmxpbmsgLSBBTlNJIGNvZGUgdG8gdHVybiBvZmYgYmxpbmsgKDI1KS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBub0ludmVyc2UgLSBBTlNJIGNvZGUgdG8gdHVybiBvZmYgaW52ZXJzZSAoMjcpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IG5vSGlkZGVuIC0gQU5TSSBjb2RlIHRvIHR1cm4gb2ZmIGhpZGRlbiAoMjgpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IG5vU3RyaWtldGhyb3VnaCAtIEFOU0kgY29kZSB0byB0dXJuIG9mZiBzdHJpa2V0aHJvdWdoICgyOSkuXG4gKiBAbWVtYmVyT2YgbW9kdWxlOkBTdHlsZWRTdHJpbmdcbiAqL1xuZXhwb3J0IGNvbnN0IHN0eWxlcyA9IHtcbiAgICByZXNldDogMCxcbiAgICBib2xkOiAxLFxuICAgIGRpbTogMixcbiAgICBpdGFsaWM6IDMsXG4gICAgdW5kZXJsaW5lOiA0LFxuICAgIGJsaW5rOiA1LFxuICAgIGludmVyc2U6IDcsXG4gICAgaGlkZGVuOiA4LFxuICAgIHN0cmlrZXRocm91Z2g6IDksXG4gICAgZG91YmxlVW5kZXJsaW5lOiAyMSxcbiAgICBub3JtYWxDb2xvcjogMjIsXG4gICAgbm9JdGFsaWNPckZyYWt0dXI6IDIzLFxuICAgIG5vVW5kZXJsaW5lOiAyNCxcbiAgICBub0JsaW5rOiAyNSxcbiAgICBub0ludmVyc2U6IDI3LFxuICAgIG5vSGlkZGVuOiAyOCxcbiAgICBub1N0cmlrZXRocm91Z2g6IDI5LFxufTtcbiIsImltcG9ydCB7IEFuc2lSZXNldCwgc3R5bGVzIH0gZnJvbSBcIi4vY29uc3RhbnRzLmpzXCI7XG4vKipcbiAqIEBkZXNjcmlwdGlvbiBBcHBsaWVzIGEgYmFzaWMgQU5TSSBjb2xvciBjb2RlIHRvIHRleHQuXG4gKiBAc3VtbWFyeSBUaGlzIGZ1bmN0aW9uIHRha2VzIGEgc3RyaW5nLCBhbiBBTlNJIGNvbG9yIGNvZGUgbnVtYmVyLCBhbmQgYW4gb3B0aW9uYWwgYmFja2dyb3VuZCBmbGFnLlxuICogSXQgcmV0dXJucyB0aGUgdGV4dCB3cmFwcGVkIGluIHRoZSBhcHByb3ByaWF0ZSBBTlNJIGVzY2FwZSBjb2RlcyBmb3IgZWl0aGVyIGZvcmVncm91bmQgb3IgYmFja2dyb3VuZCBjb2xvcmluZy5cbiAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBmb3IgYmFzaWMgMTYtY29sb3IgQU5TSSBmb3JtYXR0aW5nLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gVGhlIHRleHQgdG8gYmUgY29sb3JlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBuIC0gVGhlIEFOU0kgY29sb3IgY29kZSBudW1iZXIuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtiZz1mYWxzZV0gLSBJZiB0cnVlLCBhcHBsaWVzIHRoZSBjb2xvciB0byB0aGUgYmFja2dyb3VuZCBpbnN0ZWFkIG9mIHRoZSBmb3JlZ3JvdW5kLlxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgdGV4dCB3cmFwcGVkIGluIEFOU0kgY29sb3IgY29kZXMuXG4gKlxuICogQGZ1bmN0aW9uIGNvbG9yaXplQU5TSVxuICogQG1lbWJlck9mIG1vZHVsZTpAU3R5bGVkU3RyaW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb2xvcml6ZUFOU0kodGV4dCwgbiwgYmcgPSBmYWxzZSkge1xuICAgIGlmIChpc05hTihuKSkge1xuICAgICAgICBjb25zb2xlLndhcm4oYEludmFsaWQgY29sb3IgbnVtYmVyIG9uIHRoZSBBTlNJIHNjYWxlOiAke259LiBpZ25vcmluZy4uLmApO1xuICAgICAgICByZXR1cm4gdGV4dDtcbiAgICB9XG4gICAgaWYgKGJnICYmICgobiA+IDMwICYmIG4gPD0gNDApXG4gICAgICAgIHx8IChuID4gOTAgJiYgbiA8PSAxMDApKSkge1xuICAgICAgICBuID0gbiArIDEwO1xuICAgIH1cbiAgICByZXR1cm4gYFxceDFiWyR7bn1tJHt0ZXh0fSR7QW5zaVJlc2V0fWA7XG59XG4vKipcbiAqIEBkZXNjcmlwdGlvbiBBcHBsaWVzIGEgMjU2LWNvbG9yIEFOU0kgY29kZSB0byB0ZXh0LlxuICogQHN1bW1hcnkgVGhpcyBmdW5jdGlvbiB0YWtlcyBhIHN0cmluZyBhbmQgYSBjb2xvciBudW1iZXIgKDAtMjU1KSBhbmQgcmV0dXJucyB0aGUgdGV4dFxuICogd3JhcHBlZCBpbiBBTlNJIGVzY2FwZSBjb2RlcyBmb3IgZWl0aGVyIGZvcmVncm91bmQgb3IgYmFja2dyb3VuZCBjb2xvcmluZy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIFRoZSB0ZXh0IHRvIGJlIGNvbG9yZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gbiAtIFRoZSBjb2xvciBudW1iZXIgKDAtMjU1KS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2JnPWZhbHNlXSAtIElmIHRydWUsIGFwcGxpZXMgdGhlIGNvbG9yIHRvIHRoZSBiYWNrZ3JvdW5kIGluc3RlYWQgb2YgdGhlIGZvcmVncm91bmQuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSB0ZXh0IHdyYXBwZWQgaW4gQU5TSSBjb2xvciBjb2Rlcy5cbiAqXG4gKiBAZnVuY3Rpb24gY29sb3JpemUyNTZcbiAqIEBtZW1iZXJPZiBtb2R1bGU6QFN0eWxlZFN0cmluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gY29sb3JpemUyNTYodGV4dCwgbiwgYmcgPSBmYWxzZSkge1xuICAgIGlmIChpc05hTihuKSkge1xuICAgICAgICBjb25zb2xlLndhcm4oYEludmFsaWQgY29sb3IgbnVtYmVyIG9uIHRoZSAyNTYgc2NhbGU6ICR7bn0uIGlnbm9yaW5nLi4uYCk7XG4gICAgICAgIHJldHVybiB0ZXh0O1xuICAgIH1cbiAgICBpZiAobiA8IDAgfHwgbiA+IDI1NSkge1xuICAgICAgICBjb25zb2xlLndhcm4oYEludmFsaWQgY29sb3IgbnVtYmVyIG9uIHRoZSAyNTYgc2NhbGU6ICR7bn0uIGlnbm9yaW5nLi4uYCk7XG4gICAgICAgIHJldHVybiB0ZXh0O1xuICAgIH1cbiAgICByZXR1cm4gYFxceDFiWyR7YmcgPyA0OCA6IDM4fTs1OyR7bn1tJHt0ZXh0fSR7QW5zaVJlc2V0fWA7XG59XG4vKipcbiAqIEBkZXNjcmlwdGlvbiBBcHBsaWVzIGFuIFJHQiBjb2xvciBBTlNJIGNvZGUgdG8gdGV4dC5cbiAqIEBzdW1tYXJ5IFRoaXMgZnVuY3Rpb24gdGFrZXMgYSBzdHJpbmcgYW5kIFJHQiBjb2xvciB2YWx1ZXMgKDAtMjU1IGZvciBlYWNoIGNvbXBvbmVudClcbiAqIGFuZCByZXR1cm5zIHRoZSB0ZXh0IHdyYXBwZWQgaW4gQU5TSSBlc2NhcGUgY29kZXMgZm9yIGVpdGhlciBmb3JlZ3JvdW5kIG9yIGJhY2tncm91bmQgY29sb3JpbmcuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBUaGUgdGV4dCB0byBiZSBjb2xvcmVkLlxuICogQHBhcmFtIHtudW1iZXJ9IHIgLSBUaGUgcmVkIGNvbXBvbmVudCBvZiB0aGUgY29sb3IgKDAtMjU1KS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBnIC0gVGhlIGdyZWVuIGNvbXBvbmVudCBvZiB0aGUgY29sb3IgKDAtMjU1KS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiIC0gVGhlIGJsdWUgY29tcG9uZW50IG9mIHRoZSBjb2xvciAoMC0yNTUpLlxuICogQHBhcmFtIHtib29sZWFufSBbYmc9ZmFsc2VdIC0gSWYgdHJ1ZSwgYXBwbGllcyB0aGUgY29sb3IgdG8gdGhlIGJhY2tncm91bmQgaW5zdGVhZCBvZiB0aGUgZm9yZWdyb3VuZC5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIHRleHQgd3JhcHBlZCBpbiBBTlNJIGNvbG9yIGNvZGVzLlxuICpcbiAqIEBmdW5jdGlvbiBjb2xvcml6ZVJHQlxuICogQG1lbWJlck9mIG1vZHVsZTpTdHlsZWRTdHJpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbG9yaXplUkdCKHRleHQsIHIsIGcsIGIsIGJnID0gZmFsc2UpIHtcbiAgICBpZiAoaXNOYU4ocikgfHwgaXNOYU4oZykgfHwgaXNOYU4oYikpIHtcbiAgICAgICAgY29uc29sZS53YXJuKGBJbnZhbGlkIFJHQiBjb2xvciB2YWx1ZXM6IHI9JHtyfSwgZz0ke2d9LCBiPSR7Yn0uIElnbm9yaW5nLi4uYCk7XG4gICAgICAgIHJldHVybiB0ZXh0O1xuICAgIH1cbiAgICBpZiAoW3IsIGcsIGJdLnNvbWUodiA9PiB2IDwgMCB8fCB2ID4gMjU1KSkge1xuICAgICAgICBjb25zb2xlLndhcm4oYEludmFsaWQgUkdCIGNvbG9yIHZhbHVlczogcj0ke3J9LCBnPSR7Z30sIGI9JHtifS4gSWdub3JpbmcuLi5gKTtcbiAgICAgICAgcmV0dXJuIHRleHQ7XG4gICAgfVxuICAgIHJldHVybiBgXFx4MWJbJHtiZyA/IDQ4IDogMzh9OzI7JHtyfTske2d9OyR7Yn1tJHt0ZXh0fSR7QW5zaVJlc2V0fWA7XG59XG4vKipcbiAqIEBkZXNjcmlwdGlvbiBBcHBsaWVzIGFuIEFOU0kgc3R5bGUgY29kZSB0byB0ZXh0LlxuICogQHN1bW1hcnkgVGhpcyBmdW5jdGlvbiB0YWtlcyBhIHN0cmluZyBhbmQgYSBzdHlsZSBjb2RlIChlaXRoZXIgYSBudW1iZXIgb3IgYSBrZXkgZnJvbSB0aGUgc3R5bGVzIG9iamVjdClcbiAqIGFuZCByZXR1cm5zIHRoZSB0ZXh0IHdyYXBwZWQgaW4gdGhlIGFwcHJvcHJpYXRlIEFOU0kgZXNjYXBlIGNvZGVzIGZvciB0aGF0IHN0eWxlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gVGhlIHRleHQgdG8gYmUgc3R5bGVkLlxuICogQHBhcmFtIHtudW1iZXIgfCBzdHJpbmd9IG4gLSBUaGUgc3R5bGUgY29kZSBvciBzdHlsZSBuYW1lLlxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgdGV4dCB3cmFwcGVkIGluIEFOU0kgc3R5bGUgY29kZXMuXG4gKlxuICogQGZ1bmN0aW9uIGFwcGx5U3R5bGVcbiAqIEBtZW1iZXJPZiBtb2R1bGU6U3R5bGVkU3RyaW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBseVN0eWxlKHRleHQsIG4pIHtcbiAgICBjb25zdCBzdHlsZUNvZGUgPSB0eXBlb2YgbiA9PT0gXCJudW1iZXJcIiA/IG4gOiBzdHlsZXNbbl07XG4gICAgcmV0dXJuIGBcXHgxYlske3N0eWxlQ29kZX1tJHt0ZXh0fSR7QW5zaVJlc2V0fWA7XG59XG4vKipcbiAqIEBkZXNjcmlwdGlvbiBSZW1vdmVzIGFsbCBBTlNJIGZvcm1hdHRpbmcgY29kZXMgZnJvbSB0ZXh0LlxuICogQHN1bW1hcnkgVGhpcyBmdW5jdGlvbiB0YWtlcyBhIHN0cmluZyB0aGF0IG1heSBjb250YWluIEFOU0kgZXNjYXBlIGNvZGVzIGZvciBmb3JtYXR0aW5nXG4gKiBhbmQgcmV0dXJucyBhIG5ldyBzdHJpbmcgd2l0aCBhbGwgc3VjaCBjb2RlcyByZW1vdmVkLCBsZWF2aW5nIG9ubHkgdGhlIHBsYWluIHRleHQgY29udGVudC5cbiAqIEl0IHVzZXMgYSByZWd1bGFyIGV4cHJlc3Npb24gdG8gbWF0Y2ggYW5kIHJlbW92ZSBBTlNJIGVzY2FwZSBzZXF1ZW5jZXMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBUaGUgdGV4dCBwb3RlbnRpYWxseSBjb250YWluaW5nIEFOU0kgZm9ybWF0dGluZyBjb2Rlcy5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGlucHV0IHRleHQgd2l0aCBhbGwgQU5TSSBmb3JtYXR0aW5nIGNvZGVzIHJlbW92ZWQuXG4gKlxuICogQGZ1bmN0aW9uIGNsZWFyXG4gKiBAbWVtYmVyT2YgbW9kdWxlOlN0eWxlZFN0cmluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gY2xlYXIodGV4dCkge1xuICAgIC8vIFJlZ3VsYXIgZXhwcmVzc2lvbiB0byBtYXRjaCBBTlNJIGVzY2FwZSBjb2Rlc1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb250cm9sLXJlZ2V4XG4gICAgY29uc3QgYW5zaVJlZ2V4ID0gL1xceDFCKD86W0AtWlxcXFwtX118XFxbWzAtP10qWyAtL10qW0Atfl0pL2c7XG4gICAgcmV0dXJuIHRleHQucmVwbGFjZShhbnNpUmVnZXgsICcnKTtcbn1cbi8qKlxuICogQGRlc2NyaXB0aW9uIEFwcGxpZXMgcmF3IEFOU0kgZXNjYXBlIGNvZGVzIHRvIHRleHQuXG4gKiBAc3VtbWFyeSBUaGlzIGZ1bmN0aW9uIHRha2VzIGEgc3RyaW5nIGFuZCBhIHJhdyBBTlNJIGVzY2FwZSBjb2RlLCBhbmQgcmV0dXJucyB0aGUgdGV4dFxuICogd3JhcHBlZCBpbiB0aGUgcHJvdmlkZWQgcmF3IEFOU0kgY29kZSBhbmQgdGhlIHJlc2V0IGNvZGUuIFRoaXMgYWxsb3dzIGZvciBhcHBseWluZyBjdXN0b21cbiAqIG9yIGNvbXBsZXggQU5TSSBmb3JtYXR0aW5nIHRoYXQgbWF5IG5vdCBiZSBjb3ZlcmVkIGJ5IG90aGVyIHV0aWxpdHkgZnVuY3Rpb25zLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gVGhlIHRleHQgdG8gYmUgZm9ybWF0dGVkLlxuICogQHBhcmFtIHtzdHJpbmd9IHJhdyAtIFRoZSByYXcgQU5TSSBlc2NhcGUgY29kZSB0byBiZSBhcHBsaWVkLlxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgdGV4dCB3cmFwcGVkIGluIHRoZSByYXcgQU5TSSBjb2RlIGFuZCB0aGUgcmVzZXQgY29kZS5cbiAqXG4gKiBAZnVuY3Rpb24gcmF3XG4gKiBAbWVtYmVyT2YgbW9kdWxlOlN0eWxlZFN0cmluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmF3KHRleHQsIHJhdykge1xuICAgIHJldHVybiBgJHtyYXd9JHt0ZXh0fSR7QW5zaVJlc2V0fWA7XG59XG4iLCJpbXBvcnQgeyBCcmlnaHRCYWNrZ3JvdW5kQ29sb3JzLCBCcmlnaHRGb3JlZ3JvdW5kQ29sb3JzLCBTdGFuZGFyZEJhY2tncm91bmRDb2xvcnMsIFN0YW5kYXJkRm9yZWdyb3VuZENvbG9ycywgc3R5bGVzLCB9IGZyb20gXCIuL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgY2xlYXIsIGNvbG9yaXplMjU2LCBjb2xvcml6ZUFOU0ksIGNvbG9yaXplUkdCLCByYXcsIGFwcGx5U3R5bGUsIH0gZnJvbSBcIi4vY29sb3JzLmpzXCI7XG4vKipcbiAqIEBjbGFzcyBTdHlsZWRTdHJpbmdcbiAqIEBkZXNjcmlwdGlvbiBBIGNsYXNzIHRoYXQgZXh0ZW5kcyBzdHJpbmcgZnVuY3Rpb25hbGl0eSB3aXRoIEFOU0kgY29sb3IgYW5kIHN0eWxlIG9wdGlvbnMuXG4gKiBAc3VtbWFyeSBTdHlsZWRTdHJpbmcgcHJvdmlkZXMgbWV0aG9kcyB0byBhcHBseSB2YXJpb3VzIEFOU0kgY29sb3IgYW5kIHN0eWxlIG9wdGlvbnMgdG8gdGV4dCBzdHJpbmdzLlxuICogSXQgaW1wbGVtZW50cyB0aGUgQ29sb3JpemVPcHRpb25zIGludGVyZmFjZSBhbmQgcHJveGllcyBuYXRpdmUgc3RyaW5nIG1ldGhvZHMgdG8gdGhlIHVuZGVybHlpbmcgdGV4dC5cbiAqIFRoaXMgY2xhc3MgYWxsb3dzIGZvciBjaGFpbmluZyBvZiBzdHlsaW5nIG1ldGhvZHMgYW5kIGVhc3kgYXBwbGljYXRpb24gb2YgY29sb3JzIGFuZCBzdHlsZXMgdG8gdGV4dC5cbiAqXG4gKiBAaW1wbGVtZW50cyB7Q29sb3JpemVPcHRpb25zfVxuICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBUaGUgaW5pdGlhbCB0ZXh0IHN0cmluZyB0byBiZSBzdHlsZWQuXG4gKi9cbmV4cG9ydCBjbGFzcyBTdHlsZWRTdHJpbmcge1xuICAgIGNvbnN0cnVjdG9yKHRleHQpIHtcbiAgICAgICAgdGhpcy50ZXh0ID0gdGV4dDtcbiAgICAgICAgLy8gQmFzaWMgY29sb3JzXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKFN0YW5kYXJkRm9yZWdyb3VuZENvbG9ycykuZm9yRWFjaCgoW25hbWUsIGNvZGVdKSA9PiB7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgbmFtZSwge1xuICAgICAgICAgICAgICAgIGdldDogKCkgPT4gdGhpcy5mb3JlZ3JvdW5kKGNvZGUpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3QuZW50cmllcyhCcmlnaHRGb3JlZ3JvdW5kQ29sb3JzKS5mb3JFYWNoKChbbmFtZSwgY29kZV0pID0+IHtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBuYW1lLCB7XG4gICAgICAgICAgICAgICAgZ2V0OiAoKSA9PiB0aGlzLmZvcmVncm91bmQoY29kZSksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIEJhY2tncm91bmQgY29sb3JzXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKFN0YW5kYXJkQmFja2dyb3VuZENvbG9ycykuZm9yRWFjaCgoW25hbWUsIGNvZGVdKSA9PiB7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgbmFtZSwge1xuICAgICAgICAgICAgICAgIGdldDogKCkgPT4gdGhpcy5iYWNrZ3JvdW5kKGNvZGUpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3QuZW50cmllcyhCcmlnaHRCYWNrZ3JvdW5kQ29sb3JzKS5mb3JFYWNoKChbbmFtZSwgY29kZV0pID0+IHtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBuYW1lLCB7XG4gICAgICAgICAgICAgICAgZ2V0OiAoKSA9PiB0aGlzLmJhY2tncm91bmQoY29kZSksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIFN0eWxlc1xuICAgICAgICBPYmplY3QuZW50cmllcyhzdHlsZXMpLmZvckVhY2goKFtuYW1lLCBjb2RlXSkgPT4ge1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIG5hbWUsIHtcbiAgICAgICAgICAgICAgICBnZXQ6ICgpID0+IHRoaXMuc3R5bGUoY29kZSksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDbGVhcnMgYWxsIHN0eWxpbmcgZnJvbSB0aGUgdGV4dC5cbiAgICAgKiBAc3VtbWFyeSBSZW1vdmVzIGFsbCBBTlNJIGNvbG9yIGFuZCBzdHlsZSBjb2RlcyBmcm9tIHRoZSB0ZXh0LlxuICAgICAqIEByZXR1cm4ge1N0eWxlZFN0cmluZ30gVGhlIFN0eWxlZFN0cmluZyBpbnN0YW5jZSB3aXRoIGNsZWFyZWQgc3R5bGluZy5cbiAgICAgKi9cbiAgICBjbGVhcigpIHtcbiAgICAgICAgdGhpcy50ZXh0ID0gY2xlYXIodGhpcy50ZXh0KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBBcHBsaWVzIHJhdyBBTlNJIGNvZGVzIHRvIHRoZSB0ZXh0LlxuICAgICAqIEBzdW1tYXJ5IEFsbG93cyBkaXJlY3QgYXBwbGljYXRpb24gb2YgQU5TSSBlc2NhcGUgc2VxdWVuY2VzIHRvIHRoZSB0ZXh0LlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSByYXdBbnNpIC0gVGhlIHJhdyBBTlNJIGVzY2FwZSBzZXF1ZW5jZSB0byBhcHBseS5cbiAgICAgKiBAcmV0dXJuIHtTdHlsZWRTdHJpbmd9IFRoZSBTdHlsZWRTdHJpbmcgaW5zdGFuY2Ugd2l0aCB0aGUgcmF3IEFOU0kgY29kZSBhcHBsaWVkLlxuICAgICAqL1xuICAgIHJhdyhyYXdBbnNpKSB7XG4gICAgICAgIHRoaXMudGV4dCA9IHJhdyh0aGlzLnRleHQsIHJhd0Fuc2kpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEFwcGxpZXMgYSBmb3JlZ3JvdW5kIGNvbG9yIHRvIHRoZSB0ZXh0LlxuICAgICAqIEBzdW1tYXJ5IFNldHMgdGhlIHRleHQgY29sb3IgdXNpbmcgQU5TSSBjb2xvciBjb2Rlcy5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbiAtIFRoZSBBTlNJIGNvbG9yIGNvZGUgZm9yIHRoZSBmb3JlZ3JvdW5kIGNvbG9yLlxuICAgICAqIEByZXR1cm4ge1N0eWxlZFN0cmluZ30gVGhlIFN0eWxlZFN0cmluZyBpbnN0YW5jZSB3aXRoIHRoZSBmb3JlZ3JvdW5kIGNvbG9yIGFwcGxpZWQuXG4gICAgICovXG4gICAgZm9yZWdyb3VuZChuKSB7XG4gICAgICAgIHRoaXMudGV4dCA9IGNvbG9yaXplQU5TSSh0aGlzLnRleHQsIG4pO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEFwcGxpZXMgYSBiYWNrZ3JvdW5kIGNvbG9yIHRvIHRoZSB0ZXh0LlxuICAgICAqIEBzdW1tYXJ5IFNldHMgdGhlIGJhY2tncm91bmQgY29sb3Igb2YgdGhlIHRleHQgdXNpbmcgQU5TSSBjb2xvciBjb2Rlcy5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbiAtIFRoZSBBTlNJIGNvbG9yIGNvZGUgZm9yIHRoZSBiYWNrZ3JvdW5kIGNvbG9yLlxuICAgICAqIEByZXR1cm4ge1N0eWxlZFN0cmluZ30gVGhlIFN0eWxlZFN0cmluZyBpbnN0YW5jZSB3aXRoIHRoZSBiYWNrZ3JvdW5kIGNvbG9yIGFwcGxpZWQuXG4gICAgICovXG4gICAgYmFja2dyb3VuZChuKSB7XG4gICAgICAgIHRoaXMudGV4dCA9IGNvbG9yaXplQU5TSSh0aGlzLnRleHQsIG4sIHRydWUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEFwcGxpZXMgYSB0ZXh0IHN0eWxlIHRvIHRoZSBzdHJpbmcuXG4gICAgICogQHN1bW1hcnkgU2V0cyB0ZXh0IHN0eWxlcyBzdWNoIGFzIGJvbGQsIGl0YWxpYywgb3IgdW5kZXJsaW5lIHVzaW5nIEFOU0kgc3R5bGUgY29kZXMuXG4gICAgICogQHBhcmFtIHtudW1iZXIgfCBzdHJpbmd9IG4gLSBUaGUgc3R5bGUgY29kZSBvciBrZXkgZnJvbSB0aGUgc3R5bGVzIG9iamVjdC5cbiAgICAgKiBAcmV0dXJuIHtTdHlsZWRTdHJpbmd9IFRoZSBTdHlsZWRTdHJpbmcgaW5zdGFuY2Ugd2l0aCB0aGUgc3R5bGUgYXBwbGllZC5cbiAgICAgKi9cbiAgICBzdHlsZShuKSB7XG4gICAgICAgIGlmICh0eXBlb2YgbiA9PT0gXCJzdHJpbmdcIiAmJiAhKG4gaW4gc3R5bGVzKSkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKGBJbnZhbGlkIHN0eWxlOiAke259YCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRleHQgPSBhcHBseVN0eWxlKHRoaXMudGV4dCwgbik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQXBwbGllcyBhIDI1Ni1jb2xvciBmb3JlZ3JvdW5kIGNvbG9yIHRvIHRoZSB0ZXh0LlxuICAgICAqIEBzdW1tYXJ5IFNldHMgdGhlIHRleHQgY29sb3IgdXNpbmcgdGhlIGV4dGVuZGVkIDI1Ni1jb2xvciBwYWxldHRlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBuIC0gVGhlIGNvbG9yIG51bWJlciBmcm9tIHRoZSAyNTYtY29sb3IgcGFsZXR0ZS5cbiAgICAgKiBAcmV0dXJuIHtTdHlsZWRTdHJpbmd9IFRoZSBTdHlsZWRTdHJpbmcgaW5zdGFuY2Ugd2l0aCB0aGUgMjU2LWNvbG9yIGZvcmVncm91bmQgYXBwbGllZC5cbiAgICAgKi9cbiAgICBjb2xvcjI1NihuKSB7XG4gICAgICAgIHRoaXMudGV4dCA9IGNvbG9yaXplMjU2KHRoaXMudGV4dCwgbik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQXBwbGllcyBhIDI1Ni1jb2xvciBiYWNrZ3JvdW5kIGNvbG9yIHRvIHRoZSB0ZXh0LlxuICAgICAqIEBzdW1tYXJ5IFNldHMgdGhlIGJhY2tncm91bmQgY29sb3IgdXNpbmcgdGhlIGV4dGVuZGVkIDI1Ni1jb2xvciBwYWxldHRlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBuIC0gVGhlIGNvbG9yIG51bWJlciBmcm9tIHRoZSAyNTYtY29sb3IgcGFsZXR0ZS5cbiAgICAgKiBAcmV0dXJuIHtTdHlsZWRTdHJpbmd9IFRoZSBTdHlsZWRTdHJpbmcgaW5zdGFuY2Ugd2l0aCB0aGUgMjU2LWNvbG9yIGJhY2tncm91bmQgYXBwbGllZC5cbiAgICAgKi9cbiAgICBiZ0NvbG9yMjU2KG4pIHtcbiAgICAgICAgdGhpcy50ZXh0ID0gY29sb3JpemUyNTYodGhpcy50ZXh0LCBuLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBBcHBsaWVzIGFuIFJHQiBmb3JlZ3JvdW5kIGNvbG9yIHRvIHRoZSB0ZXh0LlxuICAgICAqIEBzdW1tYXJ5IFNldHMgdGhlIHRleHQgY29sb3IgdXNpbmcgUkdCIHZhbHVlcy5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gciAtIFRoZSByZWQgY29tcG9uZW50ICgwLTI1NSkuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGcgLSBUaGUgZ3JlZW4gY29tcG9uZW50ICgwLTI1NSkuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGIgLSBUaGUgYmx1ZSBjb21wb25lbnQgKDAtMjU1KS5cbiAgICAgKiBAcmV0dXJuIHtTdHlsZWRTdHJpbmd9IFRoZSBTdHlsZWRTdHJpbmcgaW5zdGFuY2Ugd2l0aCB0aGUgUkdCIGZvcmVncm91bmQgY29sb3IgYXBwbGllZC5cbiAgICAgKi9cbiAgICByZ2IociwgZywgYikge1xuICAgICAgICB0aGlzLnRleHQgPSBjb2xvcml6ZVJHQih0aGlzLnRleHQsIHIsIGcsIGIpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEFwcGxpZXMgYW4gUkdCIGJhY2tncm91bmQgY29sb3IgdG8gdGhlIHRleHQuXG4gICAgICogQHN1bW1hcnkgU2V0cyB0aGUgYmFja2dyb3VuZCBjb2xvciB1c2luZyBSR0IgdmFsdWVzLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSByIC0gVGhlIHJlZCBjb21wb25lbnQgKDAtMjU1KS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZyAtIFRoZSBncmVlbiBjb21wb25lbnQgKDAtMjU1KS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYiAtIFRoZSBibHVlIGNvbXBvbmVudCAoMC0yNTUpLlxuICAgICAqIEByZXR1cm4ge1N0eWxlZFN0cmluZ30gVGhlIFN0eWxlZFN0cmluZyBpbnN0YW5jZSB3aXRoIHRoZSBSR0IgYmFja2dyb3VuZCBjb2xvciBhcHBsaWVkLlxuICAgICAqL1xuICAgIGJnUmdiKHIsIGcsIGIpIHtcbiAgICAgICAgdGhpcy50ZXh0ID0gY29sb3JpemVSR0IodGhpcy50ZXh0LCByLCBnLCBiLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDb252ZXJ0cyB0aGUgU3R5bGVkU3RyaW5nIHRvIGEgcmVndWxhciBzdHJpbmcuXG4gICAgICogQHN1bW1hcnkgUmV0dXJucyB0aGUgdW5kZXJseWluZyB0ZXh0IHdpdGggYWxsIGFwcGxpZWQgc3R5bGluZy5cbiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBzdHlsZWQgdGV4dCBhcyBhIHJlZ3VsYXIgc3RyaW5nLlxuICAgICAqL1xuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXh0O1xuICAgIH1cbn1cbi8qKlxuICogQGRlc2NyaXB0aW9uIEFwcGxpZXMgc3R5bGluZyB0byBhIGdpdmVuIHRleHQgc3RyaW5nLlxuICogQHN1bW1hcnkgVGhpcyBmdW5jdGlvbiB0YWtlcyBhIHN0cmluZyBhbmQgcmV0dXJucyBhIFN0eWxlZFN0cmluZyBvYmplY3QsIHdoaWNoIGlzIGFuIGVuaGFuY2VkXG4gKiB2ZXJzaW9uIG9mIHRoZSBvcmlnaW5hbCBzdHJpbmcgd2l0aCBhZGRpdGlvbmFsIG1ldGhvZHMgZm9yIGFwcGx5aW5nIHZhcmlvdXMgQU5TSSBjb2xvciBhbmQgc3R5bGVcbiAqIG9wdGlvbnMuIEl0IHNldHMgdXAgYSBtYXBwZXIgb2JqZWN0IHdpdGggbWV0aG9kcyBmb3IgZGlmZmVyZW50IHN0eWxpbmcgb3BlcmF0aW9ucyBhbmQgdGhlblxuICogZGVmaW5lcyBwcm9wZXJ0aWVzIG9uIHRoZSB0ZXh0IHN0cmluZyB0byBtYWtlIHRoZXNlIG1ldGhvZHMgYWNjZXNzaWJsZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSB0ICBUaGUgaW5wdXQgdGV4dCB0byBiZSBzdHlsZWQuXG4gKiBAcmV0dXJuIHtTdHlsZWRTdHJpbmd9IEEgU3R5bGVkU3RyaW5nIG9iamVjdCB3aXRoIGFkZGl0aW9uYWwgc3R5bGluZyBtZXRob2RzLlxuICpcbiAqIEBmdW5jdGlvbiBzdHlsZVxuICpcbiAqIEBtZW1iZXJPZiBTdHlsZWRTdHJpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0eWxlKC4uLnQpIHtcbiAgICByZXR1cm4gbmV3IFN0eWxlZFN0cmluZyh0LmpvaW4oXCIgXCIpKTtcbn1cbiIsImltcG9ydCB7IHN0eWxlIH0gZnJvbSBcInN0eWxlZC1zdHJpbmctYnVpbGRlclwiO1xuaW1wb3J0IHsgRGVmYXVsdExvZ2dpbmdDb25maWcsIERlZmF1bHRUaGVtZSwgTG9nTGV2ZWwsIE51bWVyaWNMb2dMZXZlbHMsIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG4vKipcbiAqIEBkZXNjcmlwdGlvbiBBIG1pbmltYWwgbG9nZ2VyIGltcGxlbWVudGF0aW9uLlxuICogQHN1bW1hcnkgTWluaUxvZ2dlciBpcyBhIGxpZ2h0d2VpZ2h0IGxvZ2dpbmcgY2xhc3MgdGhhdCBpbXBsZW1lbnRzIHRoZSBMb2dnZXIgaW50ZXJmYWNlLlxuICogSXQgcHJvdmlkZXMgYmFzaWMgbG9nZ2luZyBmdW5jdGlvbmFsaXR5IHdpdGggc3VwcG9ydCBmb3IgZGlmZmVyZW50IGxvZyBsZXZlbHMsIHZlcmJvc2l0eSxcbiAqIGNvbnRleHQtYXdhcmUgbG9nZ2luZywgYW5kIGN1c3RvbWl6YWJsZSBmb3JtYXR0aW5nLlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbnRleHQgLSBUaGUgY29udGV4dCAodHlwaWNhbGx5IGNsYXNzIG5hbWUpIHRoaXMgbG9nZ2VyIGlzIGFzc29jaWF0ZWQgd2l0aFxuICogQHBhcmFtIHtQYXJ0aWFsPExvZ2dpbmdDb25maWc+fSBjb25mIC0gT3B0aW9uYWwgY29uZmlndXJhdGlvbiB0byBvdmVycmlkZSBnbG9iYWwgc2V0dGluZ3NcbiAqIEBjbGFzcyBNaW5pTG9nZ2VyXG4gKiBAZXhhbXBsZVxuICogLy8gQ3JlYXRlIGEgbmV3IGxvZ2dlciBmb3IgYSBjbGFzc1xuICogY29uc3QgbG9nZ2VyID0gbmV3IE1pbmlMb2dnZXIoJ015Q2xhc3MnKTtcbiAqXG4gKiAvLyBMb2cgbWVzc2FnZXMgYXQgZGlmZmVyZW50IGxldmVsc1xuICogbG9nZ2VyLmluZm8oJ1RoaXMgaXMgYW4gaW5mbyBtZXNzYWdlJyk7XG4gKiBsb2dnZXIuZGVidWcoJ1RoaXMgaXMgYSBkZWJ1ZyBtZXNzYWdlJyk7XG4gKiBsb2dnZXIuZXJyb3IoJ1NvbWV0aGluZyB3ZW50IHdyb25nJyk7XG4gKlxuICogLy8gQ3JlYXRlIGEgY2hpbGQgbG9nZ2VyIGZvciBhIHNwZWNpZmljIG1ldGhvZFxuICogY29uc3QgbWV0aG9kTG9nZ2VyID0gbG9nZ2VyLmZvcignbXlNZXRob2QnKTtcbiAqIG1ldGhvZExvZ2dlci52ZXJib3NlKCdEZXRhaWxlZCBpbmZvcm1hdGlvbicsIDIpO1xuICpcbiAqIC8vIExvZyB3aXRoIGN1c3RvbSBjb25maWd1cmF0aW9uXG4gKiBsb2dnZXIuZm9yKCdzcGVjaWFsTWV0aG9kJywgeyBzdHlsZTogdHJ1ZSB9KS5pbmZvKCdTdHlsZWQgbWVzc2FnZScpO1xuICovXG5leHBvcnQgY2xhc3MgTWluaUxvZ2dlciB7XG4gICAgY29uc3RydWN0b3IoY29udGV4dCwgY29uZikge1xuICAgICAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICAgICAgICB0aGlzLmNvbmYgPSBjb25mO1xuICAgIH1cbiAgICBjb25maWcoa2V5KSB7XG4gICAgICAgIGlmICh0aGlzLmNvbmYgJiYga2V5IGluIHRoaXMuY29uZilcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbmZba2V5XTtcbiAgICAgICAgcmV0dXJuIExvZ2dpbmcuZ2V0Q29uZmlnKClba2V5XTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENyZWF0ZXMgYSBjaGlsZCBsb2dnZXIgZm9yIGEgc3BlY2lmaWMgbWV0aG9kIG9yIGNvbnRleHRcbiAgICAgKiBAc3VtbWFyeSBSZXR1cm5zIGEgbmV3IGxvZ2dlciBpbnN0YW5jZSB3aXRoIHRoZSBjdXJyZW50IGNvbnRleHQgZXh0ZW5kZWQgYnkgdGhlIHNwZWNpZmllZCBtZXRob2QgbmFtZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nIHwgRnVuY3Rpb259IG1ldGhvZCAtIFRoZSBtZXRob2QgbmFtZSBvciBmdW5jdGlvbiB0byBjcmVhdGUgYSBsb2dnZXIgZm9yXG4gICAgICogQHBhcmFtIHtQYXJ0aWFsPExvZ2dpbmdDb25maWc+fSBjb25maWcgLSBPcHRpb25hbCBjb25maWd1cmF0aW9uIHRvIG92ZXJyaWRlIHNldHRpbmdzXG4gICAgICogQHBhcmFtIHsuLi5hbnl9IGFyZ3MgLSBBZGRpdGlvbmFsIGFyZ3VtZW50cyB0byBwYXNzIHRvIHRoZSBsb2dnZXIgZmFjdG9yeVxuICAgICAqIEByZXR1cm4ge0xvZ2dlcn0gQSBuZXcgbG9nZ2VyIGluc3RhbmNlIGZvciB0aGUgc3BlY2lmaWVkIG1ldGhvZFxuICAgICAqL1xuICAgIGZvcihtZXRob2QsIGNvbmZpZykge1xuICAgICAgICBtZXRob2QgPSBtZXRob2RcbiAgICAgICAgICAgID8gdHlwZW9mIG1ldGhvZCA9PT0gXCJzdHJpbmdcIlxuICAgICAgICAgICAgICAgID8gbWV0aG9kXG4gICAgICAgICAgICAgICAgOiBtZXRob2QubmFtZVxuICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiBuZXcgUHJveHkodGhpcywge1xuICAgICAgICAgICAgZ2V0OiAodGFyZ2V0LCBwLCByZWNlaXZlcikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IFJlZmxlY3QuZ2V0KHRhcmdldCwgcCwgcmVjZWl2ZXIpO1xuICAgICAgICAgICAgICAgIGlmIChwID09PSBcImNvbmZpZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJveHkodGhpcy5jb25maWcsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldDogKHRhcmdldCwgcCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25maWcgJiYgcCBpbiBjb25maWcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb25maWdbcF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJlZmxlY3QuZ2V0KHRhcmdldCwgcCwgcmVjZWl2ZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChwID09PSBcImNvbnRleHRcIikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gW3Jlc3VsdCwgbWV0aG9kXS5qb2luKFwiLlwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhIGZvcm1hdHRlZCBsb2cgc3RyaW5nXG4gICAgICogQHN1bW1hcnkgR2VuZXJhdGVzIGEgbG9nIHN0cmluZyB3aXRoIHRpbWVzdGFtcCwgY29sb3JlZCBsb2cgbGV2ZWwsIGNvbnRleHQsIGFuZCBtZXNzYWdlXG4gICAgICogQHBhcmFtIHtMb2dMZXZlbH0gbGV2ZWwgLSBUaGUgbG9nIGxldmVsIGZvciB0aGlzIG1lc3NhZ2VcbiAgICAgKiBAcGFyYW0ge1N0cmluZ0xpa2UgfCBFcnJvcn0gbWVzc2FnZSAtIFRoZSBtZXNzYWdlIHRvIGxvZyBvciBhbiBFcnJvciBvYmplY3RcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0YWNrXSAtIE9wdGlvbmFsIHN0YWNrIHRyYWNlIHRvIGluY2x1ZGUgaW4gdGhlIGxvZ1xuICAgICAqIEByZXR1cm4ge3N0cmluZ30gQSBmb3JtYXR0ZWQgbG9nIHN0cmluZyB3aXRoIGFsbCBjb21wb25lbnRzXG4gICAgICovXG4gICAgY3JlYXRlTG9nKGxldmVsLCBtZXNzYWdlLCBzdGFjaykge1xuICAgICAgICBjb25zdCBsb2cgPSBbXTtcbiAgICAgICAgY29uc3Qgc3R5bGUgPSB0aGlzLmNvbmZpZyhcInN0eWxlXCIpO1xuICAgICAgICBpZiAodGhpcy5jb25maWcoXCJ0aW1lc3RhbXBcIikpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XG4gICAgICAgICAgICBjb25zdCB0aW1lc3RhbXAgPSBzdHlsZSA/IExvZ2dpbmcudGhlbWUoZGF0ZSwgXCJ0aW1lc3RhbXBcIiwgbGV2ZWwpIDogZGF0ZTtcbiAgICAgICAgICAgIGxvZy5wdXNoKHRpbWVzdGFtcCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY29uZmlnKFwibG9nTGV2ZWxcIikpIHtcbiAgICAgICAgICAgIGNvbnN0IGx2bCA9IHN0eWxlXG4gICAgICAgICAgICAgICAgPyBMb2dnaW5nLnRoZW1lKGxldmVsLCBcImxvZ0xldmVsXCIsIGxldmVsKVxuICAgICAgICAgICAgICAgIDogbGV2ZWw7XG4gICAgICAgICAgICBsb2cucHVzaChsdmwpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNvbmZpZyhcImNvbnRleHRcIikpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSBzdHlsZVxuICAgICAgICAgICAgICAgID8gTG9nZ2luZy50aGVtZSh0aGlzLmNvbnRleHQsIFwiY2xhc3NcIiwgbGV2ZWwpXG4gICAgICAgICAgICAgICAgOiB0aGlzLmNvbnRleHQ7XG4gICAgICAgICAgICBsb2cucHVzaChjb250ZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jb25maWcoXCJjb3JyZWxhdGlvbklkXCIpKSB7XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29uc3QgaWQgPSBzdHlsZVxuICAgICAgICAgICAgICAgICAgICA/IExvZ2dpbmcudGhlbWUodGhpcy5jb25maWcoXCJjb3JyZWxhdGlvbklkXCIpLnRvU3RyaW5nKCksIFwiaWRcIiwgbGV2ZWwpXG4gICAgICAgICAgICAgICAgICAgIDogdGhpcy5jb25maWcoXCJjb3JyZWxhdGlvbklkXCIpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgbG9nLnB1c2goaWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1zZyA9IHN0eWxlXG4gICAgICAgICAgICA/IExvZ2dpbmcudGhlbWUodHlwZW9mIG1lc3NhZ2UgPT09IFwic3RyaW5nXCIgPyBtZXNzYWdlIDogbWVzc2FnZS5tZXNzYWdlLCBcIm1lc3NhZ2VcIiwgbGV2ZWwpXG4gICAgICAgICAgICA6IHR5cGVvZiBtZXNzYWdlID09PSBcInN0cmluZ1wiXG4gICAgICAgICAgICAgICAgPyBtZXNzYWdlXG4gICAgICAgICAgICAgICAgOiBtZXNzYWdlLm1lc3NhZ2U7XG4gICAgICAgIGxvZy5wdXNoKG1zZyk7XG4gICAgICAgIGlmIChzdGFjayB8fCBtZXNzYWdlIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgIHN0YWNrID0gc3R5bGVcbiAgICAgICAgICAgICAgICA/IExvZ2dpbmcudGhlbWUoKHN0YWNrIHx8IG1lc3NhZ2Uuc3RhY2spLCBcInN0YWNrXCIsIGxldmVsKVxuICAgICAgICAgICAgICAgIDogc3RhY2s7XG4gICAgICAgICAgICBsb2cucHVzaChgXFxuU3RhY2sgdHJhY2U6XFxuJHtzdGFja31gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbG9nLmpvaW4odGhpcy5jb25maWcoXCJzZXBhcmF0b3JcIikpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gTG9ncyBhIG1lc3NhZ2Ugd2l0aCB0aGUgc3BlY2lmaWVkIGxvZyBsZXZlbFxuICAgICAqIEBzdW1tYXJ5IENoZWNrcyBpZiB0aGUgbWVzc2FnZSBzaG91bGQgYmUgbG9nZ2VkIGJhc2VkIG9uIHRoZSBjdXJyZW50IGxvZyBsZXZlbCxcbiAgICAgKiB0aGVuIHVzZXMgdGhlIGFwcHJvcHJpYXRlIGNvbnNvbGUgbWV0aG9kIHRvIG91dHB1dCB0aGUgZm9ybWF0dGVkIGxvZ1xuICAgICAqIEBwYXJhbSB7TG9nTGV2ZWx9IGxldmVsIC0gVGhlIGxvZyBsZXZlbCBvZiB0aGUgbWVzc2FnZVxuICAgICAqIEBwYXJhbSB7U3RyaW5nTGlrZSB8IEVycm9yfSBtc2cgLSBUaGUgbWVzc2FnZSB0byBiZSBsb2dnZWQgb3IgYW4gRXJyb3Igb2JqZWN0XG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdGFja10gLSBPcHRpb25hbCBzdGFjayB0cmFjZSB0byBpbmNsdWRlIGluIHRoZSBsb2dcbiAgICAgKiBAcmV0dXJuIHt2b2lkfVxuICAgICAqL1xuICAgIGxvZyhsZXZlbCwgbXNnLCBzdGFjaykge1xuICAgICAgICBpZiAoTnVtZXJpY0xvZ0xldmVsc1t0aGlzLmNvbmZpZyhcImxldmVsXCIpXSA8XG4gICAgICAgICAgICBOdW1lcmljTG9nTGV2ZWxzW2xldmVsXSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgbGV0IG1ldGhvZDtcbiAgICAgICAgc3dpdGNoIChsZXZlbCkge1xuICAgICAgICAgICAgY2FzZSBMb2dMZXZlbC5pbmZvOlxuICAgICAgICAgICAgICAgIG1ldGhvZCA9IGNvbnNvbGUubG9nO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBMb2dMZXZlbC52ZXJib3NlOlxuICAgICAgICAgICAgY2FzZSBMb2dMZXZlbC5kZWJ1ZzpcbiAgICAgICAgICAgICAgICBtZXRob2QgPSBjb25zb2xlLmRlYnVnO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBMb2dMZXZlbC5lcnJvcjpcbiAgICAgICAgICAgICAgICBtZXRob2QgPSBjb25zb2xlLmVycm9yO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGxvZyBsZXZlbFwiKTtcbiAgICAgICAgfVxuICAgICAgICBtZXRob2QodGhpcy5jcmVhdGVMb2cobGV2ZWwsIG1zZywgc3RhY2spKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIExvZ3MgYSBtZXNzYWdlIGF0IHRoZSBzaWxseSBsZXZlbFxuICAgICAqIEBzdW1tYXJ5IExvZ3MgYSBtZXNzYWdlIGF0IHRoZSBzaWxseSBsZXZlbCBpZiB0aGUgY3VycmVudCB2ZXJib3NpdHkgc2V0dGluZyBhbGxvd3MgaXRcbiAgICAgKiBAcGFyYW0ge1N0cmluZ0xpa2V9IG1zZyAtIFRoZSBtZXNzYWdlIHRvIGJlIGxvZ2dlZFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbdmVyYm9zaXR5PTBdIC0gVGhlIHZlcmJvc2l0eSBsZXZlbCBvZiB0aGUgbWVzc2FnZVxuICAgICAqIEByZXR1cm4ge3ZvaWR9XG4gICAgICovXG4gICAgc2lsbHkobXNnLCB2ZXJib3NpdHkgPSAwKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbmZpZyhcInZlcmJvc2VcIikgPj0gdmVyYm9zaXR5KVxuICAgICAgICAgICAgdGhpcy5sb2coTG9nTGV2ZWwudmVyYm9zZSwgbXNnKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIExvZ3MgYSBtZXNzYWdlIGF0IHRoZSB2ZXJib3NlIGxldmVsXG4gICAgICogQHN1bW1hcnkgTG9ncyBhIG1lc3NhZ2UgYXQgdGhlIHZlcmJvc2UgbGV2ZWwgaWYgdGhlIGN1cnJlbnQgdmVyYm9zaXR5IHNldHRpbmcgYWxsb3dzIGl0XG4gICAgICogQHBhcmFtIHtTdHJpbmdMaWtlfSBtc2cgLSBUaGUgbWVzc2FnZSB0byBiZSBsb2dnZWRcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3ZlcmJvc2l0eT0wXSAtIFRoZSB2ZXJib3NpdHkgbGV2ZWwgb2YgdGhlIG1lc3NhZ2VcbiAgICAgKiBAcmV0dXJuIHt2b2lkfVxuICAgICAqL1xuICAgIHZlcmJvc2UobXNnLCB2ZXJib3NpdHkgPSAwKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbmZpZyhcInZlcmJvc2VcIikgPj0gdmVyYm9zaXR5KVxuICAgICAgICAgICAgdGhpcy5sb2coTG9nTGV2ZWwudmVyYm9zZSwgbXNnKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIExvZ3MgYSBtZXNzYWdlIGF0IHRoZSBpbmZvIGxldmVsXG4gICAgICogQHN1bW1hcnkgTG9ncyBhIG1lc3NhZ2UgYXQgdGhlIGluZm8gbGV2ZWwgZm9yIGdlbmVyYWwgYXBwbGljYXRpb24gaW5mb3JtYXRpb25cbiAgICAgKiBAcGFyYW0ge1N0cmluZ0xpa2V9IG1zZyAtIFRoZSBtZXNzYWdlIHRvIGJlIGxvZ2dlZFxuICAgICAqIEByZXR1cm4ge3ZvaWR9XG4gICAgICovXG4gICAgaW5mbyhtc2cpIHtcbiAgICAgICAgdGhpcy5sb2coTG9nTGV2ZWwuaW5mbywgbXNnKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIExvZ3MgYSBtZXNzYWdlIGF0IHRoZSBkZWJ1ZyBsZXZlbFxuICAgICAqIEBzdW1tYXJ5IExvZ3MgYSBtZXNzYWdlIGF0IHRoZSBkZWJ1ZyBsZXZlbCBmb3IgZGV0YWlsZWQgdHJvdWJsZXNob290aW5nIGluZm9ybWF0aW9uXG4gICAgICogQHBhcmFtIHtTdHJpbmdMaWtlfSBtc2cgLSBUaGUgbWVzc2FnZSB0byBiZSBsb2dnZWRcbiAgICAgKiBAcmV0dXJuIHt2b2lkfVxuICAgICAqL1xuICAgIGRlYnVnKG1zZykge1xuICAgICAgICB0aGlzLmxvZyhMb2dMZXZlbC5kZWJ1ZywgbXNnKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIExvZ3MgYSBtZXNzYWdlIGF0IHRoZSBlcnJvciBsZXZlbFxuICAgICAqIEBzdW1tYXJ5IExvZ3MgYSBtZXNzYWdlIGF0IHRoZSBlcnJvciBsZXZlbCBmb3IgZXJyb3JzIGFuZCBleGNlcHRpb25zXG4gICAgICogQHBhcmFtIHtTdHJpbmdMaWtlIHwgRXJyb3J9IG1zZyAtIFRoZSBtZXNzYWdlIHRvIGJlIGxvZ2dlZCBvciBhbiBFcnJvciBvYmplY3RcbiAgICAgKiBAcmV0dXJuIHt2b2lkfVxuICAgICAqL1xuICAgIGVycm9yKG1zZykge1xuICAgICAgICB0aGlzLmxvZyhMb2dMZXZlbC5lcnJvciwgbXNnKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFVwZGF0ZXMgdGhlIGxvZ2dlciBjb25maWd1cmF0aW9uXG4gICAgICogQHN1bW1hcnkgTWVyZ2VzIHRoZSBwcm92aWRlZCBjb25maWd1cmF0aW9uIHdpdGggdGhlIGV4aXN0aW5nIGNvbmZpZ3VyYXRpb25cbiAgICAgKiBAcGFyYW0ge1BhcnRpYWw8TG9nZ2luZ0NvbmZpZz59IGNvbmZpZyAtIFRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gYXBwbHlcbiAgICAgKiBAcmV0dXJuIHt2b2lkfVxuICAgICAqL1xuICAgIHNldENvbmZpZyhjb25maWcpIHtcbiAgICAgICAgdGhpcy5jb25mID0geyAuLi4odGhpcy5jb25mIHx8IHt9KSwgLi4uY29uZmlnIH07XG4gICAgfVxufVxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQSBzdGF0aWMgY2xhc3MgZm9yIG1hbmFnaW5nIGxvZ2dpbmcgb3BlcmF0aW9uc1xuICogQHN1bW1hcnkgVGhlIExvZ2dpbmcgY2xhc3MgcHJvdmlkZXMgYSBjZW50cmFsaXplZCBsb2dnaW5nIG1lY2hhbmlzbSB3aXRoIHN1cHBvcnQgZm9yXG4gKiBkaWZmZXJlbnQgbG9nIGxldmVscywgdmVyYm9zaXR5LCBhbmQgc3R5bGluZy4gSXQgdXNlcyBhIHNpbmdsZXRvbiBwYXR0ZXJuIHRvIG1haW50YWluIGEgZ2xvYmFsXG4gKiBsb2dnZXIgaW5zdGFuY2UgYW5kIGFsbG93cyBjcmVhdGluZyBzcGVjaWZpYyBsb2dnZXJzIGZvciBkaWZmZXJlbnQgY2xhc3NlcyBhbmQgbWV0aG9kcy5cbiAqIEBjbGFzcyBMb2dnaW5nXG4gKiBAZXhhbXBsZVxuICogLy8gU2V0IGdsb2JhbCBjb25maWd1cmF0aW9uXG4gKiBMb2dnaW5nLnNldENvbmZpZyh7IGxldmVsOiBMb2dMZXZlbC5kZWJ1Zywgc3R5bGU6IHRydWUgfSk7XG4gKlxuICogLy8gR2V0IGEgbG9nZ2VyIGZvciBhIHNwZWNpZmljIGNsYXNzXG4gKiBjb25zdCBsb2dnZXIgPSBMb2dnaW5nLmZvcignTXlDbGFzcycpO1xuICpcbiAqIC8vIExvZyBtZXNzYWdlcyBhdCBkaWZmZXJlbnQgbGV2ZWxzXG4gKiBsb2dnZXIuaW5mbygnQXBwbGljYXRpb24gc3RhcnRlZCcpO1xuICogbG9nZ2VyLmRlYnVnKCdQcm9jZXNzaW5nIGRhdGEuLi4nKTtcbiAqXG4gKiAvLyBMb2cgd2l0aCBjb250ZXh0XG4gKiBjb25zdCBtZXRob2RMb2dnZXIgPSBMb2dnaW5nLmZvcignTXlDbGFzcy5teU1ldGhvZCcpO1xuICogbWV0aG9kTG9nZ2VyLnZlcmJvc2UoJ0RldGFpbGVkIG9wZXJhdGlvbiBpbmZvcm1hdGlvbicsIDEpO1xuICpcbiAqIC8vIExvZyBlcnJvcnNcbiAqIHRyeSB7XG4gKiAgIC8vIHNvbWUgb3BlcmF0aW9uXG4gKiB9IGNhdGNoIChlcnJvcikge1xuICogICBsb2dnZXIuZXJyb3IoZXJyb3IpO1xuICogfVxuICogQG1lcm1haWRcbiAqIGNsYXNzRGlhZ3JhbVxuICogICBjbGFzcyBMb2dnZXIge1xuICogICAgIDw8aW50ZXJmYWNlPj5cbiAqICAgICArZm9yKG1ldGhvZCwgY29uZmlnLCAuLi5hcmdzKVxuICogICAgICtzaWxseShtc2csIHZlcmJvc2l0eSlcbiAqICAgICArdmVyYm9zZShtc2csIHZlcmJvc2l0eSlcbiAqICAgICAraW5mbyhtc2cpXG4gKiAgICAgK2RlYnVnKG1zZylcbiAqICAgICArZXJyb3IobXNnKVxuICogICAgICtzZXRDb25maWcoY29uZmlnKVxuICogICB9XG4gKlxuICogICBjbGFzcyBMb2dnaW5nIHtcbiAqICAgICAtZ2xvYmFsOiBMb2dnZXJcbiAqICAgICAtX2ZhY3Rvcnk6IExvZ2dlckZhY3RvcnlcbiAqICAgICAtX2NvbmZpZzogTG9nZ2luZ0NvbmZpZ1xuICogICAgICtzZXRGYWN0b3J5KGZhY3RvcnkpXG4gKiAgICAgK3NldENvbmZpZyhjb25maWcpXG4gKiAgICAgK2dldENvbmZpZygpXG4gKiAgICAgK2dldCgpXG4gKiAgICAgK3ZlcmJvc2UobXNnLCB2ZXJib3NpdHkpXG4gKiAgICAgK2luZm8obXNnKVxuICogICAgICtkZWJ1Zyhtc2cpXG4gKiAgICAgK3NpbGx5KG1zZylcbiAqICAgICArZXJyb3IobXNnKVxuICogICAgICtmb3Iob2JqZWN0LCBjb25maWcsIC4uLmFyZ3MpXG4gKiAgICAgK2JlY2F1c2UocmVhc29uLCBpZClcbiAqICAgICArdGhlbWUodGV4dCwgdHlwZSwgbG9nZ2VyTGV2ZWwsIHRlbXBsYXRlKVxuICogICB9XG4gKlxuICogICBjbGFzcyBNaW5pTG9nZ2VyIHtcbiAqICAgICArY29uc3RydWN0b3IoY29udGV4dCwgY29uZj8pXG4gKiAgIH1cbiAqXG4gKiAgIExvZ2dpbmcgLi4+IExvZ2dlciA6IGNyZWF0ZXNcbiAqICAgTG9nZ2luZyAuLj4gTWluaUxvZ2dlciA6IGNyZWF0ZXMgYnkgZGVmYXVsdFxuICovXG5leHBvcnQgY2xhc3MgTG9nZ2luZyB7XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEZhY3RvcnkgZnVuY3Rpb24gZm9yIGNyZWF0aW5nIGxvZ2dlciBpbnN0YW5jZXNcbiAgICAgKiBAc3VtbWFyeSBBIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBuZXcgTG9nZ2VyIGluc3RhbmNlcy4gQnkgZGVmYXVsdCwgaXQgY3JlYXRlcyBhIE1pbmlMb2dnZXIuXG4gICAgICovXG4gICAgc3RhdGljIHsgdGhpcy5fZmFjdG9yeSA9IChvYmplY3QsIGNvbmZpZykgPT4ge1xuICAgICAgICByZXR1cm4gbmV3IE1pbmlMb2dnZXIob2JqZWN0LCBjb25maWcpO1xuICAgIH07IH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29uZmlndXJhdGlvbiBmb3IgdGhlIGxvZ2dpbmcgc3lzdGVtXG4gICAgICogQHN1bW1hcnkgU3RvcmVzIHRoZSBnbG9iYWwgbG9nZ2luZyBjb25maWd1cmF0aW9uIGluY2x1ZGluZyB2ZXJib3NpdHksIGxvZyBsZXZlbCwgc3R5bGluZywgYW5kIGZvcm1hdHRpbmcgc2V0dGluZ3NcbiAgICAgKi9cbiAgICBzdGF0aWMgeyB0aGlzLl9jb25maWcgPSBEZWZhdWx0TG9nZ2luZ0NvbmZpZzsgfVxuICAgIGNvbnN0cnVjdG9yKCkgeyB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFNldHMgdGhlIGZhY3RvcnkgZnVuY3Rpb24gZm9yIGNyZWF0aW5nIGxvZ2dlciBpbnN0YW5jZXNcbiAgICAgKiBAc3VtbWFyeSBBbGxvd3MgY3VzdG9taXppbmcgaG93IGxvZ2dlciBpbnN0YW5jZXMgYXJlIGNyZWF0ZWRcbiAgICAgKiBAcGFyYW0ge0xvZ2dlckZhY3Rvcnl9IGZhY3RvcnkgLSBUaGUgZmFjdG9yeSBmdW5jdGlvbiB0byB1c2UgZm9yIGNyZWF0aW5nIGxvZ2dlcnNcbiAgICAgKiBAcmV0dXJuIHt2b2lkfVxuICAgICAqL1xuICAgIHN0YXRpYyBzZXRGYWN0b3J5KGZhY3RvcnkpIHtcbiAgICAgICAgTG9nZ2luZy5fZmFjdG9yeSA9IGZhY3Rvcnk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBVcGRhdGVzIHRoZSBnbG9iYWwgbG9nZ2luZyBjb25maWd1cmF0aW9uXG4gICAgICogQHN1bW1hcnkgQWxsb3dzIHVwZGF0aW5nIHRoZSBnbG9iYWwgbG9nZ2luZyBjb25maWd1cmF0aW9uIHdpdGggbmV3IHNldHRpbmdzXG4gICAgICogQHBhcmFtIHtQYXJ0aWFsPExvZ2dpbmdDb25maWc+fSBjb25maWcgLSBUaGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIGFwcGx5XG4gICAgICogQHJldHVybiB7dm9pZH1cbiAgICAgKi9cbiAgICBzdGF0aWMgc2V0Q29uZmlnKGNvbmZpZykge1xuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMuX2NvbmZpZywgY29uZmlnKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEdldHMgYSBjb3B5IG9mIHRoZSBjdXJyZW50IGdsb2JhbCBsb2dnaW5nIGNvbmZpZ3VyYXRpb25cbiAgICAgKiBAc3VtbWFyeSBSZXR1cm5zIGEgY29weSBvZiB0aGUgY3VycmVudCBnbG9iYWwgbG9nZ2luZyBjb25maWd1cmF0aW9uXG4gICAgICogQHJldHVybiB7TG9nZ2luZ0NvbmZpZ30gQSBjb3B5IG9mIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb25cbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0Q29uZmlnKCkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5fY29uZmlnKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHJpZXZlcyBvciBjcmVhdGVzIHRoZSBnbG9iYWwgbG9nZ2VyIGluc3RhbmNlLlxuICAgICAqIEBzdW1tYXJ5IFJldHVybnMgdGhlIGV4aXN0aW5nIGdsb2JhbCBsb2dnZXIgb3IgY3JlYXRlcyBhIG5ldyBvbmUgaWYgaXQgZG9lc24ndCBleGlzdC5cbiAgICAgKlxuICAgICAqIEByZXR1cm4gVGhlIGdsb2JhbCBWZXJib3NpdHlMb2dnZXIgaW5zdGFuY2UuXG4gICAgICovXG4gICAgc3RhdGljIGdldCgpIHtcbiAgICAgICAgdGhpcy5nbG9iYWwgPSB0aGlzLmdsb2JhbCA/IHRoaXMuZ2xvYmFsIDogdGhpcy5fZmFjdG9yeShcIkxvZ2dpbmdcIik7XG4gICAgICAgIHJldHVybiB0aGlzLmdsb2JhbDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIExvZ3MgYSB2ZXJib3NlIG1lc3NhZ2UuXG4gICAgICogQHN1bW1hcnkgRGVsZWdhdGVzIHRoZSB2ZXJib3NlIGxvZ2dpbmcgdG8gdGhlIGdsb2JhbCBsb2dnZXIgaW5zdGFuY2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbXNnIC0gVGhlIG1lc3NhZ2UgdG8gYmUgbG9nZ2VkLlxuICAgICAqIEBwYXJhbSB2ZXJib3NpdHkgLSBUaGUgdmVyYm9zaXR5IGxldmVsIG9mIHRoZSBtZXNzYWdlIChkZWZhdWx0OiAwKS5cbiAgICAgKi9cbiAgICBzdGF0aWMgdmVyYm9zZShtc2csIHZlcmJvc2l0eSA9IDApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KCkudmVyYm9zZShtc2csIHZlcmJvc2l0eSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBMb2dzIGFuIGluZm8gbWVzc2FnZS5cbiAgICAgKiBAc3VtbWFyeSBEZWxlZ2F0ZXMgdGhlIGluZm8gbG9nZ2luZyB0byB0aGUgZ2xvYmFsIGxvZ2dlciBpbnN0YW5jZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBtc2cgLSBUaGUgbWVzc2FnZSB0byBiZSBsb2dnZWQuXG4gICAgICovXG4gICAgc3RhdGljIGluZm8obXNnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldCgpLmluZm8obXNnKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIExvZ3MgYSBkZWJ1ZyBtZXNzYWdlLlxuICAgICAqIEBzdW1tYXJ5IERlbGVnYXRlcyB0aGUgZGVidWcgbG9nZ2luZyB0byB0aGUgZ2xvYmFsIGxvZ2dlciBpbnN0YW5jZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBtc2cgLSBUaGUgbWVzc2FnZSB0byBiZSBsb2dnZWQuXG4gICAgICovXG4gICAgc3RhdGljIGRlYnVnKG1zZykge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXQoKS5kZWJ1Zyhtc2cpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gTG9ncyBhIHNpbGx5IG1lc3NhZ2UuXG4gICAgICogQHN1bW1hcnkgRGVsZWdhdGVzIHRoZSBkZWJ1ZyBsb2dnaW5nIHRvIHRoZSBnbG9iYWwgbG9nZ2VyIGluc3RhbmNlLlxuICAgICAqXG4gICAgICogQHBhcmFtIG1zZyAtIFRoZSBtZXNzYWdlIHRvIGJlIGxvZ2dlZC5cbiAgICAgKi9cbiAgICBzdGF0aWMgc2lsbHkobXNnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldCgpLnNpbGx5KG1zZyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBMb2dzIGFuIGVycm9yIG1lc3NhZ2UuXG4gICAgICogQHN1bW1hcnkgRGVsZWdhdGVzIHRoZSBlcnJvciBsb2dnaW5nIHRvIHRoZSBnbG9iYWwgbG9nZ2VyIGluc3RhbmNlLlxuICAgICAqXG4gICAgICogQHBhcmFtIG1zZyAtIFRoZSBtZXNzYWdlIHRvIGJlIGxvZ2dlZC5cbiAgICAgKi9cbiAgICBzdGF0aWMgZXJyb3IobXNnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldCgpLmVycm9yKG1zZyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDcmVhdGVzIGEgbG9nZ2VyIGZvciBhIHNwZWNpZmljIG9iamVjdCBvciBjb250ZXh0XG4gICAgICogQHN1bW1hcnkgQ3JlYXRlcyBhIG5ldyBsb2dnZXIgaW5zdGFuY2UgZm9yIHRoZSBnaXZlbiBvYmplY3Qgb3IgY29udGV4dCB1c2luZyB0aGUgZmFjdG9yeSBmdW5jdGlvblxuICAgICAqIEBwYXJhbSB7TG9nZ2luZ0NvbnRleHR9IG9iamVjdCAtIFRoZSBvYmplY3QsIGNsYXNzLCBvciBjb250ZXh0IHRvIGNyZWF0ZSBhIGxvZ2dlciBmb3JcbiAgICAgKiBAcGFyYW0ge1BhcnRpYWw8TG9nZ2luZ0NvbmZpZz59IFtjb25maWddIC0gT3B0aW9uYWwgY29uZmlndXJhdGlvbiB0byBvdmVycmlkZSBnbG9iYWwgc2V0dGluZ3NcbiAgICAgKiBAcGFyYW0gey4uLmFueX0gYXJncyAtIEFkZGl0aW9uYWwgYXJndW1lbnRzIHRvIHBhc3MgdG8gdGhlIGxvZ2dlciBmYWN0b3J5XG4gICAgICogQHJldHVybiB7TG9nZ2VyfSBBIG5ldyBsb2dnZXIgaW5zdGFuY2UgZm9yIHRoZSBzcGVjaWZpZWQgb2JqZWN0IG9yIGNvbnRleHRcbiAgICAgKi9cbiAgICBzdGF0aWMgZm9yKG9iamVjdCwgY29uZmlnLCAuLi5hcmdzKSB7XG4gICAgICAgIG9iamVjdCA9XG4gICAgICAgICAgICB0eXBlb2Ygb2JqZWN0ID09PSBcInN0cmluZ1wiXG4gICAgICAgICAgICAgICAgPyBvYmplY3RcbiAgICAgICAgICAgICAgICA6IG9iamVjdC5jb25zdHJ1Y3RvclxuICAgICAgICAgICAgICAgICAgICA/IG9iamVjdC5jb25zdHJ1Y3Rvci5uYW1lXG4gICAgICAgICAgICAgICAgICAgIDogb2JqZWN0Lm5hbWU7XG4gICAgICAgIHJldHVybiB0aGlzLl9mYWN0b3J5KG9iamVjdCwgY29uZmlnLCAuLi5hcmdzKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENyZWF0ZXMgYSBsb2dnZXIgZm9yIGEgc3BlY2lmaWMgcmVhc29uIG9yIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAc3VtbWFyeSBUaGlzIHN0YXRpYyBtZXRob2QgY3JlYXRlcyBhIG5ldyBsb2dnZXIgaW5zdGFuY2UgdXNpbmcgdGhlIGZhY3RvcnkgZnVuY3Rpb24sXG4gICAgICogYmFzZWQgb24gYSBnaXZlbiByZWFzb24gb3IgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSByZWFzb24gLSBBIHN0cmluZyBkZXNjcmliaW5nIHRoZSByZWFzb24gb3IgY29udGV4dCBmb3IgY3JlYXRpbmcgdGhpcyBsb2dnZXIuXG4gICAgICogQHBhcmFtIGlkXG4gICAgICogQHJldHVybnMgQSBuZXcgVmVyYm9zaXR5TG9nZ2VyIG9yIENsYXNzTG9nZ2VyIGluc3RhbmNlLlxuICAgICAqL1xuICAgIHN0YXRpYyBiZWNhdXNlKHJlYXNvbiwgaWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZhY3RvcnkocmVhc29uLCB0aGlzLl9jb25maWcsIGlkKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEFwcGxpZXMgdGhlbWUgc3R5bGluZyB0byB0ZXh0XG4gICAgICogQHN1bW1hcnkgQXBwbGllcyBzdHlsaW5nIChjb2xvcnMsIGZvcm1hdHRpbmcpIHRvIHRleHQgYmFzZWQgb24gdGhlIHRoZW1lIGNvbmZpZ3VyYXRpb25cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIFRoZSB0ZXh0IHRvIHN0eWxlXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgLSBUaGUgdHlwZSBvZiBlbGVtZW50IHRvIHN0eWxlIChlLmcuLCBcImNsYXNzXCIsIFwibWVzc2FnZVwiLCBcImxvZ0xldmVsXCIpXG4gICAgICogQHBhcmFtIHtMb2dMZXZlbH0gbG9nZ2VyTGV2ZWwgLSBUaGUgbG9nIGxldmVsIHRvIHVzZSBmb3Igc3R5bGluZ1xuICAgICAqIEBwYXJhbSB7VGhlbWV9IFt0ZW1wbGF0ZT1EZWZhdWx0VGhlbWVdIC0gVGhlIHRoZW1lIHRvIHVzZSBmb3Igc3R5bGluZ1xuICAgICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIHN0eWxlZCB0ZXh0XG4gICAgICogQG1lcm1haWRcbiAgICAgKiBzZXF1ZW5jZURpYWdyYW1cbiAgICAgKiAgIHBhcnRpY2lwYW50IENhbGxlclxuICAgICAqICAgcGFydGljaXBhbnQgVGhlbWUgYXMgTG9nZ2luZy50aGVtZVxuICAgICAqICAgcGFydGljaXBhbnQgQXBwbHkgYXMgYXBwbHkgZnVuY3Rpb25cbiAgICAgKiAgIHBhcnRpY2lwYW50IFN0eWxlIGFzIHN0eWxlZC1zdHJpbmctYnVpbGRlclxuICAgICAqXG4gICAgICogICBDYWxsZXItPj5UaGVtZTogdGhlbWUodGV4dCwgdHlwZSwgbG9nZ2VyTGV2ZWwpXG4gICAgICogICBUaGVtZS0+PlRoZW1lOiBDaGVjayBpZiBzdHlsaW5nIGlzIGVuYWJsZWRcbiAgICAgKiAgIGFsdCBzdHlsaW5nIGRpc2FibGVkXG4gICAgICogICAgIFRoZW1lLS0+PkNhbGxlcjogcmV0dXJuIG9yaWdpbmFsIHRleHRcbiAgICAgKiAgIGVsc2Ugc3R5bGluZyBlbmFibGVkXG4gICAgICogICAgIFRoZW1lLT4+VGhlbWU6IEdldCB0aGVtZSBmb3IgdHlwZVxuICAgICAqICAgICBhbHQgdGhlbWUgbm90IGZvdW5kXG4gICAgICogICAgICAgVGhlbWUtLT4+Q2FsbGVyOiByZXR1cm4gb3JpZ2luYWwgdGV4dFxuICAgICAqICAgICBlbHNlIHRoZW1lIGZvdW5kXG4gICAgICogICAgICAgVGhlbWUtPj5UaGVtZTogRGV0ZXJtaW5lIGFjdHVhbCB0aGVtZSBiYXNlZCBvbiBsb2cgbGV2ZWxcbiAgICAgKiAgICAgICBUaGVtZS0+PkFwcGx5OiBBcHBseSBlYWNoIHN0eWxlIHByb3BlcnR5XG4gICAgICogICAgICAgQXBwbHktPj5TdHlsZTogQXBwbHkgY29sb3JzIGFuZCBmb3JtYXR0aW5nXG4gICAgICogICAgICAgU3R5bGUtLT4+QXBwbHk6IFJldHVybiBzdHlsZWQgdGV4dFxuICAgICAqICAgICAgIEFwcGx5LS0+PlRoZW1lOiBSZXR1cm4gc3R5bGVkIHRleHRcbiAgICAgKiAgICAgICBUaGVtZS0tPj5DYWxsZXI6IFJldHVybiBmaW5hbCBzdHlsZWQgdGV4dFxuICAgICAqICAgICBlbmRcbiAgICAgKiAgIGVuZFxuICAgICAqL1xuICAgIHN0YXRpYyB0aGVtZSh0ZXh0LCB0eXBlLCBsb2dnZXJMZXZlbCwgdGVtcGxhdGUgPSBEZWZhdWx0VGhlbWUpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9jb25maWcuc3R5bGUpXG4gICAgICAgICAgICByZXR1cm4gdGV4dDtcbiAgICAgICAgY29uc3QgbG9nZ2VyID0gTG9nZ2luZy5nZXQoKS5mb3IodGhpcy50aGVtZSk7XG4gICAgICAgIGZ1bmN0aW9uIGFwcGx5KHR4dCwgb3B0aW9uLCB2YWx1ZSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCB0ID0gdHh0O1xuICAgICAgICAgICAgICAgIGxldCBjID0gc3R5bGUodCk7XG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gYXBwbHlDb2xvcih2YWwsIGlzQmcgPSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZiA9IGlzQmcgPyBjLmJhY2tncm91bmQgOiBjLmZvcmVncm91bmQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZi5jYWxsKGMsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHZhbC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmID0gaXNCZyA/IGMuYmdDb2xvcjI1NiA6IGMuY29sb3IyNTY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGYodmFsWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmID0gaXNCZyA/IGMuYmdSZ2IgOiBjLnJnYjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYy5yZ2IodmFsWzBdLCB2YWxbMV0sIHZhbFsyXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihgTm90IGEgdmFsaWQgY29sb3Igb3B0aW9uOiAke29wdGlvbn1gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3R5bGUodCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gYXBwbHlTdHlsZSh2KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdiA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgYyA9IGMuc3R5bGUodik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjID0gY1t2XTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzd2l0Y2ggKG9wdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiYmdcIjpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcImZnXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXBwbHlDb2xvcih2YWx1ZSkudGV4dDtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcInN0eWxlXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS5mb3JFYWNoKGFwcGx5U3R5bGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwbHlTdHlsZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYy50ZXh0O1xuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKGBOb3QgYSB2YWxpZCB0aGVtZSBvcHRpb246ICR7b3B0aW9ufWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKGBFcnJvciBhcHBseWluZyBzdHlsZTogJHtvcHRpb259IHdpdGggdmFsdWUgJHt2YWx1ZX1gKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHh0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGluZGl2aWR1YWxUaGVtZSA9IHRlbXBsYXRlW3R5cGVdO1xuICAgICAgICBpZiAoIWluZGl2aWR1YWxUaGVtZSB8fCAhT2JqZWN0LmtleXMoaW5kaXZpZHVhbFRoZW1lKS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiB0ZXh0O1xuICAgICAgICB9XG4gICAgICAgIGxldCBhY3R1YWxUaGVtZSA9IGluZGl2aWR1YWxUaGVtZTtcbiAgICAgICAgY29uc3QgbG9nTGV2ZWxzID0gT2JqZWN0LmFzc2lnbih7fSwgTG9nTGV2ZWwpO1xuICAgICAgICBpZiAoT2JqZWN0LmtleXMoaW5kaXZpZHVhbFRoZW1lKVswXSBpbiBsb2dMZXZlbHMpXG4gICAgICAgICAgICBhY3R1YWxUaGVtZSA9XG4gICAgICAgICAgICAgICAgaW5kaXZpZHVhbFRoZW1lW2xvZ2dlckxldmVsXSB8fCB7fTtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKGFjdHVhbFRoZW1lKS5yZWR1Y2UoKGFjYywga2V5KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YWwgPSBhY3R1YWxUaGVtZVtrZXldO1xuICAgICAgICAgICAgaWYgKHZhbClcbiAgICAgICAgICAgICAgICByZXR1cm4gYXBwbHkoYWNjLCBrZXksIHZhbCk7XG4gICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICB9LCB0ZXh0KTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2liRzluWjJsdVp5NXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMM055WXk5c2IyZG5hVzVuTG5SeklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lKQlFWVkJMRTlCUVU4c1JVRkJiVUlzUzBGQlN5eEZRVUZuUWl4TlFVRk5MSFZDUVVGMVFpeERRVUZETzBGQlF6ZEZMRTlCUVU4c1JVRkRUQ3h2UWtGQmIwSXNSVUZEY0VJc1dVRkJXU3hGUVVOYUxGRkJRVkVzUlVGRFVpeG5Ra0ZCWjBJc1IwRkRha0lzVFVGQlRTeGhRVUZoTEVOQlFVTTdRVUZGY2tJN096czdPenM3T3pzN096czdPenM3T3pzN096czdPMGRCZFVKSE8wRkJRMGdzVFVGQlRTeFBRVUZQTEZWQlFWVTdTVUZEY2tJc1dVRkRXU3hQUVVGbExFVkJRMllzU1VGQk5rSTdVVUZFTjBJc1dVRkJUeXhIUVVGUUxFOUJRVThzUTBGQlVUdFJRVU5tTEZOQlFVa3NSMEZCU2l4SlFVRkpMRU5CUVhsQ08wbEJRM1JETEVOQlFVTTdTVUZGVFN4TlFVRk5MRU5CUTJRc1IwRkJkMEk3VVVGRmVFSXNTVUZCU1N4SlFVRkpMRU5CUVVNc1NVRkJTU3hKUVVGSkxFZEJRVWNzU1VGQlNTeEpRVUZKTEVOQlFVTXNTVUZCU1R0WlFVRkZMRTlCUVU4c1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0UlFVTjZSQ3hQUVVGUExFOUJRVThzUTBGQlF5eFRRVUZUTEVWQlFVVXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRKUVVOc1F5eERRVUZETzBsQlJVUTdPenM3T3pzN1QwRlBSenRKUVVOSUxFZEJRVWNzUTBGRFJDeE5RVUV5UXl4RlFVTXpReXhOUVVFclFqdFJRVVV2UWl4TlFVRk5MRWRCUVVjc1RVRkJUVHRaUVVOaUxFTkJRVU1zUTBGQlF5eFBRVUZQTEUxQlFVMHNTMEZCU3l4UlFVRlJPMmRDUVVNeFFpeERRVUZETEVOQlFVTXNUVUZCVFR0blFrRkRVaXhEUVVGRExFTkJRVU1zVFVGQlRTeERRVUZETEVsQlFVazdXVUZEWml4RFFVRkRMRU5CUVVNc1UwRkJVeXhEUVVGRE8xRkJSV1FzVDBGQlR5eEpRVUZKTEV0QlFVc3NRMEZCUXl4SlFVRkpMRVZCUVVVN1dVRkRja0lzUjBGQlJ5eEZRVUZGTEVOQlFVTXNUVUZCYlVJc1JVRkJSU3hEUVVGclFpeEZRVUZGTEZGQlFXRXNSVUZCUlN4RlFVRkZPMmRDUVVNNVJDeE5RVUZOTEUxQlFVMHNSMEZCUnl4UFFVRlBMRU5CUVVNc1IwRkJSeXhEUVVGRExFMUJRVTBzUlVGQlJTeERRVUZETEVWQlFVVXNVVUZCVVN4RFFVRkRMRU5CUVVNN1owSkJRMmhFTEVsQlFVa3NRMEZCUXl4TFFVRkxMRkZCUVZFc1JVRkJSU3hEUVVGRE8yOUNRVU51UWl4UFFVRlBMRWxCUVVrc1MwRkJTeXhEUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVWQlFVVTdkMEpCUXpWQ0xFZEJRVWNzUlVGQlJTeERRVUZETEUxQlFUQkNMRVZCUVVVc1EwRkJhMElzUlVGQlJTeEZRVUZGT3pSQ1FVTjBSQ3hKUVVGSkxFMUJRVTBzU1VGQlNTeERRVUZETEVsQlFVa3NUVUZCVFR0blEwRkRka0lzVDBGQlR5eE5RVUZOTEVOQlFVTXNRMEZCZDBJc1EwRkJReXhEUVVGRE96UkNRVU14UXl4UFFVRlBMRTlCUVU4c1EwRkJReXhIUVVGSExFTkJRVU1zVFVGQlRTeEZRVUZGTEVOQlFVTXNSVUZCUlN4UlFVRlJMRU5CUVVNc1EwRkJRenQzUWtGRE1VTXNRMEZCUXp0eFFrRkRSaXhEUVVGRExFTkJRVU03WjBKQlEwd3NRMEZCUXp0blFrRkRSQ3hKUVVGSkxFTkJRVU1zUzBGQlN5eFRRVUZUTEVWQlFVVXNRMEZCUXp0dlFrRkRjRUlzVDBGQlR5eERRVUZETEUxQlFVMHNSVUZCUlN4TlFVRk5MRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdaMEpCUTNCRExFTkJRVU03WjBKQlEwUXNUMEZCVHl4TlFVRk5MRU5CUVVNN1dVRkRhRUlzUTBGQlF6dFRRVU5HTEVOQlFVTXNRMEZCUXp0SlFVTk1MRU5CUVVNN1NVRkZSRHM3T3pzN096dFBRVTlITzBsQlEwOHNVMEZCVXl4RFFVTnFRaXhMUVVGbExFVkJRMllzVDBGQk1rSXNSVUZETTBJc1MwRkJZenRSUVVWa0xFMUJRVTBzUjBGQlJ5eEhRVUZoTEVWQlFVVXNRMEZCUXp0UlFVTjZRaXhOUVVGTkxFdEJRVXNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRE8xRkJRMjVETEVsQlFVa3NTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhYUVVGWExFTkJRVU1zUlVGQlJTeERRVUZETzFsQlF6ZENMRTFCUVUwc1NVRkJTU3hIUVVGSExFbEJRVWtzU1VGQlNTeEZRVUZGTEVOQlFVTXNWMEZCVnl4RlFVRkZMRU5CUVVNN1dVRkRkRU1zVFVGQlRTeFRRVUZUTEVkQlFVY3NTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhQUVVGUExFTkJRVU1zUzBGQlN5eERRVUZETEVsQlFVa3NSVUZCUlN4WFFVRlhMRVZCUVVVc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXp0WlFVTjZSU3hIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEZOQlFWTXNRMEZCUXl4RFFVRkRPMUZCUTNSQ0xFTkJRVU03VVVGRlJDeEpRVUZKTEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1ZVRkJWU3hEUVVGRExFVkJRVVVzUTBGQlF6dFpRVU0xUWl4TlFVRk5MRWRCUVVjc1IwRkJWeXhMUVVGTE8yZENRVU4yUWl4RFFVRkRMRU5CUVVNc1QwRkJUeXhEUVVGRExFdEJRVXNzUTBGQlF5eExRVUZMTEVWQlFVVXNWVUZCVlN4RlFVRkZMRXRCUVVzc1EwRkJRenRuUWtGRGVrTXNRMEZCUXl4RFFVRkRMRXRCUVVzc1EwRkJRenRaUVVOV0xFZEJRVWNzUTBGQlF5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1VVRkRhRUlzUTBGQlF6dFJRVVZFTEVsQlFVa3NTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhUUVVGVExFTkJRVU1zUlVGQlJTeERRVUZETzFsQlF6TkNMRTFCUVUwc1QwRkJUeXhIUVVGWExFdEJRVXM3WjBKQlF6TkNMRU5CUVVNc1EwRkJReXhQUVVGUExFTkJRVU1zUzBGQlN5eERRVUZETEVsQlFVa3NRMEZCUXl4UFFVRlBMRVZCUVVVc1QwRkJUeXhGUVVGRkxFdEJRVXNzUTBGQlF6dG5Ra0ZETjBNc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTTdXVUZEYWtJc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXp0UlFVTndRaXhEUVVGRE8xRkJSVVFzU1VGQlNTeEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMR1ZCUVdVc1EwRkJReXhGUVVGRkxFTkJRVU03V1VGRGFrTXNRMEZCUXp0blFrRkRReXhOUVVGTkxFVkJRVVVzUjBGQlZ5eExRVUZMTzI5Q1FVTjBRaXhEUVVGRExFTkJRVU1zVDBGQlR5eERRVUZETEV0QlFVc3NRMEZCUXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExHVkJRV1VzUTBGQlJTeERRVUZETEZGQlFWRXNSVUZCUlN4RlFVRkZMRWxCUVVrc1JVRkJSU3hMUVVGTExFTkJRVU03YjBKQlEzUkZMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEdWQlFXVXNRMEZCUlN4RFFVRkRMRkZCUVZFc1JVRkJSU3hEUVVGRE8yZENRVU0zUXl4SFFVRkhMRU5CUVVNc1NVRkJTU3hEUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETzFsQlEyWXNRMEZCUXp0UlFVTklMRU5CUVVNN1VVRkZSQ3hOUVVGTkxFZEJRVWNzUjBGQlZ5eExRVUZMTzFsQlEzWkNMRU5CUVVNc1EwRkJReXhQUVVGUExFTkJRVU1zUzBGQlN5eERRVU5ZTEU5QlFVOHNUMEZCVHl4TFFVRkxMRkZCUVZFc1EwRkJReXhEUVVGRExFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTXNRMEZCUlN4UFFVRnBRaXhEUVVGRExFOUJRVThzUlVGRGJFVXNVMEZCVXl4RlFVTlVMRXRCUVVzc1EwRkRUanRaUVVOSUxFTkJRVU1zUTBGQlF5eFBRVUZQTEU5QlFVOHNTMEZCU3l4UlFVRlJPMmRDUVVNelFpeERRVUZETEVOQlFVTXNUMEZCVHp0blFrRkRWQ3hEUVVGRExFTkJRVVVzVDBGQmFVSXNRMEZCUXl4UFFVRlBMRU5CUVVNN1VVRkRha01zUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRSUVVOa0xFbEJRVWtzUzBGQlN5eEpRVUZKTEU5QlFVOHNXVUZCV1N4TFFVRkxMRVZCUVVVc1EwRkJRenRaUVVOMFF5eExRVUZMTEVkQlFVY3NTMEZCU3p0blFrRkRXQ3hEUVVGRExFTkJRVU1zVDBGQlR5eERRVUZETEV0QlFVc3NRMEZEV0N4RFFVRkRMRXRCUVVzc1NVRkJTeXhQUVVGcFFpeERRVUZETEV0QlFVc3NRMEZCVnl4RlFVTTNReXhQUVVGUExFVkJRMUFzUzBGQlN5eERRVU5PTzJkQ1FVTklMRU5CUVVNc1EwRkJReXhMUVVGTExFTkJRVU03V1VGRFZpeEhRVUZITEVOQlFVTXNTVUZCU1N4RFFVRkRMRzFDUVVGdFFpeExRVUZMTEVWQlFVVXNRMEZCUXl4RFFVRkRPMUZCUTNaRExFTkJRVU03VVVGRlJDeFBRVUZQTEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eFhRVUZYTEVOQlFWY3NRMEZCUXl4RFFVRkRPMGxCUTNSRUxFTkJRVU03U1VGRlJEczdPenM3T3pzN1QwRlJSenRKUVVOUExFZEJRVWNzUTBGRFdDeExRVUZsTEVWQlEyWXNSMEZCZFVJc1JVRkRka0lzUzBGQll6dFJRVVZrTEVsQlEwVXNaMEpCUVdkQ0xFTkJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4UFFVRlBMRU5CUVdFc1EwRkJRenRaUVVOc1JDeG5Ra0ZCWjBJc1EwRkJReXhMUVVGTExFTkJRVU03V1VGRmRrSXNUMEZCVHp0UlFVTlVMRWxCUVVrc1RVRkJUU3hEUVVGRE8xRkJRMWdzVVVGQlVTeExRVUZMTEVWQlFVVXNRMEZCUXp0WlFVTmtMRXRCUVVzc1VVRkJVU3hEUVVGRExFbEJRVWs3WjBKQlEyaENMRTFCUVUwc1IwRkJSeXhQUVVGUExFTkJRVU1zUjBGQlJ5eERRVUZETzJkQ1FVTnlRaXhOUVVGTk8xbEJRMUlzUzBGQlN5eFJRVUZSTEVOQlFVTXNUMEZCVHl4RFFVRkRPMWxCUTNSQ0xFdEJRVXNzVVVGQlVTeERRVUZETEV0QlFVczdaMEpCUTJwQ0xFMUJRVTBzUjBGQlJ5eFBRVUZQTEVOQlFVTXNTMEZCU3l4RFFVRkRPMmRDUVVOMlFpeE5RVUZOTzFsQlExSXNTMEZCU3l4UlFVRlJMRU5CUVVNc1MwRkJTenRuUWtGRGFrSXNUVUZCVFN4SFFVRkhMRTlCUVU4c1EwRkJReXhMUVVGTExFTkJRVU03WjBKQlEzWkNMRTFCUVUwN1dVRkRVanRuUWtGRFJTeE5RVUZOTEVsQlFVa3NTMEZCU3l4RFFVRkRMRzFDUVVGdFFpeERRVUZETEVOQlFVTTdVVUZEZWtNc1EwRkJRenRSUVVORUxFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTXNVMEZCVXl4RFFVRkRMRXRCUVVzc1JVRkJSU3hIUVVGSExFVkJRVVVzUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXp0SlFVTTFReXhEUVVGRE8wbEJSVVE3T3pzN096dFBRVTFITzBsQlEwZ3NTMEZCU3l4RFFVRkRMRWRCUVdVc1JVRkJSU3haUVVGdlFpeERRVUZETzFGQlF6RkRMRWxCUVVzc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eFRRVUZUTEVOQlFWa3NTVUZCU1N4VFFVRlRPMWxCUTJwRUxFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNVVUZCVVN4RFFVRkRMRTlCUVU4c1JVRkJSU3hIUVVGSExFTkJRVU1zUTBGQlF6dEpRVU53UXl4RFFVRkRPMGxCUlVRN096czdPenRQUVUxSE8wbEJRMGdzVDBGQlR5eERRVUZETEVkQlFXVXNSVUZCUlN4WlFVRnZRaXhEUVVGRE8xRkJRelZETEVsQlFVc3NTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhUUVVGVExFTkJRVmtzU1VGQlNTeFRRVUZUTzFsQlEycEVMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zVVVGQlVTeERRVUZETEU5QlFVOHNSVUZCUlN4SFFVRkhMRU5CUVVNc1EwRkJRenRKUVVOd1F5eERRVUZETzBsQlJVUTdPenM3TzA5QlMwYzdTVUZEU0N4SlFVRkpMRU5CUVVNc1IwRkJaVHRSUVVOc1FpeEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRkZCUVZFc1EwRkJReXhKUVVGSkxFVkJRVVVzUjBGQlJ5eERRVUZETEVOQlFVTTdTVUZETDBJc1EwRkJRenRKUVVWRU96czdPenRQUVV0SE8wbEJRMGdzUzBGQlN5eERRVUZETEVkQlFXVTdVVUZEYmtJc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eFJRVUZSTEVOQlFVTXNTMEZCU3l4RlFVRkZMRWRCUVVjc1EwRkJReXhEUVVGRE8wbEJRMmhETEVOQlFVTTdTVUZGUkRzN096czdUMEZMUnp0SlFVTklMRXRCUVVzc1EwRkJReXhIUVVGMVFqdFJRVU16UWl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExGRkJRVkVzUTBGQlF5eExRVUZMTEVWQlFVVXNSMEZCUnl4RFFVRkRMRU5CUVVNN1NVRkRhRU1zUTBGQlF6dEpRVVZFT3pzN096dFBRVXRITzBsQlEwZ3NVMEZCVXl4RFFVRkRMRTFCUVRoQ08xRkJRM1JETEVsQlFVa3NRMEZCUXl4SlFVRkpMRWRCUVVjc1JVRkJSU3hIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NTVUZCU1N4RlFVRkZMRU5CUVVNc1JVRkJSU3hIUVVGSExFMUJRVTBzUlVGQlJTeERRVUZETzBsQlEyeEVMRU5CUVVNN1EwRkRSanRCUVVWRU96czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN08wZEJaMFZITzBGQlEwZ3NUVUZCVFN4UFFVRlBMRTlCUVU4N1NVRlBiRUk3T3p0UFFVZEhPMkZCUTFrc1lVRkJVU3hIUVVGclFpeERRVU4yUXl4TlFVRmpMRVZCUTJRc1RVRkJLMElzUlVGREwwSXNSVUZCUlR0UlFVTkdMRTlCUVU4c1NVRkJTU3hWUVVGVkxFTkJRVU1zVFVGQlRTeEZRVUZGTEUxQlFVMHNRMEZCUXl4RFFVRkRPMGxCUTNoRExFTkJRVU1zUTBGQlF6dEpRVU5HT3pzN1QwRkhSenRoUVVOWkxGbEJRVThzUjBGQmEwSXNiMEpCUVc5Q0xFTkJRVU03U1VGRk4wUXNaMEpCUVhWQ0xFTkJRVU03U1VGRmVFSTdPenM3TzA5QlMwYzdTVUZEU0N4TlFVRk5MRU5CUVVNc1ZVRkJWU3hEUVVGRExFOUJRWE5DTzFGQlEzUkRMRTlCUVU4c1EwRkJReXhSUVVGUkxFZEJRVWNzVDBGQlR5eERRVUZETzBsQlF6ZENMRU5CUVVNN1NVRkZSRHM3T3pzN1QwRkxSenRKUVVOSUxFMUJRVTBzUTBGQlF5eFRRVUZUTEVOQlFVTXNUVUZCT0VJN1VVRkROME1zVFVGQlRTeERRVUZETEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1QwRkJUeXhGUVVGRkxFMUJRVTBzUTBGQlF5eERRVUZETzBsQlEzUkRMRU5CUVVNN1NVRkZSRHM3T3p0UFFVbEhPMGxCUTBnc1RVRkJUU3hEUVVGRExGTkJRVk03VVVGRFpDeFBRVUZQTEUxQlFVMHNRMEZCUXl4TlFVRk5MRU5CUVVNc1JVRkJSU3hGUVVGRkxFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXp0SlFVTjZReXhEUVVGRE8wbEJSVVE3T3pzN08wOUJTMGM3U1VGRFNDeE5RVUZOTEVOQlFVTXNSMEZCUnp0UlFVTlNMRWxCUVVrc1EwRkJReXhOUVVGTkxFZEJRVWNzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhUUVVGVExFTkJRVU1zUTBGQlF6dFJRVU51UlN4UFFVRlBMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU03U1VGRGNrSXNRMEZCUXp0SlFVVkVPenM3T3pzN1QwRk5SenRKUVVOSUxFMUJRVTBzUTBGQlF5eFBRVUZQTEVOQlFVTXNSMEZCWlN4RlFVRkZMRmxCUVc5Q0xFTkJRVU03VVVGRGJrUXNUMEZCVHl4SlFVRkpMRU5CUVVNc1IwRkJSeXhGUVVGRkxFTkJRVU1zVDBGQlR5eERRVUZETEVkQlFVY3NSVUZCUlN4VFFVRlRMRU5CUVVNc1EwRkJRenRKUVVNMVF5eERRVUZETzBsQlJVUTdPenM3TzA5QlMwYzdTVUZEU0N4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExFZEJRV1U3VVVGRGVrSXNUMEZCVHl4SlFVRkpMRU5CUVVNc1IwRkJSeXhGUVVGRkxFTkJRVU1zU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMGxCUXpsQ0xFTkJRVU03U1VGRlJEczdPenM3VDBGTFJ6dEpRVU5JTEUxQlFVMHNRMEZCUXl4TFFVRkxMRU5CUVVNc1IwRkJaVHRSUVVNeFFpeFBRVUZQTEVsQlFVa3NRMEZCUXl4SFFVRkhMRVZCUVVVc1EwRkJReXhMUVVGTExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdTVUZETDBJc1EwRkJRenRKUVVWRU96czdPenRQUVV0SE8wbEJRMGdzVFVGQlRTeERRVUZETEV0QlFVc3NRMEZCUXl4SFFVRmxPMUZCUXpGQ0xFOUJRVThzU1VGQlNTeERRVUZETEVkQlFVY3NSVUZCUlN4RFFVRkRMRXRCUVVzc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dEpRVU12UWl4RFFVRkRPMGxCUlVRN096czdPMDlCUzBjN1NVRkRTQ3hOUVVGTkxFTkJRVU1zUzBGQlN5eERRVUZETEVkQlFXVTdVVUZETVVJc1QwRkJUeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eEZRVUZGTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8wbEJReTlDTEVOQlFVTTdTVUZGUkRzN096czdPenRQUVU5SE8wbEJRMGdzVFVGQlRTeERRVUZETEVkQlFVY3NRMEZEVWl4TlFVRnpRaXhGUVVOMFFpeE5RVUVyUWl4RlFVTXZRaXhIUVVGSExFbEJRVmM3VVVGRlpDeE5RVUZOTzFsQlEwb3NUMEZCVHl4TlFVRk5MRXRCUVVzc1VVRkJVVHRuUWtGRGVFSXNRMEZCUXl4RFFVRkRMRTFCUVUwN1owSkJRMUlzUTBGQlF5eERRVUZETEUxQlFVMHNRMEZCUXl4WFFVRlhPMjlDUVVOc1FpeERRVUZETEVOQlFVTXNUVUZCVFN4RFFVRkRMRmRCUVZjc1EwRkJReXhKUVVGSk8yOUNRVU42UWl4RFFVRkRMRU5CUVVNc1RVRkJUU3hEUVVGRExFbEJRVWtzUTBGQlF6dFJRVU53UWl4UFFVRlBMRWxCUVVrc1EwRkJReXhSUVVGUkxFTkJRVU1zVFVGQlRTeEZRVUZGTEUxQlFVMHNSVUZCUlN4SFFVRkhMRWxCUVVrc1EwRkJReXhEUVVGRE8wbEJRMmhFTEVOQlFVTTdTVUZGUkRzN096czdPenM3TzA5QlUwYzdTVUZEU0N4TlFVRk5MRU5CUVVNc1QwRkJUeXhEUVVGRExFMUJRV01zUlVGQlJTeEZRVUZYTzFGQlEzaERMRTlCUVU4c1NVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eE5RVUZOTEVWQlFVVXNTVUZCU1N4RFFVRkRMRTlCUVU4c1JVRkJSU3hGUVVGRkxFTkJRVU1zUTBGQlF6dEpRVU5xUkN4RFFVRkRPMGxCUlVRN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPMDlCWjBOSE8wbEJRMGdzVFVGQlRTeERRVUZETEV0QlFVc3NRMEZEVml4SlFVRlpMRVZCUTFvc1NVRkJhME1zUlVGRGJFTXNWMEZCY1VJc1JVRkRja0lzVjBGQmEwSXNXVUZCV1R0UlFVVTVRaXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4TFFVRkxPMWxCUVVVc1QwRkJUeXhKUVVGSkxFTkJRVU03VVVGRGNrTXNUVUZCVFN4TlFVRk5MRWRCUVVjc1QwRkJUeXhEUVVGRExFZEJRVWNzUlVGQlJTeERRVUZETEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU03VVVGRk4wTXNVMEZCVXl4TFFVRkxMRU5CUTFvc1IwRkJWeXhGUVVOWUxFMUJRWGxDTEVWQlEzcENMRXRCUVhsRk8xbEJSWHBGTEVsQlFVa3NRMEZCUXp0blFrRkRTQ3hOUVVGTkxFTkJRVU1zUjBGQk1FSXNSMEZCUnl4RFFVRkRPMmRDUVVOeVF5eEpRVUZKTEVOQlFVTXNSMEZCUnl4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03WjBKQlJXcENMRk5CUVZNc1ZVRkJWU3hEUVVOcVFpeEhRVUZwUkN4RlFVTnFSQ3hKUVVGSkxFZEJRVWNzUzBGQlN6dHZRa0ZGV2l4SlFVRkpMRU5CUVVNc1IwRkpiVUlzU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1ZVRkJWU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNWVUZCVlN4RFFVRkRPMjlDUVVNelJDeEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRTlCUVU4c1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETzNkQ1FVTjRRaXhQUVVGUkxFTkJRU3RETEVOQlFVTXNTVUZCU1N4RFFVTXhSQ3hEUVVGRExFVkJRMFFzUzBGQlpTeERRVU5vUWl4RFFVRkRPMjlDUVVOS0xFTkJRVU03YjBKQlEwUXNVVUZCVVN4SFFVRkhMRU5CUVVNc1RVRkJUU3hGUVVGRkxFTkJRVU03ZDBKQlEyNUNMRXRCUVVzc1EwRkJRenMwUWtGRFNpeERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zVlVGQlZTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1VVRkJVU3hEUVVGRE96UkNRVU55UXl4UFFVRlJMRU5CUVRaRExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN2QwSkJRMmhGTEV0QlFVc3NRMEZCUXpzMFFrRkRTaXhEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRPelJDUVVNelFpeFBRVUZQTEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0M1FrRkRka003TkVKQlEwVXNUVUZCVFN4RFFVRkRMRXRCUVVzc1EwRkJReXcyUWtGQk5rSXNUVUZCVFN4RlFVRkZMRU5CUVVNc1EwRkJRenMwUWtGRGNFUXNUMEZCVHl4TFFVRkxMRU5CUVVNc1EwRkJWeXhEUVVGRExFTkJRVU03YjBKQlF6bENMRU5CUVVNN1owSkJRMGdzUTBGQlF6dG5Ra0ZGUkN4VFFVRlRMRlZCUVZVc1EwRkJReXhEUVVGclFqdHZRa0ZEY0VNc1NVRkJTU3hQUVVGUExFTkJRVU1zUzBGQlN5eFJRVUZSTEVWQlFVVXNRMEZCUXp0M1FrRkRNVUlzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03YjBKQlEycENMRU5CUVVNN2VVSkJRVTBzUTBGQlF6dDNRa0ZEVGl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVEJDTEVOQlFXbENMRU5CUVVNN2IwSkJRM0JFTEVOQlFVTTdaMEpCUTBnc1EwRkJRenRuUWtGRlJDeFJRVUZSTEUxQlFVMHNSVUZCUlN4RFFVRkRPMjlDUVVObUxFdEJRVXNzU1VGQlNTeERRVUZETzI5Q1FVTldMRXRCUVVzc1NVRkJTVHQzUWtGRFVDeFBRVUZQTEZWQlFWVXNRMEZCUXl4TFFVRmxMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU03YjBKQlF6RkRMRXRCUVVzc1QwRkJUenQzUWtGRFZpeEpRVUZKTEV0QlFVc3NRMEZCUXl4UFFVRlBMRU5CUVVNc1MwRkJTeXhEUVVGRExFVkJRVVVzUTBGQlF6czBRa0ZEZWtJc1MwRkJTeXhEUVVGRExFOUJRVThzUTBGQlF5eFZRVUZWTEVOQlFVTXNRMEZCUXp0M1FrRkROVUlzUTBGQlF6czJRa0ZCVFN4RFFVRkRPelJDUVVOT0xGVkJRVlVzUTBGQlF5eExRVUYzUWl4RFFVRkRMRU5CUVVNN2QwSkJRM1pETEVOQlFVTTdkMEpCUTBRc1QwRkJUeXhEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETzI5Q1FVTm9RanQzUWtGRFJTeE5RVUZOTEVOQlFVTXNTMEZCU3l4RFFVRkRMRFpDUVVFMlFpeE5RVUZOTEVWQlFVVXNRMEZCUXl4RFFVRkRPM2RDUVVOd1JDeFBRVUZQTEVOQlFVTXNRMEZCUXp0blFrRkRZaXhEUVVGRE8yZENRVU5FTERaRVFVRTJSRHRaUVVNdlJDeERRVUZETzFsQlFVTXNUMEZCVHl4RFFVRlZMRVZCUVVVc1EwRkJRenRuUWtGRGNFSXNUVUZCVFN4RFFVRkRMRXRCUVVzc1EwRkJReXg1UWtGQmVVSXNUVUZCVFN4bFFVRmxMRXRCUVVzc1JVRkJSU3hEUVVGRExFTkJRVU03WjBKQlEzQkZMRTlCUVU4c1IwRkJSeXhEUVVGRE8xbEJRMklzUTBGQlF6dFJRVU5JTEVOQlFVTTdVVUZGUkN4TlFVRk5MR1ZCUVdVc1IwRkJSeXhSUVVGUkxFTkJRVU1zU1VGQmJVSXNRMEZCUXl4RFFVRkRPMUZCUTNSRUxFbEJRVWtzUTBGQlF5eGxRVUZsTEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExHVkJRV1VzUTBGQlF5eERRVUZETEUxQlFVMHNSVUZCUlN4RFFVRkRPMWxCUXpkRUxFOUJRVThzU1VGQlNTeERRVUZETzFGQlEyUXNRMEZCUXp0UlFVVkVMRWxCUVVrc1YwRkJWeXhIUVVGblFpeGxRVUU0UWl4RFFVRkRPMUZCUlRsRUxFMUJRVTBzVTBGQlV5eEhRVUZITEUxQlFVMHNRMEZCUXl4TlFVRk5MRU5CUVVNc1JVRkJSU3hGUVVGRkxGRkJRVkVzUTBGQlF5eERRVUZETzFGQlF6bERMRWxCUVVrc1RVRkJUU3hEUVVGRExFbEJRVWtzUTBGQlF5eGxRVUZsTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hUUVVGVE8xbEJRemxETEZkQlFWYzdaMEpCUTFJc1pVRkJlVU1zUTBGQlF5eFhRVUZYTEVOQlFVTXNTVUZCU1N4RlFVRkZMRU5CUVVNN1VVRkZiRVVzVDBGQlR5eE5RVUZOTEVOQlFVTXNTVUZCU1N4RFFVRkRMRmRCUVZjc1EwRkJReXhEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVkQlFWY3NSVUZCUlN4SFFVRlhMRVZCUVVVc1JVRkJSVHRaUVVOc1JTeE5RVUZOTEVkQlFVY3NSMEZCU1N4WFFVRXlRaXhEUVVGRExFZEJRWGRDTEVOQlFVTXNRMEZCUXp0WlFVTnVSU3hKUVVGSkxFZEJRVWM3WjBKQlEwd3NUMEZCVHl4TFFVRkxMRU5CUTFZc1IwRkJSeXhGUVVOSUxFZEJRWGRDTEVWQlEzaENMRWRCUzFrc1EwRkRZaXhEUVVGRE8xbEJRMG9zVDBGQlR5eEhRVUZITEVOQlFVTTdVVUZEWWl4RFFVRkRMRVZCUVVVc1NVRkJTU3hEUVVGRExFTkJRVU03U1VGRFdDeERRVUZESWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaWFXMXdiM0owSUh0Y2JpQWdURzluWjJWeVJtRmpkRzl5ZVN4Y2JpQWdURzluWjJsdVowTnZibVpwWnl4Y2JpQWdURzluWjJsdVowTnZiblJsZUhRc1hHNGdJRk4wY21sdVoweHBhMlVzWEc0Z0lGUm9aVzFsTEZ4dUlDQlVhR1Z0WlU5d2RHbHZiaXhjYmlBZ1ZHaGxiV1ZQY0hScGIyNUNlVXh2WjB4bGRtVnNMRnh1SUNCTWIyZG5aWElzWEc1OUlHWnliMjBnWENJdUwzUjVjR1Z6WENJN1hHNXBiWEJ2Y25RZ2V5QkRiMnh2Y21sNlpVOXdkR2x2Ym5Nc0lITjBlV3hsTENCVGRIbHNaV1JUZEhKcGJtY2dmU0JtY205dElGd2ljM1I1YkdWa0xYTjBjbWx1WnkxaWRXbHNaR1Z5WENJN1hHNXBiWEJ2Y25RZ2UxeHVJQ0JFWldaaGRXeDBURzluWjJsdVowTnZibVpwWnl4Y2JpQWdSR1ZtWVhWc2RGUm9aVzFsTEZ4dUlDQk1iMmRNWlhabGJDeGNiaUFnVG5WdFpYSnBZMHh2WjB4bGRtVnNjeXhjYm4wZ1puSnZiU0JjSWk0dlkyOXVjM1JoYm5SelhDSTdYRzVjYmk4cUtseHVJQ29nUUdSbGMyTnlhWEIwYVc5dUlFRWdiV2x1YVcxaGJDQnNiMmRuWlhJZ2FXMXdiR1Z0Wlc1MFlYUnBiMjR1WEc0Z0tpQkFjM1Z0YldGeWVTQk5hVzVwVEc5bloyVnlJR2x6SUdFZ2JHbG5hSFIzWldsbmFIUWdiRzluWjJsdVp5QmpiR0Z6Y3lCMGFHRjBJR2x0Y0d4bGJXVnVkSE1nZEdobElFeHZaMmRsY2lCcGJuUmxjbVpoWTJVdVhHNGdLaUJKZENCd2NtOTJhV1JsY3lCaVlYTnBZeUJzYjJkbmFXNW5JR1oxYm1OMGFXOXVZV3hwZEhrZ2QybDBhQ0J6ZFhCd2IzSjBJR1p2Y2lCa2FXWm1aWEpsYm5RZ2JHOW5JR3hsZG1Wc2N5d2dkbVZ5WW05emFYUjVMRnh1SUNvZ1kyOXVkR1Y0ZEMxaGQyRnlaU0JzYjJkbmFXNW5MQ0JoYm1RZ1kzVnpkRzl0YVhwaFlteGxJR1p2Y20xaGRIUnBibWN1WEc0Z0tpQkFjR0Z5WVcwZ2UzTjBjbWx1WjMwZ1kyOXVkR1Y0ZENBdElGUm9aU0JqYjI1MFpYaDBJQ2gwZVhCcFkyRnNiSGtnWTJ4aGMzTWdibUZ0WlNrZ2RHaHBjeUJzYjJkblpYSWdhWE1nWVhOemIyTnBZWFJsWkNCM2FYUm9YRzRnS2lCQWNHRnlZVzBnZTFCaGNuUnBZV3c4VEc5bloybHVaME52Ym1acFp6NTlJR052Ym1ZZ0xTQlBjSFJwYjI1aGJDQmpiMjVtYVdkMWNtRjBhVzl1SUhSdklHOTJaWEp5YVdSbElHZHNiMkpoYkNCelpYUjBhVzVuYzF4dUlDb2dRR05zWVhOeklFMXBibWxNYjJkblpYSmNiaUFxSUVCbGVHRnRjR3hsWEc0Z0tpQXZMeUJEY21WaGRHVWdZU0J1WlhjZ2JHOW5aMlZ5SUdadmNpQmhJR05zWVhOelhHNGdLaUJqYjI1emRDQnNiMmRuWlhJZ1BTQnVaWGNnVFdsdWFVeHZaMmRsY2lnblRYbERiR0Z6Y3ljcE8xeHVJQ3BjYmlBcUlDOHZJRXh2WnlCdFpYTnpZV2RsY3lCaGRDQmthV1ptWlhKbGJuUWdiR1YyWld4elhHNGdLaUJzYjJkblpYSXVhVzVtYnlnblZHaHBjeUJwY3lCaGJpQnBibVp2SUcxbGMzTmhaMlVuS1R0Y2JpQXFJR3h2WjJkbGNpNWtaV0oxWnlnblZHaHBjeUJwY3lCaElHUmxZblZuSUcxbGMzTmhaMlVuS1R0Y2JpQXFJR3h2WjJkbGNpNWxjbkp2Y2lnblUyOXRaWFJvYVc1bklIZGxiblFnZDNKdmJtY25LVHRjYmlBcVhHNGdLaUF2THlCRGNtVmhkR1VnWVNCamFHbHNaQ0JzYjJkblpYSWdabTl5SUdFZ2MzQmxZMmxtYVdNZ2JXVjBhRzlrWEc0Z0tpQmpiMjV6ZENCdFpYUm9iMlJNYjJkblpYSWdQU0JzYjJkblpYSXVabTl5S0NkdGVVMWxkR2h2WkNjcE8xeHVJQ29nYldWMGFHOWtURzluWjJWeUxuWmxjbUp2YzJVb0owUmxkR0ZwYkdWa0lHbHVabTl5YldGMGFXOXVKeXdnTWlrN1hHNGdLbHh1SUNvZ0x5OGdURzluSUhkcGRHZ2dZM1Z6ZEc5dElHTnZibVpwWjNWeVlYUnBiMjVjYmlBcUlHeHZaMmRsY2k1bWIzSW9KM053WldOcFlXeE5aWFJvYjJRbkxDQjdJSE4wZVd4bE9pQjBjblZsSUgwcExtbHVabThvSjFOMGVXeGxaQ0J0WlhOellXZGxKeWs3WEc0Z0tpOWNibVY0Y0c5eWRDQmpiR0Z6Y3lCTmFXNXBURzluWjJWeUlHbHRjR3hsYldWdWRITWdURzluWjJWeUlIdGNiaUFnWTI5dWMzUnlkV04wYjNJb1hHNGdJQ0FnY0hKdmRHVmpkR1ZrSUdOdmJuUmxlSFE2SUhOMGNtbHVaeXhjYmlBZ0lDQndjbTkwWldOMFpXUWdZMjl1Wmo4NklGQmhjblJwWVd3OFRHOW5aMmx1WjBOdmJtWnBaejVjYmlBZ0tTQjdmVnh1WEc0Z0lIQnliM1JsWTNSbFpDQmpiMjVtYVdjb1hHNGdJQ0FnYTJWNU9pQnJaWGx2WmlCTWIyZG5hVzVuUTI5dVptbG5YRzRnSUNrNklFeHZaMmRwYm1kRGIyNW1hV2RiYTJWNWIyWWdURzluWjJsdVowTnZibVpwWjEwZ2UxeHVJQ0FnSUdsbUlDaDBhR2x6TG1OdmJtWWdKaVlnYTJWNUlHbHVJSFJvYVhNdVkyOXVaaWtnY21WMGRYSnVJSFJvYVhNdVkyOXVabHRyWlhsZE8xeHVJQ0FnSUhKbGRIVnliaUJNYjJkbmFXNW5MbWRsZEVOdmJtWnBaeWdwVzJ0bGVWMDdYRzRnSUgxY2JseHVJQ0F2S2lwY2JpQWdJQ29nUUdSbGMyTnlhWEIwYVc5dUlFTnlaV0YwWlhNZ1lTQmphR2xzWkNCc2IyZG5aWElnWm05eUlHRWdjM0JsWTJsbWFXTWdiV1YwYUc5a0lHOXlJR052Ym5SbGVIUmNiaUFnSUNvZ1FITjFiVzFoY25rZ1VtVjBkWEp1Y3lCaElHNWxkeUJzYjJkblpYSWdhVzV6ZEdGdVkyVWdkMmwwYUNCMGFHVWdZM1Z5Y21WdWRDQmpiMjUwWlhoMElHVjRkR1Z1WkdWa0lHSjVJSFJvWlNCemNHVmphV1pwWldRZ2JXVjBhRzlrSUc1aGJXVmNiaUFnSUNvZ1FIQmhjbUZ0SUh0emRISnBibWNnZkNCR2RXNWpkR2x2Ym4wZ2JXVjBhRzlrSUMwZ1ZHaGxJRzFsZEdodlpDQnVZVzFsSUc5eUlHWjFibU4wYVc5dUlIUnZJR055WldGMFpTQmhJR3h2WjJkbGNpQm1iM0pjYmlBZ0lDb2dRSEJoY21GdElIdFFZWEowYVdGc1BFeHZaMmRwYm1kRGIyNW1hV2MrZlNCamIyNW1hV2NnTFNCUGNIUnBiMjVoYkNCamIyNW1hV2QxY21GMGFXOXVJSFJ2SUc5MlpYSnlhV1JsSUhObGRIUnBibWR6WEc0Z0lDQXFJRUJ3WVhKaGJTQjdMaTR1WVc1NWZTQmhjbWR6SUMwZ1FXUmthWFJwYjI1aGJDQmhjbWQxYldWdWRITWdkRzhnY0dGemN5QjBieUIwYUdVZ2JHOW5aMlZ5SUdaaFkzUnZjbmxjYmlBZ0lDb2dRSEpsZEhWeWJpQjdURzluWjJWeWZTQkJJRzVsZHlCc2IyZG5aWElnYVc1emRHRnVZMlVnWm05eUlIUm9aU0J6Y0dWamFXWnBaV1FnYldWMGFHOWtYRzRnSUNBcUwxeHVJQ0JtYjNJb1hHNGdJQ0FnYldWMGFHOWtQem9nYzNSeWFXNW5JSHdnS0NndUxpNWhjbWR6T2lCaGJubGJYU2tnUFQ0Z1lXNTVLU3hjYmlBZ0lDQmpiMjVtYVdjL09pQlFZWEowYVdGc1BFeHZaMmRwYm1kRGIyNW1hV2MrWEc0Z0lDazZJRXh2WjJkbGNpQjdYRzRnSUNBZ2JXVjBhRzlrSUQwZ2JXVjBhRzlrWEc0Z0lDQWdJQ0EvSUhSNWNHVnZaaUJ0WlhSb2IyUWdQVDA5SUZ3aWMzUnlhVzVuWENKY2JpQWdJQ0FnSUNBZ1B5QnRaWFJvYjJSY2JpQWdJQ0FnSUNBZ09pQnRaWFJvYjJRdWJtRnRaVnh1SUNBZ0lDQWdPaUIxYm1SbFptbHVaV1E3WEc1Y2JpQWdJQ0J5WlhSMWNtNGdibVYzSUZCeWIzaDVLSFJvYVhNc0lIdGNiaUFnSUNBZ0lHZGxkRG9nS0hSaGNtZGxkRG9nZEhsd1pXOW1JSFJvYVhNc0lIQTZJSE4wY21sdVp5QjhJSE41YldKdmJDd2djbVZqWldsMlpYSTZJR0Z1ZVNrZ1BUNGdlMXh1SUNBZ0lDQWdJQ0JqYjI1emRDQnlaWE4xYkhRZ1BTQlNaV1pzWldOMExtZGxkQ2gwWVhKblpYUXNJSEFzSUhKbFkyVnBkbVZ5S1R0Y2JpQWdJQ0FnSUNBZ2FXWWdLSEFnUFQwOUlGd2lZMjl1Wm1sblhDSXBJSHRjYmlBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnYm1WM0lGQnliM2g1S0hSb2FYTXVZMjl1Wm1sbkxDQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCblpYUTZJQ2gwWVhKblpYUTZJSFI1Y0dWdlppQjBhR2x6TG1OdmJtWnBaeXdnY0RvZ2MzUnlhVzVuSUh3Z2MzbHRZbTlzS1NBOVBpQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2hqYjI1bWFXY2dKaVlnY0NCcGJpQmpiMjVtYVdjcFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUdOdmJtWnBaMXR3SUdGeklHdGxlVzltSUV4dloyZHBibWREYjI1bWFXZGRPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z1VtVm1iR1ZqZEM1blpYUW9kR0Z5WjJWMExDQndMQ0J5WldObGFYWmxjaWs3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlMRnh1SUNBZ0lDQWdJQ0FnSUgwcE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJR2xtSUNod0lEMDlQU0JjSW1OdmJuUmxlSFJjSWlrZ2UxeHVJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQmJjbVZ6ZFd4MExDQnRaWFJvYjJSZExtcHZhVzRvWENJdVhDSXBPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUJ5WlhOMWJIUTdYRzRnSUNBZ0lDQjlMRnh1SUNBZ0lIMHBPMXh1SUNCOVhHNWNiaUFnTHlvcVhHNGdJQ0FxSUVCa1pYTmpjbWx3ZEdsdmJpQkRjbVZoZEdWeklHRWdabTl5YldGMGRHVmtJR3h2WnlCemRISnBibWRjYmlBZ0lDb2dRSE4xYlcxaGNua2dSMlZ1WlhKaGRHVnpJR0VnYkc5bklITjBjbWx1WnlCM2FYUm9JSFJwYldWemRHRnRjQ3dnWTI5c2IzSmxaQ0JzYjJjZ2JHVjJaV3dzSUdOdmJuUmxlSFFzSUdGdVpDQnRaWE56WVdkbFhHNGdJQ0FxSUVCd1lYSmhiU0I3VEc5blRHVjJaV3g5SUd4bGRtVnNJQzBnVkdobElHeHZaeUJzWlhabGJDQm1iM0lnZEdocGN5QnRaWE56WVdkbFhHNGdJQ0FxSUVCd1lYSmhiU0I3VTNSeWFXNW5UR2xyWlNCOElFVnljbTl5ZlNCdFpYTnpZV2RsSUMwZ1ZHaGxJRzFsYzNOaFoyVWdkRzhnYkc5bklHOXlJR0Z1SUVWeWNtOXlJRzlpYW1WamRGeHVJQ0FnS2lCQWNHRnlZVzBnZTNOMGNtbHVaMzBnVzNOMFlXTnJYU0F0SUU5d2RHbHZibUZzSUhOMFlXTnJJSFJ5WVdObElIUnZJR2x1WTJ4MVpHVWdhVzRnZEdobElHeHZaMXh1SUNBZ0tpQkFjbVYwZFhKdUlIdHpkSEpwYm1kOUlFRWdabTl5YldGMGRHVmtJR3h2WnlCemRISnBibWNnZDJsMGFDQmhiR3dnWTI5dGNHOXVaVzUwYzF4dUlDQWdLaTljYmlBZ2NISnZkR1ZqZEdWa0lHTnlaV0YwWlV4dlp5aGNiaUFnSUNCc1pYWmxiRG9nVEc5blRHVjJaV3dzWEc0Z0lDQWdiV1Z6YzJGblpUb2dVM1J5YVc1blRHbHJaU0I4SUVWeWNtOXlMRnh1SUNBZ0lITjBZV05yUHpvZ2MzUnlhVzVuWEc0Z0lDazZJSE4wY21sdVp5QjdYRzRnSUNBZ1kyOXVjM1FnYkc5bk9pQnpkSEpwYm1kYlhTQTlJRnRkTzF4dUlDQWdJR052Ym5OMElITjBlV3hsSUQwZ2RHaHBjeTVqYjI1bWFXY29YQ0p6ZEhsc1pWd2lLVHRjYmlBZ0lDQnBaaUFvZEdocGN5NWpiMjVtYVdjb1hDSjBhVzFsYzNSaGJYQmNJaWtwSUh0Y2JpQWdJQ0FnSUdOdmJuTjBJR1JoZEdVZ1BTQnVaWGNnUkdGMFpTZ3BMblJ2U1ZOUFUzUnlhVzVuS0NrN1hHNGdJQ0FnSUNCamIyNXpkQ0IwYVcxbGMzUmhiWEFnUFNCemRIbHNaU0EvSUV4dloyZHBibWN1ZEdobGJXVW9aR0YwWlN3Z1hDSjBhVzFsYzNSaGJYQmNJaXdnYkdWMlpXd3BJRG9nWkdGMFpUdGNiaUFnSUNBZ0lHeHZaeTV3ZFhOb0tIUnBiV1Z6ZEdGdGNDazdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2FXWWdLSFJvYVhNdVkyOXVabWxuS0Z3aWJHOW5UR1YyWld4Y0lpa3BJSHRjYmlBZ0lDQWdJR052Ym5OMElHeDJiRG9nYzNSeWFXNW5JRDBnYzNSNWJHVmNiaUFnSUNBZ0lDQWdQeUJNYjJkbmFXNW5MblJvWlcxbEtHeGxkbVZzTENCY0lteHZaMHhsZG1Wc1hDSXNJR3hsZG1Wc0tWeHVJQ0FnSUNBZ0lDQTZJR3hsZG1Wc08xeHVJQ0FnSUNBZ2JHOW5MbkIxYzJnb2JIWnNLVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQnBaaUFvZEdocGN5NWpiMjVtYVdjb1hDSmpiMjUwWlhoMFhDSXBLU0I3WEc0Z0lDQWdJQ0JqYjI1emRDQmpiMjUwWlhoME9pQnpkSEpwYm1jZ1BTQnpkSGxzWlZ4dUlDQWdJQ0FnSUNBL0lFeHZaMmRwYm1jdWRHaGxiV1VvZEdocGN5NWpiMjUwWlhoMExDQmNJbU5zWVhOelhDSXNJR3hsZG1Wc0tWeHVJQ0FnSUNBZ0lDQTZJSFJvYVhNdVkyOXVkR1Y0ZER0Y2JpQWdJQ0FnSUd4dlp5NXdkWE5vS0dOdmJuUmxlSFFwTzF4dUlDQWdJSDFjYmx4dUlDQWdJR2xtSUNoMGFHbHpMbU52Ym1acFp5aGNJbU52Y25KbGJHRjBhVzl1U1dSY0lpa3BJSHRjYmlBZ0lDQWdJSHRjYmlBZ0lDQWdJQ0FnWTI5dWMzUWdhV1E2SUhOMGNtbHVaeUE5SUhOMGVXeGxYRzRnSUNBZ0lDQWdJQ0FnUHlCTWIyZG5hVzVuTG5Sb1pXMWxLSFJvYVhNdVkyOXVabWxuS0Z3aVkyOXljbVZzWVhScGIyNUpaRndpS1NFdWRHOVRkSEpwYm1jb0tTd2dYQ0pwWkZ3aUxDQnNaWFpsYkNsY2JpQWdJQ0FnSUNBZ0lDQTZJSFJvYVhNdVkyOXVabWxuS0Z3aVkyOXljbVZzWVhScGIyNUpaRndpS1NFdWRHOVRkSEpwYm1jb0tUdGNiaUFnSUNBZ0lDQWdiRzluTG5CMWMyZ29hV1FwTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmx4dUlDQWdJR052Ym5OMElHMXpaem9nYzNSeWFXNW5JRDBnYzNSNWJHVmNiaUFnSUNBZ0lEOGdURzluWjJsdVp5NTBhR1Z0WlNoY2JpQWdJQ0FnSUNBZ0lDQjBlWEJsYjJZZ2JXVnpjMkZuWlNBOVBUMGdYQ0p6ZEhKcGJtZGNJaUEvSUcxbGMzTmhaMlVnT2lBb2JXVnpjMkZuWlNCaGN5QkZjbkp2Y2lrdWJXVnpjMkZuWlN4Y2JpQWdJQ0FnSUNBZ0lDQmNJbTFsYzNOaFoyVmNJaXhjYmlBZ0lDQWdJQ0FnSUNCc1pYWmxiRnh1SUNBZ0lDQWdJQ0FwWEc0Z0lDQWdJQ0E2SUhSNWNHVnZaaUJ0WlhOellXZGxJRDA5UFNCY0luTjBjbWx1WjF3aVhHNGdJQ0FnSUNBZ0lEOGdiV1Z6YzJGblpWeHVJQ0FnSUNBZ0lDQTZJQ2h0WlhOellXZGxJR0Z6SUVWeWNtOXlLUzV0WlhOellXZGxPMXh1SUNBZ0lHeHZaeTV3ZFhOb0tHMXpaeWs3WEc0Z0lDQWdhV1lnS0hOMFlXTnJJSHg4SUcxbGMzTmhaMlVnYVc1emRHRnVZMlZ2WmlCRmNuSnZjaWtnZTF4dUlDQWdJQ0FnYzNSaFkyc2dQU0J6ZEhsc1pWeHVJQ0FnSUNBZ0lDQS9JRXh2WjJkcGJtY3VkR2hsYldVb1hHNGdJQ0FnSUNBZ0lDQWdJQ0FvYzNSaFkyc2dmSHdnS0cxbGMzTmhaMlVnWVhNZ1JYSnliM0lwTG5OMFlXTnJLU0JoY3lCemRISnBibWNzWEc0Z0lDQWdJQ0FnSUNBZ0lDQmNJbk4wWVdOclhDSXNYRzRnSUNBZ0lDQWdJQ0FnSUNCc1pYWmxiRnh1SUNBZ0lDQWdJQ0FnSUNsY2JpQWdJQ0FnSUNBZ09pQnpkR0ZqYXp0Y2JpQWdJQ0FnSUd4dlp5NXdkWE5vS0dCY1hHNVRkR0ZqYXlCMGNtRmpaVHBjWEc0a2UzTjBZV05yZldBcE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUhKbGRIVnliaUJzYjJjdWFtOXBiaWgwYUdsekxtTnZibVpwWnloY0luTmxjR0Z5WVhSdmNsd2lLU0JoY3lCemRISnBibWNwTzF4dUlDQjlYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFQmtaWE5qY21sd2RHbHZiaUJNYjJkeklHRWdiV1Z6YzJGblpTQjNhWFJvSUhSb1pTQnpjR1ZqYVdacFpXUWdiRzluSUd4bGRtVnNYRzRnSUNBcUlFQnpkVzF0WVhKNUlFTm9aV05yY3lCcFppQjBhR1VnYldWemMyRm5aU0J6YUc5MWJHUWdZbVVnYkc5bloyVmtJR0poYzJWa0lHOXVJSFJvWlNCamRYSnlaVzUwSUd4dlp5QnNaWFpsYkN4Y2JpQWdJQ29nZEdobGJpQjFjMlZ6SUhSb1pTQmhjSEJ5YjNCeWFXRjBaU0JqYjI1emIyeGxJRzFsZEdodlpDQjBieUJ2ZFhSd2RYUWdkR2hsSUdadmNtMWhkSFJsWkNCc2IyZGNiaUFnSUNvZ1FIQmhjbUZ0SUh0TWIyZE1aWFpsYkgwZ2JHVjJaV3dnTFNCVWFHVWdiRzluSUd4bGRtVnNJRzltSUhSb1pTQnRaWE56WVdkbFhHNGdJQ0FxSUVCd1lYSmhiU0I3VTNSeWFXNW5UR2xyWlNCOElFVnljbTl5ZlNCdGMyY2dMU0JVYUdVZ2JXVnpjMkZuWlNCMGJ5QmlaU0JzYjJkblpXUWdiM0lnWVc0Z1JYSnliM0lnYjJKcVpXTjBYRzRnSUNBcUlFQndZWEpoYlNCN2MzUnlhVzVuZlNCYmMzUmhZMnRkSUMwZ1QzQjBhVzl1WVd3Z2MzUmhZMnNnZEhKaFkyVWdkRzhnYVc1amJIVmtaU0JwYmlCMGFHVWdiRzluWEc0Z0lDQXFJRUJ5WlhSMWNtNGdlM1p2YVdSOVhHNGdJQ0FxTDF4dUlDQndjbTkwWldOMFpXUWdiRzluS0Z4dUlDQWdJR3hsZG1Wc09pQk1iMmRNWlhabGJDeGNiaUFnSUNCdGMyYzZJRk4wY21sdVoweHBhMlVnZkNCRmNuSnZjaXhjYmlBZ0lDQnpkR0ZqYXo4NklITjBjbWx1WjF4dUlDQXBPaUIyYjJsa0lIdGNiaUFnSUNCcFppQW9YRzRnSUNBZ0lDQk9kVzFsY21salRHOW5UR1YyWld4elczUm9hWE11WTI5dVptbG5LRndpYkdWMlpXeGNJaWtnWVhNZ1RHOW5UR1YyWld4ZElEeGNiaUFnSUNBZ0lFNTFiV1Z5YVdOTWIyZE1aWFpsYkhOYmJHVjJaV3hkWEc0Z0lDQWdLVnh1SUNBZ0lDQWdjbVYwZFhKdU8xeHVJQ0FnSUd4bGRDQnRaWFJvYjJRN1hHNGdJQ0FnYzNkcGRHTm9JQ2hzWlhabGJDa2dlMXh1SUNBZ0lDQWdZMkZ6WlNCTWIyZE1aWFpsYkM1cGJtWnZPbHh1SUNBZ0lDQWdJQ0J0WlhSb2IyUWdQU0JqYjI1emIyeGxMbXh2Wnp0Y2JpQWdJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdJQ0JqWVhObElFeHZaMHhsZG1Wc0xuWmxjbUp2YzJVNlhHNGdJQ0FnSUNCallYTmxJRXh2WjB4bGRtVnNMbVJsWW5Wbk9seHVJQ0FnSUNBZ0lDQnRaWFJvYjJRZ1BTQmpiMjV6YjJ4bExtUmxZblZuTzF4dUlDQWdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQWdJR05oYzJVZ1RHOW5UR1YyWld3dVpYSnliM0k2WEc0Z0lDQWdJQ0FnSUcxbGRHaHZaQ0E5SUdOdmJuTnZiR1V1WlhKeWIzSTdYRzRnSUNBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUNBZ1pHVm1ZWFZzZERwY2JpQWdJQ0FnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0Z3aVNXNTJZV3hwWkNCc2IyY2diR1YyWld4Y0lpazdYRzRnSUNBZ2ZWeHVJQ0FnSUcxbGRHaHZaQ2gwYUdsekxtTnlaV0YwWlV4dlp5aHNaWFpsYkN3Z2JYTm5MQ0J6ZEdGamF5a3BPMXh1SUNCOVhHNWNiaUFnTHlvcVhHNGdJQ0FxSUVCa1pYTmpjbWx3ZEdsdmJpQk1iMmR6SUdFZ2JXVnpjMkZuWlNCaGRDQjBhR1VnYzJsc2JIa2diR1YyWld4Y2JpQWdJQ29nUUhOMWJXMWhjbmtnVEc5bmN5QmhJRzFsYzNOaFoyVWdZWFFnZEdobElITnBiR3g1SUd4bGRtVnNJR2xtSUhSb1pTQmpkWEp5Wlc1MElIWmxjbUp2YzJsMGVTQnpaWFIwYVc1bklHRnNiRzkzY3lCcGRGeHVJQ0FnS2lCQWNHRnlZVzBnZTFOMGNtbHVaMHhwYTJWOUlHMXpaeUF0SUZSb1pTQnRaWE56WVdkbElIUnZJR0psSUd4dloyZGxaRnh1SUNBZ0tpQkFjR0Z5WVcwZ2UyNTFiV0psY24wZ1czWmxjbUp2YzJsMGVUMHdYU0F0SUZSb1pTQjJaWEppYjNOcGRIa2diR1YyWld3Z2IyWWdkR2hsSUcxbGMzTmhaMlZjYmlBZ0lDb2dRSEpsZEhWeWJpQjdkbTlwWkgxY2JpQWdJQ292WEc0Z0lITnBiR3g1S0cxelp6b2dVM1J5YVc1blRHbHJaU3dnZG1WeVltOXphWFI1T2lCdWRXMWlaWElnUFNBd0tUb2dkbTlwWkNCN1hHNGdJQ0FnYVdZZ0tDaDBhR2x6TG1OdmJtWnBaeWhjSW5abGNtSnZjMlZjSWlrZ1lYTWdiblZ0WW1WeUtTQStQU0IyWlhKaWIzTnBkSGtwWEc0Z0lDQWdJQ0IwYUdsekxteHZaeWhNYjJkTVpYWmxiQzUyWlhKaWIzTmxMQ0J0YzJjcE8xeHVJQ0I5WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRUJrWlhOamNtbHdkR2x2YmlCTWIyZHpJR0VnYldWemMyRm5aU0JoZENCMGFHVWdkbVZ5WW05elpTQnNaWFpsYkZ4dUlDQWdLaUJBYzNWdGJXRnllU0JNYjJkeklHRWdiV1Z6YzJGblpTQmhkQ0IwYUdVZ2RtVnlZbTl6WlNCc1pYWmxiQ0JwWmlCMGFHVWdZM1Z5Y21WdWRDQjJaWEppYjNOcGRIa2djMlYwZEdsdVp5QmhiR3h2ZDNNZ2FYUmNiaUFnSUNvZ1FIQmhjbUZ0SUh0VGRISnBibWRNYVd0bGZTQnRjMmNnTFNCVWFHVWdiV1Z6YzJGblpTQjBieUJpWlNCc2IyZG5aV1JjYmlBZ0lDb2dRSEJoY21GdElIdHVkVzFpWlhKOUlGdDJaWEppYjNOcGRIazlNRjBnTFNCVWFHVWdkbVZ5WW05emFYUjVJR3hsZG1Wc0lHOW1JSFJvWlNCdFpYTnpZV2RsWEc0Z0lDQXFJRUJ5WlhSMWNtNGdlM1p2YVdSOVhHNGdJQ0FxTDF4dUlDQjJaWEppYjNObEtHMXpaem9nVTNSeWFXNW5UR2xyWlN3Z2RtVnlZbTl6YVhSNU9pQnVkVzFpWlhJZ1BTQXdLVG9nZG05cFpDQjdYRzRnSUNBZ2FXWWdLQ2gwYUdsekxtTnZibVpwWnloY0luWmxjbUp2YzJWY0lpa2dZWE1nYm5WdFltVnlLU0ErUFNCMlpYSmliM05wZEhrcFhHNGdJQ0FnSUNCMGFHbHpMbXh2WnloTWIyZE1aWFpsYkM1MlpYSmliM05sTENCdGMyY3BPMXh1SUNCOVhHNWNiaUFnTHlvcVhHNGdJQ0FxSUVCa1pYTmpjbWx3ZEdsdmJpQk1iMmR6SUdFZ2JXVnpjMkZuWlNCaGRDQjBhR1VnYVc1bWJ5QnNaWFpsYkZ4dUlDQWdLaUJBYzNWdGJXRnllU0JNYjJkeklHRWdiV1Z6YzJGblpTQmhkQ0IwYUdVZ2FXNW1ieUJzWlhabGJDQm1iM0lnWjJWdVpYSmhiQ0JoY0hCc2FXTmhkR2x2YmlCcGJtWnZjbTFoZEdsdmJseHVJQ0FnS2lCQWNHRnlZVzBnZTFOMGNtbHVaMHhwYTJWOUlHMXpaeUF0SUZSb1pTQnRaWE56WVdkbElIUnZJR0psSUd4dloyZGxaRnh1SUNBZ0tpQkFjbVYwZFhKdUlIdDJiMmxrZlZ4dUlDQWdLaTljYmlBZ2FXNW1ieWh0YzJjNklGTjBjbWx1WjB4cGEyVXBPaUIyYjJsa0lIdGNiaUFnSUNCMGFHbHpMbXh2WnloTWIyZE1aWFpsYkM1cGJtWnZMQ0J0YzJjcE8xeHVJQ0I5WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRUJrWlhOamNtbHdkR2x2YmlCTWIyZHpJR0VnYldWemMyRm5aU0JoZENCMGFHVWdaR1ZpZFdjZ2JHVjJaV3hjYmlBZ0lDb2dRSE4xYlcxaGNua2dURzluY3lCaElHMWxjM05oWjJVZ1lYUWdkR2hsSUdSbFluVm5JR3hsZG1Wc0lHWnZjaUJrWlhSaGFXeGxaQ0IwY205MVlteGxjMmh2YjNScGJtY2dhVzVtYjNKdFlYUnBiMjVjYmlBZ0lDb2dRSEJoY21GdElIdFRkSEpwYm1kTWFXdGxmU0J0YzJjZ0xTQlVhR1VnYldWemMyRm5aU0IwYnlCaVpTQnNiMmRuWldSY2JpQWdJQ29nUUhKbGRIVnliaUI3ZG05cFpIMWNiaUFnSUNvdlhHNGdJR1JsWW5WbktHMXpaem9nVTNSeWFXNW5UR2xyWlNrNklIWnZhV1FnZTF4dUlDQWdJSFJvYVhNdWJHOW5LRXh2WjB4bGRtVnNMbVJsWW5WbkxDQnRjMmNwTzF4dUlDQjlYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFQmtaWE5qY21sd2RHbHZiaUJNYjJkeklHRWdiV1Z6YzJGblpTQmhkQ0IwYUdVZ1pYSnliM0lnYkdWMlpXeGNiaUFnSUNvZ1FITjFiVzFoY25rZ1RHOW5jeUJoSUcxbGMzTmhaMlVnWVhRZ2RHaGxJR1Z5Y205eUlHeGxkbVZzSUdadmNpQmxjbkp2Y25NZ1lXNWtJR1Y0WTJWd2RHbHZibk5jYmlBZ0lDb2dRSEJoY21GdElIdFRkSEpwYm1kTWFXdGxJSHdnUlhKeWIzSjlJRzF6WnlBdElGUm9aU0J0WlhOellXZGxJSFJ2SUdKbElHeHZaMmRsWkNCdmNpQmhiaUJGY25KdmNpQnZZbXBsWTNSY2JpQWdJQ29nUUhKbGRIVnliaUI3ZG05cFpIMWNiaUFnSUNvdlhHNGdJR1Z5Y205eUtHMXpaem9nVTNSeWFXNW5UR2xyWlNCOElFVnljbTl5S1RvZ2RtOXBaQ0I3WEc0Z0lDQWdkR2hwY3k1c2IyY29URzluVEdWMlpXd3VaWEp5YjNJc0lHMXpaeWs3WEc0Z0lIMWNibHh1SUNBdktpcGNiaUFnSUNvZ1FHUmxjMk55YVhCMGFXOXVJRlZ3WkdGMFpYTWdkR2hsSUd4dloyZGxjaUJqYjI1bWFXZDFjbUYwYVc5dVhHNGdJQ0FxSUVCemRXMXRZWEo1SUUxbGNtZGxjeUIwYUdVZ2NISnZkbWxrWldRZ1kyOXVabWxuZFhKaGRHbHZiaUIzYVhSb0lIUm9aU0JsZUdsemRHbHVaeUJqYjI1bWFXZDFjbUYwYVc5dVhHNGdJQ0FxSUVCd1lYSmhiU0I3VUdGeWRHbGhiRHhNYjJkbmFXNW5RMjl1Wm1sblBuMGdZMjl1Wm1sbklDMGdWR2hsSUdOdmJtWnBaM1Z5WVhScGIyNGdiM0IwYVc5dWN5QjBieUJoY0hCc2VWeHVJQ0FnS2lCQWNtVjBkWEp1SUh0MmIybGtmVnh1SUNBZ0tpOWNiaUFnYzJWMFEyOXVabWxuS0dOdmJtWnBaem9nVUdGeWRHbGhiRHhNYjJkbmFXNW5RMjl1Wm1sblBpazZJSFp2YVdRZ2UxeHVJQ0FnSUhSb2FYTXVZMjl1WmlBOUlIc2dMaTR1S0hSb2FYTXVZMjl1WmlCOGZDQjdmU2tzSUM0dUxtTnZibVpwWnlCOU8xeHVJQ0I5WEc1OVhHNWNiaThxS2x4dUlDb2dRR1JsYzJOeWFYQjBhVzl1SUVFZ2MzUmhkR2xqSUdOc1lYTnpJR1p2Y2lCdFlXNWhaMmx1WnlCc2IyZG5hVzVuSUc5d1pYSmhkR2x2Ym5OY2JpQXFJRUJ6ZFcxdFlYSjVJRlJvWlNCTWIyZG5hVzVuSUdOc1lYTnpJSEJ5YjNacFpHVnpJR0VnWTJWdWRISmhiR2w2WldRZ2JHOW5aMmx1WnlCdFpXTm9ZVzVwYzIwZ2QybDBhQ0J6ZFhCd2IzSjBJR1p2Y2x4dUlDb2daR2xtWm1WeVpXNTBJR3h2WnlCc1pYWmxiSE1zSUhabGNtSnZjMmwwZVN3Z1lXNWtJSE4wZVd4cGJtY3VJRWwwSUhWelpYTWdZU0J6YVc1bmJHVjBiMjRnY0dGMGRHVnliaUIwYnlCdFlXbHVkR0ZwYmlCaElHZHNiMkpoYkZ4dUlDb2diRzluWjJWeUlHbHVjM1JoYm1ObElHRnVaQ0JoYkd4dmQzTWdZM0psWVhScGJtY2djM0JsWTJsbWFXTWdiRzluWjJWeWN5Qm1iM0lnWkdsbVptVnlaVzUwSUdOc1lYTnpaWE1nWVc1a0lHMWxkR2h2WkhNdVhHNGdLaUJBWTJ4aGMzTWdURzluWjJsdVoxeHVJQ29nUUdWNFlXMXdiR1ZjYmlBcUlDOHZJRk5sZENCbmJHOWlZV3dnWTI5dVptbG5kWEpoZEdsdmJseHVJQ29nVEc5bloybHVaeTV6WlhSRGIyNW1hV2NvZXlCc1pYWmxiRG9nVEc5blRHVjJaV3d1WkdWaWRXY3NJSE4wZVd4bE9pQjBjblZsSUgwcE8xeHVJQ3BjYmlBcUlDOHZJRWRsZENCaElHeHZaMmRsY2lCbWIzSWdZU0J6Y0dWamFXWnBZeUJqYkdGemMxeHVJQ29nWTI5dWMzUWdiRzluWjJWeUlEMGdURzluWjJsdVp5NW1iM0lvSjAxNVEyeGhjM01uS1R0Y2JpQXFYRzRnS2lBdkx5Qk1iMmNnYldWemMyRm5aWE1nWVhRZ1pHbG1abVZ5Wlc1MElHeGxkbVZzYzF4dUlDb2diRzluWjJWeUxtbHVabThvSjBGd2NHeHBZMkYwYVc5dUlITjBZWEowWldRbktUdGNiaUFxSUd4dloyZGxjaTVrWldKMVp5Z25VSEp2WTJWemMybHVaeUJrWVhSaExpNHVKeWs3WEc0Z0tseHVJQ29nTHk4Z1RHOW5JSGRwZEdnZ1kyOXVkR1Y0ZEZ4dUlDb2dZMjl1YzNRZ2JXVjBhRzlrVEc5bloyVnlJRDBnVEc5bloybHVaeTVtYjNJb0owMTVRMnhoYzNNdWJYbE5aWFJvYjJRbktUdGNiaUFxSUcxbGRHaHZaRXh2WjJkbGNpNTJaWEppYjNObEtDZEVaWFJoYVd4bFpDQnZjR1Z5WVhScGIyNGdhVzVtYjNKdFlYUnBiMjRuTENBeEtUdGNiaUFxWEc0Z0tpQXZMeUJNYjJjZ1pYSnliM0p6WEc0Z0tpQjBjbmtnZTF4dUlDb2dJQ0F2THlCemIyMWxJRzl3WlhKaGRHbHZibHh1SUNvZ2ZTQmpZWFJqYUNBb1pYSnliM0lwSUh0Y2JpQXFJQ0FnYkc5bloyVnlMbVZ5Y205eUtHVnljbTl5S1R0Y2JpQXFJSDFjYmlBcUlFQnRaWEp0WVdsa1hHNGdLaUJqYkdGemMwUnBZV2R5WVcxY2JpQXFJQ0FnWTJ4aGMzTWdURzluWjJWeUlIdGNiaUFxSUNBZ0lDQThQR2x1ZEdWeVptRmpaVDQrWEc0Z0tpQWdJQ0FnSzJadmNpaHRaWFJvYjJRc0lHTnZibVpwWnl3Z0xpNHVZWEpuY3lsY2JpQXFJQ0FnSUNBcmMybHNiSGtvYlhObkxDQjJaWEppYjNOcGRIa3BYRzRnS2lBZ0lDQWdLM1psY21KdmMyVW9iWE5uTENCMlpYSmliM05wZEhrcFhHNGdLaUFnSUNBZ0sybHVabThvYlhObktWeHVJQ29nSUNBZ0lDdGtaV0oxWnlodGMyY3BYRzRnS2lBZ0lDQWdLMlZ5Y205eUtHMXpaeWxjYmlBcUlDQWdJQ0FyYzJWMFEyOXVabWxuS0dOdmJtWnBaeWxjYmlBcUlDQWdmVnh1SUNwY2JpQXFJQ0FnWTJ4aGMzTWdURzluWjJsdVp5QjdYRzRnS2lBZ0lDQWdMV2RzYjJKaGJEb2dURzluWjJWeVhHNGdLaUFnSUNBZ0xWOW1ZV04wYjNKNU9pQk1iMmRuWlhKR1lXTjBiM0o1WEc0Z0tpQWdJQ0FnTFY5amIyNW1hV2M2SUV4dloyZHBibWREYjI1bWFXZGNiaUFxSUNBZ0lDQXJjMlYwUm1GamRHOXllU2htWVdOMGIzSjVLVnh1SUNvZ0lDQWdJQ3R6WlhSRGIyNW1hV2NvWTI5dVptbG5LVnh1SUNvZ0lDQWdJQ3RuWlhSRGIyNW1hV2NvS1Z4dUlDb2dJQ0FnSUN0blpYUW9LVnh1SUNvZ0lDQWdJQ3QyWlhKaWIzTmxLRzF6Wnl3Z2RtVnlZbTl6YVhSNUtWeHVJQ29nSUNBZ0lDdHBibVp2S0cxelp5bGNiaUFxSUNBZ0lDQXJaR1ZpZFdjb2JYTm5LVnh1SUNvZ0lDQWdJQ3R6YVd4c2VTaHRjMmNwWEc0Z0tpQWdJQ0FnSzJWeWNtOXlLRzF6WnlsY2JpQXFJQ0FnSUNBclptOXlLRzlpYW1WamRDd2dZMjl1Wm1sbkxDQXVMaTVoY21kektWeHVJQ29nSUNBZ0lDdGlaV05oZFhObEtISmxZWE52Yml3Z2FXUXBYRzRnS2lBZ0lDQWdLM1JvWlcxbEtIUmxlSFFzSUhSNWNHVXNJR3h2WjJkbGNreGxkbVZzTENCMFpXMXdiR0YwWlNsY2JpQXFJQ0FnZlZ4dUlDcGNiaUFxSUNBZ1kyeGhjM01nVFdsdWFVeHZaMmRsY2lCN1hHNGdLaUFnSUNBZ0syTnZibk4wY25WamRHOXlLR052Ym5SbGVIUXNJR052Ym1ZL0tWeHVJQ29nSUNCOVhHNGdLbHh1SUNvZ0lDQk1iMmRuYVc1bklDNHVQaUJNYjJkblpYSWdPaUJqY21WaGRHVnpYRzRnS2lBZ0lFeHZaMmRwYm1jZ0xpNCtJRTFwYm1sTWIyZG5aWElnT2lCamNtVmhkR1Z6SUdKNUlHUmxabUYxYkhSY2JpQXFMMXh1Wlhod2IzSjBJR05zWVhOeklFeHZaMmRwYm1jZ2UxeHVJQ0F2S2lwY2JpQWdJQ29nUUdSbGMyTnlhWEIwYVc5dUlGUm9aU0JuYkc5aVlXd2diRzluWjJWeUlHbHVjM1JoYm1ObFhHNGdJQ0FxSUVCemRXMXRZWEo1SUVFZ2MybHVaMnhsZEc5dUlHbHVjM1JoYm1ObElHOW1JRXh2WjJkbGNpQjFjMlZrSUdadmNpQm5iRzlpWVd3Z2JHOW5aMmx1WjF4dUlDQWdLaTljYmlBZ2NISnBkbUYwWlNCemRHRjBhV01nWjJ4dlltRnNQem9nVEc5bloyVnlPMXh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkFaR1Z6WTNKcGNIUnBiMjRnUm1GamRHOXllU0JtZFc1amRHbHZiaUJtYjNJZ1kzSmxZWFJwYm1jZ2JHOW5aMlZ5SUdsdWMzUmhibU5sYzF4dUlDQWdLaUJBYzNWdGJXRnllU0JCSUdaMWJtTjBhVzl1SUhSb1lYUWdZM0psWVhSbGN5QnVaWGNnVEc5bloyVnlJR2x1YzNSaGJtTmxjeTRnUW5rZ1pHVm1ZWFZzZEN3Z2FYUWdZM0psWVhSbGN5QmhJRTFwYm1sTWIyZG5aWEl1WEc0Z0lDQXFMMXh1SUNCd2NtbDJZWFJsSUhOMFlYUnBZeUJmWm1GamRHOXllVG9nVEc5bloyVnlSbUZqZEc5eWVTQTlJQ2hjYmlBZ0lDQnZZbXBsWTNRNklITjBjbWx1Wnl4Y2JpQWdJQ0JqYjI1bWFXYy9PaUJRWVhKMGFXRnNQRXh2WjJkcGJtZERiMjVtYVdjK1hHNGdJQ2tnUFQ0Z2UxeHVJQ0FnSUhKbGRIVnliaUJ1WlhjZ1RXbHVhVXh2WjJkbGNpaHZZbXBsWTNRc0lHTnZibVpwWnlrN1hHNGdJSDA3WEc0Z0lDOHFLbHh1SUNBZ0tpQkFaR1Z6WTNKcGNIUnBiMjRnUTI5dVptbG5kWEpoZEdsdmJpQm1iM0lnZEdobElHeHZaMmRwYm1jZ2MzbHpkR1Z0WEc0Z0lDQXFJRUJ6ZFcxdFlYSjVJRk4wYjNKbGN5QjBhR1VnWjJ4dlltRnNJR3h2WjJkcGJtY2dZMjl1Wm1sbmRYSmhkR2x2YmlCcGJtTnNkV1JwYm1jZ2RtVnlZbTl6YVhSNUxDQnNiMmNnYkdWMlpXd3NJSE4wZVd4cGJtY3NJR0Z1WkNCbWIzSnRZWFIwYVc1bklITmxkSFJwYm1kelhHNGdJQ0FxTDF4dUlDQndjbWwyWVhSbElITjBZWFJwWXlCZlkyOXVabWxuT2lCTWIyZG5hVzVuUTI5dVptbG5JRDBnUkdWbVlYVnNkRXh2WjJkcGJtZERiMjVtYVdjN1hHNWNiaUFnY0hKcGRtRjBaU0JqYjI1emRISjFZM1J2Y2lncElIdDlYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFQmtaWE5qY21sd2RHbHZiaUJUWlhSeklIUm9aU0JtWVdOMGIzSjVJR1oxYm1OMGFXOXVJR1p2Y2lCamNtVmhkR2x1WnlCc2IyZG5aWElnYVc1emRHRnVZMlZ6WEc0Z0lDQXFJRUJ6ZFcxdFlYSjVJRUZzYkc5M2N5QmpkWE4wYjIxcGVtbHVaeUJvYjNjZ2JHOW5aMlZ5SUdsdWMzUmhibU5sY3lCaGNtVWdZM0psWVhSbFpGeHVJQ0FnS2lCQWNHRnlZVzBnZTB4dloyZGxja1poWTNSdmNubDlJR1poWTNSdmNua2dMU0JVYUdVZ1ptRmpkRzl5ZVNCbWRXNWpkR2x2YmlCMGJ5QjFjMlVnWm05eUlHTnlaV0YwYVc1bklHeHZaMmRsY25OY2JpQWdJQ29nUUhKbGRIVnliaUI3ZG05cFpIMWNiaUFnSUNvdlhHNGdJSE4wWVhScFl5QnpaWFJHWVdOMGIzSjVLR1poWTNSdmNuazZJRXh2WjJkbGNrWmhZM1J2Y25rcElIdGNiaUFnSUNCTWIyZG5hVzVuTGw5bVlXTjBiM0o1SUQwZ1ptRmpkRzl5ZVR0Y2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkFaR1Z6WTNKcGNIUnBiMjRnVlhCa1lYUmxjeUIwYUdVZ1oyeHZZbUZzSUd4dloyZHBibWNnWTI5dVptbG5kWEpoZEdsdmJseHVJQ0FnS2lCQWMzVnRiV0Z5ZVNCQmJHeHZkM01nZFhCa1lYUnBibWNnZEdobElHZHNiMkpoYkNCc2IyZG5hVzVuSUdOdmJtWnBaM1Z5WVhScGIyNGdkMmwwYUNCdVpYY2djMlYwZEdsdVozTmNiaUFnSUNvZ1FIQmhjbUZ0SUh0UVlYSjBhV0ZzUEV4dloyZHBibWREYjI1bWFXYytmU0JqYjI1bWFXY2dMU0JVYUdVZ1kyOXVabWxuZFhKaGRHbHZiaUJ2Y0hScGIyNXpJSFJ2SUdGd2NHeDVYRzRnSUNBcUlFQnlaWFIxY200Z2UzWnZhV1I5WEc0Z0lDQXFMMXh1SUNCemRHRjBhV01nYzJWMFEyOXVabWxuS0dOdmJtWnBaem9nVUdGeWRHbGhiRHhNYjJkbmFXNW5RMjl1Wm1sblBpa2dlMXh1SUNBZ0lFOWlhbVZqZEM1aGMzTnBaMjRvZEdocGN5NWZZMjl1Wm1sbkxDQmpiMjVtYVdjcE8xeHVJQ0I5WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRUJrWlhOamNtbHdkR2x2YmlCSFpYUnpJR0VnWTI5d2VTQnZaaUIwYUdVZ1kzVnljbVZ1ZENCbmJHOWlZV3dnYkc5bloybHVaeUJqYjI1bWFXZDFjbUYwYVc5dVhHNGdJQ0FxSUVCemRXMXRZWEo1SUZKbGRIVnlibk1nWVNCamIzQjVJRzltSUhSb1pTQmpkWEp5Wlc1MElHZHNiMkpoYkNCc2IyZG5hVzVuSUdOdmJtWnBaM1Z5WVhScGIyNWNiaUFnSUNvZ1FISmxkSFZ5YmlCN1RHOW5aMmx1WjBOdmJtWnBaMzBnUVNCamIzQjVJRzltSUhSb1pTQmpkWEp5Wlc1MElHTnZibVpwWjNWeVlYUnBiMjVjYmlBZ0lDb3ZYRzRnSUhOMFlYUnBZeUJuWlhSRGIyNW1hV2NvS1RvZ1RHOW5aMmx1WjBOdmJtWnBaeUI3WEc0Z0lDQWdjbVYwZFhKdUlFOWlhbVZqZEM1aGMzTnBaMjRvZTMwc0lIUm9hWE11WDJOdmJtWnBaeWs3WEc0Z0lIMWNibHh1SUNBdktpcGNiaUFnSUNvZ1FHUmxjMk55YVhCMGFXOXVJRkpsZEhKcFpYWmxjeUJ2Y2lCamNtVmhkR1Z6SUhSb1pTQm5iRzlpWVd3Z2JHOW5aMlZ5SUdsdWMzUmhibU5sTGx4dUlDQWdLaUJBYzNWdGJXRnllU0JTWlhSMWNtNXpJSFJvWlNCbGVHbHpkR2x1WnlCbmJHOWlZV3dnYkc5bloyVnlJRzl5SUdOeVpXRjBaWE1nWVNCdVpYY2diMjVsSUdsbUlHbDBJR1J2WlhOdUozUWdaWGhwYzNRdVhHNGdJQ0FxWEc0Z0lDQXFJRUJ5WlhSMWNtNGdWR2hsSUdkc2IySmhiQ0JXWlhKaWIzTnBkSGxNYjJkblpYSWdhVzV6ZEdGdVkyVXVYRzRnSUNBcUwxeHVJQ0J6ZEdGMGFXTWdaMlYwS0NrNklFeHZaMmRsY2lCN1hHNGdJQ0FnZEdocGN5NW5iRzlpWVd3Z1BTQjBhR2x6TG1kc2IySmhiQ0EvSUhSb2FYTXVaMnh2WW1Gc0lEb2dkR2hwY3k1ZlptRmpkRzl5ZVNoY0lreHZaMmRwYm1kY0lpazdYRzRnSUNBZ2NtVjBkWEp1SUhSb2FYTXVaMnh2WW1Gc08xeHVJQ0I5WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRUJrWlhOamNtbHdkR2x2YmlCTWIyZHpJR0VnZG1WeVltOXpaU0J0WlhOellXZGxMbHh1SUNBZ0tpQkFjM1Z0YldGeWVTQkVaV3hsWjJGMFpYTWdkR2hsSUhabGNtSnZjMlVnYkc5bloybHVaeUIwYnlCMGFHVWdaMnh2WW1Gc0lHeHZaMmRsY2lCcGJuTjBZVzVqWlM1Y2JpQWdJQ3BjYmlBZ0lDb2dRSEJoY21GdElHMXpaeUF0SUZSb1pTQnRaWE56WVdkbElIUnZJR0psSUd4dloyZGxaQzVjYmlBZ0lDb2dRSEJoY21GdElIWmxjbUp2YzJsMGVTQXRJRlJvWlNCMlpYSmliM05wZEhrZ2JHVjJaV3dnYjJZZ2RHaGxJRzFsYzNOaFoyVWdLR1JsWm1GMWJIUTZJREFwTGx4dUlDQWdLaTljYmlBZ2MzUmhkR2xqSUhabGNtSnZjMlVvYlhObk9pQlRkSEpwYm1kTWFXdGxMQ0IyWlhKaWIzTnBkSGs2SUc1MWJXSmxjaUE5SURBcE9pQjJiMmxrSUh0Y2JpQWdJQ0J5WlhSMWNtNGdkR2hwY3k1blpYUW9LUzUyWlhKaWIzTmxLRzF6Wnl3Z2RtVnlZbTl6YVhSNUtUdGNiaUFnZlZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJBWkdWelkzSnBjSFJwYjI0Z1RHOW5jeUJoYmlCcGJtWnZJRzFsYzNOaFoyVXVYRzRnSUNBcUlFQnpkVzF0WVhKNUlFUmxiR1ZuWVhSbGN5QjBhR1VnYVc1bWJ5QnNiMmRuYVc1bklIUnZJSFJvWlNCbmJHOWlZV3dnYkc5bloyVnlJR2x1YzNSaGJtTmxMbHh1SUNBZ0tseHVJQ0FnS2lCQWNHRnlZVzBnYlhObklDMGdWR2hsSUcxbGMzTmhaMlVnZEc4Z1ltVWdiRzluWjJWa0xseHVJQ0FnS2k5Y2JpQWdjM1JoZEdsaklHbHVabThvYlhObk9pQlRkSEpwYm1kTWFXdGxLVG9nZG05cFpDQjdYRzRnSUNBZ2NtVjBkWEp1SUhSb2FYTXVaMlYwS0NrdWFXNW1ieWh0YzJjcE8xeHVJQ0I5WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRUJrWlhOamNtbHdkR2x2YmlCTWIyZHpJR0VnWkdWaWRXY2diV1Z6YzJGblpTNWNiaUFnSUNvZ1FITjFiVzFoY25rZ1JHVnNaV2RoZEdWeklIUm9aU0JrWldKMVp5QnNiMmRuYVc1bklIUnZJSFJvWlNCbmJHOWlZV3dnYkc5bloyVnlJR2x1YzNSaGJtTmxMbHh1SUNBZ0tseHVJQ0FnS2lCQWNHRnlZVzBnYlhObklDMGdWR2hsSUcxbGMzTmhaMlVnZEc4Z1ltVWdiRzluWjJWa0xseHVJQ0FnS2k5Y2JpQWdjM1JoZEdsaklHUmxZblZuS0cxelp6b2dVM1J5YVc1blRHbHJaU2s2SUhadmFXUWdlMXh1SUNBZ0lISmxkSFZ5YmlCMGFHbHpMbWRsZENncExtUmxZblZuS0cxelp5azdYRzRnSUgxY2JseHVJQ0F2S2lwY2JpQWdJQ29nUUdSbGMyTnlhWEIwYVc5dUlFeHZaM01nWVNCemFXeHNlU0J0WlhOellXZGxMbHh1SUNBZ0tpQkFjM1Z0YldGeWVTQkVaV3hsWjJGMFpYTWdkR2hsSUdSbFluVm5JR3h2WjJkcGJtY2dkRzhnZEdobElHZHNiMkpoYkNCc2IyZG5aWElnYVc1emRHRnVZMlV1WEc0Z0lDQXFYRzRnSUNBcUlFQndZWEpoYlNCdGMyY2dMU0JVYUdVZ2JXVnpjMkZuWlNCMGJ5QmlaU0JzYjJkblpXUXVYRzRnSUNBcUwxeHVJQ0J6ZEdGMGFXTWdjMmxzYkhrb2JYTm5PaUJUZEhKcGJtZE1hV3RsS1RvZ2RtOXBaQ0I3WEc0Z0lDQWdjbVYwZFhKdUlIUm9hWE11WjJWMEtDa3VjMmxzYkhrb2JYTm5LVHRjYmlBZ2ZWeHVYRzRnSUM4cUtseHVJQ0FnS2lCQVpHVnpZM0pwY0hScGIyNGdURzluY3lCaGJpQmxjbkp2Y2lCdFpYTnpZV2RsTGx4dUlDQWdLaUJBYzNWdGJXRnllU0JFWld4bFoyRjBaWE1nZEdobElHVnljbTl5SUd4dloyZHBibWNnZEc4Z2RHaGxJR2RzYjJKaGJDQnNiMmRuWlhJZ2FXNXpkR0Z1WTJVdVhHNGdJQ0FxWEc0Z0lDQXFJRUJ3WVhKaGJTQnRjMmNnTFNCVWFHVWdiV1Z6YzJGblpTQjBieUJpWlNCc2IyZG5aV1F1WEc0Z0lDQXFMMXh1SUNCemRHRjBhV01nWlhKeWIzSW9iWE5uT2lCVGRISnBibWRNYVd0bEtUb2dkbTlwWkNCN1hHNGdJQ0FnY21WMGRYSnVJSFJvYVhNdVoyVjBLQ2t1WlhKeWIzSW9iWE5uS1R0Y2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkFaR1Z6WTNKcGNIUnBiMjRnUTNKbFlYUmxjeUJoSUd4dloyZGxjaUJtYjNJZ1lTQnpjR1ZqYVdacFl5QnZZbXBsWTNRZ2IzSWdZMjl1ZEdWNGRGeHVJQ0FnS2lCQWMzVnRiV0Z5ZVNCRGNtVmhkR1Z6SUdFZ2JtVjNJR3h2WjJkbGNpQnBibk4wWVc1alpTQm1iM0lnZEdobElHZHBkbVZ1SUc5aWFtVmpkQ0J2Y2lCamIyNTBaWGgwSUhWemFXNW5JSFJvWlNCbVlXTjBiM0o1SUdaMWJtTjBhVzl1WEc0Z0lDQXFJRUJ3WVhKaGJTQjdURzluWjJsdVowTnZiblJsZUhSOUlHOWlhbVZqZENBdElGUm9aU0J2WW1wbFkzUXNJR05zWVhOekxDQnZjaUJqYjI1MFpYaDBJSFJ2SUdOeVpXRjBaU0JoSUd4dloyZGxjaUJtYjNKY2JpQWdJQ29nUUhCaGNtRnRJSHRRWVhKMGFXRnNQRXh2WjJkcGJtZERiMjVtYVdjK2ZTQmJZMjl1Wm1sblhTQXRJRTl3ZEdsdmJtRnNJR052Ym1acFozVnlZWFJwYjI0Z2RHOGdiM1psY25KcFpHVWdaMnh2WW1Gc0lITmxkSFJwYm1kelhHNGdJQ0FxSUVCd1lYSmhiU0I3TGk0dVlXNTVmU0JoY21keklDMGdRV1JrYVhScGIyNWhiQ0JoY21kMWJXVnVkSE1nZEc4Z2NHRnpjeUIwYnlCMGFHVWdiRzluWjJWeUlHWmhZM1J2Y25sY2JpQWdJQ29nUUhKbGRIVnliaUI3VEc5bloyVnlmU0JCSUc1bGR5QnNiMmRuWlhJZ2FXNXpkR0Z1WTJVZ1ptOXlJSFJvWlNCemNHVmphV1pwWldRZ2IySnFaV04wSUc5eUlHTnZiblJsZUhSY2JpQWdJQ292WEc0Z0lITjBZWFJwWXlCbWIzSW9YRzRnSUNBZ2IySnFaV04wT2lCTWIyZG5hVzVuUTI5dWRHVjRkQ3hjYmlBZ0lDQmpiMjVtYVdjL09pQlFZWEowYVdGc1BFeHZaMmRwYm1kRGIyNW1hV2MrTEZ4dUlDQWdJQzR1TG1GeVozTTZJR0Z1ZVZ0ZFhHNGdJQ2s2SUV4dloyZGxjaUI3WEc0Z0lDQWdiMkpxWldOMElEMWNiaUFnSUNBZ0lIUjVjR1Z2WmlCdlltcGxZM1FnUFQwOUlGd2ljM1J5YVc1blhDSmNiaUFnSUNBZ0lDQWdQeUJ2WW1wbFkzUmNiaUFnSUNBZ0lDQWdPaUJ2WW1wbFkzUXVZMjl1YzNSeWRXTjBiM0pjYmlBZ0lDQWdJQ0FnSUNBL0lHOWlhbVZqZEM1amIyNXpkSEoxWTNSdmNpNXVZVzFsWEc0Z0lDQWdJQ0FnSUNBZ09pQnZZbXBsWTNRdWJtRnRaVHRjYmlBZ0lDQnlaWFIxY200Z2RHaHBjeTVmWm1GamRHOXllU2h2WW1wbFkzUXNJR052Ym1acFp5d2dMaTR1WVhKbmN5azdYRzRnSUgxY2JseHVJQ0F2S2lwY2JpQWdJQ29nUUdSbGMyTnlhWEIwYVc5dUlFTnlaV0YwWlhNZ1lTQnNiMmRuWlhJZ1ptOXlJR0VnYzNCbFkybG1hV01nY21WaGMyOXVJRzl5SUdOdmJuUmxlSFF1WEc0Z0lDQXFYRzRnSUNBcUlFQnpkVzF0WVhKNUlGUm9hWE1nYzNSaGRHbGpJRzFsZEdodlpDQmpjbVZoZEdWeklHRWdibVYzSUd4dloyZGxjaUJwYm5OMFlXNWpaU0IxYzJsdVp5QjBhR1VnWm1GamRHOXllU0JtZFc1amRHbHZiaXhjYmlBZ0lDb2dZbUZ6WldRZ2IyNGdZU0JuYVhabGJpQnlaV0Z6YjI0Z2IzSWdZMjl1ZEdWNGRDNWNiaUFnSUNwY2JpQWdJQ29nUUhCaGNtRnRJSEpsWVhOdmJpQXRJRUVnYzNSeWFXNW5JR1JsYzJOeWFXSnBibWNnZEdobElISmxZWE52YmlCdmNpQmpiMjUwWlhoMElHWnZjaUJqY21WaGRHbHVaeUIwYUdseklHeHZaMmRsY2k1Y2JpQWdJQ29nUUhCaGNtRnRJR2xrWEc0Z0lDQXFJRUJ5WlhSMWNtNXpJRUVnYm1WM0lGWmxjbUp2YzJsMGVVeHZaMmRsY2lCdmNpQkRiR0Z6YzB4dloyZGxjaUJwYm5OMFlXNWpaUzVjYmlBZ0lDb3ZYRzRnSUhOMFlYUnBZeUJpWldOaGRYTmxLSEpsWVhOdmJqb2djM1J5YVc1bkxDQnBaRDg2SUhOMGNtbHVaeWs2SUV4dloyZGxjaUI3WEc0Z0lDQWdjbVYwZFhKdUlIUm9hWE11WDJaaFkzUnZjbmtvY21WaGMyOXVMQ0IwYUdsekxsOWpiMjVtYVdjc0lHbGtLVHRjYmlBZ2ZWeHVYRzRnSUM4cUtseHVJQ0FnS2lCQVpHVnpZM0pwY0hScGIyNGdRWEJ3YkdsbGN5QjBhR1Z0WlNCemRIbHNhVzVuSUhSdklIUmxlSFJjYmlBZ0lDb2dRSE4xYlcxaGNua2dRWEJ3YkdsbGN5QnpkSGxzYVc1bklDaGpiMnh2Y25Nc0lHWnZjbTFoZEhScGJtY3BJSFJ2SUhSbGVIUWdZbUZ6WldRZ2IyNGdkR2hsSUhSb1pXMWxJR052Ym1acFozVnlZWFJwYjI1Y2JpQWdJQ29nUUhCaGNtRnRJSHR6ZEhKcGJtZDlJSFJsZUhRZ0xTQlVhR1VnZEdWNGRDQjBieUJ6ZEhsc1pWeHVJQ0FnS2lCQWNHRnlZVzBnZTNOMGNtbHVaMzBnZEhsd1pTQXRJRlJvWlNCMGVYQmxJRzltSUdWc1pXMWxiblFnZEc4Z2MzUjViR1VnS0dVdVp5NHNJRndpWTJ4aGMzTmNJaXdnWENKdFpYTnpZV2RsWENJc0lGd2liRzluVEdWMlpXeGNJaWxjYmlBZ0lDb2dRSEJoY21GdElIdE1iMmRNWlhabGJIMGdiRzluWjJWeVRHVjJaV3dnTFNCVWFHVWdiRzluSUd4bGRtVnNJSFJ2SUhWelpTQm1iM0lnYzNSNWJHbHVaMXh1SUNBZ0tpQkFjR0Z5WVcwZ2UxUm9aVzFsZlNCYmRHVnRjR3hoZEdVOVJHVm1ZWFZzZEZSb1pXMWxYU0F0SUZSb1pTQjBhR1Z0WlNCMGJ5QjFjMlVnWm05eUlITjBlV3hwYm1kY2JpQWdJQ29nUUhKbGRIVnliaUI3YzNSeWFXNW5mU0JVYUdVZ2MzUjViR1ZrSUhSbGVIUmNiaUFnSUNvZ1FHMWxjbTFoYVdSY2JpQWdJQ29nYzJWeGRXVnVZMlZFYVdGbmNtRnRYRzRnSUNBcUlDQWdjR0Z5ZEdsamFYQmhiblFnUTJGc2JHVnlYRzRnSUNBcUlDQWdjR0Z5ZEdsamFYQmhiblFnVkdobGJXVWdZWE1nVEc5bloybHVaeTUwYUdWdFpWeHVJQ0FnS2lBZ0lIQmhjblJwWTJsd1lXNTBJRUZ3Y0d4NUlHRnpJR0Z3Y0d4NUlHWjFibU4wYVc5dVhHNGdJQ0FxSUNBZ2NHRnlkR2xqYVhCaGJuUWdVM1I1YkdVZ1lYTWdjM1I1YkdWa0xYTjBjbWx1WnkxaWRXbHNaR1Z5WEc0Z0lDQXFYRzRnSUNBcUlDQWdRMkZzYkdWeUxUNCtWR2hsYldVNklIUm9aVzFsS0hSbGVIUXNJSFI1Y0dVc0lHeHZaMmRsY2t4bGRtVnNLVnh1SUNBZ0tpQWdJRlJvWlcxbExUNCtWR2hsYldVNklFTm9aV05ySUdsbUlITjBlV3hwYm1jZ2FYTWdaVzVoWW14bFpGeHVJQ0FnS2lBZ0lHRnNkQ0J6ZEhsc2FXNW5JR1JwYzJGaWJHVmtYRzRnSUNBcUlDQWdJQ0JVYUdWdFpTMHRQajVEWVd4c1pYSTZJSEpsZEhWeWJpQnZjbWxuYVc1aGJDQjBaWGgwWEc0Z0lDQXFJQ0FnWld4elpTQnpkSGxzYVc1bklHVnVZV0pzWldSY2JpQWdJQ29nSUNBZ0lGUm9aVzFsTFQ0K1ZHaGxiV1U2SUVkbGRDQjBhR1Z0WlNCbWIzSWdkSGx3WlZ4dUlDQWdLaUFnSUNBZ1lXeDBJSFJvWlcxbElHNXZkQ0JtYjNWdVpGeHVJQ0FnS2lBZ0lDQWdJQ0JVYUdWdFpTMHRQajVEWVd4c1pYSTZJSEpsZEhWeWJpQnZjbWxuYVc1aGJDQjBaWGgwWEc0Z0lDQXFJQ0FnSUNCbGJITmxJSFJvWlcxbElHWnZkVzVrWEc0Z0lDQXFJQ0FnSUNBZ0lGUm9aVzFsTFQ0K1ZHaGxiV1U2SUVSbGRHVnliV2x1WlNCaFkzUjFZV3dnZEdobGJXVWdZbUZ6WldRZ2IyNGdiRzluSUd4bGRtVnNYRzRnSUNBcUlDQWdJQ0FnSUZSb1pXMWxMVDQrUVhCd2JIazZJRUZ3Y0d4NUlHVmhZMmdnYzNSNWJHVWdjSEp2Y0dWeWRIbGNiaUFnSUNvZ0lDQWdJQ0FnUVhCd2JIa3RQajVUZEhsc1pUb2dRWEJ3YkhrZ1kyOXNiM0p6SUdGdVpDQm1iM0p0WVhSMGFXNW5YRzRnSUNBcUlDQWdJQ0FnSUZOMGVXeGxMUzArUGtGd2NHeDVPaUJTWlhSMWNtNGdjM1I1YkdWa0lIUmxlSFJjYmlBZ0lDb2dJQ0FnSUNBZ1FYQndiSGt0TFQ0K1ZHaGxiV1U2SUZKbGRIVnliaUJ6ZEhsc1pXUWdkR1Y0ZEZ4dUlDQWdLaUFnSUNBZ0lDQlVhR1Z0WlMwdFBqNURZV3hzWlhJNklGSmxkSFZ5YmlCbWFXNWhiQ0J6ZEhsc1pXUWdkR1Y0ZEZ4dUlDQWdLaUFnSUNBZ1pXNWtYRzRnSUNBcUlDQWdaVzVrWEc0Z0lDQXFMMXh1SUNCemRHRjBhV01nZEdobGJXVW9YRzRnSUNBZ2RHVjRkRG9nYzNSeWFXNW5MRnh1SUNBZ0lIUjVjR1U2SUd0bGVXOW1JRlJvWlcxbElId2dhMlY1YjJZZ1RHOW5UR1YyWld3c1hHNGdJQ0FnYkc5bloyVnlUR1YyWld3NklFeHZaMHhsZG1Wc0xGeHVJQ0FnSUhSbGJYQnNZWFJsT2lCVWFHVnRaU0E5SUVSbFptRjFiSFJVYUdWdFpWeHVJQ0FwSUh0Y2JpQWdJQ0JwWmlBb0lYUm9hWE11WDJOdmJtWnBaeTV6ZEhsc1pTa2djbVYwZFhKdUlIUmxlSFE3WEc0Z0lDQWdZMjl1YzNRZ2JHOW5aMlZ5SUQwZ1RHOW5aMmx1Wnk1blpYUW9LUzVtYjNJb2RHaHBjeTUwYUdWdFpTazdYRzVjYmlBZ0lDQm1kVzVqZEdsdmJpQmhjSEJzZVNoY2JpQWdJQ0FnSUhSNGREb2djM1J5YVc1bkxGeHVJQ0FnSUNBZ2IzQjBhVzl1T2lCclpYbHZaaUJVYUdWdFpVOXdkR2x2Yml4Y2JpQWdJQ0FnSUhaaGJIVmxPaUJ1ZFcxaVpYSWdmQ0JiYm5WdFltVnlYU0I4SUZ0dWRXMWlaWElzSUc1MWJXSmxjaXdnYm5WdFltVnlYU0I4SUc1MWJXSmxjbHRkSUh3Z2MzUnlhVzVuVzExY2JpQWdJQ0FwT2lCemRISnBibWNnZTF4dUlDQWdJQ0FnZEhKNUlIdGNiaUFnSUNBZ0lDQWdZMjl1YzNRZ2REb2djM1J5YVc1bklId2dVM1I1YkdWa1UzUnlhVzVuSUQwZ2RIaDBPMXh1SUNBZ0lDQWdJQ0JzWlhRZ1l5QTlJSE4wZVd4bEtIUXBPMXh1WEc0Z0lDQWdJQ0FnSUdaMWJtTjBhVzl1SUdGd2NHeDVRMjlzYjNJb1hHNGdJQ0FnSUNBZ0lDQWdkbUZzT2lCdWRXMWlaWElnZkNCYmJuVnRZbVZ5WFNCOElGdHVkVzFpWlhJc0lHNTFiV0psY2l3Z2JuVnRZbVZ5WFN4Y2JpQWdJQ0FnSUNBZ0lDQnBjMEpuSUQwZ1ptRnNjMlZjYmlBZ0lDQWdJQ0FnS1RvZ1UzUjViR1ZrVTNSeWFXNW5JSHRjYmlBZ0lDQWdJQ0FnSUNCc1pYUWdaanBjYmlBZ0lDQWdJQ0FnSUNBZ0lId2dkSGx3Wlc5bUlHTXVZbUZqYTJkeWIzVnVaRnh1SUNBZ0lDQWdJQ0FnSUNBZ2ZDQjBlWEJsYjJZZ1l5NW1iM0psWjNKdmRXNWtYRzRnSUNBZ0lDQWdJQ0FnSUNCOElIUjVjR1Z2WmlCakxuSm5ZbHh1SUNBZ0lDQWdJQ0FnSUNBZ2ZDQjBlWEJsYjJZZ1l5NWpiMnh2Y2pJMU5pQTlJR2x6UW1jZ1B5QmpMbUpoWTJ0bmNtOTFibVFnT2lCakxtWnZjbVZuY205MWJtUTdYRzRnSUNBZ0lDQWdJQ0FnYVdZZ0tDRkJjbkpoZVM1cGMwRnljbUY1S0haaGJDa3BJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlBb1ppQmhjeUIwZVhCbGIyWWdZeTVpWVdOclozSnZkVzVrSUh3Z2RIbHdaVzltSUdNdVptOXlaV2R5YjNWdVpDa3VZMkZzYkNoY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnWXl4Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnZG1Gc2RXVWdZWE1nYm5WdFltVnlYRzRnSUNBZ0lDQWdJQ0FnSUNBcE8xeHVJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNCemQybDBZMmdnS0haaGJDNXNaVzVuZEdncElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUdOaGMyVWdNVHBjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdaaUE5SUdselFtY2dQeUJqTG1KblEyOXNiM0l5TlRZZ09pQmpMbU52Ykc5eU1qVTJPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z0tHWWdZWE1nZEhsd1pXOW1JR011WW1kRGIyeHZjakkxTmlCOElIUjVjR1Z2WmlCakxtTnZiRzl5TWpVMktTaDJZV3hiTUYwcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnWTJGelpTQXpPbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQm1JRDBnYVhOQ1p5QS9JR011WW1kU1oySWdPaUJqTG5KbllqdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUdNdWNtZGlLSFpoYkZzd1hTd2dkbUZzV3pGZExDQjJZV3hiTWwwcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnWkdWbVlYVnNkRHBjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdiRzluWjJWeUxtVnljbTl5S0dCT2IzUWdZU0IyWVd4cFpDQmpiMnh2Y2lCdmNIUnBiMjQ2SUNSN2IzQjBhVzl1ZldBcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnYzNSNWJHVW9kQ0JoY3lCemRISnBibWNwTzF4dUlDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0FnSUdaMWJtTjBhVzl1SUdGd2NHeDVVM1I1YkdVb2Rqb2diblZ0WW1WeUlId2djM1J5YVc1bktUb2dkbTlwWkNCN1hHNGdJQ0FnSUNBZ0lDQWdhV1lnS0hSNWNHVnZaaUIySUQwOVBTQmNJbTUxYldKbGNsd2lLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmpJRDBnWXk1emRIbHNaU2gyS1R0Y2JpQWdJQ0FnSUNBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnWXlBOUlHTmJkaUJoY3lCclpYbHZaaUJEYjJ4dmNtbDZaVTl3ZEdsdmJuTmRJR0Z6SUZOMGVXeGxaRk4wY21sdVp6dGNiaUFnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ0lDQnpkMmwwWTJnZ0tHOXdkR2x2YmlrZ2UxeHVJQ0FnSUNBZ0lDQWdJR05oYzJVZ1hDSmlaMXdpT2x4dUlDQWdJQ0FnSUNBZ0lHTmhjMlVnWENKbVoxd2lPbHh1SUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUdGd2NHeDVRMjlzYjNJb2RtRnNkV1VnWVhNZ2JuVnRZbVZ5S1M1MFpYaDBPMXh1SUNBZ0lDQWdJQ0FnSUdOaGMyVWdYQ0p6ZEhsc1pWd2lPbHh1SUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLRUZ5Y21GNUxtbHpRWEp5WVhrb2RtRnNkV1VwS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUhaaGJIVmxMbVp2Y2tWaFkyZ29ZWEJ3YkhsVGRIbHNaU2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCaGNIQnNlVk4wZVd4bEtIWmhiSFZsSUdGeklHNTFiV0psY2lCOElITjBjbWx1WnlrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z1l5NTBaWGgwTzF4dUlDQWdJQ0FnSUNBZ0lHUmxabUYxYkhRNlhHNGdJQ0FnSUNBZ0lDQWdJQ0JzYjJkblpYSXVaWEp5YjNJb1lFNXZkQ0JoSUhaaGJHbGtJSFJvWlcxbElHOXdkR2x2YmpvZ0pIdHZjSFJwYjI1OVlDazdYRzRnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnZER0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQXZMeUJsYzJ4cGJuUXRaR2x6WVdKc1pTMXVaWGgwTFd4cGJtVWdRSFI1Y0dWelkzSnBjSFF0WlhOc2FXNTBMMjV2TFhWdWRYTmxaQzEyWVhKelhHNGdJQ0FnSUNCOUlHTmhkR05vSUNobE9pQjFibXR1YjNkdUtTQjdYRzRnSUNBZ0lDQWdJR3h2WjJkbGNpNWxjbkp2Y2loZ1JYSnliM0lnWVhCd2JIbHBibWNnYzNSNWJHVTZJQ1I3YjNCMGFXOXVmU0IzYVhSb0lIWmhiSFZsSUNSN2RtRnNkV1Y5WUNrN1hHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCMGVIUTdYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZWeHVYRzRnSUNBZ1kyOXVjM1FnYVc1a2FYWnBaSFZoYkZSb1pXMWxJRDBnZEdWdGNHeGhkR1ZiZEhsd1pTQmhjeUJyWlhsdlppQlVhR1Z0WlYwN1hHNGdJQ0FnYVdZZ0tDRnBibVJwZG1sa2RXRnNWR2hsYldVZ2ZId2dJVTlpYW1WamRDNXJaWGx6S0dsdVpHbDJhV1IxWVd4VWFHVnRaU2t1YkdWdVozUm9LU0I3WEc0Z0lDQWdJQ0J5WlhSMWNtNGdkR1Y0ZER0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0JzWlhRZ1lXTjBkV0ZzVkdobGJXVTZJRlJvWlcxbFQzQjBhVzl1SUQwZ2FXNWthWFpwWkhWaGJGUm9aVzFsSUdGeklGUm9aVzFsVDNCMGFXOXVPMXh1WEc0Z0lDQWdZMjl1YzNRZ2JHOW5UR1YyWld4eklEMGdUMkpxWldOMExtRnpjMmxuYmloN2ZTd2dURzluVEdWMlpXd3BPMXh1SUNBZ0lHbG1JQ2hQWW1wbFkzUXVhMlY1Y3locGJtUnBkbWxrZFdGc1ZHaGxiV1VwV3pCZElHbHVJR3h2WjB4bGRtVnNjeWxjYmlBZ0lDQWdJR0ZqZEhWaGJGUm9aVzFsSUQxY2JpQWdJQ0FnSUNBZ0tHbHVaR2wyYVdSMVlXeFVhR1Z0WlNCaGN5QlVhR1Z0WlU5d2RHbHZia0o1VEc5blRHVjJaV3dwVzJ4dloyZGxja3hsZG1Wc1hTQjhmQ0I3ZlR0Y2JseHVJQ0FnSUhKbGRIVnliaUJQWW1wbFkzUXVhMlY1Y3loaFkzUjFZV3hVYUdWdFpTa3VjbVZrZFdObEtDaGhZMk02SUhOMGNtbHVaeXdnYTJWNU9pQnpkSEpwYm1jcElEMCtJSHRjYmlBZ0lDQWdJR052Ym5OMElIWmhiQ0E5SUNoaFkzUjFZV3hVYUdWdFpTQmhjeUJVYUdWdFpVOXdkR2x2YmlsYmEyVjVJR0Z6SUd0bGVXOW1JRlJvWlcxbFQzQjBhVzl1WFR0Y2JpQWdJQ0FnSUdsbUlDaDJZV3dwWEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUJoY0hCc2VTaGNiaUFnSUNBZ0lDQWdJQ0JoWTJNc1hHNGdJQ0FnSUNBZ0lDQWdhMlY1SUdGeklHdGxlVzltSUZSb1pXMWxUM0IwYVc5dUxGeHVJQ0FnSUNBZ0lDQWdJSFpoYkNCaGMxeHVJQ0FnSUNBZ0lDQWdJQ0FnZkNCdWRXMWlaWEpjYmlBZ0lDQWdJQ0FnSUNBZ0lId2dXMjUxYldKbGNsMWNiaUFnSUNBZ0lDQWdJQ0FnSUh3Z1cyNTFiV0psY2l3Z2JuVnRZbVZ5TENCdWRXMWlaWEpkWEc0Z0lDQWdJQ0FnSUNBZ0lDQjhJRzUxYldKbGNsdGRYRzRnSUNBZ0lDQWdJQ0FnSUNCOElITjBjbWx1WjF0ZFhHNGdJQ0FnSUNBZ0lDazdYRzRnSUNBZ0lDQnlaWFIxY200Z1lXTmpPMXh1SUNBZ0lIMHNJSFJsZUhRcE8xeHVJQ0I5WEc1OVhHNGlYWDA9IiwiaW1wb3J0IHtcbiAgQW5zd2VycyxcbiAgQ2hvaWNlLFxuICBGYWxzeSxcbiAgSW5pdGlhbFJldHVyblZhbHVlLFxuICBQcmV2Q2FsbGVyLFxuICBQcm9tcHRPYmplY3QsXG4gIFByb21wdFR5cGUsXG4gIFZhbHVlT3JGdW5jLFxufSBmcm9tIFwicHJvbXB0c1wiO1xuaW1wb3J0IHByb21wdHMgZnJvbSBcInByb21wdHNcIjtcbmltcG9ydCB7IHBhcnNlQXJncywgUGFyc2VBcmdzQ29uZmlnIH0gZnJvbSBcInV0aWxcIjtcbmltcG9ydCB7IFdyaXRhYmxlLCBSZWFkYWJsZSB9IGZyb20gXCJzdHJlYW1cIjtcbmltcG9ydCB7IFBhcnNlQXJnc09wdGlvbnNDb25maWcsIFBhcnNlQXJnc1Jlc3VsdCB9IGZyb20gXCIuL3R5cGVzXCI7XG5pbXBvcnQgeyBMb2dnaW5nIH0gZnJvbSBcIkBkZWNhZi10cy9sb2dnaW5nXCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFJlcHJlc2VudHMgYSB1c2VyIGlucHV0IHByb21wdCB3aXRoIHZhcmlvdXMgY29uZmlndXJhdGlvbiBvcHRpb25zLlxuICogQHN1bW1hcnkgVGhpcyBjbGFzcyBwcm92aWRlcyBhIGZsZXhpYmxlIGludGVyZmFjZSBmb3IgY3JlYXRpbmcgYW5kIG1hbmFnaW5nIHVzZXIgaW5wdXQgcHJvbXB0cy5cbiAqIEl0IGltcGxlbWVudHMgdGhlIFByb21wdE9iamVjdCBpbnRlcmZhY2UgZnJvbSB0aGUgJ3Byb21wdHMnIGxpYnJhcnkgYW5kIG9mZmVycyBtZXRob2RzIHRvIHNldFxuICogdmFyaW91cyBwcm9wZXJ0aWVzIG9mIHRoZSBwcm9tcHQuIFRoZSBjbGFzcyBhbHNvIGluY2x1ZGVzIHN0YXRpYyBtZXRob2RzIGZvciBjb21tb24gaW5wdXQgc2NlbmFyaW9zXG4gKiBhbmQgYXJndW1lbnQgcGFyc2luZy5cbiAqXG4gKiBAdGVtcGxhdGUgUiAtIFRoZSB0eXBlIG9mIHRoZSBwcm9tcHQgbmFtZSwgZXh0ZW5kaW5nIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBwcm9tcHQsIHVzZWQgYXMgdGhlIGtleSBpbiB0aGUgcmV0dXJuZWQgYW5zd2VycyBvYmplY3QuXG4gKlxuICogQGNsYXNzXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgVXNlcklucHV0IH0gZnJvbSAnQGRlY2FmLXRzL3V0aWxzJztcbiAqXG4gKiAvLyBDcmVhdGUgYSBzaW1wbGUgdGV4dCBpbnB1dFxuICogY29uc3QgbmFtZUlucHV0ID0gbmV3IFVzZXJJbnB1dCgnbmFtZScpXG4gKiAgIC5zZXRNZXNzYWdlKCdXaGF0IGlzIHlvdXIgbmFtZT8nKVxuICogICAuc2V0SW5pdGlhbCgnVXNlcicpO1xuICpcbiAqIC8vIENyZWF0ZSBhIG51bWJlciBpbnB1dCB3aXRoIHZhbGlkYXRpb25cbiAqIGNvbnN0IGFnZUlucHV0ID0gbmV3IFVzZXJJbnB1dCgnYWdlJylcbiAqICAgLnNldFR5cGUoJ251bWJlcicpXG4gKiAgIC5zZXRNZXNzYWdlKCdIb3cgb2xkIGFyZSB5b3U/JylcbiAqICAgLnNldE1pbigwKVxuICogICAuc2V0TWF4KDEyMCk7XG4gKlxuICogLy8gQXNrIGZvciBpbnB1dCBhbmQgcHJvY2VzcyB0aGUgcmVzdWx0c1xuICogYXN5bmMgZnVuY3Rpb24gZ2V0VXNlckluZm8oKSB7XG4gKiAgIGNvbnN0IGFuc3dlcnMgPSBhd2FpdCBVc2VySW5wdXQuYXNrKFtuYW1lSW5wdXQsIGFnZUlucHV0XSk7XG4gKiAgIGNvbnNvbGUubG9nKGBIZWxsbyAke2Fuc3dlcnMubmFtZX0sIHlvdSBhcmUgJHthbnN3ZXJzLmFnZX0geWVhcnMgb2xkLmApO1xuICogfVxuICpcbiAqIGdldFVzZXJJbmZvKCk7XG4gKiBgYGBcbiAqXG4gKiBAbWVybWFpZFxuICogc2VxdWVuY2VEaWFncmFtXG4gKiAgIHBhcnRpY2lwYW50IENsaWVudFxuICogICBwYXJ0aWNpcGFudCBVc2VySW5wdXRcbiAqICAgcGFydGljaXBhbnQgUHJvbXB0TGlicmFyeVxuICpcbiAqICAgQ2xpZW50LT4+VXNlcklucHV0OiBuZXcgVXNlcklucHV0KG5hbWUpXG4gKiAgIENsaWVudC0+PlVzZXJJbnB1dDogc2V0TWVzc2FnZShtZXNzYWdlKVxuICogICBDbGllbnQtPj5Vc2VySW5wdXQ6IHNldFR5cGUodHlwZSlcbiAqICAgQ2xpZW50LT4+VXNlcklucHV0OiBzZXRJbml0aWFsKGluaXRpYWwpXG4gKiAgIENsaWVudC0+PlVzZXJJbnB1dDogT3RoZXIgY29uZmlndXJhdGlvbiBtZXRob2RzXG4gKlxuICogICBDbGllbnQtPj5Vc2VySW5wdXQ6IGFzaygpXG4gKiAgIFVzZXJJbnB1dC0+PlByb21wdExpYnJhcnk6IHByb21wdHMocXVlc3Rpb24pXG4gKiAgIFByb21wdExpYnJhcnktPj5DbGllbnQ6IERpc3BsYXkgcHJvbXB0XG4gKiAgIENsaWVudC0+PlByb21wdExpYnJhcnk6IFVzZXIgcHJvdmlkZXMgaW5wdXRcbiAqICAgUHJvbXB0TGlicmFyeS0+PlVzZXJJbnB1dDogUmV0dXJuIGFuc3dlcnNcbiAqICAgVXNlcklucHV0LT4+Q2xpZW50OiBSZXR1cm4gcHJvY2Vzc2VkIGFuc3dlcnNcbiAqL1xuZXhwb3J0IGNsYXNzIFVzZXJJbnB1dDxSIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nPiBpbXBsZW1lbnRzIFByb21wdE9iamVjdDxSPiB7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IGxvZ2dlciA9IExvZ2dpbmcuZm9yKFVzZXJJbnB1dCk7XG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIHR5cGUgb2YgdGhlIHByb21wdC5cbiAgICogQHN1bW1hcnkgRGV0ZXJtaW5lcyB0aGUgaW5wdXQgbWV0aG9kIChlLmcuLCB0ZXh0LCBudW1iZXIsIGNvbmZpcm0pLlxuICAgKi9cbiAgdHlwZTogUHJvbXB0VHlwZSB8IEZhbHN5IHwgUHJldkNhbGxlcjxSLCBQcm9tcHRUeXBlIHwgRmFsc3k+ID0gXCJ0ZXh0XCI7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgbmFtZSBvZiB0aGUgcHJvbXB0LlxuICAgKiBAc3VtbWFyeSBVc2VkIGFzIHRoZSBrZXkgaW4gdGhlIHJldHVybmVkIGFuc3dlcnMgb2JqZWN0LlxuICAgKi9cbiAgbmFtZTogVmFsdWVPckZ1bmM8Uj47XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgbWVzc2FnZSBkaXNwbGF5ZWQgdG8gdGhlIHVzZXIuXG4gICAqIEBzdW1tYXJ5IFRoZSBxdWVzdGlvbiBvciBpbnN0cnVjdGlvbiBwcmVzZW50ZWQgdG8gdGhlIHVzZXIuXG4gICAqL1xuICBtZXNzYWdlPzogVmFsdWVPckZ1bmM8c3RyaW5nPiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBpbml0aWFsIHZhbHVlIG9mIHRoZSBwcm9tcHQuXG4gICAqIEBzdW1tYXJ5IFRoZSBkZWZhdWx0IHZhbHVlIHByZXNlbnRlZCB0byB0aGUgdXNlci5cbiAgICovXG4gIGluaXRpYWw/OlxuICAgIHwgSW5pdGlhbFJldHVyblZhbHVlXG4gICAgfCBQcmV2Q2FsbGVyPFIsIEluaXRpYWxSZXR1cm5WYWx1ZSB8IFByb21pc2U8SW5pdGlhbFJldHVyblZhbHVlPj5cbiAgICB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBzdHlsZSBvZiB0aGUgcHJvbXB0LlxuICAgKiBAc3VtbWFyeSBEZXRlcm1pbmVzIHRoZSB2aXN1YWwgc3R5bGUgb2YgdGhlIHByb21wdC5cbiAgICovXG4gIHN0eWxlPzogc3RyaW5nIHwgUHJldkNhbGxlcjxSLCBzdHJpbmcgfCBGYWxzeT4gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgZm9ybWF0IGZ1bmN0aW9uIGZvciB0aGUgaW5wdXQuXG4gICAqIEBzdW1tYXJ5IEEgZnVuY3Rpb24gdG8gZm9ybWF0IHRoZSB1c2VyJ3MgaW5wdXQgYmVmb3JlIGl0J3MgcmV0dXJuZWQuXG4gICAqL1xuICBmb3JtYXQ/OiBQcmV2Q2FsbGVyPFIsIHZvaWQ+IHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIHZhbGlkYXRpb24gZnVuY3Rpb24gZm9yIHRoZSBpbnB1dC5cbiAgICogQHN1bW1hcnkgQSBmdW5jdGlvbiB0byB2YWxpZGF0ZSB0aGUgdXNlcidzIGlucHV0LlxuICAgKi9cbiAgdmFsaWRhdGU/OlxuICAgIHwgUHJldkNhbGxlcjxSLCBib29sZWFuIHwgc3RyaW5nIHwgUHJvbWlzZTxib29sZWFuIHwgc3RyaW5nPj5cbiAgICB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBvblN0YXRlIGNhbGxiYWNrIGZ1bmN0aW9uLlxuICAgKiBAc3VtbWFyeSBBIGZ1bmN0aW9uIGNhbGxlZCB3aGVuIHRoZSBzdGF0ZSBvZiB0aGUgcHJvbXB0IGNoYW5nZXMuXG4gICAqL1xuICBvblN0YXRlPzogUHJldkNhbGxlcjxSLCB2b2lkPiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBtaW5pbXVtIHZhbHVlIGZvciBudW1iZXIgaW5wdXRzLlxuICAgKiBAc3VtbWFyeSBUaGUgbG93ZXN0IG51bWJlciB0aGUgdXNlciBjYW4gaW5wdXQuXG4gICAqL1xuICBtaW4/OiBudW1iZXIgfCBQcmV2Q2FsbGVyPFIsIG51bWJlciB8IEZhbHN5PiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBtYXhpbXVtIHZhbHVlIGZvciBudW1iZXIgaW5wdXRzLlxuICAgKiBAc3VtbWFyeSBUaGUgaGlnaGVzdCBudW1iZXIgdGhlIHVzZXIgY2FuIGlucHV0LlxuICAgKi9cbiAgbWF4PzogbnVtYmVyIHwgUHJldkNhbGxlcjxSLCBudW1iZXIgfCBGYWxzeT4gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBXaGV0aGVyIHRvIGFsbG93IGZsb2F0IHZhbHVlcyBmb3IgbnVtYmVyIGlucHV0cy5cbiAgICogQHN1bW1hcnkgSWYgdHJ1ZSwgYWxsb3dzIGRlY2ltYWwgbnVtYmVycy5cbiAgICovXG4gIGZsb2F0PzogYm9vbGVhbiB8IFByZXZDYWxsZXI8UiwgYm9vbGVhbiB8IEZhbHN5PiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBudW1iZXIgb2YgZGVjaW1hbCBwbGFjZXMgdG8gcm91bmQgdG8gZm9yIGZsb2F0IGlucHV0cy5cbiAgICogQHN1bW1hcnkgRGV0ZXJtaW5lcyB0aGUgcHJlY2lzaW9uIG9mIGZsb2F0IGlucHV0cy5cbiAgICovXG4gIHJvdW5kPzogbnVtYmVyIHwgUHJldkNhbGxlcjxSLCBudW1iZXIgfCBGYWxzeT4gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBJbnN0cnVjdGlvbnMgZm9yIHRoZSB1c2VyLlxuICAgKiBAc3VtbWFyeSBBZGRpdGlvbmFsIGd1aWRhbmNlIHByb3ZpZGVkIHRvIHRoZSB1c2VyLlxuICAgKi9cbiAgaW5zdHJ1Y3Rpb25zPzogc3RyaW5nIHwgYm9vbGVhbiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBpbmNyZW1lbnQgdmFsdWUgZm9yIG51bWJlciBpbnB1dHMuXG4gICAqIEBzdW1tYXJ5IFRoZSBzdGVwIHNpemUgd2hlbiBpbmNyZWFzaW5nIG9yIGRlY3JlYXNpbmcgdGhlIG51bWJlci5cbiAgICovXG4gIGluY3JlbWVudD86IG51bWJlciB8IFByZXZDYWxsZXI8UiwgbnVtYmVyIHwgRmFsc3k+IHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIHNlcGFyYXRvciBmb3IgbGlzdCBpbnB1dHMuXG4gICAqIEBzdW1tYXJ5IFRoZSBjaGFyYWN0ZXIgdXNlZCB0byBzZXBhcmF0ZSBsaXN0IGl0ZW1zLlxuICAgKi9cbiAgc2VwYXJhdG9yPzogc3RyaW5nIHwgUHJldkNhbGxlcjxSLCBzdHJpbmcgfCBGYWxzeT4gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgYWN0aXZlIG9wdGlvbiBzdHlsZSBmb3Igc2VsZWN0IGlucHV0cy5cbiAgICogQHN1bW1hcnkgVGhlIHN0eWxlIGFwcGxpZWQgdG8gdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBvcHRpb24uXG4gICAqL1xuICBhY3RpdmU/OiBzdHJpbmcgfCBQcmV2Q2FsbGVyPFIsIHN0cmluZyB8IEZhbHN5PiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBpbmFjdGl2ZSBvcHRpb24gc3R5bGUgZm9yIHNlbGVjdCBpbnB1dHMuXG4gICAqIEBzdW1tYXJ5IFRoZSBzdHlsZSBhcHBsaWVkIHRvIG5vbi1zZWxlY3RlZCBvcHRpb25zLlxuICAgKi9cbiAgaW5hY3RpdmU/OiBzdHJpbmcgfCBQcmV2Q2FsbGVyPFIsIHN0cmluZyB8IEZhbHN5PiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBhdmFpbGFibGUgY2hvaWNlcyBmb3Igc2VsZWN0LCBtdWx0aXNlbGVjdCwgb3IgYXV0b2NvbXBsZXRlIGlucHV0cy5cbiAgICogQHN1bW1hcnkgQW4gYXJyYXkgb2Ygb3B0aW9ucyB0aGF0IHRoZSB1c2VyIGNhbiBzZWxlY3QgZnJvbSBpbiBjaG9pY2UtYmFzZWQgcHJvbXB0cy5cbiAgICovXG4gIGNob2ljZXM/OiBDaG9pY2VbXSB8IFByZXZDYWxsZXI8UiwgQ2hvaWNlW10gfCBGYWxzeT4gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgaGludCB0ZXh0IGZvciB0aGUgcHJvbXB0LlxuICAgKiBAc3VtbWFyeSBBZGRpdGlvbmFsIGluZm9ybWF0aW9uIGRpc3BsYXllZCB0byB0aGUgdXNlci5cbiAgICovXG4gIGhpbnQ/OiBzdHJpbmcgfCBQcmV2Q2FsbGVyPFIsIHN0cmluZyB8IEZhbHN5PiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSB3YXJuaW5nIHRleHQgZm9yIHRoZSBwcm9tcHQuXG4gICAqIEBzdW1tYXJ5IEEgd2FybmluZyBtZXNzYWdlIGRpc3BsYXllZCB0byB0aGUgdXNlci5cbiAgICovXG4gIHdhcm4/OiBzdHJpbmcgfCBQcmV2Q2FsbGVyPFIsIHN0cmluZyB8IEZhbHN5PiB8IHVuZGVmaW5lZDtcblxuICBzdWdnZXN0PzogKChpbnB1dDogYW55LCBjaG9pY2VzOiBDaG9pY2VbXSkgPT4gUHJvbWlzZTxhbnk+KSB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBsaW1pdCBmb3IgbGlzdCBpbnB1dHMuXG4gICAqIEBzdW1tYXJ5IFRoZSBtYXhpbXVtIG51bWJlciBvZiBpdGVtcyB0aGF0IGNhbiBiZSBzZWxlY3RlZC5cbiAgICovXG4gIGxpbWl0PzogbnVtYmVyIHwgUHJldkNhbGxlcjxSLCBudW1iZXIgfCBGYWxzeT4gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgbWFzayBmb3IgcGFzc3dvcmQgaW5wdXRzLlxuICAgKiBAc3VtbWFyeSBUaGUgY2hhcmFjdGVyIHVzZWQgdG8gaGlkZSB0aGUgdXNlcidzIGlucHV0LlxuICAgKi9cbiAgbWFzaz86IHN0cmluZyB8IFByZXZDYWxsZXI8Uiwgc3RyaW5nIHwgRmFsc3k+IHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIHN0ZG91dCBzdHJlYW0gZm9yIHRoZSBwcm9tcHQuXG4gICAqIEBzdW1tYXJ5IFRoZSBvdXRwdXQgc3RyZWFtIHVzZWQgYnkgdGhlIHByb21wdC5cbiAgICovXG4gIHN0ZG91dD86IFdyaXRhYmxlIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIHN0ZGluIHN0cmVhbSBmb3IgdGhlIHByb21wdC5cbiAgICogQHN1bW1hcnkgVGhlIGlucHV0IHN0cmVhbSB1c2VkIGJ5IHRoZSBwcm9tcHQuXG4gICAqL1xuICBzdGRpbj86IFJlYWRhYmxlIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKG5hbWU6IFZhbHVlT3JGdW5jPFI+KSB7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU2V0cyB0aGUgdHlwZSBvZiB0aGUgcHJvbXB0LlxuICAgKiBAc3VtbWFyeSBDb25maWd1cmVzIHRoZSBpbnB1dCBtZXRob2QgZm9yIHRoZSBwcm9tcHQuXG4gICAqXG4gICAqIEBwYXJhbSB0eXBlIC0gVGhlIHR5cGUgb2YgdGhlIHByb21wdC5cbiAgICogQHJldHVybnMgVGhpcyBVc2VySW5wdXQgaW5zdGFuY2UgZm9yIG1ldGhvZCBjaGFpbmluZy5cbiAgICovXG4gIHNldFR5cGUodHlwZTogUHJvbXB0VHlwZSB8IEZhbHN5IHwgUHJldkNhbGxlcjxSLCBQcm9tcHRUeXBlIHwgRmFsc3k+KTogdGhpcyB7XG4gICAgVXNlcklucHV0LmxvZ2dlci52ZXJib3NlKGBTZXR0aW5nIHR5cGUgdG86ICR7dHlwZX1gKTtcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBTZXRzIHRoZSBtZXNzYWdlIG9mIHRoZSBwcm9tcHQuXG4gICAqIEBzdW1tYXJ5IENvbmZpZ3VyZXMgdGhlIHF1ZXN0aW9uIG9yIGluc3RydWN0aW9uIHByZXNlbnRlZCB0byB0aGUgdXNlci5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIG1lc3NhZ2UgdG8gYmUgZGlzcGxheWVkLlxuICAgKiBAcmV0dXJucyBUaGlzIFVzZXJJbnB1dCBpbnN0YW5jZSBmb3IgbWV0aG9kIGNoYWluaW5nLlxuICAgKi9cbiAgc2V0TWVzc2FnZSh2YWx1ZTogVmFsdWVPckZ1bmM8c3RyaW5nPiB8IHVuZGVmaW5lZCk6IHRoaXMge1xuICAgIFVzZXJJbnB1dC5sb2dnZXIudmVyYm9zZShgU2V0dGluZyBtZXNzYWdlIHRvOiAke3ZhbHVlfWApO1xuICAgIHRoaXMubWVzc2FnZSA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBTZXRzIHRoZSBpbml0aWFsIHZhbHVlIG9mIHRoZSBwcm9tcHQuXG4gICAqIEBzdW1tYXJ5IENvbmZpZ3VyZXMgdGhlIGRlZmF1bHQgdmFsdWUgcHJlc2VudGVkIHRvIHRoZSB1c2VyLlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgaW5pdGlhbCB2YWx1ZS5cbiAgICogQHJldHVybnMgVGhpcyBVc2VySW5wdXQgaW5zdGFuY2UgZm9yIG1ldGhvZCBjaGFpbmluZy5cbiAgICovXG4gIHNldEluaXRpYWwoXG4gICAgdmFsdWU6XG4gICAgICB8IEluaXRpYWxSZXR1cm5WYWx1ZVxuICAgICAgfCBQcmV2Q2FsbGVyPFIsIEluaXRpYWxSZXR1cm5WYWx1ZSB8IFByb21pc2U8SW5pdGlhbFJldHVyblZhbHVlPj5cbiAgICAgIHwgdW5kZWZpbmVkXG4gICk6IHRoaXMge1xuICAgIFVzZXJJbnB1dC5sb2dnZXIudmVyYm9zZShgU2V0dGluZyBpbml0aWFsIHZhbHVlIHRvOiAke3ZhbHVlfWApO1xuICAgIHRoaXMuaW5pdGlhbCA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBTZXRzIHRoZSBzdHlsZSBvZiB0aGUgcHJvbXB0LlxuICAgKiBAc3VtbWFyeSBDb25maWd1cmVzIHRoZSB2aXN1YWwgc3R5bGUgb2YgdGhlIHByb21wdC5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIHN0eWxlIHRvIGJlIGFwcGxpZWQuXG4gICAqIEByZXR1cm5zIFRoaXMgVXNlcklucHV0IGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAqL1xuICBzZXRTdHlsZSh2YWx1ZTogc3RyaW5nIHwgUHJldkNhbGxlcjxSLCBzdHJpbmcgfCBGYWxzeT4gfCB1bmRlZmluZWQpOiB0aGlzIHtcbiAgICBVc2VySW5wdXQubG9nZ2VyLnZlcmJvc2UoYFNldHRpbmcgc3R5bGUgdG86ICR7dmFsdWV9YCk7XG4gICAgdGhpcy5zdHlsZSA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBTZXRzIHRoZSBmb3JtYXQgZnVuY3Rpb24gb2YgdGhlIHByb21wdC5cbiAgICogQHN1bW1hcnkgQ29uZmlndXJlcyBhIGZ1bmN0aW9uIHRvIGZvcm1hdCB0aGUgdXNlcidzIGlucHV0IGJlZm9yZSBpdCdzIHJldHVybmVkLlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgZm9ybWF0IGZ1bmN0aW9uLlxuICAgKiBAcmV0dXJucyBUaGlzIFVzZXJJbnB1dCBpbnN0YW5jZSBmb3IgbWV0aG9kIGNoYWluaW5nLlxuICAgKi9cbiAgc2V0Rm9ybWF0KHZhbHVlOiBQcmV2Q2FsbGVyPFIsIHZvaWQ+IHwgdW5kZWZpbmVkKTogdGhpcyB7XG4gICAgVXNlcklucHV0LmxvZ2dlci52ZXJib3NlKGBTZXR0aW5nIGZvcm1hdCBmdW5jdGlvbmApO1xuICAgIHRoaXMuZm9ybWF0ID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFNldHMgdGhlIHZhbGlkYXRpb24gZnVuY3Rpb24gb2YgdGhlIHByb21wdC5cbiAgICogQHN1bW1hcnkgQ29uZmlndXJlcyBhIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIHRoZSB1c2VyJ3MgaW5wdXQuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWxpZGF0aW9uIGZ1bmN0aW9uLlxuICAgKiBAcmV0dXJucyBUaGlzIFVzZXJJbnB1dCBpbnN0YW5jZSBmb3IgbWV0aG9kIGNoYWluaW5nLlxuICAgKi9cbiAgc2V0VmFsaWRhdGUoXG4gICAgdmFsdWU6XG4gICAgICB8IFByZXZDYWxsZXI8UiwgYm9vbGVhbiB8IHN0cmluZyB8IFByb21pc2U8Ym9vbGVhbiB8IHN0cmluZz4+XG4gICAgICB8IHVuZGVmaW5lZFxuICApOiB0aGlzIHtcbiAgICBVc2VySW5wdXQubG9nZ2VyLnZlcmJvc2UoYFNldHRpbmcgdmFsaWRhdGUgZnVuY3Rpb25gKTtcbiAgICB0aGlzLnZhbGlkYXRlID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFNldHMgdGhlIG9uU3RhdGUgY2FsbGJhY2sgb2YgdGhlIHByb21wdC5cbiAgICogQHN1bW1hcnkgQ29uZmlndXJlcyBhIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBzdGF0ZSBvZiB0aGUgcHJvbXB0IGNoYW5nZXMuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBvblN0YXRlIGNhbGxiYWNrIGZ1bmN0aW9uLlxuICAgKiBAcmV0dXJucyBUaGlzIFVzZXJJbnB1dCBpbnN0YW5jZSBmb3IgbWV0aG9kIGNoYWluaW5nLlxuICAgKi9cbiAgc2V0T25TdGF0ZSh2YWx1ZTogUHJldkNhbGxlcjxSLCB2b2lkPiB8IHVuZGVmaW5lZCk6IHRoaXMge1xuICAgIFVzZXJJbnB1dC5sb2dnZXIudmVyYm9zZShgU2V0dGluZyBvblN0YXRlIGNhbGxiYWNrYCk7XG4gICAgdGhpcy5vblN0YXRlID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFNldHMgdGhlIG1pbmltdW0gdmFsdWUgZm9yIG51bWJlciBpbnB1dHMuXG4gICAqIEBzdW1tYXJ5IENvbmZpZ3VyZXMgdGhlIGxvd2VzdCBudW1iZXIgdGhlIHVzZXIgY2FuIGlucHV0LlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgbWluaW11bSB2YWx1ZS5cbiAgICogQHJldHVybnMgVGhpcyBVc2VySW5wdXQgaW5zdGFuY2UgZm9yIG1ldGhvZCBjaGFpbmluZy5cbiAgICovXG4gIHNldE1pbih2YWx1ZTogbnVtYmVyIHwgUHJldkNhbGxlcjxSLCBudW1iZXIgfCBGYWxzeT4gfCB1bmRlZmluZWQpOiB0aGlzIHtcbiAgICBVc2VySW5wdXQubG9nZ2VyLnZlcmJvc2UoYFNldHRpbmcgbWluIHZhbHVlIHRvOiAke3ZhbHVlfWApO1xuICAgIHRoaXMubWluID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFNldHMgdGhlIG1heGltdW0gdmFsdWUgZm9yIG51bWJlciBpbnB1dHMuXG4gICAqIEBzdW1tYXJ5IENvbmZpZ3VyZXMgdGhlIGhpZ2hlc3QgbnVtYmVyIHRoZSB1c2VyIGNhbiBpbnB1dC5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIG1heGltdW0gdmFsdWUuXG4gICAqIEByZXR1cm5zIFRoaXMgVXNlcklucHV0IGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAqL1xuICBzZXRNYXgodmFsdWU6IG51bWJlciB8IFByZXZDYWxsZXI8UiwgbnVtYmVyIHwgRmFsc3k+IHwgdW5kZWZpbmVkKTogdGhpcyB7XG4gICAgVXNlcklucHV0LmxvZ2dlci52ZXJib3NlKGBTZXR0aW5nIG1heCB2YWx1ZSB0bzogJHt2YWx1ZX1gKTtcbiAgICB0aGlzLm1heCA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBTZXRzIHdoZXRoZXIgdG8gYWxsb3cgZmxvYXQgdmFsdWVzIGZvciBudW1iZXIgaW5wdXRzLlxuICAgKiBAc3VtbWFyeSBDb25maWd1cmVzIHdoZXRoZXIgZGVjaW1hbCBudW1iZXJzIGFyZSBhbGxvd2VkLlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgLSBXaGV0aGVyIHRvIGFsbG93IGZsb2F0IHZhbHVlcy5cbiAgICogQHJldHVybnMgVGhpcyBVc2VySW5wdXQgaW5zdGFuY2UgZm9yIG1ldGhvZCBjaGFpbmluZy5cbiAgICovXG4gIHNldEZsb2F0KHZhbHVlOiBib29sZWFuIHwgUHJldkNhbGxlcjxSLCBib29sZWFuIHwgRmFsc3k+IHwgdW5kZWZpbmVkKTogdGhpcyB7XG4gICAgVXNlcklucHV0LmxvZ2dlci52ZXJib3NlKGBTZXR0aW5nIGZsb2F0IHRvOiAke3ZhbHVlfWApO1xuICAgIHRoaXMuZmxvYXQgPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU2V0cyB0aGUgbnVtYmVyIG9mIGRlY2ltYWwgcGxhY2VzIHRvIHJvdW5kIHRvIGZvciBmbG9hdCBpbnB1dHMuXG4gICAqIEBzdW1tYXJ5IENvbmZpZ3VyZXMgdGhlIHByZWNpc2lvbiBvZiBmbG9hdCBpbnB1dHMuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBudW1iZXIgb2YgZGVjaW1hbCBwbGFjZXMuXG4gICAqIEByZXR1cm5zIFRoaXMgVXNlcklucHV0IGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAqL1xuICBzZXRSb3VuZCh2YWx1ZTogbnVtYmVyIHwgUHJldkNhbGxlcjxSLCBudW1iZXIgfCBGYWxzeT4gfCB1bmRlZmluZWQpOiB0aGlzIHtcbiAgICBVc2VySW5wdXQubG9nZ2VyLnZlcmJvc2UoYFNldHRpbmcgcm91bmQgdG86ICR7dmFsdWV9YCk7XG4gICAgdGhpcy5yb3VuZCA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBTZXRzIHRoZSBpbnN0cnVjdGlvbnMgZm9yIHRoZSB1c2VyLlxuICAgKiBAc3VtbWFyeSBDb25maWd1cmVzIGFkZGl0aW9uYWwgZ3VpZGFuY2UgcHJvdmlkZWQgdG8gdGhlIHVzZXIuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBpbnN0cnVjdGlvbnMuXG4gICAqIEByZXR1cm5zIFRoaXMgVXNlcklucHV0IGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAqL1xuICBzZXRJbnN0cnVjdGlvbnModmFsdWU6IHN0cmluZyB8IGJvb2xlYW4gfCB1bmRlZmluZWQpOiB0aGlzIHtcbiAgICBVc2VySW5wdXQubG9nZ2VyLnZlcmJvc2UoYFNldHRpbmcgaW5zdHJ1Y3Rpb25zIHRvOiAke3ZhbHVlfWApO1xuICAgIHRoaXMuaW5zdHJ1Y3Rpb25zID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFNldHMgdGhlIGluY3JlbWVudCB2YWx1ZSBmb3IgbnVtYmVyIGlucHV0cy5cbiAgICogQHN1bW1hcnkgQ29uZmlndXJlcyB0aGUgc3RlcCBzaXplIHdoZW4gaW5jcmVhc2luZyBvciBkZWNyZWFzaW5nIHRoZSBudW1iZXIuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBpbmNyZW1lbnQgdmFsdWUuXG4gICAqIEByZXR1cm5zIFRoaXMgVXNlcklucHV0IGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAqL1xuICBzZXRJbmNyZW1lbnQoXG4gICAgdmFsdWU6IG51bWJlciB8IFByZXZDYWxsZXI8UiwgbnVtYmVyIHwgRmFsc3k+IHwgdW5kZWZpbmVkXG4gICk6IHRoaXMge1xuICAgIFVzZXJJbnB1dC5sb2dnZXIudmVyYm9zZShgU2V0dGluZyBpbmNyZW1lbnQgdG86ICR7dmFsdWV9YCk7XG4gICAgdGhpcy5pbmNyZW1lbnQgPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU2V0cyB0aGUgc2VwYXJhdG9yIGZvciBsaXN0IGlucHV0cy5cbiAgICogQHN1bW1hcnkgQ29uZmlndXJlcyB0aGUgY2hhcmFjdGVyIHVzZWQgdG8gc2VwYXJhdGUgbGlzdCBpdGVtcy5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIHNlcGFyYXRvciBjaGFyYWN0ZXIuXG4gICAqIEByZXR1cm5zIFRoaXMgVXNlcklucHV0IGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAqL1xuICBzZXRTZXBhcmF0b3IoXG4gICAgdmFsdWU6IHN0cmluZyB8IFByZXZDYWxsZXI8Uiwgc3RyaW5nIHwgRmFsc3k+IHwgdW5kZWZpbmVkXG4gICk6IHRoaXMge1xuICAgIFVzZXJJbnB1dC5sb2dnZXIudmVyYm9zZShgU2V0dGluZyBzZXBhcmF0b3IgdG86ICR7dmFsdWV9YCk7XG4gICAgdGhpcy5zZXBhcmF0b3IgPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU2V0cyB0aGUgYWN0aXZlIG9wdGlvbiBzdHlsZSBmb3Igc2VsZWN0IGlucHV0cy5cbiAgICogQHN1bW1hcnkgQ29uZmlndXJlcyB0aGUgc3R5bGUgYXBwbGllZCB0byB0aGUgY3VycmVudGx5IHNlbGVjdGVkIG9wdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIGFjdGl2ZSBvcHRpb24gc3R5bGUuXG4gICAqIEByZXR1cm5zIFRoaXMgVXNlcklucHV0IGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAqL1xuICBzZXRBY3RpdmUodmFsdWU6IHN0cmluZyB8IFByZXZDYWxsZXI8Uiwgc3RyaW5nIHwgRmFsc3k+IHwgdW5kZWZpbmVkKTogdGhpcyB7XG4gICAgVXNlcklucHV0LmxvZ2dlci52ZXJib3NlKGBTZXR0aW5nIGFjdGl2ZSBzdHlsZSB0bzogJHt2YWx1ZX1gKTtcbiAgICB0aGlzLmFjdGl2ZSA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBTZXRzIHRoZSBpbmFjdGl2ZSBvcHRpb24gc3R5bGUgZm9yIHNlbGVjdCBpbnB1dHMuXG4gICAqIEBzdW1tYXJ5IENvbmZpZ3VyZXMgdGhlIHN0eWxlIGFwcGxpZWQgdG8gbm9uLXNlbGVjdGVkIG9wdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBpbmFjdGl2ZSBvcHRpb24gc3R5bGUuXG4gICAqIEByZXR1cm5zIFRoaXMgVXNlcklucHV0IGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAqL1xuICBzZXRJbmFjdGl2ZSh2YWx1ZTogc3RyaW5nIHwgUHJldkNhbGxlcjxSLCBzdHJpbmcgfCBGYWxzeT4gfCB1bmRlZmluZWQpOiB0aGlzIHtcbiAgICBVc2VySW5wdXQubG9nZ2VyLnZlcmJvc2UoYFNldHRpbmcgaW5hY3RpdmUgc3R5bGUgdG86ICR7dmFsdWV9YCk7XG4gICAgdGhpcy5pbmFjdGl2ZSA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBTZXRzIHRoZSBjaG9pY2VzIGZvciBzZWxlY3QsIG11bHRpc2VsZWN0LCBvciBhdXRvY29tcGxldGUgaW5wdXRzLlxuICAgKiBAc3VtbWFyeSBDb25maWd1cmVzIHRoZSBhdmFpbGFibGUgb3B0aW9ucyB0aGF0IHRoZSB1c2VyIGNhbiBzZWxlY3QgZnJvbSBpbiBjaG9pY2UtYmFzZWQgcHJvbXB0cy5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIGFycmF5IG9mIGNob2ljZXMgb3IgYSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgdGhlIGNob2ljZXMuXG4gICAqIEByZXR1cm5zIFRoaXMgVXNlcklucHV0IGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAqL1xuICBzZXRDaG9pY2VzKFxuICAgIHZhbHVlOiBDaG9pY2VbXSB8IFByZXZDYWxsZXI8UiwgQ2hvaWNlW10gfCBGYWxzeT4gfCB1bmRlZmluZWRcbiAgKTogdGhpcyB7XG4gICAgVXNlcklucHV0LmxvZ2dlci52ZXJib3NlKGBTZXR0aW5nIGNob2ljZXM6ICR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfWApO1xuICAgIHRoaXMuY2hvaWNlcyA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBTZXRzIHRoZSBoaW50IHRleHQgZm9yIHRoZSBwcm9tcHQuXG4gICAqIEBzdW1tYXJ5IENvbmZpZ3VyZXMgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBkaXNwbGF5ZWQgdG8gdGhlIHVzZXIuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBoaW50IHRleHQuXG4gICAqIEByZXR1cm5zIFRoaXMgVXNlcklucHV0IGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAqL1xuICBzZXRIaW50KHZhbHVlOiBzdHJpbmcgfCBQcmV2Q2FsbGVyPFIsIHN0cmluZyB8IEZhbHN5PiB8IHVuZGVmaW5lZCk6IHRoaXMge1xuICAgIFVzZXJJbnB1dC5sb2dnZXIudmVyYm9zZShgU2V0dGluZyBoaW50IHRvOiAke3ZhbHVlfWApO1xuICAgIHRoaXMuaGludCA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBTZXRzIHRoZSB3YXJuaW5nIHRleHQgZm9yIHRoZSBwcm9tcHQuXG4gICAqIEBzdW1tYXJ5IENvbmZpZ3VyZXMgYSB3YXJuaW5nIG1lc3NhZ2UgZGlzcGxheWVkIHRvIHRoZSB1c2VyLlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgd2FybmluZyB0ZXh0LlxuICAgKiBAcmV0dXJucyBUaGlzIFVzZXJJbnB1dCBpbnN0YW5jZSBmb3IgbWV0aG9kIGNoYWluaW5nLlxuICAgKi9cbiAgc2V0V2Fybih2YWx1ZTogc3RyaW5nIHwgUHJldkNhbGxlcjxSLCBzdHJpbmcgfCBGYWxzeT4gfCB1bmRlZmluZWQpOiB0aGlzIHtcbiAgICBVc2VySW5wdXQubG9nZ2VyLnZlcmJvc2UoYFNldHRpbmcgd2FybiB0bzogJHt2YWx1ZX1gKTtcbiAgICB0aGlzLndhcm4gPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU2V0cyB0aGUgc3VnZ2VzdGlvbiBmdW5jdGlvbiBmb3IgYXV0b2NvbXBsZXRlIGlucHV0cy5cbiAgICogQHN1bW1hcnkgQ29uZmlndXJlcyBhIGZ1bmN0aW9uIHRoYXQgcHJvdmlkZXMgc3VnZ2VzdGlvbnMgYmFzZWQgb24gdGhlIHVzZXIncyBpbnB1dCBhbmQgYXZhaWxhYmxlIGNob2ljZXMuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIEEgZnVuY3Rpb24gdGhhdCB0YWtlcyB0aGUgY3VycmVudCBpbnB1dCBhbmQgYXZhaWxhYmxlIGNob2ljZXMgYW5kIHJldHVybnMgYSBQcm9taXNlIHJlc29sdmluZyB0byBzdWdnZXN0aW9ucy5cbiAgICogQHJldHVybnMgVGhpcyBVc2VySW5wdXQgaW5zdGFuY2UgZm9yIG1ldGhvZCBjaGFpbmluZy5cbiAgICovXG4gIHNldFN1Z2dlc3QoXG4gICAgdmFsdWU6ICgoaW5wdXQ6IGFueSwgY2hvaWNlczogQ2hvaWNlW10pID0+IFByb21pc2U8YW55PikgfCB1bmRlZmluZWRcbiAgKTogdGhpcyB7XG4gICAgVXNlcklucHV0LmxvZ2dlci52ZXJib3NlKGBTZXR0aW5nIHN1Z2dlc3QgZnVuY3Rpb25gKTtcbiAgICB0aGlzLnN1Z2dlc3QgPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU2V0cyB0aGUgbGltaXQgZm9yIGxpc3QgaW5wdXRzLlxuICAgKiBAc3VtbWFyeSBDb25maWd1cmVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBpdGVtcyB0aGF0IGNhbiBiZSBzZWxlY3RlZCBpbiBsaXN0LXR5cGUgcHJvbXB0cy5cbiAgICogQHRlbXBsYXRlIFIgLSBUaGUgdHlwZSBvZiB0aGUgcHJvbXB0IG5hbWUsIGV4dGVuZGluZyBzdHJpbmcuXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBtYXhpbXVtIG51bWJlciBvZiBpdGVtcyB0aGF0IGNhbiBiZSBzZWxlY3RlZCwgb3IgYSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgdGhpcyB2YWx1ZS5cbiAgICogQHJldHVybiBUaGlzIFVzZXJJbnB1dCBpbnN0YW5jZSBmb3IgbWV0aG9kIGNoYWluaW5nLlxuICAgKi9cbiAgc2V0TGltaXQodmFsdWU6IG51bWJlciB8IFByZXZDYWxsZXI8UiwgbnVtYmVyIHwgRmFsc3k+IHwgdW5kZWZpbmVkKTogdGhpcyB7XG4gICAgVXNlcklucHV0LmxvZ2dlci52ZXJib3NlKGBTZXR0aW5nIGxpbWl0IHRvOiAke3ZhbHVlfWApO1xuICAgIHRoaXMubGltaXQgPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU2V0cyB0aGUgbWFzayBmb3IgcGFzc3dvcmQgaW5wdXRzLlxuICAgKiBAc3VtbWFyeSBDb25maWd1cmVzIHRoZSBjaGFyYWN0ZXIgdXNlZCB0byBoaWRlIHRoZSB1c2VyJ3MgaW5wdXQgaW4gcGFzc3dvcmQtdHlwZSBwcm9tcHRzLlxuICAgKiBAdGVtcGxhdGUgUiAtIFRoZSB0eXBlIG9mIHRoZSBwcm9tcHQgbmFtZSwgZXh0ZW5kaW5nIHN0cmluZy5cbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIGNoYXJhY3RlciB1c2VkIHRvIG1hc2sgdGhlIGlucHV0LCBvciBhIGZ1bmN0aW9uIHRvIGRldGVybWluZSB0aGlzIHZhbHVlLlxuICAgKiBAcmV0dXJuIFRoaXMgVXNlcklucHV0IGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAqL1xuICBzZXRNYXNrKHZhbHVlOiBzdHJpbmcgfCBQcmV2Q2FsbGVyPFIsIHN0cmluZyB8IEZhbHN5PiB8IHVuZGVmaW5lZCk6IHRoaXMge1xuICAgIFVzZXJJbnB1dC5sb2dnZXIudmVyYm9zZShgU2V0dGluZyBtYXNrIHRvOiAke3ZhbHVlfWApO1xuICAgIHRoaXMubWFzayA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBTZXRzIHRoZSBzdGRvdXQgc3RyZWFtIGZvciB0aGUgcHJvbXB0LlxuICAgKiBAc3VtbWFyeSBDb25maWd1cmVzIHRoZSBvdXRwdXQgc3RyZWFtIHVzZWQgYnkgdGhlIHByb21wdCBmb3IgZGlzcGxheWluZyBtZXNzYWdlcyBhbmQgcmVzdWx0cy5cbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byBiZSB1c2VkIGFzIHN0ZG91dC5cbiAgICogQHJldHVybiBUaGlzIFVzZXJJbnB1dCBpbnN0YW5jZSBmb3IgbWV0aG9kIGNoYWluaW5nLlxuICAgKi9cbiAgc2V0U3Rkb3V0KHZhbHVlOiBXcml0YWJsZSB8IHVuZGVmaW5lZCk6IHRoaXMge1xuICAgIFVzZXJJbnB1dC5sb2dnZXIudmVyYm9zZShgU2V0dGluZyBzdGRvdXQgc3RyZWFtYCk7XG4gICAgdGhpcy5zdGRvdXQgPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFNldHMgdGhlIHN0ZGluIHN0cmVhbSBmb3IgdGhlIHByb21wdC5cbiAgICogQHN1bW1hcnkgQ29uZmlndXJlcyB0aGUgaW5wdXQgc3RyZWFtIHVzZWQgYnkgdGhlIHByb21wdCBmb3IgcmVjZWl2aW5nIHVzZXIgaW5wdXQuXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBSZWFkYWJsZSBzdHJlYW0gdG8gYmUgdXNlZCBhcyBzdGRpbi5cbiAgICogQHJldHVybiBUaGlzIFVzZXJJbnB1dCBpbnN0YW5jZSBmb3IgbWV0aG9kIGNoYWluaW5nLlxuICAgKi9cbiAgc2V0U3RkaW4odmFsdWU6IFJlYWRhYmxlIHwgdW5kZWZpbmVkKTogdGhpcyB7XG4gICAgdGhpcy5zdGRpbiA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBBc2tzIHRoZSB1c2VyIGZvciBpbnB1dCBiYXNlZCBvbiB0aGUgY3VycmVudCBVc2VySW5wdXQgY29uZmlndXJhdGlvbi5cbiAgICogQHN1bW1hcnkgUHJvbXB0cyB0aGUgdXNlciBhbmQgcmV0dXJucyB0aGVpciByZXNwb25zZSBhcyBhIHNpbmdsZSB2YWx1ZS5cbiAgICogQHRlbXBsYXRlIFIgLSBUaGUgdHlwZSBvZiB0aGUgcHJvbXB0IG5hbWUsIGV4dGVuZGluZyBzdHJpbmcuXG4gICAqIEByZXR1cm4gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIHVzZXIncyBhbnN3ZXIuXG4gICAqL1xuICBhc3luYyBhc2soKSB7XG4gICAgcmV0dXJuIChhd2FpdCBVc2VySW5wdXQuYXNrKHRoaXMpKVt0aGlzLm5hbWUgYXMga2V5b2YgQW5zd2VyczxSPl07XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEFza3MgdGhlIHVzZXIgb25lIG9yIG1vcmUgcXVlc3Rpb25zIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBVc2VySW5wdXQgY29uZmlndXJhdGlvbnMuXG4gICAqIEBzdW1tYXJ5IFByb21wdHMgdGhlIHVzZXIgd2l0aCBvbmUgb3IgbW9yZSBxdWVzdGlvbnMgYW5kIHJldHVybnMgdGhlaXIgYW5zd2VycyBhcyBhbiBvYmplY3QuXG4gICAqIEB0ZW1wbGF0ZSBSIC0gVGhlIHR5cGUgb2YgdGhlIHByb21wdCBuYW1lLCBleHRlbmRpbmcgc3RyaW5nLlxuICAgKiBAcGFyYW0gcXVlc3Rpb24gLSBBIHNpbmdsZSBVc2VySW5wdXQgaW5zdGFuY2Ugb3IgYW4gYXJyYXkgb2YgVXNlcklucHV0IGluc3RhbmNlcy5cbiAgICogQHJldHVybiBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhbiBvYmplY3QgY29udGFpbmluZyB0aGUgdXNlcidzIGFuc3dlcnMuXG4gICAqIEBtZXJtYWlkXG4gICAqIHNlcXVlbmNlRGlhZ3JhbVxuICAgKiAgIHBhcnRpY2lwYW50IFUgYXMgVXNlclxuICAgKiAgIHBhcnRpY2lwYW50IEEgYXMgYXNrIG1ldGhvZFxuICAgKiAgIHBhcnRpY2lwYW50IFAgYXMgcHJvbXB0cyBsaWJyYXJ5XG4gICAqICAgQS0+PlA6IENhbGwgcHJvbXB0cyB3aXRoIHF1ZXN0aW9uKHMpXG4gICAqICAgUC0+PlU6IERpc3BsYXkgcHJvbXB0KHMpXG4gICAqICAgVS0+PlA6IFByb3ZpZGUgaW5wdXRcbiAgICogICBQLT4+QTogUmV0dXJuIGFuc3dlcnNcbiAgICogICBBLT4+QTogUHJvY2VzcyBhbnN3ZXJzXG4gICAqICAgQS0tPj5DYWxsZXI6IFJldHVybiBwcm9jZXNzZWQgYW5zd2Vyc1xuICAgKi9cbiAgc3RhdGljIGFzeW5jIGFzazxSIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nPihcbiAgICBxdWVzdGlvbjogVXNlcklucHV0PFI+IHwgVXNlcklucHV0PFI+W11cbiAgKSB7XG4gICAgY29uc3QgbG9nID0gVXNlcklucHV0LmxvZ2dlci5mb3IodGhpcy5hc2spO1xuICAgIGlmICghQXJyYXkuaXNBcnJheShxdWVzdGlvbikpIHtcbiAgICAgIHF1ZXN0aW9uID0gW3F1ZXN0aW9uXTtcbiAgICB9XG4gICAgbGV0IGFuc3dlcnM6IEFuc3dlcnM8Uj47XG4gICAgdHJ5IHtcbiAgICAgIGxvZy52ZXJib3NlKFxuICAgICAgICBgQXNraW5nIHF1ZXN0aW9uczogJHtxdWVzdGlvbi5tYXAoKHEpID0+IHEubmFtZSkuam9pbihcIiwgXCIpfWBcbiAgICAgICk7XG4gICAgICBhbnN3ZXJzID0gYXdhaXQgcHJvbXB0cyhxdWVzdGlvbik7XG4gICAgICBsb2cudmVyYm9zZShgUmVjZWl2ZWQgYW5zd2VyczogJHtKU09OLnN0cmluZ2lmeShhbnN3ZXJzLCBudWxsLCAyKX1gKTtcbiAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciB3aGlsZSBnZXR0aW5nIGlucHV0OiAke2Vycm9yfWApO1xuICAgIH1cbiAgICByZXR1cm4gYW5zd2VycztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQXNrcyB0aGUgdXNlciBmb3IgYSBudW1iZXIgaW5wdXQuXG4gICAqIEBzdW1tYXJ5IFByb21wdHMgdGhlIHVzZXIgdG8gZW50ZXIgYSBudW1iZXIsIHdpdGggb3B0aW9uYWwgbWluaW11bSwgbWF4aW11bSwgYW5kIGluaXRpYWwgdmFsdWVzLlxuICAgKiBAcGFyYW0gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBwcm9tcHQsIHVzZWQgYXMgdGhlIGtleSBpbiB0aGUgcmV0dXJuZWQgYW5zd2VycyBvYmplY3QuXG4gICAqIEBwYXJhbSBxdWVzdGlvbiAtIFRoZSBtZXNzYWdlIGRpc3BsYXllZCB0byB0aGUgdXNlci5cbiAgICogQHBhcmFtIG1pbiAtIFRoZSBtaW5pbXVtIGFsbG93ZWQgdmFsdWUgKG9wdGlvbmFsKS5cbiAgICogQHBhcmFtIG1heCAtIFRoZSBtYXhpbXVtIGFsbG93ZWQgdmFsdWUgKG9wdGlvbmFsKS5cbiAgICogQHBhcmFtIGluaXRpYWwgLSBUaGUgaW5pdGlhbCB2YWx1ZSBwcmVzZW50ZWQgdG8gdGhlIHVzZXIgKG9wdGlvbmFsKS5cbiAgICogQHJldHVybiBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgbnVtYmVyIGVudGVyZWQgYnkgdGhlIHVzZXIuXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgYXNrTnVtYmVyKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBxdWVzdGlvbjogc3RyaW5nLFxuICAgIG1pbj86IG51bWJlcixcbiAgICBtYXg/OiBudW1iZXIsXG4gICAgaW5pdGlhbD86IG51bWJlclxuICApOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGNvbnN0IGxvZyA9IFVzZXJJbnB1dC5sb2dnZXIuZm9yKHRoaXMuYXNrTnVtYmVyKTtcbiAgICBsb2cudmVyYm9zZShcbiAgICAgIGBBc2tpbmcgbnVtYmVyIGlucHV0OiB1bmRlZmluZWQsIHF1ZXN0aW9uOiAke3F1ZXN0aW9ufSwgbWluOiAke21pbn0sIG1heDogJHttYXh9LCBpbml0aWFsOiAke2luaXRpYWx9YFxuICAgICk7XG4gICAgY29uc3QgdXNlcklucHV0ID0gbmV3IFVzZXJJbnB1dChuYW1lKVxuICAgICAgLnNldE1lc3NhZ2UocXVlc3Rpb24pXG4gICAgICAuc2V0VHlwZShcIm51bWJlclwiKTtcblxuICAgIGlmICh0eXBlb2YgbWluID09PSBcIm51bWJlclwiKSB1c2VySW5wdXQuc2V0TWluKG1pbik7XG5cbiAgICBpZiAodHlwZW9mIG1heCA9PT0gXCJudW1iZXJcIikgdXNlcklucHV0LnNldE1heChtYXgpO1xuXG4gICAgaWYgKHR5cGVvZiBpbml0aWFsID09PSBcIm51bWJlclwiKSB1c2VySW5wdXQuc2V0SW5pdGlhbChpbml0aWFsKTtcblxuICAgIHJldHVybiAoYXdhaXQgdGhpcy5hc2sodXNlcklucHV0KSlbbmFtZV07XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEFza3MgdGhlIHVzZXIgZm9yIGEgdGV4dCBpbnB1dC5cbiAgICogQHN1bW1hcnkgUHJvbXB0cyB0aGUgdXNlciB0byBlbnRlciB0ZXh0LCB3aXRoIG9wdGlvbmFsIG1hc2tpbmcgYW5kIGluaXRpYWwgdmFsdWUuXG4gICAqIEBwYXJhbSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHByb21wdCwgdXNlZCBhcyB0aGUga2V5IGluIHRoZSByZXR1cm5lZCBhbnN3ZXJzIG9iamVjdC5cbiAgICogQHBhcmFtIHF1ZXN0aW9uIC0gVGhlIG1lc3NhZ2UgZGlzcGxheWVkIHRvIHRoZSB1c2VyLlxuICAgKiBAcGFyYW0gbWFzayAtIFRoZSBjaGFyYWN0ZXIgdXNlZCB0byBtYXNrIHRoZSBpbnB1dCAob3B0aW9uYWwsIGZvciBwYXNzd29yZC1saWtlIGlucHV0cykuXG4gICAqIEBwYXJhbSBpbml0aWFsIC0gVGhlIGluaXRpYWwgdmFsdWUgcHJlc2VudGVkIHRvIHRoZSB1c2VyIChvcHRpb25hbCkuXG4gICAqIEByZXR1cm4gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIHRleHQgZW50ZXJlZCBieSB0aGUgdXNlci5cbiAgICovXG4gIHN0YXRpYyBhc3luYyBhc2tUZXh0KFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBxdWVzdGlvbjogc3RyaW5nLFxuICAgIG1hc2s6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZCxcbiAgICBpbml0aWFsPzogc3RyaW5nXG4gICk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgbG9nID0gVXNlcklucHV0LmxvZ2dlci5mb3IodGhpcy5hc2tUZXh0KTtcbiAgICBsb2cudmVyYm9zZShcbiAgICAgIGBBc2tpbmcgdGV4dCBpbnB1dDogdW5kZWZpbmVkLCBxdWVzdGlvbjogJHtxdWVzdGlvbn0sIG1hc2s6ICR7bWFza30sIGluaXRpYWw6ICR7aW5pdGlhbH1gXG4gICAgKTtcbiAgICBjb25zdCB1c2VySW5wdXQgPSBuZXcgVXNlcklucHV0KG5hbWUpLnNldE1lc3NhZ2UocXVlc3Rpb24pO1xuXG4gICAgaWYgKG1hc2spIHVzZXJJbnB1dC5zZXRNYXNrKG1hc2spO1xuICAgIGlmICh0eXBlb2YgaW5pdGlhbCA9PT0gXCJzdHJpbmdcIikgdXNlcklucHV0LnNldEluaXRpYWwoaW5pdGlhbCk7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmFzayh1c2VySW5wdXQpKVtuYW1lXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQXNrcyB0aGUgdXNlciBmb3IgYSBjb25maXJtYXRpb24gKHllcy9ubykuXG4gICAqIEBzdW1tYXJ5IFByb21wdHMgdGhlIHVzZXIgd2l0aCBhIHllcy9ubyBxdWVzdGlvbiBhbmQgcmV0dXJucyBhIGJvb2xlYW4gcmVzdWx0LlxuICAgKiBAcGFyYW0gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBwcm9tcHQsIHVzZWQgYXMgdGhlIGtleSBpbiB0aGUgcmV0dXJuZWQgYW5zd2VycyBvYmplY3QuXG4gICAqIEBwYXJhbSBxdWVzdGlvbiAtIFRoZSBtZXNzYWdlIGRpc3BsYXllZCB0byB0aGUgdXNlci5cbiAgICogQHBhcmFtIGluaXRpYWwgLSBUaGUgaW5pdGlhbCB2YWx1ZSBwcmVzZW50ZWQgdG8gdGhlIHVzZXIgKG9wdGlvbmFsKS5cbiAgICogQHJldHVybiBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhIGJvb2xlYW4gcmVwcmVzZW50aW5nIHRoZSB1c2VyJ3MgYW5zd2VyLlxuICAgKi9cbiAgc3RhdGljIGFzeW5jIGFza0NvbmZpcm1hdGlvbihcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgcXVlc3Rpb246IHN0cmluZyxcbiAgICBpbml0aWFsPzogYm9vbGVhblxuICApOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBsb2cgPSBVc2VySW5wdXQubG9nZ2VyLmZvcih0aGlzLmFza0NvbmZpcm1hdGlvbik7XG4gICAgbG9nLnZlcmJvc2UoXG4gICAgICBgQXNraW5nIGNvbmZpcm1hdGlvbiBpbnB1dDogdW5kZWZpbmVkLCBxdWVzdGlvbjogJHtxdWVzdGlvbn0sIGluaXRpYWw6ICR7aW5pdGlhbH1gXG4gICAgKTtcbiAgICBjb25zdCB1c2VySW5wdXQgPSBuZXcgVXNlcklucHV0KG5hbWUpXG4gICAgICAuc2V0TWVzc2FnZShxdWVzdGlvbilcbiAgICAgIC5zZXRUeXBlKFwiY29uZmlybVwiKTtcblxuICAgIGlmICh0eXBlb2YgaW5pdGlhbCAhPT0gXCJ1bmRlZmluZWRcIikgdXNlcklucHV0LnNldEluaXRpYWwoaW5pdGlhbCk7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmFzayh1c2VySW5wdXQpKVtuYW1lXTtcbiAgfVxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFJlcGVhdGVkbHkgYXNrcyBmb3IgaW5wdXQgdW50aWwgYSB2YWxpZCByZXNwb25zZSBpcyBnaXZlbiBvciB0aGUgbGltaXQgaXMgcmVhY2hlZC5cbiAgICogQHN1bW1hcnkgVGhpcyBtZXRob2QgaW5zaXN0cyBvbiBnZXR0aW5nIGEgdmFsaWQgaW5wdXQgZnJvbSB0aGUgdXNlciwgYWxsb3dpbmcgZm9yIGEgc3BlY2lmaWVkIG51bWJlciBvZiBhdHRlbXB0cy5cbiAgICpcbiAgICogQHRlbXBsYXRlIFIgLSBUaGUgdHlwZSBvZiB0aGUgZXhwZWN0ZWQgcmVzdWx0LlxuICAgKiBAcGFyYW0gaW5wdXQgLSBUaGUgVXNlcklucHV0IGluc3RhbmNlIHRvIHVzZSBmb3IgcHJvbXB0aW5nLlxuICAgKiBAcGFyYW0gdGVzdCAtIEEgZnVuY3Rpb24gdG8gdmFsaWRhdGUgdGhlIHVzZXIncyBpbnB1dC5cbiAgICogQHBhcmFtIGRlZmF1bHRDb25maXJtYXRpb24gLSBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIGNvbmZpcm1hdGlvbiBwcm9tcHQgKHRydWUgZm9yIHllcywgZmFsc2UgZm9yIG5vKS5cbiAgICogQHBhcmFtIGxpbWl0IC0gVGhlIG1heGltdW0gbnVtYmVyIG9mIGF0dGVtcHRzIGFsbG93ZWQgKGRlZmF1bHQgaXMgMSkuXG4gICAqIEByZXR1cm4gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIHZhbGlkIGlucHV0IG9yIHVuZGVmaW5lZCBpZiB0aGUgbGltaXQgaXMgcmVhY2hlZC5cbiAgICpcbiAgICogQG1lcm1haWRcbiAgICogc2VxdWVuY2VEaWFncmFtXG4gICAqICAgcGFydGljaXBhbnQgVSBhcyBVc2VyXG4gICAqICAgcGFydGljaXBhbnQgSSBhcyBpbnNpc3QgbWV0aG9kXG4gICAqICAgcGFydGljaXBhbnQgQSBhcyBhc2sgbWV0aG9kXG4gICAqICAgcGFydGljaXBhbnQgVCBhcyB0ZXN0IGZ1bmN0aW9uXG4gICAqICAgcGFydGljaXBhbnQgQyBhcyBhc2tDb25maXJtYXRpb24gbWV0aG9kXG4gICAqICAgbG9vcCBVbnRpbCB2YWxpZCBpbnB1dCBvciBsaW1pdCByZWFjaGVkXG4gICAqICAgICBJLT4+QTogQ2FsbCBhc2sgd2l0aCBpbnB1dFxuICAgKiAgICAgQS0+PlU6IFByb21wdCB1c2VyXG4gICAqICAgICBVLT4+QTogUHJvdmlkZSBpbnB1dFxuICAgKiAgICAgQS0+Pkk6IFJldHVybiByZXN1bHRcbiAgICogICAgIEktPj5UOiBUZXN0IHJlc3VsdFxuICAgKiAgICAgYWx0IFRlc3QgcGFzc2VzXG4gICAqICAgICAgIEktPj5DOiBBc2sgZm9yIGNvbmZpcm1hdGlvblxuICAgKiAgICAgICBDLT4+VTogQ29uZmlybSBpbnB1dFxuICAgKiAgICAgICBVLT4+QzogUHJvdmlkZSBjb25maXJtYXRpb25cbiAgICogICAgICAgQy0+Pkk6IFJldHVybiBjb25maXJtYXRpb25cbiAgICogICAgICAgYWx0IENvbmZpcm1lZFxuICAgKiAgICAgICAgIEktLT4+Q2FsbGVyOiBSZXR1cm4gdmFsaWQgcmVzdWx0XG4gICAqICAgICAgIGVsc2UgTm90IGNvbmZpcm1lZFxuICAgKiAgICAgICAgIEktPj5JOiBDb250aW51ZSBsb29wXG4gICAqICAgICAgIGVuZFxuICAgKiAgICAgZWxzZSBUZXN0IGZhaWxzXG4gICAqICAgICAgIEktPj5JOiBDb250aW51ZSBsb29wXG4gICAqICAgICBlbmRcbiAgICogICBlbmRcbiAgICogICBJLS0+PkNhbGxlcjogUmV0dXJuIHVuZGVmaW5lZCBpZiBsaW1pdCByZWFjaGVkXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgaW5zaXN0PFI+KFxuICAgIGlucHV0OiBVc2VySW5wdXQsXG4gICAgdGVzdDogKHJlczogc3RyaW5nIHwgbnVtYmVyKSA9PiBib29sZWFuLFxuICAgIGRlZmF1bHRDb25maXJtYXRpb246IGJvb2xlYW4sXG4gICAgbGltaXQgPSAxXG4gICk6IFByb21pc2U8UiB8IHVuZGVmaW5lZD4ge1xuICAgIGNvbnN0IGxvZyA9IFVzZXJJbnB1dC5sb2dnZXIuZm9yKHRoaXMuaW5zaXN0KTtcbiAgICBsb2cudmVyYm9zZShcbiAgICAgIGBJbnNpc3Rpbmcgb24gaW5wdXQ6ICR7aW5wdXQubmFtZX0sIHRlc3Q6ICR7dGVzdC50b1N0cmluZygpfSwgZGVmYXVsdENvbmZpcm1hdGlvbjogJHtkZWZhdWx0Q29uZmlybWF0aW9ufSwgbGltaXQ6ICR7bGltaXR9YFxuICAgICk7XG4gICAgbGV0IHJlc3VsdDogc3RyaW5nIHwgbnVtYmVyIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICAgIGxldCBjb3VudCA9IDA7XG4gICAgbGV0IGNvbmZpcm1hdGlvbjogYm9vbGVhbjtcbiAgICB0cnkge1xuICAgICAgZG8ge1xuICAgICAgICByZXN1bHQgPSAoYXdhaXQgVXNlcklucHV0LmFzayhpbnB1dCkpW1xuICAgICAgICAgIGlucHV0Lm5hbWUgYXMga2V5b2YgQW5zd2VyczxzdHJpbmc+XG4gICAgICAgIF0gYXMgc3RyaW5nO1xuICAgICAgICBpZiAoIXRlc3QocmVzdWx0KSkge1xuICAgICAgICAgIHJlc3VsdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25maXJtYXRpb24gPSBhd2FpdCBVc2VySW5wdXQuYXNrQ29uZmlybWF0aW9uKFxuICAgICAgICAgIGAke2lucHV0Lm5hbWV9LWNvbmZpcm1gLFxuICAgICAgICAgIGBJcyB0aGUgJHtpbnB1dC50eXBlfSBjb3JyZWN0P2AsXG4gICAgICAgICAgZGVmYXVsdENvbmZpcm1hdGlvblxuICAgICAgICApO1xuICAgICAgICBpZiAoIWNvbmZpcm1hdGlvbikgcmVzdWx0ID0gdW5kZWZpbmVkO1xuICAgICAgfSB3aGlsZSAodHlwZW9mIHJlc3VsdCA9PT0gXCJ1bmRlZmluZWRcIiAmJiBsaW1pdCA+IDEgJiYgY291bnQrKyA8IGxpbWl0KTtcbiAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICBsb2cuZXJyb3IoYEVycm9yIHdoaWxlIGluc2lzdGluZzogJHtlfWApO1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHJlc3VsdCA9PT0gXCJ1bmRlZmluZWRcIikgbG9nLmluZm8oXCJubyBzZWxlY3Rpb24uLi5cIik7XG4gICAgcmV0dXJuIHJlc3VsdCBhcyBSIHwgdW5kZWZpbmVkO1xuICB9XG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVwZWF0ZWRseSBhc2tzIGZvciB0ZXh0IGlucHV0IHVudGlsIGEgdmFsaWQgcmVzcG9uc2UgaXMgZ2l2ZW4gb3IgdGhlIGxpbWl0IGlzIHJlYWNoZWQuXG4gICAqIEBzdW1tYXJ5IFRoaXMgbWV0aG9kIGluc2lzdHMgb24gZ2V0dGluZyBhIHZhbGlkIHRleHQgaW5wdXQgZnJvbSB0aGUgdXNlciwgYWxsb3dpbmcgZm9yIGEgc3BlY2lmaWVkIG51bWJlciBvZiBhdHRlbXB0cy5cbiAgICpcbiAgICogQHBhcmFtIG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgcHJvbXB0LCB1c2VkIGFzIHRoZSBrZXkgaW4gdGhlIHJldHVybmVkIGFuc3dlcnMgb2JqZWN0LlxuICAgKiBAcGFyYW0gcXVlc3Rpb24gLSBUaGUgbWVzc2FnZSBkaXNwbGF5ZWQgdG8gdGhlIHVzZXIuXG4gICAqIEBwYXJhbSB0ZXN0IC0gQSBmdW5jdGlvbiB0byB2YWxpZGF0ZSB0aGUgdXNlcidzIGlucHV0LlxuICAgKiBAcGFyYW0gbWFzayAtIFRoZSBjaGFyYWN0ZXIgdXNlZCB0byBtYXNrIHRoZSBpbnB1dCAob3B0aW9uYWwsIGZvciBwYXNzd29yZC1saWtlIGlucHV0cykuXG4gICAqIEBwYXJhbSBpbml0aWFsIC0gVGhlIGluaXRpYWwgdmFsdWUgcHJlc2VudGVkIHRvIHRoZSB1c2VyIChvcHRpb25hbCkuXG4gICAqIEBwYXJhbSBkZWZhdWx0Q29uZmlybWF0aW9uIC0gVGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoZSBjb25maXJtYXRpb24gcHJvbXB0ICh0cnVlIGZvciB5ZXMsIGZhbHNlIGZvciBubykuXG4gICAqIEBwYXJhbSBsaW1pdCAtIFRoZSBtYXhpbXVtIG51bWJlciBvZiBhdHRlbXB0cyBhbGxvd2VkIChkZWZhdWx0IGlzIC0xLCBtZWFuaW5nIHVubGltaXRlZCkuXG4gICAqIEByZXR1cm4gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIHZhbGlkIGlucHV0IG9yIHVuZGVmaW5lZCBpZiB0aGUgbGltaXQgaXMgcmVhY2hlZC5cbiAgICovXG4gIHN0YXRpYyBhc3luYyBpbnNpc3RGb3JUZXh0KFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBxdWVzdGlvbjogc3RyaW5nLFxuICAgIHRlc3Q6IChyZXM6IHN0cmluZykgPT4gYm9vbGVhbixcbiAgICBtYXNrOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQsXG4gICAgaW5pdGlhbD86IHN0cmluZyxcbiAgICBkZWZhdWx0Q29uZmlybWF0aW9uID0gZmFsc2UsXG4gICAgbGltaXQgPSAtMVxuICApOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IGxvZyA9IFVzZXJJbnB1dC5sb2dnZXIuZm9yKHRoaXMuaW5zaXN0Rm9yVGV4dCk7XG4gICAgbG9nLnZlcmJvc2UoXG4gICAgICBgSW5zaXN0aW5nIGZvciB0ZXh0IGlucHV0OiB1bmRlZmluZWQsIHF1ZXN0aW9uOiAke3F1ZXN0aW9ufSwgdGVzdDogJHt0ZXN0LnRvU3RyaW5nKCl9LCBtYXNrOiAke21hc2t9LCBpbml0aWFsOiAke2luaXRpYWx9LCBkZWZhdWx0Q29uZmlybWF0aW9uOiAke2RlZmF1bHRDb25maXJtYXRpb259LCBsaW1pdDogJHtsaW1pdH1gXG4gICAgKTtcbiAgICBjb25zdCB1c2VySW5wdXQgPSBuZXcgVXNlcklucHV0KG5hbWUpLnNldE1lc3NhZ2UocXVlc3Rpb24pO1xuXG4gICAgaWYgKG1hc2spIHVzZXJJbnB1dC5zZXRNYXNrKG1hc2spO1xuICAgIGlmICh0eXBlb2YgaW5pdGlhbCA9PT0gXCJzdHJpbmdcIikgdXNlcklucHV0LnNldEluaXRpYWwoaW5pdGlhbCk7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmluc2lzdChcbiAgICAgIHVzZXJJbnB1dCxcbiAgICAgIHRlc3QgYXMgKHJlczogc3RyaW5nIHwgbnVtYmVyKSA9PiBib29sZWFuLFxuICAgICAgZGVmYXVsdENvbmZpcm1hdGlvbixcbiAgICAgIGxpbWl0XG4gICAgKSkgYXMgc3RyaW5nO1xuICB9XG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVwZWF0ZWRseSBhc2tzIGZvciBudW1iZXIgaW5wdXQgdW50aWwgYSB2YWxpZCByZXNwb25zZSBpcyBnaXZlbiBvciB0aGUgbGltaXQgaXMgcmVhY2hlZC5cbiAgICogQHN1bW1hcnkgVGhpcyBtZXRob2QgaW5zaXN0cyBvbiBnZXR0aW5nIGEgdmFsaWQgbnVtYmVyIGlucHV0IGZyb20gdGhlIHVzZXIsIGFsbG93aW5nIGZvciBhIHNwZWNpZmllZCBudW1iZXIgb2YgYXR0ZW1wdHMuXG4gICAqXG4gICAqIEBwYXJhbSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHByb21wdCwgdXNlZCBhcyB0aGUga2V5IGluIHRoZSByZXR1cm5lZCBhbnN3ZXJzIG9iamVjdC5cbiAgICogQHBhcmFtIHF1ZXN0aW9uIC0gVGhlIG1lc3NhZ2UgZGlzcGxheWVkIHRvIHRoZSB1c2VyLlxuICAgKiBAcGFyYW0gdGVzdCAtIEEgZnVuY3Rpb24gdG8gdmFsaWRhdGUgdGhlIHVzZXIncyBpbnB1dC5cbiAgICogQHBhcmFtIG1pbiAtIFRoZSBtaW5pbXVtIGFsbG93ZWQgdmFsdWUgKG9wdGlvbmFsKS5cbiAgICogQHBhcmFtIG1heCAtIFRoZSBtYXhpbXVtIGFsbG93ZWQgdmFsdWUgKG9wdGlvbmFsKS5cbiAgICogQHBhcmFtIGluaXRpYWwgLSBUaGUgaW5pdGlhbCB2YWx1ZSBwcmVzZW50ZWQgdG8gdGhlIHVzZXIgKG9wdGlvbmFsKS5cbiAgICogQHBhcmFtIGRlZmF1bHRDb25maXJtYXRpb24gLSBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIGNvbmZpcm1hdGlvbiBwcm9tcHQgKHRydWUgZm9yIHllcywgZmFsc2UgZm9yIG5vKS5cbiAgICogQHBhcmFtIGxpbWl0IC0gVGhlIG1heGltdW0gbnVtYmVyIG9mIGF0dGVtcHRzIGFsbG93ZWQgKGRlZmF1bHQgaXMgLTEsIG1lYW5pbmcgdW5saW1pdGVkKS5cbiAgICogQHJldHVybiBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgdmFsaWQgaW5wdXQgb3IgdW5kZWZpbmVkIGlmIHRoZSBsaW1pdCBpcyByZWFjaGVkLlxuICAgKi9cbiAgc3RhdGljIGFzeW5jIGluc2lzdEZvck51bWJlcihcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgcXVlc3Rpb246IHN0cmluZyxcbiAgICB0ZXN0OiAocmVzOiBudW1iZXIpID0+IGJvb2xlYW4sXG4gICAgbWluPzogbnVtYmVyLFxuICAgIG1heD86IG51bWJlcixcbiAgICBpbml0aWFsPzogbnVtYmVyLFxuICAgIGRlZmF1bHRDb25maXJtYXRpb24gPSBmYWxzZSxcbiAgICBsaW1pdCA9IC0xXG4gICk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgY29uc3QgbG9nID0gVXNlcklucHV0LmxvZ2dlci5mb3IodGhpcy5pbnNpc3RGb3JOdW1iZXIpO1xuICAgIGxvZy52ZXJib3NlKFxuICAgICAgYEluc2lzdGluZyBmb3IgbnVtYmVyIGlucHV0OiB1bmRlZmluZWQsIHF1ZXN0aW9uOiAke3F1ZXN0aW9ufSwgdGVzdDogJHt0ZXN0LnRvU3RyaW5nKCl9LCBtaW46ICR7bWlufSwgbWF4OiAke21heH0sIGluaXRpYWw6ICR7aW5pdGlhbH0sIGRlZmF1bHRDb25maXJtYXRpb246ICR7ZGVmYXVsdENvbmZpcm1hdGlvbn0sIGxpbWl0OiAke2xpbWl0fWBcbiAgICApO1xuICAgIGNvbnN0IHVzZXJJbnB1dCA9IG5ldyBVc2VySW5wdXQobmFtZSlcbiAgICAgIC5zZXRNZXNzYWdlKHF1ZXN0aW9uKVxuICAgICAgLnNldFR5cGUoXCJudW1iZXJcIik7XG5cbiAgICBpZiAodHlwZW9mIG1pbiA9PT0gXCJudW1iZXJcIikgdXNlcklucHV0LnNldE1pbihtaW4pO1xuXG4gICAgaWYgKHR5cGVvZiBtYXggPT09IFwibnVtYmVyXCIpIHVzZXJJbnB1dC5zZXRNYXgobWF4KTtcblxuICAgIGlmICh0eXBlb2YgaW5pdGlhbCA9PT0gXCJudW1iZXJcIikgdXNlcklucHV0LnNldEluaXRpYWwoaW5pdGlhbCk7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmluc2lzdChcbiAgICAgIHVzZXJJbnB1dCxcbiAgICAgIHRlc3QgYXMgKHJlczogc3RyaW5nIHwgbnVtYmVyKSA9PiBib29sZWFuLFxuICAgICAgZGVmYXVsdENvbmZpcm1hdGlvbixcbiAgICAgIGxpbWl0XG4gICAgKSkgYXMgbnVtYmVyO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBQYXJzZXMgY29tbWFuZC1saW5lIGFyZ3VtZW50cyBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgb3B0aW9ucy5cbiAgICogQHN1bW1hcnkgVXNlcyBOb2RlLmpzJ3MgdXRpbC5wYXJzZUFyZ3MgdG8gcGFyc2UgY29tbWFuZC1saW5lIGFyZ3VtZW50cyBhbmQgcmV0dXJuIHRoZSByZXN1bHQuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBwYXJzaW5nIGFyZ3VtZW50cy5cbiAgICogQHJldHVybiBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgcGFyc2VkIGFyZ3VtZW50cy5cbiAgICogQG1lcm1haWRcbiAgICogc2VxdWVuY2VEaWFncmFtXG4gICAqICAgcGFydGljaXBhbnQgQyBhcyBDYWxsZXJcbiAgICogICBwYXJ0aWNpcGFudCBQIGFzIHBhcnNlQXJncyBtZXRob2RcbiAgICogICBwYXJ0aWNpcGFudCBVIGFzIHV0aWwucGFyc2VBcmdzXG4gICAqICAgQy0+PlA6IENhbGwgd2l0aCBvcHRpb25zXG4gICAqICAgUC0+PlA6IFByZXBhcmUgYXJncyBvYmplY3RcbiAgICogICBQLT4+VTogQ2FsbCBwYXJzZUFyZ3Mgd2l0aCBwcmVwYXJlZCBhcmdzXG4gICAqICAgVS0+PlA6IFJldHVybiBwYXJzZWQgcmVzdWx0XG4gICAqICAgUC0tPj5DOiBSZXR1cm4gUGFyc2VBcmdzUmVzdWx0XG4gICAqL1xuICBzdGF0aWMgcGFyc2VBcmdzKG9wdGlvbnM6IFBhcnNlQXJnc09wdGlvbnNDb25maWcpOiBQYXJzZUFyZ3NSZXN1bHQge1xuICAgIGNvbnN0IGxvZyA9IFVzZXJJbnB1dC5sb2dnZXIuZm9yKHRoaXMucGFyc2VBcmdzKTtcbiAgICBjb25zdCBhcmdzOiBQYXJzZUFyZ3NDb25maWcgPSB7XG4gICAgICBhcmdzOiBwcm9jZXNzLmFyZ3Yuc2xpY2UoMiksXG4gICAgICBvcHRpb25zOiBvcHRpb25zLFxuICAgIH07XG4gICAgbG9nLmRlYnVnKGBQYXJzaW5nIGFyZ3VtZW50czogJHtKU09OLnN0cmluZ2lmeShhcmdzLCBudWxsLCAyKX1gKTtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHBhcnNlQXJncyhhcmdzKTtcbiAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgbG9nLmRlYnVnKFxuICAgICAgICBgRXJyb3Igd2hpbGUgcGFyc2luZyBhcmd1bWVudHM6XFxuJHtKU09OLnN0cmluZ2lmeShhcmdzLCBudWxsLCAyKX1cXG4gfCBvcHRpb25zXFxuJHtKU09OLnN0cmluZ2lmeShvcHRpb25zLCBudWxsLCAyKX1cXG4gfCAke2Vycm9yfWBcbiAgICAgICk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIHdoaWxlIHBhcnNpbmcgYXJndW1lbnRzOiAke2Vycm9yfWApO1xuICAgIH1cbiAgfVxufVxuIiwiLyoqXG4gKiBAZGVzY3JpcHRpb24gRGVmYXVsdCBjb21tYW5kIG9wdGlvbnMgZm9yIENMSSBjb21tYW5kcy5cbiAqIEBzdW1tYXJ5IERlZmluZXMgdGhlIHN0cnVjdHVyZSBhbmQgZGVmYXVsdCB2YWx1ZXMgZm9yIGNvbW1vbiBjb21tYW5kLWxpbmUgb3B0aW9ucyB1c2VkIGFjcm9zcyB2YXJpb3VzIENMSSBjb21tYW5kcy5cbiAqIEBjb25zdCBEZWZhdWx0Q29tbWFuZE9wdGlvbnNcbiAqIEB0eXBlZGVmIHtPYmplY3R9IERlZmF1bHRDb21tYW5kT3B0aW9uc1xuICogQHByb3BlcnR5IHtPYmplY3R9IHZlcmJvc2UgLSBWZXJib3NpdHkgbGV2ZWwgb3B0aW9uLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHZlcmJvc2UudHlwZSAtIFRoZSB0eXBlIG9mIHRoZSB2ZXJib3NlIG9wdGlvbiAobnVtYmVyKS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB2ZXJib3NlLnNob3J0IC0gVGhlIHNob3J0IGZsYWcgZm9yIHRoZSB2ZXJib3NlIG9wdGlvbiAoVikuXG4gKiBAcHJvcGVydHkge251bWJlcn0gdmVyYm9zZS5kZWZhdWx0IC0gVGhlIGRlZmF1bHQgdmFsdWUgZm9yIHZlcmJvc2l0eSAoMCkuXG4gKiBAcHJvcGVydHkge09iamVjdH0gdmVyc2lvbiAtIFZlcnNpb24gZGlzcGxheSBvcHRpb24uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdmVyc2lvbi50eXBlIC0gVGhlIHR5cGUgb2YgdGhlIHZlcnNpb24gb3B0aW9uIChib29sZWFuKS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB2ZXJzaW9uLnNob3J0IC0gVGhlIHNob3J0IGZsYWcgZm9yIHRoZSB2ZXJzaW9uIG9wdGlvbiAodikuXG4gKiBAcHJvcGVydHkge3VuZGVmaW5lZH0gdmVyc2lvbi5kZWZhdWx0IC0gVGhlIGRlZmF1bHQgdmFsdWUgZm9yIHZlcnNpb24gZGlzcGxheSAodW5kZWZpbmVkKS5cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBoZWxwIC0gSGVscCBkaXNwbGF5IG9wdGlvbi5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBoZWxwLnR5cGUgLSBUaGUgdHlwZSBvZiB0aGUgaGVscCBvcHRpb24gKGJvb2xlYW4pLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGhlbHAuc2hvcnQgLSBUaGUgc2hvcnQgZmxhZyBmb3IgdGhlIGhlbHAgb3B0aW9uIChoKS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gaGVscC5kZWZhdWx0IC0gVGhlIGRlZmF1bHQgdmFsdWUgZm9yIGhlbHAgZGlzcGxheSAoZmFsc2UpLlxuICogQHByb3BlcnR5IHtPYmplY3R9IGxvZ0xldmVsIC0gTG9nIGxldmVsIG9wdGlvbi5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBsb2dMZXZlbC50eXBlIC0gVGhlIHR5cGUgb2YgdGhlIGxvZ0xldmVsIG9wdGlvbiAoc3RyaW5nKS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBsb2dMZXZlbC5kZWZhdWx0IC0gVGhlIGRlZmF1bHQgdmFsdWUgZm9yIGxvZyBsZXZlbCAoXCJpbmZvXCIpLlxuICogQHByb3BlcnR5IHtPYmplY3R9IGxvZ1N0eWxlIC0gTG9nIHN0eWxpbmcgb3B0aW9uLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGxvZ1N0eWxlLnR5cGUgLSBUaGUgdHlwZSBvZiB0aGUgbG9nU3R5bGUgb3B0aW9uIChib29sZWFuKS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gbG9nU3R5bGUuZGVmYXVsdCAtIFRoZSBkZWZhdWx0IHZhbHVlIGZvciBsb2cgc3R5bGluZyAodHJ1ZSkuXG4gKiBAcHJvcGVydHkge09iamVjdH0gdGltZXN0YW1wIC0gVGltZXN0YW1wIGRpc3BsYXkgb3B0aW9uLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHRpbWVzdGFtcC50eXBlIC0gVGhlIHR5cGUgb2YgdGhlIHRpbWVzdGFtcCBvcHRpb24gKGJvb2xlYW4pLlxuICogQHByb3BlcnR5IHtib29sZWFufSB0aW1lc3RhbXAuZGVmYXVsdCAtIFRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aW1lc3RhbXAgZGlzcGxheSAodHJ1ZSkuXG4gKiBAcHJvcGVydHkge09iamVjdH0gYmFubmVyIC0gQmFubmVyIGRpc3BsYXkgb3B0aW9uLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGJhbm5lci50eXBlIC0gVGhlIHR5cGUgb2YgdGhlIGJhbm5lciBvcHRpb24gKGJvb2xlYW4pLlxuICogQHByb3BlcnR5IHtib29sZWFufSBiYW5uZXIuZGVmYXVsdCAtIFRoZSBkZWZhdWx0IHZhbHVlIGZvciBiYW5uZXIgZGlzcGxheSAoZmFsc2UpLlxuICogQG1lbWJlck9mIG1vZHVsZTp1dGlsc1xuICovXG5leHBvcnQgY29uc3QgRGVmYXVsdENvbW1hbmRPcHRpb25zID0ge1xuICB2ZXJib3NlOiB7XG4gICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgc2hvcnQ6IFwiVlwiLFxuICAgIGRlZmF1bHQ6IHVuZGVmaW5lZCxcbiAgfSxcbiAgdmVyc2lvbjoge1xuICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgIHNob3J0OiBcInZcIixcbiAgICBkZWZhdWx0OiB1bmRlZmluZWQsXG4gIH0sXG4gIGhlbHA6IHtcbiAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgICBzaG9ydDogXCJoXCIsXG4gICAgZGVmYXVsdDogZmFsc2UsXG4gIH0sXG4gIGxvZ0xldmVsOiB7XG4gICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICBkZWZhdWx0OiBcImluZm9cIixcbiAgfSxcbiAgbG9nU3R5bGU6IHtcbiAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgICBkZWZhdWx0OiB0cnVlLFxuICB9LFxuICB0aW1lc3RhbXA6IHtcbiAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgICBkZWZhdWx0OiB0cnVlLFxuICB9LFxuICBiYW5uZXI6IHtcbiAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgICBkZWZhdWx0OiB0cnVlLFxuICB9LFxufTtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gRGVmYXVsdCBjb21tYW5kIHZhbHVlcyBkZXJpdmVkIGZyb20gRGVmYXVsdENvbW1hbmRPcHRpb25zLlxuICogQHN1bW1hcnkgQ3JlYXRlcyBhbiBvYmplY3Qgd2l0aCB0aGUgZGVmYXVsdCB2YWx1ZXMgb2YgYWxsIG9wdGlvbnMgZGVmaW5lZCBpbiBEZWZhdWx0Q29tbWFuZE9wdGlvbnMuXG4gKiBAY29uc3QgRGVmYXVsdENvbW1hbmRWYWx1ZXNcbiAqIEB0eXBlZGVmIHtPYmplY3R9IERlZmF1bHRDb21tYW5kVmFsdWVzXG4gKiBAcHJvcGVydHkge3Vua25vd259IFtrZXk6IHN0cmluZ10gLSBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgZWFjaCBvcHRpb24gaW4gRGVmYXVsdENvbW1hbmRPcHRpb25zLlxuICogQG1lbWJlck9mIG1vZHVsZTp1dGlsc1xuICovXG5leHBvcnQgY29uc3QgRGVmYXVsdENvbW1hbmRWYWx1ZXM6IHtcbiAgW2sgaW4ga2V5b2YgdHlwZW9mIERlZmF1bHRDb21tYW5kT3B0aW9uc106IHVua25vd247XG59ID0gT2JqZWN0LmtleXMoRGVmYXVsdENvbW1hbmRPcHRpb25zKS5yZWR1Y2UoXG4gIChhY2M6IFJlY29yZDxrZXlvZiB0eXBlb2YgRGVmYXVsdENvbW1hbmRPcHRpb25zLCB1bmtub3duPiwga2V5OiBzdHJpbmcpID0+IHtcbiAgICBhY2Nba2V5IGFzIGtleW9mIHR5cGVvZiBEZWZhdWx0Q29tbWFuZE9wdGlvbnNdID1cbiAgICAgIERlZmF1bHRDb21tYW5kT3B0aW9uc1trZXkgYXMga2V5b2YgdHlwZW9mIERlZmF1bHRDb21tYW5kT3B0aW9uc10uZGVmYXVsdDtcbiAgICByZXR1cm4gYWNjO1xuICB9LFxuICB7fSBhcyBSZWNvcmQ8a2V5b2YgdHlwZW9mIERlZmF1bHRDb21tYW5kVmFsdWVzLCB1bmtub3duPlxuKTtcbiIsIi8qKlxuICogQGRlc2NyaXB0aW9uIFBhZHMgdGhlIGVuZCBvZiBhIHN0cmluZyB3aXRoIGEgc3BlY2lmaWVkIGNoYXJhY3Rlci5cbiAqIEBzdW1tYXJ5IEV4dGVuZHMgdGhlIGlucHV0IHN0cmluZyB0byBhIHNwZWNpZmllZCBsZW5ndGggYnkgYWRkaW5nIGEgcGFkZGluZyBjaGFyYWN0ZXIgdG8gdGhlIGVuZC5cbiAqIElmIHRoZSBpbnB1dCBzdHJpbmcgaXMgYWxyZWFkeSBsb25nZXIgdGhhbiB0aGUgc3BlY2lmaWVkIGxlbmd0aCwgaXQgaXMgcmV0dXJuZWQgdW5jaGFuZ2VkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHIgLSBUaGUgaW5wdXQgc3RyaW5nIHRvIGJlIHBhZGRlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBsZW5ndGggLSBUaGUgZGVzaXJlZCB0b3RhbCBsZW5ndGggb2YgdGhlIHJlc3VsdGluZyBzdHJpbmcuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2NoYXI9XCIgXCJdIC0gVGhlIGNoYXJhY3RlciB0byB1c2UgZm9yIHBhZGRpbmcuIERlZmF1bHRzIHRvIGEgc3BhY2UuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBwYWRkZWQgc3RyaW5nLlxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBwYWRkaW5nIGNoYXJhY3RlciBpcyBub3QgZXhhY3RseSBvbmUgY2hhcmFjdGVyIGxvbmcuXG4gKlxuICogQGZ1bmN0aW9uIHBhZEVuZFxuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6dXRpbHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhZEVuZChcbiAgc3RyOiBzdHJpbmcsXG4gIGxlbmd0aDogbnVtYmVyLFxuICBjaGFyOiBzdHJpbmcgPSBcIiBcIlxuKTogc3RyaW5nIHtcbiAgaWYgKGNoYXIubGVuZ3RoICE9PSAxKVxuICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgY2hhcmFjdGVyIGxlbmd0aCBmb3IgcGFkZGluZy4gbXVzdCBiZSBvbmUhXCIpO1xuICByZXR1cm4gc3RyLnBhZEVuZChsZW5ndGgsIGNoYXIpO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBSZXBsYWNlcyBwbGFjZWhvbGRlcnMgaW4gYSBzdHJpbmcgd2l0aCBwcm92aWRlZCB2YWx1ZXMuXG4gKiBAc3VtbWFyeSBJbnRlcnBvbGF0ZXMgYSBzdHJpbmcgYnkgcmVwbGFjaW5nIHBsYWNlaG9sZGVycyBvZiB0aGUgZm9ybSAke3ZhcmlhYmxlTmFtZX1cbiAqIHdpdGggY29ycmVzcG9uZGluZyB2YWx1ZXMgZnJvbSB0aGUgcHJvdmlkZWQgb2JqZWN0LiBJZiBhIHBsYWNlaG9sZGVyIGRvZXNuJ3QgaGF2ZVxuICogYSBjb3JyZXNwb25kaW5nIHZhbHVlLCBpdCBpcyBsZWZ0IHVuY2hhbmdlZCBpbiB0aGUgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dCAtIFRoZSBpbnB1dCBzdHJpbmcgY29udGFpbmluZyBwbGFjZWhvbGRlcnMgdG8gYmUgcmVwbGFjZWQuXG4gKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIG51bWJlciB8IHN0cmluZz59IHZhbHVlcyAtIEFuIG9iamVjdCBjb250YWluaW5nIGtleS12YWx1ZSBwYWlycyBmb3IgcmVwbGFjZW1lbnQuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBpbnRlcnBvbGF0ZWQgc3RyaW5nIHdpdGggcGxhY2Vob2xkZXJzIHJlcGxhY2VkIGJ5IHRoZWlyIGNvcnJlc3BvbmRpbmcgdmFsdWVzLlxuICpcbiAqIEBmdW5jdGlvbiBwYXRjaFBsYWNlaG9sZGVyc1xuICpcbiAqIEBtZXJtYWlkXG4gKiBzZXF1ZW5jZURpYWdyYW1cbiAqICAgcGFydGljaXBhbnQgQ2FsbGVyXG4gKiAgIHBhcnRpY2lwYW50IHBhdGNoU3RyaW5nXG4gKiAgIHBhcnRpY2lwYW50IFN0cmluZy5yZXBsYWNlXG4gKiAgIENhbGxlci0+PnBhdGNoU3RyaW5nOiBDYWxsIHdpdGggaW5wdXQgYW5kIHZhbHVlc1xuICogICBwYXRjaFN0cmluZy0+PlN0cmluZy5yZXBsYWNlOiBDYWxsIHdpdGggcmVnZXggYW5kIHJlcGxhY2VtZW50IGZ1bmN0aW9uXG4gKiAgIFN0cmluZy5yZXBsYWNlLT4+cGF0Y2hTdHJpbmc6IFJldHVybiByZXBsYWNlZCBzdHJpbmdcbiAqICAgcGF0Y2hTdHJpbmctLT4+Q2FsbGVyOiBSZXR1cm4gcGF0Y2hlZCBzdHJpbmdcbiAqXG4gKiBAbWVtYmVyT2YgbW9kdWxlOnV0aWxzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXRjaFBsYWNlaG9sZGVycyhcbiAgaW5wdXQ6IHN0cmluZyxcbiAgdmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXIgfCBzdHJpbmc+XG4pOiBzdHJpbmcge1xuICByZXR1cm4gaW5wdXQucmVwbGFjZShcbiAgICAvXFwkXFx7KFthLXpBLVowLTlfXSspXFx9L2csXG4gICAgKG1hdGNoLCB2YXJpYWJsZSkgPT4gKHZhbHVlc1t2YXJpYWJsZSBhcyBzdHJpbmddIGFzIHN0cmluZykgfHwgbWF0Y2hcbiAgKTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gUmVwbGFjZXMgb2NjdXJyZW5jZXMgb2Yga2V5cyB3aXRoIHRoZWlyIGNvcnJlc3BvbmRpbmcgdmFsdWVzIGluIGEgc3RyaW5nLlxuICogQHN1bW1hcnkgSXRlcmF0ZXMgdGhyb3VnaCBhIHNldCBvZiBrZXktdmFsdWUgcGFpcnMgYW5kIHJlcGxhY2VzIGFsbCBvY2N1cnJlbmNlcyBvZiBlYWNoIGtleVxuICogaW4gdGhlIGlucHV0IHN0cmluZyB3aXRoIGl0cyBjb3JyZXNwb25kaW5nIHZhbHVlLiBTdXBwb3J0cyByZWd1bGFyIGV4cHJlc3Npb24gZmxhZ3MgZm9yIGN1c3RvbWl6ZWQgcmVwbGFjZW1lbnQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGlucHV0IC0gVGhlIGlucHV0IHN0cmluZyBpbiB3aGljaCByZXBsYWNlbWVudHMgd2lsbCBiZSBtYWRlLlxuICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBudW1iZXIgfCBzdHJpbmc+fSB2YWx1ZXMgLSBBbiBvYmplY3QgY29udGFpbmluZyBrZXktdmFsdWUgcGFpcnMgZm9yIHJlcGxhY2VtZW50LlxuICogQHBhcmFtIHtzdHJpbmd9IFtmbGFncz1cImdcIl0gLSBSZWd1bGFyIGV4cHJlc3Npb24gZmxhZ3MgdG8gY29udHJvbCB0aGUgcmVwbGFjZW1lbnQgYmVoYXZpb3IuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBzdHJpbmcgd2l0aCBhbGwgc3BlY2lmaWVkIHJlcGxhY2VtZW50cyBhcHBsaWVkLlxuICpcbiAqIEBmdW5jdGlvbiBwYXRjaFN0cmluZ1xuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6dXRpbHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhdGNoU3RyaW5nKFxuICBpbnB1dDogc3RyaW5nLFxuICB2YWx1ZXM6IFJlY29yZDxzdHJpbmcsIG51bWJlciB8IHN0cmluZz4sXG4gIGZsYWdzOiBzdHJpbmcgPSBcImdcIlxuKTogc3RyaW5nIHtcbiAgT2JqZWN0LmVudHJpZXModmFsdWVzKS5mb3JFYWNoKChba2V5LCB2YWxdKSA9PiB7XG4gICAgY29uc3QgcmVnZXhwID0gbmV3IFJlZ0V4cChlc2NhcGVSZWdFeHAoa2V5KSwgZmxhZ3MpO1xuICAgIGlucHV0ID0gaW5wdXQucmVwbGFjZShyZWdleHAsIHZhbCBhcyBzdHJpbmcpO1xuICB9KTtcbiAgcmV0dXJuIGlucHV0O1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBDb252ZXJ0cyBhIHN0cmluZyB0byBjYW1lbENhc2UuXG4gKiBAc3VtbWFyeSBUcmFuc2Zvcm1zIHRoZSBpbnB1dCBzdHJpbmcgaW50byBjYW1lbENhc2UgZm9ybWF0LCB3aGVyZSB3b3JkcyBhcmUgam9pbmVkIHdpdGhvdXQgc3BhY2VzXG4gKiBhbmQgZWFjaCB3b3JkIGFmdGVyIHRoZSBmaXJzdCBzdGFydHMgd2l0aCBhIGNhcGl0YWwgbGV0dGVyLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gVGhlIGlucHV0IHN0cmluZyB0byBiZSBjb252ZXJ0ZWQuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBpbnB1dCBzdHJpbmcgY29udmVydGVkIHRvIGNhbWVsQ2FzZS5cbiAqXG4gKiBAZnVuY3Rpb24gdG9DYW1lbENhc2VcbiAqXG4gKiBAbWVtYmVyT2YgbW9kdWxlOnV0aWxzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0NhbWVsQ2FzZSh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gdGV4dFxuICAgIC5yZXBsYWNlKC8oPzpeXFx3fFtBLVpdfFxcYlxcdykvZywgKHdvcmQsIGluZGV4KSA9PlxuICAgICAgaW5kZXggPT09IDAgPyB3b3JkLnRvTG93ZXJDYXNlKCkgOiB3b3JkLnRvVXBwZXJDYXNlKClcbiAgICApXG4gICAgLnJlcGxhY2UoL1xccysvZywgXCJcIik7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIENvbnZlcnRzIGEgc3RyaW5nIHRvIEVOVklST05NRU5UX1ZBUklBQkxFIGZvcm1hdC5cbiAqIEBzdW1tYXJ5IFRyYW5zZm9ybXMgdGhlIGlucHV0IHN0cmluZyBpbnRvIHVwcGVyY2FzZSB3aXRoIHdvcmRzIHNlcGFyYXRlZCBieSB1bmRlcnNjb3JlcyxcbiAqIHR5cGljYWxseSB1c2VkIGZvciBlbnZpcm9ubWVudCB2YXJpYWJsZSBuYW1lcy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIFRoZSBpbnB1dCBzdHJpbmcgdG8gYmUgY29udmVydGVkLlxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgaW5wdXQgc3RyaW5nIGNvbnZlcnRlZCB0byBFTlZJUk9OTUVOVF9WQVJJQUJMRSBmb3JtYXQuXG4gKlxuICogQGZ1bmN0aW9uIHRvRU5WRm9ybWF0XG4gKlxuICogQG1lbWJlck9mIG1vZHVsZTp1dGlsc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdG9FTlZGb3JtYXQodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRvU25ha2VDYXNlKHRleHQpLnRvVXBwZXJDYXNlKCk7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIENvbnZlcnRzIGEgc3RyaW5nIHRvIHNuYWtlX2Nhc2UuXG4gKiBAc3VtbWFyeSBUcmFuc2Zvcm1zIHRoZSBpbnB1dCBzdHJpbmcgaW50byBsb3dlcmNhc2Ugd2l0aCB3b3JkcyBzZXBhcmF0ZWQgYnkgdW5kZXJzY29yZXMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBUaGUgaW5wdXQgc3RyaW5nIHRvIGJlIGNvbnZlcnRlZC5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGlucHV0IHN0cmluZyBjb252ZXJ0ZWQgdG8gc25ha2VfY2FzZS5cbiAqXG4gKiBAZnVuY3Rpb24gdG9TbmFrZUNhc2VcbiAqXG4gKiBAbWVtYmVyT2YgbW9kdWxlOnV0aWxzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b1NuYWtlQ2FzZSh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gdGV4dFxuICAgIC5yZXBsYWNlKC8oW2Etel0pKFtBLVpdKS9nLCBcIiQxXyQyXCIpXG4gICAgLnJlcGxhY2UoL1tcXHMtXSsvZywgXCJfXCIpXG4gICAgLnRvTG93ZXJDYXNlKCk7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIENvbnZlcnRzIGEgc3RyaW5nIHRvIGtlYmFiLWNhc2UuXG4gKiBAc3VtbWFyeSBUcmFuc2Zvcm1zIHRoZSBpbnB1dCBzdHJpbmcgaW50byBsb3dlcmNhc2Ugd2l0aCB3b3JkcyBzZXBhcmF0ZWQgYnkgaHlwaGVucy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIFRoZSBpbnB1dCBzdHJpbmcgdG8gYmUgY29udmVydGVkLlxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgaW5wdXQgc3RyaW5nIGNvbnZlcnRlZCB0byBrZWJhYi1jYXNlLlxuICpcbiAqIEBmdW5jdGlvbiB0b0tlYmFiQ2FzZVxuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6dXRpbHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvS2ViYWJDYXNlKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0ZXh0XG4gICAgLnJlcGxhY2UoLyhbYS16XSkoW0EtWl0pL2csIFwiJDEtJDJcIilcbiAgICAucmVwbGFjZSgvW1xcc19dKy9nLCBcIi1cIilcbiAgICAudG9Mb3dlckNhc2UoKTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQ29udmVydHMgYSBzdHJpbmcgdG8gUGFzY2FsQ2FzZS5cbiAqIEBzdW1tYXJ5IFRyYW5zZm9ybXMgdGhlIGlucHV0IHN0cmluZyBpbnRvIFBhc2NhbENhc2UgZm9ybWF0LCB3aGVyZSB3b3JkcyBhcmUgam9pbmVkIHdpdGhvdXQgc3BhY2VzXG4gKiBhbmQgZWFjaCB3b3JkIHN0YXJ0cyB3aXRoIGEgY2FwaXRhbCBsZXR0ZXIuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBUaGUgaW5wdXQgc3RyaW5nIHRvIGJlIGNvbnZlcnRlZC5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGlucHV0IHN0cmluZyBjb252ZXJ0ZWQgdG8gUGFzY2FsQ2FzZS5cbiAqXG4gKiBAZnVuY3Rpb24gdG9QYXNjYWxDYXNlXG4gKlxuICogQG1lbWJlck9mIG1vZHVsZTp1dGlsc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdG9QYXNjYWxDYXNlKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0ZXh0XG4gICAgLnJlcGxhY2UoLyg/Ol5cXHd8W0EtWl18XFxiXFx3KS9nLCAod29yZCkgPT4gd29yZC50b1VwcGVyQ2FzZSgpKVxuICAgIC5yZXBsYWNlKC9cXHMrL2csIFwiXCIpO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBFc2NhcGVzIHNwZWNpYWwgY2hhcmFjdGVycyBpbiBhIHN0cmluZyBmb3IgdXNlIGluIGEgcmVndWxhciBleHByZXNzaW9uLlxuICogQHN1bW1hcnkgQWRkcyBiYWNrc2xhc2hlcyBiZWZvcmUgY2hhcmFjdGVycyB0aGF0IGhhdmUgc3BlY2lhbCBtZWFuaW5nIGluIHJlZ3VsYXIgZXhwcmVzc2lvbnMsXG4gKiBhbGxvd2luZyB0aGUgc3RyaW5nIHRvIGJlIHVzZWQgYXMgYSBsaXRlcmFsIG1hdGNoIGluIGEgUmVnRXhwLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgLSBUaGUgc3RyaW5nIHRvIGVzY2FwZSBmb3IgcmVndWxhciBleHByZXNzaW9uIHVzZS5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGVzY2FwZWQgc3RyaW5nIHNhZmUgZm9yIHVzZSBpbiByZWd1bGFyIGV4cHJlc3Npb25zLlxuICpcbiAqIEBmdW5jdGlvbiBlc2NhcGVSZWdFeHBcbiAqXG4gKiBAbWVtYmVyT2YgbW9kdWxlOnV0aWxzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlc2NhcGVSZWdFeHAoc3RyaW5nOiBzdHJpbmcpIHtcbiAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9bLiorP14ke30oKXxbXFxdXFxcXF0vZywgXCJcXFxcJCZcIik7IC8vICQmIG1lYW5zIHRoZSB3aG9sZSBtYXRjaGVkIHN0cmluZ1xufVxuIiwiLyoqXG4gKiBAZGVzY3JpcHRpb24gRGVmYXVsdCBlbmNvZGluZyBmb3IgdGV4dCBvcGVyYXRpb25zLlxuICogQHN1bW1hcnkgVGhlIHN0YW5kYXJkIFVURi04IGVuY29kaW5nIHVzZWQgZm9yIHRleHQgcHJvY2Vzc2luZy5cbiAqIEBjb25zdCB7c3RyaW5nfSBFbmNvZGluZ1xuICogQG1lbWJlck9mIG1vZHVsZTp1dGlsc1xuICovXG5leHBvcnQgY29uc3QgRW5jb2RpbmcgPSBcInV0Zi04XCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFJlZ3VsYXIgZXhwcmVzc2lvbiBmb3Igc2VtYW50aWMgdmVyc2lvbmluZy5cbiAqIEBzdW1tYXJ5IEEgcmVnZXggcGF0dGVybiB0byBtYXRjaCBhbmQgcGFyc2Ugc2VtYW50aWMgdmVyc2lvbiBzdHJpbmdzLlxuICogQGNvbnN0IHtSZWdFeHB9IFNlbVZlcnNpb25SZWdleFxuICogQG1lbWJlck9mIG1vZHVsZTp1dGlsc1xuICovXG5leHBvcnQgY29uc3QgU2VtVmVyc2lvblJlZ2V4ID1cbiAgL14oXFxkKylcXC4oXFxkKylcXC4oXFxkKykoPzotKFswLTlBLVphLXotXSsoPzpcXC5bMC05QS1aYS16XSkpKS9nO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBFbnVtIGZvciBzZW1hbnRpYyB2ZXJzaW9uIGNvbXBvbmVudHMuXG4gKiBAc3VtbWFyeSBEZWZpbmVzIHRoZSB0aHJlZSBsZXZlbHMgb2Ygc2VtYW50aWMgdmVyc2lvbmluZzogUEFUQ0gsIE1JTk9SLCBhbmQgTUFKT1IuXG4gKiBAZW51bSB7c3RyaW5nfVxuICogQG1lbWJlck9mIG1vZHVsZTp1dGlsc1xuICovXG5leHBvcnQgZW51bSBTZW1WZXJzaW9uIHtcbiAgLyoqIFBhdGNoIHZlcnNpb24gZm9yIGJhY2t3YXJkcy1jb21wYXRpYmxlIGJ1ZyBmaXhlcy4gKi9cbiAgUEFUQ0ggPSBcInBhdGNoXCIsXG4gIC8qKiBNaW5vciB2ZXJzaW9uIGZvciBiYWNrd2FyZHMtY29tcGF0aWJsZSBuZXcgZmVhdHVyZXMuICovXG4gIE1JTk9SID0gXCJtaW5vclwiLFxuICAvKiogTWFqb3IgdmVyc2lvbiBmb3IgY2hhbmdlcyB0aGF0IGJyZWFrIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LiAqL1xuICBNQUpPUiA9IFwibWFqb3JcIixcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gRmxhZyB0byBpbmRpY2F0ZSBub24tQ0kgZW52aXJvbm1lbnQuXG4gKiBAc3VtbWFyeSBVc2VkIHRvIHNwZWNpZnkgdGhhdCBhIGNvbW1hbmQgc2hvdWxkIHJ1biBvdXRzaWRlIG9mIGEgQ29udGludW91cyBJbnRlZ3JhdGlvbiBlbnZpcm9ubWVudC5cbiAqIEBjb25zdCB7c3RyaW5nfSBOb0NJRkxhZ1xuICogQG1lbWJlck9mIG1vZHVsZTp1dGlsc1xuICovXG5leHBvcnQgY29uc3QgTm9DSUZMYWcgPSBcIi1uby1jaVwiO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBLZXkgZm9yIHRoZSBzZXR1cCBzY3JpcHQgaW4gcGFja2FnZS5qc29uLlxuICogQHN1bW1hcnkgSWRlbnRpZmllcyB0aGUgc2NyaXB0IHRoYXQgcnVucyBhZnRlciBwYWNrYWdlIGluc3RhbGxhdGlvbi5cbiAqIEBjb25zdCB7c3RyaW5nfSBTZXR1cFNjcmlwdEtleVxuICogQG1lbWJlck9mIG1vZHVsZTp1dGlsc1xuICovXG5leHBvcnQgY29uc3QgU2V0dXBTY3JpcHRLZXkgPSBcInBvc3RpbnN0YWxsXCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEVudW0gZm9yIHZhcmlvdXMgYXV0aGVudGljYXRpb24gdG9rZW5zLlxuICogQHN1bW1hcnkgRGVmaW5lcyB0aGUgZmlsZSBuYW1lcyBmb3Igc3RvcmluZyBkaWZmZXJlbnQgdHlwZXMgb2YgYXV0aGVudGljYXRpb24gdG9rZW5zLlxuICogQGVudW0ge3N0cmluZ31cbiAqIEBtZW1iZXJPZiBtb2R1bGU6dXRpbHNcbiAqL1xuZXhwb3J0IGVudW0gVG9rZW5zIHtcbiAgLyoqIEdpdCBhdXRoZW50aWNhdGlvbiB0b2tlbiBmaWxlIG5hbWUuICovXG4gIEdJVCA9IFwiLnRva2VuXCIsXG4gIC8qKiBOUE0gYXV0aGVudGljYXRpb24gdG9rZW4gZmlsZSBuYW1lLiAqL1xuICBOUE0gPSBcIi5ucG10b2tlblwiLFxuICAvKiogRG9ja2VyIGF1dGhlbnRpY2F0aW9uIHRva2VuIGZpbGUgbmFtZS4gKi9cbiAgRE9DS0VSID0gXCIuZG9ja2VydG9rZW5cIixcbiAgLyoqIENvbmZsdWVuY2UgYXV0aGVudGljYXRpb24gdG9rZW4gZmlsZSBuYW1lLiAqL1xuICBDT05GTFVFTkNFID0gXCIuY29uZmx1ZW5jZS10b2tlblwiLFxufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBDb2RlIHVzZWQgdG8gaW5kaWNhdGUgYW4gb3BlcmF0aW9uIHdhcyBhYm9ydGVkLlxuICogQHN1bW1hcnkgU3RhbmRhcmQgbWVzc2FnZSB1c2VkIHdoZW4gYSBwcm9jZXNzIGlzIG1hbnVhbGx5IHRlcm1pbmF0ZWQuXG4gKiBAY29uc3Qge3N0cmluZ30gQWJvcnRDb2RlXG4gKiBAbWVtYmVyT2YgbW9kdWxlOnV0aWxzXG4gKi9cbmV4cG9ydCBjb25zdCBBYm9ydENvZGUgPSBcIkFib3J0ZWRcIjtcbiIsImltcG9ydCB7IEVuY29kaW5nIH0gZnJvbSBcIi4uL3V0aWxzL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgT3V0cHV0V3JpdGVyIH0gZnJvbSBcIi4vT3V0cHV0V3JpdGVyXCI7XG5pbXBvcnQgeyBQcm9taXNlRXhlY3V0b3IgfSBmcm9tIFwiLi4vdXRpbHMvdHlwZXNcIjtcbmltcG9ydCB7IE91dHB1dFR5cGUgfSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IHsgc3R5bGUgfSBmcm9tIFwic3R5bGVkLXN0cmluZy1idWlsZGVyXCI7XG5pbXBvcnQgeyBMb2dnZXIsIExvZ2dpbmcgfSBmcm9tIFwiQGRlY2FmLXRzL2xvZ2dpbmdcIjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQSBzdGFuZGFyZCBvdXRwdXQgd3JpdGVyIGZvciBoYW5kbGluZyBjb21tYW5kIGV4ZWN1dGlvbiBvdXRwdXQuXG4gKiBAc3VtbWFyeSBUaGlzIGNsYXNzIGltcGxlbWVudHMgdGhlIE91dHB1dFdyaXRlciBpbnRlcmZhY2UgYW5kIHByb3ZpZGVzIG1ldGhvZHMgZm9yXG4gKiBoYW5kbGluZyB2YXJpb3VzIHR5cGVzIG9mIG91dHB1dCBmcm9tIGNvbW1hbmQgZXhlY3V0aW9uLCBpbmNsdWRpbmcgc3RhbmRhcmQgb3V0cHV0LFxuICogZXJyb3Igb3V0cHV0LCBhbmQgZXhpdCBjb2Rlcy4gSXQgYWxzbyBpbmNsdWRlcyB1dGlsaXR5IG1ldGhvZHMgZm9yIHBhcnNpbmcgY29tbWFuZHNcbiAqIGFuZCByZXNvbHZpbmcgb3IgcmVqZWN0aW5nIHByb21pc2VzIGJhc2VkIG9uIGV4ZWN1dGlvbiByZXN1bHRzLlxuICpcbiAqIEB0ZW1wbGF0ZSBSIC0gVGhlIHR5cGUgb2YgdGhlIHJlc29sdmVkIHZhbHVlLCBkZWZhdWx0aW5nIHRvIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0gY21kIC0gVGhlIGNvbW1hbmQgc3RyaW5nIHRvIGJlIGV4ZWN1dGVkLlxuICogQHBhcmFtIGxvY2sgLSBBIFByb21pc2VFeGVjdXRvciB0byBjb250cm9sIHRoZSBhc3luY2hyb25vdXMgZmxvdy5cbiAqIEBwYXJhbSBhcmdzIC0gQWRkaXRpb25hbCBhcmd1bWVudHMgKHVudXNlZCBpbiB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbikuXG4gKlxuICogQGNsYXNzXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgU3RhbmRhcmRPdXRwdXRXcml0ZXIgfSBmcm9tICdAZGVjYWYtdHMvdXRpbHMnO1xuICogaW1wb3J0IHsgUHJvbWlzZUV4ZWN1dG9yIH0gZnJvbSAnQGRlY2FmLXRzL3V0aWxzJztcbiAqIFxuICogLy8gQ3JlYXRlIGEgcHJvbWlzZSBleGVjdXRvclxuICogY29uc3QgZXhlY3V0b3I6IFByb21pc2VFeGVjdXRvcjxzdHJpbmc+ID0ge1xuICogICByZXNvbHZlOiAodmFsdWUpID0+IGNvbnNvbGUubG9nKGBSZXNvbHZlZDogJHt2YWx1ZX1gKSxcbiAqICAgcmVqZWN0OiAoZXJyb3IpID0+IGNvbnNvbGUuZXJyb3IoYFJlamVjdGVkOiAke2Vycm9yLm1lc3NhZ2V9YClcbiAqIH07XG4gKiBcbiAqIC8vIENyZWF0ZSBhIHN0YW5kYXJkIG91dHB1dCB3cml0ZXJcbiAqIGNvbnN0IHdyaXRlciA9IG5ldyBTdGFuZGFyZE91dHB1dFdyaXRlcignbHMgLWxhJywgZXhlY3V0b3IpO1xuICogXG4gKiAvLyBVc2UgdGhlIHdyaXRlciB0byBoYW5kbGUgY29tbWFuZCBvdXRwdXRcbiAqIHdyaXRlci5kYXRhKCdGaWxlIGxpc3Qgb3V0cHV0Li4uJyk7XG4gKiB3cml0ZXIuZXhpdCgwLCBbJ0NvbW1hbmQgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5J10pO1xuICogYGBgXG4gKlxuICogQG1lcm1haWRcbiAqIHNlcXVlbmNlRGlhZ3JhbVxuICogICBwYXJ0aWNpcGFudCBDbGllbnRcbiAqICAgcGFydGljaXBhbnQgU3RhbmRhcmRPdXRwdXRXcml0ZXJcbiAqICAgcGFydGljaXBhbnQgTG9nZ2VyXG4gKiAgIHBhcnRpY2lwYW50IFByb21pc2VFeGVjdXRvclxuICogICBcbiAqICAgQ2xpZW50LT4+U3RhbmRhcmRPdXRwdXRXcml0ZXI6IG5ldyBTdGFuZGFyZE91dHB1dFdyaXRlcihjbWQsIGxvY2spXG4gKiAgIFN0YW5kYXJkT3V0cHV0V3JpdGVyLT4+TG9nZ2VyOiBMb2dnaW5nLmZvcihjbWQpXG4gKiAgIFxuICogICBDbGllbnQtPj5TdGFuZGFyZE91dHB1dFdyaXRlcjogZGF0YShjaHVuaylcbiAqICAgU3RhbmRhcmRPdXRwdXRXcml0ZXItPj5TdGFuZGFyZE91dHB1dFdyaXRlcjogbG9nKFwic3Rkb3V0XCIsIGNodW5rKVxuICogICBTdGFuZGFyZE91dHB1dFdyaXRlci0+PkxvZ2dlcjogbG9nZ2VyLmluZm8obG9nKVxuICogICBcbiAqICAgQ2xpZW50LT4+U3RhbmRhcmRPdXRwdXRXcml0ZXI6IGVycm9yKGNodW5rKVxuICogICBTdGFuZGFyZE91dHB1dFdyaXRlci0+PlN0YW5kYXJkT3V0cHV0V3JpdGVyOiBsb2coXCJzdGRlcnJcIiwgY2h1bmspXG4gKiAgIFN0YW5kYXJkT3V0cHV0V3JpdGVyLT4+TG9nZ2VyOiBsb2dnZXIuaW5mbyhsb2cpXG4gKiAgIFxuICogICBDbGllbnQtPj5TdGFuZGFyZE91dHB1dFdyaXRlcjogZXhpdChjb2RlLCBsb2dzKVxuICogICBTdGFuZGFyZE91dHB1dFdyaXRlci0+PlN0YW5kYXJkT3V0cHV0V3JpdGVyOiBsb2coXCJzdGRvdXRcIiwgZXhpdE1lc3NhZ2UpXG4gKiAgIGFsdCBjb2RlID09PSAwXG4gKiAgICAgU3RhbmRhcmRPdXRwdXRXcml0ZXItPj5TdGFuZGFyZE91dHB1dFdyaXRlcjogcmVzb2x2ZShsb2dzKVxuICogICAgIFN0YW5kYXJkT3V0cHV0V3JpdGVyLT4+UHJvbWlzZUV4ZWN1dG9yOiBsb2NrLnJlc29sdmUocmVhc29uKVxuICogICBlbHNlIGNvZGUgIT09IDBcbiAqICAgICBTdGFuZGFyZE91dHB1dFdyaXRlci0+PlN0YW5kYXJkT3V0cHV0V3JpdGVyOiByZWplY3QoZXJyb3IpXG4gKiAgICAgU3RhbmRhcmRPdXRwdXRXcml0ZXItPj5Qcm9taXNlRXhlY3V0b3I6IGxvY2sucmVqZWN0KHJlYXNvbilcbiAqICAgZW5kXG4gKi9cbmV4cG9ydCBjbGFzcyBTdGFuZGFyZE91dHB1dFdyaXRlcjxSID0gc3RyaW5nPiBpbXBsZW1lbnRzIE91dHB1dFdyaXRlciB7XG4gIHByb3RlY3RlZCBsb2dnZXI6IExvZ2dlcjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgY21kOiBzdHJpbmcsXG4gICAgcHJvdGVjdGVkIGxvY2s6IFByb21pc2VFeGVjdXRvcjxSPixcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgLi4uYXJnczogdW5rbm93bltdXG4gICkge1xuICAgIHRoaXMubG9nZ2VyID0gTG9nZ2luZy5mb3IodGhpcy5jbWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBMb2dzIG91dHB1dCB0byB0aGUgY29uc29sZS5cbiAgICogQHN1bW1hcnkgRm9ybWF0cyBhbmQgbG9ncyB0aGUgZ2l2ZW4gZGF0YSB3aXRoIGEgdGltZXN0YW1wIGFuZCB0eXBlIGluZGljYXRvci5cbiAgICpcbiAgICogQHBhcmFtIHR5cGUgLSBUaGUgdHlwZSBvZiBvdXRwdXQgKHN0ZG91dCBvciBzdGRlcnIpLlxuICAgKiBAcGFyYW0gZGF0YSAtIFRoZSBkYXRhIHRvIGJlIGxvZ2dlZC5cbiAgICovXG4gIHByb3RlY3RlZCBsb2codHlwZTogT3V0cHV0VHlwZSwgZGF0YTogc3RyaW5nIHwgQnVmZmVyKSB7XG4gICAgZGF0YSA9IEJ1ZmZlci5pc0J1ZmZlcihkYXRhKSA/IGRhdGEudG9TdHJpbmcoRW5jb2RpbmcpIDogZGF0YTtcbiAgICBjb25zdCBsb2cgPSB0eXBlID09PSBcInN0ZGVyclwiID8gc3R5bGUoZGF0YSkucmVkLnRleHQgOiBkYXRhO1xuICAgIHRoaXMubG9nZ2VyLmluZm8obG9nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gSGFuZGxlcyBzdGFuZGFyZCBvdXRwdXQgZGF0YS5cbiAgICogQHN1bW1hcnkgTG9ncyB0aGUgZ2l2ZW4gY2h1bmsgYXMgc3RhbmRhcmQgb3V0cHV0LlxuICAgKlxuICAgKiBAcGFyYW0gY2h1bmsgLSBUaGUgZGF0YSBjaHVuayB0byBiZSBsb2dnZWQuXG4gICAqL1xuICBkYXRhKGNodW5rOiBhbnkpIHtcbiAgICB0aGlzLmxvZyhcInN0ZG91dFwiLCBTdHJpbmcoY2h1bmspKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gSGFuZGxlcyBlcnJvciBvdXRwdXQgZGF0YS5cbiAgICogQHN1bW1hcnkgTG9ncyB0aGUgZ2l2ZW4gY2h1bmsgYXMgZXJyb3Igb3V0cHV0LlxuICAgKlxuICAgKiBAcGFyYW0gY2h1bmsgLSBUaGUgZXJyb3IgZGF0YSBjaHVuayB0byBiZSBsb2dnZWQuXG4gICAqL1xuICBlcnJvcihjaHVuazogYW55KSB7XG4gICAgdGhpcy5sb2coXCJzdGRlcnJcIiwgU3RyaW5nKGNodW5rKSk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEhhbmRsZXMgZXJyb3Igb2JqZWN0cy5cbiAgICogQHN1bW1hcnkgTG9ncyB0aGUgZXJyb3IgbWVzc2FnZSBmcm9tIHRoZSBnaXZlbiBFcnJvciBvYmplY3QuXG4gICAqXG4gICAqIEBwYXJhbSBlcnIgLSBUaGUgRXJyb3Igb2JqZWN0IHRvIGJlIGxvZ2dlZC5cbiAgICovXG4gIGVycm9ycyhlcnI6IEVycm9yKSB7XG4gICAgdGhpcy5sb2coXCJzdGRlcnJcIiwgYEVycm9yIGV4ZWN1dGluZyBjb21tYW5kIGV4aXRlZCA6ICR7ZXJyfWApO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBIYW5kbGVzIHRoZSBleGl0IG9mIGEgY29tbWFuZC5cbiAgICogQHN1bW1hcnkgTG9ncyB0aGUgZXhpdCBjb2RlIGFuZCByZXNvbHZlcyBvciByZWplY3RzIHRoZSBwcm9taXNlIGJhc2VkIG9uIHRoZSBjb2RlLlxuICAgKlxuICAgKiBAcGFyYW0gY29kZSAtIFRoZSBleGl0IGNvZGUgb2YgdGhlIGNvbW1hbmQuXG4gICAqIEBwYXJhbSBsb2dzIC0gQXJyYXkgb2YgbG9nIG1lc3NhZ2VzIHRvIGJlIHByb2Nlc3NlZCBiZWZvcmUgZXhpdGluZy5cbiAgICovXG4gIGV4aXQoY29kZTogbnVtYmVyIHwgc3RyaW5nLCBsb2dzOiBzdHJpbmdbXSkge1xuICAgIHRoaXMubG9nKFxuICAgICAgXCJzdGRvdXRcIixcbiAgICAgIGBjb21tYW5kIGV4aXRlZCBjb2RlIDogJHtjb2RlID09PSAwID8gc3R5bGUoY29kZS50b1N0cmluZygpKS5ncmVlbi50ZXh0IDogc3R5bGUoY29kZSA9PT0gbnVsbCA/IFwibnVsbFwiIDogY29kZS50b1N0cmluZygpKS5yZWQudGV4dH1gXG4gICAgKTtcbiAgICBpZiAoY29kZSA9PT0gMCkge1xuICAgICAgdGhpcy5yZXNvbHZlKGxvZ3MubWFwKChsKSA9PiBsLnRyaW0oKSkuam9pbihcIlxcblwiKSBhcyBSKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZWplY3QobmV3IEVycm9yKGxvZ3MubGVuZ3RoID8gbG9ncy5qb2luKFwiXFxuXCIpIDogY29kZS50b1N0cmluZygpKSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBQYXJzZXMgYSBjb21tYW5kIHN0cmluZyBvciBhcnJheSBpbnRvIGNvbXBvbmVudHMuXG4gICAqIEBzdW1tYXJ5IENvbnZlcnRzIHRoZSBjb21tYW5kIGludG8gYSBjb25zaXN0ZW50IGZvcm1hdCBhbmQgc3RvcmVzIGl0LCB0aGVuIHJldHVybnMgaXQgc3BsaXQgaW50byBjb21tYW5kIGFuZCBhcmd1bWVudHMuXG4gICAqXG4gICAqIEBwYXJhbSBjb21tYW5kIC0gVGhlIGNvbW1hbmQgYXMgYSBzdHJpbmcgb3IgYXJyYXkgb2Ygc3RyaW5ncy5cbiAgICogQHJldHVybiBBIHR1cGxlIGNvbnRhaW5pbmcgdGhlIGNvbW1hbmQgYW5kIGl0cyBhcmd1bWVudHMgYXMgc2VwYXJhdGUgZWxlbWVudHMuXG4gICAqL1xuICBwYXJzZUNvbW1hbmQoY29tbWFuZDogc3RyaW5nIHwgc3RyaW5nW10pOiBbc3RyaW5nLCBzdHJpbmdbXV0ge1xuICAgIGNvbW1hbmQgPSB0eXBlb2YgY29tbWFuZCA9PT0gXCJzdHJpbmdcIiA/IGNvbW1hbmQuc3BsaXQoXCIgXCIpIDogY29tbWFuZDtcbiAgICB0aGlzLmNtZCA9IGNvbW1hbmQuam9pbihcIiBcIik7XG4gICAgcmV0dXJuIFtjb21tYW5kWzBdLCBjb21tYW5kLnNsaWNlKDEpXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVzb2x2ZXMgdGhlIHByb21pc2Ugd2l0aCBhIHN1Y2Nlc3MgbWVzc2FnZS5cbiAgICogQHN1bW1hcnkgTG9ncyBhIHN1Y2Nlc3MgbWVzc2FnZSBhbmQgcmVzb2x2ZXMgdGhlIHByb21pc2Ugd2l0aCB0aGUgZ2l2ZW4gcmVhc29uLlxuICAgKlxuICAgKiBAcGFyYW0gcmVhc29uIC0gVGhlIHJlYXNvbiBmb3IgcmVzb2x2aW5nIHRoZSBwcm9taXNlLlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlc29sdmUocmVhc29uOiBSKSB7XG4gICAgdGhpcy5sb2coXG4gICAgICBcInN0ZG91dFwiLFxuICAgICAgYCR7dGhpcy5jbWR9IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseTogJHtzdHlsZShyZWFzb24gPyBcInJhbiB0byBjb21wbGV0aW9uXCIgOiAocmVhc29uIGFzIHN0cmluZykpLmdyZWVufWBcbiAgICApO1xuICAgIHRoaXMubG9jay5yZXNvbHZlKHJlYXNvbik7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFJlamVjdHMgdGhlIHByb21pc2Ugd2l0aCBhbiBlcnJvciBtZXNzYWdlLlxuICAgKiBAc3VtbWFyeSBMb2dzIGFuIGVycm9yIG1lc3NhZ2UgYW5kIHJlamVjdHMgdGhlIHByb21pc2Ugd2l0aCB0aGUgZ2l2ZW4gcmVhc29uLlxuICAgKlxuICAgKiBAcGFyYW0gcmVhc29uIC0gVGhlIHJlYXNvbiBmb3IgcmVqZWN0aW5nIHRoZSBwcm9taXNlLCBlaXRoZXIgYSBudW1iZXIgKGV4aXQgY29kZSkgb3IgYSBzdHJpbmcuXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVqZWN0KHJlYXNvbjogbnVtYmVyIHwgc3RyaW5nIHwgRXJyb3IpIHtcbiAgICBpZiAoIShyZWFzb24gaW5zdGFuY2VvZiBFcnJvcikpIHtcbiAgICAgIHJlYXNvbiA9IG5ldyBFcnJvcihcbiAgICAgICAgdHlwZW9mIHJlYXNvbiA9PT0gXCJudW1iZXJcIiA/IGBFeGl0IGNvZGUgJHtyZWFzb259YCA6IHJlYXNvblxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy5sb2coXG4gICAgICBcInN0ZGVyclwiLFxuICAgICAgYCR7dGhpcy5jbWR9IGZhaWxlZCB0byBleGVjdXRlOiAke3N0eWxlKHJlYXNvbi5tZXNzYWdlKS5yZWR9YFxuICAgICk7XG4gICAgdGhpcy5sb2NrLnJlamVjdChyZWFzb24pO1xuICB9XG59XG4iLCJpbXBvcnQge1xuICBDaGlsZFByb2Nlc3NXaXRob3V0TnVsbFN0cmVhbXMsXG4gIHNwYXduLFxuICBTcGF3bk9wdGlvbnNXaXRob3V0U3RkaW8sXG59IGZyb20gXCJjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgeyBTdGFuZGFyZE91dHB1dFdyaXRlciB9IGZyb20gXCIuLi93cml0ZXJzL1N0YW5kYXJkT3V0cHV0V3JpdGVyXCI7XG5pbXBvcnQgeyBDb21tYW5kUmVzdWx0IH0gZnJvbSBcIi4vdHlwZXNcIjtcbmltcG9ydCB7IE91dHB1dFdyaXRlckNvbnN0cnVjdG9yIH0gZnJvbSBcIi4uL3dyaXRlcnMvdHlwZXNcIjtcbmltcG9ydCB7IEFib3J0Q29kZSB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgTG9nZ2VyLCBMb2dnaW5nIH0gZnJvbSBcIkBkZWNhZi10cy9sb2dnaW5nXCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIENyZWF0ZXMgYSBsb2NrZWQgdmVyc2lvbiBvZiBhIGZ1bmN0aW9uLlxuICogQHN1bW1hcnkgVGhpcyBoaWdoZXItb3JkZXIgZnVuY3Rpb24gdGFrZXMgYSBmdW5jdGlvbiBhbmQgcmV0dXJucyBhIG5ldyBmdW5jdGlvbiB0aGF0IGVuc3VyZXNcbiAqIHNlcXVlbnRpYWwgZXhlY3V0aW9uIG9mIHRoZSBvcmlnaW5hbCBmdW5jdGlvbiwgZXZlbiB3aGVuIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBjb25jdXJyZW50bHkuXG4gKiBJdCB1c2VzIGEgUHJvbWlzZS1iYXNlZCBsb2NraW5nIG1lY2hhbmlzbSB0byBxdWV1ZSBmdW5jdGlvbiBjYWxscy5cbiAqXG4gKiBAdGVtcGxhdGUgUiAtIFRoZSByZXR1cm4gdHlwZSBvZiB0aGUgaW5wdXQgZnVuY3Rpb24uXG4gKlxuICogQHBhcmFtIGYgLSBUaGUgZnVuY3Rpb24gdG8gYmUgbG9ja2VkLiBJdCBjYW4gdGFrZSBhbnkgbnVtYmVyIG9mIHBhcmFtZXRlcnMgYW5kIHJldHVybiBhIHZhbHVlIG9mIHR5cGUgUi5cbiAqIEByZXR1cm4gQSBuZXcgZnVuY3Rpb24gd2l0aCB0aGUgc2FtZSBzaWduYXR1cmUgYXMgdGhlIGlucHV0IGZ1bmN0aW9uLCBidXQgd2l0aCBzZXF1ZW50aWFsIGV4ZWN1dGlvbiBndWFyYW50ZWVkLlxuICpcbiAqIEBmdW5jdGlvbiBsb2NraWZ5XG4gKlxuICogQG1lcm1haWRcbiAqIHNlcXVlbmNlRGlhZ3JhbVxuICogICBwYXJ0aWNpcGFudCBDYWxsZXJcbiAqICAgcGFydGljaXBhbnQgTG9ja2VkRnVuY3Rpb25cbiAqICAgcGFydGljaXBhbnQgT3JpZ2luYWxGdW5jdGlvblxuICogICBDYWxsZXItPj5Mb2NrZWRGdW5jdGlvbjogQ2FsbCB3aXRoIHBhcmFtc1xuICogICBMb2NrZWRGdW5jdGlvbi0+PkxvY2tlZEZ1bmN0aW9uOiBDaGVjayBjdXJyZW50IGxvY2tcbiAqICAgYWx0IExvY2sgaXMgcmVzb2x2ZWRcbiAqICAgICBMb2NrZWRGdW5jdGlvbi0+Pk9yaWdpbmFsRnVuY3Rpb246IEV4ZWN1dGUgd2l0aCBwYXJhbXNcbiAqICAgICBPcmlnaW5hbEZ1bmN0aW9uLS0+PkxvY2tlZEZ1bmN0aW9uOiBSZXR1cm4gcmVzdWx0XG4gKiAgICAgTG9ja2VkRnVuY3Rpb24tLT4+Q2FsbGVyOiBSZXR1cm4gcmVzdWx0XG4gKiAgIGVsc2UgTG9jayBpcyBwZW5kaW5nXG4gKiAgICAgTG9ja2VkRnVuY3Rpb24tPj5Mb2NrZWRGdW5jdGlvbjogUXVldWUgZXhlY3V0aW9uXG4gKiAgICAgTG9ja2VkRnVuY3Rpb24tLT4+Q2FsbGVyOiBSZXR1cm4gcHJvbWlzZVxuICogICAgIE5vdGUgb3ZlciBMb2NrZWRGdW5jdGlvbjogV2FpdCBmb3IgcHJldmlvdXMgZXhlY3V0aW9uXG4gKiAgICAgTG9ja2VkRnVuY3Rpb24tPj5PcmlnaW5hbEZ1bmN0aW9uOiBFeGVjdXRlIHdpdGggcGFyYW1zXG4gKiAgICAgT3JpZ2luYWxGdW5jdGlvbi0tPj5Mb2NrZWRGdW5jdGlvbjogUmV0dXJuIHJlc3VsdFxuICogICAgIExvY2tlZEZ1bmN0aW9uLS0+PkNhbGxlcjogUmVzb2x2ZSBwcm9taXNlIHdpdGggcmVzdWx0XG4gKiAgIGVuZFxuICogICBMb2NrZWRGdW5jdGlvbi0+PkxvY2tlZEZ1bmN0aW9uOiBVcGRhdGUgbG9ja1xuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6dXRpbHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvY2tpZnk8Uj4oZjogKC4uLnBhcmFtczogdW5rbm93bltdKSA9PiBSKSB7XG4gIGxldCBsb2NrOiBQcm9taXNlPFIgfCB2b2lkPiA9IFByb21pc2UucmVzb2x2ZSgpO1xuICByZXR1cm4gKC4uLnBhcmFtczogdW5rbm93bltdKSA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gbG9jay50aGVuKCgpID0+IGYoLi4ucGFyYW1zKSk7XG4gICAgbG9jayA9IHJlc3VsdC5jYXRjaCgoKSA9PiB7fSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQ2hhaW5zIG11bHRpcGxlIGFib3J0IHNpZ25hbHMgdG8gYSBjb250cm9sbGVyLlxuICogQHN1bW1hcnkgQ3JlYXRlcyBhIG1lY2hhbmlzbSB3aGVyZSBtdWx0aXBsZSBhYm9ydCBzaWduYWxzIGNhbiB0cmlnZ2VyIGEgc2luZ2xlIGFib3J0IGNvbnRyb2xsZXIuXG4gKiBUaGlzIGlzIHVzZWZ1bCBmb3IgY29vcmRpbmF0aW5nIGNhbmNlbGxhdGlvbiBhY3Jvc3MgbXVsdGlwbGUgYXN5bmNocm9ub3VzIG9wZXJhdGlvbnMuXG4gKlxuICogQHBhcmFtIHtBYm9ydENvbnRyb2xsZXJ9IGNvbnRyb2xsZXIgLSBUaGUgYWJvcnQgY29udHJvbGxlciB0byBiZSB0cmlnZ2VyZWQgYnkgc2lnbmFscy5cbiAqIEBwYXJhbSB7Li4uQWJvcnRTaWduYWx9IHNpZ25hbHMgLSBPbmUgb3IgbW9yZSBhYm9ydCBzaWduYWxzIHRoYXQgY2FuIHRyaWdnZXIgdGhlIGNvbnRyb2xsZXIuXG4gKiBAcmV0dXJuIHtBYm9ydENvbnRyb2xsZXJ9IFRoZSBpbnB1dCBjb250cm9sbGVyLCBub3cgY29ubmVjdGVkIHRvIHRoZSBzaWduYWxzLlxuICpcbiAqIEBmdW5jdGlvbiBjaGFpbkFib3J0Q29udHJvbGxlclxuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6dXRpbHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoYWluQWJvcnRDb250cm9sbGVyKFxuICBjb250cm9sbGVyOiBBYm9ydENvbnRyb2xsZXIsXG4gIC4uLnNpZ25hbHM6IEFib3J0U2lnbmFsW11cbik6IEFib3J0Q29udHJvbGxlcjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhIG5ldyBjb250cm9sbGVyIGNoYWluZWQgdG8gbXVsdGlwbGUgYWJvcnQgc2lnbmFscy5cbiAqIEBzdW1tYXJ5IENyZWF0ZXMgYSBuZXcgYWJvcnQgY29udHJvbGxlciB0aGF0IHdpbGwgYmUgdHJpZ2dlcmVkIGlmIGFueSBvZiB0aGUgcHJvdmlkZWQgc2lnbmFscyBhcmUgYWJvcnRlZC5cbiAqXG4gKiBAcGFyYW0gey4uLkFib3J0U2lnbmFsfSBzaWduYWxzIC0gT25lIG9yIG1vcmUgYWJvcnQgc2lnbmFscyB0aGF0IGNhbiB0cmlnZ2VyIHRoZSBuZXcgY29udHJvbGxlci5cbiAqIEByZXR1cm4ge0Fib3J0Q29udHJvbGxlcn0gQSBuZXcgYWJvcnQgY29udHJvbGxlciBjb25uZWN0ZWQgdG8gdGhlIHNpZ25hbHMuXG4gKlxuICogQGZ1bmN0aW9uIGNoYWluQWJvcnRDb250cm9sbGVyXG4gKlxuICogQG1lbWJlck9mIG1vZHVsZTp1dGlsc1xuICovXG5leHBvcnQgZnVuY3Rpb24gY2hhaW5BYm9ydENvbnRyb2xsZXIoXG4gIC4uLnNpZ25hbHM6IEFib3J0U2lnbmFsW11cbik6IEFib3J0Q29udHJvbGxlcjtcblxuZXhwb3J0IGZ1bmN0aW9uIGNoYWluQWJvcnRDb250cm9sbGVyKFxuICBhcmd1bWVudDA6IEFib3J0Q29udHJvbGxlciB8IEFib3J0U2lnbmFsLFxuICAuLi5yZW1haW5kZXI6IEFib3J0U2lnbmFsW11cbik6IEFib3J0Q29udHJvbGxlciB7XG4gIGxldCBzaWduYWxzOiBBYm9ydFNpZ25hbFtdO1xuICBsZXQgY29udHJvbGxlcjogQWJvcnRDb250cm9sbGVyO1xuXG4gIC8vIG5vcm1hbGl6ZSBhcmdzXG4gIGlmIChhcmd1bWVudDAgaW5zdGFuY2VvZiBBYm9ydFNpZ25hbCkge1xuICAgIGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgc2lnbmFscyA9IFthcmd1bWVudDAsIC4uLnJlbWFpbmRlcl07XG4gIH0gZWxzZSB7XG4gICAgY29udHJvbGxlciA9IGFyZ3VtZW50MDtcbiAgICBzaWduYWxzID0gcmVtYWluZGVyO1xuICB9XG5cbiAgLy8gaWYgdGhlIGNvbnRyb2xsZXIgaXMgYWxyZWFkeSBhYm9ydGVkLCBleGl0IGVhcmx5XG4gIGlmIChjb250cm9sbGVyLnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgcmV0dXJuIGNvbnRyb2xsZXI7XG4gIH1cblxuICBjb25zdCBoYW5kbGVyID0gKCkgPT4gY29udHJvbGxlci5hYm9ydCgpO1xuXG4gIGZvciAoY29uc3Qgc2lnbmFsIG9mIHNpZ25hbHMpIHtcbiAgICAvLyBjaGVjayBiZWZvcmUgYWRkaW5nISAoYW5kIGFzc3VtZSB0aGVyZSBpcyBubyBwb3NzaWJsZSB3YXkgdGhhdCB0aGUgc2lnbmFsIGNvdWxkXG4gICAgLy8gYWJvcnQgYmV0d2VlbiB0aGUgYGlmYCBjaGVjayBhbmQgYWRkaW5nIHRoZSBldmVudCBsaXN0ZW5lcilcbiAgICBpZiAoc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgIGNvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIGhhbmRsZXIsIHtcbiAgICAgIG9uY2U6IHRydWUsXG4gICAgICBzaWduYWw6IGNvbnRyb2xsZXIuc2lnbmFsLFxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIGNvbnRyb2xsZXI7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFNwYXducyBhIGNvbW1hbmQgYXMgYSBjaGlsZCBwcm9jZXNzIHdpdGggb3V0cHV0IGhhbmRsaW5nLlxuICogQHN1bW1hcnkgQ3JlYXRlcyBhIGNoaWxkIHByb2Nlc3MgdG8gZXhlY3V0ZSBhIGNvbW1hbmQgd2l0aCBzdXBwb3J0IGZvciBwaXBpbmcgbXVsdGlwbGUgY29tbWFuZHMsXG4gKiBjdXN0b20gb3V0cHV0IGhhbmRsaW5nLCBhbmQgYWJvcnQgY29udHJvbC4gVGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSBsb3ctbGV2ZWwgZGV0YWlscyBvZlxuICogc3Bhd25pbmcgcHJvY2Vzc2VzIGFuZCBjb25uZWN0aW5nIHRoZWlyIGlucHV0cy9vdXRwdXRzIHdoZW4gcGlwaW5nIGlzIHVzZWQuXG4gKlxuICogQHRlbXBsYXRlIFIgLSBUaGUgdHlwZSBvZiB0aGUgcHJvY2Vzc2VkIG91dHB1dCwgZGVmYXVsdGluZyB0byBzdHJpbmcuXG4gKiBAcGFyYW0ge1N0YW5kYXJkT3V0cHV0V3JpdGVyPFI+fSBvdXRwdXQgLSBUaGUgb3V0cHV0IHdyaXRlciB0byBoYW5kbGUgY29tbWFuZCBvdXRwdXQuXG4gKiBAcGFyYW0ge3N0cmluZ30gY29tbWFuZCAtIFRoZSBjb21tYW5kIHRvIGV4ZWN1dGUsIGNhbiBpbmNsdWRlIHBpcGUgb3BlcmF0b3JzLlxuICogQHBhcmFtIHtTcGF3bk9wdGlvbnNXaXRob3V0U3RkaW99IG9wdHMgLSBPcHRpb25zIGZvciB0aGUgc3Bhd25lZCBwcm9jZXNzLlxuICogQHBhcmFtIHtBYm9ydENvbnRyb2xsZXJ9IGFib3J0IC0gQ29udHJvbGxlciB0byBhYm9ydCB0aGUgY29tbWFuZCBleGVjdXRpb24uXG4gKiBAcGFyYW0ge0xvZ2dlcn0gbG9nZ2VyIC0gTG9nZ2VyIGZvciByZWNvcmRpbmcgY29tbWFuZCBleGVjdXRpb24gZGV0YWlscy5cbiAqIEByZXR1cm4ge0NoaWxkUHJvY2Vzc1dpdGhvdXROdWxsU3RyZWFtc30gVGhlIHNwYXduZWQgY2hpbGQgcHJvY2Vzcy5cbiAqXG4gKiBAZnVuY3Rpb24gc3Bhd25Db21tYW5kXG4gKlxuICogQG1lbWJlck9mIG1vZHVsZTp1dGlsc1xuICovXG5leHBvcnQgZnVuY3Rpb24gc3Bhd25Db21tYW5kPFIgPSBzdHJpbmc+KFxuICBvdXRwdXQ6IFN0YW5kYXJkT3V0cHV0V3JpdGVyPFI+LFxuICBjb21tYW5kOiBzdHJpbmcsXG4gIG9wdHM6IFNwYXduT3B0aW9uc1dpdGhvdXRTdGRpbyxcbiAgYWJvcnQ6IEFib3J0Q29udHJvbGxlcixcbiAgbG9nZ2VyOiBMb2dnZXJcbik6IENoaWxkUHJvY2Vzc1dpdGhvdXROdWxsU3RyZWFtcyB7XG4gIGZ1bmN0aW9uIHNwYXduSW5uZXIoY29tbWFuZDogc3RyaW5nLCBjb250cm9sbGVyOiBBYm9ydENvbnRyb2xsZXIpIHtcbiAgICBjb25zdCBbY21kLCBhcmd6XSA9IG91dHB1dC5wYXJzZUNvbW1hbmQoY29tbWFuZCk7XG4gICAgbG9nZ2VyLmluZm8oYFJ1bm5pbmcgY29tbWFuZDogJHtjbWR9YCk7XG4gICAgbG9nZ2VyLmRlYnVnKGB3aXRoIGFyZ3M6ICR7YXJnei5qb2luKFwiIFwiKX1gKTtcbiAgICBjb25zdCBjaGlsZFByb2Nlc3MgPSBzcGF3bihjbWQsIGFyZ3osIHtcbiAgICAgIC4uLm9wdHMsXG4gICAgICBjd2Q6IG9wdHMuY3dkIHx8IHByb2Nlc3MuY3dkKCksXG4gICAgICBlbnY6IE9iamVjdC5hc3NpZ24oe30sIHByb2Nlc3MuZW52LCBvcHRzLmVudiwgeyBQQVRIOiBwcm9jZXNzLmVudi5QQVRIIH0pLFxuICAgICAgc2hlbGw6IG9wdHMuc2hlbGwgfHwgZmFsc2UsXG4gICAgICBzaWduYWw6IGNvbnRyb2xsZXIuc2lnbmFsLFxuICAgIH0pO1xuICAgIGxvZ2dlci52ZXJib3NlKGBwaWQgOiAke2NoaWxkUHJvY2Vzcy5waWR9YCk7XG4gICAgcmV0dXJuIGNoaWxkUHJvY2VzcztcbiAgfVxuXG4gIGNvbnN0IG0gPSBjb21tYW5kLm1hdGNoKC9bPD4kI10vZyk7XG4gIGlmIChtKVxuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBJbnZhbGlkIGNvbW1hbmQ6ICR7Y29tbWFuZH0uIGNvbnRhaW5zIGludmFsaWQgY2hhcmFjdGVyczogJHttfWBcbiAgICApO1xuICBpZiAoY29tbWFuZC5pbmNsdWRlcyhcIiB8IFwiKSkge1xuICAgIGNvbnN0IGNtZHMgPSBjb21tYW5kLnNwbGl0KFwiIHwgXCIpO1xuICAgIGNvbnN0IHNwYXducyA9IFtdO1xuICAgIGNvbnN0IGNvbnRyb2xsZXJzID0gbmV3IEFycmF5KGNtZHMubGVuZ3RoKTtcbiAgICBjb250cm9sbGVyc1swXSA9IGFib3J0O1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY21kcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGkgIT09IDApXG4gICAgICAgIGNvbnRyb2xsZXJzW2ldID0gY2hhaW5BYm9ydENvbnRyb2xsZXIoY29udHJvbGxlcnNbaSAtIDFdLnNpZ25hbCk7XG4gICAgICBzcGF3bnMucHVzaChzcGF3bklubmVyKGNtZHNbaV0sIGNvbnRyb2xsZXJzW2ldKSk7XG4gICAgICBpZiAoaSA9PT0gMCkgY29udGludWU7XG4gICAgICBzcGF3bnNbaSAtIDFdLnN0ZG91dC5waXBlKHNwYXduc1tpXS5zdGRpbik7XG4gICAgfVxuICAgIHJldHVybiBzcGF3bnNbY21kcy5sZW5ndGggLSAxXTtcbiAgfVxuXG4gIHJldHVybiBzcGF3bklubmVyKGNvbW1hbmQsIGFib3J0KTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gRXhlY3V0ZXMgYSBjb21tYW5kIGFzeW5jaHJvbm91c2x5IHdpdGggY3VzdG9taXphYmxlIG91dHB1dCBoYW5kbGluZy5cbiAqIEBzdW1tYXJ5IFRoaXMgZnVuY3Rpb24gcnVucyBhIHNoZWxsIGNvbW1hbmQgYXMgYSBjaGlsZCBwcm9jZXNzLCBwcm92aWRpbmcgZmluZS1ncmFpbmVkXG4gKiBjb250cm9sIG92ZXIgaXRzIGV4ZWN1dGlvbiBhbmQgb3V0cHV0IGhhbmRsaW5nLiBJdCBzdXBwb3J0cyBjdXN0b20gb3V0cHV0IHdyaXRlcnMsXG4gKiBhbGxvd3MgZm9yIGNvbW1hbmQgYWJvcnRpb24sIGFuZCBjYXB0dXJlcyBib3RoIHN0ZG91dCBhbmQgc3RkZXJyLlxuICpcbiAqIEB0ZW1wbGF0ZSBSIC0gVGhlIHR5cGUgb2YgdGhlIHJlc29sdmVkIHZhbHVlIGZyb20gdGhlIGNvbW1hbmQgZXhlY3V0aW9uLlxuICpcbiAqIEBwYXJhbSBjb21tYW5kIC0gVGhlIGNvbW1hbmQgdG8gcnVuLCBlaXRoZXIgYXMgYSBzdHJpbmcgb3IgYW4gYXJyYXkgb2Ygc3RyaW5ncy5cbiAqIEBwYXJhbSBvcHRzIC0gU3Bhd24gb3B0aW9ucyBmb3IgdGhlIGNoaWxkIHByb2Nlc3MuIERlZmF1bHRzIHRvIGFuIGVtcHR5IG9iamVjdC5cbiAqIEBwYXJhbSBvdXRwdXRDb25zdHJ1Y3RvciAtIENvbnN0cnVjdG9yIGZvciB0aGUgb3V0cHV0IHdyaXRlci4gRGVmYXVsdHMgdG8gU3RhbmRhcmRPdXRwdXRXcml0ZXIuXG4gKiBAcGFyYW0gYXJncyAtIEFkZGl0aW9uYWwgYXJndW1lbnRzIHRvIHBhc3MgdG8gdGhlIG91dHB1dCBjb25zdHJ1Y3Rvci5cbiAqIEByZXR1cm4ge0NvbW1hbmRSZXN1bHR9IEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIHRoZSBjb21tYW5kIHJlc3VsdCBvZiB0eXBlIFIuXG4gKlxuICogQGZ1bmN0aW9uIHJ1bkNvbW1hbmRcbiAqXG4gKiBAbWVybWFpZFxuICogc2VxdWVuY2VEaWFncmFtXG4gKiAgIHBhcnRpY2lwYW50IENhbGxlclxuICogICBwYXJ0aWNpcGFudCBydW5Db21tYW5kXG4gKiAgIHBhcnRpY2lwYW50IE91dHB1dFdyaXRlclxuICogICBwYXJ0aWNpcGFudCBDaGlsZFByb2Nlc3NcbiAqICAgQ2FsbGVyLT4+cnVuQ29tbWFuZDogQ2FsbCB3aXRoIGNvbW1hbmQgYW5kIG9wdGlvbnNcbiAqICAgcnVuQ29tbWFuZC0+Pk91dHB1dFdyaXRlcjogQ3JlYXRlIG5ldyBpbnN0YW5jZVxuICogICBydW5Db21tYW5kLT4+T3V0cHV0V3JpdGVyOiBQYXJzZSBjb21tYW5kXG4gKiAgIHJ1bkNvbW1hbmQtPj5DaGlsZFByb2Nlc3M6IFNwYXduIHByb2Nlc3NcbiAqICAgQ2hpbGRQcm9jZXNzLS0+PnJ1bkNvbW1hbmQ6IFJldHVybiBwcm9jZXNzIG9iamVjdFxuICogICBydW5Db21tYW5kLT4+Q2hpbGRQcm9jZXNzOiBTZXQgdXAgZXZlbnQgbGlzdGVuZXJzXG4gKiAgIGxvb3AgRm9yIGVhY2ggc3Rkb3V0IGRhdGFcbiAqICAgICBDaGlsZFByb2Nlc3MtPj5ydW5Db21tYW5kOiBFbWl0IHN0ZG91dCBkYXRhXG4gKiAgICAgcnVuQ29tbWFuZC0+Pk91dHB1dFdyaXRlcjogSGFuZGxlIHN0ZG91dCBkYXRhXG4gKiAgIGVuZFxuICogICBsb29wIEZvciBlYWNoIHN0ZGVyciBkYXRhXG4gKiAgICAgQ2hpbGRQcm9jZXNzLT4+cnVuQ29tbWFuZDogRW1pdCBzdGRlcnIgZGF0YVxuICogICAgIHJ1bkNvbW1hbmQtPj5PdXRwdXRXcml0ZXI6IEhhbmRsZSBzdGRlcnIgZGF0YVxuICogICBlbmRcbiAqICAgQ2hpbGRQcm9jZXNzLT4+cnVuQ29tbWFuZDogRW1pdCBlcnJvciAoaWYgYW55KVxuICogICBydW5Db21tYW5kLT4+T3V0cHV0V3JpdGVyOiBIYW5kbGUgZXJyb3JcbiAqICAgQ2hpbGRQcm9jZXNzLT4+cnVuQ29tbWFuZDogRW1pdCBleGl0XG4gKiAgIHJ1bkNvbW1hbmQtPj5PdXRwdXRXcml0ZXI6IEhhbmRsZSBleGl0XG4gKiAgIE91dHB1dFdyaXRlci0tPj5ydW5Db21tYW5kOiBSZXNvbHZlIG9yIHJlamVjdCBwcm9taXNlXG4gKiAgIHJ1bkNvbW1hbmQtLT4+Q2FsbGVyOiBSZXR1cm4gQ29tbWFuZFJlc3VsdFxuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6dXRpbHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJ1bkNvbW1hbmQ8UiA9IHN0cmluZz4oXG4gIGNvbW1hbmQ6IHN0cmluZyxcbiAgb3B0czogU3Bhd25PcHRpb25zV2l0aG91dFN0ZGlvID0ge30sXG4gIG91dHB1dENvbnN0cnVjdG9yOiBPdXRwdXRXcml0ZXJDb25zdHJ1Y3RvcjxcbiAgICBSLFxuICAgIFN0YW5kYXJkT3V0cHV0V3JpdGVyPFI+LFxuICAgIEVycm9yXG4gID4gPSBTdGFuZGFyZE91dHB1dFdyaXRlcjxSPixcbiAgLi4uYXJnczogdW5rbm93bltdXG4pOiBDb21tYW5kUmVzdWx0PFI+IHtcbiAgY29uc3QgbG9nZ2VyID0gTG9nZ2luZy5mb3IocnVuQ29tbWFuZCk7XG4gIGNvbnN0IGFib3J0ID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuXG4gIGNvbnN0IHJlc3VsdDogT21pdDxDb21tYW5kUmVzdWx0LCBcInByb21pc2VcIiB8IFwicGlwZVwiPiA9IHtcbiAgICBhYm9ydDogYWJvcnQsXG4gICAgY29tbWFuZDogY29tbWFuZCxcbiAgICBsb2dzOiBbXSxcbiAgICBlcnJzOiBbXSxcbiAgfTtcblxuICBjb25zdCBsb2NrID0gbmV3IFByb21pc2U8Uj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGxldCBvdXRwdXQ7XG4gICAgdHJ5IHtcbiAgICAgIG91dHB1dCA9IG5ldyBvdXRwdXRDb25zdHJ1Y3RvcihcbiAgICAgICAgY29tbWFuZCxcbiAgICAgICAge1xuICAgICAgICAgIHJlc29sdmUsXG4gICAgICAgICAgcmVqZWN0LFxuICAgICAgICB9LFxuICAgICAgICAuLi5hcmdzXG4gICAgICApO1xuXG4gICAgICByZXN1bHQuY21kID0gc3Bhd25Db21tYW5kPFI+KG91dHB1dCwgY29tbWFuZCwgb3B0cywgYWJvcnQsIGxvZ2dlcik7XG4gICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgcmV0dXJuIHJlamVjdChuZXcgRXJyb3IoYEVycm9yIHJ1bm5pbmcgY29tbWFuZCAke2NvbW1hbmR9OiAke2V9YCkpO1xuICAgIH1cblxuICAgIHJlc3VsdC5jbWQuc3Rkb3V0LnNldEVuY29kaW5nKFwidXRmOFwiKTtcblxuICAgIHJlc3VsdC5jbWQuc3Rkb3V0Lm9uKFwiZGF0YVwiLCAoY2h1bms6IGFueSkgPT4ge1xuICAgICAgY2h1bmsgPSBjaHVuay50b1N0cmluZygpO1xuICAgICAgcmVzdWx0LmxvZ3MucHVzaChjaHVuayk7XG4gICAgICBvdXRwdXQuZGF0YShjaHVuayk7XG4gICAgfSk7XG5cbiAgICByZXN1bHQuY21kLnN0ZGVyci5vbihcImRhdGFcIiwgKGRhdGE6IGFueSkgPT4ge1xuICAgICAgZGF0YSA9IGRhdGEudG9TdHJpbmcoKTtcbiAgICAgIHJlc3VsdC5lcnJzLnB1c2goZGF0YSk7XG4gICAgICBvdXRwdXQuZXJyb3IoZGF0YSk7XG4gICAgfSk7XG5cbiAgICByZXN1bHQuY21kLm9uY2UoXCJlcnJvclwiLCAoZXJyOiBFcnJvcikgPT4ge1xuICAgICAgb3V0cHV0LmV4aXQoZXJyLm1lc3NhZ2UsIHJlc3VsdC5lcnJzKTtcbiAgICB9KTtcblxuICAgIHJlc3VsdC5jbWQub25jZShcImV4aXRcIiwgKGNvZGU6IG51bWJlciA9IDApID0+IHtcbiAgICAgIGlmIChhYm9ydC5zaWduYWwuYWJvcnRlZCAmJiBjb2RlID09PSBudWxsKSBjb2RlID0gQWJvcnRDb2RlIGFzIGFueTtcbiAgICAgIG91dHB1dC5leGl0KGNvZGUsIGNvZGUgPT09IDAgPyByZXN1bHQubG9ncyA6IHJlc3VsdC5lcnJzKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgT2JqZWN0LmFzc2lnbihyZXN1bHQsIHtcbiAgICBwcm9taXNlOiBsb2NrLFxuICAgIHBpcGU6IGFzeW5jIDxFPihjYjogKHI6IFIpID0+IEUpID0+IHtcbiAgICAgIGNvbnN0IGwgPSBsb2dnZXIuZm9yKFwicGlwZVwiKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGwudmVyYm9zZShgRXhlY3V0aW5nIHBpcGUgZnVuY3Rpb24gJHtjb21tYW5kfS4uLmApO1xuICAgICAgICBjb25zdCByZXN1bHQ6IFIgPSBhd2FpdCBsb2NrO1xuICAgICAgICBsLnZlcmJvc2UoYFBpcGluZyBvdXRwdXQgdG8gJHtjYi5uYW1lfTogJHtyZXN1bHR9YCk7XG4gICAgICAgIHJldHVybiBjYihyZXN1bHQpO1xuICAgICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgICBsLmVycm9yKGBFcnJvciBwaXBpbmcgY29tbWFuZCBvdXRwdXQ6ICR7ZX1gKTtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9LFxuICB9KTtcblxuICByZXR1cm4gcmVzdWx0IGFzIENvbW1hbmRSZXN1bHQ8Uj47XG59XG4iLCJpbXBvcnQgZnMgZnJvbSBcImZzXCI7XG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHsgcGF0Y2hTdHJpbmcgfSBmcm9tIFwiLi90ZXh0XCI7XG5pbXBvcnQgeyBydW5Db21tYW5kIH0gZnJvbSBcIi4vdXRpbHNcIjtcbmltcG9ydCB7IERlcGVuZGVuY3lNYXAsIFNpbXBsZURlcGVuZGVuY3lNYXAgfSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IHsgTG9nZ2luZyB9IGZyb20gXCJAZGVjYWYtdHMvbG9nZ2luZ1wiO1xuXG5jb25zdCBsb2dnZXIgPSBMb2dnaW5nLmZvcihcImZzXCIpO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBQYXRjaGVzIGEgZmlsZSB3aXRoIGdpdmVuIHZhbHVlcy5cbiAqIEBzdW1tYXJ5IFJlYWRzIGEgZmlsZSwgYXBwbGllcyBwYXRjaGVzIHVzaW5nIFRleHRVdGlscywgYW5kIHdyaXRlcyB0aGUgcmVzdWx0IGJhY2sgdG8gdGhlIGZpbGUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGggLSBUaGUgcGF0aCB0byB0aGUgZmlsZSB0byBiZSBwYXRjaGVkLlxuICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBudW1iZXIgfCBzdHJpbmc+fSB2YWx1ZXMgLSBUaGUgdmFsdWVzIHRvIHBhdGNoIGludG8gdGhlIGZpbGUuXG4gKiBAcmV0dXJuIHt2b2lkfVxuICpcbiAqIEBmdW5jdGlvbiBwYXRjaEZpbGVcbiAqXG4gKiBAbWVybWFpZFxuICogc2VxdWVuY2VEaWFncmFtXG4gKiAgIHBhcnRpY2lwYW50IENhbGxlclxuICogICBwYXJ0aWNpcGFudCBwYXRjaEZpbGVcbiAqICAgcGFydGljaXBhbnQgZnNcbiAqICAgcGFydGljaXBhbnQgcmVhZEZpbGVcbiAqICAgcGFydGljaXBhbnQgVGV4dFV0aWxzXG4gKiAgIHBhcnRpY2lwYW50IHdyaXRlRmlsZVxuICogICBDYWxsZXItPj5wYXRjaEZpbGU6IENhbGwgd2l0aCBwYXRoIGFuZCB2YWx1ZXNcbiAqICAgcGF0Y2hGaWxlLT4+ZnM6IENoZWNrIGlmIGZpbGUgZXhpc3RzXG4gKiAgIHBhdGNoRmlsZS0+PnJlYWRGaWxlOiBSZWFkIGZpbGUgY29udGVudFxuICogICByZWFkRmlsZS0+PmZzOiBSZWFkIGZpbGVcbiAqICAgZnMtLT4+cmVhZEZpbGU6IFJldHVybiBmaWxlIGNvbnRlbnRcbiAqICAgcmVhZEZpbGUtLT4+cGF0Y2hGaWxlOiBSZXR1cm4gZmlsZSBjb250ZW50XG4gKiAgIHBhdGNoRmlsZS0+PlRleHRVdGlsczogUGF0Y2ggc3RyaW5nXG4gKiAgIFRleHRVdGlscy0tPj5wYXRjaEZpbGU6IFJldHVybiBwYXRjaGVkIGNvbnRlbnRcbiAqICAgcGF0Y2hGaWxlLT4+d3JpdGVGaWxlOiBXcml0ZSBwYXRjaGVkIGNvbnRlbnRcbiAqICAgd3JpdGVGaWxlLT4+ZnM6IFdyaXRlIHRvIGZpbGVcbiAqICAgZnMtLT4+d3JpdGVGaWxlOiBGaWxlIHdyaXR0ZW5cbiAqICAgd3JpdGVGaWxlLS0+PnBhdGNoRmlsZTogRmlsZSB3cml0dGVuXG4gKiAgIHBhdGNoRmlsZS0tPj5DYWxsZXI6IFBhdGNoaW5nIGNvbXBsZXRlXG4gKlxuICogQG1lbWJlck9mIG1vZHVsZTp1dGlsc1xuICovXG5leHBvcnQgZnVuY3Rpb24gcGF0Y2hGaWxlKFxuICBwYXRoOiBzdHJpbmcsXG4gIHZhbHVlczogUmVjb3JkPHN0cmluZywgbnVtYmVyIHwgc3RyaW5nPlxuKSB7XG4gIGNvbnN0IGxvZyA9IGxvZ2dlci5mb3IocGF0Y2hGaWxlKTtcbiAgaWYgKCFmcy5leGlzdHNTeW5jKHBhdGgpKVxuICAgIHRocm93IG5ldyBFcnJvcihgRmlsZSBub3QgZm91bmQgYXQgcGF0aCBcIiR7cGF0aH1cIi5gKTtcbiAgbGV0IGNvbnRlbnQgPSByZWFkRmlsZShwYXRoKTtcblxuICB0cnkge1xuICAgIGxvZy52ZXJib3NlKGBQYXRjaGluZyBmaWxlIFwiJHtwYXRofVwiLi4uYCk7XG4gICAgbG9nLmRlYnVnKGB3aXRoIHZhbHVlOiAke0pTT04uc3RyaW5naWZ5KHZhbHVlcyl9YCk7XG4gICAgY29udGVudCA9IHBhdGNoU3RyaW5nKGNvbnRlbnQsIHZhbHVlcyk7XG4gIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciBwYXRjaGluZyBmaWxlOiAke2Vycm9yfWApO1xuICB9XG4gIHdyaXRlRmlsZShwYXRoLCBjb250ZW50KTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gUmVhZHMgYSBmaWxlIGFuZCByZXR1cm5zIGl0cyBjb250ZW50LlxuICogQHN1bW1hcnkgUmVhZHMgdGhlIGNvbnRlbnQgb2YgYSBmaWxlIGF0IHRoZSBzcGVjaWZpZWQgcGF0aCBhbmQgcmV0dXJucyBpdCBhcyBhIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aCAtIFRoZSBwYXRoIHRvIHRoZSBmaWxlIHRvIGJlIHJlYWQuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBjb250ZW50IG9mIHRoZSBmaWxlLlxuICpcbiAqIEBmdW5jdGlvbiByZWFkRmlsZVxuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6dXRpbHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlYWRGaWxlKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGxvZyA9IGxvZ2dlci5mb3IocmVhZEZpbGUpO1xuICB0cnkge1xuICAgIGxvZy52ZXJib3NlKGBSZWFkaW5nIGZpbGUgXCIke3BhdGh9XCIuLi5gKTtcbiAgICByZXR1cm4gZnMucmVhZEZpbGVTeW5jKHBhdGgsIFwidXRmOFwiKTtcbiAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICBsb2cudmVyYm9zZShgRXJyb3IgcmVhZGluZyBmaWxlIFwiJHtwYXRofVwiOiAke2Vycm9yfWApO1xuICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3IgcmVhZGluZyBmaWxlIFwiJHtwYXRofVwiOiAke2Vycm9yfWApO1xuICB9XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFdyaXRlcyBkYXRhIHRvIGEgZmlsZS5cbiAqIEBzdW1tYXJ5IFdyaXRlcyB0aGUgcHJvdmlkZWQgZGF0YSB0byBhIGZpbGUgYXQgdGhlIHNwZWNpZmllZCBwYXRoLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIC0gVGhlIHBhdGggdG8gdGhlIGZpbGUgdG8gYmUgd3JpdHRlbi5cbiAqIEBwYXJhbSB7c3RyaW5nIHwgQnVmZmVyfSBkYXRhIC0gVGhlIGRhdGEgdG8gYmUgd3JpdHRlbiB0byB0aGUgZmlsZS5cbiAqIEByZXR1cm4ge3ZvaWR9XG4gKlxuICogQGZ1bmN0aW9uIHdyaXRlRmlsZVxuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6dXRpbHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlRmlsZShwYXRoOiBzdHJpbmcsIGRhdGE6IHN0cmluZyB8IEJ1ZmZlcik6IHZvaWQge1xuICBjb25zdCBsb2cgPSBsb2dnZXIuZm9yKHdyaXRlRmlsZSk7XG4gIHRyeSB7XG4gICAgbG9nLnZlcmJvc2UoYFdyaXRpbmcgZmlsZSBcIiR7cGF0aH0gd2l0aCAke2RhdGEubGVuZ3RofSBieXRlcy4uLmApO1xuICAgIGZzLndyaXRlRmlsZVN5bmMocGF0aCwgZGF0YSwgXCJ1dGY4XCIpO1xuICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgIGxvZy52ZXJib3NlKGBFcnJvciB3cml0aW5nIGZpbGUgXCIke3BhdGh9XCI6ICR7ZXJyb3J9YCk7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciB3cml0aW5nIGZpbGUgXCIke3BhdGh9XCI6ICR7ZXJyb3J9YCk7XG4gIH1cbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gUmV0cmlldmVzIGFsbCBmaWxlcyByZWN1cnNpdmVseSBmcm9tIGEgZGlyZWN0b3J5LlxuICogQHN1bW1hcnkgVHJhdmVyc2VzIHRocm91Z2ggZGlyZWN0b3JpZXMgYW5kIHN1YmRpcmVjdG9yaWVzIHRvIGNvbGxlY3QgYWxsIGZpbGUgcGF0aHMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHAgLSBUaGUgcGF0aCB0byBzdGFydCBzZWFyY2hpbmcgZnJvbS5cbiAqIEBwYXJhbSB7ZnVuY3Rpb259IFtmaWx0ZXJdIC0gT3B0aW9uYWwgZnVuY3Rpb24gdG8gZmlsdGVyIGZpbGVzIGJ5IG5hbWUgb3IgaW5kZXguXG4gKiBAcmV0dXJuIHtzdHJpbmdbXX0gQXJyYXkgb2YgZmlsZSBwYXRocy5cbiAqXG4gKiBAZnVuY3Rpb24gZ2V0QWxsRmlsZXNcbiAqXG4gKiBAbWVtYmVyT2YgbW9kdWxlOnV0aWxzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBbGxGaWxlcyhcbiAgcDogc3RyaW5nLFxuICBmaWx0ZXI/OiAoZjogc3RyaW5nLCBpPzogbnVtYmVyKSA9PiBib29sZWFuXG4pOiBzdHJpbmdbXSB7XG4gIGNvbnN0IGxvZyA9IGxvZ2dlci5mb3IoZ2V0QWxsRmlsZXMpO1xuICBjb25zdCBmaWxlczogc3RyaW5nW10gPSBbXTtcblxuICB0cnkge1xuICAgIGxvZy52ZXJib3NlKGBSZXRyaWV2aW5nIGFsbCBmaWxlcyBmcm9tIFwiJHtwfVwiLi4uYCk7XG4gICAgY29uc3QgZW50cmllcyA9IGZzLnJlYWRkaXJTeW5jKHApO1xuXG4gICAgZW50cmllcy5mb3JFYWNoKChlbnRyeSkgPT4ge1xuICAgICAgY29uc3QgZnVsbFBhdGggPSBwYXRoLmpvaW4ocCwgZW50cnkpO1xuICAgICAgY29uc3Qgc3RhdCA9IGZzLnN0YXRTeW5jKGZ1bGxQYXRoKTtcblxuICAgICAgaWYgKHN0YXQuaXNGaWxlKCkpIHtcbiAgICAgICAgZmlsZXMucHVzaChmdWxsUGF0aCk7XG4gICAgICB9IGVsc2UgaWYgKHN0YXQuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgICBmaWxlcy5wdXNoKC4uLmdldEFsbEZpbGVzKGZ1bGxQYXRoKSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKCFmaWx0ZXIpIHJldHVybiBmaWxlcztcbiAgICByZXR1cm4gZmlsZXMuZmlsdGVyKGZpbHRlcik7XG4gIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgbG9nLnZlcmJvc2UoYEVycm9yIHJldHJpZXZpbmcgZmlsZXMgZnJvbSBcIiR7cH1cIjogJHtlcnJvcn1gKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIHJldHJpZXZpbmcgZmlsZXMgZnJvbSBcIiR7cH1cIjogJHtlcnJvcn1gKTtcbiAgfVxufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBSZW5hbWVzIGEgZmlsZSBvciBkaXJlY3RvcnkuXG4gKiBAc3VtbWFyeSBNb3ZlcyBhIGZpbGUgb3IgZGlyZWN0b3J5IGZyb20gdGhlIHNvdXJjZSBwYXRoIHRvIHRoZSBkZXN0aW5hdGlvbiBwYXRoLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBUaGUgc291cmNlIHBhdGggb2YgdGhlIGZpbGUgb3IgZGlyZWN0b3J5LlxuICogQHBhcmFtIHtzdHJpbmd9IGRlc3QgLSBUaGUgZGVzdGluYXRpb24gcGF0aCBmb3IgdGhlIGZpbGUgb3IgZGlyZWN0b3J5LlxuICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgcmVuYW1lIG9wZXJhdGlvbiBpcyBjb21wbGV0ZS5cbiAqXG4gKiBAZnVuY3Rpb24gcmVuYW1lRmlsZVxuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6dXRpbHNcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlbmFtZUZpbGUoc291cmNlOiBzdHJpbmcsIGRlc3Q6IHN0cmluZykge1xuICBjb25zdCBsb2cgPSBsb2dnZXIuZm9yKHJlbmFtZUZpbGUpO1xuICBsZXQgZGVzY3JpcHRvclNvdXJjZSwgZGVzY3JpcHRvckRlc3Q7XG5cbiAgdHJ5IHtcbiAgICBkZXNjcmlwdG9yU291cmNlID0gZnMuc3RhdFN5bmMoc291cmNlKTtcbiAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICBsb2cudmVyYm9zZShgU291cmNlIHBhdGggXCIke3NvdXJjZX1cIiBkb2VzIG5vdCBleGlzdDogJHtlcnJvcn1gKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFNvdXJjZSBwYXRoIFwiJHtzb3VyY2V9XCIgZG9lcyBub3QgZXhpc3Q6ICR7ZXJyb3J9YCk7XG4gIH1cblxuICB0cnkge1xuICAgIGRlc2NyaXB0b3JEZXN0ID0gZnMuc3RhdFN5bmMoZGVzdCk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgLy8gZG8gbm90aGluZy4gaXRzIG9rXG4gIH1cbiAgaWYgKGRlc2NyaXB0b3JEZXN0KSB7XG4gICAgbG9nLnZlcmJvc2UoYERlc3RpbmF0aW9uIHBhdGggXCIke2Rlc3R9XCIgYWxyZWFkeSBleGlzdHNgKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYERlc3RpbmF0aW9uIHBhdGggXCIke2Rlc3R9XCIgYWxyZWFkeSBleGlzdHNgKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgbG9nLnZlcmJvc2UoXG4gICAgICBgUmVuYW1pbmcgJHtkZXNjcmlwdG9yU291cmNlLmlzRmlsZSgpID8gXCJmaWxlXCIgOiBcImRpcmVjdG9yeVwifSBcIiR7c291cmNlfVwiIHRvIFwiJHtkZXN0fS4uLmBcbiAgICApO1xuICAgIGZzLnJlbmFtZVN5bmMoc291cmNlLCBkZXN0KTtcbiAgICBsb2cudmVyYm9zZShgU3VjY2Vzc2Z1bGx5IHJlbmFtZWQgdG8gXCIke2Rlc3R9XCJgKTtcbiAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICBsb2cudmVyYm9zZShcbiAgICAgIGBFcnJvciByZW5hbWluZyAke2Rlc2NyaXB0b3JTb3VyY2UuaXNGaWxlKCkgPyBcImZpbGVcIiA6IFwiZGlyZWN0b3J5XCJ9IFwiJHtzb3VyY2V9XCIgdG8gXCIke2Rlc3R9XCI6ICR7ZXJyb3J9YFxuICAgICk7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEVycm9yIHJlbmFtaW5nICR7ZGVzY3JpcHRvclNvdXJjZS5pc0ZpbGUoKSA/IFwiZmlsZVwiIDogXCJkaXJlY3RvcnlcIn0gXCIke3NvdXJjZX1cIiB0byBcIiR7ZGVzdH1cIjogJHtlcnJvcn1gXG4gICAgKTtcbiAgfVxufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBDb3BpZXMgYSBmaWxlIG9yIGRpcmVjdG9yeS5cbiAqIEBzdW1tYXJ5IENyZWF0ZXMgYSBjb3B5IG9mIGEgZmlsZSBvciBkaXJlY3RvcnkgZnJvbSB0aGUgc291cmNlIHBhdGggdG8gdGhlIGRlc3RpbmF0aW9uIHBhdGguXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIFRoZSBzb3VyY2UgcGF0aCBvZiB0aGUgZmlsZSBvciBkaXJlY3RvcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30gZGVzdCAtIFRoZSBkZXN0aW5hdGlvbiBwYXRoIGZvciB0aGUgZmlsZSBvciBkaXJlY3RvcnkuXG4gKiBAcmV0dXJuIHt2b2lkfVxuICpcbiAqIEBmdW5jdGlvbiBjb3B5RmlsZVxuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6dXRpbHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvcHlGaWxlKHNvdXJjZTogc3RyaW5nLCBkZXN0OiBzdHJpbmcpIHtcbiAgY29uc3QgbG9nID0gbG9nZ2VyLmZvcihjb3B5RmlsZSk7XG4gIGxldCBkZXNjcmlwdG9yU291cmNlLCBkZXNjcmlwdG9yRGVzdDtcbiAgdHJ5IHtcbiAgICBkZXNjcmlwdG9yU291cmNlID0gZnMuc3RhdFN5bmMoc291cmNlKTtcbiAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICBsb2cudmVyYm9zZShgU291cmNlIHBhdGggXCIke3NvdXJjZX1cIiBkb2VzIG5vdCBleGlzdDogJHtlcnJvcn1gKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFNvdXJjZSBwYXRoIFwiJHtzb3VyY2V9XCIgZG9lcyBub3QgZXhpc3Q6ICR7ZXJyb3J9YCk7XG4gIH1cbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgZGVzY3JpcHRvckRlc3QgPSBmcy5zdGF0U3luYyhkZXN0KTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgaWYgKGRlc2NyaXB0b3JTb3VyY2UuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgbG9nLnZlcmJvc2UoYERlc3QgcGF0aCBcIiR7ZGVzdH1cIiBkb2VzIG5vdCBleGlzdC4gY3JlYXRpbmdgKTtcbiAgICAgIGZzLm1rZGlyU3luYyhkZXN0LCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICB9XG4gIH1cblxuICB0cnkge1xuICAgIGxvZy52ZXJib3NlKFxuICAgICAgYENvcHlpbmcgJHtkZXNjcmlwdG9yU291cmNlLmlzRmlsZSgpID8gXCJmaWxlXCIgOiBcImRpcmVjdG9yeVwifSBcIiR7c291cmNlfVwiIHRvIFwiJHtkZXN0fS4uLmBcbiAgICApO1xuICAgIGZzLmNwU3luYyhzb3VyY2UsIGRlc3QsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgIGxvZy52ZXJib3NlKFxuICAgICAgYEVycm9yIGNvcHlpbmcgJHtkZXNjcmlwdG9yU291cmNlLmlzRmlsZSgpID8gXCJmaWxlXCIgOiBcImRpcmVjdG9yeVwifSBcIiR7c291cmNlfVwiIHRvIFwiJHtkZXN0fTogJHtlcnJvcn1gXG4gICAgKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgRXJyb3IgY29weWluZyAke2Rlc2NyaXB0b3JTb3VyY2UuaXNGaWxlKCkgPyBcImZpbGVcIiA6IFwiZGlyZWN0b3J5XCJ9IFwiJHtzb3VyY2V9XCIgdG8gXCIke2Rlc3R9OiAke2Vycm9yfWBcbiAgICApO1xuICB9XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIERlbGV0ZXMgYSBmaWxlIG9yIGRpcmVjdG9yeS5cbiAqIEBzdW1tYXJ5IFJlbW92ZXMgYSBmaWxlIG9yIGRpcmVjdG9yeSBhdCB0aGUgc3BlY2lmaWVkIHBhdGgsIHdpdGggcmVjdXJzaXZlIGFuZCBmb3JjZSBvcHRpb25zIGVuYWJsZWQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHAgLSBUaGUgcGF0aCB0byB0aGUgZmlsZSBvciBkaXJlY3RvcnkgdG8gZGVsZXRlLlxuICogQHJldHVybiB7dm9pZH1cbiAqXG4gKiBAZnVuY3Rpb24gZGVsZXRlUGF0aFxuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6dXRpbHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlbGV0ZVBhdGgocDogc3RyaW5nKSB7XG4gIGNvbnN0IGxvZyA9IGxvZ2dlci5mb3IoZGVsZXRlUGF0aCk7XG4gIHRyeSB7XG4gICAgY29uc3QgZGVzY3JpcHRvciA9IGZzLnN0YXRTeW5jKHApO1xuICAgIGlmIChkZXNjcmlwdG9yLmlzRmlsZSgpKSB7XG4gICAgICBsb2cudmVyYm9zZShgRGVsZXRpbmcgZmlsZSBcIiR7cH0uLi5gKTtcbiAgICAgIGZzLnJtU3luYyhwLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSk7XG4gICAgfSBlbHNlIGlmIChkZXNjcmlwdG9yLmlzRGlyZWN0b3J5KCkpXG4gICAgICBmcy5ybVN5bmMocCwgeyByZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlIH0pO1xuICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgIGxvZy52ZXJib3NlKGBFcnJvciBEZWxldGluZyBcIiR7cH1cIjogJHtlcnJvcn1gKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIERlbGV0aW5nIFwiJHtwfVwiOiAke2Vycm9yfWApO1xuICB9XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFJldHJpZXZlcyBwYWNrYWdlIGluZm9ybWF0aW9uIGZyb20gcGFja2FnZS5qc29uLlxuICogQHN1bW1hcnkgTG9hZHMgYW5kIHBhcnNlcyB0aGUgcGFja2FnZS5qc29uIGZpbGUgZnJvbSBhIHNwZWNpZmllZCBkaXJlY3Rvcnkgb3IgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuIENhbiByZXR1cm4gdGhlIGVudGlyZSBwYWNrYWdlIG9iamVjdCBvciBhIHNwZWNpZmljIHByb3BlcnR5LlxuICogQHBhcmFtIHtzdHJpbmd9IFtwPXByb2Nlc3MuY3dkKCldIC0gVGhlIGRpcmVjdG9yeSBwYXRoIHdoZXJlIHRoZSBwYWNrYWdlLmpzb24gZmlsZSBpcyBsb2NhdGVkLlxuICogQHBhcmFtIHtzdHJpbmd9IFtwcm9wZXJ0eV0gLSBPcHRpb25hbC4gVGhlIHNwZWNpZmljIHByb3BlcnR5IHRvIHJldHJpZXZlIGZyb20gcGFja2FnZS5qc29uLlxuICogQHJldHVybiB7b2JqZWN0IHwgc3RyaW5nfSBUaGUgcGFyc2VkIGNvbnRlbnRzIG9mIHBhY2thZ2UuanNvbiBvciB0aGUgdmFsdWUgb2YgdGhlIHNwZWNpZmllZCBwcm9wZXJ0eS5cbiAqIEBmdW5jdGlvbiBnZXRQYWNrYWdlXG4gKiBAbWVybWFpZFxuICogc2VxdWVuY2VEaWFncmFtXG4gKiAgIHBhcnRpY2lwYW50IENhbGxlclxuICogICBwYXJ0aWNpcGFudCBnZXRQYWNrYWdlXG4gKiAgIHBhcnRpY2lwYW50IHJlYWRGaWxlXG4gKiAgIHBhcnRpY2lwYW50IEpTT05cbiAqICAgQ2FsbGVyLT4+Z2V0UGFja2FnZTogQ2FsbCB3aXRoIHBhdGggYW5kIG9wdGlvbmFsIHByb3BlcnR5XG4gKiAgIGdldFBhY2thZ2UtPj5yZWFkRmlsZTogUmVhZCBwYWNrYWdlLmpzb25cbiAqICAgcmVhZEZpbGUtLT4+Z2V0UGFja2FnZTogUmV0dXJuIGZpbGUgY29udGVudFxuICogICBnZXRQYWNrYWdlLT4+SlNPTjogUGFyc2UgZmlsZSBjb250ZW50XG4gKiAgIEpTT04tLT4+Z2V0UGFja2FnZTogUmV0dXJuIHBhcnNlZCBvYmplY3RcbiAqICAgYWx0IHByb3BlcnR5IHNwZWNpZmllZFxuICogICAgIGdldFBhY2thZ2UtPj5nZXRQYWNrYWdlOiBDaGVjayBpZiBwcm9wZXJ0eSBleGlzdHNcbiAqICAgICBhbHQgcHJvcGVydHkgZXhpc3RzXG4gKiAgICAgICBnZXRQYWNrYWdlLS0+PkNhbGxlcjogUmV0dXJuIHByb3BlcnR5IHZhbHVlXG4gKiAgICAgZWxzZSBwcm9wZXJ0eSBkb2Vzbid0IGV4aXN0XG4gKiAgICAgICBnZXRQYWNrYWdlLS0+PkNhbGxlcjogVGhyb3cgRXJyb3JcbiAqICAgICBlbmRcbiAqICAgZWxzZSBubyBwcm9wZXJ0eSBzcGVjaWZpZWRcbiAqICAgICBnZXRQYWNrYWdlLS0+PkNhbGxlcjogUmV0dXJuIGVudGlyZSBwYWNrYWdlIG9iamVjdFxuICogICBlbmRcbiAqIEBtZW1iZXJPZiBtb2R1bGU6dXRpbHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFBhY2thZ2UoXG4gIHA6IHN0cmluZyA9IHByb2Nlc3MuY3dkKCksXG4gIHByb3BlcnR5Pzogc3RyaW5nXG4pOiBvYmplY3QgfCBzdHJpbmcge1xuICBsZXQgcGtnOiBhbnk7XG4gIHRyeSB7XG4gICAgcGtnID0gSlNPTi5wYXJzZShyZWFkRmlsZShwYXRoLmpvaW4ocCwgYHBhY2thZ2UuanNvbmApKSk7XG4gIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gcmV0cmlldmUgcGFja2FnZSBpbmZvcm1hdGlvblwiICR7ZXJyb3J9YCk7XG4gIH1cblxuICBpZiAocHJvcGVydHkpIHtcbiAgICBpZiAoIShwcm9wZXJ0eSBpbiBwa2cpKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBQcm9wZXJ0eSBcIiR7cHJvcGVydHl9XCIgbm90IGZvdW5kIGluIHBhY2thZ2UuanNvbmApO1xuICAgIHJldHVybiBwa2dbcHJvcGVydHldIGFzIHN0cmluZztcbiAgfVxuICByZXR1cm4gcGtnO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBTZXRzIGFuIGF0dHJpYnV0ZSBpbiB0aGUgcGFja2FnZS5qc29uIGZpbGUuXG4gKiBAc3VtbWFyeSBVcGRhdGVzIGEgc3BlY2lmaWMgYXR0cmlidXRlIGluIHRoZSBwYWNrYWdlLmpzb24gZmlsZSB3aXRoIHRoZSBwcm92aWRlZCB2YWx1ZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYXR0ciAtIFRoZSBhdHRyaWJ1dGUgbmFtZSB0byBzZXQgaW4gcGFja2FnZS5qc29uLlxuICogQHBhcmFtIHtzdHJpbmcgfCBudW1iZXIgfCBvYmplY3R9IHZhbHVlIC0gVGhlIHZhbHVlIHRvIHNldCBmb3IgdGhlIGF0dHJpYnV0ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbcD1wcm9jZXNzLmN3ZCgpXSAtIFRoZSBkaXJlY3RvcnkgcGF0aCB3aGVyZSB0aGUgcGFja2FnZS5qc29uIGZpbGUgaXMgbG9jYXRlZC5cbiAqIEByZXR1cm4ge3ZvaWR9XG4gKlxuICogQGZ1bmN0aW9uIHNldFBhY2thZ2VBdHRyaWJ1dGVcbiAqXG4gKiBAbWVtYmVyT2YgbW9kdWxlOnV0aWxzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRQYWNrYWdlQXR0cmlidXRlKFxuICBhdHRyOiBzdHJpbmcsXG4gIHZhbHVlOiBzdHJpbmcsXG4gIHA6IHN0cmluZyA9IHByb2Nlc3MuY3dkKClcbik6IHZvaWQge1xuICBjb25zdCBwa2cgPSBnZXRQYWNrYWdlKHApIGFzIFJlY29yZDxzdHJpbmcsIGFueT47XG4gIHBrZ1thdHRyXSA9IHZhbHVlO1xuICB3cml0ZUZpbGUocGF0aC5qb2luKHAsIGBwYWNrYWdlLmpzb25gKSwgSlNPTi5zdHJpbmdpZnkocGtnLCBudWxsLCAyKSk7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFJldHJpZXZlcyB0aGUgdmVyc2lvbiBmcm9tIHBhY2thZ2UuanNvbi5cbiAqIEBzdW1tYXJ5IEEgY29udmVuaWVuY2UgZnVuY3Rpb24gdGhhdCBjYWxscyBnZXRQYWNrYWdlIHRvIHJldHJpZXZlIHRoZSBcInZlcnNpb25cIiBwcm9wZXJ0eSBmcm9tIHBhY2thZ2UuanNvbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbcD1wcm9jZXNzLmN3ZCgpXSAtIFRoZSBkaXJlY3RvcnkgcGF0aCB3aGVyZSB0aGUgcGFja2FnZS5qc29uIGZpbGUgaXMgbG9jYXRlZC5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIHZlcnNpb24gc3RyaW5nIGZyb20gcGFja2FnZS5qc29uLlxuICogQGZ1bmN0aW9uIGdldFBhY2thZ2VWZXJzaW9uXG4gKiBAbWVtYmVyT2YgbW9kdWxlOnV0aWxzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYWNrYWdlVmVyc2lvbihwID0gcHJvY2Vzcy5jd2QoKSk6IHN0cmluZyB7XG4gIHJldHVybiBnZXRQYWNrYWdlKHAsIFwidmVyc2lvblwiKSBhcyBzdHJpbmc7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFJldHJpZXZlcyBhbGwgZGVwZW5kZW5jaWVzIGZyb20gdGhlIHByb2plY3QuXG4gKiBAc3VtbWFyeSBFeGVjdXRlcyAnbnBtIGxzIC0tanNvbicgY29tbWFuZCB0byBnZXQgYSBkZXRhaWxlZCBsaXN0IG9mIGFsbCBkZXBlbmRlbmNpZXMgKHByb2R1Y3Rpb24sIGRldmVsb3BtZW50LCBhbmQgcGVlcikgYW5kIHRoZWlyIHZlcnNpb25zLlxuICogQHBhcmFtIHtzdHJpbmd9IFtwYXRoPXByb2Nlc3MuY3dkKCldIC0gVGhlIGRpcmVjdG9yeSBwYXRoIG9mIHRoZSBwcm9qZWN0LlxuICogQHJldHVybiB7UHJvbWlzZTx7cHJvZDogQXJyYXk8e25hbWU6IHN0cmluZywgdmVyc2lvbjogc3RyaW5nfT4sIGRldjogQXJyYXk8e25hbWU6IHN0cmluZywgdmVyc2lvbjogc3RyaW5nfT4sIHBlZXI6IEFycmF5PHtuYW1lOiBzdHJpbmcsIHZlcnNpb246IHN0cmluZ30+fT59IEFuIG9iamVjdCBjb250YWluaW5nIGFycmF5cyBvZiBwcm9kdWN0aW9uLCBkZXZlbG9wbWVudCwgYW5kIHBlZXIgZGVwZW5kZW5jaWVzLlxuICogQGZ1bmN0aW9uIGdldERlcGVuZGVuY2llc1xuICogQG1lcm1haWRcbiAqIHNlcXVlbmNlRGlhZ3JhbVxuICogICBwYXJ0aWNpcGFudCBDYWxsZXJcbiAqICAgcGFydGljaXBhbnQgZ2V0RGVwZW5kZW5jaWVzXG4gKiAgIHBhcnRpY2lwYW50IHJ1bkNvbW1hbmRcbiAqICAgcGFydGljaXBhbnQgSlNPTlxuICogICBDYWxsZXItPj5nZXREZXBlbmRlbmNpZXM6IENhbGwgd2l0aCBvcHRpb25hbCBwYXRoXG4gKiAgIGdldERlcGVuZGVuY2llcy0+PnJ1bkNvbW1hbmQ6IEV4ZWN1dGUgJ25wbSBscyAtLWpzb24nXG4gKiAgIHJ1bkNvbW1hbmQtLT4+Z2V0RGVwZW5kZW5jaWVzOiBSZXR1cm4gY29tbWFuZCBvdXRwdXRcbiAqICAgZ2V0RGVwZW5kZW5jaWVzLT4+SlNPTjogUGFyc2UgY29tbWFuZCBvdXRwdXRcbiAqICAgSlNPTi0tPj5nZXREZXBlbmRlbmNpZXM6IFJldHVybiBwYXJzZWQgb2JqZWN0XG4gKiAgIGdldERlcGVuZGVuY2llcy0+PmdldERlcGVuZGVuY2llczogUHJvY2VzcyBkZXBlbmRlbmNpZXNcbiAqICAgZ2V0RGVwZW5kZW5jaWVzLS0+PkNhbGxlcjogUmV0dXJuIHByb2Nlc3NlZCBkZXBlbmRlbmNpZXNcbiAqIEBtZW1iZXJPZiBtb2R1bGU6dXRpbHNcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldERlcGVuZGVuY2llcyhcbiAgcGF0aDogc3RyaW5nID0gcHJvY2Vzcy5jd2QoKVxuKTogUHJvbWlzZTxEZXBlbmRlbmN5TWFwPiB7XG4gIGxldCBwa2c6IGFueTtcblxuICB0cnkge1xuICAgIHBrZyA9IEpTT04ucGFyc2UoYXdhaXQgcnVuQ29tbWFuZChgbnBtIGxzIC0tanNvbmAsIHsgY3dkOiBwYXRoIH0pLnByb21pc2UpO1xuICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gcmV0cmlldmUgZGVwZW5kZW5jaWVzOiAke2V9YCk7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIGNvbnN0IG1hcHBlciA9IChlbnRyeTogW3N0cmluZywgdW5rbm93bl0sIGluZGV4OiBudW1iZXIpID0+ICh7XG4gICAgbmFtZTogZW50cnlbMF0sXG4gICAgdmVyc2lvbjogKGVudHJ5WzFdIGFzIGFueSkudmVyc2lvbixcbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICBwcm9kOiBPYmplY3QuZW50cmllcyhwa2cuZGVwZW5kZW5jaWVzIHx8IHt9KS5tYXAobWFwcGVyKSxcbiAgICBkZXY6IE9iamVjdC5lbnRyaWVzKHBrZy5kZXZEZXBlbmRlbmNpZXMgfHwge30pLm1hcChtYXBwZXIpLFxuICAgIHBlZXI6IE9iamVjdC5lbnRyaWVzKHBrZy5wZWVyRGVwZW5kZW5jaWVzIHx8IHt9KS5tYXAobWFwcGVyKSxcbiAgfTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gVXBkYXRlcyBwcm9qZWN0IGRlcGVuZGVuY2llcyB0byB0aGVpciBsYXRlc3QgdmVyc2lvbnMuXG4gKiBAc3VtbWFyeSBSdW5zIG5wbS1jaGVjay11cGRhdGVzIHRvIHVwZGF0ZSBwYWNrYWdlLmpzb24gYW5kIHRoZW4gaW5zdGFsbHMgdGhlIHVwZGF0ZWQgZGVwZW5kZW5jaWVzLlxuICpcbiAqIEByZXR1cm4ge1Byb21pc2U8dm9pZD59IEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gZGVwZW5kZW5jaWVzIGFyZSB1cGRhdGVkLlxuICpcbiAqIEBmdW5jdGlvbiB1cGRhdGVEZXBlbmRlbmNpZXNcbiAqXG4gKiBAbWVtYmVyT2YgbW9kdWxlOnV0aWxzXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB1cGRhdGVEZXBlbmRlbmNpZXMoKSB7XG4gIGNvbnN0IGxvZyA9IGxvZ2dlci5mb3IodXBkYXRlRGVwZW5kZW5jaWVzKTtcbiAgbG9nLmluZm8oXCJjaGVja2luZyBmb3IgdXBkYXRlcy4uLlwiKTtcbiAgYXdhaXQgcnVuQ29tbWFuZChcIm5weCBucG0tY2hlY2stdXBkYXRlcyAtdVwiKS5wcm9taXNlO1xuICBsb2cuaW5mbyhcInVwZGF0aW5nLi4uXCIpO1xuICBhd2FpdCBydW5Db21tYW5kKFwibnB4IG5wbSBydW4gZG8taW5zdGFsbFwiKS5wcm9taXNlO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBJbnN0YWxscyBkZXBlbmRlbmNpZXMgaWYgdGhleSBhcmUgbm90IGFscmVhZHkgYXZhaWxhYmxlLlxuICogQHN1bW1hcnkgQ2hlY2tzIGlmIHNwZWNpZmllZCBkZXBlbmRlbmNpZXMgYXJlIGluc3RhbGxlZCBhbmQgaW5zdGFsbHMgYW55IHRoYXQgYXJlIG1pc3NpbmcuXG4gKlxuICogQHBhcmFtIHtzdHJpbmdbXSB8IHN0cmluZ30gZGVwcyAtIFRoZSBkZXBlbmRlbmNpZXMgdG8gY2hlY2sgYW5kIHBvdGVudGlhbGx5IGluc3RhbGwuXG4gKiBAcGFyYW0ge1NpbXBsZURlcGVuZGVuY3lNYXB9IFtkZXBlbmRlbmNpZXNdIC0gT3B0aW9uYWwgbWFwIG9mIGV4aXN0aW5nIGRlcGVuZGVuY2llcy5cbiAqIEByZXR1cm4ge1Byb21pc2U8U2ltcGxlRGVwZW5kZW5jeU1hcD59IFVwZGF0ZWQgbWFwIG9mIGRlcGVuZGVuY2llcy5cbiAqXG4gKiBAZnVuY3Rpb24gaW5zdGFsbElmTm90QXZhaWxhYmxlXG4gKlxuICogQG1lbWJlck9mIG1vZHVsZTp1dGlsc1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW5zdGFsbElmTm90QXZhaWxhYmxlKFxuICBkZXBzOiBzdHJpbmdbXSB8IHN0cmluZyxcbiAgZGVwZW5kZW5jaWVzPzogU2ltcGxlRGVwZW5kZW5jeU1hcFxuKSB7XG4gIGlmICghZGVwZW5kZW5jaWVzKSB7XG4gICAgY29uc3QgZDogRGVwZW5kZW5jeU1hcCA9IGF3YWl0IGdldERlcGVuZGVuY2llcygpO1xuICAgIGRlcGVuZGVuY2llcyA9IHtcbiAgICAgIHByb2Q6IGQucHJvZD8ubWFwKChwKSA9PiBwLm5hbWUpIHx8IFtdLFxuICAgICAgZGV2OiBkLmRldj8ubWFwKChkKSA9PiBkLm5hbWUpIHx8IFtdLFxuICAgICAgcGVlcjogZC5wZWVyPy5tYXAoKHApID0+IHAubmFtZSkgfHwgW10sXG4gICAgfTtcbiAgfVxuICBjb25zdCB7IHByb2QsIGRldiwgcGVlciB9ID0gZGVwZW5kZW5jaWVzO1xuICBjb25zdCBpbnN0YWxsZWQgPSBBcnJheS5mcm9tKFxuICAgIG5ldyBTZXQoWy4uLihwcm9kIHx8IFtdKSwgLi4uKGRldiB8fCBbXSksIC4uLihwZWVyIHx8IFtdKV0pXG4gICk7XG4gIGRlcHMgPSB0eXBlb2YgZGVwcyA9PT0gXCJzdHJpbmdcIiA/IFtkZXBzXSA6IGRlcHM7XG4gIGNvbnN0IHRvSW5zdGFsbCA9IGRlcHMuZmlsdGVyKChkKSA9PiAhaW5zdGFsbGVkLmluY2x1ZGVzKGQpKTtcblxuICBpZiAodG9JbnN0YWxsLmxlbmd0aCkgYXdhaXQgaW5zdGFsbERlcGVuZGVuY2llcyh7IGRldjogdG9JbnN0YWxsIH0pO1xuICBkZXBlbmRlbmNpZXMuZGV2ID0gZGVwZW5kZW5jaWVzLmRldiB8fCBbXTtcbiAgZGVwZW5kZW5jaWVzLmRldi5wdXNoKC4uLnRvSW5zdGFsbCk7XG4gIHJldHVybiBkZXBlbmRlbmNpZXM7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFB1c2hlcyBjaGFuZ2VzIHRvIEdpdCByZXBvc2l0b3J5LlxuICogQHN1bW1hcnkgVGVtcG9yYXJpbHkgY2hhbmdlcyBHaXQgdXNlciBjb25maWd1cmF0aW9uLCBjb21taXRzIGFsbCBjaGFuZ2VzLCBwdXNoZXMgdG8gcmVtb3RlLCBhbmQgcmVzdG9yZXMgb3JpZ2luYWwgdXNlciBjb25maWd1cmF0aW9uLlxuICpcbiAqIEByZXR1cm4ge1Byb21pc2U8dm9pZD59IEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gY2hhbmdlcyBhcmUgcHVzaGVkLlxuICpcbiAqIEBmdW5jdGlvbiBwdXNoVG9HaXRcbiAqXG4gKiBAbWVtYmVyT2YgbW9kdWxlOnV0aWxzXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwdXNoVG9HaXQoKSB7XG4gIGNvbnN0IGxvZyA9IGxvZ2dlci5mb3IocHVzaFRvR2l0KTtcbiAgY29uc3QgZ2l0VXNlciA9IGF3YWl0IHJ1bkNvbW1hbmQoXCJnaXQgY29uZmlnIHVzZXIubmFtZVwiKS5wcm9taXNlO1xuICBjb25zdCBnaXRFbWFpbCA9IGF3YWl0IHJ1bkNvbW1hbmQoXCJnaXQgY29uZmlnIHVzZXIuZW1haWxcIikucHJvbWlzZTtcbiAgbG9nLnZlcmJvc2UoYGNhY2hlZCBnaXQgaWQ6ICR7Z2l0VXNlcn0vJHtnaXRFbWFpbH0uIGNoYW5naW5nIHRvIGF1dG9tYXRpb25gKTtcbiAgYXdhaXQgcnVuQ29tbWFuZCgnZ2l0IGNvbmZpZyB1c2VyLmVtYWlsIFwiYXV0b21hdGlvbkBkZWNhZi50c1wiJykucHJvbWlzZTtcbiAgYXdhaXQgcnVuQ29tbWFuZCgnZ2l0IGNvbmZpZyB1c2VyLm5hbWUgXCJkZWNhZlwiJykucHJvbWlzZTtcbiAgbG9nLmluZm8oXCJQdXNoaW5nIGNoYW5nZXMgdG8gZ2l0Li4uXCIpO1xuICBhd2FpdCBydW5Db21tYW5kKFwiZ2l0IGFkZCAuXCIpLnByb21pc2U7XG4gIGF3YWl0IHJ1bkNvbW1hbmQoYGdpdCBjb21taXQgLW0gXCJyZWZzICMxIC0gYWZ0ZXIgcmVwbyBzZXR1cFwiYCkucHJvbWlzZTtcbiAgYXdhaXQgcnVuQ29tbWFuZChcImdpdCBwdXNoXCIpLnByb21pc2U7XG4gIGF3YWl0IHJ1bkNvbW1hbmQoYGdpdCBjb25maWcgdXNlci5lbWFpbCBcIiR7Z2l0RW1haWx9XCJgKS5wcm9taXNlO1xuICBhd2FpdCBydW5Db21tYW5kKGBnaXQgY29uZmlnIHVzZXIubmFtZSBcIiR7Z2l0VXNlcn1cImApLnByb21pc2U7XG4gIGxvZy52ZXJib3NlKGByZXZlcnRlZCB0byBnaXQgaWQ6ICR7Z2l0VXNlcn0vJHtnaXRFbWFpbH1gKTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gSW5zdGFsbHMgcHJvamVjdCBkZXBlbmRlbmNpZXMuXG4gKiBAc3VtbWFyeSBJbnN0YWxscyBwcm9kdWN0aW9uLCBkZXZlbG9wbWVudCwgYW5kIHBlZXIgZGVwZW5kZW5jaWVzIGFzIHNwZWNpZmllZC5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gZGVwZW5kZW5jaWVzIC0gT2JqZWN0IGNvbnRhaW5pbmcgYXJyYXlzIG9mIGRlcGVuZGVuY2llcyB0byBpbnN0YWxsLlxuICogQHBhcmFtIHtzdHJpbmdbXX0gW2RlcGVuZGVuY2llcy5wcm9kXSAtIFByb2R1Y3Rpb24gZGVwZW5kZW5jaWVzIHRvIGluc3RhbGwuXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBbZGVwZW5kZW5jaWVzLmRldl0gLSBEZXZlbG9wbWVudCBkZXBlbmRlbmNpZXMgdG8gaW5zdGFsbC5cbiAqIEBwYXJhbSB7c3RyaW5nW119IFtkZXBlbmRlbmNpZXMucGVlcl0gLSBQZWVyIGRlcGVuZGVuY2llcyB0byBpbnN0YWxsLlxuICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiBhbGwgZGVwZW5kZW5jaWVzIGFyZSBpbnN0YWxsZWQuXG4gKlxuICogQGZ1bmN0aW9uIGluc3RhbGxEZXBlbmRlbmNpZXNcbiAqXG4gKiBAbWVtYmVyT2YgbW9kdWxlOnV0aWxzXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpbnN0YWxsRGVwZW5kZW5jaWVzKGRlcGVuZGVuY2llczoge1xuICBwcm9kPzogc3RyaW5nW107XG4gIGRldj86IHN0cmluZ1tdO1xuICBwZWVyPzogc3RyaW5nW107XG59KSB7XG4gIGNvbnN0IGxvZyA9IGxvZ2dlci5mb3IoaW5zdGFsbERlcGVuZGVuY2llcyk7XG4gIGNvbnN0IHByb2QgPSBkZXBlbmRlbmNpZXMucHJvZCB8fCBbXTtcbiAgY29uc3QgZGV2ID0gZGVwZW5kZW5jaWVzLmRldiB8fCBbXTtcbiAgY29uc3QgcGVlciA9IGRlcGVuZGVuY2llcy5wZWVyIHx8IFtdO1xuICBpZiAocHJvZC5sZW5ndGgpIHtcbiAgICBsb2cuaW5mbyhgSW5zdGFsbGluZyBkZXBlbmRlbmNpZXMgJHtwcm9kLmpvaW4oXCIsIFwiKX0uLi5gKTtcbiAgICBhd2FpdCBydW5Db21tYW5kKGBucG0gaW5zdGFsbCAke3Byb2Quam9pbihcIiBcIil9YCwgeyBjd2Q6IHByb2Nlc3MuY3dkKCkgfSlcbiAgICAgIC5wcm9taXNlO1xuICB9XG4gIGlmIChkZXYubGVuZ3RoKSB7XG4gICAgbG9nLmluZm8oYEluc3RhbGxpbmcgZGV2RGVwZW5kZW5jaWVzICR7ZGV2LmpvaW4oXCIsIFwiKX0uLi5gKTtcbiAgICBhd2FpdCBydW5Db21tYW5kKGBucG0gaW5zdGFsbCAtLXNhdmUtZGV2ICR7ZGV2LmpvaW4oXCIgXCIpfWAsIHtcbiAgICAgIGN3ZDogcHJvY2Vzcy5jd2QoKSxcbiAgICB9KS5wcm9taXNlO1xuICB9XG4gIGlmIChwZWVyLmxlbmd0aCkge1xuICAgIGxvZy5pbmZvKGBJbnN0YWxsaW5nIHBlZXJEZXBlbmRlbmNpZXMgJHtwZWVyLmpvaW4oXCIsIFwiKX0uLi5gKTtcbiAgICBhd2FpdCBydW5Db21tYW5kKGBucG0gaW5zdGFsbCAtLXNhdmUtcGVlciAke3BlZXIuam9pbihcIiBcIil9YCwge1xuICAgICAgY3dkOiBwcm9jZXNzLmN3ZCgpLFxuICAgIH0pLnByb21pc2U7XG4gIH1cbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gTm9ybWFsaXplcyBpbXBvcnRzIHRvIGhhbmRsZSBib3RoIENvbW1vbkpTIGFuZCBFU01vZHVsZSBmb3JtYXRzLlxuICogQHN1bW1hcnkgVXRpbGl0eSBmdW5jdGlvbiB0byBoYW5kbGUgbW9kdWxlIGltcG9ydCBkaWZmZXJlbmNlcyBiZXR3ZWVuIGZvcm1hdHMuXG4gKlxuICogQHRlbXBsYXRlIFQgLSBUeXBlIG9mIHRoZSBpbXBvcnRlZCBtb2R1bGUuXG4gKiBAcGFyYW0ge1Byb21pc2U8VD59IGltcG9ydFByb21pc2UgLSBQcm9taXNlIHJldHVybmVkIGJ5IGR5bmFtaWMgaW1wb3J0LlxuICogQHJldHVybiB7UHJvbWlzZTxUPn0gTm9ybWFsaXplZCBtb2R1bGUuXG4gKlxuICogQGZ1bmN0aW9uIG5vcm1hbGl6ZUltcG9ydFxuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6dXRpbHNcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG5vcm1hbGl6ZUltcG9ydDxUPihcbiAgaW1wb3J0UHJvbWlzZTogUHJvbWlzZTxUPlxuKTogUHJvbWlzZTxUPiB7XG4gIC8vIENvbW1vbkpTJ3MgYG1vZHVsZS5leHBvcnRzYCBpcyB3cmFwcGVkIGFzIGBkZWZhdWx0YCBpbiBFU01vZHVsZS5cbiAgcmV0dXJuIGltcG9ydFByb21pc2UudGhlbigobTogYW55KSA9PiAobS5kZWZhdWx0IHx8IG0pIGFzIFQpO1xufVxuIiwiaW1wb3J0IHNsb2dhbnMgZnJvbSBcIi4uL2Fzc2V0cy9zbG9nYW5zLmpzb25cIjtcbmltcG9ydCB7IHN0eWxlIH0gZnJvbSBcInN0eWxlZC1zdHJpbmctYnVpbGRlclwiO1xuaW1wb3J0IHsgTG9nZ2VyIH0gZnJvbSBcIkBkZWNhZi10cy9sb2dnaW5nXCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEFycmF5IG9mIEFOU0kgY29sb3IgY29kZXMgZm9yIGJhbm5lciBzdHlsaW5nLlxuICogQHN1bW1hcnkgRGVmaW5lcyBhIHNldCBvZiBBTlNJIGNvbG9yIGNvZGVzIHVzZWQgdG8gc3R5bGUgdGhlIGJhbm5lciB0ZXh0LlxuICogQG1lbWJlck9mIG1vZHVsZTp1dGlsc1xuICovXG5jb25zdCBjb2xvcnMgPSBbXG4gIFwiXFx4MWJbMzg7NTsyMTVtXCIsIC8vIHNvZnQgb3JhbmdlXG4gIFwiXFx4MWJbMzg7NTsyMDltXCIsIC8vIGNvcmFsXG4gIFwiXFx4MWJbMzg7NTsyMDVtXCIsIC8vIHBpbmtcbiAgXCJcXHgxYlszODs1OzIxMG1cIiwgLy8gcGVhY2h5XG4gIFwiXFx4MWJbMzg7NTsyMTdtXCIsIC8vIHNhbG1vblxuICBcIlxceDFiWzM4OzU7MjE2bVwiLCAvLyBsaWdodCBjb3JhbFxuICBcIlxceDFiWzM4OzU7MjI0bVwiLCAvLyBsaWdodCBwZWFjaFxuICBcIlxceDFiWzM4OzU7MjMwbVwiLCAvLyBzb2Z0IGNyZWFtXG4gIFwiXFx4MWJbMzg7NTsyMzBtXCIsIC8vIHNvZnQgY3JlYW1cbl07XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFByaW50cyBhIHN0eWxlZCBiYW5uZXIgdG8gdGhlIGNvbnNvbGUuXG4gKiBAc3VtbWFyeSBHZW5lcmF0ZXMgYW5kIHByaW50cyBhIGNvbG9yZnVsIEFTQ0lJIGFydCBiYW5uZXIgd2l0aCBhIHJhbmRvbSBzbG9nYW4uXG4gKiBAcGFyYW0ge0xvZ2dlcn0gW2xvZ2dlcl0gLSBPcHRpb25hbCBsb2dnZXIgZm9yIHZlcmJvc2Ugb3V0cHV0LlxuICogQG1lbWJlck9mIG1vZHVsZTp1dGlsc1xuICogQGZ1bmN0aW9uIHByaW50QmFubmVyXG4gKiBAbWVybWFpZFxuICogc2VxdWVuY2VEaWFncmFtXG4gKiAgIHBhcnRpY2lwYW50IHByaW50QmFubmVyXG4gKiAgIHBhcnRpY2lwYW50IGdldFNsb2dhblxuICogICBwYXJ0aWNpcGFudCBwYWRFbmRcbiAqICAgcGFydGljaXBhbnQgY29uc29sZVxuICogICBwcmludEJhbm5lci0+PmdldFNsb2dhbjogQ2FsbCBnZXRTbG9nYW4oKVxuICogICBnZXRTbG9nYW4tLT4+cHJpbnRCYW5uZXI6IFJldHVybiByYW5kb20gc2xvZ2FuXG4gKiAgIHByaW50QmFubmVyLT4+cHJpbnRCYW5uZXI6IENyZWF0ZSBiYW5uZXIgQVNDSUkgYXJ0XG4gKiAgIHByaW50QmFubmVyLT4+cHJpbnRCYW5uZXI6IFNwbGl0IGJhbm5lciBpbnRvIGxpbmVzXG4gKiAgIHByaW50QmFubmVyLT4+cHJpbnRCYW5uZXI6IENhbGN1bGF0ZSBtYXggbGluZSBsZW5ndGhcbiAqICAgcHJpbnRCYW5uZXItPj5wYWRFbmQ6IENhbGwgcGFkRW5kIHdpdGggc2xvZ2FuXG4gKiAgIHBhZEVuZC0tPj5wcmludEJhbm5lcjogUmV0dXJuIHBhZGRlZCBzbG9nYW4gbGluZVxuICogICBsb29wIEZvciBlYWNoIGJhbm5lciBsaW5lXG4gKiAgICAgcHJpbnRCYW5uZXItPj5zdHlsZTogQ2FsbCBzdHlsZShsaW5lKVxuICogICAgIHN0eWxlLS0+PnByaW50QmFubmVyOiBSZXR1cm4gc3R5bGVkIGxpbmVcbiAqICAgICBwcmludEJhbm5lci0+PmNvbnNvbGU6IExvZyBzdHlsZWQgbGluZVxuICogICBlbmRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByaW50QmFubmVyKGxvZ2dlcj86IExvZ2dlcikge1xuICBjb25zdCBtZXNzYWdlID0gZ2V0U2xvZ2FuKCk7XG4gIGNvbnN0IGJhbm5lcjogc3RyaW5nIHwgc3RyaW5nW10gPVxuICAgIGAjICAgICAgICAgICAgICAgICDilpHilpLilpPilojilojilojilojilojilojilojilpPilpLilpEgIOKWkeKWkuKWk+KWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWk+KWkuKWkSAg4paR4paS4paT4paI4paI4paI4paI4paI4paI4paT4paS4paRICAg4paR4paS4paT4paI4paI4paI4paI4paI4paI4paT4paS4paRICDilpHilpLilpPilojilojilojilojilojilojilojilojilpPilpLilpEgICAgICAg4paR4paS4paT4paI4paI4paI4paI4paI4paI4paI4paI4paT4paS4paRICDilpHilpLilpPilojilojilojilojilojilojilojilpPilpLilpEgXG4jICAgICAgKCAoICAgICAgICDilpHilpLilpPilojilpPilpLilpHilpHilpLilpPilojilpPilpLilpEg4paR4paS4paT4paI4paT4paS4paRICAgICAgICDilpHilpLilpPilojilpPilpLilpHilpHilpLilpPilojilpPilpLilpEg4paR4paS4paT4paI4paT4paS4paR4paR4paS4paT4paI4paT4paS4paRIOKWkeKWkuKWk+KWiOKWk+KWkuKWkSAgICAgICAgICAgICAgICAg4paR4paS4paT4paI4paT4paS4paRICAgICDilpHilpLilpPilojilpPilpLilpEgICAgICAgIFxuIyAgICAgICApICkgICAgICAg4paR4paS4paT4paI4paT4paS4paR4paR4paS4paT4paI4paT4paS4paRIOKWkeKWkuKWk+KWiOKWk+KWkuKWkSAgICAgICAg4paR4paS4paT4paI4paT4paS4paRICAgICAgICDilpHilpLilpPilojilpPilpLilpHilpHilpLilpPilojilpPilpLilpEg4paR4paS4paT4paI4paT4paS4paRICAgICAgICAgICAgICAgICDilpHilpLilpPilojilpPilpLilpEgICAgIOKWkeKWkuKWk+KWiOKWk+KWkuKWkSAgICAgICAgXG4jICAgIFs9PT09PT09XSAgICDilpHilpLilpPilojilpPilpLilpHilpHilpLilpPilojilpPilpLilpEg4paR4paS4paT4paI4paI4paI4paI4paI4paI4paT4paS4paRICAg4paR4paS4paT4paI4paT4paS4paRICAgICAgICDilpHilpLilpPilojilojilojilojilojilojilojilojilpPilpLilpEg4paR4paS4paT4paI4paI4paI4paI4paI4paI4paT4paS4paRICAgICAgICAgICAg4paR4paS4paT4paI4paT4paS4paRICAgICAg4paR4paS4paT4paI4paI4paI4paI4paI4paI4paT4paS4paRICBcbiMgICAgIFxcYC0tLS0twrQgICAgIOKWkeKWkuKWk+KWiOKWk+KWkuKWkeKWkeKWkuKWk+KWiOKWk+KWkuKWkSDilpHilpLilpPilojilpPilpLilpEgICAgICAgIOKWkeKWkuKWk+KWiOKWk+KWkuKWkSAgICAgICAg4paR4paS4paT4paI4paT4paS4paR4paR4paS4paT4paI4paT4paS4paRIOKWkeKWkuKWk+KWiOKWk+KWkuKWkSAgICAgICAgICAgICAgICAg4paR4paS4paT4paI4paT4paS4paRICAgICAgICAgICAg4paR4paS4paT4paI4paT4paS4paRIFxuIyAgICAgICAgICAgICAgICAg4paR4paS4paT4paI4paT4paS4paR4paR4paS4paT4paI4paT4paS4paRIOKWkeKWkuKWk+KWiOKWk+KWkuKWkSAgICAgICAg4paR4paS4paT4paI4paT4paS4paR4paR4paS4paT4paI4paT4paS4paRIOKWkeKWkuKWk+KWiOKWk+KWkuKWkeKWkeKWkuKWk+KWiOKWk+KWkuKWkSDilpHilpLilpPilojilpPilpLilpEgICAgICAgICAgICAgICAgIOKWkeKWkuKWk+KWiOKWk+KWkuKWkSAgICAgICAgICAgIOKWkeKWkuKWk+KWiOKWk+KWkuKWkSBcbiMgICAgICAgICAgICAgICAgIOKWkeKWkuKWk+KWiOKWiOKWiOKWiOKWiOKWiOKWiOKWk+KWkuKWkSAg4paR4paS4paT4paI4paI4paI4paI4paI4paI4paI4paI4paT4paS4paRICDilpHilpLilpPilojilojilojilojilojilojilpPilpLilpEgIOKWkeKWkuKWk+KWiOKWk+KWkuKWkeKWkeKWkuKWk+KWiOKWk+KWkuKWkSDilpHilpLilpPilojilpPilpLilpEgICAgICAgICAgICAgICAgIOKWkeKWkuKWk+KWiOKWk+KWkuKWkSAgICAg4paR4paS4paT4paI4paI4paI4paI4paI4paI4paI4paT4paS4paRICBcbiNgLnNwbGl0KFwiXFxuXCIpO1xuICBjb25zdCBtYXhMZW5ndGggPSBiYW5uZXIucmVkdWNlKChtYXgsIGxpbmUpID0+IE1hdGgubWF4KG1heCwgbGluZS5sZW5ndGgpLCAwKTtcbiAgYmFubmVyLnB1c2goYCMgICR7bWVzc2FnZS5wYWRTdGFydChtYXhMZW5ndGggLSAzKX1gKTtcbiAgYmFubmVyLmZvckVhY2goKGxpbmUsIGluZGV4KSA9PiB7XG4gICAgKGxvZ2dlciA/IGxvZ2dlci5pbmZvLmJpbmQobG9nZ2VyKSA6IGNvbnNvbGUubG9nLmJpbmQoY29uc29sZSkpKFxuICAgICAgc3R5bGUobGluZSB8fCBcIlwiKS5yYXcoY29sb3JzW2luZGV4XSkudGV4dFxuICAgICk7XG4gIH0pO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBSZXRyaWV2ZXMgYSBzbG9nYW4gZnJvbSB0aGUgcHJlZGVmaW5lZCBsaXN0LlxuICogQHN1bW1hcnkgRmV0Y2hlcyBhIHJhbmRvbSBzbG9nYW4gb3IgYSBzcGVjaWZpYyBvbmUgYnkgaW5kZXggZnJvbSB0aGUgc2xvZ2FucyBsaXN0LlxuICogQHBhcmFtIHtudW1iZXJ9IFtpXSAtIE9wdGlvbmFsIGluZGV4IHRvIHJldHJpZXZlIGEgc3BlY2lmaWMgc2xvZ2FuLlxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgc2VsZWN0ZWQgc2xvZ2FuLlxuICogQGZ1bmN0aW9uIGdldFNsb2dhblxuICogQG1lbWJlck9mIG1vZHVsZTp1dGlsc1xuICogQG1lcm1haWRcbiAqIHNlcXVlbmNlRGlhZ3JhbVxuICogICBwYXJ0aWNpcGFudCBnZXRTbG9nYW5cbiAqICAgcGFydGljaXBhbnQgTWF0aC5yYW5kb21cbiAqICAgcGFydGljaXBhbnQgc2xvZ2Fuc1xuICogICBhbHQgaSBpcyB1bmRlZmluZWRcbiAqICAgICBnZXRTbG9nYW4tPj5NYXRoLnJhbmRvbTogR2VuZXJhdGUgcmFuZG9tIGluZGV4XG4gKiAgICAgTWF0aC5yYW5kb20tLT4+Z2V0U2xvZ2FuOiBSZXR1cm4gcmFuZG9tIGluZGV4XG4gKiAgIGVsc2UgaSBpcyBkZWZpbmVkXG4gKiAgICAgTm90ZSBvdmVyIGdldFNsb2dhbjogVXNlIHByb3ZpZGVkIGluZGV4XG4gKiAgIGVuZFxuICogICBnZXRTbG9nYW4tPj5zbG9nYW5zOiBBY2Nlc3Mgc2xvZ2FuIGF0IGluZGV4XG4gKiAgIHNsb2dhbnMtLT4+Z2V0U2xvZ2FuOiBSZXR1cm4gc2xvZ2FuXG4gKiAgIGFsdCBFcnJvciBvY2N1cnNcbiAqICAgICBnZXRTbG9nYW4tPj5nZXRTbG9nYW46IFRocm93IGVycm9yXG4gKiAgIGVuZFxuICogICBnZXRTbG9nYW4tLT4+Q2FsbGVyOiBSZXR1cm4gc2xvZ2FuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTbG9nYW4oaT86IG51bWJlcik6IHN0cmluZyB7XG4gIHRyeSB7XG4gICAgaSA9XG4gICAgICB0eXBlb2YgaSA9PT0gXCJ1bmRlZmluZWRcIiA/IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIHNsb2dhbnMubGVuZ3RoKSA6IGk7XG4gICAgcmV0dXJuIHNsb2dhbnNbaV0uU2xvZ2FuO1xuICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIHJldHJpZXZlIHNsb2dhbnM6ICR7ZXJyb3J9YCk7XG4gIH1cbn1cbiIsIi8qKlxuICogQGRlc2NyaXB0aW9uIERldGVybWluZXMgaWYgdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQgaXMgYSBicm93c2VyIGJ5IGNoZWNraW5nIHRoZSBwcm90b3R5cGUgY2hhaW4gb2YgdGhlIGdsb2JhbCBvYmplY3QuXG4gKiBAc3VtbWFyeSBDaGVja3MgaWYgdGhlIGNvZGUgaXMgcnVubmluZyBpbiBhIGJyb3dzZXIgZW52aXJvbm1lbnQuXG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSBlbnZpcm9ubWVudCBpcyBhIGJyb3dzZXIsIGZhbHNlIG90aGVyd2lzZS5cbiAqIEBmdW5jdGlvbiBpc0Jyb3dzZXJcbiAqIEBtZW1iZXJPZiBtb2R1bGU6dXRpbHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQnJvd3NlcigpOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICBPYmplY3QuZ2V0UHJvdG90eXBlT2YoT2JqZWN0LmdldFByb3RvdHlwZU9mKGdsb2JhbFRoaXMpKSAhPT1cbiAgICBPYmplY3QucHJvdG90eXBlXG4gICk7XG59XG4iLCIvKipcbiAqIEBjbGFzcyBPYmplY3RBY2N1bXVsYXRvclxuICogQHRlbXBsYXRlIFQgLSBUaGUgdHlwZSBvZiB0aGUgYWNjdW11bGF0ZWQgb2JqZWN0LCBleHRlbmRzIG9iamVjdFxuICogQGRlc2NyaXB0aW9uIEEgY2xhc3MgdGhhdCBhY2N1bXVsYXRlcyBvYmplY3RzIGFuZCBwcm92aWRlcyB0eXBlLXNhZmUgYWNjZXNzIHRvIHRoZWlyIHByb3BlcnRpZXMuXG4gKiBJdCBhbGxvd3MgZm9yIGR5bmFtaWMgYWRkaXRpb24gb2YgcHJvcGVydGllcyB3aGlsZSBtYWludGFpbmluZyB0eXBlIGluZm9ybWF0aW9uLlxuICogQHN1bW1hcnkgQWNjdW11bGF0ZXMgb2JqZWN0cyBhbmQgbWFpbnRhaW5zIHR5cGUgaW5mb3JtYXRpb24gZm9yIGFjY3VtdWxhdGVkIHByb3BlcnRpZXNcbiAqIEBtZW1iZXJPZiB1dGlsc1xuICovXG5leHBvcnQgY2xhc3MgT2JqZWN0QWNjdW11bGF0b3Ige1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJfX3NpemVcIiwge1xuICAgICAgICAgICAgdmFsdWU6IDAsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgKiBAZGVzY3JpcHRpb24gRXhwYW5kcyB0aGUgYWNjdW11bGF0b3Igd2l0aCBwcm9wZXJ0aWVzIGZyb20gYSBuZXcgb2JqZWN0XG4gICAgICogQHN1bW1hcnkgQWRkcyBuZXcgcHJvcGVydGllcyB0byB0aGUgYWNjdW11bGF0b3JcbiAgICAgKiBAdGVtcGxhdGUgViAtIFRoZSB0eXBlIG9mIHRoZSBvYmplY3QgYmVpbmcgZXhwYW5kZWRcbiAgICAgKiBAcGFyYW0ge1Z9IHZhbHVlIC0gVGhlIG9iamVjdCB0byBleHBhbmQgd2l0aFxuICAgICAqIEByZXR1cm5zIHt2b2lkfVxuICAgICAqL1xuICAgIGV4cGFuZCh2YWx1ZSkge1xuICAgICAgICBPYmplY3QuZW50cmllcyh2YWx1ZSkuZm9yRWFjaCgoW2ssIHZdKSA9PiB7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgaywge1xuICAgICAgICAgICAgICAgIGdldDogKCkgPT4gdixcbiAgICAgICAgICAgICAgICBzZXQ6ICh2YWwpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdiA9IHZhbDtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQWNjdW11bGF0ZXMgYSBuZXcgb2JqZWN0IGludG8gdGhlIGFjY3VtdWxhdG9yXG4gICAgICogQHN1bW1hcnkgQWRkcyBwcm9wZXJ0aWVzIGZyb20gYSBuZXcgb2JqZWN0IHRvIHRoZSBhY2N1bXVsYXRvciwgbWFpbnRhaW5pbmcgdHlwZSBpbmZvcm1hdGlvblxuICAgICAqIEB0ZW1wbGF0ZSBWIC0gVGhlIHR5cGUgb2YgdGhlIG9iamVjdCBiZWluZyBhY2N1bXVsYXRlZFxuICAgICAqIEBwYXJhbSB7Vn0gdmFsdWUgLSBUaGUgb2JqZWN0IHRvIGFjY3VtdWxhdGVcbiAgICAgKiBAcmV0dXJucyBBIG5ldyBPYmplY3RBY2N1bXVsYXRvciBpbnN0YW5jZSB3aXRoIHVwZGF0ZWQgdHlwZSBpbmZvcm1hdGlvblxuICAgICAqIEBtZXJtYWlkXG4gICAgICogc2VxdWVuY2VEaWFncmFtXG4gICAgICogICBwYXJ0aWNpcGFudCBBIGFzIEFjY3VtdWxhdG9yXG4gICAgICogICBwYXJ0aWNpcGFudCBPIGFzIE9iamVjdFxuICAgICAqICAgQS0+Pk86IEdldCBlbnRyaWVzXG4gICAgICogICBsb29wIEZvciBlYWNoIGVudHJ5XG4gICAgICogICAgIEEtPj5BOiBEZWZpbmUgcHJvcGVydHlcbiAgICAgKiAgIGVuZFxuICAgICAqICAgQS0+PkE6IFVwZGF0ZSBzaXplXG4gICAgICogICBBLT4+QTogUmV0dXJuIHVwZGF0ZWQgYWNjdW11bGF0b3JcbiAgICAgKi9cbiAgICBhY2N1bXVsYXRlKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuZXhwYW5kKHZhbHVlKTtcbiAgICAgICAgdGhpcy5fX3NpemUgPSB0aGlzLl9fc2l6ZSArIE9iamVjdC5rZXlzKHZhbHVlKS5sZW5ndGg7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0cmlldmVzIGEgdmFsdWUgZnJvbSB0aGUgYWNjdW11bGF0b3IgYnkgaXRzIGtleVxuICAgICAqIEBzdW1tYXJ5IEdldHMgYSB2YWx1ZSBmcm9tIHRoZSBhY2N1bXVsYXRlZCBvYmplY3QgdXNpbmcgYSB0eXBlLXNhZmUga2V5XG4gICAgICogQHRlbXBsYXRlIFQgLSB2YWx1ZSB0eXBlXG4gICAgICogQHRlbXBsYXRlIEsgLSBUaGUga2V5IHR5cGUsIG11c3QgYmUgYSBrZXkgb2YgdGhpc1xuICAgICAqIEBwYXJhbSB7S30ga2V5IC0gVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmV0cmlldmVcbiAgICAgKiBAcmV0dXJucyBUaGUgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBrZXlcbiAgICAgKi9cbiAgICBnZXQoa2V5KSB7XG4gICAgICAgIGlmICghKGtleSBpbiB0aGlzKSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgS2V5ICR7a2V5fSBkb2VzIG5vdCBleGlzdCBpbiBhY2N1bXVsYXRvci4gQXZhaWxhYmxlIGtleXM6ICR7dGhpcy5rZXlzKCkuam9pbihcIiwgXCIpfWApO1xuICAgICAgICByZXR1cm4gdGhpc1trZXldO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0cmlldmVzIGEgdmFsdWUgZnJvbSB0aGUgYWNjdW11bGF0b3IgYnkgaXRzIGtleVxuICAgICAqIEBzdW1tYXJ5IEdldHMgYSB2YWx1ZSBmcm9tIHRoZSBhY2N1bXVsYXRlZCBvYmplY3QgdXNpbmcgYSB0eXBlLXNhZmUga2V5XG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJldHJpZXZlXG4gICAgICogQHBhcmFtIHthbnl9IHZhbHVlIC0gVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmV0cmlldmVcbiAgICAgKi9cbiAgICBwdXQoa2V5LCB2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5hY2N1bXVsYXRlKHsgW2tleV06IHZhbHVlIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ2hlY2tzIGlmIGEga2V5IGV4aXN0cyBpbiB0aGUgYWNjdW11bGF0b3JcbiAgICAgKiBAc3VtbWFyeSBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGFjY3VtdWxhdG9yIGNvbnRhaW5zIGEgc3BlY2lmaWMga2V5XG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgdG8gY2hlY2sgZm9yIGV4aXN0ZW5jZVxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBrZXkgZXhpc3RzLCBmYWxzZSBvdGhlcndpc2VcbiAgICAgKi9cbiAgICBoYXMoa2V5KSB7XG4gICAgICAgIHJldHVybiAhIXRoaXNba2V5XTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJlbW92ZXMgYSBrZXktdmFsdWUgcGFpciBmcm9tIHRoZSBhY2N1bXVsYXRvclxuICAgICAqIEBzdW1tYXJ5IERlbGV0ZXMgYSBwcm9wZXJ0eSBmcm9tIHRoZSBhY2N1bXVsYXRlZCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gcmVtb3ZlXG4gICAgICogQHJldHVybnMge30gVGhlIGFjY3VtdWxhdG9yIGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmllZCBwcm9wZXJ0eSByZW1vdmVkXG4gICAgICovXG4gICAgcmVtb3ZlKGtleSkge1xuICAgICAgICBpZiAoIShrZXkgaW4gdGhpcykpXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgZGVsZXRlIHRoaXNba2V5XTtcbiAgICAgICAgdGhpcy5fX3NpemUtLTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXRyaWV2ZXMgYWxsIGtleXMgZnJvbSB0aGUgYWNjdW11bGF0b3JcbiAgICAgKiBAc3VtbWFyeSBHZXRzIGFuIGFycmF5IG9mIGFsbCBhY2N1bXVsYXRlZCBwcm9wZXJ0eSBrZXlzXG4gICAgICogQHJldHVybnMge3N0cmluZ1tdfSBBbiBhcnJheSBvZiBrZXlzIGFzIHN0cmluZ3NcbiAgICAgKi9cbiAgICBrZXlzKCkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXRyaWV2ZXMgYWxsIHZhbHVlcyBmcm9tIHRoZSBhY2N1bXVsYXRvclxuICAgICAqIEBzdW1tYXJ5IEdldHMgYW4gYXJyYXkgb2YgYWxsIGFjY3VtdWxhdGVkIHByb3BlcnR5IHZhbHVlc1xuICAgICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHZhbHVlc1xuICAgICAqL1xuICAgIHZhbHVlcygpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBHZXRzIHRoZSBudW1iZXIgb2Yga2V5LXZhbHVlIHBhaXJzIGluIHRoZSBhY2N1bXVsYXRvclxuICAgICAqIEBzdW1tYXJ5IFJldHVybnMgdGhlIGNvdW50IG9mIGFjY3VtdWxhdGVkIHByb3BlcnRpZXNcbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIGtleS12YWx1ZSBwYWlyc1xuICAgICAqL1xuICAgIHNpemUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9fc2l6ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENsZWFycyBhbGwgYWNjdW11bGF0ZWQga2V5LXZhbHVlIHBhaXJzXG4gICAgICogQHN1bW1hcnkgUmVtb3ZlcyBhbGwgcHJvcGVydGllcyBmcm9tIHRoZSBhY2N1bXVsYXRvciBhbmQgcmV0dXJucyBhIG5ldyBlbXB0eSBpbnN0YW5jZVxuICAgICAqIEByZXR1cm5zIHtPYmplY3RBY2N1bXVsYXRvcjxuZXZlcj59IEEgbmV3IGVtcHR5IE9iamVjdEFjY3VtdWxhdG9yIGluc3RhbmNlXG4gICAgICovXG4gICAgY2xlYXIoKSB7XG4gICAgICAgIHJldHVybiBuZXcgT2JqZWN0QWNjdW11bGF0b3IoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEV4ZWN1dGVzIGEgY2FsbGJhY2sgZm9yIGVhY2gga2V5LXZhbHVlIHBhaXIgaW4gdGhlIGFjY3VtdWxhdG9yXG4gICAgICogQHN1bW1hcnkgSXRlcmF0ZXMgb3ZlciBhbGwgYWNjdW11bGF0ZWQgcHJvcGVydGllcywgY2FsbGluZyBhIGZ1bmN0aW9uIGZvciBlYWNoXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbihhbnksIHN0cmluZywgbnVtYmVyKTogdm9pZH0gY2FsbGJhY2sgLSBUaGUgZnVuY3Rpb24gdG8gZXhlY3V0ZSBmb3IgZWFjaCBlbnRyeVxuICAgICAqIEByZXR1cm5zIHt2b2lkfVxuICAgICAqL1xuICAgIGZvckVhY2goY2FsbGJhY2spIHtcbiAgICAgICAgT2JqZWN0LmVudHJpZXModGhpcykuZm9yRWFjaCgoW2tleSwgdmFsdWVdLCBpKSA9PiBjYWxsYmFjayh2YWx1ZSwga2V5LCBpKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDcmVhdGVzIGEgbmV3IGFycmF5IHdpdGggdGhlIHJlc3VsdHMgb2YgY2FsbGluZyBhIHByb3ZpZGVkIGZ1bmN0aW9uIG9uIGV2ZXJ5IGVsZW1lbnQgaW4gdGhlIGFjY3VtdWxhdG9yXG4gICAgICogQHN1bW1hcnkgTWFwcyBlYWNoIGFjY3VtdWxhdGVkIHByb3BlcnR5IHRvIGEgbmV3IHZhbHVlIHVzaW5nIGEgY2FsbGJhY2sgZnVuY3Rpb25cbiAgICAgKiBAdGVtcGxhdGUgUiAtIFRoZSB0eXBlIG9mIHRoZSBtYXBwZWQgdmFsdWVzXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbihhbnksIHN0cmluZyxudW1iZXIpOiBSfSBjYWxsYmFjayAtIEZ1bmN0aW9uIHRoYXQgcHJvZHVjZXMgYW4gZWxlbWVudCBvZiB0aGUgbmV3IGFycmF5XG4gICAgICogQHJldHVybnMge1JbXX0gQSBuZXcgYXJyYXkgd2l0aCBlYWNoIGVsZW1lbnQgYmVpbmcgdGhlIHJlc3VsdCBvZiB0aGUgY2FsbGJhY2sgZnVuY3Rpb25cbiAgICAgKi9cbiAgICBtYXAoY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMpLm1hcCgoW2tleSwgdmFsdWVdLCBpKSA9PiBjYWxsYmFjayh2YWx1ZSwga2V5LCBpKSk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pWVdOamRXMTFiR0YwYjNJdWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGN5STZXeUl1TGk4dUxpOXpjbU12WVdOamRXMTFiR0YwYjNJdWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklrRkJRVUU3T3pzN096czdSMEZQUnp0QlFVTklMRTFCUVUwc1QwRkJUeXhwUWtGQmFVSTdTVUZSTlVJN1VVRkRSU3hOUVVGTkxFTkJRVU1zWTBGQll5eERRVUZETEVsQlFVa3NSVUZCUlN4UlFVRlJMRVZCUVVVN1dVRkRjRU1zUzBGQlN5eEZRVUZGTEVOQlFVTTdXVUZEVWl4UlFVRlJMRVZCUVVVc1NVRkJTVHRaUVVOa0xGbEJRVmtzUlVGQlJTeExRVUZMTzFsQlEyNUNMRlZCUVZVc1JVRkJSU3hMUVVGTE8xTkJRMnhDTEVOQlFVTXNRMEZCUXp0SlFVTk1MRU5CUVVNN1NVRkZSRHM3T3pzN096dFBRVTlITzBsQlEwOHNUVUZCVFN4RFFVRnRRaXhMUVVGUk8xRkJRM3BETEUxQlFVMHNRMEZCUXl4UFFVRlBMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRExFVkJRVVVzUlVGQlJUdFpRVU4yUXl4TlFVRk5MRU5CUVVNc1kwRkJZeXhEUVVGRExFbEJRVWtzUlVGQlJTeERRVUZETEVWQlFVVTdaMEpCUXpkQ0xFZEJRVWNzUlVGQlJTeEhRVUZITEVWQlFVVXNRMEZCUXl4RFFVRkRPMmRDUVVOYUxFZEJRVWNzUlVGQlJTeERRVUZETEVkQlFXVXNSVUZCUlN4RlFVRkZPMjlDUVVOMlFpeERRVUZETEVkQlFVY3NSMEZCUnl4RFFVRkRPMmRDUVVOV0xFTkJRVU03WjBKQlEwUXNXVUZCV1N4RlFVRkZMRWxCUVVrN1owSkJRMnhDTEZWQlFWVXNSVUZCUlN4SlFVRkpPMkZCUTJwQ0xFTkJRVU1zUTBGQlF6dFJRVU5NTEVOQlFVTXNRMEZCUXl4RFFVRkRPMGxCUTB3c1EwRkJRenRKUVVWRU96czdPenM3T3pzN096czdPenM3TzA5QlowSkhPMGxCUTBnc1ZVRkJWU3hEUVVGdFFpeExRVUZSTzFGQlEyNURMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTTdVVUZEYmtJc1NVRkJTU3hEUVVGRExFMUJRVTBzUjBGQlJ5eEpRVUZKTEVOQlFVTXNUVUZCVFN4SFFVRkhMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNUVUZCVFN4RFFVRkRPMUZCUTNSRUxFOUJRVThzU1VGQmJVUXNRMEZCUXp0SlFVTTNSQ3hEUVVGRE8wbEJSVVE3T3pzN096czdUMEZQUnp0SlFVTklMRWRCUVVjc1EwRkJiMElzUjBGQlRUdFJRVU16UWl4SlFVRkpMRU5CUVVNc1EwRkJReXhIUVVGSExFbEJRVWtzU1VGQlNTeERRVUZETzFsQlEyaENMRTFCUVUwc1NVRkJTU3hMUVVGTExFTkJRMklzVDBGQlR5eEhRVUZoTEcxRVFVRnRSQ3hKUVVGSkxFTkJRVU1zU1VGQlNTeEZRVUZGTEVOQlFVTXNTVUZCU1N4RFFVTnlSaXhKUVVGSkxFTkJRMHdzUlVGQlJTeERRVU5LTEVOQlFVTTdVVUZEU2l4UFFVRlJMRWxCUVZrc1EwRkJReXhIUVVGUkxFTkJRVk1zUTBGQlF6dEpRVU42UXl4RFFVRkRPMGxCUlVRN096czdPMDlCUzBjN1NVRkRTQ3hIUVVGSExFTkJRVU1zUjBGQlZ5eEZRVUZGTEV0QlFWVTdVVUZEZWtJc1QwRkJUeXhKUVVGSkxFTkJRVU1zVlVGQlZTeERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hMUVVGTExFVkJRVVVzUTBGQlF5eERRVUZETzBsQlF6TkRMRU5CUVVNN1NVRkZSRHM3T3pzN1QwRkxSenRKUVVOSUxFZEJRVWNzUTBGQlF5eEhRVUZYTzFGQlEySXNUMEZCVHl4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExFZEJRV2xDTEVOQlFVTXNRMEZCUXp0SlFVTnVReXhEUVVGRE8wbEJSVVE3T3pzN08wOUJTMGM3U1VGRFNDeE5RVUZOTEVOQlEwb3NSMEZCZDBJN1VVRkplRUlzU1VGQlNTeERRVUZETEVOQlFVTXNSMEZCUnl4SlFVRkpMRWxCUVVrc1EwRkJRenRaUVVGRkxFOUJRVThzU1VGQlNTeERRVUZETzFGQlJXaERMRTlCUVU4c1NVRkJTU3hEUVVGRExFZEJRV2xDTEVOQlFVTXNRMEZCUXp0UlFVTXZRaXhKUVVGSkxFTkJRVU1zVFVGQlRTeEZRVUZGTEVOQlFVTTdVVUZEWkN4UFFVRlBMRWxCUTI5RExFTkJRVU03U1VGRE9VTXNRMEZCUXp0SlFVVkVPenM3TzA5QlNVYzdTVUZEU0N4SlFVRkpPMUZCUTBZc1QwRkJUeXhOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPMGxCUXpOQ0xFTkJRVU03U1VGRlJEczdPenRQUVVsSE8wbEJRMGdzVFVGQlRUdFJRVU5LTEU5QlFVOHNUVUZCVFN4RFFVRkRMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF6dEpRVU0zUWl4RFFVRkRPMGxCUlVRN096czdUMEZKUnp0SlFVTklMRWxCUVVrN1VVRkRSaXhQUVVGUExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTTdTVUZEY2tJc1EwRkJRenRKUVVWRU96czdPMDlCU1VjN1NVRkRTQ3hMUVVGTE8xRkJRMGdzVDBGQlR5eEpRVUZKTEdsQ1FVRnBRaXhGUVVGRkxFTkJRVU03U1VGRGFrTXNRMEZCUXp0SlFVVkVPenM3T3p0UFFVdEhPMGxCUTBnc1QwRkJUeXhEUVVOTUxGRkJRWFZGTzFGQlJYWkZMRTFCUVUwc1EwRkJReXhQUVVGUExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFVkJRVVVzUzBGQlN5eERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRVZCUVVVc1EwRkRMME1zVVVGQlVTeERRVUZETEV0QlFVc3NSVUZCUlN4SFFVRnBRaXhGUVVGRkxFTkJRVU1zUTBGQlF5eERRVU4wUXl4RFFVRkRPMGxCUTBvc1EwRkJRenRKUVVWRU96czdPenM3VDBGTlJ6dEpRVU5JTEVkQlFVY3NRMEZEUkN4UlFVRnZSVHRSUVVWd1JTeFBRVUZQTEUxQlFVMHNRMEZCUXl4UFFVRlBMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRVZCUVVVc1MwRkJTeXhEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVWQlFVVXNRMEZEYkVRc1VVRkJVU3hEUVVGRExFdEJRVXNzUlVGQlJTeEhRVUZwUWl4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVOMFF5eERRVUZETzBsQlEwb3NRMEZCUXp0RFFVTkdJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpTHlvcVhHNGdLaUJBWTJ4aGMzTWdUMkpxWldOMFFXTmpkVzExYkdGMGIzSmNiaUFxSUVCMFpXMXdiR0YwWlNCVUlDMGdWR2hsSUhSNWNHVWdiMllnZEdobElHRmpZM1Z0ZFd4aGRHVmtJRzlpYW1WamRDd2daWGgwWlc1a2N5QnZZbXBsWTNSY2JpQXFJRUJrWlhOamNtbHdkR2x2YmlCQklHTnNZWE56SUhSb1lYUWdZV05qZFcxMWJHRjBaWE1nYjJKcVpXTjBjeUJoYm1RZ2NISnZkbWxrWlhNZ2RIbHdaUzF6WVdabElHRmpZMlZ6Y3lCMGJ5QjBhR1ZwY2lCd2NtOXdaWEowYVdWekxseHVJQ29nU1hRZ1lXeHNiM2R6SUdadmNpQmtlVzVoYldsaklHRmtaR2wwYVc5dUlHOW1JSEJ5YjNCbGNuUnBaWE1nZDJocGJHVWdiV0ZwYm5SaGFXNXBibWNnZEhsd1pTQnBibVp2Y20xaGRHbHZiaTVjYmlBcUlFQnpkVzF0WVhKNUlFRmpZM1Z0ZFd4aGRHVnpJRzlpYW1WamRITWdZVzVrSUcxaGFXNTBZV2x1Y3lCMGVYQmxJR2x1Wm05eWJXRjBhVzl1SUdadmNpQmhZMk4xYlhWc1lYUmxaQ0J3Y205d1pYSjBhV1Z6WEc0Z0tpQkFiV1Z0WW1WeVQyWWdkWFJwYkhOY2JpQXFMMXh1Wlhod2IzSjBJR05zWVhOeklFOWlhbVZqZEVGalkzVnRkV3hoZEc5eVBGUWdaWGgwWlc1a2N5QnZZbXBsWTNRK0lIdGNiaUFnTHlvcVhHNGdJQ0FxSUVCd2NtbDJZWFJsWEc0Z0lDQXFJRUJrWlhOamNtbHdkR2x2YmlCVWFHVWdjMmw2WlNCdlppQjBhR1VnWVdOamRXMTFiR0YwWldRZ2IySnFaV04wWEc0Z0lDQXFJRUIwZVhCbElIdHVkVzFpWlhKOVhHNGdJQ0FxTDF4dUlDQndjbWwyWVhSbElGOWZjMmw2WlNFNklHNTFiV0psY2p0Y2JseHVJQ0JqYjI1emRISjFZM1J2Y2lncElIdGNiaUFnSUNCUFltcGxZM1F1WkdWbWFXNWxVSEp2Y0dWeWRIa29kR2hwY3l3Z1hDSmZYM05wZW1WY0lpd2dlMXh1SUNBZ0lDQWdkbUZzZFdVNklEQXNYRzRnSUNBZ0lDQjNjbWwwWVdKc1pUb2dkSEoxWlN4Y2JpQWdJQ0FnSUdOdmJtWnBaM1Z5WVdKc1pUb2dabUZzYzJVc1hHNGdJQ0FnSUNCbGJuVnRaWEpoWW14bE9pQm1ZV3h6WlN4Y2JpQWdJQ0I5S1R0Y2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkFjSEp2ZEdWamRHVmtYRzRnSUNBcUlFQmtaWE5qY21sd2RHbHZiaUJGZUhCaGJtUnpJSFJvWlNCaFkyTjFiWFZzWVhSdmNpQjNhWFJvSUhCeWIzQmxjblJwWlhNZ1puSnZiU0JoSUc1bGR5QnZZbXBsWTNSY2JpQWdJQ29nUUhOMWJXMWhjbmtnUVdSa2N5QnVaWGNnY0hKdmNHVnlkR2xsY3lCMGJ5QjBhR1VnWVdOamRXMTFiR0YwYjNKY2JpQWdJQ29nUUhSbGJYQnNZWFJsSUZZZ0xTQlVhR1VnZEhsd1pTQnZaaUIwYUdVZ2IySnFaV04wSUdKbGFXNW5JR1Y0Y0dGdVpHVmtYRzRnSUNBcUlFQndZWEpoYlNCN1ZuMGdkbUZzZFdVZ0xTQlVhR1VnYjJKcVpXTjBJSFJ2SUdWNGNHRnVaQ0IzYVhSb1hHNGdJQ0FxSUVCeVpYUjFjbTV6SUh0MmIybGtmVnh1SUNBZ0tpOWNiaUFnY0hKdmRHVmpkR1ZrSUdWNGNHRnVaRHhXSUdWNGRHVnVaSE1nYjJKcVpXTjBQaWgyWVd4MVpUb2dWaWs2SUhadmFXUWdlMXh1SUNBZ0lFOWlhbVZqZEM1bGJuUnlhV1Z6S0haaGJIVmxLUzVtYjNKRllXTm9LQ2hiYXl3Z2RsMHBJRDArSUh0Y2JpQWdJQ0FnSUU5aWFtVmpkQzVrWldacGJtVlFjbTl3WlhKMGVTaDBhR2x6TENCckxDQjdYRzRnSUNBZ0lDQWdJR2RsZERvZ0tDa2dQVDRnZGl4Y2JpQWdJQ0FnSUNBZ2MyVjBPaUFvZG1Gc09pQldXMnRsZVc5bUlGWmRLU0E5UGlCN1hHNGdJQ0FnSUNBZ0lDQWdkaUE5SUhaaGJEdGNiaUFnSUNBZ0lDQWdmU3hjYmlBZ0lDQWdJQ0FnWTI5dVptbG5kWEpoWW14bE9pQjBjblZsTEZ4dUlDQWdJQ0FnSUNCbGJuVnRaWEpoWW14bE9pQjBjblZsTEZ4dUlDQWdJQ0FnZlNrN1hHNGdJQ0FnZlNrN1hHNGdJSDFjYmx4dUlDQXZLaXBjYmlBZ0lDb2dRR1JsYzJOeWFYQjBhVzl1SUVGalkzVnRkV3hoZEdWeklHRWdibVYzSUc5aWFtVmpkQ0JwYm5SdklIUm9aU0JoWTJOMWJYVnNZWFJ2Y2x4dUlDQWdLaUJBYzNWdGJXRnllU0JCWkdSeklIQnliM0JsY25ScFpYTWdabkp2YlNCaElHNWxkeUJ2WW1wbFkzUWdkRzhnZEdobElHRmpZM1Z0ZFd4aGRHOXlMQ0J0WVdsdWRHRnBibWx1WnlCMGVYQmxJR2x1Wm05eWJXRjBhVzl1WEc0Z0lDQXFJRUIwWlcxd2JHRjBaU0JXSUMwZ1ZHaGxJSFI1Y0dVZ2IyWWdkR2hsSUc5aWFtVmpkQ0JpWldsdVp5QmhZMk4xYlhWc1lYUmxaRnh1SUNBZ0tpQkFjR0Z5WVcwZ2UxWjlJSFpoYkhWbElDMGdWR2hsSUc5aWFtVmpkQ0IwYnlCaFkyTjFiWFZzWVhSbFhHNGdJQ0FxSUVCeVpYUjFjbTV6SUVFZ2JtVjNJRTlpYW1WamRFRmpZM1Z0ZFd4aGRHOXlJR2x1YzNSaGJtTmxJSGRwZEdnZ2RYQmtZWFJsWkNCMGVYQmxJR2x1Wm05eWJXRjBhVzl1WEc0Z0lDQXFJRUJ0WlhKdFlXbGtYRzRnSUNBcUlITmxjWFZsYm1ObFJHbGhaM0poYlZ4dUlDQWdLaUFnSUhCaGNuUnBZMmx3WVc1MElFRWdZWE1nUVdOamRXMTFiR0YwYjNKY2JpQWdJQ29nSUNCd1lYSjBhV05wY0dGdWRDQlBJR0Z6SUU5aWFtVmpkRnh1SUNBZ0tpQWdJRUV0UGo1UE9pQkhaWFFnWlc1MGNtbGxjMXh1SUNBZ0tpQWdJR3h2YjNBZ1JtOXlJR1ZoWTJnZ1pXNTBjbmxjYmlBZ0lDb2dJQ0FnSUVFdFBqNUJPaUJFWldacGJtVWdjSEp2Y0dWeWRIbGNiaUFnSUNvZ0lDQmxibVJjYmlBZ0lDb2dJQ0JCTFQ0K1FUb2dWWEJrWVhSbElITnBlbVZjYmlBZ0lDb2dJQ0JCTFQ0K1FUb2dVbVYwZFhKdUlIVndaR0YwWldRZ1lXTmpkVzExYkdGMGIzSmNiaUFnSUNvdlhHNGdJR0ZqWTNWdGRXeGhkR1U4VmlCbGVIUmxibVJ6SUc5aWFtVmpkRDRvZG1Gc2RXVTZJRllwT2lCVUlDWWdWaUFtSUU5aWFtVmpkRUZqWTNWdGRXeGhkRzl5UEZRZ0ppQldQaUI3WEc0Z0lDQWdkR2hwY3k1bGVIQmhibVFvZG1Gc2RXVXBPMXh1SUNBZ0lIUm9hWE11WDE5emFYcGxJRDBnZEdocGN5NWZYM05wZW1VZ0t5QlBZbXBsWTNRdWEyVjVjeWgyWVd4MVpTa3ViR1Z1WjNSb08xeHVJQ0FnSUhKbGRIVnliaUIwYUdseklHRnpJSFZ1YTI1dmQyNGdZWE1nVkNBbUlGWWdKaUJQWW1wbFkzUkJZMk4xYlhWc1lYUnZjanhVSUNZZ1ZqNDdYRzRnSUgxY2JseHVJQ0F2S2lwY2JpQWdJQ29nUUdSbGMyTnlhWEIwYVc5dUlGSmxkSEpwWlhabGN5QmhJSFpoYkhWbElHWnliMjBnZEdobElHRmpZM1Z0ZFd4aGRHOXlJR0o1SUdsMGN5QnJaWGxjYmlBZ0lDb2dRSE4xYlcxaGNua2dSMlYwY3lCaElIWmhiSFZsSUdaeWIyMGdkR2hsSUdGalkzVnRkV3hoZEdWa0lHOWlhbVZqZENCMWMybHVaeUJoSUhSNWNHVXRjMkZtWlNCclpYbGNiaUFnSUNvZ1FIUmxiWEJzWVhSbElGUWdMU0IyWVd4MVpTQjBlWEJsWEc0Z0lDQXFJRUIwWlcxd2JHRjBaU0JMSUMwZ1ZHaGxJR3RsZVNCMGVYQmxMQ0J0ZFhOMElHSmxJR0VnYTJWNUlHOW1JSFJvYVhOY2JpQWdJQ29nUUhCaGNtRnRJSHRMZlNCclpYa2dMU0JVYUdVZ2EyVjVJRzltSUhSb1pTQjJZV3gxWlNCMGJ5QnlaWFJ5YVdWMlpWeHVJQ0FnS2lCQWNtVjBkWEp1Y3lCVWFHVWdkbUZzZFdVZ1lYTnpiMk5wWVhSbFpDQjNhWFJvSUhSb1pTQnJaWGxjYmlBZ0lDb3ZYRzRnSUdkbGREeExJR1Y0ZEdWdVpITWdhMlY1YjJZZ1ZENG9hMlY1T2lCTEtUb2dWRnRMWFNCN1hHNGdJQ0FnYVdZZ0tDRW9hMlY1SUdsdUlIUm9hWE1wS1Z4dUlDQWdJQ0FnZEdoeWIzY2dibVYzSUVWeWNtOXlLRnh1SUNBZ0lDQWdJQ0JnUzJWNUlDUjdhMlY1SUdGeklITjBjbWx1WjMwZ1pHOWxjeUJ1YjNRZ1pYaHBjM1FnYVc0Z1lXTmpkVzExYkdGMGIzSXVJRUYyWVdsc1lXSnNaU0JyWlhsek9pQWtlM1JvYVhNdWEyVjVjeWdwTG1wdmFXNG9YRzRnSUNBZ0lDQWdJQ0FnWENJc0lGd2lYRzRnSUNBZ0lDQWdJQ2w5WUZ4dUlDQWdJQ0FnS1R0Y2JpQWdJQ0J5WlhSMWNtNGdLSFJvYVhNZ1lYTWdZVzU1S1Z0clpYa2dZWE1nUzEwZ1lYTWdWRnRMWFR0Y2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkFaR1Z6WTNKcGNIUnBiMjRnVW1WMGNtbGxkbVZ6SUdFZ2RtRnNkV1VnWm5KdmJTQjBhR1VnWVdOamRXMTFiR0YwYjNJZ1lua2dhWFJ6SUd0bGVWeHVJQ0FnS2lCQWMzVnRiV0Z5ZVNCSFpYUnpJR0VnZG1Gc2RXVWdabkp2YlNCMGFHVWdZV05qZFcxMWJHRjBaV1FnYjJKcVpXTjBJSFZ6YVc1bklHRWdkSGx3WlMxellXWmxJR3RsZVZ4dUlDQWdLaUJBY0dGeVlXMGdlM04wY21sdVozMGdhMlY1SUMwZ1ZHaGxJR3RsZVNCdlppQjBhR1VnZG1Gc2RXVWdkRzhnY21WMGNtbGxkbVZjYmlBZ0lDb2dRSEJoY21GdElIdGhibmw5SUhaaGJIVmxJQzBnVkdobElHdGxlU0J2WmlCMGFHVWdkbUZzZFdVZ2RHOGdjbVYwY21sbGRtVmNiaUFnSUNvdlhHNGdJSEIxZENoclpYazZJSE4wY21sdVp5d2dkbUZzZFdVNklHRnVlU2tnZTF4dUlDQWdJSEpsZEhWeWJpQjBhR2x6TG1GalkzVnRkV3hoZEdVb2V5QmJhMlY1WFRvZ2RtRnNkV1VnZlNrN1hHNGdJSDFjYmx4dUlDQXZLaXBjYmlBZ0lDb2dRR1JsYzJOeWFYQjBhVzl1SUVOb1pXTnJjeUJwWmlCaElHdGxlU0JsZUdsemRITWdhVzRnZEdobElHRmpZM1Z0ZFd4aGRHOXlYRzRnSUNBcUlFQnpkVzF0WVhKNUlFUmxkR1Z5YldsdVpYTWdkMmhsZEdobGNpQjBhR1VnWVdOamRXMTFiR0YwYjNJZ1kyOXVkR0ZwYm5NZ1lTQnpjR1ZqYVdacFl5QnJaWGxjYmlBZ0lDb2dRSEJoY21GdElIdHpkSEpwYm1kOUlHdGxlU0F0SUZSb1pTQnJaWGtnZEc4Z1kyaGxZMnNnWm05eUlHVjRhWE4wWlc1alpWeHVJQ0FnS2lCQWNtVjBkWEp1Y3lCN1ltOXZiR1ZoYm4wZ1ZISjFaU0JwWmlCMGFHVWdhMlY1SUdWNGFYTjBjeXdnWm1Gc2MyVWdiM1JvWlhKM2FYTmxYRzRnSUNBcUwxeHVJQ0JvWVhNb2EyVjVPaUJ6ZEhKcGJtY3BPaUJpYjI5c1pXRnVJSHRjYmlBZ0lDQnlaWFIxY200Z0lTRjBhR2x6VzJ0bGVTQmhjeUJyWlhsdlppQjBhR2x6WFR0Y2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkFaR1Z6WTNKcGNIUnBiMjRnVW1WdGIzWmxjeUJoSUd0bGVTMTJZV3gxWlNCd1lXbHlJR1p5YjIwZ2RHaGxJR0ZqWTNWdGRXeGhkRzl5WEc0Z0lDQXFJRUJ6ZFcxdFlYSjVJRVJsYkdWMFpYTWdZU0J3Y205d1pYSjBlU0JtY205dElIUm9aU0JoWTJOMWJYVnNZWFJsWkNCdlltcGxZM1JjYmlBZ0lDb2dRSEJoY21GdElIdHpkSEpwYm1kOUlHdGxlU0F0SUZSb1pTQnJaWGtnYjJZZ2RHaGxJSEJ5YjNCbGNuUjVJSFJ2SUhKbGJXOTJaVnh1SUNBZ0tpQkFjbVYwZFhKdWN5QjdmU0JVYUdVZ1lXTmpkVzExYkdGMGIzSWdhVzV6ZEdGdVkyVWdkMmwwYUNCMGFHVWdjM0JsWTJsbWFXVmtJSEJ5YjNCbGNuUjVJSEpsYlc5MlpXUmNiaUFnSUNvdlhHNGdJSEpsYlc5MlpTaGNiaUFnSUNCclpYazZJR3RsZVc5bUlIUm9hWE1nZkNCemRISnBibWRjYmlBZ0tUcGNiaUFnSUNCOElDaFBiV2wwUEhSb2FYTXNJSFI1Y0dWdlppQnJaWGsrSUNZZ1QySnFaV04wUVdOamRXMTFiR0YwYjNJOFQyMXBkRHgwYUdsekxDQjBlWEJsYjJZZ2EyVjVQajRwWEc0Z0lDQWdmQ0IwYUdseklIdGNiaUFnSUNCcFppQW9JU2hyWlhrZ2FXNGdkR2hwY3lrcElISmxkSFZ5YmlCMGFHbHpPMXh1WEc0Z0lDQWdaR1ZzWlhSbElIUm9hWE5iYTJWNUlHRnpJR3RsZVc5bUlIUm9hWE5kTzF4dUlDQWdJSFJvYVhNdVgxOXphWHBsTFMwN1hHNGdJQ0FnY21WMGRYSnVJSFJvYVhNZ1lYTWdkVzVyYm05M2JpQmhjeUJQYldsMFBIUm9hWE1zSUhSNWNHVnZaaUJyWlhrK0lDWmNiaUFnSUNBZ0lFOWlhbVZqZEVGalkzVnRkV3hoZEc5eVBFOXRhWFE4ZEdocGN5d2dkSGx3Wlc5bUlHdGxlVDQrTzF4dUlDQjlYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFQmtaWE5qY21sd2RHbHZiaUJTWlhSeWFXVjJaWE1nWVd4c0lHdGxlWE1nWm5KdmJTQjBhR1VnWVdOamRXMTFiR0YwYjNKY2JpQWdJQ29nUUhOMWJXMWhjbmtnUjJWMGN5QmhiaUJoY25KaGVTQnZaaUJoYkd3Z1lXTmpkVzExYkdGMFpXUWdjSEp2Y0dWeWRIa2dhMlY1YzF4dUlDQWdLaUJBY21WMGRYSnVjeUI3YzNSeWFXNW5XMTE5SUVGdUlHRnljbUY1SUc5bUlHdGxlWE1nWVhNZ2MzUnlhVzVuYzF4dUlDQWdLaTljYmlBZ2EyVjVjeWdwT2lCemRISnBibWRiWFNCN1hHNGdJQ0FnY21WMGRYSnVJRTlpYW1WamRDNXJaWGx6S0hSb2FYTXBPMXh1SUNCOVhHNWNiaUFnTHlvcVhHNGdJQ0FxSUVCa1pYTmpjbWx3ZEdsdmJpQlNaWFJ5YVdWMlpYTWdZV3hzSUhaaGJIVmxjeUJtY205dElIUm9aU0JoWTJOMWJYVnNZWFJ2Y2x4dUlDQWdLaUJBYzNWdGJXRnllU0JIWlhSeklHRnVJR0Z5Y21GNUlHOW1JR0ZzYkNCaFkyTjFiWFZzWVhSbFpDQndjbTl3WlhKMGVTQjJZV3gxWlhOY2JpQWdJQ29nUUhKbGRIVnlibk1nUVc0Z1lYSnlZWGtnYjJZZ2RtRnNkV1Z6WEc0Z0lDQXFMMXh1SUNCMllXeDFaWE1vS1RvZ1ZGdHJaWGx2WmlCVVhWdGRJSHRjYmlBZ0lDQnlaWFIxY200Z1QySnFaV04wTG5aaGJIVmxjeWgwYUdsektUdGNiaUFnZlZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJBWkdWelkzSnBjSFJwYjI0Z1IyVjBjeUIwYUdVZ2JuVnRZbVZ5SUc5bUlHdGxlUzEyWVd4MVpTQndZV2x5Y3lCcGJpQjBhR1VnWVdOamRXMTFiR0YwYjNKY2JpQWdJQ29nUUhOMWJXMWhjbmtnVW1WMGRYSnVjeUIwYUdVZ1kyOTFiblFnYjJZZ1lXTmpkVzExYkdGMFpXUWdjSEp2Y0dWeWRHbGxjMXh1SUNBZ0tpQkFjbVYwZFhKdWN5QjdiblZ0WW1WeWZTQlVhR1VnYm5WdFltVnlJRzltSUd0bGVTMTJZV3gxWlNCd1lXbHljMXh1SUNBZ0tpOWNiaUFnYzJsNlpTZ3BPaUJ1ZFcxaVpYSWdlMXh1SUNBZ0lISmxkSFZ5YmlCMGFHbHpMbDlmYzJsNlpUdGNiaUFnZlZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJBWkdWelkzSnBjSFJwYjI0Z1EyeGxZWEp6SUdGc2JDQmhZMk4xYlhWc1lYUmxaQ0JyWlhrdGRtRnNkV1VnY0dGcGNuTmNiaUFnSUNvZ1FITjFiVzFoY25rZ1VtVnRiM1psY3lCaGJHd2djSEp2Y0dWeWRHbGxjeUJtY205dElIUm9aU0JoWTJOMWJYVnNZWFJ2Y2lCaGJtUWdjbVYwZFhKdWN5QmhJRzVsZHlCbGJYQjBlU0JwYm5OMFlXNWpaVnh1SUNBZ0tpQkFjbVYwZFhKdWN5QjdUMkpxWldOMFFXTmpkVzExYkdGMGIzSThibVYyWlhJK2ZTQkJJRzVsZHlCbGJYQjBlU0JQWW1wbFkzUkJZMk4xYlhWc1lYUnZjaUJwYm5OMFlXNWpaVnh1SUNBZ0tpOWNiaUFnWTJ4bFlYSW9LVG9nVDJKcVpXTjBRV05qZFcxMWJHRjBiM0k4Ym1WMlpYSStJSHRjYmlBZ0lDQnlaWFIxY200Z2JtVjNJRTlpYW1WamRFRmpZM1Z0ZFd4aGRHOXlLQ2s3WEc0Z0lIMWNibHh1SUNBdktpcGNiaUFnSUNvZ1FHUmxjMk55YVhCMGFXOXVJRVY0WldOMWRHVnpJR0VnWTJGc2JHSmhZMnNnWm05eUlHVmhZMmdnYTJWNUxYWmhiSFZsSUhCaGFYSWdhVzRnZEdobElHRmpZM1Z0ZFd4aGRHOXlYRzRnSUNBcUlFQnpkVzF0WVhKNUlFbDBaWEpoZEdWeklHOTJaWElnWVd4c0lHRmpZM1Z0ZFd4aGRHVmtJSEJ5YjNCbGNuUnBaWE1zSUdOaGJHeHBibWNnWVNCbWRXNWpkR2x2YmlCbWIzSWdaV0ZqYUZ4dUlDQWdLaUJBY0dGeVlXMGdlMloxYm1OMGFXOXVLR0Z1ZVN3Z2MzUnlhVzVuTENCdWRXMWlaWElwT2lCMmIybGtmU0JqWVd4c1ltRmpheUF0SUZSb1pTQm1kVzVqZEdsdmJpQjBieUJsZUdWamRYUmxJR1p2Y2lCbFlXTm9JR1Z1ZEhKNVhHNGdJQ0FxSUVCeVpYUjFjbTV6SUh0MmIybGtmVnh1SUNBZ0tpOWNiaUFnWm05eVJXRmphQ2hjYmlBZ0lDQmpZV3hzWW1GamF6b2dLSFpoYkhWbE9pQjBhR2x6VzJ0bGVXOW1JSFJvYVhOZExDQnJaWGs2SUd0bGVXOW1JSFJvYVhNc0lHazZJRzUxYldKbGNpa2dQVDRnZG05cFpGeHVJQ0FwT2lCMmIybGtJSHRjYmlBZ0lDQlBZbXBsWTNRdVpXNTBjbWxsY3loMGFHbHpLUzVtYjNKRllXTm9LQ2hiYTJWNUxDQjJZV3gxWlYwc0lHa3BJRDArWEc0Z0lDQWdJQ0JqWVd4c1ltRmpheWgyWVd4MVpTd2dhMlY1SUdGeklHdGxlVzltSUhSb2FYTXNJR2twWEc0Z0lDQWdLVHRjYmlBZ2ZWeHVYRzRnSUM4cUtseHVJQ0FnS2lCQVpHVnpZM0pwY0hScGIyNGdRM0psWVhSbGN5QmhJRzVsZHlCaGNuSmhlU0IzYVhSb0lIUm9aU0J5WlhOMWJIUnpJRzltSUdOaGJHeHBibWNnWVNCd2NtOTJhV1JsWkNCbWRXNWpkR2x2YmlCdmJpQmxkbVZ5ZVNCbGJHVnRaVzUwSUdsdUlIUm9aU0JoWTJOMWJYVnNZWFJ2Y2x4dUlDQWdLaUJBYzNWdGJXRnllU0JOWVhCeklHVmhZMmdnWVdOamRXMTFiR0YwWldRZ2NISnZjR1Z5ZEhrZ2RHOGdZU0J1WlhjZ2RtRnNkV1VnZFhOcGJtY2dZU0JqWVd4c1ltRmpheUJtZFc1amRHbHZibHh1SUNBZ0tpQkFkR1Z0Y0d4aGRHVWdVaUF0SUZSb1pTQjBlWEJsSUc5bUlIUm9aU0J0WVhCd1pXUWdkbUZzZFdWelhHNGdJQ0FxSUVCd1lYSmhiU0I3Wm5WdVkzUnBiMjRvWVc1NUxDQnpkSEpwYm1jc2JuVnRZbVZ5S1RvZ1VuMGdZMkZzYkdKaFkyc2dMU0JHZFc1amRHbHZiaUIwYUdGMElIQnliMlIxWTJWeklHRnVJR1ZzWlcxbGJuUWdiMllnZEdobElHNWxkeUJoY25KaGVWeHVJQ0FnS2lCQWNtVjBkWEp1Y3lCN1VsdGRmU0JCSUc1bGR5QmhjbkpoZVNCM2FYUm9JR1ZoWTJnZ1pXeGxiV1Z1ZENCaVpXbHVaeUIwYUdVZ2NtVnpkV3gwSUc5bUlIUm9aU0JqWVd4c1ltRmpheUJtZFc1amRHbHZibHh1SUNBZ0tpOWNiaUFnYldGd1BGSStLRnh1SUNBZ0lHTmhiR3hpWVdOck9pQW9kbUZzZFdVNklIUm9hWE5iYTJWNWIyWWdkR2hwYzEwc0lHdGxlVG9nYTJWNWIyWWdkR2hwY3l3Z2FUb2diblZ0WW1WeUtTQTlQaUJTWEc0Z0lDazZJRkpiWFNCN1hHNGdJQ0FnY21WMGRYSnVJRTlpYW1WamRDNWxiblJ5YVdWektIUm9hWE1wTG0xaGNDZ29XMnRsZVN3Z2RtRnNkV1ZkTENCcEtTQTlQbHh1SUNBZ0lDQWdZMkZzYkdKaFkyc29kbUZzZFdVc0lHdGxlU0JoY3lCclpYbHZaaUIwYUdsekxDQnBLVnh1SUNBZ0lDazdYRzRnSUgxY2JuMWNiaUpkZlE9PSIsImltcG9ydCB7IHRvRU5WRm9ybWF0IH0gZnJvbSBcIi4vdGV4dFwiO1xuaW1wb3J0IHsgRW52aXJvbm1lbnRGYWN0b3J5IH0gZnJvbSBcIi4vdHlwZXNcIjtcbmltcG9ydCB7IGlzQnJvd3NlciB9IGZyb20gXCIuL3dlYlwiO1xuaW1wb3J0IHsgT2JqZWN0QWNjdW11bGF0b3IgfSBmcm9tIFwidHlwZWQtb2JqZWN0LWFjY3VtdWxhdG9yXCI7XG5cbi8qKlxuICogQGNsYXNzIEVudmlyb25tZW50XG4gKiBAZXh0ZW5kcyB7T2JqZWN0QWNjdW11bGF0b3I8VD59XG4gKiBAdGVtcGxhdGUgVFxuICogQGRlc2NyaXB0aW9uIEEgY2xhc3MgcmVwcmVzZW50aW5nIGFuIGVudmlyb25tZW50IHdpdGggYWNjdW11bGF0aW9uIGNhcGFiaWxpdGllcy5cbiAqIEBzdW1tYXJ5IE1hbmFnZXMgZW52aXJvbm1lbnQtcmVsYXRlZCBkYXRhIGFuZCBwcm92aWRlcyBtZXRob2RzIGZvciBhY2N1bXVsYXRpb24gYW5kIGtleSByZXRyaWV2YWwuXG4gKiBAcGFyYW0ge1R9IFtpbml0aWFsRGF0YV0gLSBUaGUgaW5pdGlhbCBkYXRhIHRvIHBvcHVsYXRlIHRoZSBlbnZpcm9ubWVudCB3aXRoLlxuICovXG5leHBvcnQgY2xhc3MgRW52aXJvbm1lbnQ8VCBleHRlbmRzIG9iamVjdD4gZXh0ZW5kcyBPYmplY3RBY2N1bXVsYXRvcjxUPiB7XG4gIC8qKlxuICAgKiBAc3RhdGljXG4gICAqIEBwcm90ZWN0ZWRcbiAgICogQGRlc2NyaXB0aW9uIEEgZmFjdG9yeSBmdW5jdGlvbiBmb3IgY3JlYXRpbmcgRW52aXJvbm1lbnQgaW5zdGFuY2VzLlxuICAgKiBAc3VtbWFyeSBEZWZpbmVzIGhvdyBuZXcgaW5zdGFuY2VzIG9mIHRoZSBFbnZpcm9ubWVudCBjbGFzcyBzaG91bGQgYmUgY3JlYXRlZC5cbiAgICogQHJldHVybiB7RW52aXJvbm1lbnQ8YW55Pn0gQSBuZXcgaW5zdGFuY2Ugb2YgdGhlIEVudmlyb25tZW50IGNsYXNzLlxuICAgKi9cbiAgcHJvdGVjdGVkIHN0YXRpYyBmYWN0b3J5OiBFbnZpcm9ubWVudEZhY3Rvcnk8YW55LCBhbnk+ID1cbiAgICAoKTogRW52aXJvbm1lbnQ8YW55PiA9PiBuZXcgRW52aXJvbm1lbnQoKTtcblxuICAvKipcbiAgICogQHN0YXRpY1xuICAgKiBAcHJpdmF0ZVxuICAgKiBAZGVzY3JpcHRpb24gVGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgRW52aXJvbm1lbnQgY2xhc3MuXG4gICAqIEB0eXBlIHtFbnZpcm9ubWVudDxhbnk+fVxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgX2luc3RhbmNlOiBFbnZpcm9ubWVudDxhbnk+O1xuXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSZXRyaWV2ZXMgYSB2YWx1ZSBmcm9tIHRoZSBlbnZpcm9ubWVudFxuICAgKiBAc3VtbWFyeSBHZXRzIGEgdmFsdWUgZnJvbSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzLCBoYW5kbGluZyBicm93c2VyIGFuZCBOb2RlLmpzIGVudmlyb25tZW50cyBkaWZmZXJlbnRseVxuICAgKiBAcGFyYW0ge3N0cmluZ30gayAtIFRoZSBrZXkgdG8gcmV0cmlldmUgZnJvbSB0aGUgZW52aXJvbm1lbnRcbiAgICogQHJldHVybiB7dW5rbm93bn0gVGhlIHZhbHVlIGZyb20gdGhlIGVudmlyb25tZW50LCBvciB1bmRlZmluZWQgaWYgbm90IGZvdW5kXG4gICAqL1xuICBwcm90ZWN0ZWQgZnJvbUVudihrOiBzdHJpbmcpIHtcbiAgICBsZXQgZW52OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBpZiAoaXNCcm93c2VyKCkpIHtcbiAgICAgIGVudiA9IChnbG9iYWxUaGlzIGFzIHR5cGVvZiBnbG9iYWxUaGlzICYgeyBFTlY6IFJlY29yZDxzdHJpbmcsIGFueT4gfSlbXG4gICAgICAgIFwiRU5WXCJcbiAgICAgIF07XG4gICAgfSBlbHNlIHtcbiAgICAgIGVudiA9IGdsb2JhbFRoaXMucHJvY2Vzcy5lbnY7XG4gICAgICBrID0gdG9FTlZGb3JtYXQoayk7XG4gICAgfVxuICAgIHJldHVybiBlbnZba107XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEV4cGFuZHMgYW4gb2JqZWN0IGludG8gdGhlIGVudmlyb25tZW50XG4gICAqIEBzdW1tYXJ5IERlZmluZXMgcHJvcGVydGllcyBvbiB0aGUgZW52aXJvbm1lbnQgb2JqZWN0IHRoYXQgY2FuIGJlIGFjY2Vzc2VkIGFzIGdldHRlcnMgYW5kIHNldHRlcnNcbiAgICogQHRlbXBsYXRlIFYgLSBUeXBlIG9mIHRoZSBvYmplY3QgYmVpbmcgZXhwYW5kZWRcbiAgICogQHBhcmFtIHtWfSB2YWx1ZSAtIFRoZSBvYmplY3QgdG8gZXhwYW5kIGludG8gdGhlIGVudmlyb25tZW50XG4gICAqIEByZXR1cm4ge3ZvaWR9XG4gICAqL1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgZXhwYW5kPFYgZXh0ZW5kcyBvYmplY3Q+KHZhbHVlOiBWKTogdm9pZCB7XG4gICAgT2JqZWN0LmVudHJpZXModmFsdWUpLmZvckVhY2goKFtrLCB2XSkgPT4ge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIGssIHtcbiAgICAgICAgZ2V0OiAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgZnJvbUVudiA9IHRoaXMuZnJvbUVudihrKTtcbiAgICAgICAgICByZXR1cm4gdHlwZW9mIGZyb21FbnYgPT09IFwidW5kZWZpbmVkXCIgPyB2IDogZnJvbUVudjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiAodmFsOiBWW2tleW9mIFZdKSA9PiB7XG4gICAgICAgICAgdiA9IHZhbDtcbiAgICAgICAgfSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQHByb3RlY3RlZFxuICAgKiBAc3RhdGljXG4gICAqIEBkZXNjcmlwdGlvbiBSZXRyaWV2ZXMgb3IgY3JlYXRlcyB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBFbnZpcm9ubWVudCBjbGFzcy5cbiAgICogQHN1bW1hcnkgRW5zdXJlcyBvbmx5IG9uZSBpbnN0YW5jZSBvZiB0aGUgRW52aXJvbm1lbnQgY2xhc3MgZXhpc3RzLlxuICAgKiBAdGVtcGxhdGUgRVxuICAgKiBAcGFyYW0gey4uLnVua25vd25bXX0gYXJncyAtIEFyZ3VtZW50cyB0byBwYXNzIHRvIHRoZSBmYWN0b3J5IGZ1bmN0aW9uIGlmIGEgbmV3IGluc3RhbmNlIGlzIGNyZWF0ZWQuXG4gICAqIEByZXR1cm4ge0V9IFRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIEVudmlyb25tZW50IGNsYXNzLlxuICAgKi9cbiAgcHJvdGVjdGVkIHN0YXRpYyBpbnN0YW5jZTxFIGV4dGVuZHMgRW52aXJvbm1lbnQ8YW55Pj4oLi4uYXJnczogdW5rbm93bltdKTogRSB7XG4gICAgRW52aXJvbm1lbnQuX2luc3RhbmNlID0gIUVudmlyb25tZW50Ll9pbnN0YW5jZVxuICAgICAgPyBFbnZpcm9ubWVudC5mYWN0b3J5KC4uLmFyZ3MpXG4gICAgICA6IEVudmlyb25tZW50Ll9pbnN0YW5jZTtcbiAgICByZXR1cm4gRW52aXJvbm1lbnQuX2luc3RhbmNlIGFzIEU7XG4gIH1cblxuICAvKipcbiAgICogQHN0YXRpY1xuICAgKiBAZGVzY3JpcHRpb24gQWNjdW11bGF0ZXMgdGhlIGdpdmVuIHZhbHVlIGludG8gdGhlIGVudmlyb25tZW50LlxuICAgKiBAc3VtbWFyeSBBZGRzIG5ldyBwcm9wZXJ0aWVzIHRvIHRoZSBlbnZpcm9ubWVudCBmcm9tIHRoZSBwcm92aWRlZCBvYmplY3QuXG4gICAqIEB0ZW1wbGF0ZSBWXG4gICAqIEBwYXJhbSB7Vn0gdmFsdWUgLSBUaGUgb2JqZWN0IHRvIGFjY3VtdWxhdGUgaW50byB0aGUgZW52aXJvbm1lbnQuXG4gICAqIEByZXR1cm4ge1Z9IFRoZSB1cGRhdGVkIGVudmlyb25tZW50IGluc3RhbmNlLlxuICAgKi9cbiAgc3RhdGljIGFjY3VtdWxhdGU8ViBleHRlbmRzIG9iamVjdD4oXG4gICAgdmFsdWU6IFZcbiAgKTogdHlwZW9mIEVudmlyb25tZW50Ll9pbnN0YW5jZSAmXG4gICAgViAmXG4gICAgT2JqZWN0QWNjdW11bGF0b3I8dHlwZW9mIEVudmlyb25tZW50Ll9pbnN0YW5jZSAmIFY+IHtcbiAgICBjb25zdCBpbnN0YW5jZSA9IEVudmlyb25tZW50Lmluc3RhbmNlKCk7XG4gICAgcmV0dXJuIGluc3RhbmNlLmFjY3VtdWxhdGUodmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBzdGF0aWNcbiAgICogQGRlc2NyaXB0aW9uIFJldHJpZXZlcyB0aGUga2V5cyBvZiB0aGUgZW52aXJvbm1lbnQsIG9wdGlvbmFsbHkgY29udmVydGluZyB0aGVtIHRvIEVOViBmb3JtYXQuXG4gICAqIEBzdW1tYXJ5IEdldHMgYWxsIGtleXMgaW4gdGhlIGVudmlyb25tZW50LCB3aXRoIGFuIG9wdGlvbiB0byBmb3JtYXQgdGhlbSBmb3IgZW52aXJvbm1lbnQgdmFyaWFibGVzLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFt0b0Vudj10cnVlXSAtIFdoZXRoZXIgdG8gY29udmVydCB0aGUga2V5cyB0byBFTlYgZm9ybWF0LlxuICAgKiBAcmV0dXJuIHtzdHJpbmdbXX0gQW4gYXJyYXkgb2Yga2V5cyBmcm9tIHRoZSBlbnZpcm9ubWVudC5cbiAgICovXG4gIHN0YXRpYyBrZXlzKHRvRW52OiBib29sZWFuID0gdHJ1ZSk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gRW52aXJvbm1lbnQuaW5zdGFuY2UoKVxuICAgICAgLmtleXMoKVxuICAgICAgLm1hcCgoaykgPT4gKHRvRW52ID8gdG9FTlZGb3JtYXQoaykgOiBrKSk7XG4gIH1cbn1cbiIsImltcG9ydCB7IFBhcnNlQXJnc1Jlc3VsdCB9IGZyb20gXCIuLi9pbnB1dC90eXBlc1wiO1xuaW1wb3J0IHsgQ29tbWFuZE9wdGlvbnMgfSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IHsgVXNlcklucHV0IH0gZnJvbSBcIi4uL2lucHV0L2lucHV0XCI7XG5pbXBvcnQgeyBEZWZhdWx0Q29tbWFuZE9wdGlvbnMsIERlZmF1bHRDb21tYW5kVmFsdWVzIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBnZXREZXBlbmRlbmNpZXMsIGdldFBhY2thZ2VWZXJzaW9uIH0gZnJvbSBcIi4uL3V0aWxzL2ZzXCI7XG5pbXBvcnQgeyBwcmludEJhbm5lciB9IGZyb20gXCIuLi9vdXRwdXQvY29tbW9uXCI7XG5pbXBvcnQgeyBFbnZpcm9ubWVudCB9IGZyb20gXCIuLi91dGlscy9lbnZpcm9ubWVudFwiO1xuaW1wb3J0IHtcbiAgRGVmYXVsdExvZ2dpbmdDb25maWcsXG4gIExvZ2dlcixcbiAgTG9nZ2luZyxcbiAgTG9nZ2luZ0NvbmZpZyxcbiAgTG9nTGV2ZWwsXG59IGZyb20gXCJAZGVjYWYtdHMvbG9nZ2luZ1wiO1xuXG4vKipcbiAqIEBjbGFzcyBDb21tYW5kXG4gKiBAYWJzdHJhY3RcbiAqIEB0ZW1wbGF0ZSBJIC0gVGhlIHR5cGUgb2YgaW5wdXQgb3B0aW9ucyBmb3IgdGhlIGNvbW1hbmQuXG4gKiBAdGVtcGxhdGUgUiAtIFRoZSByZXR1cm4gdHlwZSBvZiB0aGUgY29tbWFuZCBleGVjdXRpb24uXG4gKiBAbWVtYmVyT2YgbW9kdWxlOnV0aWxzXG4gKiBAZGVzY3JpcHRpb24gQWJzdHJhY3QgYmFzZSBjbGFzcyBmb3IgY29tbWFuZCBpbXBsZW1lbnRhdGlvbi5cbiAqIEBzdW1tYXJ5IFByb3ZpZGVzIGEgc3RydWN0dXJlIGZvciBjcmVhdGluZyBjb21tYW5kLWxpbmUgaW50ZXJmYWNlIGNvbW1hbmRzIHdpdGggaW5wdXQgaGFuZGxpbmcsIGxvZ2dpbmcsIGFuZCBleGVjdXRpb24gZmxvdy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBjb21tYW5kLlxuICogQHBhcmFtIHtDb21tYW5kT3B0aW9uczxJPn0gW2lucHV0c10gLSBUaGUgaW5wdXQgb3B0aW9ucyBmb3IgdGhlIGNvbW1hbmQuXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBbcmVxdWlyZW1lbnRzXSAtIFRoZSBsaXN0IG9mIHJlcXVpcmVkIGRlcGVuZGVuY2llcyBmb3IgdGhlIGNvbW1hbmQuXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBDb21tYW5kPEksIFI+IHtcbiAgLyoqXG4gICAqIEBzdGF0aWNcbiAgICogQGRlc2NyaXB0aW9uIFN0YXRpYyBsb2dnZXIgZm9yIHRoZSBDb21tYW5kIGNsYXNzLlxuICAgKiBAdHlwZSB7TG9nZ2VyfVxuICAgKi9cbiAgc3RhdGljIGxvZzogTG9nZ2VyO1xuXG4gIC8qKlxuICAgKiBAcHJvdGVjdGVkXG4gICAqIEBkZXNjcmlwdGlvbiBJbnN0YW5jZSBsb2dnZXIgZm9yIHRoZSBjb21tYW5kLlxuICAgKiBAdHlwZSB7TG9nZ2VyfVxuICAgKi9cbiAgcHJvdGVjdGVkIGxvZzogTG9nZ2VyO1xuXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgbmFtZTogc3RyaW5nLFxuICAgIHByb3RlY3RlZCBpbnB1dHM6IENvbW1hbmRPcHRpb25zPEk+ID0ge30gYXMgdW5rbm93biBhcyBDb21tYW5kT3B0aW9uczxJPixcbiAgICBwcm90ZWN0ZWQgcmVxdWlyZW1lbnRzOiBzdHJpbmdbXSA9IFtdXG4gICkge1xuICAgIGlmICghQ29tbWFuZC5sb2cpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb21tYW5kLCBcImxvZ1wiLCB7XG4gICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgdmFsdWU6IExvZ2dpbmcuZm9yKENvbW1hbmQubmFtZSksXG4gICAgICB9KTtcbiAgICAgIHRoaXMubG9nID0gQ29tbWFuZC5sb2c7XG4gICAgfVxuICAgIHRoaXMubG9nID0gQ29tbWFuZC5sb2cuZm9yKHRoaXMubmFtZSk7XG4gICAgdGhpcy5pbnB1dHMgPSBPYmplY3QuYXNzaWduKFxuICAgICAge30sXG4gICAgICBEZWZhdWx0Q29tbWFuZE9wdGlvbnMsXG4gICAgICBpbnB1dHNcbiAgICApIGFzIENvbW1hbmRPcHRpb25zPEk+O1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcm90ZWN0ZWRcbiAgICogQGFzeW5jXG4gICAqIEBkZXNjcmlwdGlvbiBDaGVja3MgaWYgYWxsIHJlcXVpcmVkIGRlcGVuZGVuY2llcyBhcmUgcHJlc2VudC5cbiAgICogQHN1bW1hcnkgUmV0cmlldmVzIHRoZSBsaXN0IG9mIGRlcGVuZGVuY2llcyBhbmQgY29tcGFyZXMgaXQgYWdhaW5zdCB0aGUgcmVxdWlyZWQgZGVwZW5kZW5jaWVzIGZvciB0aGUgY29tbWFuZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGNoZWNrIGlzIGNvbXBsZXRlLlxuICAgKlxuICAgKiBAbWVybWFpZFxuICAgKiBzZXF1ZW5jZURpYWdyYW1cbiAgICogICBwYXJ0aWNpcGFudCBDb21tYW5kXG4gICAqICAgcGFydGljaXBhbnQgZ2V0RGVwZW5kZW5jaWVzXG4gICAqICAgcGFydGljaXBhbnQgU2V0XG4gICAqICAgQ29tbWFuZC0+PmdldERlcGVuZGVuY2llczogQ2FsbFxuICAgKiAgIGdldERlcGVuZGVuY2llcy0tPj5Db21tYW5kOiBSZXR1cm4ge3Byb2QsIGRldiwgcGVlcn1cbiAgICogICBDb21tYW5kLT4+U2V0OiBDcmVhdGUgU2V0IGZyb20gcHJvZCwgZGV2LCBwZWVyXG4gICAqICAgU2V0LS0+PkNvbW1hbmQ6IFJldHVybiB1bmlxdWUgZGVwZW5kZW5jaWVzXG4gICAqICAgQ29tbWFuZC0+PkNvbW1hbmQ6IENvbXBhcmUgYWdhaW5zdCByZXF1aXJlbWVudHNcbiAgICogICBhbHQgTWlzc2luZyBkZXBlbmRlbmNpZXNcbiAgICogICAgIENvbW1hbmQtPj5Db21tYW5kOiBBZGQgdG8gbWlzc2luZyBsaXN0XG4gICAqICAgZW5kXG4gICAqICAgTm90ZSBvdmVyIENvbW1hbmQ6IElmIG1pc3NpbmcubGVuZ3RoID4gMCwgaGFuZGxlIG1pc3NpbmcgZGVwZW5kZW5jaWVzXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgY2hlY2tSZXF1aXJlbWVudHMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBwcm9kLCBkZXYsIHBlZXIgfSA9IGF3YWl0IGdldERlcGVuZGVuY2llcygpO1xuICAgIGNvbnN0IG1pc3NpbmcgPSBbXTtcbiAgICBjb25zdCBmdWxsTGlzdCA9IEFycmF5LmZyb20oXG4gICAgICBuZXcgU2V0KFsuLi5wcm9kLCAuLi5kZXYsIC4uLnBlZXJdKS52YWx1ZXMoKVxuICAgICkubWFwKChkKSA9PiBkLm5hbWUpO1xuICAgIGZvciAoY29uc3QgZGVwIG9mIHRoaXMucmVxdWlyZW1lbnRzKVxuICAgICAgaWYgKCFmdWxsTGlzdC5pbmNsdWRlcyhkZXApKSBtaXNzaW5nLnB1c2goZGVwKTtcblxuICAgIGlmICghbWlzc2luZy5sZW5ndGgpIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJvdGVjdGVkXG4gICAqIEBkZXNjcmlwdGlvbiBQcm92aWRlcyBoZWxwIGluZm9ybWF0aW9uIGZvciB0aGUgY29tbWFuZC5cbiAgICogQHN1bW1hcnkgVGhpcyBtZXRob2Qgc2hvdWxkIGJlIG92ZXJyaWRkZW4gaW4gZGVyaXZlZCBjbGFzc2VzIHRvIHByb3ZpZGUgc3BlY2lmaWMgaGVscCBpbmZvcm1hdGlvbi5cbiAgICogQHBhcmFtIHtQYXJzZUFyZ3NSZXN1bHR9IGFyZ3MgLSBUaGUgcGFyc2VkIGNvbW1hbmQtbGluZSBhcmd1bWVudHMuXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBwcm90ZWN0ZWQgaGVscChhcmdzOiBQYXJzZUFyZ3NSZXN1bHQpOiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5sb2cuaW5mbyhcbiAgICAgIGBUaGlzIGlzIGhlbHAuIEknbSBubyB1c2UgYmVjYXVzZSBJIHNob3VsZCBoYXZlIGJlZW4gb3ZlcnJpZGRlbi5gXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJvdGVjdGVkXG4gICAqIEBhYnN0cmFjdFxuICAgKiBAZGVzY3JpcHRpb24gUnVucyB0aGUgY29tbWFuZCB3aXRoIHRoZSBwcm92aWRlZCBhcmd1bWVudHMuXG4gICAqIEBzdW1tYXJ5IFRoaXMgbWV0aG9kIHNob3VsZCBiZSBpbXBsZW1lbnRlZCBpbiBkZXJpdmVkIGNsYXNzZXMgdG8gZGVmaW5lIHRoZSBjb21tYW5kJ3MgYmVoYXZpb3IuXG4gICAqIEBwYXJhbSB7UGFyc2VBcmdzUmVzdWx0fSBhbnN3ZXJzIC0gVGhlIHBhcnNlZCBjb21tYW5kLWxpbmUgYXJndW1lbnRzLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxSIHwgc3RyaW5nIHwgdm9pZD59IEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGNvbW1hbmQncyByZXN1bHQuXG4gICAqL1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgcnVuPFI+KFxuICAgIGFuc3dlcnM6IExvZ2dpbmdDb25maWcgJlxuICAgICAgdHlwZW9mIERlZmF1bHRDb21tYW5kVmFsdWVzICYgeyBbayBpbiBrZXlvZiBJXTogdW5rbm93biB9XG4gICk6IFByb21pc2U8UiB8IHN0cmluZyB8IHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBAYXN5bmNcbiAgICogQGRlc2NyaXB0aW9uIEV4ZWN1dGVzIHRoZSBjb21tYW5kLlxuICAgKiBAc3VtbWFyeSBUaGlzIG1ldGhvZCBoYW5kbGVzIHRoZSBvdmVyYWxsIGV4ZWN1dGlvbiBmbG93IG9mIHRoZSBjb21tYW5kLCBpbmNsdWRpbmcgcGFyc2luZyBhcmd1bWVudHMsXG4gICAqIHNldHRpbmcgdXAgbG9nZ2luZywgY2hlY2tpbmcgZm9yIHZlcnNpb24gb3IgaGVscCByZXF1ZXN0cywgYW5kIHJ1bm5pbmcgdGhlIGNvbW1hbmQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFIgfCBzdHJpbmcgfCB2b2lkPn0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgY29tbWFuZCdzIHJlc3VsdC5cbiAgICpcbiAgICogQG1lcm1haWRcbiAgICogc2VxdWVuY2VEaWFncmFtXG4gICAqICAgcGFydGljaXBhbnQgQ29tbWFuZFxuICAgKiAgIHBhcnRpY2lwYW50IFVzZXJJbnB1dFxuICAgKiAgIHBhcnRpY2lwYW50IExvZ2dpbmdcbiAgICogICBwYXJ0aWNpcGFudCBnZXRQYWNrYWdlVmVyc2lvblxuICAgKiAgIHBhcnRpY2lwYW50IHByaW50QmFubmVyXG4gICAqICAgQ29tbWFuZC0+PlVzZXJJbnB1dDogcGFyc2VBcmdzKGlucHV0cylcbiAgICogICBVc2VySW5wdXQtLT4+Q29tbWFuZDogUmV0dXJuIFBhcnNlQXJnc1Jlc3VsdFxuICAgKiAgIENvbW1hbmQtPj5Db21tYW5kOiBQcm9jZXNzIG9wdGlvbnNcbiAgICogICBDb21tYW5kLT4+TG9nZ2luZzogc2V0Q29uZmlnKG9wdGlvbnMpXG4gICAqICAgYWx0IHZlcnNpb24gcmVxdWVzdGVkXG4gICAqICAgICBDb21tYW5kLT4+Z2V0UGFja2FnZVZlcnNpb246IENhbGxcbiAgICogICAgIGdldFBhY2thZ2VWZXJzaW9uLS0+PkNvbW1hbmQ6IFJldHVybiB2ZXJzaW9uXG4gICAqICAgZWxzZSBoZWxwIHJlcXVlc3RlZFxuICAgKiAgICAgQ29tbWFuZC0+PkNvbW1hbmQ6IGhlbHAoYXJncylcbiAgICogICBlbHNlIGJhbm5lciByZXF1ZXN0ZWRcbiAgICogICAgIENvbW1hbmQtPj5wcmludEJhbm5lcjogQ2FsbFxuICAgKiAgIGVuZFxuICAgKiAgIENvbW1hbmQtPj5Db21tYW5kOiBydW4oYXJncylcbiAgICogICBhbHQgZXJyb3Igb2NjdXJzXG4gICAqICAgICBDb21tYW5kLT4+Q29tbWFuZDogTG9nIGVycm9yXG4gICAqICAgZW5kXG4gICAqICAgQ29tbWFuZC0tPj5Db21tYW5kOiBSZXR1cm4gcmVzdWx0XG4gICAqL1xuICBhc3luYyBleGVjdXRlKCk6IFByb21pc2U8UiB8IHN0cmluZyB8IHZvaWQ+IHtcbiAgICBjb25zdCBhcmdzOiBQYXJzZUFyZ3NSZXN1bHQgPSBVc2VySW5wdXQucGFyc2VBcmdzKHRoaXMuaW5wdXRzKTtcbiAgICBjb25zdCBlbnYgPSBFbnZpcm9ubWVudC5hY2N1bXVsYXRlKERlZmF1bHRMb2dnaW5nQ29uZmlnKVxuICAgICAgLmFjY3VtdWxhdGUoRGVmYXVsdENvbW1hbmRWYWx1ZXMpXG4gICAgICAuYWNjdW11bGF0ZShhcmdzLnZhbHVlcyk7XG4gICAgY29uc3QgeyB0aW1lc3RhbXAsIHZlcmJvc2UsIHZlcnNpb24sIGhlbHAsIGxvZ0xldmVsLCBsb2dTdHlsZSwgYmFubmVyIH0gPVxuICAgICAgZW52O1xuXG4gICAgdGhpcy5sb2cuc2V0Q29uZmlnKHtcbiAgICAgIC4uLmVudixcbiAgICAgIHRpbWVzdGFtcDogISF0aW1lc3RhbXAsXG4gICAgICBsZXZlbDogbG9nTGV2ZWwgYXMgTG9nTGV2ZWwsXG4gICAgICBzdHlsZTogISFsb2dTdHlsZSxcbiAgICAgIHZlcmJvc2U6ICh2ZXJib3NlIGFzIG51bWJlcikgfHwgMCxcbiAgICB9KTtcblxuICAgIGlmICh2ZXJzaW9uKSB7XG4gICAgICByZXR1cm4gZ2V0UGFja2FnZVZlcnNpb24oKTtcbiAgICB9XG5cbiAgICBpZiAoaGVscCkge1xuICAgICAgcmV0dXJuIHRoaXMuaGVscChhcmdzKTtcbiAgICB9XG5cbiAgICBpZiAoYmFubmVyKVxuICAgICAgcHJpbnRCYW5uZXIoXG4gICAgICAgIHRoaXMubG9nLmZvcihwcmludEJhbm5lciwge1xuICAgICAgICAgIHRpbWVzdGFtcDogZmFsc2UsXG4gICAgICAgICAgc3R5bGU6IGZhbHNlLFxuICAgICAgICAgIGNvbnRleHQ6IGZhbHNlLFxuICAgICAgICAgIGxvZ0xldmVsOiBmYWxzZSxcbiAgICAgICAgfSlcbiAgICAgICk7XG5cbiAgICBsZXQgcmVzdWx0O1xuICAgIHRyeSB7XG4gICAgICByZXN1bHQgPSBhd2FpdCB0aGlzLnJ1bihlbnYpO1xuICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgIHRoaXMubG9nLmVycm9yKGBFcnJvciB3aGlsZSBydW5uaW5nIHByb3ZpZGVkIGNsaSBmdW5jdGlvbjogJHtlfWApO1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0IGFzIFI7XG4gIH1cbn1cbiIsImltcG9ydCBodHRwcyBmcm9tIFwiaHR0cHNcIjtcbmltcG9ydCB7IExvZ2dpbmcgfSBmcm9tIFwiQGRlY2FmLXRzL2xvZ2dpbmdcIjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQSBzaW1wbGUgSFRUUCBjbGllbnQgZm9yIGRvd25sb2FkaW5nIGZpbGVzLlxuICogQHN1bW1hcnkgVGhpcyBjbGFzcyBwcm92aWRlcyBmdW5jdGlvbmFsaXR5IHRvIGRvd25sb2FkIGZpbGVzIGZyb20gSFRUUFMgVVJMcy5cbiAqIEl0IHVzZXMgTm9kZS5qcyBidWlsdC1pbiBodHRwcyBtb2R1bGUgdG8gbWFrZSByZXF1ZXN0cy5cbiAqXG4gKiBAY2xhc3MgSHR0cENsaWVudFxuICovXG5leHBvcnQgY2xhc3MgSHR0cENsaWVudCB7XG4gIHByb3RlY3RlZCBzdGF0aWMgbG9nID0gTG9nZ2luZy5mb3IoSHR0cENsaWVudCk7XG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gRG93bmxvYWRzIGEgZmlsZSBmcm9tIGEgZ2l2ZW4gVVJMLlxuICAgKiBAc3VtbWFyeSBUaGlzIG1ldGhvZCBzZW5kcyBhIEdFVCByZXF1ZXN0IHRvIHRoZSBzcGVjaWZpZWQgVVJMIGFuZCByZXR1cm5zIHRoZSByZXNwb25zZSBib2R5IGFzIGEgc3RyaW5nLlxuICAgKiBJdCBoYW5kbGVzIGRpZmZlcmVudCBzY2VuYXJpb3Mgc3VjaCBhcyBub24tMjAwIHN0YXR1cyBjb2RlcyBhbmQgbmV0d29yayBlcnJvcnMuXG4gICAqXG4gICAqIEBwYXJhbSB1cmwgLSBUaGUgVVJMIG9mIHRoZSBmaWxlIHRvIGRvd25sb2FkLlxuICAgKiBAcmV0dXJuIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGZpbGUgY29udGVudCBhcyBhIHN0cmluZy5cbiAgICpcbiAgICogQG1lcm1haWRcbiAgICogc2VxdWVuY2VEaWFncmFtXG4gICAqICAgcGFydGljaXBhbnQgQ2xpZW50XG4gICAqICAgcGFydGljaXBhbnQgSHR0cENsaWVudFxuICAgKiAgIHBhcnRpY2lwYW50IEhUVFBTXG4gICAqICAgcGFydGljaXBhbnQgU2VydmVyXG4gICAqICAgQ2xpZW50LT4+SHR0cENsaWVudDogZG93bmxvYWRGaWxlKHVybClcbiAgICogICBIdHRwQ2xpZW50LT4+SFRUUFM6IGdldCh1cmwpXG4gICAqICAgSFRUUFMtPj5TZXJ2ZXI6IEdFVCByZXF1ZXN0XG4gICAqICAgU2VydmVyLS0+PkhUVFBTOiBSZXNwb25zZVxuICAgKiAgIEhUVFBTLS0+Pkh0dHBDbGllbnQ6IFJlc3BvbnNlIG9iamVjdFxuICAgKiAgIGFsdCBTdGF0dXMgY29kZSBpcyAyMDBcbiAgICogICAgIGxvb3AgRm9yIGVhY2ggZGF0YSBjaHVua1xuICAgKiAgICAgICBIVFRQUy0+Pkh0dHBDbGllbnQ6ICdkYXRhJyBldmVudFxuICAgKiAgICAgICBIdHRwQ2xpZW50LT4+SHR0cENsaWVudDogQWNjdW11bGF0ZSBkYXRhXG4gICAqICAgICBlbmRcbiAgICogICAgIEhUVFBTLT4+SHR0cENsaWVudDogJ2VuZCcgZXZlbnRcbiAgICogICAgIEh0dHBDbGllbnQtLT4+Q2xpZW50OiBSZXNvbHZlIHdpdGggZGF0YVxuICAgKiAgIGVsc2UgU3RhdHVzIGNvZGUgaXMgbm90IDIwMFxuICAgKiAgICAgSHR0cENsaWVudC0tPj5DbGllbnQ6IFJlamVjdCB3aXRoIGVycm9yXG4gICAqICAgZW5kXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgZG93bmxvYWRGaWxlKHVybDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8c3RyaW5nPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBmdW5jdGlvbiByZXF1ZXN0KHVybDogc3RyaW5nKSB7XG4gICAgICAgIHVybCA9IGVuY29kZVVSSSh1cmwpO1xuICAgICAgICBodHRwcy5nZXQodXJsLCAocmVzKSA9PiB7XG4gICAgICAgICAgaWYgKHJlcy5zdGF0dXNDb2RlID09PSAzMDEgfHwgcmVzLnN0YXR1c0NvZGUgPT09IDMwNylcbiAgICAgICAgICAgIHJldHVybiByZXF1ZXN0KHJlcy5oZWFkZXJzLmxvY2F0aW9uIGFzIHN0cmluZyk7XG5cbiAgICAgICAgICBpZiAocmVzLnN0YXR1c0NvZGUgIT09IDIwMCkge1xuICAgICAgICAgICAgSHR0cENsaWVudC5sb2cuZXJyb3IoXG4gICAgICAgICAgICAgIGBGYWlsZWQgdG8gZmV0Y2ggJHt1cmx9IChzdGF0dXM6ICR7cmVzLnN0YXR1c0NvZGV9KWBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBFcnJvcihgRmFpbGVkIHRvIGZldGNoICR7dXJsfWApKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbGV0IGRhdGEgPSBcIlwiO1xuICAgICAgICAgIHJlcy5vbihcImRhdGFcIiwgKGNodW5rKSA9PiB7XG4gICAgICAgICAgICBkYXRhICs9IGNodW5rO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJlcy5vbihcImVycm9yXCIsIChlcnJvcikgPT4ge1xuICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHJlcy5vbihcImVuZFwiLCAoKSA9PiB7XG4gICAgICAgICAgICByZXNvbHZlKGRhdGEpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJlcXVlc3QodXJsKTtcbiAgICB9KTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gXCIuLi9jb21tYW5kXCI7XG5pbXBvcnQgeyBDb21tYW5kT3B0aW9ucyB9IGZyb20gXCIuLi90eXBlc1wiO1xuaW1wb3J0IHsgRGVmYXVsdENvbW1hbmRPcHRpb25zLCBEZWZhdWx0Q29tbWFuZFZhbHVlcyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7XG4gIGNvcHlGaWxlLFxuICBkZWxldGVQYXRoLFxuICBnZXRBbGxGaWxlcyxcbiAgZ2V0UGFja2FnZSxcbiAgcGF0Y2hGaWxlLFxuICByZWFkRmlsZSxcbiAgcmVuYW1lRmlsZSxcbiAgcnVuQ29tbWFuZCxcbiAgd3JpdGVGaWxlLFxufSBmcm9tIFwiLi4vLi4vdXRpbHNcIjtcbmltcG9ydCBmcyBmcm9tIFwiZnNcIjtcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBJbnB1dE9wdGlvbnMsIE91dHB1dE9wdGlvbnMsIHJvbGx1cCwgUm9sbHVwQnVpbGQgfSBmcm9tIFwicm9sbHVwXCI7XG5pbXBvcnQgdHlwZXNjcmlwdCBmcm9tIFwiQHJvbGx1cC9wbHVnaW4tdHlwZXNjcmlwdFwiO1xuaW1wb3J0IGNvbW1vbmpzIGZyb20gXCJAcm9sbHVwL3BsdWdpbi1jb21tb25qc1wiO1xuaW1wb3J0IHsgbm9kZVJlc29sdmUgfSBmcm9tIFwiQHJvbGx1cC9wbHVnaW4tbm9kZS1yZXNvbHZlXCI7XG5pbXBvcnQganNvbiBmcm9tIFwiQHJvbGx1cC9wbHVnaW4tanNvblwiO1xuaW1wb3J0IHsgTG9nZ2luZ0NvbmZpZyB9IGZyb20gXCJAZGVjYWYtdHMvbG9nZ2luZ1wiO1xuaW1wb3J0ICogYXMgdHMgZnJvbSBcInR5cGVzY3JpcHRcIjtcbmltcG9ydCB7IERpYWdub3N0aWMsIEVtaXRSZXN1bHQsIE1vZHVsZUtpbmQsIFNvdXJjZUZpbGUgfSBmcm9tIFwidHlwZXNjcmlwdFwiO1xuXG5jb25zdCBWRVJTSU9OX1NUUklORyA9IFwiIyNWRVJTSU9OIyNcIjtcblxuZW51bSBNb2RlcyB7XG4gIENKUyA9IFwiY29tbW9uanNcIixcbiAgRVNNID0gXCJlczIwMjJcIixcbn1cblxuY29uc3QgQ29tbWFuZHMgPSBbXCJ1cGRhdGUtc2NyaXB0c1wiLCBcInRhZy1yZWxlYXNlXCIsIFwiYnVpbGQtc2NyaXB0c1wiXTtcblxuY29uc3Qgb3B0aW9ucyA9IHtcbiAgcHJvZDoge1xuICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgIGRlZmF1bHQ6IGZhbHNlLFxuICB9LFxuICBkZXY6IHtcbiAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgICBkZWZhdWx0OiBmYWxzZSxcbiAgfSxcbiAgZG9jczoge1xuICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgIGRlZmF1bHQ6IGZhbHNlLFxuICB9LFxuICBjb21tYW5kczoge1xuICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgIGRlZmF1bHQ6IGZhbHNlLFxuICB9LFxuICBiYW5uZXI6IHtcbiAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgICBkZWZhdWx0OiBmYWxzZSxcbiAgfSxcbn07XG5cbmNvbnN0IGNqczJUcmFuc2Zvcm1lciA9IChleHQgPSBcIi5janNcIikgPT4ge1xuICBjb25zdCBsb2cgPSBCdWlsZFNjcmlwdHMubG9nLmZvcihjanMyVHJhbnNmb3JtZXIpO1xuICBjb25zdCByZXNvbHV0aW9uQ2FjaGUgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuXG4gIHJldHVybiAodHJhbnNmb3JtYXRpb25Db250ZXh0OiB0cy5UcmFuc2Zvcm1hdGlvbkNvbnRleHQpID0+IHtcbiAgICByZXR1cm4gKHNvdXJjZUZpbGU6IHRzLlNvdXJjZUZpbGUpID0+IHtcbiAgICAgIGNvbnN0IHNvdXJjZURpciA9IHBhdGguZGlybmFtZShzb3VyY2VGaWxlLmZpbGVOYW1lKTtcblxuICAgICAgZnVuY3Rpb24gcmVzb2x2ZVBhdGgoaW1wb3J0UGF0aDogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGNhY2hlS2V5ID0gSlNPTi5zdHJpbmdpZnkoW3NvdXJjZURpciwgaW1wb3J0UGF0aF0pO1xuICAgICAgICBjb25zdCBjYWNoZWRWYWx1ZSA9IHJlc29sdXRpb25DYWNoZS5nZXQoY2FjaGVLZXkpO1xuICAgICAgICBpZiAoY2FjaGVkVmFsdWUgIT0gbnVsbCkgcmV0dXJuIGNhY2hlZFZhbHVlO1xuXG4gICAgICAgIGxldCByZXNvbHZlZFBhdGggPSBpbXBvcnRQYXRoO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJlc29sdmVkUGF0aCA9IHBhdGgucmVzb2x2ZShzb3VyY2VEaXIsIHJlc29sdmVkUGF0aCArIFwiLnRzXCIpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIHJlc29sdmUgcGF0aCAke2ltcG9ydFBhdGh9OiAke2Vycm9yfWApO1xuICAgICAgICB9XG4gICAgICAgIGxldCBzdGF0O1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHN0YXQgPSBmcy5zdGF0U3luYyhyZXNvbHZlZFBhdGgpO1xuICAgICAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxvZy52ZXJib3NlKFxuICAgICAgICAgICAgICBgVGVzdGluZyBleGlzdGVuY2Ugb2YgcGF0aCAke3Jlc29sdmVkUGF0aH0gYXMgYSBmb2xkZXIgZGVmYXVsdGluZyB0byBpbmRleCBmaWxlYFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHN0YXQgPSBmcy5zdGF0U3luYyhyZXNvbHZlZFBhdGgucmVwbGFjZSgvXFwudHMkL2dtLCBcIlwiKSk7XG4gICAgICAgICAgfSBjYXRjaCAoZTI6IHVua25vd24pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgYEZhaWxlZCB0byByZXNvbHZlIHBhdGggJHtpbXBvcnRQYXRofTogJHtlfSwgJHtlMn1gXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhdC5pc0RpcmVjdG9yeSgpKVxuICAgICAgICAgIHJlc29sdmVkUGF0aCA9IHJlc29sdmVkUGF0aC5yZXBsYWNlKC9cXC50cyQvZ20sIFwiL2luZGV4LnRzXCIpO1xuXG4gICAgICAgIGlmIChwYXRoLmlzQWJzb2x1dGUocmVzb2x2ZWRQYXRoKSkge1xuICAgICAgICAgIGNvbnN0IGV4dGVuc2lvbiA9XG4gICAgICAgICAgICAoL1xcLnRzeD8kLy5leGVjKHBhdGguYmFzZW5hbWUocmVzb2x2ZWRQYXRoKSkgfHwgW10pWzBdIHx8IHZvaWQgMDtcblxuICAgICAgICAgIHJlc29sdmVkUGF0aCA9XG4gICAgICAgICAgICBcIi4vXCIgK1xuICAgICAgICAgICAgcGF0aC5yZWxhdGl2ZShcbiAgICAgICAgICAgICAgc291cmNlRGlyLFxuICAgICAgICAgICAgICBwYXRoLnJlc29sdmUoXG4gICAgICAgICAgICAgICAgcGF0aC5kaXJuYW1lKHJlc29sdmVkUGF0aCksXG4gICAgICAgICAgICAgICAgcGF0aC5iYXNlbmFtZShyZXNvbHZlZFBhdGgsIGV4dGVuc2lvbikgKyBleHRcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlc29sdXRpb25DYWNoZS5zZXQoY2FjaGVLZXksIHJlc29sdmVkUGF0aCk7XG4gICAgICAgIHJldHVybiByZXNvbHZlZFBhdGg7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIHZpc2l0Tm9kZShub2RlOiB0cy5Ob2RlKTogdHMuVmlzaXRSZXN1bHQ8dHMuTm9kZT4ge1xuICAgICAgICBpZiAoc2hvdWxkTXV0YXRlTW9kdWxlU3BlY2lmaWVyKG5vZGUpKSB7XG4gICAgICAgICAgaWYgKHRzLmlzSW1wb3J0RGVjbGFyYXRpb24obm9kZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc29sdmVkUGF0aCA9IHJlc29sdmVQYXRoKG5vZGUubW9kdWxlU3BlY2lmaWVyLnRleHQpO1xuICAgICAgICAgICAgY29uc3QgbmV3TW9kdWxlU3BlY2lmaWVyID1cbiAgICAgICAgICAgICAgdHJhbnNmb3JtYXRpb25Db250ZXh0LmZhY3RvcnkuY3JlYXRlU3RyaW5nTGl0ZXJhbChyZXNvbHZlZFBhdGgpO1xuICAgICAgICAgICAgcmV0dXJuIHRyYW5zZm9ybWF0aW9uQ29udGV4dC5mYWN0b3J5LnVwZGF0ZUltcG9ydERlY2xhcmF0aW9uKFxuICAgICAgICAgICAgICBub2RlLFxuICAgICAgICAgICAgICBub2RlLm1vZGlmaWVycyxcbiAgICAgICAgICAgICAgbm9kZS5pbXBvcnRDbGF1c2UsXG4gICAgICAgICAgICAgIG5ld01vZHVsZVNwZWNpZmllcixcbiAgICAgICAgICAgICAgdW5kZWZpbmVkXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSBpZiAodHMuaXNFeHBvcnREZWNsYXJhdGlvbihub2RlKSkge1xuICAgICAgICAgICAgY29uc3QgcmVzb2x2ZWRQYXRoID0gcmVzb2x2ZVBhdGgobm9kZS5tb2R1bGVTcGVjaWZpZXIudGV4dCk7XG4gICAgICAgICAgICBjb25zdCBuZXdNb2R1bGVTcGVjaWZpZXIgPVxuICAgICAgICAgICAgICB0cmFuc2Zvcm1hdGlvbkNvbnRleHQuZmFjdG9yeS5jcmVhdGVTdHJpbmdMaXRlcmFsKHJlc29sdmVkUGF0aCk7XG4gICAgICAgICAgICByZXR1cm4gdHJhbnNmb3JtYXRpb25Db250ZXh0LmZhY3RvcnkudXBkYXRlRXhwb3J0RGVjbGFyYXRpb24oXG4gICAgICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgICAgIG5vZGUubW9kaWZpZXJzLFxuICAgICAgICAgICAgICBub2RlLmlzVHlwZU9ubHksXG4gICAgICAgICAgICAgIG5vZGUuZXhwb3J0Q2xhdXNlLFxuICAgICAgICAgICAgICBuZXdNb2R1bGVTcGVjaWZpZXIsXG4gICAgICAgICAgICAgIHVuZGVmaW5lZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHMudmlzaXRFYWNoQ2hpbGQobm9kZSwgdmlzaXROb2RlLCB0cmFuc2Zvcm1hdGlvbkNvbnRleHQpO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBzaG91bGRNdXRhdGVNb2R1bGVTcGVjaWZpZXIobm9kZTogdHMuTm9kZSk6IG5vZGUgaXMgKFxuICAgICAgICB8IHRzLkltcG9ydERlY2xhcmF0aW9uXG4gICAgICAgIHwgdHMuRXhwb3J0RGVjbGFyYXRpb25cbiAgICAgICkgJiB7XG4gICAgICAgIG1vZHVsZVNwZWNpZmllcjogdHMuU3RyaW5nTGl0ZXJhbDtcbiAgICAgIH0ge1xuICAgICAgICBpZiAoIXRzLmlzSW1wb3J0RGVjbGFyYXRpb24obm9kZSkgJiYgIXRzLmlzRXhwb3J0RGVjbGFyYXRpb24obm9kZSkpXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIGlmIChub2RlLm1vZHVsZVNwZWNpZmllciA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIC8vIG9ubHkgd2hlbiBtb2R1bGUgc3BlY2lmaWVyIGlzIHZhbGlkXG4gICAgICAgIGlmICghdHMuaXNTdHJpbmdMaXRlcmFsKG5vZGUubW9kdWxlU3BlY2lmaWVyKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAvLyBvbmx5IHdoZW4gcGF0aCBpcyByZWxhdGl2ZVxuICAgICAgICBpZiAoXG4gICAgICAgICAgIW5vZGUubW9kdWxlU3BlY2lmaWVyLnRleHQuc3RhcnRzV2l0aChcIi4vXCIpICYmXG4gICAgICAgICAgIW5vZGUubW9kdWxlU3BlY2lmaWVyLnRleHQuc3RhcnRzV2l0aChcIi4uL1wiKVxuICAgICAgICApXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAvLyBvbmx5IHdoZW4gbW9kdWxlIHNwZWNpZmllciBoYXMgbm8gZXh0ZW5zaW9uXG4gICAgICAgIGlmIChwYXRoLmV4dG5hbWUobm9kZS5tb2R1bGVTcGVjaWZpZXIudGV4dCkgIT09IFwiXCIpIHJldHVybiBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0cy52aXNpdE5vZGUoc291cmNlRmlsZSwgdmlzaXROb2RlKSBhcyBTb3VyY2VGaWxlO1xuICAgIH07XG4gIH07XG59O1xuXG5leHBvcnQgY2xhc3MgQnVpbGRTY3JpcHRzIGV4dGVuZHMgQ29tbWFuZDxcbiAgQ29tbWFuZE9wdGlvbnM8dHlwZW9mIG9wdGlvbnM+LFxuICB2b2lkXG4+IHtcbiAgcHJpdmF0ZSByZXBsYWNlbWVudHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgcHJpdmF0ZSByZWFkb25seSBwa2dWZXJzaW9uOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgcGtnTmFtZTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFxuICAgICAgXCJCdWlsZFNjcmlwdHNcIixcbiAgICAgIE9iamVjdC5hc3NpZ24oe30sIERlZmF1bHRDb21tYW5kT3B0aW9ucywgb3B0aW9ucykgYXMgQ29tbWFuZE9wdGlvbnM8XG4gICAgICAgIHR5cGVvZiBvcHRpb25zXG4gICAgICA+XG4gICAgKTtcbiAgICBjb25zdCBwa2cgPSBnZXRQYWNrYWdlKCkgYXMgeyBuYW1lOiBzdHJpbmc7IHZlcnNpb246IHN0cmluZyB9O1xuICAgIGNvbnN0IHsgbmFtZSwgdmVyc2lvbiB9ID0gcGtnO1xuICAgIHRoaXMucGtnTmFtZSA9IG5hbWUuaW5jbHVkZXMoXCJAXCIpID8gbmFtZS5zcGxpdChcIi9cIilbMV0gOiBuYW1lO1xuICAgIHRoaXMucGtnVmVyc2lvbiA9IHZlcnNpb247XG4gICAgdGhpcy5yZXBsYWNlbWVudHNbVkVSU0lPTl9TVFJJTkddID0gdGhpcy5wa2dWZXJzaW9uO1xuICB9XG5cbiAgcGF0Y2hGaWxlcyhwOiBzdHJpbmcpIHtcbiAgICBjb25zdCBsb2cgPSB0aGlzLmxvZy5mb3IodGhpcy5wYXRjaEZpbGVzKTtcbiAgICBjb25zdCB7IG5hbWUsIHZlcnNpb24gfSA9IGdldFBhY2thZ2UoKSBhcyBhbnk7XG4gICAgbG9nLmluZm8oYFBhdGNoaW5nICR7bmFtZX0gJHt2ZXJzaW9ufSBtb2R1bGUgaW4gJHtwfS4uLmApO1xuICAgIGNvbnN0IHN0YXQgPSBmcy5zdGF0U3luYyhwKTtcbiAgICBpZiAoc3RhdC5pc0RpcmVjdG9yeSgpKVxuICAgICAgZnMucmVhZGRpclN5bmMocCwgeyB3aXRoRmlsZVR5cGVzOiB0cnVlLCByZWN1cnNpdmU6IHRydWUgfSlcbiAgICAgICAgLmZpbHRlcigocCkgPT4gcC5pc0ZpbGUoKSlcbiAgICAgICAgLmZvckVhY2goKGZpbGUpID0+XG4gICAgICAgICAgcGF0Y2hGaWxlKHBhdGguam9pbihmaWxlLnBhcmVudFBhdGgsIGZpbGUubmFtZSksIHRoaXMucmVwbGFjZW1lbnRzKVxuICAgICAgICApO1xuICAgIGxvZy52ZXJib3NlKGBNb2R1bGUgJHtuYW1lfSAke3ZlcnNpb259IHBhdGNoZWQgaW4gJHtwfS4uLmApO1xuICB9XG5cbiAgcHJpdmF0ZSByZXBvcnREaWFnbm9zdGljcyhkaWFnbm9zdGljczogRGlhZ25vc3RpY1tdKTogdm9pZCB7XG4gICAgZGlhZ25vc3RpY3MuZm9yRWFjaCgoZGlhZ25vc3RpYykgPT4ge1xuICAgICAgbGV0IG1lc3NhZ2UgPSBcIkVycm9yXCI7XG4gICAgICBpZiAoZGlhZ25vc3RpYy5maWxlICYmIGRpYWdub3N0aWMuc3RhcnQpIHtcbiAgICAgICAgY29uc3QgeyBsaW5lLCBjaGFyYWN0ZXIgfSA9XG4gICAgICAgICAgZGlhZ25vc3RpYy5maWxlLmdldExpbmVBbmRDaGFyYWN0ZXJPZlBvc2l0aW9uKGRpYWdub3N0aWMuc3RhcnQpO1xuICAgICAgICBtZXNzYWdlICs9IGAgJHtkaWFnbm9zdGljLmZpbGUuZmlsZU5hbWV9ICgke2xpbmUgKyAxfSwke2NoYXJhY3RlciArIDF9KWA7XG4gICAgICB9XG4gICAgICBtZXNzYWdlICs9XG4gICAgICAgIFwiOiBcIiArIHRzLmZsYXR0ZW5EaWFnbm9zdGljTWVzc2FnZVRleHQoZGlhZ25vc3RpYy5tZXNzYWdlVGV4dCwgXCJcXG5cIik7XG4gICAgICBjb25zb2xlLmxvZyhtZXNzYWdlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZENvbmZpZ0ZpbGUoY29uZmlnRmlsZU5hbWU6IHN0cmluZykge1xuICAgIC8vIFJlYWQgY29uZmlnIGZpbGVcbiAgICBjb25zdCBjb25maWdGaWxlVGV4dCA9IGZzLnJlYWRGaWxlU3luYyhjb25maWdGaWxlTmFtZSkudG9TdHJpbmcoKTtcblxuICAgIC8vIFBhcnNlIEpTT04sIGFmdGVyIHJlbW92aW5nIGNvbW1lbnRzLiBKdXN0IGZhbmNpZXIgSlNPTi5wYXJzZVxuICAgIGNvbnN0IHJlc3VsdCA9IHRzLnBhcnNlQ29uZmlnRmlsZVRleHRUb0pzb24oY29uZmlnRmlsZU5hbWUsIGNvbmZpZ0ZpbGVUZXh0KTtcbiAgICBjb25zdCBjb25maWdPYmplY3QgPSByZXN1bHQuY29uZmlnO1xuICAgIGlmICghY29uZmlnT2JqZWN0KSB7XG4gICAgICB0aGlzLnJlcG9ydERpYWdub3N0aWNzKFtyZXN1bHQuZXJyb3IhXSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gcGFyc2UgdHNjb25maWcuanNvblwiKTtcbiAgICB9XG5cbiAgICAvLyBFeHRyYWN0IGNvbmZpZyBpbmZyb21hdGlvblxuICAgIGNvbnN0IGNvbmZpZ1BhcnNlUmVzdWx0ID0gdHMucGFyc2VKc29uQ29uZmlnRmlsZUNvbnRlbnQoXG4gICAgICBjb25maWdPYmplY3QsXG4gICAgICB0cy5zeXMsXG4gICAgICBwYXRoLmRpcm5hbWUoY29uZmlnRmlsZU5hbWUpXG4gICAgKTtcbiAgICBpZiAoY29uZmlnUGFyc2VSZXN1bHQuZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMucmVwb3J0RGlhZ25vc3RpY3MoY29uZmlnUGFyc2VSZXN1bHQuZXJyb3JzKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkZhaWxlZCB0byBwYXJzZSB0c2NvbmZpZy5qc29uXCIpO1xuICAgIH1cbiAgICByZXR1cm4gY29uZmlnUGFyc2VSZXN1bHQ7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGJ1aWxkVHMoaXNEZXY6IGJvb2xlYW4sIG1vZGU6IE1vZGVzLCBidW5kbGUgPSBmYWxzZSkge1xuICAgIGNvbnN0IGxvZyA9IHRoaXMubG9nLmZvcih0aGlzLmJ1aWxkVHMpO1xuICAgIGxvZy5pbmZvKFxuICAgICAgYEJ1aWxkaW5nICR7dGhpcy5wa2dOYW1lfSAke3RoaXMucGtnVmVyc2lvbn0gbW9kdWxlICgke21vZGV9KSBpbiAke2lzRGV2ID8gXCJkZXZcIiA6IFwicHJvZFwifSBtb2RlLi4uYFxuICAgICk7XG4gICAgbGV0IHRzQ29uZmlnO1xuICAgIHRyeSB7XG4gICAgICB0c0NvbmZpZyA9IHRoaXMucmVhZENvbmZpZ0ZpbGUoXCIuL3RzY29uZmlnLmpzb25cIik7XG4gICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gcGFyc2UgdHNjb25maWcuanNvbjogJHtlfWApO1xuICAgIH1cblxuICAgIGlmIChidW5kbGUpIHtcbiAgICAgIHRzQ29uZmlnLm9wdGlvbnMubW9kdWxlID0gTW9kdWxlS2luZC5BTUQ7XG4gICAgICB0c0NvbmZpZy5vcHRpb25zLm91dERpciA9IFwiZGlzdFwiO1xuICAgICAgdHNDb25maWcub3B0aW9ucy5pc29sYXRlZE1vZHVsZXMgPSBmYWxzZTtcbiAgICAgIHRzQ29uZmlnLm9wdGlvbnMub3V0RmlsZSA9IHRoaXMucGtnTmFtZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdHNDb25maWcub3B0aW9ucy5vdXREaXIgPSBgbGliJHttb2RlID09PSBNb2Rlcy5FU00gPyBcIi9lc21cIiA6IFwiXCJ9YDtcbiAgICAgIHRzQ29uZmlnLm9wdGlvbnMubW9kdWxlID1cbiAgICAgICAgbW9kZSA9PT0gTW9kZXMuRVNNID8gTW9kdWxlS2luZC5FUzIwMjIgOiBNb2R1bGVLaW5kLkNvbW1vbkpTO1xuICAgIH1cblxuICAgIGlmIChpc0Rldikge1xuICAgICAgdHNDb25maWcub3B0aW9ucy5pbmxpbmVTb3VyY2VNYXAgPSB0cnVlO1xuICAgICAgdHNDb25maWcub3B0aW9ucy5zb3VyY2VNYXAgPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdHNDb25maWcub3B0aW9ucy5zb3VyY2VNYXAgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBwcm9ncmFtID0gdHMuY3JlYXRlUHJvZ3JhbSh0c0NvbmZpZy5maWxlTmFtZXMsIHRzQ29uZmlnLm9wdGlvbnMpO1xuXG4gICAgY29uc3QgdHJhbnNmb3JtYXRpb25zOiB7IGJlZm9yZT86IGFueVtdIH0gPSB7fTtcbiAgICBpZiAobW9kZSA9PT0gTW9kZXMuQ0pTKSB7XG4gICAgICB0cmFuc2Zvcm1hdGlvbnMuYmVmb3JlID0gW2NqczJUcmFuc2Zvcm1lcihcIi5janNcIildO1xuICAgIH0gZWxzZSBpZiAobW9kZSA9PT0gTW9kZXMuRVNNKSB7XG4gICAgICB0cmFuc2Zvcm1hdGlvbnMuYmVmb3JlID0gW2NqczJUcmFuc2Zvcm1lcihcIi5qc1wiKV07XG4gICAgfVxuXG4gICAgY29uc3QgZW1pdFJlc3VsdDogRW1pdFJlc3VsdCA9IHByb2dyYW0uZW1pdChcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHRyYW5zZm9ybWF0aW9uc1xuICAgICk7XG5cbiAgICBjb25zdCBhbGxEaWFnbm9zdGljcyA9IHRzXG4gICAgICAuZ2V0UHJlRW1pdERpYWdub3N0aWNzKHByb2dyYW0pXG4gICAgICAuY29uY2F0KGVtaXRSZXN1bHQuZGlhZ25vc3RpY3MpO1xuXG4gICAgYWxsRGlhZ25vc3RpY3MuZm9yRWFjaCgoZGlhZ25vc3RpYykgPT4ge1xuICAgICAgaWYgKGRpYWdub3N0aWMuZmlsZSkge1xuICAgICAgICBjb25zdCB7IGxpbmUsIGNoYXJhY3RlciB9ID1cbiAgICAgICAgICBkaWFnbm9zdGljLmZpbGUuZ2V0TGluZUFuZENoYXJhY3Rlck9mUG9zaXRpb24oZGlhZ25vc3RpYy5zdGFydCEpO1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gdHMuZmxhdHRlbkRpYWdub3N0aWNNZXNzYWdlVGV4dChcbiAgICAgICAgICBkaWFnbm9zdGljLm1lc3NhZ2VUZXh0LFxuICAgICAgICAgIFwiXFxuXCJcbiAgICAgICAgKTtcbiAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgYCR7ZGlhZ25vc3RpYy5maWxlLmZpbGVOYW1lfSAoJHtsaW5lICsgMX0sJHtjaGFyYWN0ZXIgKyAxfSk6ICR7bWVzc2FnZX1gXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICB0cy5mbGF0dGVuRGlhZ25vc3RpY01lc3NhZ2VUZXh0KGRpYWdub3N0aWMubWVzc2FnZVRleHQsIFwiXFxuXCIpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKGVtaXRSZXN1bHQuZW1pdFNraXBwZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkJ1aWxkIGZhaWxlZFwiKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGJ1aWxkKGlzRGV2OiBib29sZWFuLCBtb2RlOiBNb2RlcywgYnVuZGxlID0gZmFsc2UpIHtcbiAgICBjb25zdCBsb2cgPSB0aGlzLmxvZy5mb3IodGhpcy5idWlsZCk7XG4gICAgYXdhaXQgdGhpcy5idWlsZFRzKGlzRGV2LCBtb2RlLCBidW5kbGUpO1xuXG4gICAgbG9nLnZlcmJvc2UoXG4gICAgICBgTW9kdWxlICR7dGhpcy5wa2dOYW1lfSAke3RoaXMucGtnVmVyc2lvbn0gKCR7bW9kZX0pIGJ1aWx0IGluICR7aXNEZXYgPyBcImRldlwiIDogXCJwcm9kXCJ9IG1vZGUuLi5gXG4gICAgKTtcbiAgICBpZiAobW9kZSA9PT0gTW9kZXMuQ0pTICYmICFidW5kbGUpIHtcbiAgICAgIGNvbnN0IGZpbGVzID0gZ2V0QWxsRmlsZXMoXG4gICAgICAgIFwibGliXCIsXG4gICAgICAgIChmaWxlKSA9PiBmaWxlLmVuZHNXaXRoKFwiLmpzXCIpICYmICFmaWxlLmluY2x1ZGVzKFwiL2VzbS9cIilcbiAgICAgICk7XG5cbiAgICAgIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xuICAgICAgICBsb2cudmVyYm9zZShgUGF0Y2hpbmcgJHtmaWxlfSdzIGNqcyBpbXBvcnRzLi4uYCk7XG4gICAgICAgIGNvbnN0IGYgPSBmaWxlLnJlcGxhY2UoXCIuanNcIiwgXCIuY2pzXCIpO1xuICAgICAgICBhd2FpdCByZW5hbWVGaWxlKGZpbGUsIGYpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvcHlBc3NldHMobW9kZTogTW9kZXMpIHtcbiAgICBjb25zdCBsb2cgPSB0aGlzLmxvZy5mb3IodGhpcy5jb3B5QXNzZXRzKTtcbiAgICBsZXQgaGFzQXNzZXRzID0gZmFsc2U7XG4gICAgdHJ5IHtcbiAgICAgIGhhc0Fzc2V0cyA9IGZzLnN0YXRTeW5jKFwiLi9zcmMvYXNzZXRzXCIpLmlzRGlyZWN0b3J5KCk7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgcmV0dXJuIGxvZy52ZXJib3NlKGBObyBhc3NldHMgZm91bmQgaW4gLi9zcmMvYXNzZXRzIHRvIGNvcHlgKTtcbiAgICB9XG4gICAgaWYgKGhhc0Fzc2V0cylcbiAgICAgIGNvcHlGaWxlKFxuICAgICAgICBcIi4vc3JjL2Fzc2V0c1wiLFxuICAgICAgICBgLi8ke21vZGUgPT09IE1vZGVzLkNKUyA/IFwibGliXCIgOiBcImRpc3RcIn0vYXNzZXRzYFxuICAgICAgKTtcbiAgfVxuXG4gIGFzeW5jIGJ1aWxkQ29tbWFuZHMoKSB7XG4gICAgZm9yIChjb25zdCBjbWQgb2YgQ29tbWFuZHMpIHtcbiAgICAgIGF3YWl0IHRoaXMuYnVuZGxlKE1vZGVzLkNKUywgdHJ1ZSwgdHJ1ZSwgYHNyYy9iaW4vJHtjbWR9LnRzYCwgY21kKTtcbiAgICAgIGxldCBkYXRhID0gcmVhZEZpbGUoYGJpbi8ke2NtZH0uY2pzYCk7XG4gICAgICBkYXRhID0gXCIjIS91c3IvYmluL2VudiBub2RlXFxuXCIgKyBkYXRhO1xuICAgICAgd3JpdGVGaWxlKGBiaW4vJHtjbWR9LmNqc2AsIGRhdGEpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGJ1bmRsZShcbiAgICBtb2RlOiBNb2RlcyxcbiAgICBpc0RldjogYm9vbGVhbixcbiAgICBpc0xpYjogYm9vbGVhbixcbiAgICBlbnRyeUZpbGU6IHN0cmluZyA9IFwic3JjL2luZGV4LnRzXCIsXG4gICAgbmFtZU92ZXJyaWRlOiBzdHJpbmcgPSB0aGlzLnBrZ05hbWUsXG4gICAgZXh0ZXJuYWxzPzogc3RyaW5nW10sXG4gICAgaW5jbHVkZTogc3RyaW5nW10gPSBbXG4gICAgICBcInByb21wdHNcIixcbiAgICAgIFwic3R5bGVkLXN0cmluZy1idWlsZGVyXCIsXG4gICAgICBcInR5cGVkLW9iamVjdC1hY2N1bXVsYXRvclwiLFxuICAgICAgXCJAZGVjYWYtdHMvbG9nZ2luZ1wiLFxuICAgIF1cbiAgKSB7XG4gICAgY29uc3QgaXNFc20gPSBtb2RlID09PSBNb2Rlcy5FU007XG4gICAgY29uc3QgcGtnTmFtZSA9IHRoaXMucGtnTmFtZTtcblxuICAgIGNvbnN0IGV4dCA9IEFycmF5LmZyb20oXG4gICAgICBuZXcgU2V0KFtcbiAgICAgICAgLi4uW1xuICAgICAgICAgIFwiZnNcIixcbiAgICAgICAgICBcInBhdGhcIixcbiAgICAgICAgICBcInByb2Nlc3NcIixcbiAgICAgICAgICBcInJvbGx1cFwiLFxuICAgICAgICAgIFwiQHJvbGx1cC9wbHVnaW4tdHlwZXNjcmlwdFwiLFxuICAgICAgICAgIFwiQHJvbGx1cC9wbHVnaW4tanNvblwiLFxuICAgICAgICAgIFwiQHJvbGx1cC9wbHVnaW4tY29tbW9uanNcIixcbiAgICAgICAgICBcIkByb2xsdXAvcGx1Z2luLW5vZGUtcmVzb2x2ZVwiLFxuICAgICAgICAgIFwiY2hpbGRfcHJvY2Vzc1wiLFxuICAgICAgICAgIFwidHNsaWJcIixcbiAgICAgICAgICBcInV0aWxcIixcbiAgICAgICAgICBcImh0dHBzXCIsXG4gICAgICAgIF0sXG4gICAgICAgIC4uLihleHRlcm5hbHMgfHwgW10pLFxuICAgICAgXSlcbiAgICApO1xuXG4gICAgY29uc3QgcGx1Z2lucyA9IFtcbiAgICAgIHR5cGVzY3JpcHQoe1xuICAgICAgICBjb21waWxlck9wdGlvbnM6IHtcbiAgICAgICAgICBtb2R1bGU6IFwiZXNuZXh0XCIsXG4gICAgICAgICAgZGVjbGFyYXRpb246IGZhbHNlLFxuICAgICAgICAgIG91dERpcjogaXNMaWIgPyBcImJpblwiIDogXCJkaXN0XCIsXG4gICAgICAgIH0sXG4gICAgICAgIGluY2x1ZGU6IFtcInNyYy8qKi8qLnRzXCJdLFxuICAgICAgICBleGNsdWRlOiBbXCJub2RlX21vZHVsZXNcIiwgXCIqKi8qLnNwZWMudHNcIl0sXG4gICAgICAgIHRzY29uZmlnOiBcIi4vdHNjb25maWcuanNvblwiLFxuICAgICAgfSksXG4gICAgICBqc29uKCksXG4gICAgXTtcblxuICAgIGlmIChpc0xpYikge1xuICAgICAgcGx1Z2lucy5wdXNoKFxuICAgICAgICBjb21tb25qcyh7XG4gICAgICAgICAgaW5jbHVkZTogW10sXG4gICAgICAgICAgZXhjbHVkZTogZXh0ZXJuYWxzLFxuICAgICAgICB9KSxcbiAgICAgICAgbm9kZVJlc29sdmUoe1xuICAgICAgICAgIHJlc29sdmVPbmx5OiBpbmNsdWRlLFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBpbnB1dDogSW5wdXRPcHRpb25zID0ge1xuICAgICAgaW5wdXQ6IGVudHJ5RmlsZSxcbiAgICAgIHBsdWdpbnM6IHBsdWdpbnMsXG4gICAgICBleHRlcm5hbDogZXh0LFxuICAgIH07XG5cbiAgICBjb25zdCBvdXRwdXRzOiBPdXRwdXRPcHRpb25zW10gPSBbXG4gICAgICB7XG4gICAgICAgIGZpbGU6IGAke2lzTGliID8gXCJiaW4vXCIgOiBcImRpc3QvXCJ9JHtuYW1lT3ZlcnJpZGUgPyBuYW1lT3ZlcnJpZGUgOiBgLmJ1bmRsZS4keyFpc0RldiA/IFwibWluXCIgOiBcIlwifWB9JHtpc0VzbSA/IFwiLmVzbVwiIDogXCJcIn0uY2pzYCxcbiAgICAgICAgZm9ybWF0OiBpc0xpYiA/IFwiY2pzXCIgOiBpc0VzbSA/IFwiZXNtXCIgOiBcInVtZFwiLFxuICAgICAgICBuYW1lOiBwa2dOYW1lLFxuICAgICAgICBlc01vZHVsZTogaXNFc20sXG4gICAgICAgIHNvdXJjZW1hcDogaXNEZXYgPyBcImlubGluZVwiIDogZmFsc2UsXG4gICAgICAgIGdsb2JhbHM6IHt9LFxuICAgICAgICBleHBvcnRzOiBcImF1dG9cIixcbiAgICAgIH0sXG4gICAgXTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBidW5kbGUgPSBhd2FpdCByb2xsdXAoaW5wdXQpO1xuICAgICAgY29uc29sZS5sb2coYnVuZGxlLndhdGNoRmlsZXMpO1xuICAgICAgYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVPdXRwdXRzKGJ1bmRsZTogUm9sbHVwQnVpbGQpIHtcbiAgICAgICAgZm9yIChjb25zdCBvdXRwdXRPcHRpb25zIG9mIG91dHB1dHMpIHtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgICAgICAgY29uc3QgeyBvdXRwdXQgfSA9IGF3YWl0IGJ1bmRsZS53cml0ZShvdXRwdXRPcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBhd2FpdCBnZW5lcmF0ZU91dHB1dHMoYnVuZGxlKTtcbiAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBidW5kbGU6ICR7ZX1gKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGJ1aWxkQnlFbnYoaXNEZXY6IGJvb2xlYW4pIHtcbiAgICB0cnkge1xuICAgICAgZGVsZXRlUGF0aChcImxpYlwiKTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICAvLyBkbyBub3RoaW5nXG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBkZWxldGVQYXRoKFwiZGlzdFwiKTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICAvLyBkbyBub3RoaW5nXG4gICAgfVxuICAgIGZzLm1rZGlyU3luYyhcImxpYlwiKTtcbiAgICBmcy5ta2RpclN5bmMoXCJkaXN0XCIpO1xuICAgIGF3YWl0IHRoaXMuYnVpbGQoaXNEZXYsIE1vZGVzLkVTTSk7XG4gICAgYXdhaXQgdGhpcy5idWlsZChpc0RldiwgTW9kZXMuQ0pTKTtcbiAgICBhd2FpdCB0aGlzLmJ1bmRsZShNb2Rlcy5FU00sIHRydWUsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLmJ1bmRsZShNb2Rlcy5DSlMsIHRydWUsIGZhbHNlKTtcbiAgICB0aGlzLnBhdGNoRmlsZXMoXCJsaWJcIik7XG4gICAgdGhpcy5wYXRjaEZpbGVzKFwiZGlzdFwiKTtcbiAgICB0aGlzLmNvcHlBc3NldHMoTW9kZXMuQ0pTKTtcbiAgICB0aGlzLmNvcHlBc3NldHMoTW9kZXMuRVNNKTtcbiAgfVxuXG4gIGFzeW5jIGJ1aWxkRGV2KCkge1xuICAgIHJldHVybiB0aGlzLmJ1aWxkQnlFbnYodHJ1ZSk7XG4gIH1cblxuICBhc3luYyBidWlsZFByb2QoKSB7XG4gICAgcmV0dXJuIHRoaXMuYnVpbGRCeUVudihmYWxzZSk7XG4gIH1cblxuICBhc3luYyBidWlsZERvY3MoKSB7XG4gICAgYXdhaXQgcnVuQ29tbWFuZChgbnBtIGluc3RhbGwgYmV0dGVyLWRvY3MgdGFmZnlkYmApLnByb21pc2U7XG4gICAgYXdhaXQgcnVuQ29tbWFuZChgbnB4IG1hcmtkb3duLWluY2x1ZGUgLi93b3JrZG9jcy9yZWFkbWUtbWQuanNvbmApLnByb21pc2U7XG4gICAgYXdhaXQgcnVuQ29tbWFuZChcbiAgICAgIGBucHgganNkb2MgLWMgLi93b3JrZG9jcy9qc2RvY3MuanNvbiAtdCAuL25vZGVfbW9kdWxlcy9iZXR0ZXItZG9jc2BcbiAgICApLnByb21pc2U7XG4gICAgYXdhaXQgcnVuQ29tbWFuZChgbnBtIHJlbW92ZSBiZXR0ZXItZG9jcyB0YWZmeWRiYCkucHJvbWlzZTtcbiAgICBbXG4gICAgICB7XG4gICAgICAgIHNyYzogXCJ3b3JrZG9jcy9hc3NldHNcIixcbiAgICAgICAgZGVzdDogXCIuL2RvY3Mvd29ya2RvY3MvYXNzZXRzXCIsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBzcmM6IFwid29ya2RvY3MvcmVwb3J0cy9jb3ZlcmFnZVwiLFxuICAgICAgICBkZXN0OiBcIi4vZG9jcy93b3JrZG9jcy9yZXBvcnRzL2NvdmVyYWdlXCIsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBzcmM6IFwid29ya2RvY3MvcmVwb3J0cy9odG1sXCIsXG4gICAgICAgIGRlc3Q6IFwiLi9kb2NzL3dvcmtkb2NzL3JlcG9ydHMvaHRtbFwiLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgc3JjOiBcIndvcmtkb2NzL3Jlc291cmNlc1wiLFxuICAgICAgICBkZXN0OiBcIi4vZG9jcy93b3JrZG9jcy9yZXNvdXJjZXNcIixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHNyYzogXCJMSUNFTlNFLm1kXCIsXG4gICAgICAgIGRlc3Q6IFwiLi9kb2NzL0xJQ0VOU0UubWRcIixcbiAgICAgIH0sXG4gICAgXS5mb3JFYWNoKChmKSA9PiB7XG4gICAgICBjb25zdCB7IHNyYywgZGVzdCB9ID0gZjtcbiAgICAgIGNvcHlGaWxlKHNyYywgZGVzdCk7XG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgcnVuPFI+KFxuICAgIGFuc3dlcnM6IExvZ2dpbmdDb25maWcgJlxuICAgICAgdHlwZW9mIERlZmF1bHRDb21tYW5kVmFsdWVzICYgeyBbayBpbiBrZXlvZiB0eXBlb2Ygb3B0aW9uc106IHVua25vd24gfVxuICApOiBQcm9taXNlPHN0cmluZyB8IHZvaWQgfCBSPiB7XG4gICAgY29uc3QgeyBkZXYsIHByb2QsIGRvY3MsIGNvbW1hbmRzIH0gPSBhbnN3ZXJzO1xuXG4gICAgaWYgKGNvbW1hbmRzKSB7XG4gICAgICBhd2FpdCB0aGlzLmJ1aWxkQ29tbWFuZHMoKTtcbiAgICB9XG5cbiAgICBpZiAoZGV2KSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5idWlsZERldigpO1xuICAgIH1cbiAgICBpZiAocHJvZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYnVpbGRQcm9kKCk7XG4gICAgfVxuICAgIGlmIChkb2NzKSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5idWlsZERvY3MoKTtcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7IEJ1aWxkU2NyaXB0cyB9IGZyb20gXCIuLi9jbGkvY29tbWFuZHNcIjtcblxubmV3IEJ1aWxkU2NyaXB0cygpXG4gIC5leGVjdXRlKClcbiAgLnRoZW4oKCkgPT4gQnVpbGRTY3JpcHRzLmxvZy5pbmZvKFwiU2NyaXB0cyBidWlsdCBzdWNjZXNzZnVsbHkuXCIpKVxuICAuY2F0Y2goKGU6IHVua25vd24pID0+IHtcbiAgICBCdWlsZFNjcmlwdHMubG9nLmVycm9yKGBFcnJvciBidWlsZGluZyBzY3JpcHRzOiAke2V9YCk7XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9KTtcbiJdLCJuYW1lcyI6WyJhY3Rpb24iLCJzdHJpcCIsInJlcXVpcmUkJDAiLCJyZXF1aXJlJCQxIiwiY2xlYXIiLCJmaWd1cmVzXzEiLCJzdHlsZSIsImxpbmVzIiwid3JhcCIsImVudHJpZXNUb0Rpc3BsYXkiLCJ1dGlsIiwicmVxdWlyZSQkMiIsInJlcXVpcmUkJDMiLCJyZXF1aXJlJCQ0IiwicmVxdWlyZSQkNSIsInJlcXVpcmUkJDYiLCJyZXF1aXJlJCQ3IiwicHJvbXB0IiwidGV4dCIsInNlbGVjdCIsInRvZ2dsZSIsImRhdGVwYXJ0IiwibWVyaWRpZW0iLCJkYXkiLCJob3VycyIsIm1pbGxpc2Vjb25kcyIsIm1pbnV0ZXMiLCJtb250aCIsInNlY29uZHMiLCJ5ZWFyIiwiZGF0ZXBhcnRzIiwicmVxdWlyZSQkOCIsImRhdGUiLCJudW1iZXIiLCJtdWx0aXNlbGVjdCIsImF1dG9jb21wbGV0ZSIsImF1dG9jb21wbGV0ZU11bHRpc2VsZWN0IiwiY29uZmlybSIsImVsZW1lbnRzIiwicHJvbXB0cyIsInBhcnNlQXJncyIsInNwYXduIiwidHMiLCJNb2R1bGVLaW5kIiwibm9kZVJlc29sdmUiLCJyb2xsdXAiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7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LENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsR0FBRywyQkFBMkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLGNBQW1ELEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxNQUFNLElBQUksU0FBUyxDQUFDLHVJQUF1SSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksZ0JBQWdCLEdBQUcsSUFBSSxFQUFFLE1BQU0sR0FBRyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxTQUFTLENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsU0FBUyxDQUFDLEdBQUcsRUFBRSxJQUFJLElBQUksR0FBRyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMs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Q0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDOztPQUV0QixNQUFNLENBQUMsS0FBSyxFQUFFO0FBQ3BCLE1BQUssQ0FBQyxFQUFFO0FBQ1I7O0FBRUEsR0FBRSxJQUFJLEdBQUc7S0FDTCxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUU7QUFDN0MsS0FBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPO0tBQ3pCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNO0tBQ2xDLElBQUksQ0FBQyxJQUFJLEVBQUU7S0FDWCxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ2pCOztHQUVFLFVBQVUsQ0FBQyxDQUFDLEVBQUU7QUFDaEIsS0FBSSxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7S0FDdEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUM7QUFDakMsS0FBSSxJQUFJLENBQUMsWUFBWSxJQUFJLENBQUM7QUFDMUI7O0FBRUEsR0FBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRTtBQUNaLEtBQUksSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDN0MsS0FBSSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQzFDLEtBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDakMsS0FBSSxJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUs7QUFDcEIsS0FBSSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQztLQUNsRCxJQUFJLENBQUMsTUFBTSxF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SUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUM7QUFDckU7O0FBRUEsR0FBRSxhQUFhLEdBQUc7S0FDZCxPQUFPLElBQUksQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUM7QUFDL0c7O0FBRUEsR0FBRSxNQUFNLEdBQUc7QUFDWCxLQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTs7QUFFckIsS0FBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRTtBQUMzQixPQUFNLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNsSixPQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDOUQ7O0tBRUksS0FBSyxDQUFDLE1BQU0sRUFBRTtBQUNsQixLQUFJLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRTtLQUNyQixJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFB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SyxNQUFNLE9BQU8sSUFBSSxDQUFDLElBQUksRUFBRTs7S0FFekIsSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNqQjs7QUFFQSxHQUFFLE1BQU0sR0FBRztBQUNYLEtBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ3JCLEtBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7S0FDL0csS0FBSyxDQUFDLE1BQU0sRUFBRTtBQUNsQixLQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7S0FDMVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7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QUFFOztBQUVyQixLQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFO0FBQzNCLE9BQU0sSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ2xKLE9BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUM5RDs7S0FFSSxLQUFLLENBQUMsTUFBTSxFQUFFO0FBQ2xCLEtBQUksSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7O0FBRTFCLEtBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O0FBRXhPLEtBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO09BQ2Qs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RSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7S0FDN0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUM7QUFDL0IsS0FBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7S0FDMUIsSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNqQjs7QUFFQSxHQUFFLE1BQU0sR0FBRztLQUNQLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsT0FBTyxJQUFJLENBQUMsSUFBSSxFQUFFO0FBQzdDLEtBQUksSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ2pELEtBQUksSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztLQUN0QyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUM3QixLQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztLQUMxQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQztLQUM3QixJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ2pCOztBQUVBLEdBQUUsYUFBYSxHQUFHO0FBQ2xCLEtBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsT0FBTyxJQUFJLENBQUMsSUFBSSxFQUFFO0FBQzVFLEtBQUksSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDN0MsS0FBSSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztLQUMxQyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUM3QixLQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztLQUMxQixJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ2pCOztBQUVBLEdBQUUsS0FBSyxHQUFHO0FBQ1YsS0FBSSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztLQUNsQixJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ2pCOztBQUVBLEdBQUUsSUFBSSxHQUFHO0tBQ0wsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7S0FDNUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNqQjs7QUFFQSxHQUFFLEVBQUUsR0FBRztBQUNQLEtBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtPQUNyQixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUNsRCxNQUFLLE1BQU07T0FDTCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ3RDOztLQUVJLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDakI7O0FBRUEsR0FBRSxJQUFJLEdBQUc7QUFDVCxLQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7QUFDckQsT0FBTSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztBQUN4QixNQUFLLE1BQU07T0FDTCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ3RDOztLQUVJLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDakI7O0FBRUEsR0FBRSxJQUFJLEdBQUc7QUFDVCxLQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7QUFDckQsT0FBTSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztNQUNuQixNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7O0tBRXZDLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDakI7O0FBRUEsR0FBRSxRQUFRLEdBQUc7S0FDVCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0tBQ2hGLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDakI7O0FBRUEsR0FBRSxRQUFRLEdBQUc7QUFDYixLQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7S0FDdEQsSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNqQjs7QUFFQSxHQUFFLElBQUksR0FBRztLQUNMLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUUsT0FBTyxJQUFJLENBQUMsSUFBSSxFQUFFO0tBQ3hDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDO0tBQzdCLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDakI7O0FBRUEsR0FBRSxLQUFLLEdBQUc7QUFDVixLQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLE9BQU8sSUFBSSxDQUFDLElBQUksRUFBRTtLQUN4RSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQztLQUM3QixJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ2pCOztHQUVFLFlBQVksQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUU7QUFDM0MsS0FBSSxJQUFJLElBQUk7QUFDWixLQUFJLElBQUksTUFBTSxHQUFHLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxHQUFHLEtBQUssR0FBRyxPQUFPLENBQUMsU0FBUyxHQUFHLEdBQUc7QUFDNUUsS0FBSSxJQUFJLEtBQUssR0FBRyxPQUFPLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUs7QUFDbkUsS0FBSSxNQUFNLEdBQUcsQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksSUFBSSxNQUFNOztBQUUxRSxLQUFJLElBQUksQ0FBQyxDQUFDLFdBQVcsRUFBRTtPQUNqQixJQUFJLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDOztBQUVsQyxPQUFNLElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtTQUM3RyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFO1dBQ2hDLE1BQU0sRUFBRSxDQUFDO0FBQ25CLFdBQVUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDMUIsVUFBUyxDQUFDO0FBQ1Y7QUFDQTs7QUFFQSxLQUFJLE9BQU8sTUFBTSxHQUFHLEdBQUcsR0FBRyxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO0FBQ3hEOztBQUVBLEdBQUUsTUFBTSxHQUFHO0FBQ1gsS0FBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDckIsS0FBSSxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztLQUMvRyxLQUFLLENBQUMsTUFBTSxFQUFFOztBQUVsQixLQUFJLElBQUksaUJBQWlCLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzFGLFNBQVEsVUFBVSxHQUFHLGlCQUFpQixDQUFDLFVBQVU7QUFDakQsU0FBUSxRQUFRLEdBQUcsaUJBQWlCLENBQUMsUUFBUTs7QUFFN0MsS0FBSSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQzs7QUFFbFIsS0FBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRTtBQUNwQixPQUFNLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxHQUFHLFVBQVUsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLFVBQVUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFVBQVUsS0FBSyxRQUFRLEdBQUcsQ0FBQyxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztPQUNuUCxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksV0FBVyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNoRjs7S0FFSSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztBQUMvRDs7QUFFQTs7QUFFQSxDQUFBdUIsY0FBYyxHQUFHLGtCQUFrQjs7Ozs7Ozs7Ozs7Q0MxUm5DLE1BQU0sS0FBSyxHQUFHLFVBQWdCOztDQUU5QixNQUFNLFFBQVEsR0FBR2hDLFVBQXFCO0FBQ3RDLE9BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxNQUFNOztDQUU5QixNQUFNLGlCQUFpQixHQUFHUSxvQkFBd0IsRUFBQTs7Q0FFbEQsTUFBTSxTQUFTLEdBQUdDLGFBQWtCLEVBQUE7QUFDcEMsT0FBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLEtBQUs7QUFDN0IsT0FBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLEtBQUs7QUFDN0IsT0FBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLE9BQU87QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Q0FHQSxNQUFNLDZCQUE2QixTQUFTLGlCQUFpQixDQUFDO0FBQzlELEdBQUUsV0FBVyxDQUFDLElBQUksR0FBRyxFQUFFLEVBQUU7QUFDekIsS0FBSSxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUk7S0FDMUIsS0FBSyxDQUFDLElBQUksQ0FBQztBQUNmLEtBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFO0FBQ3hCLEtBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDO0FBQzVDLEtBQUksSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsS0FBSztLQUNqQyxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ2pCOztBQUVBLEdBQUUsSUFBSSxHQUFHO0tBQ0wsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sR0FBRyxDQUFDO0tBQzdDLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDakI7O0FBRUEsR0FBRSxJQUFJLEdBQUc7QUFDVCxLQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU07S0FDN0QsSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNqQjs7QUFFQSxHQUFFLEVBQUUsR0FBRztBQUNQLEtBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtPQUNyQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxHQUFHLENBQUM7QUFDbkQsTUFBSyxNQUFNO09BQ0wsSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNuQjs7S0FFSSxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ2pCOztBQUVBLEdBQUUsSUFBSSxHQUFHO0FBQ1QsS0FBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0FBQ3pELE9BQU0sSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDO0FBQ3JCLE1BQUssTUFBTTtPQUNMLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDbkI7O0tBRUksSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNqQjs7QUFFQSxHQUFFLElBQUksR0FBRztLQUNMLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsR0FBRyxLQUFLO0tBQ2xELElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDakI7O0FBRUEsR0FBRSxLQUFLLEdBQUc7S0FDTixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsT0FBTyxJQUFJLENBQUMsSUFBSSxFQUFFO0tBQ3BGLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsR0FBRyxJQUFJO0tBQ2pELElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDakI7O0FBRUEsR0FBRSxNQUFNLEdBQUc7QUFDWCxLQUFJLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUU7QUFDaEMsT0FBTSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7T0FDdkUsSUFBSSxDQUFDLHFCQUFxQixFQUFFO0FBQ2xDO0FBQ0E7O0FBRUEsR0FBRSxxQkFBcUIsR0FBRztLQUN0QixNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztLQUMxRCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSTtBQUNsRCxPQUFNLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtBQUMzQixTQUFRLElBQUksT0FBTyxDQUFDLENBQUMsS0FBSyxLQUFLLFFBQVEsRUFBRTtBQUN6QyxXQUFVLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxFQUFFO0FBQzdFLGFBQVksT0FBTyxJQUFJO0FBQ3ZCO0FBQ0E7O0FBRUEsU0FBUSxJQUFJLE9BQU8sQ0FBQyxDQUFDLEtBQUssS0FBSyxRQUFRLEVBQUU7QUFDekMsV0FBVSxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUMsRUFBRTtBQUM3RSxhQUFZLE9BQU8sSUFBSTtBQUN2QjtBQUNBOztBQUVBLFNBQVEsT0FBTyxLQUFLO0FBQ3BCOztBQUVBLE9BQU0sT0FBTyxJQUFJO0FBQ2pCLE1BQUssQ0FBQztBQUNOLEtBQUksTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLGdCQUFnQixDQUFDO0tBQ3JGLElBQUksQ0FBQyxNQUFNLEdBQUcsaUJBQWlCLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxpQkFBaUI7S0FDM0QsSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNqQjs7QUFFQSxHQUFFLGlCQUFpQixHQUFHO0tBQ2xCLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQzs7QUFFL0MsS0FBSSxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUU7QUFDcEIsT0FBTSxDQUFDLENBQUMsUUFBUSxHQUFHLEtBQUs7T0FDbEIsSUFBSSxDQUFDLE1BQU0sRUFBRTtNQUNkLE1BQU0sSUFBSSxDQUFDLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7QUFDM0YsT0FBTSxPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUU7QUFDeEIsTUFBSyxNQUFNO0FBQ1gsT0FBTSxDQUFDLENBQUMsUUFBUSxHQUFHLElBQUk7T0FDakIsSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNuQjtBQUNBOztHQUVFLGlCQUFpQixDQUFDLENBQUMsRUFBRTtLQUNuQixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQztLQUNyQyxJQUFJLENBQUMscUJBQXFCLEVBQUU7QUFDaEM7O0FBRUEsR0FBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRTtBQUNaLEtBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFO09BQ2IsSUFBSSxDQUFDLGlCQUFpQixFQUFFO0FBQzlCLE1BQUssTUFBTTtBQUNYLE9BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQztBQUMvQjtBQUNBOztBQUVBLEdBQUUsa0JBQWtCLEdBQUc7S0FDbkIsSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO0FBQzlELE9BQU0sSUFBSSxPQUFPLElBQUksQ0FBQyxZQUFZLEtBQUssUUFBUSxFQUFFO1NBQ3pDLE9BQU8sSUFBSSxDQUFDLFlBQVk7QUFDaEM7O0FBRUEsT0FBTSxPQUFPO0FBQ2I7QUFDQSxJQUFJLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLFNBQVMsQ0FBQztBQUMzQyxJQUFJLEVBQUUsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLFVBQVUsQ0FBQztBQUM5QztBQUNBO0FBQ0EsQ0FBQztBQUNEOztBQUVBLEtBQUksT0FBTyxFQUFFO0FBQ2I7O0FBRUEsR0FBRSxrQkFBa0IsR0FBRztBQUN2QixLQUFJLE9BQU87QUFDWCxzQkFBc0IsRUFBRSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUN2Rzs7QUFFQSxHQUFFLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUM3QixLQUFJLElBQUksS0FBSztLQUNULElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxLQUFLLEdBQUcsTUFBTSxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEtBQUssR0FBRyxNQUFNLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLO0tBQ2xMLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLE9BQU8sQ0FBQyxRQUFRLElBQUksSUFBSSxHQUFHLEtBQUs7QUFDeEY7O0FBRUEsR0FBRSx3QkFBd0IsR0FBRztBQUM3QixLQUFJLElBQUksSUFBSSxDQUFDLElBQUksRUFBRTtPQUNiLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQzVFOztLQUVJLE1BQU0sTUFBTSxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixFQUFFLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7O0FBRWhHLEtBQUksSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLEVBQUU7QUFDbkYsT0FBTSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzFDOztBQUVBLEtBQUksT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUMzQjs7QUFFQSxHQUFFLE1BQU0sR0FBRztBQUNYLEtBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ3JCLEtBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7QUFDckQsS0FBSSxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7O0FBRW5CLEtBQUksSUFBSSxNQUFNLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDOztBQUVqSixLQUFJLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtBQUMzQixPQUFNLE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsNkJBQTZCLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUN0RixPQUFNLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSztBQUMvQjs7S0FFSSxNQUFNLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDO0tBQ2xELElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLEtBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDO0FBQ2hEOztBQUVBOztBQUVBLENBQUF3Qix5QkFBYyxHQUFHLDZCQUE2Qjs7Ozs7Ozs7Ozs7Q0N0TTlDLE1BQU0sS0FBSyxHQUFHLFVBQWdCOztDQUU5QixNQUFNLE1BQU0sR0FBR2pDLGVBQW1CLEVBQUE7O0NBRWxDLE1BQU0sUUFBUSxHQUFHUSxhQUFrQixFQUFBO0FBQ25DLE9BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxLQUFLO0FBQzVCLE9BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxLQUFLOztDQUU1QixNQUFNLFNBQVMsR0FBRyxVQUFxQjtBQUN2QyxPQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsS0FBSztBQUM3QixPQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsTUFBTTtBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztDQUdBLE1BQU0sYUFBYSxTQUFTLE1BQU0sQ0FBQztBQUNuQyxHQUFFLFdBQVcsQ0FBQyxJQUFJLEdBQUcsRUFBRSxFQUFFO0tBQ3JCLEtBQUssQ0FBQyxJQUFJLENBQUM7QUFDZixLQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU87QUFDM0IsS0FBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPO0tBQ3pCLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPO0tBQ2xDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxLQUFLO0tBQy9CLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsSUFBSSxPQUFPO0tBQzFDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEVBQUUsSUFBSSxJQUFJO0tBQzVCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsSUFBSSxPQUFPO0tBQ3hDLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDakI7O0FBRUEsR0FBRSxLQUFLLEdBQUc7QUFDVixLQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVk7S0FDOUIsSUFBSSxDQUFDLElBQUksRUFBRTtLQUNYLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDakI7O0FBRUEsR0FBRSxJQUFJLEdBQUc7S0FDTCxJQUFJLENBQUMsS0FBSyxFQUFFO0FBQ2hCOztBQUVBLEdBQUUsS0FBSyxHQUFHO0tBQ04sSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUk7S0FDL0IsSUFBSSxDQUFDLElBQUksRUFBRTtLQUNYLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDakIsS0FBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7S0FDcEIsSUFBSSxDQUFDLEtBQUssRUFBRTtBQUNoQjs7QUFFQSxHQUFFLE1BQU0sR0FBRztLQUNQLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxLQUFLO0FBQ3BDLEtBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJO0FBQ3BCLEtBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLO0tBQ3BCLElBQUksQ0FBQyxJQUFJLEVBQUU7S0FDWCxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ2pCLEtBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO0tBQ3BCLElBQUksQ0FBQyxLQUFLLEVBQUU7QUFDaEI7O0FBRUEsR0FBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRTtBQUNaLEtBQUksSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFLEtBQUssR0FBRyxFQUFFO0FBQ2pDLE9BQU0sSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJO0FBQ3ZCLE9BQU0sT0FBTyxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQzFCOztBQUVBLEtBQUksSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFLEtBQUssR0FBRyxFQUFFO0FBQ2pDLE9BQU0sSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLO0FBQ3hCLE9BQU0sT0FBTyxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQzFCOztBQUVBLEtBQUksT0FBTyxJQUFJLENBQUMsSUFBSSxFQUFFO0FBQ3RCOztBQUVBLEdBQUUsTUFBTSxHQUFHO0FBQ1gsS0FBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDckIsS0FBSSxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztLQUMvRyxLQUFLLENBQUMsTUFBTSxFQUFFO0FBQ2xCLEtBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO0tBQ3pPLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO0FBQy9EOztBQUVBOztBQUVBLENBQUEwQixTQUFjLEdBQUcsYUFBYTs7Ozs7Ozs7Ozs7QUMxRjlCLENBQUFDLFVBQWMsR0FBRztHQUNmLFVBQVUsRUFBRXBDLGFBQWlCLEVBQUE7R0FDN0IsWUFBWSxFQUFFQyxlQUFtQixFQUFBO0dBQ2pDLFlBQVksRUFBRVEsZUFBbUIsRUFBQTtHQUNqQyxVQUFVLEVBQUVDLGFBQWlCLEVBQUE7R0FDN0IsWUFBWSxFQUFFQyxlQUFtQixFQUFBO0dBQ2pDLGlCQUFpQixFQUFFQyxvQkFBd0IsRUFBQTtHQUMzQyxrQkFBa0IsRUFBRUMscUJBQXlCLEVBQUE7R0FDN0MsNkJBQTZCLEVBQUVDLGdDQUFvQyxFQUFBO0FBQ3JFLEdBQUUsYUFBYSxFQUFFZSxnQkFBQTtFQUNoQjs7Ozs7Ozs7Ozs7RUNWRCxNQUFNLENBQUMsR0FBRyxPQUFPOztFQUVqQixNQUFNLEVBQUUsR0FBRzdCLGlCQUFxQixFQUFBOztBQUVoQyxFQUFBLE1BQU0sSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDOztFQUVuQixTQUFTLFFBQVEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksR0FBRyxFQUFFLEVBQUU7SUFDdkMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEtBQUs7TUFDL0IsTUFBTSxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ2hDLE1BQUksTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJO0FBQ3hDLE1BQUksTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJO0FBQzFDLE1BQUksTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJO01BQ2xDLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDO0FBQ3ZDLE1BQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6QyxNQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckMsTUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZDLEtBQUcsQ0FBQztBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0VBR0EsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLElBQUksUUFBUSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBLEVBQUEsQ0FBQyxDQUFDLFFBQVEsR0FBRyxJQUFJLElBQUk7QUFDckIsSUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLFVBQVU7QUFDekIsSUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO0dBQ3BCO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBLEVBQUEsQ0FBQyxDQUFDLFNBQVMsR0FBRyxJQUFJLElBQUk7QUFDdEIsSUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLFdBQVc7QUFDMUIsSUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO0dBQ3BCO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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QUMsRUFBRSxNQUFNLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsT0FBTyxHQUFHLENBQUM7O0FBRS9NLENBQUEsU0FBUywwQkFBMEIsQ0FBQyxDQUFDLEVBQUUsY0FBYyxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsT0FBTyxNQUFNLEtBQUssV0FBVyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLEdBQUcsMkJBQTJCLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxjQUFtRCxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxTQUFTLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsTUFBTSxJQUFJLFNBQVMsQ0FBQyx1SUFBdUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLGdCQUFnQixHQUFHLElBQUksRUFBRSxNQUFNLEdBQUcsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsU0FBUyxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxTQUFTLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsZ0JBQWdCLElBQUksRUFBRSxDQUFDLE1BQU0sSUFBSSxJQUFJLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLElBQUksTUFBTSxFQUFFLE1BQU0sR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUM7O0NBRXArQixTQUFTLDJCQUEyQixDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVEsRUFBRSxPQUFPLGlCQUFpQixDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssUUFBUSxJQUFJLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUMs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QyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDOUQ7S0FDSSxLQUFLLENBQUMsTUFBTSxFQUFFO0FBQ2xCLEtBQUksSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFOztLQUVyQixJQUFJLENBQUMsVUFBVSxHQUFHO09BQ2hCLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDO0FBQzNDLE9BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQzFCLE9BQU0sS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQ2hDLE9BQU0sSUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakQsTUFBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztBQUVmLEtBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO0FBQ3BCLE9BQU0sSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUNsRCxZQUFXLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3RHOztBQUVBLEtBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFH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QUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztLQUM3RCxLQUFLLENBQUMsTUFBTSxFQUFFOztBQUVsQjtLQUNJLElBQUksQ0FBQyxVQUFVLEdBQUc7T0FDaEIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUM7QUFDM0MsT0FBTSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDMUIsT0FBTSxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQztPQUN0QixJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxLQUFLLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUMxSCxJQUFJLENBQUMsRUFBRTtBQUNsQixNQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQzs7QUFFZjtBQUNBLEtBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO0FBQ3BCLE9BQU0sSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNO0FBQ3pELFdBQVUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUs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cEIsSUFBSSxDQUFDLEtBQUssRUFBRTtBQUNoQjs7QUFFQSxHQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFO0FBQ1osS0FBSSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUM3QyxLQUFJLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDMUMsS0FBSSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztLQUM3QixJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM3QixLQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztLQUMxQixJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ2pCOztBQUVBLEdBQUUsTUFBTSxHQUFHO0tBQ1AsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUU7QUFDN0MsS0FBSSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDL0MsS0FBSSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO0tBQ3RDLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzdCLEtBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO0tBQzFCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQzNCLElBQUksQ0FBQyxNQUFNLEVB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QUFDLE9BQU8sQ0FBQztBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksT0FBTyxHQUFHLEdBQUc7QUFDakIsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQztBQUMxRSxRQUFRLE9BQU8sSUFBSSxDQUFDLE1BQU07QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksT0FBTyxPQUFPLENBQUMsR0FBRyxFQUFFLFNBQVMsR0FBRyxDQUFDLEVBQUU7QUFDdkMsUUFBUSxPQUFPLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQztBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksT0FBTyxJQUFJLENBQUMsR0FBRyxFQUFFO0FBQ3JCLFFBQVEsT0FBTyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksT0FBTyxLQUFLLENBQUMsR0FBRyxFQUFFO0FBQ3RCLFFBQVEsT0FBTyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQztBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksT0FBTyxLQUFLLENBQUMsR0FBRyxFQUFFO0FBQ3RCLFFBQVEsT0FBTyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQztBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksT0FBTyxLQUFLLENBQUMsR0FBRyxFQUFFO0FBQ3RCLFFBQVEsT0FBTyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FB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QUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDO0FBQzFELFFBQUEsSUFBSSxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGdCQUFnQixJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUM7S0FDN0Q7QUFDSDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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SSxDQUFDLE1BQU0sWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsNkJBQTZCLENBQUM7QUFDL0QsS0FBQSxLQUFLLENBQUMsQ0FBQyxDQUFVLEtBQUk7SUFDcEIsWUFBWSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBMkIsd0JBQUEsRUFBQSxDQUFDLENBQUUsQ0FBQSxDQUFDO0FBQ3RELElBQUEsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDakIsQ0FBQyxDQUFDOzsiLCJ4X2dvb2dsZV9pZ25vcmVMaXN0IjpbMCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwxOSwyMCwyMSwyMiwyMywyNCwyNSwyNiwyNywyOCwyOSwzMCwzMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0Miw0Myw0NCw0NSw0Niw0Nyw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw1OCw1OSw2MCw2MSw2Miw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3OV19
10519
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGQtc2NyaXB0cy5janMiLCJzb3VyY2VzIjpbIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2Rpc3QvdXRpbC9hY3Rpb24uanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9kaXN0L3V0aWwvc3RyaXAuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9kaXN0L3V0aWwvY2xlYXIuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9kaXN0L3V0aWwvZmlndXJlcy5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2Rpc3QvdXRpbC9zdHlsZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2Rpc3QvdXRpbC9saW5lcy5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2Rpc3QvdXRpbC93cmFwLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvZGlzdC91dGlsL2VudHJpZXNUb0Rpc3BsYXkuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9kaXN0L3V0aWwvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9kaXN0L2VsZW1lbnRzL3Byb21wdC5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2Rpc3QvZWxlbWVudHMvdGV4dC5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2Rpc3QvZWxlbWVudHMvc2VsZWN0LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvZGlzdC9lbGVtZW50cy90b2dnbGUuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9kaXN0L2RhdGVwYXJ0cy9kYXRlcGFydC5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2Rpc3QvZGF0ZXBhcnRzL21lcmlkaWVtLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvZGlzdC9kYXRlcGFydHMvZGF5LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvZGlzdC9kYXRlcGFydHMvaG91cnMuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9kaXN0L2RhdGVwYXJ0cy9taWxsaXNlY29uZHMuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9kaXN0L2RhdGVwYXJ0cy9taW51dGVzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvZGlzdC9kYXRlcGFydHMvbW9udGguanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9kaXN0L2RhdGVwYXJ0cy9zZWNvbmRzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvZGlzdC9kYXRlcGFydHMveWVhci5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2Rpc3QvZGF0ZXBhcnRzL2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvZGlzdC9lbGVtZW50cy9kYXRlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvZGlzdC9lbGVtZW50cy9udW1iZXIuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9kaXN0L2VsZW1lbnRzL211bHRpc2VsZWN0LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvZGlzdC9lbGVtZW50cy9hdXRvY29tcGxldGUuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9kaXN0L2VsZW1lbnRzL2F1dG9jb21wbGV0ZU11bHRpc2VsZWN0LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvZGlzdC9lbGVtZW50cy9jb25maXJtLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvZGlzdC9lbGVtZW50cy9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2Rpc3QvcHJvbXB0cy5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2Rpc3QvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9saWIvdXRpbC9hY3Rpb24uanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9saWIvdXRpbC9zdHJpcC5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2xpYi91dGlsL2NsZWFyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvbGliL3V0aWwvZmlndXJlcy5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2xpYi91dGlsL3N0eWxlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvbGliL3V0aWwvbGluZXMuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9saWIvdXRpbC93cmFwLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvbGliL3V0aWwvZW50cmllc1RvRGlzcGxheS5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2xpYi91dGlsL2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvbGliL2VsZW1lbnRzL3Byb21wdC5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2xpYi9lbGVtZW50cy90ZXh0LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvbGliL2VsZW1lbnRzL3NlbGVjdC5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2xpYi9lbGVtZW50cy90b2dnbGUuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9saWIvZGF0ZXBhcnRzL2RhdGVwYXJ0LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvbGliL2RhdGVwYXJ0cy9tZXJpZGllbS5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2xpYi9kYXRlcGFydHMvZGF5LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvbGliL2RhdGVwYXJ0cy9ob3Vycy5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2xpYi9kYXRlcGFydHMvbWlsbGlzZWNvbmRzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvbGliL2RhdGVwYXJ0cy9taW51dGVzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvbGliL2RhdGVwYXJ0cy9tb250aC5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2xpYi9kYXRlcGFydHMvc2Vjb25kcy5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2xpYi9kYXRlcGFydHMveWVhci5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2xpYi9kYXRlcGFydHMvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9saWIvZWxlbWVudHMvZGF0ZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2xpYi9lbGVtZW50cy9udW1iZXIuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9saWIvZWxlbWVudHMvbXVsdGlzZWxlY3QuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9saWIvZWxlbWVudHMvYXV0b2NvbXBsZXRlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvbGliL2VsZW1lbnRzL2F1dG9jb21wbGV0ZU11bHRpc2VsZWN0LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvbGliL2VsZW1lbnRzL2NvbmZpcm0uanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9saWIvZWxlbWVudHMvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9saWIvcHJvbXB0cy5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2xpYi9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL0BkZWNhZi10cy9sb2dnaW5nL2xpYi9lc20vY29uc3RhbnRzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3N0eWxlZC1zdHJpbmctYnVpbGRlci9saWIvZXNtL2NvbnN0YW50cy5qcyIsIi4uL25vZGVfbW9kdWxlcy9zdHlsZWQtc3RyaW5nLWJ1aWxkZXIvbGliL2VzbS9jb2xvcnMuanMiLCIuLi9ub2RlX21vZHVsZXMvc3R5bGVkLXN0cmluZy1idWlsZGVyL2xpYi9lc20vc3RyaW5ncy5qcyIsIi4uL25vZGVfbW9kdWxlcy9AZGVjYWYtdHMvbG9nZ2luZy9saWIvZXNtL2xvZ2dpbmcuanMiLCIuLi9zcmMvaW5wdXQvaW5wdXQudHMiLCIuLi9zcmMvY2xpL2NvbnN0YW50cy50cyIsIi4uL3NyYy91dGlscy90ZXh0LnRzIiwiLi4vc3JjL3V0aWxzL2NvbnN0YW50cy50cyIsIi4uL3NyYy93cml0ZXJzL1N0YW5kYXJkT3V0cHV0V3JpdGVyLnRzIiwiLi4vc3JjL3V0aWxzL3V0aWxzLnRzIiwiLi4vc3JjL3V0aWxzL2ZzLnRzIiwiLi4vc3JjL291dHB1dC9jb21tb24udHMiLCIuLi9zcmMvdXRpbHMvd2ViLnRzIiwiLi4vbm9kZV9tb2R1bGVzL3R5cGVkLW9iamVjdC1hY2N1bXVsYXRvci9saWIvZXNtL2FjY3VtdWxhdG9yLmpzIiwiLi4vc3JjL3V0aWxzL2Vudmlyb25tZW50LnRzIiwiLi4vc3JjL2NsaS9jb21tYW5kLnRzIiwiLi4vc3JjL3V0aWxzL2h0dHAudHMiLCIuLi9zcmMvY2xpL2NvbW1hbmRzL2J1aWxkLXNjcmlwdHMudHMiLCIuLi9zcmMvYmluL2J1aWxkLXNjcmlwdHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IChrZXksIGlzU2VsZWN0KSA9PiB7XG4gIGlmIChrZXkubWV0YSAmJiBrZXkubmFtZSAhPT0gJ2VzY2FwZScpIHJldHVybjtcblxuICBpZiAoa2V5LmN0cmwpIHtcbiAgICBpZiAoa2V5Lm5hbWUgPT09ICdhJykgcmV0dXJuICdmaXJzdCc7XG4gICAgaWYgKGtleS5uYW1lID09PSAnYycpIHJldHVybiAnYWJvcnQnO1xuICAgIGlmIChrZXkubmFtZSA9PT0gJ2QnKSByZXR1cm4gJ2Fib3J0JztcbiAgICBpZiAoa2V5Lm5hbWUgPT09ICdlJykgcmV0dXJuICdsYXN0JztcbiAgICBpZiAoa2V5Lm5hbWUgPT09ICdnJykgcmV0dXJuICdyZXNldCc7XG4gIH1cblxuICBpZiAoaXNTZWxlY3QpIHtcbiAgICBpZiAoa2V5Lm5hbWUgPT09ICdqJykgcmV0dXJuICdkb3duJztcbiAgICBpZiAoa2V5Lm5hbWUgPT09ICdrJykgcmV0dXJuICd1cCc7XG4gIH1cblxuICBpZiAoa2V5Lm5hbWUgPT09ICdyZXR1cm4nKSByZXR1cm4gJ3N1Ym1pdCc7XG4gIGlmIChrZXkubmFtZSA9PT0gJ2VudGVyJykgcmV0dXJuICdzdWJtaXQnOyAvLyBjdHJsICsgSlxuXG4gIGlmIChrZXkubmFtZSA9PT0gJ2JhY2tzcGFjZScpIHJldHVybiAnZGVsZXRlJztcbiAgaWYgKGtleS5uYW1lID09PSAnZGVsZXRlJykgcmV0dXJuICdkZWxldGVGb3J3YXJkJztcbiAgaWYgKGtleS5uYW1lID09PSAnYWJvcnQnKSByZXR1cm4gJ2Fib3J0JztcbiAgaWYgKGtleS5uYW1lID09PSAnZXNjYXBlJykgcmV0dXJuICdleGl0JztcbiAgaWYgKGtleS5uYW1lID09PSAndGFiJykgcmV0dXJuICduZXh0JztcbiAgaWYgKGtleS5uYW1lID09PSAncGFnZWRvd24nKSByZXR1cm4gJ25leHRQYWdlJztcbiAgaWYgKGtleS5uYW1lID09PSAncGFnZXVwJykgcmV0dXJuICdwcmV2UGFnZSc7IC8vIFRPRE8gY3JlYXRlIGhvbWUoKSBpbiBwcm9tcHQgdHlwZXMgKGUuZy4gVGV4dFByb21wdClcblxuICBpZiAoa2V5Lm5hbWUgPT09ICdob21lJykgcmV0dXJuICdob21lJzsgLy8gVE9ETyBjcmVhdGUgZW5kKCkgaW4gcHJvbXB0IHR5cGVzIChlLmcuIFRleHRQcm9tcHQpXG5cbiAgaWYgKGtleS5uYW1lID09PSAnZW5kJykgcmV0dXJuICdlbmQnO1xuICBpZiAoa2V5Lm5hbWUgPT09ICd1cCcpIHJldHVybiAndXAnO1xuICBpZiAoa2V5Lm5hbWUgPT09ICdkb3duJykgcmV0dXJuICdkb3duJztcbiAgaWYgKGtleS5uYW1lID09PSAncmlnaHQnKSByZXR1cm4gJ3JpZ2h0JztcbiAgaWYgKGtleS5uYW1lID09PSAnbGVmdCcpIHJldHVybiAnbGVmdCc7XG4gIHJldHVybiBmYWxzZTtcbn07IiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHN0ciA9PiB7XG4gIGNvbnN0IHBhdHRlcm4gPSBbJ1tcXFxcdTAwMUJcXFxcdTAwOUJdW1tcXFxcXSgpIzs/XSooPzooPzooPzooPzo7Wy1hLXpBLVpcXFxcZFxcXFwvIyYuOj0/JUB+X10rKSp8W2EtekEtWlxcXFxkXSsoPzo7Wy1hLXpBLVpcXFxcZFxcXFwvIyYuOj0/JUB+X10qKSopP1xcXFx1MDAwNyknLCAnKD86KD86XFxcXGR7MSw0fSg/OjtcXFxcZHswLDR9KSopP1tcXFxcZEEtUFJaY2YtbnRxcnk9Pjx+XSkpJ10uam9pbignfCcpO1xuICBjb25zdCBSR1ggPSBuZXcgUmVnRXhwKHBhdHRlcm4sICdnJyk7XG4gIHJldHVybiB0eXBlb2Ygc3RyID09PSAnc3RyaW5nJyA/IHN0ci5yZXBsYWNlKFJHWCwgJycpIDogc3RyO1xufTsiLCIndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyKG8sIGFsbG93QXJyYXlMaWtlKSB7IHZhciBpdCA9IHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdIHx8IG9bXCJAQGl0ZXJhdG9yXCJdOyBpZiAoIWl0KSB7IGlmIChBcnJheS5pc0FycmF5KG8pIHx8IChpdCA9IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvKSkgfHwgYWxsb3dBcnJheUxpa2UgJiYgbyAmJiB0eXBlb2Ygby5sZW5ndGggPT09IFwibnVtYmVyXCIpIHsgaWYgKGl0KSBvID0gaXQ7IHZhciBpID0gMDsgdmFyIEYgPSBmdW5jdGlvbiBGKCkge307IHJldHVybiB7IHM6IEYsIG46IGZ1bmN0aW9uIG4oKSB7IGlmIChpID49IG8ubGVuZ3RoKSByZXR1cm4geyBkb25lOiB0cnVlIH07IHJldHVybiB7IGRvbmU6IGZhbHNlLCB2YWx1ZTogb1tpKytdIH07IH0sIGU6IGZ1bmN0aW9uIGUoX2UpIHsgdGhyb3cgX2U7IH0sIGY6IEYgfTsgfSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH0gdmFyIG5vcm1hbENvbXBsZXRpb24gPSB0cnVlLCBkaWRFcnIgPSBmYWxzZSwgZXJyOyByZXR1cm4geyBzOiBmdW5jdGlvbiBzKCkgeyBpdCA9IGl0LmNhbGwobyk7IH0sIG46IGZ1bmN0aW9uIG4oKSB7IHZhciBzdGVwID0gaXQubmV4dCgpOyBub3JtYWxDb21wbGV0aW9uID0gc3RlcC5kb25lOyByZXR1cm4gc3RlcDsgfSwgZTogZnVuY3Rpb24gZShfZTIpIHsgZGlkRXJyID0gdHJ1ZTsgZXJyID0gX2UyOyB9LCBmOiBmdW5jdGlvbiBmKCkgeyB0cnkgeyBpZiAoIW5vcm1hbENvbXBsZXRpb24gJiYgaXQucmV0dXJuICE9IG51bGwpIGl0LnJldHVybigpOyB9IGZpbmFsbHkgeyBpZiAoZGlkRXJyKSB0aHJvdyBlcnI7IH0gfSB9OyB9XG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHsgaWYgKCFvKSByZXR1cm47IGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTsgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTsgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7IGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikgeyBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSBhcnIyW2ldID0gYXJyW2ldOyByZXR1cm4gYXJyMjsgfVxuXG5jb25zdCBzdHJpcCA9IHJlcXVpcmUoJy4vc3RyaXAnKTtcblxuY29uc3QgX3JlcXVpcmUgPSByZXF1aXJlKCdzaXN0ZXJhbnNpJyksXG4gICAgICBlcmFzZSA9IF9yZXF1aXJlLmVyYXNlLFxuICAgICAgY3Vyc29yID0gX3JlcXVpcmUuY3Vyc29yO1xuXG5jb25zdCB3aWR0aCA9IHN0ciA9PiBbLi4uc3RyaXAoc3RyKV0ubGVuZ3RoO1xuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gcHJvbXB0XG4gKiBAcGFyYW0ge251bWJlcn0gcGVyTGluZVxuICovXG5cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAocHJvbXB0LCBwZXJMaW5lKSB7XG4gIGlmICghcGVyTGluZSkgcmV0dXJuIGVyYXNlLmxpbmUgKyBjdXJzb3IudG8oMCk7XG4gIGxldCByb3dzID0gMDtcbiAgY29uc3QgbGluZXMgPSBwcm9tcHQuc3BsaXQoL1xccj9cXG4vKTtcblxuICB2YXIgX2l0ZXJhdG9yID0gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIobGluZXMpLFxuICAgICAgX3N0ZXA7XG5cbiAgdHJ5IHtcbiAgICBmb3IgKF9pdGVyYXRvci5zKCk7ICEoX3N0ZXAgPSBfaXRlcmF0b3IubigpKS5kb25lOykge1xuICAgICAgbGV0IGxpbmUgPSBfc3RlcC52YWx1ZTtcbiAgICAgIHJvd3MgKz0gMSArIE1hdGguZmxvb3IoTWF0aC5tYXgod2lkdGgobGluZSkgLSAxLCAwKSAvIHBlckxpbmUpO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgX2l0ZXJhdG9yLmUoZXJyKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBfaXRlcmF0b3IuZigpO1xuICB9XG5cbiAgcmV0dXJuIGVyYXNlLmxpbmVzKHJvd3MpO1xufTsiLCIndXNlIHN0cmljdCc7XG5cbmNvbnN0IG1haW4gPSB7XG4gIGFycm93VXA6ICfihpEnLFxuICBhcnJvd0Rvd246ICfihpMnLFxuICBhcnJvd0xlZnQ6ICfihpAnLFxuICBhcnJvd1JpZ2h0OiAn4oaSJyxcbiAgcmFkaW9PbjogJ+KXiScsXG4gIHJhZGlvT2ZmOiAn4pevJyxcbiAgdGljazogJ+KclCcsXG4gIGNyb3NzOiAn4pyWJyxcbiAgZWxsaXBzaXM6ICfigKYnLFxuICBwb2ludGVyU21hbGw6ICfigLonLFxuICBsaW5lOiAn4pSAJyxcbiAgcG9pbnRlcjogJ+Kdrydcbn07XG5jb25zdCB3aW4gPSB7XG4gIGFycm93VXA6IG1haW4uYXJyb3dVcCxcbiAgYXJyb3dEb3duOiBtYWluLmFycm93RG93bixcbiAgYXJyb3dMZWZ0OiBtYWluLmFycm93TGVmdCxcbiAgYXJyb3dSaWdodDogbWFpbi5hcnJvd1JpZ2h0LFxuICByYWRpb09uOiAnKCopJyxcbiAgcmFkaW9PZmY6ICcoICknLFxuICB0aWNrOiAn4oiaJyxcbiAgY3Jvc3M6ICfDlycsXG4gIGVsbGlwc2lzOiAnLi4uJyxcbiAgcG9pbnRlclNtYWxsOiAnwrsnLFxuICBsaW5lOiAn4pSAJyxcbiAgcG9pbnRlcjogJz4nXG59O1xuY29uc3QgZmlndXJlcyA9IHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicgPyB3aW4gOiBtYWluO1xubW9kdWxlLmV4cG9ydHMgPSBmaWd1cmVzOyIsIid1c2Ugc3RyaWN0JztcblxuY29uc3QgYyA9IHJlcXVpcmUoJ2tsZXVyJyk7XG5cbmNvbnN0IGZpZ3VyZXMgPSByZXF1aXJlKCcuL2ZpZ3VyZXMnKTsgLy8gcmVuZGVyaW5nIHVzZXIgaW5wdXQuXG5cblxuY29uc3Qgc3R5bGVzID0gT2JqZWN0LmZyZWV6ZSh7XG4gIHBhc3N3b3JkOiB7XG4gICAgc2NhbGU6IDEsXG4gICAgcmVuZGVyOiBpbnB1dCA9PiAnKicucmVwZWF0KGlucHV0Lmxlbmd0aClcbiAgfSxcbiAgZW1vamk6IHtcbiAgICBzY2FsZTogMixcbiAgICByZW5kZXI6IGlucHV0ID0+ICfwn5iDJy5yZXBlYXQoaW5wdXQubGVuZ3RoKVxuICB9LFxuICBpbnZpc2libGU6IHtcbiAgICBzY2FsZTogMCxcbiAgICByZW5kZXI6IGlucHV0ID0+ICcnXG4gIH0sXG4gIGRlZmF1bHQ6IHtcbiAgICBzY2FsZTogMSxcbiAgICByZW5kZXI6IGlucHV0ID0+IGAke2lucHV0fWBcbiAgfVxufSk7XG5cbmNvbnN0IHJlbmRlciA9IHR5cGUgPT4gc3R5bGVzW3R5cGVdIHx8IHN0eWxlcy5kZWZhdWx0OyAvLyBpY29uIHRvIHNpZ25hbGl6ZSBhIHByb21wdC5cblxuXG5jb25zdCBzeW1ib2xzID0gT2JqZWN0LmZyZWV6ZSh7XG4gIGFib3J0ZWQ6IGMucmVkKGZpZ3VyZXMuY3Jvc3MpLFxuICBkb25lOiBjLmdyZWVuKGZpZ3VyZXMudGljayksXG4gIGV4aXRlZDogYy55ZWxsb3coZmlndXJlcy5jcm9zcyksXG4gIGRlZmF1bHQ6IGMuY3lhbignPycpXG59KTtcblxuY29uc3Qgc3ltYm9sID0gKGRvbmUsIGFib3J0ZWQsIGV4aXRlZCkgPT4gYWJvcnRlZCA/IHN5bWJvbHMuYWJvcnRlZCA6IGV4aXRlZCA/IHN5bWJvbHMuZXhpdGVkIDogZG9uZSA/IHN5bWJvbHMuZG9uZSA6IHN5bWJvbHMuZGVmYXVsdDsgLy8gYmV0d2VlbiB0aGUgcXVlc3Rpb24gYW5kIHRoZSB1c2VyJ3MgaW5wdXQuXG5cblxuY29uc3QgZGVsaW1pdGVyID0gY29tcGxldGluZyA9PiBjLmdyYXkoY29tcGxldGluZyA/IGZpZ3VyZXMuZWxsaXBzaXMgOiBmaWd1cmVzLnBvaW50ZXJTbWFsbCk7XG5cbmNvbnN0IGl0ZW0gPSAoZXhwYW5kYWJsZSwgZXhwYW5kZWQpID0+IGMuZ3JheShleHBhbmRhYmxlID8gZXhwYW5kZWQgPyBmaWd1cmVzLnBvaW50ZXJTbWFsbCA6ICcrJyA6IGZpZ3VyZXMubGluZSk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzdHlsZXMsXG4gIHJlbmRlcixcbiAgc3ltYm9scyxcbiAgc3ltYm9sLFxuICBkZWxpbWl0ZXIsXG4gIGl0ZW1cbn07IiwiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBzdHJpcCA9IHJlcXVpcmUoJy4vc3RyaXAnKTtcbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IG1zZ1xuICogQHBhcmFtIHtudW1iZXJ9IHBlckxpbmVcbiAqL1xuXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG1zZywgcGVyTGluZSkge1xuICBsZXQgbGluZXMgPSBTdHJpbmcoc3RyaXAobXNnKSB8fCAnJykuc3BsaXQoL1xccj9cXG4vKTtcbiAgaWYgKCFwZXJMaW5lKSByZXR1cm4gbGluZXMubGVuZ3RoO1xuICByZXR1cm4gbGluZXMubWFwKGwgPT4gTWF0aC5jZWlsKGwubGVuZ3RoIC8gcGVyTGluZSkpLnJlZHVjZSgoYSwgYikgPT4gYSArIGIpO1xufTsiLCIndXNlIHN0cmljdCc7XG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBtc2cgVGhlIG1lc3NhZ2UgdG8gd3JhcFxuICogQHBhcmFtIHtvYmplY3R9IG9wdHNcbiAqIEBwYXJhbSB7bnVtYmVyfHN0cmluZ30gW29wdHMubWFyZ2luXSBMZWZ0IG1hcmdpblxuICogQHBhcmFtIHtudW1iZXJ9IG9wdHMud2lkdGggTWF4aW11bSBjaGFyYWN0ZXJzIHBlciBsaW5lIGluY2x1ZGluZyB0aGUgbWFyZ2luXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSAobXNnLCBvcHRzID0ge30pID0+IHtcbiAgY29uc3QgdGFiID0gTnVtYmVyLmlzU2FmZUludGVnZXIocGFyc2VJbnQob3B0cy5tYXJnaW4pKSA/IG5ldyBBcnJheShwYXJzZUludChvcHRzLm1hcmdpbikpLmZpbGwoJyAnKS5qb2luKCcnKSA6IG9wdHMubWFyZ2luIHx8ICcnO1xuICBjb25zdCB3aWR0aCA9IG9wdHMud2lkdGg7XG4gIHJldHVybiAobXNnIHx8ICcnKS5zcGxpdCgvXFxyP1xcbi9nKS5tYXAobGluZSA9PiBsaW5lLnNwbGl0KC9cXHMrL2cpLnJlZHVjZSgoYXJyLCB3KSA9PiB7XG4gICAgaWYgKHcubGVuZ3RoICsgdGFiLmxlbmd0aCA+PSB3aWR0aCB8fCBhcnJbYXJyLmxlbmd0aCAtIDFdLmxlbmd0aCArIHcubGVuZ3RoICsgMSA8IHdpZHRoKSBhcnJbYXJyLmxlbmd0aCAtIDFdICs9IGAgJHt3fWA7ZWxzZSBhcnIucHVzaChgJHt0YWJ9JHt3fWApO1xuICAgIHJldHVybiBhcnI7XG4gIH0sIFt0YWJdKS5qb2luKCdcXG4nKSkuam9pbignXFxuJyk7XG59OyIsIid1c2Ugc3RyaWN0Jztcbi8qKlxuICogRGV0ZXJtaW5lIHdoYXQgZW50cmllcyBzaG91bGQgYmUgZGlzcGxheWVkIG9uIHRoZSBzY3JlZW4sIGJhc2VkIG9uIHRoZVxuICogY3VycmVudGx5IHNlbGVjdGVkIGluZGV4IGFuZCB0aGUgbWF4aW11bSB2aXNpYmxlLiBVc2VkIGluIGxpc3QtYmFzZWRcbiAqIHByb21wdHMgbGlrZSBgc2VsZWN0YCBhbmQgYG11bHRpc2VsZWN0YC5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gY3Vyc29yIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgZW50cnlcbiAqIEBwYXJhbSB7bnVtYmVyfSB0b3RhbCB0aGUgdG90YWwgZW50cmllcyBhdmFpbGFibGUgdG8gZGlzcGxheVxuICogQHBhcmFtIHtudW1iZXJ9IFttYXhWaXNpYmxlXSB0aGUgbnVtYmVyIG9mIGVudHJpZXMgdGhhdCBjYW4gYmUgZGlzcGxheWVkXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSAoY3Vyc29yLCB0b3RhbCwgbWF4VmlzaWJsZSkgPT4ge1xuICBtYXhWaXNpYmxlID0gbWF4VmlzaWJsZSB8fCB0b3RhbDtcbiAgbGV0IHN0YXJ0SW5kZXggPSBNYXRoLm1pbih0b3RhbCAtIG1heFZpc2libGUsIGN1cnNvciAtIE1hdGguZmxvb3IobWF4VmlzaWJsZSAvIDIpKTtcbiAgaWYgKHN0YXJ0SW5kZXggPCAwKSBzdGFydEluZGV4ID0gMDtcbiAgbGV0IGVuZEluZGV4ID0gTWF0aC5taW4oc3RhcnRJbmRleCArIG1heFZpc2libGUsIHRvdGFsKTtcbiAgcmV0dXJuIHtcbiAgICBzdGFydEluZGV4LFxuICAgIGVuZEluZGV4XG4gIH07XG59OyIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGFjdGlvbjogcmVxdWlyZSgnLi9hY3Rpb24nKSxcbiAgY2xlYXI6IHJlcXVpcmUoJy4vY2xlYXInKSxcbiAgc3R5bGU6IHJlcXVpcmUoJy4vc3R5bGUnKSxcbiAgc3RyaXA6IHJlcXVpcmUoJy4vc3RyaXAnKSxcbiAgZmlndXJlczogcmVxdWlyZSgnLi9maWd1cmVzJyksXG4gIGxpbmVzOiByZXF1aXJlKCcuL2xpbmVzJyksXG4gIHdyYXA6IHJlcXVpcmUoJy4vd3JhcCcpLFxuICBlbnRyaWVzVG9EaXNwbGF5OiByZXF1aXJlKCcuL2VudHJpZXNUb0Rpc3BsYXknKVxufTsiLCIndXNlIHN0cmljdCc7XG5cbmNvbnN0IHJlYWRsaW5lID0gcmVxdWlyZSgncmVhZGxpbmUnKTtcblxuY29uc3QgX3JlcXVpcmUgPSByZXF1aXJlKCcuLi91dGlsJyksXG4gICAgICBhY3Rpb24gPSBfcmVxdWlyZS5hY3Rpb247XG5cbmNvbnN0IEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50cycpO1xuXG5jb25zdCBfcmVxdWlyZTIgPSByZXF1aXJlKCdzaXN0ZXJhbnNpJyksXG4gICAgICBiZWVwID0gX3JlcXVpcmUyLmJlZXAsXG4gICAgICBjdXJzb3IgPSBfcmVxdWlyZTIuY3Vyc29yO1xuXG5jb25zdCBjb2xvciA9IHJlcXVpcmUoJ2tsZXVyJyk7XG4vKipcbiAqIEJhc2UgcHJvbXB0IHNrZWxldG9uXG4gKiBAcGFyYW0ge1N0cmVhbX0gW29wdHMuc3RkaW5dIFRoZSBSZWFkYWJsZSBzdHJlYW0gdG8gbGlzdGVuIHRvXG4gKiBAcGFyYW0ge1N0cmVhbX0gW29wdHMuc3Rkb3V0XSBUaGUgV3JpdGFibGUgc3RyZWFtIHRvIHdyaXRlIHJlYWRsaW5lIGRhdGEgdG9cbiAqL1xuXG5cbmNsYXNzIFByb21wdCBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG4gIGNvbnN0cnVjdG9yKG9wdHMgPSB7fSkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5maXJzdFJlbmRlciA9IHRydWU7XG4gICAgdGhpcy5pbiA9IG9wdHMuc3RkaW4gfHwgcHJvY2Vzcy5zdGRpbjtcbiAgICB0aGlzLm91dCA9IG9wdHMuc3Rkb3V0IHx8IHByb2Nlc3Muc3Rkb3V0O1xuXG4gICAgdGhpcy5vblJlbmRlciA9IChvcHRzLm9uUmVuZGVyIHx8ICgoKSA9PiB2b2lkIDApKS5iaW5kKHRoaXMpO1xuXG4gICAgY29uc3QgcmwgPSByZWFkbGluZS5jcmVhdGVJbnRlcmZhY2Uoe1xuICAgICAgaW5wdXQ6IHRoaXMuaW4sXG4gICAgICBlc2NhcGVDb2RlVGltZW91dDogNTBcbiAgICB9KTtcbiAgICByZWFkbGluZS5lbWl0S2V5cHJlc3NFdmVudHModGhpcy5pbiwgcmwpO1xuICAgIGlmICh0aGlzLmluLmlzVFRZKSB0aGlzLmluLnNldFJhd01vZGUodHJ1ZSk7XG4gICAgY29uc3QgaXNTZWxlY3QgPSBbJ1NlbGVjdFByb21wdCcsICdNdWx0aXNlbGVjdFByb21wdCddLmluZGV4T2YodGhpcy5jb25zdHJ1Y3Rvci5uYW1lKSA+IC0xO1xuXG4gICAgY29uc3Qga2V5cHJlc3MgPSAoc3RyLCBrZXkpID0+IHtcbiAgICAgIGxldCBhID0gYWN0aW9uKGtleSwgaXNTZWxlY3QpO1xuXG4gICAgICBpZiAoYSA9PT0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5fICYmIHRoaXMuXyhzdHIsIGtleSk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzW2FdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRoaXNbYV0oa2V5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuYmVsbCgpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLmNsb3NlID0gKCkgPT4ge1xuICAgICAgdGhpcy5vdXQud3JpdGUoY3Vyc29yLnNob3cpO1xuICAgICAgdGhpcy5pbi5yZW1vdmVMaXN0ZW5lcigna2V5cHJlc3MnLCBrZXlwcmVzcyk7XG4gICAgICBpZiAodGhpcy5pbi5pc1RUWSkgdGhpcy5pbi5zZXRSYXdNb2RlKGZhbHNlKTtcbiAgICAgIHJsLmNsb3NlKCk7XG4gICAgICB0aGlzLmVtaXQodGhpcy5hYm9ydGVkID8gJ2Fib3J0JyA6IHRoaXMuZXhpdGVkID8gJ2V4aXQnIDogJ3N1Ym1pdCcsIHRoaXMudmFsdWUpO1xuICAgICAgdGhpcy5jbG9zZWQgPSB0cnVlO1xuICAgIH07XG5cbiAgICB0aGlzLmluLm9uKCdrZXlwcmVzcycsIGtleXByZXNzKTtcbiAgfVxuXG4gIGZpcmUoKSB7XG4gICAgdGhpcy5lbWl0KCdzdGF0ZScsIHtcbiAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgYWJvcnRlZDogISF0aGlzLmFib3J0ZWQsXG4gICAgICBleGl0ZWQ6ICEhdGhpcy5leGl0ZWRcbiAgICB9KTtcbiAgfVxuXG4gIGJlbGwoKSB7XG4gICAgdGhpcy5vdXQud3JpdGUoYmVlcCk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgdGhpcy5vblJlbmRlcihjb2xvcik7XG4gICAgaWYgKHRoaXMuZmlyc3RSZW5kZXIpIHRoaXMuZmlyc3RSZW5kZXIgPSBmYWxzZTtcbiAgfVxuXG59XG5cbm1vZHVsZS5leHBvcnRzID0gUHJvbXB0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5mdW5jdGlvbiBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIGtleSwgYXJnKSB7IHRyeSB7IHZhciBpbmZvID0gZ2VuW2tleV0oYXJnKTsgdmFyIHZhbHVlID0gaW5mby52YWx1ZTsgfSBjYXRjaCAoZXJyb3IpIHsgcmVqZWN0KGVycm9yKTsgcmV0dXJuOyB9IGlmIChpbmZvLmRvbmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0gZWxzZSB7IFByb21pc2UucmVzb2x2ZSh2YWx1ZSkudGhlbihfbmV4dCwgX3Rocm93KTsgfSB9XG5cbmZ1bmN0aW9uIF9hc3luY1RvR2VuZXJhdG9yKGZuKSB7IHJldHVybiBmdW5jdGlvbiAoKSB7IHZhciBzZWxmID0gdGhpcywgYXJncyA9IGFyZ3VtZW50czsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsgdmFyIGdlbiA9IGZuLmFwcGx5KHNlbGYsIGFyZ3MpOyBmdW5jdGlvbiBfbmV4dCh2YWx1ZSkgeyBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIFwibmV4dFwiLCB2YWx1ZSk7IH0gZnVuY3Rpb24gX3Rocm93KGVycikgeyBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIFwidGhyb3dcIiwgZXJyKTsgfSBfbmV4dCh1bmRlZmluZWQpOyB9KTsgfTsgfVxuXG5jb25zdCBjb2xvciA9IHJlcXVpcmUoJ2tsZXVyJyk7XG5cbmNvbnN0IFByb21wdCA9IHJlcXVpcmUoJy4vcHJvbXB0Jyk7XG5cbmNvbnN0IF9yZXF1aXJlID0gcmVxdWlyZSgnc2lzdGVyYW5zaScpLFxuICAgICAgZXJhc2UgPSBfcmVxdWlyZS5lcmFzZSxcbiAgICAgIGN1cnNvciA9IF9yZXF1aXJlLmN1cnNvcjtcblxuY29uc3QgX3JlcXVpcmUyID0gcmVxdWlyZSgnLi4vdXRpbCcpLFxuICAgICAgc3R5bGUgPSBfcmVxdWlyZTIuc3R5bGUsXG4gICAgICBjbGVhciA9IF9yZXF1aXJlMi5jbGVhcixcbiAgICAgIGxpbmVzID0gX3JlcXVpcmUyLmxpbmVzLFxuICAgICAgZmlndXJlcyA9IF9yZXF1aXJlMi5maWd1cmVzO1xuLyoqXG4gKiBUZXh0UHJvbXB0IEJhc2UgRWxlbWVudFxuICogQHBhcmFtIHtPYmplY3R9IG9wdHMgT3B0aW9uc1xuICogQHBhcmFtIHtTdHJpbmd9IG9wdHMubWVzc2FnZSBNZXNzYWdlXG4gKiBAcGFyYW0ge1N0cmluZ30gW29wdHMuc3R5bGU9J2RlZmF1bHQnXSBSZW5kZXIgc3R5bGVcbiAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5pbml0aWFsXSBEZWZhdWx0IHZhbHVlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0cy52YWxpZGF0ZV0gVmFsaWRhdGUgZnVuY3Rpb25cbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLmVycm9yXSBUaGUgaW52YWxpZCBlcnJvciBsYWJlbFxuICovXG5cblxuY2xhc3MgVGV4dFByb21wdCBleHRlbmRzIFByb21wdCB7XG4gIGNvbnN0cnVjdG9yKG9wdHMgPSB7fSkge1xuICAgIHN1cGVyKG9wdHMpO1xuICAgIHRoaXMudHJhbnNmb3JtID0gc3R5bGUucmVuZGVyKG9wdHMuc3R5bGUpO1xuICAgIHRoaXMuc2NhbGUgPSB0aGlzLnRyYW5zZm9ybS5zY2FsZTtcbiAgICB0aGlzLm1zZyA9IG9wdHMubWVzc2FnZTtcbiAgICB0aGlzLmluaXRpYWwgPSBvcHRzLmluaXRpYWwgfHwgYGA7XG5cbiAgICB0aGlzLnZhbGlkYXRvciA9IG9wdHMudmFsaWRhdGUgfHwgKCgpID0+IHRydWUpO1xuXG4gICAgdGhpcy52YWx1ZSA9IGBgO1xuICAgIHRoaXMuZXJyb3JNc2cgPSBvcHRzLmVycm9yIHx8IGBQbGVhc2UgRW50ZXIgQSBWYWxpZCBWYWx1ZWA7XG4gICAgdGhpcy5jdXJzb3IgPSBOdW1iZXIoISF0aGlzLmluaXRpYWwpO1xuICAgIHRoaXMuY3Vyc29yT2Zmc2V0ID0gMDtcbiAgICB0aGlzLmNsZWFyID0gY2xlYXIoYGAsIHRoaXMub3V0LmNvbHVtbnMpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBzZXQgdmFsdWUodikge1xuICAgIGlmICghdiAmJiB0aGlzLmluaXRpYWwpIHtcbiAgICAgIHRoaXMucGxhY2Vob2xkZXIgPSB0cnVlO1xuICAgICAgdGhpcy5yZW5kZXJlZCA9IGNvbG9yLmdyYXkodGhpcy50cmFuc2Zvcm0ucmVuZGVyKHRoaXMuaW5pdGlhbCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBsYWNlaG9sZGVyID0gZmFsc2U7XG4gICAgICB0aGlzLnJlbmRlcmVkID0gdGhpcy50cmFuc2Zvcm0ucmVuZGVyKHYpO1xuICAgIH1cblxuICAgIHRoaXMuX3ZhbHVlID0gdjtcbiAgICB0aGlzLmZpcmUoKTtcbiAgfVxuXG4gIGdldCB2YWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gIH1cblxuICByZXNldCgpIHtcbiAgICB0aGlzLnZhbHVlID0gYGA7XG4gICAgdGhpcy5jdXJzb3IgPSBOdW1iZXIoISF0aGlzLmluaXRpYWwpO1xuICAgIHRoaXMuY3Vyc29yT2Zmc2V0ID0gMDtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZXhpdCgpIHtcbiAgICB0aGlzLmFib3J0KCk7XG4gIH1cblxuICBhYm9ydCgpIHtcbiAgICB0aGlzLnZhbHVlID0gdGhpcy52YWx1ZSB8fCB0aGlzLmluaXRpYWw7XG4gICAgdGhpcy5kb25lID0gdGhpcy5hYm9ydGVkID0gdHJ1ZTtcbiAgICB0aGlzLmVycm9yID0gZmFsc2U7XG4gICAgdGhpcy5yZWQgPSBmYWxzZTtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICAgIHRoaXMub3V0LndyaXRlKCdcXG4nKTtcbiAgICB0aGlzLmNsb3NlKCk7XG4gIH1cblxuICB2YWxpZGF0ZSgpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgcmV0dXJuIF9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKiAoKSB7XG4gICAgICBsZXQgdmFsaWQgPSB5aWVsZCBfdGhpcy52YWxpZGF0b3IoX3RoaXMudmFsdWUpO1xuXG4gICAgICBpZiAodHlwZW9mIHZhbGlkID09PSBgc3RyaW5nYCkge1xuICAgICAgICBfdGhpcy5lcnJvck1zZyA9IHZhbGlkO1xuICAgICAgICB2YWxpZCA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBfdGhpcy5lcnJvciA9ICF2YWxpZDtcbiAgICB9KSgpO1xuICB9XG5cbiAgc3VibWl0KCkge1xuICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgcmV0dXJuIF9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKiAoKSB7XG4gICAgICBfdGhpczIudmFsdWUgPSBfdGhpczIudmFsdWUgfHwgX3RoaXMyLmluaXRpYWw7XG4gICAgICBfdGhpczIuY3Vyc29yT2Zmc2V0ID0gMDtcbiAgICAgIF90aGlzMi5jdXJzb3IgPSBfdGhpczIucmVuZGVyZWQubGVuZ3RoO1xuICAgICAgeWllbGQgX3RoaXMyLnZhbGlkYXRlKCk7XG5cbiAgICAgIGlmIChfdGhpczIuZXJyb3IpIHtcbiAgICAgICAgX3RoaXMyLnJlZCA9IHRydWU7XG5cbiAgICAgICAgX3RoaXMyLmZpcmUoKTtcblxuICAgICAgICBfdGhpczIucmVuZGVyKCk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBfdGhpczIuZG9uZSA9IHRydWU7XG4gICAgICBfdGhpczIuYWJvcnRlZCA9IGZhbHNlO1xuXG4gICAgICBfdGhpczIuZmlyZSgpO1xuXG4gICAgICBfdGhpczIucmVuZGVyKCk7XG5cbiAgICAgIF90aGlzMi5vdXQud3JpdGUoJ1xcbicpO1xuXG4gICAgICBfdGhpczIuY2xvc2UoKTtcbiAgICB9KSgpO1xuICB9XG5cbiAgbmV4dCgpIHtcbiAgICBpZiAoIXRoaXMucGxhY2Vob2xkZXIpIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgICB0aGlzLnZhbHVlID0gdGhpcy5pbml0aWFsO1xuICAgIHRoaXMuY3Vyc29yID0gdGhpcy5yZW5kZXJlZC5sZW5ndGg7XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIG1vdmVDdXJzb3Iobikge1xuICAgIGlmICh0aGlzLnBsYWNlaG9sZGVyKSByZXR1cm47XG4gICAgdGhpcy5jdXJzb3IgPSB0aGlzLmN1cnNvciArIG47XG4gICAgdGhpcy5jdXJzb3JPZmZzZXQgKz0gbjtcbiAgfVxuXG4gIF8oYywga2V5KSB7XG4gICAgbGV0IHMxID0gdGhpcy52YWx1ZS5zbGljZSgwLCB0aGlzLmN1cnNvcik7XG4gICAgbGV0IHMyID0gdGhpcy52YWx1ZS5zbGljZSh0aGlzLmN1cnNvcik7XG4gICAgdGhpcy52YWx1ZSA9IGAke3MxfSR7Y30ke3MyfWA7XG4gICAgdGhpcy5yZWQgPSBmYWxzZTtcbiAgICB0aGlzLmN1cnNvciA9IHRoaXMucGxhY2Vob2xkZXIgPyAwIDogczEubGVuZ3RoICsgMTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZGVsZXRlKCkge1xuICAgIGlmICh0aGlzLmlzQ3Vyc29yQXRTdGFydCgpKSByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgbGV0IHMxID0gdGhpcy52YWx1ZS5zbGljZSgwLCB0aGlzLmN1cnNvciAtIDEpO1xuICAgIGxldCBzMiA9IHRoaXMudmFsdWUuc2xpY2UodGhpcy5jdXJzb3IpO1xuICAgIHRoaXMudmFsdWUgPSBgJHtzMX0ke3MyfWA7XG4gICAgdGhpcy5yZWQgPSBmYWxzZTtcblxuICAgIGlmICh0aGlzLmlzQ3Vyc29yQXRTdGFydCgpKSB7XG4gICAgICB0aGlzLmN1cnNvck9mZnNldCA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY3Vyc29yT2Zmc2V0Kys7XG4gICAgICB0aGlzLm1vdmVDdXJzb3IoLTEpO1xuICAgIH1cblxuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBkZWxldGVGb3J3YXJkKCkge1xuICAgIGlmICh0aGlzLmN1cnNvciAqIHRoaXMuc2NhbGUgPj0gdGhpcy5yZW5kZXJlZC5sZW5ndGggfHwgdGhpcy5wbGFjZWhvbGRlcikgcmV0dXJuIHRoaXMuYmVsbCgpO1xuICAgIGxldCBzMSA9IHRoaXMudmFsdWUuc2xpY2UoMCwgdGhpcy5jdXJzb3IpO1xuICAgIGxldCBzMiA9IHRoaXMudmFsdWUuc2xpY2UodGhpcy5jdXJzb3IgKyAxKTtcbiAgICB0aGlzLnZhbHVlID0gYCR7czF9JHtzMn1gO1xuICAgIHRoaXMucmVkID0gZmFsc2U7XG5cbiAgICBpZiAodGhpcy5pc0N1cnNvckF0RW5kKCkpIHtcbiAgICAgIHRoaXMuY3Vyc29yT2Zmc2V0ID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jdXJzb3JPZmZzZXQrKztcbiAgICB9XG5cbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZmlyc3QoKSB7XG4gICAgdGhpcy5jdXJzb3IgPSAwO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBsYXN0KCkge1xuICAgIHRoaXMuY3Vyc29yID0gdGhpcy52YWx1ZS5sZW5ndGg7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIGxlZnQoKSB7XG4gICAgaWYgKHRoaXMuY3Vyc29yIDw9IDAgfHwgdGhpcy5wbGFjZWhvbGRlcikgcmV0dXJuIHRoaXMuYmVsbCgpO1xuICAgIHRoaXMubW92ZUN1cnNvcigtMSk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHJpZ2h0KCkge1xuICAgIGlmICh0aGlzLmN1cnNvciAqIHRoaXMuc2NhbGUgPj0gdGhpcy5yZW5kZXJlZC5sZW5ndGggfHwgdGhpcy5wbGFjZWhvbGRlcikgcmV0dXJuIHRoaXMuYmVsbCgpO1xuICAgIHRoaXMubW92ZUN1cnNvcigxKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgaXNDdXJzb3JBdFN0YXJ0KCkge1xuICAgIHJldHVybiB0aGlzLmN1cnNvciA9PT0gMCB8fCB0aGlzLnBsYWNlaG9sZGVyICYmIHRoaXMuY3Vyc29yID09PSAxO1xuICB9XG5cbiAgaXNDdXJzb3JBdEVuZCgpIHtcbiAgICByZXR1cm4gdGhpcy5jdXJzb3IgPT09IHRoaXMucmVuZGVyZWQubGVuZ3RoIHx8IHRoaXMucGxhY2Vob2xkZXIgJiYgdGhpcy5jdXJzb3IgPT09IHRoaXMucmVuZGVyZWQubGVuZ3RoICsgMTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBpZiAodGhpcy5jbG9zZWQpIHJldHVybjtcblxuICAgIGlmICghdGhpcy5maXJzdFJlbmRlcikge1xuICAgICAgaWYgKHRoaXMub3V0cHV0RXJyb3IpIHRoaXMub3V0LndyaXRlKGN1cnNvci5kb3duKGxpbmVzKHRoaXMub3V0cHV0RXJyb3IsIHRoaXMub3V0LmNvbHVtbnMpIC0gMSkgKyBjbGVhcih0aGlzLm91dHB1dEVycm9yLCB0aGlzLm91dC5jb2x1bW5zKSk7XG4gICAgICB0aGlzLm91dC53cml0ZShjbGVhcih0aGlzLm91dHB1dFRleHQsIHRoaXMub3V0LmNvbHVtbnMpKTtcbiAgICB9XG5cbiAgICBzdXBlci5yZW5kZXIoKTtcbiAgICB0aGlzLm91dHB1dEVycm9yID0gJyc7XG4gICAgdGhpcy5vdXRwdXRUZXh0ID0gW3N0eWxlLnN5bWJvbCh0aGlzLmRvbmUsIHRoaXMuYWJvcnRlZCksIGNvbG9yLmJvbGQodGhpcy5tc2cpLCBzdHlsZS5kZWxpbWl0ZXIodGhpcy5kb25lKSwgdGhpcy5yZWQgPyBjb2xvci5yZWQodGhpcy5yZW5kZXJlZCkgOiB0aGlzLnJlbmRlcmVkXS5qb2luKGAgYCk7XG5cbiAgICBpZiAodGhpcy5lcnJvcikge1xuICAgICAgdGhpcy5vdXRwdXRFcnJvciArPSB0aGlzLmVycm9yTXNnLnNwbGl0KGBcXG5gKS5yZWR1Y2UoKGEsIGwsIGkpID0+IGEgKyBgXFxuJHtpID8gJyAnIDogZmlndXJlcy5wb2ludGVyU21hbGx9ICR7Y29sb3IucmVkKCkuaXRhbGljKGwpfWAsIGBgKTtcbiAgICB9XG5cbiAgICB0aGlzLm91dC53cml0ZShlcmFzZS5saW5lICsgY3Vyc29yLnRvKDApICsgdGhpcy5vdXRwdXRUZXh0ICsgY3Vyc29yLnNhdmUgKyB0aGlzLm91dHB1dEVycm9yICsgY3Vyc29yLnJlc3RvcmUgKyBjdXJzb3IubW92ZSh0aGlzLmN1cnNvck9mZnNldCwgMCkpO1xuICB9XG5cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBUZXh0UHJvbXB0OyIsIid1c2Ugc3RyaWN0JztcblxuY29uc3QgY29sb3IgPSByZXF1aXJlKCdrbGV1cicpO1xuXG5jb25zdCBQcm9tcHQgPSByZXF1aXJlKCcuL3Byb21wdCcpO1xuXG5jb25zdCBfcmVxdWlyZSA9IHJlcXVpcmUoJy4uL3V0aWwnKSxcbiAgICAgIHN0eWxlID0gX3JlcXVpcmUuc3R5bGUsXG4gICAgICBjbGVhciA9IF9yZXF1aXJlLmNsZWFyLFxuICAgICAgZmlndXJlcyA9IF9yZXF1aXJlLmZpZ3VyZXMsXG4gICAgICB3cmFwID0gX3JlcXVpcmUud3JhcCxcbiAgICAgIGVudHJpZXNUb0Rpc3BsYXkgPSBfcmVxdWlyZS5lbnRyaWVzVG9EaXNwbGF5O1xuXG5jb25zdCBfcmVxdWlyZTIgPSByZXF1aXJlKCdzaXN0ZXJhbnNpJyksXG4gICAgICBjdXJzb3IgPSBfcmVxdWlyZTIuY3Vyc29yO1xuLyoqXG4gKiBTZWxlY3RQcm9tcHQgQmFzZSBFbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyBPcHRpb25zXG4gKiBAcGFyYW0ge1N0cmluZ30gb3B0cy5tZXNzYWdlIE1lc3NhZ2VcbiAqIEBwYXJhbSB7QXJyYXl9IG9wdHMuY2hvaWNlcyBBcnJheSBvZiBjaG9pY2Ugb2JqZWN0c1xuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLmhpbnRdIEhpbnQgdG8gZGlzcGxheVxuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLmluaXRpYWxdIEluZGV4IG9mIGRlZmF1bHQgdmFsdWVcbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLm9wdGlvbnNQZXJQYWdlPTEwXSBNYXggb3B0aW9ucyB0byBkaXNwbGF5IGF0IG9uY2VcbiAqL1xuXG5cbmNsYXNzIFNlbGVjdFByb21wdCBleHRlbmRzIFByb21wdCB7XG4gIGNvbnN0cnVjdG9yKG9wdHMgPSB7fSkge1xuICAgIHN1cGVyKG9wdHMpO1xuICAgIHRoaXMubXNnID0gb3B0cy5tZXNzYWdlO1xuICAgIHRoaXMuaGludCA9IG9wdHMuaGludCB8fCAnLSBVc2UgYXJyb3cta2V5cy4gUmV0dXJuIHRvIHN1Ym1pdC4nO1xuICAgIHRoaXMud2FybiA9IG9wdHMud2FybiB8fCAnLSBUaGlzIG9wdGlvbiBpcyBkaXNhYmxlZCc7XG4gICAgdGhpcy5jdXJzb3IgPSBvcHRzLmluaXRpYWwgfHwgMDtcbiAgICB0aGlzLmNob2ljZXMgPSBvcHRzLmNob2ljZXMubWFwKChjaCwgaWR4KSA9PiB7XG4gICAgICBpZiAodHlwZW9mIGNoID09PSAnc3RyaW5nJykgY2ggPSB7XG4gICAgICAgIHRpdGxlOiBjaCxcbiAgICAgICAgdmFsdWU6IGlkeFxuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRpdGxlOiBjaCAmJiAoY2gudGl0bGUgfHwgY2gudmFsdWUgfHwgY2gpLFxuICAgICAgICB2YWx1ZTogY2ggJiYgKGNoLnZhbHVlID09PSB1bmRlZmluZWQgPyBpZHggOiBjaC52YWx1ZSksXG4gICAgICAgIGRlc2NyaXB0aW9uOiBjaCAmJiBjaC5kZXNjcmlwdGlvbixcbiAgICAgICAgc2VsZWN0ZWQ6IGNoICYmIGNoLnNlbGVjdGVkLFxuICAgICAgICBkaXNhYmxlZDogY2ggJiYgY2guZGlzYWJsZWRcbiAgICAgIH07XG4gICAgfSk7XG4gICAgdGhpcy5vcHRpb25zUGVyUGFnZSA9IG9wdHMub3B0aW9uc1BlclBhZ2UgfHwgMTA7XG4gICAgdGhpcy52YWx1ZSA9ICh0aGlzLmNob2ljZXNbdGhpcy5jdXJzb3JdIHx8IHt9KS52YWx1ZTtcbiAgICB0aGlzLmNsZWFyID0gY2xlYXIoJycsIHRoaXMub3V0LmNvbHVtbnMpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBtb3ZlQ3Vyc29yKG4pIHtcbiAgICB0aGlzLmN1cnNvciA9IG47XG4gICAgdGhpcy52YWx1ZSA9IHRoaXMuY2hvaWNlc1tuXS52YWx1ZTtcbiAgICB0aGlzLmZpcmUoKTtcbiAgfVxuXG4gIHJlc2V0KCkge1xuICAgIHRoaXMubW92ZUN1cnNvcigwKTtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZXhpdCgpIHtcbiAgICB0aGlzLmFib3J0KCk7XG4gIH1cblxuICBhYm9ydCgpIHtcbiAgICB0aGlzLmRvbmUgPSB0aGlzLmFib3J0ZWQgPSB0cnVlO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gICAgdGhpcy5vdXQud3JpdGUoJ1xcbicpO1xuICAgIHRoaXMuY2xvc2UoKTtcbiAgfVxuXG4gIHN1Ym1pdCgpIHtcbiAgICBpZiAoIXRoaXMuc2VsZWN0aW9uLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLmRvbmUgPSB0cnVlO1xuICAgICAgdGhpcy5hYm9ydGVkID0gZmFsc2U7XG4gICAgICB0aGlzLmZpcmUoKTtcbiAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgICB0aGlzLm91dC53cml0ZSgnXFxuJyk7XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfSBlbHNlIHRoaXMuYmVsbCgpO1xuICB9XG5cbiAgZmlyc3QoKSB7XG4gICAgdGhpcy5tb3ZlQ3Vyc29yKDApO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBsYXN0KCkge1xuICAgIHRoaXMubW92ZUN1cnNvcih0aGlzLmNob2ljZXMubGVuZ3RoIC0gMSk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHVwKCkge1xuICAgIGlmICh0aGlzLmN1cnNvciA9PT0gMCkge1xuICAgICAgdGhpcy5tb3ZlQ3Vyc29yKHRoaXMuY2hvaWNlcy5sZW5ndGggLSAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5tb3ZlQ3Vyc29yKHRoaXMuY3Vyc29yIC0gMSk7XG4gICAgfVxuXG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIGRvd24oKSB7XG4gICAgaWYgKHRoaXMuY3Vyc29yID09PSB0aGlzLmNob2ljZXMubGVuZ3RoIC0gMSkge1xuICAgICAgdGhpcy5tb3ZlQ3Vyc29yKDApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm1vdmVDdXJzb3IodGhpcy5jdXJzb3IgKyAxKTtcbiAgICB9XG5cbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgbmV4dCgpIHtcbiAgICB0aGlzLm1vdmVDdXJzb3IoKHRoaXMuY3Vyc29yICsgMSkgJSB0aGlzLmNob2ljZXMubGVuZ3RoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgXyhjLCBrZXkpIHtcbiAgICBpZiAoYyA9PT0gJyAnKSByZXR1cm4gdGhpcy5zdWJtaXQoKTtcbiAgfVxuXG4gIGdldCBzZWxlY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuY2hvaWNlc1t0aGlzLmN1cnNvcl07XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgaWYgKHRoaXMuY2xvc2VkKSByZXR1cm47XG4gICAgaWYgKHRoaXMuZmlyc3RSZW5kZXIpIHRoaXMub3V0LndyaXRlKGN1cnNvci5oaWRlKTtlbHNlIHRoaXMub3V0LndyaXRlKGNsZWFyKHRoaXMub3V0cHV0VGV4dCwgdGhpcy5vdXQuY29sdW1ucykpO1xuICAgIHN1cGVyLnJlbmRlcigpO1xuXG4gICAgbGV0IF9lbnRyaWVzVG9EaXNwbGF5ID0gZW50cmllc1RvRGlzcGxheSh0aGlzLmN1cnNvciwgdGhpcy5jaG9pY2VzLmxlbmd0aCwgdGhpcy5vcHRpb25zUGVyUGFnZSksXG4gICAgICAgIHN0YXJ0SW5kZXggPSBfZW50cmllc1RvRGlzcGxheS5zdGFydEluZGV4LFxuICAgICAgICBlbmRJbmRleCA9IF9lbnRyaWVzVG9EaXNwbGF5LmVuZEluZGV4OyAvLyBQcmludCBwcm9tcHRcblxuXG4gICAgdGhpcy5vdXRwdXRUZXh0ID0gW3N0eWxlLnN5bWJvbCh0aGlzLmRvbmUsIHRoaXMuYWJvcnRlZCksIGNvbG9yLmJvbGQodGhpcy5tc2cpLCBzdHlsZS5kZWxpbWl0ZXIoZmFsc2UpLCB0aGlzLmRvbmUgPyB0aGlzLnNlbGVjdGlvbi50aXRsZSA6IHRoaXMuc2VsZWN0aW9uLmRpc2FibGVkID8gY29sb3IueWVsbG93KHRoaXMud2FybikgOiBjb2xvci5ncmF5KHRoaXMuaGludCldLmpvaW4oJyAnKTsgLy8gUHJpbnQgY2hvaWNlc1xuXG4gICAgaWYgKCF0aGlzLmRvbmUpIHtcbiAgICAgIHRoaXMub3V0cHV0VGV4dCArPSAnXFxuJztcblxuICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0SW5kZXg7IGkgPCBlbmRJbmRleDsgaSsrKSB7XG4gICAgICAgIGxldCB0aXRsZSxcbiAgICAgICAgICAgIHByZWZpeCxcbiAgICAgICAgICAgIGRlc2MgPSAnJyxcbiAgICAgICAgICAgIHYgPSB0aGlzLmNob2ljZXNbaV07IC8vIERldGVybWluZSB3aGV0aGVyIHRvIGRpc3BsYXkgXCJtb3JlIGNob2ljZXNcIiBpbmRpY2F0b3JzXG5cbiAgICAgICAgaWYgKGkgPT09IHN0YXJ0SW5kZXggJiYgc3RhcnRJbmRleCA+IDApIHtcbiAgICAgICAgICBwcmVmaXggPSBmaWd1cmVzLmFycm93VXA7XG4gICAgICAgIH0gZWxzZSBpZiAoaSA9PT0gZW5kSW5kZXggLSAxICYmIGVuZEluZGV4IDwgdGhpcy5jaG9pY2VzLmxlbmd0aCkge1xuICAgICAgICAgIHByZWZpeCA9IGZpZ3VyZXMuYXJyb3dEb3duO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByZWZpeCA9ICcgJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2LmRpc2FibGVkKSB7XG4gICAgICAgICAgdGl0bGUgPSB0aGlzLmN1cnNvciA9PT0gaSA/IGNvbG9yLmdyYXkoKS51bmRlcmxpbmUodi50aXRsZSkgOiBjb2xvci5zdHJpa2V0aHJvdWdoKCkuZ3JheSh2LnRpdGxlKTtcbiAgICAgICAgICBwcmVmaXggPSAodGhpcy5jdXJzb3IgPT09IGkgPyBjb2xvci5ib2xkKCkuZ3JheShmaWd1cmVzLnBvaW50ZXIpICsgJyAnIDogJyAgJykgKyBwcmVmaXg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGl0bGUgPSB0aGlzLmN1cnNvciA9PT0gaSA/IGNvbG9yLmN5YW4oKS51bmRlcmxpbmUodi50aXRsZSkgOiB2LnRpdGxlO1xuICAgICAgICAgIHByZWZpeCA9ICh0aGlzLmN1cnNvciA9PT0gaSA/IGNvbG9yLmN5YW4oZmlndXJlcy5wb2ludGVyKSArICcgJyA6ICcgICcpICsgcHJlZml4O1xuXG4gICAgICAgICAgaWYgKHYuZGVzY3JpcHRpb24gJiYgdGhpcy5jdXJzb3IgPT09IGkpIHtcbiAgICAgICAgICAgIGRlc2MgPSBgIC0gJHt2LmRlc2NyaXB0aW9ufWA7XG5cbiAgICAgICAgICAgIGlmIChwcmVmaXgubGVuZ3RoICsgdGl0bGUubGVuZ3RoICsgZGVzYy5sZW5ndGggPj0gdGhpcy5vdXQuY29sdW1ucyB8fCB2LmRlc2NyaXB0aW9uLnNwbGl0KC9cXHI/XFxuLykubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICBkZXNjID0gJ1xcbicgKyB3cmFwKHYuZGVzY3JpcHRpb24sIHtcbiAgICAgICAgICAgICAgICBtYXJnaW46IDMsXG4gICAgICAgICAgICAgICAgd2lkdGg6IHRoaXMub3V0LmNvbHVtbnNcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5vdXRwdXRUZXh0ICs9IGAke3ByZWZpeH0gJHt0aXRsZX0ke2NvbG9yLmdyYXkoZGVzYyl9XFxuYDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLm91dC53cml0ZSh0aGlzLm91dHB1dFRleHQpO1xuICB9XG5cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBTZWxlY3RQcm9tcHQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbG9yID0gcmVxdWlyZSgna2xldXInKTtcblxuY29uc3QgUHJvbXB0ID0gcmVxdWlyZSgnLi9wcm9tcHQnKTtcblxuY29uc3QgX3JlcXVpcmUgPSByZXF1aXJlKCcuLi91dGlsJyksXG4gICAgICBzdHlsZSA9IF9yZXF1aXJlLnN0eWxlLFxuICAgICAgY2xlYXIgPSBfcmVxdWlyZS5jbGVhcjtcblxuY29uc3QgX3JlcXVpcmUyID0gcmVxdWlyZSgnc2lzdGVyYW5zaScpLFxuICAgICAgY3Vyc29yID0gX3JlcXVpcmUyLmN1cnNvcixcbiAgICAgIGVyYXNlID0gX3JlcXVpcmUyLmVyYXNlO1xuLyoqXG4gKiBUb2dnbGVQcm9tcHQgQmFzZSBFbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyBPcHRpb25zXG4gKiBAcGFyYW0ge1N0cmluZ30gb3B0cy5tZXNzYWdlIE1lc3NhZ2VcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdHMuaW5pdGlhbD1mYWxzZV0gRGVmYXVsdCB2YWx1ZVxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLmFjdGl2ZT0nbm8nXSBBY3RpdmUgbGFiZWxcbiAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5pbmFjdGl2ZT0nb2ZmJ10gSW5hY3RpdmUgbGFiZWxcbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICovXG5cblxuY2xhc3MgVG9nZ2xlUHJvbXB0IGV4dGVuZHMgUHJvbXB0IHtcbiAgY29uc3RydWN0b3Iob3B0cyA9IHt9KSB7XG4gICAgc3VwZXIob3B0cyk7XG4gICAgdGhpcy5tc2cgPSBvcHRzLm1lc3NhZ2U7XG4gICAgdGhpcy52YWx1ZSA9ICEhb3B0cy5pbml0aWFsO1xuICAgIHRoaXMuYWN0aXZlID0gb3B0cy5hY3RpdmUgfHwgJ29uJztcbiAgICB0aGlzLmluYWN0aXZlID0gb3B0cy5pbmFjdGl2ZSB8fCAnb2ZmJztcbiAgICB0aGlzLmluaXRpYWxWYWx1ZSA9IHRoaXMudmFsdWU7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHJlc2V0KCkge1xuICAgIHRoaXMudmFsdWUgPSB0aGlzLmluaXRpYWxWYWx1ZTtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZXhpdCgpIHtcbiAgICB0aGlzLmFib3J0KCk7XG4gIH1cblxuICBhYm9ydCgpIHtcbiAgICB0aGlzLmRvbmUgPSB0aGlzLmFib3J0ZWQgPSB0cnVlO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gICAgdGhpcy5vdXQud3JpdGUoJ1xcbicpO1xuICAgIHRoaXMuY2xvc2UoKTtcbiAgfVxuXG4gIHN1Ym1pdCgpIHtcbiAgICB0aGlzLmRvbmUgPSB0cnVlO1xuICAgIHRoaXMuYWJvcnRlZCA9IGZhbHNlO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gICAgdGhpcy5vdXQud3JpdGUoJ1xcbicpO1xuICAgIHRoaXMuY2xvc2UoKTtcbiAgfVxuXG4gIGRlYWN0aXZhdGUoKSB7XG4gICAgaWYgKHRoaXMudmFsdWUgPT09IGZhbHNlKSByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgdGhpcy52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBhY3RpdmF0ZSgpIHtcbiAgICBpZiAodGhpcy52YWx1ZSA9PT0gdHJ1ZSkgcmV0dXJuIHRoaXMuYmVsbCgpO1xuICAgIHRoaXMudmFsdWUgPSB0cnVlO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBkZWxldGUoKSB7XG4gICAgdGhpcy5kZWFjdGl2YXRlKCk7XG4gIH1cblxuICBsZWZ0KCkge1xuICAgIHRoaXMuZGVhY3RpdmF0ZSgpO1xuICB9XG5cbiAgcmlnaHQoKSB7XG4gICAgdGhpcy5hY3RpdmF0ZSgpO1xuICB9XG5cbiAgZG93bigpIHtcbiAgICB0aGlzLmRlYWN0aXZhdGUoKTtcbiAgfVxuXG4gIHVwKCkge1xuICAgIHRoaXMuYWN0aXZhdGUoKTtcbiAgfVxuXG4gIG5leHQoKSB7XG4gICAgdGhpcy52YWx1ZSA9ICF0aGlzLnZhbHVlO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBfKGMsIGtleSkge1xuICAgIGlmIChjID09PSAnICcpIHtcbiAgICAgIHRoaXMudmFsdWUgPSAhdGhpcy52YWx1ZTtcbiAgICB9IGVsc2UgaWYgKGMgPT09ICcxJykge1xuICAgICAgdGhpcy52YWx1ZSA9IHRydWU7XG4gICAgfSBlbHNlIGlmIChjID09PSAnMCcpIHtcbiAgICAgIHRoaXMudmFsdWUgPSBmYWxzZTtcbiAgICB9IGVsc2UgcmV0dXJuIHRoaXMuYmVsbCgpO1xuXG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBpZiAodGhpcy5jbG9zZWQpIHJldHVybjtcbiAgICBpZiAodGhpcy5maXJzdFJlbmRlcikgdGhpcy5vdXQud3JpdGUoY3Vyc29yLmhpZGUpO2Vsc2UgdGhpcy5vdXQud3JpdGUoY2xlYXIodGhpcy5vdXRwdXRUZXh0LCB0aGlzLm91dC5jb2x1bW5zKSk7XG4gICAgc3VwZXIucmVuZGVyKCk7XG4gICAgdGhpcy5vdXRwdXRUZXh0ID0gW3N0eWxlLnN5bWJvbCh0aGlzLmRvbmUsIHRoaXMuYWJvcnRlZCksIGNvbG9yLmJvbGQodGhpcy5tc2cpLCBzdHlsZS5kZWxpbWl0ZXIodGhpcy5kb25lKSwgdGhpcy52YWx1ZSA/IHRoaXMuaW5hY3RpdmUgOiBjb2xvci5jeWFuKCkudW5kZXJsaW5lKHRoaXMuaW5hY3RpdmUpLCBjb2xvci5ncmF5KCcvJyksIHRoaXMudmFsdWUgPyBjb2xvci5jeWFuKCkudW5kZXJsaW5lKHRoaXMuYWN0aXZlKSA6IHRoaXMuYWN0aXZlXS5qb2luKCcgJyk7XG4gICAgdGhpcy5vdXQud3JpdGUoZXJhc2UubGluZSArIGN1cnNvci50bygwKSArIHRoaXMub3V0cHV0VGV4dCk7XG4gIH1cblxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFRvZ2dsZVByb21wdDsiLCIndXNlIHN0cmljdCc7XG5cbmNsYXNzIERhdGVQYXJ0IHtcbiAgY29uc3RydWN0b3Ioe1xuICAgIHRva2VuLFxuICAgIGRhdGUsXG4gICAgcGFydHMsXG4gICAgbG9jYWxlc1xuICB9KSB7XG4gICAgdGhpcy50b2tlbiA9IHRva2VuO1xuICAgIHRoaXMuZGF0ZSA9IGRhdGUgfHwgbmV3IERhdGUoKTtcbiAgICB0aGlzLnBhcnRzID0gcGFydHMgfHwgW3RoaXNdO1xuICAgIHRoaXMubG9jYWxlcyA9IGxvY2FsZXMgfHwge307XG4gIH1cblxuICB1cCgpIHt9XG5cbiAgZG93bigpIHt9XG5cbiAgbmV4dCgpIHtcbiAgICBjb25zdCBjdXJyZW50SWR4ID0gdGhpcy5wYXJ0cy5pbmRleE9mKHRoaXMpO1xuICAgIHJldHVybiB0aGlzLnBhcnRzLmZpbmQoKHBhcnQsIGlkeCkgPT4gaWR4ID4gY3VycmVudElkeCAmJiBwYXJ0IGluc3RhbmNlb2YgRGF0ZVBhcnQpO1xuICB9XG5cbiAgc2V0VG8odmFsKSB7fVxuXG4gIHByZXYoKSB7XG4gICAgbGV0IHBhcnRzID0gW10uY29uY2F0KHRoaXMucGFydHMpLnJldmVyc2UoKTtcbiAgICBjb25zdCBjdXJyZW50SWR4ID0gcGFydHMuaW5kZXhPZih0aGlzKTtcbiAgICByZXR1cm4gcGFydHMuZmluZCgocGFydCwgaWR4KSA9PiBpZHggPiBjdXJyZW50SWR4ICYmIHBhcnQgaW5zdGFuY2VvZiBEYXRlUGFydCk7XG4gIH1cblxuICB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gU3RyaW5nKHRoaXMuZGF0ZSk7XG4gIH1cblxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IERhdGVQYXJ0OyIsIid1c2Ugc3RyaWN0JztcblxuY29uc3QgRGF0ZVBhcnQgPSByZXF1aXJlKCcuL2RhdGVwYXJ0Jyk7XG5cbmNsYXNzIE1lcmlkaWVtIGV4dGVuZHMgRGF0ZVBhcnQge1xuICBjb25zdHJ1Y3RvcihvcHRzID0ge30pIHtcbiAgICBzdXBlcihvcHRzKTtcbiAgfVxuXG4gIHVwKCkge1xuICAgIHRoaXMuZGF0ZS5zZXRIb3VycygodGhpcy5kYXRlLmdldEhvdXJzKCkgKyAxMikgJSAyNCk7XG4gIH1cblxuICBkb3duKCkge1xuICAgIHRoaXMudXAoKTtcbiAgfVxuXG4gIHRvU3RyaW5nKCkge1xuICAgIGxldCBtZXJpZGllbSA9IHRoaXMuZGF0ZS5nZXRIb3VycygpID4gMTIgPyAncG0nIDogJ2FtJztcbiAgICByZXR1cm4gL1xcQS8udGVzdCh0aGlzLnRva2VuKSA/IG1lcmlkaWVtLnRvVXBwZXJDYXNlKCkgOiBtZXJpZGllbTtcbiAgfVxuXG59XG5cbm1vZHVsZS5leHBvcnRzID0gTWVyaWRpZW07IiwiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBEYXRlUGFydCA9IHJlcXVpcmUoJy4vZGF0ZXBhcnQnKTtcblxuY29uc3QgcG9zID0gbiA9PiB7XG4gIG4gPSBuICUgMTA7XG4gIHJldHVybiBuID09PSAxID8gJ3N0JyA6IG4gPT09IDIgPyAnbmQnIDogbiA9PT0gMyA/ICdyZCcgOiAndGgnO1xufTtcblxuY2xhc3MgRGF5IGV4dGVuZHMgRGF0ZVBhcnQge1xuICBjb25zdHJ1Y3RvcihvcHRzID0ge30pIHtcbiAgICBzdXBlcihvcHRzKTtcbiAgfVxuXG4gIHVwKCkge1xuICAgIHRoaXMuZGF0ZS5zZXREYXRlKHRoaXMuZGF0ZS5nZXREYXRlKCkgKyAxKTtcbiAgfVxuXG4gIGRvd24oKSB7XG4gICAgdGhpcy5kYXRlLnNldERhdGUodGhpcy5kYXRlLmdldERhdGUoKSAtIDEpO1xuICB9XG5cbiAgc2V0VG8odmFsKSB7XG4gICAgdGhpcy5kYXRlLnNldERhdGUocGFyc2VJbnQodmFsLnN1YnN0cigtMikpKTtcbiAgfVxuXG4gIHRvU3RyaW5nKCkge1xuICAgIGxldCBkYXRlID0gdGhpcy5kYXRlLmdldERhdGUoKTtcbiAgICBsZXQgZGF5ID0gdGhpcy5kYXRlLmdldERheSgpO1xuICAgIHJldHVybiB0aGlzLnRva2VuID09PSAnREQnID8gU3RyaW5nKGRhdGUpLnBhZFN0YXJ0KDIsICcwJykgOiB0aGlzLnRva2VuID09PSAnRG8nID8gZGF0ZSArIHBvcyhkYXRlKSA6IHRoaXMudG9rZW4gPT09ICdkJyA/IGRheSArIDEgOiB0aGlzLnRva2VuID09PSAnZGRkJyA/IHRoaXMubG9jYWxlcy53ZWVrZGF5c1Nob3J0W2RheV0gOiB0aGlzLnRva2VuID09PSAnZGRkZCcgPyB0aGlzLmxvY2FsZXMud2Vla2RheXNbZGF5XSA6IGRhdGU7XG4gIH1cblxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IERheTsiLCIndXNlIHN0cmljdCc7XG5cbmNvbnN0IERhdGVQYXJ0ID0gcmVxdWlyZSgnLi9kYXRlcGFydCcpO1xuXG5jbGFzcyBIb3VycyBleHRlbmRzIERhdGVQYXJ0IHtcbiAgY29uc3RydWN0b3Iob3B0cyA9IHt9KSB7XG4gICAgc3VwZXIob3B0cyk7XG4gIH1cblxuICB1cCgpIHtcbiAgICB0aGlzLmRhdGUuc2V0SG91cnModGhpcy5kYXRlLmdldEhvdXJzKCkgKyAxKTtcbiAgfVxuXG4gIGRvd24oKSB7XG4gICAgdGhpcy5kYXRlLnNldEhvdXJzKHRoaXMuZGF0ZS5nZXRIb3VycygpIC0gMSk7XG4gIH1cblxuICBzZXRUbyh2YWwpIHtcbiAgICB0aGlzLmRhdGUuc2V0SG91cnMocGFyc2VJbnQodmFsLnN1YnN0cigtMikpKTtcbiAgfVxuXG4gIHRvU3RyaW5nKCkge1xuICAgIGxldCBob3VycyA9IHRoaXMuZGF0ZS5nZXRIb3VycygpO1xuICAgIGlmICgvaC8udGVzdCh0aGlzLnRva2VuKSkgaG91cnMgPSBob3VycyAlIDEyIHx8IDEyO1xuICAgIHJldHVybiB0aGlzLnRva2VuLmxlbmd0aCA+IDEgPyBTdHJpbmcoaG91cnMpLnBhZFN0YXJ0KDIsICcwJykgOiBob3VycztcbiAgfVxuXG59XG5cbm1vZHVsZS5leHBvcnRzID0gSG91cnM7IiwiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBEYXRlUGFydCA9IHJlcXVpcmUoJy4vZGF0ZXBhcnQnKTtcblxuY2xhc3MgTWlsbGlzZWNvbmRzIGV4dGVuZHMgRGF0ZVBhcnQge1xuICBjb25zdHJ1Y3RvcihvcHRzID0ge30pIHtcbiAgICBzdXBlcihvcHRzKTtcbiAgfVxuXG4gIHVwKCkge1xuICAgIHRoaXMuZGF0ZS5zZXRNaWxsaXNlY29uZHModGhpcy5kYXRlLmdldE1pbGxpc2Vjb25kcygpICsgMSk7XG4gIH1cblxuICBkb3duKCkge1xuICAgIHRoaXMuZGF0ZS5zZXRNaWxsaXNlY29uZHModGhpcy5kYXRlLmdldE1pbGxpc2Vjb25kcygpIC0gMSk7XG4gIH1cblxuICBzZXRUbyh2YWwpIHtcbiAgICB0aGlzLmRhdGUuc2V0TWlsbGlzZWNvbmRzKHBhcnNlSW50KHZhbC5zdWJzdHIoLXRoaXMudG9rZW4ubGVuZ3RoKSkpO1xuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIFN0cmluZyh0aGlzLmRhdGUuZ2V0TWlsbGlzZWNvbmRzKCkpLnBhZFN0YXJ0KDQsICcwJykuc3Vic3RyKDAsIHRoaXMudG9rZW4ubGVuZ3RoKTtcbiAgfVxuXG59XG5cbm1vZHVsZS5leHBvcnRzID0gTWlsbGlzZWNvbmRzOyIsIid1c2Ugc3RyaWN0JztcblxuY29uc3QgRGF0ZVBhcnQgPSByZXF1aXJlKCcuL2RhdGVwYXJ0Jyk7XG5cbmNsYXNzIE1pbnV0ZXMgZXh0ZW5kcyBEYXRlUGFydCB7XG4gIGNvbnN0cnVjdG9yKG9wdHMgPSB7fSkge1xuICAgIHN1cGVyKG9wdHMpO1xuICB9XG5cbiAgdXAoKSB7XG4gICAgdGhpcy5kYXRlLnNldE1pbnV0ZXModGhpcy5kYXRlLmdldE1pbnV0ZXMoKSArIDEpO1xuICB9XG5cbiAgZG93bigpIHtcbiAgICB0aGlzLmRhdGUuc2V0TWludXRlcyh0aGlzLmRhdGUuZ2V0TWludXRlcygpIC0gMSk7XG4gIH1cblxuICBzZXRUbyh2YWwpIHtcbiAgICB0aGlzLmRhdGUuc2V0TWludXRlcyhwYXJzZUludCh2YWwuc3Vic3RyKC0yKSkpO1xuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgbGV0IG0gPSB0aGlzLmRhdGUuZ2V0TWludXRlcygpO1xuICAgIHJldHVybiB0aGlzLnRva2VuLmxlbmd0aCA+IDEgPyBTdHJpbmcobSkucGFkU3RhcnQoMiwgJzAnKSA6IG07XG4gIH1cblxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IE1pbnV0ZXM7IiwiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBEYXRlUGFydCA9IHJlcXVpcmUoJy4vZGF0ZXBhcnQnKTtcblxuY2xhc3MgTW9udGggZXh0ZW5kcyBEYXRlUGFydCB7XG4gIGNvbnN0cnVjdG9yKG9wdHMgPSB7fSkge1xuICAgIHN1cGVyKG9wdHMpO1xuICB9XG5cbiAgdXAoKSB7XG4gICAgdGhpcy5kYXRlLnNldE1vbnRoKHRoaXMuZGF0ZS5nZXRNb250aCgpICsgMSk7XG4gIH1cblxuICBkb3duKCkge1xuICAgIHRoaXMuZGF0ZS5zZXRNb250aCh0aGlzLmRhdGUuZ2V0TW9udGgoKSAtIDEpO1xuICB9XG5cbiAgc2V0VG8odmFsKSB7XG4gICAgdmFsID0gcGFyc2VJbnQodmFsLnN1YnN0cigtMikpIC0gMTtcbiAgICB0aGlzLmRhdGUuc2V0TW9udGgodmFsIDwgMCA/IDAgOiB2YWwpO1xuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgbGV0IG1vbnRoID0gdGhpcy5kYXRlLmdldE1vbnRoKCk7XG4gICAgbGV0IHRsID0gdGhpcy50b2tlbi5sZW5ndGg7XG4gICAgcmV0dXJuIHRsID09PSAyID8gU3RyaW5nKG1vbnRoICsgMSkucGFkU3RhcnQoMiwgJzAnKSA6IHRsID09PSAzID8gdGhpcy5sb2NhbGVzLm1vbnRoc1Nob3J0W21vbnRoXSA6IHRsID09PSA0ID8gdGhpcy5sb2NhbGVzLm1vbnRoc1ttb250aF0gOiBTdHJpbmcobW9udGggKyAxKTtcbiAgfVxuXG59XG5cbm1vZHVsZS5leHBvcnRzID0gTW9udGg7IiwiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBEYXRlUGFydCA9IHJlcXVpcmUoJy4vZGF0ZXBhcnQnKTtcblxuY2xhc3MgU2Vjb25kcyBleHRlbmRzIERhdGVQYXJ0IHtcbiAgY29uc3RydWN0b3Iob3B0cyA9IHt9KSB7XG4gICAgc3VwZXIob3B0cyk7XG4gIH1cblxuICB1cCgpIHtcbiAgICB0aGlzLmRhdGUuc2V0U2Vjb25kcyh0aGlzLmRhdGUuZ2V0U2Vjb25kcygpICsgMSk7XG4gIH1cblxuICBkb3duKCkge1xuICAgIHRoaXMuZGF0ZS5zZXRTZWNvbmRzKHRoaXMuZGF0ZS5nZXRTZWNvbmRzKCkgLSAxKTtcbiAgfVxuXG4gIHNldFRvKHZhbCkge1xuICAgIHRoaXMuZGF0ZS5zZXRTZWNvbmRzKHBhcnNlSW50KHZhbC5zdWJzdHIoLTIpKSk7XG4gIH1cblxuICB0b1N0cmluZygpIHtcbiAgICBsZXQgcyA9IHRoaXMuZGF0ZS5nZXRTZWNvbmRzKCk7XG4gICAgcmV0dXJuIHRoaXMudG9rZW4ubGVuZ3RoID4gMSA/IFN0cmluZyhzKS5wYWRTdGFydCgyLCAnMCcpIDogcztcbiAgfVxuXG59XG5cbm1vZHVsZS5leHBvcnRzID0gU2Vjb25kczsiLCIndXNlIHN0cmljdCc7XG5cbmNvbnN0IERhdGVQYXJ0ID0gcmVxdWlyZSgnLi9kYXRlcGFydCcpO1xuXG5jbGFzcyBZZWFyIGV4dGVuZHMgRGF0ZVBhcnQge1xuICBjb25zdHJ1Y3RvcihvcHRzID0ge30pIHtcbiAgICBzdXBlcihvcHRzKTtcbiAgfVxuXG4gIHVwKCkge1xuICAgIHRoaXMuZGF0ZS5zZXRGdWxsWWVhcih0aGlzLmRhdGUuZ2V0RnVsbFllYXIoKSArIDEpO1xuICB9XG5cbiAgZG93bigpIHtcbiAgICB0aGlzLmRhdGUuc2V0RnVsbFllYXIodGhpcy5kYXRlLmdldEZ1bGxZZWFyKCkgLSAxKTtcbiAgfVxuXG4gIHNldFRvKHZhbCkge1xuICAgIHRoaXMuZGF0ZS5zZXRGdWxsWWVhcih2YWwuc3Vic3RyKC00KSk7XG4gIH1cblxuICB0b1N0cmluZygpIHtcbiAgICBsZXQgeWVhciA9IFN0cmluZyh0aGlzLmRhdGUuZ2V0RnVsbFllYXIoKSkucGFkU3RhcnQoNCwgJzAnKTtcbiAgICByZXR1cm4gdGhpcy50b2tlbi5sZW5ndGggPT09IDIgPyB5ZWFyLnN1YnN0cigtMikgOiB5ZWFyO1xuICB9XG5cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBZZWFyOyIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIERhdGVQYXJ0OiByZXF1aXJlKCcuL2RhdGVwYXJ0JyksXG4gIE1lcmlkaWVtOiByZXF1aXJlKCcuL21lcmlkaWVtJyksXG4gIERheTogcmVxdWlyZSgnLi9kYXknKSxcbiAgSG91cnM6IHJlcXVpcmUoJy4vaG91cnMnKSxcbiAgTWlsbGlzZWNvbmRzOiByZXF1aXJlKCcuL21pbGxpc2Vjb25kcycpLFxuICBNaW51dGVzOiByZXF1aXJlKCcuL21pbnV0ZXMnKSxcbiAgTW9udGg6IHJlcXVpcmUoJy4vbW9udGgnKSxcbiAgU2Vjb25kczogcmVxdWlyZSgnLi9zZWNvbmRzJyksXG4gIFllYXI6IHJlcXVpcmUoJy4veWVhcicpXG59OyIsIid1c2Ugc3RyaWN0JztcblxuZnVuY3Rpb24gYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBrZXksIGFyZykgeyB0cnkgeyB2YXIgaW5mbyA9IGdlbltrZXldKGFyZyk7IHZhciB2YWx1ZSA9IGluZm8udmFsdWU7IH0gY2F0Y2ggKGVycm9yKSB7IHJlamVjdChlcnJvcik7IHJldHVybjsgfSBpZiAoaW5mby5kb25lKSB7IHJlc29sdmUodmFsdWUpOyB9IGVsc2UgeyBQcm9taXNlLnJlc29sdmUodmFsdWUpLnRoZW4oX25leHQsIF90aHJvdyk7IH0gfVxuXG5mdW5jdGlvbiBfYXN5bmNUb0dlbmVyYXRvcihmbikgeyByZXR1cm4gZnVuY3Rpb24gKCkgeyB2YXIgc2VsZiA9IHRoaXMsIGFyZ3MgPSBhcmd1bWVudHM7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7IHZhciBnZW4gPSBmbi5hcHBseShzZWxmLCBhcmdzKTsgZnVuY3Rpb24gX25leHQodmFsdWUpIHsgYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBcIm5leHRcIiwgdmFsdWUpOyB9IGZ1bmN0aW9uIF90aHJvdyhlcnIpIHsgYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBcInRocm93XCIsIGVycik7IH0gX25leHQodW5kZWZpbmVkKTsgfSk7IH07IH1cblxuY29uc3QgY29sb3IgPSByZXF1aXJlKCdrbGV1cicpO1xuXG5jb25zdCBQcm9tcHQgPSByZXF1aXJlKCcuL3Byb21wdCcpO1xuXG5jb25zdCBfcmVxdWlyZSA9IHJlcXVpcmUoJy4uL3V0aWwnKSxcbiAgICAgIHN0eWxlID0gX3JlcXVpcmUuc3R5bGUsXG4gICAgICBjbGVhciA9IF9yZXF1aXJlLmNsZWFyLFxuICAgICAgZmlndXJlcyA9IF9yZXF1aXJlLmZpZ3VyZXM7XG5cbmNvbnN0IF9yZXF1aXJlMiA9IHJlcXVpcmUoJ3Npc3RlcmFuc2knKSxcbiAgICAgIGVyYXNlID0gX3JlcXVpcmUyLmVyYXNlLFxuICAgICAgY3Vyc29yID0gX3JlcXVpcmUyLmN1cnNvcjtcblxuY29uc3QgX3JlcXVpcmUzID0gcmVxdWlyZSgnLi4vZGF0ZXBhcnRzJyksXG4gICAgICBEYXRlUGFydCA9IF9yZXF1aXJlMy5EYXRlUGFydCxcbiAgICAgIE1lcmlkaWVtID0gX3JlcXVpcmUzLk1lcmlkaWVtLFxuICAgICAgRGF5ID0gX3JlcXVpcmUzLkRheSxcbiAgICAgIEhvdXJzID0gX3JlcXVpcmUzLkhvdXJzLFxuICAgICAgTWlsbGlzZWNvbmRzID0gX3JlcXVpcmUzLk1pbGxpc2Vjb25kcyxcbiAgICAgIE1pbnV0ZXMgPSBfcmVxdWlyZTMuTWludXRlcyxcbiAgICAgIE1vbnRoID0gX3JlcXVpcmUzLk1vbnRoLFxuICAgICAgU2Vjb25kcyA9IF9yZXF1aXJlMy5TZWNvbmRzLFxuICAgICAgWWVhciA9IF9yZXF1aXJlMy5ZZWFyO1xuXG5jb25zdCByZWdleCA9IC9cXFxcKC4pfFwiKCg/OlxcXFxbXCJcXFxcXXxbXlwiXSkrKVwifChEW0RvXT98ZHszLDR9fGQpfChNezEsNH0pfChZWSg/OllZKT8pfChbYUFdKXwoW0hoXXsxLDJ9KXwobXsxLDJ9KXwoc3sxLDJ9KXwoU3sxLDR9KXwuL2c7XG5jb25zdCByZWdleEdyb3VwcyA9IHtcbiAgMTogKHtcbiAgICB0b2tlblxuICB9KSA9PiB0b2tlbi5yZXBsYWNlKC9cXFxcKC4pL2csICckMScpLFxuICAyOiBvcHRzID0+IG5ldyBEYXkob3B0cyksXG4gIC8vIERheSAvLyBUT0RPXG4gIDM6IG9wdHMgPT4gbmV3IE1vbnRoKG9wdHMpLFxuICAvLyBNb250aFxuICA0OiBvcHRzID0+IG5ldyBZZWFyKG9wdHMpLFxuICAvLyBZZWFyXG4gIDU6IG9wdHMgPT4gbmV3IE1lcmlkaWVtKG9wdHMpLFxuICAvLyBBTS9QTSAvLyBUT0RPIChzcGVjaWFsKVxuICA2OiBvcHRzID0+IG5ldyBIb3VycyhvcHRzKSxcbiAgLy8gSG91cnNcbiAgNzogb3B0cyA9PiBuZXcgTWludXRlcyhvcHRzKSxcbiAgLy8gTWludXRlc1xuICA4OiBvcHRzID0+IG5ldyBTZWNvbmRzKG9wdHMpLFxuICAvLyBTZWNvbmRzXG4gIDk6IG9wdHMgPT4gbmV3IE1pbGxpc2Vjb25kcyhvcHRzKSAvLyBGcmFjdGlvbmFsIHNlY29uZHNcblxufTtcbmNvbnN0IGRmbHRMb2NhbGVzID0ge1xuICBtb250aHM6ICdKYW51YXJ5LEZlYnJ1YXJ5LE1hcmNoLEFwcmlsLE1heSxKdW5lLEp1bHksQXVndXN0LFNlcHRlbWJlcixPY3RvYmVyLE5vdmVtYmVyLERlY2VtYmVyJy5zcGxpdCgnLCcpLFxuICBtb250aHNTaG9ydDogJ0phbixGZWIsTWFyLEFwcixNYXksSnVuLEp1bCxBdWcsU2VwLE9jdCxOb3YsRGVjJy5zcGxpdCgnLCcpLFxuICB3ZWVrZGF5czogJ1N1bmRheSxNb25kYXksVHVlc2RheSxXZWRuZXNkYXksVGh1cnNkYXksRnJpZGF5LFNhdHVyZGF5Jy5zcGxpdCgnLCcpLFxuICB3ZWVrZGF5c1Nob3J0OiAnU3VuLE1vbixUdWUsV2VkLFRodSxGcmksU2F0Jy5zcGxpdCgnLCcpXG59O1xuLyoqXG4gKiBEYXRlUHJvbXB0IEJhc2UgRWxlbWVudFxuICogQHBhcmFtIHtPYmplY3R9IG9wdHMgT3B0aW9uc1xuICogQHBhcmFtIHtTdHJpbmd9IG9wdHMubWVzc2FnZSBNZXNzYWdlXG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMuaW5pdGlhbF0gSW5kZXggb2YgZGVmYXVsdCB2YWx1ZVxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLm1hc2tdIFRoZSBmb3JtYXQgbWFza1xuICogQHBhcmFtIHtvYmplY3R9IFtvcHRzLmxvY2FsZXNdIFRoZSBkYXRlIGxvY2FsZXNcbiAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5lcnJvcl0gVGhlIGVycm9yIG1lc3NhZ2Ugc2hvd24gb24gaW52YWxpZCB2YWx1ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdHMudmFsaWRhdGVdIEZ1bmN0aW9uIHRvIHZhbGlkYXRlIHRoZSBzdWJtaXR0ZWQgdmFsdWVcbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICovXG5cbmNsYXNzIERhdGVQcm9tcHQgZXh0ZW5kcyBQcm9tcHQge1xuICBjb25zdHJ1Y3RvcihvcHRzID0ge30pIHtcbiAgICBzdXBlcihvcHRzKTtcbiAgICB0aGlzLm1zZyA9IG9wdHMubWVzc2FnZTtcbiAgICB0aGlzLmN1cnNvciA9IDA7XG4gICAgdGhpcy50eXBlZCA9ICcnO1xuICAgIHRoaXMubG9jYWxlcyA9IE9iamVjdC5hc3NpZ24oZGZsdExvY2FsZXMsIG9wdHMubG9jYWxlcyk7XG4gICAgdGhpcy5fZGF0ZSA9IG9wdHMuaW5pdGlhbCB8fCBuZXcgRGF0ZSgpO1xuICAgIHRoaXMuZXJyb3JNc2cgPSBvcHRzLmVycm9yIHx8ICdQbGVhc2UgRW50ZXIgQSBWYWxpZCBWYWx1ZSc7XG5cbiAgICB0aGlzLnZhbGlkYXRvciA9IG9wdHMudmFsaWRhdGUgfHwgKCgpID0+IHRydWUpO1xuXG4gICAgdGhpcy5tYXNrID0gb3B0cy5tYXNrIHx8ICdZWVlZLU1NLUREIEhIOm1tOnNzJztcbiAgICB0aGlzLmNsZWFyID0gY2xlYXIoJycsIHRoaXMub3V0LmNvbHVtbnMpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBnZXQgdmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0ZTtcbiAgfVxuXG4gIGdldCBkYXRlKCkge1xuICAgIHJldHVybiB0aGlzLl9kYXRlO1xuICB9XG5cbiAgc2V0IGRhdGUoZGF0ZSkge1xuICAgIGlmIChkYXRlKSB0aGlzLl9kYXRlLnNldFRpbWUoZGF0ZS5nZXRUaW1lKCkpO1xuICB9XG5cbiAgc2V0IG1hc2sobWFzaykge1xuICAgIGxldCByZXN1bHQ7XG4gICAgdGhpcy5wYXJ0cyA9IFtdO1xuXG4gICAgd2hpbGUgKHJlc3VsdCA9IHJlZ2V4LmV4ZWMobWFzaykpIHtcbiAgICAgIGxldCBtYXRjaCA9IHJlc3VsdC5zaGlmdCgpO1xuICAgICAgbGV0IGlkeCA9IHJlc3VsdC5maW5kSW5kZXgoZ3IgPT4gZ3IgIT0gbnVsbCk7XG4gICAgICB0aGlzLnBhcnRzLnB1c2goaWR4IGluIHJlZ2V4R3JvdXBzID8gcmVnZXhHcm91cHNbaWR4XSh7XG4gICAgICAgIHRva2VuOiByZXN1bHRbaWR4XSB8fCBtYXRjaCxcbiAgICAgICAgZGF0ZTogdGhpcy5kYXRlLFxuICAgICAgICBwYXJ0czogdGhpcy5wYXJ0cyxcbiAgICAgICAgbG9jYWxlczogdGhpcy5sb2NhbGVzXG4gICAgICB9KSA6IHJlc3VsdFtpZHhdIHx8IG1hdGNoKTtcbiAgICB9XG5cbiAgICBsZXQgcGFydHMgPSB0aGlzLnBhcnRzLnJlZHVjZSgoYXJyLCBpKSA9PiB7XG4gICAgICBpZiAodHlwZW9mIGkgPT09ICdzdHJpbmcnICYmIHR5cGVvZiBhcnJbYXJyLmxlbmd0aCAtIDFdID09PSAnc3RyaW5nJykgYXJyW2Fyci5sZW5ndGggLSAxXSArPSBpO2Vsc2UgYXJyLnB1c2goaSk7XG4gICAgICByZXR1cm4gYXJyO1xuICAgIH0sIFtdKTtcbiAgICB0aGlzLnBhcnRzLnNwbGljZSgwKTtcbiAgICB0aGlzLnBhcnRzLnB1c2goLi4ucGFydHMpO1xuICAgIHRoaXMucmVzZXQoKTtcbiAgfVxuXG4gIG1vdmVDdXJzb3Iobikge1xuICAgIHRoaXMudHlwZWQgPSAnJztcbiAgICB0aGlzLmN1cnNvciA9IG47XG4gICAgdGhpcy5maXJlKCk7XG4gIH1cblxuICByZXNldCgpIHtcbiAgICB0aGlzLm1vdmVDdXJzb3IodGhpcy5wYXJ0cy5maW5kSW5kZXgocCA9PiBwIGluc3RhbmNlb2YgRGF0ZVBhcnQpKTtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZXhpdCgpIHtcbiAgICB0aGlzLmFib3J0KCk7XG4gIH1cblxuICBhYm9ydCgpIHtcbiAgICB0aGlzLmRvbmUgPSB0aGlzLmFib3J0ZWQgPSB0cnVlO1xuICAgIHRoaXMuZXJyb3IgPSBmYWxzZTtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICAgIHRoaXMub3V0LndyaXRlKCdcXG4nKTtcbiAgICB0aGlzLmNsb3NlKCk7XG4gIH1cblxuICB2YWxpZGF0ZSgpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgcmV0dXJuIF9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKiAoKSB7XG4gICAgICBsZXQgdmFsaWQgPSB5aWVsZCBfdGhpcy52YWxpZGF0b3IoX3RoaXMudmFsdWUpO1xuXG4gICAgICBpZiAodHlwZW9mIHZhbGlkID09PSAnc3RyaW5nJykge1xuICAgICAgICBfdGhpcy5lcnJvck1zZyA9IHZhbGlkO1xuICAgICAgICB2YWxpZCA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBfdGhpcy5lcnJvciA9ICF2YWxpZDtcbiAgICB9KSgpO1xuICB9XG5cbiAgc3VibWl0KCkge1xuICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgcmV0dXJuIF9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKiAoKSB7XG4gICAgICB5aWVsZCBfdGhpczIudmFsaWRhdGUoKTtcblxuICAgICAgaWYgKF90aGlzMi5lcnJvcikge1xuICAgICAgICBfdGhpczIuY29sb3IgPSAncmVkJztcblxuICAgICAgICBfdGhpczIuZmlyZSgpO1xuXG4gICAgICAgIF90aGlzMi5yZW5kZXIoKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIF90aGlzMi5kb25lID0gdHJ1ZTtcbiAgICAgIF90aGlzMi5hYm9ydGVkID0gZmFsc2U7XG5cbiAgICAgIF90aGlzMi5maXJlKCk7XG5cbiAgICAgIF90aGlzMi5yZW5kZXIoKTtcblxuICAgICAgX3RoaXMyLm91dC53cml0ZSgnXFxuJyk7XG5cbiAgICAgIF90aGlzMi5jbG9zZSgpO1xuICAgIH0pKCk7XG4gIH1cblxuICB1cCgpIHtcbiAgICB0aGlzLnR5cGVkID0gJyc7XG4gICAgdGhpcy5wYXJ0c1t0aGlzLmN1cnNvcl0udXAoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZG93bigpIHtcbiAgICB0aGlzLnR5cGVkID0gJyc7XG4gICAgdGhpcy5wYXJ0c1t0aGlzLmN1cnNvcl0uZG93bigpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBsZWZ0KCkge1xuICAgIGxldCBwcmV2ID0gdGhpcy5wYXJ0c1t0aGlzLmN1cnNvcl0ucHJldigpO1xuICAgIGlmIChwcmV2ID09IG51bGwpIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgICB0aGlzLm1vdmVDdXJzb3IodGhpcy5wYXJ0cy5pbmRleE9mKHByZXYpKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgcmlnaHQoKSB7XG4gICAgbGV0IG5leHQgPSB0aGlzLnBhcnRzW3RoaXMuY3Vyc29yXS5uZXh0KCk7XG4gICAgaWYgKG5leHQgPT0gbnVsbCkgcmV0dXJuIHRoaXMuYmVsbCgpO1xuICAgIHRoaXMubW92ZUN1cnNvcih0aGlzLnBhcnRzLmluZGV4T2YobmV4dCkpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBuZXh0KCkge1xuICAgIGxldCBuZXh0ID0gdGhpcy5wYXJ0c1t0aGlzLmN1cnNvcl0ubmV4dCgpO1xuICAgIHRoaXMubW92ZUN1cnNvcihuZXh0ID8gdGhpcy5wYXJ0cy5pbmRleE9mKG5leHQpIDogdGhpcy5wYXJ0cy5maW5kSW5kZXgocGFydCA9PiBwYXJ0IGluc3RhbmNlb2YgRGF0ZVBhcnQpKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgXyhjKSB7XG4gICAgaWYgKC9cXGQvLnRlc3QoYykpIHtcbiAgICAgIHRoaXMudHlwZWQgKz0gYztcbiAgICAgIHRoaXMucGFydHNbdGhpcy5jdXJzb3JdLnNldFRvKHRoaXMudHlwZWQpO1xuICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICB9XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgaWYgKHRoaXMuY2xvc2VkKSByZXR1cm47XG4gICAgaWYgKHRoaXMuZmlyc3RSZW5kZXIpIHRoaXMub3V0LndyaXRlKGN1cnNvci5oaWRlKTtlbHNlIHRoaXMub3V0LndyaXRlKGNsZWFyKHRoaXMub3V0cHV0VGV4dCwgdGhpcy5vdXQuY29sdW1ucykpO1xuICAgIHN1cGVyLnJlbmRlcigpOyAvLyBQcmludCBwcm9tcHRcblxuICAgIHRoaXMub3V0cHV0VGV4dCA9IFtzdHlsZS5zeW1ib2wodGhpcy5kb25lLCB0aGlzLmFib3J0ZWQpLCBjb2xvci5ib2xkKHRoaXMubXNnKSwgc3R5bGUuZGVsaW1pdGVyKGZhbHNlKSwgdGhpcy5wYXJ0cy5yZWR1Y2UoKGFyciwgcCwgaWR4KSA9PiBhcnIuY29uY2F0KGlkeCA9PT0gdGhpcy5jdXJzb3IgJiYgIXRoaXMuZG9uZSA/IGNvbG9yLmN5YW4oKS51bmRlcmxpbmUocC50b1N0cmluZygpKSA6IHApLCBbXSkuam9pbignJyldLmpvaW4oJyAnKTsgLy8gUHJpbnQgZXJyb3JcblxuICAgIGlmICh0aGlzLmVycm9yKSB7XG4gICAgICB0aGlzLm91dHB1dFRleHQgKz0gdGhpcy5lcnJvck1zZy5zcGxpdCgnXFxuJykucmVkdWNlKChhLCBsLCBpKSA9PiBhICsgYFxcbiR7aSA/IGAgYCA6IGZpZ3VyZXMucG9pbnRlclNtYWxsfSAke2NvbG9yLnJlZCgpLml0YWxpYyhsKX1gLCBgYCk7XG4gICAgfVxuXG4gICAgdGhpcy5vdXQud3JpdGUoZXJhc2UubGluZSArIGN1cnNvci50bygwKSArIHRoaXMub3V0cHV0VGV4dCk7XG4gIH1cblxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IERhdGVQcm9tcHQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmZ1bmN0aW9uIGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywga2V5LCBhcmcpIHsgdHJ5IHsgdmFyIGluZm8gPSBnZW5ba2V5XShhcmcpOyB2YXIgdmFsdWUgPSBpbmZvLnZhbHVlOyB9IGNhdGNoIChlcnJvcikgeyByZWplY3QoZXJyb3IpOyByZXR1cm47IH0gaWYgKGluZm8uZG9uZSkgeyByZXNvbHZlKHZhbHVlKTsgfSBlbHNlIHsgUHJvbWlzZS5yZXNvbHZlKHZhbHVlKS50aGVuKF9uZXh0LCBfdGhyb3cpOyB9IH1cblxuZnVuY3Rpb24gX2FzeW5jVG9HZW5lcmF0b3IoZm4pIHsgcmV0dXJuIGZ1bmN0aW9uICgpIHsgdmFyIHNlbGYgPSB0aGlzLCBhcmdzID0gYXJndW1lbnRzOyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2YXIgZ2VuID0gZm4uYXBwbHkoc2VsZiwgYXJncyk7IGZ1bmN0aW9uIF9uZXh0KHZhbHVlKSB7IGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJuZXh0XCIsIHZhbHVlKTsgfSBmdW5jdGlvbiBfdGhyb3coZXJyKSB7IGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJ0aHJvd1wiLCBlcnIpOyB9IF9uZXh0KHVuZGVmaW5lZCk7IH0pOyB9OyB9XG5cbmNvbnN0IGNvbG9yID0gcmVxdWlyZSgna2xldXInKTtcblxuY29uc3QgUHJvbXB0ID0gcmVxdWlyZSgnLi9wcm9tcHQnKTtcblxuY29uc3QgX3JlcXVpcmUgPSByZXF1aXJlKCdzaXN0ZXJhbnNpJyksXG4gICAgICBjdXJzb3IgPSBfcmVxdWlyZS5jdXJzb3IsXG4gICAgICBlcmFzZSA9IF9yZXF1aXJlLmVyYXNlO1xuXG5jb25zdCBfcmVxdWlyZTIgPSByZXF1aXJlKCcuLi91dGlsJyksXG4gICAgICBzdHlsZSA9IF9yZXF1aXJlMi5zdHlsZSxcbiAgICAgIGZpZ3VyZXMgPSBfcmVxdWlyZTIuZmlndXJlcyxcbiAgICAgIGNsZWFyID0gX3JlcXVpcmUyLmNsZWFyLFxuICAgICAgbGluZXMgPSBfcmVxdWlyZTIubGluZXM7XG5cbmNvbnN0IGlzTnVtYmVyID0gL1swLTldLztcblxuY29uc3QgaXNEZWYgPSBhbnkgPT4gYW55ICE9PSB1bmRlZmluZWQ7XG5cbmNvbnN0IHJvdW5kID0gKG51bWJlciwgcHJlY2lzaW9uKSA9PiB7XG4gIGxldCBmYWN0b3IgPSBNYXRoLnBvdygxMCwgcHJlY2lzaW9uKTtcbiAgcmV0dXJuIE1hdGgucm91bmQobnVtYmVyICogZmFjdG9yKSAvIGZhY3Rvcjtcbn07XG4vKipcbiAqIE51bWJlclByb21wdCBCYXNlIEVsZW1lbnRcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIE9wdGlvbnNcbiAqIEBwYXJhbSB7U3RyaW5nfSBvcHRzLm1lc3NhZ2UgTWVzc2FnZVxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLnN0eWxlPSdkZWZhdWx0J10gUmVuZGVyIHN0eWxlXG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMuaW5pdGlhbF0gRGVmYXVsdCB2YWx1ZVxuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLm1heD0rSW5maW5pdHldIE1heCB2YWx1ZVxuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLm1pbj0tSW5maW5pdHldIE1pbiB2YWx1ZVxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0cy5mbG9hdD1mYWxzZV0gUGFyc2UgaW5wdXQgYXMgZmxvYXRzXG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMucm91bmQ9Ml0gUm91bmQgZmxvYXRzIHRvIHggZGVjaW1hbHNcbiAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0cy5pbmNyZW1lbnQ9MV0gTnVtYmVyIHRvIGluY3JlbWVudCBieSB3aGVuIHVzaW5nIGFycm93LWtleXNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRzLnZhbGlkYXRlXSBWYWxpZGF0ZSBmdW5jdGlvblxuICogQHBhcmFtIHtTdHJlYW19IFtvcHRzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFtvcHRzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKiBAcGFyYW0ge1N0cmluZ30gW29wdHMuZXJyb3JdIFRoZSBpbnZhbGlkIGVycm9yIGxhYmVsXG4gKi9cblxuXG5jbGFzcyBOdW1iZXJQcm9tcHQgZXh0ZW5kcyBQcm9tcHQge1xuICBjb25zdHJ1Y3RvcihvcHRzID0ge30pIHtcbiAgICBzdXBlcihvcHRzKTtcbiAgICB0aGlzLnRyYW5zZm9ybSA9IHN0eWxlLnJlbmRlcihvcHRzLnN0eWxlKTtcbiAgICB0aGlzLm1zZyA9IG9wdHMubWVzc2FnZTtcbiAgICB0aGlzLmluaXRpYWwgPSBpc0RlZihvcHRzLmluaXRpYWwpID8gb3B0cy5pbml0aWFsIDogJyc7XG4gICAgdGhpcy5mbG9hdCA9ICEhb3B0cy5mbG9hdDtcbiAgICB0aGlzLnJvdW5kID0gb3B0cy5yb3VuZCB8fCAyO1xuICAgIHRoaXMuaW5jID0gb3B0cy5pbmNyZW1lbnQgfHwgMTtcbiAgICB0aGlzLm1pbiA9IGlzRGVmKG9wdHMubWluKSA/IG9wdHMubWluIDogLUluZmluaXR5O1xuICAgIHRoaXMubWF4ID0gaXNEZWYob3B0cy5tYXgpID8gb3B0cy5tYXggOiBJbmZpbml0eTtcbiAgICB0aGlzLmVycm9yTXNnID0gb3B0cy5lcnJvciB8fCBgUGxlYXNlIEVudGVyIEEgVmFsaWQgVmFsdWVgO1xuXG4gICAgdGhpcy52YWxpZGF0b3IgPSBvcHRzLnZhbGlkYXRlIHx8ICgoKSA9PiB0cnVlKTtcblxuICAgIHRoaXMuY29sb3IgPSBgY3lhbmA7XG4gICAgdGhpcy52YWx1ZSA9IGBgO1xuICAgIHRoaXMudHlwZWQgPSBgYDtcbiAgICB0aGlzLmxhc3RIaXQgPSAwO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBzZXQgdmFsdWUodikge1xuICAgIGlmICghdiAmJiB2ICE9PSAwKSB7XG4gICAgICB0aGlzLnBsYWNlaG9sZGVyID0gdHJ1ZTtcbiAgICAgIHRoaXMucmVuZGVyZWQgPSBjb2xvci5ncmF5KHRoaXMudHJhbnNmb3JtLnJlbmRlcihgJHt0aGlzLmluaXRpYWx9YCkpO1xuICAgICAgdGhpcy5fdmFsdWUgPSBgYDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wbGFjZWhvbGRlciA9IGZhbHNlO1xuICAgICAgdGhpcy5yZW5kZXJlZCA9IHRoaXMudHJhbnNmb3JtLnJlbmRlcihgJHtyb3VuZCh2LCB0aGlzLnJvdW5kKX1gKTtcbiAgICAgIHRoaXMuX3ZhbHVlID0gcm91bmQodiwgdGhpcy5yb3VuZCk7XG4gICAgfVxuXG4gICAgdGhpcy5maXJlKCk7XG4gIH1cblxuICBnZXQgdmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG5cbiAgcGFyc2UoeCkge1xuICAgIHJldHVybiB0aGlzLmZsb2F0ID8gcGFyc2VGbG9hdCh4KSA6IHBhcnNlSW50KHgpO1xuICB9XG5cbiAgdmFsaWQoYykge1xuICAgIHJldHVybiBjID09PSBgLWAgfHwgYyA9PT0gYC5gICYmIHRoaXMuZmxvYXQgfHwgaXNOdW1iZXIudGVzdChjKTtcbiAgfVxuXG4gIHJlc2V0KCkge1xuICAgIHRoaXMudHlwZWQgPSBgYDtcbiAgICB0aGlzLnZhbHVlID0gYGA7XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIGV4aXQoKSB7XG4gICAgdGhpcy5hYm9ydCgpO1xuICB9XG5cbiAgYWJvcnQoKSB7XG4gICAgbGV0IHggPSB0aGlzLnZhbHVlO1xuICAgIHRoaXMudmFsdWUgPSB4ICE9PSBgYCA/IHggOiB0aGlzLmluaXRpYWw7XG4gICAgdGhpcy5kb25lID0gdGhpcy5hYm9ydGVkID0gdHJ1ZTtcbiAgICB0aGlzLmVycm9yID0gZmFsc2U7XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgICB0aGlzLm91dC53cml0ZShgXFxuYCk7XG4gICAgdGhpcy5jbG9zZSgpO1xuICB9XG5cbiAgdmFsaWRhdGUoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHJldHVybiBfYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiogKCkge1xuICAgICAgbGV0IHZhbGlkID0geWllbGQgX3RoaXMudmFsaWRhdG9yKF90aGlzLnZhbHVlKTtcblxuICAgICAgaWYgKHR5cGVvZiB2YWxpZCA9PT0gYHN0cmluZ2ApIHtcbiAgICAgICAgX3RoaXMuZXJyb3JNc2cgPSB2YWxpZDtcbiAgICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgX3RoaXMuZXJyb3IgPSAhdmFsaWQ7XG4gICAgfSkoKTtcbiAgfVxuXG4gIHN1Ym1pdCgpIHtcbiAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgIHJldHVybiBfYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiogKCkge1xuICAgICAgeWllbGQgX3RoaXMyLnZhbGlkYXRlKCk7XG5cbiAgICAgIGlmIChfdGhpczIuZXJyb3IpIHtcbiAgICAgICAgX3RoaXMyLmNvbG9yID0gYHJlZGA7XG5cbiAgICAgICAgX3RoaXMyLmZpcmUoKTtcblxuICAgICAgICBfdGhpczIucmVuZGVyKCk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBsZXQgeCA9IF90aGlzMi52YWx1ZTtcbiAgICAgIF90aGlzMi52YWx1ZSA9IHggIT09IGBgID8geCA6IF90aGlzMi5pbml0aWFsO1xuICAgICAgX3RoaXMyLmRvbmUgPSB0cnVlO1xuICAgICAgX3RoaXMyLmFib3J0ZWQgPSBmYWxzZTtcbiAgICAgIF90aGlzMi5lcnJvciA9IGZhbHNlO1xuXG4gICAgICBfdGhpczIuZmlyZSgpO1xuXG4gICAgICBfdGhpczIucmVuZGVyKCk7XG5cbiAgICAgIF90aGlzMi5vdXQud3JpdGUoYFxcbmApO1xuXG4gICAgICBfdGhpczIuY2xvc2UoKTtcbiAgICB9KSgpO1xuICB9XG5cbiAgdXAoKSB7XG4gICAgdGhpcy50eXBlZCA9IGBgO1xuXG4gICAgaWYgKHRoaXMudmFsdWUgPT09ICcnKSB7XG4gICAgICB0aGlzLnZhbHVlID0gdGhpcy5taW4gLSB0aGlzLmluYztcbiAgICB9XG5cbiAgICBpZiAodGhpcy52YWx1ZSA+PSB0aGlzLm1heCkgcmV0dXJuIHRoaXMuYmVsbCgpO1xuICAgIHRoaXMudmFsdWUgKz0gdGhpcy5pbmM7XG4gICAgdGhpcy5jb2xvciA9IGBjeWFuYDtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZG93bigpIHtcbiAgICB0aGlzLnR5cGVkID0gYGA7XG5cbiAgICBpZiAodGhpcy52YWx1ZSA9PT0gJycpIHtcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm1pbiArIHRoaXMuaW5jO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnZhbHVlIDw9IHRoaXMubWluKSByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgdGhpcy52YWx1ZSAtPSB0aGlzLmluYztcbiAgICB0aGlzLmNvbG9yID0gYGN5YW5gO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBkZWxldGUoKSB7XG4gICAgbGV0IHZhbCA9IHRoaXMudmFsdWUudG9TdHJpbmcoKTtcbiAgICBpZiAodmFsLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHRoaXMuYmVsbCgpO1xuICAgIHRoaXMudmFsdWUgPSB0aGlzLnBhcnNlKHZhbCA9IHZhbC5zbGljZSgwLCAtMSkpIHx8IGBgO1xuXG4gICAgaWYgKHRoaXMudmFsdWUgIT09ICcnICYmIHRoaXMudmFsdWUgPCB0aGlzLm1pbikge1xuICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubWluO1xuICAgIH1cblxuICAgIHRoaXMuY29sb3IgPSBgY3lhbmA7XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIG5leHQoKSB7XG4gICAgdGhpcy52YWx1ZSA9IHRoaXMuaW5pdGlhbDtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgXyhjLCBrZXkpIHtcbiAgICBpZiAoIXRoaXMudmFsaWQoYykpIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGlmIChub3cgLSB0aGlzLmxhc3RIaXQgPiAxMDAwKSB0aGlzLnR5cGVkID0gYGA7IC8vIDFzIGVsYXBzZWRcblxuICAgIHRoaXMudHlwZWQgKz0gYztcbiAgICB0aGlzLmxhc3RIaXQgPSBub3c7XG4gICAgdGhpcy5jb2xvciA9IGBjeWFuYDtcbiAgICBpZiAoYyA9PT0gYC5gKSByZXR1cm4gdGhpcy5maXJlKCk7XG4gICAgdGhpcy52YWx1ZSA9IE1hdGgubWluKHRoaXMucGFyc2UodGhpcy50eXBlZCksIHRoaXMubWF4KTtcbiAgICBpZiAodGhpcy52YWx1ZSA+IHRoaXMubWF4KSB0aGlzLnZhbHVlID0gdGhpcy5tYXg7XG4gICAgaWYgKHRoaXMudmFsdWUgPCB0aGlzLm1pbikgdGhpcy52YWx1ZSA9IHRoaXMubWluO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgaWYgKHRoaXMuY2xvc2VkKSByZXR1cm47XG5cbiAgICBpZiAoIXRoaXMuZmlyc3RSZW5kZXIpIHtcbiAgICAgIGlmICh0aGlzLm91dHB1dEVycm9yKSB0aGlzLm91dC53cml0ZShjdXJzb3IuZG93bihsaW5lcyh0aGlzLm91dHB1dEVycm9yLCB0aGlzLm91dC5jb2x1bW5zKSAtIDEpICsgY2xlYXIodGhpcy5vdXRwdXRFcnJvciwgdGhpcy5vdXQuY29sdW1ucykpO1xuICAgICAgdGhpcy5vdXQud3JpdGUoY2xlYXIodGhpcy5vdXRwdXRUZXh0LCB0aGlzLm91dC5jb2x1bW5zKSk7XG4gICAgfVxuXG4gICAgc3VwZXIucmVuZGVyKCk7XG4gICAgdGhpcy5vdXRwdXRFcnJvciA9ICcnOyAvLyBQcmludCBwcm9tcHRcblxuICAgIHRoaXMub3V0cHV0VGV4dCA9IFtzdHlsZS5zeW1ib2wodGhpcy5kb25lLCB0aGlzLmFib3J0ZWQpLCBjb2xvci5ib2xkKHRoaXMubXNnKSwgc3R5bGUuZGVsaW1pdGVyKHRoaXMuZG9uZSksICF0aGlzLmRvbmUgfHwgIXRoaXMuZG9uZSAmJiAhdGhpcy5wbGFjZWhvbGRlciA/IGNvbG9yW3RoaXMuY29sb3JdKCkudW5kZXJsaW5lKHRoaXMucmVuZGVyZWQpIDogdGhpcy5yZW5kZXJlZF0uam9pbihgIGApOyAvLyBQcmludCBlcnJvclxuXG4gICAgaWYgKHRoaXMuZXJyb3IpIHtcbiAgICAgIHRoaXMub3V0cHV0RXJyb3IgKz0gdGhpcy5lcnJvck1zZy5zcGxpdChgXFxuYCkucmVkdWNlKChhLCBsLCBpKSA9PiBhICsgYFxcbiR7aSA/IGAgYCA6IGZpZ3VyZXMucG9pbnRlclNtYWxsfSAke2NvbG9yLnJlZCgpLml0YWxpYyhsKX1gLCBgYCk7XG4gICAgfVxuXG4gICAgdGhpcy5vdXQud3JpdGUoZXJhc2UubGluZSArIGN1cnNvci50bygwKSArIHRoaXMub3V0cHV0VGV4dCArIGN1cnNvci5zYXZlICsgdGhpcy5vdXRwdXRFcnJvciArIGN1cnNvci5yZXN0b3JlKTtcbiAgfVxuXG59XG5cbm1vZHVsZS5leHBvcnRzID0gTnVtYmVyUHJvbXB0OyIsIid1c2Ugc3RyaWN0JztcblxuY29uc3QgY29sb3IgPSByZXF1aXJlKCdrbGV1cicpO1xuXG5jb25zdCBfcmVxdWlyZSA9IHJlcXVpcmUoJ3Npc3RlcmFuc2knKSxcbiAgICAgIGN1cnNvciA9IF9yZXF1aXJlLmN1cnNvcjtcblxuY29uc3QgUHJvbXB0ID0gcmVxdWlyZSgnLi9wcm9tcHQnKTtcblxuY29uc3QgX3JlcXVpcmUyID0gcmVxdWlyZSgnLi4vdXRpbCcpLFxuICAgICAgY2xlYXIgPSBfcmVxdWlyZTIuY2xlYXIsXG4gICAgICBmaWd1cmVzID0gX3JlcXVpcmUyLmZpZ3VyZXMsXG4gICAgICBzdHlsZSA9IF9yZXF1aXJlMi5zdHlsZSxcbiAgICAgIHdyYXAgPSBfcmVxdWlyZTIud3JhcCxcbiAgICAgIGVudHJpZXNUb0Rpc3BsYXkgPSBfcmVxdWlyZTIuZW50cmllc1RvRGlzcGxheTtcbi8qKlxuICogTXVsdGlzZWxlY3RQcm9tcHQgQmFzZSBFbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyBPcHRpb25zXG4gKiBAcGFyYW0ge1N0cmluZ30gb3B0cy5tZXNzYWdlIE1lc3NhZ2VcbiAqIEBwYXJhbSB7QXJyYXl9IG9wdHMuY2hvaWNlcyBBcnJheSBvZiBjaG9pY2Ugb2JqZWN0c1xuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLmhpbnRdIEhpbnQgdG8gZGlzcGxheVxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLndhcm5dIEhpbnQgc2hvd24gZm9yIGRpc2FibGVkIGNob2ljZXNcbiAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0cy5tYXhdIE1heCBjaG9pY2VzXG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMuY3Vyc29yPTBdIEN1cnNvciBzdGFydCBwb3NpdGlvblxuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLm9wdGlvbnNQZXJQYWdlPTEwXSBNYXggb3B0aW9ucyB0byBkaXNwbGF5IGF0IG9uY2VcbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICovXG5cblxuY2xhc3MgTXVsdGlzZWxlY3RQcm9tcHQgZXh0ZW5kcyBQcm9tcHQge1xuICBjb25zdHJ1Y3RvcihvcHRzID0ge30pIHtcbiAgICBzdXBlcihvcHRzKTtcbiAgICB0aGlzLm1zZyA9IG9wdHMubWVzc2FnZTtcbiAgICB0aGlzLmN1cnNvciA9IG9wdHMuY3Vyc29yIHx8IDA7XG4gICAgdGhpcy5zY3JvbGxJbmRleCA9IG9wdHMuY3Vyc29yIHx8IDA7XG4gICAgdGhpcy5oaW50ID0gb3B0cy5oaW50IHx8ICcnO1xuICAgIHRoaXMud2FybiA9IG9wdHMud2FybiB8fCAnLSBUaGlzIG9wdGlvbiBpcyBkaXNhYmxlZCAtJztcbiAgICB0aGlzLm1pblNlbGVjdGVkID0gb3B0cy5taW47XG4gICAgdGhpcy5zaG93TWluRXJyb3IgPSBmYWxzZTtcbiAgICB0aGlzLm1heENob2ljZXMgPSBvcHRzLm1heDtcbiAgICB0aGlzLmluc3RydWN0aW9ucyA9IG9wdHMuaW5zdHJ1Y3Rpb25zO1xuICAgIHRoaXMub3B0aW9uc1BlclBhZ2UgPSBvcHRzLm9wdGlvbnNQZXJQYWdlIHx8IDEwO1xuICAgIHRoaXMudmFsdWUgPSBvcHRzLmNob2ljZXMubWFwKChjaCwgaWR4KSA9PiB7XG4gICAgICBpZiAodHlwZW9mIGNoID09PSAnc3RyaW5nJykgY2ggPSB7XG4gICAgICAgIHRpdGxlOiBjaCxcbiAgICAgICAgdmFsdWU6IGlkeFxuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRpdGxlOiBjaCAmJiAoY2gudGl0bGUgfHwgY2gudmFsdWUgfHwgY2gpLFxuICAgICAgICBkZXNjcmlwdGlvbjogY2ggJiYgY2guZGVzY3JpcHRpb24sXG4gICAgICAgIHZhbHVlOiBjaCAmJiAoY2gudmFsdWUgPT09IHVuZGVmaW5lZCA/IGlkeCA6IGNoLnZhbHVlKSxcbiAgICAgICAgc2VsZWN0ZWQ6IGNoICYmIGNoLnNlbGVjdGVkLFxuICAgICAgICBkaXNhYmxlZDogY2ggJiYgY2guZGlzYWJsZWRcbiAgICAgIH07XG4gICAgfSk7XG4gICAgdGhpcy5jbGVhciA9IGNsZWFyKCcnLCB0aGlzLm91dC5jb2x1bW5zKTtcblxuICAgIGlmICghb3B0cy5vdmVycmlkZVJlbmRlcikge1xuICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICB9XG4gIH1cblxuICByZXNldCgpIHtcbiAgICB0aGlzLnZhbHVlLm1hcCh2ID0+ICF2LnNlbGVjdGVkKTtcbiAgICB0aGlzLmN1cnNvciA9IDA7XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHNlbGVjdGVkKCkge1xuICAgIHJldHVybiB0aGlzLnZhbHVlLmZpbHRlcih2ID0+IHYuc2VsZWN0ZWQpO1xuICB9XG5cbiAgZXhpdCgpIHtcbiAgICB0aGlzLmFib3J0KCk7XG4gIH1cblxuICBhYm9ydCgpIHtcbiAgICB0aGlzLmRvbmUgPSB0aGlzLmFib3J0ZWQgPSB0cnVlO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gICAgdGhpcy5vdXQud3JpdGUoJ1xcbicpO1xuICAgIHRoaXMuY2xvc2UoKTtcbiAgfVxuXG4gIHN1Ym1pdCgpIHtcbiAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMudmFsdWUuZmlsdGVyKGUgPT4gZS5zZWxlY3RlZCk7XG5cbiAgICBpZiAodGhpcy5taW5TZWxlY3RlZCAmJiBzZWxlY3RlZC5sZW5ndGggPCB0aGlzLm1pblNlbGVjdGVkKSB7XG4gICAgICB0aGlzLnNob3dNaW5FcnJvciA9IHRydWU7XG4gICAgICB0aGlzLnJlbmRlcigpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRvbmUgPSB0cnVlO1xuICAgICAgdGhpcy5hYm9ydGVkID0gZmFsc2U7XG4gICAgICB0aGlzLmZpcmUoKTtcbiAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgICB0aGlzLm91dC53cml0ZSgnXFxuJyk7XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfVxuICB9XG5cbiAgZmlyc3QoKSB7XG4gICAgdGhpcy5jdXJzb3IgPSAwO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBsYXN0KCkge1xuICAgIHRoaXMuY3Vyc29yID0gdGhpcy52YWx1ZS5sZW5ndGggLSAxO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBuZXh0KCkge1xuICAgIHRoaXMuY3Vyc29yID0gKHRoaXMuY3Vyc29yICsgMSkgJSB0aGlzLnZhbHVlLmxlbmd0aDtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgdXAoKSB7XG4gICAgaWYgKHRoaXMuY3Vyc29yID09PSAwKSB7XG4gICAgICB0aGlzLmN1cnNvciA9IHRoaXMudmFsdWUubGVuZ3RoIC0gMTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jdXJzb3ItLTtcbiAgICB9XG5cbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZG93bigpIHtcbiAgICBpZiAodGhpcy5jdXJzb3IgPT09IHRoaXMudmFsdWUubGVuZ3RoIC0gMSkge1xuICAgICAgdGhpcy5jdXJzb3IgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmN1cnNvcisrO1xuICAgIH1cblxuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBsZWZ0KCkge1xuICAgIHRoaXMudmFsdWVbdGhpcy5jdXJzb3JdLnNlbGVjdGVkID0gZmFsc2U7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHJpZ2h0KCkge1xuICAgIGlmICh0aGlzLnZhbHVlLmZpbHRlcihlID0+IGUuc2VsZWN0ZWQpLmxlbmd0aCA+PSB0aGlzLm1heENob2ljZXMpIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgICB0aGlzLnZhbHVlW3RoaXMuY3Vyc29yXS5zZWxlY3RlZCA9IHRydWU7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIGhhbmRsZVNwYWNlVG9nZ2xlKCkge1xuICAgIGNvbnN0IHYgPSB0aGlzLnZhbHVlW3RoaXMuY3Vyc29yXTtcblxuICAgIGlmICh2LnNlbGVjdGVkKSB7XG4gICAgICB2LnNlbGVjdGVkID0gZmFsc2U7XG4gICAgICB0aGlzLnJlbmRlcigpO1xuICAgIH0gZWxzZSBpZiAodi5kaXNhYmxlZCB8fCB0aGlzLnZhbHVlLmZpbHRlcihlID0+IGUuc2VsZWN0ZWQpLmxlbmd0aCA+PSB0aGlzLm1heENob2ljZXMpIHtcbiAgICAgIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdi5zZWxlY3RlZCA9IHRydWU7XG4gICAgICB0aGlzLnJlbmRlcigpO1xuICAgIH1cbiAgfVxuXG4gIHRvZ2dsZUFsbCgpIHtcbiAgICBpZiAodGhpcy5tYXhDaG9pY2VzICE9PSB1bmRlZmluZWQgfHwgdGhpcy52YWx1ZVt0aGlzLmN1cnNvcl0uZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgICB9XG5cbiAgICBjb25zdCBuZXdTZWxlY3RlZCA9ICF0aGlzLnZhbHVlW3RoaXMuY3Vyc29yXS5zZWxlY3RlZDtcbiAgICB0aGlzLnZhbHVlLmZpbHRlcih2ID0+ICF2LmRpc2FibGVkKS5mb3JFYWNoKHYgPT4gdi5zZWxlY3RlZCA9IG5ld1NlbGVjdGVkKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgXyhjLCBrZXkpIHtcbiAgICBpZiAoYyA9PT0gJyAnKSB7XG4gICAgICB0aGlzLmhhbmRsZVNwYWNlVG9nZ2xlKCk7XG4gICAgfSBlbHNlIGlmIChjID09PSAnYScpIHtcbiAgICAgIHRoaXMudG9nZ2xlQWxsKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgICB9XG4gIH1cblxuICByZW5kZXJJbnN0cnVjdGlvbnMoKSB7XG4gICAgaWYgKHRoaXMuaW5zdHJ1Y3Rpb25zID09PSB1bmRlZmluZWQgfHwgdGhpcy5pbnN0cnVjdGlvbnMpIHtcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5pbnN0cnVjdGlvbnMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmluc3RydWN0aW9ucztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuICdcXG5JbnN0cnVjdGlvbnM6XFxuJyArIGAgICAgJHtmaWd1cmVzLmFycm93VXB9LyR7ZmlndXJlcy5hcnJvd0Rvd259OiBIaWdobGlnaHQgb3B0aW9uXFxuYCArIGAgICAgJHtmaWd1cmVzLmFycm93TGVmdH0vJHtmaWd1cmVzLmFycm93UmlnaHR9L1tzcGFjZV06IFRvZ2dsZSBzZWxlY3Rpb25cXG5gICsgKHRoaXMubWF4Q2hvaWNlcyA9PT0gdW5kZWZpbmVkID8gYCAgICBhOiBUb2dnbGUgYWxsXFxuYCA6ICcnKSArIGAgICAgZW50ZXIvcmV0dXJuOiBDb21wbGV0ZSBhbnN3ZXJgO1xuICAgIH1cblxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIHJlbmRlck9wdGlvbihjdXJzb3IsIHYsIGksIGFycm93SW5kaWNhdG9yKSB7XG4gICAgY29uc3QgcHJlZml4ID0gKHYuc2VsZWN0ZWQgPyBjb2xvci5ncmVlbihmaWd1cmVzLnJhZGlvT24pIDogZmlndXJlcy5yYWRpb09mZikgKyAnICcgKyBhcnJvd0luZGljYXRvciArICcgJztcbiAgICBsZXQgdGl0bGUsIGRlc2M7XG5cbiAgICBpZiAodi5kaXNhYmxlZCkge1xuICAgICAgdGl0bGUgPSBjdXJzb3IgPT09IGkgPyBjb2xvci5ncmF5KCkudW5kZXJsaW5lKHYudGl0bGUpIDogY29sb3Iuc3RyaWtldGhyb3VnaCgpLmdyYXkodi50aXRsZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRpdGxlID0gY3Vyc29yID09PSBpID8gY29sb3IuY3lhbigpLnVuZGVybGluZSh2LnRpdGxlKSA6IHYudGl0bGU7XG5cbiAgICAgIGlmIChjdXJzb3IgPT09IGkgJiYgdi5kZXNjcmlwdGlvbikge1xuICAgICAgICBkZXNjID0gYCAtICR7di5kZXNjcmlwdGlvbn1gO1xuXG4gICAgICAgIGlmIChwcmVmaXgubGVuZ3RoICsgdGl0bGUubGVuZ3RoICsgZGVzYy5sZW5ndGggPj0gdGhpcy5vdXQuY29sdW1ucyB8fCB2LmRlc2NyaXB0aW9uLnNwbGl0KC9cXHI/XFxuLykubGVuZ3RoID4gMSkge1xuICAgICAgICAgIGRlc2MgPSAnXFxuJyArIHdyYXAodi5kZXNjcmlwdGlvbiwge1xuICAgICAgICAgICAgbWFyZ2luOiBwcmVmaXgubGVuZ3RoLFxuICAgICAgICAgICAgd2lkdGg6IHRoaXMub3V0LmNvbHVtbnNcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwcmVmaXggKyB0aXRsZSArIGNvbG9yLmdyYXkoZGVzYyB8fCAnJyk7XG4gIH0gLy8gc2hhcmVkIHdpdGggYXV0b2NvbXBsZXRlTXVsdGlzZWxlY3RcblxuXG4gIHBhZ2luYXRlT3B0aW9ucyhvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gY29sb3IucmVkKCdObyBtYXRjaGVzIGZvciB0aGlzIHF1ZXJ5LicpO1xuICAgIH1cblxuICAgIGxldCBfZW50cmllc1RvRGlzcGxheSA9IGVudHJpZXNUb0Rpc3BsYXkodGhpcy5jdXJzb3IsIG9wdGlvbnMubGVuZ3RoLCB0aGlzLm9wdGlvbnNQZXJQYWdlKSxcbiAgICAgICAgc3RhcnRJbmRleCA9IF9lbnRyaWVzVG9EaXNwbGF5LnN0YXJ0SW5kZXgsXG4gICAgICAgIGVuZEluZGV4ID0gX2VudHJpZXNUb0Rpc3BsYXkuZW5kSW5kZXg7XG5cbiAgICBsZXQgcHJlZml4LFxuICAgICAgICBzdHlsZWRPcHRpb25zID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gc3RhcnRJbmRleDsgaSA8IGVuZEluZGV4OyBpKyspIHtcbiAgICAgIGlmIChpID09PSBzdGFydEluZGV4ICYmIHN0YXJ0SW5kZXggPiAwKSB7XG4gICAgICAgIHByZWZpeCA9IGZpZ3VyZXMuYXJyb3dVcDtcbiAgICAgIH0gZWxzZSBpZiAoaSA9PT0gZW5kSW5kZXggLSAxICYmIGVuZEluZGV4IDwgb3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgcHJlZml4ID0gZmlndXJlcy5hcnJvd0Rvd247XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcmVmaXggPSAnICc7XG4gICAgICB9XG5cbiAgICAgIHN0eWxlZE9wdGlvbnMucHVzaCh0aGlzLnJlbmRlck9wdGlvbih0aGlzLmN1cnNvciwgb3B0aW9uc1tpXSwgaSwgcHJlZml4KSk7XG4gICAgfVxuXG4gICAgcmV0dXJuICdcXG4nICsgc3R5bGVkT3B0aW9ucy5qb2luKCdcXG4nKTtcbiAgfSAvLyBzaGFyZWQgd2l0aCBhdXRvY29tbGV0ZU11bHRpc2VsZWN0XG5cblxuICByZW5kZXJPcHRpb25zKG9wdGlvbnMpIHtcbiAgICBpZiAoIXRoaXMuZG9uZSkge1xuICAgICAgcmV0dXJuIHRoaXMucGFnaW5hdGVPcHRpb25zKG9wdGlvbnMpO1xuICAgIH1cblxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIHJlbmRlckRvbmVPckluc3RydWN0aW9ucygpIHtcbiAgICBpZiAodGhpcy5kb25lKSB7XG4gICAgICByZXR1cm4gdGhpcy52YWx1ZS5maWx0ZXIoZSA9PiBlLnNlbGVjdGVkKS5tYXAodiA9PiB2LnRpdGxlKS5qb2luKCcsICcpO1xuICAgIH1cblxuICAgIGNvbnN0IG91dHB1dCA9IFtjb2xvci5ncmF5KHRoaXMuaGludCksIHRoaXMucmVuZGVySW5zdHJ1Y3Rpb25zKCldO1xuXG4gICAgaWYgKHRoaXMudmFsdWVbdGhpcy5jdXJzb3JdLmRpc2FibGVkKSB7XG4gICAgICBvdXRwdXQucHVzaChjb2xvci55ZWxsb3codGhpcy53YXJuKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dHB1dC5qb2luKCcgJyk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgaWYgKHRoaXMuY2xvc2VkKSByZXR1cm47XG4gICAgaWYgKHRoaXMuZmlyc3RSZW5kZXIpIHRoaXMub3V0LndyaXRlKGN1cnNvci5oaWRlKTtcbiAgICBzdXBlci5yZW5kZXIoKTsgLy8gcHJpbnQgcHJvbXB0XG5cbiAgICBsZXQgcHJvbXB0ID0gW3N0eWxlLnN5bWJvbCh0aGlzLmRvbmUsIHRoaXMuYWJvcnRlZCksIGNvbG9yLmJvbGQodGhpcy5tc2cpLCBzdHlsZS5kZWxpbWl0ZXIoZmFsc2UpLCB0aGlzLnJlbmRlckRvbmVPckluc3RydWN0aW9ucygpXS5qb2luKCcgJyk7XG5cbiAgICBpZiAodGhpcy5zaG93TWluRXJyb3IpIHtcbiAgICAgIHByb21wdCArPSBjb2xvci5yZWQoYFlvdSBtdXN0IHNlbGVjdCBhIG1pbmltdW0gb2YgJHt0aGlzLm1pblNlbGVjdGVkfSBjaG9pY2VzLmApO1xuICAgICAgdGhpcy5zaG93TWluRXJyb3IgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBwcm9tcHQgKz0gdGhpcy5yZW5kZXJPcHRpb25zKHRoaXMudmFsdWUpO1xuICAgIHRoaXMub3V0LndyaXRlKHRoaXMuY2xlYXIgKyBwcm9tcHQpO1xuICAgIHRoaXMuY2xlYXIgPSBjbGVhcihwcm9tcHQsIHRoaXMub3V0LmNvbHVtbnMpO1xuICB9XG5cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBNdWx0aXNlbGVjdFByb21wdDsiLCIndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywga2V5LCBhcmcpIHsgdHJ5IHsgdmFyIGluZm8gPSBnZW5ba2V5XShhcmcpOyB2YXIgdmFsdWUgPSBpbmZvLnZhbHVlOyB9IGNhdGNoIChlcnJvcikgeyByZWplY3QoZXJyb3IpOyByZXR1cm47IH0gaWYgKGluZm8uZG9uZSkgeyByZXNvbHZlKHZhbHVlKTsgfSBlbHNlIHsgUHJvbWlzZS5yZXNvbHZlKHZhbHVlKS50aGVuKF9uZXh0LCBfdGhyb3cpOyB9IH1cblxuZnVuY3Rpb24gX2FzeW5jVG9HZW5lcmF0b3IoZm4pIHsgcmV0dXJuIGZ1bmN0aW9uICgpIHsgdmFyIHNlbGYgPSB0aGlzLCBhcmdzID0gYXJndW1lbnRzOyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2YXIgZ2VuID0gZm4uYXBwbHkoc2VsZiwgYXJncyk7IGZ1bmN0aW9uIF9uZXh0KHZhbHVlKSB7IGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJuZXh0XCIsIHZhbHVlKTsgfSBmdW5jdGlvbiBfdGhyb3coZXJyKSB7IGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJ0aHJvd1wiLCBlcnIpOyB9IF9uZXh0KHVuZGVmaW5lZCk7IH0pOyB9OyB9XG5cbmNvbnN0IGNvbG9yID0gcmVxdWlyZSgna2xldXInKTtcblxuY29uc3QgUHJvbXB0ID0gcmVxdWlyZSgnLi9wcm9tcHQnKTtcblxuY29uc3QgX3JlcXVpcmUgPSByZXF1aXJlKCdzaXN0ZXJhbnNpJyksXG4gICAgICBlcmFzZSA9IF9yZXF1aXJlLmVyYXNlLFxuICAgICAgY3Vyc29yID0gX3JlcXVpcmUuY3Vyc29yO1xuXG5jb25zdCBfcmVxdWlyZTIgPSByZXF1aXJlKCcuLi91dGlsJyksXG4gICAgICBzdHlsZSA9IF9yZXF1aXJlMi5zdHlsZSxcbiAgICAgIGNsZWFyID0gX3JlcXVpcmUyLmNsZWFyLFxuICAgICAgZmlndXJlcyA9IF9yZXF1aXJlMi5maWd1cmVzLFxuICAgICAgd3JhcCA9IF9yZXF1aXJlMi53cmFwLFxuICAgICAgZW50cmllc1RvRGlzcGxheSA9IF9yZXF1aXJlMi5lbnRyaWVzVG9EaXNwbGF5O1xuXG5jb25zdCBnZXRWYWwgPSAoYXJyLCBpKSA9PiBhcnJbaV0gJiYgKGFycltpXS52YWx1ZSB8fCBhcnJbaV0udGl0bGUgfHwgYXJyW2ldKTtcblxuY29uc3QgZ2V0VGl0bGUgPSAoYXJyLCBpKSA9PiBhcnJbaV0gJiYgKGFycltpXS50aXRsZSB8fCBhcnJbaV0udmFsdWUgfHwgYXJyW2ldKTtcblxuY29uc3QgZ2V0SW5kZXggPSAoYXJyLCB2YWxPclRpdGxlKSA9PiB7XG4gIGNvbnN0IGluZGV4ID0gYXJyLmZpbmRJbmRleChlbCA9PiBlbC52YWx1ZSA9PT0gdmFsT3JUaXRsZSB8fCBlbC50aXRsZSA9PT0gdmFsT3JUaXRsZSk7XG4gIHJldHVybiBpbmRleCA+IC0xID8gaW5kZXggOiB1bmRlZmluZWQ7XG59O1xuLyoqXG4gKiBUZXh0UHJvbXB0IEJhc2UgRWxlbWVudFxuICogQHBhcmFtIHtPYmplY3R9IG9wdHMgT3B0aW9uc1xuICogQHBhcmFtIHtTdHJpbmd9IG9wdHMubWVzc2FnZSBNZXNzYWdlXG4gKiBAcGFyYW0ge0FycmF5fSBvcHRzLmNob2ljZXMgQXJyYXkgb2YgYXV0by1jb21wbGV0ZSBjaG9pY2VzIG9iamVjdHNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRzLnN1Z2dlc3RdIEZpbHRlciBmdW5jdGlvbi4gRGVmYXVsdHMgdG8gc29ydCBieSB0aXRsZVxuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLmxpbWl0PTEwXSBNYXggbnVtYmVyIG9mIHJlc3VsdHMgdG8gc2hvd1xuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLmN1cnNvcj0wXSBDdXJzb3Igc3RhcnQgcG9zaXRpb25cbiAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5zdHlsZT0nZGVmYXVsdCddIFJlbmRlciBzdHlsZVxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLmZhbGxiYWNrXSBGYWxsYmFjayBtZXNzYWdlIC0gaW5pdGlhbCB0byBkZWZhdWx0IHZhbHVlXG4gKiBAcGFyYW0ge1N0cmluZ30gW29wdHMuaW5pdGlhbF0gSW5kZXggb2YgdGhlIGRlZmF1bHQgdmFsdWVcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdHMuY2xlYXJGaXJzdF0gVGhlIGZpcnN0IEVTQ0FQRSBrZXlwcmVzcyB3aWxsIGNsZWFyIHRoZSBpbnB1dFxuICogQHBhcmFtIHtTdHJlYW19IFtvcHRzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFtvcHRzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKiBAcGFyYW0ge1N0cmluZ30gW29wdHMubm9NYXRjaGVzXSBUaGUgbm8gbWF0Y2hlcyBmb3VuZCBsYWJlbFxuICovXG5cblxuY2xhc3MgQXV0b2NvbXBsZXRlUHJvbXB0IGV4dGVuZHMgUHJvbXB0IHtcbiAgY29uc3RydWN0b3Iob3B0cyA9IHt9KSB7XG4gICAgc3VwZXIob3B0cyk7XG4gICAgdGhpcy5tc2cgPSBvcHRzLm1lc3NhZ2U7XG4gICAgdGhpcy5zdWdnZXN0ID0gb3B0cy5zdWdnZXN0O1xuICAgIHRoaXMuY2hvaWNlcyA9IG9wdHMuY2hvaWNlcztcbiAgICB0aGlzLmluaXRpYWwgPSB0eXBlb2Ygb3B0cy5pbml0aWFsID09PSAnbnVtYmVyJyA/IG9wdHMuaW5pdGlhbCA6IGdldEluZGV4KG9wdHMuY2hvaWNlcywgb3B0cy5pbml0aWFsKTtcbiAgICB0aGlzLnNlbGVjdCA9IHRoaXMuaW5pdGlhbCB8fCBvcHRzLmN1cnNvciB8fCAwO1xuICAgIHRoaXMuaTE4biA9IHtcbiAgICAgIG5vTWF0Y2hlczogb3B0cy5ub01hdGNoZXMgfHwgJ25vIG1hdGNoZXMgZm91bmQnXG4gICAgfTtcbiAgICB0aGlzLmZhbGxiYWNrID0gb3B0cy5mYWxsYmFjayB8fCB0aGlzLmluaXRpYWw7XG4gICAgdGhpcy5jbGVhckZpcnN0ID0gb3B0cy5jbGVhckZpcnN0IHx8IGZhbHNlO1xuICAgIHRoaXMuc3VnZ2VzdGlvbnMgPSBbXTtcbiAgICB0aGlzLmlucHV0ID0gJyc7XG4gICAgdGhpcy5saW1pdCA9IG9wdHMubGltaXQgfHwgMTA7XG4gICAgdGhpcy5jdXJzb3IgPSAwO1xuICAgIHRoaXMudHJhbnNmb3JtID0gc3R5bGUucmVuZGVyKG9wdHMuc3R5bGUpO1xuICAgIHRoaXMuc2NhbGUgPSB0aGlzLnRyYW5zZm9ybS5zY2FsZTtcbiAgICB0aGlzLnJlbmRlciA9IHRoaXMucmVuZGVyLmJpbmQodGhpcyk7XG4gICAgdGhpcy5jb21wbGV0ZSA9IHRoaXMuY29tcGxldGUuYmluZCh0aGlzKTtcbiAgICB0aGlzLmNsZWFyID0gY2xlYXIoJycsIHRoaXMub3V0LmNvbHVtbnMpO1xuICAgIHRoaXMuY29tcGxldGUodGhpcy5yZW5kZXIpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBzZXQgZmFsbGJhY2soZmIpIHtcbiAgICB0aGlzLl9mYiA9IE51bWJlci5pc1NhZmVJbnRlZ2VyKHBhcnNlSW50KGZiKSkgPyBwYXJzZUludChmYikgOiBmYjtcbiAgfVxuXG4gIGdldCBmYWxsYmFjaygpIHtcbiAgICBsZXQgY2hvaWNlO1xuICAgIGlmICh0eXBlb2YgdGhpcy5fZmIgPT09ICdudW1iZXInKSBjaG9pY2UgPSB0aGlzLmNob2ljZXNbdGhpcy5fZmJdO2Vsc2UgaWYgKHR5cGVvZiB0aGlzLl9mYiA9PT0gJ3N0cmluZycpIGNob2ljZSA9IHtcbiAgICAgIHRpdGxlOiB0aGlzLl9mYlxuICAgIH07XG4gICAgcmV0dXJuIGNob2ljZSB8fCB0aGlzLl9mYiB8fCB7XG4gICAgICB0aXRsZTogdGhpcy5pMThuLm5vTWF0Y2hlc1xuICAgIH07XG4gIH1cblxuICBtb3ZlU2VsZWN0KGkpIHtcbiAgICB0aGlzLnNlbGVjdCA9IGk7XG4gICAgaWYgKHRoaXMuc3VnZ2VzdGlvbnMubGVuZ3RoID4gMCkgdGhpcy52YWx1ZSA9IGdldFZhbCh0aGlzLnN1Z2dlc3Rpb25zLCBpKTtlbHNlIHRoaXMudmFsdWUgPSB0aGlzLmZhbGxiYWNrLnZhbHVlO1xuICAgIHRoaXMuZmlyZSgpO1xuICB9XG5cbiAgY29tcGxldGUoY2IpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgcmV0dXJuIF9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKiAoKSB7XG4gICAgICBjb25zdCBwID0gX3RoaXMuY29tcGxldGluZyA9IF90aGlzLnN1Z2dlc3QoX3RoaXMuaW5wdXQsIF90aGlzLmNob2ljZXMpO1xuXG4gICAgICBjb25zdCBzdWdnZXN0aW9ucyA9IHlpZWxkIHA7XG4gICAgICBpZiAoX3RoaXMuY29tcGxldGluZyAhPT0gcCkgcmV0dXJuO1xuICAgICAgX3RoaXMuc3VnZ2VzdGlvbnMgPSBzdWdnZXN0aW9ucy5tYXAoKHMsIGksIGFycikgPT4gKHtcbiAgICAgICAgdGl0bGU6IGdldFRpdGxlKGFyciwgaSksXG4gICAgICAgIHZhbHVlOiBnZXRWYWwoYXJyLCBpKSxcbiAgICAgICAgZGVzY3JpcHRpb246IHMuZGVzY3JpcHRpb25cbiAgICAgIH0pKTtcbiAgICAgIF90aGlzLmNvbXBsZXRpbmcgPSBmYWxzZTtcbiAgICAgIGNvbnN0IGwgPSBNYXRoLm1heChzdWdnZXN0aW9ucy5sZW5ndGggLSAxLCAwKTtcblxuICAgICAgX3RoaXMubW92ZVNlbGVjdChNYXRoLm1pbihsLCBfdGhpcy5zZWxlY3QpKTtcblxuICAgICAgY2IgJiYgY2IoKTtcbiAgICB9KSgpO1xuICB9XG5cbiAgcmVzZXQoKSB7XG4gICAgdGhpcy5pbnB1dCA9ICcnO1xuICAgIHRoaXMuY29tcGxldGUoKCkgPT4ge1xuICAgICAgdGhpcy5tb3ZlU2VsZWN0KHRoaXMuaW5pdGlhbCAhPT0gdm9pZCAwID8gdGhpcy5pbml0aWFsIDogMCk7XG4gICAgICB0aGlzLnJlbmRlcigpO1xuICAgIH0pO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBleGl0KCkge1xuICAgIGlmICh0aGlzLmNsZWFyRmlyc3QgJiYgdGhpcy5pbnB1dC5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnJlc2V0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZG9uZSA9IHRoaXMuZXhpdGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMuYWJvcnRlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5maXJlKCk7XG4gICAgICB0aGlzLnJlbmRlcigpO1xuICAgICAgdGhpcy5vdXQud3JpdGUoJ1xcbicpO1xuICAgICAgdGhpcy5jbG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIGFib3J0KCkge1xuICAgIHRoaXMuZG9uZSA9IHRoaXMuYWJvcnRlZCA9IHRydWU7XG4gICAgdGhpcy5leGl0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICAgIHRoaXMub3V0LndyaXRlKCdcXG4nKTtcbiAgICB0aGlzLmNsb3NlKCk7XG4gIH1cblxuICBzdWJtaXQoKSB7XG4gICAgdGhpcy5kb25lID0gdHJ1ZTtcbiAgICB0aGlzLmFib3J0ZWQgPSB0aGlzLmV4aXRlZCA9IGZhbHNlO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gICAgdGhpcy5vdXQud3JpdGUoJ1xcbicpO1xuICAgIHRoaXMuY2xvc2UoKTtcbiAgfVxuXG4gIF8oYywga2V5KSB7XG4gICAgbGV0IHMxID0gdGhpcy5pbnB1dC5zbGljZSgwLCB0aGlzLmN1cnNvcik7XG4gICAgbGV0IHMyID0gdGhpcy5pbnB1dC5zbGljZSh0aGlzLmN1cnNvcik7XG4gICAgdGhpcy5pbnB1dCA9IGAke3MxfSR7Y30ke3MyfWA7XG4gICAgdGhpcy5jdXJzb3IgPSBzMS5sZW5ndGggKyAxO1xuICAgIHRoaXMuY29tcGxldGUodGhpcy5yZW5kZXIpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBkZWxldGUoKSB7XG4gICAgaWYgKHRoaXMuY3Vyc29yID09PSAwKSByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgbGV0IHMxID0gdGhpcy5pbnB1dC5zbGljZSgwLCB0aGlzLmN1cnNvciAtIDEpO1xuICAgIGxldCBzMiA9IHRoaXMuaW5wdXQuc2xpY2UodGhpcy5jdXJzb3IpO1xuICAgIHRoaXMuaW5wdXQgPSBgJHtzMX0ke3MyfWA7XG4gICAgdGhpcy5jb21wbGV0ZSh0aGlzLnJlbmRlcik7XG4gICAgdGhpcy5jdXJzb3IgPSB0aGlzLmN1cnNvciAtIDE7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIGRlbGV0ZUZvcndhcmQoKSB7XG4gICAgaWYgKHRoaXMuY3Vyc29yICogdGhpcy5zY2FsZSA+PSB0aGlzLnJlbmRlcmVkLmxlbmd0aCkgcmV0dXJuIHRoaXMuYmVsbCgpO1xuICAgIGxldCBzMSA9IHRoaXMuaW5wdXQuc2xpY2UoMCwgdGhpcy5jdXJzb3IpO1xuICAgIGxldCBzMiA9IHRoaXMuaW5wdXQuc2xpY2UodGhpcy5jdXJzb3IgKyAxKTtcbiAgICB0aGlzLmlucHV0ID0gYCR7czF9JHtzMn1gO1xuICAgIHRoaXMuY29tcGxldGUodGhpcy5yZW5kZXIpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBmaXJzdCgpIHtcbiAgICB0aGlzLm1vdmVTZWxlY3QoMCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIGxhc3QoKSB7XG4gICAgdGhpcy5tb3ZlU2VsZWN0KHRoaXMuc3VnZ2VzdGlvbnMubGVuZ3RoIC0gMSk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHVwKCkge1xuICAgIGlmICh0aGlzLnNlbGVjdCA9PT0gMCkge1xuICAgICAgdGhpcy5tb3ZlU2VsZWN0KHRoaXMuc3VnZ2VzdGlvbnMubGVuZ3RoIC0gMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubW92ZVNlbGVjdCh0aGlzLnNlbGVjdCAtIDEpO1xuICAgIH1cblxuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBkb3duKCkge1xuICAgIGlmICh0aGlzLnNlbGVjdCA9PT0gdGhpcy5zdWdnZXN0aW9ucy5sZW5ndGggLSAxKSB7XG4gICAgICB0aGlzLm1vdmVTZWxlY3QoMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubW92ZVNlbGVjdCh0aGlzLnNlbGVjdCArIDEpO1xuICAgIH1cblxuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBuZXh0KCkge1xuICAgIGlmICh0aGlzLnNlbGVjdCA9PT0gdGhpcy5zdWdnZXN0aW9ucy5sZW5ndGggLSAxKSB7XG4gICAgICB0aGlzLm1vdmVTZWxlY3QoMCk7XG4gICAgfSBlbHNlIHRoaXMubW92ZVNlbGVjdCh0aGlzLnNlbGVjdCArIDEpO1xuXG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIG5leHRQYWdlKCkge1xuICAgIHRoaXMubW92ZVNlbGVjdChNYXRoLm1pbih0aGlzLnNlbGVjdCArIHRoaXMubGltaXQsIHRoaXMuc3VnZ2VzdGlvbnMubGVuZ3RoIC0gMSkpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBwcmV2UGFnZSgpIHtcbiAgICB0aGlzLm1vdmVTZWxlY3QoTWF0aC5tYXgodGhpcy5zZWxlY3QgLSB0aGlzLmxpbWl0LCAwKSk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIGxlZnQoKSB7XG4gICAgaWYgKHRoaXMuY3Vyc29yIDw9IDApIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgICB0aGlzLmN1cnNvciA9IHRoaXMuY3Vyc29yIC0gMTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgcmlnaHQoKSB7XG4gICAgaWYgKHRoaXMuY3Vyc29yICogdGhpcy5zY2FsZSA+PSB0aGlzLnJlbmRlcmVkLmxlbmd0aCkgcmV0dXJuIHRoaXMuYmVsbCgpO1xuICAgIHRoaXMuY3Vyc29yID0gdGhpcy5jdXJzb3IgKyAxO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICByZW5kZXJPcHRpb24odiwgaG92ZXJlZCwgaXNTdGFydCwgaXNFbmQpIHtcbiAgICBsZXQgZGVzYztcbiAgICBsZXQgcHJlZml4ID0gaXNTdGFydCA/IGZpZ3VyZXMuYXJyb3dVcCA6IGlzRW5kID8gZmlndXJlcy5hcnJvd0Rvd24gOiAnICc7XG4gICAgbGV0IHRpdGxlID0gaG92ZXJlZCA/IGNvbG9yLmN5YW4oKS51bmRlcmxpbmUodi50aXRsZSkgOiB2LnRpdGxlO1xuICAgIHByZWZpeCA9IChob3ZlcmVkID8gY29sb3IuY3lhbihmaWd1cmVzLnBvaW50ZXIpICsgJyAnIDogJyAgJykgKyBwcmVmaXg7XG5cbiAgICBpZiAodi5kZXNjcmlwdGlvbikge1xuICAgICAgZGVzYyA9IGAgLSAke3YuZGVzY3JpcHRpb259YDtcblxuICAgICAgaWYgKHByZWZpeC5sZW5ndGggKyB0aXRsZS5sZW5ndGggKyBkZXNjLmxlbmd0aCA+PSB0aGlzLm91dC5jb2x1bW5zIHx8IHYuZGVzY3JpcHRpb24uc3BsaXQoL1xccj9cXG4vKS5sZW5ndGggPiAxKSB7XG4gICAgICAgIGRlc2MgPSAnXFxuJyArIHdyYXAodi5kZXNjcmlwdGlvbiwge1xuICAgICAgICAgIG1hcmdpbjogMyxcbiAgICAgICAgICB3aWR0aDogdGhpcy5vdXQuY29sdW1uc1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcHJlZml4ICsgJyAnICsgdGl0bGUgKyBjb2xvci5ncmF5KGRlc2MgfHwgJycpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGlmICh0aGlzLmNsb3NlZCkgcmV0dXJuO1xuICAgIGlmICh0aGlzLmZpcnN0UmVuZGVyKSB0aGlzLm91dC53cml0ZShjdXJzb3IuaGlkZSk7ZWxzZSB0aGlzLm91dC53cml0ZShjbGVhcih0aGlzLm91dHB1dFRleHQsIHRoaXMub3V0LmNvbHVtbnMpKTtcbiAgICBzdXBlci5yZW5kZXIoKTtcblxuICAgIGxldCBfZW50cmllc1RvRGlzcGxheSA9IGVudHJpZXNUb0Rpc3BsYXkodGhpcy5zZWxlY3QsIHRoaXMuY2hvaWNlcy5sZW5ndGgsIHRoaXMubGltaXQpLFxuICAgICAgICBzdGFydEluZGV4ID0gX2VudHJpZXNUb0Rpc3BsYXkuc3RhcnRJbmRleCxcbiAgICAgICAgZW5kSW5kZXggPSBfZW50cmllc1RvRGlzcGxheS5lbmRJbmRleDtcblxuICAgIHRoaXMub3V0cHV0VGV4dCA9IFtzdHlsZS5zeW1ib2wodGhpcy5kb25lLCB0aGlzLmFib3J0ZWQsIHRoaXMuZXhpdGVkKSwgY29sb3IuYm9sZCh0aGlzLm1zZyksIHN0eWxlLmRlbGltaXRlcih0aGlzLmNvbXBsZXRpbmcpLCB0aGlzLmRvbmUgJiYgdGhpcy5zdWdnZXN0aW9uc1t0aGlzLnNlbGVjdF0gPyB0aGlzLnN1Z2dlc3Rpb25zW3RoaXMuc2VsZWN0XS50aXRsZSA6IHRoaXMucmVuZGVyZWQgPSB0aGlzLnRyYW5zZm9ybS5yZW5kZXIodGhpcy5pbnB1dCldLmpvaW4oJyAnKTtcblxuICAgIGlmICghdGhpcy5kb25lKSB7XG4gICAgICBjb25zdCBzdWdnZXN0aW9ucyA9IHRoaXMuc3VnZ2VzdGlvbnMuc2xpY2Uoc3RhcnRJbmRleCwgZW5kSW5kZXgpLm1hcCgoaXRlbSwgaSkgPT4gdGhpcy5yZW5kZXJPcHRpb24oaXRlbSwgdGhpcy5zZWxlY3QgPT09IGkgKyBzdGFydEluZGV4LCBpID09PSAwICYmIHN0YXJ0SW5kZXggPiAwLCBpICsgc3RhcnRJbmRleCA9PT0gZW5kSW5kZXggLSAxICYmIGVuZEluZGV4IDwgdGhpcy5jaG9pY2VzLmxlbmd0aCkpLmpvaW4oJ1xcbicpO1xuICAgICAgdGhpcy5vdXRwdXRUZXh0ICs9IGBcXG5gICsgKHN1Z2dlc3Rpb25zIHx8IGNvbG9yLmdyYXkodGhpcy5mYWxsYmFjay50aXRsZSkpO1xuICAgIH1cblxuICAgIHRoaXMub3V0LndyaXRlKGVyYXNlLmxpbmUgKyBjdXJzb3IudG8oMCkgKyB0aGlzLm91dHB1dFRleHQpO1xuICB9XG5cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBBdXRvY29tcGxldGVQcm9tcHQ7IiwiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBjb2xvciA9IHJlcXVpcmUoJ2tsZXVyJyk7XG5cbmNvbnN0IF9yZXF1aXJlID0gcmVxdWlyZSgnc2lzdGVyYW5zaScpLFxuICAgICAgY3Vyc29yID0gX3JlcXVpcmUuY3Vyc29yO1xuXG5jb25zdCBNdWx0aXNlbGVjdFByb21wdCA9IHJlcXVpcmUoJy4vbXVsdGlzZWxlY3QnKTtcblxuY29uc3QgX3JlcXVpcmUyID0gcmVxdWlyZSgnLi4vdXRpbCcpLFxuICAgICAgY2xlYXIgPSBfcmVxdWlyZTIuY2xlYXIsXG4gICAgICBzdHlsZSA9IF9yZXF1aXJlMi5zdHlsZSxcbiAgICAgIGZpZ3VyZXMgPSBfcmVxdWlyZTIuZmlndXJlcztcbi8qKlxuICogTXVsdGlzZWxlY3RQcm9tcHQgQmFzZSBFbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyBPcHRpb25zXG4gKiBAcGFyYW0ge1N0cmluZ30gb3B0cy5tZXNzYWdlIE1lc3NhZ2VcbiAqIEBwYXJhbSB7QXJyYXl9IG9wdHMuY2hvaWNlcyBBcnJheSBvZiBjaG9pY2Ugb2JqZWN0c1xuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLmhpbnRdIEhpbnQgdG8gZGlzcGxheVxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLndhcm5dIEhpbnQgc2hvd24gZm9yIGRpc2FibGVkIGNob2ljZXNcbiAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0cy5tYXhdIE1heCBjaG9pY2VzXG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMuY3Vyc29yPTBdIEN1cnNvciBzdGFydCBwb3NpdGlvblxuICogQHBhcmFtIHtTdHJlYW19IFtvcHRzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFtvcHRzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKi9cblxuXG5jbGFzcyBBdXRvY29tcGxldGVNdWx0aXNlbGVjdFByb21wdCBleHRlbmRzIE11bHRpc2VsZWN0UHJvbXB0IHtcbiAgY29uc3RydWN0b3Iob3B0cyA9IHt9KSB7XG4gICAgb3B0cy5vdmVycmlkZVJlbmRlciA9IHRydWU7XG4gICAgc3VwZXIob3B0cyk7XG4gICAgdGhpcy5pbnB1dFZhbHVlID0gJyc7XG4gICAgdGhpcy5jbGVhciA9IGNsZWFyKCcnLCB0aGlzLm91dC5jb2x1bW5zKTtcbiAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IHRoaXMudmFsdWU7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIGxhc3QoKSB7XG4gICAgdGhpcy5jdXJzb3IgPSB0aGlzLmZpbHRlcmVkT3B0aW9ucy5sZW5ndGggLSAxO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBuZXh0KCkge1xuICAgIHRoaXMuY3Vyc29yID0gKHRoaXMuY3Vyc29yICsgMSkgJSB0aGlzLmZpbHRlcmVkT3B0aW9ucy5sZW5ndGg7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHVwKCkge1xuICAgIGlmICh0aGlzLmN1cnNvciA9PT0gMCkge1xuICAgICAgdGhpcy5jdXJzb3IgPSB0aGlzLmZpbHRlcmVkT3B0aW9ucy5sZW5ndGggLSAxO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmN1cnNvci0tO1xuICAgIH1cblxuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBkb3duKCkge1xuICAgIGlmICh0aGlzLmN1cnNvciA9PT0gdGhpcy5maWx0ZXJlZE9wdGlvbnMubGVuZ3RoIC0gMSkge1xuICAgICAgdGhpcy5jdXJzb3IgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmN1cnNvcisrO1xuICAgIH1cblxuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBsZWZ0KCkge1xuICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zW3RoaXMuY3Vyc29yXS5zZWxlY3RlZCA9IGZhbHNlO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICByaWdodCgpIHtcbiAgICBpZiAodGhpcy52YWx1ZS5maWx0ZXIoZSA9PiBlLnNlbGVjdGVkKS5sZW5ndGggPj0gdGhpcy5tYXhDaG9pY2VzKSByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgdGhpcy5maWx0ZXJlZE9wdGlvbnNbdGhpcy5jdXJzb3JdLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZGVsZXRlKCkge1xuICAgIGlmICh0aGlzLmlucHV0VmFsdWUubGVuZ3RoKSB7XG4gICAgICB0aGlzLmlucHV0VmFsdWUgPSB0aGlzLmlucHV0VmFsdWUuc3Vic3RyKDAsIHRoaXMuaW5wdXRWYWx1ZS5sZW5ndGggLSAxKTtcbiAgICAgIHRoaXMudXBkYXRlRmlsdGVyZWRPcHRpb25zKCk7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlRmlsdGVyZWRPcHRpb25zKCkge1xuICAgIGNvbnN0IGN1cnJlbnRIaWdobGlnaHQgPSB0aGlzLmZpbHRlcmVkT3B0aW9uc1t0aGlzLmN1cnNvcl07XG4gICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSB0aGlzLnZhbHVlLmZpbHRlcih2ID0+IHtcbiAgICAgIGlmICh0aGlzLmlucHV0VmFsdWUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB2LnRpdGxlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIGlmICh2LnRpdGxlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5pbnB1dFZhbHVlLnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIHYudmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgaWYgKHYudmFsdWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLmlucHV0VmFsdWUudG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG4gICAgY29uc3QgbmV3SGlnaGxpZ2h0SW5kZXggPSB0aGlzLmZpbHRlcmVkT3B0aW9ucy5maW5kSW5kZXgodiA9PiB2ID09PSBjdXJyZW50SGlnaGxpZ2h0KTtcbiAgICB0aGlzLmN1cnNvciA9IG5ld0hpZ2hsaWdodEluZGV4IDwgMCA/IDAgOiBuZXdIaWdobGlnaHRJbmRleDtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgaGFuZGxlU3BhY2VUb2dnbGUoKSB7XG4gICAgY29uc3QgdiA9IHRoaXMuZmlsdGVyZWRPcHRpb25zW3RoaXMuY3Vyc29yXTtcblxuICAgIGlmICh2LnNlbGVjdGVkKSB7XG4gICAgICB2LnNlbGVjdGVkID0gZmFsc2U7XG4gICAgICB0aGlzLnJlbmRlcigpO1xuICAgIH0gZWxzZSBpZiAodi5kaXNhYmxlZCB8fCB0aGlzLnZhbHVlLmZpbHRlcihlID0+IGUuc2VsZWN0ZWQpLmxlbmd0aCA+PSB0aGlzLm1heENob2ljZXMpIHtcbiAgICAgIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdi5zZWxlY3RlZCA9IHRydWU7XG4gICAgICB0aGlzLnJlbmRlcigpO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZUlucHV0Q2hhbmdlKGMpIHtcbiAgICB0aGlzLmlucHV0VmFsdWUgPSB0aGlzLmlucHV0VmFsdWUgKyBjO1xuICAgIHRoaXMudXBkYXRlRmlsdGVyZWRPcHRpb25zKCk7XG4gIH1cblxuICBfKGMsIGtleSkge1xuICAgIGlmIChjID09PSAnICcpIHtcbiAgICAgIHRoaXMuaGFuZGxlU3BhY2VUb2dnbGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5oYW5kbGVJbnB1dENoYW5nZShjKTtcbiAgICB9XG4gIH1cblxuICByZW5kZXJJbnN0cnVjdGlvbnMoKSB7XG4gICAgaWYgKHRoaXMuaW5zdHJ1Y3Rpb25zID09PSB1bmRlZmluZWQgfHwgdGhpcy5pbnN0cnVjdGlvbnMpIHtcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5pbnN0cnVjdGlvbnMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmluc3RydWN0aW9ucztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGBcbkluc3RydWN0aW9uczpcbiAgICAke2ZpZ3VyZXMuYXJyb3dVcH0vJHtmaWd1cmVzLmFycm93RG93bn06IEhpZ2hsaWdodCBvcHRpb25cbiAgICAke2ZpZ3VyZXMuYXJyb3dMZWZ0fS8ke2ZpZ3VyZXMuYXJyb3dSaWdodH0vW3NwYWNlXTogVG9nZ2xlIHNlbGVjdGlvblxuICAgIFthLGIsY10vZGVsZXRlOiBGaWx0ZXIgY2hvaWNlc1xuICAgIGVudGVyL3JldHVybjogQ29tcGxldGUgYW5zd2VyXG5gO1xuICAgIH1cblxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIHJlbmRlckN1cnJlbnRJbnB1dCgpIHtcbiAgICByZXR1cm4gYFxuRmlsdGVyZWQgcmVzdWx0cyBmb3I6ICR7dGhpcy5pbnB1dFZhbHVlID8gdGhpcy5pbnB1dFZhbHVlIDogY29sb3IuZ3JheSgnRW50ZXIgc29tZXRoaW5nIHRvIGZpbHRlcicpfVxcbmA7XG4gIH1cblxuICByZW5kZXJPcHRpb24oY3Vyc29yLCB2LCBpKSB7XG4gICAgbGV0IHRpdGxlO1xuICAgIGlmICh2LmRpc2FibGVkKSB0aXRsZSA9IGN1cnNvciA9PT0gaSA/IGNvbG9yLmdyYXkoKS51bmRlcmxpbmUodi50aXRsZSkgOiBjb2xvci5zdHJpa2V0aHJvdWdoKCkuZ3JheSh2LnRpdGxlKTtlbHNlIHRpdGxlID0gY3Vyc29yID09PSBpID8gY29sb3IuY3lhbigpLnVuZGVybGluZSh2LnRpdGxlKSA6IHYudGl0bGU7XG4gICAgcmV0dXJuICh2LnNlbGVjdGVkID8gY29sb3IuZ3JlZW4oZmlndXJlcy5yYWRpb09uKSA6IGZpZ3VyZXMucmFkaW9PZmYpICsgJyAgJyArIHRpdGxlO1xuICB9XG5cbiAgcmVuZGVyRG9uZU9ySW5zdHJ1Y3Rpb25zKCkge1xuICAgIGlmICh0aGlzLmRvbmUpIHtcbiAgICAgIHJldHVybiB0aGlzLnZhbHVlLmZpbHRlcihlID0+IGUuc2VsZWN0ZWQpLm1hcCh2ID0+IHYudGl0bGUpLmpvaW4oJywgJyk7XG4gICAgfVxuXG4gICAgY29uc3Qgb3V0cHV0ID0gW2NvbG9yLmdyYXkodGhpcy5oaW50KSwgdGhpcy5yZW5kZXJJbnN0cnVjdGlvbnMoKSwgdGhpcy5yZW5kZXJDdXJyZW50SW5wdXQoKV07XG5cbiAgICBpZiAodGhpcy5maWx0ZXJlZE9wdGlvbnMubGVuZ3RoICYmIHRoaXMuZmlsdGVyZWRPcHRpb25zW3RoaXMuY3Vyc29yXS5kaXNhYmxlZCkge1xuICAgICAgb3V0cHV0LnB1c2goY29sb3IueWVsbG93KHRoaXMud2FybikpO1xuICAgIH1cblxuICAgIHJldHVybiBvdXRwdXQuam9pbignICcpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGlmICh0aGlzLmNsb3NlZCkgcmV0dXJuO1xuICAgIGlmICh0aGlzLmZpcnN0UmVuZGVyKSB0aGlzLm91dC53cml0ZShjdXJzb3IuaGlkZSk7XG4gICAgc3VwZXIucmVuZGVyKCk7IC8vIHByaW50IHByb21wdFxuXG4gICAgbGV0IHByb21wdCA9IFtzdHlsZS5zeW1ib2wodGhpcy5kb25lLCB0aGlzLmFib3J0ZWQpLCBjb2xvci5ib2xkKHRoaXMubXNnKSwgc3R5bGUuZGVsaW1pdGVyKGZhbHNlKSwgdGhpcy5yZW5kZXJEb25lT3JJbnN0cnVjdGlvbnMoKV0uam9pbignICcpO1xuXG4gICAgaWYgKHRoaXMuc2hvd01pbkVycm9yKSB7XG4gICAgICBwcm9tcHQgKz0gY29sb3IucmVkKGBZb3UgbXVzdCBzZWxlY3QgYSBtaW5pbXVtIG9mICR7dGhpcy5taW5TZWxlY3RlZH0gY2hvaWNlcy5gKTtcbiAgICAgIHRoaXMuc2hvd01pbkVycm9yID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcHJvbXB0ICs9IHRoaXMucmVuZGVyT3B0aW9ucyh0aGlzLmZpbHRlcmVkT3B0aW9ucyk7XG4gICAgdGhpcy5vdXQud3JpdGUodGhpcy5jbGVhciArIHByb21wdCk7XG4gICAgdGhpcy5jbGVhciA9IGNsZWFyKHByb21wdCwgdGhpcy5vdXQuY29sdW1ucyk7XG4gIH1cblxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEF1dG9jb21wbGV0ZU11bHRpc2VsZWN0UHJvbXB0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBjb2xvciA9IHJlcXVpcmUoJ2tsZXVyJyk7XG5cbmNvbnN0IFByb21wdCA9IHJlcXVpcmUoJy4vcHJvbXB0Jyk7XG5cbmNvbnN0IF9yZXF1aXJlID0gcmVxdWlyZSgnLi4vdXRpbCcpLFxuICAgICAgc3R5bGUgPSBfcmVxdWlyZS5zdHlsZSxcbiAgICAgIGNsZWFyID0gX3JlcXVpcmUuY2xlYXI7XG5cbmNvbnN0IF9yZXF1aXJlMiA9IHJlcXVpcmUoJ3Npc3RlcmFuc2knKSxcbiAgICAgIGVyYXNlID0gX3JlcXVpcmUyLmVyYXNlLFxuICAgICAgY3Vyc29yID0gX3JlcXVpcmUyLmN1cnNvcjtcbi8qKlxuICogQ29uZmlybVByb21wdCBCYXNlIEVsZW1lbnRcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIE9wdGlvbnNcbiAqIEBwYXJhbSB7U3RyaW5nfSBvcHRzLm1lc3NhZ2UgTWVzc2FnZVxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0cy5pbml0aWFsXSBEZWZhdWx0IHZhbHVlICh0cnVlL2ZhbHNlKVxuICogQHBhcmFtIHtTdHJlYW19IFtvcHRzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFtvcHRzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKiBAcGFyYW0ge1N0cmluZ30gW29wdHMueWVzXSBUaGUgXCJZZXNcIiBsYWJlbFxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLnllc09wdGlvbl0gVGhlIFwiWWVzXCIgb3B0aW9uIHdoZW4gY2hvb3NpbmcgYmV0d2VlbiB5ZXMvbm9cbiAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5ub10gVGhlIFwiTm9cIiBsYWJlbFxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLm5vT3B0aW9uXSBUaGUgXCJOb1wiIG9wdGlvbiB3aGVuIGNob29zaW5nIGJldHdlZW4geWVzL25vXG4gKi9cblxuXG5jbGFzcyBDb25maXJtUHJvbXB0IGV4dGVuZHMgUHJvbXB0IHtcbiAgY29uc3RydWN0b3Iob3B0cyA9IHt9KSB7XG4gICAgc3VwZXIob3B0cyk7XG4gICAgdGhpcy5tc2cgPSBvcHRzLm1lc3NhZ2U7XG4gICAgdGhpcy52YWx1ZSA9IG9wdHMuaW5pdGlhbDtcbiAgICB0aGlzLmluaXRpYWxWYWx1ZSA9ICEhb3B0cy5pbml0aWFsO1xuICAgIHRoaXMueWVzTXNnID0gb3B0cy55ZXMgfHwgJ3llcyc7XG4gICAgdGhpcy55ZXNPcHRpb24gPSBvcHRzLnllc09wdGlvbiB8fCAnKFkvbiknO1xuICAgIHRoaXMubm9Nc2cgPSBvcHRzLm5vIHx8ICdubyc7XG4gICAgdGhpcy5ub09wdGlvbiA9IG9wdHMubm9PcHRpb24gfHwgJyh5L04pJztcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgcmVzZXQoKSB7XG4gICAgdGhpcy52YWx1ZSA9IHRoaXMuaW5pdGlhbFZhbHVlO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBleGl0KCkge1xuICAgIHRoaXMuYWJvcnQoKTtcbiAgfVxuXG4gIGFib3J0KCkge1xuICAgIHRoaXMuZG9uZSA9IHRoaXMuYWJvcnRlZCA9IHRydWU7XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgICB0aGlzLm91dC53cml0ZSgnXFxuJyk7XG4gICAgdGhpcy5jbG9zZSgpO1xuICB9XG5cbiAgc3VibWl0KCkge1xuICAgIHRoaXMudmFsdWUgPSB0aGlzLnZhbHVlIHx8IGZhbHNlO1xuICAgIHRoaXMuZG9uZSA9IHRydWU7XG4gICAgdGhpcy5hYm9ydGVkID0gZmFsc2U7XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgICB0aGlzLm91dC53cml0ZSgnXFxuJyk7XG4gICAgdGhpcy5jbG9zZSgpO1xuICB9XG5cbiAgXyhjLCBrZXkpIHtcbiAgICBpZiAoYy50b0xvd2VyQ2FzZSgpID09PSAneScpIHtcbiAgICAgIHRoaXMudmFsdWUgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRoaXMuc3VibWl0KCk7XG4gICAgfVxuXG4gICAgaWYgKGMudG9Mb3dlckNhc2UoKSA9PT0gJ24nKSB7XG4gICAgICB0aGlzLnZhbHVlID0gZmFsc2U7XG4gICAgICByZXR1cm4gdGhpcy5zdWJtaXQoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5iZWxsKCk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgaWYgKHRoaXMuY2xvc2VkKSByZXR1cm47XG4gICAgaWYgKHRoaXMuZmlyc3RSZW5kZXIpIHRoaXMub3V0LndyaXRlKGN1cnNvci5oaWRlKTtlbHNlIHRoaXMub3V0LndyaXRlKGNsZWFyKHRoaXMub3V0cHV0VGV4dCwgdGhpcy5vdXQuY29sdW1ucykpO1xuICAgIHN1cGVyLnJlbmRlcigpO1xuICAgIHRoaXMub3V0cHV0VGV4dCA9IFtzdHlsZS5zeW1ib2wodGhpcy5kb25lLCB0aGlzLmFib3J0ZWQpLCBjb2xvci5ib2xkKHRoaXMubXNnKSwgc3R5bGUuZGVsaW1pdGVyKHRoaXMuZG9uZSksIHRoaXMuZG9uZSA/IHRoaXMudmFsdWUgPyB0aGlzLnllc01zZyA6IHRoaXMubm9Nc2cgOiBjb2xvci5ncmF5KHRoaXMuaW5pdGlhbFZhbHVlID8gdGhpcy55ZXNPcHRpb24gOiB0aGlzLm5vT3B0aW9uKV0uam9pbignICcpO1xuICAgIHRoaXMub3V0LndyaXRlKGVyYXNlLmxpbmUgKyBjdXJzb3IudG8oMCkgKyB0aGlzLm91dHB1dFRleHQpO1xuICB9XG5cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBDb25maXJtUHJvbXB0OyIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIFRleHRQcm9tcHQ6IHJlcXVpcmUoJy4vdGV4dCcpLFxuICBTZWxlY3RQcm9tcHQ6IHJlcXVpcmUoJy4vc2VsZWN0JyksXG4gIFRvZ2dsZVByb21wdDogcmVxdWlyZSgnLi90b2dnbGUnKSxcbiAgRGF0ZVByb21wdDogcmVxdWlyZSgnLi9kYXRlJyksXG4gIE51bWJlclByb21wdDogcmVxdWlyZSgnLi9udW1iZXInKSxcbiAgTXVsdGlzZWxlY3RQcm9tcHQ6IHJlcXVpcmUoJy4vbXVsdGlzZWxlY3QnKSxcbiAgQXV0b2NvbXBsZXRlUHJvbXB0OiByZXF1aXJlKCcuL2F1dG9jb21wbGV0ZScpLFxuICBBdXRvY29tcGxldGVNdWx0aXNlbGVjdFByb21wdDogcmVxdWlyZSgnLi9hdXRvY29tcGxldGVNdWx0aXNlbGVjdCcpLFxuICBDb25maXJtUHJvbXB0OiByZXF1aXJlKCcuL2NvbmZpcm0nKVxufTsiLCIndXNlIHN0cmljdCc7XG5cbmNvbnN0ICQgPSBleHBvcnRzO1xuXG5jb25zdCBlbCA9IHJlcXVpcmUoJy4vZWxlbWVudHMnKTtcblxuY29uc3Qgbm9vcCA9IHYgPT4gdjtcblxuZnVuY3Rpb24gdG9Qcm9tcHQodHlwZSwgYXJncywgb3B0cyA9IHt9KSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzLCByZWopID0+IHtcbiAgICBjb25zdCBwID0gbmV3IGVsW3R5cGVdKGFyZ3MpO1xuICAgIGNvbnN0IG9uQWJvcnQgPSBvcHRzLm9uQWJvcnQgfHwgbm9vcDtcbiAgICBjb25zdCBvblN1Ym1pdCA9IG9wdHMub25TdWJtaXQgfHwgbm9vcDtcbiAgICBjb25zdCBvbkV4aXQgPSBvcHRzLm9uRXhpdCB8fCBub29wO1xuICAgIHAub24oJ3N0YXRlJywgYXJncy5vblN0YXRlIHx8IG5vb3ApO1xuICAgIHAub24oJ3N1Ym1pdCcsIHggPT4gcmVzKG9uU3VibWl0KHgpKSk7XG4gICAgcC5vbignZXhpdCcsIHggPT4gcmVzKG9uRXhpdCh4KSkpO1xuICAgIHAub24oJ2Fib3J0JywgeCA9PiByZWoob25BYm9ydCh4KSkpO1xuICB9KTtcbn1cbi8qKlxuICogVGV4dCBwcm9tcHRcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLm1lc3NhZ2UgUHJvbXB0IG1lc3NhZ2UgdG8gZGlzcGxheVxuICogQHBhcmFtIHtzdHJpbmd9IFthcmdzLmluaXRpYWxdIERlZmF1bHQgc3RyaW5nIHZhbHVlXG4gKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3Muc3R5bGU9XCJkZWZhdWx0XCJdIFJlbmRlciBzdHlsZSAoJ2RlZmF1bHQnLCAncGFzc3dvcmQnLCAnaW52aXNpYmxlJylcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IFthcmdzLm9uU3RhdGVdIE9uIHN0YXRlIGNoYW5nZSBjYWxsYmFja1xuICogQHBhcmFtIHtmdW5jdGlvbn0gW2FyZ3MudmFsaWRhdGVdIEZ1bmN0aW9uIHRvIHZhbGlkYXRlIHVzZXIgaW5wdXRcbiAqIEBwYXJhbSB7U3RyZWFtfSBbYXJncy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbYXJncy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICogQHJldHVybnMge1Byb21pc2V9IFByb21pc2Ugd2l0aCB1c2VyIGlucHV0XG4gKi9cblxuXG4kLnRleHQgPSBhcmdzID0+IHRvUHJvbXB0KCdUZXh0UHJvbXB0JywgYXJncyk7XG4vKipcbiAqIFBhc3N3b3JkIHByb21wdCB3aXRoIG1hc2tlZCBpbnB1dFxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MubWVzc2FnZSBQcm9tcHQgbWVzc2FnZSB0byBkaXNwbGF5XG4gKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3MuaW5pdGlhbF0gRGVmYXVsdCBzdHJpbmcgdmFsdWVcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IFthcmdzLm9uU3RhdGVdIE9uIHN0YXRlIGNoYW5nZSBjYWxsYmFja1xuICogQHBhcmFtIHtmdW5jdGlvbn0gW2FyZ3MudmFsaWRhdGVdIEZ1bmN0aW9uIHRvIHZhbGlkYXRlIHVzZXIgaW5wdXRcbiAqIEBwYXJhbSB7U3RyZWFtfSBbYXJncy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbYXJncy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICogQHJldHVybnMge1Byb21pc2V9IFByb21pc2Ugd2l0aCB1c2VyIGlucHV0XG4gKi9cblxuXG4kLnBhc3N3b3JkID0gYXJncyA9PiB7XG4gIGFyZ3Muc3R5bGUgPSAncGFzc3dvcmQnO1xuICByZXR1cm4gJC50ZXh0KGFyZ3MpO1xufTtcbi8qKlxuICogUHJvbXB0IHdoZXJlIGlucHV0IGlzIGludmlzaWJsZSwgbGlrZSBzdWRvXG4gKiBAcGFyYW0ge3N0cmluZ30gYXJncy5tZXNzYWdlIFByb21wdCBtZXNzYWdlIHRvIGRpc3BsYXlcbiAqIEBwYXJhbSB7c3RyaW5nfSBbYXJncy5pbml0aWFsXSBEZWZhdWx0IHN0cmluZyB2YWx1ZVxuICogQHBhcmFtIHtmdW5jdGlvbn0gW2FyZ3Mub25TdGF0ZV0gT24gc3RhdGUgY2hhbmdlIGNhbGxiYWNrXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBbYXJncy52YWxpZGF0ZV0gRnVuY3Rpb24gdG8gdmFsaWRhdGUgdXNlciBpbnB1dFxuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSB3aXRoIHVzZXIgaW5wdXRcbiAqL1xuXG5cbiQuaW52aXNpYmxlID0gYXJncyA9PiB7XG4gIGFyZ3Muc3R5bGUgPSAnaW52aXNpYmxlJztcbiAgcmV0dXJuICQudGV4dChhcmdzKTtcbn07XG4vKipcbiAqIE51bWJlciBwcm9tcHRcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLm1lc3NhZ2UgUHJvbXB0IG1lc3NhZ2UgdG8gZGlzcGxheVxuICogQHBhcmFtIHtudW1iZXJ9IGFyZ3MuaW5pdGlhbCBEZWZhdWx0IG51bWJlciB2YWx1ZVxuICogQHBhcmFtIHtmdW5jdGlvbn0gW2FyZ3Mub25TdGF0ZV0gT24gc3RhdGUgY2hhbmdlIGNhbGxiYWNrXG4gKiBAcGFyYW0ge251bWJlcn0gW2FyZ3MubWF4XSBNYXggdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBbYXJncy5taW5dIE1pbiB2YWx1ZVxuICogQHBhcmFtIHtzdHJpbmd9IFthcmdzLnN0eWxlPVwiZGVmYXVsdFwiXSBSZW5kZXIgc3R5bGUgKCdkZWZhdWx0JywgJ3Bhc3N3b3JkJywgJ2ludmlzaWJsZScpXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRzLmZsb2F0PWZhbHNlXSBQYXJzZSBpbnB1dCBhcyBmbG9hdHNcbiAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0cy5yb3VuZD0yXSBSb3VuZCBmbG9hdHMgdG8geCBkZWNpbWFsc1xuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLmluY3JlbWVudD0xXSBOdW1iZXIgdG8gaW5jcmVtZW50IGJ5IHdoZW4gdXNpbmcgYXJyb3cta2V5c1xuICogQHBhcmFtIHtmdW5jdGlvbn0gW2FyZ3MudmFsaWRhdGVdIEZ1bmN0aW9uIHRvIHZhbGlkYXRlIHVzZXIgaW5wdXRcbiAqIEBwYXJhbSB7U3RyZWFtfSBbYXJncy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbYXJncy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICogQHJldHVybnMge1Byb21pc2V9IFByb21pc2Ugd2l0aCB1c2VyIGlucHV0XG4gKi9cblxuXG4kLm51bWJlciA9IGFyZ3MgPT4gdG9Qcm9tcHQoJ051bWJlclByb21wdCcsIGFyZ3MpO1xuLyoqXG4gKiBEYXRlIHByb21wdFxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MubWVzc2FnZSBQcm9tcHQgbWVzc2FnZSB0byBkaXNwbGF5XG4gKiBAcGFyYW0ge251bWJlcn0gYXJncy5pbml0aWFsIERlZmF1bHQgbnVtYmVyIHZhbHVlXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBbYXJncy5vblN0YXRlXSBPbiBzdGF0ZSBjaGFuZ2UgY2FsbGJhY2tcbiAqIEBwYXJhbSB7bnVtYmVyfSBbYXJncy5tYXhdIE1heCB2YWx1ZVxuICogQHBhcmFtIHtudW1iZXJ9IFthcmdzLm1pbl0gTWluIHZhbHVlXG4gKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3Muc3R5bGU9XCJkZWZhdWx0XCJdIFJlbmRlciBzdHlsZSAoJ2RlZmF1bHQnLCAncGFzc3dvcmQnLCAnaW52aXNpYmxlJylcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdHMuZmxvYXQ9ZmFsc2VdIFBhcnNlIGlucHV0IGFzIGZsb2F0c1xuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLnJvdW5kPTJdIFJvdW5kIGZsb2F0cyB0byB4IGRlY2ltYWxzXG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMuaW5jcmVtZW50PTFdIE51bWJlciB0byBpbmNyZW1lbnQgYnkgd2hlbiB1c2luZyBhcnJvdy1rZXlzXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBbYXJncy52YWxpZGF0ZV0gRnVuY3Rpb24gdG8gdmFsaWRhdGUgdXNlciBpbnB1dFxuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSB3aXRoIHVzZXIgaW5wdXRcbiAqL1xuXG5cbiQuZGF0ZSA9IGFyZ3MgPT4gdG9Qcm9tcHQoJ0RhdGVQcm9tcHQnLCBhcmdzKTtcbi8qKlxuICogQ2xhc3NpYyB5ZXMvbm8gcHJvbXB0XG4gKiBAcGFyYW0ge3N0cmluZ30gYXJncy5tZXNzYWdlIFByb21wdCBtZXNzYWdlIHRvIGRpc3BsYXlcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2FyZ3MuaW5pdGlhbD1mYWxzZV0gRGVmYXVsdCB2YWx1ZVxuICogQHBhcmFtIHtmdW5jdGlvbn0gW2FyZ3Mub25TdGF0ZV0gT24gc3RhdGUgY2hhbmdlIGNhbGxiYWNrXG4gKiBAcGFyYW0ge1N0cmVhbX0gW2FyZ3Muc3RkaW5dIFRoZSBSZWFkYWJsZSBzdHJlYW0gdG8gbGlzdGVuIHRvXG4gKiBAcGFyYW0ge1N0cmVhbX0gW2FyZ3Muc3Rkb3V0XSBUaGUgV3JpdGFibGUgc3RyZWFtIHRvIHdyaXRlIHJlYWRsaW5lIGRhdGEgdG9cbiAqIEByZXR1cm5zIHtQcm9taXNlfSBQcm9taXNlIHdpdGggdXNlciBpbnB1dFxuICovXG5cblxuJC5jb25maXJtID0gYXJncyA9PiB0b1Byb21wdCgnQ29uZmlybVByb21wdCcsIGFyZ3MpO1xuLyoqXG4gKiBMaXN0IHByb21wdCwgc3BsaXQgaW50cHV0IHN0cmluZyBieSBgc2VwZXJhdG9yYFxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MubWVzc2FnZSBQcm9tcHQgbWVzc2FnZSB0byBkaXNwbGF5XG4gKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3MuaW5pdGlhbF0gRGVmYXVsdCBzdHJpbmcgdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBbYXJncy5zdHlsZT1cImRlZmF1bHRcIl0gUmVuZGVyIHN0eWxlICgnZGVmYXVsdCcsICdwYXNzd29yZCcsICdpbnZpc2libGUnKVxuICogQHBhcmFtIHtzdHJpbmd9IFthcmdzLnNlcGFyYXRvcl0gU3RyaW5nIHNlcGFyYXRvclxuICogQHBhcmFtIHtmdW5jdGlvbn0gW2FyZ3Mub25TdGF0ZV0gT24gc3RhdGUgY2hhbmdlIGNhbGxiYWNrXG4gKiBAcGFyYW0ge1N0cmVhbX0gW2FyZ3Muc3RkaW5dIFRoZSBSZWFkYWJsZSBzdHJlYW0gdG8gbGlzdGVuIHRvXG4gKiBAcGFyYW0ge1N0cmVhbX0gW2FyZ3Muc3Rkb3V0XSBUaGUgV3JpdGFibGUgc3RyZWFtIHRvIHdyaXRlIHJlYWRsaW5lIGRhdGEgdG9cbiAqIEByZXR1cm5zIHtQcm9taXNlfSBQcm9taXNlIHdpdGggdXNlciBpbnB1dCwgaW4gZm9ybSBvZiBhbiBgQXJyYXlgXG4gKi9cblxuXG4kLmxpc3QgPSBhcmdzID0+IHtcbiAgY29uc3Qgc2VwID0gYXJncy5zZXBhcmF0b3IgfHwgJywnO1xuICByZXR1cm4gdG9Qcm9tcHQoJ1RleHRQcm9tcHQnLCBhcmdzLCB7XG4gICAgb25TdWJtaXQ6IHN0ciA9PiBzdHIuc3BsaXQoc2VwKS5tYXAocyA9PiBzLnRyaW0oKSlcbiAgfSk7XG59O1xuLyoqXG4gKiBUb2dnbGUvc3dpdGNoIHByb21wdFxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MubWVzc2FnZSBQcm9tcHQgbWVzc2FnZSB0byBkaXNwbGF5XG4gKiBAcGFyYW0ge2Jvb2xlYW59IFthcmdzLmluaXRpYWw9ZmFsc2VdIERlZmF1bHQgdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBbYXJncy5hY3RpdmU9XCJvblwiXSBUZXh0IGZvciBgYWN0aXZlYCBzdGF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IFthcmdzLmluYWN0aXZlPVwib2ZmXCJdIFRleHQgZm9yIGBpbmFjdGl2ZWAgc3RhdGVcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IFthcmdzLm9uU3RhdGVdIE9uIHN0YXRlIGNoYW5nZSBjYWxsYmFja1xuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSB3aXRoIHVzZXIgaW5wdXRcbiAqL1xuXG5cbiQudG9nZ2xlID0gYXJncyA9PiB0b1Byb21wdCgnVG9nZ2xlUHJvbXB0JywgYXJncyk7XG4vKipcbiAqIEludGVyYWN0aXZlIHNlbGVjdCBwcm9tcHRcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLm1lc3NhZ2UgUHJvbXB0IG1lc3NhZ2UgdG8gZGlzcGxheVxuICogQHBhcmFtIHtBcnJheX0gYXJncy5jaG9pY2VzIEFycmF5IG9mIGNob2ljZXMgb2JqZWN0cyBgW3sgdGl0bGUsIHZhbHVlIH0sIC4uLl1gXG4gKiBAcGFyYW0ge251bWJlcn0gW2FyZ3MuaW5pdGlhbF0gSW5kZXggb2YgZGVmYXVsdCB2YWx1ZVxuICogQHBhcmFtIHtTdHJpbmd9IFthcmdzLmhpbnRdIEhpbnQgdG8gZGlzcGxheVxuICogQHBhcmFtIHtmdW5jdGlvbn0gW2FyZ3Mub25TdGF0ZV0gT24gc3RhdGUgY2hhbmdlIGNhbGxiYWNrXG4gKiBAcGFyYW0ge1N0cmVhbX0gW2FyZ3Muc3RkaW5dIFRoZSBSZWFkYWJsZSBzdHJlYW0gdG8gbGlzdGVuIHRvXG4gKiBAcGFyYW0ge1N0cmVhbX0gW2FyZ3Muc3Rkb3V0XSBUaGUgV3JpdGFibGUgc3RyZWFtIHRvIHdyaXRlIHJlYWRsaW5lIGRhdGEgdG9cbiAqIEByZXR1cm5zIHtQcm9taXNlfSBQcm9taXNlIHdpdGggdXNlciBpbnB1dFxuICovXG5cblxuJC5zZWxlY3QgPSBhcmdzID0+IHRvUHJvbXB0KCdTZWxlY3RQcm9tcHQnLCBhcmdzKTtcbi8qKlxuICogSW50ZXJhY3RpdmUgbXVsdGktc2VsZWN0IC8gYXV0b2NvbXBsZXRlTXVsdGlzZWxlY3QgcHJvbXB0XG4gKiBAcGFyYW0ge3N0cmluZ30gYXJncy5tZXNzYWdlIFByb21wdCBtZXNzYWdlIHRvIGRpc3BsYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFyZ3MuY2hvaWNlcyBBcnJheSBvZiBjaG9pY2VzIG9iamVjdHMgYFt7IHRpdGxlLCB2YWx1ZSwgW3NlbGVjdGVkXSB9LCAuLi5dYFxuICogQHBhcmFtIHtudW1iZXJ9IFthcmdzLm1heF0gTWF4IHNlbGVjdFxuICogQHBhcmFtIHtzdHJpbmd9IFthcmdzLmhpbnRdIEhpbnQgdG8gZGlzcGxheSB1c2VyXG4gKiBAcGFyYW0ge051bWJlcn0gW2FyZ3MuY3Vyc29yPTBdIEN1cnNvciBzdGFydCBwb3NpdGlvblxuICogQHBhcmFtIHtmdW5jdGlvbn0gW2FyZ3Mub25TdGF0ZV0gT24gc3RhdGUgY2hhbmdlIGNhbGxiYWNrXG4gKiBAcGFyYW0ge1N0cmVhbX0gW2FyZ3Muc3RkaW5dIFRoZSBSZWFkYWJsZSBzdHJlYW0gdG8gbGlzdGVuIHRvXG4gKiBAcGFyYW0ge1N0cmVhbX0gW2FyZ3Muc3Rkb3V0XSBUaGUgV3JpdGFibGUgc3RyZWFtIHRvIHdyaXRlIHJlYWRsaW5lIGRhdGEgdG9cbiAqIEByZXR1cm5zIHtQcm9taXNlfSBQcm9taXNlIHdpdGggdXNlciBpbnB1dFxuICovXG5cblxuJC5tdWx0aXNlbGVjdCA9IGFyZ3MgPT4ge1xuICBhcmdzLmNob2ljZXMgPSBbXS5jb25jYXQoYXJncy5jaG9pY2VzIHx8IFtdKTtcblxuICBjb25zdCB0b1NlbGVjdGVkID0gaXRlbXMgPT4gaXRlbXMuZmlsdGVyKGl0ZW0gPT4gaXRlbS5zZWxlY3RlZCkubWFwKGl0ZW0gPT4gaXRlbS52YWx1ZSk7XG5cbiAgcmV0dXJuIHRvUHJvbXB0KCdNdWx0aXNlbGVjdFByb21wdCcsIGFyZ3MsIHtcbiAgICBvbkFib3J0OiB0b1NlbGVjdGVkLFxuICAgIG9uU3VibWl0OiB0b1NlbGVjdGVkXG4gIH0pO1xufTtcblxuJC5hdXRvY29tcGxldGVNdWx0aXNlbGVjdCA9IGFyZ3MgPT4ge1xuICBhcmdzLmNob2ljZXMgPSBbXS5jb25jYXQoYXJncy5jaG9pY2VzIHx8IFtdKTtcblxuICBjb25zdCB0b1NlbGVjdGVkID0gaXRlbXMgPT4gaXRlbXMuZmlsdGVyKGl0ZW0gPT4gaXRlbS5zZWxlY3RlZCkubWFwKGl0ZW0gPT4gaXRlbS52YWx1ZSk7XG5cbiAgcmV0dXJuIHRvUHJvbXB0KCdBdXRvY29tcGxldGVNdWx0aXNlbGVjdFByb21wdCcsIGFyZ3MsIHtcbiAgICBvbkFib3J0OiB0b1NlbGVjdGVkLFxuICAgIG9uU3VibWl0OiB0b1NlbGVjdGVkXG4gIH0pO1xufTtcblxuY29uc3QgYnlUaXRsZSA9IChpbnB1dCwgY2hvaWNlcykgPT4gUHJvbWlzZS5yZXNvbHZlKGNob2ljZXMuZmlsdGVyKGl0ZW0gPT4gaXRlbS50aXRsZS5zbGljZSgwLCBpbnB1dC5sZW5ndGgpLnRvTG93ZXJDYXNlKCkgPT09IGlucHV0LnRvTG93ZXJDYXNlKCkpKTtcbi8qKlxuICogSW50ZXJhY3RpdmUgYXV0by1jb21wbGV0ZSBwcm9tcHRcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLm1lc3NhZ2UgUHJvbXB0IG1lc3NhZ2UgdG8gZGlzcGxheVxuICogQHBhcmFtIHtBcnJheX0gYXJncy5jaG9pY2VzIEFycmF5IG9mIGF1dG8tY29tcGxldGUgY2hvaWNlcyBvYmplY3RzIGBbeyB0aXRsZSwgdmFsdWUgfSwgLi4uXWBcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFthcmdzLnN1Z2dlc3RdIEZ1bmN0aW9uIHRvIGZpbHRlciByZXN1bHRzIGJhc2VkIG9uIHVzZXIgaW5wdXQuIERlZmF1bHRzIHRvIHNvcnQgYnkgYHRpdGxlYFxuICogQHBhcmFtIHtudW1iZXJ9IFthcmdzLmxpbWl0PTEwXSBNYXggbnVtYmVyIG9mIHJlc3VsdHMgdG8gc2hvd1xuICogQHBhcmFtIHtzdHJpbmd9IFthcmdzLnN0eWxlPVwiZGVmYXVsdFwiXSBSZW5kZXIgc3R5bGUgKCdkZWZhdWx0JywgJ3Bhc3N3b3JkJywgJ2ludmlzaWJsZScpXG4gKiBAcGFyYW0ge1N0cmluZ30gW2FyZ3MuaW5pdGlhbF0gSW5kZXggb2YgdGhlIGRlZmF1bHQgdmFsdWVcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuY2xlYXJGaXJzdF0gVGhlIGZpcnN0IEVTQ0FQRSBrZXlwcmVzcyB3aWxsIGNsZWFyIHRoZSBpbnB1dFxuICogQHBhcmFtIHtTdHJpbmd9IFthcmdzLmZhbGxiYWNrXSBGYWxsYmFjayBtZXNzYWdlIC0gZGVmYXVsdHMgdG8gaW5pdGlhbCB2YWx1ZVxuICogQHBhcmFtIHtmdW5jdGlvbn0gW2FyZ3Mub25TdGF0ZV0gT24gc3RhdGUgY2hhbmdlIGNhbGxiYWNrXG4gKiBAcGFyYW0ge1N0cmVhbX0gW2FyZ3Muc3RkaW5dIFRoZSBSZWFkYWJsZSBzdHJlYW0gdG8gbGlzdGVuIHRvXG4gKiBAcGFyYW0ge1N0cmVhbX0gW2FyZ3Muc3Rkb3V0XSBUaGUgV3JpdGFibGUgc3RyZWFtIHRvIHdyaXRlIHJlYWRsaW5lIGRhdGEgdG9cbiAqIEByZXR1cm5zIHtQcm9taXNlfSBQcm9taXNlIHdpdGggdXNlciBpbnB1dFxuICovXG5cblxuJC5hdXRvY29tcGxldGUgPSBhcmdzID0+IHtcbiAgYXJncy5zdWdnZXN0ID0gYXJncy5zdWdnZXN0IHx8IGJ5VGl0bGU7XG4gIGFyZ3MuY2hvaWNlcyA9IFtdLmNvbmNhdChhcmdzLmNob2ljZXMgfHwgW10pO1xuICByZXR1cm4gdG9Qcm9tcHQoJ0F1dG9jb21wbGV0ZVByb21wdCcsIGFyZ3MpO1xufTsiLCIndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHsgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyB9IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIobywgYWxsb3dBcnJheUxpa2UpIHsgdmFyIGl0ID0gdHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl0gfHwgb1tcIkBAaXRlcmF0b3JcIl07IGlmICghaXQpIHsgaWYgKEFycmF5LmlzQXJyYXkobykgfHwgKGl0ID0gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8pKSB8fCBhbGxvd0FycmF5TGlrZSAmJiBvICYmIHR5cGVvZiBvLmxlbmd0aCA9PT0gXCJudW1iZXJcIikgeyBpZiAoaXQpIG8gPSBpdDsgdmFyIGkgPSAwOyB2YXIgRiA9IGZ1bmN0aW9uIEYoKSB7fTsgcmV0dXJuIHsgczogRiwgbjogZnVuY3Rpb24gbigpIHsgaWYgKGkgPj0gby5sZW5ndGgpIHJldHVybiB7IGRvbmU6IHRydWUgfTsgcmV0dXJuIHsgZG9uZTogZmFsc2UsIHZhbHVlOiBvW2krK10gfTsgfSwgZTogZnVuY3Rpb24gZShfZSkgeyB0aHJvdyBfZTsgfSwgZjogRiB9OyB9IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfSB2YXIgbm9ybWFsQ29tcGxldGlvbiA9IHRydWUsIGRpZEVyciA9IGZhbHNlLCBlcnI7IHJldHVybiB7IHM6IGZ1bmN0aW9uIHMoKSB7IGl0ID0gaXQuY2FsbChvKTsgfSwgbjogZnVuY3Rpb24gbigpIHsgdmFyIHN0ZXAgPSBpdC5uZXh0KCk7IG5vcm1hbENvbXBsZXRpb24gPSBzdGVwLmRvbmU7IHJldHVybiBzdGVwOyB9LCBlOiBmdW5jdGlvbiBlKF9lMikgeyBkaWRFcnIgPSB0cnVlOyBlcnIgPSBfZTI7IH0sIGY6IGZ1bmN0aW9uIGYoKSB7IHRyeSB7IGlmICghbm9ybWFsQ29tcGxldGlvbiAmJiBpdC5yZXR1cm4gIT0gbnVsbCkgaXQucmV0dXJuKCk7IH0gZmluYWxseSB7IGlmIChkaWRFcnIpIHRocm93IGVycjsgfSB9IH07IH1cblxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikgeyBpZiAoIW8pIHJldHVybjsgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpOyBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lOyBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTsgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB9XG5cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7IGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoOyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIGFycjJbaV0gPSBhcnJbaV07IHJldHVybiBhcnIyOyB9XG5cbmZ1bmN0aW9uIGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywga2V5LCBhcmcpIHsgdHJ5IHsgdmFyIGluZm8gPSBnZW5ba2V5XShhcmcpOyB2YXIgdmFsdWUgPSBpbmZvLnZhbHVlOyB9IGNhdGNoIChlcnJvcikgeyByZWplY3QoZXJyb3IpOyByZXR1cm47IH0gaWYgKGluZm8uZG9uZSkgeyByZXNvbHZlKHZhbHVlKTsgfSBlbHNlIHsgUHJvbWlzZS5yZXNvbHZlKHZhbHVlKS50aGVuKF9uZXh0LCBfdGhyb3cpOyB9IH1cblxuZnVuY3Rpb24gX2FzeW5jVG9HZW5lcmF0b3IoZm4pIHsgcmV0dXJuIGZ1bmN0aW9uICgpIHsgdmFyIHNlbGYgPSB0aGlzLCBhcmdzID0gYXJndW1lbnRzOyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2YXIgZ2VuID0gZm4uYXBwbHkoc2VsZiwgYXJncyk7IGZ1bmN0aW9uIF9uZXh0KHZhbHVlKSB7IGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJuZXh0XCIsIHZhbHVlKTsgfSBmdW5jdGlvbiBfdGhyb3coZXJyKSB7IGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJ0aHJvd1wiLCBlcnIpOyB9IF9uZXh0KHVuZGVmaW5lZCk7IH0pOyB9OyB9XG5cbmNvbnN0IHByb21wdHMgPSByZXF1aXJlKCcuL3Byb21wdHMnKTtcblxuY29uc3QgcGFzc09uID0gWydzdWdnZXN0JywgJ2Zvcm1hdCcsICdvblN0YXRlJywgJ3ZhbGlkYXRlJywgJ29uUmVuZGVyJywgJ3R5cGUnXTtcblxuY29uc3Qgbm9vcCA9ICgpID0+IHt9O1xuLyoqXG4gKiBQcm9tcHQgZm9yIGEgc2VyaWVzIG9mIHF1ZXN0aW9uc1xuICogQHBhcmFtIHtBcnJheXxPYmplY3R9IHF1ZXN0aW9ucyBTaW5nbGUgcXVlc3Rpb24gb2JqZWN0IG9yIEFycmF5IG9mIHF1ZXN0aW9uIG9iamVjdHNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtvblN1Ym1pdF0gQ2FsbGJhY2sgZnVuY3Rpb24gY2FsbGVkIG9uIHByb21wdCBzdWJtaXRcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtvbkNhbmNlbF0gQ2FsbGJhY2sgZnVuY3Rpb24gY2FsbGVkIG9uIGNhbmNlbC9hYm9ydFxuICogQHJldHVybnMge09iamVjdH0gT2JqZWN0IHdpdGggdmFsdWVzIGZyb20gdXNlciBpbnB1dFxuICovXG5cblxuZnVuY3Rpb24gcHJvbXB0KCkge1xuICByZXR1cm4gX3Byb21wdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufVxuXG5mdW5jdGlvbiBfcHJvbXB0KCkge1xuICBfcHJvbXB0ID0gX2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qIChxdWVzdGlvbnMgPSBbXSwge1xuICAgIG9uU3VibWl0ID0gbm9vcCxcbiAgICBvbkNhbmNlbCA9IG5vb3BcbiAgfSA9IHt9KSB7XG4gICAgY29uc3QgYW5zd2VycyA9IHt9O1xuICAgIGNvbnN0IG92ZXJyaWRlID0gcHJvbXB0Ll9vdmVycmlkZSB8fCB7fTtcbiAgICBxdWVzdGlvbnMgPSBbXS5jb25jYXQocXVlc3Rpb25zKTtcbiAgICBsZXQgYW5zd2VyLCBxdWVzdGlvbiwgcXVpdCwgbmFtZSwgdHlwZSwgbGFzdFByb21wdDtcblxuICAgIGNvbnN0IGdldEZvcm1hdHRlZEFuc3dlciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgX3JlZiA9IF9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKiAocXVlc3Rpb24sIGFuc3dlciwgc2tpcFZhbGlkYXRpb24gPSBmYWxzZSkge1xuICAgICAgICBpZiAoIXNraXBWYWxpZGF0aW9uICYmIHF1ZXN0aW9uLnZhbGlkYXRlICYmIHF1ZXN0aW9uLnZhbGlkYXRlKGFuc3dlcikgIT09IHRydWUpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcXVlc3Rpb24uZm9ybWF0ID8geWllbGQgcXVlc3Rpb24uZm9ybWF0KGFuc3dlciwgYW5zd2VycykgOiBhbnN3ZXI7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGZ1bmN0aW9uIGdldEZvcm1hdHRlZEFuc3dlcihfeCwgX3gyKSB7XG4gICAgICAgIHJldHVybiBfcmVmLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB9O1xuICAgIH0oKTtcblxuICAgIHZhciBfaXRlcmF0b3IgPSBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlcihxdWVzdGlvbnMpLFxuICAgICAgICBfc3RlcDtcblxuICAgIHRyeSB7XG4gICAgICBmb3IgKF9pdGVyYXRvci5zKCk7ICEoX3N0ZXAgPSBfaXRlcmF0b3IubigpKS5kb25lOykge1xuICAgICAgICBxdWVzdGlvbiA9IF9zdGVwLnZhbHVlO1xuICAgICAgICB2YXIgX3F1ZXN0aW9uID0gcXVlc3Rpb247XG4gICAgICAgIG5hbWUgPSBfcXVlc3Rpb24ubmFtZTtcbiAgICAgICAgdHlwZSA9IF9xdWVzdGlvbi50eXBlO1xuXG4gICAgICAgIC8vIGV2YWx1YXRlIHR5cGUgZmlyc3QgYW5kIHNraXAgaWYgdHlwZSBpcyBhIGZhbHN5IHZhbHVlXG4gICAgICAgIGlmICh0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHR5cGUgPSB5aWVsZCB0eXBlKGFuc3dlciwgX29iamVjdFNwcmVhZCh7fSwgYW5zd2VycyksIHF1ZXN0aW9uKTtcbiAgICAgICAgICBxdWVzdGlvblsndHlwZSddID0gdHlwZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdHlwZSkgY29udGludWU7IC8vIGlmIHByb3BlcnR5IGlzIGEgZnVuY3Rpb24sIGludm9rZSBpdCB1bmxlc3MgaXQncyBhIHNwZWNpYWwgZnVuY3Rpb25cblxuICAgICAgICBmb3IgKGxldCBrZXkgaW4gcXVlc3Rpb24pIHtcbiAgICAgICAgICBpZiAocGFzc09uLmluY2x1ZGVzKGtleSkpIGNvbnRpbnVlO1xuICAgICAgICAgIGxldCB2YWx1ZSA9IHF1ZXN0aW9uW2tleV07XG4gICAgICAgICAgcXVlc3Rpb25ba2V5XSA9IHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyA/IHlpZWxkIHZhbHVlKGFuc3dlciwgX29iamVjdFNwcmVhZCh7fSwgYW5zd2VycyksIGxhc3RQcm9tcHQpIDogdmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICBsYXN0UHJvbXB0ID0gcXVlc3Rpb247XG5cbiAgICAgICAgaWYgKHR5cGVvZiBxdWVzdGlvbi5tZXNzYWdlICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcigncHJvbXB0IG1lc3NhZ2UgaXMgcmVxdWlyZWQnKTtcbiAgICAgICAgfSAvLyB1cGRhdGUgdmFycyBpbiBjYXNlIHRoZXkgY2hhbmdlZFxuXG5cbiAgICAgICAgdmFyIF9xdWVzdGlvbjIgPSBxdWVzdGlvbjtcbiAgICAgICAgbmFtZSA9IF9xdWVzdGlvbjIubmFtZTtcbiAgICAgICAgdHlwZSA9IF9xdWVzdGlvbjIudHlwZTtcblxuICAgICAgICBpZiAocHJvbXB0c1t0eXBlXSA9PT0gdm9pZCAwKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBwcm9tcHQgdHlwZSAoJHt0eXBlfSkgaXMgbm90IGRlZmluZWRgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvdmVycmlkZVtxdWVzdGlvbi5uYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgYW5zd2VyID0geWllbGQgZ2V0Rm9ybWF0dGVkQW5zd2VyKHF1ZXN0aW9uLCBvdmVycmlkZVtxdWVzdGlvbi5uYW1lXSk7XG5cbiAgICAgICAgICBpZiAoYW5zd2VyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGFuc3dlcnNbbmFtZV0gPSBhbnN3ZXI7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIEdldCB0aGUgaW5qZWN0ZWQgYW5zd2VyIGlmIHRoZXJlIGlzIG9uZSBvciBwcm9tcHQgdGhlIHVzZXJcbiAgICAgICAgICBhbnN3ZXIgPSBwcm9tcHQuX2luamVjdGVkID8gZ2V0SW5qZWN0ZWRBbnN3ZXIocHJvbXB0Ll9pbmplY3RlZCwgcXVlc3Rpb24uaW5pdGlhbCkgOiB5aWVsZCBwcm9tcHRzW3R5cGVdKHF1ZXN0aW9uKTtcbiAgICAgICAgICBhbnN3ZXJzW25hbWVdID0gYW5zd2VyID0geWllbGQgZ2V0Rm9ybWF0dGVkQW5zd2VyKHF1ZXN0aW9uLCBhbnN3ZXIsIHRydWUpO1xuICAgICAgICAgIHF1aXQgPSB5aWVsZCBvblN1Ym1pdChxdWVzdGlvbiwgYW5zd2VyLCBhbnN3ZXJzKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgcXVpdCA9ICEoeWllbGQgb25DYW5jZWwocXVlc3Rpb24sIGFuc3dlcnMpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChxdWl0KSByZXR1cm4gYW5zd2VycztcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIF9pdGVyYXRvci5lKGVycik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIF9pdGVyYXRvci5mKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFuc3dlcnM7XG4gIH0pO1xuICByZXR1cm4gX3Byb21wdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufVxuXG5mdW5jdGlvbiBnZXRJbmplY3RlZEFuc3dlcihpbmplY3RlZCwgZGVhZnVsdFZhbHVlKSB7XG4gIGNvbnN0IGFuc3dlciA9IGluamVjdGVkLnNoaWZ0KCk7XG5cbiAgaWYgKGFuc3dlciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgdGhyb3cgYW5zd2VyO1xuICB9XG5cbiAgcmV0dXJuIGFuc3dlciA9PT0gdW5kZWZpbmVkID8gZGVhZnVsdFZhbHVlIDogYW5zd2VyO1xufVxuXG5mdW5jdGlvbiBpbmplY3QoYW5zd2Vycykge1xuICBwcm9tcHQuX2luamVjdGVkID0gKHByb21wdC5faW5qZWN0ZWQgfHwgW10pLmNvbmNhdChhbnN3ZXJzKTtcbn1cblxuZnVuY3Rpb24gb3ZlcnJpZGUoYW5zd2Vycykge1xuICBwcm9tcHQuX292ZXJyaWRlID0gT2JqZWN0LmFzc2lnbih7fSwgYW5zd2Vycyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmFzc2lnbihwcm9tcHQsIHtcbiAgcHJvbXB0LFxuICBwcm9tcHRzLFxuICBpbmplY3QsXG4gIG92ZXJyaWRlXG59KTsiLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gKGtleSwgaXNTZWxlY3QpID0+IHtcbiAgaWYgKGtleS5tZXRhICYmIGtleS5uYW1lICE9PSAnZXNjYXBlJykgcmV0dXJuO1xuICBcbiAgaWYgKGtleS5jdHJsKSB7XG4gICAgaWYgKGtleS5uYW1lID09PSAnYScpIHJldHVybiAnZmlyc3QnO1xuICAgIGlmIChrZXkubmFtZSA9PT0gJ2MnKSByZXR1cm4gJ2Fib3J0JztcbiAgICBpZiAoa2V5Lm5hbWUgPT09ICdkJykgcmV0dXJuICdhYm9ydCc7XG4gICAgaWYgKGtleS5uYW1lID09PSAnZScpIHJldHVybiAnbGFzdCc7XG4gICAgaWYgKGtleS5uYW1lID09PSAnZycpIHJldHVybiAncmVzZXQnO1xuICB9XG4gIFxuICBpZiAoaXNTZWxlY3QpIHtcbiAgICBpZiAoa2V5Lm5hbWUgPT09ICdqJykgcmV0dXJuICdkb3duJztcbiAgICBpZiAoa2V5Lm5hbWUgPT09ICdrJykgcmV0dXJuICd1cCc7XG4gIH1cblxuICBpZiAoa2V5Lm5hbWUgPT09ICdyZXR1cm4nKSByZXR1cm4gJ3N1Ym1pdCc7XG4gIGlmIChrZXkubmFtZSA9PT0gJ2VudGVyJykgcmV0dXJuICdzdWJtaXQnOyAvLyBjdHJsICsgSlxuICBpZiAoa2V5Lm5hbWUgPT09ICdiYWNrc3BhY2UnKSByZXR1cm4gJ2RlbGV0ZSc7XG4gIGlmIChrZXkubmFtZSA9PT0gJ2RlbGV0ZScpIHJldHVybiAnZGVsZXRlRm9yd2FyZCc7XG4gIGlmIChrZXkubmFtZSA9PT0gJ2Fib3J0JykgcmV0dXJuICdhYm9ydCc7XG4gIGlmIChrZXkubmFtZSA9PT0gJ2VzY2FwZScpIHJldHVybiAnZXhpdCc7XG4gIGlmIChrZXkubmFtZSA9PT0gJ3RhYicpIHJldHVybiAnbmV4dCc7XG4gIGlmIChrZXkubmFtZSA9PT0gJ3BhZ2Vkb3duJykgcmV0dXJuICduZXh0UGFnZSc7XG4gIGlmIChrZXkubmFtZSA9PT0gJ3BhZ2V1cCcpIHJldHVybiAncHJldlBhZ2UnO1xuICAvLyBUT0RPIGNyZWF0ZSBob21lKCkgaW4gcHJvbXB0IHR5cGVzIChlLmcuIFRleHRQcm9tcHQpXG4gIGlmIChrZXkubmFtZSA9PT0gJ2hvbWUnKSByZXR1cm4gJ2hvbWUnO1xuICAvLyBUT0RPIGNyZWF0ZSBlbmQoKSBpbiBwcm9tcHQgdHlwZXMgKGUuZy4gVGV4dFByb21wdClcbiAgaWYgKGtleS5uYW1lID09PSAnZW5kJykgcmV0dXJuICdlbmQnO1xuXG4gIGlmIChrZXkubmFtZSA9PT0gJ3VwJykgcmV0dXJuICd1cCc7XG4gIGlmIChrZXkubmFtZSA9PT0gJ2Rvd24nKSByZXR1cm4gJ2Rvd24nO1xuICBpZiAoa2V5Lm5hbWUgPT09ICdyaWdodCcpIHJldHVybiAncmlnaHQnO1xuICBpZiAoa2V5Lm5hbWUgPT09ICdsZWZ0JykgcmV0dXJuICdsZWZ0JztcblxuICByZXR1cm4gZmFsc2U7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHN0ciA9PiB7XG4gIGNvbnN0IHBhdHRlcm4gPSBbXG4gICAgJ1tcXFxcdTAwMUJcXFxcdTAwOUJdW1tcXFxcXSgpIzs/XSooPzooPzooPzooPzo7Wy1hLXpBLVpcXFxcZFxcXFwvIyYuOj0/JUB+X10rKSp8W2EtekEtWlxcXFxkXSsoPzo7Wy1hLXpBLVpcXFxcZFxcXFwvIyYuOj0/JUB+X10qKSopP1xcXFx1MDAwNyknLFxuICAgICcoPzooPzpcXFxcZHsxLDR9KD86O1xcXFxkezAsNH0pKik/W1xcXFxkQS1QUlpjZi1udHFyeT0+PH5dKSknXG4gIF0uam9pbignfCcpO1xuXG4gIGNvbnN0IFJHWCA9IG5ldyBSZWdFeHAocGF0dGVybiwgJ2cnKTtcbiAgcmV0dXJuIHR5cGVvZiBzdHIgPT09ICdzdHJpbmcnID8gc3RyLnJlcGxhY2UoUkdYLCAnJykgOiBzdHI7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBzdHJpcCA9IHJlcXVpcmUoJy4vc3RyaXAnKTtcbmNvbnN0IHsgZXJhc2UsIGN1cnNvciB9ID0gcmVxdWlyZSgnc2lzdGVyYW5zaScpO1xuXG5jb25zdCB3aWR0aCA9IHN0ciA9PiBbLi4uc3RyaXAoc3RyKV0ubGVuZ3RoO1xuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9tcHRcbiAqIEBwYXJhbSB7bnVtYmVyfSBwZXJMaW5lXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ocHJvbXB0LCBwZXJMaW5lKSB7XG4gIGlmICghcGVyTGluZSkgcmV0dXJuIGVyYXNlLmxpbmUgKyBjdXJzb3IudG8oMCk7XG5cbiAgbGV0IHJvd3MgPSAwO1xuICBjb25zdCBsaW5lcyA9IHByb21wdC5zcGxpdCgvXFxyP1xcbi8pO1xuICBmb3IgKGxldCBsaW5lIG9mIGxpbmVzKSB7XG4gICAgcm93cyArPSAxICsgTWF0aC5mbG9vcihNYXRoLm1heCh3aWR0aChsaW5lKSAtIDEsIDApIC8gcGVyTGluZSk7XG4gIH1cblxuICByZXR1cm4gZXJhc2UubGluZXMocm93cyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1x0XG5cbiBjb25zdCBtYWluID0ge1xuICBhcnJvd1VwOiAn4oaRJyxcbiAgYXJyb3dEb3duOiAn4oaTJyxcbiAgYXJyb3dMZWZ0OiAn4oaQJyxcbiAgYXJyb3dSaWdodDogJ+KGkicsXG4gIHJhZGlvT246ICfil4knLFxuICByYWRpb09mZjogJ+KXrycsXG4gIHRpY2s6ICfinJQnLFx0XG4gIGNyb3NzOiAn4pyWJyxcdFxuICBlbGxpcHNpczogJ+KApicsXHRcbiAgcG9pbnRlclNtYWxsOiAn4oC6JyxcdFxuICBsaW5lOiAn4pSAJyxcdFxuICBwb2ludGVyOiAn4p2vJ1x0XG59O1x0XG5jb25zdCB3aW4gPSB7XG4gIGFycm93VXA6IG1haW4uYXJyb3dVcCxcbiAgYXJyb3dEb3duOiBtYWluLmFycm93RG93bixcbiAgYXJyb3dMZWZ0OiBtYWluLmFycm93TGVmdCxcbiAgYXJyb3dSaWdodDogbWFpbi5hcnJvd1JpZ2h0LFxuICByYWRpb09uOiAnKCopJyxcbiAgcmFkaW9PZmY6ICcoICknLFx0XG4gIHRpY2s6ICfiiJonLFx0XG4gIGNyb3NzOiAnw5cnLFx0XG4gIGVsbGlwc2lzOiAnLi4uJyxcdFxuICBwb2ludGVyU21hbGw6ICfCuycsXHRcbiAgbGluZTogJ+KUgCcsXHRcbiAgcG9pbnRlcjogJz4nXHRcbn07XHRcbmNvbnN0IGZpZ3VyZXMgPSBwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInID8gd2luIDogbWFpbjtcdFxuXG4gbW9kdWxlLmV4cG9ydHMgPSBmaWd1cmVzO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBjID0gcmVxdWlyZSgna2xldXInKTtcbmNvbnN0IGZpZ3VyZXMgPSByZXF1aXJlKCcuL2ZpZ3VyZXMnKTtcblxuLy8gcmVuZGVyaW5nIHVzZXIgaW5wdXQuXG5jb25zdCBzdHlsZXMgPSBPYmplY3QuZnJlZXplKHtcbiAgcGFzc3dvcmQ6IHsgc2NhbGU6IDEsIHJlbmRlcjogaW5wdXQgPT4gJyonLnJlcGVhdChpbnB1dC5sZW5ndGgpIH0sXG4gIGVtb2ppOiB7IHNjYWxlOiAyLCByZW5kZXI6IGlucHV0ID0+ICfwn5iDJy5yZXBlYXQoaW5wdXQubGVuZ3RoKSB9LFxuICBpbnZpc2libGU6IHsgc2NhbGU6IDAsIHJlbmRlcjogaW5wdXQgPT4gJycgfSxcbiAgZGVmYXVsdDogeyBzY2FsZTogMSwgcmVuZGVyOiBpbnB1dCA9PiBgJHtpbnB1dH1gIH1cbn0pO1xuY29uc3QgcmVuZGVyID0gdHlwZSA9PiBzdHlsZXNbdHlwZV0gfHwgc3R5bGVzLmRlZmF1bHQ7XG5cbi8vIGljb24gdG8gc2lnbmFsaXplIGEgcHJvbXB0LlxuY29uc3Qgc3ltYm9scyA9IE9iamVjdC5mcmVlemUoe1xuICBhYm9ydGVkOiBjLnJlZChmaWd1cmVzLmNyb3NzKSxcbiAgZG9uZTogYy5ncmVlbihmaWd1cmVzLnRpY2spLFxuICBleGl0ZWQ6IGMueWVsbG93KGZpZ3VyZXMuY3Jvc3MpLFxuICBkZWZhdWx0OiBjLmN5YW4oJz8nKVxufSk7XG5cbmNvbnN0IHN5bWJvbCA9IChkb25lLCBhYm9ydGVkLCBleGl0ZWQpID0+XG4gIGFib3J0ZWQgPyBzeW1ib2xzLmFib3J0ZWQgOiBleGl0ZWQgPyBzeW1ib2xzLmV4aXRlZCA6IGRvbmUgPyBzeW1ib2xzLmRvbmUgOiBzeW1ib2xzLmRlZmF1bHQ7XG5cbi8vIGJldHdlZW4gdGhlIHF1ZXN0aW9uIGFuZCB0aGUgdXNlcidzIGlucHV0LlxuY29uc3QgZGVsaW1pdGVyID0gY29tcGxldGluZyA9PlxuICBjLmdyYXkoY29tcGxldGluZyA/IGZpZ3VyZXMuZWxsaXBzaXMgOiBmaWd1cmVzLnBvaW50ZXJTbWFsbCk7XG5cbmNvbnN0IGl0ZW0gPSAoZXhwYW5kYWJsZSwgZXhwYW5kZWQpID0+XG4gIGMuZ3JheShleHBhbmRhYmxlID8gKGV4cGFuZGVkID8gZmlndXJlcy5wb2ludGVyU21hbGwgOiAnKycpIDogZmlndXJlcy5saW5lKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHN0eWxlcyxcbiAgcmVuZGVyLFxuICBzeW1ib2xzLFxuICBzeW1ib2wsXG4gIGRlbGltaXRlcixcbiAgaXRlbVxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuY29uc3Qgc3RyaXAgPSByZXF1aXJlKCcuL3N0cmlwJyk7XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IG1zZ1xuICogQHBhcmFtIHtudW1iZXJ9IHBlckxpbmVcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobXNnLCBwZXJMaW5lKSB7XG4gIGxldCBsaW5lcyA9IFN0cmluZyhzdHJpcChtc2cpIHx8ICcnKS5zcGxpdCgvXFxyP1xcbi8pO1xuXG4gIGlmICghcGVyTGluZSkgcmV0dXJuIGxpbmVzLmxlbmd0aDtcbiAgcmV0dXJuIGxpbmVzLm1hcChsID0+IE1hdGguY2VpbChsLmxlbmd0aCAvIHBlckxpbmUpKVxuICAgICAgLnJlZHVjZSgoYSwgYikgPT4gYSArIGIpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gbXNnIFRoZSBtZXNzYWdlIHRvIHdyYXBcbiAqIEBwYXJhbSB7b2JqZWN0fSBvcHRzXG4gKiBAcGFyYW0ge251bWJlcnxzdHJpbmd9IFtvcHRzLm1hcmdpbl0gTGVmdCBtYXJnaW5cbiAqIEBwYXJhbSB7bnVtYmVyfSBvcHRzLndpZHRoIE1heGltdW0gY2hhcmFjdGVycyBwZXIgbGluZSBpbmNsdWRpbmcgdGhlIG1hcmdpblxuICovXG5tb2R1bGUuZXhwb3J0cyA9IChtc2csIG9wdHMgPSB7fSkgPT4ge1xuICBjb25zdCB0YWIgPSBOdW1iZXIuaXNTYWZlSW50ZWdlcihwYXJzZUludChvcHRzLm1hcmdpbikpXG4gICAgPyBuZXcgQXJyYXkocGFyc2VJbnQob3B0cy5tYXJnaW4pKS5maWxsKCcgJykuam9pbignJylcbiAgICA6IChvcHRzLm1hcmdpbiB8fCAnJyk7XG5cbiAgY29uc3Qgd2lkdGggPSBvcHRzLndpZHRoO1xuXG4gIHJldHVybiAobXNnIHx8ICcnKS5zcGxpdCgvXFxyP1xcbi9nKVxuICAgIC5tYXAobGluZSA9PiBsaW5lXG4gICAgICAuc3BsaXQoL1xccysvZylcbiAgICAgIC5yZWR1Y2UoKGFyciwgdykgPT4ge1xuICAgICAgICBpZiAody5sZW5ndGggKyB0YWIubGVuZ3RoID49IHdpZHRoIHx8IGFyclthcnIubGVuZ3RoIC0gMV0ubGVuZ3RoICsgdy5sZW5ndGggKyAxIDwgd2lkdGgpXG4gICAgICAgICAgYXJyW2Fyci5sZW5ndGggLSAxXSArPSBgICR7d31gO1xuICAgICAgICBlbHNlIGFyci5wdXNoKGAke3RhYn0ke3d9YCk7XG4gICAgICAgIHJldHVybiBhcnI7XG4gICAgICB9LCBbIHRhYiBdKVxuICAgICAgLmpvaW4oJ1xcbicpKVxuICAgIC5qb2luKCdcXG4nKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogRGV0ZXJtaW5lIHdoYXQgZW50cmllcyBzaG91bGQgYmUgZGlzcGxheWVkIG9uIHRoZSBzY3JlZW4sIGJhc2VkIG9uIHRoZVxuICogY3VycmVudGx5IHNlbGVjdGVkIGluZGV4IGFuZCB0aGUgbWF4aW11bSB2aXNpYmxlLiBVc2VkIGluIGxpc3QtYmFzZWRcbiAqIHByb21wdHMgbGlrZSBgc2VsZWN0YCBhbmQgYG11bHRpc2VsZWN0YC5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gY3Vyc29yIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgZW50cnlcbiAqIEBwYXJhbSB7bnVtYmVyfSB0b3RhbCB0aGUgdG90YWwgZW50cmllcyBhdmFpbGFibGUgdG8gZGlzcGxheVxuICogQHBhcmFtIHtudW1iZXJ9IFttYXhWaXNpYmxlXSB0aGUgbnVtYmVyIG9mIGVudHJpZXMgdGhhdCBjYW4gYmUgZGlzcGxheWVkXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gKGN1cnNvciwgdG90YWwsIG1heFZpc2libGUpICA9PiB7XG4gIG1heFZpc2libGUgPSBtYXhWaXNpYmxlIHx8IHRvdGFsO1xuXG4gIGxldCBzdGFydEluZGV4ID0gTWF0aC5taW4odG90YWwtIG1heFZpc2libGUsIGN1cnNvciAtIE1hdGguZmxvb3IobWF4VmlzaWJsZSAvIDIpKTtcbiAgaWYgKHN0YXJ0SW5kZXggPCAwKSBzdGFydEluZGV4ID0gMDtcblxuICBsZXQgZW5kSW5kZXggPSBNYXRoLm1pbihzdGFydEluZGV4ICsgbWF4VmlzaWJsZSwgdG90YWwpO1xuXG4gIHJldHVybiB7IHN0YXJ0SW5kZXgsIGVuZEluZGV4IH07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgYWN0aW9uOiByZXF1aXJlKCcuL2FjdGlvbicpLFxuICBjbGVhcjogcmVxdWlyZSgnLi9jbGVhcicpLFxuICBzdHlsZTogcmVxdWlyZSgnLi9zdHlsZScpLFxuICBzdHJpcDogcmVxdWlyZSgnLi9zdHJpcCcpLFxuICBmaWd1cmVzOiByZXF1aXJlKCcuL2ZpZ3VyZXMnKSxcbiAgbGluZXM6IHJlcXVpcmUoJy4vbGluZXMnKSxcbiAgd3JhcDogcmVxdWlyZSgnLi93cmFwJyksXG4gIGVudHJpZXNUb0Rpc3BsYXk6IHJlcXVpcmUoJy4vZW50cmllc1RvRGlzcGxheScpXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCByZWFkbGluZSA9IHJlcXVpcmUoJ3JlYWRsaW5lJyk7XG5jb25zdCB7IGFjdGlvbiB9ID0gcmVxdWlyZSgnLi4vdXRpbCcpO1xuY29uc3QgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRzJyk7XG5jb25zdCB7IGJlZXAsIGN1cnNvciB9ID0gcmVxdWlyZSgnc2lzdGVyYW5zaScpO1xuY29uc3QgY29sb3IgPSByZXF1aXJlKCdrbGV1cicpO1xuXG4vKipcbiAqIEJhc2UgcHJvbXB0IHNrZWxldG9uXG4gKiBAcGFyYW0ge1N0cmVhbX0gW29wdHMuc3RkaW5dIFRoZSBSZWFkYWJsZSBzdHJlYW0gdG8gbGlzdGVuIHRvXG4gKiBAcGFyYW0ge1N0cmVhbX0gW29wdHMuc3Rkb3V0XSBUaGUgV3JpdGFibGUgc3RyZWFtIHRvIHdyaXRlIHJlYWRsaW5lIGRhdGEgdG9cbiAqL1xuY2xhc3MgUHJvbXB0IGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcbiAgY29uc3RydWN0b3Iob3B0cz17fSkge1xuICAgIHN1cGVyKCk7XG5cbiAgICB0aGlzLmZpcnN0UmVuZGVyID0gdHJ1ZTtcbiAgICB0aGlzLmluID0gb3B0cy5zdGRpbiB8fCBwcm9jZXNzLnN0ZGluO1xuICAgIHRoaXMub3V0ID0gb3B0cy5zdGRvdXQgfHwgcHJvY2Vzcy5zdGRvdXQ7XG4gICAgdGhpcy5vblJlbmRlciA9IChvcHRzLm9uUmVuZGVyIHx8ICgoKSA9PiB2b2lkIDApKS5iaW5kKHRoaXMpO1xuICAgIGNvbnN0IHJsID0gcmVhZGxpbmUuY3JlYXRlSW50ZXJmYWNlKHsgaW5wdXQ6dGhpcy5pbiwgZXNjYXBlQ29kZVRpbWVvdXQ6NTAgfSk7XG4gICAgcmVhZGxpbmUuZW1pdEtleXByZXNzRXZlbnRzKHRoaXMuaW4sIHJsKTtcblxuICAgIGlmICh0aGlzLmluLmlzVFRZKSB0aGlzLmluLnNldFJhd01vZGUodHJ1ZSk7XG4gICAgY29uc3QgaXNTZWxlY3QgPSBbICdTZWxlY3RQcm9tcHQnLCAnTXVsdGlzZWxlY3RQcm9tcHQnIF0uaW5kZXhPZih0aGlzLmNvbnN0cnVjdG9yLm5hbWUpID4gLTE7XG4gICAgY29uc3Qga2V5cHJlc3MgPSAoc3RyLCBrZXkpID0+IHtcbiAgICAgIGxldCBhID0gYWN0aW9uKGtleSwgaXNTZWxlY3QpO1xuICAgICAgaWYgKGEgPT09IGZhbHNlKSB7XG4gICAgICAgIHRoaXMuXyAmJiB0aGlzLl8oc3RyLCBrZXkpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGhpc1thXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzW2FdKGtleSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmJlbGwoKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy5jbG9zZSA9ICgpID0+IHtcbiAgICAgIHRoaXMub3V0LndyaXRlKGN1cnNvci5zaG93KTtcbiAgICAgIHRoaXMuaW4ucmVtb3ZlTGlzdGVuZXIoJ2tleXByZXNzJywga2V5cHJlc3MpO1xuICAgICAgaWYgKHRoaXMuaW4uaXNUVFkpIHRoaXMuaW4uc2V0UmF3TW9kZShmYWxzZSk7XG4gICAgICBybC5jbG9zZSgpO1xuICAgICAgdGhpcy5lbWl0KHRoaXMuYWJvcnRlZCA/ICdhYm9ydCcgOiB0aGlzLmV4aXRlZCA/ICdleGl0JyA6ICdzdWJtaXQnLCB0aGlzLnZhbHVlKTtcbiAgICAgIHRoaXMuY2xvc2VkID0gdHJ1ZTtcbiAgICB9O1xuXG4gICAgdGhpcy5pbi5vbigna2V5cHJlc3MnLCBrZXlwcmVzcyk7XG4gIH1cblxuICBmaXJlKCkge1xuICAgIHRoaXMuZW1pdCgnc3RhdGUnLCB7XG4gICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgIGFib3J0ZWQ6ICEhdGhpcy5hYm9ydGVkLFxuICAgICAgZXhpdGVkOiAhIXRoaXMuZXhpdGVkXG4gICAgfSk7XG4gIH1cblxuICBiZWxsKCkge1xuICAgIHRoaXMub3V0LndyaXRlKGJlZXApO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIHRoaXMub25SZW5kZXIoY29sb3IpO1xuICAgIGlmICh0aGlzLmZpcnN0UmVuZGVyKSB0aGlzLmZpcnN0UmVuZGVyID0gZmFsc2U7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBQcm9tcHQ7XG4iLCJjb25zdCBjb2xvciA9IHJlcXVpcmUoJ2tsZXVyJyk7XG5jb25zdCBQcm9tcHQgPSByZXF1aXJlKCcuL3Byb21wdCcpO1xuY29uc3QgeyBlcmFzZSwgY3Vyc29yIH0gPSByZXF1aXJlKCdzaXN0ZXJhbnNpJyk7XG5jb25zdCB7IHN0eWxlLCBjbGVhciwgbGluZXMsIGZpZ3VyZXMgfSA9IHJlcXVpcmUoJy4uL3V0aWwnKTtcblxuLyoqXG4gKiBUZXh0UHJvbXB0IEJhc2UgRWxlbWVudFxuICogQHBhcmFtIHtPYmplY3R9IG9wdHMgT3B0aW9uc1xuICogQHBhcmFtIHtTdHJpbmd9IG9wdHMubWVzc2FnZSBNZXNzYWdlXG4gKiBAcGFyYW0ge1N0cmluZ30gW29wdHMuc3R5bGU9J2RlZmF1bHQnXSBSZW5kZXIgc3R5bGVcbiAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5pbml0aWFsXSBEZWZhdWx0IHZhbHVlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0cy52YWxpZGF0ZV0gVmFsaWRhdGUgZnVuY3Rpb25cbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLmVycm9yXSBUaGUgaW52YWxpZCBlcnJvciBsYWJlbFxuICovXG5jbGFzcyBUZXh0UHJvbXB0IGV4dGVuZHMgUHJvbXB0IHtcbiAgY29uc3RydWN0b3Iob3B0cz17fSkge1xuICAgIHN1cGVyKG9wdHMpO1xuICAgIHRoaXMudHJhbnNmb3JtID0gc3R5bGUucmVuZGVyKG9wdHMuc3R5bGUpO1xuICAgIHRoaXMuc2NhbGUgPSB0aGlzLnRyYW5zZm9ybS5zY2FsZTtcbiAgICB0aGlzLm1zZyA9IG9wdHMubWVzc2FnZTtcbiAgICB0aGlzLmluaXRpYWwgPSBvcHRzLmluaXRpYWwgfHwgYGA7XG4gICAgdGhpcy52YWxpZGF0b3IgPSBvcHRzLnZhbGlkYXRlIHx8ICgoKSA9PiB0cnVlKTtcbiAgICB0aGlzLnZhbHVlID0gYGA7XG4gICAgdGhpcy5lcnJvck1zZyA9IG9wdHMuZXJyb3IgfHwgYFBsZWFzZSBFbnRlciBBIFZhbGlkIFZhbHVlYDtcbiAgICB0aGlzLmN1cnNvciA9IE51bWJlcighIXRoaXMuaW5pdGlhbCk7XG4gICAgdGhpcy5jdXJzb3JPZmZzZXQgPSAwO1xuICAgIHRoaXMuY2xlYXIgPSBjbGVhcihgYCwgdGhpcy5vdXQuY29sdW1ucyk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHNldCB2YWx1ZSh2KSB7XG4gICAgaWYgKCF2ICYmIHRoaXMuaW5pdGlhbCkge1xuICAgICAgdGhpcy5wbGFjZWhvbGRlciA9IHRydWU7XG4gICAgICB0aGlzLnJlbmRlcmVkID0gY29sb3IuZ3JheSh0aGlzLnRyYW5zZm9ybS5yZW5kZXIodGhpcy5pbml0aWFsKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucGxhY2Vob2xkZXIgPSBmYWxzZTtcbiAgICAgIHRoaXMucmVuZGVyZWQgPSB0aGlzLnRyYW5zZm9ybS5yZW5kZXIodik7XG4gICAgfVxuICAgIHRoaXMuX3ZhbHVlID0gdjtcbiAgICB0aGlzLmZpcmUoKTtcbiAgfVxuXG4gIGdldCB2YWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gIH1cblxuICByZXNldCgpIHtcbiAgICB0aGlzLnZhbHVlID0gYGA7XG4gICAgdGhpcy5jdXJzb3IgPSBOdW1iZXIoISF0aGlzLmluaXRpYWwpO1xuICAgIHRoaXMuY3Vyc29yT2Zmc2V0ID0gMDtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZXhpdCgpIHtcbiAgICB0aGlzLmFib3J0KCk7XG4gIH1cblxuICBhYm9ydCgpIHtcbiAgICB0aGlzLnZhbHVlID0gdGhpcy52YWx1ZSB8fCB0aGlzLmluaXRpYWw7XG4gICAgdGhpcy5kb25lID0gdGhpcy5hYm9ydGVkID0gdHJ1ZTtcbiAgICB0aGlzLmVycm9yID0gZmFsc2U7XG4gICAgdGhpcy5yZWQgPSBmYWxzZTtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICAgIHRoaXMub3V0LndyaXRlKCdcXG4nKTtcbiAgICB0aGlzLmNsb3NlKCk7XG4gIH1cblxuICBhc3luYyB2YWxpZGF0ZSgpIHtcbiAgICBsZXQgdmFsaWQgPSBhd2FpdCB0aGlzLnZhbGlkYXRvcih0aGlzLnZhbHVlKTtcbiAgICBpZiAodHlwZW9mIHZhbGlkID09PSBgc3RyaW5nYCkge1xuICAgICAgdGhpcy5lcnJvck1zZyA9IHZhbGlkO1xuICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5lcnJvciA9ICF2YWxpZDtcbiAgfVxuXG4gIGFzeW5jIHN1Ym1pdCgpIHtcbiAgICB0aGlzLnZhbHVlID0gdGhpcy52YWx1ZSB8fCB0aGlzLmluaXRpYWw7XG4gICAgdGhpcy5jdXJzb3JPZmZzZXQgPSAwO1xuICAgIHRoaXMuY3Vyc29yID0gdGhpcy5yZW5kZXJlZC5sZW5ndGg7XG4gICAgYXdhaXQgdGhpcy52YWxpZGF0ZSgpO1xuICAgIGlmICh0aGlzLmVycm9yKSB7XG4gICAgICB0aGlzLnJlZCA9IHRydWU7XG4gICAgICB0aGlzLmZpcmUoKTtcbiAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuZG9uZSA9IHRydWU7XG4gICAgdGhpcy5hYm9ydGVkID0gZmFsc2U7XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgICB0aGlzLm91dC53cml0ZSgnXFxuJyk7XG4gICAgdGhpcy5jbG9zZSgpO1xuICB9XG5cbiAgbmV4dCgpIHtcbiAgICBpZiAoIXRoaXMucGxhY2Vob2xkZXIpIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgICB0aGlzLnZhbHVlID0gdGhpcy5pbml0aWFsO1xuICAgIHRoaXMuY3Vyc29yID0gdGhpcy5yZW5kZXJlZC5sZW5ndGg7XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIG1vdmVDdXJzb3Iobikge1xuICAgIGlmICh0aGlzLnBsYWNlaG9sZGVyKSByZXR1cm47XG4gICAgdGhpcy5jdXJzb3IgPSB0aGlzLmN1cnNvcituO1xuICAgIHRoaXMuY3Vyc29yT2Zmc2V0ICs9IG47XG4gIH1cblxuICBfKGMsIGtleSkge1xuICAgIGxldCBzMSA9IHRoaXMudmFsdWUuc2xpY2UoMCwgdGhpcy5jdXJzb3IpO1xuICAgIGxldCBzMiA9IHRoaXMudmFsdWUuc2xpY2UodGhpcy5jdXJzb3IpO1xuICAgIHRoaXMudmFsdWUgPSBgJHtzMX0ke2N9JHtzMn1gO1xuICAgIHRoaXMucmVkID0gZmFsc2U7XG4gICAgdGhpcy5jdXJzb3IgPSB0aGlzLnBsYWNlaG9sZGVyID8gMCA6IHMxLmxlbmd0aCsxO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBkZWxldGUoKSB7XG4gICAgaWYgKHRoaXMuaXNDdXJzb3JBdFN0YXJ0KCkpIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgICBsZXQgczEgPSB0aGlzLnZhbHVlLnNsaWNlKDAsIHRoaXMuY3Vyc29yLTEpO1xuICAgIGxldCBzMiA9IHRoaXMudmFsdWUuc2xpY2UodGhpcy5jdXJzb3IpO1xuICAgIHRoaXMudmFsdWUgPSBgJHtzMX0ke3MyfWA7XG4gICAgdGhpcy5yZWQgPSBmYWxzZTtcbiAgICBpZiAodGhpcy5pc0N1cnNvckF0U3RhcnQoKSkge1xuICAgICAgdGhpcy5jdXJzb3JPZmZzZXQgPSAwXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY3Vyc29yT2Zmc2V0Kys7XG4gICAgICB0aGlzLm1vdmVDdXJzb3IoLTEpO1xuICAgIH1cbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZGVsZXRlRm9yd2FyZCgpIHtcbiAgICBpZih0aGlzLmN1cnNvcip0aGlzLnNjYWxlID49IHRoaXMucmVuZGVyZWQubGVuZ3RoIHx8IHRoaXMucGxhY2Vob2xkZXIpIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgICBsZXQgczEgPSB0aGlzLnZhbHVlLnNsaWNlKDAsIHRoaXMuY3Vyc29yKTtcbiAgICBsZXQgczIgPSB0aGlzLnZhbHVlLnNsaWNlKHRoaXMuY3Vyc29yKzEpO1xuICAgIHRoaXMudmFsdWUgPSBgJHtzMX0ke3MyfWA7XG4gICAgdGhpcy5yZWQgPSBmYWxzZTtcbiAgICBpZiAodGhpcy5pc0N1cnNvckF0RW5kKCkpIHtcbiAgICAgIHRoaXMuY3Vyc29yT2Zmc2V0ID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jdXJzb3JPZmZzZXQrKztcbiAgICB9XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIGZpcnN0KCkge1xuICAgIHRoaXMuY3Vyc29yID0gMDtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgbGFzdCgpIHtcbiAgICB0aGlzLmN1cnNvciA9IHRoaXMudmFsdWUubGVuZ3RoO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBsZWZ0KCkge1xuICAgIGlmICh0aGlzLmN1cnNvciA8PSAwIHx8IHRoaXMucGxhY2Vob2xkZXIpIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgICB0aGlzLm1vdmVDdXJzb3IoLTEpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICByaWdodCgpIHtcbiAgICBpZiAodGhpcy5jdXJzb3IqdGhpcy5zY2FsZSA+PSB0aGlzLnJlbmRlcmVkLmxlbmd0aCB8fCB0aGlzLnBsYWNlaG9sZGVyKSByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgdGhpcy5tb3ZlQ3Vyc29yKDEpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBpc0N1cnNvckF0U3RhcnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY3Vyc29yID09PSAwIHx8ICh0aGlzLnBsYWNlaG9sZGVyICYmIHRoaXMuY3Vyc29yID09PSAxKTtcbiAgfVxuXG4gIGlzQ3Vyc29yQXRFbmQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY3Vyc29yID09PSB0aGlzLnJlbmRlcmVkLmxlbmd0aCB8fCAodGhpcy5wbGFjZWhvbGRlciAmJiB0aGlzLmN1cnNvciA9PT0gdGhpcy5yZW5kZXJlZC5sZW5ndGggKyAxKVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGlmICh0aGlzLmNsb3NlZCkgcmV0dXJuO1xuICAgIGlmICghdGhpcy5maXJzdFJlbmRlcikge1xuICAgICAgaWYgKHRoaXMub3V0cHV0RXJyb3IpXG4gICAgICAgIHRoaXMub3V0LndyaXRlKGN1cnNvci5kb3duKGxpbmVzKHRoaXMub3V0cHV0RXJyb3IsIHRoaXMub3V0LmNvbHVtbnMpIC0gMSkgKyBjbGVhcih0aGlzLm91dHB1dEVycm9yLCB0aGlzLm91dC5jb2x1bW5zKSk7XG4gICAgICB0aGlzLm91dC53cml0ZShjbGVhcih0aGlzLm91dHB1dFRleHQsIHRoaXMub3V0LmNvbHVtbnMpKTtcbiAgICB9XG4gICAgc3VwZXIucmVuZGVyKCk7XG4gICAgdGhpcy5vdXRwdXRFcnJvciA9ICcnO1xuXG4gICAgdGhpcy5vdXRwdXRUZXh0ID0gW1xuICAgICAgc3R5bGUuc3ltYm9sKHRoaXMuZG9uZSwgdGhpcy5hYm9ydGVkKSxcbiAgICAgIGNvbG9yLmJvbGQodGhpcy5tc2cpLFxuICAgICAgc3R5bGUuZGVsaW1pdGVyKHRoaXMuZG9uZSksXG4gICAgICB0aGlzLnJlZCA/IGNvbG9yLnJlZCh0aGlzLnJlbmRlcmVkKSA6IHRoaXMucmVuZGVyZWRcbiAgICBdLmpvaW4oYCBgKTtcblxuICAgIGlmICh0aGlzLmVycm9yKSB7XG4gICAgICB0aGlzLm91dHB1dEVycm9yICs9IHRoaXMuZXJyb3JNc2cuc3BsaXQoYFxcbmApXG4gICAgICAgICAgLnJlZHVjZSgoYSwgbCwgaSkgPT4gYSArIGBcXG4ke2kgPyAnICcgOiBmaWd1cmVzLnBvaW50ZXJTbWFsbH0gJHtjb2xvci5yZWQoKS5pdGFsaWMobCl9YCwgYGApO1xuICAgIH1cblxuICAgIHRoaXMub3V0LndyaXRlKGVyYXNlLmxpbmUgKyBjdXJzb3IudG8oMCkgKyB0aGlzLm91dHB1dFRleHQgKyBjdXJzb3Iuc2F2ZSArIHRoaXMub3V0cHV0RXJyb3IgKyBjdXJzb3IucmVzdG9yZSArIGN1cnNvci5tb3ZlKHRoaXMuY3Vyc29yT2Zmc2V0LCAwKSk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBUZXh0UHJvbXB0OyIsIid1c2Ugc3RyaWN0JztcblxuY29uc3QgY29sb3IgPSByZXF1aXJlKCdrbGV1cicpO1xuY29uc3QgUHJvbXB0ID0gcmVxdWlyZSgnLi9wcm9tcHQnKTtcbmNvbnN0IHsgc3R5bGUsIGNsZWFyLCBmaWd1cmVzLCB3cmFwLCBlbnRyaWVzVG9EaXNwbGF5IH0gPSByZXF1aXJlKCcuLi91dGlsJyk7XG5jb25zdCB7IGN1cnNvciB9ID0gcmVxdWlyZSgnc2lzdGVyYW5zaScpO1xuXG4vKipcbiAqIFNlbGVjdFByb21wdCBCYXNlIEVsZW1lbnRcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIE9wdGlvbnNcbiAqIEBwYXJhbSB7U3RyaW5nfSBvcHRzLm1lc3NhZ2UgTWVzc2FnZVxuICogQHBhcmFtIHtBcnJheX0gb3B0cy5jaG9pY2VzIEFycmF5IG9mIGNob2ljZSBvYmplY3RzXG4gKiBAcGFyYW0ge1N0cmluZ30gW29wdHMuaGludF0gSGludCB0byBkaXNwbGF5XG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMuaW5pdGlhbF0gSW5kZXggb2YgZGVmYXVsdCB2YWx1ZVxuICogQHBhcmFtIHtTdHJlYW19IFtvcHRzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFtvcHRzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMub3B0aW9uc1BlclBhZ2U9MTBdIE1heCBvcHRpb25zIHRvIGRpc3BsYXkgYXQgb25jZVxuICovXG5jbGFzcyBTZWxlY3RQcm9tcHQgZXh0ZW5kcyBQcm9tcHQge1xuICBjb25zdHJ1Y3RvcihvcHRzPXt9KSB7XG4gICAgc3VwZXIob3B0cyk7XG4gICAgdGhpcy5tc2cgPSBvcHRzLm1lc3NhZ2U7XG4gICAgdGhpcy5oaW50ID0gb3B0cy5oaW50IHx8ICctIFVzZSBhcnJvdy1rZXlzLiBSZXR1cm4gdG8gc3VibWl0Lic7XG4gICAgdGhpcy53YXJuID0gb3B0cy53YXJuIHx8ICctIFRoaXMgb3B0aW9uIGlzIGRpc2FibGVkJztcbiAgICB0aGlzLmN1cnNvciA9IG9wdHMuaW5pdGlhbCB8fCAwO1xuICAgIHRoaXMuY2hvaWNlcyA9IG9wdHMuY2hvaWNlcy5tYXAoKGNoLCBpZHgpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgY2ggPT09ICdzdHJpbmcnKVxuICAgICAgICBjaCA9IHt0aXRsZTogY2gsIHZhbHVlOiBpZHh9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdGl0bGU6IGNoICYmIChjaC50aXRsZSB8fCBjaC52YWx1ZSB8fCBjaCksXG4gICAgICAgIHZhbHVlOiBjaCAmJiAoY2gudmFsdWUgPT09IHVuZGVmaW5lZCA/IGlkeCA6IGNoLnZhbHVlKSxcbiAgICAgICAgZGVzY3JpcHRpb246IGNoICYmIGNoLmRlc2NyaXB0aW9uLFxuICAgICAgICBzZWxlY3RlZDogY2ggJiYgY2guc2VsZWN0ZWQsXG4gICAgICAgIGRpc2FibGVkOiBjaCAmJiBjaC5kaXNhYmxlZFxuICAgICAgfTtcbiAgICB9KTtcbiAgICB0aGlzLm9wdGlvbnNQZXJQYWdlID0gb3B0cy5vcHRpb25zUGVyUGFnZSB8fCAxMDtcbiAgICB0aGlzLnZhbHVlID0gKHRoaXMuY2hvaWNlc1t0aGlzLmN1cnNvcl0gfHwge30pLnZhbHVlO1xuICAgIHRoaXMuY2xlYXIgPSBjbGVhcignJywgdGhpcy5vdXQuY29sdW1ucyk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIG1vdmVDdXJzb3Iobikge1xuICAgIHRoaXMuY3Vyc29yID0gbjtcbiAgICB0aGlzLnZhbHVlID0gdGhpcy5jaG9pY2VzW25dLnZhbHVlO1xuICAgIHRoaXMuZmlyZSgpO1xuICB9XG5cbiAgcmVzZXQoKSB7XG4gICAgdGhpcy5tb3ZlQ3Vyc29yKDApO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBleGl0KCkge1xuICAgIHRoaXMuYWJvcnQoKTtcbiAgfVxuXG4gIGFib3J0KCkge1xuICAgIHRoaXMuZG9uZSA9IHRoaXMuYWJvcnRlZCA9IHRydWU7XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgICB0aGlzLm91dC53cml0ZSgnXFxuJyk7XG4gICAgdGhpcy5jbG9zZSgpO1xuICB9XG5cbiAgc3VibWl0KCkge1xuICAgIGlmICghdGhpcy5zZWxlY3Rpb24uZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuZG9uZSA9IHRydWU7XG4gICAgICB0aGlzLmFib3J0ZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuZmlyZSgpO1xuICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICAgIHRoaXMub3V0LndyaXRlKCdcXG4nKTtcbiAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICB9IGVsc2VcbiAgICAgIHRoaXMuYmVsbCgpO1xuICB9XG5cbiAgZmlyc3QoKSB7XG4gICAgdGhpcy5tb3ZlQ3Vyc29yKDApO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBsYXN0KCkge1xuICAgIHRoaXMubW92ZUN1cnNvcih0aGlzLmNob2ljZXMubGVuZ3RoIC0gMSk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHVwKCkge1xuICAgIGlmICh0aGlzLmN1cnNvciA9PT0gMCkge1xuICAgICAgdGhpcy5tb3ZlQ3Vyc29yKHRoaXMuY2hvaWNlcy5sZW5ndGggLSAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5tb3ZlQ3Vyc29yKHRoaXMuY3Vyc29yIC0gMSk7XG4gICAgfVxuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBkb3duKCkge1xuICAgIGlmICh0aGlzLmN1cnNvciA9PT0gdGhpcy5jaG9pY2VzLmxlbmd0aCAtIDEpIHtcbiAgICAgIHRoaXMubW92ZUN1cnNvcigwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5tb3ZlQ3Vyc29yKHRoaXMuY3Vyc29yICsgMSk7XG4gICAgfVxuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBuZXh0KCkge1xuICAgIHRoaXMubW92ZUN1cnNvcigodGhpcy5jdXJzb3IgKyAxKSAlIHRoaXMuY2hvaWNlcy5sZW5ndGgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBfKGMsIGtleSkge1xuICAgIGlmIChjID09PSAnICcpIHJldHVybiB0aGlzLnN1Ym1pdCgpO1xuICB9XG5cbiAgZ2V0IHNlbGVjdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5jaG9pY2VzW3RoaXMuY3Vyc29yXTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBpZiAodGhpcy5jbG9zZWQpIHJldHVybjtcbiAgICBpZiAodGhpcy5maXJzdFJlbmRlcikgdGhpcy5vdXQud3JpdGUoY3Vyc29yLmhpZGUpO1xuICAgIGVsc2UgdGhpcy5vdXQud3JpdGUoY2xlYXIodGhpcy5vdXRwdXRUZXh0LCB0aGlzLm91dC5jb2x1bW5zKSk7XG4gICAgc3VwZXIucmVuZGVyKCk7XG5cbiAgICBsZXQgeyBzdGFydEluZGV4LCBlbmRJbmRleCB9ID0gZW50cmllc1RvRGlzcGxheSh0aGlzLmN1cnNvciwgdGhpcy5jaG9pY2VzLmxlbmd0aCwgdGhpcy5vcHRpb25zUGVyUGFnZSk7XG5cbiAgICAvLyBQcmludCBwcm9tcHRcbiAgICB0aGlzLm91dHB1dFRleHQgPSBbXG4gICAgICBzdHlsZS5zeW1ib2wodGhpcy5kb25lLCB0aGlzLmFib3J0ZWQpLFxuICAgICAgY29sb3IuYm9sZCh0aGlzLm1zZyksXG4gICAgICBzdHlsZS5kZWxpbWl0ZXIoZmFsc2UpLFxuICAgICAgdGhpcy5kb25lID8gdGhpcy5zZWxlY3Rpb24udGl0bGUgOiB0aGlzLnNlbGVjdGlvbi5kaXNhYmxlZFxuICAgICAgICAgID8gY29sb3IueWVsbG93KHRoaXMud2FybikgOiBjb2xvci5ncmF5KHRoaXMuaGludClcbiAgICBdLmpvaW4oJyAnKTtcblxuICAgIC8vIFByaW50IGNob2ljZXNcbiAgICBpZiAoIXRoaXMuZG9uZSkge1xuICAgICAgdGhpcy5vdXRwdXRUZXh0ICs9ICdcXG4nO1xuICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0SW5kZXg7IGkgPCBlbmRJbmRleDsgaSsrKSB7XG4gICAgICAgIGxldCB0aXRsZSwgcHJlZml4LCBkZXNjID0gJycsIHYgPSB0aGlzLmNob2ljZXNbaV07XG5cbiAgICAgICAgLy8gRGV0ZXJtaW5lIHdoZXRoZXIgdG8gZGlzcGxheSBcIm1vcmUgY2hvaWNlc1wiIGluZGljYXRvcnNcbiAgICAgICAgaWYgKGkgPT09IHN0YXJ0SW5kZXggJiYgc3RhcnRJbmRleCA+IDApIHtcbiAgICAgICAgICBwcmVmaXggPSBmaWd1cmVzLmFycm93VXA7XG4gICAgICAgIH0gZWxzZSBpZiAoaSA9PT0gZW5kSW5kZXggLSAxICYmIGVuZEluZGV4IDwgdGhpcy5jaG9pY2VzLmxlbmd0aCkge1xuICAgICAgICAgIHByZWZpeCA9IGZpZ3VyZXMuYXJyb3dEb3duO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByZWZpeCA9ICcgJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2LmRpc2FibGVkKSB7XG4gICAgICAgICAgdGl0bGUgPSB0aGlzLmN1cnNvciA9PT0gaSA/IGNvbG9yLmdyYXkoKS51bmRlcmxpbmUodi50aXRsZSkgOiBjb2xvci5zdHJpa2V0aHJvdWdoKCkuZ3JheSh2LnRpdGxlKTtcbiAgICAgICAgICBwcmVmaXggPSAodGhpcy5jdXJzb3IgPT09IGkgPyBjb2xvci5ib2xkKCkuZ3JheShmaWd1cmVzLnBvaW50ZXIpICsgJyAnIDogJyAgJykgKyBwcmVmaXg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGl0bGUgPSB0aGlzLmN1cnNvciA9PT0gaSA/IGNvbG9yLmN5YW4oKS51bmRlcmxpbmUodi50aXRsZSkgOiB2LnRpdGxlO1xuICAgICAgICAgIHByZWZpeCA9ICh0aGlzLmN1cnNvciA9PT0gaSA/IGNvbG9yLmN5YW4oZmlndXJlcy5wb2ludGVyKSArICcgJyA6ICcgICcpICsgcHJlZml4O1xuICAgICAgICAgIGlmICh2LmRlc2NyaXB0aW9uICYmIHRoaXMuY3Vyc29yID09PSBpKSB7XG4gICAgICAgICAgICBkZXNjID0gYCAtICR7di5kZXNjcmlwdGlvbn1gO1xuICAgICAgICAgICAgaWYgKHByZWZpeC5sZW5ndGggKyB0aXRsZS5sZW5ndGggKyBkZXNjLmxlbmd0aCA+PSB0aGlzLm91dC5jb2x1bW5zXG4gICAgICAgICAgICAgICAgfHwgdi5kZXNjcmlwdGlvbi5zcGxpdCgvXFxyP1xcbi8pLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgZGVzYyA9ICdcXG4nICsgd3JhcCh2LmRlc2NyaXB0aW9uLCB7IG1hcmdpbjogMywgd2lkdGg6IHRoaXMub3V0LmNvbHVtbnMgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5vdXRwdXRUZXh0ICs9IGAke3ByZWZpeH0gJHt0aXRsZX0ke2NvbG9yLmdyYXkoZGVzYyl9XFxuYDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLm91dC53cml0ZSh0aGlzLm91dHB1dFRleHQpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gU2VsZWN0UHJvbXB0O1xuIiwiY29uc3QgY29sb3IgPSByZXF1aXJlKCdrbGV1cicpO1xuY29uc3QgUHJvbXB0ID0gcmVxdWlyZSgnLi9wcm9tcHQnKTtcbmNvbnN0IHsgc3R5bGUsIGNsZWFyIH0gPSByZXF1aXJlKCcuLi91dGlsJyk7XG5jb25zdCB7IGN1cnNvciwgZXJhc2UgfSA9IHJlcXVpcmUoJ3Npc3RlcmFuc2knKTtcblxuLyoqXG4gKiBUb2dnbGVQcm9tcHQgQmFzZSBFbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyBPcHRpb25zXG4gKiBAcGFyYW0ge1N0cmluZ30gb3B0cy5tZXNzYWdlIE1lc3NhZ2VcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdHMuaW5pdGlhbD1mYWxzZV0gRGVmYXVsdCB2YWx1ZVxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLmFjdGl2ZT0nbm8nXSBBY3RpdmUgbGFiZWxcbiAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5pbmFjdGl2ZT0nb2ZmJ10gSW5hY3RpdmUgbGFiZWxcbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICovXG5jbGFzcyBUb2dnbGVQcm9tcHQgZXh0ZW5kcyBQcm9tcHQge1xuICBjb25zdHJ1Y3RvcihvcHRzPXt9KSB7XG4gICAgc3VwZXIob3B0cyk7XG4gICAgdGhpcy5tc2cgPSBvcHRzLm1lc3NhZ2U7XG4gICAgdGhpcy52YWx1ZSA9ICEhb3B0cy5pbml0aWFsO1xuICAgIHRoaXMuYWN0aXZlID0gb3B0cy5hY3RpdmUgfHwgJ29uJztcbiAgICB0aGlzLmluYWN0aXZlID0gb3B0cy5pbmFjdGl2ZSB8fCAnb2ZmJztcbiAgICB0aGlzLmluaXRpYWxWYWx1ZSA9IHRoaXMudmFsdWU7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHJlc2V0KCkge1xuICAgIHRoaXMudmFsdWUgPSB0aGlzLmluaXRpYWxWYWx1ZTtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZXhpdCgpIHtcbiAgICB0aGlzLmFib3J0KCk7XG4gIH1cblxuICBhYm9ydCgpIHtcbiAgICB0aGlzLmRvbmUgPSB0aGlzLmFib3J0ZWQgPSB0cnVlO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gICAgdGhpcy5vdXQud3JpdGUoJ1xcbicpO1xuICAgIHRoaXMuY2xvc2UoKTtcbiAgfVxuXG4gIHN1Ym1pdCgpIHtcbiAgICB0aGlzLmRvbmUgPSB0cnVlO1xuICAgIHRoaXMuYWJvcnRlZCA9IGZhbHNlO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gICAgdGhpcy5vdXQud3JpdGUoJ1xcbicpO1xuICAgIHRoaXMuY2xvc2UoKTtcbiAgfVxuXG4gIGRlYWN0aXZhdGUoKSB7XG4gICAgaWYgKHRoaXMudmFsdWUgPT09IGZhbHNlKSByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgdGhpcy52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBhY3RpdmF0ZSgpIHtcbiAgICBpZiAodGhpcy52YWx1ZSA9PT0gdHJ1ZSkgcmV0dXJuIHRoaXMuYmVsbCgpO1xuICAgIHRoaXMudmFsdWUgPSB0cnVlO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBkZWxldGUoKSB7XG4gICAgdGhpcy5kZWFjdGl2YXRlKCk7XG4gIH1cbiAgbGVmdCgpIHtcbiAgICB0aGlzLmRlYWN0aXZhdGUoKTtcbiAgfVxuICByaWdodCgpIHtcbiAgICB0aGlzLmFjdGl2YXRlKCk7XG4gIH1cbiAgZG93bigpIHtcbiAgICB0aGlzLmRlYWN0aXZhdGUoKTtcbiAgfVxuICB1cCgpIHtcbiAgICB0aGlzLmFjdGl2YXRlKCk7XG4gIH1cblxuICBuZXh0KCkge1xuICAgIHRoaXMudmFsdWUgPSAhdGhpcy52YWx1ZTtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgXyhjLCBrZXkpIHtcbiAgICBpZiAoYyA9PT0gJyAnKSB7XG4gICAgICB0aGlzLnZhbHVlID0gIXRoaXMudmFsdWU7XG4gICAgfSBlbHNlIGlmIChjID09PSAnMScpIHtcbiAgICAgIHRoaXMudmFsdWUgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAoYyA9PT0gJzAnKSB7XG4gICAgICB0aGlzLnZhbHVlID0gZmFsc2U7XG4gICAgfSBlbHNlIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGlmICh0aGlzLmNsb3NlZCkgcmV0dXJuO1xuICAgIGlmICh0aGlzLmZpcnN0UmVuZGVyKSB0aGlzLm91dC53cml0ZShjdXJzb3IuaGlkZSk7XG4gICAgZWxzZSB0aGlzLm91dC53cml0ZShjbGVhcih0aGlzLm91dHB1dFRleHQsIHRoaXMub3V0LmNvbHVtbnMpKTtcbiAgICBzdXBlci5yZW5kZXIoKTtcblxuICAgIHRoaXMub3V0cHV0VGV4dCA9IFtcbiAgICAgIHN0eWxlLnN5bWJvbCh0aGlzLmRvbmUsIHRoaXMuYWJvcnRlZCksXG4gICAgICBjb2xvci5ib2xkKHRoaXMubXNnKSxcbiAgICAgIHN0eWxlLmRlbGltaXRlcih0aGlzLmRvbmUpLFxuICAgICAgdGhpcy52YWx1ZSA/IHRoaXMuaW5hY3RpdmUgOiBjb2xvci5jeWFuKCkudW5kZXJsaW5lKHRoaXMuaW5hY3RpdmUpLFxuICAgICAgY29sb3IuZ3JheSgnLycpLFxuICAgICAgdGhpcy52YWx1ZSA/IGNvbG9yLmN5YW4oKS51bmRlcmxpbmUodGhpcy5hY3RpdmUpIDogdGhpcy5hY3RpdmVcbiAgICBdLmpvaW4oJyAnKTtcblxuICAgIHRoaXMub3V0LndyaXRlKGVyYXNlLmxpbmUgKyBjdXJzb3IudG8oMCkgKyB0aGlzLm91dHB1dFRleHQpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gVG9nZ2xlUHJvbXB0O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5jbGFzcyBEYXRlUGFydCB7XG4gIGNvbnN0cnVjdG9yKHt0b2tlbiwgZGF0ZSwgcGFydHMsIGxvY2FsZXN9KSB7XG4gICAgdGhpcy50b2tlbiA9IHRva2VuO1xuICAgIHRoaXMuZGF0ZSA9IGRhdGUgfHwgbmV3IERhdGUoKTtcbiAgICB0aGlzLnBhcnRzID0gcGFydHMgfHwgW3RoaXNdO1xuICAgIHRoaXMubG9jYWxlcyA9IGxvY2FsZXMgfHwge307XG4gIH1cblxuICB1cCgpIHt9XG5cbiAgZG93bigpIHt9XG5cbiAgbmV4dCgpIHtcbiAgICBjb25zdCBjdXJyZW50SWR4ID0gdGhpcy5wYXJ0cy5pbmRleE9mKHRoaXMpO1xuICAgIHJldHVybiB0aGlzLnBhcnRzLmZpbmQoKHBhcnQsIGlkeCkgPT4gaWR4ID4gY3VycmVudElkeCAmJiBwYXJ0IGluc3RhbmNlb2YgRGF0ZVBhcnQpO1xuICB9XG5cbiAgc2V0VG8odmFsKSB7fVxuXG4gIHByZXYoKSB7XG4gICAgbGV0IHBhcnRzID0gW10uY29uY2F0KHRoaXMucGFydHMpLnJldmVyc2UoKTtcbiAgICBjb25zdCBjdXJyZW50SWR4ID0gcGFydHMuaW5kZXhPZih0aGlzKTtcbiAgICByZXR1cm4gcGFydHMuZmluZCgocGFydCwgaWR4KSA9PiBpZHggPiBjdXJyZW50SWR4ICYmIHBhcnQgaW5zdGFuY2VvZiBEYXRlUGFydCk7XG4gIH1cblxuICB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gU3RyaW5nKHRoaXMuZGF0ZSk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBEYXRlUGFydDtcblxuXG4iLCIndXNlIHN0cmljdCc7XG5cbmNvbnN0IERhdGVQYXJ0ID0gcmVxdWlyZSgnLi9kYXRlcGFydCcpO1xuXG5jbGFzcyBNZXJpZGllbSBleHRlbmRzIERhdGVQYXJ0IHtcbiAgY29uc3RydWN0b3Iob3B0cz17fSkge1xuICAgIHN1cGVyKG9wdHMpO1xuICB9XG5cbiAgdXAoKSB7XG4gICAgdGhpcy5kYXRlLnNldEhvdXJzKCh0aGlzLmRhdGUuZ2V0SG91cnMoKSArIDEyKSAlIDI0KTtcbiAgfVxuXG4gIGRvd24oKSB7XG4gICAgdGhpcy51cCgpO1xuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgbGV0IG1lcmlkaWVtID0gdGhpcy5kYXRlLmdldEhvdXJzKCkgPiAxMiA/ICdwbScgOiAnYW0nO1xuICAgIHJldHVybiAvXFxBLy50ZXN0KHRoaXMudG9rZW4pID8gbWVyaWRpZW0udG9VcHBlckNhc2UoKSA6IG1lcmlkaWVtO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gTWVyaWRpZW07XG4iLCIndXNlIHN0cmljdCc7XG5cbmNvbnN0IERhdGVQYXJ0ID0gcmVxdWlyZSgnLi9kYXRlcGFydCcpO1xuXG5jb25zdCBwb3MgPSBuID0+IHtcbiAgbiA9IG4gJSAxMDtcbiAgcmV0dXJuIG4gPT09IDEgPyAnc3QnXG4gICAgICAgOiBuID09PSAyID8gJ25kJ1xuICAgICAgIDogbiA9PT0gMyA/ICdyZCdcbiAgICAgICA6ICd0aCc7XG59XG5cbmNsYXNzIERheSBleHRlbmRzIERhdGVQYXJ0IHtcbiAgY29uc3RydWN0b3Iob3B0cz17fSkge1xuICAgIHN1cGVyKG9wdHMpO1xuICB9XG5cbiAgdXAoKSB7XG4gICAgdGhpcy5kYXRlLnNldERhdGUodGhpcy5kYXRlLmdldERhdGUoKSArIDEpO1xuICB9XG5cbiAgZG93bigpIHtcbiAgICB0aGlzLmRhdGUuc2V0RGF0ZSh0aGlzLmRhdGUuZ2V0RGF0ZSgpIC0gMSk7XG4gIH1cblxuICBzZXRUbyh2YWwpIHtcbiAgICB0aGlzLmRhdGUuc2V0RGF0ZShwYXJzZUludCh2YWwuc3Vic3RyKC0yKSkpO1xuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgbGV0IGRhdGUgPSB0aGlzLmRhdGUuZ2V0RGF0ZSgpO1xuICAgIGxldCBkYXkgPSB0aGlzLmRhdGUuZ2V0RGF5KCk7XG4gICAgcmV0dXJuIHRoaXMudG9rZW4gPT09ICdERCcgPyBTdHJpbmcoZGF0ZSkucGFkU3RhcnQoMiwgJzAnKVxuICAgICAgICAgOiB0aGlzLnRva2VuID09PSAnRG8nID8gZGF0ZSArIHBvcyhkYXRlKVxuICAgICAgICAgOiB0aGlzLnRva2VuID09PSAnZCcgPyBkYXkgKyAxXG4gICAgICAgICA6IHRoaXMudG9rZW4gPT09ICdkZGQnID8gdGhpcy5sb2NhbGVzLndlZWtkYXlzU2hvcnRbZGF5XVxuICAgICAgICAgOiB0aGlzLnRva2VuID09PSAnZGRkZCcgPyB0aGlzLmxvY2FsZXMud2Vla2RheXNbZGF5XVxuICAgICAgICAgOiBkYXRlO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gRGF5O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBEYXRlUGFydCA9IHJlcXVpcmUoJy4vZGF0ZXBhcnQnKTtcblxuY2xhc3MgSG91cnMgZXh0ZW5kcyBEYXRlUGFydCB7XG4gIGNvbnN0cnVjdG9yKG9wdHM9e30pIHtcbiAgICBzdXBlcihvcHRzKTtcbiAgfVxuXG4gIHVwKCkge1xuICAgIHRoaXMuZGF0ZS5zZXRIb3Vycyh0aGlzLmRhdGUuZ2V0SG91cnMoKSArIDEpO1xuICB9XG5cbiAgZG93bigpIHtcbiAgICB0aGlzLmRhdGUuc2V0SG91cnModGhpcy5kYXRlLmdldEhvdXJzKCkgLSAxKTtcbiAgfVxuXG4gIHNldFRvKHZhbCkge1xuICAgIHRoaXMuZGF0ZS5zZXRIb3VycyhwYXJzZUludCh2YWwuc3Vic3RyKC0yKSkpO1xuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgbGV0IGhvdXJzID0gdGhpcy5kYXRlLmdldEhvdXJzKCk7XG4gICAgaWYgKC9oLy50ZXN0KHRoaXMudG9rZW4pKVxuICAgICAgaG91cnMgPSAoaG91cnMgJSAxMikgfHwgMTI7XG4gICAgcmV0dXJuIHRoaXMudG9rZW4ubGVuZ3RoID4gMSA/IFN0cmluZyhob3VycykucGFkU3RhcnQoMiwgJzAnKSA6IGhvdXJzO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gSG91cnM7XG4iLCIndXNlIHN0cmljdCc7XG5cbmNvbnN0IERhdGVQYXJ0ID0gcmVxdWlyZSgnLi9kYXRlcGFydCcpO1xuXG5jbGFzcyBNaWxsaXNlY29uZHMgZXh0ZW5kcyBEYXRlUGFydCB7XG4gIGNvbnN0cnVjdG9yKG9wdHM9e30pIHtcbiAgICBzdXBlcihvcHRzKTtcbiAgfVxuXG4gIHVwKCkge1xuICAgIHRoaXMuZGF0ZS5zZXRNaWxsaXNlY29uZHModGhpcy5kYXRlLmdldE1pbGxpc2Vjb25kcygpICsgMSk7XG4gIH1cblxuICBkb3duKCkge1xuICAgIHRoaXMuZGF0ZS5zZXRNaWxsaXNlY29uZHModGhpcy5kYXRlLmdldE1pbGxpc2Vjb25kcygpIC0gMSk7XG4gIH1cblxuICBzZXRUbyh2YWwpIHtcbiAgICB0aGlzLmRhdGUuc2V0TWlsbGlzZWNvbmRzKHBhcnNlSW50KHZhbC5zdWJzdHIoLSh0aGlzLnRva2VuLmxlbmd0aCkpKSk7XG4gIH1cblxuICB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gU3RyaW5nKHRoaXMuZGF0ZS5nZXRNaWxsaXNlY29uZHMoKSkucGFkU3RhcnQoNCwgJzAnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zdWJzdHIoMCwgdGhpcy50b2tlbi5sZW5ndGgpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gTWlsbGlzZWNvbmRzO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBEYXRlUGFydCA9IHJlcXVpcmUoJy4vZGF0ZXBhcnQnKTtcblxuY2xhc3MgTWludXRlcyBleHRlbmRzIERhdGVQYXJ0IHtcbiAgY29uc3RydWN0b3Iob3B0cz17fSkge1xuICAgIHN1cGVyKG9wdHMpO1xuICB9XG5cbiAgdXAoKSB7XG4gICAgdGhpcy5kYXRlLnNldE1pbnV0ZXModGhpcy5kYXRlLmdldE1pbnV0ZXMoKSArIDEpO1xuICB9XG5cbiAgZG93bigpIHtcbiAgICB0aGlzLmRhdGUuc2V0TWludXRlcyh0aGlzLmRhdGUuZ2V0TWludXRlcygpIC0gMSk7XG4gIH1cblxuICBzZXRUbyh2YWwpIHtcbiAgICB0aGlzLmRhdGUuc2V0TWludXRlcyhwYXJzZUludCh2YWwuc3Vic3RyKC0yKSkpO1xuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgbGV0IG0gPSB0aGlzLmRhdGUuZ2V0TWludXRlcygpO1xuICAgIHJldHVybiB0aGlzLnRva2VuLmxlbmd0aCA+IDEgPyBTdHJpbmcobSkucGFkU3RhcnQoMiwgJzAnKSA6IG07XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBNaW51dGVzO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBEYXRlUGFydCA9IHJlcXVpcmUoJy4vZGF0ZXBhcnQnKTtcblxuY2xhc3MgTW9udGggZXh0ZW5kcyBEYXRlUGFydCB7XG4gIGNvbnN0cnVjdG9yKG9wdHM9e30pIHtcbiAgICBzdXBlcihvcHRzKTtcbiAgfVxuXG4gIHVwKCkge1xuICAgIHRoaXMuZGF0ZS5zZXRNb250aCh0aGlzLmRhdGUuZ2V0TW9udGgoKSArIDEpO1xuICB9XG5cbiAgZG93bigpIHtcbiAgICB0aGlzLmRhdGUuc2V0TW9udGgodGhpcy5kYXRlLmdldE1vbnRoKCkgLSAxKTtcbiAgfVxuXG4gIHNldFRvKHZhbCkge1xuICAgIHZhbCA9IHBhcnNlSW50KHZhbC5zdWJzdHIoLTIpKSAtIDE7XG4gICAgdGhpcy5kYXRlLnNldE1vbnRoKHZhbCA8IDAgPyAwIDogdmFsKTtcbiAgfVxuXG4gIHRvU3RyaW5nKCkge1xuICAgIGxldCBtb250aCA9IHRoaXMuZGF0ZS5nZXRNb250aCgpO1xuICAgIGxldCB0bCA9IHRoaXMudG9rZW4ubGVuZ3RoO1xuICAgIHJldHVybiB0bCA9PT0gMiA/IFN0cmluZyhtb250aCArIDEpLnBhZFN0YXJ0KDIsICcwJylcbiAgICAgICAgICAgOiB0bCA9PT0gMyA/IHRoaXMubG9jYWxlcy5tb250aHNTaG9ydFttb250aF1cbiAgICAgICAgICAgICA6IHRsID09PSA0ID8gdGhpcy5sb2NhbGVzLm1vbnRoc1ttb250aF1cbiAgICAgICAgICAgICAgIDogU3RyaW5nKG1vbnRoICsgMSk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBNb250aDtcbiIsIid1c2Ugc3RyaWN0JztcblxuY29uc3QgRGF0ZVBhcnQgPSByZXF1aXJlKCcuL2RhdGVwYXJ0Jyk7XG5cbmNsYXNzIFNlY29uZHMgZXh0ZW5kcyBEYXRlUGFydCB7XG4gIGNvbnN0cnVjdG9yKG9wdHM9e30pIHtcbiAgICBzdXBlcihvcHRzKTtcbiAgfVxuXG4gIHVwKCkge1xuICAgIHRoaXMuZGF0ZS5zZXRTZWNvbmRzKHRoaXMuZGF0ZS5nZXRTZWNvbmRzKCkgKyAxKTtcbiAgfVxuXG4gIGRvd24oKSB7XG4gICAgdGhpcy5kYXRlLnNldFNlY29uZHModGhpcy5kYXRlLmdldFNlY29uZHMoKSAtIDEpO1xuICB9XG5cbiAgc2V0VG8odmFsKSB7XG4gICAgdGhpcy5kYXRlLnNldFNlY29uZHMocGFyc2VJbnQodmFsLnN1YnN0cigtMikpKTtcbiAgfVxuXG4gIHRvU3RyaW5nKCkge1xuICAgIGxldCBzID0gdGhpcy5kYXRlLmdldFNlY29uZHMoKTtcbiAgICByZXR1cm4gdGhpcy50b2tlbi5sZW5ndGggPiAxID8gU3RyaW5nKHMpLnBhZFN0YXJ0KDIsICcwJykgOiBzO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gU2Vjb25kcztcbiIsIid1c2Ugc3RyaWN0JztcblxuY29uc3QgRGF0ZVBhcnQgPSByZXF1aXJlKCcuL2RhdGVwYXJ0Jyk7XG5cbmNsYXNzIFllYXIgZXh0ZW5kcyBEYXRlUGFydCB7XG4gIGNvbnN0cnVjdG9yKG9wdHM9e30pIHtcbiAgICBzdXBlcihvcHRzKTtcbiAgfVxuXG4gIHVwKCkge1xuICAgIHRoaXMuZGF0ZS5zZXRGdWxsWWVhcih0aGlzLmRhdGUuZ2V0RnVsbFllYXIoKSArIDEpO1xuICB9XG5cbiAgZG93bigpIHtcbiAgICB0aGlzLmRhdGUuc2V0RnVsbFllYXIodGhpcy5kYXRlLmdldEZ1bGxZZWFyKCkgLSAxKTtcbiAgfVxuXG4gIHNldFRvKHZhbCkge1xuICAgIHRoaXMuZGF0ZS5zZXRGdWxsWWVhcih2YWwuc3Vic3RyKC00KSk7XG4gIH1cblxuICB0b1N0cmluZygpIHtcbiAgICBsZXQgeWVhciA9IFN0cmluZyh0aGlzLmRhdGUuZ2V0RnVsbFllYXIoKSkucGFkU3RhcnQoNCwgJzAnKTtcbiAgICByZXR1cm4gdGhpcy50b2tlbi5sZW5ndGggPT09IDIgPyB5ZWFyLnN1YnN0cigtMikgOiB5ZWFyO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gWWVhcjtcbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIERhdGVQYXJ0OiByZXF1aXJlKCcuL2RhdGVwYXJ0JyksXG4gIE1lcmlkaWVtOiByZXF1aXJlKCcuL21lcmlkaWVtJyksXG4gIERheTogcmVxdWlyZSgnLi9kYXknKSxcbiAgSG91cnM6IHJlcXVpcmUoJy4vaG91cnMnKSxcbiAgTWlsbGlzZWNvbmRzOiByZXF1aXJlKCcuL21pbGxpc2Vjb25kcycpLFxuICBNaW51dGVzOiByZXF1aXJlKCcuL21pbnV0ZXMnKSxcbiAgTW9udGg6IHJlcXVpcmUoJy4vbW9udGgnKSxcbiAgU2Vjb25kczogcmVxdWlyZSgnLi9zZWNvbmRzJyksXG4gIFllYXI6IHJlcXVpcmUoJy4veWVhcicpLFxufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBjb2xvciA9IHJlcXVpcmUoJ2tsZXVyJyk7XG5jb25zdCBQcm9tcHQgPSByZXF1aXJlKCcuL3Byb21wdCcpO1xuY29uc3QgeyBzdHlsZSwgY2xlYXIsIGZpZ3VyZXMgfSA9IHJlcXVpcmUoJy4uL3V0aWwnKTtcbmNvbnN0IHsgZXJhc2UsIGN1cnNvciB9ID0gcmVxdWlyZSgnc2lzdGVyYW5zaScpO1xuY29uc3QgeyBEYXRlUGFydCwgTWVyaWRpZW0sIERheSwgSG91cnMsIE1pbGxpc2Vjb25kcywgTWludXRlcywgTW9udGgsIFNlY29uZHMsIFllYXIgfSA9IHJlcXVpcmUoJy4uL2RhdGVwYXJ0cycpO1xuXG5jb25zdCByZWdleCA9IC9cXFxcKC4pfFwiKCg/OlxcXFxbXCJcXFxcXXxbXlwiXSkrKVwifChEW0RvXT98ZHszLDR9fGQpfChNezEsNH0pfChZWSg/OllZKT8pfChbYUFdKXwoW0hoXXsxLDJ9KXwobXsxLDJ9KXwoc3sxLDJ9KXwoU3sxLDR9KXwuL2c7XG5jb25zdCByZWdleEdyb3VwcyA9IHtcbiAgMTogKHt0b2tlbn0pID0+IHRva2VuLnJlcGxhY2UoL1xcXFwoLikvZywgJyQxJyksXG4gIDI6IChvcHRzKSA9PiBuZXcgRGF5KG9wdHMpLCAvLyBEYXkgLy8gVE9ET1xuICAzOiAob3B0cykgPT4gbmV3IE1vbnRoKG9wdHMpLCAvLyBNb250aFxuICA0OiAob3B0cykgPT4gbmV3IFllYXIob3B0cyksIC8vIFllYXJcbiAgNTogKG9wdHMpID0+IG5ldyBNZXJpZGllbShvcHRzKSwgLy8gQU0vUE0gLy8gVE9ETyAoc3BlY2lhbClcbiAgNjogKG9wdHMpID0+IG5ldyBIb3VycyhvcHRzKSwgLy8gSG91cnNcbiAgNzogKG9wdHMpID0+IG5ldyBNaW51dGVzKG9wdHMpLCAvLyBNaW51dGVzXG4gIDg6IChvcHRzKSA9PiBuZXcgU2Vjb25kcyhvcHRzKSwgLy8gU2Vjb25kc1xuICA5OiAob3B0cykgPT4gbmV3IE1pbGxpc2Vjb25kcyhvcHRzKSwgLy8gRnJhY3Rpb25hbCBzZWNvbmRzXG59XG5cbmNvbnN0IGRmbHRMb2NhbGVzID0ge1xuICBtb250aHM6ICdKYW51YXJ5LEZlYnJ1YXJ5LE1hcmNoLEFwcmlsLE1heSxKdW5lLEp1bHksQXVndXN0LFNlcHRlbWJlcixPY3RvYmVyLE5vdmVtYmVyLERlY2VtYmVyJy5zcGxpdCgnLCcpLFxuICBtb250aHNTaG9ydDogJ0phbixGZWIsTWFyLEFwcixNYXksSnVuLEp1bCxBdWcsU2VwLE9jdCxOb3YsRGVjJy5zcGxpdCgnLCcpLFxuICB3ZWVrZGF5czogJ1N1bmRheSxNb25kYXksVHVlc2RheSxXZWRuZXNkYXksVGh1cnNkYXksRnJpZGF5LFNhdHVyZGF5Jy5zcGxpdCgnLCcpLFxuICB3ZWVrZGF5c1Nob3J0OiAnU3VuLE1vbixUdWUsV2VkLFRodSxGcmksU2F0Jy5zcGxpdCgnLCcpXG59XG5cblxuLyoqXG4gKiBEYXRlUHJvbXB0IEJhc2UgRWxlbWVudFxuICogQHBhcmFtIHtPYmplY3R9IG9wdHMgT3B0aW9uc1xuICogQHBhcmFtIHtTdHJpbmd9IG9wdHMubWVzc2FnZSBNZXNzYWdlXG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMuaW5pdGlhbF0gSW5kZXggb2YgZGVmYXVsdCB2YWx1ZVxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLm1hc2tdIFRoZSBmb3JtYXQgbWFza1xuICogQHBhcmFtIHtvYmplY3R9IFtvcHRzLmxvY2FsZXNdIFRoZSBkYXRlIGxvY2FsZXNcbiAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5lcnJvcl0gVGhlIGVycm9yIG1lc3NhZ2Ugc2hvd24gb24gaW52YWxpZCB2YWx1ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdHMudmFsaWRhdGVdIEZ1bmN0aW9uIHRvIHZhbGlkYXRlIHRoZSBzdWJtaXR0ZWQgdmFsdWVcbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICovXG5jbGFzcyBEYXRlUHJvbXB0IGV4dGVuZHMgUHJvbXB0IHtcbiAgY29uc3RydWN0b3Iob3B0cz17fSkge1xuICAgIHN1cGVyKG9wdHMpO1xuICAgIHRoaXMubXNnID0gb3B0cy5tZXNzYWdlO1xuICAgIHRoaXMuY3Vyc29yID0gMDtcbiAgICB0aGlzLnR5cGVkID0gJyc7XG4gICAgdGhpcy5sb2NhbGVzID0gT2JqZWN0LmFzc2lnbihkZmx0TG9jYWxlcywgb3B0cy5sb2NhbGVzKTtcbiAgICB0aGlzLl9kYXRlID0gb3B0cy5pbml0aWFsIHx8IG5ldyBEYXRlKCk7XG4gICAgdGhpcy5lcnJvck1zZyA9IG9wdHMuZXJyb3IgfHwgJ1BsZWFzZSBFbnRlciBBIFZhbGlkIFZhbHVlJztcbiAgICB0aGlzLnZhbGlkYXRvciA9IG9wdHMudmFsaWRhdGUgfHwgKCgpID0+IHRydWUpO1xuICAgIHRoaXMubWFzayA9IG9wdHMubWFzayB8fCAnWVlZWS1NTS1ERCBISDptbTpzcyc7XG4gICAgdGhpcy5jbGVhciA9IGNsZWFyKCcnLCB0aGlzLm91dC5jb2x1bW5zKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZ2V0IHZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLmRhdGVcbiAgfVxuXG4gIGdldCBkYXRlKCkge1xuICAgIHJldHVybiB0aGlzLl9kYXRlO1xuICB9XG5cbiAgc2V0IGRhdGUoZGF0ZSkge1xuICAgIGlmIChkYXRlKSB0aGlzLl9kYXRlLnNldFRpbWUoZGF0ZS5nZXRUaW1lKCkpO1xuICB9XG5cbiAgc2V0IG1hc2sobWFzaykge1xuICAgIGxldCByZXN1bHQ7XG4gICAgdGhpcy5wYXJ0cyA9IFtdO1xuICAgIHdoaWxlKHJlc3VsdCA9IHJlZ2V4LmV4ZWMobWFzaykpIHtcbiAgICAgIGxldCBtYXRjaCA9IHJlc3VsdC5zaGlmdCgpO1xuICAgICAgbGV0IGlkeCA9IHJlc3VsdC5maW5kSW5kZXgoZ3IgPT4gZ3IgIT0gbnVsbCk7XG4gICAgICB0aGlzLnBhcnRzLnB1c2goaWR4IGluIHJlZ2V4R3JvdXBzXG4gICAgICAgID8gcmVnZXhHcm91cHNbaWR4XSh7IHRva2VuOiByZXN1bHRbaWR4XSB8fCBtYXRjaCwgZGF0ZTogdGhpcy5kYXRlLCBwYXJ0czogdGhpcy5wYXJ0cywgbG9jYWxlczogdGhpcy5sb2NhbGVzIH0pXG4gICAgICAgIDogcmVzdWx0W2lkeF0gfHwgbWF0Y2gpO1xuICAgIH1cblxuICAgIGxldCBwYXJ0cyA9IHRoaXMucGFydHMucmVkdWNlKChhcnIsIGkpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgaSA9PT0gJ3N0cmluZycgJiYgdHlwZW9mIGFyclthcnIubGVuZ3RoIC0gMV0gPT09ICdzdHJpbmcnKVxuICAgICAgICBhcnJbYXJyLmxlbmd0aCAtIDFdICs9IGk7XG4gICAgICBlbHNlIGFyci5wdXNoKGkpO1xuICAgICAgcmV0dXJuIGFycjtcbiAgICB9LCBbXSk7XG5cbiAgICB0aGlzLnBhcnRzLnNwbGljZSgwKTtcbiAgICB0aGlzLnBhcnRzLnB1c2goLi4ucGFydHMpO1xuICAgIHRoaXMucmVzZXQoKTtcbiAgfVxuXG4gIG1vdmVDdXJzb3Iobikge1xuICAgIHRoaXMudHlwZWQgPSAnJztcbiAgICB0aGlzLmN1cnNvciA9IG47XG4gICAgdGhpcy5maXJlKCk7XG4gIH1cblxuICByZXNldCgpIHtcbiAgICB0aGlzLm1vdmVDdXJzb3IodGhpcy5wYXJ0cy5maW5kSW5kZXgocCA9PiBwIGluc3RhbmNlb2YgRGF0ZVBhcnQpKTtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZXhpdCgpIHtcbiAgICB0aGlzLmFib3J0KCk7XG4gIH1cblxuICBhYm9ydCgpIHtcbiAgICB0aGlzLmRvbmUgPSB0aGlzLmFib3J0ZWQgPSB0cnVlO1xuICAgIHRoaXMuZXJyb3IgPSBmYWxzZTtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICAgIHRoaXMub3V0LndyaXRlKCdcXG4nKTtcbiAgICB0aGlzLmNsb3NlKCk7XG4gIH1cblxuICBhc3luYyB2YWxpZGF0ZSgpIHtcbiAgICBsZXQgdmFsaWQgPSBhd2FpdCB0aGlzLnZhbGlkYXRvcih0aGlzLnZhbHVlKTtcbiAgICBpZiAodHlwZW9mIHZhbGlkID09PSAnc3RyaW5nJykge1xuICAgICAgdGhpcy5lcnJvck1zZyA9IHZhbGlkO1xuICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5lcnJvciA9ICF2YWxpZDtcbiAgfVxuXG4gIGFzeW5jIHN1Ym1pdCgpIHtcbiAgICBhd2FpdCB0aGlzLnZhbGlkYXRlKCk7XG4gICAgaWYgKHRoaXMuZXJyb3IpIHtcbiAgICAgIHRoaXMuY29sb3IgPSAncmVkJztcbiAgICAgIHRoaXMuZmlyZSgpO1xuICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5kb25lID0gdHJ1ZTtcbiAgICB0aGlzLmFib3J0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICAgIHRoaXMub3V0LndyaXRlKCdcXG4nKTtcbiAgICB0aGlzLmNsb3NlKCk7XG4gIH1cblxuICB1cCgpIHtcbiAgICB0aGlzLnR5cGVkID0gJyc7XG4gICAgdGhpcy5wYXJ0c1t0aGlzLmN1cnNvcl0udXAoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZG93bigpIHtcbiAgICB0aGlzLnR5cGVkID0gJyc7XG4gICAgdGhpcy5wYXJ0c1t0aGlzLmN1cnNvcl0uZG93bigpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBsZWZ0KCkge1xuICAgIGxldCBwcmV2ID0gdGhpcy5wYXJ0c1t0aGlzLmN1cnNvcl0ucHJldigpO1xuICAgIGlmIChwcmV2ID09IG51bGwpIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgICB0aGlzLm1vdmVDdXJzb3IodGhpcy5wYXJ0cy5pbmRleE9mKHByZXYpKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgcmlnaHQoKSB7XG4gICAgbGV0IG5leHQgPSB0aGlzLnBhcnRzW3RoaXMuY3Vyc29yXS5uZXh0KCk7XG4gICAgaWYgKG5leHQgPT0gbnVsbCkgcmV0dXJuIHRoaXMuYmVsbCgpO1xuICAgIHRoaXMubW92ZUN1cnNvcih0aGlzLnBhcnRzLmluZGV4T2YobmV4dCkpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBuZXh0KCkge1xuICAgIGxldCBuZXh0ID0gdGhpcy5wYXJ0c1t0aGlzLmN1cnNvcl0ubmV4dCgpO1xuICAgIHRoaXMubW92ZUN1cnNvcihuZXh0XG4gICAgICA/IHRoaXMucGFydHMuaW5kZXhPZihuZXh0KVxuICAgICAgOiB0aGlzLnBhcnRzLmZpbmRJbmRleCgocGFydCkgPT4gcGFydCBpbnN0YW5jZW9mIERhdGVQYXJ0KSk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIF8oYykge1xuICAgIGlmICgvXFxkLy50ZXN0KGMpKSB7XG4gICAgICB0aGlzLnR5cGVkICs9IGM7XG4gICAgICB0aGlzLnBhcnRzW3RoaXMuY3Vyc29yXS5zZXRUbyh0aGlzLnR5cGVkKTtcbiAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGlmICh0aGlzLmNsb3NlZCkgcmV0dXJuO1xuICAgIGlmICh0aGlzLmZpcnN0UmVuZGVyKSB0aGlzLm91dC53cml0ZShjdXJzb3IuaGlkZSk7XG4gICAgZWxzZSB0aGlzLm91dC53cml0ZShjbGVhcih0aGlzLm91dHB1dFRleHQsIHRoaXMub3V0LmNvbHVtbnMpKTtcbiAgICBzdXBlci5yZW5kZXIoKTtcblxuICAgIC8vIFByaW50IHByb21wdFxuICAgIHRoaXMub3V0cHV0VGV4dCA9IFtcbiAgICAgIHN0eWxlLnN5bWJvbCh0aGlzLmRvbmUsIHRoaXMuYWJvcnRlZCksXG4gICAgICBjb2xvci5ib2xkKHRoaXMubXNnKSxcbiAgICAgIHN0eWxlLmRlbGltaXRlcihmYWxzZSksXG4gICAgICB0aGlzLnBhcnRzLnJlZHVjZSgoYXJyLCBwLCBpZHgpID0+IGFyci5jb25jYXQoaWR4ID09PSB0aGlzLmN1cnNvciAmJiAhdGhpcy5kb25lID8gY29sb3IuY3lhbigpLnVuZGVybGluZShwLnRvU3RyaW5nKCkpIDogcCksIFtdKVxuICAgICAgICAgIC5qb2luKCcnKVxuICAgIF0uam9pbignICcpO1xuXG4gICAgLy8gUHJpbnQgZXJyb3JcbiAgICBpZiAodGhpcy5lcnJvcikge1xuICAgICAgdGhpcy5vdXRwdXRUZXh0ICs9IHRoaXMuZXJyb3JNc2cuc3BsaXQoJ1xcbicpLnJlZHVjZShcbiAgICAgICAgICAoYSwgbCwgaSkgPT4gYSArIGBcXG4ke2kgPyBgIGAgOiBmaWd1cmVzLnBvaW50ZXJTbWFsbH0gJHtjb2xvci5yZWQoKS5pdGFsaWMobCl9YCwgYGApO1xuICAgIH1cblxuICAgIHRoaXMub3V0LndyaXRlKGVyYXNlLmxpbmUgKyBjdXJzb3IudG8oMCkgKyB0aGlzLm91dHB1dFRleHQpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gRGF0ZVByb21wdDtcbiIsImNvbnN0IGNvbG9yID0gcmVxdWlyZSgna2xldXInKTtcbmNvbnN0IFByb21wdCA9IHJlcXVpcmUoJy4vcHJvbXB0Jyk7XG5jb25zdCB7IGN1cnNvciwgZXJhc2UgfSA9IHJlcXVpcmUoJ3Npc3RlcmFuc2knKTtcbmNvbnN0IHsgc3R5bGUsIGZpZ3VyZXMsIGNsZWFyLCBsaW5lcyB9ID0gcmVxdWlyZSgnLi4vdXRpbCcpO1xuXG5jb25zdCBpc051bWJlciA9IC9bMC05XS87XG5jb25zdCBpc0RlZiA9IGFueSA9PiBhbnkgIT09IHVuZGVmaW5lZDtcbmNvbnN0IHJvdW5kID0gKG51bWJlciwgcHJlY2lzaW9uKSA9PiB7XG4gIGxldCBmYWN0b3IgPSBNYXRoLnBvdygxMCwgcHJlY2lzaW9uKTtcbiAgcmV0dXJuIE1hdGgucm91bmQobnVtYmVyICogZmFjdG9yKSAvIGZhY3Rvcjtcbn1cblxuLyoqXG4gKiBOdW1iZXJQcm9tcHQgQmFzZSBFbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyBPcHRpb25zXG4gKiBAcGFyYW0ge1N0cmluZ30gb3B0cy5tZXNzYWdlIE1lc3NhZ2VcbiAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5zdHlsZT0nZGVmYXVsdCddIFJlbmRlciBzdHlsZVxuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLmluaXRpYWxdIERlZmF1bHQgdmFsdWVcbiAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0cy5tYXg9K0luZmluaXR5XSBNYXggdmFsdWVcbiAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0cy5taW49LUluZmluaXR5XSBNaW4gdmFsdWVcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdHMuZmxvYXQ9ZmFsc2VdIFBhcnNlIGlucHV0IGFzIGZsb2F0c1xuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLnJvdW5kPTJdIFJvdW5kIGZsb2F0cyB0byB4IGRlY2ltYWxzXG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMuaW5jcmVtZW50PTFdIE51bWJlciB0byBpbmNyZW1lbnQgYnkgd2hlbiB1c2luZyBhcnJvdy1rZXlzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0cy52YWxpZGF0ZV0gVmFsaWRhdGUgZnVuY3Rpb25cbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLmVycm9yXSBUaGUgaW52YWxpZCBlcnJvciBsYWJlbFxuICovXG5jbGFzcyBOdW1iZXJQcm9tcHQgZXh0ZW5kcyBQcm9tcHQge1xuICBjb25zdHJ1Y3RvcihvcHRzPXt9KSB7XG4gICAgc3VwZXIob3B0cyk7XG4gICAgdGhpcy50cmFuc2Zvcm0gPSBzdHlsZS5yZW5kZXIob3B0cy5zdHlsZSk7XG4gICAgdGhpcy5tc2cgPSBvcHRzLm1lc3NhZ2U7XG4gICAgdGhpcy5pbml0aWFsID0gaXNEZWYob3B0cy5pbml0aWFsKSA/IG9wdHMuaW5pdGlhbCA6ICcnO1xuICAgIHRoaXMuZmxvYXQgPSAhIW9wdHMuZmxvYXQ7XG4gICAgdGhpcy5yb3VuZCA9IG9wdHMucm91bmQgfHwgMjtcbiAgICB0aGlzLmluYyA9IG9wdHMuaW5jcmVtZW50IHx8IDE7XG4gICAgdGhpcy5taW4gPSBpc0RlZihvcHRzLm1pbikgPyBvcHRzLm1pbiA6IC1JbmZpbml0eTtcbiAgICB0aGlzLm1heCA9IGlzRGVmKG9wdHMubWF4KSA/IG9wdHMubWF4IDogSW5maW5pdHk7XG4gICAgdGhpcy5lcnJvck1zZyA9IG9wdHMuZXJyb3IgfHwgYFBsZWFzZSBFbnRlciBBIFZhbGlkIFZhbHVlYDtcbiAgICB0aGlzLnZhbGlkYXRvciA9IG9wdHMudmFsaWRhdGUgfHwgKCgpID0+IHRydWUpO1xuICAgIHRoaXMuY29sb3IgPSBgY3lhbmA7XG4gICAgdGhpcy52YWx1ZSA9IGBgO1xuICAgIHRoaXMudHlwZWQgPSBgYDtcbiAgICB0aGlzLmxhc3RIaXQgPSAwO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBzZXQgdmFsdWUodikge1xuICAgIGlmICghdiAmJiB2ICE9PSAwKSB7XG4gICAgICB0aGlzLnBsYWNlaG9sZGVyID0gdHJ1ZTtcbiAgICAgIHRoaXMucmVuZGVyZWQgPSBjb2xvci5ncmF5KHRoaXMudHJhbnNmb3JtLnJlbmRlcihgJHt0aGlzLmluaXRpYWx9YCkpO1xuICAgICAgdGhpcy5fdmFsdWUgPSBgYDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wbGFjZWhvbGRlciA9IGZhbHNlO1xuICAgICAgdGhpcy5yZW5kZXJlZCA9IHRoaXMudHJhbnNmb3JtLnJlbmRlcihgJHtyb3VuZCh2LCB0aGlzLnJvdW5kKX1gKTtcbiAgICAgIHRoaXMuX3ZhbHVlID0gcm91bmQodiwgdGhpcy5yb3VuZCk7XG4gICAgfVxuICAgIHRoaXMuZmlyZSgpO1xuICB9XG5cbiAgZ2V0IHZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgfVxuXG4gIHBhcnNlKHgpIHtcbiAgICByZXR1cm4gdGhpcy5mbG9hdCA/IHBhcnNlRmxvYXQoeCkgOiBwYXJzZUludCh4KTtcbiAgfVxuXG4gIHZhbGlkKGMpIHtcbiAgICByZXR1cm4gYyA9PT0gYC1gIHx8IGMgPT09IGAuYCAmJiB0aGlzLmZsb2F0IHx8IGlzTnVtYmVyLnRlc3QoYylcbiAgfVxuXG4gIHJlc2V0KCkge1xuICAgIHRoaXMudHlwZWQgPSBgYDtcbiAgICB0aGlzLnZhbHVlID0gYGA7XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIGV4aXQoKSB7XG4gICAgdGhpcy5hYm9ydCgpO1xuICB9XG5cbiAgYWJvcnQoKSB7XG4gICAgbGV0IHggPSB0aGlzLnZhbHVlO1xuICAgIHRoaXMudmFsdWUgPSB4ICE9PSBgYCA/IHggOiB0aGlzLmluaXRpYWw7XG4gICAgdGhpcy5kb25lID0gdGhpcy5hYm9ydGVkID0gdHJ1ZTtcbiAgICB0aGlzLmVycm9yID0gZmFsc2U7XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgICB0aGlzLm91dC53cml0ZShgXFxuYCk7XG4gICAgdGhpcy5jbG9zZSgpO1xuICB9XG5cbiAgYXN5bmMgdmFsaWRhdGUoKSB7XG4gICAgbGV0IHZhbGlkID0gYXdhaXQgdGhpcy52YWxpZGF0b3IodGhpcy52YWx1ZSk7XG4gICAgaWYgKHR5cGVvZiB2YWxpZCA9PT0gYHN0cmluZ2ApIHtcbiAgICAgIHRoaXMuZXJyb3JNc2cgPSB2YWxpZDtcbiAgICAgIHZhbGlkID0gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuZXJyb3IgPSAhdmFsaWQ7XG4gIH1cblxuICBhc3luYyBzdWJtaXQoKSB7XG4gICAgYXdhaXQgdGhpcy52YWxpZGF0ZSgpO1xuICAgIGlmICh0aGlzLmVycm9yKSB7XG4gICAgICB0aGlzLmNvbG9yID0gYHJlZGA7XG4gICAgICB0aGlzLmZpcmUoKTtcbiAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCB4ID0gdGhpcy52YWx1ZTtcbiAgICB0aGlzLnZhbHVlID0geCAhPT0gYGAgPyB4IDogdGhpcy5pbml0aWFsO1xuICAgIHRoaXMuZG9uZSA9IHRydWU7XG4gICAgdGhpcy5hYm9ydGVkID0gZmFsc2U7XG4gICAgdGhpcy5lcnJvciA9IGZhbHNlO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gICAgdGhpcy5vdXQud3JpdGUoYFxcbmApO1xuICAgIHRoaXMuY2xvc2UoKTtcbiAgfVxuXG4gIHVwKCkge1xuICAgIHRoaXMudHlwZWQgPSBgYDtcbiAgICBpZih0aGlzLnZhbHVlID09PSAnJykge1xuICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubWluIC0gdGhpcy5pbmM7XG4gICAgfVxuICAgIGlmICh0aGlzLnZhbHVlID49IHRoaXMubWF4KSByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgdGhpcy52YWx1ZSArPSB0aGlzLmluYztcbiAgICB0aGlzLmNvbG9yID0gYGN5YW5gO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBkb3duKCkge1xuICAgIHRoaXMudHlwZWQgPSBgYDtcbiAgICBpZih0aGlzLnZhbHVlID09PSAnJykge1xuICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubWluICsgdGhpcy5pbmM7XG4gICAgfVxuICAgIGlmICh0aGlzLnZhbHVlIDw9IHRoaXMubWluKSByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgdGhpcy52YWx1ZSAtPSB0aGlzLmluYztcbiAgICB0aGlzLmNvbG9yID0gYGN5YW5gO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBkZWxldGUoKSB7XG4gICAgbGV0IHZhbCA9IHRoaXMudmFsdWUudG9TdHJpbmcoKTtcbiAgICBpZiAodmFsLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHRoaXMuYmVsbCgpO1xuICAgIHRoaXMudmFsdWUgPSB0aGlzLnBhcnNlKCh2YWwgPSB2YWwuc2xpY2UoMCwgLTEpKSkgfHwgYGA7XG4gICAgaWYgKHRoaXMudmFsdWUgIT09ICcnICYmIHRoaXMudmFsdWUgPCB0aGlzLm1pbikge1xuICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubWluO1xuICAgIH1cbiAgICB0aGlzLmNvbG9yID0gYGN5YW5gO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBuZXh0KCkge1xuICAgIHRoaXMudmFsdWUgPSB0aGlzLmluaXRpYWw7XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIF8oYywga2V5KSB7XG4gICAgaWYgKCF0aGlzLnZhbGlkKGMpKSByZXR1cm4gdGhpcy5iZWxsKCk7XG5cbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGlmIChub3cgLSB0aGlzLmxhc3RIaXQgPiAxMDAwKSB0aGlzLnR5cGVkID0gYGA7IC8vIDFzIGVsYXBzZWRcbiAgICB0aGlzLnR5cGVkICs9IGM7XG4gICAgdGhpcy5sYXN0SGl0ID0gbm93O1xuICAgIHRoaXMuY29sb3IgPSBgY3lhbmA7XG5cbiAgICBpZiAoYyA9PT0gYC5gKSByZXR1cm4gdGhpcy5maXJlKCk7XG5cbiAgICB0aGlzLnZhbHVlID0gTWF0aC5taW4odGhpcy5wYXJzZSh0aGlzLnR5cGVkKSwgdGhpcy5tYXgpO1xuICAgIGlmICh0aGlzLnZhbHVlID4gdGhpcy5tYXgpIHRoaXMudmFsdWUgPSB0aGlzLm1heDtcbiAgICBpZiAodGhpcy52YWx1ZSA8IHRoaXMubWluKSB0aGlzLnZhbHVlID0gdGhpcy5taW47XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBpZiAodGhpcy5jbG9zZWQpIHJldHVybjtcbiAgICBpZiAoIXRoaXMuZmlyc3RSZW5kZXIpIHtcbiAgICAgIGlmICh0aGlzLm91dHB1dEVycm9yKVxuICAgICAgICB0aGlzLm91dC53cml0ZShjdXJzb3IuZG93bihsaW5lcyh0aGlzLm91dHB1dEVycm9yLCB0aGlzLm91dC5jb2x1bW5zKSAtIDEpICsgY2xlYXIodGhpcy5vdXRwdXRFcnJvciwgdGhpcy5vdXQuY29sdW1ucykpO1xuICAgICAgdGhpcy5vdXQud3JpdGUoY2xlYXIodGhpcy5vdXRwdXRUZXh0LCB0aGlzLm91dC5jb2x1bW5zKSk7XG4gICAgfVxuICAgIHN1cGVyLnJlbmRlcigpO1xuICAgIHRoaXMub3V0cHV0RXJyb3IgPSAnJztcblxuICAgIC8vIFByaW50IHByb21wdFxuICAgIHRoaXMub3V0cHV0VGV4dCA9IFtcbiAgICAgIHN0eWxlLnN5bWJvbCh0aGlzLmRvbmUsIHRoaXMuYWJvcnRlZCksXG4gICAgICBjb2xvci5ib2xkKHRoaXMubXNnKSxcbiAgICAgIHN0eWxlLmRlbGltaXRlcih0aGlzLmRvbmUpLFxuICAgICAgIXRoaXMuZG9uZSB8fCAoIXRoaXMuZG9uZSAmJiAhdGhpcy5wbGFjZWhvbGRlcilcbiAgICAgICAgICA/IGNvbG9yW3RoaXMuY29sb3JdKCkudW5kZXJsaW5lKHRoaXMucmVuZGVyZWQpIDogdGhpcy5yZW5kZXJlZFxuICAgIF0uam9pbihgIGApO1xuXG4gICAgLy8gUHJpbnQgZXJyb3JcbiAgICBpZiAodGhpcy5lcnJvcikge1xuICAgICAgdGhpcy5vdXRwdXRFcnJvciArPSB0aGlzLmVycm9yTXNnLnNwbGl0KGBcXG5gKVxuICAgICAgICAgIC5yZWR1Y2UoKGEsIGwsIGkpID0+IGEgKyBgXFxuJHtpID8gYCBgIDogZmlndXJlcy5wb2ludGVyU21hbGx9ICR7Y29sb3IucmVkKCkuaXRhbGljKGwpfWAsIGBgKTtcbiAgICB9XG5cbiAgICB0aGlzLm91dC53cml0ZShlcmFzZS5saW5lICsgY3Vyc29yLnRvKDApICsgdGhpcy5vdXRwdXRUZXh0ICsgY3Vyc29yLnNhdmUgKyB0aGlzLm91dHB1dEVycm9yICsgY3Vyc29yLnJlc3RvcmUpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gTnVtYmVyUHJvbXB0O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBjb2xvciA9IHJlcXVpcmUoJ2tsZXVyJyk7XG5jb25zdCB7IGN1cnNvciB9ID0gcmVxdWlyZSgnc2lzdGVyYW5zaScpO1xuY29uc3QgUHJvbXB0ID0gcmVxdWlyZSgnLi9wcm9tcHQnKTtcbmNvbnN0IHsgY2xlYXIsIGZpZ3VyZXMsIHN0eWxlLCB3cmFwLCBlbnRyaWVzVG9EaXNwbGF5IH0gPSByZXF1aXJlKCcuLi91dGlsJyk7XG5cbi8qKlxuICogTXVsdGlzZWxlY3RQcm9tcHQgQmFzZSBFbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyBPcHRpb25zXG4gKiBAcGFyYW0ge1N0cmluZ30gb3B0cy5tZXNzYWdlIE1lc3NhZ2VcbiAqIEBwYXJhbSB7QXJyYXl9IG9wdHMuY2hvaWNlcyBBcnJheSBvZiBjaG9pY2Ugb2JqZWN0c1xuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLmhpbnRdIEhpbnQgdG8gZGlzcGxheVxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLndhcm5dIEhpbnQgc2hvd24gZm9yIGRpc2FibGVkIGNob2ljZXNcbiAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0cy5tYXhdIE1heCBjaG9pY2VzXG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMuY3Vyc29yPTBdIEN1cnNvciBzdGFydCBwb3NpdGlvblxuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLm9wdGlvbnNQZXJQYWdlPTEwXSBNYXggb3B0aW9ucyB0byBkaXNwbGF5IGF0IG9uY2VcbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICovXG5jbGFzcyBNdWx0aXNlbGVjdFByb21wdCBleHRlbmRzIFByb21wdCB7XG4gIGNvbnN0cnVjdG9yKG9wdHM9e30pIHtcbiAgICBzdXBlcihvcHRzKTtcbiAgICB0aGlzLm1zZyA9IG9wdHMubWVzc2FnZTtcbiAgICB0aGlzLmN1cnNvciA9IG9wdHMuY3Vyc29yIHx8IDA7XG4gICAgdGhpcy5zY3JvbGxJbmRleCA9IG9wdHMuY3Vyc29yIHx8IDA7XG4gICAgdGhpcy5oaW50ID0gb3B0cy5oaW50IHx8ICcnO1xuICAgIHRoaXMud2FybiA9IG9wdHMud2FybiB8fCAnLSBUaGlzIG9wdGlvbiBpcyBkaXNhYmxlZCAtJztcbiAgICB0aGlzLm1pblNlbGVjdGVkID0gb3B0cy5taW47XG4gICAgdGhpcy5zaG93TWluRXJyb3IgPSBmYWxzZTtcbiAgICB0aGlzLm1heENob2ljZXMgPSBvcHRzLm1heDtcbiAgICB0aGlzLmluc3RydWN0aW9ucyA9IG9wdHMuaW5zdHJ1Y3Rpb25zO1xuICAgIHRoaXMub3B0aW9uc1BlclBhZ2UgPSBvcHRzLm9wdGlvbnNQZXJQYWdlIHx8IDEwO1xuICAgIHRoaXMudmFsdWUgPSBvcHRzLmNob2ljZXMubWFwKChjaCwgaWR4KSA9PiB7XG4gICAgICBpZiAodHlwZW9mIGNoID09PSAnc3RyaW5nJylcbiAgICAgICAgY2ggPSB7dGl0bGU6IGNoLCB2YWx1ZTogaWR4fTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRpdGxlOiBjaCAmJiAoY2gudGl0bGUgfHwgY2gudmFsdWUgfHwgY2gpLFxuICAgICAgICBkZXNjcmlwdGlvbjogY2ggJiYgY2guZGVzY3JpcHRpb24sXG4gICAgICAgIHZhbHVlOiBjaCAmJiAoY2gudmFsdWUgPT09IHVuZGVmaW5lZCA/IGlkeCA6IGNoLnZhbHVlKSxcbiAgICAgICAgc2VsZWN0ZWQ6IGNoICYmIGNoLnNlbGVjdGVkLFxuICAgICAgICBkaXNhYmxlZDogY2ggJiYgY2guZGlzYWJsZWRcbiAgICAgIH07XG4gICAgfSk7XG4gICAgdGhpcy5jbGVhciA9IGNsZWFyKCcnLCB0aGlzLm91dC5jb2x1bW5zKTtcbiAgICBpZiAoIW9wdHMub3ZlcnJpZGVSZW5kZXIpIHtcbiAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgfVxuICB9XG5cbiAgcmVzZXQoKSB7XG4gICAgdGhpcy52YWx1ZS5tYXAodiA9PiAhdi5zZWxlY3RlZCk7XG4gICAgdGhpcy5jdXJzb3IgPSAwO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBzZWxlY3RlZCgpIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZS5maWx0ZXIodiA9PiB2LnNlbGVjdGVkKTtcbiAgfVxuXG4gIGV4aXQoKSB7XG4gICAgdGhpcy5hYm9ydCgpO1xuICB9XG5cbiAgYWJvcnQoKSB7XG4gICAgdGhpcy5kb25lID0gdGhpcy5hYm9ydGVkID0gdHJ1ZTtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICAgIHRoaXMub3V0LndyaXRlKCdcXG4nKTtcbiAgICB0aGlzLmNsb3NlKCk7XG4gIH1cblxuICBzdWJtaXQoKSB7XG4gICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLnZhbHVlXG4gICAgICAuZmlsdGVyKGUgPT4gZS5zZWxlY3RlZCk7XG4gICAgaWYgKHRoaXMubWluU2VsZWN0ZWQgJiYgc2VsZWN0ZWQubGVuZ3RoIDwgdGhpcy5taW5TZWxlY3RlZCkge1xuICAgICAgdGhpcy5zaG93TWluRXJyb3IgPSB0cnVlO1xuICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kb25lID0gdHJ1ZTtcbiAgICAgIHRoaXMuYWJvcnRlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5maXJlKCk7XG4gICAgICB0aGlzLnJlbmRlcigpO1xuICAgICAgdGhpcy5vdXQud3JpdGUoJ1xcbicpO1xuICAgICAgdGhpcy5jbG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIGZpcnN0KCkge1xuICAgIHRoaXMuY3Vyc29yID0gMDtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgbGFzdCgpIHtcbiAgICB0aGlzLmN1cnNvciA9IHRoaXMudmFsdWUubGVuZ3RoIC0gMTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG4gIG5leHQoKSB7XG4gICAgdGhpcy5jdXJzb3IgPSAodGhpcy5jdXJzb3IgKyAxKSAlIHRoaXMudmFsdWUubGVuZ3RoO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICB1cCgpIHtcbiAgICBpZiAodGhpcy5jdXJzb3IgPT09IDApIHtcbiAgICAgIHRoaXMuY3Vyc29yID0gdGhpcy52YWx1ZS5sZW5ndGggLSAxO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmN1cnNvci0tO1xuICAgIH1cbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZG93bigpIHtcbiAgICBpZiAodGhpcy5jdXJzb3IgPT09IHRoaXMudmFsdWUubGVuZ3RoIC0gMSkge1xuICAgICAgdGhpcy5jdXJzb3IgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmN1cnNvcisrO1xuICAgIH1cbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgbGVmdCgpIHtcbiAgICB0aGlzLnZhbHVlW3RoaXMuY3Vyc29yXS5zZWxlY3RlZCA9IGZhbHNlO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICByaWdodCgpIHtcbiAgICBpZiAodGhpcy52YWx1ZS5maWx0ZXIoZSA9PiBlLnNlbGVjdGVkKS5sZW5ndGggPj0gdGhpcy5tYXhDaG9pY2VzKSByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgdGhpcy52YWx1ZVt0aGlzLmN1cnNvcl0uc2VsZWN0ZWQgPSB0cnVlO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBoYW5kbGVTcGFjZVRvZ2dsZSgpIHtcbiAgICBjb25zdCB2ID0gdGhpcy52YWx1ZVt0aGlzLmN1cnNvcl07XG5cbiAgICBpZiAodi5zZWxlY3RlZCkge1xuICAgICAgdi5zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICB9IGVsc2UgaWYgKHYuZGlzYWJsZWQgfHwgdGhpcy52YWx1ZS5maWx0ZXIoZSA9PiBlLnNlbGVjdGVkKS5sZW5ndGggPj0gdGhpcy5tYXhDaG9pY2VzKSB7XG4gICAgICByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHYuc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICB9XG4gIH1cblxuICB0b2dnbGVBbGwoKSB7XG4gICAgaWYgKHRoaXMubWF4Q2hvaWNlcyAhPT0gdW5kZWZpbmVkIHx8IHRoaXMudmFsdWVbdGhpcy5jdXJzb3JdLmRpc2FibGVkKSB7XG4gICAgICByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgfVxuXG4gICAgY29uc3QgbmV3U2VsZWN0ZWQgPSAhdGhpcy52YWx1ZVt0aGlzLmN1cnNvcl0uc2VsZWN0ZWQ7XG4gICAgdGhpcy52YWx1ZS5maWx0ZXIodiA9PiAhdi5kaXNhYmxlZCkuZm9yRWFjaCh2ID0+IHYuc2VsZWN0ZWQgPSBuZXdTZWxlY3RlZCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIF8oYywga2V5KSB7XG4gICAgaWYgKGMgPT09ICcgJykge1xuICAgICAgdGhpcy5oYW5kbGVTcGFjZVRvZ2dsZSgpO1xuICAgIH0gZWxzZSBpZiAoYyA9PT0gJ2EnKSB7XG4gICAgICB0aGlzLnRvZ2dsZUFsbCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVySW5zdHJ1Y3Rpb25zKCkge1xuICAgIGlmICh0aGlzLmluc3RydWN0aW9ucyA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuaW5zdHJ1Y3Rpb25zKSB7XG4gICAgICBpZiAodHlwZW9mIHRoaXMuaW5zdHJ1Y3Rpb25zID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gdGhpcy5pbnN0cnVjdGlvbnM7XG4gICAgICB9XG4gICAgICByZXR1cm4gJ1xcbkluc3RydWN0aW9uczpcXG4nXG4gICAgICAgICsgYCAgICAke2ZpZ3VyZXMuYXJyb3dVcH0vJHtmaWd1cmVzLmFycm93RG93bn06IEhpZ2hsaWdodCBvcHRpb25cXG5gXG4gICAgICAgICsgYCAgICAke2ZpZ3VyZXMuYXJyb3dMZWZ0fS8ke2ZpZ3VyZXMuYXJyb3dSaWdodH0vW3NwYWNlXTogVG9nZ2xlIHNlbGVjdGlvblxcbmBcbiAgICAgICAgKyAodGhpcy5tYXhDaG9pY2VzID09PSB1bmRlZmluZWQgPyBgICAgIGE6IFRvZ2dsZSBhbGxcXG5gIDogJycpXG4gICAgICAgICsgYCAgICBlbnRlci9yZXR1cm46IENvbXBsZXRlIGFuc3dlcmA7XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIHJlbmRlck9wdGlvbihjdXJzb3IsIHYsIGksIGFycm93SW5kaWNhdG9yKSB7XG4gICAgY29uc3QgcHJlZml4ID0gKHYuc2VsZWN0ZWQgPyBjb2xvci5ncmVlbihmaWd1cmVzLnJhZGlvT24pIDogZmlndXJlcy5yYWRpb09mZikgKyAnICcgKyBhcnJvd0luZGljYXRvciArICcgJztcbiAgICBsZXQgdGl0bGUsIGRlc2M7XG5cbiAgICBpZiAodi5kaXNhYmxlZCkge1xuICAgICAgdGl0bGUgPSBjdXJzb3IgPT09IGkgPyBjb2xvci5ncmF5KCkudW5kZXJsaW5lKHYudGl0bGUpIDogY29sb3Iuc3RyaWtldGhyb3VnaCgpLmdyYXkodi50aXRsZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRpdGxlID0gY3Vyc29yID09PSBpID8gY29sb3IuY3lhbigpLnVuZGVybGluZSh2LnRpdGxlKSA6IHYudGl0bGU7XG4gICAgICBpZiAoY3Vyc29yID09PSBpICYmIHYuZGVzY3JpcHRpb24pIHtcbiAgICAgICAgZGVzYyA9IGAgLSAke3YuZGVzY3JpcHRpb259YDtcbiAgICAgICAgaWYgKHByZWZpeC5sZW5ndGggKyB0aXRsZS5sZW5ndGggKyBkZXNjLmxlbmd0aCA+PSB0aGlzLm91dC5jb2x1bW5zXG4gICAgICAgICAgfHwgdi5kZXNjcmlwdGlvbi5zcGxpdCgvXFxyP1xcbi8pLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICBkZXNjID0gJ1xcbicgKyB3cmFwKHYuZGVzY3JpcHRpb24sIHsgbWFyZ2luOiBwcmVmaXgubGVuZ3RoLCB3aWR0aDogdGhpcy5vdXQuY29sdW1ucyB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwcmVmaXggKyB0aXRsZSArIGNvbG9yLmdyYXkoZGVzYyB8fCAnJyk7XG4gIH1cblxuICAvLyBzaGFyZWQgd2l0aCBhdXRvY29tcGxldGVNdWx0aXNlbGVjdFxuICBwYWdpbmF0ZU9wdGlvbnMob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGNvbG9yLnJlZCgnTm8gbWF0Y2hlcyBmb3IgdGhpcyBxdWVyeS4nKTtcbiAgICB9XG5cbiAgICBsZXQgeyBzdGFydEluZGV4LCBlbmRJbmRleCB9ID0gZW50cmllc1RvRGlzcGxheSh0aGlzLmN1cnNvciwgb3B0aW9ucy5sZW5ndGgsIHRoaXMub3B0aW9uc1BlclBhZ2UpO1xuICAgIGxldCBwcmVmaXgsIHN0eWxlZE9wdGlvbnMgPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSBzdGFydEluZGV4OyBpIDwgZW5kSW5kZXg7IGkrKykge1xuICAgICAgaWYgKGkgPT09IHN0YXJ0SW5kZXggJiYgc3RhcnRJbmRleCA+IDApIHtcbiAgICAgICAgcHJlZml4ID0gZmlndXJlcy5hcnJvd1VwO1xuICAgICAgfSBlbHNlIGlmIChpID09PSBlbmRJbmRleCAtIDEgJiYgZW5kSW5kZXggPCBvcHRpb25zLmxlbmd0aCkge1xuICAgICAgICBwcmVmaXggPSBmaWd1cmVzLmFycm93RG93bjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHByZWZpeCA9ICcgJztcbiAgICAgIH1cbiAgICAgIHN0eWxlZE9wdGlvbnMucHVzaCh0aGlzLnJlbmRlck9wdGlvbih0aGlzLmN1cnNvciwgb3B0aW9uc1tpXSwgaSwgcHJlZml4KSk7XG4gICAgfVxuXG4gICAgcmV0dXJuICdcXG4nICsgc3R5bGVkT3B0aW9ucy5qb2luKCdcXG4nKTtcbiAgfVxuXG4gIC8vIHNoYXJlZCB3aXRoIGF1dG9jb21sZXRlTXVsdGlzZWxlY3RcbiAgcmVuZGVyT3B0aW9ucyhvcHRpb25zKSB7XG4gICAgaWYgKCF0aGlzLmRvbmUpIHtcbiAgICAgIHJldHVybiB0aGlzLnBhZ2luYXRlT3B0aW9ucyhvcHRpb25zKTtcbiAgICB9XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgcmVuZGVyRG9uZU9ySW5zdHJ1Y3Rpb25zKCkge1xuICAgIGlmICh0aGlzLmRvbmUpIHtcbiAgICAgIHJldHVybiB0aGlzLnZhbHVlXG4gICAgICAgIC5maWx0ZXIoZSA9PiBlLnNlbGVjdGVkKVxuICAgICAgICAubWFwKHYgPT4gdi50aXRsZSlcbiAgICAgICAgLmpvaW4oJywgJyk7XG4gICAgfVxuXG4gICAgY29uc3Qgb3V0cHV0ID0gW2NvbG9yLmdyYXkodGhpcy5oaW50KSwgdGhpcy5yZW5kZXJJbnN0cnVjdGlvbnMoKV07XG5cbiAgICBpZiAodGhpcy52YWx1ZVt0aGlzLmN1cnNvcl0uZGlzYWJsZWQpIHtcbiAgICAgIG91dHB1dC5wdXNoKGNvbG9yLnllbGxvdyh0aGlzLndhcm4pKTtcbiAgICB9XG4gICAgcmV0dXJuIG91dHB1dC5qb2luKCcgJyk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgaWYgKHRoaXMuY2xvc2VkKSByZXR1cm47XG4gICAgaWYgKHRoaXMuZmlyc3RSZW5kZXIpIHRoaXMub3V0LndyaXRlKGN1cnNvci5oaWRlKTtcbiAgICBzdXBlci5yZW5kZXIoKTtcblxuICAgIC8vIHByaW50IHByb21wdFxuICAgIGxldCBwcm9tcHQgPSBbXG4gICAgICBzdHlsZS5zeW1ib2wodGhpcy5kb25lLCB0aGlzLmFib3J0ZWQpLFxuICAgICAgY29sb3IuYm9sZCh0aGlzLm1zZyksXG4gICAgICBzdHlsZS5kZWxpbWl0ZXIoZmFsc2UpLFxuICAgICAgdGhpcy5yZW5kZXJEb25lT3JJbnN0cnVjdGlvbnMoKVxuICAgIF0uam9pbignICcpO1xuICAgIGlmICh0aGlzLnNob3dNaW5FcnJvcikge1xuICAgICAgcHJvbXB0ICs9IGNvbG9yLnJlZChgWW91IG11c3Qgc2VsZWN0IGEgbWluaW11bSBvZiAke3RoaXMubWluU2VsZWN0ZWR9IGNob2ljZXMuYCk7XG4gICAgICB0aGlzLnNob3dNaW5FcnJvciA9IGZhbHNlO1xuICAgIH1cbiAgICBwcm9tcHQgKz0gdGhpcy5yZW5kZXJPcHRpb25zKHRoaXMudmFsdWUpO1xuXG4gICAgdGhpcy5vdXQud3JpdGUodGhpcy5jbGVhciArIHByb21wdCk7XG4gICAgdGhpcy5jbGVhciA9IGNsZWFyKHByb21wdCwgdGhpcy5vdXQuY29sdW1ucyk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBNdWx0aXNlbGVjdFByb21wdDtcbiIsIid1c2Ugc3RyaWN0JztcblxuY29uc3QgY29sb3IgPSByZXF1aXJlKCdrbGV1cicpO1xuY29uc3QgUHJvbXB0ID0gcmVxdWlyZSgnLi9wcm9tcHQnKTtcbmNvbnN0IHsgZXJhc2UsIGN1cnNvciB9ID0gcmVxdWlyZSgnc2lzdGVyYW5zaScpO1xuY29uc3QgeyBzdHlsZSwgY2xlYXIsIGZpZ3VyZXMsIHdyYXAsIGVudHJpZXNUb0Rpc3BsYXkgfSA9IHJlcXVpcmUoJy4uL3V0aWwnKTtcblxuY29uc3QgZ2V0VmFsID0gKGFyciwgaSkgPT4gYXJyW2ldICYmIChhcnJbaV0udmFsdWUgfHwgYXJyW2ldLnRpdGxlIHx8IGFycltpXSk7XG5jb25zdCBnZXRUaXRsZSA9IChhcnIsIGkpID0+IGFycltpXSAmJiAoYXJyW2ldLnRpdGxlIHx8IGFycltpXS52YWx1ZSB8fCBhcnJbaV0pO1xuY29uc3QgZ2V0SW5kZXggPSAoYXJyLCB2YWxPclRpdGxlKSA9PiB7XG4gIGNvbnN0IGluZGV4ID0gYXJyLmZpbmRJbmRleChlbCA9PiBlbC52YWx1ZSA9PT0gdmFsT3JUaXRsZSB8fCBlbC50aXRsZSA9PT0gdmFsT3JUaXRsZSk7XG4gIHJldHVybiBpbmRleCA+IC0xID8gaW5kZXggOiB1bmRlZmluZWQ7XG59O1xuXG4vKipcbiAqIFRleHRQcm9tcHQgQmFzZSBFbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyBPcHRpb25zXG4gKiBAcGFyYW0ge1N0cmluZ30gb3B0cy5tZXNzYWdlIE1lc3NhZ2VcbiAqIEBwYXJhbSB7QXJyYXl9IG9wdHMuY2hvaWNlcyBBcnJheSBvZiBhdXRvLWNvbXBsZXRlIGNob2ljZXMgb2JqZWN0c1xuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdHMuc3VnZ2VzdF0gRmlsdGVyIGZ1bmN0aW9uLiBEZWZhdWx0cyB0byBzb3J0IGJ5IHRpdGxlXG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMubGltaXQ9MTBdIE1heCBudW1iZXIgb2YgcmVzdWx0cyB0byBzaG93XG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMuY3Vyc29yPTBdIEN1cnNvciBzdGFydCBwb3NpdGlvblxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLnN0eWxlPSdkZWZhdWx0J10gUmVuZGVyIHN0eWxlXG4gKiBAcGFyYW0ge1N0cmluZ30gW29wdHMuZmFsbGJhY2tdIEZhbGxiYWNrIG1lc3NhZ2UgLSBpbml0aWFsIHRvIGRlZmF1bHQgdmFsdWVcbiAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5pbml0aWFsXSBJbmRleCBvZiB0aGUgZGVmYXVsdCB2YWx1ZVxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0cy5jbGVhckZpcnN0XSBUaGUgZmlyc3QgRVNDQVBFIGtleXByZXNzIHdpbGwgY2xlYXIgdGhlIGlucHV0XG4gKiBAcGFyYW0ge1N0cmVhbX0gW29wdHMuc3RkaW5dIFRoZSBSZWFkYWJsZSBzdHJlYW0gdG8gbGlzdGVuIHRvXG4gKiBAcGFyYW0ge1N0cmVhbX0gW29wdHMuc3Rkb3V0XSBUaGUgV3JpdGFibGUgc3RyZWFtIHRvIHdyaXRlIHJlYWRsaW5lIGRhdGEgdG9cbiAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5ub01hdGNoZXNdIFRoZSBubyBtYXRjaGVzIGZvdW5kIGxhYmVsXG4gKi9cbmNsYXNzIEF1dG9jb21wbGV0ZVByb21wdCBleHRlbmRzIFByb21wdCB7XG4gIGNvbnN0cnVjdG9yKG9wdHM9e30pIHtcbiAgICBzdXBlcihvcHRzKTtcbiAgICB0aGlzLm1zZyA9IG9wdHMubWVzc2FnZTtcbiAgICB0aGlzLnN1Z2dlc3QgPSBvcHRzLnN1Z2dlc3Q7XG4gICAgdGhpcy5jaG9pY2VzID0gb3B0cy5jaG9pY2VzO1xuICAgIHRoaXMuaW5pdGlhbCA9IHR5cGVvZiBvcHRzLmluaXRpYWwgPT09ICdudW1iZXInXG4gICAgICA/IG9wdHMuaW5pdGlhbFxuICAgICAgOiBnZXRJbmRleChvcHRzLmNob2ljZXMsIG9wdHMuaW5pdGlhbCk7XG4gICAgdGhpcy5zZWxlY3QgPSB0aGlzLmluaXRpYWwgfHwgb3B0cy5jdXJzb3IgfHwgMDtcbiAgICB0aGlzLmkxOG4gPSB7IG5vTWF0Y2hlczogb3B0cy5ub01hdGNoZXMgfHwgJ25vIG1hdGNoZXMgZm91bmQnIH07XG4gICAgdGhpcy5mYWxsYmFjayA9IG9wdHMuZmFsbGJhY2sgfHwgdGhpcy5pbml0aWFsO1xuICAgIHRoaXMuY2xlYXJGaXJzdCA9IG9wdHMuY2xlYXJGaXJzdCB8fCBmYWxzZTtcbiAgICB0aGlzLnN1Z2dlc3Rpb25zID0gW107XG4gICAgdGhpcy5pbnB1dCA9ICcnO1xuICAgIHRoaXMubGltaXQgPSBvcHRzLmxpbWl0IHx8IDEwO1xuICAgIHRoaXMuY3Vyc29yID0gMDtcbiAgICB0aGlzLnRyYW5zZm9ybSA9IHN0eWxlLnJlbmRlcihvcHRzLnN0eWxlKTtcbiAgICB0aGlzLnNjYWxlID0gdGhpcy50cmFuc2Zvcm0uc2NhbGU7XG4gICAgdGhpcy5yZW5kZXIgPSB0aGlzLnJlbmRlci5iaW5kKHRoaXMpO1xuICAgIHRoaXMuY29tcGxldGUgPSB0aGlzLmNvbXBsZXRlLmJpbmQodGhpcyk7XG4gICAgdGhpcy5jbGVhciA9IGNsZWFyKCcnLCB0aGlzLm91dC5jb2x1bW5zKTtcbiAgICB0aGlzLmNvbXBsZXRlKHRoaXMucmVuZGVyKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgc2V0IGZhbGxiYWNrKGZiKSB7XG4gICAgdGhpcy5fZmIgPSBOdW1iZXIuaXNTYWZlSW50ZWdlcihwYXJzZUludChmYikpID8gcGFyc2VJbnQoZmIpIDogZmI7XG4gIH1cblxuICBnZXQgZmFsbGJhY2soKSB7XG4gICAgbGV0IGNob2ljZTtcbiAgICBpZiAodHlwZW9mIHRoaXMuX2ZiID09PSAnbnVtYmVyJylcbiAgICAgIGNob2ljZSA9IHRoaXMuY2hvaWNlc1t0aGlzLl9mYl07XG4gICAgZWxzZSBpZiAodHlwZW9mIHRoaXMuX2ZiID09PSAnc3RyaW5nJylcbiAgICAgIGNob2ljZSA9IHsgdGl0bGU6IHRoaXMuX2ZiIH07XG4gICAgcmV0dXJuIGNob2ljZSB8fCB0aGlzLl9mYiB8fCB7IHRpdGxlOiB0aGlzLmkxOG4ubm9NYXRjaGVzIH07XG4gIH1cblxuICBtb3ZlU2VsZWN0KGkpIHtcbiAgICB0aGlzLnNlbGVjdCA9IGk7XG4gICAgaWYgKHRoaXMuc3VnZ2VzdGlvbnMubGVuZ3RoID4gMClcbiAgICAgIHRoaXMudmFsdWUgPSBnZXRWYWwodGhpcy5zdWdnZXN0aW9ucywgaSk7XG4gICAgZWxzZSB0aGlzLnZhbHVlID0gdGhpcy5mYWxsYmFjay52YWx1ZTtcbiAgICB0aGlzLmZpcmUoKTtcbiAgfVxuXG4gIGFzeW5jIGNvbXBsZXRlKGNiKSB7XG4gICAgY29uc3QgcCA9ICh0aGlzLmNvbXBsZXRpbmcgPSB0aGlzLnN1Z2dlc3QodGhpcy5pbnB1dCwgdGhpcy5jaG9pY2VzKSk7XG4gICAgY29uc3Qgc3VnZ2VzdGlvbnMgPSBhd2FpdCBwO1xuXG4gICAgaWYgKHRoaXMuY29tcGxldGluZyAhPT0gcCkgcmV0dXJuO1xuICAgIHRoaXMuc3VnZ2VzdGlvbnMgPSBzdWdnZXN0aW9uc1xuICAgICAgLm1hcCgocywgaSwgYXJyKSA9PiAoeyB0aXRsZTogZ2V0VGl0bGUoYXJyLCBpKSwgdmFsdWU6IGdldFZhbChhcnIsIGkpLCBkZXNjcmlwdGlvbjogcy5kZXNjcmlwdGlvbiB9KSk7XG4gICAgdGhpcy5jb21wbGV0aW5nID0gZmFsc2U7XG4gICAgY29uc3QgbCA9IE1hdGgubWF4KHN1Z2dlc3Rpb25zLmxlbmd0aCAtIDEsIDApO1xuICAgIHRoaXMubW92ZVNlbGVjdChNYXRoLm1pbihsLCB0aGlzLnNlbGVjdCkpO1xuXG4gICAgY2IgJiYgY2IoKTtcbiAgfVxuXG4gIHJlc2V0KCkge1xuICAgIHRoaXMuaW5wdXQgPSAnJztcbiAgICB0aGlzLmNvbXBsZXRlKCgpID0+IHtcbiAgICAgIHRoaXMubW92ZVNlbGVjdCh0aGlzLmluaXRpYWwgIT09IHZvaWQgMCA/IHRoaXMuaW5pdGlhbCA6IDApO1xuICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICB9KTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZXhpdCgpIHtcbiAgICBpZiAodGhpcy5jbGVhckZpcnN0ICYmIHRoaXMuaW5wdXQubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5yZXNldCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRvbmUgPSB0aGlzLmV4aXRlZCA9IHRydWU7IFxuICAgICAgdGhpcy5hYm9ydGVkID0gZmFsc2U7XG4gICAgICB0aGlzLmZpcmUoKTtcbiAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgICB0aGlzLm91dC53cml0ZSgnXFxuJyk7XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfVxuICB9XG5cbiAgYWJvcnQoKSB7XG4gICAgdGhpcy5kb25lID0gdGhpcy5hYm9ydGVkID0gdHJ1ZTtcbiAgICB0aGlzLmV4aXRlZCA9IGZhbHNlO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gICAgdGhpcy5vdXQud3JpdGUoJ1xcbicpO1xuICAgIHRoaXMuY2xvc2UoKTtcbiAgfVxuXG4gIHN1Ym1pdCgpIHtcbiAgICB0aGlzLmRvbmUgPSB0cnVlO1xuICAgIHRoaXMuYWJvcnRlZCA9IHRoaXMuZXhpdGVkID0gZmFsc2U7XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgICB0aGlzLm91dC53cml0ZSgnXFxuJyk7XG4gICAgdGhpcy5jbG9zZSgpO1xuICB9XG5cbiAgXyhjLCBrZXkpIHtcbiAgICBsZXQgczEgPSB0aGlzLmlucHV0LnNsaWNlKDAsIHRoaXMuY3Vyc29yKTtcbiAgICBsZXQgczIgPSB0aGlzLmlucHV0LnNsaWNlKHRoaXMuY3Vyc29yKTtcbiAgICB0aGlzLmlucHV0ID0gYCR7czF9JHtjfSR7czJ9YDtcbiAgICB0aGlzLmN1cnNvciA9IHMxLmxlbmd0aCsxO1xuICAgIHRoaXMuY29tcGxldGUodGhpcy5yZW5kZXIpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBkZWxldGUoKSB7XG4gICAgaWYgKHRoaXMuY3Vyc29yID09PSAwKSByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgbGV0IHMxID0gdGhpcy5pbnB1dC5zbGljZSgwLCB0aGlzLmN1cnNvci0xKTtcbiAgICBsZXQgczIgPSB0aGlzLmlucHV0LnNsaWNlKHRoaXMuY3Vyc29yKTtcbiAgICB0aGlzLmlucHV0ID0gYCR7czF9JHtzMn1gO1xuICAgIHRoaXMuY29tcGxldGUodGhpcy5yZW5kZXIpO1xuICAgIHRoaXMuY3Vyc29yID0gdGhpcy5jdXJzb3ItMTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZGVsZXRlRm9yd2FyZCgpIHtcbiAgICBpZih0aGlzLmN1cnNvcip0aGlzLnNjYWxlID49IHRoaXMucmVuZGVyZWQubGVuZ3RoKSByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgbGV0IHMxID0gdGhpcy5pbnB1dC5zbGljZSgwLCB0aGlzLmN1cnNvcik7XG4gICAgbGV0IHMyID0gdGhpcy5pbnB1dC5zbGljZSh0aGlzLmN1cnNvcisxKTtcbiAgICB0aGlzLmlucHV0ID0gYCR7czF9JHtzMn1gO1xuICAgIHRoaXMuY29tcGxldGUodGhpcy5yZW5kZXIpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBmaXJzdCgpIHtcbiAgICB0aGlzLm1vdmVTZWxlY3QoMCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIGxhc3QoKSB7XG4gICAgdGhpcy5tb3ZlU2VsZWN0KHRoaXMuc3VnZ2VzdGlvbnMubGVuZ3RoIC0gMSk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHVwKCkge1xuICAgIGlmICh0aGlzLnNlbGVjdCA9PT0gMCkge1xuICAgICAgdGhpcy5tb3ZlU2VsZWN0KHRoaXMuc3VnZ2VzdGlvbnMubGVuZ3RoIC0gMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubW92ZVNlbGVjdCh0aGlzLnNlbGVjdCAtIDEpO1xuICAgIH1cbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZG93bigpIHtcbiAgICBpZiAodGhpcy5zZWxlY3QgPT09IHRoaXMuc3VnZ2VzdGlvbnMubGVuZ3RoIC0gMSkge1xuICAgICAgdGhpcy5tb3ZlU2VsZWN0KDApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm1vdmVTZWxlY3QodGhpcy5zZWxlY3QgKyAxKTtcbiAgICB9XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIG5leHQoKSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ID09PSB0aGlzLnN1Z2dlc3Rpb25zLmxlbmd0aCAtIDEpIHtcbiAgICAgIHRoaXMubW92ZVNlbGVjdCgwKTtcbiAgICB9IGVsc2UgdGhpcy5tb3ZlU2VsZWN0KHRoaXMuc2VsZWN0ICsgMSk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIG5leHRQYWdlKCkge1xuICAgIHRoaXMubW92ZVNlbGVjdChNYXRoLm1pbih0aGlzLnNlbGVjdCArIHRoaXMubGltaXQsIHRoaXMuc3VnZ2VzdGlvbnMubGVuZ3RoIC0gMSkpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBwcmV2UGFnZSgpIHtcbiAgICB0aGlzLm1vdmVTZWxlY3QoTWF0aC5tYXgodGhpcy5zZWxlY3QgLSB0aGlzLmxpbWl0LCAwKSk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIGxlZnQoKSB7XG4gICAgaWYgKHRoaXMuY3Vyc29yIDw9IDApIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgICB0aGlzLmN1cnNvciA9IHRoaXMuY3Vyc29yLTE7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHJpZ2h0KCkge1xuICAgIGlmICh0aGlzLmN1cnNvcip0aGlzLnNjYWxlID49IHRoaXMucmVuZGVyZWQubGVuZ3RoKSByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgdGhpcy5jdXJzb3IgPSB0aGlzLmN1cnNvcisxO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICByZW5kZXJPcHRpb24odiwgaG92ZXJlZCwgaXNTdGFydCwgaXNFbmQpIHtcbiAgICBsZXQgZGVzYztcbiAgICBsZXQgcHJlZml4ID0gaXNTdGFydCA/IGZpZ3VyZXMuYXJyb3dVcCA6IGlzRW5kID8gZmlndXJlcy5hcnJvd0Rvd24gOiAnICc7XG4gICAgbGV0IHRpdGxlID0gaG92ZXJlZCA/IGNvbG9yLmN5YW4oKS51bmRlcmxpbmUodi50aXRsZSkgOiB2LnRpdGxlO1xuICAgIHByZWZpeCA9IChob3ZlcmVkID8gY29sb3IuY3lhbihmaWd1cmVzLnBvaW50ZXIpICsgJyAnIDogJyAgJykgKyBwcmVmaXg7XG4gICAgaWYgKHYuZGVzY3JpcHRpb24pIHtcbiAgICAgIGRlc2MgPSBgIC0gJHt2LmRlc2NyaXB0aW9ufWA7XG4gICAgICBpZiAocHJlZml4Lmxlbmd0aCArIHRpdGxlLmxlbmd0aCArIGRlc2MubGVuZ3RoID49IHRoaXMub3V0LmNvbHVtbnNcbiAgICAgICAgfHwgdi5kZXNjcmlwdGlvbi5zcGxpdCgvXFxyP1xcbi8pLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgZGVzYyA9ICdcXG4nICsgd3JhcCh2LmRlc2NyaXB0aW9uLCB7IG1hcmdpbjogMywgd2lkdGg6IHRoaXMub3V0LmNvbHVtbnMgfSlcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHByZWZpeCArICcgJyArIHRpdGxlICsgY29sb3IuZ3JheShkZXNjIHx8ICcnKTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBpZiAodGhpcy5jbG9zZWQpIHJldHVybjtcbiAgICBpZiAodGhpcy5maXJzdFJlbmRlcikgdGhpcy5vdXQud3JpdGUoY3Vyc29yLmhpZGUpO1xuICAgIGVsc2UgdGhpcy5vdXQud3JpdGUoY2xlYXIodGhpcy5vdXRwdXRUZXh0LCB0aGlzLm91dC5jb2x1bW5zKSk7XG4gICAgc3VwZXIucmVuZGVyKCk7XG5cbiAgICBsZXQgeyBzdGFydEluZGV4LCBlbmRJbmRleCB9ID0gZW50cmllc1RvRGlzcGxheSh0aGlzLnNlbGVjdCwgdGhpcy5jaG9pY2VzLmxlbmd0aCwgdGhpcy5saW1pdCk7XG5cbiAgICB0aGlzLm91dHB1dFRleHQgPSBbXG4gICAgICBzdHlsZS5zeW1ib2wodGhpcy5kb25lLCB0aGlzLmFib3J0ZWQsIHRoaXMuZXhpdGVkKSxcbiAgICAgIGNvbG9yLmJvbGQodGhpcy5tc2cpLFxuICAgICAgc3R5bGUuZGVsaW1pdGVyKHRoaXMuY29tcGxldGluZyksXG4gICAgICB0aGlzLmRvbmUgJiYgdGhpcy5zdWdnZXN0aW9uc1t0aGlzLnNlbGVjdF1cbiAgICAgICAgPyB0aGlzLnN1Z2dlc3Rpb25zW3RoaXMuc2VsZWN0XS50aXRsZVxuICAgICAgICA6IHRoaXMucmVuZGVyZWQgPSB0aGlzLnRyYW5zZm9ybS5yZW5kZXIodGhpcy5pbnB1dClcbiAgICBdLmpvaW4oJyAnKTtcblxuICAgIGlmICghdGhpcy5kb25lKSB7XG4gICAgICBjb25zdCBzdWdnZXN0aW9ucyA9IHRoaXMuc3VnZ2VzdGlvbnNcbiAgICAgICAgLnNsaWNlKHN0YXJ0SW5kZXgsIGVuZEluZGV4KVxuICAgICAgICAubWFwKChpdGVtLCBpKSA9PiAgdGhpcy5yZW5kZXJPcHRpb24oaXRlbSxcbiAgICAgICAgICB0aGlzLnNlbGVjdCA9PT0gaSArIHN0YXJ0SW5kZXgsXG4gICAgICAgICAgaSA9PT0gMCAmJiBzdGFydEluZGV4ID4gMCxcbiAgICAgICAgICBpICsgc3RhcnRJbmRleCA9PT0gZW5kSW5kZXggLSAxICYmIGVuZEluZGV4IDwgdGhpcy5jaG9pY2VzLmxlbmd0aCkpXG4gICAgICAgIC5qb2luKCdcXG4nKTtcbiAgICAgIHRoaXMub3V0cHV0VGV4dCArPSBgXFxuYCArIChzdWdnZXN0aW9ucyB8fCBjb2xvci5ncmF5KHRoaXMuZmFsbGJhY2sudGl0bGUpKTtcbiAgICB9XG5cbiAgICB0aGlzLm91dC53cml0ZShlcmFzZS5saW5lICsgY3Vyc29yLnRvKDApICsgdGhpcy5vdXRwdXRUZXh0KTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEF1dG9jb21wbGV0ZVByb21wdDtcbiIsIid1c2Ugc3RyaWN0JztcblxuY29uc3QgY29sb3IgPSByZXF1aXJlKCdrbGV1cicpO1xuY29uc3QgeyBjdXJzb3IgfSA9IHJlcXVpcmUoJ3Npc3RlcmFuc2knKTtcbmNvbnN0IE11bHRpc2VsZWN0UHJvbXB0ID0gcmVxdWlyZSgnLi9tdWx0aXNlbGVjdCcpO1xuY29uc3QgeyBjbGVhciwgc3R5bGUsIGZpZ3VyZXMgfSA9IHJlcXVpcmUoJy4uL3V0aWwnKTtcbi8qKlxuICogTXVsdGlzZWxlY3RQcm9tcHQgQmFzZSBFbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyBPcHRpb25zXG4gKiBAcGFyYW0ge1N0cmluZ30gb3B0cy5tZXNzYWdlIE1lc3NhZ2VcbiAqIEBwYXJhbSB7QXJyYXl9IG9wdHMuY2hvaWNlcyBBcnJheSBvZiBjaG9pY2Ugb2JqZWN0c1xuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLmhpbnRdIEhpbnQgdG8gZGlzcGxheVxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLndhcm5dIEhpbnQgc2hvd24gZm9yIGRpc2FibGVkIGNob2ljZXNcbiAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0cy5tYXhdIE1heCBjaG9pY2VzXG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMuY3Vyc29yPTBdIEN1cnNvciBzdGFydCBwb3NpdGlvblxuICogQHBhcmFtIHtTdHJlYW19IFtvcHRzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFtvcHRzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKi9cbmNsYXNzIEF1dG9jb21wbGV0ZU11bHRpc2VsZWN0UHJvbXB0IGV4dGVuZHMgTXVsdGlzZWxlY3RQcm9tcHQge1xuICBjb25zdHJ1Y3RvcihvcHRzPXt9KSB7XG4gICAgb3B0cy5vdmVycmlkZVJlbmRlciA9IHRydWU7XG4gICAgc3VwZXIob3B0cyk7XG4gICAgdGhpcy5pbnB1dFZhbHVlID0gJyc7XG4gICAgdGhpcy5jbGVhciA9IGNsZWFyKCcnLCB0aGlzLm91dC5jb2x1bW5zKTtcbiAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IHRoaXMudmFsdWU7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIGxhc3QoKSB7XG4gICAgdGhpcy5jdXJzb3IgPSB0aGlzLmZpbHRlcmVkT3B0aW9ucy5sZW5ndGggLSAxO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cbiAgbmV4dCgpIHtcbiAgICB0aGlzLmN1cnNvciA9ICh0aGlzLmN1cnNvciArIDEpICUgdGhpcy5maWx0ZXJlZE9wdGlvbnMubGVuZ3RoO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICB1cCgpIHtcbiAgICBpZiAodGhpcy5jdXJzb3IgPT09IDApIHtcbiAgICAgIHRoaXMuY3Vyc29yID0gdGhpcy5maWx0ZXJlZE9wdGlvbnMubGVuZ3RoIC0gMTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jdXJzb3ItLTtcbiAgICB9XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIGRvd24oKSB7XG4gICAgaWYgKHRoaXMuY3Vyc29yID09PSB0aGlzLmZpbHRlcmVkT3B0aW9ucy5sZW5ndGggLSAxKSB7XG4gICAgICB0aGlzLmN1cnNvciA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY3Vyc29yKys7XG4gICAgfVxuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBsZWZ0KCkge1xuICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zW3RoaXMuY3Vyc29yXS5zZWxlY3RlZCA9IGZhbHNlO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICByaWdodCgpIHtcbiAgICBpZiAodGhpcy52YWx1ZS5maWx0ZXIoZSA9PiBlLnNlbGVjdGVkKS5sZW5ndGggPj0gdGhpcy5tYXhDaG9pY2VzKSByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgdGhpcy5maWx0ZXJlZE9wdGlvbnNbdGhpcy5jdXJzb3JdLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZGVsZXRlKCkge1xuICAgIGlmICh0aGlzLmlucHV0VmFsdWUubGVuZ3RoKSB7XG4gICAgICB0aGlzLmlucHV0VmFsdWUgPSB0aGlzLmlucHV0VmFsdWUuc3Vic3RyKDAsIHRoaXMuaW5wdXRWYWx1ZS5sZW5ndGggLSAxKTtcbiAgICAgIHRoaXMudXBkYXRlRmlsdGVyZWRPcHRpb25zKCk7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlRmlsdGVyZWRPcHRpb25zKCkge1xuICAgIGNvbnN0IGN1cnJlbnRIaWdobGlnaHQgPSB0aGlzLmZpbHRlcmVkT3B0aW9uc1t0aGlzLmN1cnNvcl07XG4gICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSB0aGlzLnZhbHVlXG4gICAgICAuZmlsdGVyKHYgPT4ge1xuICAgICAgICBpZiAodGhpcy5pbnB1dFZhbHVlKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiB2LnRpdGxlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgaWYgKHYudGl0bGUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLmlucHV0VmFsdWUudG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0eXBlb2Ygdi52YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGlmICh2LnZhbHVlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5pbnB1dFZhbHVlLnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9KTtcbiAgICBjb25zdCBuZXdIaWdobGlnaHRJbmRleCA9IHRoaXMuZmlsdGVyZWRPcHRpb25zLmZpbmRJbmRleCh2ID0+IHYgPT09IGN1cnJlbnRIaWdobGlnaHQpXG4gICAgdGhpcy5jdXJzb3IgPSBuZXdIaWdobGlnaHRJbmRleCA8IDAgPyAwIDogbmV3SGlnaGxpZ2h0SW5kZXg7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIGhhbmRsZVNwYWNlVG9nZ2xlKCkge1xuICAgIGNvbnN0IHYgPSB0aGlzLmZpbHRlcmVkT3B0aW9uc1t0aGlzLmN1cnNvcl07XG5cbiAgICBpZiAodi5zZWxlY3RlZCkge1xuICAgICAgdi5zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICB9IGVsc2UgaWYgKHYuZGlzYWJsZWQgfHwgdGhpcy52YWx1ZS5maWx0ZXIoZSA9PiBlLnNlbGVjdGVkKS5sZW5ndGggPj0gdGhpcy5tYXhDaG9pY2VzKSB7XG4gICAgICByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHYuc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVJbnB1dENoYW5nZShjKSB7XG4gICAgdGhpcy5pbnB1dFZhbHVlID0gdGhpcy5pbnB1dFZhbHVlICsgYztcbiAgICB0aGlzLnVwZGF0ZUZpbHRlcmVkT3B0aW9ucygpO1xuICB9XG5cbiAgXyhjLCBrZXkpIHtcbiAgICBpZiAoYyA9PT0gJyAnKSB7XG4gICAgICB0aGlzLmhhbmRsZVNwYWNlVG9nZ2xlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaGFuZGxlSW5wdXRDaGFuZ2UoYyk7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVySW5zdHJ1Y3Rpb25zKCkge1xuICAgIGlmICh0aGlzLmluc3RydWN0aW9ucyA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuaW5zdHJ1Y3Rpb25zKSB7XG4gICAgICBpZiAodHlwZW9mIHRoaXMuaW5zdHJ1Y3Rpb25zID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gdGhpcy5pbnN0cnVjdGlvbnM7XG4gICAgICB9XG4gICAgICByZXR1cm4gYFxuSW5zdHJ1Y3Rpb25zOlxuICAgICR7ZmlndXJlcy5hcnJvd1VwfS8ke2ZpZ3VyZXMuYXJyb3dEb3dufTogSGlnaGxpZ2h0IG9wdGlvblxuICAgICR7ZmlndXJlcy5hcnJvd0xlZnR9LyR7ZmlndXJlcy5hcnJvd1JpZ2h0fS9bc3BhY2VdOiBUb2dnbGUgc2VsZWN0aW9uXG4gICAgW2EsYixjXS9kZWxldGU6IEZpbHRlciBjaG9pY2VzXG4gICAgZW50ZXIvcmV0dXJuOiBDb21wbGV0ZSBhbnN3ZXJcbmA7XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIHJlbmRlckN1cnJlbnRJbnB1dCgpIHtcbiAgICByZXR1cm4gYFxuRmlsdGVyZWQgcmVzdWx0cyBmb3I6ICR7dGhpcy5pbnB1dFZhbHVlID8gdGhpcy5pbnB1dFZhbHVlIDogY29sb3IuZ3JheSgnRW50ZXIgc29tZXRoaW5nIHRvIGZpbHRlcicpfVxcbmA7XG4gIH1cblxuICByZW5kZXJPcHRpb24oY3Vyc29yLCB2LCBpKSB7XG4gICAgbGV0IHRpdGxlO1xuICAgIGlmICh2LmRpc2FibGVkKSB0aXRsZSA9IGN1cnNvciA9PT0gaSA/IGNvbG9yLmdyYXkoKS51bmRlcmxpbmUodi50aXRsZSkgOiBjb2xvci5zdHJpa2V0aHJvdWdoKCkuZ3JheSh2LnRpdGxlKTtcbiAgICBlbHNlIHRpdGxlID0gY3Vyc29yID09PSBpID8gY29sb3IuY3lhbigpLnVuZGVybGluZSh2LnRpdGxlKSA6IHYudGl0bGU7XG4gICAgcmV0dXJuICh2LnNlbGVjdGVkID8gY29sb3IuZ3JlZW4oZmlndXJlcy5yYWRpb09uKSA6IGZpZ3VyZXMucmFkaW9PZmYpICsgJyAgJyArIHRpdGxlXG4gIH1cblxuICByZW5kZXJEb25lT3JJbnN0cnVjdGlvbnMoKSB7XG4gICAgaWYgKHRoaXMuZG9uZSkge1xuICAgICAgcmV0dXJuIHRoaXMudmFsdWVcbiAgICAgICAgLmZpbHRlcihlID0+IGUuc2VsZWN0ZWQpXG4gICAgICAgIC5tYXAodiA9PiB2LnRpdGxlKVxuICAgICAgICAuam9pbignLCAnKTtcbiAgICB9XG5cbiAgICBjb25zdCBvdXRwdXQgPSBbY29sb3IuZ3JheSh0aGlzLmhpbnQpLCB0aGlzLnJlbmRlckluc3RydWN0aW9ucygpLCB0aGlzLnJlbmRlckN1cnJlbnRJbnB1dCgpXTtcblxuICAgIGlmICh0aGlzLmZpbHRlcmVkT3B0aW9ucy5sZW5ndGggJiYgdGhpcy5maWx0ZXJlZE9wdGlvbnNbdGhpcy5jdXJzb3JdLmRpc2FibGVkKSB7XG4gICAgICBvdXRwdXQucHVzaChjb2xvci55ZWxsb3codGhpcy53YXJuKSk7XG4gICAgfVxuICAgIHJldHVybiBvdXRwdXQuam9pbignICcpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGlmICh0aGlzLmNsb3NlZCkgcmV0dXJuO1xuICAgIGlmICh0aGlzLmZpcnN0UmVuZGVyKSB0aGlzLm91dC53cml0ZShjdXJzb3IuaGlkZSk7XG4gICAgc3VwZXIucmVuZGVyKCk7XG5cbiAgICAvLyBwcmludCBwcm9tcHRcblxuICAgIGxldCBwcm9tcHQgPSBbXG4gICAgICBzdHlsZS5zeW1ib2wodGhpcy5kb25lLCB0aGlzLmFib3J0ZWQpLFxuICAgICAgY29sb3IuYm9sZCh0aGlzLm1zZyksXG4gICAgICBzdHlsZS5kZWxpbWl0ZXIoZmFsc2UpLFxuICAgICAgdGhpcy5yZW5kZXJEb25lT3JJbnN0cnVjdGlvbnMoKVxuICAgIF0uam9pbignICcpO1xuXG4gICAgaWYgKHRoaXMuc2hvd01pbkVycm9yKSB7XG4gICAgICBwcm9tcHQgKz0gY29sb3IucmVkKGBZb3UgbXVzdCBzZWxlY3QgYSBtaW5pbXVtIG9mICR7dGhpcy5taW5TZWxlY3RlZH0gY2hvaWNlcy5gKTtcbiAgICAgIHRoaXMuc2hvd01pbkVycm9yID0gZmFsc2U7XG4gICAgfVxuICAgIHByb21wdCArPSB0aGlzLnJlbmRlck9wdGlvbnModGhpcy5maWx0ZXJlZE9wdGlvbnMpO1xuXG4gICAgdGhpcy5vdXQud3JpdGUodGhpcy5jbGVhciArIHByb21wdCk7XG4gICAgdGhpcy5jbGVhciA9IGNsZWFyKHByb21wdCwgdGhpcy5vdXQuY29sdW1ucyk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBBdXRvY29tcGxldGVNdWx0aXNlbGVjdFByb21wdDtcbiIsImNvbnN0IGNvbG9yID0gcmVxdWlyZSgna2xldXInKTtcbmNvbnN0IFByb21wdCA9IHJlcXVpcmUoJy4vcHJvbXB0Jyk7XG5jb25zdCB7IHN0eWxlLCBjbGVhciB9ID0gcmVxdWlyZSgnLi4vdXRpbCcpO1xuY29uc3QgeyBlcmFzZSwgY3Vyc29yIH0gPSByZXF1aXJlKCdzaXN0ZXJhbnNpJyk7XG5cbi8qKlxuICogQ29uZmlybVByb21wdCBCYXNlIEVsZW1lbnRcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIE9wdGlvbnNcbiAqIEBwYXJhbSB7U3RyaW5nfSBvcHRzLm1lc3NhZ2UgTWVzc2FnZVxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0cy5pbml0aWFsXSBEZWZhdWx0IHZhbHVlICh0cnVlL2ZhbHNlKVxuICogQHBhcmFtIHtTdHJlYW19IFtvcHRzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFtvcHRzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKiBAcGFyYW0ge1N0cmluZ30gW29wdHMueWVzXSBUaGUgXCJZZXNcIiBsYWJlbFxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLnllc09wdGlvbl0gVGhlIFwiWWVzXCIgb3B0aW9uIHdoZW4gY2hvb3NpbmcgYmV0d2VlbiB5ZXMvbm9cbiAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5ub10gVGhlIFwiTm9cIiBsYWJlbFxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLm5vT3B0aW9uXSBUaGUgXCJOb1wiIG9wdGlvbiB3aGVuIGNob29zaW5nIGJldHdlZW4geWVzL25vXG4gKi9cbmNsYXNzIENvbmZpcm1Qcm9tcHQgZXh0ZW5kcyBQcm9tcHQge1xuICBjb25zdHJ1Y3RvcihvcHRzPXt9KSB7XG4gICAgc3VwZXIob3B0cyk7XG4gICAgdGhpcy5tc2cgPSBvcHRzLm1lc3NhZ2U7XG4gICAgdGhpcy52YWx1ZSA9IG9wdHMuaW5pdGlhbDtcbiAgICB0aGlzLmluaXRpYWxWYWx1ZSA9ICEhb3B0cy5pbml0aWFsO1xuICAgIHRoaXMueWVzTXNnID0gb3B0cy55ZXMgfHwgJ3llcyc7XG4gICAgdGhpcy55ZXNPcHRpb24gPSBvcHRzLnllc09wdGlvbiB8fCAnKFkvbiknO1xuICAgIHRoaXMubm9Nc2cgPSBvcHRzLm5vIHx8ICdubyc7XG4gICAgdGhpcy5ub09wdGlvbiA9IG9wdHMubm9PcHRpb24gfHwgJyh5L04pJztcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgcmVzZXQoKSB7XG4gICAgdGhpcy52YWx1ZSA9IHRoaXMuaW5pdGlhbFZhbHVlO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBleGl0KCkge1xuICAgIHRoaXMuYWJvcnQoKTtcbiAgfVxuXG4gIGFib3J0KCkge1xuICAgIHRoaXMuZG9uZSA9IHRoaXMuYWJvcnRlZCA9IHRydWU7XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgICB0aGlzLm91dC53cml0ZSgnXFxuJyk7XG4gICAgdGhpcy5jbG9zZSgpO1xuICB9XG5cbiAgc3VibWl0KCkge1xuICAgIHRoaXMudmFsdWUgPSB0aGlzLnZhbHVlIHx8IGZhbHNlO1xuICAgIHRoaXMuZG9uZSA9IHRydWU7XG4gICAgdGhpcy5hYm9ydGVkID0gZmFsc2U7XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgICB0aGlzLm91dC53cml0ZSgnXFxuJyk7XG4gICAgdGhpcy5jbG9zZSgpO1xuICB9XG5cbiAgXyhjLCBrZXkpIHtcbiAgICBpZiAoYy50b0xvd2VyQ2FzZSgpID09PSAneScpIHtcbiAgICAgIHRoaXMudmFsdWUgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRoaXMuc3VibWl0KCk7XG4gICAgfVxuICAgIGlmIChjLnRvTG93ZXJDYXNlKCkgPT09ICduJykge1xuICAgICAgdGhpcy52YWx1ZSA9IGZhbHNlO1xuICAgICAgcmV0dXJuIHRoaXMuc3VibWl0KCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBpZiAodGhpcy5jbG9zZWQpIHJldHVybjtcbiAgICBpZiAodGhpcy5maXJzdFJlbmRlcikgdGhpcy5vdXQud3JpdGUoY3Vyc29yLmhpZGUpO1xuICAgIGVsc2UgdGhpcy5vdXQud3JpdGUoY2xlYXIodGhpcy5vdXRwdXRUZXh0LCB0aGlzLm91dC5jb2x1bW5zKSk7XG4gICAgc3VwZXIucmVuZGVyKCk7XG5cbiAgICB0aGlzLm91dHB1dFRleHQgPSBbXG4gICAgICBzdHlsZS5zeW1ib2wodGhpcy5kb25lLCB0aGlzLmFib3J0ZWQpLFxuICAgICAgY29sb3IuYm9sZCh0aGlzLm1zZyksXG4gICAgICBzdHlsZS5kZWxpbWl0ZXIodGhpcy5kb25lKSxcbiAgICAgIHRoaXMuZG9uZSA/ICh0aGlzLnZhbHVlID8gdGhpcy55ZXNNc2cgOiB0aGlzLm5vTXNnKVxuICAgICAgICAgIDogY29sb3IuZ3JheSh0aGlzLmluaXRpYWxWYWx1ZSA/IHRoaXMueWVzT3B0aW9uIDogdGhpcy5ub09wdGlvbilcbiAgICBdLmpvaW4oJyAnKTtcblxuICAgIHRoaXMub3V0LndyaXRlKGVyYXNlLmxpbmUgKyBjdXJzb3IudG8oMCkgKyB0aGlzLm91dHB1dFRleHQpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gQ29uZmlybVByb21wdDtcbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIFRleHRQcm9tcHQ6IHJlcXVpcmUoJy4vdGV4dCcpLFxuICBTZWxlY3RQcm9tcHQ6IHJlcXVpcmUoJy4vc2VsZWN0JyksXG4gIFRvZ2dsZVByb21wdDogcmVxdWlyZSgnLi90b2dnbGUnKSxcbiAgRGF0ZVByb21wdDogcmVxdWlyZSgnLi9kYXRlJyksXG4gIE51bWJlclByb21wdDogcmVxdWlyZSgnLi9udW1iZXInKSxcbiAgTXVsdGlzZWxlY3RQcm9tcHQ6IHJlcXVpcmUoJy4vbXVsdGlzZWxlY3QnKSxcbiAgQXV0b2NvbXBsZXRlUHJvbXB0OiByZXF1aXJlKCcuL2F1dG9jb21wbGV0ZScpLFxuICBBdXRvY29tcGxldGVNdWx0aXNlbGVjdFByb21wdDogcmVxdWlyZSgnLi9hdXRvY29tcGxldGVNdWx0aXNlbGVjdCcpLFxuICBDb25maXJtUHJvbXB0OiByZXF1aXJlKCcuL2NvbmZpcm0nKVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbmNvbnN0ICQgPSBleHBvcnRzO1xuY29uc3QgZWwgPSByZXF1aXJlKCcuL2VsZW1lbnRzJyk7XG5jb25zdCBub29wID0gdiA9PiB2O1xuXG5mdW5jdGlvbiB0b1Byb21wdCh0eXBlLCBhcmdzLCBvcHRzPXt9KSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzLCByZWopID0+IHtcbiAgICBjb25zdCBwID0gbmV3IGVsW3R5cGVdKGFyZ3MpO1xuICAgIGNvbnN0IG9uQWJvcnQgPSBvcHRzLm9uQWJvcnQgfHwgbm9vcDtcbiAgICBjb25zdCBvblN1Ym1pdCA9IG9wdHMub25TdWJtaXQgfHwgbm9vcDtcbiAgICBjb25zdCBvbkV4aXQgPSBvcHRzLm9uRXhpdCB8fCBub29wO1xuICAgIHAub24oJ3N0YXRlJywgYXJncy5vblN0YXRlIHx8IG5vb3ApO1xuICAgIHAub24oJ3N1Ym1pdCcsIHggPT4gcmVzKG9uU3VibWl0KHgpKSk7XG4gICAgcC5vbignZXhpdCcsIHggPT4gcmVzKG9uRXhpdCh4KSkpO1xuICAgIHAub24oJ2Fib3J0JywgeCA9PiByZWoob25BYm9ydCh4KSkpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBUZXh0IHByb21wdFxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MubWVzc2FnZSBQcm9tcHQgbWVzc2FnZSB0byBkaXNwbGF5XG4gKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3MuaW5pdGlhbF0gRGVmYXVsdCBzdHJpbmcgdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBbYXJncy5zdHlsZT1cImRlZmF1bHRcIl0gUmVuZGVyIHN0eWxlICgnZGVmYXVsdCcsICdwYXNzd29yZCcsICdpbnZpc2libGUnKVxuICogQHBhcmFtIHtmdW5jdGlvbn0gW2FyZ3Mub25TdGF0ZV0gT24gc3RhdGUgY2hhbmdlIGNhbGxiYWNrXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBbYXJncy52YWxpZGF0ZV0gRnVuY3Rpb24gdG8gdmFsaWRhdGUgdXNlciBpbnB1dFxuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSB3aXRoIHVzZXIgaW5wdXRcbiAqL1xuJC50ZXh0ID0gYXJncyA9PiB0b1Byb21wdCgnVGV4dFByb21wdCcsIGFyZ3MpO1xuXG4vKipcbiAqIFBhc3N3b3JkIHByb21wdCB3aXRoIG1hc2tlZCBpbnB1dFxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MubWVzc2FnZSBQcm9tcHQgbWVzc2FnZSB0byBkaXNwbGF5XG4gKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3MuaW5pdGlhbF0gRGVmYXVsdCBzdHJpbmcgdmFsdWVcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IFthcmdzLm9uU3RhdGVdIE9uIHN0YXRlIGNoYW5nZSBjYWxsYmFja1xuICogQHBhcmFtIHtmdW5jdGlvbn0gW2FyZ3MudmFsaWRhdGVdIEZ1bmN0aW9uIHRvIHZhbGlkYXRlIHVzZXIgaW5wdXRcbiAqIEBwYXJhbSB7U3RyZWFtfSBbYXJncy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbYXJncy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICogQHJldHVybnMge1Byb21pc2V9IFByb21pc2Ugd2l0aCB1c2VyIGlucHV0XG4gKi9cbiQucGFzc3dvcmQgPSBhcmdzID0+IHtcbiAgYXJncy5zdHlsZSA9ICdwYXNzd29yZCc7XG4gIHJldHVybiAkLnRleHQoYXJncyk7XG59O1xuXG4vKipcbiAqIFByb21wdCB3aGVyZSBpbnB1dCBpcyBpbnZpc2libGUsIGxpa2Ugc3Vkb1xuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MubWVzc2FnZSBQcm9tcHQgbWVzc2FnZSB0byBkaXNwbGF5XG4gKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3MuaW5pdGlhbF0gRGVmYXVsdCBzdHJpbmcgdmFsdWVcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IFthcmdzLm9uU3RhdGVdIE9uIHN0YXRlIGNoYW5nZSBjYWxsYmFja1xuICogQHBhcmFtIHtmdW5jdGlvbn0gW2FyZ3MudmFsaWRhdGVdIEZ1bmN0aW9uIHRvIHZhbGlkYXRlIHVzZXIgaW5wdXRcbiAqIEBwYXJhbSB7U3RyZWFtfSBbYXJncy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbYXJncy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICogQHJldHVybnMge1Byb21pc2V9IFByb21pc2Ugd2l0aCB1c2VyIGlucHV0XG4gKi9cbiQuaW52aXNpYmxlID0gYXJncyA9PiB7XG4gIGFyZ3Muc3R5bGUgPSAnaW52aXNpYmxlJztcbiAgcmV0dXJuICQudGV4dChhcmdzKTtcbn07XG5cbi8qKlxuICogTnVtYmVyIHByb21wdFxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MubWVzc2FnZSBQcm9tcHQgbWVzc2FnZSB0byBkaXNwbGF5XG4gKiBAcGFyYW0ge251bWJlcn0gYXJncy5pbml0aWFsIERlZmF1bHQgbnVtYmVyIHZhbHVlXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBbYXJncy5vblN0YXRlXSBPbiBzdGF0ZSBjaGFuZ2UgY2FsbGJhY2tcbiAqIEBwYXJhbSB7bnVtYmVyfSBbYXJncy5tYXhdIE1heCB2YWx1ZVxuICogQHBhcmFtIHtudW1iZXJ9IFthcmdzLm1pbl0gTWluIHZhbHVlXG4gKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3Muc3R5bGU9XCJkZWZhdWx0XCJdIFJlbmRlciBzdHlsZSAoJ2RlZmF1bHQnLCAncGFzc3dvcmQnLCAnaW52aXNpYmxlJylcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdHMuZmxvYXQ9ZmFsc2VdIFBhcnNlIGlucHV0IGFzIGZsb2F0c1xuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLnJvdW5kPTJdIFJvdW5kIGZsb2F0cyB0byB4IGRlY2ltYWxzXG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMuaW5jcmVtZW50PTFdIE51bWJlciB0byBpbmNyZW1lbnQgYnkgd2hlbiB1c2luZyBhcnJvdy1rZXlzXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBbYXJncy52YWxpZGF0ZV0gRnVuY3Rpb24gdG8gdmFsaWRhdGUgdXNlciBpbnB1dFxuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSB3aXRoIHVzZXIgaW5wdXRcbiAqL1xuJC5udW1iZXIgPSBhcmdzID0+IHRvUHJvbXB0KCdOdW1iZXJQcm9tcHQnLCBhcmdzKTtcblxuLyoqXG4gKiBEYXRlIHByb21wdFxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MubWVzc2FnZSBQcm9tcHQgbWVzc2FnZSB0byBkaXNwbGF5XG4gKiBAcGFyYW0ge251bWJlcn0gYXJncy5pbml0aWFsIERlZmF1bHQgbnVtYmVyIHZhbHVlXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBbYXJncy5vblN0YXRlXSBPbiBzdGF0ZSBjaGFuZ2UgY2FsbGJhY2tcbiAqIEBwYXJhbSB7bnVtYmVyfSBbYXJncy5tYXhdIE1heCB2YWx1ZVxuICogQHBhcmFtIHtudW1iZXJ9IFthcmdzLm1pbl0gTWluIHZhbHVlXG4gKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3Muc3R5bGU9XCJkZWZhdWx0XCJdIFJlbmRlciBzdHlsZSAoJ2RlZmF1bHQnLCAncGFzc3dvcmQnLCAnaW52aXNpYmxlJylcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdHMuZmxvYXQ9ZmFsc2VdIFBhcnNlIGlucHV0IGFzIGZsb2F0c1xuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLnJvdW5kPTJdIFJvdW5kIGZsb2F0cyB0byB4IGRlY2ltYWxzXG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMuaW5jcmVtZW50PTFdIE51bWJlciB0byBpbmNyZW1lbnQgYnkgd2hlbiB1c2luZyBhcnJvdy1rZXlzXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBbYXJncy52YWxpZGF0ZV0gRnVuY3Rpb24gdG8gdmFsaWRhdGUgdXNlciBpbnB1dFxuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSB3aXRoIHVzZXIgaW5wdXRcbiAqL1xuJC5kYXRlID0gYXJncyA9PiB0b1Byb21wdCgnRGF0ZVByb21wdCcsIGFyZ3MpO1xuXG4vKipcbiAqIENsYXNzaWMgeWVzL25vIHByb21wdFxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MubWVzc2FnZSBQcm9tcHQgbWVzc2FnZSB0byBkaXNwbGF5XG4gKiBAcGFyYW0ge2Jvb2xlYW59IFthcmdzLmluaXRpYWw9ZmFsc2VdIERlZmF1bHQgdmFsdWVcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IFthcmdzLm9uU3RhdGVdIE9uIHN0YXRlIGNoYW5nZSBjYWxsYmFja1xuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSB3aXRoIHVzZXIgaW5wdXRcbiAqL1xuJC5jb25maXJtID0gYXJncyA9PiB0b1Byb21wdCgnQ29uZmlybVByb21wdCcsIGFyZ3MpO1xuXG4vKipcbiAqIExpc3QgcHJvbXB0LCBzcGxpdCBpbnRwdXQgc3RyaW5nIGJ5IGBzZXBlcmF0b3JgXG4gKiBAcGFyYW0ge3N0cmluZ30gYXJncy5tZXNzYWdlIFByb21wdCBtZXNzYWdlIHRvIGRpc3BsYXlcbiAqIEBwYXJhbSB7c3RyaW5nfSBbYXJncy5pbml0aWFsXSBEZWZhdWx0IHN0cmluZyB2YWx1ZVxuICogQHBhcmFtIHtzdHJpbmd9IFthcmdzLnN0eWxlPVwiZGVmYXVsdFwiXSBSZW5kZXIgc3R5bGUgKCdkZWZhdWx0JywgJ3Bhc3N3b3JkJywgJ2ludmlzaWJsZScpXG4gKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3Muc2VwYXJhdG9yXSBTdHJpbmcgc2VwYXJhdG9yXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBbYXJncy5vblN0YXRlXSBPbiBzdGF0ZSBjaGFuZ2UgY2FsbGJhY2tcbiAqIEBwYXJhbSB7U3RyZWFtfSBbYXJncy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbYXJncy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICogQHJldHVybnMge1Byb21pc2V9IFByb21pc2Ugd2l0aCB1c2VyIGlucHV0LCBpbiBmb3JtIG9mIGFuIGBBcnJheWBcbiAqL1xuJC5saXN0ID0gYXJncyA9PiB7XG4gIGNvbnN0IHNlcCA9IGFyZ3Muc2VwYXJhdG9yIHx8ICcsJztcbiAgcmV0dXJuIHRvUHJvbXB0KCdUZXh0UHJvbXB0JywgYXJncywge1xuICAgIG9uU3VibWl0OiBzdHIgPT4gc3RyLnNwbGl0KHNlcCkubWFwKHMgPT4gcy50cmltKCkpXG4gIH0pO1xufTtcblxuLyoqXG4gKiBUb2dnbGUvc3dpdGNoIHByb21wdFxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MubWVzc2FnZSBQcm9tcHQgbWVzc2FnZSB0byBkaXNwbGF5XG4gKiBAcGFyYW0ge2Jvb2xlYW59IFthcmdzLmluaXRpYWw9ZmFsc2VdIERlZmF1bHQgdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBbYXJncy5hY3RpdmU9XCJvblwiXSBUZXh0IGZvciBgYWN0aXZlYCBzdGF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IFthcmdzLmluYWN0aXZlPVwib2ZmXCJdIFRleHQgZm9yIGBpbmFjdGl2ZWAgc3RhdGVcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IFthcmdzLm9uU3RhdGVdIE9uIHN0YXRlIGNoYW5nZSBjYWxsYmFja1xuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSB3aXRoIHVzZXIgaW5wdXRcbiAqL1xuJC50b2dnbGUgPSBhcmdzID0+IHRvUHJvbXB0KCdUb2dnbGVQcm9tcHQnLCBhcmdzKTtcblxuLyoqXG4gKiBJbnRlcmFjdGl2ZSBzZWxlY3QgcHJvbXB0XG4gKiBAcGFyYW0ge3N0cmluZ30gYXJncy5tZXNzYWdlIFByb21wdCBtZXNzYWdlIHRvIGRpc3BsYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFyZ3MuY2hvaWNlcyBBcnJheSBvZiBjaG9pY2VzIG9iamVjdHMgYFt7IHRpdGxlLCB2YWx1ZSB9LCAuLi5dYFxuICogQHBhcmFtIHtudW1iZXJ9IFthcmdzLmluaXRpYWxdIEluZGV4IG9mIGRlZmF1bHQgdmFsdWVcbiAqIEBwYXJhbSB7U3RyaW5nfSBbYXJncy5oaW50XSBIaW50IHRvIGRpc3BsYXlcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IFthcmdzLm9uU3RhdGVdIE9uIHN0YXRlIGNoYW5nZSBjYWxsYmFja1xuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSB3aXRoIHVzZXIgaW5wdXRcbiAqL1xuJC5zZWxlY3QgPSBhcmdzID0+IHRvUHJvbXB0KCdTZWxlY3RQcm9tcHQnLCBhcmdzKTtcblxuLyoqXG4gKiBJbnRlcmFjdGl2ZSBtdWx0aS1zZWxlY3QgLyBhdXRvY29tcGxldGVNdWx0aXNlbGVjdCBwcm9tcHRcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLm1lc3NhZ2UgUHJvbXB0IG1lc3NhZ2UgdG8gZGlzcGxheVxuICogQHBhcmFtIHtBcnJheX0gYXJncy5jaG9pY2VzIEFycmF5IG9mIGNob2ljZXMgb2JqZWN0cyBgW3sgdGl0bGUsIHZhbHVlLCBbc2VsZWN0ZWRdIH0sIC4uLl1gXG4gKiBAcGFyYW0ge251bWJlcn0gW2FyZ3MubWF4XSBNYXggc2VsZWN0XG4gKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3MuaGludF0gSGludCB0byBkaXNwbGF5IHVzZXJcbiAqIEBwYXJhbSB7TnVtYmVyfSBbYXJncy5jdXJzb3I9MF0gQ3Vyc29yIHN0YXJ0IHBvc2l0aW9uXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBbYXJncy5vblN0YXRlXSBPbiBzdGF0ZSBjaGFuZ2UgY2FsbGJhY2tcbiAqIEBwYXJhbSB7U3RyZWFtfSBbYXJncy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbYXJncy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICogQHJldHVybnMge1Byb21pc2V9IFByb21pc2Ugd2l0aCB1c2VyIGlucHV0XG4gKi9cbiQubXVsdGlzZWxlY3QgPSBhcmdzID0+IHtcbiAgYXJncy5jaG9pY2VzID0gW10uY29uY2F0KGFyZ3MuY2hvaWNlcyB8fCBbXSk7XG4gIGNvbnN0IHRvU2VsZWN0ZWQgPSBpdGVtcyA9PiBpdGVtcy5maWx0ZXIoaXRlbSA9PiBpdGVtLnNlbGVjdGVkKS5tYXAoaXRlbSA9PiBpdGVtLnZhbHVlKTtcbiAgcmV0dXJuIHRvUHJvbXB0KCdNdWx0aXNlbGVjdFByb21wdCcsIGFyZ3MsIHtcbiAgICBvbkFib3J0OiB0b1NlbGVjdGVkLFxuICAgIG9uU3VibWl0OiB0b1NlbGVjdGVkXG4gIH0pO1xufTtcblxuJC5hdXRvY29tcGxldGVNdWx0aXNlbGVjdCA9IGFyZ3MgPT4ge1xuICBhcmdzLmNob2ljZXMgPSBbXS5jb25jYXQoYXJncy5jaG9pY2VzIHx8IFtdKTtcbiAgY29uc3QgdG9TZWxlY3RlZCA9IGl0ZW1zID0+IGl0ZW1zLmZpbHRlcihpdGVtID0+IGl0ZW0uc2VsZWN0ZWQpLm1hcChpdGVtID0+IGl0ZW0udmFsdWUpO1xuICByZXR1cm4gdG9Qcm9tcHQoJ0F1dG9jb21wbGV0ZU11bHRpc2VsZWN0UHJvbXB0JywgYXJncywge1xuICAgIG9uQWJvcnQ6IHRvU2VsZWN0ZWQsXG4gICAgb25TdWJtaXQ6IHRvU2VsZWN0ZWRcbiAgfSk7XG59O1xuXG5jb25zdCBieVRpdGxlID0gKGlucHV0LCBjaG9pY2VzKSA9PiBQcm9taXNlLnJlc29sdmUoXG4gIGNob2ljZXMuZmlsdGVyKGl0ZW0gPT4gaXRlbS50aXRsZS5zbGljZSgwLCBpbnB1dC5sZW5ndGgpLnRvTG93ZXJDYXNlKCkgPT09IGlucHV0LnRvTG93ZXJDYXNlKCkpXG4pO1xuXG4vKipcbiAqIEludGVyYWN0aXZlIGF1dG8tY29tcGxldGUgcHJvbXB0XG4gKiBAcGFyYW0ge3N0cmluZ30gYXJncy5tZXNzYWdlIFByb21wdCBtZXNzYWdlIHRvIGRpc3BsYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFyZ3MuY2hvaWNlcyBBcnJheSBvZiBhdXRvLWNvbXBsZXRlIGNob2ljZXMgb2JqZWN0cyBgW3sgdGl0bGUsIHZhbHVlIH0sIC4uLl1gXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbYXJncy5zdWdnZXN0XSBGdW5jdGlvbiB0byBmaWx0ZXIgcmVzdWx0cyBiYXNlZCBvbiB1c2VyIGlucHV0LiBEZWZhdWx0cyB0byBzb3J0IGJ5IGB0aXRsZWBcbiAqIEBwYXJhbSB7bnVtYmVyfSBbYXJncy5saW1pdD0xMF0gTWF4IG51bWJlciBvZiByZXN1bHRzIHRvIHNob3dcbiAqIEBwYXJhbSB7c3RyaW5nfSBbYXJncy5zdHlsZT1cImRlZmF1bHRcIl0gUmVuZGVyIHN0eWxlICgnZGVmYXVsdCcsICdwYXNzd29yZCcsICdpbnZpc2libGUnKVxuICogQHBhcmFtIHtTdHJpbmd9IFthcmdzLmluaXRpYWxdIEluZGV4IG9mIHRoZSBkZWZhdWx0IHZhbHVlXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLmNsZWFyRmlyc3RdIFRoZSBmaXJzdCBFU0NBUEUga2V5cHJlc3Mgd2lsbCBjbGVhciB0aGUgaW5wdXRcbiAqIEBwYXJhbSB7U3RyaW5nfSBbYXJncy5mYWxsYmFja10gRmFsbGJhY2sgbWVzc2FnZSAtIGRlZmF1bHRzIHRvIGluaXRpYWwgdmFsdWVcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IFthcmdzLm9uU3RhdGVdIE9uIHN0YXRlIGNoYW5nZSBjYWxsYmFja1xuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSB3aXRoIHVzZXIgaW5wdXRcbiAqL1xuJC5hdXRvY29tcGxldGUgPSBhcmdzID0+IHtcbiAgYXJncy5zdWdnZXN0ID0gYXJncy5zdWdnZXN0IHx8IGJ5VGl0bGU7XG4gIGFyZ3MuY2hvaWNlcyA9IFtdLmNvbmNhdChhcmdzLmNob2ljZXMgfHwgW10pO1xuICByZXR1cm4gdG9Qcm9tcHQoJ0F1dG9jb21wbGV0ZVByb21wdCcsIGFyZ3MpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuY29uc3QgcHJvbXB0cyA9IHJlcXVpcmUoJy4vcHJvbXB0cycpO1xuXG5jb25zdCBwYXNzT24gPSBbJ3N1Z2dlc3QnLCAnZm9ybWF0JywgJ29uU3RhdGUnLCAndmFsaWRhdGUnLCAnb25SZW5kZXInLCAndHlwZSddO1xuY29uc3Qgbm9vcCA9ICgpID0+IHt9O1xuXG4vKipcbiAqIFByb21wdCBmb3IgYSBzZXJpZXMgb2YgcXVlc3Rpb25zXG4gKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gcXVlc3Rpb25zIFNpbmdsZSBxdWVzdGlvbiBvYmplY3Qgb3IgQXJyYXkgb2YgcXVlc3Rpb24gb2JqZWN0c1xuICogQHBhcmFtIHtGdW5jdGlvbn0gW29uU3VibWl0XSBDYWxsYmFjayBmdW5jdGlvbiBjYWxsZWQgb24gcHJvbXB0IHN1Ym1pdFxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29uQ2FuY2VsXSBDYWxsYmFjayBmdW5jdGlvbiBjYWxsZWQgb24gY2FuY2VsL2Fib3J0XG4gKiBAcmV0dXJucyB7T2JqZWN0fSBPYmplY3Qgd2l0aCB2YWx1ZXMgZnJvbSB1c2VyIGlucHV0XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHByb21wdChxdWVzdGlvbnM9W10sIHsgb25TdWJtaXQ9bm9vcCwgb25DYW5jZWw9bm9vcCB9PXt9KSB7XG4gIGNvbnN0IGFuc3dlcnMgPSB7fTtcbiAgY29uc3Qgb3ZlcnJpZGUgPSBwcm9tcHQuX292ZXJyaWRlIHx8IHt9O1xuICBxdWVzdGlvbnMgPSBbXS5jb25jYXQocXVlc3Rpb25zKTtcbiAgbGV0IGFuc3dlciwgcXVlc3Rpb24sIHF1aXQsIG5hbWUsIHR5cGUsIGxhc3RQcm9tcHQ7XG5cbiAgY29uc3QgZ2V0Rm9ybWF0dGVkQW5zd2VyID0gYXN5bmMgKHF1ZXN0aW9uLCBhbnN3ZXIsIHNraXBWYWxpZGF0aW9uID0gZmFsc2UpID0+IHtcbiAgICBpZiAoIXNraXBWYWxpZGF0aW9uICYmIHF1ZXN0aW9uLnZhbGlkYXRlICYmIHF1ZXN0aW9uLnZhbGlkYXRlKGFuc3dlcikgIT09IHRydWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcmV0dXJuIHF1ZXN0aW9uLmZvcm1hdCA/IGF3YWl0IHF1ZXN0aW9uLmZvcm1hdChhbnN3ZXIsIGFuc3dlcnMpIDogYW5zd2VyXG4gIH07XG5cbiAgZm9yIChxdWVzdGlvbiBvZiBxdWVzdGlvbnMpIHtcbiAgICAoeyBuYW1lLCB0eXBlIH0gPSBxdWVzdGlvbik7XG5cbiAgICAvLyBldmFsdWF0ZSB0eXBlIGZpcnN0IGFuZCBza2lwIGlmIHR5cGUgaXMgYSBmYWxzeSB2YWx1ZVxuICAgIGlmICh0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdHlwZSA9IGF3YWl0IHR5cGUoYW5zd2VyLCB7IC4uLmFuc3dlcnMgfSwgcXVlc3Rpb24pXG4gICAgICBxdWVzdGlvblsndHlwZSddID0gdHlwZVxuICAgIH1cbiAgICBpZiAoIXR5cGUpIGNvbnRpbnVlO1xuXG4gICAgLy8gaWYgcHJvcGVydHkgaXMgYSBmdW5jdGlvbiwgaW52b2tlIGl0IHVubGVzcyBpdCdzIGEgc3BlY2lhbCBmdW5jdGlvblxuICAgIGZvciAobGV0IGtleSBpbiBxdWVzdGlvbikge1xuICAgICAgaWYgKHBhc3NPbi5pbmNsdWRlcyhrZXkpKSBjb250aW51ZTtcbiAgICAgIGxldCB2YWx1ZSA9IHF1ZXN0aW9uW2tleV07XG4gICAgICBxdWVzdGlvbltrZXldID0gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nID8gYXdhaXQgdmFsdWUoYW5zd2VyLCB7IC4uLmFuc3dlcnMgfSwgbGFzdFByb21wdCkgOiB2YWx1ZTtcbiAgICB9XG5cbiAgICBsYXN0UHJvbXB0ID0gcXVlc3Rpb247XG5cbiAgICBpZiAodHlwZW9mIHF1ZXN0aW9uLm1lc3NhZ2UgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb21wdCBtZXNzYWdlIGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuXG4gICAgLy8gdXBkYXRlIHZhcnMgaW4gY2FzZSB0aGV5IGNoYW5nZWRcbiAgICAoeyBuYW1lLCB0eXBlIH0gPSBxdWVzdGlvbik7XG5cbiAgICBpZiAocHJvbXB0c1t0eXBlXSA9PT0gdm9pZCAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHByb21wdCB0eXBlICgke3R5cGV9KSBpcyBub3QgZGVmaW5lZGApO1xuICAgIH1cblxuICAgIGlmIChvdmVycmlkZVtxdWVzdGlvbi5uYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBhbnN3ZXIgPSBhd2FpdCBnZXRGb3JtYXR0ZWRBbnN3ZXIocXVlc3Rpb24sIG92ZXJyaWRlW3F1ZXN0aW9uLm5hbWVdKTtcbiAgICAgIGlmIChhbnN3ZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBhbnN3ZXJzW25hbWVdID0gYW5zd2VyO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgLy8gR2V0IHRoZSBpbmplY3RlZCBhbnN3ZXIgaWYgdGhlcmUgaXMgb25lIG9yIHByb21wdCB0aGUgdXNlclxuICAgICAgYW5zd2VyID0gcHJvbXB0Ll9pbmplY3RlZCA/IGdldEluamVjdGVkQW5zd2VyKHByb21wdC5faW5qZWN0ZWQsIHF1ZXN0aW9uLmluaXRpYWwpIDogYXdhaXQgcHJvbXB0c1t0eXBlXShxdWVzdGlvbik7XG4gICAgICBhbnN3ZXJzW25hbWVdID0gYW5zd2VyID0gYXdhaXQgZ2V0Rm9ybWF0dGVkQW5zd2VyKHF1ZXN0aW9uLCBhbnN3ZXIsIHRydWUpO1xuICAgICAgcXVpdCA9IGF3YWl0IG9uU3VibWl0KHF1ZXN0aW9uLCBhbnN3ZXIsIGFuc3dlcnMpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcXVpdCA9ICEoYXdhaXQgb25DYW5jZWwocXVlc3Rpb24sIGFuc3dlcnMpKTtcbiAgICB9XG5cbiAgICBpZiAocXVpdCkgcmV0dXJuIGFuc3dlcnM7XG4gIH1cblxuICByZXR1cm4gYW5zd2Vycztcbn1cblxuZnVuY3Rpb24gZ2V0SW5qZWN0ZWRBbnN3ZXIoaW5qZWN0ZWQsIGRlYWZ1bHRWYWx1ZSkge1xuICBjb25zdCBhbnN3ZXIgPSBpbmplY3RlZC5zaGlmdCgpO1xuICAgIGlmIChhbnN3ZXIgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgdGhyb3cgYW5zd2VyO1xuICAgIH1cblxuICAgIHJldHVybiAoYW5zd2VyID09PSB1bmRlZmluZWQpID8gZGVhZnVsdFZhbHVlIDogYW5zd2VyO1xufVxuXG5mdW5jdGlvbiBpbmplY3QoYW5zd2Vycykge1xuICBwcm9tcHQuX2luamVjdGVkID0gKHByb21wdC5faW5qZWN0ZWQgfHwgW10pLmNvbmNhdChhbnN3ZXJzKTtcbn1cblxuZnVuY3Rpb24gb3ZlcnJpZGUoYW5zd2Vycykge1xuICBwcm9tcHQuX292ZXJyaWRlID0gT2JqZWN0LmFzc2lnbih7fSwgYW5zd2Vycyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmFzc2lnbihwcm9tcHQsIHsgcHJvbXB0LCBwcm9tcHRzLCBpbmplY3QsIG92ZXJyaWRlIH0pO1xuIiwiZnVuY3Rpb24gaXNOb2RlTFQodGFyKSB7XG4gIHRhciA9IChBcnJheS5pc0FycmF5KHRhcikgPyB0YXIgOiB0YXIuc3BsaXQoJy4nKSkubWFwKE51bWJlcik7XG4gIGxldCBpPTAsIHNyYz1wcm9jZXNzLnZlcnNpb25zLm5vZGUuc3BsaXQoJy4nKS5tYXAoTnVtYmVyKTtcbiAgZm9yICg7IGkgPCB0YXIubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoc3JjW2ldID4gdGFyW2ldKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHRhcltpXSA+IHNyY1tpXSkgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9XG4gIGlzTm9kZUxUKCc4LjYuMCcpXG4gICAgPyByZXF1aXJlKCcuL2Rpc3QvaW5kZXguanMnKVxuICAgIDogcmVxdWlyZSgnLi9saWIvaW5kZXguanMnKTtcbiIsIi8qKlxuICogQGRlc2NyaXB0aW9uIEVudW0gZm9yIGxvZyBsZXZlbHMuXG4gKiBAc3VtbWFyeSBEZWZpbmVzIGRpZmZlcmVudCBsZXZlbHMgb2YgbG9nZ2luZyBmb3IgdGhlIGFwcGxpY2F0aW9uLlxuICogQGVudW0ge3N0cmluZ31cbiAqIEBtZW1iZXJPZiBtb2R1bGU6TG9nZ2luZ1xuICovXG5leHBvcnQgdmFyIExvZ0xldmVsO1xuKGZ1bmN0aW9uIChMb2dMZXZlbCkge1xuICAgIC8qKiBFcnJvciBldmVudHMgdGhhdCBhcmUgbGlrZWx5IHRvIGNhdXNlIHByb2JsZW1zLiAqL1xuICAgIExvZ0xldmVsW1wiZXJyb3JcIl0gPSBcImVycm9yXCI7XG4gICAgLyoqIFJvdXRpbmUgaW5mb3JtYXRpb24sIHN1Y2ggYXMgb25nb2luZyBzdGF0dXMgb3IgcGVyZm9ybWFuY2UuICovXG4gICAgTG9nTGV2ZWxbXCJpbmZvXCJdID0gXCJpbmZvXCI7XG4gICAgLyoqIEFkZGl0aW9uYWwgcmVsZXZhbnQgaW5mb3JtYXRpb24uICovXG4gICAgTG9nTGV2ZWxbXCJ2ZXJib3NlXCJdID0gXCJ2ZXJib3NlXCI7XG4gICAgLyoqIERlYnVnIG9yIHRyYWNlIGluZm9ybWF0aW9uLiAqL1xuICAgIExvZ0xldmVsW1wiZGVidWdcIl0gPSBcImRlYnVnXCI7XG4gICAgLyoqIHdheSB0b28gdmVyYm9zZSBvciBzaWxseSBpbmZvcm1hdGlvbi4gKi9cbiAgICBMb2dMZXZlbFtcInNpbGx5XCJdID0gXCJzaWxseVwiO1xufSkoTG9nTGV2ZWwgfHwgKExvZ0xldmVsID0ge30pKTtcbi8qKlxuICogQGRlc2NyaXB0aW9uIE51bWVyaWMgdmFsdWVzIGFzc29jaWF0ZWQgd2l0aCBsb2cgbGV2ZWxzLlxuICogQHN1bW1hcnkgUHJvdmlkZXMgYSBudW1lcmljIHJlcHJlc2VudGF0aW9uIG9mIGxvZyBsZXZlbHMgZm9yIGNvbXBhcmlzb24gYW5kIGZpbHRlcmluZy5cbiAqIEBjb25zdCBOdW1lcmljTG9nTGV2ZWxzXG4gKiBAcHJvcGVydHkge251bWJlcn0gZXJyb3IgLSBOdW1lcmljIHZhbHVlIGZvciBlcnJvciBsZXZlbCAoMikuXG4gKiBAcHJvcGVydHkge251bWJlcn0gaW5mbyAtIE51bWVyaWMgdmFsdWUgZm9yIGluZm8gbGV2ZWwgKDQpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IHZlcmJvc2UgLSBOdW1lcmljIHZhbHVlIGZvciB2ZXJib3NlIGxldmVsICg2KS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBkZWJ1ZyAtIE51bWVyaWMgdmFsdWUgZm9yIGRlYnVnIGxldmVsICg3KS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBzaWxseSAtIE51bWVyaWMgdmFsdWUgZm9yIHNpbGx5IGxldmVsICg5KS5cbiAqIEBtZW1iZXJPZiBtb2R1bGU6TG9nZ2luZ1xuICovXG5leHBvcnQgY29uc3QgTnVtZXJpY0xvZ0xldmVscyA9IHtcbiAgICBlcnJvcjogMixcbiAgICBpbmZvOiA0LFxuICAgIHZlcmJvc2U6IDYsXG4gICAgZGVidWc6IDcsXG4gICAgc2lsbHk6IDksXG59O1xuLyoqXG4gKiBAZGVzY3JpcHRpb24gRW51bSBmb3IgbG9nZ2luZyBvdXRwdXQgbW9kZXMuXG4gKiBAc3VtbWFyeSBEZWZpbmVzIGRpZmZlcmVudCBvdXRwdXQgZm9ybWF0cyBmb3IgbG9nIG1lc3NhZ2VzLlxuICogQGVudW0ge3N0cmluZ31cbiAqIEBtZW1iZXJPZiBtb2R1bGU6TG9nZ2luZ1xuICovXG5leHBvcnQgdmFyIExvZ2dpbmdNb2RlO1xuKGZ1bmN0aW9uIChMb2dnaW5nTW9kZSkge1xuICAgIC8qKiBSYXcgdGV4dCBmb3JtYXQgZm9yIGh1bWFuIHJlYWRhYmlsaXR5ICovXG4gICAgTG9nZ2luZ01vZGVbXCJSQVdcIl0gPSBcInJhd1wiO1xuICAgIC8qKiBKU09OIGZvcm1hdCBmb3IgbWFjaGluZSBwYXJzaW5nICovXG4gICAgTG9nZ2luZ01vZGVbXCJKU09OXCJdID0gXCJqc29uXCI7XG59KShMb2dnaW5nTW9kZSB8fCAoTG9nZ2luZ01vZGUgPSB7fSkpO1xuLyoqXG4gKiBAZGVzY3JpcHRpb24gRGVmYXVsdCB0aGVtZSBmb3Igc3R5bGluZyBsb2cgb3V0cHV0LlxuICogQHN1bW1hcnkgRGVmaW5lcyB0aGUgZGVmYXVsdCBjb2xvciBhbmQgc3R5bGUgc2V0dGluZ3MgZm9yIHZhcmlvdXMgY29tcG9uZW50cyBvZiBsb2cgbWVzc2FnZXMuXG4gKiBAY29uc3QgRGVmYXVsdFRoZW1lXG4gKiBAdHlwZWRlZiB7VGhlbWV9IERlZmF1bHRUaGVtZVxuICogQHByb3BlcnR5IHtPYmplY3R9IGNsYXNzIC0gU3R5bGluZyBmb3IgY2xhc3MgbmFtZXMuXG4gKiBAcHJvcGVydHkge251bWJlcn0gY2xhc3MuZmcgLSBGb3JlZ3JvdW5kIGNvbG9yIGNvZGUgZm9yIGNsYXNzIG5hbWVzICgzNCkuXG4gKiBAcHJvcGVydHkge09iamVjdH0gaWQgLSBTdHlsaW5nIGZvciBpZGVudGlmaWVycy5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBpZC5mZyAtIEZvcmVncm91bmQgY29sb3IgY29kZSBmb3IgaWRlbnRpZmllcnMgKDM2KS5cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBzdGFjayAtIFN0eWxpbmcgZm9yIHN0YWNrIHRyYWNlcyAoZW1wdHkgb2JqZWN0KS5cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0aW1lc3RhbXAgLSBTdHlsaW5nIGZvciB0aW1lc3RhbXBzIChlbXB0eSBvYmplY3QpLlxuICogQHByb3BlcnR5IHtPYmplY3R9IG1lc3NhZ2UgLSBTdHlsaW5nIGZvciBkaWZmZXJlbnQgdHlwZXMgb2YgbWVzc2FnZXMuXG4gKiBAcHJvcGVydHkge09iamVjdH0gbWVzc2FnZS5lcnJvciAtIFN0eWxpbmcgZm9yIGVycm9yIG1lc3NhZ2VzLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IG1lc3NhZ2UuZXJyb3IuZmcgLSBGb3JlZ3JvdW5kIGNvbG9yIGNvZGUgZm9yIGVycm9yIG1lc3NhZ2VzICgzMSkuXG4gKiBAcHJvcGVydHkge09iamVjdH0gbWV0aG9kIC0gU3R5bGluZyBmb3IgbWV0aG9kIG5hbWVzIChlbXB0eSBvYmplY3QpLlxuICogQHByb3BlcnR5IHtPYmplY3R9IGxvZ0xldmVsIC0gU3R5bGluZyBmb3IgZGlmZmVyZW50IGxvZyBsZXZlbHMuXG4gKiBAcHJvcGVydHkge09iamVjdH0gbG9nTGV2ZWwuZXJyb3IgLSBTdHlsaW5nIGZvciBlcnJvciBsZXZlbCBsb2dzLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGxvZ0xldmVsLmVycm9yLmZnIC0gRm9yZWdyb3VuZCBjb2xvciBjb2RlIGZvciBlcnJvciBsZXZlbCBsb2dzICgzMSkuXG4gKiBAcHJvcGVydHkge3N0cmluZ1tdfSBsb2dMZXZlbC5lcnJvci5zdHlsZSAtIFN0eWxlIGF0dHJpYnV0ZXMgZm9yIGVycm9yIGxldmVsIGxvZ3MgKFtcImJvbGRcIl0pLlxuICogQHByb3BlcnR5IHtPYmplY3R9IGxvZ0xldmVsLmluZm8gLSBTdHlsaW5nIGZvciBpbmZvIGxldmVsIGxvZ3MgKGVtcHR5IG9iamVjdCkuXG4gKiBAcHJvcGVydHkge09iamVjdH0gbG9nTGV2ZWwudmVyYm9zZSAtIFN0eWxpbmcgZm9yIHZlcmJvc2UgbGV2ZWwgbG9ncyAoZW1wdHkgb2JqZWN0KS5cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBsb2dMZXZlbC5kZWJ1ZyAtIFN0eWxpbmcgZm9yIGRlYnVnIGxldmVsIGxvZ3MuXG4gKiBAcHJvcGVydHkge251bWJlcn0gbG9nTGV2ZWwuZGVidWcuZmcgLSBGb3JlZ3JvdW5kIGNvbG9yIGNvZGUgZm9yIGRlYnVnIGxldmVsIGxvZ3MgKDMzKS5cbiAqIEBtZW1iZXJPZiBtb2R1bGU6TG9nZ2luZ1xuICovXG5leHBvcnQgY29uc3QgRGVmYXVsdFRoZW1lID0ge1xuICAgIGNsYXNzOiB7XG4gICAgICAgIGZnOiAzNCxcbiAgICB9LFxuICAgIGlkOiB7XG4gICAgICAgIGZnOiAzNixcbiAgICB9LFxuICAgIHN0YWNrOiB7fSxcbiAgICB0aW1lc3RhbXA6IHt9LFxuICAgIG1lc3NhZ2U6IHtcbiAgICAgICAgZXJyb3I6IHtcbiAgICAgICAgICAgIGZnOiAzMSxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIG1ldGhvZDoge30sXG4gICAgbG9nTGV2ZWw6IHtcbiAgICAgICAgZXJyb3I6IHtcbiAgICAgICAgICAgIGZnOiAzMSxcbiAgICAgICAgICAgIHN0eWxlOiBbXCJib2xkXCJdLFxuICAgICAgICB9LFxuICAgICAgICBpbmZvOiB7fSxcbiAgICAgICAgdmVyYm9zZToge30sXG4gICAgICAgIGRlYnVnOiB7XG4gICAgICAgICAgICBmZzogMzMsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG4vKipcbiAqIEBkZXNjcmlwdGlvbiBEZWZhdWx0IGNvbmZpZ3VyYXRpb24gZm9yIGxvZ2dpbmcuXG4gKiBAc3VtbWFyeSBEZWZpbmVzIHRoZSBkZWZhdWx0IHNldHRpbmdzIGZvciB0aGUgbG9nZ2luZyBzeXN0ZW0sIGluY2x1ZGluZyB2ZXJib3NpdHksIGxvZyBsZXZlbCwgc3R5bGluZywgYW5kIHRpbWVzdGFtcCBmb3JtYXQuXG4gKiBAY29uc3QgRGVmYXVsdExvZ2dpbmdDb25maWdcbiAqIEB0eXBlZGVmIHtMb2dnaW5nQ29uZmlnfSBEZWZhdWx0TG9nZ2luZ0NvbmZpZ1xuICogQHByb3BlcnR5IHtudW1iZXJ9IHZlcmJvc2UgLSBWZXJib3NpdHkgbGV2ZWwgKDApLlxuICogQHByb3BlcnR5IHtMb2dMZXZlbH0gbGV2ZWwgLSBEZWZhdWx0IGxvZyBsZXZlbCAoTG9nTGV2ZWwuaW5mbykuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGxvZ0xldmVsIC0gV2hldGhlciB0byBkaXNwbGF5IGxvZyBsZXZlbCBpbiBvdXRwdXQgKHRydWUpLlxuICogQHByb3BlcnR5IHtMb2dnaW5nTW9kZX0gbW9kZSAtIE91dHB1dCBmb3JtYXQgbW9kZSAoTG9nZ2luZ01vZGUuUkFXKS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gc3R5bGUgLSBXaGV0aGVyIHRvIGFwcGx5IHN0eWxpbmcgdG8gbG9nIG91dHB1dCAoZmFsc2UpLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHNlcGFyYXRvciAtIFNlcGFyYXRvciBiZXR3ZWVuIGxvZyBjb21wb25lbnRzIChcIiAtIFwiKS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gdGltZXN0YW1wIC0gV2hldGhlciB0byBpbmNsdWRlIHRpbWVzdGFtcHMgaW4gbG9nIG1lc3NhZ2VzICh0cnVlKS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0aW1lc3RhbXBGb3JtYXQgLSBGb3JtYXQgZm9yIHRpbWVzdGFtcHMgKFwiSEg6bW06c3MuU1NTXCIpLlxuICogQHByb3BlcnR5IHtib29sZWFufSBjb250ZXh0IC0gV2hldGhlciB0byBpbmNsdWRlIGNvbnRleHQgaW5mb3JtYXRpb24gaW4gbG9nIG1lc3NhZ2VzICh0cnVlKS5cbiAqIEBwcm9wZXJ0eSB7VGhlbWV9IHRoZW1lIC0gVGhlIHRoZW1lIHRvIHVzZSBmb3Igc3R5bGluZyBsb2cgbWVzc2FnZXMgKERlZmF1bHRUaGVtZSkuXG4gKiBAbWVtYmVyT2YgbW9kdWxlOkxvZ2dpbmdcbiAqL1xuZXhwb3J0IGNvbnN0IERlZmF1bHRMb2dnaW5nQ29uZmlnID0ge1xuICAgIHZlcmJvc2U6IDAsXG4gICAgbGV2ZWw6IExvZ0xldmVsLmluZm8sXG4gICAgbG9nTGV2ZWw6IHRydWUsXG4gICAgbW9kZTogTG9nZ2luZ01vZGUuUkFXLFxuICAgIHN0eWxlOiBmYWxzZSxcbiAgICBjb250ZXh0U2VwYXJhdG9yOiBcIi5cIixcbiAgICBzZXBhcmF0b3I6IFwiIC0gXCIsXG4gICAgdGltZXN0YW1wOiB0cnVlLFxuICAgIHRpbWVzdGFtcEZvcm1hdDogXCJISDptbTpzcy5TU1NcIixcbiAgICBjb250ZXh0OiB0cnVlLFxuICAgIHRoZW1lOiBEZWZhdWx0VGhlbWUsXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pWTI5dWMzUmhiblJ6TG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhNaU9sc2lMaTR2TGk0dmMzSmpMMk52Ym5OMFlXNTBjeTUwY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pUVVGRlFUczdPenM3UjBGTFJ6dEJRVU5JTEUxQlFVMHNRMEZCVGl4SlFVRlpMRkZCVjFnN1FVRllSQ3hYUVVGWkxGRkJRVkU3U1VGRGJFSXNjMFJCUVhORU8wbEJRM1JFTERKQ1FVRmxMRU5CUVVFN1NVRkRaaXhyUlVGQmEwVTdTVUZEYkVVc2VVSkJRV0VzUTBGQlFUdEpRVU5pTEhWRFFVRjFRenRKUVVOMlF5d3JRa0ZCYlVJc1EwRkJRVHRKUVVOdVFpeHJRMEZCYTBNN1NVRkRiRU1zTWtKQlFXVXNRMEZCUVR0SlFVTm1MRFJEUVVFMFF6dEpRVU0xUXl3eVFrRkJaU3hEUVVGQk8wRkJRMnBDTEVOQlFVTXNSVUZZVnl4UlFVRlJMRXRCUVZJc1VVRkJVU3hSUVZkdVFqdEJRVVZFT3pzN096czdPenM3TzBkQlZVYzdRVUZEU0N4TlFVRk5MRU5CUVVNc1RVRkJUU3huUWtGQlowSXNSMEZCUnp0SlFVTTVRaXhMUVVGTExFVkJRVVVzUTBGQlF6dEpRVU5TTEVsQlFVa3NSVUZCUlN4RFFVRkRPMGxCUTFBc1QwRkJUeXhGUVVGRkxFTkJRVU03U1VGRFZpeExRVUZMTEVWQlFVVXNRMEZCUXp0SlFVTlNMRXRCUVVzc1JVRkJSU3hEUVVGRE8wTkJRMVFzUTBGQlF6dEJRVVZHT3pzN096dEhRVXRITzBGQlEwZ3NUVUZCVFN4RFFVRk9MRWxCUVZrc1YwRkxXRHRCUVV4RUxGZEJRVmtzVjBGQlZ6dEpRVU55UWl3MFEwRkJORU03U1VGRE5VTXNNRUpCUVZjc1EwRkJRVHRKUVVOWUxITkRRVUZ6UXp0SlFVTjBReXcwUWtGQllTeERRVUZCTzBGQlEyWXNRMEZCUXl4RlFVeFhMRmRCUVZjc1MwRkJXQ3hYUVVGWExGRkJTM1JDTzBGQlJVUTdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3p0SFFYZENSenRCUVVOSUxFMUJRVTBzUTBGQlF5eE5RVUZOTEZsQlFWa3NSMEZCVlR0SlFVTnFReXhMUVVGTExFVkJRVVU3VVVGRFRDeEZRVUZGTEVWQlFVVXNSVUZCUlR0TFFVTlFPMGxCUTBRc1JVRkJSU3hGUVVGRk8xRkJRMFlzUlVGQlJTeEZRVUZGTEVWQlFVVTdTMEZEVUR0SlFVTkVMRXRCUVVzc1JVRkJSU3hGUVVGRk8wbEJRMVFzVTBGQlV5eEZRVUZGTEVWQlFVVTdTVUZEWWl4UFFVRlBMRVZCUVVVN1VVRkRVQ3hMUVVGTExFVkJRVVU3V1VGRFRDeEZRVUZGTEVWQlFVVXNSVUZCUlR0VFFVTlFPMHRCUTBZN1NVRkRSQ3hOUVVGTkxFVkJRVVVzUlVGQlJUdEpRVU5XTEZGQlFWRXNSVUZCUlR0UlFVTlNMRXRCUVVzc1JVRkJSVHRaUVVOTUxFVkJRVVVzUlVGQlJTeEZRVUZGTzFsQlEwNHNTMEZCU3l4RlFVRkZMRU5CUVVNc1RVRkJUU3hEUVVGRE8xTkJRMmhDTzFGQlEwUXNTVUZCU1N4RlFVRkZMRVZCUVVVN1VVRkRVaXhQUVVGUExFVkJRVVVzUlVGQlJUdFJRVU5ZTEV0QlFVc3NSVUZCUlR0WlFVTk1MRVZCUVVVc1JVRkJSU3hGUVVGRk8xTkJRMUE3UzBGRFJqdERRVU5HTEVOQlFVTTdRVUZGUmpzN096czdPenM3T3pzN096czdPenRIUVdkQ1J6dEJRVU5JTEUxQlFVMHNRMEZCUXl4TlFVRk5MRzlDUVVGdlFpeEhRVUZyUWp0SlFVTnFSQ3hQUVVGUExFVkJRVVVzUTBGQlF6dEpRVU5XTEV0QlFVc3NSVUZCUlN4UlFVRlJMRU5CUVVNc1NVRkJTVHRKUVVOd1FpeFJRVUZSTEVWQlFVVXNTVUZCU1R0SlFVTmtMRWxCUVVrc1JVRkJSU3hYUVVGWExFTkJRVU1zUjBGQlJ6dEpRVU55UWl4TFFVRkxMRVZCUVVVc1MwRkJTenRKUVVOYUxHZENRVUZuUWl4RlFVRkZMRWRCUVVjN1NVRkRja0lzVTBGQlV5eEZRVUZGTEV0QlFVczdTVUZEYUVJc1UwRkJVeXhGUVVGRkxFbEJRVWs3U1VGRFppeGxRVUZsTEVWQlFVVXNZMEZCWXp0SlFVTXZRaXhQUVVGUExFVkJRVVVzU1VGQlNUdEpRVU5pTEV0QlFVc3NSVUZCUlN4WlFVRlpPME5CUTNCQ0xFTkJRVU1pTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lKcGJYQnZjblFnZXlCTWIyZG5hVzVuUTI5dVptbG5MQ0JVYUdWdFpTQjlJR1p5YjIwZ1hDSXVMM1I1Y0dWelhDSTdYRzVjYmk4cUtseHVJQ29nUUdSbGMyTnlhWEIwYVc5dUlFVnVkVzBnWm05eUlHeHZaeUJzWlhabGJITXVYRzRnS2lCQWMzVnRiV0Z5ZVNCRVpXWnBibVZ6SUdScFptWmxjbVZ1ZENCc1pYWmxiSE1nYjJZZ2JHOW5aMmx1WnlCbWIzSWdkR2hsSUdGd2NHeHBZMkYwYVc5dUxseHVJQ29nUUdWdWRXMGdlM04wY21sdVozMWNiaUFxSUVCdFpXMWlaWEpQWmlCdGIyUjFiR1U2VEc5bloybHVaMXh1SUNvdlhHNWxlSEJ2Y25RZ1pXNTFiU0JNYjJkTVpYWmxiQ0I3WEc0Z0lDOHFLaUJGY25KdmNpQmxkbVZ1ZEhNZ2RHaGhkQ0JoY21VZ2JHbHJaV3g1SUhSdklHTmhkWE5sSUhCeWIySnNaVzF6TGlBcUwxeHVJQ0JsY25KdmNpQTlJRndpWlhKeWIzSmNJaXhjYmlBZ0x5b3FJRkp2ZFhScGJtVWdhVzVtYjNKdFlYUnBiMjRzSUhOMVkyZ2dZWE1nYjI1bmIybHVaeUJ6ZEdGMGRYTWdiM0lnY0dWeVptOXliV0Z1WTJVdUlDb3ZYRzRnSUdsdVptOGdQU0JjSW1sdVptOWNJaXhjYmlBZ0x5b3FJRUZrWkdsMGFXOXVZV3dnY21Wc1pYWmhiblFnYVc1bWIzSnRZWFJwYjI0dUlDb3ZYRzRnSUhabGNtSnZjMlVnUFNCY0luWmxjbUp2YzJWY0lpeGNiaUFnTHlvcUlFUmxZblZuSUc5eUlIUnlZV05sSUdsdVptOXliV0YwYVc5dUxpQXFMMXh1SUNCa1pXSjFaeUE5SUZ3aVpHVmlkV2RjSWl4Y2JpQWdMeW9xSUhkaGVTQjBiMjhnZG1WeVltOXpaU0J2Y2lCemFXeHNlU0JwYm1admNtMWhkR2x2Ymk0Z0tpOWNiaUFnYzJsc2JIa2dQU0JjSW5OcGJHeDVYQ0lzWEc1OVhHNWNiaThxS2x4dUlDb2dRR1JsYzJOeWFYQjBhVzl1SUU1MWJXVnlhV01nZG1Gc2RXVnpJR0Z6YzI5amFXRjBaV1FnZDJsMGFDQnNiMmNnYkdWMlpXeHpMbHh1SUNvZ1FITjFiVzFoY25rZ1VISnZkbWxrWlhNZ1lTQnVkVzFsY21saklISmxjSEpsYzJWdWRHRjBhVzl1SUc5bUlHeHZaeUJzWlhabGJITWdabTl5SUdOdmJYQmhjbWx6YjI0Z1lXNWtJR1pwYkhSbGNtbHVaeTVjYmlBcUlFQmpiMjV6ZENCT2RXMWxjbWxqVEc5blRHVjJaV3h6WEc0Z0tpQkFjSEp2Y0dWeWRIa2dlMjUxYldKbGNuMGdaWEp5YjNJZ0xTQk9kVzFsY21saklIWmhiSFZsSUdadmNpQmxjbkp2Y2lCc1pYWmxiQ0FvTWlrdVhHNGdLaUJBY0hKdmNHVnlkSGtnZTI1MWJXSmxjbjBnYVc1bWJ5QXRJRTUxYldWeWFXTWdkbUZzZFdVZ1ptOXlJR2x1Wm04Z2JHVjJaV3dnS0RRcExseHVJQ29nUUhCeWIzQmxjblI1SUh0dWRXMWlaWEo5SUhabGNtSnZjMlVnTFNCT2RXMWxjbWxqSUhaaGJIVmxJR1p2Y2lCMlpYSmliM05sSUd4bGRtVnNJQ2cyS1M1Y2JpQXFJRUJ3Y205d1pYSjBlU0I3Ym5WdFltVnlmU0JrWldKMVp5QXRJRTUxYldWeWFXTWdkbUZzZFdVZ1ptOXlJR1JsWW5WbklHeGxkbVZzSUNnM0tTNWNiaUFxSUVCd2NtOXdaWEowZVNCN2JuVnRZbVZ5ZlNCemFXeHNlU0F0SUU1MWJXVnlhV01nZG1Gc2RXVWdabTl5SUhOcGJHeDVJR3hsZG1Wc0lDZzVLUzVjYmlBcUlFQnRaVzFpWlhKUFppQnRiMlIxYkdVNlRHOW5aMmx1WjF4dUlDb3ZYRzVsZUhCdmNuUWdZMjl1YzNRZ1RuVnRaWEpwWTB4dloweGxkbVZzY3lBOUlIdGNiaUFnWlhKeWIzSTZJRElzWEc0Z0lHbHVabTg2SURRc1hHNGdJSFpsY21KdmMyVTZJRFlzWEc0Z0lHUmxZblZuT2lBM0xGeHVJQ0J6YVd4c2VUb2dPU3hjYm4wN1hHNWNiaThxS2x4dUlDb2dRR1JsYzJOeWFYQjBhVzl1SUVWdWRXMGdabTl5SUd4dloyZHBibWNnYjNWMGNIVjBJRzF2WkdWekxseHVJQ29nUUhOMWJXMWhjbmtnUkdWbWFXNWxjeUJrYVdabVpYSmxiblFnYjNWMGNIVjBJR1p2Y20xaGRITWdabTl5SUd4dlp5QnRaWE56WVdkbGN5NWNiaUFxSUVCbGJuVnRJSHR6ZEhKcGJtZDlYRzRnS2lCQWJXVnRZbVZ5VDJZZ2JXOWtkV3hsT2t4dloyZHBibWRjYmlBcUwxeHVaWGh3YjNKMElHVnVkVzBnVEc5bloybHVaMDF2WkdVZ2UxeHVJQ0F2S2lvZ1VtRjNJSFJsZUhRZ1ptOXliV0YwSUdadmNpQm9kVzFoYmlCeVpXRmtZV0pwYkdsMGVTQXFMMXh1SUNCU1FWY2dQU0JjSW5KaGQxd2lMRnh1SUNBdktpb2dTbE5QVGlCbWIzSnRZWFFnWm05eUlHMWhZMmhwYm1VZ2NHRnljMmx1WnlBcUwxeHVJQ0JLVTA5T0lEMGdYQ0pxYzI5dVhDSXNYRzU5WEc1Y2JpOHFLbHh1SUNvZ1FHUmxjMk55YVhCMGFXOXVJRVJsWm1GMWJIUWdkR2hsYldVZ1ptOXlJSE4wZVd4cGJtY2diRzluSUc5MWRIQjFkQzVjYmlBcUlFQnpkVzF0WVhKNUlFUmxabWx1WlhNZ2RHaGxJR1JsWm1GMWJIUWdZMjlzYjNJZ1lXNWtJSE4wZVd4bElITmxkSFJwYm1keklHWnZjaUIyWVhKcGIzVnpJR052YlhCdmJtVnVkSE1nYjJZZ2JHOW5JRzFsYzNOaFoyVnpMbHh1SUNvZ1FHTnZibk4wSUVSbFptRjFiSFJVYUdWdFpWeHVJQ29nUUhSNWNHVmtaV1lnZTFSb1pXMWxmU0JFWldaaGRXeDBWR2hsYldWY2JpQXFJRUJ3Y205d1pYSjBlU0I3VDJKcVpXTjBmU0JqYkdGemN5QXRJRk4wZVd4cGJtY2dabTl5SUdOc1lYTnpJRzVoYldWekxseHVJQ29nUUhCeWIzQmxjblI1SUh0dWRXMWlaWEo5SUdOc1lYTnpMbVpuSUMwZ1JtOXlaV2R5YjNWdVpDQmpiMnh2Y2lCamIyUmxJR1p2Y2lCamJHRnpjeUJ1WVcxbGN5QW9NelFwTGx4dUlDb2dRSEJ5YjNCbGNuUjVJSHRQWW1wbFkzUjlJR2xrSUMwZ1UzUjViR2x1WnlCbWIzSWdhV1JsYm5ScFptbGxjbk11WEc0Z0tpQkFjSEp2Y0dWeWRIa2dlMjUxYldKbGNuMGdhV1F1Wm1jZ0xTQkdiM0psWjNKdmRXNWtJR052Ykc5eUlHTnZaR1VnWm05eUlHbGtaVzUwYVdacFpYSnpJQ2d6TmlrdVhHNGdLaUJBY0hKdmNHVnlkSGtnZTA5aWFtVmpkSDBnYzNSaFkyc2dMU0JUZEhsc2FXNW5JR1p2Y2lCemRHRmpheUIwY21GalpYTWdLR1Z0Y0hSNUlHOWlhbVZqZENrdVhHNGdLaUJBY0hKdmNHVnlkSGtnZTA5aWFtVmpkSDBnZEdsdFpYTjBZVzF3SUMwZ1UzUjViR2x1WnlCbWIzSWdkR2x0WlhOMFlXMXdjeUFvWlcxd2RIa2diMkpxWldOMEtTNWNiaUFxSUVCd2NtOXdaWEowZVNCN1QySnFaV04wZlNCdFpYTnpZV2RsSUMwZ1UzUjViR2x1WnlCbWIzSWdaR2xtWm1WeVpXNTBJSFI1Y0dWeklHOW1JRzFsYzNOaFoyVnpMbHh1SUNvZ1FIQnliM0JsY25SNUlIdFBZbXBsWTNSOUlHMWxjM05oWjJVdVpYSnliM0lnTFNCVGRIbHNhVzVuSUdadmNpQmxjbkp2Y2lCdFpYTnpZV2RsY3k1Y2JpQXFJRUJ3Y205d1pYSjBlU0I3Ym5WdFltVnlmU0J0WlhOellXZGxMbVZ5Y205eUxtWm5JQzBnUm05eVpXZHliM1Z1WkNCamIyeHZjaUJqYjJSbElHWnZjaUJsY25KdmNpQnRaWE56WVdkbGN5QW9NekVwTGx4dUlDb2dRSEJ5YjNCbGNuUjVJSHRQWW1wbFkzUjlJRzFsZEdodlpDQXRJRk4wZVd4cGJtY2dabTl5SUcxbGRHaHZaQ0J1WVcxbGN5QW9aVzF3ZEhrZ2IySnFaV04wS1M1Y2JpQXFJRUJ3Y205d1pYSjBlU0I3VDJKcVpXTjBmU0JzYjJkTVpYWmxiQ0F0SUZOMGVXeHBibWNnWm05eUlHUnBabVpsY21WdWRDQnNiMmNnYkdWMlpXeHpMbHh1SUNvZ1FIQnliM0JsY25SNUlIdFBZbXBsWTNSOUlHeHZaMHhsZG1Wc0xtVnljbTl5SUMwZ1UzUjViR2x1WnlCbWIzSWdaWEp5YjNJZ2JHVjJaV3dnYkc5bmN5NWNiaUFxSUVCd2NtOXdaWEowZVNCN2JuVnRZbVZ5ZlNCc2IyZE1aWFpsYkM1bGNuSnZjaTVtWnlBdElFWnZjbVZuY205MWJtUWdZMjlzYjNJZ1kyOWtaU0JtYjNJZ1pYSnliM0lnYkdWMlpXd2diRzluY3lBb016RXBMbHh1SUNvZ1FIQnliM0JsY25SNUlIdHpkSEpwYm1kYlhYMGdiRzluVEdWMlpXd3VaWEp5YjNJdWMzUjViR1VnTFNCVGRIbHNaU0JoZEhSeWFXSjFkR1Z6SUdadmNpQmxjbkp2Y2lCc1pYWmxiQ0JzYjJkeklDaGJYQ0ppYjJ4a1hDSmRLUzVjYmlBcUlFQndjbTl3WlhKMGVTQjdUMkpxWldOMGZTQnNiMmRNWlhabGJDNXBibVp2SUMwZ1UzUjViR2x1WnlCbWIzSWdhVzVtYnlCc1pYWmxiQ0JzYjJkeklDaGxiWEIwZVNCdlltcGxZM1FwTGx4dUlDb2dRSEJ5YjNCbGNuUjVJSHRQWW1wbFkzUjlJR3h2WjB4bGRtVnNMblpsY21KdmMyVWdMU0JUZEhsc2FXNW5JR1p2Y2lCMlpYSmliM05sSUd4bGRtVnNJR3h2WjNNZ0tHVnRjSFI1SUc5aWFtVmpkQ2t1WEc0Z0tpQkFjSEp2Y0dWeWRIa2dlMDlpYW1WamRIMGdiRzluVEdWMlpXd3VaR1ZpZFdjZ0xTQlRkSGxzYVc1bklHWnZjaUJrWldKMVp5QnNaWFpsYkNCc2IyZHpMbHh1SUNvZ1FIQnliM0JsY25SNUlIdHVkVzFpWlhKOUlHeHZaMHhsZG1Wc0xtUmxZblZuTG1abklDMGdSbTl5WldkeWIzVnVaQ0JqYjJ4dmNpQmpiMlJsSUdadmNpQmtaV0oxWnlCc1pYWmxiQ0JzYjJkeklDZ3pNeWt1WEc0Z0tpQkFiV1Z0WW1WeVQyWWdiVzlrZFd4bE9reHZaMmRwYm1kY2JpQXFMMXh1Wlhod2IzSjBJR052Ym5OMElFUmxabUYxYkhSVWFHVnRaVG9nVkdobGJXVWdQU0I3WEc0Z0lHTnNZWE56T2lCN1hHNGdJQ0FnWm1jNklETTBMRnh1SUNCOUxGeHVJQ0JwWkRvZ2UxeHVJQ0FnSUdabk9pQXpOaXhjYmlBZ2ZTeGNiaUFnYzNSaFkyczZJSHQ5TEZ4dUlDQjBhVzFsYzNSaGJYQTZJSHQ5TEZ4dUlDQnRaWE56WVdkbE9pQjdYRzRnSUNBZ1pYSnliM0k2SUh0Y2JpQWdJQ0FnSUdabk9pQXpNU3hjYmlBZ0lDQjlMRnh1SUNCOUxGeHVJQ0J0WlhSb2IyUTZJSHQ5TEZ4dUlDQnNiMmRNWlhabGJEb2dlMXh1SUNBZ0lHVnljbTl5T2lCN1hHNGdJQ0FnSUNCbVp6b2dNekVzWEc0Z0lDQWdJQ0J6ZEhsc1pUb2dXMXdpWW05c1pGd2lYU3hjYmlBZ0lDQjlMRnh1SUNBZ0lHbHVabTg2SUh0OUxGeHVJQ0FnSUhabGNtSnZjMlU2SUh0OUxGeHVJQ0FnSUdSbFluVm5PaUI3WEc0Z0lDQWdJQ0JtWnpvZ016TXNYRzRnSUNBZ2ZTeGNiaUFnZlN4Y2JuMDdYRzVjYmk4cUtseHVJQ29nUUdSbGMyTnlhWEIwYVc5dUlFUmxabUYxYkhRZ1kyOXVabWxuZFhKaGRHbHZiaUJtYjNJZ2JHOW5aMmx1Wnk1Y2JpQXFJRUJ6ZFcxdFlYSjVJRVJsWm1sdVpYTWdkR2hsSUdSbFptRjFiSFFnYzJWMGRHbHVaM01nWm05eUlIUm9aU0JzYjJkbmFXNW5JSE41YzNSbGJTd2dhVzVqYkhWa2FXNW5JSFpsY21KdmMybDBlU3dnYkc5bklHeGxkbVZzTENCemRIbHNhVzVuTENCaGJtUWdkR2x0WlhOMFlXMXdJR1p2Y20xaGRDNWNiaUFxSUVCamIyNXpkQ0JFWldaaGRXeDBURzluWjJsdVowTnZibVpwWjF4dUlDb2dRSFI1Y0dWa1pXWWdlMHh2WjJkcGJtZERiMjVtYVdkOUlFUmxabUYxYkhSTWIyZG5hVzVuUTI5dVptbG5YRzRnS2lCQWNISnZjR1Z5ZEhrZ2UyNTFiV0psY24wZ2RtVnlZbTl6WlNBdElGWmxjbUp2YzJsMGVTQnNaWFpsYkNBb01Da3VYRzRnS2lCQWNISnZjR1Z5ZEhrZ2UweHZaMHhsZG1Wc2ZTQnNaWFpsYkNBdElFUmxabUYxYkhRZ2JHOW5JR3hsZG1Wc0lDaE1iMmRNWlhabGJDNXBibVp2S1M1Y2JpQXFJRUJ3Y205d1pYSjBlU0I3WW05dmJHVmhibjBnYkc5blRHVjJaV3dnTFNCWGFHVjBhR1Z5SUhSdklHUnBjM0JzWVhrZ2JHOW5JR3hsZG1Wc0lHbHVJRzkxZEhCMWRDQW9kSEoxWlNrdVhHNGdLaUJBY0hKdmNHVnlkSGtnZTB4dloyZHBibWROYjJSbGZTQnRiMlJsSUMwZ1QzVjBjSFYwSUdadmNtMWhkQ0J0YjJSbElDaE1iMmRuYVc1blRXOWtaUzVTUVZjcExseHVJQ29nUUhCeWIzQmxjblI1SUh0aWIyOXNaV0Z1ZlNCemRIbHNaU0F0SUZkb1pYUm9aWElnZEc4Z1lYQndiSGtnYzNSNWJHbHVaeUIwYnlCc2IyY2diM1YwY0hWMElDaG1ZV3h6WlNrdVhHNGdLaUJBY0hKdmNHVnlkSGtnZTNOMGNtbHVaMzBnYzJWd1lYSmhkRzl5SUMwZ1UyVndZWEpoZEc5eUlHSmxkSGRsWlc0Z2JHOW5JR052YlhCdmJtVnVkSE1nS0Z3aUlDMGdYQ0lwTGx4dUlDb2dRSEJ5YjNCbGNuUjVJSHRpYjI5c1pXRnVmU0IwYVcxbGMzUmhiWEFnTFNCWGFHVjBhR1Z5SUhSdklHbHVZMngxWkdVZ2RHbHRaWE4wWVcxd2N5QnBiaUJzYjJjZ2JXVnpjMkZuWlhNZ0tIUnlkV1VwTGx4dUlDb2dRSEJ5YjNCbGNuUjVJSHR6ZEhKcGJtZDlJSFJwYldWemRHRnRjRVp2Y20xaGRDQXRJRVp2Y20xaGRDQm1iM0lnZEdsdFpYTjBZVzF3Y3lBb1hDSklTRHB0YlRwemN5NVRVMU5jSWlrdVhHNGdLaUJBY0hKdmNHVnlkSGtnZTJKdmIyeGxZVzU5SUdOdmJuUmxlSFFnTFNCWGFHVjBhR1Z5SUhSdklHbHVZMngxWkdVZ1kyOXVkR1Y0ZENCcGJtWnZjbTFoZEdsdmJpQnBiaUJzYjJjZ2JXVnpjMkZuWlhNZ0tIUnlkV1VwTGx4dUlDb2dRSEJ5YjNCbGNuUjVJSHRVYUdWdFpYMGdkR2hsYldVZ0xTQlVhR1VnZEdobGJXVWdkRzhnZFhObElHWnZjaUJ6ZEhsc2FXNW5JR3h2WnlCdFpYTnpZV2RsY3lBb1JHVm1ZWFZzZEZSb1pXMWxLUzVjYmlBcUlFQnRaVzFpWlhKUFppQnRiMlIxYkdVNlRHOW5aMmx1WjF4dUlDb3ZYRzVsZUhCdmNuUWdZMjl1YzNRZ1JHVm1ZWFZzZEV4dloyZHBibWREYjI1bWFXYzZJRXh2WjJkcGJtZERiMjVtYVdjZ1BTQjdYRzRnSUhabGNtSnZjMlU2SURBc1hHNGdJR3hsZG1Wc09pQk1iMmRNWlhabGJDNXBibVp2TEZ4dUlDQnNiMmRNWlhabGJEb2dkSEoxWlN4Y2JpQWdiVzlrWlRvZ1RHOW5aMmx1WjAxdlpHVXVVa0ZYTEZ4dUlDQnpkSGxzWlRvZ1ptRnNjMlVzWEc0Z0lHTnZiblJsZUhSVFpYQmhjbUYwYjNJNklGd2lMbHdpTEZ4dUlDQnpaWEJoY21GMGIzSTZJRndpSUMwZ1hDSXNYRzRnSUhScGJXVnpkR0Z0Y0RvZ2RISjFaU3hjYmlBZ2RHbHRaWE4wWVcxd1JtOXliV0YwT2lCY0lraElPbTF0T25OekxsTlRVMXdpTEZ4dUlDQmpiMjUwWlhoME9pQjBjblZsTEZ4dUlDQjBhR1Z0WlRvZ1JHVm1ZWFZzZEZSb1pXMWxMRnh1ZlR0Y2JpSmRmUT09IiwiLyoqXG4gKiBAZGVzY3JpcHRpb24gQU5TSSBlc2NhcGUgY29kZSBmb3IgcmVzZXR0aW5nIHRleHQgZm9ybWF0dGluZy5cbiAqIEBzdW1tYXJ5IFRoaXMgY29uc3RhbnQgaG9sZHMgdGhlIEFOU0kgZXNjYXBlIHNlcXVlbmNlIHVzZWQgdG8gcmVzZXQgYWxsIHRleHQgZm9ybWF0dGluZyB0byBkZWZhdWx0LlxuICogQGNvbnN0IEFuc2lSZXNldFxuICogQG1lbWJlck9mIG1vZHVsZTpTdHlsZWRTdHJpbmdcbiAqL1xuZXhwb3J0IGNvbnN0IEFuc2lSZXNldCA9IFwiXFx4MWJbMG1cIjtcbi8qKlxuICogQGRlc2NyaXB0aW9uIFN0YW5kYXJkIGZvcmVncm91bmQgY29sb3IgY29kZXMgZm9yIEFOU0kgdGV4dCBmb3JtYXR0aW5nLlxuICogQHN1bW1hcnkgVGhpcyBvYmplY3QgbWFwcyBjb2xvciBuYW1lcyB0byB0aGVpciBjb3JyZXNwb25kaW5nIEFOU0kgY29sb3IgY29kZXMgZm9yIHN0YW5kYXJkIGZvcmVncm91bmQgY29sb3JzLlxuICogQGNvbnN0IFN0YW5kYXJkRm9yZWdyb3VuZENvbG9yc1xuICogQHByb3BlcnR5IHtudW1iZXJ9IGJsYWNrIC0gQU5TSSBjb2RlIGZvciBibGFjayB0ZXh0ICgzMCkuXG4gKiBAcHJvcGVydHkge251bWJlcn0gcmVkIC0gQU5TSSBjb2RlIGZvciByZWQgdGV4dCAoMzEpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGdyZWVuIC0gQU5TSSBjb2RlIGZvciBncmVlbiB0ZXh0ICgzMikuXG4gKiBAcHJvcGVydHkge251bWJlcn0geWVsbG93IC0gQU5TSSBjb2RlIGZvciB5ZWxsb3cgdGV4dCAoMzMpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGJsdWUgLSBBTlNJIGNvZGUgZm9yIGJsdWUgdGV4dCAoMzQpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IG1hZ2VudGEgLSBBTlNJIGNvZGUgZm9yIG1hZ2VudGEgdGV4dCAoMzUpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGN5YW4gLSBBTlNJIGNvZGUgZm9yIGN5YW4gdGV4dCAoMzYpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IHdoaXRlIC0gQU5TSSBjb2RlIGZvciB3aGl0ZSB0ZXh0ICgzNykuXG4gKiBAbWVtYmVyT2YgbW9kdWxlOlN0eWxlZFN0cmluZ1xuICovXG5leHBvcnQgY29uc3QgU3RhbmRhcmRGb3JlZ3JvdW5kQ29sb3JzID0ge1xuICAgIGJsYWNrOiAzMCxcbiAgICByZWQ6IDMxLFxuICAgIGdyZWVuOiAzMixcbiAgICB5ZWxsb3c6IDMzLFxuICAgIGJsdWU6IDM0LFxuICAgIG1hZ2VudGE6IDM1LFxuICAgIGN5YW46IDM2LFxuICAgIHdoaXRlOiAzNyxcbn07XG4vKipcbiAqIEBkZXNjcmlwdGlvbiBCcmlnaHQgZm9yZWdyb3VuZCBjb2xvciBjb2RlcyBmb3IgQU5TSSB0ZXh0IGZvcm1hdHRpbmcuXG4gKiBAc3VtbWFyeSBUaGlzIG9iamVjdCBtYXBzIGNvbG9yIG5hbWVzIHRvIHRoZWlyIGNvcnJlc3BvbmRpbmcgQU5TSSBjb2xvciBjb2RlcyBmb3IgYnJpZ2h0IGZvcmVncm91bmQgY29sb3JzLlxuICogQGNvbnN0IEJyaWdodEZvcmVncm91bmRDb2xvcnNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBibGFjayAtIEFOU0kgY29kZSBmb3IgYnJpZ2h0IGJsYWNrIHRleHQgKDkwKS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSByZWQgLSBBTlNJIGNvZGUgZm9yIGJyaWdodCByZWQgdGV4dCAoOTEpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGdyZWVuIC0gQU5TSSBjb2RlIGZvciBicmlnaHQgZ3JlZW4gdGV4dCAoOTIpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IHllbGxvdyAtIEFOU0kgY29kZSBmb3IgYnJpZ2h0IHllbGxvdyB0ZXh0ICg5MykuXG4gKiBAcHJvcGVydHkge251bWJlcn0gYmx1ZSAtIEFOU0kgY29kZSBmb3IgYnJpZ2h0IGJsdWUgdGV4dCAoOTQpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IG1hZ2VudGEgLSBBTlNJIGNvZGUgZm9yIGJyaWdodCBtYWdlbnRhIHRleHQgKDk1KS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBjeWFuIC0gQU5TSSBjb2RlIGZvciBicmlnaHQgY3lhbiB0ZXh0ICg5NikuXG4gKiBAcHJvcGVydHkge251bWJlcn0gd2hpdGUgLSBBTlNJIGNvZGUgZm9yIGJyaWdodCB3aGl0ZSB0ZXh0ICg5NykuXG4gKiBAbWVtYmVyT2YgbW9kdWxlOkBTdHlsZWRTdHJpbmdcbiAqL1xuZXhwb3J0IGNvbnN0IEJyaWdodEZvcmVncm91bmRDb2xvcnMgPSB7XG4gICAgYnJpZ2h0QmxhY2s6IDkwLFxuICAgIGJyaWdodFJlZDogOTEsXG4gICAgYnJpZ2h0R3JlZW46IDkyLFxuICAgIGJyaWdodFllbGxvdzogOTMsXG4gICAgYnJpZ2h0Qmx1ZTogOTQsXG4gICAgYnJpZ2h0TWFnZW50YTogOTUsXG4gICAgYnJpZ2h0Q3lhbjogOTYsXG4gICAgYnJpZ2h0V2hpdGU6IDk3LFxufTtcbi8qKlxuICogQGRlc2NyaXB0aW9uIFN0YW5kYXJkIGJhY2tncm91bmQgY29sb3IgY29kZXMgZm9yIEFOU0kgdGV4dCBmb3JtYXR0aW5nLlxuICogQHN1bW1hcnkgVGhpcyBvYmplY3QgbWFwcyBjb2xvciBuYW1lcyB0byB0aGVpciBjb3JyZXNwb25kaW5nIEFOU0kgY29sb3IgY29kZXMgZm9yIHN0YW5kYXJkIGJhY2tncm91bmQgY29sb3JzLlxuICogQGNvbnN0IFN0YW5kYXJkQmFja2dyb3VuZENvbG9yc1xuICogQHByb3BlcnR5IHtudW1iZXJ9IGJnQmxhY2sgLSBBTlNJIGNvZGUgZm9yIGJsYWNrIGJhY2tncm91bmQgKDQwKS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBiZ1JlZCAtIEFOU0kgY29kZSBmb3IgcmVkIGJhY2tncm91bmQgKDQxKS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBiZ0dyZWVuIC0gQU5TSSBjb2RlIGZvciBncmVlbiBiYWNrZ3JvdW5kICg0MikuXG4gKiBAcHJvcGVydHkge251bWJlcn0gYmdZZWxsb3cgLSBBTlNJIGNvZGUgZm9yIHllbGxvdyBiYWNrZ3JvdW5kICg0MykuXG4gKiBAcHJvcGVydHkge251bWJlcn0gYmdCbHVlIC0gQU5TSSBjb2RlIGZvciBibHVlIGJhY2tncm91bmQgKDQ0KS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBiZ01hZ2VudGEgLSBBTlNJIGNvZGUgZm9yIG1hZ2VudGEgYmFja2dyb3VuZCAoNDUpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGJnQ3lhbiAtIEFOU0kgY29kZSBmb3IgY3lhbiBiYWNrZ3JvdW5kICg0NikuXG4gKiBAcHJvcGVydHkge251bWJlcn0gYmdXaGl0ZSAtIEFOU0kgY29kZSBmb3Igd2hpdGUgYmFja2dyb3VuZCAoNDcpLlxuICogQG1lbWJlck9mIG1vZHVsZTpAU3R5bGVkU3RyaW5nXG4gKi9cbmV4cG9ydCBjb25zdCBTdGFuZGFyZEJhY2tncm91bmRDb2xvcnMgPSB7XG4gICAgYmdCbGFjazogNDAsXG4gICAgYmdSZWQ6IDQxLFxuICAgIGJnR3JlZW46IDQyLFxuICAgIGJnWWVsbG93OiA0MyxcbiAgICBiZ0JsdWU6IDQ0LFxuICAgIGJnTWFnZW50YTogNDUsXG4gICAgYmdDeWFuOiA0NixcbiAgICBiZ1doaXRlOiA0Nyxcbn07XG4vKipcbiAqIEBkZXNjcmlwdGlvbiBCcmlnaHQgYmFja2dyb3VuZCBjb2xvciBjb2RlcyBmb3IgQU5TSSB0ZXh0IGZvcm1hdHRpbmcuXG4gKiBAc3VtbWFyeSBUaGlzIG9iamVjdCBtYXBzIGNvbG9yIG5hbWVzIHRvIHRoZWlyIGNvcnJlc3BvbmRpbmcgQU5TSSBjb2xvciBjb2RlcyBmb3IgYnJpZ2h0IGJhY2tncm91bmQgY29sb3JzLlxuICogQGNvbnN0IEJyaWdodEJhY2tncm91bmRDb2xvcnNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBiZ0JyaWdodEJsYWNrIC0gQU5TSSBjb2RlIGZvciBicmlnaHQgYmxhY2sgYmFja2dyb3VuZCAoMTAwKS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBiZ0JyaWdodFJlZCAtIEFOU0kgY29kZSBmb3IgYnJpZ2h0IHJlZCBiYWNrZ3JvdW5kICgxMDEpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGJnQnJpZ2h0R3JlZW4gLSBBTlNJIGNvZGUgZm9yIGJyaWdodCBncmVlbiBiYWNrZ3JvdW5kICgxMDIpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGJnQnJpZ2h0WWVsbG93IC0gQU5TSSBjb2RlIGZvciBicmlnaHQgeWVsbG93IGJhY2tncm91bmQgKDEwMykuXG4gKiBAcHJvcGVydHkge251bWJlcn0gYmdCcmlnaHRCbHVlIC0gQU5TSSBjb2RlIGZvciBicmlnaHQgYmx1ZSBiYWNrZ3JvdW5kICgxMDQpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGJnQnJpZ2h0TWFnZW50YSAtIEFOU0kgY29kZSBmb3IgYnJpZ2h0IG1hZ2VudGEgYmFja2dyb3VuZCAoMTA1KS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBiZ0JyaWdodEN5YW4gLSBBTlNJIGNvZGUgZm9yIGJyaWdodCBjeWFuIGJhY2tncm91bmQgKDEwNikuXG4gKiBAcHJvcGVydHkge251bWJlcn0gYmdCcmlnaHRXaGl0ZSAtIEFOU0kgY29kZSBmb3IgYnJpZ2h0IHdoaXRlIGJhY2tncm91bmQgKDEwNykuXG4gKiBAbWVtYmVyT2YgbW9kdWxlOkBTdHlsZWRTdHJpbmdcbiAqL1xuZXhwb3J0IGNvbnN0IEJyaWdodEJhY2tncm91bmRDb2xvcnMgPSB7XG4gICAgYmdCcmlnaHRCbGFjazogMTAwLFxuICAgIGJnQnJpZ2h0UmVkOiAxMDEsXG4gICAgYmdCcmlnaHRHcmVlbjogMTAyLFxuICAgIGJnQnJpZ2h0WWVsbG93OiAxMDMsXG4gICAgYmdCcmlnaHRCbHVlOiAxMDQsXG4gICAgYmdCcmlnaHRNYWdlbnRhOiAxMDUsXG4gICAgYmdCcmlnaHRDeWFuOiAxMDYsXG4gICAgYmdCcmlnaHRXaGl0ZTogMTA3LFxufTtcbi8qKlxuICogQGRlc2NyaXB0aW9uIFRleHQgc3R5bGUgY29kZXMgZm9yIEFOU0kgdGV4dCBmb3JtYXR0aW5nLlxuICogQHN1bW1hcnkgVGhpcyBvYmplY3QgbWFwcyBzdHlsZSBuYW1lcyB0byB0aGVpciBjb3JyZXNwb25kaW5nIEFOU0kgY29kZXMgZm9yIHZhcmlvdXMgdGV4dCBzdHlsZXMuXG4gKiBAY29uc3Qgc3R5bGVzXG4gKiBAcHJvcGVydHkge251bWJlcn0gcmVzZXQgLSBBTlNJIGNvZGUgdG8gcmVzZXQgYWxsIHN0eWxlcyAoMCkuXG4gKiBAcHJvcGVydHkge251bWJlcn0gYm9sZCAtIEFOU0kgY29kZSBmb3IgYm9sZCB0ZXh0ICgxKS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBkaW0gLSBBTlNJIGNvZGUgZm9yIGRpbSB0ZXh0ICgyKS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBpdGFsaWMgLSBBTlNJIGNvZGUgZm9yIGl0YWxpYyB0ZXh0ICgzKS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB1bmRlcmxpbmUgLSBBTlNJIGNvZGUgZm9yIHVuZGVybGluZWQgdGV4dCAoNCkuXG4gKiBAcHJvcGVydHkge251bWJlcn0gYmxpbmsgLSBBTlNJIGNvZGUgZm9yIGJsaW5raW5nIHRleHQgKDUpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGludmVyc2UgLSBBTlNJIGNvZGUgZm9yIGludmVyc2UgY29sb3JzICg3KS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBoaWRkZW4gLSBBTlNJIGNvZGUgZm9yIGhpZGRlbiB0ZXh0ICg4KS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBzdHJpa2V0aHJvdWdoIC0gQU5TSSBjb2RlIGZvciBzdHJpa2V0aHJvdWdoIHRleHQgKDkpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGRvdWJsZVVuZGVybGluZSAtIEFOU0kgY29kZSBmb3IgZG91YmxlIHVuZGVybGluZWQgdGV4dCAoMjEpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IG5vcm1hbENvbG9yIC0gQU5TSSBjb2RlIHRvIHJlc2V0IGNvbG9yIHRvIG5vcm1hbCAoMjIpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IG5vSXRhbGljT3JGcmFrdHVyIC0gQU5TSSBjb2RlIHRvIHR1cm4gb2ZmIGl0YWxpYyAoMjMpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IG5vVW5kZXJsaW5lIC0gQU5TSSBjb2RlIHRvIHR1cm4gb2ZmIHVuZGVybGluZSAoMjQpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IG5vQmxpbmsgLSBBTlNJIGNvZGUgdG8gdHVybiBvZmYgYmxpbmsgKDI1KS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBub0ludmVyc2UgLSBBTlNJIGNvZGUgdG8gdHVybiBvZmYgaW52ZXJzZSAoMjcpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IG5vSGlkZGVuIC0gQU5TSSBjb2RlIHRvIHR1cm4gb2ZmIGhpZGRlbiAoMjgpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IG5vU3RyaWtldGhyb3VnaCAtIEFOU0kgY29kZSB0byB0dXJuIG9mZiBzdHJpa2V0aHJvdWdoICgyOSkuXG4gKiBAbWVtYmVyT2YgbW9kdWxlOkBTdHlsZWRTdHJpbmdcbiAqL1xuZXhwb3J0IGNvbnN0IHN0eWxlcyA9IHtcbiAgICByZXNldDogMCxcbiAgICBib2xkOiAxLFxuICAgIGRpbTogMixcbiAgICBpdGFsaWM6IDMsXG4gICAgdW5kZXJsaW5lOiA0LFxuICAgIGJsaW5rOiA1LFxuICAgIGludmVyc2U6IDcsXG4gICAgaGlkZGVuOiA4LFxuICAgIHN0cmlrZXRocm91Z2g6IDksXG4gICAgZG91YmxlVW5kZXJsaW5lOiAyMSxcbiAgICBub3JtYWxDb2xvcjogMjIsXG4gICAgbm9JdGFsaWNPckZyYWt0dXI6IDIzLFxuICAgIG5vVW5kZXJsaW5lOiAyNCxcbiAgICBub0JsaW5rOiAyNSxcbiAgICBub0ludmVyc2U6IDI3LFxuICAgIG5vSGlkZGVuOiAyOCxcbiAgICBub1N0cmlrZXRocm91Z2g6IDI5LFxufTtcbiIsImltcG9ydCB7IEFuc2lSZXNldCwgc3R5bGVzIH0gZnJvbSBcIi4vY29uc3RhbnRzLmpzXCI7XG4vKipcbiAqIEBkZXNjcmlwdGlvbiBBcHBsaWVzIGEgYmFzaWMgQU5TSSBjb2xvciBjb2RlIHRvIHRleHQuXG4gKiBAc3VtbWFyeSBUaGlzIGZ1bmN0aW9uIHRha2VzIGEgc3RyaW5nLCBhbiBBTlNJIGNvbG9yIGNvZGUgbnVtYmVyLCBhbmQgYW4gb3B0aW9uYWwgYmFja2dyb3VuZCBmbGFnLlxuICogSXQgcmV0dXJucyB0aGUgdGV4dCB3cmFwcGVkIGluIHRoZSBhcHByb3ByaWF0ZSBBTlNJIGVzY2FwZSBjb2RlcyBmb3IgZWl0aGVyIGZvcmVncm91bmQgb3IgYmFja2dyb3VuZCBjb2xvcmluZy5cbiAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBmb3IgYmFzaWMgMTYtY29sb3IgQU5TSSBmb3JtYXR0aW5nLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gVGhlIHRleHQgdG8gYmUgY29sb3JlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBuIC0gVGhlIEFOU0kgY29sb3IgY29kZSBudW1iZXIuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtiZz1mYWxzZV0gLSBJZiB0cnVlLCBhcHBsaWVzIHRoZSBjb2xvciB0byB0aGUgYmFja2dyb3VuZCBpbnN0ZWFkIG9mIHRoZSBmb3JlZ3JvdW5kLlxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgdGV4dCB3cmFwcGVkIGluIEFOU0kgY29sb3IgY29kZXMuXG4gKlxuICogQGZ1bmN0aW9uIGNvbG9yaXplQU5TSVxuICogQG1lbWJlck9mIG1vZHVsZTpAU3R5bGVkU3RyaW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb2xvcml6ZUFOU0kodGV4dCwgbiwgYmcgPSBmYWxzZSkge1xuICAgIGlmIChpc05hTihuKSkge1xuICAgICAgICBjb25zb2xlLndhcm4oYEludmFsaWQgY29sb3IgbnVtYmVyIG9uIHRoZSBBTlNJIHNjYWxlOiAke259LiBpZ25vcmluZy4uLmApO1xuICAgICAgICByZXR1cm4gdGV4dDtcbiAgICB9XG4gICAgaWYgKGJnICYmICgobiA+IDMwICYmIG4gPD0gNDApXG4gICAgICAgIHx8IChuID4gOTAgJiYgbiA8PSAxMDApKSkge1xuICAgICAgICBuID0gbiArIDEwO1xuICAgIH1cbiAgICByZXR1cm4gYFxceDFiWyR7bn1tJHt0ZXh0fSR7QW5zaVJlc2V0fWA7XG59XG4vKipcbiAqIEBkZXNjcmlwdGlvbiBBcHBsaWVzIGEgMjU2LWNvbG9yIEFOU0kgY29kZSB0byB0ZXh0LlxuICogQHN1bW1hcnkgVGhpcyBmdW5jdGlvbiB0YWtlcyBhIHN0cmluZyBhbmQgYSBjb2xvciBudW1iZXIgKDAtMjU1KSBhbmQgcmV0dXJucyB0aGUgdGV4dFxuICogd3JhcHBlZCBpbiBBTlNJIGVzY2FwZSBjb2RlcyBmb3IgZWl0aGVyIGZvcmVncm91bmQgb3IgYmFja2dyb3VuZCBjb2xvcmluZy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIFRoZSB0ZXh0IHRvIGJlIGNvbG9yZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gbiAtIFRoZSBjb2xvciBudW1iZXIgKDAtMjU1KS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2JnPWZhbHNlXSAtIElmIHRydWUsIGFwcGxpZXMgdGhlIGNvbG9yIHRvIHRoZSBiYWNrZ3JvdW5kIGluc3RlYWQgb2YgdGhlIGZvcmVncm91bmQuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSB0ZXh0IHdyYXBwZWQgaW4gQU5TSSBjb2xvciBjb2Rlcy5cbiAqXG4gKiBAZnVuY3Rpb24gY29sb3JpemUyNTZcbiAqIEBtZW1iZXJPZiBtb2R1bGU6QFN0eWxlZFN0cmluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gY29sb3JpemUyNTYodGV4dCwgbiwgYmcgPSBmYWxzZSkge1xuICAgIGlmIChpc05hTihuKSkge1xuICAgICAgICBjb25zb2xlLndhcm4oYEludmFsaWQgY29sb3IgbnVtYmVyIG9uIHRoZSAyNTYgc2NhbGU6ICR7bn0uIGlnbm9yaW5nLi4uYCk7XG4gICAgICAgIHJldHVybiB0ZXh0O1xuICAgIH1cbiAgICBpZiAobiA8IDAgfHwgbiA+IDI1NSkge1xuICAgICAgICBjb25zb2xlLndhcm4oYEludmFsaWQgY29sb3IgbnVtYmVyIG9uIHRoZSAyNTYgc2NhbGU6ICR7bn0uIGlnbm9yaW5nLi4uYCk7XG4gICAgICAgIHJldHVybiB0ZXh0O1xuICAgIH1cbiAgICByZXR1cm4gYFxceDFiWyR7YmcgPyA0OCA6IDM4fTs1OyR7bn1tJHt0ZXh0fSR7QW5zaVJlc2V0fWA7XG59XG4vKipcbiAqIEBkZXNjcmlwdGlvbiBBcHBsaWVzIGFuIFJHQiBjb2xvciBBTlNJIGNvZGUgdG8gdGV4dC5cbiAqIEBzdW1tYXJ5IFRoaXMgZnVuY3Rpb24gdGFrZXMgYSBzdHJpbmcgYW5kIFJHQiBjb2xvciB2YWx1ZXMgKDAtMjU1IGZvciBlYWNoIGNvbXBvbmVudClcbiAqIGFuZCByZXR1cm5zIHRoZSB0ZXh0IHdyYXBwZWQgaW4gQU5TSSBlc2NhcGUgY29kZXMgZm9yIGVpdGhlciBmb3JlZ3JvdW5kIG9yIGJhY2tncm91bmQgY29sb3JpbmcuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBUaGUgdGV4dCB0byBiZSBjb2xvcmVkLlxuICogQHBhcmFtIHtudW1iZXJ9IHIgLSBUaGUgcmVkIGNvbXBvbmVudCBvZiB0aGUgY29sb3IgKDAtMjU1KS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBnIC0gVGhlIGdyZWVuIGNvbXBvbmVudCBvZiB0aGUgY29sb3IgKDAtMjU1KS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiIC0gVGhlIGJsdWUgY29tcG9uZW50IG9mIHRoZSBjb2xvciAoMC0yNTUpLlxuICogQHBhcmFtIHtib29sZWFufSBbYmc9ZmFsc2VdIC0gSWYgdHJ1ZSwgYXBwbGllcyB0aGUgY29sb3IgdG8gdGhlIGJhY2tncm91bmQgaW5zdGVhZCBvZiB0aGUgZm9yZWdyb3VuZC5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIHRleHQgd3JhcHBlZCBpbiBBTlNJIGNvbG9yIGNvZGVzLlxuICpcbiAqIEBmdW5jdGlvbiBjb2xvcml6ZVJHQlxuICogQG1lbWJlck9mIG1vZHVsZTpTdHlsZWRTdHJpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbG9yaXplUkdCKHRleHQsIHIsIGcsIGIsIGJnID0gZmFsc2UpIHtcbiAgICBpZiAoaXNOYU4ocikgfHwgaXNOYU4oZykgfHwgaXNOYU4oYikpIHtcbiAgICAgICAgY29uc29sZS53YXJuKGBJbnZhbGlkIFJHQiBjb2xvciB2YWx1ZXM6IHI9JHtyfSwgZz0ke2d9LCBiPSR7Yn0uIElnbm9yaW5nLi4uYCk7XG4gICAgICAgIHJldHVybiB0ZXh0O1xuICAgIH1cbiAgICBpZiAoW3IsIGcsIGJdLnNvbWUodiA9PiB2IDwgMCB8fCB2ID4gMjU1KSkge1xuICAgICAgICBjb25zb2xlLndhcm4oYEludmFsaWQgUkdCIGNvbG9yIHZhbHVlczogcj0ke3J9LCBnPSR7Z30sIGI9JHtifS4gSWdub3JpbmcuLi5gKTtcbiAgICAgICAgcmV0dXJuIHRleHQ7XG4gICAgfVxuICAgIHJldHVybiBgXFx4MWJbJHtiZyA/IDQ4IDogMzh9OzI7JHtyfTske2d9OyR7Yn1tJHt0ZXh0fSR7QW5zaVJlc2V0fWA7XG59XG4vKipcbiAqIEBkZXNjcmlwdGlvbiBBcHBsaWVzIGFuIEFOU0kgc3R5bGUgY29kZSB0byB0ZXh0LlxuICogQHN1bW1hcnkgVGhpcyBmdW5jdGlvbiB0YWtlcyBhIHN0cmluZyBhbmQgYSBzdHlsZSBjb2RlIChlaXRoZXIgYSBudW1iZXIgb3IgYSBrZXkgZnJvbSB0aGUgc3R5bGVzIG9iamVjdClcbiAqIGFuZCByZXR1cm5zIHRoZSB0ZXh0IHdyYXBwZWQgaW4gdGhlIGFwcHJvcHJpYXRlIEFOU0kgZXNjYXBlIGNvZGVzIGZvciB0aGF0IHN0eWxlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gVGhlIHRleHQgdG8gYmUgc3R5bGVkLlxuICogQHBhcmFtIHtudW1iZXIgfCBzdHJpbmd9IG4gLSBUaGUgc3R5bGUgY29kZSBvciBzdHlsZSBuYW1lLlxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgdGV4dCB3cmFwcGVkIGluIEFOU0kgc3R5bGUgY29kZXMuXG4gKlxuICogQGZ1bmN0aW9uIGFwcGx5U3R5bGVcbiAqIEBtZW1iZXJPZiBtb2R1bGU6U3R5bGVkU3RyaW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBseVN0eWxlKHRleHQsIG4pIHtcbiAgICBjb25zdCBzdHlsZUNvZGUgPSB0eXBlb2YgbiA9PT0gXCJudW1iZXJcIiA/IG4gOiBzdHlsZXNbbl07XG4gICAgcmV0dXJuIGBcXHgxYlske3N0eWxlQ29kZX1tJHt0ZXh0fSR7QW5zaVJlc2V0fWA7XG59XG4vKipcbiAqIEBkZXNjcmlwdGlvbiBSZW1vdmVzIGFsbCBBTlNJIGZvcm1hdHRpbmcgY29kZXMgZnJvbSB0ZXh0LlxuICogQHN1bW1hcnkgVGhpcyBmdW5jdGlvbiB0YWtlcyBhIHN0cmluZyB0aGF0IG1heSBjb250YWluIEFOU0kgZXNjYXBlIGNvZGVzIGZvciBmb3JtYXR0aW5nXG4gKiBhbmQgcmV0dXJucyBhIG5ldyBzdHJpbmcgd2l0aCBhbGwgc3VjaCBjb2RlcyByZW1vdmVkLCBsZWF2aW5nIG9ubHkgdGhlIHBsYWluIHRleHQgY29udGVudC5cbiAqIEl0IHVzZXMgYSByZWd1bGFyIGV4cHJlc3Npb24gdG8gbWF0Y2ggYW5kIHJlbW92ZSBBTlNJIGVzY2FwZSBzZXF1ZW5jZXMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBUaGUgdGV4dCBwb3RlbnRpYWxseSBjb250YWluaW5nIEFOU0kgZm9ybWF0dGluZyBjb2Rlcy5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGlucHV0IHRleHQgd2l0aCBhbGwgQU5TSSBmb3JtYXR0aW5nIGNvZGVzIHJlbW92ZWQuXG4gKlxuICogQGZ1bmN0aW9uIGNsZWFyXG4gKiBAbWVtYmVyT2YgbW9kdWxlOlN0eWxlZFN0cmluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gY2xlYXIodGV4dCkge1xuICAgIC8vIFJlZ3VsYXIgZXhwcmVzc2lvbiB0byBtYXRjaCBBTlNJIGVzY2FwZSBjb2Rlc1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb250cm9sLXJlZ2V4XG4gICAgY29uc3QgYW5zaVJlZ2V4ID0gL1xceDFCKD86W0AtWlxcXFwtX118XFxbWzAtP10qWyAtL10qW0Atfl0pL2c7XG4gICAgcmV0dXJuIHRleHQucmVwbGFjZShhbnNpUmVnZXgsICcnKTtcbn1cbi8qKlxuICogQGRlc2NyaXB0aW9uIEFwcGxpZXMgcmF3IEFOU0kgZXNjYXBlIGNvZGVzIHRvIHRleHQuXG4gKiBAc3VtbWFyeSBUaGlzIGZ1bmN0aW9uIHRha2VzIGEgc3RyaW5nIGFuZCBhIHJhdyBBTlNJIGVzY2FwZSBjb2RlLCBhbmQgcmV0dXJucyB0aGUgdGV4dFxuICogd3JhcHBlZCBpbiB0aGUgcHJvdmlkZWQgcmF3IEFOU0kgY29kZSBhbmQgdGhlIHJlc2V0IGNvZGUuIFRoaXMgYWxsb3dzIGZvciBhcHBseWluZyBjdXN0b21cbiAqIG9yIGNvbXBsZXggQU5TSSBmb3JtYXR0aW5nIHRoYXQgbWF5IG5vdCBiZSBjb3ZlcmVkIGJ5IG90aGVyIHV0aWxpdHkgZnVuY3Rpb25zLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gVGhlIHRleHQgdG8gYmUgZm9ybWF0dGVkLlxuICogQHBhcmFtIHtzdHJpbmd9IHJhdyAtIFRoZSByYXcgQU5TSSBlc2NhcGUgY29kZSB0byBiZSBhcHBsaWVkLlxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgdGV4dCB3cmFwcGVkIGluIHRoZSByYXcgQU5TSSBjb2RlIGFuZCB0aGUgcmVzZXQgY29kZS5cbiAqXG4gKiBAZnVuY3Rpb24gcmF3XG4gKiBAbWVtYmVyT2YgbW9kdWxlOlN0eWxlZFN0cmluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmF3KHRleHQsIHJhdykge1xuICAgIHJldHVybiBgJHtyYXd9JHt0ZXh0fSR7QW5zaVJlc2V0fWA7XG59XG4iLCJpbXBvcnQgeyBCcmlnaHRCYWNrZ3JvdW5kQ29sb3JzLCBCcmlnaHRGb3JlZ3JvdW5kQ29sb3JzLCBTdGFuZGFyZEJhY2tncm91bmRDb2xvcnMsIFN0YW5kYXJkRm9yZWdyb3VuZENvbG9ycywgc3R5bGVzLCB9IGZyb20gXCIuL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgY2xlYXIsIGNvbG9yaXplMjU2LCBjb2xvcml6ZUFOU0ksIGNvbG9yaXplUkdCLCByYXcsIGFwcGx5U3R5bGUsIH0gZnJvbSBcIi4vY29sb3JzLmpzXCI7XG4vKipcbiAqIEBjbGFzcyBTdHlsZWRTdHJpbmdcbiAqIEBkZXNjcmlwdGlvbiBBIGNsYXNzIHRoYXQgZXh0ZW5kcyBzdHJpbmcgZnVuY3Rpb25hbGl0eSB3aXRoIEFOU0kgY29sb3IgYW5kIHN0eWxlIG9wdGlvbnMuXG4gKiBAc3VtbWFyeSBTdHlsZWRTdHJpbmcgcHJvdmlkZXMgbWV0aG9kcyB0byBhcHBseSB2YXJpb3VzIEFOU0kgY29sb3IgYW5kIHN0eWxlIG9wdGlvbnMgdG8gdGV4dCBzdHJpbmdzLlxuICogSXQgaW1wbGVtZW50cyB0aGUgQ29sb3JpemVPcHRpb25zIGludGVyZmFjZSBhbmQgcHJveGllcyBuYXRpdmUgc3RyaW5nIG1ldGhvZHMgdG8gdGhlIHVuZGVybHlpbmcgdGV4dC5cbiAqIFRoaXMgY2xhc3MgYWxsb3dzIGZvciBjaGFpbmluZyBvZiBzdHlsaW5nIG1ldGhvZHMgYW5kIGVhc3kgYXBwbGljYXRpb24gb2YgY29sb3JzIGFuZCBzdHlsZXMgdG8gdGV4dC5cbiAqXG4gKiBAaW1wbGVtZW50cyB7Q29sb3JpemVPcHRpb25zfVxuICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBUaGUgaW5pdGlhbCB0ZXh0IHN0cmluZyB0byBiZSBzdHlsZWQuXG4gKi9cbmV4cG9ydCBjbGFzcyBTdHlsZWRTdHJpbmcge1xuICAgIGNvbnN0cnVjdG9yKHRleHQpIHtcbiAgICAgICAgdGhpcy50ZXh0ID0gdGV4dDtcbiAgICAgICAgLy8gQmFzaWMgY29sb3JzXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKFN0YW5kYXJkRm9yZWdyb3VuZENvbG9ycykuZm9yRWFjaCgoW25hbWUsIGNvZGVdKSA9PiB7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgbmFtZSwge1xuICAgICAgICAgICAgICAgIGdldDogKCkgPT4gdGhpcy5mb3JlZ3JvdW5kKGNvZGUpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3QuZW50cmllcyhCcmlnaHRGb3JlZ3JvdW5kQ29sb3JzKS5mb3JFYWNoKChbbmFtZSwgY29kZV0pID0+IHtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBuYW1lLCB7XG4gICAgICAgICAgICAgICAgZ2V0OiAoKSA9PiB0aGlzLmZvcmVncm91bmQoY29kZSksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIEJhY2tncm91bmQgY29sb3JzXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKFN0YW5kYXJkQmFja2dyb3VuZENvbG9ycykuZm9yRWFjaCgoW25hbWUsIGNvZGVdKSA9PiB7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgbmFtZSwge1xuICAgICAgICAgICAgICAgIGdldDogKCkgPT4gdGhpcy5iYWNrZ3JvdW5kKGNvZGUpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3QuZW50cmllcyhCcmlnaHRCYWNrZ3JvdW5kQ29sb3JzKS5mb3JFYWNoKChbbmFtZSwgY29kZV0pID0+IHtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBuYW1lLCB7XG4gICAgICAgICAgICAgICAgZ2V0OiAoKSA9PiB0aGlzLmJhY2tncm91bmQoY29kZSksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIFN0eWxlc1xuICAgICAgICBPYmplY3QuZW50cmllcyhzdHlsZXMpLmZvckVhY2goKFtuYW1lLCBjb2RlXSkgPT4ge1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIG5hbWUsIHtcbiAgICAgICAgICAgICAgICBnZXQ6ICgpID0+IHRoaXMuc3R5bGUoY29kZSksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDbGVhcnMgYWxsIHN0eWxpbmcgZnJvbSB0aGUgdGV4dC5cbiAgICAgKiBAc3VtbWFyeSBSZW1vdmVzIGFsbCBBTlNJIGNvbG9yIGFuZCBzdHlsZSBjb2RlcyBmcm9tIHRoZSB0ZXh0LlxuICAgICAqIEByZXR1cm4ge1N0eWxlZFN0cmluZ30gVGhlIFN0eWxlZFN0cmluZyBpbnN0YW5jZSB3aXRoIGNsZWFyZWQgc3R5bGluZy5cbiAgICAgKi9cbiAgICBjbGVhcigpIHtcbiAgICAgICAgdGhpcy50ZXh0ID0gY2xlYXIodGhpcy50ZXh0KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBBcHBsaWVzIHJhdyBBTlNJIGNvZGVzIHRvIHRoZSB0ZXh0LlxuICAgICAqIEBzdW1tYXJ5IEFsbG93cyBkaXJlY3QgYXBwbGljYXRpb24gb2YgQU5TSSBlc2NhcGUgc2VxdWVuY2VzIHRvIHRoZSB0ZXh0LlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSByYXdBbnNpIC0gVGhlIHJhdyBBTlNJIGVzY2FwZSBzZXF1ZW5jZSB0byBhcHBseS5cbiAgICAgKiBAcmV0dXJuIHtTdHlsZWRTdHJpbmd9IFRoZSBTdHlsZWRTdHJpbmcgaW5zdGFuY2Ugd2l0aCB0aGUgcmF3IEFOU0kgY29kZSBhcHBsaWVkLlxuICAgICAqL1xuICAgIHJhdyhyYXdBbnNpKSB7XG4gICAgICAgIHRoaXMudGV4dCA9IHJhdyh0aGlzLnRleHQsIHJhd0Fuc2kpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEFwcGxpZXMgYSBmb3JlZ3JvdW5kIGNvbG9yIHRvIHRoZSB0ZXh0LlxuICAgICAqIEBzdW1tYXJ5IFNldHMgdGhlIHRleHQgY29sb3IgdXNpbmcgQU5TSSBjb2xvciBjb2Rlcy5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbiAtIFRoZSBBTlNJIGNvbG9yIGNvZGUgZm9yIHRoZSBmb3JlZ3JvdW5kIGNvbG9yLlxuICAgICAqIEByZXR1cm4ge1N0eWxlZFN0cmluZ30gVGhlIFN0eWxlZFN0cmluZyBpbnN0YW5jZSB3aXRoIHRoZSBmb3JlZ3JvdW5kIGNvbG9yIGFwcGxpZWQuXG4gICAgICovXG4gICAgZm9yZWdyb3VuZChuKSB7XG4gICAgICAgIHRoaXMudGV4dCA9IGNvbG9yaXplQU5TSSh0aGlzLnRleHQsIG4pO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEFwcGxpZXMgYSBiYWNrZ3JvdW5kIGNvbG9yIHRvIHRoZSB0ZXh0LlxuICAgICAqIEBzdW1tYXJ5IFNldHMgdGhlIGJhY2tncm91bmQgY29sb3Igb2YgdGhlIHRleHQgdXNpbmcgQU5TSSBjb2xvciBjb2Rlcy5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbiAtIFRoZSBBTlNJIGNvbG9yIGNvZGUgZm9yIHRoZSBiYWNrZ3JvdW5kIGNvbG9yLlxuICAgICAqIEByZXR1cm4ge1N0eWxlZFN0cmluZ30gVGhlIFN0eWxlZFN0cmluZyBpbnN0YW5jZSB3aXRoIHRoZSBiYWNrZ3JvdW5kIGNvbG9yIGFwcGxpZWQuXG4gICAgICovXG4gICAgYmFja2dyb3VuZChuKSB7XG4gICAgICAgIHRoaXMudGV4dCA9IGNvbG9yaXplQU5TSSh0aGlzLnRleHQsIG4sIHRydWUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEFwcGxpZXMgYSB0ZXh0IHN0eWxlIHRvIHRoZSBzdHJpbmcuXG4gICAgICogQHN1bW1hcnkgU2V0cyB0ZXh0IHN0eWxlcyBzdWNoIGFzIGJvbGQsIGl0YWxpYywgb3IgdW5kZXJsaW5lIHVzaW5nIEFOU0kgc3R5bGUgY29kZXMuXG4gICAgICogQHBhcmFtIHtudW1iZXIgfCBzdHJpbmd9IG4gLSBUaGUgc3R5bGUgY29kZSBvciBrZXkgZnJvbSB0aGUgc3R5bGVzIG9iamVjdC5cbiAgICAgKiBAcmV0dXJuIHtTdHlsZWRTdHJpbmd9IFRoZSBTdHlsZWRTdHJpbmcgaW5zdGFuY2Ugd2l0aCB0aGUgc3R5bGUgYXBwbGllZC5cbiAgICAgKi9cbiAgICBzdHlsZShuKSB7XG4gICAgICAgIGlmICh0eXBlb2YgbiA9PT0gXCJzdHJpbmdcIiAmJiAhKG4gaW4gc3R5bGVzKSkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKGBJbnZhbGlkIHN0eWxlOiAke259YCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRleHQgPSBhcHBseVN0eWxlKHRoaXMudGV4dCwgbik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQXBwbGllcyBhIDI1Ni1jb2xvciBmb3JlZ3JvdW5kIGNvbG9yIHRvIHRoZSB0ZXh0LlxuICAgICAqIEBzdW1tYXJ5IFNldHMgdGhlIHRleHQgY29sb3IgdXNpbmcgdGhlIGV4dGVuZGVkIDI1Ni1jb2xvciBwYWxldHRlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBuIC0gVGhlIGNvbG9yIG51bWJlciBmcm9tIHRoZSAyNTYtY29sb3IgcGFsZXR0ZS5cbiAgICAgKiBAcmV0dXJuIHtTdHlsZWRTdHJpbmd9IFRoZSBTdHlsZWRTdHJpbmcgaW5zdGFuY2Ugd2l0aCB0aGUgMjU2LWNvbG9yIGZvcmVncm91bmQgYXBwbGllZC5cbiAgICAgKi9cbiAgICBjb2xvcjI1NihuKSB7XG4gICAgICAgIHRoaXMudGV4dCA9IGNvbG9yaXplMjU2KHRoaXMudGV4dCwgbik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQXBwbGllcyBhIDI1Ni1jb2xvciBiYWNrZ3JvdW5kIGNvbG9yIHRvIHRoZSB0ZXh0LlxuICAgICAqIEBzdW1tYXJ5IFNldHMgdGhlIGJhY2tncm91bmQgY29sb3IgdXNpbmcgdGhlIGV4dGVuZGVkIDI1Ni1jb2xvciBwYWxldHRlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBuIC0gVGhlIGNvbG9yIG51bWJlciBmcm9tIHRoZSAyNTYtY29sb3IgcGFsZXR0ZS5cbiAgICAgKiBAcmV0dXJuIHtTdHlsZWRTdHJpbmd9IFRoZSBTdHlsZWRTdHJpbmcgaW5zdGFuY2Ugd2l0aCB0aGUgMjU2LWNvbG9yIGJhY2tncm91bmQgYXBwbGllZC5cbiAgICAgKi9cbiAgICBiZ0NvbG9yMjU2KG4pIHtcbiAgICAgICAgdGhpcy50ZXh0ID0gY29sb3JpemUyNTYodGhpcy50ZXh0LCBuLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBBcHBsaWVzIGFuIFJHQiBmb3JlZ3JvdW5kIGNvbG9yIHRvIHRoZSB0ZXh0LlxuICAgICAqIEBzdW1tYXJ5IFNldHMgdGhlIHRleHQgY29sb3IgdXNpbmcgUkdCIHZhbHVlcy5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gciAtIFRoZSByZWQgY29tcG9uZW50ICgwLTI1NSkuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGcgLSBUaGUgZ3JlZW4gY29tcG9uZW50ICgwLTI1NSkuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGIgLSBUaGUgYmx1ZSBjb21wb25lbnQgKDAtMjU1KS5cbiAgICAgKiBAcmV0dXJuIHtTdHlsZWRTdHJpbmd9IFRoZSBTdHlsZWRTdHJpbmcgaW5zdGFuY2Ugd2l0aCB0aGUgUkdCIGZvcmVncm91bmQgY29sb3IgYXBwbGllZC5cbiAgICAgKi9cbiAgICByZ2IociwgZywgYikge1xuICAgICAgICB0aGlzLnRleHQgPSBjb2xvcml6ZVJHQih0aGlzLnRleHQsIHIsIGcsIGIpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEFwcGxpZXMgYW4gUkdCIGJhY2tncm91bmQgY29sb3IgdG8gdGhlIHRleHQuXG4gICAgICogQHN1bW1hcnkgU2V0cyB0aGUgYmFja2dyb3VuZCBjb2xvciB1c2luZyBSR0IgdmFsdWVzLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSByIC0gVGhlIHJlZCBjb21wb25lbnQgKDAtMjU1KS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZyAtIFRoZSBncmVlbiBjb21wb25lbnQgKDAtMjU1KS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYiAtIFRoZSBibHVlIGNvbXBvbmVudCAoMC0yNTUpLlxuICAgICAqIEByZXR1cm4ge1N0eWxlZFN0cmluZ30gVGhlIFN0eWxlZFN0cmluZyBpbnN0YW5jZSB3aXRoIHRoZSBSR0IgYmFja2dyb3VuZCBjb2xvciBhcHBsaWVkLlxuICAgICAqL1xuICAgIGJnUmdiKHIsIGcsIGIpIHtcbiAgICAgICAgdGhpcy50ZXh0ID0gY29sb3JpemVSR0IodGhpcy50ZXh0LCByLCBnLCBiLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDb252ZXJ0cyB0aGUgU3R5bGVkU3RyaW5nIHRvIGEgcmVndWxhciBzdHJpbmcuXG4gICAgICogQHN1bW1hcnkgUmV0dXJucyB0aGUgdW5kZXJseWluZyB0ZXh0IHdpdGggYWxsIGFwcGxpZWQgc3R5bGluZy5cbiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBzdHlsZWQgdGV4dCBhcyBhIHJlZ3VsYXIgc3RyaW5nLlxuICAgICAqL1xuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXh0O1xuICAgIH1cbn1cbi8qKlxuICogQGRlc2NyaXB0aW9uIEFwcGxpZXMgc3R5bGluZyB0byBhIGdpdmVuIHRleHQgc3RyaW5nLlxuICogQHN1bW1hcnkgVGhpcyBmdW5jdGlvbiB0YWtlcyBhIHN0cmluZyBhbmQgcmV0dXJucyBhIFN0eWxlZFN0cmluZyBvYmplY3QsIHdoaWNoIGlzIGFuIGVuaGFuY2VkXG4gKiB2ZXJzaW9uIG9mIHRoZSBvcmlnaW5hbCBzdHJpbmcgd2l0aCBhZGRpdGlvbmFsIG1ldGhvZHMgZm9yIGFwcGx5aW5nIHZhcmlvdXMgQU5TSSBjb2xvciBhbmQgc3R5bGVcbiAqIG9wdGlvbnMuIEl0IHNldHMgdXAgYSBtYXBwZXIgb2JqZWN0IHdpdGggbWV0aG9kcyBmb3IgZGlmZmVyZW50IHN0eWxpbmcgb3BlcmF0aW9ucyBhbmQgdGhlblxuICogZGVmaW5lcyBwcm9wZXJ0aWVzIG9uIHRoZSB0ZXh0IHN0cmluZyB0byBtYWtlIHRoZXNlIG1ldGhvZHMgYWNjZXNzaWJsZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSB0ICBUaGUgaW5wdXQgdGV4dCB0byBiZSBzdHlsZWQuXG4gKiBAcmV0dXJuIHtTdHlsZWRTdHJpbmd9IEEgU3R5bGVkU3RyaW5nIG9iamVjdCB3aXRoIGFkZGl0aW9uYWwgc3R5bGluZyBtZXRob2RzLlxuICpcbiAqIEBmdW5jdGlvbiBzdHlsZVxuICpcbiAqIEBtZW1iZXJPZiBTdHlsZWRTdHJpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0eWxlKC4uLnQpIHtcbiAgICByZXR1cm4gbmV3IFN0eWxlZFN0cmluZyh0LmpvaW4oXCIgXCIpKTtcbn1cbiIsImltcG9ydCB7IHN0eWxlIH0gZnJvbSBcInN0eWxlZC1zdHJpbmctYnVpbGRlclwiO1xuaW1wb3J0IHsgRGVmYXVsdExvZ2dpbmdDb25maWcsIERlZmF1bHRUaGVtZSwgTG9nTGV2ZWwsIE51bWVyaWNMb2dMZXZlbHMsIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG4vKipcbiAqIEBkZXNjcmlwdGlvbiBBIG1pbmltYWwgbG9nZ2VyIGltcGxlbWVudGF0aW9uLlxuICogQHN1bW1hcnkgTWluaUxvZ2dlciBpcyBhIGxpZ2h0d2VpZ2h0IGxvZ2dpbmcgY2xhc3MgdGhhdCBpbXBsZW1lbnRzIHRoZSBMb2dnZXIgaW50ZXJmYWNlLlxuICogSXQgcHJvdmlkZXMgYmFzaWMgbG9nZ2luZyBmdW5jdGlvbmFsaXR5IHdpdGggc3VwcG9ydCBmb3IgZGlmZmVyZW50IGxvZyBsZXZlbHMsIHZlcmJvc2l0eSxcbiAqIGNvbnRleHQtYXdhcmUgbG9nZ2luZywgYW5kIGN1c3RvbWl6YWJsZSBmb3JtYXR0aW5nLlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbnRleHQgLSBUaGUgY29udGV4dCAodHlwaWNhbGx5IGNsYXNzIG5hbWUpIHRoaXMgbG9nZ2VyIGlzIGFzc29jaWF0ZWQgd2l0aFxuICogQHBhcmFtIHtQYXJ0aWFsPExvZ2dpbmdDb25maWc+fSBjb25mIC0gT3B0aW9uYWwgY29uZmlndXJhdGlvbiB0byBvdmVycmlkZSBnbG9iYWwgc2V0dGluZ3NcbiAqIEBjbGFzcyBNaW5pTG9nZ2VyXG4gKiBAZXhhbXBsZVxuICogLy8gQ3JlYXRlIGEgbmV3IGxvZ2dlciBmb3IgYSBjbGFzc1xuICogY29uc3QgbG9nZ2VyID0gbmV3IE1pbmlMb2dnZXIoJ015Q2xhc3MnKTtcbiAqXG4gKiAvLyBMb2cgbWVzc2FnZXMgYXQgZGlmZmVyZW50IGxldmVsc1xuICogbG9nZ2VyLmluZm8oJ1RoaXMgaXMgYW4gaW5mbyBtZXNzYWdlJyk7XG4gKiBsb2dnZXIuZGVidWcoJ1RoaXMgaXMgYSBkZWJ1ZyBtZXNzYWdlJyk7XG4gKiBsb2dnZXIuZXJyb3IoJ1NvbWV0aGluZyB3ZW50IHdyb25nJyk7XG4gKlxuICogLy8gQ3JlYXRlIGEgY2hpbGQgbG9nZ2VyIGZvciBhIHNwZWNpZmljIG1ldGhvZFxuICogY29uc3QgbWV0aG9kTG9nZ2VyID0gbG9nZ2VyLmZvcignbXlNZXRob2QnKTtcbiAqIG1ldGhvZExvZ2dlci52ZXJib3NlKCdEZXRhaWxlZCBpbmZvcm1hdGlvbicsIDIpO1xuICpcbiAqIC8vIExvZyB3aXRoIGN1c3RvbSBjb25maWd1cmF0aW9uXG4gKiBsb2dnZXIuZm9yKCdzcGVjaWFsTWV0aG9kJywgeyBzdHlsZTogdHJ1ZSB9KS5pbmZvKCdTdHlsZWQgbWVzc2FnZScpO1xuICovXG5leHBvcnQgY2xhc3MgTWluaUxvZ2dlciB7XG4gICAgY29uc3RydWN0b3IoY29udGV4dCwgY29uZikge1xuICAgICAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICAgICAgICB0aGlzLmNvbmYgPSBjb25mO1xuICAgIH1cbiAgICBjb25maWcoa2V5KSB7XG4gICAgICAgIGlmICh0aGlzLmNvbmYgJiYga2V5IGluIHRoaXMuY29uZilcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbmZba2V5XTtcbiAgICAgICAgcmV0dXJuIExvZ2dpbmcuZ2V0Q29uZmlnKClba2V5XTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENyZWF0ZXMgYSBjaGlsZCBsb2dnZXIgZm9yIGEgc3BlY2lmaWMgbWV0aG9kIG9yIGNvbnRleHRcbiAgICAgKiBAc3VtbWFyeSBSZXR1cm5zIGEgbmV3IGxvZ2dlciBpbnN0YW5jZSB3aXRoIHRoZSBjdXJyZW50IGNvbnRleHQgZXh0ZW5kZWQgYnkgdGhlIHNwZWNpZmllZCBtZXRob2QgbmFtZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nIHwgRnVuY3Rpb259IG1ldGhvZCAtIFRoZSBtZXRob2QgbmFtZSBvciBmdW5jdGlvbiB0byBjcmVhdGUgYSBsb2dnZXIgZm9yXG4gICAgICogQHBhcmFtIHtQYXJ0aWFsPExvZ2dpbmdDb25maWc+fSBjb25maWcgLSBPcHRpb25hbCBjb25maWd1cmF0aW9uIHRvIG92ZXJyaWRlIHNldHRpbmdzXG4gICAgICogQHBhcmFtIHsuLi5hbnl9IGFyZ3MgLSBBZGRpdGlvbmFsIGFyZ3VtZW50cyB0byBwYXNzIHRvIHRoZSBsb2dnZXIgZmFjdG9yeVxuICAgICAqIEByZXR1cm4ge0xvZ2dlcn0gQSBuZXcgbG9nZ2VyIGluc3RhbmNlIGZvciB0aGUgc3BlY2lmaWVkIG1ldGhvZFxuICAgICAqL1xuICAgIGZvcihtZXRob2QsIGNvbmZpZykge1xuICAgICAgICBtZXRob2QgPSBtZXRob2RcbiAgICAgICAgICAgID8gdHlwZW9mIG1ldGhvZCA9PT0gXCJzdHJpbmdcIlxuICAgICAgICAgICAgICAgID8gbWV0aG9kXG4gICAgICAgICAgICAgICAgOiBtZXRob2QubmFtZVxuICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiBuZXcgUHJveHkodGhpcywge1xuICAgICAgICAgICAgZ2V0OiAodGFyZ2V0LCBwLCByZWNlaXZlcikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IFJlZmxlY3QuZ2V0KHRhcmdldCwgcCwgcmVjZWl2ZXIpO1xuICAgICAgICAgICAgICAgIGlmIChwID09PSBcImNvbmZpZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJveHkodGhpcy5jb25maWcsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldDogKHRhcmdldCwgcCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25maWcgJiYgcCBpbiBjb25maWcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb25maWdbcF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJlZmxlY3QuZ2V0KHRhcmdldCwgcCwgcmVjZWl2ZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChwID09PSBcImNvbnRleHRcIikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gW3Jlc3VsdCwgbWV0aG9kXS5qb2luKFwiLlwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhIGZvcm1hdHRlZCBsb2cgc3RyaW5nXG4gICAgICogQHN1bW1hcnkgR2VuZXJhdGVzIGEgbG9nIHN0cmluZyB3aXRoIHRpbWVzdGFtcCwgY29sb3JlZCBsb2cgbGV2ZWwsIGNvbnRleHQsIGFuZCBtZXNzYWdlXG4gICAgICogQHBhcmFtIHtMb2dMZXZlbH0gbGV2ZWwgLSBUaGUgbG9nIGxldmVsIGZvciB0aGlzIG1lc3NhZ2VcbiAgICAgKiBAcGFyYW0ge1N0cmluZ0xpa2UgfCBFcnJvcn0gbWVzc2FnZSAtIFRoZSBtZXNzYWdlIHRvIGxvZyBvciBhbiBFcnJvciBvYmplY3RcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0YWNrXSAtIE9wdGlvbmFsIHN0YWNrIHRyYWNlIHRvIGluY2x1ZGUgaW4gdGhlIGxvZ1xuICAgICAqIEByZXR1cm4ge3N0cmluZ30gQSBmb3JtYXR0ZWQgbG9nIHN0cmluZyB3aXRoIGFsbCBjb21wb25lbnRzXG4gICAgICovXG4gICAgY3JlYXRlTG9nKGxldmVsLCBtZXNzYWdlLCBzdGFjaykge1xuICAgICAgICBjb25zdCBsb2cgPSBbXTtcbiAgICAgICAgY29uc3Qgc3R5bGUgPSB0aGlzLmNvbmZpZyhcInN0eWxlXCIpO1xuICAgICAgICBpZiAodGhpcy5jb25maWcoXCJ0aW1lc3RhbXBcIikpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XG4gICAgICAgICAgICBjb25zdCB0aW1lc3RhbXAgPSBzdHlsZSA/IExvZ2dpbmcudGhlbWUoZGF0ZSwgXCJ0aW1lc3RhbXBcIiwgbGV2ZWwpIDogZGF0ZTtcbiAgICAgICAgICAgIGxvZy5wdXNoKHRpbWVzdGFtcCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY29uZmlnKFwibG9nTGV2ZWxcIikpIHtcbiAgICAgICAgICAgIGNvbnN0IGx2bCA9IHN0eWxlXG4gICAgICAgICAgICAgICAgPyBMb2dnaW5nLnRoZW1lKGxldmVsLCBcImxvZ0xldmVsXCIsIGxldmVsKVxuICAgICAgICAgICAgICAgIDogbGV2ZWw7XG4gICAgICAgICAgICBsb2cucHVzaChsdmwpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNvbmZpZyhcImNvbnRleHRcIikpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSBzdHlsZVxuICAgICAgICAgICAgICAgID8gTG9nZ2luZy50aGVtZSh0aGlzLmNvbnRleHQsIFwiY2xhc3NcIiwgbGV2ZWwpXG4gICAgICAgICAgICAgICAgOiB0aGlzLmNvbnRleHQ7XG4gICAgICAgICAgICBsb2cucHVzaChjb250ZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jb25maWcoXCJjb3JyZWxhdGlvbklkXCIpKSB7XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29uc3QgaWQgPSBzdHlsZVxuICAgICAgICAgICAgICAgICAgICA/IExvZ2dpbmcudGhlbWUodGhpcy5jb25maWcoXCJjb3JyZWxhdGlvbklkXCIpLnRvU3RyaW5nKCksIFwiaWRcIiwgbGV2ZWwpXG4gICAgICAgICAgICAgICAgICAgIDogdGhpcy5jb25maWcoXCJjb3JyZWxhdGlvbklkXCIpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgbG9nLnB1c2goaWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1zZyA9IHN0eWxlXG4gICAgICAgICAgICA/IExvZ2dpbmcudGhlbWUodHlwZW9mIG1lc3NhZ2UgPT09IFwic3RyaW5nXCIgPyBtZXNzYWdlIDogbWVzc2FnZS5tZXNzYWdlLCBcIm1lc3NhZ2VcIiwgbGV2ZWwpXG4gICAgICAgICAgICA6IHR5cGVvZiBtZXNzYWdlID09PSBcInN0cmluZ1wiXG4gICAgICAgICAgICAgICAgPyBtZXNzYWdlXG4gICAgICAgICAgICAgICAgOiBtZXNzYWdlLm1lc3NhZ2U7XG4gICAgICAgIGxvZy5wdXNoKG1zZyk7XG4gICAgICAgIGlmIChzdGFjayB8fCBtZXNzYWdlIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgIHN0YWNrID0gc3R5bGVcbiAgICAgICAgICAgICAgICA/IExvZ2dpbmcudGhlbWUoKHN0YWNrIHx8IG1lc3NhZ2Uuc3RhY2spLCBcInN0YWNrXCIsIGxldmVsKVxuICAgICAgICAgICAgICAgIDogc3RhY2s7XG4gICAgICAgICAgICBsb2cucHVzaChgXFxuU3RhY2sgdHJhY2U6XFxuJHtzdGFja31gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbG9nLmpvaW4odGhpcy5jb25maWcoXCJzZXBhcmF0b3JcIikpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gTG9ncyBhIG1lc3NhZ2Ugd2l0aCB0aGUgc3BlY2lmaWVkIGxvZyBsZXZlbFxuICAgICAqIEBzdW1tYXJ5IENoZWNrcyBpZiB0aGUgbWVzc2FnZSBzaG91bGQgYmUgbG9nZ2VkIGJhc2VkIG9uIHRoZSBjdXJyZW50IGxvZyBsZXZlbCxcbiAgICAgKiB0aGVuIHVzZXMgdGhlIGFwcHJvcHJpYXRlIGNvbnNvbGUgbWV0aG9kIHRvIG91dHB1dCB0aGUgZm9ybWF0dGVkIGxvZ1xuICAgICAqIEBwYXJhbSB7TG9nTGV2ZWx9IGxldmVsIC0gVGhlIGxvZyBsZXZlbCBvZiB0aGUgbWVzc2FnZVxuICAgICAqIEBwYXJhbSB7U3RyaW5nTGlrZSB8IEVycm9yfSBtc2cgLSBUaGUgbWVzc2FnZSB0byBiZSBsb2dnZWQgb3IgYW4gRXJyb3Igb2JqZWN0XG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdGFja10gLSBPcHRpb25hbCBzdGFjayB0cmFjZSB0byBpbmNsdWRlIGluIHRoZSBsb2dcbiAgICAgKiBAcmV0dXJuIHt2b2lkfVxuICAgICAqL1xuICAgIGxvZyhsZXZlbCwgbXNnLCBzdGFjaykge1xuICAgICAgICBpZiAoTnVtZXJpY0xvZ0xldmVsc1t0aGlzLmNvbmZpZyhcImxldmVsXCIpXSA8XG4gICAgICAgICAgICBOdW1lcmljTG9nTGV2ZWxzW2xldmVsXSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgbGV0IG1ldGhvZDtcbiAgICAgICAgc3dpdGNoIChsZXZlbCkge1xuICAgICAgICAgICAgY2FzZSBMb2dMZXZlbC5pbmZvOlxuICAgICAgICAgICAgICAgIG1ldGhvZCA9IGNvbnNvbGUubG9nO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBMb2dMZXZlbC52ZXJib3NlOlxuICAgICAgICAgICAgY2FzZSBMb2dMZXZlbC5kZWJ1ZzpcbiAgICAgICAgICAgICAgICBtZXRob2QgPSBjb25zb2xlLmRlYnVnO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBMb2dMZXZlbC5lcnJvcjpcbiAgICAgICAgICAgICAgICBtZXRob2QgPSBjb25zb2xlLmVycm9yO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGxvZyBsZXZlbFwiKTtcbiAgICAgICAgfVxuICAgICAgICBtZXRob2QodGhpcy5jcmVhdGVMb2cobGV2ZWwsIG1zZywgc3RhY2spKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIExvZ3MgYSBtZXNzYWdlIGF0IHRoZSBzaWxseSBsZXZlbFxuICAgICAqIEBzdW1tYXJ5IExvZ3MgYSBtZXNzYWdlIGF0IHRoZSBzaWxseSBsZXZlbCBpZiB0aGUgY3VycmVudCB2ZXJib3NpdHkgc2V0dGluZyBhbGxvd3MgaXRcbiAgICAgKiBAcGFyYW0ge1N0cmluZ0xpa2V9IG1zZyAtIFRoZSBtZXNzYWdlIHRvIGJlIGxvZ2dlZFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbdmVyYm9zaXR5PTBdIC0gVGhlIHZlcmJvc2l0eSBsZXZlbCBvZiB0aGUgbWVzc2FnZVxuICAgICAqIEByZXR1cm4ge3ZvaWR9XG4gICAgICovXG4gICAgc2lsbHkobXNnLCB2ZXJib3NpdHkgPSAwKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbmZpZyhcInZlcmJvc2VcIikgPj0gdmVyYm9zaXR5KVxuICAgICAgICAgICAgdGhpcy5sb2coTG9nTGV2ZWwudmVyYm9zZSwgbXNnKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIExvZ3MgYSBtZXNzYWdlIGF0IHRoZSB2ZXJib3NlIGxldmVsXG4gICAgICogQHN1bW1hcnkgTG9ncyBhIG1lc3NhZ2UgYXQgdGhlIHZlcmJvc2UgbGV2ZWwgaWYgdGhlIGN1cnJlbnQgdmVyYm9zaXR5IHNldHRpbmcgYWxsb3dzIGl0XG4gICAgICogQHBhcmFtIHtTdHJpbmdMaWtlfSBtc2cgLSBUaGUgbWVzc2FnZSB0byBiZSBsb2dnZWRcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3ZlcmJvc2l0eT0wXSAtIFRoZSB2ZXJib3NpdHkgbGV2ZWwgb2YgdGhlIG1lc3NhZ2VcbiAgICAgKiBAcmV0dXJuIHt2b2lkfVxuICAgICAqL1xuICAgIHZlcmJvc2UobXNnLCB2ZXJib3NpdHkgPSAwKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbmZpZyhcInZlcmJvc2VcIikgPj0gdmVyYm9zaXR5KVxuICAgICAgICAgICAgdGhpcy5sb2coTG9nTGV2ZWwudmVyYm9zZSwgbXNnKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIExvZ3MgYSBtZXNzYWdlIGF0IHRoZSBpbmZvIGxldmVsXG4gICAgICogQHN1bW1hcnkgTG9ncyBhIG1lc3NhZ2UgYXQgdGhlIGluZm8gbGV2ZWwgZm9yIGdlbmVyYWwgYXBwbGljYXRpb24gaW5mb3JtYXRpb25cbiAgICAgKiBAcGFyYW0ge1N0cmluZ0xpa2V9IG1zZyAtIFRoZSBtZXNzYWdlIHRvIGJlIGxvZ2dlZFxuICAgICAqIEByZXR1cm4ge3ZvaWR9XG4gICAgICovXG4gICAgaW5mbyhtc2cpIHtcbiAgICAgICAgdGhpcy5sb2coTG9nTGV2ZWwuaW5mbywgbXNnKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIExvZ3MgYSBtZXNzYWdlIGF0IHRoZSBkZWJ1ZyBsZXZlbFxuICAgICAqIEBzdW1tYXJ5IExvZ3MgYSBtZXNzYWdlIGF0IHRoZSBkZWJ1ZyBsZXZlbCBmb3IgZGV0YWlsZWQgdHJvdWJsZXNob290aW5nIGluZm9ybWF0aW9uXG4gICAgICogQHBhcmFtIHtTdHJpbmdMaWtlfSBtc2cgLSBUaGUgbWVzc2FnZSB0byBiZSBsb2dnZWRcbiAgICAgKiBAcmV0dXJuIHt2b2lkfVxuICAgICAqL1xuICAgIGRlYnVnKG1zZykge1xuICAgICAgICB0aGlzLmxvZyhMb2dMZXZlbC5kZWJ1ZywgbXNnKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIExvZ3MgYSBtZXNzYWdlIGF0IHRoZSBlcnJvciBsZXZlbFxuICAgICAqIEBzdW1tYXJ5IExvZ3MgYSBtZXNzYWdlIGF0IHRoZSBlcnJvciBsZXZlbCBmb3IgZXJyb3JzIGFuZCBleGNlcHRpb25zXG4gICAgICogQHBhcmFtIHtTdHJpbmdMaWtlIHwgRXJyb3J9IG1zZyAtIFRoZSBtZXNzYWdlIHRvIGJlIGxvZ2dlZCBvciBhbiBFcnJvciBvYmplY3RcbiAgICAgKiBAcmV0dXJuIHt2b2lkfVxuICAgICAqL1xuICAgIGVycm9yKG1zZykge1xuICAgICAgICB0aGlzLmxvZyhMb2dMZXZlbC5lcnJvciwgbXNnKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFVwZGF0ZXMgdGhlIGxvZ2dlciBjb25maWd1cmF0aW9uXG4gICAgICogQHN1bW1hcnkgTWVyZ2VzIHRoZSBwcm92aWRlZCBjb25maWd1cmF0aW9uIHdpdGggdGhlIGV4aXN0aW5nIGNvbmZpZ3VyYXRpb25cbiAgICAgKiBAcGFyYW0ge1BhcnRpYWw8TG9nZ2luZ0NvbmZpZz59IGNvbmZpZyAtIFRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gYXBwbHlcbiAgICAgKiBAcmV0dXJuIHt2b2lkfVxuICAgICAqL1xuICAgIHNldENvbmZpZyhjb25maWcpIHtcbiAgICAgICAgdGhpcy5jb25mID0geyAuLi4odGhpcy5jb25mIHx8IHt9KSwgLi4uY29uZmlnIH07XG4gICAgfVxufVxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQSBzdGF0aWMgY2xhc3MgZm9yIG1hbmFnaW5nIGxvZ2dpbmcgb3BlcmF0aW9uc1xuICogQHN1bW1hcnkgVGhlIExvZ2dpbmcgY2xhc3MgcHJvdmlkZXMgYSBjZW50cmFsaXplZCBsb2dnaW5nIG1lY2hhbmlzbSB3aXRoIHN1cHBvcnQgZm9yXG4gKiBkaWZmZXJlbnQgbG9nIGxldmVscywgdmVyYm9zaXR5LCBhbmQgc3R5bGluZy4gSXQgdXNlcyBhIHNpbmdsZXRvbiBwYXR0ZXJuIHRvIG1haW50YWluIGEgZ2xvYmFsXG4gKiBsb2dnZXIgaW5zdGFuY2UgYW5kIGFsbG93cyBjcmVhdGluZyBzcGVjaWZpYyBsb2dnZXJzIGZvciBkaWZmZXJlbnQgY2xhc3NlcyBhbmQgbWV0aG9kcy5cbiAqIEBjbGFzcyBMb2dnaW5nXG4gKiBAZXhhbXBsZVxuICogLy8gU2V0IGdsb2JhbCBjb25maWd1cmF0aW9uXG4gKiBMb2dnaW5nLnNldENvbmZpZyh7IGxldmVsOiBMb2dMZXZlbC5kZWJ1Zywgc3R5bGU6IHRydWUgfSk7XG4gKlxuICogLy8gR2V0IGEgbG9nZ2VyIGZvciBhIHNwZWNpZmljIGNsYXNzXG4gKiBjb25zdCBsb2dnZXIgPSBMb2dnaW5nLmZvcignTXlDbGFzcycpO1xuICpcbiAqIC8vIExvZyBtZXNzYWdlcyBhdCBkaWZmZXJlbnQgbGV2ZWxzXG4gKiBsb2dnZXIuaW5mbygnQXBwbGljYXRpb24gc3RhcnRlZCcpO1xuICogbG9nZ2VyLmRlYnVnKCdQcm9jZXNzaW5nIGRhdGEuLi4nKTtcbiAqXG4gKiAvLyBMb2cgd2l0aCBjb250ZXh0XG4gKiBjb25zdCBtZXRob2RMb2dnZXIgPSBMb2dnaW5nLmZvcignTXlDbGFzcy5teU1ldGhvZCcpO1xuICogbWV0aG9kTG9nZ2VyLnZlcmJvc2UoJ0RldGFpbGVkIG9wZXJhdGlvbiBpbmZvcm1hdGlvbicsIDEpO1xuICpcbiAqIC8vIExvZyBlcnJvcnNcbiAqIHRyeSB7XG4gKiAgIC8vIHNvbWUgb3BlcmF0aW9uXG4gKiB9IGNhdGNoIChlcnJvcikge1xuICogICBsb2dnZXIuZXJyb3IoZXJyb3IpO1xuICogfVxuICogQG1lcm1haWRcbiAqIGNsYXNzRGlhZ3JhbVxuICogICBjbGFzcyBMb2dnZXIge1xuICogICAgIDw8aW50ZXJmYWNlPj5cbiAqICAgICArZm9yKG1ldGhvZCwgY29uZmlnLCAuLi5hcmdzKVxuICogICAgICtzaWxseShtc2csIHZlcmJvc2l0eSlcbiAqICAgICArdmVyYm9zZShtc2csIHZlcmJvc2l0eSlcbiAqICAgICAraW5mbyhtc2cpXG4gKiAgICAgK2RlYnVnKG1zZylcbiAqICAgICArZXJyb3IobXNnKVxuICogICAgICtzZXRDb25maWcoY29uZmlnKVxuICogICB9XG4gKlxuICogICBjbGFzcyBMb2dnaW5nIHtcbiAqICAgICAtZ2xvYmFsOiBMb2dnZXJcbiAqICAgICAtX2ZhY3Rvcnk6IExvZ2dlckZhY3RvcnlcbiAqICAgICAtX2NvbmZpZzogTG9nZ2luZ0NvbmZpZ1xuICogICAgICtzZXRGYWN0b3J5KGZhY3RvcnkpXG4gKiAgICAgK3NldENvbmZpZyhjb25maWcpXG4gKiAgICAgK2dldENvbmZpZygpXG4gKiAgICAgK2dldCgpXG4gKiAgICAgK3ZlcmJvc2UobXNnLCB2ZXJib3NpdHkpXG4gKiAgICAgK2luZm8obXNnKVxuICogICAgICtkZWJ1Zyhtc2cpXG4gKiAgICAgK3NpbGx5KG1zZylcbiAqICAgICArZXJyb3IobXNnKVxuICogICAgICtmb3Iob2JqZWN0LCBjb25maWcsIC4uLmFyZ3MpXG4gKiAgICAgK2JlY2F1c2UocmVhc29uLCBpZClcbiAqICAgICArdGhlbWUodGV4dCwgdHlwZSwgbG9nZ2VyTGV2ZWwsIHRlbXBsYXRlKVxuICogICB9XG4gKlxuICogICBjbGFzcyBNaW5pTG9nZ2VyIHtcbiAqICAgICArY29uc3RydWN0b3IoY29udGV4dCwgY29uZj8pXG4gKiAgIH1cbiAqXG4gKiAgIExvZ2dpbmcgLi4+IExvZ2dlciA6IGNyZWF0ZXNcbiAqICAgTG9nZ2luZyAuLj4gTWluaUxvZ2dlciA6IGNyZWF0ZXMgYnkgZGVmYXVsdFxuICovXG5leHBvcnQgY2xhc3MgTG9nZ2luZyB7XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEZhY3RvcnkgZnVuY3Rpb24gZm9yIGNyZWF0aW5nIGxvZ2dlciBpbnN0YW5jZXNcbiAgICAgKiBAc3VtbWFyeSBBIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBuZXcgTG9nZ2VyIGluc3RhbmNlcy4gQnkgZGVmYXVsdCwgaXQgY3JlYXRlcyBhIE1pbmlMb2dnZXIuXG4gICAgICovXG4gICAgc3RhdGljIHsgdGhpcy5fZmFjdG9yeSA9IChvYmplY3QsIGNvbmZpZykgPT4ge1xuICAgICAgICByZXR1cm4gbmV3IE1pbmlMb2dnZXIob2JqZWN0LCBjb25maWcpO1xuICAgIH07IH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29uZmlndXJhdGlvbiBmb3IgdGhlIGxvZ2dpbmcgc3lzdGVtXG4gICAgICogQHN1bW1hcnkgU3RvcmVzIHRoZSBnbG9iYWwgbG9nZ2luZyBjb25maWd1cmF0aW9uIGluY2x1ZGluZyB2ZXJib3NpdHksIGxvZyBsZXZlbCwgc3R5bGluZywgYW5kIGZvcm1hdHRpbmcgc2V0dGluZ3NcbiAgICAgKi9cbiAgICBzdGF0aWMgeyB0aGlzLl9jb25maWcgPSBEZWZhdWx0TG9nZ2luZ0NvbmZpZzsgfVxuICAgIGNvbnN0cnVjdG9yKCkgeyB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFNldHMgdGhlIGZhY3RvcnkgZnVuY3Rpb24gZm9yIGNyZWF0aW5nIGxvZ2dlciBpbnN0YW5jZXNcbiAgICAgKiBAc3VtbWFyeSBBbGxvd3MgY3VzdG9taXppbmcgaG93IGxvZ2dlciBpbnN0YW5jZXMgYXJlIGNyZWF0ZWRcbiAgICAgKiBAcGFyYW0ge0xvZ2dlckZhY3Rvcnl9IGZhY3RvcnkgLSBUaGUgZmFjdG9yeSBmdW5jdGlvbiB0byB1c2UgZm9yIGNyZWF0aW5nIGxvZ2dlcnNcbiAgICAgKiBAcmV0dXJuIHt2b2lkfVxuICAgICAqL1xuICAgIHN0YXRpYyBzZXRGYWN0b3J5KGZhY3RvcnkpIHtcbiAgICAgICAgTG9nZ2luZy5fZmFjdG9yeSA9IGZhY3Rvcnk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBVcGRhdGVzIHRoZSBnbG9iYWwgbG9nZ2luZyBjb25maWd1cmF0aW9uXG4gICAgICogQHN1bW1hcnkgQWxsb3dzIHVwZGF0aW5nIHRoZSBnbG9iYWwgbG9nZ2luZyBjb25maWd1cmF0aW9uIHdpdGggbmV3IHNldHRpbmdzXG4gICAgICogQHBhcmFtIHtQYXJ0aWFsPExvZ2dpbmdDb25maWc+fSBjb25maWcgLSBUaGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIGFwcGx5XG4gICAgICogQHJldHVybiB7dm9pZH1cbiAgICAgKi9cbiAgICBzdGF0aWMgc2V0Q29uZmlnKGNvbmZpZykge1xuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMuX2NvbmZpZywgY29uZmlnKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEdldHMgYSBjb3B5IG9mIHRoZSBjdXJyZW50IGdsb2JhbCBsb2dnaW5nIGNvbmZpZ3VyYXRpb25cbiAgICAgKiBAc3VtbWFyeSBSZXR1cm5zIGEgY29weSBvZiB0aGUgY3VycmVudCBnbG9iYWwgbG9nZ2luZyBjb25maWd1cmF0aW9uXG4gICAgICogQHJldHVybiB7TG9nZ2luZ0NvbmZpZ30gQSBjb3B5IG9mIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb25cbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0Q29uZmlnKCkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5fY29uZmlnKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHJpZXZlcyBvciBjcmVhdGVzIHRoZSBnbG9iYWwgbG9nZ2VyIGluc3RhbmNlLlxuICAgICAqIEBzdW1tYXJ5IFJldHVybnMgdGhlIGV4aXN0aW5nIGdsb2JhbCBsb2dnZXIgb3IgY3JlYXRlcyBhIG5ldyBvbmUgaWYgaXQgZG9lc24ndCBleGlzdC5cbiAgICAgKlxuICAgICAqIEByZXR1cm4gVGhlIGdsb2JhbCBWZXJib3NpdHlMb2dnZXIgaW5zdGFuY2UuXG4gICAgICovXG4gICAgc3RhdGljIGdldCgpIHtcbiAgICAgICAgdGhpcy5nbG9iYWwgPSB0aGlzLmdsb2JhbCA/IHRoaXMuZ2xvYmFsIDogdGhpcy5fZmFjdG9yeShcIkxvZ2dpbmdcIik7XG4gICAgICAgIHJldHVybiB0aGlzLmdsb2JhbDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIExvZ3MgYSB2ZXJib3NlIG1lc3NhZ2UuXG4gICAgICogQHN1bW1hcnkgRGVsZWdhdGVzIHRoZSB2ZXJib3NlIGxvZ2dpbmcgdG8gdGhlIGdsb2JhbCBsb2dnZXIgaW5zdGFuY2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbXNnIC0gVGhlIG1lc3NhZ2UgdG8gYmUgbG9nZ2VkLlxuICAgICAqIEBwYXJhbSB2ZXJib3NpdHkgLSBUaGUgdmVyYm9zaXR5IGxldmVsIG9mIHRoZSBtZXNzYWdlIChkZWZhdWx0OiAwKS5cbiAgICAgKi9cbiAgICBzdGF0aWMgdmVyYm9zZShtc2csIHZlcmJvc2l0eSA9IDApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KCkudmVyYm9zZShtc2csIHZlcmJvc2l0eSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBMb2dzIGFuIGluZm8gbWVzc2FnZS5cbiAgICAgKiBAc3VtbWFyeSBEZWxlZ2F0ZXMgdGhlIGluZm8gbG9nZ2luZyB0byB0aGUgZ2xvYmFsIGxvZ2dlciBpbnN0YW5jZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBtc2cgLSBUaGUgbWVzc2FnZSB0byBiZSBsb2dnZWQuXG4gICAgICovXG4gICAgc3RhdGljIGluZm8obXNnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldCgpLmluZm8obXNnKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIExvZ3MgYSBkZWJ1ZyBtZXNzYWdlLlxuICAgICAqIEBzdW1tYXJ5IERlbGVnYXRlcyB0aGUgZGVidWcgbG9nZ2luZyB0byB0aGUgZ2xvYmFsIGxvZ2dlciBpbnN0YW5jZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBtc2cgLSBUaGUgbWVzc2FnZSB0byBiZSBsb2dnZWQuXG4gICAgICovXG4gICAgc3RhdGljIGRlYnVnKG1zZykge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXQoKS5kZWJ1Zyhtc2cpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gTG9ncyBhIHNpbGx5IG1lc3NhZ2UuXG4gICAgICogQHN1bW1hcnkgRGVsZWdhdGVzIHRoZSBkZWJ1ZyBsb2dnaW5nIHRvIHRoZSBnbG9iYWwgbG9nZ2VyIGluc3RhbmNlLlxuICAgICAqXG4gICAgICogQHBhcmFtIG1zZyAtIFRoZSBtZXNzYWdlIHRvIGJlIGxvZ2dlZC5cbiAgICAgKi9cbiAgICBzdGF0aWMgc2lsbHkobXNnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldCgpLnNpbGx5KG1zZyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBMb2dzIGFuIGVycm9yIG1lc3NhZ2UuXG4gICAgICogQHN1bW1hcnkgRGVsZWdhdGVzIHRoZSBlcnJvciBsb2dnaW5nIHRvIHRoZSBnbG9iYWwgbG9nZ2VyIGluc3RhbmNlLlxuICAgICAqXG4gICAgICogQHBhcmFtIG1zZyAtIFRoZSBtZXNzYWdlIHRvIGJlIGxvZ2dlZC5cbiAgICAgKi9cbiAgICBzdGF0aWMgZXJyb3IobXNnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldCgpLmVycm9yKG1zZyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDcmVhdGVzIGEgbG9nZ2VyIGZvciBhIHNwZWNpZmljIG9iamVjdCBvciBjb250ZXh0XG4gICAgICogQHN1bW1hcnkgQ3JlYXRlcyBhIG5ldyBsb2dnZXIgaW5zdGFuY2UgZm9yIHRoZSBnaXZlbiBvYmplY3Qgb3IgY29udGV4dCB1c2luZyB0aGUgZmFjdG9yeSBmdW5jdGlvblxuICAgICAqIEBwYXJhbSB7TG9nZ2luZ0NvbnRleHR9IG9iamVjdCAtIFRoZSBvYmplY3QsIGNsYXNzLCBvciBjb250ZXh0IHRvIGNyZWF0ZSBhIGxvZ2dlciBmb3JcbiAgICAgKiBAcGFyYW0ge1BhcnRpYWw8TG9nZ2luZ0NvbmZpZz59IFtjb25maWddIC0gT3B0aW9uYWwgY29uZmlndXJhdGlvbiB0byBvdmVycmlkZSBnbG9iYWwgc2V0dGluZ3NcbiAgICAgKiBAcGFyYW0gey4uLmFueX0gYXJncyAtIEFkZGl0aW9uYWwgYXJndW1lbnRzIHRvIHBhc3MgdG8gdGhlIGxvZ2dlciBmYWN0b3J5XG4gICAgICogQHJldHVybiB7TG9nZ2VyfSBBIG5ldyBsb2dnZXIgaW5zdGFuY2UgZm9yIHRoZSBzcGVjaWZpZWQgb2JqZWN0IG9yIGNvbnRleHRcbiAgICAgKi9cbiAgICBzdGF0aWMgZm9yKG9iamVjdCwgY29uZmlnLCAuLi5hcmdzKSB7XG4gICAgICAgIG9iamVjdCA9XG4gICAgICAgICAgICB0eXBlb2Ygb2JqZWN0ID09PSBcInN0cmluZ1wiXG4gICAgICAgICAgICAgICAgPyBvYmplY3RcbiAgICAgICAgICAgICAgICA6IG9iamVjdC5jb25zdHJ1Y3RvclxuICAgICAgICAgICAgICAgICAgICA/IG9iamVjdC5jb25zdHJ1Y3Rvci5uYW1lXG4gICAgICAgICAgICAgICAgICAgIDogb2JqZWN0Lm5hbWU7XG4gICAgICAgIHJldHVybiB0aGlzLl9mYWN0b3J5KG9iamVjdCwgY29uZmlnLCAuLi5hcmdzKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENyZWF0ZXMgYSBsb2dnZXIgZm9yIGEgc3BlY2lmaWMgcmVhc29uIG9yIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAc3VtbWFyeSBUaGlzIHN0YXRpYyBtZXRob2QgY3JlYXRlcyBhIG5ldyBsb2dnZXIgaW5zdGFuY2UgdXNpbmcgdGhlIGZhY3RvcnkgZnVuY3Rpb24sXG4gICAgICogYmFzZWQgb24gYSBnaXZlbiByZWFzb24gb3IgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSByZWFzb24gLSBBIHN0cmluZyBkZXNjcmliaW5nIHRoZSByZWFzb24gb3IgY29udGV4dCBmb3IgY3JlYXRpbmcgdGhpcyBsb2dnZXIuXG4gICAgICogQHBhcmFtIGlkXG4gICAgICogQHJldHVybnMgQSBuZXcgVmVyYm9zaXR5TG9nZ2VyIG9yIENsYXNzTG9nZ2VyIGluc3RhbmNlLlxuICAgICAqL1xuICAgIHN0YXRpYyBiZWNhdXNlKHJlYXNvbiwgaWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZhY3RvcnkocmVhc29uLCB0aGlzLl9jb25maWcsIGlkKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEFwcGxpZXMgdGhlbWUgc3R5bGluZyB0byB0ZXh0XG4gICAgICogQHN1bW1hcnkgQXBwbGllcyBzdHlsaW5nIChjb2xvcnMsIGZvcm1hdHRpbmcpIHRvIHRleHQgYmFzZWQgb24gdGhlIHRoZW1lIGNvbmZpZ3VyYXRpb25cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIFRoZSB0ZXh0IHRvIHN0eWxlXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgLSBUaGUgdHlwZSBvZiBlbGVtZW50IHRvIHN0eWxlIChlLmcuLCBcImNsYXNzXCIsIFwibWVzc2FnZVwiLCBcImxvZ0xldmVsXCIpXG4gICAgICogQHBhcmFtIHtMb2dMZXZlbH0gbG9nZ2VyTGV2ZWwgLSBUaGUgbG9nIGxldmVsIHRvIHVzZSBmb3Igc3R5bGluZ1xuICAgICAqIEBwYXJhbSB7VGhlbWV9IFt0ZW1wbGF0ZT1EZWZhdWx0VGhlbWVdIC0gVGhlIHRoZW1lIHRvIHVzZSBmb3Igc3R5bGluZ1xuICAgICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIHN0eWxlZCB0ZXh0XG4gICAgICogQG1lcm1haWRcbiAgICAgKiBzZXF1ZW5jZURpYWdyYW1cbiAgICAgKiAgIHBhcnRpY2lwYW50IENhbGxlclxuICAgICAqICAgcGFydGljaXBhbnQgVGhlbWUgYXMgTG9nZ2luZy50aGVtZVxuICAgICAqICAgcGFydGljaXBhbnQgQXBwbHkgYXMgYXBwbHkgZnVuY3Rpb25cbiAgICAgKiAgIHBhcnRpY2lwYW50IFN0eWxlIGFzIHN0eWxlZC1zdHJpbmctYnVpbGRlclxuICAgICAqXG4gICAgICogICBDYWxsZXItPj5UaGVtZTogdGhlbWUodGV4dCwgdHlwZSwgbG9nZ2VyTGV2ZWwpXG4gICAgICogICBUaGVtZS0+PlRoZW1lOiBDaGVjayBpZiBzdHlsaW5nIGlzIGVuYWJsZWRcbiAgICAgKiAgIGFsdCBzdHlsaW5nIGRpc2FibGVkXG4gICAgICogICAgIFRoZW1lLS0+PkNhbGxlcjogcmV0dXJuIG9yaWdpbmFsIHRleHRcbiAgICAgKiAgIGVsc2Ugc3R5bGluZyBlbmFibGVkXG4gICAgICogICAgIFRoZW1lLT4+VGhlbWU6IEdldCB0aGVtZSBmb3IgdHlwZVxuICAgICAqICAgICBhbHQgdGhlbWUgbm90IGZvdW5kXG4gICAgICogICAgICAgVGhlbWUtLT4+Q2FsbGVyOiByZXR1cm4gb3JpZ2luYWwgdGV4dFxuICAgICAqICAgICBlbHNlIHRoZW1lIGZvdW5kXG4gICAgICogICAgICAgVGhlbWUtPj5UaGVtZTogRGV0ZXJtaW5lIGFjdHVhbCB0aGVtZSBiYXNlZCBvbiBsb2cgbGV2ZWxcbiAgICAgKiAgICAgICBUaGVtZS0+PkFwcGx5OiBBcHBseSBlYWNoIHN0eWxlIHByb3BlcnR5XG4gICAgICogICAgICAgQXBwbHktPj5TdHlsZTogQXBwbHkgY29sb3JzIGFuZCBmb3JtYXR0aW5nXG4gICAgICogICAgICAgU3R5bGUtLT4+QXBwbHk6IFJldHVybiBzdHlsZWQgdGV4dFxuICAgICAqICAgICAgIEFwcGx5LS0+PlRoZW1lOiBSZXR1cm4gc3R5bGVkIHRleHRcbiAgICAgKiAgICAgICBUaGVtZS0tPj5DYWxsZXI6IFJldHVybiBmaW5hbCBzdHlsZWQgdGV4dFxuICAgICAqICAgICBlbmRcbiAgICAgKiAgIGVuZFxuICAgICAqL1xuICAgIHN0YXRpYyB0aGVtZSh0ZXh0LCB0eXBlLCBsb2dnZXJMZXZlbCwgdGVtcGxhdGUgPSBEZWZhdWx0VGhlbWUpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9jb25maWcuc3R5bGUpXG4gICAgICAgICAgICByZXR1cm4gdGV4dDtcbiAgICAgICAgY29uc3QgbG9nZ2VyID0gTG9nZ2luZy5nZXQoKS5mb3IodGhpcy50aGVtZSk7XG4gICAgICAgIGZ1bmN0aW9uIGFwcGx5KHR4dCwgb3B0aW9uLCB2YWx1ZSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCB0ID0gdHh0O1xuICAgICAgICAgICAgICAgIGxldCBjID0gc3R5bGUodCk7XG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gYXBwbHlDb2xvcih2YWwsIGlzQmcgPSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZiA9IGlzQmcgPyBjLmJhY2tncm91bmQgOiBjLmZvcmVncm91bmQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZi5jYWxsKGMsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHZhbC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmID0gaXNCZyA/IGMuYmdDb2xvcjI1NiA6IGMuY29sb3IyNTY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGYodmFsWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmID0gaXNCZyA/IGMuYmdSZ2IgOiBjLnJnYjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYy5yZ2IodmFsWzBdLCB2YWxbMV0sIHZhbFsyXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihgTm90IGEgdmFsaWQgY29sb3Igb3B0aW9uOiAke29wdGlvbn1gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3R5bGUodCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gYXBwbHlTdHlsZSh2KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdiA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgYyA9IGMuc3R5bGUodik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjID0gY1t2XTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzd2l0Y2ggKG9wdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiYmdcIjpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcImZnXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXBwbHlDb2xvcih2YWx1ZSkudGV4dDtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcInN0eWxlXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS5mb3JFYWNoKGFwcGx5U3R5bGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwbHlTdHlsZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYy50ZXh0O1xuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKGBOb3QgYSB2YWxpZCB0aGVtZSBvcHRpb246ICR7b3B0aW9ufWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKGBFcnJvciBhcHBseWluZyBzdHlsZTogJHtvcHRpb259IHdpdGggdmFsdWUgJHt2YWx1ZX1gKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHh0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGluZGl2aWR1YWxUaGVtZSA9IHRlbXBsYXRlW3R5cGVdO1xuICAgICAgICBpZiAoIWluZGl2aWR1YWxUaGVtZSB8fCAhT2JqZWN0LmtleXMoaW5kaXZpZHVhbFRoZW1lKS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiB0ZXh0O1xuICAgICAgICB9XG4gICAgICAgIGxldCBhY3R1YWxUaGVtZSA9IGluZGl2aWR1YWxUaGVtZTtcbiAgICAgICAgY29uc3QgbG9nTGV2ZWxzID0gT2JqZWN0LmFzc2lnbih7fSwgTG9nTGV2ZWwpO1xuICAgICAgICBpZiAoT2JqZWN0LmtleXMoaW5kaXZpZHVhbFRoZW1lKVswXSBpbiBsb2dMZXZlbHMpXG4gICAgICAgICAgICBhY3R1YWxUaGVtZSA9XG4gICAgICAgICAgICAgICAgaW5kaXZpZHVhbFRoZW1lW2xvZ2dlckxldmVsXSB8fCB7fTtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKGFjdHVhbFRoZW1lKS5yZWR1Y2UoKGFjYywga2V5KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YWwgPSBhY3R1YWxUaGVtZVtrZXldO1xuICAgICAgICAgICAgaWYgKHZhbClcbiAgICAgICAgICAgICAgICByZXR1cm4gYXBwbHkoYWNjLCBrZXksIHZhbCk7XG4gICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICB9LCB0ZXh0KTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2liRzluWjJsdVp5NXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMM055WXk5c2IyZG5hVzVuTG5SeklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lKQlFWVkJMRTlCUVU4c1JVRkJiVUlzUzBGQlN5eEZRVUZuUWl4TlFVRk5MSFZDUVVGMVFpeERRVUZETzBGQlF6ZEZMRTlCUVU4c1JVRkRUQ3h2UWtGQmIwSXNSVUZEY0VJc1dVRkJXU3hGUVVOYUxGRkJRVkVzUlVGRFVpeG5Ra0ZCWjBJc1IwRkRha0lzVFVGQlRTeGhRVUZoTEVOQlFVTTdRVUZGY2tJN096czdPenM3T3pzN096czdPenM3T3pzN096czdPMGRCZFVKSE8wRkJRMGdzVFVGQlRTeFBRVUZQTEZWQlFWVTdTVUZEY2tJc1dVRkRXU3hQUVVGbExFVkJRMllzU1VGQk5rSTdVVUZFTjBJc1dVRkJUeXhIUVVGUUxFOUJRVThzUTBGQlVUdFJRVU5tTEZOQlFVa3NSMEZCU2l4SlFVRkpMRU5CUVhsQ08wbEJRM1JETEVOQlFVTTdTVUZGVFN4TlFVRk5MRU5CUTJRc1IwRkJkMEk3VVVGRmVFSXNTVUZCU1N4SlFVRkpMRU5CUVVNc1NVRkJTU3hKUVVGSkxFZEJRVWNzU1VGQlNTeEpRVUZKTEVOQlFVTXNTVUZCU1R0WlFVRkZMRTlCUVU4c1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0UlFVTjZSQ3hQUVVGUExFOUJRVThzUTBGQlF5eFRRVUZUTEVWQlFVVXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRKUVVOc1F5eERRVUZETzBsQlJVUTdPenM3T3pzN1QwRlBSenRKUVVOSUxFZEJRVWNzUTBGRFJDeE5RVUV5UXl4RlFVTXpReXhOUVVFclFqdFJRVVV2UWl4TlFVRk5MRWRCUVVjc1RVRkJUVHRaUVVOaUxFTkJRVU1zUTBGQlF5eFBRVUZQTEUxQlFVMHNTMEZCU3l4UlFVRlJPMmRDUVVNeFFpeERRVUZETEVOQlFVTXNUVUZCVFR0blFrRkRVaXhEUVVGRExFTkJRVU1zVFVGQlRTeERRVUZETEVsQlFVazdXVUZEWml4RFFVRkRMRU5CUVVNc1UwRkJVeXhEUVVGRE8xRkJSV1FzVDBGQlR5eEpRVUZKTEV0QlFVc3NRMEZCUXl4SlFVRkpMRVZCUVVVN1dVRkRja0lzUjBGQlJ5eEZRVUZGTEVOQlFVTXNUVUZCYlVJc1JVRkJSU3hEUVVGclFpeEZRVUZGTEZGQlFXRXNSVUZCUlN4RlFVRkZPMmRDUVVNNVJDeE5RVUZOTEUxQlFVMHNSMEZCUnl4UFFVRlBMRU5CUVVNc1IwRkJSeXhEUVVGRExFMUJRVTBzUlVGQlJTeERRVUZETEVWQlFVVXNVVUZCVVN4RFFVRkRMRU5CUVVNN1owSkJRMmhFTEVsQlFVa3NRMEZCUXl4TFFVRkxMRkZCUVZFc1JVRkJSU3hEUVVGRE8yOUNRVU51UWl4UFFVRlBMRWxCUVVrc1MwRkJTeXhEUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVWQlFVVTdkMEpCUXpWQ0xFZEJRVWNzUlVGQlJTeERRVUZETEUxQlFUQkNMRVZCUVVVc1EwRkJhMElzUlVGQlJTeEZRVUZGT3pSQ1FVTjBSQ3hKUVVGSkxFMUJRVTBzU1VGQlNTeERRVUZETEVsQlFVa3NUVUZCVFR0blEwRkRka0lzVDBGQlR5eE5RVUZOTEVOQlFVTXNRMEZCZDBJc1EwRkJReXhEUVVGRE96UkNRVU14UXl4UFFVRlBMRTlCUVU4c1EwRkJReXhIUVVGSExFTkJRVU1zVFVGQlRTeEZRVUZGTEVOQlFVTXNSVUZCUlN4UlFVRlJMRU5CUVVNc1EwRkJRenQzUWtGRE1VTXNRMEZCUXp0eFFrRkRSaXhEUVVGRExFTkJRVU03WjBKQlEwd3NRMEZCUXp0blFrRkRSQ3hKUVVGSkxFTkJRVU1zUzBGQlN5eFRRVUZUTEVWQlFVVXNRMEZCUXp0dlFrRkRjRUlzVDBGQlR5eERRVUZETEUxQlFVMHNSVUZCUlN4TlFVRk5MRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdaMEpCUTNCRExFTkJRVU03WjBKQlEwUXNUMEZCVHl4TlFVRk5MRU5CUVVNN1dVRkRhRUlzUTBGQlF6dFRRVU5HTEVOQlFVTXNRMEZCUXp0SlFVTk1MRU5CUVVNN1NVRkZSRHM3T3pzN096dFBRVTlITzBsQlEwOHNVMEZCVXl4RFFVTnFRaXhMUVVGbExFVkJRMllzVDBGQk1rSXNSVUZETTBJc1MwRkJZenRSUVVWa0xFMUJRVTBzUjBGQlJ5eEhRVUZoTEVWQlFVVXNRMEZCUXp0UlFVTjZRaXhOUVVGTkxFdEJRVXNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRE8xRkJRMjVETEVsQlFVa3NTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhYUVVGWExFTkJRVU1zUlVGQlJTeERRVUZETzFsQlF6ZENMRTFCUVUwc1NVRkJTU3hIUVVGSExFbEJRVWtzU1VGQlNTeEZRVUZGTEVOQlFVTXNWMEZCVnl4RlFVRkZMRU5CUVVNN1dVRkRkRU1zVFVGQlRTeFRRVUZUTEVkQlFVY3NTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhQUVVGUExFTkJRVU1zUzBGQlN5eERRVUZETEVsQlFVa3NSVUZCUlN4WFFVRlhMRVZCUVVVc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXp0WlFVTjZSU3hIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEZOQlFWTXNRMEZCUXl4RFFVRkRPMUZCUTNSQ0xFTkJRVU03VVVGRlJDeEpRVUZKTEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1ZVRkJWU3hEUVVGRExFVkJRVVVzUTBGQlF6dFpRVU0xUWl4TlFVRk5MRWRCUVVjc1IwRkJWeXhMUVVGTE8yZENRVU4yUWl4RFFVRkRMRU5CUVVNc1QwRkJUeXhEUVVGRExFdEJRVXNzUTBGQlF5eExRVUZMTEVWQlFVVXNWVUZCVlN4RlFVRkZMRXRCUVVzc1EwRkJRenRuUWtGRGVrTXNRMEZCUXl4RFFVRkRMRXRCUVVzc1EwRkJRenRaUVVOV0xFZEJRVWNzUTBGQlF5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1VVRkRhRUlzUTBGQlF6dFJRVVZFTEVsQlFVa3NTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhUUVVGVExFTkJRVU1zUlVGQlJTeERRVUZETzFsQlF6TkNMRTFCUVUwc1QwRkJUeXhIUVVGWExFdEJRVXM3WjBKQlF6TkNMRU5CUVVNc1EwRkJReXhQUVVGUExFTkJRVU1zUzBGQlN5eERRVUZETEVsQlFVa3NRMEZCUXl4UFFVRlBMRVZCUVVVc1QwRkJUeXhGUVVGRkxFdEJRVXNzUTBGQlF6dG5Ra0ZETjBNc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTTdXVUZEYWtJc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXp0UlFVTndRaXhEUVVGRE8xRkJSVVFzU1VGQlNTeEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMR1ZCUVdVc1EwRkJReXhGUVVGRkxFTkJRVU03V1VGRGFrTXNRMEZCUXp0blFrRkRReXhOUVVGTkxFVkJRVVVzUjBGQlZ5eExRVUZMTzI5Q1FVTjBRaXhEUVVGRExFTkJRVU1zVDBGQlR5eERRVUZETEV0QlFVc3NRMEZCUXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExHVkJRV1VzUTBGQlJTeERRVUZETEZGQlFWRXNSVUZCUlN4RlFVRkZMRWxCUVVrc1JVRkJSU3hMUVVGTExFTkJRVU03YjBKQlEzUkZMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEdWQlFXVXNRMEZCUlN4RFFVRkRMRkZCUVZFc1JVRkJSU3hEUVVGRE8yZENRVU0zUXl4SFFVRkhMRU5CUVVNc1NVRkJTU3hEUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETzFsQlEyWXNRMEZCUXp0UlFVTklMRU5CUVVNN1VVRkZSQ3hOUVVGTkxFZEJRVWNzUjBGQlZ5eExRVUZMTzFsQlEzWkNMRU5CUVVNc1EwRkJReXhQUVVGUExFTkJRVU1zUzBGQlN5eERRVU5ZTEU5QlFVOHNUMEZCVHl4TFFVRkxMRkZCUVZFc1EwRkJReXhEUVVGRExFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTXNRMEZCUlN4UFFVRnBRaXhEUVVGRExFOUJRVThzUlVGRGJFVXNVMEZCVXl4RlFVTlVMRXRCUVVzc1EwRkRUanRaUVVOSUxFTkJRVU1zUTBGQlF5eFBRVUZQTEU5QlFVOHNTMEZCU3l4UlFVRlJPMmRDUVVNelFpeERRVUZETEVOQlFVTXNUMEZCVHp0blFrRkRWQ3hEUVVGRExFTkJRVVVzVDBGQmFVSXNRMEZCUXl4UFFVRlBMRU5CUVVNN1VVRkRha01zUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRSUVVOa0xFbEJRVWtzUzBGQlN5eEpRVUZKTEU5QlFVOHNXVUZCV1N4TFFVRkxMRVZCUVVVc1EwRkJRenRaUVVOMFF5eExRVUZMTEVkQlFVY3NTMEZCU3p0blFrRkRXQ3hEUVVGRExFTkJRVU1zVDBGQlR5eERRVUZETEV0QlFVc3NRMEZEV0N4RFFVRkRMRXRCUVVzc1NVRkJTeXhQUVVGcFFpeERRVUZETEV0QlFVc3NRMEZCVnl4RlFVTTNReXhQUVVGUExFVkJRMUFzUzBGQlN5eERRVU5PTzJkQ1FVTklMRU5CUVVNc1EwRkJReXhMUVVGTExFTkJRVU03V1VGRFZpeEhRVUZITEVOQlFVTXNTVUZCU1N4RFFVRkRMRzFDUVVGdFFpeExRVUZMTEVWQlFVVXNRMEZCUXl4RFFVRkRPMUZCUTNaRExFTkJRVU03VVVGRlJDeFBRVUZQTEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eFhRVUZYTEVOQlFWY3NRMEZCUXl4RFFVRkRPMGxCUTNSRUxFTkJRVU03U1VGRlJEczdPenM3T3pzN1QwRlJSenRKUVVOUExFZEJRVWNzUTBGRFdDeExRVUZsTEVWQlEyWXNSMEZCZFVJc1JVRkRka0lzUzBGQll6dFJRVVZrTEVsQlEwVXNaMEpCUVdkQ0xFTkJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4UFFVRlBMRU5CUVdFc1EwRkJRenRaUVVOc1JDeG5Ra0ZCWjBJc1EwRkJReXhMUVVGTExFTkJRVU03V1VGRmRrSXNUMEZCVHp0UlFVTlVMRWxCUVVrc1RVRkJUU3hEUVVGRE8xRkJRMWdzVVVGQlVTeExRVUZMTEVWQlFVVXNRMEZCUXp0WlFVTmtMRXRCUVVzc1VVRkJVU3hEUVVGRExFbEJRVWs3WjBKQlEyaENMRTFCUVUwc1IwRkJSeXhQUVVGUExFTkJRVU1zUjBGQlJ5eERRVUZETzJkQ1FVTnlRaXhOUVVGTk8xbEJRMUlzUzBGQlN5eFJRVUZSTEVOQlFVTXNUMEZCVHl4RFFVRkRPMWxCUTNSQ0xFdEJRVXNzVVVGQlVTeERRVUZETEV0QlFVczdaMEpCUTJwQ0xFMUJRVTBzUjBGQlJ5eFBRVUZQTEVOQlFVTXNTMEZCU3l4RFFVRkRPMmRDUVVOMlFpeE5RVUZOTzFsQlExSXNTMEZCU3l4UlFVRlJMRU5CUVVNc1MwRkJTenRuUWtGRGFrSXNUVUZCVFN4SFFVRkhMRTlCUVU4c1EwRkJReXhMUVVGTExFTkJRVU03WjBKQlEzWkNMRTFCUVUwN1dVRkRVanRuUWtGRFJTeE5RVUZOTEVsQlFVa3NTMEZCU3l4RFFVRkRMRzFDUVVGdFFpeERRVUZETEVOQlFVTTdVVUZEZWtNc1EwRkJRenRSUVVORUxFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTXNVMEZCVXl4RFFVRkRMRXRCUVVzc1JVRkJSU3hIUVVGSExFVkJRVVVzUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXp0SlFVTTFReXhEUVVGRE8wbEJSVVE3T3pzN096dFBRVTFITzBsQlEwZ3NTMEZCU3l4RFFVRkRMRWRCUVdVc1JVRkJSU3haUVVGdlFpeERRVUZETzFGQlF6RkRMRWxCUVVzc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eFRRVUZUTEVOQlFWa3NTVUZCU1N4VFFVRlRPMWxCUTJwRUxFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNVVUZCVVN4RFFVRkRMRTlCUVU4c1JVRkJSU3hIUVVGSExFTkJRVU1zUTBGQlF6dEpRVU53UXl4RFFVRkRPMGxCUlVRN096czdPenRQUVUxSE8wbEJRMGdzVDBGQlR5eERRVUZETEVkQlFXVXNSVUZCUlN4WlFVRnZRaXhEUVVGRE8xRkJRelZETEVsQlFVc3NTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhUUVVGVExFTkJRVmtzU1VGQlNTeFRRVUZUTzFsQlEycEVMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zVVVGQlVTeERRVUZETEU5QlFVOHNSVUZCUlN4SFFVRkhMRU5CUVVNc1EwRkJRenRKUVVOd1F5eERRVUZETzBsQlJVUTdPenM3TzA5QlMwYzdTVUZEU0N4SlFVRkpMRU5CUVVNc1IwRkJaVHRSUVVOc1FpeEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRkZCUVZFc1EwRkJReXhKUVVGSkxFVkJRVVVzUjBGQlJ5eERRVUZETEVOQlFVTTdTVUZETDBJc1EwRkJRenRKUVVWRU96czdPenRQUVV0SE8wbEJRMGdzUzBGQlN5eERRVUZETEVkQlFXVTdVVUZEYmtJc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eFJRVUZSTEVOQlFVTXNTMEZCU3l4RlFVRkZMRWRCUVVjc1EwRkJReXhEUVVGRE8wbEJRMmhETEVOQlFVTTdTVUZGUkRzN096czdUMEZMUnp0SlFVTklMRXRCUVVzc1EwRkJReXhIUVVGMVFqdFJRVU16UWl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExGRkJRVkVzUTBGQlF5eExRVUZMTEVWQlFVVXNSMEZCUnl4RFFVRkRMRU5CUVVNN1NVRkRhRU1zUTBGQlF6dEpRVVZFT3pzN096dFBRVXRITzBsQlEwZ3NVMEZCVXl4RFFVRkRMRTFCUVRoQ08xRkJRM1JETEVsQlFVa3NRMEZCUXl4SlFVRkpMRWRCUVVjc1JVRkJSU3hIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NTVUZCU1N4RlFVRkZMRU5CUVVNc1JVRkJSU3hIUVVGSExFMUJRVTBzUlVGQlJTeERRVUZETzBsQlEyeEVMRU5CUVVNN1EwRkRSanRCUVVWRU96czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN08wZEJaMFZITzBGQlEwZ3NUVUZCVFN4UFFVRlBMRTlCUVU4N1NVRlBiRUk3T3p0UFFVZEhPMkZCUTFrc1lVRkJVU3hIUVVGclFpeERRVU4yUXl4TlFVRmpMRVZCUTJRc1RVRkJLMElzUlVGREwwSXNSVUZCUlR0UlFVTkdMRTlCUVU4c1NVRkJTU3hWUVVGVkxFTkJRVU1zVFVGQlRTeEZRVUZGTEUxQlFVMHNRMEZCUXl4RFFVRkRPMGxCUTNoRExFTkJRVU1zUTBGQlF6dEpRVU5HT3pzN1QwRkhSenRoUVVOWkxGbEJRVThzUjBGQmEwSXNiMEpCUVc5Q0xFTkJRVU03U1VGRk4wUXNaMEpCUVhWQ0xFTkJRVU03U1VGRmVFSTdPenM3TzA5QlMwYzdTVUZEU0N4TlFVRk5MRU5CUVVNc1ZVRkJWU3hEUVVGRExFOUJRWE5DTzFGQlEzUkRMRTlCUVU4c1EwRkJReXhSUVVGUkxFZEJRVWNzVDBGQlR5eERRVUZETzBsQlF6ZENMRU5CUVVNN1NVRkZSRHM3T3pzN1QwRkxSenRKUVVOSUxFMUJRVTBzUTBGQlF5eFRRVUZUTEVOQlFVTXNUVUZCT0VJN1VVRkROME1zVFVGQlRTeERRVUZETEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1QwRkJUeXhGUVVGRkxFMUJRVTBzUTBGQlF5eERRVUZETzBsQlEzUkRMRU5CUVVNN1NVRkZSRHM3T3p0UFFVbEhPMGxCUTBnc1RVRkJUU3hEUVVGRExGTkJRVk03VVVGRFpDeFBRVUZQTEUxQlFVMHNRMEZCUXl4TlFVRk5MRU5CUVVNc1JVRkJSU3hGUVVGRkxFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXp0SlFVTjZReXhEUVVGRE8wbEJSVVE3T3pzN08wOUJTMGM3U1VGRFNDeE5RVUZOTEVOQlFVTXNSMEZCUnp0UlFVTlNMRWxCUVVrc1EwRkJReXhOUVVGTkxFZEJRVWNzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhUUVVGVExFTkJRVU1zUTBGQlF6dFJRVU51UlN4UFFVRlBMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU03U1VGRGNrSXNRMEZCUXp0SlFVVkVPenM3T3pzN1QwRk5SenRKUVVOSUxFMUJRVTBzUTBGQlF5eFBRVUZQTEVOQlFVTXNSMEZCWlN4RlFVRkZMRmxCUVc5Q0xFTkJRVU03VVVGRGJrUXNUMEZCVHl4SlFVRkpMRU5CUVVNc1IwRkJSeXhGUVVGRkxFTkJRVU1zVDBGQlR5eERRVUZETEVkQlFVY3NSVUZCUlN4VFFVRlRMRU5CUVVNc1EwRkJRenRKUVVNMVF5eERRVUZETzBsQlJVUTdPenM3TzA5QlMwYzdTVUZEU0N4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExFZEJRV1U3VVVGRGVrSXNUMEZCVHl4SlFVRkpMRU5CUVVNc1IwRkJSeXhGUVVGRkxFTkJRVU1zU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMGxCUXpsQ0xFTkJRVU03U1VGRlJEczdPenM3VDBGTFJ6dEpRVU5JTEUxQlFVMHNRMEZCUXl4TFFVRkxMRU5CUVVNc1IwRkJaVHRSUVVNeFFpeFBRVUZQTEVsQlFVa3NRMEZCUXl4SFFVRkhMRVZCUVVVc1EwRkJReXhMUVVGTExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdTVUZETDBJc1EwRkJRenRKUVVWRU96czdPenRQUVV0SE8wbEJRMGdzVFVGQlRTeERRVUZETEV0QlFVc3NRMEZCUXl4SFFVRmxPMUZCUXpGQ0xFOUJRVThzU1VGQlNTeERRVUZETEVkQlFVY3NSVUZCUlN4RFFVRkRMRXRCUVVzc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dEpRVU12UWl4RFFVRkRPMGxCUlVRN096czdPMDlCUzBjN1NVRkRTQ3hOUVVGTkxFTkJRVU1zUzBGQlN5eERRVUZETEVkQlFXVTdVVUZETVVJc1QwRkJUeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eEZRVUZGTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8wbEJReTlDTEVOQlFVTTdTVUZGUkRzN096czdPenRQUVU5SE8wbEJRMGdzVFVGQlRTeERRVUZETEVkQlFVY3NRMEZEVWl4TlFVRnpRaXhGUVVOMFFpeE5RVUVyUWl4RlFVTXZRaXhIUVVGSExFbEJRVmM3VVVGRlpDeE5RVUZOTzFsQlEwb3NUMEZCVHl4TlFVRk5MRXRCUVVzc1VVRkJVVHRuUWtGRGVFSXNRMEZCUXl4RFFVRkRMRTFCUVUwN1owSkJRMUlzUTBGQlF5eERRVUZETEUxQlFVMHNRMEZCUXl4WFFVRlhPMjlDUVVOc1FpeERRVUZETEVOQlFVTXNUVUZCVFN4RFFVRkRMRmRCUVZjc1EwRkJReXhKUVVGSk8yOUNRVU42UWl4RFFVRkRMRU5CUVVNc1RVRkJUU3hEUVVGRExFbEJRVWtzUTBGQlF6dFJRVU53UWl4UFFVRlBMRWxCUVVrc1EwRkJReXhSUVVGUkxFTkJRVU1zVFVGQlRTeEZRVUZGTEUxQlFVMHNSVUZCUlN4SFFVRkhMRWxCUVVrc1EwRkJReXhEUVVGRE8wbEJRMmhFTEVOQlFVTTdTVUZGUkRzN096czdPenM3TzA5QlUwYzdTVUZEU0N4TlFVRk5MRU5CUVVNc1QwRkJUeXhEUVVGRExFMUJRV01zUlVGQlJTeEZRVUZYTzFGQlEzaERMRTlCUVU4c1NVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eE5RVUZOTEVWQlFVVXNTVUZCU1N4RFFVRkRMRTlCUVU4c1JVRkJSU3hGUVVGRkxFTkJRVU1zUTBGQlF6dEpRVU5xUkN4RFFVRkRPMGxCUlVRN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPMDlCWjBOSE8wbEJRMGdzVFVGQlRTeERRVUZETEV0QlFVc3NRMEZEVml4SlFVRlpMRVZCUTFvc1NVRkJhME1zUlVGRGJFTXNWMEZCY1VJc1JVRkRja0lzVjBGQmEwSXNXVUZCV1R0UlFVVTVRaXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4TFFVRkxPMWxCUVVVc1QwRkJUeXhKUVVGSkxFTkJRVU03VVVGRGNrTXNUVUZCVFN4TlFVRk5MRWRCUVVjc1QwRkJUeXhEUVVGRExFZEJRVWNzUlVGQlJTeERRVUZETEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU03VVVGRk4wTXNVMEZCVXl4TFFVRkxMRU5CUTFvc1IwRkJWeXhGUVVOWUxFMUJRWGxDTEVWQlEzcENMRXRCUVhsRk8xbEJSWHBGTEVsQlFVa3NRMEZCUXp0blFrRkRTQ3hOUVVGTkxFTkJRVU1zUjBGQk1FSXNSMEZCUnl4RFFVRkRPMmRDUVVOeVF5eEpRVUZKTEVOQlFVTXNSMEZCUnl4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03WjBKQlJXcENMRk5CUVZNc1ZVRkJWU3hEUVVOcVFpeEhRVUZwUkN4RlFVTnFSQ3hKUVVGSkxFZEJRVWNzUzBGQlN6dHZRa0ZGV2l4SlFVRkpMRU5CUVVNc1IwRkpiVUlzU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1ZVRkJWU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNWVUZCVlN4RFFVRkRPMjlDUVVNelJDeEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRTlCUVU4c1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETzNkQ1FVTjRRaXhQUVVGUkxFTkJRU3RETEVOQlFVTXNTVUZCU1N4RFFVTXhSQ3hEUVVGRExFVkJRMFFzUzBGQlpTeERRVU5vUWl4RFFVRkRPMjlDUVVOS0xFTkJRVU03YjBKQlEwUXNVVUZCVVN4SFFVRkhMRU5CUVVNc1RVRkJUU3hGUVVGRkxFTkJRVU03ZDBKQlEyNUNMRXRCUVVzc1EwRkJRenMwUWtGRFNpeERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zVlVGQlZTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1VVRkJVU3hEUVVGRE96UkNRVU55UXl4UFFVRlJMRU5CUVRaRExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN2QwSkJRMmhGTEV0QlFVc3NRMEZCUXpzMFFrRkRTaXhEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRPelJDUVVNelFpeFBRVUZQTEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0M1FrRkRka003TkVKQlEwVXNUVUZCVFN4RFFVRkRMRXRCUVVzc1EwRkJReXcyUWtGQk5rSXNUVUZCVFN4RlFVRkZMRU5CUVVNc1EwRkJRenMwUWtGRGNFUXNUMEZCVHl4TFFVRkxMRU5CUVVNc1EwRkJWeXhEUVVGRExFTkJRVU03YjBKQlF6bENMRU5CUVVNN1owSkJRMGdzUTBGQlF6dG5Ra0ZGUkN4VFFVRlRMRlZCUVZVc1EwRkJReXhEUVVGclFqdHZRa0ZEY0VNc1NVRkJTU3hQUVVGUExFTkJRVU1zUzBGQlN5eFJRVUZSTEVWQlFVVXNRMEZCUXp0M1FrRkRNVUlzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03YjBKQlEycENMRU5CUVVNN2VVSkJRVTBzUTBGQlF6dDNRa0ZEVGl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVEJDTEVOQlFXbENMRU5CUVVNN2IwSkJRM0JFTEVOQlFVTTdaMEpCUTBnc1EwRkJRenRuUWtGRlJDeFJRVUZSTEUxQlFVMHNSVUZCUlN4RFFVRkRPMjlDUVVObUxFdEJRVXNzU1VGQlNTeERRVUZETzI5Q1FVTldMRXRCUVVzc1NVRkJTVHQzUWtGRFVDeFBRVUZQTEZWQlFWVXNRMEZCUXl4TFFVRmxMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU03YjBKQlF6RkRMRXRCUVVzc1QwRkJUenQzUWtGRFZpeEpRVUZKTEV0QlFVc3NRMEZCUXl4UFFVRlBMRU5CUVVNc1MwRkJTeXhEUVVGRExFVkJRVVVzUTBGQlF6czBRa0ZEZWtJc1MwRkJTeXhEUVVGRExFOUJRVThzUTBGQlF5eFZRVUZWTEVOQlFVTXNRMEZCUXp0M1FrRkROVUlzUTBGQlF6czJRa0ZCVFN4RFFVRkRPelJDUVVOT0xGVkJRVlVzUTBGQlF5eExRVUYzUWl4RFFVRkRMRU5CUVVNN2QwSkJRM1pETEVOQlFVTTdkMEpCUTBRc1QwRkJUeXhEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETzI5Q1FVTm9RanQzUWtGRFJTeE5RVUZOTEVOQlFVTXNTMEZCU3l4RFFVRkRMRFpDUVVFMlFpeE5RVUZOTEVWQlFVVXNRMEZCUXl4RFFVRkRPM2RDUVVOd1JDeFBRVUZQTEVOQlFVTXNRMEZCUXp0blFrRkRZaXhEUVVGRE8yZENRVU5FTERaRVFVRTJSRHRaUVVNdlJDeERRVUZETzFsQlFVTXNUMEZCVHl4RFFVRlZMRVZCUVVVc1EwRkJRenRuUWtGRGNFSXNUVUZCVFN4RFFVRkRMRXRCUVVzc1EwRkJReXg1UWtGQmVVSXNUVUZCVFN4bFFVRmxMRXRCUVVzc1JVRkJSU3hEUVVGRExFTkJRVU03WjBKQlEzQkZMRTlCUVU4c1IwRkJSeXhEUVVGRE8xbEJRMklzUTBGQlF6dFJRVU5JTEVOQlFVTTdVVUZGUkN4TlFVRk5MR1ZCUVdVc1IwRkJSeXhSUVVGUkxFTkJRVU1zU1VGQmJVSXNRMEZCUXl4RFFVRkRPMUZCUTNSRUxFbEJRVWtzUTBGQlF5eGxRVUZsTEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExHVkJRV1VzUTBGQlF5eERRVUZETEUxQlFVMHNSVUZCUlN4RFFVRkRPMWxCUXpkRUxFOUJRVThzU1VGQlNTeERRVUZETzFGQlEyUXNRMEZCUXp0UlFVVkVMRWxCUVVrc1YwRkJWeXhIUVVGblFpeGxRVUU0UWl4RFFVRkRPMUZCUlRsRUxFMUJRVTBzVTBGQlV5eEhRVUZITEUxQlFVMHNRMEZCUXl4TlFVRk5MRU5CUVVNc1JVRkJSU3hGUVVGRkxGRkJRVkVzUTBGQlF5eERRVUZETzFGQlF6bERMRWxCUVVrc1RVRkJUU3hEUVVGRExFbEJRVWtzUTBGQlF5eGxRVUZsTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hUUVVGVE8xbEJRemxETEZkQlFWYzdaMEpCUTFJc1pVRkJlVU1zUTBGQlF5eFhRVUZYTEVOQlFVTXNTVUZCU1N4RlFVRkZMRU5CUVVNN1VVRkZiRVVzVDBGQlR5eE5RVUZOTEVOQlFVTXNTVUZCU1N4RFFVRkRMRmRCUVZjc1EwRkJReXhEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVkQlFWY3NSVUZCUlN4SFFVRlhMRVZCUVVVc1JVRkJSVHRaUVVOc1JTeE5RVUZOTEVkQlFVY3NSMEZCU1N4WFFVRXlRaXhEUVVGRExFZEJRWGRDTEVOQlFVTXNRMEZCUXp0WlFVTnVSU3hKUVVGSkxFZEJRVWM3WjBKQlEwd3NUMEZCVHl4TFFVRkxMRU5CUTFZc1IwRkJSeXhGUVVOSUxFZEJRWGRDTEVWQlEzaENMRWRCUzFrc1EwRkRZaXhEUVVGRE8xbEJRMG9zVDBGQlR5eEhRVUZITEVOQlFVTTdVVUZEWWl4RFFVRkRMRVZCUVVVc1NVRkJTU3hEUVVGRExFTkJRVU03U1VGRFdDeERRVUZESWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaWFXMXdiM0owSUh0Y2JpQWdURzluWjJWeVJtRmpkRzl5ZVN4Y2JpQWdURzluWjJsdVowTnZibVpwWnl4Y2JpQWdURzluWjJsdVowTnZiblJsZUhRc1hHNGdJRk4wY21sdVoweHBhMlVzWEc0Z0lGUm9aVzFsTEZ4dUlDQlVhR1Z0WlU5d2RHbHZiaXhjYmlBZ1ZHaGxiV1ZQY0hScGIyNUNlVXh2WjB4bGRtVnNMRnh1SUNCTWIyZG5aWElzWEc1OUlHWnliMjBnWENJdUwzUjVjR1Z6WENJN1hHNXBiWEJ2Y25RZ2V5QkRiMnh2Y21sNlpVOXdkR2x2Ym5Nc0lITjBlV3hsTENCVGRIbHNaV1JUZEhKcGJtY2dmU0JtY205dElGd2ljM1I1YkdWa0xYTjBjbWx1WnkxaWRXbHNaR1Z5WENJN1hHNXBiWEJ2Y25RZ2UxeHVJQ0JFWldaaGRXeDBURzluWjJsdVowTnZibVpwWnl4Y2JpQWdSR1ZtWVhWc2RGUm9aVzFsTEZ4dUlDQk1iMmRNWlhabGJDeGNiaUFnVG5WdFpYSnBZMHh2WjB4bGRtVnNjeXhjYm4wZ1puSnZiU0JjSWk0dlkyOXVjM1JoYm5SelhDSTdYRzVjYmk4cUtseHVJQ29nUUdSbGMyTnlhWEIwYVc5dUlFRWdiV2x1YVcxaGJDQnNiMmRuWlhJZ2FXMXdiR1Z0Wlc1MFlYUnBiMjR1WEc0Z0tpQkFjM1Z0YldGeWVTQk5hVzVwVEc5bloyVnlJR2x6SUdFZ2JHbG5hSFIzWldsbmFIUWdiRzluWjJsdVp5QmpiR0Z6Y3lCMGFHRjBJR2x0Y0d4bGJXVnVkSE1nZEdobElFeHZaMmRsY2lCcGJuUmxjbVpoWTJVdVhHNGdLaUJKZENCd2NtOTJhV1JsY3lCaVlYTnBZeUJzYjJkbmFXNW5JR1oxYm1OMGFXOXVZV3hwZEhrZ2QybDBhQ0J6ZFhCd2IzSjBJR1p2Y2lCa2FXWm1aWEpsYm5RZ2JHOW5JR3hsZG1Wc2N5d2dkbVZ5WW05emFYUjVMRnh1SUNvZ1kyOXVkR1Y0ZEMxaGQyRnlaU0JzYjJkbmFXNW5MQ0JoYm1RZ1kzVnpkRzl0YVhwaFlteGxJR1p2Y20xaGRIUnBibWN1WEc0Z0tpQkFjR0Z5WVcwZ2UzTjBjbWx1WjMwZ1kyOXVkR1Y0ZENBdElGUm9aU0JqYjI1MFpYaDBJQ2gwZVhCcFkyRnNiSGtnWTJ4aGMzTWdibUZ0WlNrZ2RHaHBjeUJzYjJkblpYSWdhWE1nWVhOemIyTnBZWFJsWkNCM2FYUm9YRzRnS2lCQWNHRnlZVzBnZTFCaGNuUnBZV3c4VEc5bloybHVaME52Ym1acFp6NTlJR052Ym1ZZ0xTQlBjSFJwYjI1aGJDQmpiMjVtYVdkMWNtRjBhVzl1SUhSdklHOTJaWEp5YVdSbElHZHNiMkpoYkNCelpYUjBhVzVuYzF4dUlDb2dRR05zWVhOeklFMXBibWxNYjJkblpYSmNiaUFxSUVCbGVHRnRjR3hsWEc0Z0tpQXZMeUJEY21WaGRHVWdZU0J1WlhjZ2JHOW5aMlZ5SUdadmNpQmhJR05zWVhOelhHNGdLaUJqYjI1emRDQnNiMmRuWlhJZ1BTQnVaWGNnVFdsdWFVeHZaMmRsY2lnblRYbERiR0Z6Y3ljcE8xeHVJQ3BjYmlBcUlDOHZJRXh2WnlCdFpYTnpZV2RsY3lCaGRDQmthV1ptWlhKbGJuUWdiR1YyWld4elhHNGdLaUJzYjJkblpYSXVhVzVtYnlnblZHaHBjeUJwY3lCaGJpQnBibVp2SUcxbGMzTmhaMlVuS1R0Y2JpQXFJR3h2WjJkbGNpNWtaV0oxWnlnblZHaHBjeUJwY3lCaElHUmxZblZuSUcxbGMzTmhaMlVuS1R0Y2JpQXFJR3h2WjJkbGNpNWxjbkp2Y2lnblUyOXRaWFJvYVc1bklIZGxiblFnZDNKdmJtY25LVHRjYmlBcVhHNGdLaUF2THlCRGNtVmhkR1VnWVNCamFHbHNaQ0JzYjJkblpYSWdabTl5SUdFZ2MzQmxZMmxtYVdNZ2JXVjBhRzlrWEc0Z0tpQmpiMjV6ZENCdFpYUm9iMlJNYjJkblpYSWdQU0JzYjJkblpYSXVabTl5S0NkdGVVMWxkR2h2WkNjcE8xeHVJQ29nYldWMGFHOWtURzluWjJWeUxuWmxjbUp2YzJVb0owUmxkR0ZwYkdWa0lHbHVabTl5YldGMGFXOXVKeXdnTWlrN1hHNGdLbHh1SUNvZ0x5OGdURzluSUhkcGRHZ2dZM1Z6ZEc5dElHTnZibVpwWjNWeVlYUnBiMjVjYmlBcUlHeHZaMmRsY2k1bWIzSW9KM053WldOcFlXeE5aWFJvYjJRbkxDQjdJSE4wZVd4bE9pQjBjblZsSUgwcExtbHVabThvSjFOMGVXeGxaQ0J0WlhOellXZGxKeWs3WEc0Z0tpOWNibVY0Y0c5eWRDQmpiR0Z6Y3lCTmFXNXBURzluWjJWeUlHbHRjR3hsYldWdWRITWdURzluWjJWeUlIdGNiaUFnWTI5dWMzUnlkV04wYjNJb1hHNGdJQ0FnY0hKdmRHVmpkR1ZrSUdOdmJuUmxlSFE2SUhOMGNtbHVaeXhjYmlBZ0lDQndjbTkwWldOMFpXUWdZMjl1Wmo4NklGQmhjblJwWVd3OFRHOW5aMmx1WjBOdmJtWnBaejVjYmlBZ0tTQjdmVnh1WEc0Z0lIQnliM1JsWTNSbFpDQmpiMjVtYVdjb1hHNGdJQ0FnYTJWNU9pQnJaWGx2WmlCTWIyZG5hVzVuUTI5dVptbG5YRzRnSUNrNklFeHZaMmRwYm1kRGIyNW1hV2RiYTJWNWIyWWdURzluWjJsdVowTnZibVpwWjEwZ2UxeHVJQ0FnSUdsbUlDaDBhR2x6TG1OdmJtWWdKaVlnYTJWNUlHbHVJSFJvYVhNdVkyOXVaaWtnY21WMGRYSnVJSFJvYVhNdVkyOXVabHRyWlhsZE8xeHVJQ0FnSUhKbGRIVnliaUJNYjJkbmFXNW5MbWRsZEVOdmJtWnBaeWdwVzJ0bGVWMDdYRzRnSUgxY2JseHVJQ0F2S2lwY2JpQWdJQ29nUUdSbGMyTnlhWEIwYVc5dUlFTnlaV0YwWlhNZ1lTQmphR2xzWkNCc2IyZG5aWElnWm05eUlHRWdjM0JsWTJsbWFXTWdiV1YwYUc5a0lHOXlJR052Ym5SbGVIUmNiaUFnSUNvZ1FITjFiVzFoY25rZ1VtVjBkWEp1Y3lCaElHNWxkeUJzYjJkblpYSWdhVzV6ZEdGdVkyVWdkMmwwYUNCMGFHVWdZM1Z5Y21WdWRDQmpiMjUwWlhoMElHVjRkR1Z1WkdWa0lHSjVJSFJvWlNCemNHVmphV1pwWldRZ2JXVjBhRzlrSUc1aGJXVmNiaUFnSUNvZ1FIQmhjbUZ0SUh0emRISnBibWNnZkNCR2RXNWpkR2x2Ym4wZ2JXVjBhRzlrSUMwZ1ZHaGxJRzFsZEdodlpDQnVZVzFsSUc5eUlHWjFibU4wYVc5dUlIUnZJR055WldGMFpTQmhJR3h2WjJkbGNpQm1iM0pjYmlBZ0lDb2dRSEJoY21GdElIdFFZWEowYVdGc1BFeHZaMmRwYm1kRGIyNW1hV2MrZlNCamIyNW1hV2NnTFNCUGNIUnBiMjVoYkNCamIyNW1hV2QxY21GMGFXOXVJSFJ2SUc5MlpYSnlhV1JsSUhObGRIUnBibWR6WEc0Z0lDQXFJRUJ3WVhKaGJTQjdMaTR1WVc1NWZTQmhjbWR6SUMwZ1FXUmthWFJwYjI1aGJDQmhjbWQxYldWdWRITWdkRzhnY0dGemN5QjBieUIwYUdVZ2JHOW5aMlZ5SUdaaFkzUnZjbmxjYmlBZ0lDb2dRSEpsZEhWeWJpQjdURzluWjJWeWZTQkJJRzVsZHlCc2IyZG5aWElnYVc1emRHRnVZMlVnWm05eUlIUm9aU0J6Y0dWamFXWnBaV1FnYldWMGFHOWtYRzRnSUNBcUwxeHVJQ0JtYjNJb1hHNGdJQ0FnYldWMGFHOWtQem9nYzNSeWFXNW5JSHdnS0NndUxpNWhjbWR6T2lCaGJubGJYU2tnUFQ0Z1lXNTVLU3hjYmlBZ0lDQmpiMjVtYVdjL09pQlFZWEowYVdGc1BFeHZaMmRwYm1kRGIyNW1hV2MrWEc0Z0lDazZJRXh2WjJkbGNpQjdYRzRnSUNBZ2JXVjBhRzlrSUQwZ2JXVjBhRzlrWEc0Z0lDQWdJQ0EvSUhSNWNHVnZaaUJ0WlhSb2IyUWdQVDA5SUZ3aWMzUnlhVzVuWENKY2JpQWdJQ0FnSUNBZ1B5QnRaWFJvYjJSY2JpQWdJQ0FnSUNBZ09pQnRaWFJvYjJRdWJtRnRaVnh1SUNBZ0lDQWdPaUIxYm1SbFptbHVaV1E3WEc1Y2JpQWdJQ0J5WlhSMWNtNGdibVYzSUZCeWIzaDVLSFJvYVhNc0lIdGNiaUFnSUNBZ0lHZGxkRG9nS0hSaGNtZGxkRG9nZEhsd1pXOW1JSFJvYVhNc0lIQTZJSE4wY21sdVp5QjhJSE41YldKdmJDd2djbVZqWldsMlpYSTZJR0Z1ZVNrZ1BUNGdlMXh1SUNBZ0lDQWdJQ0JqYjI1emRDQnlaWE4xYkhRZ1BTQlNaV1pzWldOMExtZGxkQ2gwWVhKblpYUXNJSEFzSUhKbFkyVnBkbVZ5S1R0Y2JpQWdJQ0FnSUNBZ2FXWWdLSEFnUFQwOUlGd2lZMjl1Wm1sblhDSXBJSHRjYmlBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnYm1WM0lGQnliM2g1S0hSb2FYTXVZMjl1Wm1sbkxDQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCblpYUTZJQ2gwWVhKblpYUTZJSFI1Y0dWdlppQjBhR2x6TG1OdmJtWnBaeXdnY0RvZ2MzUnlhVzVuSUh3Z2MzbHRZbTlzS1NBOVBpQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2hqYjI1bWFXY2dKaVlnY0NCcGJpQmpiMjVtYVdjcFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUdOdmJtWnBaMXR3SUdGeklHdGxlVzltSUV4dloyZHBibWREYjI1bWFXZGRPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z1VtVm1iR1ZqZEM1blpYUW9kR0Z5WjJWMExDQndMQ0J5WldObGFYWmxjaWs3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlMRnh1SUNBZ0lDQWdJQ0FnSUgwcE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJR2xtSUNod0lEMDlQU0JjSW1OdmJuUmxlSFJjSWlrZ2UxeHVJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQmJjbVZ6ZFd4MExDQnRaWFJvYjJSZExtcHZhVzRvWENJdVhDSXBPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUJ5WlhOMWJIUTdYRzRnSUNBZ0lDQjlMRnh1SUNBZ0lIMHBPMXh1SUNCOVhHNWNiaUFnTHlvcVhHNGdJQ0FxSUVCa1pYTmpjbWx3ZEdsdmJpQkRjbVZoZEdWeklHRWdabTl5YldGMGRHVmtJR3h2WnlCemRISnBibWRjYmlBZ0lDb2dRSE4xYlcxaGNua2dSMlZ1WlhKaGRHVnpJR0VnYkc5bklITjBjbWx1WnlCM2FYUm9JSFJwYldWemRHRnRjQ3dnWTI5c2IzSmxaQ0JzYjJjZ2JHVjJaV3dzSUdOdmJuUmxlSFFzSUdGdVpDQnRaWE56WVdkbFhHNGdJQ0FxSUVCd1lYSmhiU0I3VEc5blRHVjJaV3g5SUd4bGRtVnNJQzBnVkdobElHeHZaeUJzWlhabGJDQm1iM0lnZEdocGN5QnRaWE56WVdkbFhHNGdJQ0FxSUVCd1lYSmhiU0I3VTNSeWFXNW5UR2xyWlNCOElFVnljbTl5ZlNCdFpYTnpZV2RsSUMwZ1ZHaGxJRzFsYzNOaFoyVWdkRzhnYkc5bklHOXlJR0Z1SUVWeWNtOXlJRzlpYW1WamRGeHVJQ0FnS2lCQWNHRnlZVzBnZTNOMGNtbHVaMzBnVzNOMFlXTnJYU0F0SUU5d2RHbHZibUZzSUhOMFlXTnJJSFJ5WVdObElIUnZJR2x1WTJ4MVpHVWdhVzRnZEdobElHeHZaMXh1SUNBZ0tpQkFjbVYwZFhKdUlIdHpkSEpwYm1kOUlFRWdabTl5YldGMGRHVmtJR3h2WnlCemRISnBibWNnZDJsMGFDQmhiR3dnWTI5dGNHOXVaVzUwYzF4dUlDQWdLaTljYmlBZ2NISnZkR1ZqZEdWa0lHTnlaV0YwWlV4dlp5aGNiaUFnSUNCc1pYWmxiRG9nVEc5blRHVjJaV3dzWEc0Z0lDQWdiV1Z6YzJGblpUb2dVM1J5YVc1blRHbHJaU0I4SUVWeWNtOXlMRnh1SUNBZ0lITjBZV05yUHpvZ2MzUnlhVzVuWEc0Z0lDazZJSE4wY21sdVp5QjdYRzRnSUNBZ1kyOXVjM1FnYkc5bk9pQnpkSEpwYm1kYlhTQTlJRnRkTzF4dUlDQWdJR052Ym5OMElITjBlV3hsSUQwZ2RHaHBjeTVqYjI1bWFXY29YQ0p6ZEhsc1pWd2lLVHRjYmlBZ0lDQnBaaUFvZEdocGN5NWpiMjVtYVdjb1hDSjBhVzFsYzNSaGJYQmNJaWtwSUh0Y2JpQWdJQ0FnSUdOdmJuTjBJR1JoZEdVZ1BTQnVaWGNnUkdGMFpTZ3BMblJ2U1ZOUFUzUnlhVzVuS0NrN1hHNGdJQ0FnSUNCamIyNXpkQ0IwYVcxbGMzUmhiWEFnUFNCemRIbHNaU0EvSUV4dloyZHBibWN1ZEdobGJXVW9aR0YwWlN3Z1hDSjBhVzFsYzNSaGJYQmNJaXdnYkdWMlpXd3BJRG9nWkdGMFpUdGNiaUFnSUNBZ0lHeHZaeTV3ZFhOb0tIUnBiV1Z6ZEdGdGNDazdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2FXWWdLSFJvYVhNdVkyOXVabWxuS0Z3aWJHOW5UR1YyWld4Y0lpa3BJSHRjYmlBZ0lDQWdJR052Ym5OMElHeDJiRG9nYzNSeWFXNW5JRDBnYzNSNWJHVmNiaUFnSUNBZ0lDQWdQeUJNYjJkbmFXNW5MblJvWlcxbEtHeGxkbVZzTENCY0lteHZaMHhsZG1Wc1hDSXNJR3hsZG1Wc0tWeHVJQ0FnSUNBZ0lDQTZJR3hsZG1Wc08xeHVJQ0FnSUNBZ2JHOW5MbkIxYzJnb2JIWnNLVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQnBaaUFvZEdocGN5NWpiMjVtYVdjb1hDSmpiMjUwWlhoMFhDSXBLU0I3WEc0Z0lDQWdJQ0JqYjI1emRDQmpiMjUwWlhoME9pQnpkSEpwYm1jZ1BTQnpkSGxzWlZ4dUlDQWdJQ0FnSUNBL0lFeHZaMmRwYm1jdWRHaGxiV1VvZEdocGN5NWpiMjUwWlhoMExDQmNJbU5zWVhOelhDSXNJR3hsZG1Wc0tWeHVJQ0FnSUNBZ0lDQTZJSFJvYVhNdVkyOXVkR1Y0ZER0Y2JpQWdJQ0FnSUd4dlp5NXdkWE5vS0dOdmJuUmxlSFFwTzF4dUlDQWdJSDFjYmx4dUlDQWdJR2xtSUNoMGFHbHpMbU52Ym1acFp5aGNJbU52Y25KbGJHRjBhVzl1U1dSY0lpa3BJSHRjYmlBZ0lDQWdJSHRjYmlBZ0lDQWdJQ0FnWTI5dWMzUWdhV1E2SUhOMGNtbHVaeUE5SUhOMGVXeGxYRzRnSUNBZ0lDQWdJQ0FnUHlCTWIyZG5hVzVuTG5Sb1pXMWxLSFJvYVhNdVkyOXVabWxuS0Z3aVkyOXljbVZzWVhScGIyNUpaRndpS1NFdWRHOVRkSEpwYm1jb0tTd2dYQ0pwWkZ3aUxDQnNaWFpsYkNsY2JpQWdJQ0FnSUNBZ0lDQTZJSFJvYVhNdVkyOXVabWxuS0Z3aVkyOXljbVZzWVhScGIyNUpaRndpS1NFdWRHOVRkSEpwYm1jb0tUdGNiaUFnSUNBZ0lDQWdiRzluTG5CMWMyZ29hV1FwTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmx4dUlDQWdJR052Ym5OMElHMXpaem9nYzNSeWFXNW5JRDBnYzNSNWJHVmNiaUFnSUNBZ0lEOGdURzluWjJsdVp5NTBhR1Z0WlNoY2JpQWdJQ0FnSUNBZ0lDQjBlWEJsYjJZZ2JXVnpjMkZuWlNBOVBUMGdYQ0p6ZEhKcGJtZGNJaUEvSUcxbGMzTmhaMlVnT2lBb2JXVnpjMkZuWlNCaGN5QkZjbkp2Y2lrdWJXVnpjMkZuWlN4Y2JpQWdJQ0FnSUNBZ0lDQmNJbTFsYzNOaFoyVmNJaXhjYmlBZ0lDQWdJQ0FnSUNCc1pYWmxiRnh1SUNBZ0lDQWdJQ0FwWEc0Z0lDQWdJQ0E2SUhSNWNHVnZaaUJ0WlhOellXZGxJRDA5UFNCY0luTjBjbWx1WjF3aVhHNGdJQ0FnSUNBZ0lEOGdiV1Z6YzJGblpWeHVJQ0FnSUNBZ0lDQTZJQ2h0WlhOellXZGxJR0Z6SUVWeWNtOXlLUzV0WlhOellXZGxPMXh1SUNBZ0lHeHZaeTV3ZFhOb0tHMXpaeWs3WEc0Z0lDQWdhV1lnS0hOMFlXTnJJSHg4SUcxbGMzTmhaMlVnYVc1emRHRnVZMlZ2WmlCRmNuSnZjaWtnZTF4dUlDQWdJQ0FnYzNSaFkyc2dQU0J6ZEhsc1pWeHVJQ0FnSUNBZ0lDQS9JRXh2WjJkcGJtY3VkR2hsYldVb1hHNGdJQ0FnSUNBZ0lDQWdJQ0FvYzNSaFkyc2dmSHdnS0cxbGMzTmhaMlVnWVhNZ1JYSnliM0lwTG5OMFlXTnJLU0JoY3lCemRISnBibWNzWEc0Z0lDQWdJQ0FnSUNBZ0lDQmNJbk4wWVdOclhDSXNYRzRnSUNBZ0lDQWdJQ0FnSUNCc1pYWmxiRnh1SUNBZ0lDQWdJQ0FnSUNsY2JpQWdJQ0FnSUNBZ09pQnpkR0ZqYXp0Y2JpQWdJQ0FnSUd4dlp5NXdkWE5vS0dCY1hHNVRkR0ZqYXlCMGNtRmpaVHBjWEc0a2UzTjBZV05yZldBcE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUhKbGRIVnliaUJzYjJjdWFtOXBiaWgwYUdsekxtTnZibVpwWnloY0luTmxjR0Z5WVhSdmNsd2lLU0JoY3lCemRISnBibWNwTzF4dUlDQjlYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFQmtaWE5qY21sd2RHbHZiaUJNYjJkeklHRWdiV1Z6YzJGblpTQjNhWFJvSUhSb1pTQnpjR1ZqYVdacFpXUWdiRzluSUd4bGRtVnNYRzRnSUNBcUlFQnpkVzF0WVhKNUlFTm9aV05yY3lCcFppQjBhR1VnYldWemMyRm5aU0J6YUc5MWJHUWdZbVVnYkc5bloyVmtJR0poYzJWa0lHOXVJSFJvWlNCamRYSnlaVzUwSUd4dlp5QnNaWFpsYkN4Y2JpQWdJQ29nZEdobGJpQjFjMlZ6SUhSb1pTQmhjSEJ5YjNCeWFXRjBaU0JqYjI1emIyeGxJRzFsZEdodlpDQjBieUJ2ZFhSd2RYUWdkR2hsSUdadmNtMWhkSFJsWkNCc2IyZGNiaUFnSUNvZ1FIQmhjbUZ0SUh0TWIyZE1aWFpsYkgwZ2JHVjJaV3dnTFNCVWFHVWdiRzluSUd4bGRtVnNJRzltSUhSb1pTQnRaWE56WVdkbFhHNGdJQ0FxSUVCd1lYSmhiU0I3VTNSeWFXNW5UR2xyWlNCOElFVnljbTl5ZlNCdGMyY2dMU0JVYUdVZ2JXVnpjMkZuWlNCMGJ5QmlaU0JzYjJkblpXUWdiM0lnWVc0Z1JYSnliM0lnYjJKcVpXTjBYRzRnSUNBcUlFQndZWEpoYlNCN2MzUnlhVzVuZlNCYmMzUmhZMnRkSUMwZ1QzQjBhVzl1WVd3Z2MzUmhZMnNnZEhKaFkyVWdkRzhnYVc1amJIVmtaU0JwYmlCMGFHVWdiRzluWEc0Z0lDQXFJRUJ5WlhSMWNtNGdlM1p2YVdSOVhHNGdJQ0FxTDF4dUlDQndjbTkwWldOMFpXUWdiRzluS0Z4dUlDQWdJR3hsZG1Wc09pQk1iMmRNWlhabGJDeGNiaUFnSUNCdGMyYzZJRk4wY21sdVoweHBhMlVnZkNCRmNuSnZjaXhjYmlBZ0lDQnpkR0ZqYXo4NklITjBjbWx1WjF4dUlDQXBPaUIyYjJsa0lIdGNiaUFnSUNCcFppQW9YRzRnSUNBZ0lDQk9kVzFsY21salRHOW5UR1YyWld4elczUm9hWE11WTI5dVptbG5LRndpYkdWMlpXeGNJaWtnWVhNZ1RHOW5UR1YyWld4ZElEeGNiaUFnSUNBZ0lFNTFiV1Z5YVdOTWIyZE1aWFpsYkhOYmJHVjJaV3hkWEc0Z0lDQWdLVnh1SUNBZ0lDQWdjbVYwZFhKdU8xeHVJQ0FnSUd4bGRDQnRaWFJvYjJRN1hHNGdJQ0FnYzNkcGRHTm9JQ2hzWlhabGJDa2dlMXh1SUNBZ0lDQWdZMkZ6WlNCTWIyZE1aWFpsYkM1cGJtWnZPbHh1SUNBZ0lDQWdJQ0J0WlhSb2IyUWdQU0JqYjI1emIyeGxMbXh2Wnp0Y2JpQWdJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdJQ0JqWVhObElFeHZaMHhsZG1Wc0xuWmxjbUp2YzJVNlhHNGdJQ0FnSUNCallYTmxJRXh2WjB4bGRtVnNMbVJsWW5Wbk9seHVJQ0FnSUNBZ0lDQnRaWFJvYjJRZ1BTQmpiMjV6YjJ4bExtUmxZblZuTzF4dUlDQWdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQWdJR05oYzJVZ1RHOW5UR1YyWld3dVpYSnliM0k2WEc0Z0lDQWdJQ0FnSUcxbGRHaHZaQ0E5SUdOdmJuTnZiR1V1WlhKeWIzSTdYRzRnSUNBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUNBZ1pHVm1ZWFZzZERwY2JpQWdJQ0FnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0Z3aVNXNTJZV3hwWkNCc2IyY2diR1YyWld4Y0lpazdYRzRnSUNBZ2ZWeHVJQ0FnSUcxbGRHaHZaQ2gwYUdsekxtTnlaV0YwWlV4dlp5aHNaWFpsYkN3Z2JYTm5MQ0J6ZEdGamF5a3BPMXh1SUNCOVhHNWNiaUFnTHlvcVhHNGdJQ0FxSUVCa1pYTmpjbWx3ZEdsdmJpQk1iMmR6SUdFZ2JXVnpjMkZuWlNCaGRDQjBhR1VnYzJsc2JIa2diR1YyWld4Y2JpQWdJQ29nUUhOMWJXMWhjbmtnVEc5bmN5QmhJRzFsYzNOaFoyVWdZWFFnZEdobElITnBiR3g1SUd4bGRtVnNJR2xtSUhSb1pTQmpkWEp5Wlc1MElIWmxjbUp2YzJsMGVTQnpaWFIwYVc1bklHRnNiRzkzY3lCcGRGeHVJQ0FnS2lCQWNHRnlZVzBnZTFOMGNtbHVaMHhwYTJWOUlHMXpaeUF0SUZSb1pTQnRaWE56WVdkbElIUnZJR0psSUd4dloyZGxaRnh1SUNBZ0tpQkFjR0Z5WVcwZ2UyNTFiV0psY24wZ1czWmxjbUp2YzJsMGVUMHdYU0F0SUZSb1pTQjJaWEppYjNOcGRIa2diR1YyWld3Z2IyWWdkR2hsSUcxbGMzTmhaMlZjYmlBZ0lDb2dRSEpsZEhWeWJpQjdkbTlwWkgxY2JpQWdJQ292WEc0Z0lITnBiR3g1S0cxelp6b2dVM1J5YVc1blRHbHJaU3dnZG1WeVltOXphWFI1T2lCdWRXMWlaWElnUFNBd0tUb2dkbTlwWkNCN1hHNGdJQ0FnYVdZZ0tDaDBhR2x6TG1OdmJtWnBaeWhjSW5abGNtSnZjMlZjSWlrZ1lYTWdiblZ0WW1WeUtTQStQU0IyWlhKaWIzTnBkSGtwWEc0Z0lDQWdJQ0IwYUdsekxteHZaeWhNYjJkTVpYWmxiQzUyWlhKaWIzTmxMQ0J0YzJjcE8xeHVJQ0I5WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRUJrWlhOamNtbHdkR2x2YmlCTWIyZHpJR0VnYldWemMyRm5aU0JoZENCMGFHVWdkbVZ5WW05elpTQnNaWFpsYkZ4dUlDQWdLaUJBYzNWdGJXRnllU0JNYjJkeklHRWdiV1Z6YzJGblpTQmhkQ0IwYUdVZ2RtVnlZbTl6WlNCc1pYWmxiQ0JwWmlCMGFHVWdZM1Z5Y21WdWRDQjJaWEppYjNOcGRIa2djMlYwZEdsdVp5QmhiR3h2ZDNNZ2FYUmNiaUFnSUNvZ1FIQmhjbUZ0SUh0VGRISnBibWRNYVd0bGZTQnRjMmNnTFNCVWFHVWdiV1Z6YzJGblpTQjBieUJpWlNCc2IyZG5aV1JjYmlBZ0lDb2dRSEJoY21GdElIdHVkVzFpWlhKOUlGdDJaWEppYjNOcGRIazlNRjBnTFNCVWFHVWdkbVZ5WW05emFYUjVJR3hsZG1Wc0lHOW1JSFJvWlNCdFpYTnpZV2RsWEc0Z0lDQXFJRUJ5WlhSMWNtNGdlM1p2YVdSOVhHNGdJQ0FxTDF4dUlDQjJaWEppYjNObEtHMXpaem9nVTNSeWFXNW5UR2xyWlN3Z2RtVnlZbTl6YVhSNU9pQnVkVzFpWlhJZ1BTQXdLVG9nZG05cFpDQjdYRzRnSUNBZ2FXWWdLQ2gwYUdsekxtTnZibVpwWnloY0luWmxjbUp2YzJWY0lpa2dZWE1nYm5WdFltVnlLU0ErUFNCMlpYSmliM05wZEhrcFhHNGdJQ0FnSUNCMGFHbHpMbXh2WnloTWIyZE1aWFpsYkM1MlpYSmliM05sTENCdGMyY3BPMXh1SUNCOVhHNWNiaUFnTHlvcVhHNGdJQ0FxSUVCa1pYTmpjbWx3ZEdsdmJpQk1iMmR6SUdFZ2JXVnpjMkZuWlNCaGRDQjBhR1VnYVc1bWJ5QnNaWFpsYkZ4dUlDQWdLaUJBYzNWdGJXRnllU0JNYjJkeklHRWdiV1Z6YzJGblpTQmhkQ0IwYUdVZ2FXNW1ieUJzWlhabGJDQm1iM0lnWjJWdVpYSmhiQ0JoY0hCc2FXTmhkR2x2YmlCcGJtWnZjbTFoZEdsdmJseHVJQ0FnS2lCQWNHRnlZVzBnZTFOMGNtbHVaMHhwYTJWOUlHMXpaeUF0SUZSb1pTQnRaWE56WVdkbElIUnZJR0psSUd4dloyZGxaRnh1SUNBZ0tpQkFjbVYwZFhKdUlIdDJiMmxrZlZ4dUlDQWdLaTljYmlBZ2FXNW1ieWh0YzJjNklGTjBjbWx1WjB4cGEyVXBPaUIyYjJsa0lIdGNiaUFnSUNCMGFHbHpMbXh2WnloTWIyZE1aWFpsYkM1cGJtWnZMQ0J0YzJjcE8xeHVJQ0I5WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRUJrWlhOamNtbHdkR2x2YmlCTWIyZHpJR0VnYldWemMyRm5aU0JoZENCMGFHVWdaR1ZpZFdjZ2JHVjJaV3hjYmlBZ0lDb2dRSE4xYlcxaGNua2dURzluY3lCaElHMWxjM05oWjJVZ1lYUWdkR2hsSUdSbFluVm5JR3hsZG1Wc0lHWnZjaUJrWlhSaGFXeGxaQ0IwY205MVlteGxjMmh2YjNScGJtY2dhVzVtYjNKdFlYUnBiMjVjYmlBZ0lDb2dRSEJoY21GdElIdFRkSEpwYm1kTWFXdGxmU0J0YzJjZ0xTQlVhR1VnYldWemMyRm5aU0IwYnlCaVpTQnNiMmRuWldSY2JpQWdJQ29nUUhKbGRIVnliaUI3ZG05cFpIMWNiaUFnSUNvdlhHNGdJR1JsWW5WbktHMXpaem9nVTNSeWFXNW5UR2xyWlNrNklIWnZhV1FnZTF4dUlDQWdJSFJvYVhNdWJHOW5LRXh2WjB4bGRtVnNMbVJsWW5WbkxDQnRjMmNwTzF4dUlDQjlYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFQmtaWE5qY21sd2RHbHZiaUJNYjJkeklHRWdiV1Z6YzJGblpTQmhkQ0IwYUdVZ1pYSnliM0lnYkdWMlpXeGNiaUFnSUNvZ1FITjFiVzFoY25rZ1RHOW5jeUJoSUcxbGMzTmhaMlVnWVhRZ2RHaGxJR1Z5Y205eUlHeGxkbVZzSUdadmNpQmxjbkp2Y25NZ1lXNWtJR1Y0WTJWd2RHbHZibk5jYmlBZ0lDb2dRSEJoY21GdElIdFRkSEpwYm1kTWFXdGxJSHdnUlhKeWIzSjlJRzF6WnlBdElGUm9aU0J0WlhOellXZGxJSFJ2SUdKbElHeHZaMmRsWkNCdmNpQmhiaUJGY25KdmNpQnZZbXBsWTNSY2JpQWdJQ29nUUhKbGRIVnliaUI3ZG05cFpIMWNiaUFnSUNvdlhHNGdJR1Z5Y205eUtHMXpaem9nVTNSeWFXNW5UR2xyWlNCOElFVnljbTl5S1RvZ2RtOXBaQ0I3WEc0Z0lDQWdkR2hwY3k1c2IyY29URzluVEdWMlpXd3VaWEp5YjNJc0lHMXpaeWs3WEc0Z0lIMWNibHh1SUNBdktpcGNiaUFnSUNvZ1FHUmxjMk55YVhCMGFXOXVJRlZ3WkdGMFpYTWdkR2hsSUd4dloyZGxjaUJqYjI1bWFXZDFjbUYwYVc5dVhHNGdJQ0FxSUVCemRXMXRZWEo1SUUxbGNtZGxjeUIwYUdVZ2NISnZkbWxrWldRZ1kyOXVabWxuZFhKaGRHbHZiaUIzYVhSb0lIUm9aU0JsZUdsemRHbHVaeUJqYjI1bWFXZDFjbUYwYVc5dVhHNGdJQ0FxSUVCd1lYSmhiU0I3VUdGeWRHbGhiRHhNYjJkbmFXNW5RMjl1Wm1sblBuMGdZMjl1Wm1sbklDMGdWR2hsSUdOdmJtWnBaM1Z5WVhScGIyNGdiM0IwYVc5dWN5QjBieUJoY0hCc2VWeHVJQ0FnS2lCQWNtVjBkWEp1SUh0MmIybGtmVnh1SUNBZ0tpOWNiaUFnYzJWMFEyOXVabWxuS0dOdmJtWnBaem9nVUdGeWRHbGhiRHhNYjJkbmFXNW5RMjl1Wm1sblBpazZJSFp2YVdRZ2UxeHVJQ0FnSUhSb2FYTXVZMjl1WmlBOUlIc2dMaTR1S0hSb2FYTXVZMjl1WmlCOGZDQjdmU2tzSUM0dUxtTnZibVpwWnlCOU8xeHVJQ0I5WEc1OVhHNWNiaThxS2x4dUlDb2dRR1JsYzJOeWFYQjBhVzl1SUVFZ2MzUmhkR2xqSUdOc1lYTnpJR1p2Y2lCdFlXNWhaMmx1WnlCc2IyZG5hVzVuSUc5d1pYSmhkR2x2Ym5OY2JpQXFJRUJ6ZFcxdFlYSjVJRlJvWlNCTWIyZG5hVzVuSUdOc1lYTnpJSEJ5YjNacFpHVnpJR0VnWTJWdWRISmhiR2w2WldRZ2JHOW5aMmx1WnlCdFpXTm9ZVzVwYzIwZ2QybDBhQ0J6ZFhCd2IzSjBJR1p2Y2x4dUlDb2daR2xtWm1WeVpXNTBJR3h2WnlCc1pYWmxiSE1zSUhabGNtSnZjMmwwZVN3Z1lXNWtJSE4wZVd4cGJtY3VJRWwwSUhWelpYTWdZU0J6YVc1bmJHVjBiMjRnY0dGMGRHVnliaUIwYnlCdFlXbHVkR0ZwYmlCaElHZHNiMkpoYkZ4dUlDb2diRzluWjJWeUlHbHVjM1JoYm1ObElHRnVaQ0JoYkd4dmQzTWdZM0psWVhScGJtY2djM0JsWTJsbWFXTWdiRzluWjJWeWN5Qm1iM0lnWkdsbVptVnlaVzUwSUdOc1lYTnpaWE1nWVc1a0lHMWxkR2h2WkhNdVhHNGdLaUJBWTJ4aGMzTWdURzluWjJsdVoxeHVJQ29nUUdWNFlXMXdiR1ZjYmlBcUlDOHZJRk5sZENCbmJHOWlZV3dnWTI5dVptbG5kWEpoZEdsdmJseHVJQ29nVEc5bloybHVaeTV6WlhSRGIyNW1hV2NvZXlCc1pYWmxiRG9nVEc5blRHVjJaV3d1WkdWaWRXY3NJSE4wZVd4bE9pQjBjblZsSUgwcE8xeHVJQ3BjYmlBcUlDOHZJRWRsZENCaElHeHZaMmRsY2lCbWIzSWdZU0J6Y0dWamFXWnBZeUJqYkdGemMxeHVJQ29nWTI5dWMzUWdiRzluWjJWeUlEMGdURzluWjJsdVp5NW1iM0lvSjAxNVEyeGhjM01uS1R0Y2JpQXFYRzRnS2lBdkx5Qk1iMmNnYldWemMyRm5aWE1nWVhRZ1pHbG1abVZ5Wlc1MElHeGxkbVZzYzF4dUlDb2diRzluWjJWeUxtbHVabThvSjBGd2NHeHBZMkYwYVc5dUlITjBZWEowWldRbktUdGNiaUFxSUd4dloyZGxjaTVrWldKMVp5Z25VSEp2WTJWemMybHVaeUJrWVhSaExpNHVKeWs3WEc0Z0tseHVJQ29nTHk4Z1RHOW5JSGRwZEdnZ1kyOXVkR1Y0ZEZ4dUlDb2dZMjl1YzNRZ2JXVjBhRzlrVEc5bloyVnlJRDBnVEc5bloybHVaeTVtYjNJb0owMTVRMnhoYzNNdWJYbE5aWFJvYjJRbktUdGNiaUFxSUcxbGRHaHZaRXh2WjJkbGNpNTJaWEppYjNObEtDZEVaWFJoYVd4bFpDQnZjR1Z5WVhScGIyNGdhVzVtYjNKdFlYUnBiMjRuTENBeEtUdGNiaUFxWEc0Z0tpQXZMeUJNYjJjZ1pYSnliM0p6WEc0Z0tpQjBjbmtnZTF4dUlDb2dJQ0F2THlCemIyMWxJRzl3WlhKaGRHbHZibHh1SUNvZ2ZTQmpZWFJqYUNBb1pYSnliM0lwSUh0Y2JpQXFJQ0FnYkc5bloyVnlMbVZ5Y205eUtHVnljbTl5S1R0Y2JpQXFJSDFjYmlBcUlFQnRaWEp0WVdsa1hHNGdLaUJqYkdGemMwUnBZV2R5WVcxY2JpQXFJQ0FnWTJ4aGMzTWdURzluWjJWeUlIdGNiaUFxSUNBZ0lDQThQR2x1ZEdWeVptRmpaVDQrWEc0Z0tpQWdJQ0FnSzJadmNpaHRaWFJvYjJRc0lHTnZibVpwWnl3Z0xpNHVZWEpuY3lsY2JpQXFJQ0FnSUNBcmMybHNiSGtvYlhObkxDQjJaWEppYjNOcGRIa3BYRzRnS2lBZ0lDQWdLM1psY21KdmMyVW9iWE5uTENCMlpYSmliM05wZEhrcFhHNGdLaUFnSUNBZ0sybHVabThvYlhObktWeHVJQ29nSUNBZ0lDdGtaV0oxWnlodGMyY3BYRzRnS2lBZ0lDQWdLMlZ5Y205eUtHMXpaeWxjYmlBcUlDQWdJQ0FyYzJWMFEyOXVabWxuS0dOdmJtWnBaeWxjYmlBcUlDQWdmVnh1SUNwY2JpQXFJQ0FnWTJ4aGMzTWdURzluWjJsdVp5QjdYRzRnS2lBZ0lDQWdMV2RzYjJKaGJEb2dURzluWjJWeVhHNGdLaUFnSUNBZ0xWOW1ZV04wYjNKNU9pQk1iMmRuWlhKR1lXTjBiM0o1WEc0Z0tpQWdJQ0FnTFY5amIyNW1hV2M2SUV4dloyZHBibWREYjI1bWFXZGNiaUFxSUNBZ0lDQXJjMlYwUm1GamRHOXllU2htWVdOMGIzSjVLVnh1SUNvZ0lDQWdJQ3R6WlhSRGIyNW1hV2NvWTI5dVptbG5LVnh1SUNvZ0lDQWdJQ3RuWlhSRGIyNW1hV2NvS1Z4dUlDb2dJQ0FnSUN0blpYUW9LVnh1SUNvZ0lDQWdJQ3QyWlhKaWIzTmxLRzF6Wnl3Z2RtVnlZbTl6YVhSNUtWeHVJQ29nSUNBZ0lDdHBibVp2S0cxelp5bGNiaUFxSUNBZ0lDQXJaR1ZpZFdjb2JYTm5LVnh1SUNvZ0lDQWdJQ3R6YVd4c2VTaHRjMmNwWEc0Z0tpQWdJQ0FnSzJWeWNtOXlLRzF6WnlsY2JpQXFJQ0FnSUNBclptOXlLRzlpYW1WamRDd2dZMjl1Wm1sbkxDQXVMaTVoY21kektWeHVJQ29nSUNBZ0lDdGlaV05oZFhObEtISmxZWE52Yml3Z2FXUXBYRzRnS2lBZ0lDQWdLM1JvWlcxbEtIUmxlSFFzSUhSNWNHVXNJR3h2WjJkbGNreGxkbVZzTENCMFpXMXdiR0YwWlNsY2JpQXFJQ0FnZlZ4dUlDcGNiaUFxSUNBZ1kyeGhjM01nVFdsdWFVeHZaMmRsY2lCN1hHNGdLaUFnSUNBZ0syTnZibk4wY25WamRHOXlLR052Ym5SbGVIUXNJR052Ym1ZL0tWeHVJQ29nSUNCOVhHNGdLbHh1SUNvZ0lDQk1iMmRuYVc1bklDNHVQaUJNYjJkblpYSWdPaUJqY21WaGRHVnpYRzRnS2lBZ0lFeHZaMmRwYm1jZ0xpNCtJRTFwYm1sTWIyZG5aWElnT2lCamNtVmhkR1Z6SUdKNUlHUmxabUYxYkhSY2JpQXFMMXh1Wlhod2IzSjBJR05zWVhOeklFeHZaMmRwYm1jZ2UxeHVJQ0F2S2lwY2JpQWdJQ29nUUdSbGMyTnlhWEIwYVc5dUlGUm9aU0JuYkc5aVlXd2diRzluWjJWeUlHbHVjM1JoYm1ObFhHNGdJQ0FxSUVCemRXMXRZWEo1SUVFZ2MybHVaMnhsZEc5dUlHbHVjM1JoYm1ObElHOW1JRXh2WjJkbGNpQjFjMlZrSUdadmNpQm5iRzlpWVd3Z2JHOW5aMmx1WjF4dUlDQWdLaTljYmlBZ2NISnBkbUYwWlNCemRHRjBhV01nWjJ4dlltRnNQem9nVEc5bloyVnlPMXh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkFaR1Z6WTNKcGNIUnBiMjRnUm1GamRHOXllU0JtZFc1amRHbHZiaUJtYjNJZ1kzSmxZWFJwYm1jZ2JHOW5aMlZ5SUdsdWMzUmhibU5sYzF4dUlDQWdLaUJBYzNWdGJXRnllU0JCSUdaMWJtTjBhVzl1SUhSb1lYUWdZM0psWVhSbGN5QnVaWGNnVEc5bloyVnlJR2x1YzNSaGJtTmxjeTRnUW5rZ1pHVm1ZWFZzZEN3Z2FYUWdZM0psWVhSbGN5QmhJRTFwYm1sTWIyZG5aWEl1WEc0Z0lDQXFMMXh1SUNCd2NtbDJZWFJsSUhOMFlYUnBZeUJmWm1GamRHOXllVG9nVEc5bloyVnlSbUZqZEc5eWVTQTlJQ2hjYmlBZ0lDQnZZbXBsWTNRNklITjBjbWx1Wnl4Y2JpQWdJQ0JqYjI1bWFXYy9PaUJRWVhKMGFXRnNQRXh2WjJkcGJtZERiMjVtYVdjK1hHNGdJQ2tnUFQ0Z2UxeHVJQ0FnSUhKbGRIVnliaUJ1WlhjZ1RXbHVhVXh2WjJkbGNpaHZZbXBsWTNRc0lHTnZibVpwWnlrN1hHNGdJSDA3WEc0Z0lDOHFLbHh1SUNBZ0tpQkFaR1Z6WTNKcGNIUnBiMjRnUTI5dVptbG5kWEpoZEdsdmJpQm1iM0lnZEdobElHeHZaMmRwYm1jZ2MzbHpkR1Z0WEc0Z0lDQXFJRUJ6ZFcxdFlYSjVJRk4wYjNKbGN5QjBhR1VnWjJ4dlltRnNJR3h2WjJkcGJtY2dZMjl1Wm1sbmRYSmhkR2x2YmlCcGJtTnNkV1JwYm1jZ2RtVnlZbTl6YVhSNUxDQnNiMmNnYkdWMlpXd3NJSE4wZVd4cGJtY3NJR0Z1WkNCbWIzSnRZWFIwYVc1bklITmxkSFJwYm1kelhHNGdJQ0FxTDF4dUlDQndjbWwyWVhSbElITjBZWFJwWXlCZlkyOXVabWxuT2lCTWIyZG5hVzVuUTI5dVptbG5JRDBnUkdWbVlYVnNkRXh2WjJkcGJtZERiMjVtYVdjN1hHNWNiaUFnY0hKcGRtRjBaU0JqYjI1emRISjFZM1J2Y2lncElIdDlYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFQmtaWE5qY21sd2RHbHZiaUJUWlhSeklIUm9aU0JtWVdOMGIzSjVJR1oxYm1OMGFXOXVJR1p2Y2lCamNtVmhkR2x1WnlCc2IyZG5aWElnYVc1emRHRnVZMlZ6WEc0Z0lDQXFJRUJ6ZFcxdFlYSjVJRUZzYkc5M2N5QmpkWE4wYjIxcGVtbHVaeUJvYjNjZ2JHOW5aMlZ5SUdsdWMzUmhibU5sY3lCaGNtVWdZM0psWVhSbFpGeHVJQ0FnS2lCQWNHRnlZVzBnZTB4dloyZGxja1poWTNSdmNubDlJR1poWTNSdmNua2dMU0JVYUdVZ1ptRmpkRzl5ZVNCbWRXNWpkR2x2YmlCMGJ5QjFjMlVnWm05eUlHTnlaV0YwYVc1bklHeHZaMmRsY25OY2JpQWdJQ29nUUhKbGRIVnliaUI3ZG05cFpIMWNiaUFnSUNvdlhHNGdJSE4wWVhScFl5QnpaWFJHWVdOMGIzSjVLR1poWTNSdmNuazZJRXh2WjJkbGNrWmhZM1J2Y25rcElIdGNiaUFnSUNCTWIyZG5hVzVuTGw5bVlXTjBiM0o1SUQwZ1ptRmpkRzl5ZVR0Y2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkFaR1Z6WTNKcGNIUnBiMjRnVlhCa1lYUmxjeUIwYUdVZ1oyeHZZbUZzSUd4dloyZHBibWNnWTI5dVptbG5kWEpoZEdsdmJseHVJQ0FnS2lCQWMzVnRiV0Z5ZVNCQmJHeHZkM01nZFhCa1lYUnBibWNnZEdobElHZHNiMkpoYkNCc2IyZG5hVzVuSUdOdmJtWnBaM1Z5WVhScGIyNGdkMmwwYUNCdVpYY2djMlYwZEdsdVozTmNiaUFnSUNvZ1FIQmhjbUZ0SUh0UVlYSjBhV0ZzUEV4dloyZHBibWREYjI1bWFXYytmU0JqYjI1bWFXY2dMU0JVYUdVZ1kyOXVabWxuZFhKaGRHbHZiaUJ2Y0hScGIyNXpJSFJ2SUdGd2NHeDVYRzRnSUNBcUlFQnlaWFIxY200Z2UzWnZhV1I5WEc0Z0lDQXFMMXh1SUNCemRHRjBhV01nYzJWMFEyOXVabWxuS0dOdmJtWnBaem9nVUdGeWRHbGhiRHhNYjJkbmFXNW5RMjl1Wm1sblBpa2dlMXh1SUNBZ0lFOWlhbVZqZEM1aGMzTnBaMjRvZEdocGN5NWZZMjl1Wm1sbkxDQmpiMjVtYVdjcE8xeHVJQ0I5WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRUJrWlhOamNtbHdkR2x2YmlCSFpYUnpJR0VnWTI5d2VTQnZaaUIwYUdVZ1kzVnljbVZ1ZENCbmJHOWlZV3dnYkc5bloybHVaeUJqYjI1bWFXZDFjbUYwYVc5dVhHNGdJQ0FxSUVCemRXMXRZWEo1SUZKbGRIVnlibk1nWVNCamIzQjVJRzltSUhSb1pTQmpkWEp5Wlc1MElHZHNiMkpoYkNCc2IyZG5hVzVuSUdOdmJtWnBaM1Z5WVhScGIyNWNiaUFnSUNvZ1FISmxkSFZ5YmlCN1RHOW5aMmx1WjBOdmJtWnBaMzBnUVNCamIzQjVJRzltSUhSb1pTQmpkWEp5Wlc1MElHTnZibVpwWjNWeVlYUnBiMjVjYmlBZ0lDb3ZYRzRnSUhOMFlYUnBZeUJuWlhSRGIyNW1hV2NvS1RvZ1RHOW5aMmx1WjBOdmJtWnBaeUI3WEc0Z0lDQWdjbVYwZFhKdUlFOWlhbVZqZEM1aGMzTnBaMjRvZTMwc0lIUm9hWE11WDJOdmJtWnBaeWs3WEc0Z0lIMWNibHh1SUNBdktpcGNiaUFnSUNvZ1FHUmxjMk55YVhCMGFXOXVJRkpsZEhKcFpYWmxjeUJ2Y2lCamNtVmhkR1Z6SUhSb1pTQm5iRzlpWVd3Z2JHOW5aMlZ5SUdsdWMzUmhibU5sTGx4dUlDQWdLaUJBYzNWdGJXRnllU0JTWlhSMWNtNXpJSFJvWlNCbGVHbHpkR2x1WnlCbmJHOWlZV3dnYkc5bloyVnlJRzl5SUdOeVpXRjBaWE1nWVNCdVpYY2diMjVsSUdsbUlHbDBJR1J2WlhOdUozUWdaWGhwYzNRdVhHNGdJQ0FxWEc0Z0lDQXFJRUJ5WlhSMWNtNGdWR2hsSUdkc2IySmhiQ0JXWlhKaWIzTnBkSGxNYjJkblpYSWdhVzV6ZEdGdVkyVXVYRzRnSUNBcUwxeHVJQ0J6ZEdGMGFXTWdaMlYwS0NrNklFeHZaMmRsY2lCN1hHNGdJQ0FnZEdocGN5NW5iRzlpWVd3Z1BTQjBhR2x6TG1kc2IySmhiQ0EvSUhSb2FYTXVaMnh2WW1Gc0lEb2dkR2hwY3k1ZlptRmpkRzl5ZVNoY0lreHZaMmRwYm1kY0lpazdYRzRnSUNBZ2NtVjBkWEp1SUhSb2FYTXVaMnh2WW1Gc08xeHVJQ0I5WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRUJrWlhOamNtbHdkR2x2YmlCTWIyZHpJR0VnZG1WeVltOXpaU0J0WlhOellXZGxMbHh1SUNBZ0tpQkFjM1Z0YldGeWVTQkVaV3hsWjJGMFpYTWdkR2hsSUhabGNtSnZjMlVnYkc5bloybHVaeUIwYnlCMGFHVWdaMnh2WW1Gc0lHeHZaMmRsY2lCcGJuTjBZVzVqWlM1Y2JpQWdJQ3BjYmlBZ0lDb2dRSEJoY21GdElHMXpaeUF0SUZSb1pTQnRaWE56WVdkbElIUnZJR0psSUd4dloyZGxaQzVjYmlBZ0lDb2dRSEJoY21GdElIWmxjbUp2YzJsMGVTQXRJRlJvWlNCMlpYSmliM05wZEhrZ2JHVjJaV3dnYjJZZ2RHaGxJRzFsYzNOaFoyVWdLR1JsWm1GMWJIUTZJREFwTGx4dUlDQWdLaTljYmlBZ2MzUmhkR2xqSUhabGNtSnZjMlVvYlhObk9pQlRkSEpwYm1kTWFXdGxMQ0IyWlhKaWIzTnBkSGs2SUc1MWJXSmxjaUE5SURBcE9pQjJiMmxrSUh0Y2JpQWdJQ0J5WlhSMWNtNGdkR2hwY3k1blpYUW9LUzUyWlhKaWIzTmxLRzF6Wnl3Z2RtVnlZbTl6YVhSNUtUdGNiaUFnZlZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJBWkdWelkzSnBjSFJwYjI0Z1RHOW5jeUJoYmlCcGJtWnZJRzFsYzNOaFoyVXVYRzRnSUNBcUlFQnpkVzF0WVhKNUlFUmxiR1ZuWVhSbGN5QjBhR1VnYVc1bWJ5QnNiMmRuYVc1bklIUnZJSFJvWlNCbmJHOWlZV3dnYkc5bloyVnlJR2x1YzNSaGJtTmxMbHh1SUNBZ0tseHVJQ0FnS2lCQWNHRnlZVzBnYlhObklDMGdWR2hsSUcxbGMzTmhaMlVnZEc4Z1ltVWdiRzluWjJWa0xseHVJQ0FnS2k5Y2JpQWdjM1JoZEdsaklHbHVabThvYlhObk9pQlRkSEpwYm1kTWFXdGxLVG9nZG05cFpDQjdYRzRnSUNBZ2NtVjBkWEp1SUhSb2FYTXVaMlYwS0NrdWFXNW1ieWh0YzJjcE8xeHVJQ0I5WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRUJrWlhOamNtbHdkR2x2YmlCTWIyZHpJR0VnWkdWaWRXY2diV1Z6YzJGblpTNWNiaUFnSUNvZ1FITjFiVzFoY25rZ1JHVnNaV2RoZEdWeklIUm9aU0JrWldKMVp5QnNiMmRuYVc1bklIUnZJSFJvWlNCbmJHOWlZV3dnYkc5bloyVnlJR2x1YzNSaGJtTmxMbHh1SUNBZ0tseHVJQ0FnS2lCQWNHRnlZVzBnYlhObklDMGdWR2hsSUcxbGMzTmhaMlVnZEc4Z1ltVWdiRzluWjJWa0xseHVJQ0FnS2k5Y2JpQWdjM1JoZEdsaklHUmxZblZuS0cxelp6b2dVM1J5YVc1blRHbHJaU2s2SUhadmFXUWdlMXh1SUNBZ0lISmxkSFZ5YmlCMGFHbHpMbWRsZENncExtUmxZblZuS0cxelp5azdYRzRnSUgxY2JseHVJQ0F2S2lwY2JpQWdJQ29nUUdSbGMyTnlhWEIwYVc5dUlFeHZaM01nWVNCemFXeHNlU0J0WlhOellXZGxMbHh1SUNBZ0tpQkFjM1Z0YldGeWVTQkVaV3hsWjJGMFpYTWdkR2hsSUdSbFluVm5JR3h2WjJkcGJtY2dkRzhnZEdobElHZHNiMkpoYkNCc2IyZG5aWElnYVc1emRHRnVZMlV1WEc0Z0lDQXFYRzRnSUNBcUlFQndZWEpoYlNCdGMyY2dMU0JVYUdVZ2JXVnpjMkZuWlNCMGJ5QmlaU0JzYjJkblpXUXVYRzRnSUNBcUwxeHVJQ0J6ZEdGMGFXTWdjMmxzYkhrb2JYTm5PaUJUZEhKcGJtZE1hV3RsS1RvZ2RtOXBaQ0I3WEc0Z0lDQWdjbVYwZFhKdUlIUm9hWE11WjJWMEtDa3VjMmxzYkhrb2JYTm5LVHRjYmlBZ2ZWeHVYRzRnSUM4cUtseHVJQ0FnS2lCQVpHVnpZM0pwY0hScGIyNGdURzluY3lCaGJpQmxjbkp2Y2lCdFpYTnpZV2RsTGx4dUlDQWdLaUJBYzNWdGJXRnllU0JFWld4bFoyRjBaWE1nZEdobElHVnljbTl5SUd4dloyZHBibWNnZEc4Z2RHaGxJR2RzYjJKaGJDQnNiMmRuWlhJZ2FXNXpkR0Z1WTJVdVhHNGdJQ0FxWEc0Z0lDQXFJRUJ3WVhKaGJTQnRjMmNnTFNCVWFHVWdiV1Z6YzJGblpTQjBieUJpWlNCc2IyZG5aV1F1WEc0Z0lDQXFMMXh1SUNCemRHRjBhV01nWlhKeWIzSW9iWE5uT2lCVGRISnBibWRNYVd0bEtUb2dkbTlwWkNCN1hHNGdJQ0FnY21WMGRYSnVJSFJvYVhNdVoyVjBLQ2t1WlhKeWIzSW9iWE5uS1R0Y2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkFaR1Z6WTNKcGNIUnBiMjRnUTNKbFlYUmxjeUJoSUd4dloyZGxjaUJtYjNJZ1lTQnpjR1ZqYVdacFl5QnZZbXBsWTNRZ2IzSWdZMjl1ZEdWNGRGeHVJQ0FnS2lCQWMzVnRiV0Z5ZVNCRGNtVmhkR1Z6SUdFZ2JtVjNJR3h2WjJkbGNpQnBibk4wWVc1alpTQm1iM0lnZEdobElHZHBkbVZ1SUc5aWFtVmpkQ0J2Y2lCamIyNTBaWGgwSUhWemFXNW5JSFJvWlNCbVlXTjBiM0o1SUdaMWJtTjBhVzl1WEc0Z0lDQXFJRUJ3WVhKaGJTQjdURzluWjJsdVowTnZiblJsZUhSOUlHOWlhbVZqZENBdElGUm9aU0J2WW1wbFkzUXNJR05zWVhOekxDQnZjaUJqYjI1MFpYaDBJSFJ2SUdOeVpXRjBaU0JoSUd4dloyZGxjaUJtYjNKY2JpQWdJQ29nUUhCaGNtRnRJSHRRWVhKMGFXRnNQRXh2WjJkcGJtZERiMjVtYVdjK2ZTQmJZMjl1Wm1sblhTQXRJRTl3ZEdsdmJtRnNJR052Ym1acFozVnlZWFJwYjI0Z2RHOGdiM1psY25KcFpHVWdaMnh2WW1Gc0lITmxkSFJwYm1kelhHNGdJQ0FxSUVCd1lYSmhiU0I3TGk0dVlXNTVmU0JoY21keklDMGdRV1JrYVhScGIyNWhiQ0JoY21kMWJXVnVkSE1nZEc4Z2NHRnpjeUIwYnlCMGFHVWdiRzluWjJWeUlHWmhZM1J2Y25sY2JpQWdJQ29nUUhKbGRIVnliaUI3VEc5bloyVnlmU0JCSUc1bGR5QnNiMmRuWlhJZ2FXNXpkR0Z1WTJVZ1ptOXlJSFJvWlNCemNHVmphV1pwWldRZ2IySnFaV04wSUc5eUlHTnZiblJsZUhSY2JpQWdJQ292WEc0Z0lITjBZWFJwWXlCbWIzSW9YRzRnSUNBZ2IySnFaV04wT2lCTWIyZG5hVzVuUTI5dWRHVjRkQ3hjYmlBZ0lDQmpiMjVtYVdjL09pQlFZWEowYVdGc1BFeHZaMmRwYm1kRGIyNW1hV2MrTEZ4dUlDQWdJQzR1TG1GeVozTTZJR0Z1ZVZ0ZFhHNGdJQ2s2SUV4dloyZGxjaUI3WEc0Z0lDQWdiMkpxWldOMElEMWNiaUFnSUNBZ0lIUjVjR1Z2WmlCdlltcGxZM1FnUFQwOUlGd2ljM1J5YVc1blhDSmNiaUFnSUNBZ0lDQWdQeUJ2WW1wbFkzUmNiaUFnSUNBZ0lDQWdPaUJ2WW1wbFkzUXVZMjl1YzNSeWRXTjBiM0pjYmlBZ0lDQWdJQ0FnSUNBL0lHOWlhbVZqZEM1amIyNXpkSEoxWTNSdmNpNXVZVzFsWEc0Z0lDQWdJQ0FnSUNBZ09pQnZZbXBsWTNRdWJtRnRaVHRjYmlBZ0lDQnlaWFIxY200Z2RHaHBjeTVmWm1GamRHOXllU2h2WW1wbFkzUXNJR052Ym1acFp5d2dMaTR1WVhKbmN5azdYRzRnSUgxY2JseHVJQ0F2S2lwY2JpQWdJQ29nUUdSbGMyTnlhWEIwYVc5dUlFTnlaV0YwWlhNZ1lTQnNiMmRuWlhJZ1ptOXlJR0VnYzNCbFkybG1hV01nY21WaGMyOXVJRzl5SUdOdmJuUmxlSFF1WEc0Z0lDQXFYRzRnSUNBcUlFQnpkVzF0WVhKNUlGUm9hWE1nYzNSaGRHbGpJRzFsZEdodlpDQmpjbVZoZEdWeklHRWdibVYzSUd4dloyZGxjaUJwYm5OMFlXNWpaU0IxYzJsdVp5QjBhR1VnWm1GamRHOXllU0JtZFc1amRHbHZiaXhjYmlBZ0lDb2dZbUZ6WldRZ2IyNGdZU0JuYVhabGJpQnlaV0Z6YjI0Z2IzSWdZMjl1ZEdWNGRDNWNiaUFnSUNwY2JpQWdJQ29nUUhCaGNtRnRJSEpsWVhOdmJpQXRJRUVnYzNSeWFXNW5JR1JsYzJOeWFXSnBibWNnZEdobElISmxZWE52YmlCdmNpQmpiMjUwWlhoMElHWnZjaUJqY21WaGRHbHVaeUIwYUdseklHeHZaMmRsY2k1Y2JpQWdJQ29nUUhCaGNtRnRJR2xrWEc0Z0lDQXFJRUJ5WlhSMWNtNXpJRUVnYm1WM0lGWmxjbUp2YzJsMGVVeHZaMmRsY2lCdmNpQkRiR0Z6YzB4dloyZGxjaUJwYm5OMFlXNWpaUzVjYmlBZ0lDb3ZYRzRnSUhOMFlYUnBZeUJpWldOaGRYTmxLSEpsWVhOdmJqb2djM1J5YVc1bkxDQnBaRDg2SUhOMGNtbHVaeWs2SUV4dloyZGxjaUI3WEc0Z0lDQWdjbVYwZFhKdUlIUm9hWE11WDJaaFkzUnZjbmtvY21WaGMyOXVMQ0IwYUdsekxsOWpiMjVtYVdjc0lHbGtLVHRjYmlBZ2ZWeHVYRzRnSUM4cUtseHVJQ0FnS2lCQVpHVnpZM0pwY0hScGIyNGdRWEJ3YkdsbGN5QjBhR1Z0WlNCemRIbHNhVzVuSUhSdklIUmxlSFJjYmlBZ0lDb2dRSE4xYlcxaGNua2dRWEJ3YkdsbGN5QnpkSGxzYVc1bklDaGpiMnh2Y25Nc0lHWnZjbTFoZEhScGJtY3BJSFJ2SUhSbGVIUWdZbUZ6WldRZ2IyNGdkR2hsSUhSb1pXMWxJR052Ym1acFozVnlZWFJwYjI1Y2JpQWdJQ29nUUhCaGNtRnRJSHR6ZEhKcGJtZDlJSFJsZUhRZ0xTQlVhR1VnZEdWNGRDQjBieUJ6ZEhsc1pWeHVJQ0FnS2lCQWNHRnlZVzBnZTNOMGNtbHVaMzBnZEhsd1pTQXRJRlJvWlNCMGVYQmxJRzltSUdWc1pXMWxiblFnZEc4Z2MzUjViR1VnS0dVdVp5NHNJRndpWTJ4aGMzTmNJaXdnWENKdFpYTnpZV2RsWENJc0lGd2liRzluVEdWMlpXeGNJaWxjYmlBZ0lDb2dRSEJoY21GdElIdE1iMmRNWlhabGJIMGdiRzluWjJWeVRHVjJaV3dnTFNCVWFHVWdiRzluSUd4bGRtVnNJSFJ2SUhWelpTQm1iM0lnYzNSNWJHbHVaMXh1SUNBZ0tpQkFjR0Z5WVcwZ2UxUm9aVzFsZlNCYmRHVnRjR3hoZEdVOVJHVm1ZWFZzZEZSb1pXMWxYU0F0SUZSb1pTQjBhR1Z0WlNCMGJ5QjFjMlVnWm05eUlITjBlV3hwYm1kY2JpQWdJQ29nUUhKbGRIVnliaUI3YzNSeWFXNW5mU0JVYUdVZ2MzUjViR1ZrSUhSbGVIUmNiaUFnSUNvZ1FHMWxjbTFoYVdSY2JpQWdJQ29nYzJWeGRXVnVZMlZFYVdGbmNtRnRYRzRnSUNBcUlDQWdjR0Z5ZEdsamFYQmhiblFnUTJGc2JHVnlYRzRnSUNBcUlDQWdjR0Z5ZEdsamFYQmhiblFnVkdobGJXVWdZWE1nVEc5bloybHVaeTUwYUdWdFpWeHVJQ0FnS2lBZ0lIQmhjblJwWTJsd1lXNTBJRUZ3Y0d4NUlHRnpJR0Z3Y0d4NUlHWjFibU4wYVc5dVhHNGdJQ0FxSUNBZ2NHRnlkR2xqYVhCaGJuUWdVM1I1YkdVZ1lYTWdjM1I1YkdWa0xYTjBjbWx1WnkxaWRXbHNaR1Z5WEc0Z0lDQXFYRzRnSUNBcUlDQWdRMkZzYkdWeUxUNCtWR2hsYldVNklIUm9aVzFsS0hSbGVIUXNJSFI1Y0dVc0lHeHZaMmRsY2t4bGRtVnNLVnh1SUNBZ0tpQWdJRlJvWlcxbExUNCtWR2hsYldVNklFTm9aV05ySUdsbUlITjBlV3hwYm1jZ2FYTWdaVzVoWW14bFpGeHVJQ0FnS2lBZ0lHRnNkQ0J6ZEhsc2FXNW5JR1JwYzJGaWJHVmtYRzRnSUNBcUlDQWdJQ0JVYUdWdFpTMHRQajVEWVd4c1pYSTZJSEpsZEhWeWJpQnZjbWxuYVc1aGJDQjBaWGgwWEc0Z0lDQXFJQ0FnWld4elpTQnpkSGxzYVc1bklHVnVZV0pzWldSY2JpQWdJQ29nSUNBZ0lGUm9aVzFsTFQ0K1ZHaGxiV1U2SUVkbGRDQjBhR1Z0WlNCbWIzSWdkSGx3WlZ4dUlDQWdLaUFnSUNBZ1lXeDBJSFJvWlcxbElHNXZkQ0JtYjNWdVpGeHVJQ0FnS2lBZ0lDQWdJQ0JVYUdWdFpTMHRQajVEWVd4c1pYSTZJSEpsZEhWeWJpQnZjbWxuYVc1aGJDQjBaWGgwWEc0Z0lDQXFJQ0FnSUNCbGJITmxJSFJvWlcxbElHWnZkVzVrWEc0Z0lDQXFJQ0FnSUNBZ0lGUm9aVzFsTFQ0K1ZHaGxiV1U2SUVSbGRHVnliV2x1WlNCaFkzUjFZV3dnZEdobGJXVWdZbUZ6WldRZ2IyNGdiRzluSUd4bGRtVnNYRzRnSUNBcUlDQWdJQ0FnSUZSb1pXMWxMVDQrUVhCd2JIazZJRUZ3Y0d4NUlHVmhZMmdnYzNSNWJHVWdjSEp2Y0dWeWRIbGNiaUFnSUNvZ0lDQWdJQ0FnUVhCd2JIa3RQajVUZEhsc1pUb2dRWEJ3YkhrZ1kyOXNiM0p6SUdGdVpDQm1iM0p0WVhSMGFXNW5YRzRnSUNBcUlDQWdJQ0FnSUZOMGVXeGxMUzArUGtGd2NHeDVPaUJTWlhSMWNtNGdjM1I1YkdWa0lIUmxlSFJjYmlBZ0lDb2dJQ0FnSUNBZ1FYQndiSGt0TFQ0K1ZHaGxiV1U2SUZKbGRIVnliaUJ6ZEhsc1pXUWdkR1Y0ZEZ4dUlDQWdLaUFnSUNBZ0lDQlVhR1Z0WlMwdFBqNURZV3hzWlhJNklGSmxkSFZ5YmlCbWFXNWhiQ0J6ZEhsc1pXUWdkR1Y0ZEZ4dUlDQWdLaUFnSUNBZ1pXNWtYRzRnSUNBcUlDQWdaVzVrWEc0Z0lDQXFMMXh1SUNCemRHRjBhV01nZEdobGJXVW9YRzRnSUNBZ2RHVjRkRG9nYzNSeWFXNW5MRnh1SUNBZ0lIUjVjR1U2SUd0bGVXOW1JRlJvWlcxbElId2dhMlY1YjJZZ1RHOW5UR1YyWld3c1hHNGdJQ0FnYkc5bloyVnlUR1YyWld3NklFeHZaMHhsZG1Wc0xGeHVJQ0FnSUhSbGJYQnNZWFJsT2lCVWFHVnRaU0E5SUVSbFptRjFiSFJVYUdWdFpWeHVJQ0FwSUh0Y2JpQWdJQ0JwWmlBb0lYUm9hWE11WDJOdmJtWnBaeTV6ZEhsc1pTa2djbVYwZFhKdUlIUmxlSFE3WEc0Z0lDQWdZMjl1YzNRZ2JHOW5aMlZ5SUQwZ1RHOW5aMmx1Wnk1blpYUW9LUzVtYjNJb2RHaHBjeTUwYUdWdFpTazdYRzVjYmlBZ0lDQm1kVzVqZEdsdmJpQmhjSEJzZVNoY2JpQWdJQ0FnSUhSNGREb2djM1J5YVc1bkxGeHVJQ0FnSUNBZ2IzQjBhVzl1T2lCclpYbHZaaUJVYUdWdFpVOXdkR2x2Yml4Y2JpQWdJQ0FnSUhaaGJIVmxPaUJ1ZFcxaVpYSWdmQ0JiYm5WdFltVnlYU0I4SUZ0dWRXMWlaWElzSUc1MWJXSmxjaXdnYm5WdFltVnlYU0I4SUc1MWJXSmxjbHRkSUh3Z2MzUnlhVzVuVzExY2JpQWdJQ0FwT2lCemRISnBibWNnZTF4dUlDQWdJQ0FnZEhKNUlIdGNiaUFnSUNBZ0lDQWdZMjl1YzNRZ2REb2djM1J5YVc1bklId2dVM1I1YkdWa1UzUnlhVzVuSUQwZ2RIaDBPMXh1SUNBZ0lDQWdJQ0JzWlhRZ1l5QTlJSE4wZVd4bEtIUXBPMXh1WEc0Z0lDQWdJQ0FnSUdaMWJtTjBhVzl1SUdGd2NHeDVRMjlzYjNJb1hHNGdJQ0FnSUNBZ0lDQWdkbUZzT2lCdWRXMWlaWElnZkNCYmJuVnRZbVZ5WFNCOElGdHVkVzFpWlhJc0lHNTFiV0psY2l3Z2JuVnRZbVZ5WFN4Y2JpQWdJQ0FnSUNBZ0lDQnBjMEpuSUQwZ1ptRnNjMlZjYmlBZ0lDQWdJQ0FnS1RvZ1UzUjViR1ZrVTNSeWFXNW5JSHRjYmlBZ0lDQWdJQ0FnSUNCc1pYUWdaanBjYmlBZ0lDQWdJQ0FnSUNBZ0lId2dkSGx3Wlc5bUlHTXVZbUZqYTJkeWIzVnVaRnh1SUNBZ0lDQWdJQ0FnSUNBZ2ZDQjBlWEJsYjJZZ1l5NW1iM0psWjNKdmRXNWtYRzRnSUNBZ0lDQWdJQ0FnSUNCOElIUjVjR1Z2WmlCakxuSm5ZbHh1SUNBZ0lDQWdJQ0FnSUNBZ2ZDQjBlWEJsYjJZZ1l5NWpiMnh2Y2pJMU5pQTlJR2x6UW1jZ1B5QmpMbUpoWTJ0bmNtOTFibVFnT2lCakxtWnZjbVZuY205MWJtUTdYRzRnSUNBZ0lDQWdJQ0FnYVdZZ0tDRkJjbkpoZVM1cGMwRnljbUY1S0haaGJDa3BJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlBb1ppQmhjeUIwZVhCbGIyWWdZeTVpWVdOclozSnZkVzVrSUh3Z2RIbHdaVzltSUdNdVptOXlaV2R5YjNWdVpDa3VZMkZzYkNoY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnWXl4Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnZG1Gc2RXVWdZWE1nYm5WdFltVnlYRzRnSUNBZ0lDQWdJQ0FnSUNBcE8xeHVJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNCemQybDBZMmdnS0haaGJDNXNaVzVuZEdncElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUdOaGMyVWdNVHBjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdaaUE5SUdselFtY2dQeUJqTG1KblEyOXNiM0l5TlRZZ09pQmpMbU52Ykc5eU1qVTJPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z0tHWWdZWE1nZEhsd1pXOW1JR011WW1kRGIyeHZjakkxTmlCOElIUjVjR1Z2WmlCakxtTnZiRzl5TWpVMktTaDJZV3hiTUYwcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnWTJGelpTQXpPbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQm1JRDBnYVhOQ1p5QS9JR011WW1kU1oySWdPaUJqTG5KbllqdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUdNdWNtZGlLSFpoYkZzd1hTd2dkbUZzV3pGZExDQjJZV3hiTWwwcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnWkdWbVlYVnNkRHBjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdiRzluWjJWeUxtVnljbTl5S0dCT2IzUWdZU0IyWVd4cFpDQmpiMnh2Y2lCdmNIUnBiMjQ2SUNSN2IzQjBhVzl1ZldBcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnYzNSNWJHVW9kQ0JoY3lCemRISnBibWNwTzF4dUlDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0FnSUdaMWJtTjBhVzl1SUdGd2NHeDVVM1I1YkdVb2Rqb2diblZ0WW1WeUlId2djM1J5YVc1bktUb2dkbTlwWkNCN1hHNGdJQ0FnSUNBZ0lDQWdhV1lnS0hSNWNHVnZaaUIySUQwOVBTQmNJbTUxYldKbGNsd2lLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmpJRDBnWXk1emRIbHNaU2gyS1R0Y2JpQWdJQ0FnSUNBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnWXlBOUlHTmJkaUJoY3lCclpYbHZaaUJEYjJ4dmNtbDZaVTl3ZEdsdmJuTmRJR0Z6SUZOMGVXeGxaRk4wY21sdVp6dGNiaUFnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ0lDQnpkMmwwWTJnZ0tHOXdkR2x2YmlrZ2UxeHVJQ0FnSUNBZ0lDQWdJR05oYzJVZ1hDSmlaMXdpT2x4dUlDQWdJQ0FnSUNBZ0lHTmhjMlVnWENKbVoxd2lPbHh1SUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUdGd2NHeDVRMjlzYjNJb2RtRnNkV1VnWVhNZ2JuVnRZbVZ5S1M1MFpYaDBPMXh1SUNBZ0lDQWdJQ0FnSUdOaGMyVWdYQ0p6ZEhsc1pWd2lPbHh1SUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLRUZ5Y21GNUxtbHpRWEp5WVhrb2RtRnNkV1VwS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUhaaGJIVmxMbVp2Y2tWaFkyZ29ZWEJ3YkhsVGRIbHNaU2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCaGNIQnNlVk4wZVd4bEtIWmhiSFZsSUdGeklHNTFiV0psY2lCOElITjBjbWx1WnlrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z1l5NTBaWGgwTzF4dUlDQWdJQ0FnSUNBZ0lHUmxabUYxYkhRNlhHNGdJQ0FnSUNBZ0lDQWdJQ0JzYjJkblpYSXVaWEp5YjNJb1lFNXZkQ0JoSUhaaGJHbGtJSFJvWlcxbElHOXdkR2x2YmpvZ0pIdHZjSFJwYjI1OVlDazdYRzRnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnZER0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQXZMeUJsYzJ4cGJuUXRaR2x6WVdKc1pTMXVaWGgwTFd4cGJtVWdRSFI1Y0dWelkzSnBjSFF0WlhOc2FXNTBMMjV2TFhWdWRYTmxaQzEyWVhKelhHNGdJQ0FnSUNCOUlHTmhkR05vSUNobE9pQjFibXR1YjNkdUtTQjdYRzRnSUNBZ0lDQWdJR3h2WjJkbGNpNWxjbkp2Y2loZ1JYSnliM0lnWVhCd2JIbHBibWNnYzNSNWJHVTZJQ1I3YjNCMGFXOXVmU0IzYVhSb0lIWmhiSFZsSUNSN2RtRnNkV1Y5WUNrN1hHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCMGVIUTdYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZWeHVYRzRnSUNBZ1kyOXVjM1FnYVc1a2FYWnBaSFZoYkZSb1pXMWxJRDBnZEdWdGNHeGhkR1ZiZEhsd1pTQmhjeUJyWlhsdlppQlVhR1Z0WlYwN1hHNGdJQ0FnYVdZZ0tDRnBibVJwZG1sa2RXRnNWR2hsYldVZ2ZId2dJVTlpYW1WamRDNXJaWGx6S0dsdVpHbDJhV1IxWVd4VWFHVnRaU2t1YkdWdVozUm9LU0I3WEc0Z0lDQWdJQ0J5WlhSMWNtNGdkR1Y0ZER0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0JzWlhRZ1lXTjBkV0ZzVkdobGJXVTZJRlJvWlcxbFQzQjBhVzl1SUQwZ2FXNWthWFpwWkhWaGJGUm9aVzFsSUdGeklGUm9aVzFsVDNCMGFXOXVPMXh1WEc0Z0lDQWdZMjl1YzNRZ2JHOW5UR1YyWld4eklEMGdUMkpxWldOMExtRnpjMmxuYmloN2ZTd2dURzluVEdWMlpXd3BPMXh1SUNBZ0lHbG1JQ2hQWW1wbFkzUXVhMlY1Y3locGJtUnBkbWxrZFdGc1ZHaGxiV1VwV3pCZElHbHVJR3h2WjB4bGRtVnNjeWxjYmlBZ0lDQWdJR0ZqZEhWaGJGUm9aVzFsSUQxY2JpQWdJQ0FnSUNBZ0tHbHVaR2wyYVdSMVlXeFVhR1Z0WlNCaGN5QlVhR1Z0WlU5d2RHbHZia0o1VEc5blRHVjJaV3dwVzJ4dloyZGxja3hsZG1Wc1hTQjhmQ0I3ZlR0Y2JseHVJQ0FnSUhKbGRIVnliaUJQWW1wbFkzUXVhMlY1Y3loaFkzUjFZV3hVYUdWdFpTa3VjbVZrZFdObEtDaGhZMk02SUhOMGNtbHVaeXdnYTJWNU9pQnpkSEpwYm1jcElEMCtJSHRjYmlBZ0lDQWdJR052Ym5OMElIWmhiQ0E5SUNoaFkzUjFZV3hVYUdWdFpTQmhjeUJVYUdWdFpVOXdkR2x2YmlsYmEyVjVJR0Z6SUd0bGVXOW1JRlJvWlcxbFQzQjBhVzl1WFR0Y2JpQWdJQ0FnSUdsbUlDaDJZV3dwWEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUJoY0hCc2VTaGNiaUFnSUNBZ0lDQWdJQ0JoWTJNc1hHNGdJQ0FnSUNBZ0lDQWdhMlY1SUdGeklHdGxlVzltSUZSb1pXMWxUM0IwYVc5dUxGeHVJQ0FnSUNBZ0lDQWdJSFpoYkNCaGMxeHVJQ0FnSUNBZ0lDQWdJQ0FnZkNCdWRXMWlaWEpjYmlBZ0lDQWdJQ0FnSUNBZ0lId2dXMjUxYldKbGNsMWNiaUFnSUNBZ0lDQWdJQ0FnSUh3Z1cyNTFiV0psY2l3Z2JuVnRZbVZ5TENCdWRXMWlaWEpkWEc0Z0lDQWdJQ0FnSUNBZ0lDQjhJRzUxYldKbGNsdGRYRzRnSUNBZ0lDQWdJQ0FnSUNCOElITjBjbWx1WjF0ZFhHNGdJQ0FnSUNBZ0lDazdYRzRnSUNBZ0lDQnlaWFIxY200Z1lXTmpPMXh1SUNBZ0lIMHNJSFJsZUhRcE8xeHVJQ0I5WEc1OVhHNGlYWDA9IiwiaW1wb3J0IHtcbiAgQW5zd2VycyxcbiAgQ2hvaWNlLFxuICBGYWxzeSxcbiAgSW5pdGlhbFJldHVyblZhbHVlLFxuICBQcmV2Q2FsbGVyLFxuICBQcm9tcHRPYmplY3QsXG4gIFByb21wdFR5cGUsXG4gIFZhbHVlT3JGdW5jLFxufSBmcm9tIFwicHJvbXB0c1wiO1xuaW1wb3J0IHByb21wdHMgZnJvbSBcInByb21wdHNcIjtcbmltcG9ydCB7IHBhcnNlQXJncywgUGFyc2VBcmdzQ29uZmlnIH0gZnJvbSBcInV0aWxcIjtcbmltcG9ydCB7IFdyaXRhYmxlLCBSZWFkYWJsZSB9IGZyb20gXCJzdHJlYW1cIjtcbmltcG9ydCB7IFBhcnNlQXJnc09wdGlvbnNDb25maWcsIFBhcnNlQXJnc1Jlc3VsdCB9IGZyb20gXCIuL3R5cGVzXCI7XG5pbXBvcnQgeyBMb2dnaW5nIH0gZnJvbSBcIkBkZWNhZi10cy9sb2dnaW5nXCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFJlcHJlc2VudHMgYSB1c2VyIGlucHV0IHByb21wdCB3aXRoIHZhcmlvdXMgY29uZmlndXJhdGlvbiBvcHRpb25zLlxuICogQHN1bW1hcnkgVGhpcyBjbGFzcyBwcm92aWRlcyBhIGZsZXhpYmxlIGludGVyZmFjZSBmb3IgY3JlYXRpbmcgYW5kIG1hbmFnaW5nIHVzZXIgaW5wdXQgcHJvbXB0cy5cbiAqIEl0IGltcGxlbWVudHMgdGhlIFByb21wdE9iamVjdCBpbnRlcmZhY2UgZnJvbSB0aGUgJ3Byb21wdHMnIGxpYnJhcnkgYW5kIG9mZmVycyBtZXRob2RzIHRvIHNldFxuICogdmFyaW91cyBwcm9wZXJ0aWVzIG9mIHRoZSBwcm9tcHQuIFRoZSBjbGFzcyBhbHNvIGluY2x1ZGVzIHN0YXRpYyBtZXRob2RzIGZvciBjb21tb24gaW5wdXQgc2NlbmFyaW9zXG4gKiBhbmQgYXJndW1lbnQgcGFyc2luZy5cbiAqXG4gKiBAdGVtcGxhdGUgUiAtIFRoZSB0eXBlIG9mIHRoZSBwcm9tcHQgbmFtZSwgZXh0ZW5kaW5nIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBwcm9tcHQsIHVzZWQgYXMgdGhlIGtleSBpbiB0aGUgcmV0dXJuZWQgYW5zd2VycyBvYmplY3QuXG4gKlxuICogQGNsYXNzXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgVXNlcklucHV0IH0gZnJvbSAnQGRlY2FmLXRzL3V0aWxzJztcbiAqXG4gKiAvLyBDcmVhdGUgYSBzaW1wbGUgdGV4dCBpbnB1dFxuICogY29uc3QgbmFtZUlucHV0ID0gbmV3IFVzZXJJbnB1dCgnbmFtZScpXG4gKiAgIC5zZXRNZXNzYWdlKCdXaGF0IGlzIHlvdXIgbmFtZT8nKVxuICogICAuc2V0SW5pdGlhbCgnVXNlcicpO1xuICpcbiAqIC8vIENyZWF0ZSBhIG51bWJlciBpbnB1dCB3aXRoIHZhbGlkYXRpb25cbiAqIGNvbnN0IGFnZUlucHV0ID0gbmV3IFVzZXJJbnB1dCgnYWdlJylcbiAqICAgLnNldFR5cGUoJ251bWJlcicpXG4gKiAgIC5zZXRNZXNzYWdlKCdIb3cgb2xkIGFyZSB5b3U/JylcbiAqICAgLnNldE1pbigwKVxuICogICAuc2V0TWF4KDEyMCk7XG4gKlxuICogLy8gQXNrIGZvciBpbnB1dCBhbmQgcHJvY2VzcyB0aGUgcmVzdWx0c1xuICogYXN5bmMgZnVuY3Rpb24gZ2V0VXNlckluZm8oKSB7XG4gKiAgIGNvbnN0IGFuc3dlcnMgPSBhd2FpdCBVc2VySW5wdXQuYXNrKFtuYW1lSW5wdXQsIGFnZUlucHV0XSk7XG4gKiAgIGNvbnNvbGUubG9nKGBIZWxsbyAke2Fuc3dlcnMubmFtZX0sIHlvdSBhcmUgJHthbnN3ZXJzLmFnZX0geWVhcnMgb2xkLmApO1xuICogfVxuICpcbiAqIGdldFVzZXJJbmZvKCk7XG4gKiBgYGBcbiAqXG4gKiBAbWVybWFpZFxuICogc2VxdWVuY2VEaWFncmFtXG4gKiAgIHBhcnRpY2lwYW50IENsaWVudFxuICogICBwYXJ0aWNpcGFudCBVc2VySW5wdXRcbiAqICAgcGFydGljaXBhbnQgUHJvbXB0TGlicmFyeVxuICpcbiAqICAgQ2xpZW50LT4+VXNlcklucHV0OiBuZXcgVXNlcklucHV0KG5hbWUpXG4gKiAgIENsaWVudC0+PlVzZXJJbnB1dDogc2V0TWVzc2FnZShtZXNzYWdlKVxuICogICBDbGllbnQtPj5Vc2VySW5wdXQ6IHNldFR5cGUodHlwZSlcbiAqICAgQ2xpZW50LT4+VXNlcklucHV0OiBzZXRJbml0aWFsKGluaXRpYWwpXG4gKiAgIENsaWVudC0+PlVzZXJJbnB1dDogT3RoZXIgY29uZmlndXJhdGlvbiBtZXRob2RzXG4gKlxuICogICBDbGllbnQtPj5Vc2VySW5wdXQ6IGFzaygpXG4gKiAgIFVzZXJJbnB1dC0+PlByb21wdExpYnJhcnk6IHByb21wdHMocXVlc3Rpb24pXG4gKiAgIFByb21wdExpYnJhcnktPj5DbGllbnQ6IERpc3BsYXkgcHJvbXB0XG4gKiAgIENsaWVudC0+PlByb21wdExpYnJhcnk6IFVzZXIgcHJvdmlkZXMgaW5wdXRcbiAqICAgUHJvbXB0TGlicmFyeS0+PlVzZXJJbnB1dDogUmV0dXJuIGFuc3dlcnNcbiAqICAgVXNlcklucHV0LT4+Q2xpZW50OiBSZXR1cm4gcHJvY2Vzc2VkIGFuc3dlcnNcbiAqL1xuZXhwb3J0IGNsYXNzIFVzZXJJbnB1dDxSIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nPiBpbXBsZW1lbnRzIFByb21wdE9iamVjdDxSPiB7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IGxvZ2dlciA9IExvZ2dpbmcuZm9yKFVzZXJJbnB1dCk7XG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIHR5cGUgb2YgdGhlIHByb21wdC5cbiAgICogQHN1bW1hcnkgRGV0ZXJtaW5lcyB0aGUgaW5wdXQgbWV0aG9kIChlLmcuLCB0ZXh0LCBudW1iZXIsIGNvbmZpcm0pLlxuICAgKi9cbiAgdHlwZTogUHJvbXB0VHlwZSB8IEZhbHN5IHwgUHJldkNhbGxlcjxSLCBQcm9tcHRUeXBlIHwgRmFsc3k+ID0gXCJ0ZXh0XCI7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgbmFtZSBvZiB0aGUgcHJvbXB0LlxuICAgKiBAc3VtbWFyeSBVc2VkIGFzIHRoZSBrZXkgaW4gdGhlIHJldHVybmVkIGFuc3dlcnMgb2JqZWN0LlxuICAgKi9cbiAgbmFtZTogVmFsdWVPckZ1bmM8Uj47XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgbWVzc2FnZSBkaXNwbGF5ZWQgdG8gdGhlIHVzZXIuXG4gICAqIEBzdW1tYXJ5IFRoZSBxdWVzdGlvbiBvciBpbnN0cnVjdGlvbiBwcmVzZW50ZWQgdG8gdGhlIHVzZXIuXG4gICAqL1xuICBtZXNzYWdlPzogVmFsdWVPckZ1bmM8c3RyaW5nPiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBpbml0aWFsIHZhbHVlIG9mIHRoZSBwcm9tcHQuXG4gICAqIEBzdW1tYXJ5IFRoZSBkZWZhdWx0IHZhbHVlIHByZXNlbnRlZCB0byB0aGUgdXNlci5cbiAgICovXG4gIGluaXRpYWw/OlxuICAgIHwgSW5pdGlhbFJldHVyblZhbHVlXG4gICAgfCBQcmV2Q2FsbGVyPFIsIEluaXRpYWxSZXR1cm5WYWx1ZSB8IFByb21pc2U8SW5pdGlhbFJldHVyblZhbHVlPj5cbiAgICB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBzdHlsZSBvZiB0aGUgcHJvbXB0LlxuICAgKiBAc3VtbWFyeSBEZXRlcm1pbmVzIHRoZSB2aXN1YWwgc3R5bGUgb2YgdGhlIHByb21wdC5cbiAgICovXG4gIHN0eWxlPzogc3RyaW5nIHwgUHJldkNhbGxlcjxSLCBzdHJpbmcgfCBGYWxzeT4gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgZm9ybWF0IGZ1bmN0aW9uIGZvciB0aGUgaW5wdXQuXG4gICAqIEBzdW1tYXJ5IEEgZnVuY3Rpb24gdG8gZm9ybWF0IHRoZSB1c2VyJ3MgaW5wdXQgYmVmb3JlIGl0J3MgcmV0dXJuZWQuXG4gICAqL1xuICBmb3JtYXQ/OiBQcmV2Q2FsbGVyPFIsIHZvaWQ+IHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIHZhbGlkYXRpb24gZnVuY3Rpb24gZm9yIHRoZSBpbnB1dC5cbiAgICogQHN1bW1hcnkgQSBmdW5jdGlvbiB0byB2YWxpZGF0ZSB0aGUgdXNlcidzIGlucHV0LlxuICAgKi9cbiAgdmFsaWRhdGU/OlxuICAgIHwgUHJldkNhbGxlcjxSLCBib29sZWFuIHwgc3RyaW5nIHwgUHJvbWlzZTxib29sZWFuIHwgc3RyaW5nPj5cbiAgICB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBvblN0YXRlIGNhbGxiYWNrIGZ1bmN0aW9uLlxuICAgKiBAc3VtbWFyeSBBIGZ1bmN0aW9uIGNhbGxlZCB3aGVuIHRoZSBzdGF0ZSBvZiB0aGUgcHJvbXB0IGNoYW5nZXMuXG4gICAqL1xuICBvblN0YXRlPzogUHJldkNhbGxlcjxSLCB2b2lkPiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBtaW5pbXVtIHZhbHVlIGZvciBudW1iZXIgaW5wdXRzLlxuICAgKiBAc3VtbWFyeSBUaGUgbG93ZXN0IG51bWJlciB0aGUgdXNlciBjYW4gaW5wdXQuXG4gICAqL1xuICBtaW4/OiBudW1iZXIgfCBQcmV2Q2FsbGVyPFIsIG51bWJlciB8IEZhbHN5PiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBtYXhpbXVtIHZhbHVlIGZvciBudW1iZXIgaW5wdXRzLlxuICAgKiBAc3VtbWFyeSBUaGUgaGlnaGVzdCBudW1iZXIgdGhlIHVzZXIgY2FuIGlucHV0LlxuICAgKi9cbiAgbWF4PzogbnVtYmVyIHwgUHJldkNhbGxlcjxSLCBudW1iZXIgfCBGYWxzeT4gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBXaGV0aGVyIHRvIGFsbG93IGZsb2F0IHZhbHVlcyBmb3IgbnVtYmVyIGlucHV0cy5cbiAgICogQHN1bW1hcnkgSWYgdHJ1ZSwgYWxsb3dzIGRlY2ltYWwgbnVtYmVycy5cbiAgICovXG4gIGZsb2F0PzogYm9vbGVhbiB8IFByZXZDYWxsZXI8UiwgYm9vbGVhbiB8IEZhbHN5PiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBudW1iZXIgb2YgZGVjaW1hbCBwbGFjZXMgdG8gcm91bmQgdG8gZm9yIGZsb2F0IGlucHV0cy5cbiAgICogQHN1bW1hcnkgRGV0ZXJtaW5lcyB0aGUgcHJlY2lzaW9uIG9mIGZsb2F0IGlucHV0cy5cbiAgICovXG4gIHJvdW5kPzogbnVtYmVyIHwgUHJldkNhbGxlcjxSLCBudW1iZXIgfCBGYWxzeT4gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBJbnN0cnVjdGlvbnMgZm9yIHRoZSB1c2VyLlxuICAgKiBAc3VtbWFyeSBBZGRpdGlvbmFsIGd1aWRhbmNlIHByb3ZpZGVkIHRvIHRoZSB1c2VyLlxuICAgKi9cbiAgaW5zdHJ1Y3Rpb25zPzogc3RyaW5nIHwgYm9vbGVhbiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBpbmNyZW1lbnQgdmFsdWUgZm9yIG51bWJlciBpbnB1dHMuXG4gICAqIEBzdW1tYXJ5IFRoZSBzdGVwIHNpemUgd2hlbiBpbmNyZWFzaW5nIG9yIGRlY3JlYXNpbmcgdGhlIG51bWJlci5cbiAgICovXG4gIGluY3JlbWVudD86IG51bWJlciB8IFByZXZDYWxsZXI8UiwgbnVtYmVyIHwgRmFsc3k+IHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIHNlcGFyYXRvciBmb3IgbGlzdCBpbnB1dHMuXG4gICAqIEBzdW1tYXJ5IFRoZSBjaGFyYWN0ZXIgdXNlZCB0byBzZXBhcmF0ZSBsaXN0IGl0ZW1zLlxuICAgKi9cbiAgc2VwYXJhdG9yPzogc3RyaW5nIHwgUHJldkNhbGxlcjxSLCBzdHJpbmcgfCBGYWxzeT4gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgYWN0aXZlIG9wdGlvbiBzdHlsZSBmb3Igc2VsZWN0IGlucHV0cy5cbiAgICogQHN1bW1hcnkgVGhlIHN0eWxlIGFwcGxpZWQgdG8gdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBvcHRpb24uXG4gICAqL1xuICBhY3RpdmU/OiBzdHJpbmcgfCBQcmV2Q2FsbGVyPFIsIHN0cmluZyB8IEZhbHN5PiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBpbmFjdGl2ZSBvcHRpb24gc3R5bGUgZm9yIHNlbGVjdCBpbnB1dHMuXG4gICAqIEBzdW1tYXJ5IFRoZSBzdHlsZSBhcHBsaWVkIHRvIG5vbi1zZWxlY3RlZCBvcHRpb25zLlxuICAgKi9cbiAgaW5hY3RpdmU/OiBzdHJpbmcgfCBQcmV2Q2FsbGVyPFIsIHN0cmluZyB8IEZhbHN5PiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBhdmFpbGFibGUgY2hvaWNlcyBmb3Igc2VsZWN0LCBtdWx0aXNlbGVjdCwgb3IgYXV0b2NvbXBsZXRlIGlucHV0cy5cbiAgICogQHN1bW1hcnkgQW4gYXJyYXkgb2Ygb3B0aW9ucyB0aGF0IHRoZSB1c2VyIGNhbiBzZWxlY3QgZnJvbSBpbiBjaG9pY2UtYmFzZWQgcHJvbXB0cy5cbiAgICovXG4gIGNob2ljZXM/OiBDaG9pY2VbXSB8IFByZXZDYWxsZXI8UiwgQ2hvaWNlW10gfCBGYWxzeT4gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgaGludCB0ZXh0IGZvciB0aGUgcHJvbXB0LlxuICAgKiBAc3VtbWFyeSBBZGRpdGlvbmFsIGluZm9ybWF0aW9uIGRpc3BsYXllZCB0byB0aGUgdXNlci5cbiAgICovXG4gIGhpbnQ/OiBzdHJpbmcgfCBQcmV2Q2FsbGVyPFIsIHN0cmluZyB8IEZhbHN5PiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSB3YXJuaW5nIHRleHQgZm9yIHRoZSBwcm9tcHQuXG4gICAqIEBzdW1tYXJ5IEEgd2FybmluZyBtZXNzYWdlIGRpc3BsYXllZCB0byB0aGUgdXNlci5cbiAgICovXG4gIHdhcm4/OiBzdHJpbmcgfCBQcmV2Q2FsbGVyPFIsIHN0cmluZyB8IEZhbHN5PiB8IHVuZGVmaW5lZDtcblxuICBzdWdnZXN0PzogKChpbnB1dDogYW55LCBjaG9pY2VzOiBDaG9pY2VbXSkgPT4gUHJvbWlzZTxhbnk+KSB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBsaW1pdCBmb3IgbGlzdCBpbnB1dHMuXG4gICAqIEBzdW1tYXJ5IFRoZSBtYXhpbXVtIG51bWJlciBvZiBpdGVtcyB0aGF0IGNhbiBiZSBzZWxlY3RlZC5cbiAgICovXG4gIGxpbWl0PzogbnVtYmVyIHwgUHJldkNhbGxlcjxSLCBudW1iZXIgfCBGYWxzeT4gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgbWFzayBmb3IgcGFzc3dvcmQgaW5wdXRzLlxuICAgKiBAc3VtbWFyeSBUaGUgY2hhcmFjdGVyIHVzZWQgdG8gaGlkZSB0aGUgdXNlcidzIGlucHV0LlxuICAgKi9cbiAgbWFzaz86IHN0cmluZyB8IFByZXZDYWxsZXI8Uiwgc3RyaW5nIHwgRmFsc3k+IHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIHN0ZG91dCBzdHJlYW0gZm9yIHRoZSBwcm9tcHQuXG4gICAqIEBzdW1tYXJ5IFRoZSBvdXRwdXQgc3RyZWFtIHVzZWQgYnkgdGhlIHByb21wdC5cbiAgICovXG4gIHN0ZG91dD86IFdyaXRhYmxlIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIHN0ZGluIHN0cmVhbSBmb3IgdGhlIHByb21wdC5cbiAgICogQHN1bW1hcnkgVGhlIGlucHV0IHN0cmVhbSB1c2VkIGJ5IHRoZSBwcm9tcHQuXG4gICAqL1xuICBzdGRpbj86IFJlYWRhYmxlIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKG5hbWU6IFZhbHVlT3JGdW5jPFI+KSB7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU2V0cyB0aGUgdHlwZSBvZiB0aGUgcHJvbXB0LlxuICAgKiBAc3VtbWFyeSBDb25maWd1cmVzIHRoZSBpbnB1dCBtZXRob2QgZm9yIHRoZSBwcm9tcHQuXG4gICAqXG4gICAqIEBwYXJhbSB0eXBlIC0gVGhlIHR5cGUgb2YgdGhlIHByb21wdC5cbiAgICogQHJldHVybnMgVGhpcyBVc2VySW5wdXQgaW5zdGFuY2UgZm9yIG1ldGhvZCBjaGFpbmluZy5cbiAgICovXG4gIHNldFR5cGUodHlwZTogUHJvbXB0VHlwZSB8IEZhbHN5IHwgUHJldkNhbGxlcjxSLCBQcm9tcHRUeXBlIHwgRmFsc3k+KTogdGhpcyB7XG4gICAgVXNlcklucHV0LmxvZ2dlci52ZXJib3NlKGBTZXR0aW5nIHR5cGUgdG86ICR7dHlwZX1gKTtcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBTZXRzIHRoZSBtZXNzYWdlIG9mIHRoZSBwcm9tcHQuXG4gICAqIEBzdW1tYXJ5IENvbmZpZ3VyZXMgdGhlIHF1ZXN0aW9uIG9yIGluc3RydWN0aW9uIHByZXNlbnRlZCB0byB0aGUgdXNlci5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIG1lc3NhZ2UgdG8gYmUgZGlzcGxheWVkLlxuICAgKiBAcmV0dXJucyBUaGlzIFVzZXJJbnB1dCBpbnN0YW5jZSBmb3IgbWV0aG9kIGNoYWluaW5nLlxuICAgKi9cbiAgc2V0TWVzc2FnZSh2YWx1ZTogVmFsdWVPckZ1bmM8c3RyaW5nPiB8IHVuZGVmaW5lZCk6IHRoaXMge1xuICAgIFVzZXJJbnB1dC5sb2dnZXIudmVyYm9zZShgU2V0dGluZyBtZXNzYWdlIHRvOiAke3ZhbHVlfWApO1xuICAgIHRoaXMubWVzc2FnZSA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBTZXRzIHRoZSBpbml0aWFsIHZhbHVlIG9mIHRoZSBwcm9tcHQuXG4gICAqIEBzdW1tYXJ5IENvbmZpZ3VyZXMgdGhlIGRlZmF1bHQgdmFsdWUgcHJlc2VudGVkIHRvIHRoZSB1c2VyLlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgaW5pdGlhbCB2YWx1ZS5cbiAgICogQHJldHVybnMgVGhpcyBVc2VySW5wdXQgaW5zdGFuY2UgZm9yIG1ldGhvZCBjaGFpbmluZy5cbiAgICovXG4gIHNldEluaXRpYWwoXG4gICAgdmFsdWU6XG4gICAgICB8IEluaXRpYWxSZXR1cm5WYWx1ZVxuICAgICAgfCBQcmV2Q2FsbGVyPFIsIEluaXRpYWxSZXR1cm5WYWx1ZSB8IFByb21pc2U8SW5pdGlhbFJldHVyblZhbHVlPj5cbiAgICAgIHwgdW5kZWZpbmVkXG4gICk6IHRoaXMge1xuICAgIFVzZXJJbnB1dC5sb2dnZXIudmVyYm9zZShgU2V0dGluZyBpbml0aWFsIHZhbHVlIHRvOiAke3ZhbHVlfWApO1xuICAgIHRoaXMuaW5pdGlhbCA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBTZXRzIHRoZSBzdHlsZSBvZiB0aGUgcHJvbXB0LlxuICAgKiBAc3VtbWFyeSBDb25maWd1cmVzIHRoZSB2aXN1YWwgc3R5bGUgb2YgdGhlIHByb21wdC5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIHN0eWxlIHRvIGJlIGFwcGxpZWQuXG4gICAqIEByZXR1cm5zIFRoaXMgVXNlcklucHV0IGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAqL1xuICBzZXRTdHlsZSh2YWx1ZTogc3RyaW5nIHwgUHJldkNhbGxlcjxSLCBzdHJpbmcgfCBGYWxzeT4gfCB1bmRlZmluZWQpOiB0aGlzIHtcbiAgICBVc2VySW5wdXQubG9nZ2VyLnZlcmJvc2UoYFNldHRpbmcgc3R5bGUgdG86ICR7dmFsdWV9YCk7XG4gICAgdGhpcy5zdHlsZSA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBTZXRzIHRoZSBmb3JtYXQgZnVuY3Rpb24gb2YgdGhlIHByb21wdC5cbiAgICogQHN1bW1hcnkgQ29uZmlndXJlcyBhIGZ1bmN0aW9uIHRvIGZvcm1hdCB0aGUgdXNlcidzIGlucHV0IGJlZm9yZSBpdCdzIHJldHVybmVkLlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgZm9ybWF0IGZ1bmN0aW9uLlxuICAgKiBAcmV0dXJucyBUaGlzIFVzZXJJbnB1dCBpbnN0YW5jZSBmb3IgbWV0aG9kIGNoYWluaW5nLlxuICAgKi9cbiAgc2V0Rm9ybWF0KHZhbHVlOiBQcmV2Q2FsbGVyPFIsIHZvaWQ+IHwgdW5kZWZpbmVkKTogdGhpcyB7XG4gICAgVXNlcklucHV0LmxvZ2dlci52ZXJib3NlKGBTZXR0aW5nIGZvcm1hdCBmdW5jdGlvbmApO1xuICAgIHRoaXMuZm9ybWF0ID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFNldHMgdGhlIHZhbGlkYXRpb24gZnVuY3Rpb24gb2YgdGhlIHByb21wdC5cbiAgICogQHN1bW1hcnkgQ29uZmlndXJlcyBhIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIHRoZSB1c2VyJ3MgaW5wdXQuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWxpZGF0aW9uIGZ1bmN0aW9uLlxuICAgKiBAcmV0dXJucyBUaGlzIFVzZXJJbnB1dCBpbnN0YW5jZSBmb3IgbWV0aG9kIGNoYWluaW5nLlxuICAgKi9cbiAgc2V0VmFsaWRhdGUoXG4gICAgdmFsdWU6XG4gICAgICB8IFByZXZDYWxsZXI8UiwgYm9vbGVhbiB8IHN0cmluZyB8IFByb21pc2U8Ym9vbGVhbiB8IHN0cmluZz4+XG4gICAgICB8IHVuZGVmaW5lZFxuICApOiB0aGlzIHtcbiAgICBVc2VySW5wdXQubG9nZ2VyLnZlcmJvc2UoYFNldHRpbmcgdmFsaWRhdGUgZnVuY3Rpb25gKTtcbiAgICB0aGlzLnZhbGlkYXRlID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFNldHMgdGhlIG9uU3RhdGUgY2FsbGJhY2sgb2YgdGhlIHByb21wdC5cbiAgICogQHN1bW1hcnkgQ29uZmlndXJlcyBhIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBzdGF0ZSBvZiB0aGUgcHJvbXB0IGNoYW5nZXMuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBvblN0YXRlIGNhbGxiYWNrIGZ1bmN0aW9uLlxuICAgKiBAcmV0dXJucyBUaGlzIFVzZXJJbnB1dCBpbnN0YW5jZSBmb3IgbWV0aG9kIGNoYWluaW5nLlxuICAgKi9cbiAgc2V0T25TdGF0ZSh2YWx1ZTogUHJldkNhbGxlcjxSLCB2b2lkPiB8IHVuZGVmaW5lZCk6IHRoaXMge1xuICAgIFVzZXJJbnB1dC5sb2dnZXIudmVyYm9zZShgU2V0dGluZyBvblN0YXRlIGNhbGxiYWNrYCk7XG4gICAgdGhpcy5vblN0YXRlID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFNldHMgdGhlIG1pbmltdW0gdmFsdWUgZm9yIG51bWJlciBpbnB1dHMuXG4gICAqIEBzdW1tYXJ5IENvbmZpZ3VyZXMgdGhlIGxvd2VzdCBudW1iZXIgdGhlIHVzZXIgY2FuIGlucHV0LlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgbWluaW11bSB2YWx1ZS5cbiAgICogQHJldHVybnMgVGhpcyBVc2VySW5wdXQgaW5zdGFuY2UgZm9yIG1ldGhvZCBjaGFpbmluZy5cbiAgICovXG4gIHNldE1pbih2YWx1ZTogbnVtYmVyIHwgUHJldkNhbGxlcjxSLCBudW1iZXIgfCBGYWxzeT4gfCB1bmRlZmluZWQpOiB0aGlzIHtcbiAgICBVc2VySW5wdXQubG9nZ2VyLnZlcmJvc2UoYFNldHRpbmcgbWluIHZhbHVlIHRvOiAke3ZhbHVlfWApO1xuICAgIHRoaXMubWluID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFNldHMgdGhlIG1heGltdW0gdmFsdWUgZm9yIG51bWJlciBpbnB1dHMuXG4gICAqIEBzdW1tYXJ5IENvbmZpZ3VyZXMgdGhlIGhpZ2hlc3QgbnVtYmVyIHRoZSB1c2VyIGNhbiBpbnB1dC5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIG1heGltdW0gdmFsdWUuXG4gICAqIEByZXR1cm5zIFRoaXMgVXNlcklucHV0IGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAqL1xuICBzZXRNYXgodmFsdWU6IG51bWJlciB8IFByZXZDYWxsZXI8UiwgbnVtYmVyIHwgRmFsc3k+IHwgdW5kZWZpbmVkKTogdGhpcyB7XG4gICAgVXNlcklucHV0LmxvZ2dlci52ZXJib3NlKGBTZXR0aW5nIG1heCB2YWx1ZSB0bzogJHt2YWx1ZX1gKTtcbiAgICB0aGlzLm1heCA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBTZXRzIHdoZXRoZXIgdG8gYWxsb3cgZmxvYXQgdmFsdWVzIGZvciBudW1iZXIgaW5wdXRzLlxuICAgKiBAc3VtbWFyeSBDb25maWd1cmVzIHdoZXRoZXIgZGVjaW1hbCBudW1iZXJzIGFyZSBhbGxvd2VkLlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgLSBXaGV0aGVyIHRvIGFsbG93IGZsb2F0IHZhbHVlcy5cbiAgICogQHJldHVybnMgVGhpcyBVc2VySW5wdXQgaW5zdGFuY2UgZm9yIG1ldGhvZCBjaGFpbmluZy5cbiAgICovXG4gIHNldEZsb2F0KHZhbHVlOiBib29sZWFuIHwgUHJldkNhbGxlcjxSLCBib29sZWFuIHwgRmFsc3k+IHwgdW5kZWZpbmVkKTogdGhpcyB7XG4gICAgVXNlcklucHV0LmxvZ2dlci52ZXJib3NlKGBTZXR0aW5nIGZsb2F0IHRvOiAke3ZhbHVlfWApO1xuICAgIHRoaXMuZmxvYXQgPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU2V0cyB0aGUgbnVtYmVyIG9mIGRlY2ltYWwgcGxhY2VzIHRvIHJvdW5kIHRvIGZvciBmbG9hdCBpbnB1dHMuXG4gICAqIEBzdW1tYXJ5IENvbmZpZ3VyZXMgdGhlIHByZWNpc2lvbiBvZiBmbG9hdCBpbnB1dHMuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBudW1iZXIgb2YgZGVjaW1hbCBwbGFjZXMuXG4gICAqIEByZXR1cm5zIFRoaXMgVXNlcklucHV0IGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAqL1xuICBzZXRSb3VuZCh2YWx1ZTogbnVtYmVyIHwgUHJldkNhbGxlcjxSLCBudW1iZXIgfCBGYWxzeT4gfCB1bmRlZmluZWQpOiB0aGlzIHtcbiAgICBVc2VySW5wdXQubG9nZ2VyLnZlcmJvc2UoYFNldHRpbmcgcm91bmQgdG86ICR7dmFsdWV9YCk7XG4gICAgdGhpcy5yb3VuZCA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBTZXRzIHRoZSBpbnN0cnVjdGlvbnMgZm9yIHRoZSB1c2VyLlxuICAgKiBAc3VtbWFyeSBDb25maWd1cmVzIGFkZGl0aW9uYWwgZ3VpZGFuY2UgcHJvdmlkZWQgdG8gdGhlIHVzZXIuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBpbnN0cnVjdGlvbnMuXG4gICAqIEByZXR1cm5zIFRoaXMgVXNlcklucHV0IGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAqL1xuICBzZXRJbnN0cnVjdGlvbnModmFsdWU6IHN0cmluZyB8IGJvb2xlYW4gfCB1bmRlZmluZWQpOiB0aGlzIHtcbiAgICBVc2VySW5wdXQubG9nZ2VyLnZlcmJvc2UoYFNldHRpbmcgaW5zdHJ1Y3Rpb25zIHRvOiAke3ZhbHVlfWApO1xuICAgIHRoaXMuaW5zdHJ1Y3Rpb25zID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFNldHMgdGhlIGluY3JlbWVudCB2YWx1ZSBmb3IgbnVtYmVyIGlucHV0cy5cbiAgICogQHN1bW1hcnkgQ29uZmlndXJlcyB0aGUgc3RlcCBzaXplIHdoZW4gaW5jcmVhc2luZyBvciBkZWNyZWFzaW5nIHRoZSBudW1iZXIuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBpbmNyZW1lbnQgdmFsdWUuXG4gICAqIEByZXR1cm5zIFRoaXMgVXNlcklucHV0IGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAqL1xuICBzZXRJbmNyZW1lbnQoXG4gICAgdmFsdWU6IG51bWJlciB8IFByZXZDYWxsZXI8UiwgbnVtYmVyIHwgRmFsc3k+IHwgdW5kZWZpbmVkXG4gICk6IHRoaXMge1xuICAgIFVzZXJJbnB1dC5sb2dnZXIudmVyYm9zZShgU2V0dGluZyBpbmNyZW1lbnQgdG86ICR7dmFsdWV9YCk7XG4gICAgdGhpcy5pbmNyZW1lbnQgPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU2V0cyB0aGUgc2VwYXJhdG9yIGZvciBsaXN0IGlucHV0cy5cbiAgICogQHN1bW1hcnkgQ29uZmlndXJlcyB0aGUgY2hhcmFjdGVyIHVzZWQgdG8gc2VwYXJhdGUgbGlzdCBpdGVtcy5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIHNlcGFyYXRvciBjaGFyYWN0ZXIuXG4gICAqIEByZXR1cm5zIFRoaXMgVXNlcklucHV0IGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAqL1xuICBzZXRTZXBhcmF0b3IoXG4gICAgdmFsdWU6IHN0cmluZyB8IFByZXZDYWxsZXI8Uiwgc3RyaW5nIHwgRmFsc3k+IHwgdW5kZWZpbmVkXG4gICk6IHRoaXMge1xuICAgIFVzZXJJbnB1dC5sb2dnZXIudmVyYm9zZShgU2V0dGluZyBzZXBhcmF0b3IgdG86ICR7dmFsdWV9YCk7XG4gICAgdGhpcy5zZXBhcmF0b3IgPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU2V0cyB0aGUgYWN0aXZlIG9wdGlvbiBzdHlsZSBmb3Igc2VsZWN0IGlucHV0cy5cbiAgICogQHN1bW1hcnkgQ29uZmlndXJlcyB0aGUgc3R5bGUgYXBwbGllZCB0byB0aGUgY3VycmVudGx5IHNlbGVjdGVkIG9wdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIGFjdGl2ZSBvcHRpb24gc3R5bGUuXG4gICAqIEByZXR1cm5zIFRoaXMgVXNlcklucHV0IGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAqL1xuICBzZXRBY3RpdmUodmFsdWU6IHN0cmluZyB8IFByZXZDYWxsZXI8Uiwgc3RyaW5nIHwgRmFsc3k+IHwgdW5kZWZpbmVkKTogdGhpcyB7XG4gICAgVXNlcklucHV0LmxvZ2dlci52ZXJib3NlKGBTZXR0aW5nIGFjdGl2ZSBzdHlsZSB0bzogJHt2YWx1ZX1gKTtcbiAgICB0aGlzLmFjdGl2ZSA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBTZXRzIHRoZSBpbmFjdGl2ZSBvcHRpb24gc3R5bGUgZm9yIHNlbGVjdCBpbnB1dHMuXG4gICAqIEBzdW1tYXJ5IENvbmZpZ3VyZXMgdGhlIHN0eWxlIGFwcGxpZWQgdG8gbm9uLXNlbGVjdGVkIG9wdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBpbmFjdGl2ZSBvcHRpb24gc3R5bGUuXG4gICAqIEByZXR1cm5zIFRoaXMgVXNlcklucHV0IGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAqL1xuICBzZXRJbmFjdGl2ZSh2YWx1ZTogc3RyaW5nIHwgUHJldkNhbGxlcjxSLCBzdHJpbmcgfCBGYWxzeT4gfCB1bmRlZmluZWQpOiB0aGlzIHtcbiAgICBVc2VySW5wdXQubG9nZ2VyLnZlcmJvc2UoYFNldHRpbmcgaW5hY3RpdmUgc3R5bGUgdG86ICR7dmFsdWV9YCk7XG4gICAgdGhpcy5pbmFjdGl2ZSA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBTZXRzIHRoZSBjaG9pY2VzIGZvciBzZWxlY3QsIG11bHRpc2VsZWN0LCBvciBhdXRvY29tcGxldGUgaW5wdXRzLlxuICAgKiBAc3VtbWFyeSBDb25maWd1cmVzIHRoZSBhdmFpbGFibGUgb3B0aW9ucyB0aGF0IHRoZSB1c2VyIGNhbiBzZWxlY3QgZnJvbSBpbiBjaG9pY2UtYmFzZWQgcHJvbXB0cy5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIGFycmF5IG9mIGNob2ljZXMgb3IgYSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgdGhlIGNob2ljZXMuXG4gICAqIEByZXR1cm5zIFRoaXMgVXNlcklucHV0IGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAqL1xuICBzZXRDaG9pY2VzKFxuICAgIHZhbHVlOiBDaG9pY2VbXSB8IFByZXZDYWxsZXI8UiwgQ2hvaWNlW10gfCBGYWxzeT4gfCB1bmRlZmluZWRcbiAgKTogdGhpcyB7XG4gICAgVXNlcklucHV0LmxvZ2dlci52ZXJib3NlKGBTZXR0aW5nIGNob2ljZXM6ICR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfWApO1xuICAgIHRoaXMuY2hvaWNlcyA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBTZXRzIHRoZSBoaW50IHRleHQgZm9yIHRoZSBwcm9tcHQuXG4gICAqIEBzdW1tYXJ5IENvbmZpZ3VyZXMgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBkaXNwbGF5ZWQgdG8gdGhlIHVzZXIuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBoaW50IHRleHQuXG4gICAqIEByZXR1cm5zIFRoaXMgVXNlcklucHV0IGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAqL1xuICBzZXRIaW50KHZhbHVlOiBzdHJpbmcgfCBQcmV2Q2FsbGVyPFIsIHN0cmluZyB8IEZhbHN5PiB8IHVuZGVmaW5lZCk6IHRoaXMge1xuICAgIFVzZXJJbnB1dC5sb2dnZXIudmVyYm9zZShgU2V0dGluZyBoaW50IHRvOiAke3ZhbHVlfWApO1xuICAgIHRoaXMuaGludCA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBTZXRzIHRoZSB3YXJuaW5nIHRleHQgZm9yIHRoZSBwcm9tcHQuXG4gICAqIEBzdW1tYXJ5IENvbmZpZ3VyZXMgYSB3YXJuaW5nIG1lc3NhZ2UgZGlzcGxheWVkIHRvIHRoZSB1c2VyLlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgd2FybmluZyB0ZXh0LlxuICAgKiBAcmV0dXJucyBUaGlzIFVzZXJJbnB1dCBpbnN0YW5jZSBmb3IgbWV0aG9kIGNoYWluaW5nLlxuICAgKi9cbiAgc2V0V2Fybih2YWx1ZTogc3RyaW5nIHwgUHJldkNhbGxlcjxSLCBzdHJpbmcgfCBGYWxzeT4gfCB1bmRlZmluZWQpOiB0aGlzIHtcbiAgICBVc2VySW5wdXQubG9nZ2VyLnZlcmJvc2UoYFNldHRpbmcgd2FybiB0bzogJHt2YWx1ZX1gKTtcbiAgICB0aGlzLndhcm4gPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU2V0cyB0aGUgc3VnZ2VzdGlvbiBmdW5jdGlvbiBmb3IgYXV0b2NvbXBsZXRlIGlucHV0cy5cbiAgICogQHN1bW1hcnkgQ29uZmlndXJlcyBhIGZ1bmN0aW9uIHRoYXQgcHJvdmlkZXMgc3VnZ2VzdGlvbnMgYmFzZWQgb24gdGhlIHVzZXIncyBpbnB1dCBhbmQgYXZhaWxhYmxlIGNob2ljZXMuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIEEgZnVuY3Rpb24gdGhhdCB0YWtlcyB0aGUgY3VycmVudCBpbnB1dCBhbmQgYXZhaWxhYmxlIGNob2ljZXMgYW5kIHJldHVybnMgYSBQcm9taXNlIHJlc29sdmluZyB0byBzdWdnZXN0aW9ucy5cbiAgICogQHJldHVybnMgVGhpcyBVc2VySW5wdXQgaW5zdGFuY2UgZm9yIG1ldGhvZCBjaGFpbmluZy5cbiAgICovXG4gIHNldFN1Z2dlc3QoXG4gICAgdmFsdWU6ICgoaW5wdXQ6IGFueSwgY2hvaWNlczogQ2hvaWNlW10pID0+IFByb21pc2U8YW55PikgfCB1bmRlZmluZWRcbiAgKTogdGhpcyB7XG4gICAgVXNlcklucHV0LmxvZ2dlci52ZXJib3NlKGBTZXR0aW5nIHN1Z2dlc3QgZnVuY3Rpb25gKTtcbiAgICB0aGlzLnN1Z2dlc3QgPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU2V0cyB0aGUgbGltaXQgZm9yIGxpc3QgaW5wdXRzLlxuICAgKiBAc3VtbWFyeSBDb25maWd1cmVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBpdGVtcyB0aGF0IGNhbiBiZSBzZWxlY3RlZCBpbiBsaXN0LXR5cGUgcHJvbXB0cy5cbiAgICogQHRlbXBsYXRlIFIgLSBUaGUgdHlwZSBvZiB0aGUgcHJvbXB0IG5hbWUsIGV4dGVuZGluZyBzdHJpbmcuXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBtYXhpbXVtIG51bWJlciBvZiBpdGVtcyB0aGF0IGNhbiBiZSBzZWxlY3RlZCwgb3IgYSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgdGhpcyB2YWx1ZS5cbiAgICogQHJldHVybiBUaGlzIFVzZXJJbnB1dCBpbnN0YW5jZSBmb3IgbWV0aG9kIGNoYWluaW5nLlxuICAgKi9cbiAgc2V0TGltaXQodmFsdWU6IG51bWJlciB8IFByZXZDYWxsZXI8UiwgbnVtYmVyIHwgRmFsc3k+IHwgdW5kZWZpbmVkKTogdGhpcyB7XG4gICAgVXNlcklucHV0LmxvZ2dlci52ZXJib3NlKGBTZXR0aW5nIGxpbWl0IHRvOiAke3ZhbHVlfWApO1xuICAgIHRoaXMubGltaXQgPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU2V0cyB0aGUgbWFzayBmb3IgcGFzc3dvcmQgaW5wdXRzLlxuICAgKiBAc3VtbWFyeSBDb25maWd1cmVzIHRoZSBjaGFyYWN0ZXIgdXNlZCB0byBoaWRlIHRoZSB1c2VyJ3MgaW5wdXQgaW4gcGFzc3dvcmQtdHlwZSBwcm9tcHRzLlxuICAgKiBAdGVtcGxhdGUgUiAtIFRoZSB0eXBlIG9mIHRoZSBwcm9tcHQgbmFtZSwgZXh0ZW5kaW5nIHN0cmluZy5cbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIGNoYXJhY3RlciB1c2VkIHRvIG1hc2sgdGhlIGlucHV0LCBvciBhIGZ1bmN0aW9uIHRvIGRldGVybWluZSB0aGlzIHZhbHVlLlxuICAgKiBAcmV0dXJuIFRoaXMgVXNlcklucHV0IGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAqL1xuICBzZXRNYXNrKHZhbHVlOiBzdHJpbmcgfCBQcmV2Q2FsbGVyPFIsIHN0cmluZyB8IEZhbHN5PiB8IHVuZGVmaW5lZCk6IHRoaXMge1xuICAgIFVzZXJJbnB1dC5sb2dnZXIudmVyYm9zZShgU2V0dGluZyBtYXNrIHRvOiAke3ZhbHVlfWApO1xuICAgIHRoaXMubWFzayA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBTZXRzIHRoZSBzdGRvdXQgc3RyZWFtIGZvciB0aGUgcHJvbXB0LlxuICAgKiBAc3VtbWFyeSBDb25maWd1cmVzIHRoZSBvdXRwdXQgc3RyZWFtIHVzZWQgYnkgdGhlIHByb21wdCBmb3IgZGlzcGxheWluZyBtZXNzYWdlcyBhbmQgcmVzdWx0cy5cbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byBiZSB1c2VkIGFzIHN0ZG91dC5cbiAgICogQHJldHVybiBUaGlzIFVzZXJJbnB1dCBpbnN0YW5jZSBmb3IgbWV0aG9kIGNoYWluaW5nLlxuICAgKi9cbiAgc2V0U3Rkb3V0KHZhbHVlOiBXcml0YWJsZSB8IHVuZGVmaW5lZCk6IHRoaXMge1xuICAgIFVzZXJJbnB1dC5sb2dnZXIudmVyYm9zZShgU2V0dGluZyBzdGRvdXQgc3RyZWFtYCk7XG4gICAgdGhpcy5zdGRvdXQgPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFNldHMgdGhlIHN0ZGluIHN0cmVhbSBmb3IgdGhlIHByb21wdC5cbiAgICogQHN1bW1hcnkgQ29uZmlndXJlcyB0aGUgaW5wdXQgc3RyZWFtIHVzZWQgYnkgdGhlIHByb21wdCBmb3IgcmVjZWl2aW5nIHVzZXIgaW5wdXQuXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBSZWFkYWJsZSBzdHJlYW0gdG8gYmUgdXNlZCBhcyBzdGRpbi5cbiAgICogQHJldHVybiBUaGlzIFVzZXJJbnB1dCBpbnN0YW5jZSBmb3IgbWV0aG9kIGNoYWluaW5nLlxuICAgKi9cbiAgc2V0U3RkaW4odmFsdWU6IFJlYWRhYmxlIHwgdW5kZWZpbmVkKTogdGhpcyB7XG4gICAgdGhpcy5zdGRpbiA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBBc2tzIHRoZSB1c2VyIGZvciBpbnB1dCBiYXNlZCBvbiB0aGUgY3VycmVudCBVc2VySW5wdXQgY29uZmlndXJhdGlvbi5cbiAgICogQHN1bW1hcnkgUHJvbXB0cyB0aGUgdXNlciBhbmQgcmV0dXJucyB0aGVpciByZXNwb25zZSBhcyBhIHNpbmdsZSB2YWx1ZS5cbiAgICogQHRlbXBsYXRlIFIgLSBUaGUgdHlwZSBvZiB0aGUgcHJvbXB0IG5hbWUsIGV4dGVuZGluZyBzdHJpbmcuXG4gICAqIEByZXR1cm4gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIHVzZXIncyBhbnN3ZXIuXG4gICAqL1xuICBhc3luYyBhc2soKSB7XG4gICAgcmV0dXJuIChhd2FpdCBVc2VySW5wdXQuYXNrKHRoaXMpKVt0aGlzLm5hbWUgYXMga2V5b2YgQW5zd2VyczxSPl07XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEFza3MgdGhlIHVzZXIgb25lIG9yIG1vcmUgcXVlc3Rpb25zIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBVc2VySW5wdXQgY29uZmlndXJhdGlvbnMuXG4gICAqIEBzdW1tYXJ5IFByb21wdHMgdGhlIHVzZXIgd2l0aCBvbmUgb3IgbW9yZSBxdWVzdGlvbnMgYW5kIHJldHVybnMgdGhlaXIgYW5zd2VycyBhcyBhbiBvYmplY3QuXG4gICAqIEB0ZW1wbGF0ZSBSIC0gVGhlIHR5cGUgb2YgdGhlIHByb21wdCBuYW1lLCBleHRlbmRpbmcgc3RyaW5nLlxuICAgKiBAcGFyYW0gcXVlc3Rpb24gLSBBIHNpbmdsZSBVc2VySW5wdXQgaW5zdGFuY2Ugb3IgYW4gYXJyYXkgb2YgVXNlcklucHV0IGluc3RhbmNlcy5cbiAgICogQHJldHVybiBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhbiBvYmplY3QgY29udGFpbmluZyB0aGUgdXNlcidzIGFuc3dlcnMuXG4gICAqIEBtZXJtYWlkXG4gICAqIHNlcXVlbmNlRGlhZ3JhbVxuICAgKiAgIHBhcnRpY2lwYW50IFUgYXMgVXNlclxuICAgKiAgIHBhcnRpY2lwYW50IEEgYXMgYXNrIG1ldGhvZFxuICAgKiAgIHBhcnRpY2lwYW50IFAgYXMgcHJvbXB0cyBsaWJyYXJ5XG4gICAqICAgQS0+PlA6IENhbGwgcHJvbXB0cyB3aXRoIHF1ZXN0aW9uKHMpXG4gICAqICAgUC0+PlU6IERpc3BsYXkgcHJvbXB0KHMpXG4gICAqICAgVS0+PlA6IFByb3ZpZGUgaW5wdXRcbiAgICogICBQLT4+QTogUmV0dXJuIGFuc3dlcnNcbiAgICogICBBLT4+QTogUHJvY2VzcyBhbnN3ZXJzXG4gICAqICAgQS0tPj5DYWxsZXI6IFJldHVybiBwcm9jZXNzZWQgYW5zd2Vyc1xuICAgKi9cbiAgc3RhdGljIGFzeW5jIGFzazxSIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nPihcbiAgICBxdWVzdGlvbjogVXNlcklucHV0PFI+IHwgVXNlcklucHV0PFI+W11cbiAgKSB7XG4gICAgY29uc3QgbG9nID0gVXNlcklucHV0LmxvZ2dlci5mb3IodGhpcy5hc2spO1xuICAgIGlmICghQXJyYXkuaXNBcnJheShxdWVzdGlvbikpIHtcbiAgICAgIHF1ZXN0aW9uID0gW3F1ZXN0aW9uXTtcbiAgICB9XG4gICAgbGV0IGFuc3dlcnM6IEFuc3dlcnM8Uj47XG4gICAgdHJ5IHtcbiAgICAgIGxvZy52ZXJib3NlKFxuICAgICAgICBgQXNraW5nIHF1ZXN0aW9uczogJHtxdWVzdGlvbi5tYXAoKHEpID0+IHEubmFtZSkuam9pbihcIiwgXCIpfWBcbiAgICAgICk7XG4gICAgICBhbnN3ZXJzID0gYXdhaXQgcHJvbXB0cyhxdWVzdGlvbik7XG4gICAgICBsb2cudmVyYm9zZShgUmVjZWl2ZWQgYW5zd2VyczogJHtKU09OLnN0cmluZ2lmeShhbnN3ZXJzLCBudWxsLCAyKX1gKTtcbiAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciB3aGlsZSBnZXR0aW5nIGlucHV0OiAke2Vycm9yfWApO1xuICAgIH1cbiAgICByZXR1cm4gYW5zd2VycztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQXNrcyB0aGUgdXNlciBmb3IgYSBudW1iZXIgaW5wdXQuXG4gICAqIEBzdW1tYXJ5IFByb21wdHMgdGhlIHVzZXIgdG8gZW50ZXIgYSBudW1iZXIsIHdpdGggb3B0aW9uYWwgbWluaW11bSwgbWF4aW11bSwgYW5kIGluaXRpYWwgdmFsdWVzLlxuICAgKiBAcGFyYW0gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBwcm9tcHQsIHVzZWQgYXMgdGhlIGtleSBpbiB0aGUgcmV0dXJuZWQgYW5zd2VycyBvYmplY3QuXG4gICAqIEBwYXJhbSBxdWVzdGlvbiAtIFRoZSBtZXNzYWdlIGRpc3BsYXllZCB0byB0aGUgdXNlci5cbiAgICogQHBhcmFtIG1pbiAtIFRoZSBtaW5pbXVtIGFsbG93ZWQgdmFsdWUgKG9wdGlvbmFsKS5cbiAgICogQHBhcmFtIG1heCAtIFRoZSBtYXhpbXVtIGFsbG93ZWQgdmFsdWUgKG9wdGlvbmFsKS5cbiAgICogQHBhcmFtIGluaXRpYWwgLSBUaGUgaW5pdGlhbCB2YWx1ZSBwcmVzZW50ZWQgdG8gdGhlIHVzZXIgKG9wdGlvbmFsKS5cbiAgICogQHJldHVybiBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgbnVtYmVyIGVudGVyZWQgYnkgdGhlIHVzZXIuXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgYXNrTnVtYmVyKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBxdWVzdGlvbjogc3RyaW5nLFxuICAgIG1pbj86IG51bWJlcixcbiAgICBtYXg/OiBudW1iZXIsXG4gICAgaW5pdGlhbD86IG51bWJlclxuICApOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGNvbnN0IGxvZyA9IFVzZXJJbnB1dC5sb2dnZXIuZm9yKHRoaXMuYXNrTnVtYmVyKTtcbiAgICBsb2cudmVyYm9zZShcbiAgICAgIGBBc2tpbmcgbnVtYmVyIGlucHV0OiB1bmRlZmluZWQsIHF1ZXN0aW9uOiAke3F1ZXN0aW9ufSwgbWluOiAke21pbn0sIG1heDogJHttYXh9LCBpbml0aWFsOiAke2luaXRpYWx9YFxuICAgICk7XG4gICAgY29uc3QgdXNlcklucHV0ID0gbmV3IFVzZXJJbnB1dChuYW1lKVxuICAgICAgLnNldE1lc3NhZ2UocXVlc3Rpb24pXG4gICAgICAuc2V0VHlwZShcIm51bWJlclwiKTtcblxuICAgIGlmICh0eXBlb2YgbWluID09PSBcIm51bWJlclwiKSB1c2VySW5wdXQuc2V0TWluKG1pbik7XG5cbiAgICBpZiAodHlwZW9mIG1heCA9PT0gXCJudW1iZXJcIikgdXNlcklucHV0LnNldE1heChtYXgpO1xuXG4gICAgaWYgKHR5cGVvZiBpbml0aWFsID09PSBcIm51bWJlclwiKSB1c2VySW5wdXQuc2V0SW5pdGlhbChpbml0aWFsKTtcblxuICAgIHJldHVybiAoYXdhaXQgdGhpcy5hc2sodXNlcklucHV0KSlbbmFtZV07XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEFza3MgdGhlIHVzZXIgZm9yIGEgdGV4dCBpbnB1dC5cbiAgICogQHN1bW1hcnkgUHJvbXB0cyB0aGUgdXNlciB0byBlbnRlciB0ZXh0LCB3aXRoIG9wdGlvbmFsIG1hc2tpbmcgYW5kIGluaXRpYWwgdmFsdWUuXG4gICAqIEBwYXJhbSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHByb21wdCwgdXNlZCBhcyB0aGUga2V5IGluIHRoZSByZXR1cm5lZCBhbnN3ZXJzIG9iamVjdC5cbiAgICogQHBhcmFtIHF1ZXN0aW9uIC0gVGhlIG1lc3NhZ2UgZGlzcGxheWVkIHRvIHRoZSB1c2VyLlxuICAgKiBAcGFyYW0gbWFzayAtIFRoZSBjaGFyYWN0ZXIgdXNlZCB0byBtYXNrIHRoZSBpbnB1dCAob3B0aW9uYWwsIGZvciBwYXNzd29yZC1saWtlIGlucHV0cykuXG4gICAqIEBwYXJhbSBpbml0aWFsIC0gVGhlIGluaXRpYWwgdmFsdWUgcHJlc2VudGVkIHRvIHRoZSB1c2VyIChvcHRpb25hbCkuXG4gICAqIEByZXR1cm4gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIHRleHQgZW50ZXJlZCBieSB0aGUgdXNlci5cbiAgICovXG4gIHN0YXRpYyBhc3luYyBhc2tUZXh0KFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBxdWVzdGlvbjogc3RyaW5nLFxuICAgIG1hc2s6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZCxcbiAgICBpbml0aWFsPzogc3RyaW5nXG4gICk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgbG9nID0gVXNlcklucHV0LmxvZ2dlci5mb3IodGhpcy5hc2tUZXh0KTtcbiAgICBsb2cudmVyYm9zZShcbiAgICAgIGBBc2tpbmcgdGV4dCBpbnB1dDogdW5kZWZpbmVkLCBxdWVzdGlvbjogJHtxdWVzdGlvbn0sIG1hc2s6ICR7bWFza30sIGluaXRpYWw6ICR7aW5pdGlhbH1gXG4gICAgKTtcbiAgICBjb25zdCB1c2VySW5wdXQgPSBuZXcgVXNlcklucHV0KG5hbWUpLnNldE1lc3NhZ2UocXVlc3Rpb24pO1xuXG4gICAgaWYgKG1hc2spIHVzZXJJbnB1dC5zZXRNYXNrKG1hc2spO1xuICAgIGlmICh0eXBlb2YgaW5pdGlhbCA9PT0gXCJzdHJpbmdcIikgdXNlcklucHV0LnNldEluaXRpYWwoaW5pdGlhbCk7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmFzayh1c2VySW5wdXQpKVtuYW1lXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQXNrcyB0aGUgdXNlciBmb3IgYSBjb25maXJtYXRpb24gKHllcy9ubykuXG4gICAqIEBzdW1tYXJ5IFByb21wdHMgdGhlIHVzZXIgd2l0aCBhIHllcy9ubyBxdWVzdGlvbiBhbmQgcmV0dXJucyBhIGJvb2xlYW4gcmVzdWx0LlxuICAgKiBAcGFyYW0gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBwcm9tcHQsIHVzZWQgYXMgdGhlIGtleSBpbiB0aGUgcmV0dXJuZWQgYW5zd2VycyBvYmplY3QuXG4gICAqIEBwYXJhbSBxdWVzdGlvbiAtIFRoZSBtZXNzYWdlIGRpc3BsYXllZCB0byB0aGUgdXNlci5cbiAgICogQHBhcmFtIGluaXRpYWwgLSBUaGUgaW5pdGlhbCB2YWx1ZSBwcmVzZW50ZWQgdG8gdGhlIHVzZXIgKG9wdGlvbmFsKS5cbiAgICogQHJldHVybiBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhIGJvb2xlYW4gcmVwcmVzZW50aW5nIHRoZSB1c2VyJ3MgYW5zd2VyLlxuICAgKi9cbiAgc3RhdGljIGFzeW5jIGFza0NvbmZpcm1hdGlvbihcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgcXVlc3Rpb246IHN0cmluZyxcbiAgICBpbml0aWFsPzogYm9vbGVhblxuICApOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBsb2cgPSBVc2VySW5wdXQubG9nZ2VyLmZvcih0aGlzLmFza0NvbmZpcm1hdGlvbik7XG4gICAgbG9nLnZlcmJvc2UoXG4gICAgICBgQXNraW5nIGNvbmZpcm1hdGlvbiBpbnB1dDogdW5kZWZpbmVkLCBxdWVzdGlvbjogJHtxdWVzdGlvbn0sIGluaXRpYWw6ICR7aW5pdGlhbH1gXG4gICAgKTtcbiAgICBjb25zdCB1c2VySW5wdXQgPSBuZXcgVXNlcklucHV0KG5hbWUpXG4gICAgICAuc2V0TWVzc2FnZShxdWVzdGlvbilcbiAgICAgIC5zZXRUeXBlKFwiY29uZmlybVwiKTtcblxuICAgIGlmICh0eXBlb2YgaW5pdGlhbCAhPT0gXCJ1bmRlZmluZWRcIikgdXNlcklucHV0LnNldEluaXRpYWwoaW5pdGlhbCk7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmFzayh1c2VySW5wdXQpKVtuYW1lXTtcbiAgfVxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFJlcGVhdGVkbHkgYXNrcyBmb3IgaW5wdXQgdW50aWwgYSB2YWxpZCByZXNwb25zZSBpcyBnaXZlbiBvciB0aGUgbGltaXQgaXMgcmVhY2hlZC5cbiAgICogQHN1bW1hcnkgVGhpcyBtZXRob2QgaW5zaXN0cyBvbiBnZXR0aW5nIGEgdmFsaWQgaW5wdXQgZnJvbSB0aGUgdXNlciwgYWxsb3dpbmcgZm9yIGEgc3BlY2lmaWVkIG51bWJlciBvZiBhdHRlbXB0cy5cbiAgICpcbiAgICogQHRlbXBsYXRlIFIgLSBUaGUgdHlwZSBvZiB0aGUgZXhwZWN0ZWQgcmVzdWx0LlxuICAgKiBAcGFyYW0gaW5wdXQgLSBUaGUgVXNlcklucHV0IGluc3RhbmNlIHRvIHVzZSBmb3IgcHJvbXB0aW5nLlxuICAgKiBAcGFyYW0gdGVzdCAtIEEgZnVuY3Rpb24gdG8gdmFsaWRhdGUgdGhlIHVzZXIncyBpbnB1dC5cbiAgICogQHBhcmFtIGRlZmF1bHRDb25maXJtYXRpb24gLSBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIGNvbmZpcm1hdGlvbiBwcm9tcHQgKHRydWUgZm9yIHllcywgZmFsc2UgZm9yIG5vKS5cbiAgICogQHBhcmFtIGxpbWl0IC0gVGhlIG1heGltdW0gbnVtYmVyIG9mIGF0dGVtcHRzIGFsbG93ZWQgKGRlZmF1bHQgaXMgMSkuXG4gICAqIEByZXR1cm4gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIHZhbGlkIGlucHV0IG9yIHVuZGVmaW5lZCBpZiB0aGUgbGltaXQgaXMgcmVhY2hlZC5cbiAgICpcbiAgICogQG1lcm1haWRcbiAgICogc2VxdWVuY2VEaWFncmFtXG4gICAqICAgcGFydGljaXBhbnQgVSBhcyBVc2VyXG4gICAqICAgcGFydGljaXBhbnQgSSBhcyBpbnNpc3QgbWV0aG9kXG4gICAqICAgcGFydGljaXBhbnQgQSBhcyBhc2sgbWV0aG9kXG4gICAqICAgcGFydGljaXBhbnQgVCBhcyB0ZXN0IGZ1bmN0aW9uXG4gICAqICAgcGFydGljaXBhbnQgQyBhcyBhc2tDb25maXJtYXRpb24gbWV0aG9kXG4gICAqICAgbG9vcCBVbnRpbCB2YWxpZCBpbnB1dCBvciBsaW1pdCByZWFjaGVkXG4gICAqICAgICBJLT4+QTogQ2FsbCBhc2sgd2l0aCBpbnB1dFxuICAgKiAgICAgQS0+PlU6IFByb21wdCB1c2VyXG4gICAqICAgICBVLT4+QTogUHJvdmlkZSBpbnB1dFxuICAgKiAgICAgQS0+Pkk6IFJldHVybiByZXN1bHRcbiAgICogICAgIEktPj5UOiBUZXN0IHJlc3VsdFxuICAgKiAgICAgYWx0IFRlc3QgcGFzc2VzXG4gICAqICAgICAgIEktPj5DOiBBc2sgZm9yIGNvbmZpcm1hdGlvblxuICAgKiAgICAgICBDLT4+VTogQ29uZmlybSBpbnB1dFxuICAgKiAgICAgICBVLT4+QzogUHJvdmlkZSBjb25maXJtYXRpb25cbiAgICogICAgICAgQy0+Pkk6IFJldHVybiBjb25maXJtYXRpb25cbiAgICogICAgICAgYWx0IENvbmZpcm1lZFxuICAgKiAgICAgICAgIEktLT4+Q2FsbGVyOiBSZXR1cm4gdmFsaWQgcmVzdWx0XG4gICAqICAgICAgIGVsc2UgTm90IGNvbmZpcm1lZFxuICAgKiAgICAgICAgIEktPj5JOiBDb250aW51ZSBsb29wXG4gICAqICAgICAgIGVuZFxuICAgKiAgICAgZWxzZSBUZXN0IGZhaWxzXG4gICAqICAgICAgIEktPj5JOiBDb250aW51ZSBsb29wXG4gICAqICAgICBlbmRcbiAgICogICBlbmRcbiAgICogICBJLS0+PkNhbGxlcjogUmV0dXJuIHVuZGVmaW5lZCBpZiBsaW1pdCByZWFjaGVkXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgaW5zaXN0PFI+KFxuICAgIGlucHV0OiBVc2VySW5wdXQsXG4gICAgdGVzdDogKHJlczogc3RyaW5nIHwgbnVtYmVyKSA9PiBib29sZWFuLFxuICAgIGRlZmF1bHRDb25maXJtYXRpb246IGJvb2xlYW4sXG4gICAgbGltaXQgPSAxXG4gICk6IFByb21pc2U8UiB8IHVuZGVmaW5lZD4ge1xuICAgIGNvbnN0IGxvZyA9IFVzZXJJbnB1dC5sb2dnZXIuZm9yKHRoaXMuaW5zaXN0KTtcbiAgICBsb2cudmVyYm9zZShcbiAgICAgIGBJbnNpc3Rpbmcgb24gaW5wdXQ6ICR7aW5wdXQubmFtZX0sIHRlc3Q6ICR7dGVzdC50b1N0cmluZygpfSwgZGVmYXVsdENvbmZpcm1hdGlvbjogJHtkZWZhdWx0Q29uZmlybWF0aW9ufSwgbGltaXQ6ICR7bGltaXR9YFxuICAgICk7XG4gICAgbGV0IHJlc3VsdDogc3RyaW5nIHwgbnVtYmVyIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICAgIGxldCBjb3VudCA9IDA7XG4gICAgbGV0IGNvbmZpcm1hdGlvbjogYm9vbGVhbjtcbiAgICB0cnkge1xuICAgICAgZG8ge1xuICAgICAgICByZXN1bHQgPSAoYXdhaXQgVXNlcklucHV0LmFzayhpbnB1dCkpW1xuICAgICAgICAgIGlucHV0Lm5hbWUgYXMga2V5b2YgQW5zd2VyczxzdHJpbmc+XG4gICAgICAgIF0gYXMgc3RyaW5nO1xuICAgICAgICBpZiAoIXRlc3QocmVzdWx0KSkge1xuICAgICAgICAgIHJlc3VsdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25maXJtYXRpb24gPSBhd2FpdCBVc2VySW5wdXQuYXNrQ29uZmlybWF0aW9uKFxuICAgICAgICAgIGAke2lucHV0Lm5hbWV9LWNvbmZpcm1gLFxuICAgICAgICAgIGBJcyB0aGUgJHtpbnB1dC50eXBlfSBjb3JyZWN0P2AsXG4gICAgICAgICAgZGVmYXVsdENvbmZpcm1hdGlvblxuICAgICAgICApO1xuICAgICAgICBpZiAoIWNvbmZpcm1hdGlvbikgcmVzdWx0ID0gdW5kZWZpbmVkO1xuICAgICAgfSB3aGlsZSAodHlwZW9mIHJlc3VsdCA9PT0gXCJ1bmRlZmluZWRcIiAmJiBsaW1pdCA+IDEgJiYgY291bnQrKyA8IGxpbWl0KTtcbiAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICBsb2cuZXJyb3IoYEVycm9yIHdoaWxlIGluc2lzdGluZzogJHtlfWApO1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHJlc3VsdCA9PT0gXCJ1bmRlZmluZWRcIikgbG9nLmluZm8oXCJubyBzZWxlY3Rpb24uLi5cIik7XG4gICAgcmV0dXJuIHJlc3VsdCBhcyBSIHwgdW5kZWZpbmVkO1xuICB9XG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVwZWF0ZWRseSBhc2tzIGZvciB0ZXh0IGlucHV0IHVudGlsIGEgdmFsaWQgcmVzcG9uc2UgaXMgZ2l2ZW4gb3IgdGhlIGxpbWl0IGlzIHJlYWNoZWQuXG4gICAqIEBzdW1tYXJ5IFRoaXMgbWV0aG9kIGluc2lzdHMgb24gZ2V0dGluZyBhIHZhbGlkIHRleHQgaW5wdXQgZnJvbSB0aGUgdXNlciwgYWxsb3dpbmcgZm9yIGEgc3BlY2lmaWVkIG51bWJlciBvZiBhdHRlbXB0cy5cbiAgICpcbiAgICogQHBhcmFtIG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgcHJvbXB0LCB1c2VkIGFzIHRoZSBrZXkgaW4gdGhlIHJldHVybmVkIGFuc3dlcnMgb2JqZWN0LlxuICAgKiBAcGFyYW0gcXVlc3Rpb24gLSBUaGUgbWVzc2FnZSBkaXNwbGF5ZWQgdG8gdGhlIHVzZXIuXG4gICAqIEBwYXJhbSB0ZXN0IC0gQSBmdW5jdGlvbiB0byB2YWxpZGF0ZSB0aGUgdXNlcidzIGlucHV0LlxuICAgKiBAcGFyYW0gbWFzayAtIFRoZSBjaGFyYWN0ZXIgdXNlZCB0byBtYXNrIHRoZSBpbnB1dCAob3B0aW9uYWwsIGZvciBwYXNzd29yZC1saWtlIGlucHV0cykuXG4gICAqIEBwYXJhbSBpbml0aWFsIC0gVGhlIGluaXRpYWwgdmFsdWUgcHJlc2VudGVkIHRvIHRoZSB1c2VyIChvcHRpb25hbCkuXG4gICAqIEBwYXJhbSBkZWZhdWx0Q29uZmlybWF0aW9uIC0gVGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoZSBjb25maXJtYXRpb24gcHJvbXB0ICh0cnVlIGZvciB5ZXMsIGZhbHNlIGZvciBubykuXG4gICAqIEBwYXJhbSBsaW1pdCAtIFRoZSBtYXhpbXVtIG51bWJlciBvZiBhdHRlbXB0cyBhbGxvd2VkIChkZWZhdWx0IGlzIC0xLCBtZWFuaW5nIHVubGltaXRlZCkuXG4gICAqIEByZXR1cm4gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIHZhbGlkIGlucHV0IG9yIHVuZGVmaW5lZCBpZiB0aGUgbGltaXQgaXMgcmVhY2hlZC5cbiAgICovXG4gIHN0YXRpYyBhc3luYyBpbnNpc3RGb3JUZXh0KFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBxdWVzdGlvbjogc3RyaW5nLFxuICAgIHRlc3Q6IChyZXM6IHN0cmluZykgPT4gYm9vbGVhbixcbiAgICBtYXNrOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQsXG4gICAgaW5pdGlhbD86IHN0cmluZyxcbiAgICBkZWZhdWx0Q29uZmlybWF0aW9uID0gZmFsc2UsXG4gICAgbGltaXQgPSAtMVxuICApOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IGxvZyA9IFVzZXJJbnB1dC5sb2dnZXIuZm9yKHRoaXMuaW5zaXN0Rm9yVGV4dCk7XG4gICAgbG9nLnZlcmJvc2UoXG4gICAgICBgSW5zaXN0aW5nIGZvciB0ZXh0IGlucHV0OiB1bmRlZmluZWQsIHF1ZXN0aW9uOiAke3F1ZXN0aW9ufSwgdGVzdDogJHt0ZXN0LnRvU3RyaW5nKCl9LCBtYXNrOiAke21hc2t9LCBpbml0aWFsOiAke2luaXRpYWx9LCBkZWZhdWx0Q29uZmlybWF0aW9uOiAke2RlZmF1bHRDb25maXJtYXRpb259LCBsaW1pdDogJHtsaW1pdH1gXG4gICAgKTtcbiAgICBjb25zdCB1c2VySW5wdXQgPSBuZXcgVXNlcklucHV0KG5hbWUpLnNldE1lc3NhZ2UocXVlc3Rpb24pO1xuXG4gICAgaWYgKG1hc2spIHVzZXJJbnB1dC5zZXRNYXNrKG1hc2spO1xuICAgIGlmICh0eXBlb2YgaW5pdGlhbCA9PT0gXCJzdHJpbmdcIikgdXNlcklucHV0LnNldEluaXRpYWwoaW5pdGlhbCk7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmluc2lzdChcbiAgICAgIHVzZXJJbnB1dCxcbiAgICAgIHRlc3QgYXMgKHJlczogc3RyaW5nIHwgbnVtYmVyKSA9PiBib29sZWFuLFxuICAgICAgZGVmYXVsdENvbmZpcm1hdGlvbixcbiAgICAgIGxpbWl0XG4gICAgKSkgYXMgc3RyaW5nO1xuICB9XG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVwZWF0ZWRseSBhc2tzIGZvciBudW1iZXIgaW5wdXQgdW50aWwgYSB2YWxpZCByZXNwb25zZSBpcyBnaXZlbiBvciB0aGUgbGltaXQgaXMgcmVhY2hlZC5cbiAgICogQHN1bW1hcnkgVGhpcyBtZXRob2QgaW5zaXN0cyBvbiBnZXR0aW5nIGEgdmFsaWQgbnVtYmVyIGlucHV0IGZyb20gdGhlIHVzZXIsIGFsbG93aW5nIGZvciBhIHNwZWNpZmllZCBudW1iZXIgb2YgYXR0ZW1wdHMuXG4gICAqXG4gICAqIEBwYXJhbSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHByb21wdCwgdXNlZCBhcyB0aGUga2V5IGluIHRoZSByZXR1cm5lZCBhbnN3ZXJzIG9iamVjdC5cbiAgICogQHBhcmFtIHF1ZXN0aW9uIC0gVGhlIG1lc3NhZ2UgZGlzcGxheWVkIHRvIHRoZSB1c2VyLlxuICAgKiBAcGFyYW0gdGVzdCAtIEEgZnVuY3Rpb24gdG8gdmFsaWRhdGUgdGhlIHVzZXIncyBpbnB1dC5cbiAgICogQHBhcmFtIG1pbiAtIFRoZSBtaW5pbXVtIGFsbG93ZWQgdmFsdWUgKG9wdGlvbmFsKS5cbiAgICogQHBhcmFtIG1heCAtIFRoZSBtYXhpbXVtIGFsbG93ZWQgdmFsdWUgKG9wdGlvbmFsKS5cbiAgICogQHBhcmFtIGluaXRpYWwgLSBUaGUgaW5pdGlhbCB2YWx1ZSBwcmVzZW50ZWQgdG8gdGhlIHVzZXIgKG9wdGlvbmFsKS5cbiAgICogQHBhcmFtIGRlZmF1bHRDb25maXJtYXRpb24gLSBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIGNvbmZpcm1hdGlvbiBwcm9tcHQgKHRydWUgZm9yIHllcywgZmFsc2UgZm9yIG5vKS5cbiAgICogQHBhcmFtIGxpbWl0IC0gVGhlIG1heGltdW0gbnVtYmVyIG9mIGF0dGVtcHRzIGFsbG93ZWQgKGRlZmF1bHQgaXMgLTEsIG1lYW5pbmcgdW5saW1pdGVkKS5cbiAgICogQHJldHVybiBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgdmFsaWQgaW5wdXQgb3IgdW5kZWZpbmVkIGlmIHRoZSBsaW1pdCBpcyByZWFjaGVkLlxuICAgKi9cbiAgc3RhdGljIGFzeW5jIGluc2lzdEZvck51bWJlcihcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgcXVlc3Rpb246IHN0cmluZyxcbiAgICB0ZXN0OiAocmVzOiBudW1iZXIpID0+IGJvb2xlYW4sXG4gICAgbWluPzogbnVtYmVyLFxuICAgIG1heD86IG51bWJlcixcbiAgICBpbml0aWFsPzogbnVtYmVyLFxuICAgIGRlZmF1bHRDb25maXJtYXRpb24gPSBmYWxzZSxcbiAgICBsaW1pdCA9IC0xXG4gICk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgY29uc3QgbG9nID0gVXNlcklucHV0LmxvZ2dlci5mb3IodGhpcy5pbnNpc3RGb3JOdW1iZXIpO1xuICAgIGxvZy52ZXJib3NlKFxuICAgICAgYEluc2lzdGluZyBmb3IgbnVtYmVyIGlucHV0OiB1bmRlZmluZWQsIHF1ZXN0aW9uOiAke3F1ZXN0aW9ufSwgdGVzdDogJHt0ZXN0LnRvU3RyaW5nKCl9LCBtaW46ICR7bWlufSwgbWF4OiAke21heH0sIGluaXRpYWw6ICR7aW5pdGlhbH0sIGRlZmF1bHRDb25maXJtYXRpb246ICR7ZGVmYXVsdENvbmZpcm1hdGlvbn0sIGxpbWl0OiAke2xpbWl0fWBcbiAgICApO1xuICAgIGNvbnN0IHVzZXJJbnB1dCA9IG5ldyBVc2VySW5wdXQobmFtZSlcbiAgICAgIC5zZXRNZXNzYWdlKHF1ZXN0aW9uKVxuICAgICAgLnNldFR5cGUoXCJudW1iZXJcIik7XG5cbiAgICBpZiAodHlwZW9mIG1pbiA9PT0gXCJudW1iZXJcIikgdXNlcklucHV0LnNldE1pbihtaW4pO1xuXG4gICAgaWYgKHR5cGVvZiBtYXggPT09IFwibnVtYmVyXCIpIHVzZXJJbnB1dC5zZXRNYXgobWF4KTtcblxuICAgIGlmICh0eXBlb2YgaW5pdGlhbCA9PT0gXCJudW1iZXJcIikgdXNlcklucHV0LnNldEluaXRpYWwoaW5pdGlhbCk7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmluc2lzdChcbiAgICAgIHVzZXJJbnB1dCxcbiAgICAgIHRlc3QgYXMgKHJlczogc3RyaW5nIHwgbnVtYmVyKSA9PiBib29sZWFuLFxuICAgICAgZGVmYXVsdENvbmZpcm1hdGlvbixcbiAgICAgIGxpbWl0XG4gICAgKSkgYXMgbnVtYmVyO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBQYXJzZXMgY29tbWFuZC1saW5lIGFyZ3VtZW50cyBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgb3B0aW9ucy5cbiAgICogQHN1bW1hcnkgVXNlcyBOb2RlLmpzJ3MgdXRpbC5wYXJzZUFyZ3MgdG8gcGFyc2UgY29tbWFuZC1saW5lIGFyZ3VtZW50cyBhbmQgcmV0dXJuIHRoZSByZXN1bHQuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBwYXJzaW5nIGFyZ3VtZW50cy5cbiAgICogQHJldHVybiBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgcGFyc2VkIGFyZ3VtZW50cy5cbiAgICogQG1lcm1haWRcbiAgICogc2VxdWVuY2VEaWFncmFtXG4gICAqICAgcGFydGljaXBhbnQgQyBhcyBDYWxsZXJcbiAgICogICBwYXJ0aWNpcGFudCBQIGFzIHBhcnNlQXJncyBtZXRob2RcbiAgICogICBwYXJ0aWNpcGFudCBVIGFzIHV0aWwucGFyc2VBcmdzXG4gICAqICAgQy0+PlA6IENhbGwgd2l0aCBvcHRpb25zXG4gICAqICAgUC0+PlA6IFByZXBhcmUgYXJncyBvYmplY3RcbiAgICogICBQLT4+VTogQ2FsbCBwYXJzZUFyZ3Mgd2l0aCBwcmVwYXJlZCBhcmdzXG4gICAqICAgVS0+PlA6IFJldHVybiBwYXJzZWQgcmVzdWx0XG4gICAqICAgUC0tPj5DOiBSZXR1cm4gUGFyc2VBcmdzUmVzdWx0XG4gICAqL1xuICBzdGF0aWMgcGFyc2VBcmdzKG9wdGlvbnM6IFBhcnNlQXJnc09wdGlvbnNDb25maWcpOiBQYXJzZUFyZ3NSZXN1bHQge1xuICAgIGNvbnN0IGxvZyA9IFVzZXJJbnB1dC5sb2dnZXIuZm9yKHRoaXMucGFyc2VBcmdzKTtcbiAgICBjb25zdCBhcmdzOiBQYXJzZUFyZ3NDb25maWcgPSB7XG4gICAgICBhcmdzOiBwcm9jZXNzLmFyZ3Yuc2xpY2UoMiksXG4gICAgICBvcHRpb25zOiBvcHRpb25zLFxuICAgIH07XG4gICAgbG9nLmRlYnVnKGBQYXJzaW5nIGFyZ3VtZW50czogJHtKU09OLnN0cmluZ2lmeShhcmdzLCBudWxsLCAyKX1gKTtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHBhcnNlQXJncyhhcmdzKTtcbiAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgbG9nLmRlYnVnKFxuICAgICAgICBgRXJyb3Igd2hpbGUgcGFyc2luZyBhcmd1bWVudHM6XFxuJHtKU09OLnN0cmluZ2lmeShhcmdzLCBudWxsLCAyKX1cXG4gfCBvcHRpb25zXFxuJHtKU09OLnN0cmluZ2lmeShvcHRpb25zLCBudWxsLCAyKX1cXG4gfCAke2Vycm9yfWBcbiAgICAgICk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIHdoaWxlIHBhcnNpbmcgYXJndW1lbnRzOiAke2Vycm9yfWApO1xuICAgIH1cbiAgfVxufVxuIiwiLyoqXG4gKiBAZGVzY3JpcHRpb24gRGVmYXVsdCBjb21tYW5kIG9wdGlvbnMgZm9yIENMSSBjb21tYW5kcy5cbiAqIEBzdW1tYXJ5IERlZmluZXMgdGhlIHN0cnVjdHVyZSBhbmQgZGVmYXVsdCB2YWx1ZXMgZm9yIGNvbW1vbiBjb21tYW5kLWxpbmUgb3B0aW9ucyB1c2VkIGFjcm9zcyB2YXJpb3VzIENMSSBjb21tYW5kcy5cbiAqIEBjb25zdCBEZWZhdWx0Q29tbWFuZE9wdGlvbnNcbiAqIEB0eXBlZGVmIHtPYmplY3R9IERlZmF1bHRDb21tYW5kT3B0aW9uc1xuICogQHByb3BlcnR5IHtPYmplY3R9IHZlcmJvc2UgLSBWZXJib3NpdHkgbGV2ZWwgb3B0aW9uLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHZlcmJvc2UudHlwZSAtIFRoZSB0eXBlIG9mIHRoZSB2ZXJib3NlIG9wdGlvbiAobnVtYmVyKS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB2ZXJib3NlLnNob3J0IC0gVGhlIHNob3J0IGZsYWcgZm9yIHRoZSB2ZXJib3NlIG9wdGlvbiAoVikuXG4gKiBAcHJvcGVydHkge251bWJlcn0gdmVyYm9zZS5kZWZhdWx0IC0gVGhlIGRlZmF1bHQgdmFsdWUgZm9yIHZlcmJvc2l0eSAoMCkuXG4gKiBAcHJvcGVydHkge09iamVjdH0gdmVyc2lvbiAtIFZlcnNpb24gZGlzcGxheSBvcHRpb24uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdmVyc2lvbi50eXBlIC0gVGhlIHR5cGUgb2YgdGhlIHZlcnNpb24gb3B0aW9uIChib29sZWFuKS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB2ZXJzaW9uLnNob3J0IC0gVGhlIHNob3J0IGZsYWcgZm9yIHRoZSB2ZXJzaW9uIG9wdGlvbiAodikuXG4gKiBAcHJvcGVydHkge3VuZGVmaW5lZH0gdmVyc2lvbi5kZWZhdWx0IC0gVGhlIGRlZmF1bHQgdmFsdWUgZm9yIHZlcnNpb24gZGlzcGxheSAodW5kZWZpbmVkKS5cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBoZWxwIC0gSGVscCBkaXNwbGF5IG9wdGlvbi5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBoZWxwLnR5cGUgLSBUaGUgdHlwZSBvZiB0aGUgaGVscCBvcHRpb24gKGJvb2xlYW4pLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGhlbHAuc2hvcnQgLSBUaGUgc2hvcnQgZmxhZyBmb3IgdGhlIGhlbHAgb3B0aW9uIChoKS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gaGVscC5kZWZhdWx0IC0gVGhlIGRlZmF1bHQgdmFsdWUgZm9yIGhlbHAgZGlzcGxheSAoZmFsc2UpLlxuICogQHByb3BlcnR5IHtPYmplY3R9IGxvZ0xldmVsIC0gTG9nIGxldmVsIG9wdGlvbi5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBsb2dMZXZlbC50eXBlIC0gVGhlIHR5cGUgb2YgdGhlIGxvZ0xldmVsIG9wdGlvbiAoc3RyaW5nKS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBsb2dMZXZlbC5kZWZhdWx0IC0gVGhlIGRlZmF1bHQgdmFsdWUgZm9yIGxvZyBsZXZlbCAoXCJpbmZvXCIpLlxuICogQHByb3BlcnR5IHtPYmplY3R9IGxvZ1N0eWxlIC0gTG9nIHN0eWxpbmcgb3B0aW9uLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGxvZ1N0eWxlLnR5cGUgLSBUaGUgdHlwZSBvZiB0aGUgbG9nU3R5bGUgb3B0aW9uIChib29sZWFuKS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gbG9nU3R5bGUuZGVmYXVsdCAtIFRoZSBkZWZhdWx0IHZhbHVlIGZvciBsb2cgc3R5bGluZyAodHJ1ZSkuXG4gKiBAcHJvcGVydHkge09iamVjdH0gdGltZXN0YW1wIC0gVGltZXN0YW1wIGRpc3BsYXkgb3B0aW9uLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHRpbWVzdGFtcC50eXBlIC0gVGhlIHR5cGUgb2YgdGhlIHRpbWVzdGFtcCBvcHRpb24gKGJvb2xlYW4pLlxuICogQHByb3BlcnR5IHtib29sZWFufSB0aW1lc3RhbXAuZGVmYXVsdCAtIFRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aW1lc3RhbXAgZGlzcGxheSAodHJ1ZSkuXG4gKiBAcHJvcGVydHkge09iamVjdH0gYmFubmVyIC0gQmFubmVyIGRpc3BsYXkgb3B0aW9uLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGJhbm5lci50eXBlIC0gVGhlIHR5cGUgb2YgdGhlIGJhbm5lciBvcHRpb24gKGJvb2xlYW4pLlxuICogQHByb3BlcnR5IHtib29sZWFufSBiYW5uZXIuZGVmYXVsdCAtIFRoZSBkZWZhdWx0IHZhbHVlIGZvciBiYW5uZXIgZGlzcGxheSAoZmFsc2UpLlxuICogQG1lbWJlck9mIG1vZHVsZTp1dGlsc1xuICovXG5leHBvcnQgY29uc3QgRGVmYXVsdENvbW1hbmRPcHRpb25zID0ge1xuICB2ZXJib3NlOiB7XG4gICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgc2hvcnQ6IFwiVlwiLFxuICAgIGRlZmF1bHQ6IHVuZGVmaW5lZCxcbiAgfSxcbiAgdmVyc2lvbjoge1xuICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgIHNob3J0OiBcInZcIixcbiAgICBkZWZhdWx0OiB1bmRlZmluZWQsXG4gIH0sXG4gIGhlbHA6IHtcbiAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgICBzaG9ydDogXCJoXCIsXG4gICAgZGVmYXVsdDogZmFsc2UsXG4gIH0sXG4gIGxvZ0xldmVsOiB7XG4gICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICBkZWZhdWx0OiBcImluZm9cIixcbiAgfSxcbiAgbG9nU3R5bGU6IHtcbiAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgICBkZWZhdWx0OiB0cnVlLFxuICB9LFxuICB0aW1lc3RhbXA6IHtcbiAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgICBkZWZhdWx0OiB0cnVlLFxuICB9LFxuICBiYW5uZXI6IHtcbiAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgICBkZWZhdWx0OiB0cnVlLFxuICB9LFxufTtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gRGVmYXVsdCBjb21tYW5kIHZhbHVlcyBkZXJpdmVkIGZyb20gRGVmYXVsdENvbW1hbmRPcHRpb25zLlxuICogQHN1bW1hcnkgQ3JlYXRlcyBhbiBvYmplY3Qgd2l0aCB0aGUgZGVmYXVsdCB2YWx1ZXMgb2YgYWxsIG9wdGlvbnMgZGVmaW5lZCBpbiBEZWZhdWx0Q29tbWFuZE9wdGlvbnMuXG4gKiBAY29uc3QgRGVmYXVsdENvbW1hbmRWYWx1ZXNcbiAqIEB0eXBlZGVmIHtPYmplY3R9IERlZmF1bHRDb21tYW5kVmFsdWVzXG4gKiBAcHJvcGVydHkge3Vua25vd259IFtrZXk6IHN0cmluZ10gLSBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgZWFjaCBvcHRpb24gaW4gRGVmYXVsdENvbW1hbmRPcHRpb25zLlxuICogQG1lbWJlck9mIG1vZHVsZTp1dGlsc1xuICovXG5leHBvcnQgY29uc3QgRGVmYXVsdENvbW1hbmRWYWx1ZXM6IHtcbiAgW2sgaW4ga2V5b2YgdHlwZW9mIERlZmF1bHRDb21tYW5kT3B0aW9uc106IHVua25vd247XG59ID0gT2JqZWN0LmtleXMoRGVmYXVsdENvbW1hbmRPcHRpb25zKS5yZWR1Y2UoXG4gIChhY2M6IFJlY29yZDxrZXlvZiB0eXBlb2YgRGVmYXVsdENvbW1hbmRPcHRpb25zLCB1bmtub3duPiwga2V5OiBzdHJpbmcpID0+IHtcbiAgICBhY2Nba2V5IGFzIGtleW9mIHR5cGVvZiBEZWZhdWx0Q29tbWFuZE9wdGlvbnNdID1cbiAgICAgIERlZmF1bHRDb21tYW5kT3B0aW9uc1trZXkgYXMga2V5b2YgdHlwZW9mIERlZmF1bHRDb21tYW5kT3B0aW9uc10uZGVmYXVsdDtcbiAgICByZXR1cm4gYWNjO1xuICB9LFxuICB7fSBhcyBSZWNvcmQ8a2V5b2YgdHlwZW9mIERlZmF1bHRDb21tYW5kVmFsdWVzLCB1bmtub3duPlxuKTtcbiIsIi8qKlxuICogQGRlc2NyaXB0aW9uIFBhZHMgdGhlIGVuZCBvZiBhIHN0cmluZyB3aXRoIGEgc3BlY2lmaWVkIGNoYXJhY3Rlci5cbiAqIEBzdW1tYXJ5IEV4dGVuZHMgdGhlIGlucHV0IHN0cmluZyB0byBhIHNwZWNpZmllZCBsZW5ndGggYnkgYWRkaW5nIGEgcGFkZGluZyBjaGFyYWN0ZXIgdG8gdGhlIGVuZC5cbiAqIElmIHRoZSBpbnB1dCBzdHJpbmcgaXMgYWxyZWFkeSBsb25nZXIgdGhhbiB0aGUgc3BlY2lmaWVkIGxlbmd0aCwgaXQgaXMgcmV0dXJuZWQgdW5jaGFuZ2VkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHIgLSBUaGUgaW5wdXQgc3RyaW5nIHRvIGJlIHBhZGRlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBsZW5ndGggLSBUaGUgZGVzaXJlZCB0b3RhbCBsZW5ndGggb2YgdGhlIHJlc3VsdGluZyBzdHJpbmcuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2NoYXI9XCIgXCJdIC0gVGhlIGNoYXJhY3RlciB0byB1c2UgZm9yIHBhZGRpbmcuIERlZmF1bHRzIHRvIGEgc3BhY2UuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBwYWRkZWQgc3RyaW5nLlxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBwYWRkaW5nIGNoYXJhY3RlciBpcyBub3QgZXhhY3RseSBvbmUgY2hhcmFjdGVyIGxvbmcuXG4gKlxuICogQGZ1bmN0aW9uIHBhZEVuZFxuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6dXRpbHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhZEVuZChcbiAgc3RyOiBzdHJpbmcsXG4gIGxlbmd0aDogbnVtYmVyLFxuICBjaGFyOiBzdHJpbmcgPSBcIiBcIlxuKTogc3RyaW5nIHtcbiAgaWYgKGNoYXIubGVuZ3RoICE9PSAxKVxuICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgY2hhcmFjdGVyIGxlbmd0aCBmb3IgcGFkZGluZy4gbXVzdCBiZSBvbmUhXCIpO1xuICByZXR1cm4gc3RyLnBhZEVuZChsZW5ndGgsIGNoYXIpO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBSZXBsYWNlcyBwbGFjZWhvbGRlcnMgaW4gYSBzdHJpbmcgd2l0aCBwcm92aWRlZCB2YWx1ZXMuXG4gKiBAc3VtbWFyeSBJbnRlcnBvbGF0ZXMgYSBzdHJpbmcgYnkgcmVwbGFjaW5nIHBsYWNlaG9sZGVycyBvZiB0aGUgZm9ybSAke3ZhcmlhYmxlTmFtZX1cbiAqIHdpdGggY29ycmVzcG9uZGluZyB2YWx1ZXMgZnJvbSB0aGUgcHJvdmlkZWQgb2JqZWN0LiBJZiBhIHBsYWNlaG9sZGVyIGRvZXNuJ3QgaGF2ZVxuICogYSBjb3JyZXNwb25kaW5nIHZhbHVlLCBpdCBpcyBsZWZ0IHVuY2hhbmdlZCBpbiB0aGUgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dCAtIFRoZSBpbnB1dCBzdHJpbmcgY29udGFpbmluZyBwbGFjZWhvbGRlcnMgdG8gYmUgcmVwbGFjZWQuXG4gKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIG51bWJlciB8IHN0cmluZz59IHZhbHVlcyAtIEFuIG9iamVjdCBjb250YWluaW5nIGtleS12YWx1ZSBwYWlycyBmb3IgcmVwbGFjZW1lbnQuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBpbnRlcnBvbGF0ZWQgc3RyaW5nIHdpdGggcGxhY2Vob2xkZXJzIHJlcGxhY2VkIGJ5IHRoZWlyIGNvcnJlc3BvbmRpbmcgdmFsdWVzLlxuICpcbiAqIEBmdW5jdGlvbiBwYXRjaFBsYWNlaG9sZGVyc1xuICpcbiAqIEBtZXJtYWlkXG4gKiBzZXF1ZW5jZURpYWdyYW1cbiAqICAgcGFydGljaXBhbnQgQ2FsbGVyXG4gKiAgIHBhcnRpY2lwYW50IHBhdGNoU3RyaW5nXG4gKiAgIHBhcnRpY2lwYW50IFN0cmluZy5yZXBsYWNlXG4gKiAgIENhbGxlci0+PnBhdGNoU3RyaW5nOiBDYWxsIHdpdGggaW5wdXQgYW5kIHZhbHVlc1xuICogICBwYXRjaFN0cmluZy0+PlN0cmluZy5yZXBsYWNlOiBDYWxsIHdpdGggcmVnZXggYW5kIHJlcGxhY2VtZW50IGZ1bmN0aW9uXG4gKiAgIFN0cmluZy5yZXBsYWNlLT4+cGF0Y2hTdHJpbmc6IFJldHVybiByZXBsYWNlZCBzdHJpbmdcbiAqICAgcGF0Y2hTdHJpbmctLT4+Q2FsbGVyOiBSZXR1cm4gcGF0Y2hlZCBzdHJpbmdcbiAqXG4gKiBAbWVtYmVyT2YgbW9kdWxlOnV0aWxzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXRjaFBsYWNlaG9sZGVycyhcbiAgaW5wdXQ6IHN0cmluZyxcbiAgdmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXIgfCBzdHJpbmc+XG4pOiBzdHJpbmcge1xuICByZXR1cm4gaW5wdXQucmVwbGFjZShcbiAgICAvXFwkXFx7KFthLXpBLVowLTlfXSspXFx9L2csXG4gICAgKG1hdGNoLCB2YXJpYWJsZSkgPT4gKHZhbHVlc1t2YXJpYWJsZSBhcyBzdHJpbmddIGFzIHN0cmluZykgfHwgbWF0Y2hcbiAgKTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gUmVwbGFjZXMgb2NjdXJyZW5jZXMgb2Yga2V5cyB3aXRoIHRoZWlyIGNvcnJlc3BvbmRpbmcgdmFsdWVzIGluIGEgc3RyaW5nLlxuICogQHN1bW1hcnkgSXRlcmF0ZXMgdGhyb3VnaCBhIHNldCBvZiBrZXktdmFsdWUgcGFpcnMgYW5kIHJlcGxhY2VzIGFsbCBvY2N1cnJlbmNlcyBvZiBlYWNoIGtleVxuICogaW4gdGhlIGlucHV0IHN0cmluZyB3aXRoIGl0cyBjb3JyZXNwb25kaW5nIHZhbHVlLiBTdXBwb3J0cyByZWd1bGFyIGV4cHJlc3Npb24gZmxhZ3MgZm9yIGN1c3RvbWl6ZWQgcmVwbGFjZW1lbnQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGlucHV0IC0gVGhlIGlucHV0IHN0cmluZyBpbiB3aGljaCByZXBsYWNlbWVudHMgd2lsbCBiZSBtYWRlLlxuICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBudW1iZXIgfCBzdHJpbmc+fSB2YWx1ZXMgLSBBbiBvYmplY3QgY29udGFpbmluZyBrZXktdmFsdWUgcGFpcnMgZm9yIHJlcGxhY2VtZW50LlxuICogQHBhcmFtIHtzdHJpbmd9IFtmbGFncz1cImdcIl0gLSBSZWd1bGFyIGV4cHJlc3Npb24gZmxhZ3MgdG8gY29udHJvbCB0aGUgcmVwbGFjZW1lbnQgYmVoYXZpb3IuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBzdHJpbmcgd2l0aCBhbGwgc3BlY2lmaWVkIHJlcGxhY2VtZW50cyBhcHBsaWVkLlxuICpcbiAqIEBmdW5jdGlvbiBwYXRjaFN0cmluZ1xuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6dXRpbHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhdGNoU3RyaW5nKFxuICBpbnB1dDogc3RyaW5nLFxuICB2YWx1ZXM6IFJlY29yZDxzdHJpbmcsIG51bWJlciB8IHN0cmluZz4sXG4gIGZsYWdzOiBzdHJpbmcgPSBcImdcIlxuKTogc3RyaW5nIHtcbiAgT2JqZWN0LmVudHJpZXModmFsdWVzKS5mb3JFYWNoKChba2V5LCB2YWxdKSA9PiB7XG4gICAgY29uc3QgcmVnZXhwID0gbmV3IFJlZ0V4cChlc2NhcGVSZWdFeHAoa2V5KSwgZmxhZ3MpO1xuICAgIGlucHV0ID0gaW5wdXQucmVwbGFjZShyZWdleHAsIHZhbCBhcyBzdHJpbmcpO1xuICB9KTtcbiAgcmV0dXJuIGlucHV0O1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBDb252ZXJ0cyBhIHN0cmluZyB0byBjYW1lbENhc2UuXG4gKiBAc3VtbWFyeSBUcmFuc2Zvcm1zIHRoZSBpbnB1dCBzdHJpbmcgaW50byBjYW1lbENhc2UgZm9ybWF0LCB3aGVyZSB3b3JkcyBhcmUgam9pbmVkIHdpdGhvdXQgc3BhY2VzXG4gKiBhbmQgZWFjaCB3b3JkIGFmdGVyIHRoZSBmaXJzdCBzdGFydHMgd2l0aCBhIGNhcGl0YWwgbGV0dGVyLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gVGhlIGlucHV0IHN0cmluZyB0byBiZSBjb252ZXJ0ZWQuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBpbnB1dCBzdHJpbmcgY29udmVydGVkIHRvIGNhbWVsQ2FzZS5cbiAqXG4gKiBAZnVuY3Rpb24gdG9DYW1lbENhc2VcbiAqXG4gKiBAbWVtYmVyT2YgbW9kdWxlOnV0aWxzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0NhbWVsQ2FzZSh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gdGV4dFxuICAgIC5yZXBsYWNlKC8oPzpeXFx3fFtBLVpdfFxcYlxcdykvZywgKHdvcmQsIGluZGV4KSA9PlxuICAgICAgaW5kZXggPT09IDAgPyB3b3JkLnRvTG93ZXJDYXNlKCkgOiB3b3JkLnRvVXBwZXJDYXNlKClcbiAgICApXG4gICAgLnJlcGxhY2UoL1xccysvZywgXCJcIik7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIENvbnZlcnRzIGEgc3RyaW5nIHRvIEVOVklST05NRU5UX1ZBUklBQkxFIGZvcm1hdC5cbiAqIEBzdW1tYXJ5IFRyYW5zZm9ybXMgdGhlIGlucHV0IHN0cmluZyBpbnRvIHVwcGVyY2FzZSB3aXRoIHdvcmRzIHNlcGFyYXRlZCBieSB1bmRlcnNjb3JlcyxcbiAqIHR5cGljYWxseSB1c2VkIGZvciBlbnZpcm9ubWVudCB2YXJpYWJsZSBuYW1lcy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIFRoZSBpbnB1dCBzdHJpbmcgdG8gYmUgY29udmVydGVkLlxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgaW5wdXQgc3RyaW5nIGNvbnZlcnRlZCB0byBFTlZJUk9OTUVOVF9WQVJJQUJMRSBmb3JtYXQuXG4gKlxuICogQGZ1bmN0aW9uIHRvRU5WRm9ybWF0XG4gKlxuICogQG1lbWJlck9mIG1vZHVsZTp1dGlsc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdG9FTlZGb3JtYXQodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRvU25ha2VDYXNlKHRleHQpLnRvVXBwZXJDYXNlKCk7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIENvbnZlcnRzIGEgc3RyaW5nIHRvIHNuYWtlX2Nhc2UuXG4gKiBAc3VtbWFyeSBUcmFuc2Zvcm1zIHRoZSBpbnB1dCBzdHJpbmcgaW50byBsb3dlcmNhc2Ugd2l0aCB3b3JkcyBzZXBhcmF0ZWQgYnkgdW5kZXJzY29yZXMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBUaGUgaW5wdXQgc3RyaW5nIHRvIGJlIGNvbnZlcnRlZC5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGlucHV0IHN0cmluZyBjb252ZXJ0ZWQgdG8gc25ha2VfY2FzZS5cbiAqXG4gKiBAZnVuY3Rpb24gdG9TbmFrZUNhc2VcbiAqXG4gKiBAbWVtYmVyT2YgbW9kdWxlOnV0aWxzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b1NuYWtlQ2FzZSh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gdGV4dFxuICAgIC5yZXBsYWNlKC8oW2Etel0pKFtBLVpdKS9nLCBcIiQxXyQyXCIpXG4gICAgLnJlcGxhY2UoL1tcXHMtXSsvZywgXCJfXCIpXG4gICAgLnRvTG93ZXJDYXNlKCk7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIENvbnZlcnRzIGEgc3RyaW5nIHRvIGtlYmFiLWNhc2UuXG4gKiBAc3VtbWFyeSBUcmFuc2Zvcm1zIHRoZSBpbnB1dCBzdHJpbmcgaW50byBsb3dlcmNhc2Ugd2l0aCB3b3JkcyBzZXBhcmF0ZWQgYnkgaHlwaGVucy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIFRoZSBpbnB1dCBzdHJpbmcgdG8gYmUgY29udmVydGVkLlxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgaW5wdXQgc3RyaW5nIGNvbnZlcnRlZCB0byBrZWJhYi1jYXNlLlxuICpcbiAqIEBmdW5jdGlvbiB0b0tlYmFiQ2FzZVxuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6dXRpbHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvS2ViYWJDYXNlKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0ZXh0XG4gICAgLnJlcGxhY2UoLyhbYS16XSkoW0EtWl0pL2csIFwiJDEtJDJcIilcbiAgICAucmVwbGFjZSgvW1xcc19dKy9nLCBcIi1cIilcbiAgICAudG9Mb3dlckNhc2UoKTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQ29udmVydHMgYSBzdHJpbmcgdG8gUGFzY2FsQ2FzZS5cbiAqIEBzdW1tYXJ5IFRyYW5zZm9ybXMgdGhlIGlucHV0IHN0cmluZyBpbnRvIFBhc2NhbENhc2UgZm9ybWF0LCB3aGVyZSB3b3JkcyBhcmUgam9pbmVkIHdpdGhvdXQgc3BhY2VzXG4gKiBhbmQgZWFjaCB3b3JkIHN0YXJ0cyB3aXRoIGEgY2FwaXRhbCBsZXR0ZXIuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBUaGUgaW5wdXQgc3RyaW5nIHRvIGJlIGNvbnZlcnRlZC5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGlucHV0IHN0cmluZyBjb252ZXJ0ZWQgdG8gUGFzY2FsQ2FzZS5cbiAqXG4gKiBAZnVuY3Rpb24gdG9QYXNjYWxDYXNlXG4gKlxuICogQG1lbWJlck9mIG1vZHVsZTp1dGlsc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdG9QYXNjYWxDYXNlKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0ZXh0XG4gICAgLnJlcGxhY2UoLyg/Ol5cXHd8W0EtWl18XFxiXFx3KS9nLCAod29yZCkgPT4gd29yZC50b1VwcGVyQ2FzZSgpKVxuICAgIC5yZXBsYWNlKC9cXHMrL2csIFwiXCIpO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBFc2NhcGVzIHNwZWNpYWwgY2hhcmFjdGVycyBpbiBhIHN0cmluZyBmb3IgdXNlIGluIGEgcmVndWxhciBleHByZXNzaW9uLlxuICogQHN1bW1hcnkgQWRkcyBiYWNrc2xhc2hlcyBiZWZvcmUgY2hhcmFjdGVycyB0aGF0IGhhdmUgc3BlY2lhbCBtZWFuaW5nIGluIHJlZ3VsYXIgZXhwcmVzc2lvbnMsXG4gKiBhbGxvd2luZyB0aGUgc3RyaW5nIHRvIGJlIHVzZWQgYXMgYSBsaXRlcmFsIG1hdGNoIGluIGEgUmVnRXhwLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgLSBUaGUgc3RyaW5nIHRvIGVzY2FwZSBmb3IgcmVndWxhciBleHByZXNzaW9uIHVzZS5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGVzY2FwZWQgc3RyaW5nIHNhZmUgZm9yIHVzZSBpbiByZWd1bGFyIGV4cHJlc3Npb25zLlxuICpcbiAqIEBmdW5jdGlvbiBlc2NhcGVSZWdFeHBcbiAqXG4gKiBAbWVtYmVyT2YgbW9kdWxlOnV0aWxzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlc2NhcGVSZWdFeHAoc3RyaW5nOiBzdHJpbmcpIHtcbiAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9bLiorP14ke30oKXxbXFxdXFxcXF0vZywgXCJcXFxcJCZcIik7IC8vICQmIG1lYW5zIHRoZSB3aG9sZSBtYXRjaGVkIHN0cmluZ1xufVxuIiwiLyoqXG4gKiBAZGVzY3JpcHRpb24gRGVmYXVsdCBlbmNvZGluZyBmb3IgdGV4dCBvcGVyYXRpb25zLlxuICogQHN1bW1hcnkgVGhlIHN0YW5kYXJkIFVURi04IGVuY29kaW5nIHVzZWQgZm9yIHRleHQgcHJvY2Vzc2luZy5cbiAqIEBjb25zdCB7c3RyaW5nfSBFbmNvZGluZ1xuICogQG1lbWJlck9mIG1vZHVsZTp1dGlsc1xuICovXG5leHBvcnQgY29uc3QgRW5jb2RpbmcgPSBcInV0Zi04XCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFJlZ3VsYXIgZXhwcmVzc2lvbiBmb3Igc2VtYW50aWMgdmVyc2lvbmluZy5cbiAqIEBzdW1tYXJ5IEEgcmVnZXggcGF0dGVybiB0byBtYXRjaCBhbmQgcGFyc2Ugc2VtYW50aWMgdmVyc2lvbiBzdHJpbmdzLlxuICogQGNvbnN0IHtSZWdFeHB9IFNlbVZlcnNpb25SZWdleFxuICogQG1lbWJlck9mIG1vZHVsZTp1dGlsc1xuICovXG5leHBvcnQgY29uc3QgU2VtVmVyc2lvblJlZ2V4ID1cbiAgL14oXFxkKylcXC4oXFxkKylcXC4oXFxkKykoPzotKFswLTlBLVphLXotXSsoPzpcXC5bMC05QS1aYS16XSkpKS9nO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBFbnVtIGZvciBzZW1hbnRpYyB2ZXJzaW9uIGNvbXBvbmVudHMuXG4gKiBAc3VtbWFyeSBEZWZpbmVzIHRoZSB0aHJlZSBsZXZlbHMgb2Ygc2VtYW50aWMgdmVyc2lvbmluZzogUEFUQ0gsIE1JTk9SLCBhbmQgTUFKT1IuXG4gKiBAZW51bSB7c3RyaW5nfVxuICogQG1lbWJlck9mIG1vZHVsZTp1dGlsc1xuICovXG5leHBvcnQgZW51bSBTZW1WZXJzaW9uIHtcbiAgLyoqIFBhdGNoIHZlcnNpb24gZm9yIGJhY2t3YXJkcy1jb21wYXRpYmxlIGJ1ZyBmaXhlcy4gKi9cbiAgUEFUQ0ggPSBcInBhdGNoXCIsXG4gIC8qKiBNaW5vciB2ZXJzaW9uIGZvciBiYWNrd2FyZHMtY29tcGF0aWJsZSBuZXcgZmVhdHVyZXMuICovXG4gIE1JTk9SID0gXCJtaW5vclwiLFxuICAvKiogTWFqb3IgdmVyc2lvbiBmb3IgY2hhbmdlcyB0aGF0IGJyZWFrIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LiAqL1xuICBNQUpPUiA9IFwibWFqb3JcIixcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gRmxhZyB0byBpbmRpY2F0ZSBub24tQ0kgZW52aXJvbm1lbnQuXG4gKiBAc3VtbWFyeSBVc2VkIHRvIHNwZWNpZnkgdGhhdCBhIGNvbW1hbmQgc2hvdWxkIHJ1biBvdXRzaWRlIG9mIGEgQ29udGludW91cyBJbnRlZ3JhdGlvbiBlbnZpcm9ubWVudC5cbiAqIEBjb25zdCB7c3RyaW5nfSBOb0NJRkxhZ1xuICogQG1lbWJlck9mIG1vZHVsZTp1dGlsc1xuICovXG5leHBvcnQgY29uc3QgTm9DSUZMYWcgPSBcIi1uby1jaVwiO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBLZXkgZm9yIHRoZSBzZXR1cCBzY3JpcHQgaW4gcGFja2FnZS5qc29uLlxuICogQHN1bW1hcnkgSWRlbnRpZmllcyB0aGUgc2NyaXB0IHRoYXQgcnVucyBhZnRlciBwYWNrYWdlIGluc3RhbGxhdGlvbi5cbiAqIEBjb25zdCB7c3RyaW5nfSBTZXR1cFNjcmlwdEtleVxuICogQG1lbWJlck9mIG1vZHVsZTp1dGlsc1xuICovXG5leHBvcnQgY29uc3QgU2V0dXBTY3JpcHRLZXkgPSBcInBvc3RpbnN0YWxsXCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEVudW0gZm9yIHZhcmlvdXMgYXV0aGVudGljYXRpb24gdG9rZW5zLlxuICogQHN1bW1hcnkgRGVmaW5lcyB0aGUgZmlsZSBuYW1lcyBmb3Igc3RvcmluZyBkaWZmZXJlbnQgdHlwZXMgb2YgYXV0aGVudGljYXRpb24gdG9rZW5zLlxuICogQGVudW0ge3N0cmluZ31cbiAqIEBtZW1iZXJPZiBtb2R1bGU6dXRpbHNcbiAqL1xuZXhwb3J0IGVudW0gVG9rZW5zIHtcbiAgLyoqIEdpdCBhdXRoZW50aWNhdGlvbiB0b2tlbiBmaWxlIG5hbWUuICovXG4gIEdJVCA9IFwiLnRva2VuXCIsXG4gIC8qKiBOUE0gYXV0aGVudGljYXRpb24gdG9rZW4gZmlsZSBuYW1lLiAqL1xuICBOUE0gPSBcIi5ucG10b2tlblwiLFxuICAvKiogRG9ja2VyIGF1dGhlbnRpY2F0aW9uIHRva2VuIGZpbGUgbmFtZS4gKi9cbiAgRE9DS0VSID0gXCIuZG9ja2VydG9rZW5cIixcbiAgLyoqIENvbmZsdWVuY2UgYXV0aGVudGljYXRpb24gdG9rZW4gZmlsZSBuYW1lLiAqL1xuICBDT05GTFVFTkNFID0gXCIuY29uZmx1ZW5jZS10b2tlblwiLFxufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBDb2RlIHVzZWQgdG8gaW5kaWNhdGUgYW4gb3BlcmF0aW9uIHdhcyBhYm9ydGVkLlxuICogQHN1bW1hcnkgU3RhbmRhcmQgbWVzc2FnZSB1c2VkIHdoZW4gYSBwcm9jZXNzIGlzIG1hbnVhbGx5IHRlcm1pbmF0ZWQuXG4gKiBAY29uc3Qge3N0cmluZ30gQWJvcnRDb2RlXG4gKiBAbWVtYmVyT2YgbW9kdWxlOnV0aWxzXG4gKi9cbmV4cG9ydCBjb25zdCBBYm9ydENvZGUgPSBcIkFib3J0ZWRcIjtcbiIsImltcG9ydCB7IEVuY29kaW5nIH0gZnJvbSBcIi4uL3V0aWxzL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgT3V0cHV0V3JpdGVyIH0gZnJvbSBcIi4vT3V0cHV0V3JpdGVyXCI7XG5pbXBvcnQgeyBQcm9taXNlRXhlY3V0b3IgfSBmcm9tIFwiLi4vdXRpbHMvdHlwZXNcIjtcbmltcG9ydCB7IE91dHB1dFR5cGUgfSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IHsgc3R5bGUgfSBmcm9tIFwic3R5bGVkLXN0cmluZy1idWlsZGVyXCI7XG5pbXBvcnQgeyBMb2dnZXIsIExvZ2dpbmcgfSBmcm9tIFwiQGRlY2FmLXRzL2xvZ2dpbmdcIjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQSBzdGFuZGFyZCBvdXRwdXQgd3JpdGVyIGZvciBoYW5kbGluZyBjb21tYW5kIGV4ZWN1dGlvbiBvdXRwdXQuXG4gKiBAc3VtbWFyeSBUaGlzIGNsYXNzIGltcGxlbWVudHMgdGhlIE91dHB1dFdyaXRlciBpbnRlcmZhY2UgYW5kIHByb3ZpZGVzIG1ldGhvZHMgZm9yXG4gKiBoYW5kbGluZyB2YXJpb3VzIHR5cGVzIG9mIG91dHB1dCBmcm9tIGNvbW1hbmQgZXhlY3V0aW9uLCBpbmNsdWRpbmcgc3RhbmRhcmQgb3V0cHV0LFxuICogZXJyb3Igb3V0cHV0LCBhbmQgZXhpdCBjb2Rlcy4gSXQgYWxzbyBpbmNsdWRlcyB1dGlsaXR5IG1ldGhvZHMgZm9yIHBhcnNpbmcgY29tbWFuZHNcbiAqIGFuZCByZXNvbHZpbmcgb3IgcmVqZWN0aW5nIHByb21pc2VzIGJhc2VkIG9uIGV4ZWN1dGlvbiByZXN1bHRzLlxuICpcbiAqIEB0ZW1wbGF0ZSBSIC0gVGhlIHR5cGUgb2YgdGhlIHJlc29sdmVkIHZhbHVlLCBkZWZhdWx0aW5nIHRvIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0gY21kIC0gVGhlIGNvbW1hbmQgc3RyaW5nIHRvIGJlIGV4ZWN1dGVkLlxuICogQHBhcmFtIGxvY2sgLSBBIFByb21pc2VFeGVjdXRvciB0byBjb250cm9sIHRoZSBhc3luY2hyb25vdXMgZmxvdy5cbiAqIEBwYXJhbSBhcmdzIC0gQWRkaXRpb25hbCBhcmd1bWVudHMgKHVudXNlZCBpbiB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbikuXG4gKlxuICogQGNsYXNzXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgU3RhbmRhcmRPdXRwdXRXcml0ZXIgfSBmcm9tICdAZGVjYWYtdHMvdXRpbHMnO1xuICogaW1wb3J0IHsgUHJvbWlzZUV4ZWN1dG9yIH0gZnJvbSAnQGRlY2FmLXRzL3V0aWxzJztcbiAqIFxuICogLy8gQ3JlYXRlIGEgcHJvbWlzZSBleGVjdXRvclxuICogY29uc3QgZXhlY3V0b3I6IFByb21pc2VFeGVjdXRvcjxzdHJpbmc+ID0ge1xuICogICByZXNvbHZlOiAodmFsdWUpID0+IGNvbnNvbGUubG9nKGBSZXNvbHZlZDogJHt2YWx1ZX1gKSxcbiAqICAgcmVqZWN0OiAoZXJyb3IpID0+IGNvbnNvbGUuZXJyb3IoYFJlamVjdGVkOiAke2Vycm9yLm1lc3NhZ2V9YClcbiAqIH07XG4gKiBcbiAqIC8vIENyZWF0ZSBhIHN0YW5kYXJkIG91dHB1dCB3cml0ZXJcbiAqIGNvbnN0IHdyaXRlciA9IG5ldyBTdGFuZGFyZE91dHB1dFdyaXRlcignbHMgLWxhJywgZXhlY3V0b3IpO1xuICogXG4gKiAvLyBVc2UgdGhlIHdyaXRlciB0byBoYW5kbGUgY29tbWFuZCBvdXRwdXRcbiAqIHdyaXRlci5kYXRhKCdGaWxlIGxpc3Qgb3V0cHV0Li4uJyk7XG4gKiB3cml0ZXIuZXhpdCgwLCBbJ0NvbW1hbmQgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5J10pO1xuICogYGBgXG4gKlxuICogQG1lcm1haWRcbiAqIHNlcXVlbmNlRGlhZ3JhbVxuICogICBwYXJ0aWNpcGFudCBDbGllbnRcbiAqICAgcGFydGljaXBhbnQgU3RhbmRhcmRPdXRwdXRXcml0ZXJcbiAqICAgcGFydGljaXBhbnQgTG9nZ2VyXG4gKiAgIHBhcnRpY2lwYW50IFByb21pc2VFeGVjdXRvclxuICogICBcbiAqICAgQ2xpZW50LT4+U3RhbmRhcmRPdXRwdXRXcml0ZXI6IG5ldyBTdGFuZGFyZE91dHB1dFdyaXRlcihjbWQsIGxvY2spXG4gKiAgIFN0YW5kYXJkT3V0cHV0V3JpdGVyLT4+TG9nZ2VyOiBMb2dnaW5nLmZvcihjbWQpXG4gKiAgIFxuICogICBDbGllbnQtPj5TdGFuZGFyZE91dHB1dFdyaXRlcjogZGF0YShjaHVuaylcbiAqICAgU3RhbmRhcmRPdXRwdXRXcml0ZXItPj5TdGFuZGFyZE91dHB1dFdyaXRlcjogbG9nKFwic3Rkb3V0XCIsIGNodW5rKVxuICogICBTdGFuZGFyZE91dHB1dFdyaXRlci0+PkxvZ2dlcjogbG9nZ2VyLmluZm8obG9nKVxuICogICBcbiAqICAgQ2xpZW50LT4+U3RhbmRhcmRPdXRwdXRXcml0ZXI6IGVycm9yKGNodW5rKVxuICogICBTdGFuZGFyZE91dHB1dFdyaXRlci0+PlN0YW5kYXJkT3V0cHV0V3JpdGVyOiBsb2coXCJzdGRlcnJcIiwgY2h1bmspXG4gKiAgIFN0YW5kYXJkT3V0cHV0V3JpdGVyLT4+TG9nZ2VyOiBsb2dnZXIuaW5mbyhsb2cpXG4gKiAgIFxuICogICBDbGllbnQtPj5TdGFuZGFyZE91dHB1dFdyaXRlcjogZXhpdChjb2RlLCBsb2dzKVxuICogICBTdGFuZGFyZE91dHB1dFdyaXRlci0+PlN0YW5kYXJkT3V0cHV0V3JpdGVyOiBsb2coXCJzdGRvdXRcIiwgZXhpdE1lc3NhZ2UpXG4gKiAgIGFsdCBjb2RlID09PSAwXG4gKiAgICAgU3RhbmRhcmRPdXRwdXRXcml0ZXItPj5TdGFuZGFyZE91dHB1dFdyaXRlcjogcmVzb2x2ZShsb2dzKVxuICogICAgIFN0YW5kYXJkT3V0cHV0V3JpdGVyLT4+UHJvbWlzZUV4ZWN1dG9yOiBsb2NrLnJlc29sdmUocmVhc29uKVxuICogICBlbHNlIGNvZGUgIT09IDBcbiAqICAgICBTdGFuZGFyZE91dHB1dFdyaXRlci0+PlN0YW5kYXJkT3V0cHV0V3JpdGVyOiByZWplY3QoZXJyb3IpXG4gKiAgICAgU3RhbmRhcmRPdXRwdXRXcml0ZXItPj5Qcm9taXNlRXhlY3V0b3I6IGxvY2sucmVqZWN0KHJlYXNvbilcbiAqICAgZW5kXG4gKi9cbmV4cG9ydCBjbGFzcyBTdGFuZGFyZE91dHB1dFdyaXRlcjxSID0gc3RyaW5nPiBpbXBsZW1lbnRzIE91dHB1dFdyaXRlciB7XG4gIHByb3RlY3RlZCBsb2dnZXI6IExvZ2dlcjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgY21kOiBzdHJpbmcsXG4gICAgcHJvdGVjdGVkIGxvY2s6IFByb21pc2VFeGVjdXRvcjxSPixcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgLi4uYXJnczogdW5rbm93bltdXG4gICkge1xuICAgIHRoaXMubG9nZ2VyID0gTG9nZ2luZy5mb3IodGhpcy5jbWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBMb2dzIG91dHB1dCB0byB0aGUgY29uc29sZS5cbiAgICogQHN1bW1hcnkgRm9ybWF0cyBhbmQgbG9ncyB0aGUgZ2l2ZW4gZGF0YSB3aXRoIGEgdGltZXN0YW1wIGFuZCB0eXBlIGluZGljYXRvci5cbiAgICpcbiAgICogQHBhcmFtIHR5cGUgLSBUaGUgdHlwZSBvZiBvdXRwdXQgKHN0ZG91dCBvciBzdGRlcnIpLlxuICAgKiBAcGFyYW0gZGF0YSAtIFRoZSBkYXRhIHRvIGJlIGxvZ2dlZC5cbiAgICovXG4gIHByb3RlY3RlZCBsb2codHlwZTogT3V0cHV0VHlwZSwgZGF0YTogc3RyaW5nIHwgQnVmZmVyKSB7XG4gICAgZGF0YSA9IEJ1ZmZlci5pc0J1ZmZlcihkYXRhKSA/IGRhdGEudG9TdHJpbmcoRW5jb2RpbmcpIDogZGF0YTtcbiAgICBjb25zdCBsb2cgPSB0eXBlID09PSBcInN0ZGVyclwiID8gc3R5bGUoZGF0YSkucmVkLnRleHQgOiBkYXRhO1xuICAgIHRoaXMubG9nZ2VyLmluZm8obG9nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gSGFuZGxlcyBzdGFuZGFyZCBvdXRwdXQgZGF0YS5cbiAgICogQHN1bW1hcnkgTG9ncyB0aGUgZ2l2ZW4gY2h1bmsgYXMgc3RhbmRhcmQgb3V0cHV0LlxuICAgKlxuICAgKiBAcGFyYW0gY2h1bmsgLSBUaGUgZGF0YSBjaHVuayB0byBiZSBsb2dnZWQuXG4gICAqL1xuICBkYXRhKGNodW5rOiBhbnkpIHtcbiAgICB0aGlzLmxvZyhcInN0ZG91dFwiLCBTdHJpbmcoY2h1bmspKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gSGFuZGxlcyBlcnJvciBvdXRwdXQgZGF0YS5cbiAgICogQHN1bW1hcnkgTG9ncyB0aGUgZ2l2ZW4gY2h1bmsgYXMgZXJyb3Igb3V0cHV0LlxuICAgKlxuICAgKiBAcGFyYW0gY2h1bmsgLSBUaGUgZXJyb3IgZGF0YSBjaHVuayB0byBiZSBsb2dnZWQuXG4gICAqL1xuICBlcnJvcihjaHVuazogYW55KSB7XG4gICAgdGhpcy5sb2coXCJzdGRlcnJcIiwgU3RyaW5nKGNodW5rKSk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEhhbmRsZXMgZXJyb3Igb2JqZWN0cy5cbiAgICogQHN1bW1hcnkgTG9ncyB0aGUgZXJyb3IgbWVzc2FnZSBmcm9tIHRoZSBnaXZlbiBFcnJvciBvYmplY3QuXG4gICAqXG4gICAqIEBwYXJhbSBlcnIgLSBUaGUgRXJyb3Igb2JqZWN0IHRvIGJlIGxvZ2dlZC5cbiAgICovXG4gIGVycm9ycyhlcnI6IEVycm9yKSB7XG4gICAgdGhpcy5sb2coXCJzdGRlcnJcIiwgYEVycm9yIGV4ZWN1dGluZyBjb21tYW5kIGV4aXRlZCA6ICR7ZXJyfWApO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBIYW5kbGVzIHRoZSBleGl0IG9mIGEgY29tbWFuZC5cbiAgICogQHN1bW1hcnkgTG9ncyB0aGUgZXhpdCBjb2RlIGFuZCByZXNvbHZlcyBvciByZWplY3RzIHRoZSBwcm9taXNlIGJhc2VkIG9uIHRoZSBjb2RlLlxuICAgKlxuICAgKiBAcGFyYW0gY29kZSAtIFRoZSBleGl0IGNvZGUgb2YgdGhlIGNvbW1hbmQuXG4gICAqIEBwYXJhbSBsb2dzIC0gQXJyYXkgb2YgbG9nIG1lc3NhZ2VzIHRvIGJlIHByb2Nlc3NlZCBiZWZvcmUgZXhpdGluZy5cbiAgICovXG4gIGV4aXQoY29kZTogbnVtYmVyIHwgc3RyaW5nLCBsb2dzOiBzdHJpbmdbXSkge1xuICAgIHRoaXMubG9nKFxuICAgICAgXCJzdGRvdXRcIixcbiAgICAgIGBjb21tYW5kIGV4aXRlZCBjb2RlIDogJHtjb2RlID09PSAwID8gc3R5bGUoY29kZS50b1N0cmluZygpKS5ncmVlbi50ZXh0IDogc3R5bGUoY29kZSA9PT0gbnVsbCA/IFwibnVsbFwiIDogY29kZS50b1N0cmluZygpKS5yZWQudGV4dH1gXG4gICAgKTtcbiAgICBpZiAoY29kZSA9PT0gMCkge1xuICAgICAgdGhpcy5yZXNvbHZlKGxvZ3MubWFwKChsKSA9PiBsLnRyaW0oKSkuam9pbihcIlxcblwiKSBhcyBSKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZWplY3QobmV3IEVycm9yKGxvZ3MubGVuZ3RoID8gbG9ncy5qb2luKFwiXFxuXCIpIDogY29kZS50b1N0cmluZygpKSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBQYXJzZXMgYSBjb21tYW5kIHN0cmluZyBvciBhcnJheSBpbnRvIGNvbXBvbmVudHMuXG4gICAqIEBzdW1tYXJ5IENvbnZlcnRzIHRoZSBjb21tYW5kIGludG8gYSBjb25zaXN0ZW50IGZvcm1hdCBhbmQgc3RvcmVzIGl0LCB0aGVuIHJldHVybnMgaXQgc3BsaXQgaW50byBjb21tYW5kIGFuZCBhcmd1bWVudHMuXG4gICAqXG4gICAqIEBwYXJhbSBjb21tYW5kIC0gVGhlIGNvbW1hbmQgYXMgYSBzdHJpbmcgb3IgYXJyYXkgb2Ygc3RyaW5ncy5cbiAgICogQHJldHVybiBBIHR1cGxlIGNvbnRhaW5pbmcgdGhlIGNvbW1hbmQgYW5kIGl0cyBhcmd1bWVudHMgYXMgc2VwYXJhdGUgZWxlbWVudHMuXG4gICAqL1xuICBwYXJzZUNvbW1hbmQoY29tbWFuZDogc3RyaW5nIHwgc3RyaW5nW10pOiBbc3RyaW5nLCBzdHJpbmdbXV0ge1xuICAgIGNvbW1hbmQgPSB0eXBlb2YgY29tbWFuZCA9PT0gXCJzdHJpbmdcIiA/IGNvbW1hbmQuc3BsaXQoXCIgXCIpIDogY29tbWFuZDtcbiAgICB0aGlzLmNtZCA9IGNvbW1hbmQuam9pbihcIiBcIik7XG4gICAgcmV0dXJuIFtjb21tYW5kWzBdLCBjb21tYW5kLnNsaWNlKDEpXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVzb2x2ZXMgdGhlIHByb21pc2Ugd2l0aCBhIHN1Y2Nlc3MgbWVzc2FnZS5cbiAgICogQHN1bW1hcnkgTG9ncyBhIHN1Y2Nlc3MgbWVzc2FnZSBhbmQgcmVzb2x2ZXMgdGhlIHByb21pc2Ugd2l0aCB0aGUgZ2l2ZW4gcmVhc29uLlxuICAgKlxuICAgKiBAcGFyYW0gcmVhc29uIC0gVGhlIHJlYXNvbiBmb3IgcmVzb2x2aW5nIHRoZSBwcm9taXNlLlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlc29sdmUocmVhc29uOiBSKSB7XG4gICAgdGhpcy5sb2coXG4gICAgICBcInN0ZG91dFwiLFxuICAgICAgYCR7dGhpcy5jbWR9IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseTogJHtzdHlsZShyZWFzb24gPyBcInJhbiB0byBjb21wbGV0aW9uXCIgOiAocmVhc29uIGFzIHN0cmluZykpLmdyZWVufWBcbiAgICApO1xuICAgIHRoaXMubG9jay5yZXNvbHZlKHJlYXNvbik7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFJlamVjdHMgdGhlIHByb21pc2Ugd2l0aCBhbiBlcnJvciBtZXNzYWdlLlxuICAgKiBAc3VtbWFyeSBMb2dzIGFuIGVycm9yIG1lc3NhZ2UgYW5kIHJlamVjdHMgdGhlIHByb21pc2Ugd2l0aCB0aGUgZ2l2ZW4gcmVhc29uLlxuICAgKlxuICAgKiBAcGFyYW0gcmVhc29uIC0gVGhlIHJlYXNvbiBmb3IgcmVqZWN0aW5nIHRoZSBwcm9taXNlLCBlaXRoZXIgYSBudW1iZXIgKGV4aXQgY29kZSkgb3IgYSBzdHJpbmcuXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVqZWN0KHJlYXNvbjogbnVtYmVyIHwgc3RyaW5nIHwgRXJyb3IpIHtcbiAgICBpZiAoIShyZWFzb24gaW5zdGFuY2VvZiBFcnJvcikpIHtcbiAgICAgIHJlYXNvbiA9IG5ldyBFcnJvcihcbiAgICAgICAgdHlwZW9mIHJlYXNvbiA9PT0gXCJudW1iZXJcIiA/IGBFeGl0IGNvZGUgJHtyZWFzb259YCA6IHJlYXNvblxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy5sb2coXG4gICAgICBcInN0ZGVyclwiLFxuICAgICAgYCR7dGhpcy5jbWR9IGZhaWxlZCB0byBleGVjdXRlOiAke3N0eWxlKHJlYXNvbi5tZXNzYWdlKS5yZWR9YFxuICAgICk7XG4gICAgdGhpcy5sb2NrLnJlamVjdChyZWFzb24pO1xuICB9XG59XG4iLCJpbXBvcnQge1xuICBDaGlsZFByb2Nlc3NXaXRob3V0TnVsbFN0cmVhbXMsXG4gIHNwYXduLFxuICBTcGF3bk9wdGlvbnNXaXRob3V0U3RkaW8sXG59IGZyb20gXCJjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgeyBTdGFuZGFyZE91dHB1dFdyaXRlciB9IGZyb20gXCIuLi93cml0ZXJzL1N0YW5kYXJkT3V0cHV0V3JpdGVyXCI7XG5pbXBvcnQgeyBDb21tYW5kUmVzdWx0IH0gZnJvbSBcIi4vdHlwZXNcIjtcbmltcG9ydCB7IE91dHB1dFdyaXRlckNvbnN0cnVjdG9yIH0gZnJvbSBcIi4uL3dyaXRlcnMvdHlwZXNcIjtcbmltcG9ydCB7IEFib3J0Q29kZSB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgTG9nZ2VyLCBMb2dnaW5nIH0gZnJvbSBcIkBkZWNhZi10cy9sb2dnaW5nXCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIENyZWF0ZXMgYSBsb2NrZWQgdmVyc2lvbiBvZiBhIGZ1bmN0aW9uLlxuICogQHN1bW1hcnkgVGhpcyBoaWdoZXItb3JkZXIgZnVuY3Rpb24gdGFrZXMgYSBmdW5jdGlvbiBhbmQgcmV0dXJucyBhIG5ldyBmdW5jdGlvbiB0aGF0IGVuc3VyZXNcbiAqIHNlcXVlbnRpYWwgZXhlY3V0aW9uIG9mIHRoZSBvcmlnaW5hbCBmdW5jdGlvbiwgZXZlbiB3aGVuIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBjb25jdXJyZW50bHkuXG4gKiBJdCB1c2VzIGEgUHJvbWlzZS1iYXNlZCBsb2NraW5nIG1lY2hhbmlzbSB0byBxdWV1ZSBmdW5jdGlvbiBjYWxscy5cbiAqXG4gKiBAdGVtcGxhdGUgUiAtIFRoZSByZXR1cm4gdHlwZSBvZiB0aGUgaW5wdXQgZnVuY3Rpb24uXG4gKlxuICogQHBhcmFtIGYgLSBUaGUgZnVuY3Rpb24gdG8gYmUgbG9ja2VkLiBJdCBjYW4gdGFrZSBhbnkgbnVtYmVyIG9mIHBhcmFtZXRlcnMgYW5kIHJldHVybiBhIHZhbHVlIG9mIHR5cGUgUi5cbiAqIEByZXR1cm4gQSBuZXcgZnVuY3Rpb24gd2l0aCB0aGUgc2FtZSBzaWduYXR1cmUgYXMgdGhlIGlucHV0IGZ1bmN0aW9uLCBidXQgd2l0aCBzZXF1ZW50aWFsIGV4ZWN1dGlvbiBndWFyYW50ZWVkLlxuICpcbiAqIEBmdW5jdGlvbiBsb2NraWZ5XG4gKlxuICogQG1lcm1haWRcbiAqIHNlcXVlbmNlRGlhZ3JhbVxuICogICBwYXJ0aWNpcGFudCBDYWxsZXJcbiAqICAgcGFydGljaXBhbnQgTG9ja2VkRnVuY3Rpb25cbiAqICAgcGFydGljaXBhbnQgT3JpZ2luYWxGdW5jdGlvblxuICogICBDYWxsZXItPj5Mb2NrZWRGdW5jdGlvbjogQ2FsbCB3aXRoIHBhcmFtc1xuICogICBMb2NrZWRGdW5jdGlvbi0+PkxvY2tlZEZ1bmN0aW9uOiBDaGVjayBjdXJyZW50IGxvY2tcbiAqICAgYWx0IExvY2sgaXMgcmVzb2x2ZWRcbiAqICAgICBMb2NrZWRGdW5jdGlvbi0+Pk9yaWdpbmFsRnVuY3Rpb246IEV4ZWN1dGUgd2l0aCBwYXJhbXNcbiAqICAgICBPcmlnaW5hbEZ1bmN0aW9uLS0+PkxvY2tlZEZ1bmN0aW9uOiBSZXR1cm4gcmVzdWx0XG4gKiAgICAgTG9ja2VkRnVuY3Rpb24tLT4+Q2FsbGVyOiBSZXR1cm4gcmVzdWx0XG4gKiAgIGVsc2UgTG9jayBpcyBwZW5kaW5nXG4gKiAgICAgTG9ja2VkRnVuY3Rpb24tPj5Mb2NrZWRGdW5jdGlvbjogUXVldWUgZXhlY3V0aW9uXG4gKiAgICAgTG9ja2VkRnVuY3Rpb24tLT4+Q2FsbGVyOiBSZXR1cm4gcHJvbWlzZVxuICogICAgIE5vdGUgb3ZlciBMb2NrZWRGdW5jdGlvbjogV2FpdCBmb3IgcHJldmlvdXMgZXhlY3V0aW9uXG4gKiAgICAgTG9ja2VkRnVuY3Rpb24tPj5PcmlnaW5hbEZ1bmN0aW9uOiBFeGVjdXRlIHdpdGggcGFyYW1zXG4gKiAgICAgT3JpZ2luYWxGdW5jdGlvbi0tPj5Mb2NrZWRGdW5jdGlvbjogUmV0dXJuIHJlc3VsdFxuICogICAgIExvY2tlZEZ1bmN0aW9uLS0+PkNhbGxlcjogUmVzb2x2ZSBwcm9taXNlIHdpdGggcmVzdWx0XG4gKiAgIGVuZFxuICogICBMb2NrZWRGdW5jdGlvbi0+PkxvY2tlZEZ1bmN0aW9uOiBVcGRhdGUgbG9ja1xuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6dXRpbHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvY2tpZnk8Uj4oZjogKC4uLnBhcmFtczogdW5rbm93bltdKSA9PiBSKSB7XG4gIGxldCBsb2NrOiBQcm9taXNlPFIgfCB2b2lkPiA9IFByb21pc2UucmVzb2x2ZSgpO1xuICByZXR1cm4gKC4uLnBhcmFtczogdW5rbm93bltdKSA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gbG9jay50aGVuKCgpID0+IGYoLi4ucGFyYW1zKSk7XG4gICAgbG9jayA9IHJlc3VsdC5jYXRjaCgoKSA9PiB7fSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQ2hhaW5zIG11bHRpcGxlIGFib3J0IHNpZ25hbHMgdG8gYSBjb250cm9sbGVyLlxuICogQHN1bW1hcnkgQ3JlYXRlcyBhIG1lY2hhbmlzbSB3aGVyZSBtdWx0aXBsZSBhYm9ydCBzaWduYWxzIGNhbiB0cmlnZ2VyIGEgc2luZ2xlIGFib3J0IGNvbnRyb2xsZXIuXG4gKiBUaGlzIGlzIHVzZWZ1bCBmb3IgY29vcmRpbmF0aW5nIGNhbmNlbGxhdGlvbiBhY3Jvc3MgbXVsdGlwbGUgYXN5bmNocm9ub3VzIG9wZXJhdGlvbnMuXG4gKlxuICogQHBhcmFtIHtBYm9ydENvbnRyb2xsZXJ9IGNvbnRyb2xsZXIgLSBUaGUgYWJvcnQgY29udHJvbGxlciB0byBiZSB0cmlnZ2VyZWQgYnkgc2lnbmFscy5cbiAqIEBwYXJhbSB7Li4uQWJvcnRTaWduYWx9IHNpZ25hbHMgLSBPbmUgb3IgbW9yZSBhYm9ydCBzaWduYWxzIHRoYXQgY2FuIHRyaWdnZXIgdGhlIGNvbnRyb2xsZXIuXG4gKiBAcmV0dXJuIHtBYm9ydENvbnRyb2xsZXJ9IFRoZSBpbnB1dCBjb250cm9sbGVyLCBub3cgY29ubmVjdGVkIHRvIHRoZSBzaWduYWxzLlxuICpcbiAqIEBmdW5jdGlvbiBjaGFpbkFib3J0Q29udHJvbGxlclxuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6dXRpbHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoYWluQWJvcnRDb250cm9sbGVyKFxuICBjb250cm9sbGVyOiBBYm9ydENvbnRyb2xsZXIsXG4gIC4uLnNpZ25hbHM6IEFib3J0U2lnbmFsW11cbik6IEFib3J0Q29udHJvbGxlcjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhIG5ldyBjb250cm9sbGVyIGNoYWluZWQgdG8gbXVsdGlwbGUgYWJvcnQgc2lnbmFscy5cbiAqIEBzdW1tYXJ5IENyZWF0ZXMgYSBuZXcgYWJvcnQgY29udHJvbGxlciB0aGF0IHdpbGwgYmUgdHJpZ2dlcmVkIGlmIGFueSBvZiB0aGUgcHJvdmlkZWQgc2lnbmFscyBhcmUgYWJvcnRlZC5cbiAqXG4gKiBAcGFyYW0gey4uLkFib3J0U2lnbmFsfSBzaWduYWxzIC0gT25lIG9yIG1vcmUgYWJvcnQgc2lnbmFscyB0aGF0IGNhbiB0cmlnZ2VyIHRoZSBuZXcgY29udHJvbGxlci5cbiAqIEByZXR1cm4ge0Fib3J0Q29udHJvbGxlcn0gQSBuZXcgYWJvcnQgY29udHJvbGxlciBjb25uZWN0ZWQgdG8gdGhlIHNpZ25hbHMuXG4gKlxuICogQGZ1bmN0aW9uIGNoYWluQWJvcnRDb250cm9sbGVyXG4gKlxuICogQG1lbWJlck9mIG1vZHVsZTp1dGlsc1xuICovXG5leHBvcnQgZnVuY3Rpb24gY2hhaW5BYm9ydENvbnRyb2xsZXIoXG4gIC4uLnNpZ25hbHM6IEFib3J0U2lnbmFsW11cbik6IEFib3J0Q29udHJvbGxlcjtcblxuZXhwb3J0IGZ1bmN0aW9uIGNoYWluQWJvcnRDb250cm9sbGVyKFxuICBhcmd1bWVudDA6IEFib3J0Q29udHJvbGxlciB8IEFib3J0U2lnbmFsLFxuICAuLi5yZW1haW5kZXI6IEFib3J0U2lnbmFsW11cbik6IEFib3J0Q29udHJvbGxlciB7XG4gIGxldCBzaWduYWxzOiBBYm9ydFNpZ25hbFtdO1xuICBsZXQgY29udHJvbGxlcjogQWJvcnRDb250cm9sbGVyO1xuXG4gIC8vIG5vcm1hbGl6ZSBhcmdzXG4gIGlmIChhcmd1bWVudDAgaW5zdGFuY2VvZiBBYm9ydFNpZ25hbCkge1xuICAgIGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgc2lnbmFscyA9IFthcmd1bWVudDAsIC4uLnJlbWFpbmRlcl07XG4gIH0gZWxzZSB7XG4gICAgY29udHJvbGxlciA9IGFyZ3VtZW50MDtcbiAgICBzaWduYWxzID0gcmVtYWluZGVyO1xuICB9XG5cbiAgLy8gaWYgdGhlIGNvbnRyb2xsZXIgaXMgYWxyZWFkeSBhYm9ydGVkLCBleGl0IGVhcmx5XG4gIGlmIChjb250cm9sbGVyLnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgcmV0dXJuIGNvbnRyb2xsZXI7XG4gIH1cblxuICBjb25zdCBoYW5kbGVyID0gKCkgPT4gY29udHJvbGxlci5hYm9ydCgpO1xuXG4gIGZvciAoY29uc3Qgc2lnbmFsIG9mIHNpZ25hbHMpIHtcbiAgICAvLyBjaGVjayBiZWZvcmUgYWRkaW5nISAoYW5kIGFzc3VtZSB0aGVyZSBpcyBubyBwb3NzaWJsZSB3YXkgdGhhdCB0aGUgc2lnbmFsIGNvdWxkXG4gICAgLy8gYWJvcnQgYmV0d2VlbiB0aGUgYGlmYCBjaGVjayBhbmQgYWRkaW5nIHRoZSBldmVudCBsaXN0ZW5lcilcbiAgICBpZiAoc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgIGNvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIGhhbmRsZXIsIHtcbiAgICAgIG9uY2U6IHRydWUsXG4gICAgICBzaWduYWw6IGNvbnRyb2xsZXIuc2lnbmFsLFxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIGNvbnRyb2xsZXI7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFNwYXducyBhIGNvbW1hbmQgYXMgYSBjaGlsZCBwcm9jZXNzIHdpdGggb3V0cHV0IGhhbmRsaW5nLlxuICogQHN1bW1hcnkgQ3JlYXRlcyBhIGNoaWxkIHByb2Nlc3MgdG8gZXhlY3V0ZSBhIGNvbW1hbmQgd2l0aCBzdXBwb3J0IGZvciBwaXBpbmcgbXVsdGlwbGUgY29tbWFuZHMsXG4gKiBjdXN0b20gb3V0cHV0IGhhbmRsaW5nLCBhbmQgYWJvcnQgY29udHJvbC4gVGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSBsb3ctbGV2ZWwgZGV0YWlscyBvZlxuICogc3Bhd25pbmcgcHJvY2Vzc2VzIGFuZCBjb25uZWN0aW5nIHRoZWlyIGlucHV0cy9vdXRwdXRzIHdoZW4gcGlwaW5nIGlzIHVzZWQuXG4gKlxuICogQHRlbXBsYXRlIFIgLSBUaGUgdHlwZSBvZiB0aGUgcHJvY2Vzc2VkIG91dHB1dCwgZGVmYXVsdGluZyB0byBzdHJpbmcuXG4gKiBAcGFyYW0ge1N0YW5kYXJkT3V0cHV0V3JpdGVyPFI+fSBvdXRwdXQgLSBUaGUgb3V0cHV0IHdyaXRlciB0byBoYW5kbGUgY29tbWFuZCBvdXRwdXQuXG4gKiBAcGFyYW0ge3N0cmluZ30gY29tbWFuZCAtIFRoZSBjb21tYW5kIHRvIGV4ZWN1dGUsIGNhbiBpbmNsdWRlIHBpcGUgb3BlcmF0b3JzLlxuICogQHBhcmFtIHtTcGF3bk9wdGlvbnNXaXRob3V0U3RkaW99IG9wdHMgLSBPcHRpb25zIGZvciB0aGUgc3Bhd25lZCBwcm9jZXNzLlxuICogQHBhcmFtIHtBYm9ydENvbnRyb2xsZXJ9IGFib3J0IC0gQ29udHJvbGxlciB0byBhYm9ydCB0aGUgY29tbWFuZCBleGVjdXRpb24uXG4gKiBAcGFyYW0ge0xvZ2dlcn0gbG9nZ2VyIC0gTG9nZ2VyIGZvciByZWNvcmRpbmcgY29tbWFuZCBleGVjdXRpb24gZGV0YWlscy5cbiAqIEByZXR1cm4ge0NoaWxkUHJvY2Vzc1dpdGhvdXROdWxsU3RyZWFtc30gVGhlIHNwYXduZWQgY2hpbGQgcHJvY2Vzcy5cbiAqXG4gKiBAZnVuY3Rpb24gc3Bhd25Db21tYW5kXG4gKlxuICogQG1lbWJlck9mIG1vZHVsZTp1dGlsc1xuICovXG5leHBvcnQgZnVuY3Rpb24gc3Bhd25Db21tYW5kPFIgPSBzdHJpbmc+KFxuICBvdXRwdXQ6IFN0YW5kYXJkT3V0cHV0V3JpdGVyPFI+LFxuICBjb21tYW5kOiBzdHJpbmcsXG4gIG9wdHM6IFNwYXduT3B0aW9uc1dpdGhvdXRTdGRpbyxcbiAgYWJvcnQ6IEFib3J0Q29udHJvbGxlcixcbiAgbG9nZ2VyOiBMb2dnZXJcbik6IENoaWxkUHJvY2Vzc1dpdGhvdXROdWxsU3RyZWFtcyB7XG4gIGZ1bmN0aW9uIHNwYXduSW5uZXIoY29tbWFuZDogc3RyaW5nLCBjb250cm9sbGVyOiBBYm9ydENvbnRyb2xsZXIpIHtcbiAgICBjb25zdCBbY21kLCBhcmd6XSA9IG91dHB1dC5wYXJzZUNvbW1hbmQoY29tbWFuZCk7XG4gICAgbG9nZ2VyLmluZm8oYFJ1bm5pbmcgY29tbWFuZDogJHtjbWR9YCk7XG4gICAgbG9nZ2VyLmRlYnVnKGB3aXRoIGFyZ3M6ICR7YXJnei5qb2luKFwiIFwiKX1gKTtcbiAgICBjb25zdCBjaGlsZFByb2Nlc3MgPSBzcGF3bihjbWQsIGFyZ3osIHtcbiAgICAgIC4uLm9wdHMsXG4gICAgICBjd2Q6IG9wdHMuY3dkIHx8IHByb2Nlc3MuY3dkKCksXG4gICAgICBlbnY6IE9iamVjdC5hc3NpZ24oe30sIHByb2Nlc3MuZW52LCBvcHRzLmVudiwgeyBQQVRIOiBwcm9jZXNzLmVudi5QQVRIIH0pLFxuICAgICAgc2hlbGw6IG9wdHMuc2hlbGwgfHwgZmFsc2UsXG4gICAgICBzaWduYWw6IGNvbnRyb2xsZXIuc2lnbmFsLFxuICAgIH0pO1xuICAgIGxvZ2dlci52ZXJib3NlKGBwaWQgOiAke2NoaWxkUHJvY2Vzcy5waWR9YCk7XG4gICAgcmV0dXJuIGNoaWxkUHJvY2VzcztcbiAgfVxuXG4gIGNvbnN0IG0gPSBjb21tYW5kLm1hdGNoKC9bPD4kI10vZyk7XG4gIGlmIChtKVxuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBJbnZhbGlkIGNvbW1hbmQ6ICR7Y29tbWFuZH0uIGNvbnRhaW5zIGludmFsaWQgY2hhcmFjdGVyczogJHttfWBcbiAgICApO1xuICBpZiAoY29tbWFuZC5pbmNsdWRlcyhcIiB8IFwiKSkge1xuICAgIGNvbnN0IGNtZHMgPSBjb21tYW5kLnNwbGl0KFwiIHwgXCIpO1xuICAgIGNvbnN0IHNwYXducyA9IFtdO1xuICAgIGNvbnN0IGNvbnRyb2xsZXJzID0gbmV3IEFycmF5KGNtZHMubGVuZ3RoKTtcbiAgICBjb250cm9sbGVyc1swXSA9IGFib3J0O1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY21kcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGkgIT09IDApXG4gICAgICAgIGNvbnRyb2xsZXJzW2ldID0gY2hhaW5BYm9ydENvbnRyb2xsZXIoY29udHJvbGxlcnNbaSAtIDFdLnNpZ25hbCk7XG4gICAgICBzcGF3bnMucHVzaChzcGF3bklubmVyKGNtZHNbaV0sIGNvbnRyb2xsZXJzW2ldKSk7XG4gICAgICBpZiAoaSA9PT0gMCkgY29udGludWU7XG4gICAgICBzcGF3bnNbaSAtIDFdLnN0ZG91dC5waXBlKHNwYXduc1tpXS5zdGRpbik7XG4gICAgfVxuICAgIHJldHVybiBzcGF3bnNbY21kcy5sZW5ndGggLSAxXTtcbiAgfVxuXG4gIHJldHVybiBzcGF3bklubmVyKGNvbW1hbmQsIGFib3J0KTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gRXhlY3V0ZXMgYSBjb21tYW5kIGFzeW5jaHJvbm91c2x5IHdpdGggY3VzdG9taXphYmxlIG91dHB1dCBoYW5kbGluZy5cbiAqIEBzdW1tYXJ5IFRoaXMgZnVuY3Rpb24gcnVucyBhIHNoZWxsIGNvbW1hbmQgYXMgYSBjaGlsZCBwcm9jZXNzLCBwcm92aWRpbmcgZmluZS1ncmFpbmVkXG4gKiBjb250cm9sIG92ZXIgaXRzIGV4ZWN1dGlvbiBhbmQgb3V0cHV0IGhhbmRsaW5nLiBJdCBzdXBwb3J0cyBjdXN0b20gb3V0cHV0IHdyaXRlcnMsXG4gKiBhbGxvd3MgZm9yIGNvbW1hbmQgYWJvcnRpb24sIGFuZCBjYXB0dXJlcyBib3RoIHN0ZG91dCBhbmQgc3RkZXJyLlxuICpcbiAqIEB0ZW1wbGF0ZSBSIC0gVGhlIHR5cGUgb2YgdGhlIHJlc29sdmVkIHZhbHVlIGZyb20gdGhlIGNvbW1hbmQgZXhlY3V0aW9uLlxuICpcbiAqIEBwYXJhbSBjb21tYW5kIC0gVGhlIGNvbW1hbmQgdG8gcnVuLCBlaXRoZXIgYXMgYSBzdHJpbmcgb3IgYW4gYXJyYXkgb2Ygc3RyaW5ncy5cbiAqIEBwYXJhbSBvcHRzIC0gU3Bhd24gb3B0aW9ucyBmb3IgdGhlIGNoaWxkIHByb2Nlc3MuIERlZmF1bHRzIHRvIGFuIGVtcHR5IG9iamVjdC5cbiAqIEBwYXJhbSBvdXRwdXRDb25zdHJ1Y3RvciAtIENvbnN0cnVjdG9yIGZvciB0aGUgb3V0cHV0IHdyaXRlci4gRGVmYXVsdHMgdG8gU3RhbmRhcmRPdXRwdXRXcml0ZXIuXG4gKiBAcGFyYW0gYXJncyAtIEFkZGl0aW9uYWwgYXJndW1lbnRzIHRvIHBhc3MgdG8gdGhlIG91dHB1dCBjb25zdHJ1Y3Rvci5cbiAqIEByZXR1cm4ge0NvbW1hbmRSZXN1bHR9IEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIHRoZSBjb21tYW5kIHJlc3VsdCBvZiB0eXBlIFIuXG4gKlxuICogQGZ1bmN0aW9uIHJ1bkNvbW1hbmRcbiAqXG4gKiBAbWVybWFpZFxuICogc2VxdWVuY2VEaWFncmFtXG4gKiAgIHBhcnRpY2lwYW50IENhbGxlclxuICogICBwYXJ0aWNpcGFudCBydW5Db21tYW5kXG4gKiAgIHBhcnRpY2lwYW50IE91dHB1dFdyaXRlclxuICogICBwYXJ0aWNpcGFudCBDaGlsZFByb2Nlc3NcbiAqICAgQ2FsbGVyLT4+cnVuQ29tbWFuZDogQ2FsbCB3aXRoIGNvbW1hbmQgYW5kIG9wdGlvbnNcbiAqICAgcnVuQ29tbWFuZC0+Pk91dHB1dFdyaXRlcjogQ3JlYXRlIG5ldyBpbnN0YW5jZVxuICogICBydW5Db21tYW5kLT4+T3V0cHV0V3JpdGVyOiBQYXJzZSBjb21tYW5kXG4gKiAgIHJ1bkNvbW1hbmQtPj5DaGlsZFByb2Nlc3M6IFNwYXduIHByb2Nlc3NcbiAqICAgQ2hpbGRQcm9jZXNzLS0+PnJ1bkNvbW1hbmQ6IFJldHVybiBwcm9jZXNzIG9iamVjdFxuICogICBydW5Db21tYW5kLT4+Q2hpbGRQcm9jZXNzOiBTZXQgdXAgZXZlbnQgbGlzdGVuZXJzXG4gKiAgIGxvb3AgRm9yIGVhY2ggc3Rkb3V0IGRhdGFcbiAqICAgICBDaGlsZFByb2Nlc3MtPj5ydW5Db21tYW5kOiBFbWl0IHN0ZG91dCBkYXRhXG4gKiAgICAgcnVuQ29tbWFuZC0+Pk91dHB1dFdyaXRlcjogSGFuZGxlIHN0ZG91dCBkYXRhXG4gKiAgIGVuZFxuICogICBsb29wIEZvciBlYWNoIHN0ZGVyciBkYXRhXG4gKiAgICAgQ2hpbGRQcm9jZXNzLT4+cnVuQ29tbWFuZDogRW1pdCBzdGRlcnIgZGF0YVxuICogICAgIHJ1bkNvbW1hbmQtPj5PdXRwdXRXcml0ZXI6IEhhbmRsZSBzdGRlcnIgZGF0YVxuICogICBlbmRcbiAqICAgQ2hpbGRQcm9jZXNzLT4+cnVuQ29tbWFuZDogRW1pdCBlcnJvciAoaWYgYW55KVxuICogICBydW5Db21tYW5kLT4+T3V0cHV0V3JpdGVyOiBIYW5kbGUgZXJyb3JcbiAqICAgQ2hpbGRQcm9jZXNzLT4+cnVuQ29tbWFuZDogRW1pdCBleGl0XG4gKiAgIHJ1bkNvbW1hbmQtPj5PdXRwdXRXcml0ZXI6IEhhbmRsZSBleGl0XG4gKiAgIE91dHB1dFdyaXRlci0tPj5ydW5Db21tYW5kOiBSZXNvbHZlIG9yIHJlamVjdCBwcm9taXNlXG4gKiAgIHJ1bkNvbW1hbmQtLT4+Q2FsbGVyOiBSZXR1cm4gQ29tbWFuZFJlc3VsdFxuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6dXRpbHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJ1bkNvbW1hbmQ8UiA9IHN0cmluZz4oXG4gIGNvbW1hbmQ6IHN0cmluZyxcbiAgb3B0czogU3Bhd25PcHRpb25zV2l0aG91dFN0ZGlvID0ge30sXG4gIG91dHB1dENvbnN0cnVjdG9yOiBPdXRwdXRXcml0ZXJDb25zdHJ1Y3RvcjxcbiAgICBSLFxuICAgIFN0YW5kYXJkT3V0cHV0V3JpdGVyPFI+LFxuICAgIEVycm9yXG4gID4gPSBTdGFuZGFyZE91dHB1dFdyaXRlcjxSPixcbiAgLi4uYXJnczogdW5rbm93bltdXG4pOiBDb21tYW5kUmVzdWx0PFI+IHtcbiAgY29uc3QgbG9nZ2VyID0gTG9nZ2luZy5mb3IocnVuQ29tbWFuZCk7XG4gIGNvbnN0IGFib3J0ID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuXG4gIGNvbnN0IHJlc3VsdDogT21pdDxDb21tYW5kUmVzdWx0LCBcInByb21pc2VcIiB8IFwicGlwZVwiPiA9IHtcbiAgICBhYm9ydDogYWJvcnQsXG4gICAgY29tbWFuZDogY29tbWFuZCxcbiAgICBsb2dzOiBbXSxcbiAgICBlcnJzOiBbXSxcbiAgfTtcblxuICBjb25zdCBsb2NrID0gbmV3IFByb21pc2U8Uj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGxldCBvdXRwdXQ7XG4gICAgdHJ5IHtcbiAgICAgIG91dHB1dCA9IG5ldyBvdXRwdXRDb25zdHJ1Y3RvcihcbiAgICAgICAgY29tbWFuZCxcbiAgICAgICAge1xuICAgICAgICAgIHJlc29sdmUsXG4gICAgICAgICAgcmVqZWN0LFxuICAgICAgICB9LFxuICAgICAgICAuLi5hcmdzXG4gICAgICApO1xuXG4gICAgICByZXN1bHQuY21kID0gc3Bhd25Db21tYW5kPFI+KG91dHB1dCwgY29tbWFuZCwgb3B0cywgYWJvcnQsIGxvZ2dlcik7XG4gICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgcmV0dXJuIHJlamVjdChuZXcgRXJyb3IoYEVycm9yIHJ1bm5pbmcgY29tbWFuZCAke2NvbW1hbmR9OiAke2V9YCkpO1xuICAgIH1cblxuICAgIHJlc3VsdC5jbWQuc3Rkb3V0LnNldEVuY29kaW5nKFwidXRmOFwiKTtcblxuICAgIHJlc3VsdC5jbWQuc3Rkb3V0Lm9uKFwiZGF0YVwiLCAoY2h1bms6IGFueSkgPT4ge1xuICAgICAgY2h1bmsgPSBjaHVuay50b1N0cmluZygpO1xuICAgICAgcmVzdWx0LmxvZ3MucHVzaChjaHVuayk7XG4gICAgICBvdXRwdXQuZGF0YShjaHVuayk7XG4gICAgfSk7XG5cbiAgICByZXN1bHQuY21kLnN0ZGVyci5vbihcImRhdGFcIiwgKGRhdGE6IGFueSkgPT4ge1xuICAgICAgZGF0YSA9IGRhdGEudG9TdHJpbmcoKTtcbiAgICAgIHJlc3VsdC5lcnJzLnB1c2goZGF0YSk7XG4gICAgICBvdXRwdXQuZXJyb3IoZGF0YSk7XG4gICAgfSk7XG5cbiAgICByZXN1bHQuY21kLm9uY2UoXCJlcnJvclwiLCAoZXJyOiBFcnJvcikgPT4ge1xuICAgICAgb3V0cHV0LmV4aXQoZXJyLm1lc3NhZ2UsIHJlc3VsdC5lcnJzKTtcbiAgICB9KTtcblxuICAgIHJlc3VsdC5jbWQub25jZShcImV4aXRcIiwgKGNvZGU6IG51bWJlciA9IDApID0+IHtcbiAgICAgIGlmIChhYm9ydC5zaWduYWwuYWJvcnRlZCAmJiBjb2RlID09PSBudWxsKSBjb2RlID0gQWJvcnRDb2RlIGFzIGFueTtcbiAgICAgIG91dHB1dC5leGl0KGNvZGUsIGNvZGUgPT09IDAgPyByZXN1bHQubG9ncyA6IHJlc3VsdC5lcnJzKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgT2JqZWN0LmFzc2lnbihyZXN1bHQsIHtcbiAgICBwcm9taXNlOiBsb2NrLFxuICAgIHBpcGU6IGFzeW5jIDxFPihjYjogKHI6IFIpID0+IEUpID0+IHtcbiAgICAgIGNvbnN0IGwgPSBsb2dnZXIuZm9yKFwicGlwZVwiKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGwudmVyYm9zZShgRXhlY3V0aW5nIHBpcGUgZnVuY3Rpb24gJHtjb21tYW5kfS4uLmApO1xuICAgICAgICBjb25zdCByZXN1bHQ6IFIgPSBhd2FpdCBsb2NrO1xuICAgICAgICBsLnZlcmJvc2UoYFBpcGluZyBvdXRwdXQgdG8gJHtjYi5uYW1lfTogJHtyZXN1bHR9YCk7XG4gICAgICAgIHJldHVybiBjYihyZXN1bHQpO1xuICAgICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgICBsLmVycm9yKGBFcnJvciBwaXBpbmcgY29tbWFuZCBvdXRwdXQ6ICR7ZX1gKTtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9LFxuICB9KTtcblxuICByZXR1cm4gcmVzdWx0IGFzIENvbW1hbmRSZXN1bHQ8Uj47XG59XG4iLCJpbXBvcnQgZnMgZnJvbSBcImZzXCI7XG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHsgcGF0Y2hTdHJpbmcgfSBmcm9tIFwiLi90ZXh0XCI7XG5pbXBvcnQgeyBydW5Db21tYW5kIH0gZnJvbSBcIi4vdXRpbHNcIjtcbmltcG9ydCB7IERlcGVuZGVuY3lNYXAsIFNpbXBsZURlcGVuZGVuY3lNYXAgfSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IHsgTG9nZ2luZyB9IGZyb20gXCJAZGVjYWYtdHMvbG9nZ2luZ1wiO1xuXG5jb25zdCBsb2dnZXIgPSBMb2dnaW5nLmZvcihcImZzXCIpO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBQYXRjaGVzIGEgZmlsZSB3aXRoIGdpdmVuIHZhbHVlcy5cbiAqIEBzdW1tYXJ5IFJlYWRzIGEgZmlsZSwgYXBwbGllcyBwYXRjaGVzIHVzaW5nIFRleHRVdGlscywgYW5kIHdyaXRlcyB0aGUgcmVzdWx0IGJhY2sgdG8gdGhlIGZpbGUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGggLSBUaGUgcGF0aCB0byB0aGUgZmlsZSB0byBiZSBwYXRjaGVkLlxuICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBudW1iZXIgfCBzdHJpbmc+fSB2YWx1ZXMgLSBUaGUgdmFsdWVzIHRvIHBhdGNoIGludG8gdGhlIGZpbGUuXG4gKiBAcmV0dXJuIHt2b2lkfVxuICpcbiAqIEBmdW5jdGlvbiBwYXRjaEZpbGVcbiAqXG4gKiBAbWVybWFpZFxuICogc2VxdWVuY2VEaWFncmFtXG4gKiAgIHBhcnRpY2lwYW50IENhbGxlclxuICogICBwYXJ0aWNpcGFudCBwYXRjaEZpbGVcbiAqICAgcGFydGljaXBhbnQgZnNcbiAqICAgcGFydGljaXBhbnQgcmVhZEZpbGVcbiAqICAgcGFydGljaXBhbnQgVGV4dFV0aWxzXG4gKiAgIHBhcnRpY2lwYW50IHdyaXRlRmlsZVxuICogICBDYWxsZXItPj5wYXRjaEZpbGU6IENhbGwgd2l0aCBwYXRoIGFuZCB2YWx1ZXNcbiAqICAgcGF0Y2hGaWxlLT4+ZnM6IENoZWNrIGlmIGZpbGUgZXhpc3RzXG4gKiAgIHBhdGNoRmlsZS0+PnJlYWRGaWxlOiBSZWFkIGZpbGUgY29udGVudFxuICogICByZWFkRmlsZS0+PmZzOiBSZWFkIGZpbGVcbiAqICAgZnMtLT4+cmVhZEZpbGU6IFJldHVybiBmaWxlIGNvbnRlbnRcbiAqICAgcmVhZEZpbGUtLT4+cGF0Y2hGaWxlOiBSZXR1cm4gZmlsZSBjb250ZW50XG4gKiAgIHBhdGNoRmlsZS0+PlRleHRVdGlsczogUGF0Y2ggc3RyaW5nXG4gKiAgIFRleHRVdGlscy0tPj5wYXRjaEZpbGU6IFJldHVybiBwYXRjaGVkIGNvbnRlbnRcbiAqICAgcGF0Y2hGaWxlLT4+d3JpdGVGaWxlOiBXcml0ZSBwYXRjaGVkIGNvbnRlbnRcbiAqICAgd3JpdGVGaWxlLT4+ZnM6IFdyaXRlIHRvIGZpbGVcbiAqICAgZnMtLT4+d3JpdGVGaWxlOiBGaWxlIHdyaXR0ZW5cbiAqICAgd3JpdGVGaWxlLS0+PnBhdGNoRmlsZTogRmlsZSB3cml0dGVuXG4gKiAgIHBhdGNoRmlsZS0tPj5DYWxsZXI6IFBhdGNoaW5nIGNvbXBsZXRlXG4gKlxuICogQG1lbWJlck9mIG1vZHVsZTp1dGlsc1xuICovXG5leHBvcnQgZnVuY3Rpb24gcGF0Y2hGaWxlKFxuICBwYXRoOiBzdHJpbmcsXG4gIHZhbHVlczogUmVjb3JkPHN0cmluZywgbnVtYmVyIHwgc3RyaW5nPlxuKSB7XG4gIGNvbnN0IGxvZyA9IGxvZ2dlci5mb3IocGF0Y2hGaWxlKTtcbiAgaWYgKCFmcy5leGlzdHNTeW5jKHBhdGgpKVxuICAgIHRocm93IG5ldyBFcnJvcihgRmlsZSBub3QgZm91bmQgYXQgcGF0aCBcIiR7cGF0aH1cIi5gKTtcbiAgbGV0IGNvbnRlbnQgPSByZWFkRmlsZShwYXRoKTtcblxuICB0cnkge1xuICAgIGxvZy52ZXJib3NlKGBQYXRjaGluZyBmaWxlIFwiJHtwYXRofVwiLi4uYCk7XG4gICAgbG9nLmRlYnVnKGB3aXRoIHZhbHVlOiAke0pTT04uc3RyaW5naWZ5KHZhbHVlcyl9YCk7XG4gICAgY29udGVudCA9IHBhdGNoU3RyaW5nKGNvbnRlbnQsIHZhbHVlcyk7XG4gIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciBwYXRjaGluZyBmaWxlOiAke2Vycm9yfWApO1xuICB9XG4gIHdyaXRlRmlsZShwYXRoLCBjb250ZW50KTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gUmVhZHMgYSBmaWxlIGFuZCByZXR1cm5zIGl0cyBjb250ZW50LlxuICogQHN1bW1hcnkgUmVhZHMgdGhlIGNvbnRlbnQgb2YgYSBmaWxlIGF0IHRoZSBzcGVjaWZpZWQgcGF0aCBhbmQgcmV0dXJucyBpdCBhcyBhIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aCAtIFRoZSBwYXRoIHRvIHRoZSBmaWxlIHRvIGJlIHJlYWQuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBjb250ZW50IG9mIHRoZSBmaWxlLlxuICpcbiAqIEBmdW5jdGlvbiByZWFkRmlsZVxuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6dXRpbHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlYWRGaWxlKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGxvZyA9IGxvZ2dlci5mb3IocmVhZEZpbGUpO1xuICB0cnkge1xuICAgIGxvZy52ZXJib3NlKGBSZWFkaW5nIGZpbGUgXCIke3BhdGh9XCIuLi5gKTtcbiAgICByZXR1cm4gZnMucmVhZEZpbGVTeW5jKHBhdGgsIFwidXRmOFwiKTtcbiAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICBsb2cudmVyYm9zZShgRXJyb3IgcmVhZGluZyBmaWxlIFwiJHtwYXRofVwiOiAke2Vycm9yfWApO1xuICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3IgcmVhZGluZyBmaWxlIFwiJHtwYXRofVwiOiAke2Vycm9yfWApO1xuICB9XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFdyaXRlcyBkYXRhIHRvIGEgZmlsZS5cbiAqIEBzdW1tYXJ5IFdyaXRlcyB0aGUgcHJvdmlkZWQgZGF0YSB0byBhIGZpbGUgYXQgdGhlIHNwZWNpZmllZCBwYXRoLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIC0gVGhlIHBhdGggdG8gdGhlIGZpbGUgdG8gYmUgd3JpdHRlbi5cbiAqIEBwYXJhbSB7c3RyaW5nIHwgQnVmZmVyfSBkYXRhIC0gVGhlIGRhdGEgdG8gYmUgd3JpdHRlbiB0byB0aGUgZmlsZS5cbiAqIEByZXR1cm4ge3ZvaWR9XG4gKlxuICogQGZ1bmN0aW9uIHdyaXRlRmlsZVxuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6dXRpbHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlRmlsZShwYXRoOiBzdHJpbmcsIGRhdGE6IHN0cmluZyB8IEJ1ZmZlcik6IHZvaWQge1xuICBjb25zdCBsb2cgPSBsb2dnZXIuZm9yKHdyaXRlRmlsZSk7XG4gIHRyeSB7XG4gICAgbG9nLnZlcmJvc2UoYFdyaXRpbmcgZmlsZSBcIiR7cGF0aH0gd2l0aCAke2RhdGEubGVuZ3RofSBieXRlcy4uLmApO1xuICAgIGZzLndyaXRlRmlsZVN5bmMocGF0aCwgZGF0YSwgXCJ1dGY4XCIpO1xuICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgIGxvZy52ZXJib3NlKGBFcnJvciB3cml0aW5nIGZpbGUgXCIke3BhdGh9XCI6ICR7ZXJyb3J9YCk7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciB3cml0aW5nIGZpbGUgXCIke3BhdGh9XCI6ICR7ZXJyb3J9YCk7XG4gIH1cbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gUmV0cmlldmVzIGFsbCBmaWxlcyByZWN1cnNpdmVseSBmcm9tIGEgZGlyZWN0b3J5LlxuICogQHN1bW1hcnkgVHJhdmVyc2VzIHRocm91Z2ggZGlyZWN0b3JpZXMgYW5kIHN1YmRpcmVjdG9yaWVzIHRvIGNvbGxlY3QgYWxsIGZpbGUgcGF0aHMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHAgLSBUaGUgcGF0aCB0byBzdGFydCBzZWFyY2hpbmcgZnJvbS5cbiAqIEBwYXJhbSB7ZnVuY3Rpb259IFtmaWx0ZXJdIC0gT3B0aW9uYWwgZnVuY3Rpb24gdG8gZmlsdGVyIGZpbGVzIGJ5IG5hbWUgb3IgaW5kZXguXG4gKiBAcmV0dXJuIHtzdHJpbmdbXX0gQXJyYXkgb2YgZmlsZSBwYXRocy5cbiAqXG4gKiBAZnVuY3Rpb24gZ2V0QWxsRmlsZXNcbiAqXG4gKiBAbWVtYmVyT2YgbW9kdWxlOnV0aWxzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBbGxGaWxlcyhcbiAgcDogc3RyaW5nLFxuICBmaWx0ZXI/OiAoZjogc3RyaW5nLCBpPzogbnVtYmVyKSA9PiBib29sZWFuXG4pOiBzdHJpbmdbXSB7XG4gIGNvbnN0IGxvZyA9IGxvZ2dlci5mb3IoZ2V0QWxsRmlsZXMpO1xuICBjb25zdCBmaWxlczogc3RyaW5nW10gPSBbXTtcblxuICB0cnkge1xuICAgIGxvZy52ZXJib3NlKGBSZXRyaWV2aW5nIGFsbCBmaWxlcyBmcm9tIFwiJHtwfVwiLi4uYCk7XG4gICAgY29uc3QgZW50cmllcyA9IGZzLnJlYWRkaXJTeW5jKHApO1xuXG4gICAgZW50cmllcy5mb3JFYWNoKChlbnRyeSkgPT4ge1xuICAgICAgY29uc3QgZnVsbFBhdGggPSBwYXRoLmpvaW4ocCwgZW50cnkpO1xuICAgICAgY29uc3Qgc3RhdCA9IGZzLnN0YXRTeW5jKGZ1bGxQYXRoKTtcblxuICAgICAgaWYgKHN0YXQuaXNGaWxlKCkpIHtcbiAgICAgICAgZmlsZXMucHVzaChmdWxsUGF0aCk7XG4gICAgICB9IGVsc2UgaWYgKHN0YXQuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgICBmaWxlcy5wdXNoKC4uLmdldEFsbEZpbGVzKGZ1bGxQYXRoKSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKCFmaWx0ZXIpIHJldHVybiBmaWxlcztcbiAgICByZXR1cm4gZmlsZXMuZmlsdGVyKGZpbHRlcik7XG4gIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgbG9nLnZlcmJvc2UoYEVycm9yIHJldHJpZXZpbmcgZmlsZXMgZnJvbSBcIiR7cH1cIjogJHtlcnJvcn1gKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIHJldHJpZXZpbmcgZmlsZXMgZnJvbSBcIiR7cH1cIjogJHtlcnJvcn1gKTtcbiAgfVxufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBSZW5hbWVzIGEgZmlsZSBvciBkaXJlY3RvcnkuXG4gKiBAc3VtbWFyeSBNb3ZlcyBhIGZpbGUgb3IgZGlyZWN0b3J5IGZyb20gdGhlIHNvdXJjZSBwYXRoIHRvIHRoZSBkZXN0aW5hdGlvbiBwYXRoLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBUaGUgc291cmNlIHBhdGggb2YgdGhlIGZpbGUgb3IgZGlyZWN0b3J5LlxuICogQHBhcmFtIHtzdHJpbmd9IGRlc3QgLSBUaGUgZGVzdGluYXRpb24gcGF0aCBmb3IgdGhlIGZpbGUgb3IgZGlyZWN0b3J5LlxuICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgcmVuYW1lIG9wZXJhdGlvbiBpcyBjb21wbGV0ZS5cbiAqXG4gKiBAZnVuY3Rpb24gcmVuYW1lRmlsZVxuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6dXRpbHNcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlbmFtZUZpbGUoc291cmNlOiBzdHJpbmcsIGRlc3Q6IHN0cmluZykge1xuICBjb25zdCBsb2cgPSBsb2dnZXIuZm9yKHJlbmFtZUZpbGUpO1xuICBsZXQgZGVzY3JpcHRvclNvdXJjZSwgZGVzY3JpcHRvckRlc3Q7XG5cbiAgdHJ5IHtcbiAgICBkZXNjcmlwdG9yU291cmNlID0gZnMuc3RhdFN5bmMoc291cmNlKTtcbiAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICBsb2cudmVyYm9zZShgU291cmNlIHBhdGggXCIke3NvdXJjZX1cIiBkb2VzIG5vdCBleGlzdDogJHtlcnJvcn1gKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFNvdXJjZSBwYXRoIFwiJHtzb3VyY2V9XCIgZG9lcyBub3QgZXhpc3Q6ICR7ZXJyb3J9YCk7XG4gIH1cblxuICB0cnkge1xuICAgIGRlc2NyaXB0b3JEZXN0ID0gZnMuc3RhdFN5bmMoZGVzdCk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgLy8gZG8gbm90aGluZy4gaXRzIG9rXG4gIH1cbiAgaWYgKGRlc2NyaXB0b3JEZXN0KSB7XG4gICAgbG9nLnZlcmJvc2UoYERlc3RpbmF0aW9uIHBhdGggXCIke2Rlc3R9XCIgYWxyZWFkeSBleGlzdHNgKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYERlc3RpbmF0aW9uIHBhdGggXCIke2Rlc3R9XCIgYWxyZWFkeSBleGlzdHNgKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgbG9nLnZlcmJvc2UoXG4gICAgICBgUmVuYW1pbmcgJHtkZXNjcmlwdG9yU291cmNlLmlzRmlsZSgpID8gXCJmaWxlXCIgOiBcImRpcmVjdG9yeVwifSBcIiR7c291cmNlfVwiIHRvIFwiJHtkZXN0fS4uLmBcbiAgICApO1xuICAgIGZzLnJlbmFtZVN5bmMoc291cmNlLCBkZXN0KTtcbiAgICBsb2cudmVyYm9zZShgU3VjY2Vzc2Z1bGx5IHJlbmFtZWQgdG8gXCIke2Rlc3R9XCJgKTtcbiAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICBsb2cudmVyYm9zZShcbiAgICAgIGBFcnJvciByZW5hbWluZyAke2Rlc2NyaXB0b3JTb3VyY2UuaXNGaWxlKCkgPyBcImZpbGVcIiA6IFwiZGlyZWN0b3J5XCJ9IFwiJHtzb3VyY2V9XCIgdG8gXCIke2Rlc3R9XCI6ICR7ZXJyb3J9YFxuICAgICk7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEVycm9yIHJlbmFtaW5nICR7ZGVzY3JpcHRvclNvdXJjZS5pc0ZpbGUoKSA/IFwiZmlsZVwiIDogXCJkaXJlY3RvcnlcIn0gXCIke3NvdXJjZX1cIiB0byBcIiR7ZGVzdH1cIjogJHtlcnJvcn1gXG4gICAgKTtcbiAgfVxufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBDb3BpZXMgYSBmaWxlIG9yIGRpcmVjdG9yeS5cbiAqIEBzdW1tYXJ5IENyZWF0ZXMgYSBjb3B5IG9mIGEgZmlsZSBvciBkaXJlY3RvcnkgZnJvbSB0aGUgc291cmNlIHBhdGggdG8gdGhlIGRlc3RpbmF0aW9uIHBhdGguXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIFRoZSBzb3VyY2UgcGF0aCBvZiB0aGUgZmlsZSBvciBkaXJlY3RvcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30gZGVzdCAtIFRoZSBkZXN0aW5hdGlvbiBwYXRoIGZvciB0aGUgZmlsZSBvciBkaXJlY3RvcnkuXG4gKiBAcmV0dXJuIHt2b2lkfVxuICpcbiAqIEBmdW5jdGlvbiBjb3B5RmlsZVxuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6dXRpbHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvcHlGaWxlKHNvdXJjZTogc3RyaW5nLCBkZXN0OiBzdHJpbmcpIHtcbiAgY29uc3QgbG9nID0gbG9nZ2VyLmZvcihjb3B5RmlsZSk7XG4gIGxldCBkZXNjcmlwdG9yU291cmNlLCBkZXNjcmlwdG9yRGVzdDtcbiAgdHJ5IHtcbiAgICBkZXNjcmlwdG9yU291cmNlID0gZnMuc3RhdFN5bmMoc291cmNlKTtcbiAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICBsb2cudmVyYm9zZShgU291cmNlIHBhdGggXCIke3NvdXJjZX1cIiBkb2VzIG5vdCBleGlzdDogJHtlcnJvcn1gKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFNvdXJjZSBwYXRoIFwiJHtzb3VyY2V9XCIgZG9lcyBub3QgZXhpc3Q6ICR7ZXJyb3J9YCk7XG4gIH1cbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgZGVzY3JpcHRvckRlc3QgPSBmcy5zdGF0U3luYyhkZXN0KTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgaWYgKGRlc2NyaXB0b3JTb3VyY2UuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgbG9nLnZlcmJvc2UoYERlc3QgcGF0aCBcIiR7ZGVzdH1cIiBkb2VzIG5vdCBleGlzdC4gY3JlYXRpbmdgKTtcbiAgICAgIGZzLm1rZGlyU3luYyhkZXN0LCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICB9XG4gIH1cblxuICB0cnkge1xuICAgIGxvZy52ZXJib3NlKFxuICAgICAgYENvcHlpbmcgJHtkZXNjcmlwdG9yU291cmNlLmlzRmlsZSgpID8gXCJmaWxlXCIgOiBcImRpcmVjdG9yeVwifSBcIiR7c291cmNlfVwiIHRvIFwiJHtkZXN0fS4uLmBcbiAgICApO1xuICAgIGZzLmNwU3luYyhzb3VyY2UsIGRlc3QsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgIGxvZy52ZXJib3NlKFxuICAgICAgYEVycm9yIGNvcHlpbmcgJHtkZXNjcmlwdG9yU291cmNlLmlzRmlsZSgpID8gXCJmaWxlXCIgOiBcImRpcmVjdG9yeVwifSBcIiR7c291cmNlfVwiIHRvIFwiJHtkZXN0fTogJHtlcnJvcn1gXG4gICAgKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgRXJyb3IgY29weWluZyAke2Rlc2NyaXB0b3JTb3VyY2UuaXNGaWxlKCkgPyBcImZpbGVcIiA6IFwiZGlyZWN0b3J5XCJ9IFwiJHtzb3VyY2V9XCIgdG8gXCIke2Rlc3R9OiAke2Vycm9yfWBcbiAgICApO1xuICB9XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIERlbGV0ZXMgYSBmaWxlIG9yIGRpcmVjdG9yeS5cbiAqIEBzdW1tYXJ5IFJlbW92ZXMgYSBmaWxlIG9yIGRpcmVjdG9yeSBhdCB0aGUgc3BlY2lmaWVkIHBhdGgsIHdpdGggcmVjdXJzaXZlIGFuZCBmb3JjZSBvcHRpb25zIGVuYWJsZWQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHAgLSBUaGUgcGF0aCB0byB0aGUgZmlsZSBvciBkaXJlY3RvcnkgdG8gZGVsZXRlLlxuICogQHJldHVybiB7dm9pZH1cbiAqXG4gKiBAZnVuY3Rpb24gZGVsZXRlUGF0aFxuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6dXRpbHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlbGV0ZVBhdGgocDogc3RyaW5nKSB7XG4gIGNvbnN0IGxvZyA9IGxvZ2dlci5mb3IoZGVsZXRlUGF0aCk7XG4gIHRyeSB7XG4gICAgY29uc3QgZGVzY3JpcHRvciA9IGZzLnN0YXRTeW5jKHApO1xuICAgIGlmIChkZXNjcmlwdG9yLmlzRmlsZSgpKSB7XG4gICAgICBsb2cudmVyYm9zZShgRGVsZXRpbmcgZmlsZSBcIiR7cH0uLi5gKTtcbiAgICAgIGZzLnJtU3luYyhwLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSk7XG4gICAgfSBlbHNlIGlmIChkZXNjcmlwdG9yLmlzRGlyZWN0b3J5KCkpXG4gICAgICBmcy5ybVN5bmMocCwgeyByZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlIH0pO1xuICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgIGxvZy52ZXJib3NlKGBFcnJvciBEZWxldGluZyBcIiR7cH1cIjogJHtlcnJvcn1gKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIERlbGV0aW5nIFwiJHtwfVwiOiAke2Vycm9yfWApO1xuICB9XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFJldHJpZXZlcyBwYWNrYWdlIGluZm9ybWF0aW9uIGZyb20gcGFja2FnZS5qc29uLlxuICogQHN1bW1hcnkgTG9hZHMgYW5kIHBhcnNlcyB0aGUgcGFja2FnZS5qc29uIGZpbGUgZnJvbSBhIHNwZWNpZmllZCBkaXJlY3Rvcnkgb3IgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuIENhbiByZXR1cm4gdGhlIGVudGlyZSBwYWNrYWdlIG9iamVjdCBvciBhIHNwZWNpZmljIHByb3BlcnR5LlxuICogQHBhcmFtIHtzdHJpbmd9IFtwPXByb2Nlc3MuY3dkKCldIC0gVGhlIGRpcmVjdG9yeSBwYXRoIHdoZXJlIHRoZSBwYWNrYWdlLmpzb24gZmlsZSBpcyBsb2NhdGVkLlxuICogQHBhcmFtIHtzdHJpbmd9IFtwcm9wZXJ0eV0gLSBPcHRpb25hbC4gVGhlIHNwZWNpZmljIHByb3BlcnR5IHRvIHJldHJpZXZlIGZyb20gcGFja2FnZS5qc29uLlxuICogQHJldHVybiB7b2JqZWN0IHwgc3RyaW5nfSBUaGUgcGFyc2VkIGNvbnRlbnRzIG9mIHBhY2thZ2UuanNvbiBvciB0aGUgdmFsdWUgb2YgdGhlIHNwZWNpZmllZCBwcm9wZXJ0eS5cbiAqIEBmdW5jdGlvbiBnZXRQYWNrYWdlXG4gKiBAbWVybWFpZFxuICogc2VxdWVuY2VEaWFncmFtXG4gKiAgIHBhcnRpY2lwYW50IENhbGxlclxuICogICBwYXJ0aWNpcGFudCBnZXRQYWNrYWdlXG4gKiAgIHBhcnRpY2lwYW50IHJlYWRGaWxlXG4gKiAgIHBhcnRpY2lwYW50IEpTT05cbiAqICAgQ2FsbGVyLT4+Z2V0UGFja2FnZTogQ2FsbCB3aXRoIHBhdGggYW5kIG9wdGlvbmFsIHByb3BlcnR5XG4gKiAgIGdldFBhY2thZ2UtPj5yZWFkRmlsZTogUmVhZCBwYWNrYWdlLmpzb25cbiAqICAgcmVhZEZpbGUtLT4+Z2V0UGFja2FnZTogUmV0dXJuIGZpbGUgY29udGVudFxuICogICBnZXRQYWNrYWdlLT4+SlNPTjogUGFyc2UgZmlsZSBjb250ZW50XG4gKiAgIEpTT04tLT4+Z2V0UGFja2FnZTogUmV0dXJuIHBhcnNlZCBvYmplY3RcbiAqICAgYWx0IHByb3BlcnR5IHNwZWNpZmllZFxuICogICAgIGdldFBhY2thZ2UtPj5nZXRQYWNrYWdlOiBDaGVjayBpZiBwcm9wZXJ0eSBleGlzdHNcbiAqICAgICBhbHQgcHJvcGVydHkgZXhpc3RzXG4gKiAgICAgICBnZXRQYWNrYWdlLS0+PkNhbGxlcjogUmV0dXJuIHByb3BlcnR5IHZhbHVlXG4gKiAgICAgZWxzZSBwcm9wZXJ0eSBkb2Vzbid0IGV4aXN0XG4gKiAgICAgICBnZXRQYWNrYWdlLS0+PkNhbGxlcjogVGhyb3cgRXJyb3JcbiAqICAgICBlbmRcbiAqICAgZWxzZSBubyBwcm9wZXJ0eSBzcGVjaWZpZWRcbiAqICAgICBnZXRQYWNrYWdlLS0+PkNhbGxlcjogUmV0dXJuIGVudGlyZSBwYWNrYWdlIG9iamVjdFxuICogICBlbmRcbiAqIEBtZW1iZXJPZiBtb2R1bGU6dXRpbHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFBhY2thZ2UoXG4gIHA6IHN0cmluZyA9IHByb2Nlc3MuY3dkKCksXG4gIHByb3BlcnR5Pzogc3RyaW5nXG4pOiBvYmplY3QgfCBzdHJpbmcge1xuICBsZXQgcGtnOiBhbnk7XG4gIHRyeSB7XG4gICAgcGtnID0gSlNPTi5wYXJzZShyZWFkRmlsZShwYXRoLmpvaW4ocCwgYHBhY2thZ2UuanNvbmApKSk7XG4gIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gcmV0cmlldmUgcGFja2FnZSBpbmZvcm1hdGlvblwiICR7ZXJyb3J9YCk7XG4gIH1cblxuICBpZiAocHJvcGVydHkpIHtcbiAgICBpZiAoIShwcm9wZXJ0eSBpbiBwa2cpKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBQcm9wZXJ0eSBcIiR7cHJvcGVydHl9XCIgbm90IGZvdW5kIGluIHBhY2thZ2UuanNvbmApO1xuICAgIHJldHVybiBwa2dbcHJvcGVydHldIGFzIHN0cmluZztcbiAgfVxuICByZXR1cm4gcGtnO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBTZXRzIGFuIGF0dHJpYnV0ZSBpbiB0aGUgcGFja2FnZS5qc29uIGZpbGUuXG4gKiBAc3VtbWFyeSBVcGRhdGVzIGEgc3BlY2lmaWMgYXR0cmlidXRlIGluIHRoZSBwYWNrYWdlLmpzb24gZmlsZSB3aXRoIHRoZSBwcm92aWRlZCB2YWx1ZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYXR0ciAtIFRoZSBhdHRyaWJ1dGUgbmFtZSB0byBzZXQgaW4gcGFja2FnZS5qc29uLlxuICogQHBhcmFtIHtzdHJpbmcgfCBudW1iZXIgfCBvYmplY3R9IHZhbHVlIC0gVGhlIHZhbHVlIHRvIHNldCBmb3IgdGhlIGF0dHJpYnV0ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbcD1wcm9jZXNzLmN3ZCgpXSAtIFRoZSBkaXJlY3RvcnkgcGF0aCB3aGVyZSB0aGUgcGFja2FnZS5qc29uIGZpbGUgaXMgbG9jYXRlZC5cbiAqIEByZXR1cm4ge3ZvaWR9XG4gKlxuICogQGZ1bmN0aW9uIHNldFBhY2thZ2VBdHRyaWJ1dGVcbiAqXG4gKiBAbWVtYmVyT2YgbW9kdWxlOnV0aWxzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRQYWNrYWdlQXR0cmlidXRlKFxuICBhdHRyOiBzdHJpbmcsXG4gIHZhbHVlOiBzdHJpbmcsXG4gIHA6IHN0cmluZyA9IHByb2Nlc3MuY3dkKClcbik6IHZvaWQge1xuICBjb25zdCBwa2cgPSBnZXRQYWNrYWdlKHApIGFzIFJlY29yZDxzdHJpbmcsIGFueT47XG4gIHBrZ1thdHRyXSA9IHZhbHVlO1xuICB3cml0ZUZpbGUocGF0aC5qb2luKHAsIGBwYWNrYWdlLmpzb25gKSwgSlNPTi5zdHJpbmdpZnkocGtnLCBudWxsLCAyKSk7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFJldHJpZXZlcyB0aGUgdmVyc2lvbiBmcm9tIHBhY2thZ2UuanNvbi5cbiAqIEBzdW1tYXJ5IEEgY29udmVuaWVuY2UgZnVuY3Rpb24gdGhhdCBjYWxscyBnZXRQYWNrYWdlIHRvIHJldHJpZXZlIHRoZSBcInZlcnNpb25cIiBwcm9wZXJ0eSBmcm9tIHBhY2thZ2UuanNvbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbcD1wcm9jZXNzLmN3ZCgpXSAtIFRoZSBkaXJlY3RvcnkgcGF0aCB3aGVyZSB0aGUgcGFja2FnZS5qc29uIGZpbGUgaXMgbG9jYXRlZC5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIHZlcnNpb24gc3RyaW5nIGZyb20gcGFja2FnZS5qc29uLlxuICogQGZ1bmN0aW9uIGdldFBhY2thZ2VWZXJzaW9uXG4gKiBAbWVtYmVyT2YgbW9kdWxlOnV0aWxzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYWNrYWdlVmVyc2lvbihwID0gcHJvY2Vzcy5jd2QoKSk6IHN0cmluZyB7XG4gIHJldHVybiBnZXRQYWNrYWdlKHAsIFwidmVyc2lvblwiKSBhcyBzdHJpbmc7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFJldHJpZXZlcyBhbGwgZGVwZW5kZW5jaWVzIGZyb20gdGhlIHByb2plY3QuXG4gKiBAc3VtbWFyeSBFeGVjdXRlcyAnbnBtIGxzIC0tanNvbicgY29tbWFuZCB0byBnZXQgYSBkZXRhaWxlZCBsaXN0IG9mIGFsbCBkZXBlbmRlbmNpZXMgKHByb2R1Y3Rpb24sIGRldmVsb3BtZW50LCBhbmQgcGVlcikgYW5kIHRoZWlyIHZlcnNpb25zLlxuICogQHBhcmFtIHtzdHJpbmd9IFtwYXRoPXByb2Nlc3MuY3dkKCldIC0gVGhlIGRpcmVjdG9yeSBwYXRoIG9mIHRoZSBwcm9qZWN0LlxuICogQHJldHVybiB7UHJvbWlzZTx7cHJvZDogQXJyYXk8e25hbWU6IHN0cmluZywgdmVyc2lvbjogc3RyaW5nfT4sIGRldjogQXJyYXk8e25hbWU6IHN0cmluZywgdmVyc2lvbjogc3RyaW5nfT4sIHBlZXI6IEFycmF5PHtuYW1lOiBzdHJpbmcsIHZlcnNpb246IHN0cmluZ30+fT59IEFuIG9iamVjdCBjb250YWluaW5nIGFycmF5cyBvZiBwcm9kdWN0aW9uLCBkZXZlbG9wbWVudCwgYW5kIHBlZXIgZGVwZW5kZW5jaWVzLlxuICogQGZ1bmN0aW9uIGdldERlcGVuZGVuY2llc1xuICogQG1lcm1haWRcbiAqIHNlcXVlbmNlRGlhZ3JhbVxuICogICBwYXJ0aWNpcGFudCBDYWxsZXJcbiAqICAgcGFydGljaXBhbnQgZ2V0RGVwZW5kZW5jaWVzXG4gKiAgIHBhcnRpY2lwYW50IHJ1bkNvbW1hbmRcbiAqICAgcGFydGljaXBhbnQgSlNPTlxuICogICBDYWxsZXItPj5nZXREZXBlbmRlbmNpZXM6IENhbGwgd2l0aCBvcHRpb25hbCBwYXRoXG4gKiAgIGdldERlcGVuZGVuY2llcy0+PnJ1bkNvbW1hbmQ6IEV4ZWN1dGUgJ25wbSBscyAtLWpzb24nXG4gKiAgIHJ1bkNvbW1hbmQtLT4+Z2V0RGVwZW5kZW5jaWVzOiBSZXR1cm4gY29tbWFuZCBvdXRwdXRcbiAqICAgZ2V0RGVwZW5kZW5jaWVzLT4+SlNPTjogUGFyc2UgY29tbWFuZCBvdXRwdXRcbiAqICAgSlNPTi0tPj5nZXREZXBlbmRlbmNpZXM6IFJldHVybiBwYXJzZWQgb2JqZWN0XG4gKiAgIGdldERlcGVuZGVuY2llcy0+PmdldERlcGVuZGVuY2llczogUHJvY2VzcyBkZXBlbmRlbmNpZXNcbiAqICAgZ2V0RGVwZW5kZW5jaWVzLS0+PkNhbGxlcjogUmV0dXJuIHByb2Nlc3NlZCBkZXBlbmRlbmNpZXNcbiAqIEBtZW1iZXJPZiBtb2R1bGU6dXRpbHNcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldERlcGVuZGVuY2llcyhcbiAgcGF0aDogc3RyaW5nID0gcHJvY2Vzcy5jd2QoKVxuKTogUHJvbWlzZTxEZXBlbmRlbmN5TWFwPiB7XG4gIGxldCBwa2c6IGFueTtcblxuICB0cnkge1xuICAgIHBrZyA9IEpTT04ucGFyc2UoYXdhaXQgcnVuQ29tbWFuZChgbnBtIGxzIC0tanNvbmAsIHsgY3dkOiBwYXRoIH0pLnByb21pc2UpO1xuICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gcmV0cmlldmUgZGVwZW5kZW5jaWVzOiAke2V9YCk7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIGNvbnN0IG1hcHBlciA9IChlbnRyeTogW3N0cmluZywgdW5rbm93bl0sIGluZGV4OiBudW1iZXIpID0+ICh7XG4gICAgbmFtZTogZW50cnlbMF0sXG4gICAgdmVyc2lvbjogKGVudHJ5WzFdIGFzIGFueSkudmVyc2lvbixcbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICBwcm9kOiBPYmplY3QuZW50cmllcyhwa2cuZGVwZW5kZW5jaWVzIHx8IHt9KS5tYXAobWFwcGVyKSxcbiAgICBkZXY6IE9iamVjdC5lbnRyaWVzKHBrZy5kZXZEZXBlbmRlbmNpZXMgfHwge30pLm1hcChtYXBwZXIpLFxuICAgIHBlZXI6IE9iamVjdC5lbnRyaWVzKHBrZy5wZWVyRGVwZW5kZW5jaWVzIHx8IHt9KS5tYXAobWFwcGVyKSxcbiAgfTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gVXBkYXRlcyBwcm9qZWN0IGRlcGVuZGVuY2llcyB0byB0aGVpciBsYXRlc3QgdmVyc2lvbnMuXG4gKiBAc3VtbWFyeSBSdW5zIG5wbS1jaGVjay11cGRhdGVzIHRvIHVwZGF0ZSBwYWNrYWdlLmpzb24gYW5kIHRoZW4gaW5zdGFsbHMgdGhlIHVwZGF0ZWQgZGVwZW5kZW5jaWVzLlxuICpcbiAqIEByZXR1cm4ge1Byb21pc2U8dm9pZD59IEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gZGVwZW5kZW5jaWVzIGFyZSB1cGRhdGVkLlxuICpcbiAqIEBmdW5jdGlvbiB1cGRhdGVEZXBlbmRlbmNpZXNcbiAqXG4gKiBAbWVtYmVyT2YgbW9kdWxlOnV0aWxzXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB1cGRhdGVEZXBlbmRlbmNpZXMoKSB7XG4gIGNvbnN0IGxvZyA9IGxvZ2dlci5mb3IodXBkYXRlRGVwZW5kZW5jaWVzKTtcbiAgbG9nLmluZm8oXCJjaGVja2luZyBmb3IgdXBkYXRlcy4uLlwiKTtcbiAgYXdhaXQgcnVuQ29tbWFuZChcIm5weCBucG0tY2hlY2stdXBkYXRlcyAtdVwiKS5wcm9taXNlO1xuICBsb2cuaW5mbyhcInVwZGF0aW5nLi4uXCIpO1xuICBhd2FpdCBydW5Db21tYW5kKFwibnB4IG5wbSBydW4gZG8taW5zdGFsbFwiKS5wcm9taXNlO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBJbnN0YWxscyBkZXBlbmRlbmNpZXMgaWYgdGhleSBhcmUgbm90IGFscmVhZHkgYXZhaWxhYmxlLlxuICogQHN1bW1hcnkgQ2hlY2tzIGlmIHNwZWNpZmllZCBkZXBlbmRlbmNpZXMgYXJlIGluc3RhbGxlZCBhbmQgaW5zdGFsbHMgYW55IHRoYXQgYXJlIG1pc3NpbmcuXG4gKlxuICogQHBhcmFtIHtzdHJpbmdbXSB8IHN0cmluZ30gZGVwcyAtIFRoZSBkZXBlbmRlbmNpZXMgdG8gY2hlY2sgYW5kIHBvdGVudGlhbGx5IGluc3RhbGwuXG4gKiBAcGFyYW0ge1NpbXBsZURlcGVuZGVuY3lNYXB9IFtkZXBlbmRlbmNpZXNdIC0gT3B0aW9uYWwgbWFwIG9mIGV4aXN0aW5nIGRlcGVuZGVuY2llcy5cbiAqIEByZXR1cm4ge1Byb21pc2U8U2ltcGxlRGVwZW5kZW5jeU1hcD59IFVwZGF0ZWQgbWFwIG9mIGRlcGVuZGVuY2llcy5cbiAqXG4gKiBAZnVuY3Rpb24gaW5zdGFsbElmTm90QXZhaWxhYmxlXG4gKlxuICogQG1lbWJlck9mIG1vZHVsZTp1dGlsc1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW5zdGFsbElmTm90QXZhaWxhYmxlKFxuICBkZXBzOiBzdHJpbmdbXSB8IHN0cmluZyxcbiAgZGVwZW5kZW5jaWVzPzogU2ltcGxlRGVwZW5kZW5jeU1hcFxuKSB7XG4gIGlmICghZGVwZW5kZW5jaWVzKSB7XG4gICAgY29uc3QgZDogRGVwZW5kZW5jeU1hcCA9IGF3YWl0IGdldERlcGVuZGVuY2llcygpO1xuICAgIGRlcGVuZGVuY2llcyA9IHtcbiAgICAgIHByb2Q6IGQucHJvZD8ubWFwKChwKSA9PiBwLm5hbWUpIHx8IFtdLFxuICAgICAgZGV2OiBkLmRldj8ubWFwKChkKSA9PiBkLm5hbWUpIHx8IFtdLFxuICAgICAgcGVlcjogZC5wZWVyPy5tYXAoKHApID0+IHAubmFtZSkgfHwgW10sXG4gICAgfTtcbiAgfVxuICBjb25zdCB7IHByb2QsIGRldiwgcGVlciB9ID0gZGVwZW5kZW5jaWVzO1xuICBjb25zdCBpbnN0YWxsZWQgPSBBcnJheS5mcm9tKFxuICAgIG5ldyBTZXQoWy4uLihwcm9kIHx8IFtdKSwgLi4uKGRldiB8fCBbXSksIC4uLihwZWVyIHx8IFtdKV0pXG4gICk7XG4gIGRlcHMgPSB0eXBlb2YgZGVwcyA9PT0gXCJzdHJpbmdcIiA/IFtkZXBzXSA6IGRlcHM7XG4gIGNvbnN0IHRvSW5zdGFsbCA9IGRlcHMuZmlsdGVyKChkKSA9PiAhaW5zdGFsbGVkLmluY2x1ZGVzKGQpKTtcblxuICBpZiAodG9JbnN0YWxsLmxlbmd0aCkgYXdhaXQgaW5zdGFsbERlcGVuZGVuY2llcyh7IGRldjogdG9JbnN0YWxsIH0pO1xuICBkZXBlbmRlbmNpZXMuZGV2ID0gZGVwZW5kZW5jaWVzLmRldiB8fCBbXTtcbiAgZGVwZW5kZW5jaWVzLmRldi5wdXNoKC4uLnRvSW5zdGFsbCk7XG4gIHJldHVybiBkZXBlbmRlbmNpZXM7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFB1c2hlcyBjaGFuZ2VzIHRvIEdpdCByZXBvc2l0b3J5LlxuICogQHN1bW1hcnkgVGVtcG9yYXJpbHkgY2hhbmdlcyBHaXQgdXNlciBjb25maWd1cmF0aW9uLCBjb21taXRzIGFsbCBjaGFuZ2VzLCBwdXNoZXMgdG8gcmVtb3RlLCBhbmQgcmVzdG9yZXMgb3JpZ2luYWwgdXNlciBjb25maWd1cmF0aW9uLlxuICpcbiAqIEByZXR1cm4ge1Byb21pc2U8dm9pZD59IEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gY2hhbmdlcyBhcmUgcHVzaGVkLlxuICpcbiAqIEBmdW5jdGlvbiBwdXNoVG9HaXRcbiAqXG4gKiBAbWVtYmVyT2YgbW9kdWxlOnV0aWxzXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwdXNoVG9HaXQoKSB7XG4gIGNvbnN0IGxvZyA9IGxvZ2dlci5mb3IocHVzaFRvR2l0KTtcbiAgY29uc3QgZ2l0VXNlciA9IGF3YWl0IHJ1bkNvbW1hbmQoXCJnaXQgY29uZmlnIHVzZXIubmFtZVwiKS5wcm9taXNlO1xuICBjb25zdCBnaXRFbWFpbCA9IGF3YWl0IHJ1bkNvbW1hbmQoXCJnaXQgY29uZmlnIHVzZXIuZW1haWxcIikucHJvbWlzZTtcbiAgbG9nLnZlcmJvc2UoYGNhY2hlZCBnaXQgaWQ6ICR7Z2l0VXNlcn0vJHtnaXRFbWFpbH0uIGNoYW5naW5nIHRvIGF1dG9tYXRpb25gKTtcbiAgYXdhaXQgcnVuQ29tbWFuZCgnZ2l0IGNvbmZpZyB1c2VyLmVtYWlsIFwiYXV0b21hdGlvbkBkZWNhZi50c1wiJykucHJvbWlzZTtcbiAgYXdhaXQgcnVuQ29tbWFuZCgnZ2l0IGNvbmZpZyB1c2VyLm5hbWUgXCJkZWNhZlwiJykucHJvbWlzZTtcbiAgbG9nLmluZm8oXCJQdXNoaW5nIGNoYW5nZXMgdG8gZ2l0Li4uXCIpO1xuICBhd2FpdCBydW5Db21tYW5kKFwiZ2l0IGFkZCAuXCIpLnByb21pc2U7XG4gIGF3YWl0IHJ1bkNvbW1hbmQoYGdpdCBjb21taXQgLW0gXCJyZWZzICMxIC0gYWZ0ZXIgcmVwbyBzZXR1cFwiYCkucHJvbWlzZTtcbiAgYXdhaXQgcnVuQ29tbWFuZChcImdpdCBwdXNoXCIpLnByb21pc2U7XG4gIGF3YWl0IHJ1bkNvbW1hbmQoYGdpdCBjb25maWcgdXNlci5lbWFpbCBcIiR7Z2l0RW1haWx9XCJgKS5wcm9taXNlO1xuICBhd2FpdCBydW5Db21tYW5kKGBnaXQgY29uZmlnIHVzZXIubmFtZSBcIiR7Z2l0VXNlcn1cImApLnByb21pc2U7XG4gIGxvZy52ZXJib3NlKGByZXZlcnRlZCB0byBnaXQgaWQ6ICR7Z2l0VXNlcn0vJHtnaXRFbWFpbH1gKTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gSW5zdGFsbHMgcHJvamVjdCBkZXBlbmRlbmNpZXMuXG4gKiBAc3VtbWFyeSBJbnN0YWxscyBwcm9kdWN0aW9uLCBkZXZlbG9wbWVudCwgYW5kIHBlZXIgZGVwZW5kZW5jaWVzIGFzIHNwZWNpZmllZC5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gZGVwZW5kZW5jaWVzIC0gT2JqZWN0IGNvbnRhaW5pbmcgYXJyYXlzIG9mIGRlcGVuZGVuY2llcyB0byBpbnN0YWxsLlxuICogQHBhcmFtIHtzdHJpbmdbXX0gW2RlcGVuZGVuY2llcy5wcm9kXSAtIFByb2R1Y3Rpb24gZGVwZW5kZW5jaWVzIHRvIGluc3RhbGwuXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBbZGVwZW5kZW5jaWVzLmRldl0gLSBEZXZlbG9wbWVudCBkZXBlbmRlbmNpZXMgdG8gaW5zdGFsbC5cbiAqIEBwYXJhbSB7c3RyaW5nW119IFtkZXBlbmRlbmNpZXMucGVlcl0gLSBQZWVyIGRlcGVuZGVuY2llcyB0byBpbnN0YWxsLlxuICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiBhbGwgZGVwZW5kZW5jaWVzIGFyZSBpbnN0YWxsZWQuXG4gKlxuICogQGZ1bmN0aW9uIGluc3RhbGxEZXBlbmRlbmNpZXNcbiAqXG4gKiBAbWVtYmVyT2YgbW9kdWxlOnV0aWxzXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpbnN0YWxsRGVwZW5kZW5jaWVzKGRlcGVuZGVuY2llczoge1xuICBwcm9kPzogc3RyaW5nW107XG4gIGRldj86IHN0cmluZ1tdO1xuICBwZWVyPzogc3RyaW5nW107XG59KSB7XG4gIGNvbnN0IGxvZyA9IGxvZ2dlci5mb3IoaW5zdGFsbERlcGVuZGVuY2llcyk7XG4gIGNvbnN0IHByb2QgPSBkZXBlbmRlbmNpZXMucHJvZCB8fCBbXTtcbiAgY29uc3QgZGV2ID0gZGVwZW5kZW5jaWVzLmRldiB8fCBbXTtcbiAgY29uc3QgcGVlciA9IGRlcGVuZGVuY2llcy5wZWVyIHx8IFtdO1xuICBpZiAocHJvZC5sZW5ndGgpIHtcbiAgICBsb2cuaW5mbyhgSW5zdGFsbGluZyBkZXBlbmRlbmNpZXMgJHtwcm9kLmpvaW4oXCIsIFwiKX0uLi5gKTtcbiAgICBhd2FpdCBydW5Db21tYW5kKGBucG0gaW5zdGFsbCAke3Byb2Quam9pbihcIiBcIil9YCwgeyBjd2Q6IHByb2Nlc3MuY3dkKCkgfSlcbiAgICAgIC5wcm9taXNlO1xuICB9XG4gIGlmIChkZXYubGVuZ3RoKSB7XG4gICAgbG9nLmluZm8oYEluc3RhbGxpbmcgZGV2RGVwZW5kZW5jaWVzICR7ZGV2LmpvaW4oXCIsIFwiKX0uLi5gKTtcbiAgICBhd2FpdCBydW5Db21tYW5kKGBucG0gaW5zdGFsbCAtLXNhdmUtZGV2ICR7ZGV2LmpvaW4oXCIgXCIpfWAsIHtcbiAgICAgIGN3ZDogcHJvY2Vzcy5jd2QoKSxcbiAgICB9KS5wcm9taXNlO1xuICB9XG4gIGlmIChwZWVyLmxlbmd0aCkge1xuICAgIGxvZy5pbmZvKGBJbnN0YWxsaW5nIHBlZXJEZXBlbmRlbmNpZXMgJHtwZWVyLmpvaW4oXCIsIFwiKX0uLi5gKTtcbiAgICBhd2FpdCBydW5Db21tYW5kKGBucG0gaW5zdGFsbCAtLXNhdmUtcGVlciAke3BlZXIuam9pbihcIiBcIil9YCwge1xuICAgICAgY3dkOiBwcm9jZXNzLmN3ZCgpLFxuICAgIH0pLnByb21pc2U7XG4gIH1cbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gTm9ybWFsaXplcyBpbXBvcnRzIHRvIGhhbmRsZSBib3RoIENvbW1vbkpTIGFuZCBFU01vZHVsZSBmb3JtYXRzLlxuICogQHN1bW1hcnkgVXRpbGl0eSBmdW5jdGlvbiB0byBoYW5kbGUgbW9kdWxlIGltcG9ydCBkaWZmZXJlbmNlcyBiZXR3ZWVuIGZvcm1hdHMuXG4gKlxuICogQHRlbXBsYXRlIFQgLSBUeXBlIG9mIHRoZSBpbXBvcnRlZCBtb2R1bGUuXG4gKiBAcGFyYW0ge1Byb21pc2U8VD59IGltcG9ydFByb21pc2UgLSBQcm9taXNlIHJldHVybmVkIGJ5IGR5bmFtaWMgaW1wb3J0LlxuICogQHJldHVybiB7UHJvbWlzZTxUPn0gTm9ybWFsaXplZCBtb2R1bGUuXG4gKlxuICogQGZ1bmN0aW9uIG5vcm1hbGl6ZUltcG9ydFxuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6dXRpbHNcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG5vcm1hbGl6ZUltcG9ydDxUPihcbiAgaW1wb3J0UHJvbWlzZTogUHJvbWlzZTxUPlxuKTogUHJvbWlzZTxUPiB7XG4gIC8vIENvbW1vbkpTJ3MgYG1vZHVsZS5leHBvcnRzYCBpcyB3cmFwcGVkIGFzIGBkZWZhdWx0YCBpbiBFU01vZHVsZS5cbiAgcmV0dXJuIGltcG9ydFByb21pc2UudGhlbigobTogYW55KSA9PiAobS5kZWZhdWx0IHx8IG0pIGFzIFQpO1xufVxuIiwiaW1wb3J0IHNsb2dhbnMgZnJvbSBcIi4uL2Fzc2V0cy9zbG9nYW5zLmpzb25cIjtcbmltcG9ydCB7IHN0eWxlIH0gZnJvbSBcInN0eWxlZC1zdHJpbmctYnVpbGRlclwiO1xuaW1wb3J0IHsgTG9nZ2VyIH0gZnJvbSBcIkBkZWNhZi10cy9sb2dnaW5nXCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEFycmF5IG9mIEFOU0kgY29sb3IgY29kZXMgZm9yIGJhbm5lciBzdHlsaW5nLlxuICogQHN1bW1hcnkgRGVmaW5lcyBhIHNldCBvZiBBTlNJIGNvbG9yIGNvZGVzIHVzZWQgdG8gc3R5bGUgdGhlIGJhbm5lciB0ZXh0LlxuICogQG1lbWJlck9mIG1vZHVsZTp1dGlsc1xuICovXG5jb25zdCBjb2xvcnMgPSBbXG4gIFwiXFx4MWJbMzg7NTsyMTVtXCIsIC8vIHNvZnQgb3JhbmdlXG4gIFwiXFx4MWJbMzg7NTsyMDltXCIsIC8vIGNvcmFsXG4gIFwiXFx4MWJbMzg7NTsyMDVtXCIsIC8vIHBpbmtcbiAgXCJcXHgxYlszODs1OzIxMG1cIiwgLy8gcGVhY2h5XG4gIFwiXFx4MWJbMzg7NTsyMTdtXCIsIC8vIHNhbG1vblxuICBcIlxceDFiWzM4OzU7MjE2bVwiLCAvLyBsaWdodCBjb3JhbFxuICBcIlxceDFiWzM4OzU7MjI0bVwiLCAvLyBsaWdodCBwZWFjaFxuICBcIlxceDFiWzM4OzU7MjMwbVwiLCAvLyBzb2Z0IGNyZWFtXG4gIFwiXFx4MWJbMzg7NTsyMzBtXCIsIC8vIHNvZnQgY3JlYW1cbl07XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFByaW50cyBhIHN0eWxlZCBiYW5uZXIgdG8gdGhlIGNvbnNvbGUuXG4gKiBAc3VtbWFyeSBHZW5lcmF0ZXMgYW5kIHByaW50cyBhIGNvbG9yZnVsIEFTQ0lJIGFydCBiYW5uZXIgd2l0aCBhIHJhbmRvbSBzbG9nYW4uXG4gKiBAcGFyYW0ge0xvZ2dlcn0gW2xvZ2dlcl0gLSBPcHRpb25hbCBsb2dnZXIgZm9yIHZlcmJvc2Ugb3V0cHV0LlxuICogQG1lbWJlck9mIG1vZHVsZTp1dGlsc1xuICogQGZ1bmN0aW9uIHByaW50QmFubmVyXG4gKiBAbWVybWFpZFxuICogc2VxdWVuY2VEaWFncmFtXG4gKiAgIHBhcnRpY2lwYW50IHByaW50QmFubmVyXG4gKiAgIHBhcnRpY2lwYW50IGdldFNsb2dhblxuICogICBwYXJ0aWNpcGFudCBwYWRFbmRcbiAqICAgcGFydGljaXBhbnQgY29uc29sZVxuICogICBwcmludEJhbm5lci0+PmdldFNsb2dhbjogQ2FsbCBnZXRTbG9nYW4oKVxuICogICBnZXRTbG9nYW4tLT4+cHJpbnRCYW5uZXI6IFJldHVybiByYW5kb20gc2xvZ2FuXG4gKiAgIHByaW50QmFubmVyLT4+cHJpbnRCYW5uZXI6IENyZWF0ZSBiYW5uZXIgQVNDSUkgYXJ0XG4gKiAgIHByaW50QmFubmVyLT4+cHJpbnRCYW5uZXI6IFNwbGl0IGJhbm5lciBpbnRvIGxpbmVzXG4gKiAgIHByaW50QmFubmVyLT4+cHJpbnRCYW5uZXI6IENhbGN1bGF0ZSBtYXggbGluZSBsZW5ndGhcbiAqICAgcHJpbnRCYW5uZXItPj5wYWRFbmQ6IENhbGwgcGFkRW5kIHdpdGggc2xvZ2FuXG4gKiAgIHBhZEVuZC0tPj5wcmludEJhbm5lcjogUmV0dXJuIHBhZGRlZCBzbG9nYW4gbGluZVxuICogICBsb29wIEZvciBlYWNoIGJhbm5lciBsaW5lXG4gKiAgICAgcHJpbnRCYW5uZXItPj5zdHlsZTogQ2FsbCBzdHlsZShsaW5lKVxuICogICAgIHN0eWxlLS0+PnByaW50QmFubmVyOiBSZXR1cm4gc3R5bGVkIGxpbmVcbiAqICAgICBwcmludEJhbm5lci0+PmNvbnNvbGU6IExvZyBzdHlsZWQgbGluZVxuICogICBlbmRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByaW50QmFubmVyKGxvZ2dlcj86IExvZ2dlcikge1xuICBjb25zdCBtZXNzYWdlID0gZ2V0U2xvZ2FuKCk7XG4gIGNvbnN0IGJhbm5lcjogc3RyaW5nIHwgc3RyaW5nW10gPVxuICAgIGAjICAgICAgICAgICAgICAgICDilpHilpLilpPilojilojilojilojilojilojilojilpPilpLilpEgIOKWkeKWkuKWk+KWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWk+KWkuKWkSAg4paR4paS4paT4paI4paI4paI4paI4paI4paI4paT4paS4paRICAg4paR4paS4paT4paI4paI4paI4paI4paI4paI4paT4paS4paRICDilpHilpLilpPilojilojilojilojilojilojilojilojilpPilpLilpEgICAgICAg4paR4paS4paT4paI4paI4paI4paI4paI4paI4paI4paI4paT4paS4paRICDilpHilpLilpPilojilojilojilojilojilojilojilpPilpLilpEgXG4jICAgICAgKCAoICAgICAgICDilpHilpLilpPilojilpPilpLilpHilpHilpLilpPilojilpPilpLilpEg4paR4paS4paT4paI4paT4paS4paRICAgICAgICDilpHilpLilpPilojilpPilpLilpHilpHilpLilpPilojilpPilpLilpEg4paR4paS4paT4paI4paT4paS4paR4paR4paS4paT4paI4paT4paS4paRIOKWkeKWkuKWk+KWiOKWk+KWkuKWkSAgICAgICAgICAgICAgICAg4paR4paS4paT4paI4paT4paS4paRICAgICDilpHilpLilpPilojilpPilpLilpEgICAgICAgIFxuIyAgICAgICApICkgICAgICAg4paR4paS4paT4paI4paT4paS4paR4paR4paS4paT4paI4paT4paS4paRIOKWkeKWkuKWk+KWiOKWk+KWkuKWkSAgICAgICAg4paR4paS4paT4paI4paT4paS4paRICAgICAgICDilpHilpLilpPilojilpPilpLilpHilpHilpLilpPilojilpPilpLilpEg4paR4paS4paT4paI4paT4paS4paRICAgICAgICAgICAgICAgICDilpHilpLilpPilojilpPilpLilpEgICAgIOKWkeKWkuKWk+KWiOKWk+KWkuKWkSAgICAgICAgXG4jICAgIFs9PT09PT09XSAgICDilpHilpLilpPilojilpPilpLilpHilpHilpLilpPilojilpPilpLilpEg4paR4paS4paT4paI4paI4paI4paI4paI4paI4paT4paS4paRICAg4paR4paS4paT4paI4paT4paS4paRICAgICAgICDilpHilpLilpPilojilojilojilojilojilojilojilojilpPilpLilpEg4paR4paS4paT4paI4paI4paI4paI4paI4paI4paT4paS4paRICAgICAgICAgICAg4paR4paS4paT4paI4paT4paS4paRICAgICAg4paR4paS4paT4paI4paI4paI4paI4paI4paI4paT4paS4paRICBcbiMgICAgIFxcYC0tLS0twrQgICAgIOKWkeKWkuKWk+KWiOKWk+KWkuKWkeKWkeKWkuKWk+KWiOKWk+KWkuKWkSDilpHilpLilpPilojilpPilpLilpEgICAgICAgIOKWkeKWkuKWk+KWiOKWk+KWkuKWkSAgICAgICAg4paR4paS4paT4paI4paT4paS4paR4paR4paS4paT4paI4paT4paS4paRIOKWkeKWkuKWk+KWiOKWk+KWkuKWkSAgICAgICAgICAgICAgICAg4paR4paS4paT4paI4paT4paS4paRICAgICAgICAgICAg4paR4paS4paT4paI4paT4paS4paRIFxuIyAgICAgICAgICAgICAgICAg4paR4paS4paT4paI4paT4paS4paR4paR4paS4paT4paI4paT4paS4paRIOKWkeKWkuKWk+KWiOKWk+KWkuKWkSAgICAgICAg4paR4paS4paT4paI4paT4paS4paR4paR4paS4paT4paI4paT4paS4paRIOKWkeKWkuKWk+KWiOKWk+KWkuKWkeKWkeKWkuKWk+KWiOKWk+KWkuKWkSDilpHilpLilpPilojilpPilpLilpEgICAgICAgICAgICAgICAgIOKWkeKWkuKWk+KWiOKWk+KWkuKWkSAgICAgICAgICAgIOKWkeKWkuKWk+KWiOKWk+KWkuKWkSBcbiMgICAgICAgICAgICAgICAgIOKWkeKWkuKWk+KWiOKWiOKWiOKWiOKWiOKWiOKWiOKWk+KWkuKWkSAg4paR4paS4paT4paI4paI4paI4paI4paI4paI4paI4paI4paT4paS4paRICDilpHilpLilpPilojilojilojilojilojilojilpPilpLilpEgIOKWkeKWkuKWk+KWiOKWk+KWkuKWkeKWkeKWkuKWk+KWiOKWk+KWkuKWkSDilpHilpLilpPilojilpPilpLilpEgICAgICAgICAgICAgICAgIOKWkeKWkuKWk+KWiOKWk+KWkuKWkSAgICAg4paR4paS4paT4paI4paI4paI4paI4paI4paI4paI4paT4paS4paRICBcbiNgLnNwbGl0KFwiXFxuXCIpO1xuICBjb25zdCBtYXhMZW5ndGggPSBiYW5uZXIucmVkdWNlKChtYXgsIGxpbmUpID0+IE1hdGgubWF4KG1heCwgbGluZS5sZW5ndGgpLCAwKTtcbiAgYmFubmVyLnB1c2goYCMgICR7bWVzc2FnZS5wYWRTdGFydChtYXhMZW5ndGggLSAzKX1gKTtcbiAgYmFubmVyLmZvckVhY2goKGxpbmUsIGluZGV4KSA9PiB7XG4gICAgKGxvZ2dlciA/IGxvZ2dlci5pbmZvLmJpbmQobG9nZ2VyKSA6IGNvbnNvbGUubG9nLmJpbmQoY29uc29sZSkpKFxuICAgICAgc3R5bGUobGluZSB8fCBcIlwiKS5yYXcoY29sb3JzW2luZGV4XSkudGV4dFxuICAgICk7XG4gIH0pO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBSZXRyaWV2ZXMgYSBzbG9nYW4gZnJvbSB0aGUgcHJlZGVmaW5lZCBsaXN0LlxuICogQHN1bW1hcnkgRmV0Y2hlcyBhIHJhbmRvbSBzbG9nYW4gb3IgYSBzcGVjaWZpYyBvbmUgYnkgaW5kZXggZnJvbSB0aGUgc2xvZ2FucyBsaXN0LlxuICogQHBhcmFtIHtudW1iZXJ9IFtpXSAtIE9wdGlvbmFsIGluZGV4IHRvIHJldHJpZXZlIGEgc3BlY2lmaWMgc2xvZ2FuLlxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgc2VsZWN0ZWQgc2xvZ2FuLlxuICogQGZ1bmN0aW9uIGdldFNsb2dhblxuICogQG1lbWJlck9mIG1vZHVsZTp1dGlsc1xuICogQG1lcm1haWRcbiAqIHNlcXVlbmNlRGlhZ3JhbVxuICogICBwYXJ0aWNpcGFudCBnZXRTbG9nYW5cbiAqICAgcGFydGljaXBhbnQgTWF0aC5yYW5kb21cbiAqICAgcGFydGljaXBhbnQgc2xvZ2Fuc1xuICogICBhbHQgaSBpcyB1bmRlZmluZWRcbiAqICAgICBnZXRTbG9nYW4tPj5NYXRoLnJhbmRvbTogR2VuZXJhdGUgcmFuZG9tIGluZGV4XG4gKiAgICAgTWF0aC5yYW5kb20tLT4+Z2V0U2xvZ2FuOiBSZXR1cm4gcmFuZG9tIGluZGV4XG4gKiAgIGVsc2UgaSBpcyBkZWZpbmVkXG4gKiAgICAgTm90ZSBvdmVyIGdldFNsb2dhbjogVXNlIHByb3ZpZGVkIGluZGV4XG4gKiAgIGVuZFxuICogICBnZXRTbG9nYW4tPj5zbG9nYW5zOiBBY2Nlc3Mgc2xvZ2FuIGF0IGluZGV4XG4gKiAgIHNsb2dhbnMtLT4+Z2V0U2xvZ2FuOiBSZXR1cm4gc2xvZ2FuXG4gKiAgIGFsdCBFcnJvciBvY2N1cnNcbiAqICAgICBnZXRTbG9nYW4tPj5nZXRTbG9nYW46IFRocm93IGVycm9yXG4gKiAgIGVuZFxuICogICBnZXRTbG9nYW4tLT4+Q2FsbGVyOiBSZXR1cm4gc2xvZ2FuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTbG9nYW4oaT86IG51bWJlcik6IHN0cmluZyB7XG4gIHRyeSB7XG4gICAgaSA9XG4gICAgICB0eXBlb2YgaSA9PT0gXCJ1bmRlZmluZWRcIiA/IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIHNsb2dhbnMubGVuZ3RoKSA6IGk7XG4gICAgcmV0dXJuIHNsb2dhbnNbaV0uU2xvZ2FuO1xuICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIHJldHJpZXZlIHNsb2dhbnM6ICR7ZXJyb3J9YCk7XG4gIH1cbn1cbiIsIi8qKlxuICogQGRlc2NyaXB0aW9uIERldGVybWluZXMgaWYgdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQgaXMgYSBicm93c2VyIGJ5IGNoZWNraW5nIHRoZSBwcm90b3R5cGUgY2hhaW4gb2YgdGhlIGdsb2JhbCBvYmplY3QuXG4gKiBAc3VtbWFyeSBDaGVja3MgaWYgdGhlIGNvZGUgaXMgcnVubmluZyBpbiBhIGJyb3dzZXIgZW52aXJvbm1lbnQuXG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSBlbnZpcm9ubWVudCBpcyBhIGJyb3dzZXIsIGZhbHNlIG90aGVyd2lzZS5cbiAqIEBmdW5jdGlvbiBpc0Jyb3dzZXJcbiAqIEBtZW1iZXJPZiBtb2R1bGU6dXRpbHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQnJvd3NlcigpOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICBPYmplY3QuZ2V0UHJvdG90eXBlT2YoT2JqZWN0LmdldFByb3RvdHlwZU9mKGdsb2JhbFRoaXMpKSAhPT1cbiAgICBPYmplY3QucHJvdG90eXBlXG4gICk7XG59XG4iLCIvKipcbiAqIEBjbGFzcyBPYmplY3RBY2N1bXVsYXRvclxuICogQHRlbXBsYXRlIFQgLSBUaGUgdHlwZSBvZiB0aGUgYWNjdW11bGF0ZWQgb2JqZWN0LCBleHRlbmRzIG9iamVjdFxuICogQGRlc2NyaXB0aW9uIEEgY2xhc3MgdGhhdCBhY2N1bXVsYXRlcyBvYmplY3RzIGFuZCBwcm92aWRlcyB0eXBlLXNhZmUgYWNjZXNzIHRvIHRoZWlyIHByb3BlcnRpZXMuXG4gKiBJdCBhbGxvd3MgZm9yIGR5bmFtaWMgYWRkaXRpb24gb2YgcHJvcGVydGllcyB3aGlsZSBtYWludGFpbmluZyB0eXBlIGluZm9ybWF0aW9uLlxuICogQHN1bW1hcnkgQWNjdW11bGF0ZXMgb2JqZWN0cyBhbmQgbWFpbnRhaW5zIHR5cGUgaW5mb3JtYXRpb24gZm9yIGFjY3VtdWxhdGVkIHByb3BlcnRpZXNcbiAqIEBtZW1iZXJPZiB1dGlsc1xuICovXG5leHBvcnQgY2xhc3MgT2JqZWN0QWNjdW11bGF0b3Ige1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJfX3NpemVcIiwge1xuICAgICAgICAgICAgdmFsdWU6IDAsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgKiBAZGVzY3JpcHRpb24gRXhwYW5kcyB0aGUgYWNjdW11bGF0b3Igd2l0aCBwcm9wZXJ0aWVzIGZyb20gYSBuZXcgb2JqZWN0XG4gICAgICogQHN1bW1hcnkgQWRkcyBuZXcgcHJvcGVydGllcyB0byB0aGUgYWNjdW11bGF0b3JcbiAgICAgKiBAdGVtcGxhdGUgViAtIFRoZSB0eXBlIG9mIHRoZSBvYmplY3QgYmVpbmcgZXhwYW5kZWRcbiAgICAgKiBAcGFyYW0ge1Z9IHZhbHVlIC0gVGhlIG9iamVjdCB0byBleHBhbmQgd2l0aFxuICAgICAqIEByZXR1cm5zIHt2b2lkfVxuICAgICAqL1xuICAgIGV4cGFuZCh2YWx1ZSkge1xuICAgICAgICBPYmplY3QuZW50cmllcyh2YWx1ZSkuZm9yRWFjaCgoW2ssIHZdKSA9PiB7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgaywge1xuICAgICAgICAgICAgICAgIGdldDogKCkgPT4gdixcbiAgICAgICAgICAgICAgICBzZXQ6ICh2YWwpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdiA9IHZhbDtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQWNjdW11bGF0ZXMgYSBuZXcgb2JqZWN0IGludG8gdGhlIGFjY3VtdWxhdG9yXG4gICAgICogQHN1bW1hcnkgQWRkcyBwcm9wZXJ0aWVzIGZyb20gYSBuZXcgb2JqZWN0IHRvIHRoZSBhY2N1bXVsYXRvciwgbWFpbnRhaW5pbmcgdHlwZSBpbmZvcm1hdGlvblxuICAgICAqIEB0ZW1wbGF0ZSBWIC0gVGhlIHR5cGUgb2YgdGhlIG9iamVjdCBiZWluZyBhY2N1bXVsYXRlZFxuICAgICAqIEBwYXJhbSB7Vn0gdmFsdWUgLSBUaGUgb2JqZWN0IHRvIGFjY3VtdWxhdGVcbiAgICAgKiBAcmV0dXJucyBBIG5ldyBPYmplY3RBY2N1bXVsYXRvciBpbnN0YW5jZSB3aXRoIHVwZGF0ZWQgdHlwZSBpbmZvcm1hdGlvblxuICAgICAqIEBtZXJtYWlkXG4gICAgICogc2VxdWVuY2VEaWFncmFtXG4gICAgICogICBwYXJ0aWNpcGFudCBBIGFzIEFjY3VtdWxhdG9yXG4gICAgICogICBwYXJ0aWNpcGFudCBPIGFzIE9iamVjdFxuICAgICAqICAgQS0+Pk86IEdldCBlbnRyaWVzXG4gICAgICogICBsb29wIEZvciBlYWNoIGVudHJ5XG4gICAgICogICAgIEEtPj5BOiBEZWZpbmUgcHJvcGVydHlcbiAgICAgKiAgIGVuZFxuICAgICAqICAgQS0+PkE6IFVwZGF0ZSBzaXplXG4gICAgICogICBBLT4+QTogUmV0dXJuIHVwZGF0ZWQgYWNjdW11bGF0b3JcbiAgICAgKi9cbiAgICBhY2N1bXVsYXRlKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuZXhwYW5kKHZhbHVlKTtcbiAgICAgICAgdGhpcy5fX3NpemUgPSB0aGlzLl9fc2l6ZSArIE9iamVjdC5rZXlzKHZhbHVlKS5sZW5ndGg7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0cmlldmVzIGEgdmFsdWUgZnJvbSB0aGUgYWNjdW11bGF0b3IgYnkgaXRzIGtleVxuICAgICAqIEBzdW1tYXJ5IEdldHMgYSB2YWx1ZSBmcm9tIHRoZSBhY2N1bXVsYXRlZCBvYmplY3QgdXNpbmcgYSB0eXBlLXNhZmUga2V5XG4gICAgICogQHRlbXBsYXRlIFQgLSB2YWx1ZSB0eXBlXG4gICAgICogQHRlbXBsYXRlIEsgLSBUaGUga2V5IHR5cGUsIG11c3QgYmUgYSBrZXkgb2YgdGhpc1xuICAgICAqIEBwYXJhbSB7S30ga2V5IC0gVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmV0cmlldmVcbiAgICAgKiBAcmV0dXJucyBUaGUgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBrZXlcbiAgICAgKi9cbiAgICBnZXQoa2V5KSB7XG4gICAgICAgIGlmICghKGtleSBpbiB0aGlzKSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgS2V5ICR7a2V5fSBkb2VzIG5vdCBleGlzdCBpbiBhY2N1bXVsYXRvci4gQXZhaWxhYmxlIGtleXM6ICR7dGhpcy5rZXlzKCkuam9pbihcIiwgXCIpfWApO1xuICAgICAgICByZXR1cm4gdGhpc1trZXldO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0cmlldmVzIGEgdmFsdWUgZnJvbSB0aGUgYWNjdW11bGF0b3IgYnkgaXRzIGtleVxuICAgICAqIEBzdW1tYXJ5IEdldHMgYSB2YWx1ZSBmcm9tIHRoZSBhY2N1bXVsYXRlZCBvYmplY3QgdXNpbmcgYSB0eXBlLXNhZmUga2V5XG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJldHJpZXZlXG4gICAgICogQHBhcmFtIHthbnl9IHZhbHVlIC0gVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmV0cmlldmVcbiAgICAgKi9cbiAgICBwdXQoa2V5LCB2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5hY2N1bXVsYXRlKHsgW2tleV06IHZhbHVlIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ2hlY2tzIGlmIGEga2V5IGV4aXN0cyBpbiB0aGUgYWNjdW11bGF0b3JcbiAgICAgKiBAc3VtbWFyeSBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGFjY3VtdWxhdG9yIGNvbnRhaW5zIGEgc3BlY2lmaWMga2V5XG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgdG8gY2hlY2sgZm9yIGV4aXN0ZW5jZVxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBrZXkgZXhpc3RzLCBmYWxzZSBvdGhlcndpc2VcbiAgICAgKi9cbiAgICBoYXMoa2V5KSB7XG4gICAgICAgIHJldHVybiAhIXRoaXNba2V5XTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJlbW92ZXMgYSBrZXktdmFsdWUgcGFpciBmcm9tIHRoZSBhY2N1bXVsYXRvclxuICAgICAqIEBzdW1tYXJ5IERlbGV0ZXMgYSBwcm9wZXJ0eSBmcm9tIHRoZSBhY2N1bXVsYXRlZCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gcmVtb3ZlXG4gICAgICogQHJldHVybnMge30gVGhlIGFjY3VtdWxhdG9yIGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmllZCBwcm9wZXJ0eSByZW1vdmVkXG4gICAgICovXG4gICAgcmVtb3ZlKGtleSkge1xuICAgICAgICBpZiAoIShrZXkgaW4gdGhpcykpXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgZGVsZXRlIHRoaXNba2V5XTtcbiAgICAgICAgdGhpcy5fX3NpemUtLTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXRyaWV2ZXMgYWxsIGtleXMgZnJvbSB0aGUgYWNjdW11bGF0b3JcbiAgICAgKiBAc3VtbWFyeSBHZXRzIGFuIGFycmF5IG9mIGFsbCBhY2N1bXVsYXRlZCBwcm9wZXJ0eSBrZXlzXG4gICAgICogQHJldHVybnMge3N0cmluZ1tdfSBBbiBhcnJheSBvZiBrZXlzIGFzIHN0cmluZ3NcbiAgICAgKi9cbiAgICBrZXlzKCkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXRyaWV2ZXMgYWxsIHZhbHVlcyBmcm9tIHRoZSBhY2N1bXVsYXRvclxuICAgICAqIEBzdW1tYXJ5IEdldHMgYW4gYXJyYXkgb2YgYWxsIGFjY3VtdWxhdGVkIHByb3BlcnR5IHZhbHVlc1xuICAgICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHZhbHVlc1xuICAgICAqL1xuICAgIHZhbHVlcygpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBHZXRzIHRoZSBudW1iZXIgb2Yga2V5LXZhbHVlIHBhaXJzIGluIHRoZSBhY2N1bXVsYXRvclxuICAgICAqIEBzdW1tYXJ5IFJldHVybnMgdGhlIGNvdW50IG9mIGFjY3VtdWxhdGVkIHByb3BlcnRpZXNcbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIGtleS12YWx1ZSBwYWlyc1xuICAgICAqL1xuICAgIHNpemUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9fc2l6ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENsZWFycyBhbGwgYWNjdW11bGF0ZWQga2V5LXZhbHVlIHBhaXJzXG4gICAgICogQHN1bW1hcnkgUmVtb3ZlcyBhbGwgcHJvcGVydGllcyBmcm9tIHRoZSBhY2N1bXVsYXRvciBhbmQgcmV0dXJucyBhIG5ldyBlbXB0eSBpbnN0YW5jZVxuICAgICAqIEByZXR1cm5zIHtPYmplY3RBY2N1bXVsYXRvcjxuZXZlcj59IEEgbmV3IGVtcHR5IE9iamVjdEFjY3VtdWxhdG9yIGluc3RhbmNlXG4gICAgICovXG4gICAgY2xlYXIoKSB7XG4gICAgICAgIHJldHVybiBuZXcgT2JqZWN0QWNjdW11bGF0b3IoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEV4ZWN1dGVzIGEgY2FsbGJhY2sgZm9yIGVhY2gga2V5LXZhbHVlIHBhaXIgaW4gdGhlIGFjY3VtdWxhdG9yXG4gICAgICogQHN1bW1hcnkgSXRlcmF0ZXMgb3ZlciBhbGwgYWNjdW11bGF0ZWQgcHJvcGVydGllcywgY2FsbGluZyBhIGZ1bmN0aW9uIGZvciBlYWNoXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbihhbnksIHN0cmluZywgbnVtYmVyKTogdm9pZH0gY2FsbGJhY2sgLSBUaGUgZnVuY3Rpb24gdG8gZXhlY3V0ZSBmb3IgZWFjaCBlbnRyeVxuICAgICAqIEByZXR1cm5zIHt2b2lkfVxuICAgICAqL1xuICAgIGZvckVhY2goY2FsbGJhY2spIHtcbiAgICAgICAgT2JqZWN0LmVudHJpZXModGhpcykuZm9yRWFjaCgoW2tleSwgdmFsdWVdLCBpKSA9PiBjYWxsYmFjayh2YWx1ZSwga2V5LCBpKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDcmVhdGVzIGEgbmV3IGFycmF5IHdpdGggdGhlIHJlc3VsdHMgb2YgY2FsbGluZyBhIHByb3ZpZGVkIGZ1bmN0aW9uIG9uIGV2ZXJ5IGVsZW1lbnQgaW4gdGhlIGFjY3VtdWxhdG9yXG4gICAgICogQHN1bW1hcnkgTWFwcyBlYWNoIGFjY3VtdWxhdGVkIHByb3BlcnR5IHRvIGEgbmV3IHZhbHVlIHVzaW5nIGEgY2FsbGJhY2sgZnVuY3Rpb25cbiAgICAgKiBAdGVtcGxhdGUgUiAtIFRoZSB0eXBlIG9mIHRoZSBtYXBwZWQgdmFsdWVzXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbihhbnksIHN0cmluZyxudW1iZXIpOiBSfSBjYWxsYmFjayAtIEZ1bmN0aW9uIHRoYXQgcHJvZHVjZXMgYW4gZWxlbWVudCBvZiB0aGUgbmV3IGFycmF5XG4gICAgICogQHJldHVybnMge1JbXX0gQSBuZXcgYXJyYXkgd2l0aCBlYWNoIGVsZW1lbnQgYmVpbmcgdGhlIHJlc3VsdCBvZiB0aGUgY2FsbGJhY2sgZnVuY3Rpb25cbiAgICAgKi9cbiAgICBtYXAoY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMpLm1hcCgoW2tleSwgdmFsdWVdLCBpKSA9PiBjYWxsYmFjayh2YWx1ZSwga2V5LCBpKSk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pWVdOamRXMTFiR0YwYjNJdWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGN5STZXeUl1TGk4dUxpOXpjbU12WVdOamRXMTFiR0YwYjNJdWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklrRkJRVUU3T3pzN096czdSMEZQUnp0QlFVTklMRTFCUVUwc1QwRkJUeXhwUWtGQmFVSTdTVUZSTlVJN1VVRkRSU3hOUVVGTkxFTkJRVU1zWTBGQll5eERRVUZETEVsQlFVa3NSVUZCUlN4UlFVRlJMRVZCUVVVN1dVRkRjRU1zUzBGQlN5eEZRVUZGTEVOQlFVTTdXVUZEVWl4UlFVRlJMRVZCUVVVc1NVRkJTVHRaUVVOa0xGbEJRVmtzUlVGQlJTeExRVUZMTzFsQlEyNUNMRlZCUVZVc1JVRkJSU3hMUVVGTE8xTkJRMnhDTEVOQlFVTXNRMEZCUXp0SlFVTk1MRU5CUVVNN1NVRkZSRHM3T3pzN096dFBRVTlITzBsQlEwOHNUVUZCVFN4RFFVRnRRaXhMUVVGUk8xRkJRM3BETEUxQlFVMHNRMEZCUXl4UFFVRlBMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRExFVkJRVVVzUlVGQlJUdFpRVU4yUXl4TlFVRk5MRU5CUVVNc1kwRkJZeXhEUVVGRExFbEJRVWtzUlVGQlJTeERRVUZETEVWQlFVVTdaMEpCUXpkQ0xFZEJRVWNzUlVGQlJTeEhRVUZITEVWQlFVVXNRMEZCUXl4RFFVRkRPMmRDUVVOYUxFZEJRVWNzUlVGQlJTeERRVUZETEVkQlFXVXNSVUZCUlN4RlFVRkZPMjlDUVVOMlFpeERRVUZETEVkQlFVY3NSMEZCUnl4RFFVRkRPMmRDUVVOV0xFTkJRVU03WjBKQlEwUXNXVUZCV1N4RlFVRkZMRWxCUVVrN1owSkJRMnhDTEZWQlFWVXNSVUZCUlN4SlFVRkpPMkZCUTJwQ0xFTkJRVU1zUTBGQlF6dFJRVU5NTEVOQlFVTXNRMEZCUXl4RFFVRkRPMGxCUTB3c1EwRkJRenRKUVVWRU96czdPenM3T3pzN096czdPenM3TzA5QlowSkhPMGxCUTBnc1ZVRkJWU3hEUVVGdFFpeExRVUZSTzFGQlEyNURMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTTdVVUZEYmtJc1NVRkJTU3hEUVVGRExFMUJRVTBzUjBGQlJ5eEpRVUZKTEVOQlFVTXNUVUZCVFN4SFFVRkhMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNUVUZCVFN4RFFVRkRPMUZCUTNSRUxFOUJRVThzU1VGQmJVUXNRMEZCUXp0SlFVTTNSQ3hEUVVGRE8wbEJSVVE3T3pzN096czdUMEZQUnp0SlFVTklMRWRCUVVjc1EwRkJiMElzUjBGQlRUdFJRVU16UWl4SlFVRkpMRU5CUVVNc1EwRkJReXhIUVVGSExFbEJRVWtzU1VGQlNTeERRVUZETzFsQlEyaENMRTFCUVUwc1NVRkJTU3hMUVVGTExFTkJRMklzVDBGQlR5eEhRVUZoTEcxRVFVRnRSQ3hKUVVGSkxFTkJRVU1zU1VGQlNTeEZRVUZGTEVOQlFVTXNTVUZCU1N4RFFVTnlSaXhKUVVGSkxFTkJRMHdzUlVGQlJTeERRVU5LTEVOQlFVTTdVVUZEU2l4UFFVRlJMRWxCUVZrc1EwRkJReXhIUVVGUkxFTkJRVk1zUTBGQlF6dEpRVU42UXl4RFFVRkRPMGxCUlVRN096czdPMDlCUzBjN1NVRkRTQ3hIUVVGSExFTkJRVU1zUjBGQlZ5eEZRVUZGTEV0QlFWVTdVVUZEZWtJc1QwRkJUeXhKUVVGSkxFTkJRVU1zVlVGQlZTeERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hMUVVGTExFVkJRVVVzUTBGQlF5eERRVUZETzBsQlF6TkRMRU5CUVVNN1NVRkZSRHM3T3pzN1QwRkxSenRKUVVOSUxFZEJRVWNzUTBGQlF5eEhRVUZYTzFGQlEySXNUMEZCVHl4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExFZEJRV2xDTEVOQlFVTXNRMEZCUXp0SlFVTnVReXhEUVVGRE8wbEJSVVE3T3pzN08wOUJTMGM3U1VGRFNDeE5RVUZOTEVOQlEwb3NSMEZCZDBJN1VVRkplRUlzU1VGQlNTeERRVUZETEVOQlFVTXNSMEZCUnl4SlFVRkpMRWxCUVVrc1EwRkJRenRaUVVGRkxFOUJRVThzU1VGQlNTeERRVUZETzFGQlJXaERMRTlCUVU4c1NVRkJTU3hEUVVGRExFZEJRV2xDTEVOQlFVTXNRMEZCUXp0UlFVTXZRaXhKUVVGSkxFTkJRVU1zVFVGQlRTeEZRVUZGTEVOQlFVTTdVVUZEWkN4UFFVRlBMRWxCUTI5RExFTkJRVU03U1VGRE9VTXNRMEZCUXp0SlFVVkVPenM3TzA5QlNVYzdTVUZEU0N4SlFVRkpPMUZCUTBZc1QwRkJUeXhOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPMGxCUXpOQ0xFTkJRVU03U1VGRlJEczdPenRQUVVsSE8wbEJRMGdzVFVGQlRUdFJRVU5LTEU5QlFVOHNUVUZCVFN4RFFVRkRMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF6dEpRVU0zUWl4RFFVRkRPMGxCUlVRN096czdUMEZKUnp0SlFVTklMRWxCUVVrN1VVRkRSaXhQUVVGUExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTTdTVUZEY2tJc1EwRkJRenRKUVVWRU96czdPMDlCU1VjN1NVRkRTQ3hMUVVGTE8xRkJRMGdzVDBGQlR5eEpRVUZKTEdsQ1FVRnBRaXhGUVVGRkxFTkJRVU03U1VGRGFrTXNRMEZCUXp0SlFVVkVPenM3T3p0UFFVdEhPMGxCUTBnc1QwRkJUeXhEUVVOTUxGRkJRWFZGTzFGQlJYWkZMRTFCUVUwc1EwRkJReXhQUVVGUExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFVkJRVVVzUzBGQlN5eERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRVZCUVVVc1EwRkRMME1zVVVGQlVTeERRVUZETEV0QlFVc3NSVUZCUlN4SFFVRnBRaXhGUVVGRkxFTkJRVU1zUTBGQlF5eERRVU4wUXl4RFFVRkRPMGxCUTBvc1EwRkJRenRKUVVWRU96czdPenM3VDBGTlJ6dEpRVU5JTEVkQlFVY3NRMEZEUkN4UlFVRnZSVHRSUVVWd1JTeFBRVUZQTEUxQlFVMHNRMEZCUXl4UFFVRlBMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRVZCUVVVc1MwRkJTeXhEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVWQlFVVXNRMEZEYkVRc1VVRkJVU3hEUVVGRExFdEJRVXNzUlVGQlJTeEhRVUZwUWl4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVOMFF5eERRVUZETzBsQlEwb3NRMEZCUXp0RFFVTkdJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpTHlvcVhHNGdLaUJBWTJ4aGMzTWdUMkpxWldOMFFXTmpkVzExYkdGMGIzSmNiaUFxSUVCMFpXMXdiR0YwWlNCVUlDMGdWR2hsSUhSNWNHVWdiMllnZEdobElHRmpZM1Z0ZFd4aGRHVmtJRzlpYW1WamRDd2daWGgwWlc1a2N5QnZZbXBsWTNSY2JpQXFJRUJrWlhOamNtbHdkR2x2YmlCQklHTnNZWE56SUhSb1lYUWdZV05qZFcxMWJHRjBaWE1nYjJKcVpXTjBjeUJoYm1RZ2NISnZkbWxrWlhNZ2RIbHdaUzF6WVdabElHRmpZMlZ6Y3lCMGJ5QjBhR1ZwY2lCd2NtOXdaWEowYVdWekxseHVJQ29nU1hRZ1lXeHNiM2R6SUdadmNpQmtlVzVoYldsaklHRmtaR2wwYVc5dUlHOW1JSEJ5YjNCbGNuUnBaWE1nZDJocGJHVWdiV0ZwYm5SaGFXNXBibWNnZEhsd1pTQnBibVp2Y20xaGRHbHZiaTVjYmlBcUlFQnpkVzF0WVhKNUlFRmpZM1Z0ZFd4aGRHVnpJRzlpYW1WamRITWdZVzVrSUcxaGFXNTBZV2x1Y3lCMGVYQmxJR2x1Wm05eWJXRjBhVzl1SUdadmNpQmhZMk4xYlhWc1lYUmxaQ0J3Y205d1pYSjBhV1Z6WEc0Z0tpQkFiV1Z0WW1WeVQyWWdkWFJwYkhOY2JpQXFMMXh1Wlhod2IzSjBJR05zWVhOeklFOWlhbVZqZEVGalkzVnRkV3hoZEc5eVBGUWdaWGgwWlc1a2N5QnZZbXBsWTNRK0lIdGNiaUFnTHlvcVhHNGdJQ0FxSUVCd2NtbDJZWFJsWEc0Z0lDQXFJRUJrWlhOamNtbHdkR2x2YmlCVWFHVWdjMmw2WlNCdlppQjBhR1VnWVdOamRXMTFiR0YwWldRZ2IySnFaV04wWEc0Z0lDQXFJRUIwZVhCbElIdHVkVzFpWlhKOVhHNGdJQ0FxTDF4dUlDQndjbWwyWVhSbElGOWZjMmw2WlNFNklHNTFiV0psY2p0Y2JseHVJQ0JqYjI1emRISjFZM1J2Y2lncElIdGNiaUFnSUNCUFltcGxZM1F1WkdWbWFXNWxVSEp2Y0dWeWRIa29kR2hwY3l3Z1hDSmZYM05wZW1WY0lpd2dlMXh1SUNBZ0lDQWdkbUZzZFdVNklEQXNYRzRnSUNBZ0lDQjNjbWwwWVdKc1pUb2dkSEoxWlN4Y2JpQWdJQ0FnSUdOdmJtWnBaM1Z5WVdKc1pUb2dabUZzYzJVc1hHNGdJQ0FnSUNCbGJuVnRaWEpoWW14bE9pQm1ZV3h6WlN4Y2JpQWdJQ0I5S1R0Y2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkFjSEp2ZEdWamRHVmtYRzRnSUNBcUlFQmtaWE5qY21sd2RHbHZiaUJGZUhCaGJtUnpJSFJvWlNCaFkyTjFiWFZzWVhSdmNpQjNhWFJvSUhCeWIzQmxjblJwWlhNZ1puSnZiU0JoSUc1bGR5QnZZbXBsWTNSY2JpQWdJQ29nUUhOMWJXMWhjbmtnUVdSa2N5QnVaWGNnY0hKdmNHVnlkR2xsY3lCMGJ5QjBhR1VnWVdOamRXMTFiR0YwYjNKY2JpQWdJQ29nUUhSbGJYQnNZWFJsSUZZZ0xTQlVhR1VnZEhsd1pTQnZaaUIwYUdVZ2IySnFaV04wSUdKbGFXNW5JR1Y0Y0dGdVpHVmtYRzRnSUNBcUlFQndZWEpoYlNCN1ZuMGdkbUZzZFdVZ0xTQlVhR1VnYjJKcVpXTjBJSFJ2SUdWNGNHRnVaQ0IzYVhSb1hHNGdJQ0FxSUVCeVpYUjFjbTV6SUh0MmIybGtmVnh1SUNBZ0tpOWNiaUFnY0hKdmRHVmpkR1ZrSUdWNGNHRnVaRHhXSUdWNGRHVnVaSE1nYjJKcVpXTjBQaWgyWVd4MVpUb2dWaWs2SUhadmFXUWdlMXh1SUNBZ0lFOWlhbVZqZEM1bGJuUnlhV1Z6S0haaGJIVmxLUzVtYjNKRllXTm9LQ2hiYXl3Z2RsMHBJRDArSUh0Y2JpQWdJQ0FnSUU5aWFtVmpkQzVrWldacGJtVlFjbTl3WlhKMGVTaDBhR2x6TENCckxDQjdYRzRnSUNBZ0lDQWdJR2RsZERvZ0tDa2dQVDRnZGl4Y2JpQWdJQ0FnSUNBZ2MyVjBPaUFvZG1Gc09pQldXMnRsZVc5bUlGWmRLU0E5UGlCN1hHNGdJQ0FnSUNBZ0lDQWdkaUE5SUhaaGJEdGNiaUFnSUNBZ0lDQWdmU3hjYmlBZ0lDQWdJQ0FnWTI5dVptbG5kWEpoWW14bE9pQjBjblZsTEZ4dUlDQWdJQ0FnSUNCbGJuVnRaWEpoWW14bE9pQjBjblZsTEZ4dUlDQWdJQ0FnZlNrN1hHNGdJQ0FnZlNrN1hHNGdJSDFjYmx4dUlDQXZLaXBjYmlBZ0lDb2dRR1JsYzJOeWFYQjBhVzl1SUVGalkzVnRkV3hoZEdWeklHRWdibVYzSUc5aWFtVmpkQ0JwYm5SdklIUm9aU0JoWTJOMWJYVnNZWFJ2Y2x4dUlDQWdLaUJBYzNWdGJXRnllU0JCWkdSeklIQnliM0JsY25ScFpYTWdabkp2YlNCaElHNWxkeUJ2WW1wbFkzUWdkRzhnZEdobElHRmpZM1Z0ZFd4aGRHOXlMQ0J0WVdsdWRHRnBibWx1WnlCMGVYQmxJR2x1Wm05eWJXRjBhVzl1WEc0Z0lDQXFJRUIwWlcxd2JHRjBaU0JXSUMwZ1ZHaGxJSFI1Y0dVZ2IyWWdkR2hsSUc5aWFtVmpkQ0JpWldsdVp5QmhZMk4xYlhWc1lYUmxaRnh1SUNBZ0tpQkFjR0Z5WVcwZ2UxWjlJSFpoYkhWbElDMGdWR2hsSUc5aWFtVmpkQ0IwYnlCaFkyTjFiWFZzWVhSbFhHNGdJQ0FxSUVCeVpYUjFjbTV6SUVFZ2JtVjNJRTlpYW1WamRFRmpZM1Z0ZFd4aGRHOXlJR2x1YzNSaGJtTmxJSGRwZEdnZ2RYQmtZWFJsWkNCMGVYQmxJR2x1Wm05eWJXRjBhVzl1WEc0Z0lDQXFJRUJ0WlhKdFlXbGtYRzRnSUNBcUlITmxjWFZsYm1ObFJHbGhaM0poYlZ4dUlDQWdLaUFnSUhCaGNuUnBZMmx3WVc1MElFRWdZWE1nUVdOamRXMTFiR0YwYjNKY2JpQWdJQ29nSUNCd1lYSjBhV05wY0dGdWRDQlBJR0Z6SUU5aWFtVmpkRnh1SUNBZ0tpQWdJRUV0UGo1UE9pQkhaWFFnWlc1MGNtbGxjMXh1SUNBZ0tpQWdJR3h2YjNBZ1JtOXlJR1ZoWTJnZ1pXNTBjbmxjYmlBZ0lDb2dJQ0FnSUVFdFBqNUJPaUJFWldacGJtVWdjSEp2Y0dWeWRIbGNiaUFnSUNvZ0lDQmxibVJjYmlBZ0lDb2dJQ0JCTFQ0K1FUb2dWWEJrWVhSbElITnBlbVZjYmlBZ0lDb2dJQ0JCTFQ0K1FUb2dVbVYwZFhKdUlIVndaR0YwWldRZ1lXTmpkVzExYkdGMGIzSmNiaUFnSUNvdlhHNGdJR0ZqWTNWdGRXeGhkR1U4VmlCbGVIUmxibVJ6SUc5aWFtVmpkRDRvZG1Gc2RXVTZJRllwT2lCVUlDWWdWaUFtSUU5aWFtVmpkRUZqWTNWdGRXeGhkRzl5UEZRZ0ppQldQaUI3WEc0Z0lDQWdkR2hwY3k1bGVIQmhibVFvZG1Gc2RXVXBPMXh1SUNBZ0lIUm9hWE11WDE5emFYcGxJRDBnZEdocGN5NWZYM05wZW1VZ0t5QlBZbXBsWTNRdWEyVjVjeWgyWVd4MVpTa3ViR1Z1WjNSb08xeHVJQ0FnSUhKbGRIVnliaUIwYUdseklHRnpJSFZ1YTI1dmQyNGdZWE1nVkNBbUlGWWdKaUJQWW1wbFkzUkJZMk4xYlhWc1lYUnZjanhVSUNZZ1ZqNDdYRzRnSUgxY2JseHVJQ0F2S2lwY2JpQWdJQ29nUUdSbGMyTnlhWEIwYVc5dUlGSmxkSEpwWlhabGN5QmhJSFpoYkhWbElHWnliMjBnZEdobElHRmpZM1Z0ZFd4aGRHOXlJR0o1SUdsMGN5QnJaWGxjYmlBZ0lDb2dRSE4xYlcxaGNua2dSMlYwY3lCaElIWmhiSFZsSUdaeWIyMGdkR2hsSUdGalkzVnRkV3hoZEdWa0lHOWlhbVZqZENCMWMybHVaeUJoSUhSNWNHVXRjMkZtWlNCclpYbGNiaUFnSUNvZ1FIUmxiWEJzWVhSbElGUWdMU0IyWVd4MVpTQjBlWEJsWEc0Z0lDQXFJRUIwWlcxd2JHRjBaU0JMSUMwZ1ZHaGxJR3RsZVNCMGVYQmxMQ0J0ZFhOMElHSmxJR0VnYTJWNUlHOW1JSFJvYVhOY2JpQWdJQ29nUUhCaGNtRnRJSHRMZlNCclpYa2dMU0JVYUdVZ2EyVjVJRzltSUhSb1pTQjJZV3gxWlNCMGJ5QnlaWFJ5YVdWMlpWeHVJQ0FnS2lCQWNtVjBkWEp1Y3lCVWFHVWdkbUZzZFdVZ1lYTnpiMk5wWVhSbFpDQjNhWFJvSUhSb1pTQnJaWGxjYmlBZ0lDb3ZYRzRnSUdkbGREeExJR1Y0ZEdWdVpITWdhMlY1YjJZZ1ZENG9hMlY1T2lCTEtUb2dWRnRMWFNCN1hHNGdJQ0FnYVdZZ0tDRW9hMlY1SUdsdUlIUm9hWE1wS1Z4dUlDQWdJQ0FnZEdoeWIzY2dibVYzSUVWeWNtOXlLRnh1SUNBZ0lDQWdJQ0JnUzJWNUlDUjdhMlY1SUdGeklITjBjbWx1WjMwZ1pHOWxjeUJ1YjNRZ1pYaHBjM1FnYVc0Z1lXTmpkVzExYkdGMGIzSXVJRUYyWVdsc1lXSnNaU0JyWlhsek9pQWtlM1JvYVhNdWEyVjVjeWdwTG1wdmFXNG9YRzRnSUNBZ0lDQWdJQ0FnWENJc0lGd2lYRzRnSUNBZ0lDQWdJQ2w5WUZ4dUlDQWdJQ0FnS1R0Y2JpQWdJQ0J5WlhSMWNtNGdLSFJvYVhNZ1lYTWdZVzU1S1Z0clpYa2dZWE1nUzEwZ1lYTWdWRnRMWFR0Y2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkFaR1Z6WTNKcGNIUnBiMjRnVW1WMGNtbGxkbVZ6SUdFZ2RtRnNkV1VnWm5KdmJTQjBhR1VnWVdOamRXMTFiR0YwYjNJZ1lua2dhWFJ6SUd0bGVWeHVJQ0FnS2lCQWMzVnRiV0Z5ZVNCSFpYUnpJR0VnZG1Gc2RXVWdabkp2YlNCMGFHVWdZV05qZFcxMWJHRjBaV1FnYjJKcVpXTjBJSFZ6YVc1bklHRWdkSGx3WlMxellXWmxJR3RsZVZ4dUlDQWdLaUJBY0dGeVlXMGdlM04wY21sdVozMGdhMlY1SUMwZ1ZHaGxJR3RsZVNCdlppQjBhR1VnZG1Gc2RXVWdkRzhnY21WMGNtbGxkbVZjYmlBZ0lDb2dRSEJoY21GdElIdGhibmw5SUhaaGJIVmxJQzBnVkdobElHdGxlU0J2WmlCMGFHVWdkbUZzZFdVZ2RHOGdjbVYwY21sbGRtVmNiaUFnSUNvdlhHNGdJSEIxZENoclpYazZJSE4wY21sdVp5d2dkbUZzZFdVNklHRnVlU2tnZTF4dUlDQWdJSEpsZEhWeWJpQjBhR2x6TG1GalkzVnRkV3hoZEdVb2V5QmJhMlY1WFRvZ2RtRnNkV1VnZlNrN1hHNGdJSDFjYmx4dUlDQXZLaXBjYmlBZ0lDb2dRR1JsYzJOeWFYQjBhVzl1SUVOb1pXTnJjeUJwWmlCaElHdGxlU0JsZUdsemRITWdhVzRnZEdobElHRmpZM1Z0ZFd4aGRHOXlYRzRnSUNBcUlFQnpkVzF0WVhKNUlFUmxkR1Z5YldsdVpYTWdkMmhsZEdobGNpQjBhR1VnWVdOamRXMTFiR0YwYjNJZ1kyOXVkR0ZwYm5NZ1lTQnpjR1ZqYVdacFl5QnJaWGxjYmlBZ0lDb2dRSEJoY21GdElIdHpkSEpwYm1kOUlHdGxlU0F0SUZSb1pTQnJaWGtnZEc4Z1kyaGxZMnNnWm05eUlHVjRhWE4wWlc1alpWeHVJQ0FnS2lCQWNtVjBkWEp1Y3lCN1ltOXZiR1ZoYm4wZ1ZISjFaU0JwWmlCMGFHVWdhMlY1SUdWNGFYTjBjeXdnWm1Gc2MyVWdiM1JvWlhKM2FYTmxYRzRnSUNBcUwxeHVJQ0JvWVhNb2EyVjVPaUJ6ZEhKcGJtY3BPaUJpYjI5c1pXRnVJSHRjYmlBZ0lDQnlaWFIxY200Z0lTRjBhR2x6VzJ0bGVTQmhjeUJyWlhsdlppQjBhR2x6WFR0Y2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkFaR1Z6WTNKcGNIUnBiMjRnVW1WdGIzWmxjeUJoSUd0bGVTMTJZV3gxWlNCd1lXbHlJR1p5YjIwZ2RHaGxJR0ZqWTNWdGRXeGhkRzl5WEc0Z0lDQXFJRUJ6ZFcxdFlYSjVJRVJsYkdWMFpYTWdZU0J3Y205d1pYSjBlU0JtY205dElIUm9aU0JoWTJOMWJYVnNZWFJsWkNCdlltcGxZM1JjYmlBZ0lDb2dRSEJoY21GdElIdHpkSEpwYm1kOUlHdGxlU0F0SUZSb1pTQnJaWGtnYjJZZ2RHaGxJSEJ5YjNCbGNuUjVJSFJ2SUhKbGJXOTJaVnh1SUNBZ0tpQkFjbVYwZFhKdWN5QjdmU0JVYUdVZ1lXTmpkVzExYkdGMGIzSWdhVzV6ZEdGdVkyVWdkMmwwYUNCMGFHVWdjM0JsWTJsbWFXVmtJSEJ5YjNCbGNuUjVJSEpsYlc5MlpXUmNiaUFnSUNvdlhHNGdJSEpsYlc5MlpTaGNiaUFnSUNCclpYazZJR3RsZVc5bUlIUm9hWE1nZkNCemRISnBibWRjYmlBZ0tUcGNiaUFnSUNCOElDaFBiV2wwUEhSb2FYTXNJSFI1Y0dWdlppQnJaWGsrSUNZZ1QySnFaV04wUVdOamRXMTFiR0YwYjNJOFQyMXBkRHgwYUdsekxDQjBlWEJsYjJZZ2EyVjVQajRwWEc0Z0lDQWdmQ0IwYUdseklIdGNiaUFnSUNCcFppQW9JU2hyWlhrZ2FXNGdkR2hwY3lrcElISmxkSFZ5YmlCMGFHbHpPMXh1WEc0Z0lDQWdaR1ZzWlhSbElIUm9hWE5iYTJWNUlHRnpJR3RsZVc5bUlIUm9hWE5kTzF4dUlDQWdJSFJvYVhNdVgxOXphWHBsTFMwN1hHNGdJQ0FnY21WMGRYSnVJSFJvYVhNZ1lYTWdkVzVyYm05M2JpQmhjeUJQYldsMFBIUm9hWE1zSUhSNWNHVnZaaUJyWlhrK0lDWmNiaUFnSUNBZ0lFOWlhbVZqZEVGalkzVnRkV3hoZEc5eVBFOXRhWFE4ZEdocGN5d2dkSGx3Wlc5bUlHdGxlVDQrTzF4dUlDQjlYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFQmtaWE5qY21sd2RHbHZiaUJTWlhSeWFXVjJaWE1nWVd4c0lHdGxlWE1nWm5KdmJTQjBhR1VnWVdOamRXMTFiR0YwYjNKY2JpQWdJQ29nUUhOMWJXMWhjbmtnUjJWMGN5QmhiaUJoY25KaGVTQnZaaUJoYkd3Z1lXTmpkVzExYkdGMFpXUWdjSEp2Y0dWeWRIa2dhMlY1YzF4dUlDQWdLaUJBY21WMGRYSnVjeUI3YzNSeWFXNW5XMTE5SUVGdUlHRnljbUY1SUc5bUlHdGxlWE1nWVhNZ2MzUnlhVzVuYzF4dUlDQWdLaTljYmlBZ2EyVjVjeWdwT2lCemRISnBibWRiWFNCN1hHNGdJQ0FnY21WMGRYSnVJRTlpYW1WamRDNXJaWGx6S0hSb2FYTXBPMXh1SUNCOVhHNWNiaUFnTHlvcVhHNGdJQ0FxSUVCa1pYTmpjbWx3ZEdsdmJpQlNaWFJ5YVdWMlpYTWdZV3hzSUhaaGJIVmxjeUJtY205dElIUm9aU0JoWTJOMWJYVnNZWFJ2Y2x4dUlDQWdLaUJBYzNWdGJXRnllU0JIWlhSeklHRnVJR0Z5Y21GNUlHOW1JR0ZzYkNCaFkyTjFiWFZzWVhSbFpDQndjbTl3WlhKMGVTQjJZV3gxWlhOY2JpQWdJQ29nUUhKbGRIVnlibk1nUVc0Z1lYSnlZWGtnYjJZZ2RtRnNkV1Z6WEc0Z0lDQXFMMXh1SUNCMllXeDFaWE1vS1RvZ1ZGdHJaWGx2WmlCVVhWdGRJSHRjYmlBZ0lDQnlaWFIxY200Z1QySnFaV04wTG5aaGJIVmxjeWgwYUdsektUdGNiaUFnZlZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJBWkdWelkzSnBjSFJwYjI0Z1IyVjBjeUIwYUdVZ2JuVnRZbVZ5SUc5bUlHdGxlUzEyWVd4MVpTQndZV2x5Y3lCcGJpQjBhR1VnWVdOamRXMTFiR0YwYjNKY2JpQWdJQ29nUUhOMWJXMWhjbmtnVW1WMGRYSnVjeUIwYUdVZ1kyOTFiblFnYjJZZ1lXTmpkVzExYkdGMFpXUWdjSEp2Y0dWeWRHbGxjMXh1SUNBZ0tpQkFjbVYwZFhKdWN5QjdiblZ0WW1WeWZTQlVhR1VnYm5WdFltVnlJRzltSUd0bGVTMTJZV3gxWlNCd1lXbHljMXh1SUNBZ0tpOWNiaUFnYzJsNlpTZ3BPaUJ1ZFcxaVpYSWdlMXh1SUNBZ0lISmxkSFZ5YmlCMGFHbHpMbDlmYzJsNlpUdGNiaUFnZlZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJBWkdWelkzSnBjSFJwYjI0Z1EyeGxZWEp6SUdGc2JDQmhZMk4xYlhWc1lYUmxaQ0JyWlhrdGRtRnNkV1VnY0dGcGNuTmNiaUFnSUNvZ1FITjFiVzFoY25rZ1VtVnRiM1psY3lCaGJHd2djSEp2Y0dWeWRHbGxjeUJtY205dElIUm9aU0JoWTJOMWJYVnNZWFJ2Y2lCaGJtUWdjbVYwZFhKdWN5QmhJRzVsZHlCbGJYQjBlU0JwYm5OMFlXNWpaVnh1SUNBZ0tpQkFjbVYwZFhKdWN5QjdUMkpxWldOMFFXTmpkVzExYkdGMGIzSThibVYyWlhJK2ZTQkJJRzVsZHlCbGJYQjBlU0JQWW1wbFkzUkJZMk4xYlhWc1lYUnZjaUJwYm5OMFlXNWpaVnh1SUNBZ0tpOWNiaUFnWTJ4bFlYSW9LVG9nVDJKcVpXTjBRV05qZFcxMWJHRjBiM0k4Ym1WMlpYSStJSHRjYmlBZ0lDQnlaWFIxY200Z2JtVjNJRTlpYW1WamRFRmpZM1Z0ZFd4aGRHOXlLQ2s3WEc0Z0lIMWNibHh1SUNBdktpcGNiaUFnSUNvZ1FHUmxjMk55YVhCMGFXOXVJRVY0WldOMWRHVnpJR0VnWTJGc2JHSmhZMnNnWm05eUlHVmhZMmdnYTJWNUxYWmhiSFZsSUhCaGFYSWdhVzRnZEdobElHRmpZM1Z0ZFd4aGRHOXlYRzRnSUNBcUlFQnpkVzF0WVhKNUlFbDBaWEpoZEdWeklHOTJaWElnWVd4c0lHRmpZM1Z0ZFd4aGRHVmtJSEJ5YjNCbGNuUnBaWE1zSUdOaGJHeHBibWNnWVNCbWRXNWpkR2x2YmlCbWIzSWdaV0ZqYUZ4dUlDQWdLaUJBY0dGeVlXMGdlMloxYm1OMGFXOXVLR0Z1ZVN3Z2MzUnlhVzVuTENCdWRXMWlaWElwT2lCMmIybGtmU0JqWVd4c1ltRmpheUF0SUZSb1pTQm1kVzVqZEdsdmJpQjBieUJsZUdWamRYUmxJR1p2Y2lCbFlXTm9JR1Z1ZEhKNVhHNGdJQ0FxSUVCeVpYUjFjbTV6SUh0MmIybGtmVnh1SUNBZ0tpOWNiaUFnWm05eVJXRmphQ2hjYmlBZ0lDQmpZV3hzWW1GamF6b2dLSFpoYkhWbE9pQjBhR2x6VzJ0bGVXOW1JSFJvYVhOZExDQnJaWGs2SUd0bGVXOW1JSFJvYVhNc0lHazZJRzUxYldKbGNpa2dQVDRnZG05cFpGeHVJQ0FwT2lCMmIybGtJSHRjYmlBZ0lDQlBZbXBsWTNRdVpXNTBjbWxsY3loMGFHbHpLUzVtYjNKRllXTm9LQ2hiYTJWNUxDQjJZV3gxWlYwc0lHa3BJRDArWEc0Z0lDQWdJQ0JqWVd4c1ltRmpheWgyWVd4MVpTd2dhMlY1SUdGeklHdGxlVzltSUhSb2FYTXNJR2twWEc0Z0lDQWdLVHRjYmlBZ2ZWeHVYRzRnSUM4cUtseHVJQ0FnS2lCQVpHVnpZM0pwY0hScGIyNGdRM0psWVhSbGN5QmhJRzVsZHlCaGNuSmhlU0IzYVhSb0lIUm9aU0J5WlhOMWJIUnpJRzltSUdOaGJHeHBibWNnWVNCd2NtOTJhV1JsWkNCbWRXNWpkR2x2YmlCdmJpQmxkbVZ5ZVNCbGJHVnRaVzUwSUdsdUlIUm9aU0JoWTJOMWJYVnNZWFJ2Y2x4dUlDQWdLaUJBYzNWdGJXRnllU0JOWVhCeklHVmhZMmdnWVdOamRXMTFiR0YwWldRZ2NISnZjR1Z5ZEhrZ2RHOGdZU0J1WlhjZ2RtRnNkV1VnZFhOcGJtY2dZU0JqWVd4c1ltRmpheUJtZFc1amRHbHZibHh1SUNBZ0tpQkFkR1Z0Y0d4aGRHVWdVaUF0SUZSb1pTQjBlWEJsSUc5bUlIUm9aU0J0WVhCd1pXUWdkbUZzZFdWelhHNGdJQ0FxSUVCd1lYSmhiU0I3Wm5WdVkzUnBiMjRvWVc1NUxDQnpkSEpwYm1jc2JuVnRZbVZ5S1RvZ1VuMGdZMkZzYkdKaFkyc2dMU0JHZFc1amRHbHZiaUIwYUdGMElIQnliMlIxWTJWeklHRnVJR1ZzWlcxbGJuUWdiMllnZEdobElHNWxkeUJoY25KaGVWeHVJQ0FnS2lCQWNtVjBkWEp1Y3lCN1VsdGRmU0JCSUc1bGR5QmhjbkpoZVNCM2FYUm9JR1ZoWTJnZ1pXeGxiV1Z1ZENCaVpXbHVaeUIwYUdVZ2NtVnpkV3gwSUc5bUlIUm9aU0JqWVd4c1ltRmpheUJtZFc1amRHbHZibHh1SUNBZ0tpOWNiaUFnYldGd1BGSStLRnh1SUNBZ0lHTmhiR3hpWVdOck9pQW9kbUZzZFdVNklIUm9hWE5iYTJWNWIyWWdkR2hwYzEwc0lHdGxlVG9nYTJWNWIyWWdkR2hwY3l3Z2FUb2diblZ0WW1WeUtTQTlQaUJTWEc0Z0lDazZJRkpiWFNCN1hHNGdJQ0FnY21WMGRYSnVJRTlpYW1WamRDNWxiblJ5YVdWektIUm9hWE1wTG0xaGNDZ29XMnRsZVN3Z2RtRnNkV1ZkTENCcEtTQTlQbHh1SUNBZ0lDQWdZMkZzYkdKaFkyc29kbUZzZFdVc0lHdGxlU0JoY3lCclpYbHZaaUIwYUdsekxDQnBLVnh1SUNBZ0lDazdYRzRnSUgxY2JuMWNiaUpkZlE9PSIsImltcG9ydCB7IHRvRU5WRm9ybWF0IH0gZnJvbSBcIi4vdGV4dFwiO1xuaW1wb3J0IHsgRW52aXJvbm1lbnRGYWN0b3J5IH0gZnJvbSBcIi4vdHlwZXNcIjtcbmltcG9ydCB7IGlzQnJvd3NlciB9IGZyb20gXCIuL3dlYlwiO1xuaW1wb3J0IHsgT2JqZWN0QWNjdW11bGF0b3IgfSBmcm9tIFwidHlwZWQtb2JqZWN0LWFjY3VtdWxhdG9yXCI7XG5cbi8qKlxuICogQGNsYXNzIEVudmlyb25tZW50XG4gKiBAZXh0ZW5kcyB7T2JqZWN0QWNjdW11bGF0b3I8VD59XG4gKiBAdGVtcGxhdGUgVFxuICogQGRlc2NyaXB0aW9uIEEgY2xhc3MgcmVwcmVzZW50aW5nIGFuIGVudmlyb25tZW50IHdpdGggYWNjdW11bGF0aW9uIGNhcGFiaWxpdGllcy5cbiAqIEBzdW1tYXJ5IE1hbmFnZXMgZW52aXJvbm1lbnQtcmVsYXRlZCBkYXRhIGFuZCBwcm92aWRlcyBtZXRob2RzIGZvciBhY2N1bXVsYXRpb24gYW5kIGtleSByZXRyaWV2YWwuXG4gKiBAcGFyYW0ge1R9IFtpbml0aWFsRGF0YV0gLSBUaGUgaW5pdGlhbCBkYXRhIHRvIHBvcHVsYXRlIHRoZSBlbnZpcm9ubWVudCB3aXRoLlxuICovXG5leHBvcnQgY2xhc3MgRW52aXJvbm1lbnQ8VCBleHRlbmRzIG9iamVjdD4gZXh0ZW5kcyBPYmplY3RBY2N1bXVsYXRvcjxUPiB7XG4gIC8qKlxuICAgKiBAc3RhdGljXG4gICAqIEBwcm90ZWN0ZWRcbiAgICogQGRlc2NyaXB0aW9uIEEgZmFjdG9yeSBmdW5jdGlvbiBmb3IgY3JlYXRpbmcgRW52aXJvbm1lbnQgaW5zdGFuY2VzLlxuICAgKiBAc3VtbWFyeSBEZWZpbmVzIGhvdyBuZXcgaW5zdGFuY2VzIG9mIHRoZSBFbnZpcm9ubWVudCBjbGFzcyBzaG91bGQgYmUgY3JlYXRlZC5cbiAgICogQHJldHVybiB7RW52aXJvbm1lbnQ8YW55Pn0gQSBuZXcgaW5zdGFuY2Ugb2YgdGhlIEVudmlyb25tZW50IGNsYXNzLlxuICAgKi9cbiAgcHJvdGVjdGVkIHN0YXRpYyBmYWN0b3J5OiBFbnZpcm9ubWVudEZhY3Rvcnk8YW55LCBhbnk+ID1cbiAgICAoKTogRW52aXJvbm1lbnQ8YW55PiA9PiBuZXcgRW52aXJvbm1lbnQoKTtcblxuICAvKipcbiAgICogQHN0YXRpY1xuICAgKiBAcHJpdmF0ZVxuICAgKiBAZGVzY3JpcHRpb24gVGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgRW52aXJvbm1lbnQgY2xhc3MuXG4gICAqIEB0eXBlIHtFbnZpcm9ubWVudDxhbnk+fVxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgX2luc3RhbmNlOiBFbnZpcm9ubWVudDxhbnk+O1xuXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSZXRyaWV2ZXMgYSB2YWx1ZSBmcm9tIHRoZSBlbnZpcm9ubWVudFxuICAgKiBAc3VtbWFyeSBHZXRzIGEgdmFsdWUgZnJvbSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzLCBoYW5kbGluZyBicm93c2VyIGFuZCBOb2RlLmpzIGVudmlyb25tZW50cyBkaWZmZXJlbnRseVxuICAgKiBAcGFyYW0ge3N0cmluZ30gayAtIFRoZSBrZXkgdG8gcmV0cmlldmUgZnJvbSB0aGUgZW52aXJvbm1lbnRcbiAgICogQHJldHVybiB7dW5rbm93bn0gVGhlIHZhbHVlIGZyb20gdGhlIGVudmlyb25tZW50LCBvciB1bmRlZmluZWQgaWYgbm90IGZvdW5kXG4gICAqL1xuICBwcm90ZWN0ZWQgZnJvbUVudihrOiBzdHJpbmcpIHtcbiAgICBsZXQgZW52OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBpZiAoaXNCcm93c2VyKCkpIHtcbiAgICAgIGVudiA9IChnbG9iYWxUaGlzIGFzIHR5cGVvZiBnbG9iYWxUaGlzICYgeyBFTlY6IFJlY29yZDxzdHJpbmcsIGFueT4gfSlbXG4gICAgICAgIFwiRU5WXCJcbiAgICAgIF07XG4gICAgfSBlbHNlIHtcbiAgICAgIGVudiA9IGdsb2JhbFRoaXMucHJvY2Vzcy5lbnY7XG4gICAgICBrID0gdG9FTlZGb3JtYXQoayk7XG4gICAgfVxuICAgIHJldHVybiBlbnZba107XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEV4cGFuZHMgYW4gb2JqZWN0IGludG8gdGhlIGVudmlyb25tZW50XG4gICAqIEBzdW1tYXJ5IERlZmluZXMgcHJvcGVydGllcyBvbiB0aGUgZW52aXJvbm1lbnQgb2JqZWN0IHRoYXQgY2FuIGJlIGFjY2Vzc2VkIGFzIGdldHRlcnMgYW5kIHNldHRlcnNcbiAgICogQHRlbXBsYXRlIFYgLSBUeXBlIG9mIHRoZSBvYmplY3QgYmVpbmcgZXhwYW5kZWRcbiAgICogQHBhcmFtIHtWfSB2YWx1ZSAtIFRoZSBvYmplY3QgdG8gZXhwYW5kIGludG8gdGhlIGVudmlyb25tZW50XG4gICAqIEByZXR1cm4ge3ZvaWR9XG4gICAqL1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgZXhwYW5kPFYgZXh0ZW5kcyBvYmplY3Q+KHZhbHVlOiBWKTogdm9pZCB7XG4gICAgT2JqZWN0LmVudHJpZXModmFsdWUpLmZvckVhY2goKFtrLCB2XSkgPT4ge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIGssIHtcbiAgICAgICAgZ2V0OiAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgZnJvbUVudiA9IHRoaXMuZnJvbUVudihrKTtcbiAgICAgICAgICByZXR1cm4gdHlwZW9mIGZyb21FbnYgPT09IFwidW5kZWZpbmVkXCIgPyB2IDogZnJvbUVudjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiAodmFsOiBWW2tleW9mIFZdKSA9PiB7XG4gICAgICAgICAgdiA9IHZhbDtcbiAgICAgICAgfSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQHByb3RlY3RlZFxuICAgKiBAc3RhdGljXG4gICAqIEBkZXNjcmlwdGlvbiBSZXRyaWV2ZXMgb3IgY3JlYXRlcyB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBFbnZpcm9ubWVudCBjbGFzcy5cbiAgICogQHN1bW1hcnkgRW5zdXJlcyBvbmx5IG9uZSBpbnN0YW5jZSBvZiB0aGUgRW52aXJvbm1lbnQgY2xhc3MgZXhpc3RzLlxuICAgKiBAdGVtcGxhdGUgRVxuICAgKiBAcGFyYW0gey4uLnVua25vd25bXX0gYXJncyAtIEFyZ3VtZW50cyB0byBwYXNzIHRvIHRoZSBmYWN0b3J5IGZ1bmN0aW9uIGlmIGEgbmV3IGluc3RhbmNlIGlzIGNyZWF0ZWQuXG4gICAqIEByZXR1cm4ge0V9IFRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIEVudmlyb25tZW50IGNsYXNzLlxuICAgKi9cbiAgcHJvdGVjdGVkIHN0YXRpYyBpbnN0YW5jZTxFIGV4dGVuZHMgRW52aXJvbm1lbnQ8YW55Pj4oLi4uYXJnczogdW5rbm93bltdKTogRSB7XG4gICAgRW52aXJvbm1lbnQuX2luc3RhbmNlID0gIUVudmlyb25tZW50Ll9pbnN0YW5jZVxuICAgICAgPyBFbnZpcm9ubWVudC5mYWN0b3J5KC4uLmFyZ3MpXG4gICAgICA6IEVudmlyb25tZW50Ll9pbnN0YW5jZTtcbiAgICByZXR1cm4gRW52aXJvbm1lbnQuX2luc3RhbmNlIGFzIEU7XG4gIH1cblxuICAvKipcbiAgICogQHN0YXRpY1xuICAgKiBAZGVzY3JpcHRpb24gQWNjdW11bGF0ZXMgdGhlIGdpdmVuIHZhbHVlIGludG8gdGhlIGVudmlyb25tZW50LlxuICAgKiBAc3VtbWFyeSBBZGRzIG5ldyBwcm9wZXJ0aWVzIHRvIHRoZSBlbnZpcm9ubWVudCBmcm9tIHRoZSBwcm92aWRlZCBvYmplY3QuXG4gICAqIEB0ZW1wbGF0ZSBWXG4gICAqIEBwYXJhbSB7Vn0gdmFsdWUgLSBUaGUgb2JqZWN0IHRvIGFjY3VtdWxhdGUgaW50byB0aGUgZW52aXJvbm1lbnQuXG4gICAqIEByZXR1cm4ge1Z9IFRoZSB1cGRhdGVkIGVudmlyb25tZW50IGluc3RhbmNlLlxuICAgKi9cbiAgc3RhdGljIGFjY3VtdWxhdGU8ViBleHRlbmRzIG9iamVjdD4oXG4gICAgdmFsdWU6IFZcbiAgKTogdHlwZW9mIEVudmlyb25tZW50Ll9pbnN0YW5jZSAmXG4gICAgViAmXG4gICAgT2JqZWN0QWNjdW11bGF0b3I8dHlwZW9mIEVudmlyb25tZW50Ll9pbnN0YW5jZSAmIFY+IHtcbiAgICBjb25zdCBpbnN0YW5jZSA9IEVudmlyb25tZW50Lmluc3RhbmNlKCk7XG4gICAgcmV0dXJuIGluc3RhbmNlLmFjY3VtdWxhdGUodmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBzdGF0aWNcbiAgICogQGRlc2NyaXB0aW9uIFJldHJpZXZlcyB0aGUga2V5cyBvZiB0aGUgZW52aXJvbm1lbnQsIG9wdGlvbmFsbHkgY29udmVydGluZyB0aGVtIHRvIEVOViBmb3JtYXQuXG4gICAqIEBzdW1tYXJ5IEdldHMgYWxsIGtleXMgaW4gdGhlIGVudmlyb25tZW50LCB3aXRoIGFuIG9wdGlvbiB0byBmb3JtYXQgdGhlbSBmb3IgZW52aXJvbm1lbnQgdmFyaWFibGVzLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFt0b0Vudj10cnVlXSAtIFdoZXRoZXIgdG8gY29udmVydCB0aGUga2V5cyB0byBFTlYgZm9ybWF0LlxuICAgKiBAcmV0dXJuIHtzdHJpbmdbXX0gQW4gYXJyYXkgb2Yga2V5cyBmcm9tIHRoZSBlbnZpcm9ubWVudC5cbiAgICovXG4gIHN0YXRpYyBrZXlzKHRvRW52OiBib29sZWFuID0gdHJ1ZSk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gRW52aXJvbm1lbnQuaW5zdGFuY2UoKVxuICAgICAgLmtleXMoKVxuICAgICAgLm1hcCgoaykgPT4gKHRvRW52ID8gdG9FTlZGb3JtYXQoaykgOiBrKSk7XG4gIH1cbn1cbiIsImltcG9ydCB7IFBhcnNlQXJnc1Jlc3VsdCB9IGZyb20gXCIuLi9pbnB1dC90eXBlc1wiO1xuaW1wb3J0IHsgQ29tbWFuZE9wdGlvbnMgfSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IHsgVXNlcklucHV0IH0gZnJvbSBcIi4uL2lucHV0L2lucHV0XCI7XG5pbXBvcnQgeyBEZWZhdWx0Q29tbWFuZE9wdGlvbnMsIERlZmF1bHRDb21tYW5kVmFsdWVzIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBnZXREZXBlbmRlbmNpZXMsIGdldFBhY2thZ2VWZXJzaW9uIH0gZnJvbSBcIi4uL3V0aWxzL2ZzXCI7XG5pbXBvcnQgeyBwcmludEJhbm5lciB9IGZyb20gXCIuLi9vdXRwdXQvY29tbW9uXCI7XG5pbXBvcnQgeyBFbnZpcm9ubWVudCB9IGZyb20gXCIuLi91dGlscy9lbnZpcm9ubWVudFwiO1xuaW1wb3J0IHtcbiAgRGVmYXVsdExvZ2dpbmdDb25maWcsXG4gIExvZ2dlcixcbiAgTG9nZ2luZyxcbiAgTG9nZ2luZ0NvbmZpZyxcbiAgTG9nTGV2ZWwsXG59IGZyb20gXCJAZGVjYWYtdHMvbG9nZ2luZ1wiO1xuXG4vKipcbiAqIEBjbGFzcyBDb21tYW5kXG4gKiBAYWJzdHJhY3RcbiAqIEB0ZW1wbGF0ZSBJIC0gVGhlIHR5cGUgb2YgaW5wdXQgb3B0aW9ucyBmb3IgdGhlIGNvbW1hbmQuXG4gKiBAdGVtcGxhdGUgUiAtIFRoZSByZXR1cm4gdHlwZSBvZiB0aGUgY29tbWFuZCBleGVjdXRpb24uXG4gKiBAbWVtYmVyT2YgbW9kdWxlOnV0aWxzXG4gKiBAZGVzY3JpcHRpb24gQWJzdHJhY3QgYmFzZSBjbGFzcyBmb3IgY29tbWFuZCBpbXBsZW1lbnRhdGlvbi5cbiAqIEBzdW1tYXJ5IFByb3ZpZGVzIGEgc3RydWN0dXJlIGZvciBjcmVhdGluZyBjb21tYW5kLWxpbmUgaW50ZXJmYWNlIGNvbW1hbmRzIHdpdGggaW5wdXQgaGFuZGxpbmcsIGxvZ2dpbmcsIGFuZCBleGVjdXRpb24gZmxvdy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBjb21tYW5kLlxuICogQHBhcmFtIHtDb21tYW5kT3B0aW9uczxJPn0gW2lucHV0c10gLSBUaGUgaW5wdXQgb3B0aW9ucyBmb3IgdGhlIGNvbW1hbmQuXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBbcmVxdWlyZW1lbnRzXSAtIFRoZSBsaXN0IG9mIHJlcXVpcmVkIGRlcGVuZGVuY2llcyBmb3IgdGhlIGNvbW1hbmQuXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBDb21tYW5kPEksIFI+IHtcbiAgLyoqXG4gICAqIEBzdGF0aWNcbiAgICogQGRlc2NyaXB0aW9uIFN0YXRpYyBsb2dnZXIgZm9yIHRoZSBDb21tYW5kIGNsYXNzLlxuICAgKiBAdHlwZSB7TG9nZ2VyfVxuICAgKi9cbiAgc3RhdGljIGxvZzogTG9nZ2VyO1xuXG4gIC8qKlxuICAgKiBAcHJvdGVjdGVkXG4gICAqIEBkZXNjcmlwdGlvbiBJbnN0YW5jZSBsb2dnZXIgZm9yIHRoZSBjb21tYW5kLlxuICAgKiBAdHlwZSB7TG9nZ2VyfVxuICAgKi9cbiAgcHJvdGVjdGVkIGxvZzogTG9nZ2VyO1xuXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgbmFtZTogc3RyaW5nLFxuICAgIHByb3RlY3RlZCBpbnB1dHM6IENvbW1hbmRPcHRpb25zPEk+ID0ge30gYXMgdW5rbm93biBhcyBDb21tYW5kT3B0aW9uczxJPixcbiAgICBwcm90ZWN0ZWQgcmVxdWlyZW1lbnRzOiBzdHJpbmdbXSA9IFtdXG4gICkge1xuICAgIGlmICghQ29tbWFuZC5sb2cpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb21tYW5kLCBcImxvZ1wiLCB7XG4gICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgdmFsdWU6IExvZ2dpbmcuZm9yKENvbW1hbmQubmFtZSksXG4gICAgICB9KTtcbiAgICAgIHRoaXMubG9nID0gQ29tbWFuZC5sb2c7XG4gICAgfVxuICAgIHRoaXMubG9nID0gQ29tbWFuZC5sb2cuZm9yKHRoaXMubmFtZSk7XG4gICAgdGhpcy5pbnB1dHMgPSBPYmplY3QuYXNzaWduKFxuICAgICAge30sXG4gICAgICBEZWZhdWx0Q29tbWFuZE9wdGlvbnMsXG4gICAgICBpbnB1dHNcbiAgICApIGFzIENvbW1hbmRPcHRpb25zPEk+O1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcm90ZWN0ZWRcbiAgICogQGFzeW5jXG4gICAqIEBkZXNjcmlwdGlvbiBDaGVja3MgaWYgYWxsIHJlcXVpcmVkIGRlcGVuZGVuY2llcyBhcmUgcHJlc2VudC5cbiAgICogQHN1bW1hcnkgUmV0cmlldmVzIHRoZSBsaXN0IG9mIGRlcGVuZGVuY2llcyBhbmQgY29tcGFyZXMgaXQgYWdhaW5zdCB0aGUgcmVxdWlyZWQgZGVwZW5kZW5jaWVzIGZvciB0aGUgY29tbWFuZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGNoZWNrIGlzIGNvbXBsZXRlLlxuICAgKlxuICAgKiBAbWVybWFpZFxuICAgKiBzZXF1ZW5jZURpYWdyYW1cbiAgICogICBwYXJ0aWNpcGFudCBDb21tYW5kXG4gICAqICAgcGFydGljaXBhbnQgZ2V0RGVwZW5kZW5jaWVzXG4gICAqICAgcGFydGljaXBhbnQgU2V0XG4gICAqICAgQ29tbWFuZC0+PmdldERlcGVuZGVuY2llczogQ2FsbFxuICAgKiAgIGdldERlcGVuZGVuY2llcy0tPj5Db21tYW5kOiBSZXR1cm4ge3Byb2QsIGRldiwgcGVlcn1cbiAgICogICBDb21tYW5kLT4+U2V0OiBDcmVhdGUgU2V0IGZyb20gcHJvZCwgZGV2LCBwZWVyXG4gICAqICAgU2V0LS0+PkNvbW1hbmQ6IFJldHVybiB1bmlxdWUgZGVwZW5kZW5jaWVzXG4gICAqICAgQ29tbWFuZC0+PkNvbW1hbmQ6IENvbXBhcmUgYWdhaW5zdCByZXF1aXJlbWVudHNcbiAgICogICBhbHQgTWlzc2luZyBkZXBlbmRlbmNpZXNcbiAgICogICAgIENvbW1hbmQtPj5Db21tYW5kOiBBZGQgdG8gbWlzc2luZyBsaXN0XG4gICAqICAgZW5kXG4gICAqICAgTm90ZSBvdmVyIENvbW1hbmQ6IElmIG1pc3NpbmcubGVuZ3RoID4gMCwgaGFuZGxlIG1pc3NpbmcgZGVwZW5kZW5jaWVzXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgY2hlY2tSZXF1aXJlbWVudHMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBwcm9kLCBkZXYsIHBlZXIgfSA9IGF3YWl0IGdldERlcGVuZGVuY2llcygpO1xuICAgIGNvbnN0IG1pc3NpbmcgPSBbXTtcbiAgICBjb25zdCBmdWxsTGlzdCA9IEFycmF5LmZyb20oXG4gICAgICBuZXcgU2V0KFsuLi5wcm9kLCAuLi5kZXYsIC4uLnBlZXJdKS52YWx1ZXMoKVxuICAgICkubWFwKChkKSA9PiBkLm5hbWUpO1xuICAgIGZvciAoY29uc3QgZGVwIG9mIHRoaXMucmVxdWlyZW1lbnRzKVxuICAgICAgaWYgKCFmdWxsTGlzdC5pbmNsdWRlcyhkZXApKSBtaXNzaW5nLnB1c2goZGVwKTtcblxuICAgIGlmICghbWlzc2luZy5sZW5ndGgpIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJvdGVjdGVkXG4gICAqIEBkZXNjcmlwdGlvbiBQcm92aWRlcyBoZWxwIGluZm9ybWF0aW9uIGZvciB0aGUgY29tbWFuZC5cbiAgICogQHN1bW1hcnkgVGhpcyBtZXRob2Qgc2hvdWxkIGJlIG92ZXJyaWRkZW4gaW4gZGVyaXZlZCBjbGFzc2VzIHRvIHByb3ZpZGUgc3BlY2lmaWMgaGVscCBpbmZvcm1hdGlvbi5cbiAgICogQHBhcmFtIHtQYXJzZUFyZ3NSZXN1bHR9IGFyZ3MgLSBUaGUgcGFyc2VkIGNvbW1hbmQtbGluZSBhcmd1bWVudHMuXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBwcm90ZWN0ZWQgaGVscChhcmdzOiBQYXJzZUFyZ3NSZXN1bHQpOiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5sb2cuaW5mbyhcbiAgICAgIGBUaGlzIGlzIGhlbHAuIEknbSBubyB1c2UgYmVjYXVzZSBJIHNob3VsZCBoYXZlIGJlZW4gb3ZlcnJpZGRlbi5gXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJvdGVjdGVkXG4gICAqIEBhYnN0cmFjdFxuICAgKiBAZGVzY3JpcHRpb24gUnVucyB0aGUgY29tbWFuZCB3aXRoIHRoZSBwcm92aWRlZCBhcmd1bWVudHMuXG4gICAqIEBzdW1tYXJ5IFRoaXMgbWV0aG9kIHNob3VsZCBiZSBpbXBsZW1lbnRlZCBpbiBkZXJpdmVkIGNsYXNzZXMgdG8gZGVmaW5lIHRoZSBjb21tYW5kJ3MgYmVoYXZpb3IuXG4gICAqIEBwYXJhbSB7UGFyc2VBcmdzUmVzdWx0fSBhbnN3ZXJzIC0gVGhlIHBhcnNlZCBjb21tYW5kLWxpbmUgYXJndW1lbnRzLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxSIHwgc3RyaW5nIHwgdm9pZD59IEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGNvbW1hbmQncyByZXN1bHQuXG4gICAqL1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgcnVuPFI+KFxuICAgIGFuc3dlcnM6IExvZ2dpbmdDb25maWcgJlxuICAgICAgdHlwZW9mIERlZmF1bHRDb21tYW5kVmFsdWVzICYgeyBbayBpbiBrZXlvZiBJXTogdW5rbm93biB9XG4gICk6IFByb21pc2U8UiB8IHN0cmluZyB8IHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBAYXN5bmNcbiAgICogQGRlc2NyaXB0aW9uIEV4ZWN1dGVzIHRoZSBjb21tYW5kLlxuICAgKiBAc3VtbWFyeSBUaGlzIG1ldGhvZCBoYW5kbGVzIHRoZSBvdmVyYWxsIGV4ZWN1dGlvbiBmbG93IG9mIHRoZSBjb21tYW5kLCBpbmNsdWRpbmcgcGFyc2luZyBhcmd1bWVudHMsXG4gICAqIHNldHRpbmcgdXAgbG9nZ2luZywgY2hlY2tpbmcgZm9yIHZlcnNpb24gb3IgaGVscCByZXF1ZXN0cywgYW5kIHJ1bm5pbmcgdGhlIGNvbW1hbmQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFIgfCBzdHJpbmcgfCB2b2lkPn0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgY29tbWFuZCdzIHJlc3VsdC5cbiAgICpcbiAgICogQG1lcm1haWRcbiAgICogc2VxdWVuY2VEaWFncmFtXG4gICAqICAgcGFydGljaXBhbnQgQ29tbWFuZFxuICAgKiAgIHBhcnRpY2lwYW50IFVzZXJJbnB1dFxuICAgKiAgIHBhcnRpY2lwYW50IExvZ2dpbmdcbiAgICogICBwYXJ0aWNpcGFudCBnZXRQYWNrYWdlVmVyc2lvblxuICAgKiAgIHBhcnRpY2lwYW50IHByaW50QmFubmVyXG4gICAqICAgQ29tbWFuZC0+PlVzZXJJbnB1dDogcGFyc2VBcmdzKGlucHV0cylcbiAgICogICBVc2VySW5wdXQtLT4+Q29tbWFuZDogUmV0dXJuIFBhcnNlQXJnc1Jlc3VsdFxuICAgKiAgIENvbW1hbmQtPj5Db21tYW5kOiBQcm9jZXNzIG9wdGlvbnNcbiAgICogICBDb21tYW5kLT4+TG9nZ2luZzogc2V0Q29uZmlnKG9wdGlvbnMpXG4gICAqICAgYWx0IHZlcnNpb24gcmVxdWVzdGVkXG4gICAqICAgICBDb21tYW5kLT4+Z2V0UGFja2FnZVZlcnNpb246IENhbGxcbiAgICogICAgIGdldFBhY2thZ2VWZXJzaW9uLS0+PkNvbW1hbmQ6IFJldHVybiB2ZXJzaW9uXG4gICAqICAgZWxzZSBoZWxwIHJlcXVlc3RlZFxuICAgKiAgICAgQ29tbWFuZC0+PkNvbW1hbmQ6IGhlbHAoYXJncylcbiAgICogICBlbHNlIGJhbm5lciByZXF1ZXN0ZWRcbiAgICogICAgIENvbW1hbmQtPj5wcmludEJhbm5lcjogQ2FsbFxuICAgKiAgIGVuZFxuICAgKiAgIENvbW1hbmQtPj5Db21tYW5kOiBydW4oYXJncylcbiAgICogICBhbHQgZXJyb3Igb2NjdXJzXG4gICAqICAgICBDb21tYW5kLT4+Q29tbWFuZDogTG9nIGVycm9yXG4gICAqICAgZW5kXG4gICAqICAgQ29tbWFuZC0tPj5Db21tYW5kOiBSZXR1cm4gcmVzdWx0XG4gICAqL1xuICBhc3luYyBleGVjdXRlKCk6IFByb21pc2U8UiB8IHN0cmluZyB8IHZvaWQ+IHtcbiAgICBjb25zdCBhcmdzOiBQYXJzZUFyZ3NSZXN1bHQgPSBVc2VySW5wdXQucGFyc2VBcmdzKHRoaXMuaW5wdXRzKTtcbiAgICBjb25zdCBlbnYgPSBFbnZpcm9ubWVudC5hY2N1bXVsYXRlKERlZmF1bHRMb2dnaW5nQ29uZmlnKVxuICAgICAgLmFjY3VtdWxhdGUoRGVmYXVsdENvbW1hbmRWYWx1ZXMpXG4gICAgICAuYWNjdW11bGF0ZShhcmdzLnZhbHVlcyk7XG4gICAgY29uc3QgeyB0aW1lc3RhbXAsIHZlcmJvc2UsIHZlcnNpb24sIGhlbHAsIGxvZ0xldmVsLCBsb2dTdHlsZSwgYmFubmVyIH0gPVxuICAgICAgZW52O1xuXG4gICAgdGhpcy5sb2cuc2V0Q29uZmlnKHtcbiAgICAgIC4uLmVudixcbiAgICAgIHRpbWVzdGFtcDogISF0aW1lc3RhbXAsXG4gICAgICBsZXZlbDogbG9nTGV2ZWwgYXMgTG9nTGV2ZWwsXG4gICAgICBzdHlsZTogISFsb2dTdHlsZSxcbiAgICAgIHZlcmJvc2U6ICh2ZXJib3NlIGFzIG51bWJlcikgfHwgMCxcbiAgICB9KTtcblxuICAgIGlmICh2ZXJzaW9uKSB7XG4gICAgICByZXR1cm4gZ2V0UGFja2FnZVZlcnNpb24oKTtcbiAgICB9XG5cbiAgICBpZiAoaGVscCkge1xuICAgICAgcmV0dXJuIHRoaXMuaGVscChhcmdzKTtcbiAgICB9XG5cbiAgICBpZiAoYmFubmVyKVxuICAgICAgcHJpbnRCYW5uZXIoXG4gICAgICAgIHRoaXMubG9nLmZvcihwcmludEJhbm5lciwge1xuICAgICAgICAgIHRpbWVzdGFtcDogZmFsc2UsXG4gICAgICAgICAgc3R5bGU6IGZhbHNlLFxuICAgICAgICAgIGNvbnRleHQ6IGZhbHNlLFxuICAgICAgICAgIGxvZ0xldmVsOiBmYWxzZSxcbiAgICAgICAgfSlcbiAgICAgICk7XG5cbiAgICBsZXQgcmVzdWx0O1xuICAgIHRyeSB7XG4gICAgICByZXN1bHQgPSBhd2FpdCB0aGlzLnJ1bihlbnYpO1xuICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgIHRoaXMubG9nLmVycm9yKGBFcnJvciB3aGlsZSBydW5uaW5nIHByb3ZpZGVkIGNsaSBmdW5jdGlvbjogJHtlfWApO1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0IGFzIFI7XG4gIH1cbn1cbiIsImltcG9ydCBodHRwcyBmcm9tIFwiaHR0cHNcIjtcbmltcG9ydCB7IExvZ2dpbmcgfSBmcm9tIFwiQGRlY2FmLXRzL2xvZ2dpbmdcIjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQSBzaW1wbGUgSFRUUCBjbGllbnQgZm9yIGRvd25sb2FkaW5nIGZpbGVzLlxuICogQHN1bW1hcnkgVGhpcyBjbGFzcyBwcm92aWRlcyBmdW5jdGlvbmFsaXR5IHRvIGRvd25sb2FkIGZpbGVzIGZyb20gSFRUUFMgVVJMcy5cbiAqIEl0IHVzZXMgTm9kZS5qcyBidWlsdC1pbiBodHRwcyBtb2R1bGUgdG8gbWFrZSByZXF1ZXN0cy5cbiAqXG4gKiBAY2xhc3MgSHR0cENsaWVudFxuICovXG5leHBvcnQgY2xhc3MgSHR0cENsaWVudCB7XG4gIHByb3RlY3RlZCBzdGF0aWMgbG9nID0gTG9nZ2luZy5mb3IoSHR0cENsaWVudCk7XG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gRG93bmxvYWRzIGEgZmlsZSBmcm9tIGEgZ2l2ZW4gVVJMLlxuICAgKiBAc3VtbWFyeSBUaGlzIG1ldGhvZCBzZW5kcyBhIEdFVCByZXF1ZXN0IHRvIHRoZSBzcGVjaWZpZWQgVVJMIGFuZCByZXR1cm5zIHRoZSByZXNwb25zZSBib2R5IGFzIGEgc3RyaW5nLlxuICAgKiBJdCBoYW5kbGVzIGRpZmZlcmVudCBzY2VuYXJpb3Mgc3VjaCBhcyBub24tMjAwIHN0YXR1cyBjb2RlcyBhbmQgbmV0d29yayBlcnJvcnMuXG4gICAqXG4gICAqIEBwYXJhbSB1cmwgLSBUaGUgVVJMIG9mIHRoZSBmaWxlIHRvIGRvd25sb2FkLlxuICAgKiBAcmV0dXJuIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGZpbGUgY29udGVudCBhcyBhIHN0cmluZy5cbiAgICpcbiAgICogQG1lcm1haWRcbiAgICogc2VxdWVuY2VEaWFncmFtXG4gICAqICAgcGFydGljaXBhbnQgQ2xpZW50XG4gICAqICAgcGFydGljaXBhbnQgSHR0cENsaWVudFxuICAgKiAgIHBhcnRpY2lwYW50IEhUVFBTXG4gICAqICAgcGFydGljaXBhbnQgU2VydmVyXG4gICAqICAgQ2xpZW50LT4+SHR0cENsaWVudDogZG93bmxvYWRGaWxlKHVybClcbiAgICogICBIdHRwQ2xpZW50LT4+SFRUUFM6IGdldCh1cmwpXG4gICAqICAgSFRUUFMtPj5TZXJ2ZXI6IEdFVCByZXF1ZXN0XG4gICAqICAgU2VydmVyLS0+PkhUVFBTOiBSZXNwb25zZVxuICAgKiAgIEhUVFBTLS0+Pkh0dHBDbGllbnQ6IFJlc3BvbnNlIG9iamVjdFxuICAgKiAgIGFsdCBTdGF0dXMgY29kZSBpcyAyMDBcbiAgICogICAgIGxvb3AgRm9yIGVhY2ggZGF0YSBjaHVua1xuICAgKiAgICAgICBIVFRQUy0+Pkh0dHBDbGllbnQ6ICdkYXRhJyBldmVudFxuICAgKiAgICAgICBIdHRwQ2xpZW50LT4+SHR0cENsaWVudDogQWNjdW11bGF0ZSBkYXRhXG4gICAqICAgICBlbmRcbiAgICogICAgIEhUVFBTLT4+SHR0cENsaWVudDogJ2VuZCcgZXZlbnRcbiAgICogICAgIEh0dHBDbGllbnQtLT4+Q2xpZW50OiBSZXNvbHZlIHdpdGggZGF0YVxuICAgKiAgIGVsc2UgU3RhdHVzIGNvZGUgaXMgbm90IDIwMFxuICAgKiAgICAgSHR0cENsaWVudC0tPj5DbGllbnQ6IFJlamVjdCB3aXRoIGVycm9yXG4gICAqICAgZW5kXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgZG93bmxvYWRGaWxlKHVybDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8c3RyaW5nPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBmdW5jdGlvbiByZXF1ZXN0KHVybDogc3RyaW5nKSB7XG4gICAgICAgIHVybCA9IGVuY29kZVVSSSh1cmwpO1xuICAgICAgICBodHRwcy5nZXQodXJsLCAocmVzKSA9PiB7XG4gICAgICAgICAgaWYgKHJlcy5zdGF0dXNDb2RlID09PSAzMDEgfHwgcmVzLnN0YXR1c0NvZGUgPT09IDMwNylcbiAgICAgICAgICAgIHJldHVybiByZXF1ZXN0KHJlcy5oZWFkZXJzLmxvY2F0aW9uIGFzIHN0cmluZyk7XG5cbiAgICAgICAgICBpZiAocmVzLnN0YXR1c0NvZGUgIT09IDIwMCkge1xuICAgICAgICAgICAgSHR0cENsaWVudC5sb2cuZXJyb3IoXG4gICAgICAgICAgICAgIGBGYWlsZWQgdG8gZmV0Y2ggJHt1cmx9IChzdGF0dXM6ICR7cmVzLnN0YXR1c0NvZGV9KWBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBFcnJvcihgRmFpbGVkIHRvIGZldGNoICR7dXJsfWApKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbGV0IGRhdGEgPSBcIlwiO1xuICAgICAgICAgIHJlcy5vbihcImRhdGFcIiwgKGNodW5rKSA9PiB7XG4gICAgICAgICAgICBkYXRhICs9IGNodW5rO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJlcy5vbihcImVycm9yXCIsIChlcnJvcikgPT4ge1xuICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHJlcy5vbihcImVuZFwiLCAoKSA9PiB7XG4gICAgICAgICAgICByZXNvbHZlKGRhdGEpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJlcXVlc3QodXJsKTtcbiAgICB9KTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gXCIuLi9jb21tYW5kXCI7XG5pbXBvcnQgeyBDb21tYW5kT3B0aW9ucyB9IGZyb20gXCIuLi90eXBlc1wiO1xuaW1wb3J0IHsgRGVmYXVsdENvbW1hbmRPcHRpb25zLCBEZWZhdWx0Q29tbWFuZFZhbHVlcyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7XG4gIGNvcHlGaWxlLFxuICBkZWxldGVQYXRoLFxuICBnZXRBbGxGaWxlcyxcbiAgZ2V0UGFja2FnZSxcbiAgcGF0Y2hGaWxlLFxuICByZWFkRmlsZSxcbiAgcmVuYW1lRmlsZSxcbiAgcnVuQ29tbWFuZCxcbiAgd3JpdGVGaWxlLFxufSBmcm9tIFwiLi4vLi4vdXRpbHNcIjtcbmltcG9ydCBmcyBmcm9tIFwiZnNcIjtcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBJbnB1dE9wdGlvbnMsIE91dHB1dE9wdGlvbnMsIHJvbGx1cCwgUm9sbHVwQnVpbGQgfSBmcm9tIFwicm9sbHVwXCI7XG5pbXBvcnQgdHlwZXNjcmlwdCBmcm9tIFwiQHJvbGx1cC9wbHVnaW4tdHlwZXNjcmlwdFwiO1xuaW1wb3J0IGNvbW1vbmpzIGZyb20gXCJAcm9sbHVwL3BsdWdpbi1jb21tb25qc1wiO1xuaW1wb3J0IHsgbm9kZVJlc29sdmUgfSBmcm9tIFwiQHJvbGx1cC9wbHVnaW4tbm9kZS1yZXNvbHZlXCI7XG5pbXBvcnQganNvbiBmcm9tIFwiQHJvbGx1cC9wbHVnaW4tanNvblwiO1xuaW1wb3J0IHsgTG9nZ2luZ0NvbmZpZyB9IGZyb20gXCJAZGVjYWYtdHMvbG9nZ2luZ1wiO1xuaW1wb3J0ICogYXMgdHMgZnJvbSBcInR5cGVzY3JpcHRcIjtcbmltcG9ydCB7IERpYWdub3N0aWMsIEVtaXRSZXN1bHQsIE1vZHVsZUtpbmQsIFNvdXJjZUZpbGUgfSBmcm9tIFwidHlwZXNjcmlwdFwiO1xuXG5jb25zdCBWRVJTSU9OX1NUUklORyA9IFwiIyNWRVJTSU9OIyNcIjtcblxuZW51bSBNb2RlcyB7XG4gIENKUyA9IFwiY29tbW9uanNcIixcbiAgRVNNID0gXCJlczIwMjJcIixcbn1cblxuZW51bSBCdWlsZE1vZGUge1xuICBCVUlMRCA9IFwiYnVpbGRcIixcbiAgQlVORExFID0gXCJidW5kbGVcIixcbiAgQUxMID0gXCJhbGxcIixcbn1cblxuY29uc3QgQ29tbWFuZHMgPSBbXCJ1cGRhdGUtc2NyaXB0c1wiLCBcInRhZy1yZWxlYXNlXCIsIFwiYnVpbGQtc2NyaXB0c1wiXTtcblxuY29uc3Qgb3B0aW9ucyA9IHtcbiAgcHJvZDoge1xuICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgIGRlZmF1bHQ6IGZhbHNlLFxuICB9LFxuICBkZXY6IHtcbiAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgICBkZWZhdWx0OiBmYWxzZSxcbiAgfSxcbiAgYnVpbGRNb2RlOiB7XG4gICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICBkZWZhdWx0OiBCdWlsZE1vZGUuQUxMLFxuICB9LFxuICBkb2NzOiB7XG4gICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgZGVmYXVsdDogZmFsc2UsXG4gIH0sXG4gIGNvbW1hbmRzOiB7XG4gICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgZGVmYXVsdDogZmFsc2UsXG4gIH0sXG4gIGJhbm5lcjoge1xuICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgIGRlZmF1bHQ6IGZhbHNlLFxuICB9LFxufTtcblxuY29uc3QgY2pzMlRyYW5zZm9ybWVyID0gKGV4dCA9IFwiLmNqc1wiKSA9PiB7XG4gIGNvbnN0IGxvZyA9IEJ1aWxkU2NyaXB0cy5sb2cuZm9yKGNqczJUcmFuc2Zvcm1lcik7XG4gIGNvbnN0IHJlc29sdXRpb25DYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG5cbiAgcmV0dXJuICh0cmFuc2Zvcm1hdGlvbkNvbnRleHQ6IHRzLlRyYW5zZm9ybWF0aW9uQ29udGV4dCkgPT4ge1xuICAgIHJldHVybiAoc291cmNlRmlsZTogdHMuU291cmNlRmlsZSkgPT4ge1xuICAgICAgY29uc3Qgc291cmNlRGlyID0gcGF0aC5kaXJuYW1lKHNvdXJjZUZpbGUuZmlsZU5hbWUpO1xuXG4gICAgICBmdW5jdGlvbiByZXNvbHZlUGF0aChpbXBvcnRQYXRoOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgY2FjaGVLZXkgPSBKU09OLnN0cmluZ2lmeShbc291cmNlRGlyLCBpbXBvcnRQYXRoXSk7XG4gICAgICAgIGNvbnN0IGNhY2hlZFZhbHVlID0gcmVzb2x1dGlvbkNhY2hlLmdldChjYWNoZUtleSk7XG4gICAgICAgIGlmIChjYWNoZWRWYWx1ZSAhPSBudWxsKSByZXR1cm4gY2FjaGVkVmFsdWU7XG5cbiAgICAgICAgbGV0IHJlc29sdmVkUGF0aCA9IGltcG9ydFBhdGg7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmVzb2x2ZWRQYXRoID0gcGF0aC5yZXNvbHZlKHNvdXJjZURpciwgcmVzb2x2ZWRQYXRoICsgXCIudHNcIik7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gcmVzb2x2ZSBwYXRoICR7aW1wb3J0UGF0aH06ICR7ZXJyb3J9YCk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHN0YXQ7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgc3RhdCA9IGZzLnN0YXRTeW5jKHJlc29sdmVkUGF0aCk7XG4gICAgICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgbG9nLnZlcmJvc2UoXG4gICAgICAgICAgICAgIGBUZXN0aW5nIGV4aXN0ZW5jZSBvZiBwYXRoICR7cmVzb2x2ZWRQYXRofSBhcyBhIGZvbGRlciBkZWZhdWx0aW5nIHRvIGluZGV4IGZpbGVgXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgc3RhdCA9IGZzLnN0YXRTeW5jKHJlc29sdmVkUGF0aC5yZXBsYWNlKC9cXC50cyQvZ20sIFwiXCIpKTtcbiAgICAgICAgICB9IGNhdGNoIChlMjogdW5rbm93bikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICBgRmFpbGVkIHRvIHJlc29sdmUgcGF0aCAke2ltcG9ydFBhdGh9OiAke2V9LCAke2UyfWBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzdGF0LmlzRGlyZWN0b3J5KCkpXG4gICAgICAgICAgcmVzb2x2ZWRQYXRoID0gcmVzb2x2ZWRQYXRoLnJlcGxhY2UoL1xcLnRzJC9nbSwgXCIvaW5kZXgudHNcIik7XG5cbiAgICAgICAgaWYgKHBhdGguaXNBYnNvbHV0ZShyZXNvbHZlZFBhdGgpKSB7XG4gICAgICAgICAgY29uc3QgZXh0ZW5zaW9uID1cbiAgICAgICAgICAgICgvXFwudHN4PyQvLmV4ZWMocGF0aC5iYXNlbmFtZShyZXNvbHZlZFBhdGgpKSB8fCBbXSlbMF0gfHwgdm9pZCAwO1xuXG4gICAgICAgICAgcmVzb2x2ZWRQYXRoID1cbiAgICAgICAgICAgIFwiLi9cIiArXG4gICAgICAgICAgICBwYXRoLnJlbGF0aXZlKFxuICAgICAgICAgICAgICBzb3VyY2VEaXIsXG4gICAgICAgICAgICAgIHBhdGgucmVzb2x2ZShcbiAgICAgICAgICAgICAgICBwYXRoLmRpcm5hbWUocmVzb2x2ZWRQYXRoKSxcbiAgICAgICAgICAgICAgICBwYXRoLmJhc2VuYW1lKHJlc29sdmVkUGF0aCwgZXh0ZW5zaW9uKSArIGV4dFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzb2x1dGlvbkNhY2hlLnNldChjYWNoZUtleSwgcmVzb2x2ZWRQYXRoKTtcbiAgICAgICAgcmV0dXJuIHJlc29sdmVkUGF0aDtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gdmlzaXROb2RlKG5vZGU6IHRzLk5vZGUpOiB0cy5WaXNpdFJlc3VsdDx0cy5Ob2RlPiB7XG4gICAgICAgIGlmIChzaG91bGRNdXRhdGVNb2R1bGVTcGVjaWZpZXIobm9kZSkpIHtcbiAgICAgICAgICBpZiAodHMuaXNJbXBvcnREZWNsYXJhdGlvbihub2RlKSkge1xuICAgICAgICAgICAgY29uc3QgcmVzb2x2ZWRQYXRoID0gcmVzb2x2ZVBhdGgobm9kZS5tb2R1bGVTcGVjaWZpZXIudGV4dCk7XG4gICAgICAgICAgICBjb25zdCBuZXdNb2R1bGVTcGVjaWZpZXIgPVxuICAgICAgICAgICAgICB0cmFuc2Zvcm1hdGlvbkNvbnRleHQuZmFjdG9yeS5jcmVhdGVTdHJpbmdMaXRlcmFsKHJlc29sdmVkUGF0aCk7XG4gICAgICAgICAgICByZXR1cm4gdHJhbnNmb3JtYXRpb25Db250ZXh0LmZhY3RvcnkudXBkYXRlSW1wb3J0RGVjbGFyYXRpb24oXG4gICAgICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgICAgIG5vZGUubW9kaWZpZXJzLFxuICAgICAgICAgICAgICBub2RlLmltcG9ydENsYXVzZSxcbiAgICAgICAgICAgICAgbmV3TW9kdWxlU3BlY2lmaWVyLFxuICAgICAgICAgICAgICB1bmRlZmluZWRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIGlmICh0cy5pc0V4cG9ydERlY2xhcmF0aW9uKG5vZGUpKSB7XG4gICAgICAgICAgICBjb25zdCByZXNvbHZlZFBhdGggPSByZXNvbHZlUGF0aChub2RlLm1vZHVsZVNwZWNpZmllci50ZXh0KTtcbiAgICAgICAgICAgIGNvbnN0IG5ld01vZHVsZVNwZWNpZmllciA9XG4gICAgICAgICAgICAgIHRyYW5zZm9ybWF0aW9uQ29udGV4dC5mYWN0b3J5LmNyZWF0ZVN0cmluZ0xpdGVyYWwocmVzb2x2ZWRQYXRoKTtcbiAgICAgICAgICAgIHJldHVybiB0cmFuc2Zvcm1hdGlvbkNvbnRleHQuZmFjdG9yeS51cGRhdGVFeHBvcnREZWNsYXJhdGlvbihcbiAgICAgICAgICAgICAgbm9kZSxcbiAgICAgICAgICAgICAgbm9kZS5tb2RpZmllcnMsXG4gICAgICAgICAgICAgIG5vZGUuaXNUeXBlT25seSxcbiAgICAgICAgICAgICAgbm9kZS5leHBvcnRDbGF1c2UsXG4gICAgICAgICAgICAgIG5ld01vZHVsZVNwZWNpZmllcixcbiAgICAgICAgICAgICAgdW5kZWZpbmVkXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cy52aXNpdEVhY2hDaGlsZChub2RlLCB2aXNpdE5vZGUsIHRyYW5zZm9ybWF0aW9uQ29udGV4dCk7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIHNob3VsZE11dGF0ZU1vZHVsZVNwZWNpZmllcihub2RlOiB0cy5Ob2RlKTogbm9kZSBpcyAoXG4gICAgICAgIHwgdHMuSW1wb3J0RGVjbGFyYXRpb25cbiAgICAgICAgfCB0cy5FeHBvcnREZWNsYXJhdGlvblxuICAgICAgKSAmIHtcbiAgICAgICAgbW9kdWxlU3BlY2lmaWVyOiB0cy5TdHJpbmdMaXRlcmFsO1xuICAgICAgfSB7XG4gICAgICAgIGlmICghdHMuaXNJbXBvcnREZWNsYXJhdGlvbihub2RlKSAmJiAhdHMuaXNFeHBvcnREZWNsYXJhdGlvbihub2RlKSlcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgaWYgKG5vZGUubW9kdWxlU3BlY2lmaWVyID09PSB1bmRlZmluZWQpIHJldHVybiBmYWxzZTtcbiAgICAgICAgLy8gb25seSB3aGVuIG1vZHVsZSBzcGVjaWZpZXIgaXMgdmFsaWRcbiAgICAgICAgaWYgKCF0cy5pc1N0cmluZ0xpdGVyYWwobm9kZS5tb2R1bGVTcGVjaWZpZXIpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIC8vIG9ubHkgd2hlbiBwYXRoIGlzIHJlbGF0aXZlXG4gICAgICAgIGlmIChcbiAgICAgICAgICAhbm9kZS5tb2R1bGVTcGVjaWZpZXIudGV4dC5zdGFydHNXaXRoKFwiLi9cIikgJiZcbiAgICAgICAgICAhbm9kZS5tb2R1bGVTcGVjaWZpZXIudGV4dC5zdGFydHNXaXRoKFwiLi4vXCIpXG4gICAgICAgIClcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIC8vIG9ubHkgd2hlbiBtb2R1bGUgc3BlY2lmaWVyIGhhcyBubyBleHRlbnNpb25cbiAgICAgICAgaWYgKHBhdGguZXh0bmFtZShub2RlLm1vZHVsZVNwZWNpZmllci50ZXh0KSAhPT0gXCJcIikgcmV0dXJuIGZhbHNlO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRzLnZpc2l0Tm9kZShzb3VyY2VGaWxlLCB2aXNpdE5vZGUpIGFzIFNvdXJjZUZpbGU7XG4gICAgfTtcbiAgfTtcbn07XG5cbmV4cG9ydCBjbGFzcyBCdWlsZFNjcmlwdHMgZXh0ZW5kcyBDb21tYW5kPFxuICBDb21tYW5kT3B0aW9uczx0eXBlb2Ygb3B0aW9ucz4sXG4gIHZvaWRcbj4ge1xuICBwcml2YXRlIHJlcGxhY2VtZW50czogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICBwcml2YXRlIHJlYWRvbmx5IHBrZ1ZlcnNpb246IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBwa2dOYW1lOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXG4gICAgICBcIkJ1aWxkU2NyaXB0c1wiLFxuICAgICAgT2JqZWN0LmFzc2lnbih7fSwgRGVmYXVsdENvbW1hbmRPcHRpb25zLCBvcHRpb25zKSBhcyBDb21tYW5kT3B0aW9uczxcbiAgICAgICAgdHlwZW9mIG9wdGlvbnNcbiAgICAgID5cbiAgICApO1xuICAgIGNvbnN0IHBrZyA9IGdldFBhY2thZ2UoKSBhcyB7IG5hbWU6IHN0cmluZzsgdmVyc2lvbjogc3RyaW5nIH07XG4gICAgY29uc3QgeyBuYW1lLCB2ZXJzaW9uIH0gPSBwa2c7XG4gICAgdGhpcy5wa2dOYW1lID0gbmFtZS5pbmNsdWRlcyhcIkBcIikgPyBuYW1lLnNwbGl0KFwiL1wiKVsxXSA6IG5hbWU7XG4gICAgdGhpcy5wa2dWZXJzaW9uID0gdmVyc2lvbjtcbiAgICB0aGlzLnJlcGxhY2VtZW50c1tWRVJTSU9OX1NUUklOR10gPSB0aGlzLnBrZ1ZlcnNpb247XG4gIH1cblxuICBwYXRjaEZpbGVzKHA6IHN0cmluZykge1xuICAgIGNvbnN0IGxvZyA9IHRoaXMubG9nLmZvcih0aGlzLnBhdGNoRmlsZXMpO1xuICAgIGNvbnN0IHsgbmFtZSwgdmVyc2lvbiB9ID0gZ2V0UGFja2FnZSgpIGFzIGFueTtcbiAgICBsb2cuaW5mbyhgUGF0Y2hpbmcgJHtuYW1lfSAke3ZlcnNpb259IG1vZHVsZSBpbiAke3B9Li4uYCk7XG4gICAgY29uc3Qgc3RhdCA9IGZzLnN0YXRTeW5jKHApO1xuICAgIGlmIChzdGF0LmlzRGlyZWN0b3J5KCkpXG4gICAgICBmcy5yZWFkZGlyU3luYyhwLCB7IHdpdGhGaWxlVHlwZXM6IHRydWUsIHJlY3Vyc2l2ZTogdHJ1ZSB9KVxuICAgICAgICAuZmlsdGVyKChwKSA9PiBwLmlzRmlsZSgpKVxuICAgICAgICAuZm9yRWFjaCgoZmlsZSkgPT5cbiAgICAgICAgICBwYXRjaEZpbGUocGF0aC5qb2luKGZpbGUucGFyZW50UGF0aCwgZmlsZS5uYW1lKSwgdGhpcy5yZXBsYWNlbWVudHMpXG4gICAgICAgICk7XG4gICAgbG9nLnZlcmJvc2UoYE1vZHVsZSAke25hbWV9ICR7dmVyc2lvbn0gcGF0Y2hlZCBpbiAke3B9Li4uYCk7XG4gIH1cblxuICBwcml2YXRlIHJlcG9ydERpYWdub3N0aWNzKGRpYWdub3N0aWNzOiBEaWFnbm9zdGljW10pOiB2b2lkIHtcbiAgICBkaWFnbm9zdGljcy5mb3JFYWNoKChkaWFnbm9zdGljKSA9PiB7XG4gICAgICBsZXQgbWVzc2FnZSA9IFwiRXJyb3JcIjtcbiAgICAgIGlmIChkaWFnbm9zdGljLmZpbGUgJiYgZGlhZ25vc3RpYy5zdGFydCkge1xuICAgICAgICBjb25zdCB7IGxpbmUsIGNoYXJhY3RlciB9ID1cbiAgICAgICAgICBkaWFnbm9zdGljLmZpbGUuZ2V0TGluZUFuZENoYXJhY3Rlck9mUG9zaXRpb24oZGlhZ25vc3RpYy5zdGFydCk7XG4gICAgICAgIG1lc3NhZ2UgKz0gYCAke2RpYWdub3N0aWMuZmlsZS5maWxlTmFtZX0gKCR7bGluZSArIDF9LCR7Y2hhcmFjdGVyICsgMX0pYDtcbiAgICAgIH1cbiAgICAgIG1lc3NhZ2UgKz1cbiAgICAgICAgXCI6IFwiICsgdHMuZmxhdHRlbkRpYWdub3N0aWNNZXNzYWdlVGV4dChkaWFnbm9zdGljLm1lc3NhZ2VUZXh0LCBcIlxcblwiKTtcbiAgICAgIGNvbnNvbGUubG9nKG1lc3NhZ2UpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkQ29uZmlnRmlsZShjb25maWdGaWxlTmFtZTogc3RyaW5nKSB7XG4gICAgLy8gUmVhZCBjb25maWcgZmlsZVxuICAgIGNvbnN0IGNvbmZpZ0ZpbGVUZXh0ID0gZnMucmVhZEZpbGVTeW5jKGNvbmZpZ0ZpbGVOYW1lKS50b1N0cmluZygpO1xuXG4gICAgLy8gUGFyc2UgSlNPTiwgYWZ0ZXIgcmVtb3ZpbmcgY29tbWVudHMuIEp1c3QgZmFuY2llciBKU09OLnBhcnNlXG4gICAgY29uc3QgcmVzdWx0ID0gdHMucGFyc2VDb25maWdGaWxlVGV4dFRvSnNvbihjb25maWdGaWxlTmFtZSwgY29uZmlnRmlsZVRleHQpO1xuICAgIGNvbnN0IGNvbmZpZ09iamVjdCA9IHJlc3VsdC5jb25maWc7XG4gICAgaWYgKCFjb25maWdPYmplY3QpIHtcbiAgICAgIHRoaXMucmVwb3J0RGlhZ25vc3RpY3MoW3Jlc3VsdC5lcnJvciFdKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkZhaWxlZCB0byBwYXJzZSB0c2NvbmZpZy5qc29uXCIpO1xuICAgIH1cblxuICAgIC8vIEV4dHJhY3QgY29uZmlnIGluZnJvbWF0aW9uXG4gICAgY29uc3QgY29uZmlnUGFyc2VSZXN1bHQgPSB0cy5wYXJzZUpzb25Db25maWdGaWxlQ29udGVudChcbiAgICAgIGNvbmZpZ09iamVjdCxcbiAgICAgIHRzLnN5cyxcbiAgICAgIHBhdGguZGlybmFtZShjb25maWdGaWxlTmFtZSlcbiAgICApO1xuICAgIGlmIChjb25maWdQYXJzZVJlc3VsdC5lcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5yZXBvcnREaWFnbm9zdGljcyhjb25maWdQYXJzZVJlc3VsdC5lcnJvcnMpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRmFpbGVkIHRvIHBhcnNlIHRzY29uZmlnLmpzb25cIik7XG4gICAgfVxuICAgIHJldHVybiBjb25maWdQYXJzZVJlc3VsdDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgYnVpbGRUcyhpc0RldjogYm9vbGVhbiwgbW9kZTogTW9kZXMsIGJ1bmRsZSA9IGZhbHNlKSB7XG4gICAgY29uc3QgbG9nID0gdGhpcy5sb2cuZm9yKHRoaXMuYnVpbGRUcyk7XG4gICAgbG9nLmluZm8oXG4gICAgICBgQnVpbGRpbmcgJHt0aGlzLnBrZ05hbWV9ICR7dGhpcy5wa2dWZXJzaW9ufSBtb2R1bGUgKCR7bW9kZX0pIGluICR7aXNEZXYgPyBcImRldlwiIDogXCJwcm9kXCJ9IG1vZGUuLi5gXG4gICAgKTtcbiAgICBsZXQgdHNDb25maWc7XG4gICAgdHJ5IHtcbiAgICAgIHRzQ29uZmlnID0gdGhpcy5yZWFkQ29uZmlnRmlsZShcIi4vdHNjb25maWcuanNvblwiKTtcbiAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBwYXJzZSB0c2NvbmZpZy5qc29uOiAke2V9YCk7XG4gICAgfVxuXG4gICAgaWYgKGJ1bmRsZSkge1xuICAgICAgdHNDb25maWcub3B0aW9ucy5tb2R1bGUgPSBNb2R1bGVLaW5kLkFNRDtcbiAgICAgIHRzQ29uZmlnLm9wdGlvbnMub3V0RGlyID0gXCJkaXN0XCI7XG4gICAgICB0c0NvbmZpZy5vcHRpb25zLmlzb2xhdGVkTW9kdWxlcyA9IGZhbHNlO1xuICAgICAgdHNDb25maWcub3B0aW9ucy5vdXRGaWxlID0gdGhpcy5wa2dOYW1lO1xuICAgIH0gZWxzZSB7XG4gICAgICB0c0NvbmZpZy5vcHRpb25zLm91dERpciA9IGBsaWIke21vZGUgPT09IE1vZGVzLkVTTSA/IFwiL2VzbVwiIDogXCJcIn1gO1xuICAgICAgdHNDb25maWcub3B0aW9ucy5tb2R1bGUgPVxuICAgICAgICBtb2RlID09PSBNb2Rlcy5FU00gPyBNb2R1bGVLaW5kLkVTMjAyMiA6IE1vZHVsZUtpbmQuQ29tbW9uSlM7XG4gICAgfVxuXG4gICAgaWYgKGlzRGV2KSB7XG4gICAgICB0c0NvbmZpZy5vcHRpb25zLmlubGluZVNvdXJjZU1hcCA9IHRydWU7XG4gICAgICB0c0NvbmZpZy5vcHRpb25zLnNvdXJjZU1hcCA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0c0NvbmZpZy5vcHRpb25zLnNvdXJjZU1hcCA9IGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IHByb2dyYW0gPSB0cy5jcmVhdGVQcm9ncmFtKHRzQ29uZmlnLmZpbGVOYW1lcywgdHNDb25maWcub3B0aW9ucyk7XG5cbiAgICBjb25zdCB0cmFuc2Zvcm1hdGlvbnM6IHsgYmVmb3JlPzogYW55W10gfSA9IHt9O1xuICAgIGlmIChtb2RlID09PSBNb2Rlcy5DSlMpIHtcbiAgICAgIHRyYW5zZm9ybWF0aW9ucy5iZWZvcmUgPSBbY2pzMlRyYW5zZm9ybWVyKFwiLmNqc1wiKV07XG4gICAgfSBlbHNlIGlmIChtb2RlID09PSBNb2Rlcy5FU00pIHtcbiAgICAgIHRyYW5zZm9ybWF0aW9ucy5iZWZvcmUgPSBbY2pzMlRyYW5zZm9ybWVyKFwiLmpzXCIpXTtcbiAgICB9XG5cbiAgICBjb25zdCBlbWl0UmVzdWx0OiBFbWl0UmVzdWx0ID0gcHJvZ3JhbS5lbWl0KFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgdHJhbnNmb3JtYXRpb25zXG4gICAgKTtcblxuICAgIGNvbnN0IGFsbERpYWdub3N0aWNzID0gdHNcbiAgICAgIC5nZXRQcmVFbWl0RGlhZ25vc3RpY3MocHJvZ3JhbSlcbiAgICAgIC5jb25jYXQoZW1pdFJlc3VsdC5kaWFnbm9zdGljcyk7XG5cbiAgICBhbGxEaWFnbm9zdGljcy5mb3JFYWNoKChkaWFnbm9zdGljKSA9PiB7XG4gICAgICBpZiAoZGlhZ25vc3RpYy5maWxlKSB7XG4gICAgICAgIGNvbnN0IHsgbGluZSwgY2hhcmFjdGVyIH0gPVxuICAgICAgICAgIGRpYWdub3N0aWMuZmlsZS5nZXRMaW5lQW5kQ2hhcmFjdGVyT2ZQb3NpdGlvbihkaWFnbm9zdGljLnN0YXJ0ISk7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB0cy5mbGF0dGVuRGlhZ25vc3RpY01lc3NhZ2VUZXh0KFxuICAgICAgICAgIGRpYWdub3N0aWMubWVzc2FnZVRleHQsXG4gICAgICAgICAgXCJcXG5cIlxuICAgICAgICApO1xuICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICBgJHtkaWFnbm9zdGljLmZpbGUuZmlsZU5hbWV9ICgke2xpbmUgKyAxfSwke2NoYXJhY3RlciArIDF9KTogJHttZXNzYWdlfWBcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgIHRzLmZsYXR0ZW5EaWFnbm9zdGljTWVzc2FnZVRleHQoZGlhZ25vc3RpYy5tZXNzYWdlVGV4dCwgXCJcXG5cIilcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoZW1pdFJlc3VsdC5lbWl0U2tpcHBlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQnVpbGQgZmFpbGVkXCIpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgYnVpbGQoaXNEZXY6IGJvb2xlYW4sIG1vZGU6IE1vZGVzLCBidW5kbGUgPSBmYWxzZSkge1xuICAgIGNvbnN0IGxvZyA9IHRoaXMubG9nLmZvcih0aGlzLmJ1aWxkKTtcbiAgICBhd2FpdCB0aGlzLmJ1aWxkVHMoaXNEZXYsIG1vZGUsIGJ1bmRsZSk7XG5cbiAgICBsb2cudmVyYm9zZShcbiAgICAgIGBNb2R1bGUgJHt0aGlzLnBrZ05hbWV9ICR7dGhpcy5wa2dWZXJzaW9ufSAoJHttb2RlfSkgYnVpbHQgaW4gJHtpc0RldiA/IFwiZGV2XCIgOiBcInByb2RcIn0gbW9kZS4uLmBcbiAgICApO1xuICAgIGlmIChtb2RlID09PSBNb2Rlcy5DSlMgJiYgIWJ1bmRsZSkge1xuICAgICAgY29uc3QgZmlsZXMgPSBnZXRBbGxGaWxlcyhcbiAgICAgICAgXCJsaWJcIixcbiAgICAgICAgKGZpbGUpID0+IGZpbGUuZW5kc1dpdGgoXCIuanNcIikgJiYgIWZpbGUuaW5jbHVkZXMoXCIvZXNtL1wiKVxuICAgICAgKTtcblxuICAgICAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgICAgIGxvZy52ZXJib3NlKGBQYXRjaGluZyAke2ZpbGV9J3MgY2pzIGltcG9ydHMuLi5gKTtcbiAgICAgICAgY29uc3QgZiA9IGZpbGUucmVwbGFjZShcIi5qc1wiLCBcIi5janNcIik7XG4gICAgICAgIGF3YWl0IHJlbmFtZUZpbGUoZmlsZSwgZik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29weUFzc2V0cyhtb2RlOiBNb2Rlcykge1xuICAgIGNvbnN0IGxvZyA9IHRoaXMubG9nLmZvcih0aGlzLmNvcHlBc3NldHMpO1xuICAgIGxldCBoYXNBc3NldHMgPSBmYWxzZTtcbiAgICB0cnkge1xuICAgICAgaGFzQXNzZXRzID0gZnMuc3RhdFN5bmMoXCIuL3NyYy9hc3NldHNcIikuaXNEaXJlY3RvcnkoKTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICByZXR1cm4gbG9nLnZlcmJvc2UoYE5vIGFzc2V0cyBmb3VuZCBpbiAuL3NyYy9hc3NldHMgdG8gY29weWApO1xuICAgIH1cbiAgICBpZiAoaGFzQXNzZXRzKVxuICAgICAgY29weUZpbGUoXG4gICAgICAgIFwiLi9zcmMvYXNzZXRzXCIsXG4gICAgICAgIGAuLyR7bW9kZSA9PT0gTW9kZXMuQ0pTID8gXCJsaWJcIiA6IFwiZGlzdFwifS9hc3NldHNgXG4gICAgICApO1xuICB9XG5cbiAgYXN5bmMgYnVpbGRDb21tYW5kcygpIHtcbiAgICBmb3IgKGNvbnN0IGNtZCBvZiBDb21tYW5kcykge1xuICAgICAgYXdhaXQgdGhpcy5idW5kbGUoTW9kZXMuQ0pTLCB0cnVlLCB0cnVlLCBgc3JjL2Jpbi8ke2NtZH0udHNgLCBjbWQpO1xuICAgICAgbGV0IGRhdGEgPSByZWFkRmlsZShgYmluLyR7Y21kfS5janNgKTtcbiAgICAgIGRhdGEgPSBcIiMhL3Vzci9iaW4vZW52IG5vZGVcXG5cIiArIGRhdGE7XG4gICAgICB3cml0ZUZpbGUoYGJpbi8ke2NtZH0uY2pzYCwgZGF0YSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgYnVuZGxlKFxuICAgIG1vZGU6IE1vZGVzLFxuICAgIGlzRGV2OiBib29sZWFuLFxuICAgIGlzTGliOiBib29sZWFuLFxuICAgIGVudHJ5RmlsZTogc3RyaW5nID0gXCJzcmMvaW5kZXgudHNcIixcbiAgICBuYW1lT3ZlcnJpZGU6IHN0cmluZyA9IHRoaXMucGtnTmFtZSxcbiAgICBleHRlcm5hbHM/OiBzdHJpbmdbXSxcbiAgICBpbmNsdWRlOiBzdHJpbmdbXSA9IFtcbiAgICAgIFwicHJvbXB0c1wiLFxuICAgICAgXCJzdHlsZWQtc3RyaW5nLWJ1aWxkZXJcIixcbiAgICAgIFwidHlwZWQtb2JqZWN0LWFjY3VtdWxhdG9yXCIsXG4gICAgICBcIkBkZWNhZi10cy9sb2dnaW5nXCIsXG4gICAgXVxuICApIHtcbiAgICBjb25zdCBpc0VzbSA9IG1vZGUgPT09IE1vZGVzLkVTTTtcbiAgICBjb25zdCBwa2dOYW1lID0gdGhpcy5wa2dOYW1lO1xuXG4gICAgY29uc3QgZXh0ID0gQXJyYXkuZnJvbShcbiAgICAgIG5ldyBTZXQoW1xuICAgICAgICAuLi5bXG4gICAgICAgICAgXCJmc1wiLFxuICAgICAgICAgIFwicGF0aFwiLFxuICAgICAgICAgIFwicHJvY2Vzc1wiLFxuICAgICAgICAgIFwicm9sbHVwXCIsXG4gICAgICAgICAgXCJAcm9sbHVwL3BsdWdpbi10eXBlc2NyaXB0XCIsXG4gICAgICAgICAgXCJAcm9sbHVwL3BsdWdpbi1qc29uXCIsXG4gICAgICAgICAgXCJAcm9sbHVwL3BsdWdpbi1jb21tb25qc1wiLFxuICAgICAgICAgIFwiQHJvbGx1cC9wbHVnaW4tbm9kZS1yZXNvbHZlXCIsXG4gICAgICAgICAgXCJjaGlsZF9wcm9jZXNzXCIsXG4gICAgICAgICAgXCJ0c2xpYlwiLFxuICAgICAgICAgIFwidXRpbFwiLFxuICAgICAgICAgIFwiaHR0cHNcIixcbiAgICAgICAgXSxcbiAgICAgICAgLi4uKGV4dGVybmFscyB8fCBbXSksXG4gICAgICBdKVxuICAgICk7XG5cbiAgICBjb25zdCBwbHVnaW5zID0gW1xuICAgICAgdHlwZXNjcmlwdCh7XG4gICAgICAgIGNvbXBpbGVyT3B0aW9uczoge1xuICAgICAgICAgIG1vZHVsZTogXCJlc25leHRcIixcbiAgICAgICAgICBkZWNsYXJhdGlvbjogZmFsc2UsXG4gICAgICAgICAgb3V0RGlyOiBpc0xpYiA/IFwiYmluXCIgOiBcImRpc3RcIixcbiAgICAgICAgfSxcbiAgICAgICAgaW5jbHVkZTogW1wic3JjLyoqLyoudHNcIl0sXG4gICAgICAgIGV4Y2x1ZGU6IFtcIm5vZGVfbW9kdWxlc1wiLCBcIioqLyouc3BlYy50c1wiXSxcbiAgICAgICAgdHNjb25maWc6IFwiLi90c2NvbmZpZy5qc29uXCIsXG4gICAgICB9KSxcbiAgICAgIGpzb24oKSxcbiAgICBdO1xuXG4gICAgaWYgKGlzTGliKSB7XG4gICAgICBwbHVnaW5zLnB1c2goXG4gICAgICAgIGNvbW1vbmpzKHtcbiAgICAgICAgICBpbmNsdWRlOiBbXSxcbiAgICAgICAgICBleGNsdWRlOiBleHRlcm5hbHMsXG4gICAgICAgIH0pLFxuICAgICAgICBub2RlUmVzb2x2ZSh7XG4gICAgICAgICAgcmVzb2x2ZU9ubHk6IGluY2x1ZGUsXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGlucHV0OiBJbnB1dE9wdGlvbnMgPSB7XG4gICAgICBpbnB1dDogZW50cnlGaWxlLFxuICAgICAgcGx1Z2luczogcGx1Z2lucyxcbiAgICAgIGV4dGVybmFsOiBleHQsXG4gICAgfTtcblxuICAgIGNvbnN0IG91dHB1dHM6IE91dHB1dE9wdGlvbnNbXSA9IFtcbiAgICAgIHtcbiAgICAgICAgZmlsZTogYCR7aXNMaWIgPyBcImJpbi9cIiA6IFwiZGlzdC9cIn0ke25hbWVPdmVycmlkZSA/IG5hbWVPdmVycmlkZSA6IGAuYnVuZGxlLiR7IWlzRGV2ID8gXCJtaW5cIiA6IFwiXCJ9YH0ke2lzRXNtID8gXCIuZXNtXCIgOiBcIlwifS5janNgLFxuICAgICAgICBmb3JtYXQ6IGlzTGliID8gXCJjanNcIiA6IGlzRXNtID8gXCJlc21cIiA6IFwidW1kXCIsXG4gICAgICAgIG5hbWU6IHBrZ05hbWUsXG4gICAgICAgIGVzTW9kdWxlOiBpc0VzbSxcbiAgICAgICAgc291cmNlbWFwOiBpc0RldiA/IFwiaW5saW5lXCIgOiBmYWxzZSxcbiAgICAgICAgZ2xvYmFsczoge30sXG4gICAgICAgIGV4cG9ydHM6IFwiYXV0b1wiLFxuICAgICAgfSxcbiAgICBdO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGJ1bmRsZSA9IGF3YWl0IHJvbGx1cChpbnB1dCk7XG4gICAgICBjb25zb2xlLmxvZyhidW5kbGUud2F0Y2hGaWxlcyk7XG4gICAgICBhc3luYyBmdW5jdGlvbiBnZW5lcmF0ZU91dHB1dHMoYnVuZGxlOiBSb2xsdXBCdWlsZCkge1xuICAgICAgICBmb3IgKGNvbnN0IG91dHB1dE9wdGlvbnMgb2Ygb3V0cHV0cykge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICAgICAgICBjb25zdCB7IG91dHB1dCB9ID0gYXdhaXQgYnVuZGxlLndyaXRlKG91dHB1dE9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IGdlbmVyYXRlT3V0cHV0cyhidW5kbGUpO1xuICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGJ1bmRsZTogJHtlfWApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgYnVpbGRCeUVudihpc0RldjogYm9vbGVhbiwgbW9kZTogQnVpbGRNb2RlID0gQnVpbGRNb2RlLkFMTCkge1xuICAgIHRyeSB7XG4gICAgICBkZWxldGVQYXRoKFwibGliXCIpO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgIC8vIGRvIG5vdGhpbmdcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGRlbGV0ZVBhdGgoXCJkaXN0XCIpO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgIC8vIGRvIG5vdGhpbmdcbiAgICB9XG4gICAgZnMubWtkaXJTeW5jKFwibGliXCIpO1xuICAgIGZzLm1rZGlyU3luYyhcImRpc3RcIik7XG5cbiAgICBpZiAoW0J1aWxkTW9kZS5BTEwsIEJ1aWxkTW9kZS5CVUlMRF0uaW5jbHVkZXMobW9kZSkpIHtcbiAgICAgIGF3YWl0IHRoaXMuYnVpbGQoaXNEZXYsIE1vZGVzLkVTTSk7XG4gICAgICBhd2FpdCB0aGlzLmJ1aWxkKGlzRGV2LCBNb2Rlcy5DSlMpO1xuICAgICAgdGhpcy5wYXRjaEZpbGVzKFwibGliXCIpO1xuICAgIH1cblxuICAgIGlmIChbQnVpbGRNb2RlLkFMTCwgQnVpbGRNb2RlLkJVTkRMRV0uaW5jbHVkZXMobW9kZSkpIHtcbiAgICAgIGF3YWl0IHRoaXMuYnVuZGxlKE1vZGVzLkVTTSwgdHJ1ZSwgZmFsc2UpO1xuICAgICAgYXdhaXQgdGhpcy5idW5kbGUoTW9kZXMuQ0pTLCB0cnVlLCBmYWxzZSk7XG4gICAgICB0aGlzLnBhdGNoRmlsZXMoXCJkaXN0XCIpO1xuICAgIH1cblxuICAgIHRoaXMuY29weUFzc2V0cyhNb2Rlcy5DSlMpO1xuICAgIHRoaXMuY29weUFzc2V0cyhNb2Rlcy5FU00pO1xuICB9XG5cbiAgYXN5bmMgYnVpbGREZXYobW9kZTogQnVpbGRNb2RlID0gQnVpbGRNb2RlLkFMTCkge1xuICAgIHJldHVybiB0aGlzLmJ1aWxkQnlFbnYodHJ1ZSwgbW9kZSk7XG4gIH1cblxuICBhc3luYyBidWlsZFByb2QobW9kZTogQnVpbGRNb2RlID0gQnVpbGRNb2RlLkFMTCkge1xuICAgIHJldHVybiB0aGlzLmJ1aWxkQnlFbnYoZmFsc2UsIG1vZGUpO1xuICB9XG5cbiAgYXN5bmMgYnVpbGREb2NzKCkge1xuICAgIGF3YWl0IHJ1bkNvbW1hbmQoYG5wbSBpbnN0YWxsIGJldHRlci1kb2NzIHRhZmZ5ZGJgKS5wcm9taXNlO1xuICAgIGF3YWl0IHJ1bkNvbW1hbmQoYG5weCBtYXJrZG93bi1pbmNsdWRlIC4vd29ya2RvY3MvcmVhZG1lLW1kLmpzb25gKS5wcm9taXNlO1xuICAgIGF3YWl0IHJ1bkNvbW1hbmQoXG4gICAgICBgbnB4IGpzZG9jIC1jIC4vd29ya2RvY3MvanNkb2NzLmpzb24gLXQgLi9ub2RlX21vZHVsZXMvYmV0dGVyLWRvY3NgXG4gICAgKS5wcm9taXNlO1xuICAgIGF3YWl0IHJ1bkNvbW1hbmQoYG5wbSByZW1vdmUgYmV0dGVyLWRvY3MgdGFmZnlkYmApLnByb21pc2U7XG4gICAgW1xuICAgICAge1xuICAgICAgICBzcmM6IFwid29ya2RvY3MvYXNzZXRzXCIsXG4gICAgICAgIGRlc3Q6IFwiLi9kb2NzL3dvcmtkb2NzL2Fzc2V0c1wiLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgc3JjOiBcIndvcmtkb2NzL3JlcG9ydHMvY292ZXJhZ2VcIixcbiAgICAgICAgZGVzdDogXCIuL2RvY3Mvd29ya2RvY3MvcmVwb3J0cy9jb3ZlcmFnZVwiLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgc3JjOiBcIndvcmtkb2NzL3JlcG9ydHMvaHRtbFwiLFxuICAgICAgICBkZXN0OiBcIi4vZG9jcy93b3JrZG9jcy9yZXBvcnRzL2h0bWxcIixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHNyYzogXCJ3b3JrZG9jcy9yZXNvdXJjZXNcIixcbiAgICAgICAgZGVzdDogXCIuL2RvY3Mvd29ya2RvY3MvcmVzb3VyY2VzXCIsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBzcmM6IFwiTElDRU5TRS5tZFwiLFxuICAgICAgICBkZXN0OiBcIi4vZG9jcy9MSUNFTlNFLm1kXCIsXG4gICAgICB9LFxuICAgIF0uZm9yRWFjaCgoZikgPT4ge1xuICAgICAgY29uc3QgeyBzcmMsIGRlc3QgfSA9IGY7XG4gICAgICBjb3B5RmlsZShzcmMsIGRlc3QpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIHJ1bjxSPihcbiAgICBhbnN3ZXJzOiBMb2dnaW5nQ29uZmlnICZcbiAgICAgIHR5cGVvZiBEZWZhdWx0Q29tbWFuZFZhbHVlcyAmIHsgW2sgaW4ga2V5b2YgdHlwZW9mIG9wdGlvbnNdOiB1bmtub3duIH1cbiAgKTogUHJvbWlzZTxzdHJpbmcgfCB2b2lkIHwgUj4ge1xuICAgIGNvbnN0IHsgZGV2LCBwcm9kLCBkb2NzLCBjb21tYW5kcywgYnVpbGRNb2RlIH0gPSBhbnN3ZXJzO1xuXG4gICAgaWYgKGNvbW1hbmRzKSB7XG4gICAgICBhd2FpdCB0aGlzLmJ1aWxkQ29tbWFuZHMoKTtcbiAgICB9XG5cbiAgICBpZiAoZGV2KSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5idWlsZERldihidWlsZE1vZGUgYXMgQnVpbGRNb2RlKTtcbiAgICB9XG4gICAgaWYgKHByb2QpIHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLmJ1aWxkUHJvZChidWlsZE1vZGUgYXMgQnVpbGRNb2RlKTtcbiAgICB9XG4gICAgaWYgKGRvY3MpIHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLmJ1aWxkRG9jcygpO1xuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHsgQnVpbGRTY3JpcHRzIH0gZnJvbSBcIi4uL2NsaS9jb21tYW5kc1wiO1xuXG5uZXcgQnVpbGRTY3JpcHRzKClcbiAgLmV4ZWN1dGUoKVxuICAudGhlbigoKSA9PiBCdWlsZFNjcmlwdHMubG9nLmluZm8oXCJTY3JpcHRzIGJ1aWx0IHN1Y2Nlc3NmdWxseS5cIikpXG4gIC5jYXRjaCgoZTogdW5rbm93bikgPT4ge1xuICAgIEJ1aWxkU2NyaXB0cy5sb2cuZXJyb3IoYEVycm9yIGJ1aWxkaW5nIHNjcmlwdHM6ICR7ZX1gKTtcbiAgICBwcm9jZXNzLmV4aXQoMSk7XG4gIH0pO1xuIl0sIm5hbWVzIjpbImFjdGlvbiIsInN0cmlwIiwicmVxdWlyZSQkMCIsInJlcXVpcmUkJDEiLCJjbGVhciIsImZpZ3VyZXNfMSIsInN0eWxlIiwibGluZXMiLCJ3cmFwIiwiZW50cmllc1RvRGlzcGxheSIsInV0aWwiLCJyZXF1aXJlJCQyIiwicmVxdWlyZSQkMyIsInJlcXVpcmUkJDQiLCJyZXF1aXJlJCQ1IiwicmVxdWlyZSQkNiIsInJlcXVpcmUkJDciLCJwcm9tcHQiLCJ0ZXh0Iiwic2VsZWN0IiwidG9nZ2xlIiwiZGF0ZXBhcnQiLCJtZXJpZGllbSIsImRheSIsImhvdXJzIiwibWlsbGlzZWNvbmRzIiwibWludXRlcyIsIm1vbnRoIiwic2Vjb25kcyIsInllYXIiLCJkYXRlcGFydHMiLCJyZXF1aXJlJCQ4IiwiZGF0ZSIsIm51bWJlciIsIm11bHRpc2VsZWN0IiwiYXV0b2NvbXBsZXRlIiwiYXV0b2NvbXBsZXRlTXVsdGlzZWxlY3QiLCJjb25maXJtIiwiZWxlbWVudHMiLCJwcm9tcHRzIiwicGFyc2VBcmdzIiwic3Bhd24iLCJ0cyIsIk1vZHVsZUtpbmQiLCJub2RlUmVzb2x2ZSIsInJvbGx1cCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQSxDQUFBQSxRQUFjLEdBQUcsQ0FBQyxHQUFHLEVBQUUsUUFBUSxLQUFLO0dBQ2xDLElBQUksR0FBRyxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRTs7QUFFekMsR0FBRSxJQUFJLEdBQUcsQ0FBQyxJQUFJLEVBQUU7S0FDWixJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssR0FBRyxFQUFFLE9BQU8sT0FBTztLQUNwQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssR0FBRyxFQUFFLE9BQU8sT0FBTztLQUNwQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssR0FBRyxFQUFFLE9BQU8sT0FBTztLQUNwQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssR0FBRyxFQUFFLE9BQU8sTUFBTTtLQUNuQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssR0FBRyxFQUFFLE9BQU8sT0FBTztBQUN4Qzs7R0FFRSxJQUFJLFFBQVEsRUFBRTtLQUNaLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxHQUFHLEVBQUUsT0FBTyxNQUFNO0tBQ25DLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxHQUFHLEVBQUUsT0FBTyxJQUFJO0FBQ3JDOztHQUVFLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUUsT0FBTyxRQUFRO0dBQzFDLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxPQUFPLEVBQUUsT0FBTyxRQUFRLENBQUM7O0dBRTFDLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUUsT0FBTyxRQUFRO0dBQzdDLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUUsT0FBTyxlQUFlO0dBQ2pELElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxPQUFPLEVBQUUsT0FBTyxPQUFPO0dBQ3hDLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUUsT0FBTyxNQUFNO0dBQ3hDLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxLQUFLLEVBQUUsT0FBTyxNQUFNO0dBQ3JDLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxVQUFVLEVBQUUsT0FBTyxVQUFVO0dBQzlDLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUUsT0FBTyxVQUFVLENBQUM7O0dBRTdDLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxNQUFNLEVBQUUsT0FBTyxNQUFNLENBQUM7O0dBRXZDLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxLQUFLLEVBQUUsT0FBTyxLQUFLO0dBQ3BDLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxJQUFJLEVBQUUsT0FBTyxJQUFJO0dBQ2xDLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxNQUFNLEVBQUUsT0FBTyxNQUFNO0dBQ3RDLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxPQUFPLEVBQUUsT0FBTyxPQUFPO0dBQ3hDLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxNQUFNLEVBQUUsT0FBTyxNQUFNO0FBQ3hDLEdBQUUsT0FBTyxLQUFLO0VBQ2I7Ozs7Ozs7Ozs7O0FDbkNELENBQWNDLE9BQUEsR0FBRyxHQUFHLElBQUk7QUFDeEIsR0FBRSxNQUFNLE9BQU8sR0FBRyxDQUFDLDhIQUE4SCxFQUFFLHdEQUF3RCxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztHQUNwTixNQUFNLEdBQUcsR0FBRyxJQUFJLE1BQU0sQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDO0FBQ3RDLEdBQUUsT0FBTyxPQUFPLEdBQUcsS0FBSyxRQUFRLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRztFQUM1RDs7Ozs7Ozs7Ozs7QUNKRCxDQUFBLFNBQVMsMEJBQTBCLENBQUMsQ0FBQyxFQUFFLGNBQWMsRUFBRSxFQUFFLElBQUksRUFBRSxHQUFHLE9BQU8sTUFBTSxLQUFLLFdBQVcsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxHQUFHLDJCQUEyQixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksY0FBbUQsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsU0FBUyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLE1BQU0sSUFBSSxTQUFTLENBQUMsdUlBQXVJLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxnQkFBZ0IsR0FBRyxJQUFJLEVBQUUsTUFBTSxHQUFHLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxTQUFTLENBQUMsR0FBRyxFQUFFLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsU0FBUyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixJQUFJLEVBQUUsQ0FBQyxNQUFNLElBQUksSUFBSSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxJQUFJLE1BQU0sRUFBRSxNQUFNLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDOztDQUVwK0IsU0FBUywyQkFBMkIsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRLEVBQUUsT0FBTyxpQkFBaUIs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QyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxJQUFJLEVBQUU7QUFDbkksR0FBRSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSztBQUMxQixHQUFFLE9BQU8sQ0FBQyxHQUFHLElBQUksRUFBRSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSztLQUNuRixJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sSUFBSSxLQUFLLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLEtBQUssRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2SixLQUFJLE9BQU8sR0FBRztBQUNkLElBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztFQUNqQzs7Ozs7Ozs7OztBQ2REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFBQyxrQkFBYyxHQUFHLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxVQUFVLEtBQUs7QUFDaEQsR0FBRSxVQUFVLEdBQUcsVUFBVSxJQUFJLEtBQUs7R0FDaEMsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsVUFBVSxFQUFFLE1BQU0sR0FBRyxJQUFJ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QUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ2xKLE9BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUM5RDs7S0FFSSxLQUFLLENBQUMsTUFBTSxFQUFFO0FBQ2xCLEtBQUksSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFO0tBQ3JCLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztBQUU5SyxLQUFJLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtPQUNkLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMs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UyxLQUFLO0dBQ25DLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLFNBQVMsQ0FBQztHQUNwQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxHQUFHLE1BQU07RUFDNUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0NBR0EsTUFBTSxZQUFZLFNBQVMsTUFBTSxDQUFDO0FBQ2xDLEdBQUUsV0FBVyxDQUFDLElBQUksR0FBRyxFQUFFLEVBQUU7S0FDckIsS0FBSyxDQUFDLElBQUksQ0FBQztLQUNYLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzdDLEtBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTztBQUMzQixLQUFJLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUU7S0FDdEQsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUs7S0FDekIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUM7S0FDNUIsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUM7QUFDbEMsS0FBSSxJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLFFBQVE7QUFDckQsS0FBSSxJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxRQUFRO0tBQ2hELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFB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Q1I7O0FBRUEsR0FBRSxFQUFFLEdBQUc7QUFDUCxLQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDOztBQUVuQixLQUFJLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxFQUFFLEVBQUU7T0FDckIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHO0FBQ3RDOztBQUVBLEtBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsT0FBTyxJQUFJLENBQUMsSUFBSSxFQUFFO0FBQ2xELEtBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsR0FBRztBQUMxQixLQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUM7S0FDbkIsSUFBSSxDQUFDLElBQUksRUFBRTtLQUNYLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDakI7O0FBRUEsR0FBRSxJQUFJLEdBQUc7QUFDVCxLQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDOztBQUVuQixLQUFJLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxFQUFFLEVBQUU7T0FDckIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHO0FBQ3RDOztBQUVBLEtBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsT0FBTyxJQUFJLENBQUMsSUFBSSxFQUFFO0FBQ2xELEtBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsR0FBRztBQUMxQixLQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUM7S0FDbkIsSUFBSSxDQUFDLElBQUksRUFBRTtLQUNYLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDakI7O0FBRUEsR0FBRSxNQUFNLEdBQUc7S0FDUCxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRTtLQUMvQixJQUFJLEdBQUcs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SSxJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQzs7QUFFMUIsS0FBSSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7QUFFeE8sS0FBSSxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7T0FDZCxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDL0k7O0FBRUEsS0FBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsSUFBSSxHQUFHLElB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QUksSUFBSSxRQUFRLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQztBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0EsRUFBQSxDQUFDLENBQUMsUUFBUSxHQUFHLElBQUksSUFBSTtBQUNyQixJQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsVUFBVTtBQUN6QixJQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7R0FDcEI7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0EsRUFBQSxDQUFDLENBQUMsU0FBUyxHQUFHLElBQUksSUFBSTtBQUN0QixJQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsV0FBVztBQUMxQixJQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7R0FDcEI7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0VBR0EsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLElBQUksUUFBUSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUM7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztFQUdBLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxJQUFJLFFBQVEsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0VBR0EsQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLElBQUksUUFBUSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUM7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0EsRUFBQSxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUks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LENBQUMsSUFBSSxDQUFDLEdBQUcsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxNQUFNLElBQUksU0FBUyxDQUFDLHVJQUF1SSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksZ0JBQWdCLEdBQUcsSUFBSSxFQUFFLE1BQU0sR0FBRyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxTQUFTLENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsU0FBUyxDQUFDLEdBQUcsRUFBRSxJQUFJLElBQUksR0FBRyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxFQUFFLENBQUMsTUFBTSxJQUFJLElBQUksRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsSUFBSSxNQUFNLEVBQUUsTUFBTSxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQzs7Q0FFcCtCLFNBQVMsMkJBQTJCLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxFQUFFLE9BQU8saUJBQWlCLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxRQUFRLElBQUksQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxLQUFLLEtBQUssRUFBRSxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxXQUFXLElBQUksMENBQTBDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8saUJBQWlCLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDOztDQUU5WixTQUFTLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLEdBQUcsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxD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SUFBSSxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBUyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxLQUFLLEVBQUU7QUFDdkQsSUFBSSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQzFDLFFBQVEsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLDRCQUE0QixFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDckYsUUFBUSxPQUFPLElBQUk7QUFDbkI7QUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEVBQUU7QUFDL0MsUUFBUSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsNEJBQTRCLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUNyRixRQUFRLE9BQU8sSUFBSTtBQUNuQjtBQUNBLElBQUksT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDdEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFO0FBQ3BDLElBQUksTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLEtBQUssUUFBUSxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQzNELElBQUksT0FBTyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBUyxLQUFLLENBQUMsSUFBSSxFQUFFO0FBQzVCO0FBQ0E7QUFDQSxJQUFJLE1BQU0sU0FBUyxHQUFHLHdDQUF3QztBQUM5RCxJQUFJLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTLEdBQUcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFO0FBQy9CLElBQUksT0FBTyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDdEM7O0FDM0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sTUFBTSxZQUFZLENBQUM7QUFDMUIsSUFBSSxXQUFXLENBQUMsSUFBSSxFQUFFO0FBQ3RCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJO0FBQ3hCO0FBQ0EsUUFBUSxNQUFNLENBQUMsT0FBTyxDQUFDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUs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SyxRQUFRLElBQUksRUFBRSxDQUFDLElBQUksTUFBTSxDQUFDLEVBQUU7QUFDckQsWUFBWSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0MsWUFBWSxPQUFPLElBQUk7QUFDdkI7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQzVDLFFBQVEsT0FBTyxJQUFJO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxRQUFRLENBQUMsQ0FBQyxFQUFFO0FBQ2hCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7QUFDN0MsUUFBUSxPQUFPLElBQUk7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLFVBQVUsQ0FBQyxDQUFDLEVBQUU7QUFDbEIsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUM7QUFDbkQsUUFBUSxPQUFPLElBQUk7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDakIsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ25ELFFBQVEsT0FBTyxJQUFJO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ25CLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxXQUFXLENBQUMsSUFB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QUMsUUFBUSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUM7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHLEVBQUU7QUFDZixRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUM7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHLEVBQUU7QUFDZixRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUM7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLFNBQVMsQ0FBQyxNQUFNLEVBQUU7QUFDdEIsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxFQUFFLEdBQUcsTUFBTSxFQUFFO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sTUFBTSxPQUFPLENBQUM7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLFNBQVMsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLE1BQU0sRUFBRSxNQUFNLEtBQUs7QUFDakQsUUFBUSxPQUFPLElBQUks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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDMVlBOzs7O0FBSUc7QUFDSCxNQUFNLE1BQU0sR0FBRztBQUNiLElBQUEsZ0JBQWdCO0FBQ2hCLElBQUEsZ0JBQWdCO0FBQ2hCLElBQUEsZ0JBQWdCO0FBQ2hCLElBQUEsZ0JBQWdCO0FBQ2hCLElBQUEsZ0JBQWdCO0FBQ2hCLElBQUEsZ0JBQWdCO0FBQ2hCLElBQUEsZ0JBQWdCO0FBQ2hCLElBQUEsZ0JBQWdCO0FBQ2hCLElBQUEsZ0JBQWdCO0NBQ2pCO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXdCRztBQUNHLFNBQVUsV0FBVyxDQUFDLE1BQWUsRUFBQTtBQUN6QyxJQUFBLE1BQU0sT0FBTyxHQUFHLFNBQVMsRUFBRTtBQUMzQixJQUFBLE1BQU0sTUFBTSxHQUNWLENBQUE7Ozs7Ozs7QUFPRixDQUFBLENBQUEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO0lBQ1os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U0FBc0IsQ0FBQzs7UUFFcEQsSUFBSSxJQUFJLEVBQUU7QUFDUixZQUFBLE9BQU8sTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQXNCLENBQUM7O1FBRXJELElBQUksSUFBSSxFQUFFO0FBQ1IsWUFBQSxPQUFPLE1BQU0sSUFBSSxDQUFDLFNBQVMsRUFBRTs7O0FBR2xDOztBQ3JqQkQsSUFBSSxZQUFZO0FBQ2IsS0FBQSxPQUFPO0FBQ1AsS0FBQSxJQUFJLENBQUMsTUFBTSxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyw2QkFBNkIsQ0FBQztBQUMvRCxLQUFBLEtBQUssQ0FBQyxDQUFDLENBQVUsS0FBSTtJQUNwQixZQUFZLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUEyQix3QkFBQSxFQUFBLENBQUMsQ0FBRSxDQUFBLENBQUM7QUFDdEQsSUFBQSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNqQixDQUFDLENBQUM7OyIsInhfZ29vZ2xlX2lnbm9yZUxpc3QiOlswLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxLDIyLDIzLDI0LDI1LDI2LDI3LDI4LDI5LDMwLDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYxLDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDc5XX0=