wxt 0.5.5 → 0.5.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.
package/dist/cli.cjs CHANGED
@@ -5303,7 +5303,7 @@ var require_bl = __commonJS({
5303
5303
  var import_cac = __toESM(require("cac"), 1);
5304
5304
 
5305
5305
  // package.json
5306
- var version = "0.5.5";
5306
+ var version = "0.5.6";
5307
5307
 
5308
5308
  // src/core/utils/getInternalConfig.ts
5309
5309
  var import_c12 = require("c12");
@@ -5758,6 +5758,15 @@ function getGlobals(config) {
5758
5758
  }
5759
5759
  ];
5760
5760
  }
5761
+ function getEntrypointGlobals(config, entrypointName) {
5762
+ return [
5763
+ {
5764
+ name: "__ENTRYPOINT__",
5765
+ value: entrypointName,
5766
+ type: `string`
5767
+ }
5768
+ ];
5769
+ }
5761
5770
 
5762
5771
  // src/core/utils/getInternalConfig.ts
5763
5772
  async function getInternalConfig(inlineConfig, command) {
@@ -6117,6 +6126,9 @@ async function buildSingleEntrypoint(entrypoint, config) {
6117
6126
  "process.env.NODE_ENV": JSON.stringify(config.mode)
6118
6127
  }
6119
6128
  };
6129
+ for (const global2 of getEntrypointGlobals(config, entrypoint.name)) {
6130
+ libMode.define[global2.name] = JSON.stringify(global2.value);
6131
+ }
6120
6132
  const entryConfig = vite3.mergeConfig(
6121
6133
  libMode,
6122
6134
  config.vite
@@ -6145,8 +6157,12 @@ async function buildMultipleEntrypoints(entrypoints, config) {
6145
6157
  assetFileNames: "assets/[name]-[hash].[ext]"
6146
6158
  }
6147
6159
  }
6148
- }
6160
+ },
6161
+ define: {}
6149
6162
  };
6163
+ for (const global2 of getEntrypointGlobals(config, "html")) {
6164
+ multiPage.define[global2.name] = JSON.stringify(global2.value);
6165
+ }
6150
6166
  const entryConfig = vite3.mergeConfig(
6151
6167
  multiPage,
6152
6168
  config.vite
@@ -6672,7 +6688,7 @@ declare module "wxt/browser" {
6672
6688
  }
6673
6689
  async function writeGlobalsDeclarationFile(config) {
6674
6690
  const filePath = (0, import_path9.resolve)(config.typesDir, "globals.d.ts");
6675
- const globals = getGlobals(config);
6691
+ const globals = [...getGlobals(config), ...getEntrypointGlobals(config, "")];
6676
6692
  await writeFileIfDifferent(
6677
6693
  filePath,
6678
6694
  [
@@ -8926,4 +8942,4 @@ cli.command("clean [root]", "clean generated files and caches").alias("cleanup")
8926
8942
  cli.command("publish [root]", "publish to stores").action(publish);
8927
8943
  cli.command("init [directory]", "initialize a new project").option("-t, --template <template>", "template to use").option("--pm <packageManager>", "which package manager to use").action(init);
8928
8944
  cli.parse();
8929
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL21pbWljLWZuQDIuMS4wL25vZGVfbW9kdWxlcy9taW1pYy1mbi9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vb25ldGltZUA1LjEuMi9ub2RlX21vZHVsZXMvb25ldGltZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vc2lnbmFsLWV4aXRAMy4wLjcvbm9kZV9tb2R1bGVzL3NpZ25hbC1leGl0L3NpZ25hbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3NpZ25hbC1leGl0QDMuMC43L25vZGVfbW9kdWxlcy9zaWduYWwtZXhpdC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2xpLXNwaW5uZXJzQDIuOS4wL25vZGVfbW9kdWxlcy9jbGktc3Bpbm5lcnMvc3Bpbm5lcnMuanNvbiIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2xpLXNwaW5uZXJzQDIuOS4wL25vZGVfbW9kdWxlcy9jbGktc3Bpbm5lcnMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2Vhc3Rhc2lhbndpZHRoQDAuMi4wL25vZGVfbW9kdWxlcy9lYXN0YXNpYW53aWR0aC9lYXN0YXNpYW53aWR0aC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcmVhZGFibGUtc3RyZWFtQDMuNi4yL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvc3RyZWFtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yZWFkYWJsZS1zdHJlYW1AMy42LjIvbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy9idWZmZXJfbGlzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcmVhZGFibGUtc3RyZWFtQDMuNi4yL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvZGVzdHJveS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcmVhZGFibGUtc3RyZWFtQDMuNi4yL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vZXJyb3JzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yZWFkYWJsZS1zdHJlYW1AMy42LjIvbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy9zdGF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vaW5oZXJpdHNAMi4wLjQvbm9kZV9tb2R1bGVzL2luaGVyaXRzL2luaGVyaXRzX2Jyb3dzZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2luaGVyaXRzQDIuMC40L25vZGVfbW9kdWxlcy9pbmhlcml0cy9pbmhlcml0cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdXRpbC1kZXByZWNhdGVAMS4wLjIvbm9kZV9tb2R1bGVzL3V0aWwtZGVwcmVjYXRlL25vZGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3JlYWRhYmxlLXN0cmVhbUAzLjYuMi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX3dyaXRhYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yZWFkYWJsZS1zdHJlYW1AMy42LjIvbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV9kdXBsZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3NhZmUtYnVmZmVyQDUuMS4yL25vZGVfbW9kdWxlcy9zYWZlLWJ1ZmZlci9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vc3RyaW5nX2RlY29kZXJAMS4xLjEvbm9kZV9tb2R1bGVzL3N0cmluZ19kZWNvZGVyL2xpYi9zdHJpbmdfZGVjb2Rlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcmVhZGFibGUtc3RyZWFtQDMuNi4yL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvZW5kLW9mLXN0cmVhbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcmVhZGFibGUtc3RyZWFtQDMuNi4yL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvYXN5bmNfaXRlcmF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3JlYWRhYmxlLXN0cmVhbUAzLjYuMi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9pbnRlcm5hbC9zdHJlYW1zL2Zyb20uanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3JlYWRhYmxlLXN0cmVhbUAzLjYuMi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX3JlYWRhYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yZWFkYWJsZS1zdHJlYW1AMy42LjIvbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV90cmFuc2Zvcm0uanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3JlYWRhYmxlLXN0cmVhbUAzLjYuMi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX3Bhc3N0aHJvdWdoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yZWFkYWJsZS1zdHJlYW1AMy42LjIvbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy9waXBlbGluZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcmVhZGFibGUtc3RyZWFtQDMuNi4yL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vcmVhZGFibGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2JsQDUuMS4wL25vZGVfbW9kdWxlcy9ibC9CdWZmZXJMaXN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9ibEA1LjEuMC9ub2RlX21vZHVsZXMvYmwvYmwuanMiLCAiLi4vc3JjL2NsaS9pbmRleC50cyIsICIuLi9wYWNrYWdlLmpzb24iLCAiLi4vc3JjL2NvcmUvdXRpbHMvZ2V0SW50ZXJuYWxDb25maWcudHMiLCAiLi4vc3JjL2NvcmUvdXRpbHMvY3JlYXRlRnNDYWNoZS50cyIsICIuLi9zcmMvY29yZS91dGlscy9mcy50cyIsICIuLi9zcmMvY29yZS91dGlscy9lbnRyeXBvaW50cy50cyIsICIuLi9zcmMvY29yZS91dGlscy9wYXRocy50cyIsICIuLi9zcmMvY29yZS92aXRlLXBsdWdpbnMvZGV2SHRtbFByZXJlbmRlci50cyIsICIuLi9zcmMvY29yZS92aXRlLXBsdWdpbnMvZGV2U2VydmVyR2xvYmFscy50cyIsICIuLi9zcmMvY29yZS91dGlscy9uZXR3b3JrLnRzIiwgIi4uL3NyYy9jb3JlL3V0aWxzL3Byb21pc2VzLnRzIiwgIi4uL3NyYy9jb3JlL3ZpdGUtcGx1Z2lucy9kb3dubG9hZC50cyIsICIuLi9zcmMvY29yZS92aXRlLXBsdWdpbnMvbXVsdGlwYWdlTW92ZS50cyIsICIuLi9zcmMvY29yZS92aXRlLXBsdWdpbnMvdW5pbXBvcnQudHMiLCAiLi4vc3JjL2NvcmUvdXRpbHMvYXV0by1pbXBvcnRzLnRzIiwgIi4uL3NyYy9jb3JlL3ZpdGUtcGx1Z2lucy92aXJ0dWFsRW50cnlwb2ludC50cyIsICIuLi9zcmMvY29yZS92aXRlLXBsdWdpbnMvdHNjb25maWdQYXRocy50cyIsICIuLi9zcmMvY29yZS92aXRlLXBsdWdpbnMvbm9vcEJhY2tncm91bmQudHMiLCAiLi4vc3JjL2NvcmUvdml0ZS1wbHVnaW5zL2Nzc0VudHJ5cG9pbnRzLnRzIiwgIi4uL3NyYy9jb3JlL3V0aWxzL2dsb2JhbHMudHMiLCAiLi4vc3JjL2luZGV4LnRzIiwgIi4uL3NyYy9jb3JlL3V0aWxzL2FycmF5cy50cyIsICIuLi9zcmMvY29yZS91dGlscy9kZXRlY3REZXZDaGFuZ2VzLnRzIiwgIi4uL3NyYy9jb3JlL2J1aWxkL2J1aWxkRW50cnlwb2ludHMudHMiLCAiLi4vc3JjL2NvcmUvdXRpbHMvcmVtb3ZlRW1wdHlEaXJzLnRzIiwgIi4uL3NyYy9jb3JlL3V0aWxzL3B1YmxpYy50cyIsICIuLi9zcmMvY29yZS9idWlsZC9maW5kRW50cnlwb2ludHMudHMiLCAiLi4vc3JjL2NvcmUvdXRpbHMvaW1wb3J0RW50cnlwb2ludEZpbGUudHMiLCAiLi4vc3JjL2NvcmUvdXRpbHMvc3RyaW5ncy50cyIsICIuLi9zcmMvY29yZS9idWlsZC9nZW5lcmF0ZVR5cGVzRGlyLnRzIiwgIi4uL3NyYy9jb3JlL3V0aWxzL2kxOG4udHMiLCAiLi4vc3JjL2NvcmUvdXRpbHMvbWFuaWZlc3QudHMiLCAiLi4vc3JjL2NvcmUvdXRpbHMvQ29udGVudFNlY3VyaXR5UG9saWN5LnRzIiwgIi4uL3NyYy9jb3JlL3V0aWxzL2NvbnRlbnQtc2NyaXB0cy50cyIsICIuLi9zcmMvY29yZS91dGlscy9wYWNrYWdlLnRzIiwgIi4uL3NyYy9jb3JlL2J1aWxkLnRzIiwgIi4uL3NyYy9jb3JlL3V0aWxzL2dyb3VwRW50cnlwb2ludHMudHMiLCAiLi4vc3JjL2NvcmUvdXRpbHMvZm9ybWF0RHVyYXRpb24udHMiLCAiLi4vc3JjL2NvcmUvbG9nL3ByaW50QnVpbGRTdW1tYXJ5LnRzIiwgIi4uL3NyYy9jb3JlL2xvZy9wcmludEZpbGVMaXN0LnRzIiwgIi4uL3NyYy9jb3JlL2xvZy9wcmludFRhYmxlLnRzIiwgIi4uL3NyYy9jb3JlL3NlcnZlci50cyIsICIuLi9zcmMvY29yZS9ydW5uZXJzL2NyZWF0ZVdlYkV4dFJ1bm5lci50cyIsICIuLi9zcmMvY29yZS9jbGVhbi50cyIsICIuLi9zcmMvY2xpL3V0aWxzL2RlZmluZUNvbW1hbmQudHMiLCAiLi4vc3JjL2NvcmUvbG9nL3ByaW50SGVhZGVyLnRzIiwgIi4uL3NyYy9jbGkvY29tbWFuZHMvYnVpbGQudHMiLCAiLi4vc3JjL2NsaS9jb21tYW5kcy9kZXYudHMiLCAiLi4vc3JjL2NsaS9jb21tYW5kcy9pbml0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9vcmFANy4wLjEvbm9kZV9tb2R1bGVzL29yYS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhbGtANS4zLjAvbm9kZV9tb2R1bGVzL2NoYWxrL3NvdXJjZS92ZW5kb3IvYW5zaS1zdHlsZXMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYWxrQDUuMy4wL25vZGVfbW9kdWxlcy9jaGFsay9zb3VyY2UvdmVuZG9yL3N1cHBvcnRzLWNvbG9yL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFsa0A1LjMuMC9ub2RlX21vZHVsZXMvY2hhbGsvc291cmNlL3V0aWxpdGllcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhbGtANS4zLjAvbm9kZV9tb2R1bGVzL2NoYWxrL3NvdXJjZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2xpLWN1cnNvckA0LjAuMC9ub2RlX21vZHVsZXMvY2xpLWN1cnNvci9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcmVzdG9yZS1jdXJzb3JANC4wLjAvbm9kZV9tb2R1bGVzL3Jlc3RvcmUtY3Vyc29yL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9pcy11bmljb2RlLXN1cHBvcnRlZEAxLjMuMC9ub2RlX21vZHVsZXMvaXMtdW5pY29kZS1zdXBwb3J0ZWQvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2xvZy1zeW1ib2xzQDUuMS4wL25vZGVfbW9kdWxlcy9sb2ctc3ltYm9scy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vYW5zaS1yZWdleEA2LjAuMS9ub2RlX21vZHVsZXMvYW5zaS1yZWdleC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vc3RyaXAtYW5zaUA3LjEuMC9ub2RlX21vZHVsZXMvc3RyaXAtYW5zaS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vc3RyaW5nLXdpZHRoQDYuMS4wL25vZGVfbW9kdWxlcy9zdHJpbmctd2lkdGgvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2Vtb2ppLXJlZ2V4QDEwLjIuMS9ub2RlX21vZHVsZXMvZW1vamktcmVnZXgvaW5kZXgubWpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9pcy1pbnRlcmFjdGl2ZUAyLjAuMC9ub2RlX21vZHVsZXMvaXMtaW50ZXJhY3RpdmUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3N0ZGluLWRpc2NhcmRlckAwLjEuMC9ub2RlX21vZHVsZXMvc3RkaW4tZGlzY2FyZGVyL2luZGV4LmpzIiwgIi4uL3NyYy9jbGkvY29tbWFuZHMvcHJlcGFyZS50cyIsICIuLi9zcmMvY2xpL2NvbW1hbmRzL3B1Ymxpc2gudHMiLCAiLi4vc3JjL2NvcmUvemlwLnRzIiwgIi4uL3NyYy9jbGkvY29tbWFuZHMvemlwLnRzIiwgIi4uL3NyYy9jbGkvY29tbWFuZHMvY2xlYW4udHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIid1c2Ugc3RyaWN0JztcblxuY29uc3QgbWltaWNGbiA9ICh0bywgZnJvbSkgPT4ge1xuXHRmb3IgKGNvbnN0IHByb3Agb2YgUmVmbGVjdC5vd25LZXlzKGZyb20pKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHRvLCBwcm9wLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGZyb20sIHByb3ApKTtcblx0fVxuXG5cdHJldHVybiB0bztcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gbWltaWNGbjtcbi8vIFRPRE86IFJlbW92ZSB0aGlzIGZvciB0aGUgbmV4dCBtYWpvciByZWxlYXNlXG5tb2R1bGUuZXhwb3J0cy5kZWZhdWx0ID0gbWltaWNGbjtcbiIsICIndXNlIHN0cmljdCc7XG5jb25zdCBtaW1pY0ZuID0gcmVxdWlyZSgnbWltaWMtZm4nKTtcblxuY29uc3QgY2FsbGVkRnVuY3Rpb25zID0gbmV3IFdlYWtNYXAoKTtcblxuY29uc3Qgb25ldGltZSA9IChmdW5jdGlvbl8sIG9wdGlvbnMgPSB7fSkgPT4ge1xuXHRpZiAodHlwZW9mIGZ1bmN0aW9uXyAhPT0gJ2Z1bmN0aW9uJykge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIGEgZnVuY3Rpb24nKTtcblx0fVxuXG5cdGxldCByZXR1cm5WYWx1ZTtcblx0bGV0IGNhbGxDb3VudCA9IDA7XG5cdGNvbnN0IGZ1bmN0aW9uTmFtZSA9IGZ1bmN0aW9uXy5kaXNwbGF5TmFtZSB8fCBmdW5jdGlvbl8ubmFtZSB8fCAnPGFub255bW91cz4nO1xuXG5cdGNvbnN0IG9uZXRpbWUgPSBmdW5jdGlvbiAoLi4uYXJndW1lbnRzXykge1xuXHRcdGNhbGxlZEZ1bmN0aW9ucy5zZXQob25ldGltZSwgKytjYWxsQ291bnQpO1xuXG5cdFx0aWYgKGNhbGxDb3VudCA9PT0gMSkge1xuXHRcdFx0cmV0dXJuVmFsdWUgPSBmdW5jdGlvbl8uYXBwbHkodGhpcywgYXJndW1lbnRzXyk7XG5cdFx0XHRmdW5jdGlvbl8gPSBudWxsO1xuXHRcdH0gZWxzZSBpZiAob3B0aW9ucy50aHJvdyA9PT0gdHJ1ZSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKGBGdW5jdGlvbiBcXGAke2Z1bmN0aW9uTmFtZX1cXGAgY2FuIG9ubHkgYmUgY2FsbGVkIG9uY2VgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmV0dXJuVmFsdWU7XG5cdH07XG5cblx0bWltaWNGbihvbmV0aW1lLCBmdW5jdGlvbl8pO1xuXHRjYWxsZWRGdW5jdGlvbnMuc2V0KG9uZXRpbWUsIGNhbGxDb3VudCk7XG5cblx0cmV0dXJuIG9uZXRpbWU7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IG9uZXRpbWU7XG4vLyBUT0RPOiBSZW1vdmUgdGhpcyBmb3IgdGhlIG5leHQgbWFqb3IgcmVsZWFzZVxubW9kdWxlLmV4cG9ydHMuZGVmYXVsdCA9IG9uZXRpbWU7XG5cbm1vZHVsZS5leHBvcnRzLmNhbGxDb3VudCA9IGZ1bmN0aW9uXyA9PiB7XG5cdGlmICghY2FsbGVkRnVuY3Rpb25zLmhhcyhmdW5jdGlvbl8pKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKGBUaGUgZ2l2ZW4gZnVuY3Rpb24gXFxgJHtmdW5jdGlvbl8ubmFtZX1cXGAgaXMgbm90IHdyYXBwZWQgYnkgdGhlIFxcYG9uZXRpbWVcXGAgcGFja2FnZWApO1xuXHR9XG5cblx0cmV0dXJuIGNhbGxlZEZ1bmN0aW9ucy5nZXQoZnVuY3Rpb25fKTtcbn07XG4iLCAiLy8gVGhpcyBpcyBub3QgdGhlIHNldCBvZiBhbGwgcG9zc2libGUgc2lnbmFscy5cbi8vXG4vLyBJdCBJUywgaG93ZXZlciwgdGhlIHNldCBvZiBhbGwgc2lnbmFscyB0aGF0IHRyaWdnZXJcbi8vIGFuIGV4aXQgb24gZWl0aGVyIExpbnV4IG9yIEJTRCBzeXN0ZW1zLiAgTGludXggaXMgYVxuLy8gc3VwZXJzZXQgb2YgdGhlIHNpZ25hbCBuYW1lcyBzdXBwb3J0ZWQgb24gQlNELCBhbmRcbi8vIHRoZSB1bmtub3duIHNpZ25hbHMganVzdCBmYWlsIHRvIHJlZ2lzdGVyLCBzbyB3ZSBjYW5cbi8vIGNhdGNoIHRoYXQgZWFzaWx5IGVub3VnaC5cbi8vXG4vLyBEb24ndCBib3RoZXIgd2l0aCBTSUdLSUxMLiAgSXQncyB1bmNhdGNoYWJsZSwgd2hpY2hcbi8vIG1lYW5zIHRoYXQgd2UgY2FuJ3QgZmlyZSBhbnkgY2FsbGJhY2tzIGFueXdheS5cbi8vXG4vLyBJZiBhIHVzZXIgZG9lcyBoYXBwZW4gdG8gcmVnaXN0ZXIgYSBoYW5kbGVyIG9uIGEgbm9uLVxuLy8gZmF0YWwgc2lnbmFsIGxpa2UgU0lHV0lOQ0ggb3Igc29tZXRoaW5nLCBhbmQgdGhlblxuLy8gZXhpdCwgaXQnbGwgZW5kIHVwIGZpcmluZyBgcHJvY2Vzcy5lbWl0KCdleGl0JylgLCBzb1xuLy8gdGhlIGhhbmRsZXIgd2lsbCBiZSBmaXJlZCBhbnl3YXkuXG4vL1xuLy8gU0lHQlVTLCBTSUdGUEUsIFNJR1NFR1YgYW5kIFNJR0lMTCwgd2hlbiBub3QgcmFpc2VkXG4vLyBhcnRpZmljaWFsbHksIGluaGVyZW50bHkgbGVhdmUgdGhlIHByb2Nlc3MgaW4gYVxuLy8gc3RhdGUgZnJvbSB3aGljaCBpdCBpcyBub3Qgc2FmZSB0byB0cnkgYW5kIGVudGVyIEpTXG4vLyBsaXN0ZW5lcnMuXG5tb2R1bGUuZXhwb3J0cyA9IFtcbiAgJ1NJR0FCUlQnLFxuICAnU0lHQUxSTScsXG4gICdTSUdIVVAnLFxuICAnU0lHSU5UJyxcbiAgJ1NJR1RFUk0nXG5dXG5cbmlmIChwcm9jZXNzLnBsYXRmb3JtICE9PSAnd2luMzInKSB7XG4gIG1vZHVsZS5leHBvcnRzLnB1c2goXG4gICAgJ1NJR1ZUQUxSTScsXG4gICAgJ1NJR1hDUFUnLFxuICAgICdTSUdYRlNaJyxcbiAgICAnU0lHVVNSMicsXG4gICAgJ1NJR1RSQVAnLFxuICAgICdTSUdTWVMnLFxuICAgICdTSUdRVUlUJyxcbiAgICAnU0lHSU9UJ1xuICAgIC8vIHNob3VsZCBkZXRlY3QgcHJvZmlsZXIgYW5kIGVuYWJsZS9kaXNhYmxlIGFjY29yZGluZ2x5LlxuICAgIC8vIHNlZSAjMjFcbiAgICAvLyAnU0lHUFJPRidcbiAgKVxufVxuXG5pZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ2xpbnV4Jykge1xuICBtb2R1bGUuZXhwb3J0cy5wdXNoKFxuICAgICdTSUdJTycsXG4gICAgJ1NJR1BPTEwnLFxuICAgICdTSUdQV1InLFxuICAgICdTSUdTVEtGTFQnLFxuICAgICdTSUdVTlVTRUQnXG4gIClcbn1cbiIsICIvLyBOb3RlOiBzaW5jZSBueWMgdXNlcyB0aGlzIG1vZHVsZSB0byBvdXRwdXQgY292ZXJhZ2UsIGFueSBsaW5lc1xuLy8gdGhhdCBhcmUgaW4gdGhlIGRpcmVjdCBzeW5jIGZsb3cgb2YgbnljJ3Mgb3V0cHV0Q292ZXJhZ2UgYXJlXG4vLyBpZ25vcmVkLCBzaW5jZSB3ZSBjYW4gbmV2ZXIgZ2V0IGNvdmVyYWdlIGZvciB0aGVtLlxuLy8gZ3JhYiBhIHJlZmVyZW5jZSB0byBub2RlJ3MgcmVhbCBwcm9jZXNzIG9iamVjdCByaWdodCBhd2F5XG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzXG5cbmNvbnN0IHByb2Nlc3NPayA9IGZ1bmN0aW9uIChwcm9jZXNzKSB7XG4gIHJldHVybiBwcm9jZXNzICYmXG4gICAgdHlwZW9mIHByb2Nlc3MgPT09ICdvYmplY3QnICYmXG4gICAgdHlwZW9mIHByb2Nlc3MucmVtb3ZlTGlzdGVuZXIgPT09ICdmdW5jdGlvbicgJiZcbiAgICB0eXBlb2YgcHJvY2Vzcy5lbWl0ID09PSAnZnVuY3Rpb24nICYmXG4gICAgdHlwZW9mIHByb2Nlc3MucmVhbGx5RXhpdCA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHR5cGVvZiBwcm9jZXNzLmxpc3RlbmVycyA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHR5cGVvZiBwcm9jZXNzLmtpbGwgPT09ICdmdW5jdGlvbicgJiZcbiAgICB0eXBlb2YgcHJvY2Vzcy5waWQgPT09ICdudW1iZXInICYmXG4gICAgdHlwZW9mIHByb2Nlc3Mub24gPT09ICdmdW5jdGlvbidcbn1cblxuLy8gc29tZSBraW5kIG9mIG5vbi1ub2RlIGVudmlyb25tZW50LCBqdXN0IG5vLW9wXG4vKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbmlmICghcHJvY2Vzc09rKHByb2Nlc3MpKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7fVxuICB9XG59IGVsc2Uge1xuICB2YXIgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcbiAgdmFyIHNpZ25hbHMgPSByZXF1aXJlKCcuL3NpZ25hbHMuanMnKVxuICB2YXIgaXNXaW4gPSAvXndpbi9pLnRlc3QocHJvY2Vzcy5wbGF0Zm9ybSlcblxuICB2YXIgRUUgPSByZXF1aXJlKCdldmVudHMnKVxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKHR5cGVvZiBFRSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIEVFID0gRUUuRXZlbnRFbWl0dGVyXG4gIH1cblxuICB2YXIgZW1pdHRlclxuICBpZiAocHJvY2Vzcy5fX3NpZ25hbF9leGl0X2VtaXR0ZXJfXykge1xuICAgIGVtaXR0ZXIgPSBwcm9jZXNzLl9fc2lnbmFsX2V4aXRfZW1pdHRlcl9fXG4gIH0gZWxzZSB7XG4gICAgZW1pdHRlciA9IHByb2Nlc3MuX19zaWduYWxfZXhpdF9lbWl0dGVyX18gPSBuZXcgRUUoKVxuICAgIGVtaXR0ZXIuY291bnQgPSAwXG4gICAgZW1pdHRlci5lbWl0dGVkID0ge31cbiAgfVxuXG4gIC8vIEJlY2F1c2UgdGhpcyBlbWl0dGVyIGlzIGEgZ2xvYmFsLCB3ZSBoYXZlIHRvIGNoZWNrIHRvIHNlZSBpZiBhXG4gIC8vIHByZXZpb3VzIHZlcnNpb24gb2YgdGhpcyBsaWJyYXJ5IGZhaWxlZCB0byBlbmFibGUgaW5maW5pdGUgbGlzdGVuZXJzLlxuICAvLyBJIGtub3cgd2hhdCB5b3UncmUgYWJvdXQgdG8gc2F5LiAgQnV0IGxpdGVyYWxseSBldmVyeXRoaW5nIGFib3V0XG4gIC8vIHNpZ25hbC1leGl0IGlzIGEgY29tcHJvbWlzZSB3aXRoIGV2aWwuICBHZXQgdXNlZCB0byBpdC5cbiAgaWYgKCFlbWl0dGVyLmluZmluaXRlKSB7XG4gICAgZW1pdHRlci5zZXRNYXhMaXN0ZW5lcnMoSW5maW5pdHkpXG4gICAgZW1pdHRlci5pbmZpbml0ZSA9IHRydWVcbiAgfVxuXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGNiLCBvcHRzKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKCFwcm9jZXNzT2soZ2xvYmFsLnByb2Nlc3MpKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkge31cbiAgICB9XG4gICAgYXNzZXJ0LmVxdWFsKHR5cGVvZiBjYiwgJ2Z1bmN0aW9uJywgJ2EgY2FsbGJhY2sgbXVzdCBiZSBwcm92aWRlZCBmb3IgZXhpdCBoYW5kbGVyJylcblxuICAgIGlmIChsb2FkZWQgPT09IGZhbHNlKSB7XG4gICAgICBsb2FkKClcbiAgICB9XG5cbiAgICB2YXIgZXYgPSAnZXhpdCdcbiAgICBpZiAob3B0cyAmJiBvcHRzLmFsd2F5c0xhc3QpIHtcbiAgICAgIGV2ID0gJ2FmdGVyZXhpdCdcbiAgICB9XG5cbiAgICB2YXIgcmVtb3ZlID0gZnVuY3Rpb24gKCkge1xuICAgICAgZW1pdHRlci5yZW1vdmVMaXN0ZW5lcihldiwgY2IpXG4gICAgICBpZiAoZW1pdHRlci5saXN0ZW5lcnMoJ2V4aXQnKS5sZW5ndGggPT09IDAgJiZcbiAgICAgICAgICBlbWl0dGVyLmxpc3RlbmVycygnYWZ0ZXJleGl0JykubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHVubG9hZCgpXG4gICAgICB9XG4gICAgfVxuICAgIGVtaXR0ZXIub24oZXYsIGNiKVxuXG4gICAgcmV0dXJuIHJlbW92ZVxuICB9XG5cbiAgdmFyIHVubG9hZCA9IGZ1bmN0aW9uIHVubG9hZCAoKSB7XG4gICAgaWYgKCFsb2FkZWQgfHwgIXByb2Nlc3NPayhnbG9iYWwucHJvY2VzcykpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBsb2FkZWQgPSBmYWxzZVxuXG4gICAgc2lnbmFscy5mb3JFYWNoKGZ1bmN0aW9uIChzaWcpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHByb2Nlc3MucmVtb3ZlTGlzdGVuZXIoc2lnLCBzaWdMaXN0ZW5lcnNbc2lnXSlcbiAgICAgIH0gY2F0Y2ggKGVyKSB7fVxuICAgIH0pXG4gICAgcHJvY2Vzcy5lbWl0ID0gb3JpZ2luYWxQcm9jZXNzRW1pdFxuICAgIHByb2Nlc3MucmVhbGx5RXhpdCA9IG9yaWdpbmFsUHJvY2Vzc1JlYWxseUV4aXRcbiAgICBlbWl0dGVyLmNvdW50IC09IDFcbiAgfVxuICBtb2R1bGUuZXhwb3J0cy51bmxvYWQgPSB1bmxvYWRcblxuICB2YXIgZW1pdCA9IGZ1bmN0aW9uIGVtaXQgKGV2ZW50LCBjb2RlLCBzaWduYWwpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoZW1pdHRlci5lbWl0dGVkW2V2ZW50XSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGVtaXR0ZXIuZW1pdHRlZFtldmVudF0gPSB0cnVlXG4gICAgZW1pdHRlci5lbWl0KGV2ZW50LCBjb2RlLCBzaWduYWwpXG4gIH1cblxuICAvLyB7IDxzaWduYWw+OiA8bGlzdGVuZXIgZm4+LCAuLi4gfVxuICB2YXIgc2lnTGlzdGVuZXJzID0ge31cbiAgc2lnbmFscy5mb3JFYWNoKGZ1bmN0aW9uIChzaWcpIHtcbiAgICBzaWdMaXN0ZW5lcnNbc2lnXSA9IGZ1bmN0aW9uIGxpc3RlbmVyICgpIHtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgaWYgKCFwcm9jZXNzT2soZ2xvYmFsLnByb2Nlc3MpKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgLy8gSWYgdGhlcmUgYXJlIG5vIG90aGVyIGxpc3RlbmVycywgYW4gZXhpdCBpcyBjb21pbmchXG4gICAgICAvLyBTaW1wbGVzdCB3YXk6IHJlbW92ZSB1cyBhbmQgdGhlbiByZS1zZW5kIHRoZSBzaWduYWwuXG4gICAgICAvLyBXZSBrbm93IHRoYXQgdGhpcyB3aWxsIGtpbGwgdGhlIHByb2Nlc3MsIHNvIHdlIGNhblxuICAgICAgLy8gc2FmZWx5IGVtaXQgbm93LlxuICAgICAgdmFyIGxpc3RlbmVycyA9IHByb2Nlc3MubGlzdGVuZXJzKHNpZylcbiAgICAgIGlmIChsaXN0ZW5lcnMubGVuZ3RoID09PSBlbWl0dGVyLmNvdW50KSB7XG4gICAgICAgIHVubG9hZCgpXG4gICAgICAgIGVtaXQoJ2V4aXQnLCBudWxsLCBzaWcpXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIGVtaXQoJ2FmdGVyZXhpdCcsIG51bGwsIHNpZylcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgaWYgKGlzV2luICYmIHNpZyA9PT0gJ1NJR0hVUCcpIHtcbiAgICAgICAgICAvLyBcIlNJR0hVUFwiIHRocm93cyBhbiBgRU5PU1lTYCBlcnJvciBvbiBXaW5kb3dzLFxuICAgICAgICAgIC8vIHNvIHVzZSBhIHN1cHBvcnRlZCBzaWduYWwgaW5zdGVhZFxuICAgICAgICAgIHNpZyA9ICdTSUdJTlQnXG4gICAgICAgIH1cbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgcHJvY2Vzcy5raWxsKHByb2Nlc3MucGlkLCBzaWcpXG4gICAgICB9XG4gICAgfVxuICB9KVxuXG4gIG1vZHVsZS5leHBvcnRzLnNpZ25hbHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHNpZ25hbHNcbiAgfVxuXG4gIHZhciBsb2FkZWQgPSBmYWxzZVxuXG4gIHZhciBsb2FkID0gZnVuY3Rpb24gbG9hZCAoKSB7XG4gICAgaWYgKGxvYWRlZCB8fCAhcHJvY2Vzc09rKGdsb2JhbC5wcm9jZXNzKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGxvYWRlZCA9IHRydWVcblxuICAgIC8vIFRoaXMgaXMgdGhlIG51bWJlciBvZiBvblNpZ25hbEV4aXQncyB0aGF0IGFyZSBpbiBwbGF5LlxuICAgIC8vIEl0J3MgaW1wb3J0YW50IHNvIHRoYXQgd2UgY2FuIGNvdW50IHRoZSBjb3JyZWN0IG51bWJlciBvZlxuICAgIC8vIGxpc3RlbmVycyBvbiBzaWduYWxzLCBhbmQgZG9uJ3Qgd2FpdCBmb3IgdGhlIG90aGVyIG9uZSB0b1xuICAgIC8vIGhhbmRsZSBpdCBpbnN0ZWFkIG9mIHVzLlxuICAgIGVtaXR0ZXIuY291bnQgKz0gMVxuXG4gICAgc2lnbmFscyA9IHNpZ25hbHMuZmlsdGVyKGZ1bmN0aW9uIChzaWcpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHByb2Nlc3Mub24oc2lnLCBzaWdMaXN0ZW5lcnNbc2lnXSlcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH0gY2F0Y2ggKGVyKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgIH0pXG5cbiAgICBwcm9jZXNzLmVtaXQgPSBwcm9jZXNzRW1pdFxuICAgIHByb2Nlc3MucmVhbGx5RXhpdCA9IHByb2Nlc3NSZWFsbHlFeGl0XG4gIH1cbiAgbW9kdWxlLmV4cG9ydHMubG9hZCA9IGxvYWRcblxuICB2YXIgb3JpZ2luYWxQcm9jZXNzUmVhbGx5RXhpdCA9IHByb2Nlc3MucmVhbGx5RXhpdFxuICB2YXIgcHJvY2Vzc1JlYWxseUV4aXQgPSBmdW5jdGlvbiBwcm9jZXNzUmVhbGx5RXhpdCAoY29kZSkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmICghcHJvY2Vzc09rKGdsb2JhbC5wcm9jZXNzKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHByb2Nlc3MuZXhpdENvZGUgPSBjb2RlIHx8IC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovIDBcbiAgICBlbWl0KCdleGl0JywgcHJvY2Vzcy5leGl0Q29kZSwgbnVsbClcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGVtaXQoJ2FmdGVyZXhpdCcsIHByb2Nlc3MuZXhpdENvZGUsIG51bGwpXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBvcmlnaW5hbFByb2Nlc3NSZWFsbHlFeGl0LmNhbGwocHJvY2VzcywgcHJvY2Vzcy5leGl0Q29kZSlcbiAgfVxuXG4gIHZhciBvcmlnaW5hbFByb2Nlc3NFbWl0ID0gcHJvY2Vzcy5lbWl0XG4gIHZhciBwcm9jZXNzRW1pdCA9IGZ1bmN0aW9uIHByb2Nlc3NFbWl0IChldiwgYXJnKSB7XG4gICAgaWYgKGV2ID09PSAnZXhpdCcgJiYgcHJvY2Vzc09rKGdsb2JhbC5wcm9jZXNzKSkge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgIGlmIChhcmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBwcm9jZXNzLmV4aXRDb2RlID0gYXJnXG4gICAgICB9XG4gICAgICB2YXIgcmV0ID0gb3JpZ2luYWxQcm9jZXNzRW1pdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgZW1pdCgnZXhpdCcsIHByb2Nlc3MuZXhpdENvZGUsIG51bGwpXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgZW1pdCgnYWZ0ZXJleGl0JywgcHJvY2Vzcy5leGl0Q29kZSwgbnVsbClcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICByZXR1cm4gcmV0XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBvcmlnaW5hbFByb2Nlc3NFbWl0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICB9XG4gIH1cbn1cbiIsICJ7XG5cdFwiZG90c1wiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiA4MCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIlx1MjgwQlwiLFxuXHRcdFx0XCJcdTI4MTlcIixcblx0XHRcdFwiXHUyODM5XCIsXG5cdFx0XHRcIlx1MjgzOFwiLFxuXHRcdFx0XCJcdTI4M0NcIixcblx0XHRcdFwiXHUyODM0XCIsXG5cdFx0XHRcIlx1MjgyNlwiLFxuXHRcdFx0XCJcdTI4MjdcIixcblx0XHRcdFwiXHUyODA3XCIsXG5cdFx0XHRcIlx1MjgwRlwiXG5cdFx0XVxuXHR9LFxuXHRcImRvdHMyXCI6IHtcblx0XHRcImludGVydmFsXCI6IDgwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHUyOEZFXCIsXG5cdFx0XHRcIlx1MjhGRFwiLFxuXHRcdFx0XCJcdTI4RkJcIixcblx0XHRcdFwiXHUyOEJGXCIsXG5cdFx0XHRcIlx1Mjg3RlwiLFxuXHRcdFx0XCJcdTI4REZcIixcblx0XHRcdFwiXHUyOEVGXCIsXG5cdFx0XHRcIlx1MjhGN1wiXG5cdFx0XVxuXHR9LFxuXHRcImRvdHMzXCI6IHtcblx0XHRcImludGVydmFsXCI6IDgwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHUyODBCXCIsXG5cdFx0XHRcIlx1MjgxOVwiLFxuXHRcdFx0XCJcdTI4MUFcIixcblx0XHRcdFwiXHUyODFFXCIsXG5cdFx0XHRcIlx1MjgxNlwiLFxuXHRcdFx0XCJcdTI4MjZcIixcblx0XHRcdFwiXHUyODM0XCIsXG5cdFx0XHRcIlx1MjgzMlwiLFxuXHRcdFx0XCJcdTI4MzNcIixcblx0XHRcdFwiXHUyODEzXCJcblx0XHRdXG5cdH0sXG5cdFwiZG90czRcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogODAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCJcdTI4MDRcIixcblx0XHRcdFwiXHUyODA2XCIsXG5cdFx0XHRcIlx1MjgwN1wiLFxuXHRcdFx0XCJcdTI4MEJcIixcblx0XHRcdFwiXHUyODE5XCIsXG5cdFx0XHRcIlx1MjgzOFwiLFxuXHRcdFx0XCJcdTI4MzBcIixcblx0XHRcdFwiXHUyODIwXCIsXG5cdFx0XHRcIlx1MjgzMFwiLFxuXHRcdFx0XCJcdTI4MzhcIixcblx0XHRcdFwiXHUyODE5XCIsXG5cdFx0XHRcIlx1MjgwQlwiLFxuXHRcdFx0XCJcdTI4MDdcIixcblx0XHRcdFwiXHUyODA2XCJcblx0XHRdXG5cdH0sXG5cdFwiZG90czVcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogODAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCJcdTI4MEJcIixcblx0XHRcdFwiXHUyODE5XCIsXG5cdFx0XHRcIlx1MjgxQVwiLFxuXHRcdFx0XCJcdTI4MTJcIixcblx0XHRcdFwiXHUyODAyXCIsXG5cdFx0XHRcIlx1MjgwMlwiLFxuXHRcdFx0XCJcdTI4MTJcIixcblx0XHRcdFwiXHUyODMyXCIsXG5cdFx0XHRcIlx1MjgzNFwiLFxuXHRcdFx0XCJcdTI4MjZcIixcblx0XHRcdFwiXHUyODE2XCIsXG5cdFx0XHRcIlx1MjgxMlwiLFxuXHRcdFx0XCJcdTI4MTBcIixcblx0XHRcdFwiXHUyODEwXCIsXG5cdFx0XHRcIlx1MjgxMlwiLFxuXHRcdFx0XCJcdTI4MTNcIixcblx0XHRcdFwiXHUyODBCXCJcblx0XHRdXG5cdH0sXG5cdFwiZG90czZcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogODAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCJcdTI4MDFcIixcblx0XHRcdFwiXHUyODA5XCIsXG5cdFx0XHRcIlx1MjgxOVwiLFxuXHRcdFx0XCJcdTI4MUFcIixcblx0XHRcdFwiXHUyODEyXCIsXG5cdFx0XHRcIlx1MjgwMlwiLFxuXHRcdFx0XCJcdTI4MDJcIixcblx0XHRcdFwiXHUyODEyXCIsXG5cdFx0XHRcIlx1MjgzMlwiLFxuXHRcdFx0XCJcdTI4MzRcIixcblx0XHRcdFwiXHUyODI0XCIsXG5cdFx0XHRcIlx1MjgwNFwiLFxuXHRcdFx0XCJcdTI4MDRcIixcblx0XHRcdFwiXHUyODI0XCIsXG5cdFx0XHRcIlx1MjgzNFwiLFxuXHRcdFx0XCJcdTI4MzJcIixcblx0XHRcdFwiXHUyODEyXCIsXG5cdFx0XHRcIlx1MjgwMlwiLFxuXHRcdFx0XCJcdTI4MDJcIixcblx0XHRcdFwiXHUyODEyXCIsXG5cdFx0XHRcIlx1MjgxQVwiLFxuXHRcdFx0XCJcdTI4MTlcIixcblx0XHRcdFwiXHUyODA5XCIsXG5cdFx0XHRcIlx1MjgwMVwiXG5cdFx0XVxuXHR9LFxuXHRcImRvdHM3XCI6IHtcblx0XHRcImludGVydmFsXCI6IDgwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHUyODA4XCIsXG5cdFx0XHRcIlx1MjgwOVwiLFxuXHRcdFx0XCJcdTI4MEJcIixcblx0XHRcdFwiXHUyODEzXCIsXG5cdFx0XHRcIlx1MjgxMlwiLFxuXHRcdFx0XCJcdTI4MTBcIixcblx0XHRcdFwiXHUyODEwXCIsXG5cdFx0XHRcIlx1MjgxMlwiLFxuXHRcdFx0XCJcdTI4MTZcIixcblx0XHRcdFwiXHUyODI2XCIsXG5cdFx0XHRcIlx1MjgyNFwiLFxuXHRcdFx0XCJcdTI4MjBcIixcblx0XHRcdFwiXHUyODIwXCIsXG5cdFx0XHRcIlx1MjgyNFwiLFxuXHRcdFx0XCJcdTI4MjZcIixcblx0XHRcdFwiXHUyODE2XCIsXG5cdFx0XHRcIlx1MjgxMlwiLFxuXHRcdFx0XCJcdTI4MTBcIixcblx0XHRcdFwiXHUyODEwXCIsXG5cdFx0XHRcIlx1MjgxMlwiLFxuXHRcdFx0XCJcdTI4MTNcIixcblx0XHRcdFwiXHUyODBCXCIsXG5cdFx0XHRcIlx1MjgwOVwiLFxuXHRcdFx0XCJcdTI4MDhcIlxuXHRcdF1cblx0fSxcblx0XCJkb3RzOFwiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiA4MCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIlx1MjgwMVwiLFxuXHRcdFx0XCJcdTI4MDFcIixcblx0XHRcdFwiXHUyODA5XCIsXG5cdFx0XHRcIlx1MjgxOVwiLFxuXHRcdFx0XCJcdTI4MUFcIixcblx0XHRcdFwiXHUyODEyXCIsXG5cdFx0XHRcIlx1MjgwMlwiLFxuXHRcdFx0XCJcdTI4MDJcIixcblx0XHRcdFwiXHUyODEyXCIsXG5cdFx0XHRcIlx1MjgzMlwiLFxuXHRcdFx0XCJcdTI4MzRcIixcblx0XHRcdFwiXHUyODI0XCIsXG5cdFx0XHRcIlx1MjgwNFwiLFxuXHRcdFx0XCJcdTI4MDRcIixcblx0XHRcdFwiXHUyODI0XCIsXG5cdFx0XHRcIlx1MjgyMFwiLFxuXHRcdFx0XCJcdTI4MjBcIixcblx0XHRcdFwiXHUyODI0XCIsXG5cdFx0XHRcIlx1MjgyNlwiLFxuXHRcdFx0XCJcdTI4MTZcIixcblx0XHRcdFwiXHUyODEyXCIsXG5cdFx0XHRcIlx1MjgxMFwiLFxuXHRcdFx0XCJcdTI4MTBcIixcblx0XHRcdFwiXHUyODEyXCIsXG5cdFx0XHRcIlx1MjgxM1wiLFxuXHRcdFx0XCJcdTI4MEJcIixcblx0XHRcdFwiXHUyODA5XCIsXG5cdFx0XHRcIlx1MjgwOFwiLFxuXHRcdFx0XCJcdTI4MDhcIlxuXHRcdF1cblx0fSxcblx0XCJkb3RzOVwiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiA4MCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIlx1MjhCOVwiLFxuXHRcdFx0XCJcdTI4QkFcIixcblx0XHRcdFwiXHUyOEJDXCIsXG5cdFx0XHRcIlx1MjhGOFwiLFxuXHRcdFx0XCJcdTI4QzdcIixcblx0XHRcdFwiXHUyODY3XCIsXG5cdFx0XHRcIlx1Mjg1N1wiLFxuXHRcdFx0XCJcdTI4NEZcIlxuXHRcdF1cblx0fSxcblx0XCJkb3RzMTBcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogODAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCJcdTI4ODRcIixcblx0XHRcdFwiXHUyODgyXCIsXG5cdFx0XHRcIlx1Mjg4MVwiLFxuXHRcdFx0XCJcdTI4NDFcIixcblx0XHRcdFwiXHUyODQ4XCIsXG5cdFx0XHRcIlx1Mjg1MFwiLFxuXHRcdFx0XCJcdTI4NjBcIlxuXHRcdF1cblx0fSxcblx0XCJkb3RzMTFcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogMTAwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHUyODAxXCIsXG5cdFx0XHRcIlx1MjgwMlwiLFxuXHRcdFx0XCJcdTI4MDRcIixcblx0XHRcdFwiXHUyODQwXCIsXG5cdFx0XHRcIlx1Mjg4MFwiLFxuXHRcdFx0XCJcdTI4MjBcIixcblx0XHRcdFwiXHUyODEwXCIsXG5cdFx0XHRcIlx1MjgwOFwiXG5cdFx0XVxuXHR9LFxuXHRcImRvdHMxMlwiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiA4MCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIlx1Mjg4MFx1MjgwMFwiLFxuXHRcdFx0XCJcdTI4NDBcdTI4MDBcIixcblx0XHRcdFwiXHUyODA0XHUyODAwXCIsXG5cdFx0XHRcIlx1Mjg4Mlx1MjgwMFwiLFxuXHRcdFx0XCJcdTI4NDJcdTI4MDBcIixcblx0XHRcdFwiXHUyODA1XHUyODAwXCIsXG5cdFx0XHRcIlx1Mjg4M1x1MjgwMFwiLFxuXHRcdFx0XCJcdTI4NDNcdTI4MDBcIixcblx0XHRcdFwiXHUyODBEXHUyODAwXCIsXG5cdFx0XHRcIlx1Mjg4Qlx1MjgwMFwiLFxuXHRcdFx0XCJcdTI4NEJcdTI4MDBcIixcblx0XHRcdFwiXHUyODBEXHUyODAxXCIsXG5cdFx0XHRcIlx1Mjg4Qlx1MjgwMVwiLFxuXHRcdFx0XCJcdTI4NEJcdTI4MDFcIixcblx0XHRcdFwiXHUyODBEXHUyODA5XCIsXG5cdFx0XHRcIlx1MjgwQlx1MjgwOVwiLFxuXHRcdFx0XCJcdTI4MEJcdTI4MDlcIixcblx0XHRcdFwiXHUyODA5XHUyODE5XCIsXG5cdFx0XHRcIlx1MjgwOVx1MjgxOVwiLFxuXHRcdFx0XCJcdTI4MDlcdTI4MjlcIixcblx0XHRcdFwiXHUyODA4XHUyODk5XCIsXG5cdFx0XHRcIlx1MjgwOFx1Mjg1OVwiLFxuXHRcdFx0XCJcdTI4ODhcdTI4MjlcIixcblx0XHRcdFwiXHUyODQwXHUyODk5XCIsXG5cdFx0XHRcIlx1MjgwNFx1Mjg1OVwiLFxuXHRcdFx0XCJcdTI4ODJcdTI4MjlcIixcblx0XHRcdFwiXHUyODQyXHUyODk4XCIsXG5cdFx0XHRcIlx1MjgwNVx1Mjg1OFwiLFxuXHRcdFx0XCJcdTI4ODNcdTI4MjhcIixcblx0XHRcdFwiXHUyODQzXHUyODkwXCIsXG5cdFx0XHRcIlx1MjgwRFx1Mjg1MFwiLFxuXHRcdFx0XCJcdTI4OEJcdTI4MjBcIixcblx0XHRcdFwiXHUyODRCXHUyODgwXCIsXG5cdFx0XHRcIlx1MjgwRFx1Mjg0MVwiLFxuXHRcdFx0XCJcdTI4OEJcdTI4MDFcIixcblx0XHRcdFwiXHUyODRCXHUyODAxXCIsXG5cdFx0XHRcIlx1MjgwRFx1MjgwOVwiLFxuXHRcdFx0XCJcdTI4MEJcdTI4MDlcIixcblx0XHRcdFwiXHUyODBCXHUyODA5XCIsXG5cdFx0XHRcIlx1MjgwOVx1MjgxOVwiLFxuXHRcdFx0XCJcdTI4MDlcdTI4MTlcIixcblx0XHRcdFwiXHUyODA5XHUyODI5XCIsXG5cdFx0XHRcIlx1MjgwOFx1Mjg5OVwiLFxuXHRcdFx0XCJcdTI4MDhcdTI4NTlcIixcblx0XHRcdFwiXHUyODA4XHUyODI5XCIsXG5cdFx0XHRcIlx1MjgwMFx1Mjg5OVwiLFxuXHRcdFx0XCJcdTI4MDBcdTI4NTlcIixcblx0XHRcdFwiXHUyODAwXHUyODI5XCIsXG5cdFx0XHRcIlx1MjgwMFx1Mjg5OFwiLFxuXHRcdFx0XCJcdTI4MDBcdTI4NThcIixcblx0XHRcdFwiXHUyODAwXHUyODI4XCIsXG5cdFx0XHRcIlx1MjgwMFx1Mjg5MFwiLFxuXHRcdFx0XCJcdTI4MDBcdTI4NTBcIixcblx0XHRcdFwiXHUyODAwXHUyODIwXCIsXG5cdFx0XHRcIlx1MjgwMFx1Mjg4MFwiLFxuXHRcdFx0XCJcdTI4MDBcdTI4NDBcIlxuXHRcdF1cblx0fSxcblx0XCJkb3RzMTNcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogODAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCJcdTI4RkNcIixcblx0XHRcdFwiXHUyOEY5XCIsXG5cdFx0XHRcIlx1MjhCQlwiLFxuXHRcdFx0XCJcdTI4M0ZcIixcblx0XHRcdFwiXHUyODVGXCIsXG5cdFx0XHRcIlx1MjhDRlwiLFxuXHRcdFx0XCJcdTI4RTdcIixcblx0XHRcdFwiXHUyOEY2XCJcblx0XHRdXG5cdH0sXG5cdFwiZG90czhCaXRcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogODAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCJcdTI4MDBcIixcblx0XHRcdFwiXHUyODAxXCIsXG5cdFx0XHRcIlx1MjgwMlwiLFxuXHRcdFx0XCJcdTI4MDNcIixcblx0XHRcdFwiXHUyODA0XCIsXG5cdFx0XHRcIlx1MjgwNVwiLFxuXHRcdFx0XCJcdTI4MDZcIixcblx0XHRcdFwiXHUyODA3XCIsXG5cdFx0XHRcIlx1Mjg0MFwiLFxuXHRcdFx0XCJcdTI4NDFcIixcblx0XHRcdFwiXHUyODQyXCIsXG5cdFx0XHRcIlx1Mjg0M1wiLFxuXHRcdFx0XCJcdTI4NDRcIixcblx0XHRcdFwiXHUyODQ1XCIsXG5cdFx0XHRcIlx1Mjg0NlwiLFxuXHRcdFx0XCJcdTI4NDdcIixcblx0XHRcdFwiXHUyODA4XCIsXG5cdFx0XHRcIlx1MjgwOVwiLFxuXHRcdFx0XCJcdTI4MEFcIixcblx0XHRcdFwiXHUyODBCXCIsXG5cdFx0XHRcIlx1MjgwQ1wiLFxuXHRcdFx0XCJcdTI4MERcIixcblx0XHRcdFwiXHUyODBFXCIsXG5cdFx0XHRcIlx1MjgwRlwiLFxuXHRcdFx0XCJcdTI4NDhcIixcblx0XHRcdFwiXHUyODQ5XCIsXG5cdFx0XHRcIlx1Mjg0QVwiLFxuXHRcdFx0XCJcdTI4NEJcIixcblx0XHRcdFwiXHUyODRDXCIsXG5cdFx0XHRcIlx1Mjg0RFwiLFxuXHRcdFx0XCJcdTI4NEVcIixcblx0XHRcdFwiXHUyODRGXCIsXG5cdFx0XHRcIlx1MjgxMFwiLFxuXHRcdFx0XCJcdTI4MTFcIixcblx0XHRcdFwiXHUyODEyXCIsXG5cdFx0XHRcIlx1MjgxM1wiLFxuXHRcdFx0XCJcdTI4MTRcIixcblx0XHRcdFwiXHUyODE1XCIsXG5cdFx0XHRcIlx1MjgxNlwiLFxuXHRcdFx0XCJcdTI4MTdcIixcblx0XHRcdFwiXHUyODUwXCIsXG5cdFx0XHRcIlx1Mjg1MVwiLFxuXHRcdFx0XCJcdTI4NTJcIixcblx0XHRcdFwiXHUyODUzXCIsXG5cdFx0XHRcIlx1Mjg1NFwiLFxuXHRcdFx0XCJcdTI4NTVcIixcblx0XHRcdFwiXHUyODU2XCIsXG5cdFx0XHRcIlx1Mjg1N1wiLFxuXHRcdFx0XCJcdTI4MThcIixcblx0XHRcdFwiXHUyODE5XCIsXG5cdFx0XHRcIlx1MjgxQVwiLFxuXHRcdFx0XCJcdTI4MUJcIixcblx0XHRcdFwiXHUyODFDXCIsXG5cdFx0XHRcIlx1MjgxRFwiLFxuXHRcdFx0XCJcdTI4MUVcIixcblx0XHRcdFwiXHUyODFGXCIsXG5cdFx0XHRcIlx1Mjg1OFwiLFxuXHRcdFx0XCJcdTI4NTlcIixcblx0XHRcdFwiXHUyODVBXCIsXG5cdFx0XHRcIlx1Mjg1QlwiLFxuXHRcdFx0XCJcdTI4NUNcIixcblx0XHRcdFwiXHUyODVEXCIsXG5cdFx0XHRcIlx1Mjg1RVwiLFxuXHRcdFx0XCJcdTI4NUZcIixcblx0XHRcdFwiXHUyODIwXCIsXG5cdFx0XHRcIlx1MjgyMVwiLFxuXHRcdFx0XCJcdTI4MjJcIixcblx0XHRcdFwiXHUyODIzXCIsXG5cdFx0XHRcIlx1MjgyNFwiLFxuXHRcdFx0XCJcdTI4MjVcIixcblx0XHRcdFwiXHUyODI2XCIsXG5cdFx0XHRcIlx1MjgyN1wiLFxuXHRcdFx0XCJcdTI4NjBcIixcblx0XHRcdFwiXHUyODYxXCIsXG5cdFx0XHRcIlx1Mjg2MlwiLFxuXHRcdFx0XCJcdTI4NjNcIixcblx0XHRcdFwiXHUyODY0XCIsXG5cdFx0XHRcIlx1Mjg2NVwiLFxuXHRcdFx0XCJcdTI4NjZcIixcblx0XHRcdFwiXHUyODY3XCIsXG5cdFx0XHRcIlx1MjgyOFwiLFxuXHRcdFx0XCJcdTI4MjlcIixcblx0XHRcdFwiXHUyODJBXCIsXG5cdFx0XHRcIlx1MjgyQlwiLFxuXHRcdFx0XCJcdTI4MkNcIixcblx0XHRcdFwiXHUyODJEXCIsXG5cdFx0XHRcIlx1MjgyRVwiLFxuXHRcdFx0XCJcdTI4MkZcIixcblx0XHRcdFwiXHUyODY4XCIsXG5cdFx0XHRcIlx1Mjg2OVwiLFxuXHRcdFx0XCJcdTI4NkFcIixcblx0XHRcdFwiXHUyODZCXCIsXG5cdFx0XHRcIlx1Mjg2Q1wiLFxuXHRcdFx0XCJcdTI4NkRcIixcblx0XHRcdFwiXHUyODZFXCIsXG5cdFx0XHRcIlx1Mjg2RlwiLFxuXHRcdFx0XCJcdTI4MzBcIixcblx0XHRcdFwiXHUyODMxXCIsXG5cdFx0XHRcIlx1MjgzMlwiLFxuXHRcdFx0XCJcdTI4MzNcIixcblx0XHRcdFwiXHUyODM0XCIsXG5cdFx0XHRcIlx1MjgzNVwiLFxuXHRcdFx0XCJcdTI4MzZcIixcblx0XHRcdFwiXHUyODM3XCIsXG5cdFx0XHRcIlx1Mjg3MFwiLFxuXHRcdFx0XCJcdTI4NzFcIixcblx0XHRcdFwiXHUyODcyXCIsXG5cdFx0XHRcIlx1Mjg3M1wiLFxuXHRcdFx0XCJcdTI4NzRcIixcblx0XHRcdFwiXHUyODc1XCIsXG5cdFx0XHRcIlx1Mjg3NlwiLFxuXHRcdFx0XCJcdTI4NzdcIixcblx0XHRcdFwiXHUyODM4XCIsXG5cdFx0XHRcIlx1MjgzOVwiLFxuXHRcdFx0XCJcdTI4M0FcIixcblx0XHRcdFwiXHUyODNCXCIsXG5cdFx0XHRcIlx1MjgzQ1wiLFxuXHRcdFx0XCJcdTI4M0RcIixcblx0XHRcdFwiXHUyODNFXCIsXG5cdFx0XHRcIlx1MjgzRlwiLFxuXHRcdFx0XCJcdTI4NzhcIixcblx0XHRcdFwiXHUyODc5XCIsXG5cdFx0XHRcIlx1Mjg3QVwiLFxuXHRcdFx0XCJcdTI4N0JcIixcblx0XHRcdFwiXHUyODdDXCIsXG5cdFx0XHRcIlx1Mjg3RFwiLFxuXHRcdFx0XCJcdTI4N0VcIixcblx0XHRcdFwiXHUyODdGXCIsXG5cdFx0XHRcIlx1Mjg4MFwiLFxuXHRcdFx0XCJcdTI4ODFcIixcblx0XHRcdFwiXHUyODgyXCIsXG5cdFx0XHRcIlx1Mjg4M1wiLFxuXHRcdFx0XCJcdTI4ODRcIixcblx0XHRcdFwiXHUyODg1XCIsXG5cdFx0XHRcIlx1Mjg4NlwiLFxuXHRcdFx0XCJcdTI4ODdcIixcblx0XHRcdFwiXHUyOEMwXCIsXG5cdFx0XHRcIlx1MjhDMVwiLFxuXHRcdFx0XCJcdTI4QzJcIixcblx0XHRcdFwiXHUyOEMzXCIsXG5cdFx0XHRcIlx1MjhDNFwiLFxuXHRcdFx0XCJcdTI4QzVcIixcblx0XHRcdFwiXHUyOEM2XCIsXG5cdFx0XHRcIlx1MjhDN1wiLFxuXHRcdFx0XCJcdTI4ODhcIixcblx0XHRcdFwiXHUyODg5XCIsXG5cdFx0XHRcIlx1Mjg4QVwiLFxuXHRcdFx0XCJcdTI4OEJcIixcblx0XHRcdFwiXHUyODhDXCIsXG5cdFx0XHRcIlx1Mjg4RFwiLFxuXHRcdFx0XCJcdTI4OEVcIixcblx0XHRcdFwiXHUyODhGXCIsXG5cdFx0XHRcIlx1MjhDOFwiLFxuXHRcdFx0XCJcdTI4QzlcIixcblx0XHRcdFwiXHUyOENBXCIsXG5cdFx0XHRcIlx1MjhDQlwiLFxuXHRcdFx0XCJcdTI4Q0NcIixcblx0XHRcdFwiXHUyOENEXCIsXG5cdFx0XHRcIlx1MjhDRVwiLFxuXHRcdFx0XCJcdTI4Q0ZcIixcblx0XHRcdFwiXHUyODkwXCIsXG5cdFx0XHRcIlx1Mjg5MVwiLFxuXHRcdFx0XCJcdTI4OTJcIixcblx0XHRcdFwiXHUyODkzXCIsXG5cdFx0XHRcIlx1Mjg5NFwiLFxuXHRcdFx0XCJcdTI4OTVcIixcblx0XHRcdFwiXHUyODk2XCIsXG5cdFx0XHRcIlx1Mjg5N1wiLFxuXHRcdFx0XCJcdTI4RDBcIixcblx0XHRcdFwiXHUyOEQxXCIsXG5cdFx0XHRcIlx1MjhEMlwiLFxuXHRcdFx0XCJcdTI4RDNcIixcblx0XHRcdFwiXHUyOEQ0XCIsXG5cdFx0XHRcIlx1MjhENVwiLFxuXHRcdFx0XCJcdTI4RDZcIixcblx0XHRcdFwiXHUyOEQ3XCIsXG5cdFx0XHRcIlx1Mjg5OFwiLFxuXHRcdFx0XCJcdTI4OTlcIixcblx0XHRcdFwiXHUyODlBXCIsXG5cdFx0XHRcIlx1Mjg5QlwiLFxuXHRcdFx0XCJcdTI4OUNcIixcblx0XHRcdFwiXHUyODlEXCIsXG5cdFx0XHRcIlx1Mjg5RVwiLFxuXHRcdFx0XCJcdTI4OUZcIixcblx0XHRcdFwiXHUyOEQ4XCIsXG5cdFx0XHRcIlx1MjhEOVwiLFxuXHRcdFx0XCJcdTI4REFcIixcblx0XHRcdFwiXHUyOERCXCIsXG5cdFx0XHRcIlx1MjhEQ1wiLFxuXHRcdFx0XCJcdTI4RERcIixcblx0XHRcdFwiXHUyOERFXCIsXG5cdFx0XHRcIlx1MjhERlwiLFxuXHRcdFx0XCJcdTI4QTBcIixcblx0XHRcdFwiXHUyOEExXCIsXG5cdFx0XHRcIlx1MjhBMlwiLFxuXHRcdFx0XCJcdTI4QTNcIixcblx0XHRcdFwiXHUyOEE0XCIsXG5cdFx0XHRcIlx1MjhBNVwiLFxuXHRcdFx0XCJcdTI4QTZcIixcblx0XHRcdFwiXHUyOEE3XCIsXG5cdFx0XHRcIlx1MjhFMFwiLFxuXHRcdFx0XCJcdTI4RTFcIixcblx0XHRcdFwiXHUyOEUyXCIsXG5cdFx0XHRcIlx1MjhFM1wiLFxuXHRcdFx0XCJcdTI4RTRcIixcblx0XHRcdFwiXHUyOEU1XCIsXG5cdFx0XHRcIlx1MjhFNlwiLFxuXHRcdFx0XCJcdTI4RTdcIixcblx0XHRcdFwiXHUyOEE4XCIsXG5cdFx0XHRcIlx1MjhBOVwiLFxuXHRcdFx0XCJcdTI4QUFcIixcblx0XHRcdFwiXHUyOEFCXCIsXG5cdFx0XHRcIlx1MjhBQ1wiLFxuXHRcdFx0XCJcdTI4QURcIixcblx0XHRcdFwiXHUyOEFFXCIsXG5cdFx0XHRcIlx1MjhBRlwiLFxuXHRcdFx0XCJcdTI4RThcIixcblx0XHRcdFwiXHUyOEU5XCIsXG5cdFx0XHRcIlx1MjhFQVwiLFxuXHRcdFx0XCJcdTI4RUJcIixcblx0XHRcdFwiXHUyOEVDXCIsXG5cdFx0XHRcIlx1MjhFRFwiLFxuXHRcdFx0XCJcdTI4RUVcIixcblx0XHRcdFwiXHUyOEVGXCIsXG5cdFx0XHRcIlx1MjhCMFwiLFxuXHRcdFx0XCJcdTI4QjFcIixcblx0XHRcdFwiXHUyOEIyXCIsXG5cdFx0XHRcIlx1MjhCM1wiLFxuXHRcdFx0XCJcdTI4QjRcIixcblx0XHRcdFwiXHUyOEI1XCIsXG5cdFx0XHRcIlx1MjhCNlwiLFxuXHRcdFx0XCJcdTI4QjdcIixcblx0XHRcdFwiXHUyOEYwXCIsXG5cdFx0XHRcIlx1MjhGMVwiLFxuXHRcdFx0XCJcdTI4RjJcIixcblx0XHRcdFwiXHUyOEYzXCIsXG5cdFx0XHRcIlx1MjhGNFwiLFxuXHRcdFx0XCJcdTI4RjVcIixcblx0XHRcdFwiXHUyOEY2XCIsXG5cdFx0XHRcIlx1MjhGN1wiLFxuXHRcdFx0XCJcdTI4QjhcIixcblx0XHRcdFwiXHUyOEI5XCIsXG5cdFx0XHRcIlx1MjhCQVwiLFxuXHRcdFx0XCJcdTI4QkJcIixcblx0XHRcdFwiXHUyOEJDXCIsXG5cdFx0XHRcIlx1MjhCRFwiLFxuXHRcdFx0XCJcdTI4QkVcIixcblx0XHRcdFwiXHUyOEJGXCIsXG5cdFx0XHRcIlx1MjhGOFwiLFxuXHRcdFx0XCJcdTI4RjlcIixcblx0XHRcdFwiXHUyOEZBXCIsXG5cdFx0XHRcIlx1MjhGQlwiLFxuXHRcdFx0XCJcdTI4RkNcIixcblx0XHRcdFwiXHUyOEZEXCIsXG5cdFx0XHRcIlx1MjhGRVwiLFxuXHRcdFx0XCJcdTI4RkZcIlxuXHRcdF1cblx0fSxcblx0XCJzYW5kXCI6IHtcblx0XHRcImludGVydmFsXCI6IDgwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHUyODAxXCIsXG5cdFx0XHRcIlx1MjgwMlwiLFxuXHRcdFx0XCJcdTI4MDRcIixcblx0XHRcdFwiXHUyODQwXCIsXG5cdFx0XHRcIlx1Mjg0OFwiLFxuXHRcdFx0XCJcdTI4NTBcIixcblx0XHRcdFwiXHUyODYwXCIsXG5cdFx0XHRcIlx1MjhDMFwiLFxuXHRcdFx0XCJcdTI4QzFcIixcblx0XHRcdFwiXHUyOEMyXCIsXG5cdFx0XHRcIlx1MjhDNFwiLFxuXHRcdFx0XCJcdTI4Q0NcIixcblx0XHRcdFwiXHUyOEQ0XCIsXG5cdFx0XHRcIlx1MjhFNFwiLFxuXHRcdFx0XCJcdTI4RTVcIixcblx0XHRcdFwiXHUyOEU2XCIsXG5cdFx0XHRcIlx1MjhFRVwiLFxuXHRcdFx0XCJcdTI4RjZcIixcblx0XHRcdFwiXHUyOEY3XCIsXG5cdFx0XHRcIlx1MjhGRlwiLFxuXHRcdFx0XCJcdTI4N0ZcIixcblx0XHRcdFwiXHUyODNGXCIsXG5cdFx0XHRcIlx1Mjg5RlwiLFxuXHRcdFx0XCJcdTI4MUZcIixcblx0XHRcdFwiXHUyODVCXCIsXG5cdFx0XHRcIlx1MjgxQlwiLFxuXHRcdFx0XCJcdTI4MkJcIixcblx0XHRcdFwiXHUyODhCXCIsXG5cdFx0XHRcIlx1MjgwQlwiLFxuXHRcdFx0XCJcdTI4MERcIixcblx0XHRcdFwiXHUyODQ5XCIsXG5cdFx0XHRcIlx1MjgwOVwiLFxuXHRcdFx0XCJcdTI4MTFcIixcblx0XHRcdFwiXHUyODIxXCIsXG5cdFx0XHRcIlx1Mjg4MVwiXG5cdFx0XVxuXHR9LFxuXHRcImxpbmVcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogMTMwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiLVwiLFxuXHRcdFx0XCJcXFxcXCIsXG5cdFx0XHRcInxcIixcblx0XHRcdFwiL1wiXG5cdFx0XVxuXHR9LFxuXHRcImxpbmUyXCI6IHtcblx0XHRcImludGVydmFsXCI6IDEwMCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIlx1MjgwMlwiLFxuXHRcdFx0XCItXCIsXG5cdFx0XHRcIlx1MjAxM1wiLFxuXHRcdFx0XCJcdTIwMTRcIixcblx0XHRcdFwiXHUyMDEzXCIsXG5cdFx0XHRcIi1cIlxuXHRcdF1cblx0fSxcblx0XCJwaXBlXCI6IHtcblx0XHRcImludGVydmFsXCI6IDEwMCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIlx1MjUyNFwiLFxuXHRcdFx0XCJcdTI1MThcIixcblx0XHRcdFwiXHUyNTM0XCIsXG5cdFx0XHRcIlx1MjUxNFwiLFxuXHRcdFx0XCJcdTI1MUNcIixcblx0XHRcdFwiXHUyNTBDXCIsXG5cdFx0XHRcIlx1MjUyQ1wiLFxuXHRcdFx0XCJcdTI1MTBcIlxuXHRcdF1cblx0fSxcblx0XCJzaW1wbGVEb3RzXCI6IHtcblx0XHRcImludGVydmFsXCI6IDQwMCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIi4gIFwiLFxuXHRcdFx0XCIuLiBcIixcblx0XHRcdFwiLi4uXCIsXG5cdFx0XHRcIiAgIFwiXG5cdFx0XVxuXHR9LFxuXHRcInNpbXBsZURvdHNTY3JvbGxpbmdcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogMjAwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiLiAgXCIsXG5cdFx0XHRcIi4uIFwiLFxuXHRcdFx0XCIuLi5cIixcblx0XHRcdFwiIC4uXCIsXG5cdFx0XHRcIiAgLlwiLFxuXHRcdFx0XCIgICBcIlxuXHRcdF1cblx0fSxcblx0XCJzdGFyXCI6IHtcblx0XHRcImludGVydmFsXCI6IDcwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHUyNzM2XCIsXG5cdFx0XHRcIlx1MjczOFwiLFxuXHRcdFx0XCJcdTI3MzlcIixcblx0XHRcdFwiXHUyNzNBXCIsXG5cdFx0XHRcIlx1MjczOVwiLFxuXHRcdFx0XCJcdTI3MzdcIlxuXHRcdF1cblx0fSxcblx0XCJzdGFyMlwiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiA4MCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIitcIixcblx0XHRcdFwieFwiLFxuXHRcdFx0XCIqXCJcblx0XHRdXG5cdH0sXG5cdFwiZmxpcFwiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiA3MCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIl9cIixcblx0XHRcdFwiX1wiLFxuXHRcdFx0XCJfXCIsXG5cdFx0XHRcIi1cIixcblx0XHRcdFwiYFwiLFxuXHRcdFx0XCJgXCIsXG5cdFx0XHRcIidcIixcblx0XHRcdFwiXHUwMEI0XCIsXG5cdFx0XHRcIi1cIixcblx0XHRcdFwiX1wiLFxuXHRcdFx0XCJfXCIsXG5cdFx0XHRcIl9cIlxuXHRcdF1cblx0fSxcblx0XCJoYW1idXJnZXJcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogMTAwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHUyNjMxXCIsXG5cdFx0XHRcIlx1MjYzMlwiLFxuXHRcdFx0XCJcdTI2MzRcIlxuXHRcdF1cblx0fSxcblx0XCJncm93VmVydGljYWxcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogMTIwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHUyNTgxXCIsXG5cdFx0XHRcIlx1MjU4M1wiLFxuXHRcdFx0XCJcdTI1ODRcIixcblx0XHRcdFwiXHUyNTg1XCIsXG5cdFx0XHRcIlx1MjU4NlwiLFxuXHRcdFx0XCJcdTI1ODdcIixcblx0XHRcdFwiXHUyNTg2XCIsXG5cdFx0XHRcIlx1MjU4NVwiLFxuXHRcdFx0XCJcdTI1ODRcIixcblx0XHRcdFwiXHUyNTgzXCJcblx0XHRdXG5cdH0sXG5cdFwiZ3Jvd0hvcml6b250YWxcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogMTIwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHUyNThGXCIsXG5cdFx0XHRcIlx1MjU4RVwiLFxuXHRcdFx0XCJcdTI1OERcIixcblx0XHRcdFwiXHUyNThDXCIsXG5cdFx0XHRcIlx1MjU4QlwiLFxuXHRcdFx0XCJcdTI1OEFcIixcblx0XHRcdFwiXHUyNTg5XCIsXG5cdFx0XHRcIlx1MjU4QVwiLFxuXHRcdFx0XCJcdTI1OEJcIixcblx0XHRcdFwiXHUyNThDXCIsXG5cdFx0XHRcIlx1MjU4RFwiLFxuXHRcdFx0XCJcdTI1OEVcIlxuXHRcdF1cblx0fSxcblx0XCJiYWxsb29uXCI6IHtcblx0XHRcImludGVydmFsXCI6IDE0MCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIiBcIixcblx0XHRcdFwiLlwiLFxuXHRcdFx0XCJvXCIsXG5cdFx0XHRcIk9cIixcblx0XHRcdFwiQFwiLFxuXHRcdFx0XCIqXCIsXG5cdFx0XHRcIiBcIlxuXHRcdF1cblx0fSxcblx0XCJiYWxsb29uMlwiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiAxMjAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCIuXCIsXG5cdFx0XHRcIm9cIixcblx0XHRcdFwiT1wiLFxuXHRcdFx0XCJcdTAwQjBcIixcblx0XHRcdFwiT1wiLFxuXHRcdFx0XCJvXCIsXG5cdFx0XHRcIi5cIlxuXHRcdF1cblx0fSxcblx0XCJub2lzZVwiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiAxMDAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCJcdTI1OTNcIixcblx0XHRcdFwiXHUyNTkyXCIsXG5cdFx0XHRcIlx1MjU5MVwiXG5cdFx0XVxuXHR9LFxuXHRcImJvdW5jZVwiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiAxMjAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCJcdTI4MDFcIixcblx0XHRcdFwiXHUyODAyXCIsXG5cdFx0XHRcIlx1MjgwNFwiLFxuXHRcdFx0XCJcdTI4MDJcIlxuXHRcdF1cblx0fSxcblx0XCJib3hCb3VuY2VcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogMTIwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHUyNTk2XCIsXG5cdFx0XHRcIlx1MjU5OFwiLFxuXHRcdFx0XCJcdTI1OURcIixcblx0XHRcdFwiXHUyNTk3XCJcblx0XHRdXG5cdH0sXG5cdFwiYm94Qm91bmNlMlwiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiAxMDAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCJcdTI1OENcIixcblx0XHRcdFwiXHUyNTgwXCIsXG5cdFx0XHRcIlx1MjU5MFwiLFxuXHRcdFx0XCJcdTI1ODRcIlxuXHRcdF1cblx0fSxcblx0XCJ0cmlhbmdsZVwiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiA1MCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIlx1MjVFMlwiLFxuXHRcdFx0XCJcdTI1RTNcIixcblx0XHRcdFwiXHUyNUU0XCIsXG5cdFx0XHRcIlx1MjVFNVwiXG5cdFx0XVxuXHR9LFxuXHRcImJpbmFyeVwiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiA4MCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIjAxMDAxMFwiLFxuICAgICAgICAgICAgXCIwMDExMDBcIixcbiAgICAgICAgICAgIFwiMTAwMTAxXCIsXG4gICAgICAgICAgICBcIjExMTAxMFwiLFxuICAgICAgICAgICAgXCIxMTExMDFcIixcbiAgICAgICAgICAgIFwiMDEwMTExXCIsXG5cdFx0XHRcIjEwMTAxMVwiLFxuXHRcdFx0XCIxMTEwMDBcIixcblx0XHRcdFwiMTEwMDExXCIsXG5cdFx0XHRcIjExMDEwMVwiXG5cdFx0XVxuXHR9LFxuXHRcImFyY1wiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiAxMDAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCJcdTI1RENcIixcblx0XHRcdFwiXHUyNUUwXCIsXG5cdFx0XHRcIlx1MjVERFwiLFxuXHRcdFx0XCJcdTI1REVcIixcblx0XHRcdFwiXHUyNUUxXCIsXG5cdFx0XHRcIlx1MjVERlwiXG5cdFx0XVxuXHR9LFxuXHRcImNpcmNsZVwiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiAxMjAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCJcdTI1RTFcIixcblx0XHRcdFwiXHUyMjk5XCIsXG5cdFx0XHRcIlx1MjVFMFwiXG5cdFx0XVxuXHR9LFxuXHRcInNxdWFyZUNvcm5lcnNcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogMTgwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHUyNUYwXCIsXG5cdFx0XHRcIlx1MjVGM1wiLFxuXHRcdFx0XCJcdTI1RjJcIixcblx0XHRcdFwiXHUyNUYxXCJcblx0XHRdXG5cdH0sXG5cdFwiY2lyY2xlUXVhcnRlcnNcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogMTIwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHUyNUY0XCIsXG5cdFx0XHRcIlx1MjVGN1wiLFxuXHRcdFx0XCJcdTI1RjZcIixcblx0XHRcdFwiXHUyNUY1XCJcblx0XHRdXG5cdH0sXG5cdFwiY2lyY2xlSGFsdmVzXCI6IHtcblx0XHRcImludGVydmFsXCI6IDUwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHUyNUQwXCIsXG5cdFx0XHRcIlx1MjVEM1wiLFxuXHRcdFx0XCJcdTI1RDFcIixcblx0XHRcdFwiXHUyNUQyXCJcblx0XHRdXG5cdH0sXG5cdFwic3F1aXNoXCI6IHtcblx0XHRcImludGVydmFsXCI6IDEwMCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIlx1MjU2QlwiLFxuXHRcdFx0XCJcdTI1NkFcIlxuXHRcdF1cblx0fSxcblx0XCJ0b2dnbGVcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogMjUwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHUyMkI2XCIsXG5cdFx0XHRcIlx1MjJCN1wiXG5cdFx0XVxuXHR9LFxuXHRcInRvZ2dsZTJcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogODAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCJcdTI1QUJcIixcblx0XHRcdFwiXHUyNUFBXCJcblx0XHRdXG5cdH0sXG5cdFwidG9nZ2xlM1wiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiAxMjAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCJcdTI1QTFcIixcblx0XHRcdFwiXHUyNUEwXCJcblx0XHRdXG5cdH0sXG5cdFwidG9nZ2xlNFwiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiAxMDAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCJcdTI1QTBcIixcblx0XHRcdFwiXHUyNUExXCIsXG5cdFx0XHRcIlx1MjVBQVwiLFxuXHRcdFx0XCJcdTI1QUJcIlxuXHRcdF1cblx0fSxcblx0XCJ0b2dnbGU1XCI6IHtcblx0XHRcImludGVydmFsXCI6IDEwMCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIlx1MjVBRVwiLFxuXHRcdFx0XCJcdTI1QUZcIlxuXHRcdF1cblx0fSxcblx0XCJ0b2dnbGU2XCI6IHtcblx0XHRcImludGVydmFsXCI6IDMwMCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIlx1MTAxRFwiLFxuXHRcdFx0XCJcdTEwNDBcIlxuXHRcdF1cblx0fSxcblx0XCJ0b2dnbGU3XCI6IHtcblx0XHRcImludGVydmFsXCI6IDgwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHUyOUJFXCIsXG5cdFx0XHRcIlx1MjlCRlwiXG5cdFx0XVxuXHR9LFxuXHRcInRvZ2dsZThcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogMTAwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHUyNUNEXCIsXG5cdFx0XHRcIlx1MjVDQ1wiXG5cdFx0XVxuXHR9LFxuXHRcInRvZ2dsZTlcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogMTAwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHUyNUM5XCIsXG5cdFx0XHRcIlx1MjVDRVwiXG5cdFx0XVxuXHR9LFxuXHRcInRvZ2dsZTEwXCI6IHtcblx0XHRcImludGVydmFsXCI6IDEwMCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIlx1MzI4MlwiLFxuXHRcdFx0XCJcdTMyODBcIixcblx0XHRcdFwiXHUzMjgxXCJcblx0XHRdXG5cdH0sXG5cdFwidG9nZ2xlMTFcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogNTAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCJcdTI5QzdcIixcblx0XHRcdFwiXHUyOUM2XCJcblx0XHRdXG5cdH0sXG5cdFwidG9nZ2xlMTJcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogMTIwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHUyNjE3XCIsXG5cdFx0XHRcIlx1MjYxNlwiXG5cdFx0XVxuXHR9LFxuXHRcInRvZ2dsZTEzXCI6IHtcblx0XHRcImludGVydmFsXCI6IDgwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiPVwiLFxuXHRcdFx0XCIqXCIsXG5cdFx0XHRcIi1cIlxuXHRcdF1cblx0fSxcblx0XCJhcnJvd1wiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiAxMDAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCJcdTIxOTBcIixcblx0XHRcdFwiXHUyMTk2XCIsXG5cdFx0XHRcIlx1MjE5MVwiLFxuXHRcdFx0XCJcdTIxOTdcIixcblx0XHRcdFwiXHUyMTkyXCIsXG5cdFx0XHRcIlx1MjE5OFwiLFxuXHRcdFx0XCJcdTIxOTNcIixcblx0XHRcdFwiXHUyMTk5XCJcblx0XHRdXG5cdH0sXG5cdFwiYXJyb3cyXCI6IHtcblx0XHRcImludGVydmFsXCI6IDgwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHUyQjA2XHVGRTBGIFwiLFxuXHRcdFx0XCJcdTIxOTdcdUZFMEYgXCIsXG5cdFx0XHRcIlx1MjdBMVx1RkUwRiBcIixcblx0XHRcdFwiXHUyMTk4XHVGRTBGIFwiLFxuXHRcdFx0XCJcdTJCMDdcdUZFMEYgXCIsXG5cdFx0XHRcIlx1MjE5OVx1RkUwRiBcIixcblx0XHRcdFwiXHUyQjA1XHVGRTBGIFwiLFxuXHRcdFx0XCJcdTIxOTZcdUZFMEYgXCJcblx0XHRdXG5cdH0sXG5cdFwiYXJyb3czXCI6IHtcblx0XHRcImludGVydmFsXCI6IDEyMCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIlx1MjVCOVx1MjVCOVx1MjVCOVx1MjVCOVx1MjVCOVwiLFxuXHRcdFx0XCJcdTI1QjhcdTI1QjlcdTI1QjlcdTI1QjlcdTI1QjlcIixcblx0XHRcdFwiXHUyNUI5XHUyNUI4XHUyNUI5XHUyNUI5XHUyNUI5XCIsXG5cdFx0XHRcIlx1MjVCOVx1MjVCOVx1MjVCOFx1MjVCOVx1MjVCOVwiLFxuXHRcdFx0XCJcdTI1QjlcdTI1QjlcdTI1QjlcdTI1QjhcdTI1QjlcIixcblx0XHRcdFwiXHUyNUI5XHUyNUI5XHUyNUI5XHUyNUI5XHUyNUI4XCJcblx0XHRdXG5cdH0sXG5cdFwiYm91bmNpbmdCYXJcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogODAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCJbICAgIF1cIixcblx0XHRcdFwiWz0gICBdXCIsXG5cdFx0XHRcIls9PSAgXVwiLFxuXHRcdFx0XCJbPT09IF1cIixcblx0XHRcdFwiWyA9PT1dXCIsXG5cdFx0XHRcIlsgID09XVwiLFxuXHRcdFx0XCJbICAgPV1cIixcblx0XHRcdFwiWyAgICBdXCIsXG5cdFx0XHRcIlsgICA9XVwiLFxuXHRcdFx0XCJbICA9PV1cIixcblx0XHRcdFwiWyA9PT1dXCIsXG5cdFx0XHRcIls9PT09XVwiLFxuXHRcdFx0XCJbPT09IF1cIixcblx0XHRcdFwiWz09ICBdXCIsXG5cdFx0XHRcIls9ICAgXVwiXG5cdFx0XVxuXHR9LFxuXHRcImJvdW5jaW5nQmFsbFwiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiA4MCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIiggXHUyNUNGICAgIClcIixcblx0XHRcdFwiKCAgXHUyNUNGICAgKVwiLFxuXHRcdFx0XCIoICAgXHUyNUNGICApXCIsXG5cdFx0XHRcIiggICAgXHUyNUNGIClcIixcblx0XHRcdFwiKCAgICAgXHUyNUNGKVwiLFxuXHRcdFx0XCIoICAgIFx1MjVDRiApXCIsXG5cdFx0XHRcIiggICBcdTI1Q0YgIClcIixcblx0XHRcdFwiKCAgXHUyNUNGICAgKVwiLFxuXHRcdFx0XCIoIFx1MjVDRiAgICApXCIsXG5cdFx0XHRcIihcdTI1Q0YgICAgIClcIlxuXHRcdF1cblx0fSxcblx0XCJzbWlsZXlcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogMjAwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHVEODNEXHVERTA0IFwiLFxuXHRcdFx0XCJcdUQ4M0RcdURFMUQgXCJcblx0XHRdXG5cdH0sXG5cdFwibW9ua2V5XCI6IHtcblx0XHRcImludGVydmFsXCI6IDMwMCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIlx1RDgzRFx1REU0OCBcIixcblx0XHRcdFwiXHVEODNEXHVERTQ4IFwiLFxuXHRcdFx0XCJcdUQ4M0RcdURFNDkgXCIsXG5cdFx0XHRcIlx1RDgzRFx1REU0QSBcIlxuXHRcdF1cblx0fSxcblx0XCJoZWFydHNcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogMTAwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHVEODNEXHVEQzlCIFwiLFxuXHRcdFx0XCJcdUQ4M0RcdURDOTkgXCIsXG5cdFx0XHRcIlx1RDgzRFx1REM5QyBcIixcblx0XHRcdFwiXHVEODNEXHVEQzlBIFwiLFxuXHRcdFx0XCJcdTI3NjRcdUZFMEYgXCJcblx0XHRdXG5cdH0sXG5cdFwiY2xvY2tcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogMTAwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHVEODNEXHVERDVCIFwiLFxuXHRcdFx0XCJcdUQ4M0RcdURENTAgXCIsXG5cdFx0XHRcIlx1RDgzRFx1REQ1MSBcIixcblx0XHRcdFwiXHVEODNEXHVERDUyIFwiLFxuXHRcdFx0XCJcdUQ4M0RcdURENTMgXCIsXG5cdFx0XHRcIlx1RDgzRFx1REQ1NCBcIixcblx0XHRcdFwiXHVEODNEXHVERDU1IFwiLFxuXHRcdFx0XCJcdUQ4M0RcdURENTYgXCIsXG5cdFx0XHRcIlx1RDgzRFx1REQ1NyBcIixcblx0XHRcdFwiXHVEODNEXHVERDU4IFwiLFxuXHRcdFx0XCJcdUQ4M0RcdURENTkgXCIsXG5cdFx0XHRcIlx1RDgzRFx1REQ1QSBcIlxuXHRcdF1cblx0fSxcblx0XCJlYXJ0aFwiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiAxODAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCJcdUQ4M0NcdURGMEQgXCIsXG5cdFx0XHRcIlx1RDgzQ1x1REYwRSBcIixcblx0XHRcdFwiXHVEODNDXHVERjBGIFwiXG5cdFx0XVxuXHR9LFxuXHRcIm1hdGVyaWFsXCI6IHtcblx0XHRcImludGVydmFsXCI6IDE3LFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHUyNTg4XHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXCIsXG5cdFx0XHRcIlx1MjU4OFx1MjU4OFx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVwiLFxuXHRcdFx0XCJcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcIixcblx0XHRcdFwiXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXCIsXG5cdFx0XHRcIlx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVwiLFxuXHRcdFx0XCJcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcIixcblx0XHRcdFwiXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXCIsXG5cdFx0XHRcIlx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVwiLFxuXHRcdFx0XCJcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcIixcblx0XHRcdFwiXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXCIsXG5cdFx0XHRcIlx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVwiLFxuXHRcdFx0XCJcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcIixcblx0XHRcdFwiXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXCIsXG5cdFx0XHRcIlx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVwiLFxuXHRcdFx0XCJcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcIixcblx0XHRcdFwiXHUyNTgxXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXCIsXG5cdFx0XHRcIlx1MjU4MVx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVwiLFxuXHRcdFx0XCJcdTI1ODFcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcIixcblx0XHRcdFwiXHUyNTgxXHUyNTgxXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXCIsXG5cdFx0XHRcIlx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4MVx1MjU4MVx1MjU4MVwiLFxuXHRcdFx0XCJcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODFcdTI1ODFcdTI1ODFcIixcblx0XHRcdFwiXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTgxXHUyNTgxXCIsXG5cdFx0XHRcIlx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4MVx1MjU4MVwiLFxuXHRcdFx0XCJcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODFcIixcblx0XHRcdFwiXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTgxXCIsXG5cdFx0XHRcIlx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4MVwiLFxuXHRcdFx0XCJcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcIixcblx0XHRcdFwiXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XCIsXG5cdFx0XHRcIlx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFwiLFxuXHRcdFx0XCJcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcIixcblx0XHRcdFwiXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XCIsXG5cdFx0XHRcIlx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFwiLFxuXHRcdFx0XCJcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcIixcblx0XHRcdFwiXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XCIsXG5cdFx0XHRcIlx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFwiLFxuXHRcdFx0XCJcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcIixcblx0XHRcdFwiXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XCIsXG5cdFx0XHRcIlx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFwiLFxuXHRcdFx0XCJcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcIixcblx0XHRcdFwiXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XCIsXG5cdFx0XHRcIlx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFwiLFxuXHRcdFx0XCJcdTI1ODhcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcIixcblx0XHRcdFwiXHUyNTg4XHUyNTg4XHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTg4XHUyNTg4XHUyNTg4XCIsXG5cdFx0XHRcIlx1MjU4OFx1MjU4OFx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4OFx1MjU4OFx1MjU4OFwiLFxuXHRcdFx0XCJcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODhcdTI1ODhcdTI1ODhcIixcblx0XHRcdFwiXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTg4XHUyNTg4XCIsXG5cdFx0XHRcIlx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4OFwiLFxuXHRcdFx0XCJcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODhcIixcblx0XHRcdFwiXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTg4XCIsXG5cdFx0XHRcIlx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVwiLFxuXHRcdFx0XCJcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcIixcblx0XHRcdFwiXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXCIsXG5cdFx0XHRcIlx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVwiLFxuXHRcdFx0XCJcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcIixcblx0XHRcdFwiXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXCIsXG5cdFx0XHRcIlx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVwiLFxuXHRcdFx0XCJcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcIixcblx0XHRcdFwiXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXCIsXG5cdFx0XHRcIlx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVwiLFxuXHRcdFx0XCJcdTI1ODFcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcIixcblx0XHRcdFwiXHUyNTgxXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXCIsXG5cdFx0XHRcIlx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVwiLFxuXHRcdFx0XCJcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODFcdTI1ODFcdTI1ODFcIixcblx0XHRcdFwiXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTgxXHUyNTgxXHUyNTgxXCIsXG5cdFx0XHRcIlx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4MVx1MjU4MVx1MjU4MVwiLFxuXHRcdFx0XCJcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODFcdTI1ODFcdTI1ODFcIixcblx0XHRcdFwiXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTgxXHUyNTgxXHUyNTgxXCIsXG5cdFx0XHRcIlx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4MVx1MjU4MVwiLFxuXHRcdFx0XCJcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODFcdTI1ODFcIixcblx0XHRcdFwiXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTgxXCIsXG5cdFx0XHRcIlx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4MVwiLFxuXHRcdFx0XCJcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODFcIixcblx0XHRcdFwiXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTgxXCIsXG5cdFx0XHRcIlx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4MVwiLFxuXHRcdFx0XCJcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcIixcblx0XHRcdFwiXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XCIsXG5cdFx0XHRcIlx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFwiLFxuXHRcdFx0XCJcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcIixcblx0XHRcdFwiXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XCIsXG5cdFx0XHRcIlx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFwiLFxuXHRcdFx0XCJcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODhcdTI1ODhcdTI1ODhcIixcblx0XHRcdFwiXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTg4XHUyNTg4XHUyNTg4XCIsXG5cdFx0XHRcIlx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4OFx1MjU4OFwiLFxuXHRcdFx0XCJcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODhcdTI1ODhcIixcblx0XHRcdFwiXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTg4XHUyNTg4XCIsXG5cdFx0XHRcIlx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4OFwiLFxuXHRcdFx0XCJcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODhcIixcblx0XHRcdFwiXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTg4XCIsXG5cdFx0XHRcIlx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVwiLFxuXHRcdFx0XCJcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcIixcblx0XHRcdFwiXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXCIsXG5cdFx0XHRcIlx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVwiXG5cdFx0XVxuXHR9LFxuXHRcIm1vb25cIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogODAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCJcdUQ4M0NcdURGMTEgXCIsXG5cdFx0XHRcIlx1RDgzQ1x1REYxMiBcIixcblx0XHRcdFwiXHVEODNDXHVERjEzIFwiLFxuXHRcdFx0XCJcdUQ4M0NcdURGMTQgXCIsXG5cdFx0XHRcIlx1RDgzQ1x1REYxNSBcIixcblx0XHRcdFwiXHVEODNDXHVERjE2IFwiLFxuXHRcdFx0XCJcdUQ4M0NcdURGMTcgXCIsXG5cdFx0XHRcIlx1RDgzQ1x1REYxOCBcIlxuXHRcdF1cblx0fSxcblx0XCJydW5uZXJcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogMTQwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHVEODNEXHVERUI2IFwiLFxuXHRcdFx0XCJcdUQ4M0NcdURGQzMgXCJcblx0XHRdXG5cdH0sXG5cdFwicG9uZ1wiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiA4MCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIlx1MjU5MFx1MjgwMiAgICAgICBcdTI1OENcIixcblx0XHRcdFwiXHUyNTkwXHUyODA4ICAgICAgIFx1MjU4Q1wiLFxuXHRcdFx0XCJcdTI1OTAgXHUyODAyICAgICAgXHUyNThDXCIsXG5cdFx0XHRcIlx1MjU5MCBcdTI4MjAgICAgICBcdTI1OENcIixcblx0XHRcdFwiXHUyNTkwICBcdTI4NDAgICAgIFx1MjU4Q1wiLFxuXHRcdFx0XCJcdTI1OTAgIFx1MjgyMCAgICAgXHUyNThDXCIsXG5cdFx0XHRcIlx1MjU5MCAgIFx1MjgwMiAgICBcdTI1OENcIixcblx0XHRcdFwiXHUyNTkwICAgXHUyODA4ICAgIFx1MjU4Q1wiLFxuXHRcdFx0XCJcdTI1OTAgICAgXHUyODAyICAgXHUyNThDXCIsXG5cdFx0XHRcIlx1MjU5MCAgICBcdTI4MjAgICBcdTI1OENcIixcblx0XHRcdFwiXHUyNTkwICAgICBcdTI4NDAgIFx1MjU4Q1wiLFxuXHRcdFx0XCJcdTI1OTAgICAgIFx1MjgyMCAgXHUyNThDXCIsXG5cdFx0XHRcIlx1MjU5MCAgICAgIFx1MjgwMiBcdTI1OENcIixcblx0XHRcdFwiXHUyNTkwICAgICAgXHUyODA4IFx1MjU4Q1wiLFxuXHRcdFx0XCJcdTI1OTAgICAgICAgXHUyODAyXHUyNThDXCIsXG5cdFx0XHRcIlx1MjU5MCAgICAgICBcdTI4MjBcdTI1OENcIixcblx0XHRcdFwiXHUyNTkwICAgICAgIFx1Mjg0MFx1MjU4Q1wiLFxuXHRcdFx0XCJcdTI1OTAgICAgICBcdTI4MjAgXHUyNThDXCIsXG5cdFx0XHRcIlx1MjU5MCAgICAgIFx1MjgwMiBcdTI1OENcIixcblx0XHRcdFwiXHUyNTkwICAgICBcdTI4MDggIFx1MjU4Q1wiLFxuXHRcdFx0XCJcdTI1OTAgICAgIFx1MjgwMiAgXHUyNThDXCIsXG5cdFx0XHRcIlx1MjU5MCAgICBcdTI4MjAgICBcdTI1OENcIixcblx0XHRcdFwiXHUyNTkwICAgIFx1Mjg0MCAgIFx1MjU4Q1wiLFxuXHRcdFx0XCJcdTI1OTAgICBcdTI4MjAgICAgXHUyNThDXCIsXG5cdFx0XHRcIlx1MjU5MCAgIFx1MjgwMiAgICBcdTI1OENcIixcblx0XHRcdFwiXHUyNTkwICBcdTI4MDggICAgIFx1MjU4Q1wiLFxuXHRcdFx0XCJcdTI1OTAgIFx1MjgwMiAgICAgXHUyNThDXCIsXG5cdFx0XHRcIlx1MjU5MCBcdTI4MjAgICAgICBcdTI1OENcIixcblx0XHRcdFwiXHUyNTkwIFx1Mjg0MCAgICAgIFx1MjU4Q1wiLFxuXHRcdFx0XCJcdTI1OTBcdTI4MjAgICAgICAgXHUyNThDXCJcblx0XHRdXG5cdH0sXG5cdFwic2hhcmtcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogMTIwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHUyNTkwfFxcXFxfX19fX19fX19fX19cdTI1OENcIixcblx0XHRcdFwiXHUyNTkwX3xcXFxcX19fX19fX19fX19cdTI1OENcIixcblx0XHRcdFwiXHUyNTkwX198XFxcXF9fX19fX19fX19cdTI1OENcIixcblx0XHRcdFwiXHUyNTkwX19ffFxcXFxfX19fX19fX19cdTI1OENcIixcblx0XHRcdFwiXHUyNTkwX19fX3xcXFxcX19fX19fX19cdTI1OENcIixcblx0XHRcdFwiXHUyNTkwX19fX198XFxcXF9fX19fX19cdTI1OENcIixcblx0XHRcdFwiXHUyNTkwX19fX19ffFxcXFxfX19fX19cdTI1OENcIixcblx0XHRcdFwiXHUyNTkwX19fX19fX3xcXFxcX19fX19cdTI1OENcIixcblx0XHRcdFwiXHUyNTkwX19fX19fX198XFxcXF9fX19cdTI1OENcIixcblx0XHRcdFwiXHUyNTkwX19fX19fX19ffFxcXFxfX19cdTI1OENcIixcblx0XHRcdFwiXHUyNTkwX19fX19fX19fX3xcXFxcX19cdTI1OENcIixcblx0XHRcdFwiXHUyNTkwX19fX19fX19fX198XFxcXF9cdTI1OENcIixcblx0XHRcdFwiXHUyNTkwX19fX19fX19fX19ffFxcXFxcdTI1OENcIixcblx0XHRcdFwiXHUyNTkwX19fX19fX19fX19fL3xcdTI1OENcIixcblx0XHRcdFwiXHUyNTkwX19fX19fX19fX18vfF9cdTI1OENcIixcblx0XHRcdFwiXHUyNTkwX19fX19fX19fXy98X19cdTI1OENcIixcblx0XHRcdFwiXHUyNTkwX19fX19fX19fL3xfX19cdTI1OENcIixcblx0XHRcdFwiXHUyNTkwX19fX19fX18vfF9fX19cdTI1OENcIixcblx0XHRcdFwiXHUyNTkwX19fX19fXy98X19fX19cdTI1OENcIixcblx0XHRcdFwiXHUyNTkwX19fX19fL3xfX19fX19cdTI1OENcIixcblx0XHRcdFwiXHUyNTkwX19fX18vfF9fX19fX19cdTI1OENcIixcblx0XHRcdFwiXHUyNTkwX19fXy98X19fX19fX19cdTI1OENcIixcblx0XHRcdFwiXHUyNTkwX19fL3xfX19fX19fX19cdTI1OENcIixcblx0XHRcdFwiXHUyNTkwX18vfF9fX19fX19fX19cdTI1OENcIixcblx0XHRcdFwiXHUyNTkwXy98X19fX19fX19fX19cdTI1OENcIixcblx0XHRcdFwiXHUyNTkwL3xfX19fX19fX19fX19cdTI1OENcIlxuXHRcdF1cblx0fSxcblx0XCJkcXBiXCI6IHtcblx0XHRcImludGVydmFsXCI6IDEwMCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcImRcIixcblx0XHRcdFwicVwiLFxuXHRcdFx0XCJwXCIsXG5cdFx0XHRcImJcIlxuXHRcdF1cblx0fSxcblx0XCJ3ZWF0aGVyXCI6IHtcblx0XHRcImludGVydmFsXCI6IDEwMCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIlx1MjYwMFx1RkUwRiBcIixcblx0XHRcdFwiXHUyNjAwXHVGRTBGIFwiLFxuXHRcdFx0XCJcdTI2MDBcdUZFMEYgXCIsXG5cdFx0XHRcIlx1RDgzQ1x1REYyNCBcIixcblx0XHRcdFwiXHUyNkM1XHVGRTBGIFwiLFxuXHRcdFx0XCJcdUQ4M0NcdURGMjUgXCIsXG5cdFx0XHRcIlx1MjYwMVx1RkUwRiBcIixcblx0XHRcdFwiXHVEODNDXHVERjI3IFwiLFxuXHRcdFx0XCJcdUQ4M0NcdURGMjggXCIsXG5cdFx0XHRcIlx1RDgzQ1x1REYyNyBcIixcblx0XHRcdFwiXHVEODNDXHVERjI4IFwiLFxuXHRcdFx0XCJcdUQ4M0NcdURGMjcgXCIsXG5cdFx0XHRcIlx1RDgzQ1x1REYyOCBcIixcblx0XHRcdFwiXHUyNkM4IFwiLFxuXHRcdFx0XCJcdUQ4M0NcdURGMjggXCIsXG5cdFx0XHRcIlx1RDgzQ1x1REYyNyBcIixcblx0XHRcdFwiXHVEODNDXHVERjI4IFwiLFxuXHRcdFx0XCJcdTI2MDFcdUZFMEYgXCIsXG5cdFx0XHRcIlx1RDgzQ1x1REYyNSBcIixcblx0XHRcdFwiXHUyNkM1XHVGRTBGIFwiLFxuXHRcdFx0XCJcdUQ4M0NcdURGMjQgXCIsXG5cdFx0XHRcIlx1MjYwMFx1RkUwRiBcIixcblx0XHRcdFwiXHUyNjAwXHVGRTBGIFwiXG5cdFx0XVxuXHR9LFxuXHRcImNocmlzdG1hc1wiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiA0MDAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCJcdUQ4M0NcdURGMzJcIixcblx0XHRcdFwiXHVEODNDXHVERjg0XCJcblx0XHRdXG5cdH0sXG5cdFwiZ3JlbmFkZVwiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiA4MCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIlx1MDYwQyAgXCIsXG5cdFx0XHRcIlx1MjAzMiAgXCIsXG5cdFx0XHRcIiBcdTAwQjQgXCIsXG5cdFx0XHRcIiBcdTIwM0UgXCIsXG5cdFx0XHRcIiAgXHUyRTBDXCIsXG5cdFx0XHRcIiAgXHUyRTBBXCIsXG5cdFx0XHRcIiAgfFwiLFxuXHRcdFx0XCIgIFx1MjA0RVwiLFxuXHRcdFx0XCIgIFx1MjA1NVwiLFxuXHRcdFx0XCIgXHUwREY0IFwiLFxuXHRcdFx0XCIgIFx1MjA1M1wiLFxuXHRcdFx0XCIgICBcIixcblx0XHRcdFwiICAgXCIsXG5cdFx0XHRcIiAgIFwiXG5cdFx0XVxuXHR9LFxuXHRcInBvaW50XCI6IHtcblx0XHRcImludGVydmFsXCI6IDEyNSxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIlx1MjIxOVx1MjIxOVx1MjIxOVwiLFxuXHRcdFx0XCJcdTI1Q0ZcdTIyMTlcdTIyMTlcIixcblx0XHRcdFwiXHUyMjE5XHUyNUNGXHUyMjE5XCIsXG5cdFx0XHRcIlx1MjIxOVx1MjIxOVx1MjVDRlwiLFxuXHRcdFx0XCJcdTIyMTlcdTIyMTlcdTIyMTlcIlxuXHRcdF1cblx0fSxcblx0XCJsYXllclwiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiAxNTAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCItXCIsXG5cdFx0XHRcIj1cIixcblx0XHRcdFwiXHUyMjYxXCJcblx0XHRdXG5cdH0sXG5cdFwiYmV0YVdhdmVcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogODAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCJcdTAzQzFcdTAzQjJcdTAzQjJcdTAzQjJcdTAzQjJcdTAzQjJcdTAzQjJcIixcblx0XHRcdFwiXHUwM0IyXHUwM0MxXHUwM0IyXHUwM0IyXHUwM0IyXHUwM0IyXHUwM0IyXCIsXG5cdFx0XHRcIlx1MDNCMlx1MDNCMlx1MDNDMVx1MDNCMlx1MDNCMlx1MDNCMlx1MDNCMlwiLFxuXHRcdFx0XCJcdTAzQjJcdTAzQjJcdTAzQjJcdTAzQzFcdTAzQjJcdTAzQjJcdTAzQjJcIixcblx0XHRcdFwiXHUwM0IyXHUwM0IyXHUwM0IyXHUwM0IyXHUwM0MxXHUwM0IyXHUwM0IyXCIsXG5cdFx0XHRcIlx1MDNCMlx1MDNCMlx1MDNCMlx1MDNCMlx1MDNCMlx1MDNDMVx1MDNCMlwiLFxuXHRcdFx0XCJcdTAzQjJcdTAzQjJcdTAzQjJcdTAzQjJcdTAzQjJcdTAzQjJcdTAzQzFcIlxuXHRcdF1cblx0fSxcblx0XCJmaW5nZXJEYW5jZVwiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiAxNjAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCJcdUQ4M0VcdUREMTggXCIsXG5cdFx0XHRcIlx1RDgzRVx1REQxRiBcIixcblx0XHRcdFwiXHVEODNEXHVERDk2IFwiLFxuXHRcdFx0XCJcdTI3MEIgXCIsXG5cdFx0XHRcIlx1RDgzRVx1REQxQSBcIixcblx0XHRcdFwiXHVEODNEXHVEQzQ2IFwiXG5cdFx0XVxuXHR9LFxuXHRcImZpc3RCdW1wXCI6IHtcblx0XHRcImludGVydmFsXCI6IDgwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHVEODNFXHVERDFDXFx1MzAwMFxcdTMwMDBcXHUzMDAwXFx1MzAwMFx1RDgzRVx1REQxQiBcIixcblx0XHRcdFwiXHVEODNFXHVERDFDXFx1MzAwMFxcdTMwMDBcXHUzMDAwXFx1MzAwMFx1RDgzRVx1REQxQiBcIixcblx0XHRcdFwiXHVEODNFXHVERDFDXFx1MzAwMFxcdTMwMDBcXHUzMDAwXFx1MzAwMFx1RDgzRVx1REQxQiBcIixcblx0XHRcdFwiXFx1MzAwMFx1RDgzRVx1REQxQ1xcdTMwMDBcXHUzMDAwXHVEODNFXHVERDFCXFx1MzAwMCBcIixcblx0XHRcdFwiXFx1MzAwMFxcdTMwMDBcdUQ4M0VcdUREMUNcdUQ4M0VcdUREMUJcXHUzMDAwXFx1MzAwMCBcIixcblx0XHRcdFwiXFx1MzAwMFx1RDgzRVx1REQxQ1x1MjcyOFx1RDgzRVx1REQxQlxcdTMwMDBcXHUzMDAwIFwiLFxuXHRcdFx0XCJcdUQ4M0VcdUREMUNcXHUzMDAwXHUyNzI4XFx1MzAwMFx1RDgzRVx1REQxQlxcdTMwMDAgXCJcblx0XHRdXG5cdH0sXG5cdFwic29jY2VySGVhZGVyXCI6IHtcblx0XHRcImludGVydmFsXCI6IDgwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiIFx1RDgzRVx1REREMVx1MjZCRFx1RkUwRiAgICAgICBcdUQ4M0VcdURERDEgXCIsXG5cdFx0XHRcIlx1RDgzRVx1REREMSAgXHUyNkJEXHVGRTBGICAgICAgXHVEODNFXHVEREQxIFwiLFxuXHRcdFx0XCJcdUQ4M0VcdURERDEgICBcdTI2QkRcdUZFMEYgICAgIFx1RDgzRVx1REREMSBcIixcblx0XHRcdFwiXHVEODNFXHVEREQxICAgIFx1MjZCRFx1RkUwRiAgICBcdUQ4M0VcdURERDEgXCIsXG5cdFx0XHRcIlx1RDgzRVx1REREMSAgICAgXHUyNkJEXHVGRTBGICAgXHVEODNFXHVEREQxIFwiLFxuXHRcdFx0XCJcdUQ4M0VcdURERDEgICAgICBcdTI2QkRcdUZFMEYgIFx1RDgzRVx1REREMSBcIixcblx0XHRcdFwiXHVEODNFXHVEREQxICAgICAgIFx1MjZCRFx1RkUwRlx1RDgzRVx1REREMSAgXCIsXG5cdFx0XHRcIlx1RDgzRVx1REREMSAgICAgIFx1MjZCRFx1RkUwRiAgXHVEODNFXHVEREQxIFwiLFxuXHRcdFx0XCJcdUQ4M0VcdURERDEgICAgIFx1MjZCRFx1RkUwRiAgIFx1RDgzRVx1REREMSBcIixcblx0XHRcdFwiXHVEODNFXHVEREQxICAgIFx1MjZCRFx1RkUwRiAgICBcdUQ4M0VcdURERDEgXCIsXG5cdFx0XHRcIlx1RDgzRVx1REREMSAgIFx1MjZCRFx1RkUwRiAgICAgXHVEODNFXHVEREQxIFwiLFxuXHRcdFx0XCJcdUQ4M0VcdURERDEgIFx1MjZCRFx1RkUwRiAgICAgIFx1RDgzRVx1REREMSBcIlxuXHRcdF1cblx0fSxcblx0XCJtaW5kYmxvd25cIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogMTYwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHVEODNEXHVERTEwIFwiLFxuXHRcdFx0XCJcdUQ4M0RcdURFMTAgXCIsXG5cdFx0XHRcIlx1RDgzRFx1REUyRSBcIixcblx0XHRcdFwiXHVEODNEXHVERTJFIFwiLFxuXHRcdFx0XCJcdUQ4M0RcdURFMjYgXCIsXG5cdFx0XHRcIlx1RDgzRFx1REUyNiBcIixcblx0XHRcdFwiXHVEODNEXHVERTI3IFwiLFxuXHRcdFx0XCJcdUQ4M0RcdURFMjcgXCIsXG5cdFx0XHRcIlx1RDgzRVx1REQyRiBcIixcblx0XHRcdFwiXHVEODNEXHVEQ0E1IFwiLFxuXHRcdFx0XCJcdTI3MjggXCIsXG5cdFx0XHRcIlxcdTMwMDAgXCIsXG5cdFx0XHRcIlxcdTMwMDAgXCIsXG5cdFx0XHRcIlxcdTMwMDAgXCJcblx0XHRdXG5cdH0sXG5cdFwic3BlYWtlclwiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiAxNjAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCJcdUQ4M0RcdUREMDggXCIsXG5cdFx0XHRcIlx1RDgzRFx1REQwOSBcIixcblx0XHRcdFwiXHVEODNEXHVERDBBIFwiLFxuXHRcdFx0XCJcdUQ4M0RcdUREMDkgXCJcblx0XHRdXG5cdH0sXG5cdFwib3JhbmdlUHVsc2VcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogMTAwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHVEODNEXHVERDM4IFwiLFxuXHRcdFx0XCJcdUQ4M0RcdUREMzYgXCIsXG5cdFx0XHRcIlx1RDgzRFx1REZFMCBcIixcblx0XHRcdFwiXHVEODNEXHVERkUwIFwiLFxuXHRcdFx0XCJcdUQ4M0RcdUREMzYgXCJcblx0XHRdXG5cdH0sXG5cdFwiYmx1ZVB1bHNlXCI6IHtcblx0XHRcImludGVydmFsXCI6IDEwMCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIlx1RDgzRFx1REQzOSBcIixcblx0XHRcdFwiXHVEODNEXHVERDM3IFwiLFxuXHRcdFx0XCJcdUQ4M0RcdUREMzUgXCIsXG5cdFx0XHRcIlx1RDgzRFx1REQzNSBcIixcblx0XHRcdFwiXHVEODNEXHVERDM3IFwiXG5cdFx0XVxuXHR9LFxuXHRcIm9yYW5nZUJsdWVQdWxzZVwiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiAxMDAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCJcdUQ4M0RcdUREMzggXCIsXG5cdFx0XHRcIlx1RDgzRFx1REQzNiBcIixcblx0XHRcdFwiXHVEODNEXHVERkUwIFwiLFxuXHRcdFx0XCJcdUQ4M0RcdURGRTAgXCIsXG5cdFx0XHRcIlx1RDgzRFx1REQzNiBcIixcblx0XHRcdFwiXHVEODNEXHVERDM5IFwiLFxuXHRcdFx0XCJcdUQ4M0RcdUREMzcgXCIsXG5cdFx0XHRcIlx1RDgzRFx1REQzNSBcIixcblx0XHRcdFwiXHVEODNEXHVERDM1IFwiLFxuXHRcdFx0XCJcdUQ4M0RcdUREMzcgXCJcblx0XHRdXG5cdH0sXG5cdFwidGltZVRyYXZlbFwiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiAxMDAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCJcdUQ4M0RcdURENUIgXCIsXG5cdFx0XHRcIlx1RDgzRFx1REQ1QSBcIixcblx0XHRcdFwiXHVEODNEXHVERDU5IFwiLFxuXHRcdFx0XCJcdUQ4M0RcdURENTggXCIsXG5cdFx0XHRcIlx1RDgzRFx1REQ1NyBcIixcblx0XHRcdFwiXHVEODNEXHVERDU2IFwiLFxuXHRcdFx0XCJcdUQ4M0RcdURENTUgXCIsXG5cdFx0XHRcIlx1RDgzRFx1REQ1NCBcIixcblx0XHRcdFwiXHVEODNEXHVERDUzIFwiLFxuXHRcdFx0XCJcdUQ4M0RcdURENTIgXCIsXG5cdFx0XHRcIlx1RDgzRFx1REQ1MSBcIixcblx0XHRcdFwiXHVEODNEXHVERDUwIFwiXG5cdFx0XVxuXHR9LFxuXHRcImFlc3RoZXRpY1wiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiA4MCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIlx1MjVCMFx1MjVCMVx1MjVCMVx1MjVCMVx1MjVCMVx1MjVCMVx1MjVCMVwiLFxuXHRcdFx0XCJcdTI1QjBcdTI1QjBcdTI1QjFcdTI1QjFcdTI1QjFcdTI1QjFcdTI1QjFcIixcblx0XHRcdFwiXHUyNUIwXHUyNUIwXHUyNUIwXHUyNUIxXHUyNUIxXHUyNUIxXHUyNUIxXCIsXG5cdFx0XHRcIlx1MjVCMFx1MjVCMFx1MjVCMFx1MjVCMFx1MjVCMVx1MjVCMVx1MjVCMVwiLFxuXHRcdFx0XCJcdTI1QjBcdTI1QjBcdTI1QjBcdTI1QjBcdTI1QjBcdTI1QjFcdTI1QjFcIixcblx0XHRcdFwiXHUyNUIwXHUyNUIwXHUyNUIwXHUyNUIwXHUyNUIwXHUyNUIwXHUyNUIxXCIsXG5cdFx0XHRcIlx1MjVCMFx1MjVCMFx1MjVCMFx1MjVCMFx1MjVCMFx1MjVCMFx1MjVCMFwiLFxuXHRcdFx0XCJcdTI1QjBcdTI1QjFcdTI1QjFcdTI1QjFcdTI1QjFcdTI1QjFcdTI1QjFcIlxuXHRcdF1cblx0fSxcblx0XCJkd2FyZkZvcnRyZXNzXCI6IHtcblx0XHRcImludGVydmFsXCI6IDgwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiIFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIlx1MjYzQVx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIlx1MjYzQVx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIlx1MjYzQVx1MjU5M1x1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIlx1MjYzQVx1MjU5M1x1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIlx1MjYzQVx1MjU5Mlx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIlx1MjYzQVx1MjU5Mlx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIlx1MjYzQVx1MjU5MVx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIlx1MjYzQVx1MjU5MVx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIlx1MjYzQSBcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgXHUyNjNBXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUwMEEzXHUwMEEzXHUwMEEzICBcIixcblx0XHRcdFwiIFx1MjYzQVx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiBcdTI2M0FcdTI1OTNcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgXHUyNjNBXHUyNTkzXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUwMEEzXHUwMEEzXHUwMEEzICBcIixcblx0XHRcdFwiIFx1MjYzQVx1MjU5Mlx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiBcdTI2M0FcdTI1OTJcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgXHUyNjNBXHUyNTkxXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUwMEEzXHUwMEEzXHUwMEEzICBcIixcblx0XHRcdFwiIFx1MjYzQVx1MjU5MVx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiBcdTI2M0EgXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUwMEEzXHUwMEEzXHUwMEEzICBcIixcblx0XHRcdFwiICBcdTI2M0FcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgIFx1MjYzQVx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiAgXHUyNjNBXHUyNTkzXHUyNTg4XHUyNTg4XHUyNTg4XHUwMEEzXHUwMEEzXHUwMEEzICBcIixcblx0XHRcdFwiICBcdTI2M0FcdTI1OTNcdTI1ODhcdTI1ODhcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgIFx1MjYzQVx1MjU5Mlx1MjU4OFx1MjU4OFx1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiAgXHUyNjNBXHUyNTkyXHUyNTg4XHUyNTg4XHUyNTg4XHUwMEEzXHUwMEEzXHUwMEEzICBcIixcblx0XHRcdFwiICBcdTI2M0FcdTI1OTFcdTI1ODhcdTI1ODhcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgIFx1MjYzQVx1MjU5MVx1MjU4OFx1MjU4OFx1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiAgXHUyNjNBIFx1MjU4OFx1MjU4OFx1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiAgIFx1MjYzQVx1MjU4OFx1MjU4OFx1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiAgIFx1MjYzQVx1MjU4OFx1MjU4OFx1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiAgIFx1MjYzQVx1MjU5M1x1MjU4OFx1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiAgIFx1MjYzQVx1MjU5M1x1MjU4OFx1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiAgIFx1MjYzQVx1MjU5Mlx1MjU4OFx1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiAgIFx1MjYzQVx1MjU5Mlx1MjU4OFx1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiAgIFx1MjYzQVx1MjU5MVx1MjU4OFx1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiAgIFx1MjYzQVx1MjU5MVx1MjU4OFx1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiAgIFx1MjYzQSBcdTI1ODhcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICAgXHUyNjNBXHUyNTg4XHUyNTg4XHUwMEEzXHUwMEEzXHUwMEEzICBcIixcblx0XHRcdFwiICAgIFx1MjYzQVx1MjU4OFx1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiAgICBcdTI2M0FcdTI1OTNcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICAgXHUyNjNBXHUyNTkzXHUyNTg4XHUwMEEzXHUwMEEzXHUwMEEzICBcIixcblx0XHRcdFwiICAgIFx1MjYzQVx1MjU5Mlx1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiAgICBcdTI2M0FcdTI1OTJcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICAgXHUyNjNBXHUyNTkxXHUyNTg4XHUwMEEzXHUwMEEzXHUwMEEzICBcIixcblx0XHRcdFwiICAgIFx1MjYzQVx1MjU5MVx1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiAgICBcdTI2M0EgXHUyNTg4XHUwMEEzXHUwMEEzXHUwMEEzICBcIixcblx0XHRcdFwiICAgICBcdTI2M0FcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICAgIFx1MjYzQVx1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiAgICAgXHUyNjNBXHUyNTkzXHUwMEEzXHUwMEEzXHUwMEEzICBcIixcblx0XHRcdFwiICAgICBcdTI2M0FcdTI1OTNcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICAgIFx1MjYzQVx1MjU5Mlx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiAgICAgXHUyNjNBXHUyNTkyXHUwMEEzXHUwMEEzXHUwMEEzICBcIixcblx0XHRcdFwiICAgICBcdTI2M0FcdTI1OTFcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICAgIFx1MjYzQVx1MjU5MVx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiAgICAgXHUyNjNBIFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiAgICAgIFx1MjYzQVx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiAgICAgIFx1MjYzQVx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiAgICAgIFx1MjYzQVx1MjU5M1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiAgICAgIFx1MjYzQVx1MjU5M1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiAgICAgIFx1MjYzQVx1MjU5Mlx1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiAgICAgIFx1MjYzQVx1MjU5Mlx1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiAgICAgIFx1MjYzQVx1MjU5MVx1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiAgICAgIFx1MjYzQVx1MjU5MVx1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiAgICAgIFx1MjYzQSBcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICAgICAgXHUyNjNBXHUwMEEzXHUwMEEzICBcIixcblx0XHRcdFwiICAgICAgIFx1MjYzQVx1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiAgICAgICBcdTI2M0FcdTI1OTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICAgICAgXHUyNjNBXHUyNTkzXHUwMEEzICBcIixcblx0XHRcdFwiICAgICAgIFx1MjYzQVx1MjU5Mlx1MDBBMyAgXCIsXG5cdFx0XHRcIiAgICAgICBcdTI2M0FcdTI1OTJcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICAgICAgXHUyNjNBXHUyNTkxXHUwMEEzICBcIixcblx0XHRcdFwiICAgICAgIFx1MjYzQVx1MjU5MVx1MDBBMyAgXCIsXG5cdFx0XHRcIiAgICAgICBcdTI2M0EgXHUwMEEzICBcIixcblx0XHRcdFwiICAgICAgICBcdTI2M0FcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICAgICAgIFx1MjYzQVx1MDBBMyAgXCIsXG5cdFx0XHRcIiAgICAgICAgXHUyNjNBXHUyNTkzICBcIixcblx0XHRcdFwiICAgICAgICBcdTI2M0FcdTI1OTMgIFwiLFxuXHRcdFx0XCIgICAgICAgIFx1MjYzQVx1MjU5MiAgXCIsXG5cdFx0XHRcIiAgICAgICAgXHUyNjNBXHUyNTkyICBcIixcblx0XHRcdFwiICAgICAgICBcdTI2M0FcdTI1OTEgIFwiLFxuXHRcdFx0XCIgICAgICAgIFx1MjYzQVx1MjU5MSAgXCIsXG5cdFx0XHRcIiAgICAgICAgXHUyNjNBICAgXCIsXG5cdFx0XHRcIiAgICAgICAgXHUyNjNBICAmXCIsXG5cdFx0XHRcIiAgICAgICAgXHUyNjNBIFx1MjYzQyZcIixcblx0XHRcdFwiICAgICAgIFx1MjYzQSBcdTI2M0MgJlwiLFxuXHRcdFx0XCIgICAgICAgXHUyNjNBXHUyNjNDICAmXCIsXG5cdFx0XHRcIiAgICAgIFx1MjYzQVx1MjYzQyAgJiBcIixcblx0XHRcdFwiICAgICAgXHUyMDNDICAgJiBcIixcblx0XHRcdFwiICAgICBcdTI2M0EgICAmICBcIixcblx0XHRcdFwiICAgIFx1MjAzQyAgICAmICBcIixcblx0XHRcdFwiICAgXHUyNjNBICAgICYgICBcIixcblx0XHRcdFwiICBcdTIwM0MgICAgICYgICBcIixcblx0XHRcdFwiIFx1MjYzQSAgICAgJiAgICBcIixcblx0XHRcdFwiXHUyMDNDICAgICAgJiAgICBcIixcblx0XHRcdFwiICAgICAgJiAgICAgXCIsXG5cdFx0XHRcIiAgICAgICYgICAgIFwiLFxuXHRcdFx0XCIgICAgICYgICBcdTI1OTEgIFwiLFxuXHRcdFx0XCIgICAgICYgICBcdTI1OTIgIFwiLFxuXHRcdFx0XCIgICAgJiAgICBcdTI1OTMgIFwiLFxuXHRcdFx0XCIgICAgJiAgICBcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICAmICAgIFx1MjU5MVx1MDBBMyAgXCIsXG5cdFx0XHRcIiAgICYgICAgXHUyNTkyXHUwMEEzICBcIixcblx0XHRcdFwiICAmICAgICBcdTI1OTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICYgICAgIFx1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiAmICAgICBcdTI1OTFcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgJiAgICAgXHUyNTkyXHUwMEEzXHUwMEEzICBcIixcblx0XHRcdFwiJiAgICAgIFx1MjU5M1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiYgICAgICBcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICAgICBcdTI1OTFcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICAgICBcdTI1OTJcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICAgICBcdTI1OTNcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICAgICBcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICAgIFx1MjU5MVx1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiAgICAgXHUyNTkyXHUyNTg4XHUwMEEzXHUwMEEzXHUwMEEzICBcIixcblx0XHRcdFwiICAgICBcdTI1OTNcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICAgIFx1MjU4OFx1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiAgICBcdTI1OTFcdTI1ODhcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICAgXHUyNTkyXHUyNTg4XHUyNTg4XHUwMEEzXHUwMEEzXHUwMEEzICBcIixcblx0XHRcdFwiICAgIFx1MjU5M1x1MjU4OFx1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiAgICBcdTI1ODhcdTI1ODhcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICBcdTI1OTFcdTI1ODhcdTI1ODhcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICBcdTI1OTJcdTI1ODhcdTI1ODhcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICBcdTI1OTNcdTI1ODhcdTI1ODhcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICBcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgIFx1MjU5MVx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiAgXHUyNTkyXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUwMEEzXHUwMEEzXHUwMEEzICBcIixcblx0XHRcdFwiICBcdTI1OTNcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgIFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiBcdTI1OTFcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgXHUyNTkyXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUwMEEzXHUwMEEzXHUwMEEzICBcIixcblx0XHRcdFwiIFx1MjU5M1x1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiBcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUwMEEzXHUwMEEzXHUwMEEzICBcIlxuXHRcdF1cblx0fVxufVxuIiwgIid1c2Ugc3RyaWN0JztcblxuY29uc3Qgc3Bpbm5lcnMgPSBPYmplY3QuYXNzaWduKHt9LCByZXF1aXJlKCcuL3NwaW5uZXJzLmpzb24nKSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgaW1wb3J0L2V4dGVuc2lvbnNcblxuY29uc3Qgc3Bpbm5lcnNMaXN0ID0gT2JqZWN0LmtleXMoc3Bpbm5lcnMpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoc3Bpbm5lcnMsICdyYW5kb20nLCB7XG5cdGdldCgpIHtcblx0XHRjb25zdCByYW5kb21JbmRleCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIHNwaW5uZXJzTGlzdC5sZW5ndGgpO1xuXHRcdGNvbnN0IHNwaW5uZXJOYW1lID0gc3Bpbm5lcnNMaXN0W3JhbmRvbUluZGV4XTtcblx0XHRyZXR1cm4gc3Bpbm5lcnNbc3Bpbm5lck5hbWVdO1xuXHR9XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBzcGlubmVycztcbiIsICJ2YXIgZWF3ID0ge307XG5cbmlmICgndW5kZWZpbmVkJyA9PSB0eXBlb2YgbW9kdWxlKSB7XG4gIHdpbmRvdy5lYXN0YXNpYW53aWR0aCA9IGVhdztcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gZWF3O1xufVxuXG5lYXcuZWFzdEFzaWFuV2lkdGggPSBmdW5jdGlvbihjaGFyYWN0ZXIpIHtcbiAgdmFyIHggPSBjaGFyYWN0ZXIuY2hhckNvZGVBdCgwKTtcbiAgdmFyIHkgPSAoY2hhcmFjdGVyLmxlbmd0aCA9PSAyKSA/IGNoYXJhY3Rlci5jaGFyQ29kZUF0KDEpIDogMDtcbiAgdmFyIGNvZGVQb2ludCA9IHg7XG4gIGlmICgoMHhEODAwIDw9IHggJiYgeCA8PSAweERCRkYpICYmICgweERDMDAgPD0geSAmJiB5IDw9IDB4REZGRikpIHtcbiAgICB4ICY9IDB4M0ZGO1xuICAgIHkgJj0gMHgzRkY7XG4gICAgY29kZVBvaW50ID0gKHggPDwgMTApIHwgeTtcbiAgICBjb2RlUG9pbnQgKz0gMHgxMDAwMDtcbiAgfVxuXG4gIGlmICgoMHgzMDAwID09IGNvZGVQb2ludCkgfHxcbiAgICAgICgweEZGMDEgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweEZGNjApIHx8XG4gICAgICAoMHhGRkUwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHhGRkU2KSkge1xuICAgIHJldHVybiAnRic7XG4gIH1cbiAgaWYgKCgweDIwQTkgPT0gY29kZVBvaW50KSB8fFxuICAgICAgKDB4RkY2MSA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4RkZCRSkgfHxcbiAgICAgICgweEZGQzIgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweEZGQzcpIHx8XG4gICAgICAoMHhGRkNBIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHhGRkNGKSB8fFxuICAgICAgKDB4RkZEMiA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4RkZENykgfHxcbiAgICAgICgweEZGREEgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweEZGREMpIHx8XG4gICAgICAoMHhGRkU4IDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHhGRkVFKSkge1xuICAgIHJldHVybiAnSCc7XG4gIH1cbiAgaWYgKCgweDExMDAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDExNUYpIHx8XG4gICAgICAoMHgxMUEzIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgxMUE3KSB8fFxuICAgICAgKDB4MTFGQSA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MTFGRikgfHxcbiAgICAgICgweDIzMjkgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDIzMkEpIHx8XG4gICAgICAoMHgyRTgwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyRTk5KSB8fFxuICAgICAgKDB4MkU5QiA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MkVGMykgfHxcbiAgICAgICgweDJGMDAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDJGRDUpIHx8XG4gICAgICAoMHgyRkYwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyRkZCKSB8fFxuICAgICAgKDB4MzAwMSA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MzAzRSkgfHxcbiAgICAgICgweDMwNDEgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDMwOTYpIHx8XG4gICAgICAoMHgzMDk5IDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgzMEZGKSB8fFxuICAgICAgKDB4MzEwNSA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MzEyRCkgfHxcbiAgICAgICgweDMxMzEgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDMxOEUpIHx8XG4gICAgICAoMHgzMTkwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgzMUJBKSB8fFxuICAgICAgKDB4MzFDMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MzFFMykgfHxcbiAgICAgICgweDMxRjAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDMyMUUpIHx8XG4gICAgICAoMHgzMjIwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgzMjQ3KSB8fFxuICAgICAgKDB4MzI1MCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MzJGRSkgfHxcbiAgICAgICgweDMzMDAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDREQkYpIHx8XG4gICAgICAoMHg0RTAwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHhBNDhDKSB8fFxuICAgICAgKDB4QTQ5MCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4QTRDNikgfHxcbiAgICAgICgweEE5NjAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweEE5N0MpIHx8XG4gICAgICAoMHhBQzAwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHhEN0EzKSB8fFxuICAgICAgKDB4RDdCMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4RDdDNikgfHxcbiAgICAgICgweEQ3Q0IgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweEQ3RkIpIHx8XG4gICAgICAoMHhGOTAwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHhGQUZGKSB8fFxuICAgICAgKDB4RkUxMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4RkUxOSkgfHxcbiAgICAgICgweEZFMzAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweEZFNTIpIHx8XG4gICAgICAoMHhGRTU0IDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHhGRTY2KSB8fFxuICAgICAgKDB4RkU2OCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4RkU2QikgfHxcbiAgICAgICgweDFCMDAwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgxQjAwMSkgfHxcbiAgICAgICgweDFGMjAwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgxRjIwMikgfHxcbiAgICAgICgweDFGMjEwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgxRjIzQSkgfHxcbiAgICAgICgweDFGMjQwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgxRjI0OCkgfHxcbiAgICAgICgweDFGMjUwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgxRjI1MSkgfHxcbiAgICAgICgweDIwMDAwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyRjczRikgfHxcbiAgICAgICgweDJCNzQwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyRkZGRCkgfHxcbiAgICAgICgweDMwMDAwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgzRkZGRCkpIHtcbiAgICByZXR1cm4gJ1cnO1xuICB9XG4gIGlmICgoMHgwMDIwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgwMDdFKSB8fFxuICAgICAgKDB4MDBBMiA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MDBBMykgfHxcbiAgICAgICgweDAwQTUgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDAwQTYpIHx8XG4gICAgICAoMHgwMEFDID09IGNvZGVQb2ludCkgfHxcbiAgICAgICgweDAwQUYgPT0gY29kZVBvaW50KSB8fFxuICAgICAgKDB4MjdFNiA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MjdFRCkgfHxcbiAgICAgICgweDI5ODUgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDI5ODYpKSB7XG4gICAgcmV0dXJuICdOYSc7XG4gIH1cbiAgaWYgKCgweDAwQTEgPT0gY29kZVBvaW50KSB8fFxuICAgICAgKDB4MDBBNCA9PSBjb2RlUG9pbnQpIHx8XG4gICAgICAoMHgwMEE3IDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgwMEE4KSB8fFxuICAgICAgKDB4MDBBQSA9PSBjb2RlUG9pbnQpIHx8XG4gICAgICAoMHgwMEFEIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgwMEFFKSB8fFxuICAgICAgKDB4MDBCMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MDBCNCkgfHxcbiAgICAgICgweDAwQjYgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDAwQkEpIHx8XG4gICAgICAoMHgwMEJDIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgwMEJGKSB8fFxuICAgICAgKDB4MDBDNiA9PSBjb2RlUG9pbnQpIHx8XG4gICAgICAoMHgwMEQwID09IGNvZGVQb2ludCkgfHxcbiAgICAgICgweDAwRDcgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDAwRDgpIHx8XG4gICAgICAoMHgwMERFIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgwMEUxKSB8fFxuICAgICAgKDB4MDBFNiA9PSBjb2RlUG9pbnQpIHx8XG4gICAgICAoMHgwMEU4IDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgwMEVBKSB8fFxuICAgICAgKDB4MDBFQyA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MDBFRCkgfHxcbiAgICAgICgweDAwRjAgPT0gY29kZVBvaW50KSB8fFxuICAgICAgKDB4MDBGMiA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MDBGMykgfHxcbiAgICAgICgweDAwRjcgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDAwRkEpIHx8XG4gICAgICAoMHgwMEZDID09IGNvZGVQb2ludCkgfHxcbiAgICAgICgweDAwRkUgPT0gY29kZVBvaW50KSB8fFxuICAgICAgKDB4MDEwMSA9PSBjb2RlUG9pbnQpIHx8XG4gICAgICAoMHgwMTExID09IGNvZGVQb2ludCkgfHxcbiAgICAgICgweDAxMTMgPT0gY29kZVBvaW50KSB8fFxuICAgICAgKDB4MDExQiA9PSBjb2RlUG9pbnQpIHx8XG4gICAgICAoMHgwMTI2IDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgwMTI3KSB8fFxuICAgICAgKDB4MDEyQiA9PSBjb2RlUG9pbnQpIHx8XG4gICAgICAoMHgwMTMxIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgwMTMzKSB8fFxuICAgICAgKDB4MDEzOCA9PSBjb2RlUG9pbnQpIHx8XG4gICAgICAoMHgwMTNGIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgwMTQyKSB8fFxuICAgICAgKDB4MDE0NCA9PSBjb2RlUG9pbnQpIHx8XG4gICAgICAoMHgwMTQ4IDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgwMTRCKSB8fFxuICAgICAgKDB4MDE0RCA9PSBjb2RlUG9pbnQpIHx8XG4gICAgICAoMHgwMTUyIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgwMTUzKSB8fFxuICAgICAgKDB4MDE2NiA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MDE2NykgfHxcbiAgICAgICgweDAxNkIgPT0gY29kZVBvaW50KSB8fFxuICAgICAgKDB4MDFDRSA9PSBjb2RlUG9pbnQpIHx8XG4gICAgICAoMHgwMUQwID09IGNvZGVQb2ludCkgfHxcbiAgICAgICgweDAxRDIgPT0gY29kZVBvaW50KSB8fFxuICAgICAgKDB4MDFENCA9PSBjb2RlUG9pbnQpIHx8XG4gICAgICAoMHgwMUQ2ID09IGNvZGVQb2ludCkgfHxcbiAgICAgICgweDAxRDggPT0gY29kZVBvaW50KSB8fFxuICAgICAgKDB4MDFEQSA9PSBjb2RlUG9pbnQpIHx8XG4gICAgICAoMHgwMURDID09IGNvZGVQb2ludCkgfHxcbiAgICAgICgweDAyNTEgPT0gY29kZVBvaW50KSB8fFxuICAgICAgKDB4MDI2MSA9PSBjb2RlUG9pbnQpIHx8XG4gICAgICAoMHgwMkM0ID09IGNvZGVQb2ludCkgfHxcbiAgICAgICgweDAyQzcgPT0gY29kZVBvaW50KSB8fFxuICAgICAgKDB4MDJDOSA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MDJDQikgfHxcbiAgICAgICgweDAyQ0QgPT0gY29kZVBvaW50KSB8fFxuICAgICAgKDB4MDJEMCA9PSBjb2RlUG9pbnQpIHx8XG4gICAgICAoMHgwMkQ4IDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgwMkRCKSB8fFxuICAgICAgKDB4MDJERCA9PSBjb2RlUG9pbnQpIHx8XG4gICAgICAoMHgwMkRGID09IGNvZGVQb2ludCkgfHxcbiAgICAgICgweDAzMDAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDAzNkYpIHx8XG4gICAgICAoMHgwMzkxIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgwM0ExKSB8fFxuICAgICAgKDB4MDNBMyA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MDNBOSkgfHxcbiAgICAgICgweDAzQjEgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDAzQzEpIHx8XG4gICAgICAoMHgwM0MzIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgwM0M5KSB8fFxuICAgICAgKDB4MDQwMSA9PSBjb2RlUG9pbnQpIHx8XG4gICAgICAoMHgwNDEwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgwNDRGKSB8fFxuICAgICAgKDB4MDQ1MSA9PSBjb2RlUG9pbnQpIHx8XG4gICAgICAoMHgyMDEwID09IGNvZGVQb2ludCkgfHxcbiAgICAgICgweDIwMTMgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDIwMTYpIHx8XG4gICAgICAoMHgyMDE4IDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyMDE5KSB8fFxuICAgICAgKDB4MjAxQyA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MjAxRCkgfHxcbiAgICAgICgweDIwMjAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDIwMjIpIHx8XG4gICAgICAoMHgyMDI0IDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyMDI3KSB8fFxuICAgICAgKDB4MjAzMCA9PSBjb2RlUG9pbnQpIHx8XG4gICAgICAoMHgyMDMyIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyMDMzKSB8fFxuICAgICAgKDB4MjAzNSA9PSBjb2RlUG9pbnQpIHx8XG4gICAgICAoMHgyMDNCID09IGNvZGVQb2ludCkgfHxcbiAgICAgICgweDIwM0UgPT0gY29kZVBvaW50KSB8fFxuICAgICAgKDB4MjA3NCA9PSBjb2RlUG9pbnQpIHx8XG4gICAgICAoMHgyMDdGID09IGNvZGVQb2ludCkgfHxcbiAgICAgICgweDIwODEgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDIwODQpIHx8XG4gICAgICAoMHgyMEFDID09IGNvZGVQb2ludCkgfHxcbiAgICAgICgweDIxMDMgPT0gY29kZVBvaW50KSB8fFxuICAgICAgKDB4MjEwNSA9PSBjb2RlUG9pbnQpIHx8XG4gICAgICAoMHgyMTA5ID09IGNvZGVQb2ludCkgfHxcbiAgICAgICgweDIxMTMgPT0gY29kZVBvaW50KSB8fFxuICAgICAgKDB4MjExNiA9PSBjb2RlUG9pbnQpIHx8XG4gICAgICAoMHgyMTIxIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyMTIyKSB8fFxuICAgICAgKDB4MjEyNiA9PSBjb2RlUG9pbnQpIHx8XG4gICAgICAoMHgyMTJCID09IGNvZGVQb2ludCkgfHxcbiAgICAgICgweDIxNTMgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDIxNTQpIHx8XG4gICAgICAoMHgyMTVCIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyMTVFKSB8fFxuICAgICAgKDB4MjE2MCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MjE2QikgfHxcbiAgICAgICgweDIxNzAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDIxNzkpIHx8XG4gICAgICAoMHgyMTg5ID09IGNvZGVQb2ludCkgfHxcbiAgICAgICgweDIxOTAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDIxOTkpIHx8XG4gICAgICAoMHgyMUI4IDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyMUI5KSB8fFxuICAgICAgKDB4MjFEMiA9PSBjb2RlUG9pbnQpIHx8XG4gICAgICAoMHgyMUQ0ID09IGNvZGVQb2ludCkgfHxcbiAgICAgICgweDIxRTcgPT0gY29kZVBvaW50KSB8fFxuICAgICAgKDB4MjIwMCA9PSBjb2RlUG9pbnQpIHx8XG4gICAgICAoMHgyMjAyIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyMjAzKSB8fFxuICAgICAgKDB4MjIwNyA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MjIwOCkgfHxcbiAgICAgICgweDIyMEIgPT0gY29kZVBvaW50KSB8fFxuICAgICAgKDB4MjIwRiA9PSBjb2RlUG9pbnQpIHx8XG4gICAgICAoMHgyMjExID09IGNvZGVQb2ludCkgfHxcbiAgICAgICgweDIyMTUgPT0gY29kZVBvaW50KSB8fFxuICAgICAgKDB4MjIxQSA9PSBjb2RlUG9pbnQpIHx8XG4gICAgICAoMHgyMjFEIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyMjIwKSB8fFxuICAgICAgKDB4MjIyMyA9PSBjb2RlUG9pbnQpIHx8XG4gICAgICAoMHgyMjI1ID09IGNvZGVQb2ludCkgfHxcbiAgICAgICgweDIyMjcgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDIyMkMpIHx8XG4gICAgICAoMHgyMjJFID09IGNvZGVQb2ludCkgfHxcbiAgICAgICgweDIyMzQgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDIyMzcpIHx8XG4gICAgICAoMHgyMjNDIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyMjNEKSB8fFxuICAgICAgKDB4MjI0OCA9PSBjb2RlUG9pbnQpIHx8XG4gICAgICAoMHgyMjRDID09IGNvZGVQb2ludCkgfHxcbiAgICAgICgweDIyNTIgPT0gY29kZVBvaW50KSB8fFxuICAgICAgKDB4MjI2MCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MjI2MSkgfHxcbiAgICAgICgweDIyNjQgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDIyNjcpIHx8XG4gICAgICAoMHgyMjZBIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyMjZCKSB8fFxuICAgICAgKDB4MjI2RSA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MjI2RikgfHxcbiAgICAgICgweDIyODIgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDIyODMpIHx8XG4gICAgICAoMHgyMjg2IDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyMjg3KSB8fFxuICAgICAgKDB4MjI5NSA9PSBjb2RlUG9pbnQpIHx8XG4gICAgICAoMHgyMjk5ID09IGNvZGVQb2ludCkgfHxcbiAgICAgICgweDIyQTUgPT0gY29kZVBvaW50KSB8fFxuICAgICAgKDB4MjJCRiA9PSBjb2RlUG9pbnQpIHx8XG4gICAgICAoMHgyMzEyID09IGNvZGVQb2ludCkgfHxcbiAgICAgICgweDI0NjAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDI0RTkpIHx8XG4gICAgICAoMHgyNEVCIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyNTRCKSB8fFxuICAgICAgKDB4MjU1MCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MjU3MykgfHxcbiAgICAgICgweDI1ODAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDI1OEYpIHx8XG4gICAgICAoMHgyNTkyIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyNTk1KSB8fFxuICAgICAgKDB4MjVBMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MjVBMSkgfHxcbiAgICAgICgweDI1QTMgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDI1QTkpIHx8XG4gICAgICAoMHgyNUIyIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyNUIzKSB8fFxuICAgICAgKDB4MjVCNiA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MjVCNykgfHxcbiAgICAgICgweDI1QkMgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDI1QkQpIHx8XG4gICAgICAoMHgyNUMwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyNUMxKSB8fFxuICAgICAgKDB4MjVDNiA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MjVDOCkgfHxcbiAgICAgICgweDI1Q0IgPT0gY29kZVBvaW50KSB8fFxuICAgICAgKDB4MjVDRSA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MjVEMSkgfHxcbiAgICAgICgweDI1RTIgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDI1RTUpIHx8XG4gICAgICAoMHgyNUVGID09IGNvZGVQb2ludCkgfHxcbiAgICAgICgweDI2MDUgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDI2MDYpIHx8XG4gICAgICAoMHgyNjA5ID09IGNvZGVQb2ludCkgfHxcbiAgICAgICgweDI2MEUgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDI2MEYpIHx8XG4gICAgICAoMHgyNjE0IDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyNjE1KSB8fFxuICAgICAgKDB4MjYxQyA9PSBjb2RlUG9pbnQpIHx8XG4gICAgICAoMHgyNjFFID09IGNvZGVQb2ludCkgfHxcbiAgICAgICgweDI2NDAgPT0gY29kZVBvaW50KSB8fFxuICAgICAgKDB4MjY0MiA9PSBjb2RlUG9pbnQpIHx8XG4gICAgICAoMHgyNjYwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyNjYxKSB8fFxuICAgICAgKDB4MjY2MyA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MjY2NSkgfHxcbiAgICAgICgweDI2NjcgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDI2NkEpIHx8XG4gICAgICAoMHgyNjZDIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyNjZEKSB8fFxuICAgICAgKDB4MjY2RiA9PSBjb2RlUG9pbnQpIHx8XG4gICAgICAoMHgyNjlFIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyNjlGKSB8fFxuICAgICAgKDB4MjZCRSA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MjZCRikgfHxcbiAgICAgICgweDI2QzQgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDI2Q0QpIHx8XG4gICAgICAoMHgyNkNGIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyNkUxKSB8fFxuICAgICAgKDB4MjZFMyA9PSBjb2RlUG9pbnQpIHx8XG4gICAgICAoMHgyNkU4IDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyNkZGKSB8fFxuICAgICAgKDB4MjczRCA9PSBjb2RlUG9pbnQpIHx8XG4gICAgICAoMHgyNzU3ID09IGNvZGVQb2ludCkgfHxcbiAgICAgICgweDI3NzYgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDI3N0YpIHx8XG4gICAgICAoMHgyQjU1IDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyQjU5KSB8fFxuICAgICAgKDB4MzI0OCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MzI0RikgfHxcbiAgICAgICgweEUwMDAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweEY4RkYpIHx8XG4gICAgICAoMHhGRTAwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHhGRTBGKSB8fFxuICAgICAgKDB4RkZGRCA9PSBjb2RlUG9pbnQpIHx8XG4gICAgICAoMHgxRjEwMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MUYxMEEpIHx8XG4gICAgICAoMHgxRjExMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MUYxMkQpIHx8XG4gICAgICAoMHgxRjEzMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MUYxNjkpIHx8XG4gICAgICAoMHgxRjE3MCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MUYxOUEpIHx8XG4gICAgICAoMHhFMDEwMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4RTAxRUYpIHx8XG4gICAgICAoMHhGMDAwMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4RkZGRkQpIHx8XG4gICAgICAoMHgxMDAwMDAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDEwRkZGRCkpIHtcbiAgICByZXR1cm4gJ0EnO1xuICB9XG5cbiAgcmV0dXJuICdOJztcbn07XG5cbmVhdy5jaGFyYWN0ZXJMZW5ndGggPSBmdW5jdGlvbihjaGFyYWN0ZXIpIHtcbiAgdmFyIGNvZGUgPSB0aGlzLmVhc3RBc2lhbldpZHRoKGNoYXJhY3Rlcik7XG4gIGlmIChjb2RlID09ICdGJyB8fCBjb2RlID09ICdXJyB8fCBjb2RlID09ICdBJykge1xuICAgIHJldHVybiAyO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAxO1xuICB9XG59O1xuXG4vLyBTcGxpdCBhIHN0cmluZyBjb25zaWRlcmluZyBzdXJyb2dhdGUtcGFpcnMuXG5mdW5jdGlvbiBzdHJpbmdUb0FycmF5KHN0cmluZykge1xuICByZXR1cm4gc3RyaW5nLm1hdGNoKC9bXFx1RDgwMC1cXHVEQkZGXVtcXHVEQzAwLVxcdURGRkZdfFteXFx1RDgwMC1cXHVERkZGXS9nKSB8fCBbXTtcbn1cblxuZWF3Lmxlbmd0aCA9IGZ1bmN0aW9uKHN0cmluZykge1xuICB2YXIgY2hhcmFjdGVycyA9IHN0cmluZ1RvQXJyYXkoc3RyaW5nKTtcbiAgdmFyIGxlbiA9IDA7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgY2hhcmFjdGVycy5sZW5ndGg7IGkrKykge1xuICAgIGxlbiA9IGxlbiArIHRoaXMuY2hhcmFjdGVyTGVuZ3RoKGNoYXJhY3RlcnNbaV0pO1xuICB9XG4gIHJldHVybiBsZW47XG59O1xuXG5lYXcuc2xpY2UgPSBmdW5jdGlvbih0ZXh0LCBzdGFydCwgZW5kKSB7XG4gIHRleHRMZW4gPSBlYXcubGVuZ3RoKHRleHQpXG4gIHN0YXJ0ID0gc3RhcnQgPyBzdGFydCA6IDA7XG4gIGVuZCA9IGVuZCA/IGVuZCA6IDE7XG4gIGlmIChzdGFydCA8IDApIHtcbiAgICAgIHN0YXJ0ID0gdGV4dExlbiArIHN0YXJ0O1xuICB9XG4gIGlmIChlbmQgPCAwKSB7XG4gICAgICBlbmQgPSB0ZXh0TGVuICsgZW5kO1xuICB9XG4gIHZhciByZXN1bHQgPSAnJztcbiAgdmFyIGVhd0xlbiA9IDA7XG4gIHZhciBjaGFycyA9IHN0cmluZ1RvQXJyYXkodGV4dCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgY2hhcnMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgY2hhciA9IGNoYXJzW2ldO1xuICAgIHZhciBjaGFyTGVuID0gZWF3Lmxlbmd0aChjaGFyKTtcbiAgICBpZiAoZWF3TGVuID49IHN0YXJ0IC0gKGNoYXJMZW4gPT0gMiA/IDEgOiAwKSkge1xuICAgICAgICBpZiAoZWF3TGVuICsgY2hhckxlbiA8PSBlbmQpIHtcbiAgICAgICAgICAgIHJlc3VsdCArPSBjaGFyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWF3TGVuICs9IGNoYXJMZW47XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdzdHJlYW0nKTtcbiIsICIndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBlbnVtZXJhYmxlT25seSAmJiAoc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pKSwga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gbnVsbCAhPSBhcmd1bWVudHNbaV0gPyBhcmd1bWVudHNbaV0gOiB7fTsgaSAlIDIgPyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKSA6IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gcmV0dXJuIHRhcmdldDsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBrZXkgPSBfdG9Qcm9wZXJ0eUtleShrZXkpOyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIF90b1Byb3BlcnR5S2V5KGRlc2NyaXB0b3Iua2V5KSwgZGVzY3JpcHRvcik7IH0gfVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ29uc3RydWN0b3IsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6IGZhbHNlIH0pOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KGFyZykgeyB2YXIga2V5ID0gX3RvUHJpbWl0aXZlKGFyZywgXCJzdHJpbmdcIik7IHJldHVybiB0eXBlb2Yga2V5ID09PSBcInN5bWJvbFwiID8ga2V5IDogU3RyaW5nKGtleSk7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZShpbnB1dCwgaGludCkgeyBpZiAodHlwZW9mIGlucHV0ICE9PSBcIm9iamVjdFwiIHx8IGlucHV0ID09PSBudWxsKSByZXR1cm4gaW5wdXQ7IHZhciBwcmltID0gaW5wdXRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHByaW0gIT09IHVuZGVmaW5lZCkgeyB2YXIgcmVzID0gcHJpbS5jYWxsKGlucHV0LCBoaW50IHx8IFwiZGVmYXVsdFwiKTsgaWYgKHR5cGVvZiByZXMgIT09IFwib2JqZWN0XCIpIHJldHVybiByZXM7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKGhpbnQgPT09IFwic3RyaW5nXCIgPyBTdHJpbmcgOiBOdW1iZXIpKGlucHV0KTsgfVxudmFyIF9yZXF1aXJlID0gcmVxdWlyZSgnYnVmZmVyJyksXG4gIEJ1ZmZlciA9IF9yZXF1aXJlLkJ1ZmZlcjtcbnZhciBfcmVxdWlyZTIgPSByZXF1aXJlKCd1dGlsJyksXG4gIGluc3BlY3QgPSBfcmVxdWlyZTIuaW5zcGVjdDtcbnZhciBjdXN0b20gPSBpbnNwZWN0ICYmIGluc3BlY3QuY3VzdG9tIHx8ICdpbnNwZWN0JztcbmZ1bmN0aW9uIGNvcHlCdWZmZXIoc3JjLCB0YXJnZXQsIG9mZnNldCkge1xuICBCdWZmZXIucHJvdG90eXBlLmNvcHkuY2FsbChzcmMsIHRhcmdldCwgb2Zmc2V0KTtcbn1cbm1vZHVsZS5leHBvcnRzID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gQnVmZmVyTGlzdCgpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQnVmZmVyTGlzdCk7XG4gICAgdGhpcy5oZWFkID0gbnVsbDtcbiAgICB0aGlzLnRhaWwgPSBudWxsO1xuICAgIHRoaXMubGVuZ3RoID0gMDtcbiAgfVxuICBfY3JlYXRlQ2xhc3MoQnVmZmVyTGlzdCwgW3tcbiAgICBrZXk6IFwicHVzaFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBwdXNoKHYpIHtcbiAgICAgIHZhciBlbnRyeSA9IHtcbiAgICAgICAgZGF0YTogdixcbiAgICAgICAgbmV4dDogbnVsbFxuICAgICAgfTtcbiAgICAgIGlmICh0aGlzLmxlbmd0aCA+IDApIHRoaXMudGFpbC5uZXh0ID0gZW50cnk7ZWxzZSB0aGlzLmhlYWQgPSBlbnRyeTtcbiAgICAgIHRoaXMudGFpbCA9IGVudHJ5O1xuICAgICAgKyt0aGlzLmxlbmd0aDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwidW5zaGlmdFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB1bnNoaWZ0KHYpIHtcbiAgICAgIHZhciBlbnRyeSA9IHtcbiAgICAgICAgZGF0YTogdixcbiAgICAgICAgbmV4dDogdGhpcy5oZWFkXG4gICAgICB9O1xuICAgICAgaWYgKHRoaXMubGVuZ3RoID09PSAwKSB0aGlzLnRhaWwgPSBlbnRyeTtcbiAgICAgIHRoaXMuaGVhZCA9IGVudHJ5O1xuICAgICAgKyt0aGlzLmxlbmd0aDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwic2hpZnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gc2hpZnQoKSB7XG4gICAgICBpZiAodGhpcy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICAgIHZhciByZXQgPSB0aGlzLmhlYWQuZGF0YTtcbiAgICAgIGlmICh0aGlzLmxlbmd0aCA9PT0gMSkgdGhpcy5oZWFkID0gdGhpcy50YWlsID0gbnVsbDtlbHNlIHRoaXMuaGVhZCA9IHRoaXMuaGVhZC5uZXh0O1xuICAgICAgLS10aGlzLmxlbmd0aDtcbiAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNsZWFyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNsZWFyKCkge1xuICAgICAgdGhpcy5oZWFkID0gdGhpcy50YWlsID0gbnVsbDtcbiAgICAgIHRoaXMubGVuZ3RoID0gMDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiam9pblwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBqb2luKHMpIHtcbiAgICAgIGlmICh0aGlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuICcnO1xuICAgICAgdmFyIHAgPSB0aGlzLmhlYWQ7XG4gICAgICB2YXIgcmV0ID0gJycgKyBwLmRhdGE7XG4gICAgICB3aGlsZSAocCA9IHAubmV4dCkgcmV0ICs9IHMgKyBwLmRhdGE7XG4gICAgICByZXR1cm4gcmV0O1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb25jYXRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29uY2F0KG4pIHtcbiAgICAgIGlmICh0aGlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIEJ1ZmZlci5hbGxvYygwKTtcbiAgICAgIHZhciByZXQgPSBCdWZmZXIuYWxsb2NVbnNhZmUobiA+Pj4gMCk7XG4gICAgICB2YXIgcCA9IHRoaXMuaGVhZDtcbiAgICAgIHZhciBpID0gMDtcbiAgICAgIHdoaWxlIChwKSB7XG4gICAgICAgIGNvcHlCdWZmZXIocC5kYXRhLCByZXQsIGkpO1xuICAgICAgICBpICs9IHAuZGF0YS5sZW5ndGg7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmV0O1xuICAgIH1cblxuICAgIC8vIENvbnN1bWVzIGEgc3BlY2lmaWVkIGFtb3VudCBvZiBieXRlcyBvciBjaGFyYWN0ZXJzIGZyb20gdGhlIGJ1ZmZlcmVkIGRhdGEuXG4gIH0sIHtcbiAgICBrZXk6IFwiY29uc3VtZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb25zdW1lKG4sIGhhc1N0cmluZ3MpIHtcbiAgICAgIHZhciByZXQ7XG4gICAgICBpZiAobiA8IHRoaXMuaGVhZC5kYXRhLmxlbmd0aCkge1xuICAgICAgICAvLyBgc2xpY2VgIGlzIHRoZSBzYW1lIGZvciBidWZmZXJzIGFuZCBzdHJpbmdzLlxuICAgICAgICByZXQgPSB0aGlzLmhlYWQuZGF0YS5zbGljZSgwLCBuKTtcbiAgICAgICAgdGhpcy5oZWFkLmRhdGEgPSB0aGlzLmhlYWQuZGF0YS5zbGljZShuKTtcbiAgICAgIH0gZWxzZSBpZiAobiA9PT0gdGhpcy5oZWFkLmRhdGEubGVuZ3RoKSB7XG4gICAgICAgIC8vIEZpcnN0IGNodW5rIGlzIGEgcGVyZmVjdCBtYXRjaC5cbiAgICAgICAgcmV0ID0gdGhpcy5zaGlmdCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gUmVzdWx0IHNwYW5zIG1vcmUgdGhhbiBvbmUgYnVmZmVyLlxuICAgICAgICByZXQgPSBoYXNTdHJpbmdzID8gdGhpcy5fZ2V0U3RyaW5nKG4pIDogdGhpcy5fZ2V0QnVmZmVyKG4pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZmlyc3RcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZmlyc3QoKSB7XG4gICAgICByZXR1cm4gdGhpcy5oZWFkLmRhdGE7XG4gICAgfVxuXG4gICAgLy8gQ29uc3VtZXMgYSBzcGVjaWZpZWQgYW1vdW50IG9mIGNoYXJhY3RlcnMgZnJvbSB0aGUgYnVmZmVyZWQgZGF0YS5cbiAgfSwge1xuICAgIGtleTogXCJfZ2V0U3RyaW5nXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9nZXRTdHJpbmcobikge1xuICAgICAgdmFyIHAgPSB0aGlzLmhlYWQ7XG4gICAgICB2YXIgYyA9IDE7XG4gICAgICB2YXIgcmV0ID0gcC5kYXRhO1xuICAgICAgbiAtPSByZXQubGVuZ3RoO1xuICAgICAgd2hpbGUgKHAgPSBwLm5leHQpIHtcbiAgICAgICAgdmFyIHN0ciA9IHAuZGF0YTtcbiAgICAgICAgdmFyIG5iID0gbiA+IHN0ci5sZW5ndGggPyBzdHIubGVuZ3RoIDogbjtcbiAgICAgICAgaWYgKG5iID09PSBzdHIubGVuZ3RoKSByZXQgKz0gc3RyO2Vsc2UgcmV0ICs9IHN0ci5zbGljZSgwLCBuKTtcbiAgICAgICAgbiAtPSBuYjtcbiAgICAgICAgaWYgKG4gPT09IDApIHtcbiAgICAgICAgICBpZiAobmIgPT09IHN0ci5sZW5ndGgpIHtcbiAgICAgICAgICAgICsrYztcbiAgICAgICAgICAgIGlmIChwLm5leHQpIHRoaXMuaGVhZCA9IHAubmV4dDtlbHNlIHRoaXMuaGVhZCA9IHRoaXMudGFpbCA9IG51bGw7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaGVhZCA9IHA7XG4gICAgICAgICAgICBwLmRhdGEgPSBzdHIuc2xpY2UobmIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICArK2M7XG4gICAgICB9XG4gICAgICB0aGlzLmxlbmd0aCAtPSBjO1xuICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG5cbiAgICAvLyBDb25zdW1lcyBhIHNwZWNpZmllZCBhbW91bnQgb2YgYnl0ZXMgZnJvbSB0aGUgYnVmZmVyZWQgZGF0YS5cbiAgfSwge1xuICAgIGtleTogXCJfZ2V0QnVmZmVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9nZXRCdWZmZXIobikge1xuICAgICAgdmFyIHJldCA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShuKTtcbiAgICAgIHZhciBwID0gdGhpcy5oZWFkO1xuICAgICAgdmFyIGMgPSAxO1xuICAgICAgcC5kYXRhLmNvcHkocmV0KTtcbiAgICAgIG4gLT0gcC5kYXRhLmxlbmd0aDtcbiAgICAgIHdoaWxlIChwID0gcC5uZXh0KSB7XG4gICAgICAgIHZhciBidWYgPSBwLmRhdGE7XG4gICAgICAgIHZhciBuYiA9IG4gPiBidWYubGVuZ3RoID8gYnVmLmxlbmd0aCA6IG47XG4gICAgICAgIGJ1Zi5jb3B5KHJldCwgcmV0Lmxlbmd0aCAtIG4sIDAsIG5iKTtcbiAgICAgICAgbiAtPSBuYjtcbiAgICAgICAgaWYgKG4gPT09IDApIHtcbiAgICAgICAgICBpZiAobmIgPT09IGJ1Zi5sZW5ndGgpIHtcbiAgICAgICAgICAgICsrYztcbiAgICAgICAgICAgIGlmIChwLm5leHQpIHRoaXMuaGVhZCA9IHAubmV4dDtlbHNlIHRoaXMuaGVhZCA9IHRoaXMudGFpbCA9IG51bGw7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaGVhZCA9IHA7XG4gICAgICAgICAgICBwLmRhdGEgPSBidWYuc2xpY2UobmIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICArK2M7XG4gICAgICB9XG4gICAgICB0aGlzLmxlbmd0aCAtPSBjO1xuICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG5cbiAgICAvLyBNYWtlIHN1cmUgdGhlIGxpbmtlZCBsaXN0IG9ubHkgc2hvd3MgdGhlIG1pbmltYWwgbmVjZXNzYXJ5IGluZm9ybWF0aW9uLlxuICB9LCB7XG4gICAga2V5OiBjdXN0b20sXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHZhbHVlKF8sIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBpbnNwZWN0KHRoaXMsIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgb3B0aW9ucyksIHt9LCB7XG4gICAgICAgIC8vIE9ubHkgaW5zcGVjdCBvbmUgbGV2ZWwuXG4gICAgICAgIGRlcHRoOiAwLFxuICAgICAgICAvLyBJdCBzaG91bGQgbm90IHJlY3Vyc2UuXG4gICAgICAgIGN1c3RvbUluc3BlY3Q6IGZhbHNlXG4gICAgICB9KSk7XG4gICAgfVxuICB9XSk7XG4gIHJldHVybiBCdWZmZXJMaXN0O1xufSgpOyIsICIndXNlIHN0cmljdCc7XG5cbi8vIHVuZG9jdW1lbnRlZCBjYigpIEFQSSwgbmVlZGVkIGZvciBjb3JlLCBub3QgZm9yIHB1YmxpYyBBUElcbmZ1bmN0aW9uIGRlc3Ryb3koZXJyLCBjYikge1xuICB2YXIgX3RoaXMgPSB0aGlzO1xuICB2YXIgcmVhZGFibGVEZXN0cm95ZWQgPSB0aGlzLl9yZWFkYWJsZVN0YXRlICYmIHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkO1xuICB2YXIgd3JpdGFibGVEZXN0cm95ZWQgPSB0aGlzLl93cml0YWJsZVN0YXRlICYmIHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkO1xuICBpZiAocmVhZGFibGVEZXN0cm95ZWQgfHwgd3JpdGFibGVEZXN0cm95ZWQpIHtcbiAgICBpZiAoY2IpIHtcbiAgICAgIGNiKGVycik7XG4gICAgfSBlbHNlIGlmIChlcnIpIHtcbiAgICAgIGlmICghdGhpcy5fd3JpdGFibGVTdGF0ZSkge1xuICAgICAgICBwcm9jZXNzLm5leHRUaWNrKGVtaXRFcnJvck5ULCB0aGlzLCBlcnIpO1xuICAgICAgfSBlbHNlIGlmICghdGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQpIHtcbiAgICAgICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQgPSB0cnVlO1xuICAgICAgICBwcm9jZXNzLm5leHRUaWNrKGVtaXRFcnJvck5ULCB0aGlzLCBlcnIpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIHdlIHNldCBkZXN0cm95ZWQgdG8gdHJ1ZSBiZWZvcmUgZmlyaW5nIGVycm9yIGNhbGxiYWNrcyBpbiBvcmRlclxuICAvLyB0byBtYWtlIGl0IHJlLWVudHJhbmNlIHNhZmUgaW4gY2FzZSBkZXN0cm95KCkgaXMgY2FsbGVkIHdpdGhpbiBjYWxsYmFja3NcblxuICBpZiAodGhpcy5fcmVhZGFibGVTdGF0ZSkge1xuICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkID0gdHJ1ZTtcbiAgfVxuXG4gIC8vIGlmIHRoaXMgaXMgYSBkdXBsZXggc3RyZWFtIG1hcmsgdGhlIHdyaXRhYmxlIHBhcnQgYXMgZGVzdHJveWVkIGFzIHdlbGxcbiAgaWYgKHRoaXMuX3dyaXRhYmxlU3RhdGUpIHtcbiAgICB0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZCA9IHRydWU7XG4gIH1cbiAgdGhpcy5fZGVzdHJveShlcnIgfHwgbnVsbCwgZnVuY3Rpb24gKGVycikge1xuICAgIGlmICghY2IgJiYgZXJyKSB7XG4gICAgICBpZiAoIV90aGlzLl93cml0YWJsZVN0YXRlKSB7XG4gICAgICAgIHByb2Nlc3MubmV4dFRpY2soZW1pdEVycm9yQW5kQ2xvc2VOVCwgX3RoaXMsIGVycik7XG4gICAgICB9IGVsc2UgaWYgKCFfdGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQpIHtcbiAgICAgICAgX3RoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkID0gdHJ1ZTtcbiAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhlbWl0RXJyb3JBbmRDbG9zZU5ULCBfdGhpcywgZXJyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHByb2Nlc3MubmV4dFRpY2soZW1pdENsb3NlTlQsIF90aGlzKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNiKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGVtaXRDbG9zZU5ULCBfdGhpcyk7XG4gICAgICBjYihlcnIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGVtaXRDbG9zZU5ULCBfdGhpcyk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHRoaXM7XG59XG5mdW5jdGlvbiBlbWl0RXJyb3JBbmRDbG9zZU5UKHNlbGYsIGVycikge1xuICBlbWl0RXJyb3JOVChzZWxmLCBlcnIpO1xuICBlbWl0Q2xvc2VOVChzZWxmKTtcbn1cbmZ1bmN0aW9uIGVtaXRDbG9zZU5UKHNlbGYpIHtcbiAgaWYgKHNlbGYuX3dyaXRhYmxlU3RhdGUgJiYgIXNlbGYuX3dyaXRhYmxlU3RhdGUuZW1pdENsb3NlKSByZXR1cm47XG4gIGlmIChzZWxmLl9yZWFkYWJsZVN0YXRlICYmICFzZWxmLl9yZWFkYWJsZVN0YXRlLmVtaXRDbG9zZSkgcmV0dXJuO1xuICBzZWxmLmVtaXQoJ2Nsb3NlJyk7XG59XG5mdW5jdGlvbiB1bmRlc3Ryb3koKSB7XG4gIGlmICh0aGlzLl9yZWFkYWJsZVN0YXRlKSB7XG4gICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQgPSBmYWxzZTtcbiAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLnJlYWRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZGVkID0gZmFsc2U7XG4gICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmRFbWl0dGVkID0gZmFsc2U7XG4gIH1cbiAgaWYgKHRoaXMuX3dyaXRhYmxlU3RhdGUpIHtcbiAgICB0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZCA9IGZhbHNlO1xuICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kZWQgPSBmYWxzZTtcbiAgICB0aGlzLl93cml0YWJsZVN0YXRlLmVuZGluZyA9IGZhbHNlO1xuICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUuZmluYWxDYWxsZWQgPSBmYWxzZTtcbiAgICB0aGlzLl93cml0YWJsZVN0YXRlLnByZWZpbmlzaGVkID0gZmFsc2U7XG4gICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5maW5pc2hlZCA9IGZhbHNlO1xuICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkID0gZmFsc2U7XG4gIH1cbn1cbmZ1bmN0aW9uIGVtaXRFcnJvck5UKHNlbGYsIGVycikge1xuICBzZWxmLmVtaXQoJ2Vycm9yJywgZXJyKTtcbn1cbmZ1bmN0aW9uIGVycm9yT3JEZXN0cm95KHN0cmVhbSwgZXJyKSB7XG4gIC8vIFdlIGhhdmUgdGVzdHMgdGhhdCByZWx5IG9uIGVycm9ycyBiZWluZyBlbWl0dGVkXG4gIC8vIGluIHRoZSBzYW1lIHRpY2ssIHNvIGNoYW5naW5nIHRoaXMgaXMgc2VtdmVyIG1ham9yLlxuICAvLyBGb3Igbm93IHdoZW4geW91IG9wdC1pbiB0byBhdXRvRGVzdHJveSB3ZSBhbGxvd1xuICAvLyB0aGUgZXJyb3IgdG8gYmUgZW1pdHRlZCBuZXh0VGljay4gSW4gYSBmdXR1cmVcbiAgLy8gc2VtdmVyIG1ham9yIHVwZGF0ZSB3ZSBzaG91bGQgY2hhbmdlIHRoZSBkZWZhdWx0IHRvIHRoaXMuXG5cbiAgdmFyIHJTdGF0ZSA9IHN0cmVhbS5fcmVhZGFibGVTdGF0ZTtcbiAgdmFyIHdTdGF0ZSA9IHN0cmVhbS5fd3JpdGFibGVTdGF0ZTtcbiAgaWYgKHJTdGF0ZSAmJiByU3RhdGUuYXV0b0Rlc3Ryb3kgfHwgd1N0YXRlICYmIHdTdGF0ZS5hdXRvRGVzdHJveSkgc3RyZWFtLmRlc3Ryb3koZXJyKTtlbHNlIHN0cmVhbS5lbWl0KCdlcnJvcicsIGVycik7XG59XG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZGVzdHJveTogZGVzdHJveSxcbiAgdW5kZXN0cm95OiB1bmRlc3Ryb3ksXG4gIGVycm9yT3JEZXN0cm95OiBlcnJvck9yRGVzdHJveVxufTsiLCAiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBjb2RlcyA9IHt9O1xuXG5mdW5jdGlvbiBjcmVhdGVFcnJvclR5cGUoY29kZSwgbWVzc2FnZSwgQmFzZSkge1xuICBpZiAoIUJhc2UpIHtcbiAgICBCYXNlID0gRXJyb3JcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldE1lc3NhZ2UgKGFyZzEsIGFyZzIsIGFyZzMpIHtcbiAgICBpZiAodHlwZW9mIG1lc3NhZ2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gbWVzc2FnZVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbWVzc2FnZShhcmcxLCBhcmcyLCBhcmczKVxuICAgIH1cbiAgfVxuXG4gIGNsYXNzIE5vZGVFcnJvciBleHRlbmRzIEJhc2Uge1xuICAgIGNvbnN0cnVjdG9yIChhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgICBzdXBlcihnZXRNZXNzYWdlKGFyZzEsIGFyZzIsIGFyZzMpKTtcbiAgICB9XG4gIH1cblxuICBOb2RlRXJyb3IucHJvdG90eXBlLm5hbWUgPSBCYXNlLm5hbWU7XG4gIE5vZGVFcnJvci5wcm90b3R5cGUuY29kZSA9IGNvZGU7XG5cbiAgY29kZXNbY29kZV0gPSBOb2RlRXJyb3I7XG59XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9ibG9iL3YxMC44LjAvbGliL2ludGVybmFsL2Vycm9ycy5qc1xuZnVuY3Rpb24gb25lT2YoZXhwZWN0ZWQsIHRoaW5nKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGV4cGVjdGVkKSkge1xuICAgIGNvbnN0IGxlbiA9IGV4cGVjdGVkLmxlbmd0aDtcbiAgICBleHBlY3RlZCA9IGV4cGVjdGVkLm1hcCgoaSkgPT4gU3RyaW5nKGkpKTtcbiAgICBpZiAobGVuID4gMikge1xuICAgICAgcmV0dXJuIGBvbmUgb2YgJHt0aGluZ30gJHtleHBlY3RlZC5zbGljZSgwLCBsZW4gLSAxKS5qb2luKCcsICcpfSwgb3IgYCArXG4gICAgICAgICAgICAgZXhwZWN0ZWRbbGVuIC0gMV07XG4gICAgfSBlbHNlIGlmIChsZW4gPT09IDIpIHtcbiAgICAgIHJldHVybiBgb25lIG9mICR7dGhpbmd9ICR7ZXhwZWN0ZWRbMF19IG9yICR7ZXhwZWN0ZWRbMV19YDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGBvZiAke3RoaW5nfSAke2V4cGVjdGVkWzBdfWA7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBgb2YgJHt0aGluZ30gJHtTdHJpbmcoZXhwZWN0ZWQpfWA7XG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvU3RyaW5nL3N0YXJ0c1dpdGhcbmZ1bmN0aW9uIHN0YXJ0c1dpdGgoc3RyLCBzZWFyY2gsIHBvcykge1xuXHRyZXR1cm4gc3RyLnN1YnN0cighcG9zIHx8IHBvcyA8IDAgPyAwIDogK3Bvcywgc2VhcmNoLmxlbmd0aCkgPT09IHNlYXJjaDtcbn1cblxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvU3RyaW5nL2VuZHNXaXRoXG5mdW5jdGlvbiBlbmRzV2l0aChzdHIsIHNlYXJjaCwgdGhpc19sZW4pIHtcblx0aWYgKHRoaXNfbGVuID09PSB1bmRlZmluZWQgfHwgdGhpc19sZW4gPiBzdHIubGVuZ3RoKSB7XG5cdFx0dGhpc19sZW4gPSBzdHIubGVuZ3RoO1xuXHR9XG5cdHJldHVybiBzdHIuc3Vic3RyaW5nKHRoaXNfbGVuIC0gc2VhcmNoLmxlbmd0aCwgdGhpc19sZW4pID09PSBzZWFyY2g7XG59XG5cbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL1N0cmluZy9pbmNsdWRlc1xuZnVuY3Rpb24gaW5jbHVkZXMoc3RyLCBzZWFyY2gsIHN0YXJ0KSB7XG4gIGlmICh0eXBlb2Ygc3RhcnQgIT09ICdudW1iZXInKSB7XG4gICAgc3RhcnQgPSAwO1xuICB9XG5cbiAgaWYgKHN0YXJ0ICsgc2VhcmNoLmxlbmd0aCA+IHN0ci5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHN0ci5pbmRleE9mKHNlYXJjaCwgc3RhcnQpICE9PSAtMTtcbiAgfVxufVxuXG5jcmVhdGVFcnJvclR5cGUoJ0VSUl9JTlZBTElEX09QVF9WQUxVRScsIGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkge1xuICByZXR1cm4gJ1RoZSB2YWx1ZSBcIicgKyB2YWx1ZSArICdcIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gXCInICsgbmFtZSArICdcIidcbn0sIFR5cGVFcnJvcik7XG5jcmVhdGVFcnJvclR5cGUoJ0VSUl9JTlZBTElEX0FSR19UWVBFJywgZnVuY3Rpb24gKG5hbWUsIGV4cGVjdGVkLCBhY3R1YWwpIHtcbiAgLy8gZGV0ZXJtaW5lcjogJ211c3QgYmUnIG9yICdtdXN0IG5vdCBiZSdcbiAgbGV0IGRldGVybWluZXI7XG4gIGlmICh0eXBlb2YgZXhwZWN0ZWQgPT09ICdzdHJpbmcnICYmIHN0YXJ0c1dpdGgoZXhwZWN0ZWQsICdub3QgJykpIHtcbiAgICBkZXRlcm1pbmVyID0gJ211c3Qgbm90IGJlJztcbiAgICBleHBlY3RlZCA9IGV4cGVjdGVkLnJlcGxhY2UoL15ub3QgLywgJycpO1xuICB9IGVsc2Uge1xuICAgIGRldGVybWluZXIgPSAnbXVzdCBiZSc7XG4gIH1cblxuICBsZXQgbXNnO1xuICBpZiAoZW5kc1dpdGgobmFtZSwgJyBhcmd1bWVudCcpKSB7XG4gICAgLy8gRm9yIGNhc2VzIGxpa2UgJ2ZpcnN0IGFyZ3VtZW50J1xuICAgIG1zZyA9IGBUaGUgJHtuYW1lfSAke2RldGVybWluZXJ9ICR7b25lT2YoZXhwZWN0ZWQsICd0eXBlJyl9YDtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCB0eXBlID0gaW5jbHVkZXMobmFtZSwgJy4nKSA/ICdwcm9wZXJ0eScgOiAnYXJndW1lbnQnO1xuICAgIG1zZyA9IGBUaGUgXCIke25hbWV9XCIgJHt0eXBlfSAke2RldGVybWluZXJ9ICR7b25lT2YoZXhwZWN0ZWQsICd0eXBlJyl9YDtcbiAgfVxuXG4gIG1zZyArPSBgLiBSZWNlaXZlZCB0eXBlICR7dHlwZW9mIGFjdHVhbH1gO1xuICByZXR1cm4gbXNnO1xufSwgVHlwZUVycm9yKTtcbmNyZWF0ZUVycm9yVHlwZSgnRVJSX1NUUkVBTV9QVVNIX0FGVEVSX0VPRicsICdzdHJlYW0ucHVzaCgpIGFmdGVyIEVPRicpO1xuY3JlYXRlRXJyb3JUeXBlKCdFUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCcsIGZ1bmN0aW9uIChuYW1lKSB7XG4gIHJldHVybiAnVGhlICcgKyBuYW1lICsgJyBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkJ1xufSk7XG5jcmVhdGVFcnJvclR5cGUoJ0VSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFJywgJ1ByZW1hdHVyZSBjbG9zZScpO1xuY3JlYXRlRXJyb3JUeXBlKCdFUlJfU1RSRUFNX0RFU1RST1lFRCcsIGZ1bmN0aW9uIChuYW1lKSB7XG4gIHJldHVybiAnQ2Fubm90IGNhbGwgJyArIG5hbWUgKyAnIGFmdGVyIGEgc3RyZWFtIHdhcyBkZXN0cm95ZWQnO1xufSk7XG5jcmVhdGVFcnJvclR5cGUoJ0VSUl9NVUxUSVBMRV9DQUxMQkFDSycsICdDYWxsYmFjayBjYWxsZWQgbXVsdGlwbGUgdGltZXMnKTtcbmNyZWF0ZUVycm9yVHlwZSgnRVJSX1NUUkVBTV9DQU5OT1RfUElQRScsICdDYW5ub3QgcGlwZSwgbm90IHJlYWRhYmxlJyk7XG5jcmVhdGVFcnJvclR5cGUoJ0VSUl9TVFJFQU1fV1JJVEVfQUZURVJfRU5EJywgJ3dyaXRlIGFmdGVyIGVuZCcpO1xuY3JlYXRlRXJyb3JUeXBlKCdFUlJfU1RSRUFNX05VTExfVkFMVUVTJywgJ01heSBub3Qgd3JpdGUgbnVsbCB2YWx1ZXMgdG8gc3RyZWFtJywgVHlwZUVycm9yKTtcbmNyZWF0ZUVycm9yVHlwZSgnRVJSX1VOS05PV05fRU5DT0RJTkcnLCBmdW5jdGlvbiAoYXJnKSB7XG4gIHJldHVybiAnVW5rbm93biBlbmNvZGluZzogJyArIGFyZ1xufSwgVHlwZUVycm9yKTtcbmNyZWF0ZUVycm9yVHlwZSgnRVJSX1NUUkVBTV9VTlNISUZUX0FGVEVSX0VORF9FVkVOVCcsICdzdHJlYW0udW5zaGlmdCgpIGFmdGVyIGVuZCBldmVudCcpO1xuXG5tb2R1bGUuZXhwb3J0cy5jb2RlcyA9IGNvZGVzO1xuIiwgIid1c2Ugc3RyaWN0JztcblxudmFyIEVSUl9JTlZBTElEX09QVF9WQUxVRSA9IHJlcXVpcmUoJy4uLy4uLy4uL2Vycm9ycycpLmNvZGVzLkVSUl9JTlZBTElEX09QVF9WQUxVRTtcbmZ1bmN0aW9uIGhpZ2hXYXRlck1hcmtGcm9tKG9wdGlvbnMsIGlzRHVwbGV4LCBkdXBsZXhLZXkpIHtcbiAgcmV0dXJuIG9wdGlvbnMuaGlnaFdhdGVyTWFyayAhPSBudWxsID8gb3B0aW9ucy5oaWdoV2F0ZXJNYXJrIDogaXNEdXBsZXggPyBvcHRpb25zW2R1cGxleEtleV0gOiBudWxsO1xufVxuZnVuY3Rpb24gZ2V0SGlnaFdhdGVyTWFyayhzdGF0ZSwgb3B0aW9ucywgZHVwbGV4S2V5LCBpc0R1cGxleCkge1xuICB2YXIgaHdtID0gaGlnaFdhdGVyTWFya0Zyb20ob3B0aW9ucywgaXNEdXBsZXgsIGR1cGxleEtleSk7XG4gIGlmIChod20gIT0gbnVsbCkge1xuICAgIGlmICghKGlzRmluaXRlKGh3bSkgJiYgTWF0aC5mbG9vcihod20pID09PSBod20pIHx8IGh3bSA8IDApIHtcbiAgICAgIHZhciBuYW1lID0gaXNEdXBsZXggPyBkdXBsZXhLZXkgOiAnaGlnaFdhdGVyTWFyayc7XG4gICAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfT1BUX1ZBTFVFKG5hbWUsIGh3bSk7XG4gICAgfVxuICAgIHJldHVybiBNYXRoLmZsb29yKGh3bSk7XG4gIH1cblxuICAvLyBEZWZhdWx0IHZhbHVlXG4gIHJldHVybiBzdGF0ZS5vYmplY3RNb2RlID8gMTYgOiAxNiAqIDEwMjQ7XG59XG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0SGlnaFdhdGVyTWFyazogZ2V0SGlnaFdhdGVyTWFya1xufTsiLCAiaWYgKHR5cGVvZiBPYmplY3QuY3JlYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gIC8vIGltcGxlbWVudGF0aW9uIGZyb20gc3RhbmRhcmQgbm9kZS5qcyAndXRpbCcgbW9kdWxlXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaW5oZXJpdHMoY3Rvciwgc3VwZXJDdG9yKSB7XG4gICAgaWYgKHN1cGVyQ3Rvcikge1xuICAgICAgY3Rvci5zdXBlcl8gPSBzdXBlckN0b3JcbiAgICAgIGN0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckN0b3IucHJvdG90eXBlLCB7XG4gICAgICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICAgICAgdmFsdWU6IGN0b3IsXG4gICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9O1xufSBlbHNlIHtcbiAgLy8gb2xkIHNjaG9vbCBzaGltIGZvciBvbGQgYnJvd3NlcnNcbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpbmhlcml0cyhjdG9yLCBzdXBlckN0b3IpIHtcbiAgICBpZiAoc3VwZXJDdG9yKSB7XG4gICAgICBjdG9yLnN1cGVyXyA9IHN1cGVyQ3RvclxuICAgICAgdmFyIFRlbXBDdG9yID0gZnVuY3Rpb24gKCkge31cbiAgICAgIFRlbXBDdG9yLnByb3RvdHlwZSA9IHN1cGVyQ3Rvci5wcm90b3R5cGVcbiAgICAgIGN0b3IucHJvdG90eXBlID0gbmV3IFRlbXBDdG9yKClcbiAgICAgIGN0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY3RvclxuICAgIH1cbiAgfVxufVxuIiwgInRyeSB7XG4gIHZhciB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBpZiAodHlwZW9mIHV0aWwuaW5oZXJpdHMgIT09ICdmdW5jdGlvbicpIHRocm93ICcnO1xuICBtb2R1bGUuZXhwb3J0cyA9IHV0aWwuaW5oZXJpdHM7XG59IGNhdGNoIChlKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9pbmhlcml0c19icm93c2VyLmpzJyk7XG59XG4iLCAiXG4vKipcbiAqIEZvciBOb2RlLmpzLCBzaW1wbHkgcmUtZXhwb3J0IHRoZSBjb3JlIGB1dGlsLmRlcHJlY2F0ZWAgZnVuY3Rpb24uXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCd1dGlsJykuZGVwcmVjYXRlO1xuIiwgIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4vLyBBIGJpdCBzaW1wbGVyIHRoYW4gcmVhZGFibGUgc3RyZWFtcy5cbi8vIEltcGxlbWVudCBhbiBhc3luYyAuX3dyaXRlKGNodW5rLCBlbmNvZGluZywgY2IpLCBhbmQgaXQnbGwgaGFuZGxlIGFsbFxuLy8gdGhlIGRyYWluIGV2ZW50IGVtaXNzaW9uIGFuZCBidWZmZXJpbmcuXG5cbid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBXcml0YWJsZTtcblxuLyogPHJlcGxhY2VtZW50PiAqL1xuZnVuY3Rpb24gV3JpdGVSZXEoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICB0aGlzLmNodW5rID0gY2h1bms7XG4gIHRoaXMuZW5jb2RpbmcgPSBlbmNvZGluZztcbiAgdGhpcy5jYWxsYmFjayA9IGNiO1xuICB0aGlzLm5leHQgPSBudWxsO1xufVxuXG4vLyBJdCBzZWVtcyBhIGxpbmtlZCBsaXN0IGJ1dCBpdCBpcyBub3Rcbi8vIHRoZXJlIHdpbGwgYmUgb25seSAyIG9mIHRoZXNlIGZvciBlYWNoIHN0cmVhbVxuZnVuY3Rpb24gQ29ya2VkUmVxdWVzdChzdGF0ZSkge1xuICB2YXIgX3RoaXMgPSB0aGlzO1xuICB0aGlzLm5leHQgPSBudWxsO1xuICB0aGlzLmVudHJ5ID0gbnVsbDtcbiAgdGhpcy5maW5pc2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgb25Db3JrZWRGaW5pc2goX3RoaXMsIHN0YXRlKTtcbiAgfTtcbn1cbi8qIDwvcmVwbGFjZW1lbnQ+ICovXG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgRHVwbGV4O1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbldyaXRhYmxlLldyaXRhYmxlU3RhdGUgPSBXcml0YWJsZVN0YXRlO1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIGludGVybmFsVXRpbCA9IHtcbiAgZGVwcmVjYXRlOiByZXF1aXJlKCd1dGlsLWRlcHJlY2F0ZScpXG59O1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgU3RyZWFtID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9zdHJlYW1zL3N0cmVhbScpO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbnZhciBCdWZmZXIgPSByZXF1aXJlKCdidWZmZXInKS5CdWZmZXI7XG52YXIgT3VyVWludDhBcnJheSA9ICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJyA/IGdsb2JhbCA6IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93IDogdHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnID8gc2VsZiA6IHt9KS5VaW50OEFycmF5IHx8IGZ1bmN0aW9uICgpIHt9O1xuZnVuY3Rpb24gX3VpbnQ4QXJyYXlUb0J1ZmZlcihjaHVuaykge1xuICByZXR1cm4gQnVmZmVyLmZyb20oY2h1bmspO1xufVxuZnVuY3Rpb24gX2lzVWludDhBcnJheShvYmopIHtcbiAgcmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcihvYmopIHx8IG9iaiBpbnN0YW5jZW9mIE91clVpbnQ4QXJyYXk7XG59XG52YXIgZGVzdHJveUltcGwgPSByZXF1aXJlKCcuL2ludGVybmFsL3N0cmVhbXMvZGVzdHJveScpO1xudmFyIF9yZXF1aXJlID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9zdHJlYW1zL3N0YXRlJyksXG4gIGdldEhpZ2hXYXRlck1hcmsgPSBfcmVxdWlyZS5nZXRIaWdoV2F0ZXJNYXJrO1xudmFyIF9yZXF1aXJlJGNvZGVzID0gcmVxdWlyZSgnLi4vZXJyb3JzJykuY29kZXMsXG4gIEVSUl9JTlZBTElEX0FSR19UWVBFID0gX3JlcXVpcmUkY29kZXMuRVJSX0lOVkFMSURfQVJHX1RZUEUsXG4gIEVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVEID0gX3JlcXVpcmUkY29kZXMuRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQsXG4gIEVSUl9NVUxUSVBMRV9DQUxMQkFDSyA9IF9yZXF1aXJlJGNvZGVzLkVSUl9NVUxUSVBMRV9DQUxMQkFDSyxcbiAgRVJSX1NUUkVBTV9DQU5OT1RfUElQRSA9IF9yZXF1aXJlJGNvZGVzLkVSUl9TVFJFQU1fQ0FOTk9UX1BJUEUsXG4gIEVSUl9TVFJFQU1fREVTVFJPWUVEID0gX3JlcXVpcmUkY29kZXMuRVJSX1NUUkVBTV9ERVNUUk9ZRUQsXG4gIEVSUl9TVFJFQU1fTlVMTF9WQUxVRVMgPSBfcmVxdWlyZSRjb2Rlcy5FUlJfU1RSRUFNX05VTExfVkFMVUVTLFxuICBFUlJfU1RSRUFNX1dSSVRFX0FGVEVSX0VORCA9IF9yZXF1aXJlJGNvZGVzLkVSUl9TVFJFQU1fV1JJVEVfQUZURVJfRU5ELFxuICBFUlJfVU5LTk9XTl9FTkNPRElORyA9IF9yZXF1aXJlJGNvZGVzLkVSUl9VTktOT1dOX0VOQ09ESU5HO1xudmFyIGVycm9yT3JEZXN0cm95ID0gZGVzdHJveUltcGwuZXJyb3JPckRlc3Ryb3k7XG5yZXF1aXJlKCdpbmhlcml0cycpKFdyaXRhYmxlLCBTdHJlYW0pO1xuZnVuY3Rpb24gbm9wKCkge31cbmZ1bmN0aW9uIFdyaXRhYmxlU3RhdGUob3B0aW9ucywgc3RyZWFtLCBpc0R1cGxleCkge1xuICBEdXBsZXggPSBEdXBsZXggfHwgcmVxdWlyZSgnLi9fc3RyZWFtX2R1cGxleCcpO1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAvLyBEdXBsZXggc3RyZWFtcyBhcmUgYm90aCByZWFkYWJsZSBhbmQgd3JpdGFibGUsIGJ1dCBzaGFyZVxuICAvLyB0aGUgc2FtZSBvcHRpb25zIG9iamVjdC5cbiAgLy8gSG93ZXZlciwgc29tZSBjYXNlcyByZXF1aXJlIHNldHRpbmcgb3B0aW9ucyB0byBkaWZmZXJlbnRcbiAgLy8gdmFsdWVzIGZvciB0aGUgcmVhZGFibGUgYW5kIHRoZSB3cml0YWJsZSBzaWRlcyBvZiB0aGUgZHVwbGV4IHN0cmVhbSxcbiAgLy8gZS5nLiBvcHRpb25zLnJlYWRhYmxlT2JqZWN0TW9kZSB2cy4gb3B0aW9ucy53cml0YWJsZU9iamVjdE1vZGUsIGV0Yy5cbiAgaWYgKHR5cGVvZiBpc0R1cGxleCAhPT0gJ2Jvb2xlYW4nKSBpc0R1cGxleCA9IHN0cmVhbSBpbnN0YW5jZW9mIER1cGxleDtcblxuICAvLyBvYmplY3Qgc3RyZWFtIGZsYWcgdG8gaW5kaWNhdGUgd2hldGhlciBvciBub3QgdGhpcyBzdHJlYW1cbiAgLy8gY29udGFpbnMgYnVmZmVycyBvciBvYmplY3RzLlxuICB0aGlzLm9iamVjdE1vZGUgPSAhIW9wdGlvbnMub2JqZWN0TW9kZTtcbiAgaWYgKGlzRHVwbGV4KSB0aGlzLm9iamVjdE1vZGUgPSB0aGlzLm9iamVjdE1vZGUgfHwgISFvcHRpb25zLndyaXRhYmxlT2JqZWN0TW9kZTtcblxuICAvLyB0aGUgcG9pbnQgYXQgd2hpY2ggd3JpdGUoKSBzdGFydHMgcmV0dXJuaW5nIGZhbHNlXG4gIC8vIE5vdGU6IDAgaXMgYSB2YWxpZCB2YWx1ZSwgbWVhbnMgdGhhdCB3ZSBhbHdheXMgcmV0dXJuIGZhbHNlIGlmXG4gIC8vIHRoZSBlbnRpcmUgYnVmZmVyIGlzIG5vdCBmbHVzaGVkIGltbWVkaWF0ZWx5IG9uIHdyaXRlKClcbiAgdGhpcy5oaWdoV2F0ZXJNYXJrID0gZ2V0SGlnaFdhdGVyTWFyayh0aGlzLCBvcHRpb25zLCAnd3JpdGFibGVIaWdoV2F0ZXJNYXJrJywgaXNEdXBsZXgpO1xuXG4gIC8vIGlmIF9maW5hbCBoYXMgYmVlbiBjYWxsZWRcbiAgdGhpcy5maW5hbENhbGxlZCA9IGZhbHNlO1xuXG4gIC8vIGRyYWluIGV2ZW50IGZsYWcuXG4gIHRoaXMubmVlZERyYWluID0gZmFsc2U7XG4gIC8vIGF0IHRoZSBzdGFydCBvZiBjYWxsaW5nIGVuZCgpXG4gIHRoaXMuZW5kaW5nID0gZmFsc2U7XG4gIC8vIHdoZW4gZW5kKCkgaGFzIGJlZW4gY2FsbGVkLCBhbmQgcmV0dXJuZWRcbiAgdGhpcy5lbmRlZCA9IGZhbHNlO1xuICAvLyB3aGVuICdmaW5pc2gnIGlzIGVtaXR0ZWRcbiAgdGhpcy5maW5pc2hlZCA9IGZhbHNlO1xuXG4gIC8vIGhhcyBpdCBiZWVuIGRlc3Ryb3llZFxuICB0aGlzLmRlc3Ryb3llZCA9IGZhbHNlO1xuXG4gIC8vIHNob3VsZCB3ZSBkZWNvZGUgc3RyaW5ncyBpbnRvIGJ1ZmZlcnMgYmVmb3JlIHBhc3NpbmcgdG8gX3dyaXRlP1xuICAvLyB0aGlzIGlzIGhlcmUgc28gdGhhdCBzb21lIG5vZGUtY29yZSBzdHJlYW1zIGNhbiBvcHRpbWl6ZSBzdHJpbmdcbiAgLy8gaGFuZGxpbmcgYXQgYSBsb3dlciBsZXZlbC5cbiAgdmFyIG5vRGVjb2RlID0gb3B0aW9ucy5kZWNvZGVTdHJpbmdzID09PSBmYWxzZTtcbiAgdGhpcy5kZWNvZGVTdHJpbmdzID0gIW5vRGVjb2RlO1xuXG4gIC8vIENyeXB0byBpcyBraW5kIG9mIG9sZCBhbmQgY3J1c3R5LiAgSGlzdG9yaWNhbGx5LCBpdHMgZGVmYXVsdCBzdHJpbmdcbiAgLy8gZW5jb2RpbmcgaXMgJ2JpbmFyeScgc28gd2UgaGF2ZSB0byBtYWtlIHRoaXMgY29uZmlndXJhYmxlLlxuICAvLyBFdmVyeXRoaW5nIGVsc2UgaW4gdGhlIHVuaXZlcnNlIHVzZXMgJ3V0ZjgnLCB0aG91Z2guXG4gIHRoaXMuZGVmYXVsdEVuY29kaW5nID0gb3B0aW9ucy5kZWZhdWx0RW5jb2RpbmcgfHwgJ3V0ZjgnO1xuXG4gIC8vIG5vdCBhbiBhY3R1YWwgYnVmZmVyIHdlIGtlZXAgdHJhY2sgb2YsIGJ1dCBhIG1lYXN1cmVtZW50XG4gIC8vIG9mIGhvdyBtdWNoIHdlJ3JlIHdhaXRpbmcgdG8gZ2V0IHB1c2hlZCB0byBzb21lIHVuZGVybHlpbmdcbiAgLy8gc29ja2V0IG9yIGZpbGUuXG4gIHRoaXMubGVuZ3RoID0gMDtcblxuICAvLyBhIGZsYWcgdG8gc2VlIHdoZW4gd2UncmUgaW4gdGhlIG1pZGRsZSBvZiBhIHdyaXRlLlxuICB0aGlzLndyaXRpbmcgPSBmYWxzZTtcblxuICAvLyB3aGVuIHRydWUgYWxsIHdyaXRlcyB3aWxsIGJlIGJ1ZmZlcmVkIHVudGlsIC51bmNvcmsoKSBjYWxsXG4gIHRoaXMuY29ya2VkID0gMDtcblxuICAvLyBhIGZsYWcgdG8gYmUgYWJsZSB0byB0ZWxsIGlmIHRoZSBvbndyaXRlIGNiIGlzIGNhbGxlZCBpbW1lZGlhdGVseSxcbiAgLy8gb3Igb24gYSBsYXRlciB0aWNrLiAgV2Ugc2V0IHRoaXMgdG8gdHJ1ZSBhdCBmaXJzdCwgYmVjYXVzZSBhbnlcbiAgLy8gYWN0aW9ucyB0aGF0IHNob3VsZG4ndCBoYXBwZW4gdW50aWwgXCJsYXRlclwiIHNob3VsZCBnZW5lcmFsbHkgYWxzb1xuICAvLyBub3QgaGFwcGVuIGJlZm9yZSB0aGUgZmlyc3Qgd3JpdGUgY2FsbC5cbiAgdGhpcy5zeW5jID0gdHJ1ZTtcblxuICAvLyBhIGZsYWcgdG8ga25vdyBpZiB3ZSdyZSBwcm9jZXNzaW5nIHByZXZpb3VzbHkgYnVmZmVyZWQgaXRlbXMsIHdoaWNoXG4gIC8vIG1heSBjYWxsIHRoZSBfd3JpdGUoKSBjYWxsYmFjayBpbiB0aGUgc2FtZSB0aWNrLCBzbyB0aGF0IHdlIGRvbid0XG4gIC8vIGVuZCB1cCBpbiBhbiBvdmVybGFwcGVkIG9ud3JpdGUgc2l0dWF0aW9uLlxuICB0aGlzLmJ1ZmZlclByb2Nlc3NpbmcgPSBmYWxzZTtcblxuICAvLyB0aGUgY2FsbGJhY2sgdGhhdCdzIHBhc3NlZCB0byBfd3JpdGUoY2h1bmssY2IpXG4gIHRoaXMub253cml0ZSA9IGZ1bmN0aW9uIChlcikge1xuICAgIG9ud3JpdGUoc3RyZWFtLCBlcik7XG4gIH07XG5cbiAgLy8gdGhlIGNhbGxiYWNrIHRoYXQgdGhlIHVzZXIgc3VwcGxpZXMgdG8gd3JpdGUoY2h1bmssZW5jb2RpbmcsY2IpXG4gIHRoaXMud3JpdGVjYiA9IG51bGw7XG5cbiAgLy8gdGhlIGFtb3VudCB0aGF0IGlzIGJlaW5nIHdyaXR0ZW4gd2hlbiBfd3JpdGUgaXMgY2FsbGVkLlxuICB0aGlzLndyaXRlbGVuID0gMDtcbiAgdGhpcy5idWZmZXJlZFJlcXVlc3QgPSBudWxsO1xuICB0aGlzLmxhc3RCdWZmZXJlZFJlcXVlc3QgPSBudWxsO1xuXG4gIC8vIG51bWJlciBvZiBwZW5kaW5nIHVzZXItc3VwcGxpZWQgd3JpdGUgY2FsbGJhY2tzXG4gIC8vIHRoaXMgbXVzdCBiZSAwIGJlZm9yZSAnZmluaXNoJyBjYW4gYmUgZW1pdHRlZFxuICB0aGlzLnBlbmRpbmdjYiA9IDA7XG5cbiAgLy8gZW1pdCBwcmVmaW5pc2ggaWYgdGhlIG9ubHkgdGhpbmcgd2UncmUgd2FpdGluZyBmb3IgaXMgX3dyaXRlIGNic1xuICAvLyBUaGlzIGlzIHJlbGV2YW50IGZvciBzeW5jaHJvbm91cyBUcmFuc2Zvcm0gc3RyZWFtc1xuICB0aGlzLnByZWZpbmlzaGVkID0gZmFsc2U7XG5cbiAgLy8gVHJ1ZSBpZiB0aGUgZXJyb3Igd2FzIGFscmVhZHkgZW1pdHRlZCBhbmQgc2hvdWxkIG5vdCBiZSB0aHJvd24gYWdhaW5cbiAgdGhpcy5lcnJvckVtaXR0ZWQgPSBmYWxzZTtcblxuICAvLyBTaG91bGQgY2xvc2UgYmUgZW1pdHRlZCBvbiBkZXN0cm95LiBEZWZhdWx0cyB0byB0cnVlLlxuICB0aGlzLmVtaXRDbG9zZSA9IG9wdGlvbnMuZW1pdENsb3NlICE9PSBmYWxzZTtcblxuICAvLyBTaG91bGQgLmRlc3Ryb3koKSBiZSBjYWxsZWQgYWZ0ZXIgJ2ZpbmlzaCcgKGFuZCBwb3RlbnRpYWxseSAnZW5kJylcbiAgdGhpcy5hdXRvRGVzdHJveSA9ICEhb3B0aW9ucy5hdXRvRGVzdHJveTtcblxuICAvLyBjb3VudCBidWZmZXJlZCByZXF1ZXN0c1xuICB0aGlzLmJ1ZmZlcmVkUmVxdWVzdENvdW50ID0gMDtcblxuICAvLyBhbGxvY2F0ZSB0aGUgZmlyc3QgQ29ya2VkUmVxdWVzdCwgdGhlcmUgaXMgYWx3YXlzXG4gIC8vIG9uZSBhbGxvY2F0ZWQgYW5kIGZyZWUgdG8gdXNlLCBhbmQgd2UgbWFpbnRhaW4gYXQgbW9zdCB0d29cbiAgdGhpcy5jb3JrZWRSZXF1ZXN0c0ZyZWUgPSBuZXcgQ29ya2VkUmVxdWVzdCh0aGlzKTtcbn1cbldyaXRhYmxlU3RhdGUucHJvdG90eXBlLmdldEJ1ZmZlciA9IGZ1bmN0aW9uIGdldEJ1ZmZlcigpIHtcbiAgdmFyIGN1cnJlbnQgPSB0aGlzLmJ1ZmZlcmVkUmVxdWVzdDtcbiAgdmFyIG91dCA9IFtdO1xuICB3aGlsZSAoY3VycmVudCkge1xuICAgIG91dC5wdXNoKGN1cnJlbnQpO1xuICAgIGN1cnJlbnQgPSBjdXJyZW50Lm5leHQ7XG4gIH1cbiAgcmV0dXJuIG91dDtcbn07XG4oZnVuY3Rpb24gKCkge1xuICB0cnkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShXcml0YWJsZVN0YXRlLnByb3RvdHlwZSwgJ2J1ZmZlcicsIHtcbiAgICAgIGdldDogaW50ZXJuYWxVdGlsLmRlcHJlY2F0ZShmdW5jdGlvbiB3cml0YWJsZVN0YXRlQnVmZmVyR2V0dGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRCdWZmZXIoKTtcbiAgICAgIH0sICdfd3JpdGFibGVTdGF0ZS5idWZmZXIgaXMgZGVwcmVjYXRlZC4gVXNlIF93cml0YWJsZVN0YXRlLmdldEJ1ZmZlciAnICsgJ2luc3RlYWQuJywgJ0RFUDAwMDMnKVxuICAgIH0pO1xuICB9IGNhdGNoIChfKSB7fVxufSkoKTtcblxuLy8gVGVzdCBfd3JpdGFibGVTdGF0ZSBmb3IgaW5oZXJpdGFuY2UgdG8gYWNjb3VudCBmb3IgRHVwbGV4IHN0cmVhbXMsXG4vLyB3aG9zZSBwcm90b3R5cGUgY2hhaW4gb25seSBwb2ludHMgdG8gUmVhZGFibGUuXG52YXIgcmVhbEhhc0luc3RhbmNlO1xuaWYgKHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLmhhc0luc3RhbmNlICYmIHR5cGVvZiBGdW5jdGlvbi5wcm90b3R5cGVbU3ltYm9sLmhhc0luc3RhbmNlXSA9PT0gJ2Z1bmN0aW9uJykge1xuICByZWFsSGFzSW5zdGFuY2UgPSBGdW5jdGlvbi5wcm90b3R5cGVbU3ltYm9sLmhhc0luc3RhbmNlXTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFdyaXRhYmxlLCBTeW1ib2wuaGFzSW5zdGFuY2UsIHtcbiAgICB2YWx1ZTogZnVuY3Rpb24gdmFsdWUob2JqZWN0KSB7XG4gICAgICBpZiAocmVhbEhhc0luc3RhbmNlLmNhbGwodGhpcywgb2JqZWN0KSkgcmV0dXJuIHRydWU7XG4gICAgICBpZiAodGhpcyAhPT0gV3JpdGFibGUpIHJldHVybiBmYWxzZTtcbiAgICAgIHJldHVybiBvYmplY3QgJiYgb2JqZWN0Ll93cml0YWJsZVN0YXRlIGluc3RhbmNlb2YgV3JpdGFibGVTdGF0ZTtcbiAgICB9XG4gIH0pO1xufSBlbHNlIHtcbiAgcmVhbEhhc0luc3RhbmNlID0gZnVuY3Rpb24gcmVhbEhhc0luc3RhbmNlKG9iamVjdCkge1xuICAgIHJldHVybiBvYmplY3QgaW5zdGFuY2VvZiB0aGlzO1xuICB9O1xufVxuZnVuY3Rpb24gV3JpdGFibGUob3B0aW9ucykge1xuICBEdXBsZXggPSBEdXBsZXggfHwgcmVxdWlyZSgnLi9fc3RyZWFtX2R1cGxleCcpO1xuXG4gIC8vIFdyaXRhYmxlIGN0b3IgaXMgYXBwbGllZCB0byBEdXBsZXhlcywgdG9vLlxuICAvLyBgcmVhbEhhc0luc3RhbmNlYCBpcyBuZWNlc3NhcnkgYmVjYXVzZSB1c2luZyBwbGFpbiBgaW5zdGFuY2VvZmBcbiAgLy8gd291bGQgcmV0dXJuIGZhbHNlLCBhcyBubyBgX3dyaXRhYmxlU3RhdGVgIHByb3BlcnR5IGlzIGF0dGFjaGVkLlxuXG4gIC8vIFRyeWluZyB0byB1c2UgdGhlIGN1c3RvbSBgaW5zdGFuY2VvZmAgZm9yIFdyaXRhYmxlIGhlcmUgd2lsbCBhbHNvIGJyZWFrIHRoZVxuICAvLyBOb2RlLmpzIExhenlUcmFuc2Zvcm0gaW1wbGVtZW50YXRpb24sIHdoaWNoIGhhcyBhIG5vbi10cml2aWFsIGdldHRlciBmb3JcbiAgLy8gYF93cml0YWJsZVN0YXRlYCB0aGF0IHdvdWxkIGxlYWQgdG8gaW5maW5pdGUgcmVjdXJzaW9uLlxuXG4gIC8vIENoZWNraW5nIGZvciBhIFN0cmVhbS5EdXBsZXggaW5zdGFuY2UgaXMgZmFzdGVyIGhlcmUgaW5zdGVhZCBvZiBpbnNpZGVcbiAgLy8gdGhlIFdyaXRhYmxlU3RhdGUgY29uc3RydWN0b3IsIGF0IGxlYXN0IHdpdGggVjggNi41XG4gIHZhciBpc0R1cGxleCA9IHRoaXMgaW5zdGFuY2VvZiBEdXBsZXg7XG4gIGlmICghaXNEdXBsZXggJiYgIXJlYWxIYXNJbnN0YW5jZS5jYWxsKFdyaXRhYmxlLCB0aGlzKSkgcmV0dXJuIG5ldyBXcml0YWJsZShvcHRpb25zKTtcbiAgdGhpcy5fd3JpdGFibGVTdGF0ZSA9IG5ldyBXcml0YWJsZVN0YXRlKG9wdGlvbnMsIHRoaXMsIGlzRHVwbGV4KTtcblxuICAvLyBsZWdhY3kuXG4gIHRoaXMud3JpdGFibGUgPSB0cnVlO1xuICBpZiAob3B0aW9ucykge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy53cml0ZSA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5fd3JpdGUgPSBvcHRpb25zLndyaXRlO1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy53cml0ZXYgPT09ICdmdW5jdGlvbicpIHRoaXMuX3dyaXRldiA9IG9wdGlvbnMud3JpdGV2O1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5kZXN0cm95ID09PSAnZnVuY3Rpb24nKSB0aGlzLl9kZXN0cm95ID0gb3B0aW9ucy5kZXN0cm95O1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5maW5hbCA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5fZmluYWwgPSBvcHRpb25zLmZpbmFsO1xuICB9XG4gIFN0cmVhbS5jYWxsKHRoaXMpO1xufVxuXG4vLyBPdGhlcndpc2UgcGVvcGxlIGNhbiBwaXBlIFdyaXRhYmxlIHN0cmVhbXMsIHdoaWNoIGlzIGp1c3Qgd3JvbmcuXG5Xcml0YWJsZS5wcm90b3R5cGUucGlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgZXJyb3JPckRlc3Ryb3kodGhpcywgbmV3IEVSUl9TVFJFQU1fQ0FOTk9UX1BJUEUoKSk7XG59O1xuZnVuY3Rpb24gd3JpdGVBZnRlckVuZChzdHJlYW0sIGNiKSB7XG4gIHZhciBlciA9IG5ldyBFUlJfU1RSRUFNX1dSSVRFX0FGVEVSX0VORCgpO1xuICAvLyBUT0RPOiBkZWZlciBlcnJvciBldmVudHMgY29uc2lzdGVudGx5IGV2ZXJ5d2hlcmUsIG5vdCBqdXN0IHRoZSBjYlxuICBlcnJvck9yRGVzdHJveShzdHJlYW0sIGVyKTtcbiAgcHJvY2Vzcy5uZXh0VGljayhjYiwgZXIpO1xufVxuXG4vLyBDaGVja3MgdGhhdCBhIHVzZXItc3VwcGxpZWQgY2h1bmsgaXMgdmFsaWQsIGVzcGVjaWFsbHkgZm9yIHRoZSBwYXJ0aWN1bGFyXG4vLyBtb2RlIHRoZSBzdHJlYW0gaXMgaW4uIEN1cnJlbnRseSB0aGlzIG1lYW5zIHRoYXQgYG51bGxgIGlzIG5ldmVyIGFjY2VwdGVkXG4vLyBhbmQgdW5kZWZpbmVkL25vbi1zdHJpbmcgdmFsdWVzIGFyZSBvbmx5IGFsbG93ZWQgaW4gb2JqZWN0IG1vZGUuXG5mdW5jdGlvbiB2YWxpZENodW5rKHN0cmVhbSwgc3RhdGUsIGNodW5rLCBjYikge1xuICB2YXIgZXI7XG4gIGlmIChjaHVuayA9PT0gbnVsbCkge1xuICAgIGVyID0gbmV3IEVSUl9TVFJFQU1fTlVMTF9WQUxVRVMoKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgY2h1bmsgIT09ICdzdHJpbmcnICYmICFzdGF0ZS5vYmplY3RNb2RlKSB7XG4gICAgZXIgPSBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUoJ2NodW5rJywgWydzdHJpbmcnLCAnQnVmZmVyJ10sIGNodW5rKTtcbiAgfVxuICBpZiAoZXIpIHtcbiAgICBlcnJvck9yRGVzdHJveShzdHJlYW0sIGVyKTtcbiAgICBwcm9jZXNzLm5leHRUaWNrKGNiLCBlcik7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuV3JpdGFibGUucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fd3JpdGFibGVTdGF0ZTtcbiAgdmFyIHJldCA9IGZhbHNlO1xuICB2YXIgaXNCdWYgPSAhc3RhdGUub2JqZWN0TW9kZSAmJiBfaXNVaW50OEFycmF5KGNodW5rKTtcbiAgaWYgKGlzQnVmICYmICFCdWZmZXIuaXNCdWZmZXIoY2h1bmspKSB7XG4gICAgY2h1bmsgPSBfdWludDhBcnJheVRvQnVmZmVyKGNodW5rKTtcbiAgfVxuICBpZiAodHlwZW9mIGVuY29kaW5nID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2IgPSBlbmNvZGluZztcbiAgICBlbmNvZGluZyA9IG51bGw7XG4gIH1cbiAgaWYgKGlzQnVmKSBlbmNvZGluZyA9ICdidWZmZXInO2Vsc2UgaWYgKCFlbmNvZGluZykgZW5jb2RpbmcgPSBzdGF0ZS5kZWZhdWx0RW5jb2Rpbmc7XG4gIGlmICh0eXBlb2YgY2IgIT09ICdmdW5jdGlvbicpIGNiID0gbm9wO1xuICBpZiAoc3RhdGUuZW5kaW5nKSB3cml0ZUFmdGVyRW5kKHRoaXMsIGNiKTtlbHNlIGlmIChpc0J1ZiB8fCB2YWxpZENodW5rKHRoaXMsIHN0YXRlLCBjaHVuaywgY2IpKSB7XG4gICAgc3RhdGUucGVuZGluZ2NiKys7XG4gICAgcmV0ID0gd3JpdGVPckJ1ZmZlcih0aGlzLCBzdGF0ZSwgaXNCdWYsIGNodW5rLCBlbmNvZGluZywgY2IpO1xuICB9XG4gIHJldHVybiByZXQ7XG59O1xuV3JpdGFibGUucHJvdG90eXBlLmNvcmsgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuX3dyaXRhYmxlU3RhdGUuY29ya2VkKys7XG59O1xuV3JpdGFibGUucHJvdG90eXBlLnVuY29yayA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fd3JpdGFibGVTdGF0ZTtcbiAgaWYgKHN0YXRlLmNvcmtlZCkge1xuICAgIHN0YXRlLmNvcmtlZC0tO1xuICAgIGlmICghc3RhdGUud3JpdGluZyAmJiAhc3RhdGUuY29ya2VkICYmICFzdGF0ZS5idWZmZXJQcm9jZXNzaW5nICYmIHN0YXRlLmJ1ZmZlcmVkUmVxdWVzdCkgY2xlYXJCdWZmZXIodGhpcywgc3RhdGUpO1xuICB9XG59O1xuV3JpdGFibGUucHJvdG90eXBlLnNldERlZmF1bHRFbmNvZGluZyA9IGZ1bmN0aW9uIHNldERlZmF1bHRFbmNvZGluZyhlbmNvZGluZykge1xuICAvLyBub2RlOjpQYXJzZUVuY29kaW5nKCkgcmVxdWlyZXMgbG93ZXIgY2FzZS5cbiAgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gJ3N0cmluZycpIGVuY29kaW5nID0gZW5jb2RpbmcudG9Mb3dlckNhc2UoKTtcbiAgaWYgKCEoWydoZXgnLCAndXRmOCcsICd1dGYtOCcsICdhc2NpaScsICdiaW5hcnknLCAnYmFzZTY0JywgJ3VjczInLCAndWNzLTInLCAndXRmMTZsZScsICd1dGYtMTZsZScsICdyYXcnXS5pbmRleE9mKChlbmNvZGluZyArICcnKS50b0xvd2VyQ2FzZSgpKSA+IC0xKSkgdGhyb3cgbmV3IEVSUl9VTktOT1dOX0VOQ09ESU5HKGVuY29kaW5nKTtcbiAgdGhpcy5fd3JpdGFibGVTdGF0ZS5kZWZhdWx0RW5jb2RpbmcgPSBlbmNvZGluZztcbiAgcmV0dXJuIHRoaXM7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KFdyaXRhYmxlLnByb3RvdHlwZSwgJ3dyaXRhYmxlQnVmZmVyJywge1xuICAvLyBtYWtpbmcgaXQgZXhwbGljaXQgdGhpcyBwcm9wZXJ0eSBpcyBub3QgZW51bWVyYWJsZVxuICAvLyBiZWNhdXNlIG90aGVyd2lzZSBzb21lIHByb3RvdHlwZSBtYW5pcHVsYXRpb24gaW5cbiAgLy8gdXNlcmxhbmQgd2lsbCBmYWlsXG4gIGVudW1lcmFibGU6IGZhbHNlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZSAmJiB0aGlzLl93cml0YWJsZVN0YXRlLmdldEJ1ZmZlcigpO1xuICB9XG59KTtcbmZ1bmN0aW9uIGRlY29kZUNodW5rKHN0YXRlLCBjaHVuaywgZW5jb2RpbmcpIHtcbiAgaWYgKCFzdGF0ZS5vYmplY3RNb2RlICYmIHN0YXRlLmRlY29kZVN0cmluZ3MgIT09IGZhbHNlICYmIHR5cGVvZiBjaHVuayA9PT0gJ3N0cmluZycpIHtcbiAgICBjaHVuayA9IEJ1ZmZlci5mcm9tKGNodW5rLCBlbmNvZGluZyk7XG4gIH1cbiAgcmV0dXJuIGNodW5rO1xufVxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFdyaXRhYmxlLnByb3RvdHlwZSwgJ3dyaXRhYmxlSGlnaFdhdGVyTWFyaycsIHtcbiAgLy8gbWFraW5nIGl0IGV4cGxpY2l0IHRoaXMgcHJvcGVydHkgaXMgbm90IGVudW1lcmFibGVcbiAgLy8gYmVjYXVzZSBvdGhlcndpc2Ugc29tZSBwcm90b3R5cGUgbWFuaXB1bGF0aW9uIGluXG4gIC8vIHVzZXJsYW5kIHdpbGwgZmFpbFxuICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuaGlnaFdhdGVyTWFyaztcbiAgfVxufSk7XG5cbi8vIGlmIHdlJ3JlIGFscmVhZHkgd3JpdGluZyBzb21ldGhpbmcsIHRoZW4ganVzdCBwdXQgdGhpc1xuLy8gaW4gdGhlIHF1ZXVlLCBhbmQgd2FpdCBvdXIgdHVybi4gIE90aGVyd2lzZSwgY2FsbCBfd3JpdGVcbi8vIElmIHdlIHJldHVybiBmYWxzZSwgdGhlbiB3ZSBuZWVkIGEgZHJhaW4gZXZlbnQsIHNvIHNldCB0aGF0IGZsYWcuXG5mdW5jdGlvbiB3cml0ZU9yQnVmZmVyKHN0cmVhbSwgc3RhdGUsIGlzQnVmLCBjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIGlmICghaXNCdWYpIHtcbiAgICB2YXIgbmV3Q2h1bmsgPSBkZWNvZGVDaHVuayhzdGF0ZSwgY2h1bmssIGVuY29kaW5nKTtcbiAgICBpZiAoY2h1bmsgIT09IG5ld0NodW5rKSB7XG4gICAgICBpc0J1ZiA9IHRydWU7XG4gICAgICBlbmNvZGluZyA9ICdidWZmZXInO1xuICAgICAgY2h1bmsgPSBuZXdDaHVuaztcbiAgICB9XG4gIH1cbiAgdmFyIGxlbiA9IHN0YXRlLm9iamVjdE1vZGUgPyAxIDogY2h1bmsubGVuZ3RoO1xuICBzdGF0ZS5sZW5ndGggKz0gbGVuO1xuICB2YXIgcmV0ID0gc3RhdGUubGVuZ3RoIDwgc3RhdGUuaGlnaFdhdGVyTWFyaztcbiAgLy8gd2UgbXVzdCBlbnN1cmUgdGhhdCBwcmV2aW91cyBuZWVkRHJhaW4gd2lsbCBub3QgYmUgcmVzZXQgdG8gZmFsc2UuXG4gIGlmICghcmV0KSBzdGF0ZS5uZWVkRHJhaW4gPSB0cnVlO1xuICBpZiAoc3RhdGUud3JpdGluZyB8fCBzdGF0ZS5jb3JrZWQpIHtcbiAgICB2YXIgbGFzdCA9IHN0YXRlLmxhc3RCdWZmZXJlZFJlcXVlc3Q7XG4gICAgc3RhdGUubGFzdEJ1ZmZlcmVkUmVxdWVzdCA9IHtcbiAgICAgIGNodW5rOiBjaHVuayxcbiAgICAgIGVuY29kaW5nOiBlbmNvZGluZyxcbiAgICAgIGlzQnVmOiBpc0J1ZixcbiAgICAgIGNhbGxiYWNrOiBjYixcbiAgICAgIG5leHQ6IG51bGxcbiAgICB9O1xuICAgIGlmIChsYXN0KSB7XG4gICAgICBsYXN0Lm5leHQgPSBzdGF0ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0O1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZS5idWZmZXJlZFJlcXVlc3QgPSBzdGF0ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0O1xuICAgIH1cbiAgICBzdGF0ZS5idWZmZXJlZFJlcXVlc3RDb3VudCArPSAxO1xuICB9IGVsc2Uge1xuICAgIGRvV3JpdGUoc3RyZWFtLCBzdGF0ZSwgZmFsc2UsIGxlbiwgY2h1bmssIGVuY29kaW5nLCBjYik7XG4gIH1cbiAgcmV0dXJuIHJldDtcbn1cbmZ1bmN0aW9uIGRvV3JpdGUoc3RyZWFtLCBzdGF0ZSwgd3JpdGV2LCBsZW4sIGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgc3RhdGUud3JpdGVsZW4gPSBsZW47XG4gIHN0YXRlLndyaXRlY2IgPSBjYjtcbiAgc3RhdGUud3JpdGluZyA9IHRydWU7XG4gIHN0YXRlLnN5bmMgPSB0cnVlO1xuICBpZiAoc3RhdGUuZGVzdHJveWVkKSBzdGF0ZS5vbndyaXRlKG5ldyBFUlJfU1RSRUFNX0RFU1RST1lFRCgnd3JpdGUnKSk7ZWxzZSBpZiAod3JpdGV2KSBzdHJlYW0uX3dyaXRldihjaHVuaywgc3RhdGUub253cml0ZSk7ZWxzZSBzdHJlYW0uX3dyaXRlKGNodW5rLCBlbmNvZGluZywgc3RhdGUub253cml0ZSk7XG4gIHN0YXRlLnN5bmMgPSBmYWxzZTtcbn1cbmZ1bmN0aW9uIG9ud3JpdGVFcnJvcihzdHJlYW0sIHN0YXRlLCBzeW5jLCBlciwgY2IpIHtcbiAgLS1zdGF0ZS5wZW5kaW5nY2I7XG4gIGlmIChzeW5jKSB7XG4gICAgLy8gZGVmZXIgdGhlIGNhbGxiYWNrIGlmIHdlIGFyZSBiZWluZyBjYWxsZWQgc3luY2hyb25vdXNseVxuICAgIC8vIHRvIGF2b2lkIHBpbGluZyB1cCB0aGluZ3Mgb24gdGhlIHN0YWNrXG4gICAgcHJvY2Vzcy5uZXh0VGljayhjYiwgZXIpO1xuICAgIC8vIHRoaXMgY2FuIGVtaXQgZmluaXNoLCBhbmQgaXQgd2lsbCBhbHdheXMgaGFwcGVuXG4gICAgLy8gYWZ0ZXIgZXJyb3JcbiAgICBwcm9jZXNzLm5leHRUaWNrKGZpbmlzaE1heWJlLCBzdHJlYW0sIHN0YXRlKTtcbiAgICBzdHJlYW0uX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkID0gdHJ1ZTtcbiAgICBlcnJvck9yRGVzdHJveShzdHJlYW0sIGVyKTtcbiAgfSBlbHNlIHtcbiAgICAvLyB0aGUgY2FsbGVyIGV4cGVjdCB0aGlzIHRvIGhhcHBlbiBiZWZvcmUgaWZcbiAgICAvLyBpdCBpcyBhc3luY1xuICAgIGNiKGVyKTtcbiAgICBzdHJlYW0uX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkID0gdHJ1ZTtcbiAgICBlcnJvck9yRGVzdHJveShzdHJlYW0sIGVyKTtcbiAgICAvLyB0aGlzIGNhbiBlbWl0IGZpbmlzaCwgYnV0IGZpbmlzaCBtdXN0XG4gICAgLy8gYWx3YXlzIGZvbGxvdyBlcnJvclxuICAgIGZpbmlzaE1heWJlKHN0cmVhbSwgc3RhdGUpO1xuICB9XG59XG5mdW5jdGlvbiBvbndyaXRlU3RhdGVVcGRhdGUoc3RhdGUpIHtcbiAgc3RhdGUud3JpdGluZyA9IGZhbHNlO1xuICBzdGF0ZS53cml0ZWNiID0gbnVsbDtcbiAgc3RhdGUubGVuZ3RoIC09IHN0YXRlLndyaXRlbGVuO1xuICBzdGF0ZS53cml0ZWxlbiA9IDA7XG59XG5mdW5jdGlvbiBvbndyaXRlKHN0cmVhbSwgZXIpIHtcbiAgdmFyIHN0YXRlID0gc3RyZWFtLl93cml0YWJsZVN0YXRlO1xuICB2YXIgc3luYyA9IHN0YXRlLnN5bmM7XG4gIHZhciBjYiA9IHN0YXRlLndyaXRlY2I7XG4gIGlmICh0eXBlb2YgY2IgIT09ICdmdW5jdGlvbicpIHRocm93IG5ldyBFUlJfTVVMVElQTEVfQ0FMTEJBQ0soKTtcbiAgb253cml0ZVN0YXRlVXBkYXRlKHN0YXRlKTtcbiAgaWYgKGVyKSBvbndyaXRlRXJyb3Ioc3RyZWFtLCBzdGF0ZSwgc3luYywgZXIsIGNiKTtlbHNlIHtcbiAgICAvLyBDaGVjayBpZiB3ZSdyZSBhY3R1YWxseSByZWFkeSB0byBmaW5pc2gsIGJ1dCBkb24ndCBlbWl0IHlldFxuICAgIHZhciBmaW5pc2hlZCA9IG5lZWRGaW5pc2goc3RhdGUpIHx8IHN0cmVhbS5kZXN0cm95ZWQ7XG4gICAgaWYgKCFmaW5pc2hlZCAmJiAhc3RhdGUuY29ya2VkICYmICFzdGF0ZS5idWZmZXJQcm9jZXNzaW5nICYmIHN0YXRlLmJ1ZmZlcmVkUmVxdWVzdCkge1xuICAgICAgY2xlYXJCdWZmZXIoc3RyZWFtLCBzdGF0ZSk7XG4gICAgfVxuICAgIGlmIChzeW5jKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGFmdGVyV3JpdGUsIHN0cmVhbSwgc3RhdGUsIGZpbmlzaGVkLCBjYik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFmdGVyV3JpdGUoc3RyZWFtLCBzdGF0ZSwgZmluaXNoZWQsIGNiKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGFmdGVyV3JpdGUoc3RyZWFtLCBzdGF0ZSwgZmluaXNoZWQsIGNiKSB7XG4gIGlmICghZmluaXNoZWQpIG9ud3JpdGVEcmFpbihzdHJlYW0sIHN0YXRlKTtcbiAgc3RhdGUucGVuZGluZ2NiLS07XG4gIGNiKCk7XG4gIGZpbmlzaE1heWJlKHN0cmVhbSwgc3RhdGUpO1xufVxuXG4vLyBNdXN0IGZvcmNlIGNhbGxiYWNrIHRvIGJlIGNhbGxlZCBvbiBuZXh0VGljaywgc28gdGhhdCB3ZSBkb24ndFxuLy8gZW1pdCAnZHJhaW4nIGJlZm9yZSB0aGUgd3JpdGUoKSBjb25zdW1lciBnZXRzIHRoZSAnZmFsc2UnIHJldHVyblxuLy8gdmFsdWUsIGFuZCBoYXMgYSBjaGFuY2UgdG8gYXR0YWNoIGEgJ2RyYWluJyBsaXN0ZW5lci5cbmZ1bmN0aW9uIG9ud3JpdGVEcmFpbihzdHJlYW0sIHN0YXRlKSB7XG4gIGlmIChzdGF0ZS5sZW5ndGggPT09IDAgJiYgc3RhdGUubmVlZERyYWluKSB7XG4gICAgc3RhdGUubmVlZERyYWluID0gZmFsc2U7XG4gICAgc3RyZWFtLmVtaXQoJ2RyYWluJyk7XG4gIH1cbn1cblxuLy8gaWYgdGhlcmUncyBzb21ldGhpbmcgaW4gdGhlIGJ1ZmZlciB3YWl0aW5nLCB0aGVuIHByb2Nlc3MgaXRcbmZ1bmN0aW9uIGNsZWFyQnVmZmVyKHN0cmVhbSwgc3RhdGUpIHtcbiAgc3RhdGUuYnVmZmVyUHJvY2Vzc2luZyA9IHRydWU7XG4gIHZhciBlbnRyeSA9IHN0YXRlLmJ1ZmZlcmVkUmVxdWVzdDtcbiAgaWYgKHN0cmVhbS5fd3JpdGV2ICYmIGVudHJ5ICYmIGVudHJ5Lm5leHQpIHtcbiAgICAvLyBGYXN0IGNhc2UsIHdyaXRlIGV2ZXJ5dGhpbmcgdXNpbmcgX3dyaXRldigpXG4gICAgdmFyIGwgPSBzdGF0ZS5idWZmZXJlZFJlcXVlc3RDb3VudDtcbiAgICB2YXIgYnVmZmVyID0gbmV3IEFycmF5KGwpO1xuICAgIHZhciBob2xkZXIgPSBzdGF0ZS5jb3JrZWRSZXF1ZXN0c0ZyZWU7XG4gICAgaG9sZGVyLmVudHJ5ID0gZW50cnk7XG4gICAgdmFyIGNvdW50ID0gMDtcbiAgICB2YXIgYWxsQnVmZmVycyA9IHRydWU7XG4gICAgd2hpbGUgKGVudHJ5KSB7XG4gICAgICBidWZmZXJbY291bnRdID0gZW50cnk7XG4gICAgICBpZiAoIWVudHJ5LmlzQnVmKSBhbGxCdWZmZXJzID0gZmFsc2U7XG4gICAgICBlbnRyeSA9IGVudHJ5Lm5leHQ7XG4gICAgICBjb3VudCArPSAxO1xuICAgIH1cbiAgICBidWZmZXIuYWxsQnVmZmVycyA9IGFsbEJ1ZmZlcnM7XG4gICAgZG9Xcml0ZShzdHJlYW0sIHN0YXRlLCB0cnVlLCBzdGF0ZS5sZW5ndGgsIGJ1ZmZlciwgJycsIGhvbGRlci5maW5pc2gpO1xuXG4gICAgLy8gZG9Xcml0ZSBpcyBhbG1vc3QgYWx3YXlzIGFzeW5jLCBkZWZlciB0aGVzZSB0byBzYXZlIGEgYml0IG9mIHRpbWVcbiAgICAvLyBhcyB0aGUgaG90IHBhdGggZW5kcyB3aXRoIGRvV3JpdGVcbiAgICBzdGF0ZS5wZW5kaW5nY2IrKztcbiAgICBzdGF0ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0ID0gbnVsbDtcbiAgICBpZiAoaG9sZGVyLm5leHQpIHtcbiAgICAgIHN0YXRlLmNvcmtlZFJlcXVlc3RzRnJlZSA9IGhvbGRlci5uZXh0O1xuICAgICAgaG9sZGVyLm5leHQgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZS5jb3JrZWRSZXF1ZXN0c0ZyZWUgPSBuZXcgQ29ya2VkUmVxdWVzdChzdGF0ZSk7XG4gICAgfVxuICAgIHN0YXRlLmJ1ZmZlcmVkUmVxdWVzdENvdW50ID0gMDtcbiAgfSBlbHNlIHtcbiAgICAvLyBTbG93IGNhc2UsIHdyaXRlIGNodW5rcyBvbmUtYnktb25lXG4gICAgd2hpbGUgKGVudHJ5KSB7XG4gICAgICB2YXIgY2h1bmsgPSBlbnRyeS5jaHVuaztcbiAgICAgIHZhciBlbmNvZGluZyA9IGVudHJ5LmVuY29kaW5nO1xuICAgICAgdmFyIGNiID0gZW50cnkuY2FsbGJhY2s7XG4gICAgICB2YXIgbGVuID0gc3RhdGUub2JqZWN0TW9kZSA/IDEgOiBjaHVuay5sZW5ndGg7XG4gICAgICBkb1dyaXRlKHN0cmVhbSwgc3RhdGUsIGZhbHNlLCBsZW4sIGNodW5rLCBlbmNvZGluZywgY2IpO1xuICAgICAgZW50cnkgPSBlbnRyeS5uZXh0O1xuICAgICAgc3RhdGUuYnVmZmVyZWRSZXF1ZXN0Q291bnQtLTtcbiAgICAgIC8vIGlmIHdlIGRpZG4ndCBjYWxsIHRoZSBvbndyaXRlIGltbWVkaWF0ZWx5LCB0aGVuXG4gICAgICAvLyBpdCBtZWFucyB0aGF0IHdlIG5lZWQgdG8gd2FpdCB1bnRpbCBpdCBkb2VzLlxuICAgICAgLy8gYWxzbywgdGhhdCBtZWFucyB0aGF0IHRoZSBjaHVuayBhbmQgY2IgYXJlIGN1cnJlbnRseVxuICAgICAgLy8gYmVpbmcgcHJvY2Vzc2VkLCBzbyBtb3ZlIHRoZSBidWZmZXIgY291bnRlciBwYXN0IHRoZW0uXG4gICAgICBpZiAoc3RhdGUud3JpdGluZykge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGVudHJ5ID09PSBudWxsKSBzdGF0ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0ID0gbnVsbDtcbiAgfVxuICBzdGF0ZS5idWZmZXJlZFJlcXVlc3QgPSBlbnRyeTtcbiAgc3RhdGUuYnVmZmVyUHJvY2Vzc2luZyA9IGZhbHNlO1xufVxuV3JpdGFibGUucHJvdG90eXBlLl93cml0ZSA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIGNiKG5ldyBFUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCgnX3dyaXRlKCknKSk7XG59O1xuV3JpdGFibGUucHJvdG90eXBlLl93cml0ZXYgPSBudWxsO1xuV3JpdGFibGUucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3dyaXRhYmxlU3RhdGU7XG4gIGlmICh0eXBlb2YgY2h1bmsgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjYiA9IGNodW5rO1xuICAgIGNodW5rID0gbnVsbDtcbiAgICBlbmNvZGluZyA9IG51bGw7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGVuY29kaW5nID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2IgPSBlbmNvZGluZztcbiAgICBlbmNvZGluZyA9IG51bGw7XG4gIH1cbiAgaWYgKGNodW5rICE9PSBudWxsICYmIGNodW5rICE9PSB1bmRlZmluZWQpIHRoaXMud3JpdGUoY2h1bmssIGVuY29kaW5nKTtcblxuICAvLyAuZW5kKCkgZnVsbHkgdW5jb3Jrc1xuICBpZiAoc3RhdGUuY29ya2VkKSB7XG4gICAgc3RhdGUuY29ya2VkID0gMTtcbiAgICB0aGlzLnVuY29yaygpO1xuICB9XG5cbiAgLy8gaWdub3JlIHVubmVjZXNzYXJ5IGVuZCgpIGNhbGxzLlxuICBpZiAoIXN0YXRlLmVuZGluZykgZW5kV3JpdGFibGUodGhpcywgc3RhdGUsIGNiKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KFdyaXRhYmxlLnByb3RvdHlwZSwgJ3dyaXRhYmxlTGVuZ3RoJywge1xuICAvLyBtYWtpbmcgaXQgZXhwbGljaXQgdGhpcyBwcm9wZXJ0eSBpcyBub3QgZW51bWVyYWJsZVxuICAvLyBiZWNhdXNlIG90aGVyd2lzZSBzb21lIHByb3RvdHlwZSBtYW5pcHVsYXRpb24gaW5cbiAgLy8gdXNlcmxhbmQgd2lsbCBmYWlsXG4gIGVudW1lcmFibGU6IGZhbHNlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5sZW5ndGg7XG4gIH1cbn0pO1xuZnVuY3Rpb24gbmVlZEZpbmlzaChzdGF0ZSkge1xuICByZXR1cm4gc3RhdGUuZW5kaW5nICYmIHN0YXRlLmxlbmd0aCA9PT0gMCAmJiBzdGF0ZS5idWZmZXJlZFJlcXVlc3QgPT09IG51bGwgJiYgIXN0YXRlLmZpbmlzaGVkICYmICFzdGF0ZS53cml0aW5nO1xufVxuZnVuY3Rpb24gY2FsbEZpbmFsKHN0cmVhbSwgc3RhdGUpIHtcbiAgc3RyZWFtLl9maW5hbChmdW5jdGlvbiAoZXJyKSB7XG4gICAgc3RhdGUucGVuZGluZ2NiLS07XG4gICAgaWYgKGVycikge1xuICAgICAgZXJyb3JPckRlc3Ryb3koc3RyZWFtLCBlcnIpO1xuICAgIH1cbiAgICBzdGF0ZS5wcmVmaW5pc2hlZCA9IHRydWU7XG4gICAgc3RyZWFtLmVtaXQoJ3ByZWZpbmlzaCcpO1xuICAgIGZpbmlzaE1heWJlKHN0cmVhbSwgc3RhdGUpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIHByZWZpbmlzaChzdHJlYW0sIHN0YXRlKSB7XG4gIGlmICghc3RhdGUucHJlZmluaXNoZWQgJiYgIXN0YXRlLmZpbmFsQ2FsbGVkKSB7XG4gICAgaWYgKHR5cGVvZiBzdHJlYW0uX2ZpbmFsID09PSAnZnVuY3Rpb24nICYmICFzdGF0ZS5kZXN0cm95ZWQpIHtcbiAgICAgIHN0YXRlLnBlbmRpbmdjYisrO1xuICAgICAgc3RhdGUuZmluYWxDYWxsZWQgPSB0cnVlO1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhjYWxsRmluYWwsIHN0cmVhbSwgc3RhdGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZS5wcmVmaW5pc2hlZCA9IHRydWU7XG4gICAgICBzdHJlYW0uZW1pdCgncHJlZmluaXNoJyk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBmaW5pc2hNYXliZShzdHJlYW0sIHN0YXRlKSB7XG4gIHZhciBuZWVkID0gbmVlZEZpbmlzaChzdGF0ZSk7XG4gIGlmIChuZWVkKSB7XG4gICAgcHJlZmluaXNoKHN0cmVhbSwgc3RhdGUpO1xuICAgIGlmIChzdGF0ZS5wZW5kaW5nY2IgPT09IDApIHtcbiAgICAgIHN0YXRlLmZpbmlzaGVkID0gdHJ1ZTtcbiAgICAgIHN0cmVhbS5lbWl0KCdmaW5pc2gnKTtcbiAgICAgIGlmIChzdGF0ZS5hdXRvRGVzdHJveSkge1xuICAgICAgICAvLyBJbiBjYXNlIG9mIGR1cGxleCBzdHJlYW1zIHdlIG5lZWQgYSB3YXkgdG8gZGV0ZWN0XG4gICAgICAgIC8vIGlmIHRoZSByZWFkYWJsZSBzaWRlIGlzIHJlYWR5IGZvciBhdXRvRGVzdHJveSBhcyB3ZWxsXG4gICAgICAgIHZhciByU3RhdGUgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGU7XG4gICAgICAgIGlmICghclN0YXRlIHx8IHJTdGF0ZS5hdXRvRGVzdHJveSAmJiByU3RhdGUuZW5kRW1pdHRlZCkge1xuICAgICAgICAgIHN0cmVhbS5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5lZWQ7XG59XG5mdW5jdGlvbiBlbmRXcml0YWJsZShzdHJlYW0sIHN0YXRlLCBjYikge1xuICBzdGF0ZS5lbmRpbmcgPSB0cnVlO1xuICBmaW5pc2hNYXliZShzdHJlYW0sIHN0YXRlKTtcbiAgaWYgKGNiKSB7XG4gICAgaWYgKHN0YXRlLmZpbmlzaGVkKSBwcm9jZXNzLm5leHRUaWNrKGNiKTtlbHNlIHN0cmVhbS5vbmNlKCdmaW5pc2gnLCBjYik7XG4gIH1cbiAgc3RhdGUuZW5kZWQgPSB0cnVlO1xuICBzdHJlYW0ud3JpdGFibGUgPSBmYWxzZTtcbn1cbmZ1bmN0aW9uIG9uQ29ya2VkRmluaXNoKGNvcmtSZXEsIHN0YXRlLCBlcnIpIHtcbiAgdmFyIGVudHJ5ID0gY29ya1JlcS5lbnRyeTtcbiAgY29ya1JlcS5lbnRyeSA9IG51bGw7XG4gIHdoaWxlIChlbnRyeSkge1xuICAgIHZhciBjYiA9IGVudHJ5LmNhbGxiYWNrO1xuICAgIHN0YXRlLnBlbmRpbmdjYi0tO1xuICAgIGNiKGVycik7XG4gICAgZW50cnkgPSBlbnRyeS5uZXh0O1xuICB9XG5cbiAgLy8gcmV1c2UgdGhlIGZyZWUgY29ya1JlcS5cbiAgc3RhdGUuY29ya2VkUmVxdWVzdHNGcmVlLm5leHQgPSBjb3JrUmVxO1xufVxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFdyaXRhYmxlLnByb3RvdHlwZSwgJ2Rlc3Ryb3llZCcsIHtcbiAgLy8gbWFraW5nIGl0IGV4cGxpY2l0IHRoaXMgcHJvcGVydHkgaXMgbm90IGVudW1lcmFibGVcbiAgLy8gYmVjYXVzZSBvdGhlcndpc2Ugc29tZSBwcm90b3R5cGUgbWFuaXB1bGF0aW9uIGluXG4gIC8vIHVzZXJsYW5kIHdpbGwgZmFpbFxuICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgaWYgKHRoaXMuX3dyaXRhYmxlU3RhdGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ7XG4gIH0sXG4gIHNldDogZnVuY3Rpb24gc2V0KHZhbHVlKSB7XG4gICAgLy8gd2UgaWdub3JlIHRoZSB2YWx1ZSBpZiB0aGUgc3RyZWFtXG4gICAgLy8gaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkIHlldFxuICAgIGlmICghdGhpcy5fd3JpdGFibGVTdGF0ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIHRoZSB1c2VyIGlzIGV4cGxpY2l0bHlcbiAgICAvLyBtYW5hZ2luZyBkZXN0cm95ZWRcbiAgICB0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZCA9IHZhbHVlO1xuICB9XG59KTtcbldyaXRhYmxlLnByb3RvdHlwZS5kZXN0cm95ID0gZGVzdHJveUltcGwuZGVzdHJveTtcbldyaXRhYmxlLnByb3RvdHlwZS5fdW5kZXN0cm95ID0gZGVzdHJveUltcGwudW5kZXN0cm95O1xuV3JpdGFibGUucHJvdG90eXBlLl9kZXN0cm95ID0gZnVuY3Rpb24gKGVyciwgY2IpIHtcbiAgY2IoZXJyKTtcbn07IiwgIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4vLyBhIGR1cGxleCBzdHJlYW0gaXMganVzdCBhIHN0cmVhbSB0aGF0IGlzIGJvdGggcmVhZGFibGUgYW5kIHdyaXRhYmxlLlxuLy8gU2luY2UgSlMgZG9lc24ndCBoYXZlIG11bHRpcGxlIHByb3RvdHlwYWwgaW5oZXJpdGFuY2UsIHRoaXMgY2xhc3Ncbi8vIHByb3RvdHlwYWxseSBpbmhlcml0cyBmcm9tIFJlYWRhYmxlLCBhbmQgdGhlbiBwYXJhc2l0aWNhbGx5IGZyb21cbi8vIFdyaXRhYmxlLlxuXG4ndXNlIHN0cmljdCc7XG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgb2JqZWN0S2V5cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgdmFyIGtleXMgPSBbXTtcbiAgZm9yICh2YXIga2V5IGluIG9iaikga2V5cy5wdXNoKGtleSk7XG4gIHJldHVybiBrZXlzO1xufTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG5tb2R1bGUuZXhwb3J0cyA9IER1cGxleDtcbnZhciBSZWFkYWJsZSA9IHJlcXVpcmUoJy4vX3N0cmVhbV9yZWFkYWJsZScpO1xudmFyIFdyaXRhYmxlID0gcmVxdWlyZSgnLi9fc3RyZWFtX3dyaXRhYmxlJyk7XG5yZXF1aXJlKCdpbmhlcml0cycpKER1cGxleCwgUmVhZGFibGUpO1xue1xuICAvLyBBbGxvdyB0aGUga2V5cyBhcnJheSB0byBiZSBHQydlZC5cbiAgdmFyIGtleXMgPSBvYmplY3RLZXlzKFdyaXRhYmxlLnByb3RvdHlwZSk7XG4gIGZvciAodmFyIHYgPSAwOyB2IDwga2V5cy5sZW5ndGg7IHYrKykge1xuICAgIHZhciBtZXRob2QgPSBrZXlzW3ZdO1xuICAgIGlmICghRHVwbGV4LnByb3RvdHlwZVttZXRob2RdKSBEdXBsZXgucHJvdG90eXBlW21ldGhvZF0gPSBXcml0YWJsZS5wcm90b3R5cGVbbWV0aG9kXTtcbiAgfVxufVxuZnVuY3Rpb24gRHVwbGV4KG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIER1cGxleCkpIHJldHVybiBuZXcgRHVwbGV4KG9wdGlvbnMpO1xuICBSZWFkYWJsZS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuICBXcml0YWJsZS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuICB0aGlzLmFsbG93SGFsZk9wZW4gPSB0cnVlO1xuICBpZiAob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zLnJlYWRhYmxlID09PSBmYWxzZSkgdGhpcy5yZWFkYWJsZSA9IGZhbHNlO1xuICAgIGlmIChvcHRpb25zLndyaXRhYmxlID09PSBmYWxzZSkgdGhpcy53cml0YWJsZSA9IGZhbHNlO1xuICAgIGlmIChvcHRpb25zLmFsbG93SGFsZk9wZW4gPT09IGZhbHNlKSB7XG4gICAgICB0aGlzLmFsbG93SGFsZk9wZW4gPSBmYWxzZTtcbiAgICAgIHRoaXMub25jZSgnZW5kJywgb25lbmQpO1xuICAgIH1cbiAgfVxufVxuT2JqZWN0LmRlZmluZVByb3BlcnR5KER1cGxleC5wcm90b3R5cGUsICd3cml0YWJsZUhpZ2hXYXRlck1hcmsnLCB7XG4gIC8vIG1ha2luZyBpdCBleHBsaWNpdCB0aGlzIHByb3BlcnR5IGlzIG5vdCBlbnVtZXJhYmxlXG4gIC8vIGJlY2F1c2Ugb3RoZXJ3aXNlIHNvbWUgcHJvdG90eXBlIG1hbmlwdWxhdGlvbiBpblxuICAvLyB1c2VybGFuZCB3aWxsIGZhaWxcbiAgZW51bWVyYWJsZTogZmFsc2UsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmhpZ2hXYXRlck1hcms7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KER1cGxleC5wcm90b3R5cGUsICd3cml0YWJsZUJ1ZmZlcicsIHtcbiAgLy8gbWFraW5nIGl0IGV4cGxpY2l0IHRoaXMgcHJvcGVydHkgaXMgbm90IGVudW1lcmFibGVcbiAgLy8gYmVjYXVzZSBvdGhlcndpc2Ugc29tZSBwcm90b3R5cGUgbWFuaXB1bGF0aW9uIGluXG4gIC8vIHVzZXJsYW5kIHdpbGwgZmFpbFxuICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUgJiYgdGhpcy5fd3JpdGFibGVTdGF0ZS5nZXRCdWZmZXIoKTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRHVwbGV4LnByb3RvdHlwZSwgJ3dyaXRhYmxlTGVuZ3RoJywge1xuICAvLyBtYWtpbmcgaXQgZXhwbGljaXQgdGhpcyBwcm9wZXJ0eSBpcyBub3QgZW51bWVyYWJsZVxuICAvLyBiZWNhdXNlIG90aGVyd2lzZSBzb21lIHByb3RvdHlwZSBtYW5pcHVsYXRpb24gaW5cbiAgLy8gdXNlcmxhbmQgd2lsbCBmYWlsXG4gIGVudW1lcmFibGU6IGZhbHNlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5sZW5ndGg7XG4gIH1cbn0pO1xuXG4vLyB0aGUgbm8taGFsZi1vcGVuIGVuZm9yY2VyXG5mdW5jdGlvbiBvbmVuZCgpIHtcbiAgLy8gSWYgdGhlIHdyaXRhYmxlIHNpZGUgZW5kZWQsIHRoZW4gd2UncmUgb2suXG4gIGlmICh0aGlzLl93cml0YWJsZVN0YXRlLmVuZGVkKSByZXR1cm47XG5cbiAgLy8gbm8gbW9yZSBkYXRhIGNhbiBiZSB3cml0dGVuLlxuICAvLyBCdXQgYWxsb3cgbW9yZSB3cml0ZXMgdG8gaGFwcGVuIGluIHRoaXMgdGljay5cbiAgcHJvY2Vzcy5uZXh0VGljayhvbkVuZE5ULCB0aGlzKTtcbn1cbmZ1bmN0aW9uIG9uRW5kTlQoc2VsZikge1xuICBzZWxmLmVuZCgpO1xufVxuT2JqZWN0LmRlZmluZVByb3BlcnR5KER1cGxleC5wcm90b3R5cGUsICdkZXN0cm95ZWQnLCB7XG4gIC8vIG1ha2luZyBpdCBleHBsaWNpdCB0aGlzIHByb3BlcnR5IGlzIG5vdCBlbnVtZXJhYmxlXG4gIC8vIGJlY2F1c2Ugb3RoZXJ3aXNlIHNvbWUgcHJvdG90eXBlIG1hbmlwdWxhdGlvbiBpblxuICAvLyB1c2VybGFuZCB3aWxsIGZhaWxcbiAgZW51bWVyYWJsZTogZmFsc2UsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIGlmICh0aGlzLl9yZWFkYWJsZVN0YXRlID09PSB1bmRlZmluZWQgfHwgdGhpcy5fd3JpdGFibGVTdGF0ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZCAmJiB0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZDtcbiAgfSxcbiAgc2V0OiBmdW5jdGlvbiBzZXQodmFsdWUpIHtcbiAgICAvLyB3ZSBpZ25vcmUgdGhlIHZhbHVlIGlmIHRoZSBzdHJlYW1cbiAgICAvLyBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQgeWV0XG4gICAgaWYgKHRoaXMuX3JlYWRhYmxlU3RhdGUgPT09IHVuZGVmaW5lZCB8fCB0aGlzLl93cml0YWJsZVN0YXRlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCB0aGUgdXNlciBpcyBleHBsaWNpdGx5XG4gICAgLy8gbWFuYWdpbmcgZGVzdHJveWVkXG4gICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQgPSB2YWx1ZTtcbiAgICB0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZCA9IHZhbHVlO1xuICB9XG59KTsiLCAiLyogZXNsaW50LWRpc2FibGUgbm9kZS9uby1kZXByZWNhdGVkLWFwaSAqL1xudmFyIGJ1ZmZlciA9IHJlcXVpcmUoJ2J1ZmZlcicpXG52YXIgQnVmZmVyID0gYnVmZmVyLkJ1ZmZlclxuXG4vLyBhbHRlcm5hdGl2ZSB0byB1c2luZyBPYmplY3Qua2V5cyBmb3Igb2xkIGJyb3dzZXJzXG5mdW5jdGlvbiBjb3B5UHJvcHMgKHNyYywgZHN0KSB7XG4gIGZvciAodmFyIGtleSBpbiBzcmMpIHtcbiAgICBkc3Rba2V5XSA9IHNyY1trZXldXG4gIH1cbn1cbmlmIChCdWZmZXIuZnJvbSAmJiBCdWZmZXIuYWxsb2MgJiYgQnVmZmVyLmFsbG9jVW5zYWZlICYmIEJ1ZmZlci5hbGxvY1Vuc2FmZVNsb3cpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBidWZmZXJcbn0gZWxzZSB7XG4gIC8vIENvcHkgcHJvcGVydGllcyBmcm9tIHJlcXVpcmUoJ2J1ZmZlcicpXG4gIGNvcHlQcm9wcyhidWZmZXIsIGV4cG9ydHMpXG4gIGV4cG9ydHMuQnVmZmVyID0gU2FmZUJ1ZmZlclxufVxuXG5mdW5jdGlvbiBTYWZlQnVmZmVyIChhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gQnVmZmVyKGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxufVxuXG4vLyBDb3B5IHN0YXRpYyBtZXRob2RzIGZyb20gQnVmZmVyXG5jb3B5UHJvcHMoQnVmZmVyLCBTYWZlQnVmZmVyKVxuXG5TYWZlQnVmZmVyLmZyb20gPSBmdW5jdGlvbiAoYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgaWYgKHR5cGVvZiBhcmcgPT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgbXVzdCBub3QgYmUgYSBudW1iZXInKVxuICB9XG4gIHJldHVybiBCdWZmZXIoYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG59XG5cblNhZmVCdWZmZXIuYWxsb2MgPSBmdW5jdGlvbiAoc2l6ZSwgZmlsbCwgZW5jb2RpbmcpIHtcbiAgaWYgKHR5cGVvZiBzaXplICE9PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IG11c3QgYmUgYSBudW1iZXInKVxuICB9XG4gIHZhciBidWYgPSBCdWZmZXIoc2l6ZSlcbiAgaWYgKGZpbGwgIT09IHVuZGVmaW5lZCkge1xuICAgIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09ICdzdHJpbmcnKSB7XG4gICAgICBidWYuZmlsbChmaWxsLCBlbmNvZGluZylcbiAgICB9IGVsc2Uge1xuICAgICAgYnVmLmZpbGwoZmlsbClcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgYnVmLmZpbGwoMClcbiAgfVxuICByZXR1cm4gYnVmXG59XG5cblNhZmVCdWZmZXIuYWxsb2NVbnNhZmUgPSBmdW5jdGlvbiAoc2l6ZSkge1xuICBpZiAodHlwZW9mIHNpemUgIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlcicpXG4gIH1cbiAgcmV0dXJuIEJ1ZmZlcihzaXplKVxufVxuXG5TYWZlQnVmZmVyLmFsbG9jVW5zYWZlU2xvdyA9IGZ1bmN0aW9uIChzaXplKSB7XG4gIGlmICh0eXBlb2Ygc2l6ZSAhPT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyJylcbiAgfVxuICByZXR1cm4gYnVmZmVyLlNsb3dCdWZmZXIoc2l6ZSlcbn1cbiIsICIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKjxyZXBsYWNlbWVudD4qL1xuXG52YXIgQnVmZmVyID0gcmVxdWlyZSgnc2FmZS1idWZmZXInKS5CdWZmZXI7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxudmFyIGlzRW5jb2RpbmcgPSBCdWZmZXIuaXNFbmNvZGluZyB8fCBmdW5jdGlvbiAoZW5jb2RpbmcpIHtcbiAgZW5jb2RpbmcgPSAnJyArIGVuY29kaW5nO1xuICBzd2l0Y2ggKGVuY29kaW5nICYmIGVuY29kaW5nLnRvTG93ZXJDYXNlKCkpIHtcbiAgICBjYXNlICdoZXgnOmNhc2UgJ3V0ZjgnOmNhc2UgJ3V0Zi04JzpjYXNlICdhc2NpaSc6Y2FzZSAnYmluYXJ5JzpjYXNlICdiYXNlNjQnOmNhc2UgJ3VjczInOmNhc2UgJ3Vjcy0yJzpjYXNlICd1dGYxNmxlJzpjYXNlICd1dGYtMTZsZSc6Y2FzZSAncmF3JzpcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIF9ub3JtYWxpemVFbmNvZGluZyhlbmMpIHtcbiAgaWYgKCFlbmMpIHJldHVybiAndXRmOCc7XG4gIHZhciByZXRyaWVkO1xuICB3aGlsZSAodHJ1ZSkge1xuICAgIHN3aXRjaCAoZW5jKSB7XG4gICAgICBjYXNlICd1dGY4JzpcbiAgICAgIGNhc2UgJ3V0Zi04JzpcbiAgICAgICAgcmV0dXJuICd1dGY4JztcbiAgICAgIGNhc2UgJ3VjczInOlxuICAgICAgY2FzZSAndWNzLTInOlxuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICAgIHJldHVybiAndXRmMTZsZSc7XG4gICAgICBjYXNlICdsYXRpbjEnOlxuICAgICAgY2FzZSAnYmluYXJ5JzpcbiAgICAgICAgcmV0dXJuICdsYXRpbjEnO1xuICAgICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgIGNhc2UgJ2FzY2lpJzpcbiAgICAgIGNhc2UgJ2hleCc6XG4gICAgICAgIHJldHVybiBlbmM7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAocmV0cmllZCkgcmV0dXJuOyAvLyB1bmRlZmluZWRcbiAgICAgICAgZW5jID0gKCcnICsgZW5jKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICByZXRyaWVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cbn07XG5cbi8vIERvIG5vdCBjYWNoZSBgQnVmZmVyLmlzRW5jb2RpbmdgIHdoZW4gY2hlY2tpbmcgZW5jb2RpbmcgbmFtZXMgYXMgc29tZVxuLy8gbW9kdWxlcyBtb25rZXktcGF0Y2ggaXQgdG8gc3VwcG9ydCBhZGRpdGlvbmFsIGVuY29kaW5nc1xuZnVuY3Rpb24gbm9ybWFsaXplRW5jb2RpbmcoZW5jKSB7XG4gIHZhciBuZW5jID0gX25vcm1hbGl6ZUVuY29kaW5nKGVuYyk7XG4gIGlmICh0eXBlb2YgbmVuYyAhPT0gJ3N0cmluZycgJiYgKEJ1ZmZlci5pc0VuY29kaW5nID09PSBpc0VuY29kaW5nIHx8ICFpc0VuY29kaW5nKGVuYykpKSB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmMpO1xuICByZXR1cm4gbmVuYyB8fCBlbmM7XG59XG5cbi8vIFN0cmluZ0RlY29kZXIgcHJvdmlkZXMgYW4gaW50ZXJmYWNlIGZvciBlZmZpY2llbnRseSBzcGxpdHRpbmcgYSBzZXJpZXMgb2Zcbi8vIGJ1ZmZlcnMgaW50byBhIHNlcmllcyBvZiBKUyBzdHJpbmdzIHdpdGhvdXQgYnJlYWtpbmcgYXBhcnQgbXVsdGktYnl0ZVxuLy8gY2hhcmFjdGVycy5cbmV4cG9ydHMuU3RyaW5nRGVjb2RlciA9IFN0cmluZ0RlY29kZXI7XG5mdW5jdGlvbiBTdHJpbmdEZWNvZGVyKGVuY29kaW5nKSB7XG4gIHRoaXMuZW5jb2RpbmcgPSBub3JtYWxpemVFbmNvZGluZyhlbmNvZGluZyk7XG4gIHZhciBuYjtcbiAgc3dpdGNoICh0aGlzLmVuY29kaW5nKSB7XG4gICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICB0aGlzLnRleHQgPSB1dGYxNlRleHQ7XG4gICAgICB0aGlzLmVuZCA9IHV0ZjE2RW5kO1xuICAgICAgbmIgPSA0O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAndXRmOCc6XG4gICAgICB0aGlzLmZpbGxMYXN0ID0gdXRmOEZpbGxMYXN0O1xuICAgICAgbmIgPSA0O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgIHRoaXMudGV4dCA9IGJhc2U2NFRleHQ7XG4gICAgICB0aGlzLmVuZCA9IGJhc2U2NEVuZDtcbiAgICAgIG5iID0gMztcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aGlzLndyaXRlID0gc2ltcGxlV3JpdGU7XG4gICAgICB0aGlzLmVuZCA9IHNpbXBsZUVuZDtcbiAgICAgIHJldHVybjtcbiAgfVxuICB0aGlzLmxhc3ROZWVkID0gMDtcbiAgdGhpcy5sYXN0VG90YWwgPSAwO1xuICB0aGlzLmxhc3RDaGFyID0gQnVmZmVyLmFsbG9jVW5zYWZlKG5iKTtcbn1cblxuU3RyaW5nRGVjb2Rlci5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbiAoYnVmKSB7XG4gIGlmIChidWYubGVuZ3RoID09PSAwKSByZXR1cm4gJyc7XG4gIHZhciByO1xuICB2YXIgaTtcbiAgaWYgKHRoaXMubGFzdE5lZWQpIHtcbiAgICByID0gdGhpcy5maWxsTGFzdChidWYpO1xuICAgIGlmIChyID09PSB1bmRlZmluZWQpIHJldHVybiAnJztcbiAgICBpID0gdGhpcy5sYXN0TmVlZDtcbiAgICB0aGlzLmxhc3ROZWVkID0gMDtcbiAgfSBlbHNlIHtcbiAgICBpID0gMDtcbiAgfVxuICBpZiAoaSA8IGJ1Zi5sZW5ndGgpIHJldHVybiByID8gciArIHRoaXMudGV4dChidWYsIGkpIDogdGhpcy50ZXh0KGJ1ZiwgaSk7XG4gIHJldHVybiByIHx8ICcnO1xufTtcblxuU3RyaW5nRGVjb2Rlci5wcm90b3R5cGUuZW5kID0gdXRmOEVuZDtcblxuLy8gUmV0dXJucyBvbmx5IGNvbXBsZXRlIGNoYXJhY3RlcnMgaW4gYSBCdWZmZXJcblN0cmluZ0RlY29kZXIucHJvdG90eXBlLnRleHQgPSB1dGY4VGV4dDtcblxuLy8gQXR0ZW1wdHMgdG8gY29tcGxldGUgYSBwYXJ0aWFsIG5vbi1VVEYtOCBjaGFyYWN0ZXIgdXNpbmcgYnl0ZXMgZnJvbSBhIEJ1ZmZlclxuU3RyaW5nRGVjb2Rlci5wcm90b3R5cGUuZmlsbExhc3QgPSBmdW5jdGlvbiAoYnVmKSB7XG4gIGlmICh0aGlzLmxhc3ROZWVkIDw9IGJ1Zi5sZW5ndGgpIHtcbiAgICBidWYuY29weSh0aGlzLmxhc3RDaGFyLCB0aGlzLmxhc3RUb3RhbCAtIHRoaXMubGFzdE5lZWQsIDAsIHRoaXMubGFzdE5lZWQpO1xuICAgIHJldHVybiB0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcsIDAsIHRoaXMubGFzdFRvdGFsKTtcbiAgfVxuICBidWYuY29weSh0aGlzLmxhc3RDaGFyLCB0aGlzLmxhc3RUb3RhbCAtIHRoaXMubGFzdE5lZWQsIDAsIGJ1Zi5sZW5ndGgpO1xuICB0aGlzLmxhc3ROZWVkIC09IGJ1Zi5sZW5ndGg7XG59O1xuXG4vLyBDaGVja3MgdGhlIHR5cGUgb2YgYSBVVEYtOCBieXRlLCB3aGV0aGVyIGl0J3MgQVNDSUksIGEgbGVhZGluZyBieXRlLCBvciBhXG4vLyBjb250aW51YXRpb24gYnl0ZS4gSWYgYW4gaW52YWxpZCBieXRlIGlzIGRldGVjdGVkLCAtMiBpcyByZXR1cm5lZC5cbmZ1bmN0aW9uIHV0ZjhDaGVja0J5dGUoYnl0ZSkge1xuICBpZiAoYnl0ZSA8PSAweDdGKSByZXR1cm4gMDtlbHNlIGlmIChieXRlID4+IDUgPT09IDB4MDYpIHJldHVybiAyO2Vsc2UgaWYgKGJ5dGUgPj4gNCA9PT0gMHgwRSkgcmV0dXJuIDM7ZWxzZSBpZiAoYnl0ZSA+PiAzID09PSAweDFFKSByZXR1cm4gNDtcbiAgcmV0dXJuIGJ5dGUgPj4gNiA9PT0gMHgwMiA/IC0xIDogLTI7XG59XG5cbi8vIENoZWNrcyBhdCBtb3N0IDMgYnl0ZXMgYXQgdGhlIGVuZCBvZiBhIEJ1ZmZlciBpbiBvcmRlciB0byBkZXRlY3QgYW5cbi8vIGluY29tcGxldGUgbXVsdGktYnl0ZSBVVEYtOCBjaGFyYWN0ZXIuIFRoZSB0b3RhbCBudW1iZXIgb2YgYnl0ZXMgKDIsIDMsIG9yIDQpXG4vLyBuZWVkZWQgdG8gY29tcGxldGUgdGhlIFVURi04IGNoYXJhY3RlciAoaWYgYXBwbGljYWJsZSkgYXJlIHJldHVybmVkLlxuZnVuY3Rpb24gdXRmOENoZWNrSW5jb21wbGV0ZShzZWxmLCBidWYsIGkpIHtcbiAgdmFyIGogPSBidWYubGVuZ3RoIC0gMTtcbiAgaWYgKGogPCBpKSByZXR1cm4gMDtcbiAgdmFyIG5iID0gdXRmOENoZWNrQnl0ZShidWZbal0pO1xuICBpZiAobmIgPj0gMCkge1xuICAgIGlmIChuYiA+IDApIHNlbGYubGFzdE5lZWQgPSBuYiAtIDE7XG4gICAgcmV0dXJuIG5iO1xuICB9XG4gIGlmICgtLWogPCBpIHx8IG5iID09PSAtMikgcmV0dXJuIDA7XG4gIG5iID0gdXRmOENoZWNrQnl0ZShidWZbal0pO1xuICBpZiAobmIgPj0gMCkge1xuICAgIGlmIChuYiA+IDApIHNlbGYubGFzdE5lZWQgPSBuYiAtIDI7XG4gICAgcmV0dXJuIG5iO1xuICB9XG4gIGlmICgtLWogPCBpIHx8IG5iID09PSAtMikgcmV0dXJuIDA7XG4gIG5iID0gdXRmOENoZWNrQnl0ZShidWZbal0pO1xuICBpZiAobmIgPj0gMCkge1xuICAgIGlmIChuYiA+IDApIHtcbiAgICAgIGlmIChuYiA9PT0gMikgbmIgPSAwO2Vsc2Ugc2VsZi5sYXN0TmVlZCA9IG5iIC0gMztcbiAgICB9XG4gICAgcmV0dXJuIG5iO1xuICB9XG4gIHJldHVybiAwO1xufVxuXG4vLyBWYWxpZGF0ZXMgYXMgbWFueSBjb250aW51YXRpb24gYnl0ZXMgZm9yIGEgbXVsdGktYnl0ZSBVVEYtOCBjaGFyYWN0ZXIgYXNcbi8vIG5lZWRlZCBvciBhcmUgYXZhaWxhYmxlLiBJZiB3ZSBzZWUgYSBub24tY29udGludWF0aW9uIGJ5dGUgd2hlcmUgd2UgZXhwZWN0XG4vLyBvbmUsIHdlIFwicmVwbGFjZVwiIHRoZSB2YWxpZGF0ZWQgY29udGludWF0aW9uIGJ5dGVzIHdlJ3ZlIHNlZW4gc28gZmFyIHdpdGhcbi8vIGEgc2luZ2xlIFVURi04IHJlcGxhY2VtZW50IGNoYXJhY3RlciAoJ1xcdWZmZmQnKSwgdG8gbWF0Y2ggdjgncyBVVEYtOCBkZWNvZGluZ1xuLy8gYmVoYXZpb3IuIFRoZSBjb250aW51YXRpb24gYnl0ZSBjaGVjayBpcyBpbmNsdWRlZCB0aHJlZSB0aW1lcyBpbiB0aGUgY2FzZVxuLy8gd2hlcmUgYWxsIG9mIHRoZSBjb250aW51YXRpb24gYnl0ZXMgZm9yIGEgY2hhcmFjdGVyIGV4aXN0IGluIHRoZSBzYW1lIGJ1ZmZlci5cbi8vIEl0IGlzIGFsc28gZG9uZSB0aGlzIHdheSBhcyBhIHNsaWdodCBwZXJmb3JtYW5jZSBpbmNyZWFzZSBpbnN0ZWFkIG9mIHVzaW5nIGFcbi8vIGxvb3AuXG5mdW5jdGlvbiB1dGY4Q2hlY2tFeHRyYUJ5dGVzKHNlbGYsIGJ1ZiwgcCkge1xuICBpZiAoKGJ1ZlswXSAmIDB4QzApICE9PSAweDgwKSB7XG4gICAgc2VsZi5sYXN0TmVlZCA9IDA7XG4gICAgcmV0dXJuICdcXHVmZmZkJztcbiAgfVxuICBpZiAoc2VsZi5sYXN0TmVlZCA+IDEgJiYgYnVmLmxlbmd0aCA+IDEpIHtcbiAgICBpZiAoKGJ1ZlsxXSAmIDB4QzApICE9PSAweDgwKSB7XG4gICAgICBzZWxmLmxhc3ROZWVkID0gMTtcbiAgICAgIHJldHVybiAnXFx1ZmZmZCc7XG4gICAgfVxuICAgIGlmIChzZWxmLmxhc3ROZWVkID4gMiAmJiBidWYubGVuZ3RoID4gMikge1xuICAgICAgaWYgKChidWZbMl0gJiAweEMwKSAhPT0gMHg4MCkge1xuICAgICAgICBzZWxmLmxhc3ROZWVkID0gMjtcbiAgICAgICAgcmV0dXJuICdcXHVmZmZkJztcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLy8gQXR0ZW1wdHMgdG8gY29tcGxldGUgYSBtdWx0aS1ieXRlIFVURi04IGNoYXJhY3RlciB1c2luZyBieXRlcyBmcm9tIGEgQnVmZmVyLlxuZnVuY3Rpb24gdXRmOEZpbGxMYXN0KGJ1Zikge1xuICB2YXIgcCA9IHRoaXMubGFzdFRvdGFsIC0gdGhpcy5sYXN0TmVlZDtcbiAgdmFyIHIgPSB1dGY4Q2hlY2tFeHRyYUJ5dGVzKHRoaXMsIGJ1ZiwgcCk7XG4gIGlmIChyICE9PSB1bmRlZmluZWQpIHJldHVybiByO1xuICBpZiAodGhpcy5sYXN0TmVlZCA8PSBidWYubGVuZ3RoKSB7XG4gICAgYnVmLmNvcHkodGhpcy5sYXN0Q2hhciwgcCwgMCwgdGhpcy5sYXN0TmVlZCk7XG4gICAgcmV0dXJuIHRoaXMubGFzdENoYXIudG9TdHJpbmcodGhpcy5lbmNvZGluZywgMCwgdGhpcy5sYXN0VG90YWwpO1xuICB9XG4gIGJ1Zi5jb3B5KHRoaXMubGFzdENoYXIsIHAsIDAsIGJ1Zi5sZW5ndGgpO1xuICB0aGlzLmxhc3ROZWVkIC09IGJ1Zi5sZW5ndGg7XG59XG5cbi8vIFJldHVybnMgYWxsIGNvbXBsZXRlIFVURi04IGNoYXJhY3RlcnMgaW4gYSBCdWZmZXIuIElmIHRoZSBCdWZmZXIgZW5kZWQgb24gYVxuLy8gcGFydGlhbCBjaGFyYWN0ZXIsIHRoZSBjaGFyYWN0ZXIncyBieXRlcyBhcmUgYnVmZmVyZWQgdW50aWwgdGhlIHJlcXVpcmVkXG4vLyBudW1iZXIgb2YgYnl0ZXMgYXJlIGF2YWlsYWJsZS5cbmZ1bmN0aW9uIHV0ZjhUZXh0KGJ1ZiwgaSkge1xuICB2YXIgdG90YWwgPSB1dGY4Q2hlY2tJbmNvbXBsZXRlKHRoaXMsIGJ1ZiwgaSk7XG4gIGlmICghdGhpcy5sYXN0TmVlZCkgcmV0dXJuIGJ1Zi50b1N0cmluZygndXRmOCcsIGkpO1xuICB0aGlzLmxhc3RUb3RhbCA9IHRvdGFsO1xuICB2YXIgZW5kID0gYnVmLmxlbmd0aCAtICh0b3RhbCAtIHRoaXMubGFzdE5lZWQpO1xuICBidWYuY29weSh0aGlzLmxhc3RDaGFyLCAwLCBlbmQpO1xuICByZXR1cm4gYnVmLnRvU3RyaW5nKCd1dGY4JywgaSwgZW5kKTtcbn1cblxuLy8gRm9yIFVURi04LCBhIHJlcGxhY2VtZW50IGNoYXJhY3RlciBpcyBhZGRlZCB3aGVuIGVuZGluZyBvbiBhIHBhcnRpYWxcbi8vIGNoYXJhY3Rlci5cbmZ1bmN0aW9uIHV0ZjhFbmQoYnVmKSB7XG4gIHZhciByID0gYnVmICYmIGJ1Zi5sZW5ndGggPyB0aGlzLndyaXRlKGJ1ZikgOiAnJztcbiAgaWYgKHRoaXMubGFzdE5lZWQpIHJldHVybiByICsgJ1xcdWZmZmQnO1xuICByZXR1cm4gcjtcbn1cblxuLy8gVVRGLTE2TEUgdHlwaWNhbGx5IG5lZWRzIHR3byBieXRlcyBwZXIgY2hhcmFjdGVyLCBidXQgZXZlbiBpZiB3ZSBoYXZlIGFuIGV2ZW5cbi8vIG51bWJlciBvZiBieXRlcyBhdmFpbGFibGUsIHdlIG5lZWQgdG8gY2hlY2sgaWYgd2UgZW5kIG9uIGEgbGVhZGluZy9oaWdoXG4vLyBzdXJyb2dhdGUuIEluIHRoYXQgY2FzZSwgd2UgbmVlZCB0byB3YWl0IGZvciB0aGUgbmV4dCB0d28gYnl0ZXMgaW4gb3JkZXIgdG9cbi8vIGRlY29kZSB0aGUgbGFzdCBjaGFyYWN0ZXIgcHJvcGVybHkuXG5mdW5jdGlvbiB1dGYxNlRleHQoYnVmLCBpKSB7XG4gIGlmICgoYnVmLmxlbmd0aCAtIGkpICUgMiA9PT0gMCkge1xuICAgIHZhciByID0gYnVmLnRvU3RyaW5nKCd1dGYxNmxlJywgaSk7XG4gICAgaWYgKHIpIHtcbiAgICAgIHZhciBjID0gci5jaGFyQ29kZUF0KHIubGVuZ3RoIC0gMSk7XG4gICAgICBpZiAoYyA+PSAweEQ4MDAgJiYgYyA8PSAweERCRkYpIHtcbiAgICAgICAgdGhpcy5sYXN0TmVlZCA9IDI7XG4gICAgICAgIHRoaXMubGFzdFRvdGFsID0gNDtcbiAgICAgICAgdGhpcy5sYXN0Q2hhclswXSA9IGJ1ZltidWYubGVuZ3RoIC0gMl07XG4gICAgICAgIHRoaXMubGFzdENoYXJbMV0gPSBidWZbYnVmLmxlbmd0aCAtIDFdO1xuICAgICAgICByZXR1cm4gci5zbGljZSgwLCAtMSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByO1xuICB9XG4gIHRoaXMubGFzdE5lZWQgPSAxO1xuICB0aGlzLmxhc3RUb3RhbCA9IDI7XG4gIHRoaXMubGFzdENoYXJbMF0gPSBidWZbYnVmLmxlbmd0aCAtIDFdO1xuICByZXR1cm4gYnVmLnRvU3RyaW5nKCd1dGYxNmxlJywgaSwgYnVmLmxlbmd0aCAtIDEpO1xufVxuXG4vLyBGb3IgVVRGLTE2TEUgd2UgZG8gbm90IGV4cGxpY2l0bHkgYXBwZW5kIHNwZWNpYWwgcmVwbGFjZW1lbnQgY2hhcmFjdGVycyBpZiB3ZVxuLy8gZW5kIG9uIGEgcGFydGlhbCBjaGFyYWN0ZXIsIHdlIHNpbXBseSBsZXQgdjggaGFuZGxlIHRoYXQuXG5mdW5jdGlvbiB1dGYxNkVuZChidWYpIHtcbiAgdmFyIHIgPSBidWYgJiYgYnVmLmxlbmd0aCA/IHRoaXMud3JpdGUoYnVmKSA6ICcnO1xuICBpZiAodGhpcy5sYXN0TmVlZCkge1xuICAgIHZhciBlbmQgPSB0aGlzLmxhc3RUb3RhbCAtIHRoaXMubGFzdE5lZWQ7XG4gICAgcmV0dXJuIHIgKyB0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKCd1dGYxNmxlJywgMCwgZW5kKTtcbiAgfVxuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gYmFzZTY0VGV4dChidWYsIGkpIHtcbiAgdmFyIG4gPSAoYnVmLmxlbmd0aCAtIGkpICUgMztcbiAgaWYgKG4gPT09IDApIHJldHVybiBidWYudG9TdHJpbmcoJ2Jhc2U2NCcsIGkpO1xuICB0aGlzLmxhc3ROZWVkID0gMyAtIG47XG4gIHRoaXMubGFzdFRvdGFsID0gMztcbiAgaWYgKG4gPT09IDEpIHtcbiAgICB0aGlzLmxhc3RDaGFyWzBdID0gYnVmW2J1Zi5sZW5ndGggLSAxXTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLmxhc3RDaGFyWzBdID0gYnVmW2J1Zi5sZW5ndGggLSAyXTtcbiAgICB0aGlzLmxhc3RDaGFyWzFdID0gYnVmW2J1Zi5sZW5ndGggLSAxXTtcbiAgfVxuICByZXR1cm4gYnVmLnRvU3RyaW5nKCdiYXNlNjQnLCBpLCBidWYubGVuZ3RoIC0gbik7XG59XG5cbmZ1bmN0aW9uIGJhc2U2NEVuZChidWYpIHtcbiAgdmFyIHIgPSBidWYgJiYgYnVmLmxlbmd0aCA/IHRoaXMud3JpdGUoYnVmKSA6ICcnO1xuICBpZiAodGhpcy5sYXN0TmVlZCkgcmV0dXJuIHIgKyB0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKCdiYXNlNjQnLCAwLCAzIC0gdGhpcy5sYXN0TmVlZCk7XG4gIHJldHVybiByO1xufVxuXG4vLyBQYXNzIGJ5dGVzIG9uIHRocm91Z2ggZm9yIHNpbmdsZS1ieXRlIGVuY29kaW5ncyAoZS5nLiBhc2NpaSwgbGF0aW4xLCBoZXgpXG5mdW5jdGlvbiBzaW1wbGVXcml0ZShidWYpIHtcbiAgcmV0dXJuIGJ1Zi50b1N0cmluZyh0aGlzLmVuY29kaW5nKTtcbn1cblxuZnVuY3Rpb24gc2ltcGxlRW5kKGJ1Zikge1xuICByZXR1cm4gYnVmICYmIGJ1Zi5sZW5ndGggPyB0aGlzLndyaXRlKGJ1ZikgOiAnJztcbn0iLCAiLy8gUG9ydGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL21hZmludG9zaC9lbmQtb2Ytc3RyZWFtIHdpdGhcbi8vIHBlcm1pc3Npb24gZnJvbSB0aGUgYXV0aG9yLCBNYXRoaWFzIEJ1dXMgKEBtYWZpbnRvc2gpLlxuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBFUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRSA9IHJlcXVpcmUoJy4uLy4uLy4uL2Vycm9ycycpLmNvZGVzLkVSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFO1xuZnVuY3Rpb24gb25jZShjYWxsYmFjaykge1xuICB2YXIgY2FsbGVkID0gZmFsc2U7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGNhbGxlZCkgcmV0dXJuO1xuICAgIGNhbGxlZCA9IHRydWU7XG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cbiAgICBjYWxsYmFjay5hcHBseSh0aGlzLCBhcmdzKTtcbiAgfTtcbn1cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuZnVuY3Rpb24gaXNSZXF1ZXN0KHN0cmVhbSkge1xuICByZXR1cm4gc3RyZWFtLnNldEhlYWRlciAmJiB0eXBlb2Ygc3RyZWFtLmFib3J0ID09PSAnZnVuY3Rpb24nO1xufVxuZnVuY3Rpb24gZW9zKHN0cmVhbSwgb3B0cywgY2FsbGJhY2spIHtcbiAgaWYgKHR5cGVvZiBvcHRzID09PSAnZnVuY3Rpb24nKSByZXR1cm4gZW9zKHN0cmVhbSwgbnVsbCwgb3B0cyk7XG4gIGlmICghb3B0cykgb3B0cyA9IHt9O1xuICBjYWxsYmFjayA9IG9uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gIHZhciByZWFkYWJsZSA9IG9wdHMucmVhZGFibGUgfHwgb3B0cy5yZWFkYWJsZSAhPT0gZmFsc2UgJiYgc3RyZWFtLnJlYWRhYmxlO1xuICB2YXIgd3JpdGFibGUgPSBvcHRzLndyaXRhYmxlIHx8IG9wdHMud3JpdGFibGUgIT09IGZhbHNlICYmIHN0cmVhbS53cml0YWJsZTtcbiAgdmFyIG9ubGVnYWN5ZmluaXNoID0gZnVuY3Rpb24gb25sZWdhY3lmaW5pc2goKSB7XG4gICAgaWYgKCFzdHJlYW0ud3JpdGFibGUpIG9uZmluaXNoKCk7XG4gIH07XG4gIHZhciB3cml0YWJsZUVuZGVkID0gc3RyZWFtLl93cml0YWJsZVN0YXRlICYmIHN0cmVhbS5fd3JpdGFibGVTdGF0ZS5maW5pc2hlZDtcbiAgdmFyIG9uZmluaXNoID0gZnVuY3Rpb24gb25maW5pc2goKSB7XG4gICAgd3JpdGFibGUgPSBmYWxzZTtcbiAgICB3cml0YWJsZUVuZGVkID0gdHJ1ZTtcbiAgICBpZiAoIXJlYWRhYmxlKSBjYWxsYmFjay5jYWxsKHN0cmVhbSk7XG4gIH07XG4gIHZhciByZWFkYWJsZUVuZGVkID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlICYmIHN0cmVhbS5fcmVhZGFibGVTdGF0ZS5lbmRFbWl0dGVkO1xuICB2YXIgb25lbmQgPSBmdW5jdGlvbiBvbmVuZCgpIHtcbiAgICByZWFkYWJsZSA9IGZhbHNlO1xuICAgIHJlYWRhYmxlRW5kZWQgPSB0cnVlO1xuICAgIGlmICghd3JpdGFibGUpIGNhbGxiYWNrLmNhbGwoc3RyZWFtKTtcbiAgfTtcbiAgdmFyIG9uZXJyb3IgPSBmdW5jdGlvbiBvbmVycm9yKGVycikge1xuICAgIGNhbGxiYWNrLmNhbGwoc3RyZWFtLCBlcnIpO1xuICB9O1xuICB2YXIgb25jbG9zZSA9IGZ1bmN0aW9uIG9uY2xvc2UoKSB7XG4gICAgdmFyIGVycjtcbiAgICBpZiAocmVhZGFibGUgJiYgIXJlYWRhYmxlRW5kZWQpIHtcbiAgICAgIGlmICghc3RyZWFtLl9yZWFkYWJsZVN0YXRlIHx8ICFzdHJlYW0uX3JlYWRhYmxlU3RhdGUuZW5kZWQpIGVyciA9IG5ldyBFUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRSgpO1xuICAgICAgcmV0dXJuIGNhbGxiYWNrLmNhbGwoc3RyZWFtLCBlcnIpO1xuICAgIH1cbiAgICBpZiAod3JpdGFibGUgJiYgIXdyaXRhYmxlRW5kZWQpIHtcbiAgICAgIGlmICghc3RyZWFtLl93cml0YWJsZVN0YXRlIHx8ICFzdHJlYW0uX3dyaXRhYmxlU3RhdGUuZW5kZWQpIGVyciA9IG5ldyBFUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRSgpO1xuICAgICAgcmV0dXJuIGNhbGxiYWNrLmNhbGwoc3RyZWFtLCBlcnIpO1xuICAgIH1cbiAgfTtcbiAgdmFyIG9ucmVxdWVzdCA9IGZ1bmN0aW9uIG9ucmVxdWVzdCgpIHtcbiAgICBzdHJlYW0ucmVxLm9uKCdmaW5pc2gnLCBvbmZpbmlzaCk7XG4gIH07XG4gIGlmIChpc1JlcXVlc3Qoc3RyZWFtKSkge1xuICAgIHN0cmVhbS5vbignY29tcGxldGUnLCBvbmZpbmlzaCk7XG4gICAgc3RyZWFtLm9uKCdhYm9ydCcsIG9uY2xvc2UpO1xuICAgIGlmIChzdHJlYW0ucmVxKSBvbnJlcXVlc3QoKTtlbHNlIHN0cmVhbS5vbigncmVxdWVzdCcsIG9ucmVxdWVzdCk7XG4gIH0gZWxzZSBpZiAod3JpdGFibGUgJiYgIXN0cmVhbS5fd3JpdGFibGVTdGF0ZSkge1xuICAgIC8vIGxlZ2FjeSBzdHJlYW1zXG4gICAgc3RyZWFtLm9uKCdlbmQnLCBvbmxlZ2FjeWZpbmlzaCk7XG4gICAgc3RyZWFtLm9uKCdjbG9zZScsIG9ubGVnYWN5ZmluaXNoKTtcbiAgfVxuICBzdHJlYW0ub24oJ2VuZCcsIG9uZW5kKTtcbiAgc3RyZWFtLm9uKCdmaW5pc2gnLCBvbmZpbmlzaCk7XG4gIGlmIChvcHRzLmVycm9yICE9PSBmYWxzZSkgc3RyZWFtLm9uKCdlcnJvcicsIG9uZXJyb3IpO1xuICBzdHJlYW0ub24oJ2Nsb3NlJywgb25jbG9zZSk7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgc3RyZWFtLnJlbW92ZUxpc3RlbmVyKCdjb21wbGV0ZScsIG9uZmluaXNoKTtcbiAgICBzdHJlYW0ucmVtb3ZlTGlzdGVuZXIoJ2Fib3J0Jywgb25jbG9zZSk7XG4gICAgc3RyZWFtLnJlbW92ZUxpc3RlbmVyKCdyZXF1ZXN0Jywgb25yZXF1ZXN0KTtcbiAgICBpZiAoc3RyZWFtLnJlcSkgc3RyZWFtLnJlcS5yZW1vdmVMaXN0ZW5lcignZmluaXNoJywgb25maW5pc2gpO1xuICAgIHN0cmVhbS5yZW1vdmVMaXN0ZW5lcignZW5kJywgb25sZWdhY3lmaW5pc2gpO1xuICAgIHN0cmVhbS5yZW1vdmVMaXN0ZW5lcignY2xvc2UnLCBvbmxlZ2FjeWZpbmlzaCk7XG4gICAgc3RyZWFtLnJlbW92ZUxpc3RlbmVyKCdmaW5pc2gnLCBvbmZpbmlzaCk7XG4gICAgc3RyZWFtLnJlbW92ZUxpc3RlbmVyKCdlbmQnLCBvbmVuZCk7XG4gICAgc3RyZWFtLnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uZXJyb3IpO1xuICAgIHN0cmVhbS5yZW1vdmVMaXN0ZW5lcignY2xvc2UnLCBvbmNsb3NlKTtcbiAgfTtcbn1cbm1vZHVsZS5leHBvcnRzID0gZW9zOyIsICIndXNlIHN0cmljdCc7XG5cbnZhciBfT2JqZWN0JHNldFByb3RvdHlwZU87XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGtleSA9IF90b1Byb3BlcnR5S2V5KGtleSk7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkoYXJnKSB7IHZhciBrZXkgPSBfdG9QcmltaXRpdmUoYXJnLCBcInN0cmluZ1wiKTsgcmV0dXJuIHR5cGVvZiBrZXkgPT09IFwic3ltYm9sXCIgPyBrZXkgOiBTdHJpbmcoa2V5KTsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKGlucHV0LCBoaW50KSB7IGlmICh0eXBlb2YgaW5wdXQgIT09IFwib2JqZWN0XCIgfHwgaW5wdXQgPT09IG51bGwpIHJldHVybiBpbnB1dDsgdmFyIHByaW0gPSBpbnB1dFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAocHJpbSAhPT0gdW5kZWZpbmVkKSB7IHZhciByZXMgPSBwcmltLmNhbGwoaW5wdXQsIGhpbnQgfHwgXCJkZWZhdWx0XCIpOyBpZiAodHlwZW9mIHJlcyAhPT0gXCJvYmplY3RcIikgcmV0dXJuIHJlczsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoaGludCA9PT0gXCJzdHJpbmdcIiA/IFN0cmluZyA6IE51bWJlcikoaW5wdXQpOyB9XG52YXIgZmluaXNoZWQgPSByZXF1aXJlKCcuL2VuZC1vZi1zdHJlYW0nKTtcbnZhciBrTGFzdFJlc29sdmUgPSBTeW1ib2woJ2xhc3RSZXNvbHZlJyk7XG52YXIga0xhc3RSZWplY3QgPSBTeW1ib2woJ2xhc3RSZWplY3QnKTtcbnZhciBrRXJyb3IgPSBTeW1ib2woJ2Vycm9yJyk7XG52YXIga0VuZGVkID0gU3ltYm9sKCdlbmRlZCcpO1xudmFyIGtMYXN0UHJvbWlzZSA9IFN5bWJvbCgnbGFzdFByb21pc2UnKTtcbnZhciBrSGFuZGxlUHJvbWlzZSA9IFN5bWJvbCgnaGFuZGxlUHJvbWlzZScpO1xudmFyIGtTdHJlYW0gPSBTeW1ib2woJ3N0cmVhbScpO1xuZnVuY3Rpb24gY3JlYXRlSXRlclJlc3VsdCh2YWx1ZSwgZG9uZSkge1xuICByZXR1cm4ge1xuICAgIHZhbHVlOiB2YWx1ZSxcbiAgICBkb25lOiBkb25lXG4gIH07XG59XG5mdW5jdGlvbiByZWFkQW5kUmVzb2x2ZShpdGVyKSB7XG4gIHZhciByZXNvbHZlID0gaXRlcltrTGFzdFJlc29sdmVdO1xuICBpZiAocmVzb2x2ZSAhPT0gbnVsbCkge1xuICAgIHZhciBkYXRhID0gaXRlcltrU3RyZWFtXS5yZWFkKCk7XG4gICAgLy8gd2UgZGVmZXIgaWYgZGF0YSBpcyBudWxsXG4gICAgLy8gd2UgY2FuIGJlIGV4cGVjdGluZyBlaXRoZXIgJ2VuZCcgb3JcbiAgICAvLyAnZXJyb3InXG4gICAgaWYgKGRhdGEgIT09IG51bGwpIHtcbiAgICAgIGl0ZXJba0xhc3RQcm9taXNlXSA9IG51bGw7XG4gICAgICBpdGVyW2tMYXN0UmVzb2x2ZV0gPSBudWxsO1xuICAgICAgaXRlcltrTGFzdFJlamVjdF0gPSBudWxsO1xuICAgICAgcmVzb2x2ZShjcmVhdGVJdGVyUmVzdWx0KGRhdGEsIGZhbHNlKSk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBvblJlYWRhYmxlKGl0ZXIpIHtcbiAgLy8gd2Ugd2FpdCBmb3IgdGhlIG5leHQgdGljaywgYmVjYXVzZSBpdCBtaWdodFxuICAvLyBlbWl0IGFuIGVycm9yIHdpdGggcHJvY2Vzcy5uZXh0VGlja1xuICBwcm9jZXNzLm5leHRUaWNrKHJlYWRBbmRSZXNvbHZlLCBpdGVyKTtcbn1cbmZ1bmN0aW9uIHdyYXBGb3JOZXh0KGxhc3RQcm9taXNlLCBpdGVyKSB7XG4gIHJldHVybiBmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgbGFzdFByb21pc2UudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoaXRlcltrRW5kZWRdKSB7XG4gICAgICAgIHJlc29sdmUoY3JlYXRlSXRlclJlc3VsdCh1bmRlZmluZWQsIHRydWUpKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaXRlcltrSGFuZGxlUHJvbWlzZV0ocmVzb2x2ZSwgcmVqZWN0KTtcbiAgICB9LCByZWplY3QpO1xuICB9O1xufVxudmFyIEFzeW5jSXRlcmF0b3JQcm90b3R5cGUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoZnVuY3Rpb24gKCkge30pO1xudmFyIFJlYWRhYmxlU3RyZWFtQXN5bmNJdGVyYXRvclByb3RvdHlwZSA9IE9iamVjdC5zZXRQcm90b3R5cGVPZigoX09iamVjdCRzZXRQcm90b3R5cGVPID0ge1xuICBnZXQgc3RyZWFtKCkge1xuICAgIHJldHVybiB0aGlzW2tTdHJlYW1dO1xuICB9LFxuICBuZXh0OiBmdW5jdGlvbiBuZXh0KCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgLy8gaWYgd2UgaGF2ZSBkZXRlY3RlZCBhbiBlcnJvciBpbiB0aGUgbWVhbndoaWxlXG4gICAgLy8gcmVqZWN0IHN0cmFpZ2h0IGF3YXlcbiAgICB2YXIgZXJyb3IgPSB0aGlzW2tFcnJvcl07XG4gICAgaWYgKGVycm9yICE9PSBudWxsKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuICAgIH1cbiAgICBpZiAodGhpc1trRW5kZWRdKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGNyZWF0ZUl0ZXJSZXN1bHQodW5kZWZpbmVkLCB0cnVlKSk7XG4gICAgfVxuICAgIGlmICh0aGlzW2tTdHJlYW1dLmRlc3Ryb3llZCkge1xuICAgICAgLy8gV2UgbmVlZCB0byBkZWZlciB2aWEgbmV4dFRpY2sgYmVjYXVzZSBpZiAuZGVzdHJveShlcnIpIGlzXG4gICAgICAvLyBjYWxsZWQsIHRoZSBlcnJvciB3aWxsIGJlIGVtaXR0ZWQgdmlhIG5leHRUaWNrLCBhbmRcbiAgICAgIC8vIHdlIGNhbm5vdCBndWFyYW50ZWUgdGhhdCB0aGVyZSBpcyBubyBlcnJvciBsaW5nZXJpbmcgYXJvdW5kXG4gICAgICAvLyB3YWl0aW5nIHRvIGJlIGVtaXR0ZWQuXG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAoX3RoaXNba0Vycm9yXSkge1xuICAgICAgICAgICAgcmVqZWN0KF90aGlzW2tFcnJvcl0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXNvbHZlKGNyZWF0ZUl0ZXJSZXN1bHQodW5kZWZpbmVkLCB0cnVlKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIGlmIHdlIGhhdmUgbXVsdGlwbGUgbmV4dCgpIGNhbGxzXG4gICAgLy8gd2Ugd2lsbCB3YWl0IGZvciB0aGUgcHJldmlvdXMgUHJvbWlzZSB0byBmaW5pc2hcbiAgICAvLyB0aGlzIGxvZ2ljIGlzIG9wdGltaXplZCB0byBzdXBwb3J0IGZvciBhd2FpdCBsb29wcyxcbiAgICAvLyB3aGVyZSBuZXh0KCkgaXMgb25seSBjYWxsZWQgb25jZSBhdCBhIHRpbWVcbiAgICB2YXIgbGFzdFByb21pc2UgPSB0aGlzW2tMYXN0UHJvbWlzZV07XG4gICAgdmFyIHByb21pc2U7XG4gICAgaWYgKGxhc3RQcm9taXNlKSB7XG4gICAgICBwcm9taXNlID0gbmV3IFByb21pc2Uod3JhcEZvck5leHQobGFzdFByb21pc2UsIHRoaXMpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZmFzdCBwYXRoIG5lZWRlZCB0byBzdXBwb3J0IG11bHRpcGxlIHRoaXMucHVzaCgpXG4gICAgICAvLyB3aXRob3V0IHRyaWdnZXJpbmcgdGhlIG5leHQoKSBxdWV1ZVxuICAgICAgdmFyIGRhdGEgPSB0aGlzW2tTdHJlYW1dLnJlYWQoKTtcbiAgICAgIGlmIChkYXRhICE9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoY3JlYXRlSXRlclJlc3VsdChkYXRhLCBmYWxzZSkpO1xuICAgICAgfVxuICAgICAgcHJvbWlzZSA9IG5ldyBQcm9taXNlKHRoaXNba0hhbmRsZVByb21pc2VdKTtcbiAgICB9XG4gICAgdGhpc1trTGFzdFByb21pc2VdID0gcHJvbWlzZTtcbiAgICByZXR1cm4gcHJvbWlzZTtcbiAgfVxufSwgX2RlZmluZVByb3BlcnR5KF9PYmplY3Qkc2V0UHJvdG90eXBlTywgU3ltYm9sLmFzeW5jSXRlcmF0b3IsIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXM7XG59KSwgX2RlZmluZVByb3BlcnR5KF9PYmplY3Qkc2V0UHJvdG90eXBlTywgXCJyZXR1cm5cIiwgZnVuY3Rpb24gX3JldHVybigpIHtcbiAgdmFyIF90aGlzMiA9IHRoaXM7XG4gIC8vIGRlc3Ryb3koZXJyLCBjYikgaXMgYSBwcml2YXRlIEFQSVxuICAvLyB3ZSBjYW4gZ3VhcmFudGVlIHdlIGhhdmUgdGhhdCBoZXJlLCBiZWNhdXNlIHdlIGNvbnRyb2wgdGhlXG4gIC8vIFJlYWRhYmxlIGNsYXNzIHRoaXMgaXMgYXR0YWNoZWQgdG9cbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICBfdGhpczJba1N0cmVhbV0uZGVzdHJveShudWxsLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICByZXNvbHZlKGNyZWF0ZUl0ZXJSZXN1bHQodW5kZWZpbmVkLCB0cnVlKSk7XG4gICAgfSk7XG4gIH0pO1xufSksIF9PYmplY3Qkc2V0UHJvdG90eXBlTyksIEFzeW5jSXRlcmF0b3JQcm90b3R5cGUpO1xudmFyIGNyZWF0ZVJlYWRhYmxlU3RyZWFtQXN5bmNJdGVyYXRvciA9IGZ1bmN0aW9uIGNyZWF0ZVJlYWRhYmxlU3RyZWFtQXN5bmNJdGVyYXRvcihzdHJlYW0pIHtcbiAgdmFyIF9PYmplY3QkY3JlYXRlO1xuICB2YXIgaXRlcmF0b3IgPSBPYmplY3QuY3JlYXRlKFJlYWRhYmxlU3RyZWFtQXN5bmNJdGVyYXRvclByb3RvdHlwZSwgKF9PYmplY3QkY3JlYXRlID0ge30sIF9kZWZpbmVQcm9wZXJ0eShfT2JqZWN0JGNyZWF0ZSwga1N0cmVhbSwge1xuICAgIHZhbHVlOiBzdHJlYW0sXG4gICAgd3JpdGFibGU6IHRydWVcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfT2JqZWN0JGNyZWF0ZSwga0xhc3RSZXNvbHZlLCB7XG4gICAgdmFsdWU6IG51bGwsXG4gICAgd3JpdGFibGU6IHRydWVcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfT2JqZWN0JGNyZWF0ZSwga0xhc3RSZWplY3QsIHtcbiAgICB2YWx1ZTogbnVsbCxcbiAgICB3cml0YWJsZTogdHJ1ZVxuICB9KSwgX2RlZmluZVByb3BlcnR5KF9PYmplY3QkY3JlYXRlLCBrRXJyb3IsIHtcbiAgICB2YWx1ZTogbnVsbCxcbiAgICB3cml0YWJsZTogdHJ1ZVxuICB9KSwgX2RlZmluZVByb3BlcnR5KF9PYmplY3QkY3JlYXRlLCBrRW5kZWQsIHtcbiAgICB2YWx1ZTogc3RyZWFtLl9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWQsXG4gICAgd3JpdGFibGU6IHRydWVcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfT2JqZWN0JGNyZWF0ZSwga0hhbmRsZVByb21pc2UsIHtcbiAgICB2YWx1ZTogZnVuY3Rpb24gdmFsdWUocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB2YXIgZGF0YSA9IGl0ZXJhdG9yW2tTdHJlYW1dLnJlYWQoKTtcbiAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgIGl0ZXJhdG9yW2tMYXN0UHJvbWlzZV0gPSBudWxsO1xuICAgICAgICBpdGVyYXRvcltrTGFzdFJlc29sdmVdID0gbnVsbDtcbiAgICAgICAgaXRlcmF0b3Jba0xhc3RSZWplY3RdID0gbnVsbDtcbiAgICAgICAgcmVzb2x2ZShjcmVhdGVJdGVyUmVzdWx0KGRhdGEsIGZhbHNlKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpdGVyYXRvcltrTGFzdFJlc29sdmVdID0gcmVzb2x2ZTtcbiAgICAgICAgaXRlcmF0b3Jba0xhc3RSZWplY3RdID0gcmVqZWN0O1xuICAgICAgfVxuICAgIH0sXG4gICAgd3JpdGFibGU6IHRydWVcbiAgfSksIF9PYmplY3QkY3JlYXRlKSk7XG4gIGl0ZXJhdG9yW2tMYXN0UHJvbWlzZV0gPSBudWxsO1xuICBmaW5pc2hlZChzdHJlYW0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICBpZiAoZXJyICYmIGVyci5jb2RlICE9PSAnRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0UnKSB7XG4gICAgICB2YXIgcmVqZWN0ID0gaXRlcmF0b3Jba0xhc3RSZWplY3RdO1xuICAgICAgLy8gcmVqZWN0IGlmIHdlIGFyZSB3YWl0aW5nIGZvciBkYXRhIGluIHRoZSBQcm9taXNlXG4gICAgICAvLyByZXR1cm5lZCBieSBuZXh0KCkgYW5kIHN0b3JlIHRoZSBlcnJvclxuICAgICAgaWYgKHJlamVjdCAhPT0gbnVsbCkge1xuICAgICAgICBpdGVyYXRvcltrTGFzdFByb21pc2VdID0gbnVsbDtcbiAgICAgICAgaXRlcmF0b3Jba0xhc3RSZXNvbHZlXSA9IG51bGw7XG4gICAgICAgIGl0ZXJhdG9yW2tMYXN0UmVqZWN0XSA9IG51bGw7XG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgfVxuICAgICAgaXRlcmF0b3Jba0Vycm9yXSA9IGVycjtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHJlc29sdmUgPSBpdGVyYXRvcltrTGFzdFJlc29sdmVdO1xuICAgIGlmIChyZXNvbHZlICE9PSBudWxsKSB7XG4gICAgICBpdGVyYXRvcltrTGFzdFByb21pc2VdID0gbnVsbDtcbiAgICAgIGl0ZXJhdG9yW2tMYXN0UmVzb2x2ZV0gPSBudWxsO1xuICAgICAgaXRlcmF0b3Jba0xhc3RSZWplY3RdID0gbnVsbDtcbiAgICAgIHJlc29sdmUoY3JlYXRlSXRlclJlc3VsdCh1bmRlZmluZWQsIHRydWUpKTtcbiAgICB9XG4gICAgaXRlcmF0b3Jba0VuZGVkXSA9IHRydWU7XG4gIH0pO1xuICBzdHJlYW0ub24oJ3JlYWRhYmxlJywgb25SZWFkYWJsZS5iaW5kKG51bGwsIGl0ZXJhdG9yKSk7XG4gIHJldHVybiBpdGVyYXRvcjtcbn07XG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZVJlYWRhYmxlU3RyZWFtQXN5bmNJdGVyYXRvcjsiLCAiJ3VzZSBzdHJpY3QnO1xuXG5mdW5jdGlvbiBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIGtleSwgYXJnKSB7IHRyeSB7IHZhciBpbmZvID0gZ2VuW2tleV0oYXJnKTsgdmFyIHZhbHVlID0gaW5mby52YWx1ZTsgfSBjYXRjaCAoZXJyb3IpIHsgcmVqZWN0KGVycm9yKTsgcmV0dXJuOyB9IGlmIChpbmZvLmRvbmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0gZWxzZSB7IFByb21pc2UucmVzb2x2ZSh2YWx1ZSkudGhlbihfbmV4dCwgX3Rocm93KTsgfSB9XG5mdW5jdGlvbiBfYXN5bmNUb0dlbmVyYXRvcihmbikgeyByZXR1cm4gZnVuY3Rpb24gKCkgeyB2YXIgc2VsZiA9IHRoaXMsIGFyZ3MgPSBhcmd1bWVudHM7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7IHZhciBnZW4gPSBmbi5hcHBseShzZWxmLCBhcmdzKTsgZnVuY3Rpb24gX25leHQodmFsdWUpIHsgYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBcIm5leHRcIiwgdmFsdWUpOyB9IGZ1bmN0aW9uIF90aHJvdyhlcnIpIHsgYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBcInRocm93XCIsIGVycik7IH0gX25leHQodW5kZWZpbmVkKTsgfSk7IH07IH1cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBlbnVtZXJhYmxlT25seSAmJiAoc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pKSwga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gbnVsbCAhPSBhcmd1bWVudHNbaV0gPyBhcmd1bWVudHNbaV0gOiB7fTsgaSAlIDIgPyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKSA6IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gcmV0dXJuIHRhcmdldDsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBrZXkgPSBfdG9Qcm9wZXJ0eUtleShrZXkpOyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KGFyZykgeyB2YXIga2V5ID0gX3RvUHJpbWl0aXZlKGFyZywgXCJzdHJpbmdcIik7IHJldHVybiB0eXBlb2Yga2V5ID09PSBcInN5bWJvbFwiID8ga2V5IDogU3RyaW5nKGtleSk7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZShpbnB1dCwgaGludCkgeyBpZiAodHlwZW9mIGlucHV0ICE9PSBcIm9iamVjdFwiIHx8IGlucHV0ID09PSBudWxsKSByZXR1cm4gaW5wdXQ7IHZhciBwcmltID0gaW5wdXRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHByaW0gIT09IHVuZGVmaW5lZCkgeyB2YXIgcmVzID0gcHJpbS5jYWxsKGlucHV0LCBoaW50IHx8IFwiZGVmYXVsdFwiKTsgaWYgKHR5cGVvZiByZXMgIT09IFwib2JqZWN0XCIpIHJldHVybiByZXM7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKGhpbnQgPT09IFwic3RyaW5nXCIgPyBTdHJpbmcgOiBOdW1iZXIpKGlucHV0KTsgfVxudmFyIEVSUl9JTlZBTElEX0FSR19UWVBFID0gcmVxdWlyZSgnLi4vLi4vLi4vZXJyb3JzJykuY29kZXMuRVJSX0lOVkFMSURfQVJHX1RZUEU7XG5mdW5jdGlvbiBmcm9tKFJlYWRhYmxlLCBpdGVyYWJsZSwgb3B0cykge1xuICB2YXIgaXRlcmF0b3I7XG4gIGlmIChpdGVyYWJsZSAmJiB0eXBlb2YgaXRlcmFibGUubmV4dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGl0ZXJhdG9yID0gaXRlcmFibGU7XG4gIH0gZWxzZSBpZiAoaXRlcmFibGUgJiYgaXRlcmFibGVbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKSBpdGVyYXRvciA9IGl0ZXJhYmxlW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpO2Vsc2UgaWYgKGl0ZXJhYmxlICYmIGl0ZXJhYmxlW1N5bWJvbC5pdGVyYXRvcl0pIGl0ZXJhdG9yID0gaXRlcmFibGVbU3ltYm9sLml0ZXJhdG9yXSgpO2Vsc2UgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19UWVBFKCdpdGVyYWJsZScsIFsnSXRlcmFibGUnXSwgaXRlcmFibGUpO1xuICB2YXIgcmVhZGFibGUgPSBuZXcgUmVhZGFibGUoX29iamVjdFNwcmVhZCh7XG4gICAgb2JqZWN0TW9kZTogdHJ1ZVxuICB9LCBvcHRzKSk7XG4gIC8vIFJlYWRpbmcgYm9vbGVhbiB0byBwcm90ZWN0IGFnYWluc3QgX3JlYWRcbiAgLy8gYmVpbmcgY2FsbGVkIGJlZm9yZSBsYXN0IGl0ZXJhdGlvbiBjb21wbGV0aW9uLlxuICB2YXIgcmVhZGluZyA9IGZhbHNlO1xuICByZWFkYWJsZS5fcmVhZCA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIXJlYWRpbmcpIHtcbiAgICAgIHJlYWRpbmcgPSB0cnVlO1xuICAgICAgbmV4dCgpO1xuICAgIH1cbiAgfTtcbiAgZnVuY3Rpb24gbmV4dCgpIHtcbiAgICByZXR1cm4gX25leHQyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cbiAgZnVuY3Rpb24gX25leHQyKCkge1xuICAgIF9uZXh0MiA9IF9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKiAoKSB7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgX3lpZWxkJGl0ZXJhdG9yJG5leHQgPSB5aWVsZCBpdGVyYXRvci5uZXh0KCksXG4gICAgICAgICAgdmFsdWUgPSBfeWllbGQkaXRlcmF0b3IkbmV4dC52YWx1ZSxcbiAgICAgICAgICBkb25lID0gX3lpZWxkJGl0ZXJhdG9yJG5leHQuZG9uZTtcbiAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICByZWFkYWJsZS5wdXNoKG51bGwpO1xuICAgICAgICB9IGVsc2UgaWYgKHJlYWRhYmxlLnB1c2goeWllbGQgdmFsdWUpKSB7XG4gICAgICAgICAgbmV4dCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHJlYWRhYmxlLmRlc3Ryb3koZXJyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gX25leHQyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cbiAgcmV0dXJuIHJlYWRhYmxlO1xufVxubW9kdWxlLmV4cG9ydHMgPSBmcm9tO1xuIiwgIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4ndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhZGFibGU7XG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgRHVwbGV4O1xuLyo8L3JlcGxhY2VtZW50PiovXG5cblJlYWRhYmxlLlJlYWRhYmxlU3RhdGUgPSBSZWFkYWJsZVN0YXRlO1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIEVFID0gcmVxdWlyZSgnZXZlbnRzJykuRXZlbnRFbWl0dGVyO1xudmFyIEVFbGlzdGVuZXJDb3VudCA9IGZ1bmN0aW9uIEVFbGlzdGVuZXJDb3VudChlbWl0dGVyLCB0eXBlKSB7XG4gIHJldHVybiBlbWl0dGVyLmxpc3RlbmVycyh0eXBlKS5sZW5ndGg7XG59O1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgU3RyZWFtID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9zdHJlYW1zL3N0cmVhbScpO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbnZhciBCdWZmZXIgPSByZXF1aXJlKCdidWZmZXInKS5CdWZmZXI7XG52YXIgT3VyVWludDhBcnJheSA9ICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJyA/IGdsb2JhbCA6IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93IDogdHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnID8gc2VsZiA6IHt9KS5VaW50OEFycmF5IHx8IGZ1bmN0aW9uICgpIHt9O1xuZnVuY3Rpb24gX3VpbnQ4QXJyYXlUb0J1ZmZlcihjaHVuaykge1xuICByZXR1cm4gQnVmZmVyLmZyb20oY2h1bmspO1xufVxuZnVuY3Rpb24gX2lzVWludDhBcnJheShvYmopIHtcbiAgcmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcihvYmopIHx8IG9iaiBpbnN0YW5jZW9mIE91clVpbnQ4QXJyYXk7XG59XG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgZGVidWdVdGlsID0gcmVxdWlyZSgndXRpbCcpO1xudmFyIGRlYnVnO1xuaWYgKGRlYnVnVXRpbCAmJiBkZWJ1Z1V0aWwuZGVidWdsb2cpIHtcbiAgZGVidWcgPSBkZWJ1Z1V0aWwuZGVidWdsb2coJ3N0cmVhbScpO1xufSBlbHNlIHtcbiAgZGVidWcgPSBmdW5jdGlvbiBkZWJ1ZygpIHt9O1xufVxuLyo8L3JlcGxhY2VtZW50PiovXG5cbnZhciBCdWZmZXJMaXN0ID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9zdHJlYW1zL2J1ZmZlcl9saXN0Jyk7XG52YXIgZGVzdHJveUltcGwgPSByZXF1aXJlKCcuL2ludGVybmFsL3N0cmVhbXMvZGVzdHJveScpO1xudmFyIF9yZXF1aXJlID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9zdHJlYW1zL3N0YXRlJyksXG4gIGdldEhpZ2hXYXRlck1hcmsgPSBfcmVxdWlyZS5nZXRIaWdoV2F0ZXJNYXJrO1xudmFyIF9yZXF1aXJlJGNvZGVzID0gcmVxdWlyZSgnLi4vZXJyb3JzJykuY29kZXMsXG4gIEVSUl9JTlZBTElEX0FSR19UWVBFID0gX3JlcXVpcmUkY29kZXMuRVJSX0lOVkFMSURfQVJHX1RZUEUsXG4gIEVSUl9TVFJFQU1fUFVTSF9BRlRFUl9FT0YgPSBfcmVxdWlyZSRjb2Rlcy5FUlJfU1RSRUFNX1BVU0hfQUZURVJfRU9GLFxuICBFUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCA9IF9yZXF1aXJlJGNvZGVzLkVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVELFxuICBFUlJfU1RSRUFNX1VOU0hJRlRfQUZURVJfRU5EX0VWRU5UID0gX3JlcXVpcmUkY29kZXMuRVJSX1NUUkVBTV9VTlNISUZUX0FGVEVSX0VORF9FVkVOVDtcblxuLy8gTGF6eSBsb2FkZWQgdG8gaW1wcm92ZSB0aGUgc3RhcnR1cCBwZXJmb3JtYW5jZS5cbnZhciBTdHJpbmdEZWNvZGVyO1xudmFyIGNyZWF0ZVJlYWRhYmxlU3RyZWFtQXN5bmNJdGVyYXRvcjtcbnZhciBmcm9tO1xucmVxdWlyZSgnaW5oZXJpdHMnKShSZWFkYWJsZSwgU3RyZWFtKTtcbnZhciBlcnJvck9yRGVzdHJveSA9IGRlc3Ryb3lJbXBsLmVycm9yT3JEZXN0cm95O1xudmFyIGtQcm94eUV2ZW50cyA9IFsnZXJyb3InLCAnY2xvc2UnLCAnZGVzdHJveScsICdwYXVzZScsICdyZXN1bWUnXTtcbmZ1bmN0aW9uIHByZXBlbmRMaXN0ZW5lcihlbWl0dGVyLCBldmVudCwgZm4pIHtcbiAgLy8gU2FkbHkgdGhpcyBpcyBub3QgY2FjaGVhYmxlIGFzIHNvbWUgbGlicmFyaWVzIGJ1bmRsZSB0aGVpciBvd25cbiAgLy8gZXZlbnQgZW1pdHRlciBpbXBsZW1lbnRhdGlvbiB3aXRoIHRoZW0uXG4gIGlmICh0eXBlb2YgZW1pdHRlci5wcmVwZW5kTGlzdGVuZXIgPT09ICdmdW5jdGlvbicpIHJldHVybiBlbWl0dGVyLnByZXBlbmRMaXN0ZW5lcihldmVudCwgZm4pO1xuXG4gIC8vIFRoaXMgaXMgYSBoYWNrIHRvIG1ha2Ugc3VyZSB0aGF0IG91ciBlcnJvciBoYW5kbGVyIGlzIGF0dGFjaGVkIGJlZm9yZSBhbnlcbiAgLy8gdXNlcmxhbmQgb25lcy4gIE5FVkVSIERPIFRISVMuIFRoaXMgaXMgaGVyZSBvbmx5IGJlY2F1c2UgdGhpcyBjb2RlIG5lZWRzXG4gIC8vIHRvIGNvbnRpbnVlIHRvIHdvcmsgd2l0aCBvbGRlciB2ZXJzaW9ucyBvZiBOb2RlLmpzIHRoYXQgZG8gbm90IGluY2x1ZGVcbiAgLy8gdGhlIHByZXBlbmRMaXN0ZW5lcigpIG1ldGhvZC4gVGhlIGdvYWwgaXMgdG8gZXZlbnR1YWxseSByZW1vdmUgdGhpcyBoYWNrLlxuICBpZiAoIWVtaXR0ZXIuX2V2ZW50cyB8fCAhZW1pdHRlci5fZXZlbnRzW2V2ZW50XSkgZW1pdHRlci5vbihldmVudCwgZm4pO2Vsc2UgaWYgKEFycmF5LmlzQXJyYXkoZW1pdHRlci5fZXZlbnRzW2V2ZW50XSkpIGVtaXR0ZXIuX2V2ZW50c1tldmVudF0udW5zaGlmdChmbik7ZWxzZSBlbWl0dGVyLl9ldmVudHNbZXZlbnRdID0gW2ZuLCBlbWl0dGVyLl9ldmVudHNbZXZlbnRdXTtcbn1cbmZ1bmN0aW9uIFJlYWRhYmxlU3RhdGUob3B0aW9ucywgc3RyZWFtLCBpc0R1cGxleCkge1xuICBEdXBsZXggPSBEdXBsZXggfHwgcmVxdWlyZSgnLi9fc3RyZWFtX2R1cGxleCcpO1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAvLyBEdXBsZXggc3RyZWFtcyBhcmUgYm90aCByZWFkYWJsZSBhbmQgd3JpdGFibGUsIGJ1dCBzaGFyZVxuICAvLyB0aGUgc2FtZSBvcHRpb25zIG9iamVjdC5cbiAgLy8gSG93ZXZlciwgc29tZSBjYXNlcyByZXF1aXJlIHNldHRpbmcgb3B0aW9ucyB0byBkaWZmZXJlbnRcbiAgLy8gdmFsdWVzIGZvciB0aGUgcmVhZGFibGUgYW5kIHRoZSB3cml0YWJsZSBzaWRlcyBvZiB0aGUgZHVwbGV4IHN0cmVhbS5cbiAgLy8gVGhlc2Ugb3B0aW9ucyBjYW4gYmUgcHJvdmlkZWQgc2VwYXJhdGVseSBhcyByZWFkYWJsZVhYWCBhbmQgd3JpdGFibGVYWFguXG4gIGlmICh0eXBlb2YgaXNEdXBsZXggIT09ICdib29sZWFuJykgaXNEdXBsZXggPSBzdHJlYW0gaW5zdGFuY2VvZiBEdXBsZXg7XG5cbiAgLy8gb2JqZWN0IHN0cmVhbSBmbGFnLiBVc2VkIHRvIG1ha2UgcmVhZChuKSBpZ25vcmUgbiBhbmQgdG9cbiAgLy8gbWFrZSBhbGwgdGhlIGJ1ZmZlciBtZXJnaW5nIGFuZCBsZW5ndGggY2hlY2tzIGdvIGF3YXlcbiAgdGhpcy5vYmplY3RNb2RlID0gISFvcHRpb25zLm9iamVjdE1vZGU7XG4gIGlmIChpc0R1cGxleCkgdGhpcy5vYmplY3RNb2RlID0gdGhpcy5vYmplY3RNb2RlIHx8ICEhb3B0aW9ucy5yZWFkYWJsZU9iamVjdE1vZGU7XG5cbiAgLy8gdGhlIHBvaW50IGF0IHdoaWNoIGl0IHN0b3BzIGNhbGxpbmcgX3JlYWQoKSB0byBmaWxsIHRoZSBidWZmZXJcbiAgLy8gTm90ZTogMCBpcyBhIHZhbGlkIHZhbHVlLCBtZWFucyBcImRvbid0IGNhbGwgX3JlYWQgcHJlZW1wdGl2ZWx5IGV2ZXJcIlxuICB0aGlzLmhpZ2hXYXRlck1hcmsgPSBnZXRIaWdoV2F0ZXJNYXJrKHRoaXMsIG9wdGlvbnMsICdyZWFkYWJsZUhpZ2hXYXRlck1hcmsnLCBpc0R1cGxleCk7XG5cbiAgLy8gQSBsaW5rZWQgbGlzdCBpcyB1c2VkIHRvIHN0b3JlIGRhdGEgY2h1bmtzIGluc3RlYWQgb2YgYW4gYXJyYXkgYmVjYXVzZSB0aGVcbiAgLy8gbGlua2VkIGxpc3QgY2FuIHJlbW92ZSBlbGVtZW50cyBmcm9tIHRoZSBiZWdpbm5pbmcgZmFzdGVyIHRoYW5cbiAgLy8gYXJyYXkuc2hpZnQoKVxuICB0aGlzLmJ1ZmZlciA9IG5ldyBCdWZmZXJMaXN0KCk7XG4gIHRoaXMubGVuZ3RoID0gMDtcbiAgdGhpcy5waXBlcyA9IG51bGw7XG4gIHRoaXMucGlwZXNDb3VudCA9IDA7XG4gIHRoaXMuZmxvd2luZyA9IG51bGw7XG4gIHRoaXMuZW5kZWQgPSBmYWxzZTtcbiAgdGhpcy5lbmRFbWl0dGVkID0gZmFsc2U7XG4gIHRoaXMucmVhZGluZyA9IGZhbHNlO1xuXG4gIC8vIGEgZmxhZyB0byBiZSBhYmxlIHRvIHRlbGwgaWYgdGhlIGV2ZW50ICdyZWFkYWJsZScvJ2RhdGEnIGlzIGVtaXR0ZWRcbiAgLy8gaW1tZWRpYXRlbHksIG9yIG9uIGEgbGF0ZXIgdGljay4gIFdlIHNldCB0aGlzIHRvIHRydWUgYXQgZmlyc3QsIGJlY2F1c2VcbiAgLy8gYW55IGFjdGlvbnMgdGhhdCBzaG91bGRuJ3QgaGFwcGVuIHVudGlsIFwibGF0ZXJcIiBzaG91bGQgZ2VuZXJhbGx5IGFsc29cbiAgLy8gbm90IGhhcHBlbiBiZWZvcmUgdGhlIGZpcnN0IHJlYWQgY2FsbC5cbiAgdGhpcy5zeW5jID0gdHJ1ZTtcblxuICAvLyB3aGVuZXZlciB3ZSByZXR1cm4gbnVsbCwgdGhlbiB3ZSBzZXQgYSBmbGFnIHRvIHNheVxuICAvLyB0aGF0IHdlJ3JlIGF3YWl0aW5nIGEgJ3JlYWRhYmxlJyBldmVudCBlbWlzc2lvbi5cbiAgdGhpcy5uZWVkUmVhZGFibGUgPSBmYWxzZTtcbiAgdGhpcy5lbWl0dGVkUmVhZGFibGUgPSBmYWxzZTtcbiAgdGhpcy5yZWFkYWJsZUxpc3RlbmluZyA9IGZhbHNlO1xuICB0aGlzLnJlc3VtZVNjaGVkdWxlZCA9IGZhbHNlO1xuICB0aGlzLnBhdXNlZCA9IHRydWU7XG5cbiAgLy8gU2hvdWxkIGNsb3NlIGJlIGVtaXR0ZWQgb24gZGVzdHJveS4gRGVmYXVsdHMgdG8gdHJ1ZS5cbiAgdGhpcy5lbWl0Q2xvc2UgPSBvcHRpb25zLmVtaXRDbG9zZSAhPT0gZmFsc2U7XG5cbiAgLy8gU2hvdWxkIC5kZXN0cm95KCkgYmUgY2FsbGVkIGFmdGVyICdlbmQnIChhbmQgcG90ZW50aWFsbHkgJ2ZpbmlzaCcpXG4gIHRoaXMuYXV0b0Rlc3Ryb3kgPSAhIW9wdGlvbnMuYXV0b0Rlc3Ryb3k7XG5cbiAgLy8gaGFzIGl0IGJlZW4gZGVzdHJveWVkXG4gIHRoaXMuZGVzdHJveWVkID0gZmFsc2U7XG5cbiAgLy8gQ3J5cHRvIGlzIGtpbmQgb2Ygb2xkIGFuZCBjcnVzdHkuICBIaXN0b3JpY2FsbHksIGl0cyBkZWZhdWx0IHN0cmluZ1xuICAvLyBlbmNvZGluZyBpcyAnYmluYXJ5JyBzbyB3ZSBoYXZlIHRvIG1ha2UgdGhpcyBjb25maWd1cmFibGUuXG4gIC8vIEV2ZXJ5dGhpbmcgZWxzZSBpbiB0aGUgdW5pdmVyc2UgdXNlcyAndXRmOCcsIHRob3VnaC5cbiAgdGhpcy5kZWZhdWx0RW5jb2RpbmcgPSBvcHRpb25zLmRlZmF1bHRFbmNvZGluZyB8fCAndXRmOCc7XG5cbiAgLy8gdGhlIG51bWJlciBvZiB3cml0ZXJzIHRoYXQgYXJlIGF3YWl0aW5nIGEgZHJhaW4gZXZlbnQgaW4gLnBpcGUoKXNcbiAgdGhpcy5hd2FpdERyYWluID0gMDtcblxuICAvLyBpZiB0cnVlLCBhIG1heWJlUmVhZE1vcmUgaGFzIGJlZW4gc2NoZWR1bGVkXG4gIHRoaXMucmVhZGluZ01vcmUgPSBmYWxzZTtcbiAgdGhpcy5kZWNvZGVyID0gbnVsbDtcbiAgdGhpcy5lbmNvZGluZyA9IG51bGw7XG4gIGlmIChvcHRpb25zLmVuY29kaW5nKSB7XG4gICAgaWYgKCFTdHJpbmdEZWNvZGVyKSBTdHJpbmdEZWNvZGVyID0gcmVxdWlyZSgnc3RyaW5nX2RlY29kZXIvJykuU3RyaW5nRGVjb2RlcjtcbiAgICB0aGlzLmRlY29kZXIgPSBuZXcgU3RyaW5nRGVjb2RlcihvcHRpb25zLmVuY29kaW5nKTtcbiAgICB0aGlzLmVuY29kaW5nID0gb3B0aW9ucy5lbmNvZGluZztcbiAgfVxufVxuZnVuY3Rpb24gUmVhZGFibGUob3B0aW9ucykge1xuICBEdXBsZXggPSBEdXBsZXggfHwgcmVxdWlyZSgnLi9fc3RyZWFtX2R1cGxleCcpO1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUmVhZGFibGUpKSByZXR1cm4gbmV3IFJlYWRhYmxlKG9wdGlvbnMpO1xuXG4gIC8vIENoZWNraW5nIGZvciBhIFN0cmVhbS5EdXBsZXggaW5zdGFuY2UgaXMgZmFzdGVyIGhlcmUgaW5zdGVhZCBvZiBpbnNpZGVcbiAgLy8gdGhlIFJlYWRhYmxlU3RhdGUgY29uc3RydWN0b3IsIGF0IGxlYXN0IHdpdGggVjggNi41XG4gIHZhciBpc0R1cGxleCA9IHRoaXMgaW5zdGFuY2VvZiBEdXBsZXg7XG4gIHRoaXMuX3JlYWRhYmxlU3RhdGUgPSBuZXcgUmVhZGFibGVTdGF0ZShvcHRpb25zLCB0aGlzLCBpc0R1cGxleCk7XG5cbiAgLy8gbGVnYWN5XG4gIHRoaXMucmVhZGFibGUgPSB0cnVlO1xuICBpZiAob3B0aW9ucykge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5yZWFkID09PSAnZnVuY3Rpb24nKSB0aGlzLl9yZWFkID0gb3B0aW9ucy5yZWFkO1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5kZXN0cm95ID09PSAnZnVuY3Rpb24nKSB0aGlzLl9kZXN0cm95ID0gb3B0aW9ucy5kZXN0cm95O1xuICB9XG4gIFN0cmVhbS5jYWxsKHRoaXMpO1xufVxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlYWRhYmxlLnByb3RvdHlwZSwgJ2Rlc3Ryb3llZCcsIHtcbiAgLy8gbWFraW5nIGl0IGV4cGxpY2l0IHRoaXMgcHJvcGVydHkgaXMgbm90IGVudW1lcmFibGVcbiAgLy8gYmVjYXVzZSBvdGhlcndpc2Ugc29tZSBwcm90b3R5cGUgbWFuaXB1bGF0aW9uIGluXG4gIC8vIHVzZXJsYW5kIHdpbGwgZmFpbFxuICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgaWYgKHRoaXMuX3JlYWRhYmxlU3RhdGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ7XG4gIH0sXG4gIHNldDogZnVuY3Rpb24gc2V0KHZhbHVlKSB7XG4gICAgLy8gd2UgaWdub3JlIHRoZSB2YWx1ZSBpZiB0aGUgc3RyZWFtXG4gICAgLy8gaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkIHlldFxuICAgIGlmICghdGhpcy5fcmVhZGFibGVTdGF0ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIHRoZSB1c2VyIGlzIGV4cGxpY2l0bHlcbiAgICAvLyBtYW5hZ2luZyBkZXN0cm95ZWRcbiAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZCA9IHZhbHVlO1xuICB9XG59KTtcblJlYWRhYmxlLnByb3RvdHlwZS5kZXN0cm95ID0gZGVzdHJveUltcGwuZGVzdHJveTtcblJlYWRhYmxlLnByb3RvdHlwZS5fdW5kZXN0cm95ID0gZGVzdHJveUltcGwudW5kZXN0cm95O1xuUmVhZGFibGUucHJvdG90eXBlLl9kZXN0cm95ID0gZnVuY3Rpb24gKGVyciwgY2IpIHtcbiAgY2IoZXJyKTtcbn07XG5cbi8vIE1hbnVhbGx5IHNob3ZlIHNvbWV0aGluZyBpbnRvIHRoZSByZWFkKCkgYnVmZmVyLlxuLy8gVGhpcyByZXR1cm5zIHRydWUgaWYgdGhlIGhpZ2hXYXRlck1hcmsgaGFzIG5vdCBiZWVuIGhpdCB5ZXQsXG4vLyBzaW1pbGFyIHRvIGhvdyBXcml0YWJsZS53cml0ZSgpIHJldHVybnMgdHJ1ZSBpZiB5b3Ugc2hvdWxkXG4vLyB3cml0ZSgpIHNvbWUgbW9yZS5cblJlYWRhYmxlLnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZykge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9yZWFkYWJsZVN0YXRlO1xuICB2YXIgc2tpcENodW5rQ2hlY2s7XG4gIGlmICghc3RhdGUub2JqZWN0TW9kZSkge1xuICAgIGlmICh0eXBlb2YgY2h1bmsgPT09ICdzdHJpbmcnKSB7XG4gICAgICBlbmNvZGluZyA9IGVuY29kaW5nIHx8IHN0YXRlLmRlZmF1bHRFbmNvZGluZztcbiAgICAgIGlmIChlbmNvZGluZyAhPT0gc3RhdGUuZW5jb2RpbmcpIHtcbiAgICAgICAgY2h1bmsgPSBCdWZmZXIuZnJvbShjaHVuaywgZW5jb2RpbmcpO1xuICAgICAgICBlbmNvZGluZyA9ICcnO1xuICAgICAgfVxuICAgICAgc2tpcENodW5rQ2hlY2sgPSB0cnVlO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBza2lwQ2h1bmtDaGVjayA9IHRydWU7XG4gIH1cbiAgcmV0dXJuIHJlYWRhYmxlQWRkQ2h1bmsodGhpcywgY2h1bmssIGVuY29kaW5nLCBmYWxzZSwgc2tpcENodW5rQ2hlY2spO1xufTtcblxuLy8gVW5zaGlmdCBzaG91bGQgKmFsd2F5cyogYmUgc29tZXRoaW5nIGRpcmVjdGx5IG91dCBvZiByZWFkKClcblJlYWRhYmxlLnByb3RvdHlwZS51bnNoaWZ0ID0gZnVuY3Rpb24gKGNodW5rKSB7XG4gIHJldHVybiByZWFkYWJsZUFkZENodW5rKHRoaXMsIGNodW5rLCBudWxsLCB0cnVlLCBmYWxzZSk7XG59O1xuZnVuY3Rpb24gcmVhZGFibGVBZGRDaHVuayhzdHJlYW0sIGNodW5rLCBlbmNvZGluZywgYWRkVG9Gcm9udCwgc2tpcENodW5rQ2hlY2spIHtcbiAgZGVidWcoJ3JlYWRhYmxlQWRkQ2h1bmsnLCBjaHVuayk7XG4gIHZhciBzdGF0ZSA9IHN0cmVhbS5fcmVhZGFibGVTdGF0ZTtcbiAgaWYgKGNodW5rID09PSBudWxsKSB7XG4gICAgc3RhdGUucmVhZGluZyA9IGZhbHNlO1xuICAgIG9uRW9mQ2h1bmsoc3RyZWFtLCBzdGF0ZSk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGVyO1xuICAgIGlmICghc2tpcENodW5rQ2hlY2spIGVyID0gY2h1bmtJbnZhbGlkKHN0YXRlLCBjaHVuayk7XG4gICAgaWYgKGVyKSB7XG4gICAgICBlcnJvck9yRGVzdHJveShzdHJlYW0sIGVyKTtcbiAgICB9IGVsc2UgaWYgKHN0YXRlLm9iamVjdE1vZGUgfHwgY2h1bmsgJiYgY2h1bmsubGVuZ3RoID4gMCkge1xuICAgICAgaWYgKHR5cGVvZiBjaHVuayAhPT0gJ3N0cmluZycgJiYgIXN0YXRlLm9iamVjdE1vZGUgJiYgT2JqZWN0LmdldFByb3RvdHlwZU9mKGNodW5rKSAhPT0gQnVmZmVyLnByb3RvdHlwZSkge1xuICAgICAgICBjaHVuayA9IF91aW50OEFycmF5VG9CdWZmZXIoY2h1bmspO1xuICAgICAgfVxuICAgICAgaWYgKGFkZFRvRnJvbnQpIHtcbiAgICAgICAgaWYgKHN0YXRlLmVuZEVtaXR0ZWQpIGVycm9yT3JEZXN0cm95KHN0cmVhbSwgbmV3IEVSUl9TVFJFQU1fVU5TSElGVF9BRlRFUl9FTkRfRVZFTlQoKSk7ZWxzZSBhZGRDaHVuayhzdHJlYW0sIHN0YXRlLCBjaHVuaywgdHJ1ZSk7XG4gICAgICB9IGVsc2UgaWYgKHN0YXRlLmVuZGVkKSB7XG4gICAgICAgIGVycm9yT3JEZXN0cm95KHN0cmVhbSwgbmV3IEVSUl9TVFJFQU1fUFVTSF9BRlRFUl9FT0YoKSk7XG4gICAgICB9IGVsc2UgaWYgKHN0YXRlLmRlc3Ryb3llZCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGF0ZS5yZWFkaW5nID0gZmFsc2U7XG4gICAgICAgIGlmIChzdGF0ZS5kZWNvZGVyICYmICFlbmNvZGluZykge1xuICAgICAgICAgIGNodW5rID0gc3RhdGUuZGVjb2Rlci53cml0ZShjaHVuayk7XG4gICAgICAgICAgaWYgKHN0YXRlLm9iamVjdE1vZGUgfHwgY2h1bmsubGVuZ3RoICE9PSAwKSBhZGRDaHVuayhzdHJlYW0sIHN0YXRlLCBjaHVuaywgZmFsc2UpO2Vsc2UgbWF5YmVSZWFkTW9yZShzdHJlYW0sIHN0YXRlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhZGRDaHVuayhzdHJlYW0sIHN0YXRlLCBjaHVuaywgZmFsc2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghYWRkVG9Gcm9udCkge1xuICAgICAgc3RhdGUucmVhZGluZyA9IGZhbHNlO1xuICAgICAgbWF5YmVSZWFkTW9yZShzdHJlYW0sIHN0YXRlKTtcbiAgICB9XG4gIH1cblxuICAvLyBXZSBjYW4gcHVzaCBtb3JlIGRhdGEgaWYgd2UgYXJlIGJlbG93IHRoZSBoaWdoV2F0ZXJNYXJrLlxuICAvLyBBbHNvLCBpZiB3ZSBoYXZlIG5vIGRhdGEgeWV0LCB3ZSBjYW4gc3RhbmQgc29tZSBtb3JlIGJ5dGVzLlxuICAvLyBUaGlzIGlzIHRvIHdvcmsgYXJvdW5kIGNhc2VzIHdoZXJlIGh3bT0wLCBzdWNoIGFzIHRoZSByZXBsLlxuICByZXR1cm4gIXN0YXRlLmVuZGVkICYmIChzdGF0ZS5sZW5ndGggPCBzdGF0ZS5oaWdoV2F0ZXJNYXJrIHx8IHN0YXRlLmxlbmd0aCA9PT0gMCk7XG59XG5mdW5jdGlvbiBhZGRDaHVuayhzdHJlYW0sIHN0YXRlLCBjaHVuaywgYWRkVG9Gcm9udCkge1xuICBpZiAoc3RhdGUuZmxvd2luZyAmJiBzdGF0ZS5sZW5ndGggPT09IDAgJiYgIXN0YXRlLnN5bmMpIHtcbiAgICBzdGF0ZS5hd2FpdERyYWluID0gMDtcbiAgICBzdHJlYW0uZW1pdCgnZGF0YScsIGNodW5rKTtcbiAgfSBlbHNlIHtcbiAgICAvLyB1cGRhdGUgdGhlIGJ1ZmZlciBpbmZvLlxuICAgIHN0YXRlLmxlbmd0aCArPSBzdGF0ZS5vYmplY3RNb2RlID8gMSA6IGNodW5rLmxlbmd0aDtcbiAgICBpZiAoYWRkVG9Gcm9udCkgc3RhdGUuYnVmZmVyLnVuc2hpZnQoY2h1bmspO2Vsc2Ugc3RhdGUuYnVmZmVyLnB1c2goY2h1bmspO1xuICAgIGlmIChzdGF0ZS5uZWVkUmVhZGFibGUpIGVtaXRSZWFkYWJsZShzdHJlYW0pO1xuICB9XG4gIG1heWJlUmVhZE1vcmUoc3RyZWFtLCBzdGF0ZSk7XG59XG5mdW5jdGlvbiBjaHVua0ludmFsaWQoc3RhdGUsIGNodW5rKSB7XG4gIHZhciBlcjtcbiAgaWYgKCFfaXNVaW50OEFycmF5KGNodW5rKSAmJiB0eXBlb2YgY2h1bmsgIT09ICdzdHJpbmcnICYmIGNodW5rICE9PSB1bmRlZmluZWQgJiYgIXN0YXRlLm9iamVjdE1vZGUpIHtcbiAgICBlciA9IG5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRSgnY2h1bmsnLCBbJ3N0cmluZycsICdCdWZmZXInLCAnVWludDhBcnJheSddLCBjaHVuayk7XG4gIH1cbiAgcmV0dXJuIGVyO1xufVxuUmVhZGFibGUucHJvdG90eXBlLmlzUGF1c2VkID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nID09PSBmYWxzZTtcbn07XG5cbi8vIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LlxuUmVhZGFibGUucHJvdG90eXBlLnNldEVuY29kaW5nID0gZnVuY3Rpb24gKGVuYykge1xuICBpZiAoIVN0cmluZ0RlY29kZXIpIFN0cmluZ0RlY29kZXIgPSByZXF1aXJlKCdzdHJpbmdfZGVjb2Rlci8nKS5TdHJpbmdEZWNvZGVyO1xuICB2YXIgZGVjb2RlciA9IG5ldyBTdHJpbmdEZWNvZGVyKGVuYyk7XG4gIHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVjb2RlciA9IGRlY29kZXI7XG4gIC8vIElmIHNldEVuY29kaW5nKG51bGwpLCBkZWNvZGVyLmVuY29kaW5nIGVxdWFscyB1dGY4XG4gIHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5jb2RpbmcgPSB0aGlzLl9yZWFkYWJsZVN0YXRlLmRlY29kZXIuZW5jb2Rpbmc7XG5cbiAgLy8gSXRlcmF0ZSBvdmVyIGN1cnJlbnQgYnVmZmVyIHRvIGNvbnZlcnQgYWxyZWFkeSBzdG9yZWQgQnVmZmVyczpcbiAgdmFyIHAgPSB0aGlzLl9yZWFkYWJsZVN0YXRlLmJ1ZmZlci5oZWFkO1xuICB2YXIgY29udGVudCA9ICcnO1xuICB3aGlsZSAocCAhPT0gbnVsbCkge1xuICAgIGNvbnRlbnQgKz0gZGVjb2Rlci53cml0ZShwLmRhdGEpO1xuICAgIHAgPSBwLm5leHQ7XG4gIH1cbiAgdGhpcy5fcmVhZGFibGVTdGF0ZS5idWZmZXIuY2xlYXIoKTtcbiAgaWYgKGNvbnRlbnQgIT09ICcnKSB0aGlzLl9yZWFkYWJsZVN0YXRlLmJ1ZmZlci5wdXNoKGNvbnRlbnQpO1xuICB0aGlzLl9yZWFkYWJsZVN0YXRlLmxlbmd0aCA9IGNvbnRlbnQubGVuZ3RoO1xuICByZXR1cm4gdGhpcztcbn07XG5cbi8vIERvbid0IHJhaXNlIHRoZSBod20gPiAxR0JcbnZhciBNQVhfSFdNID0gMHg0MDAwMDAwMDtcbmZ1bmN0aW9uIGNvbXB1dGVOZXdIaWdoV2F0ZXJNYXJrKG4pIHtcbiAgaWYgKG4gPj0gTUFYX0hXTSkge1xuICAgIC8vIFRPRE8ocm9uYWcpOiBUaHJvdyBFUlJfVkFMVUVfT1VUX09GX1JBTkdFLlxuICAgIG4gPSBNQVhfSFdNO1xuICB9IGVsc2Uge1xuICAgIC8vIEdldCB0aGUgbmV4dCBoaWdoZXN0IHBvd2VyIG9mIDIgdG8gcHJldmVudCBpbmNyZWFzaW5nIGh3bSBleGNlc3NpdmVseSBpblxuICAgIC8vIHRpbnkgYW1vdW50c1xuICAgIG4tLTtcbiAgICBuIHw9IG4gPj4+IDE7XG4gICAgbiB8PSBuID4+PiAyO1xuICAgIG4gfD0gbiA+Pj4gNDtcbiAgICBuIHw9IG4gPj4+IDg7XG4gICAgbiB8PSBuID4+PiAxNjtcbiAgICBuKys7XG4gIH1cbiAgcmV0dXJuIG47XG59XG5cbi8vIFRoaXMgZnVuY3Rpb24gaXMgZGVzaWduZWQgdG8gYmUgaW5saW5hYmxlLCBzbyBwbGVhc2UgdGFrZSBjYXJlIHdoZW4gbWFraW5nXG4vLyBjaGFuZ2VzIHRvIHRoZSBmdW5jdGlvbiBib2R5LlxuZnVuY3Rpb24gaG93TXVjaFRvUmVhZChuLCBzdGF0ZSkge1xuICBpZiAobiA8PSAwIHx8IHN0YXRlLmxlbmd0aCA9PT0gMCAmJiBzdGF0ZS5lbmRlZCkgcmV0dXJuIDA7XG4gIGlmIChzdGF0ZS5vYmplY3RNb2RlKSByZXR1cm4gMTtcbiAgaWYgKG4gIT09IG4pIHtcbiAgICAvLyBPbmx5IGZsb3cgb25lIGJ1ZmZlciBhdCBhIHRpbWVcbiAgICBpZiAoc3RhdGUuZmxvd2luZyAmJiBzdGF0ZS5sZW5ndGgpIHJldHVybiBzdGF0ZS5idWZmZXIuaGVhZC5kYXRhLmxlbmd0aDtlbHNlIHJldHVybiBzdGF0ZS5sZW5ndGg7XG4gIH1cbiAgLy8gSWYgd2UncmUgYXNraW5nIGZvciBtb3JlIHRoYW4gdGhlIGN1cnJlbnQgaHdtLCB0aGVuIHJhaXNlIHRoZSBod20uXG4gIGlmIChuID4gc3RhdGUuaGlnaFdhdGVyTWFyaykgc3RhdGUuaGlnaFdhdGVyTWFyayA9IGNvbXB1dGVOZXdIaWdoV2F0ZXJNYXJrKG4pO1xuICBpZiAobiA8PSBzdGF0ZS5sZW5ndGgpIHJldHVybiBuO1xuICAvLyBEb24ndCBoYXZlIGVub3VnaFxuICBpZiAoIXN0YXRlLmVuZGVkKSB7XG4gICAgc3RhdGUubmVlZFJlYWRhYmxlID0gdHJ1ZTtcbiAgICByZXR1cm4gMDtcbiAgfVxuICByZXR1cm4gc3RhdGUubGVuZ3RoO1xufVxuXG4vLyB5b3UgY2FuIG92ZXJyaWRlIGVpdGhlciB0aGlzIG1ldGhvZCwgb3IgdGhlIGFzeW5jIF9yZWFkKG4pIGJlbG93LlxuUmVhZGFibGUucHJvdG90eXBlLnJlYWQgPSBmdW5jdGlvbiAobikge1xuICBkZWJ1ZygncmVhZCcsIG4pO1xuICBuID0gcGFyc2VJbnQobiwgMTApO1xuICB2YXIgc3RhdGUgPSB0aGlzLl9yZWFkYWJsZVN0YXRlO1xuICB2YXIgbk9yaWcgPSBuO1xuICBpZiAobiAhPT0gMCkgc3RhdGUuZW1pdHRlZFJlYWRhYmxlID0gZmFsc2U7XG5cbiAgLy8gaWYgd2UncmUgZG9pbmcgcmVhZCgwKSB0byB0cmlnZ2VyIGEgcmVhZGFibGUgZXZlbnQsIGJ1dCB3ZVxuICAvLyBhbHJlYWR5IGhhdmUgYSBidW5jaCBvZiBkYXRhIGluIHRoZSBidWZmZXIsIHRoZW4ganVzdCB0cmlnZ2VyXG4gIC8vIHRoZSAncmVhZGFibGUnIGV2ZW50IGFuZCBtb3ZlIG9uLlxuICBpZiAobiA9PT0gMCAmJiBzdGF0ZS5uZWVkUmVhZGFibGUgJiYgKChzdGF0ZS5oaWdoV2F0ZXJNYXJrICE9PSAwID8gc3RhdGUubGVuZ3RoID49IHN0YXRlLmhpZ2hXYXRlck1hcmsgOiBzdGF0ZS5sZW5ndGggPiAwKSB8fCBzdGF0ZS5lbmRlZCkpIHtcbiAgICBkZWJ1ZygncmVhZDogZW1pdFJlYWRhYmxlJywgc3RhdGUubGVuZ3RoLCBzdGF0ZS5lbmRlZCk7XG4gICAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMCAmJiBzdGF0ZS5lbmRlZCkgZW5kUmVhZGFibGUodGhpcyk7ZWxzZSBlbWl0UmVhZGFibGUodGhpcyk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgbiA9IGhvd011Y2hUb1JlYWQobiwgc3RhdGUpO1xuXG4gIC8vIGlmIHdlJ3ZlIGVuZGVkLCBhbmQgd2UncmUgbm93IGNsZWFyLCB0aGVuIGZpbmlzaCBpdCB1cC5cbiAgaWYgKG4gPT09IDAgJiYgc3RhdGUuZW5kZWQpIHtcbiAgICBpZiAoc3RhdGUubGVuZ3RoID09PSAwKSBlbmRSZWFkYWJsZSh0aGlzKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIEFsbCB0aGUgYWN0dWFsIGNodW5rIGdlbmVyYXRpb24gbG9naWMgbmVlZHMgdG8gYmVcbiAgLy8gKmJlbG93KiB0aGUgY2FsbCB0byBfcmVhZC4gIFRoZSByZWFzb24gaXMgdGhhdCBpbiBjZXJ0YWluXG4gIC8vIHN5bnRoZXRpYyBzdHJlYW0gY2FzZXMsIHN1Y2ggYXMgcGFzc3Rocm91Z2ggc3RyZWFtcywgX3JlYWRcbiAgLy8gbWF5IGJlIGEgY29tcGxldGVseSBzeW5jaHJvbm91cyBvcGVyYXRpb24gd2hpY2ggbWF5IGNoYW5nZVxuICAvLyB0aGUgc3RhdGUgb2YgdGhlIHJlYWQgYnVmZmVyLCBwcm92aWRpbmcgZW5vdWdoIGRhdGEgd2hlblxuICAvLyBiZWZvcmUgdGhlcmUgd2FzICpub3QqIGVub3VnaC5cbiAgLy9cbiAgLy8gU28sIHRoZSBzdGVwcyBhcmU6XG4gIC8vIDEuIEZpZ3VyZSBvdXQgd2hhdCB0aGUgc3RhdGUgb2YgdGhpbmdzIHdpbGwgYmUgYWZ0ZXIgd2UgZG9cbiAgLy8gYSByZWFkIGZyb20gdGhlIGJ1ZmZlci5cbiAgLy9cbiAgLy8gMi4gSWYgdGhhdCByZXN1bHRpbmcgc3RhdGUgd2lsbCB0cmlnZ2VyIGEgX3JlYWQsIHRoZW4gY2FsbCBfcmVhZC5cbiAgLy8gTm90ZSB0aGF0IHRoaXMgbWF5IGJlIGFzeW5jaHJvbm91cywgb3Igc3luY2hyb25vdXMuICBZZXMsIGl0IGlzXG4gIC8vIGRlZXBseSB1Z2x5IHRvIHdyaXRlIEFQSXMgdGhpcyB3YXksIGJ1dCB0aGF0IHN0aWxsIGRvZXNuJ3QgbWVhblxuICAvLyB0aGF0IHRoZSBSZWFkYWJsZSBjbGFzcyBzaG91bGQgYmVoYXZlIGltcHJvcGVybHksIGFzIHN0cmVhbXMgYXJlXG4gIC8vIGRlc2lnbmVkIHRvIGJlIHN5bmMvYXN5bmMgYWdub3N0aWMuXG4gIC8vIFRha2Ugbm90ZSBpZiB0aGUgX3JlYWQgY2FsbCBpcyBzeW5jIG9yIGFzeW5jIChpZSwgaWYgdGhlIHJlYWQgY2FsbFxuICAvLyBoYXMgcmV0dXJuZWQgeWV0KSwgc28gdGhhdCB3ZSBrbm93IHdoZXRoZXIgb3Igbm90IGl0J3Mgc2FmZSB0byBlbWl0XG4gIC8vICdyZWFkYWJsZScgZXRjLlxuICAvL1xuICAvLyAzLiBBY3R1YWxseSBwdWxsIHRoZSByZXF1ZXN0ZWQgY2h1bmtzIG91dCBvZiB0aGUgYnVmZmVyIGFuZCByZXR1cm4uXG5cbiAgLy8gaWYgd2UgbmVlZCBhIHJlYWRhYmxlIGV2ZW50LCB0aGVuIHdlIG5lZWQgdG8gZG8gc29tZSByZWFkaW5nLlxuICB2YXIgZG9SZWFkID0gc3RhdGUubmVlZFJlYWRhYmxlO1xuICBkZWJ1ZygnbmVlZCByZWFkYWJsZScsIGRvUmVhZCk7XG5cbiAgLy8gaWYgd2UgY3VycmVudGx5IGhhdmUgbGVzcyB0aGFuIHRoZSBoaWdoV2F0ZXJNYXJrLCB0aGVuIGFsc28gcmVhZCBzb21lXG4gIGlmIChzdGF0ZS5sZW5ndGggPT09IDAgfHwgc3RhdGUubGVuZ3RoIC0gbiA8IHN0YXRlLmhpZ2hXYXRlck1hcmspIHtcbiAgICBkb1JlYWQgPSB0cnVlO1xuICAgIGRlYnVnKCdsZW5ndGggbGVzcyB0aGFuIHdhdGVybWFyaycsIGRvUmVhZCk7XG4gIH1cblxuICAvLyBob3dldmVyLCBpZiB3ZSd2ZSBlbmRlZCwgdGhlbiB0aGVyZSdzIG5vIHBvaW50LCBhbmQgaWYgd2UncmUgYWxyZWFkeVxuICAvLyByZWFkaW5nLCB0aGVuIGl0J3MgdW5uZWNlc3NhcnkuXG4gIGlmIChzdGF0ZS5lbmRlZCB8fCBzdGF0ZS5yZWFkaW5nKSB7XG4gICAgZG9SZWFkID0gZmFsc2U7XG4gICAgZGVidWcoJ3JlYWRpbmcgb3IgZW5kZWQnLCBkb1JlYWQpO1xuICB9IGVsc2UgaWYgKGRvUmVhZCkge1xuICAgIGRlYnVnKCdkbyByZWFkJyk7XG4gICAgc3RhdGUucmVhZGluZyA9IHRydWU7XG4gICAgc3RhdGUuc3luYyA9IHRydWU7XG4gICAgLy8gaWYgdGhlIGxlbmd0aCBpcyBjdXJyZW50bHkgemVybywgdGhlbiB3ZSAqbmVlZCogYSByZWFkYWJsZSBldmVudC5cbiAgICBpZiAoc3RhdGUubGVuZ3RoID09PSAwKSBzdGF0ZS5uZWVkUmVhZGFibGUgPSB0cnVlO1xuICAgIC8vIGNhbGwgaW50ZXJuYWwgcmVhZCBtZXRob2RcbiAgICB0aGlzLl9yZWFkKHN0YXRlLmhpZ2hXYXRlck1hcmspO1xuICAgIHN0YXRlLnN5bmMgPSBmYWxzZTtcbiAgICAvLyBJZiBfcmVhZCBwdXNoZWQgZGF0YSBzeW5jaHJvbm91c2x5LCB0aGVuIGByZWFkaW5nYCB3aWxsIGJlIGZhbHNlLFxuICAgIC8vIGFuZCB3ZSBuZWVkIHRvIHJlLWV2YWx1YXRlIGhvdyBtdWNoIGRhdGEgd2UgY2FuIHJldHVybiB0byB0aGUgdXNlci5cbiAgICBpZiAoIXN0YXRlLnJlYWRpbmcpIG4gPSBob3dNdWNoVG9SZWFkKG5PcmlnLCBzdGF0ZSk7XG4gIH1cbiAgdmFyIHJldDtcbiAgaWYgKG4gPiAwKSByZXQgPSBmcm9tTGlzdChuLCBzdGF0ZSk7ZWxzZSByZXQgPSBudWxsO1xuICBpZiAocmV0ID09PSBudWxsKSB7XG4gICAgc3RhdGUubmVlZFJlYWRhYmxlID0gc3RhdGUubGVuZ3RoIDw9IHN0YXRlLmhpZ2hXYXRlck1hcms7XG4gICAgbiA9IDA7XG4gIH0gZWxzZSB7XG4gICAgc3RhdGUubGVuZ3RoIC09IG47XG4gICAgc3RhdGUuYXdhaXREcmFpbiA9IDA7XG4gIH1cbiAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMCkge1xuICAgIC8vIElmIHdlIGhhdmUgbm90aGluZyBpbiB0aGUgYnVmZmVyLCB0aGVuIHdlIHdhbnQgdG8ga25vd1xuICAgIC8vIGFzIHNvb24gYXMgd2UgKmRvKiBnZXQgc29tZXRoaW5nIGludG8gdGhlIGJ1ZmZlci5cbiAgICBpZiAoIXN0YXRlLmVuZGVkKSBzdGF0ZS5uZWVkUmVhZGFibGUgPSB0cnVlO1xuXG4gICAgLy8gSWYgd2UgdHJpZWQgdG8gcmVhZCgpIHBhc3QgdGhlIEVPRiwgdGhlbiBlbWl0IGVuZCBvbiB0aGUgbmV4dCB0aWNrLlxuICAgIGlmIChuT3JpZyAhPT0gbiAmJiBzdGF0ZS5lbmRlZCkgZW5kUmVhZGFibGUodGhpcyk7XG4gIH1cbiAgaWYgKHJldCAhPT0gbnVsbCkgdGhpcy5lbWl0KCdkYXRhJywgcmV0KTtcbiAgcmV0dXJuIHJldDtcbn07XG5mdW5jdGlvbiBvbkVvZkNodW5rKHN0cmVhbSwgc3RhdGUpIHtcbiAgZGVidWcoJ29uRW9mQ2h1bmsnKTtcbiAgaWYgKHN0YXRlLmVuZGVkKSByZXR1cm47XG4gIGlmIChzdGF0ZS5kZWNvZGVyKSB7XG4gICAgdmFyIGNodW5rID0gc3RhdGUuZGVjb2Rlci5lbmQoKTtcbiAgICBpZiAoY2h1bmsgJiYgY2h1bmsubGVuZ3RoKSB7XG4gICAgICBzdGF0ZS5idWZmZXIucHVzaChjaHVuayk7XG4gICAgICBzdGF0ZS5sZW5ndGggKz0gc3RhdGUub2JqZWN0TW9kZSA/IDEgOiBjaHVuay5sZW5ndGg7XG4gICAgfVxuICB9XG4gIHN0YXRlLmVuZGVkID0gdHJ1ZTtcbiAgaWYgKHN0YXRlLnN5bmMpIHtcbiAgICAvLyBpZiB3ZSBhcmUgc3luYywgd2FpdCB1bnRpbCBuZXh0IHRpY2sgdG8gZW1pdCB0aGUgZGF0YS5cbiAgICAvLyBPdGhlcndpc2Ugd2UgcmlzayBlbWl0dGluZyBkYXRhIGluIHRoZSBmbG93KClcbiAgICAvLyB0aGUgcmVhZGFibGUgY29kZSB0cmlnZ2VycyBkdXJpbmcgYSByZWFkKCkgY2FsbFxuICAgIGVtaXRSZWFkYWJsZShzdHJlYW0pO1xuICB9IGVsc2Uge1xuICAgIC8vIGVtaXQgJ3JlYWRhYmxlJyBub3cgdG8gbWFrZSBzdXJlIGl0IGdldHMgcGlja2VkIHVwLlxuICAgIHN0YXRlLm5lZWRSZWFkYWJsZSA9IGZhbHNlO1xuICAgIGlmICghc3RhdGUuZW1pdHRlZFJlYWRhYmxlKSB7XG4gICAgICBzdGF0ZS5lbWl0dGVkUmVhZGFibGUgPSB0cnVlO1xuICAgICAgZW1pdFJlYWRhYmxlXyhzdHJlYW0pO1xuICAgIH1cbiAgfVxufVxuXG4vLyBEb24ndCBlbWl0IHJlYWRhYmxlIHJpZ2h0IGF3YXkgaW4gc3luYyBtb2RlLCBiZWNhdXNlIHRoaXMgY2FuIHRyaWdnZXJcbi8vIGFub3RoZXIgcmVhZCgpIGNhbGwgPT4gc3RhY2sgb3ZlcmZsb3cuICBUaGlzIHdheSwgaXQgbWlnaHQgdHJpZ2dlclxuLy8gYSBuZXh0VGljayByZWN1cnNpb24gd2FybmluZywgYnV0IHRoYXQncyBub3Qgc28gYmFkLlxuZnVuY3Rpb24gZW1pdFJlYWRhYmxlKHN0cmVhbSkge1xuICB2YXIgc3RhdGUgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGU7XG4gIGRlYnVnKCdlbWl0UmVhZGFibGUnLCBzdGF0ZS5uZWVkUmVhZGFibGUsIHN0YXRlLmVtaXR0ZWRSZWFkYWJsZSk7XG4gIHN0YXRlLm5lZWRSZWFkYWJsZSA9IGZhbHNlO1xuICBpZiAoIXN0YXRlLmVtaXR0ZWRSZWFkYWJsZSkge1xuICAgIGRlYnVnKCdlbWl0UmVhZGFibGUnLCBzdGF0ZS5mbG93aW5nKTtcbiAgICBzdGF0ZS5lbWl0dGVkUmVhZGFibGUgPSB0cnVlO1xuICAgIHByb2Nlc3MubmV4dFRpY2soZW1pdFJlYWRhYmxlXywgc3RyZWFtKTtcbiAgfVxufVxuZnVuY3Rpb24gZW1pdFJlYWRhYmxlXyhzdHJlYW0pIHtcbiAgdmFyIHN0YXRlID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlO1xuICBkZWJ1ZygnZW1pdFJlYWRhYmxlXycsIHN0YXRlLmRlc3Ryb3llZCwgc3RhdGUubGVuZ3RoLCBzdGF0ZS5lbmRlZCk7XG4gIGlmICghc3RhdGUuZGVzdHJveWVkICYmIChzdGF0ZS5sZW5ndGggfHwgc3RhdGUuZW5kZWQpKSB7XG4gICAgc3RyZWFtLmVtaXQoJ3JlYWRhYmxlJyk7XG4gICAgc3RhdGUuZW1pdHRlZFJlYWRhYmxlID0gZmFsc2U7XG4gIH1cblxuICAvLyBUaGUgc3RyZWFtIG5lZWRzIGFub3RoZXIgcmVhZGFibGUgZXZlbnQgaWZcbiAgLy8gMS4gSXQgaXMgbm90IGZsb3dpbmcsIGFzIHRoZSBmbG93IG1lY2hhbmlzbSB3aWxsIHRha2VcbiAgLy8gICAgY2FyZSBvZiBpdC5cbiAgLy8gMi4gSXQgaXMgbm90IGVuZGVkLlxuICAvLyAzLiBJdCBpcyBiZWxvdyB0aGUgaGlnaFdhdGVyTWFyaywgc28gd2UgY2FuIHNjaGVkdWxlXG4gIC8vICAgIGFub3RoZXIgcmVhZGFibGUgbGF0ZXIuXG4gIHN0YXRlLm5lZWRSZWFkYWJsZSA9ICFzdGF0ZS5mbG93aW5nICYmICFzdGF0ZS5lbmRlZCAmJiBzdGF0ZS5sZW5ndGggPD0gc3RhdGUuaGlnaFdhdGVyTWFyaztcbiAgZmxvdyhzdHJlYW0pO1xufVxuXG4vLyBhdCB0aGlzIHBvaW50LCB0aGUgdXNlciBoYXMgcHJlc3VtYWJseSBzZWVuIHRoZSAncmVhZGFibGUnIGV2ZW50LFxuLy8gYW5kIGNhbGxlZCByZWFkKCkgdG8gY29uc3VtZSBzb21lIGRhdGEuICB0aGF0IG1heSBoYXZlIHRyaWdnZXJlZFxuLy8gaW4gdHVybiBhbm90aGVyIF9yZWFkKG4pIGNhbGwsIGluIHdoaWNoIGNhc2UgcmVhZGluZyA9IHRydWUgaWZcbi8vIGl0J3MgaW4gcHJvZ3Jlc3MuXG4vLyBIb3dldmVyLCBpZiB3ZSdyZSBub3QgZW5kZWQsIG9yIHJlYWRpbmcsIGFuZCB0aGUgbGVuZ3RoIDwgaHdtLFxuLy8gdGhlbiBnbyBhaGVhZCBhbmQgdHJ5IHRvIHJlYWQgc29tZSBtb3JlIHByZWVtcHRpdmVseS5cbmZ1bmN0aW9uIG1heWJlUmVhZE1vcmUoc3RyZWFtLCBzdGF0ZSkge1xuICBpZiAoIXN0YXRlLnJlYWRpbmdNb3JlKSB7XG4gICAgc3RhdGUucmVhZGluZ01vcmUgPSB0cnVlO1xuICAgIHByb2Nlc3MubmV4dFRpY2sobWF5YmVSZWFkTW9yZV8sIHN0cmVhbSwgc3RhdGUpO1xuICB9XG59XG5mdW5jdGlvbiBtYXliZVJlYWRNb3JlXyhzdHJlYW0sIHN0YXRlKSB7XG4gIC8vIEF0dGVtcHQgdG8gcmVhZCBtb3JlIGRhdGEgaWYgd2Ugc2hvdWxkLlxuICAvL1xuICAvLyBUaGUgY29uZGl0aW9ucyBmb3IgcmVhZGluZyBtb3JlIGRhdGEgYXJlIChvbmUgb2YpOlxuICAvLyAtIE5vdCBlbm91Z2ggZGF0YSBidWZmZXJlZCAoc3RhdGUubGVuZ3RoIDwgc3RhdGUuaGlnaFdhdGVyTWFyaykuIFRoZSBsb29wXG4gIC8vICAgaXMgcmVzcG9uc2libGUgZm9yIGZpbGxpbmcgdGhlIGJ1ZmZlciB3aXRoIGVub3VnaCBkYXRhIGlmIHN1Y2ggZGF0YVxuICAvLyAgIGlzIGF2YWlsYWJsZS4gSWYgaGlnaFdhdGVyTWFyayBpcyAwIGFuZCB3ZSBhcmUgbm90IGluIHRoZSBmbG93aW5nIG1vZGVcbiAgLy8gICB3ZSBzaG91bGQgX25vdF8gYXR0ZW1wdCB0byBidWZmZXIgYW55IGV4dHJhIGRhdGEuIFdlJ2xsIGdldCBtb3JlIGRhdGFcbiAgLy8gICB3aGVuIHRoZSBzdHJlYW0gY29uc3VtZXIgY2FsbHMgcmVhZCgpIGluc3RlYWQuXG4gIC8vIC0gTm8gZGF0YSBpbiB0aGUgYnVmZmVyLCBhbmQgdGhlIHN0cmVhbSBpcyBpbiBmbG93aW5nIG1vZGUuIEluIHRoaXMgbW9kZVxuICAvLyAgIHRoZSBsb29wIGJlbG93IGlzIHJlc3BvbnNpYmxlIGZvciBlbnN1cmluZyByZWFkKCkgaXMgY2FsbGVkLiBGYWlsaW5nIHRvXG4gIC8vICAgY2FsbCByZWFkIGhlcmUgd291bGQgYWJvcnQgdGhlIGZsb3cgYW5kIHRoZXJlJ3Mgbm8gb3RoZXIgbWVjaGFuaXNtIGZvclxuICAvLyAgIGNvbnRpbnVpbmcgdGhlIGZsb3cgaWYgdGhlIHN0cmVhbSBjb25zdW1lciBoYXMganVzdCBzdWJzY3JpYmVkIHRvIHRoZVxuICAvLyAgICdkYXRhJyBldmVudC5cbiAgLy9cbiAgLy8gSW4gYWRkaXRpb24gdG8gdGhlIGFib3ZlIGNvbmRpdGlvbnMgdG8ga2VlcCByZWFkaW5nIGRhdGEsIHRoZSBmb2xsb3dpbmdcbiAgLy8gY29uZGl0aW9ucyBwcmV2ZW50IHRoZSBkYXRhIGZyb20gYmVpbmcgcmVhZDpcbiAgLy8gLSBUaGUgc3RyZWFtIGhhcyBlbmRlZCAoc3RhdGUuZW5kZWQpLlxuICAvLyAtIFRoZXJlIGlzIGFscmVhZHkgYSBwZW5kaW5nICdyZWFkJyBvcGVyYXRpb24gKHN0YXRlLnJlYWRpbmcpLiBUaGlzIGlzIGFcbiAgLy8gICBjYXNlIHdoZXJlIHRoZSB0aGUgc3RyZWFtIGhhcyBjYWxsZWQgdGhlIGltcGxlbWVudGF0aW9uIGRlZmluZWQgX3JlYWQoKVxuICAvLyAgIG1ldGhvZCwgYnV0IHRoZXkgYXJlIHByb2Nlc3NpbmcgdGhlIGNhbGwgYXN5bmNocm9ub3VzbHkgYW5kIGhhdmUgX25vdF9cbiAgLy8gICBjYWxsZWQgcHVzaCgpIHdpdGggbmV3IGRhdGEuIEluIHRoaXMgY2FzZSB3ZSBza2lwIHBlcmZvcm1pbmcgbW9yZVxuICAvLyAgIHJlYWQoKXMuIFRoZSBleGVjdXRpb24gZW5kcyBpbiB0aGlzIG1ldGhvZCBhZ2FpbiBhZnRlciB0aGUgX3JlYWQoKSBlbmRzXG4gIC8vICAgdXAgY2FsbGluZyBwdXNoKCkgd2l0aCBtb3JlIGRhdGEuXG4gIHdoaWxlICghc3RhdGUucmVhZGluZyAmJiAhc3RhdGUuZW5kZWQgJiYgKHN0YXRlLmxlbmd0aCA8IHN0YXRlLmhpZ2hXYXRlck1hcmsgfHwgc3RhdGUuZmxvd2luZyAmJiBzdGF0ZS5sZW5ndGggPT09IDApKSB7XG4gICAgdmFyIGxlbiA9IHN0YXRlLmxlbmd0aDtcbiAgICBkZWJ1ZygnbWF5YmVSZWFkTW9yZSByZWFkIDAnKTtcbiAgICBzdHJlYW0ucmVhZCgwKTtcbiAgICBpZiAobGVuID09PSBzdGF0ZS5sZW5ndGgpXG4gICAgICAvLyBkaWRuJ3QgZ2V0IGFueSBkYXRhLCBzdG9wIHNwaW5uaW5nLlxuICAgICAgYnJlYWs7XG4gIH1cbiAgc3RhdGUucmVhZGluZ01vcmUgPSBmYWxzZTtcbn1cblxuLy8gYWJzdHJhY3QgbWV0aG9kLiAgdG8gYmUgb3ZlcnJpZGRlbiBpbiBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBjbGFzc2VzLlxuLy8gY2FsbCBjYihlciwgZGF0YSkgd2hlcmUgZGF0YSBpcyA8PSBuIGluIGxlbmd0aC5cbi8vIGZvciB2aXJ0dWFsIChub24tc3RyaW5nLCBub24tYnVmZmVyKSBzdHJlYW1zLCBcImxlbmd0aFwiIGlzIHNvbWV3aGF0XG4vLyBhcmJpdHJhcnksIGFuZCBwZXJoYXBzIG5vdCB2ZXJ5IG1lYW5pbmdmdWwuXG5SZWFkYWJsZS5wcm90b3R5cGUuX3JlYWQgPSBmdW5jdGlvbiAobikge1xuICBlcnJvck9yRGVzdHJveSh0aGlzLCBuZXcgRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQoJ19yZWFkKCknKSk7XG59O1xuUmVhZGFibGUucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbiAoZGVzdCwgcGlwZU9wdHMpIHtcbiAgdmFyIHNyYyA9IHRoaXM7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG4gIHN3aXRjaCAoc3RhdGUucGlwZXNDb3VudCkge1xuICAgIGNhc2UgMDpcbiAgICAgIHN0YXRlLnBpcGVzID0gZGVzdDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMTpcbiAgICAgIHN0YXRlLnBpcGVzID0gW3N0YXRlLnBpcGVzLCBkZXN0XTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBzdGF0ZS5waXBlcy5wdXNoKGRlc3QpO1xuICAgICAgYnJlYWs7XG4gIH1cbiAgc3RhdGUucGlwZXNDb3VudCArPSAxO1xuICBkZWJ1ZygncGlwZSBjb3VudD0lZCBvcHRzPSVqJywgc3RhdGUucGlwZXNDb3VudCwgcGlwZU9wdHMpO1xuICB2YXIgZG9FbmQgPSAoIXBpcGVPcHRzIHx8IHBpcGVPcHRzLmVuZCAhPT0gZmFsc2UpICYmIGRlc3QgIT09IHByb2Nlc3Muc3Rkb3V0ICYmIGRlc3QgIT09IHByb2Nlc3Muc3RkZXJyO1xuICB2YXIgZW5kRm4gPSBkb0VuZCA/IG9uZW5kIDogdW5waXBlO1xuICBpZiAoc3RhdGUuZW5kRW1pdHRlZCkgcHJvY2Vzcy5uZXh0VGljayhlbmRGbik7ZWxzZSBzcmMub25jZSgnZW5kJywgZW5kRm4pO1xuICBkZXN0Lm9uKCd1bnBpcGUnLCBvbnVucGlwZSk7XG4gIGZ1bmN0aW9uIG9udW5waXBlKHJlYWRhYmxlLCB1bnBpcGVJbmZvKSB7XG4gICAgZGVidWcoJ29udW5waXBlJyk7XG4gICAgaWYgKHJlYWRhYmxlID09PSBzcmMpIHtcbiAgICAgIGlmICh1bnBpcGVJbmZvICYmIHVucGlwZUluZm8uaGFzVW5waXBlZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgdW5waXBlSW5mby5oYXNVbnBpcGVkID0gdHJ1ZTtcbiAgICAgICAgY2xlYW51cCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBmdW5jdGlvbiBvbmVuZCgpIHtcbiAgICBkZWJ1Zygnb25lbmQnKTtcbiAgICBkZXN0LmVuZCgpO1xuICB9XG5cbiAgLy8gd2hlbiB0aGUgZGVzdCBkcmFpbnMsIGl0IHJlZHVjZXMgdGhlIGF3YWl0RHJhaW4gY291bnRlclxuICAvLyBvbiB0aGUgc291cmNlLiAgVGhpcyB3b3VsZCBiZSBtb3JlIGVsZWdhbnQgd2l0aCBhIC5vbmNlKClcbiAgLy8gaGFuZGxlciBpbiBmbG93KCksIGJ1dCBhZGRpbmcgYW5kIHJlbW92aW5nIHJlcGVhdGVkbHkgaXNcbiAgLy8gdG9vIHNsb3cuXG4gIHZhciBvbmRyYWluID0gcGlwZU9uRHJhaW4oc3JjKTtcbiAgZGVzdC5vbignZHJhaW4nLCBvbmRyYWluKTtcbiAgdmFyIGNsZWFuZWRVcCA9IGZhbHNlO1xuICBmdW5jdGlvbiBjbGVhbnVwKCkge1xuICAgIGRlYnVnKCdjbGVhbnVwJyk7XG4gICAgLy8gY2xlYW51cCBldmVudCBoYW5kbGVycyBvbmNlIHRoZSBwaXBlIGlzIGJyb2tlblxuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2Nsb3NlJywgb25jbG9zZSk7XG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignZmluaXNoJywgb25maW5pc2gpO1xuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2RyYWluJywgb25kcmFpbik7XG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBvbmVycm9yKTtcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCd1bnBpcGUnLCBvbnVucGlwZSk7XG4gICAgc3JjLnJlbW92ZUxpc3RlbmVyKCdlbmQnLCBvbmVuZCk7XG4gICAgc3JjLnJlbW92ZUxpc3RlbmVyKCdlbmQnLCB1bnBpcGUpO1xuICAgIHNyYy5yZW1vdmVMaXN0ZW5lcignZGF0YScsIG9uZGF0YSk7XG4gICAgY2xlYW5lZFVwID0gdHJ1ZTtcblxuICAgIC8vIGlmIHRoZSByZWFkZXIgaXMgd2FpdGluZyBmb3IgYSBkcmFpbiBldmVudCBmcm9tIHRoaXNcbiAgICAvLyBzcGVjaWZpYyB3cml0ZXIsIHRoZW4gaXQgd291bGQgY2F1c2UgaXQgdG8gbmV2ZXIgc3RhcnRcbiAgICAvLyBmbG93aW5nIGFnYWluLlxuICAgIC8vIFNvLCBpZiB0aGlzIGlzIGF3YWl0aW5nIGEgZHJhaW4sIHRoZW4gd2UganVzdCBjYWxsIGl0IG5vdy5cbiAgICAvLyBJZiB3ZSBkb24ndCBrbm93LCB0aGVuIGFzc3VtZSB0aGF0IHdlIGFyZSB3YWl0aW5nIGZvciBvbmUuXG4gICAgaWYgKHN0YXRlLmF3YWl0RHJhaW4gJiYgKCFkZXN0Ll93cml0YWJsZVN0YXRlIHx8IGRlc3QuX3dyaXRhYmxlU3RhdGUubmVlZERyYWluKSkgb25kcmFpbigpO1xuICB9XG4gIHNyYy5vbignZGF0YScsIG9uZGF0YSk7XG4gIGZ1bmN0aW9uIG9uZGF0YShjaHVuaykge1xuICAgIGRlYnVnKCdvbmRhdGEnKTtcbiAgICB2YXIgcmV0ID0gZGVzdC53cml0ZShjaHVuayk7XG4gICAgZGVidWcoJ2Rlc3Qud3JpdGUnLCByZXQpO1xuICAgIGlmIChyZXQgPT09IGZhbHNlKSB7XG4gICAgICAvLyBJZiB0aGUgdXNlciB1bnBpcGVkIGR1cmluZyBgZGVzdC53cml0ZSgpYCwgaXQgaXMgcG9zc2libGVcbiAgICAgIC8vIHRvIGdldCBzdHVjayBpbiBhIHBlcm1hbmVudGx5IHBhdXNlZCBzdGF0ZSBpZiB0aGF0IHdyaXRlXG4gICAgICAvLyBhbHNvIHJldHVybmVkIGZhbHNlLlxuICAgICAgLy8gPT4gQ2hlY2sgd2hldGhlciBgZGVzdGAgaXMgc3RpbGwgYSBwaXBpbmcgZGVzdGluYXRpb24uXG4gICAgICBpZiAoKHN0YXRlLnBpcGVzQ291bnQgPT09IDEgJiYgc3RhdGUucGlwZXMgPT09IGRlc3QgfHwgc3RhdGUucGlwZXNDb3VudCA+IDEgJiYgaW5kZXhPZihzdGF0ZS5waXBlcywgZGVzdCkgIT09IC0xKSAmJiAhY2xlYW5lZFVwKSB7XG4gICAgICAgIGRlYnVnKCdmYWxzZSB3cml0ZSByZXNwb25zZSwgcGF1c2UnLCBzdGF0ZS5hd2FpdERyYWluKTtcbiAgICAgICAgc3RhdGUuYXdhaXREcmFpbisrO1xuICAgICAgfVxuICAgICAgc3JjLnBhdXNlKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gaWYgdGhlIGRlc3QgaGFzIGFuIGVycm9yLCB0aGVuIHN0b3AgcGlwaW5nIGludG8gaXQuXG4gIC8vIGhvd2V2ZXIsIGRvbid0IHN1cHByZXNzIHRoZSB0aHJvd2luZyBiZWhhdmlvciBmb3IgdGhpcy5cbiAgZnVuY3Rpb24gb25lcnJvcihlcikge1xuICAgIGRlYnVnKCdvbmVycm9yJywgZXIpO1xuICAgIHVucGlwZSgpO1xuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2Vycm9yJywgb25lcnJvcik7XG4gICAgaWYgKEVFbGlzdGVuZXJDb3VudChkZXN0LCAnZXJyb3InKSA9PT0gMCkgZXJyb3JPckRlc3Ryb3koZGVzdCwgZXIpO1xuICB9XG5cbiAgLy8gTWFrZSBzdXJlIG91ciBlcnJvciBoYW5kbGVyIGlzIGF0dGFjaGVkIGJlZm9yZSB1c2VybGFuZCBvbmVzLlxuICBwcmVwZW5kTGlzdGVuZXIoZGVzdCwgJ2Vycm9yJywgb25lcnJvcik7XG5cbiAgLy8gQm90aCBjbG9zZSBhbmQgZmluaXNoIHNob3VsZCB0cmlnZ2VyIHVucGlwZSwgYnV0IG9ubHkgb25jZS5cbiAgZnVuY3Rpb24gb25jbG9zZSgpIHtcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdmaW5pc2gnLCBvbmZpbmlzaCk7XG4gICAgdW5waXBlKCk7XG4gIH1cbiAgZGVzdC5vbmNlKCdjbG9zZScsIG9uY2xvc2UpO1xuICBmdW5jdGlvbiBvbmZpbmlzaCgpIHtcbiAgICBkZWJ1Zygnb25maW5pc2gnKTtcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIG9uY2xvc2UpO1xuICAgIHVucGlwZSgpO1xuICB9XG4gIGRlc3Qub25jZSgnZmluaXNoJywgb25maW5pc2gpO1xuICBmdW5jdGlvbiB1bnBpcGUoKSB7XG4gICAgZGVidWcoJ3VucGlwZScpO1xuICAgIHNyYy51bnBpcGUoZGVzdCk7XG4gIH1cblxuICAvLyB0ZWxsIHRoZSBkZXN0IHRoYXQgaXQncyBiZWluZyBwaXBlZCB0b1xuICBkZXN0LmVtaXQoJ3BpcGUnLCBzcmMpO1xuXG4gIC8vIHN0YXJ0IHRoZSBmbG93IGlmIGl0IGhhc24ndCBiZWVuIHN0YXJ0ZWQgYWxyZWFkeS5cbiAgaWYgKCFzdGF0ZS5mbG93aW5nKSB7XG4gICAgZGVidWcoJ3BpcGUgcmVzdW1lJyk7XG4gICAgc3JjLnJlc3VtZSgpO1xuICB9XG4gIHJldHVybiBkZXN0O1xufTtcbmZ1bmN0aW9uIHBpcGVPbkRyYWluKHNyYykge1xuICByZXR1cm4gZnVuY3Rpb24gcGlwZU9uRHJhaW5GdW5jdGlvblJlc3VsdCgpIHtcbiAgICB2YXIgc3RhdGUgPSBzcmMuX3JlYWRhYmxlU3RhdGU7XG4gICAgZGVidWcoJ3BpcGVPbkRyYWluJywgc3RhdGUuYXdhaXREcmFpbik7XG4gICAgaWYgKHN0YXRlLmF3YWl0RHJhaW4pIHN0YXRlLmF3YWl0RHJhaW4tLTtcbiAgICBpZiAoc3RhdGUuYXdhaXREcmFpbiA9PT0gMCAmJiBFRWxpc3RlbmVyQ291bnQoc3JjLCAnZGF0YScpKSB7XG4gICAgICBzdGF0ZS5mbG93aW5nID0gdHJ1ZTtcbiAgICAgIGZsb3coc3JjKTtcbiAgICB9XG4gIH07XG59XG5SZWFkYWJsZS5wcm90b3R5cGUudW5waXBlID0gZnVuY3Rpb24gKGRlc3QpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcbiAgdmFyIHVucGlwZUluZm8gPSB7XG4gICAgaGFzVW5waXBlZDogZmFsc2VcbiAgfTtcblxuICAvLyBpZiB3ZSdyZSBub3QgcGlwaW5nIGFueXdoZXJlLCB0aGVuIGRvIG5vdGhpbmcuXG4gIGlmIChzdGF0ZS5waXBlc0NvdW50ID09PSAwKSByZXR1cm4gdGhpcztcblxuICAvLyBqdXN0IG9uZSBkZXN0aW5hdGlvbi4gIG1vc3QgY29tbW9uIGNhc2UuXG4gIGlmIChzdGF0ZS5waXBlc0NvdW50ID09PSAxKSB7XG4gICAgLy8gcGFzc2VkIGluIG9uZSwgYnV0IGl0J3Mgbm90IHRoZSByaWdodCBvbmUuXG4gICAgaWYgKGRlc3QgJiYgZGVzdCAhPT0gc3RhdGUucGlwZXMpIHJldHVybiB0aGlzO1xuICAgIGlmICghZGVzdCkgZGVzdCA9IHN0YXRlLnBpcGVzO1xuXG4gICAgLy8gZ290IGEgbWF0Y2guXG4gICAgc3RhdGUucGlwZXMgPSBudWxsO1xuICAgIHN0YXRlLnBpcGVzQ291bnQgPSAwO1xuICAgIHN0YXRlLmZsb3dpbmcgPSBmYWxzZTtcbiAgICBpZiAoZGVzdCkgZGVzdC5lbWl0KCd1bnBpcGUnLCB0aGlzLCB1bnBpcGVJbmZvKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIHNsb3cgY2FzZS4gbXVsdGlwbGUgcGlwZSBkZXN0aW5hdGlvbnMuXG5cbiAgaWYgKCFkZXN0KSB7XG4gICAgLy8gcmVtb3ZlIGFsbC5cbiAgICB2YXIgZGVzdHMgPSBzdGF0ZS5waXBlcztcbiAgICB2YXIgbGVuID0gc3RhdGUucGlwZXNDb3VudDtcbiAgICBzdGF0ZS5waXBlcyA9IG51bGw7XG4gICAgc3RhdGUucGlwZXNDb3VudCA9IDA7XG4gICAgc3RhdGUuZmxvd2luZyA9IGZhbHNlO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIGRlc3RzW2ldLmVtaXQoJ3VucGlwZScsIHRoaXMsIHtcbiAgICAgIGhhc1VucGlwZWQ6IGZhbHNlXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyB0cnkgdG8gZmluZCB0aGUgcmlnaHQgb25lLlxuICB2YXIgaW5kZXggPSBpbmRleE9mKHN0YXRlLnBpcGVzLCBkZXN0KTtcbiAgaWYgKGluZGV4ID09PSAtMSkgcmV0dXJuIHRoaXM7XG4gIHN0YXRlLnBpcGVzLnNwbGljZShpbmRleCwgMSk7XG4gIHN0YXRlLnBpcGVzQ291bnQgLT0gMTtcbiAgaWYgKHN0YXRlLnBpcGVzQ291bnQgPT09IDEpIHN0YXRlLnBpcGVzID0gc3RhdGUucGlwZXNbMF07XG4gIGRlc3QuZW1pdCgndW5waXBlJywgdGhpcywgdW5waXBlSW5mbyk7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLy8gc2V0IHVwIGRhdGEgZXZlbnRzIGlmIHRoZXkgYXJlIGFza2VkIGZvclxuLy8gRW5zdXJlIHJlYWRhYmxlIGxpc3RlbmVycyBldmVudHVhbGx5IGdldCBzb21ldGhpbmdcblJlYWRhYmxlLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uIChldiwgZm4pIHtcbiAgdmFyIHJlcyA9IFN0cmVhbS5wcm90b3R5cGUub24uY2FsbCh0aGlzLCBldiwgZm4pO1xuICB2YXIgc3RhdGUgPSB0aGlzLl9yZWFkYWJsZVN0YXRlO1xuICBpZiAoZXYgPT09ICdkYXRhJykge1xuICAgIC8vIHVwZGF0ZSByZWFkYWJsZUxpc3RlbmluZyBzbyB0aGF0IHJlc3VtZSgpIG1heSBiZSBhIG5vLW9wXG4gICAgLy8gYSBmZXcgbGluZXMgZG93bi4gVGhpcyBpcyBuZWVkZWQgdG8gc3VwcG9ydCBvbmNlKCdyZWFkYWJsZScpLlxuICAgIHN0YXRlLnJlYWRhYmxlTGlzdGVuaW5nID0gdGhpcy5saXN0ZW5lckNvdW50KCdyZWFkYWJsZScpID4gMDtcblxuICAgIC8vIFRyeSBzdGFydCBmbG93aW5nIG9uIG5leHQgdGljayBpZiBzdHJlYW0gaXNuJ3QgZXhwbGljaXRseSBwYXVzZWRcbiAgICBpZiAoc3RhdGUuZmxvd2luZyAhPT0gZmFsc2UpIHRoaXMucmVzdW1lKCk7XG4gIH0gZWxzZSBpZiAoZXYgPT09ICdyZWFkYWJsZScpIHtcbiAgICBpZiAoIXN0YXRlLmVuZEVtaXR0ZWQgJiYgIXN0YXRlLnJlYWRhYmxlTGlzdGVuaW5nKSB7XG4gICAgICBzdGF0ZS5yZWFkYWJsZUxpc3RlbmluZyA9IHN0YXRlLm5lZWRSZWFkYWJsZSA9IHRydWU7XG4gICAgICBzdGF0ZS5mbG93aW5nID0gZmFsc2U7XG4gICAgICBzdGF0ZS5lbWl0dGVkUmVhZGFibGUgPSBmYWxzZTtcbiAgICAgIGRlYnVnKCdvbiByZWFkYWJsZScsIHN0YXRlLmxlbmd0aCwgc3RhdGUucmVhZGluZyk7XG4gICAgICBpZiAoc3RhdGUubGVuZ3RoKSB7XG4gICAgICAgIGVtaXRSZWFkYWJsZSh0aGlzKTtcbiAgICAgIH0gZWxzZSBpZiAoIXN0YXRlLnJlYWRpbmcpIHtcbiAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhuUmVhZGluZ05leHRUaWNrLCB0aGlzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlcztcbn07XG5SZWFkYWJsZS5wcm90b3R5cGUuYWRkTGlzdGVuZXIgPSBSZWFkYWJsZS5wcm90b3R5cGUub247XG5SZWFkYWJsZS5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIgPSBmdW5jdGlvbiAoZXYsIGZuKSB7XG4gIHZhciByZXMgPSBTdHJlYW0ucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyLmNhbGwodGhpcywgZXYsIGZuKTtcbiAgaWYgKGV2ID09PSAncmVhZGFibGUnKSB7XG4gICAgLy8gV2UgbmVlZCB0byBjaGVjayBpZiB0aGVyZSBpcyBzb21lb25lIHN0aWxsIGxpc3RlbmluZyB0b1xuICAgIC8vIHJlYWRhYmxlIGFuZCByZXNldCB0aGUgc3RhdGUuIEhvd2V2ZXIgdGhpcyBuZWVkcyB0byBoYXBwZW5cbiAgICAvLyBhZnRlciByZWFkYWJsZSBoYXMgYmVlbiBlbWl0dGVkIGJ1dCBiZWZvcmUgSS9PIChuZXh0VGljaykgdG9cbiAgICAvLyBzdXBwb3J0IG9uY2UoJ3JlYWRhYmxlJywgZm4pIGN5Y2xlcy4gVGhpcyBtZWFucyB0aGF0IGNhbGxpbmdcbiAgICAvLyByZXN1bWUgd2l0aGluIHRoZSBzYW1lIHRpY2sgd2lsbCBoYXZlIG5vXG4gICAgLy8gZWZmZWN0LlxuICAgIHByb2Nlc3MubmV4dFRpY2sodXBkYXRlUmVhZGFibGVMaXN0ZW5pbmcsIHRoaXMpO1xuICB9XG4gIHJldHVybiByZXM7XG59O1xuUmVhZGFibGUucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycyA9IGZ1bmN0aW9uIChldikge1xuICB2YXIgcmVzID0gU3RyZWFtLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgaWYgKGV2ID09PSAncmVhZGFibGUnIHx8IGV2ID09PSB1bmRlZmluZWQpIHtcbiAgICAvLyBXZSBuZWVkIHRvIGNoZWNrIGlmIHRoZXJlIGlzIHNvbWVvbmUgc3RpbGwgbGlzdGVuaW5nIHRvXG4gICAgLy8gcmVhZGFibGUgYW5kIHJlc2V0IHRoZSBzdGF0ZS4gSG93ZXZlciB0aGlzIG5lZWRzIHRvIGhhcHBlblxuICAgIC8vIGFmdGVyIHJlYWRhYmxlIGhhcyBiZWVuIGVtaXR0ZWQgYnV0IGJlZm9yZSBJL08gKG5leHRUaWNrKSB0b1xuICAgIC8vIHN1cHBvcnQgb25jZSgncmVhZGFibGUnLCBmbikgY3ljbGVzLiBUaGlzIG1lYW5zIHRoYXQgY2FsbGluZ1xuICAgIC8vIHJlc3VtZSB3aXRoaW4gdGhlIHNhbWUgdGljayB3aWxsIGhhdmUgbm9cbiAgICAvLyBlZmZlY3QuXG4gICAgcHJvY2Vzcy5uZXh0VGljayh1cGRhdGVSZWFkYWJsZUxpc3RlbmluZywgdGhpcyk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn07XG5mdW5jdGlvbiB1cGRhdGVSZWFkYWJsZUxpc3RlbmluZyhzZWxmKSB7XG4gIHZhciBzdGF0ZSA9IHNlbGYuX3JlYWRhYmxlU3RhdGU7XG4gIHN0YXRlLnJlYWRhYmxlTGlzdGVuaW5nID0gc2VsZi5saXN0ZW5lckNvdW50KCdyZWFkYWJsZScpID4gMDtcbiAgaWYgKHN0YXRlLnJlc3VtZVNjaGVkdWxlZCAmJiAhc3RhdGUucGF1c2VkKSB7XG4gICAgLy8gZmxvd2luZyBuZWVkcyB0byBiZSBzZXQgdG8gdHJ1ZSBub3csIG90aGVyd2lzZVxuICAgIC8vIHRoZSB1cGNvbWluZyByZXN1bWUgd2lsbCBub3QgZmxvdy5cbiAgICBzdGF0ZS5mbG93aW5nID0gdHJ1ZTtcblxuICAgIC8vIGNydWRlIHdheSB0byBjaGVjayBpZiB3ZSBzaG91bGQgcmVzdW1lXG4gIH0gZWxzZSBpZiAoc2VsZi5saXN0ZW5lckNvdW50KCdkYXRhJykgPiAwKSB7XG4gICAgc2VsZi5yZXN1bWUoKTtcbiAgfVxufVxuZnVuY3Rpb24gblJlYWRpbmdOZXh0VGljayhzZWxmKSB7XG4gIGRlYnVnKCdyZWFkYWJsZSBuZXh0dGljayByZWFkIDAnKTtcbiAgc2VsZi5yZWFkKDApO1xufVxuXG4vLyBwYXVzZSgpIGFuZCByZXN1bWUoKSBhcmUgcmVtbmFudHMgb2YgdGhlIGxlZ2FjeSByZWFkYWJsZSBzdHJlYW0gQVBJXG4vLyBJZiB0aGUgdXNlciB1c2VzIHRoZW0sIHRoZW4gc3dpdGNoIGludG8gb2xkIG1vZGUuXG5SZWFkYWJsZS5wcm90b3R5cGUucmVzdW1lID0gZnVuY3Rpb24gKCkge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9yZWFkYWJsZVN0YXRlO1xuICBpZiAoIXN0YXRlLmZsb3dpbmcpIHtcbiAgICBkZWJ1ZygncmVzdW1lJyk7XG4gICAgLy8gd2UgZmxvdyBvbmx5IGlmIHRoZXJlIGlzIG5vIG9uZSBsaXN0ZW5pbmdcbiAgICAvLyBmb3IgcmVhZGFibGUsIGJ1dCB3ZSBzdGlsbCBoYXZlIHRvIGNhbGxcbiAgICAvLyByZXN1bWUoKVxuICAgIHN0YXRlLmZsb3dpbmcgPSAhc3RhdGUucmVhZGFibGVMaXN0ZW5pbmc7XG4gICAgcmVzdW1lKHRoaXMsIHN0YXRlKTtcbiAgfVxuICBzdGF0ZS5wYXVzZWQgPSBmYWxzZTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuZnVuY3Rpb24gcmVzdW1lKHN0cmVhbSwgc3RhdGUpIHtcbiAgaWYgKCFzdGF0ZS5yZXN1bWVTY2hlZHVsZWQpIHtcbiAgICBzdGF0ZS5yZXN1bWVTY2hlZHVsZWQgPSB0cnVlO1xuICAgIHByb2Nlc3MubmV4dFRpY2socmVzdW1lXywgc3RyZWFtLCBzdGF0ZSk7XG4gIH1cbn1cbmZ1bmN0aW9uIHJlc3VtZV8oc3RyZWFtLCBzdGF0ZSkge1xuICBkZWJ1ZygncmVzdW1lJywgc3RhdGUucmVhZGluZyk7XG4gIGlmICghc3RhdGUucmVhZGluZykge1xuICAgIHN0cmVhbS5yZWFkKDApO1xuICB9XG4gIHN0YXRlLnJlc3VtZVNjaGVkdWxlZCA9IGZhbHNlO1xuICBzdHJlYW0uZW1pdCgncmVzdW1lJyk7XG4gIGZsb3coc3RyZWFtKTtcbiAgaWYgKHN0YXRlLmZsb3dpbmcgJiYgIXN0YXRlLnJlYWRpbmcpIHN0cmVhbS5yZWFkKDApO1xufVxuUmVhZGFibGUucHJvdG90eXBlLnBhdXNlID0gZnVuY3Rpb24gKCkge1xuICBkZWJ1ZygnY2FsbCBwYXVzZSBmbG93aW5nPSVqJywgdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nKTtcbiAgaWYgKHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyAhPT0gZmFsc2UpIHtcbiAgICBkZWJ1ZygncGF1c2UnKTtcbiAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcgPSBmYWxzZTtcbiAgICB0aGlzLmVtaXQoJ3BhdXNlJyk7XG4gIH1cbiAgdGhpcy5fcmVhZGFibGVTdGF0ZS5wYXVzZWQgPSB0cnVlO1xuICByZXR1cm4gdGhpcztcbn07XG5mdW5jdGlvbiBmbG93KHN0cmVhbSkge1xuICB2YXIgc3RhdGUgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGU7XG4gIGRlYnVnKCdmbG93Jywgc3RhdGUuZmxvd2luZyk7XG4gIHdoaWxlIChzdGF0ZS5mbG93aW5nICYmIHN0cmVhbS5yZWFkKCkgIT09IG51bGwpO1xufVxuXG4vLyB3cmFwIGFuIG9sZC1zdHlsZSBzdHJlYW0gYXMgdGhlIGFzeW5jIGRhdGEgc291cmNlLlxuLy8gVGhpcyBpcyAqbm90KiBwYXJ0IG9mIHRoZSByZWFkYWJsZSBzdHJlYW0gaW50ZXJmYWNlLlxuLy8gSXQgaXMgYW4gdWdseSB1bmZvcnR1bmF0ZSBtZXNzIG9mIGhpc3RvcnkuXG5SZWFkYWJsZS5wcm90b3R5cGUud3JhcCA9IGZ1bmN0aW9uIChzdHJlYW0pIHtcbiAgdmFyIF90aGlzID0gdGhpcztcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcbiAgdmFyIHBhdXNlZCA9IGZhbHNlO1xuICBzdHJlYW0ub24oJ2VuZCcsIGZ1bmN0aW9uICgpIHtcbiAgICBkZWJ1Zygnd3JhcHBlZCBlbmQnKTtcbiAgICBpZiAoc3RhdGUuZGVjb2RlciAmJiAhc3RhdGUuZW5kZWQpIHtcbiAgICAgIHZhciBjaHVuayA9IHN0YXRlLmRlY29kZXIuZW5kKCk7XG4gICAgICBpZiAoY2h1bmsgJiYgY2h1bmsubGVuZ3RoKSBfdGhpcy5wdXNoKGNodW5rKTtcbiAgICB9XG4gICAgX3RoaXMucHVzaChudWxsKTtcbiAgfSk7XG4gIHN0cmVhbS5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykge1xuICAgIGRlYnVnKCd3cmFwcGVkIGRhdGEnKTtcbiAgICBpZiAoc3RhdGUuZGVjb2RlcikgY2h1bmsgPSBzdGF0ZS5kZWNvZGVyLndyaXRlKGNodW5rKTtcblxuICAgIC8vIGRvbid0IHNraXAgb3ZlciBmYWxzeSB2YWx1ZXMgaW4gb2JqZWN0TW9kZVxuICAgIGlmIChzdGF0ZS5vYmplY3RNb2RlICYmIChjaHVuayA9PT0gbnVsbCB8fCBjaHVuayA9PT0gdW5kZWZpbmVkKSkgcmV0dXJuO2Vsc2UgaWYgKCFzdGF0ZS5vYmplY3RNb2RlICYmICghY2h1bmsgfHwgIWNodW5rLmxlbmd0aCkpIHJldHVybjtcbiAgICB2YXIgcmV0ID0gX3RoaXMucHVzaChjaHVuayk7XG4gICAgaWYgKCFyZXQpIHtcbiAgICAgIHBhdXNlZCA9IHRydWU7XG4gICAgICBzdHJlYW0ucGF1c2UoKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIHByb3h5IGFsbCB0aGUgb3RoZXIgbWV0aG9kcy5cbiAgLy8gaW1wb3J0YW50IHdoZW4gd3JhcHBpbmcgZmlsdGVycyBhbmQgZHVwbGV4ZXMuXG4gIGZvciAodmFyIGkgaW4gc3RyZWFtKSB7XG4gICAgaWYgKHRoaXNbaV0gPT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygc3RyZWFtW2ldID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzW2ldID0gZnVuY3Rpb24gbWV0aG9kV3JhcChtZXRob2QpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIG1ldGhvZFdyYXBSZXR1cm5GdW5jdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gc3RyZWFtW21ldGhvZF0uYXBwbHkoc3RyZWFtLCBhcmd1bWVudHMpO1xuICAgICAgICB9O1xuICAgICAgfShpKTtcbiAgICB9XG4gIH1cblxuICAvLyBwcm94eSBjZXJ0YWluIGltcG9ydGFudCBldmVudHMuXG4gIGZvciAodmFyIG4gPSAwOyBuIDwga1Byb3h5RXZlbnRzLmxlbmd0aDsgbisrKSB7XG4gICAgc3RyZWFtLm9uKGtQcm94eUV2ZW50c1tuXSwgdGhpcy5lbWl0LmJpbmQodGhpcywga1Byb3h5RXZlbnRzW25dKSk7XG4gIH1cblxuICAvLyB3aGVuIHdlIHRyeSB0byBjb25zdW1lIHNvbWUgbW9yZSBieXRlcywgc2ltcGx5IHVucGF1c2UgdGhlXG4gIC8vIHVuZGVybHlpbmcgc3RyZWFtLlxuICB0aGlzLl9yZWFkID0gZnVuY3Rpb24gKG4pIHtcbiAgICBkZWJ1Zygnd3JhcHBlZCBfcmVhZCcsIG4pO1xuICAgIGlmIChwYXVzZWQpIHtcbiAgICAgIHBhdXNlZCA9IGZhbHNlO1xuICAgICAgc3RyZWFtLnJlc3VtZSgpO1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuaWYgKHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicpIHtcbiAgUmVhZGFibGUucHJvdG90eXBlW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoY3JlYXRlUmVhZGFibGVTdHJlYW1Bc3luY0l0ZXJhdG9yID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNyZWF0ZVJlYWRhYmxlU3RyZWFtQXN5bmNJdGVyYXRvciA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvc3RyZWFtcy9hc3luY19pdGVyYXRvcicpO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlUmVhZGFibGVTdHJlYW1Bc3luY0l0ZXJhdG9yKHRoaXMpO1xuICB9O1xufVxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlYWRhYmxlLnByb3RvdHlwZSwgJ3JlYWRhYmxlSGlnaFdhdGVyTWFyaycsIHtcbiAgLy8gbWFraW5nIGl0IGV4cGxpY2l0IHRoaXMgcHJvcGVydHkgaXMgbm90IGVudW1lcmFibGVcbiAgLy8gYmVjYXVzZSBvdGhlcndpc2Ugc29tZSBwcm90b3R5cGUgbWFuaXB1bGF0aW9uIGluXG4gIC8vIHVzZXJsYW5kIHdpbGwgZmFpbFxuICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUuaGlnaFdhdGVyTWFyaztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoUmVhZGFibGUucHJvdG90eXBlLCAncmVhZGFibGVCdWZmZXInLCB7XG4gIC8vIG1ha2luZyBpdCBleHBsaWNpdCB0aGlzIHByb3BlcnR5IGlzIG5vdCBlbnVtZXJhYmxlXG4gIC8vIGJlY2F1c2Ugb3RoZXJ3aXNlIHNvbWUgcHJvdG90eXBlIG1hbmlwdWxhdGlvbiBpblxuICAvLyB1c2VybGFuZCB3aWxsIGZhaWxcbiAgZW51bWVyYWJsZTogZmFsc2UsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlICYmIHRoaXMuX3JlYWRhYmxlU3RhdGUuYnVmZmVyO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShSZWFkYWJsZS5wcm90b3R5cGUsICdyZWFkYWJsZUZsb3dpbmcnLCB7XG4gIC8vIG1ha2luZyBpdCBleHBsaWNpdCB0aGlzIHByb3BlcnR5IGlzIG5vdCBlbnVtZXJhYmxlXG4gIC8vIGJlY2F1c2Ugb3RoZXJ3aXNlIHNvbWUgcHJvdG90eXBlIG1hbmlwdWxhdGlvbiBpblxuICAvLyB1c2VybGFuZCB3aWxsIGZhaWxcbiAgZW51bWVyYWJsZTogZmFsc2UsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmc7XG4gIH0sXG4gIHNldDogZnVuY3Rpb24gc2V0KHN0YXRlKSB7XG4gICAgaWYgKHRoaXMuX3JlYWRhYmxlU3RhdGUpIHtcbiAgICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyA9IHN0YXRlO1xuICAgIH1cbiAgfVxufSk7XG5cbi8vIGV4cG9zZWQgZm9yIHRlc3RpbmcgcHVycG9zZXMgb25seS5cblJlYWRhYmxlLl9mcm9tTGlzdCA9IGZyb21MaXN0O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlYWRhYmxlLnByb3RvdHlwZSwgJ3JlYWRhYmxlTGVuZ3RoJywge1xuICAvLyBtYWtpbmcgaXQgZXhwbGljaXQgdGhpcyBwcm9wZXJ0eSBpcyBub3QgZW51bWVyYWJsZVxuICAvLyBiZWNhdXNlIG90aGVyd2lzZSBzb21lIHByb3RvdHlwZSBtYW5pcHVsYXRpb24gaW5cbiAgLy8gdXNlcmxhbmQgd2lsbCBmYWlsXG4gIGVudW1lcmFibGU6IGZhbHNlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5sZW5ndGg7XG4gIH1cbn0pO1xuXG4vLyBQbHVjayBvZmYgbiBieXRlcyBmcm9tIGFuIGFycmF5IG9mIGJ1ZmZlcnMuXG4vLyBMZW5ndGggaXMgdGhlIGNvbWJpbmVkIGxlbmd0aHMgb2YgYWxsIHRoZSBidWZmZXJzIGluIHRoZSBsaXN0LlxuLy8gVGhpcyBmdW5jdGlvbiBpcyBkZXNpZ25lZCB0byBiZSBpbmxpbmFibGUsIHNvIHBsZWFzZSB0YWtlIGNhcmUgd2hlbiBtYWtpbmdcbi8vIGNoYW5nZXMgdG8gdGhlIGZ1bmN0aW9uIGJvZHkuXG5mdW5jdGlvbiBmcm9tTGlzdChuLCBzdGF0ZSkge1xuICAvLyBub3RoaW5nIGJ1ZmZlcmVkXG4gIGlmIChzdGF0ZS5sZW5ndGggPT09IDApIHJldHVybiBudWxsO1xuICB2YXIgcmV0O1xuICBpZiAoc3RhdGUub2JqZWN0TW9kZSkgcmV0ID0gc3RhdGUuYnVmZmVyLnNoaWZ0KCk7ZWxzZSBpZiAoIW4gfHwgbiA+PSBzdGF0ZS5sZW5ndGgpIHtcbiAgICAvLyByZWFkIGl0IGFsbCwgdHJ1bmNhdGUgdGhlIGxpc3RcbiAgICBpZiAoc3RhdGUuZGVjb2RlcikgcmV0ID0gc3RhdGUuYnVmZmVyLmpvaW4oJycpO2Vsc2UgaWYgKHN0YXRlLmJ1ZmZlci5sZW5ndGggPT09IDEpIHJldCA9IHN0YXRlLmJ1ZmZlci5maXJzdCgpO2Vsc2UgcmV0ID0gc3RhdGUuYnVmZmVyLmNvbmNhdChzdGF0ZS5sZW5ndGgpO1xuICAgIHN0YXRlLmJ1ZmZlci5jbGVhcigpO1xuICB9IGVsc2Uge1xuICAgIC8vIHJlYWQgcGFydCBvZiBsaXN0XG4gICAgcmV0ID0gc3RhdGUuYnVmZmVyLmNvbnN1bWUobiwgc3RhdGUuZGVjb2Rlcik7XG4gIH1cbiAgcmV0dXJuIHJldDtcbn1cbmZ1bmN0aW9uIGVuZFJlYWRhYmxlKHN0cmVhbSkge1xuICB2YXIgc3RhdGUgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGU7XG4gIGRlYnVnKCdlbmRSZWFkYWJsZScsIHN0YXRlLmVuZEVtaXR0ZWQpO1xuICBpZiAoIXN0YXRlLmVuZEVtaXR0ZWQpIHtcbiAgICBzdGF0ZS5lbmRlZCA9IHRydWU7XG4gICAgcHJvY2Vzcy5uZXh0VGljayhlbmRSZWFkYWJsZU5ULCBzdGF0ZSwgc3RyZWFtKTtcbiAgfVxufVxuZnVuY3Rpb24gZW5kUmVhZGFibGVOVChzdGF0ZSwgc3RyZWFtKSB7XG4gIGRlYnVnKCdlbmRSZWFkYWJsZU5UJywgc3RhdGUuZW5kRW1pdHRlZCwgc3RhdGUubGVuZ3RoKTtcblxuICAvLyBDaGVjayB0aGF0IHdlIGRpZG4ndCBnZXQgb25lIGxhc3QgdW5zaGlmdC5cbiAgaWYgKCFzdGF0ZS5lbmRFbWl0dGVkICYmIHN0YXRlLmxlbmd0aCA9PT0gMCkge1xuICAgIHN0YXRlLmVuZEVtaXR0ZWQgPSB0cnVlO1xuICAgIHN0cmVhbS5yZWFkYWJsZSA9IGZhbHNlO1xuICAgIHN0cmVhbS5lbWl0KCdlbmQnKTtcbiAgICBpZiAoc3RhdGUuYXV0b0Rlc3Ryb3kpIHtcbiAgICAgIC8vIEluIGNhc2Ugb2YgZHVwbGV4IHN0cmVhbXMgd2UgbmVlZCBhIHdheSB0byBkZXRlY3RcbiAgICAgIC8vIGlmIHRoZSB3cml0YWJsZSBzaWRlIGlzIHJlYWR5IGZvciBhdXRvRGVzdHJveSBhcyB3ZWxsXG4gICAgICB2YXIgd1N0YXRlID0gc3RyZWFtLl93cml0YWJsZVN0YXRlO1xuICAgICAgaWYgKCF3U3RhdGUgfHwgd1N0YXRlLmF1dG9EZXN0cm95ICYmIHdTdGF0ZS5maW5pc2hlZCkge1xuICAgICAgICBzdHJlYW0uZGVzdHJveSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuaWYgKHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicpIHtcbiAgUmVhZGFibGUuZnJvbSA9IGZ1bmN0aW9uIChpdGVyYWJsZSwgb3B0cykge1xuICAgIGlmIChmcm9tID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGZyb20gPSByZXF1aXJlKCcuL2ludGVybmFsL3N0cmVhbXMvZnJvbScpO1xuICAgIH1cbiAgICByZXR1cm4gZnJvbShSZWFkYWJsZSwgaXRlcmFibGUsIG9wdHMpO1xuICB9O1xufVxuZnVuY3Rpb24gaW5kZXhPZih4cywgeCkge1xuICBmb3IgKHZhciBpID0gMCwgbCA9IHhzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGlmICh4c1tpXSA9PT0geCkgcmV0dXJuIGk7XG4gIH1cbiAgcmV0dXJuIC0xO1xufSIsICIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuLy8gYSB0cmFuc2Zvcm0gc3RyZWFtIGlzIGEgcmVhZGFibGUvd3JpdGFibGUgc3RyZWFtIHdoZXJlIHlvdSBkb1xuLy8gc29tZXRoaW5nIHdpdGggdGhlIGRhdGEuICBTb21ldGltZXMgaXQncyBjYWxsZWQgYSBcImZpbHRlclwiLFxuLy8gYnV0IHRoYXQncyBub3QgYSBncmVhdCBuYW1lIGZvciBpdCwgc2luY2UgdGhhdCBpbXBsaWVzIGEgdGhpbmcgd2hlcmVcbi8vIHNvbWUgYml0cyBwYXNzIHRocm91Z2gsIGFuZCBvdGhlcnMgYXJlIHNpbXBseSBpZ25vcmVkLiAgKFRoYXQgd291bGRcbi8vIGJlIGEgdmFsaWQgZXhhbXBsZSBvZiBhIHRyYW5zZm9ybSwgb2YgY291cnNlLilcbi8vXG4vLyBXaGlsZSB0aGUgb3V0cHV0IGlzIGNhdXNhbGx5IHJlbGF0ZWQgdG8gdGhlIGlucHV0LCBpdCdzIG5vdCBhXG4vLyBuZWNlc3NhcmlseSBzeW1tZXRyaWMgb3Igc3luY2hyb25vdXMgdHJhbnNmb3JtYXRpb24uICBGb3IgZXhhbXBsZSxcbi8vIGEgemxpYiBzdHJlYW0gbWlnaHQgdGFrZSBtdWx0aXBsZSBwbGFpbi10ZXh0IHdyaXRlcygpLCBhbmQgdGhlblxuLy8gZW1pdCBhIHNpbmdsZSBjb21wcmVzc2VkIGNodW5rIHNvbWUgdGltZSBpbiB0aGUgZnV0dXJlLlxuLy9cbi8vIEhlcmUncyBob3cgdGhpcyB3b3Jrczpcbi8vXG4vLyBUaGUgVHJhbnNmb3JtIHN0cmVhbSBoYXMgYWxsIHRoZSBhc3BlY3RzIG9mIHRoZSByZWFkYWJsZSBhbmQgd3JpdGFibGVcbi8vIHN0cmVhbSBjbGFzc2VzLiAgV2hlbiB5b3Ugd3JpdGUoY2h1bmspLCB0aGF0IGNhbGxzIF93cml0ZShjaHVuayxjYilcbi8vIGludGVybmFsbHksIGFuZCByZXR1cm5zIGZhbHNlIGlmIHRoZXJlJ3MgYSBsb3Qgb2YgcGVuZGluZyB3cml0ZXNcbi8vIGJ1ZmZlcmVkIHVwLiAgV2hlbiB5b3UgY2FsbCByZWFkKCksIHRoYXQgY2FsbHMgX3JlYWQobikgdW50aWxcbi8vIHRoZXJlJ3MgZW5vdWdoIHBlbmRpbmcgcmVhZGFibGUgZGF0YSBidWZmZXJlZCB1cC5cbi8vXG4vLyBJbiBhIHRyYW5zZm9ybSBzdHJlYW0sIHRoZSB3cml0dGVuIGRhdGEgaXMgcGxhY2VkIGluIGEgYnVmZmVyLiAgV2hlblxuLy8gX3JlYWQobikgaXMgY2FsbGVkLCBpdCB0cmFuc2Zvcm1zIHRoZSBxdWV1ZWQgdXAgZGF0YSwgY2FsbGluZyB0aGVcbi8vIGJ1ZmZlcmVkIF93cml0ZSBjYidzIGFzIGl0IGNvbnN1bWVzIGNodW5rcy4gIElmIGNvbnN1bWluZyBhIHNpbmdsZVxuLy8gd3JpdHRlbiBjaHVuayB3b3VsZCByZXN1bHQgaW4gbXVsdGlwbGUgb3V0cHV0IGNodW5rcywgdGhlbiB0aGUgZmlyc3Rcbi8vIG91dHB1dHRlZCBiaXQgY2FsbHMgdGhlIHJlYWRjYiwgYW5kIHN1YnNlcXVlbnQgY2h1bmtzIGp1c3QgZ28gaW50b1xuLy8gdGhlIHJlYWQgYnVmZmVyLCBhbmQgd2lsbCBjYXVzZSBpdCB0byBlbWl0ICdyZWFkYWJsZScgaWYgbmVjZXNzYXJ5LlxuLy9cbi8vIFRoaXMgd2F5LCBiYWNrLXByZXNzdXJlIGlzIGFjdHVhbGx5IGRldGVybWluZWQgYnkgdGhlIHJlYWRpbmcgc2lkZSxcbi8vIHNpbmNlIF9yZWFkIGhhcyB0byBiZSBjYWxsZWQgdG8gc3RhcnQgcHJvY2Vzc2luZyBhIG5ldyBjaHVuay4gIEhvd2V2ZXIsXG4vLyBhIHBhdGhvbG9naWNhbCBpbmZsYXRlIHR5cGUgb2YgdHJhbnNmb3JtIGNhbiBjYXVzZSBleGNlc3NpdmUgYnVmZmVyaW5nXG4vLyBoZXJlLiAgRm9yIGV4YW1wbGUsIGltYWdpbmUgYSBzdHJlYW0gd2hlcmUgZXZlcnkgYnl0ZSBvZiBpbnB1dCBpc1xuLy8gaW50ZXJwcmV0ZWQgYXMgYW4gaW50ZWdlciBmcm9tIDAtMjU1LCBhbmQgdGhlbiByZXN1bHRzIGluIHRoYXQgbWFueVxuLy8gYnl0ZXMgb2Ygb3V0cHV0LiAgV3JpdGluZyB0aGUgNCBieXRlcyB7ZmYsZmYsZmYsZmZ9IHdvdWxkIHJlc3VsdCBpblxuLy8gMWtiIG9mIGRhdGEgYmVpbmcgb3V0cHV0LiAgSW4gdGhpcyBjYXNlLCB5b3UgY291bGQgd3JpdGUgYSB2ZXJ5IHNtYWxsXG4vLyBhbW91bnQgb2YgaW5wdXQsIGFuZCBlbmQgdXAgd2l0aCBhIHZlcnkgbGFyZ2UgYW1vdW50IG9mIG91dHB1dC4gIEluXG4vLyBzdWNoIGEgcGF0aG9sb2dpY2FsIGluZmxhdGluZyBtZWNoYW5pc20sIHRoZXJlJ2QgYmUgbm8gd2F5IHRvIHRlbGxcbi8vIHRoZSBzeXN0ZW0gdG8gc3RvcCBkb2luZyB0aGUgdHJhbnNmb3JtLiAgQSBzaW5nbGUgNE1CIHdyaXRlIGNvdWxkXG4vLyBjYXVzZSB0aGUgc3lzdGVtIHRvIHJ1biBvdXQgb2YgbWVtb3J5LlxuLy9cbi8vIEhvd2V2ZXIsIGV2ZW4gaW4gc3VjaCBhIHBhdGhvbG9naWNhbCBjYXNlLCBvbmx5IGEgc2luZ2xlIHdyaXR0ZW4gY2h1bmtcbi8vIHdvdWxkIGJlIGNvbnN1bWVkLCBhbmQgdGhlbiB0aGUgcmVzdCB3b3VsZCB3YWl0ICh1bi10cmFuc2Zvcm1lZCkgdW50aWxcbi8vIHRoZSByZXN1bHRzIG9mIHRoZSBwcmV2aW91cyB0cmFuc2Zvcm1lZCBjaHVuayB3ZXJlIGNvbnN1bWVkLlxuXG4ndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gVHJhbnNmb3JtO1xudmFyIF9yZXF1aXJlJGNvZGVzID0gcmVxdWlyZSgnLi4vZXJyb3JzJykuY29kZXMsXG4gIEVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVEID0gX3JlcXVpcmUkY29kZXMuRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQsXG4gIEVSUl9NVUxUSVBMRV9DQUxMQkFDSyA9IF9yZXF1aXJlJGNvZGVzLkVSUl9NVUxUSVBMRV9DQUxMQkFDSyxcbiAgRVJSX1RSQU5TRk9STV9BTFJFQURZX1RSQU5TRk9STUlORyA9IF9yZXF1aXJlJGNvZGVzLkVSUl9UUkFOU0ZPUk1fQUxSRUFEWV9UUkFOU0ZPUk1JTkcsXG4gIEVSUl9UUkFOU0ZPUk1fV0lUSF9MRU5HVEhfMCA9IF9yZXF1aXJlJGNvZGVzLkVSUl9UUkFOU0ZPUk1fV0lUSF9MRU5HVEhfMDtcbnZhciBEdXBsZXggPSByZXF1aXJlKCcuL19zdHJlYW1fZHVwbGV4Jyk7XG5yZXF1aXJlKCdpbmhlcml0cycpKFRyYW5zZm9ybSwgRHVwbGV4KTtcbmZ1bmN0aW9uIGFmdGVyVHJhbnNmb3JtKGVyLCBkYXRhKSB7XG4gIHZhciB0cyA9IHRoaXMuX3RyYW5zZm9ybVN0YXRlO1xuICB0cy50cmFuc2Zvcm1pbmcgPSBmYWxzZTtcbiAgdmFyIGNiID0gdHMud3JpdGVjYjtcbiAgaWYgKGNiID09PSBudWxsKSB7XG4gICAgcmV0dXJuIHRoaXMuZW1pdCgnZXJyb3InLCBuZXcgRVJSX01VTFRJUExFX0NBTExCQUNLKCkpO1xuICB9XG4gIHRzLndyaXRlY2h1bmsgPSBudWxsO1xuICB0cy53cml0ZWNiID0gbnVsbDtcbiAgaWYgKGRhdGEgIT0gbnVsbClcbiAgICAvLyBzaW5nbGUgZXF1YWxzIGNoZWNrIGZvciBib3RoIGBudWxsYCBhbmQgYHVuZGVmaW5lZGBcbiAgICB0aGlzLnB1c2goZGF0YSk7XG4gIGNiKGVyKTtcbiAgdmFyIHJzID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcbiAgcnMucmVhZGluZyA9IGZhbHNlO1xuICBpZiAocnMubmVlZFJlYWRhYmxlIHx8IHJzLmxlbmd0aCA8IHJzLmhpZ2hXYXRlck1hcmspIHtcbiAgICB0aGlzLl9yZWFkKHJzLmhpZ2hXYXRlck1hcmspO1xuICB9XG59XG5mdW5jdGlvbiBUcmFuc2Zvcm0ob3B0aW9ucykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgVHJhbnNmb3JtKSkgcmV0dXJuIG5ldyBUcmFuc2Zvcm0ob3B0aW9ucyk7XG4gIER1cGxleC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuICB0aGlzLl90cmFuc2Zvcm1TdGF0ZSA9IHtcbiAgICBhZnRlclRyYW5zZm9ybTogYWZ0ZXJUcmFuc2Zvcm0uYmluZCh0aGlzKSxcbiAgICBuZWVkVHJhbnNmb3JtOiBmYWxzZSxcbiAgICB0cmFuc2Zvcm1pbmc6IGZhbHNlLFxuICAgIHdyaXRlY2I6IG51bGwsXG4gICAgd3JpdGVjaHVuazogbnVsbCxcbiAgICB3cml0ZWVuY29kaW5nOiBudWxsXG4gIH07XG5cbiAgLy8gc3RhcnQgb3V0IGFza2luZyBmb3IgYSByZWFkYWJsZSBldmVudCBvbmNlIGRhdGEgaXMgdHJhbnNmb3JtZWQuXG4gIHRoaXMuX3JlYWRhYmxlU3RhdGUubmVlZFJlYWRhYmxlID0gdHJ1ZTtcblxuICAvLyB3ZSBoYXZlIGltcGxlbWVudGVkIHRoZSBfcmVhZCBtZXRob2QsIGFuZCBkb25lIHRoZSBvdGhlciB0aGluZ3NcbiAgLy8gdGhhdCBSZWFkYWJsZSB3YW50cyBiZWZvcmUgdGhlIGZpcnN0IF9yZWFkIGNhbGwsIHNvIHVuc2V0IHRoZVxuICAvLyBzeW5jIGd1YXJkIGZsYWcuXG4gIHRoaXMuX3JlYWRhYmxlU3RhdGUuc3luYyA9IGZhbHNlO1xuICBpZiAob3B0aW9ucykge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy50cmFuc2Zvcm0gPT09ICdmdW5jdGlvbicpIHRoaXMuX3RyYW5zZm9ybSA9IG9wdGlvbnMudHJhbnNmb3JtO1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5mbHVzaCA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5fZmx1c2ggPSBvcHRpb25zLmZsdXNoO1xuICB9XG5cbiAgLy8gV2hlbiB0aGUgd3JpdGFibGUgc2lkZSBmaW5pc2hlcywgdGhlbiBmbHVzaCBvdXQgYW55dGhpbmcgcmVtYWluaW5nLlxuICB0aGlzLm9uKCdwcmVmaW5pc2gnLCBwcmVmaW5pc2gpO1xufVxuZnVuY3Rpb24gcHJlZmluaXNoKCkge1xuICB2YXIgX3RoaXMgPSB0aGlzO1xuICBpZiAodHlwZW9mIHRoaXMuX2ZsdXNoID09PSAnZnVuY3Rpb24nICYmICF0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZCkge1xuICAgIHRoaXMuX2ZsdXNoKGZ1bmN0aW9uIChlciwgZGF0YSkge1xuICAgICAgZG9uZShfdGhpcywgZXIsIGRhdGEpO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGRvbmUodGhpcywgbnVsbCwgbnVsbCk7XG4gIH1cbn1cblRyYW5zZm9ybS5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcpIHtcbiAgdGhpcy5fdHJhbnNmb3JtU3RhdGUubmVlZFRyYW5zZm9ybSA9IGZhbHNlO1xuICByZXR1cm4gRHVwbGV4LnByb3RvdHlwZS5wdXNoLmNhbGwodGhpcywgY2h1bmssIGVuY29kaW5nKTtcbn07XG5cbi8vIFRoaXMgaXMgdGhlIHBhcnQgd2hlcmUgeW91IGRvIHN0dWZmIVxuLy8gb3ZlcnJpZGUgdGhpcyBmdW5jdGlvbiBpbiBpbXBsZW1lbnRhdGlvbiBjbGFzc2VzLlxuLy8gJ2NodW5rJyBpcyBhbiBpbnB1dCBjaHVuay5cbi8vXG4vLyBDYWxsIGBwdXNoKG5ld0NodW5rKWAgdG8gcGFzcyBhbG9uZyB0cmFuc2Zvcm1lZCBvdXRwdXRcbi8vIHRvIHRoZSByZWFkYWJsZSBzaWRlLiAgWW91IG1heSBjYWxsICdwdXNoJyB6ZXJvIG9yIG1vcmUgdGltZXMuXG4vL1xuLy8gQ2FsbCBgY2IoZXJyKWAgd2hlbiB5b3UgYXJlIGRvbmUgd2l0aCB0aGlzIGNodW5rLiAgSWYgeW91IHBhc3Ncbi8vIGFuIGVycm9yLCB0aGVuIHRoYXQnbGwgcHV0IHRoZSBodXJ0IG9uIHRoZSB3aG9sZSBvcGVyYXRpb24uICBJZiB5b3Vcbi8vIG5ldmVyIGNhbGwgY2IoKSwgdGhlbiB5b3UnbGwgbmV2ZXIgZ2V0IGFub3RoZXIgY2h1bmsuXG5UcmFuc2Zvcm0ucHJvdG90eXBlLl90cmFuc2Zvcm0gPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICBjYihuZXcgRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQoJ190cmFuc2Zvcm0oKScpKTtcbn07XG5UcmFuc2Zvcm0ucHJvdG90eXBlLl93cml0ZSA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIHZhciB0cyA9IHRoaXMuX3RyYW5zZm9ybVN0YXRlO1xuICB0cy53cml0ZWNiID0gY2I7XG4gIHRzLndyaXRlY2h1bmsgPSBjaHVuaztcbiAgdHMud3JpdGVlbmNvZGluZyA9IGVuY29kaW5nO1xuICBpZiAoIXRzLnRyYW5zZm9ybWluZykge1xuICAgIHZhciBycyA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG4gICAgaWYgKHRzLm5lZWRUcmFuc2Zvcm0gfHwgcnMubmVlZFJlYWRhYmxlIHx8IHJzLmxlbmd0aCA8IHJzLmhpZ2hXYXRlck1hcmspIHRoaXMuX3JlYWQocnMuaGlnaFdhdGVyTWFyayk7XG4gIH1cbn07XG5cbi8vIERvZXNuJ3QgbWF0dGVyIHdoYXQgdGhlIGFyZ3MgYXJlIGhlcmUuXG4vLyBfdHJhbnNmb3JtIGRvZXMgYWxsIHRoZSB3b3JrLlxuLy8gVGhhdCB3ZSBnb3QgaGVyZSBtZWFucyB0aGF0IHRoZSByZWFkYWJsZSBzaWRlIHdhbnRzIG1vcmUgZGF0YS5cblRyYW5zZm9ybS5wcm90b3R5cGUuX3JlYWQgPSBmdW5jdGlvbiAobikge1xuICB2YXIgdHMgPSB0aGlzLl90cmFuc2Zvcm1TdGF0ZTtcbiAgaWYgKHRzLndyaXRlY2h1bmsgIT09IG51bGwgJiYgIXRzLnRyYW5zZm9ybWluZykge1xuICAgIHRzLnRyYW5zZm9ybWluZyA9IHRydWU7XG4gICAgdGhpcy5fdHJhbnNmb3JtKHRzLndyaXRlY2h1bmssIHRzLndyaXRlZW5jb2RpbmcsIHRzLmFmdGVyVHJhbnNmb3JtKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBtYXJrIHRoYXQgd2UgbmVlZCBhIHRyYW5zZm9ybSwgc28gdGhhdCBhbnkgZGF0YSB0aGF0IGNvbWVzIGluXG4gICAgLy8gd2lsbCBnZXQgcHJvY2Vzc2VkLCBub3cgdGhhdCB3ZSd2ZSBhc2tlZCBmb3IgaXQuXG4gICAgdHMubmVlZFRyYW5zZm9ybSA9IHRydWU7XG4gIH1cbn07XG5UcmFuc2Zvcm0ucHJvdG90eXBlLl9kZXN0cm95ID0gZnVuY3Rpb24gKGVyciwgY2IpIHtcbiAgRHVwbGV4LnByb3RvdHlwZS5fZGVzdHJveS5jYWxsKHRoaXMsIGVyciwgZnVuY3Rpb24gKGVycjIpIHtcbiAgICBjYihlcnIyKTtcbiAgfSk7XG59O1xuZnVuY3Rpb24gZG9uZShzdHJlYW0sIGVyLCBkYXRhKSB7XG4gIGlmIChlcikgcmV0dXJuIHN0cmVhbS5lbWl0KCdlcnJvcicsIGVyKTtcbiAgaWYgKGRhdGEgIT0gbnVsbClcbiAgICAvLyBzaW5nbGUgZXF1YWxzIGNoZWNrIGZvciBib3RoIGBudWxsYCBhbmQgYHVuZGVmaW5lZGBcbiAgICBzdHJlYW0ucHVzaChkYXRhKTtcblxuICAvLyBUT0RPKEJyaWRnZUFSKTogV3JpdGUgYSB0ZXN0IGZvciB0aGVzZSB0d28gZXJyb3IgY2FzZXNcbiAgLy8gaWYgdGhlcmUncyBub3RoaW5nIGluIHRoZSB3cml0ZSBidWZmZXIsIHRoZW4gdGhhdCBtZWFuc1xuICAvLyB0aGF0IG5vdGhpbmcgbW9yZSB3aWxsIGV2ZXIgYmUgcHJvdmlkZWRcbiAgaWYgKHN0cmVhbS5fd3JpdGFibGVTdGF0ZS5sZW5ndGgpIHRocm93IG5ldyBFUlJfVFJBTlNGT1JNX1dJVEhfTEVOR1RIXzAoKTtcbiAgaWYgKHN0cmVhbS5fdHJhbnNmb3JtU3RhdGUudHJhbnNmb3JtaW5nKSB0aHJvdyBuZXcgRVJSX1RSQU5TRk9STV9BTFJFQURZX1RSQU5TRk9STUlORygpO1xuICByZXR1cm4gc3RyZWFtLnB1c2gobnVsbCk7XG59IiwgIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4vLyBhIHBhc3N0aHJvdWdoIHN0cmVhbS5cbi8vIGJhc2ljYWxseSBqdXN0IHRoZSBtb3N0IG1pbmltYWwgc29ydCBvZiBUcmFuc2Zvcm0gc3RyZWFtLlxuLy8gRXZlcnkgd3JpdHRlbiBjaHVuayBnZXRzIG91dHB1dCBhcy1pcy5cblxuJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFBhc3NUaHJvdWdoO1xudmFyIFRyYW5zZm9ybSA9IHJlcXVpcmUoJy4vX3N0cmVhbV90cmFuc2Zvcm0nKTtcbnJlcXVpcmUoJ2luaGVyaXRzJykoUGFzc1Rocm91Z2gsIFRyYW5zZm9ybSk7XG5mdW5jdGlvbiBQYXNzVGhyb3VnaChvcHRpb25zKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBQYXNzVGhyb3VnaCkpIHJldHVybiBuZXcgUGFzc1Rocm91Z2gob3B0aW9ucyk7XG4gIFRyYW5zZm9ybS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xufVxuUGFzc1Rocm91Z2gucHJvdG90eXBlLl90cmFuc2Zvcm0gPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICBjYihudWxsLCBjaHVuayk7XG59OyIsICIvLyBQb3J0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbWFmaW50b3NoL3B1bXAgd2l0aFxuLy8gcGVybWlzc2lvbiBmcm9tIHRoZSBhdXRob3IsIE1hdGhpYXMgQnV1cyAoQG1hZmludG9zaCkuXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIGVvcztcbmZ1bmN0aW9uIG9uY2UoY2FsbGJhY2spIHtcbiAgdmFyIGNhbGxlZCA9IGZhbHNlO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIGlmIChjYWxsZWQpIHJldHVybjtcbiAgICBjYWxsZWQgPSB0cnVlO1xuICAgIGNhbGxiYWNrLmFwcGx5KHZvaWQgMCwgYXJndW1lbnRzKTtcbiAgfTtcbn1cbnZhciBfcmVxdWlyZSRjb2RlcyA9IHJlcXVpcmUoJy4uLy4uLy4uL2Vycm9ycycpLmNvZGVzLFxuICBFUlJfTUlTU0lOR19BUkdTID0gX3JlcXVpcmUkY29kZXMuRVJSX01JU1NJTkdfQVJHUyxcbiAgRVJSX1NUUkVBTV9ERVNUUk9ZRUQgPSBfcmVxdWlyZSRjb2Rlcy5FUlJfU1RSRUFNX0RFU1RST1lFRDtcbmZ1bmN0aW9uIG5vb3AoZXJyKSB7XG4gIC8vIFJldGhyb3cgdGhlIGVycm9yIGlmIGl0IGV4aXN0cyB0byBhdm9pZCBzd2FsbG93aW5nIGl0XG4gIGlmIChlcnIpIHRocm93IGVycjtcbn1cbmZ1bmN0aW9uIGlzUmVxdWVzdChzdHJlYW0pIHtcbiAgcmV0dXJuIHN0cmVhbS5zZXRIZWFkZXIgJiYgdHlwZW9mIHN0cmVhbS5hYm9ydCA9PT0gJ2Z1bmN0aW9uJztcbn1cbmZ1bmN0aW9uIGRlc3Ryb3llcihzdHJlYW0sIHJlYWRpbmcsIHdyaXRpbmcsIGNhbGxiYWNrKSB7XG4gIGNhbGxiYWNrID0gb25jZShjYWxsYmFjayk7XG4gIHZhciBjbG9zZWQgPSBmYWxzZTtcbiAgc3RyZWFtLm9uKCdjbG9zZScsIGZ1bmN0aW9uICgpIHtcbiAgICBjbG9zZWQgPSB0cnVlO1xuICB9KTtcbiAgaWYgKGVvcyA9PT0gdW5kZWZpbmVkKSBlb3MgPSByZXF1aXJlKCcuL2VuZC1vZi1zdHJlYW0nKTtcbiAgZW9zKHN0cmVhbSwge1xuICAgIHJlYWRhYmxlOiByZWFkaW5nLFxuICAgIHdyaXRhYmxlOiB3cml0aW5nXG4gIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICBjbG9zZWQgPSB0cnVlO1xuICAgIGNhbGxiYWNrKCk7XG4gIH0pO1xuICB2YXIgZGVzdHJveWVkID0gZmFsc2U7XG4gIHJldHVybiBmdW5jdGlvbiAoZXJyKSB7XG4gICAgaWYgKGNsb3NlZCkgcmV0dXJuO1xuICAgIGlmIChkZXN0cm95ZWQpIHJldHVybjtcbiAgICBkZXN0cm95ZWQgPSB0cnVlO1xuXG4gICAgLy8gcmVxdWVzdC5kZXN0cm95IGp1c3QgZG8gLmVuZCAtIC5hYm9ydCBpcyB3aGF0IHdlIHdhbnRcbiAgICBpZiAoaXNSZXF1ZXN0KHN0cmVhbSkpIHJldHVybiBzdHJlYW0uYWJvcnQoKTtcbiAgICBpZiAodHlwZW9mIHN0cmVhbS5kZXN0cm95ID09PSAnZnVuY3Rpb24nKSByZXR1cm4gc3RyZWFtLmRlc3Ryb3koKTtcbiAgICBjYWxsYmFjayhlcnIgfHwgbmV3IEVSUl9TVFJFQU1fREVTVFJPWUVEKCdwaXBlJykpO1xuICB9O1xufVxuZnVuY3Rpb24gY2FsbChmbikge1xuICBmbigpO1xufVxuZnVuY3Rpb24gcGlwZShmcm9tLCB0bykge1xuICByZXR1cm4gZnJvbS5waXBlKHRvKTtcbn1cbmZ1bmN0aW9uIHBvcENhbGxiYWNrKHN0cmVhbXMpIHtcbiAgaWYgKCFzdHJlYW1zLmxlbmd0aCkgcmV0dXJuIG5vb3A7XG4gIGlmICh0eXBlb2Ygc3RyZWFtc1tzdHJlYW1zLmxlbmd0aCAtIDFdICE9PSAnZnVuY3Rpb24nKSByZXR1cm4gbm9vcDtcbiAgcmV0dXJuIHN0cmVhbXMucG9wKCk7XG59XG5mdW5jdGlvbiBwaXBlbGluZSgpIHtcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIHN0cmVhbXMgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgc3RyZWFtc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgfVxuICB2YXIgY2FsbGJhY2sgPSBwb3BDYWxsYmFjayhzdHJlYW1zKTtcbiAgaWYgKEFycmF5LmlzQXJyYXkoc3RyZWFtc1swXSkpIHN0cmVhbXMgPSBzdHJlYW1zWzBdO1xuICBpZiAoc3RyZWFtcy5sZW5ndGggPCAyKSB7XG4gICAgdGhyb3cgbmV3IEVSUl9NSVNTSU5HX0FSR1MoJ3N0cmVhbXMnKTtcbiAgfVxuICB2YXIgZXJyb3I7XG4gIHZhciBkZXN0cm95cyA9IHN0cmVhbXMubWFwKGZ1bmN0aW9uIChzdHJlYW0sIGkpIHtcbiAgICB2YXIgcmVhZGluZyA9IGkgPCBzdHJlYW1zLmxlbmd0aCAtIDE7XG4gICAgdmFyIHdyaXRpbmcgPSBpID4gMDtcbiAgICByZXR1cm4gZGVzdHJveWVyKHN0cmVhbSwgcmVhZGluZywgd3JpdGluZywgZnVuY3Rpb24gKGVycikge1xuICAgICAgaWYgKCFlcnJvcikgZXJyb3IgPSBlcnI7XG4gICAgICBpZiAoZXJyKSBkZXN0cm95cy5mb3JFYWNoKGNhbGwpO1xuICAgICAgaWYgKHJlYWRpbmcpIHJldHVybjtcbiAgICAgIGRlc3Ryb3lzLmZvckVhY2goY2FsbCk7XG4gICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgfSk7XG4gIH0pO1xuICByZXR1cm4gc3RyZWFtcy5yZWR1Y2UocGlwZSk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IHBpcGVsaW5lOyIsICJ2YXIgU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtJyk7XG5pZiAocHJvY2Vzcy5lbnYuUkVBREFCTEVfU1RSRUFNID09PSAnZGlzYWJsZScgJiYgU3RyZWFtKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gU3RyZWFtLlJlYWRhYmxlO1xuICBPYmplY3QuYXNzaWduKG1vZHVsZS5leHBvcnRzLCBTdHJlYW0pO1xuICBtb2R1bGUuZXhwb3J0cy5TdHJlYW0gPSBTdHJlYW07XG59IGVsc2Uge1xuICBleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2xpYi9fc3RyZWFtX3JlYWRhYmxlLmpzJyk7XG4gIGV4cG9ydHMuU3RyZWFtID0gU3RyZWFtIHx8IGV4cG9ydHM7XG4gIGV4cG9ydHMuUmVhZGFibGUgPSBleHBvcnRzO1xuICBleHBvcnRzLldyaXRhYmxlID0gcmVxdWlyZSgnLi9saWIvX3N0cmVhbV93cml0YWJsZS5qcycpO1xuICBleHBvcnRzLkR1cGxleCA9IHJlcXVpcmUoJy4vbGliL19zdHJlYW1fZHVwbGV4LmpzJyk7XG4gIGV4cG9ydHMuVHJhbnNmb3JtID0gcmVxdWlyZSgnLi9saWIvX3N0cmVhbV90cmFuc2Zvcm0uanMnKTtcbiAgZXhwb3J0cy5QYXNzVGhyb3VnaCA9IHJlcXVpcmUoJy4vbGliL19zdHJlYW1fcGFzc3Rocm91Z2guanMnKTtcbiAgZXhwb3J0cy5maW5pc2hlZCA9IHJlcXVpcmUoJy4vbGliL2ludGVybmFsL3N0cmVhbXMvZW5kLW9mLXN0cmVhbS5qcycpO1xuICBleHBvcnRzLnBpcGVsaW5lID0gcmVxdWlyZSgnLi9saWIvaW50ZXJuYWwvc3RyZWFtcy9waXBlbGluZS5qcycpO1xufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IEJ1ZmZlciB9ID0gcmVxdWlyZSgnYnVmZmVyJylcbmNvbnN0IHN5bWJvbCA9IFN5bWJvbC5mb3IoJ0J1ZmZlckxpc3QnKVxuXG5mdW5jdGlvbiBCdWZmZXJMaXN0IChidWYpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEJ1ZmZlckxpc3QpKSB7XG4gICAgcmV0dXJuIG5ldyBCdWZmZXJMaXN0KGJ1ZilcbiAgfVxuXG4gIEJ1ZmZlckxpc3QuX2luaXQuY2FsbCh0aGlzLCBidWYpXG59XG5cbkJ1ZmZlckxpc3QuX2luaXQgPSBmdW5jdGlvbiBfaW5pdCAoYnVmKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBzeW1ib2wsIHsgdmFsdWU6IHRydWUgfSlcblxuICB0aGlzLl9idWZzID0gW11cbiAgdGhpcy5sZW5ndGggPSAwXG5cbiAgaWYgKGJ1Zikge1xuICAgIHRoaXMuYXBwZW5kKGJ1ZilcbiAgfVxufVxuXG5CdWZmZXJMaXN0LnByb3RvdHlwZS5fbmV3ID0gZnVuY3Rpb24gX25ldyAoYnVmKSB7XG4gIHJldHVybiBuZXcgQnVmZmVyTGlzdChidWYpXG59XG5cbkJ1ZmZlckxpc3QucHJvdG90eXBlLl9vZmZzZXQgPSBmdW5jdGlvbiBfb2Zmc2V0IChvZmZzZXQpIHtcbiAgaWYgKG9mZnNldCA9PT0gMCkge1xuICAgIHJldHVybiBbMCwgMF1cbiAgfVxuXG4gIGxldCB0b3QgPSAwXG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl9idWZzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgX3QgPSB0b3QgKyB0aGlzLl9idWZzW2ldLmxlbmd0aFxuICAgIGlmIChvZmZzZXQgPCBfdCB8fCBpID09PSB0aGlzLl9idWZzLmxlbmd0aCAtIDEpIHtcbiAgICAgIHJldHVybiBbaSwgb2Zmc2V0IC0gdG90XVxuICAgIH1cbiAgICB0b3QgPSBfdFxuICB9XG59XG5cbkJ1ZmZlckxpc3QucHJvdG90eXBlLl9yZXZlcnNlT2Zmc2V0ID0gZnVuY3Rpb24gKGJsT2Zmc2V0KSB7XG4gIGNvbnN0IGJ1ZmZlcklkID0gYmxPZmZzZXRbMF1cbiAgbGV0IG9mZnNldCA9IGJsT2Zmc2V0WzFdXG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBidWZmZXJJZDsgaSsrKSB7XG4gICAgb2Zmc2V0ICs9IHRoaXMuX2J1ZnNbaV0ubGVuZ3RoXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0XG59XG5cbkJ1ZmZlckxpc3QucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIGdldCAoaW5kZXgpIHtcbiAgaWYgKGluZGV4ID4gdGhpcy5sZW5ndGggfHwgaW5kZXggPCAwKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZFxuICB9XG5cbiAgY29uc3Qgb2Zmc2V0ID0gdGhpcy5fb2Zmc2V0KGluZGV4KVxuXG4gIHJldHVybiB0aGlzLl9idWZzW29mZnNldFswXV1bb2Zmc2V0WzFdXVxufVxuXG5CdWZmZXJMaXN0LnByb3RvdHlwZS5zbGljZSA9IGZ1bmN0aW9uIHNsaWNlIChzdGFydCwgZW5kKSB7XG4gIGlmICh0eXBlb2Ygc3RhcnQgPT09ICdudW1iZXInICYmIHN0YXJ0IDwgMCkge1xuICAgIHN0YXJ0ICs9IHRoaXMubGVuZ3RoXG4gIH1cblxuICBpZiAodHlwZW9mIGVuZCA9PT0gJ251bWJlcicgJiYgZW5kIDwgMCkge1xuICAgIGVuZCArPSB0aGlzLmxlbmd0aFxuICB9XG5cbiAgcmV0dXJuIHRoaXMuY29weShudWxsLCAwLCBzdGFydCwgZW5kKVxufVxuXG5CdWZmZXJMaXN0LnByb3RvdHlwZS5jb3B5ID0gZnVuY3Rpb24gY29weSAoZHN0LCBkc3RTdGFydCwgc3JjU3RhcnQsIHNyY0VuZCkge1xuICBpZiAodHlwZW9mIHNyY1N0YXJ0ICE9PSAnbnVtYmVyJyB8fCBzcmNTdGFydCA8IDApIHtcbiAgICBzcmNTdGFydCA9IDBcbiAgfVxuXG4gIGlmICh0eXBlb2Ygc3JjRW5kICE9PSAnbnVtYmVyJyB8fCBzcmNFbmQgPiB0aGlzLmxlbmd0aCkge1xuICAgIHNyY0VuZCA9IHRoaXMubGVuZ3RoXG4gIH1cblxuICBpZiAoc3JjU3RhcnQgPj0gdGhpcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gZHN0IHx8IEJ1ZmZlci5hbGxvYygwKVxuICB9XG5cbiAgaWYgKHNyY0VuZCA8PSAwKSB7XG4gICAgcmV0dXJuIGRzdCB8fCBCdWZmZXIuYWxsb2MoMClcbiAgfVxuXG4gIGNvbnN0IGNvcHkgPSAhIWRzdFxuICBjb25zdCBvZmYgPSB0aGlzLl9vZmZzZXQoc3JjU3RhcnQpXG4gIGNvbnN0IGxlbiA9IHNyY0VuZCAtIHNyY1N0YXJ0XG4gIGxldCBieXRlcyA9IGxlblxuICBsZXQgYnVmb2ZmID0gKGNvcHkgJiYgZHN0U3RhcnQpIHx8IDBcbiAgbGV0IHN0YXJ0ID0gb2ZmWzFdXG5cbiAgLy8gY29weS9zbGljZSBldmVyeXRoaW5nXG4gIGlmIChzcmNTdGFydCA9PT0gMCAmJiBzcmNFbmQgPT09IHRoaXMubGVuZ3RoKSB7XG4gICAgaWYgKCFjb3B5KSB7XG4gICAgICAvLyBzbGljZSwgYnV0IGZ1bGwgY29uY2F0IGlmIG11bHRpcGxlIGJ1ZmZlcnNcbiAgICAgIHJldHVybiB0aGlzLl9idWZzLmxlbmd0aCA9PT0gMVxuICAgICAgICA/IHRoaXMuX2J1ZnNbMF1cbiAgICAgICAgOiBCdWZmZXIuY29uY2F0KHRoaXMuX2J1ZnMsIHRoaXMubGVuZ3RoKVxuICAgIH1cblxuICAgIC8vIGNvcHksIG5lZWQgdG8gY29weSBpbmRpdmlkdWFsIGJ1ZmZlcnNcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuX2J1ZnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuX2J1ZnNbaV0uY29weShkc3QsIGJ1Zm9mZilcbiAgICAgIGJ1Zm9mZiArPSB0aGlzLl9idWZzW2ldLmxlbmd0aFxuICAgIH1cblxuICAgIHJldHVybiBkc3RcbiAgfVxuXG4gIC8vIGVhc3ksIGNoZWFwIGNhc2Ugd2hlcmUgaXQncyBhIHN1YnNldCBvZiBvbmUgb2YgdGhlIGJ1ZmZlcnNcbiAgaWYgKGJ5dGVzIDw9IHRoaXMuX2J1ZnNbb2ZmWzBdXS5sZW5ndGggLSBzdGFydCkge1xuICAgIHJldHVybiBjb3B5XG4gICAgICA/IHRoaXMuX2J1ZnNbb2ZmWzBdXS5jb3B5KGRzdCwgZHN0U3RhcnQsIHN0YXJ0LCBzdGFydCArIGJ5dGVzKVxuICAgICAgOiB0aGlzLl9idWZzW29mZlswXV0uc2xpY2Uoc3RhcnQsIHN0YXJ0ICsgYnl0ZXMpXG4gIH1cblxuICBpZiAoIWNvcHkpIHtcbiAgICAvLyBhIHNsaWNlLCB3ZSBuZWVkIHNvbWV0aGluZyB0byBjb3B5IGluIHRvXG4gICAgZHN0ID0gQnVmZmVyLmFsbG9jVW5zYWZlKGxlbilcbiAgfVxuXG4gIGZvciAobGV0IGkgPSBvZmZbMF07IGkgPCB0aGlzLl9idWZzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgbCA9IHRoaXMuX2J1ZnNbaV0ubGVuZ3RoIC0gc3RhcnRcblxuICAgIGlmIChieXRlcyA+IGwpIHtcbiAgICAgIHRoaXMuX2J1ZnNbaV0uY29weShkc3QsIGJ1Zm9mZiwgc3RhcnQpXG4gICAgICBidWZvZmYgKz0gbFxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9idWZzW2ldLmNvcHkoZHN0LCBidWZvZmYsIHN0YXJ0LCBzdGFydCArIGJ5dGVzKVxuICAgICAgYnVmb2ZmICs9IGxcbiAgICAgIGJyZWFrXG4gICAgfVxuXG4gICAgYnl0ZXMgLT0gbFxuXG4gICAgaWYgKHN0YXJ0KSB7XG4gICAgICBzdGFydCA9IDBcbiAgICB9XG4gIH1cblxuICAvLyBzYWZlZ3VhcmQgc28gdGhhdCB3ZSBkb24ndCByZXR1cm4gdW5pbml0aWFsaXplZCBtZW1vcnlcbiAgaWYgKGRzdC5sZW5ndGggPiBidWZvZmYpIHJldHVybiBkc3Quc2xpY2UoMCwgYnVmb2ZmKVxuXG4gIHJldHVybiBkc3Rcbn1cblxuQnVmZmVyTGlzdC5wcm90b3R5cGUuc2hhbGxvd1NsaWNlID0gZnVuY3Rpb24gc2hhbGxvd1NsaWNlIChzdGFydCwgZW5kKSB7XG4gIHN0YXJ0ID0gc3RhcnQgfHwgMFxuICBlbmQgPSB0eXBlb2YgZW5kICE9PSAnbnVtYmVyJyA/IHRoaXMubGVuZ3RoIDogZW5kXG5cbiAgaWYgKHN0YXJ0IDwgMCkge1xuICAgIHN0YXJ0ICs9IHRoaXMubGVuZ3RoXG4gIH1cblxuICBpZiAoZW5kIDwgMCkge1xuICAgIGVuZCArPSB0aGlzLmxlbmd0aFxuICB9XG5cbiAgaWYgKHN0YXJ0ID09PSBlbmQpIHtcbiAgICByZXR1cm4gdGhpcy5fbmV3KClcbiAgfVxuXG4gIGNvbnN0IHN0YXJ0T2Zmc2V0ID0gdGhpcy5fb2Zmc2V0KHN0YXJ0KVxuICBjb25zdCBlbmRPZmZzZXQgPSB0aGlzLl9vZmZzZXQoZW5kKVxuICBjb25zdCBidWZmZXJzID0gdGhpcy5fYnVmcy5zbGljZShzdGFydE9mZnNldFswXSwgZW5kT2Zmc2V0WzBdICsgMSlcblxuICBpZiAoZW5kT2Zmc2V0WzFdID09PSAwKSB7XG4gICAgYnVmZmVycy5wb3AoKVxuICB9IGVsc2Uge1xuICAgIGJ1ZmZlcnNbYnVmZmVycy5sZW5ndGggLSAxXSA9IGJ1ZmZlcnNbYnVmZmVycy5sZW5ndGggLSAxXS5zbGljZSgwLCBlbmRPZmZzZXRbMV0pXG4gIH1cblxuICBpZiAoc3RhcnRPZmZzZXRbMV0gIT09IDApIHtcbiAgICBidWZmZXJzWzBdID0gYnVmZmVyc1swXS5zbGljZShzdGFydE9mZnNldFsxXSlcbiAgfVxuXG4gIHJldHVybiB0aGlzLl9uZXcoYnVmZmVycylcbn1cblxuQnVmZmVyTGlzdC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZyAoZW5jb2RpbmcsIHN0YXJ0LCBlbmQpIHtcbiAgcmV0dXJuIHRoaXMuc2xpY2Uoc3RhcnQsIGVuZCkudG9TdHJpbmcoZW5jb2RpbmcpXG59XG5cbkJ1ZmZlckxpc3QucHJvdG90eXBlLmNvbnN1bWUgPSBmdW5jdGlvbiBjb25zdW1lIChieXRlcykge1xuICAvLyBmaXJzdCwgbm9ybWFsaXplIHRoZSBhcmd1bWVudCwgaW4gYWNjb3JkYW5jZSB3aXRoIGhvdyBCdWZmZXIgZG9lcyBpdFxuICBieXRlcyA9IE1hdGgudHJ1bmMoYnl0ZXMpXG4gIC8vIGRvIG5vdGhpbmcgaWYgbm90IGEgcG9zaXRpdmUgbnVtYmVyXG4gIGlmIChOdW1iZXIuaXNOYU4oYnl0ZXMpIHx8IGJ5dGVzIDw9IDApIHJldHVybiB0aGlzXG5cbiAgd2hpbGUgKHRoaXMuX2J1ZnMubGVuZ3RoKSB7XG4gICAgaWYgKGJ5dGVzID49IHRoaXMuX2J1ZnNbMF0ubGVuZ3RoKSB7XG4gICAgICBieXRlcyAtPSB0aGlzLl9idWZzWzBdLmxlbmd0aFxuICAgICAgdGhpcy5sZW5ndGggLT0gdGhpcy5fYnVmc1swXS5sZW5ndGhcbiAgICAgIHRoaXMuX2J1ZnMuc2hpZnQoKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9idWZzWzBdID0gdGhpcy5fYnVmc1swXS5zbGljZShieXRlcylcbiAgICAgIHRoaXMubGVuZ3RoIC09IGJ5dGVzXG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aGlzXG59XG5cbkJ1ZmZlckxpc3QucHJvdG90eXBlLmR1cGxpY2F0ZSA9IGZ1bmN0aW9uIGR1cGxpY2F0ZSAoKSB7XG4gIGNvbnN0IGNvcHkgPSB0aGlzLl9uZXcoKVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5fYnVmcy5sZW5ndGg7IGkrKykge1xuICAgIGNvcHkuYXBwZW5kKHRoaXMuX2J1ZnNbaV0pXG4gIH1cblxuICByZXR1cm4gY29weVxufVxuXG5CdWZmZXJMaXN0LnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbiBhcHBlbmQgKGJ1Zikge1xuICBpZiAoYnVmID09IG51bGwpIHtcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgaWYgKGJ1Zi5idWZmZXIpIHtcbiAgICAvLyBhcHBlbmQgYSB2aWV3IG9mIHRoZSB1bmRlcmx5aW5nIEFycmF5QnVmZmVyXG4gICAgdGhpcy5fYXBwZW5kQnVmZmVyKEJ1ZmZlci5mcm9tKGJ1Zi5idWZmZXIsIGJ1Zi5ieXRlT2Zmc2V0LCBidWYuYnl0ZUxlbmd0aCkpXG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShidWYpKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBidWYubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuYXBwZW5kKGJ1ZltpXSlcbiAgICB9XG4gIH0gZWxzZSBpZiAodGhpcy5faXNCdWZmZXJMaXN0KGJ1ZikpIHtcbiAgICAvLyB1bndyYXAgYXJndW1lbnQgaW50byBpbmRpdmlkdWFsIEJ1ZmZlckxpc3RzXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBidWYuX2J1ZnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuYXBwZW5kKGJ1Zi5fYnVmc1tpXSlcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gY29lcmNlIG51bWJlciBhcmd1bWVudHMgdG8gc3RyaW5ncywgc2luY2UgQnVmZmVyKG51bWJlcikgZG9lc1xuICAgIC8vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25cbiAgICBpZiAodHlwZW9mIGJ1ZiA9PT0gJ251bWJlcicpIHtcbiAgICAgIGJ1ZiA9IGJ1Zi50b1N0cmluZygpXG4gICAgfVxuXG4gICAgdGhpcy5fYXBwZW5kQnVmZmVyKEJ1ZmZlci5mcm9tKGJ1ZikpXG4gIH1cblxuICByZXR1cm4gdGhpc1xufVxuXG5CdWZmZXJMaXN0LnByb3RvdHlwZS5fYXBwZW5kQnVmZmVyID0gZnVuY3Rpb24gYXBwZW5kQnVmZmVyIChidWYpIHtcbiAgdGhpcy5fYnVmcy5wdXNoKGJ1ZilcbiAgdGhpcy5sZW5ndGggKz0gYnVmLmxlbmd0aFxufVxuXG5CdWZmZXJMaXN0LnByb3RvdHlwZS5pbmRleE9mID0gZnVuY3Rpb24gKHNlYXJjaCwgb2Zmc2V0LCBlbmNvZGluZykge1xuICBpZiAoZW5jb2RpbmcgPT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygb2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgIGVuY29kaW5nID0gb2Zmc2V0XG4gICAgb2Zmc2V0ID0gdW5kZWZpbmVkXG4gIH1cblxuICBpZiAodHlwZW9mIHNlYXJjaCA9PT0gJ2Z1bmN0aW9uJyB8fCBBcnJheS5pc0FycmF5KHNlYXJjaCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJ2YWx1ZVwiIGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIEJ1ZmZlckxpc3QsIG9yIFVpbnQ4QXJyYXkuJylcbiAgfSBlbHNlIGlmICh0eXBlb2Ygc2VhcmNoID09PSAnbnVtYmVyJykge1xuICAgIHNlYXJjaCA9IEJ1ZmZlci5mcm9tKFtzZWFyY2hdKVxuICB9IGVsc2UgaWYgKHR5cGVvZiBzZWFyY2ggPT09ICdzdHJpbmcnKSB7XG4gICAgc2VhcmNoID0gQnVmZmVyLmZyb20oc2VhcmNoLCBlbmNvZGluZylcbiAgfSBlbHNlIGlmICh0aGlzLl9pc0J1ZmZlckxpc3Qoc2VhcmNoKSkge1xuICAgIHNlYXJjaCA9IHNlYXJjaC5zbGljZSgpXG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShzZWFyY2guYnVmZmVyKSkge1xuICAgIHNlYXJjaCA9IEJ1ZmZlci5mcm9tKHNlYXJjaC5idWZmZXIsIHNlYXJjaC5ieXRlT2Zmc2V0LCBzZWFyY2guYnl0ZUxlbmd0aClcbiAgfSBlbHNlIGlmICghQnVmZmVyLmlzQnVmZmVyKHNlYXJjaCkpIHtcbiAgICBzZWFyY2ggPSBCdWZmZXIuZnJvbShzZWFyY2gpXG4gIH1cblxuICBvZmZzZXQgPSBOdW1iZXIob2Zmc2V0IHx8IDApXG5cbiAgaWYgKGlzTmFOKG9mZnNldCkpIHtcbiAgICBvZmZzZXQgPSAwXG4gIH1cblxuICBpZiAob2Zmc2V0IDwgMCkge1xuICAgIG9mZnNldCA9IHRoaXMubGVuZ3RoICsgb2Zmc2V0XG4gIH1cblxuICBpZiAob2Zmc2V0IDwgMCkge1xuICAgIG9mZnNldCA9IDBcbiAgfVxuXG4gIGlmIChzZWFyY2gubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG9mZnNldCA+IHRoaXMubGVuZ3RoID8gdGhpcy5sZW5ndGggOiBvZmZzZXRcbiAgfVxuXG4gIGNvbnN0IGJsT2Zmc2V0ID0gdGhpcy5fb2Zmc2V0KG9mZnNldClcbiAgbGV0IGJsSW5kZXggPSBibE9mZnNldFswXSAvLyBpbmRleCBvZiB3aGljaCBpbnRlcm5hbCBidWZmZXIgd2UncmUgd29ya2luZyBvblxuICBsZXQgYnVmZk9mZnNldCA9IGJsT2Zmc2V0WzFdIC8vIG9mZnNldCBvZiB0aGUgaW50ZXJuYWwgYnVmZmVyIHdlJ3JlIHdvcmtpbmcgb25cblxuICAvLyBzY2FuIG92ZXIgZWFjaCBidWZmZXJcbiAgZm9yICg7IGJsSW5kZXggPCB0aGlzLl9idWZzLmxlbmd0aDsgYmxJbmRleCsrKSB7XG4gICAgY29uc3QgYnVmZiA9IHRoaXMuX2J1ZnNbYmxJbmRleF1cblxuICAgIHdoaWxlIChidWZmT2Zmc2V0IDwgYnVmZi5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IGF2YWlsYWJsZVdpbmRvdyA9IGJ1ZmYubGVuZ3RoIC0gYnVmZk9mZnNldFxuXG4gICAgICBpZiAoYXZhaWxhYmxlV2luZG93ID49IHNlYXJjaC5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgbmF0aXZlU2VhcmNoUmVzdWx0ID0gYnVmZi5pbmRleE9mKHNlYXJjaCwgYnVmZk9mZnNldClcblxuICAgICAgICBpZiAobmF0aXZlU2VhcmNoUmVzdWx0ICE9PSAtMSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLl9yZXZlcnNlT2Zmc2V0KFtibEluZGV4LCBuYXRpdmVTZWFyY2hSZXN1bHRdKVxuICAgICAgICB9XG5cbiAgICAgICAgYnVmZk9mZnNldCA9IGJ1ZmYubGVuZ3RoIC0gc2VhcmNoLmxlbmd0aCArIDEgLy8gZW5kIG9mIG5hdGl2ZSBzZWFyY2ggd2luZG93XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCByZXZPZmZzZXQgPSB0aGlzLl9yZXZlcnNlT2Zmc2V0KFtibEluZGV4LCBidWZmT2Zmc2V0XSlcblxuICAgICAgICBpZiAodGhpcy5fbWF0Y2gocmV2T2Zmc2V0LCBzZWFyY2gpKSB7XG4gICAgICAgICAgcmV0dXJuIHJldk9mZnNldFxuICAgICAgICB9XG5cbiAgICAgICAgYnVmZk9mZnNldCsrXG4gICAgICB9XG4gICAgfVxuXG4gICAgYnVmZk9mZnNldCA9IDBcbiAgfVxuXG4gIHJldHVybiAtMVxufVxuXG5CdWZmZXJMaXN0LnByb3RvdHlwZS5fbWF0Y2ggPSBmdW5jdGlvbiAob2Zmc2V0LCBzZWFyY2gpIHtcbiAgaWYgKHRoaXMubGVuZ3RoIC0gb2Zmc2V0IDwgc2VhcmNoLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgZm9yIChsZXQgc2VhcmNoT2Zmc2V0ID0gMDsgc2VhcmNoT2Zmc2V0IDwgc2VhcmNoLmxlbmd0aDsgc2VhcmNoT2Zmc2V0KyspIHtcbiAgICBpZiAodGhpcy5nZXQob2Zmc2V0ICsgc2VhcmNoT2Zmc2V0KSAhPT0gc2VhcmNoW3NlYXJjaE9mZnNldF0pIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZVxufVxuXG47KGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgbWV0aG9kcyA9IHtcbiAgICByZWFkRG91YmxlQkU6IDgsXG4gICAgcmVhZERvdWJsZUxFOiA4LFxuICAgIHJlYWRGbG9hdEJFOiA0LFxuICAgIHJlYWRGbG9hdExFOiA0LFxuICAgIHJlYWRJbnQzMkJFOiA0LFxuICAgIHJlYWRJbnQzMkxFOiA0LFxuICAgIHJlYWRVSW50MzJCRTogNCxcbiAgICByZWFkVUludDMyTEU6IDQsXG4gICAgcmVhZEludDE2QkU6IDIsXG4gICAgcmVhZEludDE2TEU6IDIsXG4gICAgcmVhZFVJbnQxNkJFOiAyLFxuICAgIHJlYWRVSW50MTZMRTogMixcbiAgICByZWFkSW50ODogMSxcbiAgICByZWFkVUludDg6IDEsXG4gICAgcmVhZEludEJFOiBudWxsLFxuICAgIHJlYWRJbnRMRTogbnVsbCxcbiAgICByZWFkVUludEJFOiBudWxsLFxuICAgIHJlYWRVSW50TEU6IG51bGxcbiAgfVxuXG4gIGZvciAoY29uc3QgbSBpbiBtZXRob2RzKSB7XG4gICAgKGZ1bmN0aW9uIChtKSB7XG4gICAgICBpZiAobWV0aG9kc1ttXSA9PT0gbnVsbCkge1xuICAgICAgICBCdWZmZXJMaXN0LnByb3RvdHlwZVttXSA9IGZ1bmN0aW9uIChvZmZzZXQsIGJ5dGVMZW5ndGgpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5zbGljZShvZmZzZXQsIG9mZnNldCArIGJ5dGVMZW5ndGgpW21dKDAsIGJ5dGVMZW5ndGgpXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIEJ1ZmZlckxpc3QucHJvdG90eXBlW21dID0gZnVuY3Rpb24gKG9mZnNldCA9IDApIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5zbGljZShvZmZzZXQsIG9mZnNldCArIG1ldGhvZHNbbV0pW21dKDApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KG0pKVxuICB9XG59KCkpXG5cbi8vIFVzZWQgaW50ZXJuYWxseSBieSB0aGUgY2xhc3MgYW5kIGFsc28gYXMgYW4gaW5kaWNhdG9yIG9mIHRoaXMgb2JqZWN0IGJlaW5nXG4vLyBhIGBCdWZmZXJMaXN0YC4gSXQncyBub3QgcG9zc2libGUgdG8gdXNlIGBpbnN0YW5jZW9mIEJ1ZmZlckxpc3RgIGluIGEgYnJvd3NlclxuLy8gZW52aXJvbm1lbnQgYmVjYXVzZSB0aGVyZSBjb3VsZCBiZSBtdWx0aXBsZSBkaWZmZXJlbnQgY29waWVzIG9mIHRoZVxuLy8gQnVmZmVyTGlzdCBjbGFzcyBhbmQgc29tZSBgQnVmZmVyTGlzdGBzIG1pZ2h0IGJlIGBCdWZmZXJMaXN0YHMuXG5CdWZmZXJMaXN0LnByb3RvdHlwZS5faXNCdWZmZXJMaXN0ID0gZnVuY3Rpb24gX2lzQnVmZmVyTGlzdCAoYikge1xuICByZXR1cm4gYiBpbnN0YW5jZW9mIEJ1ZmZlckxpc3QgfHwgQnVmZmVyTGlzdC5pc0J1ZmZlckxpc3QoYilcbn1cblxuQnVmZmVyTGlzdC5pc0J1ZmZlckxpc3QgPSBmdW5jdGlvbiBpc0J1ZmZlckxpc3QgKGIpIHtcbiAgcmV0dXJuIGIgIT0gbnVsbCAmJiBiW3N5bWJvbF1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBCdWZmZXJMaXN0XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IER1cGxleFN0cmVhbSA9IHJlcXVpcmUoJ3JlYWRhYmxlLXN0cmVhbScpLkR1cGxleFxuY29uc3QgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpXG5jb25zdCBCdWZmZXJMaXN0ID0gcmVxdWlyZSgnLi9CdWZmZXJMaXN0JylcblxuZnVuY3Rpb24gQnVmZmVyTGlzdFN0cmVhbSAoY2FsbGJhY2spIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEJ1ZmZlckxpc3RTdHJlYW0pKSB7XG4gICAgcmV0dXJuIG5ldyBCdWZmZXJMaXN0U3RyZWFtKGNhbGxiYWNrKVxuICB9XG5cbiAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHRoaXMuX2NhbGxiYWNrID0gY2FsbGJhY2tcblxuICAgIGNvbnN0IHBpcGVyID0gZnVuY3Rpb24gcGlwZXIgKGVycikge1xuICAgICAgaWYgKHRoaXMuX2NhbGxiYWNrKSB7XG4gICAgICAgIHRoaXMuX2NhbGxiYWNrKGVycilcbiAgICAgICAgdGhpcy5fY2FsbGJhY2sgPSBudWxsXG4gICAgICB9XG4gICAgfS5iaW5kKHRoaXMpXG5cbiAgICB0aGlzLm9uKCdwaXBlJywgZnVuY3Rpb24gb25QaXBlIChzcmMpIHtcbiAgICAgIHNyYy5vbignZXJyb3InLCBwaXBlcilcbiAgICB9KVxuICAgIHRoaXMub24oJ3VucGlwZScsIGZ1bmN0aW9uIG9uVW5waXBlIChzcmMpIHtcbiAgICAgIHNyYy5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBwaXBlcilcbiAgICB9KVxuXG4gICAgY2FsbGJhY2sgPSBudWxsXG4gIH1cblxuICBCdWZmZXJMaXN0Ll9pbml0LmNhbGwodGhpcywgY2FsbGJhY2spXG4gIER1cGxleFN0cmVhbS5jYWxsKHRoaXMpXG59XG5cbmluaGVyaXRzKEJ1ZmZlckxpc3RTdHJlYW0sIER1cGxleFN0cmVhbSlcbk9iamVjdC5hc3NpZ24oQnVmZmVyTGlzdFN0cmVhbS5wcm90b3R5cGUsIEJ1ZmZlckxpc3QucHJvdG90eXBlKVxuXG5CdWZmZXJMaXN0U3RyZWFtLnByb3RvdHlwZS5fbmV3ID0gZnVuY3Rpb24gX25ldyAoY2FsbGJhY2spIHtcbiAgcmV0dXJuIG5ldyBCdWZmZXJMaXN0U3RyZWFtKGNhbGxiYWNrKVxufVxuXG5CdWZmZXJMaXN0U3RyZWFtLnByb3RvdHlwZS5fd3JpdGUgPSBmdW5jdGlvbiBfd3JpdGUgKGJ1ZiwgZW5jb2RpbmcsIGNhbGxiYWNrKSB7XG4gIHRoaXMuX2FwcGVuZEJ1ZmZlcihidWYpXG5cbiAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNhbGxiYWNrKClcbiAgfVxufVxuXG5CdWZmZXJMaXN0U3RyZWFtLnByb3RvdHlwZS5fcmVhZCA9IGZ1bmN0aW9uIF9yZWFkIChzaXplKSB7XG4gIGlmICghdGhpcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gdGhpcy5wdXNoKG51bGwpXG4gIH1cblxuICBzaXplID0gTWF0aC5taW4oc2l6ZSwgdGhpcy5sZW5ndGgpXG4gIHRoaXMucHVzaCh0aGlzLnNsaWNlKDAsIHNpemUpKVxuICB0aGlzLmNvbnN1bWUoc2l6ZSlcbn1cblxuQnVmZmVyTGlzdFN0cmVhbS5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24gZW5kIChjaHVuaykge1xuICBEdXBsZXhTdHJlYW0ucHJvdG90eXBlLmVuZC5jYWxsKHRoaXMsIGNodW5rKVxuXG4gIGlmICh0aGlzLl9jYWxsYmFjaykge1xuICAgIHRoaXMuX2NhbGxiYWNrKG51bGwsIHRoaXMuc2xpY2UoKSlcbiAgICB0aGlzLl9jYWxsYmFjayA9IG51bGxcbiAgfVxufVxuXG5CdWZmZXJMaXN0U3RyZWFtLnByb3RvdHlwZS5fZGVzdHJveSA9IGZ1bmN0aW9uIF9kZXN0cm95IChlcnIsIGNiKSB7XG4gIHRoaXMuX2J1ZnMubGVuZ3RoID0gMFxuICB0aGlzLmxlbmd0aCA9IDBcbiAgY2IoZXJyKVxufVxuXG5CdWZmZXJMaXN0U3RyZWFtLnByb3RvdHlwZS5faXNCdWZmZXJMaXN0ID0gZnVuY3Rpb24gX2lzQnVmZmVyTGlzdCAoYikge1xuICByZXR1cm4gYiBpbnN0YW5jZW9mIEJ1ZmZlckxpc3RTdHJlYW0gfHwgYiBpbnN0YW5jZW9mIEJ1ZmZlckxpc3QgfHwgQnVmZmVyTGlzdFN0cmVhbS5pc0J1ZmZlckxpc3QoYilcbn1cblxuQnVmZmVyTGlzdFN0cmVhbS5pc0J1ZmZlckxpc3QgPSBCdWZmZXJMaXN0LmlzQnVmZmVyTGlzdFxuXG5tb2R1bGUuZXhwb3J0cyA9IEJ1ZmZlckxpc3RTdHJlYW1cbm1vZHVsZS5leHBvcnRzLkJ1ZmZlckxpc3RTdHJlYW0gPSBCdWZmZXJMaXN0U3RyZWFtXG5tb2R1bGUuZXhwb3J0cy5CdWZmZXJMaXN0ID0gQnVmZmVyTGlzdFxuIiwgImltcG9ydCBjYWMgZnJvbSAnY2FjJztcbmltcG9ydCB7IHZlcnNpb24gfSBmcm9tICcuLi8uLi9wYWNrYWdlLmpzb24nO1xuaW1wb3J0ICogYXMgY29tbWFuZHMgZnJvbSAnLi9jb21tYW5kcyc7XG5cbmNvbnN0IGNsaSA9IGNhYygnd3h0Jyk7XG5jbGkuaGVscCgpO1xuY2xpLnZlcnNpb24odmVyc2lvbik7XG5cbmNsaS5vcHRpb24oJy0tZGVidWcnLCAnZW5hYmxlIGRlYnVnIG1vZGUnKTtcblxuLy8gREVWXG5jbGlcbiAgLmNvbW1hbmQoJ1tyb290XScsICdzdGFydCBkZXYgc2VydmVyJylcbiAgLm9wdGlvbignLWMsIC0tY29uZmlnIDxmaWxlPicsICd1c2Ugc3BlY2lmaWVkIGNvbmZpZyBmaWxlJylcbiAgLm9wdGlvbignLW0sIC0tbW9kZSA8bW9kZT4nLCAnc2V0IGVudiBtb2RlJylcbiAgLm9wdGlvbignLWIsIC0tYnJvd3NlciA8YnJvd3Nlcj4nLCAnc3BlY2lmeSBhIGJyb3dzZXInKVxuICAub3B0aW9uKCctLW12MycsICd0YXJnZXQgbWFuaWZlc3QgdjMnKVxuICAub3B0aW9uKCctLW12MicsICd0YXJnZXQgbWFuaWZlc3QgdjInKVxuICAuYWN0aW9uKGNvbW1hbmRzLmRldik7XG5cbi8vIEJVSUxEXG5jbGlcbiAgLmNvbW1hbmQoJ2J1aWxkIFtyb290XScsICdidWlsZCBmb3IgcHJvZHVjdGlvbicpXG4gIC5vcHRpb24oJy1jLCAtLWNvbmZpZyA8ZmlsZT4nLCAndXNlIHNwZWNpZmllZCBjb25maWcgZmlsZScpXG4gIC5vcHRpb24oJy1tLCAtLW1vZGUgPG1vZGU+JywgJ3NldCBlbnYgbW9kZScpXG4gIC5vcHRpb24oJy1iLCAtLWJyb3dzZXIgPGJyb3dzZXI+JywgJ3NwZWNpZnkgYSBicm93c2VyJylcbiAgLm9wdGlvbignLS1tdjMnLCAndGFyZ2V0IG1hbmlmZXN0IHYzJylcbiAgLm9wdGlvbignLS1tdjInLCAndGFyZ2V0IG1hbmlmZXN0IHYyJylcbiAgLmFjdGlvbihjb21tYW5kcy5idWlsZCk7XG5cbi8vIFpJUFxuY2xpXG4gIC5jb21tYW5kKCd6aXAgW3Jvb3RdJywgJ2J1aWxkIGZvciBwcm9kdWN0aW9uIGFuZCB6aXAgb3V0cHV0JylcbiAgLm9wdGlvbignLWMsIC0tY29uZmlnIDxmaWxlPicsICd1c2Ugc3BlY2lmaWVkIGNvbmZpZyBmaWxlJylcbiAgLm9wdGlvbignLW0sIC0tbW9kZSA8bW9kZT4nLCAnc2V0IGVudiBtb2RlJylcbiAgLm9wdGlvbignLWIsIC0tYnJvd3NlciA8YnJvd3Nlcj4nLCAnc3BlY2lmeSBhIGJyb3dzZXInKVxuICAub3B0aW9uKCctLW12MycsICd0YXJnZXQgbWFuaWZlc3QgdjMnKVxuICAub3B0aW9uKCctLW12MicsICd0YXJnZXQgbWFuaWZlc3QgdjInKVxuICAuYWN0aW9uKGNvbW1hbmRzLnppcCk7XG5cbi8vIFBSRVBBUkVcbmNsaVxuICAuY29tbWFuZCgncHJlcGFyZSBbcm9vdF0nLCAncHJlcGFyZSB0eXBlc2NyaXB0IHByb2plY3QnKVxuICAub3B0aW9uKCctYywgLS1jb25maWcgPGZpbGU+JywgJ3VzZSBzcGVjaWZpZWQgY29uZmlnIGZpbGUnKVxuICAuYWN0aW9uKGNvbW1hbmRzLnByZXBhcmUpO1xuXG4vLyBDTEVBTlxuY2xpXG4gIC5jb21tYW5kKCdjbGVhbiBbcm9vdF0nLCAnY2xlYW4gZ2VuZXJhdGVkIGZpbGVzIGFuZCBjYWNoZXMnKVxuICAuYWxpYXMoJ2NsZWFudXAnKVxuICAuYWN0aW9uKGNvbW1hbmRzLmNsZWFuKTtcblxuLy8gUFVCTElTSFxuY2xpLmNvbW1hbmQoJ3B1Ymxpc2ggW3Jvb3RdJywgJ3B1Ymxpc2ggdG8gc3RvcmVzJykuYWN0aW9uKGNvbW1hbmRzLnB1Ymxpc2gpO1xuXG4vLyBJTklUXG5jbGlcbiAgLmNvbW1hbmQoJ2luaXQgW2RpcmVjdG9yeV0nLCAnaW5pdGlhbGl6ZSBhIG5ldyBwcm9qZWN0JylcbiAgLm9wdGlvbignLXQsIC0tdGVtcGxhdGUgPHRlbXBsYXRlPicsICd0ZW1wbGF0ZSB0byB1c2UnKVxuICAub3B0aW9uKCctLXBtIDxwYWNrYWdlTWFuYWdlcj4nLCAnd2hpY2ggcGFja2FnZSBtYW5hZ2VyIHRvIHVzZScpXG4gIC5hY3Rpb24oY29tbWFuZHMuaW5pdCk7XG5cbmNsaS5wYXJzZSgpO1xuIiwgIntcbiAgXCJuYW1lXCI6IFwid3h0XCIsXG4gIFwidHlwZVwiOiBcIm1vZHVsZVwiLFxuICBcInZlcnNpb25cIjogXCIwLjUuNVwiLFxuICBcImRlc2NyaXB0aW9uXCI6IFwiTmV4dCBnZW4gZnJhbWV3b3JrIGZvciBkZXZlbG9waW5nIHdlYiBleHRlbnNpb25zXCIsXG4gIFwiZW5naW5lc1wiOiB7XG4gICAgXCJub2RlXCI6IFwiPj0xOC4xNi4wXCIsXG4gICAgXCJwbnBtXCI6IFwiPj04XCJcbiAgfSxcbiAgXCJyZXBvc2l0b3J5XCI6IHtcbiAgICBcInR5cGVcIjogXCJnaXRcIixcbiAgICBcInVybFwiOiBcImh0dHBzOi8vZ2l0aHViLmNvbS93eHQtZGV2L3d4dFwiXG4gIH0sXG4gIFwiaG9tZXBhZ2VcIjogXCJodHRwczovL3d4dC5kZXZcIixcbiAgXCJrZXl3b3Jkc1wiOiBbXG4gICAgXCJ2aXRlXCIsXG4gICAgXCJjaHJvbWVcIixcbiAgICBcIndlYlwiLFxuICAgIFwiZXh0ZW5zaW9uXCIsXG4gICAgXCJicm93c2VyXCIsXG4gICAgXCJidW5kbGVyXCIsXG4gICAgXCJmcmFtZXdvcmtcIlxuICBdLFxuICBcImF1dGhvclwiOiB7XG4gICAgXCJuYW1lXCI6IFwiQWFyb24gS2xpbmtlclwiLFxuICAgIFwiZW1haWxcIjogXCJhYXJvbmtsaW5rZXIxK3d4dEBnbWFpbC5jb21cIlxuICB9LFxuICBcImxpY2Vuc2VcIjogXCJNSVRcIixcbiAgXCJmaWxlc1wiOiBbXG4gICAgXCJiaW5cIixcbiAgICBcImRpc3RcIlxuICBdLFxuICBcImJpblwiOiBcIi4vYmluL3d4dC5janNcIixcbiAgXCJtYWluXCI6IFwiLi9kaXN0L2luZGV4LmNqc1wiLFxuICBcIm1vZHVsZVwiOiBcIi4vZGlzdC9pbmRleC5qc1wiLFxuICBcInR5cGVzXCI6IFwiLi9kaXN0L2luZGV4LmQudHNcIixcbiAgXCJleHBvcnRzXCI6IHtcbiAgICBcIi5cIjoge1xuICAgICAgXCJyZXF1aXJlXCI6IFwiLi9kaXN0L2luZGV4LmNqc1wiLFxuICAgICAgXCJpbXBvcnRcIjogXCIuL2Rpc3QvaW5kZXguanNcIixcbiAgICAgIFwidHlwZXNcIjogXCIuL2Rpc3QvaW5kZXguZC50c1wiXG4gICAgfSxcbiAgICBcIi4vY2xpZW50XCI6IHtcbiAgICAgIFwiaW1wb3J0XCI6IFwiLi9kaXN0L2NsaWVudC5qc1wiLFxuICAgICAgXCJ0eXBlc1wiOiBcIi4vZGlzdC9jbGllbnQuZC50c1wiXG4gICAgfSxcbiAgICBcIi4vYnJvd3NlclwiOiB7XG4gICAgICBcImltcG9ydFwiOiBcIi4vZGlzdC9icm93c2VyLmpzXCIsXG4gICAgICBcInR5cGVzXCI6IFwiLi9kaXN0L2Jyb3dzZXIuZC50c1wiXG4gICAgfVxuICB9LFxuICBcInNjcmlwdHNcIjoge1xuICAgIFwid3h0XCI6IFwidHN4IHNyYy9jbGkvaW5kZXgudHNcIixcbiAgICBcImJ1aWxkXCI6IFwidHN4IHNjcmlwdHMvYnVpbGQudHNcIixcbiAgICBcImZvcm1hdFwiOiBcInByZXR0aWVyIC0td3JpdGUgLlwiLFxuICAgIFwiZm9ybWF0OmNoZWNrXCI6IFwicHJldHRpZXIgLS13cml0ZSAuXCIsXG4gICAgXCJjb21waWxlXCI6IFwidHNjIC0tbm9FbWl0XCIsXG4gICAgXCJ0ZXN0XCI6IFwidml0ZXN0XCIsXG4gICAgXCJ0ZXN0OmNvdmVyYWdlXCI6IFwidml0ZXN0IHJ1biAtLWNvdmVyYWdlXCIsXG4gICAgXCJwcmVwYXJlXCI6IFwic2ltcGxlLWdpdC1ob29rc1wiLFxuICAgIFwicHJlcHVibGlzaFwiOiBcInBucG0gLXMgYnVpbGRcIixcbiAgICBcImRvY3M6ZGV2XCI6IFwidml0ZXByZXNzIGRldiBkb2NzXCIsXG4gICAgXCJkb2NzOmJ1aWxkXCI6IFwidml0ZXByZXNzIGJ1aWxkIGRvY3NcIixcbiAgICBcImRvY3M6cHJldmlld1wiOiBcInZpdGVwcmVzcyBwcmV2aWV3IGRvY3NcIixcbiAgICBcInN5bmMtcmVsZWFzZXNcIjogXCJwbnB4IGNoYW5nZWxvZ2VuQGxhdGVzdCBnaCByZWxlYXNlIGFsbFwiXG4gIH0sXG4gIFwiZGVwZW5kZW5jaWVzXCI6IHtcbiAgICBcIkB0eXBlcy93ZWJleHRlbnNpb24tcG9seWZpbGxcIjogXCJeMC4xMC4xXCIsXG4gICAgXCJAd2ViZXh0LWNvcmUvZmFrZS1icm93c2VyXCI6IFwiXjEuMi4yXCIsXG4gICAgXCJAd2ViZXh0LWNvcmUvbWF0Y2gtcGF0dGVybnNcIjogXCJeMS4wLjFcIixcbiAgICBcImFzeW5jLW11dGV4XCI6IFwiXjAuNC4wXCIsXG4gICAgXCJjMTJcIjogXCJeMS40LjJcIixcbiAgICBcImNhY1wiOiBcIl42LjcuMTRcIixcbiAgICBcImNvbnNvbGFcIjogXCJeMy4yLjNcIixcbiAgICBcImZhc3QtZ2xvYlwiOiBcIl4zLjMuMVwiLFxuICAgIFwiZmlsZXNpemVcIjogXCJeMTAuMC44XCIsXG4gICAgXCJmcy1leHRyYVwiOiBcIl4xMS4xLjFcIixcbiAgICBcImdldC1wb3J0XCI6IFwiXjcuMC4wXCIsXG4gICAgXCJnaWdldFwiOiBcIl4xLjEuMlwiLFxuICAgIFwiaml0aVwiOiBcIl4xLjE5LjFcIixcbiAgICBcImpzb241XCI6IFwiXjIuMi4zXCIsXG4gICAgXCJsaW5rZWRvbVwiOiBcIl4wLjE1LjFcIixcbiAgICBcIm1pbmltYXRjaFwiOiBcIl45LjAuM1wiLFxuICAgIFwicGljb2NvbG9yc1wiOiBcIl4xLjAuMFwiLFxuICAgIFwicHJvbXB0c1wiOiBcIl4yLjQuMlwiLFxuICAgIFwidW5pbXBvcnRcIjogXCJeMy4xLjBcIixcbiAgICBcInZpdGVcIjogXCJeNC40LjdcIixcbiAgICBcIndlYi1leHQtcnVuXCI6IFwiXjAuMS4wXCIsXG4gICAgXCJ3ZWJleHRlbnNpb24tcG9seWZpbGxcIjogXCJeMC4xMC4wXCIsXG4gICAgXCJ6aXAtZGlyXCI6IFwiXjIuMC4wXCJcbiAgfSxcbiAgXCJkZXZEZXBlbmRlbmNpZXNcIjoge1xuICAgIFwiQGZha2VyLWpzL2Zha2VyXCI6IFwiXjguMC4yXCIsXG4gICAgXCJAdHlwZXMvZnMtZXh0cmFcIjogXCJeMTEuMC4xXCIsXG4gICAgXCJAdHlwZXMvbG9kYXNoLm1lcmdlXCI6IFwiXjQuNi43XCIsXG4gICAgXCJAdHlwZXMvbm9kZVwiOiBcIl4yMC40LjVcIixcbiAgICBcIkB0eXBlcy9wcmV0dGllclwiOiBcIl4zLjAuMFwiLFxuICAgIFwiQHR5cGVzL3Byb21wdHNcIjogXCJeMi40LjRcIixcbiAgICBcIkB2aXRlc3QvY292ZXJhZ2UtdjhcIjogXCJeMC4zNC4xXCIsXG4gICAgXCJleGVjYVwiOiBcIl43LjIuMFwiLFxuICAgIFwibGludC1zdGFnZWRcIjogXCJeMTQuMC4wXCIsXG4gICAgXCJsb2Rhc2gubWVyZ2VcIjogXCJeNC42LjJcIixcbiAgICBcIm5wbS1ydW4tYWxsXCI6IFwiXjQuMS41XCIsXG4gICAgXCJvcmFcIjogXCJeNy4wLjFcIixcbiAgICBcInByZXR0aWVyXCI6IFwiXjMuMC4xXCIsXG4gICAgXCJzaW1wbGUtZ2l0LWhvb2tzXCI6IFwiXjIuOS4wXCIsXG4gICAgXCJ0cy1tb3JwaFwiOiBcIl4xOS4wLjBcIixcbiAgICBcInRzdXBcIjogXCJeNy4xLjBcIixcbiAgICBcInRzeFwiOiBcIl4zLjEyLjdcIixcbiAgICBcInR5cGVzY3JpcHRcIjogXCJeNS4xLjZcIixcbiAgICBcInZpdGVwcmVzc1wiOiBcIjEuMC4wLXJjLjEwXCIsXG4gICAgXCJ2aXRlc3RcIjogXCJeMC4zNC4xXCIsXG4gICAgXCJ2aXRlc3QtbW9jay1leHRlbmRlZFwiOiBcIl4xLjEuNFwiLFxuICAgIFwid2ViZXh0ZW5zaW9uLXBvbHlmaWxsXCI6IFwiXjAuMTAuMFwiXG4gIH0sXG4gIFwicGVlckRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJ3ZWJleHRlbnNpb24tcG9seWZpbGxcIjogXCI+PTAuMTAuMFwiXG4gIH0sXG4gIFwicGFja2FnZU1hbmFnZXJcIjogXCJwbnBtQDguNi4zXCIsXG4gIFwic2ltcGxlLWdpdC1ob29rc1wiOiB7XG4gICAgXCJwcmUtY29tbWl0XCI6IFwicG5wbSBsaW50LXN0YWdlZFwiXG4gIH0sXG4gIFwibGludC1zdGFnZWRcIjoge1xuICAgIFwiKlwiOiBcInByZXR0aWVyIC0td3JpdGVcIlxuICB9LFxuICBcInBucG1cIjoge1xuICAgIFwicGVlckRlcGVuZGVuY3lSdWxlc1wiOiB7XG4gICAgICBcImlnbm9yZU1pc3NpbmdcIjogW1xuICAgICAgICBcIkBhbGdvbGlhL2NsaWVudC1zZWFyY2hcIixcbiAgICAgICAgXCJzZWFyY2gtaW5zaWdodHNcIlxuICAgICAgXVxuICAgIH1cbiAgfVxufVxuIiwgImltcG9ydCB7IGxvYWRDb25maWcgfSBmcm9tICdjMTInO1xuaW1wb3J0IHtcbiAgSW5saW5lQ29uZmlnLFxuICBJbnRlcm5hbENvbmZpZyxcbiAgVXNlckNvbmZpZyxcbiAgQ29uZmlnRW52LFxuICBVc2VyTWFuaWZlc3RGbixcbiAgVXNlck1hbmlmZXN0LFxuICBXeHRWaXRlQ29uZmlnLFxuICBFeHRlbnNpb25SdW5uZXJDb25maWcsXG59IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgKiBhcyB2aXRlIGZyb20gJ3ZpdGUnO1xuaW1wb3J0IHsgY3JlYXRlRnNDYWNoZSB9IGZyb20gJy4vY3JlYXRlRnNDYWNoZSc7XG5pbXBvcnQgY29uc29sYSwgeyBMb2dMZXZlbHMgfSBmcm9tICdjb25zb2xhJztcbmltcG9ydCAqIGFzIHBsdWdpbnMgZnJvbSAnLi4vdml0ZS1wbHVnaW5zJztcbmltcG9ydCB7IGdldEdsb2JhbHMgfSBmcm9tICcuL2dsb2JhbHMnO1xuXG4vKipcbiAqIEdpdmVuIGFuIGlubGluZSBjb25maWcsIGRpc2NvdmVyIHRoZSBjb25maWcgZmlsZSBpZiBuZWNlc3NhcnksIG1lcmdlIHRoZSByZXN1bHRzLCByZXNvbHZlIGFueVxuICogcmVsYXRpdmUgcGF0aHMsIGFuZCBhcHBseSBhbnkgZGVmYXVsdHMuXG4gKlxuICogSW5saW5lIGNvbmZpZyBhbHdheXMgaGFzIHByaW9yaXR5IG92ZXIgdXNlciBjb25maWcuIENsaSBmbGFncyBhcmUgcGFzc2VkIGFzIGlubGluZSBjb25maWcgaWYgc2V0LlxuICogSWYgdW5zZXQsIHVuZGVmaW5lZCBpcyBwYXNzZWQgaW4sIGxldHRpbmcgdGhpcyBmdW5jdGlvbiBkZWNpZGUgZGVmYXVsdCB2YWx1ZXMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRJbnRlcm5hbENvbmZpZyhcbiAgaW5saW5lQ29uZmlnOiBJbmxpbmVDb25maWcsXG4gIGNvbW1hbmQ6ICdidWlsZCcgfCAnc2VydmUnLFxuKTogUHJvbWlzZTxJbnRlcm5hbENvbmZpZz4ge1xuICAvLyBMb2FkIHVzZXIgY29uZmlnXG5cbiAgbGV0IHVzZXJDb25maWc6IFVzZXJDb25maWcgPSB7fTtcbiAgaWYgKGlubGluZUNvbmZpZy5jb25maWdGaWxlICE9PSBmYWxzZSkge1xuICAgIGNvbnN0IGxvYWRlZCA9IGF3YWl0IGxvYWRDb25maWc8VXNlckNvbmZpZz4oe1xuICAgICAgbmFtZTogJ3d4dCcsXG4gICAgICBjd2Q6IGlubGluZUNvbmZpZy5yb290ID8/IHByb2Nlc3MuY3dkKCksXG4gICAgICByY0ZpbGU6IGZhbHNlLFxuICAgIH0pO1xuICAgIHVzZXJDb25maWcgPSBsb2FkZWQuY29uZmlnID8/IHt9O1xuICB9XG5cbiAgLy8gTWVyZ2UgaXQgaW50byB0aGUgaW5saW5lIGNvbmZpZ1xuXG4gIGNvbnN0IG1lcmdlZENvbmZpZyA9IG1lcmdlSW5saW5lQ29uZmlnKGlubGluZUNvbmZpZywgdXNlckNvbmZpZyk7XG5cbiAgLy8gQXBwbHkgZGVmYXVsdHMgdG8gbWFrZSBpbnRlcm5hbCBjb25maWcuXG5cbiAgY29uc3QgZGVidWcgPSBtZXJnZWRDb25maWcuZGVidWcgPz8gZmFsc2U7XG4gIGNvbnN0IGxvZ2dlciA9IG1lcmdlZENvbmZpZy5sb2dnZXIgPz8gY29uc29sYTtcbiAgaWYgKGRlYnVnKSBsb2dnZXIubGV2ZWwgPSBMb2dMZXZlbHMuZGVidWc7XG5cbiAgY29uc3QgYnJvd3NlciA9IG1lcmdlZENvbmZpZy5icm93c2VyID8/ICdjaHJvbWUnO1xuICBjb25zdCBtYW5pZmVzdFZlcnNpb24gPVxuICAgIG1lcmdlZENvbmZpZy5tYW5pZmVzdFZlcnNpb24gPz8gKGJyb3dzZXIgPT0gJ2ZpcmVmb3gnID8gMiA6IDMpO1xuICBjb25zdCBtb2RlID1cbiAgICBtZXJnZWRDb25maWcubW9kZSA/PyAoY29tbWFuZCA9PT0gJ2J1aWxkJyA/ICdwcm9kdWN0aW9uJyA6ICdkZXZlbG9wbWVudCcpO1xuICBjb25zdCBlbnY6IENvbmZpZ0VudiA9IHsgYnJvd3NlciwgY29tbWFuZCwgbWFuaWZlc3RWZXJzaW9uLCBtb2RlIH07XG5cbiAgY29uc3Qgcm9vdCA9IHBhdGgucmVzb2x2ZShcbiAgICBpbmxpbmVDb25maWcucm9vdCA/PyB1c2VyQ29uZmlnLnJvb3QgPz8gcHJvY2Vzcy5jd2QoKSxcbiAgKTtcbiAgY29uc3Qgd3h0RGlyID0gcGF0aC5yZXNvbHZlKHJvb3QsICcud3h0Jyk7XG4gIGNvbnN0IHNyY0RpciA9IHBhdGgucmVzb2x2ZShyb290LCBtZXJnZWRDb25maWcuc3JjRGlyID8/IHJvb3QpO1xuICBjb25zdCBlbnRyeXBvaW50c0RpciA9IHBhdGgucmVzb2x2ZShcbiAgICBzcmNEaXIsXG4gICAgbWVyZ2VkQ29uZmlnLmVudHJ5cG9pbnRzRGlyID8/ICdlbnRyeXBvaW50cycsXG4gICk7XG4gIGNvbnN0IHB1YmxpY0RpciA9IHBhdGgucmVzb2x2ZShzcmNEaXIsIG1lcmdlZENvbmZpZy5wdWJsaWNEaXIgPz8gJ3B1YmxpYycpO1xuICBjb25zdCB0eXBlc0RpciA9IHBhdGgucmVzb2x2ZSh3eHREaXIsICd0eXBlcycpO1xuICBjb25zdCBvdXRCYXNlRGlyID0gcGF0aC5yZXNvbHZlKHJvb3QsICcub3V0cHV0Jyk7XG4gIGNvbnN0IG91dERpciA9IHBhdGgucmVzb2x2ZShvdXRCYXNlRGlyLCBgJHticm93c2VyfS1tdiR7bWFuaWZlc3RWZXJzaW9ufWApO1xuXG4gIGNvbnN0IHJ1bm5lckNvbmZpZyA9IGF3YWl0IGxvYWRDb25maWc8RXh0ZW5zaW9uUnVubmVyQ29uZmlnPih7XG4gICAgbmFtZTogJ3dlYi1leHQnLFxuICAgIGN3ZDogcm9vdCxcbiAgICBnbG9iYWxSYzogdHJ1ZSxcbiAgICByY0ZpbGU6ICcud2ViZXh0cmMnLFxuICAgIG92ZXJyaWRlczogbWVyZ2VkQ29uZmlnLnJ1bm5lcixcbiAgfSk7XG5cbiAgY29uc3QgZmluYWxDb25maWc6IEludGVybmFsQ29uZmlnID0ge1xuICAgIGJyb3dzZXIsXG4gICAgY29tbWFuZCxcbiAgICBkZWJ1ZyxcbiAgICBlbnRyeXBvaW50c0RpcixcbiAgICBmc0NhY2hlOiBjcmVhdGVGc0NhY2hlKHd4dERpciksXG4gICAgaW1wb3J0czogbWVyZ2VkQ29uZmlnLmltcG9ydHMgPz8ge30sXG4gICAgbG9nZ2VyLFxuICAgIG1hbmlmZXN0OiBhd2FpdCByZXNvbHZlTWFuaWZlc3RDb25maWcoZW52LCBtZXJnZWRDb25maWcubWFuaWZlc3QpLFxuICAgIG1hbmlmZXN0VmVyc2lvbixcbiAgICBtb2RlLFxuICAgIG91dEJhc2VEaXIsXG4gICAgb3V0RGlyLFxuICAgIHB1YmxpY0RpcixcbiAgICByb290LFxuICAgIHJ1bm5lckNvbmZpZyxcbiAgICBzcmNEaXIsXG4gICAgdHlwZXNEaXIsXG4gICAgdml0ZToge30sIC8vIFJlYWwgdmFsdWUgYWRkZWQgYWZ0ZXIgdGhpcyBvYmplY3QgaXMgaW5pdGlhbGl6ZWQuXG4gICAgd3h0RGlyLFxuICAgIHppcDogcmVzb2x2ZUludGVybmFsWmlwQ29uZmlnKHJvb3QsIG1lcmdlZENvbmZpZyksXG4gIH07XG5cbiAgZmluYWxDb25maWcudml0ZSA9IGF3YWl0IHJlc29sdmVJbnRlcm5hbFZpdGVDb25maWcoXG4gICAgZW52LFxuICAgIG1lcmdlZENvbmZpZyxcbiAgICBmaW5hbENvbmZpZyxcbiAgKTtcblxuICByZXR1cm4gZmluYWxDb25maWc7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVNYW5pZmVzdENvbmZpZyhcbiAgZW52OiBDb25maWdFbnYsXG4gIG1hbmlmZXN0OiBVc2VyTWFuaWZlc3QgfCBQcm9taXNlPFVzZXJNYW5pZmVzdD4gfCBVc2VyTWFuaWZlc3RGbiB8IHVuZGVmaW5lZCxcbik6IFByb21pc2U8VXNlck1hbmlmZXN0PiB7XG4gIHJldHVybiBhd2FpdCAodHlwZW9mIG1hbmlmZXN0ID09PSAnZnVuY3Rpb24nXG4gICAgPyBtYW5pZmVzdChlbnYpXG4gICAgOiBtYW5pZmVzdCA/PyB7fSk7XG59XG5cbi8qKlxuICogTWVyZ2UgdGhlIGlubGluZSBjb25maWcgYW5kIHVzZXIgY29uZmlnLiBJbmxpbmUgY29uZmlnIGlzIGdpdmVuIHByaW9yaXR5LiBEZWZhdWx0cyBhcmUgbm90IGFwcGxpZWQgaGVyZS5cbiAqL1xuZnVuY3Rpb24gbWVyZ2VJbmxpbmVDb25maWcoXG4gIGlubGluZUNvbmZpZzogSW5saW5lQ29uZmlnLFxuICB1c2VyQ29uZmlnOiBVc2VyQ29uZmlnLFxuKTogSW5saW5lQ29uZmlnIHtcbiAgbGV0IGltcG9ydHM6IElubGluZUNvbmZpZ1snaW1wb3J0cyddO1xuICBpZiAoaW5saW5lQ29uZmlnLmltcG9ydHMgPT09IGZhbHNlIHx8IHVzZXJDb25maWcuaW1wb3J0cyA9PT0gZmFsc2UpIHtcbiAgICBpbXBvcnRzID0gZmFsc2U7XG4gIH0gZWxzZSBpZiAodXNlckNvbmZpZy5pbXBvcnRzID09IG51bGwgJiYgaW5saW5lQ29uZmlnLmltcG9ydHMgPT0gbnVsbCkge1xuICAgIGltcG9ydHMgPSB1bmRlZmluZWQ7XG4gIH0gZWxzZSB7XG4gICAgaW1wb3J0cyA9IHZpdGUubWVyZ2VDb25maWcoXG4gICAgICB1c2VyQ29uZmlnLmltcG9ydHMgPz8ge30sXG4gICAgICBpbmxpbmVDb25maWcuaW1wb3J0cyA/PyB7fSxcbiAgICApO1xuICB9XG4gIGNvbnN0IG1hbmlmZXN0OiBVc2VyTWFuaWZlc3RGbiA9IGFzeW5jIChlbnYpID0+IHtcbiAgICBjb25zdCB1c2VyID0gYXdhaXQgcmVzb2x2ZU1hbmlmZXN0Q29uZmlnKGVudiwgdXNlckNvbmZpZy5tYW5pZmVzdCk7XG4gICAgY29uc3QgaW5saW5lID0gYXdhaXQgcmVzb2x2ZU1hbmlmZXN0Q29uZmlnKGVudiwgaW5saW5lQ29uZmlnLm1hbmlmZXN0KTtcbiAgICByZXR1cm4gdml0ZS5tZXJnZUNvbmZpZyh1c2VyLCBpbmxpbmUpO1xuICB9O1xuICBjb25zdCB2aXRlQ29uZmlnID0gYXN5bmMgKGVudjogQ29uZmlnRW52KTogUHJvbWlzZTxXeHRWaXRlQ29uZmlnPiA9PiB7XG4gICAgY29uc3QgdXNlciA9IGF3YWl0IHJlc29sdmVWaXRlQ29uZmlnKGVudiwgdXNlckNvbmZpZy52aXRlKTtcbiAgICBjb25zdCBpbmxpbmUgPSBhd2FpdCByZXNvbHZlVml0ZUNvbmZpZyhlbnYsIGlubGluZUNvbmZpZy52aXRlKTtcbiAgICByZXR1cm4gdml0ZS5tZXJnZUNvbmZpZyh1c2VyLCBpbmxpbmUpO1xuICB9O1xuICBjb25zdCBydW5uZXI6IElubGluZUNvbmZpZ1sncnVubmVyJ10gPSB2aXRlLm1lcmdlQ29uZmlnKFxuICAgIHVzZXJDb25maWcucnVubmVyID8/IHt9LFxuICAgIGlubGluZUNvbmZpZy5ydW5uZXIgPz8ge30sXG4gICk7XG4gIGNvbnN0IHppcDogSW5saW5lQ29uZmlnWyd6aXAnXSA9IHZpdGUubWVyZ2VDb25maWcoXG4gICAgdXNlckNvbmZpZy56aXAgPz8ge30sXG4gICAgaW5saW5lQ29uZmlnLnppcCA/PyB7fSxcbiAgKTtcblxuICByZXR1cm4ge1xuICAgIHJvb3Q6IGlubGluZUNvbmZpZy5yb290ID8/IHVzZXJDb25maWcucm9vdCxcbiAgICBicm93c2VyOiBpbmxpbmVDb25maWcuYnJvd3NlciA/PyB1c2VyQ29uZmlnLmJyb3dzZXIsXG4gICAgbWFuaWZlc3RWZXJzaW9uOiBpbmxpbmVDb25maWcubWFuaWZlc3RWZXJzaW9uID8/IHVzZXJDb25maWcubWFuaWZlc3RWZXJzaW9uLFxuICAgIGNvbmZpZ0ZpbGU6IGlubGluZUNvbmZpZy5jb25maWdGaWxlLFxuICAgIGRlYnVnOiBpbmxpbmVDb25maWcuZGVidWcgPz8gdXNlckNvbmZpZy5kZWJ1ZyxcbiAgICBlbnRyeXBvaW50c0RpcjogaW5saW5lQ29uZmlnLmVudHJ5cG9pbnRzRGlyID8/IHVzZXJDb25maWcuZW50cnlwb2ludHNEaXIsXG4gICAgaW1wb3J0cyxcbiAgICBsb2dnZXI6IGlubGluZUNvbmZpZy5sb2dnZXIgPz8gdXNlckNvbmZpZy5sb2dnZXIsXG4gICAgbWFuaWZlc3QsXG4gICAgbW9kZTogaW5saW5lQ29uZmlnLm1vZGUgPz8gdXNlckNvbmZpZy5tb2RlLFxuICAgIHB1YmxpY0RpcjogaW5saW5lQ29uZmlnLnB1YmxpY0RpciA/PyB1c2VyQ29uZmlnLnB1YmxpY0RpcixcbiAgICBydW5uZXIsXG4gICAgc3JjRGlyOiBpbmxpbmVDb25maWcuc3JjRGlyID8/IHVzZXJDb25maWcuc3JjRGlyLFxuICAgIHZpdGU6IHZpdGVDb25maWcsXG4gICAgemlwLFxuICB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiByZXNvbHZlVml0ZUNvbmZpZyhcbiAgZW52OiBDb25maWdFbnYsXG4gIHZpdGU6IElubGluZUNvbmZpZ1sndml0ZSddLFxuKTogUHJvbWlzZTxXeHRWaXRlQ29uZmlnPiB7XG4gIHJldHVybiBhd2FpdCAodHlwZW9mIHZpdGUgPT09ICdmdW5jdGlvbicgPyB2aXRlKGVudikgOiB2aXRlID8/IHt9KTtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZUludGVybmFsWmlwQ29uZmlnKFxuICByb290OiBzdHJpbmcsXG4gIG1lcmdlZENvbmZpZzogSW5saW5lQ29uZmlnLFxuKTogSW50ZXJuYWxDb25maWdbJ3ppcCddIHtcbiAgcmV0dXJuIHtcbiAgICBzb3VyY2VzVGVtcGxhdGU6ICd7e25hbWV9fS17e3ZlcnNpb259fS1zb3VyY2VzLnppcCcsXG4gICAgYXJ0aWZhY3RUZW1wbGF0ZTogJ3t7bmFtZX19LXt7dmVyc2lvbn19LXt7YnJvd3Nlcn19LnppcCcsXG4gICAgc291cmNlc1Jvb3Q6IHJvb3QsXG4gICAgLi4ubWVyZ2VkQ29uZmlnLnppcCxcbiAgICBpZ25vcmVkU291cmNlczogW1xuICAgICAgJyoqL25vZGVfbW9kdWxlcycsXG4gICAgICAvLyBXWFQgZmlsZXNcbiAgICAgICcqKi93ZWItZXh0LmNvbmZpZy50cycsXG4gICAgICAvLyBIaWRkZW4gZmlsZXNcbiAgICAgICcqKi8uKicsXG4gICAgICAvLyBUZXN0c1xuICAgICAgJyoqL19fdGVzdHNfXy8qKicsXG4gICAgICAnKiovKi4rKHRlc3R8c3BlYykuPyhjfG0pKyhqfHQpcz8oeCknLFxuICAgICAgLy8gRnJvbSB1c2VyXG4gICAgICAuLi4obWVyZ2VkQ29uZmlnLnppcD8uaWdub3JlZFNvdXJjZXMgPz8gW10pLFxuICAgIF0sXG4gIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVJbnRlcm5hbFZpdGVDb25maWcoXG4gIGVudjogQ29uZmlnRW52LFxuICBtZXJnZWRDb25maWc6IElubGluZUNvbmZpZyxcbiAgZmluYWxDb25maWc6IEludGVybmFsQ29uZmlnLFxuKSB7XG4gIGNvbnN0IGludGVybmFsVml0ZTogdml0ZS5JbmxpbmVDb25maWcgPSBhd2FpdCByZXNvbHZlVml0ZUNvbmZpZyhcbiAgICBlbnYsXG4gICAgbWVyZ2VkQ29uZmlnLnZpdGUsXG4gICk7XG4gIGludGVybmFsVml0ZS5yb290ID0gZmluYWxDb25maWcucm9vdDtcbiAgaW50ZXJuYWxWaXRlLmNvbmZpZ0ZpbGUgPSBmYWxzZTtcbiAgaW50ZXJuYWxWaXRlLmxvZ0xldmVsID0gJ3dhcm4nO1xuXG4gIGludGVybmFsVml0ZS5idWlsZCA/Pz0ge307XG4gIGludGVybmFsVml0ZS5idWlsZC5vdXREaXIgPSBmaW5hbENvbmZpZy5vdXREaXI7XG4gIGludGVybmFsVml0ZS5idWlsZC5lbXB0eU91dERpciA9IGZhbHNlO1xuXG4gIGludGVybmFsVml0ZS5wbHVnaW5zID8/PSBbXTtcbiAgaW50ZXJuYWxWaXRlLnBsdWdpbnMucHVzaChwbHVnaW5zLmRvd25sb2FkKGZpbmFsQ29uZmlnKSk7XG4gIGludGVybmFsVml0ZS5wbHVnaW5zLnB1c2gocGx1Z2lucy5kZXZIdG1sUHJlcmVuZGVyKGZpbmFsQ29uZmlnKSk7XG4gIGludGVybmFsVml0ZS5wbHVnaW5zLnB1c2gocGx1Z2lucy51bmltcG9ydChmaW5hbENvbmZpZykpO1xuICBpbnRlcm5hbFZpdGUucGx1Z2lucy5wdXNoKFxuICAgIHBsdWdpbnMudmlydHVhbEVudHJ5cG9pbignYmFja2dyb3VuZCcsIGZpbmFsQ29uZmlnKSxcbiAgKTtcbiAgaW50ZXJuYWxWaXRlLnBsdWdpbnMucHVzaChcbiAgICBwbHVnaW5zLnZpcnR1YWxFbnRyeXBvaW4oJ2NvbnRlbnQtc2NyaXB0JywgZmluYWxDb25maWcpLFxuICApO1xuICBpbnRlcm5hbFZpdGUucGx1Z2lucy5wdXNoKHBsdWdpbnMuZGV2U2VydmVyR2xvYmFscyhmaW5hbENvbmZpZykpO1xuICBpbnRlcm5hbFZpdGUucGx1Z2lucy5wdXNoKHBsdWdpbnMudHNjb25maWdQYXRocyhmaW5hbENvbmZpZykpO1xuICBpbnRlcm5hbFZpdGUucGx1Z2lucy5wdXNoKHBsdWdpbnMubm9vcEJhY2tncm91bmQoKSk7XG5cbiAgaW50ZXJuYWxWaXRlLmRlZmluZSA/Pz0ge307XG4gIGZvciAoY29uc3QgZ2xvYmFsIG9mIGdldEdsb2JhbHMoZmluYWxDb25maWcpKSB7XG4gICAgaW50ZXJuYWxWaXRlLmRlZmluZVtnbG9iYWwubmFtZV0gPSBKU09OLnN0cmluZ2lmeShnbG9iYWwudmFsdWUpO1xuICB9XG4gIHJldHVybiBpbnRlcm5hbFZpdGU7XG59XG4iLCAiaW1wb3J0IGZzLCB7IGVuc3VyZURpciB9IGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCB7IEZzQ2FjaGUgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBkaXJuYW1lLCByZXNvbHZlIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQgeyB3cml0ZUZpbGVJZkRpZmZlcmVudCB9IGZyb20gJy4vZnMnO1xuXG4vKipcbiAqIEEgYmFzaWMgZmlsZSBzeXN0ZW0gY2FjaGUgc3RvcmVkIGF0IGA8c3JjRGlyPi8ud3h0L2NhY2hlLzxrZXk+YC4gSnVzdCBjYWNoZXMgYSBzdHJpbmcgaW4gYVxuICogZmlsZSBmb3IgdGhlIGdpdmVuIGtleS5cbiAqXG4gKiBAcGFyYW0gc3JjRGlyIEFic29sdXRlIHBhdGggdG8gc291cmNlIGRpcmVjdG9yeS4gU2VlIGBJbnRlcm5hbENvbmZpZy5zcmNEaXJgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVGc0NhY2hlKHd4dERpcjogc3RyaW5nKTogRnNDYWNoZSB7XG4gIGNvbnN0IGdldFBhdGggPSAoa2V5OiBzdHJpbmcpID0+XG4gICAgcmVzb2x2ZSh3eHREaXIsICdjYWNoZScsIGVuY29kZVVSSUNvbXBvbmVudChrZXkpKTtcblxuICByZXR1cm4ge1xuICAgIGFzeW5jIHNldChrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgY29uc3QgcGF0aCA9IGdldFBhdGgoa2V5KTtcbiAgICAgIGF3YWl0IGVuc3VyZURpcihkaXJuYW1lKHBhdGgpKTtcbiAgICAgIGF3YWl0IHdyaXRlRmlsZUlmRGlmZmVyZW50KHBhdGgsIHZhbHVlKTtcbiAgICB9LFxuICAgIGFzeW5jIGdldChrZXk6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gICAgICBjb25zdCBwYXRoID0gZ2V0UGF0aChrZXkpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IGZzLnJlYWRGaWxlKHBhdGgsICd1dGYtOCcpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfSxcbiAgfTtcbn1cbiIsICJpbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnO1xuXG4vKipcbiAqIE9ubHkgd3JpdGUgdGhlIGNvbnRlbnRzIHRvIGEgZmlsZSBpZiBpdCByZXN1bHRzIGluIGEgY2hhbmdlLiBUaGlzIHByZXZlbnRzIHVubmVjZXNzYXJ5IGZpbGVcbiAqIHdhdGNoZXJzIGZyb20gYmVpbmcgdHJpZ2dlcmVkLCBsaWtlIFdYVCdzIGRldiBzZXJ2ZXIgb3IgdGhlIFRTIGxhbmd1YWdlIHNlcnZlciBpbiBlZGl0b3JzLlxuICpcbiAqIEBwYXJhbSBmaWxlIFRoZSBmaWxlIHRvIHdyaXRlIHRvLlxuICogQHBhcmFtIG5ld0NvbnRlbnRzIFRoZSBuZXcgdGV4dCBjb250ZW50IHRvIHdyaXRlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd3JpdGVGaWxlSWZEaWZmZXJlbnQoXG4gIGZpbGU6IHN0cmluZyxcbiAgbmV3Q29udGVudHM6IHN0cmluZyxcbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBleGlzdGluZ0NvbnRlbnRzID0gYXdhaXQgZnNcbiAgICAucmVhZEZpbGUoZmlsZSwgJ3V0Zi04JylcbiAgICAuY2F0Y2goKCkgPT4gdW5kZWZpbmVkKTtcblxuICBpZiAoZXhpc3RpbmdDb250ZW50cyAhPT0gbmV3Q29udGVudHMpIHtcbiAgICBhd2FpdCBmcy53cml0ZUZpbGUoZmlsZSwgbmV3Q29udGVudHMpO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgRW50cnlwb2ludCB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCBwYXRoLCB7IHJlbGF0aXZlLCByZXNvbHZlIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IG5vcm1hbGl6ZVBhdGggfSBmcm9tICcuL3BhdGhzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGdldEVudHJ5cG9pbnROYW1lKFxuICBlbnRyeXBvaW50c0Rpcjogc3RyaW5nLFxuICBpbnB1dFBhdGg6IHN0cmluZyxcbiAgLy8gdHlwZTogRW50cnlwb2ludFsndHlwZSddLFxuKTogc3RyaW5nIHtcbiAgY29uc3QgcmVsYXRpdmVQYXRoID0gcGF0aC5yZWxhdGl2ZShlbnRyeXBvaW50c0RpciwgaW5wdXRQYXRoKTtcbiAgLy8gR3JhYiB0aGUgc3RyaW5nIHVwIHRvIHRoZSBmaXJzdCAuIG9yIC8gb3IgXFxcXFxuICBjb25zdCBuYW1lID0gcmVsYXRpdmVQYXRoLnNwbGl0KC9bXFwuXFwvXFxcXF0vLCAyKVswXTtcblxuICByZXR1cm4gbmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEVudHJ5cG9pbnRPdXRwdXRGaWxlKFxuICBlbnRyeXBvaW50OiBFbnRyeXBvaW50LFxuICBleHQ6IHN0cmluZyxcbik6IHN0cmluZyB7XG4gIHJldHVybiByZXNvbHZlKGVudHJ5cG9pbnQub3V0cHV0RGlyLCBgJHtlbnRyeXBvaW50Lm5hbWV9JHtleHR9YCk7XG59XG5cbi8qKlxuICogUmV0dXJuJ3MgdGhlIGVudHJ5cG9pbnQncyBvdXRwdXQgcGF0aCByZWxhdGl2ZSB0byB0aGUgb3V0cHV0IGRpcmVjdG9yeS4gVXNlZCBmb3IgcGF0aHMgaW4gdGhlXG4gKiBtYW5pZmVzdCBhbmQgcm9sbHVwJ3MgYnVuZGxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW50cnlwb2ludEJ1bmRsZVBhdGgoXG4gIGVudHJ5cG9pbnQ6IEVudHJ5cG9pbnQsXG4gIG91dERpcjogc3RyaW5nLFxuICBleHQ6IHN0cmluZyxcbik6IHN0cmluZyB7XG4gIHJldHVybiBub3JtYWxpemVQYXRoKFxuICAgIHJlbGF0aXZlKG91dERpciwgZ2V0RW50cnlwb2ludE91dHB1dEZpbGUoZW50cnlwb2ludCwgZXh0KSksXG4gICk7XG59XG4iLCAiaW1wb3J0IG5vZGVQYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgKiBhcyB2aXRlIGZyb20gJ3ZpdGUnO1xuXG4vKipcbiAqIENvbnZlcnRzIHN5c3RlbSBwYXRocyB0byBub3JtYWxpemVkIGJ1bmRsZXIgcGF0aC4gT24gd2luZG93cyBhbmQgdW5peCwgdGhpcyByZXR1cm5zIHBhdGhzIHdpdGggL1xuICogaW5zdGVhZCBvZiBcXC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZVBhdGgocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHZpdGUubm9ybWFsaXplUGF0aChwYXRoKTtcbn1cblxuLyoqXG4gKiBHaXZlbiBhIG5vcm1hbGl6ZWQgcGF0aCwgY29udmVydCBpdCB0byB0aGUgc3lzdGVtIHBhdGggc3R5bGUuIE9uIFdpbmRvd3MsIHN3aXRjaCB0byBcXCwgb3RoZXJ3aXNlIHVzZSAvLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdW5ub3JtYWxpemVQYXRoKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBub2RlUGF0aC5ub3JtYWxpemUocGF0aCk7XG59XG5cbmV4cG9ydCBjb25zdCBDU1NfRVhURU5TSU9OUyA9IFsnY3NzJywgJ3Njc3MnLCAnc2FzcycsICdsZXNzJywgJ3N0eWwnLCAnc3R5bHVzJ107XG5cbi8vIC5tb2R1bGUuY3NzIGZpbGVzIGFyZSBub3Qgc3VwcG9ydGVkIGJlY2F1c2UgdGhlc2UgYXJlIGdsb2JhbCBDU1MgZmlsZXMsIHNvIHVzaW5nIENTUyBtb2R1bGVzIGRvZXNuJ3QgbWFrZSBzZW5zZS5cbmV4cG9ydCBjb25zdCBDU1NfRVhURU5TSU9OU19QQVRURVJOID0gYCsoJHtDU1NfRVhURU5TSU9OUy5qb2luKCd8Jyl9KWA7XG4iLCAiaW1wb3J0ICogYXMgdml0ZSBmcm9tICd2aXRlJztcbmltcG9ydCB7IEludGVybmFsQ29uZmlnIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgZ2V0RW50cnlwb2ludE5hbWUgfSBmcm9tICcuLi91dGlscy9lbnRyeXBvaW50cyc7XG5pbXBvcnQgeyBwYXJzZUhUTUwgfSBmcm9tICdsaW5rZWRvbSc7XG5pbXBvcnQgeyBkaXJuYW1lLCBpc0Fic29sdXRlLCByZWxhdGl2ZSwgcmVzb2x2ZSB9IGZyb20gJ3BhdGgnO1xuXG4vKipcbiAqIFByZS1yZW5kZXJzIHRoZSBIVE1MIGVudHJ5cG9pbnRzIHdoZW4gYnVpbGRpbmcgdGhlIGV4dGVuc2lvbiB0byBjb25uZWN0IHRvIHRoZSBkZXYgc2VydmVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGV2SHRtbFByZXJlbmRlcihjb25maWc6IEludGVybmFsQ29uZmlnKTogdml0ZS5QbHVnaW4ge1xuICByZXR1cm4ge1xuICAgIGFwcGx5OiAnYnVpbGQnLFxuICAgIG5hbWU6ICd3eHQ6ZGV2LWh0bWwtcHJlcmVuZGVyJyxcbiAgICBjb25maWcoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICByZXNvbHZlOiB7XG4gICAgICAgICAgYWxpYXM6IHtcbiAgICAgICAgICAgICdAd3h0L3JlbG9hZC1odG1sJzogcmVzb2x2ZShcbiAgICAgICAgICAgICAgY29uZmlnLnJvb3QsXG4gICAgICAgICAgICAgICdub2RlX21vZHVsZXMvd3h0L2Rpc3QvdmlydHVhbC1tb2R1bGVzL3JlbG9hZC1odG1sLmpzJyxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfSxcbiAgICBhc3luYyB0cmFuc2Zvcm0oaHRtbCwgaWQpIHtcbiAgICAgIGNvbnN0IHNlcnZlciA9IGNvbmZpZy5zZXJ2ZXI7XG4gICAgICBpZiAoY29uZmlnLmNvbW1hbmQgIT09ICdzZXJ2ZScgfHwgc2VydmVyID09IG51bGwgfHwgIWlkLmVuZHNXaXRoKCcuaHRtbCcpKVxuICAgICAgICByZXR1cm47XG5cbiAgICAgIGNvbnN0IG9yaWdpbmFsVXJsID0gYCR7c2VydmVyLm9yaWdpbn0ke2lkfWA7XG4gICAgICBjb25zdCBuYW1lID0gZ2V0RW50cnlwb2ludE5hbWUoY29uZmlnLmVudHJ5cG9pbnRzRGlyLCBpZCk7XG4gICAgICBjb25zdCB1cmwgPSBgJHtzZXJ2ZXIub3JpZ2lufS8ke25hbWV9Lmh0bWxgO1xuICAgICAgY29uc3Qgc2VydmVySHRtbCA9IGF3YWl0IHNlcnZlci50cmFuc2Zvcm1JbmRleEh0bWwoXG4gICAgICAgIHVybCxcbiAgICAgICAgaHRtbCxcbiAgICAgICAgb3JpZ2luYWxVcmwsXG4gICAgICApO1xuICAgICAgY29uc3QgeyBkb2N1bWVudCB9ID0gcGFyc2VIVE1MKHNlcnZlckh0bWwpO1xuXG4gICAgICBjb25zdCBwb2ludFRvRGV2U2VydmVyID0gKHF1ZXJ5U2VsZWN0b3I6IHN0cmluZywgYXR0cjogc3RyaW5nKTogdm9pZCA9PiB7XG4gICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwocXVlcnlTZWxlY3RvcikuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHNyYyA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKGF0dHIpO1xuICAgICAgICAgIGlmICghc3JjKSByZXR1cm47XG5cbiAgICAgICAgICBpZiAoaXNBYnNvbHV0ZShzcmMpKSB7XG4gICAgICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShhdHRyLCBzZXJ2ZXIub3JpZ2luICsgc3JjKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHNyYy5zdGFydHNXaXRoKCcuJykpIHtcbiAgICAgICAgICAgIGNvbnN0IGFicyA9IHJlc29sdmUoZGlybmFtZShpZCksIHNyYyk7XG4gICAgICAgICAgICBjb25zdCBwYXRobmFtZSA9IHJlbGF0aXZlKGNvbmZpZy5yb290LCBhYnMpO1xuICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoYXR0ciwgYCR7c2VydmVyLm9yaWdpbn0vJHtwYXRobmFtZX1gKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIHBvaW50VG9EZXZTZXJ2ZXIoJ3NjcmlwdFt0eXBlPW1vZHVsZV0nLCAnc3JjJyk7XG4gICAgICBwb2ludFRvRGV2U2VydmVyKCdsaW5rW3JlbD1zdHlsZXNoZWV0XScsICdocmVmJyk7XG5cbiAgICAgIC8vIEFkZCBhIHNjcmlwdCB0byBhZGQgcGFnZSByZWxvYWRpbmdcbiAgICAgIGNvbnN0IHJlbG9hZGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XG4gICAgICByZWxvYWRlci5zcmMgPSAnQHd4dC9yZWxvYWQtaHRtbCc7XG4gICAgICByZWxvYWRlci50eXBlID0gJ21vZHVsZSc7XG4gICAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHJlbG9hZGVyKTtcblxuICAgICAgY29uc3QgbmV3SHRtbCA9IGRvY3VtZW50LnRvU3RyaW5nKCk7XG4gICAgICBjb25maWcubG9nZ2VyLmRlYnVnKCdUcmFuc2Zvcm1lZCAnICsgaWQpO1xuICAgICAgY29uZmlnLmxvZ2dlci5kZWJ1ZygnT2xkIEhUTUw6XFxuJyArIGh0bWwpO1xuICAgICAgY29uZmlnLmxvZ2dlci5kZWJ1ZygnTmV3IEhUTUw6XFxuJyArIG5ld0h0bWwpO1xuICAgICAgcmV0dXJuIG5ld0h0bWw7XG4gICAgfSxcbiAgfTtcbn1cbiIsICJpbXBvcnQgeyBQbHVnaW4gfSBmcm9tICd2aXRlJztcbmltcG9ydCB7IEludGVybmFsQ29uZmlnIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG4vKipcbiAqIERlZmluZXMgZ2xvYmFsIGNvbnN0YW50cyBhYm91dCB0aGUgZGV2IHNlcnZlci4gSGVscHMgc2NyaXB0cyBjb25uZWN0IHRvIHRoZSBzZXJ2ZXIncyB3ZWIgc29ja2V0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGV2U2VydmVyR2xvYmFscyhpbnRlcm5hbENvbmZpZzogSW50ZXJuYWxDb25maWcpOiBQbHVnaW4ge1xuICByZXR1cm4ge1xuICAgIG5hbWU6ICd3eHQ6ZGV2LXNlcnZlci1nbG9iYWxzJyxcbiAgICBjb25maWcoKSB7XG4gICAgICBpZiAoaW50ZXJuYWxDb25maWcuc2VydmVyID09IG51bGwgfHwgaW50ZXJuYWxDb25maWcuY29tbWFuZCA9PSAnYnVpbGQnKVxuICAgICAgICByZXR1cm47XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRlZmluZToge1xuICAgICAgICAgIF9fREVWX1NFUlZFUl9QUk9UT0NPTF9fOiBKU09OLnN0cmluZ2lmeSgnd3M6JyksXG4gICAgICAgICAgX19ERVZfU0VSVkVSX0hPU1ROQU1FX186IEpTT04uc3RyaW5naWZ5KFxuICAgICAgICAgICAgaW50ZXJuYWxDb25maWcuc2VydmVyLmhvc3RuYW1lLFxuICAgICAgICAgICksXG4gICAgICAgICAgX19ERVZfU0VSVkVSX1BPUlRfXzogSlNPTi5zdHJpbmdpZnkoaW50ZXJuYWxDb25maWcuc2VydmVyLnBvcnQpLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9LFxuICB9O1xufVxuIiwgImltcG9ydCBkbnMgZnJvbSAnbm9kZTpkbnMnO1xuaW1wb3J0IHsgd2l0aFRpbWVvdXQgfSBmcm9tICcuL3Byb21pc2VzJztcbmltcG9ydCB7IEludGVybmFsQ29uZmlnIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5mdW5jdGlvbiBpc09mZmxpbmUoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGNvbnN0IGlzT2ZmbGluZSA9IG5ldyBQcm9taXNlPGJvb2xlYW4+KChyZXMpID0+IHtcbiAgICBkbnMucmVzb2x2ZSgnZ29vZ2xlLmNvbScsIChlcnIpID0+IHtcbiAgICAgIGlmIChlcnIgPT0gbnVsbCkge1xuICAgICAgICByZXMoZmFsc2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzKHRydWUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbiAgcmV0dXJuIHdpdGhUaW1lb3V0KGlzT2ZmbGluZSwgMWUzKS5jYXRjaCgoKSA9PiB0cnVlKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGlzT25saW5lKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCBvZmZsaW5lID0gYXdhaXQgaXNPZmZsaW5lKCk7XG4gIHJldHVybiAhb2ZmbGluZTtcbn1cblxuLyoqXG4gKiBGZXRjaGVzIGEgVVJMIHdpdGggYSBzaW1wbGUgR0VUIHJlcXVlc3QuIEdyYWJzIGl0IGZyb20gY2FjaGUgaWYgaXQgZG9lc24ndCBleGlzdCwgb3IgdGhyb3dzIGFuXG4gKiBlcnJvciBpZiBpdCBjYW4ndCBiZSByZXNvbHZlZCB2aWEgdGhlIG5ldHdvcmsgb3IgY2FjaGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmZXRjaENhY2hlZChcbiAgdXJsOiBzdHJpbmcsXG4gIGNvbmZpZzogSW50ZXJuYWxDb25maWcsXG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICBsZXQgY29udGVudDogc3RyaW5nID0gJyc7XG5cbiAgaWYgKGF3YWl0IGlzT25saW5lKCkpIHtcbiAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaCh1cmwpO1xuICAgIGlmIChyZXMuc3RhdHVzIDwgMzAwKSB7XG4gICAgICBjb250ZW50ID0gYXdhaXQgcmVzLnRleHQoKTtcbiAgICAgIGF3YWl0IGNvbmZpZy5mc0NhY2hlLnNldCh1cmwsIGNvbnRlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25maWcubG9nZ2VyLmRlYnVnKFxuICAgICAgICBgRmFpbGVkIHRvIGRvd25sb2FkIFwiJHt1cmx9XCIsIGZhbGxpbmcgYmFjayB0byBjYWNoZS4uLmAsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGlmICghY29udGVudCkgY29udGVudCA9IChhd2FpdCBjb25maWcuZnNDYWNoZS5nZXQodXJsKSkgPz8gJyc7XG4gIGlmICghY29udGVudClcbiAgICB0aHJvdyBFcnJvcihcbiAgICAgIGBPZmZsaW5lIGFuZCBcIiR7dXJsfVwiIGhhcyBub3QgYmVlbiBjYWNoZWQuIFRyeSBhZ2FpbiB3aGVuIG9ubGluZS5gLFxuICAgICk7XG5cbiAgcmV0dXJuIGNvbnRlbnQ7XG59XG4iLCAiLyoqXG4gKiBBZGQgYSB0aW1lb3V0IHRvIGEgcHJvbWlzZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdpdGhUaW1lb3V0PFQ+KFxuICBwcm9taXNlOiBQcm9taXNlPFQ+LFxuICBkdXJhdGlvbjogbnVtYmVyLFxuKTogUHJvbWlzZTxUPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzLCByZWopID0+IHtcbiAgICBjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICByZWooYFByb21pc2UgdGltZWQgb3V0IGFmdGVyICR7ZHVyYXRpb259bXNgKTtcbiAgICB9LCBkdXJhdGlvbik7XG4gICAgcHJvbWlzZVxuICAgICAgLnRoZW4ocmVzKVxuICAgICAgLmNhdGNoKHJlailcbiAgICAgIC5maW5hbGx5KCgpID0+IGNsZWFyVGltZW91dCh0aW1lb3V0KSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIERvbid0IHVzZSBpbiBwcm9kdWN0aW9uLCBqdXN0IGZvciB0ZXN0aW5nIGFuZCBzbG93aW5nIHRoaW5ncyBkb3duLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2xlZXAobXM6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlcykgPT4gc2V0VGltZW91dChyZXMsIG1zKSk7XG59XG4iLCAiaW1wb3J0IHsgUGx1Z2luIH0gZnJvbSAndml0ZSc7XG5pbXBvcnQgeyBJbnRlcm5hbENvbmZpZyB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IGZldGNoQ2FjaGVkIH0gZnJvbSAnLi4vdXRpbHMvbmV0d29yayc7XG5cbi8qKlxuICogRG93bmxvYWRzIGFueSBVUkwgaW1wb3J0cywgbGlrZSBHb29nbGUgQW5hbHl0aWNzLCBpbnRvIHZpcnR1YWwgbW9kdWxlcyBzbyB0aGV5IGFyZSBidW5kbGVkIHdpdGhcbiAqIHRoZSBleHRlbnNpb24gaW5zdGVhZCBvZiBkZXBlbmRpbmcgb24gcmVtb3RlIGNvZGUgYXQgcnVudGltZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogaW1wb3J0IFwidXJsOmh0dHBzOi8vZ29vZ2xlLXRhZ21hbmFnZXIuY29tL2d0YWc/aWQ9WFlaXCI7XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkb3dubG9hZChjb25maWc6IEludGVybmFsQ29uZmlnKTogUGx1Z2luIHtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnd3h0OmRvd25sb2FkJyxcbiAgICByZXNvbHZlSWQoaWQpIHtcbiAgICAgIGlmIChpZC5zdGFydHNXaXRoKCd1cmw6JykpIHJldHVybiAnXFwwJyArIGlkO1xuICAgIH0sXG4gICAgYXN5bmMgbG9hZChpZCkge1xuICAgICAgaWYgKCFpZC5zdGFydHNXaXRoKCdcXDB1cmw6JykpIHJldHVybjtcblxuICAgICAgLy8gTG9hZCBmaWxlIGZyb20gbmV0d29yayBvciBjYWNoZVxuICAgICAgY29uc3QgdXJsID0gaWQucmVwbGFjZSgnXFwwdXJsOicsICcnKTtcbiAgICAgIHJldHVybiBhd2FpdCBmZXRjaENhY2hlZCh1cmwsIGNvbmZpZyk7XG4gICAgfSxcbiAgfTtcbn1cbiIsICJpbXBvcnQgKiBhcyB2aXRlIGZyb20gJ3ZpdGUnO1xuaW1wb3J0IHsgRW50cnlwb2ludCwgSW50ZXJuYWxDb25maWcgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBkaXJuYW1lLCBleHRuYW1lLCByZXNvbHZlIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IGdldEVudHJ5cG9pbnRCdW5kbGVQYXRoIH0gZnJvbSAnLi4vdXRpbHMvZW50cnlwb2ludHMnO1xuaW1wb3J0IGZzLCB7IGVuc3VyZURpciB9IGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCB7IG5vcm1hbGl6ZVBhdGggfSBmcm9tICcuLi91dGlscy9wYXRocyc7XG5cbi8qKlxuICogRW5zdXJlcyB0aGUgSFRNTCBmaWxlcyBvdXRwdXQgYnkgYSBtdWx0aXBhZ2UgYnVpbGQgYXJlIGluIHRoZSBjb3JyZWN0IGxvY2F0aW9uLiBUaGlzIGRvZXMgdHdvXG4gKiB0aGluZ3M6XG4gKlxuICogMS4gTW92ZXMgdGhlIEhNVEwgZmlsZXMgdG8gdGhlaXIgZmluYWwgbG9jYXRpb24gYXQgYDxvdXREaXI+LzxlbnRyeXBvaW50Lm5hbWU+Lmh0bWxgLlxuICogMi4gVXBkYXRlcyB0aGUgYnVuZGxlIHNvIGl0IHN1bW1hcml6ZXMgdGhlIGZpbGVzIGNvcnJlY3RseSBpbiB0aGUgcmV0dXJuZWQgYnVpbGQgb3V0cHV0LlxuICpcbiAqIEFzc2V0cyAoSlMgYW5kIENTUykgYXJlIG91dHB1dCB0byB0aGUgYDxvdXREaXI+L2Fzc2V0c2AgZGlyZWN0b3J5LCBhbmQgZG9uJ3QgbmVlZCB0byBiZSBtb2RpZmllZC5cbiAqIEhUTUwgZmlsZXMgYWNjZXNzIHRoZW0gdmlhIGFic29sdXRlIFVSTHMsIHNvIHdlIGRvbid0IG5lZWQgdG8gdXBkYXRlIGFueSBpbXBvcnQgcGF0aHMgaW4gdGhlIEhUTUxcbiAqIGZpbGVzIGVpdGhlci5cbiAqXG4gKiBUSElTIFBMVUdJTiBTSE9VTEQgT05MWSBCRSBBUFBMSUVEIFRPIE1VTFRJUEFHRSBCVUlMRFMuIEl0IHNob3VsZCBub3QgYmUgYWRkZWQgdG8gZXZlcnkgYnVpbGQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtdWx0aXBhZ2VNb3ZlKFxuICBlbnRyeXBvaW50czogRW50cnlwb2ludFtdLFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuKTogdml0ZS5QbHVnaW4ge1xuICByZXR1cm4ge1xuICAgIG5hbWU6ICd3eHQ6bXVsdGlwYWdlLW1vdmUnLFxuICAgIGFzeW5jIHdyaXRlQnVuZGxlKF8sIGJ1bmRsZSkge1xuICAgICAgZm9yIChjb25zdCBvbGRCdW5kbGVQYXRoIGluIGJ1bmRsZSkge1xuICAgICAgICAvLyBvbGRCdW5kbGVQYXRoID0gJ2VudHJ5cG9pbnRzL3BvcHVwLmh0bWwnIG9yICdlbnRyeXBvaW50cy9vcHRpb25zL2luZGV4Lmh0bWwnXG5cbiAgICAgICAgLy8gRmluZCBhIG1hdGNoaW5nIGVudHJ5cG9pbnQgLSBvbGRCdW5kbGVQYXRoIGlzIHRoZSBzYW1lIGFzIGVuZCBlbmQgb2YgdGhlIGlucHV0IHBhdGguXG4gICAgICAgIGNvbnN0IGVudHJ5cG9pbnQgPSBlbnRyeXBvaW50cy5maW5kKFxuICAgICAgICAgIChlbnRyeSkgPT4gISFub3JtYWxpemVQYXRoKGVudHJ5LmlucHV0UGF0aCkuZW5kc1dpdGgob2xkQnVuZGxlUGF0aCksXG4gICAgICAgICk7XG4gICAgICAgIGlmIChlbnRyeXBvaW50ID09IG51bGwpIHtcbiAgICAgICAgICBjb25maWcubG9nZ2VyLmRlYnVnKFxuICAgICAgICAgICAgYE5vIGVudHJ5cG9pbnQgZm91bmQgZm9yICR7b2xkQnVuZGxlUGF0aH0sIGxlYXZpbmcgaW4gY2h1bmtzIGRpcmVjdG9yeWAsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEdldCB0aGUgbmV3IGJ1bmRsZSBwYXRoXG4gICAgICAgIGNvbnN0IG5ld0J1bmRsZVBhdGggPSBnZXRFbnRyeXBvaW50QnVuZGxlUGF0aChcbiAgICAgICAgICBlbnRyeXBvaW50LFxuICAgICAgICAgIGNvbmZpZy5vdXREaXIsXG4gICAgICAgICAgZXh0bmFtZShvbGRCdW5kbGVQYXRoKSxcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKG5ld0J1bmRsZVBhdGggPT09IG9sZEJ1bmRsZVBhdGgpIHtcbiAgICAgICAgICBjb25maWcubG9nZ2VyLmRlYnVnKFxuICAgICAgICAgICAgJ0hUTUwgZmlsZSBpcyBhbHJlYWR5IGluIHRoZSBjb3JyZWN0IGxvY2F0aW9uJyxcbiAgICAgICAgICAgIG9sZEJ1bmRsZVBhdGgsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE1vdmUgZmlsZSBhbmQgdXBkYXRlIGJ1bmRsZVxuICAgICAgICAvLyBEbyB0aGlzIGluc2lkZSBhIG11dGV4IGxvY2sgc28gaXQgb25seSBydW5zIG9uZSBhdCBhIHRpbWUgZm9yIGNvbmN1cnJlbnQgbXVsdGlwYWdlIGJ1aWxkc1xuICAgICAgICBjb25zdCBvbGRBYnNQYXRoID0gcmVzb2x2ZShjb25maWcub3V0RGlyLCBvbGRCdW5kbGVQYXRoKTtcbiAgICAgICAgY29uc3QgbmV3QWJzUGF0aCA9IHJlc29sdmUoY29uZmlnLm91dERpciwgbmV3QnVuZGxlUGF0aCk7XG4gICAgICAgIGF3YWl0IGVuc3VyZURpcihkaXJuYW1lKG5ld0Fic1BhdGgpKTtcbiAgICAgICAgYXdhaXQgZnMubW92ZShvbGRBYnNQYXRoLCBuZXdBYnNQYXRoLCB7IG92ZXJ3cml0ZTogdHJ1ZSB9KTtcblxuICAgICAgICBjb25zdCByZW5hbWVkQ2h1bmsgPSB7XG4gICAgICAgICAgLi4uYnVuZGxlW29sZEJ1bmRsZVBhdGhdLFxuICAgICAgICAgIGZpbGVOYW1lOiBuZXdCdW5kbGVQYXRoLFxuICAgICAgICB9O1xuICAgICAgICBkZWxldGUgYnVuZGxlW29sZEJ1bmRsZVBhdGhdO1xuICAgICAgICBidW5kbGVbbmV3QnVuZGxlUGF0aF0gPSByZW5hbWVkQ2h1bms7XG4gICAgICB9XG4gICAgfSxcbiAgfTtcbn1cbiIsICJpbXBvcnQgeyBjcmVhdGVVbmltcG9ydCB9IGZyb20gJ3VuaW1wb3J0JztcbmltcG9ydCB7IEludGVybmFsQ29uZmlnIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgZ2V0VW5pbXBvcnRPcHRpb25zIH0gZnJvbSAnLi4vdXRpbHMvYXV0by1pbXBvcnRzJztcbmltcG9ydCAqIGFzIHZpdGUgZnJvbSAndml0ZSc7XG5pbXBvcnQgeyBleHRuYW1lIH0gZnJvbSAncGF0aCc7XG5cbmNvbnN0IEVOQUJMRURfRVhURU5TSU9OUzogUmVjb3JkPHN0cmluZywgYm9vbGVhbiB8IHVuZGVmaW5lZD4gPSB7XG4gICcuanMnOiB0cnVlLFxuICAnLmpzeCc6IHRydWUsXG4gICcudHMnOiB0cnVlLFxuICAnLnRzeCc6IHRydWUsXG4gICcudnVlJzogdHJ1ZSxcbiAgJy5zdmVsdGUnOiB0cnVlLFxufTtcblxuLyoqXG4gKiBJbmplY3QgYW55IGdsb2JhbCBpbXBvcnRzIGRlZmluZWQgYnkgdW5pbXBvcnRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVuaW1wb3J0KGNvbmZpZzogSW50ZXJuYWxDb25maWcpOiB2aXRlLlBsdWdpbk9wdGlvbiB7XG4gIGNvbnN0IG9wdGlvbnMgPSBnZXRVbmltcG9ydE9wdGlvbnMoY29uZmlnKTtcbiAgaWYgKG9wdGlvbnMgPT09IGZhbHNlKSByZXR1cm4gW107XG5cbiAgY29uc3QgdW5pbXBvcnQgPSBjcmVhdGVVbmltcG9ydChvcHRpb25zKTtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICd3eHQ6dW5pbXBvcnQnLFxuICAgIGFzeW5jIGNvbmZpZygpIHtcbiAgICAgIGF3YWl0IHVuaW1wb3J0LnNjYW5JbXBvcnRzRnJvbURpcih1bmRlZmluZWQsIHsgY3dkOiBjb25maWcuc3JjRGlyIH0pO1xuICAgIH0sXG4gICAgYXN5bmMgdHJhbnNmb3JtKGNvZGUsIGlkKSB7XG4gICAgICBjb25zdCBleHQgPSBleHRuYW1lKGlkKTtcbiAgICAgIGlmIChFTkFCTEVEX0VYVEVOU0lPTlNbZXh0XSkgcmV0dXJuIHVuaW1wb3J0LmluamVjdEltcG9ydHMoY29kZSwgaWQpO1xuICAgIH0sXG4gIH07XG59XG4iLCAiaW1wb3J0IHsgVW5pbXBvcnRPcHRpb25zIH0gZnJvbSAndW5pbXBvcnQnO1xuaW1wb3J0IHsgSW50ZXJuYWxDb25maWcgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBtZXJnZUNvbmZpZyB9IGZyb20gJ3ZpdGUnO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VW5pbXBvcnRPcHRpb25zKFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuKTogUGFydGlhbDxVbmltcG9ydE9wdGlvbnMgfCBmYWxzZT4ge1xuICBpZiAoY29uZmlnLmltcG9ydHMgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XG5cbiAgY29uc3QgZGVmYXVsdE9wdGlvbnM6IFBhcnRpYWw8VW5pbXBvcnRPcHRpb25zPiA9IHtcbiAgICBkZWJ1Z0xvZzogY29uZmlnLmxvZ2dlci5kZWJ1ZyxcbiAgICBpbXBvcnRzOiBbeyBuYW1lOiAnZGVmaW5lQ29uZmlnJywgZnJvbTogJ3d4dCcgfV0sXG4gICAgcHJlc2V0czogW3sgcGFja2FnZTogJ3d4dC9jbGllbnQnIH0sIHsgcGFja2FnZTogJ3d4dC9icm93c2VyJyB9XSxcbiAgICB3YXJuOiBjb25maWcubG9nZ2VyLndhcm4sXG4gICAgZGlyczogWydjb21wb25lbnRzJywgJ2NvbXBvc2FibGVzJywgJ2hvb2tzJywgJ3V0aWxzJ10sXG4gIH07XG5cbiAgcmV0dXJuIG1lcmdlQ29uZmlnKFxuICAgIGRlZmF1bHRPcHRpb25zLFxuICAgIGNvbmZpZy5pbXBvcnRzLFxuICApIGFzIFBhcnRpYWw8VW5pbXBvcnRPcHRpb25zPjtcbn1cbiIsICJpbXBvcnQgeyBQbHVnaW4gfSBmcm9tICd2aXRlJztcbmltcG9ydCB7IEVudHJ5cG9pbnQsIEludGVybmFsQ29uZmlnIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCB7IHJlc29sdmUgfSBmcm9tICdwYXRoJztcbmltcG9ydCB7IG5vcm1hbGl6ZVBhdGggfSBmcm9tICcuLi91dGlscy9wYXRocyc7XG5cbi8qKlxuICogV3JhcHMgYSB1c2VyJ3MgZW50cnlwb2ludCB3aXRoIGEgdml0dWFsIHZlcnNpb24gd2l0aCBhZGRpdGlvbmFsIGxvZ2ljLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdmlydHVhbEVudHJ5cG9pbihcbiAgdHlwZTogRW50cnlwb2ludFsndHlwZSddLFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuKTogUGx1Z2luIHtcbiAgY29uc3QgdmlydHVhbElkID0gYHZpcnR1YWw6d3h0LSR7dHlwZX0/YDtcbiAgY29uc3QgcmVzb2x2ZWRWaXJ0dWFsSWQgPSBgXFwwJHt2aXJ0dWFsSWR9YDtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6IGB3eHQ6dmlydHVhbC1lbnRyeXBvaW50YCxcbiAgICByZXNvbHZlSWQoaWQpIHtcbiAgICAgIC8vIElkIGRvZXNuJ3Qgc3RhcnQgd2l0aCBwcmVmaXgsIGl0IGxvb2tzIGxpa2UgdGhpczpcbiAgICAgIC8vIC9wYXRoL3RvL3Byb2plY3QvdmlydHVhbDpiYWNrZ3JvdW5kPy9wYXRoL3RvL3Byb2plY3QvZW50cnlwb2ludHMvYmFja2dyb3VuZC50c1xuICAgICAgY29uc3QgaW5kZXggPSBpZC5pbmRleE9mKHZpcnR1YWxJZCk7XG4gICAgICBpZiAoaW5kZXggPT09IC0xKSByZXR1cm47XG5cbiAgICAgIGNvbnN0IGlucHV0UGF0aCA9IG5vcm1hbGl6ZVBhdGgoaWQuc3Vic3RyaW5nKGluZGV4ICsgdmlydHVhbElkLmxlbmd0aCkpO1xuICAgICAgcmV0dXJuIHJlc29sdmVkVmlydHVhbElkICsgaW5wdXRQYXRoO1xuICAgIH0sXG4gICAgYXN5bmMgbG9hZChpZCkge1xuICAgICAgaWYgKCFpZC5zdGFydHNXaXRoKHJlc29sdmVkVmlydHVhbElkKSkgcmV0dXJuO1xuXG4gICAgICBjb25zdCBpbnB1dFBhdGggPSBpZC5yZXBsYWNlKHJlc29sdmVkVmlydHVhbElkLCAnJyk7XG4gICAgICBjb25zdCB0ZW1wbGF0ZSA9IGF3YWl0IGZzLnJlYWRGaWxlKFxuICAgICAgICByZXNvbHZlKFxuICAgICAgICAgIGNvbmZpZy5yb290LFxuICAgICAgICAgIGBub2RlX21vZHVsZXMvd3h0L2Rpc3QvdmlydHVhbC1tb2R1bGVzLyR7dHlwZX0tZW50cnlwb2ludC5qc2AsXG4gICAgICAgICksXG4gICAgICAgICd1dGYtOCcsXG4gICAgICApO1xuICAgICAgcmV0dXJuIHRlbXBsYXRlLnJlcGxhY2UoYHZpcnR1YWw6dXNlci0ke3R5cGV9YCwgaW5wdXRQYXRoKTtcbiAgICB9LFxuICB9O1xufVxuIiwgImltcG9ydCB7IEludGVybmFsQ29uZmlnIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0ICogYXMgdml0ZSBmcm9tICd2aXRlJztcblxuZXhwb3J0IGZ1bmN0aW9uIHRzY29uZmlnUGF0aHMoY29uZmlnOiBJbnRlcm5hbENvbmZpZyk6IHZpdGUuUGx1Z2luIHtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnd3h0OmFsaWFzZXMnLFxuICAgIGFzeW5jIGNvbmZpZygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJlc29sdmU6IHtcbiAgICAgICAgICBhbGlhczoge1xuICAgICAgICAgICAgJ0BAJzogY29uZmlnLnJvb3QsXG4gICAgICAgICAgICAnfn4nOiBjb25maWcucm9vdCxcbiAgICAgICAgICAgICdAJzogY29uZmlnLnNyY0RpcixcbiAgICAgICAgICAgICd+JzogY29uZmlnLnNyY0RpcixcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9LFxuICB9O1xufVxuIiwgImltcG9ydCB7IFBsdWdpbiB9IGZyb20gJ3ZpdGUnO1xuXG4vKipcbiAqIEluIGRldiBtb2RlLCBpZiB0aGVyZSdzIG5vdCBhIGJhY2tncm91bmQgc2NyaXB0IGxpc3RlZCwgd2UgbmVlZCB0byBhZGQgb25lLlxuICpcbiAqIFRoaXMgZGVmaW5lJ3MgYSB2aXJ0dWFsIG1vZHVsZSB0aGF0IGlzIGJhc2ljYWxseSBqdXN0IGEgbm9vcC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vb3BCYWNrZ3JvdW5kKCk6IFBsdWdpbiB7XG4gIGNvbnN0IHZpcnR1YWxNb2R1bGVJZCA9IFZJUlRVQUxfTk9PUF9CQUNLR1JPVU5EX01PRFVMRV9JRDtcbiAgY29uc3QgcmVzb2x2ZWRWaXJ0dWFsTW9kdWxlSWQgPSAnXFwwJyArIHZpcnR1YWxNb2R1bGVJZDtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnd3h0Om5vb3AtYmFja2dyb3VuZCcsXG4gICAgcmVzb2x2ZUlkKGlkKSB7XG4gICAgICBpZiAoaWQgPT09IHZpcnR1YWxNb2R1bGVJZCkgcmV0dXJuIHJlc29sdmVkVmlydHVhbE1vZHVsZUlkO1xuICAgIH0sXG4gICAgbG9hZChpZCkge1xuICAgICAgaWYgKGlkID09PSByZXNvbHZlZFZpcnR1YWxNb2R1bGVJZCkge1xuICAgICAgICByZXR1cm4gYGltcG9ydCB7IGRlZmluZUJhY2tncm91bmQgfSBmcm9tICd3eHQvY2xpZW50JztcXG5leHBvcnQgZGVmYXVsdCBkZWZpbmVCYWNrZ3JvdW5kKCgpID0+IHZvaWQgMClgO1xuICAgICAgfVxuICAgIH0sXG4gIH07XG59XG5cbmV4cG9ydCBjb25zdCBWSVJUVUFMX05PT1BfQkFDS0dST1VORF9NT0RVTEVfSUQgPSAndmlydHVhbDp1c2VyLWJhY2tncm91bmQnO1xuIiwgImltcG9ydCAqIGFzIHZpdGUgZnJvbSAndml0ZSc7XG5pbXBvcnQgeyBFbnRyeXBvaW50LCBJbnRlcm5hbENvbmZpZyB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IGdldEVudHJ5cG9pbnRCdW5kbGVQYXRoIH0gZnJvbSAnLi4vdXRpbHMvZW50cnlwb2ludHMnO1xuXG4vKipcbiAqIFJlbmFtZSBDU1MgZW50cnlwb2ludCBvdXRwdXRzIHRvIGVuc3VyZSBhIEpTIGZpbGUgaXMgbm90IGdlbmVyYXRlZCwgYW5kIHRoYXQgdGhlIENTUyBmaWxlIGlzXG4gKiBwbGFjZWQgaW4gdGhlIGNvcnJlY3QgcGxhY2UuXG4gKlxuICogSXQ6XG4gKiAxLiBSZW5hbWVzIENTUyBmaWxlcyB0byB0aGVpciBmaW5hbCBwYXRoc1xuICogMi4gUmVtb3ZlcyB0aGUgSlMgZmlsZSB0aGF0IGdldCdzIG91dHB1dCBieSBsaWIgbW9kZVxuICpcbiAqIFRISVMgUExVR0lOIFNIT1VMRCBPTkxZIEJFIEFQUExJRUQgVE8gQ1NTIExJQiBNT0RFIEJVSUxEUy4gSXQgc2hvdWxkIG5vdCBiZSBhZGRlZCB0byBldmVyeSBidWlsZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNzc0VudHJ5cG9pbnRzKFxuICBlbnRyeXBvaW50OiBFbnRyeXBvaW50LFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuKTogdml0ZS5QbHVnaW4ge1xuICByZXR1cm4ge1xuICAgIG5hbWU6ICd3eHQ6Y3NzLWVudHJ5cG9pbnQnLFxuICAgIGNvbmZpZygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGJ1aWxkOiB7XG4gICAgICAgICAgcm9sbHVwT3B0aW9uczoge1xuICAgICAgICAgICAgb3V0cHV0OiB7XG4gICAgICAgICAgICAgIGFzc2V0RmlsZU5hbWVzOiAoKSA9PlxuICAgICAgICAgICAgICAgIGdldEVudHJ5cG9pbnRCdW5kbGVQYXRoKGVudHJ5cG9pbnQsIGNvbmZpZy5vdXREaXIsICcuY3NzJyksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH0sXG4gICAgZ2VuZXJhdGVCdW5kbGUoXywgYnVuZGxlKSB7XG4gICAgICBPYmplY3Qua2V5cyhidW5kbGUpLmZvckVhY2goKGZpbGUpID0+IHtcbiAgICAgICAgaWYgKGZpbGUuZW5kc1dpdGgoJy5qcycpKSBkZWxldGUgYnVuZGxlW2ZpbGVdO1xuICAgICAgfSk7XG4gICAgfSxcbiAgfTtcbn1cbiIsICJpbXBvcnQgeyBJbnRlcm5hbENvbmZpZyB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGdldEdsb2JhbHMoXG4gIGNvbmZpZzogSW50ZXJuYWxDb25maWcsXG4pOiBBcnJheTx7IG5hbWU6IHN0cmluZzsgdmFsdWU6IGFueTsgdHlwZTogc3RyaW5nIH0+IHtcbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICBuYW1lOiAnX19NQU5JRkVTVF9WRVJTSU9OX18nLFxuICAgICAgdmFsdWU6IGNvbmZpZy5tYW5pZmVzdFZlcnNpb24sXG4gICAgICB0eXBlOiBgMiB8IDNgLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ19fQlJPV1NFUl9fJyxcbiAgICAgIHZhbHVlOiBjb25maWcuYnJvd3NlcixcbiAgICAgIHR5cGU6IGBzdHJpbmdgLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ19fSVNfQ0hST01FX18nLFxuICAgICAgdmFsdWU6IGNvbmZpZy5icm93c2VyID09PSAnY2hyb21lJyxcbiAgICAgIHR5cGU6IGBib29sZWFuYCxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdfX0lTX0ZJUkVGT1hfXycsXG4gICAgICB2YWx1ZTogY29uZmlnLmJyb3dzZXIgPT09ICdmaXJlZm94JyxcbiAgICAgIHR5cGU6IGBib29sZWFuYCxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdfX0lTX1NBRkFSSV9fJyxcbiAgICAgIHZhbHVlOiBjb25maWcuYnJvd3NlciA9PT0gJ3NhZmFyaScsXG4gICAgICB0eXBlOiBgYm9vbGVhbmAsXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnX19JU19FREdFX18nLFxuICAgICAgdmFsdWU6IGNvbmZpZy5icm93c2VyID09PSAnZWRnZScsXG4gICAgICB0eXBlOiBgYm9vbGVhbmAsXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnX19JU19PUEVSQV9fJyxcbiAgICAgIHZhbHVlOiBjb25maWcuYnJvd3NlciA9PT0gJ29wZXJhJyxcbiAgICAgIHR5cGU6IGBib29sZWFuYCxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdfX0NPTU1BTkRfXycsXG4gICAgICB2YWx1ZTogY29uZmlnLmNvbW1hbmQsXG4gICAgICB0eXBlOiBgXCJidWlsZFwiIHwgXCJzZXJ2ZVwiYCxcbiAgICB9LFxuICBdO1xufVxuIiwgImltcG9ydCB7IEJ1aWxkT3V0cHV0LCBXeHREZXZTZXJ2ZXIsIElubGluZUNvbmZpZyB9IGZyb20gJy4vY29yZS90eXBlcyc7XG5pbXBvcnQgeyBnZXRJbnRlcm5hbENvbmZpZyB9IGZyb20gJy4vY29yZS91dGlscy9nZXRJbnRlcm5hbENvbmZpZyc7XG5pbXBvcnQgcGMgZnJvbSAncGljb2NvbG9ycyc7XG5pbXBvcnQgeyBkZXRlY3REZXZDaGFuZ2VzIH0gZnJvbSAnLi9jb3JlL3V0aWxzL2RldGVjdERldkNoYW5nZXMnO1xuaW1wb3J0IHsgTXV0ZXggfSBmcm9tICdhc3luYy1tdXRleCc7XG5pbXBvcnQgeyBjb25zb2xhIH0gZnJvbSAnY29uc29sYSc7XG5pbXBvcnQgeyByZWxhdGl2ZSB9IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgeyBnZXRFbnRyeXBvaW50T3V0cHV0RmlsZSB9IGZyb20gJy4vY29yZS91dGlscy9lbnRyeXBvaW50cyc7XG5pbXBvcnQgeyBidWlsZEludGVybmFsLCByZWJ1aWxkIH0gZnJvbSAnLi9jb3JlL2J1aWxkJztcbmltcG9ydCB7XG4gIGdldFNlcnZlckluZm8sXG4gIHJlbG9hZENvbnRlbnRTY3JpcHRzLFxuICByZWxvYWRIdG1sUGFnZXMsXG4gIHNldHVwU2VydmVyLFxufSBmcm9tICcuL2NvcmUvc2VydmVyJztcblxuZXhwb3J0ICogZnJvbSAnLi9jb3JlL2NsZWFuJztcbmV4cG9ydCB7IHZlcnNpb24gfSBmcm9tICcuLi9wYWNrYWdlLmpzb24nO1xuZXhwb3J0ICogZnJvbSAnLi9jb3JlL3R5cGVzL2V4dGVybmFsJztcbmV4cG9ydCAqIGZyb20gJy4vY29yZS91dGlscy9kZWZpbmVDb25maWcnO1xuZXhwb3J0ICogZnJvbSAnLi9jb3JlL3V0aWxzL2RlZmluZVJ1bm5lckNvbmZpZyc7XG5cbi8qKlxuICogQnVuZGxlcyB0aGUgZXh0ZW5zaW9uIGZvciBwcm9kdWN0aW9uLiBSZXR1cm5zIGEgcHJvbWlzZSBvZiB0aGUgYnVpbGQgcmVzdWx0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGQoY29uZmlnOiBJbmxpbmVDb25maWcpOiBQcm9taXNlPEJ1aWxkT3V0cHV0PiB7XG4gIGNvbnN0IGludGVybmFsQ29uZmlnID0gYXdhaXQgZ2V0SW50ZXJuYWxDb25maWcoY29uZmlnLCAnYnVpbGQnKTtcbiAgcmV0dXJuIGF3YWl0IGJ1aWxkSW50ZXJuYWwoaW50ZXJuYWxDb25maWcpO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBkZXYgc2VydmVyLCBwcmUtYnVpbGRzIGFsbCB0aGUgZmlsZXMgdGhhdCBuZWVkIHRvIGV4aXN0IHRvIGxvYWQgdGhlIGV4dGVuc2lvbiwgYW5kIG9wZW5cbiAqIHRoZSBicm93c2VyIHdpdGggdGhlIGV4dGVuc2lvbiBpbnN0YWxsZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVTZXJ2ZXIoXG4gIGNvbmZpZz86IElubGluZUNvbmZpZyxcbik6IFByb21pc2U8V3h0RGV2U2VydmVyPiB7XG4gIGNvbnN0IHNlcnZlckluZm8gPSBhd2FpdCBnZXRTZXJ2ZXJJbmZvKCk7XG5cbiAgY29uc3QgZ2V0TGF0ZXN0SW50ZXJuYWxDb25maWcgPSBhc3luYyAoKSA9PiB7XG4gICAgcmV0dXJuIGdldEludGVybmFsQ29uZmlnKFxuICAgICAge1xuICAgICAgICAuLi5jb25maWcsXG4gICAgICAgIHZpdGU6IHNlcnZlckluZm8udml0ZVNlcnZlckNvbmZpZyxcbiAgICAgIH0sXG4gICAgICAnc2VydmUnLFxuICAgICk7XG4gIH07XG5cbiAgbGV0IGludGVybmFsQ29uZmlnID0gYXdhaXQgZ2V0TGF0ZXN0SW50ZXJuYWxDb25maWcoKTtcbiAgY29uc3Qgc2VydmVyID0gYXdhaXQgc2V0dXBTZXJ2ZXIoc2VydmVySW5mbywgaW50ZXJuYWxDb25maWcpO1xuICBpbnRlcm5hbENvbmZpZy5zZXJ2ZXIgPSBzZXJ2ZXI7XG5cbiAgY29uc3QgZmlsZUNoYW5nZWRNdXRleCA9IG5ldyBNdXRleCgpO1xuICBjb25zdCBjaGFuZ2VRdWV1ZTogQXJyYXk8W3N0cmluZywgc3RyaW5nXT4gPSBbXTtcblxuICBzZXJ2ZXIud3Mub24oJ3d4dDpiYWNrZ3JvdW5kLWluaXRpYWxpemVkJywgKCkgPT4ge1xuICAgIC8vIFJlZ2lzdGVyIGNvbnRlbnQgc2NyaXB0cyBmb3IgdGhlIGZpcnN0IHRpbWUgc2luY2UgdGhleSdyZSBub3QgbGlzdGVkIGluIHRoZSBtYW5pZmVzdFxuICAgIHJlbG9hZENvbnRlbnRTY3JpcHRzKHNlcnZlci5jdXJyZW50T3V0cHV0LnN0ZXBzLCBpbnRlcm5hbENvbmZpZywgc2VydmVyKTtcbiAgfSk7XG5cbiAgc2VydmVyLndhdGNoZXIub24oJ2FsbCcsIGFzeW5jIChldmVudCwgcGF0aCwgX3N0YXRzKSA9PiB7XG4gICAgLy8gSGVyZSwgXCJwYXRoXCIgaXMgYSBub24tbm9ybWFsaXplZCBwYXRoIChpZTogQzpcXFxcdXNlcnNcXFxcLi4uIGluc3RlYWQgb2YgQzovdXNlcnMvLi4uKVxuICAgIGlmIChwYXRoLnN0YXJ0c1dpdGgoaW50ZXJuYWxDb25maWcub3V0QmFzZURpcikpIHJldHVybjtcbiAgICBjaGFuZ2VRdWV1ZS5wdXNoKFtldmVudCwgcGF0aF0pO1xuXG4gICAgYXdhaXQgZmlsZUNoYW5nZWRNdXRleC5ydW5FeGNsdXNpdmUoYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgZmlsZUNoYW5nZXMgPSBjaGFuZ2VRdWV1ZS5zcGxpY2UoMCwgY2hhbmdlUXVldWUubGVuZ3RoKTtcbiAgICAgIGlmIChmaWxlQ2hhbmdlcy5sZW5ndGggPT09IDApIHJldHVybjtcblxuICAgICAgY29uc3QgY2hhbmdlcyA9IGRldGVjdERldkNoYW5nZXMoZmlsZUNoYW5nZXMsIHNlcnZlci5jdXJyZW50T3V0cHV0KTtcbiAgICAgIGlmIChjaGFuZ2VzLnR5cGUgPT09ICduby1jaGFuZ2UnKSByZXR1cm47XG5cbiAgICAgIC8vIExvZyB0aGUgZW50cnlwb2ludHMgdGhhdCB3ZXJlIGVmZmVjdGVkXG4gICAgICBpbnRlcm5hbENvbmZpZy5sb2dnZXIuaW5mbyhcbiAgICAgICAgYENoYW5nZWQ6ICR7QXJyYXkuZnJvbShuZXcgU2V0KGZpbGVDaGFuZ2VzLm1hcCgoY2hhbmdlKSA9PiBjaGFuZ2VbMV0pKSlcbiAgICAgICAgICAubWFwKChmaWxlKSA9PiBwYy5kaW0ocmVsYXRpdmUoaW50ZXJuYWxDb25maWcucm9vdCwgZmlsZSkpKVxuICAgICAgICAgIC5qb2luKCcsICcpfWAsXG4gICAgICApO1xuICAgICAgY29uc3QgcmVidWlsdE5hbWVzID0gY2hhbmdlcy5yZWJ1aWxkR3JvdXBzXG4gICAgICAgIC5mbGF0KClcbiAgICAgICAgLm1hcCgoZW50cnkpID0+IHtcbiAgICAgICAgICByZXR1cm4gcGMuY3lhbihcbiAgICAgICAgICAgIHJlbGF0aXZlKGludGVybmFsQ29uZmlnLm91dERpciwgZ2V0RW50cnlwb2ludE91dHB1dEZpbGUoZW50cnksICcnKSksXG4gICAgICAgICAgKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmpvaW4ocGMuZGltKCcsICcpKTtcblxuICAgICAgLy8gR2V0IGxhdGVzdCBjb25maWcgYW5kIFJlYnVpbGQgZ3JvdXBzIHdpdGggY2hhbmdlc1xuICAgICAgaW50ZXJuYWxDb25maWcgPSBhd2FpdCBnZXRMYXRlc3RJbnRlcm5hbENvbmZpZygpO1xuICAgICAgaW50ZXJuYWxDb25maWcuc2VydmVyID0gc2VydmVyO1xuICAgICAgY29uc3QgeyBvdXRwdXQ6IG5ld091dHB1dCB9ID0gYXdhaXQgcmVidWlsZChcbiAgICAgICAgaW50ZXJuYWxDb25maWcsXG4gICAgICAgIC8vIFRPRE86IHRoaXMgZXhjbHVkZXMgbmV3IGVudHJ5cG9pbnRzLCBzbyB0aGV5J3JlIG5vdCBidWlsdCB1bnRpbCB0aGUgZGV2IGNvbW1hbmQgaXMgcmVzdGFydGVkXG4gICAgICAgIGNoYW5nZXMucmVidWlsZEdyb3VwcyxcbiAgICAgICAgY2hhbmdlcy5jYWNoZWRPdXRwdXQsXG4gICAgICApO1xuICAgICAgc2VydmVyLmN1cnJlbnRPdXRwdXQgPSBuZXdPdXRwdXQ7XG5cbiAgICAgIC8vIFBlcmZvcm0gcmVsb2Fkc1xuICAgICAgc3dpdGNoIChjaGFuZ2VzLnR5cGUpIHtcbiAgICAgICAgY2FzZSAnZXh0ZW5zaW9uLXJlbG9hZCc6XG4gICAgICAgICAgc2VydmVyLnJlbG9hZEV4dGVuc2lvbigpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdodG1sLXJlbG9hZCc6XG4gICAgICAgICAgcmVsb2FkSHRtbFBhZ2VzKGNoYW5nZXMucmVidWlsZEdyb3Vwcywgc2VydmVyLCBpbnRlcm5hbENvbmZpZyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2NvbnRlbnQtc2NyaXB0LXJlbG9hZCc6XG4gICAgICAgICAgcmVsb2FkQ29udGVudFNjcmlwdHMoY2hhbmdlcy5jaGFuZ2VkU3RlcHMsIGludGVybmFsQ29uZmlnLCBzZXJ2ZXIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY29uc29sYS5zdWNjZXNzKGBSZWxvYWRlZDogJHtyZWJ1aWx0TmFtZXN9YCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIHJldHVybiBzZXJ2ZXI7XG59XG4iLCAiLyoqXG4gKiBDaGVja3MgaWYgYHByZWRpY2F0ZWAgcmV0dXJucyB0cnV0aHkgZm9yIGFsbCBlbGVtZW50cyBvZiB0aGUgYXJyYXkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBldmVyeTxUPihcbiAgYXJyYXk6IFRbXSxcbiAgcHJlZGljYXRlOiAoaXRlbTogVCwgaW5kZXg6IG51bWJlcikgPT4gYm9vbGVhbixcbik6IGJvb2xlYW4ge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKVxuICAgIGlmICghcHJlZGljYXRlKGFycmF5W2ldLCBpKSkgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gdHJ1ZTtcbn1cbiIsICJpbXBvcnQgeyBCdWlsZE91dHB1dCwgQnVpbGRTdGVwT3V0cHV0LCBFbnRyeXBvaW50R3JvdXAgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgKiBhcyB2aXRlIGZyb20gJ3ZpdGUnO1xuaW1wb3J0IHsgZXZlcnkgfSBmcm9tICcuL2FycmF5cyc7XG5pbXBvcnQgeyBub3JtYWxpemVQYXRoIH0gZnJvbSAnLi9wYXRocyc7XG5cbi8qKlxuICogQ29tcGFyZSB0aGUgY2hhbmdlZCBmaWxlcyB2cyB0aGUgYnVpbGQgb3V0cHV0IGFuZCBkZXRlcm1pbmUgd2hhdCBraW5kIG9mIHJlbG9hZCBuZWVkcyB0byBoYXBwZW46XG4gKlxuICogLSBEbyBub3RoaW5nXG4gKiAgIC0gQ1NTIG9yIEpTIGZpbGUgYXNzb2NpYXRlZCB3aXRoIGFuIEhUTUwgcGFnZSBpcyBjaGFuZ2VkIC0gdGhpcyBpcyBoYW5kbGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlXG4gKiAgICAgZGV2IHNlcnZlclxuICogICAtIENoYW5nZSBpc24ndCB1c2VkIGJ5IGFueSBvZiB0aGUgZW50cnlwb2ludHNcbiAqIC0gUmVsb2FkIENvbnRlbnQgc2NyaXB0XG4gKiAgIC0gQ1NTIG9yIEpTIGZpbGUgYXNzb2NpYXRlZCB3aXRoIGEgY29udGVudCBzY3JpcHRcbiAqICAgLSBCYWNrZ3JvdW5kIHNjcmlwdCB3aWxsIGJlIHRvbGQgdG8gcmVsb2FkIHRoZSBjb250ZW50IHNjcmlwdFxuICogLSBSZWxvYWQgSFRNTCBmaWxlXG4gKiAgIC0gSFRNTCBmaWxlIGl0c2VsZiBpcyBzYXZlZCAtIEhNUiBkb2Vzbid0IGhhbmRsZSB0aGlzIGJlY2F1c2UgdGhlIEhUTUwgcGFnZXMgYXJlIHByZS1yZW5kZXJlZFxuICogICAtIENocm9tZSBpcyBPSyByZWxvYWRpbmcgdGhlIHBhZ2Ugd2hlbiB0aGUgSFRNTCBmaWxlIGlzIGNoYW5nZWQgd2l0aG91dCByZWxvYWRpbmcgdGhlIHdob2xlXG4gKiAgICAgZXh0ZW5zaW9uLiBOb3Qgc3VyZSBhYm91dCBmaXJlZm94LCB0aGlzIG1pZ2h0IG5lZWQgdG8gY2hhbmdlIHRvIGFuIGV4dGVuc2lvbiByZWxvYWRcbiAqIC0gUmVsb2FkIGV4dGVuc2lvblxuICogICAtIEJhY2tncm91bmQgc2NyaXB0IGlzIGNoYW5nZWRcbiAqICAgLSBNYW5pZmVzdCBpcyBkaWZmZXJlbnRcbiAqIC0gUmVzdGFydCBicm93c2VyXG4gKiAgIC0gQ29uZmlnIGZpbGUgY2hhbmdlZCAod3h0LmNvbmZpZy50cywgLmVudiwgd2ViLWV4dC5jb25maWcudHMsIGV0YylcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRldGVjdERldkNoYW5nZXMoXG4gIGNoYW5nZWRGaWxlczogW2V2ZW50OiBzdHJpbmcsIHBhdGg6IHN0cmluZ11bXSxcbiAgY3VycmVudE91dHB1dDogQnVpbGRPdXRwdXQgfCB1bmRlZmluZWQsXG4pOiBEZXZNb2RlQ2hhbmdlIHtcbiAgaWYgKGN1cnJlbnRPdXRwdXQgPT0gbnVsbCkgcmV0dXJuIHsgdHlwZTogJ25vLWNoYW5nZScgfTtcblxuICBjb25zdCBjaGFuZ2VkU3RlcHMgPSBuZXcgU2V0KFxuICAgIGNoYW5nZWRGaWxlcy5mbGF0TWFwKChjaGFuZ2VkRmlsZSkgPT5cbiAgICAgIGZpbmRFZmZlY3RlZFN0ZXBzKGNoYW5nZWRGaWxlLCBjdXJyZW50T3V0cHV0KSxcbiAgICApLFxuICApO1xuICBpZiAoY2hhbmdlZFN0ZXBzLnNpemUgPT09IDApIHJldHVybiB7IHR5cGU6ICduby1jaGFuZ2UnIH07XG5cbiAgY29uc3QgdW5jaGFuZ2VkT3V0cHV0OiBCdWlsZE91dHB1dCA9IHtcbiAgICBtYW5pZmVzdDogY3VycmVudE91dHB1dC5tYW5pZmVzdCxcbiAgICBzdGVwczogW10sXG4gICAgcHVibGljQXNzZXRzOiBbXSxcbiAgfTtcbiAgY29uc3QgY2hhbmdlZE91dHB1dDogQnVpbGRPdXRwdXQgPSB7XG4gICAgbWFuaWZlc3Q6IGN1cnJlbnRPdXRwdXQubWFuaWZlc3QsXG4gICAgc3RlcHM6IFtdLFxuICAgIHB1YmxpY0Fzc2V0czogW10sXG4gIH07XG5cbiAgZm9yIChjb25zdCBzdGVwIG9mIGN1cnJlbnRPdXRwdXQuc3RlcHMpIHtcbiAgICBpZiAoY2hhbmdlZFN0ZXBzLmhhcyhzdGVwKSkge1xuICAgICAgY2hhbmdlZE91dHB1dC5zdGVwcy5wdXNoKHN0ZXApO1xuICAgIH0gZWxzZSB7XG4gICAgICB1bmNoYW5nZWRPdXRwdXQuc3RlcHMucHVzaChzdGVwKTtcbiAgICB9XG4gIH1cbiAgZm9yIChjb25zdCBhc3NldCBvZiBjdXJyZW50T3V0cHV0LnB1YmxpY0Fzc2V0cykge1xuICAgIGlmIChjaGFuZ2VkU3RlcHMuaGFzKGFzc2V0KSkge1xuICAgICAgY2hhbmdlZE91dHB1dC5wdWJsaWNBc3NldHMucHVzaChhc3NldCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHVuY2hhbmdlZE91dHB1dC5wdWJsaWNBc3NldHMucHVzaChhc3NldCk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgaXNPbmx5SHRtbENoYW5nZXMgPVxuICAgIGNoYW5nZWRGaWxlcy5sZW5ndGggPiAwICYmXG4gICAgZXZlcnkoY2hhbmdlZEZpbGVzLCAoW18sIGZpbGVdKSA9PiBmaWxlLmVuZHNXaXRoKCcuaHRtbCcpKTtcbiAgaWYgKGlzT25seUh0bWxDaGFuZ2VzKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdodG1sLXJlbG9hZCcsXG4gICAgICBjYWNoZWRPdXRwdXQ6IHVuY2hhbmdlZE91dHB1dCxcbiAgICAgIHJlYnVpbGRHcm91cHM6IGNoYW5nZWRPdXRwdXQuc3RlcHMubWFwKChzdGVwKSA9PiBzdGVwLmVudHJ5cG9pbnRzKSxcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgaXNPbmx5Q29udGVudFNjcmlwdHMgPVxuICAgIGNoYW5nZWRPdXRwdXQuc3RlcHMubGVuZ3RoID4gMCAmJlxuICAgIGV2ZXJ5KFxuICAgICAgY2hhbmdlZE91dHB1dC5zdGVwcy5mbGF0TWFwKChzdGVwKSA9PiBzdGVwLmVudHJ5cG9pbnRzKSxcbiAgICAgIChlbnRyeSkgPT4gZW50cnkudHlwZSA9PT0gJ2NvbnRlbnQtc2NyaXB0JyxcbiAgICApO1xuICBpZiAoaXNPbmx5Q29udGVudFNjcmlwdHMpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ2NvbnRlbnQtc2NyaXB0LXJlbG9hZCcsXG4gICAgICBjYWNoZWRPdXRwdXQ6IHVuY2hhbmdlZE91dHB1dCxcbiAgICAgIGNoYW5nZWRTdGVwczogY2hhbmdlZE91dHB1dC5zdGVwcyxcbiAgICAgIHJlYnVpbGRHcm91cHM6IGNoYW5nZWRPdXRwdXQuc3RlcHMubWFwKChzdGVwKSA9PiBzdGVwLmVudHJ5cG9pbnRzKSxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnZXh0ZW5zaW9uLXJlbG9hZCcsXG4gICAgY2FjaGVkT3V0cHV0OiB1bmNoYW5nZWRPdXRwdXQsXG4gICAgcmVidWlsZEdyb3VwczogY2hhbmdlZE91dHB1dC5zdGVwcy5tYXAoKHN0ZXApID0+IHN0ZXAuZW50cnlwb2ludHMpLFxuICB9O1xufVxuXG4vKipcbiAqIEZvciBhIHNpbmdsZSBjaGFuZ2UsIHJldHVybiBhbGwgdGhlIHN0ZXAgb2YgdGhlIGJ1aWxkIG91dHB1dCB0aGF0IHdlcmUgZWZmZWN0ZWQgYnkgaXQuXG4gKi9cbmZ1bmN0aW9uIGZpbmRFZmZlY3RlZFN0ZXBzKFxuICBjaGFuZ2VkRmlsZTogW2V2ZW50OiBzdHJpbmcsIHBhdGg6IHN0cmluZ10sXG4gIGN1cnJlbnRPdXRwdXQ6IEJ1aWxkT3V0cHV0LFxuKTogRGV0ZWN0ZWRDaGFuZ2VbXSB7XG4gIGNvbnN0IGNoYW5nZXM6IERldGVjdGVkQ2hhbmdlW10gPSBbXTtcbiAgY29uc3QgY2hhbmdlZFBhdGggPSBub3JtYWxpemVQYXRoKGNoYW5nZWRGaWxlWzFdKTtcblxuICBjb25zdCBpc0NodW5rRWZmZWN0ZWQgPSAoXG4gICAgY2h1bms6IHZpdGUuUm9sbHVwLk91dHB1dENodW5rIHwgdml0ZS5Sb2xsdXAuT3V0cHV0QXNzZXQsXG4gICk6IGJvb2xlYW4gPT5cbiAgICAvLyBJZiBpdCdzIGFuIEhUTUwgZmlsZSB3aXRoIHRoZSBzYW1lIHBhdGgsIGlzIGlzIGVmZmVjdGVkIGJlY2F1c2UgSFRNTCBmaWxlcyBuZWVkIHRvIGJlIHByZS1yZW5kZXJlZFxuICAgIC8vIGZpbGVOYW1lIGlzIG5vcm1hbGl6ZWQsIHJlbGF0aXZlIGJ1bmRsZSBwYXRoXG4gICAgKGNodW5rLnR5cGUgPT09ICdhc3NldCcgJiYgY2hhbmdlZFBhdGguZW5kc1dpdGgoY2h1bmsuZmlsZU5hbWUpKSB8fFxuICAgIC8vIElmIGl0J3MgYSBjaHVuayB0aGF0IGRlcGVuZHMgb24gdGhlIGNoYW5nZWQgZmlsZSwgaXQgaXMgZWZmZWN0ZWRcbiAgICAvLyBtb2R1bGVJZHMgYXJlIGFic29sdXRlLCBub3JtYWxpemVkIHBhdGhzXG4gICAgKGNodW5rLnR5cGUgPT09ICdjaHVuaycgJiYgY2h1bmsubW9kdWxlSWRzLmluY2x1ZGVzKGNoYW5nZWRQYXRoKSk7XG5cbiAgZm9yIChjb25zdCBzdGVwIG9mIGN1cnJlbnRPdXRwdXQuc3RlcHMpIHtcbiAgICBjb25zdCBlZmZlY3RlZENodW5rID0gc3RlcC5jaHVua3MuZmluZCgoY2h1bmspID0+IGlzQ2h1bmtFZmZlY3RlZChjaHVuaykpO1xuICAgIGlmIChlZmZlY3RlZENodW5rKSBjaGFuZ2VzLnB1c2goc3RlcCk7XG4gIH1cblxuICBjb25zdCBlZmZlY3RlZEFzc2V0ID0gY3VycmVudE91dHB1dC5wdWJsaWNBc3NldHMuZmluZCgoY2h1bmspID0+XG4gICAgaXNDaHVua0VmZmVjdGVkKGNodW5rKSxcbiAgKTtcbiAgaWYgKGVmZmVjdGVkQXNzZXQpIGNoYW5nZXMucHVzaChlZmZlY3RlZEFzc2V0KTtcblxuICByZXR1cm4gY2hhbmdlcztcbn1cblxuLyoqXG4gKiBDb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB3aGF0IGZpbGVzIGNoYW5nZWQsIHdoYXQgbmVlZHMgcmVidWlsdCwgYW5kIHRoZSB0eXBlIG9mIHJlbG9hZCB0aGF0IGlzXG4gKiByZXF1aXJlZC5cbiAqL1xuZXhwb3J0IHR5cGUgRGV2TW9kZUNoYW5nZSA9XG4gIHwgTm9DaGFuZ2VcbiAgfCBIdG1sUmVsb2FkXG4gIHwgRXh0ZW5zaW9uUmVsb2FkXG4gIHwgQ29udGVudFNjcmlwdFJlbG9hZDtcbi8vIHwgQnJvd3NlclJlc3RhcnRcblxuaW50ZXJmYWNlIE5vQ2hhbmdlIHtcbiAgdHlwZTogJ25vLWNoYW5nZSc7XG59XG5cbmludGVyZmFjZSBSZWJ1aWxkQ2hhbmdlIHtcbiAgLyoqXG4gICAqIFRoZSBsaXN0IG9mIGVudHJ5cG9pbnRzIHRoYXQgbmVlZCByZWJ1aWx0LlxuICAgKi9cbiAgcmVidWlsZEdyb3VwczogRW50cnlwb2ludEdyb3VwW107XG4gIC8qKlxuICAgKiBUaGUgcHJldmlvdXMgb3V0cHV0IHN0cmlwcGVkIG9mIGFueSBmaWxlcyBhcmUgZ29pbmcgdG8gY2hhbmdlLlxuICAgKi9cbiAgY2FjaGVkT3V0cHV0OiBCdWlsZE91dHB1dDtcbn1cblxuaW50ZXJmYWNlIEh0bWxSZWxvYWQgZXh0ZW5kcyBSZWJ1aWxkQ2hhbmdlIHtcbiAgdHlwZTogJ2h0bWwtcmVsb2FkJztcbn1cblxuaW50ZXJmYWNlIEV4dGVuc2lvblJlbG9hZCBleHRlbmRzIFJlYnVpbGRDaGFuZ2Uge1xuICB0eXBlOiAnZXh0ZW5zaW9uLXJlbG9hZCc7XG59XG5cbi8vIGludGVyZmFjZSBCcm93c2VyUmVzdGFydCBleHRlbmRzIFJlYnVpbGRDaGFuZ2Uge1xuLy8gICB0eXBlOiAnYnJvd3Nlci1yZXN0YXJ0Jztcbi8vIH1cblxuaW50ZXJmYWNlIENvbnRlbnRTY3JpcHRSZWxvYWQgZXh0ZW5kcyBSZWJ1aWxkQ2hhbmdlIHtcbiAgdHlwZTogJ2NvbnRlbnQtc2NyaXB0LXJlbG9hZCc7XG4gIGNoYW5nZWRTdGVwczogQnVpbGRTdGVwT3V0cHV0W107XG59XG5cbi8qKlxuICogV2hlbiBmaWd1cmluZyBvdXQgd2hhdCBuZWVkcyByZWxvYWRlZCwgdGhpcyBzdG9yZXMgdGhlIHN0ZXAgdGhhdCB3YXMgY2hhbmdlZCwgb3IgdGhlIHB1YmxpY1xuICogZGlyZWN0b3J5IGFzc2V0IHRoYXQgd2FzIGNoYW5nZWQuIEl0IGRvZXNuJ3Qga25vdyB3aGF0IHR5cGUgb2YgY2hhbmdlIGlzIHJlcXVpcmVkIHlldC4gSnVzdCBhblxuICogaW50ZXJtZWRpYXRlIHR5cGUuXG4gKi9cbnR5cGUgRGV0ZWN0ZWRDaGFuZ2UgPSBCdWlsZFN0ZXBPdXRwdXQgfCB2aXRlLlJvbGx1cC5PdXRwdXRBc3NldDtcbiIsICJpbXBvcnQgKiBhcyB2aXRlIGZyb20gJ3ZpdGUnO1xuaW1wb3J0IHtcbiAgQnVpbGRPdXRwdXQsXG4gIEJ1aWxkU3RlcE91dHB1dCxcbiAgRW50cnlwb2ludCxcbiAgRW50cnlwb2ludEdyb3VwLFxuICBJbnRlcm5hbENvbmZpZyxcbn0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0ICogYXMgd3h0UGx1Z2lucyBmcm9tICcuLi92aXRlLXBsdWdpbnMnO1xuaW1wb3J0IHsgcmVtb3ZlRW1wdHlEaXJzIH0gZnJvbSAnLi4vdXRpbHMvcmVtb3ZlRW1wdHlEaXJzJztcbmltcG9ydCB7IGdldEVudHJ5cG9pbnRCdW5kbGVQYXRoIH0gZnJvbSAnLi4vdXRpbHMvZW50cnlwb2ludHMnO1xuaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCB7IGRpcm5hbWUsIHJlc29sdmUgfSBmcm9tICdwYXRoJztcbmltcG9ydCB7IGdldFB1YmxpY0ZpbGVzIH0gZnJvbSAnLi4vdXRpbHMvcHVibGljJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJ1aWxkRW50cnlwb2ludHMoXG4gIGdyb3VwczogRW50cnlwb2ludEdyb3VwW10sXG4gIGNvbmZpZzogSW50ZXJuYWxDb25maWcsXG4pOiBQcm9taXNlPE9taXQ8QnVpbGRPdXRwdXQsICdtYW5pZmVzdCc+PiB7XG4gIGNvbnN0IHN0ZXBzOiBCdWlsZFN0ZXBPdXRwdXRbXSA9IFtdO1xuICBmb3IgKGNvbnN0IGdyb3VwIG9mIGdyb3Vwcykge1xuICAgIGNvbnN0IHN0ZXAgPSBBcnJheS5pc0FycmF5KGdyb3VwKVxuICAgICAgPyBhd2FpdCBidWlsZE11bHRpcGxlRW50cnlwb2ludHMoZ3JvdXAsIGNvbmZpZylcbiAgICAgIDogYXdhaXQgYnVpbGRTaW5nbGVFbnRyeXBvaW50KGdyb3VwLCBjb25maWcpO1xuICAgIHN0ZXBzLnB1c2goc3RlcCk7XG4gIH1cbiAgY29uc3QgcHVibGljQXNzZXRzID0gYXdhaXQgY29weVB1YmxpY0RpcmVjdG9yeShjb25maWcpO1xuXG4gIC8vIFJlbW92ZSBhbnkgZW1wdHkgZGlyZWN0b3JpZXMgZnJvbSBtb3Zpbmcgb3V0cHV0cyBhcm91bmRcbiAgYXdhaXQgcmVtb3ZlRW1wdHlEaXJzKGNvbmZpZy5vdXREaXIpO1xuXG4gIHJldHVybiB7IHB1YmxpY0Fzc2V0cywgc3RlcHMgfTtcbn1cblxuLyoqXG4gKiBVc2UgVml0ZSdzIGxpYiBtb2RlICsgSUlGRSBmb3JtYXQgdG8gYnVuZGxlIHRoZSBlbnRyeXBvaW50IHRvIGEgc2luZ2xlIGZpbGUuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGJ1aWxkU2luZ2xlRW50cnlwb2ludChcbiAgZW50cnlwb2ludDogRW50cnlwb2ludCxcbiAgY29uZmlnOiBJbnRlcm5hbENvbmZpZyxcbik6IFByb21pc2U8QnVpbGRTdGVwT3V0cHV0PiB7XG4gIC8vIFNob3VsZCB0aGlzIGVudHJ5cG9pbnQgYmUgd3JhcHBlZCBieSB0aGUgdml0ZS1wbHVnaW5zL3ZpcnR1YWxFbnRyeXBvaW50IHBsdWdpbj9cbiAgY29uc3QgaXNWaXJ0dWFsID0gWydiYWNrZ3JvdW5kJywgJ2NvbnRlbnQtc2NyaXB0J10uaW5jbHVkZXMoZW50cnlwb2ludC50eXBlKTtcbiAgY29uc3QgZW50cnkgPSBpc1ZpcnR1YWxcbiAgICA/IGB2aXJ0dWFsOnd4dC0ke2VudHJ5cG9pbnQudHlwZX0/JHtlbnRyeXBvaW50LmlucHV0UGF0aH1gXG4gICAgOiBlbnRyeXBvaW50LmlucHV0UGF0aDtcblxuICBjb25zdCBwbHVnaW5zOiBOb25OdWxsYWJsZTx2aXRlLlVzZXJDb25maWdbJ3BsdWdpbnMnXT4gPSBbXTtcbiAgaWYgKFxuICAgIGVudHJ5cG9pbnQudHlwZSA9PT0gJ2NvbnRlbnQtc2NyaXB0LXN0eWxlJyB8fFxuICAgIGVudHJ5cG9pbnQudHlwZSA9PT0gJ3VubGlzdGVkLXN0eWxlJ1xuICApIHtcbiAgICBwbHVnaW5zLnB1c2god3h0UGx1Z2lucy5jc3NFbnRyeXBvaW50cyhlbnRyeXBvaW50LCBjb25maWcpKTtcbiAgfVxuXG4gIGNvbnN0IGxpYk1vZGU6IHZpdGUuVXNlckNvbmZpZyA9IHtcbiAgICBwbHVnaW5zLFxuICAgIGJ1aWxkOiB7XG4gICAgICBsaWI6IHtcbiAgICAgICAgZW50cnksXG4gICAgICAgIGZvcm1hdHM6IFsnaWlmZSddLFxuICAgICAgICBuYW1lOiAnXycsXG4gICAgICAgIGZpbGVOYW1lOiBlbnRyeXBvaW50Lm5hbWUsXG4gICAgICB9LFxuICAgICAgcm9sbHVwT3B0aW9uczoge1xuICAgICAgICBvdXRwdXQ6IHtcbiAgICAgICAgICAvLyBUaGVyZSdzIG9ubHkgYSBzaW5nbGUgb3V0cHV0IGZvciB0aGlzIGJ1aWxkLCBzbyB3ZSB1c2UgdGhlIGRlc2lyZWQgYnVuZGxlIHBhdGggZm9yIHRoZVxuICAgICAgICAgIC8vIGVudHJ5IG91dHB1dCAobGlrZSBcImNvbnRlbnQtc2NyaXB0cy9vdmVybGF5LmpzXCIpXG4gICAgICAgICAgZW50cnlGaWxlTmFtZXM6IGdldEVudHJ5cG9pbnRCdW5kbGVQYXRoKFxuICAgICAgICAgICAgZW50cnlwb2ludCxcbiAgICAgICAgICAgIGNvbmZpZy5vdXREaXIsXG4gICAgICAgICAgICAnLmpzJyxcbiAgICAgICAgICApLFxuICAgICAgICAgIC8vIE91dHB1dCBjb250ZW50IHNjcmlwdCBDU1MgdG8gYXNzZXRzLyB3aXRoIGEgaGFzaCB0byBwcmV2ZW50IGNvbmZsaWN0cy4gRGVmYXVsdHMgdG9cbiAgICAgICAgICAvLyBcIltuYW1lXS5bZXh0XVwiIGluIGxpYiBtb2RlLCB3aGljaCB1c3VhbGx5IHJlc3VsdHMgaW4gXCJzdHlsZS5jc3NcIi4gVGhhdCBtZWFucyBtdWx0aXBsZVxuICAgICAgICAgIC8vIGNvbnRlbnQgc2NyaXB0cyB3aXRoIHN0eWxlcyB3b3VsZCBvdmVyd3JpdGUgZWFjaCBvdGhlciBpZiBpdCB3ZXJlbid0IGNoYW5nZWQgYmVsb3cuXG4gICAgICAgICAgYXNzZXRGaWxlTmFtZXM6IGBhc3NldHMvJHtlbnRyeXBvaW50Lm5hbWV9LltleHRdYCxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBkZWZpbmU6IHtcbiAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vYWtsaW5rZXIxL3ZpdGUtcGx1Z2luLXdlYi1leHRlbnNpb24vaXNzdWVzLzk2XG4gICAgICAncHJvY2Vzcy5lbnYuTk9ERV9FTlYnOiBKU09OLnN0cmluZ2lmeShjb25maWcubW9kZSksXG4gICAgfSxcbiAgfTtcbiAgY29uc3QgZW50cnlDb25maWcgPSB2aXRlLm1lcmdlQ29uZmlnKFxuICAgIGxpYk1vZGUsXG4gICAgY29uZmlnLnZpdGUsXG4gICkgYXMgdml0ZS5JbmxpbmVDb25maWc7XG5cbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdml0ZS5idWlsZChlbnRyeUNvbmZpZyk7XG4gIHJldHVybiB7XG4gICAgZW50cnlwb2ludHM6IGVudHJ5cG9pbnQsXG4gICAgY2h1bmtzOiBnZXRCdWlsZE91dHB1dENodW5rcyhyZXN1bHQpLFxuICB9O1xufVxuXG4vKipcbiAqIFVzZSBWaXRlJ3MgbXVsdGlwYWdlIGJ1aWxkIHRvIGJ1bmRsZSBhbGwgdGhlIGVudHJ5cG9pbnRzIGluIGEgc2luZ2xlIHN0ZXAuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGJ1aWxkTXVsdGlwbGVFbnRyeXBvaW50cyhcbiAgZW50cnlwb2ludHM6IEVudHJ5cG9pbnRbXSxcbiAgY29uZmlnOiBJbnRlcm5hbENvbmZpZyxcbik6IFByb21pc2U8QnVpbGRTdGVwT3V0cHV0PiB7XG4gIGNvbnN0IG11bHRpUGFnZTogdml0ZS5Vc2VyQ29uZmlnID0ge1xuICAgIHBsdWdpbnM6IFt3eHRQbHVnaW5zLm11bHRpcGFnZU1vdmUoZW50cnlwb2ludHMsIGNvbmZpZyldLFxuICAgIGJ1aWxkOiB7XG4gICAgICByb2xsdXBPcHRpb25zOiB7XG4gICAgICAgIGlucHV0OiBlbnRyeXBvaW50cy5yZWR1Y2U8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4oKGlucHV0LCBlbnRyeSkgPT4ge1xuICAgICAgICAgIGlucHV0W2VudHJ5Lm5hbWVdID0gZW50cnkuaW5wdXRQYXRoO1xuICAgICAgICAgIHJldHVybiBpbnB1dDtcbiAgICAgICAgfSwge30pLFxuICAgICAgICBvdXRwdXQ6IHtcbiAgICAgICAgICAvLyBJbmNsdWRlIGEgaGFzaCB0byBwcmV2ZW50IGNvbmZsaWN0c1xuICAgICAgICAgIGNodW5rRmlsZU5hbWVzOiAnY2h1bmtzL1tuYW1lXS1baGFzaF0uanMnLFxuICAgICAgICAgIC8vIEluY2x1ZGUgYSBoYXNoIHRvIHByZXZlbnQgY29uZmxpY3RzXG4gICAgICAgICAgZW50cnlGaWxlTmFtZXM6ICdjaHVua3MvW25hbWVdLVtoYXNoXS5qcycsXG4gICAgICAgICAgLy8gV2UgY2FuJ3QgY29udHJvbCB0aGUgXCJuYW1lXCIsIHNvIHdlIG5lZWQgYSBoYXNoIHRvIHByZXZlbnQgY29uZmxpY3RzXG4gICAgICAgICAgYXNzZXRGaWxlTmFtZXM6ICdhc3NldHMvW25hbWVdLVtoYXNoXS5bZXh0XScsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gIH07XG5cbiAgY29uc3QgZW50cnlDb25maWcgPSB2aXRlLm1lcmdlQ29uZmlnKFxuICAgIG11bHRpUGFnZSxcbiAgICBjb25maWcudml0ZSxcbiAgKSBhcyB2aXRlLlVzZXJDb25maWc7XG5cbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdml0ZS5idWlsZChlbnRyeUNvbmZpZyk7XG4gIHJldHVybiB7XG4gICAgZW50cnlwb2ludHMsXG4gICAgY2h1bmtzOiBnZXRCdWlsZE91dHB1dENodW5rcyhyZXN1bHQpLFxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRCdWlsZE91dHB1dENodW5rcyhcbiAgcmVzdWx0OiBBd2FpdGVkPFJldHVyblR5cGU8dHlwZW9mIHZpdGUuYnVpbGQ+Pixcbik6IEJ1aWxkU3RlcE91dHB1dFsnY2h1bmtzJ10ge1xuICBpZiAoJ29uJyBpbiByZXN1bHQpIHRocm93IEVycm9yKCd3eHQgZG9lcyBub3Qgc3VwcG9ydCB2aXRlIHdhdGNoIG1vZGUuJyk7XG4gIGlmIChBcnJheS5pc0FycmF5KHJlc3VsdCkpIHJldHVybiByZXN1bHQuZmxhdE1hcCgoeyBvdXRwdXQgfSkgPT4gb3V0cHV0KTtcbiAgcmV0dXJuIHJlc3VsdC5vdXRwdXQ7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNvcHlQdWJsaWNEaXJlY3RvcnkoXG4gIGNvbmZpZzogSW50ZXJuYWxDb25maWcsXG4pOiBQcm9taXNlPEJ1aWxkT3V0cHV0WydwdWJsaWNBc3NldHMnXT4ge1xuICBjb25zdCBmaWxlcyA9IGF3YWl0IGdldFB1YmxpY0ZpbGVzKGNvbmZpZyk7XG4gIGlmIChmaWxlcy5sZW5ndGggPT09IDApIHJldHVybiBbXTtcblxuICBjb25zdCBwdWJsaWNBc3NldHM6IEJ1aWxkT3V0cHV0WydwdWJsaWNBc3NldHMnXSA9IFtdO1xuICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcbiAgICBjb25zdCBzcmNQYXRoID0gcmVzb2x2ZShjb25maWcucHVibGljRGlyLCBmaWxlKTtcbiAgICBjb25zdCBvdXRQYXRoID0gcmVzb2x2ZShjb25maWcub3V0RGlyLCBmaWxlKTtcblxuICAgIGF3YWl0IGZzLmVuc3VyZURpcihkaXJuYW1lKG91dFBhdGgpKTtcbiAgICBhd2FpdCBmcy5jb3B5RmlsZShzcmNQYXRoLCBvdXRQYXRoKTtcbiAgICBwdWJsaWNBc3NldHMucHVzaCh7XG4gICAgICB0eXBlOiAnYXNzZXQnLFxuICAgICAgZmlsZU5hbWU6IGZpbGUsXG4gICAgICBuYW1lOiBmaWxlLFxuICAgICAgbmVlZHNDb2RlUmVmZXJlbmNlOiBmYWxzZSxcbiAgICAgIHNvdXJjZTogYXdhaXQgZnMucmVhZEZpbGUoc3JjUGF0aCksXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gcHVibGljQXNzZXRzO1xufVxuIiwgImltcG9ydCBmcyBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlbW92ZUVtcHR5RGlycyhkaXI6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBmaWxlcyA9IGF3YWl0IGZzLnJlYWRkaXIoZGlyKTtcbiAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLmpvaW4oZGlyLCBmaWxlKTtcbiAgICBjb25zdCBzdGF0cyA9IGF3YWl0IGZzLnN0YXQoZmlsZVBhdGgpO1xuICAgIGlmIChzdGF0cy5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICBhd2FpdCByZW1vdmVFbXB0eURpcnMoZmlsZVBhdGgpO1xuICAgIH1cbiAgfVxuXG4gIHRyeSB7XG4gICAgYXdhaXQgZnMucm1kaXIoZGlyKTtcbiAgfSBjYXRjaCB7XG4gICAgLy8gbm9vcCBvbiBmYWlsdXJlIC0gdGhpcyBtZWFucyB0aGUgZGlyZWN0b3J5IHdhcyBub3QgZW1wdHkuXG4gIH1cbn1cbiIsICJpbXBvcnQgeyBJbnRlcm5hbENvbmZpZyB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCBmcyBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgZ2xvYiBmcm9tICdmYXN0LWdsb2InO1xuaW1wb3J0IHsgdW5ub3JtYWxpemVQYXRoIH0gZnJvbSAnLi9wYXRocyc7XG5cbi8qKlxuICogR2V0IGFsbCB0aGUgZmlsZXMgaW4gdGhlIHByb2plY3QncyBwdWJsaWMgZGlyZWN0b3J5LiBSZXR1cm5lZCBwYXRocyBhcmUgcmVsYXRpdmUgdG8gdGhlXG4gKiBgY29uZmlnLnB1YmxpY0RpcmAuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRQdWJsaWNGaWxlcyhcbiAgY29uZmlnOiBJbnRlcm5hbENvbmZpZyxcbik6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgaWYgKCEoYXdhaXQgZnMuZXhpc3RzKGNvbmZpZy5wdWJsaWNEaXIpKSkgcmV0dXJuIFtdO1xuXG4gIGNvbnN0IGZpbGVzID0gYXdhaXQgZ2xvYignKiovKicsIHsgY3dkOiBjb25maWcucHVibGljRGlyIH0pO1xuICByZXR1cm4gZmlsZXMubWFwKHVubm9ybWFsaXplUGF0aCk7XG59XG4iLCAiaW1wb3J0IHsgcmVsYXRpdmUsIHJlc29sdmUgfSBmcm9tICdwYXRoJztcbmltcG9ydCB7XG4gIEJhY2tncm91bmRFbnRyeXBvaW50LFxuICBCYWNrZ3JvdW5kU2NyaXB0RGVmaW50aXRpb24sXG4gIEJhc2VFbnRyeXBvaW50T3B0aW9ucyxcbiAgQ29udGVudFNjcmlwdERlZmluaXRpb24sXG4gIENvbnRlbnRTY3JpcHRFbnRyeXBvaW50LFxuICBFbnRyeXBvaW50LFxuICBHZW5lcmljRW50cnlwb2ludCxcbiAgSW50ZXJuYWxDb25maWcsXG4gIE9wdGlvbnNFbnRyeXBvaW50LFxuICBQb3B1cEVudHJ5cG9pbnQsXG59IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCBmcyBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgeyBtaW5pbWF0Y2ggfSBmcm9tICdtaW5pbWF0Y2gnO1xuaW1wb3J0IHsgcGFyc2VIVE1MIH0gZnJvbSAnbGlua2Vkb20nO1xuaW1wb3J0IEpTT041IGZyb20gJ2pzb241JztcbmltcG9ydCB7IGltcG9ydEVudHJ5cG9pbnRGaWxlIH0gZnJvbSAnLi4vdXRpbHMvaW1wb3J0RW50cnlwb2ludEZpbGUnO1xuaW1wb3J0IGdsb2IgZnJvbSAnZmFzdC1nbG9iJztcbmltcG9ydCB7IGdldEVudHJ5cG9pbnROYW1lIH0gZnJvbSAnLi4vdXRpbHMvZW50cnlwb2ludHMnO1xuaW1wb3J0IHsgVklSVFVBTF9OT09QX0JBQ0tHUk9VTkRfTU9EVUxFX0lEIH0gZnJvbSAnLi4vdml0ZS1wbHVnaW5zL25vb3BCYWNrZ3JvdW5kJztcbmltcG9ydCB7IENTU19FWFRFTlNJT05TX1BBVFRFUk4gfSBmcm9tICcuLi91dGlscy9wYXRocyc7XG5cbi8qKlxuICogUmV0dXJuIGVudHJ5cG9pbnRzIGFuZCB0aGVpciBjb25maWd1cmF0aW9uIGJ5IGxvb2tpbmcgdGhyb3VnaCB0aGUgcHJvamVjdCdzIGZpbGVzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmluZEVudHJ5cG9pbnRzKFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuKTogUHJvbWlzZTxFbnRyeXBvaW50W10+IHtcbiAgY29uc3QgcmVsYXRpdmVQYXRocyA9IGF3YWl0IGdsb2IoJyoqLyonLCB7XG4gICAgY3dkOiBjb25maWcuZW50cnlwb2ludHNEaXIsXG4gIH0pO1xuICAvLyBFbnN1cmUgY29uc2lzdGVudCBvdXRwdXRcbiAgcmVsYXRpdmVQYXRocy5zb3J0KCk7XG5cbiAgY29uc3QgcGF0aEdsb2JzID0gT2JqZWN0LmtleXMoUEFUSF9HTE9CX1RPX1RZUEVfTUFQKTtcbiAgY29uc3QgZXhpc3RpbmdOYW1lczogUmVjb3JkPHN0cmluZywgRW50cnlwb2ludCB8IHVuZGVmaW5lZD4gPSB7fTtcblxuICBjb25zdCBlbnRyeXBvaW50czogRW50cnlwb2ludFtdID0gW107XG4gIGxldCBoYXNCYWNrZ3JvdW5kID0gZmFsc2U7XG4gIGF3YWl0IFByb21pc2UuYWxsKFxuICAgIHJlbGF0aXZlUGF0aHMubWFwKGFzeW5jIChyZWxhdGl2ZVBhdGgpID0+IHtcbiAgICAgIGNvbnN0IHBhdGggPSByZXNvbHZlKGNvbmZpZy5lbnRyeXBvaW50c0RpciwgcmVsYXRpdmVQYXRoKTtcbiAgICAgIGNvbnN0IG1hdGNoaW5nR2xvYiA9IHBhdGhHbG9icy5maW5kKChnbG9iKSA9PlxuICAgICAgICBtaW5pbWF0Y2gocmVsYXRpdmVQYXRoLCBnbG9iKSxcbiAgICAgICk7XG5cbiAgICAgIGlmIChtYXRjaGluZ0dsb2IgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gY29uZmlnLmxvZ2dlci53YXJuKFxuICAgICAgICAgIGAke3JlbGF0aXZlUGF0aH0gZG9lcyBub3QgbWF0Y2ggYW55IGtub3duIGVudHJ5cG9pbnQuIEtub3duIGVudHJ5cG9pbnRzOlxcbiR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgICBQQVRIX0dMT0JfVE9fVFlQRV9NQVAsXG4gICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgMixcbiAgICAgICAgICApfWAsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHR5cGUgPSBQQVRIX0dMT0JfVE9fVFlQRV9NQVBbbWF0Y2hpbmdHbG9iXTtcbiAgICAgIGlmICh0eXBlID09PSAnaWdub3JlZCcpIHJldHVybjtcblxuICAgICAgbGV0IGVudHJ5cG9pbnQ6IEVudHJ5cG9pbnQ7XG4gICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgY2FzZSAncG9wdXAnOlxuICAgICAgICAgIGVudHJ5cG9pbnQgPSBhd2FpdCBnZXRQb3B1cEVudHJ5cG9pbnQoY29uZmlnLCBwYXRoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnb3B0aW9ucyc6XG4gICAgICAgICAgZW50cnlwb2ludCA9IGF3YWl0IGdldE9wdGlvbnNFbnRyeXBvaW50KGNvbmZpZywgcGF0aCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2JhY2tncm91bmQnOlxuICAgICAgICAgIGVudHJ5cG9pbnQgPSBhd2FpdCBnZXRCYWNrZ3JvdW5kRW50cnlwb2ludChjb25maWcsIHBhdGgpO1xuICAgICAgICAgIGhhc0JhY2tncm91bmQgPSB0cnVlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdjb250ZW50LXNjcmlwdCc6XG4gICAgICAgICAgZW50cnlwb2ludCA9IGF3YWl0IGdldENvbnRlbnRTY3JpcHRFbnRyeXBvaW50KFxuICAgICAgICAgICAgY29uZmlnLFxuICAgICAgICAgICAgZ2V0RW50cnlwb2ludE5hbWUoY29uZmlnLmVudHJ5cG9pbnRzRGlyLCBwYXRoKSxcbiAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAndW5saXN0ZWQtcGFnZSc6XG4gICAgICAgICAgZW50cnlwb2ludCA9IGF3YWl0IGdldFVubGlzdGVkUGFnZUVudHJ5cG9pbnQoY29uZmlnLCBwYXRoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnY29udGVudC1zY3JpcHQtc3R5bGUnOlxuICAgICAgICAgIGVudHJ5cG9pbnQgPSB7XG4gICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgbmFtZTogZ2V0RW50cnlwb2ludE5hbWUoY29uZmlnLmVudHJ5cG9pbnRzRGlyLCBwYXRoKSxcbiAgICAgICAgICAgIGlucHV0UGF0aDogcGF0aCxcbiAgICAgICAgICAgIG91dHB1dERpcjogcmVzb2x2ZShjb25maWcub3V0RGlyLCBDT05URU5UX1NDUklQVF9PVVRfRElSKSxcbiAgICAgICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgaW5jbHVkZTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICBleGNsdWRlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgZW50cnlwb2ludCA9IHtcbiAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICBuYW1lOiBnZXRFbnRyeXBvaW50TmFtZShjb25maWcuZW50cnlwb2ludHNEaXIsIHBhdGgpLFxuICAgICAgICAgICAgaW5wdXRQYXRoOiBwYXRoLFxuICAgICAgICAgICAgb3V0cHV0RGlyOiBjb25maWcub3V0RGlyLFxuICAgICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgICBpbmNsdWRlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgIGV4Y2x1ZGU6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgd2l0aFNhbWVOYW1lID0gZXhpc3RpbmdOYW1lc1tlbnRyeXBvaW50Lm5hbWVdO1xuICAgICAgaWYgKHdpdGhTYW1lTmFtZSkge1xuICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICBgTXVsdGlwbGUgZW50cnlwb2ludHMgd2l0aCB0aGUgbmFtZSBcIiR7XG4gICAgICAgICAgICBlbnRyeXBvaW50Lm5hbWVcbiAgICAgICAgICB9XCIgZGV0ZWN0ZWQsIGJ1dCBvbmx5IG9uZSBpcyBhbGxvd2VkOiAke1tcbiAgICAgICAgICAgIHJlbGF0aXZlKGNvbmZpZy5yb290LCB3aXRoU2FtZU5hbWUuaW5wdXRQYXRoKSxcbiAgICAgICAgICAgIHJlbGF0aXZlKGNvbmZpZy5yb290LCBlbnRyeXBvaW50LmlucHV0UGF0aCksXG4gICAgICAgICAgXS5qb2luKCcsICcpfWAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBlbnRyeXBvaW50cy5wdXNoKGVudHJ5cG9pbnQpO1xuICAgICAgZXhpc3RpbmdOYW1lc1tlbnRyeXBvaW50Lm5hbWVdID0gZW50cnlwb2ludDtcbiAgICB9KSxcbiAgKTtcbiAgaWYgKGNvbmZpZy5jb21tYW5kID09PSAnc2VydmUnICYmICFoYXNCYWNrZ3JvdW5kKSB7XG4gICAgZW50cnlwb2ludHMucHVzaChcbiAgICAgIGF3YWl0IGdldEJhY2tncm91bmRFbnRyeXBvaW50KGNvbmZpZywgVklSVFVBTF9OT09QX0JBQ0tHUk9VTkRfTU9EVUxFX0lEKSxcbiAgICApO1xuICB9XG5cbiAgY29uZmlnLmxvZ2dlci5kZWJ1ZygnQWxsIGVudHJ5cG9pbnRzOicsIGVudHJ5cG9pbnRzKTtcbiAgY29uc3QgdGFyZ2V0RW50cnlwb2ludHMgPSBlbnRyeXBvaW50cy5maWx0ZXIoKGVudHJ5KSA9PiB7XG4gICAgY29uc3QgeyBpbmNsdWRlLCBleGNsdWRlIH0gPSBlbnRyeS5vcHRpb25zO1xuICAgIGlmIChpbmNsdWRlPy5sZW5ndGggJiYgZXhjbHVkZT8ubGVuZ3RoKSB7XG4gICAgICBjb25maWcubG9nZ2VyLndhcm4oXG4gICAgICAgIGBUaGUgJHtlbnRyeS5uYW1lfSBlbnRyeXBvaW50IGxpc3RzIGJvdGggaW5jbHVkZSBhbmQgZXhjbHVkZSwgYnV0IG9ubHkgb25lIGNhbiBiZSB1c2VkIHBlciBlbnRyeXBvaW50LiBFbnRyeXBvaW50IGlnbm9yZWQuYCxcbiAgICAgICk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChleGNsdWRlPy5sZW5ndGggJiYgIWluY2x1ZGU/Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuICFleGNsdWRlLmluY2x1ZGVzKGNvbmZpZy5icm93c2VyKTtcbiAgICB9XG4gICAgaWYgKGluY2x1ZGU/Lmxlbmd0aCAmJiAhZXhjbHVkZT8ubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gaW5jbHVkZS5pbmNsdWRlcyhjb25maWcuYnJvd3Nlcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH0pO1xuICBjb25maWcubG9nZ2VyLmRlYnVnKGAke2NvbmZpZy5icm93c2VyfSBlbnRyeXBvaW50czpgLCB0YXJnZXRFbnRyeXBvaW50cyk7XG4gIHJldHVybiB0YXJnZXRFbnRyeXBvaW50cztcbn1cblxuZnVuY3Rpb24gZ2V0SHRtbEJhc2VPcHRpb25zKGRvY3VtZW50OiBEb2N1bWVudCk6IEJhc2VFbnRyeXBvaW50T3B0aW9ucyB7XG4gIGNvbnN0IG9wdGlvbnM6IEJhc2VFbnRyeXBvaW50T3B0aW9ucyA9IHt9O1xuXG4gIGNvbnN0IGluY2x1ZGVDb250ZW50ID0gZG9jdW1lbnRcbiAgICAucXVlcnlTZWxlY3RvcihcIm1ldGFbbmFtZT0nbWFuaWZlc3QuaW5jbHVkZSddXCIpXG4gICAgPy5nZXRBdHRyaWJ1dGUoJ2NvbnRlbnQnKTtcbiAgaWYgKGluY2x1ZGVDb250ZW50KSB7XG4gICAgb3B0aW9ucy5pbmNsdWRlID0gSlNPTjUucGFyc2UoaW5jbHVkZUNvbnRlbnQpO1xuICB9XG5cbiAgY29uc3QgZXhjbHVkZUNvbnRlbnQgPSBkb2N1bWVudFxuICAgIC5xdWVyeVNlbGVjdG9yKFwibWV0YVtuYW1lPSdtYW5pZmVzdC5leGNsdWRlJ11cIilcbiAgICA/LmdldEF0dHJpYnV0ZSgnY29udGVudCcpO1xuICBpZiAoZXhjbHVkZUNvbnRlbnQpIHtcbiAgICBvcHRpb25zLmV4Y2x1ZGUgPSBKU09ONS5wYXJzZShleGNsdWRlQ29udGVudCk7XG4gIH1cblxuICByZXR1cm4gb3B0aW9ucztcbn1cblxuLyoqXG4gKiBAcGFyYW0gcGF0aCBBYnNvbHV0ZSBwYXRoIHRvIHRoZSBwb3B1cCBIVE1MIGZpbGUuXG4gKiBAcGFyYW0gY29udGVudCBTdHJpbmcgY29udGVudHMgb2YgdGhlIGZpbGUgYXQgdGhlIHBhdGguXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldFBvcHVwRW50cnlwb2ludChcbiAgY29uZmlnOiBJbnRlcm5hbENvbmZpZyxcbiAgcGF0aDogc3RyaW5nLFxuKTogUHJvbWlzZTxQb3B1cEVudHJ5cG9pbnQ+IHtcbiAgY29uc3QgY29udGVudCA9IGF3YWl0IGZzLnJlYWRGaWxlKHBhdGgsICd1dGYtOCcpO1xuICBjb25zdCB7IGRvY3VtZW50IH0gPSBwYXJzZUhUTUwoY29udGVudCk7XG5cbiAgY29uc3Qgb3B0aW9uczogUG9wdXBFbnRyeXBvaW50WydvcHRpb25zJ10gPSBnZXRIdG1sQmFzZU9wdGlvbnMoZG9jdW1lbnQpO1xuXG4gIGNvbnN0IHRpdGxlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigndGl0bGUnKTtcbiAgaWYgKHRpdGxlICE9IG51bGwpIG9wdGlvbnMuZGVmYXVsdFRpdGxlID0gdGl0bGUudGV4dENvbnRlbnQgPz8gdW5kZWZpbmVkO1xuXG4gIGNvbnN0IGRlZmF1bHRJY29uQ29udGVudCA9IGRvY3VtZW50XG4gICAgLnF1ZXJ5U2VsZWN0b3IoXCJtZXRhW25hbWU9J21hbmlmZXN0LmRlZmF1bHRfaWNvbiddXCIpXG4gICAgPy5nZXRBdHRyaWJ1dGUoJ2NvbnRlbnQnKTtcbiAgaWYgKGRlZmF1bHRJY29uQ29udGVudCkge1xuICAgIHRyeSB7XG4gICAgICBvcHRpb25zLmRlZmF1bHRJY29uID0gSlNPTjUucGFyc2UoZGVmYXVsdEljb25Db250ZW50KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbmZpZy5sb2dnZXIuZmF0YWwoXG4gICAgICAgIGBGYWlsZWQgdG8gcGFyc2UgZGVmYXVsdF9pY29uIG1ldGEgdGFnIGNvbnRlbnQgYXMgSlNPTjUuIGNvbnRlbnQ9JHtkZWZhdWx0SWNvbkNvbnRlbnR9YCxcbiAgICAgICAgZXJyLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBtdjJLZXlDb250ZW50ID0gZG9jdW1lbnRcbiAgICAucXVlcnlTZWxlY3RvcihcIm1ldGFbbmFtZT0nbWFuaWZlc3QudHlwZSddXCIpXG4gICAgPy5nZXRBdHRyaWJ1dGUoJ2NvbnRlbnQnKTtcbiAgaWYgKG12MktleUNvbnRlbnQpIHtcbiAgICBvcHRpb25zLm12MktleSA9XG4gICAgICBtdjJLZXlDb250ZW50ID09PSAncGFnZV9hY3Rpb24nID8gJ3BhZ2VfYWN0aW9uJyA6ICdicm93c2VyX2FjdGlvbic7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHR5cGU6ICdwb3B1cCcsXG4gICAgbmFtZTogJ3BvcHVwJyxcbiAgICBvcHRpb25zLFxuICAgIGlucHV0UGF0aDogcGF0aCxcbiAgICBvdXRwdXREaXI6IGNvbmZpZy5vdXREaXIsXG4gIH07XG59XG5cbi8qKlxuICogQHBhcmFtIHBhdGggQWJzb2x1dGUgcGF0aCB0byB0aGUgb3B0aW9ucyBIVE1MIGZpbGUuXG4gKiBAcGFyYW0gY29udGVudCBTdHJpbmcgY29udGVudHMgb2YgdGhlIGZpbGUgYXQgdGhlIHBhdGguXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldE9wdGlvbnNFbnRyeXBvaW50KFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuICBwYXRoOiBzdHJpbmcsXG4pOiBQcm9taXNlPE9wdGlvbnNFbnRyeXBvaW50PiB7XG4gIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBmcy5yZWFkRmlsZShwYXRoLCAndXRmLTgnKTtcbiAgY29uc3QgeyBkb2N1bWVudCB9ID0gcGFyc2VIVE1MKGNvbnRlbnQpO1xuXG4gIGNvbnN0IG9wdGlvbnM6IE9wdGlvbnNFbnRyeXBvaW50WydvcHRpb25zJ10gPSBnZXRIdG1sQmFzZU9wdGlvbnMoZG9jdW1lbnQpO1xuXG4gIGNvbnN0IG9wZW5JblRhYkNvbnRlbnQgPSBkb2N1bWVudFxuICAgIC5xdWVyeVNlbGVjdG9yKFwibWV0YVtuYW1lPSdtYW5pZmVzdC5vcGVuX2luX3RhYiddXCIpXG4gICAgPy5nZXRBdHRyaWJ1dGUoJ2NvbnRlbnQnKTtcbiAgaWYgKG9wZW5JblRhYkNvbnRlbnQpIHtcbiAgICBvcHRpb25zLm9wZW5JblRhYiA9IG9wZW5JblRhYkNvbnRlbnQgPT09ICd0cnVlJztcbiAgfVxuXG4gIGNvbnN0IGNocm9tZVN0eWxlQ29udGVudCA9IGRvY3VtZW50XG4gICAgLnF1ZXJ5U2VsZWN0b3IoXCJtZXRhW25hbWU9J21hbmlmZXN0LmNocm9tZV9zdHlsZSddXCIpXG4gICAgPy5nZXRBdHRyaWJ1dGUoJ2NvbnRlbnQnKTtcbiAgaWYgKGNocm9tZVN0eWxlQ29udGVudCkge1xuICAgIG9wdGlvbnMuY2hyb21lU3R5bGUgPSBjaHJvbWVTdHlsZUNvbnRlbnQgPT09ICd0cnVlJztcbiAgfVxuXG4gIGNvbnN0IGJyb3dzZXJTdHlsZUNvbnRlbnQgPSBkb2N1bWVudFxuICAgIC5xdWVyeVNlbGVjdG9yKFwibWV0YVtuYW1lPSdtYW5pZmVzdC5icm93c2VyX3N0eWxlJ11cIilcbiAgICA/LmdldEF0dHJpYnV0ZSgnY29udGVudCcpO1xuICBpZiAoYnJvd3NlclN0eWxlQ29udGVudCkge1xuICAgIG9wdGlvbnMuYnJvd3NlclN0eWxlID0gYnJvd3NlclN0eWxlQ29udGVudCA9PT0gJ3RydWUnO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnb3B0aW9ucycsXG4gICAgbmFtZTogJ29wdGlvbnMnLFxuICAgIG9wdGlvbnMsXG4gICAgaW5wdXRQYXRoOiBwYXRoLFxuICAgIG91dHB1dERpcjogY29uZmlnLm91dERpcixcbiAgfTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gcGF0aCBBYnNvbHV0ZSBwYXRoIHRvIHRoZSBIVE1MIGZpbGUuXG4gKiBAcGFyYW0gY29udGVudCBTdHJpbmcgY29udGVudHMgb2YgdGhlIGZpbGUgYXQgdGhlIHBhdGguXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldFVubGlzdGVkUGFnZUVudHJ5cG9pbnQoXG4gIGNvbmZpZzogSW50ZXJuYWxDb25maWcsXG4gIHBhdGg6IHN0cmluZyxcbik6IFByb21pc2U8R2VuZXJpY0VudHJ5cG9pbnQ+IHtcbiAgY29uc3QgY29udGVudCA9IGF3YWl0IGZzLnJlYWRGaWxlKHBhdGgsICd1dGYtOCcpO1xuICBjb25zdCB7IGRvY3VtZW50IH0gPSBwYXJzZUhUTUwoY29udGVudCk7XG5cbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAndW5saXN0ZWQtcGFnZScsXG4gICAgbmFtZTogZ2V0RW50cnlwb2ludE5hbWUoY29uZmlnLmVudHJ5cG9pbnRzRGlyLCBwYXRoKSxcbiAgICBpbnB1dFBhdGg6IHBhdGgsXG4gICAgb3V0cHV0RGlyOiBjb25maWcub3V0RGlyLFxuICAgIG9wdGlvbnM6IGdldEh0bWxCYXNlT3B0aW9ucyhkb2N1bWVudCksXG4gIH07XG59XG5cbi8qKlxuICogQHBhcmFtIHBhdGggQWJzb2x1dGUgcGF0aCB0byB0aGUgYmFja2dyb3VuZCdzIFRTIGZpbGUuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldEJhY2tncm91bmRFbnRyeXBvaW50KFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuICBwYXRoOiBzdHJpbmcsXG4pOiBQcm9taXNlPEJhY2tncm91bmRFbnRyeXBvaW50PiB7XG4gIGxldCBvcHRpb25zOiBPbWl0PEJhY2tncm91bmRTY3JpcHREZWZpbnRpdGlvbiwgJ21haW4nPiA9IHt9O1xuICBpZiAocGF0aCAhPT0gVklSVFVBTF9OT09QX0JBQ0tHUk9VTkRfTU9EVUxFX0lEKSB7XG4gICAgY29uc3QgZGVmYXVsdEV4cG9ydCA9XG4gICAgICBhd2FpdCBpbXBvcnRFbnRyeXBvaW50RmlsZTxCYWNrZ3JvdW5kU2NyaXB0RGVmaW50aXRpb24+KHBhdGgsIGNvbmZpZyk7XG4gICAgaWYgKGRlZmF1bHRFeHBvcnQgPT0gbnVsbCkge1xuICAgICAgdGhyb3cgRXJyb3IoJ0JhY2tncm91bmQgc2NyaXB0IGRvZXMgbm90IGhhdmUgYSBkZWZhdWx0IGV4cG9ydCcpO1xuICAgIH1cbiAgICBjb25zdCB7IG1haW46IF8sIC4uLm1vZHVsZU9wdGlvbnMgfSA9IGRlZmF1bHRFeHBvcnQ7XG4gICAgb3B0aW9ucyA9IG1vZHVsZU9wdGlvbnM7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnYmFja2dyb3VuZCcsXG4gICAgbmFtZTogJ2JhY2tncm91bmQnLFxuICAgIGlucHV0UGF0aDogcGF0aCxcbiAgICBvdXRwdXREaXI6IGNvbmZpZy5vdXREaXIsXG4gICAgb3B0aW9uczogb3B0aW9ucyxcbiAgfTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gcGF0aCBBYnNvbHV0ZSBwYXRoIHRvIHRoZSBjb250ZW50IHNjcmlwdCdzIFRTIGZpbGUuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldENvbnRlbnRTY3JpcHRFbnRyeXBvaW50KFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuICBuYW1lOiBzdHJpbmcsXG4gIHBhdGg6IHN0cmluZyxcbik6IFByb21pc2U8Q29udGVudFNjcmlwdEVudHJ5cG9pbnQ+IHtcbiAgY29uc3QgeyBtYWluOiBfLCAuLi5vcHRpb25zIH0gPVxuICAgIGF3YWl0IGltcG9ydEVudHJ5cG9pbnRGaWxlPENvbnRlbnRTY3JpcHREZWZpbml0aW9uPihwYXRoLCBjb25maWcpO1xuICBpZiAob3B0aW9ucyA9PSBudWxsKSB7XG4gICAgdGhyb3cgRXJyb3IoYENvbnRlbnQgc2NyaXB0ICR7bmFtZX0gZG9lcyBub3QgaGF2ZSBhIGRlZmF1bHQgZXhwb3J0YCk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnY29udGVudC1zY3JpcHQnLFxuICAgIG5hbWU6IGdldEVudHJ5cG9pbnROYW1lKGNvbmZpZy5lbnRyeXBvaW50c0RpciwgcGF0aCksXG4gICAgaW5wdXRQYXRoOiBwYXRoLFxuICAgIG91dHB1dERpcjogcmVzb2x2ZShjb25maWcub3V0RGlyLCBDT05URU5UX1NDUklQVF9PVVRfRElSKSxcbiAgICBvcHRpb25zLFxuICB9O1xufVxuXG5jb25zdCBQQVRIX0dMT0JfVE9fVFlQRV9NQVA6IFJlY29yZDxzdHJpbmcsIEVudHJ5cG9pbnRbJ3R5cGUnXSB8ICdpZ25vcmVkJz4gPSB7XG4gICdzYW5kYm94Lmh0bWwnOiAnc2FuZGJveCcsXG4gICdzYW5kYm94L2luZGV4Lmh0bWwnOiAnc2FuZGJveCcsXG4gICcqLnNhbmRib3guaHRtbCc6ICdzYW5kYm94JyxcbiAgJyouc2FuZGJveC9pbmRleC5odG1sJzogJ3NhbmRib3gnLFxuXG4gICdib29rbWFya3MuaHRtbCc6ICdib29rbWFya3MnLFxuICAnYm9va21hcmtzL2luZGV4Lmh0bWwnOiAnYm9va21hcmtzJyxcblxuICAnaGlzdG9yeS5odG1sJzogJ2hpc3RvcnknLFxuICAnaGlzdG9yeS9pbmRleC5odG1sJzogJ2hpc3RvcnknLFxuXG4gICduZXd0YWIuaHRtbCc6ICduZXd0YWInLFxuICAnbmV3dGFiL2luZGV4Lmh0bWwnOiAnbmV3dGFiJyxcblxuICAnc2lkZXBhbmVsLmh0bWwnOiAnc2lkZXBhbmVsJyxcbiAgJ3NpZGVwYW5lbC9pbmRleC5odG1sJzogJ3NpZGVwYW5lbCcsXG4gICcqLnNpZGVwYW5lbC5odG1sJzogJ3NpZGVwYW5lbCcsXG4gICcqLnNpZGVwYW5lbC9pbmRleC5odG1sJzogJ3NpZGVwYW5lbCcsXG5cbiAgJ2RldnRvb2xzLmh0bWwnOiAnZGV2dG9vbHMnLFxuICAnZGV2dG9vbHMvaW5kZXguaHRtbCc6ICdkZXZ0b29scycsXG5cbiAgJ2JhY2tncm91bmQudHMnOiAnYmFja2dyb3VuZCcsXG4gICdiYWNrZ3JvdW5kL2luZGV4LnRzJzogJ2JhY2tncm91bmQnLFxuICBbVklSVFVBTF9OT09QX0JBQ0tHUk9VTkRfTU9EVUxFX0lEXTogJ2JhY2tncm91bmQnLFxuXG4gICdjb250ZW50LnRzPyh4KSc6ICdjb250ZW50LXNjcmlwdCcsXG4gICdjb250ZW50L2luZGV4LnRzPyh4KSc6ICdjb250ZW50LXNjcmlwdCcsXG4gICcqLmNvbnRlbnQudHM/KHgpJzogJ2NvbnRlbnQtc2NyaXB0JyxcbiAgJyouY29udGVudC9pbmRleC50cz8oeCknOiAnY29udGVudC1zY3JpcHQnLFxuICBbYGNvbnRlbnQuJHtDU1NfRVhURU5TSU9OU19QQVRURVJOfWBdOiAnY29udGVudC1zY3JpcHQtc3R5bGUnLFxuICBbYCouY29udGVudC4ke0NTU19FWFRFTlNJT05TX1BBVFRFUk59YF06ICdjb250ZW50LXNjcmlwdC1zdHlsZScsXG4gIFtgY29udGVudC9pbmRleC4ke0NTU19FWFRFTlNJT05TX1BBVFRFUk59YF06ICdjb250ZW50LXNjcmlwdC1zdHlsZScsXG4gIFtgKi5jb250ZW50L2luZGV4LiR7Q1NTX0VYVEVOU0lPTlNfUEFUVEVSTn1gXTogJ2NvbnRlbnQtc2NyaXB0LXN0eWxlJyxcblxuICAncG9wdXAuaHRtbCc6ICdwb3B1cCcsXG4gICdwb3B1cC9pbmRleC5odG1sJzogJ3BvcHVwJyxcblxuICAnb3B0aW9ucy5odG1sJzogJ29wdGlvbnMnLFxuICAnb3B0aW9ucy9pbmRleC5odG1sJzogJ29wdGlvbnMnLFxuXG4gICcqLmh0bWwnOiAndW5saXN0ZWQtcGFnZScsXG4gICcqL2luZGV4Lmh0bWwnOiAndW5saXN0ZWQtcGFnZScsXG4gICcqLnRzJzogJ3VubGlzdGVkLXNjcmlwdCcsXG4gICcqL2luZGV4LnRzJzogJ3VubGlzdGVkLXNjcmlwdCcsXG4gIFtgKi4ke0NTU19FWFRFTlNJT05TX1BBVFRFUk59YF06ICd1bmxpc3RlZC1zdHlsZScsXG4gIFtgKi9pbmRleC4ke0NTU19FWFRFTlNJT05TX1BBVFRFUk59YF06ICd1bmxpc3RlZC1zdHlsZScsXG5cbiAgLy8gRG9uJ3Qgd2FybiBhYm91dCBhbnkgZmlsZXMgaW4gc3ViZGlyZWN0b3JpZXMsIGxpa2UgQ1NTIG9yIEpTIGVudHJ5cG9pbnRzIGZvciBIVE1MIGZpbGVzIG9yIHRlc3RzXG4gICcqLyoqJzogJ2lnbm9yZWQnLFxufTtcblxuY29uc3QgQ09OVEVOVF9TQ1JJUFRfT1VUX0RJUiA9ICdjb250ZW50LXNjcmlwdHMnO1xuIiwgImltcG9ydCBjcmVhdGVKSVRJIGZyb20gJ2ppdGknO1xuaW1wb3J0IHsgSW50ZXJuYWxDb25maWcgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBjcmVhdGVVbmltcG9ydCB9IGZyb20gJ3VuaW1wb3J0JztcbmltcG9ydCBmcyBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgeyByZXNvbHZlIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQgdHJhbnNmb3JtIGZyb20gJ2ppdGkvZGlzdC9iYWJlbCc7XG5pbXBvcnQgeyBnZXRVbmltcG9ydE9wdGlvbnMgfSBmcm9tICcuL2F1dG8taW1wb3J0cyc7XG5pbXBvcnQgeyByZW1vdmVQcm9qZWN0SW1wb3J0U3RhdGVtZW50cyB9IGZyb20gJy4vc3RyaW5ncyc7XG5pbXBvcnQgeyBub3JtYWxpemVQYXRoIH0gZnJvbSAnLi9wYXRocyc7XG5cbi8qKlxuICogR2V0IHRoZSB2YWx1ZSBmcm9tIHRoZSBkZWZhdWx0IGV4cG9ydCBvZiBhIGBwYXRoYC5cbiAqXG4gKiBJdCB3b3JrcyBieTpcbiAqXG4gKiAxLiBSZWFkaW5nIHRoZSBmaWxlIHRleHRcbiAqIDIuIFN0cmlwcGluZyBhbGwgaW1wb3J0cyBmcm9tIGl0IHZpYSByZWdleFxuICogMy4gQXV0by1pbXBvcnQgb25seSB0aGUgY2xpZW50IGhlbHBlciBmdW5jdGlvbnNcbiAqXG4gKiBUaGlzIHByZXZlbnRzIHJlc29sdmluZyBpbXBvcnRzIG9mIGltcG9ydHMsIHNwZWVkaW5nIHRoaW5ncyB1cCBhbmQgcHJldmVudGluZyBcInh4eCBpcyBub3RcbiAqIGRlZmluZWRcIiBlcnJvcnMuXG4gKlxuICogRG93bnNpZGUgaXMgdGhhdCBjb2RlIGNhbm5vdCBiZSBleGVjdXRlZCBvdXRzaWRlIG9mIHRoZSBtYWluIGZ1Y250aW9uIGZvciB0aGUgZW50cnlwb2ludCxcbiAqIG90aGVyd2lzZSB5b3Ugd2lsbCBzZWUgXCJ4eHggaXMgbm90IGRlZmluZWRcIiBlcnJvcnMgZm9yIGFueSBpbXBvcnRzIHVzZWQgb3V0c2lkZSBvZiBtYWluIGZ1bmN0aW9uLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW1wb3J0RW50cnlwb2ludEZpbGU8VD4oXG4gIHBhdGg6IHN0cmluZyxcbiAgY29uZmlnOiBJbnRlcm5hbENvbmZpZyxcbik6IFByb21pc2U8VD4ge1xuICBjb25maWcubG9nZ2VyLmRlYnVnKCdMb2FkaW5nIGZpbGUgbWV0YWRhdGE6JywgcGF0aCk7XG4gIC8vIEpJVEkgJiBCYWJlbCB1c2VzIG5vcm1hbGl6ZWQgcGF0aHMuXG4gIGNvbnN0IG5vcm1hbFBhdGggPSBub3JtYWxpemVQYXRoKHBhdGgpO1xuXG4gIGNvbnN0IHVuaW1wb3J0ID0gY3JlYXRlVW5pbXBvcnQoe1xuICAgIC4uLmdldFVuaW1wb3J0T3B0aW9ucyhjb25maWcpLFxuICAgIC8vIE9ubHkgYWxsb3cgc3BlY2lmaWMgaW1wb3J0cywgbm90IGFsbCBmcm9tIHRoZSBwcm9qZWN0XG4gICAgZGlyczogW10sXG4gIH0pO1xuICBhd2FpdCB1bmltcG9ydC5pbml0KCk7XG5cbiAgY29uc3QgdGV4dCA9IGF3YWl0IGZzLnJlYWRGaWxlKHBhdGgsICd1dGYtOCcpO1xuICBjb25zdCB0ZXh0Tm9JbXBvcnRzID0gcmVtb3ZlUHJvamVjdEltcG9ydFN0YXRlbWVudHModGV4dCk7XG4gIGNvbnN0IHsgY29kZSB9ID0gYXdhaXQgdW5pbXBvcnQuaW5qZWN0SW1wb3J0cyh0ZXh0Tm9JbXBvcnRzKTtcbiAgY29uZmlnLmxvZ2dlci5kZWJ1ZyhcbiAgICBbJ1RleHQ6JywgdGV4dCwgJ05vIGltcG9ydHM6JywgdGV4dE5vSW1wb3J0cywgJ0NvZGU6JywgY29kZV0uam9pbignXFxuJyksXG4gICk7XG5cbiAgY29uc3Qgaml0aSA9IGNyZWF0ZUpJVEkoX19maWxlbmFtZSwge1xuICAgIGNhY2hlOiBmYWxzZSxcbiAgICBlc21SZXNvbHZlOiB0cnVlLFxuICAgIGludGVyb3BEZWZhdWx0OiB0cnVlLFxuICAgIGFsaWFzOiB7XG4gICAgICAnd2ViZXh0ZW5zaW9uLXBvbHlmaWxsJzogcmVzb2x2ZShcbiAgICAgICAgY29uZmlnLnJvb3QsXG4gICAgICAgICdub2RlX21vZHVsZXMvd3h0L2Rpc3QvdmlydHVhbC1tb2R1bGVzL2Zha2UtYnJvd3Nlci5qcycsXG4gICAgICApLFxuICAgIH0sXG4gICAgdHJhbnNmb3JtKG9wdHMpIHtcbiAgICAgIGlmIChvcHRzLmZpbGVuYW1lID09PSBub3JtYWxQYXRoKVxuICAgICAgICByZXR1cm4gdHJhbnNmb3JtKHsgLi4ub3B0cywgc291cmNlOiBjb2RlIH0pO1xuICAgICAgZWxzZSByZXR1cm4gdHJhbnNmb3JtKG9wdHMpO1xuICAgIH0sXG4gIH0pO1xuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IGppdGkocGF0aCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbmZpZy5sb2dnZXIuZXJyb3IoZXJyKTtcbiAgICB0aHJvdyBlcnI7XG4gIH1cbn1cbiIsICJleHBvcnQgZnVuY3Rpb24ga2ViYWJDYXNlQWxwaGFudW1lcmljKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHN0clxuICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgLnJlcGxhY2UoL1teYS16MC05LVxcc10vZywgJycpIC8vIFJlbW92ZSBhbGwgbm9uLWFscGhhbnVtZXJpYywgbm9uLWh5cGhlbiBjaGFyYWN0ZXJzXG4gICAgLnJlcGxhY2UoL1xccysvZywgJy0nKTsgLy8gUmVwbGFjZSBzcGFjZXMgd2l0aCBoeXBoZW5zXG59XG5cbi8qKlxuICogUmVtb3ZlcyBpbXBvcnQgc3RhdGVtZW50cyBmcm9tIHRoZSB0b3Agb2YgYSBmaWxlLiBLZWVwcyBpbXBvcnQubWV0YSBhbmQgaW5saW5lLCBhc3luYyBgaW1wb3J0KClgXG4gKiBjYWxscy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUltcG9ydFN0YXRlbWVudHModGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRleHQucmVwbGFjZShcbiAgICAvKGltcG9ydFxccz9be1xcd11bXFxzXFxTXSo/ZnJvbVxccz9bXCInXVtcXHNcXFNdKj9bXCInXTs/fGltcG9ydFxccz9bXCInXVtcXHNcXFNdKj9bXCInXTs/KS9nbSxcbiAgICAnJyxcbiAgKTtcbn1cblxuLyoqXG4gKiBSZW1vdmVzIGltcG9ydHMsIGVuc3VyaW5nIHRoYXQgc29tZSBvZiBXWFQncyBjbGllbnQgaW1wb3J0cyBhcmUgcHJlc2VudCwgc28gdGhhdCBlbnRyeXBvaW50cyBjYW4gYmUgcGFyc2VkIGlmIGF1dG8taW1wb3J0cyBhcmUgZGlzYWJsZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVQcm9qZWN0SW1wb3J0U3RhdGVtZW50cyh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBub0ltcG9ydHMgPSByZW1vdmVJbXBvcnRTdGF0ZW1lbnRzKHRleHQpO1xuXG4gIHJldHVybiBgaW1wb3J0IHsgZGVmaW5lQ29udGVudFNjcmlwdCwgZGVmaW5lQmFja2dyb3VuZCB9IGZyb20gJ3d4dC9jbGllbnQnO1xuXG4ke25vSW1wb3J0c31gO1xufVxuIiwgImltcG9ydCB7IFVuaW1wb3J0T3B0aW9ucywgY3JlYXRlVW5pbXBvcnQgfSBmcm9tICd1bmltcG9ydCc7XG5pbXBvcnQgeyBFbnRyeXBvaW50LCBJbnRlcm5hbENvbmZpZyB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCBmcyBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgeyByZWxhdGl2ZSwgcmVzb2x2ZSB9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgZ2V0RW50cnlwb2ludEJ1bmRsZVBhdGggfSBmcm9tICcuLi91dGlscy9lbnRyeXBvaW50cyc7XG5pbXBvcnQgeyBnZXRVbmltcG9ydE9wdGlvbnMgfSBmcm9tICcuLi91dGlscy9hdXRvLWltcG9ydHMnO1xuaW1wb3J0IHsgZ2V0R2xvYmFscyB9IGZyb20gJy4uL3V0aWxzL2dsb2JhbHMnO1xuaW1wb3J0IHsgZ2V0UHVibGljRmlsZXMgfSBmcm9tICcuLi91dGlscy9wdWJsaWMnO1xuaW1wb3J0IHsgbm9ybWFsaXplUGF0aCB9IGZyb20gJy4uL3V0aWxzL3BhdGhzJztcbmltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgeyBNZXNzYWdlLCBwYXJzZUkxOG5NZXNzYWdlcyB9IGZyb20gJy4uL3V0aWxzL2kxOG4nO1xuaW1wb3J0IHsgd3JpdGVGaWxlSWZEaWZmZXJlbnQgfSBmcm9tICcuLi91dGlscy9mcyc7XG5cbi8qKlxuICogR2VuZXJhdGUgYW5kIHdyaXRlIGFsbCB0aGUgZmlsZXMgaW5zaWRlIHRoZSBgSW50ZXJuYWxDb25maWcudHlwZXNEaXJgIGRpcmVjdG9yeS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlVHlwZXNEaXIoXG4gIGVudHJ5cG9pbnRzOiBFbnRyeXBvaW50W10sXG4gIGNvbmZpZzogSW50ZXJuYWxDb25maWcsXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgZnMuZW5zdXJlRGlyKGNvbmZpZy50eXBlc0Rpcik7XG5cbiAgY29uc3QgcmVmZXJlbmNlczogc3RyaW5nW10gPSBbXTtcblxuICBjb25zdCBpbXBvcnRzID0gZ2V0VW5pbXBvcnRPcHRpb25zKGNvbmZpZyk7XG4gIGlmIChpbXBvcnRzICE9PSBmYWxzZSkge1xuICAgIHJlZmVyZW5jZXMucHVzaChhd2FpdCB3cml0ZUltcG9ydHNEZWNsYXJhdGlvbkZpbGUoY29uZmlnLCBpbXBvcnRzKSk7XG4gIH1cblxuICByZWZlcmVuY2VzLnB1c2goYXdhaXQgd3JpdGVQYXRoc0RlY2xhcmF0aW9uRmlsZShlbnRyeXBvaW50cywgY29uZmlnKSk7XG4gIHJlZmVyZW5jZXMucHVzaChhd2FpdCB3cml0ZUkxOG5EZWNsYXJhdGlvbkZpbGUoY29uZmlnKSk7XG4gIHJlZmVyZW5jZXMucHVzaChhd2FpdCB3cml0ZUdsb2JhbHNEZWNsYXJhdGlvbkZpbGUoY29uZmlnKSk7XG5cbiAgY29uc3QgbWFpblJlZmVyZW5jZSA9IGF3YWl0IHdyaXRlTWFpbkRlY2xhcmF0aW9uRmlsZShyZWZlcmVuY2VzLCBjb25maWcpO1xuICBhd2FpdCB3cml0ZVRzQ29uZmlnRmlsZShtYWluUmVmZXJlbmNlLCBjb25maWcpO1xufVxuXG5hc3luYyBmdW5jdGlvbiB3cml0ZUltcG9ydHNEZWNsYXJhdGlvbkZpbGUoXG4gIGNvbmZpZzogSW50ZXJuYWxDb25maWcsXG4gIHVuaW1wb3J0T3B0aW9uczogUGFydGlhbDxVbmltcG9ydE9wdGlvbnM+LFxuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgZmlsZVBhdGggPSByZXNvbHZlKGNvbmZpZy50eXBlc0RpciwgJ2ltcG9ydHMuZC50cycpO1xuICBjb25zdCB1bmltcG9ydCA9IGNyZWF0ZVVuaW1wb3J0KHVuaW1wb3J0T3B0aW9ucyk7XG5cbiAgLy8gTG9hZCBwcm9qZWN0IGltcG9ydHMgaW50byB1bmltcG9ydCBtZW1vcnkgc28gdGhleSBhcmUgb3V0cHV0IHZpYSBnZW5lcmF0ZVR5cGVEZWNsYXJhdGlvbnNcbiAgYXdhaXQgdW5pbXBvcnQuc2NhbkltcG9ydHNGcm9tRGlyKHVuZGVmaW5lZCwgeyBjd2Q6IGNvbmZpZy5zcmNEaXIgfSk7XG5cbiAgYXdhaXQgd3JpdGVGaWxlSWZEaWZmZXJlbnQoXG4gICAgZmlsZVBhdGgsXG4gICAgWycvLyBHZW5lcmF0ZWQgYnkgd3h0JywgYXdhaXQgdW5pbXBvcnQuZ2VuZXJhdGVUeXBlRGVjbGFyYXRpb25zKCldLmpvaW4oXG4gICAgICAnXFxuJyxcbiAgICApICsgJ1xcbicsXG4gICk7XG5cbiAgcmV0dXJuIGZpbGVQYXRoO1xufVxuXG5hc3luYyBmdW5jdGlvbiB3cml0ZVBhdGhzRGVjbGFyYXRpb25GaWxlKFxuICBlbnRyeXBvaW50czogRW50cnlwb2ludFtdLFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgZmlsZVBhdGggPSByZXNvbHZlKGNvbmZpZy50eXBlc0RpciwgJ3BhdGhzLmQudHMnKTtcbiAgY29uc3QgdW5pb25zID0gZW50cnlwb2ludHNcbiAgICAubWFwKChlbnRyeSkgPT5cbiAgICAgIGdldEVudHJ5cG9pbnRCdW5kbGVQYXRoKFxuICAgICAgICBlbnRyeSxcbiAgICAgICAgY29uZmlnLm91dERpcixcbiAgICAgICAgZW50cnkuaW5wdXRQYXRoLmVuZHNXaXRoKCcuaHRtbCcpID8gJy5odG1sJyA6ICcuanMnLFxuICAgICAgKSxcbiAgICApXG4gICAgLmNvbmNhdChhd2FpdCBnZXRQdWJsaWNGaWxlcyhjb25maWcpKVxuICAgIC5tYXAobm9ybWFsaXplUGF0aClcbiAgICAubWFwKChwYXRoKSA9PiBgICAgIHwgXCIvJHtwYXRofVwiYClcbiAgICAuc29ydCgpXG4gICAgLmpvaW4oJ1xcbicpO1xuXG4gIGNvbnN0IHRlbXBsYXRlID0gYC8vIEdlbmVyYXRlZCBieSB3eHRcbmltcG9ydCBcInd4dC9icm93c2VyXCI7XG5cbmRlY2xhcmUgbW9kdWxlIFwid3h0L2Jyb3dzZXJcIiB7XG4gIHR5cGUgUHVibGljUGF0aCA9XG57eyB1bmlvbiB9fVxuICBleHBvcnQgaW50ZXJmYWNlIFd4dFJ1bnRpbWUgZXh0ZW5kcyBSdW50aW1lLlN0YXRpYyB7XG4gICAgZ2V0VVJMKHBhdGg6IFB1YmxpY1BhdGgpOiBzdHJpbmc7XG4gIH1cbn1cbmA7XG5cbiAgYXdhaXQgd3JpdGVGaWxlSWZEaWZmZXJlbnQoXG4gICAgZmlsZVBhdGgsXG4gICAgdGVtcGxhdGUucmVwbGFjZSgne3sgdW5pb24gfX0nLCB1bmlvbnMgfHwgJyAgICB8IG5ldmVyJyksXG4gICk7XG5cbiAgcmV0dXJuIGZpbGVQYXRoO1xufVxuXG5hc3luYyBmdW5jdGlvbiB3cml0ZUkxOG5EZWNsYXJhdGlvbkZpbGUoXG4gIGNvbmZpZzogSW50ZXJuYWxDb25maWcsXG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBmaWxlUGF0aCA9IHJlc29sdmUoY29uZmlnLnR5cGVzRGlyLCAnaTE4bi5kLnRzJyk7XG4gIGNvbnN0IGRlZmF1bHRMb2NhbGUgPSBjb25maWcubWFuaWZlc3QuZGVmYXVsdF9sb2NhbGU7XG4gIGNvbnN0IHRlbXBsYXRlID0gYC8vIEdlbmVyYXRlZCBieSB3eHRcbmltcG9ydCBcInd4dC9icm93c2VyXCI7XG5cbmRlY2xhcmUgbW9kdWxlIFwid3h0L2Jyb3dzZXJcIiB7XG4gIC8qKlxuICAgKiBTZWUgaHR0cHM6Ly9kZXZlbG9wZXIuY2hyb21lLmNvbS9kb2NzL2V4dGVuc2lvbnMvcmVmZXJlbmNlL2kxOG4vI21ldGhvZC1nZXRNZXNzYWdlXG4gICAqL1xuICBpbnRlcmZhY2UgR2V0TWVzc2FnZU9wdGlvbnMge1xuICAgIC8qKlxuICAgICAqIFNlZSBodHRwczovL2RldmVsb3Blci5jaHJvbWUuY29tL2RvY3MvZXh0ZW5zaW9ucy9yZWZlcmVuY2UvaTE4bi8jbWV0aG9kLWdldE1lc3NhZ2VcbiAgICAgKi9cbiAgICBlc2NhcGVMdD86IGJvb2xlYW5cbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgV3h0STE4biBleHRlbmRzIEkxOG4uU3RhdGljIHtcbnt7IG92ZXJyaWRlcyB9fVxuICB9XG59XG5gO1xuXG4gIGxldCBtZXNzYWdlczogTWVzc2FnZVtdO1xuICBpZiAoZGVmYXVsdExvY2FsZSkge1xuICAgIGNvbnN0IGRlZmF1bHRMb2NhbGVQYXRoID0gcGF0aC5yZXNvbHZlKFxuICAgICAgY29uZmlnLnB1YmxpY0RpcixcbiAgICAgICdfbG9jYWxlcycsXG4gICAgICBkZWZhdWx0TG9jYWxlLFxuICAgICAgJ21lc3NhZ2VzLmpzb24nLFxuICAgICk7XG4gICAgY29uc3QgY29udGVudCA9IEpTT04ucGFyc2UoYXdhaXQgZnMucmVhZEZpbGUoZGVmYXVsdExvY2FsZVBhdGgsICd1dGYtOCcpKTtcbiAgICBtZXNzYWdlcyA9IHBhcnNlSTE4bk1lc3NhZ2VzKGNvbnRlbnQpO1xuICB9IGVsc2Uge1xuICAgIG1lc3NhZ2VzID0gcGFyc2VJMThuTWVzc2FnZXMoe30pO1xuICB9XG5cbiAgY29uc3Qgb3ZlcnJpZGVzID0gbWVzc2FnZXMubWFwKChtZXNzYWdlKSA9PiB7XG4gICAgcmV0dXJuIGAgICAgLyoqXG4gICAgICogJHttZXNzYWdlLmRlc2NyaXB0aW9uID8/ICdObyBtZXNzYWdlIGRlc2NyaXB0aW9uLid9XG4gICAgICogXG4gICAgICogXCIke21lc3NhZ2UubWVzc2FnZX1cIlxuICAgICAqL1xuICAgIGdldE1lc3NhZ2UoXG4gICAgICBtZXNzYWdlTmFtZTogXCIke21lc3NhZ2UubmFtZX1cIixcbiAgICAgIHN1YnN0aXR1dGlvbnM/OiBzdHJpbmcgfCBzdHJpbmdbXSxcbiAgICAgIG9wdGlvbnM/OiBHZXRNZXNzYWdlT3B0aW9ucyxcbiAgICApOiBzdHJpbmc7YDtcbiAgfSk7XG4gIGF3YWl0IHdyaXRlRmlsZUlmRGlmZmVyZW50KFxuICAgIGZpbGVQYXRoLFxuICAgIHRlbXBsYXRlLnJlcGxhY2UoJ3t7IG92ZXJyaWRlcyB9fScsIG92ZXJyaWRlcy5qb2luKCdcXG4nKSksXG4gICk7XG5cbiAgcmV0dXJuIGZpbGVQYXRoO1xufVxuXG5hc3luYyBmdW5jdGlvbiB3cml0ZUdsb2JhbHNEZWNsYXJhdGlvbkZpbGUoXG4gIGNvbmZpZzogSW50ZXJuYWxDb25maWcsXG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBmaWxlUGF0aCA9IHJlc29sdmUoY29uZmlnLnR5cGVzRGlyLCAnZ2xvYmFscy5kLnRzJyk7XG4gIGNvbnN0IGdsb2JhbHMgPSBnZXRHbG9iYWxzKGNvbmZpZyk7XG4gIGF3YWl0IHdyaXRlRmlsZUlmRGlmZmVyZW50KFxuICAgIGZpbGVQYXRoLFxuICAgIFtcbiAgICAgICcvLyBHZW5lcmF0ZWQgYnkgd3h0JyxcbiAgICAgICdleHBvcnQge30nLFxuICAgICAgJ2RlY2xhcmUgZ2xvYmFsIHsnLFxuICAgICAgLi4uZ2xvYmFscy5tYXAoKGdsb2JhbCkgPT4gYCAgY29uc3QgJHtnbG9iYWwubmFtZX06ICR7Z2xvYmFsLnR5cGV9O2ApLFxuICAgICAgJ30nLFxuICAgIF0uam9pbignXFxuJykgKyAnXFxuJyxcbiAgKTtcbiAgcmV0dXJuIGZpbGVQYXRoO1xufVxuXG5hc3luYyBmdW5jdGlvbiB3cml0ZU1haW5EZWNsYXJhdGlvbkZpbGUoXG4gIHJlZmVyZW5jZXM6IHN0cmluZ1tdLFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgZGlyID0gY29uZmlnLnd4dERpcjtcbiAgY29uc3QgZmlsZVBhdGggPSByZXNvbHZlKGRpciwgJ3d4dC5kLnRzJyk7XG4gIGF3YWl0IHdyaXRlRmlsZUlmRGlmZmVyZW50KFxuICAgIGZpbGVQYXRoLFxuICAgIFtcbiAgICAgICcvLyBHZW5lcmF0ZWQgYnkgd3h0JyxcbiAgICAgIGAvLy8gPHJlZmVyZW5jZSB0eXBlcz1cInZpdGUvY2xpZW50XCIgLz5gLFxuICAgICAgLi4ucmVmZXJlbmNlcy5tYXAoXG4gICAgICAgIChyZWYpID0+XG4gICAgICAgICAgYC8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi8ke25vcm1hbGl6ZVBhdGgocmVsYXRpdmUoZGlyLCByZWYpKX1cIiAvPmAsXG4gICAgICApLFxuICAgIF0uam9pbignXFxuJykgKyAnXFxuJyxcbiAgKTtcbiAgcmV0dXJuIGZpbGVQYXRoO1xufVxuXG5hc3luYyBmdW5jdGlvbiB3cml0ZVRzQ29uZmlnRmlsZShcbiAgbWFpblJlZmVyZW5jZTogc3RyaW5nLFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuKSB7XG4gIGNvbnN0IGRpciA9IGNvbmZpZy53eHREaXI7XG4gIGNvbnN0IHJvb3RQYXRoID0gbm9ybWFsaXplUGF0aChyZWxhdGl2ZShkaXIsIGNvbmZpZy5yb290KSk7XG4gIGNvbnN0IHNyY1BhdGggPSBub3JtYWxpemVQYXRoKHJlbGF0aXZlKGRpciwgY29uZmlnLnNyY0RpcikpO1xuICBhd2FpdCB3cml0ZUZpbGVJZkRpZmZlcmVudChcbiAgICByZXNvbHZlKGRpciwgJ3RzY29uZmlnLmpzb24nKSxcbiAgICBge1xuICBcImNvbXBpbGVyT3B0aW9uc1wiOiB7XG4gICAgXCJ0YXJnZXRcIjogXCJFU05leHRcIixcbiAgICBcIm1vZHVsZVwiOiBcIkVTTmV4dFwiLFxuICAgIFwibW9kdWxlUmVzb2x1dGlvblwiOiBcIkJ1bmRsZXJcIixcbiAgICBcIm5vRW1pdFwiOiB0cnVlLFxuICAgIFwiZXNNb2R1bGVJbnRlcm9wXCI6IHRydWUsXG4gICAgXCJmb3JjZUNvbnNpc3RlbnRDYXNpbmdJbkZpbGVOYW1lc1wiOiB0cnVlLFxuICAgIFwicmVzb2x2ZUpzb25Nb2R1bGVcIjogdHJ1ZSxcbiAgICBcInN0cmljdFwiOiB0cnVlLFxuICAgIFwibGliXCI6IFtcIkRPTVwiLCBcIldlYldvcmtlclwiXSxcbiAgICBcInNraXBMaWJDaGVja1wiOiB0cnVlLFxuICAgIFwicGF0aHNcIjoge1xuICAgICAgXCJAQFwiOiBbXCIke3Jvb3RQYXRofVwiXSxcbiAgICAgIFwiQEAvKlwiOiBbXCIke3Jvb3RQYXRofS8qXCJdLFxuICAgICAgXCJ+flwiOiBbXCIke3Jvb3RQYXRofVwiXSxcbiAgICAgIFwifn4vKlwiOiBbXCIke3Jvb3RQYXRofS8qXCJdLFxuICAgICAgXCJAXCI6IFtcIiR7c3JjUGF0aH1cIl0sXG4gICAgICBcIkAvKlwiOiBbXCIke3NyY1BhdGh9LypcIl0sXG4gICAgICBcIn5cIjogW1wiJHtzcmNQYXRofVwiXSxcbiAgICAgIFwifi8qXCI6IFtcIiR7c3JjUGF0aH0vKlwiXVxuICAgIH1cbiAgfSxcbiAgXCJpbmNsdWRlXCI6IFtcbiAgICBcIiR7bm9ybWFsaXplUGF0aChyZWxhdGl2ZShkaXIsIGNvbmZpZy5yb290KSl9LyoqLypcIixcbiAgICBcIi4vJHtub3JtYWxpemVQYXRoKHJlbGF0aXZlKGRpciwgbWFpblJlZmVyZW5jZSkpfVwiXG4gIF0sXG4gIFwiZXhjbHVkZVwiOiBbXCIke25vcm1hbGl6ZVBhdGgocmVsYXRpdmUoZGlyLCBjb25maWcub3V0QmFzZURpcikpfVwiXVxufWAsXG4gICk7XG59XG4iLCAiZXhwb3J0IGludGVyZmFjZSBNZXNzYWdlIHtcbiAgbmFtZTogc3RyaW5nO1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xufVxuXG5jb25zdCBwcmVkZWZpbmVkTWVzc2FnZXMgPSB7XG4gICdAQGV4dGVuc2lvbl9pZCc6IHtcbiAgICBtZXNzYWdlOiAnPGJyb3dzZXIucnVudGltZS5pZD4nLFxuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgXCJUaGUgZXh0ZW5zaW9uIG9yIGFwcCBJRDsgeW91IG1pZ2h0IHVzZSB0aGlzIHN0cmluZyB0byBjb25zdHJ1Y3QgVVJMcyBmb3IgcmVzb3VyY2VzIGluc2lkZSB0aGUgZXh0ZW5zaW9uLiBFdmVuIHVubG9jYWxpemVkIGV4dGVuc2lvbnMgY2FuIHVzZSB0aGlzIG1lc3NhZ2UuXFxuTm90ZTogWW91IGNhbid0IHVzZSB0aGlzIG1lc3NhZ2UgaW4gYSBtYW5pZmVzdCBmaWxlLlwiLFxuICB9LFxuICAnQEB1aV9sb2NhbGUnOiB7XG4gICAgbWVzc2FnZTogJzxicm93c2VyLmkxOG4uZ2V0VWlMb2NhbGUoKT4nLFxuICAgIGRlc2NyaXB0aW9uOiAnJyxcbiAgfSxcbiAgJ0BAYmlkaV9kaXInOiB7XG4gICAgbWVzc2FnZTogJzxsdHJ8cnRsPicsXG4gICAgZGVzY3JpcHRpb246XG4gICAgICAnVGhlIHRleHQgZGlyZWN0aW9uIGZvciB0aGUgY3VycmVudCBsb2NhbGUsIGVpdGhlciBcImx0clwiIGZvciBsZWZ0LXRvLXJpZ2h0IGxhbmd1YWdlcyBzdWNoIGFzIEVuZ2xpc2ggb3IgXCJydGxcIiBmb3IgcmlnaHQtdG8tbGVmdCBsYW5ndWFnZXMgc3VjaCBhcyBKYXBhbmVzZS4nLFxuICB9LFxuICAnQEBiaWRpX3JldmVyc2VkX2Rpcic6IHtcbiAgICBtZXNzYWdlOiAnPHJ0bHxsdHI+JyxcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgICdJZiB0aGUgQEBiaWRpX2RpciBpcyBcImx0clwiLCB0aGVuIHRoaXMgaXMgXCJydGxcIjsgb3RoZXJ3aXNlLCBpdFxcJ3MgXCJsdHJcIi4nLFxuICB9LFxuICAnQEBiaWRpX3N0YXJ0X2VkZ2UnOiB7XG4gICAgbWVzc2FnZTogJzxsZWZ0fHJpZ2h0PicsXG4gICAgZGVzY3JpcHRpb246XG4gICAgICAnSWYgdGhlIEBAYmlkaV9kaXIgaXMgXCJsdHJcIiwgdGhlbiB0aGlzIGlzIFwibGVmdFwiOyBvdGhlcndpc2UsIGl0XFwncyBcInJpZ2h0XCIuJyxcbiAgfSxcbiAgJ0BAYmlkaV9lbmRfZWRnZSc6IHtcbiAgICBtZXNzYWdlOiAnPHJpZ2h0fGxlZnQ+JyxcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgICdJZiB0aGUgQEBiaWRpX2RpciBpcyBcImx0clwiLCB0aGVuIHRoaXMgaXMgXCJyaWdodFwiOyBvdGhlcndpc2UsIGl0XFwncyBcImxlZnRcIi4nLFxuICB9LFxufTtcblxuLyoqXG4gKiBHZXQgYSBsaXN0IG9mIGFsbCBtZXNzYWdlcyBhbmQgdGhlaXIgbWV0YWRhdGEgZnJvbSBKU09OIGZpbGUgY29udGVudHMuXG4gKlxuICogQHBhcmFtIG1lc3NhZ2VzSnNvbiBUaGUgY29udGVudHMgb2YgYSBgX2xvY2FsZXMvZW4vbWVzc2FnZXMuanNvbmAgZmlsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlSTE4bk1lc3NhZ2VzKG1lc3NhZ2VzSnNvbjogb2JqZWN0KTogTWVzc2FnZVtdIHtcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHtcbiAgICAuLi5wcmVkZWZpbmVkTWVzc2FnZXMsXG4gICAgLi4ubWVzc2FnZXNKc29uLFxuICB9KS5tYXA8TWVzc2FnZT4oKFtuYW1lLCBkZXRhaWxzXSkgPT4gKHtcbiAgICBuYW1lLFxuICAgIC4uLmRldGFpbHMsXG4gIH0pKTtcbn1cbiIsICJpbXBvcnQgeyBFbnRyeXBvaW50IH0gZnJvbSAnLi4vLi4nO1xuaW1wb3J0IHsgTWFuaWZlc3QgfSBmcm9tICd3ZWJleHRlbnNpb24tcG9seWZpbGwnO1xuaW1wb3J0IHtcbiAgQmFja2dyb3VuZEVudHJ5cG9pbnQsXG4gIEJ1aWxkT3V0cHV0LFxuICBDb250ZW50U2NyaXB0RW50cnlwb2ludCxcbiAgSW50ZXJuYWxDb25maWcsXG4gIE9wdGlvbnNFbnRyeXBvaW50LFxuICBQb3B1cEVudHJ5cG9pbnQsXG59IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCBmcyBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgeyByZXNvbHZlIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBnZXRFbnRyeXBvaW50QnVuZGxlUGF0aCB9IGZyb20gJy4vZW50cnlwb2ludHMnO1xuaW1wb3J0IHsgQ29udGVudFNlY3VyaXR5UG9saWN5IH0gZnJvbSAnLi9Db250ZW50U2VjdXJpdHlQb2xpY3knO1xuaW1wb3J0IHtcbiAgaGFzaENvbnRlbnRTY3JpcHRPcHRpb25zLFxuICBtYXBXeHRPcHRpb25zVG9Db250ZW50U2NyaXB0LFxufSBmcm9tICcuL2NvbnRlbnQtc2NyaXB0cyc7XG5pbXBvcnQgeyBnZXRQYWNrYWdlSnNvbiB9IGZyb20gJy4vcGFja2FnZSc7XG5pbXBvcnQgeyBub3JtYWxpemVQYXRoIH0gZnJvbSAnLi9wYXRocyc7XG5pbXBvcnQgeyB3cml0ZUZpbGVJZkRpZmZlcmVudCB9IGZyb20gJy4vZnMnO1xuXG4vKipcbiAqIFdyaXRlcyB0aGUgbWFuaWZlc3QgdG8gdGhlIG91dHB1dCBkaXJlY3RvcnkgYW5kIHRoZSBidWlsZCBvdXRwdXQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3cml0ZU1hbmlmZXN0KFxuICBtYW5pZmVzdDogTWFuaWZlc3QuV2ViRXh0ZW5zaW9uTWFuaWZlc3QsXG4gIG91dHB1dDogQnVpbGRPdXRwdXQsXG4gIGNvbmZpZzogSW50ZXJuYWxDb25maWcsXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3Qgc3RyID1cbiAgICBjb25maWcubW9kZSA9PT0gJ3Byb2R1Y3Rpb24nXG4gICAgICA/IEpTT04uc3RyaW5naWZ5KG1hbmlmZXN0KVxuICAgICAgOiBKU09OLnN0cmluZ2lmeShtYW5pZmVzdCwgbnVsbCwgMik7XG5cbiAgYXdhaXQgZnMuZW5zdXJlRGlyKGNvbmZpZy5vdXREaXIpO1xuICBhd2FpdCB3cml0ZUZpbGVJZkRpZmZlcmVudChyZXNvbHZlKGNvbmZpZy5vdXREaXIsICdtYW5pZmVzdC5qc29uJyksIHN0cik7XG5cbiAgb3V0cHV0LnB1YmxpY0Fzc2V0cy51bnNoaWZ0KHtcbiAgICB0eXBlOiAnYXNzZXQnLFxuICAgIGZpbGVOYW1lOiAnbWFuaWZlc3QuanNvbicsXG4gICAgbmFtZTogJ21hbmlmZXN0JyxcbiAgICBuZWVkc0NvZGVSZWZlcmVuY2U6IGZhbHNlLFxuICAgIHNvdXJjZTogc3RyLFxuICB9KTtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIG1hbmlmZXN0IGJhc2VkIG9uIHRoZSBjb25maWcgYW5kIGVudHJ5cG9pbnRzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVNYWluZmVzdChcbiAgZW50cnlwb2ludHM6IEVudHJ5cG9pbnRbXSxcbiAgYnVpbGRPdXRwdXQ6IE9taXQ8QnVpbGRPdXRwdXQsICdtYW5pZmVzdCc+LFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuKTogUHJvbWlzZTxNYW5pZmVzdC5XZWJFeHRlbnNpb25NYW5pZmVzdD4ge1xuICBjb25zdCBwa2cgPSBhd2FpdCBnZXRQYWNrYWdlSnNvbihjb25maWcpO1xuXG4gIGNvbnN0IG1hbmlmZXN0OiBNYW5pZmVzdC5XZWJFeHRlbnNpb25NYW5pZmVzdCA9IE9iamVjdC5hc3NpZ24oXG4gICAge1xuICAgICAgbWFuaWZlc3RfdmVyc2lvbjogY29uZmlnLm1hbmlmZXN0VmVyc2lvbixcbiAgICAgIG5hbWU6IHBrZz8ubmFtZSxcbiAgICAgIGRlc2NyaXB0aW9uOiBwa2c/LmRlc2NyaXB0aW9uLFxuICAgICAgdmVyc2lvbjogcGtnPy52ZXJzaW9uICYmIHNpbXBsaWZ5VmVyc2lvbihwa2cudmVyc2lvbiksXG4gICAgICAvLyBPbmx5IGFkZCB0aGUgdmVyc2lvbiBuYW1lIHRvIGNocm9taXVtIGFuZCBpZiB0aGUgdXNlciBoYXNuJ3Qgc3BlY2lmaWVkIGEgY3VzdG9tIHZlcnNpb24uXG4gICAgICB2ZXJzaW9uX25hbWU6XG4gICAgICAgIGNvbmZpZy5icm93c2VyICE9PSAnZmlyZWZveCcgJiYgIWNvbmZpZy5tYW5pZmVzdC52ZXJzaW9uXG4gICAgICAgICAgPyBwa2c/LnZlcnNpb25cbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIHNob3J0X25hbWU6IHBrZz8uc2hvcnROYW1lLFxuICAgICAgaWNvbnM6IGRpc2NvdmVySWNvbnMoYnVpbGRPdXRwdXQpLFxuICAgIH0sXG4gICAgY29uZmlnLm1hbmlmZXN0LFxuICApO1xuXG4gIGFkZEVudHJ5cG9pbnRzKG1hbmlmZXN0LCBlbnRyeXBvaW50cywgYnVpbGRPdXRwdXQsIGNvbmZpZyk7XG5cbiAgaWYgKGNvbmZpZy5jb21tYW5kID09PSAnc2VydmUnKSBhZGREZXZNb2RlQ3NwKG1hbmlmZXN0LCBjb25maWcpO1xuICBpZiAoY29uZmlnLmNvbW1hbmQgPT09ICdzZXJ2ZScpIGFkZERldk1vZGVQZXJtaXNzaW9ucyhtYW5pZmVzdCwgY29uZmlnKTtcblxuICAvLyBUT0RPOiB0cmFuc2Zvcm0gbWFuaWZlc3QgaGVyZS5cblxuICBpZiAobWFuaWZlc3QubmFtZSA9PSBudWxsKVxuICAgIHRocm93IEVycm9yKFxuICAgICAgXCJNYW5pZmVzdCAnbmFtZScgaXMgbWlzc2luZy4gRWl0aGVyOlxcbjEuIFNldCB0aGUgbmFtZSBpbiB5b3VyIDxyb290RGlyPi9wYWNrYWdlLmpzb25cXG4yLiBTZXQgYSBuYW1lIHZpYSB0aGUgbWFuaWZlc3Qgb3B0aW9uIGluIHlvdXIgd3h0LmNvbmZpZy50c1wiLFxuICAgICk7XG4gIGlmIChtYW5pZmVzdC52ZXJzaW9uID09IG51bGwpIHtcbiAgICB0aHJvdyBFcnJvcihcbiAgICAgIFwiTWFuaWZlc3QgJ3ZlcnNpb24nIGlzIG1pc3NpbmcuIEVpdGhlcjpcXG4xLiBBZGQgYSB2ZXJzaW9uIGluIHlvdXIgPHJvb3REaXI+L3BhY2thZ2UuanNvblxcbjIuIFBhc3MgdGhlIHZlcnNpb24gdmlhIHRoZSBtYW5pZmVzdCBvcHRpb24gaW4geW91ciB3eHQuY29uZmlnLnRzXCIsXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBtYW5pZmVzdDtcbn1cblxuLyoqXG4gKiBSZW1vdmVzIHN1ZmZpeGVzIGZyb20gdGhlIHZlcnNpb24sIGxpa2UgWC5ZLlotYWxwaGExICh3aGljaCBicm9zZXJzIGRvbid0IGFsbG93KSwgc28gaXQncyBhXG4gKiBzaW1wbGUgdmVyc2lvbiBudW1iZXIsIGxpa2UgWCBvciBYLlkgb3IgWC5ZLlosIHdoaWNoIGJyb3dzZXJzIGFsbG93LlxuICovXG5mdW5jdGlvbiBzaW1wbGlmeVZlcnNpb24odmVyc2lvbk5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIC8vIFJlZ2V4IGFkYXB0ZWQgZnJvbSBoZXJlOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL01vemlsbGEvQWRkLW9ucy9XZWJFeHRlbnNpb25zL21hbmlmZXN0Lmpzb24vdmVyc2lvbiN2ZXJzaW9uX2Zvcm1hdFxuICBjb25zdCB2ZXJzaW9uID0gL14oKDB8WzEtOV1bMC05XXswLDh9KShbLl0oMHxbMS05XVswLTldezAsOH0pKXswLDN9KS4qJC8uZXhlYyhcbiAgICB2ZXJzaW9uTmFtZSxcbiAgKT8uWzFdO1xuXG4gIGlmICh2ZXJzaW9uID09IG51bGwpXG4gICAgdGhyb3cgRXJyb3IoXG4gICAgICBgQ2Fubm90IHNpbXBsaWZ5IHBhY2thZ2UuanNvbiB2ZXJzaW9uIFwiJHt2ZXJzaW9uTmFtZX1cIiB0byBhIHZhbGlkIGV4dGVuc2lvbiB2ZXJzaW9uLCBcIlguWS5aXCJgLFxuICAgICk7XG5cbiAgcmV0dXJuIHZlcnNpb247XG59XG5cbmZ1bmN0aW9uIGFkZEVudHJ5cG9pbnRzKFxuICBtYW5pZmVzdDogTWFuaWZlc3QuV2ViRXh0ZW5zaW9uTWFuaWZlc3QsXG4gIGVudHJ5cG9pbnRzOiBFbnRyeXBvaW50W10sXG4gIGJ1aWxkT3V0cHV0OiBPbWl0PEJ1aWxkT3V0cHV0LCAnbWFuaWZlc3QnPixcbiAgY29uZmlnOiBJbnRlcm5hbENvbmZpZyxcbik6IHZvaWQge1xuICBjb25zdCBlbnRyaWVzQnlUeXBlID0gZW50cnlwb2ludHMucmVkdWNlPFxuICAgIFBhcnRpYWw8UmVjb3JkPEVudHJ5cG9pbnRbJ3R5cGUnXSwgRW50cnlwb2ludFtdPj5cbiAgPigobWFwLCBlbnRyeXBvaW50KSA9PiB7XG4gICAgbWFwW2VudHJ5cG9pbnQudHlwZV0gPz89IFtdO1xuICAgIG1hcFtlbnRyeXBvaW50LnR5cGVdPy5wdXNoKGVudHJ5cG9pbnQpO1xuICAgIHJldHVybiBtYXA7XG4gIH0sIHt9KTtcblxuICBjb25zdCBiYWNrZ3JvdW5kID0gZW50cmllc0J5VHlwZVsnYmFja2dyb3VuZCddPy5bMF0gYXNcbiAgICB8IEJhY2tncm91bmRFbnRyeXBvaW50XG4gICAgfCB1bmRlZmluZWQ7XG4gIGNvbnN0IGJvb2ttYXJrcyA9IGVudHJpZXNCeVR5cGVbJ2Jvb2ttYXJrcyddPy5bMF07XG4gIGNvbnN0IGNvbnRlbnRTY3JpcHRzID0gZW50cmllc0J5VHlwZVsnY29udGVudC1zY3JpcHQnXSBhc1xuICAgIHwgQ29udGVudFNjcmlwdEVudHJ5cG9pbnRbXVxuICAgIHwgdW5kZWZpbmVkO1xuICBjb25zdCBkZXZ0b29scyA9IGVudHJpZXNCeVR5cGVbJ2RldnRvb2xzJ10/LlswXTtcbiAgY29uc3QgaGlzdG9yeSA9IGVudHJpZXNCeVR5cGVbJ2hpc3RvcnknXT8uWzBdO1xuICBjb25zdCBuZXd0YWIgPSBlbnRyaWVzQnlUeXBlWyduZXd0YWInXT8uWzBdO1xuICBjb25zdCBvcHRpb25zID0gZW50cmllc0J5VHlwZVsnb3B0aW9ucyddPy5bMF0gYXNcbiAgICB8IE9wdGlvbnNFbnRyeXBvaW50XG4gICAgfCB1bmRlZmluZWQ7XG4gIGNvbnN0IHBvcHVwID0gZW50cmllc0J5VHlwZVsncG9wdXAnXT8uWzBdIGFzIFBvcHVwRW50cnlwb2ludCB8IHVuZGVmaW5lZDtcbiAgY29uc3Qgc2FuZGJveGVzID0gZW50cmllc0J5VHlwZVsnc2FuZGJveCddO1xuICBjb25zdCBzaWRlcGFuZWxzID0gZW50cmllc0J5VHlwZVsnc2lkZXBhbmVsJ107XG5cbiAgaWYgKGJhY2tncm91bmQpIHtcbiAgICBjb25zdCBzY3JpcHQgPSBnZXRFbnRyeXBvaW50QnVuZGxlUGF0aChiYWNrZ3JvdW5kLCBjb25maWcub3V0RGlyLCAnLmpzJyk7XG4gICAgaWYgKG1hbmlmZXN0Lm1hbmlmZXN0X3ZlcnNpb24gPT09IDMpIHtcbiAgICAgIG1hbmlmZXN0LmJhY2tncm91bmQgPSB7XG4gICAgICAgIHR5cGU6IGJhY2tncm91bmQub3B0aW9ucy50eXBlLFxuICAgICAgICBzZXJ2aWNlX3dvcmtlcjogc2NyaXB0LFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgbWFuaWZlc3QuYmFja2dyb3VuZCA9IHtcbiAgICAgICAgcGVyc2lzdGVudDogYmFja2dyb3VuZC5vcHRpb25zLnBlcnNpc3RlbnQsXG4gICAgICAgIHNjcmlwdHM6IFtzY3JpcHRdLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBpZiAoYm9va21hcmtzKSB7XG4gICAgaWYgKGNvbmZpZy5icm93c2VyID09PSAnZmlyZWZveCcpIHtcbiAgICAgIGNvbmZpZy5sb2dnZXIud2FybihcbiAgICAgICAgJ0Jvb2ttYXJrcyBhcmUgbm90IHN1cHBvcnRlZCBieSBGaXJlZm94LiBjaHJvbWVfdXJsX292ZXJyaWRlcy5ib29rbWFya3Mgd2FzIG5vdCBhZGRlZCB0byB0aGUgbWFuaWZlc3QnLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbWFuaWZlc3QuY2hyb21lX3VybF9vdmVycmlkZXMgPz89IHt9O1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogYm9va21hcmtzIGlzIHVudHlwZWQgaW4gd2ViZXh0ZW5zaW9uLXBvbHlmaWxsLCBidXQgc3VwcG9ydGVkIGJ5IGNocm9tZVxuICAgICAgbWFuaWZlc3QuY2hyb21lX3VybF9vdmVycmlkZXMuYm9va21hcmtzID0gZ2V0RW50cnlwb2ludEJ1bmRsZVBhdGgoXG4gICAgICAgIGJvb2ttYXJrcyxcbiAgICAgICAgY29uZmlnLm91dERpcixcbiAgICAgICAgJy5odG1sJyxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGhpc3RvcnkpIHtcbiAgICBpZiAoY29uZmlnLmJyb3dzZXIgPT09ICdmaXJlZm94Jykge1xuICAgICAgY29uZmlnLmxvZ2dlci53YXJuKFxuICAgICAgICAnQm9va21hcmtzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IEZpcmVmb3guIGNocm9tZV91cmxfb3ZlcnJpZGVzLmhpc3Rvcnkgd2FzIG5vdCBhZGRlZCB0byB0aGUgbWFuaWZlc3QnLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbWFuaWZlc3QuY2hyb21lX3VybF9vdmVycmlkZXMgPz89IHt9O1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogaGlzdG9yeSBpcyB1bnR5cGVkIGluIHdlYmV4dGVuc2lvbi1wb2x5ZmlsbCwgYnV0IHN1cHBvcnRlZCBieSBjaHJvbWVcbiAgICAgIG1hbmlmZXN0LmNocm9tZV91cmxfb3ZlcnJpZGVzLmhpc3RvcnkgPSBnZXRFbnRyeXBvaW50QnVuZGxlUGF0aChcbiAgICAgICAgaGlzdG9yeSxcbiAgICAgICAgY29uZmlnLm91dERpcixcbiAgICAgICAgJy5odG1sJyxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgaWYgKG5ld3RhYikge1xuICAgIG1hbmlmZXN0LmNocm9tZV91cmxfb3ZlcnJpZGVzID8/PSB7fTtcbiAgICBtYW5pZmVzdC5jaHJvbWVfdXJsX292ZXJyaWRlcy5uZXd0YWIgPSBnZXRFbnRyeXBvaW50QnVuZGxlUGF0aChcbiAgICAgIG5ld3RhYixcbiAgICAgIGNvbmZpZy5vdXREaXIsXG4gICAgICAnLmh0bWwnLFxuICAgICk7XG4gIH1cblxuICBpZiAocG9wdXApIHtcbiAgICBjb25zdCBkZWZhdWx0X3BvcHVwID0gZ2V0RW50cnlwb2ludEJ1bmRsZVBhdGgoXG4gICAgICBwb3B1cCxcbiAgICAgIGNvbmZpZy5vdXREaXIsXG4gICAgICAnLmh0bWwnLFxuICAgICk7XG4gICAgY29uc3Qgb3B0aW9uczogTWFuaWZlc3QuQWN0aW9uTWFuaWZlc3QgPSB7XG4gICAgICBkZWZhdWx0X2ljb246IHBvcHVwLm9wdGlvbnMuZGVmYXVsdEljb24sXG4gICAgICBkZWZhdWx0X3RpdGxlOiBwb3B1cC5vcHRpb25zLmRlZmF1bHRUaXRsZSxcbiAgICB9O1xuICAgIGlmIChtYW5pZmVzdC5tYW5pZmVzdF92ZXJzaW9uID09PSAzKSB7XG4gICAgICBtYW5pZmVzdC5hY3Rpb24gPSB7XG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIGRlZmF1bHRfcG9wdXAsXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBtYW5pZmVzdFtwb3B1cC5vcHRpb25zLm12MktleSA/PyAnYnJvd3Nlcl9hY3Rpb24nXSA9IHtcbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgZGVmYXVsdF9wb3B1cCxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgaWYgKGRldnRvb2xzKSB7XG4gICAgbWFuaWZlc3QuZGV2dG9vbHNfcGFnZSA9IGdldEVudHJ5cG9pbnRCdW5kbGVQYXRoKFxuICAgICAgZGV2dG9vbHMsXG4gICAgICBjb25maWcub3V0RGlyLFxuICAgICAgJy5odG1sJyxcbiAgICApO1xuICB9XG5cbiAgaWYgKG9wdGlvbnMpIHtcbiAgICBjb25zdCBwYWdlID0gZ2V0RW50cnlwb2ludEJ1bmRsZVBhdGgob3B0aW9ucywgY29uZmlnLm91dERpciwgJy5odG1sJyk7XG4gICAgbWFuaWZlc3Qub3B0aW9uc191aSA9IHtcbiAgICAgIG9wZW5faW5fdGFiOiBvcHRpb25zLm9wdGlvbnMub3BlbkluVGFiLFxuICAgICAgYnJvd3Nlcl9zdHlsZTpcbiAgICAgICAgY29uZmlnLmJyb3dzZXIgPT09ICdmaXJlZm94JyA/IG9wdGlvbnMub3B0aW9ucy5icm93c2VyU3R5bGUgOiB1bmRlZmluZWQsXG4gICAgICBjaHJvbWVfc3R5bGU6XG4gICAgICAgIGNvbmZpZy5icm93c2VyICE9PSAnZmlyZWZveCcgPyBvcHRpb25zLm9wdGlvbnMuY2hyb21lU3R5bGUgOiB1bmRlZmluZWQsXG4gICAgICBwYWdlLFxuICAgIH07XG4gIH1cblxuICBpZiAoc2FuZGJveGVzPy5sZW5ndGgpIHtcbiAgICBpZiAoY29uZmlnLmJyb3dzZXIgPT09ICdmaXJlZm94Jykge1xuICAgICAgY29uZmlnLmxvZ2dlci53YXJuKFxuICAgICAgICAnU2FuZGJveGVkIHBhZ2VzIG5vdCBzdXBwb3J0ZWQgYnkgRmlyZWZveC4gc2FuZGJveC5wYWdlcyB3YXMgbm90IGFkZGVkIHRvIHRoZSBtYW5pZmVzdCcsXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yOiBzYW5kYm94IG5vdCB0eXBlZFxuICAgICAgbWFuaWZlc3Quc2FuZGJveCA9IHtcbiAgICAgICAgcGFnZXM6IHNhbmRib3hlcy5tYXAoKGVudHJ5KSA9PlxuICAgICAgICAgIGdldEVudHJ5cG9pbnRCdW5kbGVQYXRoKGVudHJ5LCBjb25maWcub3V0RGlyLCAnLmh0bWwnKSxcbiAgICAgICAgKSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgaWYgKHNpZGVwYW5lbHM/Lmxlbmd0aCkge1xuICAgIGNvbnN0IGRlZmF1bHRTaWRlcGFuZWwgPVxuICAgICAgc2lkZXBhbmVscy5maW5kKChlbnRyeSkgPT4gZW50cnkubmFtZSA9PT0gJ3NpZGVwYW5lbCcpID8/IHNpZGVwYW5lbHNbMF07XG4gICAgY29uc3QgcGFnZSA9IGdldEVudHJ5cG9pbnRCdW5kbGVQYXRoKFxuICAgICAgZGVmYXVsdFNpZGVwYW5lbCxcbiAgICAgIGNvbmZpZy5vdXREaXIsXG4gICAgICAnLmh0bWwnLFxuICAgICk7XG5cbiAgICBpZiAoY29uZmlnLmJyb3dzZXIgPT09ICdmaXJlZm94Jykge1xuICAgICAgbWFuaWZlc3Quc2lkZWJhcl9hY3Rpb24gPSB7XG4gICAgICAgIC8vIFRPRE86IEFkZCBvcHRpb25zIHRvIHNpZGUgcGFuZWxcbiAgICAgICAgLy8gLi4uZGVmYXVsdFNpZGVwYW5lbC5vcHRpb25zLFxuICAgICAgICBkZWZhdWx0X3BhbmVsOiBwYWdlLFxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKGNvbmZpZy5tYW5pZmVzdFZlcnNpb24gPT09IDMpIHtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3I6IFVudHlwZWRcbiAgICAgIG1hbmlmZXN0LnNpZGVfcGFuZWwgPSB7XG4gICAgICAgIGRlZmF1bHRfcGF0aDogcGFnZSxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbmZpZy5sb2dnZXIud2FybihcbiAgICAgICAgJ1NpZGUgcGFuZWwgbm90IHN1cHBvcnRlZCBieSBDaHJvbWl1bSB1c2luZyBNVjIuIHNpZGVfcGFuZWwuZGVmYXVsdF9wYXRoIHdhcyBub3QgYWRkZWQgdG8gdGhlIG1hbmlmZXN0JyxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGNvbnRlbnRTY3JpcHRzPy5sZW5ndGgpIHtcbiAgICAvLyBEb24ndCBhZGQgY29udGVudCBzY3JpcHRzIHRvIHRoZSBtYW5pZmVzdCBpbiBkZXYgbW9kZSBmb3IgTVYzIC0gdGhleSdyZSBtYW5hZ2VkIGFuZCByZWxvYWRlZFxuICAgIC8vIGF0IHJ1bnRpbWVcbiAgICBpZiAoY29uZmlnLmNvbW1hbmQgPT09ICdzZXJ2ZScgJiYgY29uZmlnLm1hbmlmZXN0VmVyc2lvbiA9PT0gMykge1xuICAgICAgY29uc3QgaG9zdFBlcm1pc3Npb25zID0gbmV3IFNldDxzdHJpbmc+KG1hbmlmZXN0Lmhvc3RfcGVybWlzc2lvbnMgPz8gW10pO1xuICAgICAgY29udGVudFNjcmlwdHMuZm9yRWFjaCgoc2NyaXB0KSA9PiB7XG4gICAgICAgIHNjcmlwdC5vcHRpb25zLm1hdGNoZXMuZm9yRWFjaCgobWF0Y2hQYXR0ZXJuKSA9PiB7XG4gICAgICAgICAgaG9zdFBlcm1pc3Npb25zLmFkZChtYXRjaFBhdHRlcm4pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgaG9zdFBlcm1pc3Npb25zLmZvckVhY2goKHBlcm1pc3Npb24pID0+XG4gICAgICAgIGFkZEhvc3RQZXJtaXNzaW9uKG1hbmlmZXN0LCBwZXJtaXNzaW9uKSxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGhhc2hUb0VudHJ5cG9pbnRzTWFwID0gY29udGVudFNjcmlwdHMucmVkdWNlKChtYXAsIHNjcmlwdCkgPT4ge1xuICAgICAgICBjb25zdCBoYXNoID0gaGFzaENvbnRlbnRTY3JpcHRPcHRpb25zKHNjcmlwdC5vcHRpb25zKTtcbiAgICAgICAgaWYgKG1hcC5oYXMoaGFzaCkpIG1hcC5nZXQoaGFzaCk/LnB1c2goc2NyaXB0KTtcbiAgICAgICAgZWxzZSBtYXAuc2V0KGhhc2gsIFtzY3JpcHRdKTtcbiAgICAgICAgcmV0dXJuIG1hcDtcbiAgICAgIH0sIG5ldyBNYXA8c3RyaW5nLCBDb250ZW50U2NyaXB0RW50cnlwb2ludFtdPigpKTtcblxuICAgICAgY29uc3QgbmV3Q29udGVudFNjcmlwdHMgPSBBcnJheS5mcm9tKGhhc2hUb0VudHJ5cG9pbnRzTWFwLmVudHJpZXMoKSkubWFwKFxuICAgICAgICAoWywgc2NyaXB0c10pID0+ICh7XG4gICAgICAgICAgLi4ubWFwV3h0T3B0aW9uc1RvQ29udGVudFNjcmlwdChzY3JpcHRzWzBdLm9wdGlvbnMpLFxuICAgICAgICAgIC8vIFRPT0Q6IFNvcnRpbmcgY3NzIGFuZCBqcyBhcnJheXMgaGVyZSBzbyB3ZSBnZXQgY29uc2lzdGVudCB0ZXN0IHJlc3VsdHMuLi4gYnV0IHdlXG4gICAgICAgICAgLy8gc2hvdWxkbid0IGhhdmUgdG8uIFdoZXJlIGlzIHRoZSBpbmNvbnNpc3RlbmN5IGNvbWluZyBmcm9tP1xuICAgICAgICAgIGNzczogZ2V0Q29udGVudFNjcmlwdENzc0ZpbGVzKHNjcmlwdHMsIGJ1aWxkT3V0cHV0KT8uc29ydCgpLFxuICAgICAgICAgIGpzOiBzY3JpcHRzXG4gICAgICAgICAgICAubWFwKChlbnRyeSkgPT5cbiAgICAgICAgICAgICAgZ2V0RW50cnlwb2ludEJ1bmRsZVBhdGgoZW50cnksIGNvbmZpZy5vdXREaXIsICcuanMnKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zb3J0KCksXG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICAgIGlmIChuZXdDb250ZW50U2NyaXB0cy5sZW5ndGggPj0gMCkge1xuICAgICAgICBtYW5pZmVzdC5jb250ZW50X3NjcmlwdHMgPz89IFtdO1xuICAgICAgICBtYW5pZmVzdC5jb250ZW50X3NjcmlwdHMucHVzaCguLi5uZXdDb250ZW50U2NyaXB0cyk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGRpc2NvdmVySWNvbnMoXG4gIGJ1aWxkT3V0cHV0OiBPbWl0PEJ1aWxkT3V0cHV0LCAnbWFuaWZlc3QnPixcbik6IE1hbmlmZXN0LldlYkV4dGVuc2lvbk1hbmlmZXN0WydpY29ucyddIHtcbiAgY29uc3QgaWNvbnM6IFtzdHJpbmcsIHN0cmluZ11bXSA9IFtdO1xuICAvLyBwcmV0dGllci1pZ25vcmVcbiAgLy8gI3JlZ2lvbiBzbmlwcGV0XG4gIGNvbnN0IGljb25SZWdleCA9IFtcbiAgICAvXmljb24tKFswLTldKylcXC4ocG5nfGJtcHxqcGVnfGpwZ3xpY298Z2lmKSQvLCAgICAgICAgICAgICAvLyBpY29uLTE2LnBuZ1xuICAgIC9eaWNvbi0oWzAtOV0rKXhbMC05XStcXC4ocG5nfGJtcHxqcGVnfGpwZ3xpY298Z2lmKSQvLCAgICAgIC8vIGljb24tMTZ4MTYucG5nXG4gICAgL15pY29uQChbMC05XSspd1xcLihwbmd8Ym1wfGpwZWd8anBnfGljb3xnaWYpJC8sICAgICAgICAgICAgLy8gaWNvbkAxNncucG5nXG4gICAgL15pY29uQChbMC05XSspaFxcLihwbmd8Ym1wfGpwZWd8anBnfGljb3xnaWYpJC8sICAgICAgICAgICAgLy8gaWNvbkAxNmgucG5nXG4gICAgL15pY29uQChbMC05XSspXFwuKHBuZ3xibXB8anBlZ3xqcGd8aWNvfGdpZikkLywgICAgICAgICAgICAgLy8gaWNvbkAxNi5wbmdcbiAgICAvXmljb25bXFwvXFxcXF0oWzAtOV0rKVxcLihwbmd8Ym1wfGpwZWd8anBnfGljb3xnaWYpJC8sICAgICAgICAvLyBpY29uLzE2LnBuZ1xuICAgIC9eaWNvbltcXC9cXFxcXShbMC05XSspeFswLTldK1xcLihwbmd8Ym1wfGpwZWd8anBnfGljb3xnaWYpJC8sIC8vIGljb24vMTZ4MTYucG5nXG4gIF07XG4gIC8vICNlbmRyZWdpb24gc25pcHBldFxuXG4gIGJ1aWxkT3V0cHV0LnB1YmxpY0Fzc2V0cy5mb3JFYWNoKChhc3NldCkgPT4ge1xuICAgIGxldCBzaXplOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgZm9yIChjb25zdCByZWdleCBvZiBpY29uUmVnZXgpIHtcbiAgICAgIGNvbnN0IG1hdGNoID0gYXNzZXQuZmlsZU5hbWUubWF0Y2gocmVnZXgpO1xuICAgICAgaWYgKG1hdGNoPy5bMV0gIT0gbnVsbCkge1xuICAgICAgICBzaXplID0gbWF0Y2hbMV07XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoc2l6ZSA9PSBudWxsKSByZXR1cm47XG5cbiAgICBpY29ucy5wdXNoKFtzaXplLCBub3JtYWxpemVQYXRoKGFzc2V0LmZpbGVOYW1lKV0pO1xuICB9KTtcblxuICByZXR1cm4gaWNvbnMubGVuZ3RoID4gMCA/IE9iamVjdC5mcm9tRW50cmllcyhpY29ucykgOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGFkZERldk1vZGVDc3AoXG4gIG1hbmlmZXN0OiBNYW5pZmVzdC5XZWJFeHRlbnNpb25NYW5pZmVzdCxcbiAgY29uZmlnOiBJbnRlcm5hbENvbmZpZyxcbik6IHZvaWQge1xuICBjb25zdCBwZXJtaXNzaW9uID0gYGh0dHA6Ly8ke2NvbmZpZy5zZXJ2ZXI/Lmhvc3RuYW1lID8/ICcnfS8qYDtcbiAgY29uc3QgYWxsb3dlZENzcCA9IGNvbmZpZy5zZXJ2ZXI/Lm9yaWdpbiA/PyAnaHR0cDovL2xvY2FsaG9zdDoqJztcblxuICBpZiAobWFuaWZlc3QubWFuaWZlc3RfdmVyc2lvbiA9PT0gMykge1xuICAgIGFkZEhvc3RQZXJtaXNzaW9uKG1hbmlmZXN0LCBwZXJtaXNzaW9uKTtcbiAgfSBlbHNlIHtcbiAgICBhZGRQZXJtaXNzaW9uKG1hbmlmZXN0LCBwZXJtaXNzaW9uKTtcbiAgfVxuXG4gIGNvbnN0IGNzcCA9IG5ldyBDb250ZW50U2VjdXJpdHlQb2xpY3koXG4gICAgbWFuaWZlc3QubWFuaWZlc3RfdmVyc2lvbiA9PT0gM1xuICAgICAgPyAvLyBAdHMtZXhwZWN0LWVycm9yOiBleHRlbnNpb25fcGFnZXMgaXMgbm90IHR5cGVkXG4gICAgICAgIG1hbmlmZXN0LmNvbnRlbnRfc2VjdXJpdHlfcG9saWN5Py5leHRlbnNpb25fcGFnZXMgPz9cbiAgICAgICAgXCJzY3JpcHQtc3JjICdzZWxmJyAnd2FzbS11bnNhZmUtZXZhbCc7IG9iamVjdC1zcmMgJ3NlbGYnO1wiIC8vIGRlZmF1bHQgQ1NQIGZvciBNVjNcbiAgICAgIDogbWFuaWZlc3QuY29udGVudF9zZWN1cml0eV9wb2xpY3kgPz9cbiAgICAgICAgXCJzY3JpcHQtc3JjICdzZWxmJzsgb2JqZWN0LXNyYyAnc2VsZic7XCIsIC8vIGRlZmF1bHQgQ1NQIGZvciBNVjJcbiAgKTtcblxuICBpZiAoY29uZmlnLnNlcnZlcikgY3NwLmFkZCgnc2NyaXB0LXNyYycsIGFsbG93ZWRDc3ApO1xuXG4gIGlmIChtYW5pZmVzdC5tYW5pZmVzdF92ZXJzaW9uID09PSAzKSB7XG4gICAgbWFuaWZlc3QuY29udGVudF9zZWN1cml0eV9wb2xpY3kgPz89IHt9O1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3I6IGV4dGVuc2lvbl9wYWdlcyBpcyBub3QgdHlwZWRcbiAgICBtYW5pZmVzdC5jb250ZW50X3NlY3VyaXR5X3BvbGljeS5leHRlbnNpb25fcGFnZXMgPSBjc3AudG9TdHJpbmcoKTtcbiAgfSBlbHNlIHtcbiAgICBtYW5pZmVzdC5jb250ZW50X3NlY3VyaXR5X3BvbGljeSA9IGNzcC50b1N0cmluZygpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFkZERldk1vZGVQZXJtaXNzaW9ucyhcbiAgbWFuaWZlc3Q6IE1hbmlmZXN0LldlYkV4dGVuc2lvbk1hbmlmZXN0LFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuKSB7XG4gIC8vIEZvciByZWxvYWRpbmcgdGhlIHBhZ2VcbiAgYWRkUGVybWlzc2lvbihtYW5pZmVzdCwgJ3RhYnMnKTtcblxuICAvLyBGb3IgcmVnaXN0ZXJpbmcgY29udGVudCBzY3JpcHRzXG4gIGlmIChjb25maWcubWFuaWZlc3RWZXJzaW9uID09PSAzKSBhZGRQZXJtaXNzaW9uKG1hbmlmZXN0LCAnc2NyaXB0aW5nJyk7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYnVuZGxlIHBhdGhzIHRvIENTUyBmaWxlcyBhc3NvY2lhdGVkIHdpdGggYSBsaXN0IG9mIGNvbnRlbnQgc2NyaXB0cywgb3IgdW5kZWZpbmVkIGlmXG4gKiB0aGVyZSBpcyBubyBhc3NvY2lhdGVkIENTUy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENvbnRlbnRTY3JpcHRDc3NGaWxlcyhcbiAgY29udGVudFNjcmlwdHM6IENvbnRlbnRTY3JpcHRFbnRyeXBvaW50W10sXG4gIGJ1aWxkT3V0cHV0OiBPbWl0PEJ1aWxkT3V0cHV0LCAnbWFuaWZlc3QnPixcbik6IHN0cmluZ1tdIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgY3NzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGNvbnN0IGFsbENodW5rcyA9IGJ1aWxkT3V0cHV0LnN0ZXBzLmZsYXRNYXAoKHN0ZXApID0+IHN0ZXAuY2h1bmtzKTtcblxuICBjb250ZW50U2NyaXB0cy5mb3JFYWNoKChzY3JpcHQpID0+IHtcbiAgICAvLyBUT0RPOiBvcHRpbWl6ZSBhbmQgcmVtb3ZlIGxvb3Agd2l0aCBhIG1hcFxuICAgIGNvbnN0IHJlbGF0ZWRDc3MgPSBhbGxDaHVua3MuZmluZChcbiAgICAgIChjaHVuaykgPT4gY2h1bmsuZmlsZU5hbWUgPT09IGBhc3NldHMvJHtzY3JpcHQubmFtZX0uY3NzYCxcbiAgICApO1xuICAgIGlmIChyZWxhdGVkQ3NzKSBjc3MucHVzaChyZWxhdGVkQ3NzLmZpbGVOYW1lKTtcbiAgfSk7XG5cbiAgaWYgKGNzcy5sZW5ndGggPiAwKSByZXR1cm4gY3NzO1xuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBhZGRQZXJtaXNzaW9uKFxuICBtYW5pZmVzdDogTWFuaWZlc3QuV2ViRXh0ZW5zaW9uTWFuaWZlc3QsXG4gIHBlcm1pc3Npb246IHN0cmluZyxcbik6IHZvaWQge1xuICBtYW5pZmVzdC5wZXJtaXNzaW9ucyA/Pz0gW107XG4gIGlmIChtYW5pZmVzdC5wZXJtaXNzaW9ucy5pbmNsdWRlcyhwZXJtaXNzaW9uKSkgcmV0dXJuO1xuICBtYW5pZmVzdC5wZXJtaXNzaW9ucy5wdXNoKHBlcm1pc3Npb24pO1xufVxuXG5mdW5jdGlvbiBhZGRIb3N0UGVybWlzc2lvbihcbiAgbWFuaWZlc3Q6IE1hbmlmZXN0LldlYkV4dGVuc2lvbk1hbmlmZXN0LFxuICBob3N0UGVybWlzc2lvbjogc3RyaW5nLFxuKTogdm9pZCB7XG4gIG1hbmlmZXN0Lmhvc3RfcGVybWlzc2lvbnMgPz89IFtdO1xuICBpZiAobWFuaWZlc3QuaG9zdF9wZXJtaXNzaW9ucy5pbmNsdWRlcyhob3N0UGVybWlzc2lvbikpIHJldHVybjtcbiAgbWFuaWZlc3QuaG9zdF9wZXJtaXNzaW9ucy5wdXNoKGhvc3RQZXJtaXNzaW9uKTtcbn1cbiIsICIvKipcbiAqIERpcmVjdGl2ZSBuYW1lcyB0aGF0IG1ha2UgdXAgQ1NQcy4gVGhlcmUgYXJlIG1vcmUsIHRoaXMgaXMgYWxsIEkgbmVlZCBmb3IgdGhlIHBsdWdpbi5cbiAqL1xuZXhwb3J0IHR5cGUgQ3NwRGlyZWN0aXZlID0gJ2RlZmF1bHQtc3JjJyB8ICdzY3JpcHQtc3JjJyB8ICdvYmplY3Qtc3JjJztcblxuZXhwb3J0IGNsYXNzIENvbnRlbnRTZWN1cml0eVBvbGljeSB7XG4gIHByaXZhdGUgc3RhdGljIERJUkVDVElWRV9PUkRFUjogUmVjb3JkPHN0cmluZywgbnVtYmVyIHwgdW5kZWZpbmVkPiA9IHtcbiAgICAnZGVmYXVsdC1zcmMnOiAwLFxuICAgICdzY3JpcHQtc3JjJzogMSxcbiAgICAnb2JqZWN0LXNyYyc6IDIsXG4gIH07XG5cbiAgZGF0YTogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+O1xuXG4gIGNvbnN0cnVjdG9yKGNzcD86IHN0cmluZykge1xuICAgIGlmIChjc3ApIHtcbiAgICAgIGNvbnN0IHNlY3Rpb25zID0gY3NwLnNwbGl0KCc7JykubWFwKChzZWN0aW9uKSA9PiBzZWN0aW9uLnRyaW0oKSk7XG4gICAgICB0aGlzLmRhdGEgPSBzZWN0aW9ucy5yZWR1Y2U8UmVjb3JkPHN0cmluZywgc3RyaW5nW10+PigoZGF0YSwgc2VjdGlvbikgPT4ge1xuICAgICAgICBjb25zdCBba2V5LCAuLi52YWx1ZXNdID0gc2VjdGlvbi5zcGxpdCgnICcpLm1hcCgoaXRlbSkgPT4gaXRlbS50cmltKCkpO1xuICAgICAgICBpZiAoa2V5KSBkYXRhW2tleV0gPSB2YWx1ZXM7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgfSwge30pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRhdGEgPSB7fTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRW5zdXJlIGEgc2V0IG9mIHZhbHVlcyBhcmUgbGlzdGVkIHVuZGVyIGEgZGlyZWN0aXZlLlxuICAgKi9cbiAgYWRkKGRpcmVjdGl2ZTogQ3NwRGlyZWN0aXZlLCAuLi5uZXdWYWx1ZXM6IHN0cmluZ1tdKTogQ29udGVudFNlY3VyaXR5UG9saWN5IHtcbiAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLmRhdGFbZGlyZWN0aXZlXSA/PyBbXTtcbiAgICBuZXdWYWx1ZXMuZm9yRWFjaCgobmV3VmFsdWUpID0+IHtcbiAgICAgIGlmICghdmFsdWVzLmluY2x1ZGVzKG5ld1ZhbHVlKSkgdmFsdWVzLnB1c2gobmV3VmFsdWUpO1xuICAgIH0pO1xuICAgIHRoaXMuZGF0YVtkaXJlY3RpdmVdID0gdmFsdWVzO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICBjb25zdCBkaXJlY3RpdmVzID0gT2JqZWN0LmVudHJpZXModGhpcy5kYXRhKS5zb3J0KChbbF0sIFtyXSkgPT4ge1xuICAgICAgY29uc3QgbG8gPSBDb250ZW50U2VjdXJpdHlQb2xpY3kuRElSRUNUSVZFX09SREVSW2xdID8/IDI7XG4gICAgICBjb25zdCBybyA9IENvbnRlbnRTZWN1cml0eVBvbGljeS5ESVJFQ1RJVkVfT1JERVJbcl0gPz8gMjtcbiAgICAgIHJldHVybiBsbyAtIHJvO1xuICAgIH0pO1xuICAgIHJldHVybiBkaXJlY3RpdmVzLm1hcCgoZW50cnkpID0+IGVudHJ5LmZsYXQoKS5qb2luKCcgJykpLmpvaW4oJzsgJykgKyAnOyc7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBNYW5pZmVzdCB9IGZyb20gJ3dlYmV4dGVuc2lvbi1wb2x5ZmlsbCc7XG5pbXBvcnQgeyBDb250ZW50U2NyaXB0RW50cnlwb2ludCB9IGZyb20gJy4uL3R5cGVzJztcblxuLyoqXG4gKiBSZXR1cm5zIGEgdW5pcXVlIGFuZCBjb25zaXN0ZW50IHN0cmluZyBoYXNoIGJhc2VkIG9uIGEgY29udGVudCBzY3JpcHRzIG9wdGlvbnMuXG4gKlxuICogSXQgaXMgYWJsZSB0byByZWNvZ25pemUgZGVmYXVsdCB2YWx1ZXMsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNoQ29udGVudFNjcmlwdE9wdGlvbnMoXG4gIG9wdGlvbnM6IENvbnRlbnRTY3JpcHRFbnRyeXBvaW50WydvcHRpb25zJ10sXG4pOiBzdHJpbmcge1xuICBjb25zdCB3aXRoRGVmYXVsdHM6IENvbnRlbnRTY3JpcHRFbnRyeXBvaW50WydvcHRpb25zJ10gPSB7XG4gICAgZXhjbHVkZUdsb2JzOiBbXSxcbiAgICBleGNsdWRlTWF0Y2hlczogW10sXG4gICAgaW5jbHVkZUdsb2JzOiBbXSxcbiAgICBtYXRjaEFib3V0Qmxhbms6IGZhbHNlLFxuICAgIG1hdGNoT3JpZ2luQXNGYWxsYmFjazogZmFsc2UsXG4gICAgcnVuQXQ6ICdkb2N1bWVudF9pZGxlJyxcbiAgICBhbGxGcmFtZXM6IGZhbHNlLFxuICAgIHdvcmxkOiAnSVNPTEFURUQnLFxuICAgIC8vIFRPRE86IHN0cmlwIHVuZGVmaW5lZCBmaWVsZHMgZnJvbSBvcHRpb25zIG9iamVjdCB0byBpbXByb3ZlIGNvbnRlbnQgc2NyaXB0IGdyb3VwaW5nLlxuICAgIC4uLm9wdGlvbnMsXG4gIH07XG4gIHJldHVybiBKU09OLnN0cmluZ2lmeShcbiAgICBPYmplY3QuZW50cmllcyh3aXRoRGVmYXVsdHMpXG4gICAgICAvLyBTb3J0IGFueSBhcnJheXMgc28gdGhlaXIgdmFsdWVzIGFyZSBjb25zaXN0ZW50XG4gICAgICAubWFwPFtzdHJpbmcsIHVua25vd25dPigoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkgcmV0dXJuIFtrZXksIHZhbHVlLnNvcnQoKV07XG4gICAgICAgIGVsc2UgcmV0dXJuIFtrZXksIHZhbHVlXTtcbiAgICAgIH0pXG4gICAgICAvLyBTb3J0IGFsbCB0aGUgZmllbGRzIGFscGhhYmV0aWNhbGx5XG4gICAgICAuc29ydCgobCwgcikgPT4gbFswXS5sb2NhbGVDb21wYXJlKHJbMF0pKSxcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1hcFd4dE9wdGlvbnNUb0NvbnRlbnRTY3JpcHQoXG4gIG9wdGlvbnM6IENvbnRlbnRTY3JpcHRFbnRyeXBvaW50WydvcHRpb25zJ10sXG4pOiBPbWl0PE1hbmlmZXN0LkNvbnRlbnRTY3JpcHQsICdqcycgfCAnY3NzJz4ge1xuICByZXR1cm4ge1xuICAgIG1hdGNoZXM6IG9wdGlvbnMubWF0Y2hlcyxcbiAgICBhbGxfZnJhbWVzOiBvcHRpb25zLmFsbEZyYW1lcyxcbiAgICBtYXRjaF9hYm91dF9ibGFuazogb3B0aW9ucy5tYXRjaEFib3V0QmxhbmssXG4gICAgZXhjbHVkZV9nbG9iczogb3B0aW9ucy5leGNsdWRlR2xvYnMsXG4gICAgZXhjbHVkZV9tYXRjaGVzOiBvcHRpb25zLmV4Y2x1ZGVNYXRjaGVzLFxuICAgIGluY2x1ZGVfZ2xvYnM6IG9wdGlvbnMuaW5jbHVkZUdsb2JzLFxuICAgIHJ1bl9hdDogb3B0aW9ucy5ydW5BdCxcblxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3I6IHVudHlwZWQgY2hyb21lIG9wdGlvbnNcbiAgICBtYXRjaF9vcmlnaW5fYXNfZmFsbGJhY2s6IG9wdGlvbnMubWF0Y2hPcmlnaW5Bc0ZhbGxiYWNrLFxuICAgIHdvcmxkOiBvcHRpb25zLndvcmxkLFxuICB9O1xufVxuIiwgImltcG9ydCB7IHJlc29sdmUgfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgSW50ZXJuYWxDb25maWcgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnO1xuXG4vKipcbiAqIFJlYWQgdGhlIHByb2plY3QncyBwYWNrYWdlLmpzb24uXG4gKlxuICogVE9ETzogbG9vayBpbiByb290IGFuZCB1cCBkaXJlY3RvcmllcyB1bnRpbCBpdCdzIGZvdW5kXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRQYWNrYWdlSnNvbihcbiAgY29uZmlnOiBJbnRlcm5hbENvbmZpZyxcbik6IFByb21pc2U8UGFydGlhbDxSZWNvcmQ8c3RyaW5nLCBhbnk+PiB8IHVuZGVmaW5lZD4ge1xuICBjb25zdCBmaWxlID0gcmVzb2x2ZShjb25maWcucm9vdCwgJ3BhY2thZ2UuanNvbicpO1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBmcy5yZWFkSnNvbihmaWxlKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY29uZmlnLmxvZ2dlci5kZWJ1ZyhcbiAgICAgIGBGYWlsZWQgdG8gcmVhZCBwYWNrYWdlLmpzb24gYXQ6ICR7ZmlsZX0uIFJldHVybmluZyB1bmRlZmluZWQuYCxcbiAgICApO1xuICAgIHJldHVybiB7fTtcbiAgfVxufVxuIiwgImltcG9ydCB7IE1hbmlmZXN0IH0gZnJvbSAnd2ViZXh0ZW5zaW9uLXBvbHlmaWxsJztcbmltcG9ydCB7IEJ1aWxkT3V0cHV0IH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBidWlsZEVudHJ5cG9pbnRzIH0gZnJvbSAnLi9idWlsZC9idWlsZEVudHJ5cG9pbnRzJztcbmltcG9ydCB7IGZpbmRFbnRyeXBvaW50cyB9IGZyb20gJy4vYnVpbGQvZmluZEVudHJ5cG9pbnRzJztcbmltcG9ydCB7IGdlbmVyYXRlVHlwZXNEaXIgfSBmcm9tICcuL2J1aWxkL2dlbmVyYXRlVHlwZXNEaXInO1xuaW1wb3J0IHsgSW50ZXJuYWxDb25maWcsIEVudHJ5cG9pbnRHcm91cCB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgZ2VuZXJhdGVNYWluZmVzdCwgd3JpdGVNYW5pZmVzdCB9IGZyb20gJy4vdXRpbHMvbWFuaWZlc3QnO1xuaW1wb3J0IHBjIGZyb20gJ3BpY29jb2xvcnMnO1xuaW1wb3J0ICogYXMgdml0ZSBmcm9tICd2aXRlJztcbmltcG9ydCBmcyBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgeyBncm91cEVudHJ5cG9pbnRzIH0gZnJvbSAnLi91dGlscy9ncm91cEVudHJ5cG9pbnRzJztcbmltcG9ydCB7IGZvcm1hdER1cmF0aW9uIH0gZnJvbSAnLi91dGlscy9mb3JtYXREdXJhdGlvbic7XG5pbXBvcnQgeyBwcmludEJ1aWxkU3VtbWFyeSB9IGZyb20gJy4vbG9nL3ByaW50QnVpbGRTdW1tYXJ5JztcblxuLyoqXG4gKiBCdWlsZHMgdGhlIGV4dGVuc2lvbiBiYXNlZCBvbiBhbiBpbnRlcm5hbCBjb25maWcuXG4gKlxuICogVGhpcyBmdW5jdGlvbjpcbiAqIDEuIENsZWFucyB0aGUgb3V0cHV0IGRpcmVjdG9yeVxuICogMi4gRXhlY3V0ZXMgdGhlIHJlYnVpbGQgZnVuY3Rpb24gd2l0aCBhIGJsYW5rIHByZXZpb3VzIG91dHB1dCBzbyBldmVyeXRoaW5nIGlzIGJ1aWx0IChzZWVcbiAqICAgIGByZWJ1aWxkYCBmb3IgbW9yZSBkZXRhaWxzKVxuICogMy4gUHJpbnRzIHRoZSBzdW1tYXJ5XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBidWlsZEludGVybmFsKFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuKTogUHJvbWlzZTxCdWlsZE91dHB1dD4ge1xuICBjb25zdCB2ZXJiID0gY29uZmlnLmNvbW1hbmQgPT09ICdzZXJ2ZScgPyAnUHJlLXJlbmRlcmluZycgOiAnQnVpbGRpbmcnO1xuICBjb25zdCB0YXJnZXQgPSBgJHtjb25maWcuYnJvd3Nlcn0tbXYke2NvbmZpZy5tYW5pZmVzdFZlcnNpb259YDtcbiAgY29uZmlnLmxvZ2dlci5pbmZvKFxuICAgIGAke3ZlcmJ9ICR7cGMuY3lhbih0YXJnZXQpfSBmb3IgJHtwYy5jeWFuKGNvbmZpZy5tb2RlKX0gd2l0aCAke3BjLmdyZWVuKFxuICAgICAgYFZpdGUgJHt2aXRlLnZlcnNpb259YCxcbiAgICApfWAsXG4gICk7XG4gIGNvbnN0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG5cbiAgLy8gQ2xlYW51cFxuICBhd2FpdCBmcy5ybShjb25maWcub3V0RGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSk7XG4gIGF3YWl0IGZzLmVuc3VyZURpcihjb25maWcub3V0RGlyKTtcblxuICBjb25zdCBlbnRyeXBvaW50cyA9IGF3YWl0IGZpbmRFbnRyeXBvaW50cyhjb25maWcpO1xuICBjb25maWcubG9nZ2VyLmRlYnVnKCdEZXRlY3RlZCBlbnRyeXBvaW50czonLCBlbnRyeXBvaW50cyk7XG4gIGNvbnN0IGdyb3VwcyA9IGdyb3VwRW50cnlwb2ludHMoZW50cnlwb2ludHMpO1xuICBjb25zdCB7IG91dHB1dCB9ID0gYXdhaXQgcmVidWlsZChjb25maWcsIGdyb3VwcywgdW5kZWZpbmVkKTtcblxuICAvLyBQb3N0LWJ1aWxkXG4gIGF3YWl0IHByaW50QnVpbGRTdW1tYXJ5KFxuICAgIGNvbmZpZy5sb2dnZXIuc3VjY2VzcyxcbiAgICBgQnVpbHQgZXh0ZW5zaW9uIGluICR7Zm9ybWF0RHVyYXRpb24oRGF0ZS5ub3coKSAtIHN0YXJ0VGltZSl9YCxcbiAgICBvdXRwdXQsXG4gICAgY29uZmlnLFxuICApO1xuXG4gIHJldHVybiBvdXRwdXQ7XG59XG5cbi8qKlxuICogR2l2ZW4gYSBjb25maWd1cmF0aW9uLCBsaXN0IG9mIGVudHJ5cG9pbnRzLCBhbmQgYW4gZXhpc3RpbmcsIHBhcnRpYWwgb3V0cHV0LCBidWlsZCB0aGVcbiAqIGVudHJ5cG9pbnRzIGFuZCBtZXJnZSB0aGUgbmV3IG91dHB1dCB3aXRoIHRoZSBleGlzdGluZyBvdXRwdXQuXG4gKlxuICogVGhpcyBmdW5jdGlvbiB3aWxsOlxuICogMS4gR2VuZXJhdGUgdGhlIC53eHQgZGlyZWN0b3J5J3MgdHlwZXNcbiAqIDIuIEJ1aWxkIHRoZSBgZW50cnlwb2ludEdyb3Vwc2AgKGFuZCBjb3BpZXMgcHVibGljIGZpbGVzKVxuICogMy4gR2VuZXJhdGUgdGhlIGxhdGVzdCBtYW5pZmVzdCBmb3IgYWxsIGVudHJ5cG9pbnRzXG4gKiA0LiBXcml0ZSB0aGUgbmV3IG1hbmlmZXN0IHRvIHRoZSBmaWxlIHN5c3RlbVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVidWlsZChcbiAgY29uZmlnOiBJbnRlcm5hbENvbmZpZyxcbiAgZW50cnlwb2ludEdyb3VwczogRW50cnlwb2ludEdyb3VwW10sXG4gIGV4aXN0aW5nT3V0cHV0OiBPbWl0PEJ1aWxkT3V0cHV0LCAnbWFuaWZlc3QnPiA9IHtcbiAgICBzdGVwczogW10sXG4gICAgcHVibGljQXNzZXRzOiBbXSxcbiAgfSxcbik6IFByb21pc2U8eyBvdXRwdXQ6IEJ1aWxkT3V0cHV0OyBtYW5pZmVzdDogTWFuaWZlc3QuV2ViRXh0ZW5zaW9uTWFuaWZlc3QgfT4ge1xuICAvLyBVcGRhdGUgdHlwZXMgZGlyZWN0b3J5IHdpdGggbmV3IGZpbGVzIGFuZCB0eXBlc1xuICBjb25zdCBhbGxFbnRyeXBvaW50cyA9IGF3YWl0IGZpbmRFbnRyeXBvaW50cyhjb25maWcpO1xuICBhd2FpdCBnZW5lcmF0ZVR5cGVzRGlyKGFsbEVudHJ5cG9pbnRzLCBjb25maWcpLmNhdGNoKChlcnIpID0+IHtcbiAgICBjb25maWcubG9nZ2VyLndhcm4oJ0ZhaWxlZCB0byB1cGRhdGUgLnd4dCBkaXJlY3Rvcnk6JywgZXJyKTtcbiAgICAvLyBUaHJvdyB0aGUgZXJyb3IgaWYgZG9pbmcgYSByZWd1bGFyIGJ1aWxkLCBkb24ndCBmb3IgZGV2IG1vZGUuXG4gICAgaWYgKGNvbmZpZy5jb21tYW5kID09PSAnYnVpbGQnKSB0aHJvdyBlcnI7XG4gIH0pO1xuXG4gIC8vIEJ1aWxkIGFuZCBtZXJnZSB0aGUgb3V0cHV0c1xuICBjb25zdCBuZXdPdXRwdXQgPSBhd2FpdCBidWlsZEVudHJ5cG9pbnRzKGVudHJ5cG9pbnRHcm91cHMsIGNvbmZpZyk7XG4gIGNvbnN0IG1lcmdlZE91dHB1dDogT21pdDxCdWlsZE91dHB1dCwgJ21hbmlmZXN0Jz4gPSB7XG4gICAgc3RlcHM6IFsuLi5leGlzdGluZ091dHB1dC5zdGVwcywgLi4ubmV3T3V0cHV0LnN0ZXBzXSxcbiAgICBwdWJsaWNBc3NldHM6IFsuLi5leGlzdGluZ091dHB1dC5wdWJsaWNBc3NldHMsIC4uLm5ld091dHB1dC5wdWJsaWNBc3NldHNdLFxuICB9O1xuXG4gIGNvbnN0IG5ld01hbmlmZXN0ID0gYXdhaXQgZ2VuZXJhdGVNYWluZmVzdChcbiAgICBhbGxFbnRyeXBvaW50cyxcbiAgICBtZXJnZWRPdXRwdXQsXG4gICAgY29uZmlnLFxuICApO1xuICBjb25zdCBmaW5hbE91dHB1dDogQnVpbGRPdXRwdXQgPSB7XG4gICAgbWFuaWZlc3Q6IG5ld01hbmlmZXN0LFxuICAgIC4uLm5ld091dHB1dCxcbiAgfTtcblxuICAvLyBXcml0ZSBtYW5pZmVzdFxuICBhd2FpdCB3cml0ZU1hbmlmZXN0KG5ld01hbmlmZXN0LCBmaW5hbE91dHB1dCwgY29uZmlnKTtcblxuICByZXR1cm4ge1xuICAgIG91dHB1dDoge1xuICAgICAgbWFuaWZlc3Q6IG5ld01hbmlmZXN0LFxuICAgICAgc3RlcHM6IFsuLi5leGlzdGluZ091dHB1dC5zdGVwcywgLi4uZmluYWxPdXRwdXQuc3RlcHNdLFxuICAgICAgcHVibGljQXNzZXRzOiBbXG4gICAgICAgIC4uLmV4aXN0aW5nT3V0cHV0LnB1YmxpY0Fzc2V0cyxcbiAgICAgICAgLi4uZmluYWxPdXRwdXQucHVibGljQXNzZXRzLFxuICAgICAgXSxcbiAgICB9LFxuICAgIG1hbmlmZXN0OiBuZXdNYW5pZmVzdCxcbiAgfTtcbn1cbiIsICJpbXBvcnQgeyBFbnRyeXBvaW50IH0gZnJvbSAnLi4vLi4nO1xuaW1wb3J0IHsgRW50cnlwb2ludEdyb3VwIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG4vKipcbiAqIEVudHJ5cG9pbnRzIGNhbiBiZSBidWlsZCBpbiBncm91cHMuIEhUTUwgcGFnZXMgY2FuIGFsbCBiZSBidWlsdCB0b2dldGhlciBpbiBhIHNpbmdsZSBzdGVwLCB3aGlsZVxuICogY29udGVudCBzY3JpcHRzIG11c3QgYmUgYnVpbGQgaW5kaXZpZHVhbGx5LlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgZW50cnlwb2ludHMgcHV0IGludG8gdGhlc2UgdHlwZXMgb2YgZ3JvdXBzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JvdXBFbnRyeXBvaW50cyhlbnRyeXBvaW50czogRW50cnlwb2ludFtdKTogRW50cnlwb2ludEdyb3VwW10ge1xuICBjb25zdCBncm91cEluZGV4TWFwOiBQYXJ0aWFsPFJlY29yZDxHcm91cCwgbnVtYmVyPj4gPSB7fTtcbiAgY29uc3QgZ3JvdXBzOiBFbnRyeXBvaW50R3JvdXBbXSA9IFtdO1xuXG4gIGZvciAoY29uc3QgZW50cnkgb2YgZW50cnlwb2ludHMpIHtcbiAgICBjb25zdCBncm91cCA9IEVOVFJZX1RZUEVfVE9fR1JPVVBfTUFQW2VudHJ5LnR5cGVdO1xuICAgIGlmIChncm91cCA9PT0gJ25vLWdyb3VwJykge1xuICAgICAgZ3JvdXBzLnB1c2goZW50cnkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgZ3JvdXBJbmRleCA9IGdyb3VwSW5kZXhNYXBbZ3JvdXBdO1xuICAgICAgaWYgKGdyb3VwSW5kZXggPT0gbnVsbCkge1xuICAgICAgICBncm91cEluZGV4ID0gZ3JvdXBzLnB1c2goW10pIC0gMTtcbiAgICAgICAgZ3JvdXBJbmRleE1hcFtncm91cF0gPSBncm91cEluZGV4O1xuICAgICAgfVxuICAgICAgKGdyb3Vwc1tncm91cEluZGV4XSBhcyBFbnRyeXBvaW50W10pLnB1c2goZW50cnkpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBncm91cHM7XG59XG5cbmNvbnN0IEVOVFJZX1RZUEVfVE9fR1JPVVBfTUFQOiBSZWNvcmQ8RW50cnlwb2ludFsndHlwZSddLCBHcm91cD4gPSB7XG4gIHNhbmRib3g6ICdzYW5kYm94LXBhZ2UnLFxuXG4gIHBvcHVwOiAnZXh0ZW5zaW9uLXBhZ2UnLFxuICBuZXd0YWI6ICdleHRlbnNpb24tcGFnZScsXG4gIGhpc3Rvcnk6ICdleHRlbnNpb24tcGFnZScsXG4gIG9wdGlvbnM6ICdleHRlbnNpb24tcGFnZScsXG4gIGRldnRvb2xzOiAnZXh0ZW5zaW9uLXBhZ2UnLFxuICBib29rbWFya3M6ICdleHRlbnNpb24tcGFnZScsXG4gIHNpZGVwYW5lbDogJ2V4dGVuc2lvbi1wYWdlJyxcbiAgJ3VubGlzdGVkLXBhZ2UnOiAnZXh0ZW5zaW9uLXBhZ2UnLFxuXG4gIGJhY2tncm91bmQ6ICduby1ncm91cCcsXG4gICdjb250ZW50LXNjcmlwdCc6ICduby1ncm91cCcsXG4gICd1bmxpc3RlZC1zY3JpcHQnOiAnbm8tZ3JvdXAnLFxuICAndW5saXN0ZWQtc3R5bGUnOiAnbm8tZ3JvdXAnLFxuICAnY29udGVudC1zY3JpcHQtc3R5bGUnOiAnbm8tZ3JvdXAnLFxufTtcblxudHlwZSBHcm91cCA9ICdleHRlbnNpb24tcGFnZScgfCAnc2FuZGJveC1wYWdlJyB8ICduby1ncm91cCc7XG4iLCAiZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdER1cmF0aW9uKGR1cmF0aW9uOiBudW1iZXIpOiBzdHJpbmcge1xuICBpZiAoZHVyYXRpb24gPCAxZTMpIHJldHVybiBgJHtkdXJhdGlvbn0gbXNgO1xuICBpZiAoZHVyYXRpb24gPCAxMGUzKSByZXR1cm4gYCR7KGR1cmF0aW9uIC8gMWUzKS50b0ZpeGVkKDMpfSBzYDtcbiAgaWYgKGR1cmF0aW9uIDwgNjBlMykgcmV0dXJuIGAkeyhkdXJhdGlvbiAvIDFlMykudG9GaXhlZCgxKX0gc2A7XG4gIHJldHVybiBgJHsoZHVyYXRpb24gLyAxZTMpLnRvRml4ZWQoMCl9IHNgO1xufVxuIiwgImltcG9ydCB7IHJlc29sdmUgfSBmcm9tICdwYXRoJztcbmltcG9ydCB7IEJ1aWxkT3V0cHV0LCBJbnRlcm5hbENvbmZpZyB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IHByaW50RmlsZUxpc3QgfSBmcm9tICcuL3ByaW50RmlsZUxpc3QnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJpbnRCdWlsZFN1bW1hcnkoXG4gIGxvZzogKC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkLFxuICBoZWFkZXI6IHN0cmluZyxcbiAgb3V0cHV0OiBCdWlsZE91dHB1dCxcbiAgY29uZmlnOiBJbnRlcm5hbENvbmZpZyxcbikge1xuICBjb25zdCBjaHVua3MgPSBbXG4gICAgLi4ub3V0cHV0LnN0ZXBzLmZsYXRNYXAoKHN0ZXApID0+IHN0ZXAuY2h1bmtzKSxcbiAgICAuLi5vdXRwdXQucHVibGljQXNzZXRzLFxuICBdLnNvcnQoKGwsIHIpID0+IHtcbiAgICBjb25zdCBsV2VpZ2h0ID0gZ2V0Q2h1bmtTb3J0V2VpZ2h0KGwuZmlsZU5hbWUpO1xuICAgIGNvbnN0IHJXZWlnaHQgPSBnZXRDaHVua1NvcnRXZWlnaHQoci5maWxlTmFtZSk7XG4gICAgY29uc3QgZGlmZiA9IGxXZWlnaHQgLSByV2VpZ2h0O1xuICAgIGlmIChkaWZmICE9PSAwKSByZXR1cm4gZGlmZjtcbiAgICByZXR1cm4gbC5maWxlTmFtZS5sb2NhbGVDb21wYXJlKHIuZmlsZU5hbWUpO1xuICB9KTtcblxuICBjb25zdCBmaWxlcyA9IGNodW5rcy5tYXAoKGNodW5rKSA9PiByZXNvbHZlKGNvbmZpZy5vdXREaXIsIGNodW5rLmZpbGVOYW1lKSk7XG4gIGF3YWl0IHByaW50RmlsZUxpc3QobG9nLCBoZWFkZXIsIGNvbmZpZy5vdXREaXIsIGZpbGVzKTtcbn1cblxuY29uc3QgREVGQVVMVF9TT1JUX1dFSUdIVCA9IDEwMDtcbmNvbnN0IENIVU5LX1NPUlRfV0VJR0hUUzogUmVjb3JkPHN0cmluZywgbnVtYmVyPiA9IHtcbiAgJ21hbmlmZXN0Lmpzb24nOiAwLFxuICAnLmh0bWwnOiAxLFxuICAnLmpzLm1hcCc6IDIsXG4gICcuanMnOiAyLFxuICAnLmNzcyc6IDMsXG59O1xuZnVuY3Rpb24gZ2V0Q2h1bmtTb3J0V2VpZ2h0KGZpbGVuYW1lOiBzdHJpbmcpIHtcbiAgcmV0dXJuIChcbiAgICBPYmplY3QuZW50cmllcyhDSFVOS19TT1JUX1dFSUdIVFMpLmZpbmQoKFtrZXldKSA9PlxuICAgICAgZmlsZW5hbWUuZW5kc1dpdGgoa2V5KSxcbiAgICApPy5bMV0gPz8gREVGQVVMVF9TT1JUX1dFSUdIVFxuICApO1xufVxuIiwgImltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgcGMgZnJvbSAncGljb2NvbG9ycyc7XG5pbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnO1xuaW1wb3J0IHsgZmlsZXNpemUgfSBmcm9tICdmaWxlc2l6ZSc7XG5pbXBvcnQgeyBwcmludFRhYmxlIH0gZnJvbSAnLi9wcmludFRhYmxlJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByaW50RmlsZUxpc3QoXG4gIGxvZzogKG1lc3NhZ2U6IHN0cmluZykgPT4gdm9pZCxcbiAgaGVhZGVyOiBzdHJpbmcsXG4gIGJhc2VEaXI6IHN0cmluZyxcbiAgZmlsZXM6IHN0cmluZ1tdLFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGxldCB0b3RhbFNpemUgPSAwO1xuXG4gIGNvbnN0IGZpbGVSb3dzOiBzdHJpbmdbXVtdID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgZmlsZXMubWFwKGFzeW5jIChmaWxlLCBpKSA9PiB7XG4gICAgICBjb25zdCBwYXJ0cyA9IFtcbiAgICAgICAgcGF0aC5yZWxhdGl2ZShwcm9jZXNzLmN3ZCgpLCBiYXNlRGlyKSArIHBhdGguc2VwLFxuICAgICAgICBwYXRoLnJlbGF0aXZlKGJhc2VEaXIsIGZpbGUpLFxuICAgICAgXTtcbiAgICAgIGNvbnN0IHByZWZpeCA9IGkgPT09IGZpbGVzLmxlbmd0aCAtIDEgPyAnICBcdTI1MTRcdTI1MDAnIDogJyAgXHUyNTFDXHUyNTAwJztcbiAgICAgIGNvbnN0IGNvbG9yID0gZ2V0Q2h1bmtDb2xvcihmaWxlKTtcbiAgICAgIGNvbnN0IHN0YXRzID0gYXdhaXQgZnMubHN0YXQoZmlsZSk7XG4gICAgICB0b3RhbFNpemUgKz0gc3RhdHMuc2l6ZTtcbiAgICAgIGNvbnN0IHNpemUgPSBTdHJpbmcoZmlsZXNpemUoc3RhdHMuc2l6ZSkpO1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgYCR7cGMuZ3JheShwcmVmaXgpfSAke3BjLmRpbShwYXJ0c1swXSl9JHtjb2xvcihwYXJ0c1sxXSl9YCxcbiAgICAgICAgcGMuZGltKHNpemUpLFxuICAgICAgXTtcbiAgICB9KSxcbiAgKTtcblxuICBmaWxlUm93cy5wdXNoKFtgJHtwYy5jeWFuKCdcdTAzQTMgVG90YWwgc2l6ZTonKX0gJHtTdHJpbmcoZmlsZXNpemUodG90YWxTaXplKSl9YF0pO1xuXG4gIHByaW50VGFibGUobG9nLCBoZWFkZXIsIGZpbGVSb3dzKTtcbn1cblxuY29uc3QgREVGQVVMVF9DT0xPUiA9IHBjLmJsdWU7XG5jb25zdCBDSFVOS19DT0xPUlM6IFJlY29yZDxzdHJpbmcsICh0ZXh0OiBzdHJpbmcpID0+IHN0cmluZz4gPSB7XG4gICcuanMubWFwJzogcGMuZ3JheSxcbiAgJy5odG1sJzogcGMuZ3JlZW4sXG4gICcuY3NzJzogcGMubWFnZW50YSxcbiAgJy5qcyc6IHBjLmN5YW4sXG4gICcuemlwJzogcGMueWVsbG93LFxufTtcbmZ1bmN0aW9uIGdldENodW5rQ29sb3IoZmlsZW5hbWU6IHN0cmluZykge1xuICByZXR1cm4gKFxuICAgIE9iamVjdC5lbnRyaWVzKENIVU5LX0NPTE9SUykuZmluZCgoW2tleV0pID0+IGZpbGVuYW1lLmVuZHNXaXRoKGtleSkpPy5bMV0gPz9cbiAgICBERUZBVUxUX0NPTE9SXG4gICk7XG59XG4iLCAiZXhwb3J0IGZ1bmN0aW9uIHByaW50VGFibGUoXG4gIGxvZzogKG1lc3NhZ2U6IHN0cmluZykgPT4gdm9pZCxcbiAgaGVhZGVyOiBzdHJpbmcsXG4gIHJvd3M6IHN0cmluZ1tdW10sXG4gIGdhcCA9IDIsXG4pOiB2b2lkIHtcbiAgaWYgKHJvd3MubGVuZ3RoID09PSAwKSByZXR1cm47XG5cbiAgY29uc3QgY29sdW1uV2lkdGhzID0gcm93cy5yZWR1Y2UoXG4gICAgKHdpZHRocywgcm93KSA9PiB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IE1hdGgubWF4KHdpZHRocy5sZW5ndGgsIHJvdy5sZW5ndGgpOyBpKyspIHtcbiAgICAgICAgd2lkdGhzW2ldID0gTWF0aC5tYXgocm93W2ldPy5sZW5ndGggPz8gMCwgd2lkdGhzW2ldID8/IDApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHdpZHRocztcbiAgICB9LFxuICAgIHJvd3NbMF0ubWFwKChjb2x1bW4pID0+IGNvbHVtbi5sZW5ndGgpLFxuICApO1xuXG4gIGxldCBzdHIgPSAnJztcbiAgcm93cy5mb3JFYWNoKChyb3csIGkpID0+IHtcbiAgICByb3cuZm9yRWFjaCgoY29sLCBqKSA9PiB7XG4gICAgICBzdHIgKz0gY29sLnBhZEVuZChjb2x1bW5XaWR0aHNbal0sICcgJyk7XG4gICAgICBpZiAoaiAhPT0gcm93Lmxlbmd0aCAtIDEpIHN0ciArPSAnJy5wYWRFbmQoZ2FwLCAnICcpO1xuICAgIH0pO1xuICAgIGlmIChpICE9PSByb3dzLmxlbmd0aCAtIDEpIHN0ciArPSAnXFxuJztcbiAgfSk7XG5cbiAgbG9nKGAke2hlYWRlcn1cXG4ke3N0cn1gKTtcbn1cbiIsICJpbXBvcnQge1xuICBCdWlsZFN0ZXBPdXRwdXQsXG4gIEVudHJ5cG9pbnRHcm91cCxcbiAgSW50ZXJuYWxDb25maWcsXG4gIFd4dERldlNlcnZlcixcbn0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgKiBhcyB2aXRlIGZyb20gJ3ZpdGUnO1xuaW1wb3J0IHsgU2NyaXB0aW5nIH0gZnJvbSAnd2ViZXh0ZW5zaW9uLXBvbHlmaWxsJztcbmltcG9ydCB7IGdldEVudHJ5cG9pbnRCdW5kbGVQYXRoIH0gZnJvbSAnLi91dGlscy9lbnRyeXBvaW50cyc7XG5pbXBvcnQgeyBnZXRDb250ZW50U2NyaXB0Q3NzRmlsZXMgfSBmcm9tICcuL3V0aWxzL21hbmlmZXN0JztcbmltcG9ydCB7IGNyZWF0ZVdlYkV4dFJ1bm5lciB9IGZyb20gJy4vcnVubmVycy9jcmVhdGVXZWJFeHRSdW5uZXInO1xuaW1wb3J0IHsgYnVpbGRJbnRlcm5hbCB9IGZyb20gJy4vYnVpbGQnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0U2VydmVySW5mbygpOiBQcm9taXNlPFNlcnZlckluZm8+IHtcbiAgY29uc3QgeyBkZWZhdWx0OiBnZXRQb3J0LCBwb3J0TnVtYmVycyB9ID0gYXdhaXQgaW1wb3J0KCdnZXQtcG9ydCcpO1xuICBjb25zdCBwb3J0ID0gYXdhaXQgZ2V0UG9ydCh7IHBvcnQ6IHBvcnROdW1iZXJzKDMwMDAsIDMwMTApIH0pO1xuICBjb25zdCBob3N0bmFtZSA9ICdsb2NhbGhvc3QnO1xuICBjb25zdCBvcmlnaW4gPSBgaHR0cDovLyR7aG9zdG5hbWV9OiR7cG9ydH1gO1xuICBjb25zdCBzZXJ2ZXJDb25maWc6IHZpdGUuSW5saW5lQ29uZmlnID0ge1xuICAgIHNlcnZlcjoge1xuICAgICAgb3JpZ2luLFxuICAgIH0sXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBwb3J0LFxuICAgIGhvc3RuYW1lLFxuICAgIG9yaWdpbixcbiAgICB2aXRlU2VydmVyQ29uZmlnOiBzZXJ2ZXJDb25maWcsXG4gIH07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZXR1cFNlcnZlcihcbiAgc2VydmVySW5mbzogU2VydmVySW5mbyxcbiAgY29uZmlnOiBJbnRlcm5hbENvbmZpZyxcbik6IFByb21pc2U8V3h0RGV2U2VydmVyPiB7XG4gIGNvbnN0IHJ1bm5lciA9IGNyZWF0ZVdlYkV4dFJ1bm5lcigpO1xuXG4gIGNvbnN0IHZpdGVTZXJ2ZXIgPSBhd2FpdCB2aXRlLmNyZWF0ZVNlcnZlcihcbiAgICB2aXRlLm1lcmdlQ29uZmlnKHNlcnZlckluZm8sIGNvbmZpZy52aXRlKSxcbiAgKTtcblxuICBjb25zdCBzdGFydCA9IGFzeW5jICgpID0+IHtcbiAgICBhd2FpdCB2aXRlU2VydmVyLmxpc3RlbihzZXJ2ZXIucG9ydCk7XG4gICAgY29uZmlnLmxvZ2dlci5zdWNjZXNzKGBTdGFydGVkIGRldiBzZXJ2ZXIgQCAke3NlcnZlckluZm8ub3JpZ2lufWApO1xuXG4gICAgc2VydmVyLmN1cnJlbnRPdXRwdXQgPSBhd2FpdCBidWlsZEludGVybmFsKGNvbmZpZyk7XG4gICAgY29uZmlnLmxvZ2dlci5pbmZvKCdPcGVuaW5nIGJyb3dzZXIuLi4nKTtcbiAgICBhd2FpdCBydW5uZXIub3BlbkJyb3dzZXIoY29uZmlnKTtcbiAgICBjb25maWcubG9nZ2VyLnN1Y2Nlc3MoJ09wZW5lZCEnKTtcbiAgfTtcblxuICBjb25zdCByZWxvYWRFeHRlbnNpb24gPSAoKSA9PiB7XG4gICAgdml0ZVNlcnZlci53cy5zZW5kKCd3eHQ6cmVsb2FkLWV4dGVuc2lvbicpO1xuICB9O1xuICBjb25zdCByZWxvYWRQYWdlID0gKHBhdGg6IHN0cmluZykgPT4ge1xuICAgIC8vIENhbid0IHVzZSBWaXRlJ3MgYnVpbHQtaW4gXCJmdWxsLXJlbG9hZFwiIGV2ZW50IGJlY2F1c2UgaXQgZG9lc24ndCBsaWtlIG91ciBwYXRocywgaXQgZXhwZWN0c1xuICAgIC8vIHBhdGhzIGVuZGluZyBpbiBcIi9pbmRleC5odG1sXCJcbiAgICB2aXRlU2VydmVyLndzLnNlbmQoJ3d4dDpyZWxvYWQtcGFnZScsIHBhdGgpO1xuICB9O1xuICBjb25zdCByZWxvYWRDb250ZW50U2NyaXB0ID0gKFxuICAgIGNvbnRlbnRTY3JpcHQ6IE9taXQ8U2NyaXB0aW5nLlJlZ2lzdGVyZWRDb250ZW50U2NyaXB0LCAnaWQnPixcbiAgKSA9PiB7XG4gICAgdml0ZVNlcnZlci53cy5zZW5kKCd3eHQ6cmVsb2FkLWNvbnRlbnQtc2NyaXB0JywgY29udGVudFNjcmlwdCk7XG4gIH07XG5cbiAgY29uc3Qgc2VydmVyOiBXeHREZXZTZXJ2ZXIgPSB7XG4gICAgLi4udml0ZVNlcnZlcixcbiAgICBzdGFydCxcbiAgICBjdXJyZW50T3V0cHV0OiB7XG4gICAgICBtYW5pZmVzdDoge1xuICAgICAgICBtYW5pZmVzdF92ZXJzaW9uOiAzLFxuICAgICAgICBuYW1lOiAnJyxcbiAgICAgICAgdmVyc2lvbjogJycsXG4gICAgICB9LFxuICAgICAgcHVibGljQXNzZXRzOiBbXSxcbiAgICAgIHN0ZXBzOiBbXSxcbiAgICB9LFxuICAgIHBvcnQ6IHNlcnZlckluZm8ucG9ydCxcbiAgICBob3N0bmFtZTogc2VydmVySW5mby5ob3N0bmFtZSxcbiAgICBvcmlnaW46IHNlcnZlckluZm8ub3JpZ2luLFxuICAgIHJlbG9hZEV4dGVuc2lvbixcbiAgICByZWxvYWRQYWdlLFxuICAgIHJlbG9hZENvbnRlbnRTY3JpcHQsXG4gIH07XG5cbiAgcmV0dXJuIHNlcnZlcjtcbn1cblxuLyoqXG4gKiBGcm9tIHRoZSBzZXJ2ZXIsIHRlbGwgdGhlIGNsaWVudCB0byByZWxvYWQgY29udGVudCBzY3JpcHRzIGZyb20gdGhlIHByb3ZpZGVkIGJ1aWxkIHN0ZXAgb3V0cHV0cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbG9hZENvbnRlbnRTY3JpcHRzKFxuICBzdGVwczogQnVpbGRTdGVwT3V0cHV0W10sXG4gIGNvbmZpZzogSW50ZXJuYWxDb25maWcsXG4gIHNlcnZlcjogV3h0RGV2U2VydmVyLFxuKSB7XG4gIGlmIChjb25maWcubWFuaWZlc3RWZXJzaW9uID09PSAzKSB7XG4gICAgc3RlcHMuZm9yRWFjaCgoc3RlcCkgPT4ge1xuICAgICAgY29uc3QgZW50cnkgPSBzdGVwLmVudHJ5cG9pbnRzO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZW50cnkpIHx8IGVudHJ5LnR5cGUgIT09ICdjb250ZW50LXNjcmlwdCcpIHJldHVybjtcblxuICAgICAgY29uc3QganMgPSBbZ2V0RW50cnlwb2ludEJ1bmRsZVBhdGgoZW50cnksIGNvbmZpZy5vdXREaXIsICcuanMnKV07XG4gICAgICBjb25zdCBjc3MgPSBnZXRDb250ZW50U2NyaXB0Q3NzRmlsZXMoW2VudHJ5XSwgc2VydmVyLmN1cnJlbnRPdXRwdXQpO1xuXG4gICAgICBzZXJ2ZXIucmVsb2FkQ29udGVudFNjcmlwdCh7XG4gICAgICAgIC4uLmVudHJ5Lm9wdGlvbnMsXG4gICAgICAgIGpzLFxuICAgICAgICBjc3MsXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBzZXJ2ZXIucmVsb2FkRXh0ZW5zaW9uKCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbG9hZEh0bWxQYWdlcyhcbiAgZ3JvdXBzOiBFbnRyeXBvaW50R3JvdXBbXSxcbiAgc2VydmVyOiBXeHREZXZTZXJ2ZXIsXG4gIGNvbmZpZzogSW50ZXJuYWxDb25maWcsXG4pIHtcbiAgZ3JvdXBzLmZsYXQoKS5mb3JFYWNoKChlbnRyeSkgPT4ge1xuICAgIGNvbnN0IHBhdGggPSBnZXRFbnRyeXBvaW50QnVuZGxlUGF0aChlbnRyeSwgY29uZmlnLm91dERpciwgJy5odG1sJyk7XG4gICAgc2VydmVyLnJlbG9hZFBhZ2UocGF0aCk7XG4gIH0pO1xufVxuXG5pbnRlcmZhY2UgU2VydmVySW5mbyB7XG4gIHBvcnQ6IG51bWJlcjtcbiAgaG9zdG5hbWU6IHN0cmluZztcbiAgb3JpZ2luOiBzdHJpbmc7XG4gIHZpdGVTZXJ2ZXJDb25maWc6IHZpdGUuSW5saW5lQ29uZmlnO1xufVxuIiwgImltcG9ydCB0eXBlIHsgV2ViRXh0UnVuSW5zdGFuY2UgfSBmcm9tICd3ZWItZXh0LXJ1bic7XG5pbXBvcnQgeyBFeHRlbnNpb25SdW5uZXIgfSBmcm9tICcuL0V4dGVuc2lvblJ1bm5lcic7XG5cbi8qKlxuICogQ3JlYXRlIGFuIGBFeHRlbnNpb25SdW5uZXJgIGJhY2tlZCBieSBgd2ViLWV4dGAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVXZWJFeHRSdW5uZXIoKTogRXh0ZW5zaW9uUnVubmVyIHtcbiAgbGV0IHJ1bm5lcjogV2ViRXh0UnVuSW5zdGFuY2UgfCB1bmRlZmluZWQ7XG5cbiAgcmV0dXJuIHtcbiAgICBhc3luYyBvcGVuQnJvd3Nlcihjb25maWcpIHtcbiAgICAgIGlmIChjb25maWcuYnJvd3NlciA9PT0gJ3NhZmFyaScpIHtcbiAgICAgICAgY29uZmlnLmxvZ2dlci53YXJuKCdDYW5ub3Qgb3BlbiBzYWZhcmkgYXV0b21hdGljYWxseS4nKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBVc2UgdGhlIHBsdWdpbidzIGxvZ2dlciBpbnN0ZWFkIG9mIHdlYi1leHQncyBidWlsdC1pbiBvbmUuXG4gICAgICBjb25zdCB3ZWJFeHRMb2dnZXIgPSBhd2FpdCBpbXBvcnQoJ3dlYi1leHQtcnVuL3V0aWwvbG9nZ2VyJyk7XG4gICAgICB3ZWJFeHRMb2dnZXIuY29uc29sZVN0cmVhbS53cml0ZSA9ICh7IGxldmVsLCBtc2csIG5hbWUgfSkgPT4ge1xuICAgICAgICBpZiAobGV2ZWwgPj0gRVJST1JfTE9HX0xFVkVMKSBjb25maWcubG9nZ2VyLmVycm9yKG5hbWUsIG1zZyk7XG4gICAgICAgIGlmIChsZXZlbCA+PSBXQVJOX0xPR19MRVZFTCkgY29uZmlnLmxvZ2dlci53YXJuKG1zZyk7XG4gICAgICB9O1xuXG4gICAgICBjb25zdCB3eHRVc2VyQ29uZmlnID0gY29uZmlnLnJ1bm5lckNvbmZpZy5jb25maWc7XG4gICAgICBjb25zdCB1c2VyQ29uZmlnID0ge1xuICAgICAgICBjb25zb2xlOiB3eHRVc2VyQ29uZmlnPy5vcGVuQ29uc29sZSxcbiAgICAgICAgZGV2dG9vbHM6IHd4dFVzZXJDb25maWc/Lm9wZW5EZXZ0b29scyxcbiAgICAgICAgc3RhcnRVcmw6IHd4dFVzZXJDb25maWc/LnN0YXJ0VXJscyxcbiAgICAgICAgLi4uKGNvbmZpZy5icm93c2VyID09PSAnZmlyZWZveCdcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgZmlyZWZveDogd3h0VXNlckNvbmZpZz8uYmluYXJpZXM/LmZpcmVmb3gsXG4gICAgICAgICAgICAgIGZpcmVmb3hQcm9maWxlOiB3eHRVc2VyQ29uZmlnPy5maXJlZm94UHJvZmlsZSxcbiAgICAgICAgICAgICAgcHJlZnM6IHd4dFVzZXJDb25maWc/LmZpcmVmb3hQcmVmcyxcbiAgICAgICAgICAgICAgYXJnczogd3h0VXNlckNvbmZpZz8uZmlyZWZveEFyZ3MsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiB7XG4gICAgICAgICAgICAgIGNocm9taXVtQmluYXJ5OiB3eHRVc2VyQ29uZmlnPy5iaW5hcmllcz8uW2NvbmZpZy5icm93c2VyXSxcbiAgICAgICAgICAgICAgY2hyb21pdW1Qcm9maWxlOiB3eHRVc2VyQ29uZmlnPy5jaHJvbWl1bVByb2ZpbGUsXG4gICAgICAgICAgICAgIGFyZ3M6IHd4dFVzZXJDb25maWc/LmNocm9taXVtQXJncyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgZmluYWxDb25maWcgPSB7XG4gICAgICAgIC4uLnVzZXJDb25maWcsXG4gICAgICAgIHRhcmdldDogY29uZmlnLmJyb3dzZXIgPT09ICdmaXJlZm94JyA/ICdmaXJlZm94LWRlc2t0b3AnIDogJ2Nocm9taXVtJyxcbiAgICAgICAgc291cmNlRGlyOiBjb25maWcub3V0RGlyLFxuICAgICAgICAvLyBXWFQgaGFuZGxlcyByZWxvYWRzLCBzbyBkaXNhYmxlIGF1dG8tcmVsb2FkIGJlaGF2aW9ycyBpbiB3ZWItZXh0XG4gICAgICAgIG5vUmVsb2FkOiB0cnVlLFxuICAgICAgICBub0lucHV0OiB0cnVlLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgIC8vIERvbid0IGNhbGwgYHByb2Nlc3MuZXhpdCgwKWAgYWZ0ZXIgc3RhcnRpbmcgd2ViLWV4dFxuICAgICAgICBzaG91bGRFeGl0UHJvZ3JhbTogZmFsc2UsXG4gICAgICB9O1xuICAgICAgY29uZmlnLmxvZ2dlci5kZWJ1Zygnd2ViLWV4dCBjb25maWc6JywgZmluYWxDb25maWcpO1xuICAgICAgY29uZmlnLmxvZ2dlci5kZWJ1Zygnd2ViLWV4dCBvcHRpb25zOicsIG9wdGlvbnMpO1xuXG4gICAgICBjb25zdCB3ZWJFeHQgPSBhd2FpdCBpbXBvcnQoJ3dlYi1leHQtcnVuJyk7XG4gICAgICBydW5uZXIgPSBhd2FpdCB3ZWJFeHQuZGVmYXVsdC5jbWQucnVuKGZpbmFsQ29uZmlnLCBvcHRpb25zKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2xvc2VCcm93c2VyKCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJ1bm5lcj8uZXhpdCgpO1xuICAgIH0sXG4gIH07XG59XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3dlYi1leHQvYmxvYi9lMzdlNjBhMjczODQ3OGY1MTJmMTI1NWM1MzcxMzMzMjFmMzAxNzcxL3NyYy91dGlsL2xvZ2dlci5qcyNMMTJcbmNvbnN0IFdBUk5fTE9HX0xFVkVMID0gNDA7XG5jb25zdCBFUlJPUl9MT0dfTEVWRUwgPSA1MDtcbiIsICJpbXBvcnQgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IGdsb2IgZnJvbSAnZmFzdC1nbG9iJztcbmltcG9ydCBmcyBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgeyBjb25zb2xhIH0gZnJvbSAnY29uc29sYSc7XG5pbXBvcnQgcGMgZnJvbSAncGljb2NvbG9ycyc7XG5cbi8qKlxuICogUmVtb3ZlIGdlbmVyYXRlZC90ZW1wIGZpbGVzIGZyb20gdGhlIGRpcmVjdG9yeS5cbiAqXG4gKiBAcGFyYW0gcm9vdCBUaGUgZGlyZWN0b3J5IHRvIGxvb2sgZm9yIGdlbmVyYXRlZC90ZW1wIGZpbGVzIGluLiBEZWZhdWx0cyB0byBgcHJvY2Vzcy5jd2QoKWAuIENhbiBiZSByZWxhdGl2ZSB0byBgcHJvY2Vzcy5jd2QoKWAgb3IgYWJzb2x1dGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjbGVhbihyb290ID0gcHJvY2Vzcy5jd2QoKSkge1xuICBjb25zb2xhLmluZm8oJ0NsZWFuaW5nIFByb2plY3QnKTtcblxuICBjb25zdCB0ZW1wRGlycyA9IFtcbiAgICAnbm9kZV9tb2R1bGVzLy52aXRlJyxcbiAgICAnbm9kZV9tb2R1bGVzLy5jYWNoZScsXG4gICAgJyoqLy53eHQnLFxuICAgICcub3V0cHV0LyonLFxuICBdO1xuICBjb25zb2xhLmRlYnVnKCdMb29raW5nIGZvcjonLCB0ZW1wRGlycy5tYXAocGMuY3lhbikuam9pbignLCAnKSk7XG4gIGNvbnN0IGRpcmVjdG9yaWVzID0gYXdhaXQgZ2xvYih0ZW1wRGlycywge1xuICAgIGN3ZDogcGF0aC5yZXNvbHZlKHJvb3QpLFxuICAgIGFic29sdXRlOiB0cnVlLFxuICAgIG9ubHlEaXJlY3RvcmllczogdHJ1ZSxcbiAgICBkZWVwOiAyLFxuICB9KTtcbiAgaWYgKGRpcmVjdG9yaWVzLmxlbmd0aCA9PT0gMCkge1xuICAgIGNvbnNvbGEuZGVidWcoJ05vIGdlbmVyYXRlZCBmaWxlcyBmb3VuZC4nKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zb2xhLmRlYnVnKFxuICAgICdGb3VuZDonLFxuICAgIGRpcmVjdG9yaWVzLm1hcCgoZGlyKSA9PiBwYy5jeWFuKHBhdGgucmVsYXRpdmUocm9vdCwgZGlyKSkpLmpvaW4oJywgJyksXG4gICk7XG4gIGZvciAoY29uc3QgZGlyZWN0b3J5IG9mIGRpcmVjdG9yaWVzKSB7XG4gICAgYXdhaXQgZnMucm0oZGlyZWN0b3J5LCB7IGZvcmNlOiB0cnVlLCByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgY29uc29sYS5kZWJ1ZygnRGVsZXRlZCAnICsgcGMuY3lhbihwYXRoLnJlbGF0aXZlKHJvb3QsIGRpcmVjdG9yeSkpKTtcbiAgfVxufVxuIiwgImltcG9ydCB7IExvZ0xldmVscywgY29uc29sYSB9IGZyb20gJ2NvbnNvbGEnO1xuaW1wb3J0IHsgcHJpbnRIZWFkZXIgfSBmcm9tICcuLi8uLi9jb3JlL2xvZy9wcmludEhlYWRlcic7XG5pbXBvcnQgeyBmb3JtYXREdXJhdGlvbiB9IGZyb20gJy4uLy4uL2NvcmUvdXRpbHMvZm9ybWF0RHVyYXRpb24nO1xuXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lQ29tbWFuZDxUQXJncyBleHRlbmRzIGFueVtdPihcbiAgY2I6ICguLi5hcmdzOiBUQXJncykgPT4gdm9pZCB8IGJvb2xlYW4gfCBQcm9taXNlPHZvaWQgfCBib29sZWFuPixcbiAgb3B0aW9ucz86IHtcbiAgICBkaXNhYmxlRmluaXNoZWRMb2c/OiBib29sZWFuO1xuICB9LFxuKSB7XG4gIHJldHVybiBhc3luYyAoLi4uYXJnczogVEFyZ3MpID0+IHtcbiAgICAvLyBFbmFibGUgY29uc29sYSdzIGRlYnVnIG1vZGUgZ2xvYmFsbHkgYXQgdGhlIHN0YXJ0IG9mIGFsbCBjb21tYW5kcyB3aGVuIHRoZSBgLS1kZWJ1Z2AgZmxhZyBpc1xuICAgIC8vIHBhc3NlZFxuICAgIGNvbnN0IGlzRGVidWcgPSAhIWFyZ3MuZmluZCgoYXJnKSA9PiBhcmc/LmRlYnVnKTtcbiAgICBpZiAoaXNEZWJ1Zykge1xuICAgICAgY29uc29sYS5sZXZlbCA9IExvZ0xldmVscy5kZWJ1ZztcbiAgICB9XG5cbiAgICBjb25zdCBzdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgIHRyeSB7XG4gICAgICBwcmludEhlYWRlcigpO1xuXG4gICAgICBjb25zdCBvbmdvaW5nID0gYXdhaXQgY2IoLi4uYXJncyk7XG5cbiAgICAgIGlmICghb25nb2luZyAmJiAhb3B0aW9ucz8uZGlzYWJsZUZpbmlzaGVkTG9nKVxuICAgICAgICBjb25zb2xhLnN1Y2Nlc3MoXG4gICAgICAgICAgYEZpbmlzaGVkIGluICR7Zm9ybWF0RHVyYXRpb24oRGF0ZS5ub3coKSAtIHN0YXJ0VGltZSl9YCxcbiAgICAgICAgKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGEuZmFpbChcbiAgICAgICAgYENvbW1hbmQgZmFpbGVkIGFmdGVyICR7Zm9ybWF0RHVyYXRpb24oRGF0ZS5ub3coKSAtIHN0YXJ0VGltZSl9YCxcbiAgICAgICk7XG4gICAgICBjb25zb2xhLmVycm9yKGVycik7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuICB9O1xufVxuIiwgImltcG9ydCBwYyBmcm9tICdwaWNvY29sb3JzJztcbmltcG9ydCB7IHZlcnNpb24gfSBmcm9tICcuLi8uLic7XG5pbXBvcnQgeyBjb25zb2xhIH0gZnJvbSAnY29uc29sYSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmludEhlYWRlcigpIHtcbiAgY29uc29sZS5sb2coKTtcbiAgY29uc29sYS5sb2coYCR7cGMuZ3JheSgnV1hUJyl9ICR7cGMuZ3JheShwYy5ib2xkKHZlcnNpb24pKX1gKTtcbn1cbiIsICJpbXBvcnQgKiBhcyB3eHQgZnJvbSAnLi4vLi4nO1xuaW1wb3J0IHsgZGVmaW5lQ29tbWFuZCB9IGZyb20gJy4uL3V0aWxzL2RlZmluZUNvbW1hbmQnO1xuXG5leHBvcnQgY29uc3QgYnVpbGQgPSBkZWZpbmVDb21tYW5kPFxuICBbXG4gICAgcm9vdDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgIGZsYWdzOiB7XG4gICAgICBtb2RlPzogc3RyaW5nO1xuICAgICAgY29uZmlnPzogc3RyaW5nO1xuICAgICAgYnJvd3Nlcj86IHd4dC5UYXJnZXRCcm93c2VyO1xuICAgICAgbXYzPzogYm9vbGVhbjtcbiAgICAgIG12Mj86IGJvb2xlYW47XG4gICAgICBkZWJ1Zz86IGJvb2xlYW47XG4gICAgfSxcbiAgXVxuPihhc3luYyAocm9vdCwgZmxhZ3MpID0+IHtcbiAgY29uc3QgY2xpQ29uZmlnOiB3eHQuSW5saW5lQ29uZmlnID0ge1xuICAgIHJvb3QsXG4gICAgbW9kZTogZmxhZ3MubW9kZSxcbiAgICBicm93c2VyOiBmbGFncy5icm93c2VyLFxuICAgIG1hbmlmZXN0VmVyc2lvbjogZmxhZ3MubXYzID8gMyA6IGZsYWdzLm12MiA/IDIgOiB1bmRlZmluZWQsXG4gICAgY29uZmlnRmlsZTogZmxhZ3MuY29uZmlnLFxuICAgIGRlYnVnOiBmbGFncy5kZWJ1ZyxcbiAgfTtcblxuICBhd2FpdCB3eHQuYnVpbGQoY2xpQ29uZmlnKTtcbn0pO1xuIiwgImltcG9ydCAqIGFzIHd4dCBmcm9tICcuLi8uLic7XG5pbXBvcnQgeyBkZWZpbmVDb21tYW5kIH0gZnJvbSAnLi4vdXRpbHMvZGVmaW5lQ29tbWFuZCc7XG5cbmV4cG9ydCBjb25zdCBkZXYgPSBkZWZpbmVDb21tYW5kPFxuICBbXG4gICAgcm9vdDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgIGZsYWdzOiB7XG4gICAgICBtb2RlPzogc3RyaW5nO1xuICAgICAgY29uZmlnPzogc3RyaW5nO1xuICAgICAgYnJvd3Nlcj86IHd4dC5UYXJnZXRCcm93c2VyO1xuICAgICAgbXYzPzogYm9vbGVhbjtcbiAgICAgIG12Mj86IGJvb2xlYW47XG4gICAgICBkZWJ1Zz86IGJvb2xlYW47XG4gICAgfSxcbiAgXVxuPihhc3luYyAocm9vdCwgZmxhZ3MpID0+IHtcbiAgY29uc3QgY2xpQ29uZmlnOiB3eHQuSW5saW5lQ29uZmlnID0ge1xuICAgIHJvb3QsXG4gICAgbW9kZTogZmxhZ3MubW9kZSxcbiAgICBicm93c2VyOiBmbGFncy5icm93c2VyLFxuICAgIG1hbmlmZXN0VmVyc2lvbjogZmxhZ3MubXYzID8gMyA6IGZsYWdzLm12MiA/IDIgOiB1bmRlZmluZWQsXG4gICAgY29uZmlnRmlsZTogZmxhZ3MuY29uZmlnLFxuICAgIGRlYnVnOiBmbGFncy5kZWJ1ZyxcbiAgfTtcblxuICBjb25zdCBzZXJ2ZXIgPSBhd2FpdCB3eHQuY3JlYXRlU2VydmVyKGNsaUNvbmZpZyk7XG4gIGF3YWl0IHNlcnZlci5zdGFydCgpO1xuXG4gIHJldHVybiB0cnVlO1xufSk7XG4iLCAiaW1wb3J0IHsgZGVmaW5lQ29tbWFuZCB9IGZyb20gJy4uL3V0aWxzL2RlZmluZUNvbW1hbmQnO1xuaW1wb3J0IHByb21wdHMgZnJvbSAncHJvbXB0cyc7XG5pbXBvcnQgb3JhIGZyb20gJ29yYSc7XG5pbXBvcnQgeyBjb25zb2xhIH0gZnJvbSAnY29uc29sYSc7XG5pbXBvcnQgeyBkb3dubG9hZFRlbXBsYXRlIH0gZnJvbSAnZ2lnZXQnO1xuaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgcGMgZnJvbSAncGljb2NvbG9ycyc7XG5pbXBvcnQgeyBGb3JtYXR0ZXIgfSBmcm9tICdwaWNvY29sb3JzL3R5cGVzJztcblxuZXhwb3J0IGNvbnN0IGluaXQgPSBkZWZpbmVDb21tYW5kPFxuICBbXG4gICAgZGlyZWN0b3J5OiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgb3B0aW9uczogeyB0ZW1wbGF0ZT86IHN0cmluZzsgcG0/OiBzdHJpbmc7IGRlYnVnPzogYm9vbGVhbiB9LFxuICBdXG4+KFxuICBhc3luYyAodXNlckRpcmVjdG9yeSwgZmxhZ3MpID0+IHtcbiAgICBjb25zb2xhLmluZm8oJ0luaXRhbGl6aW5nIG5ldyBwcm9qZWN0Jyk7XG5cbiAgICBjb25zdCB0ZW1wbGF0ZXMgPSBhd2FpdCBsaXN0VGVtcGxhdGVzKCk7XG4gICAgY29uc3QgZGVmYXVsdFRlbXBsYXRlID0gdGVtcGxhdGVzLmZpbmQoXG4gICAgICAodGVtcGxhdGUpID0+IHRlbXBsYXRlLm5hbWUgPT09IGZsYWdzLnRlbXBsYXRlPy50b0xvd2VyQ2FzZSgpLnRyaW0oKSxcbiAgICApO1xuXG4gICAgY29uc3QgaW5wdXQgPSBhd2FpdCBwcm9tcHRzKFxuICAgICAgW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ2RpcmVjdG9yeScsXG4gICAgICAgICAgdHlwZTogKCkgPT4gKHVzZXJEaXJlY3RvcnkgPT0gbnVsbCA/ICd0ZXh0JyA6IHVuZGVmaW5lZCksXG4gICAgICAgICAgbWVzc2FnZTogJ1Byb2plY3QgRGlyZWN0b3J5JyxcbiAgICAgICAgICBpbml0aWFsOiB1c2VyRGlyZWN0b3J5LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ3RlbXBsYXRlJyxcbiAgICAgICAgICB0eXBlOiAoKSA9PiAoZGVmYXVsdFRlbXBsYXRlID09IG51bGwgPyAnc2VsZWN0JyA6IHVuZGVmaW5lZCksXG4gICAgICAgICAgbWVzc2FnZTogJ0Nob29zZSBhIHRlbXBsYXRlJyxcbiAgICAgICAgICBjaG9pY2VzOiB0ZW1wbGF0ZXMubWFwKCh0ZW1wbGF0ZSkgPT4gKHtcbiAgICAgICAgICAgIHRpdGxlOlxuICAgICAgICAgICAgICBURU1QTEFURV9DT0xPUlNbdGVtcGxhdGUubmFtZV0/Lih0ZW1wbGF0ZS5uYW1lKSA/PyB0ZW1wbGF0ZS5uYW1lLFxuICAgICAgICAgICAgdmFsdWU6IHRlbXBsYXRlLFxuICAgICAgICAgIH0pKSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdwYWNrYWdlTWFuYWdlcicsXG4gICAgICAgICAgdHlwZTogKCkgPT4gKGZsYWdzLnBtID09IG51bGwgPyAnc2VsZWN0JyA6IHVuZGVmaW5lZCksXG4gICAgICAgICAgbWVzc2FnZTogJ1BhY2thZ2UgTWFuYWdlcicsXG4gICAgICAgICAgY2hvaWNlczogW1xuICAgICAgICAgICAgeyB0aXRsZTogJ25wbScsIHZhbHVlOiAnbnBtJyB9LFxuICAgICAgICAgICAgeyB0aXRsZTogJ3BucG0nLCB2YWx1ZTogJ3BucG0nIH0sXG4gICAgICAgICAgICB7IHRpdGxlOiAneWFybicsIHZhbHVlOiAneWFybicgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIHtcbiAgICAgICAgb25DYW5jZWw6ICgpID0+IHByb2Nlc3MuZXhpdCgxKSxcbiAgICAgIH0sXG4gICAgKTtcbiAgICBpbnB1dC5kaXJlY3RvcnkgPz89IHVzZXJEaXJlY3Rvcnk7XG4gICAgaW5wdXQudGVtcGxhdGUgPz89IGRlZmF1bHRUZW1wbGF0ZTtcbiAgICBpbnB1dC5wYWNrYWdlTWFuYWdlciA/Pz0gZmxhZ3MucG07XG5cbiAgICBhd2FpdCBjbG9uZVByb2plY3QoaW5wdXQpO1xuXG4gICAgY29uc3QgY2RQYXRoID0gcGF0aC5yZWxhdGl2ZShwcm9jZXNzLmN3ZCgpLCBwYXRoLnJlc29sdmUoaW5wdXQuZGlyZWN0b3J5KSk7XG4gICAgY29uc29sZS5sb2coKTtcbiAgICBjb25zb2xhLmxvZyhcbiAgICAgIGBcdTI3MjggV1hUIHByb2plY3QgY3JlYXRlZCB3aXRoIHRoZSAke1xuICAgICAgICBURU1QTEFURV9DT0xPUlNbaW5wdXQudGVtcGxhdGUubmFtZV0/LihpbnB1dC50ZW1wbGF0ZS5uYW1lKSA/P1xuICAgICAgICBpbnB1dC50ZW1wbGF0ZS5uYW1lXG4gICAgICB9IHRlbXBsYXRlLmAsXG4gICAgKTtcbiAgICBjb25zb2xlLmxvZygpO1xuICAgIGNvbnNvbGEubG9nKCdOZXh0IHN0ZXBzOicpO1xuICAgIGxldCBzdGVwID0gMDtcbiAgICBpZiAoY2RQYXRoICE9PSAnJykgY29uc29sYS5sb2coYCAgJHsrK3N0ZXB9LmAsIHBjLmN5YW4oYGNkICR7Y2RQYXRofWApKTtcbiAgICBjb25zb2xhLmxvZyhgICAkeysrc3RlcH0uYCwgcGMuY3lhbihgJHtpbnB1dC5wYWNrYWdlTWFuYWdlcn0gaW5zdGFsbGApKTtcbiAgICBjb25zb2xlLmxvZygpO1xuICB9LFxuICB7IGRpc2FibGVGaW5pc2hlZExvZzogdHJ1ZSB9LFxuKTtcblxuaW50ZXJmYWNlIFRlbXBsYXRlIHtcbiAgLyoqXG4gICAqIFRlbXBsYXRlJ3MgbmFtZS5cbiAgICovXG4gIG5hbWU6IHN0cmluZztcbiAgLyoqXG4gICAqIFBhdGggdG8gdGVtcGxhdGUgZGlyZWN0b3J5IGluIGdpdGh1YiByZXBvLlxuICAgKi9cbiAgcGF0aDogc3RyaW5nO1xufVxuXG5hc3luYyBmdW5jdGlvbiBsaXN0VGVtcGxhdGVzKCk6IFByb21pc2U8VGVtcGxhdGVbXT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKFxuICAgICAgJ2h0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3Mvd3h0LWRldi93eHQvY29udGVudHMvdGVtcGxhdGVzJyxcbiAgICAgIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIEFjY2VwdDogJ2FwcGxpY2F0aW9uL3ZuZC5naXRodWIranNvbicsXG4gICAgICAgICAgJ1gtR2l0SHViLUFwaS1WZXJzaW9uJzogJzIwMjItMTEtMjgnLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICApO1xuICAgIGlmIChyZXMuc3RhdHVzID49IDMwMClcbiAgICAgIHRocm93IEVycm9yKGBSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyAke3Jlcy5zdGF0dXN9ICR7cmVzLnN0YXR1c1RleHR9YCk7XG5cbiAgICBjb25zdCBkYXRhID0gKGF3YWl0IHJlcy5qc29uKCkpIGFzIEFycmF5PHtcbiAgICAgIHR5cGU6ICdmaWxlJyB8ICdkaXInO1xuICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgcGF0aDogc3RyaW5nO1xuICAgIH0+O1xuICAgIHJldHVybiBkYXRhXG4gICAgICAuZmlsdGVyKChpdGVtOiBhbnkpID0+IGl0ZW0udHlwZSA9PT0gJ2RpcicpXG4gICAgICAubWFwKChpdGVtKSA9PiAoeyBuYW1lOiBpdGVtLm5hbWUsIHBhdGg6IGl0ZW0ucGF0aCB9KSlcbiAgICAgIC5zb3J0KChsLCByKSA9PiB7XG4gICAgICAgIGNvbnN0IGxXZWlnaHQgPSBURU1QTEFURV9TT1JUX1dFSUdIVFtsLm5hbWVdID8/IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSO1xuICAgICAgICBjb25zdCByV2VpZ2h0ID0gVEVNUExBVEVfU09SVF9XRUlHSFRbci5uYW1lXSA/PyBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUjtcbiAgICAgICAgY29uc3QgZGlmZiA9IGxXZWlnaHQgLSByV2VpZ2h0O1xuICAgICAgICBpZiAoZGlmZiAhPT0gMCkgcmV0dXJuIGRpZmY7XG4gICAgICAgIHJldHVybiBsLm5hbWUubG9jYWxlQ29tcGFyZShyLm5hbWUpO1xuICAgICAgfSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRocm93IEVycm9yKGBDYW5ub3QgbG9hZCB0ZW1wbGF0ZXM6ICR7SlNPTi5zdHJpbmdpZnkoZXJyLCBudWxsLCAyKX1gKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBjbG9uZVByb2plY3Qoe1xuICBkaXJlY3RvcnksXG4gIHRlbXBsYXRlLFxuICBwYWNrYWdlTWFuYWdlcixcbn06IHtcbiAgZGlyZWN0b3J5OiBzdHJpbmc7XG4gIHRlbXBsYXRlOiBUZW1wbGF0ZTtcbiAgcGFja2FnZU1hbmFnZXI6IHN0cmluZztcbn0pIHtcbiAgY29uc3Qgc3Bpbm5lciA9IG9yYSgnRG93bmxvYWRpbmcgdGVtcGxhdGUnKS5zdGFydCgpO1xuICB0cnkge1xuICAgIC8vIDEuIENsb25lIHJlcG9cbiAgICBhd2FpdCBkb3dubG9hZFRlbXBsYXRlKGBnaDp3eHQtZGV2L3d4dC8ke3RlbXBsYXRlLnBhdGh9YCwge1xuICAgICAgZGlyOiBkaXJlY3RvcnksXG4gICAgICBmb3JjZTogdHJ1ZSxcbiAgICB9KTtcblxuICAgIC8vIDIuIE1vdmUgX2dpdGlnbm9yZSAtPiAuZ2l0aWdub3JlXG4gICAgYXdhaXQgZnNcbiAgICAgIC5tb3ZlKFxuICAgICAgICBwYXRoLmpvaW4oZGlyZWN0b3J5LCAnX2dpdGlnbm9yZScpLFxuICAgICAgICBwYXRoLmpvaW4oZGlyZWN0b3J5LCAnLmdpdGlnbm9yZScpLFxuICAgICAgKVxuICAgICAgLmNhdGNoKChlcnIpID0+XG4gICAgICAgIGNvbnNvbGEud2FybignRmFpbGVkIHRvIG1vdmUgX2dpdGlnbm9yZSB0byAuZ2l0aWdub3JlOicsIGVyciksXG4gICAgICApO1xuXG4gICAgLy8gMy4gQWRkIC5ucG1yYyBmb3IgcG5wbVxuICAgIGlmIChwYWNrYWdlTWFuYWdlciA9PT0gJ3BucG0nKSB7XG4gICAgICBhd2FpdCBmcy53cml0ZUZpbGUoXG4gICAgICAgIHBhdGguam9pbihkaXJlY3RvcnksICcubnBtcmMnKSxcbiAgICAgICAgJ3NoYW1lZnVsbHktaG9pc3Q9dHJ1ZVxcbicsXG4gICAgICApO1xuICAgIH1cblxuICAgIHNwaW5uZXIuc3VjY2VlZCgpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBzcGlubmVyLmZhaWwoKTtcbiAgICB0aHJvdyBFcnJvcihgRmFpbGVkIHRvIHNldHVwIG5ldyBwcm9qZWN0OiAke0pTT04uc3RyaW5naWZ5KGVyciwgbnVsbCwgMil9YCk7XG4gIH1cbn1cblxuY29uc3QgVEVNUExBVEVfQ09MT1JTOiBSZWNvcmQ8c3RyaW5nLCBGb3JtYXR0ZXI+ID0ge1xuICB2YW5pbGxhOiBwYy5ibHVlLFxuICB2dWU6IHBjLmdyZWVuLFxuICByZWFjdDogcGMuY3lhbixcbiAgc3ZlbHRlOiBwYy5yZWQsXG4gIHNvbGlkOiBwYy5ibHVlLFxufTtcblxuY29uc3QgVEVNUExBVEVfU09SVF9XRUlHSFQ6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4gPSB7XG4gIHZhbmlsbGE6IDAsXG4gIHZ1ZTogMSxcbiAgcmVhY3Q6IDIsXG59O1xuIiwgImltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5pbXBvcnQgY2hhbGsgZnJvbSAnY2hhbGsnO1xuaW1wb3J0IGNsaUN1cnNvciBmcm9tICdjbGktY3Vyc29yJztcbmltcG9ydCBjbGlTcGlubmVycyBmcm9tICdjbGktc3Bpbm5lcnMnO1xuaW1wb3J0IGxvZ1N5bWJvbHMgZnJvbSAnbG9nLXN5bWJvbHMnO1xuaW1wb3J0IHN0cmlwQW5zaSBmcm9tICdzdHJpcC1hbnNpJztcbmltcG9ydCBzdHJpbmdXaWR0aCBmcm9tICdzdHJpbmctd2lkdGgnO1xuaW1wb3J0IGlzSW50ZXJhY3RpdmUgZnJvbSAnaXMtaW50ZXJhY3RpdmUnO1xuaW1wb3J0IGlzVW5pY29kZVN1cHBvcnRlZCBmcm9tICdpcy11bmljb2RlLXN1cHBvcnRlZCc7XG5pbXBvcnQgc3RkaW5EaXNjYXJkZXIgZnJvbSAnc3RkaW4tZGlzY2FyZGVyJztcblxuY2xhc3MgT3JhIHtcblx0I2xpbmVzVG9DbGVhciA9IDA7XG5cdCNpc0Rpc2NhcmRpbmdTdGRpbiA9IGZhbHNlO1xuXHQjbGluZUNvdW50ID0gMDtcblx0I2ZyYW1lSW5kZXggPSAwO1xuXHQjb3B0aW9ucztcblx0I3NwaW5uZXI7XG5cdCNzdHJlYW07XG5cdCNpZDtcblx0I2luaXRpYWxJbnRlcnZhbDtcblx0I2lzRW5hYmxlZDtcblx0I2lzU2lsZW50O1xuXHQjaW5kZW50O1xuXHQjdGV4dDtcblx0I3ByZWZpeFRleHQ7XG5cdCNzdWZmaXhUZXh0O1xuXG5cdGNvbG9yO1xuXG5cdGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcblx0XHRpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRvcHRpb25zID0ge1xuXHRcdFx0XHR0ZXh0OiBvcHRpb25zLFxuXHRcdFx0fTtcblx0XHR9XG5cblx0XHR0aGlzLiNvcHRpb25zID0ge1xuXHRcdFx0Y29sb3I6ICdjeWFuJyxcblx0XHRcdHN0cmVhbTogcHJvY2Vzcy5zdGRlcnIsXG5cdFx0XHRkaXNjYXJkU3RkaW46IHRydWUsXG5cdFx0XHRoaWRlQ3Vyc29yOiB0cnVlLFxuXHRcdFx0Li4ub3B0aW9ucyxcblx0XHR9O1xuXG5cdFx0Ly8gUHVibGljXG5cdFx0dGhpcy5jb2xvciA9IHRoaXMuI29wdGlvbnMuY29sb3I7XG5cblx0XHQvLyBJdCdzIGltcG9ydGFudCB0aGF0IHRoZXNlIHVzZSB0aGUgcHVibGljIHNldHRlcnMuXG5cdFx0dGhpcy5zcGlubmVyID0gdGhpcy4jb3B0aW9ucy5zcGlubmVyO1xuXG5cdFx0dGhpcy4jaW5pdGlhbEludGVydmFsID0gdGhpcy4jb3B0aW9ucy5pbnRlcnZhbDtcblx0XHR0aGlzLiNzdHJlYW0gPSB0aGlzLiNvcHRpb25zLnN0cmVhbTtcblx0XHR0aGlzLiNpc0VuYWJsZWQgPSB0eXBlb2YgdGhpcy4jb3B0aW9ucy5pc0VuYWJsZWQgPT09ICdib29sZWFuJyA/IHRoaXMuI29wdGlvbnMuaXNFbmFibGVkIDogaXNJbnRlcmFjdGl2ZSh7c3RyZWFtOiB0aGlzLiNzdHJlYW19KTtcblx0XHR0aGlzLiNpc1NpbGVudCA9IHR5cGVvZiB0aGlzLiNvcHRpb25zLmlzU2lsZW50ID09PSAnYm9vbGVhbicgPyB0aGlzLiNvcHRpb25zLmlzU2lsZW50IDogZmFsc2U7XG5cblx0XHQvLyBTZXQgKmFmdGVyKiBgdGhpcy4jc3RyZWFtYC5cblx0XHQvLyBJdCdzIGltcG9ydGFudCB0aGF0IHRoZXNlIHVzZSB0aGUgcHVibGljIHNldHRlcnMuXG5cdFx0dGhpcy50ZXh0ID0gdGhpcy4jb3B0aW9ucy50ZXh0O1xuXHRcdHRoaXMucHJlZml4VGV4dCA9IHRoaXMuI29wdGlvbnMucHJlZml4VGV4dDtcblx0XHR0aGlzLnN1ZmZpeFRleHQgPSB0aGlzLiNvcHRpb25zLnN1ZmZpeFRleHQ7XG5cdFx0dGhpcy5pbmRlbnQgPSB0aGlzLiNvcHRpb25zLmluZGVudDtcblxuXHRcdGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Rlc3QnKSB7XG5cdFx0XHR0aGlzLl9zdHJlYW0gPSB0aGlzLiNzdHJlYW07XG5cdFx0XHR0aGlzLl9pc0VuYWJsZWQgPSB0aGlzLiNpc0VuYWJsZWQ7XG5cblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnX2xpbmVzVG9DbGVhcicsIHtcblx0XHRcdFx0Z2V0KCkge1xuXHRcdFx0XHRcdHJldHVybiB0aGlzLiNsaW5lc1RvQ2xlYXI7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHNldChuZXdWYWx1ZSkge1xuXHRcdFx0XHRcdHRoaXMuI2xpbmVzVG9DbGVhciA9IG5ld1ZhbHVlO1xuXHRcdFx0XHR9LFxuXHRcdFx0fSk7XG5cblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnX2ZyYW1lSW5kZXgnLCB7XG5cdFx0XHRcdGdldCgpIHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy4jZnJhbWVJbmRleDtcblx0XHRcdFx0fSxcblx0XHRcdH0pO1xuXG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ19saW5lQ291bnQnLCB7XG5cdFx0XHRcdGdldCgpIHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy4jbGluZUNvdW50O1xuXHRcdFx0XHR9LFxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0Z2V0IGluZGVudCgpIHtcblx0XHRyZXR1cm4gdGhpcy4jaW5kZW50O1xuXHR9XG5cblx0c2V0IGluZGVudChpbmRlbnQgPSAwKSB7XG5cdFx0aWYgKCEoaW5kZW50ID49IDAgJiYgTnVtYmVyLmlzSW50ZWdlcihpbmRlbnQpKSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdUaGUgYGluZGVudGAgb3B0aW9uIG11c3QgYmUgYW4gaW50ZWdlciBmcm9tIDAgYW5kIHVwJyk7XG5cdFx0fVxuXG5cdFx0dGhpcy4jaW5kZW50ID0gaW5kZW50O1xuXHRcdHRoaXMuI3VwZGF0ZUxpbmVDb3VudCgpO1xuXHR9XG5cblx0Z2V0IGludGVydmFsKCkge1xuXHRcdHJldHVybiB0aGlzLiNpbml0aWFsSW50ZXJ2YWwgPz8gdGhpcy4jc3Bpbm5lci5pbnRlcnZhbCA/PyAxMDA7XG5cdH1cblxuXHRnZXQgc3Bpbm5lcigpIHtcblx0XHRyZXR1cm4gdGhpcy4jc3Bpbm5lcjtcblx0fVxuXG5cdHNldCBzcGlubmVyKHNwaW5uZXIpIHtcblx0XHR0aGlzLiNmcmFtZUluZGV4ID0gMDtcblx0XHR0aGlzLiNpbml0aWFsSW50ZXJ2YWwgPSB1bmRlZmluZWQ7XG5cblx0XHRpZiAodHlwZW9mIHNwaW5uZXIgPT09ICdvYmplY3QnKSB7XG5cdFx0XHRpZiAoc3Bpbm5lci5mcmFtZXMgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ1RoZSBnaXZlbiBzcGlubmVyIG11c3QgaGF2ZSBhIGBmcmFtZXNgIHByb3BlcnR5Jyk7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuI3NwaW5uZXIgPSBzcGlubmVyO1xuXHRcdH0gZWxzZSBpZiAoIWlzVW5pY29kZVN1cHBvcnRlZCgpKSB7XG5cdFx0XHR0aGlzLiNzcGlubmVyID0gY2xpU3Bpbm5lcnMubGluZTtcblx0XHR9IGVsc2UgaWYgKHNwaW5uZXIgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Ly8gU2V0IGRlZmF1bHQgc3Bpbm5lclxuXHRcdFx0dGhpcy4jc3Bpbm5lciA9IGNsaVNwaW5uZXJzLmRvdHM7XG5cdFx0fSBlbHNlIGlmIChzcGlubmVyICE9PSAnZGVmYXVsdCcgJiYgY2xpU3Bpbm5lcnNbc3Bpbm5lcl0pIHtcblx0XHRcdHRoaXMuI3NwaW5uZXIgPSBjbGlTcGlubmVyc1tzcGlubmVyXTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKGBUaGVyZSBpcyBubyBidWlsdC1pbiBzcGlubmVyIG5hbWVkICcke3NwaW5uZXJ9Jy4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5kcmVzb3JodXMvY2xpLXNwaW5uZXJzL2Jsb2IvbWFpbi9zcGlubmVycy5qc29uIGZvciBhIGZ1bGwgbGlzdC5gKTtcblx0XHR9XG5cdH1cblxuXHRnZXQgdGV4dCgpIHtcblx0XHRyZXR1cm4gdGhpcy4jdGV4dDtcblx0fVxuXG5cdHNldCB0ZXh0KHZhbHVlID0gJycpIHtcblx0XHR0aGlzLiN0ZXh0ID0gdmFsdWU7XG5cdFx0dGhpcy4jdXBkYXRlTGluZUNvdW50KCk7XG5cdH1cblxuXHRnZXQgcHJlZml4VGV4dCgpIHtcblx0XHRyZXR1cm4gdGhpcy4jcHJlZml4VGV4dDtcblx0fVxuXG5cdHNldCBwcmVmaXhUZXh0KHZhbHVlID0gJycpIHtcblx0XHR0aGlzLiNwcmVmaXhUZXh0ID0gdmFsdWU7XG5cdFx0dGhpcy4jdXBkYXRlTGluZUNvdW50KCk7XG5cdH1cblxuXHRnZXQgc3VmZml4VGV4dCgpIHtcblx0XHRyZXR1cm4gdGhpcy4jc3VmZml4VGV4dDtcblx0fVxuXG5cdHNldCBzdWZmaXhUZXh0KHZhbHVlID0gJycpIHtcblx0XHR0aGlzLiNzdWZmaXhUZXh0ID0gdmFsdWU7XG5cdFx0dGhpcy4jdXBkYXRlTGluZUNvdW50KCk7XG5cdH1cblxuXHRnZXQgaXNTcGlubmluZygpIHtcblx0XHRyZXR1cm4gdGhpcy4jaWQgIT09IHVuZGVmaW5lZDtcblx0fVxuXG5cdCNnZXRGdWxsUHJlZml4VGV4dChwcmVmaXhUZXh0ID0gdGhpcy4jcHJlZml4VGV4dCwgcG9zdGZpeCA9ICcgJykge1xuXHRcdGlmICh0eXBlb2YgcHJlZml4VGV4dCA9PT0gJ3N0cmluZycgJiYgcHJlZml4VGV4dCAhPT0gJycpIHtcblx0XHRcdHJldHVybiBwcmVmaXhUZXh0ICsgcG9zdGZpeDtcblx0XHR9XG5cblx0XHRpZiAodHlwZW9mIHByZWZpeFRleHQgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdHJldHVybiBwcmVmaXhUZXh0KCkgKyBwb3N0Zml4O1xuXHRcdH1cblxuXHRcdHJldHVybiAnJztcblx0fVxuXG5cdCNnZXRGdWxsU3VmZml4VGV4dChzdWZmaXhUZXh0ID0gdGhpcy4jc3VmZml4VGV4dCwgcHJlZml4ID0gJyAnKSB7XG5cdFx0aWYgKHR5cGVvZiBzdWZmaXhUZXh0ID09PSAnc3RyaW5nJyAmJiBzdWZmaXhUZXh0ICE9PSAnJykge1xuXHRcdFx0cmV0dXJuIHByZWZpeCArIHN1ZmZpeFRleHQ7XG5cdFx0fVxuXG5cdFx0aWYgKHR5cGVvZiBzdWZmaXhUZXh0ID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRyZXR1cm4gcHJlZml4ICsgc3VmZml4VGV4dCgpO1xuXHRcdH1cblxuXHRcdHJldHVybiAnJztcblx0fVxuXG5cdCN1cGRhdGVMaW5lQ291bnQoKSB7XG5cdFx0Y29uc3QgY29sdW1ucyA9IHRoaXMuI3N0cmVhbS5jb2x1bW5zID8/IDgwO1xuXHRcdGNvbnN0IGZ1bGxQcmVmaXhUZXh0ID0gdGhpcy4jZ2V0RnVsbFByZWZpeFRleHQodGhpcy4jcHJlZml4VGV4dCwgJy0nKTtcblx0XHRjb25zdCBmdWxsU3VmZml4VGV4dCA9IHRoaXMuI2dldEZ1bGxTdWZmaXhUZXh0KHRoaXMuI3N1ZmZpeFRleHQsICctJyk7XG5cdFx0Y29uc3QgZnVsbFRleHQgPSAnICcucmVwZWF0KHRoaXMuI2luZGVudCkgKyBmdWxsUHJlZml4VGV4dCArICctLScgKyB0aGlzLiN0ZXh0ICsgJy0tJyArIGZ1bGxTdWZmaXhUZXh0O1xuXG5cdFx0dGhpcy4jbGluZUNvdW50ID0gMDtcblx0XHRmb3IgKGNvbnN0IGxpbmUgb2Ygc3RyaXBBbnNpKGZ1bGxUZXh0KS5zcGxpdCgnXFxuJykpIHtcblx0XHRcdHRoaXMuI2xpbmVDb3VudCArPSBNYXRoLm1heCgxLCBNYXRoLmNlaWwoc3RyaW5nV2lkdGgobGluZSwge2NvdW50QW5zaUVzY2FwZUNvZGVzOiB0cnVlfSkgLyBjb2x1bW5zKSk7XG5cdFx0fVxuXHR9XG5cblx0Z2V0IGlzRW5hYmxlZCgpIHtcblx0XHRyZXR1cm4gdGhpcy4jaXNFbmFibGVkICYmICF0aGlzLiNpc1NpbGVudDtcblx0fVxuXG5cdHNldCBpc0VuYWJsZWQodmFsdWUpIHtcblx0XHRpZiAodHlwZW9mIHZhbHVlICE9PSAnYm9vbGVhbicpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBgaXNFbmFibGVkYCBvcHRpb24gbXVzdCBiZSBhIGJvb2xlYW4nKTtcblx0XHR9XG5cblx0XHR0aGlzLiNpc0VuYWJsZWQgPSB2YWx1ZTtcblx0fVxuXG5cdGdldCBpc1NpbGVudCgpIHtcblx0XHRyZXR1cm4gdGhpcy4jaXNTaWxlbnQ7XG5cdH1cblxuXHRzZXQgaXNTaWxlbnQodmFsdWUpIHtcblx0XHRpZiAodHlwZW9mIHZhbHVlICE9PSAnYm9vbGVhbicpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBgaXNTaWxlbnRgIG9wdGlvbiBtdXN0IGJlIGEgYm9vbGVhbicpO1xuXHRcdH1cblxuXHRcdHRoaXMuI2lzU2lsZW50ID0gdmFsdWU7XG5cdH1cblxuXHRmcmFtZSgpIHtcblx0XHRjb25zdCB7ZnJhbWVzfSA9IHRoaXMuI3NwaW5uZXI7XG5cdFx0bGV0IGZyYW1lID0gZnJhbWVzW3RoaXMuI2ZyYW1lSW5kZXhdO1xuXG5cdFx0aWYgKHRoaXMuY29sb3IpIHtcblx0XHRcdGZyYW1lID0gY2hhbGtbdGhpcy5jb2xvcl0oZnJhbWUpO1xuXHRcdH1cblxuXHRcdHRoaXMuI2ZyYW1lSW5kZXggPSArK3RoaXMuI2ZyYW1lSW5kZXggJSBmcmFtZXMubGVuZ3RoO1xuXHRcdGNvbnN0IGZ1bGxQcmVmaXhUZXh0ID0gKHR5cGVvZiB0aGlzLiNwcmVmaXhUZXh0ID09PSAnc3RyaW5nJyAmJiB0aGlzLiNwcmVmaXhUZXh0ICE9PSAnJykgPyB0aGlzLiNwcmVmaXhUZXh0ICsgJyAnIDogJyc7XG5cdFx0Y29uc3QgZnVsbFRleHQgPSB0eXBlb2YgdGhpcy50ZXh0ID09PSAnc3RyaW5nJyA/ICcgJyArIHRoaXMudGV4dCA6ICcnO1xuXHRcdGNvbnN0IGZ1bGxTdWZmaXhUZXh0ID0gKHR5cGVvZiB0aGlzLiNzdWZmaXhUZXh0ID09PSAnc3RyaW5nJyAmJiB0aGlzLiNzdWZmaXhUZXh0ICE9PSAnJykgPyAnICcgKyB0aGlzLiNzdWZmaXhUZXh0IDogJyc7XG5cblx0XHRyZXR1cm4gZnVsbFByZWZpeFRleHQgKyBmcmFtZSArIGZ1bGxUZXh0ICsgZnVsbFN1ZmZpeFRleHQ7XG5cdH1cblxuXHRjbGVhcigpIHtcblx0XHRpZiAoIXRoaXMuI2lzRW5hYmxlZCB8fCAhdGhpcy4jc3RyZWFtLmlzVFRZKSB7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHR0aGlzLiNzdHJlYW0uY3Vyc29yVG8oMCk7XG5cblx0XHRmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy4jbGluZXNUb0NsZWFyOyBpbmRleCsrKSB7XG5cdFx0XHRpZiAoaW5kZXggPiAwKSB7XG5cdFx0XHRcdHRoaXMuI3N0cmVhbS5tb3ZlQ3Vyc29yKDAsIC0xKTtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy4jc3RyZWFtLmNsZWFyTGluZSgxKTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy4jaW5kZW50IHx8IHRoaXMubGFzdEluZGVudCAhPT0gdGhpcy4jaW5kZW50KSB7XG5cdFx0XHR0aGlzLiNzdHJlYW0uY3Vyc29yVG8odGhpcy4jaW5kZW50KTtcblx0XHR9XG5cblx0XHR0aGlzLmxhc3RJbmRlbnQgPSB0aGlzLiNpbmRlbnQ7XG5cdFx0dGhpcy4jbGluZXNUb0NsZWFyID0gMDtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0cmVuZGVyKCkge1xuXHRcdGlmICh0aGlzLiNpc1NpbGVudCkge1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0dGhpcy5jbGVhcigpO1xuXHRcdHRoaXMuI3N0cmVhbS53cml0ZSh0aGlzLmZyYW1lKCkpO1xuXHRcdHRoaXMuI2xpbmVzVG9DbGVhciA9IHRoaXMuI2xpbmVDb3VudDtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0c3RhcnQodGV4dCkge1xuXHRcdGlmICh0ZXh0KSB7XG5cdFx0XHR0aGlzLnRleHQgPSB0ZXh0O1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLiNpc1NpbGVudCkge1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0aWYgKCF0aGlzLiNpc0VuYWJsZWQpIHtcblx0XHRcdGlmICh0aGlzLnRleHQpIHtcblx0XHRcdFx0dGhpcy4jc3RyZWFtLndyaXRlKGAtICR7dGhpcy50ZXh0fVxcbmApO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHRpZiAodGhpcy5pc1NwaW5uaW5nKSB7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHRpZiAodGhpcy4jb3B0aW9ucy5oaWRlQ3Vyc29yKSB7XG5cdFx0XHRjbGlDdXJzb3IuaGlkZSh0aGlzLiNzdHJlYW0pO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLiNvcHRpb25zLmRpc2NhcmRTdGRpbiAmJiBwcm9jZXNzLnN0ZGluLmlzVFRZKSB7XG5cdFx0XHR0aGlzLiNpc0Rpc2NhcmRpbmdTdGRpbiA9IHRydWU7XG5cdFx0XHRzdGRpbkRpc2NhcmRlci5zdGFydCgpO1xuXHRcdH1cblxuXHRcdHRoaXMucmVuZGVyKCk7XG5cdFx0dGhpcy4jaWQgPSBzZXRJbnRlcnZhbCh0aGlzLnJlbmRlci5iaW5kKHRoaXMpLCB0aGlzLmludGVydmFsKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0c3RvcCgpIHtcblx0XHRpZiAoIXRoaXMuI2lzRW5hYmxlZCkge1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0Y2xlYXJJbnRlcnZhbCh0aGlzLiNpZCk7XG5cdFx0dGhpcy4jaWQgPSB1bmRlZmluZWQ7XG5cdFx0dGhpcy4jZnJhbWVJbmRleCA9IDA7XG5cdFx0dGhpcy5jbGVhcigpO1xuXHRcdGlmICh0aGlzLiNvcHRpb25zLmhpZGVDdXJzb3IpIHtcblx0XHRcdGNsaUN1cnNvci5zaG93KHRoaXMuI3N0cmVhbSk7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuI29wdGlvbnMuZGlzY2FyZFN0ZGluICYmIHByb2Nlc3Muc3RkaW4uaXNUVFkgJiYgdGhpcy4jaXNEaXNjYXJkaW5nU3RkaW4pIHtcblx0XHRcdHN0ZGluRGlzY2FyZGVyLnN0b3AoKTtcblx0XHRcdHRoaXMuI2lzRGlzY2FyZGluZ1N0ZGluID0gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRzdWNjZWVkKHRleHQpIHtcblx0XHRyZXR1cm4gdGhpcy5zdG9wQW5kUGVyc2lzdCh7c3ltYm9sOiBsb2dTeW1ib2xzLnN1Y2Nlc3MsIHRleHR9KTtcblx0fVxuXG5cdGZhaWwodGV4dCkge1xuXHRcdHJldHVybiB0aGlzLnN0b3BBbmRQZXJzaXN0KHtzeW1ib2w6IGxvZ1N5bWJvbHMuZXJyb3IsIHRleHR9KTtcblx0fVxuXG5cdHdhcm4odGV4dCkge1xuXHRcdHJldHVybiB0aGlzLnN0b3BBbmRQZXJzaXN0KHtzeW1ib2w6IGxvZ1N5bWJvbHMud2FybmluZywgdGV4dH0pO1xuXHR9XG5cblx0aW5mbyh0ZXh0KSB7XG5cdFx0cmV0dXJuIHRoaXMuc3RvcEFuZFBlcnNpc3Qoe3N5bWJvbDogbG9nU3ltYm9scy5pbmZvLCB0ZXh0fSk7XG5cdH1cblxuXHRzdG9wQW5kUGVyc2lzdChvcHRpb25zID0ge30pIHtcblx0XHRpZiAodGhpcy4jaXNTaWxlbnQpIHtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdGNvbnN0IHByZWZpeFRleHQgPSBvcHRpb25zLnByZWZpeFRleHQgPz8gdGhpcy4jcHJlZml4VGV4dDtcblx0XHRjb25zdCBmdWxsUHJlZml4VGV4dCA9IHRoaXMuI2dldEZ1bGxQcmVmaXhUZXh0KHByZWZpeFRleHQsICcgJyk7XG5cblx0XHRjb25zdCBzeW1ib2xUZXh0ID0gb3B0aW9ucy5zeW1ib2wgPz8gJyAnO1xuXG5cdFx0Y29uc3QgdGV4dCA9IG9wdGlvbnMudGV4dCA/PyB0aGlzLnRleHQ7XG5cdFx0Y29uc3QgZnVsbFRleHQgPSAodHlwZW9mIHRleHQgPT09ICdzdHJpbmcnKSA/ICcgJyArIHRleHQgOiAnJztcblxuXHRcdGNvbnN0IHN1ZmZpeFRleHQgPSBvcHRpb25zLnN1ZmZpeFRleHQgPz8gdGhpcy4jc3VmZml4VGV4dDtcblx0XHRjb25zdCBmdWxsU3VmZml4VGV4dCA9IHRoaXMuI2dldEZ1bGxTdWZmaXhUZXh0KHN1ZmZpeFRleHQsICcgJyk7XG5cblx0XHRjb25zdCB0ZXh0VG9Xcml0ZSA9IGZ1bGxQcmVmaXhUZXh0ICsgc3ltYm9sVGV4dCArIGZ1bGxUZXh0ICsgZnVsbFN1ZmZpeFRleHQgKyAnXFxuJztcblxuXHRcdHRoaXMuc3RvcCgpO1xuXHRcdHRoaXMuI3N0cmVhbS53cml0ZSh0ZXh0VG9Xcml0ZSk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBvcmEob3B0aW9ucykge1xuXHRyZXR1cm4gbmV3IE9yYShvcHRpb25zKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG9yYVByb21pc2UoYWN0aW9uLCBvcHRpb25zKSB7XG5cdGNvbnN0IGFjdGlvbklzRnVuY3Rpb24gPSB0eXBlb2YgYWN0aW9uID09PSAnZnVuY3Rpb24nO1xuXHRjb25zdCBhY3Rpb25Jc1Byb21pc2UgPSB0eXBlb2YgYWN0aW9uLnRoZW4gPT09ICdmdW5jdGlvbic7XG5cblx0aWYgKCFhY3Rpb25Jc0Z1bmN0aW9uICYmICFhY3Rpb25Jc1Byb21pc2UpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdQYXJhbWV0ZXIgYGFjdGlvbmAgbXVzdCBiZSBhIEZ1bmN0aW9uIG9yIGEgUHJvbWlzZScpO1xuXHR9XG5cblx0Y29uc3Qge3N1Y2Nlc3NUZXh0LCBmYWlsVGV4dH0gPSB0eXBlb2Ygb3B0aW9ucyA9PT0gJ29iamVjdCdcblx0XHQ/IG9wdGlvbnNcblx0XHQ6IHtzdWNjZXNzVGV4dDogdW5kZWZpbmVkLCBmYWlsVGV4dDogdW5kZWZpbmVkfTtcblxuXHRjb25zdCBzcGlubmVyID0gb3JhKG9wdGlvbnMpLnN0YXJ0KCk7XG5cblx0dHJ5IHtcblx0XHRjb25zdCBwcm9taXNlID0gYWN0aW9uSXNGdW5jdGlvbiA/IGFjdGlvbihzcGlubmVyKSA6IGFjdGlvbjtcblx0XHRjb25zdCByZXN1bHQgPSBhd2FpdCBwcm9taXNlO1xuXG5cdFx0c3Bpbm5lci5zdWNjZWVkKFxuXHRcdFx0c3VjY2Vzc1RleHQgPT09IHVuZGVmaW5lZFxuXHRcdFx0XHQ/IHVuZGVmaW5lZFxuXHRcdFx0XHQ6ICh0eXBlb2Ygc3VjY2Vzc1RleHQgPT09ICdzdHJpbmcnID8gc3VjY2Vzc1RleHQgOiBzdWNjZXNzVGV4dChyZXN1bHQpKSxcblx0XHQpO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRzcGlubmVyLmZhaWwoXG5cdFx0XHRmYWlsVGV4dCA9PT0gdW5kZWZpbmVkXG5cdFx0XHRcdD8gdW5kZWZpbmVkXG5cdFx0XHRcdDogKHR5cGVvZiBmYWlsVGV4dCA9PT0gJ3N0cmluZycgPyBmYWlsVGV4dCA6IGZhaWxUZXh0KGVycm9yKSksXG5cdFx0KTtcblxuXHRcdHRocm93IGVycm9yO1xuXHR9XG59XG5cbmV4cG9ydCB7ZGVmYXVsdCBhcyBzcGlubmVyc30gZnJvbSAnY2xpLXNwaW5uZXJzJztcbiIsICJjb25zdCBBTlNJX0JBQ0tHUk9VTkRfT0ZGU0VUID0gMTA7XG5cbmNvbnN0IHdyYXBBbnNpMTYgPSAob2Zmc2V0ID0gMCkgPT4gY29kZSA9PiBgXFx1MDAxQlske2NvZGUgKyBvZmZzZXR9bWA7XG5cbmNvbnN0IHdyYXBBbnNpMjU2ID0gKG9mZnNldCA9IDApID0+IGNvZGUgPT4gYFxcdTAwMUJbJHszOCArIG9mZnNldH07NTske2NvZGV9bWA7XG5cbmNvbnN0IHdyYXBBbnNpMTZtID0gKG9mZnNldCA9IDApID0+IChyZWQsIGdyZWVuLCBibHVlKSA9PiBgXFx1MDAxQlskezM4ICsgb2Zmc2V0fTsyOyR7cmVkfTske2dyZWVufTske2JsdWV9bWA7XG5cbmNvbnN0IHN0eWxlcyA9IHtcblx0bW9kaWZpZXI6IHtcblx0XHRyZXNldDogWzAsIDBdLFxuXHRcdC8vIDIxIGlzbid0IHdpZGVseSBzdXBwb3J0ZWQgYW5kIDIyIGRvZXMgdGhlIHNhbWUgdGhpbmdcblx0XHRib2xkOiBbMSwgMjJdLFxuXHRcdGRpbTogWzIsIDIyXSxcblx0XHRpdGFsaWM6IFszLCAyM10sXG5cdFx0dW5kZXJsaW5lOiBbNCwgMjRdLFxuXHRcdG92ZXJsaW5lOiBbNTMsIDU1XSxcblx0XHRpbnZlcnNlOiBbNywgMjddLFxuXHRcdGhpZGRlbjogWzgsIDI4XSxcblx0XHRzdHJpa2V0aHJvdWdoOiBbOSwgMjldLFxuXHR9LFxuXHRjb2xvcjoge1xuXHRcdGJsYWNrOiBbMzAsIDM5XSxcblx0XHRyZWQ6IFszMSwgMzldLFxuXHRcdGdyZWVuOiBbMzIsIDM5XSxcblx0XHR5ZWxsb3c6IFszMywgMzldLFxuXHRcdGJsdWU6IFszNCwgMzldLFxuXHRcdG1hZ2VudGE6IFszNSwgMzldLFxuXHRcdGN5YW46IFszNiwgMzldLFxuXHRcdHdoaXRlOiBbMzcsIDM5XSxcblxuXHRcdC8vIEJyaWdodCBjb2xvclxuXHRcdGJsYWNrQnJpZ2h0OiBbOTAsIDM5XSxcblx0XHRncmF5OiBbOTAsIDM5XSwgLy8gQWxpYXMgb2YgYGJsYWNrQnJpZ2h0YFxuXHRcdGdyZXk6IFs5MCwgMzldLCAvLyBBbGlhcyBvZiBgYmxhY2tCcmlnaHRgXG5cdFx0cmVkQnJpZ2h0OiBbOTEsIDM5XSxcblx0XHRncmVlbkJyaWdodDogWzkyLCAzOV0sXG5cdFx0eWVsbG93QnJpZ2h0OiBbOTMsIDM5XSxcblx0XHRibHVlQnJpZ2h0OiBbOTQsIDM5XSxcblx0XHRtYWdlbnRhQnJpZ2h0OiBbOTUsIDM5XSxcblx0XHRjeWFuQnJpZ2h0OiBbOTYsIDM5XSxcblx0XHR3aGl0ZUJyaWdodDogWzk3LCAzOV0sXG5cdH0sXG5cdGJnQ29sb3I6IHtcblx0XHRiZ0JsYWNrOiBbNDAsIDQ5XSxcblx0XHRiZ1JlZDogWzQxLCA0OV0sXG5cdFx0YmdHcmVlbjogWzQyLCA0OV0sXG5cdFx0YmdZZWxsb3c6IFs0MywgNDldLFxuXHRcdGJnQmx1ZTogWzQ0LCA0OV0sXG5cdFx0YmdNYWdlbnRhOiBbNDUsIDQ5XSxcblx0XHRiZ0N5YW46IFs0NiwgNDldLFxuXHRcdGJnV2hpdGU6IFs0NywgNDldLFxuXG5cdFx0Ly8gQnJpZ2h0IGNvbG9yXG5cdFx0YmdCbGFja0JyaWdodDogWzEwMCwgNDldLFxuXHRcdGJnR3JheTogWzEwMCwgNDldLCAvLyBBbGlhcyBvZiBgYmdCbGFja0JyaWdodGBcblx0XHRiZ0dyZXk6IFsxMDAsIDQ5XSwgLy8gQWxpYXMgb2YgYGJnQmxhY2tCcmlnaHRgXG5cdFx0YmdSZWRCcmlnaHQ6IFsxMDEsIDQ5XSxcblx0XHRiZ0dyZWVuQnJpZ2h0OiBbMTAyLCA0OV0sXG5cdFx0YmdZZWxsb3dCcmlnaHQ6IFsxMDMsIDQ5XSxcblx0XHRiZ0JsdWVCcmlnaHQ6IFsxMDQsIDQ5XSxcblx0XHRiZ01hZ2VudGFCcmlnaHQ6IFsxMDUsIDQ5XSxcblx0XHRiZ0N5YW5CcmlnaHQ6IFsxMDYsIDQ5XSxcblx0XHRiZ1doaXRlQnJpZ2h0OiBbMTA3LCA0OV0sXG5cdH0sXG59O1xuXG5leHBvcnQgY29uc3QgbW9kaWZpZXJOYW1lcyA9IE9iamVjdC5rZXlzKHN0eWxlcy5tb2RpZmllcik7XG5leHBvcnQgY29uc3QgZm9yZWdyb3VuZENvbG9yTmFtZXMgPSBPYmplY3Qua2V5cyhzdHlsZXMuY29sb3IpO1xuZXhwb3J0IGNvbnN0IGJhY2tncm91bmRDb2xvck5hbWVzID0gT2JqZWN0LmtleXMoc3R5bGVzLmJnQ29sb3IpO1xuZXhwb3J0IGNvbnN0IGNvbG9yTmFtZXMgPSBbLi4uZm9yZWdyb3VuZENvbG9yTmFtZXMsIC4uLmJhY2tncm91bmRDb2xvck5hbWVzXTtcblxuZnVuY3Rpb24gYXNzZW1ibGVTdHlsZXMoKSB7XG5cdGNvbnN0IGNvZGVzID0gbmV3IE1hcCgpO1xuXG5cdGZvciAoY29uc3QgW2dyb3VwTmFtZSwgZ3JvdXBdIG9mIE9iamVjdC5lbnRyaWVzKHN0eWxlcykpIHtcblx0XHRmb3IgKGNvbnN0IFtzdHlsZU5hbWUsIHN0eWxlXSBvZiBPYmplY3QuZW50cmllcyhncm91cCkpIHtcblx0XHRcdHN0eWxlc1tzdHlsZU5hbWVdID0ge1xuXHRcdFx0XHRvcGVuOiBgXFx1MDAxQlske3N0eWxlWzBdfW1gLFxuXHRcdFx0XHRjbG9zZTogYFxcdTAwMUJbJHtzdHlsZVsxXX1tYCxcblx0XHRcdH07XG5cblx0XHRcdGdyb3VwW3N0eWxlTmFtZV0gPSBzdHlsZXNbc3R5bGVOYW1lXTtcblxuXHRcdFx0Y29kZXMuc2V0KHN0eWxlWzBdLCBzdHlsZVsxXSk7XG5cdFx0fVxuXG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHN0eWxlcywgZ3JvdXBOYW1lLCB7XG5cdFx0XHR2YWx1ZTogZ3JvdXAsXG5cdFx0XHRlbnVtZXJhYmxlOiBmYWxzZSxcblx0XHR9KTtcblx0fVxuXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzdHlsZXMsICdjb2RlcycsIHtcblx0XHR2YWx1ZTogY29kZXMsXG5cdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdH0pO1xuXG5cdHN0eWxlcy5jb2xvci5jbG9zZSA9ICdcXHUwMDFCWzM5bSc7XG5cdHN0eWxlcy5iZ0NvbG9yLmNsb3NlID0gJ1xcdTAwMUJbNDltJztcblxuXHRzdHlsZXMuY29sb3IuYW5zaSA9IHdyYXBBbnNpMTYoKTtcblx0c3R5bGVzLmNvbG9yLmFuc2kyNTYgPSB3cmFwQW5zaTI1NigpO1xuXHRzdHlsZXMuY29sb3IuYW5zaTE2bSA9IHdyYXBBbnNpMTZtKCk7XG5cdHN0eWxlcy5iZ0NvbG9yLmFuc2kgPSB3cmFwQW5zaTE2KEFOU0lfQkFDS0dST1VORF9PRkZTRVQpO1xuXHRzdHlsZXMuYmdDb2xvci5hbnNpMjU2ID0gd3JhcEFuc2kyNTYoQU5TSV9CQUNLR1JPVU5EX09GRlNFVCk7XG5cdHN0eWxlcy5iZ0NvbG9yLmFuc2kxNm0gPSB3cmFwQW5zaTE2bShBTlNJX0JBQ0tHUk9VTkRfT0ZGU0VUKTtcblxuXHQvLyBGcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9RaXgtL2NvbG9yLWNvbnZlcnQvYmxvYi8zZjBlMGQ0ZTkyZTIzNTc5NmNjYjE3ZjZlODVjNzIwOTRhNjUxZjQ5L2NvbnZlcnNpb25zLmpzXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHN0eWxlcywge1xuXHRcdHJnYlRvQW5zaTI1Njoge1xuXHRcdFx0dmFsdWUocmVkLCBncmVlbiwgYmx1ZSkge1xuXHRcdFx0XHQvLyBXZSB1c2UgdGhlIGV4dGVuZGVkIGdyZXlzY2FsZSBwYWxldHRlIGhlcmUsIHdpdGggdGhlIGV4Y2VwdGlvbiBvZlxuXHRcdFx0XHQvLyBibGFjayBhbmQgd2hpdGUuIG5vcm1hbCBwYWxldHRlIG9ubHkgaGFzIDQgZ3JleXNjYWxlIHNoYWRlcy5cblx0XHRcdFx0aWYgKHJlZCA9PT0gZ3JlZW4gJiYgZ3JlZW4gPT09IGJsdWUpIHtcblx0XHRcdFx0XHRpZiAocmVkIDwgOCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIDE2O1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmIChyZWQgPiAyNDgpIHtcblx0XHRcdFx0XHRcdHJldHVybiAyMzE7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cmV0dXJuIE1hdGgucm91bmQoKChyZWQgLSA4KSAvIDI0NykgKiAyNCkgKyAyMzI7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gMTZcblx0XHRcdFx0XHQrICgzNiAqIE1hdGgucm91bmQocmVkIC8gMjU1ICogNSkpXG5cdFx0XHRcdFx0KyAoNiAqIE1hdGgucm91bmQoZ3JlZW4gLyAyNTUgKiA1KSlcblx0XHRcdFx0XHQrIE1hdGgucm91bmQoYmx1ZSAvIDI1NSAqIDUpO1xuXHRcdFx0fSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdH0sXG5cdFx0aGV4VG9SZ2I6IHtcblx0XHRcdHZhbHVlKGhleCkge1xuXHRcdFx0XHRjb25zdCBtYXRjaGVzID0gL1thLWZcXGRdezZ9fFthLWZcXGRdezN9L2kuZXhlYyhoZXgudG9TdHJpbmcoMTYpKTtcblx0XHRcdFx0aWYgKCFtYXRjaGVzKSB7XG5cdFx0XHRcdFx0cmV0dXJuIFswLCAwLCAwXTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGxldCBbY29sb3JTdHJpbmddID0gbWF0Y2hlcztcblxuXHRcdFx0XHRpZiAoY29sb3JTdHJpbmcubGVuZ3RoID09PSAzKSB7XG5cdFx0XHRcdFx0Y29sb3JTdHJpbmcgPSBbLi4uY29sb3JTdHJpbmddLm1hcChjaGFyYWN0ZXIgPT4gY2hhcmFjdGVyICsgY2hhcmFjdGVyKS5qb2luKCcnKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbnN0IGludGVnZXIgPSBOdW1iZXIucGFyc2VJbnQoY29sb3JTdHJpbmcsIDE2KTtcblxuXHRcdFx0XHRyZXR1cm4gW1xuXHRcdFx0XHRcdC8qIGVzbGludC1kaXNhYmxlIG5vLWJpdHdpc2UgKi9cblx0XHRcdFx0XHQoaW50ZWdlciA+PiAxNikgJiAweEZGLFxuXHRcdFx0XHRcdChpbnRlZ2VyID4+IDgpICYgMHhGRixcblx0XHRcdFx0XHRpbnRlZ2VyICYgMHhGRixcblx0XHRcdFx0XHQvKiBlc2xpbnQtZW5hYmxlIG5vLWJpdHdpc2UgKi9cblx0XHRcdFx0XTtcblx0XHRcdH0sXG5cdFx0XHRlbnVtZXJhYmxlOiBmYWxzZSxcblx0XHR9LFxuXHRcdGhleFRvQW5zaTI1Njoge1xuXHRcdFx0dmFsdWU6IGhleCA9PiBzdHlsZXMucmdiVG9BbnNpMjU2KC4uLnN0eWxlcy5oZXhUb1JnYihoZXgpKSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdH0sXG5cdFx0YW5zaTI1NlRvQW5zaToge1xuXHRcdFx0dmFsdWUoY29kZSkge1xuXHRcdFx0XHRpZiAoY29kZSA8IDgpIHtcblx0XHRcdFx0XHRyZXR1cm4gMzAgKyBjb2RlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGNvZGUgPCAxNikge1xuXHRcdFx0XHRcdHJldHVybiA5MCArIChjb2RlIC0gOCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRsZXQgcmVkO1xuXHRcdFx0XHRsZXQgZ3JlZW47XG5cdFx0XHRcdGxldCBibHVlO1xuXG5cdFx0XHRcdGlmIChjb2RlID49IDIzMikge1xuXHRcdFx0XHRcdHJlZCA9ICgoKGNvZGUgLSAyMzIpICogMTApICsgOCkgLyAyNTU7XG5cdFx0XHRcdFx0Z3JlZW4gPSByZWQ7XG5cdFx0XHRcdFx0Ymx1ZSA9IHJlZDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjb2RlIC09IDE2O1xuXG5cdFx0XHRcdFx0Y29uc3QgcmVtYWluZGVyID0gY29kZSAlIDM2O1xuXG5cdFx0XHRcdFx0cmVkID0gTWF0aC5mbG9vcihjb2RlIC8gMzYpIC8gNTtcblx0XHRcdFx0XHRncmVlbiA9IE1hdGguZmxvb3IocmVtYWluZGVyIC8gNikgLyA1O1xuXHRcdFx0XHRcdGJsdWUgPSAocmVtYWluZGVyICUgNikgLyA1O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3QgdmFsdWUgPSBNYXRoLm1heChyZWQsIGdyZWVuLCBibHVlKSAqIDI7XG5cblx0XHRcdFx0aWYgKHZhbHVlID09PSAwKSB7XG5cdFx0XHRcdFx0cmV0dXJuIDMwO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWJpdHdpc2Vcblx0XHRcdFx0bGV0IHJlc3VsdCA9IDMwICsgKChNYXRoLnJvdW5kKGJsdWUpIDw8IDIpIHwgKE1hdGgucm91bmQoZ3JlZW4pIDw8IDEpIHwgTWF0aC5yb3VuZChyZWQpKTtcblxuXHRcdFx0XHRpZiAodmFsdWUgPT09IDIpIHtcblx0XHRcdFx0XHRyZXN1bHQgKz0gNjA7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdFx0fSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdH0sXG5cdFx0cmdiVG9BbnNpOiB7XG5cdFx0XHR2YWx1ZTogKHJlZCwgZ3JlZW4sIGJsdWUpID0+IHN0eWxlcy5hbnNpMjU2VG9BbnNpKHN0eWxlcy5yZ2JUb0Fuc2kyNTYocmVkLCBncmVlbiwgYmx1ZSkpLFxuXHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0fSxcblx0XHRoZXhUb0Fuc2k6IHtcblx0XHRcdHZhbHVlOiBoZXggPT4gc3R5bGVzLmFuc2kyNTZUb0Fuc2koc3R5bGVzLmhleFRvQW5zaTI1NihoZXgpKSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdH0sXG5cdH0pO1xuXG5cdHJldHVybiBzdHlsZXM7XG59XG5cbmNvbnN0IGFuc2lTdHlsZXMgPSBhc3NlbWJsZVN0eWxlcygpO1xuXG5leHBvcnQgZGVmYXVsdCBhbnNpU3R5bGVzO1xuIiwgImltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5pbXBvcnQgb3MgZnJvbSAnbm9kZTpvcyc7XG5pbXBvcnQgdHR5IGZyb20gJ25vZGU6dHR5JztcblxuLy8gRnJvbTogaHR0cHM6Ly9naXRodWIuY29tL3NpbmRyZXNvcmh1cy9oYXMtZmxhZy9ibG9iL21haW4vaW5kZXguanNcbi8vLyBmdW5jdGlvbiBoYXNGbGFnKGZsYWcsIGFyZ3YgPSBnbG9iYWxUaGlzLkRlbm8/LmFyZ3MgPz8gcHJvY2Vzcy5hcmd2KSB7XG5mdW5jdGlvbiBoYXNGbGFnKGZsYWcsIGFyZ3YgPSBnbG9iYWxUaGlzLkRlbm8gPyBnbG9iYWxUaGlzLkRlbm8uYXJncyA6IHByb2Nlc3MuYXJndikge1xuXHRjb25zdCBwcmVmaXggPSBmbGFnLnN0YXJ0c1dpdGgoJy0nKSA/ICcnIDogKGZsYWcubGVuZ3RoID09PSAxID8gJy0nIDogJy0tJyk7XG5cdGNvbnN0IHBvc2l0aW9uID0gYXJndi5pbmRleE9mKHByZWZpeCArIGZsYWcpO1xuXHRjb25zdCB0ZXJtaW5hdG9yUG9zaXRpb24gPSBhcmd2LmluZGV4T2YoJy0tJyk7XG5cdHJldHVybiBwb3NpdGlvbiAhPT0gLTEgJiYgKHRlcm1pbmF0b3JQb3NpdGlvbiA9PT0gLTEgfHwgcG9zaXRpb24gPCB0ZXJtaW5hdG9yUG9zaXRpb24pO1xufVxuXG5jb25zdCB7ZW52fSA9IHByb2Nlc3M7XG5cbmxldCBmbGFnRm9yY2VDb2xvcjtcbmlmIChcblx0aGFzRmxhZygnbm8tY29sb3InKVxuXHR8fCBoYXNGbGFnKCduby1jb2xvcnMnKVxuXHR8fCBoYXNGbGFnKCdjb2xvcj1mYWxzZScpXG5cdHx8IGhhc0ZsYWcoJ2NvbG9yPW5ldmVyJylcbikge1xuXHRmbGFnRm9yY2VDb2xvciA9IDA7XG59IGVsc2UgaWYgKFxuXHRoYXNGbGFnKCdjb2xvcicpXG5cdHx8IGhhc0ZsYWcoJ2NvbG9ycycpXG5cdHx8IGhhc0ZsYWcoJ2NvbG9yPXRydWUnKVxuXHR8fCBoYXNGbGFnKCdjb2xvcj1hbHdheXMnKVxuKSB7XG5cdGZsYWdGb3JjZUNvbG9yID0gMTtcbn1cblxuZnVuY3Rpb24gZW52Rm9yY2VDb2xvcigpIHtcblx0aWYgKCdGT1JDRV9DT0xPUicgaW4gZW52KSB7XG5cdFx0aWYgKGVudi5GT1JDRV9DT0xPUiA9PT0gJ3RydWUnKSB7XG5cdFx0XHRyZXR1cm4gMTtcblx0XHR9XG5cblx0XHRpZiAoZW52LkZPUkNFX0NPTE9SID09PSAnZmFsc2UnKSB7XG5cdFx0XHRyZXR1cm4gMDtcblx0XHR9XG5cblx0XHRyZXR1cm4gZW52LkZPUkNFX0NPTE9SLmxlbmd0aCA9PT0gMCA/IDEgOiBNYXRoLm1pbihOdW1iZXIucGFyc2VJbnQoZW52LkZPUkNFX0NPTE9SLCAxMCksIDMpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHRyYW5zbGF0ZUxldmVsKGxldmVsKSB7XG5cdGlmIChsZXZlbCA9PT0gMCkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHJldHVybiB7XG5cdFx0bGV2ZWwsXG5cdFx0aGFzQmFzaWM6IHRydWUsXG5cdFx0aGFzMjU2OiBsZXZlbCA+PSAyLFxuXHRcdGhhczE2bTogbGV2ZWwgPj0gMyxcblx0fTtcbn1cblxuZnVuY3Rpb24gX3N1cHBvcnRzQ29sb3IoaGF2ZVN0cmVhbSwge3N0cmVhbUlzVFRZLCBzbmlmZkZsYWdzID0gdHJ1ZX0gPSB7fSkge1xuXHRjb25zdCBub0ZsYWdGb3JjZUNvbG9yID0gZW52Rm9yY2VDb2xvcigpO1xuXHRpZiAobm9GbGFnRm9yY2VDb2xvciAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0ZmxhZ0ZvcmNlQ29sb3IgPSBub0ZsYWdGb3JjZUNvbG9yO1xuXHR9XG5cblx0Y29uc3QgZm9yY2VDb2xvciA9IHNuaWZmRmxhZ3MgPyBmbGFnRm9yY2VDb2xvciA6IG5vRmxhZ0ZvcmNlQ29sb3I7XG5cblx0aWYgKGZvcmNlQ29sb3IgPT09IDApIHtcblx0XHRyZXR1cm4gMDtcblx0fVxuXG5cdGlmIChzbmlmZkZsYWdzKSB7XG5cdFx0aWYgKGhhc0ZsYWcoJ2NvbG9yPTE2bScpXG5cdFx0XHR8fCBoYXNGbGFnKCdjb2xvcj1mdWxsJylcblx0XHRcdHx8IGhhc0ZsYWcoJ2NvbG9yPXRydWVjb2xvcicpKSB7XG5cdFx0XHRyZXR1cm4gMztcblx0XHR9XG5cblx0XHRpZiAoaGFzRmxhZygnY29sb3I9MjU2JykpIHtcblx0XHRcdHJldHVybiAyO1xuXHRcdH1cblx0fVxuXG5cdC8vIENoZWNrIGZvciBBenVyZSBEZXZPcHMgcGlwZWxpbmVzLlxuXHQvLyBIYXMgdG8gYmUgYWJvdmUgdGhlIGAhc3RyZWFtSXNUVFlgIGNoZWNrLlxuXHRpZiAoJ1RGX0JVSUxEJyBpbiBlbnYgJiYgJ0FHRU5UX05BTUUnIGluIGVudikge1xuXHRcdHJldHVybiAxO1xuXHR9XG5cblx0aWYgKGhhdmVTdHJlYW0gJiYgIXN0cmVhbUlzVFRZICYmIGZvcmNlQ29sb3IgPT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiAwO1xuXHR9XG5cblx0Y29uc3QgbWluID0gZm9yY2VDb2xvciB8fCAwO1xuXG5cdGlmIChlbnYuVEVSTSA9PT0gJ2R1bWInKSB7XG5cdFx0cmV0dXJuIG1pbjtcblx0fVxuXG5cdGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInKSB7XG5cdFx0Ly8gV2luZG93cyAxMCBidWlsZCAxMDU4NiBpcyB0aGUgZmlyc3QgV2luZG93cyByZWxlYXNlIHRoYXQgc3VwcG9ydHMgMjU2IGNvbG9ycy5cblx0XHQvLyBXaW5kb3dzIDEwIGJ1aWxkIDE0OTMxIGlzIHRoZSBmaXJzdCByZWxlYXNlIHRoYXQgc3VwcG9ydHMgMTZtL1RydWVDb2xvci5cblx0XHRjb25zdCBvc1JlbGVhc2UgPSBvcy5yZWxlYXNlKCkuc3BsaXQoJy4nKTtcblx0XHRpZiAoXG5cdFx0XHROdW1iZXIob3NSZWxlYXNlWzBdKSA+PSAxMFxuXHRcdFx0JiYgTnVtYmVyKG9zUmVsZWFzZVsyXSkgPj0gMTBfNTg2XG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gTnVtYmVyKG9zUmVsZWFzZVsyXSkgPj0gMTRfOTMxID8gMyA6IDI7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIDE7XG5cdH1cblxuXHRpZiAoJ0NJJyBpbiBlbnYpIHtcblx0XHRpZiAoJ0dJVEhVQl9BQ1RJT05TJyBpbiBlbnYgfHwgJ0dJVEVBX0FDVElPTlMnIGluIGVudikge1xuXHRcdFx0cmV0dXJuIDM7XG5cdFx0fVxuXG5cdFx0aWYgKFsnVFJBVklTJywgJ0NJUkNMRUNJJywgJ0FQUFZFWU9SJywgJ0dJVExBQl9DSScsICdCVUlMREtJVEUnLCAnRFJPTkUnXS5zb21lKHNpZ24gPT4gc2lnbiBpbiBlbnYpIHx8IGVudi5DSV9OQU1FID09PSAnY29kZXNoaXAnKSB7XG5cdFx0XHRyZXR1cm4gMTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbWluO1xuXHR9XG5cblx0aWYgKCdURUFNQ0lUWV9WRVJTSU9OJyBpbiBlbnYpIHtcblx0XHRyZXR1cm4gL14oOVxcLigwKlsxLTldXFxkKilcXC58XFxkezIsfVxcLikvLnRlc3QoZW52LlRFQU1DSVRZX1ZFUlNJT04pID8gMSA6IDA7XG5cdH1cblxuXHRpZiAoZW52LkNPTE9SVEVSTSA9PT0gJ3RydWVjb2xvcicpIHtcblx0XHRyZXR1cm4gMztcblx0fVxuXG5cdGlmIChlbnYuVEVSTSA9PT0gJ3h0ZXJtLWtpdHR5Jykge1xuXHRcdHJldHVybiAzO1xuXHR9XG5cblx0aWYgKCdURVJNX1BST0dSQU0nIGluIGVudikge1xuXHRcdGNvbnN0IHZlcnNpb24gPSBOdW1iZXIucGFyc2VJbnQoKGVudi5URVJNX1BST0dSQU1fVkVSU0lPTiB8fCAnJykuc3BsaXQoJy4nKVswXSwgMTApO1xuXG5cdFx0c3dpdGNoIChlbnYuVEVSTV9QUk9HUkFNKSB7XG5cdFx0XHRjYXNlICdpVGVybS5hcHAnOiB7XG5cdFx0XHRcdHJldHVybiB2ZXJzaW9uID49IDMgPyAzIDogMjtcblx0XHRcdH1cblxuXHRcdFx0Y2FzZSAnQXBwbGVfVGVybWluYWwnOiB7XG5cdFx0XHRcdHJldHVybiAyO1xuXHRcdFx0fVxuXHRcdFx0Ly8gTm8gZGVmYXVsdFxuXHRcdH1cblx0fVxuXG5cdGlmICgvLTI1Nihjb2xvcik/JC9pLnRlc3QoZW52LlRFUk0pKSB7XG5cdFx0cmV0dXJuIDI7XG5cdH1cblxuXHRpZiAoL15zY3JlZW58Xnh0ZXJtfF52dDEwMHxednQyMjB8XnJ4dnR8Y29sb3J8YW5zaXxjeWd3aW58bGludXgvaS50ZXN0KGVudi5URVJNKSkge1xuXHRcdHJldHVybiAxO1xuXHR9XG5cblx0aWYgKCdDT0xPUlRFUk0nIGluIGVudikge1xuXHRcdHJldHVybiAxO1xuXHR9XG5cblx0cmV0dXJuIG1pbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVN1cHBvcnRzQ29sb3Ioc3RyZWFtLCBvcHRpb25zID0ge30pIHtcblx0Y29uc3QgbGV2ZWwgPSBfc3VwcG9ydHNDb2xvcihzdHJlYW0sIHtcblx0XHRzdHJlYW1Jc1RUWTogc3RyZWFtICYmIHN0cmVhbS5pc1RUWSxcblx0XHQuLi5vcHRpb25zLFxuXHR9KTtcblxuXHRyZXR1cm4gdHJhbnNsYXRlTGV2ZWwobGV2ZWwpO1xufVxuXG5jb25zdCBzdXBwb3J0c0NvbG9yID0ge1xuXHRzdGRvdXQ6IGNyZWF0ZVN1cHBvcnRzQ29sb3Ioe2lzVFRZOiB0dHkuaXNhdHR5KDEpfSksXG5cdHN0ZGVycjogY3JlYXRlU3VwcG9ydHNDb2xvcih7aXNUVFk6IHR0eS5pc2F0dHkoMil9KSxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHN1cHBvcnRzQ29sb3I7XG4iLCAiLy8gVE9ETzogV2hlbiB0YXJnZXRpbmcgTm9kZS5qcyAxNiwgdXNlIGBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2VBbGxgLlxuZXhwb3J0IGZ1bmN0aW9uIHN0cmluZ1JlcGxhY2VBbGwoc3RyaW5nLCBzdWJzdHJpbmcsIHJlcGxhY2VyKSB7XG5cdGxldCBpbmRleCA9IHN0cmluZy5pbmRleE9mKHN1YnN0cmluZyk7XG5cdGlmIChpbmRleCA9PT0gLTEpIHtcblx0XHRyZXR1cm4gc3RyaW5nO1xuXHR9XG5cblx0Y29uc3Qgc3Vic3RyaW5nTGVuZ3RoID0gc3Vic3RyaW5nLmxlbmd0aDtcblx0bGV0IGVuZEluZGV4ID0gMDtcblx0bGV0IHJldHVyblZhbHVlID0gJyc7XG5cdGRvIHtcblx0XHRyZXR1cm5WYWx1ZSArPSBzdHJpbmcuc2xpY2UoZW5kSW5kZXgsIGluZGV4KSArIHN1YnN0cmluZyArIHJlcGxhY2VyO1xuXHRcdGVuZEluZGV4ID0gaW5kZXggKyBzdWJzdHJpbmdMZW5ndGg7XG5cdFx0aW5kZXggPSBzdHJpbmcuaW5kZXhPZihzdWJzdHJpbmcsIGVuZEluZGV4KTtcblx0fSB3aGlsZSAoaW5kZXggIT09IC0xKTtcblxuXHRyZXR1cm5WYWx1ZSArPSBzdHJpbmcuc2xpY2UoZW5kSW5kZXgpO1xuXHRyZXR1cm4gcmV0dXJuVmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHJpbmdFbmNhc2VDUkxGV2l0aEZpcnN0SW5kZXgoc3RyaW5nLCBwcmVmaXgsIHBvc3RmaXgsIGluZGV4KSB7XG5cdGxldCBlbmRJbmRleCA9IDA7XG5cdGxldCByZXR1cm5WYWx1ZSA9ICcnO1xuXHRkbyB7XG5cdFx0Y29uc3QgZ290Q1IgPSBzdHJpbmdbaW5kZXggLSAxXSA9PT0gJ1xccic7XG5cdFx0cmV0dXJuVmFsdWUgKz0gc3RyaW5nLnNsaWNlKGVuZEluZGV4LCAoZ290Q1IgPyBpbmRleCAtIDEgOiBpbmRleCkpICsgcHJlZml4ICsgKGdvdENSID8gJ1xcclxcbicgOiAnXFxuJykgKyBwb3N0Zml4O1xuXHRcdGVuZEluZGV4ID0gaW5kZXggKyAxO1xuXHRcdGluZGV4ID0gc3RyaW5nLmluZGV4T2YoJ1xcbicsIGVuZEluZGV4KTtcblx0fSB3aGlsZSAoaW5kZXggIT09IC0xKTtcblxuXHRyZXR1cm5WYWx1ZSArPSBzdHJpbmcuc2xpY2UoZW5kSW5kZXgpO1xuXHRyZXR1cm4gcmV0dXJuVmFsdWU7XG59XG4iLCAiaW1wb3J0IGFuc2lTdHlsZXMgZnJvbSAnI2Fuc2ktc3R5bGVzJztcbmltcG9ydCBzdXBwb3J0c0NvbG9yIGZyb20gJyNzdXBwb3J0cy1jb2xvcic7XG5pbXBvcnQgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGltcG9ydC9vcmRlclxuXHRzdHJpbmdSZXBsYWNlQWxsLFxuXHRzdHJpbmdFbmNhc2VDUkxGV2l0aEZpcnN0SW5kZXgsXG59IGZyb20gJy4vdXRpbGl0aWVzLmpzJztcblxuY29uc3Qge3N0ZG91dDogc3Rkb3V0Q29sb3IsIHN0ZGVycjogc3RkZXJyQ29sb3J9ID0gc3VwcG9ydHNDb2xvcjtcblxuY29uc3QgR0VORVJBVE9SID0gU3ltYm9sKCdHRU5FUkFUT1InKTtcbmNvbnN0IFNUWUxFUiA9IFN5bWJvbCgnU1RZTEVSJyk7XG5jb25zdCBJU19FTVBUWSA9IFN5bWJvbCgnSVNfRU1QVFknKTtcblxuLy8gYHN1cHBvcnRzQ29sb3IubGV2ZWxgIFx1MjE5MiBgYW5zaVN0eWxlcy5jb2xvcltuYW1lXWAgbWFwcGluZ1xuY29uc3QgbGV2ZWxNYXBwaW5nID0gW1xuXHQnYW5zaScsXG5cdCdhbnNpJyxcblx0J2Fuc2kyNTYnLFxuXHQnYW5zaTE2bScsXG5dO1xuXG5jb25zdCBzdHlsZXMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG5jb25zdCBhcHBseU9wdGlvbnMgPSAob2JqZWN0LCBvcHRpb25zID0ge30pID0+IHtcblx0aWYgKG9wdGlvbnMubGV2ZWwgJiYgIShOdW1iZXIuaXNJbnRlZ2VyKG9wdGlvbnMubGV2ZWwpICYmIG9wdGlvbnMubGV2ZWwgPj0gMCAmJiBvcHRpb25zLmxldmVsIDw9IDMpKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdUaGUgYGxldmVsYCBvcHRpb24gc2hvdWxkIGJlIGFuIGludGVnZXIgZnJvbSAwIHRvIDMnKTtcblx0fVxuXG5cdC8vIERldGVjdCBsZXZlbCBpZiBub3Qgc2V0IG1hbnVhbGx5XG5cdGNvbnN0IGNvbG9yTGV2ZWwgPSBzdGRvdXRDb2xvciA/IHN0ZG91dENvbG9yLmxldmVsIDogMDtcblx0b2JqZWN0LmxldmVsID0gb3B0aW9ucy5sZXZlbCA9PT0gdW5kZWZpbmVkID8gY29sb3JMZXZlbCA6IG9wdGlvbnMubGV2ZWw7XG59O1xuXG5leHBvcnQgY2xhc3MgQ2hhbGsge1xuXHRjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnN0cnVjdG9yLXJldHVyblxuXHRcdHJldHVybiBjaGFsa0ZhY3Rvcnkob3B0aW9ucyk7XG5cdH1cbn1cblxuY29uc3QgY2hhbGtGYWN0b3J5ID0gb3B0aW9ucyA9PiB7XG5cdGNvbnN0IGNoYWxrID0gKC4uLnN0cmluZ3MpID0+IHN0cmluZ3Muam9pbignICcpO1xuXHRhcHBseU9wdGlvbnMoY2hhbGssIG9wdGlvbnMpO1xuXG5cdE9iamVjdC5zZXRQcm90b3R5cGVPZihjaGFsaywgY3JlYXRlQ2hhbGsucHJvdG90eXBlKTtcblxuXHRyZXR1cm4gY2hhbGs7XG59O1xuXG5mdW5jdGlvbiBjcmVhdGVDaGFsayhvcHRpb25zKSB7XG5cdHJldHVybiBjaGFsa0ZhY3Rvcnkob3B0aW9ucyk7XG59XG5cbk9iamVjdC5zZXRQcm90b3R5cGVPZihjcmVhdGVDaGFsay5wcm90b3R5cGUsIEZ1bmN0aW9uLnByb3RvdHlwZSk7XG5cbmZvciAoY29uc3QgW3N0eWxlTmFtZSwgc3R5bGVdIG9mIE9iamVjdC5lbnRyaWVzKGFuc2lTdHlsZXMpKSB7XG5cdHN0eWxlc1tzdHlsZU5hbWVdID0ge1xuXHRcdGdldCgpIHtcblx0XHRcdGNvbnN0IGJ1aWxkZXIgPSBjcmVhdGVCdWlsZGVyKHRoaXMsIGNyZWF0ZVN0eWxlcihzdHlsZS5vcGVuLCBzdHlsZS5jbG9zZSwgdGhpc1tTVFlMRVJdKSwgdGhpc1tJU19FTVBUWV0pO1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIHN0eWxlTmFtZSwge3ZhbHVlOiBidWlsZGVyfSk7XG5cdFx0XHRyZXR1cm4gYnVpbGRlcjtcblx0XHR9LFxuXHR9O1xufVxuXG5zdHlsZXMudmlzaWJsZSA9IHtcblx0Z2V0KCkge1xuXHRcdGNvbnN0IGJ1aWxkZXIgPSBjcmVhdGVCdWlsZGVyKHRoaXMsIHRoaXNbU1RZTEVSXSwgdHJ1ZSk7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICd2aXNpYmxlJywge3ZhbHVlOiBidWlsZGVyfSk7XG5cdFx0cmV0dXJuIGJ1aWxkZXI7XG5cdH0sXG59O1xuXG5jb25zdCBnZXRNb2RlbEFuc2kgPSAobW9kZWwsIGxldmVsLCB0eXBlLCAuLi5hcmd1bWVudHNfKSA9PiB7XG5cdGlmIChtb2RlbCA9PT0gJ3JnYicpIHtcblx0XHRpZiAobGV2ZWwgPT09ICdhbnNpMTZtJykge1xuXHRcdFx0cmV0dXJuIGFuc2lTdHlsZXNbdHlwZV0uYW5zaTE2bSguLi5hcmd1bWVudHNfKTtcblx0XHR9XG5cblx0XHRpZiAobGV2ZWwgPT09ICdhbnNpMjU2Jykge1xuXHRcdFx0cmV0dXJuIGFuc2lTdHlsZXNbdHlwZV0uYW5zaTI1NihhbnNpU3R5bGVzLnJnYlRvQW5zaTI1NiguLi5hcmd1bWVudHNfKSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGFuc2lTdHlsZXNbdHlwZV0uYW5zaShhbnNpU3R5bGVzLnJnYlRvQW5zaSguLi5hcmd1bWVudHNfKSk7XG5cdH1cblxuXHRpZiAobW9kZWwgPT09ICdoZXgnKSB7XG5cdFx0cmV0dXJuIGdldE1vZGVsQW5zaSgncmdiJywgbGV2ZWwsIHR5cGUsIC4uLmFuc2lTdHlsZXMuaGV4VG9SZ2IoLi4uYXJndW1lbnRzXykpO1xuXHR9XG5cblx0cmV0dXJuIGFuc2lTdHlsZXNbdHlwZV1bbW9kZWxdKC4uLmFyZ3VtZW50c18pO1xufTtcblxuY29uc3QgdXNlZE1vZGVscyA9IFsncmdiJywgJ2hleCcsICdhbnNpMjU2J107XG5cbmZvciAoY29uc3QgbW9kZWwgb2YgdXNlZE1vZGVscykge1xuXHRzdHlsZXNbbW9kZWxdID0ge1xuXHRcdGdldCgpIHtcblx0XHRcdGNvbnN0IHtsZXZlbH0gPSB0aGlzO1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uICguLi5hcmd1bWVudHNfKSB7XG5cdFx0XHRcdGNvbnN0IHN0eWxlciA9IGNyZWF0ZVN0eWxlcihnZXRNb2RlbEFuc2kobW9kZWwsIGxldmVsTWFwcGluZ1tsZXZlbF0sICdjb2xvcicsIC4uLmFyZ3VtZW50c18pLCBhbnNpU3R5bGVzLmNvbG9yLmNsb3NlLCB0aGlzW1NUWUxFUl0pO1xuXHRcdFx0XHRyZXR1cm4gY3JlYXRlQnVpbGRlcih0aGlzLCBzdHlsZXIsIHRoaXNbSVNfRU1QVFldKTtcblx0XHRcdH07XG5cdFx0fSxcblx0fTtcblxuXHRjb25zdCBiZ01vZGVsID0gJ2JnJyArIG1vZGVsWzBdLnRvVXBwZXJDYXNlKCkgKyBtb2RlbC5zbGljZSgxKTtcblx0c3R5bGVzW2JnTW9kZWxdID0ge1xuXHRcdGdldCgpIHtcblx0XHRcdGNvbnN0IHtsZXZlbH0gPSB0aGlzO1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uICguLi5hcmd1bWVudHNfKSB7XG5cdFx0XHRcdGNvbnN0IHN0eWxlciA9IGNyZWF0ZVN0eWxlcihnZXRNb2RlbEFuc2kobW9kZWwsIGxldmVsTWFwcGluZ1tsZXZlbF0sICdiZ0NvbG9yJywgLi4uYXJndW1lbnRzXyksIGFuc2lTdHlsZXMuYmdDb2xvci5jbG9zZSwgdGhpc1tTVFlMRVJdKTtcblx0XHRcdFx0cmV0dXJuIGNyZWF0ZUJ1aWxkZXIodGhpcywgc3R5bGVyLCB0aGlzW0lTX0VNUFRZXSk7XG5cdFx0XHR9O1xuXHRcdH0sXG5cdH07XG59XG5cbmNvbnN0IHByb3RvID0gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoKCkgPT4ge30sIHtcblx0Li4uc3R5bGVzLFxuXHRsZXZlbDoge1xuXHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0Z2V0KCkge1xuXHRcdFx0cmV0dXJuIHRoaXNbR0VORVJBVE9SXS5sZXZlbDtcblx0XHR9LFxuXHRcdHNldChsZXZlbCkge1xuXHRcdFx0dGhpc1tHRU5FUkFUT1JdLmxldmVsID0gbGV2ZWw7XG5cdFx0fSxcblx0fSxcbn0pO1xuXG5jb25zdCBjcmVhdGVTdHlsZXIgPSAob3BlbiwgY2xvc2UsIHBhcmVudCkgPT4ge1xuXHRsZXQgb3BlbkFsbDtcblx0bGV0IGNsb3NlQWxsO1xuXHRpZiAocGFyZW50ID09PSB1bmRlZmluZWQpIHtcblx0XHRvcGVuQWxsID0gb3Blbjtcblx0XHRjbG9zZUFsbCA9IGNsb3NlO1xuXHR9IGVsc2Uge1xuXHRcdG9wZW5BbGwgPSBwYXJlbnQub3BlbkFsbCArIG9wZW47XG5cdFx0Y2xvc2VBbGwgPSBjbG9zZSArIHBhcmVudC5jbG9zZUFsbDtcblx0fVxuXG5cdHJldHVybiB7XG5cdFx0b3Blbixcblx0XHRjbG9zZSxcblx0XHRvcGVuQWxsLFxuXHRcdGNsb3NlQWxsLFxuXHRcdHBhcmVudCxcblx0fTtcbn07XG5cbmNvbnN0IGNyZWF0ZUJ1aWxkZXIgPSAoc2VsZiwgX3N0eWxlciwgX2lzRW1wdHkpID0+IHtcblx0Ly8gU2luZ2xlIGFyZ3VtZW50IGlzIGhvdCBwYXRoLCBpbXBsaWNpdCBjb2VyY2lvbiBpcyBmYXN0ZXIgdGhhbiBhbnl0aGluZ1xuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8taW1wbGljaXQtY29lcmNpb25cblx0Y29uc3QgYnVpbGRlciA9ICguLi5hcmd1bWVudHNfKSA9PiBhcHBseVN0eWxlKGJ1aWxkZXIsIChhcmd1bWVudHNfLmxlbmd0aCA9PT0gMSkgPyAoJycgKyBhcmd1bWVudHNfWzBdKSA6IGFyZ3VtZW50c18uam9pbignICcpKTtcblxuXHQvLyBXZSBhbHRlciB0aGUgcHJvdG90eXBlIGJlY2F1c2Ugd2UgbXVzdCByZXR1cm4gYSBmdW5jdGlvbiwgYnV0IHRoZXJlIGlzXG5cdC8vIG5vIHdheSB0byBjcmVhdGUgYSBmdW5jdGlvbiB3aXRoIGEgZGlmZmVyZW50IHByb3RvdHlwZVxuXHRPYmplY3Quc2V0UHJvdG90eXBlT2YoYnVpbGRlciwgcHJvdG8pO1xuXG5cdGJ1aWxkZXJbR0VORVJBVE9SXSA9IHNlbGY7XG5cdGJ1aWxkZXJbU1RZTEVSXSA9IF9zdHlsZXI7XG5cdGJ1aWxkZXJbSVNfRU1QVFldID0gX2lzRW1wdHk7XG5cblx0cmV0dXJuIGJ1aWxkZXI7XG59O1xuXG5jb25zdCBhcHBseVN0eWxlID0gKHNlbGYsIHN0cmluZykgPT4ge1xuXHRpZiAoc2VsZi5sZXZlbCA8PSAwIHx8ICFzdHJpbmcpIHtcblx0XHRyZXR1cm4gc2VsZltJU19FTVBUWV0gPyAnJyA6IHN0cmluZztcblx0fVxuXG5cdGxldCBzdHlsZXIgPSBzZWxmW1NUWUxFUl07XG5cblx0aWYgKHN0eWxlciA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIHN0cmluZztcblx0fVxuXG5cdGNvbnN0IHtvcGVuQWxsLCBjbG9zZUFsbH0gPSBzdHlsZXI7XG5cdGlmIChzdHJpbmcuaW5jbHVkZXMoJ1xcdTAwMUInKSkge1xuXHRcdHdoaWxlIChzdHlsZXIgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Ly8gUmVwbGFjZSBhbnkgaW5zdGFuY2VzIGFscmVhZHkgcHJlc2VudCB3aXRoIGEgcmUtb3BlbmluZyBjb2RlXG5cdFx0XHQvLyBvdGhlcndpc2Ugb25seSB0aGUgcGFydCBvZiB0aGUgc3RyaW5nIHVudGlsIHNhaWQgY2xvc2luZyBjb2RlXG5cdFx0XHQvLyB3aWxsIGJlIGNvbG9yZWQsIGFuZCB0aGUgcmVzdCB3aWxsIHNpbXBseSBiZSAncGxhaW4nLlxuXHRcdFx0c3RyaW5nID0gc3RyaW5nUmVwbGFjZUFsbChzdHJpbmcsIHN0eWxlci5jbG9zZSwgc3R5bGVyLm9wZW4pO1xuXG5cdFx0XHRzdHlsZXIgPSBzdHlsZXIucGFyZW50O1xuXHRcdH1cblx0fVxuXG5cdC8vIFdlIGNhbiBtb3ZlIGJvdGggbmV4dCBhY3Rpb25zIG91dCBvZiBsb29wLCBiZWNhdXNlIHJlbWFpbmluZyBhY3Rpb25zIGluIGxvb3Agd29uJ3QgaGF2ZVxuXHQvLyBhbnkvdmlzaWJsZSBlZmZlY3Qgb24gcGFydHMgd2UgYWRkIGhlcmUuIENsb3NlIHRoZSBzdHlsaW5nIGJlZm9yZSBhIGxpbmVicmVhayBhbmQgcmVvcGVuXG5cdC8vIGFmdGVyIG5leHQgbGluZSB0byBmaXggYSBibGVlZCBpc3N1ZSBvbiBtYWNPUzogaHR0cHM6Ly9naXRodWIuY29tL2NoYWxrL2NoYWxrL3B1bGwvOTJcblx0Y29uc3QgbGZJbmRleCA9IHN0cmluZy5pbmRleE9mKCdcXG4nKTtcblx0aWYgKGxmSW5kZXggIT09IC0xKSB7XG5cdFx0c3RyaW5nID0gc3RyaW5nRW5jYXNlQ1JMRldpdGhGaXJzdEluZGV4KHN0cmluZywgY2xvc2VBbGwsIG9wZW5BbGwsIGxmSW5kZXgpO1xuXHR9XG5cblx0cmV0dXJuIG9wZW5BbGwgKyBzdHJpbmcgKyBjbG9zZUFsbDtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGNyZWF0ZUNoYWxrLnByb3RvdHlwZSwgc3R5bGVzKTtcblxuY29uc3QgY2hhbGsgPSBjcmVhdGVDaGFsaygpO1xuZXhwb3J0IGNvbnN0IGNoYWxrU3RkZXJyID0gY3JlYXRlQ2hhbGsoe2xldmVsOiBzdGRlcnJDb2xvciA/IHN0ZGVyckNvbG9yLmxldmVsIDogMH0pO1xuXG5leHBvcnQge1xuXHRtb2RpZmllck5hbWVzLFxuXHRmb3JlZ3JvdW5kQ29sb3JOYW1lcyxcblx0YmFja2dyb3VuZENvbG9yTmFtZXMsXG5cdGNvbG9yTmFtZXMsXG5cblx0Ly8gVE9ETzogUmVtb3ZlIHRoZXNlIGFsaWFzZXMgaW4gdGhlIG5leHQgbWFqb3IgdmVyc2lvblxuXHRtb2RpZmllck5hbWVzIGFzIG1vZGlmaWVycyxcblx0Zm9yZWdyb3VuZENvbG9yTmFtZXMgYXMgZm9yZWdyb3VuZENvbG9ycyxcblx0YmFja2dyb3VuZENvbG9yTmFtZXMgYXMgYmFja2dyb3VuZENvbG9ycyxcblx0Y29sb3JOYW1lcyBhcyBjb2xvcnMsXG59IGZyb20gJy4vdmVuZG9yL2Fuc2ktc3R5bGVzL2luZGV4LmpzJztcblxuZXhwb3J0IHtcblx0c3Rkb3V0Q29sb3IgYXMgc3VwcG9ydHNDb2xvcixcblx0c3RkZXJyQ29sb3IgYXMgc3VwcG9ydHNDb2xvclN0ZGVycixcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNoYWxrO1xuIiwgImltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5pbXBvcnQgcmVzdG9yZUN1cnNvciBmcm9tICdyZXN0b3JlLWN1cnNvcic7XG5cbmxldCBpc0hpZGRlbiA9IGZhbHNlO1xuXG5jb25zdCBjbGlDdXJzb3IgPSB7fTtcblxuY2xpQ3Vyc29yLnNob3cgPSAod3JpdGFibGVTdHJlYW0gPSBwcm9jZXNzLnN0ZGVycikgPT4ge1xuXHRpZiAoIXdyaXRhYmxlU3RyZWFtLmlzVFRZKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aXNIaWRkZW4gPSBmYWxzZTtcblx0d3JpdGFibGVTdHJlYW0ud3JpdGUoJ1xcdTAwMUJbPzI1aCcpO1xufTtcblxuY2xpQ3Vyc29yLmhpZGUgPSAod3JpdGFibGVTdHJlYW0gPSBwcm9jZXNzLnN0ZGVycikgPT4ge1xuXHRpZiAoIXdyaXRhYmxlU3RyZWFtLmlzVFRZKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0cmVzdG9yZUN1cnNvcigpO1xuXHRpc0hpZGRlbiA9IHRydWU7XG5cdHdyaXRhYmxlU3RyZWFtLndyaXRlKCdcXHUwMDFCWz8yNWwnKTtcbn07XG5cbmNsaUN1cnNvci50b2dnbGUgPSAoZm9yY2UsIHdyaXRhYmxlU3RyZWFtKSA9PiB7XG5cdGlmIChmb3JjZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0aXNIaWRkZW4gPSBmb3JjZTtcblx0fVxuXG5cdGlmIChpc0hpZGRlbikge1xuXHRcdGNsaUN1cnNvci5zaG93KHdyaXRhYmxlU3RyZWFtKTtcblx0fSBlbHNlIHtcblx0XHRjbGlDdXJzb3IuaGlkZSh3cml0YWJsZVN0cmVhbSk7XG5cdH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNsaUN1cnNvcjtcbiIsICJpbXBvcnQgcHJvY2VzcyBmcm9tICdub2RlOnByb2Nlc3MnO1xuaW1wb3J0IG9uZXRpbWUgZnJvbSAnb25ldGltZSc7XG5pbXBvcnQgc2lnbmFsRXhpdCBmcm9tICdzaWduYWwtZXhpdCc7XG5cbmNvbnN0IHJlc3RvcmVDdXJzb3IgPSBvbmV0aW1lKCgpID0+IHtcblx0c2lnbmFsRXhpdCgoKSA9PiB7XG5cdFx0cHJvY2Vzcy5zdGRlcnIud3JpdGUoJ1xcdTAwMUJbPzI1aCcpO1xuXHR9LCB7YWx3YXlzTGFzdDogdHJ1ZX0pO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IHJlc3RvcmVDdXJzb3I7XG4iLCAiaW1wb3J0IHByb2Nlc3MgZnJvbSAnbm9kZTpwcm9jZXNzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNVbmljb2RlU3VwcG9ydGVkKCkge1xuXHRpZiAocHJvY2Vzcy5wbGF0Zm9ybSAhPT0gJ3dpbjMyJykge1xuXHRcdHJldHVybiBwcm9jZXNzLmVudi5URVJNICE9PSAnbGludXgnOyAvLyBMaW51eCBjb25zb2xlIChrZXJuZWwpXG5cdH1cblxuXHRyZXR1cm4gQm9vbGVhbihwcm9jZXNzLmVudi5DSSlcblx0XHR8fCBCb29sZWFuKHByb2Nlc3MuZW52LldUX1NFU1NJT04pIC8vIFdpbmRvd3MgVGVybWluYWxcblx0XHR8fCBCb29sZWFuKHByb2Nlc3MuZW52LlRFUk1JTlVTX1NVQkxJTUUpIC8vIFRlcm1pbnVzICg8MC4yLjI3KVxuXHRcdHx8IHByb2Nlc3MuZW52LkNvbkVtdVRhc2sgPT09ICd7Y21kOjpDbWRlcn0nIC8vIENvbkVtdSBhbmQgY21kZXJcblx0XHR8fCBwcm9jZXNzLmVudi5URVJNX1BST0dSQU0gPT09ICdUZXJtaW51cy1TdWJsaW1lJ1xuXHRcdHx8IHByb2Nlc3MuZW52LlRFUk1fUFJPR1JBTSA9PT0gJ3ZzY29kZSdcblx0XHR8fCBwcm9jZXNzLmVudi5URVJNID09PSAneHRlcm0tMjU2Y29sb3InXG5cdFx0fHwgcHJvY2Vzcy5lbnYuVEVSTSA9PT0gJ2FsYWNyaXR0eSdcblx0XHR8fCBwcm9jZXNzLmVudi5URVJNSU5BTF9FTVVMQVRPUiA9PT0gJ0pldEJyYWlucy1KZWRpVGVybSc7XG59XG4iLCAiaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJztcbmltcG9ydCBpc1VuaWNvZGVTdXBwb3J0ZWQgZnJvbSAnaXMtdW5pY29kZS1zdXBwb3J0ZWQnO1xuXG5jb25zdCBtYWluID0ge1xuXHRpbmZvOiBjaGFsay5ibHVlKCdcdTIxMzknKSxcblx0c3VjY2VzczogY2hhbGsuZ3JlZW4oJ1x1MjcxNCcpLFxuXHR3YXJuaW5nOiBjaGFsay55ZWxsb3coJ1x1MjZBMCcpLFxuXHRlcnJvcjogY2hhbGsucmVkKCdcdTI3MTYnKSxcbn07XG5cbmNvbnN0IGZhbGxiYWNrID0ge1xuXHRpbmZvOiBjaGFsay5ibHVlKCdpJyksXG5cdHN1Y2Nlc3M6IGNoYWxrLmdyZWVuKCdcdTIyMUEnKSxcblx0d2FybmluZzogY2hhbGsueWVsbG93KCdcdTIwM0MnKSxcblx0ZXJyb3I6IGNoYWxrLnJlZCgnXHUwMEQ3JyksXG59O1xuXG5jb25zdCBsb2dTeW1ib2xzID0gaXNVbmljb2RlU3VwcG9ydGVkKCkgPyBtYWluIDogZmFsbGJhY2s7XG5cbmV4cG9ydCBkZWZhdWx0IGxvZ1N5bWJvbHM7XG4iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYW5zaVJlZ2V4KHtvbmx5Rmlyc3QgPSBmYWxzZX0gPSB7fSkge1xuXHRjb25zdCBwYXR0ZXJuID0gW1xuXHQgICAgJ1tcXFxcdTAwMUJcXFxcdTAwOUJdW1tcXFxcXSgpIzs/XSooPzooPzooPzooPzo7Wy1hLXpBLVpcXFxcZFxcXFwvIyYuOj0/JUB+X10rKSp8W2EtekEtWlxcXFxkXSsoPzo7Wy1hLXpBLVpcXFxcZFxcXFwvIyYuOj0/JUB+X10qKSopP1xcXFx1MDAwNyknLFxuXHRcdCcoPzooPzpcXFxcZHsxLDR9KD86O1xcXFxkezAsNH0pKik/W1xcXFxkQS1QUi1UWmNmLW50cXJ5PT48fl0pKSdcblx0XS5qb2luKCd8Jyk7XG5cblx0cmV0dXJuIG5ldyBSZWdFeHAocGF0dGVybiwgb25seUZpcnN0ID8gdW5kZWZpbmVkIDogJ2cnKTtcbn1cbiIsICJpbXBvcnQgYW5zaVJlZ2V4IGZyb20gJ2Fuc2ktcmVnZXgnO1xuXG5jb25zdCByZWdleCA9IGFuc2lSZWdleCgpO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzdHJpcEFuc2koc3RyaW5nKSB7XG5cdGlmICh0eXBlb2Ygc3RyaW5nICE9PSAnc3RyaW5nJykge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoYEV4cGVjdGVkIGEgXFxgc3RyaW5nXFxgLCBnb3QgXFxgJHt0eXBlb2Ygc3RyaW5nfVxcYGApO1xuXHR9XG5cblx0Ly8gRXZlbiB0aG91Z2ggdGhlIHJlZ2V4IGlzIGdsb2JhbCwgd2UgZG9uJ3QgbmVlZCB0byByZXNldCB0aGUgYC5sYXN0SW5kZXhgXG5cdC8vIGJlY2F1c2UgdW5saWtlIGAuZXhlYygpYCBhbmQgYC50ZXN0KClgLCBgLnJlcGxhY2UoKWAgZG9lcyBpdCBhdXRvbWF0aWNhbGx5XG5cdC8vIGFuZCBkb2luZyBpdCBtYW51YWxseSBoYXMgYSBwZXJmb3JtYW5jZSBwZW5hbHR5LlxuXHRyZXR1cm4gc3RyaW5nLnJlcGxhY2UocmVnZXgsICcnKTtcbn1cbiIsICJpbXBvcnQgc3RyaXBBbnNpIGZyb20gJ3N0cmlwLWFuc2knO1xuaW1wb3J0IGVhc3RBc2lhbldpZHRoIGZyb20gJ2Vhc3Rhc2lhbndpZHRoJztcbmltcG9ydCBlbW9qaVJlZ2V4IGZyb20gJ2Vtb2ppLXJlZ2V4JztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc3RyaW5nV2lkdGgoc3RyaW5nLCBvcHRpb25zKSB7XG5cdGlmICh0eXBlb2Ygc3RyaW5nICE9PSAnc3RyaW5nJyB8fCBzdHJpbmcubGVuZ3RoID09PSAwKSB7XG5cdFx0cmV0dXJuIDA7XG5cdH1cblxuXHRvcHRpb25zID0ge1xuXHRcdGFtYmlndW91c0lzTmFycm93OiB0cnVlLFxuXHRcdGNvdW50QW5zaUVzY2FwZUNvZGVzOiBmYWxzZSxcblx0XHQuLi5vcHRpb25zLFxuXHR9O1xuXG5cdGlmICghb3B0aW9ucy5jb3VudEFuc2lFc2NhcGVDb2Rlcykge1xuXHRcdHN0cmluZyA9IHN0cmlwQW5zaShzdHJpbmcpO1xuXHR9XG5cblx0aWYgKHN0cmluZy5sZW5ndGggPT09IDApIHtcblx0XHRyZXR1cm4gMDtcblx0fVxuXG5cdGNvbnN0IGFtYmlndW91c0NoYXJhY3RlcldpZHRoID0gb3B0aW9ucy5hbWJpZ3VvdXNJc05hcnJvdyA/IDEgOiAyO1xuXHRsZXQgd2lkdGggPSAwO1xuXG5cdGZvciAoY29uc3Qge3NlZ21lbnQ6IGNoYXJhY3Rlcn0gb2YgbmV3IEludGwuU2VnbWVudGVyKCkuc2VnbWVudChzdHJpbmcpKSB7XG5cdFx0Y29uc3QgY29kZVBvaW50ID0gY2hhcmFjdGVyLmNvZGVQb2ludEF0KDApO1xuXG5cdFx0Ly8gSWdub3JlIGNvbnRyb2wgY2hhcmFjdGVyc1xuXHRcdGlmIChjb2RlUG9pbnQgPD0gMHgxRiB8fCAoY29kZVBvaW50ID49IDB4N0YgJiYgY29kZVBvaW50IDw9IDB4OUYpKSB7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHQvLyBJZ25vcmUgY29tYmluaW5nIGNoYXJhY3RlcnNcblx0XHRpZiAoY29kZVBvaW50ID49IDB4M18wMCAmJiBjb2RlUG9pbnQgPD0gMHgzXzZGKSB7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRpZiAoZW1vamlSZWdleCgpLnRlc3QoY2hhcmFjdGVyKSkge1xuXHRcdFx0d2lkdGggKz0gMjtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGNvbnN0IGNvZGUgPSBlYXN0QXNpYW5XaWR0aC5lYXN0QXNpYW5XaWR0aChjaGFyYWN0ZXIpO1xuXHRcdHN3aXRjaCAoY29kZSkge1xuXHRcdFx0Y2FzZSAnRic6XG5cdFx0XHRjYXNlICdXJzoge1xuXHRcdFx0XHR3aWR0aCArPSAyO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblxuXHRcdFx0Y2FzZSAnQSc6IHtcblx0XHRcdFx0d2lkdGggKz0gYW1iaWd1b3VzQ2hhcmFjdGVyV2lkdGg7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXG5cdFx0XHRkZWZhdWx0OiB7XG5cdFx0XHRcdHdpZHRoICs9IDE7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHdpZHRoO1xufVxuIiwgImV4cG9ydCBkZWZhdWx0ICgpID0+IHtcblx0Ly8gaHR0cHM6Ly9tdGhzLmJlL2Vtb2ppXG5cdHJldHVybiAvWyMqMC05XVxcdUZFMEY/XFx1MjBFM3xbXFx4QTlcXHhBRVxcdTIwM0NcXHUyMDQ5XFx1MjEyMlxcdTIxMzlcXHUyMTk0LVxcdTIxOTlcXHUyMUE5XFx1MjFBQVxcdTIzMUFcXHUyMzFCXFx1MjMyOFxcdTIzQ0ZcXHUyM0VELVxcdTIzRUZcXHUyM0YxXFx1MjNGMlxcdTIzRjgtXFx1MjNGQVxcdTI0QzJcXHUyNUFBXFx1MjVBQlxcdTI1QjZcXHUyNUMwXFx1MjVGQlxcdTI1RkNcXHUyNUZFXFx1MjYwMC1cXHUyNjA0XFx1MjYwRVxcdTI2MTFcXHUyNjE0XFx1MjYxNVxcdTI2MThcXHUyNjIwXFx1MjYyMlxcdTI2MjNcXHUyNjI2XFx1MjYyQVxcdTI2MkVcXHUyNjJGXFx1MjYzOC1cXHUyNjNBXFx1MjY0MFxcdTI2NDJcXHUyNjQ4LVxcdTI2NTNcXHUyNjVGXFx1MjY2MFxcdTI2NjNcXHUyNjY1XFx1MjY2NlxcdTI2NjhcXHUyNjdCXFx1MjY3RVxcdTI2N0ZcXHUyNjkyXFx1MjY5NC1cXHUyNjk3XFx1MjY5OVxcdTI2OUJcXHUyNjlDXFx1MjZBMFxcdTI2QTdcXHUyNkFBXFx1MjZCMFxcdTI2QjFcXHUyNkJEXFx1MjZCRVxcdTI2QzRcXHUyNkM4XFx1MjZDRlxcdTI2RDFcXHUyNkQzXFx1MjZFOVxcdTI2RjAtXFx1MjZGNVxcdTI2RjdcXHUyNkY4XFx1MjZGQVxcdTI3MDJcXHUyNzA4XFx1MjcwOVxcdTI3MEZcXHUyNzEyXFx1MjcxNFxcdTI3MTZcXHUyNzFEXFx1MjcyMVxcdTI3MzNcXHUyNzM0XFx1Mjc0NFxcdTI3NDdcXHUyNzU3XFx1Mjc2M1xcdTI3QTFcXHUyOTM0XFx1MjkzNVxcdTJCMDUtXFx1MkIwN1xcdTJCMUJcXHUyQjFDXFx1MkI1NVxcdTMwMzBcXHUzMDNEXFx1MzI5N1xcdTMyOTldXFx1RkUwRj98W1xcdTI2MURcXHUyNzBDXFx1MjcwRF0oPzpcXHVGRTBGfFxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSk/fFtcXHUyNzBBXFx1MjcwQl0oPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl0pP3xbXFx1MjNFOS1cXHUyM0VDXFx1MjNGMFxcdTIzRjNcXHUyNUZEXFx1MjY5M1xcdTI2QTFcXHUyNkFCXFx1MjZDNVxcdTI2Q0VcXHUyNkQ0XFx1MjZFQVxcdTI2RkRcXHUyNzA1XFx1MjcyOFxcdTI3NENcXHUyNzRFXFx1Mjc1My1cXHUyNzU1XFx1Mjc5NS1cXHUyNzk3XFx1MjdCMFxcdTI3QkZcXHUyQjUwXXxcXHUyNkY5KD86XFx1RkUwRnxcXHVEODNDW1xcdURGRkItXFx1REZGRl0pPyg/OlxcdTIwMERbXFx1MjY0MFxcdTI2NDJdXFx1RkUwRj8pP3xcXHUyNzY0XFx1RkUwRj8oPzpcXHUyMDBEKD86XFx1RDgzRFxcdUREMjV8XFx1RDgzRVxcdURFNzkpKT98XFx1RDgzQyg/OltcXHVEQzA0XFx1REQ3MFxcdURENzFcXHVERDdFXFx1REQ3RlxcdURFMDJcXHVERTM3XFx1REYyMVxcdURGMjQtXFx1REYyQ1xcdURGMzZcXHVERjdEXFx1REY5NlxcdURGOTdcXHVERjk5LVxcdURGOUJcXHVERjlFXFx1REY5RlxcdURGQ0RcXHVERkNFXFx1REZENC1cXHVERkRGXFx1REZGNVxcdURGRjddXFx1RkUwRj98W1xcdURGODVcXHVERkMyXFx1REZDN10oPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl0pP3xbXFx1REZDM1xcdURGQzRcXHVERkNBXSg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSk/KD86XFx1MjAwRFtcXHUyNjQwXFx1MjY0Ml1cXHVGRTBGPyk/fFtcXHVERkNCXFx1REZDQ10oPzpcXHVGRTBGfFxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSk/KD86XFx1MjAwRFtcXHUyNjQwXFx1MjY0Ml1cXHVGRTBGPyk/fFtcXHVEQ0NGXFx1REQ4RVxcdUREOTEtXFx1REQ5QVxcdURFMDFcXHVERTFBXFx1REUyRlxcdURFMzItXFx1REUzNlxcdURFMzgtXFx1REUzQVxcdURFNTBcXHVERTUxXFx1REYwMC1cXHVERjIwXFx1REYyRC1cXHVERjM1XFx1REYzNy1cXHVERjdDXFx1REY3RS1cXHVERjg0XFx1REY4Ni1cXHVERjkzXFx1REZBMC1cXHVERkMxXFx1REZDNVxcdURGQzZcXHVERkM4XFx1REZDOVxcdURGQ0YtXFx1REZEM1xcdURGRTAtXFx1REZGMFxcdURGRjgtXFx1REZGRl18XFx1RERFNlxcdUQ4M0NbXFx1RERFOC1cXHVEREVDXFx1RERFRVxcdURERjFcXHVEREYyXFx1RERGNFxcdURERjYtXFx1RERGQVxcdURERkNcXHVEREZEXFx1RERGRl18XFx1RERFN1xcdUQ4M0NbXFx1RERFNlxcdURERTdcXHVEREU5LVxcdURERUZcXHVEREYxLVxcdURERjRcXHVEREY2LVxcdURERjlcXHVEREZCXFx1RERGQ1xcdURERkVcXHVEREZGXXxcXHVEREU4XFx1RDgzQ1tcXHVEREU2XFx1RERFOFxcdURERTlcXHVEREVCLVxcdURERUVcXHVEREYwLVxcdURERjVcXHVEREY3XFx1RERGQS1cXHVEREZGXXxcXHVEREU5XFx1RDgzQ1tcXHVEREVBXFx1RERFQ1xcdURERUZcXHVEREYwXFx1RERGMlxcdURERjRcXHVEREZGXXxcXHVEREVBXFx1RDgzQ1tcXHVEREU2XFx1RERFOFxcdURERUFcXHVEREVDXFx1RERFRFxcdURERjctXFx1RERGQV18XFx1RERFQlxcdUQ4M0NbXFx1RERFRS1cXHVEREYwXFx1RERGMlxcdURERjRcXHVEREY3XXxcXHVEREVDXFx1RDgzQ1tcXHVEREU2XFx1RERFN1xcdURERTktXFx1RERFRVxcdURERjEtXFx1RERGM1xcdURERjUtXFx1RERGQVxcdURERkNcXHVEREZFXXxcXHVEREVEXFx1RDgzQ1tcXHVEREYwXFx1RERGMlxcdURERjNcXHVEREY3XFx1RERGOVxcdURERkFdfFxcdURERUVcXHVEODNDW1xcdURERTgtXFx1RERFQVxcdURERjEtXFx1RERGNFxcdURERjYtXFx1RERGOV18XFx1RERFRlxcdUQ4M0NbXFx1RERFQVxcdURERjJcXHVEREY0XFx1RERGNV18XFx1RERGMFxcdUQ4M0NbXFx1RERFQVxcdURERUMtXFx1RERFRVxcdURERjJcXHVEREYzXFx1RERGNVxcdURERjdcXHVEREZDXFx1RERGRVxcdURERkZdfFxcdURERjFcXHVEODNDW1xcdURERTYtXFx1RERFOFxcdURERUVcXHVEREYwXFx1RERGNy1cXHVEREZCXFx1RERGRV18XFx1RERGMlxcdUQ4M0NbXFx1RERFNlxcdURERTgtXFx1RERFRFxcdURERjAtXFx1RERGRl18XFx1RERGM1xcdUQ4M0NbXFx1RERFNlxcdURERThcXHVEREVBLVxcdURERUNcXHVEREVFXFx1RERGMVxcdURERjRcXHVEREY1XFx1RERGN1xcdURERkFcXHVEREZGXXxcXHVEREY0XFx1RDgzQ1xcdURERjJ8XFx1RERGNVxcdUQ4M0NbXFx1RERFNlxcdURERUEtXFx1RERFRFxcdURERjAtXFx1RERGM1xcdURERjctXFx1RERGOVxcdURERkNcXHVEREZFXXxcXHVEREY2XFx1RDgzQ1xcdURERTZ8XFx1RERGN1xcdUQ4M0NbXFx1RERFQVxcdURERjRcXHVEREY4XFx1RERGQVxcdURERkNdfFxcdURERjhcXHVEODNDW1xcdURERTYtXFx1RERFQVxcdURERUMtXFx1RERGNFxcdURERjctXFx1RERGOVxcdURERkJcXHVEREZELVxcdURERkZdfFxcdURERjlcXHVEODNDW1xcdURERTZcXHVEREU4XFx1RERFOVxcdURERUItXFx1RERFRFxcdURERUYtXFx1RERGNFxcdURERjdcXHVEREY5XFx1RERGQlxcdURERkNcXHVEREZGXXxcXHVEREZBXFx1RDgzQ1tcXHVEREU2XFx1RERFQ1xcdURERjJcXHVEREYzXFx1RERGOFxcdURERkVcXHVEREZGXXxcXHVEREZCXFx1RDgzQ1tcXHVEREU2XFx1RERFOFxcdURERUFcXHVEREVDXFx1RERFRVxcdURERjNcXHVEREZBXXxcXHVEREZDXFx1RDgzQ1tcXHVEREVCXFx1RERGOF18XFx1RERGRFxcdUQ4M0NcXHVEREYwfFxcdURERkVcXHVEODNDW1xcdURERUFcXHVEREY5XXxcXHVEREZGXFx1RDgzQ1tcXHVEREU2XFx1RERGMlxcdURERkNdfFxcdURGRjNcXHVGRTBGPyg/OlxcdTIwMEQoPzpcXHUyNkE3XFx1RkUwRj98XFx1RDgzQ1xcdURGMDgpKT98XFx1REZGNCg/OlxcdTIwMERcXHUyNjIwXFx1RkUwRj98XFx1REI0MFxcdURDNjdcXHVEQjQwXFx1REM2MlxcdURCNDAoPzpcXHVEQzY1XFx1REI0MFxcdURDNkVcXHVEQjQwXFx1REM2N3xcXHVEQzczXFx1REI0MFxcdURDNjNcXHVEQjQwXFx1REM3NHxcXHVEQzc3XFx1REI0MFxcdURDNkNcXHVEQjQwXFx1REM3MylcXHVEQjQwXFx1REM3Rik/KXxcXHVEODNEKD86W1xcdURDMDhcXHVEQzI2XSg/OlxcdTIwMERcXHUyQjFCKT98W1xcdURDM0ZcXHVEQ0ZEXFx1REQ0OVxcdURENEFcXHVERDZGXFx1REQ3MFxcdURENzNcXHVERDc2LVxcdURENzlcXHVERDg3XFx1REQ4QS1cXHVERDhEXFx1RERBNVxcdUREQThcXHVEREIxXFx1RERCMlxcdUREQkNcXHVEREMyLVxcdUREQzRcXHVEREQxLVxcdURERDNcXHVERERDLVxcdUREREVcXHVEREUxXFx1RERFM1xcdURERThcXHVEREVGXFx1RERGM1xcdURERkFcXHVERUNCXFx1REVDRC1cXHVERUNGXFx1REVFMC1cXHVERUU1XFx1REVFOVxcdURFRjBcXHVERUYzXVxcdUZFMEY/fFtcXHVEQzQyXFx1REM0M1xcdURDNDYtXFx1REM1MFxcdURDNjZcXHVEQzY3XFx1REM2Qi1cXHVEQzZEXFx1REM3MlxcdURDNzQtXFx1REM3NlxcdURDNzhcXHVEQzdDXFx1REM4M1xcdURDODVcXHVEQzhGXFx1REM5MVxcdURDQUFcXHVERDdBXFx1REQ5NVxcdUREOTZcXHVERTRDXFx1REU0RlxcdURFQzBcXHVERUNDXSg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSk/fFtcXHVEQzZFXFx1REM3MFxcdURDNzFcXHVEQzczXFx1REM3N1xcdURDODFcXHVEQzgyXFx1REM4NlxcdURDODdcXHVERTQ1LVxcdURFNDdcXHVERTRCXFx1REU0RFxcdURFNEVcXHVERUEzXFx1REVCNC1cXHVERUI2XSg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSk/KD86XFx1MjAwRFtcXHUyNjQwXFx1MjY0Ml1cXHVGRTBGPyk/fFtcXHVERDc0XFx1REQ5MF0oPzpcXHVGRTBGfFxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSk/fFtcXHVEQzAwLVxcdURDMDdcXHVEQzA5LVxcdURDMTRcXHVEQzE2LVxcdURDMjVcXHVEQzI3LVxcdURDM0FcXHVEQzNDLVxcdURDM0VcXHVEQzQwXFx1REM0NFxcdURDNDVcXHVEQzUxLVxcdURDNjVcXHVEQzZBXFx1REM3OS1cXHVEQzdCXFx1REM3RC1cXHVEQzgwXFx1REM4NFxcdURDODgtXFx1REM4RVxcdURDOTBcXHVEQzkyLVxcdURDQTlcXHVEQ0FCLVxcdURDRkNcXHVEQ0ZGLVxcdUREM0RcXHVERDRCLVxcdURENEVcXHVERDUwLVxcdURENjdcXHVEREE0XFx1RERGQi1cXHVERTJEXFx1REUyRi1cXHVERTM0XFx1REUzNy1cXHVERTQ0XFx1REU0OC1cXHVERTRBXFx1REU4MC1cXHVERUEyXFx1REVBNC1cXHVERUIzXFx1REVCNy1cXHVERUJGXFx1REVDMS1cXHVERUM1XFx1REVEMC1cXHVERUQyXFx1REVENS1cXHVERUQ3XFx1REVEQy1cXHVERURGXFx1REVFQlxcdURFRUNcXHVERUY0LVxcdURFRkNcXHVERkUwLVxcdURGRUJcXHVERkYwXXxcXHVEQzE1KD86XFx1MjAwRFxcdUQ4M0VcXHVEREJBKT98XFx1REMzQig/OlxcdTIwMERcXHUyNzQ0XFx1RkUwRj8pP3xcXHVEQzQxXFx1RkUwRj8oPzpcXHUyMDBEXFx1RDgzRFxcdURERThcXHVGRTBGPyk/fFxcdURDNjgoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHUyNzY0XFx1RkUwRj9cXHUyMDBEXFx1RDgzRCg/OlxcdURDOEJcXHUyMDBEXFx1RDgzRCk/XFx1REM2OHxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEKD86W1xcdURDNjhcXHVEQzY5XVxcdTIwMERcXHVEODNEKD86XFx1REM2Nig/OlxcdTIwMERcXHVEODNEXFx1REM2Nik/fFxcdURDNjcoPzpcXHUyMDBEXFx1RDgzRFtcXHVEQzY2XFx1REM2N10pPyl8W1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1REM2Nig/OlxcdTIwMERcXHVEODNEXFx1REM2Nik/fFxcdURDNjcoPzpcXHUyMDBEXFx1RDgzRFtcXHVEQzY2XFx1REM2N10pPyl8XFx1RDgzRVtcXHVEREFGLVxcdUREQjNcXHVEREJDXFx1RERCRF0pfFxcdUQ4M0MoPzpcXHVERkZCKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRFxcdUQ4M0QoPzpcXHVEQzhCXFx1MjAwRFxcdUQ4M0QpP1xcdURDNjhcXHVEODNDW1xcdURGRkItXFx1REZGRl18XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0UoPzpbXFx1RERBRi1cXHVEREIzXFx1RERCQ1xcdUREQkRdfFxcdUREMURcXHUyMDBEXFx1RDgzRFxcdURDNjhcXHVEODNDW1xcdURGRkMtXFx1REZGRl0pKSk/fFxcdURGRkMoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHUyNzY0XFx1RkUwRj9cXHUyMDBEXFx1RDgzRCg/OlxcdURDOEJcXHUyMDBEXFx1RDgzRCk/XFx1REM2OFxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRSg/OltcXHVEREFGLVxcdUREQjNcXHVEREJDXFx1RERCRF18XFx1REQxRFxcdTIwMERcXHVEODNEXFx1REM2OFxcdUQ4M0NbXFx1REZGQlxcdURGRkQtXFx1REZGRl0pKSk/fFxcdURGRkQoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHUyNzY0XFx1RkUwRj9cXHUyMDBEXFx1RDgzRCg/OlxcdURDOEJcXHUyMDBEXFx1RDgzRCk/XFx1REM2OFxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRSg/OltcXHVEREFGLVxcdUREQjNcXHVEREJDXFx1RERCRF18XFx1REQxRFxcdTIwMERcXHVEODNEXFx1REM2OFxcdUQ4M0NbXFx1REZGQlxcdURGRkNcXHVERkZFXFx1REZGRl0pKSk/fFxcdURGRkUoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHUyNzY0XFx1RkUwRj9cXHUyMDBEXFx1RDgzRCg/OlxcdURDOEJcXHUyMDBEXFx1RDgzRCk/XFx1REM2OFxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRSg/OltcXHVEREFGLVxcdUREQjNcXHVEREJDXFx1RERCRF18XFx1REQxRFxcdTIwMERcXHVEODNEXFx1REM2OFxcdUQ4M0NbXFx1REZGQi1cXHVERkZEXFx1REZGRl0pKSk/fFxcdURGRkYoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHUyNzY0XFx1RkUwRj9cXHUyMDBEXFx1RDgzRCg/OlxcdURDOEJcXHUyMDBEXFx1RDgzRCk/XFx1REM2OFxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRSg/OltcXHVEREFGLVxcdUREQjNcXHVEREJDXFx1RERCRF18XFx1REQxRFxcdTIwMERcXHVEODNEXFx1REM2OFxcdUQ4M0NbXFx1REZGQi1cXHVERkZFXSkpKT8pKT98XFx1REM2OSg/OlxcdTIwMEQoPzpbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XVxcdUZFMEY/fFxcdTI3NjRcXHVGRTBGP1xcdTIwMERcXHVEODNEKD86XFx1REM4QlxcdTIwMERcXHVEODNEKT9bXFx1REM2OFxcdURDNjldfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0QoPzpbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEQzY2KD86XFx1MjAwRFxcdUQ4M0RcXHVEQzY2KT98XFx1REM2Nyg/OlxcdTIwMERcXHVEODNEW1xcdURDNjZcXHVEQzY3XSk/fFxcdURDNjlcXHUyMDBEXFx1RDgzRCg/OlxcdURDNjYoPzpcXHUyMDBEXFx1RDgzRFxcdURDNjYpP3xcXHVEQzY3KD86XFx1MjAwRFxcdUQ4M0RbXFx1REM2NlxcdURDNjddKT8pKXxcXHVEODNFW1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXSl8XFx1RDgzQyg/OlxcdURGRkIoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHUyNzY0XFx1RkUwRj9cXHUyMDBEXFx1RDgzRCg/OltcXHVEQzY4XFx1REM2OV18XFx1REM4QlxcdTIwMERcXHVEODNEW1xcdURDNjhcXHVEQzY5XSlcXHVEODNDW1xcdURGRkItXFx1REZGRl18XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0UoPzpbXFx1RERBRi1cXHVEREIzXFx1RERCQ1xcdUREQkRdfFxcdUREMURcXHUyMDBEXFx1RDgzRFtcXHVEQzY4XFx1REM2OV1cXHVEODNDW1xcdURGRkMtXFx1REZGRl0pKSk/fFxcdURGRkMoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHUyNzY0XFx1RkUwRj9cXHUyMDBEXFx1RDgzRCg/OltcXHVEQzY4XFx1REM2OV18XFx1REM4QlxcdTIwMERcXHVEODNEW1xcdURDNjhcXHVEQzY5XSlcXHVEODNDW1xcdURGRkItXFx1REZGRl18XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0UoPzpbXFx1RERBRi1cXHVEREIzXFx1RERCQ1xcdUREQkRdfFxcdUREMURcXHUyMDBEXFx1RDgzRFtcXHVEQzY4XFx1REM2OV1cXHVEODNDW1xcdURGRkJcXHVERkZELVxcdURGRkZdKSkpP3xcXHVERkZEKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRFxcdUQ4M0QoPzpbXFx1REM2OFxcdURDNjldfFxcdURDOEJcXHUyMDBEXFx1RDgzRFtcXHVEQzY4XFx1REM2OV0pXFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFKD86W1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXXxcXHVERDFEXFx1MjAwRFxcdUQ4M0RbXFx1REM2OFxcdURDNjldXFx1RDgzQ1tcXHVERkZCXFx1REZGQ1xcdURGRkVcXHVERkZGXSkpKT98XFx1REZGRSg/OlxcdTIwMEQoPzpbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XVxcdUZFMEY/fFxcdTI3NjRcXHVGRTBGP1xcdTIwMERcXHVEODNEKD86W1xcdURDNjhcXHVEQzY5XXxcXHVEQzhCXFx1MjAwRFxcdUQ4M0RbXFx1REM2OFxcdURDNjldKVxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRSg/OltcXHVEREFGLVxcdUREQjNcXHVEREJDXFx1RERCRF18XFx1REQxRFxcdTIwMERcXHVEODNEW1xcdURDNjhcXHVEQzY5XVxcdUQ4M0NbXFx1REZGQi1cXHVERkZEXFx1REZGRl0pKSk/fFxcdURGRkYoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHUyNzY0XFx1RkUwRj9cXHUyMDBEXFx1RDgzRCg/OltcXHVEQzY4XFx1REM2OV18XFx1REM4QlxcdTIwMERcXHVEODNEW1xcdURDNjhcXHVEQzY5XSlcXHVEODNDW1xcdURGRkItXFx1REZGRl18XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0UoPzpbXFx1RERBRi1cXHVEREIzXFx1RERCQ1xcdUREQkRdfFxcdUREMURcXHUyMDBEXFx1RDgzRFtcXHVEQzY4XFx1REM2OV1cXHVEODNDW1xcdURGRkItXFx1REZGRV0pKSk/KSk/fFxcdURDNkYoPzpcXHUyMDBEW1xcdTI2NDBcXHUyNjQyXVxcdUZFMEY/KT98XFx1REQ3NSg/OlxcdUZFMEZ8XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKT8oPzpcXHUyMDBEW1xcdTI2NDBcXHUyNjQyXVxcdUZFMEY/KT98XFx1REUyRSg/OlxcdTIwMERcXHVEODNEXFx1RENBOCk/fFxcdURFMzUoPzpcXHUyMDBEXFx1RDgzRFxcdURDQUIpP3xcXHVERTM2KD86XFx1MjAwRFxcdUQ4M0NcXHVERjJCXFx1RkUwRj8pPyl8XFx1RDgzRSg/OltcXHVERDBDXFx1REQwRlxcdUREMTgtXFx1REQxRlxcdUREMzAtXFx1REQzNFxcdUREMzZcXHVERDc3XFx1RERCNVxcdUREQjZcXHVEREJCXFx1REREMlxcdURERDNcXHVEREQ1XFx1REVDMy1cXHVERUM1XFx1REVGMFxcdURFRjItXFx1REVGOF0oPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl0pP3xbXFx1REQyNlxcdUREMzVcXHVERDM3LVxcdUREMzlcXHVERDNEXFx1REQzRVxcdUREQjhcXHVEREI5XFx1RERDRC1cXHVERENGXFx1RERENFxcdURERDYtXFx1RERERF0oPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl0pPyg/OlxcdTIwMERbXFx1MjY0MFxcdTI2NDJdXFx1RkUwRj8pP3xbXFx1RERERVxcdUREREZdKD86XFx1MjAwRFtcXHUyNjQwXFx1MjY0Ml1cXHVGRTBGPyk/fFtcXHVERDBEXFx1REQwRVxcdUREMTAtXFx1REQxN1xcdUREMjAtXFx1REQyNVxcdUREMjctXFx1REQyRlxcdUREM0FcXHVERDNGLVxcdURENDVcXHVERDQ3LVxcdURENzZcXHVERDc4LVxcdUREQjRcXHVEREI3XFx1RERCQVxcdUREQkMtXFx1RERDQ1xcdURERDBcXHVEREUwLVxcdURERkZcXHVERTcwLVxcdURFN0NcXHVERTgwLVxcdURFODhcXHVERTkwLVxcdURFQkRcXHVERUJGLVxcdURFQzJcXHVERUNFLVxcdURFREJcXHVERUUwLVxcdURFRThdfFxcdUREM0MoPzpcXHUyMDBEW1xcdTI2NDBcXHUyNjQyXVxcdUZFMEY/fFxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSk/fFxcdURERDEoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGODRcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0UoPzpbXFx1RERBRi1cXHVEREIzXFx1RERCQ1xcdUREQkRdfFxcdUREMURcXHUyMDBEXFx1RDgzRVxcdURERDEpKXxcXHVEODNDKD86XFx1REZGQig/OlxcdTIwMEQoPzpbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XVxcdUZFMEY/fFxcdTI3NjRcXHVGRTBGP1xcdTIwMEQoPzpcXHVEODNEXFx1REM4QlxcdTIwMEQpP1xcdUQ4M0VcXHVEREQxXFx1RDgzQ1tcXHVERkZDLVxcdURGRkZdfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY4NFxcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRSg/OltcXHVEREFGLVxcdUREQjNcXHVEREJDXFx1RERCRF18XFx1REQxRFxcdTIwMERcXHVEODNFXFx1REREMVxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSkpKT98XFx1REZGQyg/OlxcdTIwMEQoPzpbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XVxcdUZFMEY/fFxcdTI3NjRcXHVGRTBGP1xcdTIwMEQoPzpcXHVEODNEXFx1REM4QlxcdTIwMEQpP1xcdUQ4M0VcXHVEREQxXFx1RDgzQ1tcXHVERkZCXFx1REZGRC1cXHVERkZGXXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGODRcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0UoPzpbXFx1RERBRi1cXHVEREIzXFx1RERCQ1xcdUREQkRdfFxcdUREMURcXHUyMDBEXFx1RDgzRVxcdURERDFcXHVEODNDW1xcdURGRkItXFx1REZGRl0pKSk/fFxcdURGRkQoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHUyNzY0XFx1RkUwRj9cXHUyMDBEKD86XFx1RDgzRFxcdURDOEJcXHUyMDBEKT9cXHVEODNFXFx1REREMVxcdUQ4M0NbXFx1REZGQlxcdURGRkNcXHVERkZFXFx1REZGRl18XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjg0XFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFKD86W1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXXxcXHVERDFEXFx1MjAwRFxcdUQ4M0VcXHVEREQxXFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKSkpP3xcXHVERkZFKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRCg/OlxcdUQ4M0RcXHVEQzhCXFx1MjAwRCk/XFx1RDgzRVxcdURERDFcXHVEODNDW1xcdURGRkItXFx1REZGRFxcdURGRkZdfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY4NFxcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRSg/OltcXHVEREFGLVxcdUREQjNcXHVEREJDXFx1RERCRF18XFx1REQxRFxcdTIwMERcXHVEODNFXFx1REREMVxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSkpKT98XFx1REZGRig/OlxcdTIwMEQoPzpbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XVxcdUZFMEY/fFxcdTI3NjRcXHVGRTBGP1xcdTIwMEQoPzpcXHVEODNEXFx1REM4QlxcdTIwMEQpP1xcdUQ4M0VcXHVEREQxXFx1RDgzQ1tcXHVERkZCLVxcdURGRkVdfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY4NFxcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRSg/OltcXHVEREFGLVxcdUREQjNcXHVEREJDXFx1RERCRF18XFx1REQxRFxcdTIwMERcXHVEODNFXFx1REREMVxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSkpKT8pKT98XFx1REVGMSg/OlxcdUQ4M0MoPzpcXHVERkZCKD86XFx1MjAwRFxcdUQ4M0VcXHVERUYyXFx1RDgzQ1tcXHVERkZDLVxcdURGRkZdKT98XFx1REZGQyg/OlxcdTIwMERcXHVEODNFXFx1REVGMlxcdUQ4M0NbXFx1REZGQlxcdURGRkQtXFx1REZGRl0pP3xcXHVERkZEKD86XFx1MjAwRFxcdUQ4M0VcXHVERUYyXFx1RDgzQ1tcXHVERkZCXFx1REZGQ1xcdURGRkVcXHVERkZGXSk/fFxcdURGRkUoPzpcXHUyMDBEXFx1RDgzRVxcdURFRjJcXHVEODNDW1xcdURGRkItXFx1REZGRFxcdURGRkZdKT98XFx1REZGRig/OlxcdTIwMERcXHVEODNFXFx1REVGMlxcdUQ4M0NbXFx1REZGQi1cXHVERkZFXSk/KSk/KS9nO1xufTtcbiIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0ludGVyYWN0aXZlKHtzdHJlYW0gPSBwcm9jZXNzLnN0ZG91dH0gPSB7fSkge1xuXHRyZXR1cm4gQm9vbGVhbihcblx0XHRzdHJlYW0gJiYgc3RyZWFtLmlzVFRZICYmXG5cdFx0cHJvY2Vzcy5lbnYuVEVSTSAhPT0gJ2R1bWInICYmXG5cdFx0ISgnQ0knIGluIHByb2Nlc3MuZW52KVxuXHQpO1xufVxuIiwgImltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5pbXBvcnQgcmVhZGxpbmUgZnJvbSAnbm9kZTpyZWFkbGluZSc7XG5pbXBvcnQge0J1ZmZlckxpc3RTdHJlYW19IGZyb20gJ2JsJztcblxuY29uc3QgQVNDSUlfRVRYX0NPREUgPSAweDAzOyAvLyBDdHJsK0MgZW1pdHMgdGhpcyBjb2RlXG5cbmNsYXNzIFN0ZGluRGlzY2FyZGVyIHtcblx0I3JlcXVlc3RzID0gMDtcblx0I211dGVkU3RyZWFtID0gbmV3IEJ1ZmZlckxpc3RTdHJlYW0oKTtcblx0I291ckVtaXQ7XG5cdCNybDtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLiNtdXRlZFN0cmVhbS5waXBlKHByb2Nlc3Muc3Rkb3V0KTtcblxuXHRcdGNvbnN0IHNlbGYgPSB0aGlzOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHVuaWNvcm4vbm8tdGhpcy1hc3NpZ25tZW50XG5cdFx0dGhpcy4jb3VyRW1pdCA9IGZ1bmN0aW9uIChldmVudCwgZGF0YSwgLi4uYXJndW1lbnRzXykge1xuXHRcdFx0Y29uc3Qge3N0ZGlufSA9IHByb2Nlc3M7XG5cdFx0XHRpZiAoc2VsZi4jcmVxdWVzdHMgPiAwIHx8IHN0ZGluLmVtaXQgPT09IHNlbGYuI291ckVtaXQpIHtcblx0XHRcdFx0aWYgKGV2ZW50ID09PSAna2V5cHJlc3MnKSB7IC8vIEZpeGVzIHJlYWRsaW5lIGJlaGF2aW9yXG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGV2ZW50ID09PSAnZGF0YScgJiYgZGF0YS5pbmNsdWRlcyhBU0NJSV9FVFhfQ09ERSkpIHtcblx0XHRcdFx0XHRwcm9jZXNzLmVtaXQoJ1NJR0lOVCcpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0UmVmbGVjdC5hcHBseShzZWxmLiNvdXJFbWl0LCB0aGlzLCBbZXZlbnQsIGRhdGEsIC4uLmFyZ3VtZW50c19dKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFJlZmxlY3QuYXBwbHkocHJvY2Vzcy5zdGRpbi5lbWl0LCB0aGlzLCBbZXZlbnQsIGRhdGEsIC4uLmFyZ3VtZW50c19dKTtcblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cblx0c3RhcnQoKSB7XG5cdFx0dGhpcy4jcmVxdWVzdHMrKztcblxuXHRcdGlmICh0aGlzLiNyZXF1ZXN0cyA9PT0gMSkge1xuXHRcdFx0dGhpcy5fcmVhbFN0YXJ0KCk7XG5cdFx0fVxuXHR9XG5cblx0c3RvcCgpIHtcblx0XHRpZiAodGhpcy4jcmVxdWVzdHMgPD0gMCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdgc3RvcGAgY2FsbGVkIG1vcmUgdGltZXMgdGhhbiBgc3RhcnRgJyk7XG5cdFx0fVxuXG5cdFx0dGhpcy4jcmVxdWVzdHMtLTtcblxuXHRcdGlmICh0aGlzLiNyZXF1ZXN0cyA9PT0gMCkge1xuXHRcdFx0dGhpcy5fcmVhbFN0b3AoKTtcblx0XHR9XG5cdH1cblxuXHQvLyBUT0RPOiBVc2UgcHJpdmF0ZSBtZXRob2RzIHdoZW4gdGFyZ2V0aW5nIE5vZGUuanMgMTQuXG5cdF9yZWFsU3RhcnQoKSB7XG5cdFx0Ly8gTm8ga25vd24gd2F5IHRvIG1ha2UgaXQgd29yayByZWxpYWJseSBvbiBXaW5kb3dzXG5cdFx0aWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR0aGlzLiNybCA9IHJlYWRsaW5lLmNyZWF0ZUludGVyZmFjZSh7XG5cdFx0XHRpbnB1dDogcHJvY2Vzcy5zdGRpbixcblx0XHRcdG91dHB1dDogdGhpcy4jbXV0ZWRTdHJlYW0sXG5cdFx0fSk7XG5cblx0XHR0aGlzLiNybC5vbignU0lHSU5UJywgKCkgPT4ge1xuXHRcdFx0aWYgKHByb2Nlc3MubGlzdGVuZXJDb3VudCgnU0lHSU5UJykgPT09IDApIHtcblx0XHRcdFx0cHJvY2Vzcy5lbWl0KCdTSUdJTlQnKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuI3JsLmNsb3NlKCk7XG5cdFx0XHRcdHByb2Nlc3Mua2lsbChwcm9jZXNzLnBpZCwgJ1NJR0lOVCcpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0X3JlYWxTdG9wKCkge1xuXHRcdGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dGhpcy4jcmwuY2xvc2UoKTtcblx0XHR0aGlzLiNybCA9IHVuZGVmaW5lZDtcblx0fVxufVxuXG5jb25zdCBzdGRpbkRpc2NhcmRlciA9IG5ldyBTdGRpbkRpc2NhcmRlcigpO1xuXG5leHBvcnQgZGVmYXVsdCBzdGRpbkRpc2NhcmRlcjtcbiIsICJpbXBvcnQgeyBnZXRJbnRlcm5hbENvbmZpZyB9IGZyb20gJy4uLy4uL2NvcmUvdXRpbHMvZ2V0SW50ZXJuYWxDb25maWcnO1xuaW1wb3J0IHsgZmluZEVudHJ5cG9pbnRzIH0gZnJvbSAnLi4vLi4vY29yZS9idWlsZC9maW5kRW50cnlwb2ludHMnO1xuaW1wb3J0IHsgZ2VuZXJhdGVUeXBlc0RpciB9IGZyb20gJy4uLy4uL2NvcmUvYnVpbGQvZ2VuZXJhdGVUeXBlc0Rpcic7XG5pbXBvcnQgeyBkZWZpbmVDb21tYW5kIH0gZnJvbSAnLi4vdXRpbHMvZGVmaW5lQ29tbWFuZCc7XG5pbXBvcnQgKiBhcyB3eHQgZnJvbSAnLi4vLi4nO1xuXG5leHBvcnQgY29uc3QgcHJlcGFyZSA9IGRlZmluZUNvbW1hbmQ8XG4gIFtcbiAgICByb290OiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgZmxhZ3M6IHtcbiAgICAgIGNvbmZpZz86IHN0cmluZztcbiAgICAgIGRlYnVnPzogYm9vbGVhbjtcbiAgICB9LFxuICBdXG4+KGFzeW5jIChyb290LCBmbGFncykgPT4ge1xuICBjb25zdCBjbGlDb25maWc6IHd4dC5JbmxpbmVDb25maWcgPSB7XG4gICAgcm9vdCxcbiAgICBjb25maWdGaWxlOiBmbGFncy5jb25maWcsXG4gICAgZGVidWc6IGZsYWdzLmRlYnVnLFxuICB9O1xuICBjb25zdCBjb25maWcgPSBhd2FpdCBnZXRJbnRlcm5hbENvbmZpZyhjbGlDb25maWcsICdidWlsZCcpO1xuXG4gIGNvbmZpZy5sb2dnZXIuaW5mbygnR2VuZXJhdGluZyB0eXBlcy4uLicpO1xuXG4gIGNvbnN0IGVudHJ5cG9pbnRzID0gYXdhaXQgZmluZEVudHJ5cG9pbnRzKGNvbmZpZyk7XG4gIGF3YWl0IGdlbmVyYXRlVHlwZXNEaXIoZW50cnlwb2ludHMsIGNvbmZpZyk7XG59KTtcbiIsICJpbXBvcnQgeyBjb25zb2xhIH0gZnJvbSAnY29uc29sYSc7XG5pbXBvcnQgeyBkZWZpbmVDb21tYW5kIH0gZnJvbSAnLi4vdXRpbHMvZGVmaW5lQ29tbWFuZCc7XG5cbmV4cG9ydCBjb25zdCBwdWJsaXNoID0gZGVmaW5lQ29tbWFuZChcbiAgYXN5bmMgKFxuICAgIHJvb3Q6IGFueSxcbiAgICB7IGNvbmZpZzogY29uZmlnRmlsZSwgZGVidWcgfTogeyBjb25maWc/OiBzdHJpbmc7IGRlYnVnPzogc3RyaW5nIH0sXG4gICkgPT4ge1xuICAgIGNvbnNvbGEud2Fybignd3h0IHB1Ymxpc2g6IE5vdCBpbXBsZW1lbnRlZCcpO1xuICB9LFxuKTtcbiIsICJpbXBvcnQgeyBCdWlsZE91dHB1dCwgSW50ZXJuYWxDb25maWcgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB6aXBkaXIgZnJvbSAnemlwLWRpcic7XG5pbXBvcnQgeyBkaXJuYW1lLCByZWxhdGl2ZSwgcmVzb2x2ZSB9IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnO1xuaW1wb3J0IHsga2ViYWJDYXNlQWxwaGFudW1lcmljIH0gZnJvbSAnLi91dGlscy9zdHJpbmdzJztcbmltcG9ydCB7IGdldFBhY2thZ2VKc29uIH0gZnJvbSAnLi91dGlscy9wYWNrYWdlJztcbmltcG9ydCB7IG1pbmltYXRjaCB9IGZyb20gJ21pbmltYXRjaCc7XG5pbXBvcnQgeyBmb3JtYXREdXJhdGlvbiB9IGZyb20gJy4vdXRpbHMvZm9ybWF0RHVyYXRpb24nO1xuaW1wb3J0IHsgcHJpbnRGaWxlTGlzdCB9IGZyb20gJy4vbG9nL3ByaW50RmlsZUxpc3QnO1xuXG4vKipcbiAqIFppcCB0aGUgZXh0ZW5zaW9uIGZvciBkaXN0cmlidXRpb24uIERvZXMgbm90IGJ1aWxkLCBqdXN0IHppcHMgdGhlIG91dHB1dCB0aGF0IHNob3VsZCBleGlzdCBmb3JcbiAqIHRoZSBnaXZlbiBjb25maWcuXG4gKlxuICogUmV0dXJucyBhIGxpc3Qgb2YgWklQIGZpbGVzIHRoYXQgd2VyZSBjcmVhdGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gemlwRXh0ZW5zaW9uKFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuICBidWlsZE91dHB1dDogQnVpbGRPdXRwdXQsXG4pOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgY29uZmlnLmxvZ2dlci5pbmZvKCdaaXBwaW5nIGV4dGVuc2lvbi4uLicpO1xuICBjb25zdCB6aXBGaWxlczogc3RyaW5nW10gPSBbXTtcblxuICBjb25zdCBwcm9qZWN0TmFtZSA9XG4gICAgY29uZmlnLnppcC5uYW1lID8/XG4gICAga2ViYWJDYXNlQWxwaGFudW1lcmljKFxuICAgICAgKGF3YWl0IGdldFBhY2thZ2VKc29uKGNvbmZpZykpPy5uYW1lIHx8IGRpcm5hbWUocHJvY2Vzcy5jd2QoKSksXG4gICAgKTtcbiAgY29uc3QgYXBwbHlUZW1wbGF0ZSA9ICh0ZW1wbGF0ZTogc3RyaW5nKTogc3RyaW5nID0+XG4gICAgdGVtcGxhdGVcbiAgICAgIC5yZXBsYWNlQWxsKCd7e25hbWV9fScsIHByb2plY3ROYW1lKVxuICAgICAgLnJlcGxhY2VBbGwoJ3t7YnJvd3Nlcn19JywgY29uZmlnLmJyb3dzZXIpXG4gICAgICAucmVwbGFjZUFsbChcbiAgICAgICAgJ3t7dmVyc2lvbn19JyxcbiAgICAgICAgYnVpbGRPdXRwdXQubWFuaWZlc3QudmVyc2lvbl9uYW1lID8/IGJ1aWxkT3V0cHV0Lm1hbmlmZXN0LnZlcnNpb24sXG4gICAgICApXG4gICAgICAucmVwbGFjZUFsbCgne3ttYW5pZmVzdFZlcnNpb259fScsIGBtdiR7Y29uZmlnLm1hbmlmZXN0VmVyc2lvbn1gKTtcblxuICBhd2FpdCBmcy5lbnN1cmVEaXIoY29uZmlnLm91dEJhc2VEaXIpO1xuXG4gIC8vIFpJUCBvdXRwdXQgZGlyZWN0b3J5XG5cbiAgY29uc3Qgb3V0WmlwRmlsZW5hbWUgPSBhcHBseVRlbXBsYXRlKGNvbmZpZy56aXAuYXJ0aWZhY3RUZW1wbGF0ZSk7XG4gIGNvbnN0IG91dFppcFBhdGggPSByZXNvbHZlKGNvbmZpZy5vdXRCYXNlRGlyLCBvdXRaaXBGaWxlbmFtZSk7XG4gIGF3YWl0IHppcGRpcihjb25maWcub3V0RGlyLCB7XG4gICAgc2F2ZVRvOiBvdXRaaXBQYXRoLFxuICB9KTtcbiAgemlwRmlsZXMucHVzaChvdXRaaXBQYXRoKTtcblxuICAvLyBaSVAgc291cmNlcyBmb3IgRmlyZWZveFxuXG4gIGlmIChjb25maWcuYnJvd3NlciA9PT0gJ2ZpcmVmb3gnKSB7XG4gICAgY29uc3Qgc291cmNlc1ppcEZpbGVuYW1lID0gYXBwbHlUZW1wbGF0ZShjb25maWcuemlwLnNvdXJjZXNUZW1wbGF0ZSk7XG4gICAgY29uc3Qgc291cmNlc1ppcFBhdGggPSByZXNvbHZlKGNvbmZpZy5vdXRCYXNlRGlyLCBzb3VyY2VzWmlwRmlsZW5hbWUpO1xuICAgIGF3YWl0IHppcGRpcihjb25maWcuemlwLnNvdXJjZXNSb290LCB7XG4gICAgICBzYXZlVG86IHNvdXJjZXNaaXBQYXRoLFxuICAgICAgZmlsdGVyKHBhdGgpIHtcbiAgICAgICAgY29uc3QgcmVsYXRpdmVQYXRoID0gcmVsYXRpdmUoY29uZmlnLnppcC5zb3VyY2VzUm9vdCwgcGF0aCk7XG4gICAgICAgIGNvbnN0IG1hdGNoZWRQYXR0ZXJuID0gY29uZmlnLnppcC5pZ25vcmVkU291cmNlcy5maW5kKChwYXR0ZXJuKSA9PlxuICAgICAgICAgIG1pbmltYXRjaChyZWxhdGl2ZVBhdGgsIHBhdHRlcm4pLFxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gbWF0Y2hlZFBhdHRlcm4gPT0gbnVsbDtcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgemlwRmlsZXMucHVzaChzb3VyY2VzWmlwUGF0aCk7XG4gIH1cblxuICBhd2FpdCBwcmludEZpbGVMaXN0KFxuICAgIGNvbmZpZy5sb2dnZXIuc3VjY2VzcyxcbiAgICBgWmlwcGVkIGV4dGVuc2lvbiBpbiAke2Zvcm1hdER1cmF0aW9uKERhdGUubm93KCkgLSBzdGFydCl9YCxcbiAgICBjb25maWcub3V0QmFzZURpcixcbiAgICB6aXBGaWxlcyxcbiAgKTtcblxuICByZXR1cm4gemlwRmlsZXM7XG59XG4iLCAiaW1wb3J0ICogYXMgd3h0IGZyb20gJy4uLy4uJztcbmltcG9ydCB7IGJ1aWxkSW50ZXJuYWwgfSBmcm9tICcuLi8uLi9jb3JlL2J1aWxkJztcbmltcG9ydCB7IGdldEludGVybmFsQ29uZmlnIH0gZnJvbSAnLi4vLi4vY29yZS91dGlscy9nZXRJbnRlcm5hbENvbmZpZyc7XG5pbXBvcnQgeyB6aXBFeHRlbnNpb24gfSBmcm9tICcuLi8uLi9jb3JlL3ppcCc7XG5pbXBvcnQgeyBkZWZpbmVDb21tYW5kIH0gZnJvbSAnLi4vdXRpbHMvZGVmaW5lQ29tbWFuZCc7XG5cbmV4cG9ydCBjb25zdCB6aXAgPSBkZWZpbmVDb21tYW5kPFxuICBbXG4gICAgcm9vdDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgIGZsYWdzOiB7XG4gICAgICBtb2RlPzogc3RyaW5nO1xuICAgICAgY29uZmlnPzogc3RyaW5nO1xuICAgICAgYnJvd3Nlcj86IHd4dC5UYXJnZXRCcm93c2VyO1xuICAgICAgbXYzPzogYm9vbGVhbjtcbiAgICAgIG12Mj86IGJvb2xlYW47XG4gICAgICBkZWJ1Zz86IGJvb2xlYW47XG4gICAgfSxcbiAgXVxuPihhc3luYyAocm9vdCwgZmxhZ3MpID0+IHtcbiAgY29uc3QgY2xpQ29uZmlnOiB3eHQuSW5saW5lQ29uZmlnID0ge1xuICAgIHJvb3QsXG4gICAgbW9kZTogZmxhZ3MubW9kZSxcbiAgICBicm93c2VyOiBmbGFncy5icm93c2VyLFxuICAgIG1hbmlmZXN0VmVyc2lvbjogZmxhZ3MubXYzID8gMyA6IGZsYWdzLm12MiA/IDIgOiB1bmRlZmluZWQsXG4gICAgY29uZmlnRmlsZTogZmxhZ3MuY29uZmlnLFxuICAgIGRlYnVnOiBmbGFncy5kZWJ1ZyxcbiAgfTtcblxuICBjb25zdCBjb25maWcgPSBhd2FpdCBnZXRJbnRlcm5hbENvbmZpZyhjbGlDb25maWcsICdidWlsZCcpO1xuICBjb25zdCBvdXRwdXQgPSBhd2FpdCBidWlsZEludGVybmFsKGNvbmZpZyk7XG4gIGF3YWl0IHppcEV4dGVuc2lvbihjb25maWcsIG91dHB1dCk7XG59KTtcbiIsICJpbXBvcnQgeyBkZWZpbmVDb21tYW5kIH0gZnJvbSAnLi4vdXRpbHMvZGVmaW5lQ29tbWFuZCc7XG5pbXBvcnQgKiBhcyB3eHQgZnJvbSAnLi4vLi4nO1xuXG5leHBvcnQgY29uc3QgY2xlYW4gPSBkZWZpbmVDb21tYW5kPFxuICBbXG4gICAgcm9vdDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgIGZsYWdzOiB7XG4gICAgICBkZWJ1Zz86IGJvb2xlYW47XG4gICAgfSxcbiAgXVxuPih3eHQuY2xlYW4pO1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUEsOEVBQUFBLFNBQUE7QUFBQTtBQUVBLFFBQU0sVUFBVSxDQUFDLElBQUksU0FBUztBQUM3QixpQkFBVyxRQUFRLFFBQVEsUUFBUSxJQUFJLEdBQUc7QUFDekMsZUFBTyxlQUFlLElBQUksTUFBTSxPQUFPLHlCQUF5QixNQUFNLElBQUksQ0FBQztBQUFBLE1BQzVFO0FBRUEsYUFBTztBQUFBLElBQ1I7QUFFQSxJQUFBQSxRQUFPLFVBQVU7QUFFakIsSUFBQUEsUUFBTyxRQUFRLFVBQVU7QUFBQTtBQUFBOzs7QUNaekI7QUFBQSw0RUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBTSxVQUFVO0FBRWhCLFFBQU0sa0JBQWtCLG9CQUFJLFFBQVE7QUFFcEMsUUFBTUMsV0FBVSxDQUFDLFdBQVcsVUFBVSxDQUFDLE1BQU07QUFDNUMsVUFBSSxPQUFPLGNBQWMsWUFBWTtBQUNwQyxjQUFNLElBQUksVUFBVSxxQkFBcUI7QUFBQSxNQUMxQztBQUVBLFVBQUk7QUFDSixVQUFJLFlBQVk7QUFDaEIsWUFBTSxlQUFlLFVBQVUsZUFBZSxVQUFVLFFBQVE7QUFFaEUsWUFBTUEsV0FBVSxZQUFhLFlBQVk7QUFDeEMsd0JBQWdCLElBQUlBLFVBQVMsRUFBRSxTQUFTO0FBRXhDLFlBQUksY0FBYyxHQUFHO0FBQ3BCLHdCQUFjLFVBQVUsTUFBTSxNQUFNLFVBQVU7QUFDOUMsc0JBQVk7QUFBQSxRQUNiLFdBQVcsUUFBUSxV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QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLE9BQVM7QUFBQSxRQUNSLFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxPQUFTO0FBQUEsUUFDUixVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLE9BQVM7QUFBQSxRQUNSLFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsT0FBUztBQUFBLFFBQ1IsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLE9BQVM7QUFBQSxRQUNSLFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxRQUFVO0FBQUEsUUFDVCxVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxRQUFVO0FBQUEsUUFDVCxVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsUUFBVTtBQUFBLFFBQ1QsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLFFBQVU7QUFBQSxRQUNULFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxVQUFZO0FBQUEsUUFDWCxVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxNQUFRO0FBQUEsUUFDUCxVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsTUFBUTtBQUFBLFFBQ1AsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsT0FBUztBQUFBLFFBQ1IsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxNQUFRO0FBQUEsUUFDUCxVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsWUFBYztBQUFBLFFBQ2IsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EscUJBQXVCO0FBQUEsUUFDdEIsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxNQUFRO0FBQUEsUUFDUCxVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLE9BQVM7QUFBQSxRQUNSLFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsTUFBUTtBQUFBLFFBQ1AsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxXQUFhO0FBQUEsUUFDWixVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLGNBQWdCO0FBQUEsUUFDZixVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxnQkFBa0I7QUFBQSxRQUNqQixVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLFNBQVc7QUFBQSxRQUNWLFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLFVBQVk7QUFBQSxRQUNYLFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLE9BQVM7QUFBQSxRQUNSLFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsUUFBVTtBQUFBLFFBQ1QsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsV0FBYTtBQUFBLFFBQ1osVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsWUFBYztBQUFBLFFBQ2IsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsVUFBWTtBQUFBLFFBQ1gsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsUUFBVTtBQUFBLFFBQ1QsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNTO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsS0FBTztBQUFBLFFBQ04sVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxRQUFVO0FBQUEsUUFDVCxVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLGVBQWlCO0FBQUEsUUFDaEIsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsZ0JBQWtCO0FBQUEsUUFDakIsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsY0FBZ0I7QUFBQSxRQUNmLFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLFFBQVU7QUFBQSxRQUNULFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxRQUFVO0FBQUEsUUFDVCxVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsU0FBVztBQUFBLFFBQ1YsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLFNBQVc7QUFBQSxRQUNWLFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxTQUFXO0FBQUEsUUFDVixVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxTQUFXO0FBQUEsUUFDVixVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsU0FBVztBQUFBLFFBQ1YsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLFNBQVc7QUFBQSxRQUNWLFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxTQUFXO0FBQUEsUUFDVixVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsU0FBVztBQUFBLFFBQ1YsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLFVBQVk7QUFBQSxRQUNYLFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsVUFBWTtBQUFBLFFBQ1gsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLFVBQVk7QUFBQSxRQUNYLFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxVQUFZO0FBQUEsUUFDWCxVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLE9BQVM7QUFBQSxRQUNSLFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxRQUFVO0FBQUEsUUFDVCxVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsUUFBVTtBQUFBLFFBQ1QsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxhQUFlO0FBQUEsUUFDZCxVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLGNBQWdCO0FBQUEsUUFDZixVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxRQUFVO0FBQUEsUUFDVCxVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsUUFBVTtBQUFBLFFBQ1QsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsUUFBVTtBQUFBLFFBQ1QsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLE9BQVM7QUFBQSxRQUNSLFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsT0FBUztBQUFBLFFBQ1IsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxVQUFZO0FBQUEsUUFDWCxVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsTUFBUTtBQUFBLFFBQ1AsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLFFBQVU7QUFBQSxRQUNULFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxNQUFRO0FBQUEsUUFDUCxVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLE9BQVM7QUFBQSxRQUNSLFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxNQUFRO0FBQUEsUUFDUCxVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxTQUFXO0FBQUEsUUFDVixVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsV0FBYTtBQUFBLFFBQ1osVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLFNBQVc7QUFBQSxRQUNWLFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxPQUFTO0FBQUEsUUFDUixVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsT0FBUztBQUFBLFFBQ1IsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxVQUFZO0FBQUEsUUFDWCxVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxhQUFlO0FBQUEsUUFDZCxVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLFVBQVk7QUFBQSxRQUNYLFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLGNBQWdCO0FBQUEsUUFDZixVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLFdBQWE7QUFBQSxRQUNaLFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxTQUFXO0FBQUEsUUFDVixVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxhQUFlO0FBQUEsUUFDZCxVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsV0FBYTtBQUFBLFFBQ1osVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLGlCQUFtQjtBQUFBLFFBQ2xCLFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLFlBQWM7QUFBQSxRQUNiLFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsV0FBYTtBQUFBLFFBQ1osVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLGVBQWlCO0FBQUEsUUFDaEIsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLElBQ0Q7QUFBQTtBQUFBOzs7QUNwbERBO0FBQUEsc0ZBQUFDLFNBQUE7QUFBQTtBQUVBLFFBQU0sV0FBVyxPQUFPLE9BQU8sQ0FBQyxHQUFHLGtCQUEwQjtBQUU3RCxRQUFNLGVBQWUsT0FBTyxLQUFLLFFBQVE7QUFFekMsV0FBTyxlQUFlLFVBQVUsVUFBVTtBQUFBLE1BQ3pDLE1BQU07QUFDTCxjQUFNLGNBQWMsS0FBSyxNQUFNLEtBQUssT0FBTyxJQUFJLGFBQWEsTUFBTTtBQUNsRSxjQUFNLGNBQWMsYUFBYSxXQUFXO0FBQzVDLGVBQU8sU0FBUyxXQUFXO0FBQUEsTUFDNUI7QUFBQSxJQUNELENBQUM7QUFFRCxJQUFBQSxRQUFPLFVBQVU7QUFBQTtBQUFBOzs7QUNkakI7QUFBQSxtR0FBQUMsU0FBQTtBQUFBO0FBQUEsUUFBSSxNQUFNLENBQUM7QUFFWCxRQUFJLGVBQWUsT0FBT0EsU0FBUTtBQUNoQyxhQUFPLGlCQUFpQjtBQUFBLElBQzFCLE9BQU87QUFDTCxNQUFBQSxRQUFPLFVBQVU7QUFBQSxJQUNuQjtBQUVBLFFBQUksaUJBQWlCLFNBQVMsV0FBVztBQUN2QyxVQUFJLElBQUksVUFBVSxXQUFXLENBQUM7QUFDOUIsVUFBSSxJQUFLLFVBQVUsVUFBVSxJQUFLLFVBQVUsV0FBVyxDQUFDLElBQUk7QUFDNUQsVUFBSSxZQUFZO0FBQ2hCLFVBQUssU0FBVSxLQUFLLEtBQUssVUFBWSxTQUFVLEtBQUssS0FBSyxRQUFTO0FBQ2hFLGFBQUs7QUFDTCxhQUFLO0FBQ0wsb0JBQWEsS0FBSyxLQUFNO0FBQ3hCLHFCQUFhO0FBQUEsTUFDZjtBQUVBLFVBQUssU0FBVSxhQUNWLFNBQVUsYUFBYSxhQUFhLFNBQ3BDLFNBQVUsYUFBYSxhQUFhLE9BQVM7QUFDaEQsZUFBTztBQUFBLE1BQ1Q7QUFDQSxVQUFLLFFBQVUsYUFDVixTQUFVLGFBQWEsYUFBYSxTQUNwQyxTQUFVLGFBQWEsYUFBYSxTQUNwQyxTQUFVLGFBQWEsYUFBYSxTQUNwQyxTQUFVLGFBQWEsYUFBYSxTQUNwQyxTQUFVLGFBQWEsYUFBYSxTQUNwQyxTQUFVLGFBQWEsYUFBYSxPQUFTO0FBQ2hELGVBQU87QUFBQSxNQUNUO0FBQ0EsVUFBSyxRQUFVLGFBQWEsYUFBYSxRQUNwQyxRQUFVLGFBQWEsYUFBYSxRQUNwQyxRQUFVLGFBQWEsYUFBYSxRQUNwQyxRQUFVLGFBQWEsYUFBYSxRQUNwQyxTQUFVLGFBQWEsYUFBYSxTQUNwQyxTQUFVLGFBQWEsYUFBYSxTQUNwQyxTQUFVLGFBQWEsYUFBYSxTQUNwQyxTQUFVLGFBQWEsYUFBYSxTQUNwQyxTQUFVLGFBQWEsYUFBYSxTQUNwQyxTQUFVLGFBQWEsYUFBYSxTQUNwQyxTQUFVLGFBQWEsYUFBYSxTQUNwQyxTQUFVLGFBQWEsYUFBYSxTQUNwQyxTQUFVLGFBQWEsYUFBYSxTQUNwQyxTQUFVLGFBQWEsYUFBYSxTQUNwQyxTQUFVLGFBQWEsYUFBYSxTQUNwQyxTQUFVLGFBQWEsYUFBYSxTQUNwQyxTQUFVLGFBQWEsYUFBYSxTQUNwQyxTQUFVLGFBQWEsYUFBYSxTQUNwQyxTQUFVLGFBQWEsYUFBYSxTQUNwQyxTQUFVLGFBQWEsYUFBYSxTQUNwQyxTQUFVLGFBQWEsYUFBYSxTQUNwQyxTQUFVLGFBQWEsYUFBYSxTQUNwQyxTQUFVLGFBQWEsYUFBYSxTQUNwQyxTQUFVLGFBQWEsYUFBYSxTQUNwQyxTQUFVLGFBQWEsYUFBYSxTQUNwQyxTQUFVLGFBQWEsYUFBYSxTQUNwQyxTQUFVLGFBQWEsYUFBYSxTQUNwQyxTQUFVLGFBQWEsYUFBYSxTQUNwQyxTQUFVLGFBQWEsYUFBYSxTQUNwQyxTQUFVLGFBQWEsYUFBYSxTQUNwQyxVQUFXLGFBQWEsYUFBYSxVQUNyQyxVQUFXLGFBQWEsYUFBYSxVQUNyQyxVQUFXLGFBQWEsYUFBYSxVQUNyQyxVQUFXLGFBQWEsYUFBYSxVQUNyQyxVQUFXLGFBQWEsYUFBYSxVQUNyQyxVQUFXLGFBQWEsYUFBYSxVQUNyQyxVQUFXLGFBQWEsYUFBYSxVQUNyQyxVQUFXLGFBQWEsYUFBYSxRQUFVO0FBQ2xELGVBQU87QUFBQSxNQUNUO0FBQ0EsVUFBSyxNQUFVLGFBQWEsYUFBYSxPQUNwQyxPQUFVLGFBQWEsYUFBYSxPQUNwQyxPQUFVLGFBQWEsYUFBYSxPQUNwQyxPQUFVLGFBQ1YsT0FBVSxhQUNWLFNBQVUsYUFBYSxhQUFhLFNBQ3BDLFNBQVUsYUFBYSxhQUFhLE9BQVM7QUFDaEQsZUFBTztBQUFBLE1BQ1Q7QUFDQSxVQUFLLE9BQVUsYUFDVixPQUFVLGFBQ1YsT0FBVSxhQUFhLGFBQWEsT0FDcEMsT0FBVSxhQUNWLE9BQVUsYUFBYSxhQUFhLE9BQ3BDLE9BQVUsYUFBYSxhQUFhLE9BQ3BDLE9BQVUsYUFBYSxhQUFhLE9BQ3BDLE9BQVUsYUFBYSxhQUFhLE9BQ3BDLE9BQVUsYUFDVixPQUFVLGFBQ1YsT0FBVSxhQUFhLGFBQWEsT0FDcEMsT0FBVSxhQUFhLGFBQWEsT0FDcEMsT0FBVSxhQUNWLE9BQVUsYUFBYSxhQUFhLE9BQ3BDLE9BQVUsYUFBYSxhQUFhLE9BQ3BDLE9BQVUsYUFDVixPQUFVLGFBQWEsYUFBYSxPQUNwQyxPQUFVLGFBQWEsYUFBYSxPQUNwQyxPQUFVLGFBQ1YsT0FBVSxhQUNWLE9BQVUsYUFDVixPQUFVLGFBQ1YsT0FBVSxhQUNWLE9BQVUsYUFDVixPQUFVLGFBQWEsYUFBYSxPQUNwQyxPQUFVLGFBQ1YsT0FBVSxhQUFhLGFBQWEsT0FDcEMsT0FBVSxhQUNWLE9BQVUsYUFBYSxhQUFhLE9BQ3BDLE9BQVUsYUFDVixPQUFVLGFBQWEsYUFBYSxPQUNwQyxPQUFVLGFBQ1YsT0FBVSxhQUFhLGFBQWEsT0FDcEMsT0FBVSxhQUFhLGFBQWEsT0FDcEMsT0FBVSxhQUNWLE9BQVUsYUFDVixPQUFVLGFBQ1YsT0FBVSxhQUNWLE9BQVUsYUFDVixPQUFVLGFBQ1YsT0FBVSxhQUNWLE9BQVUsYUFDVixPQUFVLGFBQ1YsT0FBVSxhQUNWLE9BQVUsYUFDVixPQUFVLGFBQ1YsT0FBVSxhQUNWLE9BQVUsYUFBYSxhQUFhLE9BQ3BDLE9BQVUsYUFDVixPQUFVLGFBQ1YsT0FBVSxhQUFhLGFBQWEsT0FDcEMsT0FBVSxhQUNWLE9BQVUsYUFDVixPQUFVLGFBQWEsYUFBYSxPQUNwQyxPQUFVLGFBQWEsYUFBYSxPQUNwQyxPQUFVLGFBQWEsYUFBYSxPQUNwQyxPQUFVLGFBQWEsYUFBYSxPQUNwQyxPQUFVLGFBQWEsYUFBYSxPQUNwQyxRQUFVLGFBQ1YsUUFBVSxhQUFhLGFBQWEsUUFDcEMsUUFBVSxhQUNWLFFBQVUsYUFDVixRQUFVLGFBQWEsYUFBYSxRQUNwQyxRQUFVLGFBQWEsYUFBYSxRQUNwQyxRQUFVLGFBQWEsYUFBYSxRQUNwQyxRQUFVLGFBQWEsYUFBYSxRQUNwQyxRQUFVLGFBQWEsYUFBYSxRQUNwQyxRQUFVLGFBQ1YsUUFBVSxhQUFhLGFBQWEsUUFDcEMsUUFBVSxhQUNWLFFBQVUsYUFDVixRQUFVLGFBQ1YsUUFBVSxhQUNWLFFBQVUsYUFDVixRQUFVLGFBQWEsYUFBYSxRQUNwQyxRQUFVLGFBQ1YsUUFBVSxhQUNWLFFBQVUsYUFDVixRQUFVLGFBQ1YsUUFBVSxhQUNWLFFBQVUsYUFDVixRQUFVLGFBQWEsYUFBYSxRQUNwQyxRQUFVLGFBQ1YsUUFBVSxhQUNWLFFBQVUsYUFBYSxhQUFhLFFBQ3BDLFFBQVUsYUFBYSxhQUFhLFFBQ3BDLFFBQVUsYUFBYSxhQUFhLFFBQ3BDLFFBQVUsYUFBYSxhQUFhLFFBQ3BDLFFBQVUsYUFDVixRQUFVLGFBQWEsYUFBYSxRQUNwQyxRQUFVLGFBQWEsYUFBYSxRQUNwQyxRQUFVLGFBQ1YsUUFBVSxhQUNWLFFBQVUsYUFDVixRQUFVLGFBQ1YsUUFBVSxhQUFhLGFBQWEsUUFDcEMsUUFBVSxhQUFhLGFBQWEsUUFDcEMsUUFBVSxhQUNWLFFBQVUsYUFDVixRQUFVLGFBQ1YsUUFBVSxhQUNWLFFBQVUsYUFDVixRQUFVLGFBQWEsYUFBYSxRQUNwQyxRQUFVLGFBQ1YsUUFBVSxhQUNWLFFBQVUsYUFBYSxhQUFhLFFBQ3BDLFFBQVUsYUFDVixRQUFVLGFBQWEsYUFBYSxRQUNwQyxRQUFVLGFBQWEsYUFBYSxRQUNwQyxRQUFVLGFBQ1YsUUFBVSxhQUNWLFFBQVUsYUFDVixRQUFVLGFBQWEsYUFBYSxRQUNwQyxRQUFVLGFBQWEsYUFBYSxRQUNwQyxRQUFVLGFBQWEsYUFBYSxRQUNwQyxRQUFVLGFBQWEsYUFBYSxRQUNwQyxRQUFVLGFBQWEsYUFBYSxRQUNwQyxRQUFVLGFBQWEsYUFBYSxRQUNwQyxRQUFVLGFBQ1YsUUFBVSxhQUNWLFFBQVUsYUFDVixRQUFVLGFBQ1YsUUFBVSxhQUNWLFFBQVUsYUFBYSxhQUFhLFFBQ3BDLFFBQVUsYUFBYSxhQUFhLFFBQ3BDLFFBQVUsYUFBYSxhQUFhLFFBQ3BDLFFBQVUsYUFBYSxhQUFhLFFBQ3BDLFFBQVUsYUFBYSxhQUFhLFFBQ3BDLFFBQVUsYUFBYSxhQUFhLFFBQ3BDLFFBQVUsYUFBYSxhQUFhLFFBQ3BDLFFBQVUsYUFBYSxhQUFhLFFBQ3BDLFFBQVUsYUFBYSxhQUFhLFFBQ3BDLFFBQVUsYUFBYSxhQUFhLFFBQ3BDLFFBQVUsYUFBYSxhQUFhLFFBQ3BDLFFBQVUsYUFBYSxhQUFhLFFBQ3BDLFFBQVUsYUFDVixRQUFVLGFBQWEsYUFBYSxRQUNwQyxRQUFVLGFBQWEsYUFBYSxRQUNwQyxRQUFVLGFBQ1YsUUFBVSxhQUFhLGFBQWEsUUFDcEMsUUFBVSxhQUNWLFFBQVUsYUFBYSxhQUFhLFFBQ3BDLFFBQVUsYUFBYSxhQUFhLFFBQ3BDLFFBQVUsYUFDVixRQUFVLGFBQ1YsUUFBVSxhQUNWLFFBQVUsYUFDVixRQUFVLGFBQWEsYUFBYSxRQUNwQyxRQUFVLGFBQWEsYUFBYSxRQUNwQyxRQUFVLGFBQWEsYUFBYSxRQUNwQyxRQUFVLGFBQWEsYUFBYSxRQUNwQyxRQUFVLGFBQ1YsUUFBVSxhQUFhLGFBQWEsUUFDcEMsUUFBVSxhQUFhLGFBQWEsUUFDcEMsUUFBVSxhQUFhLGFBQWEsUUFDcEMsUUFBVSxhQUFhLGFBQWEsUUFDcEMsUUFBVSxhQUNWLFFBQVUsYUFBYSxhQUFhLFFBQ3BDLFNBQVUsYUFDVixTQUFVLGFBQ1YsU0FBVSxhQUFhLGFBQWEsU0FDcEMsU0FBVSxhQUFhLGFBQWEsU0FDcEMsU0FBVSxhQUFhLGFBQWEsU0FDcEMsU0FBVSxhQUFhLGFBQWEsU0FDcEMsU0FBVSxhQUFhLGFBQWEsU0FDcEMsU0FBVSxhQUNWLFVBQVcsYUFBYSxhQUFhLFVBQ3JDLFVBQVcsYUFBYSxhQUFhLFVBQ3JDLFVBQVcsYUFBYSxhQUFhLFVBQ3JDLFVBQVcsYUFBYSxhQUFhLFVBQ3JDLFVBQVcsYUFBYSxhQUFhLFVBQ3JDLFVBQVcsYUFBYSxhQUFhLFdBQ3JDLFdBQVksYUFBYSxhQUFhLFNBQVc7QUFDcEQsZUFBTztBQUFBLE1BQ1Q7QUFFQSxhQUFPO0FBQUEsSUFDVDtBQUVBLFFBQUksa0JBQWtCLFNBQVMsV0FBVztBQUN4QyxVQUFJLE9BQU8sS0FBSyxlQUFlLFNBQVM7QUFDeEMsVUFBSSxRQUFRLE9BQU8sUUFBUSxPQUFPLFFBQVEsS0FBSztBQUM3QyxlQUFPO0FBQUEsTUFDVCxPQUFPO0FBQ0wsZUFBTztBQUFBLE1BQ1Q7QUFBQSxJQUNGO0FBR0EsYUFBUyxjQUFjLFFBQVE7QUFDN0IsYUFBTyxPQUFPLE1BQU0sa0RBQWtELEtBQUssQ0FBQztBQUFBLElBQzlFO0FBRUEsUUFBSSxTQUFTLFNBQVMsUUFBUTtBQUM1QixVQUFJLGFBQWEsY0FBYyxNQUFNO0FBQ3JDLFVBQUksTUFBTTtBQUNWLGVBQVMsSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFDMUMsY0FBTSxNQUFNLEtBQUssZ0JBQWdCLFdBQVcsQ0FBQyxDQUFDO0FBQUEsTUFDaEQ7QUFDQSxhQUFPO0FBQUEsSUFDVDtBQUVBLFFBQUksUUFBUSxTQUFTLE1BQU0sT0FBTyxLQUFLO0FBQ3JDLGdCQUFVLElBQUksT0FBTyxJQUFJO0FBQ3pCLGNBQVEsUUFBUSxRQUFRO0FBQ3hCLFlBQU0sTUFBTSxNQUFNO0FBQ2xCLFVBQUksUUFBUSxHQUFHO0FBQ1gsZ0JBQVEsVUFBVTtBQUFBLE1BQ3RCO0FBQ0EsVUFBSSxNQUFNLEdBQUc7QUFDVCxjQUFNLFVBQVU7QUFBQSxNQUNwQjtBQUNBLFVBQUksU0FBUztBQUNiLFVBQUksU0FBUztBQUNiLFVBQUksUUFBUSxjQUFjLElBQUk7QUFDOUIsZUFBUyxJQUFJLEdBQUcsSUFBSSxNQUFNLFFBQVEsS0FBSztBQUNyQyxZQUFJLE9BQU8sTUFBTSxDQUFDO0FBQ2xCLFlBQUksVUFBVSxJQUFJLE9BQU8sSUFBSTtBQUM3QixZQUFJLFVBQVUsU0FBUyxXQUFXLElBQUksSUFBSSxJQUFJO0FBQzFDLGNBQUksU0FBUyxXQUFXLEtBQUs7QUFDekIsc0JBQVU7QUFBQSxVQUNkLE9BQU87QUFDSDtBQUFBLFVBQ0o7QUFBQSxRQUNKO0FBQ0Esa0JBQVU7QUFBQSxNQUNaO0FBQ0EsYUFBTztBQUFBLElBQ1Q7QUFBQTtBQUFBOzs7QUN0VEE7QUFBQSxrSEFBQUMsU0FBQTtBQUFBO0FBQUEsSUFBQUEsUUFBTyxVQUFVLFFBQVEsUUFBUTtBQUFBO0FBQUE7OztBQ0FqQztBQUFBLHVIQUFBQyxTQUFBO0FBQUE7QUFFQSxhQUFTLFFBQVEsUUFBUSxnQkFBZ0I7QUFBRSxVQUFJLE9BQU8sT0FBTyxLQUFLLE1BQU07QUFBRyxVQUFJLE9BQU8sdUJBQXVCO0FBQUUsWUFBSSxVQUFVLE9BQU8sc0JBQXNCLE1BQU07QUFBRywyQkFBbUIsVUFBVSxRQUFRLE9BQU8sU0FBVSxLQUFLO0FBQUUsaUJBQU8sT0FBTyx5QkFBeUIsUUFBUSxHQUFHLEVBQUU7QUFBQSxRQUFZLENBQUMsSUFBSSxLQUFLLEtBQUssTUFBTSxNQUFNLE9BQU87QUFBQSxNQUFHO0FBQUUsYUFBTztBQUFBLElBQU07QUFDcFYsYUFBUyxjQUFjLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFFBQVEsVUFBVSxDQUFDLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQztBQUFHLFlBQUksSUFBSSxRQUFRLE9BQU8sTUFBTSxHQUFHLElBQUUsRUFBRSxRQUFRLFNBQVUsS0FBSztBQUFFLDBCQUFnQixRQUFRLEtBQUssT0FBTyxHQUFHLENBQUM7QUFBQSxRQUFHLENBQUMsSUFBSSxPQUFPLDRCQUE0QixPQUFPLGlCQUFpQixRQUFRLE9BQU8sMEJBQTBCLE1BQU0sQ0FBQyxJQUFJLFFBQVEsT0FBTyxNQUFNLENBQUMsRUFBRSxRQUFRLFNBQVUsS0FBSztBQUFFLGlCQUFPLGVBQWUsUUFBUSxLQUFLLE9BQU8seUJBQXlCLFFBQVEsR0FBRyxDQUFDO0FBQUEsUUFBRyxDQUFDO0FBQUEsTUFBRztBQUFFLGFBQU87QUFBQSxJQUFRO0FBQ3pmLGFBQVMsZ0JBQWdCLEtBQUssS0FBSyxPQUFPO0FBQUUsWUFBTSxlQUFlLEdBQUc7QUFBRyxVQUFJLE9BQU8sS0FBSztBQUFFLGVBQU8sZUFBZSxLQUFLLEtBQUssRUFBRSxPQUFjLFlBQVksTUFBTSxjQUFjLE1BQU0sVUFBVSxLQUFLLENBQUM7QUFBQSxNQUFHLE9BQU87QUFBRSxZQUFJLEdBQUcsSUFBSTtBQUFBLE1BQU87QUFBRSxhQUFPO0FBQUEsSUFBSztBQUMzTyxhQUFTLGdCQUFnQixVQUFVLGFBQWE7QUFBRSxVQUFJLEVBQUUsb0JBQW9CLGNBQWM7QUFBRSxjQUFNLElBQUksVUFBVSxtQ0FBbUM7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUN4SixhQUFTLGtCQUFrQixRQUFRLE9BQU87QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLE1BQU0sUUFBUSxLQUFLO0FBQUUsWUFBSSxhQUFhLE1BQU0sQ0FBQztBQUFHLG1CQUFXLGFBQWEsV0FBVyxjQUFjO0FBQU8sbUJBQVcsZUFBZTtBQUFNLFlBQUksV0FBVztBQUFZLHFCQUFXLFdBQVc7QUFBTSxlQUFPLGVBQWUsUUFBUSxlQUFlLFdBQVcsR0FBRyxHQUFHLFVBQVU7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUM1VSxhQUFTLGFBQWEsYUFBYSxZQUFZLGFBQWE7QUFBRSxVQUFJO0FBQVksMEJBQWtCLFlBQVksV0FBVyxVQUFVO0FBQUcsVUFBSTtBQUFhLDBCQUFrQixhQUFhLFdBQVc7QUFBRyxhQUFPLGVBQWUsYUFBYSxhQUFhLEVBQUUsVUFBVSxNQUFNLENBQUM7QUFBRyxhQUFPO0FBQUEsSUFBYTtBQUM1UixhQUFTLGVBQWUsS0FBSztBQUFFLFVBQUksTUFBTSxhQUFhLEtBQUssUUFBUTtBQUFHLGFBQU8sT0FBTyxRQUFRLFdBQVcsTUFBTSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQzFILGFBQVMsYUFBYSxPQUFPLE1BQU07QUFBRSxVQUFJLE9BQU8sVUFBVSxZQUFZLFVBQVU7QUFBTSxlQUFPO0FBQU8sVUFBSSxPQUFPLE1BQU0sT0FBTyxXQUFXO0FBQUcsVUFBSSxTQUFTLFFBQVc7QUFBRSxZQUFJLE1BQU0sS0FBSyxLQUFLLE9BQU8sUUFBUSxTQUFTO0FBQUcsWUFBSSxPQUFPLFFBQVE7QUFBVSxpQkFBTztBQUFLLGNBQU0sSUFBSSxVQUFVLDhDQUE4QztBQUFBLE1BQUc7QUFBRSxjQUFRLFNBQVMsV0FBVyxTQUFTLFFBQVEsS0FBSztBQUFBLElBQUc7QUFDeFgsUUFBSSxXQUFXLFFBQVEsUUFBUTtBQUEvQixRQUNFQyxVQUFTLFNBQVM7QUFDcEIsUUFBSSxZQUFZLFFBQVEsTUFBTTtBQUE5QixRQUNFLFVBQVUsVUFBVTtBQUN0QixRQUFJLFNBQVMsV0FBVyxRQUFRLFVBQVU7QUFDMUMsYUFBUyxXQUFXLEtBQUssUUFBUSxRQUFRO0FBQ3ZDLE1BQUFBLFFBQU8sVUFBVSxLQUFLLEtBQUssS0FBSyxRQUFRLE1BQU07QUFBQSxJQUNoRDtBQUNBLElBQUFELFFBQU8sVUFBdUIsMkJBQVk7QUFDeEMsZUFBUyxhQUFhO0FBQ3BCLHdCQUFnQixNQUFNLFVBQVU7QUFDaEMsYUFBSyxPQUFPO0FBQ1osYUFBSyxPQUFPO0FBQ1osYUFBSyxTQUFTO0FBQUEsTUFDaEI7QUFDQSxtQkFBYSxZQUFZLENBQUM7QUFBQSxRQUN4QixLQUFLO0FBQUEsUUFDTCxPQUFPLFNBQVMsS0FBSyxHQUFHO0FBQ3RCLGNBQUksUUFBUTtBQUFBLFlBQ1YsTUFBTTtBQUFBLFlBQ04sTUFBTTtBQUFBLFVBQ1I7QUFDQSxjQUFJLEtBQUssU0FBUztBQUFHLGlCQUFLLEtBQUssT0FBTztBQUFBO0FBQVcsaUJBQUssT0FBTztBQUM3RCxlQUFLLE9BQU87QUFDWixZQUFFLEtBQUs7QUFBQSxRQUNUO0FBQUEsTUFDRixHQUFHO0FBQUEsUUFDRCxLQUFLO0FBQUEsUUFDTCxPQUFPLFNBQVMsUUFBUSxHQUFHO0FBQ3pCLGNBQUksUUFBUTtBQUFBLFlBQ1YsTUFBTTtBQUFBLFlBQ04sTUFBTSxLQUFLO0FBQUEsVUFDYjtBQUNBLGNBQUksS0FBSyxXQUFXO0FBQUcsaUJBQUssT0FBTztBQUNuQyxlQUFLLE9BQU87QUFDWixZQUFFLEtBQUs7QUFBQSxRQUNUO0FBQUEsTUFDRixHQUFHO0FBQUEsUUFDRCxLQUFLO0FBQUEsUUFDTCxPQUFPLFNBQVMsUUFBUTtBQUN0QixjQUFJLEtBQUssV0FBVztBQUFHO0FBQ3ZCLGNBQUksTUFBTSxLQUFLLEtBQUs7QUFDcEIsY0FBSSxLQUFLLFdBQVc7QUFBRyxpQkFBSyxPQUFPLEtBQUssT0FBTztBQUFBO0FBQVUsaUJBQUssT0FBTyxLQUFLLEtBQUs7QUFDL0UsWUFBRSxLQUFLO0FBQ1AsaUJBQU87QUFBQSxRQUNUO0FBQUEsTUFDRixHQUFHO0FBQUEsUUFDRCxLQUFLO0FBQUEsUUFDTCxPQUFPLFNBQVMsUUFBUTtBQUN0QixlQUFLLE9BQU8sS0FBSyxPQUFPO0FBQ3hCLGVBQUssU0FBUztBQUFBLFFBQ2hCO0FBQUEsTUFDRixHQUFHO0FBQUEsUUFDRCxLQUFLO0FBQUEsUUFDTCxPQUFPLFNBQVMsS0FBSyxHQUFHO0FBQ3RCLGNBQUksS0FBSyxXQUFXO0FBQUcsbUJBQU87QUFDOUIsY0FBSSxJQUFJLEtBQUs7QUFDYixjQUFJLE1BQU0sS0FBSyxFQUFFO0FBQ2pCLGlCQUFPLElBQUksRUFBRTtBQUFNLG1CQUFPLElBQUksRUFBRTtBQUNoQyxpQkFBTztBQUFBLFFBQ1Q7QUFBQSxNQUNGLEdBQUc7QUFBQSxRQUNELEtBQUs7QUFBQSxRQUNMLE9BQU8sU0FBUyxPQUFPLEdBQUc7QUFDeEIsY0FBSSxLQUFLLFdBQVc7QUFBRyxtQkFBT0MsUUFBTyxNQUFNLENBQUM7QUFDNUMsY0FBSSxNQUFNQSxRQUFPLFlBQVksTUFBTSxDQUFDO0FBQ3BDLGNBQUksSUFBSSxLQUFLO0FBQ2IsY0FBSSxJQUFJO0FBQ1IsaUJBQU8sR0FBRztBQUNSLHVCQUFXLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFDekIsaUJBQUssRUFBRSxLQUFLO0FBQ1osZ0JBQUksRUFBRTtBQUFBLFVBQ1I7QUFDQSxpQkFBTztBQUFBLFFBQ1Q7QUFBQTtBQUFBLE1BR0YsR0FBRztBQUFBLFFBQ0QsS0FBSztBQUFBLFFBQ0wsT0FBTyxTQUFTLFFBQVEsR0FBRyxZQUFZO0FBQ3JDLGNBQUk7QUFDSixjQUFJLElBQUksS0FBSyxLQUFLLEtBQUssUUFBUTtBQUU3QixrQkFBTSxLQUFLLEtBQUssS0FBSyxNQUFNLEdBQUcsQ0FBQztBQUMvQixpQkFBSyxLQUFLLE9BQU8sS0FBSyxLQUFLLEtBQUssTUFBTSxDQUFDO0FBQUEsVUFDekMsV0FBVyxNQUFNLEtBQUssS0FBSyxLQUFLLFFBQVE7QUFFdEMsa0JBQU0sS0FBSyxNQUFNO0FBQUEsVUFDbkIsT0FBTztBQUVMLGtCQUFNLGFBQWEsS0FBSyxXQUFXLENBQUMsSUFBSSxLQUFLLFdBQVcsQ0FBQztBQUFBLFVBQzNEO0FBQ0EsaUJBQU87QUFBQSxRQUNUO0FBQUEsTUFDRixHQUFHO0FBQUEsUUFDRCxLQUFLO0FBQUEsUUFDTCxPQUFPLFNBQVMsUUFBUTtBQUN0QixpQkFBTyxLQUFLLEtBQUs7QUFBQSxRQUNuQjtBQUFBO0FBQUEsTUFHRixHQUFHO0FBQUEsUUFDRCxLQUFLO0FBQUEsUUFDTCxPQUFPLFNBQVMsV0FBVyxHQUFHO0FBQzVCLGNBQUksSUFBSSxLQUFLO0FBQ2IsY0FBSSxJQUFJO0FBQ1IsY0FBSSxNQUFNLEVBQUU7QUFDWixlQUFLLElBQUk7QUFDVCxpQkFBTyxJQUFJLEVBQUUsTUFBTTtBQUNqQixnQkFBSSxNQUFNLEVBQUU7QUFDWixnQkFBSSxLQUFLLElBQUksSUFBSSxTQUFTLElBQUksU0FBUztBQUN2QyxnQkFBSSxPQUFPLElBQUk7QUFBUSxxQkFBTztBQUFBO0FBQVMscUJBQU8sSUFBSSxNQUFNLEdBQUcsQ0FBQztBQUM1RCxpQkFBSztBQUNMLGdCQUFJLE1BQU0sR0FBRztBQUNYLGtCQUFJLE9BQU8sSUFBSSxRQUFRO0FBQ3JCLGtCQUFFO0FBQ0Ysb0JBQUksRUFBRTtBQUFNLHVCQUFLLE9BQU8sRUFBRTtBQUFBO0FBQVUsdUJBQUssT0FBTyxLQUFLLE9BQU87QUFBQSxjQUM5RCxPQUFPO0FBQ0wscUJBQUssT0FBTztBQUNaLGtCQUFFLE9BQU8sSUFBSSxNQUFNLEVBQUU7QUFBQSxjQUN2QjtBQUNBO0FBQUEsWUFDRjtBQUNBLGNBQUU7QUFBQSxVQUNKO0FBQ0EsZUFBSyxVQUFVO0FBQ2YsaUJBQU87QUFBQSxRQUNUO0FBQUE7QUFBQSxNQUdGLEdBQUc7QUFBQSxRQUNELEtBQUs7QUFBQSxRQUNMLE9BQU8sU0FBUyxXQUFXLEdBQUc7QUFDNUIsY0FBSSxNQUFNQSxRQUFPLFlBQVksQ0FBQztBQUM5QixjQUFJLElBQUksS0FBSztBQUNiLGNBQUksSUFBSTtBQUNSLFlBQUUsS0FBSyxLQUFLLEdBQUc7QUFDZixlQUFLLEVBQUUsS0FBSztBQUNaLGlCQUFPLElBQUksRUFBRSxNQUFNO0FBQ2pCLGdCQUFJLE1BQU0sRUFBRTtBQUNaLGdCQUFJLEtBQUssSUFBSSxJQUFJLFNBQVMsSUFBSSxTQUFTO0FBQ3ZDLGdCQUFJLEtBQUssS0FBSyxJQUFJLFNBQVMsR0FBRyxHQUFHLEVBQUU7QUFDbkMsaUJBQUs7QUFDTCxnQkFBSSxNQUFNLEdBQUc7QUFDWCxrQkFBSSxPQUFPLElBQUksUUFBUTtBQUNyQixrQkFBRTtBQUNGLG9CQUFJLEVBQUU7QUFBTSx1QkFBSyxPQUFPLEVBQUU7QUFBQTtBQUFVLHVCQUFLLE9BQU8sS0FBSyxPQUFPO0FBQUEsY0FDOUQsT0FBTztBQUNMLHFCQUFLLE9BQU87QUFDWixrQkFBRSxPQUFPLElBQUksTUFBTSxFQUFFO0FBQUEsY0FDdkI7QUFDQTtBQUFBLFlBQ0Y7QUFDQSxjQUFFO0FBQUEsVUFDSjtBQUNBLGVBQUssVUFBVTtBQUNmLGlCQUFPO0FBQUEsUUFDVDtBQUFBO0FBQUEsTUFHRixHQUFHO0FBQUEsUUFDRCxLQUFLO0FBQUEsUUFDTCxPQUFPLFNBQVMsTUFBTSxHQUFHLFNBQVM7QUFDaEMsaUJBQU8sUUFBUSxNQUFNLGNBQWMsY0FBYyxDQUFDLEdBQUcsT0FBTyxHQUFHLENBQUMsR0FBRztBQUFBO0FBQUEsWUFFakUsT0FBTztBQUFBO0FBQUEsWUFFUCxlQUFlO0FBQUEsVUFDakIsQ0FBQyxDQUFDO0FBQUEsUUFDSjtBQUFBLE1BQ0YsQ0FBQyxDQUFDO0FBQ0YsYUFBTztBQUFBLElBQ1QsRUFBRTtBQUFBO0FBQUE7OztBQ3RMRjtBQUFBLG1IQUFBQyxTQUFBO0FBQUE7QUFHQSxhQUFTLFFBQVEsS0FBSyxJQUFJO0FBQ3hCLFVBQUksUUFBUTtBQUNaLFVBQUksb0JBQW9CLEtBQUssa0JBQWtCLEtBQUssZUFBZTtBQUNuRSxVQUFJLG9CQUFvQixLQUFLLGtCQUFrQixLQUFLLGVBQWU7QUFDbkUsVUFBSSxxQkFBcUIsbUJBQW1CO0FBQzFDLFlBQUksSUFBSTtBQUNOLGFBQUcsR0FBRztBQUFBLFFBQ1IsV0FBVyxLQUFLO0FBQ2QsY0FBSSxDQUFDLEtBQUssZ0JBQWdCO0FBQ3hCLG9CQUFRLFNBQVMsYUFBYSxNQUFNLEdBQUc7QUFBQSxVQUN6QyxXQUFXLENBQUMsS0FBSyxlQUFlLGNBQWM7QUFDNUMsaUJBQUssZUFBZSxlQUFlO0FBQ25DLG9CQUFRLFNBQVMsYUFBYSxNQUFNLEdBQUc7QUFBQSxVQUN6QztBQUFBLFFBQ0Y7QUFDQSxlQUFPO0FBQUEsTUFDVDtBQUtBLFVBQUksS0FBSyxnQkFBZ0I7QUFDdkIsYUFBSyxlQUFlLFlBQVk7QUFBQSxNQUNsQztBQUdBLFVBQUksS0FBSyxnQkFBZ0I7QUFDdkIsYUFBSyxlQUFlLFlBQVk7QUFBQSxNQUNsQztBQUNBLFdBQUssU0FBUyxPQUFPLE1BQU0sU0FBVUMsTUFBSztBQUN4QyxZQUFJLENBQUMsTUFBTUEsTUFBSztBQUNkLGNBQUksQ0FBQyxNQUFNLGdCQUFnQjtBQUN6QixvQkFBUSxTQUFTLHFCQUFxQixPQUFPQSxJQUFHO0FBQUEsVUFDbEQsV0FBVyxDQUFDLE1BQU0sZUFBZSxjQUFjO0FBQzdDLGtCQUFNLGVBQWUsZUFBZTtBQUNwQyxvQkFBUSxTQUFTLHFCQUFxQixPQUFPQSxJQUFHO0FBQUEsVUFDbEQsT0FBTztBQUNMLG9CQUFRLFNBQVMsYUFBYSxLQUFLO0FBQUEsVUFDckM7QUFBQSxRQUNGLFdBQVcsSUFBSTtBQUNiLGtCQUFRLFNBQVMsYUFBYSxLQUFLO0FBQ25DLGFBQUdBLElBQUc7QUFBQSxRQUNSLE9BQU87QUFDTCxrQkFBUSxTQUFTLGFBQWEsS0FBSztBQUFBLFFBQ3JDO0FBQUEsTUFDRixDQUFDO0FBQ0QsYUFBTztBQUFBLElBQ1Q7QUFDQSxhQUFTLG9CQUFvQkMsT0FBTSxLQUFLO0FBQ3RDLGtCQUFZQSxPQUFNLEdBQUc7QUFDckIsa0JBQVlBLEtBQUk7QUFBQSxJQUNsQjtBQUNBLGFBQVMsWUFBWUEsT0FBTTtBQUN6QixVQUFJQSxNQUFLLGtCQUFrQixDQUFDQSxNQUFLLGVBQWU7QUFBVztBQUMzRCxVQUFJQSxNQUFLLGtCQUFrQixDQUFDQSxNQUFLLGVBQWU7QUFBVztBQUMzRCxNQUFBQSxNQUFLLEtBQUssT0FBTztBQUFBLElBQ25CO0FBQ0EsYUFBUyxZQUFZO0FBQ25CLFVBQUksS0FBSyxnQkFBZ0I7QUFDdkIsYUFBSyxlQUFlLFlBQVk7QUFDaEMsYUFBSyxlQUFlLFVBQVU7QUFDOUIsYUFBSyxlQUFlLFFBQVE7QUFDNUIsYUFBSyxlQUFlLGFBQWE7QUFBQSxNQUNuQztBQUNBLFVBQUksS0FBSyxnQkFBZ0I7QUFDdkIsYUFBSyxlQUFlLFlBQVk7QUFDaEMsYUFBSyxlQUFlLFFBQVE7QUFDNUIsYUFBSyxlQUFlLFNBQVM7QUFDN0IsYUFBSyxlQUFlLGNBQWM7QUFDbEMsYUFBSyxlQUFlLGNBQWM7QUFDbEMsYUFBSyxlQUFlLFdBQVc7QUFDL0IsYUFBSyxlQUFlLGVBQWU7QUFBQSxNQUNyQztBQUFBLElBQ0Y7QUFDQSxhQUFTLFlBQVlBLE9BQU0sS0FBSztBQUM5QixNQUFBQSxNQUFLLEtBQUssU0FBUyxHQUFHO0FBQUEsSUFDeEI7QUFDQSxhQUFTLGVBQWUsUUFBUSxLQUFLO0FBT25DLFVBQUksU0FBUyxPQUFPO0FBQ3BCLFVBQUksU0FBUyxPQUFPO0FBQ3BCLFVBQUksVUFBVSxPQUFPLGVBQWUsVUFBVSxPQUFPO0FBQWEsZUFBTyxRQUFRLEdBQUc7QUFBQTtBQUFPLGVBQU8sS0FBSyxTQUFTLEdBQUc7QUFBQSxJQUNySDtBQUNBLElBQUFGLFFBQU8sVUFBVTtBQUFBLE1BQ2Y7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLElBQ0Y7QUFBQTtBQUFBOzs7QUMvRkE7QUFBQSw2RkFBQUcsU0FBQTtBQUFBO0FBRUEsUUFBTSxRQUFRLENBQUM7QUFFZixhQUFTLGdCQUFnQixNQUFNLFNBQVMsTUFBTTtBQUM1QyxVQUFJLENBQUMsTUFBTTtBQUNULGVBQU87QUFBQSxNQUNUO0FBRUEsZUFBUyxXQUFZLE1BQU0sTUFBTSxNQUFNO0FBQ3JDLFlBQUksT0FBTyxZQUFZLFVBQVU7QUFDL0IsaUJBQU87QUFBQSxRQUNULE9BQU87QUFDTCxpQkFBTyxRQUFRLE1BQU0sTUFBTSxJQUFJO0FBQUEsUUFDakM7QUFBQSxNQUNGO0FBQUEsTUFFQSxNQUFNLGtCQUFrQixLQUFLO0FBQUEsUUFDM0IsWUFBYSxNQUFNLE1BQU0sTUFBTTtBQUM3QixnQkFBTSxXQUFXLE1BQU0sTUFBTSxJQUFJLENBQUM7QUFBQSxRQUNwQztBQUFBLE1BQ0Y7QUFFQSxnQkFBVSxVQUFVLE9BQU8sS0FBSztBQUNoQyxnQkFBVSxVQUFVLE9BQU87QUFFM0IsWUFBTSxJQUFJLElBQUk7QUFBQSxJQUNoQjtBQUdBLGFBQVMsTUFBTSxVQUFVLE9BQU87QUFDOUIsVUFBSSxNQUFNLFFBQVEsUUFBUSxHQUFHO0FBQzNCLGNBQU0sTUFBTSxTQUFTO0FBQ3JCLG1CQUFXLFNBQVMsSUFBSSxDQUFDLE1BQU0sT0FBTyxDQUFDLENBQUM7QUFDeEMsWUFBSSxNQUFNLEdBQUc7QUFDWCxpQkFBTyxVQUFVLEtBQUssSUFBSSxTQUFTLE1BQU0sR0FBRyxNQUFNLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxVQUN4RCxTQUFTLE1BQU0sQ0FBQztBQUFBLFFBQ3pCLFdBQVcsUUFBUSxHQUFHO0FBQ3BCLGlCQUFPLFVBQVUsS0FBSyxJQUFJLFNBQVMsQ0FBQyxDQUFDLE9BQU8sU0FBUyxDQUFDLENBQUM7QUFBQSxRQUN6RCxPQUFPO0FBQ0wsaUJBQU8sTUFBTSxLQUFLLElBQUksU0FBUyxDQUFDLENBQUM7QUFBQSxRQUNuQztBQUFBLE1BQ0YsT0FBTztBQUNMLGVBQU8sTUFBTSxLQUFLLElBQUksT0FBTyxRQUFRLENBQUM7QUFBQSxNQUN4QztBQUFBLElBQ0Y7QUFHQSxhQUFTLFdBQVcsS0FBSyxRQUFRLEtBQUs7QUFDckMsYUFBTyxJQUFJLE9BQU8sQ0FBQyxPQUFPLE1BQU0sSUFBSSxJQUFJLENBQUMsS0FBSyxPQUFPLE1BQU0sTUFBTTtBQUFBLElBQ2xFO0FBR0EsYUFBUyxTQUFTLEtBQUssUUFBUSxVQUFVO0FBQ3hDLFVBQUksYUFBYSxVQUFhLFdBQVcsSUFBSSxRQUFRO0FBQ3BELG1CQUFXLElBQUk7QUFBQSxNQUNoQjtBQUNBLGFBQU8sSUFBSSxVQUFVLFdBQVcsT0FBTyxRQUFRLFFBQVEsTUFBTTtBQUFBLElBQzlEO0FBR0EsYUFBUyxTQUFTLEtBQUssUUFBUSxPQUFPO0FBQ3BDLFVBQUksT0FBTyxVQUFVLFVBQVU7QUFDN0IsZ0JBQVE7QUFBQSxNQUNWO0FBRUEsVUFBSSxRQUFRLE9BQU8sU0FBUyxJQUFJLFFBQVE7QUFDdEMsZUFBTztBQUFBLE1BQ1QsT0FBTztBQUNMLGVBQU8sSUFBSSxRQUFRLFFBQVEsS0FBSyxNQUFNO0FBQUEsTUFDeEM7QUFBQSxJQUNGO0FBRUEsb0JBQWdCLHlCQUF5QixTQUFVLE1BQU0sT0FBTztBQUM5RCxhQUFPLGdCQUFnQixRQUFRLDhCQUE4QixPQUFPO0FBQUEsSUFDdEUsR0FBRyxTQUFTO0FBQ1osb0JBQWdCLHdCQUF3QixTQUFVLE1BQU0sVUFBVSxRQUFRO0FBRXhFLFVBQUk7QUFDSixVQUFJLE9BQU8sYUFBYSxZQUFZLFdBQVcsVUFBVSxNQUFNLEdBQUc7QUFDaEUscUJBQWE7QUFDYixtQkFBVyxTQUFTLFFBQVEsU0FBUyxFQUFFO0FBQUEsTUFDekMsT0FBTztBQUNMLHFCQUFhO0FBQUEsTUFDZjtBQUVBLFVBQUk7QUFDSixVQUFJLFNBQVMsTUFBTSxXQUFXLEdBQUc7QUFFL0IsY0FBTSxPQUFPLElBQUksSUFBSSxVQUFVLElBQUksTUFBTSxVQUFVLE1BQU0sQ0FBQztBQUFBLE1BQzVELE9BQU87QUFDTCxjQUFNLE9BQU8sU0FBUyxNQUFNLEdBQUcsSUFBSSxhQUFhO0FBQ2hELGNBQU0sUUFBUSxJQUFJLEtBQUssSUFBSSxJQUFJLFVBQVUsSUFBSSxNQUFNLFVBQVUsTUFBTSxDQUFDO0FBQUEsTUFDdEU7QUFFQSxhQUFPLG1CQUFtQixPQUFPLE1BQU07QUFDdkMsYUFBTztBQUFBLElBQ1QsR0FBRyxTQUFTO0FBQ1osb0JBQWdCLDZCQUE2Qix5QkFBeUI7QUFDdEUsb0JBQWdCLDhCQUE4QixTQUFVLE1BQU07QUFDNUQsYUFBTyxTQUFTLE9BQU87QUFBQSxJQUN6QixDQUFDO0FBQ0Qsb0JBQWdCLDhCQUE4QixpQkFBaUI7QUFDL0Qsb0JBQWdCLHdCQUF3QixTQUFVLE1BQU07QUFDdEQsYUFBTyxpQkFBaUIsT0FBTztBQUFBLElBQ2pDLENBQUM7QUFDRCxvQkFBZ0IseUJBQXlCLGdDQUFnQztBQUN6RSxvQkFBZ0IsMEJBQTBCLDJCQUEyQjtBQUNyRSxvQkFBZ0IsOEJBQThCLGlCQUFpQjtBQUMvRCxvQkFBZ0IsMEJBQTBCLHVDQUF1QyxTQUFTO0FBQzFGLG9CQUFnQix3QkFBd0IsU0FBVSxLQUFLO0FBQ3JELGFBQU8sdUJBQXVCO0FBQUEsSUFDaEMsR0FBRyxTQUFTO0FBQ1osb0JBQWdCLHNDQUFzQyxrQ0FBa0M7QUFFeEYsSUFBQUEsUUFBTyxRQUFRLFFBQVE7QUFBQTtBQUFBOzs7QUNuSHZCO0FBQUEsaUhBQUFDLFNBQUE7QUFBQTtBQUVBLFFBQUksd0JBQXdCLGlCQUEyQixNQUFNO0FBQzdELGFBQVMsa0JBQWtCLFNBQVMsVUFBVSxXQUFXO0FBQ3ZELGFBQU8sUUFBUSxpQkFBaUIsT0FBTyxRQUFRLGdCQUFnQixXQUFXLFFBQVEsU0FBUyxJQUFJO0FBQUEsSUFDakc7QUFDQSxhQUFTLGlCQUFpQixPQUFPLFNBQVMsV0FBVyxVQUFVO0FBQzdELFVBQUksTUFBTSxrQkFBa0IsU0FBUyxVQUFVLFNBQVM7QUFDeEQsVUFBSSxPQUFPLE1BQU07QUFDZixZQUFJLEVBQUUsU0FBUyxHQUFHLEtBQUssS0FBSyxNQUFNLEdBQUcsTUFBTSxRQUFRLE1BQU0sR0FBRztBQUMxRCxjQUFJLE9BQU8sV0FBVyxZQUFZO0FBQ2xDLGdCQUFNLElBQUksc0JBQXNCLE1BQU0sR0FBRztBQUFBLFFBQzNDO0FBQ0EsZUFBTyxLQUFLLE1BQU0sR0FBRztBQUFBLE1BQ3ZCO0FBR0EsYUFBTyxNQUFNLGFBQWEsS0FBSyxLQUFLO0FBQUEsSUFDdEM7QUFDQSxJQUFBQSxRQUFPLFVBQVU7QUFBQSxNQUNmO0FBQUEsSUFDRjtBQUFBO0FBQUE7OztBQ3JCQTtBQUFBLHlGQUFBQyxTQUFBO0FBQUE7QUFBQSxRQUFJLE9BQU8sT0FBTyxXQUFXLFlBQVk7QUFFdkMsTUFBQUEsUUFBTyxVQUFVLFNBQVMsU0FBUyxNQUFNLFdBQVc7QUFDbEQsWUFBSSxXQUFXO0FBQ2IsZUFBSyxTQUFTO0FBQ2QsZUFBSyxZQUFZLE9BQU8sT0FBTyxVQUFVLFdBQVc7QUFBQSxZQUNsRCxhQUFhO0FBQUEsY0FDWCxPQUFPO0FBQUEsY0FDUCxZQUFZO0FBQUEsY0FDWixVQUFVO0FBQUEsY0FDVixjQUFjO0FBQUEsWUFDaEI7QUFBQSxVQUNGLENBQUM7QUFBQSxRQUNIO0FBQUEsTUFDRjtBQUFBLElBQ0YsT0FBTztBQUVMLE1BQUFBLFFBQU8sVUFBVSxTQUFTLFNBQVMsTUFBTSxXQUFXO0FBQ2xELFlBQUksV0FBVztBQUNiLGVBQUssU0FBUztBQUNkLGNBQUksV0FBVyxXQUFZO0FBQUEsVUFBQztBQUM1QixtQkFBUyxZQUFZLFVBQVU7QUFDL0IsZUFBSyxZQUFZLElBQUksU0FBUztBQUM5QixlQUFLLFVBQVUsY0FBYztBQUFBLFFBQy9CO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQTtBQUFBOzs7QUMxQkE7QUFBQSxpRkFBQUMsU0FBQTtBQUFBO0FBQUEsUUFBSTtBQUNFLGFBQU8sUUFBUSxNQUFNO0FBRXpCLFVBQUksT0FBTyxLQUFLLGFBQWE7QUFBWSxjQUFNO0FBQy9DLE1BQUFBLFFBQU8sVUFBVSxLQUFLO0FBQUEsSUFDeEIsU0FBUyxHQUFHO0FBRVYsTUFBQUEsUUFBTyxVQUFVO0FBQUEsSUFDbkI7QUFQTTtBQUFBO0FBQUE7OztBQ0ROO0FBQUEseUZBQUFDLFNBQUE7QUFBQTtBQUtBLElBQUFBLFFBQU8sVUFBVSxRQUFRLE1BQU0sRUFBRTtBQUFBO0FBQUE7OztBQ0xqQztBQUFBLDJHQUFBQyxTQUFBO0FBQUE7QUEyQkEsSUFBQUEsUUFBTyxVQUFVO0FBWWpCLGFBQVMsY0FBYyxPQUFPO0FBQzVCLFVBQUksUUFBUTtBQUNaLFdBQUssT0FBTztBQUNaLFdBQUssUUFBUTtBQUNiLFdBQUssU0FBUyxXQUFZO0FBQ3hCLHVCQUFlLE9BQU8sS0FBSztBQUFBLE1BQzdCO0FBQUEsSUFDRjtBQUlBLFFBQUk7QUFHSixhQUFTLGdCQUFnQjtBQUd6QixRQUFJLGVBQWU7QUFBQSxNQUNqQixXQUFXO0FBQUEsSUFDYjtBQUlBLFFBQUksU0FBUztBQUdiLFFBQUlDLFVBQVMsUUFBUSxRQUFRLEVBQUU7QUFDL0IsUUFBSSxpQkFBaUIsT0FBTyxXQUFXLGNBQWMsU0FBUyxPQUFPLFdBQVcsY0FBYyxTQUFTLE9BQU8sU0FBUyxjQUFjLE9BQU8sQ0FBQyxHQUFHLGNBQWMsV0FBWTtBQUFBLElBQUM7QUFDM0ssYUFBUyxvQkFBb0IsT0FBTztBQUNsQyxhQUFPQSxRQUFPLEtBQUssS0FBSztBQUFBLElBQzFCO0FBQ0EsYUFBUyxjQUFjLEtBQUs7QUFDMUIsYUFBT0EsUUFBTyxTQUFTLEdBQUcsS0FBSyxlQUFlO0FBQUEsSUFDaEQ7QUFDQSxRQUFJLGNBQWM7QUFDbEIsUUFBSSxXQUFXO0FBQWYsUUFDRSxtQkFBbUIsU0FBUztBQUM5QixRQUFJLGlCQUFpQixpQkFBcUI7QUFBMUMsUUFDRSx1QkFBdUIsZUFBZTtBQUR4QyxRQUVFLDZCQUE2QixlQUFlO0FBRjlDLFFBR0Usd0JBQXdCLGVBQWU7QUFIekMsUUFJRSx5QkFBeUIsZUFBZTtBQUoxQyxRQUtFLHVCQUF1QixlQUFlO0FBTHhDLFFBTUUseUJBQXlCLGVBQWU7QUFOMUMsUUFPRSw2QkFBNkIsZUFBZTtBQVA5QyxRQVFFLHVCQUF1QixlQUFlO0FBQ3hDLFFBQUksaUJBQWlCLFlBQVk7QUFDakMsdUJBQW9CLFVBQVUsTUFBTTtBQUNwQyxhQUFTLE1BQU07QUFBQSxJQUFDO0FBQ2hCLGFBQVMsY0FBYyxTQUFTLFFBQVEsVUFBVTtBQUNoRCxlQUFTLFVBQVU7QUFDbkIsZ0JBQVUsV0FBVyxDQUFDO0FBT3RCLFVBQUksT0FBTyxhQUFhO0FBQVcsbUJBQVcsa0JBQWtCO0FBSWhFLFdBQUssYUFBYSxDQUFDLENBQUMsUUFBUTtBQUM1QixVQUFJO0FBQVUsYUFBSyxhQUFhLEtBQUssY0FBYyxDQUFDLENBQUMsUUFBUTtBQUs3RCxXQUFLLGdCQUFnQixpQkFBaUIsTUFBTSxTQUFTLHlCQUF5QixRQUFRO0FBR3RGLFdBQUssY0FBYztBQUduQixXQUFLLFlBQVk7QUFFakIsV0FBSyxTQUFTO0FBRWQsV0FBSyxRQUFRO0FBRWIsV0FBSyxXQUFXO0FBR2hCLFdBQUssWUFBWTtBQUtqQixVQUFJLFdBQVcsUUFBUSxrQkFBa0I7QUFDekMsV0FBSyxnQkFBZ0IsQ0FBQztBQUt0QixXQUFLLGtCQUFrQixRQUFRLG1CQUFtQjtBQUtsRCxXQUFLLFNBQVM7QUFHZCxXQUFLLFVBQVU7QUFHZixXQUFLLFNBQVM7QUFNZCxXQUFLLE9BQU87QUFLWixXQUFLLG1CQUFtQjtBQUd4QixXQUFLLFVBQVUsU0FBVSxJQUFJO0FBQzNCLGdCQUFRLFFBQVEsRUFBRTtBQUFBLE1BQ3BCO0FBR0EsV0FBSyxVQUFVO0FBR2YsV0FBSyxXQUFXO0FBQ2hCLFdBQUssa0JBQWtCO0FBQ3ZCLFdBQUssc0JBQXNCO0FBSTNCLFdBQUssWUFBWTtBQUlqQixXQUFLLGNBQWM7QUFHbkIsV0FBSyxlQUFlO0FBR3BCLFdBQUssWUFBWSxRQUFRLGNBQWM7QUFHdkMsV0FBSyxjQUFjLENBQUMsQ0FBQyxRQUFRO0FBRzdCLFdBQUssdUJBQXVCO0FBSTVCLFdBQUsscUJBQXFCLElBQUksY0FBYyxJQUFJO0FBQUEsSUFDbEQ7QUFDQSxrQkFBYyxVQUFVLFlBQVksU0FBUyxZQUFZO0FBQ3ZELFVBQUksVUFBVSxLQUFLO0FBQ25CLFVBQUksTUFBTSxDQUFDO0FBQ1gsYUFBTyxTQUFTO0FBQ2QsWUFBSSxLQUFLLE9BQU87QUFDaEIsa0JBQVUsUUFBUTtBQUFBLE1BQ3BCO0FBQ0EsYUFBTztBQUFBLElBQ1Q7QUFDQSxLQUFDLFdBQVk7QUFDWCxVQUFJO0FBQ0YsZUFBTyxlQUFlLGNBQWMsV0FBVyxVQUFVO0FBQUEsVUFDdkQsS0FBSyxhQUFhLFVBQVUsU0FBUyw0QkFBNEI7QUFDL0QsbUJBQU8sS0FBSyxVQUFVO0FBQUEsVUFDeEIsR0FBRyw4RUFBbUYsU0FBUztBQUFBLFFBQ2pHLENBQUM7QUFBQSxNQUNILFNBQVMsR0FBRztBQUFBLE1BQUM7QUFBQSxJQUNmLEdBQUc7QUFJSCxRQUFJO0FBQ0osUUFBSSxPQUFPLFdBQVcsY0FBYyxPQUFPLGVBQWUsT0FBTyxTQUFTLFVBQVUsT0FBTyxXQUFXLE1BQU0sWUFBWTtBQUN0SCx3QkFBa0IsU0FBUyxVQUFVLE9BQU8sV0FBVztBQUN2RCxhQUFPLGVBQWUsVUFBVSxPQUFPLGFBQWE7QUFBQSxRQUNsRCxPQUFPLFNBQVMsTUFBTSxRQUFRO0FBQzVCLGNBQUksZ0JBQWdCLEtBQUssTUFBTSxNQUFNO0FBQUcsbUJBQU87QUFDL0MsY0FBSSxTQUFTO0FBQVUsbUJBQU87QUFDOUIsaUJBQU8sVUFBVSxPQUFPLDBCQUEwQjtBQUFBLFFBQ3BEO0FBQUEsTUFDRixDQUFDO0FBQUEsSUFDSCxPQUFPO0FBQ0wsd0JBQWtCLFNBQVNDLGlCQUFnQixRQUFRO0FBQ2pELGVBQU8sa0JBQWtCO0FBQUEsTUFDM0I7QUFBQSxJQUNGO0FBQ0EsYUFBUyxTQUFTLFNBQVM7QUFDekIsZUFBUyxVQUFVO0FBWW5CLFVBQUksV0FBVyxnQkFBZ0I7QUFDL0IsVUFBSSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsS0FBSyxVQUFVLElBQUk7QUFBRyxlQUFPLElBQUksU0FBUyxPQUFPO0FBQ25GLFdBQUssaUJBQWlCLElBQUksY0FBYyxTQUFTLE1BQU0sUUFBUTtBQUcvRCxXQUFLLFdBQVc7QUFDaEIsVUFBSSxTQUFTO0FBQ1gsWUFBSSxPQUFPLFFBQVEsVUFBVTtBQUFZLGVBQUssU0FBUyxRQUFRO0FBQy9ELFlBQUksT0FBTyxRQUFRLFdBQVc7QUFBWSxlQUFLLFVBQVUsUUFBUTtBQUNqRSxZQUFJLE9BQU8sUUFBUSxZQUFZO0FBQVksZUFBSyxXQUFXLFFBQVE7QUFDbkUsWUFBSSxPQUFPLFFBQVEsVUFBVTtBQUFZLGVBQUssU0FBUyxRQUFRO0FBQUEsTUFDakU7QUFDQSxhQUFPLEtBQUssSUFBSTtBQUFBLElBQ2xCO0FBR0EsYUFBUyxVQUFVLE9BQU8sV0FBWTtBQUNwQyxxQkFBZSxNQUFNLElBQUksdUJBQXVCLENBQUM7QUFBQSxJQUNuRDtBQUNBLGFBQVMsY0FBYyxRQUFRLElBQUk7QUFDakMsVUFBSSxLQUFLLElBQUksMkJBQTJCO0FBRXhDLHFCQUFlLFFBQVEsRUFBRTtBQUN6QixjQUFRLFNBQVMsSUFBSSxFQUFFO0FBQUEsSUFDekI7QUFLQSxhQUFTLFdBQVcsUUFBUSxPQUFPLE9BQU8sSUFBSTtBQUM1QyxVQUFJO0FBQ0osVUFBSSxVQUFVLE1BQU07QUFDbEIsYUFBSyxJQUFJLHVCQUF1QjtBQUFBLE1BQ2xDLFdBQVcsT0FBTyxVQUFVLFlBQVksQ0FBQyxNQUFNLFlBQVk7QUFDekQsYUFBSyxJQUFJLHFCQUFxQixTQUFTLENBQUMsVUFBVSxRQUFRLEdBQUcsS0FBSztBQUFBLE1BQ3BFO0FBQ0EsVUFBSSxJQUFJO0FBQ04sdUJBQWUsUUFBUSxFQUFFO0FBQ3pCLGdCQUFRLFNBQVMsSUFBSSxFQUFFO0FBQ3ZCLGVBQU87QUFBQSxNQUNUO0FBQ0EsYUFBTztBQUFBLElBQ1Q7QUFDQSxhQUFTLFVBQVUsUUFBUSxTQUFVLE9BQU8sVUFBVSxJQUFJO0FBQ3hELFVBQUksUUFBUSxLQUFLO0FBQ2pCLFVBQUksTUFBTTtBQUNWLFVBQUksUUFBUSxDQUFDLE1BQU0sY0FBYyxjQUFjLEtBQUs7QUFDcEQsVUFBSSxTQUFTLENBQUNELFFBQU8sU0FBUyxLQUFLLEdBQUc7QUFDcEMsZ0JBQVEsb0JBQW9CLEtBQUs7QUFBQSxNQUNuQztBQUNBLFVBQUksT0FBTyxhQUFhLFlBQVk7QUFDbEMsYUFBSztBQUNMLG1CQUFXO0FBQUEsTUFDYjtBQUNBLFVBQUk7QUFBTyxtQkFBVztBQUFBLGVBQWtCLENBQUM7QUFBVSxtQkFBVyxNQUFNO0FBQ3BFLFVBQUksT0FBTyxPQUFPO0FBQVksYUFBSztBQUNuQyxVQUFJLE1BQU07QUFBUSxzQkFBYyxNQUFNLEVBQUU7QUFBQSxlQUFXLFNBQVMsV0FBVyxNQUFNLE9BQU8sT0FBTyxFQUFFLEdBQUc7QUFDOUYsY0FBTTtBQUNOLGNBQU0sY0FBYyxNQUFNLE9BQU8sT0FBTyxPQUFPLFVBQVUsRUFBRTtBQUFBLE1BQzdEO0FBQ0EsYUFBTztBQUFBLElBQ1Q7QUFDQSxhQUFTLFVBQVUsT0FBTyxXQUFZO0FBQ3BDLFdBQUssZUFBZTtBQUFBLElBQ3RCO0FBQ0EsYUFBUyxVQUFVLFNBQVMsV0FBWTtBQUN0QyxVQUFJLFFBQVEsS0FBSztBQUNqQixVQUFJLE1BQU0sUUFBUTtBQUNoQixjQUFNO0FBQ04sWUFBSSxDQUFDLE1BQU0sV0FBVyxDQUFDLE1BQU0sVUFBVSxDQUFDLE1BQU0sb0JBQW9CLE1BQU07QUFBaUIsc0JBQVksTUFBTSxLQUFLO0FBQUEsTUFDbEg7QUFBQSxJQUNGO0FBQ0EsYUFBUyxVQUFVLHFCQUFxQixTQUFTLG1CQUFtQixVQUFVO0FBRTVFLFVBQUksT0FBTyxhQUFhO0FBQVUsbUJBQVcsU0FBUyxZQUFZO0FBQ2xFLFVBQUksRUFBRSxDQUFDLE9BQU8sUUFBUSxTQUFTLFNBQVMsVUFBVSxVQUFVLFFBQVEsU0FBUyxXQUFXLFlBQVksS0FBSyxFQUFFLFNBQVMsV0FBVyxJQUFJLFlBQVksQ0FBQyxJQUFJO0FBQUssY0FBTSxJQUFJLHFCQUFxQixRQUFRO0FBQ2hNLFdBQUssZUFBZSxrQkFBa0I7QUFDdEMsYUFBTztBQUFBLElBQ1Q7QUFDQSxXQUFPLGVBQWUsU0FBUyxXQUFXLGtCQUFrQjtBQUFBO0FBQUE7QUFBQTtBQUFBLE1BSTFELFlBQVk7QUFBQSxNQUNaLEtBQUssU0FBUyxNQUFNO0FBQ2xCLGVBQU8sS0FBSyxrQkFBa0IsS0FBSyxlQUFlLFVBQVU7QUFBQSxNQUM5RDtBQUFBLElBQ0YsQ0FBQztBQUNELGFBQVMsWUFBWSxPQUFPLE9BQU8sVUFBVTtBQUMzQyxVQUFJLENBQUMsTUFBTSxjQUFjLE1BQU0sa0JBQWtCLFNBQVMsT0FBTyxVQUFVLFVBQVU7QUFDbkYsZ0JBQVFBLFFBQU8sS0FBSyxPQUFPLFFBQVE7QUFBQSxNQUNyQztBQUNBLGFBQU87QUFBQSxJQUNUO0FBQ0EsV0FBTyxlQUFlLFNBQVMsV0FBVyx5QkFBeUI7QUFBQTtBQUFBO0FBQUE7QUFBQSxNQUlqRSxZQUFZO0FBQUEsTUFDWixLQUFLLFNBQVMsTUFBTTtBQUNsQixlQUFPLEtBQUssZUFBZTtBQUFBLE1BQzdCO0FBQUEsSUFDRixDQUFDO0FBS0QsYUFBUyxjQUFjLFFBQVEsT0FBTyxPQUFPLE9BQU8sVUFBVSxJQUFJO0FBQ2hFLFVBQUksQ0FBQyxPQUFPO0FBQ1YsWUFBSSxXQUFXLFlBQVksT0FBTyxPQUFPLFFBQVE7QUFDakQsWUFBSSxVQUFVLFVBQVU7QUFDdEIsa0JBQVE7QUFDUixxQkFBVztBQUNYLGtCQUFRO0FBQUEsUUFDVjtBQUFBLE1BQ0Y7QUFDQSxVQUFJLE1BQU0sTUFBTSxhQUFhLElBQUksTUFBTTtBQUN2QyxZQUFNLFVBQVU7QUFDaEIsVUFBSSxNQUFNLE1BQU0sU0FBUyxNQUFNO0FBRS9CLFVBQUksQ0FBQztBQUFLLGNBQU0sWUFBWTtBQUM1QixVQUFJLE1BQU0sV0FBVyxNQUFNLFFBQVE7QUFDakMsWUFBSSxPQUFPLE1BQU07QUFDakIsY0FBTSxzQkFBc0I7QUFBQSxVQUMxQjtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQSxVQUFVO0FBQUEsVUFDVixNQUFNO0FBQUEsUUFDUjtBQUNBLFlBQUksTUFBTTtBQUNSLGVBQUssT0FBTyxNQUFNO0FBQUEsUUFDcEIsT0FBTztBQUNMLGdCQUFNLGtCQUFrQixNQUFNO0FBQUEsUUFDaEM7QUFDQSxjQUFNLHdCQUF3QjtBQUFBLE1BQ2hDLE9BQU87QUFDTCxnQkFBUSxRQUFRLE9BQU8sT0FBTyxLQUFLLE9BQU8sVUFBVSxFQUFFO0FBQUEsTUFDeEQ7QUFDQSxhQUFPO0FBQUEsSUFDVDtBQUNBLGFBQVMsUUFBUSxRQUFRLE9BQU8sUUFBUSxLQUFLLE9BQU8sVUFBVSxJQUFJO0FBQ2hFLFlBQU0sV0FBVztBQUNqQixZQUFNLFVBQVU7QUFDaEIsWUFBTSxVQUFVO0FBQ2hCLFlBQU0sT0FBTztBQUNiLFVBQUksTUFBTTtBQUFXLGNBQU0sUUFBUSxJQUFJLHFCQUFxQixPQUFPLENBQUM7QUFBQSxlQUFXO0FBQVEsZUFBTyxRQUFRLE9BQU8sTUFBTSxPQUFPO0FBQUE7QUFBTyxlQUFPLE9BQU8sT0FBTyxVQUFVLE1BQU0sT0FBTztBQUM3SyxZQUFNLE9BQU87QUFBQSxJQUNmO0FBQ0EsYUFBUyxhQUFhLFFBQVEsT0FBTyxNQUFNLElBQUksSUFBSTtBQUNqRCxRQUFFLE1BQU07QUFDUixVQUFJLE1BQU07QUFHUixnQkFBUSxTQUFTLElBQUksRUFBRTtBQUd2QixnQkFBUSxTQUFTLGFBQWEsUUFBUSxLQUFLO0FBQzNDLGVBQU8sZUFBZSxlQUFlO0FBQ3JDLHVCQUFlLFFBQVEsRUFBRTtBQUFBLE1BQzNCLE9BQU87QUFHTCxXQUFHLEVBQUU7QUFDTCxlQUFPLGVBQWUsZUFBZTtBQUNyQyx1QkFBZSxRQUFRLEVBQUU7QUFHekIsb0JBQVksUUFBUSxLQUFLO0FBQUEsTUFDM0I7QUFBQSxJQUNGO0FBQ0EsYUFBUyxtQkFBbUIsT0FBTztBQUNqQyxZQUFNLFVBQVU7QUFDaEIsWUFBTSxVQUFVO0FBQ2hCLFlBQU0sVUFBVSxNQUFNO0FBQ3RCLFlBQU0sV0FBVztBQUFBLElBQ25CO0FBQ0EsYUFBUyxRQUFRLFFBQVEsSUFBSTtBQUMzQixVQUFJLFFBQVEsT0FBTztBQUNuQixVQUFJLE9BQU8sTUFBTTtBQUNqQixVQUFJLEtBQUssTUFBTTtBQUNmLFVBQUksT0FBTyxPQUFPO0FBQVksY0FBTSxJQUFJLHNCQUFzQjtBQUM5RCx5QkFBbUIsS0FBSztBQUN4QixVQUFJO0FBQUkscUJBQWEsUUFBUSxPQUFPLE1BQU0sSUFBSSxFQUFFO0FBQUEsV0FBTztBQUVyRCxZQUFJLFdBQVcsV0FBVyxLQUFLLEtBQUssT0FBTztBQUMzQyxZQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sVUFBVSxDQUFDLE1BQU0sb0JBQW9CLE1BQU0saUJBQWlCO0FBQ2xGLHNCQUFZLFFBQVEsS0FBSztBQUFBLFFBQzNCO0FBQ0EsWUFBSSxNQUFNO0FBQ1Isa0JBQVEsU0FBUyxZQUFZLFFBQVEsT0FBTyxVQUFVLEVBQUU7QUFBQSxRQUMxRCxPQUFPO0FBQ0wscUJBQVcsUUFBUSxPQUFPLFVBQVUsRUFBRTtBQUFBLFFBQ3hDO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFDQSxhQUFTLFdBQVcsUUFBUSxPQUFPLFVBQVUsSUFBSTtBQUMvQyxVQUFJLENBQUM7QUFBVSxxQkFBYSxRQUFRLEtBQUs7QUFDekMsWUFBTTtBQUNOLFNBQUc7QUFDSCxrQkFBWSxRQUFRLEtBQUs7QUFBQSxJQUMzQjtBQUtBLGFBQVMsYUFBYSxRQUFRLE9BQU87QUFDbkMsVUFBSSxNQUFNLFdBQVcsS0FBSyxNQUFNLFdBQVc7QUFDekMsY0FBTSxZQUFZO0FBQ2xCLGVBQU8sS0FBSyxPQUFPO0FBQUEsTUFDckI7QUFBQSxJQUNGO0FBR0EsYUFBUyxZQUFZLFFBQVEsT0FBTztBQUNsQyxZQUFNLG1CQUFtQjtBQUN6QixVQUFJLFFBQVEsTUFBTTtBQUNsQixVQUFJLE9BQU8sV0FBVyxTQUFTLE1BQU0sTUFBTTtBQUV6QyxZQUFJLElBQUksTUFBTTtBQUNkLFlBQUksU0FBUyxJQUFJLE1BQU0sQ0FBQztBQUN4QixZQUFJLFNBQVMsTUFBTTtBQUNuQixlQUFPLFFBQVE7QUFDZixZQUFJLFFBQVE7QUFDWixZQUFJLGFBQWE7QUFDakIsZUFBTyxPQUFPO0FBQ1osaUJBQU8sS0FBSyxJQUFJO0FBQ2hCLGNBQUksQ0FBQyxNQUFNO0FBQU8seUJBQWE7QUFDL0Isa0JBQVEsTUFBTTtBQUNkLG1CQUFTO0FBQUEsUUFDWDtBQUNBLGVBQU8sYUFBYTtBQUNwQixnQkFBUSxRQUFRLE9BQU8sTUFBTSxNQUFNLFFBQVEsUUFBUSxJQUFJLE9BQU8sTUFBTTtBQUlwRSxjQUFNO0FBQ04sY0FBTSxzQkFBc0I7QUFDNUIsWUFBSSxPQUFPLE1BQU07QUFDZixnQkFBTSxxQkFBcUIsT0FBTztBQUNsQyxpQkFBTyxPQUFPO0FBQUEsUUFDaEIsT0FBTztBQUNMLGdCQUFNLHFCQUFxQixJQUFJLGNBQWMsS0FBSztBQUFBLFFBQ3BEO0FBQ0EsY0FBTSx1QkFBdUI7QUFBQSxNQUMvQixPQUFPO0FBRUwsZUFBTyxPQUFPO0FBQ1osY0FBSSxRQUFRLE1BQU07QUFDbEIsY0FBSSxXQUFXLE1BQU07QUFDckIsY0FBSSxLQUFLLE1BQU07QUFDZixjQUFJLE1BQU0sTUFBTSxhQUFhLElBQUksTUFBTTtBQUN2QyxrQkFBUSxRQUFRLE9BQU8sT0FBTyxLQUFLLE9BQU8sVUFBVSxFQUFFO0FBQ3RELGtCQUFRLE1BQU07QUFDZCxnQkFBTTtBQUtOLGNBQUksTUFBTSxTQUFTO0FBQ2pCO0FBQUEsVUFDRjtBQUFBLFFBQ0Y7QUFDQSxZQUFJLFVBQVU7QUFBTSxnQkFBTSxzQkFBc0I7QUFBQSxNQUNsRDtBQUNBLFlBQU0sa0JBQWtCO0FBQ3hCLFlBQU0sbUJBQW1CO0FBQUEsSUFDM0I7QUFDQSxhQUFTLFVBQVUsU0FBUyxTQUFVLE9BQU8sVUFBVSxJQUFJO0FBQ3pELFNBQUcsSUFBSSwyQkFBMkIsVUFBVSxDQUFDO0FBQUEsSUFDL0M7QUFDQSxhQUFTLFVBQVUsVUFBVTtBQUM3QixhQUFTLFVBQVUsTUFBTSxTQUFVLE9BQU8sVUFBVSxJQUFJO0FBQ3RELFVBQUksUUFBUSxLQUFLO0FBQ2pCLFVBQUksT0FBTyxVQUFVLFlBQVk7QUFDL0IsYUFBSztBQUNMLGdCQUFRO0FBQ1IsbUJBQVc7QUFBQSxNQUNiLFdBQVcsT0FBTyxhQUFhLFlBQVk7QUFDekMsYUFBSztBQUNMLG1CQUFXO0FBQUEsTUFDYjtBQUNBLFVBQUksVUFBVSxRQUFRLFVBQVU7QUFBVyxhQUFLLE1BQU0sT0FBTyxRQUFRO0FBR3JFLFVBQUksTUFBTSxRQUFRO0FBQ2hCLGNBQU0sU0FBUztBQUNmLGFBQUssT0FBTztBQUFBLE1BQ2Q7QUFHQSxVQUFJLENBQUMsTUFBTTtBQUFRLG9CQUFZLE1BQU0sT0FBTyxFQUFFO0FBQzlDLGFBQU87QUFBQSxJQUNUO0FBQ0EsV0FBTyxlQUFlLFNBQVMsV0FBVyxrQkFBa0I7QUFBQTtBQUFBO0FBQUE7QUFBQSxNQUkxRCxZQUFZO0FBQUEsTUFDWixLQUFLLFNBQVMsTUFBTTtBQUNsQixlQUFPLEtBQUssZUFBZTtBQUFBLE1BQzdCO0FBQUEsSUFDRixDQUFDO0FBQ0QsYUFBUyxXQUFXLE9BQU87QUFDekIsYUFBTyxNQUFNLFVBQVUsTUFBTSxXQUFXLEtBQUssTUFBTSxvQkFBb0IsUUFBUSxDQUFDLE1BQU0sWUFBWSxDQUFDLE1BQU07QUFBQSxJQUMzRztBQUNBLGFBQVMsVUFBVSxRQUFRLE9BQU87QUFDaEMsYUFBTyxPQUFPLFNBQVUsS0FBSztBQUMzQixjQUFNO0FBQ04sWUFBSSxLQUFLO0FBQ1AseUJBQWUsUUFBUSxHQUFHO0FBQUEsUUFDNUI7QUFDQSxjQUFNLGNBQWM7QUFDcEIsZUFBTyxLQUFLLFdBQVc7QUFDdkIsb0JBQVksUUFBUSxLQUFLO0FBQUEsTUFDM0IsQ0FBQztBQUFBLElBQ0g7QUFDQSxhQUFTLFVBQVUsUUFBUSxPQUFPO0FBQ2hDLFVBQUksQ0FBQyxNQUFNLGVBQWUsQ0FBQyxNQUFNLGFBQWE7QUFDNUMsWUFBSSxPQUFPLE9BQU8sV0FBVyxjQUFjLENBQUMsTUFBTSxXQUFXO0FBQzNELGdCQUFNO0FBQ04sZ0JBQU0sY0FBYztBQUNwQixrQkFBUSxTQUFTLFdBQVcsUUFBUSxLQUFLO0FBQUEsUUFDM0MsT0FBTztBQUNMLGdCQUFNLGNBQWM7QUFDcEIsaUJBQU8sS0FBSyxXQUFXO0FBQUEsUUFDekI7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUNBLGFBQVMsWUFBWSxRQUFRLE9BQU87QUFDbEMsVUFBSSxPQUFPLFdBQVcsS0FBSztBQUMzQixVQUFJLE1BQU07QUFDUixrQkFBVSxRQUFRLEtBQUs7QUFDdkIsWUFBSSxNQUFNLGNBQWMsR0FBRztBQUN6QixnQkFBTSxXQUFXO0FBQ2pCLGlCQUFPLEtBQUssUUFBUTtBQUNwQixjQUFJLE1BQU0sYUFBYTtBQUdyQixnQkFBSSxTQUFTLE9BQU87QUFDcEIsZ0JBQUksQ0FBQyxVQUFVLE9BQU8sZUFBZSxPQUFPLFlBQVk7QUFDdEQscUJBQU8sUUFBUTtBQUFBLFlBQ2pCO0FBQUEsVUFDRjtBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBQ0EsYUFBTztBQUFBLElBQ1Q7QUFDQSxhQUFTLFlBQVksUUFBUSxPQUFPLElBQUk7QUFDdEMsWUFBTSxTQUFTO0FBQ2Ysa0JBQVksUUFBUSxLQUFLO0FBQ3pCLFVBQUksSUFBSTtBQUNOLFlBQUksTUFBTTtBQUFVLGtCQUFRLFNBQVMsRUFBRTtBQUFBO0FBQU8saUJBQU8sS0FBSyxVQUFVLEVBQUU7QUFBQSxNQUN4RTtBQUNBLFlBQU0sUUFBUTtBQUNkLGFBQU8sV0FBVztBQUFBLElBQ3BCO0FBQ0EsYUFBUyxlQUFlLFNBQVMsT0FBTyxLQUFLO0FBQzNDLFVBQUksUUFBUSxRQUFRO0FBQ3BCLGNBQVEsUUFBUTtBQUNoQixhQUFPLE9BQU87QUFDWixZQUFJLEtBQUssTUFBTTtBQUNmLGNBQU07QUFDTixXQUFHLEdBQUc7QUFDTixnQkFBUSxNQUFNO0FBQUEsTUFDaEI7QUFHQSxZQUFNLG1CQUFtQixPQUFPO0FBQUEsSUFDbEM7QUFDQSxXQUFPLGVBQWUsU0FBUyxXQUFXLGFBQWE7QUFBQTtBQUFBO0FBQUE7QUFBQSxNQUlyRCxZQUFZO0FBQUEsTUFDWixLQUFLLFNBQVMsTUFBTTtBQUNsQixZQUFJLEtBQUssbUJBQW1CLFFBQVc7QUFDckMsaUJBQU87QUFBQSxRQUNUO0FBQ0EsZUFBTyxLQUFLLGVBQWU7QUFBQSxNQUM3QjtBQUFBLE1BQ0EsS0FBSyxTQUFTLElBQUksT0FBTztBQUd2QixZQUFJLENBQUMsS0FBSyxnQkFBZ0I7QUFDeEI7QUFBQSxRQUNGO0FBSUEsYUFBSyxlQUFlLFlBQVk7QUFBQSxNQUNsQztBQUFBLElBQ0YsQ0FBQztBQUNELGFBQVMsVUFBVSxVQUFVLFlBQVk7QUFDekMsYUFBUyxVQUFVLGFBQWEsWUFBWTtBQUM1QyxhQUFTLFVBQVUsV0FBVyxTQUFVLEtBQUssSUFBSTtBQUMvQyxTQUFHLEdBQUc7QUFBQSxJQUNSO0FBQUE7QUFBQTs7O0FDaG9CQTtBQUFBLHlHQUFBRSxTQUFBO0FBQUE7QUE2QkEsUUFBSSxhQUFhLE9BQU8sUUFBUSxTQUFVLEtBQUs7QUFDN0MsVUFBSUMsUUFBTyxDQUFDO0FBQ1osZUFBUyxPQUFPO0FBQUssUUFBQUEsTUFBSyxLQUFLLEdBQUc7QUFDbEMsYUFBT0E7QUFBQSxJQUNUO0FBR0EsSUFBQUQsUUFBTyxVQUFVO0FBQ2pCLFFBQUksV0FBVztBQUNmLFFBQUksV0FBVztBQUNmLHVCQUFvQixRQUFRLFFBQVE7QUFDcEM7QUFFTSxhQUFPLFdBQVcsU0FBUyxTQUFTO0FBQ3hDLFdBQVMsSUFBSSxHQUFHLElBQUksS0FBSyxRQUFRLEtBQUs7QUFDaEMsaUJBQVMsS0FBSyxDQUFDO0FBQ25CLFlBQUksQ0FBQyxPQUFPLFVBQVUsTUFBTTtBQUFHLGlCQUFPLFVBQVUsTUFBTSxJQUFJLFNBQVMsVUFBVSxNQUFNO0FBQUEsTUFDckY7QUFBQSxJQUNGO0FBTE07QUFFRTtBQURHO0FBS1gsYUFBUyxPQUFPLFNBQVM7QUFDdkIsVUFBSSxFQUFFLGdCQUFnQjtBQUFTLGVBQU8sSUFBSSxPQUFPLE9BQU87QUFDeEQsZUFBUyxLQUFLLE1BQU0sT0FBTztBQUMzQixlQUFTLEtBQUssTUFBTSxPQUFPO0FBQzNCLFdBQUssZ0JBQWdCO0FBQ3JCLFVBQUksU0FBUztBQUNYLFlBQUksUUFBUSxhQUFhO0FBQU8sZUFBSyxXQUFXO0FBQ2hELFlBQUksUUFBUSxhQUFhO0FBQU8sZUFBSyxXQUFXO0FBQ2hELFlBQUksUUFBUSxrQkFBa0IsT0FBTztBQUNuQyxlQUFLLGdCQUFnQjtBQUNyQixlQUFLLEtBQUssT0FBTyxLQUFLO0FBQUEsUUFDeEI7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUNBLFdBQU8sZUFBZSxPQUFPLFdBQVcseUJBQXlCO0FBQUE7QUFBQTtBQUFBO0FBQUEsTUFJL0QsWUFBWTtBQUFBLE1BQ1osS0FBSyxTQUFTLE1BQU07QUFDbEIsZUFBTyxLQUFLLGVBQWU7QUFBQSxNQUM3QjtBQUFBLElBQ0YsQ0FBQztBQUNELFdBQU8sZUFBZSxPQUFPLFdBQVcsa0JBQWtCO0FBQUE7QUFBQTtBQUFBO0FBQUEsTUFJeEQsWUFBWTtBQUFBLE1BQ1osS0FBSyxTQUFTLE1BQU07QUFDbEIsZUFBTyxLQUFLLGtCQUFrQixLQUFLLGVBQWUsVUFBVTtBQUFBLE1BQzlEO0FBQUEsSUFDRixDQUFDO0FBQ0QsV0FBTyxlQUFlLE9BQU8sV0FBVyxrQkFBa0I7QUFBQTtBQUFBO0FBQUE7QUFBQSxNQUl4RCxZQUFZO0FBQUEsTUFDWixLQUFLLFNBQVMsTUFBTTtBQUNsQixlQUFPLEtBQUssZUFBZTtBQUFBLE1BQzdCO0FBQUEsSUFDRixDQUFDO0FBR0QsYUFBUyxRQUFRO0FBRWYsVUFBSSxLQUFLLGVBQWU7QUFBTztBQUkvQixjQUFRLFNBQVMsU0FBUyxJQUFJO0FBQUEsSUFDaEM7QUFDQSxhQUFTLFFBQVFFLE9BQU07QUFDckIsTUFBQUEsTUFBSyxJQUFJO0FBQUEsSUFDWDtBQUNBLFdBQU8sZUFBZSxPQUFPLFdBQVcsYUFBYTtBQUFBO0FBQUE7QUFBQTtBQUFBLE1BSW5ELFlBQVk7QUFBQSxNQUNaLEtBQUssU0FBUyxNQUFNO0FBQ2xCLFlBQUksS0FBSyxtQkFBbUIsVUFBYSxLQUFLLG1CQUFtQixRQUFXO0FBQzFFLGlCQUFPO0FBQUEsUUFDVDtBQUNBLGVBQU8sS0FBSyxlQUFlLGFBQWEsS0FBSyxlQUFlO0FBQUEsTUFDOUQ7QUFBQSxNQUNBLEtBQUssU0FBUyxJQUFJLE9BQU87QUFHdkIsWUFBSSxLQUFLLG1CQUFtQixVQUFhLEtBQUssbUJBQW1CLFFBQVc7QUFDMUU7QUFBQSxRQUNGO0FBSUEsYUFBSyxlQUFlLFlBQVk7QUFDaEMsYUFBSyxlQUFlLFlBQVk7QUFBQSxNQUNsQztBQUFBLElBQ0YsQ0FBQztBQUFBO0FBQUE7OztBQzdIRDtBQUFBLG9GQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLFNBQVMsUUFBUSxRQUFRO0FBQzdCLFFBQUlDLFVBQVMsT0FBTztBQUdwQixhQUFTLFVBQVcsS0FBSyxLQUFLO0FBQzVCLGVBQVMsT0FBTyxLQUFLO0FBQ25CLFlBQUksR0FBRyxJQUFJLElBQUksR0FBRztBQUFBLE1BQ3BCO0FBQUEsSUFDRjtBQUNBLFFBQUlBLFFBQU8sUUFBUUEsUUFBTyxTQUFTQSxRQUFPLGVBQWVBLFFBQU8saUJBQWlCO0FBQy9FLE1BQUFELFFBQU8sVUFBVTtBQUFBLElBQ25CLE9BQU87QUFFTCxnQkFBVSxRQUFRLE9BQU87QUFDekIsY0FBUSxTQUFTO0FBQUEsSUFDbkI7QUFFQSxhQUFTLFdBQVksS0FBSyxrQkFBa0IsUUFBUTtBQUNsRCxhQUFPQyxRQUFPLEtBQUssa0JBQWtCLE1BQU07QUFBQSxJQUM3QztBQUdBLGNBQVVBLFNBQVEsVUFBVTtBQUU1QixlQUFXLE9BQU8sU0FBVSxLQUFLLGtCQUFrQixRQUFRO0FBQ3pELFVBQUksT0FBTyxRQUFRLFVBQVU7QUFDM0IsY0FBTSxJQUFJLFVBQVUsK0JBQStCO0FBQUEsTUFDckQ7QUFDQSxhQUFPQSxRQUFPLEtBQUssa0JBQWtCLE1BQU07QUFBQSxJQUM3QztBQUVBLGVBQVcsUUFBUSxTQUFVLE1BQU0sTUFBTSxVQUFVO0FBQ2pELFVBQUksT0FBTyxTQUFTLFVBQVU7QUFDNUIsY0FBTSxJQUFJLFVBQVUsMkJBQTJCO0FBQUEsTUFDakQ7QUFDQSxVQUFJLE1BQU1BLFFBQU8sSUFBSTtBQUNyQixVQUFJLFNBQVMsUUFBVztBQUN0QixZQUFJLE9BQU8sYUFBYSxVQUFVO0FBQ2hDLGNBQUksS0FBSyxNQUFNLFFBQVE7QUFBQSxRQUN6QixPQUFPO0FBQ0wsY0FBSSxLQUFLLElBQUk7QUFBQSxRQUNmO0FBQUEsTUFDRixPQUFPO0FBQ0wsWUFBSSxLQUFLLENBQUM7QUFBQSxNQUNaO0FBQ0EsYUFBTztBQUFBLElBQ1Q7QUFFQSxlQUFXLGNBQWMsU0FBVSxNQUFNO0FBQ3ZDLFVBQUksT0FBTyxTQUFTLFVBQVU7QUFDNUIsY0FBTSxJQUFJLFVBQVUsMkJBQTJCO0FBQUEsTUFDakQ7QUFDQSxhQUFPQSxRQUFPLElBQUk7QUFBQSxJQUNwQjtBQUVBLGVBQVcsa0JBQWtCLFNBQVUsTUFBTTtBQUMzQyxVQUFJLE9BQU8sU0FBUyxVQUFVO0FBQzVCLGNBQU0sSUFBSSxVQUFVLDJCQUEyQjtBQUFBLE1BQ2pEO0FBQ0EsYUFBTyxPQUFPLFdBQVcsSUFBSTtBQUFBLElBQy9CO0FBQUE7QUFBQTs7O0FDN0RBO0FBQUE7QUFBQTtBQXlCQSxRQUFJQyxVQUFTLHNCQUF1QjtBQUdwQyxRQUFJLGFBQWFBLFFBQU8sY0FBYyxTQUFVLFVBQVU7QUFDeEQsaUJBQVcsS0FBSztBQUNoQixjQUFRLFlBQVksU0FBUyxZQUFZLEdBQUc7QUFBQSxRQUMxQyxLQUFLO0FBQUEsUUFBTSxLQUFLO0FBQUEsUUFBTyxLQUFLO0FBQUEsUUFBUSxLQUFLO0FBQUEsUUFBUSxLQUFLO0FBQUEsUUFBUyxLQUFLO0FBQUEsUUFBUyxLQUFLO0FBQUEsUUFBTyxLQUFLO0FBQUEsUUFBUSxLQUFLO0FBQUEsUUFBVSxLQUFLO0FBQUEsUUFBVyxLQUFLO0FBQ3hJLGlCQUFPO0FBQUEsUUFDVDtBQUNFLGlCQUFPO0FBQUEsTUFDWDtBQUFBLElBQ0Y7QUFFQSxhQUFTLG1CQUFtQixLQUFLO0FBQy9CLFVBQUksQ0FBQztBQUFLLGVBQU87QUFDakIsVUFBSTtBQUNKLGFBQU8sTUFBTTtBQUNYLGdCQUFRLEtBQUs7QUFBQSxVQUNYLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFDSCxtQkFBTztBQUFBLFVBQ1QsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUNILG1CQUFPO0FBQUEsVUFDVCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQ0gsbUJBQU87QUFBQSxVQUNULEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFDSCxtQkFBTztBQUFBLFVBQ1Q7QUFDRSxnQkFBSTtBQUFTO0FBQ2IsbUJBQU8sS0FBSyxLQUFLLFlBQVk7QUFDN0Isc0JBQVU7QUFBQSxRQUNkO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFJQSxhQUFTLGtCQUFrQixLQUFLO0FBQzlCLFVBQUksT0FBTyxtQkFBbUIsR0FBRztBQUNqQyxVQUFJLE9BQU8sU0FBUyxhQUFhQSxRQUFPLGVBQWUsY0FBYyxDQUFDLFdBQVcsR0FBRztBQUFJLGNBQU0sSUFBSSxNQUFNLHVCQUF1QixHQUFHO0FBQ2xJLGFBQU8sUUFBUTtBQUFBLElBQ2pCO0FBS0EsWUFBUSxnQkFBZ0I7QUFDeEIsYUFBUyxjQUFjLFVBQVU7QUFDL0IsV0FBSyxXQUFXLGtCQUFrQixRQUFRO0FBQzFDLFVBQUk7QUFDSixjQUFRLEtBQUssVUFBVTtBQUFBLFFBQ3JCLEtBQUs7QUFDSCxlQUFLLE9BQU87QUFDWixlQUFLLE1BQU07QUFDWCxlQUFLO0FBQ0w7QUFBQSxRQUNGLEtBQUs7QUFDSCxlQUFLLFdBQVc7QUFDaEIsZUFBSztBQUNMO0FBQUEsUUFDRixLQUFLO0FBQ0gsZUFBSyxPQUFPO0FBQ1osZUFBSyxNQUFNO0FBQ1gsZUFBSztBQUNMO0FBQUEsUUFDRjtBQUNFLGVBQUssUUFBUTtBQUNiLGVBQUssTUFBTTtBQUNYO0FBQUEsTUFDSjtBQUNBLFdBQUssV0FBVztBQUNoQixXQUFLLFlBQVk7QUFDakIsV0FBSyxXQUFXQSxRQUFPLFlBQVksRUFBRTtBQUFBLElBQ3ZDO0FBRUEsa0JBQWMsVUFBVSxRQUFRLFNBQVUsS0FBSztBQUM3QyxVQUFJLElBQUksV0FBVztBQUFHLGVBQU87QUFDN0IsVUFBSTtBQUNKLFVBQUk7QUFDSixVQUFJLEtBQUssVUFBVTtBQUNqQixZQUFJLEtBQUssU0FBUyxHQUFHO0FBQ3JCLFlBQUksTUFBTTtBQUFXLGlCQUFPO0FBQzVCLFlBQUksS0FBSztBQUNULGFBQUssV0FBVztBQUFBLE1BQ2xCLE9BQU87QUFDTCxZQUFJO0FBQUEsTUFDTjtBQUNBLFVBQUksSUFBSSxJQUFJO0FBQVEsZUFBTyxJQUFJLElBQUksS0FBSyxLQUFLLEtBQUssQ0FBQyxJQUFJLEtBQUssS0FBSyxLQUFLLENBQUM7QUFDdkUsYUFBTyxLQUFLO0FBQUEsSUFDZDtBQUVBLGtCQUFjLFVBQVUsTUFBTTtBQUc5QixrQkFBYyxVQUFVLE9BQU87QUFHL0Isa0JBQWMsVUFBVSxXQUFXLFNBQVUsS0FBSztBQUNoRCxVQUFJLEtBQUssWUFBWSxJQUFJLFFBQVE7QUFDL0IsWUFBSSxLQUFLLEtBQUssVUFBVSxLQUFLLFlBQVksS0FBSyxVQUFVLEdBQUcsS0FBSyxRQUFRO0FBQ3hFLGVBQU8sS0FBSyxTQUFTLFNBQVMsS0FBSyxVQUFVLEdBQUcsS0FBSyxTQUFTO0FBQUEsTUFDaEU7QUFDQSxVQUFJLEtBQUssS0FBSyxVQUFVLEtBQUssWUFBWSxLQUFLLFVBQVUsR0FBRyxJQUFJLE1BQU07QUFDckUsV0FBSyxZQUFZLElBQUk7QUFBQSxJQUN2QjtBQUlBLGFBQVMsY0FBYyxNQUFNO0FBQzNCLFVBQUksUUFBUTtBQUFNLGVBQU87QUFBQSxlQUFXLFFBQVEsTUFBTTtBQUFNLGVBQU87QUFBQSxlQUFXLFFBQVEsTUFBTTtBQUFNLGVBQU87QUFBQSxlQUFXLFFBQVEsTUFBTTtBQUFNLGVBQU87QUFDM0ksYUFBTyxRQUFRLE1BQU0sSUFBTyxLQUFLO0FBQUEsSUFDbkM7QUFLQSxhQUFTLG9CQUFvQkMsT0FBTSxLQUFLLEdBQUc7QUFDekMsVUFBSSxJQUFJLElBQUksU0FBUztBQUNyQixVQUFJLElBQUk7QUFBRyxlQUFPO0FBQ2xCLFVBQUksS0FBSyxjQUFjLElBQUksQ0FBQyxDQUFDO0FBQzdCLFVBQUksTUFBTSxHQUFHO0FBQ1gsWUFBSSxLQUFLO0FBQUcsVUFBQUEsTUFBSyxXQUFXLEtBQUs7QUFDakMsZUFBTztBQUFBLE1BQ1Q7QUFDQSxVQUFJLEVBQUUsSUFBSSxLQUFLLE9BQU87QUFBSSxlQUFPO0FBQ2pDLFdBQUssY0FBYyxJQUFJLENBQUMsQ0FBQztBQUN6QixVQUFJLE1BQU0sR0FBRztBQUNYLFlBQUksS0FBSztBQUFHLFVBQUFBLE1BQUssV0FBVyxLQUFLO0FBQ2pDLGVBQU87QUFBQSxNQUNUO0FBQ0EsVUFBSSxFQUFFLElBQUksS0FBSyxPQUFPO0FBQUksZUFBTztBQUNqQyxXQUFLLGNBQWMsSUFBSSxDQUFDLENBQUM7QUFDekIsVUFBSSxNQUFNLEdBQUc7QUFDWCxZQUFJLEtBQUssR0FBRztBQUNWLGNBQUksT0FBTztBQUFHLGlCQUFLO0FBQUE7QUFBTyxZQUFBQSxNQUFLLFdBQVcsS0FBSztBQUFBLFFBQ2pEO0FBQ0EsZUFBTztBQUFBLE1BQ1Q7QUFDQSxhQUFPO0FBQUEsSUFDVDtBQVVBLGFBQVMsb0JBQW9CQSxPQUFNLEtBQUssR0FBRztBQUN6QyxXQUFLLElBQUksQ0FBQyxJQUFJLFNBQVUsS0FBTTtBQUM1QixRQUFBQSxNQUFLLFdBQVc7QUFDaEIsZUFBTztBQUFBLE1BQ1Q7QUFDQSxVQUFJQSxNQUFLLFdBQVcsS0FBSyxJQUFJLFNBQVMsR0FBRztBQUN2QyxhQUFLLElBQUksQ0FBQyxJQUFJLFNBQVUsS0FBTTtBQUM1QixVQUFBQSxNQUFLLFdBQVc7QUFDaEIsaUJBQU87QUFBQSxRQUNUO0FBQ0EsWUFBSUEsTUFBSyxXQUFXLEtBQUssSUFBSSxTQUFTLEdBQUc7QUFDdkMsZUFBSyxJQUFJLENBQUMsSUFBSSxTQUFVLEtBQU07QUFDNUIsWUFBQUEsTUFBSyxXQUFXO0FBQ2hCLG1CQUFPO0FBQUEsVUFDVDtBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUdBLGFBQVMsYUFBYSxLQUFLO0FBQ3pCLFVBQUksSUFBSSxLQUFLLFlBQVksS0FBSztBQUM5QixVQUFJLElBQUksb0JBQW9CLE1BQU0sS0FBSyxDQUFDO0FBQ3hDLFVBQUksTUFBTTtBQUFXLGVBQU87QUFDNUIsVUFBSSxLQUFLLFlBQVksSUFBSSxRQUFRO0FBQy9CLFlBQUksS0FBSyxLQUFLLFVBQVUsR0FBRyxHQUFHLEtBQUssUUFBUTtBQUMzQyxlQUFPLEtBQUssU0FBUyxTQUFTLEtBQUssVUFBVSxHQUFHLEtBQUssU0FBUztBQUFBLE1BQ2hFO0FBQ0EsVUFBSSxLQUFLLEtBQUssVUFBVSxHQUFHLEdBQUcsSUFBSSxNQUFNO0FBQ3hDLFdBQUssWUFBWSxJQUFJO0FBQUEsSUFDdkI7QUFLQSxhQUFTLFNBQVMsS0FBSyxHQUFHO0FBQ3hCLFVBQUksUUFBUSxvQkFBb0IsTUFBTSxLQUFLLENBQUM7QUFDNUMsVUFBSSxDQUFDLEtBQUs7QUFBVSxlQUFPLElBQUksU0FBUyxRQUFRLENBQUM7QUFDakQsV0FBSyxZQUFZO0FBQ2pCLFVBQUksTUFBTSxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQ3JDLFVBQUksS0FBSyxLQUFLLFVBQVUsR0FBRyxHQUFHO0FBQzlCLGFBQU8sSUFBSSxTQUFTLFFBQVEsR0FBRyxHQUFHO0FBQUEsSUFDcEM7QUFJQSxhQUFTLFFBQVEsS0FBSztBQUNwQixVQUFJLElBQUksT0FBTyxJQUFJLFNBQVMsS0FBSyxNQUFNLEdBQUcsSUFBSTtBQUM5QyxVQUFJLEtBQUs7QUFBVSxlQUFPLElBQUk7QUFDOUIsYUFBTztBQUFBLElBQ1Q7QUFNQSxhQUFTLFVBQVUsS0FBSyxHQUFHO0FBQ3pCLFdBQUssSUFBSSxTQUFTLEtBQUssTUFBTSxHQUFHO0FBQzlCLFlBQUksSUFBSSxJQUFJLFNBQVMsV0FBVyxDQUFDO0FBQ2pDLFlBQUksR0FBRztBQUNMLGNBQUksSUFBSSxFQUFFLFdBQVcsRUFBRSxTQUFTLENBQUM7QUFDakMsY0FBSSxLQUFLLFNBQVUsS0FBSyxPQUFRO0FBQzlCLGlCQUFLLFdBQVc7QUFDaEIsaUJBQUssWUFBWTtBQUNqQixpQkFBSyxTQUFTLENBQUMsSUFBSSxJQUFJLElBQUksU0FBUyxDQUFDO0FBQ3JDLGlCQUFLLFNBQVMsQ0FBQyxJQUFJLElBQUksSUFBSSxTQUFTLENBQUM7QUFDckMsbUJBQU8sRUFBRSxNQUFNLEdBQUcsRUFBRTtBQUFBLFVBQ3RCO0FBQUEsUUFDRjtBQUNBLGVBQU87QUFBQSxNQUNUO0FBQ0EsV0FBSyxXQUFXO0FBQ2hCLFdBQUssWUFBWTtBQUNqQixXQUFLLFNBQVMsQ0FBQyxJQUFJLElBQUksSUFBSSxTQUFTLENBQUM7QUFDckMsYUFBTyxJQUFJLFNBQVMsV0FBVyxHQUFHLElBQUksU0FBUyxDQUFDO0FBQUEsSUFDbEQ7QUFJQSxhQUFTLFNBQVMsS0FBSztBQUNyQixVQUFJLElBQUksT0FBTyxJQUFJLFNBQVMsS0FBSyxNQUFNLEdBQUcsSUFBSTtBQUM5QyxVQUFJLEtBQUssVUFBVTtBQUNqQixZQUFJLE1BQU0sS0FBSyxZQUFZLEtBQUs7QUFDaEMsZUFBTyxJQUFJLEtBQUssU0FBUyxTQUFTLFdBQVcsR0FBRyxHQUFHO0FBQUEsTUFDckQ7QUFDQSxhQUFPO0FBQUEsSUFDVDtBQUVBLGFBQVMsV0FBVyxLQUFLLEdBQUc7QUFDMUIsVUFBSSxLQUFLLElBQUksU0FBUyxLQUFLO0FBQzNCLFVBQUksTUFBTTtBQUFHLGVBQU8sSUFBSSxTQUFTLFVBQVUsQ0FBQztBQUM1QyxXQUFLLFdBQVcsSUFBSTtBQUNwQixXQUFLLFlBQVk7QUFDakIsVUFBSSxNQUFNLEdBQUc7QUFDWCxhQUFLLFNBQVMsQ0FBQyxJQUFJLElBQUksSUFBSSxTQUFTLENBQUM7QUFBQSxNQUN2QyxPQUFPO0FBQ0wsYUFBSyxTQUFTLENBQUMsSUFBSSxJQUFJLElBQUksU0FBUyxDQUFDO0FBQ3JDLGFBQUssU0FBUyxDQUFDLElBQUksSUFBSSxJQUFJLFNBQVMsQ0FBQztBQUFBLE1BQ3ZDO0FBQ0EsYUFBTyxJQUFJLFNBQVMsVUFBVSxHQUFHLElBQUksU0FBUyxDQUFDO0FBQUEsSUFDakQ7QUFFQSxhQUFTLFVBQVUsS0FBSztBQUN0QixVQUFJLElBQUksT0FBTyxJQUFJLFNBQVMsS0FBSyxNQUFNLEdBQUcsSUFBSTtBQUM5QyxVQUFJLEtBQUs7QUFBVSxlQUFPLElBQUksS0FBSyxTQUFTLFNBQVMsVUFBVSxHQUFHLElBQUksS0FBSyxRQUFRO0FBQ25GLGFBQU87QUFBQSxJQUNUO0FBR0EsYUFBUyxZQUFZLEtBQUs7QUFDeEIsYUFBTyxJQUFJLFNBQVMsS0FBSyxRQUFRO0FBQUEsSUFDbkM7QUFFQSxhQUFTLFVBQVUsS0FBSztBQUN0QixhQUFPLE9BQU8sSUFBSSxTQUFTLEtBQUssTUFBTSxHQUFHLElBQUk7QUFBQSxJQUMvQztBQUFBO0FBQUE7OztBQ3ZTQTtBQUFBLHlIQUFBQyxTQUFBO0FBQUE7QUFLQSxRQUFJLDZCQUE2QixpQkFBMkIsTUFBTTtBQUNsRSxhQUFTLEtBQUssVUFBVTtBQUN0QixVQUFJLFNBQVM7QUFDYixhQUFPLFdBQVk7QUFDakIsWUFBSTtBQUFRO0FBQ1osaUJBQVM7QUFDVCxpQkFBUyxPQUFPLFVBQVUsUUFBUSxPQUFPLElBQUksTUFBTSxJQUFJLEdBQUcsT0FBTyxHQUFHLE9BQU8sTUFBTSxRQUFRO0FBQ3ZGLGVBQUssSUFBSSxJQUFJLFVBQVUsSUFBSTtBQUFBLFFBQzdCO0FBQ0EsaUJBQVMsTUFBTSxNQUFNLElBQUk7QUFBQSxNQUMzQjtBQUFBLElBQ0Y7QUFDQSxhQUFTLE9BQU87QUFBQSxJQUFDO0FBQ2pCLGFBQVMsVUFBVSxRQUFRO0FBQ3pCLGFBQU8sT0FBTyxhQUFhLE9BQU8sT0FBTyxVQUFVO0FBQUEsSUFDckQ7QUFDQSxhQUFTLElBQUksUUFBUSxNQUFNLFVBQVU7QUFDbkMsVUFBSSxPQUFPLFNBQVM7QUFBWSxlQUFPLElBQUksUUFBUSxNQUFNLElBQUk7QUFDN0QsVUFBSSxDQUFDO0FBQU0sZUFBTyxDQUFDO0FBQ25CLGlCQUFXLEtBQUssWUFBWSxJQUFJO0FBQ2hDLFVBQUksV0FBVyxLQUFLLFlBQVksS0FBSyxhQUFhLFNBQVMsT0FBTztBQUNsRSxVQUFJLFdBQVcsS0FBSyxZQUFZLEtBQUssYUFBYSxTQUFTLE9BQU87QUFDbEUsVUFBSSxpQkFBaUIsU0FBU0Msa0JBQWlCO0FBQzdDLFlBQUksQ0FBQyxPQUFPO0FBQVUsbUJBQVM7QUFBQSxNQUNqQztBQUNBLFVBQUksZ0JBQWdCLE9BQU8sa0JBQWtCLE9BQU8sZUFBZTtBQUNuRSxVQUFJLFdBQVcsU0FBU0MsWUFBVztBQUNqQyxtQkFBVztBQUNYLHdCQUFnQjtBQUNoQixZQUFJLENBQUM7QUFBVSxtQkFBUyxLQUFLLE1BQU07QUFBQSxNQUNyQztBQUNBLFVBQUksZ0JBQWdCLE9BQU8sa0JBQWtCLE9BQU8sZUFBZTtBQUNuRSxVQUFJLFFBQVEsU0FBU0MsU0FBUTtBQUMzQixtQkFBVztBQUNYLHdCQUFnQjtBQUNoQixZQUFJLENBQUM7QUFBVSxtQkFBUyxLQUFLLE1BQU07QUFBQSxNQUNyQztBQUNBLFVBQUksVUFBVSxTQUFTQyxTQUFRLEtBQUs7QUFDbEMsaUJBQVMsS0FBSyxRQUFRLEdBQUc7QUFBQSxNQUMzQjtBQUNBLFVBQUksVUFBVSxTQUFTQyxXQUFVO0FBQy9CLFlBQUk7QUFDSixZQUFJLFlBQVksQ0FBQyxlQUFlO0FBQzlCLGNBQUksQ0FBQyxPQUFPLGtCQUFrQixDQUFDLE9BQU8sZUFBZTtBQUFPLGtCQUFNLElBQUksMkJBQTJCO0FBQ2pHLGlCQUFPLFNBQVMsS0FBSyxRQUFRLEdBQUc7QUFBQSxRQUNsQztBQUNBLFlBQUksWUFBWSxDQUFDLGVBQWU7QUFDOUIsY0FBSSxDQUFDLE9BQU8sa0JBQWtCLENBQUMsT0FBTyxlQUFlO0FBQU8sa0JBQU0sSUFBSSwyQkFBMkI7QUFDakcsaUJBQU8sU0FBUyxLQUFLLFFBQVEsR0FBRztBQUFBLFFBQ2xDO0FBQUEsTUFDRjtBQUNBLFVBQUksWUFBWSxTQUFTQyxhQUFZO0FBQ25DLGVBQU8sSUFBSSxHQUFHLFVBQVUsUUFBUTtBQUFBLE1BQ2xDO0FBQ0EsVUFBSSxVQUFVLE1BQU0sR0FBRztBQUNyQixlQUFPLEdBQUcsWUFBWSxRQUFRO0FBQzlCLGVBQU8sR0FBRyxTQUFTLE9BQU87QUFDMUIsWUFBSSxPQUFPO0FBQUssb0JBQVU7QUFBQTtBQUFPLGlCQUFPLEdBQUcsV0FBVyxTQUFTO0FBQUEsTUFDakUsV0FBVyxZQUFZLENBQUMsT0FBTyxnQkFBZ0I7QUFFN0MsZUFBTyxHQUFHLE9BQU8sY0FBYztBQUMvQixlQUFPLEdBQUcsU0FBUyxjQUFjO0FBQUEsTUFDbkM7QUFDQSxhQUFPLEdBQUcsT0FBTyxLQUFLO0FBQ3RCLGFBQU8sR0FBRyxVQUFVLFFBQVE7QUFDNUIsVUFBSSxLQUFLLFVBQVU7QUFBTyxlQUFPLEdBQUcsU0FBUyxPQUFPO0FBQ3BELGFBQU8sR0FBRyxTQUFTLE9BQU87QUFDMUIsYUFBTyxXQUFZO0FBQ2pCLGVBQU8sZUFBZSxZQUFZLFFBQVE7QUFDMUMsZUFBTyxlQUFlLFNBQVMsT0FBTztBQUN0QyxlQUFPLGVBQWUsV0FBVyxTQUFTO0FBQzFDLFlBQUksT0FBTztBQUFLLGlCQUFPLElBQUksZUFBZSxVQUFVLFFBQVE7QUFDNUQsZUFBTyxlQUFlLE9BQU8sY0FBYztBQUMzQyxlQUFPLGVBQWUsU0FBUyxjQUFjO0FBQzdDLGVBQU8sZUFBZSxVQUFVLFFBQVE7QUFDeEMsZUFBTyxlQUFlLE9BQU8sS0FBSztBQUNsQyxlQUFPLGVBQWUsU0FBUyxPQUFPO0FBQ3RDLGVBQU8sZUFBZSxTQUFTLE9BQU87QUFBQSxNQUN4QztBQUFBLElBQ0Y7QUFDQSxJQUFBTixRQUFPLFVBQVU7QUFBQTtBQUFBOzs7QUNyRmpCO0FBQUEsMEhBQUFPLFNBQUE7QUFBQTtBQUVBLFFBQUk7QUFDSixhQUFTLGdCQUFnQixLQUFLLEtBQUssT0FBTztBQUFFLFlBQU0sZUFBZSxHQUFHO0FBQUcsVUFBSSxPQUFPLEtBQUs7QUFBRSxlQUFPLGVBQWUsS0FBSyxLQUFLLEVBQUUsT0FBYyxZQUFZLE1BQU0sY0FBYyxNQUFNLFVBQVUsS0FBSyxDQUFDO0FBQUEsTUFBRyxPQUFPO0FBQUUsWUFBSSxHQUFHLElBQUk7QUFBQSxNQUFPO0FBQUUsYUFBTztBQUFBLElBQUs7QUFDM08sYUFBUyxlQUFlLEtBQUs7QUFBRSxVQUFJLE1BQU0sYUFBYSxLQUFLLFFBQVE7QUFBRyxhQUFPLE9BQU8sUUFBUSxXQUFXLE1BQU0sT0FBTyxHQUFHO0FBQUEsSUFBRztBQUMxSCxhQUFTLGFBQWEsT0FBTyxNQUFNO0FBQUUsVUFBSSxPQUFPLFVBQVUsWUFBWSxVQUFVO0FBQU0sZUFBTztBQUFPLFVBQUksT0FBTyxNQUFNLE9BQU8sV0FBVztBQUFHLFVBQUksU0FBUyxRQUFXO0FBQUUsWUFBSSxNQUFNLEtBQUssS0FBSyxPQUFPLFFBQVEsU0FBUztBQUFHLFlBQUksT0FBTyxRQUFRO0FBQVUsaUJBQU87QUFBSyxjQUFNLElBQUksVUFBVSw4Q0FBOEM7QUFBQSxNQUFHO0FBQUUsY0FBUSxTQUFTLFdBQVcsU0FBUyxRQUFRLEtBQUs7QUFBQSxJQUFHO0FBQ3hYLFFBQUksV0FBVztBQUNmLFFBQUksZUFBZSxPQUFPLGFBQWE7QUFDdkMsUUFBSSxjQUFjLE9BQU8sWUFBWTtBQUNyQyxRQUFJLFNBQVMsT0FBTyxPQUFPO0FBQzNCLFFBQUksU0FBUyxPQUFPLE9BQU87QUFDM0IsUUFBSSxlQUFlLE9BQU8sYUFBYTtBQUN2QyxRQUFJLGlCQUFpQixPQUFPLGVBQWU7QUFDM0MsUUFBSSxVQUFVLE9BQU8sUUFBUTtBQUM3QixhQUFTLGlCQUFpQixPQUFPLE1BQU07QUFDckMsYUFBTztBQUFBLFFBQ0w7QUFBQSxRQUNBO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFDQSxhQUFTLGVBQWUsTUFBTTtBQUM1QixVQUFJQyxZQUFVLEtBQUssWUFBWTtBQUMvQixVQUFJQSxjQUFZLE1BQU07QUFDcEIsWUFBSSxPQUFPLEtBQUssT0FBTyxFQUFFLEtBQUs7QUFJOUIsWUFBSSxTQUFTLE1BQU07QUFDakIsZUFBSyxZQUFZLElBQUk7QUFDckIsZUFBSyxZQUFZLElBQUk7QUFDckIsZUFBSyxXQUFXLElBQUk7QUFDcEIsVUFBQUEsVUFBUSxpQkFBaUIsTUFBTSxLQUFLLENBQUM7QUFBQSxRQUN2QztBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQ0EsYUFBUyxXQUFXLE1BQU07QUFHeEIsY0FBUSxTQUFTLGdCQUFnQixJQUFJO0FBQUEsSUFDdkM7QUFDQSxhQUFTLFlBQVksYUFBYSxNQUFNO0FBQ3RDLGFBQU8sU0FBVUEsV0FBUyxRQUFRO0FBQ2hDLG9CQUFZLEtBQUssV0FBWTtBQUMzQixjQUFJLEtBQUssTUFBTSxHQUFHO0FBQ2hCLFlBQUFBLFVBQVEsaUJBQWlCLFFBQVcsSUFBSSxDQUFDO0FBQ3pDO0FBQUEsVUFDRjtBQUNBLGVBQUssY0FBYyxFQUFFQSxXQUFTLE1BQU07QUFBQSxRQUN0QyxHQUFHLE1BQU07QUFBQSxNQUNYO0FBQUEsSUFDRjtBQUNBLFFBQUkseUJBQXlCLE9BQU8sZUFBZSxXQUFZO0FBQUEsSUFBQyxDQUFDO0FBQ2pFLFFBQUksdUNBQXVDLE9BQU8sZ0JBQWdCLHdCQUF3QjtBQUFBLE1BQ3hGLElBQUksU0FBUztBQUNYLGVBQU8sS0FBSyxPQUFPO0FBQUEsTUFDckI7QUFBQSxNQUNBLE1BQU0sU0FBUyxPQUFPO0FBQ3BCLFlBQUksUUFBUTtBQUdaLFlBQUksUUFBUSxLQUFLLE1BQU07QUFDdkIsWUFBSSxVQUFVLE1BQU07QUFDbEIsaUJBQU8sUUFBUSxPQUFPLEtBQUs7QUFBQSxRQUM3QjtBQUNBLFlBQUksS0FBSyxNQUFNLEdBQUc7QUFDaEIsaUJBQU8sUUFBUSxRQUFRLGlCQUFpQixRQUFXLElBQUksQ0FBQztBQUFBLFFBQzFEO0FBQ0EsWUFBSSxLQUFLLE9BQU8sRUFBRSxXQUFXO0FBSzNCLGlCQUFPLElBQUksUUFBUSxTQUFVQSxXQUFTLFFBQVE7QUFDNUMsb0JBQVEsU0FBUyxXQUFZO0FBQzNCLGtCQUFJLE1BQU0sTUFBTSxHQUFHO0FBQ2pCLHVCQUFPLE1BQU0sTUFBTSxDQUFDO0FBQUEsY0FDdEIsT0FBTztBQUNMLGdCQUFBQSxVQUFRLGlCQUFpQixRQUFXLElBQUksQ0FBQztBQUFBLGNBQzNDO0FBQUEsWUFDRixDQUFDO0FBQUEsVUFDSCxDQUFDO0FBQUEsUUFDSDtBQU1BLFlBQUksY0FBYyxLQUFLLFlBQVk7QUFDbkMsWUFBSTtBQUNKLFlBQUksYUFBYTtBQUNmLG9CQUFVLElBQUksUUFBUSxZQUFZLGFBQWEsSUFBSSxDQUFDO0FBQUEsUUFDdEQsT0FBTztBQUdMLGNBQUksT0FBTyxLQUFLLE9BQU8sRUFBRSxLQUFLO0FBQzlCLGNBQUksU0FBUyxNQUFNO0FBQ2pCLG1CQUFPLFFBQVEsUUFBUSxpQkFBaUIsTUFBTSxLQUFLLENBQUM7QUFBQSxVQUN0RDtBQUNBLG9CQUFVLElBQUksUUFBUSxLQUFLLGNBQWMsQ0FBQztBQUFBLFFBQzVDO0FBQ0EsYUFBSyxZQUFZLElBQUk7QUFDckIsZUFBTztBQUFBLE1BQ1Q7QUFBQSxJQUNGLEdBQUcsZ0JBQWdCLHVCQUF1QixPQUFPLGVBQWUsV0FBWTtBQUMxRSxhQUFPO0FBQUEsSUFDVCxDQUFDLEdBQUcsZ0JBQWdCLHVCQUF1QixVQUFVLFNBQVMsVUFBVTtBQUN0RSxVQUFJLFNBQVM7QUFJYixhQUFPLElBQUksUUFBUSxTQUFVQSxXQUFTLFFBQVE7QUFDNUMsZUFBTyxPQUFPLEVBQUUsUUFBUSxNQUFNLFNBQVUsS0FBSztBQUMzQyxjQUFJLEtBQUs7QUFDUCxtQkFBTyxHQUFHO0FBQ1Y7QUFBQSxVQUNGO0FBQ0EsVUFBQUEsVUFBUSxpQkFBaUIsUUFBVyxJQUFJLENBQUM7QUFBQSxRQUMzQyxDQUFDO0FBQUEsTUFDSCxDQUFDO0FBQUEsSUFDSCxDQUFDLEdBQUcsd0JBQXdCLHNCQUFzQjtBQUNsRCxRQUFJLG9DQUFvQyxTQUFTQyxtQ0FBa0MsUUFBUTtBQUN6RixVQUFJO0FBQ0osVUFBSSxXQUFXLE9BQU8sT0FBTyx1Q0FBdUMsaUJBQWlCLENBQUMsR0FBRyxnQkFBZ0IsZ0JBQWdCLFNBQVM7QUFBQSxRQUNoSSxPQUFPO0FBQUEsUUFDUCxVQUFVO0FBQUEsTUFDWixDQUFDLEdBQUcsZ0JBQWdCLGdCQUFnQixjQUFjO0FBQUEsUUFDaEQsT0FBTztBQUFBLFFBQ1AsVUFBVTtBQUFBLE1BQ1osQ0FBQyxHQUFHLGdCQUFnQixnQkFBZ0IsYUFBYTtBQUFBLFFBQy9DLE9BQU87QUFBQSxRQUNQLFVBQVU7QUFBQSxNQUNaLENBQUMsR0FBRyxnQkFBZ0IsZ0JBQWdCLFFBQVE7QUFBQSxRQUMxQyxPQUFPO0FBQUEsUUFDUCxVQUFVO0FBQUEsTUFDWixDQUFDLEdBQUcsZ0JBQWdCLGdCQUFnQixRQUFRO0FBQUEsUUFDMUMsT0FBTyxPQUFPLGVBQWU7QUFBQSxRQUM3QixVQUFVO0FBQUEsTUFDWixDQUFDLEdBQUcsZ0JBQWdCLGdCQUFnQixnQkFBZ0I7QUFBQSxRQUNsRCxPQUFPLFNBQVMsTUFBTUQsV0FBUyxRQUFRO0FBQ3JDLGNBQUksT0FBTyxTQUFTLE9BQU8sRUFBRSxLQUFLO0FBQ2xDLGNBQUksTUFBTTtBQUNSLHFCQUFTLFlBQVksSUFBSTtBQUN6QixxQkFBUyxZQUFZLElBQUk7QUFDekIscUJBQVMsV0FBVyxJQUFJO0FBQ3hCLFlBQUFBLFVBQVEsaUJBQWlCLE1BQU0sS0FBSyxDQUFDO0FBQUEsVUFDdkMsT0FBTztBQUNMLHFCQUFTLFlBQVksSUFBSUE7QUFDekIscUJBQVMsV0FBVyxJQUFJO0FBQUEsVUFDMUI7QUFBQSxRQUNGO0FBQUEsUUFDQSxVQUFVO0FBQUEsTUFDWixDQUFDLEdBQUcsZUFBZTtBQUNuQixlQUFTLFlBQVksSUFBSTtBQUN6QixlQUFTLFFBQVEsU0FBVSxLQUFLO0FBQzlCLFlBQUksT0FBTyxJQUFJLFNBQVMsOEJBQThCO0FBQ3BELGNBQUksU0FBUyxTQUFTLFdBQVc7QUFHakMsY0FBSSxXQUFXLE1BQU07QUFDbkIscUJBQVMsWUFBWSxJQUFJO0FBQ3pCLHFCQUFTLFlBQVksSUFBSTtBQUN6QixxQkFBUyxXQUFXLElBQUk7QUFDeEIsbUJBQU8sR0FBRztBQUFBLFVBQ1o7QUFDQSxtQkFBUyxNQUFNLElBQUk7QUFDbkI7QUFBQSxRQUNGO0FBQ0EsWUFBSUEsWUFBVSxTQUFTLFlBQVk7QUFDbkMsWUFBSUEsY0FBWSxNQUFNO0FBQ3BCLG1CQUFTLFlBQVksSUFBSTtBQUN6QixtQkFBUyxZQUFZLElBQUk7QUFDekIsbUJBQVMsV0FBVyxJQUFJO0FBQ3hCLFVBQUFBLFVBQVEsaUJBQWlCLFFBQVcsSUFBSSxDQUFDO0FBQUEsUUFDM0M7QUFDQSxpQkFBUyxNQUFNLElBQUk7QUFBQSxNQUNyQixDQUFDO0FBQ0QsYUFBTyxHQUFHLFlBQVksV0FBVyxLQUFLLE1BQU0sUUFBUSxDQUFDO0FBQ3JELGFBQU87QUFBQSxJQUNUO0FBQ0EsSUFBQUQsUUFBTyxVQUFVO0FBQUE7QUFBQTs7O0FDbkxqQjtBQUFBLGdIQUFBRyxTQUFBO0FBQUE7QUFFQSxhQUFTLG1CQUFtQixLQUFLQyxXQUFTLFFBQVEsT0FBTyxRQUFRLEtBQUssS0FBSztBQUFFLFVBQUk7QUFBRSxZQUFJLE9BQU8sSUFBSSxHQUFHLEVBQUUsR0FBRztBQUFHLFlBQUksUUFBUSxLQUFLO0FBQUEsTUFBTyxTQUFTLE9BQU87QUFBRSxlQUFPLEtBQUs7QUFBRztBQUFBLE1BQVE7QUFBRSxVQUFJLEtBQUssTUFBTTtBQUFFLFFBQUFBLFVBQVEsS0FBSztBQUFBLE1BQUcsT0FBTztBQUFFLGdCQUFRLFFBQVEsS0FBSyxFQUFFLEtBQUssT0FBTyxNQUFNO0FBQUEsTUFBRztBQUFBLElBQUU7QUFDeFEsYUFBUyxrQkFBa0IsSUFBSTtBQUFFLGFBQU8sV0FBWTtBQUFFLFlBQUlDLFFBQU8sTUFBTSxPQUFPO0FBQVcsZUFBTyxJQUFJLFFBQVEsU0FBVUQsV0FBUyxRQUFRO0FBQUUsY0FBSSxNQUFNLEdBQUcsTUFBTUMsT0FBTSxJQUFJO0FBQUcsbUJBQVMsTUFBTSxPQUFPO0FBQUUsK0JBQW1CLEtBQUtELFdBQVMsUUFBUSxPQUFPLFFBQVEsUUFBUSxLQUFLO0FBQUEsVUFBRztBQUFFLG1CQUFTLE9BQU8sS0FBSztBQUFFLCtCQUFtQixLQUFLQSxXQUFTLFFBQVEsT0FBTyxRQUFRLFNBQVMsR0FBRztBQUFBLFVBQUc7QUFBRSxnQkFBTSxNQUFTO0FBQUEsUUFBRyxDQUFDO0FBQUEsTUFBRztBQUFBLElBQUc7QUFDcFksYUFBUyxRQUFRLFFBQVEsZ0JBQWdCO0FBQUUsVUFBSSxPQUFPLE9BQU8sS0FBSyxNQUFNO0FBQUcsVUFBSSxPQUFPLHVCQUF1QjtBQUFFLFlBQUksVUFBVSxPQUFPLHNCQUFzQixNQUFNO0FBQUcsMkJBQW1CLFVBQVUsUUFBUSxPQUFPLFNBQVUsS0FBSztBQUFFLGlCQUFPLE9BQU8seUJBQXlCLFFBQVEsR0FBRyxFQUFFO0FBQUEsUUFBWSxDQUFDLElBQUksS0FBSyxLQUFLLE1BQU0sTUFBTSxPQUFPO0FBQUEsTUFBRztBQUFFLGFBQU87QUFBQSxJQUFNO0FBQ3BWLGFBQVMsY0FBYyxRQUFRO0FBQUUsZUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFlBQUksU0FBUyxRQUFRLFVBQVUsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUM7QUFBRyxZQUFJLElBQUksUUFBUSxPQUFPLE1BQU0sR0FBRyxJQUFFLEVBQUUsUUFBUSxTQUFVLEtBQUs7QUFBRSwwQkFBZ0IsUUFBUSxLQUFLLE9BQU8sR0FBRyxDQUFDO0FBQUEsUUFBRyxDQUFDLElBQUksT0FBTyw0QkFBNEIsT0FBTyxpQkFBaUIsUUFBUSxPQUFPLDBCQUEwQixNQUFNLENBQUMsSUFBSSxRQUFRLE9BQU8sTUFBTSxDQUFDLEVBQUUsUUFBUSxTQUFVLEtBQUs7QUFBRSxpQkFBTyxlQUFlLFFBQVEsS0FBSyxPQUFPLHlCQUF5QixRQUFRLEdBQUcsQ0FBQztBQUFBLFFBQUcsQ0FBQztBQUFBLE1BQUc7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUN6ZixhQUFTLGdCQUFnQixLQUFLLEtBQUssT0FBTztBQUFFLFlBQU0sZUFBZSxHQUFHO0FBQUcsVUFBSSxPQUFPLEtBQUs7QUFBRSxlQUFPLGVBQWUsS0FBSyxLQUFLLEVBQUUsT0FBYyxZQUFZLE1BQU0sY0FBYyxNQUFNLFVBQVUsS0FBSyxDQUFDO0FBQUEsTUFBRyxPQUFPO0FBQUUsWUFBSSxHQUFHLElBQUk7QUFBQSxNQUFPO0FBQUUsYUFBTztBQUFBLElBQUs7QUFDM08sYUFBUyxlQUFlLEtBQUs7QUFBRSxVQUFJLE1BQU0sYUFBYSxLQUFLLFFBQVE7QUFBRyxhQUFPLE9BQU8sUUFBUSxXQUFXLE1BQU0sT0FBTyxHQUFHO0FBQUEsSUFBRztBQUMxSCxhQUFTLGFBQWEsT0FBTyxNQUFNO0FBQUUsVUFBSSxPQUFPLFVBQVUsWUFBWSxVQUFVO0FBQU0sZUFBTztBQUFPLFVBQUksT0FBTyxNQUFNLE9BQU8sV0FBVztBQUFHLFVBQUksU0FBUyxRQUFXO0FBQUUsWUFBSSxNQUFNLEtBQUssS0FBSyxPQUFPLFFBQVEsU0FBUztBQUFHLFlBQUksT0FBTyxRQUFRO0FBQVUsaUJBQU87QUFBSyxjQUFNLElBQUksVUFBVSw4Q0FBOEM7QUFBQSxNQUFHO0FBQUUsY0FBUSxTQUFTLFdBQVcsU0FBUyxRQUFRLEtBQUs7QUFBQSxJQUFHO0FBQ3hYLFFBQUksdUJBQXVCLGlCQUEyQixNQUFNO0FBQzVELGFBQVMsS0FBSyxVQUFVLFVBQVUsTUFBTTtBQUN0QyxVQUFJO0FBQ0osVUFBSSxZQUFZLE9BQU8sU0FBUyxTQUFTLFlBQVk7QUFDbkQsbUJBQVc7QUFBQSxNQUNiLFdBQVcsWUFBWSxTQUFTLE9BQU8sYUFBYTtBQUFHLG1CQUFXLFNBQVMsT0FBTyxhQUFhLEVBQUU7QUFBQSxlQUFXLFlBQVksU0FBUyxPQUFPLFFBQVE7QUFBRyxtQkFBVyxTQUFTLE9BQU8sUUFBUSxFQUFFO0FBQUE7QUFBTyxjQUFNLElBQUkscUJBQXFCLFlBQVksQ0FBQyxVQUFVLEdBQUcsUUFBUTtBQUNoUSxVQUFJLFdBQVcsSUFBSSxTQUFTLGNBQWM7QUFBQSxRQUN4QyxZQUFZO0FBQUEsTUFDZCxHQUFHLElBQUksQ0FBQztBQUdSLFVBQUksVUFBVTtBQUNkLGVBQVMsUUFBUSxXQUFZO0FBQzNCLFlBQUksQ0FBQyxTQUFTO0FBQ1osb0JBQVU7QUFDVixlQUFLO0FBQUEsUUFDUDtBQUFBLE1BQ0Y7QUFDQSxlQUFTLE9BQU87QUFDZCxlQUFPLE9BQU8sTUFBTSxNQUFNLFNBQVM7QUFBQSxNQUNyQztBQUNBLGVBQVMsU0FBUztBQUNoQixpQkFBUyxrQkFBa0IsYUFBYTtBQUN0QyxjQUFJO0FBQ0YsZ0JBQUksdUJBQXVCLE1BQU0sU0FBUyxLQUFLLEdBQzdDLFFBQVEscUJBQXFCLE9BQzdCLE9BQU8scUJBQXFCO0FBQzlCLGdCQUFJLE1BQU07QUFDUix1QkFBUyxLQUFLLElBQUk7QUFBQSxZQUNwQixXQUFXLFNBQVMsS0FBSyxNQUFNLEtBQUssR0FBRztBQUNyQyxtQkFBSztBQUFBLFlBQ1AsT0FBTztBQUNMLHdCQUFVO0FBQUEsWUFDWjtBQUFBLFVBQ0YsU0FBUyxLQUFLO0FBQ1oscUJBQVMsUUFBUSxHQUFHO0FBQUEsVUFDdEI7QUFBQSxRQUNGLENBQUM7QUFDRCxlQUFPLE9BQU8sTUFBTSxNQUFNLFNBQVM7QUFBQSxNQUNyQztBQUNBLGFBQU87QUFBQSxJQUNUO0FBQ0EsSUFBQUQsUUFBTyxVQUFVO0FBQUE7QUFBQTs7O0FDbkRqQjtBQUFBLDJHQUFBRyxTQUFBO0FBQUE7QUF1QkEsSUFBQUEsUUFBTyxVQUFVO0FBR2pCLFFBQUk7QUFHSixhQUFTLGdCQUFnQjtBQUd6QixRQUFJLEtBQUssUUFBUSxRQUFRLEVBQUU7QUFDM0IsUUFBSSxrQkFBa0IsU0FBU0MsaUJBQWdCLFNBQVMsTUFBTTtBQUM1RCxhQUFPLFFBQVEsVUFBVSxJQUFJLEVBQUU7QUFBQSxJQUNqQztBQUlBLFFBQUksU0FBUztBQUdiLFFBQUlDLFVBQVMsUUFBUSxRQUFRLEVBQUU7QUFDL0IsUUFBSSxpQkFBaUIsT0FBTyxXQUFXLGNBQWMsU0FBUyxPQUFPLFdBQVcsY0FBYyxTQUFTLE9BQU8sU0FBUyxjQUFjLE9BQU8sQ0FBQyxHQUFHLGNBQWMsV0FBWTtBQUFBLElBQUM7QUFDM0ssYUFBUyxvQkFBb0IsT0FBTztBQUNsQyxhQUFPQSxRQUFPLEtBQUssS0FBSztBQUFBLElBQzFCO0FBQ0EsYUFBUyxjQUFjLEtBQUs7QUFDMUIsYUFBT0EsUUFBTyxTQUFTLEdBQUcsS0FBSyxlQUFlO0FBQUEsSUFDaEQ7QUFHQSxRQUFJLFlBQVksUUFBUSxNQUFNO0FBQzlCLFFBQUk7QUFDSixRQUFJLGFBQWEsVUFBVSxVQUFVO0FBQ25DLGNBQVEsVUFBVSxTQUFTLFFBQVE7QUFBQSxJQUNyQyxPQUFPO0FBQ0wsY0FBUSxTQUFTQyxTQUFRO0FBQUEsTUFBQztBQUFBLElBQzVCO0FBR0EsUUFBSSxhQUFhO0FBQ2pCLFFBQUksY0FBYztBQUNsQixRQUFJLFdBQVc7QUFBZixRQUNFLG1CQUFtQixTQUFTO0FBQzlCLFFBQUksaUJBQWlCLGlCQUFxQjtBQUExQyxRQUNFLHVCQUF1QixlQUFlO0FBRHhDLFFBRUUsNEJBQTRCLGVBQWU7QUFGN0MsUUFHRSw2QkFBNkIsZUFBZTtBQUg5QyxRQUlFLHFDQUFxQyxlQUFlO0FBR3RELFFBQUk7QUFDSixRQUFJO0FBQ0osUUFBSTtBQUNKLHVCQUFvQixVQUFVLE1BQU07QUFDcEMsUUFBSSxpQkFBaUIsWUFBWTtBQUNqQyxRQUFJLGVBQWUsQ0FBQyxTQUFTLFNBQVMsV0FBVyxTQUFTLFFBQVE7QUFDbEUsYUFBUyxnQkFBZ0IsU0FBUyxPQUFPLElBQUk7QUFHM0MsVUFBSSxPQUFPLFFBQVEsb0JBQW9CO0FBQVksZUFBTyxRQUFRLGdCQUFnQixPQUFPLEVBQUU7QUFNM0YsVUFBSSxDQUFDLFFBQVEsV0FBVyxDQUFDLFFBQVEsUUFBUSxLQUFLO0FBQUcsZ0JBQVEsR0FBRyxPQUFPLEVBQUU7QUFBQSxlQUFXLE1BQU0sUUFBUSxRQUFRLFFBQVEsS0FBSyxDQUFDO0FBQUcsZ0JBQVEsUUFBUSxLQUFLLEVBQUUsUUFBUSxFQUFFO0FBQUE7QUFBTyxnQkFBUSxRQUFRLEtBQUssSUFBSSxDQUFDLElBQUksUUFBUSxRQUFRLEtBQUssQ0FBQztBQUFBLElBQ3JOO0FBQ0EsYUFBUyxjQUFjLFNBQVMsUUFBUSxVQUFVO0FBQ2hELGVBQVMsVUFBVTtBQUNuQixnQkFBVSxXQUFXLENBQUM7QUFPdEIsVUFBSSxPQUFPLGFBQWE7QUFBVyxtQkFBVyxrQkFBa0I7QUFJaEUsV0FBSyxhQUFhLENBQUMsQ0FBQyxRQUFRO0FBQzVCLFVBQUk7QUFBVSxhQUFLLGFBQWEsS0FBSyxjQUFjLENBQUMsQ0FBQyxRQUFRO0FBSTdELFdBQUssZ0JBQWdCLGlCQUFpQixNQUFNLFNBQVMseUJBQXlCLFFBQVE7QUFLdEYsV0FBSyxTQUFTLElBQUksV0FBVztBQUM3QixXQUFLLFNBQVM7QUFDZCxXQUFLLFFBQVE7QUFDYixXQUFLLGFBQWE7QUFDbEIsV0FBSyxVQUFVO0FBQ2YsV0FBSyxRQUFRO0FBQ2IsV0FBSyxhQUFhO0FBQ2xCLFdBQUssVUFBVTtBQU1mLFdBQUssT0FBTztBQUlaLFdBQUssZUFBZTtBQUNwQixXQUFLLGtCQUFrQjtBQUN2QixXQUFLLG9CQUFvQjtBQUN6QixXQUFLLGtCQUFrQjtBQUN2QixXQUFLLFNBQVM7QUFHZCxXQUFLLFlBQVksUUFBUSxjQUFjO0FBR3ZDLFdBQUssY0FBYyxDQUFDLENBQUMsUUFBUTtBQUc3QixXQUFLLFlBQVk7QUFLakIsV0FBSyxrQkFBa0IsUUFBUSxtQkFBbUI7QUFHbEQsV0FBSyxhQUFhO0FBR2xCLFdBQUssY0FBYztBQUNuQixXQUFLLFVBQVU7QUFDZixXQUFLLFdBQVc7QUFDaEIsVUFBSSxRQUFRLFVBQVU7QUFDcEIsWUFBSSxDQUFDO0FBQWUsMEJBQWdCLHlCQUEyQjtBQUMvRCxhQUFLLFVBQVUsSUFBSSxjQUFjLFFBQVEsUUFBUTtBQUNqRCxhQUFLLFdBQVcsUUFBUTtBQUFBLE1BQzFCO0FBQUEsSUFDRjtBQUNBLGFBQVMsU0FBUyxTQUFTO0FBQ3pCLGVBQVMsVUFBVTtBQUNuQixVQUFJLEVBQUUsZ0JBQWdCO0FBQVcsZUFBTyxJQUFJLFNBQVMsT0FBTztBQUk1RCxVQUFJLFdBQVcsZ0JBQWdCO0FBQy9CLFdBQUssaUJBQWlCLElBQUksY0FBYyxTQUFTLE1BQU0sUUFBUTtBQUcvRCxXQUFLLFdBQVc7QUFDaEIsVUFBSSxTQUFTO0FBQ1gsWUFBSSxPQUFPLFFBQVEsU0FBUztBQUFZLGVBQUssUUFBUSxRQUFRO0FBQzdELFlBQUksT0FBTyxRQUFRLFlBQVk7QUFBWSxlQUFLLFdBQVcsUUFBUTtBQUFBLE1BQ3JFO0FBQ0EsYUFBTyxLQUFLLElBQUk7QUFBQSxJQUNsQjtBQUNBLFdBQU8sZUFBZSxTQUFTLFdBQVcsYUFBYTtBQUFBO0FBQUE7QUFBQTtBQUFBLE1BSXJELFlBQVk7QUFBQSxNQUNaLEtBQUssU0FBUyxNQUFNO0FBQ2xCLFlBQUksS0FBSyxtQkFBbUIsUUFBVztBQUNyQyxpQkFBTztBQUFBLFFBQ1Q7QUFDQSxlQUFPLEtBQUssZUFBZTtBQUFBLE1BQzdCO0FBQUEsTUFDQSxLQUFLLFNBQVMsSUFBSSxPQUFPO0FBR3ZCLFlBQUksQ0FBQyxLQUFLLGdCQUFnQjtBQUN4QjtBQUFBLFFBQ0Y7QUFJQSxhQUFLLGVBQWUsWUFBWTtBQUFBLE1BQ2xDO0FBQUEsSUFDRixDQUFDO0FBQ0QsYUFBUyxVQUFVLFVBQVUsWUFBWTtBQUN6QyxhQUFTLFVBQVUsYUFBYSxZQUFZO0FBQzVDLGFBQVMsVUFBVSxXQUFXLFNBQVUsS0FBSyxJQUFJO0FBQy9DLFNBQUcsR0FBRztBQUFBLElBQ1I7QUFNQSxhQUFTLFVBQVUsT0FBTyxTQUFVLE9BQU8sVUFBVTtBQUNuRCxVQUFJLFFBQVEsS0FBSztBQUNqQixVQUFJO0FBQ0osVUFBSSxDQUFDLE1BQU0sWUFBWTtBQUNyQixZQUFJLE9BQU8sVUFBVSxVQUFVO0FBQzdCLHFCQUFXLFlBQVksTUFBTTtBQUM3QixjQUFJLGFBQWEsTUFBTSxVQUFVO0FBQy9CLG9CQUFRRCxRQUFPLEtBQUssT0FBTyxRQUFRO0FBQ25DLHVCQUFXO0FBQUEsVUFDYjtBQUNBLDJCQUFpQjtBQUFBLFFBQ25CO0FBQUEsTUFDRixPQUFPO0FBQ0wseUJBQWlCO0FBQUEsTUFDbkI7QUFDQSxhQUFPLGlCQUFpQixNQUFNLE9BQU8sVUFBVSxPQUFPLGNBQWM7QUFBQSxJQUN0RTtBQUdBLGFBQVMsVUFBVSxVQUFVLFNBQVUsT0FBTztBQUM1QyxhQUFPLGlCQUFpQixNQUFNLE9BQU8sTUFBTSxNQUFNLEtBQUs7QUFBQSxJQUN4RDtBQUNBLGFBQVMsaUJBQWlCLFFBQVEsT0FBTyxVQUFVLFlBQVksZ0JBQWdCO0FBQzdFLFlBQU0sb0JBQW9CLEtBQUs7QUFDL0IsVUFBSSxRQUFRLE9BQU87QUFDbkIsVUFBSSxVQUFVLE1BQU07QUFDbEIsY0FBTSxVQUFVO0FBQ2hCLG1CQUFXLFFBQVEsS0FBSztBQUFBLE1BQzFCLE9BQU87QUFDTCxZQUFJO0FBQ0osWUFBSSxDQUFDO0FBQWdCLGVBQUssYUFBYSxPQUFPLEtBQUs7QUFDbkQsWUFBSSxJQUFJO0FBQ04seUJBQWUsUUFBUSxFQUFFO0FBQUEsUUFDM0IsV0FBVyxNQUFNLGNBQWMsU0FBUyxNQUFNLFNBQVMsR0FBRztBQUN4RCxjQUFJLE9BQU8sVUFBVSxZQUFZLENBQUMsTUFBTSxjQUFjLE9BQU8sZUFBZSxLQUFLLE1BQU1BLFFBQU8sV0FBVztBQUN2RyxvQkFBUSxvQkFBb0IsS0FBSztBQUFBLFVBQ25DO0FBQ0EsY0FBSSxZQUFZO0FBQ2QsZ0JBQUksTUFBTTtBQUFZLDZCQUFlLFFBQVEsSUFBSSxtQ0FBbUMsQ0FBQztBQUFBO0FBQU8sdUJBQVMsUUFBUSxPQUFPLE9BQU8sSUFBSTtBQUFBLFVBQ2pJLFdBQVcsTUFBTSxPQUFPO0FBQ3RCLDJCQUFlLFFBQVEsSUFBSSwwQkFBMEIsQ0FBQztBQUFBLFVBQ3hELFdBQVcsTUFBTSxXQUFXO0FBQzFCLG1CQUFPO0FBQUEsVUFDVCxPQUFPO0FBQ0wsa0JBQU0sVUFBVTtBQUNoQixnQkFBSSxNQUFNLFdBQVcsQ0FBQyxVQUFVO0FBQzlCLHNCQUFRLE1BQU0sUUFBUSxNQUFNLEtBQUs7QUFDakMsa0JBQUksTUFBTSxjQUFjLE1BQU0sV0FBVztBQUFHLHlCQUFTLFFBQVEsT0FBTyxPQUFPLEtBQUs7QUFBQTtBQUFPLDhCQUFjLFFBQVEsS0FBSztBQUFBLFlBQ3BILE9BQU87QUFDTCx1QkFBUyxRQUFRLE9BQU8sT0FBTyxLQUFLO0FBQUEsWUFDdEM7QUFBQSxVQUNGO0FBQUEsUUFDRixXQUFXLENBQUMsWUFBWTtBQUN0QixnQkFBTSxVQUFVO0FBQ2hCLHdCQUFjLFFBQVEsS0FBSztBQUFBLFFBQzdCO0FBQUEsTUFDRjtBQUtBLGFBQU8sQ0FBQyxNQUFNLFVBQVUsTUFBTSxTQUFTLE1BQU0saUJBQWlCLE1BQU0sV0FBVztBQUFBLElBQ2pGO0FBQ0EsYUFBUyxTQUFTLFFBQVEsT0FBTyxPQUFPLFlBQVk7QUFDbEQsVUFBSSxNQUFNLFdBQVcsTUFBTSxXQUFXLEtBQUssQ0FBQyxNQUFNLE1BQU07QUFDdEQsY0FBTSxhQUFhO0FBQ25CLGVBQU8sS0FBSyxRQUFRLEtBQUs7QUFBQSxNQUMzQixPQUFPO0FBRUwsY0FBTSxVQUFVLE1BQU0sYUFBYSxJQUFJLE1BQU07QUFDN0MsWUFBSTtBQUFZLGdCQUFNLE9BQU8sUUFBUSxLQUFLO0FBQUE7QUFBTyxnQkFBTSxPQUFPLEtBQUssS0FBSztBQUN4RSxZQUFJLE1BQU07QUFBYyx1QkFBYSxNQUFNO0FBQUEsTUFDN0M7QUFDQSxvQkFBYyxRQUFRLEtBQUs7QUFBQSxJQUM3QjtBQUNBLGFBQVMsYUFBYSxPQUFPLE9BQU87QUFDbEMsVUFBSTtBQUNKLFVBQUksQ0FBQyxjQUFjLEtBQUssS0FBSyxPQUFPLFVBQVUsWUFBWSxVQUFVLFVBQWEsQ0FBQyxNQUFNLFlBQVk7QUFDbEcsYUFBSyxJQUFJLHFCQUFxQixTQUFTLENBQUMsVUFBVSxVQUFVLFlBQVksR0FBRyxLQUFLO0FBQUEsTUFDbEY7QUFDQSxhQUFPO0FBQUEsSUFDVDtBQUNBLGFBQVMsVUFBVSxXQUFXLFdBQVk7QUFDeEMsYUFBTyxLQUFLLGVBQWUsWUFBWTtBQUFBLElBQ3pDO0FBR0EsYUFBUyxVQUFVLGNBQWMsU0FBVSxLQUFLO0FBQzlDLFVBQUksQ0FBQztBQUFlLHdCQUFnQix5QkFBMkI7QUFDL0QsVUFBSSxVQUFVLElBQUksY0FBYyxHQUFHO0FBQ25DLFdBQUssZUFBZSxVQUFVO0FBRTlCLFdBQUssZUFBZSxXQUFXLEtBQUssZUFBZSxRQUFRO0FBRzNELFVBQUksSUFBSSxLQUFLLGVBQWUsT0FBTztBQUNuQyxVQUFJLFVBQVU7QUFDZCxhQUFPLE1BQU0sTUFBTTtBQUNqQixtQkFBVyxRQUFRLE1BQU0sRUFBRSxJQUFJO0FBQy9CLFlBQUksRUFBRTtBQUFBLE1BQ1I7QUFDQSxXQUFLLGVBQWUsT0FBTyxNQUFNO0FBQ2pDLFVBQUksWUFBWTtBQUFJLGFBQUssZUFBZSxPQUFPLEtBQUssT0FBTztBQUMzRCxXQUFLLGVBQWUsU0FBUyxRQUFRO0FBQ3JDLGFBQU87QUFBQSxJQUNUO0FBR0EsUUFBSSxVQUFVO0FBQ2QsYUFBUyx3QkFBd0IsR0FBRztBQUNsQyxVQUFJLEtBQUssU0FBUztBQUVoQixZQUFJO0FBQUEsTUFDTixPQUFPO0FBR0w7QUFDQSxhQUFLLE1BQU07QUFDWCxhQUFLLE1BQU07QUFDWCxhQUFLLE1BQU07QUFDWCxhQUFLLE1BQU07QUFDWCxhQUFLLE1BQU07QUFDWDtBQUFBLE1BQ0Y7QUFDQSxhQUFPO0FBQUEsSUFDVDtBQUlBLGFBQVMsY0FBYyxHQUFHLE9BQU87QUFDL0IsVUFBSSxLQUFLLEtBQUssTUFBTSxXQUFXLEtBQUssTUFBTTtBQUFPLGVBQU87QUFDeEQsVUFBSSxNQUFNO0FBQVksZUFBTztBQUM3QixVQUFJLE1BQU0sR0FBRztBQUVYLFlBQUksTUFBTSxXQUFXLE1BQU07QUFBUSxpQkFBTyxNQUFNLE9BQU8sS0FBSyxLQUFLO0FBQUE7QUFBWSxpQkFBTyxNQUFNO0FBQUEsTUFDNUY7QUFFQSxVQUFJLElBQUksTUFBTTtBQUFlLGNBQU0sZ0JBQWdCLHdCQUF3QixDQUFDO0FBQzVFLFVBQUksS0FBSyxNQUFNO0FBQVEsZUFBTztBQUU5QixVQUFJLENBQUMsTUFBTSxPQUFPO0FBQ2hCLGNBQU0sZUFBZTtBQUNyQixlQUFPO0FBQUEsTUFDVDtBQUNBLGFBQU8sTUFBTTtBQUFBLElBQ2Y7QUFHQSxhQUFTLFVBQVUsT0FBTyxTQUFVLEdBQUc7QUFDckMsWUFBTSxRQUFRLENBQUM7QUFDZixVQUFJLFNBQVMsR0FBRyxFQUFFO0FBQ2xCLFVBQUksUUFBUSxLQUFLO0FBQ2pCLFVBQUksUUFBUTtBQUNaLFVBQUksTUFBTTtBQUFHLGNBQU0sa0JBQWtCO0FBS3JDLFVBQUksTUFBTSxLQUFLLE1BQU0sa0JBQWtCLE1BQU0sa0JBQWtCLElBQUksTUFBTSxVQUFVLE1BQU0sZ0JBQWdCLE1BQU0sU0FBUyxNQUFNLE1BQU0sUUFBUTtBQUMxSSxjQUFNLHNCQUFzQixNQUFNLFFBQVEsTUFBTSxLQUFLO0FBQ3JELFlBQUksTUFBTSxXQUFXLEtBQUssTUFBTTtBQUFPLHNCQUFZLElBQUk7QUFBQTtBQUFPLHVCQUFhLElBQUk7QUFDL0UsZUFBTztBQUFBLE1BQ1Q7QUFDQSxVQUFJLGNBQWMsR0FBRyxLQUFLO0FBRzFCLFVBQUksTUFBTSxLQUFLLE1BQU0sT0FBTztBQUMxQixZQUFJLE1BQU0sV0FBVztBQUFHLHNCQUFZLElBQUk7QUFDeEMsZUFBTztBQUFBLE1BQ1Q7QUF5QkEsVUFBSSxTQUFTLE1BQU07QUFDbkIsWUFBTSxpQkFBaUIsTUFBTTtBQUc3QixVQUFJLE1BQU0sV0FBVyxLQUFLLE1BQU0sU0FBUyxJQUFJLE1BQU0sZUFBZTtBQUNoRSxpQkFBUztBQUNULGNBQU0sOEJBQThCLE1BQU07QUFBQSxNQUM1QztBQUlBLFVBQUksTUFBTSxTQUFTLE1BQU0sU0FBUztBQUNoQyxpQkFBUztBQUNULGNBQU0sb0JBQW9CLE1BQU07QUFBQSxNQUNsQyxXQUFXLFFBQVE7QUFDakIsY0FBTSxTQUFTO0FBQ2YsY0FBTSxVQUFVO0FBQ2hCLGNBQU0sT0FBTztBQUViLFlBQUksTUFBTSxXQUFXO0FBQUcsZ0JBQU0sZUFBZTtBQUU3QyxhQUFLLE1BQU0sTUFBTSxhQUFhO0FBQzlCLGNBQU0sT0FBTztBQUdiLFlBQUksQ0FBQyxNQUFNO0FBQVMsY0FBSSxjQUFjLE9BQU8sS0FBSztBQUFBLE1BQ3BEO0FBQ0EsVUFBSTtBQUNKLFVBQUksSUFBSTtBQUFHLGNBQU0sU0FBUyxHQUFHLEtBQUs7QUFBQTtBQUFPLGNBQU07QUFDL0MsVUFBSSxRQUFRLE1BQU07QUFDaEIsY0FBTSxlQUFlLE1BQU0sVUFBVSxNQUFNO0FBQzNDLFlBQUk7QUFBQSxNQUNOLE9BQU87QUFDTCxjQUFNLFVBQVU7QUFDaEIsY0FBTSxhQUFhO0FBQUEsTUFDckI7QUFDQSxVQUFJLE1BQU0sV0FBVyxHQUFHO0FBR3RCLFlBQUksQ0FBQyxNQUFNO0FBQU8sZ0JBQU0sZUFBZTtBQUd2QyxZQUFJLFVBQVUsS0FBSyxNQUFNO0FBQU8sc0JBQVksSUFBSTtBQUFBLE1BQ2xEO0FBQ0EsVUFBSSxRQUFRO0FBQU0sYUFBSyxLQUFLLFFBQVEsR0FBRztBQUN2QyxhQUFPO0FBQUEsSUFDVDtBQUNBLGFBQVMsV0FBVyxRQUFRLE9BQU87QUFDakMsWUFBTSxZQUFZO0FBQ2xCLFVBQUksTUFBTTtBQUFPO0FBQ2pCLFVBQUksTUFBTSxTQUFTO0FBQ2pCLFlBQUksUUFBUSxNQUFNLFFBQVEsSUFBSTtBQUM5QixZQUFJLFNBQVMsTUFBTSxRQUFRO0FBQ3pCLGdCQUFNLE9BQU8sS0FBSyxLQUFLO0FBQ3ZCLGdCQUFNLFVBQVUsTUFBTSxhQUFhLElBQUksTUFBTTtBQUFBLFFBQy9DO0FBQUEsTUFDRjtBQUNBLFlBQU0sUUFBUTtBQUNkLFVBQUksTUFBTSxNQUFNO0FBSWQscUJBQWEsTUFBTTtBQUFBLE1BQ3JCLE9BQU87QUFFTCxjQUFNLGVBQWU7QUFDckIsWUFBSSxDQUFDLE1BQU0saUJBQWlCO0FBQzFCLGdCQUFNLGtCQUFrQjtBQUN4Qix3QkFBYyxNQUFNO0FBQUEsUUFDdEI7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUtBLGFBQVMsYUFBYSxRQUFRO0FBQzVCLFVBQUksUUFBUSxPQUFPO0FBQ25CLFlBQU0sZ0JBQWdCLE1BQU0sY0FBYyxNQUFNLGVBQWU7QUFDL0QsWUFBTSxlQUFlO0FBQ3JCLFVBQUksQ0FBQyxNQUFNLGlCQUFpQjtBQUMxQixjQUFNLGdCQUFnQixNQUFNLE9BQU87QUFDbkMsY0FBTSxrQkFBa0I7QUFDeEIsZ0JBQVEsU0FBUyxlQUFlLE1BQU07QUFBQSxNQUN4QztBQUFBLElBQ0Y7QUFDQSxhQUFTLGNBQWMsUUFBUTtBQUM3QixVQUFJLFFBQVEsT0FBTztBQUNuQixZQUFNLGlCQUFpQixNQUFNLFdBQVcsTUFBTSxRQUFRLE1BQU0sS0FBSztBQUNqRSxVQUFJLENBQUMsTUFBTSxjQUFjLE1BQU0sVUFBVSxNQUFNLFFBQVE7QUFDckQsZUFBTyxLQUFLLFVBQVU7QUFDdEIsY0FBTSxrQkFBa0I7QUFBQSxNQUMxQjtBQVFBLFlBQU0sZUFBZSxDQUFDLE1BQU0sV0FBVyxDQUFDLE1BQU0sU0FBUyxNQUFNLFVBQVUsTUFBTTtBQUM3RSxXQUFLLE1BQU07QUFBQSxJQUNiO0FBUUEsYUFBUyxjQUFjLFFBQVEsT0FBTztBQUNwQyxVQUFJLENBQUMsTUFBTSxhQUFhO0FBQ3RCLGNBQU0sY0FBYztBQUNwQixnQkFBUSxTQUFTLGdCQUFnQixRQUFRLEtBQUs7QUFBQSxNQUNoRDtBQUFBLElBQ0Y7QUFDQSxhQUFTLGVBQWUsUUFBUSxPQUFPO0FBd0JyQyxhQUFPLENBQUMsTUFBTSxXQUFXLENBQUMsTUFBTSxVQUFVLE1BQU0sU0FBUyxNQUFNLGlCQUFpQixNQUFNLFdBQVcsTUFBTSxXQUFXLElBQUk7QUFDcEgsWUFBSSxNQUFNLE1BQU07QUFDaEIsY0FBTSxzQkFBc0I7QUFDNUIsZUFBTyxLQUFLLENBQUM7QUFDYixZQUFJLFFBQVEsTUFBTTtBQUVoQjtBQUFBLE1BQ0o7QUFDQSxZQUFNLGNBQWM7QUFBQSxJQUN0QjtBQU1BLGFBQVMsVUFBVSxRQUFRLFNBQVUsR0FBRztBQUN0QyxxQkFBZSxNQUFNLElBQUksMkJBQTJCLFNBQVMsQ0FBQztBQUFBLElBQ2hFO0FBQ0EsYUFBUyxVQUFVLE9BQU8sU0FBVSxNQUFNLFVBQVU7QUFDbEQsVUFBSSxNQUFNO0FBQ1YsVUFBSSxRQUFRLEtBQUs7QUFDakIsY0FBUSxNQUFNLFlBQVk7QUFBQSxRQUN4QixLQUFLO0FBQ0gsZ0JBQU0sUUFBUTtBQUNkO0FBQUEsUUFDRixLQUFLO0FBQ0gsZ0JBQU0sUUFBUSxDQUFDLE1BQU0sT0FBTyxJQUFJO0FBQ2hDO0FBQUEsUUFDRjtBQUNFLGdCQUFNLE1BQU0sS0FBSyxJQUFJO0FBQ3JCO0FBQUEsTUFDSjtBQUNBLFlBQU0sY0FBYztBQUNwQixZQUFNLHlCQUF5QixNQUFNLFlBQVksUUFBUTtBQUN6RCxVQUFJLFNBQVMsQ0FBQyxZQUFZLFNBQVMsUUFBUSxVQUFVLFNBQVMsUUFBUSxVQUFVLFNBQVMsUUFBUTtBQUNqRyxVQUFJLFFBQVEsUUFBUSxRQUFRO0FBQzVCLFVBQUksTUFBTTtBQUFZLGdCQUFRLFNBQVMsS0FBSztBQUFBO0FBQU8sWUFBSSxLQUFLLE9BQU8sS0FBSztBQUN4RSxXQUFLLEdBQUcsVUFBVSxRQUFRO0FBQzFCLGVBQVMsU0FBUyxVQUFVLFlBQVk7QUFDdEMsY0FBTSxVQUFVO0FBQ2hCLFlBQUksYUFBYSxLQUFLO0FBQ3BCLGNBQUksY0FBYyxXQUFXLGVBQWUsT0FBTztBQUNqRCx1QkFBVyxhQUFhO0FBQ3hCLG9CQUFRO0FBQUEsVUFDVjtBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBQ0EsZUFBUyxRQUFRO0FBQ2YsY0FBTSxPQUFPO0FBQ2IsYUFBSyxJQUFJO0FBQUEsTUFDWDtBQU1BLFVBQUksVUFBVSxZQUFZLEdBQUc7QUFDN0IsV0FBSyxHQUFHLFNBQVMsT0FBTztBQUN4QixVQUFJLFlBQVk7QUFDaEIsZUFBUyxVQUFVO0FBQ2pCLGNBQU0sU0FBUztBQUVmLGFBQUssZUFBZSxTQUFTLE9BQU87QUFDcEMsYUFBSyxlQUFlLFVBQVUsUUFBUTtBQUN0QyxhQUFLLGVBQWUsU0FBUyxPQUFPO0FBQ3BDLGFBQUssZUFBZSxTQUFTLE9BQU87QUFDcEMsYUFBSyxlQUFlLFVBQVUsUUFBUTtBQUN0QyxZQUFJLGVBQWUsT0FBTyxLQUFLO0FBQy9CLFlBQUksZUFBZSxPQUFPLE1BQU07QUFDaEMsWUFBSSxlQUFlLFFBQVEsTUFBTTtBQUNqQyxvQkFBWTtBQU9aLFlBQUksTUFBTSxlQUFlLENBQUMsS0FBSyxrQkFBa0IsS0FBSyxlQUFlO0FBQVksa0JBQVE7QUFBQSxNQUMzRjtBQUNBLFVBQUksR0FBRyxRQUFRLE1BQU07QUFDckIsZUFBUyxPQUFPLE9BQU87QUFDckIsY0FBTSxRQUFRO0FBQ2QsWUFBSSxNQUFNLEtBQUssTUFBTSxLQUFLO0FBQzFCLGNBQU0sY0FBYyxHQUFHO0FBQ3ZCLFlBQUksUUFBUSxPQUFPO0FBS2pCLGVBQUssTUFBTSxlQUFlLEtBQUssTUFBTSxVQUFVLFFBQVEsTUFBTSxhQUFhLEtBQUssUUFBUSxNQUFNLE9BQU8sSUFBSSxNQUFNLE9BQU8sQ0FBQyxXQUFXO0FBQy9ILGtCQUFNLCtCQUErQixNQUFNLFVBQVU7QUFDckQsa0JBQU07QUFBQSxVQUNSO0FBQ0EsY0FBSSxNQUFNO0FBQUEsUUFDWjtBQUFBLE1BQ0Y7QUFJQSxlQUFTLFFBQVEsSUFBSTtBQUNuQixjQUFNLFdBQVcsRUFBRTtBQUNuQixlQUFPO0FBQ1AsYUFBSyxlQUFlLFNBQVMsT0FBTztBQUNwQyxZQUFJLGdCQUFnQixNQUFNLE9BQU8sTUFBTTtBQUFHLHlCQUFlLE1BQU0sRUFBRTtBQUFBLE1BQ25FO0FBR0Esc0JBQWdCLE1BQU0sU0FBUyxPQUFPO0FBR3RDLGVBQVMsVUFBVTtBQUNqQixhQUFLLGVBQWUsVUFBVSxRQUFRO0FBQ3RDLGVBQU87QUFBQSxNQUNUO0FBQ0EsV0FBSyxLQUFLLFNBQVMsT0FBTztBQUMxQixlQUFTLFdBQVc7QUFDbEIsY0FBTSxVQUFVO0FBQ2hCLGFBQUssZUFBZSxTQUFTLE9BQU87QUFDcEMsZUFBTztBQUFBLE1BQ1Q7QUFDQSxXQUFLLEtBQUssVUFBVSxRQUFRO0FBQzVCLGVBQVMsU0FBUztBQUNoQixjQUFNLFFBQVE7QUFDZCxZQUFJLE9BQU8sSUFBSTtBQUFBLE1BQ2pCO0FBR0EsV0FBSyxLQUFLLFFBQVEsR0FBRztBQUdyQixVQUFJLENBQUMsTUFBTSxTQUFTO0FBQ2xCLGNBQU0sYUFBYTtBQUNuQixZQUFJLE9BQU87QUFBQSxNQUNiO0FBQ0EsYUFBTztBQUFBLElBQ1Q7QUFDQSxhQUFTLFlBQVksS0FBSztBQUN4QixhQUFPLFNBQVMsNEJBQTRCO0FBQzFDLFlBQUksUUFBUSxJQUFJO0FBQ2hCLGNBQU0sZUFBZSxNQUFNLFVBQVU7QUFDckMsWUFBSSxNQUFNO0FBQVksZ0JBQU07QUFDNUIsWUFBSSxNQUFNLGVBQWUsS0FBSyxnQkFBZ0IsS0FBSyxNQUFNLEdBQUc7QUFDMUQsZ0JBQU0sVUFBVTtBQUNoQixlQUFLLEdBQUc7QUFBQSxRQUNWO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFDQSxhQUFTLFVBQVUsU0FBUyxTQUFVLE1BQU07QUFDMUMsVUFBSSxRQUFRLEtBQUs7QUFDakIsVUFBSSxhQUFhO0FBQUEsUUFDZixZQUFZO0FBQUEsTUFDZDtBQUdBLFVBQUksTUFBTSxlQUFlO0FBQUcsZUFBTztBQUduQyxVQUFJLE1BQU0sZUFBZSxHQUFHO0FBRTFCLFlBQUksUUFBUSxTQUFTLE1BQU07QUFBTyxpQkFBTztBQUN6QyxZQUFJLENBQUM7QUFBTSxpQkFBTyxNQUFNO0FBR3hCLGNBQU0sUUFBUTtBQUNkLGNBQU0sYUFBYTtBQUNuQixjQUFNLFVBQVU7QUFDaEIsWUFBSTtBQUFNLGVBQUssS0FBSyxVQUFVLE1BQU0sVUFBVTtBQUM5QyxlQUFPO0FBQUEsTUFDVDtBQUlBLFVBQUksQ0FBQyxNQUFNO0FBRVQsWUFBSSxRQUFRLE1BQU07QUFDbEIsWUFBSSxNQUFNLE1BQU07QUFDaEIsY0FBTSxRQUFRO0FBQ2QsY0FBTSxhQUFhO0FBQ25CLGNBQU0sVUFBVTtBQUNoQixpQkFBUyxJQUFJLEdBQUcsSUFBSSxLQUFLO0FBQUssZ0JBQU0sQ0FBQyxFQUFFLEtBQUssVUFBVSxNQUFNO0FBQUEsWUFDMUQsWUFBWTtBQUFBLFVBQ2QsQ0FBQztBQUNELGVBQU87QUFBQSxNQUNUO0FBR0EsVUFBSSxRQUFRLFFBQVEsTUFBTSxPQUFPLElBQUk7QUFDckMsVUFBSSxVQUFVO0FBQUksZUFBTztBQUN6QixZQUFNLE1BQU0sT0FBTyxPQUFPLENBQUM7QUFDM0IsWUFBTSxjQUFjO0FBQ3BCLFVBQUksTUFBTSxlQUFlO0FBQUcsY0FBTSxRQUFRLE1BQU0sTUFBTSxDQUFDO0FBQ3ZELFdBQUssS0FBSyxVQUFVLE1BQU0sVUFBVTtBQUNwQyxhQUFPO0FBQUEsSUFDVDtBQUlBLGFBQVMsVUFBVSxLQUFLLFNBQVUsSUFBSSxJQUFJO0FBQ3hDLFVBQUksTUFBTSxPQUFPLFVBQVUsR0FBRyxLQUFLLE1BQU0sSUFBSSxFQUFFO0FBQy9DLFVBQUksUUFBUSxLQUFLO0FBQ2pCLFVBQUksT0FBTyxRQUFRO0FBR2pCLGNBQU0sb0JBQW9CLEtBQUssY0FBYyxVQUFVLElBQUk7QUFHM0QsWUFBSSxNQUFNLFlBQVk7QUFBTyxlQUFLLE9BQU87QUFBQSxNQUMzQyxXQUFXLE9BQU8sWUFBWTtBQUM1QixZQUFJLENBQUMsTUFBTSxjQUFjLENBQUMsTUFBTSxtQkFBbUI7QUFDakQsZ0JBQU0sb0JBQW9CLE1BQU0sZUFBZTtBQUMvQyxnQkFBTSxVQUFVO0FBQ2hCLGdCQUFNLGtCQUFrQjtBQUN4QixnQkFBTSxlQUFlLE1BQU0sUUFBUSxNQUFNLE9BQU87QUFDaEQsY0FBSSxNQUFNLFFBQVE7QUFDaEIseUJBQWEsSUFBSTtBQUFBLFVBQ25CLFdBQVcsQ0FBQyxNQUFNLFNBQVM7QUFDekIsb0JBQVEsU0FBUyxrQkFBa0IsSUFBSTtBQUFBLFVBQ3pDO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFDQSxhQUFPO0FBQUEsSUFDVDtBQUNBLGFBQVMsVUFBVSxjQUFjLFNBQVMsVUFBVTtBQUNwRCxhQUFTLFVBQVUsaUJBQWlCLFNBQVUsSUFBSSxJQUFJO0FBQ3BELFVBQUksTUFBTSxPQUFPLFVBQVUsZUFBZSxLQUFLLE1BQU0sSUFBSSxFQUFFO0FBQzNELFVBQUksT0FBTyxZQUFZO0FBT3JCLGdCQUFRLFNBQVMseUJBQXlCLElBQUk7QUFBQSxNQUNoRDtBQUNBLGFBQU87QUFBQSxJQUNUO0FBQ0EsYUFBUyxVQUFVLHFCQUFxQixTQUFVLElBQUk7QUFDcEQsVUFBSSxNQUFNLE9BQU8sVUFBVSxtQkFBbUIsTUFBTSxNQUFNLFNBQVM7QUFDbkUsVUFBSSxPQUFPLGNBQWMsT0FBTyxRQUFXO0FBT3pDLGdCQUFRLFNBQVMseUJBQXlCLElBQUk7QUFBQSxNQUNoRDtBQUNBLGFBQU87QUFBQSxJQUNUO0FBQ0EsYUFBUyx3QkFBd0JFLE9BQU07QUFDckMsVUFBSSxRQUFRQSxNQUFLO0FBQ2pCLFlBQU0sb0JBQW9CQSxNQUFLLGNBQWMsVUFBVSxJQUFJO0FBQzNELFVBQUksTUFBTSxtQkFBbUIsQ0FBQyxNQUFNLFFBQVE7QUFHMUMsY0FBTSxVQUFVO0FBQUEsTUFHbEIsV0FBV0EsTUFBSyxjQUFjLE1BQU0sSUFBSSxHQUFHO0FBQ3pDLFFBQUFBLE1BQUssT0FBTztBQUFBLE1BQ2Q7QUFBQSxJQUNGO0FBQ0EsYUFBUyxpQkFBaUJBLE9BQU07QUFDOUIsWUFBTSwwQkFBMEI7QUFDaEMsTUFBQUEsTUFBSyxLQUFLLENBQUM7QUFBQSxJQUNiO0FBSUEsYUFBUyxVQUFVLFNBQVMsV0FBWTtBQUN0QyxVQUFJLFFBQVEsS0FBSztBQUNqQixVQUFJLENBQUMsTUFBTSxTQUFTO0FBQ2xCLGNBQU0sUUFBUTtBQUlkLGNBQU0sVUFBVSxDQUFDLE1BQU07QUFDdkIsZUFBTyxNQUFNLEtBQUs7QUFBQSxNQUNwQjtBQUNBLFlBQU0sU0FBUztBQUNmLGFBQU87QUFBQSxJQUNUO0FBQ0EsYUFBUyxPQUFPLFFBQVEsT0FBTztBQUM3QixVQUFJLENBQUMsTUFBTSxpQkFBaUI7QUFDMUIsY0FBTSxrQkFBa0I7QUFDeEIsZ0JBQVEsU0FBUyxTQUFTLFFBQVEsS0FBSztBQUFBLE1BQ3pDO0FBQUEsSUFDRjtBQUNBLGFBQVMsUUFBUSxRQUFRLE9BQU87QUFDOUIsWUFBTSxVQUFVLE1BQU0sT0FBTztBQUM3QixVQUFJLENBQUMsTUFBTSxTQUFTO0FBQ2xCLGVBQU8sS0FBSyxDQUFDO0FBQUEsTUFDZjtBQUNBLFlBQU0sa0JBQWtCO0FBQ3hCLGFBQU8sS0FBSyxRQUFRO0FBQ3BCLFdBQUssTUFBTTtBQUNYLFVBQUksTUFBTSxXQUFXLENBQUMsTUFBTTtBQUFTLGVBQU8sS0FBSyxDQUFDO0FBQUEsSUFDcEQ7QUFDQSxhQUFTLFVBQVUsUUFBUSxXQUFZO0FBQ3JDLFlBQU0seUJBQXlCLEtBQUssZUFBZSxPQUFPO0FBQzFELFVBQUksS0FBSyxlQUFlLFlBQVksT0FBTztBQUN6QyxjQUFNLE9BQU87QUFDYixhQUFLLGVBQWUsVUFBVTtBQUM5QixhQUFLLEtBQUssT0FBTztBQUFBLE1BQ25CO0FBQ0EsV0FBSyxlQUFlLFNBQVM7QUFDN0IsYUFBTztBQUFBLElBQ1Q7QUFDQSxhQUFTLEtBQUssUUFBUTtBQUNwQixVQUFJLFFBQVEsT0FBTztBQUNuQixZQUFNLFFBQVEsTUFBTSxPQUFPO0FBQzNCLGFBQU8sTUFBTSxXQUFXLE9BQU8sS0FBSyxNQUFNO0FBQUs7QUFBQSxJQUNqRDtBQUtBLGFBQVMsVUFBVSxPQUFPLFNBQVUsUUFBUTtBQUMxQyxVQUFJLFFBQVE7QUFDWixVQUFJLFFBQVEsS0FBSztBQUNqQixVQUFJLFNBQVM7QUFDYixhQUFPLEdBQUcsT0FBTyxXQUFZO0FBQzNCLGNBQU0sYUFBYTtBQUNuQixZQUFJLE1BQU0sV0FBVyxDQUFDLE1BQU0sT0FBTztBQUNqQyxjQUFJLFFBQVEsTUFBTSxRQUFRLElBQUk7QUFDOUIsY0FBSSxTQUFTLE1BQU07QUFBUSxrQkFBTSxLQUFLLEtBQUs7QUFBQSxRQUM3QztBQUNBLGNBQU0sS0FBSyxJQUFJO0FBQUEsTUFDakIsQ0FBQztBQUNELGFBQU8sR0FBRyxRQUFRLFNBQVUsT0FBTztBQUNqQyxjQUFNLGNBQWM7QUFDcEIsWUFBSSxNQUFNO0FBQVMsa0JBQVEsTUFBTSxRQUFRLE1BQU0sS0FBSztBQUdwRCxZQUFJLE1BQU0sZUFBZSxVQUFVLFFBQVEsVUFBVTtBQUFZO0FBQUEsaUJBQWdCLENBQUMsTUFBTSxlQUFlLENBQUMsU0FBUyxDQUFDLE1BQU07QUFBUztBQUNqSSxZQUFJLE1BQU0sTUFBTSxLQUFLLEtBQUs7QUFDMUIsWUFBSSxDQUFDLEtBQUs7QUFDUixtQkFBUztBQUNULGlCQUFPLE1BQU07QUFBQSxRQUNmO0FBQUEsTUFDRixDQUFDO0FBSUQsZUFBUyxLQUFLLFFBQVE7QUFDcEIsWUFBSSxLQUFLLENBQUMsTUFBTSxVQUFhLE9BQU8sT0FBTyxDQUFDLE1BQU0sWUFBWTtBQUM1RCxlQUFLLENBQUMsSUFBSSxTQUFTLFdBQVcsUUFBUTtBQUNwQyxtQkFBTyxTQUFTLDJCQUEyQjtBQUN6QyxxQkFBTyxPQUFPLE1BQU0sRUFBRSxNQUFNLFFBQVEsU0FBUztBQUFBLFlBQy9DO0FBQUEsVUFDRixFQUFFLENBQUM7QUFBQSxRQUNMO0FBQUEsTUFDRjtBQUdBLGVBQVMsSUFBSSxHQUFHLElBQUksYUFBYSxRQUFRLEtBQUs7QUFDNUMsZUFBTyxHQUFHLGFBQWEsQ0FBQyxHQUFHLEtBQUssS0FBSyxLQUFLLE1BQU0sYUFBYSxDQUFDLENBQUMsQ0FBQztBQUFBLE1BQ2xFO0FBSUEsV0FBSyxRQUFRLFNBQVVDLElBQUc7QUFDeEIsY0FBTSxpQkFBaUJBLEVBQUM7QUFDeEIsWUFBSSxRQUFRO0FBQ1YsbUJBQVM7QUFDVCxpQkFBTyxPQUFPO0FBQUEsUUFDaEI7QUFBQSxNQUNGO0FBQ0EsYUFBTztBQUFBLElBQ1Q7QUFDQSxRQUFJLE9BQU8sV0FBVyxZQUFZO0FBQ2hDLGVBQVMsVUFBVSxPQUFPLGFBQWEsSUFBSSxXQUFZO0FBQ3JELFlBQUksc0NBQXNDLFFBQVc7QUFDbkQsOENBQW9DO0FBQUEsUUFDdEM7QUFDQSxlQUFPLGtDQUFrQyxJQUFJO0FBQUEsTUFDL0M7QUFBQSxJQUNGO0FBQ0EsV0FBTyxlQUFlLFNBQVMsV0FBVyx5QkFBeUI7QUFBQTtBQUFBO0FBQUE7QUFBQSxNQUlqRSxZQUFZO0FBQUEsTUFDWixLQUFLLFNBQVMsTUFBTTtBQUNsQixlQUFPLEtBQUssZUFBZTtBQUFBLE1BQzdCO0FBQUEsSUFDRixDQUFDO0FBQ0QsV0FBTyxlQUFlLFNBQVMsV0FBVyxrQkFBa0I7QUFBQTtBQUFBO0FBQUE7QUFBQSxNQUkxRCxZQUFZO0FBQUEsTUFDWixLQUFLLFNBQVMsTUFBTTtBQUNsQixlQUFPLEtBQUssa0JBQWtCLEtBQUssZUFBZTtBQUFBLE1BQ3BEO0FBQUEsSUFDRixDQUFDO0FBQ0QsV0FBTyxlQUFlLFNBQVMsV0FBVyxtQkFBbUI7QUFBQTtBQUFBO0FBQUE7QUFBQSxNQUkzRCxZQUFZO0FBQUEsTUFDWixLQUFLLFNBQVMsTUFBTTtBQUNsQixlQUFPLEtBQUssZUFBZTtBQUFBLE1BQzdCO0FBQUEsTUFDQSxLQUFLLFNBQVMsSUFBSSxPQUFPO0FBQ3ZCLFlBQUksS0FBSyxnQkFBZ0I7QUFDdkIsZUFBSyxlQUFlLFVBQVU7QUFBQSxRQUNoQztBQUFBLE1BQ0Y7QUFBQSxJQUNGLENBQUM7QUFHRCxhQUFTLFlBQVk7QUFDckIsV0FBTyxlQUFlLFNBQVMsV0FBVyxrQkFBa0I7QUFBQTtBQUFBO0FBQUE7QUFBQSxNQUkxRCxZQUFZO0FBQUEsTUFDWixLQUFLLFNBQVMsTUFBTTtBQUNsQixlQUFPLEtBQUssZUFBZTtBQUFBLE1BQzdCO0FBQUEsSUFDRixDQUFDO0FBTUQsYUFBUyxTQUFTLEdBQUcsT0FBTztBQUUxQixVQUFJLE1BQU0sV0FBVztBQUFHLGVBQU87QUFDL0IsVUFBSTtBQUNKLFVBQUksTUFBTTtBQUFZLGNBQU0sTUFBTSxPQUFPLE1BQU07QUFBQSxlQUFXLENBQUMsS0FBSyxLQUFLLE1BQU0sUUFBUTtBQUVqRixZQUFJLE1BQU07QUFBUyxnQkFBTSxNQUFNLE9BQU8sS0FBSyxFQUFFO0FBQUEsaUJBQVcsTUFBTSxPQUFPLFdBQVc7QUFBRyxnQkFBTSxNQUFNLE9BQU8sTUFBTTtBQUFBO0FBQU8sZ0JBQU0sTUFBTSxPQUFPLE9BQU8sTUFBTSxNQUFNO0FBQ3pKLGNBQU0sT0FBTyxNQUFNO0FBQUEsTUFDckIsT0FBTztBQUVMLGNBQU0sTUFBTSxPQUFPLFFBQVEsR0FBRyxNQUFNLE9BQU87QUFBQSxNQUM3QztBQUNBLGFBQU87QUFBQSxJQUNUO0FBQ0EsYUFBUyxZQUFZLFFBQVE7QUFDM0IsVUFBSSxRQUFRLE9BQU87QUFDbkIsWUFBTSxlQUFlLE1BQU0sVUFBVTtBQUNyQyxVQUFJLENBQUMsTUFBTSxZQUFZO0FBQ3JCLGNBQU0sUUFBUTtBQUNkLGdCQUFRLFNBQVMsZUFBZSxPQUFPLE1BQU07QUFBQSxNQUMvQztBQUFBLElBQ0Y7QUFDQSxhQUFTLGNBQWMsT0FBTyxRQUFRO0FBQ3BDLFlBQU0saUJBQWlCLE1BQU0sWUFBWSxNQUFNLE1BQU07QUFHckQsVUFBSSxDQUFDLE1BQU0sY0FBYyxNQUFNLFdBQVcsR0FBRztBQUMzQyxjQUFNLGFBQWE7QUFDbkIsZUFBTyxXQUFXO0FBQ2xCLGVBQU8sS0FBSyxLQUFLO0FBQ2pCLFlBQUksTUFBTSxhQUFhO0FBR3JCLGNBQUksU0FBUyxPQUFPO0FBQ3BCLGNBQUksQ0FBQyxVQUFVLE9BQU8sZUFBZSxPQUFPLFVBQVU7QUFDcEQsbUJBQU8sUUFBUTtBQUFBLFVBQ2pCO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQ0EsUUFBSSxPQUFPLFdBQVcsWUFBWTtBQUNoQyxlQUFTLE9BQU8sU0FBVSxVQUFVLE1BQU07QUFDeEMsWUFBSSxTQUFTLFFBQVc7QUFDdEIsaUJBQU87QUFBQSxRQUNUO0FBQ0EsZUFBTyxLQUFLLFVBQVUsVUFBVSxJQUFJO0FBQUEsTUFDdEM7QUFBQSxJQUNGO0FBQ0EsYUFBUyxRQUFRLElBQUksR0FBRztBQUN0QixlQUFTLElBQUksR0FBRyxJQUFJLEdBQUcsUUFBUSxJQUFJLEdBQUcsS0FBSztBQUN6QyxZQUFJLEdBQUcsQ0FBQyxNQUFNO0FBQUcsaUJBQU87QUFBQSxNQUMxQjtBQUNBLGFBQU87QUFBQSxJQUNUO0FBQUE7QUFBQTs7O0FDbGdDQTtBQUFBLDRHQUFBQyxTQUFBO0FBQUE7QUFpRUEsSUFBQUEsUUFBTyxVQUFVO0FBQ2pCLFFBQUksaUJBQWlCLGlCQUFxQjtBQUExQyxRQUNFLDZCQUE2QixlQUFlO0FBRDlDLFFBRUUsd0JBQXdCLGVBQWU7QUFGekMsUUFHRSxxQ0FBcUMsZUFBZTtBQUh0RCxRQUlFLDhCQUE4QixlQUFlO0FBQy9DLFFBQUksU0FBUztBQUNiLHVCQUFvQixXQUFXLE1BQU07QUFDckMsYUFBUyxlQUFlLElBQUksTUFBTTtBQUNoQyxVQUFJLEtBQUssS0FBSztBQUNkLFNBQUcsZUFBZTtBQUNsQixVQUFJLEtBQUssR0FBRztBQUNaLFVBQUksT0FBTyxNQUFNO0FBQ2YsZUFBTyxLQUFLLEtBQUssU0FBUyxJQUFJLHNCQUFzQixDQUFDO0FBQUEsTUFDdkQ7QUFDQSxTQUFHLGFBQWE7QUFDaEIsU0FBRyxVQUFVO0FBQ2IsVUFBSSxRQUFRO0FBRVYsYUFBSyxLQUFLLElBQUk7QUFDaEIsU0FBRyxFQUFFO0FBQ0wsVUFBSSxLQUFLLEtBQUs7QUFDZCxTQUFHLFVBQVU7QUFDYixVQUFJLEdBQUcsZ0JBQWdCLEdBQUcsU0FBUyxHQUFHLGVBQWU7QUFDbkQsYUFBSyxNQUFNLEdBQUcsYUFBYTtBQUFBLE1BQzdCO0FBQUEsSUFDRjtBQUNBLGFBQVMsVUFBVSxTQUFTO0FBQzFCLFVBQUksRUFBRSxnQkFBZ0I7QUFBWSxlQUFPLElBQUksVUFBVSxPQUFPO0FBQzlELGFBQU8sS0FBSyxNQUFNLE9BQU87QUFDekIsV0FBSyxrQkFBa0I7QUFBQSxRQUNyQixnQkFBZ0IsZUFBZSxLQUFLLElBQUk7QUFBQSxRQUN4QyxlQUFlO0FBQUEsUUFDZixjQUFjO0FBQUEsUUFDZCxTQUFTO0FBQUEsUUFDVCxZQUFZO0FBQUEsUUFDWixlQUFlO0FBQUEsTUFDakI7QUFHQSxXQUFLLGVBQWUsZUFBZTtBQUtuQyxXQUFLLGVBQWUsT0FBTztBQUMzQixVQUFJLFNBQVM7QUFDWCxZQUFJLE9BQU8sUUFBUSxjQUFjO0FBQVksZUFBSyxhQUFhLFFBQVE7QUFDdkUsWUFBSSxPQUFPLFFBQVEsVUFBVTtBQUFZLGVBQUssU0FBUyxRQUFRO0FBQUEsTUFDakU7QUFHQSxXQUFLLEdBQUcsYUFBYSxTQUFTO0FBQUEsSUFDaEM7QUFDQSxhQUFTLFlBQVk7QUFDbkIsVUFBSSxRQUFRO0FBQ1osVUFBSSxPQUFPLEtBQUssV0FBVyxjQUFjLENBQUMsS0FBSyxlQUFlLFdBQVc7QUFDdkUsYUFBSyxPQUFPLFNBQVUsSUFBSSxNQUFNO0FBQzlCLGVBQUssT0FBTyxJQUFJLElBQUk7QUFBQSxRQUN0QixDQUFDO0FBQUEsTUFDSCxPQUFPO0FBQ0wsYUFBSyxNQUFNLE1BQU0sSUFBSTtBQUFBLE1BQ3ZCO0FBQUEsSUFDRjtBQUNBLGNBQVUsVUFBVSxPQUFPLFNBQVUsT0FBTyxVQUFVO0FBQ3BELFdBQUssZ0JBQWdCLGdCQUFnQjtBQUNyQyxhQUFPLE9BQU8sVUFBVSxLQUFLLEtBQUssTUFBTSxPQUFPLFFBQVE7QUFBQSxJQUN6RDtBQVlBLGNBQVUsVUFBVSxhQUFhLFNBQVUsT0FBTyxVQUFVLElBQUk7QUFDOUQsU0FBRyxJQUFJLDJCQUEyQixjQUFjLENBQUM7QUFBQSxJQUNuRDtBQUNBLGNBQVUsVUFBVSxTQUFTLFNBQVUsT0FBTyxVQUFVLElBQUk7QUFDMUQsVUFBSSxLQUFLLEtBQUs7QUFDZCxTQUFHLFVBQVU7QUFDYixTQUFHLGFBQWE7QUFDaEIsU0FBRyxnQkFBZ0I7QUFDbkIsVUFBSSxDQUFDLEdBQUcsY0FBYztBQUNwQixZQUFJLEtBQUssS0FBSztBQUNkLFlBQUksR0FBRyxpQkFBaUIsR0FBRyxnQkFBZ0IsR0FBRyxTQUFTLEdBQUc7QUFBZSxlQUFLLE1BQU0sR0FBRyxhQUFhO0FBQUEsTUFDdEc7QUFBQSxJQUNGO0FBS0EsY0FBVSxVQUFVLFFBQVEsU0FBVSxHQUFHO0FBQ3ZDLFVBQUksS0FBSyxLQUFLO0FBQ2QsVUFBSSxHQUFHLGVBQWUsUUFBUSxDQUFDLEdBQUcsY0FBYztBQUM5QyxXQUFHLGVBQWU7QUFDbEIsYUFBSyxXQUFXLEdBQUcsWUFBWSxHQUFHLGVBQWUsR0FBRyxjQUFjO0FBQUEsTUFDcEUsT0FBTztBQUdMLFdBQUcsZ0JBQWdCO0FBQUEsTUFDckI7QUFBQSxJQUNGO0FBQ0EsY0FBVSxVQUFVLFdBQVcsU0FBVSxLQUFLLElBQUk7QUFDaEQsYUFBTyxVQUFVLFNBQVMsS0FBSyxNQUFNLEtBQUssU0FBVSxNQUFNO0FBQ3hELFdBQUcsSUFBSTtBQUFBLE1BQ1QsQ0FBQztBQUFBLElBQ0g7QUFDQSxhQUFTLEtBQUssUUFBUSxJQUFJLE1BQU07QUFDOUIsVUFBSTtBQUFJLGVBQU8sT0FBTyxLQUFLLFNBQVMsRUFBRTtBQUN0QyxVQUFJLFFBQVE7QUFFVixlQUFPLEtBQUssSUFBSTtBQUtsQixVQUFJLE9BQU8sZUFBZTtBQUFRLGNBQU0sSUFBSSw0QkFBNEI7QUFDeEUsVUFBSSxPQUFPLGdCQUFnQjtBQUFjLGNBQU0sSUFBSSxtQ0FBbUM7QUFDdEYsYUFBTyxPQUFPLEtBQUssSUFBSTtBQUFBLElBQ3pCO0FBQUE7QUFBQTs7O0FDN0xBO0FBQUEsOEdBQUFDLFNBQUE7QUFBQTtBQTJCQSxJQUFBQSxRQUFPLFVBQVU7QUFDakIsUUFBSSxZQUFZO0FBQ2hCLHVCQUFvQixhQUFhLFNBQVM7QUFDMUMsYUFBUyxZQUFZLFNBQVM7QUFDNUIsVUFBSSxFQUFFLGdCQUFnQjtBQUFjLGVBQU8sSUFBSSxZQUFZLE9BQU87QUFDbEUsZ0JBQVUsS0FBSyxNQUFNLE9BQU87QUFBQSxJQUM5QjtBQUNBLGdCQUFZLFVBQVUsYUFBYSxTQUFVLE9BQU8sVUFBVSxJQUFJO0FBQ2hFLFNBQUcsTUFBTSxLQUFLO0FBQUEsSUFDaEI7QUFBQTtBQUFBOzs7QUNwQ0E7QUFBQSxvSEFBQUMsU0FBQTtBQUFBO0FBS0EsUUFBSTtBQUNKLGFBQVMsS0FBSyxVQUFVO0FBQ3RCLFVBQUksU0FBUztBQUNiLGFBQU8sV0FBWTtBQUNqQixZQUFJO0FBQVE7QUFDWixpQkFBUztBQUNULGlCQUFTLE1BQU0sUUFBUSxTQUFTO0FBQUEsTUFDbEM7QUFBQSxJQUNGO0FBQ0EsUUFBSSxpQkFBaUIsaUJBQTJCO0FBQWhELFFBQ0UsbUJBQW1CLGVBQWU7QUFEcEMsUUFFRSx1QkFBdUIsZUFBZTtBQUN4QyxhQUFTLEtBQUssS0FBSztBQUVqQixVQUFJO0FBQUssY0FBTTtBQUFBLElBQ2pCO0FBQ0EsYUFBUyxVQUFVLFFBQVE7QUFDekIsYUFBTyxPQUFPLGFBQWEsT0FBTyxPQUFPLFVBQVU7QUFBQSxJQUNyRDtBQUNBLGFBQVMsVUFBVSxRQUFRLFNBQVMsU0FBUyxVQUFVO0FBQ3JELGlCQUFXLEtBQUssUUFBUTtBQUN4QixVQUFJLFNBQVM7QUFDYixhQUFPLEdBQUcsU0FBUyxXQUFZO0FBQzdCLGlCQUFTO0FBQUEsTUFDWCxDQUFDO0FBQ0QsVUFBSSxRQUFRO0FBQVcsY0FBTTtBQUM3QixVQUFJLFFBQVE7QUFBQSxRQUNWLFVBQVU7QUFBQSxRQUNWLFVBQVU7QUFBQSxNQUNaLEdBQUcsU0FBVSxLQUFLO0FBQ2hCLFlBQUk7QUFBSyxpQkFBTyxTQUFTLEdBQUc7QUFDNUIsaUJBQVM7QUFDVCxpQkFBUztBQUFBLE1BQ1gsQ0FBQztBQUNELFVBQUksWUFBWTtBQUNoQixhQUFPLFNBQVUsS0FBSztBQUNwQixZQUFJO0FBQVE7QUFDWixZQUFJO0FBQVc7QUFDZixvQkFBWTtBQUdaLFlBQUksVUFBVSxNQUFNO0FBQUcsaUJBQU8sT0FBTyxNQUFNO0FBQzNDLFlBQUksT0FBTyxPQUFPLFlBQVk7QUFBWSxpQkFBTyxPQUFPLFFBQVE7QUFDaEUsaUJBQVMsT0FBTyxJQUFJLHFCQUFxQixNQUFNLENBQUM7QUFBQSxNQUNsRDtBQUFBLElBQ0Y7QUFDQSxhQUFTLEtBQUssSUFBSTtBQUNoQixTQUFHO0FBQUEsSUFDTDtBQUNBLGFBQVMsS0FBSyxNQUFNLElBQUk7QUFDdEIsYUFBTyxLQUFLLEtBQUssRUFBRTtBQUFBLElBQ3JCO0FBQ0EsYUFBUyxZQUFZLFNBQVM7QUFDNUIsVUFBSSxDQUFDLFFBQVE7QUFBUSxlQUFPO0FBQzVCLFVBQUksT0FBTyxRQUFRLFFBQVEsU0FBUyxDQUFDLE1BQU07QUFBWSxlQUFPO0FBQzlELGFBQU8sUUFBUSxJQUFJO0FBQUEsSUFDckI7QUFDQSxhQUFTLFdBQVc7QUFDbEIsZUFBUyxPQUFPLFVBQVUsUUFBUSxVQUFVLElBQUksTUFBTSxJQUFJLEdBQUcsT0FBTyxHQUFHLE9BQU8sTUFBTSxRQUFRO0FBQzFGLGdCQUFRLElBQUksSUFBSSxVQUFVLElBQUk7QUFBQSxNQUNoQztBQUNBLFVBQUksV0FBVyxZQUFZLE9BQU87QUFDbEMsVUFBSSxNQUFNLFFBQVEsUUFBUSxDQUFDLENBQUM7QUFBRyxrQkFBVSxRQUFRLENBQUM7QUFDbEQsVUFBSSxRQUFRLFNBQVMsR0FBRztBQUN0QixjQUFNLElBQUksaUJBQWlCLFNBQVM7QUFBQSxNQUN0QztBQUNBLFVBQUk7QUFDSixVQUFJLFdBQVcsUUFBUSxJQUFJLFNBQVUsUUFBUSxHQUFHO0FBQzlDLFlBQUksVUFBVSxJQUFJLFFBQVEsU0FBUztBQUNuQyxZQUFJLFVBQVUsSUFBSTtBQUNsQixlQUFPLFVBQVUsUUFBUSxTQUFTLFNBQVMsU0FBVSxLQUFLO0FBQ3hELGNBQUksQ0FBQztBQUFPLG9CQUFRO0FBQ3BCLGNBQUk7QUFBSyxxQkFBUyxRQUFRLElBQUk7QUFDOUIsY0FBSTtBQUFTO0FBQ2IsbUJBQVMsUUFBUSxJQUFJO0FBQ3JCLG1CQUFTLEtBQUs7QUFBQSxRQUNoQixDQUFDO0FBQUEsTUFDSCxDQUFDO0FBQ0QsYUFBTyxRQUFRLE9BQU8sSUFBSTtBQUFBLElBQzVCO0FBQ0EsSUFBQUEsUUFBTyxVQUFVO0FBQUE7QUFBQTs7O0FDckZqQjtBQUFBLCtGQUFBQyxTQUFBO0FBQUE7QUFBQSxRQUFJLFNBQVMsUUFBUSxRQUFRO0FBQzdCLFFBQUksUUFBUSxJQUFJLG9CQUFvQixhQUFhLFFBQVE7QUFDdkQsTUFBQUEsUUFBTyxVQUFVLE9BQU87QUFDeEIsYUFBTyxPQUFPQSxRQUFPLFNBQVMsTUFBTTtBQUNwQyxNQUFBQSxRQUFPLFFBQVEsU0FBUztBQUFBLElBQzFCLE9BQU87QUFDTCxnQkFBVUEsUUFBTyxVQUFVO0FBQzNCLGNBQVEsU0FBUyxVQUFVO0FBQzNCLGNBQVEsV0FBVztBQUNuQixjQUFRLFdBQVc7QUFDbkIsY0FBUSxTQUFTO0FBQ2pCLGNBQVEsWUFBWTtBQUNwQixjQUFRLGNBQWM7QUFDdEIsY0FBUSxXQUFXO0FBQ25CLGNBQVEsV0FBVztBQUFBLElBQ3JCO0FBQUE7QUFBQTs7O0FDZkE7QUFBQSx1RUFBQUMsU0FBQTtBQUFBO0FBRUEsUUFBTSxFQUFFLFFBQUFDLFFBQU8sSUFBSSxRQUFRLFFBQVE7QUFDbkMsUUFBTSxTQUFTLE9BQU8sSUFBSSxZQUFZO0FBRXRDLGFBQVMsV0FBWSxLQUFLO0FBQ3hCLFVBQUksRUFBRSxnQkFBZ0IsYUFBYTtBQUNqQyxlQUFPLElBQUksV0FBVyxHQUFHO0FBQUEsTUFDM0I7QUFFQSxpQkFBVyxNQUFNLEtBQUssTUFBTSxHQUFHO0FBQUEsSUFDakM7QUFFQSxlQUFXLFFBQVEsU0FBUyxNQUFPLEtBQUs7QUFDdEMsYUFBTyxlQUFlLE1BQU0sUUFBUSxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBRW5ELFdBQUssUUFBUSxDQUFDO0FBQ2QsV0FBSyxTQUFTO0FBRWQsVUFBSSxLQUFLO0FBQ1AsYUFBSyxPQUFPLEdBQUc7QUFBQSxNQUNqQjtBQUFBLElBQ0Y7QUFFQSxlQUFXLFVBQVUsT0FBTyxTQUFTLEtBQU0sS0FBSztBQUM5QyxhQUFPLElBQUksV0FBVyxHQUFHO0FBQUEsSUFDM0I7QUFFQSxlQUFXLFVBQVUsVUFBVSxTQUFTLFFBQVMsUUFBUTtBQUN2RCxVQUFJLFdBQVcsR0FBRztBQUNoQixlQUFPLENBQUMsR0FBRyxDQUFDO0FBQUEsTUFDZDtBQUVBLFVBQUksTUFBTTtBQUVWLGVBQVMsSUFBSSxHQUFHLElBQUksS0FBSyxNQUFNLFFBQVEsS0FBSztBQUMxQyxjQUFNLEtBQUssTUFBTSxLQUFLLE1BQU0sQ0FBQyxFQUFFO0FBQy9CLFlBQUksU0FBUyxNQUFNLE1BQU0sS0FBSyxNQUFNLFNBQVMsR0FBRztBQUM5QyxpQkFBTyxDQUFDLEdBQUcsU0FBUyxHQUFHO0FBQUEsUUFDekI7QUFDQSxjQUFNO0FBQUEsTUFDUjtBQUFBLElBQ0Y7QUFFQSxlQUFXLFVBQVUsaUJBQWlCLFNBQVUsVUFBVTtBQUN4RCxZQUFNLFdBQVcsU0FBUyxDQUFDO0FBQzNCLFVBQUksU0FBUyxTQUFTLENBQUM7QUFFdkIsZUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLEtBQUs7QUFDakMsa0JBQVUsS0FBSyxNQUFNLENBQUMsRUFBRTtBQUFBLE1BQzFCO0FBRUEsYUFBTztBQUFBLElBQ1Q7QUFFQSxlQUFXLFVBQVUsTUFBTSxTQUFTLElBQUssT0FBTztBQUM5QyxVQUFJLFFBQVEsS0FBSyxVQUFVLFFBQVEsR0FBRztBQUNwQyxlQUFPO0FBQUEsTUFDVDtBQUVBLFlBQU0sU0FBUyxLQUFLLFFBQVEsS0FBSztBQUVqQyxhQUFPLEtBQUssTUFBTSxPQUFPLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQUEsSUFDeEM7QUFFQSxlQUFXLFVBQVUsUUFBUSxTQUFTLE1BQU8sT0FBTyxLQUFLO0FBQ3ZELFVBQUksT0FBTyxVQUFVLFlBQVksUUFBUSxHQUFHO0FBQzFDLGlCQUFTLEtBQUs7QUFBQSxNQUNoQjtBQUVBLFVBQUksT0FBTyxRQUFRLFlBQVksTUFBTSxHQUFHO0FBQ3RDLGVBQU8sS0FBSztBQUFBLE1BQ2Q7QUFFQSxhQUFPLEtBQUssS0FBSyxNQUFNLEdBQUcsT0FBTyxHQUFHO0FBQUEsSUFDdEM7QUFFQSxlQUFXLFVBQVUsT0FBTyxTQUFTLEtBQU0sS0FBSyxVQUFVLFVBQVUsUUFBUTtBQUMxRSxVQUFJLE9BQU8sYUFBYSxZQUFZLFdBQVcsR0FBRztBQUNoRCxtQkFBVztBQUFBLE1BQ2I7QUFFQSxVQUFJLE9BQU8sV0FBVyxZQUFZLFNBQVMsS0FBSyxRQUFRO0FBQ3RELGlCQUFTLEtBQUs7QUFBQSxNQUNoQjtBQUVBLFVBQUksWUFBWSxLQUFLLFFBQVE7QUFDM0IsZUFBTyxPQUFPQSxRQUFPLE1BQU0sQ0FBQztBQUFBLE1BQzlCO0FBRUEsVUFBSSxVQUFVLEdBQUc7QUFDZixlQUFPLE9BQU9BLFFBQU8sTUFBTSxDQUFDO0FBQUEsTUFDOUI7QUFFQSxZQUFNQyxRQUFPLENBQUMsQ0FBQztBQUNmLFlBQU0sTUFBTSxLQUFLLFFBQVEsUUFBUTtBQUNqQyxZQUFNLE1BQU0sU0FBUztBQUNyQixVQUFJLFFBQVE7QUFDWixVQUFJLFNBQVVBLFNBQVEsWUFBYTtBQUNuQyxVQUFJLFFBQVEsSUFBSSxDQUFDO0FBR2pCLFVBQUksYUFBYSxLQUFLLFdBQVcsS0FBSyxRQUFRO0FBQzVDLFlBQUksQ0FBQ0EsT0FBTTtBQUVULGlCQUFPLEtBQUssTUFBTSxXQUFXLElBQ3pCLEtBQUssTUFBTSxDQUFDLElBQ1pELFFBQU8sT0FBTyxLQUFLLE9BQU8sS0FBSyxNQUFNO0FBQUEsUUFDM0M7QUFHQSxpQkFBUyxJQUFJLEdBQUcsSUFBSSxLQUFLLE1BQU0sUUFBUSxLQUFLO0FBQzFDLGVBQUssTUFBTSxDQUFDLEVBQUUsS0FBSyxLQUFLLE1BQU07QUFDOUIsb0JBQVUsS0FBSyxNQUFNLENBQUMsRUFBRTtBQUFBLFFBQzFCO0FBRUEsZUFBTztBQUFBLE1BQ1Q7QUFHQSxVQUFJLFNBQVMsS0FBSyxNQUFNLElBQUksQ0FBQyxDQUFDLEVBQUUsU0FBUyxPQUFPO0FBQzlDLGVBQU9DLFFBQ0gsS0FBSyxNQUFNLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSyxLQUFLLFVBQVUsT0FBTyxRQUFRLEtBQUssSUFDM0QsS0FBSyxNQUFNLElBQUksQ0FBQyxDQUFDLEVBQUUsTUFBTSxPQUFPLFFBQVEsS0FBSztBQUFBLE1BQ25EO0FBRUEsVUFBSSxDQUFDQSxPQUFNO0FBRVQsY0FBTUQsUUFBTyxZQUFZLEdBQUc7QUFBQSxNQUM5QjtBQUVBLGVBQVMsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLEtBQUssTUFBTSxRQUFRLEtBQUs7QUFDL0MsY0FBTSxJQUFJLEtBQUssTUFBTSxDQUFDLEVBQUUsU0FBUztBQUVqQyxZQUFJLFFBQVEsR0FBRztBQUNiLGVBQUssTUFBTSxDQUFDLEVBQUUsS0FBSyxLQUFLLFFBQVEsS0FBSztBQUNyQyxvQkFBVTtBQUFBLFFBQ1osT0FBTztBQUNMLGVBQUssTUFBTSxDQUFDLEVBQUUsS0FBSyxLQUFLLFFBQVEsT0FBTyxRQUFRLEtBQUs7QUFDcEQsb0JBQVU7QUFDVjtBQUFBLFFBQ0Y7QUFFQSxpQkFBUztBQUVULFlBQUksT0FBTztBQUNULGtCQUFRO0FBQUEsUUFDVjtBQUFBLE1BQ0Y7QUFHQSxVQUFJLElBQUksU0FBUztBQUFRLGVBQU8sSUFBSSxNQUFNLEdBQUcsTUFBTTtBQUVuRCxhQUFPO0FBQUEsSUFDVDtBQUVBLGVBQVcsVUFBVSxlQUFlLFNBQVMsYUFBYyxPQUFPLEtBQUs7QUFDckUsY0FBUSxTQUFTO0FBQ2pCLFlBQU0sT0FBTyxRQUFRLFdBQVcsS0FBSyxTQUFTO0FBRTlDLFVBQUksUUFBUSxHQUFHO0FBQ2IsaUJBQVMsS0FBSztBQUFBLE1BQ2hCO0FBRUEsVUFBSSxNQUFNLEdBQUc7QUFDWCxlQUFPLEtBQUs7QUFBQSxNQUNkO0FBRUEsVUFBSSxVQUFVLEtBQUs7QUFDakIsZUFBTyxLQUFLLEtBQUs7QUFBQSxNQUNuQjtBQUVBLFlBQU0sY0FBYyxLQUFLLFFBQVEsS0FBSztBQUN0QyxZQUFNLFlBQVksS0FBSyxRQUFRLEdBQUc7QUFDbEMsWUFBTSxVQUFVLEtBQUssTUFBTSxNQUFNLFlBQVksQ0FBQyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUM7QUFFakUsVUFBSSxVQUFVLENBQUMsTUFBTSxHQUFHO0FBQ3RCLGdCQUFRLElBQUk7QUFBQSxNQUNkLE9BQU87QUFDTCxnQkFBUSxRQUFRLFNBQVMsQ0FBQyxJQUFJLFFBQVEsUUFBUSxTQUFTLENBQUMsRUFBRSxNQUFNLEdBQUcsVUFBVSxDQUFDLENBQUM7QUFBQSxNQUNqRjtBQUVBLFVBQUksWUFBWSxDQUFDLE1BQU0sR0FBRztBQUN4QixnQkFBUSxDQUFDLElBQUksUUFBUSxDQUFDLEVBQUUsTUFBTSxZQUFZLENBQUMsQ0FBQztBQUFBLE1BQzlDO0FBRUEsYUFBTyxLQUFLLEtBQUssT0FBTztBQUFBLElBQzFCO0FBRUEsZUFBVyxVQUFVLFdBQVcsU0FBUyxTQUFVLFVBQVUsT0FBTyxLQUFLO0FBQ3ZFLGFBQU8sS0FBSyxNQUFNLE9BQU8sR0FBRyxFQUFFLFNBQVMsUUFBUTtBQUFBLElBQ2pEO0FBRUEsZUFBVyxVQUFVLFVBQVUsU0FBUyxRQUFTLE9BQU87QUFFdEQsY0FBUSxLQUFLLE1BQU0sS0FBSztBQUV4QixVQUFJLE9BQU8sTUFBTSxLQUFLLEtBQUssU0FBUztBQUFHLGVBQU87QUFFOUMsYUFBTyxLQUFLLE1BQU0sUUFBUTtBQUN4QixZQUFJLFNBQVMsS0FBSyxNQUFNLENBQUMsRUFBRSxRQUFRO0FBQ2pDLG1CQUFTLEtBQUssTUFBTSxDQUFDLEVBQUU7QUFDdkIsZUFBSyxVQUFVLEtBQUssTUFBTSxDQUFDLEVBQUU7QUFDN0IsZUFBSyxNQUFNLE1BQU07QUFBQSxRQUNuQixPQUFPO0FBQ0wsZUFBSyxNQUFNLENBQUMsSUFBSSxLQUFLLE1BQU0sQ0FBQyxFQUFFLE1BQU0sS0FBSztBQUN6QyxlQUFLLFVBQVU7QUFDZjtBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBRUEsYUFBTztBQUFBLElBQ1Q7QUFFQSxlQUFXLFVBQVUsWUFBWSxTQUFTLFlBQWE7QUFDckQsWUFBTSxPQUFPLEtBQUssS0FBSztBQUV2QixlQUFTLElBQUksR0FBRyxJQUFJLEtBQUssTUFBTSxRQUFRLEtBQUs7QUFDMUMsYUFBSyxPQUFPLEtBQUssTUFBTSxDQUFDLENBQUM7QUFBQSxNQUMzQjtBQUVBLGFBQU87QUFBQSxJQUNUO0FBRUEsZUFBVyxVQUFVLFNBQVMsU0FBUyxPQUFRLEtBQUs7QUFDbEQsVUFBSSxPQUFPLE1BQU07QUFDZixlQUFPO0FBQUEsTUFDVDtBQUVBLFVBQUksSUFBSSxRQUFRO0FBRWQsYUFBSyxjQUFjQSxRQUFPLEtBQUssSUFBSSxRQUFRLElBQUksWUFBWSxJQUFJLFVBQVUsQ0FBQztBQUFBLE1BQzVFLFdBQVcsTUFBTSxRQUFRLEdBQUcsR0FBRztBQUM3QixpQkFBUyxJQUFJLEdBQUcsSUFBSSxJQUFJLFFBQVEsS0FBSztBQUNuQyxlQUFLLE9BQU8sSUFBSSxDQUFDLENBQUM7QUFBQSxRQUNwQjtBQUFBLE1BQ0YsV0FBVyxLQUFLLGNBQWMsR0FBRyxHQUFHO0FBRWxDLGlCQUFTLElBQUksR0FBRyxJQUFJLElBQUksTUFBTSxRQUFRLEtBQUs7QUFDekMsZUFBSyxPQUFPLElBQUksTUFBTSxDQUFDLENBQUM7QUFBQSxRQUMxQjtBQUFBLE1BQ0YsT0FBTztBQUdMLFlBQUksT0FBTyxRQUFRLFVBQVU7QUFDM0IsZ0JBQU0sSUFBSSxTQUFTO0FBQUEsUUFDckI7QUFFQSxhQUFLLGNBQWNBLFFBQU8sS0FBSyxHQUFHLENBQUM7QUFBQSxNQUNyQztBQUVBLGFBQU87QUFBQSxJQUNUO0FBRUEsZUFBVyxVQUFVLGdCQUFnQixTQUFTLGFBQWMsS0FBSztBQUMvRCxXQUFLLE1BQU0sS0FBSyxHQUFHO0FBQ25CLFdBQUssVUFBVSxJQUFJO0FBQUEsSUFDckI7QUFFQSxlQUFXLFVBQVUsVUFBVSxTQUFVLFFBQVEsUUFBUSxVQUFVO0FBQ2pFLFVBQUksYUFBYSxVQUFhLE9BQU8sV0FBVyxVQUFVO0FBQ3hELG1CQUFXO0FBQ1gsaUJBQVM7QUFBQSxNQUNYO0FBRUEsVUFBSSxPQUFPLFdBQVcsY0FBYyxNQUFNLFFBQVEsTUFBTSxHQUFHO0FBQ3pELGNBQU0sSUFBSSxVQUFVLHFGQUFxRjtBQUFBLE1BQzNHLFdBQVcsT0FBTyxXQUFXLFVBQVU7QUFDckMsaUJBQVNBLFFBQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQztBQUFBLE1BQy9CLFdBQVcsT0FBTyxXQUFXLFVBQVU7QUFDckMsaUJBQVNBLFFBQU8sS0FBSyxRQUFRLFFBQVE7QUFBQSxNQUN2QyxXQUFXLEtBQUssY0FBYyxNQUFNLEdBQUc7QUFDckMsaUJBQVMsT0FBTyxNQUFNO0FBQUEsTUFDeEIsV0FBVyxNQUFNLFFBQVEsT0FBTyxNQUFNLEdBQUc7QUFDdkMsaUJBQVNBLFFBQU8sS0FBSyxPQUFPLFFBQVEsT0FBTyxZQUFZLE9BQU8sVUFBVTtBQUFBLE1BQzFFLFdBQVcsQ0FBQ0EsUUFBTyxTQUFTLE1BQU0sR0FBRztBQUNuQyxpQkFBU0EsUUFBTyxLQUFLLE1BQU07QUFBQSxNQUM3QjtBQUVBLGVBQVMsT0FBTyxVQUFVLENBQUM7QUFFM0IsVUFBSSxNQUFNLE1BQU0sR0FBRztBQUNqQixpQkFBUztBQUFBLE1BQ1g7QUFFQSxVQUFJLFNBQVMsR0FBRztBQUNkLGlCQUFTLEtBQUssU0FBUztBQUFBLE1BQ3pCO0FBRUEsVUFBSSxTQUFTLEdBQUc7QUFDZCxpQkFBUztBQUFBLE1BQ1g7QUFFQSxVQUFJLE9BQU8sV0FBVyxHQUFHO0FBQ3ZCLGVBQU8sU0FBUyxLQUFLLFNBQVMsS0FBSyxTQUFTO0FBQUEsTUFDOUM7QUFFQSxZQUFNLFdBQVcsS0FBSyxRQUFRLE1BQU07QUFDcEMsVUFBSSxVQUFVLFNBQVMsQ0FBQztBQUN4QixVQUFJLGFBQWEsU0FBUyxDQUFDO0FBRzNCLGFBQU8sVUFBVSxLQUFLLE1BQU0sUUFBUSxXQUFXO0FBQzdDLGNBQU0sT0FBTyxLQUFLLE1BQU0sT0FBTztBQUUvQixlQUFPLGFBQWEsS0FBSyxRQUFRO0FBQy9CLGdCQUFNLGtCQUFrQixLQUFLLFNBQVM7QUFFdEMsY0FBSSxtQkFBbUIsT0FBTyxRQUFRO0FBQ3BDLGtCQUFNLHFCQUFxQixLQUFLLFFBQVEsUUFBUSxVQUFVO0FBRTFELGdCQUFJLHVCQUF1QixJQUFJO0FBQzdCLHFCQUFPLEtBQUssZUFBZSxDQUFDLFNBQVMsa0JBQWtCLENBQUM7QUFBQSxZQUMxRDtBQUVBLHlCQUFhLEtBQUssU0FBUyxPQUFPLFNBQVM7QUFBQSxVQUM3QyxPQUFPO0FBQ0wsa0JBQU0sWUFBWSxLQUFLLGVBQWUsQ0FBQyxTQUFTLFVBQVUsQ0FBQztBQUUzRCxnQkFBSSxLQUFLLE9BQU8sV0FBVyxNQUFNLEdBQUc7QUFDbEMscUJBQU87QUFBQSxZQUNUO0FBRUE7QUFBQSxVQUNGO0FBQUEsUUFDRjtBQUVBLHFCQUFhO0FBQUEsTUFDZjtBQUVBLGFBQU87QUFBQSxJQUNUO0FBRUEsZUFBVyxVQUFVLFNBQVMsU0FBVSxRQUFRLFFBQVE7QUFDdEQsVUFBSSxLQUFLLFNBQVMsU0FBUyxPQUFPLFFBQVE7QUFDeEMsZUFBTztBQUFBLE1BQ1Q7QUFFQSxlQUFTLGVBQWUsR0FBRyxlQUFlLE9BQU8sUUFBUSxnQkFBZ0I7QUFDdkUsWUFBSSxLQUFLLElBQUksU0FBUyxZQUFZLE1BQU0sT0FBTyxZQUFZLEdBQUc7QUFDNUQsaUJBQU87QUFBQSxRQUNUO0FBQUEsTUFDRjtBQUNBLGFBQU87QUFBQSxJQUNUO0FBRUMsS0FBQyxXQUFZO0FBQ1osWUFBTSxVQUFVO0FBQUEsUUFDZCxjQUFjO0FBQUEsUUFDZCxjQUFjO0FBQUEsUUFDZCxhQUFhO0FBQUEsUUFDYixhQUFhO0FBQUEsUUFDYixhQUFhO0FBQUEsUUFDYixhQUFhO0FBQUEsUUFDYixjQUFjO0FBQUEsUUFDZCxjQUFjO0FBQUEsUUFDZCxhQUFhO0FBQUEsUUFDYixhQUFhO0FBQUEsUUFDYixjQUFjO0FBQUEsUUFDZCxjQUFjO0FBQUEsUUFDZCxVQUFVO0FBQUEsUUFDVixXQUFXO0FBQUEsUUFDWCxXQUFXO0FBQUEsUUFDWCxXQUFXO0FBQUEsUUFDWCxZQUFZO0FBQUEsUUFDWixZQUFZO0FBQUEsTUFDZDtBQUVBLGlCQUFXLEtBQUssU0FBUztBQUN2QixTQUFDLFNBQVVFLElBQUc7QUFDWixjQUFJLFFBQVFBLEVBQUMsTUFBTSxNQUFNO0FBQ3ZCLHVCQUFXLFVBQVVBLEVBQUMsSUFBSSxTQUFVLFFBQVEsWUFBWTtBQUN0RCxxQkFBTyxLQUFLLE1BQU0sUUFBUSxTQUFTLFVBQVUsRUFBRUEsRUFBQyxFQUFFLEdBQUcsVUFBVTtBQUFBLFlBQ2pFO0FBQUEsVUFDRixPQUFPO0FBQ0wsdUJBQVcsVUFBVUEsRUFBQyxJQUFJLFNBQVUsU0FBUyxHQUFHO0FBQzlDLHFCQUFPLEtBQUssTUFBTSxRQUFRLFNBQVMsUUFBUUEsRUFBQyxDQUFDLEVBQUVBLEVBQUMsRUFBRSxDQUFDO0FBQUEsWUFDckQ7QUFBQSxVQUNGO0FBQUEsUUFDRixHQUFFLENBQUM7QUFBQSxNQUNMO0FBQUEsSUFDRixHQUFFO0FBTUYsZUFBVyxVQUFVLGdCQUFnQixTQUFTLGNBQWUsR0FBRztBQUM5RCxhQUFPLGFBQWEsY0FBYyxXQUFXLGFBQWEsQ0FBQztBQUFBLElBQzdEO0FBRUEsZUFBVyxlQUFlLFNBQVMsYUFBYyxHQUFHO0FBQ2xELGFBQU8sS0FBSyxRQUFRLEVBQUUsTUFBTTtBQUFBLElBQzlCO0FBRUEsSUFBQUgsUUFBTyxVQUFVO0FBQUE7QUFBQTs7O0FDM1lqQjtBQUFBLCtEQUFBSSxTQUFBO0FBQUE7QUFFQSxRQUFNLGVBQWUsbUJBQTJCO0FBQ2hELFFBQU0sV0FBVztBQUNqQixRQUFNLGFBQWE7QUFFbkIsYUFBU0Msa0JBQWtCLFVBQVU7QUFDbkMsVUFBSSxFQUFFLGdCQUFnQkEsb0JBQW1CO0FBQ3ZDLGVBQU8sSUFBSUEsa0JBQWlCLFFBQVE7QUFBQSxNQUN0QztBQUVBLFVBQUksT0FBTyxhQUFhLFlBQVk7QUFDbEMsYUFBSyxZQUFZO0FBRWpCLGNBQU0sUUFBUSxTQUFTQyxPQUFPLEtBQUs7QUFDakMsY0FBSSxLQUFLLFdBQVc7QUFDbEIsaUJBQUssVUFBVSxHQUFHO0FBQ2xCLGlCQUFLLFlBQVk7QUFBQSxVQUNuQjtBQUFBLFFBQ0YsRUFBRSxLQUFLLElBQUk7QUFFWCxhQUFLLEdBQUcsUUFBUSxTQUFTLE9BQVEsS0FBSztBQUNwQyxjQUFJLEdBQUcsU0FBUyxLQUFLO0FBQUEsUUFDdkIsQ0FBQztBQUNELGFBQUssR0FBRyxVQUFVLFNBQVMsU0FBVSxLQUFLO0FBQ3hDLGNBQUksZUFBZSxTQUFTLEtBQUs7QUFBQSxRQUNuQyxDQUFDO0FBRUQsbUJBQVc7QUFBQSxNQUNiO0FBRUEsaUJBQVcsTUFBTSxLQUFLLE1BQU0sUUFBUTtBQUNwQyxtQkFBYSxLQUFLLElBQUk7QUFBQSxJQUN4QjtBQUVBLGFBQVNELG1CQUFrQixZQUFZO0FBQ3ZDLFdBQU8sT0FBT0Esa0JBQWlCLFdBQVcsV0FBVyxTQUFTO0FBRTlELElBQUFBLGtCQUFpQixVQUFVLE9BQU8sU0FBUyxLQUFNLFVBQVU7QUFDekQsYUFBTyxJQUFJQSxrQkFBaUIsUUFBUTtBQUFBLElBQ3RDO0FBRUEsSUFBQUEsa0JBQWlCLFVBQVUsU0FBUyxTQUFTLE9BQVEsS0FBSyxVQUFVLFVBQVU7QUFDNUUsV0FBSyxjQUFjLEdBQUc7QUFFdEIsVUFBSSxPQUFPLGFBQWEsWUFBWTtBQUNsQyxpQkFBUztBQUFBLE1BQ1g7QUFBQSxJQUNGO0FBRUEsSUFBQUEsa0JBQWlCLFVBQVUsUUFBUSxTQUFTLE1BQU8sTUFBTTtBQUN2RCxVQUFJLENBQUMsS0FBSyxRQUFRO0FBQ2hCLGVBQU8sS0FBSyxLQUFLLElBQUk7QUFBQSxNQUN2QjtBQUVBLGFBQU8sS0FBSyxJQUFJLE1BQU0sS0FBSyxNQUFNO0FBQ2pDLFdBQUssS0FBSyxLQUFLLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDN0IsV0FBSyxRQUFRLElBQUk7QUFBQSxJQUNuQjtBQUVBLElBQUFBLGtCQUFpQixVQUFVLE1BQU0sU0FBUyxJQUFLLE9BQU87QUFDcEQsbUJBQWEsVUFBVSxJQUFJLEtBQUssTUFBTSxLQUFLO0FBRTNDLFVBQUksS0FBSyxXQUFXO0FBQ2xCLGFBQUssVUFBVSxNQUFNLEtBQUssTUFBTSxDQUFDO0FBQ2pDLGFBQUssWUFBWTtBQUFBLE1BQ25CO0FBQUEsSUFDRjtBQUVBLElBQUFBLGtCQUFpQixVQUFVLFdBQVcsU0FBUyxTQUFVLEtBQUssSUFBSTtBQUNoRSxXQUFLLE1BQU0sU0FBUztBQUNwQixXQUFLLFNBQVM7QUFDZCxTQUFHLEdBQUc7QUFBQSxJQUNSO0FBRUEsSUFBQUEsa0JBQWlCLFVBQVUsZ0JBQWdCLFNBQVMsY0FBZSxHQUFHO0FBQ3BFLGFBQU8sYUFBYUEscUJBQW9CLGFBQWEsY0FBY0Esa0JBQWlCLGFBQWEsQ0FBQztBQUFBLElBQ3BHO0FBRUEsSUFBQUEsa0JBQWlCLGVBQWUsV0FBVztBQUUzQyxJQUFBRCxRQUFPLFVBQVVDO0FBQ2pCLElBQUFELFFBQU8sUUFBUSxtQkFBbUJDO0FBQ2xDLElBQUFELFFBQU8sUUFBUSxhQUFhO0FBQUE7QUFBQTs7O0FDbkY1QixpQkFBZ0I7OztBQ0dkLGNBQVc7OztBQ0hiLGlCQUEyQjtBQVczQixJQUFBRyxvQkFBaUI7QUFDakIsSUFBQUMsUUFBc0I7OztBQ1p0QixJQUFBQyxtQkFBOEI7QUFFOUIsa0JBQWlDOzs7QUNGakMsc0JBQWU7QUFTZixlQUFzQixxQkFDcEIsTUFDQSxhQUNlO0FBQ2YsUUFBTSxtQkFBbUIsTUFBTSxnQkFBQUMsUUFDNUIsU0FBUyxNQUFNLE9BQU8sRUFDdEIsTUFBTSxNQUFNLE1BQVM7QUFFeEIsTUFBSSxxQkFBcUIsYUFBYTtBQUNwQyxVQUFNLGdCQUFBQSxRQUFHLFVBQVUsTUFBTSxXQUFXO0FBQUEsRUFDdEM7QUFDRjs7O0FEVE8sU0FBUyxjQUFjLFFBQXlCO0FBQ3JELFFBQU0sVUFBVSxDQUFDLFlBQ2YscUJBQVEsUUFBUSxTQUFTLG1CQUFtQixHQUFHLENBQUM7QUFFbEQsU0FBTztBQUFBLElBQ0wsTUFBTSxJQUFJLEtBQWEsT0FBOEI7QUFDbkQsWUFBTUMsUUFBTyxRQUFRLEdBQUc7QUFDeEIsZ0JBQU0sZ0NBQVUscUJBQVFBLEtBQUksQ0FBQztBQUM3QixZQUFNLHFCQUFxQkEsT0FBTSxLQUFLO0FBQUEsSUFDeEM7QUFBQSxJQUNBLE1BQU0sSUFBSSxLQUEwQztBQUNsRCxZQUFNQSxRQUFPLFFBQVEsR0FBRztBQUN4QixVQUFJO0FBQ0YsZUFBTyxNQUFNLGlCQUFBQyxRQUFHLFNBQVNELE9BQU0sT0FBTztBQUFBLE1BQ3hDLFFBQVE7QUFDTixlQUFPO0FBQUEsTUFDVDtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQ0Y7OztBRGhCQSxxQkFBbUM7OztBR2JuQyxJQUFBRSxvQkFBd0M7OztBQ0R4Qyx1QkFBcUI7QUFDckIsV0FBc0I7QUFNZixTQUFTQyxlQUFjQyxPQUFzQjtBQUNsRCxTQUFZLG1CQUFjQSxLQUFJO0FBQ2hDO0FBS08sU0FBUyxnQkFBZ0JBLE9BQXNCO0FBQ3BELFNBQU8saUJBQUFDLFFBQVMsVUFBVUQsS0FBSTtBQUNoQztBQUVPLElBQU0saUJBQWlCLENBQUMsT0FBTyxRQUFRLFFBQVEsUUFBUSxRQUFRLFFBQVE7QUFHdkUsSUFBTSx5QkFBeUIsS0FBSyxlQUFlLEtBQUssR0FBRyxDQUFDOzs7QURqQjVELFNBQVMsa0JBQ2QsZ0JBQ0EsV0FFUTtBQUNSLFFBQU0sZUFBZSxrQkFBQUUsUUFBSyxTQUFTLGdCQUFnQixTQUFTO0FBRTVELFFBQU0sT0FBTyxhQUFhLE1BQU0sWUFBWSxDQUFDLEVBQUUsQ0FBQztBQUVoRCxTQUFPO0FBQ1Q7QUFFTyxTQUFTLHdCQUNkLFlBQ0EsS0FDUTtBQUNSLGFBQU8sMkJBQVEsV0FBVyxXQUFXLEdBQUcsV0FBVyxJQUFJLEdBQUcsR0FBRyxFQUFFO0FBQ2pFO0FBTU8sU0FBUyx3QkFDZCxZQUNBLFFBQ0EsS0FDUTtBQUNSLFNBQU9DO0FBQUEsUUFDTCw0QkFBUyxRQUFRLHdCQUF3QixZQUFZLEdBQUcsQ0FBQztBQUFBLEVBQzNEO0FBQ0Y7OztBRWhDQSxzQkFBMEI7QUFDMUIsSUFBQUMsZUFBdUQ7QUFLaEQsU0FBUyxpQkFBaUIsUUFBcUM7QUFDcEUsU0FBTztBQUFBLElBQ0wsT0FBTztBQUFBLElBQ1AsTUFBTTtBQUFBLElBQ04sU0FBUztBQUNQLGFBQU87QUFBQSxRQUNMLFNBQVM7QUFBQSxVQUNQLE9BQU87QUFBQSxZQUNMLHdCQUFvQjtBQUFBLGNBQ2xCLE9BQU87QUFBQSxjQUNQO0FBQUEsWUFDRjtBQUFBLFVBQ0Y7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxJQUNBLE1BQU0sVUFBVSxNQUFNLElBQUk7QUFDeEIsWUFBTSxTQUFTLE9BQU87QUFDdEIsVUFBSSxPQUFPLFlBQVksV0FBVyxVQUFVLFFBQVEsQ0FBQyxHQUFHLFNBQVMsT0FBTztBQUN0RTtBQUVGLFlBQU0sY0FBYyxHQUFHLE9BQU8sTUFBTSxHQUFHLEVBQUU7QUFDekMsWUFBTSxPQUFPLGtCQUFrQixPQUFPLGdCQUFnQixFQUFFO0FBQ3hELFlBQU0sTUFBTSxHQUFHLE9BQU8sTUFBTSxJQUFJLElBQUk7QUFDcEMsWUFBTSxhQUFhLE1BQU0sT0FBTztBQUFBLFFBQzlCO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxNQUNGO0FBQ0EsWUFBTSxFQUFFLFNBQVMsUUFBSSwyQkFBVSxVQUFVO0FBRXpDLFlBQU0sbUJBQW1CLENBQUMsZUFBdUIsU0FBdUI7QUFDdEUsaUJBQVMsaUJBQWlCLGFBQWEsRUFBRSxRQUFRLENBQUMsWUFBWTtBQUM1RCxnQkFBTSxNQUFNLFFBQVEsYUFBYSxJQUFJO0FBQ3JDLGNBQUksQ0FBQztBQUFLO0FBRVYsa0JBQUkseUJBQVcsR0FBRyxHQUFHO0FBQ25CLG9CQUFRLGFBQWEsTUFBTSxPQUFPLFNBQVMsR0FBRztBQUFBLFVBQ2hELFdBQVcsSUFBSSxXQUFXLEdBQUcsR0FBRztBQUM5QixrQkFBTSxVQUFNLDBCQUFRLHNCQUFRLEVBQUUsR0FBRyxHQUFHO0FBQ3BDLGtCQUFNLGVBQVcsdUJBQVMsT0FBTyxNQUFNLEdBQUc7QUFDMUMsb0JBQVEsYUFBYSxNQUFNLEdBQUcsT0FBTyxNQUFNLElBQUksUUFBUSxFQUFFO0FBQUEsVUFDM0Q7QUFBQSxRQUNGLENBQUM7QUFBQSxNQUNIO0FBQ0EsdUJBQWlCLHVCQUF1QixLQUFLO0FBQzdDLHVCQUFpQix3QkFBd0IsTUFBTTtBQUcvQyxZQUFNLFdBQVcsU0FBUyxjQUFjLFFBQVE7QUFDaEQsZUFBUyxNQUFNO0FBQ2YsZUFBUyxPQUFPO0FBQ2hCLGVBQVMsS0FBSyxZQUFZLFFBQVE7QUFFbEMsWUFBTSxVQUFVLFNBQVMsU0FBUztBQUNsQyxhQUFPLE9BQU8sTUFBTSxpQkFBaUIsRUFBRTtBQUN2QyxhQUFPLE9BQU8sTUFBTSxnQkFBZ0IsSUFBSTtBQUN4QyxhQUFPLE9BQU8sTUFBTSxnQkFBZ0IsT0FBTztBQUMzQyxhQUFPO0FBQUEsSUFDVDtBQUFBLEVBQ0Y7QUFDRjs7O0FDaEVPLFNBQVMsaUJBQWlCLGdCQUF3QztBQUN2RSxTQUFPO0FBQUEsSUFDTCxNQUFNO0FBQUEsSUFDTixTQUFTO0FBQ1AsVUFBSSxlQUFlLFVBQVUsUUFBUSxlQUFlLFdBQVc7QUFDN0Q7QUFFRixhQUFPO0FBQUEsUUFDTCxRQUFRO0FBQUEsVUFDTix5QkFBeUIsS0FBSyxVQUFVLEtBQUs7QUFBQSxVQUM3Qyx5QkFBeUIsS0FBSztBQUFBLFlBQzVCLGVBQWUsT0FBTztBQUFBLFVBQ3hCO0FBQUEsVUFDQSxxQkFBcUIsS0FBSyxVQUFVLGVBQWUsT0FBTyxJQUFJO0FBQUEsUUFDaEU7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFDRjs7O0FDeEJBLHNCQUFnQjs7O0FDR1QsU0FBUyxZQUNkLFNBQ0EsVUFDWTtBQUNaLFNBQU8sSUFBSSxRQUFRLENBQUMsS0FBSyxRQUFRO0FBQy9CLFVBQU0sVUFBVSxXQUFXLE1BQU07QUFDL0IsVUFBSSwyQkFBMkIsUUFBUSxJQUFJO0FBQUEsSUFDN0MsR0FBRyxRQUFRO0FBQ1gsWUFDRyxLQUFLLEdBQUcsRUFDUixNQUFNLEdBQUcsRUFDVCxRQUFRLE1BQU0sYUFBYSxPQUFPLENBQUM7QUFBQSxFQUN4QyxDQUFDO0FBQ0g7OztBRFpBLFNBQVMsWUFBOEI7QUFDckMsUUFBTUMsYUFBWSxJQUFJLFFBQWlCLENBQUMsUUFBUTtBQUM5QyxvQkFBQUMsUUFBSSxRQUFRLGNBQWMsQ0FBQyxRQUFRO0FBQ2pDLFVBQUksT0FBTyxNQUFNO0FBQ2YsWUFBSSxLQUFLO0FBQUEsTUFDWCxPQUFPO0FBQ0wsWUFBSSxJQUFJO0FBQUEsTUFDVjtBQUFBLElBQ0YsQ0FBQztBQUFBLEVBQ0gsQ0FBQztBQUNELFNBQU8sWUFBWUQsWUFBVyxHQUFHLEVBQUUsTUFBTSxNQUFNLElBQUk7QUFDckQ7QUFFQSxlQUFzQixXQUE2QjtBQUNqRCxRQUFNLFVBQVUsTUFBTSxVQUFVO0FBQ2hDLFNBQU8sQ0FBQztBQUNWO0FBTUEsZUFBc0IsWUFDcEIsS0FDQSxRQUNpQjtBQUNqQixNQUFJLFVBQWtCO0FBRXRCLE1BQUksTUFBTSxTQUFTLEdBQUc7QUFDcEIsVUFBTSxNQUFNLE1BQU0sTUFBTSxHQUFHO0FBQzNCLFFBQUksSUFBSSxTQUFTLEtBQUs7QUFDcEIsZ0JBQVUsTUFBTSxJQUFJLEtBQUs7QUFDekIsWUFBTSxPQUFPLFFBQVEsSUFBSSxLQUFLLE9BQU87QUFBQSxJQUN2QyxPQUFPO0FBQ0wsYUFBTyxPQUFPO0FBQUEsUUFDWix1QkFBdUIsR0FBRztBQUFBLE1BQzVCO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFFQSxNQUFJLENBQUM7QUFBUyxjQUFXLE1BQU0sT0FBTyxRQUFRLElBQUksR0FBRyxLQUFNO0FBQzNELE1BQUksQ0FBQztBQUNILFVBQU07QUFBQSxNQUNKLGdCQUFnQixHQUFHO0FBQUEsSUFDckI7QUFFRixTQUFPO0FBQ1Q7OztBRXhDTyxTQUFTLFNBQVMsUUFBZ0M7QUFDdkQsU0FBTztBQUFBLElBQ0wsTUFBTTtBQUFBLElBQ04sVUFBVSxJQUFJO0FBQ1osVUFBSSxHQUFHLFdBQVcsTUFBTTtBQUFHLGVBQU8sT0FBTztBQUFBLElBQzNDO0FBQUEsSUFDQSxNQUFNLEtBQUssSUFBSTtBQUNiLFVBQUksQ0FBQyxHQUFHLFdBQVcsUUFBUTtBQUFHO0FBRzlCLFlBQU0sTUFBTSxHQUFHLFFBQVEsVUFBVSxFQUFFO0FBQ25DLGFBQU8sTUFBTSxZQUFZLEtBQUssTUFBTTtBQUFBLElBQ3RDO0FBQUEsRUFDRjtBQUNGOzs7QUN2QkEsSUFBQUUsb0JBQTBDO0FBRTFDLElBQUFDLG1CQUE4QjtBQWdCdkIsU0FBUyxjQUNkLGFBQ0EsUUFDYTtBQUNiLFNBQU87QUFBQSxJQUNMLE1BQU07QUFBQSxJQUNOLE1BQU0sWUFBWSxHQUFHLFFBQVE7QUFDM0IsaUJBQVcsaUJBQWlCLFFBQVE7QUFJbEMsY0FBTSxhQUFhLFlBQVk7QUFBQSxVQUM3QixDQUFDLFVBQVUsQ0FBQyxDQUFDQyxlQUFjLE1BQU0sU0FBUyxFQUFFLFNBQVMsYUFBYTtBQUFBLFFBQ3BFO0FBQ0EsWUFBSSxjQUFjLE1BQU07QUFDdEIsaUJBQU8sT0FBTztBQUFBLFlBQ1osMkJBQTJCLGFBQWE7QUFBQSxVQUMxQztBQUNBO0FBQUEsUUFDRjtBQUdBLGNBQU0sZ0JBQWdCO0FBQUEsVUFDcEI7QUFBQSxVQUNBLE9BQU87QUFBQSxjQUNQLDJCQUFRLGFBQWE7QUFBQSxRQUN2QjtBQUNBLFlBQUksa0JBQWtCLGVBQWU7QUFDbkMsaUJBQU8sT0FBTztBQUFBLFlBQ1o7QUFBQSxZQUNBO0FBQUEsVUFDRjtBQUNBO0FBQUEsUUFDRjtBQUlBLGNBQU0saUJBQWEsMkJBQVEsT0FBTyxRQUFRLGFBQWE7QUFDdkQsY0FBTSxpQkFBYSwyQkFBUSxPQUFPLFFBQVEsYUFBYTtBQUN2RCxrQkFBTSxnQ0FBVSwyQkFBUSxVQUFVLENBQUM7QUFDbkMsY0FBTSxpQkFBQUMsUUFBRyxLQUFLLFlBQVksWUFBWSxFQUFFLFdBQVcsS0FBSyxDQUFDO0FBRXpELGNBQU0sZUFBZTtBQUFBLFVBQ25CLEdBQUcsT0FBTyxhQUFhO0FBQUEsVUFDdkIsVUFBVTtBQUFBLFFBQ1o7QUFDQSxlQUFPLE9BQU8sYUFBYTtBQUMzQixlQUFPLGFBQWEsSUFBSTtBQUFBLE1BQzFCO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFDRjs7O0FDdkVBLHNCQUErQjs7O0FDRS9CLGtCQUE0QjtBQUVyQixTQUFTLG1CQUNkLFFBQ2tDO0FBQ2xDLE1BQUksT0FBTyxZQUFZO0FBQU8sV0FBTztBQUVyQyxRQUFNLGlCQUEyQztBQUFBLElBQy9DLFVBQVUsT0FBTyxPQUFPO0FBQUEsSUFDeEIsU0FBUyxDQUFDLEVBQUUsTUFBTSxnQkFBZ0IsTUFBTSxNQUFNLENBQUM7QUFBQSxJQUMvQyxTQUFTLENBQUMsRUFBRSxTQUFTLGFBQWEsR0FBRyxFQUFFLFNBQVMsY0FBYyxDQUFDO0FBQUEsSUFDL0QsTUFBTSxPQUFPLE9BQU87QUFBQSxJQUNwQixNQUFNLENBQUMsY0FBYyxlQUFlLFNBQVMsT0FBTztBQUFBLEVBQ3REO0FBRUEsYUFBTztBQUFBLElBQ0w7QUFBQSxJQUNBLE9BQU87QUFBQSxFQUNUO0FBQ0Y7OztBRGpCQSxJQUFBQyxlQUF3QjtBQUV4QixJQUFNLHFCQUEwRDtBQUFBLEVBQzlELE9BQU87QUFBQSxFQUNQLFFBQVE7QUFBQSxFQUNSLE9BQU87QUFBQSxFQUNQLFFBQVE7QUFBQSxFQUNSLFFBQVE7QUFBQSxFQUNSLFdBQVc7QUFDYjtBQUtPLFNBQVMsU0FBUyxRQUEyQztBQUNsRSxRQUFNLFVBQVUsbUJBQW1CLE1BQU07QUFDekMsTUFBSSxZQUFZO0FBQU8sV0FBTyxDQUFDO0FBRS9CLFFBQU1DLGdCQUFXLGdDQUFlLE9BQU87QUFFdkMsU0FBTztBQUFBLElBQ0wsTUFBTTtBQUFBLElBQ04sTUFBTSxTQUFTO0FBQ2IsWUFBTUEsVUFBUyxtQkFBbUIsUUFBVyxFQUFFLEtBQUssT0FBTyxPQUFPLENBQUM7QUFBQSxJQUNyRTtBQUFBLElBQ0EsTUFBTSxVQUFVLE1BQU0sSUFBSTtBQUN4QixZQUFNLFVBQU0sc0JBQVEsRUFBRTtBQUN0QixVQUFJLG1CQUFtQixHQUFHO0FBQUcsZUFBT0EsVUFBUyxjQUFjLE1BQU0sRUFBRTtBQUFBLElBQ3JFO0FBQUEsRUFDRjtBQUNGOzs7QUVoQ0EsSUFBQUMsbUJBQWU7QUFDZixJQUFBQyxlQUF3QjtBQU1qQixTQUFTLGlCQUNkLE1BQ0EsUUFDUTtBQUNSLFFBQU0sWUFBWSxlQUFlLElBQUk7QUFDckMsUUFBTSxvQkFBb0IsS0FBSyxTQUFTO0FBRXhDLFNBQU87QUFBQSxJQUNMLE1BQU07QUFBQSxJQUNOLFVBQVUsSUFBSTtBQUdaLFlBQU0sUUFBUSxHQUFHLFFBQVEsU0FBUztBQUNsQyxVQUFJLFVBQVU7QUFBSTtBQUVsQixZQUFNLFlBQVlDLGVBQWMsR0FBRyxVQUFVLFFBQVEsVUFBVSxNQUFNLENBQUM7QUFDdEUsYUFBTyxvQkFBb0I7QUFBQSxJQUM3QjtBQUFBLElBQ0EsTUFBTSxLQUFLLElBQUk7QUFDYixVQUFJLENBQUMsR0FBRyxXQUFXLGlCQUFpQjtBQUFHO0FBRXZDLFlBQU0sWUFBWSxHQUFHLFFBQVEsbUJBQW1CLEVBQUU7QUFDbEQsWUFBTSxXQUFXLE1BQU0saUJBQUFDLFFBQUc7QUFBQSxZQUN4QjtBQUFBLFVBQ0UsT0FBTztBQUFBLFVBQ1AseUNBQXlDLElBQUk7QUFBQSxRQUMvQztBQUFBLFFBQ0E7QUFBQSxNQUNGO0FBQ0EsYUFBTyxTQUFTLFFBQVEsZ0JBQWdCLElBQUksSUFBSSxTQUFTO0FBQUEsSUFDM0Q7QUFBQSxFQUNGO0FBQ0Y7OztBQ3RDTyxTQUFTLGNBQWMsUUFBcUM7QUFDakUsU0FBTztBQUFBLElBQ0wsTUFBTTtBQUFBLElBQ04sTUFBTSxTQUFTO0FBQ2IsYUFBTztBQUFBLFFBQ0wsU0FBUztBQUFBLFVBQ1AsT0FBTztBQUFBLFlBQ0wsTUFBTSxPQUFPO0FBQUEsWUFDYixNQUFNLE9BQU87QUFBQSxZQUNiLEtBQUssT0FBTztBQUFBLFlBQ1osS0FBSyxPQUFPO0FBQUEsVUFDZDtBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFDRjs7O0FDWk8sU0FBUyxpQkFBeUI7QUFDdkMsUUFBTSxrQkFBa0I7QUFDeEIsUUFBTSwwQkFBMEIsT0FBTztBQUN2QyxTQUFPO0FBQUEsSUFDTCxNQUFNO0FBQUEsSUFDTixVQUFVLElBQUk7QUFDWixVQUFJLE9BQU87QUFBaUIsZUFBTztBQUFBLElBQ3JDO0FBQUEsSUFDQSxLQUFLLElBQUk7QUFDUCxVQUFJLE9BQU8seUJBQXlCO0FBQ2xDLGVBQU87QUFBQTtBQUFBLE1BQ1Q7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUNGO0FBRU8sSUFBTSxvQ0FBb0M7OztBQ1QxQyxTQUFTLGVBQ2QsWUFDQSxRQUNhO0FBQ2IsU0FBTztBQUFBLElBQ0wsTUFBTTtBQUFBLElBQ04sU0FBUztBQUNQLGFBQU87QUFBQSxRQUNMLE9BQU87QUFBQSxVQUNMLGVBQWU7QUFBQSxZQUNiLFFBQVE7QUFBQSxjQUNOLGdCQUFnQixNQUNkLHdCQUF3QixZQUFZLE9BQU8sUUFBUSxNQUFNO0FBQUEsWUFDN0Q7QUFBQSxVQUNGO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQUEsSUFDQSxlQUFlLEdBQUcsUUFBUTtBQUN4QixhQUFPLEtBQUssTUFBTSxFQUFFLFFBQVEsQ0FBQyxTQUFTO0FBQ3BDLFlBQUksS0FBSyxTQUFTLEtBQUs7QUFBRyxpQkFBTyxPQUFPLElBQUk7QUFBQSxNQUM5QyxDQUFDO0FBQUEsSUFDSDtBQUFBLEVBQ0Y7QUFDRjs7O0FDcENPLFNBQVMsV0FDZCxRQUNtRDtBQUNuRCxTQUFPO0FBQUEsSUFDTDtBQUFBLE1BQ0UsTUFBTTtBQUFBLE1BQ04sT0FBTyxPQUFPO0FBQUEsTUFDZCxNQUFNO0FBQUEsSUFDUjtBQUFBLElBQ0E7QUFBQSxNQUNFLE1BQU07QUFBQSxNQUNOLE9BQU8sT0FBTztBQUFBLE1BQ2QsTUFBTTtBQUFBLElBQ1I7QUFBQSxJQUNBO0FBQUEsTUFDRSxNQUFNO0FBQUEsTUFDTixPQUFPLE9BQU8sWUFBWTtBQUFBLE1BQzFCLE1BQU07QUFBQSxJQUNSO0FBQUEsSUFDQTtBQUFBLE1BQ0UsTUFBTTtBQUFBLE1BQ04sT0FBTyxPQUFPLFlBQVk7QUFBQSxNQUMxQixNQUFNO0FBQUEsSUFDUjtBQUFBLElBQ0E7QUFBQSxNQUNFLE1BQU07QUFBQSxNQUNOLE9BQU8sT0FBTyxZQUFZO0FBQUEsTUFDMUIsTUFBTTtBQUFBLElBQ1I7QUFBQSxJQUNBO0FBQUEsTUFDRSxNQUFNO0FBQUEsTUFDTixPQUFPLE9BQU8sWUFBWTtBQUFBLE1BQzFCLE1BQU07QUFBQSxJQUNSO0FBQUEsSUFDQTtBQUFBLE1BQ0UsTUFBTTtBQUFBLE1BQ04sT0FBTyxPQUFPLFlBQVk7QUFBQSxNQUMxQixNQUFNO0FBQUEsSUFDUjtBQUFBLElBQ0E7QUFBQSxNQUNFLE1BQU07QUFBQSxNQUNOLE9BQU8sT0FBTztBQUFBLE1BQ2QsTUFBTTtBQUFBLElBQ1I7QUFBQSxFQUNGO0FBQ0Y7OztBakJ0QkEsZUFBc0Isa0JBQ3BCLGNBQ0EsU0FDeUI7QUFHekIsTUFBSSxhQUF5QixDQUFDO0FBQzlCLE1BQUksYUFBYSxlQUFlLE9BQU87QUFDckMsVUFBTSxTQUFTLFVBQU0sdUJBQXVCO0FBQUEsTUFDMUMsTUFBTTtBQUFBLE1BQ04sS0FBSyxhQUFhLFFBQVEsUUFBUSxJQUFJO0FBQUEsTUFDdEMsUUFBUTtBQUFBLElBQ1YsQ0FBQztBQUNELGlCQUFhLE9BQU8sVUFBVSxDQUFDO0FBQUEsRUFDakM7QUFJQSxRQUFNLGVBQWUsa0JBQWtCLGNBQWMsVUFBVTtBQUkvRCxRQUFNLFFBQVEsYUFBYSxTQUFTO0FBQ3BDLFFBQU0sU0FBUyxhQUFhLFVBQVUsZUFBQUM7QUFDdEMsTUFBSTtBQUFPLFdBQU8sUUFBUSx5QkFBVTtBQUVwQyxRQUFNLFVBQVUsYUFBYSxXQUFXO0FBQ3hDLFFBQU0sa0JBQ0osYUFBYSxvQkFBb0IsV0FBVyxZQUFZLElBQUk7QUFDOUQsUUFBTSxPQUNKLGFBQWEsU0FBUyxZQUFZLFVBQVUsZUFBZTtBQUM3RCxRQUFNQyxPQUFpQixFQUFFLFNBQVMsU0FBUyxpQkFBaUIsS0FBSztBQUVqRSxRQUFNLE9BQU8sa0JBQUFDLFFBQUs7QUFBQSxJQUNoQixhQUFhLFFBQVEsV0FBVyxRQUFRLFFBQVEsSUFBSTtBQUFBLEVBQ3REO0FBQ0EsUUFBTSxTQUFTLGtCQUFBQSxRQUFLLFFBQVEsTUFBTSxNQUFNO0FBQ3hDLFFBQU0sU0FBUyxrQkFBQUEsUUFBSyxRQUFRLE1BQU0sYUFBYSxVQUFVLElBQUk7QUFDN0QsUUFBTSxpQkFBaUIsa0JBQUFBLFFBQUs7QUFBQSxJQUMxQjtBQUFBLElBQ0EsYUFBYSxrQkFBa0I7QUFBQSxFQUNqQztBQUNBLFFBQU0sWUFBWSxrQkFBQUEsUUFBSyxRQUFRLFFBQVEsYUFBYSxhQUFhLFFBQVE7QUFDekUsUUFBTSxXQUFXLGtCQUFBQSxRQUFLLFFBQVEsUUFBUSxPQUFPO0FBQzdDLFFBQU0sYUFBYSxrQkFBQUEsUUFBSyxRQUFRLE1BQU0sU0FBUztBQUMvQyxRQUFNLFNBQVMsa0JBQUFBLFFBQUssUUFBUSxZQUFZLEdBQUcsT0FBTyxNQUFNLGVBQWUsRUFBRTtBQUV6RSxRQUFNLGVBQWUsVUFBTSx1QkFBa0M7QUFBQSxJQUMzRCxNQUFNO0FBQUEsSUFDTixLQUFLO0FBQUEsSUFDTCxVQUFVO0FBQUEsSUFDVixRQUFRO0FBQUEsSUFDUixXQUFXLGFBQWE7QUFBQSxFQUMxQixDQUFDO0FBRUQsUUFBTSxjQUE4QjtBQUFBLElBQ2xDO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQSxTQUFTLGNBQWMsTUFBTTtBQUFBLElBQzdCLFNBQVMsYUFBYSxXQUFXLENBQUM7QUFBQSxJQUNsQztBQUFBLElBQ0EsVUFBVSxNQUFNLHNCQUFzQkQsTUFBSyxhQUFhLFFBQVE7QUFBQSxJQUNoRTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQSxNQUFNLENBQUM7QUFBQTtBQUFBLElBQ1A7QUFBQSxJQUNBLEtBQUsseUJBQXlCLE1BQU0sWUFBWTtBQUFBLEVBQ2xEO0FBRUEsY0FBWSxPQUFPLE1BQU07QUFBQSxJQUN2QkE7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLEVBQ0Y7QUFFQSxTQUFPO0FBQ1Q7QUFFQSxlQUFlLHNCQUNiQSxNQUNBLFVBQ3VCO0FBQ3ZCLFNBQU8sT0FBTyxPQUFPLGFBQWEsYUFDOUIsU0FBU0EsSUFBRyxJQUNaLFlBQVksQ0FBQztBQUNuQjtBQUtBLFNBQVMsa0JBQ1AsY0FDQSxZQUNjO0FBQ2QsTUFBSTtBQUNKLE1BQUksYUFBYSxZQUFZLFNBQVMsV0FBVyxZQUFZLE9BQU87QUFDbEUsY0FBVTtBQUFBLEVBQ1osV0FBVyxXQUFXLFdBQVcsUUFBUSxhQUFhLFdBQVcsTUFBTTtBQUNyRSxjQUFVO0FBQUEsRUFDWixPQUFPO0FBQ0wsY0FBZTtBQUFBLE1BQ2IsV0FBVyxXQUFXLENBQUM7QUFBQSxNQUN2QixhQUFhLFdBQVcsQ0FBQztBQUFBLElBQzNCO0FBQUEsRUFDRjtBQUNBLFFBQU0sV0FBMkIsT0FBT0EsU0FBUTtBQUM5QyxVQUFNLE9BQU8sTUFBTSxzQkFBc0JBLE1BQUssV0FBVyxRQUFRO0FBQ2pFLFVBQU0sU0FBUyxNQUFNLHNCQUFzQkEsTUFBSyxhQUFhLFFBQVE7QUFDckUsV0FBWSxrQkFBWSxNQUFNLE1BQU07QUFBQSxFQUN0QztBQUNBLFFBQU0sYUFBYSxPQUFPQSxTQUEyQztBQUNuRSxVQUFNLE9BQU8sTUFBTSxrQkFBa0JBLE1BQUssV0FBVyxJQUFJO0FBQ3pELFVBQU0sU0FBUyxNQUFNLGtCQUFrQkEsTUFBSyxhQUFhLElBQUk7QUFDN0QsV0FBWSxrQkFBWSxNQUFNLE1BQU07QUFBQSxFQUN0QztBQUNBLFFBQU0sU0FBc0M7QUFBQSxJQUMxQyxXQUFXLFVBQVUsQ0FBQztBQUFBLElBQ3RCLGFBQWEsVUFBVSxDQUFDO0FBQUEsRUFDMUI7QUFDQSxRQUFNRSxPQUFnQztBQUFBLElBQ3BDLFdBQVcsT0FBTyxDQUFDO0FBQUEsSUFDbkIsYUFBYSxPQUFPLENBQUM7QUFBQSxFQUN2QjtBQUVBLFNBQU87QUFBQSxJQUNMLE1BQU0sYUFBYSxRQUFRLFdBQVc7QUFBQSxJQUN0QyxTQUFTLGFBQWEsV0FBVyxXQUFXO0FBQUEsSUFDNUMsaUJBQWlCLGFBQWEsbUJBQW1CLFdBQVc7QUFBQSxJQUM1RCxZQUFZLGFBQWE7QUFBQSxJQUN6QixPQUFPLGFBQWEsU0FBUyxXQUFXO0FBQUEsSUFDeEMsZ0JBQWdCLGFBQWEsa0JBQWtCLFdBQVc7QUFBQSxJQUMxRDtBQUFBLElBQ0EsUUFBUSxhQUFhLFVBQVUsV0FBVztBQUFBLElBQzFDO0FBQUEsSUFDQSxNQUFNLGFBQWEsUUFBUSxXQUFXO0FBQUEsSUFDdEMsV0FBVyxhQUFhLGFBQWEsV0FBVztBQUFBLElBQ2hEO0FBQUEsSUFDQSxRQUFRLGFBQWEsVUFBVSxXQUFXO0FBQUEsSUFDMUMsTUFBTTtBQUFBLElBQ04sS0FBQUE7QUFBQSxFQUNGO0FBQ0Y7QUFFQSxlQUFlLGtCQUNiRixNQUNBRyxPQUN3QjtBQUN4QixTQUFPLE9BQU8sT0FBT0EsVUFBUyxhQUFhQSxNQUFLSCxJQUFHLElBQUlHLFNBQVEsQ0FBQztBQUNsRTtBQUVBLFNBQVMseUJBQ1AsTUFDQSxjQUN1QjtBQUN2QixTQUFPO0FBQUEsSUFDTCxpQkFBaUI7QUFBQSxJQUNqQixrQkFBa0I7QUFBQSxJQUNsQixhQUFhO0FBQUEsSUFDYixHQUFHLGFBQWE7QUFBQSxJQUNoQixnQkFBZ0I7QUFBQSxNQUNkO0FBQUE7QUFBQSxNQUVBO0FBQUE7QUFBQSxNQUVBO0FBQUE7QUFBQSxNQUVBO0FBQUEsTUFDQTtBQUFBO0FBQUEsTUFFQSxHQUFJLGFBQWEsS0FBSyxrQkFBa0IsQ0FBQztBQUFBLElBQzNDO0FBQUEsRUFDRjtBQUNGO0FBRUEsZUFBZSwwQkFDYkgsTUFDQSxjQUNBLGFBQ0E7QUFDQSxRQUFNLGVBQWtDLE1BQU07QUFBQSxJQUM1Q0E7QUFBQSxJQUNBLGFBQWE7QUFBQSxFQUNmO0FBQ0EsZUFBYSxPQUFPLFlBQVk7QUFDaEMsZUFBYSxhQUFhO0FBQzFCLGVBQWEsV0FBVztBQUV4QixlQUFhLFVBQVUsQ0FBQztBQUN4QixlQUFhLE1BQU0sU0FBUyxZQUFZO0FBQ3hDLGVBQWEsTUFBTSxjQUFjO0FBRWpDLGVBQWEsWUFBWSxDQUFDO0FBQzFCLGVBQWEsUUFBUSxLQUFhLFNBQVMsV0FBVyxDQUFDO0FBQ3ZELGVBQWEsUUFBUSxLQUFhLGlCQUFpQixXQUFXLENBQUM7QUFDL0QsZUFBYSxRQUFRLEtBQWEsU0FBUyxXQUFXLENBQUM7QUFDdkQsZUFBYSxRQUFRO0FBQUEsSUFDWCxpQkFBaUIsY0FBYyxXQUFXO0FBQUEsRUFDcEQ7QUFDQSxlQUFhLFFBQVE7QUFBQSxJQUNYLGlCQUFpQixrQkFBa0IsV0FBVztBQUFBLEVBQ3hEO0FBQ0EsZUFBYSxRQUFRLEtBQWEsaUJBQWlCLFdBQVcsQ0FBQztBQUMvRCxlQUFhLFFBQVEsS0FBYSxjQUFjLFdBQVcsQ0FBQztBQUM1RCxlQUFhLFFBQVEsS0FBYSxlQUFlLENBQUM7QUFFbEQsZUFBYSxXQUFXLENBQUM7QUFDekIsYUFBV0ksV0FBVSxXQUFXLFdBQVcsR0FBRztBQUM1QyxpQkFBYSxPQUFPQSxRQUFPLElBQUksSUFBSSxLQUFLLFVBQVVBLFFBQU8sS0FBSztBQUFBLEVBQ2hFO0FBQ0EsU0FBTztBQUNUOzs7QWtCbFBBLElBQUFDLHFCQUFlOzs7QUNDUixTQUFTLE1BQ2QsT0FDQSxXQUNTO0FBQ1QsV0FBUyxJQUFJLEdBQUcsSUFBSSxNQUFNLFFBQVE7QUFDaEMsUUFBSSxDQUFDLFVBQVUsTUFBTSxDQUFDLEdBQUcsQ0FBQztBQUFHLGFBQU87QUFDdEMsU0FBTztBQUNUOzs7QUNlTyxTQUFTLGlCQUNkLGNBQ0EsZUFDZTtBQUNmLE1BQUksaUJBQWlCO0FBQU0sV0FBTyxFQUFFLE1BQU0sWUFBWTtBQUV0RCxRQUFNLGVBQWUsSUFBSTtBQUFBLElBQ3ZCLGFBQWE7QUFBQSxNQUFRLENBQUMsZ0JBQ3BCLGtCQUFrQixhQUFhLGFBQWE7QUFBQSxJQUM5QztBQUFBLEVBQ0Y7QUFDQSxNQUFJLGFBQWEsU0FBUztBQUFHLFdBQU8sRUFBRSxNQUFNLFlBQVk7QUFFeEQsUUFBTSxrQkFBK0I7QUFBQSxJQUNuQyxVQUFVLGNBQWM7QUFBQSxJQUN4QixPQUFPLENBQUM7QUFBQSxJQUNSLGNBQWMsQ0FBQztBQUFBLEVBQ2pCO0FBQ0EsUUFBTSxnQkFBNkI7QUFBQSxJQUNqQyxVQUFVLGNBQWM7QUFBQSxJQUN4QixPQUFPLENBQUM7QUFBQSxJQUNSLGNBQWMsQ0FBQztBQUFBLEVBQ2pCO0FBRUEsYUFBVyxRQUFRLGNBQWMsT0FBTztBQUN0QyxRQUFJLGFBQWEsSUFBSSxJQUFJLEdBQUc7QUFDMUIsb0JBQWMsTUFBTSxLQUFLLElBQUk7QUFBQSxJQUMvQixPQUFPO0FBQ0wsc0JBQWdCLE1BQU0sS0FBSyxJQUFJO0FBQUEsSUFDakM7QUFBQSxFQUNGO0FBQ0EsYUFBVyxTQUFTLGNBQWMsY0FBYztBQUM5QyxRQUFJLGFBQWEsSUFBSSxLQUFLLEdBQUc7QUFDM0Isb0JBQWMsYUFBYSxLQUFLLEtBQUs7QUFBQSxJQUN2QyxPQUFPO0FBQ0wsc0JBQWdCLGFBQWEsS0FBSyxLQUFLO0FBQUEsSUFDekM7QUFBQSxFQUNGO0FBRUEsUUFBTSxvQkFDSixhQUFhLFNBQVMsS0FDdEIsTUFBTSxjQUFjLENBQUMsQ0FBQyxHQUFHLElBQUksTUFBTSxLQUFLLFNBQVMsT0FBTyxDQUFDO0FBQzNELE1BQUksbUJBQW1CO0FBQ3JCLFdBQU87QUFBQSxNQUNMLE1BQU07QUFBQSxNQUNOLGNBQWM7QUFBQSxNQUNkLGVBQWUsY0FBYyxNQUFNLElBQUksQ0FBQyxTQUFTLEtBQUssV0FBVztBQUFBLElBQ25FO0FBQUEsRUFDRjtBQUVBLFFBQU0sdUJBQ0osY0FBYyxNQUFNLFNBQVMsS0FDN0I7QUFBQSxJQUNFLGNBQWMsTUFBTSxRQUFRLENBQUMsU0FBUyxLQUFLLFdBQVc7QUFBQSxJQUN0RCxDQUFDLFVBQVUsTUFBTSxTQUFTO0FBQUEsRUFDNUI7QUFDRixNQUFJLHNCQUFzQjtBQUN4QixXQUFPO0FBQUEsTUFDTCxNQUFNO0FBQUEsTUFDTixjQUFjO0FBQUEsTUFDZCxjQUFjLGNBQWM7QUFBQSxNQUM1QixlQUFlLGNBQWMsTUFBTSxJQUFJLENBQUMsU0FBUyxLQUFLLFdBQVc7QUFBQSxJQUNuRTtBQUFBLEVBQ0Y7QUFFQSxTQUFPO0FBQUEsSUFDTCxNQUFNO0FBQUEsSUFDTixjQUFjO0FBQUEsSUFDZCxlQUFlLGNBQWMsTUFBTSxJQUFJLENBQUMsU0FBUyxLQUFLLFdBQVc7QUFBQSxFQUNuRTtBQUNGO0FBS0EsU0FBUyxrQkFDUCxhQUNBLGVBQ2tCO0FBQ2xCLFFBQU0sVUFBNEIsQ0FBQztBQUNuQyxRQUFNLGNBQWNDLGVBQWMsWUFBWSxDQUFDLENBQUM7QUFFaEQsUUFBTSxrQkFBa0IsQ0FDdEI7QUFBQTtBQUFBO0FBQUEsSUFJQyxNQUFNLFNBQVMsV0FBVyxZQUFZLFNBQVMsTUFBTSxRQUFRO0FBQUE7QUFBQSxJQUc3RCxNQUFNLFNBQVMsV0FBVyxNQUFNLFVBQVUsU0FBUyxXQUFXO0FBQUE7QUFFakUsYUFBVyxRQUFRLGNBQWMsT0FBTztBQUN0QyxVQUFNLGdCQUFnQixLQUFLLE9BQU8sS0FBSyxDQUFDLFVBQVUsZ0JBQWdCLEtBQUssQ0FBQztBQUN4RSxRQUFJO0FBQWUsY0FBUSxLQUFLLElBQUk7QUFBQSxFQUN0QztBQUVBLFFBQU0sZ0JBQWdCLGNBQWMsYUFBYTtBQUFBLElBQUssQ0FBQyxVQUNyRCxnQkFBZ0IsS0FBSztBQUFBLEVBQ3ZCO0FBQ0EsTUFBSTtBQUFlLFlBQVEsS0FBSyxhQUFhO0FBRTdDLFNBQU87QUFDVDs7O0FGNUhBLHlCQUFzQjtBQUN0QixJQUFBQyxrQkFBd0I7QUFDeEIsSUFBQUMsb0JBQXlCOzs7QUdOekIsSUFBQUMsUUFBc0I7OztBQ0F0QixJQUFBQyxtQkFBZTtBQUNmLElBQUFDLGVBQWlCO0FBRWpCLGVBQXNCLGdCQUFnQixLQUE0QjtBQUNoRSxRQUFNLFFBQVEsTUFBTSxpQkFBQUMsUUFBRyxRQUFRLEdBQUc7QUFDbEMsYUFBVyxRQUFRLE9BQU87QUFDeEIsVUFBTSxXQUFXLGFBQUFDLFFBQUssS0FBSyxLQUFLLElBQUk7QUFDcEMsVUFBTSxRQUFRLE1BQU0saUJBQUFELFFBQUcsS0FBSyxRQUFRO0FBQ3BDLFFBQUksTUFBTSxZQUFZLEdBQUc7QUFDdkIsWUFBTSxnQkFBZ0IsUUFBUTtBQUFBLElBQ2hDO0FBQUEsRUFDRjtBQUVBLE1BQUk7QUFDRixVQUFNLGlCQUFBQSxRQUFHLE1BQU0sR0FBRztBQUFBLEVBQ3BCLFFBQVE7QUFBQSxFQUVSO0FBQ0Y7OztBRFBBLElBQUFFLG1CQUFlO0FBQ2YsSUFBQUMsZUFBaUM7OztBRVhqQyxJQUFBQyxtQkFBZTtBQUNmLHVCQUFpQjtBQU9qQixlQUFzQixlQUNwQixRQUNtQjtBQUNuQixNQUFJLENBQUUsTUFBTSxpQkFBQUMsUUFBRyxPQUFPLE9BQU8sU0FBUztBQUFJLFdBQU8sQ0FBQztBQUVsRCxRQUFNLFFBQVEsVUFBTSxpQkFBQUMsU0FBSyxRQUFRLEVBQUUsS0FBSyxPQUFPLFVBQVUsQ0FBQztBQUMxRCxTQUFPLE1BQU0sSUFBSSxlQUFlO0FBQ2xDOzs7QUZEQSxlQUFzQixpQkFDcEIsUUFDQSxRQUN3QztBQUN4QyxRQUFNLFFBQTJCLENBQUM7QUFDbEMsYUFBVyxTQUFTLFFBQVE7QUFDMUIsVUFBTSxPQUFPLE1BQU0sUUFBUSxLQUFLLElBQzVCLE1BQU0seUJBQXlCLE9BQU8sTUFBTSxJQUM1QyxNQUFNLHNCQUFzQixPQUFPLE1BQU07QUFDN0MsVUFBTSxLQUFLLElBQUk7QUFBQSxFQUNqQjtBQUNBLFFBQU0sZUFBZSxNQUFNLG9CQUFvQixNQUFNO0FBR3JELFFBQU0sZ0JBQWdCLE9BQU8sTUFBTTtBQUVuQyxTQUFPLEVBQUUsY0FBYyxNQUFNO0FBQy9CO0FBS0EsZUFBZSxzQkFDYixZQUNBLFFBQzBCO0FBRTFCLFFBQU0sWUFBWSxDQUFDLGNBQWMsZ0JBQWdCLEVBQUUsU0FBUyxXQUFXLElBQUk7QUFDM0UsUUFBTSxRQUFRLFlBQ1YsZUFBZSxXQUFXLElBQUksSUFBSSxXQUFXLFNBQVMsS0FDdEQsV0FBVztBQUVmLFFBQU0sVUFBbUQsQ0FBQztBQUMxRCxNQUNFLFdBQVcsU0FBUywwQkFDcEIsV0FBVyxTQUFTLGtCQUNwQjtBQUNBLFlBQVEsS0FBZ0IsZUFBZSxZQUFZLE1BQU0sQ0FBQztBQUFBLEVBQzVEO0FBRUEsUUFBTSxVQUEyQjtBQUFBLElBQy9CO0FBQUEsSUFDQSxPQUFPO0FBQUEsTUFDTCxLQUFLO0FBQUEsUUFDSDtBQUFBLFFBQ0EsU0FBUyxDQUFDLE1BQU07QUFBQSxRQUNoQixNQUFNO0FBQUEsUUFDTixVQUFVLFdBQVc7QUFBQSxNQUN2QjtBQUFBLE1BQ0EsZUFBZTtBQUFBLFFBQ2IsUUFBUTtBQUFBO0FBQUE7QUFBQSxVQUdOLGdCQUFnQjtBQUFBLFlBQ2Q7QUFBQSxZQUNBLE9BQU87QUFBQSxZQUNQO0FBQUEsVUFDRjtBQUFBO0FBQUE7QUFBQTtBQUFBLFVBSUEsZ0JBQWdCLFVBQVUsV0FBVyxJQUFJO0FBQUEsUUFDM0M7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUFBLElBQ0EsUUFBUTtBQUFBO0FBQUEsTUFFTix3QkFBd0IsS0FBSyxVQUFVLE9BQU8sSUFBSTtBQUFBLElBQ3BEO0FBQUEsRUFDRjtBQUNBLFFBQU0sY0FBbUI7QUFBQSxJQUN2QjtBQUFBLElBQ0EsT0FBTztBQUFBLEVBQ1Q7QUFFQSxRQUFNLFNBQVMsTUFBVyxZQUFNLFdBQVc7QUFDM0MsU0FBTztBQUFBLElBQ0wsYUFBYTtBQUFBLElBQ2IsUUFBUSxxQkFBcUIsTUFBTTtBQUFBLEVBQ3JDO0FBQ0Y7QUFLQSxlQUFlLHlCQUNiLGFBQ0EsUUFDMEI7QUFDMUIsUUFBTSxZQUE2QjtBQUFBLElBQ2pDLFNBQVMsQ0FBWSxjQUFjLGFBQWEsTUFBTSxDQUFDO0FBQUEsSUFDdkQsT0FBTztBQUFBLE1BQ0wsZUFBZTtBQUFBLFFBQ2IsT0FBTyxZQUFZLE9BQStCLENBQUMsT0FBTyxVQUFVO0FBQ2xFLGdCQUFNLE1BQU0sSUFBSSxJQUFJLE1BQU07QUFDMUIsaUJBQU87QUFBQSxRQUNULEdBQUcsQ0FBQyxDQUFDO0FBQUEsUUFDTCxRQUFRO0FBQUE7QUFBQSxVQUVOLGdCQUFnQjtBQUFBO0FBQUEsVUFFaEIsZ0JBQWdCO0FBQUE7QUFBQSxVQUVoQixnQkFBZ0I7QUFBQSxRQUNsQjtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUVBLFFBQU0sY0FBbUI7QUFBQSxJQUN2QjtBQUFBLElBQ0EsT0FBTztBQUFBLEVBQ1Q7QUFFQSxRQUFNLFNBQVMsTUFBVyxZQUFNLFdBQVc7QUFDM0MsU0FBTztBQUFBLElBQ0w7QUFBQSxJQUNBLFFBQVEscUJBQXFCLE1BQU07QUFBQSxFQUNyQztBQUNGO0FBRUEsU0FBUyxxQkFDUCxRQUMyQjtBQUMzQixNQUFJLFFBQVE7QUFBUSxVQUFNLE1BQU0sdUNBQXVDO0FBQ3ZFLE1BQUksTUFBTSxRQUFRLE1BQU07QUFBRyxXQUFPLE9BQU8sUUFBUSxDQUFDLEVBQUUsT0FBTyxNQUFNLE1BQU07QUFDdkUsU0FBTyxPQUFPO0FBQ2hCO0FBRUEsZUFBZSxvQkFDYixRQUNzQztBQUN0QyxRQUFNLFFBQVEsTUFBTSxlQUFlLE1BQU07QUFDekMsTUFBSSxNQUFNLFdBQVc7QUFBRyxXQUFPLENBQUM7QUFFaEMsUUFBTSxlQUE0QyxDQUFDO0FBQ25ELGFBQVcsUUFBUSxPQUFPO0FBQ3hCLFVBQU0sY0FBVSxzQkFBUSxPQUFPLFdBQVcsSUFBSTtBQUM5QyxVQUFNLGNBQVUsc0JBQVEsT0FBTyxRQUFRLElBQUk7QUFFM0MsVUFBTSxpQkFBQUMsUUFBRyxjQUFVLHNCQUFRLE9BQU8sQ0FBQztBQUNuQyxVQUFNLGlCQUFBQSxRQUFHLFNBQVMsU0FBUyxPQUFPO0FBQ2xDLGlCQUFhLEtBQUs7QUFBQSxNQUNoQixNQUFNO0FBQUEsTUFDTixVQUFVO0FBQUEsTUFDVixNQUFNO0FBQUEsTUFDTixvQkFBb0I7QUFBQSxNQUNwQixRQUFRLE1BQU0saUJBQUFBLFFBQUcsU0FBUyxPQUFPO0FBQUEsSUFDbkMsQ0FBQztBQUFBLEVBQ0g7QUFFQSxTQUFPO0FBQ1Q7OztBR3ZLQSxJQUFBQyxlQUFrQztBQWFsQyxJQUFBQyxtQkFBZTtBQUNmLHVCQUEwQjtBQUMxQixJQUFBQyxtQkFBMEI7QUFDMUIsbUJBQWtCOzs7QUNoQmxCLGtCQUF1QjtBQUV2QixJQUFBQyxtQkFBK0I7QUFDL0IsSUFBQUMsbUJBQWU7QUFDZixJQUFBQyxlQUF3QjtBQUN4QixtQkFBc0I7OztBQ0xmLFNBQVMsc0JBQXNCLEtBQXFCO0FBQ3pELFNBQU8sSUFDSixZQUFZLEVBQ1osUUFBUSxpQkFBaUIsRUFBRSxFQUMzQixRQUFRLFFBQVEsR0FBRztBQUN4QjtBQU1PLFNBQVMsdUJBQXVCLE1BQXNCO0FBQzNELFNBQU8sS0FBSztBQUFBLElBQ1Y7QUFBQSxJQUNBO0FBQUEsRUFDRjtBQUNGO0FBS08sU0FBUyw4QkFBOEIsTUFBc0I7QUFDbEUsUUFBTSxZQUFZLHVCQUF1QixJQUFJO0FBRTdDLFNBQU87QUFBQTtBQUFBLEVBRVAsU0FBUztBQUNYOzs7QURGQSxlQUFzQixxQkFDcEJDLE9BQ0EsUUFDWTtBQUNaLFNBQU8sT0FBTyxNQUFNLDBCQUEwQkEsS0FBSTtBQUVsRCxRQUFNLGFBQWFDLGVBQWNELEtBQUk7QUFFckMsUUFBTUUsZ0JBQVcsaUNBQWU7QUFBQSxJQUM5QixHQUFHLG1CQUFtQixNQUFNO0FBQUE7QUFBQSxJQUU1QixNQUFNLENBQUM7QUFBQSxFQUNULENBQUM7QUFDRCxRQUFNQSxVQUFTLEtBQUs7QUFFcEIsUUFBTSxPQUFPLE1BQU0saUJBQUFDLFFBQUcsU0FBU0gsT0FBTSxPQUFPO0FBQzVDLFFBQU0sZ0JBQWdCLDhCQUE4QixJQUFJO0FBQ3hELFFBQU0sRUFBRSxLQUFLLElBQUksTUFBTUUsVUFBUyxjQUFjLGFBQWE7QUFDM0QsU0FBTyxPQUFPO0FBQUEsSUFDWixDQUFDLFNBQVMsTUFBTSxlQUFlLGVBQWUsU0FBUyxJQUFJLEVBQUUsS0FBSyxJQUFJO0FBQUEsRUFDeEU7QUFFQSxRQUFNLFdBQU8sWUFBQUUsU0FBVyxZQUFZO0FBQUEsSUFDbEMsT0FBTztBQUFBLElBQ1AsWUFBWTtBQUFBLElBQ1osZ0JBQWdCO0FBQUEsSUFDaEIsT0FBTztBQUFBLE1BQ0wsNkJBQXlCO0FBQUEsUUFDdkIsT0FBTztBQUFBLFFBQ1A7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUFBLElBQ0EsVUFBVSxNQUFNO0FBQ2QsVUFBSSxLQUFLLGFBQWE7QUFDcEIsbUJBQU8sYUFBQUMsU0FBVSxFQUFFLEdBQUcsTUFBTSxRQUFRLEtBQUssQ0FBQztBQUFBO0FBQ3ZDLG1CQUFPLGFBQUFBLFNBQVUsSUFBSTtBQUFBLElBQzVCO0FBQUEsRUFDRixDQUFDO0FBRUQsTUFBSTtBQUNGLFdBQU8sTUFBTSxLQUFLTCxLQUFJO0FBQUEsRUFDeEIsU0FBUyxLQUFLO0FBQ1osV0FBTyxPQUFPLE1BQU0sR0FBRztBQUN2QixVQUFNO0FBQUEsRUFDUjtBQUNGOzs7QURwREEsSUFBQU0sb0JBQWlCO0FBUWpCLGVBQXNCLGdCQUNwQixRQUN1QjtBQUN2QixRQUFNLGdCQUFnQixVQUFNLGtCQUFBQyxTQUFLLFFBQVE7QUFBQSxJQUN2QyxLQUFLLE9BQU87QUFBQSxFQUNkLENBQUM7QUFFRCxnQkFBYyxLQUFLO0FBRW5CLFFBQU0sWUFBWSxPQUFPLEtBQUsscUJBQXFCO0FBQ25ELFFBQU0sZ0JBQXdELENBQUM7QUFFL0QsUUFBTSxjQUE0QixDQUFDO0FBQ25DLE1BQUksZ0JBQWdCO0FBQ3BCLFFBQU0sUUFBUTtBQUFBLElBQ1osY0FBYyxJQUFJLE9BQU8saUJBQWlCO0FBQ3hDLFlBQU1DLFlBQU8sc0JBQVEsT0FBTyxnQkFBZ0IsWUFBWTtBQUN4RCxZQUFNLGVBQWUsVUFBVTtBQUFBLFFBQUssQ0FBQ0QsY0FDbkMsNEJBQVUsY0FBY0EsS0FBSTtBQUFBLE1BQzlCO0FBRUEsVUFBSSxnQkFBZ0IsTUFBTTtBQUN4QixlQUFPLE9BQU8sT0FBTztBQUFBLFVBQ25CLEdBQUcsWUFBWTtBQUFBLEVBQTZELEtBQUs7QUFBQSxZQUMvRTtBQUFBLFlBQ0E7QUFBQSxZQUNBO0FBQUEsVUFDRixDQUFDO0FBQUEsUUFDSDtBQUFBLE1BQ0Y7QUFFQSxZQUFNLE9BQU8sc0JBQXNCLFlBQVk7QUFDL0MsVUFBSSxTQUFTO0FBQVc7QUFFeEIsVUFBSTtBQUNKLGNBQVEsTUFBTTtBQUFBLFFBQ1osS0FBSztBQUNILHVCQUFhLE1BQU0sbUJBQW1CLFFBQVFDLEtBQUk7QUFDbEQ7QUFBQSxRQUNGLEtBQUs7QUFDSCx1QkFBYSxNQUFNLHFCQUFxQixRQUFRQSxLQUFJO0FBQ3BEO0FBQUEsUUFDRixLQUFLO0FBQ0gsdUJBQWEsTUFBTSx3QkFBd0IsUUFBUUEsS0FBSTtBQUN2RCwwQkFBZ0I7QUFDaEI7QUFBQSxRQUNGLEtBQUs7QUFDSCx1QkFBYSxNQUFNO0FBQUEsWUFDakI7QUFBQSxZQUNBLGtCQUFrQixPQUFPLGdCQUFnQkEsS0FBSTtBQUFBLFlBQzdDQTtBQUFBLFVBQ0Y7QUFDQTtBQUFBLFFBQ0YsS0FBSztBQUNILHVCQUFhLE1BQU0sMEJBQTBCLFFBQVFBLEtBQUk7QUFDekQ7QUFBQSxRQUNGLEtBQUs7QUFDSCx1QkFBYTtBQUFBLFlBQ1g7QUFBQSxZQUNBLE1BQU0sa0JBQWtCLE9BQU8sZ0JBQWdCQSxLQUFJO0FBQUEsWUFDbkQsV0FBV0E7QUFBQSxZQUNYLGVBQVcsc0JBQVEsT0FBTyxRQUFRLHNCQUFzQjtBQUFBLFlBQ3hELFNBQVM7QUFBQSxjQUNQLFNBQVM7QUFBQSxjQUNULFNBQVM7QUFBQSxZQUNYO0FBQUEsVUFDRjtBQUNBO0FBQUEsUUFDRjtBQUNFLHVCQUFhO0FBQUEsWUFDWDtBQUFBLFlBQ0EsTUFBTSxrQkFBa0IsT0FBTyxnQkFBZ0JBLEtBQUk7QUFBQSxZQUNuRCxXQUFXQTtBQUFBLFlBQ1gsV0FBVyxPQUFPO0FBQUEsWUFDbEIsU0FBUztBQUFBLGNBQ1AsU0FBUztBQUFBLGNBQ1QsU0FBUztBQUFBLFlBQ1g7QUFBQSxVQUNGO0FBQUEsTUFDSjtBQUVBLFlBQU0sZUFBZSxjQUFjLFdBQVcsSUFBSTtBQUNsRCxVQUFJLGNBQWM7QUFDaEIsY0FBTTtBQUFBLFVBQ0osdUNBQ0UsV0FBVyxJQUNiLHdDQUF3QztBQUFBLGdCQUN0Qyx1QkFBUyxPQUFPLE1BQU0sYUFBYSxTQUFTO0FBQUEsZ0JBQzVDLHVCQUFTLE9BQU8sTUFBTSxXQUFXLFNBQVM7QUFBQSxVQUM1QyxFQUFFLEtBQUssSUFBSSxDQUFDO0FBQUEsUUFDZDtBQUFBLE1BQ0Y7QUFDQSxrQkFBWSxLQUFLLFVBQVU7QUFDM0Isb0JBQWMsV0FBVyxJQUFJLElBQUk7QUFBQSxJQUNuQyxDQUFDO0FBQUEsRUFDSDtBQUNBLE1BQUksT0FBTyxZQUFZLFdBQVcsQ0FBQyxlQUFlO0FBQ2hELGdCQUFZO0FBQUEsTUFDVixNQUFNLHdCQUF3QixRQUFRLGlDQUFpQztBQUFBLElBQ3pFO0FBQUEsRUFDRjtBQUVBLFNBQU8sT0FBTyxNQUFNLG9CQUFvQixXQUFXO0FBQ25ELFFBQU0sb0JBQW9CLFlBQVksT0FBTyxDQUFDLFVBQVU7QUFDdEQsVUFBTSxFQUFFLFNBQVMsUUFBUSxJQUFJLE1BQU07QUFDbkMsUUFBSSxTQUFTLFVBQVUsU0FBUyxRQUFRO0FBQ3RDLGFBQU8sT0FBTztBQUFBLFFBQ1osT0FBTyxNQUFNLElBQUk7QUFBQSxNQUNuQjtBQUNBLGFBQU87QUFBQSxJQUNUO0FBQ0EsUUFBSSxTQUFTLFVBQVUsQ0FBQyxTQUFTLFFBQVE7QUFDdkMsYUFBTyxDQUFDLFFBQVEsU0FBUyxPQUFPLE9BQU87QUFBQSxJQUN6QztBQUNBLFFBQUksU0FBUyxVQUFVLENBQUMsU0FBUyxRQUFRO0FBQ3ZDLGFBQU8sUUFBUSxTQUFTLE9BQU8sT0FBTztBQUFBLElBQ3hDO0FBRUEsV0FBTztBQUFBLEVBQ1QsQ0FBQztBQUNELFNBQU8sT0FBTyxNQUFNLEdBQUcsT0FBTyxPQUFPLGlCQUFpQixpQkFBaUI7QUFDdkUsU0FBTztBQUNUO0FBRUEsU0FBUyxtQkFBbUIsVUFBMkM7QUFDckUsUUFBTSxVQUFpQyxDQUFDO0FBRXhDLFFBQU0saUJBQWlCLFNBQ3BCLGNBQWMsK0JBQStCLEdBQzVDLGFBQWEsU0FBUztBQUMxQixNQUFJLGdCQUFnQjtBQUNsQixZQUFRLFVBQVUsYUFBQUMsUUFBTSxNQUFNLGNBQWM7QUFBQSxFQUM5QztBQUVBLFFBQU0saUJBQWlCLFNBQ3BCLGNBQWMsK0JBQStCLEdBQzVDLGFBQWEsU0FBUztBQUMxQixNQUFJLGdCQUFnQjtBQUNsQixZQUFRLFVBQVUsYUFBQUEsUUFBTSxNQUFNLGNBQWM7QUFBQSxFQUM5QztBQUVBLFNBQU87QUFDVDtBQU1BLGVBQWUsbUJBQ2IsUUFDQUQsT0FDMEI7QUFDMUIsUUFBTSxVQUFVLE1BQU0saUJBQUFFLFFBQUcsU0FBU0YsT0FBTSxPQUFPO0FBQy9DLFFBQU0sRUFBRSxTQUFTLFFBQUksNEJBQVUsT0FBTztBQUV0QyxRQUFNLFVBQXNDLG1CQUFtQixRQUFRO0FBRXZFLFFBQU0sUUFBUSxTQUFTLGNBQWMsT0FBTztBQUM1QyxNQUFJLFNBQVM7QUFBTSxZQUFRLGVBQWUsTUFBTSxlQUFlO0FBRS9ELFFBQU0scUJBQXFCLFNBQ3hCLGNBQWMsb0NBQW9DLEdBQ2pELGFBQWEsU0FBUztBQUMxQixNQUFJLG9CQUFvQjtBQUN0QixRQUFJO0FBQ0YsY0FBUSxjQUFjLGFBQUFDLFFBQU0sTUFBTSxrQkFBa0I7QUFBQSxJQUN0RCxTQUFTLEtBQUs7QUFDWixhQUFPLE9BQU87QUFBQSxRQUNaLG1FQUFtRSxrQkFBa0I7QUFBQSxRQUNyRjtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUVBLFFBQU0sZ0JBQWdCLFNBQ25CLGNBQWMsNEJBQTRCLEdBQ3pDLGFBQWEsU0FBUztBQUMxQixNQUFJLGVBQWU7QUFDakIsWUFBUSxTQUNOLGtCQUFrQixnQkFBZ0IsZ0JBQWdCO0FBQUEsRUFDdEQ7QUFFQSxTQUFPO0FBQUEsSUFDTCxNQUFNO0FBQUEsSUFDTixNQUFNO0FBQUEsSUFDTjtBQUFBLElBQ0EsV0FBV0Q7QUFBQSxJQUNYLFdBQVcsT0FBTztBQUFBLEVBQ3BCO0FBQ0Y7QUFNQSxlQUFlLHFCQUNiLFFBQ0FBLE9BQzRCO0FBQzVCLFFBQU0sVUFBVSxNQUFNLGlCQUFBRSxRQUFHLFNBQVNGLE9BQU0sT0FBTztBQUMvQyxRQUFNLEVBQUUsU0FBUyxRQUFJLDRCQUFVLE9BQU87QUFFdEMsUUFBTSxVQUF3QyxtQkFBbUIsUUFBUTtBQUV6RSxRQUFNLG1CQUFtQixTQUN0QixjQUFjLG1DQUFtQyxHQUNoRCxhQUFhLFNBQVM7QUFDMUIsTUFBSSxrQkFBa0I7QUFDcEIsWUFBUSxZQUFZLHFCQUFxQjtBQUFBLEVBQzNDO0FBRUEsUUFBTSxxQkFBcUIsU0FDeEIsY0FBYyxvQ0FBb0MsR0FDakQsYUFBYSxTQUFTO0FBQzFCLE1BQUksb0JBQW9CO0FBQ3RCLFlBQVEsY0FBYyx1QkFBdUI7QUFBQSxFQUMvQztBQUVBLFFBQU0sc0JBQXNCLFNBQ3pCLGNBQWMscUNBQXFDLEdBQ2xELGFBQWEsU0FBUztBQUMxQixNQUFJLHFCQUFxQjtBQUN2QixZQUFRLGVBQWUsd0JBQXdCO0FBQUEsRUFDakQ7QUFFQSxTQUFPO0FBQUEsSUFDTCxNQUFNO0FBQUEsSUFDTixNQUFNO0FBQUEsSUFDTjtBQUFBLElBQ0EsV0FBV0E7QUFBQSxJQUNYLFdBQVcsT0FBTztBQUFBLEVBQ3BCO0FBQ0Y7QUFNQSxlQUFlLDBCQUNiLFFBQ0FBLE9BQzRCO0FBQzVCLFFBQU0sVUFBVSxNQUFNLGlCQUFBRSxRQUFHLFNBQVNGLE9BQU0sT0FBTztBQUMvQyxRQUFNLEVBQUUsU0FBUyxRQUFJLDRCQUFVLE9BQU87QUFFdEMsU0FBTztBQUFBLElBQ0wsTUFBTTtBQUFBLElBQ04sTUFBTSxrQkFBa0IsT0FBTyxnQkFBZ0JBLEtBQUk7QUFBQSxJQUNuRCxXQUFXQTtBQUFBLElBQ1gsV0FBVyxPQUFPO0FBQUEsSUFDbEIsU0FBUyxtQkFBbUIsUUFBUTtBQUFBLEVBQ3RDO0FBQ0Y7QUFLQSxlQUFlLHdCQUNiLFFBQ0FBLE9BQytCO0FBQy9CLE1BQUksVUFBcUQsQ0FBQztBQUMxRCxNQUFJQSxVQUFTLG1DQUFtQztBQUM5QyxVQUFNLGdCQUNKLE1BQU0scUJBQWtEQSxPQUFNLE1BQU07QUFDdEUsUUFBSSxpQkFBaUIsTUFBTTtBQUN6QixZQUFNLE1BQU0sa0RBQWtEO0FBQUEsSUFDaEU7QUFDQSxVQUFNLEVBQUUsTUFBTSxHQUFHLEdBQUcsY0FBYyxJQUFJO0FBQ3RDLGNBQVU7QUFBQSxFQUNaO0FBQ0EsU0FBTztBQUFBLElBQ0wsTUFBTTtBQUFBLElBQ04sTUFBTTtBQUFBLElBQ04sV0FBV0E7QUFBQSxJQUNYLFdBQVcsT0FBTztBQUFBLElBQ2xCO0FBQUEsRUFDRjtBQUNGO0FBS0EsZUFBZSwyQkFDYixRQUNBLE1BQ0FBLE9BQ2tDO0FBQ2xDLFFBQU0sRUFBRSxNQUFNLEdBQUcsR0FBRyxRQUFRLElBQzFCLE1BQU0scUJBQThDQSxPQUFNLE1BQU07QUFDbEUsTUFBSSxXQUFXLE1BQU07QUFDbkIsVUFBTSxNQUFNLGtCQUFrQixJQUFJLGlDQUFpQztBQUFBLEVBQ3JFO0FBQ0EsU0FBTztBQUFBLElBQ0wsTUFBTTtBQUFBLElBQ04sTUFBTSxrQkFBa0IsT0FBTyxnQkFBZ0JBLEtBQUk7QUFBQSxJQUNuRCxXQUFXQTtBQUFBLElBQ1gsZUFBVyxzQkFBUSxPQUFPLFFBQVEsc0JBQXNCO0FBQUEsSUFDeEQ7QUFBQSxFQUNGO0FBQ0Y7QUFFQSxJQUFNLHdCQUF3RTtBQUFBLEVBQzVFLGdCQUFnQjtBQUFBLEVBQ2hCLHNCQUFzQjtBQUFBLEVBQ3RCLGtCQUFrQjtBQUFBLEVBQ2xCLHdCQUF3QjtBQUFBLEVBRXhCLGtCQUFrQjtBQUFBLEVBQ2xCLHdCQUF3QjtBQUFBLEVBRXhCLGdCQUFnQjtBQUFBLEVBQ2hCLHNCQUFzQjtBQUFBLEVBRXRCLGVBQWU7QUFBQSxFQUNmLHFCQUFxQjtBQUFBLEVBRXJCLGtCQUFrQjtBQUFBLEVBQ2xCLHdCQUF3QjtBQUFBLEVBQ3hCLG9CQUFvQjtBQUFBLEVBQ3BCLDBCQUEwQjtBQUFBLEVBRTFCLGlCQUFpQjtBQUFBLEVBQ2pCLHVCQUF1QjtBQUFBLEVBRXZCLGlCQUFpQjtBQUFBLEVBQ2pCLHVCQUF1QjtBQUFBLEVBQ3ZCLENBQUMsaUNBQWlDLEdBQUc7QUFBQSxFQUVyQyxrQkFBa0I7QUFBQSxFQUNsQix3QkFBd0I7QUFBQSxFQUN4QixvQkFBb0I7QUFBQSxFQUNwQiwwQkFBMEI7QUFBQSxFQUMxQixDQUFDLFdBQVcsc0JBQXNCLEVBQUUsR0FBRztBQUFBLEVBQ3ZDLENBQUMsYUFBYSxzQkFBc0IsRUFBRSxHQUFHO0FBQUEsRUFDekMsQ0FBQyxpQkFBaUIsc0JBQXNCLEVBQUUsR0FBRztBQUFBLEVBQzdDLENBQUMsbUJBQW1CLHNCQUFzQixFQUFFLEdBQUc7QUFBQSxFQUUvQyxjQUFjO0FBQUEsRUFDZCxvQkFBb0I7QUFBQSxFQUVwQixnQkFBZ0I7QUFBQSxFQUNoQixzQkFBc0I7QUFBQSxFQUV0QixVQUFVO0FBQUEsRUFDVixnQkFBZ0I7QUFBQSxFQUNoQixRQUFRO0FBQUEsRUFDUixjQUFjO0FBQUEsRUFDZCxDQUFDLEtBQUssc0JBQXNCLEVBQUUsR0FBRztBQUFBLEVBQ2pDLENBQUMsV0FBVyxzQkFBc0IsRUFBRSxHQUFHO0FBQUE7QUFBQSxFQUd2QyxRQUFRO0FBQ1Y7QUFFQSxJQUFNLHlCQUF5Qjs7O0FHN1gvQixJQUFBRyxtQkFBZ0Q7QUFFaEQsSUFBQUMsb0JBQWU7QUFDZixJQUFBQyxlQUFrQztBQU1sQyxJQUFBQyxvQkFBaUI7OztBQ0hqQixJQUFNLHFCQUFxQjtBQUFBLEVBQ3pCLGtCQUFrQjtBQUFBLElBQ2hCLFNBQVM7QUFBQSxJQUNULGFBQ0U7QUFBQSxFQUNKO0FBQUEsRUFDQSxlQUFlO0FBQUEsSUFDYixTQUFTO0FBQUEsSUFDVCxhQUFhO0FBQUEsRUFDZjtBQUFBLEVBQ0EsY0FBYztBQUFBLElBQ1osU0FBUztBQUFBLElBQ1QsYUFDRTtBQUFBLEVBQ0o7QUFBQSxFQUNBLHVCQUF1QjtBQUFBLElBQ3JCLFNBQVM7QUFBQSxJQUNULGFBQ0U7QUFBQSxFQUNKO0FBQUEsRUFDQSxxQkFBcUI7QUFBQSxJQUNuQixTQUFTO0FBQUEsSUFDVCxhQUNFO0FBQUEsRUFDSjtBQUFBLEVBQ0EsbUJBQW1CO0FBQUEsSUFDakIsU0FBUztBQUFBLElBQ1QsYUFDRTtBQUFBLEVBQ0o7QUFDRjtBQU9PLFNBQVMsa0JBQWtCLGNBQWlDO0FBQ2pFLFNBQU8sT0FBTyxRQUFRO0FBQUEsSUFDcEIsR0FBRztBQUFBLElBQ0gsR0FBRztBQUFBLEVBQ0wsQ0FBQyxFQUFFLElBQWEsQ0FBQyxDQUFDLE1BQU0sT0FBTyxPQUFPO0FBQUEsSUFDcEM7QUFBQSxJQUNBLEdBQUc7QUFBQSxFQUNMLEVBQUU7QUFDSjs7O0FEbkNBLGVBQXNCLGlCQUNwQixhQUNBLFFBQ2U7QUFDZixRQUFNLGtCQUFBQyxRQUFHLFVBQVUsT0FBTyxRQUFRO0FBRWxDLFFBQU0sYUFBdUIsQ0FBQztBQUU5QixRQUFNLFVBQVUsbUJBQW1CLE1BQU07QUFDekMsTUFBSSxZQUFZLE9BQU87QUFDckIsZUFBVyxLQUFLLE1BQU0sNEJBQTRCLFFBQVEsT0FBTyxDQUFDO0FBQUEsRUFDcEU7QUFFQSxhQUFXLEtBQUssTUFBTSwwQkFBMEIsYUFBYSxNQUFNLENBQUM7QUFDcEUsYUFBVyxLQUFLLE1BQU0seUJBQXlCLE1BQU0sQ0FBQztBQUN0RCxhQUFXLEtBQUssTUFBTSw0QkFBNEIsTUFBTSxDQUFDO0FBRXpELFFBQU0sZ0JBQWdCLE1BQU0seUJBQXlCLFlBQVksTUFBTTtBQUN2RSxRQUFNLGtCQUFrQixlQUFlLE1BQU07QUFDL0M7QUFFQSxlQUFlLDRCQUNiLFFBQ0EsaUJBQ2lCO0FBQ2pCLFFBQU0sZUFBVyxzQkFBUSxPQUFPLFVBQVUsY0FBYztBQUN4RCxRQUFNQyxnQkFBVyxpQ0FBZSxlQUFlO0FBRy9DLFFBQU1BLFVBQVMsbUJBQW1CLFFBQVcsRUFBRSxLQUFLLE9BQU8sT0FBTyxDQUFDO0FBRW5FLFFBQU07QUFBQSxJQUNKO0FBQUEsSUFDQSxDQUFDLHVCQUF1QixNQUFNQSxVQUFTLHlCQUF5QixDQUFDLEVBQUU7QUFBQSxNQUNqRTtBQUFBLElBQ0YsSUFBSTtBQUFBLEVBQ047QUFFQSxTQUFPO0FBQ1Q7QUFFQSxlQUFlLDBCQUNiLGFBQ0EsUUFDaUI7QUFDakIsUUFBTSxlQUFXLHNCQUFRLE9BQU8sVUFBVSxZQUFZO0FBQ3RELFFBQU0sU0FBUyxZQUNaO0FBQUEsSUFBSSxDQUFDLFVBQ0o7QUFBQSxNQUNFO0FBQUEsTUFDQSxPQUFPO0FBQUEsTUFDUCxNQUFNLFVBQVUsU0FBUyxPQUFPLElBQUksVUFBVTtBQUFBLElBQ2hEO0FBQUEsRUFDRixFQUNDLE9BQU8sTUFBTSxlQUFlLE1BQU0sQ0FBQyxFQUNuQyxJQUFJQyxjQUFhLEVBQ2pCLElBQUksQ0FBQ0MsVUFBUyxXQUFXQSxLQUFJLEdBQUcsRUFDaEMsS0FBSyxFQUNMLEtBQUssSUFBSTtBQUVaLFFBQU0sV0FBVztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBWWpCLFFBQU07QUFBQSxJQUNKO0FBQUEsSUFDQSxTQUFTLFFBQVEsZUFBZSxVQUFVLGFBQWE7QUFBQSxFQUN6RDtBQUVBLFNBQU87QUFDVDtBQUVBLGVBQWUseUJBQ2IsUUFDaUI7QUFDakIsUUFBTSxlQUFXLHNCQUFRLE9BQU8sVUFBVSxXQUFXO0FBQ3JELFFBQU0sZ0JBQWdCLE9BQU8sU0FBUztBQUN0QyxRQUFNLFdBQVc7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFvQmpCLE1BQUk7QUFDSixNQUFJLGVBQWU7QUFDakIsVUFBTSxvQkFBb0Isa0JBQUFBLFFBQUs7QUFBQSxNQUM3QixPQUFPO0FBQUEsTUFDUDtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsSUFDRjtBQUNBLFVBQU0sVUFBVSxLQUFLLE1BQU0sTUFBTSxrQkFBQUgsUUFBRyxTQUFTLG1CQUFtQixPQUFPLENBQUM7QUFDeEUsZUFBVyxrQkFBa0IsT0FBTztBQUFBLEVBQ3RDLE9BQU87QUFDTCxlQUFXLGtCQUFrQixDQUFDLENBQUM7QUFBQSxFQUNqQztBQUVBLFFBQU0sWUFBWSxTQUFTLElBQUksQ0FBQyxZQUFZO0FBQzFDLFdBQU87QUFBQSxTQUNGLFFBQVEsZUFBZSx5QkFBeUI7QUFBQTtBQUFBLFVBRS9DLFFBQVEsT0FBTztBQUFBO0FBQUE7QUFBQSxzQkFHSCxRQUFRLElBQUk7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUloQyxDQUFDO0FBQ0QsUUFBTTtBQUFBLElBQ0o7QUFBQSxJQUNBLFNBQVMsUUFBUSxtQkFBbUIsVUFBVSxLQUFLLElBQUksQ0FBQztBQUFBLEVBQzFEO0FBRUEsU0FBTztBQUNUO0FBRUEsZUFBZSw0QkFDYixRQUNpQjtBQUNqQixRQUFNLGVBQVcsc0JBQVEsT0FBTyxVQUFVLGNBQWM7QUFDeEQsUUFBTSxVQUFVLFdBQVcsTUFBTTtBQUNqQyxRQUFNO0FBQUEsSUFDSjtBQUFBLElBQ0E7QUFBQSxNQUNFO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBLEdBQUcsUUFBUSxJQUFJLENBQUNJLFlBQVcsV0FBV0EsUUFBTyxJQUFJLEtBQUtBLFFBQU8sSUFBSSxHQUFHO0FBQUEsTUFDcEU7QUFBQSxJQUNGLEVBQUUsS0FBSyxJQUFJLElBQUk7QUFBQSxFQUNqQjtBQUNBLFNBQU87QUFDVDtBQUVBLGVBQWUseUJBQ2IsWUFDQSxRQUNpQjtBQUNqQixRQUFNLE1BQU0sT0FBTztBQUNuQixRQUFNLGVBQVcsc0JBQVEsS0FBSyxVQUFVO0FBQ3hDLFFBQU07QUFBQSxJQUNKO0FBQUEsSUFDQTtBQUFBLE1BQ0U7QUFBQSxNQUNBO0FBQUEsTUFDQSxHQUFHLFdBQVc7QUFBQSxRQUNaLENBQUMsUUFDQywyQkFBMkJGLG1CQUFjLHVCQUFTLEtBQUssR0FBRyxDQUFDLENBQUM7QUFBQSxNQUNoRTtBQUFBLElBQ0YsRUFBRSxLQUFLLElBQUksSUFBSTtBQUFBLEVBQ2pCO0FBQ0EsU0FBTztBQUNUO0FBRUEsZUFBZSxrQkFDYixlQUNBLFFBQ0E7QUFDQSxRQUFNLE1BQU0sT0FBTztBQUNuQixRQUFNLFdBQVdBLG1CQUFjLHVCQUFTLEtBQUssT0FBTyxJQUFJLENBQUM7QUFDekQsUUFBTSxVQUFVQSxtQkFBYyx1QkFBUyxLQUFLLE9BQU8sTUFBTSxDQUFDO0FBQzFELFFBQU07QUFBQSxRQUNKLHNCQUFRLEtBQUssZUFBZTtBQUFBLElBQzVCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsZ0JBYVksUUFBUTtBQUFBLGtCQUNOLFFBQVE7QUFBQSxnQkFDVixRQUFRO0FBQUEsa0JBQ04sUUFBUTtBQUFBLGVBQ1gsT0FBTztBQUFBLGlCQUNMLE9BQU87QUFBQSxlQUNULE9BQU87QUFBQSxpQkFDTCxPQUFPO0FBQUE7QUFBQTtBQUFBO0FBQUEsT0FJakJBLG1CQUFjLHVCQUFTLEtBQUssT0FBTyxJQUFJLENBQUMsQ0FBQztBQUFBLFNBQ3ZDQSxtQkFBYyx1QkFBUyxLQUFLLGFBQWEsQ0FBQyxDQUFDO0FBQUE7QUFBQSxpQkFFbkNBLG1CQUFjLHVCQUFTLEtBQUssT0FBTyxVQUFVLENBQUMsQ0FBQztBQUFBO0FBQUEsRUFFOUQ7QUFDRjs7O0FFOU5BLElBQUFHLG9CQUFlO0FBQ2YsSUFBQUMsZ0JBQXdCOzs7QUNOakIsSUFBTSx3QkFBTixNQUFNLHVCQUFzQjtBQUFBLEVBQ2pDLE9BQWUsa0JBQXNEO0FBQUEsSUFDbkUsZUFBZTtBQUFBLElBQ2YsY0FBYztBQUFBLElBQ2QsY0FBYztBQUFBLEVBQ2hCO0FBQUEsRUFFQTtBQUFBLEVBRUEsWUFBWSxLQUFjO0FBQ3hCLFFBQUksS0FBSztBQUNQLFlBQU0sV0FBVyxJQUFJLE1BQU0sR0FBRyxFQUFFLElBQUksQ0FBQyxZQUFZLFFBQVEsS0FBSyxDQUFDO0FBQy9ELFdBQUssT0FBTyxTQUFTLE9BQWlDLENBQUMsTUFBTSxZQUFZO0FBQ3ZFLGNBQU0sQ0FBQyxLQUFLLEdBQUcsTUFBTSxJQUFJLFFBQVEsTUFBTSxHQUFHLEVBQUUsSUFBSSxDQUFDLFNBQVMsS0FBSyxLQUFLLENBQUM7QUFDckUsWUFBSTtBQUFLLGVBQUssR0FBRyxJQUFJO0FBQ3JCLGVBQU87QUFBQSxNQUNULEdBQUcsQ0FBQyxDQUFDO0FBQUEsSUFDUCxPQUFPO0FBQ0wsV0FBSyxPQUFPLENBQUM7QUFBQSxJQUNmO0FBQUEsRUFDRjtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBS0EsSUFBSSxjQUE0QixXQUE0QztBQUMxRSxVQUFNLFNBQVMsS0FBSyxLQUFLLFNBQVMsS0FBSyxDQUFDO0FBQ3hDLGNBQVUsUUFBUSxDQUFDLGFBQWE7QUFDOUIsVUFBSSxDQUFDLE9BQU8sU0FBUyxRQUFRO0FBQUcsZUFBTyxLQUFLLFFBQVE7QUFBQSxJQUN0RCxDQUFDO0FBQ0QsU0FBSyxLQUFLLFNBQVMsSUFBSTtBQUN2QixXQUFPO0FBQUEsRUFDVDtBQUFBLEVBRUEsV0FBbUI7QUFDakIsVUFBTSxhQUFhLE9BQU8sUUFBUSxLQUFLLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU07QUFDOUQsWUFBTSxLQUFLLHVCQUFzQixnQkFBZ0IsQ0FBQyxLQUFLO0FBQ3ZELFlBQU0sS0FBSyx1QkFBc0IsZ0JBQWdCLENBQUMsS0FBSztBQUN2RCxhQUFPLEtBQUs7QUFBQSxJQUNkLENBQUM7QUFDRCxXQUFPLFdBQVcsSUFBSSxDQUFDLFVBQVUsTUFBTSxLQUFLLEVBQUUsS0FBSyxHQUFHLENBQUMsRUFBRSxLQUFLLElBQUksSUFBSTtBQUFBLEVBQ3hFO0FBQ0Y7OztBQ3ZDTyxTQUFTLHlCQUNkLFNBQ1E7QUFDUixRQUFNLGVBQW1EO0FBQUEsSUFDdkQsY0FBYyxDQUFDO0FBQUEsSUFDZixnQkFBZ0IsQ0FBQztBQUFBLElBQ2pCLGNBQWMsQ0FBQztBQUFBLElBQ2YsaUJBQWlCO0FBQUEsSUFDakIsdUJBQXVCO0FBQUEsSUFDdkIsT0FBTztBQUFBLElBQ1AsV0FBVztBQUFBLElBQ1gsT0FBTztBQUFBO0FBQUEsSUFFUCxHQUFHO0FBQUEsRUFDTDtBQUNBLFNBQU8sS0FBSztBQUFBLElBQ1YsT0FBTyxRQUFRLFlBQVksRUFFeEIsSUFBdUIsQ0FBQyxDQUFDLEtBQUssS0FBSyxNQUFNO0FBQ3hDLFVBQUksTUFBTSxRQUFRLEtBQUs7QUFBRyxlQUFPLENBQUMsS0FBSyxNQUFNLEtBQUssQ0FBQztBQUFBO0FBQzlDLGVBQU8sQ0FBQyxLQUFLLEtBQUs7QUFBQSxJQUN6QixDQUFDLEVBRUEsS0FBSyxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxjQUFjLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFBQSxFQUM1QztBQUNGO0FBRU8sU0FBUyw2QkFDZCxTQUM0QztBQUM1QyxTQUFPO0FBQUEsSUFDTCxTQUFTLFFBQVE7QUFBQSxJQUNqQixZQUFZLFFBQVE7QUFBQSxJQUNwQixtQkFBbUIsUUFBUTtBQUFBLElBQzNCLGVBQWUsUUFBUTtBQUFBLElBQ3ZCLGlCQUFpQixRQUFRO0FBQUEsSUFDekIsZUFBZSxRQUFRO0FBQUEsSUFDdkIsUUFBUSxRQUFRO0FBQUE7QUFBQSxJQUdoQiwwQkFBMEIsUUFBUTtBQUFBLElBQ2xDLE9BQU8sUUFBUTtBQUFBLEVBQ2pCO0FBQ0Y7OztBQ25EQSxJQUFBQyxvQkFBd0I7QUFFeEIsSUFBQUMsb0JBQWU7QUFPZixlQUFzQixlQUNwQixRQUNtRDtBQUNuRCxRQUFNLFdBQU8sMkJBQVEsT0FBTyxNQUFNLGNBQWM7QUFDaEQsTUFBSTtBQUNGLFdBQU8sTUFBTSxrQkFBQUMsUUFBRyxTQUFTLElBQUk7QUFBQSxFQUMvQixTQUFTLEtBQUs7QUFDWixXQUFPLE9BQU87QUFBQSxNQUNaLG1DQUFtQyxJQUFJO0FBQUEsSUFDekM7QUFDQSxXQUFPLENBQUM7QUFBQSxFQUNWO0FBQ0Y7OztBSElBLGVBQXNCLGNBQ3BCLFVBQ0EsUUFDQSxRQUNlO0FBQ2YsUUFBTSxNQUNKLE9BQU8sU0FBUyxlQUNaLEtBQUssVUFBVSxRQUFRLElBQ3ZCLEtBQUssVUFBVSxVQUFVLE1BQU0sQ0FBQztBQUV0QyxRQUFNLGtCQUFBQyxRQUFHLFVBQVUsT0FBTyxNQUFNO0FBQ2hDLFFBQU0seUJBQXFCLHVCQUFRLE9BQU8sUUFBUSxlQUFlLEdBQUcsR0FBRztBQUV2RSxTQUFPLGFBQWEsUUFBUTtBQUFBLElBQzFCLE1BQU07QUFBQSxJQUNOLFVBQVU7QUFBQSxJQUNWLE1BQU07QUFBQSxJQUNOLG9CQUFvQjtBQUFBLElBQ3BCLFFBQVE7QUFBQSxFQUNWLENBQUM7QUFDSDtBQUtBLGVBQXNCLGlCQUNwQixhQUNBLGFBQ0EsUUFDd0M7QUFDeEMsUUFBTSxNQUFNLE1BQU0sZUFBZSxNQUFNO0FBRXZDLFFBQU0sV0FBMEMsT0FBTztBQUFBLElBQ3JEO0FBQUEsTUFDRSxrQkFBa0IsT0FBTztBQUFBLE1BQ3pCLE1BQU0sS0FBSztBQUFBLE1BQ1gsYUFBYSxLQUFLO0FBQUEsTUFDbEIsU0FBUyxLQUFLLFdBQVcsZ0JBQWdCLElBQUksT0FBTztBQUFBO0FBQUEsTUFFcEQsY0FDRSxPQUFPLFlBQVksYUFBYSxDQUFDLE9BQU8sU0FBUyxVQUM3QyxLQUFLLFVBQ0w7QUFBQSxNQUNOLFlBQVksS0FBSztBQUFBLE1BQ2pCLE9BQU8sY0FBYyxXQUFXO0FBQUEsSUFDbEM7QUFBQSxJQUNBLE9BQU87QUFBQSxFQUNUO0FBRUEsaUJBQWUsVUFBVSxhQUFhLGFBQWEsTUFBTTtBQUV6RCxNQUFJLE9BQU8sWUFBWTtBQUFTLGtCQUFjLFVBQVUsTUFBTTtBQUM5RCxNQUFJLE9BQU8sWUFBWTtBQUFTLDBCQUFzQixVQUFVLE1BQU07QUFJdEUsTUFBSSxTQUFTLFFBQVE7QUFDbkIsVUFBTTtBQUFBLE1BQ0o7QUFBQSxJQUNGO0FBQ0YsTUFBSSxTQUFTLFdBQVcsTUFBTTtBQUM1QixVQUFNO0FBQUEsTUFDSjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBRUEsU0FBTztBQUNUO0FBTUEsU0FBUyxnQkFBZ0IsYUFBNkI7QUFFcEQsUUFBTUMsV0FBVSx5REFBeUQ7QUFBQSxJQUN2RTtBQUFBLEVBQ0YsSUFBSSxDQUFDO0FBRUwsTUFBSUEsWUFBVztBQUNiLFVBQU07QUFBQSxNQUNKLHlDQUF5QyxXQUFXO0FBQUEsSUFDdEQ7QUFFRixTQUFPQTtBQUNUO0FBRUEsU0FBUyxlQUNQLFVBQ0EsYUFDQSxhQUNBLFFBQ007QUFDTixRQUFNLGdCQUFnQixZQUFZLE9BRWhDLENBQUMsS0FBSyxlQUFlO0FBQ3JCLFFBQUksV0FBVyxJQUFJLE1BQU0sQ0FBQztBQUMxQixRQUFJLFdBQVcsSUFBSSxHQUFHLEtBQUssVUFBVTtBQUNyQyxXQUFPO0FBQUEsRUFDVCxHQUFHLENBQUMsQ0FBQztBQUVMLFFBQU0sYUFBYSxjQUFjLFlBQVksSUFBSSxDQUFDO0FBR2xELFFBQU0sWUFBWSxjQUFjLFdBQVcsSUFBSSxDQUFDO0FBQ2hELFFBQU0saUJBQWlCLGNBQWMsZ0JBQWdCO0FBR3JELFFBQU0sV0FBVyxjQUFjLFVBQVUsSUFBSSxDQUFDO0FBQzlDLFFBQU0sVUFBVSxjQUFjLFNBQVMsSUFBSSxDQUFDO0FBQzVDLFFBQU0sU0FBUyxjQUFjLFFBQVEsSUFBSSxDQUFDO0FBQzFDLFFBQU0sVUFBVSxjQUFjLFNBQVMsSUFBSSxDQUFDO0FBRzVDLFFBQU0sUUFBUSxjQUFjLE9BQU8sSUFBSSxDQUFDO0FBQ3hDLFFBQU0sWUFBWSxjQUFjLFNBQVM7QUFDekMsUUFBTSxhQUFhLGNBQWMsV0FBVztBQUU1QyxNQUFJLFlBQVk7QUFDZCxVQUFNLFNBQVMsd0JBQXdCLFlBQVksT0FBTyxRQUFRLEtBQUs7QUFDdkUsUUFBSSxTQUFTLHFCQUFxQixHQUFHO0FBQ25DLGVBQVMsYUFBYTtBQUFBLFFBQ3BCLE1BQU0sV0FBVyxRQUFRO0FBQUEsUUFDekIsZ0JBQWdCO0FBQUEsTUFDbEI7QUFBQSxJQUNGLE9BQU87QUFDTCxlQUFTLGFBQWE7QUFBQSxRQUNwQixZQUFZLFdBQVcsUUFBUTtBQUFBLFFBQy9CLFNBQVMsQ0FBQyxNQUFNO0FBQUEsTUFDbEI7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUVBLE1BQUksV0FBVztBQUNiLFFBQUksT0FBTyxZQUFZLFdBQVc7QUFDaEMsYUFBTyxPQUFPO0FBQUEsUUFDWjtBQUFBLE1BQ0Y7QUFBQSxJQUNGLE9BQU87QUFDTCxlQUFTLHlCQUF5QixDQUFDO0FBRW5DLGVBQVMscUJBQXFCLFlBQVk7QUFBQSxRQUN4QztBQUFBLFFBQ0EsT0FBTztBQUFBLFFBQ1A7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFFQSxNQUFJLFNBQVM7QUFDWCxRQUFJLE9BQU8sWUFBWSxXQUFXO0FBQ2hDLGFBQU8sT0FBTztBQUFBLFFBQ1o7QUFBQSxNQUNGO0FBQUEsSUFDRixPQUFPO0FBQ0wsZUFBUyx5QkFBeUIsQ0FBQztBQUVuQyxlQUFTLHFCQUFxQixVQUFVO0FBQUEsUUFDdEM7QUFBQSxRQUNBLE9BQU87QUFBQSxRQUNQO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBRUEsTUFBSSxRQUFRO0FBQ1YsYUFBUyx5QkFBeUIsQ0FBQztBQUNuQyxhQUFTLHFCQUFxQixTQUFTO0FBQUEsTUFDckM7QUFBQSxNQUNBLE9BQU87QUFBQSxNQUNQO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFFQSxNQUFJLE9BQU87QUFDVCxVQUFNLGdCQUFnQjtBQUFBLE1BQ3BCO0FBQUEsTUFDQSxPQUFPO0FBQUEsTUFDUDtBQUFBLElBQ0Y7QUFDQSxVQUFNQyxXQUFtQztBQUFBLE1BQ3ZDLGNBQWMsTUFBTSxRQUFRO0FBQUEsTUFDNUIsZUFBZSxNQUFNLFFBQVE7QUFBQSxJQUMvQjtBQUNBLFFBQUksU0FBUyxxQkFBcUIsR0FBRztBQUNuQyxlQUFTLFNBQVM7QUFBQSxRQUNoQixHQUFHQTtBQUFBLFFBQ0g7QUFBQSxNQUNGO0FBQUEsSUFDRixPQUFPO0FBQ0wsZUFBUyxNQUFNLFFBQVEsVUFBVSxnQkFBZ0IsSUFBSTtBQUFBLFFBQ25ELEdBQUdBO0FBQUEsUUFDSDtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUVBLE1BQUksVUFBVTtBQUNaLGFBQVMsZ0JBQWdCO0FBQUEsTUFDdkI7QUFBQSxNQUNBLE9BQU87QUFBQSxNQUNQO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFFQSxNQUFJLFNBQVM7QUFDWCxVQUFNLE9BQU8sd0JBQXdCLFNBQVMsT0FBTyxRQUFRLE9BQU87QUFDcEUsYUFBUyxhQUFhO0FBQUEsTUFDcEIsYUFBYSxRQUFRLFFBQVE7QUFBQSxNQUM3QixlQUNFLE9BQU8sWUFBWSxZQUFZLFFBQVEsUUFBUSxlQUFlO0FBQUEsTUFDaEUsY0FDRSxPQUFPLFlBQVksWUFBWSxRQUFRLFFBQVEsY0FBYztBQUFBLE1BQy9EO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFFQSxNQUFJLFdBQVcsUUFBUTtBQUNyQixRQUFJLE9BQU8sWUFBWSxXQUFXO0FBQ2hDLGFBQU8sT0FBTztBQUFBLFFBQ1o7QUFBQSxNQUNGO0FBQUEsSUFDRixPQUFPO0FBRUwsZUFBUyxVQUFVO0FBQUEsUUFDakIsT0FBTyxVQUFVO0FBQUEsVUFBSSxDQUFDLFVBQ3BCLHdCQUF3QixPQUFPLE9BQU8sUUFBUSxPQUFPO0FBQUEsUUFDdkQ7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFFQSxNQUFJLFlBQVksUUFBUTtBQUN0QixVQUFNLG1CQUNKLFdBQVcsS0FBSyxDQUFDLFVBQVUsTUFBTSxTQUFTLFdBQVcsS0FBSyxXQUFXLENBQUM7QUFDeEUsVUFBTSxPQUFPO0FBQUEsTUFDWDtBQUFBLE1BQ0EsT0FBTztBQUFBLE1BQ1A7QUFBQSxJQUNGO0FBRUEsUUFBSSxPQUFPLFlBQVksV0FBVztBQUNoQyxlQUFTLGlCQUFpQjtBQUFBO0FBQUE7QUFBQSxRQUd4QixlQUFlO0FBQUEsTUFDakI7QUFBQSxJQUNGLFdBQVcsT0FBTyxvQkFBb0IsR0FBRztBQUV2QyxlQUFTLGFBQWE7QUFBQSxRQUNwQixjQUFjO0FBQUEsTUFDaEI7QUFBQSxJQUNGLE9BQU87QUFDTCxhQUFPLE9BQU87QUFBQSxRQUNaO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBRUEsTUFBSSxnQkFBZ0IsUUFBUTtBQUcxQixRQUFJLE9BQU8sWUFBWSxXQUFXLE9BQU8sb0JBQW9CLEdBQUc7QUFDOUQsWUFBTSxrQkFBa0IsSUFBSSxJQUFZLFNBQVMsb0JBQW9CLENBQUMsQ0FBQztBQUN2RSxxQkFBZSxRQUFRLENBQUMsV0FBVztBQUNqQyxlQUFPLFFBQVEsUUFBUSxRQUFRLENBQUMsaUJBQWlCO0FBQy9DLDBCQUFnQixJQUFJLFlBQVk7QUFBQSxRQUNsQyxDQUFDO0FBQUEsTUFDSCxDQUFDO0FBQ0Qsc0JBQWdCO0FBQUEsUUFBUSxDQUFDLGVBQ3ZCLGtCQUFrQixVQUFVLFVBQVU7QUFBQSxNQUN4QztBQUFBLElBQ0YsT0FBTztBQUNMLFlBQU0sdUJBQXVCLGVBQWUsT0FBTyxDQUFDLEtBQUssV0FBVztBQUNsRSxjQUFNLE9BQU8seUJBQXlCLE9BQU8sT0FBTztBQUNwRCxZQUFJLElBQUksSUFBSSxJQUFJO0FBQUcsY0FBSSxJQUFJLElBQUksR0FBRyxLQUFLLE1BQU07QUFBQTtBQUN4QyxjQUFJLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQztBQUMzQixlQUFPO0FBQUEsTUFDVCxHQUFHLG9CQUFJLElBQXVDLENBQUM7QUFFL0MsWUFBTSxvQkFBb0IsTUFBTSxLQUFLLHFCQUFxQixRQUFRLENBQUMsRUFBRTtBQUFBLFFBQ25FLENBQUMsQ0FBQyxFQUFFLE9BQU8sT0FBTztBQUFBLFVBQ2hCLEdBQUcsNkJBQTZCLFFBQVEsQ0FBQyxFQUFFLE9BQU87QUFBQTtBQUFBO0FBQUEsVUFHbEQsS0FBSyx5QkFBeUIsU0FBUyxXQUFXLEdBQUcsS0FBSztBQUFBLFVBQzFELElBQUksUUFDRDtBQUFBLFlBQUksQ0FBQyxVQUNKLHdCQUF3QixPQUFPLE9BQU8sUUFBUSxLQUFLO0FBQUEsVUFDckQsRUFDQyxLQUFLO0FBQUEsUUFDVjtBQUFBLE1BQ0Y7QUFDQSxVQUFJLGtCQUFrQixVQUFVLEdBQUc7QUFDakMsaUJBQVMsb0JBQW9CLENBQUM7QUFDOUIsaUJBQVMsZ0JBQWdCLEtBQUssR0FBRyxpQkFBaUI7QUFBQSxNQUNwRDtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQ0Y7QUFFQSxTQUFTLGNBQ1AsYUFDd0M7QUFDeEMsUUFBTSxRQUE0QixDQUFDO0FBR25DLFFBQU0sWUFBWTtBQUFBLElBQ2hCO0FBQUE7QUFBQSxJQUNBO0FBQUE7QUFBQSxJQUNBO0FBQUE7QUFBQSxJQUNBO0FBQUE7QUFBQSxJQUNBO0FBQUE7QUFBQSxJQUNBO0FBQUE7QUFBQSxJQUNBO0FBQUE7QUFBQSxFQUNGO0FBR0EsY0FBWSxhQUFhLFFBQVEsQ0FBQyxVQUFVO0FBQzFDLFFBQUk7QUFDSixlQUFXQyxVQUFTLFdBQVc7QUFDN0IsWUFBTSxRQUFRLE1BQU0sU0FBUyxNQUFNQSxNQUFLO0FBQ3hDLFVBQUksUUFBUSxDQUFDLEtBQUssTUFBTTtBQUN0QixlQUFPLE1BQU0sQ0FBQztBQUNkO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFDQSxRQUFJLFFBQVE7QUFBTTtBQUVsQixVQUFNLEtBQUssQ0FBQyxNQUFNQyxlQUFjLE1BQU0sUUFBUSxDQUFDLENBQUM7QUFBQSxFQUNsRCxDQUFDO0FBRUQsU0FBTyxNQUFNLFNBQVMsSUFBSSxPQUFPLFlBQVksS0FBSyxJQUFJO0FBQ3hEO0FBRUEsU0FBUyxjQUNQLFVBQ0EsUUFDTTtBQUNOLFFBQU0sYUFBYSxVQUFVLE9BQU8sUUFBUSxZQUFZLEVBQUU7QUFDMUQsUUFBTSxhQUFhLE9BQU8sUUFBUSxVQUFVO0FBRTVDLE1BQUksU0FBUyxxQkFBcUIsR0FBRztBQUNuQyxzQkFBa0IsVUFBVSxVQUFVO0FBQUEsRUFDeEMsT0FBTztBQUNMLGtCQUFjLFVBQVUsVUFBVTtBQUFBLEVBQ3BDO0FBRUEsUUFBTSxNQUFNLElBQUk7QUFBQSxJQUNkLFNBQVMscUJBQXFCO0FBQUE7QUFBQSxNQUUxQixTQUFTLHlCQUF5QixtQkFDbEM7QUFBQSxRQUNBLFNBQVMsMkJBQ1Q7QUFBQTtBQUFBLEVBQ047QUFFQSxNQUFJLE9BQU87QUFBUSxRQUFJLElBQUksY0FBYyxVQUFVO0FBRW5ELE1BQUksU0FBUyxxQkFBcUIsR0FBRztBQUNuQyxhQUFTLDRCQUE0QixDQUFDO0FBRXRDLGFBQVMsd0JBQXdCLGtCQUFrQixJQUFJLFNBQVM7QUFBQSxFQUNsRSxPQUFPO0FBQ0wsYUFBUywwQkFBMEIsSUFBSSxTQUFTO0FBQUEsRUFDbEQ7QUFDRjtBQUVBLFNBQVMsc0JBQ1AsVUFDQSxRQUNBO0FBRUEsZ0JBQWMsVUFBVSxNQUFNO0FBRzlCLE1BQUksT0FBTyxvQkFBb0I7QUFBRyxrQkFBYyxVQUFVLFdBQVc7QUFDdkU7QUFNTyxTQUFTLHlCQUNkLGdCQUNBLGFBQ3NCO0FBQ3RCLFFBQU0sTUFBZ0IsQ0FBQztBQUV2QixRQUFNLFlBQVksWUFBWSxNQUFNLFFBQVEsQ0FBQyxTQUFTLEtBQUssTUFBTTtBQUVqRSxpQkFBZSxRQUFRLENBQUMsV0FBVztBQUVqQyxVQUFNLGFBQWEsVUFBVTtBQUFBLE1BQzNCLENBQUMsVUFBVSxNQUFNLGFBQWEsVUFBVSxPQUFPLElBQUk7QUFBQSxJQUNyRDtBQUNBLFFBQUk7QUFBWSxVQUFJLEtBQUssV0FBVyxRQUFRO0FBQUEsRUFDOUMsQ0FBQztBQUVELE1BQUksSUFBSSxTQUFTO0FBQUcsV0FBTztBQUMzQixTQUFPO0FBQ1Q7QUFFQSxTQUFTLGNBQ1AsVUFDQSxZQUNNO0FBQ04sV0FBUyxnQkFBZ0IsQ0FBQztBQUMxQixNQUFJLFNBQVMsWUFBWSxTQUFTLFVBQVU7QUFBRztBQUMvQyxXQUFTLFlBQVksS0FBSyxVQUFVO0FBQ3RDO0FBRUEsU0FBUyxrQkFDUCxVQUNBLGdCQUNNO0FBQ04sV0FBUyxxQkFBcUIsQ0FBQztBQUMvQixNQUFJLFNBQVMsaUJBQWlCLFNBQVMsY0FBYztBQUFHO0FBQ3hELFdBQVMsaUJBQWlCLEtBQUssY0FBYztBQUMvQzs7O0FJcmJBLElBQUFDLHFCQUFlO0FBQ2YsSUFBQUMsUUFBc0I7QUFDdEIsSUFBQUMsb0JBQWU7OztBQ0FSLFNBQVMsaUJBQWlCLGFBQThDO0FBQzdFLFFBQU0sZ0JBQWdELENBQUM7QUFDdkQsUUFBTSxTQUE0QixDQUFDO0FBRW5DLGFBQVcsU0FBUyxhQUFhO0FBQy9CLFVBQU0sUUFBUSx3QkFBd0IsTUFBTSxJQUFJO0FBQ2hELFFBQUksVUFBVSxZQUFZO0FBQ3hCLGFBQU8sS0FBSyxLQUFLO0FBQUEsSUFDbkIsT0FBTztBQUNMLFVBQUksYUFBYSxjQUFjLEtBQUs7QUFDcEMsVUFBSSxjQUFjLE1BQU07QUFDdEIscUJBQWEsT0FBTyxLQUFLLENBQUMsQ0FBQyxJQUFJO0FBQy9CLHNCQUFjLEtBQUssSUFBSTtBQUFBLE1BQ3pCO0FBQ0EsTUFBQyxPQUFPLFVBQVUsRUFBbUIsS0FBSyxLQUFLO0FBQUEsSUFDakQ7QUFBQSxFQUNGO0FBRUEsU0FBTztBQUNUO0FBRUEsSUFBTSwwQkFBNkQ7QUFBQSxFQUNqRSxTQUFTO0FBQUEsRUFFVCxPQUFPO0FBQUEsRUFDUCxRQUFRO0FBQUEsRUFDUixTQUFTO0FBQUEsRUFDVCxTQUFTO0FBQUEsRUFDVCxVQUFVO0FBQUEsRUFDVixXQUFXO0FBQUEsRUFDWCxXQUFXO0FBQUEsRUFDWCxpQkFBaUI7QUFBQSxFQUVqQixZQUFZO0FBQUEsRUFDWixrQkFBa0I7QUFBQSxFQUNsQixtQkFBbUI7QUFBQSxFQUNuQixrQkFBa0I7QUFBQSxFQUNsQix3QkFBd0I7QUFDMUI7OztBQy9DTyxTQUFTLGVBQWUsVUFBMEI7QUFDdkQsTUFBSSxXQUFXO0FBQUssV0FBTyxHQUFHLFFBQVE7QUFDdEMsTUFBSSxXQUFXO0FBQU0sV0FBTyxJQUFJLFdBQVcsS0FBSyxRQUFRLENBQUMsQ0FBQztBQUMxRCxNQUFJLFdBQVc7QUFBTSxXQUFPLElBQUksV0FBVyxLQUFLLFFBQVEsQ0FBQyxDQUFDO0FBQzFELFNBQU8sSUFBSSxXQUFXLEtBQUssUUFBUSxDQUFDLENBQUM7QUFDdkM7OztBQ0xBLElBQUFDLGdCQUF3Qjs7O0FDQXhCLElBQUFDLG9CQUFpQjtBQUNqQix3QkFBZTtBQUNmLElBQUFDLG9CQUFlO0FBQ2Ysc0JBQXlCOzs7QUNIbEIsU0FBUyxXQUNkLEtBQ0EsUUFDQSxNQUNBLE1BQU0sR0FDQTtBQUNOLE1BQUksS0FBSyxXQUFXO0FBQUc7QUFFdkIsUUFBTSxlQUFlLEtBQUs7QUFBQSxJQUN4QixDQUFDLFFBQVEsUUFBUTtBQUNmLGVBQVMsSUFBSSxHQUFHLElBQUksS0FBSyxJQUFJLE9BQU8sUUFBUSxJQUFJLE1BQU0sR0FBRyxLQUFLO0FBQzVELGVBQU8sQ0FBQyxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsR0FBRyxVQUFVLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztBQUFBLE1BQzFEO0FBQ0EsYUFBTztBQUFBLElBQ1Q7QUFBQSxJQUNBLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxXQUFXLE9BQU8sTUFBTTtBQUFBLEVBQ3ZDO0FBRUEsTUFBSSxNQUFNO0FBQ1YsT0FBSyxRQUFRLENBQUMsS0FBSyxNQUFNO0FBQ3ZCLFFBQUksUUFBUSxDQUFDLEtBQUssTUFBTTtBQUN0QixhQUFPLElBQUksT0FBTyxhQUFhLENBQUMsR0FBRyxHQUFHO0FBQ3RDLFVBQUksTUFBTSxJQUFJLFNBQVM7QUFBRyxlQUFPLEdBQUcsT0FBTyxLQUFLLEdBQUc7QUFBQSxJQUNyRCxDQUFDO0FBQ0QsUUFBSSxNQUFNLEtBQUssU0FBUztBQUFHLGFBQU87QUFBQSxFQUNwQyxDQUFDO0FBRUQsTUFBSSxHQUFHLE1BQU07QUFBQSxFQUFLLEdBQUcsRUFBRTtBQUN6Qjs7O0FEdEJBLGVBQXNCLGNBQ3BCLEtBQ0EsUUFDQSxTQUNBLE9BQ2U7QUFDZixNQUFJLFlBQVk7QUFFaEIsUUFBTSxXQUF1QixNQUFNLFFBQVE7QUFBQSxJQUN6QyxNQUFNLElBQUksT0FBTyxNQUFNLE1BQU07QUFDM0IsWUFBTSxRQUFRO0FBQUEsUUFDWixrQkFBQUMsUUFBSyxTQUFTLFFBQVEsSUFBSSxHQUFHLE9BQU8sSUFBSSxrQkFBQUEsUUFBSztBQUFBLFFBQzdDLGtCQUFBQSxRQUFLLFNBQVMsU0FBUyxJQUFJO0FBQUEsTUFDN0I7QUFDQSxZQUFNLFNBQVMsTUFBTSxNQUFNLFNBQVMsSUFBSSxtQkFBUztBQUNqRCxZQUFNLFFBQVEsY0FBYyxJQUFJO0FBQ2hDLFlBQU0sUUFBUSxNQUFNLGtCQUFBQyxRQUFHLE1BQU0sSUFBSTtBQUNqQyxtQkFBYSxNQUFNO0FBQ25CLFlBQU0sT0FBTyxXQUFPLDBCQUFTLE1BQU0sSUFBSSxDQUFDO0FBQ3hDLGFBQU87QUFBQSxRQUNMLEdBQUcsa0JBQUFDLFFBQUcsS0FBSyxNQUFNLENBQUMsSUFBSSxrQkFBQUEsUUFBRyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFBQSxRQUN4RCxrQkFBQUEsUUFBRyxJQUFJLElBQUk7QUFBQSxNQUNiO0FBQUEsSUFDRixDQUFDO0FBQUEsRUFDSDtBQUVBLFdBQVMsS0FBSyxDQUFDLEdBQUcsa0JBQUFBLFFBQUcsS0FBSyxvQkFBZSxDQUFDLElBQUksV0FBTywwQkFBUyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFFNUUsYUFBVyxLQUFLLFFBQVEsUUFBUTtBQUNsQztBQUVBLElBQU0sZ0JBQWdCLGtCQUFBQSxRQUFHO0FBQ3pCLElBQU0sZUFBeUQ7QUFBQSxFQUM3RCxXQUFXLGtCQUFBQSxRQUFHO0FBQUEsRUFDZCxTQUFTLGtCQUFBQSxRQUFHO0FBQUEsRUFDWixRQUFRLGtCQUFBQSxRQUFHO0FBQUEsRUFDWCxPQUFPLGtCQUFBQSxRQUFHO0FBQUEsRUFDVixRQUFRLGtCQUFBQSxRQUFHO0FBQ2I7QUFDQSxTQUFTLGNBQWMsVUFBa0I7QUFDdkMsU0FDRSxPQUFPLFFBQVEsWUFBWSxFQUFFLEtBQUssQ0FBQyxDQUFDLEdBQUcsTUFBTSxTQUFTLFNBQVMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUN4RTtBQUVKOzs7QUQ5Q0EsZUFBc0Isa0JBQ3BCLEtBQ0EsUUFDQSxRQUNBLFFBQ0E7QUFDQSxRQUFNLFNBQVM7QUFBQSxJQUNiLEdBQUcsT0FBTyxNQUFNLFFBQVEsQ0FBQyxTQUFTLEtBQUssTUFBTTtBQUFBLElBQzdDLEdBQUcsT0FBTztBQUFBLEVBQ1osRUFBRSxLQUFLLENBQUMsR0FBRyxNQUFNO0FBQ2YsVUFBTSxVQUFVLG1CQUFtQixFQUFFLFFBQVE7QUFDN0MsVUFBTSxVQUFVLG1CQUFtQixFQUFFLFFBQVE7QUFDN0MsVUFBTSxPQUFPLFVBQVU7QUFDdkIsUUFBSSxTQUFTO0FBQUcsYUFBTztBQUN2QixXQUFPLEVBQUUsU0FBUyxjQUFjLEVBQUUsUUFBUTtBQUFBLEVBQzVDLENBQUM7QUFFRCxRQUFNLFFBQVEsT0FBTyxJQUFJLENBQUMsY0FBVSx1QkFBUSxPQUFPLFFBQVEsTUFBTSxRQUFRLENBQUM7QUFDMUUsUUFBTSxjQUFjLEtBQUssUUFBUSxPQUFPLFFBQVEsS0FBSztBQUN2RDtBQUVBLElBQU0sc0JBQXNCO0FBQzVCLElBQU0scUJBQTZDO0FBQUEsRUFDakQsaUJBQWlCO0FBQUEsRUFDakIsU0FBUztBQUFBLEVBQ1QsV0FBVztBQUFBLEVBQ1gsT0FBTztBQUFBLEVBQ1AsUUFBUTtBQUNWO0FBQ0EsU0FBUyxtQkFBbUIsVUFBa0I7QUFDNUMsU0FDRSxPQUFPLFFBQVEsa0JBQWtCLEVBQUU7QUFBQSxJQUFLLENBQUMsQ0FBQyxHQUFHLE1BQzNDLFNBQVMsU0FBUyxHQUFHO0FBQUEsRUFDdkIsSUFBSSxDQUFDLEtBQUs7QUFFZDs7O0FIaEJBLGVBQXNCLGNBQ3BCLFFBQ3NCO0FBQ3RCLFFBQU0sT0FBTyxPQUFPLFlBQVksVUFBVSxrQkFBa0I7QUFDNUQsUUFBTSxTQUFTLEdBQUcsT0FBTyxPQUFPLE1BQU0sT0FBTyxlQUFlO0FBQzVELFNBQU8sT0FBTztBQUFBLElBQ1osR0FBRyxJQUFJLElBQUksbUJBQUFDLFFBQUcsS0FBSyxNQUFNLENBQUMsUUFBUSxtQkFBQUEsUUFBRyxLQUFLLE9BQU8sSUFBSSxDQUFDLFNBQVMsbUJBQUFBLFFBQUc7QUFBQSxNQUNoRSxRQUFhLGFBQU87QUFBQSxJQUN0QixDQUFDO0FBQUEsRUFDSDtBQUNBLFFBQU0sWUFBWSxLQUFLLElBQUk7QUFHM0IsUUFBTSxrQkFBQUMsUUFBRyxHQUFHLE9BQU8sUUFBUSxFQUFFLFdBQVcsTUFBTSxPQUFPLEtBQUssQ0FBQztBQUMzRCxRQUFNLGtCQUFBQSxRQUFHLFVBQVUsT0FBTyxNQUFNO0FBRWhDLFFBQU0sY0FBYyxNQUFNLGdCQUFnQixNQUFNO0FBQ2hELFNBQU8sT0FBTyxNQUFNLHlCQUF5QixXQUFXO0FBQ3hELFFBQU0sU0FBUyxpQkFBaUIsV0FBVztBQUMzQyxRQUFNLEVBQUUsT0FBTyxJQUFJLE1BQU0sUUFBUSxRQUFRLFFBQVEsTUFBUztBQUcxRCxRQUFNO0FBQUEsSUFDSixPQUFPLE9BQU87QUFBQSxJQUNkLHNCQUFzQixlQUFlLEtBQUssSUFBSSxJQUFJLFNBQVMsQ0FBQztBQUFBLElBQzVEO0FBQUEsSUFDQTtBQUFBLEVBQ0Y7QUFFQSxTQUFPO0FBQ1Q7QUFZQSxlQUFzQixRQUNwQixRQUNBLGtCQUNBLGlCQUFnRDtBQUFBLEVBQzlDLE9BQU8sQ0FBQztBQUFBLEVBQ1IsY0FBYyxDQUFDO0FBQ2pCLEdBQzJFO0FBRTNFLFFBQU0saUJBQWlCLE1BQU0sZ0JBQWdCLE1BQU07QUFDbkQsUUFBTSxpQkFBaUIsZ0JBQWdCLE1BQU0sRUFBRSxNQUFNLENBQUMsUUFBUTtBQUM1RCxXQUFPLE9BQU8sS0FBSyxvQ0FBb0MsR0FBRztBQUUxRCxRQUFJLE9BQU8sWUFBWTtBQUFTLFlBQU07QUFBQSxFQUN4QyxDQUFDO0FBR0QsUUFBTSxZQUFZLE1BQU0saUJBQWlCLGtCQUFrQixNQUFNO0FBQ2pFLFFBQU0sZUFBOEM7QUFBQSxJQUNsRCxPQUFPLENBQUMsR0FBRyxlQUFlLE9BQU8sR0FBRyxVQUFVLEtBQUs7QUFBQSxJQUNuRCxjQUFjLENBQUMsR0FBRyxlQUFlLGNBQWMsR0FBRyxVQUFVLFlBQVk7QUFBQSxFQUMxRTtBQUVBLFFBQU0sY0FBYyxNQUFNO0FBQUEsSUFDeEI7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLEVBQ0Y7QUFDQSxRQUFNLGNBQTJCO0FBQUEsSUFDL0IsVUFBVTtBQUFBLElBQ1YsR0FBRztBQUFBLEVBQ0w7QUFHQSxRQUFNLGNBQWMsYUFBYSxhQUFhLE1BQU07QUFFcEQsU0FBTztBQUFBLElBQ0wsUUFBUTtBQUFBLE1BQ04sVUFBVTtBQUFBLE1BQ1YsT0FBTyxDQUFDLEdBQUcsZUFBZSxPQUFPLEdBQUcsWUFBWSxLQUFLO0FBQUEsTUFDckQsY0FBYztBQUFBLFFBQ1osR0FBRyxlQUFlO0FBQUEsUUFDbEIsR0FBRyxZQUFZO0FBQUEsTUFDakI7QUFBQSxJQUNGO0FBQUEsSUFDQSxVQUFVO0FBQUEsRUFDWjtBQUNGOzs7QU0xR0EsSUFBQUMsUUFBc0I7OztBQ0FmLFNBQVMscUJBQXNDO0FBQ3BELE1BQUk7QUFFSixTQUFPO0FBQUEsSUFDTCxNQUFNLFlBQVksUUFBUTtBQUN4QixVQUFJLE9BQU8sWUFBWSxVQUFVO0FBQy9CLGVBQU8sT0FBTyxLQUFLLG1DQUFtQztBQUN0RDtBQUFBLE1BQ0Y7QUFHQSxZQUFNLGVBQWUsTUFBTSxPQUFPLHlCQUF5QjtBQUMzRCxtQkFBYSxjQUFjLFFBQVEsQ0FBQyxFQUFFLE9BQU8sS0FBSyxLQUFLLE1BQU07QUFDM0QsWUFBSSxTQUFTO0FBQWlCLGlCQUFPLE9BQU8sTUFBTSxNQUFNLEdBQUc7QUFDM0QsWUFBSSxTQUFTO0FBQWdCLGlCQUFPLE9BQU8sS0FBSyxHQUFHO0FBQUEsTUFDckQ7QUFFQSxZQUFNLGdCQUFnQixPQUFPLGFBQWE7QUFDMUMsWUFBTSxhQUFhO0FBQUEsUUFDakIsU0FBUyxlQUFlO0FBQUEsUUFDeEIsVUFBVSxlQUFlO0FBQUEsUUFDekIsVUFBVSxlQUFlO0FBQUEsUUFDekIsR0FBSSxPQUFPLFlBQVksWUFDbkI7QUFBQSxVQUNFLFNBQVMsZUFBZSxVQUFVO0FBQUEsVUFDbEMsZ0JBQWdCLGVBQWU7QUFBQSxVQUMvQixPQUFPLGVBQWU7QUFBQSxVQUN0QixNQUFNLGVBQWU7QUFBQSxRQUN2QixJQUNBO0FBQUEsVUFDRSxnQkFBZ0IsZUFBZSxXQUFXLE9BQU8sT0FBTztBQUFBLFVBQ3hELGlCQUFpQixlQUFlO0FBQUEsVUFDaEMsTUFBTSxlQUFlO0FBQUEsUUFDdkI7QUFBQSxNQUNOO0FBRUEsWUFBTSxjQUFjO0FBQUEsUUFDbEIsR0FBRztBQUFBLFFBQ0gsUUFBUSxPQUFPLFlBQVksWUFBWSxvQkFBb0I7QUFBQSxRQUMzRCxXQUFXLE9BQU87QUFBQTtBQUFBLFFBRWxCLFVBQVU7QUFBQSxRQUNWLFNBQVM7QUFBQSxNQUNYO0FBQ0EsWUFBTSxVQUFVO0FBQUE7QUFBQSxRQUVkLG1CQUFtQjtBQUFBLE1BQ3JCO0FBQ0EsYUFBTyxPQUFPLE1BQU0sbUJBQW1CLFdBQVc7QUFDbEQsYUFBTyxPQUFPLE1BQU0sb0JBQW9CLE9BQU87QUFFL0MsWUFBTSxTQUFTLE1BQU0sT0FBTyxhQUFhO0FBQ3pDLGVBQVMsTUFBTSxPQUFPLFFBQVEsSUFBSSxJQUFJLGFBQWEsT0FBTztBQUFBLElBQzVEO0FBQUEsSUFFQSxNQUFNLGVBQWU7QUFDbkIsYUFBTyxNQUFNLFFBQVEsS0FBSztBQUFBLElBQzVCO0FBQUEsRUFDRjtBQUNGO0FBR0EsSUFBTSxpQkFBaUI7QUFDdkIsSUFBTSxrQkFBa0I7OztBRHhEeEIsZUFBc0IsZ0JBQXFDO0FBQ3pELFFBQU0sRUFBRSxTQUFTLFNBQVMsWUFBWSxJQUFJLE1BQU0sT0FBTyxVQUFVO0FBQ2pFLFFBQU0sT0FBTyxNQUFNLFFBQVEsRUFBRSxNQUFNLFlBQVksS0FBTSxJQUFJLEVBQUUsQ0FBQztBQUM1RCxRQUFNLFdBQVc7QUFDakIsUUFBTSxTQUFTLFVBQVUsUUFBUSxJQUFJLElBQUk7QUFDekMsUUFBTSxlQUFrQztBQUFBLElBQ3RDLFFBQVE7QUFBQSxNQUNOO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFFQSxTQUFPO0FBQUEsSUFDTDtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQSxrQkFBa0I7QUFBQSxFQUNwQjtBQUNGO0FBRUEsZUFBc0IsWUFDcEIsWUFDQSxRQUN1QjtBQUN2QixRQUFNLFNBQVMsbUJBQW1CO0FBRWxDLFFBQU0sYUFBYSxNQUFXO0FBQUEsSUFDdkIsa0JBQVksWUFBWSxPQUFPLElBQUk7QUFBQSxFQUMxQztBQUVBLFFBQU0sUUFBUSxZQUFZO0FBQ3hCLFVBQU0sV0FBVyxPQUFPLE9BQU8sSUFBSTtBQUNuQyxXQUFPLE9BQU8sUUFBUSx3QkFBd0IsV0FBVyxNQUFNLEVBQUU7QUFFakUsV0FBTyxnQkFBZ0IsTUFBTSxjQUFjLE1BQU07QUFDakQsV0FBTyxPQUFPLEtBQUssb0JBQW9CO0FBQ3ZDLFVBQU0sT0FBTyxZQUFZLE1BQU07QUFDL0IsV0FBTyxPQUFPLFFBQVEsU0FBUztBQUFBLEVBQ2pDO0FBRUEsUUFBTSxrQkFBa0IsTUFBTTtBQUM1QixlQUFXLEdBQUcsS0FBSyxzQkFBc0I7QUFBQSxFQUMzQztBQUNBLFFBQU0sYUFBYSxDQUFDQyxVQUFpQjtBQUduQyxlQUFXLEdBQUcsS0FBSyxtQkFBbUJBLEtBQUk7QUFBQSxFQUM1QztBQUNBLFFBQU0sc0JBQXNCLENBQzFCLGtCQUNHO0FBQ0gsZUFBVyxHQUFHLEtBQUssNkJBQTZCLGFBQWE7QUFBQSxFQUMvRDtBQUVBLFFBQU0sU0FBdUI7QUFBQSxJQUMzQixHQUFHO0FBQUEsSUFDSDtBQUFBLElBQ0EsZUFBZTtBQUFBLE1BQ2IsVUFBVTtBQUFBLFFBQ1Isa0JBQWtCO0FBQUEsUUFDbEIsTUFBTTtBQUFBLFFBQ04sU0FBUztBQUFBLE1BQ1g7QUFBQSxNQUNBLGNBQWMsQ0FBQztBQUFBLE1BQ2YsT0FBTyxDQUFDO0FBQUEsSUFDVjtBQUFBLElBQ0EsTUFBTSxXQUFXO0FBQUEsSUFDakIsVUFBVSxXQUFXO0FBQUEsSUFDckIsUUFBUSxXQUFXO0FBQUEsSUFDbkI7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLEVBQ0Y7QUFFQSxTQUFPO0FBQ1Q7QUFLTyxTQUFTLHFCQUNkLE9BQ0EsUUFDQSxRQUNBO0FBQ0EsTUFBSSxPQUFPLG9CQUFvQixHQUFHO0FBQ2hDLFVBQU0sUUFBUSxDQUFDLFNBQVM7QUFDdEIsWUFBTSxRQUFRLEtBQUs7QUFDbkIsVUFBSSxNQUFNLFFBQVEsS0FBSyxLQUFLLE1BQU0sU0FBUztBQUFrQjtBQUU3RCxZQUFNLEtBQUssQ0FBQyx3QkFBd0IsT0FBTyxPQUFPLFFBQVEsS0FBSyxDQUFDO0FBQ2hFLFlBQU0sTUFBTSx5QkFBeUIsQ0FBQyxLQUFLLEdBQUcsT0FBTyxhQUFhO0FBRWxFLGFBQU8sb0JBQW9CO0FBQUEsUUFDekIsR0FBRyxNQUFNO0FBQUEsUUFDVDtBQUFBLFFBQ0E7QUFBQSxNQUNGLENBQUM7QUFBQSxJQUNILENBQUM7QUFBQSxFQUNILE9BQU87QUFDTCxXQUFPLGdCQUFnQjtBQUFBLEVBQ3pCO0FBQ0Y7QUFFTyxTQUFTLGdCQUNkLFFBQ0EsUUFDQSxRQUNBO0FBQ0EsU0FBTyxLQUFLLEVBQUUsUUFBUSxDQUFDLFVBQVU7QUFDL0IsVUFBTUEsUUFBTyx3QkFBd0IsT0FBTyxPQUFPLFFBQVEsT0FBTztBQUNsRSxXQUFPLFdBQVdBLEtBQUk7QUFBQSxFQUN4QixDQUFDO0FBQ0g7OztBRTdIQSxJQUFBQyxvQkFBaUI7QUFDakIsSUFBQUMsb0JBQWlCO0FBQ2pCLElBQUFDLG9CQUFlO0FBQ2YsSUFBQUMsa0JBQXdCO0FBQ3hCLElBQUFDLHFCQUFlO0FBT2YsZUFBc0IsTUFBTSxPQUFPLFFBQVEsSUFBSSxHQUFHO0FBQ2hELDBCQUFRLEtBQUssa0JBQWtCO0FBRS9CLFFBQU0sV0FBVztBQUFBLElBQ2Y7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNGO0FBQ0EsMEJBQVEsTUFBTSxnQkFBZ0IsU0FBUyxJQUFJLG1CQUFBQyxRQUFHLElBQUksRUFBRSxLQUFLLElBQUksQ0FBQztBQUM5RCxRQUFNLGNBQWMsVUFBTSxrQkFBQUMsU0FBSyxVQUFVO0FBQUEsSUFDdkMsS0FBSyxrQkFBQUMsUUFBSyxRQUFRLElBQUk7QUFBQSxJQUN0QixVQUFVO0FBQUEsSUFDVixpQkFBaUI7QUFBQSxJQUNqQixNQUFNO0FBQUEsRUFDUixDQUFDO0FBQ0QsTUFBSSxZQUFZLFdBQVcsR0FBRztBQUM1Qiw0QkFBUSxNQUFNLDJCQUEyQjtBQUN6QztBQUFBLEVBQ0Y7QUFFQSwwQkFBUTtBQUFBLElBQ047QUFBQSxJQUNBLFlBQVksSUFBSSxDQUFDLFFBQVEsbUJBQUFGLFFBQUcsS0FBSyxrQkFBQUUsUUFBSyxTQUFTLE1BQU0sR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLElBQUk7QUFBQSxFQUN2RTtBQUNBLGFBQVcsYUFBYSxhQUFhO0FBQ25DLFVBQU0sa0JBQUFDLFFBQUcsR0FBRyxXQUFXLEVBQUUsT0FBTyxNQUFNLFdBQVcsS0FBSyxDQUFDO0FBQ3ZELDRCQUFRLE1BQU0sYUFBYSxtQkFBQUgsUUFBRyxLQUFLLGtCQUFBRSxRQUFLLFNBQVMsTUFBTSxTQUFTLENBQUMsQ0FBQztBQUFBLEVBQ3BFO0FBQ0Y7OztBdkJmQSxlQUFzQkUsT0FBTSxRQUE0QztBQUN0RSxRQUFNLGlCQUFpQixNQUFNLGtCQUFrQixRQUFRLE9BQU87QUFDOUQsU0FBTyxNQUFNLGNBQWMsY0FBYztBQUMzQztBQU1BLGVBQXNCQyxjQUNwQixRQUN1QjtBQUN2QixRQUFNLGFBQWEsTUFBTSxjQUFjO0FBRXZDLFFBQU0sMEJBQTBCLFlBQVk7QUFDMUMsV0FBTztBQUFBLE1BQ0w7QUFBQSxRQUNFLEdBQUc7QUFBQSxRQUNILE1BQU0sV0FBVztBQUFBLE1BQ25CO0FBQUEsTUFDQTtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBRUEsTUFBSSxpQkFBaUIsTUFBTSx3QkFBd0I7QUFDbkQsUUFBTSxTQUFTLE1BQU0sWUFBWSxZQUFZLGNBQWM7QUFDM0QsaUJBQWUsU0FBUztBQUV4QixRQUFNLG1CQUFtQixJQUFJLHlCQUFNO0FBQ25DLFFBQU0sY0FBdUMsQ0FBQztBQUU5QyxTQUFPLEdBQUcsR0FBRyw4QkFBOEIsTUFBTTtBQUUvQyx5QkFBcUIsT0FBTyxjQUFjLE9BQU8sZ0JBQWdCLE1BQU07QUFBQSxFQUN6RSxDQUFDO0FBRUQsU0FBTyxRQUFRLEdBQUcsT0FBTyxPQUFPLE9BQU9DLE9BQU0sV0FBVztBQUV0RCxRQUFJQSxNQUFLLFdBQVcsZUFBZSxVQUFVO0FBQUc7QUFDaEQsZ0JBQVksS0FBSyxDQUFDLE9BQU9BLEtBQUksQ0FBQztBQUU5QixVQUFNLGlCQUFpQixhQUFhLFlBQVk7QUFDOUMsWUFBTSxjQUFjLFlBQVksT0FBTyxHQUFHLFlBQVksTUFBTTtBQUM1RCxVQUFJLFlBQVksV0FBVztBQUFHO0FBRTlCLFlBQU0sVUFBVSxpQkFBaUIsYUFBYSxPQUFPLGFBQWE7QUFDbEUsVUFBSSxRQUFRLFNBQVM7QUFBYTtBQUdsQyxxQkFBZSxPQUFPO0FBQUEsUUFDcEIsWUFBWSxNQUFNLEtBQUssSUFBSSxJQUFJLFlBQVksSUFBSSxDQUFDLFdBQVcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQ25FLElBQUksQ0FBQyxTQUFTLG1CQUFBQyxRQUFHLFFBQUksNEJBQVMsZUFBZSxNQUFNLElBQUksQ0FBQyxDQUFDLEVBQ3pELEtBQUssSUFBSSxDQUFDO0FBQUEsTUFDZjtBQUNBLFlBQU0sZUFBZSxRQUFRLGNBQzFCLEtBQUssRUFDTCxJQUFJLENBQUMsVUFBVTtBQUNkLGVBQU8sbUJBQUFBLFFBQUc7QUFBQSxjQUNSLDRCQUFTLGVBQWUsUUFBUSx3QkFBd0IsT0FBTyxFQUFFLENBQUM7QUFBQSxRQUNwRTtBQUFBLE1BQ0YsQ0FBQyxFQUNBLEtBQUssbUJBQUFBLFFBQUcsSUFBSSxJQUFJLENBQUM7QUFHcEIsdUJBQWlCLE1BQU0sd0JBQXdCO0FBQy9DLHFCQUFlLFNBQVM7QUFDeEIsWUFBTSxFQUFFLFFBQVEsVUFBVSxJQUFJLE1BQU07QUFBQSxRQUNsQztBQUFBO0FBQUEsUUFFQSxRQUFRO0FBQUEsUUFDUixRQUFRO0FBQUEsTUFDVjtBQUNBLGFBQU8sZ0JBQWdCO0FBR3ZCLGNBQVEsUUFBUSxNQUFNO0FBQUEsUUFDcEIsS0FBSztBQUNILGlCQUFPLGdCQUFnQjtBQUN2QjtBQUFBLFFBQ0YsS0FBSztBQUNILDBCQUFnQixRQUFRLGVBQWUsUUFBUSxjQUFjO0FBQzdEO0FBQUEsUUFDRixLQUFLO0FBQ0gsK0JBQXFCLFFBQVEsY0FBYyxnQkFBZ0IsTUFBTTtBQUNqRTtBQUFBLE1BQ0o7QUFDQSw4QkFBUSxRQUFRLGFBQWEsWUFBWSxFQUFFO0FBQUEsSUFDN0MsQ0FBQztBQUFBLEVBQ0gsQ0FBQztBQUVELFNBQU87QUFDVDs7O0F3QnBIQSxJQUFBQyxrQkFBbUM7OztBQ0FuQyxJQUFBQyxxQkFBZTtBQUVmLElBQUFDLGtCQUF3QjtBQUVqQixTQUFTLGNBQWM7QUFDNUIsVUFBUSxJQUFJO0FBQ1osMEJBQVEsSUFBSSxHQUFHLG1CQUFBQyxRQUFHLEtBQUssS0FBSyxDQUFDLElBQUksbUJBQUFBLFFBQUcsS0FBSyxtQkFBQUEsUUFBRyxLQUFLLE9BQU8sQ0FBQyxDQUFDLEVBQUU7QUFDOUQ7OztBREhPLFNBQVMsY0FDZCxJQUNBLFNBR0E7QUFDQSxTQUFPLFVBQVUsU0FBZ0I7QUFHL0IsVUFBTSxVQUFVLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxRQUFRLEtBQUssS0FBSztBQUMvQyxRQUFJLFNBQVM7QUFDWCw4QkFBUSxRQUFRLDBCQUFVO0FBQUEsSUFDNUI7QUFFQSxVQUFNLFlBQVksS0FBSyxJQUFJO0FBQzNCLFFBQUk7QUFDRixrQkFBWTtBQUVaLFlBQU0sVUFBVSxNQUFNLEdBQUcsR0FBRyxJQUFJO0FBRWhDLFVBQUksQ0FBQyxXQUFXLENBQUMsU0FBUztBQUN4QixnQ0FBUTtBQUFBLFVBQ04sZUFBZSxlQUFlLEtBQUssSUFBSSxJQUFJLFNBQVMsQ0FBQztBQUFBLFFBQ3ZEO0FBQUEsSUFDSixTQUFTLEtBQUs7QUFDWiw4QkFBUTtBQUFBLFFBQ04sd0JBQXdCLGVBQWUsS0FBSyxJQUFJLElBQUksU0FBUyxDQUFDO0FBQUEsTUFDaEU7QUFDQSw4QkFBUSxNQUFNLEdBQUc7QUFDakIsY0FBUSxLQUFLLENBQUM7QUFBQSxJQUNoQjtBQUFBLEVBQ0Y7QUFDRjs7O0FFakNPLElBQU1DLFNBQVEsY0FZbkIsT0FBTyxNQUFNLFVBQVU7QUFDdkIsUUFBTSxZQUE4QjtBQUFBLElBQ2xDO0FBQUEsSUFDQSxNQUFNLE1BQU07QUFBQSxJQUNaLFNBQVMsTUFBTTtBQUFBLElBQ2YsaUJBQWlCLE1BQU0sTUFBTSxJQUFJLE1BQU0sTUFBTSxJQUFJO0FBQUEsSUFDakQsWUFBWSxNQUFNO0FBQUEsSUFDbEIsT0FBTyxNQUFNO0FBQUEsRUFDZjtBQUVBLFFBQVVBLE9BQU0sU0FBUztBQUMzQixDQUFDOzs7QUN2Qk0sSUFBTSxNQUFNLGNBWWpCLE9BQU8sTUFBTSxVQUFVO0FBQ3ZCLFFBQU0sWUFBOEI7QUFBQSxJQUNsQztBQUFBLElBQ0EsTUFBTSxNQUFNO0FBQUEsSUFDWixTQUFTLE1BQU07QUFBQSxJQUNmLGlCQUFpQixNQUFNLE1BQU0sSUFBSSxNQUFNLE1BQU0sSUFBSTtBQUFBLElBQ2pELFlBQVksTUFBTTtBQUFBLElBQ2xCLE9BQU8sTUFBTTtBQUFBLEVBQ2Y7QUFFQSxRQUFNLFNBQVMsTUFBVUMsY0FBYSxTQUFTO0FBQy9DLFFBQU0sT0FBTyxNQUFNO0FBRW5CLFNBQU87QUFDVCxDQUFDOzs7QUM1QkQscUJBQW9COzs7QUNEcEIsSUFBQUMsdUJBQW9COzs7QUNBcEIsSUFBTSx5QkFBeUI7QUFFL0IsSUFBTSxhQUFhLENBQUMsU0FBUyxNQUFNLFVBQVEsUUFBVSxPQUFPLE1BQU07QUFFbEUsSUFBTSxjQUFjLENBQUMsU0FBUyxNQUFNLFVBQVEsUUFBVSxLQUFLLE1BQU0sTUFBTSxJQUFJO0FBRTNFLElBQU0sY0FBYyxDQUFDLFNBQVMsTUFBTSxDQUFDLEtBQUssT0FBTyxTQUFTLFFBQVUsS0FBSyxNQUFNLE1BQU0sR0FBRyxJQUFJLEtBQUssSUFBSSxJQUFJO0FBRXpHLElBQU0sU0FBUztBQUFBLEVBQ2QsVUFBVTtBQUFBLElBQ1QsT0FBTyxDQUFDLEdBQUcsQ0FBQztBQUFBO0FBQUEsSUFFWixNQUFNLENBQUMsR0FBRyxFQUFFO0FBQUEsSUFDWixLQUFLLENBQUMsR0FBRyxFQUFFO0FBQUEsSUFDWCxRQUFRLENBQUMsR0FBRyxFQUFFO0FBQUEsSUFDZCxXQUFXLENBQUMsR0FBRyxFQUFFO0FBQUEsSUFDakIsVUFBVSxDQUFDLElBQUksRUFBRTtBQUFBLElBQ2pCLFNBQVMsQ0FBQyxHQUFHLEVBQUU7QUFBQSxJQUNmLFFBQVEsQ0FBQyxHQUFHLEVBQUU7QUFBQSxJQUNkLGVBQWUsQ0FBQyxHQUFHLEVBQUU7QUFBQSxFQUN0QjtBQUFBLEVBQ0EsT0FBTztBQUFBLElBQ04sT0FBTyxDQUFDLElBQUksRUFBRTtBQUFBLElBQ2QsS0FBSyxDQUFDLElBQUksRUFBRTtBQUFBLElBQ1osT0FBTyxDQUFDLElBQUksRUFBRTtBQUFBLElBQ2QsUUFBUSxDQUFDLElBQUksRUFBRTtBQUFBLElBQ2YsTUFBTSxDQUFDLElBQUksRUFBRTtBQUFBLElBQ2IsU0FBUyxDQUFDLElBQUksRUFBRTtBQUFBLElBQ2hCLE1BQU0sQ0FBQyxJQUFJLEVBQUU7QUFBQSxJQUNiLE9BQU8sQ0FBQyxJQUFJLEVBQUU7QUFBQTtBQUFBLElBR2QsYUFBYSxDQUFDLElBQUksRUFBRTtBQUFBLElBQ3BCLE1BQU0sQ0FBQyxJQUFJLEVBQUU7QUFBQTtBQUFBLElBQ2IsTUFBTSxDQUFDLElBQUksRUFBRTtBQUFBO0FBQUEsSUFDYixXQUFXLENBQUMsSUFBSSxFQUFFO0FBQUEsSUFDbEIsYUFBYSxDQUFDLElBQUksRUFBRTtBQUFBLElBQ3BCLGNBQWMsQ0FBQyxJQUFJLEVBQUU7QUFBQSxJQUNyQixZQUFZLENBQUMsSUFBSSxFQUFFO0FBQUEsSUFDbkIsZUFBZSxDQUFDLElBQUksRUFBRTtBQUFBLElBQ3RCLFlBQVksQ0FBQyxJQUFJLEVBQUU7QUFBQSxJQUNuQixhQUFhLENBQUMsSUFBSSxFQUFFO0FBQUEsRUFDckI7QUFBQSxFQUNBLFNBQVM7QUFBQSxJQUNSLFNBQVMsQ0FBQyxJQUFJLEVBQUU7QUFBQSxJQUNoQixPQUFPLENBQUMsSUFBSSxFQUFFO0FBQUEsSUFDZCxTQUFTLENBQUMsSUFBSSxFQUFFO0FBQUEsSUFDaEIsVUFBVSxDQUFDLElBQUksRUFBRTtBQUFBLElBQ2pCLFFBQVEsQ0FBQyxJQUFJLEVBQUU7QUFBQSxJQUNmLFdBQVcsQ0FBQyxJQUFJLEVBQUU7QUFBQSxJQUNsQixRQUFRLENBQUMsSUFBSSxFQUFFO0FBQUEsSUFDZixTQUFTLENBQUMsSUFBSSxFQUFFO0FBQUE7QUFBQSxJQUdoQixlQUFlLENBQUMsS0FBSyxFQUFFO0FBQUEsSUFDdkIsUUFBUSxDQUFDLEtBQUssRUFBRTtBQUFBO0FBQUEsSUFDaEIsUUFBUSxDQUFDLEtBQUssRUFBRTtBQUFBO0FBQUEsSUFDaEIsYUFBYSxDQUFDLEtBQUssRUFBRTtBQUFBLElBQ3JCLGVBQWUsQ0FBQyxLQUFLLEVBQUU7QUFBQSxJQUN2QixnQkFBZ0IsQ0FBQyxLQUFLLEVBQUU7QUFBQSxJQUN4QixjQUFjLENBQUMsS0FBSyxFQUFFO0FBQUEsSUFDdEIsaUJBQWlCLENBQUMsS0FBSyxFQUFFO0FBQUEsSUFDekIsY0FBYyxDQUFDLEtBQUssRUFBRTtBQUFBLElBQ3RCLGVBQWUsQ0FBQyxLQUFLLEVBQUU7QUFBQSxFQUN4QjtBQUNEO0FBRU8sSUFBTSxnQkFBZ0IsT0FBTyxLQUFLLE9BQU8sUUFBUTtBQUNqRCxJQUFNLHVCQUF1QixPQUFPLEtBQUssT0FBTyxLQUFLO0FBQ3JELElBQU0sdUJBQXVCLE9BQU8sS0FBSyxPQUFPLE9BQU87QUFDdkQsSUFBTSxhQUFhLENBQUMsR0FBRyxzQkFBc0IsR0FBRyxvQkFBb0I7QUFFM0UsU0FBUyxpQkFBaUI7QUFDekIsUUFBTSxRQUFRLG9CQUFJLElBQUk7QUFFdEIsYUFBVyxDQUFDLFdBQVcsS0FBSyxLQUFLLE9BQU8sUUFBUSxNQUFNLEdBQUc7QUFDeEQsZUFBVyxDQUFDLFdBQVcsS0FBSyxLQUFLLE9BQU8sUUFBUSxLQUFLLEdBQUc7QUFDdkQsYUFBTyxTQUFTLElBQUk7QUFBQSxRQUNuQixNQUFNLFFBQVUsTUFBTSxDQUFDLENBQUM7QUFBQSxRQUN4QixPQUFPLFFBQVUsTUFBTSxDQUFDLENBQUM7QUFBQSxNQUMxQjtBQUVBLFlBQU0sU0FBUyxJQUFJLE9BQU8sU0FBUztBQUVuQyxZQUFNLElBQUksTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUM7QUFBQSxJQUM3QjtBQUVBLFdBQU8sZUFBZSxRQUFRLFdBQVc7QUFBQSxNQUN4QyxPQUFPO0FBQUEsTUFDUCxZQUFZO0FBQUEsSUFDYixDQUFDO0FBQUEsRUFDRjtBQUVBLFNBQU8sZUFBZSxRQUFRLFNBQVM7QUFBQSxJQUN0QyxPQUFPO0FBQUEsSUFDUCxZQUFZO0FBQUEsRUFDYixDQUFDO0FBRUQsU0FBTyxNQUFNLFFBQVE7QUFDckIsU0FBTyxRQUFRLFFBQVE7QUFFdkIsU0FBTyxNQUFNLE9BQU8sV0FBVztBQUMvQixTQUFPLE1BQU0sVUFBVSxZQUFZO0FBQ25DLFNBQU8sTUFBTSxVQUFVLFlBQVk7QUFDbkMsU0FBTyxRQUFRLE9BQU8sV0FBVyxzQkFBc0I7QUFDdkQsU0FBTyxRQUFRLFVBQVUsWUFBWSxzQkFBc0I7QUFDM0QsU0FBTyxRQUFRLFVBQVUsWUFBWSxzQkFBc0I7QUFHM0QsU0FBTyxpQkFBaUIsUUFBUTtBQUFBLElBQy9CLGNBQWM7QUFBQSxNQUNiLE1BQU0sS0FBSyxPQUFPLE1BQU07QUFHdkIsWUFBSSxRQUFRLFNBQVMsVUFBVSxNQUFNO0FBQ3BDLGNBQUksTUFBTSxHQUFHO0FBQ1osbUJBQU87QUFBQSxVQUNSO0FBRUEsY0FBSSxNQUFNLEtBQUs7QUFDZCxtQkFBTztBQUFBLFVBQ1I7QUFFQSxpQkFBTyxLQUFLLE9BQVEsTUFBTSxLQUFLLE1BQU8sRUFBRSxJQUFJO0FBQUEsUUFDN0M7QUFFQSxlQUFPLEtBQ0gsS0FBSyxLQUFLLE1BQU0sTUFBTSxNQUFNLENBQUMsSUFDN0IsSUFBSSxLQUFLLE1BQU0sUUFBUSxNQUFNLENBQUMsSUFDL0IsS0FBSyxNQUFNLE9BQU8sTUFBTSxDQUFDO0FBQUEsTUFDN0I7QUFBQSxNQUNBLFlBQVk7QUFBQSxJQUNiO0FBQUEsSUFDQSxVQUFVO0FBQUEsTUFDVCxNQUFNLEtBQUs7QUFDVixjQUFNLFVBQVUseUJBQXlCLEtBQUssSUFBSSxTQUFTLEVBQUUsQ0FBQztBQUM5RCxZQUFJLENBQUMsU0FBUztBQUNiLGlCQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFBQSxRQUNoQjtBQUVBLFlBQUksQ0FBQyxXQUFXLElBQUk7QUFFcEIsWUFBSSxZQUFZLFdBQVcsR0FBRztBQUM3Qix3QkFBYyxDQUFDLEdBQUcsV0FBVyxFQUFFLElBQUksZUFBYSxZQUFZLFNBQVMsRUFBRSxLQUFLLEVBQUU7QUFBQSxRQUMvRTtBQUVBLGNBQU0sVUFBVSxPQUFPLFNBQVMsYUFBYSxFQUFFO0FBRS9DLGVBQU87QUFBQTtBQUFBLFVBRUwsV0FBVyxLQUFNO0FBQUEsVUFDakIsV0FBVyxJQUFLO0FBQUEsVUFDakIsVUFBVTtBQUFBO0FBQUEsUUFFWDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLFlBQVk7QUFBQSxJQUNiO0FBQUEsSUFDQSxjQUFjO0FBQUEsTUFDYixPQUFPLFNBQU8sT0FBTyxhQUFhLEdBQUcsT0FBTyxTQUFTLEdBQUcsQ0FBQztBQUFBLE1BQ3pELFlBQVk7QUFBQSxJQUNiO0FBQUEsSUFDQSxlQUFlO0FBQUEsTUFDZCxNQUFNLE1BQU07QUFDWCxZQUFJLE9BQU8sR0FBRztBQUNiLGlCQUFPLEtBQUs7QUFBQSxRQUNiO0FBRUEsWUFBSSxPQUFPLElBQUk7QUFDZCxpQkFBTyxNQUFNLE9BQU87QUFBQSxRQUNyQjtBQUVBLFlBQUk7QUFDSixZQUFJO0FBQ0osWUFBSTtBQUVKLFlBQUksUUFBUSxLQUFLO0FBQ2hCLGtCQUFTLE9BQU8sT0FBTyxLQUFNLEtBQUs7QUFDbEMsa0JBQVE7QUFDUixpQkFBTztBQUFBLFFBQ1IsT0FBTztBQUNOLGtCQUFRO0FBRVIsZ0JBQU0sWUFBWSxPQUFPO0FBRXpCLGdCQUFNLEtBQUssTUFBTSxPQUFPLEVBQUUsSUFBSTtBQUM5QixrQkFBUSxLQUFLLE1BQU0sWUFBWSxDQUFDLElBQUk7QUFDcEMsaUJBQVEsWUFBWSxJQUFLO0FBQUEsUUFDMUI7QUFFQSxjQUFNLFFBQVEsS0FBSyxJQUFJLEtBQUssT0FBTyxJQUFJLElBQUk7QUFFM0MsWUFBSSxVQUFVLEdBQUc7QUFDaEIsaUJBQU87QUFBQSxRQUNSO0FBR0EsWUFBSSxTQUFTLE1BQU8sS0FBSyxNQUFNLElBQUksS0FBSyxJQUFNLEtBQUssTUFBTSxLQUFLLEtBQUssSUFBSyxLQUFLLE1BQU0sR0FBRztBQUV0RixZQUFJLFVBQVUsR0FBRztBQUNoQixvQkFBVTtBQUFBLFFBQ1g7QUFFQSxlQUFPO0FBQUEsTUFDUjtBQUFBLE1BQ0EsWUFBWTtBQUFBLElBQ2I7QUFBQSxJQUNBLFdBQVc7QUFBQSxNQUNWLE9BQU8sQ0FBQyxLQUFLLE9BQU8sU0FBUyxPQUFPLGNBQWMsT0FBTyxhQUFhLEtBQUssT0FBTyxJQUFJLENBQUM7QUFBQSxNQUN2RixZQUFZO0FBQUEsSUFDYjtBQUFBLElBQ0EsV0FBVztBQUFBLE1BQ1YsT0FBTyxTQUFPLE9BQU8sY0FBYyxPQUFPLGFBQWEsR0FBRyxDQUFDO0FBQUEsTUFDM0QsWUFBWTtBQUFBLElBQ2I7QUFBQSxFQUNELENBQUM7QUFFRCxTQUFPO0FBQ1I7QUFFQSxJQUFNLGFBQWEsZUFBZTtBQUVsQyxJQUFPLHNCQUFROzs7QUM5TmYsMEJBQW9CO0FBQ3BCLHFCQUFlO0FBQ2Ysc0JBQWdCO0FBSWhCLFNBQVMsUUFBUSxNQUFNLE9BQU8sV0FBVyxPQUFPLFdBQVcsS0FBSyxPQUFPLG9CQUFBQyxRQUFRLE1BQU07QUFDcEYsUUFBTSxTQUFTLEtBQUssV0FBVyxHQUFHLElBQUksS0FBTSxLQUFLLFdBQVcsSUFBSSxNQUFNO0FBQ3RFLFFBQU0sV0FBVyxLQUFLLFFBQVEsU0FBUyxJQUFJO0FBQzNDLFFBQU0scUJBQXFCLEtBQUssUUFBUSxJQUFJO0FBQzVDLFNBQU8sYUFBYSxPQUFPLHVCQUF1QixNQUFNLFdBQVc7QUFDcEU7QUFFQSxJQUFNLEVBQUMsSUFBRyxJQUFJLG9CQUFBQTtBQUVkLElBQUk7QUFDSixJQUNDLFFBQVEsVUFBVSxLQUNmLFFBQVEsV0FBVyxLQUNuQixRQUFRLGFBQWEsS0FDckIsUUFBUSxhQUFhLEdBQ3ZCO0FBQ0QsbUJBQWlCO0FBQ2xCLFdBQ0MsUUFBUSxPQUFPLEtBQ1osUUFBUSxRQUFRLEtBQ2hCLFFBQVEsWUFBWSxLQUNwQixRQUFRLGNBQWMsR0FDeEI7QUFDRCxtQkFBaUI7QUFDbEI7QUFFQSxTQUFTLGdCQUFnQjtBQUN4QixNQUFJLGlCQUFpQixLQUFLO0FBQ3pCLFFBQUksSUFBSSxnQkFBZ0IsUUFBUTtBQUMvQixhQUFPO0FBQUEsSUFDUjtBQUVBLFFBQUksSUFBSSxnQkFBZ0IsU0FBUztBQUNoQyxhQUFPO0FBQUEsSUFDUjtBQUVBLFdBQU8sSUFBSSxZQUFZLFdBQVcsSUFBSSxJQUFJLEtBQUssSUFBSSxPQUFPLFNBQVMsSUFBSSxhQUFhLEVBQUUsR0FBRyxDQUFDO0FBQUEsRUFDM0Y7QUFDRDtBQUVBLFNBQVMsZUFBZSxPQUFPO0FBQzlCLE1BQUksVUFBVSxHQUFHO0FBQ2hCLFdBQU87QUFBQSxFQUNSO0FBRUEsU0FBTztBQUFBLElBQ047QUFBQSxJQUNBLFVBQVU7QUFBQSxJQUNWLFFBQVEsU0FBUztBQUFBLElBQ2pCLFFBQVEsU0FBUztBQUFBLEVBQ2xCO0FBQ0Q7QUFFQSxTQUFTLGVBQWUsWUFBWSxFQUFDLGFBQWEsYUFBYSxLQUFJLElBQUksQ0FBQyxHQUFHO0FBQzFFLFFBQU0sbUJBQW1CLGNBQWM7QUFDdkMsTUFBSSxxQkFBcUIsUUFBVztBQUNuQyxxQkFBaUI7QUFBQSxFQUNsQjtBQUVBLFFBQU0sYUFBYSxhQUFhLGlCQUFpQjtBQUVqRCxNQUFJLGVBQWUsR0FBRztBQUNyQixXQUFPO0FBQUEsRUFDUjtBQUVBLE1BQUksWUFBWTtBQUNmLFFBQUksUUFBUSxXQUFXLEtBQ25CLFFBQVEsWUFBWSxLQUNwQixRQUFRLGlCQUFpQixHQUFHO0FBQy9CLGFBQU87QUFBQSxJQUNSO0FBRUEsUUFBSSxRQUFRLFdBQVcsR0FBRztBQUN6QixhQUFPO0FBQUEsSUFDUjtBQUFBLEVBQ0Q7QUFJQSxNQUFJLGNBQWMsT0FBTyxnQkFBZ0IsS0FBSztBQUM3QyxXQUFPO0FBQUEsRUFDUjtBQUVBLE1BQUksY0FBYyxDQUFDLGVBQWUsZUFBZSxRQUFXO0FBQzNELFdBQU87QUFBQSxFQUNSO0FBRUEsUUFBTSxNQUFNLGNBQWM7QUFFMUIsTUFBSSxJQUFJLFNBQVMsUUFBUTtBQUN4QixXQUFPO0FBQUEsRUFDUjtBQUVBLE1BQUksb0JBQUFBLFFBQVEsYUFBYSxTQUFTO0FBR2pDLFVBQU0sWUFBWSxlQUFBQyxRQUFHLFFBQVEsRUFBRSxNQUFNLEdBQUc7QUFDeEMsUUFDQyxPQUFPLFVBQVUsQ0FBQyxDQUFDLEtBQUssTUFDckIsT0FBTyxVQUFVLENBQUMsQ0FBQyxLQUFLLE9BQzFCO0FBQ0QsYUFBTyxPQUFPLFVBQVUsQ0FBQyxDQUFDLEtBQUssUUFBUyxJQUFJO0FBQUEsSUFDN0M7QUFFQSxXQUFPO0FBQUEsRUFDUjtBQUVBLE1BQUksUUFBUSxLQUFLO0FBQ2hCLFFBQUksb0JBQW9CLE9BQU8sbUJBQW1CLEtBQUs7QUFDdEQsYUFBTztBQUFBLElBQ1I7QUFFQSxRQUFJLENBQUMsVUFBVSxZQUFZLFlBQVksYUFBYSxhQUFhLE9BQU8sRUFBRSxLQUFLLFVBQVEsUUFBUSxHQUFHLEtBQUssSUFBSSxZQUFZLFlBQVk7QUFDbEksYUFBTztBQUFBLElBQ1I7QUFFQSxXQUFPO0FBQUEsRUFDUjtBQUVBLE1BQUksc0JBQXNCLEtBQUs7QUFDOUIsV0FBTyxnQ0FBZ0MsS0FBSyxJQUFJLGdCQUFnQixJQUFJLElBQUk7QUFBQSxFQUN6RTtBQUVBLE1BQUksSUFBSSxjQUFjLGFBQWE7QUFDbEMsV0FBTztBQUFBLEVBQ1I7QUFFQSxNQUFJLElBQUksU0FBUyxlQUFlO0FBQy9CLFdBQU87QUFBQSxFQUNSO0FBRUEsTUFBSSxrQkFBa0IsS0FBSztBQUMxQixVQUFNQyxXQUFVLE9BQU8sVUFBVSxJQUFJLHdCQUF3QixJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFO0FBRWxGLFlBQVEsSUFBSSxjQUFjO0FBQUEsTUFDekIsS0FBSyxhQUFhO0FBQ2pCLGVBQU9BLFlBQVcsSUFBSSxJQUFJO0FBQUEsTUFDM0I7QUFBQSxNQUVBLEtBQUssa0JBQWtCO0FBQ3RCLGVBQU87QUFBQSxNQUNSO0FBQUEsSUFFRDtBQUFBLEVBQ0Q7QUFFQSxNQUFJLGlCQUFpQixLQUFLLElBQUksSUFBSSxHQUFHO0FBQ3BDLFdBQU87QUFBQSxFQUNSO0FBRUEsTUFBSSw4REFBOEQsS0FBSyxJQUFJLElBQUksR0FBRztBQUNqRixXQUFPO0FBQUEsRUFDUjtBQUVBLE1BQUksZUFBZSxLQUFLO0FBQ3ZCLFdBQU87QUFBQSxFQUNSO0FBRUEsU0FBTztBQUNSO0FBRU8sU0FBUyxvQkFBb0IsUUFBUSxVQUFVLENBQUMsR0FBRztBQUN6RCxRQUFNLFFBQVEsZUFBZSxRQUFRO0FBQUEsSUFDcEMsYUFBYSxVQUFVLE9BQU87QUFBQSxJQUM5QixHQUFHO0FBQUEsRUFDSixDQUFDO0FBRUQsU0FBTyxlQUFlLEtBQUs7QUFDNUI7QUFFQSxJQUFNLGdCQUFnQjtBQUFBLEVBQ3JCLFFBQVEsb0JBQW9CLEVBQUMsT0FBTyxnQkFBQUMsUUFBSSxPQUFPLENBQUMsRUFBQyxDQUFDO0FBQUEsRUFDbEQsUUFBUSxvQkFBb0IsRUFBQyxPQUFPLGdCQUFBQSxRQUFJLE9BQU8sQ0FBQyxFQUFDLENBQUM7QUFDbkQ7QUFFQSxJQUFPLHlCQUFROzs7QUNwTFIsU0FBUyxpQkFBaUIsUUFBUSxXQUFXLFVBQVU7QUFDN0QsTUFBSSxRQUFRLE9BQU8sUUFBUSxTQUFTO0FBQ3BDLE1BQUksVUFBVSxJQUFJO0FBQ2pCLFdBQU87QUFBQSxFQUNSO0FBRUEsUUFBTSxrQkFBa0IsVUFBVTtBQUNsQyxNQUFJLFdBQVc7QUFDZixNQUFJLGNBQWM7QUFDbEIsS0FBRztBQUNGLG1CQUFlLE9BQU8sTUFBTSxVQUFVLEtBQUssSUFBSSxZQUFZO0FBQzNELGVBQVcsUUFBUTtBQUNuQixZQUFRLE9BQU8sUUFBUSxXQUFXLFFBQVE7QUFBQSxFQUMzQyxTQUFTLFVBQVU7QUFFbkIsaUJBQWUsT0FBTyxNQUFNLFFBQVE7QUFDcEMsU0FBTztBQUNSO0FBRU8sU0FBUywrQkFBK0IsUUFBUSxRQUFRLFNBQVMsT0FBTztBQUM5RSxNQUFJLFdBQVc7QUFDZixNQUFJLGNBQWM7QUFDbEIsS0FBRztBQUNGLFVBQU0sUUFBUSxPQUFPLFFBQVEsQ0FBQyxNQUFNO0FBQ3BDLG1CQUFlLE9BQU8sTUFBTSxVQUFXLFFBQVEsUUFBUSxJQUFJLEtBQU0sSUFBSSxVQUFVLFFBQVEsU0FBUyxRQUFRO0FBQ3hHLGVBQVcsUUFBUTtBQUNuQixZQUFRLE9BQU8sUUFBUSxNQUFNLFFBQVE7QUFBQSxFQUN0QyxTQUFTLFVBQVU7QUFFbkIsaUJBQWUsT0FBTyxNQUFNLFFBQVE7QUFDcEMsU0FBTztBQUNSOzs7QUN6QkEsSUFBTSxFQUFDLFFBQVEsYUFBYSxRQUFRLFlBQVcsSUFBSTtBQUVuRCxJQUFNLFlBQVksT0FBTyxXQUFXO0FBQ3BDLElBQU0sU0FBUyxPQUFPLFFBQVE7QUFDOUIsSUFBTSxXQUFXLE9BQU8sVUFBVTtBQUdsQyxJQUFNLGVBQWU7QUFBQSxFQUNwQjtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUNEO0FBRUEsSUFBTUMsVUFBUyx1QkFBTyxPQUFPLElBQUk7QUFFakMsSUFBTSxlQUFlLENBQUMsUUFBUSxVQUFVLENBQUMsTUFBTTtBQUM5QyxNQUFJLFFBQVEsU0FBUyxFQUFFLE9BQU8sVUFBVSxRQUFRLEtBQUssS0FBSyxRQUFRLFNBQVMsS0FBSyxRQUFRLFNBQVMsSUFBSTtBQUNwRyxVQUFNLElBQUksTUFBTSxxREFBcUQ7QUFBQSxFQUN0RTtBQUdBLFFBQU0sYUFBYSxjQUFjLFlBQVksUUFBUTtBQUNyRCxTQUFPLFFBQVEsUUFBUSxVQUFVLFNBQVksYUFBYSxRQUFRO0FBQ25FO0FBU0EsSUFBTSxlQUFlLGFBQVc7QUFDL0IsUUFBTUMsU0FBUSxJQUFJLFlBQVksUUFBUSxLQUFLLEdBQUc7QUFDOUMsZUFBYUEsUUFBTyxPQUFPO0FBRTNCLFNBQU8sZUFBZUEsUUFBTyxZQUFZLFNBQVM7QUFFbEQsU0FBT0E7QUFDUjtBQUVBLFNBQVMsWUFBWSxTQUFTO0FBQzdCLFNBQU8sYUFBYSxPQUFPO0FBQzVCO0FBRUEsT0FBTyxlQUFlLFlBQVksV0FBVyxTQUFTLFNBQVM7QUFFL0QsV0FBVyxDQUFDLFdBQVcsS0FBSyxLQUFLLE9BQU8sUUFBUSxtQkFBVSxHQUFHO0FBQzVELEVBQUFDLFFBQU8sU0FBUyxJQUFJO0FBQUEsSUFDbkIsTUFBTTtBQUNMLFlBQU0sVUFBVSxjQUFjLE1BQU0sYUFBYSxNQUFNLE1BQU0sTUFBTSxPQUFPLEtBQUssTUFBTSxDQUFDLEdBQUcsS0FBSyxRQUFRLENBQUM7QUFDdkcsYUFBTyxlQUFlLE1BQU0sV0FBVyxFQUFDLE9BQU8sUUFBTyxDQUFDO0FBQ3ZELGFBQU87QUFBQSxJQUNSO0FBQUEsRUFDRDtBQUNEO0FBRUFBLFFBQU8sVUFBVTtBQUFBLEVBQ2hCLE1BQU07QUFDTCxVQUFNLFVBQVUsY0FBYyxNQUFNLEtBQUssTUFBTSxHQUFHLElBQUk7QUFDdEQsV0FBTyxlQUFlLE1BQU0sV0FBVyxFQUFDLE9BQU8sUUFBTyxDQUFDO0FBQ3ZELFdBQU87QUFBQSxFQUNSO0FBQ0Q7QUFFQSxJQUFNLGVBQWUsQ0FBQyxPQUFPLE9BQU8sU0FBUyxlQUFlO0FBQzNELE1BQUksVUFBVSxPQUFPO0FBQ3BCLFFBQUksVUFBVSxXQUFXO0FBQ3hCLGFBQU8sb0JBQVcsSUFBSSxFQUFFLFFBQVEsR0FBRyxVQUFVO0FBQUEsSUFDOUM7QUFFQSxRQUFJLFVBQVUsV0FBVztBQUN4QixhQUFPLG9CQUFXLElBQUksRUFBRSxRQUFRLG9CQUFXLGFBQWEsR0FBRyxVQUFVLENBQUM7QUFBQSxJQUN2RTtBQUVBLFdBQU8sb0JBQVcsSUFBSSxFQUFFLEtBQUssb0JBQVcsVUFBVSxHQUFHLFVBQVUsQ0FBQztBQUFBLEVBQ2pFO0FBRUEsTUFBSSxVQUFVLE9BQU87QUFDcEIsV0FBTyxhQUFhLE9BQU8sT0FBTyxNQUFNLEdBQUcsb0JBQVcsU0FBUyxHQUFHLFVBQVUsQ0FBQztBQUFBLEVBQzlFO0FBRUEsU0FBTyxvQkFBVyxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsVUFBVTtBQUM3QztBQUVBLElBQU0sYUFBYSxDQUFDLE9BQU8sT0FBTyxTQUFTO0FBRTNDLFdBQVcsU0FBUyxZQUFZO0FBQy9CLEVBQUFBLFFBQU8sS0FBSyxJQUFJO0FBQUEsSUFDZixNQUFNO0FBQ0wsWUFBTSxFQUFDLE1BQUssSUFBSTtBQUNoQixhQUFPLFlBQWEsWUFBWTtBQUMvQixjQUFNLFNBQVMsYUFBYSxhQUFhLE9BQU8sYUFBYSxLQUFLLEdBQUcsU0FBUyxHQUFHLFVBQVUsR0FBRyxvQkFBVyxNQUFNLE9BQU8sS0FBSyxNQUFNLENBQUM7QUFDbEksZUFBTyxjQUFjLE1BQU0sUUFBUSxLQUFLLFFBQVEsQ0FBQztBQUFBLE1BQ2xEO0FBQUEsSUFDRDtBQUFBLEVBQ0Q7QUFFQSxRQUFNLFVBQVUsT0FBTyxNQUFNLENBQUMsRUFBRSxZQUFZLElBQUksTUFBTSxNQUFNLENBQUM7QUFDN0QsRUFBQUEsUUFBTyxPQUFPLElBQUk7QUFBQSxJQUNqQixNQUFNO0FBQ0wsWUFBTSxFQUFDLE1BQUssSUFBSTtBQUNoQixhQUFPLFlBQWEsWUFBWTtBQUMvQixjQUFNLFNBQVMsYUFBYSxhQUFhLE9BQU8sYUFBYSxLQUFLLEdBQUcsV0FBVyxHQUFHLFVBQVUsR0FBRyxvQkFBVyxRQUFRLE9BQU8sS0FBSyxNQUFNLENBQUM7QUFDdEksZUFBTyxjQUFjLE1BQU0sUUFBUSxLQUFLLFFBQVEsQ0FBQztBQUFBLE1BQ2xEO0FBQUEsSUFDRDtBQUFBLEVBQ0Q7QUFDRDtBQUVBLElBQU0sUUFBUSxPQUFPLGlCQUFpQixNQUFNO0FBQUMsR0FBRztBQUFBLEVBQy9DLEdBQUdBO0FBQUEsRUFDSCxPQUFPO0FBQUEsSUFDTixZQUFZO0FBQUEsSUFDWixNQUFNO0FBQ0wsYUFBTyxLQUFLLFNBQVMsRUFBRTtBQUFBLElBQ3hCO0FBQUEsSUFDQSxJQUFJLE9BQU87QUFDVixXQUFLLFNBQVMsRUFBRSxRQUFRO0FBQUEsSUFDekI7QUFBQSxFQUNEO0FBQ0QsQ0FBQztBQUVELElBQU0sZUFBZSxDQUFDLE1BQU0sT0FBTyxXQUFXO0FBQzdDLE1BQUk7QUFDSixNQUFJO0FBQ0osTUFBSSxXQUFXLFFBQVc7QUFDekIsY0FBVTtBQUNWLGVBQVc7QUFBQSxFQUNaLE9BQU87QUFDTixjQUFVLE9BQU8sVUFBVTtBQUMzQixlQUFXLFFBQVEsT0FBTztBQUFBLEVBQzNCO0FBRUEsU0FBTztBQUFBLElBQ047QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsRUFDRDtBQUNEO0FBRUEsSUFBTSxnQkFBZ0IsQ0FBQ0MsT0FBTSxTQUFTLGFBQWE7QUFHbEQsUUFBTSxVQUFVLElBQUksZUFBZSxXQUFXLFNBQVUsV0FBVyxXQUFXLElBQU0sS0FBSyxXQUFXLENBQUMsSUFBSyxXQUFXLEtBQUssR0FBRyxDQUFDO0FBSTlILFNBQU8sZUFBZSxTQUFTLEtBQUs7QUFFcEMsVUFBUSxTQUFTLElBQUlBO0FBQ3JCLFVBQVEsTUFBTSxJQUFJO0FBQ2xCLFVBQVEsUUFBUSxJQUFJO0FBRXBCLFNBQU87QUFDUjtBQUVBLElBQU0sYUFBYSxDQUFDQSxPQUFNLFdBQVc7QUFDcEMsTUFBSUEsTUFBSyxTQUFTLEtBQUssQ0FBQyxRQUFRO0FBQy9CLFdBQU9BLE1BQUssUUFBUSxJQUFJLEtBQUs7QUFBQSxFQUM5QjtBQUVBLE1BQUksU0FBU0EsTUFBSyxNQUFNO0FBRXhCLE1BQUksV0FBVyxRQUFXO0FBQ3pCLFdBQU87QUFBQSxFQUNSO0FBRUEsUUFBTSxFQUFDLFNBQVMsU0FBUSxJQUFJO0FBQzVCLE1BQUksT0FBTyxTQUFTLE1BQVEsR0FBRztBQUM5QixXQUFPLFdBQVcsUUFBVztBQUk1QixlQUFTLGlCQUFpQixRQUFRLE9BQU8sT0FBTyxPQUFPLElBQUk7QUFFM0QsZUFBUyxPQUFPO0FBQUEsSUFDakI7QUFBQSxFQUNEO0FBS0EsUUFBTSxVQUFVLE9BQU8sUUFBUSxJQUFJO0FBQ25DLE1BQUksWUFBWSxJQUFJO0FBQ25CLGFBQVMsK0JBQStCLFFBQVEsVUFBVSxTQUFTLE9BQU87QUFBQSxFQUMzRTtBQUVBLFNBQU8sVUFBVSxTQUFTO0FBQzNCO0FBRUEsT0FBTyxpQkFBaUIsWUFBWSxXQUFXRCxPQUFNO0FBRXJELElBQU0sUUFBUSxZQUFZO0FBQ25CLElBQU0sY0FBYyxZQUFZLEVBQUMsT0FBTyxjQUFjLFlBQVksUUFBUSxFQUFDLENBQUM7QUFvQm5GLElBQU8saUJBQVE7OztBQ2hPZixJQUFBRSx1QkFBb0I7OztBQ0FwQixJQUFBQyx1QkFBb0I7QUFDcEIscUJBQW9CO0FBQ3BCLHlCQUF1QjtBQUV2QixJQUFNLG9CQUFnQixlQUFBQyxTQUFRLE1BQU07QUFDbkMseUJBQUFDLFNBQVcsTUFBTTtBQUNoQix5QkFBQUMsUUFBUSxPQUFPLE1BQU0sV0FBYTtBQUFBLEVBQ25DLEdBQUcsRUFBQyxZQUFZLEtBQUksQ0FBQztBQUN0QixDQUFDO0FBRUQsSUFBTyx5QkFBUTs7O0FEUGYsSUFBSSxXQUFXO0FBRWYsSUFBTSxZQUFZLENBQUM7QUFFbkIsVUFBVSxPQUFPLENBQUMsaUJBQWlCLHFCQUFBQyxRQUFRLFdBQVc7QUFDckQsTUFBSSxDQUFDLGVBQWUsT0FBTztBQUMxQjtBQUFBLEVBQ0Q7QUFFQSxhQUFXO0FBQ1gsaUJBQWUsTUFBTSxXQUFhO0FBQ25DO0FBRUEsVUFBVSxPQUFPLENBQUMsaUJBQWlCLHFCQUFBQSxRQUFRLFdBQVc7QUFDckQsTUFBSSxDQUFDLGVBQWUsT0FBTztBQUMxQjtBQUFBLEVBQ0Q7QUFFQSx5QkFBYztBQUNkLGFBQVc7QUFDWCxpQkFBZSxNQUFNLFdBQWE7QUFDbkM7QUFFQSxVQUFVLFNBQVMsQ0FBQyxPQUFPLG1CQUFtQjtBQUM3QyxNQUFJLFVBQVUsUUFBVztBQUN4QixlQUFXO0FBQUEsRUFDWjtBQUVBLE1BQUksVUFBVTtBQUNiLGNBQVUsS0FBSyxjQUFjO0FBQUEsRUFDOUIsT0FBTztBQUNOLGNBQVUsS0FBSyxjQUFjO0FBQUEsRUFDOUI7QUFDRDtBQUVBLElBQU8scUJBQVE7OztBTG5DZiwwQkFBd0I7OztBT0h4QixJQUFBQyx1QkFBb0I7QUFFTCxTQUFSLHFCQUFzQztBQUM1QyxNQUFJLHFCQUFBQyxRQUFRLGFBQWEsU0FBUztBQUNqQyxXQUFPLHFCQUFBQSxRQUFRLElBQUksU0FBUztBQUFBLEVBQzdCO0FBRUEsU0FBTyxRQUFRLHFCQUFBQSxRQUFRLElBQUksRUFBRSxLQUN6QixRQUFRLHFCQUFBQSxRQUFRLElBQUksVUFBVSxLQUM5QixRQUFRLHFCQUFBQSxRQUFRLElBQUksZ0JBQWdCLEtBQ3BDLHFCQUFBQSxRQUFRLElBQUksZUFBZSxrQkFDM0IscUJBQUFBLFFBQVEsSUFBSSxpQkFBaUIsc0JBQzdCLHFCQUFBQSxRQUFRLElBQUksaUJBQWlCLFlBQzdCLHFCQUFBQSxRQUFRLElBQUksU0FBUyxvQkFDckIscUJBQUFBLFFBQVEsSUFBSSxTQUFTLGVBQ3JCLHFCQUFBQSxRQUFRLElBQUksc0JBQXNCO0FBQ3ZDOzs7QUNiQSxJQUFNLE9BQU87QUFBQSxFQUNaLE1BQU0sZUFBTSxLQUFLLFFBQUc7QUFBQSxFQUNwQixTQUFTLGVBQU0sTUFBTSxRQUFHO0FBQUEsRUFDeEIsU0FBUyxlQUFNLE9BQU8sUUFBRztBQUFBLEVBQ3pCLE9BQU8sZUFBTSxJQUFJLFFBQUc7QUFDckI7QUFFQSxJQUFNLFdBQVc7QUFBQSxFQUNoQixNQUFNLGVBQU0sS0FBSyxHQUFHO0FBQUEsRUFDcEIsU0FBUyxlQUFNLE1BQU0sUUFBRztBQUFBLEVBQ3hCLFNBQVMsZUFBTSxPQUFPLFFBQUc7QUFBQSxFQUN6QixPQUFPLGVBQU0sSUFBSSxNQUFHO0FBQ3JCO0FBRUEsSUFBTSxhQUFhLG1CQUFtQixJQUFJLE9BQU87QUFFakQsSUFBTyxzQkFBUTs7O0FDbkJBLFNBQVIsVUFBMkIsRUFBQyxZQUFZLE1BQUssSUFBSSxDQUFDLEdBQUc7QUFDM0QsUUFBTSxVQUFVO0FBQUEsSUFDWjtBQUFBLElBQ0g7QUFBQSxFQUNELEVBQUUsS0FBSyxHQUFHO0FBRVYsU0FBTyxJQUFJLE9BQU8sU0FBUyxZQUFZLFNBQVksR0FBRztBQUN2RDs7O0FDTEEsSUFBTSxRQUFRLFVBQVU7QUFFVCxTQUFSLFVBQTJCLFFBQVE7QUFDekMsTUFBSSxPQUFPLFdBQVcsVUFBVTtBQUMvQixVQUFNLElBQUksVUFBVSxnQ0FBZ0MsT0FBTyxNQUFNLElBQUk7QUFBQSxFQUN0RTtBQUtBLFNBQU8sT0FBTyxRQUFRLE9BQU8sRUFBRTtBQUNoQzs7O0FDWkEsNEJBQTJCOzs7QUNEM0IsSUFBTyxzQkFBUSxNQUFNO0FBRXBCLFNBQU87QUFDUjs7O0FEQ2UsU0FBUixZQUE2QixRQUFRLFNBQVM7QUFDcEQsTUFBSSxPQUFPLFdBQVcsWUFBWSxPQUFPLFdBQVcsR0FBRztBQUN0RCxXQUFPO0FBQUEsRUFDUjtBQUVBLFlBQVU7QUFBQSxJQUNULG1CQUFtQjtBQUFBLElBQ25CLHNCQUFzQjtBQUFBLElBQ3RCLEdBQUc7QUFBQSxFQUNKO0FBRUEsTUFBSSxDQUFDLFFBQVEsc0JBQXNCO0FBQ2xDLGFBQVMsVUFBVSxNQUFNO0FBQUEsRUFDMUI7QUFFQSxNQUFJLE9BQU8sV0FBVyxHQUFHO0FBQ3hCLFdBQU87QUFBQSxFQUNSO0FBRUEsUUFBTSwwQkFBMEIsUUFBUSxvQkFBb0IsSUFBSTtBQUNoRSxNQUFJLFFBQVE7QUFFWixhQUFXLEVBQUMsU0FBUyxVQUFTLEtBQUssSUFBSSxLQUFLLFVBQVUsRUFBRSxRQUFRLE1BQU0sR0FBRztBQUN4RSxVQUFNLFlBQVksVUFBVSxZQUFZLENBQUM7QUFHekMsUUFBSSxhQUFhLE1BQVMsYUFBYSxPQUFRLGFBQWEsS0FBTztBQUNsRTtBQUFBLElBQ0Q7QUFHQSxRQUFJLGFBQWEsT0FBVSxhQUFhLEtBQVE7QUFDL0M7QUFBQSxJQUNEO0FBRUEsUUFBSSxvQkFBVyxFQUFFLEtBQUssU0FBUyxHQUFHO0FBQ2pDLGVBQVM7QUFDVDtBQUFBLElBQ0Q7QUFFQSxVQUFNLE9BQU8sc0JBQUFDLFFBQWUsZUFBZSxTQUFTO0FBQ3BELFlBQVEsTUFBTTtBQUFBLE1BQ2IsS0FBSztBQUFBLE1BQ0wsS0FBSyxLQUFLO0FBQ1QsaUJBQVM7QUFDVDtBQUFBLE1BQ0Q7QUFBQSxNQUVBLEtBQUssS0FBSztBQUNULGlCQUFTO0FBQ1Q7QUFBQSxNQUNEO0FBQUEsTUFFQSxTQUFTO0FBQ1IsaUJBQVM7QUFBQSxNQUNWO0FBQUEsSUFDRDtBQUFBLEVBQ0Q7QUFFQSxTQUFPO0FBQ1I7OztBRWhFZSxTQUFSLGNBQStCLEVBQUMsU0FBUyxRQUFRLE9BQU0sSUFBSSxDQUFDLEdBQUc7QUFDckUsU0FBTztBQUFBLElBQ04sVUFBVSxPQUFPLFNBQ2pCLFFBQVEsSUFBSSxTQUFTLFVBQ3JCLEVBQUUsUUFBUSxRQUFRO0FBQUEsRUFDbkI7QUFDRDs7O0FDTkEsSUFBQUMsdUJBQW9CO0FBQ3BCLDJCQUFxQjtBQUNyQixnQkFBK0I7QUFFL0IsSUFBTSxpQkFBaUI7QUFFdkIsSUFBTSxpQkFBTixNQUFxQjtBQUFBLEVBQ3BCLFlBQVk7QUFBQSxFQUNaLGVBQWUsSUFBSSwyQkFBaUI7QUFBQSxFQUNwQztBQUFBLEVBQ0E7QUFBQSxFQUVBLGNBQWM7QUFDYixTQUFLLGFBQWEsS0FBSyxxQkFBQUMsUUFBUSxNQUFNO0FBRXJDLFVBQU1DLFFBQU87QUFDYixTQUFLLFdBQVcsU0FBVSxPQUFPLFNBQVMsWUFBWTtBQUNyRCxZQUFNLEVBQUMsTUFBSyxJQUFJLHFCQUFBRDtBQUNoQixVQUFJQyxNQUFLLFlBQVksS0FBSyxNQUFNLFNBQVNBLE1BQUssVUFBVTtBQUN2RCxZQUFJLFVBQVUsWUFBWTtBQUN6QjtBQUFBLFFBQ0Q7QUFFQSxZQUFJLFVBQVUsVUFBVSxLQUFLLFNBQVMsY0FBYyxHQUFHO0FBQ3RELCtCQUFBRCxRQUFRLEtBQUssUUFBUTtBQUFBLFFBQ3RCO0FBRUEsZ0JBQVEsTUFBTUMsTUFBSyxVQUFVLE1BQU0sQ0FBQyxPQUFPLE1BQU0sR0FBRyxVQUFVLENBQUM7QUFBQSxNQUNoRSxPQUFPO0FBQ04sZ0JBQVEsTUFBTSxxQkFBQUQsUUFBUSxNQUFNLE1BQU0sTUFBTSxDQUFDLE9BQU8sTUFBTSxHQUFHLFVBQVUsQ0FBQztBQUFBLE1BQ3JFO0FBQUEsSUFDRDtBQUFBLEVBQ0Q7QUFBQSxFQUVBLFFBQVE7QUFDUCxTQUFLO0FBRUwsUUFBSSxLQUFLLGNBQWMsR0FBRztBQUN6QixXQUFLLFdBQVc7QUFBQSxJQUNqQjtBQUFBLEVBQ0Q7QUFBQSxFQUVBLE9BQU87QUFDTixRQUFJLEtBQUssYUFBYSxHQUFHO0FBQ3hCLFlBQU0sSUFBSSxNQUFNLHVDQUF1QztBQUFBLElBQ3hEO0FBRUEsU0FBSztBQUVMLFFBQUksS0FBSyxjQUFjLEdBQUc7QUFDekIsV0FBSyxVQUFVO0FBQUEsSUFDaEI7QUFBQSxFQUNEO0FBQUE7QUFBQSxFQUdBLGFBQWE7QUFFWixRQUFJLHFCQUFBQSxRQUFRLGFBQWEsU0FBUztBQUNqQztBQUFBLElBQ0Q7QUFFQSxTQUFLLE1BQU0scUJBQUFFLFFBQVMsZ0JBQWdCO0FBQUEsTUFDbkMsT0FBTyxxQkFBQUYsUUFBUTtBQUFBLE1BQ2YsUUFBUSxLQUFLO0FBQUEsSUFDZCxDQUFDO0FBRUQsU0FBSyxJQUFJLEdBQUcsVUFBVSxNQUFNO0FBQzNCLFVBQUkscUJBQUFBLFFBQVEsY0FBYyxRQUFRLE1BQU0sR0FBRztBQUMxQyw2QkFBQUEsUUFBUSxLQUFLLFFBQVE7QUFBQSxNQUN0QixPQUFPO0FBQ04sYUFBSyxJQUFJLE1BQU07QUFDZiw2QkFBQUEsUUFBUSxLQUFLLHFCQUFBQSxRQUFRLEtBQUssUUFBUTtBQUFBLE1BQ25DO0FBQUEsSUFDRCxDQUFDO0FBQUEsRUFDRjtBQUFBLEVBRUEsWUFBWTtBQUNYLFFBQUkscUJBQUFBLFFBQVEsYUFBYSxTQUFTO0FBQ2pDO0FBQUEsSUFDRDtBQUVBLFNBQUssSUFBSSxNQUFNO0FBQ2YsU0FBSyxNQUFNO0FBQUEsRUFDWjtBQUNEO0FBRUEsSUFBTSxpQkFBaUIsSUFBSSxlQUFlO0FBRTFDLElBQU8sMEJBQVE7OztBZHVVZixJQUFBRyx1QkFBa0M7QUFwWmxDLElBQU0sTUFBTixNQUFVO0FBQUEsRUFDVCxnQkFBZ0I7QUFBQSxFQUNoQixxQkFBcUI7QUFBQSxFQUNyQixhQUFhO0FBQUEsRUFDYixjQUFjO0FBQUEsRUFDZDtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUVBO0FBQUEsRUFFQSxZQUFZLFNBQVM7QUFDcEIsUUFBSSxPQUFPLFlBQVksVUFBVTtBQUNoQyxnQkFBVTtBQUFBLFFBQ1QsTUFBTTtBQUFBLE1BQ1A7QUFBQSxJQUNEO0FBRUEsU0FBSyxXQUFXO0FBQUEsTUFDZixPQUFPO0FBQUEsTUFDUCxRQUFRLHFCQUFBQyxRQUFRO0FBQUEsTUFDaEIsY0FBYztBQUFBLE1BQ2QsWUFBWTtBQUFBLE1BQ1osR0FBRztBQUFBLElBQ0o7QUFHQSxTQUFLLFFBQVEsS0FBSyxTQUFTO0FBRzNCLFNBQUssVUFBVSxLQUFLLFNBQVM7QUFFN0IsU0FBSyxtQkFBbUIsS0FBSyxTQUFTO0FBQ3RDLFNBQUssVUFBVSxLQUFLLFNBQVM7QUFDN0IsU0FBSyxhQUFhLE9BQU8sS0FBSyxTQUFTLGNBQWMsWUFBWSxLQUFLLFNBQVMsWUFBWSxjQUFjLEVBQUMsUUFBUSxLQUFLLFFBQU8sQ0FBQztBQUMvSCxTQUFLLFlBQVksT0FBTyxLQUFLLFNBQVMsYUFBYSxZQUFZLEtBQUssU0FBUyxXQUFXO0FBSXhGLFNBQUssT0FBTyxLQUFLLFNBQVM7QUFDMUIsU0FBSyxhQUFhLEtBQUssU0FBUztBQUNoQyxTQUFLLGFBQWEsS0FBSyxTQUFTO0FBQ2hDLFNBQUssU0FBUyxLQUFLLFNBQVM7QUFFNUIsUUFBSSxxQkFBQUEsUUFBUSxJQUFJLGFBQWEsUUFBUTtBQUNwQyxXQUFLLFVBQVUsS0FBSztBQUNwQixXQUFLLGFBQWEsS0FBSztBQUV2QixhQUFPLGVBQWUsTUFBTSxpQkFBaUI7QUFBQSxRQUM1QyxNQUFNO0FBQ0wsaUJBQU8sS0FBSztBQUFBLFFBQ2I7QUFBQSxRQUNBLElBQUksVUFBVTtBQUNiLGVBQUssZ0JBQWdCO0FBQUEsUUFDdEI7QUFBQSxNQUNELENBQUM7QUFFRCxhQUFPLGVBQWUsTUFBTSxlQUFlO0FBQUEsUUFDMUMsTUFBTTtBQUNMLGlCQUFPLEtBQUs7QUFBQSxRQUNiO0FBQUEsTUFDRCxDQUFDO0FBRUQsYUFBTyxlQUFlLE1BQU0sY0FBYztBQUFBLFFBQ3pDLE1BQU07QUFDTCxpQkFBTyxLQUFLO0FBQUEsUUFDYjtBQUFBLE1BQ0QsQ0FBQztBQUFBLElBQ0Y7QUFBQSxFQUNEO0FBQUEsRUFFQSxJQUFJLFNBQVM7QUFDWixXQUFPLEtBQUs7QUFBQSxFQUNiO0FBQUEsRUFFQSxJQUFJLE9BQU8sU0FBUyxHQUFHO0FBQ3RCLFFBQUksRUFBRSxVQUFVLEtBQUssT0FBTyxVQUFVLE1BQU0sSUFBSTtBQUMvQyxZQUFNLElBQUksTUFBTSxzREFBc0Q7QUFBQSxJQUN2RTtBQUVBLFNBQUssVUFBVTtBQUNmLFNBQUssaUJBQWlCO0FBQUEsRUFDdkI7QUFBQSxFQUVBLElBQUksV0FBVztBQUNkLFdBQU8sS0FBSyxvQkFBb0IsS0FBSyxTQUFTLFlBQVk7QUFBQSxFQUMzRDtBQUFBLEVBRUEsSUFBSSxVQUFVO0FBQ2IsV0FBTyxLQUFLO0FBQUEsRUFDYjtBQUFBLEVBRUEsSUFBSSxRQUFRLFNBQVM7QUFDcEIsU0FBSyxjQUFjO0FBQ25CLFNBQUssbUJBQW1CO0FBRXhCLFFBQUksT0FBTyxZQUFZLFVBQVU7QUFDaEMsVUFBSSxRQUFRLFdBQVcsUUFBVztBQUNqQyxjQUFNLElBQUksTUFBTSxpREFBaUQ7QUFBQSxNQUNsRTtBQUVBLFdBQUssV0FBVztBQUFBLElBQ2pCLFdBQVcsQ0FBQyxtQkFBbUIsR0FBRztBQUNqQyxXQUFLLFdBQVcsb0JBQUFDLFFBQVk7QUFBQSxJQUM3QixXQUFXLFlBQVksUUFBVztBQUVqQyxXQUFLLFdBQVcsb0JBQUFBLFFBQVk7QUFBQSxJQUM3QixXQUFXLFlBQVksYUFBYSxvQkFBQUEsUUFBWSxPQUFPLEdBQUc7QUFDekQsV0FBSyxXQUFXLG9CQUFBQSxRQUFZLE9BQU87QUFBQSxJQUNwQyxPQUFPO0FBQ04sWUFBTSxJQUFJLE1BQU0sdUNBQXVDLE9BQU8sOEZBQThGO0FBQUEsSUFDN0o7QUFBQSxFQUNEO0FBQUEsRUFFQSxJQUFJLE9BQU87QUFDVixXQUFPLEtBQUs7QUFBQSxFQUNiO0FBQUEsRUFFQSxJQUFJLEtBQUssUUFBUSxJQUFJO0FBQ3BCLFNBQUssUUFBUTtBQUNiLFNBQUssaUJBQWlCO0FBQUEsRUFDdkI7QUFBQSxFQUVBLElBQUksYUFBYTtBQUNoQixXQUFPLEtBQUs7QUFBQSxFQUNiO0FBQUEsRUFFQSxJQUFJLFdBQVcsUUFBUSxJQUFJO0FBQzFCLFNBQUssY0FBYztBQUNuQixTQUFLLGlCQUFpQjtBQUFBLEVBQ3ZCO0FBQUEsRUFFQSxJQUFJLGFBQWE7QUFDaEIsV0FBTyxLQUFLO0FBQUEsRUFDYjtBQUFBLEVBRUEsSUFBSSxXQUFXLFFBQVEsSUFBSTtBQUMxQixTQUFLLGNBQWM7QUFDbkIsU0FBSyxpQkFBaUI7QUFBQSxFQUN2QjtBQUFBLEVBRUEsSUFBSSxhQUFhO0FBQ2hCLFdBQU8sS0FBSyxRQUFRO0FBQUEsRUFDckI7QUFBQSxFQUVBLG1CQUFtQixhQUFhLEtBQUssYUFBYSxVQUFVLEtBQUs7QUFDaEUsUUFBSSxPQUFPLGVBQWUsWUFBWSxlQUFlLElBQUk7QUFDeEQsYUFBTyxhQUFhO0FBQUEsSUFDckI7QUFFQSxRQUFJLE9BQU8sZUFBZSxZQUFZO0FBQ3JDLGFBQU8sV0FBVyxJQUFJO0FBQUEsSUFDdkI7QUFFQSxXQUFPO0FBQUEsRUFDUjtBQUFBLEVBRUEsbUJBQW1CLGFBQWEsS0FBSyxhQUFhLFNBQVMsS0FBSztBQUMvRCxRQUFJLE9BQU8sZUFBZSxZQUFZLGVBQWUsSUFBSTtBQUN4RCxhQUFPLFNBQVM7QUFBQSxJQUNqQjtBQUVBLFFBQUksT0FBTyxlQUFlLFlBQVk7QUFDckMsYUFBTyxTQUFTLFdBQVc7QUFBQSxJQUM1QjtBQUVBLFdBQU87QUFBQSxFQUNSO0FBQUEsRUFFQSxtQkFBbUI7QUFDbEIsVUFBTSxVQUFVLEtBQUssUUFBUSxXQUFXO0FBQ3hDLFVBQU0saUJBQWlCLEtBQUssbUJBQW1CLEtBQUssYUFBYSxHQUFHO0FBQ3BFLFVBQU0saUJBQWlCLEtBQUssbUJBQW1CLEtBQUssYUFBYSxHQUFHO0FBQ3BFLFVBQU0sV0FBVyxJQUFJLE9BQU8sS0FBSyxPQUFPLElBQUksaUJBQWlCLE9BQU8sS0FBSyxRQUFRLE9BQU87QUFFeEYsU0FBSyxhQUFhO0FBQ2xCLGVBQVcsUUFBUSxVQUFVLFFBQVEsRUFBRSxNQUFNLElBQUksR0FBRztBQUNuRCxXQUFLLGNBQWMsS0FBSyxJQUFJLEdBQUcsS0FBSyxLQUFLLFlBQVksTUFBTSxFQUFDLHNCQUFzQixLQUFJLENBQUMsSUFBSSxPQUFPLENBQUM7QUFBQSxJQUNwRztBQUFBLEVBQ0Q7QUFBQSxFQUVBLElBQUksWUFBWTtBQUNmLFdBQU8sS0FBSyxjQUFjLENBQUMsS0FBSztBQUFBLEVBQ2pDO0FBQUEsRUFFQSxJQUFJLFVBQVUsT0FBTztBQUNwQixRQUFJLE9BQU8sVUFBVSxXQUFXO0FBQy9CLFlBQU0sSUFBSSxVQUFVLDBDQUEwQztBQUFBLElBQy9EO0FBRUEsU0FBSyxhQUFhO0FBQUEsRUFDbkI7QUFBQSxFQUVBLElBQUksV0FBVztBQUNkLFdBQU8sS0FBSztBQUFBLEVBQ2I7QUFBQSxFQUVBLElBQUksU0FBUyxPQUFPO0FBQ25CLFFBQUksT0FBTyxVQUFVLFdBQVc7QUFDL0IsWUFBTSxJQUFJLFVBQVUseUNBQXlDO0FBQUEsSUFDOUQ7QUFFQSxTQUFLLFlBQVk7QUFBQSxFQUNsQjtBQUFBLEVBRUEsUUFBUTtBQUNQLFVBQU0sRUFBQyxPQUFNLElBQUksS0FBSztBQUN0QixRQUFJLFFBQVEsT0FBTyxLQUFLLFdBQVc7QUFFbkMsUUFBSSxLQUFLLE9BQU87QUFDZixjQUFRLGVBQU0sS0FBSyxLQUFLLEVBQUUsS0FBSztBQUFBLElBQ2hDO0FBRUEsU0FBSyxjQUFjLEVBQUUsS0FBSyxjQUFjLE9BQU87QUFDL0MsVUFBTSxpQkFBa0IsT0FBTyxLQUFLLGdCQUFnQixZQUFZLEtBQUssZ0JBQWdCLEtBQU0sS0FBSyxjQUFjLE1BQU07QUFDcEgsVUFBTSxXQUFXLE9BQU8sS0FBSyxTQUFTLFdBQVcsTUFBTSxLQUFLLE9BQU87QUFDbkUsVUFBTSxpQkFBa0IsT0FBTyxLQUFLLGdCQUFnQixZQUFZLEtBQUssZ0JBQWdCLEtBQU0sTUFBTSxLQUFLLGNBQWM7QUFFcEgsV0FBTyxpQkFBaUIsUUFBUSxXQUFXO0FBQUEsRUFDNUM7QUFBQSxFQUVBLFFBQVE7QUFDUCxRQUFJLENBQUMsS0FBSyxjQUFjLENBQUMsS0FBSyxRQUFRLE9BQU87QUFDNUMsYUFBTztBQUFBLElBQ1I7QUFFQSxTQUFLLFFBQVEsU0FBUyxDQUFDO0FBRXZCLGFBQVMsUUFBUSxHQUFHLFFBQVEsS0FBSyxlQUFlLFNBQVM7QUFDeEQsVUFBSSxRQUFRLEdBQUc7QUFDZCxhQUFLLFFBQVEsV0FBVyxHQUFHLEVBQUU7QUFBQSxNQUM5QjtBQUVBLFdBQUssUUFBUSxVQUFVLENBQUM7QUFBQSxJQUN6QjtBQUVBLFFBQUksS0FBSyxXQUFXLEtBQUssZUFBZSxLQUFLLFNBQVM7QUFDckQsV0FBSyxRQUFRLFNBQVMsS0FBSyxPQUFPO0FBQUEsSUFDbkM7QUFFQSxTQUFLLGFBQWEsS0FBSztBQUN2QixTQUFLLGdCQUFnQjtBQUVyQixXQUFPO0FBQUEsRUFDUjtBQUFBLEVBRUEsU0FBUztBQUNSLFFBQUksS0FBSyxXQUFXO0FBQ25CLGFBQU87QUFBQSxJQUNSO0FBRUEsU0FBSyxNQUFNO0FBQ1gsU0FBSyxRQUFRLE1BQU0sS0FBSyxNQUFNLENBQUM7QUFDL0IsU0FBSyxnQkFBZ0IsS0FBSztBQUUxQixXQUFPO0FBQUEsRUFDUjtBQUFBLEVBRUEsTUFBTSxNQUFNO0FBQ1gsUUFBSSxNQUFNO0FBQ1QsV0FBSyxPQUFPO0FBQUEsSUFDYjtBQUVBLFFBQUksS0FBSyxXQUFXO0FBQ25CLGFBQU87QUFBQSxJQUNSO0FBRUEsUUFBSSxDQUFDLEtBQUssWUFBWTtBQUNyQixVQUFJLEtBQUssTUFBTTtBQUNkLGFBQUssUUFBUSxNQUFNLEtBQUssS0FBSyxJQUFJO0FBQUEsQ0FBSTtBQUFBLE1BQ3RDO0FBRUEsYUFBTztBQUFBLElBQ1I7QUFFQSxRQUFJLEtBQUssWUFBWTtBQUNwQixhQUFPO0FBQUEsSUFDUjtBQUVBLFFBQUksS0FBSyxTQUFTLFlBQVk7QUFDN0IseUJBQVUsS0FBSyxLQUFLLE9BQU87QUFBQSxJQUM1QjtBQUVBLFFBQUksS0FBSyxTQUFTLGdCQUFnQixxQkFBQUQsUUFBUSxNQUFNLE9BQU87QUFDdEQsV0FBSyxxQkFBcUI7QUFDMUIsOEJBQWUsTUFBTTtBQUFBLElBQ3RCO0FBRUEsU0FBSyxPQUFPO0FBQ1osU0FBSyxNQUFNLFlBQVksS0FBSyxPQUFPLEtBQUssSUFBSSxHQUFHLEtBQUssUUFBUTtBQUU1RCxXQUFPO0FBQUEsRUFDUjtBQUFBLEVBRUEsT0FBTztBQUNOLFFBQUksQ0FBQyxLQUFLLFlBQVk7QUFDckIsYUFBTztBQUFBLElBQ1I7QUFFQSxrQkFBYyxLQUFLLEdBQUc7QUFDdEIsU0FBSyxNQUFNO0FBQ1gsU0FBSyxjQUFjO0FBQ25CLFNBQUssTUFBTTtBQUNYLFFBQUksS0FBSyxTQUFTLFlBQVk7QUFDN0IseUJBQVUsS0FBSyxLQUFLLE9BQU87QUFBQSxJQUM1QjtBQUVBLFFBQUksS0FBSyxTQUFTLGdCQUFnQixxQkFBQUEsUUFBUSxNQUFNLFNBQVMsS0FBSyxvQkFBb0I7QUFDakYsOEJBQWUsS0FBSztBQUNwQixXQUFLLHFCQUFxQjtBQUFBLElBQzNCO0FBRUEsV0FBTztBQUFBLEVBQ1I7QUFBQSxFQUVBLFFBQVEsTUFBTTtBQUNiLFdBQU8sS0FBSyxlQUFlLEVBQUMsUUFBUSxvQkFBVyxTQUFTLEtBQUksQ0FBQztBQUFBLEVBQzlEO0FBQUEsRUFFQSxLQUFLLE1BQU07QUFDVixXQUFPLEtBQUssZUFBZSxFQUFDLFFBQVEsb0JBQVcsT0FBTyxLQUFJLENBQUM7QUFBQSxFQUM1RDtBQUFBLEVBRUEsS0FBSyxNQUFNO0FBQ1YsV0FBTyxLQUFLLGVBQWUsRUFBQyxRQUFRLG9CQUFXLFNBQVMsS0FBSSxDQUFDO0FBQUEsRUFDOUQ7QUFBQSxFQUVBLEtBQUssTUFBTTtBQUNWLFdBQU8sS0FBSyxlQUFlLEVBQUMsUUFBUSxvQkFBVyxNQUFNLEtBQUksQ0FBQztBQUFBLEVBQzNEO0FBQUEsRUFFQSxlQUFlLFVBQVUsQ0FBQyxHQUFHO0FBQzVCLFFBQUksS0FBSyxXQUFXO0FBQ25CLGFBQU87QUFBQSxJQUNSO0FBRUEsVUFBTSxhQUFhLFFBQVEsY0FBYyxLQUFLO0FBQzlDLFVBQU0saUJBQWlCLEtBQUssbUJBQW1CLFlBQVksR0FBRztBQUU5RCxVQUFNLGFBQWEsUUFBUSxVQUFVO0FBRXJDLFVBQU0sT0FBTyxRQUFRLFFBQVEsS0FBSztBQUNsQyxVQUFNLFdBQVksT0FBTyxTQUFTLFdBQVksTUFBTSxPQUFPO0FBRTNELFVBQU0sYUFBYSxRQUFRLGNBQWMsS0FBSztBQUM5QyxVQUFNLGlCQUFpQixLQUFLLG1CQUFtQixZQUFZLEdBQUc7QUFFOUQsVUFBTSxjQUFjLGlCQUFpQixhQUFhLFdBQVcsaUJBQWlCO0FBRTlFLFNBQUssS0FBSztBQUNWLFNBQUssUUFBUSxNQUFNLFdBQVc7QUFFOUIsV0FBTztBQUFBLEVBQ1I7QUFDRDtBQUVlLFNBQVIsSUFBcUIsU0FBUztBQUNwQyxTQUFPLElBQUksSUFBSSxPQUFPO0FBQ3ZCOzs7QUR0WEEsSUFBQUUsa0JBQXdCO0FBQ3hCLG1CQUFpQztBQUNqQyxJQUFBQyxvQkFBZTtBQUNmLElBQUFDLHFCQUFpQjtBQUNqQixJQUFBQyxxQkFBZTtBQUdSLElBQU0sT0FBTztBQUFBLEVBTWxCLE9BQU8sZUFBZSxVQUFVO0FBQzlCLDRCQUFRLEtBQUsseUJBQXlCO0FBRXRDLFVBQU0sWUFBWSxNQUFNLGNBQWM7QUFDdEMsVUFBTSxrQkFBa0IsVUFBVTtBQUFBLE1BQ2hDLENBQUMsYUFBYSxTQUFTLFNBQVMsTUFBTSxVQUFVLFlBQVksRUFBRSxLQUFLO0FBQUEsSUFDckU7QUFFQSxVQUFNLFFBQVEsVUFBTSxlQUFBQztBQUFBLE1BQ2xCO0FBQUEsUUFDRTtBQUFBLFVBQ0UsTUFBTTtBQUFBLFVBQ04sTUFBTSxNQUFPLGlCQUFpQixPQUFPLFNBQVM7QUFBQSxVQUM5QyxTQUFTO0FBQUEsVUFDVCxTQUFTO0FBQUEsUUFDWDtBQUFBLFFBQ0E7QUFBQSxVQUNFLE1BQU07QUFBQSxVQUNOLE1BQU0sTUFBTyxtQkFBbUIsT0FBTyxXQUFXO0FBQUEsVUFDbEQsU0FBUztBQUFBLFVBQ1QsU0FBUyxVQUFVLElBQUksQ0FBQyxjQUFjO0FBQUEsWUFDcEMsT0FDRSxnQkFBZ0IsU0FBUyxJQUFJLElBQUksU0FBUyxJQUFJLEtBQUssU0FBUztBQUFBLFlBQzlELE9BQU87QUFBQSxVQUNULEVBQUU7QUFBQSxRQUNKO0FBQUEsUUFDQTtBQUFBLFVBQ0UsTUFBTTtBQUFBLFVBQ04sTUFBTSxNQUFPLE1BQU0sTUFBTSxPQUFPLFdBQVc7QUFBQSxVQUMzQyxTQUFTO0FBQUEsVUFDVCxTQUFTO0FBQUEsWUFDUCxFQUFFLE9BQU8sT0FBTyxPQUFPLE1BQU07QUFBQSxZQUM3QixFQUFFLE9BQU8sUUFBUSxPQUFPLE9BQU87QUFBQSxZQUMvQixFQUFFLE9BQU8sUUFBUSxPQUFPLE9BQU87QUFBQSxVQUNqQztBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBQUEsTUFDQTtBQUFBLFFBQ0UsVUFBVSxNQUFNLFFBQVEsS0FBSyxDQUFDO0FBQUEsTUFDaEM7QUFBQSxJQUNGO0FBQ0EsVUFBTSxjQUFjO0FBQ3BCLFVBQU0sYUFBYTtBQUNuQixVQUFNLG1CQUFtQixNQUFNO0FBRS9CLFVBQU0sYUFBYSxLQUFLO0FBRXhCLFVBQU0sU0FBUyxtQkFBQUMsUUFBSyxTQUFTLFFBQVEsSUFBSSxHQUFHLG1CQUFBQSxRQUFLLFFBQVEsTUFBTSxTQUFTLENBQUM7QUFDekUsWUFBUSxJQUFJO0FBQ1osNEJBQVE7QUFBQSxNQUNOLHVDQUNFLGdCQUFnQixNQUFNLFNBQVMsSUFBSSxJQUFJLE1BQU0sU0FBUyxJQUFJLEtBQzFELE1BQU0sU0FBUyxJQUNqQjtBQUFBLElBQ0Y7QUFDQSxZQUFRLElBQUk7QUFDWiw0QkFBUSxJQUFJLGFBQWE7QUFDekIsUUFBSSxPQUFPO0FBQ1gsUUFBSSxXQUFXO0FBQUksOEJBQVEsSUFBSSxLQUFLLEVBQUUsSUFBSSxLQUFLLG1CQUFBQyxRQUFHLEtBQUssTUFBTSxNQUFNLEVBQUUsQ0FBQztBQUN0RSw0QkFBUSxJQUFJLEtBQUssRUFBRSxJQUFJLEtBQUssbUJBQUFBLFFBQUcsS0FBSyxHQUFHLE1BQU0sY0FBYyxVQUFVLENBQUM7QUFDdEUsWUFBUSxJQUFJO0FBQUEsRUFDZDtBQUFBLEVBQ0EsRUFBRSxvQkFBb0IsS0FBSztBQUM3QjtBQWFBLGVBQWUsZ0JBQXFDO0FBQ2xELE1BQUk7QUFDRixVQUFNLE1BQU0sTUFBTTtBQUFBLE1BQ2hCO0FBQUEsTUFDQTtBQUFBLFFBQ0UsU0FBUztBQUFBLFVBQ1AsUUFBUTtBQUFBLFVBQ1Isd0JBQXdCO0FBQUEsUUFDMUI7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUNBLFFBQUksSUFBSSxVQUFVO0FBQ2hCLFlBQU0sTUFBTSw4QkFBOEIsSUFBSSxNQUFNLElBQUksSUFBSSxVQUFVLEVBQUU7QUFFMUUsVUFBTSxPQUFRLE1BQU0sSUFBSSxLQUFLO0FBSzdCLFdBQU8sS0FDSixPQUFPLENBQUMsU0FBYyxLQUFLLFNBQVMsS0FBSyxFQUN6QyxJQUFJLENBQUMsVUFBVSxFQUFFLE1BQU0sS0FBSyxNQUFNLE1BQU0sS0FBSyxLQUFLLEVBQUUsRUFDcEQsS0FBSyxDQUFDLEdBQUcsTUFBTTtBQUNkLFlBQU0sVUFBVSxxQkFBcUIsRUFBRSxJQUFJLEtBQUssT0FBTztBQUN2RCxZQUFNLFVBQVUscUJBQXFCLEVBQUUsSUFBSSxLQUFLLE9BQU87QUFDdkQsWUFBTSxPQUFPLFVBQVU7QUFDdkIsVUFBSSxTQUFTO0FBQUcsZUFBTztBQUN2QixhQUFPLEVBQUUsS0FBSyxjQUFjLEVBQUUsSUFBSTtBQUFBLElBQ3BDLENBQUM7QUFBQSxFQUNMLFNBQVMsS0FBSztBQUNaLFVBQU0sTUFBTSwwQkFBMEIsS0FBSyxVQUFVLEtBQUssTUFBTSxDQUFDLENBQUMsRUFBRTtBQUFBLEVBQ3RFO0FBQ0Y7QUFFQSxlQUFlLGFBQWE7QUFBQSxFQUMxQjtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQ0YsR0FJRztBQUNELFFBQU0sVUFBVSxJQUFJLHNCQUFzQixFQUFFLE1BQU07QUFDbEQsTUFBSTtBQUVGLGNBQU0sK0JBQWlCLGtCQUFrQixTQUFTLElBQUksSUFBSTtBQUFBLE1BQ3hELEtBQUs7QUFBQSxNQUNMLE9BQU87QUFBQSxJQUNULENBQUM7QUFHRCxVQUFNLGtCQUFBQyxRQUNIO0FBQUEsTUFDQyxtQkFBQUYsUUFBSyxLQUFLLFdBQVcsWUFBWTtBQUFBLE1BQ2pDLG1CQUFBQSxRQUFLLEtBQUssV0FBVyxZQUFZO0FBQUEsSUFDbkMsRUFDQztBQUFBLE1BQU0sQ0FBQyxRQUNOLHdCQUFRLEtBQUssNENBQTRDLEdBQUc7QUFBQSxJQUM5RDtBQUdGLFFBQUksbUJBQW1CLFFBQVE7QUFDN0IsWUFBTSxrQkFBQUUsUUFBRztBQUFBLFFBQ1AsbUJBQUFGLFFBQUssS0FBSyxXQUFXLFFBQVE7QUFBQSxRQUM3QjtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBRUEsWUFBUSxRQUFRO0FBQUEsRUFDbEIsU0FBUyxLQUFLO0FBQ1osWUFBUSxLQUFLO0FBQ2IsVUFBTSxNQUFNLGdDQUFnQyxLQUFLLFVBQVUsS0FBSyxNQUFNLENBQUMsQ0FBQyxFQUFFO0FBQUEsRUFDNUU7QUFDRjtBQUVBLElBQU0sa0JBQTZDO0FBQUEsRUFDakQsU0FBUyxtQkFBQUMsUUFBRztBQUFBLEVBQ1osS0FBSyxtQkFBQUEsUUFBRztBQUFBLEVBQ1IsT0FBTyxtQkFBQUEsUUFBRztBQUFBLEVBQ1YsUUFBUSxtQkFBQUEsUUFBRztBQUFBLEVBQ1gsT0FBTyxtQkFBQUEsUUFBRztBQUNaO0FBRUEsSUFBTSx1QkFBK0M7QUFBQSxFQUNuRCxTQUFTO0FBQUEsRUFDVCxLQUFLO0FBQUEsRUFDTCxPQUFPO0FBQ1Q7OztBZ0I5S08sSUFBTSxVQUFVLGNBUXJCLE9BQU8sTUFBTSxVQUFVO0FBQ3ZCLFFBQU0sWUFBOEI7QUFBQSxJQUNsQztBQUFBLElBQ0EsWUFBWSxNQUFNO0FBQUEsSUFDbEIsT0FBTyxNQUFNO0FBQUEsRUFDZjtBQUNBLFFBQU0sU0FBUyxNQUFNLGtCQUFrQixXQUFXLE9BQU87QUFFekQsU0FBTyxPQUFPLEtBQUsscUJBQXFCO0FBRXhDLFFBQU0sY0FBYyxNQUFNLGdCQUFnQixNQUFNO0FBQ2hELFFBQU0saUJBQWlCLGFBQWEsTUFBTTtBQUM1QyxDQUFDOzs7QUMxQkQsSUFBQUUsa0JBQXdCO0FBR2pCLElBQU0sVUFBVTtBQUFBLEVBQ3JCLE9BQ0UsTUFDQSxFQUFFLFFBQVEsWUFBWSxNQUFNLE1BQ3pCO0FBQ0gsNEJBQVEsS0FBSyw4QkFBOEI7QUFBQSxFQUM3QztBQUNGOzs7QUNUQSxxQkFBbUI7QUFDbkIsSUFBQUMscUJBQTJDO0FBQzNDLElBQUFDLG9CQUFlO0FBR2YsSUFBQUMsb0JBQTBCO0FBVTFCLGVBQXNCLGFBQ3BCLFFBQ0EsYUFDbUI7QUFDbkIsUUFBTSxRQUFRLEtBQUssSUFBSTtBQUN2QixTQUFPLE9BQU8sS0FBSyxzQkFBc0I7QUFDekMsUUFBTSxXQUFxQixDQUFDO0FBRTVCLFFBQU0sY0FDSixPQUFPLElBQUksUUFDWDtBQUFBLEtBQ0csTUFBTSxlQUFlLE1BQU0sSUFBSSxZQUFRLDRCQUFRLFFBQVEsSUFBSSxDQUFDO0FBQUEsRUFDL0Q7QUFDRixRQUFNLGdCQUFnQixDQUFDLGFBQ3JCLFNBQ0csV0FBVyxZQUFZLFdBQVcsRUFDbEMsV0FBVyxlQUFlLE9BQU8sT0FBTyxFQUN4QztBQUFBLElBQ0M7QUFBQSxJQUNBLFlBQVksU0FBUyxnQkFBZ0IsWUFBWSxTQUFTO0FBQUEsRUFDNUQsRUFDQyxXQUFXLHVCQUF1QixLQUFLLE9BQU8sZUFBZSxFQUFFO0FBRXBFLFFBQU0sa0JBQUFDLFFBQUcsVUFBVSxPQUFPLFVBQVU7QUFJcEMsUUFBTSxpQkFBaUIsY0FBYyxPQUFPLElBQUksZ0JBQWdCO0FBQ2hFLFFBQU0saUJBQWEsNEJBQVEsT0FBTyxZQUFZLGNBQWM7QUFDNUQsWUFBTSxlQUFBQyxTQUFPLE9BQU8sUUFBUTtBQUFBLElBQzFCLFFBQVE7QUFBQSxFQUNWLENBQUM7QUFDRCxXQUFTLEtBQUssVUFBVTtBQUl4QixNQUFJLE9BQU8sWUFBWSxXQUFXO0FBQ2hDLFVBQU0scUJBQXFCLGNBQWMsT0FBTyxJQUFJLGVBQWU7QUFDbkUsVUFBTSxxQkFBaUIsNEJBQVEsT0FBTyxZQUFZLGtCQUFrQjtBQUNwRSxjQUFNLGVBQUFBLFNBQU8sT0FBTyxJQUFJLGFBQWE7QUFBQSxNQUNuQyxRQUFRO0FBQUEsTUFDUixPQUFPQyxPQUFNO0FBQ1gsY0FBTSxtQkFBZSw2QkFBUyxPQUFPLElBQUksYUFBYUEsS0FBSTtBQUMxRCxjQUFNLGlCQUFpQixPQUFPLElBQUksZUFBZTtBQUFBLFVBQUssQ0FBQyxnQkFDckQsNkJBQVUsY0FBYyxPQUFPO0FBQUEsUUFDakM7QUFDQSxlQUFPLGtCQUFrQjtBQUFBLE1BQzNCO0FBQUEsSUFDRixDQUFDO0FBQ0QsYUFBUyxLQUFLLGNBQWM7QUFBQSxFQUM5QjtBQUVBLFFBQU07QUFBQSxJQUNKLE9BQU8sT0FBTztBQUFBLElBQ2QsdUJBQXVCLGVBQWUsS0FBSyxJQUFJLElBQUksS0FBSyxDQUFDO0FBQUEsSUFDekQsT0FBTztBQUFBLElBQ1A7QUFBQSxFQUNGO0FBRUEsU0FBTztBQUNUOzs7QUN0RU8sSUFBTSxNQUFNLGNBWWpCLE9BQU8sTUFBTSxVQUFVO0FBQ3ZCLFFBQU0sWUFBOEI7QUFBQSxJQUNsQztBQUFBLElBQ0EsTUFBTSxNQUFNO0FBQUEsSUFDWixTQUFTLE1BQU07QUFBQSxJQUNmLGlCQUFpQixNQUFNLE1BQU0sSUFBSSxNQUFNLE1BQU0sSUFBSTtBQUFBLElBQ2pELFlBQVksTUFBTTtBQUFBLElBQ2xCLE9BQU8sTUFBTTtBQUFBLEVBQ2Y7QUFFQSxRQUFNLFNBQVMsTUFBTSxrQkFBa0IsV0FBVyxPQUFPO0FBQ3pELFFBQU0sU0FBUyxNQUFNLGNBQWMsTUFBTTtBQUN6QyxRQUFNLGFBQWEsUUFBUSxNQUFNO0FBQ25DLENBQUM7OztBQzVCTSxJQUFNQyxTQUFRLGNBT2YsS0FBSzs7O0FwRU5YLElBQU0sVUFBTSxXQUFBQyxTQUFJLEtBQUs7QUFDckIsSUFBSSxLQUFLO0FBQ1QsSUFBSSxRQUFRLE9BQU87QUFFbkIsSUFBSSxPQUFPLFdBQVcsbUJBQW1CO0FBR3pDLElBQ0csUUFBUSxVQUFVLGtCQUFrQixFQUNwQyxPQUFPLHVCQUF1QiwyQkFBMkIsRUFDekQsT0FBTyxxQkFBcUIsY0FBYyxFQUMxQyxPQUFPLDJCQUEyQixtQkFBbUIsRUFDckQsT0FBTyxTQUFTLG9CQUFvQixFQUNwQyxPQUFPLFNBQVMsb0JBQW9CLEVBQ3BDLE9BQWdCLEdBQUc7QUFHdEIsSUFDRyxRQUFRLGdCQUFnQixzQkFBc0IsRUFDOUMsT0FBTyx1QkFBdUIsMkJBQTJCLEVBQ3pELE9BQU8scUJBQXFCLGNBQWMsRUFDMUMsT0FBTywyQkFBMkIsbUJBQW1CLEVBQ3JELE9BQU8sU0FBUyxvQkFBb0IsRUFDcEMsT0FBTyxTQUFTLG9CQUFvQixFQUNwQyxPQUFnQkMsTUFBSztBQUd4QixJQUNHLFFBQVEsY0FBYyxxQ0FBcUMsRUFDM0QsT0FBTyx1QkFBdUIsMkJBQTJCLEVBQ3pELE9BQU8scUJBQXFCLGNBQWMsRUFDMUMsT0FBTywyQkFBMkIsbUJBQW1CLEVBQ3JELE9BQU8sU0FBUyxvQkFBb0IsRUFDcEMsT0FBTyxTQUFTLG9CQUFvQixFQUNwQyxPQUFnQixHQUFHO0FBR3RCLElBQ0csUUFBUSxrQkFBa0IsNEJBQTRCLEVBQ3RELE9BQU8sdUJBQXVCLDJCQUEyQixFQUN6RCxPQUFnQixPQUFPO0FBRzFCLElBQ0csUUFBUSxnQkFBZ0Isa0NBQWtDLEVBQzFELE1BQU0sU0FBUyxFQUNmLE9BQWdCQyxNQUFLO0FBR3hCLElBQUksUUFBUSxrQkFBa0IsbUJBQW1CLEVBQUUsT0FBZ0IsT0FBTztBQUcxRSxJQUNHLFFBQVEsb0JBQW9CLDBCQUEwQixFQUN0RCxPQUFPLDZCQUE2QixpQkFBaUIsRUFDckQsT0FBTyx5QkFBeUIsOEJBQThCLEVBQzlELE9BQWdCLElBQUk7QUFFdkIsSUFBSSxNQUFNOyIsCiAgIm5hbWVzIjogWyJtb2R1bGUiLCAibW9kdWxlIiwgIm9uZXRpbWUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJwcm9jZXNzIiwgInVubG9hZCIsICJlbWl0IiwgImxvYWQiLCAicHJvY2Vzc1JlYWxseUV4aXQiLCAicHJvY2Vzc0VtaXQiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJCdWZmZXIiLCAibW9kdWxlIiwgImVyciIsICJzZWxmIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIkJ1ZmZlciIsICJyZWFsSGFzSW5zdGFuY2UiLCAibW9kdWxlIiwgImtleXMiLCAic2VsZiIsICJtb2R1bGUiLCAiQnVmZmVyIiwgIkJ1ZmZlciIsICJzZWxmIiwgIm1vZHVsZSIsICJvbmxlZ2FjeWZpbmlzaCIsICJvbmZpbmlzaCIsICJvbmVuZCIsICJvbmVycm9yIiwgIm9uY2xvc2UiLCAib25yZXF1ZXN0IiwgIm1vZHVsZSIsICJyZXNvbHZlIiwgImNyZWF0ZVJlYWRhYmxlU3RyZWFtQXN5bmNJdGVyYXRvciIsICJtb2R1bGUiLCAicmVzb2x2ZSIsICJzZWxmIiwgIm1vZHVsZSIsICJFRWxpc3RlbmVyQ291bnQiLCAiQnVmZmVyIiwgImRlYnVnIiwgInNlbGYiLCAibiIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIkJ1ZmZlciIsICJjb3B5IiwgIm0iLCAibW9kdWxlIiwgIkJ1ZmZlckxpc3RTdHJlYW0iLCAicGlwZXIiLCAiaW1wb3J0X25vZGVfcGF0aCIsICJ2aXRlIiwgImltcG9ydF9mc19leHRyYSIsICJmcyIsICJwYXRoIiwgImZzIiwgImltcG9ydF9ub2RlX3BhdGgiLCAibm9ybWFsaXplUGF0aCIsICJwYXRoIiwgIm5vZGVQYXRoIiwgInBhdGgiLCAibm9ybWFsaXplUGF0aCIsICJpbXBvcnRfcGF0aCIsICJpc09mZmxpbmUiLCAiZG5zIiwgImltcG9ydF9ub2RlX3BhdGgiLCAiaW1wb3J0X2ZzX2V4dHJhIiwgIm5vcm1hbGl6ZVBhdGgiLCAiZnMiLCAiaW1wb3J0X3BhdGgiLCAidW5pbXBvcnQiLCAiaW1wb3J0X2ZzX2V4dHJhIiwgImltcG9ydF9wYXRoIiwgIm5vcm1hbGl6ZVBhdGgiLCAiZnMiLCAiY29uc29sYSIsICJlbnYiLCAicGF0aCIsICJ6aXAiLCAidml0ZSIsICJnbG9iYWwiLCAiaW1wb3J0X3BpY29jb2xvcnMiLCAibm9ybWFsaXplUGF0aCIsICJpbXBvcnRfY29uc29sYSIsICJpbXBvcnRfbm9kZV9wYXRoIiwgInZpdGUiLCAiaW1wb3J0X2ZzX2V4dHJhIiwgImltcG9ydF9wYXRoIiwgImZzIiwgInBhdGgiLCAiaW1wb3J0X2ZzX2V4dHJhIiwgImltcG9ydF9wYXRoIiwgImltcG9ydF9mc19leHRyYSIsICJmcyIsICJnbG9iIiwgImZzIiwgImltcG9ydF9wYXRoIiwgImltcG9ydF9mc19leHRyYSIsICJpbXBvcnRfbGlua2Vkb20iLCAiaW1wb3J0X3VuaW1wb3J0IiwgImltcG9ydF9mc19leHRyYSIsICJpbXBvcnRfcGF0aCIsICJwYXRoIiwgIm5vcm1hbGl6ZVBhdGgiLCAidW5pbXBvcnQiLCAiZnMiLCAiY3JlYXRlSklUSSIsICJ0cmFuc2Zvcm0iLCAiaW1wb3J0X2Zhc3RfZ2xvYiIsICJnbG9iIiwgInBhdGgiLCAiSlNPTjUiLCAiZnMiLCAiaW1wb3J0X3VuaW1wb3J0IiwgImltcG9ydF9mc19leHRyYSIsICJpbXBvcnRfcGF0aCIsICJpbXBvcnRfbm9kZV9wYXRoIiwgImZzIiwgInVuaW1wb3J0IiwgIm5vcm1hbGl6ZVBhdGgiLCAicGF0aCIsICJnbG9iYWwiLCAiaW1wb3J0X2ZzX2V4dHJhIiwgImltcG9ydF9wYXRoIiwgImltcG9ydF9ub2RlX3BhdGgiLCAiaW1wb3J0X2ZzX2V4dHJhIiwgImZzIiwgImZzIiwgInZlcnNpb24iLCAib3B0aW9ucyIsICJyZWdleCIsICJub3JtYWxpemVQYXRoIiwgImltcG9ydF9waWNvY29sb3JzIiwgInZpdGUiLCAiaW1wb3J0X2ZzX2V4dHJhIiwgImltcG9ydF9wYXRoIiwgImltcG9ydF9ub2RlX3BhdGgiLCAiaW1wb3J0X2ZzX2V4dHJhIiwgInBhdGgiLCAiZnMiLCAicGMiLCAicGMiLCAiZnMiLCAidml0ZSIsICJwYXRoIiwgImltcG9ydF9ub2RlX3BhdGgiLCAiaW1wb3J0X2Zhc3RfZ2xvYiIsICJpbXBvcnRfZnNfZXh0cmEiLCAiaW1wb3J0X2NvbnNvbGEiLCAiaW1wb3J0X3BpY29jb2xvcnMiLCAicGMiLCAiZ2xvYiIsICJwYXRoIiwgImZzIiwgImJ1aWxkIiwgImNyZWF0ZVNlcnZlciIsICJwYXRoIiwgInBjIiwgImltcG9ydF9jb25zb2xhIiwgImltcG9ydF9waWNvY29sb3JzIiwgImltcG9ydF9jb25zb2xhIiwgInBjIiwgImJ1aWxkIiwgImNyZWF0ZVNlcnZlciIsICJpbXBvcnRfbm9kZV9wcm9jZXNzIiwgInByb2Nlc3MiLCAib3MiLCAidmVyc2lvbiIsICJ0dHkiLCAic3R5bGVzIiwgImNoYWxrIiwgInN0eWxlcyIsICJzZWxmIiwgImltcG9ydF9ub2RlX3Byb2Nlc3MiLCAiaW1wb3J0X25vZGVfcHJvY2VzcyIsICJvbmV0aW1lIiwgInNpZ25hbEV4aXQiLCAicHJvY2VzcyIsICJwcm9jZXNzIiwgImltcG9ydF9ub2RlX3Byb2Nlc3MiLCAicHJvY2VzcyIsICJlYXN0QXNpYW5XaWR0aCIsICJpbXBvcnRfbm9kZV9wcm9jZXNzIiwgInByb2Nlc3MiLCAic2VsZiIsICJyZWFkbGluZSIsICJpbXBvcnRfY2xpX3NwaW5uZXJzIiwgInByb2Nlc3MiLCAiY2xpU3Bpbm5lcnMiLCAiaW1wb3J0X2NvbnNvbGEiLCAiaW1wb3J0X2ZzX2V4dHJhIiwgImltcG9ydF9ub2RlX3BhdGgiLCAiaW1wb3J0X3BpY29jb2xvcnMiLCAicHJvbXB0cyIsICJwYXRoIiwgInBjIiwgImZzIiwgImltcG9ydF9jb25zb2xhIiwgImltcG9ydF9ub2RlX3BhdGgiLCAiaW1wb3J0X2ZzX2V4dHJhIiwgImltcG9ydF9taW5pbWF0Y2giLCAiZnMiLCAiemlwZGlyIiwgInBhdGgiLCAiY2xlYW4iLCAiY2FjIiwgImJ1aWxkIiwgImNsZWFuIl0KfQo=
8945
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL21pbWljLWZuQDIuMS4wL25vZGVfbW9kdWxlcy9taW1pYy1mbi9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vb25ldGltZUA1LjEuMi9ub2RlX21vZHVsZXMvb25ldGltZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vc2lnbmFsLWV4aXRAMy4wLjcvbm9kZV9tb2R1bGVzL3NpZ25hbC1leGl0L3NpZ25hbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3NpZ25hbC1leGl0QDMuMC43L25vZGVfbW9kdWxlcy9zaWduYWwtZXhpdC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2xpLXNwaW5uZXJzQDIuOS4wL25vZGVfbW9kdWxlcy9jbGktc3Bpbm5lcnMvc3Bpbm5lcnMuanNvbiIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2xpLXNwaW5uZXJzQDIuOS4wL25vZGVfbW9kdWxlcy9jbGktc3Bpbm5lcnMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2Vhc3Rhc2lhbndpZHRoQDAuMi4wL25vZGVfbW9kdWxlcy9lYXN0YXNpYW53aWR0aC9lYXN0YXNpYW53aWR0aC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcmVhZGFibGUtc3RyZWFtQDMuNi4yL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvc3RyZWFtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yZWFkYWJsZS1zdHJlYW1AMy42LjIvbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy9idWZmZXJfbGlzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcmVhZGFibGUtc3RyZWFtQDMuNi4yL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvZGVzdHJveS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcmVhZGFibGUtc3RyZWFtQDMuNi4yL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vZXJyb3JzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yZWFkYWJsZS1zdHJlYW1AMy42LjIvbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy9zdGF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vaW5oZXJpdHNAMi4wLjQvbm9kZV9tb2R1bGVzL2luaGVyaXRzL2luaGVyaXRzX2Jyb3dzZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2luaGVyaXRzQDIuMC40L25vZGVfbW9kdWxlcy9pbmhlcml0cy9pbmhlcml0cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdXRpbC1kZXByZWNhdGVAMS4wLjIvbm9kZV9tb2R1bGVzL3V0aWwtZGVwcmVjYXRlL25vZGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3JlYWRhYmxlLXN0cmVhbUAzLjYuMi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX3dyaXRhYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yZWFkYWJsZS1zdHJlYW1AMy42LjIvbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV9kdXBsZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3NhZmUtYnVmZmVyQDUuMS4yL25vZGVfbW9kdWxlcy9zYWZlLWJ1ZmZlci9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vc3RyaW5nX2RlY29kZXJAMS4xLjEvbm9kZV9tb2R1bGVzL3N0cmluZ19kZWNvZGVyL2xpYi9zdHJpbmdfZGVjb2Rlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcmVhZGFibGUtc3RyZWFtQDMuNi4yL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvZW5kLW9mLXN0cmVhbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcmVhZGFibGUtc3RyZWFtQDMuNi4yL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvYXN5bmNfaXRlcmF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3JlYWRhYmxlLXN0cmVhbUAzLjYuMi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9pbnRlcm5hbC9zdHJlYW1zL2Zyb20uanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3JlYWRhYmxlLXN0cmVhbUAzLjYuMi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX3JlYWRhYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yZWFkYWJsZS1zdHJlYW1AMy42LjIvbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV90cmFuc2Zvcm0uanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3JlYWRhYmxlLXN0cmVhbUAzLjYuMi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX3Bhc3N0aHJvdWdoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yZWFkYWJsZS1zdHJlYW1AMy42LjIvbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy9waXBlbGluZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcmVhZGFibGUtc3RyZWFtQDMuNi4yL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vcmVhZGFibGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2JsQDUuMS4wL25vZGVfbW9kdWxlcy9ibC9CdWZmZXJMaXN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9ibEA1LjEuMC9ub2RlX21vZHVsZXMvYmwvYmwuanMiLCAiLi4vc3JjL2NsaS9pbmRleC50cyIsICIuLi9wYWNrYWdlLmpzb24iLCAiLi4vc3JjL2NvcmUvdXRpbHMvZ2V0SW50ZXJuYWxDb25maWcudHMiLCAiLi4vc3JjL2NvcmUvdXRpbHMvY3JlYXRlRnNDYWNoZS50cyIsICIuLi9zcmMvY29yZS91dGlscy9mcy50cyIsICIuLi9zcmMvY29yZS91dGlscy9lbnRyeXBvaW50cy50cyIsICIuLi9zcmMvY29yZS91dGlscy9wYXRocy50cyIsICIuLi9zcmMvY29yZS92aXRlLXBsdWdpbnMvZGV2SHRtbFByZXJlbmRlci50cyIsICIuLi9zcmMvY29yZS92aXRlLXBsdWdpbnMvZGV2U2VydmVyR2xvYmFscy50cyIsICIuLi9zcmMvY29yZS91dGlscy9uZXR3b3JrLnRzIiwgIi4uL3NyYy9jb3JlL3V0aWxzL3Byb21pc2VzLnRzIiwgIi4uL3NyYy9jb3JlL3ZpdGUtcGx1Z2lucy9kb3dubG9hZC50cyIsICIuLi9zcmMvY29yZS92aXRlLXBsdWdpbnMvbXVsdGlwYWdlTW92ZS50cyIsICIuLi9zcmMvY29yZS92aXRlLXBsdWdpbnMvdW5pbXBvcnQudHMiLCAiLi4vc3JjL2NvcmUvdXRpbHMvYXV0by1pbXBvcnRzLnRzIiwgIi4uL3NyYy9jb3JlL3ZpdGUtcGx1Z2lucy92aXJ0dWFsRW50cnlwb2ludC50cyIsICIuLi9zcmMvY29yZS92aXRlLXBsdWdpbnMvdHNjb25maWdQYXRocy50cyIsICIuLi9zcmMvY29yZS92aXRlLXBsdWdpbnMvbm9vcEJhY2tncm91bmQudHMiLCAiLi4vc3JjL2NvcmUvdml0ZS1wbHVnaW5zL2Nzc0VudHJ5cG9pbnRzLnRzIiwgIi4uL3NyYy9jb3JlL3V0aWxzL2dsb2JhbHMudHMiLCAiLi4vc3JjL2luZGV4LnRzIiwgIi4uL3NyYy9jb3JlL3V0aWxzL2FycmF5cy50cyIsICIuLi9zcmMvY29yZS91dGlscy9kZXRlY3REZXZDaGFuZ2VzLnRzIiwgIi4uL3NyYy9jb3JlL2J1aWxkL2J1aWxkRW50cnlwb2ludHMudHMiLCAiLi4vc3JjL2NvcmUvdXRpbHMvcmVtb3ZlRW1wdHlEaXJzLnRzIiwgIi4uL3NyYy9jb3JlL3V0aWxzL3B1YmxpYy50cyIsICIuLi9zcmMvY29yZS9idWlsZC9maW5kRW50cnlwb2ludHMudHMiLCAiLi4vc3JjL2NvcmUvdXRpbHMvaW1wb3J0RW50cnlwb2ludEZpbGUudHMiLCAiLi4vc3JjL2NvcmUvdXRpbHMvc3RyaW5ncy50cyIsICIuLi9zcmMvY29yZS9idWlsZC9nZW5lcmF0ZVR5cGVzRGlyLnRzIiwgIi4uL3NyYy9jb3JlL3V0aWxzL2kxOG4udHMiLCAiLi4vc3JjL2NvcmUvdXRpbHMvbWFuaWZlc3QudHMiLCAiLi4vc3JjL2NvcmUvdXRpbHMvQ29udGVudFNlY3VyaXR5UG9saWN5LnRzIiwgIi4uL3NyYy9jb3JlL3V0aWxzL2NvbnRlbnQtc2NyaXB0cy50cyIsICIuLi9zcmMvY29yZS91dGlscy9wYWNrYWdlLnRzIiwgIi4uL3NyYy9jb3JlL2J1aWxkLnRzIiwgIi4uL3NyYy9jb3JlL3V0aWxzL2dyb3VwRW50cnlwb2ludHMudHMiLCAiLi4vc3JjL2NvcmUvdXRpbHMvZm9ybWF0RHVyYXRpb24udHMiLCAiLi4vc3JjL2NvcmUvbG9nL3ByaW50QnVpbGRTdW1tYXJ5LnRzIiwgIi4uL3NyYy9jb3JlL2xvZy9wcmludEZpbGVMaXN0LnRzIiwgIi4uL3NyYy9jb3JlL2xvZy9wcmludFRhYmxlLnRzIiwgIi4uL3NyYy9jb3JlL3NlcnZlci50cyIsICIuLi9zcmMvY29yZS9ydW5uZXJzL2NyZWF0ZVdlYkV4dFJ1bm5lci50cyIsICIuLi9zcmMvY29yZS9jbGVhbi50cyIsICIuLi9zcmMvY2xpL3V0aWxzL2RlZmluZUNvbW1hbmQudHMiLCAiLi4vc3JjL2NvcmUvbG9nL3ByaW50SGVhZGVyLnRzIiwgIi4uL3NyYy9jbGkvY29tbWFuZHMvYnVpbGQudHMiLCAiLi4vc3JjL2NsaS9jb21tYW5kcy9kZXYudHMiLCAiLi4vc3JjL2NsaS9jb21tYW5kcy9pbml0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9vcmFANy4wLjEvbm9kZV9tb2R1bGVzL29yYS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhbGtANS4zLjAvbm9kZV9tb2R1bGVzL2NoYWxrL3NvdXJjZS92ZW5kb3IvYW5zaS1zdHlsZXMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYWxrQDUuMy4wL25vZGVfbW9kdWxlcy9jaGFsay9zb3VyY2UvdmVuZG9yL3N1cHBvcnRzLWNvbG9yL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFsa0A1LjMuMC9ub2RlX21vZHVsZXMvY2hhbGsvc291cmNlL3V0aWxpdGllcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhbGtANS4zLjAvbm9kZV9tb2R1bGVzL2NoYWxrL3NvdXJjZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2xpLWN1cnNvckA0LjAuMC9ub2RlX21vZHVsZXMvY2xpLWN1cnNvci9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcmVzdG9yZS1jdXJzb3JANC4wLjAvbm9kZV9tb2R1bGVzL3Jlc3RvcmUtY3Vyc29yL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9pcy11bmljb2RlLXN1cHBvcnRlZEAxLjMuMC9ub2RlX21vZHVsZXMvaXMtdW5pY29kZS1zdXBwb3J0ZWQvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2xvZy1zeW1ib2xzQDUuMS4wL25vZGVfbW9kdWxlcy9sb2ctc3ltYm9scy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vYW5zaS1yZWdleEA2LjAuMS9ub2RlX21vZHVsZXMvYW5zaS1yZWdleC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vc3RyaXAtYW5zaUA3LjEuMC9ub2RlX21vZHVsZXMvc3RyaXAtYW5zaS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vc3RyaW5nLXdpZHRoQDYuMS4wL25vZGVfbW9kdWxlcy9zdHJpbmctd2lkdGgvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2Vtb2ppLXJlZ2V4QDEwLjIuMS9ub2RlX21vZHVsZXMvZW1vamktcmVnZXgvaW5kZXgubWpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9pcy1pbnRlcmFjdGl2ZUAyLjAuMC9ub2RlX21vZHVsZXMvaXMtaW50ZXJhY3RpdmUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3N0ZGluLWRpc2NhcmRlckAwLjEuMC9ub2RlX21vZHVsZXMvc3RkaW4tZGlzY2FyZGVyL2luZGV4LmpzIiwgIi4uL3NyYy9jbGkvY29tbWFuZHMvcHJlcGFyZS50cyIsICIuLi9zcmMvY2xpL2NvbW1hbmRzL3B1Ymxpc2gudHMiLCAiLi4vc3JjL2NvcmUvemlwLnRzIiwgIi4uL3NyYy9jbGkvY29tbWFuZHMvemlwLnRzIiwgIi4uL3NyYy9jbGkvY29tbWFuZHMvY2xlYW4udHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIid1c2Ugc3RyaWN0JztcblxuY29uc3QgbWltaWNGbiA9ICh0bywgZnJvbSkgPT4ge1xuXHRmb3IgKGNvbnN0IHByb3Agb2YgUmVmbGVjdC5vd25LZXlzKGZyb20pKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHRvLCBwcm9wLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGZyb20sIHByb3ApKTtcblx0fVxuXG5cdHJldHVybiB0bztcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gbWltaWNGbjtcbi8vIFRPRE86IFJlbW92ZSB0aGlzIGZvciB0aGUgbmV4dCBtYWpvciByZWxlYXNlXG5tb2R1bGUuZXhwb3J0cy5kZWZhdWx0ID0gbWltaWNGbjtcbiIsICIndXNlIHN0cmljdCc7XG5jb25zdCBtaW1pY0ZuID0gcmVxdWlyZSgnbWltaWMtZm4nKTtcblxuY29uc3QgY2FsbGVkRnVuY3Rpb25zID0gbmV3IFdlYWtNYXAoKTtcblxuY29uc3Qgb25ldGltZSA9IChmdW5jdGlvbl8sIG9wdGlvbnMgPSB7fSkgPT4ge1xuXHRpZiAodHlwZW9mIGZ1bmN0aW9uXyAhPT0gJ2Z1bmN0aW9uJykge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIGEgZnVuY3Rpb24nKTtcblx0fVxuXG5cdGxldCByZXR1cm5WYWx1ZTtcblx0bGV0IGNhbGxDb3VudCA9IDA7XG5cdGNvbnN0IGZ1bmN0aW9uTmFtZSA9IGZ1bmN0aW9uXy5kaXNwbGF5TmFtZSB8fCBmdW5jdGlvbl8ubmFtZSB8fCAnPGFub255bW91cz4nO1xuXG5cdGNvbnN0IG9uZXRpbWUgPSBmdW5jdGlvbiAoLi4uYXJndW1lbnRzXykge1xuXHRcdGNhbGxlZEZ1bmN0aW9ucy5zZXQob25ldGltZSwgKytjYWxsQ291bnQpO1xuXG5cdFx0aWYgKGNhbGxDb3VudCA9PT0gMSkge1xuXHRcdFx0cmV0dXJuVmFsdWUgPSBmdW5jdGlvbl8uYXBwbHkodGhpcywgYXJndW1lbnRzXyk7XG5cdFx0XHRmdW5jdGlvbl8gPSBudWxsO1xuXHRcdH0gZWxzZSBpZiAob3B0aW9ucy50aHJvdyA9PT0gdHJ1ZSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKGBGdW5jdGlvbiBcXGAke2Z1bmN0aW9uTmFtZX1cXGAgY2FuIG9ubHkgYmUgY2FsbGVkIG9uY2VgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmV0dXJuVmFsdWU7XG5cdH07XG5cblx0bWltaWNGbihvbmV0aW1lLCBmdW5jdGlvbl8pO1xuXHRjYWxsZWRGdW5jdGlvbnMuc2V0KG9uZXRpbWUsIGNhbGxDb3VudCk7XG5cblx0cmV0dXJuIG9uZXRpbWU7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IG9uZXRpbWU7XG4vLyBUT0RPOiBSZW1vdmUgdGhpcyBmb3IgdGhlIG5leHQgbWFqb3IgcmVsZWFzZVxubW9kdWxlLmV4cG9ydHMuZGVmYXVsdCA9IG9uZXRpbWU7XG5cbm1vZHVsZS5leHBvcnRzLmNhbGxDb3VudCA9IGZ1bmN0aW9uXyA9PiB7XG5cdGlmICghY2FsbGVkRnVuY3Rpb25zLmhhcyhmdW5jdGlvbl8pKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKGBUaGUgZ2l2ZW4gZnVuY3Rpb24gXFxgJHtmdW5jdGlvbl8ubmFtZX1cXGAgaXMgbm90IHdyYXBwZWQgYnkgdGhlIFxcYG9uZXRpbWVcXGAgcGFja2FnZWApO1xuXHR9XG5cblx0cmV0dXJuIGNhbGxlZEZ1bmN0aW9ucy5nZXQoZnVuY3Rpb25fKTtcbn07XG4iLCAiLy8gVGhpcyBpcyBub3QgdGhlIHNldCBvZiBhbGwgcG9zc2libGUgc2lnbmFscy5cbi8vXG4vLyBJdCBJUywgaG93ZXZlciwgdGhlIHNldCBvZiBhbGwgc2lnbmFscyB0aGF0IHRyaWdnZXJcbi8vIGFuIGV4aXQgb24gZWl0aGVyIExpbnV4IG9yIEJTRCBzeXN0ZW1zLiAgTGludXggaXMgYVxuLy8gc3VwZXJzZXQgb2YgdGhlIHNpZ25hbCBuYW1lcyBzdXBwb3J0ZWQgb24gQlNELCBhbmRcbi8vIHRoZSB1bmtub3duIHNpZ25hbHMganVzdCBmYWlsIHRvIHJlZ2lzdGVyLCBzbyB3ZSBjYW5cbi8vIGNhdGNoIHRoYXQgZWFzaWx5IGVub3VnaC5cbi8vXG4vLyBEb24ndCBib3RoZXIgd2l0aCBTSUdLSUxMLiAgSXQncyB1bmNhdGNoYWJsZSwgd2hpY2hcbi8vIG1lYW5zIHRoYXQgd2UgY2FuJ3QgZmlyZSBhbnkgY2FsbGJhY2tzIGFueXdheS5cbi8vXG4vLyBJZiBhIHVzZXIgZG9lcyBoYXBwZW4gdG8gcmVnaXN0ZXIgYSBoYW5kbGVyIG9uIGEgbm9uLVxuLy8gZmF0YWwgc2lnbmFsIGxpa2UgU0lHV0lOQ0ggb3Igc29tZXRoaW5nLCBhbmQgdGhlblxuLy8gZXhpdCwgaXQnbGwgZW5kIHVwIGZpcmluZyBgcHJvY2Vzcy5lbWl0KCdleGl0JylgLCBzb1xuLy8gdGhlIGhhbmRsZXIgd2lsbCBiZSBmaXJlZCBhbnl3YXkuXG4vL1xuLy8gU0lHQlVTLCBTSUdGUEUsIFNJR1NFR1YgYW5kIFNJR0lMTCwgd2hlbiBub3QgcmFpc2VkXG4vLyBhcnRpZmljaWFsbHksIGluaGVyZW50bHkgbGVhdmUgdGhlIHByb2Nlc3MgaW4gYVxuLy8gc3RhdGUgZnJvbSB3aGljaCBpdCBpcyBub3Qgc2FmZSB0byB0cnkgYW5kIGVudGVyIEpTXG4vLyBsaXN0ZW5lcnMuXG5tb2R1bGUuZXhwb3J0cyA9IFtcbiAgJ1NJR0FCUlQnLFxuICAnU0lHQUxSTScsXG4gICdTSUdIVVAnLFxuICAnU0lHSU5UJyxcbiAgJ1NJR1RFUk0nXG5dXG5cbmlmIChwcm9jZXNzLnBsYXRmb3JtICE9PSAnd2luMzInKSB7XG4gIG1vZHVsZS5leHBvcnRzLnB1c2goXG4gICAgJ1NJR1ZUQUxSTScsXG4gICAgJ1NJR1hDUFUnLFxuICAgICdTSUdYRlNaJyxcbiAgICAnU0lHVVNSMicsXG4gICAgJ1NJR1RSQVAnLFxuICAgICdTSUdTWVMnLFxuICAgICdTSUdRVUlUJyxcbiAgICAnU0lHSU9UJ1xuICAgIC8vIHNob3VsZCBkZXRlY3QgcHJvZmlsZXIgYW5kIGVuYWJsZS9kaXNhYmxlIGFjY29yZGluZ2x5LlxuICAgIC8vIHNlZSAjMjFcbiAgICAvLyAnU0lHUFJPRidcbiAgKVxufVxuXG5pZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ2xpbnV4Jykge1xuICBtb2R1bGUuZXhwb3J0cy5wdXNoKFxuICAgICdTSUdJTycsXG4gICAgJ1NJR1BPTEwnLFxuICAgICdTSUdQV1InLFxuICAgICdTSUdTVEtGTFQnLFxuICAgICdTSUdVTlVTRUQnXG4gIClcbn1cbiIsICIvLyBOb3RlOiBzaW5jZSBueWMgdXNlcyB0aGlzIG1vZHVsZSB0byBvdXRwdXQgY292ZXJhZ2UsIGFueSBsaW5lc1xuLy8gdGhhdCBhcmUgaW4gdGhlIGRpcmVjdCBzeW5jIGZsb3cgb2YgbnljJ3Mgb3V0cHV0Q292ZXJhZ2UgYXJlXG4vLyBpZ25vcmVkLCBzaW5jZSB3ZSBjYW4gbmV2ZXIgZ2V0IGNvdmVyYWdlIGZvciB0aGVtLlxuLy8gZ3JhYiBhIHJlZmVyZW5jZSB0byBub2RlJ3MgcmVhbCBwcm9jZXNzIG9iamVjdCByaWdodCBhd2F5XG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzXG5cbmNvbnN0IHByb2Nlc3NPayA9IGZ1bmN0aW9uIChwcm9jZXNzKSB7XG4gIHJldHVybiBwcm9jZXNzICYmXG4gICAgdHlwZW9mIHByb2Nlc3MgPT09ICdvYmplY3QnICYmXG4gICAgdHlwZW9mIHByb2Nlc3MucmVtb3ZlTGlzdGVuZXIgPT09ICdmdW5jdGlvbicgJiZcbiAgICB0eXBlb2YgcHJvY2Vzcy5lbWl0ID09PSAnZnVuY3Rpb24nICYmXG4gICAgdHlwZW9mIHByb2Nlc3MucmVhbGx5RXhpdCA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHR5cGVvZiBwcm9jZXNzLmxpc3RlbmVycyA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHR5cGVvZiBwcm9jZXNzLmtpbGwgPT09ICdmdW5jdGlvbicgJiZcbiAgICB0eXBlb2YgcHJvY2Vzcy5waWQgPT09ICdudW1iZXInICYmXG4gICAgdHlwZW9mIHByb2Nlc3Mub24gPT09ICdmdW5jdGlvbidcbn1cblxuLy8gc29tZSBraW5kIG9mIG5vbi1ub2RlIGVudmlyb25tZW50LCBqdXN0IG5vLW9wXG4vKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbmlmICghcHJvY2Vzc09rKHByb2Nlc3MpKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7fVxuICB9XG59IGVsc2Uge1xuICB2YXIgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcbiAgdmFyIHNpZ25hbHMgPSByZXF1aXJlKCcuL3NpZ25hbHMuanMnKVxuICB2YXIgaXNXaW4gPSAvXndpbi9pLnRlc3QocHJvY2Vzcy5wbGF0Zm9ybSlcblxuICB2YXIgRUUgPSByZXF1aXJlKCdldmVudHMnKVxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKHR5cGVvZiBFRSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIEVFID0gRUUuRXZlbnRFbWl0dGVyXG4gIH1cblxuICB2YXIgZW1pdHRlclxuICBpZiAocHJvY2Vzcy5fX3NpZ25hbF9leGl0X2VtaXR0ZXJfXykge1xuICAgIGVtaXR0ZXIgPSBwcm9jZXNzLl9fc2lnbmFsX2V4aXRfZW1pdHRlcl9fXG4gIH0gZWxzZSB7XG4gICAgZW1pdHRlciA9IHByb2Nlc3MuX19zaWduYWxfZXhpdF9lbWl0dGVyX18gPSBuZXcgRUUoKVxuICAgIGVtaXR0ZXIuY291bnQgPSAwXG4gICAgZW1pdHRlci5lbWl0dGVkID0ge31cbiAgfVxuXG4gIC8vIEJlY2F1c2UgdGhpcyBlbWl0dGVyIGlzIGEgZ2xvYmFsLCB3ZSBoYXZlIHRvIGNoZWNrIHRvIHNlZSBpZiBhXG4gIC8vIHByZXZpb3VzIHZlcnNpb24gb2YgdGhpcyBsaWJyYXJ5IGZhaWxlZCB0byBlbmFibGUgaW5maW5pdGUgbGlzdGVuZXJzLlxuICAvLyBJIGtub3cgd2hhdCB5b3UncmUgYWJvdXQgdG8gc2F5LiAgQnV0IGxpdGVyYWxseSBldmVyeXRoaW5nIGFib3V0XG4gIC8vIHNpZ25hbC1leGl0IGlzIGEgY29tcHJvbWlzZSB3aXRoIGV2aWwuICBHZXQgdXNlZCB0byBpdC5cbiAgaWYgKCFlbWl0dGVyLmluZmluaXRlKSB7XG4gICAgZW1pdHRlci5zZXRNYXhMaXN0ZW5lcnMoSW5maW5pdHkpXG4gICAgZW1pdHRlci5pbmZpbml0ZSA9IHRydWVcbiAgfVxuXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGNiLCBvcHRzKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKCFwcm9jZXNzT2soZ2xvYmFsLnByb2Nlc3MpKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkge31cbiAgICB9XG4gICAgYXNzZXJ0LmVxdWFsKHR5cGVvZiBjYiwgJ2Z1bmN0aW9uJywgJ2EgY2FsbGJhY2sgbXVzdCBiZSBwcm92aWRlZCBmb3IgZXhpdCBoYW5kbGVyJylcblxuICAgIGlmIChsb2FkZWQgPT09IGZhbHNlKSB7XG4gICAgICBsb2FkKClcbiAgICB9XG5cbiAgICB2YXIgZXYgPSAnZXhpdCdcbiAgICBpZiAob3B0cyAmJiBvcHRzLmFsd2F5c0xhc3QpIHtcbiAgICAgIGV2ID0gJ2FmdGVyZXhpdCdcbiAgICB9XG5cbiAgICB2YXIgcmVtb3ZlID0gZnVuY3Rpb24gKCkge1xuICAgICAgZW1pdHRlci5yZW1vdmVMaXN0ZW5lcihldiwgY2IpXG4gICAgICBpZiAoZW1pdHRlci5saXN0ZW5lcnMoJ2V4aXQnKS5sZW5ndGggPT09IDAgJiZcbiAgICAgICAgICBlbWl0dGVyLmxpc3RlbmVycygnYWZ0ZXJleGl0JykubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHVubG9hZCgpXG4gICAgICB9XG4gICAgfVxuICAgIGVtaXR0ZXIub24oZXYsIGNiKVxuXG4gICAgcmV0dXJuIHJlbW92ZVxuICB9XG5cbiAgdmFyIHVubG9hZCA9IGZ1bmN0aW9uIHVubG9hZCAoKSB7XG4gICAgaWYgKCFsb2FkZWQgfHwgIXByb2Nlc3NPayhnbG9iYWwucHJvY2VzcykpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBsb2FkZWQgPSBmYWxzZVxuXG4gICAgc2lnbmFscy5mb3JFYWNoKGZ1bmN0aW9uIChzaWcpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHByb2Nlc3MucmVtb3ZlTGlzdGVuZXIoc2lnLCBzaWdMaXN0ZW5lcnNbc2lnXSlcbiAgICAgIH0gY2F0Y2ggKGVyKSB7fVxuICAgIH0pXG4gICAgcHJvY2Vzcy5lbWl0ID0gb3JpZ2luYWxQcm9jZXNzRW1pdFxuICAgIHByb2Nlc3MucmVhbGx5RXhpdCA9IG9yaWdpbmFsUHJvY2Vzc1JlYWxseUV4aXRcbiAgICBlbWl0dGVyLmNvdW50IC09IDFcbiAgfVxuICBtb2R1bGUuZXhwb3J0cy51bmxvYWQgPSB1bmxvYWRcblxuICB2YXIgZW1pdCA9IGZ1bmN0aW9uIGVtaXQgKGV2ZW50LCBjb2RlLCBzaWduYWwpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoZW1pdHRlci5lbWl0dGVkW2V2ZW50XSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGVtaXR0ZXIuZW1pdHRlZFtldmVudF0gPSB0cnVlXG4gICAgZW1pdHRlci5lbWl0KGV2ZW50LCBjb2RlLCBzaWduYWwpXG4gIH1cblxuICAvLyB7IDxzaWduYWw+OiA8bGlzdGVuZXIgZm4+LCAuLi4gfVxuICB2YXIgc2lnTGlzdGVuZXJzID0ge31cbiAgc2lnbmFscy5mb3JFYWNoKGZ1bmN0aW9uIChzaWcpIHtcbiAgICBzaWdMaXN0ZW5lcnNbc2lnXSA9IGZ1bmN0aW9uIGxpc3RlbmVyICgpIHtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgaWYgKCFwcm9jZXNzT2soZ2xvYmFsLnByb2Nlc3MpKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgLy8gSWYgdGhlcmUgYXJlIG5vIG90aGVyIGxpc3RlbmVycywgYW4gZXhpdCBpcyBjb21pbmchXG4gICAgICAvLyBTaW1wbGVzdCB3YXk6IHJlbW92ZSB1cyBhbmQgdGhlbiByZS1zZW5kIHRoZSBzaWduYWwuXG4gICAgICAvLyBXZSBrbm93IHRoYXQgdGhpcyB3aWxsIGtpbGwgdGhlIHByb2Nlc3MsIHNvIHdlIGNhblxuICAgICAgLy8gc2FmZWx5IGVtaXQgbm93LlxuICAgICAgdmFyIGxpc3RlbmVycyA9IHByb2Nlc3MubGlzdGVuZXJzKHNpZylcbiAgICAgIGlmIChsaXN0ZW5lcnMubGVuZ3RoID09PSBlbWl0dGVyLmNvdW50KSB7XG4gICAgICAgIHVubG9hZCgpXG4gICAgICAgIGVtaXQoJ2V4aXQnLCBudWxsLCBzaWcpXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIGVtaXQoJ2FmdGVyZXhpdCcsIG51bGwsIHNpZylcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgaWYgKGlzV2luICYmIHNpZyA9PT0gJ1NJR0hVUCcpIHtcbiAgICAgICAgICAvLyBcIlNJR0hVUFwiIHRocm93cyBhbiBgRU5PU1lTYCBlcnJvciBvbiBXaW5kb3dzLFxuICAgICAgICAgIC8vIHNvIHVzZSBhIHN1cHBvcnRlZCBzaWduYWwgaW5zdGVhZFxuICAgICAgICAgIHNpZyA9ICdTSUdJTlQnXG4gICAgICAgIH1cbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgcHJvY2Vzcy5raWxsKHByb2Nlc3MucGlkLCBzaWcpXG4gICAgICB9XG4gICAgfVxuICB9KVxuXG4gIG1vZHVsZS5leHBvcnRzLnNpZ25hbHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHNpZ25hbHNcbiAgfVxuXG4gIHZhciBsb2FkZWQgPSBmYWxzZVxuXG4gIHZhciBsb2FkID0gZnVuY3Rpb24gbG9hZCAoKSB7XG4gICAgaWYgKGxvYWRlZCB8fCAhcHJvY2Vzc09rKGdsb2JhbC5wcm9jZXNzKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGxvYWRlZCA9IHRydWVcblxuICAgIC8vIFRoaXMgaXMgdGhlIG51bWJlciBvZiBvblNpZ25hbEV4aXQncyB0aGF0IGFyZSBpbiBwbGF5LlxuICAgIC8vIEl0J3MgaW1wb3J0YW50IHNvIHRoYXQgd2UgY2FuIGNvdW50IHRoZSBjb3JyZWN0IG51bWJlciBvZlxuICAgIC8vIGxpc3RlbmVycyBvbiBzaWduYWxzLCBhbmQgZG9uJ3Qgd2FpdCBmb3IgdGhlIG90aGVyIG9uZSB0b1xuICAgIC8vIGhhbmRsZSBpdCBpbnN0ZWFkIG9mIHVzLlxuICAgIGVtaXR0ZXIuY291bnQgKz0gMVxuXG4gICAgc2lnbmFscyA9IHNpZ25hbHMuZmlsdGVyKGZ1bmN0aW9uIChzaWcpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHByb2Nlc3Mub24oc2lnLCBzaWdMaXN0ZW5lcnNbc2lnXSlcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH0gY2F0Y2ggKGVyKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgIH0pXG5cbiAgICBwcm9jZXNzLmVtaXQgPSBwcm9jZXNzRW1pdFxuICAgIHByb2Nlc3MucmVhbGx5RXhpdCA9IHByb2Nlc3NSZWFsbHlFeGl0XG4gIH1cbiAgbW9kdWxlLmV4cG9ydHMubG9hZCA9IGxvYWRcblxuICB2YXIgb3JpZ2luYWxQcm9jZXNzUmVhbGx5RXhpdCA9IHByb2Nlc3MucmVhbGx5RXhpdFxuICB2YXIgcHJvY2Vzc1JlYWxseUV4aXQgPSBmdW5jdGlvbiBwcm9jZXNzUmVhbGx5RXhpdCAoY29kZSkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmICghcHJvY2Vzc09rKGdsb2JhbC5wcm9jZXNzKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHByb2Nlc3MuZXhpdENvZGUgPSBjb2RlIHx8IC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovIDBcbiAgICBlbWl0KCdleGl0JywgcHJvY2Vzcy5leGl0Q29kZSwgbnVsbClcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGVtaXQoJ2FmdGVyZXhpdCcsIHByb2Nlc3MuZXhpdENvZGUsIG51bGwpXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBvcmlnaW5hbFByb2Nlc3NSZWFsbHlFeGl0LmNhbGwocHJvY2VzcywgcHJvY2Vzcy5leGl0Q29kZSlcbiAgfVxuXG4gIHZhciBvcmlnaW5hbFByb2Nlc3NFbWl0ID0gcHJvY2Vzcy5lbWl0XG4gIHZhciBwcm9jZXNzRW1pdCA9IGZ1bmN0aW9uIHByb2Nlc3NFbWl0IChldiwgYXJnKSB7XG4gICAgaWYgKGV2ID09PSAnZXhpdCcgJiYgcHJvY2Vzc09rKGdsb2JhbC5wcm9jZXNzKSkge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgIGlmIChhcmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBwcm9jZXNzLmV4aXRDb2RlID0gYXJnXG4gICAgICB9XG4gICAgICB2YXIgcmV0ID0gb3JpZ2luYWxQcm9jZXNzRW1pdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgZW1pdCgnZXhpdCcsIHByb2Nlc3MuZXhpdENvZGUsIG51bGwpXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgZW1pdCgnYWZ0ZXJleGl0JywgcHJvY2Vzcy5leGl0Q29kZSwgbnVsbClcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICByZXR1cm4gcmV0XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBvcmlnaW5hbFByb2Nlc3NFbWl0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICB9XG4gIH1cbn1cbiIsICJ7XG5cdFwiZG90c1wiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiA4MCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIlx1MjgwQlwiLFxuXHRcdFx0XCJcdTI4MTlcIixcblx0XHRcdFwiXHUyODM5XCIsXG5cdFx0XHRcIlx1MjgzOFwiLFxuXHRcdFx0XCJcdTI4M0NcIixcblx0XHRcdFwiXHUyODM0XCIsXG5cdFx0XHRcIlx1MjgyNlwiLFxuXHRcdFx0XCJcdTI4MjdcIixcblx0XHRcdFwiXHUyODA3XCIsXG5cdFx0XHRcIlx1MjgwRlwiXG5cdFx0XVxuXHR9LFxuXHRcImRvdHMyXCI6IHtcblx0XHRcImludGVydmFsXCI6IDgwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHUyOEZFXCIsXG5cdFx0XHRcIlx1MjhGRFwiLFxuXHRcdFx0XCJcdTI4RkJcIixcblx0XHRcdFwiXHUyOEJGXCIsXG5cdFx0XHRcIlx1Mjg3RlwiLFxuXHRcdFx0XCJcdTI4REZcIixcblx0XHRcdFwiXHUyOEVGXCIsXG5cdFx0XHRcIlx1MjhGN1wiXG5cdFx0XVxuXHR9LFxuXHRcImRvdHMzXCI6IHtcblx0XHRcImludGVydmFsXCI6IDgwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHUyODBCXCIsXG5cdFx0XHRcIlx1MjgxOVwiLFxuXHRcdFx0XCJcdTI4MUFcIixcblx0XHRcdFwiXHUyODFFXCIsXG5cdFx0XHRcIlx1MjgxNlwiLFxuXHRcdFx0XCJcdTI4MjZcIixcblx0XHRcdFwiXHUyODM0XCIsXG5cdFx0XHRcIlx1MjgzMlwiLFxuXHRcdFx0XCJcdTI4MzNcIixcblx0XHRcdFwiXHUyODEzXCJcblx0XHRdXG5cdH0sXG5cdFwiZG90czRcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogODAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCJcdTI4MDRcIixcblx0XHRcdFwiXHUyODA2XCIsXG5cdFx0XHRcIlx1MjgwN1wiLFxuXHRcdFx0XCJcdTI4MEJcIixcblx0XHRcdFwiXHUyODE5XCIsXG5cdFx0XHRcIlx1MjgzOFwiLFxuXHRcdFx0XCJcdTI4MzBcIixcblx0XHRcdFwiXHUyODIwXCIsXG5cdFx0XHRcIlx1MjgzMFwiLFxuXHRcdFx0XCJcdTI4MzhcIixcblx0XHRcdFwiXHUyODE5XCIsXG5cdFx0XHRcIlx1MjgwQlwiLFxuXHRcdFx0XCJcdTI4MDdcIixcblx0XHRcdFwiXHUyODA2XCJcblx0XHRdXG5cdH0sXG5cdFwiZG90czVcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogODAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCJcdTI4MEJcIixcblx0XHRcdFwiXHUyODE5XCIsXG5cdFx0XHRcIlx1MjgxQVwiLFxuXHRcdFx0XCJcdTI4MTJcIixcblx0XHRcdFwiXHUyODAyXCIsXG5cdFx0XHRcIlx1MjgwMlwiLFxuXHRcdFx0XCJcdTI4MTJcIixcblx0XHRcdFwiXHUyODMyXCIsXG5cdFx0XHRcIlx1MjgzNFwiLFxuXHRcdFx0XCJcdTI4MjZcIixcblx0XHRcdFwiXHUyODE2XCIsXG5cdFx0XHRcIlx1MjgxMlwiLFxuXHRcdFx0XCJcdTI4MTBcIixcblx0XHRcdFwiXHUyODEwXCIsXG5cdFx0XHRcIlx1MjgxMlwiLFxuXHRcdFx0XCJcdTI4MTNcIixcblx0XHRcdFwiXHUyODBCXCJcblx0XHRdXG5cdH0sXG5cdFwiZG90czZcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogODAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCJcdTI4MDFcIixcblx0XHRcdFwiXHUyODA5XCIsXG5cdFx0XHRcIlx1MjgxOVwiLFxuXHRcdFx0XCJcdTI4MUFcIixcblx0XHRcdFwiXHUyODEyXCIsXG5cdFx0XHRcIlx1MjgwMlwiLFxuXHRcdFx0XCJcdTI4MDJcIixcblx0XHRcdFwiXHUyODEyXCIsXG5cdFx0XHRcIlx1MjgzMlwiLFxuXHRcdFx0XCJcdTI4MzRcIixcblx0XHRcdFwiXHUyODI0XCIsXG5cdFx0XHRcIlx1MjgwNFwiLFxuXHRcdFx0XCJcdTI4MDRcIixcblx0XHRcdFwiXHUyODI0XCIsXG5cdFx0XHRcIlx1MjgzNFwiLFxuXHRcdFx0XCJcdTI4MzJcIixcblx0XHRcdFwiXHUyODEyXCIsXG5cdFx0XHRcIlx1MjgwMlwiLFxuXHRcdFx0XCJcdTI4MDJcIixcblx0XHRcdFwiXHUyODEyXCIsXG5cdFx0XHRcIlx1MjgxQVwiLFxuXHRcdFx0XCJcdTI4MTlcIixcblx0XHRcdFwiXHUyODA5XCIsXG5cdFx0XHRcIlx1MjgwMVwiXG5cdFx0XVxuXHR9LFxuXHRcImRvdHM3XCI6IHtcblx0XHRcImludGVydmFsXCI6IDgwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHUyODA4XCIsXG5cdFx0XHRcIlx1MjgwOVwiLFxuXHRcdFx0XCJcdTI4MEJcIixcblx0XHRcdFwiXHUyODEzXCIsXG5cdFx0XHRcIlx1MjgxMlwiLFxuXHRcdFx0XCJcdTI4MTBcIixcblx0XHRcdFwiXHUyODEwXCIsXG5cdFx0XHRcIlx1MjgxMlwiLFxuXHRcdFx0XCJcdTI4MTZcIixcblx0XHRcdFwiXHUyODI2XCIsXG5cdFx0XHRcIlx1MjgyNFwiLFxuXHRcdFx0XCJcdTI4MjBcIixcblx0XHRcdFwiXHUyODIwXCIsXG5cdFx0XHRcIlx1MjgyNFwiLFxuXHRcdFx0XCJcdTI4MjZcIixcblx0XHRcdFwiXHUyODE2XCIsXG5cdFx0XHRcIlx1MjgxMlwiLFxuXHRcdFx0XCJcdTI4MTBcIixcblx0XHRcdFwiXHUyODEwXCIsXG5cdFx0XHRcIlx1MjgxMlwiLFxuXHRcdFx0XCJcdTI4MTNcIixcblx0XHRcdFwiXHUyODBCXCIsXG5cdFx0XHRcIlx1MjgwOVwiLFxuXHRcdFx0XCJcdTI4MDhcIlxuXHRcdF1cblx0fSxcblx0XCJkb3RzOFwiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiA4MCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIlx1MjgwMVwiLFxuXHRcdFx0XCJcdTI4MDFcIixcblx0XHRcdFwiXHUyODA5XCIsXG5cdFx0XHRcIlx1MjgxOVwiLFxuXHRcdFx0XCJcdTI4MUFcIixcblx0XHRcdFwiXHUyODEyXCIsXG5cdFx0XHRcIlx1MjgwMlwiLFxuXHRcdFx0XCJcdTI4MDJcIixcblx0XHRcdFwiXHUyODEyXCIsXG5cdFx0XHRcIlx1MjgzMlwiLFxuXHRcdFx0XCJcdTI4MzRcIixcblx0XHRcdFwiXHUyODI0XCIsXG5cdFx0XHRcIlx1MjgwNFwiLFxuXHRcdFx0XCJcdTI4MDRcIixcblx0XHRcdFwiXHUyODI0XCIsXG5cdFx0XHRcIlx1MjgyMFwiLFxuXHRcdFx0XCJcdTI4MjBcIixcblx0XHRcdFwiXHUyODI0XCIsXG5cdFx0XHRcIlx1MjgyNlwiLFxuXHRcdFx0XCJcdTI4MTZcIixcblx0XHRcdFwiXHUyODEyXCIsXG5cdFx0XHRcIlx1MjgxMFwiLFxuXHRcdFx0XCJcdTI4MTBcIixcblx0XHRcdFwiXHUyODEyXCIsXG5cdFx0XHRcIlx1MjgxM1wiLFxuXHRcdFx0XCJcdTI4MEJcIixcblx0XHRcdFwiXHUyODA5XCIsXG5cdFx0XHRcIlx1MjgwOFwiLFxuXHRcdFx0XCJcdTI4MDhcIlxuXHRcdF1cblx0fSxcblx0XCJkb3RzOVwiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiA4MCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIlx1MjhCOVwiLFxuXHRcdFx0XCJcdTI4QkFcIixcblx0XHRcdFwiXHUyOEJDXCIsXG5cdFx0XHRcIlx1MjhGOFwiLFxuXHRcdFx0XCJcdTI4QzdcIixcblx0XHRcdFwiXHUyODY3XCIsXG5cdFx0XHRcIlx1Mjg1N1wiLFxuXHRcdFx0XCJcdTI4NEZcIlxuXHRcdF1cblx0fSxcblx0XCJkb3RzMTBcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogODAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCJcdTI4ODRcIixcblx0XHRcdFwiXHUyODgyXCIsXG5cdFx0XHRcIlx1Mjg4MVwiLFxuXHRcdFx0XCJcdTI4NDFcIixcblx0XHRcdFwiXHUyODQ4XCIsXG5cdFx0XHRcIlx1Mjg1MFwiLFxuXHRcdFx0XCJcdTI4NjBcIlxuXHRcdF1cblx0fSxcblx0XCJkb3RzMTFcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogMTAwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHUyODAxXCIsXG5cdFx0XHRcIlx1MjgwMlwiLFxuXHRcdFx0XCJcdTI4MDRcIixcblx0XHRcdFwiXHUyODQwXCIsXG5cdFx0XHRcIlx1Mjg4MFwiLFxuXHRcdFx0XCJcdTI4MjBcIixcblx0XHRcdFwiXHUyODEwXCIsXG5cdFx0XHRcIlx1MjgwOFwiXG5cdFx0XVxuXHR9LFxuXHRcImRvdHMxMlwiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiA4MCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIlx1Mjg4MFx1MjgwMFwiLFxuXHRcdFx0XCJcdTI4NDBcdTI4MDBcIixcblx0XHRcdFwiXHUyODA0XHUyODAwXCIsXG5cdFx0XHRcIlx1Mjg4Mlx1MjgwMFwiLFxuXHRcdFx0XCJcdTI4NDJcdTI4MDBcIixcblx0XHRcdFwiXHUyODA1XHUyODAwXCIsXG5cdFx0XHRcIlx1Mjg4M1x1MjgwMFwiLFxuXHRcdFx0XCJcdTI4NDNcdTI4MDBcIixcblx0XHRcdFwiXHUyODBEXHUyODAwXCIsXG5cdFx0XHRcIlx1Mjg4Qlx1MjgwMFwiLFxuXHRcdFx0XCJcdTI4NEJcdTI4MDBcIixcblx0XHRcdFwiXHUyODBEXHUyODAxXCIsXG5cdFx0XHRcIlx1Mjg4Qlx1MjgwMVwiLFxuXHRcdFx0XCJcdTI4NEJcdTI4MDFcIixcblx0XHRcdFwiXHUyODBEXHUyODA5XCIsXG5cdFx0XHRcIlx1MjgwQlx1MjgwOVwiLFxuXHRcdFx0XCJcdTI4MEJcdTI4MDlcIixcblx0XHRcdFwiXHUyODA5XHUyODE5XCIsXG5cdFx0XHRcIlx1MjgwOVx1MjgxOVwiLFxuXHRcdFx0XCJcdTI4MDlcdTI4MjlcIixcblx0XHRcdFwiXHUyODA4XHUyODk5XCIsXG5cdFx0XHRcIlx1MjgwOFx1Mjg1OVwiLFxuXHRcdFx0XCJcdTI4ODhcdTI4MjlcIixcblx0XHRcdFwiXHUyODQwXHUyODk5XCIsXG5cdFx0XHRcIlx1MjgwNFx1Mjg1OVwiLFxuXHRcdFx0XCJcdTI4ODJcdTI4MjlcIixcblx0XHRcdFwiXHUyODQyXHUyODk4XCIsXG5cdFx0XHRcIlx1MjgwNVx1Mjg1OFwiLFxuXHRcdFx0XCJcdTI4ODNcdTI4MjhcIixcblx0XHRcdFwiXHUyODQzXHUyODkwXCIsXG5cdFx0XHRcIlx1MjgwRFx1Mjg1MFwiLFxuXHRcdFx0XCJcdTI4OEJcdTI4MjBcIixcblx0XHRcdFwiXHUyODRCXHUyODgwXCIsXG5cdFx0XHRcIlx1MjgwRFx1Mjg0MVwiLFxuXHRcdFx0XCJcdTI4OEJcdTI4MDFcIixcblx0XHRcdFwiXHUyODRCXHUyODAxXCIsXG5cdFx0XHRcIlx1MjgwRFx1MjgwOVwiLFxuXHRcdFx0XCJcdTI4MEJcdTI4MDlcIixcblx0XHRcdFwiXHUyODBCXHUyODA5XCIsXG5cdFx0XHRcIlx1MjgwOVx1MjgxOVwiLFxuXHRcdFx0XCJcdTI4MDlcdTI4MTlcIixcblx0XHRcdFwiXHUyODA5XHUyODI5XCIsXG5cdFx0XHRcIlx1MjgwOFx1Mjg5OVwiLFxuXHRcdFx0XCJcdTI4MDhcdTI4NTlcIixcblx0XHRcdFwiXHUyODA4XHUyODI5XCIsXG5cdFx0XHRcIlx1MjgwMFx1Mjg5OVwiLFxuXHRcdFx0XCJcdTI4MDBcdTI4NTlcIixcblx0XHRcdFwiXHUyODAwXHUyODI5XCIsXG5cdFx0XHRcIlx1MjgwMFx1Mjg5OFwiLFxuXHRcdFx0XCJcdTI4MDBcdTI4NThcIixcblx0XHRcdFwiXHUyODAwXHUyODI4XCIsXG5cdFx0XHRcIlx1MjgwMFx1Mjg5MFwiLFxuXHRcdFx0XCJcdTI4MDBcdTI4NTBcIixcblx0XHRcdFwiXHUyODAwXHUyODIwXCIsXG5cdFx0XHRcIlx1MjgwMFx1Mjg4MFwiLFxuXHRcdFx0XCJcdTI4MDBcdTI4NDBcIlxuXHRcdF1cblx0fSxcblx0XCJkb3RzMTNcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogODAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCJcdTI4RkNcIixcblx0XHRcdFwiXHUyOEY5XCIsXG5cdFx0XHRcIlx1MjhCQlwiLFxuXHRcdFx0XCJcdTI4M0ZcIixcblx0XHRcdFwiXHUyODVGXCIsXG5cdFx0XHRcIlx1MjhDRlwiLFxuXHRcdFx0XCJcdTI4RTdcIixcblx0XHRcdFwiXHUyOEY2XCJcblx0XHRdXG5cdH0sXG5cdFwiZG90czhCaXRcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogODAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCJcdTI4MDBcIixcblx0XHRcdFwiXHUyODAxXCIsXG5cdFx0XHRcIlx1MjgwMlwiLFxuXHRcdFx0XCJcdTI4MDNcIixcblx0XHRcdFwiXHUyODA0XCIsXG5cdFx0XHRcIlx1MjgwNVwiLFxuXHRcdFx0XCJcdTI4MDZcIixcblx0XHRcdFwiXHUyODA3XCIsXG5cdFx0XHRcIlx1Mjg0MFwiLFxuXHRcdFx0XCJcdTI4NDFcIixcblx0XHRcdFwiXHUyODQyXCIsXG5cdFx0XHRcIlx1Mjg0M1wiLFxuXHRcdFx0XCJcdTI4NDRcIixcblx0XHRcdFwiXHUyODQ1XCIsXG5cdFx0XHRcIlx1Mjg0NlwiLFxuXHRcdFx0XCJcdTI4NDdcIixcblx0XHRcdFwiXHUyODA4XCIsXG5cdFx0XHRcIlx1MjgwOVwiLFxuXHRcdFx0XCJcdTI4MEFcIixcblx0XHRcdFwiXHUyODBCXCIsXG5cdFx0XHRcIlx1MjgwQ1wiLFxuXHRcdFx0XCJcdTI4MERcIixcblx0XHRcdFwiXHUyODBFXCIsXG5cdFx0XHRcIlx1MjgwRlwiLFxuXHRcdFx0XCJcdTI4NDhcIixcblx0XHRcdFwiXHUyODQ5XCIsXG5cdFx0XHRcIlx1Mjg0QVwiLFxuXHRcdFx0XCJcdTI4NEJcIixcblx0XHRcdFwiXHUyODRDXCIsXG5cdFx0XHRcIlx1Mjg0RFwiLFxuXHRcdFx0XCJcdTI4NEVcIixcblx0XHRcdFwiXHUyODRGXCIsXG5cdFx0XHRcIlx1MjgxMFwiLFxuXHRcdFx0XCJcdTI4MTFcIixcblx0XHRcdFwiXHUyODEyXCIsXG5cdFx0XHRcIlx1MjgxM1wiLFxuXHRcdFx0XCJcdTI4MTRcIixcblx0XHRcdFwiXHUyODE1XCIsXG5cdFx0XHRcIlx1MjgxNlwiLFxuXHRcdFx0XCJcdTI4MTdcIixcblx0XHRcdFwiXHUyODUwXCIsXG5cdFx0XHRcIlx1Mjg1MVwiLFxuXHRcdFx0XCJcdTI4NTJcIixcblx0XHRcdFwiXHUyODUzXCIsXG5cdFx0XHRcIlx1Mjg1NFwiLFxuXHRcdFx0XCJcdTI4NTVcIixcblx0XHRcdFwiXHUyODU2XCIsXG5cdFx0XHRcIlx1Mjg1N1wiLFxuXHRcdFx0XCJcdTI4MThcIixcblx0XHRcdFwiXHUyODE5XCIsXG5cdFx0XHRcIlx1MjgxQVwiLFxuXHRcdFx0XCJcdTI4MUJcIixcblx0XHRcdFwiXHUyODFDXCIsXG5cdFx0XHRcIlx1MjgxRFwiLFxuXHRcdFx0XCJcdTI4MUVcIixcblx0XHRcdFwiXHUyODFGXCIsXG5cdFx0XHRcIlx1Mjg1OFwiLFxuXHRcdFx0XCJcdTI4NTlcIixcblx0XHRcdFwiXHUyODVBXCIsXG5cdFx0XHRcIlx1Mjg1QlwiLFxuXHRcdFx0XCJcdTI4NUNcIixcblx0XHRcdFwiXHUyODVEXCIsXG5cdFx0XHRcIlx1Mjg1RVwiLFxuXHRcdFx0XCJcdTI4NUZcIixcblx0XHRcdFwiXHUyODIwXCIsXG5cdFx0XHRcIlx1MjgyMVwiLFxuXHRcdFx0XCJcdTI4MjJcIixcblx0XHRcdFwiXHUyODIzXCIsXG5cdFx0XHRcIlx1MjgyNFwiLFxuXHRcdFx0XCJcdTI4MjVcIixcblx0XHRcdFwiXHUyODI2XCIsXG5cdFx0XHRcIlx1MjgyN1wiLFxuXHRcdFx0XCJcdTI4NjBcIixcblx0XHRcdFwiXHUyODYxXCIsXG5cdFx0XHRcIlx1Mjg2MlwiLFxuXHRcdFx0XCJcdTI4NjNcIixcblx0XHRcdFwiXHUyODY0XCIsXG5cdFx0XHRcIlx1Mjg2NVwiLFxuXHRcdFx0XCJcdTI4NjZcIixcblx0XHRcdFwiXHUyODY3XCIsXG5cdFx0XHRcIlx1MjgyOFwiLFxuXHRcdFx0XCJcdTI4MjlcIixcblx0XHRcdFwiXHUyODJBXCIsXG5cdFx0XHRcIlx1MjgyQlwiLFxuXHRcdFx0XCJcdTI4MkNcIixcblx0XHRcdFwiXHUyODJEXCIsXG5cdFx0XHRcIlx1MjgyRVwiLFxuXHRcdFx0XCJcdTI4MkZcIixcblx0XHRcdFwiXHUyODY4XCIsXG5cdFx0XHRcIlx1Mjg2OVwiLFxuXHRcdFx0XCJcdTI4NkFcIixcblx0XHRcdFwiXHUyODZCXCIsXG5cdFx0XHRcIlx1Mjg2Q1wiLFxuXHRcdFx0XCJcdTI4NkRcIixcblx0XHRcdFwiXHUyODZFXCIsXG5cdFx0XHRcIlx1Mjg2RlwiLFxuXHRcdFx0XCJcdTI4MzBcIixcblx0XHRcdFwiXHUyODMxXCIsXG5cdFx0XHRcIlx1MjgzMlwiLFxuXHRcdFx0XCJcdTI4MzNcIixcblx0XHRcdFwiXHUyODM0XCIsXG5cdFx0XHRcIlx1MjgzNVwiLFxuXHRcdFx0XCJcdTI4MzZcIixcblx0XHRcdFwiXHUyODM3XCIsXG5cdFx0XHRcIlx1Mjg3MFwiLFxuXHRcdFx0XCJcdTI4NzFcIixcblx0XHRcdFwiXHUyODcyXCIsXG5cdFx0XHRcIlx1Mjg3M1wiLFxuXHRcdFx0XCJcdTI4NzRcIixcblx0XHRcdFwiXHUyODc1XCIsXG5cdFx0XHRcIlx1Mjg3NlwiLFxuXHRcdFx0XCJcdTI4NzdcIixcblx0XHRcdFwiXHUyODM4XCIsXG5cdFx0XHRcIlx1MjgzOVwiLFxuXHRcdFx0XCJcdTI4M0FcIixcblx0XHRcdFwiXHUyODNCXCIsXG5cdFx0XHRcIlx1MjgzQ1wiLFxuXHRcdFx0XCJcdTI4M0RcIixcblx0XHRcdFwiXHUyODNFXCIsXG5cdFx0XHRcIlx1MjgzRlwiLFxuXHRcdFx0XCJcdTI4NzhcIixcblx0XHRcdFwiXHUyODc5XCIsXG5cdFx0XHRcIlx1Mjg3QVwiLFxuXHRcdFx0XCJcdTI4N0JcIixcblx0XHRcdFwiXHUyODdDXCIsXG5cdFx0XHRcIlx1Mjg3RFwiLFxuXHRcdFx0XCJcdTI4N0VcIixcblx0XHRcdFwiXHUyODdGXCIsXG5cdFx0XHRcIlx1Mjg4MFwiLFxuXHRcdFx0XCJcdTI4ODFcIixcblx0XHRcdFwiXHUyODgyXCIsXG5cdFx0XHRcIlx1Mjg4M1wiLFxuXHRcdFx0XCJcdTI4ODRcIixcblx0XHRcdFwiXHUyODg1XCIsXG5cdFx0XHRcIlx1Mjg4NlwiLFxuXHRcdFx0XCJcdTI4ODdcIixcblx0XHRcdFwiXHUyOEMwXCIsXG5cdFx0XHRcIlx1MjhDMVwiLFxuXHRcdFx0XCJcdTI4QzJcIixcblx0XHRcdFwiXHUyOEMzXCIsXG5cdFx0XHRcIlx1MjhDNFwiLFxuXHRcdFx0XCJcdTI4QzVcIixcblx0XHRcdFwiXHUyOEM2XCIsXG5cdFx0XHRcIlx1MjhDN1wiLFxuXHRcdFx0XCJcdTI4ODhcIixcblx0XHRcdFwiXHUyODg5XCIsXG5cdFx0XHRcIlx1Mjg4QVwiLFxuXHRcdFx0XCJcdTI4OEJcIixcblx0XHRcdFwiXHUyODhDXCIsXG5cdFx0XHRcIlx1Mjg4RFwiLFxuXHRcdFx0XCJcdTI4OEVcIixcblx0XHRcdFwiXHUyODhGXCIsXG5cdFx0XHRcIlx1MjhDOFwiLFxuXHRcdFx0XCJcdTI4QzlcIixcblx0XHRcdFwiXHUyOENBXCIsXG5cdFx0XHRcIlx1MjhDQlwiLFxuXHRcdFx0XCJcdTI4Q0NcIixcblx0XHRcdFwiXHUyOENEXCIsXG5cdFx0XHRcIlx1MjhDRVwiLFxuXHRcdFx0XCJcdTI4Q0ZcIixcblx0XHRcdFwiXHUyODkwXCIsXG5cdFx0XHRcIlx1Mjg5MVwiLFxuXHRcdFx0XCJcdTI4OTJcIixcblx0XHRcdFwiXHUyODkzXCIsXG5cdFx0XHRcIlx1Mjg5NFwiLFxuXHRcdFx0XCJcdTI4OTVcIixcblx0XHRcdFwiXHUyODk2XCIsXG5cdFx0XHRcIlx1Mjg5N1wiLFxuXHRcdFx0XCJcdTI4RDBcIixcblx0XHRcdFwiXHUyOEQxXCIsXG5cdFx0XHRcIlx1MjhEMlwiLFxuXHRcdFx0XCJcdTI4RDNcIixcblx0XHRcdFwiXHUyOEQ0XCIsXG5cdFx0XHRcIlx1MjhENVwiLFxuXHRcdFx0XCJcdTI4RDZcIixcblx0XHRcdFwiXHUyOEQ3XCIsXG5cdFx0XHRcIlx1Mjg5OFwiLFxuXHRcdFx0XCJcdTI4OTlcIixcblx0XHRcdFwiXHUyODlBXCIsXG5cdFx0XHRcIlx1Mjg5QlwiLFxuXHRcdFx0XCJcdTI4OUNcIixcblx0XHRcdFwiXHUyODlEXCIsXG5cdFx0XHRcIlx1Mjg5RVwiLFxuXHRcdFx0XCJcdTI4OUZcIixcblx0XHRcdFwiXHUyOEQ4XCIsXG5cdFx0XHRcIlx1MjhEOVwiLFxuXHRcdFx0XCJcdTI4REFcIixcblx0XHRcdFwiXHUyOERCXCIsXG5cdFx0XHRcIlx1MjhEQ1wiLFxuXHRcdFx0XCJcdTI4RERcIixcblx0XHRcdFwiXHUyOERFXCIsXG5cdFx0XHRcIlx1MjhERlwiLFxuXHRcdFx0XCJcdTI4QTBcIixcblx0XHRcdFwiXHUyOEExXCIsXG5cdFx0XHRcIlx1MjhBMlwiLFxuXHRcdFx0XCJcdTI4QTNcIixcblx0XHRcdFwiXHUyOEE0XCIsXG5cdFx0XHRcIlx1MjhBNVwiLFxuXHRcdFx0XCJcdTI4QTZcIixcblx0XHRcdFwiXHUyOEE3XCIsXG5cdFx0XHRcIlx1MjhFMFwiLFxuXHRcdFx0XCJcdTI4RTFcIixcblx0XHRcdFwiXHUyOEUyXCIsXG5cdFx0XHRcIlx1MjhFM1wiLFxuXHRcdFx0XCJcdTI4RTRcIixcblx0XHRcdFwiXHUyOEU1XCIsXG5cdFx0XHRcIlx1MjhFNlwiLFxuXHRcdFx0XCJcdTI4RTdcIixcblx0XHRcdFwiXHUyOEE4XCIsXG5cdFx0XHRcIlx1MjhBOVwiLFxuXHRcdFx0XCJcdTI4QUFcIixcblx0XHRcdFwiXHUyOEFCXCIsXG5cdFx0XHRcIlx1MjhBQ1wiLFxuXHRcdFx0XCJcdTI4QURcIixcblx0XHRcdFwiXHUyOEFFXCIsXG5cdFx0XHRcIlx1MjhBRlwiLFxuXHRcdFx0XCJcdTI4RThcIixcblx0XHRcdFwiXHUyOEU5XCIsXG5cdFx0XHRcIlx1MjhFQVwiLFxuXHRcdFx0XCJcdTI4RUJcIixcblx0XHRcdFwiXHUyOEVDXCIsXG5cdFx0XHRcIlx1MjhFRFwiLFxuXHRcdFx0XCJcdTI4RUVcIixcblx0XHRcdFwiXHUyOEVGXCIsXG5cdFx0XHRcIlx1MjhCMFwiLFxuXHRcdFx0XCJcdTI4QjFcIixcblx0XHRcdFwiXHUyOEIyXCIsXG5cdFx0XHRcIlx1MjhCM1wiLFxuXHRcdFx0XCJcdTI4QjRcIixcblx0XHRcdFwiXHUyOEI1XCIsXG5cdFx0XHRcIlx1MjhCNlwiLFxuXHRcdFx0XCJcdTI4QjdcIixcblx0XHRcdFwiXHUyOEYwXCIsXG5cdFx0XHRcIlx1MjhGMVwiLFxuXHRcdFx0XCJcdTI4RjJcIixcblx0XHRcdFwiXHUyOEYzXCIsXG5cdFx0XHRcIlx1MjhGNFwiLFxuXHRcdFx0XCJcdTI4RjVcIixcblx0XHRcdFwiXHUyOEY2XCIsXG5cdFx0XHRcIlx1MjhGN1wiLFxuXHRcdFx0XCJcdTI4QjhcIixcblx0XHRcdFwiXHUyOEI5XCIsXG5cdFx0XHRcIlx1MjhCQVwiLFxuXHRcdFx0XCJcdTI4QkJcIixcblx0XHRcdFwiXHUyOEJDXCIsXG5cdFx0XHRcIlx1MjhCRFwiLFxuXHRcdFx0XCJcdTI4QkVcIixcblx0XHRcdFwiXHUyOEJGXCIsXG5cdFx0XHRcIlx1MjhGOFwiLFxuXHRcdFx0XCJcdTI4RjlcIixcblx0XHRcdFwiXHUyOEZBXCIsXG5cdFx0XHRcIlx1MjhGQlwiLFxuXHRcdFx0XCJcdTI4RkNcIixcblx0XHRcdFwiXHUyOEZEXCIsXG5cdFx0XHRcIlx1MjhGRVwiLFxuXHRcdFx0XCJcdTI4RkZcIlxuXHRcdF1cblx0fSxcblx0XCJzYW5kXCI6IHtcblx0XHRcImludGVydmFsXCI6IDgwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHUyODAxXCIsXG5cdFx0XHRcIlx1MjgwMlwiLFxuXHRcdFx0XCJcdTI4MDRcIixcblx0XHRcdFwiXHUyODQwXCIsXG5cdFx0XHRcIlx1Mjg0OFwiLFxuXHRcdFx0XCJcdTI4NTBcIixcblx0XHRcdFwiXHUyODYwXCIsXG5cdFx0XHRcIlx1MjhDMFwiLFxuXHRcdFx0XCJcdTI4QzFcIixcblx0XHRcdFwiXHUyOEMyXCIsXG5cdFx0XHRcIlx1MjhDNFwiLFxuXHRcdFx0XCJcdTI4Q0NcIixcblx0XHRcdFwiXHUyOEQ0XCIsXG5cdFx0XHRcIlx1MjhFNFwiLFxuXHRcdFx0XCJcdTI4RTVcIixcblx0XHRcdFwiXHUyOEU2XCIsXG5cdFx0XHRcIlx1MjhFRVwiLFxuXHRcdFx0XCJcdTI4RjZcIixcblx0XHRcdFwiXHUyOEY3XCIsXG5cdFx0XHRcIlx1MjhGRlwiLFxuXHRcdFx0XCJcdTI4N0ZcIixcblx0XHRcdFwiXHUyODNGXCIsXG5cdFx0XHRcIlx1Mjg5RlwiLFxuXHRcdFx0XCJcdTI4MUZcIixcblx0XHRcdFwiXHUyODVCXCIsXG5cdFx0XHRcIlx1MjgxQlwiLFxuXHRcdFx0XCJcdTI4MkJcIixcblx0XHRcdFwiXHUyODhCXCIsXG5cdFx0XHRcIlx1MjgwQlwiLFxuXHRcdFx0XCJcdTI4MERcIixcblx0XHRcdFwiXHUyODQ5XCIsXG5cdFx0XHRcIlx1MjgwOVwiLFxuXHRcdFx0XCJcdTI4MTFcIixcblx0XHRcdFwiXHUyODIxXCIsXG5cdFx0XHRcIlx1Mjg4MVwiXG5cdFx0XVxuXHR9LFxuXHRcImxpbmVcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogMTMwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiLVwiLFxuXHRcdFx0XCJcXFxcXCIsXG5cdFx0XHRcInxcIixcblx0XHRcdFwiL1wiXG5cdFx0XVxuXHR9LFxuXHRcImxpbmUyXCI6IHtcblx0XHRcImludGVydmFsXCI6IDEwMCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIlx1MjgwMlwiLFxuXHRcdFx0XCItXCIsXG5cdFx0XHRcIlx1MjAxM1wiLFxuXHRcdFx0XCJcdTIwMTRcIixcblx0XHRcdFwiXHUyMDEzXCIsXG5cdFx0XHRcIi1cIlxuXHRcdF1cblx0fSxcblx0XCJwaXBlXCI6IHtcblx0XHRcImludGVydmFsXCI6IDEwMCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIlx1MjUyNFwiLFxuXHRcdFx0XCJcdTI1MThcIixcblx0XHRcdFwiXHUyNTM0XCIsXG5cdFx0XHRcIlx1MjUxNFwiLFxuXHRcdFx0XCJcdTI1MUNcIixcblx0XHRcdFwiXHUyNTBDXCIsXG5cdFx0XHRcIlx1MjUyQ1wiLFxuXHRcdFx0XCJcdTI1MTBcIlxuXHRcdF1cblx0fSxcblx0XCJzaW1wbGVEb3RzXCI6IHtcblx0XHRcImludGVydmFsXCI6IDQwMCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIi4gIFwiLFxuXHRcdFx0XCIuLiBcIixcblx0XHRcdFwiLi4uXCIsXG5cdFx0XHRcIiAgIFwiXG5cdFx0XVxuXHR9LFxuXHRcInNpbXBsZURvdHNTY3JvbGxpbmdcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogMjAwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiLiAgXCIsXG5cdFx0XHRcIi4uIFwiLFxuXHRcdFx0XCIuLi5cIixcblx0XHRcdFwiIC4uXCIsXG5cdFx0XHRcIiAgLlwiLFxuXHRcdFx0XCIgICBcIlxuXHRcdF1cblx0fSxcblx0XCJzdGFyXCI6IHtcblx0XHRcImludGVydmFsXCI6IDcwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHUyNzM2XCIsXG5cdFx0XHRcIlx1MjczOFwiLFxuXHRcdFx0XCJcdTI3MzlcIixcblx0XHRcdFwiXHUyNzNBXCIsXG5cdFx0XHRcIlx1MjczOVwiLFxuXHRcdFx0XCJcdTI3MzdcIlxuXHRcdF1cblx0fSxcblx0XCJzdGFyMlwiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiA4MCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIitcIixcblx0XHRcdFwieFwiLFxuXHRcdFx0XCIqXCJcblx0XHRdXG5cdH0sXG5cdFwiZmxpcFwiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiA3MCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIl9cIixcblx0XHRcdFwiX1wiLFxuXHRcdFx0XCJfXCIsXG5cdFx0XHRcIi1cIixcblx0XHRcdFwiYFwiLFxuXHRcdFx0XCJgXCIsXG5cdFx0XHRcIidcIixcblx0XHRcdFwiXHUwMEI0XCIsXG5cdFx0XHRcIi1cIixcblx0XHRcdFwiX1wiLFxuXHRcdFx0XCJfXCIsXG5cdFx0XHRcIl9cIlxuXHRcdF1cblx0fSxcblx0XCJoYW1idXJnZXJcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogMTAwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHUyNjMxXCIsXG5cdFx0XHRcIlx1MjYzMlwiLFxuXHRcdFx0XCJcdTI2MzRcIlxuXHRcdF1cblx0fSxcblx0XCJncm93VmVydGljYWxcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogMTIwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHUyNTgxXCIsXG5cdFx0XHRcIlx1MjU4M1wiLFxuXHRcdFx0XCJcdTI1ODRcIixcblx0XHRcdFwiXHUyNTg1XCIsXG5cdFx0XHRcIlx1MjU4NlwiLFxuXHRcdFx0XCJcdTI1ODdcIixcblx0XHRcdFwiXHUyNTg2XCIsXG5cdFx0XHRcIlx1MjU4NVwiLFxuXHRcdFx0XCJcdTI1ODRcIixcblx0XHRcdFwiXHUyNTgzXCJcblx0XHRdXG5cdH0sXG5cdFwiZ3Jvd0hvcml6b250YWxcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogMTIwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHUyNThGXCIsXG5cdFx0XHRcIlx1MjU4RVwiLFxuXHRcdFx0XCJcdTI1OERcIixcblx0XHRcdFwiXHUyNThDXCIsXG5cdFx0XHRcIlx1MjU4QlwiLFxuXHRcdFx0XCJcdTI1OEFcIixcblx0XHRcdFwiXHUyNTg5XCIsXG5cdFx0XHRcIlx1MjU4QVwiLFxuXHRcdFx0XCJcdTI1OEJcIixcblx0XHRcdFwiXHUyNThDXCIsXG5cdFx0XHRcIlx1MjU4RFwiLFxuXHRcdFx0XCJcdTI1OEVcIlxuXHRcdF1cblx0fSxcblx0XCJiYWxsb29uXCI6IHtcblx0XHRcImludGVydmFsXCI6IDE0MCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIiBcIixcblx0XHRcdFwiLlwiLFxuXHRcdFx0XCJvXCIsXG5cdFx0XHRcIk9cIixcblx0XHRcdFwiQFwiLFxuXHRcdFx0XCIqXCIsXG5cdFx0XHRcIiBcIlxuXHRcdF1cblx0fSxcblx0XCJiYWxsb29uMlwiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiAxMjAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCIuXCIsXG5cdFx0XHRcIm9cIixcblx0XHRcdFwiT1wiLFxuXHRcdFx0XCJcdTAwQjBcIixcblx0XHRcdFwiT1wiLFxuXHRcdFx0XCJvXCIsXG5cdFx0XHRcIi5cIlxuXHRcdF1cblx0fSxcblx0XCJub2lzZVwiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiAxMDAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCJcdTI1OTNcIixcblx0XHRcdFwiXHUyNTkyXCIsXG5cdFx0XHRcIlx1MjU5MVwiXG5cdFx0XVxuXHR9LFxuXHRcImJvdW5jZVwiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiAxMjAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCJcdTI4MDFcIixcblx0XHRcdFwiXHUyODAyXCIsXG5cdFx0XHRcIlx1MjgwNFwiLFxuXHRcdFx0XCJcdTI4MDJcIlxuXHRcdF1cblx0fSxcblx0XCJib3hCb3VuY2VcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogMTIwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHUyNTk2XCIsXG5cdFx0XHRcIlx1MjU5OFwiLFxuXHRcdFx0XCJcdTI1OURcIixcblx0XHRcdFwiXHUyNTk3XCJcblx0XHRdXG5cdH0sXG5cdFwiYm94Qm91bmNlMlwiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiAxMDAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCJcdTI1OENcIixcblx0XHRcdFwiXHUyNTgwXCIsXG5cdFx0XHRcIlx1MjU5MFwiLFxuXHRcdFx0XCJcdTI1ODRcIlxuXHRcdF1cblx0fSxcblx0XCJ0cmlhbmdsZVwiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiA1MCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIlx1MjVFMlwiLFxuXHRcdFx0XCJcdTI1RTNcIixcblx0XHRcdFwiXHUyNUU0XCIsXG5cdFx0XHRcIlx1MjVFNVwiXG5cdFx0XVxuXHR9LFxuXHRcImJpbmFyeVwiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiA4MCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIjAxMDAxMFwiLFxuICAgICAgICAgICAgXCIwMDExMDBcIixcbiAgICAgICAgICAgIFwiMTAwMTAxXCIsXG4gICAgICAgICAgICBcIjExMTAxMFwiLFxuICAgICAgICAgICAgXCIxMTExMDFcIixcbiAgICAgICAgICAgIFwiMDEwMTExXCIsXG5cdFx0XHRcIjEwMTAxMVwiLFxuXHRcdFx0XCIxMTEwMDBcIixcblx0XHRcdFwiMTEwMDExXCIsXG5cdFx0XHRcIjExMDEwMVwiXG5cdFx0XVxuXHR9LFxuXHRcImFyY1wiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiAxMDAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCJcdTI1RENcIixcblx0XHRcdFwiXHUyNUUwXCIsXG5cdFx0XHRcIlx1MjVERFwiLFxuXHRcdFx0XCJcdTI1REVcIixcblx0XHRcdFwiXHUyNUUxXCIsXG5cdFx0XHRcIlx1MjVERlwiXG5cdFx0XVxuXHR9LFxuXHRcImNpcmNsZVwiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiAxMjAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCJcdTI1RTFcIixcblx0XHRcdFwiXHUyMjk5XCIsXG5cdFx0XHRcIlx1MjVFMFwiXG5cdFx0XVxuXHR9LFxuXHRcInNxdWFyZUNvcm5lcnNcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogMTgwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHUyNUYwXCIsXG5cdFx0XHRcIlx1MjVGM1wiLFxuXHRcdFx0XCJcdTI1RjJcIixcblx0XHRcdFwiXHUyNUYxXCJcblx0XHRdXG5cdH0sXG5cdFwiY2lyY2xlUXVhcnRlcnNcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogMTIwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHUyNUY0XCIsXG5cdFx0XHRcIlx1MjVGN1wiLFxuXHRcdFx0XCJcdTI1RjZcIixcblx0XHRcdFwiXHUyNUY1XCJcblx0XHRdXG5cdH0sXG5cdFwiY2lyY2xlSGFsdmVzXCI6IHtcblx0XHRcImludGVydmFsXCI6IDUwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHUyNUQwXCIsXG5cdFx0XHRcIlx1MjVEM1wiLFxuXHRcdFx0XCJcdTI1RDFcIixcblx0XHRcdFwiXHUyNUQyXCJcblx0XHRdXG5cdH0sXG5cdFwic3F1aXNoXCI6IHtcblx0XHRcImludGVydmFsXCI6IDEwMCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIlx1MjU2QlwiLFxuXHRcdFx0XCJcdTI1NkFcIlxuXHRcdF1cblx0fSxcblx0XCJ0b2dnbGVcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogMjUwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHUyMkI2XCIsXG5cdFx0XHRcIlx1MjJCN1wiXG5cdFx0XVxuXHR9LFxuXHRcInRvZ2dsZTJcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogODAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCJcdTI1QUJcIixcblx0XHRcdFwiXHUyNUFBXCJcblx0XHRdXG5cdH0sXG5cdFwidG9nZ2xlM1wiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiAxMjAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCJcdTI1QTFcIixcblx0XHRcdFwiXHUyNUEwXCJcblx0XHRdXG5cdH0sXG5cdFwidG9nZ2xlNFwiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiAxMDAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCJcdTI1QTBcIixcblx0XHRcdFwiXHUyNUExXCIsXG5cdFx0XHRcIlx1MjVBQVwiLFxuXHRcdFx0XCJcdTI1QUJcIlxuXHRcdF1cblx0fSxcblx0XCJ0b2dnbGU1XCI6IHtcblx0XHRcImludGVydmFsXCI6IDEwMCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIlx1MjVBRVwiLFxuXHRcdFx0XCJcdTI1QUZcIlxuXHRcdF1cblx0fSxcblx0XCJ0b2dnbGU2XCI6IHtcblx0XHRcImludGVydmFsXCI6IDMwMCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIlx1MTAxRFwiLFxuXHRcdFx0XCJcdTEwNDBcIlxuXHRcdF1cblx0fSxcblx0XCJ0b2dnbGU3XCI6IHtcblx0XHRcImludGVydmFsXCI6IDgwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHUyOUJFXCIsXG5cdFx0XHRcIlx1MjlCRlwiXG5cdFx0XVxuXHR9LFxuXHRcInRvZ2dsZThcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogMTAwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHUyNUNEXCIsXG5cdFx0XHRcIlx1MjVDQ1wiXG5cdFx0XVxuXHR9LFxuXHRcInRvZ2dsZTlcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogMTAwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHUyNUM5XCIsXG5cdFx0XHRcIlx1MjVDRVwiXG5cdFx0XVxuXHR9LFxuXHRcInRvZ2dsZTEwXCI6IHtcblx0XHRcImludGVydmFsXCI6IDEwMCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIlx1MzI4MlwiLFxuXHRcdFx0XCJcdTMyODBcIixcblx0XHRcdFwiXHUzMjgxXCJcblx0XHRdXG5cdH0sXG5cdFwidG9nZ2xlMTFcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogNTAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCJcdTI5QzdcIixcblx0XHRcdFwiXHUyOUM2XCJcblx0XHRdXG5cdH0sXG5cdFwidG9nZ2xlMTJcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogMTIwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHUyNjE3XCIsXG5cdFx0XHRcIlx1MjYxNlwiXG5cdFx0XVxuXHR9LFxuXHRcInRvZ2dsZTEzXCI6IHtcblx0XHRcImludGVydmFsXCI6IDgwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiPVwiLFxuXHRcdFx0XCIqXCIsXG5cdFx0XHRcIi1cIlxuXHRcdF1cblx0fSxcblx0XCJhcnJvd1wiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiAxMDAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCJcdTIxOTBcIixcblx0XHRcdFwiXHUyMTk2XCIsXG5cdFx0XHRcIlx1MjE5MVwiLFxuXHRcdFx0XCJcdTIxOTdcIixcblx0XHRcdFwiXHUyMTkyXCIsXG5cdFx0XHRcIlx1MjE5OFwiLFxuXHRcdFx0XCJcdTIxOTNcIixcblx0XHRcdFwiXHUyMTk5XCJcblx0XHRdXG5cdH0sXG5cdFwiYXJyb3cyXCI6IHtcblx0XHRcImludGVydmFsXCI6IDgwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHUyQjA2XHVGRTBGIFwiLFxuXHRcdFx0XCJcdTIxOTdcdUZFMEYgXCIsXG5cdFx0XHRcIlx1MjdBMVx1RkUwRiBcIixcblx0XHRcdFwiXHUyMTk4XHVGRTBGIFwiLFxuXHRcdFx0XCJcdTJCMDdcdUZFMEYgXCIsXG5cdFx0XHRcIlx1MjE5OVx1RkUwRiBcIixcblx0XHRcdFwiXHUyQjA1XHVGRTBGIFwiLFxuXHRcdFx0XCJcdTIxOTZcdUZFMEYgXCJcblx0XHRdXG5cdH0sXG5cdFwiYXJyb3czXCI6IHtcblx0XHRcImludGVydmFsXCI6IDEyMCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIlx1MjVCOVx1MjVCOVx1MjVCOVx1MjVCOVx1MjVCOVwiLFxuXHRcdFx0XCJcdTI1QjhcdTI1QjlcdTI1QjlcdTI1QjlcdTI1QjlcIixcblx0XHRcdFwiXHUyNUI5XHUyNUI4XHUyNUI5XHUyNUI5XHUyNUI5XCIsXG5cdFx0XHRcIlx1MjVCOVx1MjVCOVx1MjVCOFx1MjVCOVx1MjVCOVwiLFxuXHRcdFx0XCJcdTI1QjlcdTI1QjlcdTI1QjlcdTI1QjhcdTI1QjlcIixcblx0XHRcdFwiXHUyNUI5XHUyNUI5XHUyNUI5XHUyNUI5XHUyNUI4XCJcblx0XHRdXG5cdH0sXG5cdFwiYm91bmNpbmdCYXJcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogODAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCJbICAgIF1cIixcblx0XHRcdFwiWz0gICBdXCIsXG5cdFx0XHRcIls9PSAgXVwiLFxuXHRcdFx0XCJbPT09IF1cIixcblx0XHRcdFwiWyA9PT1dXCIsXG5cdFx0XHRcIlsgID09XVwiLFxuXHRcdFx0XCJbICAgPV1cIixcblx0XHRcdFwiWyAgICBdXCIsXG5cdFx0XHRcIlsgICA9XVwiLFxuXHRcdFx0XCJbICA9PV1cIixcblx0XHRcdFwiWyA9PT1dXCIsXG5cdFx0XHRcIls9PT09XVwiLFxuXHRcdFx0XCJbPT09IF1cIixcblx0XHRcdFwiWz09ICBdXCIsXG5cdFx0XHRcIls9ICAgXVwiXG5cdFx0XVxuXHR9LFxuXHRcImJvdW5jaW5nQmFsbFwiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiA4MCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIiggXHUyNUNGICAgIClcIixcblx0XHRcdFwiKCAgXHUyNUNGICAgKVwiLFxuXHRcdFx0XCIoICAgXHUyNUNGICApXCIsXG5cdFx0XHRcIiggICAgXHUyNUNGIClcIixcblx0XHRcdFwiKCAgICAgXHUyNUNGKVwiLFxuXHRcdFx0XCIoICAgIFx1MjVDRiApXCIsXG5cdFx0XHRcIiggICBcdTI1Q0YgIClcIixcblx0XHRcdFwiKCAgXHUyNUNGICAgKVwiLFxuXHRcdFx0XCIoIFx1MjVDRiAgICApXCIsXG5cdFx0XHRcIihcdTI1Q0YgICAgIClcIlxuXHRcdF1cblx0fSxcblx0XCJzbWlsZXlcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogMjAwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHVEODNEXHVERTA0IFwiLFxuXHRcdFx0XCJcdUQ4M0RcdURFMUQgXCJcblx0XHRdXG5cdH0sXG5cdFwibW9ua2V5XCI6IHtcblx0XHRcImludGVydmFsXCI6IDMwMCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIlx1RDgzRFx1REU0OCBcIixcblx0XHRcdFwiXHVEODNEXHVERTQ4IFwiLFxuXHRcdFx0XCJcdUQ4M0RcdURFNDkgXCIsXG5cdFx0XHRcIlx1RDgzRFx1REU0QSBcIlxuXHRcdF1cblx0fSxcblx0XCJoZWFydHNcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogMTAwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHVEODNEXHVEQzlCIFwiLFxuXHRcdFx0XCJcdUQ4M0RcdURDOTkgXCIsXG5cdFx0XHRcIlx1RDgzRFx1REM5QyBcIixcblx0XHRcdFwiXHVEODNEXHVEQzlBIFwiLFxuXHRcdFx0XCJcdTI3NjRcdUZFMEYgXCJcblx0XHRdXG5cdH0sXG5cdFwiY2xvY2tcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogMTAwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHVEODNEXHVERDVCIFwiLFxuXHRcdFx0XCJcdUQ4M0RcdURENTAgXCIsXG5cdFx0XHRcIlx1RDgzRFx1REQ1MSBcIixcblx0XHRcdFwiXHVEODNEXHVERDUyIFwiLFxuXHRcdFx0XCJcdUQ4M0RcdURENTMgXCIsXG5cdFx0XHRcIlx1RDgzRFx1REQ1NCBcIixcblx0XHRcdFwiXHVEODNEXHVERDU1IFwiLFxuXHRcdFx0XCJcdUQ4M0RcdURENTYgXCIsXG5cdFx0XHRcIlx1RDgzRFx1REQ1NyBcIixcblx0XHRcdFwiXHVEODNEXHVERDU4IFwiLFxuXHRcdFx0XCJcdUQ4M0RcdURENTkgXCIsXG5cdFx0XHRcIlx1RDgzRFx1REQ1QSBcIlxuXHRcdF1cblx0fSxcblx0XCJlYXJ0aFwiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiAxODAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCJcdUQ4M0NcdURGMEQgXCIsXG5cdFx0XHRcIlx1RDgzQ1x1REYwRSBcIixcblx0XHRcdFwiXHVEODNDXHVERjBGIFwiXG5cdFx0XVxuXHR9LFxuXHRcIm1hdGVyaWFsXCI6IHtcblx0XHRcImludGVydmFsXCI6IDE3LFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHUyNTg4XHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXCIsXG5cdFx0XHRcIlx1MjU4OFx1MjU4OFx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVwiLFxuXHRcdFx0XCJcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcIixcblx0XHRcdFwiXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXCIsXG5cdFx0XHRcIlx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVwiLFxuXHRcdFx0XCJcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcIixcblx0XHRcdFwiXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXCIsXG5cdFx0XHRcIlx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVwiLFxuXHRcdFx0XCJcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcIixcblx0XHRcdFwiXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXCIsXG5cdFx0XHRcIlx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVwiLFxuXHRcdFx0XCJcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcIixcblx0XHRcdFwiXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXCIsXG5cdFx0XHRcIlx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVwiLFxuXHRcdFx0XCJcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcIixcblx0XHRcdFwiXHUyNTgxXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXCIsXG5cdFx0XHRcIlx1MjU4MVx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVwiLFxuXHRcdFx0XCJcdTI1ODFcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcIixcblx0XHRcdFwiXHUyNTgxXHUyNTgxXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXCIsXG5cdFx0XHRcIlx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4MVx1MjU4MVx1MjU4MVwiLFxuXHRcdFx0XCJcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODFcdTI1ODFcdTI1ODFcIixcblx0XHRcdFwiXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTgxXHUyNTgxXCIsXG5cdFx0XHRcIlx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4MVx1MjU4MVwiLFxuXHRcdFx0XCJcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODFcIixcblx0XHRcdFwiXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTgxXCIsXG5cdFx0XHRcIlx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4MVwiLFxuXHRcdFx0XCJcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcIixcblx0XHRcdFwiXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XCIsXG5cdFx0XHRcIlx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFwiLFxuXHRcdFx0XCJcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcIixcblx0XHRcdFwiXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XCIsXG5cdFx0XHRcIlx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFwiLFxuXHRcdFx0XCJcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcIixcblx0XHRcdFwiXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XCIsXG5cdFx0XHRcIlx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFwiLFxuXHRcdFx0XCJcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcIixcblx0XHRcdFwiXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XCIsXG5cdFx0XHRcIlx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFwiLFxuXHRcdFx0XCJcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcIixcblx0XHRcdFwiXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XCIsXG5cdFx0XHRcIlx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFwiLFxuXHRcdFx0XCJcdTI1ODhcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcIixcblx0XHRcdFwiXHUyNTg4XHUyNTg4XHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTg4XHUyNTg4XHUyNTg4XCIsXG5cdFx0XHRcIlx1MjU4OFx1MjU4OFx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4OFx1MjU4OFx1MjU4OFwiLFxuXHRcdFx0XCJcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODhcdTI1ODhcdTI1ODhcIixcblx0XHRcdFwiXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTg4XHUyNTg4XCIsXG5cdFx0XHRcIlx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4OFwiLFxuXHRcdFx0XCJcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODhcIixcblx0XHRcdFwiXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTg4XCIsXG5cdFx0XHRcIlx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVwiLFxuXHRcdFx0XCJcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcIixcblx0XHRcdFwiXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXCIsXG5cdFx0XHRcIlx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVwiLFxuXHRcdFx0XCJcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcIixcblx0XHRcdFwiXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXCIsXG5cdFx0XHRcIlx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVwiLFxuXHRcdFx0XCJcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcIixcblx0XHRcdFwiXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXCIsXG5cdFx0XHRcIlx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVwiLFxuXHRcdFx0XCJcdTI1ODFcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcIixcblx0XHRcdFwiXHUyNTgxXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXCIsXG5cdFx0XHRcIlx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVwiLFxuXHRcdFx0XCJcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODFcdTI1ODFcdTI1ODFcIixcblx0XHRcdFwiXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTgxXHUyNTgxXHUyNTgxXCIsXG5cdFx0XHRcIlx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4MVx1MjU4MVx1MjU4MVwiLFxuXHRcdFx0XCJcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODFcdTI1ODFcdTI1ODFcIixcblx0XHRcdFwiXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTgxXHUyNTgxXHUyNTgxXCIsXG5cdFx0XHRcIlx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4MVx1MjU4MVwiLFxuXHRcdFx0XCJcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODFcdTI1ODFcIixcblx0XHRcdFwiXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTgxXCIsXG5cdFx0XHRcIlx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4MVwiLFxuXHRcdFx0XCJcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODFcIixcblx0XHRcdFwiXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTgxXCIsXG5cdFx0XHRcIlx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4MVwiLFxuXHRcdFx0XCJcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcIixcblx0XHRcdFwiXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XCIsXG5cdFx0XHRcIlx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFwiLFxuXHRcdFx0XCJcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcIixcblx0XHRcdFwiXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XCIsXG5cdFx0XHRcIlx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFwiLFxuXHRcdFx0XCJcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODhcdTI1ODhcdTI1ODhcIixcblx0XHRcdFwiXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTg4XHUyNTg4XHUyNTg4XCIsXG5cdFx0XHRcIlx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4OFx1MjU4OFwiLFxuXHRcdFx0XCJcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODhcdTI1ODhcIixcblx0XHRcdFwiXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTg4XHUyNTg4XCIsXG5cdFx0XHRcIlx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4OFwiLFxuXHRcdFx0XCJcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODhcIixcblx0XHRcdFwiXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTg4XCIsXG5cdFx0XHRcIlx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVwiLFxuXHRcdFx0XCJcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcdTI1ODFcIixcblx0XHRcdFwiXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXHUyNTgxXCIsXG5cdFx0XHRcIlx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVx1MjU4MVwiXG5cdFx0XVxuXHR9LFxuXHRcIm1vb25cIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogODAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCJcdUQ4M0NcdURGMTEgXCIsXG5cdFx0XHRcIlx1RDgzQ1x1REYxMiBcIixcblx0XHRcdFwiXHVEODNDXHVERjEzIFwiLFxuXHRcdFx0XCJcdUQ4M0NcdURGMTQgXCIsXG5cdFx0XHRcIlx1RDgzQ1x1REYxNSBcIixcblx0XHRcdFwiXHVEODNDXHVERjE2IFwiLFxuXHRcdFx0XCJcdUQ4M0NcdURGMTcgXCIsXG5cdFx0XHRcIlx1RDgzQ1x1REYxOCBcIlxuXHRcdF1cblx0fSxcblx0XCJydW5uZXJcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogMTQwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHVEODNEXHVERUI2IFwiLFxuXHRcdFx0XCJcdUQ4M0NcdURGQzMgXCJcblx0XHRdXG5cdH0sXG5cdFwicG9uZ1wiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiA4MCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIlx1MjU5MFx1MjgwMiAgICAgICBcdTI1OENcIixcblx0XHRcdFwiXHUyNTkwXHUyODA4ICAgICAgIFx1MjU4Q1wiLFxuXHRcdFx0XCJcdTI1OTAgXHUyODAyICAgICAgXHUyNThDXCIsXG5cdFx0XHRcIlx1MjU5MCBcdTI4MjAgICAgICBcdTI1OENcIixcblx0XHRcdFwiXHUyNTkwICBcdTI4NDAgICAgIFx1MjU4Q1wiLFxuXHRcdFx0XCJcdTI1OTAgIFx1MjgyMCAgICAgXHUyNThDXCIsXG5cdFx0XHRcIlx1MjU5MCAgIFx1MjgwMiAgICBcdTI1OENcIixcblx0XHRcdFwiXHUyNTkwICAgXHUyODA4ICAgIFx1MjU4Q1wiLFxuXHRcdFx0XCJcdTI1OTAgICAgXHUyODAyICAgXHUyNThDXCIsXG5cdFx0XHRcIlx1MjU5MCAgICBcdTI4MjAgICBcdTI1OENcIixcblx0XHRcdFwiXHUyNTkwICAgICBcdTI4NDAgIFx1MjU4Q1wiLFxuXHRcdFx0XCJcdTI1OTAgICAgIFx1MjgyMCAgXHUyNThDXCIsXG5cdFx0XHRcIlx1MjU5MCAgICAgIFx1MjgwMiBcdTI1OENcIixcblx0XHRcdFwiXHUyNTkwICAgICAgXHUyODA4IFx1MjU4Q1wiLFxuXHRcdFx0XCJcdTI1OTAgICAgICAgXHUyODAyXHUyNThDXCIsXG5cdFx0XHRcIlx1MjU5MCAgICAgICBcdTI4MjBcdTI1OENcIixcblx0XHRcdFwiXHUyNTkwICAgICAgIFx1Mjg0MFx1MjU4Q1wiLFxuXHRcdFx0XCJcdTI1OTAgICAgICBcdTI4MjAgXHUyNThDXCIsXG5cdFx0XHRcIlx1MjU5MCAgICAgIFx1MjgwMiBcdTI1OENcIixcblx0XHRcdFwiXHUyNTkwICAgICBcdTI4MDggIFx1MjU4Q1wiLFxuXHRcdFx0XCJcdTI1OTAgICAgIFx1MjgwMiAgXHUyNThDXCIsXG5cdFx0XHRcIlx1MjU5MCAgICBcdTI4MjAgICBcdTI1OENcIixcblx0XHRcdFwiXHUyNTkwICAgIFx1Mjg0MCAgIFx1MjU4Q1wiLFxuXHRcdFx0XCJcdTI1OTAgICBcdTI4MjAgICAgXHUyNThDXCIsXG5cdFx0XHRcIlx1MjU5MCAgIFx1MjgwMiAgICBcdTI1OENcIixcblx0XHRcdFwiXHUyNTkwICBcdTI4MDggICAgIFx1MjU4Q1wiLFxuXHRcdFx0XCJcdTI1OTAgIFx1MjgwMiAgICAgXHUyNThDXCIsXG5cdFx0XHRcIlx1MjU5MCBcdTI4MjAgICAgICBcdTI1OENcIixcblx0XHRcdFwiXHUyNTkwIFx1Mjg0MCAgICAgIFx1MjU4Q1wiLFxuXHRcdFx0XCJcdTI1OTBcdTI4MjAgICAgICAgXHUyNThDXCJcblx0XHRdXG5cdH0sXG5cdFwic2hhcmtcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogMTIwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHUyNTkwfFxcXFxfX19fX19fX19fX19cdTI1OENcIixcblx0XHRcdFwiXHUyNTkwX3xcXFxcX19fX19fX19fX19cdTI1OENcIixcblx0XHRcdFwiXHUyNTkwX198XFxcXF9fX19fX19fX19cdTI1OENcIixcblx0XHRcdFwiXHUyNTkwX19ffFxcXFxfX19fX19fX19cdTI1OENcIixcblx0XHRcdFwiXHUyNTkwX19fX3xcXFxcX19fX19fX19cdTI1OENcIixcblx0XHRcdFwiXHUyNTkwX19fX198XFxcXF9fX19fX19cdTI1OENcIixcblx0XHRcdFwiXHUyNTkwX19fX19ffFxcXFxfX19fX19cdTI1OENcIixcblx0XHRcdFwiXHUyNTkwX19fX19fX3xcXFxcX19fX19cdTI1OENcIixcblx0XHRcdFwiXHUyNTkwX19fX19fX198XFxcXF9fX19cdTI1OENcIixcblx0XHRcdFwiXHUyNTkwX19fX19fX19ffFxcXFxfX19cdTI1OENcIixcblx0XHRcdFwiXHUyNTkwX19fX19fX19fX3xcXFxcX19cdTI1OENcIixcblx0XHRcdFwiXHUyNTkwX19fX19fX19fX198XFxcXF9cdTI1OENcIixcblx0XHRcdFwiXHUyNTkwX19fX19fX19fX19ffFxcXFxcdTI1OENcIixcblx0XHRcdFwiXHUyNTkwX19fX19fX19fX19fL3xcdTI1OENcIixcblx0XHRcdFwiXHUyNTkwX19fX19fX19fX18vfF9cdTI1OENcIixcblx0XHRcdFwiXHUyNTkwX19fX19fX19fXy98X19cdTI1OENcIixcblx0XHRcdFwiXHUyNTkwX19fX19fX19fL3xfX19cdTI1OENcIixcblx0XHRcdFwiXHUyNTkwX19fX19fX18vfF9fX19cdTI1OENcIixcblx0XHRcdFwiXHUyNTkwX19fX19fXy98X19fX19cdTI1OENcIixcblx0XHRcdFwiXHUyNTkwX19fX19fL3xfX19fX19cdTI1OENcIixcblx0XHRcdFwiXHUyNTkwX19fX18vfF9fX19fX19cdTI1OENcIixcblx0XHRcdFwiXHUyNTkwX19fXy98X19fX19fX19cdTI1OENcIixcblx0XHRcdFwiXHUyNTkwX19fL3xfX19fX19fX19cdTI1OENcIixcblx0XHRcdFwiXHUyNTkwX18vfF9fX19fX19fX19cdTI1OENcIixcblx0XHRcdFwiXHUyNTkwXy98X19fX19fX19fX19cdTI1OENcIixcblx0XHRcdFwiXHUyNTkwL3xfX19fX19fX19fX19cdTI1OENcIlxuXHRcdF1cblx0fSxcblx0XCJkcXBiXCI6IHtcblx0XHRcImludGVydmFsXCI6IDEwMCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcImRcIixcblx0XHRcdFwicVwiLFxuXHRcdFx0XCJwXCIsXG5cdFx0XHRcImJcIlxuXHRcdF1cblx0fSxcblx0XCJ3ZWF0aGVyXCI6IHtcblx0XHRcImludGVydmFsXCI6IDEwMCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIlx1MjYwMFx1RkUwRiBcIixcblx0XHRcdFwiXHUyNjAwXHVGRTBGIFwiLFxuXHRcdFx0XCJcdTI2MDBcdUZFMEYgXCIsXG5cdFx0XHRcIlx1RDgzQ1x1REYyNCBcIixcblx0XHRcdFwiXHUyNkM1XHVGRTBGIFwiLFxuXHRcdFx0XCJcdUQ4M0NcdURGMjUgXCIsXG5cdFx0XHRcIlx1MjYwMVx1RkUwRiBcIixcblx0XHRcdFwiXHVEODNDXHVERjI3IFwiLFxuXHRcdFx0XCJcdUQ4M0NcdURGMjggXCIsXG5cdFx0XHRcIlx1RDgzQ1x1REYyNyBcIixcblx0XHRcdFwiXHVEODNDXHVERjI4IFwiLFxuXHRcdFx0XCJcdUQ4M0NcdURGMjcgXCIsXG5cdFx0XHRcIlx1RDgzQ1x1REYyOCBcIixcblx0XHRcdFwiXHUyNkM4IFwiLFxuXHRcdFx0XCJcdUQ4M0NcdURGMjggXCIsXG5cdFx0XHRcIlx1RDgzQ1x1REYyNyBcIixcblx0XHRcdFwiXHVEODNDXHVERjI4IFwiLFxuXHRcdFx0XCJcdTI2MDFcdUZFMEYgXCIsXG5cdFx0XHRcIlx1RDgzQ1x1REYyNSBcIixcblx0XHRcdFwiXHUyNkM1XHVGRTBGIFwiLFxuXHRcdFx0XCJcdUQ4M0NcdURGMjQgXCIsXG5cdFx0XHRcIlx1MjYwMFx1RkUwRiBcIixcblx0XHRcdFwiXHUyNjAwXHVGRTBGIFwiXG5cdFx0XVxuXHR9LFxuXHRcImNocmlzdG1hc1wiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiA0MDAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCJcdUQ4M0NcdURGMzJcIixcblx0XHRcdFwiXHVEODNDXHVERjg0XCJcblx0XHRdXG5cdH0sXG5cdFwiZ3JlbmFkZVwiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiA4MCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIlx1MDYwQyAgXCIsXG5cdFx0XHRcIlx1MjAzMiAgXCIsXG5cdFx0XHRcIiBcdTAwQjQgXCIsXG5cdFx0XHRcIiBcdTIwM0UgXCIsXG5cdFx0XHRcIiAgXHUyRTBDXCIsXG5cdFx0XHRcIiAgXHUyRTBBXCIsXG5cdFx0XHRcIiAgfFwiLFxuXHRcdFx0XCIgIFx1MjA0RVwiLFxuXHRcdFx0XCIgIFx1MjA1NVwiLFxuXHRcdFx0XCIgXHUwREY0IFwiLFxuXHRcdFx0XCIgIFx1MjA1M1wiLFxuXHRcdFx0XCIgICBcIixcblx0XHRcdFwiICAgXCIsXG5cdFx0XHRcIiAgIFwiXG5cdFx0XVxuXHR9LFxuXHRcInBvaW50XCI6IHtcblx0XHRcImludGVydmFsXCI6IDEyNSxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIlx1MjIxOVx1MjIxOVx1MjIxOVwiLFxuXHRcdFx0XCJcdTI1Q0ZcdTIyMTlcdTIyMTlcIixcblx0XHRcdFwiXHUyMjE5XHUyNUNGXHUyMjE5XCIsXG5cdFx0XHRcIlx1MjIxOVx1MjIxOVx1MjVDRlwiLFxuXHRcdFx0XCJcdTIyMTlcdTIyMTlcdTIyMTlcIlxuXHRcdF1cblx0fSxcblx0XCJsYXllclwiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiAxNTAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCItXCIsXG5cdFx0XHRcIj1cIixcblx0XHRcdFwiXHUyMjYxXCJcblx0XHRdXG5cdH0sXG5cdFwiYmV0YVdhdmVcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogODAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCJcdTAzQzFcdTAzQjJcdTAzQjJcdTAzQjJcdTAzQjJcdTAzQjJcdTAzQjJcIixcblx0XHRcdFwiXHUwM0IyXHUwM0MxXHUwM0IyXHUwM0IyXHUwM0IyXHUwM0IyXHUwM0IyXCIsXG5cdFx0XHRcIlx1MDNCMlx1MDNCMlx1MDNDMVx1MDNCMlx1MDNCMlx1MDNCMlx1MDNCMlwiLFxuXHRcdFx0XCJcdTAzQjJcdTAzQjJcdTAzQjJcdTAzQzFcdTAzQjJcdTAzQjJcdTAzQjJcIixcblx0XHRcdFwiXHUwM0IyXHUwM0IyXHUwM0IyXHUwM0IyXHUwM0MxXHUwM0IyXHUwM0IyXCIsXG5cdFx0XHRcIlx1MDNCMlx1MDNCMlx1MDNCMlx1MDNCMlx1MDNCMlx1MDNDMVx1MDNCMlwiLFxuXHRcdFx0XCJcdTAzQjJcdTAzQjJcdTAzQjJcdTAzQjJcdTAzQjJcdTAzQjJcdTAzQzFcIlxuXHRcdF1cblx0fSxcblx0XCJmaW5nZXJEYW5jZVwiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiAxNjAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCJcdUQ4M0VcdUREMTggXCIsXG5cdFx0XHRcIlx1RDgzRVx1REQxRiBcIixcblx0XHRcdFwiXHVEODNEXHVERDk2IFwiLFxuXHRcdFx0XCJcdTI3MEIgXCIsXG5cdFx0XHRcIlx1RDgzRVx1REQxQSBcIixcblx0XHRcdFwiXHVEODNEXHVEQzQ2IFwiXG5cdFx0XVxuXHR9LFxuXHRcImZpc3RCdW1wXCI6IHtcblx0XHRcImludGVydmFsXCI6IDgwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHVEODNFXHVERDFDXFx1MzAwMFxcdTMwMDBcXHUzMDAwXFx1MzAwMFx1RDgzRVx1REQxQiBcIixcblx0XHRcdFwiXHVEODNFXHVERDFDXFx1MzAwMFxcdTMwMDBcXHUzMDAwXFx1MzAwMFx1RDgzRVx1REQxQiBcIixcblx0XHRcdFwiXHVEODNFXHVERDFDXFx1MzAwMFxcdTMwMDBcXHUzMDAwXFx1MzAwMFx1RDgzRVx1REQxQiBcIixcblx0XHRcdFwiXFx1MzAwMFx1RDgzRVx1REQxQ1xcdTMwMDBcXHUzMDAwXHVEODNFXHVERDFCXFx1MzAwMCBcIixcblx0XHRcdFwiXFx1MzAwMFxcdTMwMDBcdUQ4M0VcdUREMUNcdUQ4M0VcdUREMUJcXHUzMDAwXFx1MzAwMCBcIixcblx0XHRcdFwiXFx1MzAwMFx1RDgzRVx1REQxQ1x1MjcyOFx1RDgzRVx1REQxQlxcdTMwMDBcXHUzMDAwIFwiLFxuXHRcdFx0XCJcdUQ4M0VcdUREMUNcXHUzMDAwXHUyNzI4XFx1MzAwMFx1RDgzRVx1REQxQlxcdTMwMDAgXCJcblx0XHRdXG5cdH0sXG5cdFwic29jY2VySGVhZGVyXCI6IHtcblx0XHRcImludGVydmFsXCI6IDgwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiIFx1RDgzRVx1REREMVx1MjZCRFx1RkUwRiAgICAgICBcdUQ4M0VcdURERDEgXCIsXG5cdFx0XHRcIlx1RDgzRVx1REREMSAgXHUyNkJEXHVGRTBGICAgICAgXHVEODNFXHVEREQxIFwiLFxuXHRcdFx0XCJcdUQ4M0VcdURERDEgICBcdTI2QkRcdUZFMEYgICAgIFx1RDgzRVx1REREMSBcIixcblx0XHRcdFwiXHVEODNFXHVEREQxICAgIFx1MjZCRFx1RkUwRiAgICBcdUQ4M0VcdURERDEgXCIsXG5cdFx0XHRcIlx1RDgzRVx1REREMSAgICAgXHUyNkJEXHVGRTBGICAgXHVEODNFXHVEREQxIFwiLFxuXHRcdFx0XCJcdUQ4M0VcdURERDEgICAgICBcdTI2QkRcdUZFMEYgIFx1RDgzRVx1REREMSBcIixcblx0XHRcdFwiXHVEODNFXHVEREQxICAgICAgIFx1MjZCRFx1RkUwRlx1RDgzRVx1REREMSAgXCIsXG5cdFx0XHRcIlx1RDgzRVx1REREMSAgICAgIFx1MjZCRFx1RkUwRiAgXHVEODNFXHVEREQxIFwiLFxuXHRcdFx0XCJcdUQ4M0VcdURERDEgICAgIFx1MjZCRFx1RkUwRiAgIFx1RDgzRVx1REREMSBcIixcblx0XHRcdFwiXHVEODNFXHVEREQxICAgIFx1MjZCRFx1RkUwRiAgICBcdUQ4M0VcdURERDEgXCIsXG5cdFx0XHRcIlx1RDgzRVx1REREMSAgIFx1MjZCRFx1RkUwRiAgICAgXHVEODNFXHVEREQxIFwiLFxuXHRcdFx0XCJcdUQ4M0VcdURERDEgIFx1MjZCRFx1RkUwRiAgICAgIFx1RDgzRVx1REREMSBcIlxuXHRcdF1cblx0fSxcblx0XCJtaW5kYmxvd25cIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogMTYwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHVEODNEXHVERTEwIFwiLFxuXHRcdFx0XCJcdUQ4M0RcdURFMTAgXCIsXG5cdFx0XHRcIlx1RDgzRFx1REUyRSBcIixcblx0XHRcdFwiXHVEODNEXHVERTJFIFwiLFxuXHRcdFx0XCJcdUQ4M0RcdURFMjYgXCIsXG5cdFx0XHRcIlx1RDgzRFx1REUyNiBcIixcblx0XHRcdFwiXHVEODNEXHVERTI3IFwiLFxuXHRcdFx0XCJcdUQ4M0RcdURFMjcgXCIsXG5cdFx0XHRcIlx1RDgzRVx1REQyRiBcIixcblx0XHRcdFwiXHVEODNEXHVEQ0E1IFwiLFxuXHRcdFx0XCJcdTI3MjggXCIsXG5cdFx0XHRcIlxcdTMwMDAgXCIsXG5cdFx0XHRcIlxcdTMwMDAgXCIsXG5cdFx0XHRcIlxcdTMwMDAgXCJcblx0XHRdXG5cdH0sXG5cdFwic3BlYWtlclwiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiAxNjAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCJcdUQ4M0RcdUREMDggXCIsXG5cdFx0XHRcIlx1RDgzRFx1REQwOSBcIixcblx0XHRcdFwiXHVEODNEXHVERDBBIFwiLFxuXHRcdFx0XCJcdUQ4M0RcdUREMDkgXCJcblx0XHRdXG5cdH0sXG5cdFwib3JhbmdlUHVsc2VcIjoge1xuXHRcdFwiaW50ZXJ2YWxcIjogMTAwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiXHVEODNEXHVERDM4IFwiLFxuXHRcdFx0XCJcdUQ4M0RcdUREMzYgXCIsXG5cdFx0XHRcIlx1RDgzRFx1REZFMCBcIixcblx0XHRcdFwiXHVEODNEXHVERkUwIFwiLFxuXHRcdFx0XCJcdUQ4M0RcdUREMzYgXCJcblx0XHRdXG5cdH0sXG5cdFwiYmx1ZVB1bHNlXCI6IHtcblx0XHRcImludGVydmFsXCI6IDEwMCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIlx1RDgzRFx1REQzOSBcIixcblx0XHRcdFwiXHVEODNEXHVERDM3IFwiLFxuXHRcdFx0XCJcdUQ4M0RcdUREMzUgXCIsXG5cdFx0XHRcIlx1RDgzRFx1REQzNSBcIixcblx0XHRcdFwiXHVEODNEXHVERDM3IFwiXG5cdFx0XVxuXHR9LFxuXHRcIm9yYW5nZUJsdWVQdWxzZVwiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiAxMDAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCJcdUQ4M0RcdUREMzggXCIsXG5cdFx0XHRcIlx1RDgzRFx1REQzNiBcIixcblx0XHRcdFwiXHVEODNEXHVERkUwIFwiLFxuXHRcdFx0XCJcdUQ4M0RcdURGRTAgXCIsXG5cdFx0XHRcIlx1RDgzRFx1REQzNiBcIixcblx0XHRcdFwiXHVEODNEXHVERDM5IFwiLFxuXHRcdFx0XCJcdUQ4M0RcdUREMzcgXCIsXG5cdFx0XHRcIlx1RDgzRFx1REQzNSBcIixcblx0XHRcdFwiXHVEODNEXHVERDM1IFwiLFxuXHRcdFx0XCJcdUQ4M0RcdUREMzcgXCJcblx0XHRdXG5cdH0sXG5cdFwidGltZVRyYXZlbFwiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiAxMDAsXG5cdFx0XCJmcmFtZXNcIjogW1xuXHRcdFx0XCJcdUQ4M0RcdURENUIgXCIsXG5cdFx0XHRcIlx1RDgzRFx1REQ1QSBcIixcblx0XHRcdFwiXHVEODNEXHVERDU5IFwiLFxuXHRcdFx0XCJcdUQ4M0RcdURENTggXCIsXG5cdFx0XHRcIlx1RDgzRFx1REQ1NyBcIixcblx0XHRcdFwiXHVEODNEXHVERDU2IFwiLFxuXHRcdFx0XCJcdUQ4M0RcdURENTUgXCIsXG5cdFx0XHRcIlx1RDgzRFx1REQ1NCBcIixcblx0XHRcdFwiXHVEODNEXHVERDUzIFwiLFxuXHRcdFx0XCJcdUQ4M0RcdURENTIgXCIsXG5cdFx0XHRcIlx1RDgzRFx1REQ1MSBcIixcblx0XHRcdFwiXHVEODNEXHVERDUwIFwiXG5cdFx0XVxuXHR9LFxuXHRcImFlc3RoZXRpY1wiOiB7XG5cdFx0XCJpbnRlcnZhbFwiOiA4MCxcblx0XHRcImZyYW1lc1wiOiBbXG5cdFx0XHRcIlx1MjVCMFx1MjVCMVx1MjVCMVx1MjVCMVx1MjVCMVx1MjVCMVx1MjVCMVwiLFxuXHRcdFx0XCJcdTI1QjBcdTI1QjBcdTI1QjFcdTI1QjFcdTI1QjFcdTI1QjFcdTI1QjFcIixcblx0XHRcdFwiXHUyNUIwXHUyNUIwXHUyNUIwXHUyNUIxXHUyNUIxXHUyNUIxXHUyNUIxXCIsXG5cdFx0XHRcIlx1MjVCMFx1MjVCMFx1MjVCMFx1MjVCMFx1MjVCMVx1MjVCMVx1MjVCMVwiLFxuXHRcdFx0XCJcdTI1QjBcdTI1QjBcdTI1QjBcdTI1QjBcdTI1QjBcdTI1QjFcdTI1QjFcIixcblx0XHRcdFwiXHUyNUIwXHUyNUIwXHUyNUIwXHUyNUIwXHUyNUIwXHUyNUIwXHUyNUIxXCIsXG5cdFx0XHRcIlx1MjVCMFx1MjVCMFx1MjVCMFx1MjVCMFx1MjVCMFx1MjVCMFx1MjVCMFwiLFxuXHRcdFx0XCJcdTI1QjBcdTI1QjFcdTI1QjFcdTI1QjFcdTI1QjFcdTI1QjFcdTI1QjFcIlxuXHRcdF1cblx0fSxcblx0XCJkd2FyZkZvcnRyZXNzXCI6IHtcblx0XHRcImludGVydmFsXCI6IDgwLFxuXHRcdFwiZnJhbWVzXCI6IFtcblx0XHRcdFwiIFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIlx1MjYzQVx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIlx1MjYzQVx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIlx1MjYzQVx1MjU5M1x1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIlx1MjYzQVx1MjU5M1x1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIlx1MjYzQVx1MjU5Mlx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIlx1MjYzQVx1MjU5Mlx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIlx1MjYzQVx1MjU5MVx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIlx1MjYzQVx1MjU5MVx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIlx1MjYzQSBcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgXHUyNjNBXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUwMEEzXHUwMEEzXHUwMEEzICBcIixcblx0XHRcdFwiIFx1MjYzQVx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiBcdTI2M0FcdTI1OTNcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgXHUyNjNBXHUyNTkzXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUwMEEzXHUwMEEzXHUwMEEzICBcIixcblx0XHRcdFwiIFx1MjYzQVx1MjU5Mlx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiBcdTI2M0FcdTI1OTJcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgXHUyNjNBXHUyNTkxXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUwMEEzXHUwMEEzXHUwMEEzICBcIixcblx0XHRcdFwiIFx1MjYzQVx1MjU5MVx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiBcdTI2M0EgXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUwMEEzXHUwMEEzXHUwMEEzICBcIixcblx0XHRcdFwiICBcdTI2M0FcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgIFx1MjYzQVx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiAgXHUyNjNBXHUyNTkzXHUyNTg4XHUyNTg4XHUyNTg4XHUwMEEzXHUwMEEzXHUwMEEzICBcIixcblx0XHRcdFwiICBcdTI2M0FcdTI1OTNcdTI1ODhcdTI1ODhcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgIFx1MjYzQVx1MjU5Mlx1MjU4OFx1MjU4OFx1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiAgXHUyNjNBXHUyNTkyXHUyNTg4XHUyNTg4XHUyNTg4XHUwMEEzXHUwMEEzXHUwMEEzICBcIixcblx0XHRcdFwiICBcdTI2M0FcdTI1OTFcdTI1ODhcdTI1ODhcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgIFx1MjYzQVx1MjU5MVx1MjU4OFx1MjU4OFx1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiAgXHUyNjNBIFx1MjU4OFx1MjU4OFx1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiAgIFx1MjYzQVx1MjU4OFx1MjU4OFx1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiAgIFx1MjYzQVx1MjU4OFx1MjU4OFx1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiAgIFx1MjYzQVx1MjU5M1x1MjU4OFx1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiAgIFx1MjYzQVx1MjU5M1x1MjU4OFx1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiAgIFx1MjYzQVx1MjU5Mlx1MjU4OFx1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiAgIFx1MjYzQVx1MjU5Mlx1MjU4OFx1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiAgIFx1MjYzQVx1MjU5MVx1MjU4OFx1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiAgIFx1MjYzQVx1MjU5MVx1MjU4OFx1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiAgIFx1MjYzQSBcdTI1ODhcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICAgXHUyNjNBXHUyNTg4XHUyNTg4XHUwMEEzXHUwMEEzXHUwMEEzICBcIixcblx0XHRcdFwiICAgIFx1MjYzQVx1MjU4OFx1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiAgICBcdTI2M0FcdTI1OTNcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICAgXHUyNjNBXHUyNTkzXHUyNTg4XHUwMEEzXHUwMEEzXHUwMEEzICBcIixcblx0XHRcdFwiICAgIFx1MjYzQVx1MjU5Mlx1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiAgICBcdTI2M0FcdTI1OTJcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICAgXHUyNjNBXHUyNTkxXHUyNTg4XHUwMEEzXHUwMEEzXHUwMEEzICBcIixcblx0XHRcdFwiICAgIFx1MjYzQVx1MjU5MVx1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiAgICBcdTI2M0EgXHUyNTg4XHUwMEEzXHUwMEEzXHUwMEEzICBcIixcblx0XHRcdFwiICAgICBcdTI2M0FcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICAgIFx1MjYzQVx1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiAgICAgXHUyNjNBXHUyNTkzXHUwMEEzXHUwMEEzXHUwMEEzICBcIixcblx0XHRcdFwiICAgICBcdTI2M0FcdTI1OTNcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICAgIFx1MjYzQVx1MjU5Mlx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiAgICAgXHUyNjNBXHUyNTkyXHUwMEEzXHUwMEEzXHUwMEEzICBcIixcblx0XHRcdFwiICAgICBcdTI2M0FcdTI1OTFcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICAgIFx1MjYzQVx1MjU5MVx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiAgICAgXHUyNjNBIFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiAgICAgIFx1MjYzQVx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiAgICAgIFx1MjYzQVx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiAgICAgIFx1MjYzQVx1MjU5M1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiAgICAgIFx1MjYzQVx1MjU5M1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiAgICAgIFx1MjYzQVx1MjU5Mlx1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiAgICAgIFx1MjYzQVx1MjU5Mlx1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiAgICAgIFx1MjYzQVx1MjU5MVx1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiAgICAgIFx1MjYzQVx1MjU5MVx1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiAgICAgIFx1MjYzQSBcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICAgICAgXHUyNjNBXHUwMEEzXHUwMEEzICBcIixcblx0XHRcdFwiICAgICAgIFx1MjYzQVx1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiAgICAgICBcdTI2M0FcdTI1OTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICAgICAgXHUyNjNBXHUyNTkzXHUwMEEzICBcIixcblx0XHRcdFwiICAgICAgIFx1MjYzQVx1MjU5Mlx1MDBBMyAgXCIsXG5cdFx0XHRcIiAgICAgICBcdTI2M0FcdTI1OTJcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICAgICAgXHUyNjNBXHUyNTkxXHUwMEEzICBcIixcblx0XHRcdFwiICAgICAgIFx1MjYzQVx1MjU5MVx1MDBBMyAgXCIsXG5cdFx0XHRcIiAgICAgICBcdTI2M0EgXHUwMEEzICBcIixcblx0XHRcdFwiICAgICAgICBcdTI2M0FcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICAgICAgIFx1MjYzQVx1MDBBMyAgXCIsXG5cdFx0XHRcIiAgICAgICAgXHUyNjNBXHUyNTkzICBcIixcblx0XHRcdFwiICAgICAgICBcdTI2M0FcdTI1OTMgIFwiLFxuXHRcdFx0XCIgICAgICAgIFx1MjYzQVx1MjU5MiAgXCIsXG5cdFx0XHRcIiAgICAgICAgXHUyNjNBXHUyNTkyICBcIixcblx0XHRcdFwiICAgICAgICBcdTI2M0FcdTI1OTEgIFwiLFxuXHRcdFx0XCIgICAgICAgIFx1MjYzQVx1MjU5MSAgXCIsXG5cdFx0XHRcIiAgICAgICAgXHUyNjNBICAgXCIsXG5cdFx0XHRcIiAgICAgICAgXHUyNjNBICAmXCIsXG5cdFx0XHRcIiAgICAgICAgXHUyNjNBIFx1MjYzQyZcIixcblx0XHRcdFwiICAgICAgIFx1MjYzQSBcdTI2M0MgJlwiLFxuXHRcdFx0XCIgICAgICAgXHUyNjNBXHUyNjNDICAmXCIsXG5cdFx0XHRcIiAgICAgIFx1MjYzQVx1MjYzQyAgJiBcIixcblx0XHRcdFwiICAgICAgXHUyMDNDICAgJiBcIixcblx0XHRcdFwiICAgICBcdTI2M0EgICAmICBcIixcblx0XHRcdFwiICAgIFx1MjAzQyAgICAmICBcIixcblx0XHRcdFwiICAgXHUyNjNBICAgICYgICBcIixcblx0XHRcdFwiICBcdTIwM0MgICAgICYgICBcIixcblx0XHRcdFwiIFx1MjYzQSAgICAgJiAgICBcIixcblx0XHRcdFwiXHUyMDNDICAgICAgJiAgICBcIixcblx0XHRcdFwiICAgICAgJiAgICAgXCIsXG5cdFx0XHRcIiAgICAgICYgICAgIFwiLFxuXHRcdFx0XCIgICAgICYgICBcdTI1OTEgIFwiLFxuXHRcdFx0XCIgICAgICYgICBcdTI1OTIgIFwiLFxuXHRcdFx0XCIgICAgJiAgICBcdTI1OTMgIFwiLFxuXHRcdFx0XCIgICAgJiAgICBcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICAmICAgIFx1MjU5MVx1MDBBMyAgXCIsXG5cdFx0XHRcIiAgICYgICAgXHUyNTkyXHUwMEEzICBcIixcblx0XHRcdFwiICAmICAgICBcdTI1OTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICYgICAgIFx1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiAmICAgICBcdTI1OTFcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgJiAgICAgXHUyNTkyXHUwMEEzXHUwMEEzICBcIixcblx0XHRcdFwiJiAgICAgIFx1MjU5M1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiYgICAgICBcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICAgICBcdTI1OTFcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICAgICBcdTI1OTJcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICAgICBcdTI1OTNcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICAgICBcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICAgIFx1MjU5MVx1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiAgICAgXHUyNTkyXHUyNTg4XHUwMEEzXHUwMEEzXHUwMEEzICBcIixcblx0XHRcdFwiICAgICBcdTI1OTNcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICAgIFx1MjU4OFx1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiAgICBcdTI1OTFcdTI1ODhcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICAgXHUyNTkyXHUyNTg4XHUyNTg4XHUwMEEzXHUwMEEzXHUwMEEzICBcIixcblx0XHRcdFwiICAgIFx1MjU5M1x1MjU4OFx1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiAgICBcdTI1ODhcdTI1ODhcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICBcdTI1OTFcdTI1ODhcdTI1ODhcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICBcdTI1OTJcdTI1ODhcdTI1ODhcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICBcdTI1OTNcdTI1ODhcdTI1ODhcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgICBcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgIFx1MjU5MVx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiAgXHUyNTkyXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUwMEEzXHUwMEEzXHUwMEEzICBcIixcblx0XHRcdFwiICBcdTI1OTNcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgIFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiBcdTI1OTFcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgXHUyNTkyXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUwMEEzXHUwMEEzXHUwMEEzICBcIixcblx0XHRcdFwiIFx1MjU5M1x1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MjU4OFx1MDBBM1x1MDBBM1x1MDBBMyAgXCIsXG5cdFx0XHRcIiBcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTI1ODhcdTAwQTNcdTAwQTNcdTAwQTMgIFwiLFxuXHRcdFx0XCIgXHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUyNTg4XHUwMEEzXHUwMEEzXHUwMEEzICBcIlxuXHRcdF1cblx0fVxufVxuIiwgIid1c2Ugc3RyaWN0JztcblxuY29uc3Qgc3Bpbm5lcnMgPSBPYmplY3QuYXNzaWduKHt9LCByZXF1aXJlKCcuL3NwaW5uZXJzLmpzb24nKSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgaW1wb3J0L2V4dGVuc2lvbnNcblxuY29uc3Qgc3Bpbm5lcnNMaXN0ID0gT2JqZWN0LmtleXMoc3Bpbm5lcnMpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoc3Bpbm5lcnMsICdyYW5kb20nLCB7XG5cdGdldCgpIHtcblx0XHRjb25zdCByYW5kb21JbmRleCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIHNwaW5uZXJzTGlzdC5sZW5ndGgpO1xuXHRcdGNvbnN0IHNwaW5uZXJOYW1lID0gc3Bpbm5lcnNMaXN0W3JhbmRvbUluZGV4XTtcblx0XHRyZXR1cm4gc3Bpbm5lcnNbc3Bpbm5lck5hbWVdO1xuXHR9XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBzcGlubmVycztcbiIsICJ2YXIgZWF3ID0ge307XG5cbmlmICgndW5kZWZpbmVkJyA9PSB0eXBlb2YgbW9kdWxlKSB7XG4gIHdpbmRvdy5lYXN0YXNpYW53aWR0aCA9IGVhdztcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gZWF3O1xufVxuXG5lYXcuZWFzdEFzaWFuV2lkdGggPSBmdW5jdGlvbihjaGFyYWN0ZXIpIHtcbiAgdmFyIHggPSBjaGFyYWN0ZXIuY2hhckNvZGVBdCgwKTtcbiAgdmFyIHkgPSAoY2hhcmFjdGVyLmxlbmd0aCA9PSAyKSA/IGNoYXJhY3Rlci5jaGFyQ29kZUF0KDEpIDogMDtcbiAgdmFyIGNvZGVQb2ludCA9IHg7XG4gIGlmICgoMHhEODAwIDw9IHggJiYgeCA8PSAweERCRkYpICYmICgweERDMDAgPD0geSAmJiB5IDw9IDB4REZGRikpIHtcbiAgICB4ICY9IDB4M0ZGO1xuICAgIHkgJj0gMHgzRkY7XG4gICAgY29kZVBvaW50ID0gKHggPDwgMTApIHwgeTtcbiAgICBjb2RlUG9pbnQgKz0gMHgxMDAwMDtcbiAgfVxuXG4gIGlmICgoMHgzMDAwID09IGNvZGVQb2ludCkgfHxcbiAgICAgICgweEZGMDEgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweEZGNjApIHx8XG4gICAgICAoMHhGRkUwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHhGRkU2KSkge1xuICAgIHJldHVybiAnRic7XG4gIH1cbiAgaWYgKCgweDIwQTkgPT0gY29kZVBvaW50KSB8fFxuICAgICAgKDB4RkY2MSA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4RkZCRSkgfHxcbiAgICAgICgweEZGQzIgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweEZGQzcpIHx8XG4gICAgICAoMHhGRkNBIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHhGRkNGKSB8fFxuICAgICAgKDB4RkZEMiA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4RkZENykgfHxcbiAgICAgICgweEZGREEgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweEZGREMpIHx8XG4gICAgICAoMHhGRkU4IDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHhGRkVFKSkge1xuICAgIHJldHVybiAnSCc7XG4gIH1cbiAgaWYgKCgweDExMDAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDExNUYpIHx8XG4gICAgICAoMHgxMUEzIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgxMUE3KSB8fFxuICAgICAgKDB4MTFGQSA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MTFGRikgfHxcbiAgICAgICgweDIzMjkgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDIzMkEpIHx8XG4gICAgICAoMHgyRTgwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyRTk5KSB8fFxuICAgICAgKDB4MkU5QiA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MkVGMykgfHxcbiAgICAgICgweDJGMDAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDJGRDUpIHx8XG4gICAgICAoMHgyRkYwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyRkZCKSB8fFxuICAgICAgKDB4MzAwMSA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MzAzRSkgfHxcbiAgICAgICgweDMwNDEgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDMwOTYpIHx8XG4gICAgICAoMHgzMDk5IDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgzMEZGKSB8fFxuICAgICAgKDB4MzEwNSA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MzEyRCkgfHxcbiAgICAgICgweDMxMzEgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDMxOEUpIHx8XG4gICAgICAoMHgzMTkwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgzMUJBKSB8fFxuICAgICAgKDB4MzFDMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MzFFMykgfHxcbiAgICAgICgweDMxRjAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDMyMUUpIHx8XG4gICAgICAoMHgzMjIwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgzMjQ3KSB8fFxuICAgICAgKDB4MzI1MCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MzJGRSkgfHxcbiAgICAgICgweDMzMDAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDREQkYpIHx8XG4gICAgICAoMHg0RTAwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHhBNDhDKSB8fFxuICAgICAgKDB4QTQ5MCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4QTRDNikgfHxcbiAgICAgICgweEE5NjAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweEE5N0MpIHx8XG4gICAgICAoMHhBQzAwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHhEN0EzKSB8fFxuICAgICAgKDB4RDdCMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4RDdDNikgfHxcbiAgICAgICgweEQ3Q0IgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweEQ3RkIpIHx8XG4gICAgICAoMHhGOTAwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHhGQUZGKSB8fFxuICAgICAgKDB4RkUxMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4RkUxOSkgfHxcbiAgICAgICgweEZFMzAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweEZFNTIpIHx8XG4gICAgICAoMHhGRTU0IDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHhGRTY2KSB8fFxuICAgICAgKDB4RkU2OCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4RkU2QikgfHxcbiAgICAgICgweDFCMDAwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgxQjAwMSkgfHxcbiAgICAgICgweDFGMjAwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgxRjIwMikgfHxcbiAgICAgICgweDFGMjEwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgxRjIzQSkgfHxcbiAgICAgICgweDFGMjQwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgxRjI0OCkgfHxcbiAgICAgICgweDFGMjUwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgxRjI1MSkgfHxcbiAgICAgICgweDIwMDAwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyRjczRikgfHxcbiAgICAgICgweDJCNzQwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyRkZGRCkgfHxcbiAgICAgICgweDMwMDAwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgzRkZGRCkpIHtcbiAgICByZXR1cm4gJ1cnO1xuICB9XG4gIGlmICgoMHgwMDIwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgwMDdFKSB8fFxuICAgICAgKDB4MDBBMiA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MDBBMykgfHxcbiAgICAgICgweDAwQTUgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDAwQTYpIHx8XG4gICAgICAoMHgwMEFDID09IGNvZGVQb2ludCkgfHxcbiAgICAgICgweDAwQUYgPT0gY29kZVBvaW50KSB8fFxuICAgICAgKDB4MjdFNiA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MjdFRCkgfHxcbiAgICAgICgweDI5ODUgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDI5ODYpKSB7XG4gICAgcmV0dXJuICdOYSc7XG4gIH1cbiAgaWYgKCgweDAwQTEgPT0gY29kZVBvaW50KSB8fFxuICAgICAgKDB4MDBBNCA9PSBjb2RlUG9pbnQpIHx8XG4gICAgICAoMHgwMEE3IDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgwMEE4KSB8fFxuICAgICAgKDB4MDBBQSA9PSBjb2RlUG9pbnQpIHx8XG4gICAgICAoMHgwMEFEIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgwMEFFKSB8fFxuICAgICAgKDB4MDBCMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MDBCNCkgfHxcbiAgICAgICgweDAwQjYgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDAwQkEpIHx8XG4gICAgICAoMHgwMEJDIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgwMEJGKSB8fFxuICAgICAgKDB4MDBDNiA9PSBjb2RlUG9pbnQpIHx8XG4gICAgICAoMHgwMEQwID09IGNvZGVQb2ludCkgfHxcbiAgICAgICgweDAwRDcgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDAwRDgpIHx8XG4gICAgICAoMHgwMERFIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgwMEUxKSB8fFxuICAgICAgKDB4MDBFNiA9PSBjb2RlUG9pbnQpIHx8XG4gICAgICAoMHgwMEU4IDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgwMEVBKSB8fFxuICAgICAgKDB4MDBFQyA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MDBFRCkgfHxcbiAgICAgICgweDAwRjAgPT0gY29kZVBvaW50KSB8fFxuICAgICAgKDB4MDBGMiA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MDBGMykgfHxcbiAgICAgICgweDAwRjcgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDAwRkEpIHx8XG4gICAgICAoMHgwMEZDID09IGNvZGVQb2ludCkgfHxcbiAgICAgICgweDAwRkUgPT0gY29kZVBvaW50KSB8fFxuICAgICAgKDB4MDEwMSA9PSBjb2RlUG9pbnQpIHx8XG4gICAgICAoMHgwMTExID09IGNvZGVQb2ludCkgfHxcbiAgICAgICgweDAxMTMgPT0gY29kZVBvaW50KSB8fFxuICAgICAgKDB4MDExQiA9PSBjb2RlUG9pbnQpIHx8XG4gICAgICAoMHgwMTI2IDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgwMTI3KSB8fFxuICAgICAgKDB4MDEyQiA9PSBjb2RlUG9pbnQpIHx8XG4gICAgICAoMHgwMTMxIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgwMTMzKSB8fFxuICAgICAgKDB4MDEzOCA9PSBjb2RlUG9pbnQpIHx8XG4gICAgICAoMHgwMTNGIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgwMTQyKSB8fFxuICAgICAgKDB4MDE0NCA9PSBjb2RlUG9pbnQpIHx8XG4gICAgICAoMHgwMTQ4IDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgwMTRCKSB8fFxuICAgICAgKDB4MDE0RCA9PSBjb2RlUG9pbnQpIHx8XG4gICAgICAoMHgwMTUyIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgwMTUzKSB8fFxuICAgICAgKDB4MDE2NiA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MDE2NykgfHxcbiAgICAgICgweDAxNkIgPT0gY29kZVBvaW50KSB8fFxuICAgICAgKDB4MDFDRSA9PSBjb2RlUG9pbnQpIHx8XG4gICAgICAoMHgwMUQwID09IGNvZGVQb2ludCkgfHxcbiAgICAgICgweDAxRDIgPT0gY29kZVBvaW50KSB8fFxuICAgICAgKDB4MDFENCA9PSBjb2RlUG9pbnQpIHx8XG4gICAgICAoMHgwMUQ2ID09IGNvZGVQb2ludCkgfHxcbiAgICAgICgweDAxRDggPT0gY29kZVBvaW50KSB8fFxuICAgICAgKDB4MDFEQSA9PSBjb2RlUG9pbnQpIHx8XG4gICAgICAoMHgwMURDID09IGNvZGVQb2ludCkgfHxcbiAgICAgICgweDAyNTEgPT0gY29kZVBvaW50KSB8fFxuICAgICAgKDB4MDI2MSA9PSBjb2RlUG9pbnQpIHx8XG4gICAgICAoMHgwMkM0ID09IGNvZGVQb2ludCkgfHxcbiAgICAgICgweDAyQzcgPT0gY29kZVBvaW50KSB8fFxuICAgICAgKDB4MDJDOSA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MDJDQikgfHxcbiAgICAgICgweDAyQ0QgPT0gY29kZVBvaW50KSB8fFxuICAgICAgKDB4MDJEMCA9PSBjb2RlUG9pbnQpIHx8XG4gICAgICAoMHgwMkQ4IDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgwMkRCKSB8fFxuICAgICAgKDB4MDJERCA9PSBjb2RlUG9pbnQpIHx8XG4gICAgICAoMHgwMkRGID09IGNvZGVQb2ludCkgfHxcbiAgICAgICgweDAzMDAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDAzNkYpIHx8XG4gICAgICAoMHgwMzkxIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgwM0ExKSB8fFxuICAgICAgKDB4MDNBMyA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MDNBOSkgfHxcbiAgICAgICgweDAzQjEgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDAzQzEpIHx8XG4gICAgICAoMHgwM0MzIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgwM0M5KSB8fFxuICAgICAgKDB4MDQwMSA9PSBjb2RlUG9pbnQpIHx8XG4gICAgICAoMHgwNDEwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgwNDRGKSB8fFxuICAgICAgKDB4MDQ1MSA9PSBjb2RlUG9pbnQpIHx8XG4gICAgICAoMHgyMDEwID09IGNvZGVQb2ludCkgfHxcbiAgICAgICgweDIwMTMgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDIwMTYpIHx8XG4gICAgICAoMHgyMDE4IDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyMDE5KSB8fFxuICAgICAgKDB4MjAxQyA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MjAxRCkgfHxcbiAgICAgICgweDIwMjAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDIwMjIpIHx8XG4gICAgICAoMHgyMDI0IDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyMDI3KSB8fFxuICAgICAgKDB4MjAzMCA9PSBjb2RlUG9pbnQpIHx8XG4gICAgICAoMHgyMDMyIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyMDMzKSB8fFxuICAgICAgKDB4MjAzNSA9PSBjb2RlUG9pbnQpIHx8XG4gICAgICAoMHgyMDNCID09IGNvZGVQb2ludCkgfHxcbiAgICAgICgweDIwM0UgPT0gY29kZVBvaW50KSB8fFxuICAgICAgKDB4MjA3NCA9PSBjb2RlUG9pbnQpIHx8XG4gICAgICAoMHgyMDdGID09IGNvZGVQb2ludCkgfHxcbiAgICAgICgweDIwODEgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDIwODQpIHx8XG4gICAgICAoMHgyMEFDID09IGNvZGVQb2ludCkgfHxcbiAgICAgICgweDIxMDMgPT0gY29kZVBvaW50KSB8fFxuICAgICAgKDB4MjEwNSA9PSBjb2RlUG9pbnQpIHx8XG4gICAgICAoMHgyMTA5ID09IGNvZGVQb2ludCkgfHxcbiAgICAgICgweDIxMTMgPT0gY29kZVBvaW50KSB8fFxuICAgICAgKDB4MjExNiA9PSBjb2RlUG9pbnQpIHx8XG4gICAgICAoMHgyMTIxIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyMTIyKSB8fFxuICAgICAgKDB4MjEyNiA9PSBjb2RlUG9pbnQpIHx8XG4gICAgICAoMHgyMTJCID09IGNvZGVQb2ludCkgfHxcbiAgICAgICgweDIxNTMgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDIxNTQpIHx8XG4gICAgICAoMHgyMTVCIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyMTVFKSB8fFxuICAgICAgKDB4MjE2MCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MjE2QikgfHxcbiAgICAgICgweDIxNzAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDIxNzkpIHx8XG4gICAgICAoMHgyMTg5ID09IGNvZGVQb2ludCkgfHxcbiAgICAgICgweDIxOTAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDIxOTkpIHx8XG4gICAgICAoMHgyMUI4IDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyMUI5KSB8fFxuICAgICAgKDB4MjFEMiA9PSBjb2RlUG9pbnQpIHx8XG4gICAgICAoMHgyMUQ0ID09IGNvZGVQb2ludCkgfHxcbiAgICAgICgweDIxRTcgPT0gY29kZVBvaW50KSB8fFxuICAgICAgKDB4MjIwMCA9PSBjb2RlUG9pbnQpIHx8XG4gICAgICAoMHgyMjAyIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyMjAzKSB8fFxuICAgICAgKDB4MjIwNyA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MjIwOCkgfHxcbiAgICAgICgweDIyMEIgPT0gY29kZVBvaW50KSB8fFxuICAgICAgKDB4MjIwRiA9PSBjb2RlUG9pbnQpIHx8XG4gICAgICAoMHgyMjExID09IGNvZGVQb2ludCkgfHxcbiAgICAgICgweDIyMTUgPT0gY29kZVBvaW50KSB8fFxuICAgICAgKDB4MjIxQSA9PSBjb2RlUG9pbnQpIHx8XG4gICAgICAoMHgyMjFEIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyMjIwKSB8fFxuICAgICAgKDB4MjIyMyA9PSBjb2RlUG9pbnQpIHx8XG4gICAgICAoMHgyMjI1ID09IGNvZGVQb2ludCkgfHxcbiAgICAgICgweDIyMjcgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDIyMkMpIHx8XG4gICAgICAoMHgyMjJFID09IGNvZGVQb2ludCkgfHxcbiAgICAgICgweDIyMzQgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDIyMzcpIHx8XG4gICAgICAoMHgyMjNDIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyMjNEKSB8fFxuICAgICAgKDB4MjI0OCA9PSBjb2RlUG9pbnQpIHx8XG4gICAgICAoMHgyMjRDID09IGNvZGVQb2ludCkgfHxcbiAgICAgICgweDIyNTIgPT0gY29kZVBvaW50KSB8fFxuICAgICAgKDB4MjI2MCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MjI2MSkgfHxcbiAgICAgICgweDIyNjQgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDIyNjcpIHx8XG4gICAgICAoMHgyMjZBIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyMjZCKSB8fFxuICAgICAgKDB4MjI2RSA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MjI2RikgfHxcbiAgICAgICgweDIyODIgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDIyODMpIHx8XG4gICAgICAoMHgyMjg2IDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyMjg3KSB8fFxuICAgICAgKDB4MjI5NSA9PSBjb2RlUG9pbnQpIHx8XG4gICAgICAoMHgyMjk5ID09IGNvZGVQb2ludCkgfHxcbiAgICAgICgweDIyQTUgPT0gY29kZVBvaW50KSB8fFxuICAgICAgKDB4MjJCRiA9PSBjb2RlUG9pbnQpIHx8XG4gICAgICAoMHgyMzEyID09IGNvZGVQb2ludCkgfHxcbiAgICAgICgweDI0NjAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDI0RTkpIHx8XG4gICAgICAoMHgyNEVCIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyNTRCKSB8fFxuICAgICAgKDB4MjU1MCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MjU3MykgfHxcbiAgICAgICgweDI1ODAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDI1OEYpIHx8XG4gICAgICAoMHgyNTkyIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyNTk1KSB8fFxuICAgICAgKDB4MjVBMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MjVBMSkgfHxcbiAgICAgICgweDI1QTMgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDI1QTkpIHx8XG4gICAgICAoMHgyNUIyIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyNUIzKSB8fFxuICAgICAgKDB4MjVCNiA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MjVCNykgfHxcbiAgICAgICgweDI1QkMgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDI1QkQpIHx8XG4gICAgICAoMHgyNUMwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyNUMxKSB8fFxuICAgICAgKDB4MjVDNiA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MjVDOCkgfHxcbiAgICAgICgweDI1Q0IgPT0gY29kZVBvaW50KSB8fFxuICAgICAgKDB4MjVDRSA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MjVEMSkgfHxcbiAgICAgICgweDI1RTIgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDI1RTUpIHx8XG4gICAgICAoMHgyNUVGID09IGNvZGVQb2ludCkgfHxcbiAgICAgICgweDI2MDUgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDI2MDYpIHx8XG4gICAgICAoMHgyNjA5ID09IGNvZGVQb2ludCkgfHxcbiAgICAgICgweDI2MEUgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDI2MEYpIHx8XG4gICAgICAoMHgyNjE0IDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyNjE1KSB8fFxuICAgICAgKDB4MjYxQyA9PSBjb2RlUG9pbnQpIHx8XG4gICAgICAoMHgyNjFFID09IGNvZGVQb2ludCkgfHxcbiAgICAgICgweDI2NDAgPT0gY29kZVBvaW50KSB8fFxuICAgICAgKDB4MjY0MiA9PSBjb2RlUG9pbnQpIHx8XG4gICAgICAoMHgyNjYwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyNjYxKSB8fFxuICAgICAgKDB4MjY2MyA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MjY2NSkgfHxcbiAgICAgICgweDI2NjcgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDI2NkEpIHx8XG4gICAgICAoMHgyNjZDIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyNjZEKSB8fFxuICAgICAgKDB4MjY2RiA9PSBjb2RlUG9pbnQpIHx8XG4gICAgICAoMHgyNjlFIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyNjlGKSB8fFxuICAgICAgKDB4MjZCRSA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MjZCRikgfHxcbiAgICAgICgweDI2QzQgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDI2Q0QpIHx8XG4gICAgICAoMHgyNkNGIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyNkUxKSB8fFxuICAgICAgKDB4MjZFMyA9PSBjb2RlUG9pbnQpIHx8XG4gICAgICAoMHgyNkU4IDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyNkZGKSB8fFxuICAgICAgKDB4MjczRCA9PSBjb2RlUG9pbnQpIHx8XG4gICAgICAoMHgyNzU3ID09IGNvZGVQb2ludCkgfHxcbiAgICAgICgweDI3NzYgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDI3N0YpIHx8XG4gICAgICAoMHgyQjU1IDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyQjU5KSB8fFxuICAgICAgKDB4MzI0OCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MzI0RikgfHxcbiAgICAgICgweEUwMDAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweEY4RkYpIHx8XG4gICAgICAoMHhGRTAwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHhGRTBGKSB8fFxuICAgICAgKDB4RkZGRCA9PSBjb2RlUG9pbnQpIHx8XG4gICAgICAoMHgxRjEwMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MUYxMEEpIHx8XG4gICAgICAoMHgxRjExMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MUYxMkQpIHx8XG4gICAgICAoMHgxRjEzMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MUYxNjkpIHx8XG4gICAgICAoMHgxRjE3MCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MUYxOUEpIHx8XG4gICAgICAoMHhFMDEwMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4RTAxRUYpIHx8XG4gICAgICAoMHhGMDAwMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4RkZGRkQpIHx8XG4gICAgICAoMHgxMDAwMDAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDEwRkZGRCkpIHtcbiAgICByZXR1cm4gJ0EnO1xuICB9XG5cbiAgcmV0dXJuICdOJztcbn07XG5cbmVhdy5jaGFyYWN0ZXJMZW5ndGggPSBmdW5jdGlvbihjaGFyYWN0ZXIpIHtcbiAgdmFyIGNvZGUgPSB0aGlzLmVhc3RBc2lhbldpZHRoKGNoYXJhY3Rlcik7XG4gIGlmIChjb2RlID09ICdGJyB8fCBjb2RlID09ICdXJyB8fCBjb2RlID09ICdBJykge1xuICAgIHJldHVybiAyO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAxO1xuICB9XG59O1xuXG4vLyBTcGxpdCBhIHN0cmluZyBjb25zaWRlcmluZyBzdXJyb2dhdGUtcGFpcnMuXG5mdW5jdGlvbiBzdHJpbmdUb0FycmF5KHN0cmluZykge1xuICByZXR1cm4gc3RyaW5nLm1hdGNoKC9bXFx1RDgwMC1cXHVEQkZGXVtcXHVEQzAwLVxcdURGRkZdfFteXFx1RDgwMC1cXHVERkZGXS9nKSB8fCBbXTtcbn1cblxuZWF3Lmxlbmd0aCA9IGZ1bmN0aW9uKHN0cmluZykge1xuICB2YXIgY2hhcmFjdGVycyA9IHN0cmluZ1RvQXJyYXkoc3RyaW5nKTtcbiAgdmFyIGxlbiA9IDA7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgY2hhcmFjdGVycy5sZW5ndGg7IGkrKykge1xuICAgIGxlbiA9IGxlbiArIHRoaXMuY2hhcmFjdGVyTGVuZ3RoKGNoYXJhY3RlcnNbaV0pO1xuICB9XG4gIHJldHVybiBsZW47XG59O1xuXG5lYXcuc2xpY2UgPSBmdW5jdGlvbih0ZXh0LCBzdGFydCwgZW5kKSB7XG4gIHRleHRMZW4gPSBlYXcubGVuZ3RoKHRleHQpXG4gIHN0YXJ0ID0gc3RhcnQgPyBzdGFydCA6IDA7XG4gIGVuZCA9IGVuZCA/IGVuZCA6IDE7XG4gIGlmIChzdGFydCA8IDApIHtcbiAgICAgIHN0YXJ0ID0gdGV4dExlbiArIHN0YXJ0O1xuICB9XG4gIGlmIChlbmQgPCAwKSB7XG4gICAgICBlbmQgPSB0ZXh0TGVuICsgZW5kO1xuICB9XG4gIHZhciByZXN1bHQgPSAnJztcbiAgdmFyIGVhd0xlbiA9IDA7XG4gIHZhciBjaGFycyA9IHN0cmluZ1RvQXJyYXkodGV4dCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgY2hhcnMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgY2hhciA9IGNoYXJzW2ldO1xuICAgIHZhciBjaGFyTGVuID0gZWF3Lmxlbmd0aChjaGFyKTtcbiAgICBpZiAoZWF3TGVuID49IHN0YXJ0IC0gKGNoYXJMZW4gPT0gMiA/IDEgOiAwKSkge1xuICAgICAgICBpZiAoZWF3TGVuICsgY2hhckxlbiA8PSBlbmQpIHtcbiAgICAgICAgICAgIHJlc3VsdCArPSBjaGFyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWF3TGVuICs9IGNoYXJMZW47XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdzdHJlYW0nKTtcbiIsICIndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBlbnVtZXJhYmxlT25seSAmJiAoc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pKSwga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gbnVsbCAhPSBhcmd1bWVudHNbaV0gPyBhcmd1bWVudHNbaV0gOiB7fTsgaSAlIDIgPyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKSA6IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gcmV0dXJuIHRhcmdldDsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBrZXkgPSBfdG9Qcm9wZXJ0eUtleShrZXkpOyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIF90b1Byb3BlcnR5S2V5KGRlc2NyaXB0b3Iua2V5KSwgZGVzY3JpcHRvcik7IH0gfVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ29uc3RydWN0b3IsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6IGZhbHNlIH0pOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KGFyZykgeyB2YXIga2V5ID0gX3RvUHJpbWl0aXZlKGFyZywgXCJzdHJpbmdcIik7IHJldHVybiB0eXBlb2Yga2V5ID09PSBcInN5bWJvbFwiID8ga2V5IDogU3RyaW5nKGtleSk7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZShpbnB1dCwgaGludCkgeyBpZiAodHlwZW9mIGlucHV0ICE9PSBcIm9iamVjdFwiIHx8IGlucHV0ID09PSBudWxsKSByZXR1cm4gaW5wdXQ7IHZhciBwcmltID0gaW5wdXRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHByaW0gIT09IHVuZGVmaW5lZCkgeyB2YXIgcmVzID0gcHJpbS5jYWxsKGlucHV0LCBoaW50IHx8IFwiZGVmYXVsdFwiKTsgaWYgKHR5cGVvZiByZXMgIT09IFwib2JqZWN0XCIpIHJldHVybiByZXM7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKGhpbnQgPT09IFwic3RyaW5nXCIgPyBTdHJpbmcgOiBOdW1iZXIpKGlucHV0KTsgfVxudmFyIF9yZXF1aXJlID0gcmVxdWlyZSgnYnVmZmVyJyksXG4gIEJ1ZmZlciA9IF9yZXF1aXJlLkJ1ZmZlcjtcbnZhciBfcmVxdWlyZTIgPSByZXF1aXJlKCd1dGlsJyksXG4gIGluc3BlY3QgPSBfcmVxdWlyZTIuaW5zcGVjdDtcbnZhciBjdXN0b20gPSBpbnNwZWN0ICYmIGluc3BlY3QuY3VzdG9tIHx8ICdpbnNwZWN0JztcbmZ1bmN0aW9uIGNvcHlCdWZmZXIoc3JjLCB0YXJnZXQsIG9mZnNldCkge1xuICBCdWZmZXIucHJvdG90eXBlLmNvcHkuY2FsbChzcmMsIHRhcmdldCwgb2Zmc2V0KTtcbn1cbm1vZHVsZS5leHBvcnRzID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gQnVmZmVyTGlzdCgpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQnVmZmVyTGlzdCk7XG4gICAgdGhpcy5oZWFkID0gbnVsbDtcbiAgICB0aGlzLnRhaWwgPSBudWxsO1xuICAgIHRoaXMubGVuZ3RoID0gMDtcbiAgfVxuICBfY3JlYXRlQ2xhc3MoQnVmZmVyTGlzdCwgW3tcbiAgICBrZXk6IFwicHVzaFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBwdXNoKHYpIHtcbiAgICAgIHZhciBlbnRyeSA9IHtcbiAgICAgICAgZGF0YTogdixcbiAgICAgICAgbmV4dDogbnVsbFxuICAgICAgfTtcbiAgICAgIGlmICh0aGlzLmxlbmd0aCA+IDApIHRoaXMudGFpbC5uZXh0ID0gZW50cnk7ZWxzZSB0aGlzLmhlYWQgPSBlbnRyeTtcbiAgICAgIHRoaXMudGFpbCA9IGVudHJ5O1xuICAgICAgKyt0aGlzLmxlbmd0aDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwidW5zaGlmdFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB1bnNoaWZ0KHYpIHtcbiAgICAgIHZhciBlbnRyeSA9IHtcbiAgICAgICAgZGF0YTogdixcbiAgICAgICAgbmV4dDogdGhpcy5oZWFkXG4gICAgICB9O1xuICAgICAgaWYgKHRoaXMubGVuZ3RoID09PSAwKSB0aGlzLnRhaWwgPSBlbnRyeTtcbiAgICAgIHRoaXMuaGVhZCA9IGVudHJ5O1xuICAgICAgKyt0aGlzLmxlbmd0aDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwic2hpZnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gc2hpZnQoKSB7XG4gICAgICBpZiAodGhpcy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICAgIHZhciByZXQgPSB0aGlzLmhlYWQuZGF0YTtcbiAgICAgIGlmICh0aGlzLmxlbmd0aCA9PT0gMSkgdGhpcy5oZWFkID0gdGhpcy50YWlsID0gbnVsbDtlbHNlIHRoaXMuaGVhZCA9IHRoaXMuaGVhZC5uZXh0O1xuICAgICAgLS10aGlzLmxlbmd0aDtcbiAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNsZWFyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNsZWFyKCkge1xuICAgICAgdGhpcy5oZWFkID0gdGhpcy50YWlsID0gbnVsbDtcbiAgICAgIHRoaXMubGVuZ3RoID0gMDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiam9pblwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBqb2luKHMpIHtcbiAgICAgIGlmICh0aGlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuICcnO1xuICAgICAgdmFyIHAgPSB0aGlzLmhlYWQ7XG4gICAgICB2YXIgcmV0ID0gJycgKyBwLmRhdGE7XG4gICAgICB3aGlsZSAocCA9IHAubmV4dCkgcmV0ICs9IHMgKyBwLmRhdGE7XG4gICAgICByZXR1cm4gcmV0O1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb25jYXRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29uY2F0KG4pIHtcbiAgICAgIGlmICh0aGlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIEJ1ZmZlci5hbGxvYygwKTtcbiAgICAgIHZhciByZXQgPSBCdWZmZXIuYWxsb2NVbnNhZmUobiA+Pj4gMCk7XG4gICAgICB2YXIgcCA9IHRoaXMuaGVhZDtcbiAgICAgIHZhciBpID0gMDtcbiAgICAgIHdoaWxlIChwKSB7XG4gICAgICAgIGNvcHlCdWZmZXIocC5kYXRhLCByZXQsIGkpO1xuICAgICAgICBpICs9IHAuZGF0YS5sZW5ndGg7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmV0O1xuICAgIH1cblxuICAgIC8vIENvbnN1bWVzIGEgc3BlY2lmaWVkIGFtb3VudCBvZiBieXRlcyBvciBjaGFyYWN0ZXJzIGZyb20gdGhlIGJ1ZmZlcmVkIGRhdGEuXG4gIH0sIHtcbiAgICBrZXk6IFwiY29uc3VtZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb25zdW1lKG4sIGhhc1N0cmluZ3MpIHtcbiAgICAgIHZhciByZXQ7XG4gICAgICBpZiAobiA8IHRoaXMuaGVhZC5kYXRhLmxlbmd0aCkge1xuICAgICAgICAvLyBgc2xpY2VgIGlzIHRoZSBzYW1lIGZvciBidWZmZXJzIGFuZCBzdHJpbmdzLlxuICAgICAgICByZXQgPSB0aGlzLmhlYWQuZGF0YS5zbGljZSgwLCBuKTtcbiAgICAgICAgdGhpcy5oZWFkLmRhdGEgPSB0aGlzLmhlYWQuZGF0YS5zbGljZShuKTtcbiAgICAgIH0gZWxzZSBpZiAobiA9PT0gdGhpcy5oZWFkLmRhdGEubGVuZ3RoKSB7XG4gICAgICAgIC8vIEZpcnN0IGNodW5rIGlzIGEgcGVyZmVjdCBtYXRjaC5cbiAgICAgICAgcmV0ID0gdGhpcy5zaGlmdCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gUmVzdWx0IHNwYW5zIG1vcmUgdGhhbiBvbmUgYnVmZmVyLlxuICAgICAgICByZXQgPSBoYXNTdHJpbmdzID8gdGhpcy5fZ2V0U3RyaW5nKG4pIDogdGhpcy5fZ2V0QnVmZmVyKG4pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZmlyc3RcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZmlyc3QoKSB7XG4gICAgICByZXR1cm4gdGhpcy5oZWFkLmRhdGE7XG4gICAgfVxuXG4gICAgLy8gQ29uc3VtZXMgYSBzcGVjaWZpZWQgYW1vdW50IG9mIGNoYXJhY3RlcnMgZnJvbSB0aGUgYnVmZmVyZWQgZGF0YS5cbiAgfSwge1xuICAgIGtleTogXCJfZ2V0U3RyaW5nXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9nZXRTdHJpbmcobikge1xuICAgICAgdmFyIHAgPSB0aGlzLmhlYWQ7XG4gICAgICB2YXIgYyA9IDE7XG4gICAgICB2YXIgcmV0ID0gcC5kYXRhO1xuICAgICAgbiAtPSByZXQubGVuZ3RoO1xuICAgICAgd2hpbGUgKHAgPSBwLm5leHQpIHtcbiAgICAgICAgdmFyIHN0ciA9IHAuZGF0YTtcbiAgICAgICAgdmFyIG5iID0gbiA+IHN0ci5sZW5ndGggPyBzdHIubGVuZ3RoIDogbjtcbiAgICAgICAgaWYgKG5iID09PSBzdHIubGVuZ3RoKSByZXQgKz0gc3RyO2Vsc2UgcmV0ICs9IHN0ci5zbGljZSgwLCBuKTtcbiAgICAgICAgbiAtPSBuYjtcbiAgICAgICAgaWYgKG4gPT09IDApIHtcbiAgICAgICAgICBpZiAobmIgPT09IHN0ci5sZW5ndGgpIHtcbiAgICAgICAgICAgICsrYztcbiAgICAgICAgICAgIGlmIChwLm5leHQpIHRoaXMuaGVhZCA9IHAubmV4dDtlbHNlIHRoaXMuaGVhZCA9IHRoaXMudGFpbCA9IG51bGw7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaGVhZCA9IHA7XG4gICAgICAgICAgICBwLmRhdGEgPSBzdHIuc2xpY2UobmIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICArK2M7XG4gICAgICB9XG4gICAgICB0aGlzLmxlbmd0aCAtPSBjO1xuICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG5cbiAgICAvLyBDb25zdW1lcyBhIHNwZWNpZmllZCBhbW91bnQgb2YgYnl0ZXMgZnJvbSB0aGUgYnVmZmVyZWQgZGF0YS5cbiAgfSwge1xuICAgIGtleTogXCJfZ2V0QnVmZmVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9nZXRCdWZmZXIobikge1xuICAgICAgdmFyIHJldCA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShuKTtcbiAgICAgIHZhciBwID0gdGhpcy5oZWFkO1xuICAgICAgdmFyIGMgPSAxO1xuICAgICAgcC5kYXRhLmNvcHkocmV0KTtcbiAgICAgIG4gLT0gcC5kYXRhLmxlbmd0aDtcbiAgICAgIHdoaWxlIChwID0gcC5uZXh0KSB7XG4gICAgICAgIHZhciBidWYgPSBwLmRhdGE7XG4gICAgICAgIHZhciBuYiA9IG4gPiBidWYubGVuZ3RoID8gYnVmLmxlbmd0aCA6IG47XG4gICAgICAgIGJ1Zi5jb3B5KHJldCwgcmV0Lmxlbmd0aCAtIG4sIDAsIG5iKTtcbiAgICAgICAgbiAtPSBuYjtcbiAgICAgICAgaWYgKG4gPT09IDApIHtcbiAgICAgICAgICBpZiAobmIgPT09IGJ1Zi5sZW5ndGgpIHtcbiAgICAgICAgICAgICsrYztcbiAgICAgICAgICAgIGlmIChwLm5leHQpIHRoaXMuaGVhZCA9IHAubmV4dDtlbHNlIHRoaXMuaGVhZCA9IHRoaXMudGFpbCA9IG51bGw7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaGVhZCA9IHA7XG4gICAgICAgICAgICBwLmRhdGEgPSBidWYuc2xpY2UobmIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICArK2M7XG4gICAgICB9XG4gICAgICB0aGlzLmxlbmd0aCAtPSBjO1xuICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG5cbiAgICAvLyBNYWtlIHN1cmUgdGhlIGxpbmtlZCBsaXN0IG9ubHkgc2hvd3MgdGhlIG1pbmltYWwgbmVjZXNzYXJ5IGluZm9ybWF0aW9uLlxuICB9LCB7XG4gICAga2V5OiBjdXN0b20sXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHZhbHVlKF8sIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBpbnNwZWN0KHRoaXMsIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgb3B0aW9ucyksIHt9LCB7XG4gICAgICAgIC8vIE9ubHkgaW5zcGVjdCBvbmUgbGV2ZWwuXG4gICAgICAgIGRlcHRoOiAwLFxuICAgICAgICAvLyBJdCBzaG91bGQgbm90IHJlY3Vyc2UuXG4gICAgICAgIGN1c3RvbUluc3BlY3Q6IGZhbHNlXG4gICAgICB9KSk7XG4gICAgfVxuICB9XSk7XG4gIHJldHVybiBCdWZmZXJMaXN0O1xufSgpOyIsICIndXNlIHN0cmljdCc7XG5cbi8vIHVuZG9jdW1lbnRlZCBjYigpIEFQSSwgbmVlZGVkIGZvciBjb3JlLCBub3QgZm9yIHB1YmxpYyBBUElcbmZ1bmN0aW9uIGRlc3Ryb3koZXJyLCBjYikge1xuICB2YXIgX3RoaXMgPSB0aGlzO1xuICB2YXIgcmVhZGFibGVEZXN0cm95ZWQgPSB0aGlzLl9yZWFkYWJsZVN0YXRlICYmIHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkO1xuICB2YXIgd3JpdGFibGVEZXN0cm95ZWQgPSB0aGlzLl93cml0YWJsZVN0YXRlICYmIHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkO1xuICBpZiAocmVhZGFibGVEZXN0cm95ZWQgfHwgd3JpdGFibGVEZXN0cm95ZWQpIHtcbiAgICBpZiAoY2IpIHtcbiAgICAgIGNiKGVycik7XG4gICAgfSBlbHNlIGlmIChlcnIpIHtcbiAgICAgIGlmICghdGhpcy5fd3JpdGFibGVTdGF0ZSkge1xuICAgICAgICBwcm9jZXNzLm5leHRUaWNrKGVtaXRFcnJvck5ULCB0aGlzLCBlcnIpO1xuICAgICAgfSBlbHNlIGlmICghdGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQpIHtcbiAgICAgICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQgPSB0cnVlO1xuICAgICAgICBwcm9jZXNzLm5leHRUaWNrKGVtaXRFcnJvck5ULCB0aGlzLCBlcnIpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIHdlIHNldCBkZXN0cm95ZWQgdG8gdHJ1ZSBiZWZvcmUgZmlyaW5nIGVycm9yIGNhbGxiYWNrcyBpbiBvcmRlclxuICAvLyB0byBtYWtlIGl0IHJlLWVudHJhbmNlIHNhZmUgaW4gY2FzZSBkZXN0cm95KCkgaXMgY2FsbGVkIHdpdGhpbiBjYWxsYmFja3NcblxuICBpZiAodGhpcy5fcmVhZGFibGVTdGF0ZSkge1xuICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkID0gdHJ1ZTtcbiAgfVxuXG4gIC8vIGlmIHRoaXMgaXMgYSBkdXBsZXggc3RyZWFtIG1hcmsgdGhlIHdyaXRhYmxlIHBhcnQgYXMgZGVzdHJveWVkIGFzIHdlbGxcbiAgaWYgKHRoaXMuX3dyaXRhYmxlU3RhdGUpIHtcbiAgICB0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZCA9IHRydWU7XG4gIH1cbiAgdGhpcy5fZGVzdHJveShlcnIgfHwgbnVsbCwgZnVuY3Rpb24gKGVycikge1xuICAgIGlmICghY2IgJiYgZXJyKSB7XG4gICAgICBpZiAoIV90aGlzLl93cml0YWJsZVN0YXRlKSB7XG4gICAgICAgIHByb2Nlc3MubmV4dFRpY2soZW1pdEVycm9yQW5kQ2xvc2VOVCwgX3RoaXMsIGVycik7XG4gICAgICB9IGVsc2UgaWYgKCFfdGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQpIHtcbiAgICAgICAgX3RoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkID0gdHJ1ZTtcbiAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhlbWl0RXJyb3JBbmRDbG9zZU5ULCBfdGhpcywgZXJyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHByb2Nlc3MubmV4dFRpY2soZW1pdENsb3NlTlQsIF90aGlzKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNiKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGVtaXRDbG9zZU5ULCBfdGhpcyk7XG4gICAgICBjYihlcnIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGVtaXRDbG9zZU5ULCBfdGhpcyk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHRoaXM7XG59XG5mdW5jdGlvbiBlbWl0RXJyb3JBbmRDbG9zZU5UKHNlbGYsIGVycikge1xuICBlbWl0RXJyb3JOVChzZWxmLCBlcnIpO1xuICBlbWl0Q2xvc2VOVChzZWxmKTtcbn1cbmZ1bmN0aW9uIGVtaXRDbG9zZU5UKHNlbGYpIHtcbiAgaWYgKHNlbGYuX3dyaXRhYmxlU3RhdGUgJiYgIXNlbGYuX3dyaXRhYmxlU3RhdGUuZW1pdENsb3NlKSByZXR1cm47XG4gIGlmIChzZWxmLl9yZWFkYWJsZVN0YXRlICYmICFzZWxmLl9yZWFkYWJsZVN0YXRlLmVtaXRDbG9zZSkgcmV0dXJuO1xuICBzZWxmLmVtaXQoJ2Nsb3NlJyk7XG59XG5mdW5jdGlvbiB1bmRlc3Ryb3koKSB7XG4gIGlmICh0aGlzLl9yZWFkYWJsZVN0YXRlKSB7XG4gICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQgPSBmYWxzZTtcbiAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLnJlYWRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZGVkID0gZmFsc2U7XG4gICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmRFbWl0dGVkID0gZmFsc2U7XG4gIH1cbiAgaWYgKHRoaXMuX3dyaXRhYmxlU3RhdGUpIHtcbiAgICB0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZCA9IGZhbHNlO1xuICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kZWQgPSBmYWxzZTtcbiAgICB0aGlzLl93cml0YWJsZVN0YXRlLmVuZGluZyA9IGZhbHNlO1xuICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUuZmluYWxDYWxsZWQgPSBmYWxzZTtcbiAgICB0aGlzLl93cml0YWJsZVN0YXRlLnByZWZpbmlzaGVkID0gZmFsc2U7XG4gICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5maW5pc2hlZCA9IGZhbHNlO1xuICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkID0gZmFsc2U7XG4gIH1cbn1cbmZ1bmN0aW9uIGVtaXRFcnJvck5UKHNlbGYsIGVycikge1xuICBzZWxmLmVtaXQoJ2Vycm9yJywgZXJyKTtcbn1cbmZ1bmN0aW9uIGVycm9yT3JEZXN0cm95KHN0cmVhbSwgZXJyKSB7XG4gIC8vIFdlIGhhdmUgdGVzdHMgdGhhdCByZWx5IG9uIGVycm9ycyBiZWluZyBlbWl0dGVkXG4gIC8vIGluIHRoZSBzYW1lIHRpY2ssIHNvIGNoYW5naW5nIHRoaXMgaXMgc2VtdmVyIG1ham9yLlxuICAvLyBGb3Igbm93IHdoZW4geW91IG9wdC1pbiB0byBhdXRvRGVzdHJveSB3ZSBhbGxvd1xuICAvLyB0aGUgZXJyb3IgdG8gYmUgZW1pdHRlZCBuZXh0VGljay4gSW4gYSBmdXR1cmVcbiAgLy8gc2VtdmVyIG1ham9yIHVwZGF0ZSB3ZSBzaG91bGQgY2hhbmdlIHRoZSBkZWZhdWx0IHRvIHRoaXMuXG5cbiAgdmFyIHJTdGF0ZSA9IHN0cmVhbS5fcmVhZGFibGVTdGF0ZTtcbiAgdmFyIHdTdGF0ZSA9IHN0cmVhbS5fd3JpdGFibGVTdGF0ZTtcbiAgaWYgKHJTdGF0ZSAmJiByU3RhdGUuYXV0b0Rlc3Ryb3kgfHwgd1N0YXRlICYmIHdTdGF0ZS5hdXRvRGVzdHJveSkgc3RyZWFtLmRlc3Ryb3koZXJyKTtlbHNlIHN0cmVhbS5lbWl0KCdlcnJvcicsIGVycik7XG59XG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZGVzdHJveTogZGVzdHJveSxcbiAgdW5kZXN0cm95OiB1bmRlc3Ryb3ksXG4gIGVycm9yT3JEZXN0cm95OiBlcnJvck9yRGVzdHJveVxufTsiLCAiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBjb2RlcyA9IHt9O1xuXG5mdW5jdGlvbiBjcmVhdGVFcnJvclR5cGUoY29kZSwgbWVzc2FnZSwgQmFzZSkge1xuICBpZiAoIUJhc2UpIHtcbiAgICBCYXNlID0gRXJyb3JcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldE1lc3NhZ2UgKGFyZzEsIGFyZzIsIGFyZzMpIHtcbiAgICBpZiAodHlwZW9mIG1lc3NhZ2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gbWVzc2FnZVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbWVzc2FnZShhcmcxLCBhcmcyLCBhcmczKVxuICAgIH1cbiAgfVxuXG4gIGNsYXNzIE5vZGVFcnJvciBleHRlbmRzIEJhc2Uge1xuICAgIGNvbnN0cnVjdG9yIChhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgICBzdXBlcihnZXRNZXNzYWdlKGFyZzEsIGFyZzIsIGFyZzMpKTtcbiAgICB9XG4gIH1cblxuICBOb2RlRXJyb3IucHJvdG90eXBlLm5hbWUgPSBCYXNlLm5hbWU7XG4gIE5vZGVFcnJvci5wcm90b3R5cGUuY29kZSA9IGNvZGU7XG5cbiAgY29kZXNbY29kZV0gPSBOb2RlRXJyb3I7XG59XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9ibG9iL3YxMC44LjAvbGliL2ludGVybmFsL2Vycm9ycy5qc1xuZnVuY3Rpb24gb25lT2YoZXhwZWN0ZWQsIHRoaW5nKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGV4cGVjdGVkKSkge1xuICAgIGNvbnN0IGxlbiA9IGV4cGVjdGVkLmxlbmd0aDtcbiAgICBleHBlY3RlZCA9IGV4cGVjdGVkLm1hcCgoaSkgPT4gU3RyaW5nKGkpKTtcbiAgICBpZiAobGVuID4gMikge1xuICAgICAgcmV0dXJuIGBvbmUgb2YgJHt0aGluZ30gJHtleHBlY3RlZC5zbGljZSgwLCBsZW4gLSAxKS5qb2luKCcsICcpfSwgb3IgYCArXG4gICAgICAgICAgICAgZXhwZWN0ZWRbbGVuIC0gMV07XG4gICAgfSBlbHNlIGlmIChsZW4gPT09IDIpIHtcbiAgICAgIHJldHVybiBgb25lIG9mICR7dGhpbmd9ICR7ZXhwZWN0ZWRbMF19IG9yICR7ZXhwZWN0ZWRbMV19YDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGBvZiAke3RoaW5nfSAke2V4cGVjdGVkWzBdfWA7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBgb2YgJHt0aGluZ30gJHtTdHJpbmcoZXhwZWN0ZWQpfWA7XG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvU3RyaW5nL3N0YXJ0c1dpdGhcbmZ1bmN0aW9uIHN0YXJ0c1dpdGgoc3RyLCBzZWFyY2gsIHBvcykge1xuXHRyZXR1cm4gc3RyLnN1YnN0cighcG9zIHx8IHBvcyA8IDAgPyAwIDogK3Bvcywgc2VhcmNoLmxlbmd0aCkgPT09IHNlYXJjaDtcbn1cblxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvU3RyaW5nL2VuZHNXaXRoXG5mdW5jdGlvbiBlbmRzV2l0aChzdHIsIHNlYXJjaCwgdGhpc19sZW4pIHtcblx0aWYgKHRoaXNfbGVuID09PSB1bmRlZmluZWQgfHwgdGhpc19sZW4gPiBzdHIubGVuZ3RoKSB7XG5cdFx0dGhpc19sZW4gPSBzdHIubGVuZ3RoO1xuXHR9XG5cdHJldHVybiBzdHIuc3Vic3RyaW5nKHRoaXNfbGVuIC0gc2VhcmNoLmxlbmd0aCwgdGhpc19sZW4pID09PSBzZWFyY2g7XG59XG5cbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL1N0cmluZy9pbmNsdWRlc1xuZnVuY3Rpb24gaW5jbHVkZXMoc3RyLCBzZWFyY2gsIHN0YXJ0KSB7XG4gIGlmICh0eXBlb2Ygc3RhcnQgIT09ICdudW1iZXInKSB7XG4gICAgc3RhcnQgPSAwO1xuICB9XG5cbiAgaWYgKHN0YXJ0ICsgc2VhcmNoLmxlbmd0aCA+IHN0ci5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHN0ci5pbmRleE9mKHNlYXJjaCwgc3RhcnQpICE9PSAtMTtcbiAgfVxufVxuXG5jcmVhdGVFcnJvclR5cGUoJ0VSUl9JTlZBTElEX09QVF9WQUxVRScsIGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkge1xuICByZXR1cm4gJ1RoZSB2YWx1ZSBcIicgKyB2YWx1ZSArICdcIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gXCInICsgbmFtZSArICdcIidcbn0sIFR5cGVFcnJvcik7XG5jcmVhdGVFcnJvclR5cGUoJ0VSUl9JTlZBTElEX0FSR19UWVBFJywgZnVuY3Rpb24gKG5hbWUsIGV4cGVjdGVkLCBhY3R1YWwpIHtcbiAgLy8gZGV0ZXJtaW5lcjogJ211c3QgYmUnIG9yICdtdXN0IG5vdCBiZSdcbiAgbGV0IGRldGVybWluZXI7XG4gIGlmICh0eXBlb2YgZXhwZWN0ZWQgPT09ICdzdHJpbmcnICYmIHN0YXJ0c1dpdGgoZXhwZWN0ZWQsICdub3QgJykpIHtcbiAgICBkZXRlcm1pbmVyID0gJ211c3Qgbm90IGJlJztcbiAgICBleHBlY3RlZCA9IGV4cGVjdGVkLnJlcGxhY2UoL15ub3QgLywgJycpO1xuICB9IGVsc2Uge1xuICAgIGRldGVybWluZXIgPSAnbXVzdCBiZSc7XG4gIH1cblxuICBsZXQgbXNnO1xuICBpZiAoZW5kc1dpdGgobmFtZSwgJyBhcmd1bWVudCcpKSB7XG4gICAgLy8gRm9yIGNhc2VzIGxpa2UgJ2ZpcnN0IGFyZ3VtZW50J1xuICAgIG1zZyA9IGBUaGUgJHtuYW1lfSAke2RldGVybWluZXJ9ICR7b25lT2YoZXhwZWN0ZWQsICd0eXBlJyl9YDtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCB0eXBlID0gaW5jbHVkZXMobmFtZSwgJy4nKSA/ICdwcm9wZXJ0eScgOiAnYXJndW1lbnQnO1xuICAgIG1zZyA9IGBUaGUgXCIke25hbWV9XCIgJHt0eXBlfSAke2RldGVybWluZXJ9ICR7b25lT2YoZXhwZWN0ZWQsICd0eXBlJyl9YDtcbiAgfVxuXG4gIG1zZyArPSBgLiBSZWNlaXZlZCB0eXBlICR7dHlwZW9mIGFjdHVhbH1gO1xuICByZXR1cm4gbXNnO1xufSwgVHlwZUVycm9yKTtcbmNyZWF0ZUVycm9yVHlwZSgnRVJSX1NUUkVBTV9QVVNIX0FGVEVSX0VPRicsICdzdHJlYW0ucHVzaCgpIGFmdGVyIEVPRicpO1xuY3JlYXRlRXJyb3JUeXBlKCdFUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCcsIGZ1bmN0aW9uIChuYW1lKSB7XG4gIHJldHVybiAnVGhlICcgKyBuYW1lICsgJyBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkJ1xufSk7XG5jcmVhdGVFcnJvclR5cGUoJ0VSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFJywgJ1ByZW1hdHVyZSBjbG9zZScpO1xuY3JlYXRlRXJyb3JUeXBlKCdFUlJfU1RSRUFNX0RFU1RST1lFRCcsIGZ1bmN0aW9uIChuYW1lKSB7XG4gIHJldHVybiAnQ2Fubm90IGNhbGwgJyArIG5hbWUgKyAnIGFmdGVyIGEgc3RyZWFtIHdhcyBkZXN0cm95ZWQnO1xufSk7XG5jcmVhdGVFcnJvclR5cGUoJ0VSUl9NVUxUSVBMRV9DQUxMQkFDSycsICdDYWxsYmFjayBjYWxsZWQgbXVsdGlwbGUgdGltZXMnKTtcbmNyZWF0ZUVycm9yVHlwZSgnRVJSX1NUUkVBTV9DQU5OT1RfUElQRScsICdDYW5ub3QgcGlwZSwgbm90IHJlYWRhYmxlJyk7XG5jcmVhdGVFcnJvclR5cGUoJ0VSUl9TVFJFQU1fV1JJVEVfQUZURVJfRU5EJywgJ3dyaXRlIGFmdGVyIGVuZCcpO1xuY3JlYXRlRXJyb3JUeXBlKCdFUlJfU1RSRUFNX05VTExfVkFMVUVTJywgJ01heSBub3Qgd3JpdGUgbnVsbCB2YWx1ZXMgdG8gc3RyZWFtJywgVHlwZUVycm9yKTtcbmNyZWF0ZUVycm9yVHlwZSgnRVJSX1VOS05PV05fRU5DT0RJTkcnLCBmdW5jdGlvbiAoYXJnKSB7XG4gIHJldHVybiAnVW5rbm93biBlbmNvZGluZzogJyArIGFyZ1xufSwgVHlwZUVycm9yKTtcbmNyZWF0ZUVycm9yVHlwZSgnRVJSX1NUUkVBTV9VTlNISUZUX0FGVEVSX0VORF9FVkVOVCcsICdzdHJlYW0udW5zaGlmdCgpIGFmdGVyIGVuZCBldmVudCcpO1xuXG5tb2R1bGUuZXhwb3J0cy5jb2RlcyA9IGNvZGVzO1xuIiwgIid1c2Ugc3RyaWN0JztcblxudmFyIEVSUl9JTlZBTElEX09QVF9WQUxVRSA9IHJlcXVpcmUoJy4uLy4uLy4uL2Vycm9ycycpLmNvZGVzLkVSUl9JTlZBTElEX09QVF9WQUxVRTtcbmZ1bmN0aW9uIGhpZ2hXYXRlck1hcmtGcm9tKG9wdGlvbnMsIGlzRHVwbGV4LCBkdXBsZXhLZXkpIHtcbiAgcmV0dXJuIG9wdGlvbnMuaGlnaFdhdGVyTWFyayAhPSBudWxsID8gb3B0aW9ucy5oaWdoV2F0ZXJNYXJrIDogaXNEdXBsZXggPyBvcHRpb25zW2R1cGxleEtleV0gOiBudWxsO1xufVxuZnVuY3Rpb24gZ2V0SGlnaFdhdGVyTWFyayhzdGF0ZSwgb3B0aW9ucywgZHVwbGV4S2V5LCBpc0R1cGxleCkge1xuICB2YXIgaHdtID0gaGlnaFdhdGVyTWFya0Zyb20ob3B0aW9ucywgaXNEdXBsZXgsIGR1cGxleEtleSk7XG4gIGlmIChod20gIT0gbnVsbCkge1xuICAgIGlmICghKGlzRmluaXRlKGh3bSkgJiYgTWF0aC5mbG9vcihod20pID09PSBod20pIHx8IGh3bSA8IDApIHtcbiAgICAgIHZhciBuYW1lID0gaXNEdXBsZXggPyBkdXBsZXhLZXkgOiAnaGlnaFdhdGVyTWFyayc7XG4gICAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfT1BUX1ZBTFVFKG5hbWUsIGh3bSk7XG4gICAgfVxuICAgIHJldHVybiBNYXRoLmZsb29yKGh3bSk7XG4gIH1cblxuICAvLyBEZWZhdWx0IHZhbHVlXG4gIHJldHVybiBzdGF0ZS5vYmplY3RNb2RlID8gMTYgOiAxNiAqIDEwMjQ7XG59XG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0SGlnaFdhdGVyTWFyazogZ2V0SGlnaFdhdGVyTWFya1xufTsiLCAiaWYgKHR5cGVvZiBPYmplY3QuY3JlYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gIC8vIGltcGxlbWVudGF0aW9uIGZyb20gc3RhbmRhcmQgbm9kZS5qcyAndXRpbCcgbW9kdWxlXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaW5oZXJpdHMoY3Rvciwgc3VwZXJDdG9yKSB7XG4gICAgaWYgKHN1cGVyQ3Rvcikge1xuICAgICAgY3Rvci5zdXBlcl8gPSBzdXBlckN0b3JcbiAgICAgIGN0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckN0b3IucHJvdG90eXBlLCB7XG4gICAgICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICAgICAgdmFsdWU6IGN0b3IsXG4gICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9O1xufSBlbHNlIHtcbiAgLy8gb2xkIHNjaG9vbCBzaGltIGZvciBvbGQgYnJvd3NlcnNcbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpbmhlcml0cyhjdG9yLCBzdXBlckN0b3IpIHtcbiAgICBpZiAoc3VwZXJDdG9yKSB7XG4gICAgICBjdG9yLnN1cGVyXyA9IHN1cGVyQ3RvclxuICAgICAgdmFyIFRlbXBDdG9yID0gZnVuY3Rpb24gKCkge31cbiAgICAgIFRlbXBDdG9yLnByb3RvdHlwZSA9IHN1cGVyQ3Rvci5wcm90b3R5cGVcbiAgICAgIGN0b3IucHJvdG90eXBlID0gbmV3IFRlbXBDdG9yKClcbiAgICAgIGN0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY3RvclxuICAgIH1cbiAgfVxufVxuIiwgInRyeSB7XG4gIHZhciB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBpZiAodHlwZW9mIHV0aWwuaW5oZXJpdHMgIT09ICdmdW5jdGlvbicpIHRocm93ICcnO1xuICBtb2R1bGUuZXhwb3J0cyA9IHV0aWwuaW5oZXJpdHM7XG59IGNhdGNoIChlKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9pbmhlcml0c19icm93c2VyLmpzJyk7XG59XG4iLCAiXG4vKipcbiAqIEZvciBOb2RlLmpzLCBzaW1wbHkgcmUtZXhwb3J0IHRoZSBjb3JlIGB1dGlsLmRlcHJlY2F0ZWAgZnVuY3Rpb24uXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCd1dGlsJykuZGVwcmVjYXRlO1xuIiwgIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4vLyBBIGJpdCBzaW1wbGVyIHRoYW4gcmVhZGFibGUgc3RyZWFtcy5cbi8vIEltcGxlbWVudCBhbiBhc3luYyAuX3dyaXRlKGNodW5rLCBlbmNvZGluZywgY2IpLCBhbmQgaXQnbGwgaGFuZGxlIGFsbFxuLy8gdGhlIGRyYWluIGV2ZW50IGVtaXNzaW9uIGFuZCBidWZmZXJpbmcuXG5cbid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBXcml0YWJsZTtcblxuLyogPHJlcGxhY2VtZW50PiAqL1xuZnVuY3Rpb24gV3JpdGVSZXEoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICB0aGlzLmNodW5rID0gY2h1bms7XG4gIHRoaXMuZW5jb2RpbmcgPSBlbmNvZGluZztcbiAgdGhpcy5jYWxsYmFjayA9IGNiO1xuICB0aGlzLm5leHQgPSBudWxsO1xufVxuXG4vLyBJdCBzZWVtcyBhIGxpbmtlZCBsaXN0IGJ1dCBpdCBpcyBub3Rcbi8vIHRoZXJlIHdpbGwgYmUgb25seSAyIG9mIHRoZXNlIGZvciBlYWNoIHN0cmVhbVxuZnVuY3Rpb24gQ29ya2VkUmVxdWVzdChzdGF0ZSkge1xuICB2YXIgX3RoaXMgPSB0aGlzO1xuICB0aGlzLm5leHQgPSBudWxsO1xuICB0aGlzLmVudHJ5ID0gbnVsbDtcbiAgdGhpcy5maW5pc2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgb25Db3JrZWRGaW5pc2goX3RoaXMsIHN0YXRlKTtcbiAgfTtcbn1cbi8qIDwvcmVwbGFjZW1lbnQ+ICovXG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgRHVwbGV4O1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbldyaXRhYmxlLldyaXRhYmxlU3RhdGUgPSBXcml0YWJsZVN0YXRlO1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIGludGVybmFsVXRpbCA9IHtcbiAgZGVwcmVjYXRlOiByZXF1aXJlKCd1dGlsLWRlcHJlY2F0ZScpXG59O1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgU3RyZWFtID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9zdHJlYW1zL3N0cmVhbScpO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbnZhciBCdWZmZXIgPSByZXF1aXJlKCdidWZmZXInKS5CdWZmZXI7XG52YXIgT3VyVWludDhBcnJheSA9ICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJyA/IGdsb2JhbCA6IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93IDogdHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnID8gc2VsZiA6IHt9KS5VaW50OEFycmF5IHx8IGZ1bmN0aW9uICgpIHt9O1xuZnVuY3Rpb24gX3VpbnQ4QXJyYXlUb0J1ZmZlcihjaHVuaykge1xuICByZXR1cm4gQnVmZmVyLmZyb20oY2h1bmspO1xufVxuZnVuY3Rpb24gX2lzVWludDhBcnJheShvYmopIHtcbiAgcmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcihvYmopIHx8IG9iaiBpbnN0YW5jZW9mIE91clVpbnQ4QXJyYXk7XG59XG52YXIgZGVzdHJveUltcGwgPSByZXF1aXJlKCcuL2ludGVybmFsL3N0cmVhbXMvZGVzdHJveScpO1xudmFyIF9yZXF1aXJlID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9zdHJlYW1zL3N0YXRlJyksXG4gIGdldEhpZ2hXYXRlck1hcmsgPSBfcmVxdWlyZS5nZXRIaWdoV2F0ZXJNYXJrO1xudmFyIF9yZXF1aXJlJGNvZGVzID0gcmVxdWlyZSgnLi4vZXJyb3JzJykuY29kZXMsXG4gIEVSUl9JTlZBTElEX0FSR19UWVBFID0gX3JlcXVpcmUkY29kZXMuRVJSX0lOVkFMSURfQVJHX1RZUEUsXG4gIEVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVEID0gX3JlcXVpcmUkY29kZXMuRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQsXG4gIEVSUl9NVUxUSVBMRV9DQUxMQkFDSyA9IF9yZXF1aXJlJGNvZGVzLkVSUl9NVUxUSVBMRV9DQUxMQkFDSyxcbiAgRVJSX1NUUkVBTV9DQU5OT1RfUElQRSA9IF9yZXF1aXJlJGNvZGVzLkVSUl9TVFJFQU1fQ0FOTk9UX1BJUEUsXG4gIEVSUl9TVFJFQU1fREVTVFJPWUVEID0gX3JlcXVpcmUkY29kZXMuRVJSX1NUUkVBTV9ERVNUUk9ZRUQsXG4gIEVSUl9TVFJFQU1fTlVMTF9WQUxVRVMgPSBfcmVxdWlyZSRjb2Rlcy5FUlJfU1RSRUFNX05VTExfVkFMVUVTLFxuICBFUlJfU1RSRUFNX1dSSVRFX0FGVEVSX0VORCA9IF9yZXF1aXJlJGNvZGVzLkVSUl9TVFJFQU1fV1JJVEVfQUZURVJfRU5ELFxuICBFUlJfVU5LTk9XTl9FTkNPRElORyA9IF9yZXF1aXJlJGNvZGVzLkVSUl9VTktOT1dOX0VOQ09ESU5HO1xudmFyIGVycm9yT3JEZXN0cm95ID0gZGVzdHJveUltcGwuZXJyb3JPckRlc3Ryb3k7XG5yZXF1aXJlKCdpbmhlcml0cycpKFdyaXRhYmxlLCBTdHJlYW0pO1xuZnVuY3Rpb24gbm9wKCkge31cbmZ1bmN0aW9uIFdyaXRhYmxlU3RhdGUob3B0aW9ucywgc3RyZWFtLCBpc0R1cGxleCkge1xuICBEdXBsZXggPSBEdXBsZXggfHwgcmVxdWlyZSgnLi9fc3RyZWFtX2R1cGxleCcpO1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAvLyBEdXBsZXggc3RyZWFtcyBhcmUgYm90aCByZWFkYWJsZSBhbmQgd3JpdGFibGUsIGJ1dCBzaGFyZVxuICAvLyB0aGUgc2FtZSBvcHRpb25zIG9iamVjdC5cbiAgLy8gSG93ZXZlciwgc29tZSBjYXNlcyByZXF1aXJlIHNldHRpbmcgb3B0aW9ucyB0byBkaWZmZXJlbnRcbiAgLy8gdmFsdWVzIGZvciB0aGUgcmVhZGFibGUgYW5kIHRoZSB3cml0YWJsZSBzaWRlcyBvZiB0aGUgZHVwbGV4IHN0cmVhbSxcbiAgLy8gZS5nLiBvcHRpb25zLnJlYWRhYmxlT2JqZWN0TW9kZSB2cy4gb3B0aW9ucy53cml0YWJsZU9iamVjdE1vZGUsIGV0Yy5cbiAgaWYgKHR5cGVvZiBpc0R1cGxleCAhPT0gJ2Jvb2xlYW4nKSBpc0R1cGxleCA9IHN0cmVhbSBpbnN0YW5jZW9mIER1cGxleDtcblxuICAvLyBvYmplY3Qgc3RyZWFtIGZsYWcgdG8gaW5kaWNhdGUgd2hldGhlciBvciBub3QgdGhpcyBzdHJlYW1cbiAgLy8gY29udGFpbnMgYnVmZmVycyBvciBvYmplY3RzLlxuICB0aGlzLm9iamVjdE1vZGUgPSAhIW9wdGlvbnMub2JqZWN0TW9kZTtcbiAgaWYgKGlzRHVwbGV4KSB0aGlzLm9iamVjdE1vZGUgPSB0aGlzLm9iamVjdE1vZGUgfHwgISFvcHRpb25zLndyaXRhYmxlT2JqZWN0TW9kZTtcblxuICAvLyB0aGUgcG9pbnQgYXQgd2hpY2ggd3JpdGUoKSBzdGFydHMgcmV0dXJuaW5nIGZhbHNlXG4gIC8vIE5vdGU6IDAgaXMgYSB2YWxpZCB2YWx1ZSwgbWVhbnMgdGhhdCB3ZSBhbHdheXMgcmV0dXJuIGZhbHNlIGlmXG4gIC8vIHRoZSBlbnRpcmUgYnVmZmVyIGlzIG5vdCBmbHVzaGVkIGltbWVkaWF0ZWx5IG9uIHdyaXRlKClcbiAgdGhpcy5oaWdoV2F0ZXJNYXJrID0gZ2V0SGlnaFdhdGVyTWFyayh0aGlzLCBvcHRpb25zLCAnd3JpdGFibGVIaWdoV2F0ZXJNYXJrJywgaXNEdXBsZXgpO1xuXG4gIC8vIGlmIF9maW5hbCBoYXMgYmVlbiBjYWxsZWRcbiAgdGhpcy5maW5hbENhbGxlZCA9IGZhbHNlO1xuXG4gIC8vIGRyYWluIGV2ZW50IGZsYWcuXG4gIHRoaXMubmVlZERyYWluID0gZmFsc2U7XG4gIC8vIGF0IHRoZSBzdGFydCBvZiBjYWxsaW5nIGVuZCgpXG4gIHRoaXMuZW5kaW5nID0gZmFsc2U7XG4gIC8vIHdoZW4gZW5kKCkgaGFzIGJlZW4gY2FsbGVkLCBhbmQgcmV0dXJuZWRcbiAgdGhpcy5lbmRlZCA9IGZhbHNlO1xuICAvLyB3aGVuICdmaW5pc2gnIGlzIGVtaXR0ZWRcbiAgdGhpcy5maW5pc2hlZCA9IGZhbHNlO1xuXG4gIC8vIGhhcyBpdCBiZWVuIGRlc3Ryb3llZFxuICB0aGlzLmRlc3Ryb3llZCA9IGZhbHNlO1xuXG4gIC8vIHNob3VsZCB3ZSBkZWNvZGUgc3RyaW5ncyBpbnRvIGJ1ZmZlcnMgYmVmb3JlIHBhc3NpbmcgdG8gX3dyaXRlP1xuICAvLyB0aGlzIGlzIGhlcmUgc28gdGhhdCBzb21lIG5vZGUtY29yZSBzdHJlYW1zIGNhbiBvcHRpbWl6ZSBzdHJpbmdcbiAgLy8gaGFuZGxpbmcgYXQgYSBsb3dlciBsZXZlbC5cbiAgdmFyIG5vRGVjb2RlID0gb3B0aW9ucy5kZWNvZGVTdHJpbmdzID09PSBmYWxzZTtcbiAgdGhpcy5kZWNvZGVTdHJpbmdzID0gIW5vRGVjb2RlO1xuXG4gIC8vIENyeXB0byBpcyBraW5kIG9mIG9sZCBhbmQgY3J1c3R5LiAgSGlzdG9yaWNhbGx5LCBpdHMgZGVmYXVsdCBzdHJpbmdcbiAgLy8gZW5jb2RpbmcgaXMgJ2JpbmFyeScgc28gd2UgaGF2ZSB0byBtYWtlIHRoaXMgY29uZmlndXJhYmxlLlxuICAvLyBFdmVyeXRoaW5nIGVsc2UgaW4gdGhlIHVuaXZlcnNlIHVzZXMgJ3V0ZjgnLCB0aG91Z2guXG4gIHRoaXMuZGVmYXVsdEVuY29kaW5nID0gb3B0aW9ucy5kZWZhdWx0RW5jb2RpbmcgfHwgJ3V0ZjgnO1xuXG4gIC8vIG5vdCBhbiBhY3R1YWwgYnVmZmVyIHdlIGtlZXAgdHJhY2sgb2YsIGJ1dCBhIG1lYXN1cmVtZW50XG4gIC8vIG9mIGhvdyBtdWNoIHdlJ3JlIHdhaXRpbmcgdG8gZ2V0IHB1c2hlZCB0byBzb21lIHVuZGVybHlpbmdcbiAgLy8gc29ja2V0IG9yIGZpbGUuXG4gIHRoaXMubGVuZ3RoID0gMDtcblxuICAvLyBhIGZsYWcgdG8gc2VlIHdoZW4gd2UncmUgaW4gdGhlIG1pZGRsZSBvZiBhIHdyaXRlLlxuICB0aGlzLndyaXRpbmcgPSBmYWxzZTtcblxuICAvLyB3aGVuIHRydWUgYWxsIHdyaXRlcyB3aWxsIGJlIGJ1ZmZlcmVkIHVudGlsIC51bmNvcmsoKSBjYWxsXG4gIHRoaXMuY29ya2VkID0gMDtcblxuICAvLyBhIGZsYWcgdG8gYmUgYWJsZSB0byB0ZWxsIGlmIHRoZSBvbndyaXRlIGNiIGlzIGNhbGxlZCBpbW1lZGlhdGVseSxcbiAgLy8gb3Igb24gYSBsYXRlciB0aWNrLiAgV2Ugc2V0IHRoaXMgdG8gdHJ1ZSBhdCBmaXJzdCwgYmVjYXVzZSBhbnlcbiAgLy8gYWN0aW9ucyB0aGF0IHNob3VsZG4ndCBoYXBwZW4gdW50aWwgXCJsYXRlclwiIHNob3VsZCBnZW5lcmFsbHkgYWxzb1xuICAvLyBub3QgaGFwcGVuIGJlZm9yZSB0aGUgZmlyc3Qgd3JpdGUgY2FsbC5cbiAgdGhpcy5zeW5jID0gdHJ1ZTtcblxuICAvLyBhIGZsYWcgdG8ga25vdyBpZiB3ZSdyZSBwcm9jZXNzaW5nIHByZXZpb3VzbHkgYnVmZmVyZWQgaXRlbXMsIHdoaWNoXG4gIC8vIG1heSBjYWxsIHRoZSBfd3JpdGUoKSBjYWxsYmFjayBpbiB0aGUgc2FtZSB0aWNrLCBzbyB0aGF0IHdlIGRvbid0XG4gIC8vIGVuZCB1cCBpbiBhbiBvdmVybGFwcGVkIG9ud3JpdGUgc2l0dWF0aW9uLlxuICB0aGlzLmJ1ZmZlclByb2Nlc3NpbmcgPSBmYWxzZTtcblxuICAvLyB0aGUgY2FsbGJhY2sgdGhhdCdzIHBhc3NlZCB0byBfd3JpdGUoY2h1bmssY2IpXG4gIHRoaXMub253cml0ZSA9IGZ1bmN0aW9uIChlcikge1xuICAgIG9ud3JpdGUoc3RyZWFtLCBlcik7XG4gIH07XG5cbiAgLy8gdGhlIGNhbGxiYWNrIHRoYXQgdGhlIHVzZXIgc3VwcGxpZXMgdG8gd3JpdGUoY2h1bmssZW5jb2RpbmcsY2IpXG4gIHRoaXMud3JpdGVjYiA9IG51bGw7XG5cbiAgLy8gdGhlIGFtb3VudCB0aGF0IGlzIGJlaW5nIHdyaXR0ZW4gd2hlbiBfd3JpdGUgaXMgY2FsbGVkLlxuICB0aGlzLndyaXRlbGVuID0gMDtcbiAgdGhpcy5idWZmZXJlZFJlcXVlc3QgPSBudWxsO1xuICB0aGlzLmxhc3RCdWZmZXJlZFJlcXVlc3QgPSBudWxsO1xuXG4gIC8vIG51bWJlciBvZiBwZW5kaW5nIHVzZXItc3VwcGxpZWQgd3JpdGUgY2FsbGJhY2tzXG4gIC8vIHRoaXMgbXVzdCBiZSAwIGJlZm9yZSAnZmluaXNoJyBjYW4gYmUgZW1pdHRlZFxuICB0aGlzLnBlbmRpbmdjYiA9IDA7XG5cbiAgLy8gZW1pdCBwcmVmaW5pc2ggaWYgdGhlIG9ubHkgdGhpbmcgd2UncmUgd2FpdGluZyBmb3IgaXMgX3dyaXRlIGNic1xuICAvLyBUaGlzIGlzIHJlbGV2YW50IGZvciBzeW5jaHJvbm91cyBUcmFuc2Zvcm0gc3RyZWFtc1xuICB0aGlzLnByZWZpbmlzaGVkID0gZmFsc2U7XG5cbiAgLy8gVHJ1ZSBpZiB0aGUgZXJyb3Igd2FzIGFscmVhZHkgZW1pdHRlZCBhbmQgc2hvdWxkIG5vdCBiZSB0aHJvd24gYWdhaW5cbiAgdGhpcy5lcnJvckVtaXR0ZWQgPSBmYWxzZTtcblxuICAvLyBTaG91bGQgY2xvc2UgYmUgZW1pdHRlZCBvbiBkZXN0cm95LiBEZWZhdWx0cyB0byB0cnVlLlxuICB0aGlzLmVtaXRDbG9zZSA9IG9wdGlvbnMuZW1pdENsb3NlICE9PSBmYWxzZTtcblxuICAvLyBTaG91bGQgLmRlc3Ryb3koKSBiZSBjYWxsZWQgYWZ0ZXIgJ2ZpbmlzaCcgKGFuZCBwb3RlbnRpYWxseSAnZW5kJylcbiAgdGhpcy5hdXRvRGVzdHJveSA9ICEhb3B0aW9ucy5hdXRvRGVzdHJveTtcblxuICAvLyBjb3VudCBidWZmZXJlZCByZXF1ZXN0c1xuICB0aGlzLmJ1ZmZlcmVkUmVxdWVzdENvdW50ID0gMDtcblxuICAvLyBhbGxvY2F0ZSB0aGUgZmlyc3QgQ29ya2VkUmVxdWVzdCwgdGhlcmUgaXMgYWx3YXlzXG4gIC8vIG9uZSBhbGxvY2F0ZWQgYW5kIGZyZWUgdG8gdXNlLCBhbmQgd2UgbWFpbnRhaW4gYXQgbW9zdCB0d29cbiAgdGhpcy5jb3JrZWRSZXF1ZXN0c0ZyZWUgPSBuZXcgQ29ya2VkUmVxdWVzdCh0aGlzKTtcbn1cbldyaXRhYmxlU3RhdGUucHJvdG90eXBlLmdldEJ1ZmZlciA9IGZ1bmN0aW9uIGdldEJ1ZmZlcigpIHtcbiAgdmFyIGN1cnJlbnQgPSB0aGlzLmJ1ZmZlcmVkUmVxdWVzdDtcbiAgdmFyIG91dCA9IFtdO1xuICB3aGlsZSAoY3VycmVudCkge1xuICAgIG91dC5wdXNoKGN1cnJlbnQpO1xuICAgIGN1cnJlbnQgPSBjdXJyZW50Lm5leHQ7XG4gIH1cbiAgcmV0dXJuIG91dDtcbn07XG4oZnVuY3Rpb24gKCkge1xuICB0cnkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShXcml0YWJsZVN0YXRlLnByb3RvdHlwZSwgJ2J1ZmZlcicsIHtcbiAgICAgIGdldDogaW50ZXJuYWxVdGlsLmRlcHJlY2F0ZShmdW5jdGlvbiB3cml0YWJsZVN0YXRlQnVmZmVyR2V0dGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRCdWZmZXIoKTtcbiAgICAgIH0sICdfd3JpdGFibGVTdGF0ZS5idWZmZXIgaXMgZGVwcmVjYXRlZC4gVXNlIF93cml0YWJsZVN0YXRlLmdldEJ1ZmZlciAnICsgJ2luc3RlYWQuJywgJ0RFUDAwMDMnKVxuICAgIH0pO1xuICB9IGNhdGNoIChfKSB7fVxufSkoKTtcblxuLy8gVGVzdCBfd3JpdGFibGVTdGF0ZSBmb3IgaW5oZXJpdGFuY2UgdG8gYWNjb3VudCBmb3IgRHVwbGV4IHN0cmVhbXMsXG4vLyB3aG9zZSBwcm90b3R5cGUgY2hhaW4gb25seSBwb2ludHMgdG8gUmVhZGFibGUuXG52YXIgcmVhbEhhc0luc3RhbmNlO1xuaWYgKHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLmhhc0luc3RhbmNlICYmIHR5cGVvZiBGdW5jdGlvbi5wcm90b3R5cGVbU3ltYm9sLmhhc0luc3RhbmNlXSA9PT0gJ2Z1bmN0aW9uJykge1xuICByZWFsSGFzSW5zdGFuY2UgPSBGdW5jdGlvbi5wcm90b3R5cGVbU3ltYm9sLmhhc0luc3RhbmNlXTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFdyaXRhYmxlLCBTeW1ib2wuaGFzSW5zdGFuY2UsIHtcbiAgICB2YWx1ZTogZnVuY3Rpb24gdmFsdWUob2JqZWN0KSB7XG4gICAgICBpZiAocmVhbEhhc0luc3RhbmNlLmNhbGwodGhpcywgb2JqZWN0KSkgcmV0dXJuIHRydWU7XG4gICAgICBpZiAodGhpcyAhPT0gV3JpdGFibGUpIHJldHVybiBmYWxzZTtcbiAgICAgIHJldHVybiBvYmplY3QgJiYgb2JqZWN0Ll93cml0YWJsZVN0YXRlIGluc3RhbmNlb2YgV3JpdGFibGVTdGF0ZTtcbiAgICB9XG4gIH0pO1xufSBlbHNlIHtcbiAgcmVhbEhhc0luc3RhbmNlID0gZnVuY3Rpb24gcmVhbEhhc0luc3RhbmNlKG9iamVjdCkge1xuICAgIHJldHVybiBvYmplY3QgaW5zdGFuY2VvZiB0aGlzO1xuICB9O1xufVxuZnVuY3Rpb24gV3JpdGFibGUob3B0aW9ucykge1xuICBEdXBsZXggPSBEdXBsZXggfHwgcmVxdWlyZSgnLi9fc3RyZWFtX2R1cGxleCcpO1xuXG4gIC8vIFdyaXRhYmxlIGN0b3IgaXMgYXBwbGllZCB0byBEdXBsZXhlcywgdG9vLlxuICAvLyBgcmVhbEhhc0luc3RhbmNlYCBpcyBuZWNlc3NhcnkgYmVjYXVzZSB1c2luZyBwbGFpbiBgaW5zdGFuY2VvZmBcbiAgLy8gd291bGQgcmV0dXJuIGZhbHNlLCBhcyBubyBgX3dyaXRhYmxlU3RhdGVgIHByb3BlcnR5IGlzIGF0dGFjaGVkLlxuXG4gIC8vIFRyeWluZyB0byB1c2UgdGhlIGN1c3RvbSBgaW5zdGFuY2VvZmAgZm9yIFdyaXRhYmxlIGhlcmUgd2lsbCBhbHNvIGJyZWFrIHRoZVxuICAvLyBOb2RlLmpzIExhenlUcmFuc2Zvcm0gaW1wbGVtZW50YXRpb24sIHdoaWNoIGhhcyBhIG5vbi10cml2aWFsIGdldHRlciBmb3JcbiAgLy8gYF93cml0YWJsZVN0YXRlYCB0aGF0IHdvdWxkIGxlYWQgdG8gaW5maW5pdGUgcmVjdXJzaW9uLlxuXG4gIC8vIENoZWNraW5nIGZvciBhIFN0cmVhbS5EdXBsZXggaW5zdGFuY2UgaXMgZmFzdGVyIGhlcmUgaW5zdGVhZCBvZiBpbnNpZGVcbiAgLy8gdGhlIFdyaXRhYmxlU3RhdGUgY29uc3RydWN0b3IsIGF0IGxlYXN0IHdpdGggVjggNi41XG4gIHZhciBpc0R1cGxleCA9IHRoaXMgaW5zdGFuY2VvZiBEdXBsZXg7XG4gIGlmICghaXNEdXBsZXggJiYgIXJlYWxIYXNJbnN0YW5jZS5jYWxsKFdyaXRhYmxlLCB0aGlzKSkgcmV0dXJuIG5ldyBXcml0YWJsZShvcHRpb25zKTtcbiAgdGhpcy5fd3JpdGFibGVTdGF0ZSA9IG5ldyBXcml0YWJsZVN0YXRlKG9wdGlvbnMsIHRoaXMsIGlzRHVwbGV4KTtcblxuICAvLyBsZWdhY3kuXG4gIHRoaXMud3JpdGFibGUgPSB0cnVlO1xuICBpZiAob3B0aW9ucykge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy53cml0ZSA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5fd3JpdGUgPSBvcHRpb25zLndyaXRlO1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy53cml0ZXYgPT09ICdmdW5jdGlvbicpIHRoaXMuX3dyaXRldiA9IG9wdGlvbnMud3JpdGV2O1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5kZXN0cm95ID09PSAnZnVuY3Rpb24nKSB0aGlzLl9kZXN0cm95ID0gb3B0aW9ucy5kZXN0cm95O1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5maW5hbCA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5fZmluYWwgPSBvcHRpb25zLmZpbmFsO1xuICB9XG4gIFN0cmVhbS5jYWxsKHRoaXMpO1xufVxuXG4vLyBPdGhlcndpc2UgcGVvcGxlIGNhbiBwaXBlIFdyaXRhYmxlIHN0cmVhbXMsIHdoaWNoIGlzIGp1c3Qgd3JvbmcuXG5Xcml0YWJsZS5wcm90b3R5cGUucGlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgZXJyb3JPckRlc3Ryb3kodGhpcywgbmV3IEVSUl9TVFJFQU1fQ0FOTk9UX1BJUEUoKSk7XG59O1xuZnVuY3Rpb24gd3JpdGVBZnRlckVuZChzdHJlYW0sIGNiKSB7XG4gIHZhciBlciA9IG5ldyBFUlJfU1RSRUFNX1dSSVRFX0FGVEVSX0VORCgpO1xuICAvLyBUT0RPOiBkZWZlciBlcnJvciBldmVudHMgY29uc2lzdGVudGx5IGV2ZXJ5d2hlcmUsIG5vdCBqdXN0IHRoZSBjYlxuICBlcnJvck9yRGVzdHJveShzdHJlYW0sIGVyKTtcbiAgcHJvY2Vzcy5uZXh0VGljayhjYiwgZXIpO1xufVxuXG4vLyBDaGVja3MgdGhhdCBhIHVzZXItc3VwcGxpZWQgY2h1bmsgaXMgdmFsaWQsIGVzcGVjaWFsbHkgZm9yIHRoZSBwYXJ0aWN1bGFyXG4vLyBtb2RlIHRoZSBzdHJlYW0gaXMgaW4uIEN1cnJlbnRseSB0aGlzIG1lYW5zIHRoYXQgYG51bGxgIGlzIG5ldmVyIGFjY2VwdGVkXG4vLyBhbmQgdW5kZWZpbmVkL25vbi1zdHJpbmcgdmFsdWVzIGFyZSBvbmx5IGFsbG93ZWQgaW4gb2JqZWN0IG1vZGUuXG5mdW5jdGlvbiB2YWxpZENodW5rKHN0cmVhbSwgc3RhdGUsIGNodW5rLCBjYikge1xuICB2YXIgZXI7XG4gIGlmIChjaHVuayA9PT0gbnVsbCkge1xuICAgIGVyID0gbmV3IEVSUl9TVFJFQU1fTlVMTF9WQUxVRVMoKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgY2h1bmsgIT09ICdzdHJpbmcnICYmICFzdGF0ZS5vYmplY3RNb2RlKSB7XG4gICAgZXIgPSBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUoJ2NodW5rJywgWydzdHJpbmcnLCAnQnVmZmVyJ10sIGNodW5rKTtcbiAgfVxuICBpZiAoZXIpIHtcbiAgICBlcnJvck9yRGVzdHJveShzdHJlYW0sIGVyKTtcbiAgICBwcm9jZXNzLm5leHRUaWNrKGNiLCBlcik7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuV3JpdGFibGUucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fd3JpdGFibGVTdGF0ZTtcbiAgdmFyIHJldCA9IGZhbHNlO1xuICB2YXIgaXNCdWYgPSAhc3RhdGUub2JqZWN0TW9kZSAmJiBfaXNVaW50OEFycmF5KGNodW5rKTtcbiAgaWYgKGlzQnVmICYmICFCdWZmZXIuaXNCdWZmZXIoY2h1bmspKSB7XG4gICAgY2h1bmsgPSBfdWludDhBcnJheVRvQnVmZmVyKGNodW5rKTtcbiAgfVxuICBpZiAodHlwZW9mIGVuY29kaW5nID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2IgPSBlbmNvZGluZztcbiAgICBlbmNvZGluZyA9IG51bGw7XG4gIH1cbiAgaWYgKGlzQnVmKSBlbmNvZGluZyA9ICdidWZmZXInO2Vsc2UgaWYgKCFlbmNvZGluZykgZW5jb2RpbmcgPSBzdGF0ZS5kZWZhdWx0RW5jb2Rpbmc7XG4gIGlmICh0eXBlb2YgY2IgIT09ICdmdW5jdGlvbicpIGNiID0gbm9wO1xuICBpZiAoc3RhdGUuZW5kaW5nKSB3cml0ZUFmdGVyRW5kKHRoaXMsIGNiKTtlbHNlIGlmIChpc0J1ZiB8fCB2YWxpZENodW5rKHRoaXMsIHN0YXRlLCBjaHVuaywgY2IpKSB7XG4gICAgc3RhdGUucGVuZGluZ2NiKys7XG4gICAgcmV0ID0gd3JpdGVPckJ1ZmZlcih0aGlzLCBzdGF0ZSwgaXNCdWYsIGNodW5rLCBlbmNvZGluZywgY2IpO1xuICB9XG4gIHJldHVybiByZXQ7XG59O1xuV3JpdGFibGUucHJvdG90eXBlLmNvcmsgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuX3dyaXRhYmxlU3RhdGUuY29ya2VkKys7XG59O1xuV3JpdGFibGUucHJvdG90eXBlLnVuY29yayA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fd3JpdGFibGVTdGF0ZTtcbiAgaWYgKHN0YXRlLmNvcmtlZCkge1xuICAgIHN0YXRlLmNvcmtlZC0tO1xuICAgIGlmICghc3RhdGUud3JpdGluZyAmJiAhc3RhdGUuY29ya2VkICYmICFzdGF0ZS5idWZmZXJQcm9jZXNzaW5nICYmIHN0YXRlLmJ1ZmZlcmVkUmVxdWVzdCkgY2xlYXJCdWZmZXIodGhpcywgc3RhdGUpO1xuICB9XG59O1xuV3JpdGFibGUucHJvdG90eXBlLnNldERlZmF1bHRFbmNvZGluZyA9IGZ1bmN0aW9uIHNldERlZmF1bHRFbmNvZGluZyhlbmNvZGluZykge1xuICAvLyBub2RlOjpQYXJzZUVuY29kaW5nKCkgcmVxdWlyZXMgbG93ZXIgY2FzZS5cbiAgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gJ3N0cmluZycpIGVuY29kaW5nID0gZW5jb2RpbmcudG9Mb3dlckNhc2UoKTtcbiAgaWYgKCEoWydoZXgnLCAndXRmOCcsICd1dGYtOCcsICdhc2NpaScsICdiaW5hcnknLCAnYmFzZTY0JywgJ3VjczInLCAndWNzLTInLCAndXRmMTZsZScsICd1dGYtMTZsZScsICdyYXcnXS5pbmRleE9mKChlbmNvZGluZyArICcnKS50b0xvd2VyQ2FzZSgpKSA+IC0xKSkgdGhyb3cgbmV3IEVSUl9VTktOT1dOX0VOQ09ESU5HKGVuY29kaW5nKTtcbiAgdGhpcy5fd3JpdGFibGVTdGF0ZS5kZWZhdWx0RW5jb2RpbmcgPSBlbmNvZGluZztcbiAgcmV0dXJuIHRoaXM7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KFdyaXRhYmxlLnByb3RvdHlwZSwgJ3dyaXRhYmxlQnVmZmVyJywge1xuICAvLyBtYWtpbmcgaXQgZXhwbGljaXQgdGhpcyBwcm9wZXJ0eSBpcyBub3QgZW51bWVyYWJsZVxuICAvLyBiZWNhdXNlIG90aGVyd2lzZSBzb21lIHByb3RvdHlwZSBtYW5pcHVsYXRpb24gaW5cbiAgLy8gdXNlcmxhbmQgd2lsbCBmYWlsXG4gIGVudW1lcmFibGU6IGZhbHNlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZSAmJiB0aGlzLl93cml0YWJsZVN0YXRlLmdldEJ1ZmZlcigpO1xuICB9XG59KTtcbmZ1bmN0aW9uIGRlY29kZUNodW5rKHN0YXRlLCBjaHVuaywgZW5jb2RpbmcpIHtcbiAgaWYgKCFzdGF0ZS5vYmplY3RNb2RlICYmIHN0YXRlLmRlY29kZVN0cmluZ3MgIT09IGZhbHNlICYmIHR5cGVvZiBjaHVuayA9PT0gJ3N0cmluZycpIHtcbiAgICBjaHVuayA9IEJ1ZmZlci5mcm9tKGNodW5rLCBlbmNvZGluZyk7XG4gIH1cbiAgcmV0dXJuIGNodW5rO1xufVxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFdyaXRhYmxlLnByb3RvdHlwZSwgJ3dyaXRhYmxlSGlnaFdhdGVyTWFyaycsIHtcbiAgLy8gbWFraW5nIGl0IGV4cGxpY2l0IHRoaXMgcHJvcGVydHkgaXMgbm90IGVudW1lcmFibGVcbiAgLy8gYmVjYXVzZSBvdGhlcndpc2Ugc29tZSBwcm90b3R5cGUgbWFuaXB1bGF0aW9uIGluXG4gIC8vIHVzZXJsYW5kIHdpbGwgZmFpbFxuICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuaGlnaFdhdGVyTWFyaztcbiAgfVxufSk7XG5cbi8vIGlmIHdlJ3JlIGFscmVhZHkgd3JpdGluZyBzb21ldGhpbmcsIHRoZW4ganVzdCBwdXQgdGhpc1xuLy8gaW4gdGhlIHF1ZXVlLCBhbmQgd2FpdCBvdXIgdHVybi4gIE90aGVyd2lzZSwgY2FsbCBfd3JpdGVcbi8vIElmIHdlIHJldHVybiBmYWxzZSwgdGhlbiB3ZSBuZWVkIGEgZHJhaW4gZXZlbnQsIHNvIHNldCB0aGF0IGZsYWcuXG5mdW5jdGlvbiB3cml0ZU9yQnVmZmVyKHN0cmVhbSwgc3RhdGUsIGlzQnVmLCBjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIGlmICghaXNCdWYpIHtcbiAgICB2YXIgbmV3Q2h1bmsgPSBkZWNvZGVDaHVuayhzdGF0ZSwgY2h1bmssIGVuY29kaW5nKTtcbiAgICBpZiAoY2h1bmsgIT09IG5ld0NodW5rKSB7XG4gICAgICBpc0J1ZiA9IHRydWU7XG4gICAgICBlbmNvZGluZyA9ICdidWZmZXInO1xuICAgICAgY2h1bmsgPSBuZXdDaHVuaztcbiAgICB9XG4gIH1cbiAgdmFyIGxlbiA9IHN0YXRlLm9iamVjdE1vZGUgPyAxIDogY2h1bmsubGVuZ3RoO1xuICBzdGF0ZS5sZW5ndGggKz0gbGVuO1xuICB2YXIgcmV0ID0gc3RhdGUubGVuZ3RoIDwgc3RhdGUuaGlnaFdhdGVyTWFyaztcbiAgLy8gd2UgbXVzdCBlbnN1cmUgdGhhdCBwcmV2aW91cyBuZWVkRHJhaW4gd2lsbCBub3QgYmUgcmVzZXQgdG8gZmFsc2UuXG4gIGlmICghcmV0KSBzdGF0ZS5uZWVkRHJhaW4gPSB0cnVlO1xuICBpZiAoc3RhdGUud3JpdGluZyB8fCBzdGF0ZS5jb3JrZWQpIHtcbiAgICB2YXIgbGFzdCA9IHN0YXRlLmxhc3RCdWZmZXJlZFJlcXVlc3Q7XG4gICAgc3RhdGUubGFzdEJ1ZmZlcmVkUmVxdWVzdCA9IHtcbiAgICAgIGNodW5rOiBjaHVuayxcbiAgICAgIGVuY29kaW5nOiBlbmNvZGluZyxcbiAgICAgIGlzQnVmOiBpc0J1ZixcbiAgICAgIGNhbGxiYWNrOiBjYixcbiAgICAgIG5leHQ6IG51bGxcbiAgICB9O1xuICAgIGlmIChsYXN0KSB7XG4gICAgICBsYXN0Lm5leHQgPSBzdGF0ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0O1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZS5idWZmZXJlZFJlcXVlc3QgPSBzdGF0ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0O1xuICAgIH1cbiAgICBzdGF0ZS5idWZmZXJlZFJlcXVlc3RDb3VudCArPSAxO1xuICB9IGVsc2Uge1xuICAgIGRvV3JpdGUoc3RyZWFtLCBzdGF0ZSwgZmFsc2UsIGxlbiwgY2h1bmssIGVuY29kaW5nLCBjYik7XG4gIH1cbiAgcmV0dXJuIHJldDtcbn1cbmZ1bmN0aW9uIGRvV3JpdGUoc3RyZWFtLCBzdGF0ZSwgd3JpdGV2LCBsZW4sIGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgc3RhdGUud3JpdGVsZW4gPSBsZW47XG4gIHN0YXRlLndyaXRlY2IgPSBjYjtcbiAgc3RhdGUud3JpdGluZyA9IHRydWU7XG4gIHN0YXRlLnN5bmMgPSB0cnVlO1xuICBpZiAoc3RhdGUuZGVzdHJveWVkKSBzdGF0ZS5vbndyaXRlKG5ldyBFUlJfU1RSRUFNX0RFU1RST1lFRCgnd3JpdGUnKSk7ZWxzZSBpZiAod3JpdGV2KSBzdHJlYW0uX3dyaXRldihjaHVuaywgc3RhdGUub253cml0ZSk7ZWxzZSBzdHJlYW0uX3dyaXRlKGNodW5rLCBlbmNvZGluZywgc3RhdGUub253cml0ZSk7XG4gIHN0YXRlLnN5bmMgPSBmYWxzZTtcbn1cbmZ1bmN0aW9uIG9ud3JpdGVFcnJvcihzdHJlYW0sIHN0YXRlLCBzeW5jLCBlciwgY2IpIHtcbiAgLS1zdGF0ZS5wZW5kaW5nY2I7XG4gIGlmIChzeW5jKSB7XG4gICAgLy8gZGVmZXIgdGhlIGNhbGxiYWNrIGlmIHdlIGFyZSBiZWluZyBjYWxsZWQgc3luY2hyb25vdXNseVxuICAgIC8vIHRvIGF2b2lkIHBpbGluZyB1cCB0aGluZ3Mgb24gdGhlIHN0YWNrXG4gICAgcHJvY2Vzcy5uZXh0VGljayhjYiwgZXIpO1xuICAgIC8vIHRoaXMgY2FuIGVtaXQgZmluaXNoLCBhbmQgaXQgd2lsbCBhbHdheXMgaGFwcGVuXG4gICAgLy8gYWZ0ZXIgZXJyb3JcbiAgICBwcm9jZXNzLm5leHRUaWNrKGZpbmlzaE1heWJlLCBzdHJlYW0sIHN0YXRlKTtcbiAgICBzdHJlYW0uX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkID0gdHJ1ZTtcbiAgICBlcnJvck9yRGVzdHJveShzdHJlYW0sIGVyKTtcbiAgfSBlbHNlIHtcbiAgICAvLyB0aGUgY2FsbGVyIGV4cGVjdCB0aGlzIHRvIGhhcHBlbiBiZWZvcmUgaWZcbiAgICAvLyBpdCBpcyBhc3luY1xuICAgIGNiKGVyKTtcbiAgICBzdHJlYW0uX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkID0gdHJ1ZTtcbiAgICBlcnJvck9yRGVzdHJveShzdHJlYW0sIGVyKTtcbiAgICAvLyB0aGlzIGNhbiBlbWl0IGZpbmlzaCwgYnV0IGZpbmlzaCBtdXN0XG4gICAgLy8gYWx3YXlzIGZvbGxvdyBlcnJvclxuICAgIGZpbmlzaE1heWJlKHN0cmVhbSwgc3RhdGUpO1xuICB9XG59XG5mdW5jdGlvbiBvbndyaXRlU3RhdGVVcGRhdGUoc3RhdGUpIHtcbiAgc3RhdGUud3JpdGluZyA9IGZhbHNlO1xuICBzdGF0ZS53cml0ZWNiID0gbnVsbDtcbiAgc3RhdGUubGVuZ3RoIC09IHN0YXRlLndyaXRlbGVuO1xuICBzdGF0ZS53cml0ZWxlbiA9IDA7XG59XG5mdW5jdGlvbiBvbndyaXRlKHN0cmVhbSwgZXIpIHtcbiAgdmFyIHN0YXRlID0gc3RyZWFtLl93cml0YWJsZVN0YXRlO1xuICB2YXIgc3luYyA9IHN0YXRlLnN5bmM7XG4gIHZhciBjYiA9IHN0YXRlLndyaXRlY2I7XG4gIGlmICh0eXBlb2YgY2IgIT09ICdmdW5jdGlvbicpIHRocm93IG5ldyBFUlJfTVVMVElQTEVfQ0FMTEJBQ0soKTtcbiAgb253cml0ZVN0YXRlVXBkYXRlKHN0YXRlKTtcbiAgaWYgKGVyKSBvbndyaXRlRXJyb3Ioc3RyZWFtLCBzdGF0ZSwgc3luYywgZXIsIGNiKTtlbHNlIHtcbiAgICAvLyBDaGVjayBpZiB3ZSdyZSBhY3R1YWxseSByZWFkeSB0byBmaW5pc2gsIGJ1dCBkb24ndCBlbWl0IHlldFxuICAgIHZhciBmaW5pc2hlZCA9IG5lZWRGaW5pc2goc3RhdGUpIHx8IHN0cmVhbS5kZXN0cm95ZWQ7XG4gICAgaWYgKCFmaW5pc2hlZCAmJiAhc3RhdGUuY29ya2VkICYmICFzdGF0ZS5idWZmZXJQcm9jZXNzaW5nICYmIHN0YXRlLmJ1ZmZlcmVkUmVxdWVzdCkge1xuICAgICAgY2xlYXJCdWZmZXIoc3RyZWFtLCBzdGF0ZSk7XG4gICAgfVxuICAgIGlmIChzeW5jKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGFmdGVyV3JpdGUsIHN0cmVhbSwgc3RhdGUsIGZpbmlzaGVkLCBjYik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFmdGVyV3JpdGUoc3RyZWFtLCBzdGF0ZSwgZmluaXNoZWQsIGNiKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGFmdGVyV3JpdGUoc3RyZWFtLCBzdGF0ZSwgZmluaXNoZWQsIGNiKSB7XG4gIGlmICghZmluaXNoZWQpIG9ud3JpdGVEcmFpbihzdHJlYW0sIHN0YXRlKTtcbiAgc3RhdGUucGVuZGluZ2NiLS07XG4gIGNiKCk7XG4gIGZpbmlzaE1heWJlKHN0cmVhbSwgc3RhdGUpO1xufVxuXG4vLyBNdXN0IGZvcmNlIGNhbGxiYWNrIHRvIGJlIGNhbGxlZCBvbiBuZXh0VGljaywgc28gdGhhdCB3ZSBkb24ndFxuLy8gZW1pdCAnZHJhaW4nIGJlZm9yZSB0aGUgd3JpdGUoKSBjb25zdW1lciBnZXRzIHRoZSAnZmFsc2UnIHJldHVyblxuLy8gdmFsdWUsIGFuZCBoYXMgYSBjaGFuY2UgdG8gYXR0YWNoIGEgJ2RyYWluJyBsaXN0ZW5lci5cbmZ1bmN0aW9uIG9ud3JpdGVEcmFpbihzdHJlYW0sIHN0YXRlKSB7XG4gIGlmIChzdGF0ZS5sZW5ndGggPT09IDAgJiYgc3RhdGUubmVlZERyYWluKSB7XG4gICAgc3RhdGUubmVlZERyYWluID0gZmFsc2U7XG4gICAgc3RyZWFtLmVtaXQoJ2RyYWluJyk7XG4gIH1cbn1cblxuLy8gaWYgdGhlcmUncyBzb21ldGhpbmcgaW4gdGhlIGJ1ZmZlciB3YWl0aW5nLCB0aGVuIHByb2Nlc3MgaXRcbmZ1bmN0aW9uIGNsZWFyQnVmZmVyKHN0cmVhbSwgc3RhdGUpIHtcbiAgc3RhdGUuYnVmZmVyUHJvY2Vzc2luZyA9IHRydWU7XG4gIHZhciBlbnRyeSA9IHN0YXRlLmJ1ZmZlcmVkUmVxdWVzdDtcbiAgaWYgKHN0cmVhbS5fd3JpdGV2ICYmIGVudHJ5ICYmIGVudHJ5Lm5leHQpIHtcbiAgICAvLyBGYXN0IGNhc2UsIHdyaXRlIGV2ZXJ5dGhpbmcgdXNpbmcgX3dyaXRldigpXG4gICAgdmFyIGwgPSBzdGF0ZS5idWZmZXJlZFJlcXVlc3RDb3VudDtcbiAgICB2YXIgYnVmZmVyID0gbmV3IEFycmF5KGwpO1xuICAgIHZhciBob2xkZXIgPSBzdGF0ZS5jb3JrZWRSZXF1ZXN0c0ZyZWU7XG4gICAgaG9sZGVyLmVudHJ5ID0gZW50cnk7XG4gICAgdmFyIGNvdW50ID0gMDtcbiAgICB2YXIgYWxsQnVmZmVycyA9IHRydWU7XG4gICAgd2hpbGUgKGVudHJ5KSB7XG4gICAgICBidWZmZXJbY291bnRdID0gZW50cnk7XG4gICAgICBpZiAoIWVudHJ5LmlzQnVmKSBhbGxCdWZmZXJzID0gZmFsc2U7XG4gICAgICBlbnRyeSA9IGVudHJ5Lm5leHQ7XG4gICAgICBjb3VudCArPSAxO1xuICAgIH1cbiAgICBidWZmZXIuYWxsQnVmZmVycyA9IGFsbEJ1ZmZlcnM7XG4gICAgZG9Xcml0ZShzdHJlYW0sIHN0YXRlLCB0cnVlLCBzdGF0ZS5sZW5ndGgsIGJ1ZmZlciwgJycsIGhvbGRlci5maW5pc2gpO1xuXG4gICAgLy8gZG9Xcml0ZSBpcyBhbG1vc3QgYWx3YXlzIGFzeW5jLCBkZWZlciB0aGVzZSB0byBzYXZlIGEgYml0IG9mIHRpbWVcbiAgICAvLyBhcyB0aGUgaG90IHBhdGggZW5kcyB3aXRoIGRvV3JpdGVcbiAgICBzdGF0ZS5wZW5kaW5nY2IrKztcbiAgICBzdGF0ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0ID0gbnVsbDtcbiAgICBpZiAoaG9sZGVyLm5leHQpIHtcbiAgICAgIHN0YXRlLmNvcmtlZFJlcXVlc3RzRnJlZSA9IGhvbGRlci5uZXh0O1xuICAgICAgaG9sZGVyLm5leHQgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZS5jb3JrZWRSZXF1ZXN0c0ZyZWUgPSBuZXcgQ29ya2VkUmVxdWVzdChzdGF0ZSk7XG4gICAgfVxuICAgIHN0YXRlLmJ1ZmZlcmVkUmVxdWVzdENvdW50ID0gMDtcbiAgfSBlbHNlIHtcbiAgICAvLyBTbG93IGNhc2UsIHdyaXRlIGNodW5rcyBvbmUtYnktb25lXG4gICAgd2hpbGUgKGVudHJ5KSB7XG4gICAgICB2YXIgY2h1bmsgPSBlbnRyeS5jaHVuaztcbiAgICAgIHZhciBlbmNvZGluZyA9IGVudHJ5LmVuY29kaW5nO1xuICAgICAgdmFyIGNiID0gZW50cnkuY2FsbGJhY2s7XG4gICAgICB2YXIgbGVuID0gc3RhdGUub2JqZWN0TW9kZSA/IDEgOiBjaHVuay5sZW5ndGg7XG4gICAgICBkb1dyaXRlKHN0cmVhbSwgc3RhdGUsIGZhbHNlLCBsZW4sIGNodW5rLCBlbmNvZGluZywgY2IpO1xuICAgICAgZW50cnkgPSBlbnRyeS5uZXh0O1xuICAgICAgc3RhdGUuYnVmZmVyZWRSZXF1ZXN0Q291bnQtLTtcbiAgICAgIC8vIGlmIHdlIGRpZG4ndCBjYWxsIHRoZSBvbndyaXRlIGltbWVkaWF0ZWx5LCB0aGVuXG4gICAgICAvLyBpdCBtZWFucyB0aGF0IHdlIG5lZWQgdG8gd2FpdCB1bnRpbCBpdCBkb2VzLlxuICAgICAgLy8gYWxzbywgdGhhdCBtZWFucyB0aGF0IHRoZSBjaHVuayBhbmQgY2IgYXJlIGN1cnJlbnRseVxuICAgICAgLy8gYmVpbmcgcHJvY2Vzc2VkLCBzbyBtb3ZlIHRoZSBidWZmZXIgY291bnRlciBwYXN0IHRoZW0uXG4gICAgICBpZiAoc3RhdGUud3JpdGluZykge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGVudHJ5ID09PSBudWxsKSBzdGF0ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0ID0gbnVsbDtcbiAgfVxuICBzdGF0ZS5idWZmZXJlZFJlcXVlc3QgPSBlbnRyeTtcbiAgc3RhdGUuYnVmZmVyUHJvY2Vzc2luZyA9IGZhbHNlO1xufVxuV3JpdGFibGUucHJvdG90eXBlLl93cml0ZSA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIGNiKG5ldyBFUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCgnX3dyaXRlKCknKSk7XG59O1xuV3JpdGFibGUucHJvdG90eXBlLl93cml0ZXYgPSBudWxsO1xuV3JpdGFibGUucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3dyaXRhYmxlU3RhdGU7XG4gIGlmICh0eXBlb2YgY2h1bmsgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjYiA9IGNodW5rO1xuICAgIGNodW5rID0gbnVsbDtcbiAgICBlbmNvZGluZyA9IG51bGw7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGVuY29kaW5nID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2IgPSBlbmNvZGluZztcbiAgICBlbmNvZGluZyA9IG51bGw7XG4gIH1cbiAgaWYgKGNodW5rICE9PSBudWxsICYmIGNodW5rICE9PSB1bmRlZmluZWQpIHRoaXMud3JpdGUoY2h1bmssIGVuY29kaW5nKTtcblxuICAvLyAuZW5kKCkgZnVsbHkgdW5jb3Jrc1xuICBpZiAoc3RhdGUuY29ya2VkKSB7XG4gICAgc3RhdGUuY29ya2VkID0gMTtcbiAgICB0aGlzLnVuY29yaygpO1xuICB9XG5cbiAgLy8gaWdub3JlIHVubmVjZXNzYXJ5IGVuZCgpIGNhbGxzLlxuICBpZiAoIXN0YXRlLmVuZGluZykgZW5kV3JpdGFibGUodGhpcywgc3RhdGUsIGNiKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KFdyaXRhYmxlLnByb3RvdHlwZSwgJ3dyaXRhYmxlTGVuZ3RoJywge1xuICAvLyBtYWtpbmcgaXQgZXhwbGljaXQgdGhpcyBwcm9wZXJ0eSBpcyBub3QgZW51bWVyYWJsZVxuICAvLyBiZWNhdXNlIG90aGVyd2lzZSBzb21lIHByb3RvdHlwZSBtYW5pcHVsYXRpb24gaW5cbiAgLy8gdXNlcmxhbmQgd2lsbCBmYWlsXG4gIGVudW1lcmFibGU6IGZhbHNlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5sZW5ndGg7XG4gIH1cbn0pO1xuZnVuY3Rpb24gbmVlZEZpbmlzaChzdGF0ZSkge1xuICByZXR1cm4gc3RhdGUuZW5kaW5nICYmIHN0YXRlLmxlbmd0aCA9PT0gMCAmJiBzdGF0ZS5idWZmZXJlZFJlcXVlc3QgPT09IG51bGwgJiYgIXN0YXRlLmZpbmlzaGVkICYmICFzdGF0ZS53cml0aW5nO1xufVxuZnVuY3Rpb24gY2FsbEZpbmFsKHN0cmVhbSwgc3RhdGUpIHtcbiAgc3RyZWFtLl9maW5hbChmdW5jdGlvbiAoZXJyKSB7XG4gICAgc3RhdGUucGVuZGluZ2NiLS07XG4gICAgaWYgKGVycikge1xuICAgICAgZXJyb3JPckRlc3Ryb3koc3RyZWFtLCBlcnIpO1xuICAgIH1cbiAgICBzdGF0ZS5wcmVmaW5pc2hlZCA9IHRydWU7XG4gICAgc3RyZWFtLmVtaXQoJ3ByZWZpbmlzaCcpO1xuICAgIGZpbmlzaE1heWJlKHN0cmVhbSwgc3RhdGUpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIHByZWZpbmlzaChzdHJlYW0sIHN0YXRlKSB7XG4gIGlmICghc3RhdGUucHJlZmluaXNoZWQgJiYgIXN0YXRlLmZpbmFsQ2FsbGVkKSB7XG4gICAgaWYgKHR5cGVvZiBzdHJlYW0uX2ZpbmFsID09PSAnZnVuY3Rpb24nICYmICFzdGF0ZS5kZXN0cm95ZWQpIHtcbiAgICAgIHN0YXRlLnBlbmRpbmdjYisrO1xuICAgICAgc3RhdGUuZmluYWxDYWxsZWQgPSB0cnVlO1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhjYWxsRmluYWwsIHN0cmVhbSwgc3RhdGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZS5wcmVmaW5pc2hlZCA9IHRydWU7XG4gICAgICBzdHJlYW0uZW1pdCgncHJlZmluaXNoJyk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBmaW5pc2hNYXliZShzdHJlYW0sIHN0YXRlKSB7XG4gIHZhciBuZWVkID0gbmVlZEZpbmlzaChzdGF0ZSk7XG4gIGlmIChuZWVkKSB7XG4gICAgcHJlZmluaXNoKHN0cmVhbSwgc3RhdGUpO1xuICAgIGlmIChzdGF0ZS5wZW5kaW5nY2IgPT09IDApIHtcbiAgICAgIHN0YXRlLmZpbmlzaGVkID0gdHJ1ZTtcbiAgICAgIHN0cmVhbS5lbWl0KCdmaW5pc2gnKTtcbiAgICAgIGlmIChzdGF0ZS5hdXRvRGVzdHJveSkge1xuICAgICAgICAvLyBJbiBjYXNlIG9mIGR1cGxleCBzdHJlYW1zIHdlIG5lZWQgYSB3YXkgdG8gZGV0ZWN0XG4gICAgICAgIC8vIGlmIHRoZSByZWFkYWJsZSBzaWRlIGlzIHJlYWR5IGZvciBhdXRvRGVzdHJveSBhcyB3ZWxsXG4gICAgICAgIHZhciByU3RhdGUgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGU7XG4gICAgICAgIGlmICghclN0YXRlIHx8IHJTdGF0ZS5hdXRvRGVzdHJveSAmJiByU3RhdGUuZW5kRW1pdHRlZCkge1xuICAgICAgICAgIHN0cmVhbS5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5lZWQ7XG59XG5mdW5jdGlvbiBlbmRXcml0YWJsZShzdHJlYW0sIHN0YXRlLCBjYikge1xuICBzdGF0ZS5lbmRpbmcgPSB0cnVlO1xuICBmaW5pc2hNYXliZShzdHJlYW0sIHN0YXRlKTtcbiAgaWYgKGNiKSB7XG4gICAgaWYgKHN0YXRlLmZpbmlzaGVkKSBwcm9jZXNzLm5leHRUaWNrKGNiKTtlbHNlIHN0cmVhbS5vbmNlKCdmaW5pc2gnLCBjYik7XG4gIH1cbiAgc3RhdGUuZW5kZWQgPSB0cnVlO1xuICBzdHJlYW0ud3JpdGFibGUgPSBmYWxzZTtcbn1cbmZ1bmN0aW9uIG9uQ29ya2VkRmluaXNoKGNvcmtSZXEsIHN0YXRlLCBlcnIpIHtcbiAgdmFyIGVudHJ5ID0gY29ya1JlcS5lbnRyeTtcbiAgY29ya1JlcS5lbnRyeSA9IG51bGw7XG4gIHdoaWxlIChlbnRyeSkge1xuICAgIHZhciBjYiA9IGVudHJ5LmNhbGxiYWNrO1xuICAgIHN0YXRlLnBlbmRpbmdjYi0tO1xuICAgIGNiKGVycik7XG4gICAgZW50cnkgPSBlbnRyeS5uZXh0O1xuICB9XG5cbiAgLy8gcmV1c2UgdGhlIGZyZWUgY29ya1JlcS5cbiAgc3RhdGUuY29ya2VkUmVxdWVzdHNGcmVlLm5leHQgPSBjb3JrUmVxO1xufVxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFdyaXRhYmxlLnByb3RvdHlwZSwgJ2Rlc3Ryb3llZCcsIHtcbiAgLy8gbWFraW5nIGl0IGV4cGxpY2l0IHRoaXMgcHJvcGVydHkgaXMgbm90IGVudW1lcmFibGVcbiAgLy8gYmVjYXVzZSBvdGhlcndpc2Ugc29tZSBwcm90b3R5cGUgbWFuaXB1bGF0aW9uIGluXG4gIC8vIHVzZXJsYW5kIHdpbGwgZmFpbFxuICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgaWYgKHRoaXMuX3dyaXRhYmxlU3RhdGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ7XG4gIH0sXG4gIHNldDogZnVuY3Rpb24gc2V0KHZhbHVlKSB7XG4gICAgLy8gd2UgaWdub3JlIHRoZSB2YWx1ZSBpZiB0aGUgc3RyZWFtXG4gICAgLy8gaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkIHlldFxuICAgIGlmICghdGhpcy5fd3JpdGFibGVTdGF0ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIHRoZSB1c2VyIGlzIGV4cGxpY2l0bHlcbiAgICAvLyBtYW5hZ2luZyBkZXN0cm95ZWRcbiAgICB0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZCA9IHZhbHVlO1xuICB9XG59KTtcbldyaXRhYmxlLnByb3RvdHlwZS5kZXN0cm95ID0gZGVzdHJveUltcGwuZGVzdHJveTtcbldyaXRhYmxlLnByb3RvdHlwZS5fdW5kZXN0cm95ID0gZGVzdHJveUltcGwudW5kZXN0cm95O1xuV3JpdGFibGUucHJvdG90eXBlLl9kZXN0cm95ID0gZnVuY3Rpb24gKGVyciwgY2IpIHtcbiAgY2IoZXJyKTtcbn07IiwgIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4vLyBhIGR1cGxleCBzdHJlYW0gaXMganVzdCBhIHN0cmVhbSB0aGF0IGlzIGJvdGggcmVhZGFibGUgYW5kIHdyaXRhYmxlLlxuLy8gU2luY2UgSlMgZG9lc24ndCBoYXZlIG11bHRpcGxlIHByb3RvdHlwYWwgaW5oZXJpdGFuY2UsIHRoaXMgY2xhc3Ncbi8vIHByb3RvdHlwYWxseSBpbmhlcml0cyBmcm9tIFJlYWRhYmxlLCBhbmQgdGhlbiBwYXJhc2l0aWNhbGx5IGZyb21cbi8vIFdyaXRhYmxlLlxuXG4ndXNlIHN0cmljdCc7XG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgb2JqZWN0S2V5cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgdmFyIGtleXMgPSBbXTtcbiAgZm9yICh2YXIga2V5IGluIG9iaikga2V5cy5wdXNoKGtleSk7XG4gIHJldHVybiBrZXlzO1xufTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG5tb2R1bGUuZXhwb3J0cyA9IER1cGxleDtcbnZhciBSZWFkYWJsZSA9IHJlcXVpcmUoJy4vX3N0cmVhbV9yZWFkYWJsZScpO1xudmFyIFdyaXRhYmxlID0gcmVxdWlyZSgnLi9fc3RyZWFtX3dyaXRhYmxlJyk7XG5yZXF1aXJlKCdpbmhlcml0cycpKER1cGxleCwgUmVhZGFibGUpO1xue1xuICAvLyBBbGxvdyB0aGUga2V5cyBhcnJheSB0byBiZSBHQydlZC5cbiAgdmFyIGtleXMgPSBvYmplY3RLZXlzKFdyaXRhYmxlLnByb3RvdHlwZSk7XG4gIGZvciAodmFyIHYgPSAwOyB2IDwga2V5cy5sZW5ndGg7IHYrKykge1xuICAgIHZhciBtZXRob2QgPSBrZXlzW3ZdO1xuICAgIGlmICghRHVwbGV4LnByb3RvdHlwZVttZXRob2RdKSBEdXBsZXgucHJvdG90eXBlW21ldGhvZF0gPSBXcml0YWJsZS5wcm90b3R5cGVbbWV0aG9kXTtcbiAgfVxufVxuZnVuY3Rpb24gRHVwbGV4KG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIER1cGxleCkpIHJldHVybiBuZXcgRHVwbGV4KG9wdGlvbnMpO1xuICBSZWFkYWJsZS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuICBXcml0YWJsZS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuICB0aGlzLmFsbG93SGFsZk9wZW4gPSB0cnVlO1xuICBpZiAob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zLnJlYWRhYmxlID09PSBmYWxzZSkgdGhpcy5yZWFkYWJsZSA9IGZhbHNlO1xuICAgIGlmIChvcHRpb25zLndyaXRhYmxlID09PSBmYWxzZSkgdGhpcy53cml0YWJsZSA9IGZhbHNlO1xuICAgIGlmIChvcHRpb25zLmFsbG93SGFsZk9wZW4gPT09IGZhbHNlKSB7XG4gICAgICB0aGlzLmFsbG93SGFsZk9wZW4gPSBmYWxzZTtcbiAgICAgIHRoaXMub25jZSgnZW5kJywgb25lbmQpO1xuICAgIH1cbiAgfVxufVxuT2JqZWN0LmRlZmluZVByb3BlcnR5KER1cGxleC5wcm90b3R5cGUsICd3cml0YWJsZUhpZ2hXYXRlck1hcmsnLCB7XG4gIC8vIG1ha2luZyBpdCBleHBsaWNpdCB0aGlzIHByb3BlcnR5IGlzIG5vdCBlbnVtZXJhYmxlXG4gIC8vIGJlY2F1c2Ugb3RoZXJ3aXNlIHNvbWUgcHJvdG90eXBlIG1hbmlwdWxhdGlvbiBpblxuICAvLyB1c2VybGFuZCB3aWxsIGZhaWxcbiAgZW51bWVyYWJsZTogZmFsc2UsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmhpZ2hXYXRlck1hcms7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KER1cGxleC5wcm90b3R5cGUsICd3cml0YWJsZUJ1ZmZlcicsIHtcbiAgLy8gbWFraW5nIGl0IGV4cGxpY2l0IHRoaXMgcHJvcGVydHkgaXMgbm90IGVudW1lcmFibGVcbiAgLy8gYmVjYXVzZSBvdGhlcndpc2Ugc29tZSBwcm90b3R5cGUgbWFuaXB1bGF0aW9uIGluXG4gIC8vIHVzZXJsYW5kIHdpbGwgZmFpbFxuICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUgJiYgdGhpcy5fd3JpdGFibGVTdGF0ZS5nZXRCdWZmZXIoKTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRHVwbGV4LnByb3RvdHlwZSwgJ3dyaXRhYmxlTGVuZ3RoJywge1xuICAvLyBtYWtpbmcgaXQgZXhwbGljaXQgdGhpcyBwcm9wZXJ0eSBpcyBub3QgZW51bWVyYWJsZVxuICAvLyBiZWNhdXNlIG90aGVyd2lzZSBzb21lIHByb3RvdHlwZSBtYW5pcHVsYXRpb24gaW5cbiAgLy8gdXNlcmxhbmQgd2lsbCBmYWlsXG4gIGVudW1lcmFibGU6IGZhbHNlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5sZW5ndGg7XG4gIH1cbn0pO1xuXG4vLyB0aGUgbm8taGFsZi1vcGVuIGVuZm9yY2VyXG5mdW5jdGlvbiBvbmVuZCgpIHtcbiAgLy8gSWYgdGhlIHdyaXRhYmxlIHNpZGUgZW5kZWQsIHRoZW4gd2UncmUgb2suXG4gIGlmICh0aGlzLl93cml0YWJsZVN0YXRlLmVuZGVkKSByZXR1cm47XG5cbiAgLy8gbm8gbW9yZSBkYXRhIGNhbiBiZSB3cml0dGVuLlxuICAvLyBCdXQgYWxsb3cgbW9yZSB3cml0ZXMgdG8gaGFwcGVuIGluIHRoaXMgdGljay5cbiAgcHJvY2Vzcy5uZXh0VGljayhvbkVuZE5ULCB0aGlzKTtcbn1cbmZ1bmN0aW9uIG9uRW5kTlQoc2VsZikge1xuICBzZWxmLmVuZCgpO1xufVxuT2JqZWN0LmRlZmluZVByb3BlcnR5KER1cGxleC5wcm90b3R5cGUsICdkZXN0cm95ZWQnLCB7XG4gIC8vIG1ha2luZyBpdCBleHBsaWNpdCB0aGlzIHByb3BlcnR5IGlzIG5vdCBlbnVtZXJhYmxlXG4gIC8vIGJlY2F1c2Ugb3RoZXJ3aXNlIHNvbWUgcHJvdG90eXBlIG1hbmlwdWxhdGlvbiBpblxuICAvLyB1c2VybGFuZCB3aWxsIGZhaWxcbiAgZW51bWVyYWJsZTogZmFsc2UsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIGlmICh0aGlzLl9yZWFkYWJsZVN0YXRlID09PSB1bmRlZmluZWQgfHwgdGhpcy5fd3JpdGFibGVTdGF0ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZCAmJiB0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZDtcbiAgfSxcbiAgc2V0OiBmdW5jdGlvbiBzZXQodmFsdWUpIHtcbiAgICAvLyB3ZSBpZ25vcmUgdGhlIHZhbHVlIGlmIHRoZSBzdHJlYW1cbiAgICAvLyBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQgeWV0XG4gICAgaWYgKHRoaXMuX3JlYWRhYmxlU3RhdGUgPT09IHVuZGVmaW5lZCB8fCB0aGlzLl93cml0YWJsZVN0YXRlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCB0aGUgdXNlciBpcyBleHBsaWNpdGx5XG4gICAgLy8gbWFuYWdpbmcgZGVzdHJveWVkXG4gICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQgPSB2YWx1ZTtcbiAgICB0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZCA9IHZhbHVlO1xuICB9XG59KTsiLCAiLyogZXNsaW50LWRpc2FibGUgbm9kZS9uby1kZXByZWNhdGVkLWFwaSAqL1xudmFyIGJ1ZmZlciA9IHJlcXVpcmUoJ2J1ZmZlcicpXG52YXIgQnVmZmVyID0gYnVmZmVyLkJ1ZmZlclxuXG4vLyBhbHRlcm5hdGl2ZSB0byB1c2luZyBPYmplY3Qua2V5cyBmb3Igb2xkIGJyb3dzZXJzXG5mdW5jdGlvbiBjb3B5UHJvcHMgKHNyYywgZHN0KSB7XG4gIGZvciAodmFyIGtleSBpbiBzcmMpIHtcbiAgICBkc3Rba2V5XSA9IHNyY1trZXldXG4gIH1cbn1cbmlmIChCdWZmZXIuZnJvbSAmJiBCdWZmZXIuYWxsb2MgJiYgQnVmZmVyLmFsbG9jVW5zYWZlICYmIEJ1ZmZlci5hbGxvY1Vuc2FmZVNsb3cpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBidWZmZXJcbn0gZWxzZSB7XG4gIC8vIENvcHkgcHJvcGVydGllcyBmcm9tIHJlcXVpcmUoJ2J1ZmZlcicpXG4gIGNvcHlQcm9wcyhidWZmZXIsIGV4cG9ydHMpXG4gIGV4cG9ydHMuQnVmZmVyID0gU2FmZUJ1ZmZlclxufVxuXG5mdW5jdGlvbiBTYWZlQnVmZmVyIChhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gQnVmZmVyKGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxufVxuXG4vLyBDb3B5IHN0YXRpYyBtZXRob2RzIGZyb20gQnVmZmVyXG5jb3B5UHJvcHMoQnVmZmVyLCBTYWZlQnVmZmVyKVxuXG5TYWZlQnVmZmVyLmZyb20gPSBmdW5jdGlvbiAoYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgaWYgKHR5cGVvZiBhcmcgPT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgbXVzdCBub3QgYmUgYSBudW1iZXInKVxuICB9XG4gIHJldHVybiBCdWZmZXIoYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG59XG5cblNhZmVCdWZmZXIuYWxsb2MgPSBmdW5jdGlvbiAoc2l6ZSwgZmlsbCwgZW5jb2RpbmcpIHtcbiAgaWYgKHR5cGVvZiBzaXplICE9PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IG11c3QgYmUgYSBudW1iZXInKVxuICB9XG4gIHZhciBidWYgPSBCdWZmZXIoc2l6ZSlcbiAgaWYgKGZpbGwgIT09IHVuZGVmaW5lZCkge1xuICAgIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09ICdzdHJpbmcnKSB7XG4gICAgICBidWYuZmlsbChmaWxsLCBlbmNvZGluZylcbiAgICB9IGVsc2Uge1xuICAgICAgYnVmLmZpbGwoZmlsbClcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgYnVmLmZpbGwoMClcbiAgfVxuICByZXR1cm4gYnVmXG59XG5cblNhZmVCdWZmZXIuYWxsb2NVbnNhZmUgPSBmdW5jdGlvbiAoc2l6ZSkge1xuICBpZiAodHlwZW9mIHNpemUgIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlcicpXG4gIH1cbiAgcmV0dXJuIEJ1ZmZlcihzaXplKVxufVxuXG5TYWZlQnVmZmVyLmFsbG9jVW5zYWZlU2xvdyA9IGZ1bmN0aW9uIChzaXplKSB7XG4gIGlmICh0eXBlb2Ygc2l6ZSAhPT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyJylcbiAgfVxuICByZXR1cm4gYnVmZmVyLlNsb3dCdWZmZXIoc2l6ZSlcbn1cbiIsICIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKjxyZXBsYWNlbWVudD4qL1xuXG52YXIgQnVmZmVyID0gcmVxdWlyZSgnc2FmZS1idWZmZXInKS5CdWZmZXI7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxudmFyIGlzRW5jb2RpbmcgPSBCdWZmZXIuaXNFbmNvZGluZyB8fCBmdW5jdGlvbiAoZW5jb2RpbmcpIHtcbiAgZW5jb2RpbmcgPSAnJyArIGVuY29kaW5nO1xuICBzd2l0Y2ggKGVuY29kaW5nICYmIGVuY29kaW5nLnRvTG93ZXJDYXNlKCkpIHtcbiAgICBjYXNlICdoZXgnOmNhc2UgJ3V0ZjgnOmNhc2UgJ3V0Zi04JzpjYXNlICdhc2NpaSc6Y2FzZSAnYmluYXJ5JzpjYXNlICdiYXNlNjQnOmNhc2UgJ3VjczInOmNhc2UgJ3Vjcy0yJzpjYXNlICd1dGYxNmxlJzpjYXNlICd1dGYtMTZsZSc6Y2FzZSAncmF3JzpcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIF9ub3JtYWxpemVFbmNvZGluZyhlbmMpIHtcbiAgaWYgKCFlbmMpIHJldHVybiAndXRmOCc7XG4gIHZhciByZXRyaWVkO1xuICB3aGlsZSAodHJ1ZSkge1xuICAgIHN3aXRjaCAoZW5jKSB7XG4gICAgICBjYXNlICd1dGY4JzpcbiAgICAgIGNhc2UgJ3V0Zi04JzpcbiAgICAgICAgcmV0dXJuICd1dGY4JztcbiAgICAgIGNhc2UgJ3VjczInOlxuICAgICAgY2FzZSAndWNzLTInOlxuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICAgIHJldHVybiAndXRmMTZsZSc7XG4gICAgICBjYXNlICdsYXRpbjEnOlxuICAgICAgY2FzZSAnYmluYXJ5JzpcbiAgICAgICAgcmV0dXJuICdsYXRpbjEnO1xuICAgICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgIGNhc2UgJ2FzY2lpJzpcbiAgICAgIGNhc2UgJ2hleCc6XG4gICAgICAgIHJldHVybiBlbmM7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAocmV0cmllZCkgcmV0dXJuOyAvLyB1bmRlZmluZWRcbiAgICAgICAgZW5jID0gKCcnICsgZW5jKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICByZXRyaWVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cbn07XG5cbi8vIERvIG5vdCBjYWNoZSBgQnVmZmVyLmlzRW5jb2RpbmdgIHdoZW4gY2hlY2tpbmcgZW5jb2RpbmcgbmFtZXMgYXMgc29tZVxuLy8gbW9kdWxlcyBtb25rZXktcGF0Y2ggaXQgdG8gc3VwcG9ydCBhZGRpdGlvbmFsIGVuY29kaW5nc1xuZnVuY3Rpb24gbm9ybWFsaXplRW5jb2RpbmcoZW5jKSB7XG4gIHZhciBuZW5jID0gX25vcm1hbGl6ZUVuY29kaW5nKGVuYyk7XG4gIGlmICh0eXBlb2YgbmVuYyAhPT0gJ3N0cmluZycgJiYgKEJ1ZmZlci5pc0VuY29kaW5nID09PSBpc0VuY29kaW5nIHx8ICFpc0VuY29kaW5nKGVuYykpKSB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmMpO1xuICByZXR1cm4gbmVuYyB8fCBlbmM7XG59XG5cbi8vIFN0cmluZ0RlY29kZXIgcHJvdmlkZXMgYW4gaW50ZXJmYWNlIGZvciBlZmZpY2llbnRseSBzcGxpdHRpbmcgYSBzZXJpZXMgb2Zcbi8vIGJ1ZmZlcnMgaW50byBhIHNlcmllcyBvZiBKUyBzdHJpbmdzIHdpdGhvdXQgYnJlYWtpbmcgYXBhcnQgbXVsdGktYnl0ZVxuLy8gY2hhcmFjdGVycy5cbmV4cG9ydHMuU3RyaW5nRGVjb2RlciA9IFN0cmluZ0RlY29kZXI7XG5mdW5jdGlvbiBTdHJpbmdEZWNvZGVyKGVuY29kaW5nKSB7XG4gIHRoaXMuZW5jb2RpbmcgPSBub3JtYWxpemVFbmNvZGluZyhlbmNvZGluZyk7XG4gIHZhciBuYjtcbiAgc3dpdGNoICh0aGlzLmVuY29kaW5nKSB7XG4gICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICB0aGlzLnRleHQgPSB1dGYxNlRleHQ7XG4gICAgICB0aGlzLmVuZCA9IHV0ZjE2RW5kO1xuICAgICAgbmIgPSA0O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAndXRmOCc6XG4gICAgICB0aGlzLmZpbGxMYXN0ID0gdXRmOEZpbGxMYXN0O1xuICAgICAgbmIgPSA0O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgIHRoaXMudGV4dCA9IGJhc2U2NFRleHQ7XG4gICAgICB0aGlzLmVuZCA9IGJhc2U2NEVuZDtcbiAgICAgIG5iID0gMztcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aGlzLndyaXRlID0gc2ltcGxlV3JpdGU7XG4gICAgICB0aGlzLmVuZCA9IHNpbXBsZUVuZDtcbiAgICAgIHJldHVybjtcbiAgfVxuICB0aGlzLmxhc3ROZWVkID0gMDtcbiAgdGhpcy5sYXN0VG90YWwgPSAwO1xuICB0aGlzLmxhc3RDaGFyID0gQnVmZmVyLmFsbG9jVW5zYWZlKG5iKTtcbn1cblxuU3RyaW5nRGVjb2Rlci5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbiAoYnVmKSB7XG4gIGlmIChidWYubGVuZ3RoID09PSAwKSByZXR1cm4gJyc7XG4gIHZhciByO1xuICB2YXIgaTtcbiAgaWYgKHRoaXMubGFzdE5lZWQpIHtcbiAgICByID0gdGhpcy5maWxsTGFzdChidWYpO1xuICAgIGlmIChyID09PSB1bmRlZmluZWQpIHJldHVybiAnJztcbiAgICBpID0gdGhpcy5sYXN0TmVlZDtcbiAgICB0aGlzLmxhc3ROZWVkID0gMDtcbiAgfSBlbHNlIHtcbiAgICBpID0gMDtcbiAgfVxuICBpZiAoaSA8IGJ1Zi5sZW5ndGgpIHJldHVybiByID8gciArIHRoaXMudGV4dChidWYsIGkpIDogdGhpcy50ZXh0KGJ1ZiwgaSk7XG4gIHJldHVybiByIHx8ICcnO1xufTtcblxuU3RyaW5nRGVjb2Rlci5wcm90b3R5cGUuZW5kID0gdXRmOEVuZDtcblxuLy8gUmV0dXJucyBvbmx5IGNvbXBsZXRlIGNoYXJhY3RlcnMgaW4gYSBCdWZmZXJcblN0cmluZ0RlY29kZXIucHJvdG90eXBlLnRleHQgPSB1dGY4VGV4dDtcblxuLy8gQXR0ZW1wdHMgdG8gY29tcGxldGUgYSBwYXJ0aWFsIG5vbi1VVEYtOCBjaGFyYWN0ZXIgdXNpbmcgYnl0ZXMgZnJvbSBhIEJ1ZmZlclxuU3RyaW5nRGVjb2Rlci5wcm90b3R5cGUuZmlsbExhc3QgPSBmdW5jdGlvbiAoYnVmKSB7XG4gIGlmICh0aGlzLmxhc3ROZWVkIDw9IGJ1Zi5sZW5ndGgpIHtcbiAgICBidWYuY29weSh0aGlzLmxhc3RDaGFyLCB0aGlzLmxhc3RUb3RhbCAtIHRoaXMubGFzdE5lZWQsIDAsIHRoaXMubGFzdE5lZWQpO1xuICAgIHJldHVybiB0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcsIDAsIHRoaXMubGFzdFRvdGFsKTtcbiAgfVxuICBidWYuY29weSh0aGlzLmxhc3RDaGFyLCB0aGlzLmxhc3RUb3RhbCAtIHRoaXMubGFzdE5lZWQsIDAsIGJ1Zi5sZW5ndGgpO1xuICB0aGlzLmxhc3ROZWVkIC09IGJ1Zi5sZW5ndGg7XG59O1xuXG4vLyBDaGVja3MgdGhlIHR5cGUgb2YgYSBVVEYtOCBieXRlLCB3aGV0aGVyIGl0J3MgQVNDSUksIGEgbGVhZGluZyBieXRlLCBvciBhXG4vLyBjb250aW51YXRpb24gYnl0ZS4gSWYgYW4gaW52YWxpZCBieXRlIGlzIGRldGVjdGVkLCAtMiBpcyByZXR1cm5lZC5cbmZ1bmN0aW9uIHV0ZjhDaGVja0J5dGUoYnl0ZSkge1xuICBpZiAoYnl0ZSA8PSAweDdGKSByZXR1cm4gMDtlbHNlIGlmIChieXRlID4+IDUgPT09IDB4MDYpIHJldHVybiAyO2Vsc2UgaWYgKGJ5dGUgPj4gNCA9PT0gMHgwRSkgcmV0dXJuIDM7ZWxzZSBpZiAoYnl0ZSA+PiAzID09PSAweDFFKSByZXR1cm4gNDtcbiAgcmV0dXJuIGJ5dGUgPj4gNiA9PT0gMHgwMiA/IC0xIDogLTI7XG59XG5cbi8vIENoZWNrcyBhdCBtb3N0IDMgYnl0ZXMgYXQgdGhlIGVuZCBvZiBhIEJ1ZmZlciBpbiBvcmRlciB0byBkZXRlY3QgYW5cbi8vIGluY29tcGxldGUgbXVsdGktYnl0ZSBVVEYtOCBjaGFyYWN0ZXIuIFRoZSB0b3RhbCBudW1iZXIgb2YgYnl0ZXMgKDIsIDMsIG9yIDQpXG4vLyBuZWVkZWQgdG8gY29tcGxldGUgdGhlIFVURi04IGNoYXJhY3RlciAoaWYgYXBwbGljYWJsZSkgYXJlIHJldHVybmVkLlxuZnVuY3Rpb24gdXRmOENoZWNrSW5jb21wbGV0ZShzZWxmLCBidWYsIGkpIHtcbiAgdmFyIGogPSBidWYubGVuZ3RoIC0gMTtcbiAgaWYgKGogPCBpKSByZXR1cm4gMDtcbiAgdmFyIG5iID0gdXRmOENoZWNrQnl0ZShidWZbal0pO1xuICBpZiAobmIgPj0gMCkge1xuICAgIGlmIChuYiA+IDApIHNlbGYubGFzdE5lZWQgPSBuYiAtIDE7XG4gICAgcmV0dXJuIG5iO1xuICB9XG4gIGlmICgtLWogPCBpIHx8IG5iID09PSAtMikgcmV0dXJuIDA7XG4gIG5iID0gdXRmOENoZWNrQnl0ZShidWZbal0pO1xuICBpZiAobmIgPj0gMCkge1xuICAgIGlmIChuYiA+IDApIHNlbGYubGFzdE5lZWQgPSBuYiAtIDI7XG4gICAgcmV0dXJuIG5iO1xuICB9XG4gIGlmICgtLWogPCBpIHx8IG5iID09PSAtMikgcmV0dXJuIDA7XG4gIG5iID0gdXRmOENoZWNrQnl0ZShidWZbal0pO1xuICBpZiAobmIgPj0gMCkge1xuICAgIGlmIChuYiA+IDApIHtcbiAgICAgIGlmIChuYiA9PT0gMikgbmIgPSAwO2Vsc2Ugc2VsZi5sYXN0TmVlZCA9IG5iIC0gMztcbiAgICB9XG4gICAgcmV0dXJuIG5iO1xuICB9XG4gIHJldHVybiAwO1xufVxuXG4vLyBWYWxpZGF0ZXMgYXMgbWFueSBjb250aW51YXRpb24gYnl0ZXMgZm9yIGEgbXVsdGktYnl0ZSBVVEYtOCBjaGFyYWN0ZXIgYXNcbi8vIG5lZWRlZCBvciBhcmUgYXZhaWxhYmxlLiBJZiB3ZSBzZWUgYSBub24tY29udGludWF0aW9uIGJ5dGUgd2hlcmUgd2UgZXhwZWN0XG4vLyBvbmUsIHdlIFwicmVwbGFjZVwiIHRoZSB2YWxpZGF0ZWQgY29udGludWF0aW9uIGJ5dGVzIHdlJ3ZlIHNlZW4gc28gZmFyIHdpdGhcbi8vIGEgc2luZ2xlIFVURi04IHJlcGxhY2VtZW50IGNoYXJhY3RlciAoJ1xcdWZmZmQnKSwgdG8gbWF0Y2ggdjgncyBVVEYtOCBkZWNvZGluZ1xuLy8gYmVoYXZpb3IuIFRoZSBjb250aW51YXRpb24gYnl0ZSBjaGVjayBpcyBpbmNsdWRlZCB0aHJlZSB0aW1lcyBpbiB0aGUgY2FzZVxuLy8gd2hlcmUgYWxsIG9mIHRoZSBjb250aW51YXRpb24gYnl0ZXMgZm9yIGEgY2hhcmFjdGVyIGV4aXN0IGluIHRoZSBzYW1lIGJ1ZmZlci5cbi8vIEl0IGlzIGFsc28gZG9uZSB0aGlzIHdheSBhcyBhIHNsaWdodCBwZXJmb3JtYW5jZSBpbmNyZWFzZSBpbnN0ZWFkIG9mIHVzaW5nIGFcbi8vIGxvb3AuXG5mdW5jdGlvbiB1dGY4Q2hlY2tFeHRyYUJ5dGVzKHNlbGYsIGJ1ZiwgcCkge1xuICBpZiAoKGJ1ZlswXSAmIDB4QzApICE9PSAweDgwKSB7XG4gICAgc2VsZi5sYXN0TmVlZCA9IDA7XG4gICAgcmV0dXJuICdcXHVmZmZkJztcbiAgfVxuICBpZiAoc2VsZi5sYXN0TmVlZCA+IDEgJiYgYnVmLmxlbmd0aCA+IDEpIHtcbiAgICBpZiAoKGJ1ZlsxXSAmIDB4QzApICE9PSAweDgwKSB7XG4gICAgICBzZWxmLmxhc3ROZWVkID0gMTtcbiAgICAgIHJldHVybiAnXFx1ZmZmZCc7XG4gICAgfVxuICAgIGlmIChzZWxmLmxhc3ROZWVkID4gMiAmJiBidWYubGVuZ3RoID4gMikge1xuICAgICAgaWYgKChidWZbMl0gJiAweEMwKSAhPT0gMHg4MCkge1xuICAgICAgICBzZWxmLmxhc3ROZWVkID0gMjtcbiAgICAgICAgcmV0dXJuICdcXHVmZmZkJztcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLy8gQXR0ZW1wdHMgdG8gY29tcGxldGUgYSBtdWx0aS1ieXRlIFVURi04IGNoYXJhY3RlciB1c2luZyBieXRlcyBmcm9tIGEgQnVmZmVyLlxuZnVuY3Rpb24gdXRmOEZpbGxMYXN0KGJ1Zikge1xuICB2YXIgcCA9IHRoaXMubGFzdFRvdGFsIC0gdGhpcy5sYXN0TmVlZDtcbiAgdmFyIHIgPSB1dGY4Q2hlY2tFeHRyYUJ5dGVzKHRoaXMsIGJ1ZiwgcCk7XG4gIGlmIChyICE9PSB1bmRlZmluZWQpIHJldHVybiByO1xuICBpZiAodGhpcy5sYXN0TmVlZCA8PSBidWYubGVuZ3RoKSB7XG4gICAgYnVmLmNvcHkodGhpcy5sYXN0Q2hhciwgcCwgMCwgdGhpcy5sYXN0TmVlZCk7XG4gICAgcmV0dXJuIHRoaXMubGFzdENoYXIudG9TdHJpbmcodGhpcy5lbmNvZGluZywgMCwgdGhpcy5sYXN0VG90YWwpO1xuICB9XG4gIGJ1Zi5jb3B5KHRoaXMubGFzdENoYXIsIHAsIDAsIGJ1Zi5sZW5ndGgpO1xuICB0aGlzLmxhc3ROZWVkIC09IGJ1Zi5sZW5ndGg7XG59XG5cbi8vIFJldHVybnMgYWxsIGNvbXBsZXRlIFVURi04IGNoYXJhY3RlcnMgaW4gYSBCdWZmZXIuIElmIHRoZSBCdWZmZXIgZW5kZWQgb24gYVxuLy8gcGFydGlhbCBjaGFyYWN0ZXIsIHRoZSBjaGFyYWN0ZXIncyBieXRlcyBhcmUgYnVmZmVyZWQgdW50aWwgdGhlIHJlcXVpcmVkXG4vLyBudW1iZXIgb2YgYnl0ZXMgYXJlIGF2YWlsYWJsZS5cbmZ1bmN0aW9uIHV0ZjhUZXh0KGJ1ZiwgaSkge1xuICB2YXIgdG90YWwgPSB1dGY4Q2hlY2tJbmNvbXBsZXRlKHRoaXMsIGJ1ZiwgaSk7XG4gIGlmICghdGhpcy5sYXN0TmVlZCkgcmV0dXJuIGJ1Zi50b1N0cmluZygndXRmOCcsIGkpO1xuICB0aGlzLmxhc3RUb3RhbCA9IHRvdGFsO1xuICB2YXIgZW5kID0gYnVmLmxlbmd0aCAtICh0b3RhbCAtIHRoaXMubGFzdE5lZWQpO1xuICBidWYuY29weSh0aGlzLmxhc3RDaGFyLCAwLCBlbmQpO1xuICByZXR1cm4gYnVmLnRvU3RyaW5nKCd1dGY4JywgaSwgZW5kKTtcbn1cblxuLy8gRm9yIFVURi04LCBhIHJlcGxhY2VtZW50IGNoYXJhY3RlciBpcyBhZGRlZCB3aGVuIGVuZGluZyBvbiBhIHBhcnRpYWxcbi8vIGNoYXJhY3Rlci5cbmZ1bmN0aW9uIHV0ZjhFbmQoYnVmKSB7XG4gIHZhciByID0gYnVmICYmIGJ1Zi5sZW5ndGggPyB0aGlzLndyaXRlKGJ1ZikgOiAnJztcbiAgaWYgKHRoaXMubGFzdE5lZWQpIHJldHVybiByICsgJ1xcdWZmZmQnO1xuICByZXR1cm4gcjtcbn1cblxuLy8gVVRGLTE2TEUgdHlwaWNhbGx5IG5lZWRzIHR3byBieXRlcyBwZXIgY2hhcmFjdGVyLCBidXQgZXZlbiBpZiB3ZSBoYXZlIGFuIGV2ZW5cbi8vIG51bWJlciBvZiBieXRlcyBhdmFpbGFibGUsIHdlIG5lZWQgdG8gY2hlY2sgaWYgd2UgZW5kIG9uIGEgbGVhZGluZy9oaWdoXG4vLyBzdXJyb2dhdGUuIEluIHRoYXQgY2FzZSwgd2UgbmVlZCB0byB3YWl0IGZvciB0aGUgbmV4dCB0d28gYnl0ZXMgaW4gb3JkZXIgdG9cbi8vIGRlY29kZSB0aGUgbGFzdCBjaGFyYWN0ZXIgcHJvcGVybHkuXG5mdW5jdGlvbiB1dGYxNlRleHQoYnVmLCBpKSB7XG4gIGlmICgoYnVmLmxlbmd0aCAtIGkpICUgMiA9PT0gMCkge1xuICAgIHZhciByID0gYnVmLnRvU3RyaW5nKCd1dGYxNmxlJywgaSk7XG4gICAgaWYgKHIpIHtcbiAgICAgIHZhciBjID0gci5jaGFyQ29kZUF0KHIubGVuZ3RoIC0gMSk7XG4gICAgICBpZiAoYyA+PSAweEQ4MDAgJiYgYyA8PSAweERCRkYpIHtcbiAgICAgICAgdGhpcy5sYXN0TmVlZCA9IDI7XG4gICAgICAgIHRoaXMubGFzdFRvdGFsID0gNDtcbiAgICAgICAgdGhpcy5sYXN0Q2hhclswXSA9IGJ1ZltidWYubGVuZ3RoIC0gMl07XG4gICAgICAgIHRoaXMubGFzdENoYXJbMV0gPSBidWZbYnVmLmxlbmd0aCAtIDFdO1xuICAgICAgICByZXR1cm4gci5zbGljZSgwLCAtMSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByO1xuICB9XG4gIHRoaXMubGFzdE5lZWQgPSAxO1xuICB0aGlzLmxhc3RUb3RhbCA9IDI7XG4gIHRoaXMubGFzdENoYXJbMF0gPSBidWZbYnVmLmxlbmd0aCAtIDFdO1xuICByZXR1cm4gYnVmLnRvU3RyaW5nKCd1dGYxNmxlJywgaSwgYnVmLmxlbmd0aCAtIDEpO1xufVxuXG4vLyBGb3IgVVRGLTE2TEUgd2UgZG8gbm90IGV4cGxpY2l0bHkgYXBwZW5kIHNwZWNpYWwgcmVwbGFjZW1lbnQgY2hhcmFjdGVycyBpZiB3ZVxuLy8gZW5kIG9uIGEgcGFydGlhbCBjaGFyYWN0ZXIsIHdlIHNpbXBseSBsZXQgdjggaGFuZGxlIHRoYXQuXG5mdW5jdGlvbiB1dGYxNkVuZChidWYpIHtcbiAgdmFyIHIgPSBidWYgJiYgYnVmLmxlbmd0aCA/IHRoaXMud3JpdGUoYnVmKSA6ICcnO1xuICBpZiAodGhpcy5sYXN0TmVlZCkge1xuICAgIHZhciBlbmQgPSB0aGlzLmxhc3RUb3RhbCAtIHRoaXMubGFzdE5lZWQ7XG4gICAgcmV0dXJuIHIgKyB0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKCd1dGYxNmxlJywgMCwgZW5kKTtcbiAgfVxuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gYmFzZTY0VGV4dChidWYsIGkpIHtcbiAgdmFyIG4gPSAoYnVmLmxlbmd0aCAtIGkpICUgMztcbiAgaWYgKG4gPT09IDApIHJldHVybiBidWYudG9TdHJpbmcoJ2Jhc2U2NCcsIGkpO1xuICB0aGlzLmxhc3ROZWVkID0gMyAtIG47XG4gIHRoaXMubGFzdFRvdGFsID0gMztcbiAgaWYgKG4gPT09IDEpIHtcbiAgICB0aGlzLmxhc3RDaGFyWzBdID0gYnVmW2J1Zi5sZW5ndGggLSAxXTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLmxhc3RDaGFyWzBdID0gYnVmW2J1Zi5sZW5ndGggLSAyXTtcbiAgICB0aGlzLmxhc3RDaGFyWzFdID0gYnVmW2J1Zi5sZW5ndGggLSAxXTtcbiAgfVxuICByZXR1cm4gYnVmLnRvU3RyaW5nKCdiYXNlNjQnLCBpLCBidWYubGVuZ3RoIC0gbik7XG59XG5cbmZ1bmN0aW9uIGJhc2U2NEVuZChidWYpIHtcbiAgdmFyIHIgPSBidWYgJiYgYnVmLmxlbmd0aCA/IHRoaXMud3JpdGUoYnVmKSA6ICcnO1xuICBpZiAodGhpcy5sYXN0TmVlZCkgcmV0dXJuIHIgKyB0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKCdiYXNlNjQnLCAwLCAzIC0gdGhpcy5sYXN0TmVlZCk7XG4gIHJldHVybiByO1xufVxuXG4vLyBQYXNzIGJ5dGVzIG9uIHRocm91Z2ggZm9yIHNpbmdsZS1ieXRlIGVuY29kaW5ncyAoZS5nLiBhc2NpaSwgbGF0aW4xLCBoZXgpXG5mdW5jdGlvbiBzaW1wbGVXcml0ZShidWYpIHtcbiAgcmV0dXJuIGJ1Zi50b1N0cmluZyh0aGlzLmVuY29kaW5nKTtcbn1cblxuZnVuY3Rpb24gc2ltcGxlRW5kKGJ1Zikge1xuICByZXR1cm4gYnVmICYmIGJ1Zi5sZW5ndGggPyB0aGlzLndyaXRlKGJ1ZikgOiAnJztcbn0iLCAiLy8gUG9ydGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL21hZmludG9zaC9lbmQtb2Ytc3RyZWFtIHdpdGhcbi8vIHBlcm1pc3Npb24gZnJvbSB0aGUgYXV0aG9yLCBNYXRoaWFzIEJ1dXMgKEBtYWZpbnRvc2gpLlxuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBFUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRSA9IHJlcXVpcmUoJy4uLy4uLy4uL2Vycm9ycycpLmNvZGVzLkVSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFO1xuZnVuY3Rpb24gb25jZShjYWxsYmFjaykge1xuICB2YXIgY2FsbGVkID0gZmFsc2U7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGNhbGxlZCkgcmV0dXJuO1xuICAgIGNhbGxlZCA9IHRydWU7XG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cbiAgICBjYWxsYmFjay5hcHBseSh0aGlzLCBhcmdzKTtcbiAgfTtcbn1cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuZnVuY3Rpb24gaXNSZXF1ZXN0KHN0cmVhbSkge1xuICByZXR1cm4gc3RyZWFtLnNldEhlYWRlciAmJiB0eXBlb2Ygc3RyZWFtLmFib3J0ID09PSAnZnVuY3Rpb24nO1xufVxuZnVuY3Rpb24gZW9zKHN0cmVhbSwgb3B0cywgY2FsbGJhY2spIHtcbiAgaWYgKHR5cGVvZiBvcHRzID09PSAnZnVuY3Rpb24nKSByZXR1cm4gZW9zKHN0cmVhbSwgbnVsbCwgb3B0cyk7XG4gIGlmICghb3B0cykgb3B0cyA9IHt9O1xuICBjYWxsYmFjayA9IG9uY2UoY2FsbGJhY2sgfHwgbm9vcCk7XG4gIHZhciByZWFkYWJsZSA9IG9wdHMucmVhZGFibGUgfHwgb3B0cy5yZWFkYWJsZSAhPT0gZmFsc2UgJiYgc3RyZWFtLnJlYWRhYmxlO1xuICB2YXIgd3JpdGFibGUgPSBvcHRzLndyaXRhYmxlIHx8IG9wdHMud3JpdGFibGUgIT09IGZhbHNlICYmIHN0cmVhbS53cml0YWJsZTtcbiAgdmFyIG9ubGVnYWN5ZmluaXNoID0gZnVuY3Rpb24gb25sZWdhY3lmaW5pc2goKSB7XG4gICAgaWYgKCFzdHJlYW0ud3JpdGFibGUpIG9uZmluaXNoKCk7XG4gIH07XG4gIHZhciB3cml0YWJsZUVuZGVkID0gc3RyZWFtLl93cml0YWJsZVN0YXRlICYmIHN0cmVhbS5fd3JpdGFibGVTdGF0ZS5maW5pc2hlZDtcbiAgdmFyIG9uZmluaXNoID0gZnVuY3Rpb24gb25maW5pc2goKSB7XG4gICAgd3JpdGFibGUgPSBmYWxzZTtcbiAgICB3cml0YWJsZUVuZGVkID0gdHJ1ZTtcbiAgICBpZiAoIXJlYWRhYmxlKSBjYWxsYmFjay5jYWxsKHN0cmVhbSk7XG4gIH07XG4gIHZhciByZWFkYWJsZUVuZGVkID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlICYmIHN0cmVhbS5fcmVhZGFibGVTdGF0ZS5lbmRFbWl0dGVkO1xuICB2YXIgb25lbmQgPSBmdW5jdGlvbiBvbmVuZCgpIHtcbiAgICByZWFkYWJsZSA9IGZhbHNlO1xuICAgIHJlYWRhYmxlRW5kZWQgPSB0cnVlO1xuICAgIGlmICghd3JpdGFibGUpIGNhbGxiYWNrLmNhbGwoc3RyZWFtKTtcbiAgfTtcbiAgdmFyIG9uZXJyb3IgPSBmdW5jdGlvbiBvbmVycm9yKGVycikge1xuICAgIGNhbGxiYWNrLmNhbGwoc3RyZWFtLCBlcnIpO1xuICB9O1xuICB2YXIgb25jbG9zZSA9IGZ1bmN0aW9uIG9uY2xvc2UoKSB7XG4gICAgdmFyIGVycjtcbiAgICBpZiAocmVhZGFibGUgJiYgIXJlYWRhYmxlRW5kZWQpIHtcbiAgICAgIGlmICghc3RyZWFtLl9yZWFkYWJsZVN0YXRlIHx8ICFzdHJlYW0uX3JlYWRhYmxlU3RhdGUuZW5kZWQpIGVyciA9IG5ldyBFUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRSgpO1xuICAgICAgcmV0dXJuIGNhbGxiYWNrLmNhbGwoc3RyZWFtLCBlcnIpO1xuICAgIH1cbiAgICBpZiAod3JpdGFibGUgJiYgIXdyaXRhYmxlRW5kZWQpIHtcbiAgICAgIGlmICghc3RyZWFtLl93cml0YWJsZVN0YXRlIHx8ICFzdHJlYW0uX3dyaXRhYmxlU3RhdGUuZW5kZWQpIGVyciA9IG5ldyBFUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRSgpO1xuICAgICAgcmV0dXJuIGNhbGxiYWNrLmNhbGwoc3RyZWFtLCBlcnIpO1xuICAgIH1cbiAgfTtcbiAgdmFyIG9ucmVxdWVzdCA9IGZ1bmN0aW9uIG9ucmVxdWVzdCgpIHtcbiAgICBzdHJlYW0ucmVxLm9uKCdmaW5pc2gnLCBvbmZpbmlzaCk7XG4gIH07XG4gIGlmIChpc1JlcXVlc3Qoc3RyZWFtKSkge1xuICAgIHN0cmVhbS5vbignY29tcGxldGUnLCBvbmZpbmlzaCk7XG4gICAgc3RyZWFtLm9uKCdhYm9ydCcsIG9uY2xvc2UpO1xuICAgIGlmIChzdHJlYW0ucmVxKSBvbnJlcXVlc3QoKTtlbHNlIHN0cmVhbS5vbigncmVxdWVzdCcsIG9ucmVxdWVzdCk7XG4gIH0gZWxzZSBpZiAod3JpdGFibGUgJiYgIXN0cmVhbS5fd3JpdGFibGVTdGF0ZSkge1xuICAgIC8vIGxlZ2FjeSBzdHJlYW1zXG4gICAgc3RyZWFtLm9uKCdlbmQnLCBvbmxlZ2FjeWZpbmlzaCk7XG4gICAgc3RyZWFtLm9uKCdjbG9zZScsIG9ubGVnYWN5ZmluaXNoKTtcbiAgfVxuICBzdHJlYW0ub24oJ2VuZCcsIG9uZW5kKTtcbiAgc3RyZWFtLm9uKCdmaW5pc2gnLCBvbmZpbmlzaCk7XG4gIGlmIChvcHRzLmVycm9yICE9PSBmYWxzZSkgc3RyZWFtLm9uKCdlcnJvcicsIG9uZXJyb3IpO1xuICBzdHJlYW0ub24oJ2Nsb3NlJywgb25jbG9zZSk7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgc3RyZWFtLnJlbW92ZUxpc3RlbmVyKCdjb21wbGV0ZScsIG9uZmluaXNoKTtcbiAgICBzdHJlYW0ucmVtb3ZlTGlzdGVuZXIoJ2Fib3J0Jywgb25jbG9zZSk7XG4gICAgc3RyZWFtLnJlbW92ZUxpc3RlbmVyKCdyZXF1ZXN0Jywgb25yZXF1ZXN0KTtcbiAgICBpZiAoc3RyZWFtLnJlcSkgc3RyZWFtLnJlcS5yZW1vdmVMaXN0ZW5lcignZmluaXNoJywgb25maW5pc2gpO1xuICAgIHN0cmVhbS5yZW1vdmVMaXN0ZW5lcignZW5kJywgb25sZWdhY3lmaW5pc2gpO1xuICAgIHN0cmVhbS5yZW1vdmVMaXN0ZW5lcignY2xvc2UnLCBvbmxlZ2FjeWZpbmlzaCk7XG4gICAgc3RyZWFtLnJlbW92ZUxpc3RlbmVyKCdmaW5pc2gnLCBvbmZpbmlzaCk7XG4gICAgc3RyZWFtLnJlbW92ZUxpc3RlbmVyKCdlbmQnLCBvbmVuZCk7XG4gICAgc3RyZWFtLnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uZXJyb3IpO1xuICAgIHN0cmVhbS5yZW1vdmVMaXN0ZW5lcignY2xvc2UnLCBvbmNsb3NlKTtcbiAgfTtcbn1cbm1vZHVsZS5leHBvcnRzID0gZW9zOyIsICIndXNlIHN0cmljdCc7XG5cbnZhciBfT2JqZWN0JHNldFByb3RvdHlwZU87XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGtleSA9IF90b1Byb3BlcnR5S2V5KGtleSk7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkoYXJnKSB7IHZhciBrZXkgPSBfdG9QcmltaXRpdmUoYXJnLCBcInN0cmluZ1wiKTsgcmV0dXJuIHR5cGVvZiBrZXkgPT09IFwic3ltYm9sXCIgPyBrZXkgOiBTdHJpbmcoa2V5KTsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKGlucHV0LCBoaW50KSB7IGlmICh0eXBlb2YgaW5wdXQgIT09IFwib2JqZWN0XCIgfHwgaW5wdXQgPT09IG51bGwpIHJldHVybiBpbnB1dDsgdmFyIHByaW0gPSBpbnB1dFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAocHJpbSAhPT0gdW5kZWZpbmVkKSB7IHZhciByZXMgPSBwcmltLmNhbGwoaW5wdXQsIGhpbnQgfHwgXCJkZWZhdWx0XCIpOyBpZiAodHlwZW9mIHJlcyAhPT0gXCJvYmplY3RcIikgcmV0dXJuIHJlczsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoaGludCA9PT0gXCJzdHJpbmdcIiA/IFN0cmluZyA6IE51bWJlcikoaW5wdXQpOyB9XG52YXIgZmluaXNoZWQgPSByZXF1aXJlKCcuL2VuZC1vZi1zdHJlYW0nKTtcbnZhciBrTGFzdFJlc29sdmUgPSBTeW1ib2woJ2xhc3RSZXNvbHZlJyk7XG52YXIga0xhc3RSZWplY3QgPSBTeW1ib2woJ2xhc3RSZWplY3QnKTtcbnZhciBrRXJyb3IgPSBTeW1ib2woJ2Vycm9yJyk7XG52YXIga0VuZGVkID0gU3ltYm9sKCdlbmRlZCcpO1xudmFyIGtMYXN0UHJvbWlzZSA9IFN5bWJvbCgnbGFzdFByb21pc2UnKTtcbnZhciBrSGFuZGxlUHJvbWlzZSA9IFN5bWJvbCgnaGFuZGxlUHJvbWlzZScpO1xudmFyIGtTdHJlYW0gPSBTeW1ib2woJ3N0cmVhbScpO1xuZnVuY3Rpb24gY3JlYXRlSXRlclJlc3VsdCh2YWx1ZSwgZG9uZSkge1xuICByZXR1cm4ge1xuICAgIHZhbHVlOiB2YWx1ZSxcbiAgICBkb25lOiBkb25lXG4gIH07XG59XG5mdW5jdGlvbiByZWFkQW5kUmVzb2x2ZShpdGVyKSB7XG4gIHZhciByZXNvbHZlID0gaXRlcltrTGFzdFJlc29sdmVdO1xuICBpZiAocmVzb2x2ZSAhPT0gbnVsbCkge1xuICAgIHZhciBkYXRhID0gaXRlcltrU3RyZWFtXS5yZWFkKCk7XG4gICAgLy8gd2UgZGVmZXIgaWYgZGF0YSBpcyBudWxsXG4gICAgLy8gd2UgY2FuIGJlIGV4cGVjdGluZyBlaXRoZXIgJ2VuZCcgb3JcbiAgICAvLyAnZXJyb3InXG4gICAgaWYgKGRhdGEgIT09IG51bGwpIHtcbiAgICAgIGl0ZXJba0xhc3RQcm9taXNlXSA9IG51bGw7XG4gICAgICBpdGVyW2tMYXN0UmVzb2x2ZV0gPSBudWxsO1xuICAgICAgaXRlcltrTGFzdFJlamVjdF0gPSBudWxsO1xuICAgICAgcmVzb2x2ZShjcmVhdGVJdGVyUmVzdWx0KGRhdGEsIGZhbHNlKSk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBvblJlYWRhYmxlKGl0ZXIpIHtcbiAgLy8gd2Ugd2FpdCBmb3IgdGhlIG5leHQgdGljaywgYmVjYXVzZSBpdCBtaWdodFxuICAvLyBlbWl0IGFuIGVycm9yIHdpdGggcHJvY2Vzcy5uZXh0VGlja1xuICBwcm9jZXNzLm5leHRUaWNrKHJlYWRBbmRSZXNvbHZlLCBpdGVyKTtcbn1cbmZ1bmN0aW9uIHdyYXBGb3JOZXh0KGxhc3RQcm9taXNlLCBpdGVyKSB7XG4gIHJldHVybiBmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgbGFzdFByb21pc2UudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoaXRlcltrRW5kZWRdKSB7XG4gICAgICAgIHJlc29sdmUoY3JlYXRlSXRlclJlc3VsdCh1bmRlZmluZWQsIHRydWUpKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaXRlcltrSGFuZGxlUHJvbWlzZV0ocmVzb2x2ZSwgcmVqZWN0KTtcbiAgICB9LCByZWplY3QpO1xuICB9O1xufVxudmFyIEFzeW5jSXRlcmF0b3JQcm90b3R5cGUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoZnVuY3Rpb24gKCkge30pO1xudmFyIFJlYWRhYmxlU3RyZWFtQXN5bmNJdGVyYXRvclByb3RvdHlwZSA9IE9iamVjdC5zZXRQcm90b3R5cGVPZigoX09iamVjdCRzZXRQcm90b3R5cGVPID0ge1xuICBnZXQgc3RyZWFtKCkge1xuICAgIHJldHVybiB0aGlzW2tTdHJlYW1dO1xuICB9LFxuICBuZXh0OiBmdW5jdGlvbiBuZXh0KCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgLy8gaWYgd2UgaGF2ZSBkZXRlY3RlZCBhbiBlcnJvciBpbiB0aGUgbWVhbndoaWxlXG4gICAgLy8gcmVqZWN0IHN0cmFpZ2h0IGF3YXlcbiAgICB2YXIgZXJyb3IgPSB0aGlzW2tFcnJvcl07XG4gICAgaWYgKGVycm9yICE9PSBudWxsKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuICAgIH1cbiAgICBpZiAodGhpc1trRW5kZWRdKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGNyZWF0ZUl0ZXJSZXN1bHQodW5kZWZpbmVkLCB0cnVlKSk7XG4gICAgfVxuICAgIGlmICh0aGlzW2tTdHJlYW1dLmRlc3Ryb3llZCkge1xuICAgICAgLy8gV2UgbmVlZCB0byBkZWZlciB2aWEgbmV4dFRpY2sgYmVjYXVzZSBpZiAuZGVzdHJveShlcnIpIGlzXG4gICAgICAvLyBjYWxsZWQsIHRoZSBlcnJvciB3aWxsIGJlIGVtaXR0ZWQgdmlhIG5leHRUaWNrLCBhbmRcbiAgICAgIC8vIHdlIGNhbm5vdCBndWFyYW50ZWUgdGhhdCB0aGVyZSBpcyBubyBlcnJvciBsaW5nZXJpbmcgYXJvdW5kXG4gICAgICAvLyB3YWl0aW5nIHRvIGJlIGVtaXR0ZWQuXG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAoX3RoaXNba0Vycm9yXSkge1xuICAgICAgICAgICAgcmVqZWN0KF90aGlzW2tFcnJvcl0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXNvbHZlKGNyZWF0ZUl0ZXJSZXN1bHQodW5kZWZpbmVkLCB0cnVlKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIGlmIHdlIGhhdmUgbXVsdGlwbGUgbmV4dCgpIGNhbGxzXG4gICAgLy8gd2Ugd2lsbCB3YWl0IGZvciB0aGUgcHJldmlvdXMgUHJvbWlzZSB0byBmaW5pc2hcbiAgICAvLyB0aGlzIGxvZ2ljIGlzIG9wdGltaXplZCB0byBzdXBwb3J0IGZvciBhd2FpdCBsb29wcyxcbiAgICAvLyB3aGVyZSBuZXh0KCkgaXMgb25seSBjYWxsZWQgb25jZSBhdCBhIHRpbWVcbiAgICB2YXIgbGFzdFByb21pc2UgPSB0aGlzW2tMYXN0UHJvbWlzZV07XG4gICAgdmFyIHByb21pc2U7XG4gICAgaWYgKGxhc3RQcm9taXNlKSB7XG4gICAgICBwcm9taXNlID0gbmV3IFByb21pc2Uod3JhcEZvck5leHQobGFzdFByb21pc2UsIHRoaXMpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZmFzdCBwYXRoIG5lZWRlZCB0byBzdXBwb3J0IG11bHRpcGxlIHRoaXMucHVzaCgpXG4gICAgICAvLyB3aXRob3V0IHRyaWdnZXJpbmcgdGhlIG5leHQoKSBxdWV1ZVxuICAgICAgdmFyIGRhdGEgPSB0aGlzW2tTdHJlYW1dLnJlYWQoKTtcbiAgICAgIGlmIChkYXRhICE9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoY3JlYXRlSXRlclJlc3VsdChkYXRhLCBmYWxzZSkpO1xuICAgICAgfVxuICAgICAgcHJvbWlzZSA9IG5ldyBQcm9taXNlKHRoaXNba0hhbmRsZVByb21pc2VdKTtcbiAgICB9XG4gICAgdGhpc1trTGFzdFByb21pc2VdID0gcHJvbWlzZTtcbiAgICByZXR1cm4gcHJvbWlzZTtcbiAgfVxufSwgX2RlZmluZVByb3BlcnR5KF9PYmplY3Qkc2V0UHJvdG90eXBlTywgU3ltYm9sLmFzeW5jSXRlcmF0b3IsIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXM7XG59KSwgX2RlZmluZVByb3BlcnR5KF9PYmplY3Qkc2V0UHJvdG90eXBlTywgXCJyZXR1cm5cIiwgZnVuY3Rpb24gX3JldHVybigpIHtcbiAgdmFyIF90aGlzMiA9IHRoaXM7XG4gIC8vIGRlc3Ryb3koZXJyLCBjYikgaXMgYSBwcml2YXRlIEFQSVxuICAvLyB3ZSBjYW4gZ3VhcmFudGVlIHdlIGhhdmUgdGhhdCBoZXJlLCBiZWNhdXNlIHdlIGNvbnRyb2wgdGhlXG4gIC8vIFJlYWRhYmxlIGNsYXNzIHRoaXMgaXMgYXR0YWNoZWQgdG9cbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICBfdGhpczJba1N0cmVhbV0uZGVzdHJveShudWxsLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICByZXNvbHZlKGNyZWF0ZUl0ZXJSZXN1bHQodW5kZWZpbmVkLCB0cnVlKSk7XG4gICAgfSk7XG4gIH0pO1xufSksIF9PYmplY3Qkc2V0UHJvdG90eXBlTyksIEFzeW5jSXRlcmF0b3JQcm90b3R5cGUpO1xudmFyIGNyZWF0ZVJlYWRhYmxlU3RyZWFtQXN5bmNJdGVyYXRvciA9IGZ1bmN0aW9uIGNyZWF0ZVJlYWRhYmxlU3RyZWFtQXN5bmNJdGVyYXRvcihzdHJlYW0pIHtcbiAgdmFyIF9PYmplY3QkY3JlYXRlO1xuICB2YXIgaXRlcmF0b3IgPSBPYmplY3QuY3JlYXRlKFJlYWRhYmxlU3RyZWFtQXN5bmNJdGVyYXRvclByb3RvdHlwZSwgKF9PYmplY3QkY3JlYXRlID0ge30sIF9kZWZpbmVQcm9wZXJ0eShfT2JqZWN0JGNyZWF0ZSwga1N0cmVhbSwge1xuICAgIHZhbHVlOiBzdHJlYW0sXG4gICAgd3JpdGFibGU6IHRydWVcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfT2JqZWN0JGNyZWF0ZSwga0xhc3RSZXNvbHZlLCB7XG4gICAgdmFsdWU6IG51bGwsXG4gICAgd3JpdGFibGU6IHRydWVcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfT2JqZWN0JGNyZWF0ZSwga0xhc3RSZWplY3QsIHtcbiAgICB2YWx1ZTogbnVsbCxcbiAgICB3cml0YWJsZTogdHJ1ZVxuICB9KSwgX2RlZmluZVByb3BlcnR5KF9PYmplY3QkY3JlYXRlLCBrRXJyb3IsIHtcbiAgICB2YWx1ZTogbnVsbCxcbiAgICB3cml0YWJsZTogdHJ1ZVxuICB9KSwgX2RlZmluZVByb3BlcnR5KF9PYmplY3QkY3JlYXRlLCBrRW5kZWQsIHtcbiAgICB2YWx1ZTogc3RyZWFtLl9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWQsXG4gICAgd3JpdGFibGU6IHRydWVcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfT2JqZWN0JGNyZWF0ZSwga0hhbmRsZVByb21pc2UsIHtcbiAgICB2YWx1ZTogZnVuY3Rpb24gdmFsdWUocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB2YXIgZGF0YSA9IGl0ZXJhdG9yW2tTdHJlYW1dLnJlYWQoKTtcbiAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgIGl0ZXJhdG9yW2tMYXN0UHJvbWlzZV0gPSBudWxsO1xuICAgICAgICBpdGVyYXRvcltrTGFzdFJlc29sdmVdID0gbnVsbDtcbiAgICAgICAgaXRlcmF0b3Jba0xhc3RSZWplY3RdID0gbnVsbDtcbiAgICAgICAgcmVzb2x2ZShjcmVhdGVJdGVyUmVzdWx0KGRhdGEsIGZhbHNlKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpdGVyYXRvcltrTGFzdFJlc29sdmVdID0gcmVzb2x2ZTtcbiAgICAgICAgaXRlcmF0b3Jba0xhc3RSZWplY3RdID0gcmVqZWN0O1xuICAgICAgfVxuICAgIH0sXG4gICAgd3JpdGFibGU6IHRydWVcbiAgfSksIF9PYmplY3QkY3JlYXRlKSk7XG4gIGl0ZXJhdG9yW2tMYXN0UHJvbWlzZV0gPSBudWxsO1xuICBmaW5pc2hlZChzdHJlYW0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICBpZiAoZXJyICYmIGVyci5jb2RlICE9PSAnRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0UnKSB7XG4gICAgICB2YXIgcmVqZWN0ID0gaXRlcmF0b3Jba0xhc3RSZWplY3RdO1xuICAgICAgLy8gcmVqZWN0IGlmIHdlIGFyZSB3YWl0aW5nIGZvciBkYXRhIGluIHRoZSBQcm9taXNlXG4gICAgICAvLyByZXR1cm5lZCBieSBuZXh0KCkgYW5kIHN0b3JlIHRoZSBlcnJvclxuICAgICAgaWYgKHJlamVjdCAhPT0gbnVsbCkge1xuICAgICAgICBpdGVyYXRvcltrTGFzdFByb21pc2VdID0gbnVsbDtcbiAgICAgICAgaXRlcmF0b3Jba0xhc3RSZXNvbHZlXSA9IG51bGw7XG4gICAgICAgIGl0ZXJhdG9yW2tMYXN0UmVqZWN0XSA9IG51bGw7XG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgfVxuICAgICAgaXRlcmF0b3Jba0Vycm9yXSA9IGVycjtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHJlc29sdmUgPSBpdGVyYXRvcltrTGFzdFJlc29sdmVdO1xuICAgIGlmIChyZXNvbHZlICE9PSBudWxsKSB7XG4gICAgICBpdGVyYXRvcltrTGFzdFByb21pc2VdID0gbnVsbDtcbiAgICAgIGl0ZXJhdG9yW2tMYXN0UmVzb2x2ZV0gPSBudWxsO1xuICAgICAgaXRlcmF0b3Jba0xhc3RSZWplY3RdID0gbnVsbDtcbiAgICAgIHJlc29sdmUoY3JlYXRlSXRlclJlc3VsdCh1bmRlZmluZWQsIHRydWUpKTtcbiAgICB9XG4gICAgaXRlcmF0b3Jba0VuZGVkXSA9IHRydWU7XG4gIH0pO1xuICBzdHJlYW0ub24oJ3JlYWRhYmxlJywgb25SZWFkYWJsZS5iaW5kKG51bGwsIGl0ZXJhdG9yKSk7XG4gIHJldHVybiBpdGVyYXRvcjtcbn07XG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZVJlYWRhYmxlU3RyZWFtQXN5bmNJdGVyYXRvcjsiLCAiJ3VzZSBzdHJpY3QnO1xuXG5mdW5jdGlvbiBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIGtleSwgYXJnKSB7IHRyeSB7IHZhciBpbmZvID0gZ2VuW2tleV0oYXJnKTsgdmFyIHZhbHVlID0gaW5mby52YWx1ZTsgfSBjYXRjaCAoZXJyb3IpIHsgcmVqZWN0KGVycm9yKTsgcmV0dXJuOyB9IGlmIChpbmZvLmRvbmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0gZWxzZSB7IFByb21pc2UucmVzb2x2ZSh2YWx1ZSkudGhlbihfbmV4dCwgX3Rocm93KTsgfSB9XG5mdW5jdGlvbiBfYXN5bmNUb0dlbmVyYXRvcihmbikgeyByZXR1cm4gZnVuY3Rpb24gKCkgeyB2YXIgc2VsZiA9IHRoaXMsIGFyZ3MgPSBhcmd1bWVudHM7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7IHZhciBnZW4gPSBmbi5hcHBseShzZWxmLCBhcmdzKTsgZnVuY3Rpb24gX25leHQodmFsdWUpIHsgYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBcIm5leHRcIiwgdmFsdWUpOyB9IGZ1bmN0aW9uIF90aHJvdyhlcnIpIHsgYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBcInRocm93XCIsIGVycik7IH0gX25leHQodW5kZWZpbmVkKTsgfSk7IH07IH1cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBlbnVtZXJhYmxlT25seSAmJiAoc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pKSwga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gbnVsbCAhPSBhcmd1bWVudHNbaV0gPyBhcmd1bWVudHNbaV0gOiB7fTsgaSAlIDIgPyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKSA6IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gcmV0dXJuIHRhcmdldDsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBrZXkgPSBfdG9Qcm9wZXJ0eUtleShrZXkpOyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KGFyZykgeyB2YXIga2V5ID0gX3RvUHJpbWl0aXZlKGFyZywgXCJzdHJpbmdcIik7IHJldHVybiB0eXBlb2Yga2V5ID09PSBcInN5bWJvbFwiID8ga2V5IDogU3RyaW5nKGtleSk7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZShpbnB1dCwgaGludCkgeyBpZiAodHlwZW9mIGlucHV0ICE9PSBcIm9iamVjdFwiIHx8IGlucHV0ID09PSBudWxsKSByZXR1cm4gaW5wdXQ7IHZhciBwcmltID0gaW5wdXRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHByaW0gIT09IHVuZGVmaW5lZCkgeyB2YXIgcmVzID0gcHJpbS5jYWxsKGlucHV0LCBoaW50IHx8IFwiZGVmYXVsdFwiKTsgaWYgKHR5cGVvZiByZXMgIT09IFwib2JqZWN0XCIpIHJldHVybiByZXM7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKGhpbnQgPT09IFwic3RyaW5nXCIgPyBTdHJpbmcgOiBOdW1iZXIpKGlucHV0KTsgfVxudmFyIEVSUl9JTlZBTElEX0FSR19UWVBFID0gcmVxdWlyZSgnLi4vLi4vLi4vZXJyb3JzJykuY29kZXMuRVJSX0lOVkFMSURfQVJHX1RZUEU7XG5mdW5jdGlvbiBmcm9tKFJlYWRhYmxlLCBpdGVyYWJsZSwgb3B0cykge1xuICB2YXIgaXRlcmF0b3I7XG4gIGlmIChpdGVyYWJsZSAmJiB0eXBlb2YgaXRlcmFibGUubmV4dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGl0ZXJhdG9yID0gaXRlcmFibGU7XG4gIH0gZWxzZSBpZiAoaXRlcmFibGUgJiYgaXRlcmFibGVbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKSBpdGVyYXRvciA9IGl0ZXJhYmxlW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpO2Vsc2UgaWYgKGl0ZXJhYmxlICYmIGl0ZXJhYmxlW1N5bWJvbC5pdGVyYXRvcl0pIGl0ZXJhdG9yID0gaXRlcmFibGVbU3ltYm9sLml0ZXJhdG9yXSgpO2Vsc2UgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19UWVBFKCdpdGVyYWJsZScsIFsnSXRlcmFibGUnXSwgaXRlcmFibGUpO1xuICB2YXIgcmVhZGFibGUgPSBuZXcgUmVhZGFibGUoX29iamVjdFNwcmVhZCh7XG4gICAgb2JqZWN0TW9kZTogdHJ1ZVxuICB9LCBvcHRzKSk7XG4gIC8vIFJlYWRpbmcgYm9vbGVhbiB0byBwcm90ZWN0IGFnYWluc3QgX3JlYWRcbiAgLy8gYmVpbmcgY2FsbGVkIGJlZm9yZSBsYXN0IGl0ZXJhdGlvbiBjb21wbGV0aW9uLlxuICB2YXIgcmVhZGluZyA9IGZhbHNlO1xuICByZWFkYWJsZS5fcmVhZCA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIXJlYWRpbmcpIHtcbiAgICAgIHJlYWRpbmcgPSB0cnVlO1xuICAgICAgbmV4dCgpO1xuICAgIH1cbiAgfTtcbiAgZnVuY3Rpb24gbmV4dCgpIHtcbiAgICByZXR1cm4gX25leHQyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cbiAgZnVuY3Rpb24gX25leHQyKCkge1xuICAgIF9uZXh0MiA9IF9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKiAoKSB7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgX3lpZWxkJGl0ZXJhdG9yJG5leHQgPSB5aWVsZCBpdGVyYXRvci5uZXh0KCksXG4gICAgICAgICAgdmFsdWUgPSBfeWllbGQkaXRlcmF0b3IkbmV4dC52YWx1ZSxcbiAgICAgICAgICBkb25lID0gX3lpZWxkJGl0ZXJhdG9yJG5leHQuZG9uZTtcbiAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICByZWFkYWJsZS5wdXNoKG51bGwpO1xuICAgICAgICB9IGVsc2UgaWYgKHJlYWRhYmxlLnB1c2goeWllbGQgdmFsdWUpKSB7XG4gICAgICAgICAgbmV4dCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHJlYWRhYmxlLmRlc3Ryb3koZXJyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gX25leHQyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cbiAgcmV0dXJuIHJlYWRhYmxlO1xufVxubW9kdWxlLmV4cG9ydHMgPSBmcm9tO1xuIiwgIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4ndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhZGFibGU7XG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgRHVwbGV4O1xuLyo8L3JlcGxhY2VtZW50PiovXG5cblJlYWRhYmxlLlJlYWRhYmxlU3RhdGUgPSBSZWFkYWJsZVN0YXRlO1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIEVFID0gcmVxdWlyZSgnZXZlbnRzJykuRXZlbnRFbWl0dGVyO1xudmFyIEVFbGlzdGVuZXJDb3VudCA9IGZ1bmN0aW9uIEVFbGlzdGVuZXJDb3VudChlbWl0dGVyLCB0eXBlKSB7XG4gIHJldHVybiBlbWl0dGVyLmxpc3RlbmVycyh0eXBlKS5sZW5ndGg7XG59O1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgU3RyZWFtID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9zdHJlYW1zL3N0cmVhbScpO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbnZhciBCdWZmZXIgPSByZXF1aXJlKCdidWZmZXInKS5CdWZmZXI7XG52YXIgT3VyVWludDhBcnJheSA9ICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJyA/IGdsb2JhbCA6IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93IDogdHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnID8gc2VsZiA6IHt9KS5VaW50OEFycmF5IHx8IGZ1bmN0aW9uICgpIHt9O1xuZnVuY3Rpb24gX3VpbnQ4QXJyYXlUb0J1ZmZlcihjaHVuaykge1xuICByZXR1cm4gQnVmZmVyLmZyb20oY2h1bmspO1xufVxuZnVuY3Rpb24gX2lzVWludDhBcnJheShvYmopIHtcbiAgcmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcihvYmopIHx8IG9iaiBpbnN0YW5jZW9mIE91clVpbnQ4QXJyYXk7XG59XG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgZGVidWdVdGlsID0gcmVxdWlyZSgndXRpbCcpO1xudmFyIGRlYnVnO1xuaWYgKGRlYnVnVXRpbCAmJiBkZWJ1Z1V0aWwuZGVidWdsb2cpIHtcbiAgZGVidWcgPSBkZWJ1Z1V0aWwuZGVidWdsb2coJ3N0cmVhbScpO1xufSBlbHNlIHtcbiAgZGVidWcgPSBmdW5jdGlvbiBkZWJ1ZygpIHt9O1xufVxuLyo8L3JlcGxhY2VtZW50PiovXG5cbnZhciBCdWZmZXJMaXN0ID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9zdHJlYW1zL2J1ZmZlcl9saXN0Jyk7XG52YXIgZGVzdHJveUltcGwgPSByZXF1aXJlKCcuL2ludGVybmFsL3N0cmVhbXMvZGVzdHJveScpO1xudmFyIF9yZXF1aXJlID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9zdHJlYW1zL3N0YXRlJyksXG4gIGdldEhpZ2hXYXRlck1hcmsgPSBfcmVxdWlyZS5nZXRIaWdoV2F0ZXJNYXJrO1xudmFyIF9yZXF1aXJlJGNvZGVzID0gcmVxdWlyZSgnLi4vZXJyb3JzJykuY29kZXMsXG4gIEVSUl9JTlZBTElEX0FSR19UWVBFID0gX3JlcXVpcmUkY29kZXMuRVJSX0lOVkFMSURfQVJHX1RZUEUsXG4gIEVSUl9TVFJFQU1fUFVTSF9BRlRFUl9FT0YgPSBfcmVxdWlyZSRjb2Rlcy5FUlJfU1RSRUFNX1BVU0hfQUZURVJfRU9GLFxuICBFUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCA9IF9yZXF1aXJlJGNvZGVzLkVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVELFxuICBFUlJfU1RSRUFNX1VOU0hJRlRfQUZURVJfRU5EX0VWRU5UID0gX3JlcXVpcmUkY29kZXMuRVJSX1NUUkVBTV9VTlNISUZUX0FGVEVSX0VORF9FVkVOVDtcblxuLy8gTGF6eSBsb2FkZWQgdG8gaW1wcm92ZSB0aGUgc3RhcnR1cCBwZXJmb3JtYW5jZS5cbnZhciBTdHJpbmdEZWNvZGVyO1xudmFyIGNyZWF0ZVJlYWRhYmxlU3RyZWFtQXN5bmNJdGVyYXRvcjtcbnZhciBmcm9tO1xucmVxdWlyZSgnaW5oZXJpdHMnKShSZWFkYWJsZSwgU3RyZWFtKTtcbnZhciBlcnJvck9yRGVzdHJveSA9IGRlc3Ryb3lJbXBsLmVycm9yT3JEZXN0cm95O1xudmFyIGtQcm94eUV2ZW50cyA9IFsnZXJyb3InLCAnY2xvc2UnLCAnZGVzdHJveScsICdwYXVzZScsICdyZXN1bWUnXTtcbmZ1bmN0aW9uIHByZXBlbmRMaXN0ZW5lcihlbWl0dGVyLCBldmVudCwgZm4pIHtcbiAgLy8gU2FkbHkgdGhpcyBpcyBub3QgY2FjaGVhYmxlIGFzIHNvbWUgbGlicmFyaWVzIGJ1bmRsZSB0aGVpciBvd25cbiAgLy8gZXZlbnQgZW1pdHRlciBpbXBsZW1lbnRhdGlvbiB3aXRoIHRoZW0uXG4gIGlmICh0eXBlb2YgZW1pdHRlci5wcmVwZW5kTGlzdGVuZXIgPT09ICdmdW5jdGlvbicpIHJldHVybiBlbWl0dGVyLnByZXBlbmRMaXN0ZW5lcihldmVudCwgZm4pO1xuXG4gIC8vIFRoaXMgaXMgYSBoYWNrIHRvIG1ha2Ugc3VyZSB0aGF0IG91ciBlcnJvciBoYW5kbGVyIGlzIGF0dGFjaGVkIGJlZm9yZSBhbnlcbiAgLy8gdXNlcmxhbmQgb25lcy4gIE5FVkVSIERPIFRISVMuIFRoaXMgaXMgaGVyZSBvbmx5IGJlY2F1c2UgdGhpcyBjb2RlIG5lZWRzXG4gIC8vIHRvIGNvbnRpbnVlIHRvIHdvcmsgd2l0aCBvbGRlciB2ZXJzaW9ucyBvZiBOb2RlLmpzIHRoYXQgZG8gbm90IGluY2x1ZGVcbiAgLy8gdGhlIHByZXBlbmRMaXN0ZW5lcigpIG1ldGhvZC4gVGhlIGdvYWwgaXMgdG8gZXZlbnR1YWxseSByZW1vdmUgdGhpcyBoYWNrLlxuICBpZiAoIWVtaXR0ZXIuX2V2ZW50cyB8fCAhZW1pdHRlci5fZXZlbnRzW2V2ZW50XSkgZW1pdHRlci5vbihldmVudCwgZm4pO2Vsc2UgaWYgKEFycmF5LmlzQXJyYXkoZW1pdHRlci5fZXZlbnRzW2V2ZW50XSkpIGVtaXR0ZXIuX2V2ZW50c1tldmVudF0udW5zaGlmdChmbik7ZWxzZSBlbWl0dGVyLl9ldmVudHNbZXZlbnRdID0gW2ZuLCBlbWl0dGVyLl9ldmVudHNbZXZlbnRdXTtcbn1cbmZ1bmN0aW9uIFJlYWRhYmxlU3RhdGUob3B0aW9ucywgc3RyZWFtLCBpc0R1cGxleCkge1xuICBEdXBsZXggPSBEdXBsZXggfHwgcmVxdWlyZSgnLi9fc3RyZWFtX2R1cGxleCcpO1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAvLyBEdXBsZXggc3RyZWFtcyBhcmUgYm90aCByZWFkYWJsZSBhbmQgd3JpdGFibGUsIGJ1dCBzaGFyZVxuICAvLyB0aGUgc2FtZSBvcHRpb25zIG9iamVjdC5cbiAgLy8gSG93ZXZlciwgc29tZSBjYXNlcyByZXF1aXJlIHNldHRpbmcgb3B0aW9ucyB0byBkaWZmZXJlbnRcbiAgLy8gdmFsdWVzIGZvciB0aGUgcmVhZGFibGUgYW5kIHRoZSB3cml0YWJsZSBzaWRlcyBvZiB0aGUgZHVwbGV4IHN0cmVhbS5cbiAgLy8gVGhlc2Ugb3B0aW9ucyBjYW4gYmUgcHJvdmlkZWQgc2VwYXJhdGVseSBhcyByZWFkYWJsZVhYWCBhbmQgd3JpdGFibGVYWFguXG4gIGlmICh0eXBlb2YgaXNEdXBsZXggIT09ICdib29sZWFuJykgaXNEdXBsZXggPSBzdHJlYW0gaW5zdGFuY2VvZiBEdXBsZXg7XG5cbiAgLy8gb2JqZWN0IHN0cmVhbSBmbGFnLiBVc2VkIHRvIG1ha2UgcmVhZChuKSBpZ25vcmUgbiBhbmQgdG9cbiAgLy8gbWFrZSBhbGwgdGhlIGJ1ZmZlciBtZXJnaW5nIGFuZCBsZW5ndGggY2hlY2tzIGdvIGF3YXlcbiAgdGhpcy5vYmplY3RNb2RlID0gISFvcHRpb25zLm9iamVjdE1vZGU7XG4gIGlmIChpc0R1cGxleCkgdGhpcy5vYmplY3RNb2RlID0gdGhpcy5vYmplY3RNb2RlIHx8ICEhb3B0aW9ucy5yZWFkYWJsZU9iamVjdE1vZGU7XG5cbiAgLy8gdGhlIHBvaW50IGF0IHdoaWNoIGl0IHN0b3BzIGNhbGxpbmcgX3JlYWQoKSB0byBmaWxsIHRoZSBidWZmZXJcbiAgLy8gTm90ZTogMCBpcyBhIHZhbGlkIHZhbHVlLCBtZWFucyBcImRvbid0IGNhbGwgX3JlYWQgcHJlZW1wdGl2ZWx5IGV2ZXJcIlxuICB0aGlzLmhpZ2hXYXRlck1hcmsgPSBnZXRIaWdoV2F0ZXJNYXJrKHRoaXMsIG9wdGlvbnMsICdyZWFkYWJsZUhpZ2hXYXRlck1hcmsnLCBpc0R1cGxleCk7XG5cbiAgLy8gQSBsaW5rZWQgbGlzdCBpcyB1c2VkIHRvIHN0b3JlIGRhdGEgY2h1bmtzIGluc3RlYWQgb2YgYW4gYXJyYXkgYmVjYXVzZSB0aGVcbiAgLy8gbGlua2VkIGxpc3QgY2FuIHJlbW92ZSBlbGVtZW50cyBmcm9tIHRoZSBiZWdpbm5pbmcgZmFzdGVyIHRoYW5cbiAgLy8gYXJyYXkuc2hpZnQoKVxuICB0aGlzLmJ1ZmZlciA9IG5ldyBCdWZmZXJMaXN0KCk7XG4gIHRoaXMubGVuZ3RoID0gMDtcbiAgdGhpcy5waXBlcyA9IG51bGw7XG4gIHRoaXMucGlwZXNDb3VudCA9IDA7XG4gIHRoaXMuZmxvd2luZyA9IG51bGw7XG4gIHRoaXMuZW5kZWQgPSBmYWxzZTtcbiAgdGhpcy5lbmRFbWl0dGVkID0gZmFsc2U7XG4gIHRoaXMucmVhZGluZyA9IGZhbHNlO1xuXG4gIC8vIGEgZmxhZyB0byBiZSBhYmxlIHRvIHRlbGwgaWYgdGhlIGV2ZW50ICdyZWFkYWJsZScvJ2RhdGEnIGlzIGVtaXR0ZWRcbiAgLy8gaW1tZWRpYXRlbHksIG9yIG9uIGEgbGF0ZXIgdGljay4gIFdlIHNldCB0aGlzIHRvIHRydWUgYXQgZmlyc3QsIGJlY2F1c2VcbiAgLy8gYW55IGFjdGlvbnMgdGhhdCBzaG91bGRuJ3QgaGFwcGVuIHVudGlsIFwibGF0ZXJcIiBzaG91bGQgZ2VuZXJhbGx5IGFsc29cbiAgLy8gbm90IGhhcHBlbiBiZWZvcmUgdGhlIGZpcnN0IHJlYWQgY2FsbC5cbiAgdGhpcy5zeW5jID0gdHJ1ZTtcblxuICAvLyB3aGVuZXZlciB3ZSByZXR1cm4gbnVsbCwgdGhlbiB3ZSBzZXQgYSBmbGFnIHRvIHNheVxuICAvLyB0aGF0IHdlJ3JlIGF3YWl0aW5nIGEgJ3JlYWRhYmxlJyBldmVudCBlbWlzc2lvbi5cbiAgdGhpcy5uZWVkUmVhZGFibGUgPSBmYWxzZTtcbiAgdGhpcy5lbWl0dGVkUmVhZGFibGUgPSBmYWxzZTtcbiAgdGhpcy5yZWFkYWJsZUxpc3RlbmluZyA9IGZhbHNlO1xuICB0aGlzLnJlc3VtZVNjaGVkdWxlZCA9IGZhbHNlO1xuICB0aGlzLnBhdXNlZCA9IHRydWU7XG5cbiAgLy8gU2hvdWxkIGNsb3NlIGJlIGVtaXR0ZWQgb24gZGVzdHJveS4gRGVmYXVsdHMgdG8gdHJ1ZS5cbiAgdGhpcy5lbWl0Q2xvc2UgPSBvcHRpb25zLmVtaXRDbG9zZSAhPT0gZmFsc2U7XG5cbiAgLy8gU2hvdWxkIC5kZXN0cm95KCkgYmUgY2FsbGVkIGFmdGVyICdlbmQnIChhbmQgcG90ZW50aWFsbHkgJ2ZpbmlzaCcpXG4gIHRoaXMuYXV0b0Rlc3Ryb3kgPSAhIW9wdGlvbnMuYXV0b0Rlc3Ryb3k7XG5cbiAgLy8gaGFzIGl0IGJlZW4gZGVzdHJveWVkXG4gIHRoaXMuZGVzdHJveWVkID0gZmFsc2U7XG5cbiAgLy8gQ3J5cHRvIGlzIGtpbmQgb2Ygb2xkIGFuZCBjcnVzdHkuICBIaXN0b3JpY2FsbHksIGl0cyBkZWZhdWx0IHN0cmluZ1xuICAvLyBlbmNvZGluZyBpcyAnYmluYXJ5JyBzbyB3ZSBoYXZlIHRvIG1ha2UgdGhpcyBjb25maWd1cmFibGUuXG4gIC8vIEV2ZXJ5dGhpbmcgZWxzZSBpbiB0aGUgdW5pdmVyc2UgdXNlcyAndXRmOCcsIHRob3VnaC5cbiAgdGhpcy5kZWZhdWx0RW5jb2RpbmcgPSBvcHRpb25zLmRlZmF1bHRFbmNvZGluZyB8fCAndXRmOCc7XG5cbiAgLy8gdGhlIG51bWJlciBvZiB3cml0ZXJzIHRoYXQgYXJlIGF3YWl0aW5nIGEgZHJhaW4gZXZlbnQgaW4gLnBpcGUoKXNcbiAgdGhpcy5hd2FpdERyYWluID0gMDtcblxuICAvLyBpZiB0cnVlLCBhIG1heWJlUmVhZE1vcmUgaGFzIGJlZW4gc2NoZWR1bGVkXG4gIHRoaXMucmVhZGluZ01vcmUgPSBmYWxzZTtcbiAgdGhpcy5kZWNvZGVyID0gbnVsbDtcbiAgdGhpcy5lbmNvZGluZyA9IG51bGw7XG4gIGlmIChvcHRpb25zLmVuY29kaW5nKSB7XG4gICAgaWYgKCFTdHJpbmdEZWNvZGVyKSBTdHJpbmdEZWNvZGVyID0gcmVxdWlyZSgnc3RyaW5nX2RlY29kZXIvJykuU3RyaW5nRGVjb2RlcjtcbiAgICB0aGlzLmRlY29kZXIgPSBuZXcgU3RyaW5nRGVjb2RlcihvcHRpb25zLmVuY29kaW5nKTtcbiAgICB0aGlzLmVuY29kaW5nID0gb3B0aW9ucy5lbmNvZGluZztcbiAgfVxufVxuZnVuY3Rpb24gUmVhZGFibGUob3B0aW9ucykge1xuICBEdXBsZXggPSBEdXBsZXggfHwgcmVxdWlyZSgnLi9fc3RyZWFtX2R1cGxleCcpO1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUmVhZGFibGUpKSByZXR1cm4gbmV3IFJlYWRhYmxlKG9wdGlvbnMpO1xuXG4gIC8vIENoZWNraW5nIGZvciBhIFN0cmVhbS5EdXBsZXggaW5zdGFuY2UgaXMgZmFzdGVyIGhlcmUgaW5zdGVhZCBvZiBpbnNpZGVcbiAgLy8gdGhlIFJlYWRhYmxlU3RhdGUgY29uc3RydWN0b3IsIGF0IGxlYXN0IHdpdGggVjggNi41XG4gIHZhciBpc0R1cGxleCA9IHRoaXMgaW5zdGFuY2VvZiBEdXBsZXg7XG4gIHRoaXMuX3JlYWRhYmxlU3RhdGUgPSBuZXcgUmVhZGFibGVTdGF0ZShvcHRpb25zLCB0aGlzLCBpc0R1cGxleCk7XG5cbiAgLy8gbGVnYWN5XG4gIHRoaXMucmVhZGFibGUgPSB0cnVlO1xuICBpZiAob3B0aW9ucykge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5yZWFkID09PSAnZnVuY3Rpb24nKSB0aGlzLl9yZWFkID0gb3B0aW9ucy5yZWFkO1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5kZXN0cm95ID09PSAnZnVuY3Rpb24nKSB0aGlzLl9kZXN0cm95ID0gb3B0aW9ucy5kZXN0cm95O1xuICB9XG4gIFN0cmVhbS5jYWxsKHRoaXMpO1xufVxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlYWRhYmxlLnByb3RvdHlwZSwgJ2Rlc3Ryb3llZCcsIHtcbiAgLy8gbWFraW5nIGl0IGV4cGxpY2l0IHRoaXMgcHJvcGVydHkgaXMgbm90IGVudW1lcmFibGVcbiAgLy8gYmVjYXVzZSBvdGhlcndpc2Ugc29tZSBwcm90b3R5cGUgbWFuaXB1bGF0aW9uIGluXG4gIC8vIHVzZXJsYW5kIHdpbGwgZmFpbFxuICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgaWYgKHRoaXMuX3JlYWRhYmxlU3RhdGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ7XG4gIH0sXG4gIHNldDogZnVuY3Rpb24gc2V0KHZhbHVlKSB7XG4gICAgLy8gd2UgaWdub3JlIHRoZSB2YWx1ZSBpZiB0aGUgc3RyZWFtXG4gICAgLy8gaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkIHlldFxuICAgIGlmICghdGhpcy5fcmVhZGFibGVTdGF0ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIHRoZSB1c2VyIGlzIGV4cGxpY2l0bHlcbiAgICAvLyBtYW5hZ2luZyBkZXN0cm95ZWRcbiAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZCA9IHZhbHVlO1xuICB9XG59KTtcblJlYWRhYmxlLnByb3RvdHlwZS5kZXN0cm95ID0gZGVzdHJveUltcGwuZGVzdHJveTtcblJlYWRhYmxlLnByb3RvdHlwZS5fdW5kZXN0cm95ID0gZGVzdHJveUltcGwudW5kZXN0cm95O1xuUmVhZGFibGUucHJvdG90eXBlLl9kZXN0cm95ID0gZnVuY3Rpb24gKGVyciwgY2IpIHtcbiAgY2IoZXJyKTtcbn07XG5cbi8vIE1hbnVhbGx5IHNob3ZlIHNvbWV0aGluZyBpbnRvIHRoZSByZWFkKCkgYnVmZmVyLlxuLy8gVGhpcyByZXR1cm5zIHRydWUgaWYgdGhlIGhpZ2hXYXRlck1hcmsgaGFzIG5vdCBiZWVuIGhpdCB5ZXQsXG4vLyBzaW1pbGFyIHRvIGhvdyBXcml0YWJsZS53cml0ZSgpIHJldHVybnMgdHJ1ZSBpZiB5b3Ugc2hvdWxkXG4vLyB3cml0ZSgpIHNvbWUgbW9yZS5cblJlYWRhYmxlLnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZykge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9yZWFkYWJsZVN0YXRlO1xuICB2YXIgc2tpcENodW5rQ2hlY2s7XG4gIGlmICghc3RhdGUub2JqZWN0TW9kZSkge1xuICAgIGlmICh0eXBlb2YgY2h1bmsgPT09ICdzdHJpbmcnKSB7XG4gICAgICBlbmNvZGluZyA9IGVuY29kaW5nIHx8IHN0YXRlLmRlZmF1bHRFbmNvZGluZztcbiAgICAgIGlmIChlbmNvZGluZyAhPT0gc3RhdGUuZW5jb2RpbmcpIHtcbiAgICAgICAgY2h1bmsgPSBCdWZmZXIuZnJvbShjaHVuaywgZW5jb2RpbmcpO1xuICAgICAgICBlbmNvZGluZyA9ICcnO1xuICAgICAgfVxuICAgICAgc2tpcENodW5rQ2hlY2sgPSB0cnVlO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBza2lwQ2h1bmtDaGVjayA9IHRydWU7XG4gIH1cbiAgcmV0dXJuIHJlYWRhYmxlQWRkQ2h1bmsodGhpcywgY2h1bmssIGVuY29kaW5nLCBmYWxzZSwgc2tpcENodW5rQ2hlY2spO1xufTtcblxuLy8gVW5zaGlmdCBzaG91bGQgKmFsd2F5cyogYmUgc29tZXRoaW5nIGRpcmVjdGx5IG91dCBvZiByZWFkKClcblJlYWRhYmxlLnByb3RvdHlwZS51bnNoaWZ0ID0gZnVuY3Rpb24gKGNodW5rKSB7XG4gIHJldHVybiByZWFkYWJsZUFkZENodW5rKHRoaXMsIGNodW5rLCBudWxsLCB0cnVlLCBmYWxzZSk7XG59O1xuZnVuY3Rpb24gcmVhZGFibGVBZGRDaHVuayhzdHJlYW0sIGNodW5rLCBlbmNvZGluZywgYWRkVG9Gcm9udCwgc2tpcENodW5rQ2hlY2spIHtcbiAgZGVidWcoJ3JlYWRhYmxlQWRkQ2h1bmsnLCBjaHVuayk7XG4gIHZhciBzdGF0ZSA9IHN0cmVhbS5fcmVhZGFibGVTdGF0ZTtcbiAgaWYgKGNodW5rID09PSBudWxsKSB7XG4gICAgc3RhdGUucmVhZGluZyA9IGZhbHNlO1xuICAgIG9uRW9mQ2h1bmsoc3RyZWFtLCBzdGF0ZSk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGVyO1xuICAgIGlmICghc2tpcENodW5rQ2hlY2spIGVyID0gY2h1bmtJbnZhbGlkKHN0YXRlLCBjaHVuayk7XG4gICAgaWYgKGVyKSB7XG4gICAgICBlcnJvck9yRGVzdHJveShzdHJlYW0sIGVyKTtcbiAgICB9IGVsc2UgaWYgKHN0YXRlLm9iamVjdE1vZGUgfHwgY2h1bmsgJiYgY2h1bmsubGVuZ3RoID4gMCkge1xuICAgICAgaWYgKHR5cGVvZiBjaHVuayAhPT0gJ3N0cmluZycgJiYgIXN0YXRlLm9iamVjdE1vZGUgJiYgT2JqZWN0LmdldFByb3RvdHlwZU9mKGNodW5rKSAhPT0gQnVmZmVyLnByb3RvdHlwZSkge1xuICAgICAgICBjaHVuayA9IF91aW50OEFycmF5VG9CdWZmZXIoY2h1bmspO1xuICAgICAgfVxuICAgICAgaWYgKGFkZFRvRnJvbnQpIHtcbiAgICAgICAgaWYgKHN0YXRlLmVuZEVtaXR0ZWQpIGVycm9yT3JEZXN0cm95KHN0cmVhbSwgbmV3IEVSUl9TVFJFQU1fVU5TSElGVF9BRlRFUl9FTkRfRVZFTlQoKSk7ZWxzZSBhZGRDaHVuayhzdHJlYW0sIHN0YXRlLCBjaHVuaywgdHJ1ZSk7XG4gICAgICB9IGVsc2UgaWYgKHN0YXRlLmVuZGVkKSB7XG4gICAgICAgIGVycm9yT3JEZXN0cm95KHN0cmVhbSwgbmV3IEVSUl9TVFJFQU1fUFVTSF9BRlRFUl9FT0YoKSk7XG4gICAgICB9IGVsc2UgaWYgKHN0YXRlLmRlc3Ryb3llZCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGF0ZS5yZWFkaW5nID0gZmFsc2U7XG4gICAgICAgIGlmIChzdGF0ZS5kZWNvZGVyICYmICFlbmNvZGluZykge1xuICAgICAgICAgIGNodW5rID0gc3RhdGUuZGVjb2Rlci53cml0ZShjaHVuayk7XG4gICAgICAgICAgaWYgKHN0YXRlLm9iamVjdE1vZGUgfHwgY2h1bmsubGVuZ3RoICE9PSAwKSBhZGRDaHVuayhzdHJlYW0sIHN0YXRlLCBjaHVuaywgZmFsc2UpO2Vsc2UgbWF5YmVSZWFkTW9yZShzdHJlYW0sIHN0YXRlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhZGRDaHVuayhzdHJlYW0sIHN0YXRlLCBjaHVuaywgZmFsc2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghYWRkVG9Gcm9udCkge1xuICAgICAgc3RhdGUucmVhZGluZyA9IGZhbHNlO1xuICAgICAgbWF5YmVSZWFkTW9yZShzdHJlYW0sIHN0YXRlKTtcbiAgICB9XG4gIH1cblxuICAvLyBXZSBjYW4gcHVzaCBtb3JlIGRhdGEgaWYgd2UgYXJlIGJlbG93IHRoZSBoaWdoV2F0ZXJNYXJrLlxuICAvLyBBbHNvLCBpZiB3ZSBoYXZlIG5vIGRhdGEgeWV0LCB3ZSBjYW4gc3RhbmQgc29tZSBtb3JlIGJ5dGVzLlxuICAvLyBUaGlzIGlzIHRvIHdvcmsgYXJvdW5kIGNhc2VzIHdoZXJlIGh3bT0wLCBzdWNoIGFzIHRoZSByZXBsLlxuICByZXR1cm4gIXN0YXRlLmVuZGVkICYmIChzdGF0ZS5sZW5ndGggPCBzdGF0ZS5oaWdoV2F0ZXJNYXJrIHx8IHN0YXRlLmxlbmd0aCA9PT0gMCk7XG59XG5mdW5jdGlvbiBhZGRDaHVuayhzdHJlYW0sIHN0YXRlLCBjaHVuaywgYWRkVG9Gcm9udCkge1xuICBpZiAoc3RhdGUuZmxvd2luZyAmJiBzdGF0ZS5sZW5ndGggPT09IDAgJiYgIXN0YXRlLnN5bmMpIHtcbiAgICBzdGF0ZS5hd2FpdERyYWluID0gMDtcbiAgICBzdHJlYW0uZW1pdCgnZGF0YScsIGNodW5rKTtcbiAgfSBlbHNlIHtcbiAgICAvLyB1cGRhdGUgdGhlIGJ1ZmZlciBpbmZvLlxuICAgIHN0YXRlLmxlbmd0aCArPSBzdGF0ZS5vYmplY3RNb2RlID8gMSA6IGNodW5rLmxlbmd0aDtcbiAgICBpZiAoYWRkVG9Gcm9udCkgc3RhdGUuYnVmZmVyLnVuc2hpZnQoY2h1bmspO2Vsc2Ugc3RhdGUuYnVmZmVyLnB1c2goY2h1bmspO1xuICAgIGlmIChzdGF0ZS5uZWVkUmVhZGFibGUpIGVtaXRSZWFkYWJsZShzdHJlYW0pO1xuICB9XG4gIG1heWJlUmVhZE1vcmUoc3RyZWFtLCBzdGF0ZSk7XG59XG5mdW5jdGlvbiBjaHVua0ludmFsaWQoc3RhdGUsIGNodW5rKSB7XG4gIHZhciBlcjtcbiAgaWYgKCFfaXNVaW50OEFycmF5KGNodW5rKSAmJiB0eXBlb2YgY2h1bmsgIT09ICdzdHJpbmcnICYmIGNodW5rICE9PSB1bmRlZmluZWQgJiYgIXN0YXRlLm9iamVjdE1vZGUpIHtcbiAgICBlciA9IG5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRSgnY2h1bmsnLCBbJ3N0cmluZycsICdCdWZmZXInLCAnVWludDhBcnJheSddLCBjaHVuayk7XG4gIH1cbiAgcmV0dXJuIGVyO1xufVxuUmVhZGFibGUucHJvdG90eXBlLmlzUGF1c2VkID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nID09PSBmYWxzZTtcbn07XG5cbi8vIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LlxuUmVhZGFibGUucHJvdG90eXBlLnNldEVuY29kaW5nID0gZnVuY3Rpb24gKGVuYykge1xuICBpZiAoIVN0cmluZ0RlY29kZXIpIFN0cmluZ0RlY29kZXIgPSByZXF1aXJlKCdzdHJpbmdfZGVjb2Rlci8nKS5TdHJpbmdEZWNvZGVyO1xuICB2YXIgZGVjb2RlciA9IG5ldyBTdHJpbmdEZWNvZGVyKGVuYyk7XG4gIHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVjb2RlciA9IGRlY29kZXI7XG4gIC8vIElmIHNldEVuY29kaW5nKG51bGwpLCBkZWNvZGVyLmVuY29kaW5nIGVxdWFscyB1dGY4XG4gIHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5jb2RpbmcgPSB0aGlzLl9yZWFkYWJsZVN0YXRlLmRlY29kZXIuZW5jb2Rpbmc7XG5cbiAgLy8gSXRlcmF0ZSBvdmVyIGN1cnJlbnQgYnVmZmVyIHRvIGNvbnZlcnQgYWxyZWFkeSBzdG9yZWQgQnVmZmVyczpcbiAgdmFyIHAgPSB0aGlzLl9yZWFkYWJsZVN0YXRlLmJ1ZmZlci5oZWFkO1xuICB2YXIgY29udGVudCA9ICcnO1xuICB3aGlsZSAocCAhPT0gbnVsbCkge1xuICAgIGNvbnRlbnQgKz0gZGVjb2Rlci53cml0ZShwLmRhdGEpO1xuICAgIHAgPSBwLm5leHQ7XG4gIH1cbiAgdGhpcy5fcmVhZGFibGVTdGF0ZS5idWZmZXIuY2xlYXIoKTtcbiAgaWYgKGNvbnRlbnQgIT09ICcnKSB0aGlzLl9yZWFkYWJsZVN0YXRlLmJ1ZmZlci5wdXNoKGNvbnRlbnQpO1xuICB0aGlzLl9yZWFkYWJsZVN0YXRlLmxlbmd0aCA9IGNvbnRlbnQubGVuZ3RoO1xuICByZXR1cm4gdGhpcztcbn07XG5cbi8vIERvbid0IHJhaXNlIHRoZSBod20gPiAxR0JcbnZhciBNQVhfSFdNID0gMHg0MDAwMDAwMDtcbmZ1bmN0aW9uIGNvbXB1dGVOZXdIaWdoV2F0ZXJNYXJrKG4pIHtcbiAgaWYgKG4gPj0gTUFYX0hXTSkge1xuICAgIC8vIFRPRE8ocm9uYWcpOiBUaHJvdyBFUlJfVkFMVUVfT1VUX09GX1JBTkdFLlxuICAgIG4gPSBNQVhfSFdNO1xuICB9IGVsc2Uge1xuICAgIC8vIEdldCB0aGUgbmV4dCBoaWdoZXN0IHBvd2VyIG9mIDIgdG8gcHJldmVudCBpbmNyZWFzaW5nIGh3bSBleGNlc3NpdmVseSBpblxuICAgIC8vIHRpbnkgYW1vdW50c1xuICAgIG4tLTtcbiAgICBuIHw9IG4gPj4+IDE7XG4gICAgbiB8PSBuID4+PiAyO1xuICAgIG4gfD0gbiA+Pj4gNDtcbiAgICBuIHw9IG4gPj4+IDg7XG4gICAgbiB8PSBuID4+PiAxNjtcbiAgICBuKys7XG4gIH1cbiAgcmV0dXJuIG47XG59XG5cbi8vIFRoaXMgZnVuY3Rpb24gaXMgZGVzaWduZWQgdG8gYmUgaW5saW5hYmxlLCBzbyBwbGVhc2UgdGFrZSBjYXJlIHdoZW4gbWFraW5nXG4vLyBjaGFuZ2VzIHRvIHRoZSBmdW5jdGlvbiBib2R5LlxuZnVuY3Rpb24gaG93TXVjaFRvUmVhZChuLCBzdGF0ZSkge1xuICBpZiAobiA8PSAwIHx8IHN0YXRlLmxlbmd0aCA9PT0gMCAmJiBzdGF0ZS5lbmRlZCkgcmV0dXJuIDA7XG4gIGlmIChzdGF0ZS5vYmplY3RNb2RlKSByZXR1cm4gMTtcbiAgaWYgKG4gIT09IG4pIHtcbiAgICAvLyBPbmx5IGZsb3cgb25lIGJ1ZmZlciBhdCBhIHRpbWVcbiAgICBpZiAoc3RhdGUuZmxvd2luZyAmJiBzdGF0ZS5sZW5ndGgpIHJldHVybiBzdGF0ZS5idWZmZXIuaGVhZC5kYXRhLmxlbmd0aDtlbHNlIHJldHVybiBzdGF0ZS5sZW5ndGg7XG4gIH1cbiAgLy8gSWYgd2UncmUgYXNraW5nIGZvciBtb3JlIHRoYW4gdGhlIGN1cnJlbnQgaHdtLCB0aGVuIHJhaXNlIHRoZSBod20uXG4gIGlmIChuID4gc3RhdGUuaGlnaFdhdGVyTWFyaykgc3RhdGUuaGlnaFdhdGVyTWFyayA9IGNvbXB1dGVOZXdIaWdoV2F0ZXJNYXJrKG4pO1xuICBpZiAobiA8PSBzdGF0ZS5sZW5ndGgpIHJldHVybiBuO1xuICAvLyBEb24ndCBoYXZlIGVub3VnaFxuICBpZiAoIXN0YXRlLmVuZGVkKSB7XG4gICAgc3RhdGUubmVlZFJlYWRhYmxlID0gdHJ1ZTtcbiAgICByZXR1cm4gMDtcbiAgfVxuICByZXR1cm4gc3RhdGUubGVuZ3RoO1xufVxuXG4vLyB5b3UgY2FuIG92ZXJyaWRlIGVpdGhlciB0aGlzIG1ldGhvZCwgb3IgdGhlIGFzeW5jIF9yZWFkKG4pIGJlbG93LlxuUmVhZGFibGUucHJvdG90eXBlLnJlYWQgPSBmdW5jdGlvbiAobikge1xuICBkZWJ1ZygncmVhZCcsIG4pO1xuICBuID0gcGFyc2VJbnQobiwgMTApO1xuICB2YXIgc3RhdGUgPSB0aGlzLl9yZWFkYWJsZVN0YXRlO1xuICB2YXIgbk9yaWcgPSBuO1xuICBpZiAobiAhPT0gMCkgc3RhdGUuZW1pdHRlZFJlYWRhYmxlID0gZmFsc2U7XG5cbiAgLy8gaWYgd2UncmUgZG9pbmcgcmVhZCgwKSB0byB0cmlnZ2VyIGEgcmVhZGFibGUgZXZlbnQsIGJ1dCB3ZVxuICAvLyBhbHJlYWR5IGhhdmUgYSBidW5jaCBvZiBkYXRhIGluIHRoZSBidWZmZXIsIHRoZW4ganVzdCB0cmlnZ2VyXG4gIC8vIHRoZSAncmVhZGFibGUnIGV2ZW50IGFuZCBtb3ZlIG9uLlxuICBpZiAobiA9PT0gMCAmJiBzdGF0ZS5uZWVkUmVhZGFibGUgJiYgKChzdGF0ZS5oaWdoV2F0ZXJNYXJrICE9PSAwID8gc3RhdGUubGVuZ3RoID49IHN0YXRlLmhpZ2hXYXRlck1hcmsgOiBzdGF0ZS5sZW5ndGggPiAwKSB8fCBzdGF0ZS5lbmRlZCkpIHtcbiAgICBkZWJ1ZygncmVhZDogZW1pdFJlYWRhYmxlJywgc3RhdGUubGVuZ3RoLCBzdGF0ZS5lbmRlZCk7XG4gICAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMCAmJiBzdGF0ZS5lbmRlZCkgZW5kUmVhZGFibGUodGhpcyk7ZWxzZSBlbWl0UmVhZGFibGUodGhpcyk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgbiA9IGhvd011Y2hUb1JlYWQobiwgc3RhdGUpO1xuXG4gIC8vIGlmIHdlJ3ZlIGVuZGVkLCBhbmQgd2UncmUgbm93IGNsZWFyLCB0aGVuIGZpbmlzaCBpdCB1cC5cbiAgaWYgKG4gPT09IDAgJiYgc3RhdGUuZW5kZWQpIHtcbiAgICBpZiAoc3RhdGUubGVuZ3RoID09PSAwKSBlbmRSZWFkYWJsZSh0aGlzKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIEFsbCB0aGUgYWN0dWFsIGNodW5rIGdlbmVyYXRpb24gbG9naWMgbmVlZHMgdG8gYmVcbiAgLy8gKmJlbG93KiB0aGUgY2FsbCB0byBfcmVhZC4gIFRoZSByZWFzb24gaXMgdGhhdCBpbiBjZXJ0YWluXG4gIC8vIHN5bnRoZXRpYyBzdHJlYW0gY2FzZXMsIHN1Y2ggYXMgcGFzc3Rocm91Z2ggc3RyZWFtcywgX3JlYWRcbiAgLy8gbWF5IGJlIGEgY29tcGxldGVseSBzeW5jaHJvbm91cyBvcGVyYXRpb24gd2hpY2ggbWF5IGNoYW5nZVxuICAvLyB0aGUgc3RhdGUgb2YgdGhlIHJlYWQgYnVmZmVyLCBwcm92aWRpbmcgZW5vdWdoIGRhdGEgd2hlblxuICAvLyBiZWZvcmUgdGhlcmUgd2FzICpub3QqIGVub3VnaC5cbiAgLy9cbiAgLy8gU28sIHRoZSBzdGVwcyBhcmU6XG4gIC8vIDEuIEZpZ3VyZSBvdXQgd2hhdCB0aGUgc3RhdGUgb2YgdGhpbmdzIHdpbGwgYmUgYWZ0ZXIgd2UgZG9cbiAgLy8gYSByZWFkIGZyb20gdGhlIGJ1ZmZlci5cbiAgLy9cbiAgLy8gMi4gSWYgdGhhdCByZXN1bHRpbmcgc3RhdGUgd2lsbCB0cmlnZ2VyIGEgX3JlYWQsIHRoZW4gY2FsbCBfcmVhZC5cbiAgLy8gTm90ZSB0aGF0IHRoaXMgbWF5IGJlIGFzeW5jaHJvbm91cywgb3Igc3luY2hyb25vdXMuICBZZXMsIGl0IGlzXG4gIC8vIGRlZXBseSB1Z2x5IHRvIHdyaXRlIEFQSXMgdGhpcyB3YXksIGJ1dCB0aGF0IHN0aWxsIGRvZXNuJ3QgbWVhblxuICAvLyB0aGF0IHRoZSBSZWFkYWJsZSBjbGFzcyBzaG91bGQgYmVoYXZlIGltcHJvcGVybHksIGFzIHN0cmVhbXMgYXJlXG4gIC8vIGRlc2lnbmVkIHRvIGJlIHN5bmMvYXN5bmMgYWdub3N0aWMuXG4gIC8vIFRha2Ugbm90ZSBpZiB0aGUgX3JlYWQgY2FsbCBpcyBzeW5jIG9yIGFzeW5jIChpZSwgaWYgdGhlIHJlYWQgY2FsbFxuICAvLyBoYXMgcmV0dXJuZWQgeWV0KSwgc28gdGhhdCB3ZSBrbm93IHdoZXRoZXIgb3Igbm90IGl0J3Mgc2FmZSB0byBlbWl0XG4gIC8vICdyZWFkYWJsZScgZXRjLlxuICAvL1xuICAvLyAzLiBBY3R1YWxseSBwdWxsIHRoZSByZXF1ZXN0ZWQgY2h1bmtzIG91dCBvZiB0aGUgYnVmZmVyIGFuZCByZXR1cm4uXG5cbiAgLy8gaWYgd2UgbmVlZCBhIHJlYWRhYmxlIGV2ZW50LCB0aGVuIHdlIG5lZWQgdG8gZG8gc29tZSByZWFkaW5nLlxuICB2YXIgZG9SZWFkID0gc3RhdGUubmVlZFJlYWRhYmxlO1xuICBkZWJ1ZygnbmVlZCByZWFkYWJsZScsIGRvUmVhZCk7XG5cbiAgLy8gaWYgd2UgY3VycmVudGx5IGhhdmUgbGVzcyB0aGFuIHRoZSBoaWdoV2F0ZXJNYXJrLCB0aGVuIGFsc28gcmVhZCBzb21lXG4gIGlmIChzdGF0ZS5sZW5ndGggPT09IDAgfHwgc3RhdGUubGVuZ3RoIC0gbiA8IHN0YXRlLmhpZ2hXYXRlck1hcmspIHtcbiAgICBkb1JlYWQgPSB0cnVlO1xuICAgIGRlYnVnKCdsZW5ndGggbGVzcyB0aGFuIHdhdGVybWFyaycsIGRvUmVhZCk7XG4gIH1cblxuICAvLyBob3dldmVyLCBpZiB3ZSd2ZSBlbmRlZCwgdGhlbiB0aGVyZSdzIG5vIHBvaW50LCBhbmQgaWYgd2UncmUgYWxyZWFkeVxuICAvLyByZWFkaW5nLCB0aGVuIGl0J3MgdW5uZWNlc3NhcnkuXG4gIGlmIChzdGF0ZS5lbmRlZCB8fCBzdGF0ZS5yZWFkaW5nKSB7XG4gICAgZG9SZWFkID0gZmFsc2U7XG4gICAgZGVidWcoJ3JlYWRpbmcgb3IgZW5kZWQnLCBkb1JlYWQpO1xuICB9IGVsc2UgaWYgKGRvUmVhZCkge1xuICAgIGRlYnVnKCdkbyByZWFkJyk7XG4gICAgc3RhdGUucmVhZGluZyA9IHRydWU7XG4gICAgc3RhdGUuc3luYyA9IHRydWU7XG4gICAgLy8gaWYgdGhlIGxlbmd0aCBpcyBjdXJyZW50bHkgemVybywgdGhlbiB3ZSAqbmVlZCogYSByZWFkYWJsZSBldmVudC5cbiAgICBpZiAoc3RhdGUubGVuZ3RoID09PSAwKSBzdGF0ZS5uZWVkUmVhZGFibGUgPSB0cnVlO1xuICAgIC8vIGNhbGwgaW50ZXJuYWwgcmVhZCBtZXRob2RcbiAgICB0aGlzLl9yZWFkKHN0YXRlLmhpZ2hXYXRlck1hcmspO1xuICAgIHN0YXRlLnN5bmMgPSBmYWxzZTtcbiAgICAvLyBJZiBfcmVhZCBwdXNoZWQgZGF0YSBzeW5jaHJvbm91c2x5LCB0aGVuIGByZWFkaW5nYCB3aWxsIGJlIGZhbHNlLFxuICAgIC8vIGFuZCB3ZSBuZWVkIHRvIHJlLWV2YWx1YXRlIGhvdyBtdWNoIGRhdGEgd2UgY2FuIHJldHVybiB0byB0aGUgdXNlci5cbiAgICBpZiAoIXN0YXRlLnJlYWRpbmcpIG4gPSBob3dNdWNoVG9SZWFkKG5PcmlnLCBzdGF0ZSk7XG4gIH1cbiAgdmFyIHJldDtcbiAgaWYgKG4gPiAwKSByZXQgPSBmcm9tTGlzdChuLCBzdGF0ZSk7ZWxzZSByZXQgPSBudWxsO1xuICBpZiAocmV0ID09PSBudWxsKSB7XG4gICAgc3RhdGUubmVlZFJlYWRhYmxlID0gc3RhdGUubGVuZ3RoIDw9IHN0YXRlLmhpZ2hXYXRlck1hcms7XG4gICAgbiA9IDA7XG4gIH0gZWxzZSB7XG4gICAgc3RhdGUubGVuZ3RoIC09IG47XG4gICAgc3RhdGUuYXdhaXREcmFpbiA9IDA7XG4gIH1cbiAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMCkge1xuICAgIC8vIElmIHdlIGhhdmUgbm90aGluZyBpbiB0aGUgYnVmZmVyLCB0aGVuIHdlIHdhbnQgdG8ga25vd1xuICAgIC8vIGFzIHNvb24gYXMgd2UgKmRvKiBnZXQgc29tZXRoaW5nIGludG8gdGhlIGJ1ZmZlci5cbiAgICBpZiAoIXN0YXRlLmVuZGVkKSBzdGF0ZS5uZWVkUmVhZGFibGUgPSB0cnVlO1xuXG4gICAgLy8gSWYgd2UgdHJpZWQgdG8gcmVhZCgpIHBhc3QgdGhlIEVPRiwgdGhlbiBlbWl0IGVuZCBvbiB0aGUgbmV4dCB0aWNrLlxuICAgIGlmIChuT3JpZyAhPT0gbiAmJiBzdGF0ZS5lbmRlZCkgZW5kUmVhZGFibGUodGhpcyk7XG4gIH1cbiAgaWYgKHJldCAhPT0gbnVsbCkgdGhpcy5lbWl0KCdkYXRhJywgcmV0KTtcbiAgcmV0dXJuIHJldDtcbn07XG5mdW5jdGlvbiBvbkVvZkNodW5rKHN0cmVhbSwgc3RhdGUpIHtcbiAgZGVidWcoJ29uRW9mQ2h1bmsnKTtcbiAgaWYgKHN0YXRlLmVuZGVkKSByZXR1cm47XG4gIGlmIChzdGF0ZS5kZWNvZGVyKSB7XG4gICAgdmFyIGNodW5rID0gc3RhdGUuZGVjb2Rlci5lbmQoKTtcbiAgICBpZiAoY2h1bmsgJiYgY2h1bmsubGVuZ3RoKSB7XG4gICAgICBzdGF0ZS5idWZmZXIucHVzaChjaHVuayk7XG4gICAgICBzdGF0ZS5sZW5ndGggKz0gc3RhdGUub2JqZWN0TW9kZSA/IDEgOiBjaHVuay5sZW5ndGg7XG4gICAgfVxuICB9XG4gIHN0YXRlLmVuZGVkID0gdHJ1ZTtcbiAgaWYgKHN0YXRlLnN5bmMpIHtcbiAgICAvLyBpZiB3ZSBhcmUgc3luYywgd2FpdCB1bnRpbCBuZXh0IHRpY2sgdG8gZW1pdCB0aGUgZGF0YS5cbiAgICAvLyBPdGhlcndpc2Ugd2UgcmlzayBlbWl0dGluZyBkYXRhIGluIHRoZSBmbG93KClcbiAgICAvLyB0aGUgcmVhZGFibGUgY29kZSB0cmlnZ2VycyBkdXJpbmcgYSByZWFkKCkgY2FsbFxuICAgIGVtaXRSZWFkYWJsZShzdHJlYW0pO1xuICB9IGVsc2Uge1xuICAgIC8vIGVtaXQgJ3JlYWRhYmxlJyBub3cgdG8gbWFrZSBzdXJlIGl0IGdldHMgcGlja2VkIHVwLlxuICAgIHN0YXRlLm5lZWRSZWFkYWJsZSA9IGZhbHNlO1xuICAgIGlmICghc3RhdGUuZW1pdHRlZFJlYWRhYmxlKSB7XG4gICAgICBzdGF0ZS5lbWl0dGVkUmVhZGFibGUgPSB0cnVlO1xuICAgICAgZW1pdFJlYWRhYmxlXyhzdHJlYW0pO1xuICAgIH1cbiAgfVxufVxuXG4vLyBEb24ndCBlbWl0IHJlYWRhYmxlIHJpZ2h0IGF3YXkgaW4gc3luYyBtb2RlLCBiZWNhdXNlIHRoaXMgY2FuIHRyaWdnZXJcbi8vIGFub3RoZXIgcmVhZCgpIGNhbGwgPT4gc3RhY2sgb3ZlcmZsb3cuICBUaGlzIHdheSwgaXQgbWlnaHQgdHJpZ2dlclxuLy8gYSBuZXh0VGljayByZWN1cnNpb24gd2FybmluZywgYnV0IHRoYXQncyBub3Qgc28gYmFkLlxuZnVuY3Rpb24gZW1pdFJlYWRhYmxlKHN0cmVhbSkge1xuICB2YXIgc3RhdGUgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGU7XG4gIGRlYnVnKCdlbWl0UmVhZGFibGUnLCBzdGF0ZS5uZWVkUmVhZGFibGUsIHN0YXRlLmVtaXR0ZWRSZWFkYWJsZSk7XG4gIHN0YXRlLm5lZWRSZWFkYWJsZSA9IGZhbHNlO1xuICBpZiAoIXN0YXRlLmVtaXR0ZWRSZWFkYWJsZSkge1xuICAgIGRlYnVnKCdlbWl0UmVhZGFibGUnLCBzdGF0ZS5mbG93aW5nKTtcbiAgICBzdGF0ZS5lbWl0dGVkUmVhZGFibGUgPSB0cnVlO1xuICAgIHByb2Nlc3MubmV4dFRpY2soZW1pdFJlYWRhYmxlXywgc3RyZWFtKTtcbiAgfVxufVxuZnVuY3Rpb24gZW1pdFJlYWRhYmxlXyhzdHJlYW0pIHtcbiAgdmFyIHN0YXRlID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlO1xuICBkZWJ1ZygnZW1pdFJlYWRhYmxlXycsIHN0YXRlLmRlc3Ryb3llZCwgc3RhdGUubGVuZ3RoLCBzdGF0ZS5lbmRlZCk7XG4gIGlmICghc3RhdGUuZGVzdHJveWVkICYmIChzdGF0ZS5sZW5ndGggfHwgc3RhdGUuZW5kZWQpKSB7XG4gICAgc3RyZWFtLmVtaXQoJ3JlYWRhYmxlJyk7XG4gICAgc3RhdGUuZW1pdHRlZFJlYWRhYmxlID0gZmFsc2U7XG4gIH1cblxuICAvLyBUaGUgc3RyZWFtIG5lZWRzIGFub3RoZXIgcmVhZGFibGUgZXZlbnQgaWZcbiAgLy8gMS4gSXQgaXMgbm90IGZsb3dpbmcsIGFzIHRoZSBmbG93IG1lY2hhbmlzbSB3aWxsIHRha2VcbiAgLy8gICAgY2FyZSBvZiBpdC5cbiAgLy8gMi4gSXQgaXMgbm90IGVuZGVkLlxuICAvLyAzLiBJdCBpcyBiZWxvdyB0aGUgaGlnaFdhdGVyTWFyaywgc28gd2UgY2FuIHNjaGVkdWxlXG4gIC8vICAgIGFub3RoZXIgcmVhZGFibGUgbGF0ZXIuXG4gIHN0YXRlLm5lZWRSZWFkYWJsZSA9ICFzdGF0ZS5mbG93aW5nICYmICFzdGF0ZS5lbmRlZCAmJiBzdGF0ZS5sZW5ndGggPD0gc3RhdGUuaGlnaFdhdGVyTWFyaztcbiAgZmxvdyhzdHJlYW0pO1xufVxuXG4vLyBhdCB0aGlzIHBvaW50LCB0aGUgdXNlciBoYXMgcHJlc3VtYWJseSBzZWVuIHRoZSAncmVhZGFibGUnIGV2ZW50LFxuLy8gYW5kIGNhbGxlZCByZWFkKCkgdG8gY29uc3VtZSBzb21lIGRhdGEuICB0aGF0IG1heSBoYXZlIHRyaWdnZXJlZFxuLy8gaW4gdHVybiBhbm90aGVyIF9yZWFkKG4pIGNhbGwsIGluIHdoaWNoIGNhc2UgcmVhZGluZyA9IHRydWUgaWZcbi8vIGl0J3MgaW4gcHJvZ3Jlc3MuXG4vLyBIb3dldmVyLCBpZiB3ZSdyZSBub3QgZW5kZWQsIG9yIHJlYWRpbmcsIGFuZCB0aGUgbGVuZ3RoIDwgaHdtLFxuLy8gdGhlbiBnbyBhaGVhZCBhbmQgdHJ5IHRvIHJlYWQgc29tZSBtb3JlIHByZWVtcHRpdmVseS5cbmZ1bmN0aW9uIG1heWJlUmVhZE1vcmUoc3RyZWFtLCBzdGF0ZSkge1xuICBpZiAoIXN0YXRlLnJlYWRpbmdNb3JlKSB7XG4gICAgc3RhdGUucmVhZGluZ01vcmUgPSB0cnVlO1xuICAgIHByb2Nlc3MubmV4dFRpY2sobWF5YmVSZWFkTW9yZV8sIHN0cmVhbSwgc3RhdGUpO1xuICB9XG59XG5mdW5jdGlvbiBtYXliZVJlYWRNb3JlXyhzdHJlYW0sIHN0YXRlKSB7XG4gIC8vIEF0dGVtcHQgdG8gcmVhZCBtb3JlIGRhdGEgaWYgd2Ugc2hvdWxkLlxuICAvL1xuICAvLyBUaGUgY29uZGl0aW9ucyBmb3IgcmVhZGluZyBtb3JlIGRhdGEgYXJlIChvbmUgb2YpOlxuICAvLyAtIE5vdCBlbm91Z2ggZGF0YSBidWZmZXJlZCAoc3RhdGUubGVuZ3RoIDwgc3RhdGUuaGlnaFdhdGVyTWFyaykuIFRoZSBsb29wXG4gIC8vICAgaXMgcmVzcG9uc2libGUgZm9yIGZpbGxpbmcgdGhlIGJ1ZmZlciB3aXRoIGVub3VnaCBkYXRhIGlmIHN1Y2ggZGF0YVxuICAvLyAgIGlzIGF2YWlsYWJsZS4gSWYgaGlnaFdhdGVyTWFyayBpcyAwIGFuZCB3ZSBhcmUgbm90IGluIHRoZSBmbG93aW5nIG1vZGVcbiAgLy8gICB3ZSBzaG91bGQgX25vdF8gYXR0ZW1wdCB0byBidWZmZXIgYW55IGV4dHJhIGRhdGEuIFdlJ2xsIGdldCBtb3JlIGRhdGFcbiAgLy8gICB3aGVuIHRoZSBzdHJlYW0gY29uc3VtZXIgY2FsbHMgcmVhZCgpIGluc3RlYWQuXG4gIC8vIC0gTm8gZGF0YSBpbiB0aGUgYnVmZmVyLCBhbmQgdGhlIHN0cmVhbSBpcyBpbiBmbG93aW5nIG1vZGUuIEluIHRoaXMgbW9kZVxuICAvLyAgIHRoZSBsb29wIGJlbG93IGlzIHJlc3BvbnNpYmxlIGZvciBlbnN1cmluZyByZWFkKCkgaXMgY2FsbGVkLiBGYWlsaW5nIHRvXG4gIC8vICAgY2FsbCByZWFkIGhlcmUgd291bGQgYWJvcnQgdGhlIGZsb3cgYW5kIHRoZXJlJ3Mgbm8gb3RoZXIgbWVjaGFuaXNtIGZvclxuICAvLyAgIGNvbnRpbnVpbmcgdGhlIGZsb3cgaWYgdGhlIHN0cmVhbSBjb25zdW1lciBoYXMganVzdCBzdWJzY3JpYmVkIHRvIHRoZVxuICAvLyAgICdkYXRhJyBldmVudC5cbiAgLy9cbiAgLy8gSW4gYWRkaXRpb24gdG8gdGhlIGFib3ZlIGNvbmRpdGlvbnMgdG8ga2VlcCByZWFkaW5nIGRhdGEsIHRoZSBmb2xsb3dpbmdcbiAgLy8gY29uZGl0aW9ucyBwcmV2ZW50IHRoZSBkYXRhIGZyb20gYmVpbmcgcmVhZDpcbiAgLy8gLSBUaGUgc3RyZWFtIGhhcyBlbmRlZCAoc3RhdGUuZW5kZWQpLlxuICAvLyAtIFRoZXJlIGlzIGFscmVhZHkgYSBwZW5kaW5nICdyZWFkJyBvcGVyYXRpb24gKHN0YXRlLnJlYWRpbmcpLiBUaGlzIGlzIGFcbiAgLy8gICBjYXNlIHdoZXJlIHRoZSB0aGUgc3RyZWFtIGhhcyBjYWxsZWQgdGhlIGltcGxlbWVudGF0aW9uIGRlZmluZWQgX3JlYWQoKVxuICAvLyAgIG1ldGhvZCwgYnV0IHRoZXkgYXJlIHByb2Nlc3NpbmcgdGhlIGNhbGwgYXN5bmNocm9ub3VzbHkgYW5kIGhhdmUgX25vdF9cbiAgLy8gICBjYWxsZWQgcHVzaCgpIHdpdGggbmV3IGRhdGEuIEluIHRoaXMgY2FzZSB3ZSBza2lwIHBlcmZvcm1pbmcgbW9yZVxuICAvLyAgIHJlYWQoKXMuIFRoZSBleGVjdXRpb24gZW5kcyBpbiB0aGlzIG1ldGhvZCBhZ2FpbiBhZnRlciB0aGUgX3JlYWQoKSBlbmRzXG4gIC8vICAgdXAgY2FsbGluZyBwdXNoKCkgd2l0aCBtb3JlIGRhdGEuXG4gIHdoaWxlICghc3RhdGUucmVhZGluZyAmJiAhc3RhdGUuZW5kZWQgJiYgKHN0YXRlLmxlbmd0aCA8IHN0YXRlLmhpZ2hXYXRlck1hcmsgfHwgc3RhdGUuZmxvd2luZyAmJiBzdGF0ZS5sZW5ndGggPT09IDApKSB7XG4gICAgdmFyIGxlbiA9IHN0YXRlLmxlbmd0aDtcbiAgICBkZWJ1ZygnbWF5YmVSZWFkTW9yZSByZWFkIDAnKTtcbiAgICBzdHJlYW0ucmVhZCgwKTtcbiAgICBpZiAobGVuID09PSBzdGF0ZS5sZW5ndGgpXG4gICAgICAvLyBkaWRuJ3QgZ2V0IGFueSBkYXRhLCBzdG9wIHNwaW5uaW5nLlxuICAgICAgYnJlYWs7XG4gIH1cbiAgc3RhdGUucmVhZGluZ01vcmUgPSBmYWxzZTtcbn1cblxuLy8gYWJzdHJhY3QgbWV0aG9kLiAgdG8gYmUgb3ZlcnJpZGRlbiBpbiBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBjbGFzc2VzLlxuLy8gY2FsbCBjYihlciwgZGF0YSkgd2hlcmUgZGF0YSBpcyA8PSBuIGluIGxlbmd0aC5cbi8vIGZvciB2aXJ0dWFsIChub24tc3RyaW5nLCBub24tYnVmZmVyKSBzdHJlYW1zLCBcImxlbmd0aFwiIGlzIHNvbWV3aGF0XG4vLyBhcmJpdHJhcnksIGFuZCBwZXJoYXBzIG5vdCB2ZXJ5IG1lYW5pbmdmdWwuXG5SZWFkYWJsZS5wcm90b3R5cGUuX3JlYWQgPSBmdW5jdGlvbiAobikge1xuICBlcnJvck9yRGVzdHJveSh0aGlzLCBuZXcgRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQoJ19yZWFkKCknKSk7XG59O1xuUmVhZGFibGUucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbiAoZGVzdCwgcGlwZU9wdHMpIHtcbiAgdmFyIHNyYyA9IHRoaXM7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG4gIHN3aXRjaCAoc3RhdGUucGlwZXNDb3VudCkge1xuICAgIGNhc2UgMDpcbiAgICAgIHN0YXRlLnBpcGVzID0gZGVzdDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMTpcbiAgICAgIHN0YXRlLnBpcGVzID0gW3N0YXRlLnBpcGVzLCBkZXN0XTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBzdGF0ZS5waXBlcy5wdXNoKGRlc3QpO1xuICAgICAgYnJlYWs7XG4gIH1cbiAgc3RhdGUucGlwZXNDb3VudCArPSAxO1xuICBkZWJ1ZygncGlwZSBjb3VudD0lZCBvcHRzPSVqJywgc3RhdGUucGlwZXNDb3VudCwgcGlwZU9wdHMpO1xuICB2YXIgZG9FbmQgPSAoIXBpcGVPcHRzIHx8IHBpcGVPcHRzLmVuZCAhPT0gZmFsc2UpICYmIGRlc3QgIT09IHByb2Nlc3Muc3Rkb3V0ICYmIGRlc3QgIT09IHByb2Nlc3Muc3RkZXJyO1xuICB2YXIgZW5kRm4gPSBkb0VuZCA/IG9uZW5kIDogdW5waXBlO1xuICBpZiAoc3RhdGUuZW5kRW1pdHRlZCkgcHJvY2Vzcy5uZXh0VGljayhlbmRGbik7ZWxzZSBzcmMub25jZSgnZW5kJywgZW5kRm4pO1xuICBkZXN0Lm9uKCd1bnBpcGUnLCBvbnVucGlwZSk7XG4gIGZ1bmN0aW9uIG9udW5waXBlKHJlYWRhYmxlLCB1bnBpcGVJbmZvKSB7XG4gICAgZGVidWcoJ29udW5waXBlJyk7XG4gICAgaWYgKHJlYWRhYmxlID09PSBzcmMpIHtcbiAgICAgIGlmICh1bnBpcGVJbmZvICYmIHVucGlwZUluZm8uaGFzVW5waXBlZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgdW5waXBlSW5mby5oYXNVbnBpcGVkID0gdHJ1ZTtcbiAgICAgICAgY2xlYW51cCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBmdW5jdGlvbiBvbmVuZCgpIHtcbiAgICBkZWJ1Zygnb25lbmQnKTtcbiAgICBkZXN0LmVuZCgpO1xuICB9XG5cbiAgLy8gd2hlbiB0aGUgZGVzdCBkcmFpbnMsIGl0IHJlZHVjZXMgdGhlIGF3YWl0RHJhaW4gY291bnRlclxuICAvLyBvbiB0aGUgc291cmNlLiAgVGhpcyB3b3VsZCBiZSBtb3JlIGVsZWdhbnQgd2l0aCBhIC5vbmNlKClcbiAgLy8gaGFuZGxlciBpbiBmbG93KCksIGJ1dCBhZGRpbmcgYW5kIHJlbW92aW5nIHJlcGVhdGVkbHkgaXNcbiAgLy8gdG9vIHNsb3cuXG4gIHZhciBvbmRyYWluID0gcGlwZU9uRHJhaW4oc3JjKTtcbiAgZGVzdC5vbignZHJhaW4nLCBvbmRyYWluKTtcbiAgdmFyIGNsZWFuZWRVcCA9IGZhbHNlO1xuICBmdW5jdGlvbiBjbGVhbnVwKCkge1xuICAgIGRlYnVnKCdjbGVhbnVwJyk7XG4gICAgLy8gY2xlYW51cCBldmVudCBoYW5kbGVycyBvbmNlIHRoZSBwaXBlIGlzIGJyb2tlblxuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2Nsb3NlJywgb25jbG9zZSk7XG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignZmluaXNoJywgb25maW5pc2gpO1xuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2RyYWluJywgb25kcmFpbik7XG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBvbmVycm9yKTtcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCd1bnBpcGUnLCBvbnVucGlwZSk7XG4gICAgc3JjLnJlbW92ZUxpc3RlbmVyKCdlbmQnLCBvbmVuZCk7XG4gICAgc3JjLnJlbW92ZUxpc3RlbmVyKCdlbmQnLCB1bnBpcGUpO1xuICAgIHNyYy5yZW1vdmVMaXN0ZW5lcignZGF0YScsIG9uZGF0YSk7XG4gICAgY2xlYW5lZFVwID0gdHJ1ZTtcblxuICAgIC8vIGlmIHRoZSByZWFkZXIgaXMgd2FpdGluZyBmb3IgYSBkcmFpbiBldmVudCBmcm9tIHRoaXNcbiAgICAvLyBzcGVjaWZpYyB3cml0ZXIsIHRoZW4gaXQgd291bGQgY2F1c2UgaXQgdG8gbmV2ZXIgc3RhcnRcbiAgICAvLyBmbG93aW5nIGFnYWluLlxuICAgIC8vIFNvLCBpZiB0aGlzIGlzIGF3YWl0aW5nIGEgZHJhaW4sIHRoZW4gd2UganVzdCBjYWxsIGl0IG5vdy5cbiAgICAvLyBJZiB3ZSBkb24ndCBrbm93LCB0aGVuIGFzc3VtZSB0aGF0IHdlIGFyZSB3YWl0aW5nIGZvciBvbmUuXG4gICAgaWYgKHN0YXRlLmF3YWl0RHJhaW4gJiYgKCFkZXN0Ll93cml0YWJsZVN0YXRlIHx8IGRlc3QuX3dyaXRhYmxlU3RhdGUubmVlZERyYWluKSkgb25kcmFpbigpO1xuICB9XG4gIHNyYy5vbignZGF0YScsIG9uZGF0YSk7XG4gIGZ1bmN0aW9uIG9uZGF0YShjaHVuaykge1xuICAgIGRlYnVnKCdvbmRhdGEnKTtcbiAgICB2YXIgcmV0ID0gZGVzdC53cml0ZShjaHVuayk7XG4gICAgZGVidWcoJ2Rlc3Qud3JpdGUnLCByZXQpO1xuICAgIGlmIChyZXQgPT09IGZhbHNlKSB7XG4gICAgICAvLyBJZiB0aGUgdXNlciB1bnBpcGVkIGR1cmluZyBgZGVzdC53cml0ZSgpYCwgaXQgaXMgcG9zc2libGVcbiAgICAgIC8vIHRvIGdldCBzdHVjayBpbiBhIHBlcm1hbmVudGx5IHBhdXNlZCBzdGF0ZSBpZiB0aGF0IHdyaXRlXG4gICAgICAvLyBhbHNvIHJldHVybmVkIGZhbHNlLlxuICAgICAgLy8gPT4gQ2hlY2sgd2hldGhlciBgZGVzdGAgaXMgc3RpbGwgYSBwaXBpbmcgZGVzdGluYXRpb24uXG4gICAgICBpZiAoKHN0YXRlLnBpcGVzQ291bnQgPT09IDEgJiYgc3RhdGUucGlwZXMgPT09IGRlc3QgfHwgc3RhdGUucGlwZXNDb3VudCA+IDEgJiYgaW5kZXhPZihzdGF0ZS5waXBlcywgZGVzdCkgIT09IC0xKSAmJiAhY2xlYW5lZFVwKSB7XG4gICAgICAgIGRlYnVnKCdmYWxzZSB3cml0ZSByZXNwb25zZSwgcGF1c2UnLCBzdGF0ZS5hd2FpdERyYWluKTtcbiAgICAgICAgc3RhdGUuYXdhaXREcmFpbisrO1xuICAgICAgfVxuICAgICAgc3JjLnBhdXNlKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gaWYgdGhlIGRlc3QgaGFzIGFuIGVycm9yLCB0aGVuIHN0b3AgcGlwaW5nIGludG8gaXQuXG4gIC8vIGhvd2V2ZXIsIGRvbid0IHN1cHByZXNzIHRoZSB0aHJvd2luZyBiZWhhdmlvciBmb3IgdGhpcy5cbiAgZnVuY3Rpb24gb25lcnJvcihlcikge1xuICAgIGRlYnVnKCdvbmVycm9yJywgZXIpO1xuICAgIHVucGlwZSgpO1xuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2Vycm9yJywgb25lcnJvcik7XG4gICAgaWYgKEVFbGlzdGVuZXJDb3VudChkZXN0LCAnZXJyb3InKSA9PT0gMCkgZXJyb3JPckRlc3Ryb3koZGVzdCwgZXIpO1xuICB9XG5cbiAgLy8gTWFrZSBzdXJlIG91ciBlcnJvciBoYW5kbGVyIGlzIGF0dGFjaGVkIGJlZm9yZSB1c2VybGFuZCBvbmVzLlxuICBwcmVwZW5kTGlzdGVuZXIoZGVzdCwgJ2Vycm9yJywgb25lcnJvcik7XG5cbiAgLy8gQm90aCBjbG9zZSBhbmQgZmluaXNoIHNob3VsZCB0cmlnZ2VyIHVucGlwZSwgYnV0IG9ubHkgb25jZS5cbiAgZnVuY3Rpb24gb25jbG9zZSgpIHtcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdmaW5pc2gnLCBvbmZpbmlzaCk7XG4gICAgdW5waXBlKCk7XG4gIH1cbiAgZGVzdC5vbmNlKCdjbG9zZScsIG9uY2xvc2UpO1xuICBmdW5jdGlvbiBvbmZpbmlzaCgpIHtcbiAgICBkZWJ1Zygnb25maW5pc2gnKTtcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIG9uY2xvc2UpO1xuICAgIHVucGlwZSgpO1xuICB9XG4gIGRlc3Qub25jZSgnZmluaXNoJywgb25maW5pc2gpO1xuICBmdW5jdGlvbiB1bnBpcGUoKSB7XG4gICAgZGVidWcoJ3VucGlwZScpO1xuICAgIHNyYy51bnBpcGUoZGVzdCk7XG4gIH1cblxuICAvLyB0ZWxsIHRoZSBkZXN0IHRoYXQgaXQncyBiZWluZyBwaXBlZCB0b1xuICBkZXN0LmVtaXQoJ3BpcGUnLCBzcmMpO1xuXG4gIC8vIHN0YXJ0IHRoZSBmbG93IGlmIGl0IGhhc24ndCBiZWVuIHN0YXJ0ZWQgYWxyZWFkeS5cbiAgaWYgKCFzdGF0ZS5mbG93aW5nKSB7XG4gICAgZGVidWcoJ3BpcGUgcmVzdW1lJyk7XG4gICAgc3JjLnJlc3VtZSgpO1xuICB9XG4gIHJldHVybiBkZXN0O1xufTtcbmZ1bmN0aW9uIHBpcGVPbkRyYWluKHNyYykge1xuICByZXR1cm4gZnVuY3Rpb24gcGlwZU9uRHJhaW5GdW5jdGlvblJlc3VsdCgpIHtcbiAgICB2YXIgc3RhdGUgPSBzcmMuX3JlYWRhYmxlU3RhdGU7XG4gICAgZGVidWcoJ3BpcGVPbkRyYWluJywgc3RhdGUuYXdhaXREcmFpbik7XG4gICAgaWYgKHN0YXRlLmF3YWl0RHJhaW4pIHN0YXRlLmF3YWl0RHJhaW4tLTtcbiAgICBpZiAoc3RhdGUuYXdhaXREcmFpbiA9PT0gMCAmJiBFRWxpc3RlbmVyQ291bnQoc3JjLCAnZGF0YScpKSB7XG4gICAgICBzdGF0ZS5mbG93aW5nID0gdHJ1ZTtcbiAgICAgIGZsb3coc3JjKTtcbiAgICB9XG4gIH07XG59XG5SZWFkYWJsZS5wcm90b3R5cGUudW5waXBlID0gZnVuY3Rpb24gKGRlc3QpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcbiAgdmFyIHVucGlwZUluZm8gPSB7XG4gICAgaGFzVW5waXBlZDogZmFsc2VcbiAgfTtcblxuICAvLyBpZiB3ZSdyZSBub3QgcGlwaW5nIGFueXdoZXJlLCB0aGVuIGRvIG5vdGhpbmcuXG4gIGlmIChzdGF0ZS5waXBlc0NvdW50ID09PSAwKSByZXR1cm4gdGhpcztcblxuICAvLyBqdXN0IG9uZSBkZXN0aW5hdGlvbi4gIG1vc3QgY29tbW9uIGNhc2UuXG4gIGlmIChzdGF0ZS5waXBlc0NvdW50ID09PSAxKSB7XG4gICAgLy8gcGFzc2VkIGluIG9uZSwgYnV0IGl0J3Mgbm90IHRoZSByaWdodCBvbmUuXG4gICAgaWYgKGRlc3QgJiYgZGVzdCAhPT0gc3RhdGUucGlwZXMpIHJldHVybiB0aGlzO1xuICAgIGlmICghZGVzdCkgZGVzdCA9IHN0YXRlLnBpcGVzO1xuXG4gICAgLy8gZ290IGEgbWF0Y2guXG4gICAgc3RhdGUucGlwZXMgPSBudWxsO1xuICAgIHN0YXRlLnBpcGVzQ291bnQgPSAwO1xuICAgIHN0YXRlLmZsb3dpbmcgPSBmYWxzZTtcbiAgICBpZiAoZGVzdCkgZGVzdC5lbWl0KCd1bnBpcGUnLCB0aGlzLCB1bnBpcGVJbmZvKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIHNsb3cgY2FzZS4gbXVsdGlwbGUgcGlwZSBkZXN0aW5hdGlvbnMuXG5cbiAgaWYgKCFkZXN0KSB7XG4gICAgLy8gcmVtb3ZlIGFsbC5cbiAgICB2YXIgZGVzdHMgPSBzdGF0ZS5waXBlcztcbiAgICB2YXIgbGVuID0gc3RhdGUucGlwZXNDb3VudDtcbiAgICBzdGF0ZS5waXBlcyA9IG51bGw7XG4gICAgc3RhdGUucGlwZXNDb3VudCA9IDA7XG4gICAgc3RhdGUuZmxvd2luZyA9IGZhbHNlO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIGRlc3RzW2ldLmVtaXQoJ3VucGlwZScsIHRoaXMsIHtcbiAgICAgIGhhc1VucGlwZWQ6IGZhbHNlXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyB0cnkgdG8gZmluZCB0aGUgcmlnaHQgb25lLlxuICB2YXIgaW5kZXggPSBpbmRleE9mKHN0YXRlLnBpcGVzLCBkZXN0KTtcbiAgaWYgKGluZGV4ID09PSAtMSkgcmV0dXJuIHRoaXM7XG4gIHN0YXRlLnBpcGVzLnNwbGljZShpbmRleCwgMSk7XG4gIHN0YXRlLnBpcGVzQ291bnQgLT0gMTtcbiAgaWYgKHN0YXRlLnBpcGVzQ291bnQgPT09IDEpIHN0YXRlLnBpcGVzID0gc3RhdGUucGlwZXNbMF07XG4gIGRlc3QuZW1pdCgndW5waXBlJywgdGhpcywgdW5waXBlSW5mbyk7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLy8gc2V0IHVwIGRhdGEgZXZlbnRzIGlmIHRoZXkgYXJlIGFza2VkIGZvclxuLy8gRW5zdXJlIHJlYWRhYmxlIGxpc3RlbmVycyBldmVudHVhbGx5IGdldCBzb21ldGhpbmdcblJlYWRhYmxlLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uIChldiwgZm4pIHtcbiAgdmFyIHJlcyA9IFN0cmVhbS5wcm90b3R5cGUub24uY2FsbCh0aGlzLCBldiwgZm4pO1xuICB2YXIgc3RhdGUgPSB0aGlzLl9yZWFkYWJsZVN0YXRlO1xuICBpZiAoZXYgPT09ICdkYXRhJykge1xuICAgIC8vIHVwZGF0ZSByZWFkYWJsZUxpc3RlbmluZyBzbyB0aGF0IHJlc3VtZSgpIG1heSBiZSBhIG5vLW9wXG4gICAgLy8gYSBmZXcgbGluZXMgZG93bi4gVGhpcyBpcyBuZWVkZWQgdG8gc3VwcG9ydCBvbmNlKCdyZWFkYWJsZScpLlxuICAgIHN0YXRlLnJlYWRhYmxlTGlzdGVuaW5nID0gdGhpcy5saXN0ZW5lckNvdW50KCdyZWFkYWJsZScpID4gMDtcblxuICAgIC8vIFRyeSBzdGFydCBmbG93aW5nIG9uIG5leHQgdGljayBpZiBzdHJlYW0gaXNuJ3QgZXhwbGljaXRseSBwYXVzZWRcbiAgICBpZiAoc3RhdGUuZmxvd2luZyAhPT0gZmFsc2UpIHRoaXMucmVzdW1lKCk7XG4gIH0gZWxzZSBpZiAoZXYgPT09ICdyZWFkYWJsZScpIHtcbiAgICBpZiAoIXN0YXRlLmVuZEVtaXR0ZWQgJiYgIXN0YXRlLnJlYWRhYmxlTGlzdGVuaW5nKSB7XG4gICAgICBzdGF0ZS5yZWFkYWJsZUxpc3RlbmluZyA9IHN0YXRlLm5lZWRSZWFkYWJsZSA9IHRydWU7XG4gICAgICBzdGF0ZS5mbG93aW5nID0gZmFsc2U7XG4gICAgICBzdGF0ZS5lbWl0dGVkUmVhZGFibGUgPSBmYWxzZTtcbiAgICAgIGRlYnVnKCdvbiByZWFkYWJsZScsIHN0YXRlLmxlbmd0aCwgc3RhdGUucmVhZGluZyk7XG4gICAgICBpZiAoc3RhdGUubGVuZ3RoKSB7XG4gICAgICAgIGVtaXRSZWFkYWJsZSh0aGlzKTtcbiAgICAgIH0gZWxzZSBpZiAoIXN0YXRlLnJlYWRpbmcpIHtcbiAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhuUmVhZGluZ05leHRUaWNrLCB0aGlzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlcztcbn07XG5SZWFkYWJsZS5wcm90b3R5cGUuYWRkTGlzdGVuZXIgPSBSZWFkYWJsZS5wcm90b3R5cGUub247XG5SZWFkYWJsZS5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIgPSBmdW5jdGlvbiAoZXYsIGZuKSB7XG4gIHZhciByZXMgPSBTdHJlYW0ucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyLmNhbGwodGhpcywgZXYsIGZuKTtcbiAgaWYgKGV2ID09PSAncmVhZGFibGUnKSB7XG4gICAgLy8gV2UgbmVlZCB0byBjaGVjayBpZiB0aGVyZSBpcyBzb21lb25lIHN0aWxsIGxpc3RlbmluZyB0b1xuICAgIC8vIHJlYWRhYmxlIGFuZCByZXNldCB0aGUgc3RhdGUuIEhvd2V2ZXIgdGhpcyBuZWVkcyB0byBoYXBwZW5cbiAgICAvLyBhZnRlciByZWFkYWJsZSBoYXMgYmVlbiBlbWl0dGVkIGJ1dCBiZWZvcmUgSS9PIChuZXh0VGljaykgdG9cbiAgICAvLyBzdXBwb3J0IG9uY2UoJ3JlYWRhYmxlJywgZm4pIGN5Y2xlcy4gVGhpcyBtZWFucyB0aGF0IGNhbGxpbmdcbiAgICAvLyByZXN1bWUgd2l0aGluIHRoZSBzYW1lIHRpY2sgd2lsbCBoYXZlIG5vXG4gICAgLy8gZWZmZWN0LlxuICAgIHByb2Nlc3MubmV4dFRpY2sodXBkYXRlUmVhZGFibGVMaXN0ZW5pbmcsIHRoaXMpO1xuICB9XG4gIHJldHVybiByZXM7XG59O1xuUmVhZGFibGUucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycyA9IGZ1bmN0aW9uIChldikge1xuICB2YXIgcmVzID0gU3RyZWFtLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgaWYgKGV2ID09PSAncmVhZGFibGUnIHx8IGV2ID09PSB1bmRlZmluZWQpIHtcbiAgICAvLyBXZSBuZWVkIHRvIGNoZWNrIGlmIHRoZXJlIGlzIHNvbWVvbmUgc3RpbGwgbGlzdGVuaW5nIHRvXG4gICAgLy8gcmVhZGFibGUgYW5kIHJlc2V0IHRoZSBzdGF0ZS4gSG93ZXZlciB0aGlzIG5lZWRzIHRvIGhhcHBlblxuICAgIC8vIGFmdGVyIHJlYWRhYmxlIGhhcyBiZWVuIGVtaXR0ZWQgYnV0IGJlZm9yZSBJL08gKG5leHRUaWNrKSB0b1xuICAgIC8vIHN1cHBvcnQgb25jZSgncmVhZGFibGUnLCBmbikgY3ljbGVzLiBUaGlzIG1lYW5zIHRoYXQgY2FsbGluZ1xuICAgIC8vIHJlc3VtZSB3aXRoaW4gdGhlIHNhbWUgdGljayB3aWxsIGhhdmUgbm9cbiAgICAvLyBlZmZlY3QuXG4gICAgcHJvY2Vzcy5uZXh0VGljayh1cGRhdGVSZWFkYWJsZUxpc3RlbmluZywgdGhpcyk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn07XG5mdW5jdGlvbiB1cGRhdGVSZWFkYWJsZUxpc3RlbmluZyhzZWxmKSB7XG4gIHZhciBzdGF0ZSA9IHNlbGYuX3JlYWRhYmxlU3RhdGU7XG4gIHN0YXRlLnJlYWRhYmxlTGlzdGVuaW5nID0gc2VsZi5saXN0ZW5lckNvdW50KCdyZWFkYWJsZScpID4gMDtcbiAgaWYgKHN0YXRlLnJlc3VtZVNjaGVkdWxlZCAmJiAhc3RhdGUucGF1c2VkKSB7XG4gICAgLy8gZmxvd2luZyBuZWVkcyB0byBiZSBzZXQgdG8gdHJ1ZSBub3csIG90aGVyd2lzZVxuICAgIC8vIHRoZSB1cGNvbWluZyByZXN1bWUgd2lsbCBub3QgZmxvdy5cbiAgICBzdGF0ZS5mbG93aW5nID0gdHJ1ZTtcblxuICAgIC8vIGNydWRlIHdheSB0byBjaGVjayBpZiB3ZSBzaG91bGQgcmVzdW1lXG4gIH0gZWxzZSBpZiAoc2VsZi5saXN0ZW5lckNvdW50KCdkYXRhJykgPiAwKSB7XG4gICAgc2VsZi5yZXN1bWUoKTtcbiAgfVxufVxuZnVuY3Rpb24gblJlYWRpbmdOZXh0VGljayhzZWxmKSB7XG4gIGRlYnVnKCdyZWFkYWJsZSBuZXh0dGljayByZWFkIDAnKTtcbiAgc2VsZi5yZWFkKDApO1xufVxuXG4vLyBwYXVzZSgpIGFuZCByZXN1bWUoKSBhcmUgcmVtbmFudHMgb2YgdGhlIGxlZ2FjeSByZWFkYWJsZSBzdHJlYW0gQVBJXG4vLyBJZiB0aGUgdXNlciB1c2VzIHRoZW0sIHRoZW4gc3dpdGNoIGludG8gb2xkIG1vZGUuXG5SZWFkYWJsZS5wcm90b3R5cGUucmVzdW1lID0gZnVuY3Rpb24gKCkge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9yZWFkYWJsZVN0YXRlO1xuICBpZiAoIXN0YXRlLmZsb3dpbmcpIHtcbiAgICBkZWJ1ZygncmVzdW1lJyk7XG4gICAgLy8gd2UgZmxvdyBvbmx5IGlmIHRoZXJlIGlzIG5vIG9uZSBsaXN0ZW5pbmdcbiAgICAvLyBmb3IgcmVhZGFibGUsIGJ1dCB3ZSBzdGlsbCBoYXZlIHRvIGNhbGxcbiAgICAvLyByZXN1bWUoKVxuICAgIHN0YXRlLmZsb3dpbmcgPSAhc3RhdGUucmVhZGFibGVMaXN0ZW5pbmc7XG4gICAgcmVzdW1lKHRoaXMsIHN0YXRlKTtcbiAgfVxuICBzdGF0ZS5wYXVzZWQgPSBmYWxzZTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuZnVuY3Rpb24gcmVzdW1lKHN0cmVhbSwgc3RhdGUpIHtcbiAgaWYgKCFzdGF0ZS5yZXN1bWVTY2hlZHVsZWQpIHtcbiAgICBzdGF0ZS5yZXN1bWVTY2hlZHVsZWQgPSB0cnVlO1xuICAgIHByb2Nlc3MubmV4dFRpY2socmVzdW1lXywgc3RyZWFtLCBzdGF0ZSk7XG4gIH1cbn1cbmZ1bmN0aW9uIHJlc3VtZV8oc3RyZWFtLCBzdGF0ZSkge1xuICBkZWJ1ZygncmVzdW1lJywgc3RhdGUucmVhZGluZyk7XG4gIGlmICghc3RhdGUucmVhZGluZykge1xuICAgIHN0cmVhbS5yZWFkKDApO1xuICB9XG4gIHN0YXRlLnJlc3VtZVNjaGVkdWxlZCA9IGZhbHNlO1xuICBzdHJlYW0uZW1pdCgncmVzdW1lJyk7XG4gIGZsb3coc3RyZWFtKTtcbiAgaWYgKHN0YXRlLmZsb3dpbmcgJiYgIXN0YXRlLnJlYWRpbmcpIHN0cmVhbS5yZWFkKDApO1xufVxuUmVhZGFibGUucHJvdG90eXBlLnBhdXNlID0gZnVuY3Rpb24gKCkge1xuICBkZWJ1ZygnY2FsbCBwYXVzZSBmbG93aW5nPSVqJywgdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nKTtcbiAgaWYgKHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyAhPT0gZmFsc2UpIHtcbiAgICBkZWJ1ZygncGF1c2UnKTtcbiAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcgPSBmYWxzZTtcbiAgICB0aGlzLmVtaXQoJ3BhdXNlJyk7XG4gIH1cbiAgdGhpcy5fcmVhZGFibGVTdGF0ZS5wYXVzZWQgPSB0cnVlO1xuICByZXR1cm4gdGhpcztcbn07XG5mdW5jdGlvbiBmbG93KHN0cmVhbSkge1xuICB2YXIgc3RhdGUgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGU7XG4gIGRlYnVnKCdmbG93Jywgc3RhdGUuZmxvd2luZyk7XG4gIHdoaWxlIChzdGF0ZS5mbG93aW5nICYmIHN0cmVhbS5yZWFkKCkgIT09IG51bGwpO1xufVxuXG4vLyB3cmFwIGFuIG9sZC1zdHlsZSBzdHJlYW0gYXMgdGhlIGFzeW5jIGRhdGEgc291cmNlLlxuLy8gVGhpcyBpcyAqbm90KiBwYXJ0IG9mIHRoZSByZWFkYWJsZSBzdHJlYW0gaW50ZXJmYWNlLlxuLy8gSXQgaXMgYW4gdWdseSB1bmZvcnR1bmF0ZSBtZXNzIG9mIGhpc3RvcnkuXG5SZWFkYWJsZS5wcm90b3R5cGUud3JhcCA9IGZ1bmN0aW9uIChzdHJlYW0pIHtcbiAgdmFyIF90aGlzID0gdGhpcztcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcbiAgdmFyIHBhdXNlZCA9IGZhbHNlO1xuICBzdHJlYW0ub24oJ2VuZCcsIGZ1bmN0aW9uICgpIHtcbiAgICBkZWJ1Zygnd3JhcHBlZCBlbmQnKTtcbiAgICBpZiAoc3RhdGUuZGVjb2RlciAmJiAhc3RhdGUuZW5kZWQpIHtcbiAgICAgIHZhciBjaHVuayA9IHN0YXRlLmRlY29kZXIuZW5kKCk7XG4gICAgICBpZiAoY2h1bmsgJiYgY2h1bmsubGVuZ3RoKSBfdGhpcy5wdXNoKGNodW5rKTtcbiAgICB9XG4gICAgX3RoaXMucHVzaChudWxsKTtcbiAgfSk7XG4gIHN0cmVhbS5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykge1xuICAgIGRlYnVnKCd3cmFwcGVkIGRhdGEnKTtcbiAgICBpZiAoc3RhdGUuZGVjb2RlcikgY2h1bmsgPSBzdGF0ZS5kZWNvZGVyLndyaXRlKGNodW5rKTtcblxuICAgIC8vIGRvbid0IHNraXAgb3ZlciBmYWxzeSB2YWx1ZXMgaW4gb2JqZWN0TW9kZVxuICAgIGlmIChzdGF0ZS5vYmplY3RNb2RlICYmIChjaHVuayA9PT0gbnVsbCB8fCBjaHVuayA9PT0gdW5kZWZpbmVkKSkgcmV0dXJuO2Vsc2UgaWYgKCFzdGF0ZS5vYmplY3RNb2RlICYmICghY2h1bmsgfHwgIWNodW5rLmxlbmd0aCkpIHJldHVybjtcbiAgICB2YXIgcmV0ID0gX3RoaXMucHVzaChjaHVuayk7XG4gICAgaWYgKCFyZXQpIHtcbiAgICAgIHBhdXNlZCA9IHRydWU7XG4gICAgICBzdHJlYW0ucGF1c2UoKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIHByb3h5IGFsbCB0aGUgb3RoZXIgbWV0aG9kcy5cbiAgLy8gaW1wb3J0YW50IHdoZW4gd3JhcHBpbmcgZmlsdGVycyBhbmQgZHVwbGV4ZXMuXG4gIGZvciAodmFyIGkgaW4gc3RyZWFtKSB7XG4gICAgaWYgKHRoaXNbaV0gPT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygc3RyZWFtW2ldID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzW2ldID0gZnVuY3Rpb24gbWV0aG9kV3JhcChtZXRob2QpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIG1ldGhvZFdyYXBSZXR1cm5GdW5jdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gc3RyZWFtW21ldGhvZF0uYXBwbHkoc3RyZWFtLCBhcmd1bWVudHMpO1xuICAgICAgICB9O1xuICAgICAgfShpKTtcbiAgICB9XG4gIH1cblxuICAvLyBwcm94eSBjZXJ0YWluIGltcG9ydGFudCBldmVudHMuXG4gIGZvciAodmFyIG4gPSAwOyBuIDwga1Byb3h5RXZlbnRzLmxlbmd0aDsgbisrKSB7XG4gICAgc3RyZWFtLm9uKGtQcm94eUV2ZW50c1tuXSwgdGhpcy5lbWl0LmJpbmQodGhpcywga1Byb3h5RXZlbnRzW25dKSk7XG4gIH1cblxuICAvLyB3aGVuIHdlIHRyeSB0byBjb25zdW1lIHNvbWUgbW9yZSBieXRlcywgc2ltcGx5IHVucGF1c2UgdGhlXG4gIC8vIHVuZGVybHlpbmcgc3RyZWFtLlxuICB0aGlzLl9yZWFkID0gZnVuY3Rpb24gKG4pIHtcbiAgICBkZWJ1Zygnd3JhcHBlZCBfcmVhZCcsIG4pO1xuICAgIGlmIChwYXVzZWQpIHtcbiAgICAgIHBhdXNlZCA9IGZhbHNlO1xuICAgICAgc3RyZWFtLnJlc3VtZSgpO1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuaWYgKHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicpIHtcbiAgUmVhZGFibGUucHJvdG90eXBlW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoY3JlYXRlUmVhZGFibGVTdHJlYW1Bc3luY0l0ZXJhdG9yID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNyZWF0ZVJlYWRhYmxlU3RyZWFtQXN5bmNJdGVyYXRvciA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvc3RyZWFtcy9hc3luY19pdGVyYXRvcicpO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlUmVhZGFibGVTdHJlYW1Bc3luY0l0ZXJhdG9yKHRoaXMpO1xuICB9O1xufVxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlYWRhYmxlLnByb3RvdHlwZSwgJ3JlYWRhYmxlSGlnaFdhdGVyTWFyaycsIHtcbiAgLy8gbWFraW5nIGl0IGV4cGxpY2l0IHRoaXMgcHJvcGVydHkgaXMgbm90IGVudW1lcmFibGVcbiAgLy8gYmVjYXVzZSBvdGhlcndpc2Ugc29tZSBwcm90b3R5cGUgbWFuaXB1bGF0aW9uIGluXG4gIC8vIHVzZXJsYW5kIHdpbGwgZmFpbFxuICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUuaGlnaFdhdGVyTWFyaztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoUmVhZGFibGUucHJvdG90eXBlLCAncmVhZGFibGVCdWZmZXInLCB7XG4gIC8vIG1ha2luZyBpdCBleHBsaWNpdCB0aGlzIHByb3BlcnR5IGlzIG5vdCBlbnVtZXJhYmxlXG4gIC8vIGJlY2F1c2Ugb3RoZXJ3aXNlIHNvbWUgcHJvdG90eXBlIG1hbmlwdWxhdGlvbiBpblxuICAvLyB1c2VybGFuZCB3aWxsIGZhaWxcbiAgZW51bWVyYWJsZTogZmFsc2UsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlICYmIHRoaXMuX3JlYWRhYmxlU3RhdGUuYnVmZmVyO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShSZWFkYWJsZS5wcm90b3R5cGUsICdyZWFkYWJsZUZsb3dpbmcnLCB7XG4gIC8vIG1ha2luZyBpdCBleHBsaWNpdCB0aGlzIHByb3BlcnR5IGlzIG5vdCBlbnVtZXJhYmxlXG4gIC8vIGJlY2F1c2Ugb3RoZXJ3aXNlIHNvbWUgcHJvdG90eXBlIG1hbmlwdWxhdGlvbiBpblxuICAvLyB1c2VybGFuZCB3aWxsIGZhaWxcbiAgZW51bWVyYWJsZTogZmFsc2UsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmc7XG4gIH0sXG4gIHNldDogZnVuY3Rpb24gc2V0KHN0YXRlKSB7XG4gICAgaWYgKHRoaXMuX3JlYWRhYmxlU3RhdGUpIHtcbiAgICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyA9IHN0YXRlO1xuICAgIH1cbiAgfVxufSk7XG5cbi8vIGV4cG9zZWQgZm9yIHRlc3RpbmcgcHVycG9zZXMgb25seS5cblJlYWRhYmxlLl9mcm9tTGlzdCA9IGZyb21MaXN0O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlYWRhYmxlLnByb3RvdHlwZSwgJ3JlYWRhYmxlTGVuZ3RoJywge1xuICAvLyBtYWtpbmcgaXQgZXhwbGljaXQgdGhpcyBwcm9wZXJ0eSBpcyBub3QgZW51bWVyYWJsZVxuICAvLyBiZWNhdXNlIG90aGVyd2lzZSBzb21lIHByb3RvdHlwZSBtYW5pcHVsYXRpb24gaW5cbiAgLy8gdXNlcmxhbmQgd2lsbCBmYWlsXG4gIGVudW1lcmFibGU6IGZhbHNlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5sZW5ndGg7XG4gIH1cbn0pO1xuXG4vLyBQbHVjayBvZmYgbiBieXRlcyBmcm9tIGFuIGFycmF5IG9mIGJ1ZmZlcnMuXG4vLyBMZW5ndGggaXMgdGhlIGNvbWJpbmVkIGxlbmd0aHMgb2YgYWxsIHRoZSBidWZmZXJzIGluIHRoZSBsaXN0LlxuLy8gVGhpcyBmdW5jdGlvbiBpcyBkZXNpZ25lZCB0byBiZSBpbmxpbmFibGUsIHNvIHBsZWFzZSB0YWtlIGNhcmUgd2hlbiBtYWtpbmdcbi8vIGNoYW5nZXMgdG8gdGhlIGZ1bmN0aW9uIGJvZHkuXG5mdW5jdGlvbiBmcm9tTGlzdChuLCBzdGF0ZSkge1xuICAvLyBub3RoaW5nIGJ1ZmZlcmVkXG4gIGlmIChzdGF0ZS5sZW5ndGggPT09IDApIHJldHVybiBudWxsO1xuICB2YXIgcmV0O1xuICBpZiAoc3RhdGUub2JqZWN0TW9kZSkgcmV0ID0gc3RhdGUuYnVmZmVyLnNoaWZ0KCk7ZWxzZSBpZiAoIW4gfHwgbiA+PSBzdGF0ZS5sZW5ndGgpIHtcbiAgICAvLyByZWFkIGl0IGFsbCwgdHJ1bmNhdGUgdGhlIGxpc3RcbiAgICBpZiAoc3RhdGUuZGVjb2RlcikgcmV0ID0gc3RhdGUuYnVmZmVyLmpvaW4oJycpO2Vsc2UgaWYgKHN0YXRlLmJ1ZmZlci5sZW5ndGggPT09IDEpIHJldCA9IHN0YXRlLmJ1ZmZlci5maXJzdCgpO2Vsc2UgcmV0ID0gc3RhdGUuYnVmZmVyLmNvbmNhdChzdGF0ZS5sZW5ndGgpO1xuICAgIHN0YXRlLmJ1ZmZlci5jbGVhcigpO1xuICB9IGVsc2Uge1xuICAgIC8vIHJlYWQgcGFydCBvZiBsaXN0XG4gICAgcmV0ID0gc3RhdGUuYnVmZmVyLmNvbnN1bWUobiwgc3RhdGUuZGVjb2Rlcik7XG4gIH1cbiAgcmV0dXJuIHJldDtcbn1cbmZ1bmN0aW9uIGVuZFJlYWRhYmxlKHN0cmVhbSkge1xuICB2YXIgc3RhdGUgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGU7XG4gIGRlYnVnKCdlbmRSZWFkYWJsZScsIHN0YXRlLmVuZEVtaXR0ZWQpO1xuICBpZiAoIXN0YXRlLmVuZEVtaXR0ZWQpIHtcbiAgICBzdGF0ZS5lbmRlZCA9IHRydWU7XG4gICAgcHJvY2Vzcy5uZXh0VGljayhlbmRSZWFkYWJsZU5ULCBzdGF0ZSwgc3RyZWFtKTtcbiAgfVxufVxuZnVuY3Rpb24gZW5kUmVhZGFibGVOVChzdGF0ZSwgc3RyZWFtKSB7XG4gIGRlYnVnKCdlbmRSZWFkYWJsZU5UJywgc3RhdGUuZW5kRW1pdHRlZCwgc3RhdGUubGVuZ3RoKTtcblxuICAvLyBDaGVjayB0aGF0IHdlIGRpZG4ndCBnZXQgb25lIGxhc3QgdW5zaGlmdC5cbiAgaWYgKCFzdGF0ZS5lbmRFbWl0dGVkICYmIHN0YXRlLmxlbmd0aCA9PT0gMCkge1xuICAgIHN0YXRlLmVuZEVtaXR0ZWQgPSB0cnVlO1xuICAgIHN0cmVhbS5yZWFkYWJsZSA9IGZhbHNlO1xuICAgIHN0cmVhbS5lbWl0KCdlbmQnKTtcbiAgICBpZiAoc3RhdGUuYXV0b0Rlc3Ryb3kpIHtcbiAgICAgIC8vIEluIGNhc2Ugb2YgZHVwbGV4IHN0cmVhbXMgd2UgbmVlZCBhIHdheSB0byBkZXRlY3RcbiAgICAgIC8vIGlmIHRoZSB3cml0YWJsZSBzaWRlIGlzIHJlYWR5IGZvciBhdXRvRGVzdHJveSBhcyB3ZWxsXG4gICAgICB2YXIgd1N0YXRlID0gc3RyZWFtLl93cml0YWJsZVN0YXRlO1xuICAgICAgaWYgKCF3U3RhdGUgfHwgd1N0YXRlLmF1dG9EZXN0cm95ICYmIHdTdGF0ZS5maW5pc2hlZCkge1xuICAgICAgICBzdHJlYW0uZGVzdHJveSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuaWYgKHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicpIHtcbiAgUmVhZGFibGUuZnJvbSA9IGZ1bmN0aW9uIChpdGVyYWJsZSwgb3B0cykge1xuICAgIGlmIChmcm9tID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGZyb20gPSByZXF1aXJlKCcuL2ludGVybmFsL3N0cmVhbXMvZnJvbScpO1xuICAgIH1cbiAgICByZXR1cm4gZnJvbShSZWFkYWJsZSwgaXRlcmFibGUsIG9wdHMpO1xuICB9O1xufVxuZnVuY3Rpb24gaW5kZXhPZih4cywgeCkge1xuICBmb3IgKHZhciBpID0gMCwgbCA9IHhzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGlmICh4c1tpXSA9PT0geCkgcmV0dXJuIGk7XG4gIH1cbiAgcmV0dXJuIC0xO1xufSIsICIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuLy8gYSB0cmFuc2Zvcm0gc3RyZWFtIGlzIGEgcmVhZGFibGUvd3JpdGFibGUgc3RyZWFtIHdoZXJlIHlvdSBkb1xuLy8gc29tZXRoaW5nIHdpdGggdGhlIGRhdGEuICBTb21ldGltZXMgaXQncyBjYWxsZWQgYSBcImZpbHRlclwiLFxuLy8gYnV0IHRoYXQncyBub3QgYSBncmVhdCBuYW1lIGZvciBpdCwgc2luY2UgdGhhdCBpbXBsaWVzIGEgdGhpbmcgd2hlcmVcbi8vIHNvbWUgYml0cyBwYXNzIHRocm91Z2gsIGFuZCBvdGhlcnMgYXJlIHNpbXBseSBpZ25vcmVkLiAgKFRoYXQgd291bGRcbi8vIGJlIGEgdmFsaWQgZXhhbXBsZSBvZiBhIHRyYW5zZm9ybSwgb2YgY291cnNlLilcbi8vXG4vLyBXaGlsZSB0aGUgb3V0cHV0IGlzIGNhdXNhbGx5IHJlbGF0ZWQgdG8gdGhlIGlucHV0LCBpdCdzIG5vdCBhXG4vLyBuZWNlc3NhcmlseSBzeW1tZXRyaWMgb3Igc3luY2hyb25vdXMgdHJhbnNmb3JtYXRpb24uICBGb3IgZXhhbXBsZSxcbi8vIGEgemxpYiBzdHJlYW0gbWlnaHQgdGFrZSBtdWx0aXBsZSBwbGFpbi10ZXh0IHdyaXRlcygpLCBhbmQgdGhlblxuLy8gZW1pdCBhIHNpbmdsZSBjb21wcmVzc2VkIGNodW5rIHNvbWUgdGltZSBpbiB0aGUgZnV0dXJlLlxuLy9cbi8vIEhlcmUncyBob3cgdGhpcyB3b3Jrczpcbi8vXG4vLyBUaGUgVHJhbnNmb3JtIHN0cmVhbSBoYXMgYWxsIHRoZSBhc3BlY3RzIG9mIHRoZSByZWFkYWJsZSBhbmQgd3JpdGFibGVcbi8vIHN0cmVhbSBjbGFzc2VzLiAgV2hlbiB5b3Ugd3JpdGUoY2h1bmspLCB0aGF0IGNhbGxzIF93cml0ZShjaHVuayxjYilcbi8vIGludGVybmFsbHksIGFuZCByZXR1cm5zIGZhbHNlIGlmIHRoZXJlJ3MgYSBsb3Qgb2YgcGVuZGluZyB3cml0ZXNcbi8vIGJ1ZmZlcmVkIHVwLiAgV2hlbiB5b3UgY2FsbCByZWFkKCksIHRoYXQgY2FsbHMgX3JlYWQobikgdW50aWxcbi8vIHRoZXJlJ3MgZW5vdWdoIHBlbmRpbmcgcmVhZGFibGUgZGF0YSBidWZmZXJlZCB1cC5cbi8vXG4vLyBJbiBhIHRyYW5zZm9ybSBzdHJlYW0sIHRoZSB3cml0dGVuIGRhdGEgaXMgcGxhY2VkIGluIGEgYnVmZmVyLiAgV2hlblxuLy8gX3JlYWQobikgaXMgY2FsbGVkLCBpdCB0cmFuc2Zvcm1zIHRoZSBxdWV1ZWQgdXAgZGF0YSwgY2FsbGluZyB0aGVcbi8vIGJ1ZmZlcmVkIF93cml0ZSBjYidzIGFzIGl0IGNvbnN1bWVzIGNodW5rcy4gIElmIGNvbnN1bWluZyBhIHNpbmdsZVxuLy8gd3JpdHRlbiBjaHVuayB3b3VsZCByZXN1bHQgaW4gbXVsdGlwbGUgb3V0cHV0IGNodW5rcywgdGhlbiB0aGUgZmlyc3Rcbi8vIG91dHB1dHRlZCBiaXQgY2FsbHMgdGhlIHJlYWRjYiwgYW5kIHN1YnNlcXVlbnQgY2h1bmtzIGp1c3QgZ28gaW50b1xuLy8gdGhlIHJlYWQgYnVmZmVyLCBhbmQgd2lsbCBjYXVzZSBpdCB0byBlbWl0ICdyZWFkYWJsZScgaWYgbmVjZXNzYXJ5LlxuLy9cbi8vIFRoaXMgd2F5LCBiYWNrLXByZXNzdXJlIGlzIGFjdHVhbGx5IGRldGVybWluZWQgYnkgdGhlIHJlYWRpbmcgc2lkZSxcbi8vIHNpbmNlIF9yZWFkIGhhcyB0byBiZSBjYWxsZWQgdG8gc3RhcnQgcHJvY2Vzc2luZyBhIG5ldyBjaHVuay4gIEhvd2V2ZXIsXG4vLyBhIHBhdGhvbG9naWNhbCBpbmZsYXRlIHR5cGUgb2YgdHJhbnNmb3JtIGNhbiBjYXVzZSBleGNlc3NpdmUgYnVmZmVyaW5nXG4vLyBoZXJlLiAgRm9yIGV4YW1wbGUsIGltYWdpbmUgYSBzdHJlYW0gd2hlcmUgZXZlcnkgYnl0ZSBvZiBpbnB1dCBpc1xuLy8gaW50ZXJwcmV0ZWQgYXMgYW4gaW50ZWdlciBmcm9tIDAtMjU1LCBhbmQgdGhlbiByZXN1bHRzIGluIHRoYXQgbWFueVxuLy8gYnl0ZXMgb2Ygb3V0cHV0LiAgV3JpdGluZyB0aGUgNCBieXRlcyB7ZmYsZmYsZmYsZmZ9IHdvdWxkIHJlc3VsdCBpblxuLy8gMWtiIG9mIGRhdGEgYmVpbmcgb3V0cHV0LiAgSW4gdGhpcyBjYXNlLCB5b3UgY291bGQgd3JpdGUgYSB2ZXJ5IHNtYWxsXG4vLyBhbW91bnQgb2YgaW5wdXQsIGFuZCBlbmQgdXAgd2l0aCBhIHZlcnkgbGFyZ2UgYW1vdW50IG9mIG91dHB1dC4gIEluXG4vLyBzdWNoIGEgcGF0aG9sb2dpY2FsIGluZmxhdGluZyBtZWNoYW5pc20sIHRoZXJlJ2QgYmUgbm8gd2F5IHRvIHRlbGxcbi8vIHRoZSBzeXN0ZW0gdG8gc3RvcCBkb2luZyB0aGUgdHJhbnNmb3JtLiAgQSBzaW5nbGUgNE1CIHdyaXRlIGNvdWxkXG4vLyBjYXVzZSB0aGUgc3lzdGVtIHRvIHJ1biBvdXQgb2YgbWVtb3J5LlxuLy9cbi8vIEhvd2V2ZXIsIGV2ZW4gaW4gc3VjaCBhIHBhdGhvbG9naWNhbCBjYXNlLCBvbmx5IGEgc2luZ2xlIHdyaXR0ZW4gY2h1bmtcbi8vIHdvdWxkIGJlIGNvbnN1bWVkLCBhbmQgdGhlbiB0aGUgcmVzdCB3b3VsZCB3YWl0ICh1bi10cmFuc2Zvcm1lZCkgdW50aWxcbi8vIHRoZSByZXN1bHRzIG9mIHRoZSBwcmV2aW91cyB0cmFuc2Zvcm1lZCBjaHVuayB3ZXJlIGNvbnN1bWVkLlxuXG4ndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gVHJhbnNmb3JtO1xudmFyIF9yZXF1aXJlJGNvZGVzID0gcmVxdWlyZSgnLi4vZXJyb3JzJykuY29kZXMsXG4gIEVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVEID0gX3JlcXVpcmUkY29kZXMuRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQsXG4gIEVSUl9NVUxUSVBMRV9DQUxMQkFDSyA9IF9yZXF1aXJlJGNvZGVzLkVSUl9NVUxUSVBMRV9DQUxMQkFDSyxcbiAgRVJSX1RSQU5TRk9STV9BTFJFQURZX1RSQU5TRk9STUlORyA9IF9yZXF1aXJlJGNvZGVzLkVSUl9UUkFOU0ZPUk1fQUxSRUFEWV9UUkFOU0ZPUk1JTkcsXG4gIEVSUl9UUkFOU0ZPUk1fV0lUSF9MRU5HVEhfMCA9IF9yZXF1aXJlJGNvZGVzLkVSUl9UUkFOU0ZPUk1fV0lUSF9MRU5HVEhfMDtcbnZhciBEdXBsZXggPSByZXF1aXJlKCcuL19zdHJlYW1fZHVwbGV4Jyk7XG5yZXF1aXJlKCdpbmhlcml0cycpKFRyYW5zZm9ybSwgRHVwbGV4KTtcbmZ1bmN0aW9uIGFmdGVyVHJhbnNmb3JtKGVyLCBkYXRhKSB7XG4gIHZhciB0cyA9IHRoaXMuX3RyYW5zZm9ybVN0YXRlO1xuICB0cy50cmFuc2Zvcm1pbmcgPSBmYWxzZTtcbiAgdmFyIGNiID0gdHMud3JpdGVjYjtcbiAgaWYgKGNiID09PSBudWxsKSB7XG4gICAgcmV0dXJuIHRoaXMuZW1pdCgnZXJyb3InLCBuZXcgRVJSX01VTFRJUExFX0NBTExCQUNLKCkpO1xuICB9XG4gIHRzLndyaXRlY2h1bmsgPSBudWxsO1xuICB0cy53cml0ZWNiID0gbnVsbDtcbiAgaWYgKGRhdGEgIT0gbnVsbClcbiAgICAvLyBzaW5nbGUgZXF1YWxzIGNoZWNrIGZvciBib3RoIGBudWxsYCBhbmQgYHVuZGVmaW5lZGBcbiAgICB0aGlzLnB1c2goZGF0YSk7XG4gIGNiKGVyKTtcbiAgdmFyIHJzID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcbiAgcnMucmVhZGluZyA9IGZhbHNlO1xuICBpZiAocnMubmVlZFJlYWRhYmxlIHx8IHJzLmxlbmd0aCA8IHJzLmhpZ2hXYXRlck1hcmspIHtcbiAgICB0aGlzLl9yZWFkKHJzLmhpZ2hXYXRlck1hcmspO1xuICB9XG59XG5mdW5jdGlvbiBUcmFuc2Zvcm0ob3B0aW9ucykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgVHJhbnNmb3JtKSkgcmV0dXJuIG5ldyBUcmFuc2Zvcm0ob3B0aW9ucyk7XG4gIER1cGxleC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuICB0aGlzLl90cmFuc2Zvcm1TdGF0ZSA9IHtcbiAgICBhZnRlclRyYW5zZm9ybTogYWZ0ZXJUcmFuc2Zvcm0uYmluZCh0aGlzKSxcbiAgICBuZWVkVHJhbnNmb3JtOiBmYWxzZSxcbiAgICB0cmFuc2Zvcm1pbmc6IGZhbHNlLFxuICAgIHdyaXRlY2I6IG51bGwsXG4gICAgd3JpdGVjaHVuazogbnVsbCxcbiAgICB3cml0ZWVuY29kaW5nOiBudWxsXG4gIH07XG5cbiAgLy8gc3RhcnQgb3V0IGFza2luZyBmb3IgYSByZWFkYWJsZSBldmVudCBvbmNlIGRhdGEgaXMgdHJhbnNmb3JtZWQuXG4gIHRoaXMuX3JlYWRhYmxlU3RhdGUubmVlZFJlYWRhYmxlID0gdHJ1ZTtcblxuICAvLyB3ZSBoYXZlIGltcGxlbWVudGVkIHRoZSBfcmVhZCBtZXRob2QsIGFuZCBkb25lIHRoZSBvdGhlciB0aGluZ3NcbiAgLy8gdGhhdCBSZWFkYWJsZSB3YW50cyBiZWZvcmUgdGhlIGZpcnN0IF9yZWFkIGNhbGwsIHNvIHVuc2V0IHRoZVxuICAvLyBzeW5jIGd1YXJkIGZsYWcuXG4gIHRoaXMuX3JlYWRhYmxlU3RhdGUuc3luYyA9IGZhbHNlO1xuICBpZiAob3B0aW9ucykge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy50cmFuc2Zvcm0gPT09ICdmdW5jdGlvbicpIHRoaXMuX3RyYW5zZm9ybSA9IG9wdGlvbnMudHJhbnNmb3JtO1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5mbHVzaCA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5fZmx1c2ggPSBvcHRpb25zLmZsdXNoO1xuICB9XG5cbiAgLy8gV2hlbiB0aGUgd3JpdGFibGUgc2lkZSBmaW5pc2hlcywgdGhlbiBmbHVzaCBvdXQgYW55dGhpbmcgcmVtYWluaW5nLlxuICB0aGlzLm9uKCdwcmVmaW5pc2gnLCBwcmVmaW5pc2gpO1xufVxuZnVuY3Rpb24gcHJlZmluaXNoKCkge1xuICB2YXIgX3RoaXMgPSB0aGlzO1xuICBpZiAodHlwZW9mIHRoaXMuX2ZsdXNoID09PSAnZnVuY3Rpb24nICYmICF0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZCkge1xuICAgIHRoaXMuX2ZsdXNoKGZ1bmN0aW9uIChlciwgZGF0YSkge1xuICAgICAgZG9uZShfdGhpcywgZXIsIGRhdGEpO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGRvbmUodGhpcywgbnVsbCwgbnVsbCk7XG4gIH1cbn1cblRyYW5zZm9ybS5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcpIHtcbiAgdGhpcy5fdHJhbnNmb3JtU3RhdGUubmVlZFRyYW5zZm9ybSA9IGZhbHNlO1xuICByZXR1cm4gRHVwbGV4LnByb3RvdHlwZS5wdXNoLmNhbGwodGhpcywgY2h1bmssIGVuY29kaW5nKTtcbn07XG5cbi8vIFRoaXMgaXMgdGhlIHBhcnQgd2hlcmUgeW91IGRvIHN0dWZmIVxuLy8gb3ZlcnJpZGUgdGhpcyBmdW5jdGlvbiBpbiBpbXBsZW1lbnRhdGlvbiBjbGFzc2VzLlxuLy8gJ2NodW5rJyBpcyBhbiBpbnB1dCBjaHVuay5cbi8vXG4vLyBDYWxsIGBwdXNoKG5ld0NodW5rKWAgdG8gcGFzcyBhbG9uZyB0cmFuc2Zvcm1lZCBvdXRwdXRcbi8vIHRvIHRoZSByZWFkYWJsZSBzaWRlLiAgWW91IG1heSBjYWxsICdwdXNoJyB6ZXJvIG9yIG1vcmUgdGltZXMuXG4vL1xuLy8gQ2FsbCBgY2IoZXJyKWAgd2hlbiB5b3UgYXJlIGRvbmUgd2l0aCB0aGlzIGNodW5rLiAgSWYgeW91IHBhc3Ncbi8vIGFuIGVycm9yLCB0aGVuIHRoYXQnbGwgcHV0IHRoZSBodXJ0IG9uIHRoZSB3aG9sZSBvcGVyYXRpb24uICBJZiB5b3Vcbi8vIG5ldmVyIGNhbGwgY2IoKSwgdGhlbiB5b3UnbGwgbmV2ZXIgZ2V0IGFub3RoZXIgY2h1bmsuXG5UcmFuc2Zvcm0ucHJvdG90eXBlLl90cmFuc2Zvcm0gPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICBjYihuZXcgRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQoJ190cmFuc2Zvcm0oKScpKTtcbn07XG5UcmFuc2Zvcm0ucHJvdG90eXBlLl93cml0ZSA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIHZhciB0cyA9IHRoaXMuX3RyYW5zZm9ybVN0YXRlO1xuICB0cy53cml0ZWNiID0gY2I7XG4gIHRzLndyaXRlY2h1bmsgPSBjaHVuaztcbiAgdHMud3JpdGVlbmNvZGluZyA9IGVuY29kaW5nO1xuICBpZiAoIXRzLnRyYW5zZm9ybWluZykge1xuICAgIHZhciBycyA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG4gICAgaWYgKHRzLm5lZWRUcmFuc2Zvcm0gfHwgcnMubmVlZFJlYWRhYmxlIHx8IHJzLmxlbmd0aCA8IHJzLmhpZ2hXYXRlck1hcmspIHRoaXMuX3JlYWQocnMuaGlnaFdhdGVyTWFyayk7XG4gIH1cbn07XG5cbi8vIERvZXNuJ3QgbWF0dGVyIHdoYXQgdGhlIGFyZ3MgYXJlIGhlcmUuXG4vLyBfdHJhbnNmb3JtIGRvZXMgYWxsIHRoZSB3b3JrLlxuLy8gVGhhdCB3ZSBnb3QgaGVyZSBtZWFucyB0aGF0IHRoZSByZWFkYWJsZSBzaWRlIHdhbnRzIG1vcmUgZGF0YS5cblRyYW5zZm9ybS5wcm90b3R5cGUuX3JlYWQgPSBmdW5jdGlvbiAobikge1xuICB2YXIgdHMgPSB0aGlzLl90cmFuc2Zvcm1TdGF0ZTtcbiAgaWYgKHRzLndyaXRlY2h1bmsgIT09IG51bGwgJiYgIXRzLnRyYW5zZm9ybWluZykge1xuICAgIHRzLnRyYW5zZm9ybWluZyA9IHRydWU7XG4gICAgdGhpcy5fdHJhbnNmb3JtKHRzLndyaXRlY2h1bmssIHRzLndyaXRlZW5jb2RpbmcsIHRzLmFmdGVyVHJhbnNmb3JtKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBtYXJrIHRoYXQgd2UgbmVlZCBhIHRyYW5zZm9ybSwgc28gdGhhdCBhbnkgZGF0YSB0aGF0IGNvbWVzIGluXG4gICAgLy8gd2lsbCBnZXQgcHJvY2Vzc2VkLCBub3cgdGhhdCB3ZSd2ZSBhc2tlZCBmb3IgaXQuXG4gICAgdHMubmVlZFRyYW5zZm9ybSA9IHRydWU7XG4gIH1cbn07XG5UcmFuc2Zvcm0ucHJvdG90eXBlLl9kZXN0cm95ID0gZnVuY3Rpb24gKGVyciwgY2IpIHtcbiAgRHVwbGV4LnByb3RvdHlwZS5fZGVzdHJveS5jYWxsKHRoaXMsIGVyciwgZnVuY3Rpb24gKGVycjIpIHtcbiAgICBjYihlcnIyKTtcbiAgfSk7XG59O1xuZnVuY3Rpb24gZG9uZShzdHJlYW0sIGVyLCBkYXRhKSB7XG4gIGlmIChlcikgcmV0dXJuIHN0cmVhbS5lbWl0KCdlcnJvcicsIGVyKTtcbiAgaWYgKGRhdGEgIT0gbnVsbClcbiAgICAvLyBzaW5nbGUgZXF1YWxzIGNoZWNrIGZvciBib3RoIGBudWxsYCBhbmQgYHVuZGVmaW5lZGBcbiAgICBzdHJlYW0ucHVzaChkYXRhKTtcblxuICAvLyBUT0RPKEJyaWRnZUFSKTogV3JpdGUgYSB0ZXN0IGZvciB0aGVzZSB0d28gZXJyb3IgY2FzZXNcbiAgLy8gaWYgdGhlcmUncyBub3RoaW5nIGluIHRoZSB3cml0ZSBidWZmZXIsIHRoZW4gdGhhdCBtZWFuc1xuICAvLyB0aGF0IG5vdGhpbmcgbW9yZSB3aWxsIGV2ZXIgYmUgcHJvdmlkZWRcbiAgaWYgKHN0cmVhbS5fd3JpdGFibGVTdGF0ZS5sZW5ndGgpIHRocm93IG5ldyBFUlJfVFJBTlNGT1JNX1dJVEhfTEVOR1RIXzAoKTtcbiAgaWYgKHN0cmVhbS5fdHJhbnNmb3JtU3RhdGUudHJhbnNmb3JtaW5nKSB0aHJvdyBuZXcgRVJSX1RSQU5TRk9STV9BTFJFQURZX1RSQU5TRk9STUlORygpO1xuICByZXR1cm4gc3RyZWFtLnB1c2gobnVsbCk7XG59IiwgIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4vLyBhIHBhc3N0aHJvdWdoIHN0cmVhbS5cbi8vIGJhc2ljYWxseSBqdXN0IHRoZSBtb3N0IG1pbmltYWwgc29ydCBvZiBUcmFuc2Zvcm0gc3RyZWFtLlxuLy8gRXZlcnkgd3JpdHRlbiBjaHVuayBnZXRzIG91dHB1dCBhcy1pcy5cblxuJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFBhc3NUaHJvdWdoO1xudmFyIFRyYW5zZm9ybSA9IHJlcXVpcmUoJy4vX3N0cmVhbV90cmFuc2Zvcm0nKTtcbnJlcXVpcmUoJ2luaGVyaXRzJykoUGFzc1Rocm91Z2gsIFRyYW5zZm9ybSk7XG5mdW5jdGlvbiBQYXNzVGhyb3VnaChvcHRpb25zKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBQYXNzVGhyb3VnaCkpIHJldHVybiBuZXcgUGFzc1Rocm91Z2gob3B0aW9ucyk7XG4gIFRyYW5zZm9ybS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xufVxuUGFzc1Rocm91Z2gucHJvdG90eXBlLl90cmFuc2Zvcm0gPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICBjYihudWxsLCBjaHVuayk7XG59OyIsICIvLyBQb3J0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbWFmaW50b3NoL3B1bXAgd2l0aFxuLy8gcGVybWlzc2lvbiBmcm9tIHRoZSBhdXRob3IsIE1hdGhpYXMgQnV1cyAoQG1hZmludG9zaCkuXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIGVvcztcbmZ1bmN0aW9uIG9uY2UoY2FsbGJhY2spIHtcbiAgdmFyIGNhbGxlZCA9IGZhbHNlO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIGlmIChjYWxsZWQpIHJldHVybjtcbiAgICBjYWxsZWQgPSB0cnVlO1xuICAgIGNhbGxiYWNrLmFwcGx5KHZvaWQgMCwgYXJndW1lbnRzKTtcbiAgfTtcbn1cbnZhciBfcmVxdWlyZSRjb2RlcyA9IHJlcXVpcmUoJy4uLy4uLy4uL2Vycm9ycycpLmNvZGVzLFxuICBFUlJfTUlTU0lOR19BUkdTID0gX3JlcXVpcmUkY29kZXMuRVJSX01JU1NJTkdfQVJHUyxcbiAgRVJSX1NUUkVBTV9ERVNUUk9ZRUQgPSBfcmVxdWlyZSRjb2Rlcy5FUlJfU1RSRUFNX0RFU1RST1lFRDtcbmZ1bmN0aW9uIG5vb3AoZXJyKSB7XG4gIC8vIFJldGhyb3cgdGhlIGVycm9yIGlmIGl0IGV4aXN0cyB0byBhdm9pZCBzd2FsbG93aW5nIGl0XG4gIGlmIChlcnIpIHRocm93IGVycjtcbn1cbmZ1bmN0aW9uIGlzUmVxdWVzdChzdHJlYW0pIHtcbiAgcmV0dXJuIHN0cmVhbS5zZXRIZWFkZXIgJiYgdHlwZW9mIHN0cmVhbS5hYm9ydCA9PT0gJ2Z1bmN0aW9uJztcbn1cbmZ1bmN0aW9uIGRlc3Ryb3llcihzdHJlYW0sIHJlYWRpbmcsIHdyaXRpbmcsIGNhbGxiYWNrKSB7XG4gIGNhbGxiYWNrID0gb25jZShjYWxsYmFjayk7XG4gIHZhciBjbG9zZWQgPSBmYWxzZTtcbiAgc3RyZWFtLm9uKCdjbG9zZScsIGZ1bmN0aW9uICgpIHtcbiAgICBjbG9zZWQgPSB0cnVlO1xuICB9KTtcbiAgaWYgKGVvcyA9PT0gdW5kZWZpbmVkKSBlb3MgPSByZXF1aXJlKCcuL2VuZC1vZi1zdHJlYW0nKTtcbiAgZW9zKHN0cmVhbSwge1xuICAgIHJlYWRhYmxlOiByZWFkaW5nLFxuICAgIHdyaXRhYmxlOiB3cml0aW5nXG4gIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICBjbG9zZWQgPSB0cnVlO1xuICAgIGNhbGxiYWNrKCk7XG4gIH0pO1xuICB2YXIgZGVzdHJveWVkID0gZmFsc2U7XG4gIHJldHVybiBmdW5jdGlvbiAoZXJyKSB7XG4gICAgaWYgKGNsb3NlZCkgcmV0dXJuO1xuICAgIGlmIChkZXN0cm95ZWQpIHJldHVybjtcbiAgICBkZXN0cm95ZWQgPSB0cnVlO1xuXG4gICAgLy8gcmVxdWVzdC5kZXN0cm95IGp1c3QgZG8gLmVuZCAtIC5hYm9ydCBpcyB3aGF0IHdlIHdhbnRcbiAgICBpZiAoaXNSZXF1ZXN0KHN0cmVhbSkpIHJldHVybiBzdHJlYW0uYWJvcnQoKTtcbiAgICBpZiAodHlwZW9mIHN0cmVhbS5kZXN0cm95ID09PSAnZnVuY3Rpb24nKSByZXR1cm4gc3RyZWFtLmRlc3Ryb3koKTtcbiAgICBjYWxsYmFjayhlcnIgfHwgbmV3IEVSUl9TVFJFQU1fREVTVFJPWUVEKCdwaXBlJykpO1xuICB9O1xufVxuZnVuY3Rpb24gY2FsbChmbikge1xuICBmbigpO1xufVxuZnVuY3Rpb24gcGlwZShmcm9tLCB0bykge1xuICByZXR1cm4gZnJvbS5waXBlKHRvKTtcbn1cbmZ1bmN0aW9uIHBvcENhbGxiYWNrKHN0cmVhbXMpIHtcbiAgaWYgKCFzdHJlYW1zLmxlbmd0aCkgcmV0dXJuIG5vb3A7XG4gIGlmICh0eXBlb2Ygc3RyZWFtc1tzdHJlYW1zLmxlbmd0aCAtIDFdICE9PSAnZnVuY3Rpb24nKSByZXR1cm4gbm9vcDtcbiAgcmV0dXJuIHN0cmVhbXMucG9wKCk7XG59XG5mdW5jdGlvbiBwaXBlbGluZSgpIHtcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIHN0cmVhbXMgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgc3RyZWFtc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgfVxuICB2YXIgY2FsbGJhY2sgPSBwb3BDYWxsYmFjayhzdHJlYW1zKTtcbiAgaWYgKEFycmF5LmlzQXJyYXkoc3RyZWFtc1swXSkpIHN0cmVhbXMgPSBzdHJlYW1zWzBdO1xuICBpZiAoc3RyZWFtcy5sZW5ndGggPCAyKSB7XG4gICAgdGhyb3cgbmV3IEVSUl9NSVNTSU5HX0FSR1MoJ3N0cmVhbXMnKTtcbiAgfVxuICB2YXIgZXJyb3I7XG4gIHZhciBkZXN0cm95cyA9IHN0cmVhbXMubWFwKGZ1bmN0aW9uIChzdHJlYW0sIGkpIHtcbiAgICB2YXIgcmVhZGluZyA9IGkgPCBzdHJlYW1zLmxlbmd0aCAtIDE7XG4gICAgdmFyIHdyaXRpbmcgPSBpID4gMDtcbiAgICByZXR1cm4gZGVzdHJveWVyKHN0cmVhbSwgcmVhZGluZywgd3JpdGluZywgZnVuY3Rpb24gKGVycikge1xuICAgICAgaWYgKCFlcnJvcikgZXJyb3IgPSBlcnI7XG4gICAgICBpZiAoZXJyKSBkZXN0cm95cy5mb3JFYWNoKGNhbGwpO1xuICAgICAgaWYgKHJlYWRpbmcpIHJldHVybjtcbiAgICAgIGRlc3Ryb3lzLmZvckVhY2goY2FsbCk7XG4gICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgfSk7XG4gIH0pO1xuICByZXR1cm4gc3RyZWFtcy5yZWR1Y2UocGlwZSk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IHBpcGVsaW5lOyIsICJ2YXIgU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtJyk7XG5pZiAocHJvY2Vzcy5lbnYuUkVBREFCTEVfU1RSRUFNID09PSAnZGlzYWJsZScgJiYgU3RyZWFtKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gU3RyZWFtLlJlYWRhYmxlO1xuICBPYmplY3QuYXNzaWduKG1vZHVsZS5leHBvcnRzLCBTdHJlYW0pO1xuICBtb2R1bGUuZXhwb3J0cy5TdHJlYW0gPSBTdHJlYW07XG59IGVsc2Uge1xuICBleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2xpYi9fc3RyZWFtX3JlYWRhYmxlLmpzJyk7XG4gIGV4cG9ydHMuU3RyZWFtID0gU3RyZWFtIHx8IGV4cG9ydHM7XG4gIGV4cG9ydHMuUmVhZGFibGUgPSBleHBvcnRzO1xuICBleHBvcnRzLldyaXRhYmxlID0gcmVxdWlyZSgnLi9saWIvX3N0cmVhbV93cml0YWJsZS5qcycpO1xuICBleHBvcnRzLkR1cGxleCA9IHJlcXVpcmUoJy4vbGliL19zdHJlYW1fZHVwbGV4LmpzJyk7XG4gIGV4cG9ydHMuVHJhbnNmb3JtID0gcmVxdWlyZSgnLi9saWIvX3N0cmVhbV90cmFuc2Zvcm0uanMnKTtcbiAgZXhwb3J0cy5QYXNzVGhyb3VnaCA9IHJlcXVpcmUoJy4vbGliL19zdHJlYW1fcGFzc3Rocm91Z2guanMnKTtcbiAgZXhwb3J0cy5maW5pc2hlZCA9IHJlcXVpcmUoJy4vbGliL2ludGVybmFsL3N0cmVhbXMvZW5kLW9mLXN0cmVhbS5qcycpO1xuICBleHBvcnRzLnBpcGVsaW5lID0gcmVxdWlyZSgnLi9saWIvaW50ZXJuYWwvc3RyZWFtcy9waXBlbGluZS5qcycpO1xufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IEJ1ZmZlciB9ID0gcmVxdWlyZSgnYnVmZmVyJylcbmNvbnN0IHN5bWJvbCA9IFN5bWJvbC5mb3IoJ0J1ZmZlckxpc3QnKVxuXG5mdW5jdGlvbiBCdWZmZXJMaXN0IChidWYpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEJ1ZmZlckxpc3QpKSB7XG4gICAgcmV0dXJuIG5ldyBCdWZmZXJMaXN0KGJ1ZilcbiAgfVxuXG4gIEJ1ZmZlckxpc3QuX2luaXQuY2FsbCh0aGlzLCBidWYpXG59XG5cbkJ1ZmZlckxpc3QuX2luaXQgPSBmdW5jdGlvbiBfaW5pdCAoYnVmKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBzeW1ib2wsIHsgdmFsdWU6IHRydWUgfSlcblxuICB0aGlzLl9idWZzID0gW11cbiAgdGhpcy5sZW5ndGggPSAwXG5cbiAgaWYgKGJ1Zikge1xuICAgIHRoaXMuYXBwZW5kKGJ1ZilcbiAgfVxufVxuXG5CdWZmZXJMaXN0LnByb3RvdHlwZS5fbmV3ID0gZnVuY3Rpb24gX25ldyAoYnVmKSB7XG4gIHJldHVybiBuZXcgQnVmZmVyTGlzdChidWYpXG59XG5cbkJ1ZmZlckxpc3QucHJvdG90eXBlLl9vZmZzZXQgPSBmdW5jdGlvbiBfb2Zmc2V0IChvZmZzZXQpIHtcbiAgaWYgKG9mZnNldCA9PT0gMCkge1xuICAgIHJldHVybiBbMCwgMF1cbiAgfVxuXG4gIGxldCB0b3QgPSAwXG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl9idWZzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgX3QgPSB0b3QgKyB0aGlzLl9idWZzW2ldLmxlbmd0aFxuICAgIGlmIChvZmZzZXQgPCBfdCB8fCBpID09PSB0aGlzLl9idWZzLmxlbmd0aCAtIDEpIHtcbiAgICAgIHJldHVybiBbaSwgb2Zmc2V0IC0gdG90XVxuICAgIH1cbiAgICB0b3QgPSBfdFxuICB9XG59XG5cbkJ1ZmZlckxpc3QucHJvdG90eXBlLl9yZXZlcnNlT2Zmc2V0ID0gZnVuY3Rpb24gKGJsT2Zmc2V0KSB7XG4gIGNvbnN0IGJ1ZmZlcklkID0gYmxPZmZzZXRbMF1cbiAgbGV0IG9mZnNldCA9IGJsT2Zmc2V0WzFdXG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBidWZmZXJJZDsgaSsrKSB7XG4gICAgb2Zmc2V0ICs9IHRoaXMuX2J1ZnNbaV0ubGVuZ3RoXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0XG59XG5cbkJ1ZmZlckxpc3QucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIGdldCAoaW5kZXgpIHtcbiAgaWYgKGluZGV4ID4gdGhpcy5sZW5ndGggfHwgaW5kZXggPCAwKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZFxuICB9XG5cbiAgY29uc3Qgb2Zmc2V0ID0gdGhpcy5fb2Zmc2V0KGluZGV4KVxuXG4gIHJldHVybiB0aGlzLl9idWZzW29mZnNldFswXV1bb2Zmc2V0WzFdXVxufVxuXG5CdWZmZXJMaXN0LnByb3RvdHlwZS5zbGljZSA9IGZ1bmN0aW9uIHNsaWNlIChzdGFydCwgZW5kKSB7XG4gIGlmICh0eXBlb2Ygc3RhcnQgPT09ICdudW1iZXInICYmIHN0YXJ0IDwgMCkge1xuICAgIHN0YXJ0ICs9IHRoaXMubGVuZ3RoXG4gIH1cblxuICBpZiAodHlwZW9mIGVuZCA9PT0gJ251bWJlcicgJiYgZW5kIDwgMCkge1xuICAgIGVuZCArPSB0aGlzLmxlbmd0aFxuICB9XG5cbiAgcmV0dXJuIHRoaXMuY29weShudWxsLCAwLCBzdGFydCwgZW5kKVxufVxuXG5CdWZmZXJMaXN0LnByb3RvdHlwZS5jb3B5ID0gZnVuY3Rpb24gY29weSAoZHN0LCBkc3RTdGFydCwgc3JjU3RhcnQsIHNyY0VuZCkge1xuICBpZiAodHlwZW9mIHNyY1N0YXJ0ICE9PSAnbnVtYmVyJyB8fCBzcmNTdGFydCA8IDApIHtcbiAgICBzcmNTdGFydCA9IDBcbiAgfVxuXG4gIGlmICh0eXBlb2Ygc3JjRW5kICE9PSAnbnVtYmVyJyB8fCBzcmNFbmQgPiB0aGlzLmxlbmd0aCkge1xuICAgIHNyY0VuZCA9IHRoaXMubGVuZ3RoXG4gIH1cblxuICBpZiAoc3JjU3RhcnQgPj0gdGhpcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gZHN0IHx8IEJ1ZmZlci5hbGxvYygwKVxuICB9XG5cbiAgaWYgKHNyY0VuZCA8PSAwKSB7XG4gICAgcmV0dXJuIGRzdCB8fCBCdWZmZXIuYWxsb2MoMClcbiAgfVxuXG4gIGNvbnN0IGNvcHkgPSAhIWRzdFxuICBjb25zdCBvZmYgPSB0aGlzLl9vZmZzZXQoc3JjU3RhcnQpXG4gIGNvbnN0IGxlbiA9IHNyY0VuZCAtIHNyY1N0YXJ0XG4gIGxldCBieXRlcyA9IGxlblxuICBsZXQgYnVmb2ZmID0gKGNvcHkgJiYgZHN0U3RhcnQpIHx8IDBcbiAgbGV0IHN0YXJ0ID0gb2ZmWzFdXG5cbiAgLy8gY29weS9zbGljZSBldmVyeXRoaW5nXG4gIGlmIChzcmNTdGFydCA9PT0gMCAmJiBzcmNFbmQgPT09IHRoaXMubGVuZ3RoKSB7XG4gICAgaWYgKCFjb3B5KSB7XG4gICAgICAvLyBzbGljZSwgYnV0IGZ1bGwgY29uY2F0IGlmIG11bHRpcGxlIGJ1ZmZlcnNcbiAgICAgIHJldHVybiB0aGlzLl9idWZzLmxlbmd0aCA9PT0gMVxuICAgICAgICA/IHRoaXMuX2J1ZnNbMF1cbiAgICAgICAgOiBCdWZmZXIuY29uY2F0KHRoaXMuX2J1ZnMsIHRoaXMubGVuZ3RoKVxuICAgIH1cblxuICAgIC8vIGNvcHksIG5lZWQgdG8gY29weSBpbmRpdmlkdWFsIGJ1ZmZlcnNcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuX2J1ZnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuX2J1ZnNbaV0uY29weShkc3QsIGJ1Zm9mZilcbiAgICAgIGJ1Zm9mZiArPSB0aGlzLl9idWZzW2ldLmxlbmd0aFxuICAgIH1cblxuICAgIHJldHVybiBkc3RcbiAgfVxuXG4gIC8vIGVhc3ksIGNoZWFwIGNhc2Ugd2hlcmUgaXQncyBhIHN1YnNldCBvZiBvbmUgb2YgdGhlIGJ1ZmZlcnNcbiAgaWYgKGJ5dGVzIDw9IHRoaXMuX2J1ZnNbb2ZmWzBdXS5sZW5ndGggLSBzdGFydCkge1xuICAgIHJldHVybiBjb3B5XG4gICAgICA/IHRoaXMuX2J1ZnNbb2ZmWzBdXS5jb3B5KGRzdCwgZHN0U3RhcnQsIHN0YXJ0LCBzdGFydCArIGJ5dGVzKVxuICAgICAgOiB0aGlzLl9idWZzW29mZlswXV0uc2xpY2Uoc3RhcnQsIHN0YXJ0ICsgYnl0ZXMpXG4gIH1cblxuICBpZiAoIWNvcHkpIHtcbiAgICAvLyBhIHNsaWNlLCB3ZSBuZWVkIHNvbWV0aGluZyB0byBjb3B5IGluIHRvXG4gICAgZHN0ID0gQnVmZmVyLmFsbG9jVW5zYWZlKGxlbilcbiAgfVxuXG4gIGZvciAobGV0IGkgPSBvZmZbMF07IGkgPCB0aGlzLl9idWZzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgbCA9IHRoaXMuX2J1ZnNbaV0ubGVuZ3RoIC0gc3RhcnRcblxuICAgIGlmIChieXRlcyA+IGwpIHtcbiAgICAgIHRoaXMuX2J1ZnNbaV0uY29weShkc3QsIGJ1Zm9mZiwgc3RhcnQpXG4gICAgICBidWZvZmYgKz0gbFxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9idWZzW2ldLmNvcHkoZHN0LCBidWZvZmYsIHN0YXJ0LCBzdGFydCArIGJ5dGVzKVxuICAgICAgYnVmb2ZmICs9IGxcbiAgICAgIGJyZWFrXG4gICAgfVxuXG4gICAgYnl0ZXMgLT0gbFxuXG4gICAgaWYgKHN0YXJ0KSB7XG4gICAgICBzdGFydCA9IDBcbiAgICB9XG4gIH1cblxuICAvLyBzYWZlZ3VhcmQgc28gdGhhdCB3ZSBkb24ndCByZXR1cm4gdW5pbml0aWFsaXplZCBtZW1vcnlcbiAgaWYgKGRzdC5sZW5ndGggPiBidWZvZmYpIHJldHVybiBkc3Quc2xpY2UoMCwgYnVmb2ZmKVxuXG4gIHJldHVybiBkc3Rcbn1cblxuQnVmZmVyTGlzdC5wcm90b3R5cGUuc2hhbGxvd1NsaWNlID0gZnVuY3Rpb24gc2hhbGxvd1NsaWNlIChzdGFydCwgZW5kKSB7XG4gIHN0YXJ0ID0gc3RhcnQgfHwgMFxuICBlbmQgPSB0eXBlb2YgZW5kICE9PSAnbnVtYmVyJyA/IHRoaXMubGVuZ3RoIDogZW5kXG5cbiAgaWYgKHN0YXJ0IDwgMCkge1xuICAgIHN0YXJ0ICs9IHRoaXMubGVuZ3RoXG4gIH1cblxuICBpZiAoZW5kIDwgMCkge1xuICAgIGVuZCArPSB0aGlzLmxlbmd0aFxuICB9XG5cbiAgaWYgKHN0YXJ0ID09PSBlbmQpIHtcbiAgICByZXR1cm4gdGhpcy5fbmV3KClcbiAgfVxuXG4gIGNvbnN0IHN0YXJ0T2Zmc2V0ID0gdGhpcy5fb2Zmc2V0KHN0YXJ0KVxuICBjb25zdCBlbmRPZmZzZXQgPSB0aGlzLl9vZmZzZXQoZW5kKVxuICBjb25zdCBidWZmZXJzID0gdGhpcy5fYnVmcy5zbGljZShzdGFydE9mZnNldFswXSwgZW5kT2Zmc2V0WzBdICsgMSlcblxuICBpZiAoZW5kT2Zmc2V0WzFdID09PSAwKSB7XG4gICAgYnVmZmVycy5wb3AoKVxuICB9IGVsc2Uge1xuICAgIGJ1ZmZlcnNbYnVmZmVycy5sZW5ndGggLSAxXSA9IGJ1ZmZlcnNbYnVmZmVycy5sZW5ndGggLSAxXS5zbGljZSgwLCBlbmRPZmZzZXRbMV0pXG4gIH1cblxuICBpZiAoc3RhcnRPZmZzZXRbMV0gIT09IDApIHtcbiAgICBidWZmZXJzWzBdID0gYnVmZmVyc1swXS5zbGljZShzdGFydE9mZnNldFsxXSlcbiAgfVxuXG4gIHJldHVybiB0aGlzLl9uZXcoYnVmZmVycylcbn1cblxuQnVmZmVyTGlzdC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZyAoZW5jb2RpbmcsIHN0YXJ0LCBlbmQpIHtcbiAgcmV0dXJuIHRoaXMuc2xpY2Uoc3RhcnQsIGVuZCkudG9TdHJpbmcoZW5jb2RpbmcpXG59XG5cbkJ1ZmZlckxpc3QucHJvdG90eXBlLmNvbnN1bWUgPSBmdW5jdGlvbiBjb25zdW1lIChieXRlcykge1xuICAvLyBmaXJzdCwgbm9ybWFsaXplIHRoZSBhcmd1bWVudCwgaW4gYWNjb3JkYW5jZSB3aXRoIGhvdyBCdWZmZXIgZG9lcyBpdFxuICBieXRlcyA9IE1hdGgudHJ1bmMoYnl0ZXMpXG4gIC8vIGRvIG5vdGhpbmcgaWYgbm90IGEgcG9zaXRpdmUgbnVtYmVyXG4gIGlmIChOdW1iZXIuaXNOYU4oYnl0ZXMpIHx8IGJ5dGVzIDw9IDApIHJldHVybiB0aGlzXG5cbiAgd2hpbGUgKHRoaXMuX2J1ZnMubGVuZ3RoKSB7XG4gICAgaWYgKGJ5dGVzID49IHRoaXMuX2J1ZnNbMF0ubGVuZ3RoKSB7XG4gICAgICBieXRlcyAtPSB0aGlzLl9idWZzWzBdLmxlbmd0aFxuICAgICAgdGhpcy5sZW5ndGggLT0gdGhpcy5fYnVmc1swXS5sZW5ndGhcbiAgICAgIHRoaXMuX2J1ZnMuc2hpZnQoKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9idWZzWzBdID0gdGhpcy5fYnVmc1swXS5zbGljZShieXRlcylcbiAgICAgIHRoaXMubGVuZ3RoIC09IGJ5dGVzXG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aGlzXG59XG5cbkJ1ZmZlckxpc3QucHJvdG90eXBlLmR1cGxpY2F0ZSA9IGZ1bmN0aW9uIGR1cGxpY2F0ZSAoKSB7XG4gIGNvbnN0IGNvcHkgPSB0aGlzLl9uZXcoKVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5fYnVmcy5sZW5ndGg7IGkrKykge1xuICAgIGNvcHkuYXBwZW5kKHRoaXMuX2J1ZnNbaV0pXG4gIH1cblxuICByZXR1cm4gY29weVxufVxuXG5CdWZmZXJMaXN0LnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbiBhcHBlbmQgKGJ1Zikge1xuICBpZiAoYnVmID09IG51bGwpIHtcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgaWYgKGJ1Zi5idWZmZXIpIHtcbiAgICAvLyBhcHBlbmQgYSB2aWV3IG9mIHRoZSB1bmRlcmx5aW5nIEFycmF5QnVmZmVyXG4gICAgdGhpcy5fYXBwZW5kQnVmZmVyKEJ1ZmZlci5mcm9tKGJ1Zi5idWZmZXIsIGJ1Zi5ieXRlT2Zmc2V0LCBidWYuYnl0ZUxlbmd0aCkpXG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShidWYpKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBidWYubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuYXBwZW5kKGJ1ZltpXSlcbiAgICB9XG4gIH0gZWxzZSBpZiAodGhpcy5faXNCdWZmZXJMaXN0KGJ1ZikpIHtcbiAgICAvLyB1bndyYXAgYXJndW1lbnQgaW50byBpbmRpdmlkdWFsIEJ1ZmZlckxpc3RzXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBidWYuX2J1ZnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuYXBwZW5kKGJ1Zi5fYnVmc1tpXSlcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gY29lcmNlIG51bWJlciBhcmd1bWVudHMgdG8gc3RyaW5ncywgc2luY2UgQnVmZmVyKG51bWJlcikgZG9lc1xuICAgIC8vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25cbiAgICBpZiAodHlwZW9mIGJ1ZiA9PT0gJ251bWJlcicpIHtcbiAgICAgIGJ1ZiA9IGJ1Zi50b1N0cmluZygpXG4gICAgfVxuXG4gICAgdGhpcy5fYXBwZW5kQnVmZmVyKEJ1ZmZlci5mcm9tKGJ1ZikpXG4gIH1cblxuICByZXR1cm4gdGhpc1xufVxuXG5CdWZmZXJMaXN0LnByb3RvdHlwZS5fYXBwZW5kQnVmZmVyID0gZnVuY3Rpb24gYXBwZW5kQnVmZmVyIChidWYpIHtcbiAgdGhpcy5fYnVmcy5wdXNoKGJ1ZilcbiAgdGhpcy5sZW5ndGggKz0gYnVmLmxlbmd0aFxufVxuXG5CdWZmZXJMaXN0LnByb3RvdHlwZS5pbmRleE9mID0gZnVuY3Rpb24gKHNlYXJjaCwgb2Zmc2V0LCBlbmNvZGluZykge1xuICBpZiAoZW5jb2RpbmcgPT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygb2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgIGVuY29kaW5nID0gb2Zmc2V0XG4gICAgb2Zmc2V0ID0gdW5kZWZpbmVkXG4gIH1cblxuICBpZiAodHlwZW9mIHNlYXJjaCA9PT0gJ2Z1bmN0aW9uJyB8fCBBcnJheS5pc0FycmF5KHNlYXJjaCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJ2YWx1ZVwiIGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIEJ1ZmZlckxpc3QsIG9yIFVpbnQ4QXJyYXkuJylcbiAgfSBlbHNlIGlmICh0eXBlb2Ygc2VhcmNoID09PSAnbnVtYmVyJykge1xuICAgIHNlYXJjaCA9IEJ1ZmZlci5mcm9tKFtzZWFyY2hdKVxuICB9IGVsc2UgaWYgKHR5cGVvZiBzZWFyY2ggPT09ICdzdHJpbmcnKSB7XG4gICAgc2VhcmNoID0gQnVmZmVyLmZyb20oc2VhcmNoLCBlbmNvZGluZylcbiAgfSBlbHNlIGlmICh0aGlzLl9pc0J1ZmZlckxpc3Qoc2VhcmNoKSkge1xuICAgIHNlYXJjaCA9IHNlYXJjaC5zbGljZSgpXG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShzZWFyY2guYnVmZmVyKSkge1xuICAgIHNlYXJjaCA9IEJ1ZmZlci5mcm9tKHNlYXJjaC5idWZmZXIsIHNlYXJjaC5ieXRlT2Zmc2V0LCBzZWFyY2guYnl0ZUxlbmd0aClcbiAgfSBlbHNlIGlmICghQnVmZmVyLmlzQnVmZmVyKHNlYXJjaCkpIHtcbiAgICBzZWFyY2ggPSBCdWZmZXIuZnJvbShzZWFyY2gpXG4gIH1cblxuICBvZmZzZXQgPSBOdW1iZXIob2Zmc2V0IHx8IDApXG5cbiAgaWYgKGlzTmFOKG9mZnNldCkpIHtcbiAgICBvZmZzZXQgPSAwXG4gIH1cblxuICBpZiAob2Zmc2V0IDwgMCkge1xuICAgIG9mZnNldCA9IHRoaXMubGVuZ3RoICsgb2Zmc2V0XG4gIH1cblxuICBpZiAob2Zmc2V0IDwgMCkge1xuICAgIG9mZnNldCA9IDBcbiAgfVxuXG4gIGlmIChzZWFyY2gubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG9mZnNldCA+IHRoaXMubGVuZ3RoID8gdGhpcy5sZW5ndGggOiBvZmZzZXRcbiAgfVxuXG4gIGNvbnN0IGJsT2Zmc2V0ID0gdGhpcy5fb2Zmc2V0KG9mZnNldClcbiAgbGV0IGJsSW5kZXggPSBibE9mZnNldFswXSAvLyBpbmRleCBvZiB3aGljaCBpbnRlcm5hbCBidWZmZXIgd2UncmUgd29ya2luZyBvblxuICBsZXQgYnVmZk9mZnNldCA9IGJsT2Zmc2V0WzFdIC8vIG9mZnNldCBvZiB0aGUgaW50ZXJuYWwgYnVmZmVyIHdlJ3JlIHdvcmtpbmcgb25cblxuICAvLyBzY2FuIG92ZXIgZWFjaCBidWZmZXJcbiAgZm9yICg7IGJsSW5kZXggPCB0aGlzLl9idWZzLmxlbmd0aDsgYmxJbmRleCsrKSB7XG4gICAgY29uc3QgYnVmZiA9IHRoaXMuX2J1ZnNbYmxJbmRleF1cblxuICAgIHdoaWxlIChidWZmT2Zmc2V0IDwgYnVmZi5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IGF2YWlsYWJsZVdpbmRvdyA9IGJ1ZmYubGVuZ3RoIC0gYnVmZk9mZnNldFxuXG4gICAgICBpZiAoYXZhaWxhYmxlV2luZG93ID49IHNlYXJjaC5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgbmF0aXZlU2VhcmNoUmVzdWx0ID0gYnVmZi5pbmRleE9mKHNlYXJjaCwgYnVmZk9mZnNldClcblxuICAgICAgICBpZiAobmF0aXZlU2VhcmNoUmVzdWx0ICE9PSAtMSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLl9yZXZlcnNlT2Zmc2V0KFtibEluZGV4LCBuYXRpdmVTZWFyY2hSZXN1bHRdKVxuICAgICAgICB9XG5cbiAgICAgICAgYnVmZk9mZnNldCA9IGJ1ZmYubGVuZ3RoIC0gc2VhcmNoLmxlbmd0aCArIDEgLy8gZW5kIG9mIG5hdGl2ZSBzZWFyY2ggd2luZG93XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCByZXZPZmZzZXQgPSB0aGlzLl9yZXZlcnNlT2Zmc2V0KFtibEluZGV4LCBidWZmT2Zmc2V0XSlcblxuICAgICAgICBpZiAodGhpcy5fbWF0Y2gocmV2T2Zmc2V0LCBzZWFyY2gpKSB7XG4gICAgICAgICAgcmV0dXJuIHJldk9mZnNldFxuICAgICAgICB9XG5cbiAgICAgICAgYnVmZk9mZnNldCsrXG4gICAgICB9XG4gICAgfVxuXG4gICAgYnVmZk9mZnNldCA9IDBcbiAgfVxuXG4gIHJldHVybiAtMVxufVxuXG5CdWZmZXJMaXN0LnByb3RvdHlwZS5fbWF0Y2ggPSBmdW5jdGlvbiAob2Zmc2V0LCBzZWFyY2gpIHtcbiAgaWYgKHRoaXMubGVuZ3RoIC0gb2Zmc2V0IDwgc2VhcmNoLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgZm9yIChsZXQgc2VhcmNoT2Zmc2V0ID0gMDsgc2VhcmNoT2Zmc2V0IDwgc2VhcmNoLmxlbmd0aDsgc2VhcmNoT2Zmc2V0KyspIHtcbiAgICBpZiAodGhpcy5nZXQob2Zmc2V0ICsgc2VhcmNoT2Zmc2V0KSAhPT0gc2VhcmNoW3NlYXJjaE9mZnNldF0pIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZVxufVxuXG47KGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgbWV0aG9kcyA9IHtcbiAgICByZWFkRG91YmxlQkU6IDgsXG4gICAgcmVhZERvdWJsZUxFOiA4LFxuICAgIHJlYWRGbG9hdEJFOiA0LFxuICAgIHJlYWRGbG9hdExFOiA0LFxuICAgIHJlYWRJbnQzMkJFOiA0LFxuICAgIHJlYWRJbnQzMkxFOiA0LFxuICAgIHJlYWRVSW50MzJCRTogNCxcbiAgICByZWFkVUludDMyTEU6IDQsXG4gICAgcmVhZEludDE2QkU6IDIsXG4gICAgcmVhZEludDE2TEU6IDIsXG4gICAgcmVhZFVJbnQxNkJFOiAyLFxuICAgIHJlYWRVSW50MTZMRTogMixcbiAgICByZWFkSW50ODogMSxcbiAgICByZWFkVUludDg6IDEsXG4gICAgcmVhZEludEJFOiBudWxsLFxuICAgIHJlYWRJbnRMRTogbnVsbCxcbiAgICByZWFkVUludEJFOiBudWxsLFxuICAgIHJlYWRVSW50TEU6IG51bGxcbiAgfVxuXG4gIGZvciAoY29uc3QgbSBpbiBtZXRob2RzKSB7XG4gICAgKGZ1bmN0aW9uIChtKSB7XG4gICAgICBpZiAobWV0aG9kc1ttXSA9PT0gbnVsbCkge1xuICAgICAgICBCdWZmZXJMaXN0LnByb3RvdHlwZVttXSA9IGZ1bmN0aW9uIChvZmZzZXQsIGJ5dGVMZW5ndGgpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5zbGljZShvZmZzZXQsIG9mZnNldCArIGJ5dGVMZW5ndGgpW21dKDAsIGJ5dGVMZW5ndGgpXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIEJ1ZmZlckxpc3QucHJvdG90eXBlW21dID0gZnVuY3Rpb24gKG9mZnNldCA9IDApIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5zbGljZShvZmZzZXQsIG9mZnNldCArIG1ldGhvZHNbbV0pW21dKDApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KG0pKVxuICB9XG59KCkpXG5cbi8vIFVzZWQgaW50ZXJuYWxseSBieSB0aGUgY2xhc3MgYW5kIGFsc28gYXMgYW4gaW5kaWNhdG9yIG9mIHRoaXMgb2JqZWN0IGJlaW5nXG4vLyBhIGBCdWZmZXJMaXN0YC4gSXQncyBub3QgcG9zc2libGUgdG8gdXNlIGBpbnN0YW5jZW9mIEJ1ZmZlckxpc3RgIGluIGEgYnJvd3NlclxuLy8gZW52aXJvbm1lbnQgYmVjYXVzZSB0aGVyZSBjb3VsZCBiZSBtdWx0aXBsZSBkaWZmZXJlbnQgY29waWVzIG9mIHRoZVxuLy8gQnVmZmVyTGlzdCBjbGFzcyBhbmQgc29tZSBgQnVmZmVyTGlzdGBzIG1pZ2h0IGJlIGBCdWZmZXJMaXN0YHMuXG5CdWZmZXJMaXN0LnByb3RvdHlwZS5faXNCdWZmZXJMaXN0ID0gZnVuY3Rpb24gX2lzQnVmZmVyTGlzdCAoYikge1xuICByZXR1cm4gYiBpbnN0YW5jZW9mIEJ1ZmZlckxpc3QgfHwgQnVmZmVyTGlzdC5pc0J1ZmZlckxpc3QoYilcbn1cblxuQnVmZmVyTGlzdC5pc0J1ZmZlckxpc3QgPSBmdW5jdGlvbiBpc0J1ZmZlckxpc3QgKGIpIHtcbiAgcmV0dXJuIGIgIT0gbnVsbCAmJiBiW3N5bWJvbF1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBCdWZmZXJMaXN0XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IER1cGxleFN0cmVhbSA9IHJlcXVpcmUoJ3JlYWRhYmxlLXN0cmVhbScpLkR1cGxleFxuY29uc3QgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpXG5jb25zdCBCdWZmZXJMaXN0ID0gcmVxdWlyZSgnLi9CdWZmZXJMaXN0JylcblxuZnVuY3Rpb24gQnVmZmVyTGlzdFN0cmVhbSAoY2FsbGJhY2spIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEJ1ZmZlckxpc3RTdHJlYW0pKSB7XG4gICAgcmV0dXJuIG5ldyBCdWZmZXJMaXN0U3RyZWFtKGNhbGxiYWNrKVxuICB9XG5cbiAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHRoaXMuX2NhbGxiYWNrID0gY2FsbGJhY2tcblxuICAgIGNvbnN0IHBpcGVyID0gZnVuY3Rpb24gcGlwZXIgKGVycikge1xuICAgICAgaWYgKHRoaXMuX2NhbGxiYWNrKSB7XG4gICAgICAgIHRoaXMuX2NhbGxiYWNrKGVycilcbiAgICAgICAgdGhpcy5fY2FsbGJhY2sgPSBudWxsXG4gICAgICB9XG4gICAgfS5iaW5kKHRoaXMpXG5cbiAgICB0aGlzLm9uKCdwaXBlJywgZnVuY3Rpb24gb25QaXBlIChzcmMpIHtcbiAgICAgIHNyYy5vbignZXJyb3InLCBwaXBlcilcbiAgICB9KVxuICAgIHRoaXMub24oJ3VucGlwZScsIGZ1bmN0aW9uIG9uVW5waXBlIChzcmMpIHtcbiAgICAgIHNyYy5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBwaXBlcilcbiAgICB9KVxuXG4gICAgY2FsbGJhY2sgPSBudWxsXG4gIH1cblxuICBCdWZmZXJMaXN0Ll9pbml0LmNhbGwodGhpcywgY2FsbGJhY2spXG4gIER1cGxleFN0cmVhbS5jYWxsKHRoaXMpXG59XG5cbmluaGVyaXRzKEJ1ZmZlckxpc3RTdHJlYW0sIER1cGxleFN0cmVhbSlcbk9iamVjdC5hc3NpZ24oQnVmZmVyTGlzdFN0cmVhbS5wcm90b3R5cGUsIEJ1ZmZlckxpc3QucHJvdG90eXBlKVxuXG5CdWZmZXJMaXN0U3RyZWFtLnByb3RvdHlwZS5fbmV3ID0gZnVuY3Rpb24gX25ldyAoY2FsbGJhY2spIHtcbiAgcmV0dXJuIG5ldyBCdWZmZXJMaXN0U3RyZWFtKGNhbGxiYWNrKVxufVxuXG5CdWZmZXJMaXN0U3RyZWFtLnByb3RvdHlwZS5fd3JpdGUgPSBmdW5jdGlvbiBfd3JpdGUgKGJ1ZiwgZW5jb2RpbmcsIGNhbGxiYWNrKSB7XG4gIHRoaXMuX2FwcGVuZEJ1ZmZlcihidWYpXG5cbiAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNhbGxiYWNrKClcbiAgfVxufVxuXG5CdWZmZXJMaXN0U3RyZWFtLnByb3RvdHlwZS5fcmVhZCA9IGZ1bmN0aW9uIF9yZWFkIChzaXplKSB7XG4gIGlmICghdGhpcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gdGhpcy5wdXNoKG51bGwpXG4gIH1cblxuICBzaXplID0gTWF0aC5taW4oc2l6ZSwgdGhpcy5sZW5ndGgpXG4gIHRoaXMucHVzaCh0aGlzLnNsaWNlKDAsIHNpemUpKVxuICB0aGlzLmNvbnN1bWUoc2l6ZSlcbn1cblxuQnVmZmVyTGlzdFN0cmVhbS5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24gZW5kIChjaHVuaykge1xuICBEdXBsZXhTdHJlYW0ucHJvdG90eXBlLmVuZC5jYWxsKHRoaXMsIGNodW5rKVxuXG4gIGlmICh0aGlzLl9jYWxsYmFjaykge1xuICAgIHRoaXMuX2NhbGxiYWNrKG51bGwsIHRoaXMuc2xpY2UoKSlcbiAgICB0aGlzLl9jYWxsYmFjayA9IG51bGxcbiAgfVxufVxuXG5CdWZmZXJMaXN0U3RyZWFtLnByb3RvdHlwZS5fZGVzdHJveSA9IGZ1bmN0aW9uIF9kZXN0cm95IChlcnIsIGNiKSB7XG4gIHRoaXMuX2J1ZnMubGVuZ3RoID0gMFxuICB0aGlzLmxlbmd0aCA9IDBcbiAgY2IoZXJyKVxufVxuXG5CdWZmZXJMaXN0U3RyZWFtLnByb3RvdHlwZS5faXNCdWZmZXJMaXN0ID0gZnVuY3Rpb24gX2lzQnVmZmVyTGlzdCAoYikge1xuICByZXR1cm4gYiBpbnN0YW5jZW9mIEJ1ZmZlckxpc3RTdHJlYW0gfHwgYiBpbnN0YW5jZW9mIEJ1ZmZlckxpc3QgfHwgQnVmZmVyTGlzdFN0cmVhbS5pc0J1ZmZlckxpc3QoYilcbn1cblxuQnVmZmVyTGlzdFN0cmVhbS5pc0J1ZmZlckxpc3QgPSBCdWZmZXJMaXN0LmlzQnVmZmVyTGlzdFxuXG5tb2R1bGUuZXhwb3J0cyA9IEJ1ZmZlckxpc3RTdHJlYW1cbm1vZHVsZS5leHBvcnRzLkJ1ZmZlckxpc3RTdHJlYW0gPSBCdWZmZXJMaXN0U3RyZWFtXG5tb2R1bGUuZXhwb3J0cy5CdWZmZXJMaXN0ID0gQnVmZmVyTGlzdFxuIiwgImltcG9ydCBjYWMgZnJvbSAnY2FjJztcbmltcG9ydCB7IHZlcnNpb24gfSBmcm9tICcuLi8uLi9wYWNrYWdlLmpzb24nO1xuaW1wb3J0ICogYXMgY29tbWFuZHMgZnJvbSAnLi9jb21tYW5kcyc7XG5cbmNvbnN0IGNsaSA9IGNhYygnd3h0Jyk7XG5jbGkuaGVscCgpO1xuY2xpLnZlcnNpb24odmVyc2lvbik7XG5cbmNsaS5vcHRpb24oJy0tZGVidWcnLCAnZW5hYmxlIGRlYnVnIG1vZGUnKTtcblxuLy8gREVWXG5jbGlcbiAgLmNvbW1hbmQoJ1tyb290XScsICdzdGFydCBkZXYgc2VydmVyJylcbiAgLm9wdGlvbignLWMsIC0tY29uZmlnIDxmaWxlPicsICd1c2Ugc3BlY2lmaWVkIGNvbmZpZyBmaWxlJylcbiAgLm9wdGlvbignLW0sIC0tbW9kZSA8bW9kZT4nLCAnc2V0IGVudiBtb2RlJylcbiAgLm9wdGlvbignLWIsIC0tYnJvd3NlciA8YnJvd3Nlcj4nLCAnc3BlY2lmeSBhIGJyb3dzZXInKVxuICAub3B0aW9uKCctLW12MycsICd0YXJnZXQgbWFuaWZlc3QgdjMnKVxuICAub3B0aW9uKCctLW12MicsICd0YXJnZXQgbWFuaWZlc3QgdjInKVxuICAuYWN0aW9uKGNvbW1hbmRzLmRldik7XG5cbi8vIEJVSUxEXG5jbGlcbiAgLmNvbW1hbmQoJ2J1aWxkIFtyb290XScsICdidWlsZCBmb3IgcHJvZHVjdGlvbicpXG4gIC5vcHRpb24oJy1jLCAtLWNvbmZpZyA8ZmlsZT4nLCAndXNlIHNwZWNpZmllZCBjb25maWcgZmlsZScpXG4gIC5vcHRpb24oJy1tLCAtLW1vZGUgPG1vZGU+JywgJ3NldCBlbnYgbW9kZScpXG4gIC5vcHRpb24oJy1iLCAtLWJyb3dzZXIgPGJyb3dzZXI+JywgJ3NwZWNpZnkgYSBicm93c2VyJylcbiAgLm9wdGlvbignLS1tdjMnLCAndGFyZ2V0IG1hbmlmZXN0IHYzJylcbiAgLm9wdGlvbignLS1tdjInLCAndGFyZ2V0IG1hbmlmZXN0IHYyJylcbiAgLmFjdGlvbihjb21tYW5kcy5idWlsZCk7XG5cbi8vIFpJUFxuY2xpXG4gIC5jb21tYW5kKCd6aXAgW3Jvb3RdJywgJ2J1aWxkIGZvciBwcm9kdWN0aW9uIGFuZCB6aXAgb3V0cHV0JylcbiAgLm9wdGlvbignLWMsIC0tY29uZmlnIDxmaWxlPicsICd1c2Ugc3BlY2lmaWVkIGNvbmZpZyBmaWxlJylcbiAgLm9wdGlvbignLW0sIC0tbW9kZSA8bW9kZT4nLCAnc2V0IGVudiBtb2RlJylcbiAgLm9wdGlvbignLWIsIC0tYnJvd3NlciA8YnJvd3Nlcj4nLCAnc3BlY2lmeSBhIGJyb3dzZXInKVxuICAub3B0aW9uKCctLW12MycsICd0YXJnZXQgbWFuaWZlc3QgdjMnKVxuICAub3B0aW9uKCctLW12MicsICd0YXJnZXQgbWFuaWZlc3QgdjInKVxuICAuYWN0aW9uKGNvbW1hbmRzLnppcCk7XG5cbi8vIFBSRVBBUkVcbmNsaVxuICAuY29tbWFuZCgncHJlcGFyZSBbcm9vdF0nLCAncHJlcGFyZSB0eXBlc2NyaXB0IHByb2plY3QnKVxuICAub3B0aW9uKCctYywgLS1jb25maWcgPGZpbGU+JywgJ3VzZSBzcGVjaWZpZWQgY29uZmlnIGZpbGUnKVxuICAuYWN0aW9uKGNvbW1hbmRzLnByZXBhcmUpO1xuXG4vLyBDTEVBTlxuY2xpXG4gIC5jb21tYW5kKCdjbGVhbiBbcm9vdF0nLCAnY2xlYW4gZ2VuZXJhdGVkIGZpbGVzIGFuZCBjYWNoZXMnKVxuICAuYWxpYXMoJ2NsZWFudXAnKVxuICAuYWN0aW9uKGNvbW1hbmRzLmNsZWFuKTtcblxuLy8gUFVCTElTSFxuY2xpLmNvbW1hbmQoJ3B1Ymxpc2ggW3Jvb3RdJywgJ3B1Ymxpc2ggdG8gc3RvcmVzJykuYWN0aW9uKGNvbW1hbmRzLnB1Ymxpc2gpO1xuXG4vLyBJTklUXG5jbGlcbiAgLmNvbW1hbmQoJ2luaXQgW2RpcmVjdG9yeV0nLCAnaW5pdGlhbGl6ZSBhIG5ldyBwcm9qZWN0JylcbiAgLm9wdGlvbignLXQsIC0tdGVtcGxhdGUgPHRlbXBsYXRlPicsICd0ZW1wbGF0ZSB0byB1c2UnKVxuICAub3B0aW9uKCctLXBtIDxwYWNrYWdlTWFuYWdlcj4nLCAnd2hpY2ggcGFja2FnZSBtYW5hZ2VyIHRvIHVzZScpXG4gIC5hY3Rpb24oY29tbWFuZHMuaW5pdCk7XG5cbmNsaS5wYXJzZSgpO1xuIiwgIntcbiAgXCJuYW1lXCI6IFwid3h0XCIsXG4gIFwidHlwZVwiOiBcIm1vZHVsZVwiLFxuICBcInZlcnNpb25cIjogXCIwLjUuNlwiLFxuICBcImRlc2NyaXB0aW9uXCI6IFwiTmV4dCBnZW4gZnJhbWV3b3JrIGZvciBkZXZlbG9waW5nIHdlYiBleHRlbnNpb25zXCIsXG4gIFwiZW5naW5lc1wiOiB7XG4gICAgXCJub2RlXCI6IFwiPj0xOC4xNi4wXCIsXG4gICAgXCJwbnBtXCI6IFwiPj04XCJcbiAgfSxcbiAgXCJyZXBvc2l0b3J5XCI6IHtcbiAgICBcInR5cGVcIjogXCJnaXRcIixcbiAgICBcInVybFwiOiBcImh0dHBzOi8vZ2l0aHViLmNvbS93eHQtZGV2L3d4dFwiXG4gIH0sXG4gIFwiaG9tZXBhZ2VcIjogXCJodHRwczovL3d4dC5kZXZcIixcbiAgXCJrZXl3b3Jkc1wiOiBbXG4gICAgXCJ2aXRlXCIsXG4gICAgXCJjaHJvbWVcIixcbiAgICBcIndlYlwiLFxuICAgIFwiZXh0ZW5zaW9uXCIsXG4gICAgXCJicm93c2VyXCIsXG4gICAgXCJidW5kbGVyXCIsXG4gICAgXCJmcmFtZXdvcmtcIlxuICBdLFxuICBcImF1dGhvclwiOiB7XG4gICAgXCJuYW1lXCI6IFwiQWFyb24gS2xpbmtlclwiLFxuICAgIFwiZW1haWxcIjogXCJhYXJvbmtsaW5rZXIxK3d4dEBnbWFpbC5jb21cIlxuICB9LFxuICBcImxpY2Vuc2VcIjogXCJNSVRcIixcbiAgXCJmaWxlc1wiOiBbXG4gICAgXCJiaW5cIixcbiAgICBcImRpc3RcIlxuICBdLFxuICBcImJpblwiOiBcIi4vYmluL3d4dC5janNcIixcbiAgXCJtYWluXCI6IFwiLi9kaXN0L2luZGV4LmNqc1wiLFxuICBcIm1vZHVsZVwiOiBcIi4vZGlzdC9pbmRleC5qc1wiLFxuICBcInR5cGVzXCI6IFwiLi9kaXN0L2luZGV4LmQudHNcIixcbiAgXCJleHBvcnRzXCI6IHtcbiAgICBcIi5cIjoge1xuICAgICAgXCJyZXF1aXJlXCI6IFwiLi9kaXN0L2luZGV4LmNqc1wiLFxuICAgICAgXCJpbXBvcnRcIjogXCIuL2Rpc3QvaW5kZXguanNcIixcbiAgICAgIFwidHlwZXNcIjogXCIuL2Rpc3QvaW5kZXguZC50c1wiXG4gICAgfSxcbiAgICBcIi4vY2xpZW50XCI6IHtcbiAgICAgIFwiaW1wb3J0XCI6IFwiLi9kaXN0L2NsaWVudC5qc1wiLFxuICAgICAgXCJ0eXBlc1wiOiBcIi4vZGlzdC9jbGllbnQuZC50c1wiXG4gICAgfSxcbiAgICBcIi4vYnJvd3NlclwiOiB7XG4gICAgICBcImltcG9ydFwiOiBcIi4vZGlzdC9icm93c2VyLmpzXCIsXG4gICAgICBcInR5cGVzXCI6IFwiLi9kaXN0L2Jyb3dzZXIuZC50c1wiXG4gICAgfVxuICB9LFxuICBcInNjcmlwdHNcIjoge1xuICAgIFwid3h0XCI6IFwidHN4IHNyYy9jbGkvaW5kZXgudHNcIixcbiAgICBcImJ1aWxkXCI6IFwidHN4IHNjcmlwdHMvYnVpbGQudHNcIixcbiAgICBcImZvcm1hdFwiOiBcInByZXR0aWVyIC0td3JpdGUgLlwiLFxuICAgIFwiZm9ybWF0OmNoZWNrXCI6IFwicHJldHRpZXIgLS13cml0ZSAuXCIsXG4gICAgXCJjb21waWxlXCI6IFwidHNjIC0tbm9FbWl0XCIsXG4gICAgXCJ0ZXN0XCI6IFwidml0ZXN0XCIsXG4gICAgXCJ0ZXN0OmNvdmVyYWdlXCI6IFwidml0ZXN0IHJ1biAtLWNvdmVyYWdlXCIsXG4gICAgXCJwcmVwYXJlXCI6IFwic2ltcGxlLWdpdC1ob29rc1wiLFxuICAgIFwicHJlcHVibGlzaFwiOiBcInBucG0gLXMgYnVpbGRcIixcbiAgICBcImRvY3M6ZGV2XCI6IFwidml0ZXByZXNzIGRldiBkb2NzXCIsXG4gICAgXCJkb2NzOmJ1aWxkXCI6IFwidml0ZXByZXNzIGJ1aWxkIGRvY3NcIixcbiAgICBcImRvY3M6cHJldmlld1wiOiBcInZpdGVwcmVzcyBwcmV2aWV3IGRvY3NcIixcbiAgICBcInN5bmMtcmVsZWFzZXNcIjogXCJwbnB4IGNoYW5nZWxvZ2VuQGxhdGVzdCBnaCByZWxlYXNlIGFsbFwiXG4gIH0sXG4gIFwiZGVwZW5kZW5jaWVzXCI6IHtcbiAgICBcIkB0eXBlcy93ZWJleHRlbnNpb24tcG9seWZpbGxcIjogXCJeMC4xMC4xXCIsXG4gICAgXCJAd2ViZXh0LWNvcmUvZmFrZS1icm93c2VyXCI6IFwiXjEuMi4yXCIsXG4gICAgXCJAd2ViZXh0LWNvcmUvbWF0Y2gtcGF0dGVybnNcIjogXCJeMS4wLjFcIixcbiAgICBcImFzeW5jLW11dGV4XCI6IFwiXjAuNC4wXCIsXG4gICAgXCJjMTJcIjogXCJeMS40LjJcIixcbiAgICBcImNhY1wiOiBcIl42LjcuMTRcIixcbiAgICBcImNvbnNvbGFcIjogXCJeMy4yLjNcIixcbiAgICBcImZhc3QtZ2xvYlwiOiBcIl4zLjMuMVwiLFxuICAgIFwiZmlsZXNpemVcIjogXCJeMTAuMC44XCIsXG4gICAgXCJmcy1leHRyYVwiOiBcIl4xMS4xLjFcIixcbiAgICBcImdldC1wb3J0XCI6IFwiXjcuMC4wXCIsXG4gICAgXCJnaWdldFwiOiBcIl4xLjEuMlwiLFxuICAgIFwiaml0aVwiOiBcIl4xLjE5LjFcIixcbiAgICBcImpzb241XCI6IFwiXjIuMi4zXCIsXG4gICAgXCJsaW5rZWRvbVwiOiBcIl4wLjE1LjFcIixcbiAgICBcIm1pbmltYXRjaFwiOiBcIl45LjAuM1wiLFxuICAgIFwicGljb2NvbG9yc1wiOiBcIl4xLjAuMFwiLFxuICAgIFwicHJvbXB0c1wiOiBcIl4yLjQuMlwiLFxuICAgIFwidW5pbXBvcnRcIjogXCJeMy4xLjBcIixcbiAgICBcInZpdGVcIjogXCJeNC40LjdcIixcbiAgICBcIndlYi1leHQtcnVuXCI6IFwiXjAuMS4wXCIsXG4gICAgXCJ3ZWJleHRlbnNpb24tcG9seWZpbGxcIjogXCJeMC4xMC4wXCIsXG4gICAgXCJ6aXAtZGlyXCI6IFwiXjIuMC4wXCJcbiAgfSxcbiAgXCJkZXZEZXBlbmRlbmNpZXNcIjoge1xuICAgIFwiQGZha2VyLWpzL2Zha2VyXCI6IFwiXjguMC4yXCIsXG4gICAgXCJAdHlwZXMvZnMtZXh0cmFcIjogXCJeMTEuMC4xXCIsXG4gICAgXCJAdHlwZXMvbG9kYXNoLm1lcmdlXCI6IFwiXjQuNi43XCIsXG4gICAgXCJAdHlwZXMvbm9kZVwiOiBcIl4yMC40LjVcIixcbiAgICBcIkB0eXBlcy9wcmV0dGllclwiOiBcIl4zLjAuMFwiLFxuICAgIFwiQHR5cGVzL3Byb21wdHNcIjogXCJeMi40LjRcIixcbiAgICBcIkB2aXRlc3QvY292ZXJhZ2UtdjhcIjogXCJeMC4zNC4xXCIsXG4gICAgXCJleGVjYVwiOiBcIl43LjIuMFwiLFxuICAgIFwibGludC1zdGFnZWRcIjogXCJeMTQuMC4wXCIsXG4gICAgXCJsb2Rhc2gubWVyZ2VcIjogXCJeNC42LjJcIixcbiAgICBcIm5wbS1ydW4tYWxsXCI6IFwiXjQuMS41XCIsXG4gICAgXCJvcmFcIjogXCJeNy4wLjFcIixcbiAgICBcInByZXR0aWVyXCI6IFwiXjMuMC4xXCIsXG4gICAgXCJzaW1wbGUtZ2l0LWhvb2tzXCI6IFwiXjIuOS4wXCIsXG4gICAgXCJ0cy1tb3JwaFwiOiBcIl4xOS4wLjBcIixcbiAgICBcInRzdXBcIjogXCJeNy4xLjBcIixcbiAgICBcInRzeFwiOiBcIl4zLjEyLjdcIixcbiAgICBcInR5cGVzY3JpcHRcIjogXCJeNS4xLjZcIixcbiAgICBcInZpdGVwcmVzc1wiOiBcIjEuMC4wLXJjLjEwXCIsXG4gICAgXCJ2aXRlc3RcIjogXCJeMC4zNC4xXCIsXG4gICAgXCJ2aXRlc3QtbW9jay1leHRlbmRlZFwiOiBcIl4xLjEuNFwiLFxuICAgIFwid2ViZXh0ZW5zaW9uLXBvbHlmaWxsXCI6IFwiXjAuMTAuMFwiXG4gIH0sXG4gIFwicGVlckRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJ3ZWJleHRlbnNpb24tcG9seWZpbGxcIjogXCI+PTAuMTAuMFwiXG4gIH0sXG4gIFwicGFja2FnZU1hbmFnZXJcIjogXCJwbnBtQDguNi4zXCIsXG4gIFwic2ltcGxlLWdpdC1ob29rc1wiOiB7XG4gICAgXCJwcmUtY29tbWl0XCI6IFwicG5wbSBsaW50LXN0YWdlZFwiXG4gIH0sXG4gIFwibGludC1zdGFnZWRcIjoge1xuICAgIFwiKlwiOiBcInByZXR0aWVyIC0td3JpdGVcIlxuICB9LFxuICBcInBucG1cIjoge1xuICAgIFwicGVlckRlcGVuZGVuY3lSdWxlc1wiOiB7XG4gICAgICBcImlnbm9yZU1pc3NpbmdcIjogW1xuICAgICAgICBcIkBhbGdvbGlhL2NsaWVudC1zZWFyY2hcIixcbiAgICAgICAgXCJzZWFyY2gtaW5zaWdodHNcIlxuICAgICAgXVxuICAgIH1cbiAgfVxufVxuIiwgImltcG9ydCB7IGxvYWRDb25maWcgfSBmcm9tICdjMTInO1xuaW1wb3J0IHtcbiAgSW5saW5lQ29uZmlnLFxuICBJbnRlcm5hbENvbmZpZyxcbiAgVXNlckNvbmZpZyxcbiAgQ29uZmlnRW52LFxuICBVc2VyTWFuaWZlc3RGbixcbiAgVXNlck1hbmlmZXN0LFxuICBXeHRWaXRlQ29uZmlnLFxuICBFeHRlbnNpb25SdW5uZXJDb25maWcsXG59IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgKiBhcyB2aXRlIGZyb20gJ3ZpdGUnO1xuaW1wb3J0IHsgY3JlYXRlRnNDYWNoZSB9IGZyb20gJy4vY3JlYXRlRnNDYWNoZSc7XG5pbXBvcnQgY29uc29sYSwgeyBMb2dMZXZlbHMgfSBmcm9tICdjb25zb2xhJztcbmltcG9ydCAqIGFzIHBsdWdpbnMgZnJvbSAnLi4vdml0ZS1wbHVnaW5zJztcbmltcG9ydCB7IGdldEdsb2JhbHMgfSBmcm9tICcuL2dsb2JhbHMnO1xuXG4vKipcbiAqIEdpdmVuIGFuIGlubGluZSBjb25maWcsIGRpc2NvdmVyIHRoZSBjb25maWcgZmlsZSBpZiBuZWNlc3NhcnksIG1lcmdlIHRoZSByZXN1bHRzLCByZXNvbHZlIGFueVxuICogcmVsYXRpdmUgcGF0aHMsIGFuZCBhcHBseSBhbnkgZGVmYXVsdHMuXG4gKlxuICogSW5saW5lIGNvbmZpZyBhbHdheXMgaGFzIHByaW9yaXR5IG92ZXIgdXNlciBjb25maWcuIENsaSBmbGFncyBhcmUgcGFzc2VkIGFzIGlubGluZSBjb25maWcgaWYgc2V0LlxuICogSWYgdW5zZXQsIHVuZGVmaW5lZCBpcyBwYXNzZWQgaW4sIGxldHRpbmcgdGhpcyBmdW5jdGlvbiBkZWNpZGUgZGVmYXVsdCB2YWx1ZXMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRJbnRlcm5hbENvbmZpZyhcbiAgaW5saW5lQ29uZmlnOiBJbmxpbmVDb25maWcsXG4gIGNvbW1hbmQ6ICdidWlsZCcgfCAnc2VydmUnLFxuKTogUHJvbWlzZTxJbnRlcm5hbENvbmZpZz4ge1xuICAvLyBMb2FkIHVzZXIgY29uZmlnXG5cbiAgbGV0IHVzZXJDb25maWc6IFVzZXJDb25maWcgPSB7fTtcbiAgaWYgKGlubGluZUNvbmZpZy5jb25maWdGaWxlICE9PSBmYWxzZSkge1xuICAgIGNvbnN0IGxvYWRlZCA9IGF3YWl0IGxvYWRDb25maWc8VXNlckNvbmZpZz4oe1xuICAgICAgbmFtZTogJ3d4dCcsXG4gICAgICBjd2Q6IGlubGluZUNvbmZpZy5yb290ID8/IHByb2Nlc3MuY3dkKCksXG4gICAgICByY0ZpbGU6IGZhbHNlLFxuICAgIH0pO1xuICAgIHVzZXJDb25maWcgPSBsb2FkZWQuY29uZmlnID8/IHt9O1xuICB9XG5cbiAgLy8gTWVyZ2UgaXQgaW50byB0aGUgaW5saW5lIGNvbmZpZ1xuXG4gIGNvbnN0IG1lcmdlZENvbmZpZyA9IG1lcmdlSW5saW5lQ29uZmlnKGlubGluZUNvbmZpZywgdXNlckNvbmZpZyk7XG5cbiAgLy8gQXBwbHkgZGVmYXVsdHMgdG8gbWFrZSBpbnRlcm5hbCBjb25maWcuXG5cbiAgY29uc3QgZGVidWcgPSBtZXJnZWRDb25maWcuZGVidWcgPz8gZmFsc2U7XG4gIGNvbnN0IGxvZ2dlciA9IG1lcmdlZENvbmZpZy5sb2dnZXIgPz8gY29uc29sYTtcbiAgaWYgKGRlYnVnKSBsb2dnZXIubGV2ZWwgPSBMb2dMZXZlbHMuZGVidWc7XG5cbiAgY29uc3QgYnJvd3NlciA9IG1lcmdlZENvbmZpZy5icm93c2VyID8/ICdjaHJvbWUnO1xuICBjb25zdCBtYW5pZmVzdFZlcnNpb24gPVxuICAgIG1lcmdlZENvbmZpZy5tYW5pZmVzdFZlcnNpb24gPz8gKGJyb3dzZXIgPT0gJ2ZpcmVmb3gnID8gMiA6IDMpO1xuICBjb25zdCBtb2RlID1cbiAgICBtZXJnZWRDb25maWcubW9kZSA/PyAoY29tbWFuZCA9PT0gJ2J1aWxkJyA/ICdwcm9kdWN0aW9uJyA6ICdkZXZlbG9wbWVudCcpO1xuICBjb25zdCBlbnY6IENvbmZpZ0VudiA9IHsgYnJvd3NlciwgY29tbWFuZCwgbWFuaWZlc3RWZXJzaW9uLCBtb2RlIH07XG5cbiAgY29uc3Qgcm9vdCA9IHBhdGgucmVzb2x2ZShcbiAgICBpbmxpbmVDb25maWcucm9vdCA/PyB1c2VyQ29uZmlnLnJvb3QgPz8gcHJvY2Vzcy5jd2QoKSxcbiAgKTtcbiAgY29uc3Qgd3h0RGlyID0gcGF0aC5yZXNvbHZlKHJvb3QsICcud3h0Jyk7XG4gIGNvbnN0IHNyY0RpciA9IHBhdGgucmVzb2x2ZShyb290LCBtZXJnZWRDb25maWcuc3JjRGlyID8/IHJvb3QpO1xuICBjb25zdCBlbnRyeXBvaW50c0RpciA9IHBhdGgucmVzb2x2ZShcbiAgICBzcmNEaXIsXG4gICAgbWVyZ2VkQ29uZmlnLmVudHJ5cG9pbnRzRGlyID8/ICdlbnRyeXBvaW50cycsXG4gICk7XG4gIGNvbnN0IHB1YmxpY0RpciA9IHBhdGgucmVzb2x2ZShzcmNEaXIsIG1lcmdlZENvbmZpZy5wdWJsaWNEaXIgPz8gJ3B1YmxpYycpO1xuICBjb25zdCB0eXBlc0RpciA9IHBhdGgucmVzb2x2ZSh3eHREaXIsICd0eXBlcycpO1xuICBjb25zdCBvdXRCYXNlRGlyID0gcGF0aC5yZXNvbHZlKHJvb3QsICcub3V0cHV0Jyk7XG4gIGNvbnN0IG91dERpciA9IHBhdGgucmVzb2x2ZShvdXRCYXNlRGlyLCBgJHticm93c2VyfS1tdiR7bWFuaWZlc3RWZXJzaW9ufWApO1xuXG4gIGNvbnN0IHJ1bm5lckNvbmZpZyA9IGF3YWl0IGxvYWRDb25maWc8RXh0ZW5zaW9uUnVubmVyQ29uZmlnPih7XG4gICAgbmFtZTogJ3dlYi1leHQnLFxuICAgIGN3ZDogcm9vdCxcbiAgICBnbG9iYWxSYzogdHJ1ZSxcbiAgICByY0ZpbGU6ICcud2ViZXh0cmMnLFxuICAgIG92ZXJyaWRlczogbWVyZ2VkQ29uZmlnLnJ1bm5lcixcbiAgfSk7XG5cbiAgY29uc3QgZmluYWxDb25maWc6IEludGVybmFsQ29uZmlnID0ge1xuICAgIGJyb3dzZXIsXG4gICAgY29tbWFuZCxcbiAgICBkZWJ1ZyxcbiAgICBlbnRyeXBvaW50c0RpcixcbiAgICBmc0NhY2hlOiBjcmVhdGVGc0NhY2hlKHd4dERpciksXG4gICAgaW1wb3J0czogbWVyZ2VkQ29uZmlnLmltcG9ydHMgPz8ge30sXG4gICAgbG9nZ2VyLFxuICAgIG1hbmlmZXN0OiBhd2FpdCByZXNvbHZlTWFuaWZlc3RDb25maWcoZW52LCBtZXJnZWRDb25maWcubWFuaWZlc3QpLFxuICAgIG1hbmlmZXN0VmVyc2lvbixcbiAgICBtb2RlLFxuICAgIG91dEJhc2VEaXIsXG4gICAgb3V0RGlyLFxuICAgIHB1YmxpY0RpcixcbiAgICByb290LFxuICAgIHJ1bm5lckNvbmZpZyxcbiAgICBzcmNEaXIsXG4gICAgdHlwZXNEaXIsXG4gICAgdml0ZToge30sIC8vIFJlYWwgdmFsdWUgYWRkZWQgYWZ0ZXIgdGhpcyBvYmplY3QgaXMgaW5pdGlhbGl6ZWQuXG4gICAgd3h0RGlyLFxuICAgIHppcDogcmVzb2x2ZUludGVybmFsWmlwQ29uZmlnKHJvb3QsIG1lcmdlZENvbmZpZyksXG4gIH07XG5cbiAgZmluYWxDb25maWcudml0ZSA9IGF3YWl0IHJlc29sdmVJbnRlcm5hbFZpdGVDb25maWcoXG4gICAgZW52LFxuICAgIG1lcmdlZENvbmZpZyxcbiAgICBmaW5hbENvbmZpZyxcbiAgKTtcblxuICByZXR1cm4gZmluYWxDb25maWc7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVNYW5pZmVzdENvbmZpZyhcbiAgZW52OiBDb25maWdFbnYsXG4gIG1hbmlmZXN0OiBVc2VyTWFuaWZlc3QgfCBQcm9taXNlPFVzZXJNYW5pZmVzdD4gfCBVc2VyTWFuaWZlc3RGbiB8IHVuZGVmaW5lZCxcbik6IFByb21pc2U8VXNlck1hbmlmZXN0PiB7XG4gIHJldHVybiBhd2FpdCAodHlwZW9mIG1hbmlmZXN0ID09PSAnZnVuY3Rpb24nXG4gICAgPyBtYW5pZmVzdChlbnYpXG4gICAgOiBtYW5pZmVzdCA/PyB7fSk7XG59XG5cbi8qKlxuICogTWVyZ2UgdGhlIGlubGluZSBjb25maWcgYW5kIHVzZXIgY29uZmlnLiBJbmxpbmUgY29uZmlnIGlzIGdpdmVuIHByaW9yaXR5LiBEZWZhdWx0cyBhcmUgbm90IGFwcGxpZWQgaGVyZS5cbiAqL1xuZnVuY3Rpb24gbWVyZ2VJbmxpbmVDb25maWcoXG4gIGlubGluZUNvbmZpZzogSW5saW5lQ29uZmlnLFxuICB1c2VyQ29uZmlnOiBVc2VyQ29uZmlnLFxuKTogSW5saW5lQ29uZmlnIHtcbiAgbGV0IGltcG9ydHM6IElubGluZUNvbmZpZ1snaW1wb3J0cyddO1xuICBpZiAoaW5saW5lQ29uZmlnLmltcG9ydHMgPT09IGZhbHNlIHx8IHVzZXJDb25maWcuaW1wb3J0cyA9PT0gZmFsc2UpIHtcbiAgICBpbXBvcnRzID0gZmFsc2U7XG4gIH0gZWxzZSBpZiAodXNlckNvbmZpZy5pbXBvcnRzID09IG51bGwgJiYgaW5saW5lQ29uZmlnLmltcG9ydHMgPT0gbnVsbCkge1xuICAgIGltcG9ydHMgPSB1bmRlZmluZWQ7XG4gIH0gZWxzZSB7XG4gICAgaW1wb3J0cyA9IHZpdGUubWVyZ2VDb25maWcoXG4gICAgICB1c2VyQ29uZmlnLmltcG9ydHMgPz8ge30sXG4gICAgICBpbmxpbmVDb25maWcuaW1wb3J0cyA/PyB7fSxcbiAgICApO1xuICB9XG4gIGNvbnN0IG1hbmlmZXN0OiBVc2VyTWFuaWZlc3RGbiA9IGFzeW5jIChlbnYpID0+IHtcbiAgICBjb25zdCB1c2VyID0gYXdhaXQgcmVzb2x2ZU1hbmlmZXN0Q29uZmlnKGVudiwgdXNlckNvbmZpZy5tYW5pZmVzdCk7XG4gICAgY29uc3QgaW5saW5lID0gYXdhaXQgcmVzb2x2ZU1hbmlmZXN0Q29uZmlnKGVudiwgaW5saW5lQ29uZmlnLm1hbmlmZXN0KTtcbiAgICByZXR1cm4gdml0ZS5tZXJnZUNvbmZpZyh1c2VyLCBpbmxpbmUpO1xuICB9O1xuICBjb25zdCB2aXRlQ29uZmlnID0gYXN5bmMgKGVudjogQ29uZmlnRW52KTogUHJvbWlzZTxXeHRWaXRlQ29uZmlnPiA9PiB7XG4gICAgY29uc3QgdXNlciA9IGF3YWl0IHJlc29sdmVWaXRlQ29uZmlnKGVudiwgdXNlckNvbmZpZy52aXRlKTtcbiAgICBjb25zdCBpbmxpbmUgPSBhd2FpdCByZXNvbHZlVml0ZUNvbmZpZyhlbnYsIGlubGluZUNvbmZpZy52aXRlKTtcbiAgICByZXR1cm4gdml0ZS5tZXJnZUNvbmZpZyh1c2VyLCBpbmxpbmUpO1xuICB9O1xuICBjb25zdCBydW5uZXI6IElubGluZUNvbmZpZ1sncnVubmVyJ10gPSB2aXRlLm1lcmdlQ29uZmlnKFxuICAgIHVzZXJDb25maWcucnVubmVyID8/IHt9LFxuICAgIGlubGluZUNvbmZpZy5ydW5uZXIgPz8ge30sXG4gICk7XG4gIGNvbnN0IHppcDogSW5saW5lQ29uZmlnWyd6aXAnXSA9IHZpdGUubWVyZ2VDb25maWcoXG4gICAgdXNlckNvbmZpZy56aXAgPz8ge30sXG4gICAgaW5saW5lQ29uZmlnLnppcCA/PyB7fSxcbiAgKTtcblxuICByZXR1cm4ge1xuICAgIHJvb3Q6IGlubGluZUNvbmZpZy5yb290ID8/IHVzZXJDb25maWcucm9vdCxcbiAgICBicm93c2VyOiBpbmxpbmVDb25maWcuYnJvd3NlciA/PyB1c2VyQ29uZmlnLmJyb3dzZXIsXG4gICAgbWFuaWZlc3RWZXJzaW9uOiBpbmxpbmVDb25maWcubWFuaWZlc3RWZXJzaW9uID8/IHVzZXJDb25maWcubWFuaWZlc3RWZXJzaW9uLFxuICAgIGNvbmZpZ0ZpbGU6IGlubGluZUNvbmZpZy5jb25maWdGaWxlLFxuICAgIGRlYnVnOiBpbmxpbmVDb25maWcuZGVidWcgPz8gdXNlckNvbmZpZy5kZWJ1ZyxcbiAgICBlbnRyeXBvaW50c0RpcjogaW5saW5lQ29uZmlnLmVudHJ5cG9pbnRzRGlyID8/IHVzZXJDb25maWcuZW50cnlwb2ludHNEaXIsXG4gICAgaW1wb3J0cyxcbiAgICBsb2dnZXI6IGlubGluZUNvbmZpZy5sb2dnZXIgPz8gdXNlckNvbmZpZy5sb2dnZXIsXG4gICAgbWFuaWZlc3QsXG4gICAgbW9kZTogaW5saW5lQ29uZmlnLm1vZGUgPz8gdXNlckNvbmZpZy5tb2RlLFxuICAgIHB1YmxpY0RpcjogaW5saW5lQ29uZmlnLnB1YmxpY0RpciA/PyB1c2VyQ29uZmlnLnB1YmxpY0RpcixcbiAgICBydW5uZXIsXG4gICAgc3JjRGlyOiBpbmxpbmVDb25maWcuc3JjRGlyID8/IHVzZXJDb25maWcuc3JjRGlyLFxuICAgIHZpdGU6IHZpdGVDb25maWcsXG4gICAgemlwLFxuICB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiByZXNvbHZlVml0ZUNvbmZpZyhcbiAgZW52OiBDb25maWdFbnYsXG4gIHZpdGU6IElubGluZUNvbmZpZ1sndml0ZSddLFxuKTogUHJvbWlzZTxXeHRWaXRlQ29uZmlnPiB7XG4gIHJldHVybiBhd2FpdCAodHlwZW9mIHZpdGUgPT09ICdmdW5jdGlvbicgPyB2aXRlKGVudikgOiB2aXRlID8/IHt9KTtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZUludGVybmFsWmlwQ29uZmlnKFxuICByb290OiBzdHJpbmcsXG4gIG1lcmdlZENvbmZpZzogSW5saW5lQ29uZmlnLFxuKTogSW50ZXJuYWxDb25maWdbJ3ppcCddIHtcbiAgcmV0dXJuIHtcbiAgICBzb3VyY2VzVGVtcGxhdGU6ICd7e25hbWV9fS17e3ZlcnNpb259fS1zb3VyY2VzLnppcCcsXG4gICAgYXJ0aWZhY3RUZW1wbGF0ZTogJ3t7bmFtZX19LXt7dmVyc2lvbn19LXt7YnJvd3Nlcn19LnppcCcsXG4gICAgc291cmNlc1Jvb3Q6IHJvb3QsXG4gICAgLi4ubWVyZ2VkQ29uZmlnLnppcCxcbiAgICBpZ25vcmVkU291cmNlczogW1xuICAgICAgJyoqL25vZGVfbW9kdWxlcycsXG4gICAgICAvLyBXWFQgZmlsZXNcbiAgICAgICcqKi93ZWItZXh0LmNvbmZpZy50cycsXG4gICAgICAvLyBIaWRkZW4gZmlsZXNcbiAgICAgICcqKi8uKicsXG4gICAgICAvLyBUZXN0c1xuICAgICAgJyoqL19fdGVzdHNfXy8qKicsXG4gICAgICAnKiovKi4rKHRlc3R8c3BlYykuPyhjfG0pKyhqfHQpcz8oeCknLFxuICAgICAgLy8gRnJvbSB1c2VyXG4gICAgICAuLi4obWVyZ2VkQ29uZmlnLnppcD8uaWdub3JlZFNvdXJjZXMgPz8gW10pLFxuICAgIF0sXG4gIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVJbnRlcm5hbFZpdGVDb25maWcoXG4gIGVudjogQ29uZmlnRW52LFxuICBtZXJnZWRDb25maWc6IElubGluZUNvbmZpZyxcbiAgZmluYWxDb25maWc6IEludGVybmFsQ29uZmlnLFxuKSB7XG4gIGNvbnN0IGludGVybmFsVml0ZTogdml0ZS5JbmxpbmVDb25maWcgPSBhd2FpdCByZXNvbHZlVml0ZUNvbmZpZyhcbiAgICBlbnYsXG4gICAgbWVyZ2VkQ29uZmlnLnZpdGUsXG4gICk7XG4gIGludGVybmFsVml0ZS5yb290ID0gZmluYWxDb25maWcucm9vdDtcbiAgaW50ZXJuYWxWaXRlLmNvbmZpZ0ZpbGUgPSBmYWxzZTtcbiAgaW50ZXJuYWxWaXRlLmxvZ0xldmVsID0gJ3dhcm4nO1xuXG4gIGludGVybmFsVml0ZS5idWlsZCA/Pz0ge307XG4gIGludGVybmFsVml0ZS5idWlsZC5vdXREaXIgPSBmaW5hbENvbmZpZy5vdXREaXI7XG4gIGludGVybmFsVml0ZS5idWlsZC5lbXB0eU91dERpciA9IGZhbHNlO1xuXG4gIGludGVybmFsVml0ZS5wbHVnaW5zID8/PSBbXTtcbiAgaW50ZXJuYWxWaXRlLnBsdWdpbnMucHVzaChwbHVnaW5zLmRvd25sb2FkKGZpbmFsQ29uZmlnKSk7XG4gIGludGVybmFsVml0ZS5wbHVnaW5zLnB1c2gocGx1Z2lucy5kZXZIdG1sUHJlcmVuZGVyKGZpbmFsQ29uZmlnKSk7XG4gIGludGVybmFsVml0ZS5wbHVnaW5zLnB1c2gocGx1Z2lucy51bmltcG9ydChmaW5hbENvbmZpZykpO1xuICBpbnRlcm5hbFZpdGUucGx1Z2lucy5wdXNoKFxuICAgIHBsdWdpbnMudmlydHVhbEVudHJ5cG9pbignYmFja2dyb3VuZCcsIGZpbmFsQ29uZmlnKSxcbiAgKTtcbiAgaW50ZXJuYWxWaXRlLnBsdWdpbnMucHVzaChcbiAgICBwbHVnaW5zLnZpcnR1YWxFbnRyeXBvaW4oJ2NvbnRlbnQtc2NyaXB0JywgZmluYWxDb25maWcpLFxuICApO1xuICBpbnRlcm5hbFZpdGUucGx1Z2lucy5wdXNoKHBsdWdpbnMuZGV2U2VydmVyR2xvYmFscyhmaW5hbENvbmZpZykpO1xuICBpbnRlcm5hbFZpdGUucGx1Z2lucy5wdXNoKHBsdWdpbnMudHNjb25maWdQYXRocyhmaW5hbENvbmZpZykpO1xuICBpbnRlcm5hbFZpdGUucGx1Z2lucy5wdXNoKHBsdWdpbnMubm9vcEJhY2tncm91bmQoKSk7XG5cbiAgaW50ZXJuYWxWaXRlLmRlZmluZSA/Pz0ge307XG4gIGZvciAoY29uc3QgZ2xvYmFsIG9mIGdldEdsb2JhbHMoZmluYWxDb25maWcpKSB7XG4gICAgaW50ZXJuYWxWaXRlLmRlZmluZVtnbG9iYWwubmFtZV0gPSBKU09OLnN0cmluZ2lmeShnbG9iYWwudmFsdWUpO1xuICB9XG4gIHJldHVybiBpbnRlcm5hbFZpdGU7XG59XG4iLCAiaW1wb3J0IGZzLCB7IGVuc3VyZURpciB9IGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCB7IEZzQ2FjaGUgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBkaXJuYW1lLCByZXNvbHZlIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQgeyB3cml0ZUZpbGVJZkRpZmZlcmVudCB9IGZyb20gJy4vZnMnO1xuXG4vKipcbiAqIEEgYmFzaWMgZmlsZSBzeXN0ZW0gY2FjaGUgc3RvcmVkIGF0IGA8c3JjRGlyPi8ud3h0L2NhY2hlLzxrZXk+YC4gSnVzdCBjYWNoZXMgYSBzdHJpbmcgaW4gYVxuICogZmlsZSBmb3IgdGhlIGdpdmVuIGtleS5cbiAqXG4gKiBAcGFyYW0gc3JjRGlyIEFic29sdXRlIHBhdGggdG8gc291cmNlIGRpcmVjdG9yeS4gU2VlIGBJbnRlcm5hbENvbmZpZy5zcmNEaXJgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVGc0NhY2hlKHd4dERpcjogc3RyaW5nKTogRnNDYWNoZSB7XG4gIGNvbnN0IGdldFBhdGggPSAoa2V5OiBzdHJpbmcpID0+XG4gICAgcmVzb2x2ZSh3eHREaXIsICdjYWNoZScsIGVuY29kZVVSSUNvbXBvbmVudChrZXkpKTtcblxuICByZXR1cm4ge1xuICAgIGFzeW5jIHNldChrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgY29uc3QgcGF0aCA9IGdldFBhdGgoa2V5KTtcbiAgICAgIGF3YWl0IGVuc3VyZURpcihkaXJuYW1lKHBhdGgpKTtcbiAgICAgIGF3YWl0IHdyaXRlRmlsZUlmRGlmZmVyZW50KHBhdGgsIHZhbHVlKTtcbiAgICB9LFxuICAgIGFzeW5jIGdldChrZXk6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gICAgICBjb25zdCBwYXRoID0gZ2V0UGF0aChrZXkpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IGZzLnJlYWRGaWxlKHBhdGgsICd1dGYtOCcpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfSxcbiAgfTtcbn1cbiIsICJpbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnO1xuXG4vKipcbiAqIE9ubHkgd3JpdGUgdGhlIGNvbnRlbnRzIHRvIGEgZmlsZSBpZiBpdCByZXN1bHRzIGluIGEgY2hhbmdlLiBUaGlzIHByZXZlbnRzIHVubmVjZXNzYXJ5IGZpbGVcbiAqIHdhdGNoZXJzIGZyb20gYmVpbmcgdHJpZ2dlcmVkLCBsaWtlIFdYVCdzIGRldiBzZXJ2ZXIgb3IgdGhlIFRTIGxhbmd1YWdlIHNlcnZlciBpbiBlZGl0b3JzLlxuICpcbiAqIEBwYXJhbSBmaWxlIFRoZSBmaWxlIHRvIHdyaXRlIHRvLlxuICogQHBhcmFtIG5ld0NvbnRlbnRzIFRoZSBuZXcgdGV4dCBjb250ZW50IHRvIHdyaXRlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd3JpdGVGaWxlSWZEaWZmZXJlbnQoXG4gIGZpbGU6IHN0cmluZyxcbiAgbmV3Q29udGVudHM6IHN0cmluZyxcbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBleGlzdGluZ0NvbnRlbnRzID0gYXdhaXQgZnNcbiAgICAucmVhZEZpbGUoZmlsZSwgJ3V0Zi04JylcbiAgICAuY2F0Y2goKCkgPT4gdW5kZWZpbmVkKTtcblxuICBpZiAoZXhpc3RpbmdDb250ZW50cyAhPT0gbmV3Q29udGVudHMpIHtcbiAgICBhd2FpdCBmcy53cml0ZUZpbGUoZmlsZSwgbmV3Q29udGVudHMpO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgRW50cnlwb2ludCB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCBwYXRoLCB7IHJlbGF0aXZlLCByZXNvbHZlIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IG5vcm1hbGl6ZVBhdGggfSBmcm9tICcuL3BhdGhzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGdldEVudHJ5cG9pbnROYW1lKFxuICBlbnRyeXBvaW50c0Rpcjogc3RyaW5nLFxuICBpbnB1dFBhdGg6IHN0cmluZyxcbiAgLy8gdHlwZTogRW50cnlwb2ludFsndHlwZSddLFxuKTogc3RyaW5nIHtcbiAgY29uc3QgcmVsYXRpdmVQYXRoID0gcGF0aC5yZWxhdGl2ZShlbnRyeXBvaW50c0RpciwgaW5wdXRQYXRoKTtcbiAgLy8gR3JhYiB0aGUgc3RyaW5nIHVwIHRvIHRoZSBmaXJzdCAuIG9yIC8gb3IgXFxcXFxuICBjb25zdCBuYW1lID0gcmVsYXRpdmVQYXRoLnNwbGl0KC9bXFwuXFwvXFxcXF0vLCAyKVswXTtcblxuICByZXR1cm4gbmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEVudHJ5cG9pbnRPdXRwdXRGaWxlKFxuICBlbnRyeXBvaW50OiBFbnRyeXBvaW50LFxuICBleHQ6IHN0cmluZyxcbik6IHN0cmluZyB7XG4gIHJldHVybiByZXNvbHZlKGVudHJ5cG9pbnQub3V0cHV0RGlyLCBgJHtlbnRyeXBvaW50Lm5hbWV9JHtleHR9YCk7XG59XG5cbi8qKlxuICogUmV0dXJuJ3MgdGhlIGVudHJ5cG9pbnQncyBvdXRwdXQgcGF0aCByZWxhdGl2ZSB0byB0aGUgb3V0cHV0IGRpcmVjdG9yeS4gVXNlZCBmb3IgcGF0aHMgaW4gdGhlXG4gKiBtYW5pZmVzdCBhbmQgcm9sbHVwJ3MgYnVuZGxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW50cnlwb2ludEJ1bmRsZVBhdGgoXG4gIGVudHJ5cG9pbnQ6IEVudHJ5cG9pbnQsXG4gIG91dERpcjogc3RyaW5nLFxuICBleHQ6IHN0cmluZyxcbik6IHN0cmluZyB7XG4gIHJldHVybiBub3JtYWxpemVQYXRoKFxuICAgIHJlbGF0aXZlKG91dERpciwgZ2V0RW50cnlwb2ludE91dHB1dEZpbGUoZW50cnlwb2ludCwgZXh0KSksXG4gICk7XG59XG4iLCAiaW1wb3J0IG5vZGVQYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgKiBhcyB2aXRlIGZyb20gJ3ZpdGUnO1xuXG4vKipcbiAqIENvbnZlcnRzIHN5c3RlbSBwYXRocyB0byBub3JtYWxpemVkIGJ1bmRsZXIgcGF0aC4gT24gd2luZG93cyBhbmQgdW5peCwgdGhpcyByZXR1cm5zIHBhdGhzIHdpdGggL1xuICogaW5zdGVhZCBvZiBcXC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZVBhdGgocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHZpdGUubm9ybWFsaXplUGF0aChwYXRoKTtcbn1cblxuLyoqXG4gKiBHaXZlbiBhIG5vcm1hbGl6ZWQgcGF0aCwgY29udmVydCBpdCB0byB0aGUgc3lzdGVtIHBhdGggc3R5bGUuIE9uIFdpbmRvd3MsIHN3aXRjaCB0byBcXCwgb3RoZXJ3aXNlIHVzZSAvLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdW5ub3JtYWxpemVQYXRoKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBub2RlUGF0aC5ub3JtYWxpemUocGF0aCk7XG59XG5cbmV4cG9ydCBjb25zdCBDU1NfRVhURU5TSU9OUyA9IFsnY3NzJywgJ3Njc3MnLCAnc2FzcycsICdsZXNzJywgJ3N0eWwnLCAnc3R5bHVzJ107XG5cbi8vIC5tb2R1bGUuY3NzIGZpbGVzIGFyZSBub3Qgc3VwcG9ydGVkIGJlY2F1c2UgdGhlc2UgYXJlIGdsb2JhbCBDU1MgZmlsZXMsIHNvIHVzaW5nIENTUyBtb2R1bGVzIGRvZXNuJ3QgbWFrZSBzZW5zZS5cbmV4cG9ydCBjb25zdCBDU1NfRVhURU5TSU9OU19QQVRURVJOID0gYCsoJHtDU1NfRVhURU5TSU9OUy5qb2luKCd8Jyl9KWA7XG4iLCAiaW1wb3J0ICogYXMgdml0ZSBmcm9tICd2aXRlJztcbmltcG9ydCB7IEludGVybmFsQ29uZmlnIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgZ2V0RW50cnlwb2ludE5hbWUgfSBmcm9tICcuLi91dGlscy9lbnRyeXBvaW50cyc7XG5pbXBvcnQgeyBwYXJzZUhUTUwgfSBmcm9tICdsaW5rZWRvbSc7XG5pbXBvcnQgeyBkaXJuYW1lLCBpc0Fic29sdXRlLCByZWxhdGl2ZSwgcmVzb2x2ZSB9IGZyb20gJ3BhdGgnO1xuXG4vKipcbiAqIFByZS1yZW5kZXJzIHRoZSBIVE1MIGVudHJ5cG9pbnRzIHdoZW4gYnVpbGRpbmcgdGhlIGV4dGVuc2lvbiB0byBjb25uZWN0IHRvIHRoZSBkZXYgc2VydmVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGV2SHRtbFByZXJlbmRlcihjb25maWc6IEludGVybmFsQ29uZmlnKTogdml0ZS5QbHVnaW4ge1xuICByZXR1cm4ge1xuICAgIGFwcGx5OiAnYnVpbGQnLFxuICAgIG5hbWU6ICd3eHQ6ZGV2LWh0bWwtcHJlcmVuZGVyJyxcbiAgICBjb25maWcoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICByZXNvbHZlOiB7XG4gICAgICAgICAgYWxpYXM6IHtcbiAgICAgICAgICAgICdAd3h0L3JlbG9hZC1odG1sJzogcmVzb2x2ZShcbiAgICAgICAgICAgICAgY29uZmlnLnJvb3QsXG4gICAgICAgICAgICAgICdub2RlX21vZHVsZXMvd3h0L2Rpc3QvdmlydHVhbC1tb2R1bGVzL3JlbG9hZC1odG1sLmpzJyxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfSxcbiAgICBhc3luYyB0cmFuc2Zvcm0oaHRtbCwgaWQpIHtcbiAgICAgIGNvbnN0IHNlcnZlciA9IGNvbmZpZy5zZXJ2ZXI7XG4gICAgICBpZiAoY29uZmlnLmNvbW1hbmQgIT09ICdzZXJ2ZScgfHwgc2VydmVyID09IG51bGwgfHwgIWlkLmVuZHNXaXRoKCcuaHRtbCcpKVxuICAgICAgICByZXR1cm47XG5cbiAgICAgIGNvbnN0IG9yaWdpbmFsVXJsID0gYCR7c2VydmVyLm9yaWdpbn0ke2lkfWA7XG4gICAgICBjb25zdCBuYW1lID0gZ2V0RW50cnlwb2ludE5hbWUoY29uZmlnLmVudHJ5cG9pbnRzRGlyLCBpZCk7XG4gICAgICBjb25zdCB1cmwgPSBgJHtzZXJ2ZXIub3JpZ2lufS8ke25hbWV9Lmh0bWxgO1xuICAgICAgY29uc3Qgc2VydmVySHRtbCA9IGF3YWl0IHNlcnZlci50cmFuc2Zvcm1JbmRleEh0bWwoXG4gICAgICAgIHVybCxcbiAgICAgICAgaHRtbCxcbiAgICAgICAgb3JpZ2luYWxVcmwsXG4gICAgICApO1xuICAgICAgY29uc3QgeyBkb2N1bWVudCB9ID0gcGFyc2VIVE1MKHNlcnZlckh0bWwpO1xuXG4gICAgICBjb25zdCBwb2ludFRvRGV2U2VydmVyID0gKHF1ZXJ5U2VsZWN0b3I6IHN0cmluZywgYXR0cjogc3RyaW5nKTogdm9pZCA9PiB7XG4gICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwocXVlcnlTZWxlY3RvcikuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHNyYyA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKGF0dHIpO1xuICAgICAgICAgIGlmICghc3JjKSByZXR1cm47XG5cbiAgICAgICAgICBpZiAoaXNBYnNvbHV0ZShzcmMpKSB7XG4gICAgICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShhdHRyLCBzZXJ2ZXIub3JpZ2luICsgc3JjKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHNyYy5zdGFydHNXaXRoKCcuJykpIHtcbiAgICAgICAgICAgIGNvbnN0IGFicyA9IHJlc29sdmUoZGlybmFtZShpZCksIHNyYyk7XG4gICAgICAgICAgICBjb25zdCBwYXRobmFtZSA9IHJlbGF0aXZlKGNvbmZpZy5yb290LCBhYnMpO1xuICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoYXR0ciwgYCR7c2VydmVyLm9yaWdpbn0vJHtwYXRobmFtZX1gKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIHBvaW50VG9EZXZTZXJ2ZXIoJ3NjcmlwdFt0eXBlPW1vZHVsZV0nLCAnc3JjJyk7XG4gICAgICBwb2ludFRvRGV2U2VydmVyKCdsaW5rW3JlbD1zdHlsZXNoZWV0XScsICdocmVmJyk7XG5cbiAgICAgIC8vIEFkZCBhIHNjcmlwdCB0byBhZGQgcGFnZSByZWxvYWRpbmdcbiAgICAgIGNvbnN0IHJlbG9hZGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XG4gICAgICByZWxvYWRlci5zcmMgPSAnQHd4dC9yZWxvYWQtaHRtbCc7XG4gICAgICByZWxvYWRlci50eXBlID0gJ21vZHVsZSc7XG4gICAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHJlbG9hZGVyKTtcblxuICAgICAgY29uc3QgbmV3SHRtbCA9IGRvY3VtZW50LnRvU3RyaW5nKCk7XG4gICAgICBjb25maWcubG9nZ2VyLmRlYnVnKCdUcmFuc2Zvcm1lZCAnICsgaWQpO1xuICAgICAgY29uZmlnLmxvZ2dlci5kZWJ1ZygnT2xkIEhUTUw6XFxuJyArIGh0bWwpO1xuICAgICAgY29uZmlnLmxvZ2dlci5kZWJ1ZygnTmV3IEhUTUw6XFxuJyArIG5ld0h0bWwpO1xuICAgICAgcmV0dXJuIG5ld0h0bWw7XG4gICAgfSxcbiAgfTtcbn1cbiIsICJpbXBvcnQgeyBQbHVnaW4gfSBmcm9tICd2aXRlJztcbmltcG9ydCB7IEludGVybmFsQ29uZmlnIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG4vKipcbiAqIERlZmluZXMgZ2xvYmFsIGNvbnN0YW50cyBhYm91dCB0aGUgZGV2IHNlcnZlci4gSGVscHMgc2NyaXB0cyBjb25uZWN0IHRvIHRoZSBzZXJ2ZXIncyB3ZWIgc29ja2V0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGV2U2VydmVyR2xvYmFscyhpbnRlcm5hbENvbmZpZzogSW50ZXJuYWxDb25maWcpOiBQbHVnaW4ge1xuICByZXR1cm4ge1xuICAgIG5hbWU6ICd3eHQ6ZGV2LXNlcnZlci1nbG9iYWxzJyxcbiAgICBjb25maWcoKSB7XG4gICAgICBpZiAoaW50ZXJuYWxDb25maWcuc2VydmVyID09IG51bGwgfHwgaW50ZXJuYWxDb25maWcuY29tbWFuZCA9PSAnYnVpbGQnKVxuICAgICAgICByZXR1cm47XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRlZmluZToge1xuICAgICAgICAgIF9fREVWX1NFUlZFUl9QUk9UT0NPTF9fOiBKU09OLnN0cmluZ2lmeSgnd3M6JyksXG4gICAgICAgICAgX19ERVZfU0VSVkVSX0hPU1ROQU1FX186IEpTT04uc3RyaW5naWZ5KFxuICAgICAgICAgICAgaW50ZXJuYWxDb25maWcuc2VydmVyLmhvc3RuYW1lLFxuICAgICAgICAgICksXG4gICAgICAgICAgX19ERVZfU0VSVkVSX1BPUlRfXzogSlNPTi5zdHJpbmdpZnkoaW50ZXJuYWxDb25maWcuc2VydmVyLnBvcnQpLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9LFxuICB9O1xufVxuIiwgImltcG9ydCBkbnMgZnJvbSAnbm9kZTpkbnMnO1xuaW1wb3J0IHsgd2l0aFRpbWVvdXQgfSBmcm9tICcuL3Byb21pc2VzJztcbmltcG9ydCB7IEludGVybmFsQ29uZmlnIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5mdW5jdGlvbiBpc09mZmxpbmUoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGNvbnN0IGlzT2ZmbGluZSA9IG5ldyBQcm9taXNlPGJvb2xlYW4+KChyZXMpID0+IHtcbiAgICBkbnMucmVzb2x2ZSgnZ29vZ2xlLmNvbScsIChlcnIpID0+IHtcbiAgICAgIGlmIChlcnIgPT0gbnVsbCkge1xuICAgICAgICByZXMoZmFsc2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzKHRydWUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbiAgcmV0dXJuIHdpdGhUaW1lb3V0KGlzT2ZmbGluZSwgMWUzKS5jYXRjaCgoKSA9PiB0cnVlKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGlzT25saW5lKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCBvZmZsaW5lID0gYXdhaXQgaXNPZmZsaW5lKCk7XG4gIHJldHVybiAhb2ZmbGluZTtcbn1cblxuLyoqXG4gKiBGZXRjaGVzIGEgVVJMIHdpdGggYSBzaW1wbGUgR0VUIHJlcXVlc3QuIEdyYWJzIGl0IGZyb20gY2FjaGUgaWYgaXQgZG9lc24ndCBleGlzdCwgb3IgdGhyb3dzIGFuXG4gKiBlcnJvciBpZiBpdCBjYW4ndCBiZSByZXNvbHZlZCB2aWEgdGhlIG5ldHdvcmsgb3IgY2FjaGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmZXRjaENhY2hlZChcbiAgdXJsOiBzdHJpbmcsXG4gIGNvbmZpZzogSW50ZXJuYWxDb25maWcsXG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICBsZXQgY29udGVudDogc3RyaW5nID0gJyc7XG5cbiAgaWYgKGF3YWl0IGlzT25saW5lKCkpIHtcbiAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaCh1cmwpO1xuICAgIGlmIChyZXMuc3RhdHVzIDwgMzAwKSB7XG4gICAgICBjb250ZW50ID0gYXdhaXQgcmVzLnRleHQoKTtcbiAgICAgIGF3YWl0IGNvbmZpZy5mc0NhY2hlLnNldCh1cmwsIGNvbnRlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25maWcubG9nZ2VyLmRlYnVnKFxuICAgICAgICBgRmFpbGVkIHRvIGRvd25sb2FkIFwiJHt1cmx9XCIsIGZhbGxpbmcgYmFjayB0byBjYWNoZS4uLmAsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGlmICghY29udGVudCkgY29udGVudCA9IChhd2FpdCBjb25maWcuZnNDYWNoZS5nZXQodXJsKSkgPz8gJyc7XG4gIGlmICghY29udGVudClcbiAgICB0aHJvdyBFcnJvcihcbiAgICAgIGBPZmZsaW5lIGFuZCBcIiR7dXJsfVwiIGhhcyBub3QgYmVlbiBjYWNoZWQuIFRyeSBhZ2FpbiB3aGVuIG9ubGluZS5gLFxuICAgICk7XG5cbiAgcmV0dXJuIGNvbnRlbnQ7XG59XG4iLCAiLyoqXG4gKiBBZGQgYSB0aW1lb3V0IHRvIGEgcHJvbWlzZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdpdGhUaW1lb3V0PFQ+KFxuICBwcm9taXNlOiBQcm9taXNlPFQ+LFxuICBkdXJhdGlvbjogbnVtYmVyLFxuKTogUHJvbWlzZTxUPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzLCByZWopID0+IHtcbiAgICBjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICByZWooYFByb21pc2UgdGltZWQgb3V0IGFmdGVyICR7ZHVyYXRpb259bXNgKTtcbiAgICB9LCBkdXJhdGlvbik7XG4gICAgcHJvbWlzZVxuICAgICAgLnRoZW4ocmVzKVxuICAgICAgLmNhdGNoKHJlailcbiAgICAgIC5maW5hbGx5KCgpID0+IGNsZWFyVGltZW91dCh0aW1lb3V0KSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIERvbid0IHVzZSBpbiBwcm9kdWN0aW9uLCBqdXN0IGZvciB0ZXN0aW5nIGFuZCBzbG93aW5nIHRoaW5ncyBkb3duLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2xlZXAobXM6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlcykgPT4gc2V0VGltZW91dChyZXMsIG1zKSk7XG59XG4iLCAiaW1wb3J0IHsgUGx1Z2luIH0gZnJvbSAndml0ZSc7XG5pbXBvcnQgeyBJbnRlcm5hbENvbmZpZyB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IGZldGNoQ2FjaGVkIH0gZnJvbSAnLi4vdXRpbHMvbmV0d29yayc7XG5cbi8qKlxuICogRG93bmxvYWRzIGFueSBVUkwgaW1wb3J0cywgbGlrZSBHb29nbGUgQW5hbHl0aWNzLCBpbnRvIHZpcnR1YWwgbW9kdWxlcyBzbyB0aGV5IGFyZSBidW5kbGVkIHdpdGhcbiAqIHRoZSBleHRlbnNpb24gaW5zdGVhZCBvZiBkZXBlbmRpbmcgb24gcmVtb3RlIGNvZGUgYXQgcnVudGltZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogaW1wb3J0IFwidXJsOmh0dHBzOi8vZ29vZ2xlLXRhZ21hbmFnZXIuY29tL2d0YWc/aWQ9WFlaXCI7XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkb3dubG9hZChjb25maWc6IEludGVybmFsQ29uZmlnKTogUGx1Z2luIHtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnd3h0OmRvd25sb2FkJyxcbiAgICByZXNvbHZlSWQoaWQpIHtcbiAgICAgIGlmIChpZC5zdGFydHNXaXRoKCd1cmw6JykpIHJldHVybiAnXFwwJyArIGlkO1xuICAgIH0sXG4gICAgYXN5bmMgbG9hZChpZCkge1xuICAgICAgaWYgKCFpZC5zdGFydHNXaXRoKCdcXDB1cmw6JykpIHJldHVybjtcblxuICAgICAgLy8gTG9hZCBmaWxlIGZyb20gbmV0d29yayBvciBjYWNoZVxuICAgICAgY29uc3QgdXJsID0gaWQucmVwbGFjZSgnXFwwdXJsOicsICcnKTtcbiAgICAgIHJldHVybiBhd2FpdCBmZXRjaENhY2hlZCh1cmwsIGNvbmZpZyk7XG4gICAgfSxcbiAgfTtcbn1cbiIsICJpbXBvcnQgKiBhcyB2aXRlIGZyb20gJ3ZpdGUnO1xuaW1wb3J0IHsgRW50cnlwb2ludCwgSW50ZXJuYWxDb25maWcgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBkaXJuYW1lLCBleHRuYW1lLCByZXNvbHZlIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IGdldEVudHJ5cG9pbnRCdW5kbGVQYXRoIH0gZnJvbSAnLi4vdXRpbHMvZW50cnlwb2ludHMnO1xuaW1wb3J0IGZzLCB7IGVuc3VyZURpciB9IGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCB7IG5vcm1hbGl6ZVBhdGggfSBmcm9tICcuLi91dGlscy9wYXRocyc7XG5cbi8qKlxuICogRW5zdXJlcyB0aGUgSFRNTCBmaWxlcyBvdXRwdXQgYnkgYSBtdWx0aXBhZ2UgYnVpbGQgYXJlIGluIHRoZSBjb3JyZWN0IGxvY2F0aW9uLiBUaGlzIGRvZXMgdHdvXG4gKiB0aGluZ3M6XG4gKlxuICogMS4gTW92ZXMgdGhlIEhNVEwgZmlsZXMgdG8gdGhlaXIgZmluYWwgbG9jYXRpb24gYXQgYDxvdXREaXI+LzxlbnRyeXBvaW50Lm5hbWU+Lmh0bWxgLlxuICogMi4gVXBkYXRlcyB0aGUgYnVuZGxlIHNvIGl0IHN1bW1hcml6ZXMgdGhlIGZpbGVzIGNvcnJlY3RseSBpbiB0aGUgcmV0dXJuZWQgYnVpbGQgb3V0cHV0LlxuICpcbiAqIEFzc2V0cyAoSlMgYW5kIENTUykgYXJlIG91dHB1dCB0byB0aGUgYDxvdXREaXI+L2Fzc2V0c2AgZGlyZWN0b3J5LCBhbmQgZG9uJ3QgbmVlZCB0byBiZSBtb2RpZmllZC5cbiAqIEhUTUwgZmlsZXMgYWNjZXNzIHRoZW0gdmlhIGFic29sdXRlIFVSTHMsIHNvIHdlIGRvbid0IG5lZWQgdG8gdXBkYXRlIGFueSBpbXBvcnQgcGF0aHMgaW4gdGhlIEhUTUxcbiAqIGZpbGVzIGVpdGhlci5cbiAqXG4gKiBUSElTIFBMVUdJTiBTSE9VTEQgT05MWSBCRSBBUFBMSUVEIFRPIE1VTFRJUEFHRSBCVUlMRFMuIEl0IHNob3VsZCBub3QgYmUgYWRkZWQgdG8gZXZlcnkgYnVpbGQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtdWx0aXBhZ2VNb3ZlKFxuICBlbnRyeXBvaW50czogRW50cnlwb2ludFtdLFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuKTogdml0ZS5QbHVnaW4ge1xuICByZXR1cm4ge1xuICAgIG5hbWU6ICd3eHQ6bXVsdGlwYWdlLW1vdmUnLFxuICAgIGFzeW5jIHdyaXRlQnVuZGxlKF8sIGJ1bmRsZSkge1xuICAgICAgZm9yIChjb25zdCBvbGRCdW5kbGVQYXRoIGluIGJ1bmRsZSkge1xuICAgICAgICAvLyBvbGRCdW5kbGVQYXRoID0gJ2VudHJ5cG9pbnRzL3BvcHVwLmh0bWwnIG9yICdlbnRyeXBvaW50cy9vcHRpb25zL2luZGV4Lmh0bWwnXG5cbiAgICAgICAgLy8gRmluZCBhIG1hdGNoaW5nIGVudHJ5cG9pbnQgLSBvbGRCdW5kbGVQYXRoIGlzIHRoZSBzYW1lIGFzIGVuZCBlbmQgb2YgdGhlIGlucHV0IHBhdGguXG4gICAgICAgIGNvbnN0IGVudHJ5cG9pbnQgPSBlbnRyeXBvaW50cy5maW5kKFxuICAgICAgICAgIChlbnRyeSkgPT4gISFub3JtYWxpemVQYXRoKGVudHJ5LmlucHV0UGF0aCkuZW5kc1dpdGgob2xkQnVuZGxlUGF0aCksXG4gICAgICAgICk7XG4gICAgICAgIGlmIChlbnRyeXBvaW50ID09IG51bGwpIHtcbiAgICAgICAgICBjb25maWcubG9nZ2VyLmRlYnVnKFxuICAgICAgICAgICAgYE5vIGVudHJ5cG9pbnQgZm91bmQgZm9yICR7b2xkQnVuZGxlUGF0aH0sIGxlYXZpbmcgaW4gY2h1bmtzIGRpcmVjdG9yeWAsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEdldCB0aGUgbmV3IGJ1bmRsZSBwYXRoXG4gICAgICAgIGNvbnN0IG5ld0J1bmRsZVBhdGggPSBnZXRFbnRyeXBvaW50QnVuZGxlUGF0aChcbiAgICAgICAgICBlbnRyeXBvaW50LFxuICAgICAgICAgIGNvbmZpZy5vdXREaXIsXG4gICAgICAgICAgZXh0bmFtZShvbGRCdW5kbGVQYXRoKSxcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKG5ld0J1bmRsZVBhdGggPT09IG9sZEJ1bmRsZVBhdGgpIHtcbiAgICAgICAgICBjb25maWcubG9nZ2VyLmRlYnVnKFxuICAgICAgICAgICAgJ0hUTUwgZmlsZSBpcyBhbHJlYWR5IGluIHRoZSBjb3JyZWN0IGxvY2F0aW9uJyxcbiAgICAgICAgICAgIG9sZEJ1bmRsZVBhdGgsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE1vdmUgZmlsZSBhbmQgdXBkYXRlIGJ1bmRsZVxuICAgICAgICAvLyBEbyB0aGlzIGluc2lkZSBhIG11dGV4IGxvY2sgc28gaXQgb25seSBydW5zIG9uZSBhdCBhIHRpbWUgZm9yIGNvbmN1cnJlbnQgbXVsdGlwYWdlIGJ1aWxkc1xuICAgICAgICBjb25zdCBvbGRBYnNQYXRoID0gcmVzb2x2ZShjb25maWcub3V0RGlyLCBvbGRCdW5kbGVQYXRoKTtcbiAgICAgICAgY29uc3QgbmV3QWJzUGF0aCA9IHJlc29sdmUoY29uZmlnLm91dERpciwgbmV3QnVuZGxlUGF0aCk7XG4gICAgICAgIGF3YWl0IGVuc3VyZURpcihkaXJuYW1lKG5ld0Fic1BhdGgpKTtcbiAgICAgICAgYXdhaXQgZnMubW92ZShvbGRBYnNQYXRoLCBuZXdBYnNQYXRoLCB7IG92ZXJ3cml0ZTogdHJ1ZSB9KTtcblxuICAgICAgICBjb25zdCByZW5hbWVkQ2h1bmsgPSB7XG4gICAgICAgICAgLi4uYnVuZGxlW29sZEJ1bmRsZVBhdGhdLFxuICAgICAgICAgIGZpbGVOYW1lOiBuZXdCdW5kbGVQYXRoLFxuICAgICAgICB9O1xuICAgICAgICBkZWxldGUgYnVuZGxlW29sZEJ1bmRsZVBhdGhdO1xuICAgICAgICBidW5kbGVbbmV3QnVuZGxlUGF0aF0gPSByZW5hbWVkQ2h1bms7XG4gICAgICB9XG4gICAgfSxcbiAgfTtcbn1cbiIsICJpbXBvcnQgeyBjcmVhdGVVbmltcG9ydCB9IGZyb20gJ3VuaW1wb3J0JztcbmltcG9ydCB7IEludGVybmFsQ29uZmlnIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgZ2V0VW5pbXBvcnRPcHRpb25zIH0gZnJvbSAnLi4vdXRpbHMvYXV0by1pbXBvcnRzJztcbmltcG9ydCAqIGFzIHZpdGUgZnJvbSAndml0ZSc7XG5pbXBvcnQgeyBleHRuYW1lIH0gZnJvbSAncGF0aCc7XG5cbmNvbnN0IEVOQUJMRURfRVhURU5TSU9OUzogUmVjb3JkPHN0cmluZywgYm9vbGVhbiB8IHVuZGVmaW5lZD4gPSB7XG4gICcuanMnOiB0cnVlLFxuICAnLmpzeCc6IHRydWUsXG4gICcudHMnOiB0cnVlLFxuICAnLnRzeCc6IHRydWUsXG4gICcudnVlJzogdHJ1ZSxcbiAgJy5zdmVsdGUnOiB0cnVlLFxufTtcblxuLyoqXG4gKiBJbmplY3QgYW55IGdsb2JhbCBpbXBvcnRzIGRlZmluZWQgYnkgdW5pbXBvcnRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVuaW1wb3J0KGNvbmZpZzogSW50ZXJuYWxDb25maWcpOiB2aXRlLlBsdWdpbk9wdGlvbiB7XG4gIGNvbnN0IG9wdGlvbnMgPSBnZXRVbmltcG9ydE9wdGlvbnMoY29uZmlnKTtcbiAgaWYgKG9wdGlvbnMgPT09IGZhbHNlKSByZXR1cm4gW107XG5cbiAgY29uc3QgdW5pbXBvcnQgPSBjcmVhdGVVbmltcG9ydChvcHRpb25zKTtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICd3eHQ6dW5pbXBvcnQnLFxuICAgIGFzeW5jIGNvbmZpZygpIHtcbiAgICAgIGF3YWl0IHVuaW1wb3J0LnNjYW5JbXBvcnRzRnJvbURpcih1bmRlZmluZWQsIHsgY3dkOiBjb25maWcuc3JjRGlyIH0pO1xuICAgIH0sXG4gICAgYXN5bmMgdHJhbnNmb3JtKGNvZGUsIGlkKSB7XG4gICAgICBjb25zdCBleHQgPSBleHRuYW1lKGlkKTtcbiAgICAgIGlmIChFTkFCTEVEX0VYVEVOU0lPTlNbZXh0XSkgcmV0dXJuIHVuaW1wb3J0LmluamVjdEltcG9ydHMoY29kZSwgaWQpO1xuICAgIH0sXG4gIH07XG59XG4iLCAiaW1wb3J0IHsgVW5pbXBvcnRPcHRpb25zIH0gZnJvbSAndW5pbXBvcnQnO1xuaW1wb3J0IHsgSW50ZXJuYWxDb25maWcgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBtZXJnZUNvbmZpZyB9IGZyb20gJ3ZpdGUnO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VW5pbXBvcnRPcHRpb25zKFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuKTogUGFydGlhbDxVbmltcG9ydE9wdGlvbnMgfCBmYWxzZT4ge1xuICBpZiAoY29uZmlnLmltcG9ydHMgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XG5cbiAgY29uc3QgZGVmYXVsdE9wdGlvbnM6IFBhcnRpYWw8VW5pbXBvcnRPcHRpb25zPiA9IHtcbiAgICBkZWJ1Z0xvZzogY29uZmlnLmxvZ2dlci5kZWJ1ZyxcbiAgICBpbXBvcnRzOiBbeyBuYW1lOiAnZGVmaW5lQ29uZmlnJywgZnJvbTogJ3d4dCcgfV0sXG4gICAgcHJlc2V0czogW3sgcGFja2FnZTogJ3d4dC9jbGllbnQnIH0sIHsgcGFja2FnZTogJ3d4dC9icm93c2VyJyB9XSxcbiAgICB3YXJuOiBjb25maWcubG9nZ2VyLndhcm4sXG4gICAgZGlyczogWydjb21wb25lbnRzJywgJ2NvbXBvc2FibGVzJywgJ2hvb2tzJywgJ3V0aWxzJ10sXG4gIH07XG5cbiAgcmV0dXJuIG1lcmdlQ29uZmlnKFxuICAgIGRlZmF1bHRPcHRpb25zLFxuICAgIGNvbmZpZy5pbXBvcnRzLFxuICApIGFzIFBhcnRpYWw8VW5pbXBvcnRPcHRpb25zPjtcbn1cbiIsICJpbXBvcnQgeyBQbHVnaW4gfSBmcm9tICd2aXRlJztcbmltcG9ydCB7IEVudHJ5cG9pbnQsIEludGVybmFsQ29uZmlnIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCB7IHJlc29sdmUgfSBmcm9tICdwYXRoJztcbmltcG9ydCB7IG5vcm1hbGl6ZVBhdGggfSBmcm9tICcuLi91dGlscy9wYXRocyc7XG5cbi8qKlxuICogV3JhcHMgYSB1c2VyJ3MgZW50cnlwb2ludCB3aXRoIGEgdml0dWFsIHZlcnNpb24gd2l0aCBhZGRpdGlvbmFsIGxvZ2ljLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdmlydHVhbEVudHJ5cG9pbihcbiAgdHlwZTogRW50cnlwb2ludFsndHlwZSddLFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuKTogUGx1Z2luIHtcbiAgY29uc3QgdmlydHVhbElkID0gYHZpcnR1YWw6d3h0LSR7dHlwZX0/YDtcbiAgY29uc3QgcmVzb2x2ZWRWaXJ0dWFsSWQgPSBgXFwwJHt2aXJ0dWFsSWR9YDtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6IGB3eHQ6dmlydHVhbC1lbnRyeXBvaW50YCxcbiAgICByZXNvbHZlSWQoaWQpIHtcbiAgICAgIC8vIElkIGRvZXNuJ3Qgc3RhcnQgd2l0aCBwcmVmaXgsIGl0IGxvb2tzIGxpa2UgdGhpczpcbiAgICAgIC8vIC9wYXRoL3RvL3Byb2plY3QvdmlydHVhbDpiYWNrZ3JvdW5kPy9wYXRoL3RvL3Byb2plY3QvZW50cnlwb2ludHMvYmFja2dyb3VuZC50c1xuICAgICAgY29uc3QgaW5kZXggPSBpZC5pbmRleE9mKHZpcnR1YWxJZCk7XG4gICAgICBpZiAoaW5kZXggPT09IC0xKSByZXR1cm47XG5cbiAgICAgIGNvbnN0IGlucHV0UGF0aCA9IG5vcm1hbGl6ZVBhdGgoaWQuc3Vic3RyaW5nKGluZGV4ICsgdmlydHVhbElkLmxlbmd0aCkpO1xuICAgICAgcmV0dXJuIHJlc29sdmVkVmlydHVhbElkICsgaW5wdXRQYXRoO1xuICAgIH0sXG4gICAgYXN5bmMgbG9hZChpZCkge1xuICAgICAgaWYgKCFpZC5zdGFydHNXaXRoKHJlc29sdmVkVmlydHVhbElkKSkgcmV0dXJuO1xuXG4gICAgICBjb25zdCBpbnB1dFBhdGggPSBpZC5yZXBsYWNlKHJlc29sdmVkVmlydHVhbElkLCAnJyk7XG4gICAgICBjb25zdCB0ZW1wbGF0ZSA9IGF3YWl0IGZzLnJlYWRGaWxlKFxuICAgICAgICByZXNvbHZlKFxuICAgICAgICAgIGNvbmZpZy5yb290LFxuICAgICAgICAgIGBub2RlX21vZHVsZXMvd3h0L2Rpc3QvdmlydHVhbC1tb2R1bGVzLyR7dHlwZX0tZW50cnlwb2ludC5qc2AsXG4gICAgICAgICksXG4gICAgICAgICd1dGYtOCcsXG4gICAgICApO1xuICAgICAgcmV0dXJuIHRlbXBsYXRlLnJlcGxhY2UoYHZpcnR1YWw6dXNlci0ke3R5cGV9YCwgaW5wdXRQYXRoKTtcbiAgICB9LFxuICB9O1xufVxuIiwgImltcG9ydCB7IEludGVybmFsQ29uZmlnIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0ICogYXMgdml0ZSBmcm9tICd2aXRlJztcblxuZXhwb3J0IGZ1bmN0aW9uIHRzY29uZmlnUGF0aHMoY29uZmlnOiBJbnRlcm5hbENvbmZpZyk6IHZpdGUuUGx1Z2luIHtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnd3h0OmFsaWFzZXMnLFxuICAgIGFzeW5jIGNvbmZpZygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJlc29sdmU6IHtcbiAgICAgICAgICBhbGlhczoge1xuICAgICAgICAgICAgJ0BAJzogY29uZmlnLnJvb3QsXG4gICAgICAgICAgICAnfn4nOiBjb25maWcucm9vdCxcbiAgICAgICAgICAgICdAJzogY29uZmlnLnNyY0RpcixcbiAgICAgICAgICAgICd+JzogY29uZmlnLnNyY0RpcixcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9LFxuICB9O1xufVxuIiwgImltcG9ydCB7IFBsdWdpbiB9IGZyb20gJ3ZpdGUnO1xuXG4vKipcbiAqIEluIGRldiBtb2RlLCBpZiB0aGVyZSdzIG5vdCBhIGJhY2tncm91bmQgc2NyaXB0IGxpc3RlZCwgd2UgbmVlZCB0byBhZGQgb25lLlxuICpcbiAqIFRoaXMgZGVmaW5lJ3MgYSB2aXJ0dWFsIG1vZHVsZSB0aGF0IGlzIGJhc2ljYWxseSBqdXN0IGEgbm9vcC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vb3BCYWNrZ3JvdW5kKCk6IFBsdWdpbiB7XG4gIGNvbnN0IHZpcnR1YWxNb2R1bGVJZCA9IFZJUlRVQUxfTk9PUF9CQUNLR1JPVU5EX01PRFVMRV9JRDtcbiAgY29uc3QgcmVzb2x2ZWRWaXJ0dWFsTW9kdWxlSWQgPSAnXFwwJyArIHZpcnR1YWxNb2R1bGVJZDtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnd3h0Om5vb3AtYmFja2dyb3VuZCcsXG4gICAgcmVzb2x2ZUlkKGlkKSB7XG4gICAgICBpZiAoaWQgPT09IHZpcnR1YWxNb2R1bGVJZCkgcmV0dXJuIHJlc29sdmVkVmlydHVhbE1vZHVsZUlkO1xuICAgIH0sXG4gICAgbG9hZChpZCkge1xuICAgICAgaWYgKGlkID09PSByZXNvbHZlZFZpcnR1YWxNb2R1bGVJZCkge1xuICAgICAgICByZXR1cm4gYGltcG9ydCB7IGRlZmluZUJhY2tncm91bmQgfSBmcm9tICd3eHQvY2xpZW50JztcXG5leHBvcnQgZGVmYXVsdCBkZWZpbmVCYWNrZ3JvdW5kKCgpID0+IHZvaWQgMClgO1xuICAgICAgfVxuICAgIH0sXG4gIH07XG59XG5cbmV4cG9ydCBjb25zdCBWSVJUVUFMX05PT1BfQkFDS0dST1VORF9NT0RVTEVfSUQgPSAndmlydHVhbDp1c2VyLWJhY2tncm91bmQnO1xuIiwgImltcG9ydCAqIGFzIHZpdGUgZnJvbSAndml0ZSc7XG5pbXBvcnQgeyBFbnRyeXBvaW50LCBJbnRlcm5hbENvbmZpZyB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IGdldEVudHJ5cG9pbnRCdW5kbGVQYXRoIH0gZnJvbSAnLi4vdXRpbHMvZW50cnlwb2ludHMnO1xuXG4vKipcbiAqIFJlbmFtZSBDU1MgZW50cnlwb2ludCBvdXRwdXRzIHRvIGVuc3VyZSBhIEpTIGZpbGUgaXMgbm90IGdlbmVyYXRlZCwgYW5kIHRoYXQgdGhlIENTUyBmaWxlIGlzXG4gKiBwbGFjZWQgaW4gdGhlIGNvcnJlY3QgcGxhY2UuXG4gKlxuICogSXQ6XG4gKiAxLiBSZW5hbWVzIENTUyBmaWxlcyB0byB0aGVpciBmaW5hbCBwYXRoc1xuICogMi4gUmVtb3ZlcyB0aGUgSlMgZmlsZSB0aGF0IGdldCdzIG91dHB1dCBieSBsaWIgbW9kZVxuICpcbiAqIFRISVMgUExVR0lOIFNIT1VMRCBPTkxZIEJFIEFQUExJRUQgVE8gQ1NTIExJQiBNT0RFIEJVSUxEUy4gSXQgc2hvdWxkIG5vdCBiZSBhZGRlZCB0byBldmVyeSBidWlsZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNzc0VudHJ5cG9pbnRzKFxuICBlbnRyeXBvaW50OiBFbnRyeXBvaW50LFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuKTogdml0ZS5QbHVnaW4ge1xuICByZXR1cm4ge1xuICAgIG5hbWU6ICd3eHQ6Y3NzLWVudHJ5cG9pbnQnLFxuICAgIGNvbmZpZygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGJ1aWxkOiB7XG4gICAgICAgICAgcm9sbHVwT3B0aW9uczoge1xuICAgICAgICAgICAgb3V0cHV0OiB7XG4gICAgICAgICAgICAgIGFzc2V0RmlsZU5hbWVzOiAoKSA9PlxuICAgICAgICAgICAgICAgIGdldEVudHJ5cG9pbnRCdW5kbGVQYXRoKGVudHJ5cG9pbnQsIGNvbmZpZy5vdXREaXIsICcuY3NzJyksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH0sXG4gICAgZ2VuZXJhdGVCdW5kbGUoXywgYnVuZGxlKSB7XG4gICAgICBPYmplY3Qua2V5cyhidW5kbGUpLmZvckVhY2goKGZpbGUpID0+IHtcbiAgICAgICAgaWYgKGZpbGUuZW5kc1dpdGgoJy5qcycpKSBkZWxldGUgYnVuZGxlW2ZpbGVdO1xuICAgICAgfSk7XG4gICAgfSxcbiAgfTtcbn1cbiIsICJpbXBvcnQgeyBJbnRlcm5hbENvbmZpZyB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGdldEdsb2JhbHMoXG4gIGNvbmZpZzogSW50ZXJuYWxDb25maWcsXG4pOiBBcnJheTx7IG5hbWU6IHN0cmluZzsgdmFsdWU6IGFueTsgdHlwZTogc3RyaW5nIH0+IHtcbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICBuYW1lOiAnX19NQU5JRkVTVF9WRVJTSU9OX18nLFxuICAgICAgdmFsdWU6IGNvbmZpZy5tYW5pZmVzdFZlcnNpb24sXG4gICAgICB0eXBlOiBgMiB8IDNgLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ19fQlJPV1NFUl9fJyxcbiAgICAgIHZhbHVlOiBjb25maWcuYnJvd3NlcixcbiAgICAgIHR5cGU6IGBzdHJpbmdgLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ19fSVNfQ0hST01FX18nLFxuICAgICAgdmFsdWU6IGNvbmZpZy5icm93c2VyID09PSAnY2hyb21lJyxcbiAgICAgIHR5cGU6IGBib29sZWFuYCxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdfX0lTX0ZJUkVGT1hfXycsXG4gICAgICB2YWx1ZTogY29uZmlnLmJyb3dzZXIgPT09ICdmaXJlZm94JyxcbiAgICAgIHR5cGU6IGBib29sZWFuYCxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdfX0lTX1NBRkFSSV9fJyxcbiAgICAgIHZhbHVlOiBjb25maWcuYnJvd3NlciA9PT0gJ3NhZmFyaScsXG4gICAgICB0eXBlOiBgYm9vbGVhbmAsXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnX19JU19FREdFX18nLFxuICAgICAgdmFsdWU6IGNvbmZpZy5icm93c2VyID09PSAnZWRnZScsXG4gICAgICB0eXBlOiBgYm9vbGVhbmAsXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnX19JU19PUEVSQV9fJyxcbiAgICAgIHZhbHVlOiBjb25maWcuYnJvd3NlciA9PT0gJ29wZXJhJyxcbiAgICAgIHR5cGU6IGBib29sZWFuYCxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdfX0NPTU1BTkRfXycsXG4gICAgICB2YWx1ZTogY29uZmlnLmNvbW1hbmQsXG4gICAgICB0eXBlOiBgXCJidWlsZFwiIHwgXCJzZXJ2ZVwiYCxcbiAgICB9LFxuICBdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW50cnlwb2ludEdsb2JhbHMoXG4gIGNvbmZpZzogSW50ZXJuYWxDb25maWcsXG4gIGVudHJ5cG9pbnROYW1lOiBzdHJpbmcsXG4pIHtcbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICBuYW1lOiAnX19FTlRSWVBPSU5UX18nLFxuICAgICAgdmFsdWU6IGVudHJ5cG9pbnROYW1lLFxuICAgICAgdHlwZTogYHN0cmluZ2AsXG4gICAgfSxcbiAgXTtcbn1cbiIsICJpbXBvcnQgeyBCdWlsZE91dHB1dCwgV3h0RGV2U2VydmVyLCBJbmxpbmVDb25maWcgfSBmcm9tICcuL2NvcmUvdHlwZXMnO1xuaW1wb3J0IHsgZ2V0SW50ZXJuYWxDb25maWcgfSBmcm9tICcuL2NvcmUvdXRpbHMvZ2V0SW50ZXJuYWxDb25maWcnO1xuaW1wb3J0IHBjIGZyb20gJ3BpY29jb2xvcnMnO1xuaW1wb3J0IHsgZGV0ZWN0RGV2Q2hhbmdlcyB9IGZyb20gJy4vY29yZS91dGlscy9kZXRlY3REZXZDaGFuZ2VzJztcbmltcG9ydCB7IE11dGV4IH0gZnJvbSAnYXN5bmMtbXV0ZXgnO1xuaW1wb3J0IHsgY29uc29sYSB9IGZyb20gJ2NvbnNvbGEnO1xuaW1wb3J0IHsgcmVsYXRpdmUgfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgZ2V0RW50cnlwb2ludE91dHB1dEZpbGUgfSBmcm9tICcuL2NvcmUvdXRpbHMvZW50cnlwb2ludHMnO1xuaW1wb3J0IHsgYnVpbGRJbnRlcm5hbCwgcmVidWlsZCB9IGZyb20gJy4vY29yZS9idWlsZCc7XG5pbXBvcnQge1xuICBnZXRTZXJ2ZXJJbmZvLFxuICByZWxvYWRDb250ZW50U2NyaXB0cyxcbiAgcmVsb2FkSHRtbFBhZ2VzLFxuICBzZXR1cFNlcnZlcixcbn0gZnJvbSAnLi9jb3JlL3NlcnZlcic7XG5cbmV4cG9ydCAqIGZyb20gJy4vY29yZS9jbGVhbic7XG5leHBvcnQgeyB2ZXJzaW9uIH0gZnJvbSAnLi4vcGFja2FnZS5qc29uJztcbmV4cG9ydCAqIGZyb20gJy4vY29yZS90eXBlcy9leHRlcm5hbCc7XG5leHBvcnQgKiBmcm9tICcuL2NvcmUvdXRpbHMvZGVmaW5lQ29uZmlnJztcbmV4cG9ydCAqIGZyb20gJy4vY29yZS91dGlscy9kZWZpbmVSdW5uZXJDb25maWcnO1xuXG4vKipcbiAqIEJ1bmRsZXMgdGhlIGV4dGVuc2lvbiBmb3IgcHJvZHVjdGlvbi4gUmV0dXJucyBhIHByb21pc2Ugb2YgdGhlIGJ1aWxkIHJlc3VsdC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJ1aWxkKGNvbmZpZzogSW5saW5lQ29uZmlnKTogUHJvbWlzZTxCdWlsZE91dHB1dD4ge1xuICBjb25zdCBpbnRlcm5hbENvbmZpZyA9IGF3YWl0IGdldEludGVybmFsQ29uZmlnKGNvbmZpZywgJ2J1aWxkJyk7XG4gIHJldHVybiBhd2FpdCBidWlsZEludGVybmFsKGludGVybmFsQ29uZmlnKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgZGV2IHNlcnZlciwgcHJlLWJ1aWxkcyBhbGwgdGhlIGZpbGVzIHRoYXQgbmVlZCB0byBleGlzdCB0byBsb2FkIHRoZSBleHRlbnNpb24sIGFuZCBvcGVuXG4gKiB0aGUgYnJvd3NlciB3aXRoIHRoZSBleHRlbnNpb24gaW5zdGFsbGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlU2VydmVyKFxuICBjb25maWc/OiBJbmxpbmVDb25maWcsXG4pOiBQcm9taXNlPFd4dERldlNlcnZlcj4ge1xuICBjb25zdCBzZXJ2ZXJJbmZvID0gYXdhaXQgZ2V0U2VydmVySW5mbygpO1xuXG4gIGNvbnN0IGdldExhdGVzdEludGVybmFsQ29uZmlnID0gYXN5bmMgKCkgPT4ge1xuICAgIHJldHVybiBnZXRJbnRlcm5hbENvbmZpZyhcbiAgICAgIHtcbiAgICAgICAgLi4uY29uZmlnLFxuICAgICAgICB2aXRlOiBzZXJ2ZXJJbmZvLnZpdGVTZXJ2ZXJDb25maWcsXG4gICAgICB9LFxuICAgICAgJ3NlcnZlJyxcbiAgICApO1xuICB9O1xuXG4gIGxldCBpbnRlcm5hbENvbmZpZyA9IGF3YWl0IGdldExhdGVzdEludGVybmFsQ29uZmlnKCk7XG4gIGNvbnN0IHNlcnZlciA9IGF3YWl0IHNldHVwU2VydmVyKHNlcnZlckluZm8sIGludGVybmFsQ29uZmlnKTtcbiAgaW50ZXJuYWxDb25maWcuc2VydmVyID0gc2VydmVyO1xuXG4gIGNvbnN0IGZpbGVDaGFuZ2VkTXV0ZXggPSBuZXcgTXV0ZXgoKTtcbiAgY29uc3QgY2hhbmdlUXVldWU6IEFycmF5PFtzdHJpbmcsIHN0cmluZ10+ID0gW107XG5cbiAgc2VydmVyLndzLm9uKCd3eHQ6YmFja2dyb3VuZC1pbml0aWFsaXplZCcsICgpID0+IHtcbiAgICAvLyBSZWdpc3RlciBjb250ZW50IHNjcmlwdHMgZm9yIHRoZSBmaXJzdCB0aW1lIHNpbmNlIHRoZXkncmUgbm90IGxpc3RlZCBpbiB0aGUgbWFuaWZlc3RcbiAgICByZWxvYWRDb250ZW50U2NyaXB0cyhzZXJ2ZXIuY3VycmVudE91dHB1dC5zdGVwcywgaW50ZXJuYWxDb25maWcsIHNlcnZlcik7XG4gIH0pO1xuXG4gIHNlcnZlci53YXRjaGVyLm9uKCdhbGwnLCBhc3luYyAoZXZlbnQsIHBhdGgsIF9zdGF0cykgPT4ge1xuICAgIC8vIEhlcmUsIFwicGF0aFwiIGlzIGEgbm9uLW5vcm1hbGl6ZWQgcGF0aCAoaWU6IEM6XFxcXHVzZXJzXFxcXC4uLiBpbnN0ZWFkIG9mIEM6L3VzZXJzLy4uLilcbiAgICBpZiAocGF0aC5zdGFydHNXaXRoKGludGVybmFsQ29uZmlnLm91dEJhc2VEaXIpKSByZXR1cm47XG4gICAgY2hhbmdlUXVldWUucHVzaChbZXZlbnQsIHBhdGhdKTtcblxuICAgIGF3YWl0IGZpbGVDaGFuZ2VkTXV0ZXgucnVuRXhjbHVzaXZlKGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGZpbGVDaGFuZ2VzID0gY2hhbmdlUXVldWUuc3BsaWNlKDAsIGNoYW5nZVF1ZXVlLmxlbmd0aCk7XG4gICAgICBpZiAoZmlsZUNoYW5nZXMubGVuZ3RoID09PSAwKSByZXR1cm47XG5cbiAgICAgIGNvbnN0IGNoYW5nZXMgPSBkZXRlY3REZXZDaGFuZ2VzKGZpbGVDaGFuZ2VzLCBzZXJ2ZXIuY3VycmVudE91dHB1dCk7XG4gICAgICBpZiAoY2hhbmdlcy50eXBlID09PSAnbm8tY2hhbmdlJykgcmV0dXJuO1xuXG4gICAgICAvLyBMb2cgdGhlIGVudHJ5cG9pbnRzIHRoYXQgd2VyZSBlZmZlY3RlZFxuICAgICAgaW50ZXJuYWxDb25maWcubG9nZ2VyLmluZm8oXG4gICAgICAgIGBDaGFuZ2VkOiAke0FycmF5LmZyb20obmV3IFNldChmaWxlQ2hhbmdlcy5tYXAoKGNoYW5nZSkgPT4gY2hhbmdlWzFdKSkpXG4gICAgICAgICAgLm1hcCgoZmlsZSkgPT4gcGMuZGltKHJlbGF0aXZlKGludGVybmFsQ29uZmlnLnJvb3QsIGZpbGUpKSlcbiAgICAgICAgICAuam9pbignLCAnKX1gLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHJlYnVpbHROYW1lcyA9IGNoYW5nZXMucmVidWlsZEdyb3Vwc1xuICAgICAgICAuZmxhdCgpXG4gICAgICAgIC5tYXAoKGVudHJ5KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHBjLmN5YW4oXG4gICAgICAgICAgICByZWxhdGl2ZShpbnRlcm5hbENvbmZpZy5vdXREaXIsIGdldEVudHJ5cG9pbnRPdXRwdXRGaWxlKGVudHJ5LCAnJykpLFxuICAgICAgICAgICk7XG4gICAgICAgIH0pXG4gICAgICAgIC5qb2luKHBjLmRpbSgnLCAnKSk7XG5cbiAgICAgIC8vIEdldCBsYXRlc3QgY29uZmlnIGFuZCBSZWJ1aWxkIGdyb3VwcyB3aXRoIGNoYW5nZXNcbiAgICAgIGludGVybmFsQ29uZmlnID0gYXdhaXQgZ2V0TGF0ZXN0SW50ZXJuYWxDb25maWcoKTtcbiAgICAgIGludGVybmFsQ29uZmlnLnNlcnZlciA9IHNlcnZlcjtcbiAgICAgIGNvbnN0IHsgb3V0cHV0OiBuZXdPdXRwdXQgfSA9IGF3YWl0IHJlYnVpbGQoXG4gICAgICAgIGludGVybmFsQ29uZmlnLFxuICAgICAgICAvLyBUT0RPOiB0aGlzIGV4Y2x1ZGVzIG5ldyBlbnRyeXBvaW50cywgc28gdGhleSdyZSBub3QgYnVpbHQgdW50aWwgdGhlIGRldiBjb21tYW5kIGlzIHJlc3RhcnRlZFxuICAgICAgICBjaGFuZ2VzLnJlYnVpbGRHcm91cHMsXG4gICAgICAgIGNoYW5nZXMuY2FjaGVkT3V0cHV0LFxuICAgICAgKTtcbiAgICAgIHNlcnZlci5jdXJyZW50T3V0cHV0ID0gbmV3T3V0cHV0O1xuXG4gICAgICAvLyBQZXJmb3JtIHJlbG9hZHNcbiAgICAgIHN3aXRjaCAoY2hhbmdlcy50eXBlKSB7XG4gICAgICAgIGNhc2UgJ2V4dGVuc2lvbi1yZWxvYWQnOlxuICAgICAgICAgIHNlcnZlci5yZWxvYWRFeHRlbnNpb24oKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnaHRtbC1yZWxvYWQnOlxuICAgICAgICAgIHJlbG9hZEh0bWxQYWdlcyhjaGFuZ2VzLnJlYnVpbGRHcm91cHMsIHNlcnZlciwgaW50ZXJuYWxDb25maWcpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdjb250ZW50LXNjcmlwdC1yZWxvYWQnOlxuICAgICAgICAgIHJlbG9hZENvbnRlbnRTY3JpcHRzKGNoYW5nZXMuY2hhbmdlZFN0ZXBzLCBpbnRlcm5hbENvbmZpZywgc2VydmVyKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNvbnNvbGEuc3VjY2VzcyhgUmVsb2FkZWQ6ICR7cmVidWlsdE5hbWVzfWApO1xuICAgIH0pO1xuICB9KTtcblxuICByZXR1cm4gc2VydmVyO1xufVxuIiwgIi8qKlxuICogQ2hlY2tzIGlmIGBwcmVkaWNhdGVgIHJldHVybnMgdHJ1dGh5IGZvciBhbGwgZWxlbWVudHMgb2YgdGhlIGFycmF5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXZlcnk8VD4oXG4gIGFycmF5OiBUW10sXG4gIHByZWRpY2F0ZTogKGl0ZW06IFQsIGluZGV4OiBudW1iZXIpID0+IGJvb2xlYW4sXG4pOiBib29sZWFuIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKylcbiAgICBpZiAoIXByZWRpY2F0ZShhcnJheVtpXSwgaSkpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIHRydWU7XG59XG4iLCAiaW1wb3J0IHsgQnVpbGRPdXRwdXQsIEJ1aWxkU3RlcE91dHB1dCwgRW50cnlwb2ludEdyb3VwIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0ICogYXMgdml0ZSBmcm9tICd2aXRlJztcbmltcG9ydCB7IGV2ZXJ5IH0gZnJvbSAnLi9hcnJheXMnO1xuaW1wb3J0IHsgbm9ybWFsaXplUGF0aCB9IGZyb20gJy4vcGF0aHMnO1xuXG4vKipcbiAqIENvbXBhcmUgdGhlIGNoYW5nZWQgZmlsZXMgdnMgdGhlIGJ1aWxkIG91dHB1dCBhbmQgZGV0ZXJtaW5lIHdoYXQga2luZCBvZiByZWxvYWQgbmVlZHMgdG8gaGFwcGVuOlxuICpcbiAqIC0gRG8gbm90aGluZ1xuICogICAtIENTUyBvciBKUyBmaWxlIGFzc29jaWF0ZWQgd2l0aCBhbiBIVE1MIHBhZ2UgaXMgY2hhbmdlZCAtIHRoaXMgaXMgaGFuZGxlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZVxuICogICAgIGRldiBzZXJ2ZXJcbiAqICAgLSBDaGFuZ2UgaXNuJ3QgdXNlZCBieSBhbnkgb2YgdGhlIGVudHJ5cG9pbnRzXG4gKiAtIFJlbG9hZCBDb250ZW50IHNjcmlwdFxuICogICAtIENTUyBvciBKUyBmaWxlIGFzc29jaWF0ZWQgd2l0aCBhIGNvbnRlbnQgc2NyaXB0XG4gKiAgIC0gQmFja2dyb3VuZCBzY3JpcHQgd2lsbCBiZSB0b2xkIHRvIHJlbG9hZCB0aGUgY29udGVudCBzY3JpcHRcbiAqIC0gUmVsb2FkIEhUTUwgZmlsZVxuICogICAtIEhUTUwgZmlsZSBpdHNlbGYgaXMgc2F2ZWQgLSBITVIgZG9lc24ndCBoYW5kbGUgdGhpcyBiZWNhdXNlIHRoZSBIVE1MIHBhZ2VzIGFyZSBwcmUtcmVuZGVyZWRcbiAqICAgLSBDaHJvbWUgaXMgT0sgcmVsb2FkaW5nIHRoZSBwYWdlIHdoZW4gdGhlIEhUTUwgZmlsZSBpcyBjaGFuZ2VkIHdpdGhvdXQgcmVsb2FkaW5nIHRoZSB3aG9sZVxuICogICAgIGV4dGVuc2lvbi4gTm90IHN1cmUgYWJvdXQgZmlyZWZveCwgdGhpcyBtaWdodCBuZWVkIHRvIGNoYW5nZSB0byBhbiBleHRlbnNpb24gcmVsb2FkXG4gKiAtIFJlbG9hZCBleHRlbnNpb25cbiAqICAgLSBCYWNrZ3JvdW5kIHNjcmlwdCBpcyBjaGFuZ2VkXG4gKiAgIC0gTWFuaWZlc3QgaXMgZGlmZmVyZW50XG4gKiAtIFJlc3RhcnQgYnJvd3NlclxuICogICAtIENvbmZpZyBmaWxlIGNoYW5nZWQgKHd4dC5jb25maWcudHMsIC5lbnYsIHdlYi1leHQuY29uZmlnLnRzLCBldGMpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZXRlY3REZXZDaGFuZ2VzKFxuICBjaGFuZ2VkRmlsZXM6IFtldmVudDogc3RyaW5nLCBwYXRoOiBzdHJpbmddW10sXG4gIGN1cnJlbnRPdXRwdXQ6IEJ1aWxkT3V0cHV0IHwgdW5kZWZpbmVkLFxuKTogRGV2TW9kZUNoYW5nZSB7XG4gIGlmIChjdXJyZW50T3V0cHV0ID09IG51bGwpIHJldHVybiB7IHR5cGU6ICduby1jaGFuZ2UnIH07XG5cbiAgY29uc3QgY2hhbmdlZFN0ZXBzID0gbmV3IFNldChcbiAgICBjaGFuZ2VkRmlsZXMuZmxhdE1hcCgoY2hhbmdlZEZpbGUpID0+XG4gICAgICBmaW5kRWZmZWN0ZWRTdGVwcyhjaGFuZ2VkRmlsZSwgY3VycmVudE91dHB1dCksXG4gICAgKSxcbiAgKTtcbiAgaWYgKGNoYW5nZWRTdGVwcy5zaXplID09PSAwKSByZXR1cm4geyB0eXBlOiAnbm8tY2hhbmdlJyB9O1xuXG4gIGNvbnN0IHVuY2hhbmdlZE91dHB1dDogQnVpbGRPdXRwdXQgPSB7XG4gICAgbWFuaWZlc3Q6IGN1cnJlbnRPdXRwdXQubWFuaWZlc3QsXG4gICAgc3RlcHM6IFtdLFxuICAgIHB1YmxpY0Fzc2V0czogW10sXG4gIH07XG4gIGNvbnN0IGNoYW5nZWRPdXRwdXQ6IEJ1aWxkT3V0cHV0ID0ge1xuICAgIG1hbmlmZXN0OiBjdXJyZW50T3V0cHV0Lm1hbmlmZXN0LFxuICAgIHN0ZXBzOiBbXSxcbiAgICBwdWJsaWNBc3NldHM6IFtdLFxuICB9O1xuXG4gIGZvciAoY29uc3Qgc3RlcCBvZiBjdXJyZW50T3V0cHV0LnN0ZXBzKSB7XG4gICAgaWYgKGNoYW5nZWRTdGVwcy5oYXMoc3RlcCkpIHtcbiAgICAgIGNoYW5nZWRPdXRwdXQuc3RlcHMucHVzaChzdGVwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdW5jaGFuZ2VkT3V0cHV0LnN0ZXBzLnB1c2goc3RlcCk7XG4gICAgfVxuICB9XG4gIGZvciAoY29uc3QgYXNzZXQgb2YgY3VycmVudE91dHB1dC5wdWJsaWNBc3NldHMpIHtcbiAgICBpZiAoY2hhbmdlZFN0ZXBzLmhhcyhhc3NldCkpIHtcbiAgICAgIGNoYW5nZWRPdXRwdXQucHVibGljQXNzZXRzLnB1c2goYXNzZXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB1bmNoYW5nZWRPdXRwdXQucHVibGljQXNzZXRzLnB1c2goYXNzZXQpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGlzT25seUh0bWxDaGFuZ2VzID1cbiAgICBjaGFuZ2VkRmlsZXMubGVuZ3RoID4gMCAmJlxuICAgIGV2ZXJ5KGNoYW5nZWRGaWxlcywgKFtfLCBmaWxlXSkgPT4gZmlsZS5lbmRzV2l0aCgnLmh0bWwnKSk7XG4gIGlmIChpc09ubHlIdG1sQ2hhbmdlcykge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnaHRtbC1yZWxvYWQnLFxuICAgICAgY2FjaGVkT3V0cHV0OiB1bmNoYW5nZWRPdXRwdXQsXG4gICAgICByZWJ1aWxkR3JvdXBzOiBjaGFuZ2VkT3V0cHV0LnN0ZXBzLm1hcCgoc3RlcCkgPT4gc3RlcC5lbnRyeXBvaW50cyksXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IGlzT25seUNvbnRlbnRTY3JpcHRzID1cbiAgICBjaGFuZ2VkT3V0cHV0LnN0ZXBzLmxlbmd0aCA+IDAgJiZcbiAgICBldmVyeShcbiAgICAgIGNoYW5nZWRPdXRwdXQuc3RlcHMuZmxhdE1hcCgoc3RlcCkgPT4gc3RlcC5lbnRyeXBvaW50cyksXG4gICAgICAoZW50cnkpID0+IGVudHJ5LnR5cGUgPT09ICdjb250ZW50LXNjcmlwdCcsXG4gICAgKTtcbiAgaWYgKGlzT25seUNvbnRlbnRTY3JpcHRzKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdjb250ZW50LXNjcmlwdC1yZWxvYWQnLFxuICAgICAgY2FjaGVkT3V0cHV0OiB1bmNoYW5nZWRPdXRwdXQsXG4gICAgICBjaGFuZ2VkU3RlcHM6IGNoYW5nZWRPdXRwdXQuc3RlcHMsXG4gICAgICByZWJ1aWxkR3JvdXBzOiBjaGFuZ2VkT3V0cHV0LnN0ZXBzLm1hcCgoc3RlcCkgPT4gc3RlcC5lbnRyeXBvaW50cyksXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdHlwZTogJ2V4dGVuc2lvbi1yZWxvYWQnLFxuICAgIGNhY2hlZE91dHB1dDogdW5jaGFuZ2VkT3V0cHV0LFxuICAgIHJlYnVpbGRHcm91cHM6IGNoYW5nZWRPdXRwdXQuc3RlcHMubWFwKChzdGVwKSA9PiBzdGVwLmVudHJ5cG9pbnRzKSxcbiAgfTtcbn1cblxuLyoqXG4gKiBGb3IgYSBzaW5nbGUgY2hhbmdlLCByZXR1cm4gYWxsIHRoZSBzdGVwIG9mIHRoZSBidWlsZCBvdXRwdXQgdGhhdCB3ZXJlIGVmZmVjdGVkIGJ5IGl0LlxuICovXG5mdW5jdGlvbiBmaW5kRWZmZWN0ZWRTdGVwcyhcbiAgY2hhbmdlZEZpbGU6IFtldmVudDogc3RyaW5nLCBwYXRoOiBzdHJpbmddLFxuICBjdXJyZW50T3V0cHV0OiBCdWlsZE91dHB1dCxcbik6IERldGVjdGVkQ2hhbmdlW10ge1xuICBjb25zdCBjaGFuZ2VzOiBEZXRlY3RlZENoYW5nZVtdID0gW107XG4gIGNvbnN0IGNoYW5nZWRQYXRoID0gbm9ybWFsaXplUGF0aChjaGFuZ2VkRmlsZVsxXSk7XG5cbiAgY29uc3QgaXNDaHVua0VmZmVjdGVkID0gKFxuICAgIGNodW5rOiB2aXRlLlJvbGx1cC5PdXRwdXRDaHVuayB8IHZpdGUuUm9sbHVwLk91dHB1dEFzc2V0LFxuICApOiBib29sZWFuID0+XG4gICAgLy8gSWYgaXQncyBhbiBIVE1MIGZpbGUgd2l0aCB0aGUgc2FtZSBwYXRoLCBpcyBpcyBlZmZlY3RlZCBiZWNhdXNlIEhUTUwgZmlsZXMgbmVlZCB0byBiZSBwcmUtcmVuZGVyZWRcbiAgICAvLyBmaWxlTmFtZSBpcyBub3JtYWxpemVkLCByZWxhdGl2ZSBidW5kbGUgcGF0aFxuICAgIChjaHVuay50eXBlID09PSAnYXNzZXQnICYmIGNoYW5nZWRQYXRoLmVuZHNXaXRoKGNodW5rLmZpbGVOYW1lKSkgfHxcbiAgICAvLyBJZiBpdCdzIGEgY2h1bmsgdGhhdCBkZXBlbmRzIG9uIHRoZSBjaGFuZ2VkIGZpbGUsIGl0IGlzIGVmZmVjdGVkXG4gICAgLy8gbW9kdWxlSWRzIGFyZSBhYnNvbHV0ZSwgbm9ybWFsaXplZCBwYXRoc1xuICAgIChjaHVuay50eXBlID09PSAnY2h1bmsnICYmIGNodW5rLm1vZHVsZUlkcy5pbmNsdWRlcyhjaGFuZ2VkUGF0aCkpO1xuXG4gIGZvciAoY29uc3Qgc3RlcCBvZiBjdXJyZW50T3V0cHV0LnN0ZXBzKSB7XG4gICAgY29uc3QgZWZmZWN0ZWRDaHVuayA9IHN0ZXAuY2h1bmtzLmZpbmQoKGNodW5rKSA9PiBpc0NodW5rRWZmZWN0ZWQoY2h1bmspKTtcbiAgICBpZiAoZWZmZWN0ZWRDaHVuaykgY2hhbmdlcy5wdXNoKHN0ZXApO1xuICB9XG5cbiAgY29uc3QgZWZmZWN0ZWRBc3NldCA9IGN1cnJlbnRPdXRwdXQucHVibGljQXNzZXRzLmZpbmQoKGNodW5rKSA9PlxuICAgIGlzQ2h1bmtFZmZlY3RlZChjaHVuayksXG4gICk7XG4gIGlmIChlZmZlY3RlZEFzc2V0KSBjaGFuZ2VzLnB1c2goZWZmZWN0ZWRBc3NldCk7XG5cbiAgcmV0dXJuIGNoYW5nZXM7XG59XG5cbi8qKlxuICogQ29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgd2hhdCBmaWxlcyBjaGFuZ2VkLCB3aGF0IG5lZWRzIHJlYnVpbHQsIGFuZCB0aGUgdHlwZSBvZiByZWxvYWQgdGhhdCBpc1xuICogcmVxdWlyZWQuXG4gKi9cbmV4cG9ydCB0eXBlIERldk1vZGVDaGFuZ2UgPVxuICB8IE5vQ2hhbmdlXG4gIHwgSHRtbFJlbG9hZFxuICB8IEV4dGVuc2lvblJlbG9hZFxuICB8IENvbnRlbnRTY3JpcHRSZWxvYWQ7XG4vLyB8IEJyb3dzZXJSZXN0YXJ0XG5cbmludGVyZmFjZSBOb0NoYW5nZSB7XG4gIHR5cGU6ICduby1jaGFuZ2UnO1xufVxuXG5pbnRlcmZhY2UgUmVidWlsZENoYW5nZSB7XG4gIC8qKlxuICAgKiBUaGUgbGlzdCBvZiBlbnRyeXBvaW50cyB0aGF0IG5lZWQgcmVidWlsdC5cbiAgICovXG4gIHJlYnVpbGRHcm91cHM6IEVudHJ5cG9pbnRHcm91cFtdO1xuICAvKipcbiAgICogVGhlIHByZXZpb3VzIG91dHB1dCBzdHJpcHBlZCBvZiBhbnkgZmlsZXMgYXJlIGdvaW5nIHRvIGNoYW5nZS5cbiAgICovXG4gIGNhY2hlZE91dHB1dDogQnVpbGRPdXRwdXQ7XG59XG5cbmludGVyZmFjZSBIdG1sUmVsb2FkIGV4dGVuZHMgUmVidWlsZENoYW5nZSB7XG4gIHR5cGU6ICdodG1sLXJlbG9hZCc7XG59XG5cbmludGVyZmFjZSBFeHRlbnNpb25SZWxvYWQgZXh0ZW5kcyBSZWJ1aWxkQ2hhbmdlIHtcbiAgdHlwZTogJ2V4dGVuc2lvbi1yZWxvYWQnO1xufVxuXG4vLyBpbnRlcmZhY2UgQnJvd3NlclJlc3RhcnQgZXh0ZW5kcyBSZWJ1aWxkQ2hhbmdlIHtcbi8vICAgdHlwZTogJ2Jyb3dzZXItcmVzdGFydCc7XG4vLyB9XG5cbmludGVyZmFjZSBDb250ZW50U2NyaXB0UmVsb2FkIGV4dGVuZHMgUmVidWlsZENoYW5nZSB7XG4gIHR5cGU6ICdjb250ZW50LXNjcmlwdC1yZWxvYWQnO1xuICBjaGFuZ2VkU3RlcHM6IEJ1aWxkU3RlcE91dHB1dFtdO1xufVxuXG4vKipcbiAqIFdoZW4gZmlndXJpbmcgb3V0IHdoYXQgbmVlZHMgcmVsb2FkZWQsIHRoaXMgc3RvcmVzIHRoZSBzdGVwIHRoYXQgd2FzIGNoYW5nZWQsIG9yIHRoZSBwdWJsaWNcbiAqIGRpcmVjdG9yeSBhc3NldCB0aGF0IHdhcyBjaGFuZ2VkLiBJdCBkb2Vzbid0IGtub3cgd2hhdCB0eXBlIG9mIGNoYW5nZSBpcyByZXF1aXJlZCB5ZXQuIEp1c3QgYW5cbiAqIGludGVybWVkaWF0ZSB0eXBlLlxuICovXG50eXBlIERldGVjdGVkQ2hhbmdlID0gQnVpbGRTdGVwT3V0cHV0IHwgdml0ZS5Sb2xsdXAuT3V0cHV0QXNzZXQ7XG4iLCAiaW1wb3J0ICogYXMgdml0ZSBmcm9tICd2aXRlJztcbmltcG9ydCB7XG4gIEJ1aWxkT3V0cHV0LFxuICBCdWlsZFN0ZXBPdXRwdXQsXG4gIEVudHJ5cG9pbnQsXG4gIEVudHJ5cG9pbnRHcm91cCxcbiAgSW50ZXJuYWxDb25maWcsXG59IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCAqIGFzIHd4dFBsdWdpbnMgZnJvbSAnLi4vdml0ZS1wbHVnaW5zJztcbmltcG9ydCB7IHJlbW92ZUVtcHR5RGlycyB9IGZyb20gJy4uL3V0aWxzL3JlbW92ZUVtcHR5RGlycyc7XG5pbXBvcnQgeyBnZXRFbnRyeXBvaW50QnVuZGxlUGF0aCB9IGZyb20gJy4uL3V0aWxzL2VudHJ5cG9pbnRzJztcbmltcG9ydCBmcyBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgeyBkaXJuYW1lLCByZXNvbHZlIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBnZXRQdWJsaWNGaWxlcyB9IGZyb20gJy4uL3V0aWxzL3B1YmxpYyc7XG5pbXBvcnQgeyBnZXRFbnRyeXBvaW50R2xvYmFscyB9IGZyb20gJy4uL3V0aWxzL2dsb2JhbHMnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGRFbnRyeXBvaW50cyhcbiAgZ3JvdXBzOiBFbnRyeXBvaW50R3JvdXBbXSxcbiAgY29uZmlnOiBJbnRlcm5hbENvbmZpZyxcbik6IFByb21pc2U8T21pdDxCdWlsZE91dHB1dCwgJ21hbmlmZXN0Jz4+IHtcbiAgY29uc3Qgc3RlcHM6IEJ1aWxkU3RlcE91dHB1dFtdID0gW107XG4gIGZvciAoY29uc3QgZ3JvdXAgb2YgZ3JvdXBzKSB7XG4gICAgY29uc3Qgc3RlcCA9IEFycmF5LmlzQXJyYXkoZ3JvdXApXG4gICAgICA/IGF3YWl0IGJ1aWxkTXVsdGlwbGVFbnRyeXBvaW50cyhncm91cCwgY29uZmlnKVxuICAgICAgOiBhd2FpdCBidWlsZFNpbmdsZUVudHJ5cG9pbnQoZ3JvdXAsIGNvbmZpZyk7XG4gICAgc3RlcHMucHVzaChzdGVwKTtcbiAgfVxuICBjb25zdCBwdWJsaWNBc3NldHMgPSBhd2FpdCBjb3B5UHVibGljRGlyZWN0b3J5KGNvbmZpZyk7XG5cbiAgLy8gUmVtb3ZlIGFueSBlbXB0eSBkaXJlY3RvcmllcyBmcm9tIG1vdmluZyBvdXRwdXRzIGFyb3VuZFxuICBhd2FpdCByZW1vdmVFbXB0eURpcnMoY29uZmlnLm91dERpcik7XG5cbiAgcmV0dXJuIHsgcHVibGljQXNzZXRzLCBzdGVwcyB9O1xufVxuXG4vKipcbiAqIFVzZSBWaXRlJ3MgbGliIG1vZGUgKyBJSUZFIGZvcm1hdCB0byBidW5kbGUgdGhlIGVudHJ5cG9pbnQgdG8gYSBzaW5nbGUgZmlsZS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gYnVpbGRTaW5nbGVFbnRyeXBvaW50KFxuICBlbnRyeXBvaW50OiBFbnRyeXBvaW50LFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuKTogUHJvbWlzZTxCdWlsZFN0ZXBPdXRwdXQ+IHtcbiAgLy8gU2hvdWxkIHRoaXMgZW50cnlwb2ludCBiZSB3cmFwcGVkIGJ5IHRoZSB2aXRlLXBsdWdpbnMvdmlydHVhbEVudHJ5cG9pbnQgcGx1Z2luP1xuICBjb25zdCBpc1ZpcnR1YWwgPSBbJ2JhY2tncm91bmQnLCAnY29udGVudC1zY3JpcHQnXS5pbmNsdWRlcyhlbnRyeXBvaW50LnR5cGUpO1xuICBjb25zdCBlbnRyeSA9IGlzVmlydHVhbFxuICAgID8gYHZpcnR1YWw6d3h0LSR7ZW50cnlwb2ludC50eXBlfT8ke2VudHJ5cG9pbnQuaW5wdXRQYXRofWBcbiAgICA6IGVudHJ5cG9pbnQuaW5wdXRQYXRoO1xuXG4gIGNvbnN0IHBsdWdpbnM6IE5vbk51bGxhYmxlPHZpdGUuVXNlckNvbmZpZ1sncGx1Z2lucyddPiA9IFtdO1xuICBpZiAoXG4gICAgZW50cnlwb2ludC50eXBlID09PSAnY29udGVudC1zY3JpcHQtc3R5bGUnIHx8XG4gICAgZW50cnlwb2ludC50eXBlID09PSAndW5saXN0ZWQtc3R5bGUnXG4gICkge1xuICAgIHBsdWdpbnMucHVzaCh3eHRQbHVnaW5zLmNzc0VudHJ5cG9pbnRzKGVudHJ5cG9pbnQsIGNvbmZpZykpO1xuICB9XG5cbiAgY29uc3QgbGliTW9kZTogdml0ZS5Vc2VyQ29uZmlnID0ge1xuICAgIHBsdWdpbnMsXG4gICAgYnVpbGQ6IHtcbiAgICAgIGxpYjoge1xuICAgICAgICBlbnRyeSxcbiAgICAgICAgZm9ybWF0czogWydpaWZlJ10sXG4gICAgICAgIG5hbWU6ICdfJyxcbiAgICAgICAgZmlsZU5hbWU6IGVudHJ5cG9pbnQubmFtZSxcbiAgICAgIH0sXG4gICAgICByb2xsdXBPcHRpb25zOiB7XG4gICAgICAgIG91dHB1dDoge1xuICAgICAgICAgIC8vIFRoZXJlJ3Mgb25seSBhIHNpbmdsZSBvdXRwdXQgZm9yIHRoaXMgYnVpbGQsIHNvIHdlIHVzZSB0aGUgZGVzaXJlZCBidW5kbGUgcGF0aCBmb3IgdGhlXG4gICAgICAgICAgLy8gZW50cnkgb3V0cHV0IChsaWtlIFwiY29udGVudC1zY3JpcHRzL292ZXJsYXkuanNcIilcbiAgICAgICAgICBlbnRyeUZpbGVOYW1lczogZ2V0RW50cnlwb2ludEJ1bmRsZVBhdGgoXG4gICAgICAgICAgICBlbnRyeXBvaW50LFxuICAgICAgICAgICAgY29uZmlnLm91dERpcixcbiAgICAgICAgICAgICcuanMnLFxuICAgICAgICAgICksXG4gICAgICAgICAgLy8gT3V0cHV0IGNvbnRlbnQgc2NyaXB0IENTUyB0byBhc3NldHMvIHdpdGggYSBoYXNoIHRvIHByZXZlbnQgY29uZmxpY3RzLiBEZWZhdWx0cyB0b1xuICAgICAgICAgIC8vIFwiW25hbWVdLltleHRdXCIgaW4gbGliIG1vZGUsIHdoaWNoIHVzdWFsbHkgcmVzdWx0cyBpbiBcInN0eWxlLmNzc1wiLiBUaGF0IG1lYW5zIG11bHRpcGxlXG4gICAgICAgICAgLy8gY29udGVudCBzY3JpcHRzIHdpdGggc3R5bGVzIHdvdWxkIG92ZXJ3cml0ZSBlYWNoIG90aGVyIGlmIGl0IHdlcmVuJ3QgY2hhbmdlZCBiZWxvdy5cbiAgICAgICAgICBhc3NldEZpbGVOYW1lczogYGFzc2V0cy8ke2VudHJ5cG9pbnQubmFtZX0uW2V4dF1gLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICAgIGRlZmluZToge1xuICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9ha2xpbmtlcjEvdml0ZS1wbHVnaW4td2ViLWV4dGVuc2lvbi9pc3N1ZXMvOTZcbiAgICAgICdwcm9jZXNzLmVudi5OT0RFX0VOVic6IEpTT04uc3RyaW5naWZ5KGNvbmZpZy5tb2RlKSxcbiAgICB9LFxuICB9O1xuICBmb3IgKGNvbnN0IGdsb2JhbCBvZiBnZXRFbnRyeXBvaW50R2xvYmFscyhjb25maWcsIGVudHJ5cG9pbnQubmFtZSkpIHtcbiAgICBsaWJNb2RlLmRlZmluZSFbZ2xvYmFsLm5hbWVdID0gSlNPTi5zdHJpbmdpZnkoZ2xvYmFsLnZhbHVlKTtcbiAgfVxuICBjb25zdCBlbnRyeUNvbmZpZyA9IHZpdGUubWVyZ2VDb25maWcoXG4gICAgbGliTW9kZSxcbiAgICBjb25maWcudml0ZSxcbiAgKSBhcyB2aXRlLklubGluZUNvbmZpZztcblxuICBjb25zdCByZXN1bHQgPSBhd2FpdCB2aXRlLmJ1aWxkKGVudHJ5Q29uZmlnKTtcbiAgcmV0dXJuIHtcbiAgICBlbnRyeXBvaW50czogZW50cnlwb2ludCxcbiAgICBjaHVua3M6IGdldEJ1aWxkT3V0cHV0Q2h1bmtzKHJlc3VsdCksXG4gIH07XG59XG5cbi8qKlxuICogVXNlIFZpdGUncyBtdWx0aXBhZ2UgYnVpbGQgdG8gYnVuZGxlIGFsbCB0aGUgZW50cnlwb2ludHMgaW4gYSBzaW5nbGUgc3RlcC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gYnVpbGRNdWx0aXBsZUVudHJ5cG9pbnRzKFxuICBlbnRyeXBvaW50czogRW50cnlwb2ludFtdLFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuKTogUHJvbWlzZTxCdWlsZFN0ZXBPdXRwdXQ+IHtcbiAgY29uc3QgbXVsdGlQYWdlOiB2aXRlLlVzZXJDb25maWcgPSB7XG4gICAgcGx1Z2luczogW3d4dFBsdWdpbnMubXVsdGlwYWdlTW92ZShlbnRyeXBvaW50cywgY29uZmlnKV0sXG4gICAgYnVpbGQ6IHtcbiAgICAgIHJvbGx1cE9wdGlvbnM6IHtcbiAgICAgICAgaW5wdXQ6IGVudHJ5cG9pbnRzLnJlZHVjZTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PigoaW5wdXQsIGVudHJ5KSA9PiB7XG4gICAgICAgICAgaW5wdXRbZW50cnkubmFtZV0gPSBlbnRyeS5pbnB1dFBhdGg7XG4gICAgICAgICAgcmV0dXJuIGlucHV0O1xuICAgICAgICB9LCB7fSksXG4gICAgICAgIG91dHB1dDoge1xuICAgICAgICAgIC8vIEluY2x1ZGUgYSBoYXNoIHRvIHByZXZlbnQgY29uZmxpY3RzXG4gICAgICAgICAgY2h1bmtGaWxlTmFtZXM6ICdjaHVua3MvW25hbWVdLVtoYXNoXS5qcycsXG4gICAgICAgICAgLy8gSW5jbHVkZSBhIGhhc2ggdG8gcHJldmVudCBjb25mbGljdHNcbiAgICAgICAgICBlbnRyeUZpbGVOYW1lczogJ2NodW5rcy9bbmFtZV0tW2hhc2hdLmpzJyxcbiAgICAgICAgICAvLyBXZSBjYW4ndCBjb250cm9sIHRoZSBcIm5hbWVcIiwgc28gd2UgbmVlZCBhIGhhc2ggdG8gcHJldmVudCBjb25mbGljdHNcbiAgICAgICAgICBhc3NldEZpbGVOYW1lczogJ2Fzc2V0cy9bbmFtZV0tW2hhc2hdLltleHRdJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBkZWZpbmU6IHt9LFxuICB9O1xuICBmb3IgKGNvbnN0IGdsb2JhbCBvZiBnZXRFbnRyeXBvaW50R2xvYmFscyhjb25maWcsICdodG1sJykpIHtcbiAgICBtdWx0aVBhZ2UuZGVmaW5lIVtnbG9iYWwubmFtZV0gPSBKU09OLnN0cmluZ2lmeShnbG9iYWwudmFsdWUpO1xuICB9XG5cbiAgY29uc3QgZW50cnlDb25maWcgPSB2aXRlLm1lcmdlQ29uZmlnKFxuICAgIG11bHRpUGFnZSxcbiAgICBjb25maWcudml0ZSxcbiAgKSBhcyB2aXRlLlVzZXJDb25maWc7XG5cbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdml0ZS5idWlsZChlbnRyeUNvbmZpZyk7XG4gIHJldHVybiB7XG4gICAgZW50cnlwb2ludHMsXG4gICAgY2h1bmtzOiBnZXRCdWlsZE91dHB1dENodW5rcyhyZXN1bHQpLFxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRCdWlsZE91dHB1dENodW5rcyhcbiAgcmVzdWx0OiBBd2FpdGVkPFJldHVyblR5cGU8dHlwZW9mIHZpdGUuYnVpbGQ+Pixcbik6IEJ1aWxkU3RlcE91dHB1dFsnY2h1bmtzJ10ge1xuICBpZiAoJ29uJyBpbiByZXN1bHQpIHRocm93IEVycm9yKCd3eHQgZG9lcyBub3Qgc3VwcG9ydCB2aXRlIHdhdGNoIG1vZGUuJyk7XG4gIGlmIChBcnJheS5pc0FycmF5KHJlc3VsdCkpIHJldHVybiByZXN1bHQuZmxhdE1hcCgoeyBvdXRwdXQgfSkgPT4gb3V0cHV0KTtcbiAgcmV0dXJuIHJlc3VsdC5vdXRwdXQ7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNvcHlQdWJsaWNEaXJlY3RvcnkoXG4gIGNvbmZpZzogSW50ZXJuYWxDb25maWcsXG4pOiBQcm9taXNlPEJ1aWxkT3V0cHV0WydwdWJsaWNBc3NldHMnXT4ge1xuICBjb25zdCBmaWxlcyA9IGF3YWl0IGdldFB1YmxpY0ZpbGVzKGNvbmZpZyk7XG4gIGlmIChmaWxlcy5sZW5ndGggPT09IDApIHJldHVybiBbXTtcblxuICBjb25zdCBwdWJsaWNBc3NldHM6IEJ1aWxkT3V0cHV0WydwdWJsaWNBc3NldHMnXSA9IFtdO1xuICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcbiAgICBjb25zdCBzcmNQYXRoID0gcmVzb2x2ZShjb25maWcucHVibGljRGlyLCBmaWxlKTtcbiAgICBjb25zdCBvdXRQYXRoID0gcmVzb2x2ZShjb25maWcub3V0RGlyLCBmaWxlKTtcblxuICAgIGF3YWl0IGZzLmVuc3VyZURpcihkaXJuYW1lKG91dFBhdGgpKTtcbiAgICBhd2FpdCBmcy5jb3B5RmlsZShzcmNQYXRoLCBvdXRQYXRoKTtcbiAgICBwdWJsaWNBc3NldHMucHVzaCh7XG4gICAgICB0eXBlOiAnYXNzZXQnLFxuICAgICAgZmlsZU5hbWU6IGZpbGUsXG4gICAgICBuYW1lOiBmaWxlLFxuICAgICAgbmVlZHNDb2RlUmVmZXJlbmNlOiBmYWxzZSxcbiAgICAgIHNvdXJjZTogYXdhaXQgZnMucmVhZEZpbGUoc3JjUGF0aCksXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gcHVibGljQXNzZXRzO1xufVxuIiwgImltcG9ydCBmcyBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlbW92ZUVtcHR5RGlycyhkaXI6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBmaWxlcyA9IGF3YWl0IGZzLnJlYWRkaXIoZGlyKTtcbiAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLmpvaW4oZGlyLCBmaWxlKTtcbiAgICBjb25zdCBzdGF0cyA9IGF3YWl0IGZzLnN0YXQoZmlsZVBhdGgpO1xuICAgIGlmIChzdGF0cy5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICBhd2FpdCByZW1vdmVFbXB0eURpcnMoZmlsZVBhdGgpO1xuICAgIH1cbiAgfVxuXG4gIHRyeSB7XG4gICAgYXdhaXQgZnMucm1kaXIoZGlyKTtcbiAgfSBjYXRjaCB7XG4gICAgLy8gbm9vcCBvbiBmYWlsdXJlIC0gdGhpcyBtZWFucyB0aGUgZGlyZWN0b3J5IHdhcyBub3QgZW1wdHkuXG4gIH1cbn1cbiIsICJpbXBvcnQgeyBJbnRlcm5hbENvbmZpZyB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCBmcyBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgZ2xvYiBmcm9tICdmYXN0LWdsb2InO1xuaW1wb3J0IHsgdW5ub3JtYWxpemVQYXRoIH0gZnJvbSAnLi9wYXRocyc7XG5cbi8qKlxuICogR2V0IGFsbCB0aGUgZmlsZXMgaW4gdGhlIHByb2plY3QncyBwdWJsaWMgZGlyZWN0b3J5LiBSZXR1cm5lZCBwYXRocyBhcmUgcmVsYXRpdmUgdG8gdGhlXG4gKiBgY29uZmlnLnB1YmxpY0RpcmAuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRQdWJsaWNGaWxlcyhcbiAgY29uZmlnOiBJbnRlcm5hbENvbmZpZyxcbik6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgaWYgKCEoYXdhaXQgZnMuZXhpc3RzKGNvbmZpZy5wdWJsaWNEaXIpKSkgcmV0dXJuIFtdO1xuXG4gIGNvbnN0IGZpbGVzID0gYXdhaXQgZ2xvYignKiovKicsIHsgY3dkOiBjb25maWcucHVibGljRGlyIH0pO1xuICByZXR1cm4gZmlsZXMubWFwKHVubm9ybWFsaXplUGF0aCk7XG59XG4iLCAiaW1wb3J0IHsgcmVsYXRpdmUsIHJlc29sdmUgfSBmcm9tICdwYXRoJztcbmltcG9ydCB7XG4gIEJhY2tncm91bmRFbnRyeXBvaW50LFxuICBCYWNrZ3JvdW5kU2NyaXB0RGVmaW50aXRpb24sXG4gIEJhc2VFbnRyeXBvaW50T3B0aW9ucyxcbiAgQ29udGVudFNjcmlwdERlZmluaXRpb24sXG4gIENvbnRlbnRTY3JpcHRFbnRyeXBvaW50LFxuICBFbnRyeXBvaW50LFxuICBHZW5lcmljRW50cnlwb2ludCxcbiAgSW50ZXJuYWxDb25maWcsXG4gIE9wdGlvbnNFbnRyeXBvaW50LFxuICBQb3B1cEVudHJ5cG9pbnQsXG59IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCBmcyBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgeyBtaW5pbWF0Y2ggfSBmcm9tICdtaW5pbWF0Y2gnO1xuaW1wb3J0IHsgcGFyc2VIVE1MIH0gZnJvbSAnbGlua2Vkb20nO1xuaW1wb3J0IEpTT041IGZyb20gJ2pzb241JztcbmltcG9ydCB7IGltcG9ydEVudHJ5cG9pbnRGaWxlIH0gZnJvbSAnLi4vdXRpbHMvaW1wb3J0RW50cnlwb2ludEZpbGUnO1xuaW1wb3J0IGdsb2IgZnJvbSAnZmFzdC1nbG9iJztcbmltcG9ydCB7IGdldEVudHJ5cG9pbnROYW1lIH0gZnJvbSAnLi4vdXRpbHMvZW50cnlwb2ludHMnO1xuaW1wb3J0IHsgVklSVFVBTF9OT09QX0JBQ0tHUk9VTkRfTU9EVUxFX0lEIH0gZnJvbSAnLi4vdml0ZS1wbHVnaW5zL25vb3BCYWNrZ3JvdW5kJztcbmltcG9ydCB7IENTU19FWFRFTlNJT05TX1BBVFRFUk4gfSBmcm9tICcuLi91dGlscy9wYXRocyc7XG5cbi8qKlxuICogUmV0dXJuIGVudHJ5cG9pbnRzIGFuZCB0aGVpciBjb25maWd1cmF0aW9uIGJ5IGxvb2tpbmcgdGhyb3VnaCB0aGUgcHJvamVjdCdzIGZpbGVzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmluZEVudHJ5cG9pbnRzKFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuKTogUHJvbWlzZTxFbnRyeXBvaW50W10+IHtcbiAgY29uc3QgcmVsYXRpdmVQYXRocyA9IGF3YWl0IGdsb2IoJyoqLyonLCB7XG4gICAgY3dkOiBjb25maWcuZW50cnlwb2ludHNEaXIsXG4gIH0pO1xuICAvLyBFbnN1cmUgY29uc2lzdGVudCBvdXRwdXRcbiAgcmVsYXRpdmVQYXRocy5zb3J0KCk7XG5cbiAgY29uc3QgcGF0aEdsb2JzID0gT2JqZWN0LmtleXMoUEFUSF9HTE9CX1RPX1RZUEVfTUFQKTtcbiAgY29uc3QgZXhpc3RpbmdOYW1lczogUmVjb3JkPHN0cmluZywgRW50cnlwb2ludCB8IHVuZGVmaW5lZD4gPSB7fTtcblxuICBjb25zdCBlbnRyeXBvaW50czogRW50cnlwb2ludFtdID0gW107XG4gIGxldCBoYXNCYWNrZ3JvdW5kID0gZmFsc2U7XG4gIGF3YWl0IFByb21pc2UuYWxsKFxuICAgIHJlbGF0aXZlUGF0aHMubWFwKGFzeW5jIChyZWxhdGl2ZVBhdGgpID0+IHtcbiAgICAgIGNvbnN0IHBhdGggPSByZXNvbHZlKGNvbmZpZy5lbnRyeXBvaW50c0RpciwgcmVsYXRpdmVQYXRoKTtcbiAgICAgIGNvbnN0IG1hdGNoaW5nR2xvYiA9IHBhdGhHbG9icy5maW5kKChnbG9iKSA9PlxuICAgICAgICBtaW5pbWF0Y2gocmVsYXRpdmVQYXRoLCBnbG9iKSxcbiAgICAgICk7XG5cbiAgICAgIGlmIChtYXRjaGluZ0dsb2IgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gY29uZmlnLmxvZ2dlci53YXJuKFxuICAgICAgICAgIGAke3JlbGF0aXZlUGF0aH0gZG9lcyBub3QgbWF0Y2ggYW55IGtub3duIGVudHJ5cG9pbnQuIEtub3duIGVudHJ5cG9pbnRzOlxcbiR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgICBQQVRIX0dMT0JfVE9fVFlQRV9NQVAsXG4gICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgMixcbiAgICAgICAgICApfWAsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHR5cGUgPSBQQVRIX0dMT0JfVE9fVFlQRV9NQVBbbWF0Y2hpbmdHbG9iXTtcbiAgICAgIGlmICh0eXBlID09PSAnaWdub3JlZCcpIHJldHVybjtcblxuICAgICAgbGV0IGVudHJ5cG9pbnQ6IEVudHJ5cG9pbnQ7XG4gICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgY2FzZSAncG9wdXAnOlxuICAgICAgICAgIGVudHJ5cG9pbnQgPSBhd2FpdCBnZXRQb3B1cEVudHJ5cG9pbnQoY29uZmlnLCBwYXRoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnb3B0aW9ucyc6XG4gICAgICAgICAgZW50cnlwb2ludCA9IGF3YWl0IGdldE9wdGlvbnNFbnRyeXBvaW50KGNvbmZpZywgcGF0aCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2JhY2tncm91bmQnOlxuICAgICAgICAgIGVudHJ5cG9pbnQgPSBhd2FpdCBnZXRCYWNrZ3JvdW5kRW50cnlwb2ludChjb25maWcsIHBhdGgpO1xuICAgICAgICAgIGhhc0JhY2tncm91bmQgPSB0cnVlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdjb250ZW50LXNjcmlwdCc6XG4gICAgICAgICAgZW50cnlwb2ludCA9IGF3YWl0IGdldENvbnRlbnRTY3JpcHRFbnRyeXBvaW50KFxuICAgICAgICAgICAgY29uZmlnLFxuICAgICAgICAgICAgZ2V0RW50cnlwb2ludE5hbWUoY29uZmlnLmVudHJ5cG9pbnRzRGlyLCBwYXRoKSxcbiAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAndW5saXN0ZWQtcGFnZSc6XG4gICAgICAgICAgZW50cnlwb2ludCA9IGF3YWl0IGdldFVubGlzdGVkUGFnZUVudHJ5cG9pbnQoY29uZmlnLCBwYXRoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnY29udGVudC1zY3JpcHQtc3R5bGUnOlxuICAgICAgICAgIGVudHJ5cG9pbnQgPSB7XG4gICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgbmFtZTogZ2V0RW50cnlwb2ludE5hbWUoY29uZmlnLmVudHJ5cG9pbnRzRGlyLCBwYXRoKSxcbiAgICAgICAgICAgIGlucHV0UGF0aDogcGF0aCxcbiAgICAgICAgICAgIG91dHB1dERpcjogcmVzb2x2ZShjb25maWcub3V0RGlyLCBDT05URU5UX1NDUklQVF9PVVRfRElSKSxcbiAgICAgICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgaW5jbHVkZTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICBleGNsdWRlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgZW50cnlwb2ludCA9IHtcbiAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICBuYW1lOiBnZXRFbnRyeXBvaW50TmFtZShjb25maWcuZW50cnlwb2ludHNEaXIsIHBhdGgpLFxuICAgICAgICAgICAgaW5wdXRQYXRoOiBwYXRoLFxuICAgICAgICAgICAgb3V0cHV0RGlyOiBjb25maWcub3V0RGlyLFxuICAgICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgICBpbmNsdWRlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgIGV4Y2x1ZGU6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgd2l0aFNhbWVOYW1lID0gZXhpc3RpbmdOYW1lc1tlbnRyeXBvaW50Lm5hbWVdO1xuICAgICAgaWYgKHdpdGhTYW1lTmFtZSkge1xuICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICBgTXVsdGlwbGUgZW50cnlwb2ludHMgd2l0aCB0aGUgbmFtZSBcIiR7XG4gICAgICAgICAgICBlbnRyeXBvaW50Lm5hbWVcbiAgICAgICAgICB9XCIgZGV0ZWN0ZWQsIGJ1dCBvbmx5IG9uZSBpcyBhbGxvd2VkOiAke1tcbiAgICAgICAgICAgIHJlbGF0aXZlKGNvbmZpZy5yb290LCB3aXRoU2FtZU5hbWUuaW5wdXRQYXRoKSxcbiAgICAgICAgICAgIHJlbGF0aXZlKGNvbmZpZy5yb290LCBlbnRyeXBvaW50LmlucHV0UGF0aCksXG4gICAgICAgICAgXS5qb2luKCcsICcpfWAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBlbnRyeXBvaW50cy5wdXNoKGVudHJ5cG9pbnQpO1xuICAgICAgZXhpc3RpbmdOYW1lc1tlbnRyeXBvaW50Lm5hbWVdID0gZW50cnlwb2ludDtcbiAgICB9KSxcbiAgKTtcbiAgaWYgKGNvbmZpZy5jb21tYW5kID09PSAnc2VydmUnICYmICFoYXNCYWNrZ3JvdW5kKSB7XG4gICAgZW50cnlwb2ludHMucHVzaChcbiAgICAgIGF3YWl0IGdldEJhY2tncm91bmRFbnRyeXBvaW50KGNvbmZpZywgVklSVFVBTF9OT09QX0JBQ0tHUk9VTkRfTU9EVUxFX0lEKSxcbiAgICApO1xuICB9XG5cbiAgY29uZmlnLmxvZ2dlci5kZWJ1ZygnQWxsIGVudHJ5cG9pbnRzOicsIGVudHJ5cG9pbnRzKTtcbiAgY29uc3QgdGFyZ2V0RW50cnlwb2ludHMgPSBlbnRyeXBvaW50cy5maWx0ZXIoKGVudHJ5KSA9PiB7XG4gICAgY29uc3QgeyBpbmNsdWRlLCBleGNsdWRlIH0gPSBlbnRyeS5vcHRpb25zO1xuICAgIGlmIChpbmNsdWRlPy5sZW5ndGggJiYgZXhjbHVkZT8ubGVuZ3RoKSB7XG4gICAgICBjb25maWcubG9nZ2VyLndhcm4oXG4gICAgICAgIGBUaGUgJHtlbnRyeS5uYW1lfSBlbnRyeXBvaW50IGxpc3RzIGJvdGggaW5jbHVkZSBhbmQgZXhjbHVkZSwgYnV0IG9ubHkgb25lIGNhbiBiZSB1c2VkIHBlciBlbnRyeXBvaW50LiBFbnRyeXBvaW50IGlnbm9yZWQuYCxcbiAgICAgICk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChleGNsdWRlPy5sZW5ndGggJiYgIWluY2x1ZGU/Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuICFleGNsdWRlLmluY2x1ZGVzKGNvbmZpZy5icm93c2VyKTtcbiAgICB9XG4gICAgaWYgKGluY2x1ZGU/Lmxlbmd0aCAmJiAhZXhjbHVkZT8ubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gaW5jbHVkZS5pbmNsdWRlcyhjb25maWcuYnJvd3Nlcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH0pO1xuICBjb25maWcubG9nZ2VyLmRlYnVnKGAke2NvbmZpZy5icm93c2VyfSBlbnRyeXBvaW50czpgLCB0YXJnZXRFbnRyeXBvaW50cyk7XG4gIHJldHVybiB0YXJnZXRFbnRyeXBvaW50cztcbn1cblxuZnVuY3Rpb24gZ2V0SHRtbEJhc2VPcHRpb25zKGRvY3VtZW50OiBEb2N1bWVudCk6IEJhc2VFbnRyeXBvaW50T3B0aW9ucyB7XG4gIGNvbnN0IG9wdGlvbnM6IEJhc2VFbnRyeXBvaW50T3B0aW9ucyA9IHt9O1xuXG4gIGNvbnN0IGluY2x1ZGVDb250ZW50ID0gZG9jdW1lbnRcbiAgICAucXVlcnlTZWxlY3RvcihcIm1ldGFbbmFtZT0nbWFuaWZlc3QuaW5jbHVkZSddXCIpXG4gICAgPy5nZXRBdHRyaWJ1dGUoJ2NvbnRlbnQnKTtcbiAgaWYgKGluY2x1ZGVDb250ZW50KSB7XG4gICAgb3B0aW9ucy5pbmNsdWRlID0gSlNPTjUucGFyc2UoaW5jbHVkZUNvbnRlbnQpO1xuICB9XG5cbiAgY29uc3QgZXhjbHVkZUNvbnRlbnQgPSBkb2N1bWVudFxuICAgIC5xdWVyeVNlbGVjdG9yKFwibWV0YVtuYW1lPSdtYW5pZmVzdC5leGNsdWRlJ11cIilcbiAgICA/LmdldEF0dHJpYnV0ZSgnY29udGVudCcpO1xuICBpZiAoZXhjbHVkZUNvbnRlbnQpIHtcbiAgICBvcHRpb25zLmV4Y2x1ZGUgPSBKU09ONS5wYXJzZShleGNsdWRlQ29udGVudCk7XG4gIH1cblxuICByZXR1cm4gb3B0aW9ucztcbn1cblxuLyoqXG4gKiBAcGFyYW0gcGF0aCBBYnNvbHV0ZSBwYXRoIHRvIHRoZSBwb3B1cCBIVE1MIGZpbGUuXG4gKiBAcGFyYW0gY29udGVudCBTdHJpbmcgY29udGVudHMgb2YgdGhlIGZpbGUgYXQgdGhlIHBhdGguXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldFBvcHVwRW50cnlwb2ludChcbiAgY29uZmlnOiBJbnRlcm5hbENvbmZpZyxcbiAgcGF0aDogc3RyaW5nLFxuKTogUHJvbWlzZTxQb3B1cEVudHJ5cG9pbnQ+IHtcbiAgY29uc3QgY29udGVudCA9IGF3YWl0IGZzLnJlYWRGaWxlKHBhdGgsICd1dGYtOCcpO1xuICBjb25zdCB7IGRvY3VtZW50IH0gPSBwYXJzZUhUTUwoY29udGVudCk7XG5cbiAgY29uc3Qgb3B0aW9uczogUG9wdXBFbnRyeXBvaW50WydvcHRpb25zJ10gPSBnZXRIdG1sQmFzZU9wdGlvbnMoZG9jdW1lbnQpO1xuXG4gIGNvbnN0IHRpdGxlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigndGl0bGUnKTtcbiAgaWYgKHRpdGxlICE9IG51bGwpIG9wdGlvbnMuZGVmYXVsdFRpdGxlID0gdGl0bGUudGV4dENvbnRlbnQgPz8gdW5kZWZpbmVkO1xuXG4gIGNvbnN0IGRlZmF1bHRJY29uQ29udGVudCA9IGRvY3VtZW50XG4gICAgLnF1ZXJ5U2VsZWN0b3IoXCJtZXRhW25hbWU9J21hbmlmZXN0LmRlZmF1bHRfaWNvbiddXCIpXG4gICAgPy5nZXRBdHRyaWJ1dGUoJ2NvbnRlbnQnKTtcbiAgaWYgKGRlZmF1bHRJY29uQ29udGVudCkge1xuICAgIHRyeSB7XG4gICAgICBvcHRpb25zLmRlZmF1bHRJY29uID0gSlNPTjUucGFyc2UoZGVmYXVsdEljb25Db250ZW50KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbmZpZy5sb2dnZXIuZmF0YWwoXG4gICAgICAgIGBGYWlsZWQgdG8gcGFyc2UgZGVmYXVsdF9pY29uIG1ldGEgdGFnIGNvbnRlbnQgYXMgSlNPTjUuIGNvbnRlbnQ9JHtkZWZhdWx0SWNvbkNvbnRlbnR9YCxcbiAgICAgICAgZXJyLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBtdjJLZXlDb250ZW50ID0gZG9jdW1lbnRcbiAgICAucXVlcnlTZWxlY3RvcihcIm1ldGFbbmFtZT0nbWFuaWZlc3QudHlwZSddXCIpXG4gICAgPy5nZXRBdHRyaWJ1dGUoJ2NvbnRlbnQnKTtcbiAgaWYgKG12MktleUNvbnRlbnQpIHtcbiAgICBvcHRpb25zLm12MktleSA9XG4gICAgICBtdjJLZXlDb250ZW50ID09PSAncGFnZV9hY3Rpb24nID8gJ3BhZ2VfYWN0aW9uJyA6ICdicm93c2VyX2FjdGlvbic7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHR5cGU6ICdwb3B1cCcsXG4gICAgbmFtZTogJ3BvcHVwJyxcbiAgICBvcHRpb25zLFxuICAgIGlucHV0UGF0aDogcGF0aCxcbiAgICBvdXRwdXREaXI6IGNvbmZpZy5vdXREaXIsXG4gIH07XG59XG5cbi8qKlxuICogQHBhcmFtIHBhdGggQWJzb2x1dGUgcGF0aCB0byB0aGUgb3B0aW9ucyBIVE1MIGZpbGUuXG4gKiBAcGFyYW0gY29udGVudCBTdHJpbmcgY29udGVudHMgb2YgdGhlIGZpbGUgYXQgdGhlIHBhdGguXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldE9wdGlvbnNFbnRyeXBvaW50KFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuICBwYXRoOiBzdHJpbmcsXG4pOiBQcm9taXNlPE9wdGlvbnNFbnRyeXBvaW50PiB7XG4gIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBmcy5yZWFkRmlsZShwYXRoLCAndXRmLTgnKTtcbiAgY29uc3QgeyBkb2N1bWVudCB9ID0gcGFyc2VIVE1MKGNvbnRlbnQpO1xuXG4gIGNvbnN0IG9wdGlvbnM6IE9wdGlvbnNFbnRyeXBvaW50WydvcHRpb25zJ10gPSBnZXRIdG1sQmFzZU9wdGlvbnMoZG9jdW1lbnQpO1xuXG4gIGNvbnN0IG9wZW5JblRhYkNvbnRlbnQgPSBkb2N1bWVudFxuICAgIC5xdWVyeVNlbGVjdG9yKFwibWV0YVtuYW1lPSdtYW5pZmVzdC5vcGVuX2luX3RhYiddXCIpXG4gICAgPy5nZXRBdHRyaWJ1dGUoJ2NvbnRlbnQnKTtcbiAgaWYgKG9wZW5JblRhYkNvbnRlbnQpIHtcbiAgICBvcHRpb25zLm9wZW5JblRhYiA9IG9wZW5JblRhYkNvbnRlbnQgPT09ICd0cnVlJztcbiAgfVxuXG4gIGNvbnN0IGNocm9tZVN0eWxlQ29udGVudCA9IGRvY3VtZW50XG4gICAgLnF1ZXJ5U2VsZWN0b3IoXCJtZXRhW25hbWU9J21hbmlmZXN0LmNocm9tZV9zdHlsZSddXCIpXG4gICAgPy5nZXRBdHRyaWJ1dGUoJ2NvbnRlbnQnKTtcbiAgaWYgKGNocm9tZVN0eWxlQ29udGVudCkge1xuICAgIG9wdGlvbnMuY2hyb21lU3R5bGUgPSBjaHJvbWVTdHlsZUNvbnRlbnQgPT09ICd0cnVlJztcbiAgfVxuXG4gIGNvbnN0IGJyb3dzZXJTdHlsZUNvbnRlbnQgPSBkb2N1bWVudFxuICAgIC5xdWVyeVNlbGVjdG9yKFwibWV0YVtuYW1lPSdtYW5pZmVzdC5icm93c2VyX3N0eWxlJ11cIilcbiAgICA/LmdldEF0dHJpYnV0ZSgnY29udGVudCcpO1xuICBpZiAoYnJvd3NlclN0eWxlQ29udGVudCkge1xuICAgIG9wdGlvbnMuYnJvd3NlclN0eWxlID0gYnJvd3NlclN0eWxlQ29udGVudCA9PT0gJ3RydWUnO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnb3B0aW9ucycsXG4gICAgbmFtZTogJ29wdGlvbnMnLFxuICAgIG9wdGlvbnMsXG4gICAgaW5wdXRQYXRoOiBwYXRoLFxuICAgIG91dHB1dERpcjogY29uZmlnLm91dERpcixcbiAgfTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gcGF0aCBBYnNvbHV0ZSBwYXRoIHRvIHRoZSBIVE1MIGZpbGUuXG4gKiBAcGFyYW0gY29udGVudCBTdHJpbmcgY29udGVudHMgb2YgdGhlIGZpbGUgYXQgdGhlIHBhdGguXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldFVubGlzdGVkUGFnZUVudHJ5cG9pbnQoXG4gIGNvbmZpZzogSW50ZXJuYWxDb25maWcsXG4gIHBhdGg6IHN0cmluZyxcbik6IFByb21pc2U8R2VuZXJpY0VudHJ5cG9pbnQ+IHtcbiAgY29uc3QgY29udGVudCA9IGF3YWl0IGZzLnJlYWRGaWxlKHBhdGgsICd1dGYtOCcpO1xuICBjb25zdCB7IGRvY3VtZW50IH0gPSBwYXJzZUhUTUwoY29udGVudCk7XG5cbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAndW5saXN0ZWQtcGFnZScsXG4gICAgbmFtZTogZ2V0RW50cnlwb2ludE5hbWUoY29uZmlnLmVudHJ5cG9pbnRzRGlyLCBwYXRoKSxcbiAgICBpbnB1dFBhdGg6IHBhdGgsXG4gICAgb3V0cHV0RGlyOiBjb25maWcub3V0RGlyLFxuICAgIG9wdGlvbnM6IGdldEh0bWxCYXNlT3B0aW9ucyhkb2N1bWVudCksXG4gIH07XG59XG5cbi8qKlxuICogQHBhcmFtIHBhdGggQWJzb2x1dGUgcGF0aCB0byB0aGUgYmFja2dyb3VuZCdzIFRTIGZpbGUuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldEJhY2tncm91bmRFbnRyeXBvaW50KFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuICBwYXRoOiBzdHJpbmcsXG4pOiBQcm9taXNlPEJhY2tncm91bmRFbnRyeXBvaW50PiB7XG4gIGxldCBvcHRpb25zOiBPbWl0PEJhY2tncm91bmRTY3JpcHREZWZpbnRpdGlvbiwgJ21haW4nPiA9IHt9O1xuICBpZiAocGF0aCAhPT0gVklSVFVBTF9OT09QX0JBQ0tHUk9VTkRfTU9EVUxFX0lEKSB7XG4gICAgY29uc3QgZGVmYXVsdEV4cG9ydCA9XG4gICAgICBhd2FpdCBpbXBvcnRFbnRyeXBvaW50RmlsZTxCYWNrZ3JvdW5kU2NyaXB0RGVmaW50aXRpb24+KHBhdGgsIGNvbmZpZyk7XG4gICAgaWYgKGRlZmF1bHRFeHBvcnQgPT0gbnVsbCkge1xuICAgICAgdGhyb3cgRXJyb3IoJ0JhY2tncm91bmQgc2NyaXB0IGRvZXMgbm90IGhhdmUgYSBkZWZhdWx0IGV4cG9ydCcpO1xuICAgIH1cbiAgICBjb25zdCB7IG1haW46IF8sIC4uLm1vZHVsZU9wdGlvbnMgfSA9IGRlZmF1bHRFeHBvcnQ7XG4gICAgb3B0aW9ucyA9IG1vZHVsZU9wdGlvbnM7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnYmFja2dyb3VuZCcsXG4gICAgbmFtZTogJ2JhY2tncm91bmQnLFxuICAgIGlucHV0UGF0aDogcGF0aCxcbiAgICBvdXRwdXREaXI6IGNvbmZpZy5vdXREaXIsXG4gICAgb3B0aW9uczogb3B0aW9ucyxcbiAgfTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gcGF0aCBBYnNvbHV0ZSBwYXRoIHRvIHRoZSBjb250ZW50IHNjcmlwdCdzIFRTIGZpbGUuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldENvbnRlbnRTY3JpcHRFbnRyeXBvaW50KFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuICBuYW1lOiBzdHJpbmcsXG4gIHBhdGg6IHN0cmluZyxcbik6IFByb21pc2U8Q29udGVudFNjcmlwdEVudHJ5cG9pbnQ+IHtcbiAgY29uc3QgeyBtYWluOiBfLCAuLi5vcHRpb25zIH0gPVxuICAgIGF3YWl0IGltcG9ydEVudHJ5cG9pbnRGaWxlPENvbnRlbnRTY3JpcHREZWZpbml0aW9uPihwYXRoLCBjb25maWcpO1xuICBpZiAob3B0aW9ucyA9PSBudWxsKSB7XG4gICAgdGhyb3cgRXJyb3IoYENvbnRlbnQgc2NyaXB0ICR7bmFtZX0gZG9lcyBub3QgaGF2ZSBhIGRlZmF1bHQgZXhwb3J0YCk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnY29udGVudC1zY3JpcHQnLFxuICAgIG5hbWU6IGdldEVudHJ5cG9pbnROYW1lKGNvbmZpZy5lbnRyeXBvaW50c0RpciwgcGF0aCksXG4gICAgaW5wdXRQYXRoOiBwYXRoLFxuICAgIG91dHB1dERpcjogcmVzb2x2ZShjb25maWcub3V0RGlyLCBDT05URU5UX1NDUklQVF9PVVRfRElSKSxcbiAgICBvcHRpb25zLFxuICB9O1xufVxuXG5jb25zdCBQQVRIX0dMT0JfVE9fVFlQRV9NQVA6IFJlY29yZDxzdHJpbmcsIEVudHJ5cG9pbnRbJ3R5cGUnXSB8ICdpZ25vcmVkJz4gPSB7XG4gICdzYW5kYm94Lmh0bWwnOiAnc2FuZGJveCcsXG4gICdzYW5kYm94L2luZGV4Lmh0bWwnOiAnc2FuZGJveCcsXG4gICcqLnNhbmRib3guaHRtbCc6ICdzYW5kYm94JyxcbiAgJyouc2FuZGJveC9pbmRleC5odG1sJzogJ3NhbmRib3gnLFxuXG4gICdib29rbWFya3MuaHRtbCc6ICdib29rbWFya3MnLFxuICAnYm9va21hcmtzL2luZGV4Lmh0bWwnOiAnYm9va21hcmtzJyxcblxuICAnaGlzdG9yeS5odG1sJzogJ2hpc3RvcnknLFxuICAnaGlzdG9yeS9pbmRleC5odG1sJzogJ2hpc3RvcnknLFxuXG4gICduZXd0YWIuaHRtbCc6ICduZXd0YWInLFxuICAnbmV3dGFiL2luZGV4Lmh0bWwnOiAnbmV3dGFiJyxcblxuICAnc2lkZXBhbmVsLmh0bWwnOiAnc2lkZXBhbmVsJyxcbiAgJ3NpZGVwYW5lbC9pbmRleC5odG1sJzogJ3NpZGVwYW5lbCcsXG4gICcqLnNpZGVwYW5lbC5odG1sJzogJ3NpZGVwYW5lbCcsXG4gICcqLnNpZGVwYW5lbC9pbmRleC5odG1sJzogJ3NpZGVwYW5lbCcsXG5cbiAgJ2RldnRvb2xzLmh0bWwnOiAnZGV2dG9vbHMnLFxuICAnZGV2dG9vbHMvaW5kZXguaHRtbCc6ICdkZXZ0b29scycsXG5cbiAgJ2JhY2tncm91bmQudHMnOiAnYmFja2dyb3VuZCcsXG4gICdiYWNrZ3JvdW5kL2luZGV4LnRzJzogJ2JhY2tncm91bmQnLFxuICBbVklSVFVBTF9OT09QX0JBQ0tHUk9VTkRfTU9EVUxFX0lEXTogJ2JhY2tncm91bmQnLFxuXG4gICdjb250ZW50LnRzPyh4KSc6ICdjb250ZW50LXNjcmlwdCcsXG4gICdjb250ZW50L2luZGV4LnRzPyh4KSc6ICdjb250ZW50LXNjcmlwdCcsXG4gICcqLmNvbnRlbnQudHM/KHgpJzogJ2NvbnRlbnQtc2NyaXB0JyxcbiAgJyouY29udGVudC9pbmRleC50cz8oeCknOiAnY29udGVudC1zY3JpcHQnLFxuICBbYGNvbnRlbnQuJHtDU1NfRVhURU5TSU9OU19QQVRURVJOfWBdOiAnY29udGVudC1zY3JpcHQtc3R5bGUnLFxuICBbYCouY29udGVudC4ke0NTU19FWFRFTlNJT05TX1BBVFRFUk59YF06ICdjb250ZW50LXNjcmlwdC1zdHlsZScsXG4gIFtgY29udGVudC9pbmRleC4ke0NTU19FWFRFTlNJT05TX1BBVFRFUk59YF06ICdjb250ZW50LXNjcmlwdC1zdHlsZScsXG4gIFtgKi5jb250ZW50L2luZGV4LiR7Q1NTX0VYVEVOU0lPTlNfUEFUVEVSTn1gXTogJ2NvbnRlbnQtc2NyaXB0LXN0eWxlJyxcblxuICAncG9wdXAuaHRtbCc6ICdwb3B1cCcsXG4gICdwb3B1cC9pbmRleC5odG1sJzogJ3BvcHVwJyxcblxuICAnb3B0aW9ucy5odG1sJzogJ29wdGlvbnMnLFxuICAnb3B0aW9ucy9pbmRleC5odG1sJzogJ29wdGlvbnMnLFxuXG4gICcqLmh0bWwnOiAndW5saXN0ZWQtcGFnZScsXG4gICcqL2luZGV4Lmh0bWwnOiAndW5saXN0ZWQtcGFnZScsXG4gICcqLnRzJzogJ3VubGlzdGVkLXNjcmlwdCcsXG4gICcqL2luZGV4LnRzJzogJ3VubGlzdGVkLXNjcmlwdCcsXG4gIFtgKi4ke0NTU19FWFRFTlNJT05TX1BBVFRFUk59YF06ICd1bmxpc3RlZC1zdHlsZScsXG4gIFtgKi9pbmRleC4ke0NTU19FWFRFTlNJT05TX1BBVFRFUk59YF06ICd1bmxpc3RlZC1zdHlsZScsXG5cbiAgLy8gRG9uJ3Qgd2FybiBhYm91dCBhbnkgZmlsZXMgaW4gc3ViZGlyZWN0b3JpZXMsIGxpa2UgQ1NTIG9yIEpTIGVudHJ5cG9pbnRzIGZvciBIVE1MIGZpbGVzIG9yIHRlc3RzXG4gICcqLyoqJzogJ2lnbm9yZWQnLFxufTtcblxuY29uc3QgQ09OVEVOVF9TQ1JJUFRfT1VUX0RJUiA9ICdjb250ZW50LXNjcmlwdHMnO1xuIiwgImltcG9ydCBjcmVhdGVKSVRJIGZyb20gJ2ppdGknO1xuaW1wb3J0IHsgSW50ZXJuYWxDb25maWcgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBjcmVhdGVVbmltcG9ydCB9IGZyb20gJ3VuaW1wb3J0JztcbmltcG9ydCBmcyBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgeyByZXNvbHZlIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQgdHJhbnNmb3JtIGZyb20gJ2ppdGkvZGlzdC9iYWJlbCc7XG5pbXBvcnQgeyBnZXRVbmltcG9ydE9wdGlvbnMgfSBmcm9tICcuL2F1dG8taW1wb3J0cyc7XG5pbXBvcnQgeyByZW1vdmVQcm9qZWN0SW1wb3J0U3RhdGVtZW50cyB9IGZyb20gJy4vc3RyaW5ncyc7XG5pbXBvcnQgeyBub3JtYWxpemVQYXRoIH0gZnJvbSAnLi9wYXRocyc7XG5cbi8qKlxuICogR2V0IHRoZSB2YWx1ZSBmcm9tIHRoZSBkZWZhdWx0IGV4cG9ydCBvZiBhIGBwYXRoYC5cbiAqXG4gKiBJdCB3b3JrcyBieTpcbiAqXG4gKiAxLiBSZWFkaW5nIHRoZSBmaWxlIHRleHRcbiAqIDIuIFN0cmlwcGluZyBhbGwgaW1wb3J0cyBmcm9tIGl0IHZpYSByZWdleFxuICogMy4gQXV0by1pbXBvcnQgb25seSB0aGUgY2xpZW50IGhlbHBlciBmdW5jdGlvbnNcbiAqXG4gKiBUaGlzIHByZXZlbnRzIHJlc29sdmluZyBpbXBvcnRzIG9mIGltcG9ydHMsIHNwZWVkaW5nIHRoaW5ncyB1cCBhbmQgcHJldmVudGluZyBcInh4eCBpcyBub3RcbiAqIGRlZmluZWRcIiBlcnJvcnMuXG4gKlxuICogRG93bnNpZGUgaXMgdGhhdCBjb2RlIGNhbm5vdCBiZSBleGVjdXRlZCBvdXRzaWRlIG9mIHRoZSBtYWluIGZ1Y250aW9uIGZvciB0aGUgZW50cnlwb2ludCxcbiAqIG90aGVyd2lzZSB5b3Ugd2lsbCBzZWUgXCJ4eHggaXMgbm90IGRlZmluZWRcIiBlcnJvcnMgZm9yIGFueSBpbXBvcnRzIHVzZWQgb3V0c2lkZSBvZiBtYWluIGZ1bmN0aW9uLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW1wb3J0RW50cnlwb2ludEZpbGU8VD4oXG4gIHBhdGg6IHN0cmluZyxcbiAgY29uZmlnOiBJbnRlcm5hbENvbmZpZyxcbik6IFByb21pc2U8VD4ge1xuICBjb25maWcubG9nZ2VyLmRlYnVnKCdMb2FkaW5nIGZpbGUgbWV0YWRhdGE6JywgcGF0aCk7XG4gIC8vIEpJVEkgJiBCYWJlbCB1c2VzIG5vcm1hbGl6ZWQgcGF0aHMuXG4gIGNvbnN0IG5vcm1hbFBhdGggPSBub3JtYWxpemVQYXRoKHBhdGgpO1xuXG4gIGNvbnN0IHVuaW1wb3J0ID0gY3JlYXRlVW5pbXBvcnQoe1xuICAgIC4uLmdldFVuaW1wb3J0T3B0aW9ucyhjb25maWcpLFxuICAgIC8vIE9ubHkgYWxsb3cgc3BlY2lmaWMgaW1wb3J0cywgbm90IGFsbCBmcm9tIHRoZSBwcm9qZWN0XG4gICAgZGlyczogW10sXG4gIH0pO1xuICBhd2FpdCB1bmltcG9ydC5pbml0KCk7XG5cbiAgY29uc3QgdGV4dCA9IGF3YWl0IGZzLnJlYWRGaWxlKHBhdGgsICd1dGYtOCcpO1xuICBjb25zdCB0ZXh0Tm9JbXBvcnRzID0gcmVtb3ZlUHJvamVjdEltcG9ydFN0YXRlbWVudHModGV4dCk7XG4gIGNvbnN0IHsgY29kZSB9ID0gYXdhaXQgdW5pbXBvcnQuaW5qZWN0SW1wb3J0cyh0ZXh0Tm9JbXBvcnRzKTtcbiAgY29uZmlnLmxvZ2dlci5kZWJ1ZyhcbiAgICBbJ1RleHQ6JywgdGV4dCwgJ05vIGltcG9ydHM6JywgdGV4dE5vSW1wb3J0cywgJ0NvZGU6JywgY29kZV0uam9pbignXFxuJyksXG4gICk7XG5cbiAgY29uc3Qgaml0aSA9IGNyZWF0ZUpJVEkoX19maWxlbmFtZSwge1xuICAgIGNhY2hlOiBmYWxzZSxcbiAgICBlc21SZXNvbHZlOiB0cnVlLFxuICAgIGludGVyb3BEZWZhdWx0OiB0cnVlLFxuICAgIGFsaWFzOiB7XG4gICAgICAnd2ViZXh0ZW5zaW9uLXBvbHlmaWxsJzogcmVzb2x2ZShcbiAgICAgICAgY29uZmlnLnJvb3QsXG4gICAgICAgICdub2RlX21vZHVsZXMvd3h0L2Rpc3QvdmlydHVhbC1tb2R1bGVzL2Zha2UtYnJvd3Nlci5qcycsXG4gICAgICApLFxuICAgIH0sXG4gICAgdHJhbnNmb3JtKG9wdHMpIHtcbiAgICAgIGlmIChvcHRzLmZpbGVuYW1lID09PSBub3JtYWxQYXRoKVxuICAgICAgICByZXR1cm4gdHJhbnNmb3JtKHsgLi4ub3B0cywgc291cmNlOiBjb2RlIH0pO1xuICAgICAgZWxzZSByZXR1cm4gdHJhbnNmb3JtKG9wdHMpO1xuICAgIH0sXG4gIH0pO1xuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IGppdGkocGF0aCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbmZpZy5sb2dnZXIuZXJyb3IoZXJyKTtcbiAgICB0aHJvdyBlcnI7XG4gIH1cbn1cbiIsICJleHBvcnQgZnVuY3Rpb24ga2ViYWJDYXNlQWxwaGFudW1lcmljKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHN0clxuICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgLnJlcGxhY2UoL1teYS16MC05LVxcc10vZywgJycpIC8vIFJlbW92ZSBhbGwgbm9uLWFscGhhbnVtZXJpYywgbm9uLWh5cGhlbiBjaGFyYWN0ZXJzXG4gICAgLnJlcGxhY2UoL1xccysvZywgJy0nKTsgLy8gUmVwbGFjZSBzcGFjZXMgd2l0aCBoeXBoZW5zXG59XG5cbi8qKlxuICogUmVtb3ZlcyBpbXBvcnQgc3RhdGVtZW50cyBmcm9tIHRoZSB0b3Agb2YgYSBmaWxlLiBLZWVwcyBpbXBvcnQubWV0YSBhbmQgaW5saW5lLCBhc3luYyBgaW1wb3J0KClgXG4gKiBjYWxscy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUltcG9ydFN0YXRlbWVudHModGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRleHQucmVwbGFjZShcbiAgICAvKGltcG9ydFxccz9be1xcd11bXFxzXFxTXSo/ZnJvbVxccz9bXCInXVtcXHNcXFNdKj9bXCInXTs/fGltcG9ydFxccz9bXCInXVtcXHNcXFNdKj9bXCInXTs/KS9nbSxcbiAgICAnJyxcbiAgKTtcbn1cblxuLyoqXG4gKiBSZW1vdmVzIGltcG9ydHMsIGVuc3VyaW5nIHRoYXQgc29tZSBvZiBXWFQncyBjbGllbnQgaW1wb3J0cyBhcmUgcHJlc2VudCwgc28gdGhhdCBlbnRyeXBvaW50cyBjYW4gYmUgcGFyc2VkIGlmIGF1dG8taW1wb3J0cyBhcmUgZGlzYWJsZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVQcm9qZWN0SW1wb3J0U3RhdGVtZW50cyh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBub0ltcG9ydHMgPSByZW1vdmVJbXBvcnRTdGF0ZW1lbnRzKHRleHQpO1xuXG4gIHJldHVybiBgaW1wb3J0IHsgZGVmaW5lQ29udGVudFNjcmlwdCwgZGVmaW5lQmFja2dyb3VuZCB9IGZyb20gJ3d4dC9jbGllbnQnO1xuXG4ke25vSW1wb3J0c31gO1xufVxuIiwgImltcG9ydCB7IFVuaW1wb3J0T3B0aW9ucywgY3JlYXRlVW5pbXBvcnQgfSBmcm9tICd1bmltcG9ydCc7XG5pbXBvcnQgeyBFbnRyeXBvaW50LCBJbnRlcm5hbENvbmZpZyB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCBmcyBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgeyByZWxhdGl2ZSwgcmVzb2x2ZSB9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgZ2V0RW50cnlwb2ludEJ1bmRsZVBhdGggfSBmcm9tICcuLi91dGlscy9lbnRyeXBvaW50cyc7XG5pbXBvcnQgeyBnZXRVbmltcG9ydE9wdGlvbnMgfSBmcm9tICcuLi91dGlscy9hdXRvLWltcG9ydHMnO1xuaW1wb3J0IHsgZ2V0RW50cnlwb2ludEdsb2JhbHMsIGdldEdsb2JhbHMgfSBmcm9tICcuLi91dGlscy9nbG9iYWxzJztcbmltcG9ydCB7IGdldFB1YmxpY0ZpbGVzIH0gZnJvbSAnLi4vdXRpbHMvcHVibGljJztcbmltcG9ydCB7IG5vcm1hbGl6ZVBhdGggfSBmcm9tICcuLi91dGlscy9wYXRocyc7XG5pbXBvcnQgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgTWVzc2FnZSwgcGFyc2VJMThuTWVzc2FnZXMgfSBmcm9tICcuLi91dGlscy9pMThuJztcbmltcG9ydCB7IHdyaXRlRmlsZUlmRGlmZmVyZW50IH0gZnJvbSAnLi4vdXRpbHMvZnMnO1xuXG4vKipcbiAqIEdlbmVyYXRlIGFuZCB3cml0ZSBhbGwgdGhlIGZpbGVzIGluc2lkZSB0aGUgYEludGVybmFsQ29uZmlnLnR5cGVzRGlyYCBkaXJlY3RvcnkuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZW5lcmF0ZVR5cGVzRGlyKFxuICBlbnRyeXBvaW50czogRW50cnlwb2ludFtdLFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IGZzLmVuc3VyZURpcihjb25maWcudHlwZXNEaXIpO1xuXG4gIGNvbnN0IHJlZmVyZW5jZXM6IHN0cmluZ1tdID0gW107XG5cbiAgY29uc3QgaW1wb3J0cyA9IGdldFVuaW1wb3J0T3B0aW9ucyhjb25maWcpO1xuICBpZiAoaW1wb3J0cyAhPT0gZmFsc2UpIHtcbiAgICByZWZlcmVuY2VzLnB1c2goYXdhaXQgd3JpdGVJbXBvcnRzRGVjbGFyYXRpb25GaWxlKGNvbmZpZywgaW1wb3J0cykpO1xuICB9XG5cbiAgcmVmZXJlbmNlcy5wdXNoKGF3YWl0IHdyaXRlUGF0aHNEZWNsYXJhdGlvbkZpbGUoZW50cnlwb2ludHMsIGNvbmZpZykpO1xuICByZWZlcmVuY2VzLnB1c2goYXdhaXQgd3JpdGVJMThuRGVjbGFyYXRpb25GaWxlKGNvbmZpZykpO1xuICByZWZlcmVuY2VzLnB1c2goYXdhaXQgd3JpdGVHbG9iYWxzRGVjbGFyYXRpb25GaWxlKGNvbmZpZykpO1xuXG4gIGNvbnN0IG1haW5SZWZlcmVuY2UgPSBhd2FpdCB3cml0ZU1haW5EZWNsYXJhdGlvbkZpbGUocmVmZXJlbmNlcywgY29uZmlnKTtcbiAgYXdhaXQgd3JpdGVUc0NvbmZpZ0ZpbGUobWFpblJlZmVyZW5jZSwgY29uZmlnKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gd3JpdGVJbXBvcnRzRGVjbGFyYXRpb25GaWxlKFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuICB1bmltcG9ydE9wdGlvbnM6IFBhcnRpYWw8VW5pbXBvcnRPcHRpb25zPixcbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGZpbGVQYXRoID0gcmVzb2x2ZShjb25maWcudHlwZXNEaXIsICdpbXBvcnRzLmQudHMnKTtcbiAgY29uc3QgdW5pbXBvcnQgPSBjcmVhdGVVbmltcG9ydCh1bmltcG9ydE9wdGlvbnMpO1xuXG4gIC8vIExvYWQgcHJvamVjdCBpbXBvcnRzIGludG8gdW5pbXBvcnQgbWVtb3J5IHNvIHRoZXkgYXJlIG91dHB1dCB2aWEgZ2VuZXJhdGVUeXBlRGVjbGFyYXRpb25zXG4gIGF3YWl0IHVuaW1wb3J0LnNjYW5JbXBvcnRzRnJvbURpcih1bmRlZmluZWQsIHsgY3dkOiBjb25maWcuc3JjRGlyIH0pO1xuXG4gIGF3YWl0IHdyaXRlRmlsZUlmRGlmZmVyZW50KFxuICAgIGZpbGVQYXRoLFxuICAgIFsnLy8gR2VuZXJhdGVkIGJ5IHd4dCcsIGF3YWl0IHVuaW1wb3J0LmdlbmVyYXRlVHlwZURlY2xhcmF0aW9ucygpXS5qb2luKFxuICAgICAgJ1xcbicsXG4gICAgKSArICdcXG4nLFxuICApO1xuXG4gIHJldHVybiBmaWxlUGF0aDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gd3JpdGVQYXRoc0RlY2xhcmF0aW9uRmlsZShcbiAgZW50cnlwb2ludHM6IEVudHJ5cG9pbnRbXSxcbiAgY29uZmlnOiBJbnRlcm5hbENvbmZpZyxcbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGZpbGVQYXRoID0gcmVzb2x2ZShjb25maWcudHlwZXNEaXIsICdwYXRocy5kLnRzJyk7XG4gIGNvbnN0IHVuaW9ucyA9IGVudHJ5cG9pbnRzXG4gICAgLm1hcCgoZW50cnkpID0+XG4gICAgICBnZXRFbnRyeXBvaW50QnVuZGxlUGF0aChcbiAgICAgICAgZW50cnksXG4gICAgICAgIGNvbmZpZy5vdXREaXIsXG4gICAgICAgIGVudHJ5LmlucHV0UGF0aC5lbmRzV2l0aCgnLmh0bWwnKSA/ICcuaHRtbCcgOiAnLmpzJyxcbiAgICAgICksXG4gICAgKVxuICAgIC5jb25jYXQoYXdhaXQgZ2V0UHVibGljRmlsZXMoY29uZmlnKSlcbiAgICAubWFwKG5vcm1hbGl6ZVBhdGgpXG4gICAgLm1hcCgocGF0aCkgPT4gYCAgICB8IFwiLyR7cGF0aH1cImApXG4gICAgLnNvcnQoKVxuICAgIC5qb2luKCdcXG4nKTtcblxuICBjb25zdCB0ZW1wbGF0ZSA9IGAvLyBHZW5lcmF0ZWQgYnkgd3h0XG5pbXBvcnQgXCJ3eHQvYnJvd3NlclwiO1xuXG5kZWNsYXJlIG1vZHVsZSBcInd4dC9icm93c2VyXCIge1xuICB0eXBlIFB1YmxpY1BhdGggPVxue3sgdW5pb24gfX1cbiAgZXhwb3J0IGludGVyZmFjZSBXeHRSdW50aW1lIGV4dGVuZHMgUnVudGltZS5TdGF0aWMge1xuICAgIGdldFVSTChwYXRoOiBQdWJsaWNQYXRoKTogc3RyaW5nO1xuICB9XG59XG5gO1xuXG4gIGF3YWl0IHdyaXRlRmlsZUlmRGlmZmVyZW50KFxuICAgIGZpbGVQYXRoLFxuICAgIHRlbXBsYXRlLnJlcGxhY2UoJ3t7IHVuaW9uIH19JywgdW5pb25zIHx8ICcgICAgfCBuZXZlcicpLFxuICApO1xuXG4gIHJldHVybiBmaWxlUGF0aDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gd3JpdGVJMThuRGVjbGFyYXRpb25GaWxlKFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgZmlsZVBhdGggPSByZXNvbHZlKGNvbmZpZy50eXBlc0RpciwgJ2kxOG4uZC50cycpO1xuICBjb25zdCBkZWZhdWx0TG9jYWxlID0gY29uZmlnLm1hbmlmZXN0LmRlZmF1bHRfbG9jYWxlO1xuICBjb25zdCB0ZW1wbGF0ZSA9IGAvLyBHZW5lcmF0ZWQgYnkgd3h0XG5pbXBvcnQgXCJ3eHQvYnJvd3NlclwiO1xuXG5kZWNsYXJlIG1vZHVsZSBcInd4dC9icm93c2VyXCIge1xuICAvKipcbiAgICogU2VlIGh0dHBzOi8vZGV2ZWxvcGVyLmNocm9tZS5jb20vZG9jcy9leHRlbnNpb25zL3JlZmVyZW5jZS9pMThuLyNtZXRob2QtZ2V0TWVzc2FnZVxuICAgKi9cbiAgaW50ZXJmYWNlIEdldE1lc3NhZ2VPcHRpb25zIHtcbiAgICAvKipcbiAgICAgKiBTZWUgaHR0cHM6Ly9kZXZlbG9wZXIuY2hyb21lLmNvbS9kb2NzL2V4dGVuc2lvbnMvcmVmZXJlbmNlL2kxOG4vI21ldGhvZC1nZXRNZXNzYWdlXG4gICAgICovXG4gICAgZXNjYXBlTHQ/OiBib29sZWFuXG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIFd4dEkxOG4gZXh0ZW5kcyBJMThuLlN0YXRpYyB7XG57eyBvdmVycmlkZXMgfX1cbiAgfVxufVxuYDtcblxuICBsZXQgbWVzc2FnZXM6IE1lc3NhZ2VbXTtcbiAgaWYgKGRlZmF1bHRMb2NhbGUpIHtcbiAgICBjb25zdCBkZWZhdWx0TG9jYWxlUGF0aCA9IHBhdGgucmVzb2x2ZShcbiAgICAgIGNvbmZpZy5wdWJsaWNEaXIsXG4gICAgICAnX2xvY2FsZXMnLFxuICAgICAgZGVmYXVsdExvY2FsZSxcbiAgICAgICdtZXNzYWdlcy5qc29uJyxcbiAgICApO1xuICAgIGNvbnN0IGNvbnRlbnQgPSBKU09OLnBhcnNlKGF3YWl0IGZzLnJlYWRGaWxlKGRlZmF1bHRMb2NhbGVQYXRoLCAndXRmLTgnKSk7XG4gICAgbWVzc2FnZXMgPSBwYXJzZUkxOG5NZXNzYWdlcyhjb250ZW50KTtcbiAgfSBlbHNlIHtcbiAgICBtZXNzYWdlcyA9IHBhcnNlSTE4bk1lc3NhZ2VzKHt9KTtcbiAgfVxuXG4gIGNvbnN0IG92ZXJyaWRlcyA9IG1lc3NhZ2VzLm1hcCgobWVzc2FnZSkgPT4ge1xuICAgIHJldHVybiBgICAgIC8qKlxuICAgICAqICR7bWVzc2FnZS5kZXNjcmlwdGlvbiA/PyAnTm8gbWVzc2FnZSBkZXNjcmlwdGlvbi4nfVxuICAgICAqIFxuICAgICAqIFwiJHttZXNzYWdlLm1lc3NhZ2V9XCJcbiAgICAgKi9cbiAgICBnZXRNZXNzYWdlKFxuICAgICAgbWVzc2FnZU5hbWU6IFwiJHttZXNzYWdlLm5hbWV9XCIsXG4gICAgICBzdWJzdGl0dXRpb25zPzogc3RyaW5nIHwgc3RyaW5nW10sXG4gICAgICBvcHRpb25zPzogR2V0TWVzc2FnZU9wdGlvbnMsXG4gICAgKTogc3RyaW5nO2A7XG4gIH0pO1xuICBhd2FpdCB3cml0ZUZpbGVJZkRpZmZlcmVudChcbiAgICBmaWxlUGF0aCxcbiAgICB0ZW1wbGF0ZS5yZXBsYWNlKCd7eyBvdmVycmlkZXMgfX0nLCBvdmVycmlkZXMuam9pbignXFxuJykpLFxuICApO1xuXG4gIHJldHVybiBmaWxlUGF0aDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gd3JpdGVHbG9iYWxzRGVjbGFyYXRpb25GaWxlKFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgZmlsZVBhdGggPSByZXNvbHZlKGNvbmZpZy50eXBlc0RpciwgJ2dsb2JhbHMuZC50cycpO1xuICBjb25zdCBnbG9iYWxzID0gWy4uLmdldEdsb2JhbHMoY29uZmlnKSwgLi4uZ2V0RW50cnlwb2ludEdsb2JhbHMoY29uZmlnLCAnJyldO1xuICBhd2FpdCB3cml0ZUZpbGVJZkRpZmZlcmVudChcbiAgICBmaWxlUGF0aCxcbiAgICBbXG4gICAgICAnLy8gR2VuZXJhdGVkIGJ5IHd4dCcsXG4gICAgICAnZXhwb3J0IHt9JyxcbiAgICAgICdkZWNsYXJlIGdsb2JhbCB7JyxcbiAgICAgIC4uLmdsb2JhbHMubWFwKChnbG9iYWwpID0+IGAgIGNvbnN0ICR7Z2xvYmFsLm5hbWV9OiAke2dsb2JhbC50eXBlfTtgKSxcbiAgICAgICd9JyxcbiAgICBdLmpvaW4oJ1xcbicpICsgJ1xcbicsXG4gICk7XG4gIHJldHVybiBmaWxlUGF0aDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gd3JpdGVNYWluRGVjbGFyYXRpb25GaWxlKFxuICByZWZlcmVuY2VzOiBzdHJpbmdbXSxcbiAgY29uZmlnOiBJbnRlcm5hbENvbmZpZyxcbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGRpciA9IGNvbmZpZy53eHREaXI7XG4gIGNvbnN0IGZpbGVQYXRoID0gcmVzb2x2ZShkaXIsICd3eHQuZC50cycpO1xuICBhd2FpdCB3cml0ZUZpbGVJZkRpZmZlcmVudChcbiAgICBmaWxlUGF0aCxcbiAgICBbXG4gICAgICAnLy8gR2VuZXJhdGVkIGJ5IHd4dCcsXG4gICAgICBgLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCJ2aXRlL2NsaWVudFwiIC8+YCxcbiAgICAgIC4uLnJlZmVyZW5jZXMubWFwKFxuICAgICAgICAocmVmKSA9PlxuICAgICAgICAgIGAvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vJHtub3JtYWxpemVQYXRoKHJlbGF0aXZlKGRpciwgcmVmKSl9XCIgLz5gLFxuICAgICAgKSxcbiAgICBdLmpvaW4oJ1xcbicpICsgJ1xcbicsXG4gICk7XG4gIHJldHVybiBmaWxlUGF0aDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gd3JpdGVUc0NvbmZpZ0ZpbGUoXG4gIG1haW5SZWZlcmVuY2U6IHN0cmluZyxcbiAgY29uZmlnOiBJbnRlcm5hbENvbmZpZyxcbikge1xuICBjb25zdCBkaXIgPSBjb25maWcud3h0RGlyO1xuICBjb25zdCByb290UGF0aCA9IG5vcm1hbGl6ZVBhdGgocmVsYXRpdmUoZGlyLCBjb25maWcucm9vdCkpO1xuICBjb25zdCBzcmNQYXRoID0gbm9ybWFsaXplUGF0aChyZWxhdGl2ZShkaXIsIGNvbmZpZy5zcmNEaXIpKTtcbiAgYXdhaXQgd3JpdGVGaWxlSWZEaWZmZXJlbnQoXG4gICAgcmVzb2x2ZShkaXIsICd0c2NvbmZpZy5qc29uJyksXG4gICAgYHtcbiAgXCJjb21waWxlck9wdGlvbnNcIjoge1xuICAgIFwidGFyZ2V0XCI6IFwiRVNOZXh0XCIsXG4gICAgXCJtb2R1bGVcIjogXCJFU05leHRcIixcbiAgICBcIm1vZHVsZVJlc29sdXRpb25cIjogXCJCdW5kbGVyXCIsXG4gICAgXCJub0VtaXRcIjogdHJ1ZSxcbiAgICBcImVzTW9kdWxlSW50ZXJvcFwiOiB0cnVlLFxuICAgIFwiZm9yY2VDb25zaXN0ZW50Q2FzaW5nSW5GaWxlTmFtZXNcIjogdHJ1ZSxcbiAgICBcInJlc29sdmVKc29uTW9kdWxlXCI6IHRydWUsXG4gICAgXCJzdHJpY3RcIjogdHJ1ZSxcbiAgICBcImxpYlwiOiBbXCJET01cIiwgXCJXZWJXb3JrZXJcIl0sXG4gICAgXCJza2lwTGliQ2hlY2tcIjogdHJ1ZSxcbiAgICBcInBhdGhzXCI6IHtcbiAgICAgIFwiQEBcIjogW1wiJHtyb290UGF0aH1cIl0sXG4gICAgICBcIkBALypcIjogW1wiJHtyb290UGF0aH0vKlwiXSxcbiAgICAgIFwifn5cIjogW1wiJHtyb290UGF0aH1cIl0sXG4gICAgICBcIn5+LypcIjogW1wiJHtyb290UGF0aH0vKlwiXSxcbiAgICAgIFwiQFwiOiBbXCIke3NyY1BhdGh9XCJdLFxuICAgICAgXCJALypcIjogW1wiJHtzcmNQYXRofS8qXCJdLFxuICAgICAgXCJ+XCI6IFtcIiR7c3JjUGF0aH1cIl0sXG4gICAgICBcIn4vKlwiOiBbXCIke3NyY1BhdGh9LypcIl1cbiAgICB9XG4gIH0sXG4gIFwiaW5jbHVkZVwiOiBbXG4gICAgXCIke25vcm1hbGl6ZVBhdGgocmVsYXRpdmUoZGlyLCBjb25maWcucm9vdCkpfS8qKi8qXCIsXG4gICAgXCIuLyR7bm9ybWFsaXplUGF0aChyZWxhdGl2ZShkaXIsIG1haW5SZWZlcmVuY2UpKX1cIlxuICBdLFxuICBcImV4Y2x1ZGVcIjogW1wiJHtub3JtYWxpemVQYXRoKHJlbGF0aXZlKGRpciwgY29uZmlnLm91dEJhc2VEaXIpKX1cIl1cbn1gLFxuICApO1xufVxuIiwgImV4cG9ydCBpbnRlcmZhY2UgTWVzc2FnZSB7XG4gIG5hbWU6IHN0cmluZztcbiAgbWVzc2FnZTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbn1cblxuY29uc3QgcHJlZGVmaW5lZE1lc3NhZ2VzID0ge1xuICAnQEBleHRlbnNpb25faWQnOiB7XG4gICAgbWVzc2FnZTogJzxicm93c2VyLnJ1bnRpbWUuaWQ+JyxcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgIFwiVGhlIGV4dGVuc2lvbiBvciBhcHAgSUQ7IHlvdSBtaWdodCB1c2UgdGhpcyBzdHJpbmcgdG8gY29uc3RydWN0IFVSTHMgZm9yIHJlc291cmNlcyBpbnNpZGUgdGhlIGV4dGVuc2lvbi4gRXZlbiB1bmxvY2FsaXplZCBleHRlbnNpb25zIGNhbiB1c2UgdGhpcyBtZXNzYWdlLlxcbk5vdGU6IFlvdSBjYW4ndCB1c2UgdGhpcyBtZXNzYWdlIGluIGEgbWFuaWZlc3QgZmlsZS5cIixcbiAgfSxcbiAgJ0BAdWlfbG9jYWxlJzoge1xuICAgIG1lc3NhZ2U6ICc8YnJvd3Nlci5pMThuLmdldFVpTG9jYWxlKCk+JyxcbiAgICBkZXNjcmlwdGlvbjogJycsXG4gIH0sXG4gICdAQGJpZGlfZGlyJzoge1xuICAgIG1lc3NhZ2U6ICc8bHRyfHJ0bD4nLFxuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgJ1RoZSB0ZXh0IGRpcmVjdGlvbiBmb3IgdGhlIGN1cnJlbnQgbG9jYWxlLCBlaXRoZXIgXCJsdHJcIiBmb3IgbGVmdC10by1yaWdodCBsYW5ndWFnZXMgc3VjaCBhcyBFbmdsaXNoIG9yIFwicnRsXCIgZm9yIHJpZ2h0LXRvLWxlZnQgbGFuZ3VhZ2VzIHN1Y2ggYXMgSmFwYW5lc2UuJyxcbiAgfSxcbiAgJ0BAYmlkaV9yZXZlcnNlZF9kaXInOiB7XG4gICAgbWVzc2FnZTogJzxydGx8bHRyPicsXG4gICAgZGVzY3JpcHRpb246XG4gICAgICAnSWYgdGhlIEBAYmlkaV9kaXIgaXMgXCJsdHJcIiwgdGhlbiB0aGlzIGlzIFwicnRsXCI7IG90aGVyd2lzZSwgaXRcXCdzIFwibHRyXCIuJyxcbiAgfSxcbiAgJ0BAYmlkaV9zdGFydF9lZGdlJzoge1xuICAgIG1lc3NhZ2U6ICc8bGVmdHxyaWdodD4nLFxuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgJ0lmIHRoZSBAQGJpZGlfZGlyIGlzIFwibHRyXCIsIHRoZW4gdGhpcyBpcyBcImxlZnRcIjsgb3RoZXJ3aXNlLCBpdFxcJ3MgXCJyaWdodFwiLicsXG4gIH0sXG4gICdAQGJpZGlfZW5kX2VkZ2UnOiB7XG4gICAgbWVzc2FnZTogJzxyaWdodHxsZWZ0PicsXG4gICAgZGVzY3JpcHRpb246XG4gICAgICAnSWYgdGhlIEBAYmlkaV9kaXIgaXMgXCJsdHJcIiwgdGhlbiB0aGlzIGlzIFwicmlnaHRcIjsgb3RoZXJ3aXNlLCBpdFxcJ3MgXCJsZWZ0XCIuJyxcbiAgfSxcbn07XG5cbi8qKlxuICogR2V0IGEgbGlzdCBvZiBhbGwgbWVzc2FnZXMgYW5kIHRoZWlyIG1ldGFkYXRhIGZyb20gSlNPTiBmaWxlIGNvbnRlbnRzLlxuICpcbiAqIEBwYXJhbSBtZXNzYWdlc0pzb24gVGhlIGNvbnRlbnRzIG9mIGEgYF9sb2NhbGVzL2VuL21lc3NhZ2VzLmpzb25gIGZpbGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUkxOG5NZXNzYWdlcyhtZXNzYWdlc0pzb246IG9iamVjdCk6IE1lc3NhZ2VbXSB7XG4gIHJldHVybiBPYmplY3QuZW50cmllcyh7XG4gICAgLi4ucHJlZGVmaW5lZE1lc3NhZ2VzLFxuICAgIC4uLm1lc3NhZ2VzSnNvbixcbiAgfSkubWFwPE1lc3NhZ2U+KChbbmFtZSwgZGV0YWlsc10pID0+ICh7XG4gICAgbmFtZSxcbiAgICAuLi5kZXRhaWxzLFxuICB9KSk7XG59XG4iLCAiaW1wb3J0IHsgRW50cnlwb2ludCB9IGZyb20gJy4uLy4uJztcbmltcG9ydCB7IE1hbmlmZXN0IH0gZnJvbSAnd2ViZXh0ZW5zaW9uLXBvbHlmaWxsJztcbmltcG9ydCB7XG4gIEJhY2tncm91bmRFbnRyeXBvaW50LFxuICBCdWlsZE91dHB1dCxcbiAgQ29udGVudFNjcmlwdEVudHJ5cG9pbnQsXG4gIEludGVybmFsQ29uZmlnLFxuICBPcHRpb25zRW50cnlwb2ludCxcbiAgUG9wdXBFbnRyeXBvaW50LFxufSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnO1xuaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgZ2V0RW50cnlwb2ludEJ1bmRsZVBhdGggfSBmcm9tICcuL2VudHJ5cG9pbnRzJztcbmltcG9ydCB7IENvbnRlbnRTZWN1cml0eVBvbGljeSB9IGZyb20gJy4vQ29udGVudFNlY3VyaXR5UG9saWN5JztcbmltcG9ydCB7XG4gIGhhc2hDb250ZW50U2NyaXB0T3B0aW9ucyxcbiAgbWFwV3h0T3B0aW9uc1RvQ29udGVudFNjcmlwdCxcbn0gZnJvbSAnLi9jb250ZW50LXNjcmlwdHMnO1xuaW1wb3J0IHsgZ2V0UGFja2FnZUpzb24gfSBmcm9tICcuL3BhY2thZ2UnO1xuaW1wb3J0IHsgbm9ybWFsaXplUGF0aCB9IGZyb20gJy4vcGF0aHMnO1xuaW1wb3J0IHsgd3JpdGVGaWxlSWZEaWZmZXJlbnQgfSBmcm9tICcuL2ZzJztcblxuLyoqXG4gKiBXcml0ZXMgdGhlIG1hbmlmZXN0IHRvIHRoZSBvdXRwdXQgZGlyZWN0b3J5IGFuZCB0aGUgYnVpbGQgb3V0cHV0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd3JpdGVNYW5pZmVzdChcbiAgbWFuaWZlc3Q6IE1hbmlmZXN0LldlYkV4dGVuc2lvbk1hbmlmZXN0LFxuICBvdXRwdXQ6IEJ1aWxkT3V0cHV0LFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHN0ciA9XG4gICAgY29uZmlnLm1vZGUgPT09ICdwcm9kdWN0aW9uJ1xuICAgICAgPyBKU09OLnN0cmluZ2lmeShtYW5pZmVzdClcbiAgICAgIDogSlNPTi5zdHJpbmdpZnkobWFuaWZlc3QsIG51bGwsIDIpO1xuXG4gIGF3YWl0IGZzLmVuc3VyZURpcihjb25maWcub3V0RGlyKTtcbiAgYXdhaXQgd3JpdGVGaWxlSWZEaWZmZXJlbnQocmVzb2x2ZShjb25maWcub3V0RGlyLCAnbWFuaWZlc3QuanNvbicpLCBzdHIpO1xuXG4gIG91dHB1dC5wdWJsaWNBc3NldHMudW5zaGlmdCh7XG4gICAgdHlwZTogJ2Fzc2V0JyxcbiAgICBmaWxlTmFtZTogJ21hbmlmZXN0Lmpzb24nLFxuICAgIG5hbWU6ICdtYW5pZmVzdCcsXG4gICAgbmVlZHNDb2RlUmVmZXJlbmNlOiBmYWxzZSxcbiAgICBzb3VyY2U6IHN0cixcbiAgfSk7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBtYW5pZmVzdCBiYXNlZCBvbiB0aGUgY29uZmlnIGFuZCBlbnRyeXBvaW50cy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlTWFpbmZlc3QoXG4gIGVudHJ5cG9pbnRzOiBFbnRyeXBvaW50W10sXG4gIGJ1aWxkT3V0cHV0OiBPbWl0PEJ1aWxkT3V0cHV0LCAnbWFuaWZlc3QnPixcbiAgY29uZmlnOiBJbnRlcm5hbENvbmZpZyxcbik6IFByb21pc2U8TWFuaWZlc3QuV2ViRXh0ZW5zaW9uTWFuaWZlc3Q+IHtcbiAgY29uc3QgcGtnID0gYXdhaXQgZ2V0UGFja2FnZUpzb24oY29uZmlnKTtcblxuICBjb25zdCBtYW5pZmVzdDogTWFuaWZlc3QuV2ViRXh0ZW5zaW9uTWFuaWZlc3QgPSBPYmplY3QuYXNzaWduKFxuICAgIHtcbiAgICAgIG1hbmlmZXN0X3ZlcnNpb246IGNvbmZpZy5tYW5pZmVzdFZlcnNpb24sXG4gICAgICBuYW1lOiBwa2c/Lm5hbWUsXG4gICAgICBkZXNjcmlwdGlvbjogcGtnPy5kZXNjcmlwdGlvbixcbiAgICAgIHZlcnNpb246IHBrZz8udmVyc2lvbiAmJiBzaW1wbGlmeVZlcnNpb24ocGtnLnZlcnNpb24pLFxuICAgICAgLy8gT25seSBhZGQgdGhlIHZlcnNpb24gbmFtZSB0byBjaHJvbWl1bSBhbmQgaWYgdGhlIHVzZXIgaGFzbid0IHNwZWNpZmllZCBhIGN1c3RvbSB2ZXJzaW9uLlxuICAgICAgdmVyc2lvbl9uYW1lOlxuICAgICAgICBjb25maWcuYnJvd3NlciAhPT0gJ2ZpcmVmb3gnICYmICFjb25maWcubWFuaWZlc3QudmVyc2lvblxuICAgICAgICAgID8gcGtnPy52ZXJzaW9uXG4gICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICBzaG9ydF9uYW1lOiBwa2c/LnNob3J0TmFtZSxcbiAgICAgIGljb25zOiBkaXNjb3Zlckljb25zKGJ1aWxkT3V0cHV0KSxcbiAgICB9LFxuICAgIGNvbmZpZy5tYW5pZmVzdCxcbiAgKTtcblxuICBhZGRFbnRyeXBvaW50cyhtYW5pZmVzdCwgZW50cnlwb2ludHMsIGJ1aWxkT3V0cHV0LCBjb25maWcpO1xuXG4gIGlmIChjb25maWcuY29tbWFuZCA9PT0gJ3NlcnZlJykgYWRkRGV2TW9kZUNzcChtYW5pZmVzdCwgY29uZmlnKTtcbiAgaWYgKGNvbmZpZy5jb21tYW5kID09PSAnc2VydmUnKSBhZGREZXZNb2RlUGVybWlzc2lvbnMobWFuaWZlc3QsIGNvbmZpZyk7XG5cbiAgLy8gVE9ETzogdHJhbnNmb3JtIG1hbmlmZXN0IGhlcmUuXG5cbiAgaWYgKG1hbmlmZXN0Lm5hbWUgPT0gbnVsbClcbiAgICB0aHJvdyBFcnJvcihcbiAgICAgIFwiTWFuaWZlc3QgJ25hbWUnIGlzIG1pc3NpbmcuIEVpdGhlcjpcXG4xLiBTZXQgdGhlIG5hbWUgaW4geW91ciA8cm9vdERpcj4vcGFja2FnZS5qc29uXFxuMi4gU2V0IGEgbmFtZSB2aWEgdGhlIG1hbmlmZXN0IG9wdGlvbiBpbiB5b3VyIHd4dC5jb25maWcudHNcIixcbiAgICApO1xuICBpZiAobWFuaWZlc3QudmVyc2lvbiA9PSBudWxsKSB7XG4gICAgdGhyb3cgRXJyb3IoXG4gICAgICBcIk1hbmlmZXN0ICd2ZXJzaW9uJyBpcyBtaXNzaW5nLiBFaXRoZXI6XFxuMS4gQWRkIGEgdmVyc2lvbiBpbiB5b3VyIDxyb290RGlyPi9wYWNrYWdlLmpzb25cXG4yLiBQYXNzIHRoZSB2ZXJzaW9uIHZpYSB0aGUgbWFuaWZlc3Qgb3B0aW9uIGluIHlvdXIgd3h0LmNvbmZpZy50c1wiLFxuICAgICk7XG4gIH1cblxuICByZXR1cm4gbWFuaWZlc3Q7XG59XG5cbi8qKlxuICogUmVtb3ZlcyBzdWZmaXhlcyBmcm9tIHRoZSB2ZXJzaW9uLCBsaWtlIFguWS5aLWFscGhhMSAod2hpY2ggYnJvc2VycyBkb24ndCBhbGxvdyksIHNvIGl0J3MgYVxuICogc2ltcGxlIHZlcnNpb24gbnVtYmVyLCBsaWtlIFggb3IgWC5ZIG9yIFguWS5aLCB3aGljaCBicm93c2VycyBhbGxvdy5cbiAqL1xuZnVuY3Rpb24gc2ltcGxpZnlWZXJzaW9uKHZlcnNpb25OYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAvLyBSZWdleCBhZGFwdGVkIGZyb20gaGVyZTogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9Nb3ppbGxhL0FkZC1vbnMvV2ViRXh0ZW5zaW9ucy9tYW5pZmVzdC5qc29uL3ZlcnNpb24jdmVyc2lvbl9mb3JtYXRcbiAgY29uc3QgdmVyc2lvbiA9IC9eKCgwfFsxLTldWzAtOV17MCw4fSkoWy5dKDB8WzEtOV1bMC05XXswLDh9KSl7MCwzfSkuKiQvLmV4ZWMoXG4gICAgdmVyc2lvbk5hbWUsXG4gICk/LlsxXTtcblxuICBpZiAodmVyc2lvbiA9PSBudWxsKVxuICAgIHRocm93IEVycm9yKFxuICAgICAgYENhbm5vdCBzaW1wbGlmeSBwYWNrYWdlLmpzb24gdmVyc2lvbiBcIiR7dmVyc2lvbk5hbWV9XCIgdG8gYSB2YWxpZCBleHRlbnNpb24gdmVyc2lvbiwgXCJYLlkuWlwiYCxcbiAgICApO1xuXG4gIHJldHVybiB2ZXJzaW9uO1xufVxuXG5mdW5jdGlvbiBhZGRFbnRyeXBvaW50cyhcbiAgbWFuaWZlc3Q6IE1hbmlmZXN0LldlYkV4dGVuc2lvbk1hbmlmZXN0LFxuICBlbnRyeXBvaW50czogRW50cnlwb2ludFtdLFxuICBidWlsZE91dHB1dDogT21pdDxCdWlsZE91dHB1dCwgJ21hbmlmZXN0Jz4sXG4gIGNvbmZpZzogSW50ZXJuYWxDb25maWcsXG4pOiB2b2lkIHtcbiAgY29uc3QgZW50cmllc0J5VHlwZSA9IGVudHJ5cG9pbnRzLnJlZHVjZTxcbiAgICBQYXJ0aWFsPFJlY29yZDxFbnRyeXBvaW50Wyd0eXBlJ10sIEVudHJ5cG9pbnRbXT4+XG4gID4oKG1hcCwgZW50cnlwb2ludCkgPT4ge1xuICAgIG1hcFtlbnRyeXBvaW50LnR5cGVdID8/PSBbXTtcbiAgICBtYXBbZW50cnlwb2ludC50eXBlXT8ucHVzaChlbnRyeXBvaW50KTtcbiAgICByZXR1cm4gbWFwO1xuICB9LCB7fSk7XG5cbiAgY29uc3QgYmFja2dyb3VuZCA9IGVudHJpZXNCeVR5cGVbJ2JhY2tncm91bmQnXT8uWzBdIGFzXG4gICAgfCBCYWNrZ3JvdW5kRW50cnlwb2ludFxuICAgIHwgdW5kZWZpbmVkO1xuICBjb25zdCBib29rbWFya3MgPSBlbnRyaWVzQnlUeXBlWydib29rbWFya3MnXT8uWzBdO1xuICBjb25zdCBjb250ZW50U2NyaXB0cyA9IGVudHJpZXNCeVR5cGVbJ2NvbnRlbnQtc2NyaXB0J10gYXNcbiAgICB8IENvbnRlbnRTY3JpcHRFbnRyeXBvaW50W11cbiAgICB8IHVuZGVmaW5lZDtcbiAgY29uc3QgZGV2dG9vbHMgPSBlbnRyaWVzQnlUeXBlWydkZXZ0b29scyddPy5bMF07XG4gIGNvbnN0IGhpc3RvcnkgPSBlbnRyaWVzQnlUeXBlWydoaXN0b3J5J10/LlswXTtcbiAgY29uc3QgbmV3dGFiID0gZW50cmllc0J5VHlwZVsnbmV3dGFiJ10/LlswXTtcbiAgY29uc3Qgb3B0aW9ucyA9IGVudHJpZXNCeVR5cGVbJ29wdGlvbnMnXT8uWzBdIGFzXG4gICAgfCBPcHRpb25zRW50cnlwb2ludFxuICAgIHwgdW5kZWZpbmVkO1xuICBjb25zdCBwb3B1cCA9IGVudHJpZXNCeVR5cGVbJ3BvcHVwJ10/LlswXSBhcyBQb3B1cEVudHJ5cG9pbnQgfCB1bmRlZmluZWQ7XG4gIGNvbnN0IHNhbmRib3hlcyA9IGVudHJpZXNCeVR5cGVbJ3NhbmRib3gnXTtcbiAgY29uc3Qgc2lkZXBhbmVscyA9IGVudHJpZXNCeVR5cGVbJ3NpZGVwYW5lbCddO1xuXG4gIGlmIChiYWNrZ3JvdW5kKSB7XG4gICAgY29uc3Qgc2NyaXB0ID0gZ2V0RW50cnlwb2ludEJ1bmRsZVBhdGgoYmFja2dyb3VuZCwgY29uZmlnLm91dERpciwgJy5qcycpO1xuICAgIGlmIChtYW5pZmVzdC5tYW5pZmVzdF92ZXJzaW9uID09PSAzKSB7XG4gICAgICBtYW5pZmVzdC5iYWNrZ3JvdW5kID0ge1xuICAgICAgICB0eXBlOiBiYWNrZ3JvdW5kLm9wdGlvbnMudHlwZSxcbiAgICAgICAgc2VydmljZV93b3JrZXI6IHNjcmlwdCxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIG1hbmlmZXN0LmJhY2tncm91bmQgPSB7XG4gICAgICAgIHBlcnNpc3RlbnQ6IGJhY2tncm91bmQub3B0aW9ucy5wZXJzaXN0ZW50LFxuICAgICAgICBzY3JpcHRzOiBbc2NyaXB0XSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgaWYgKGJvb2ttYXJrcykge1xuICAgIGlmIChjb25maWcuYnJvd3NlciA9PT0gJ2ZpcmVmb3gnKSB7XG4gICAgICBjb25maWcubG9nZ2VyLndhcm4oXG4gICAgICAgICdCb29rbWFya3MgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgRmlyZWZveC4gY2hyb21lX3VybF9vdmVycmlkZXMuYm9va21hcmtzIHdhcyBub3QgYWRkZWQgdG8gdGhlIG1hbmlmZXN0JyxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG1hbmlmZXN0LmNocm9tZV91cmxfb3ZlcnJpZGVzID8/PSB7fTtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3I6IGJvb2ttYXJrcyBpcyB1bnR5cGVkIGluIHdlYmV4dGVuc2lvbi1wb2x5ZmlsbCwgYnV0IHN1cHBvcnRlZCBieSBjaHJvbWVcbiAgICAgIG1hbmlmZXN0LmNocm9tZV91cmxfb3ZlcnJpZGVzLmJvb2ttYXJrcyA9IGdldEVudHJ5cG9pbnRCdW5kbGVQYXRoKFxuICAgICAgICBib29rbWFya3MsXG4gICAgICAgIGNvbmZpZy5vdXREaXIsXG4gICAgICAgICcuaHRtbCcsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGlmIChoaXN0b3J5KSB7XG4gICAgaWYgKGNvbmZpZy5icm93c2VyID09PSAnZmlyZWZveCcpIHtcbiAgICAgIGNvbmZpZy5sb2dnZXIud2FybihcbiAgICAgICAgJ0Jvb2ttYXJrcyBhcmUgbm90IHN1cHBvcnRlZCBieSBGaXJlZm94LiBjaHJvbWVfdXJsX292ZXJyaWRlcy5oaXN0b3J5IHdhcyBub3QgYWRkZWQgdG8gdGhlIG1hbmlmZXN0JyxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG1hbmlmZXN0LmNocm9tZV91cmxfb3ZlcnJpZGVzID8/PSB7fTtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3I6IGhpc3RvcnkgaXMgdW50eXBlZCBpbiB3ZWJleHRlbnNpb24tcG9seWZpbGwsIGJ1dCBzdXBwb3J0ZWQgYnkgY2hyb21lXG4gICAgICBtYW5pZmVzdC5jaHJvbWVfdXJsX292ZXJyaWRlcy5oaXN0b3J5ID0gZ2V0RW50cnlwb2ludEJ1bmRsZVBhdGgoXG4gICAgICAgIGhpc3RvcnksXG4gICAgICAgIGNvbmZpZy5vdXREaXIsXG4gICAgICAgICcuaHRtbCcsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGlmIChuZXd0YWIpIHtcbiAgICBtYW5pZmVzdC5jaHJvbWVfdXJsX292ZXJyaWRlcyA/Pz0ge307XG4gICAgbWFuaWZlc3QuY2hyb21lX3VybF9vdmVycmlkZXMubmV3dGFiID0gZ2V0RW50cnlwb2ludEJ1bmRsZVBhdGgoXG4gICAgICBuZXd0YWIsXG4gICAgICBjb25maWcub3V0RGlyLFxuICAgICAgJy5odG1sJyxcbiAgICApO1xuICB9XG5cbiAgaWYgKHBvcHVwKSB7XG4gICAgY29uc3QgZGVmYXVsdF9wb3B1cCA9IGdldEVudHJ5cG9pbnRCdW5kbGVQYXRoKFxuICAgICAgcG9wdXAsXG4gICAgICBjb25maWcub3V0RGlyLFxuICAgICAgJy5odG1sJyxcbiAgICApO1xuICAgIGNvbnN0IG9wdGlvbnM6IE1hbmlmZXN0LkFjdGlvbk1hbmlmZXN0ID0ge1xuICAgICAgZGVmYXVsdF9pY29uOiBwb3B1cC5vcHRpb25zLmRlZmF1bHRJY29uLFxuICAgICAgZGVmYXVsdF90aXRsZTogcG9wdXAub3B0aW9ucy5kZWZhdWx0VGl0bGUsXG4gICAgfTtcbiAgICBpZiAobWFuaWZlc3QubWFuaWZlc3RfdmVyc2lvbiA9PT0gMykge1xuICAgICAgbWFuaWZlc3QuYWN0aW9uID0ge1xuICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICBkZWZhdWx0X3BvcHVwLFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgbWFuaWZlc3RbcG9wdXAub3B0aW9ucy5tdjJLZXkgPz8gJ2Jyb3dzZXJfYWN0aW9uJ10gPSB7XG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIGRlZmF1bHRfcG9wdXAsXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIGlmIChkZXZ0b29scykge1xuICAgIG1hbmlmZXN0LmRldnRvb2xzX3BhZ2UgPSBnZXRFbnRyeXBvaW50QnVuZGxlUGF0aChcbiAgICAgIGRldnRvb2xzLFxuICAgICAgY29uZmlnLm91dERpcixcbiAgICAgICcuaHRtbCcsXG4gICAgKTtcbiAgfVxuXG4gIGlmIChvcHRpb25zKSB7XG4gICAgY29uc3QgcGFnZSA9IGdldEVudHJ5cG9pbnRCdW5kbGVQYXRoKG9wdGlvbnMsIGNvbmZpZy5vdXREaXIsICcuaHRtbCcpO1xuICAgIG1hbmlmZXN0Lm9wdGlvbnNfdWkgPSB7XG4gICAgICBvcGVuX2luX3RhYjogb3B0aW9ucy5vcHRpb25zLm9wZW5JblRhYixcbiAgICAgIGJyb3dzZXJfc3R5bGU6XG4gICAgICAgIGNvbmZpZy5icm93c2VyID09PSAnZmlyZWZveCcgPyBvcHRpb25zLm9wdGlvbnMuYnJvd3NlclN0eWxlIDogdW5kZWZpbmVkLFxuICAgICAgY2hyb21lX3N0eWxlOlxuICAgICAgICBjb25maWcuYnJvd3NlciAhPT0gJ2ZpcmVmb3gnID8gb3B0aW9ucy5vcHRpb25zLmNocm9tZVN0eWxlIDogdW5kZWZpbmVkLFxuICAgICAgcGFnZSxcbiAgICB9O1xuICB9XG5cbiAgaWYgKHNhbmRib3hlcz8ubGVuZ3RoKSB7XG4gICAgaWYgKGNvbmZpZy5icm93c2VyID09PSAnZmlyZWZveCcpIHtcbiAgICAgIGNvbmZpZy5sb2dnZXIud2FybihcbiAgICAgICAgJ1NhbmRib3hlZCBwYWdlcyBub3Qgc3VwcG9ydGVkIGJ5IEZpcmVmb3guIHNhbmRib3gucGFnZXMgd2FzIG5vdCBhZGRlZCB0byB0aGUgbWFuaWZlc3QnLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogc2FuZGJveCBub3QgdHlwZWRcbiAgICAgIG1hbmlmZXN0LnNhbmRib3ggPSB7XG4gICAgICAgIHBhZ2VzOiBzYW5kYm94ZXMubWFwKChlbnRyeSkgPT5cbiAgICAgICAgICBnZXRFbnRyeXBvaW50QnVuZGxlUGF0aChlbnRyeSwgY29uZmlnLm91dERpciwgJy5odG1sJyksXG4gICAgICAgICksXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIGlmIChzaWRlcGFuZWxzPy5sZW5ndGgpIHtcbiAgICBjb25zdCBkZWZhdWx0U2lkZXBhbmVsID1cbiAgICAgIHNpZGVwYW5lbHMuZmluZCgoZW50cnkpID0+IGVudHJ5Lm5hbWUgPT09ICdzaWRlcGFuZWwnKSA/PyBzaWRlcGFuZWxzWzBdO1xuICAgIGNvbnN0IHBhZ2UgPSBnZXRFbnRyeXBvaW50QnVuZGxlUGF0aChcbiAgICAgIGRlZmF1bHRTaWRlcGFuZWwsXG4gICAgICBjb25maWcub3V0RGlyLFxuICAgICAgJy5odG1sJyxcbiAgICApO1xuXG4gICAgaWYgKGNvbmZpZy5icm93c2VyID09PSAnZmlyZWZveCcpIHtcbiAgICAgIG1hbmlmZXN0LnNpZGViYXJfYWN0aW9uID0ge1xuICAgICAgICAvLyBUT0RPOiBBZGQgb3B0aW9ucyB0byBzaWRlIHBhbmVsXG4gICAgICAgIC8vIC4uLmRlZmF1bHRTaWRlcGFuZWwub3B0aW9ucyxcbiAgICAgICAgZGVmYXVsdF9wYW5lbDogcGFnZSxcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmIChjb25maWcubWFuaWZlc3RWZXJzaW9uID09PSAzKSB7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yOiBVbnR5cGVkXG4gICAgICBtYW5pZmVzdC5zaWRlX3BhbmVsID0ge1xuICAgICAgICBkZWZhdWx0X3BhdGg6IHBhZ2UsXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25maWcubG9nZ2VyLndhcm4oXG4gICAgICAgICdTaWRlIHBhbmVsIG5vdCBzdXBwb3J0ZWQgYnkgQ2hyb21pdW0gdXNpbmcgTVYyLiBzaWRlX3BhbmVsLmRlZmF1bHRfcGF0aCB3YXMgbm90IGFkZGVkIHRvIHRoZSBtYW5pZmVzdCcsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGlmIChjb250ZW50U2NyaXB0cz8ubGVuZ3RoKSB7XG4gICAgLy8gRG9uJ3QgYWRkIGNvbnRlbnQgc2NyaXB0cyB0byB0aGUgbWFuaWZlc3QgaW4gZGV2IG1vZGUgZm9yIE1WMyAtIHRoZXkncmUgbWFuYWdlZCBhbmQgcmVsb2FkZWRcbiAgICAvLyBhdCBydW50aW1lXG4gICAgaWYgKGNvbmZpZy5jb21tYW5kID09PSAnc2VydmUnICYmIGNvbmZpZy5tYW5pZmVzdFZlcnNpb24gPT09IDMpIHtcbiAgICAgIGNvbnN0IGhvc3RQZXJtaXNzaW9ucyA9IG5ldyBTZXQ8c3RyaW5nPihtYW5pZmVzdC5ob3N0X3Blcm1pc3Npb25zID8/IFtdKTtcbiAgICAgIGNvbnRlbnRTY3JpcHRzLmZvckVhY2goKHNjcmlwdCkgPT4ge1xuICAgICAgICBzY3JpcHQub3B0aW9ucy5tYXRjaGVzLmZvckVhY2goKG1hdGNoUGF0dGVybikgPT4ge1xuICAgICAgICAgIGhvc3RQZXJtaXNzaW9ucy5hZGQobWF0Y2hQYXR0ZXJuKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIGhvc3RQZXJtaXNzaW9ucy5mb3JFYWNoKChwZXJtaXNzaW9uKSA9PlxuICAgICAgICBhZGRIb3N0UGVybWlzc2lvbihtYW5pZmVzdCwgcGVybWlzc2lvbiksXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBoYXNoVG9FbnRyeXBvaW50c01hcCA9IGNvbnRlbnRTY3JpcHRzLnJlZHVjZSgobWFwLCBzY3JpcHQpID0+IHtcbiAgICAgICAgY29uc3QgaGFzaCA9IGhhc2hDb250ZW50U2NyaXB0T3B0aW9ucyhzY3JpcHQub3B0aW9ucyk7XG4gICAgICAgIGlmIChtYXAuaGFzKGhhc2gpKSBtYXAuZ2V0KGhhc2gpPy5wdXNoKHNjcmlwdCk7XG4gICAgICAgIGVsc2UgbWFwLnNldChoYXNoLCBbc2NyaXB0XSk7XG4gICAgICAgIHJldHVybiBtYXA7XG4gICAgICB9LCBuZXcgTWFwPHN0cmluZywgQ29udGVudFNjcmlwdEVudHJ5cG9pbnRbXT4oKSk7XG5cbiAgICAgIGNvbnN0IG5ld0NvbnRlbnRTY3JpcHRzID0gQXJyYXkuZnJvbShoYXNoVG9FbnRyeXBvaW50c01hcC5lbnRyaWVzKCkpLm1hcChcbiAgICAgICAgKFssIHNjcmlwdHNdKSA9PiAoe1xuICAgICAgICAgIC4uLm1hcFd4dE9wdGlvbnNUb0NvbnRlbnRTY3JpcHQoc2NyaXB0c1swXS5vcHRpb25zKSxcbiAgICAgICAgICAvLyBUT09EOiBTb3J0aW5nIGNzcyBhbmQganMgYXJyYXlzIGhlcmUgc28gd2UgZ2V0IGNvbnNpc3RlbnQgdGVzdCByZXN1bHRzLi4uIGJ1dCB3ZVxuICAgICAgICAgIC8vIHNob3VsZG4ndCBoYXZlIHRvLiBXaGVyZSBpcyB0aGUgaW5jb25zaXN0ZW5jeSBjb21pbmcgZnJvbT9cbiAgICAgICAgICBjc3M6IGdldENvbnRlbnRTY3JpcHRDc3NGaWxlcyhzY3JpcHRzLCBidWlsZE91dHB1dCk/LnNvcnQoKSxcbiAgICAgICAgICBqczogc2NyaXB0c1xuICAgICAgICAgICAgLm1hcCgoZW50cnkpID0+XG4gICAgICAgICAgICAgIGdldEVudHJ5cG9pbnRCdW5kbGVQYXRoKGVudHJ5LCBjb25maWcub3V0RGlyLCAnLmpzJyksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc29ydCgpLFxuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgICBpZiAobmV3Q29udGVudFNjcmlwdHMubGVuZ3RoID49IDApIHtcbiAgICAgICAgbWFuaWZlc3QuY29udGVudF9zY3JpcHRzID8/PSBbXTtcbiAgICAgICAgbWFuaWZlc3QuY29udGVudF9zY3JpcHRzLnB1c2goLi4ubmV3Q29udGVudFNjcmlwdHMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBkaXNjb3Zlckljb25zKFxuICBidWlsZE91dHB1dDogT21pdDxCdWlsZE91dHB1dCwgJ21hbmlmZXN0Jz4sXG4pOiBNYW5pZmVzdC5XZWJFeHRlbnNpb25NYW5pZmVzdFsnaWNvbnMnXSB7XG4gIGNvbnN0IGljb25zOiBbc3RyaW5nLCBzdHJpbmddW10gPSBbXTtcbiAgLy8gcHJldHRpZXItaWdub3JlXG4gIC8vICNyZWdpb24gc25pcHBldFxuICBjb25zdCBpY29uUmVnZXggPSBbXG4gICAgL15pY29uLShbMC05XSspXFwuKHBuZ3xibXB8anBlZ3xqcGd8aWNvfGdpZikkLywgICAgICAgICAgICAgLy8gaWNvbi0xNi5wbmdcbiAgICAvXmljb24tKFswLTldKyl4WzAtOV0rXFwuKHBuZ3xibXB8anBlZ3xqcGd8aWNvfGdpZikkLywgICAgICAvLyBpY29uLTE2eDE2LnBuZ1xuICAgIC9eaWNvbkAoWzAtOV0rKXdcXC4ocG5nfGJtcHxqcGVnfGpwZ3xpY298Z2lmKSQvLCAgICAgICAgICAgIC8vIGljb25AMTZ3LnBuZ1xuICAgIC9eaWNvbkAoWzAtOV0rKWhcXC4ocG5nfGJtcHxqcGVnfGpwZ3xpY298Z2lmKSQvLCAgICAgICAgICAgIC8vIGljb25AMTZoLnBuZ1xuICAgIC9eaWNvbkAoWzAtOV0rKVxcLihwbmd8Ym1wfGpwZWd8anBnfGljb3xnaWYpJC8sICAgICAgICAgICAgIC8vIGljb25AMTYucG5nXG4gICAgL15pY29uW1xcL1xcXFxdKFswLTldKylcXC4ocG5nfGJtcHxqcGVnfGpwZ3xpY298Z2lmKSQvLCAgICAgICAgLy8gaWNvbi8xNi5wbmdcbiAgICAvXmljb25bXFwvXFxcXF0oWzAtOV0rKXhbMC05XStcXC4ocG5nfGJtcHxqcGVnfGpwZ3xpY298Z2lmKSQvLCAvLyBpY29uLzE2eDE2LnBuZ1xuICBdO1xuICAvLyAjZW5kcmVnaW9uIHNuaXBwZXRcblxuICBidWlsZE91dHB1dC5wdWJsaWNBc3NldHMuZm9yRWFjaCgoYXNzZXQpID0+IHtcbiAgICBsZXQgc2l6ZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGZvciAoY29uc3QgcmVnZXggb2YgaWNvblJlZ2V4KSB7XG4gICAgICBjb25zdCBtYXRjaCA9IGFzc2V0LmZpbGVOYW1lLm1hdGNoKHJlZ2V4KTtcbiAgICAgIGlmIChtYXRjaD8uWzFdICE9IG51bGwpIHtcbiAgICAgICAgc2l6ZSA9IG1hdGNoWzFdO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHNpemUgPT0gbnVsbCkgcmV0dXJuO1xuXG4gICAgaWNvbnMucHVzaChbc2l6ZSwgbm9ybWFsaXplUGF0aChhc3NldC5maWxlTmFtZSldKTtcbiAgfSk7XG5cbiAgcmV0dXJuIGljb25zLmxlbmd0aCA+IDAgPyBPYmplY3QuZnJvbUVudHJpZXMoaWNvbnMpIDogdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBhZGREZXZNb2RlQ3NwKFxuICBtYW5pZmVzdDogTWFuaWZlc3QuV2ViRXh0ZW5zaW9uTWFuaWZlc3QsXG4gIGNvbmZpZzogSW50ZXJuYWxDb25maWcsXG4pOiB2b2lkIHtcbiAgY29uc3QgcGVybWlzc2lvbiA9IGBodHRwOi8vJHtjb25maWcuc2VydmVyPy5ob3N0bmFtZSA/PyAnJ30vKmA7XG4gIGNvbnN0IGFsbG93ZWRDc3AgPSBjb25maWcuc2VydmVyPy5vcmlnaW4gPz8gJ2h0dHA6Ly9sb2NhbGhvc3Q6Kic7XG5cbiAgaWYgKG1hbmlmZXN0Lm1hbmlmZXN0X3ZlcnNpb24gPT09IDMpIHtcbiAgICBhZGRIb3N0UGVybWlzc2lvbihtYW5pZmVzdCwgcGVybWlzc2lvbik7XG4gIH0gZWxzZSB7XG4gICAgYWRkUGVybWlzc2lvbihtYW5pZmVzdCwgcGVybWlzc2lvbik7XG4gIH1cblxuICBjb25zdCBjc3AgPSBuZXcgQ29udGVudFNlY3VyaXR5UG9saWN5KFxuICAgIG1hbmlmZXN0Lm1hbmlmZXN0X3ZlcnNpb24gPT09IDNcbiAgICAgID8gLy8gQHRzLWV4cGVjdC1lcnJvcjogZXh0ZW5zaW9uX3BhZ2VzIGlzIG5vdCB0eXBlZFxuICAgICAgICBtYW5pZmVzdC5jb250ZW50X3NlY3VyaXR5X3BvbGljeT8uZXh0ZW5zaW9uX3BhZ2VzID8/XG4gICAgICAgIFwic2NyaXB0LXNyYyAnc2VsZicgJ3dhc20tdW5zYWZlLWV2YWwnOyBvYmplY3Qtc3JjICdzZWxmJztcIiAvLyBkZWZhdWx0IENTUCBmb3IgTVYzXG4gICAgICA6IG1hbmlmZXN0LmNvbnRlbnRfc2VjdXJpdHlfcG9saWN5ID8/XG4gICAgICAgIFwic2NyaXB0LXNyYyAnc2VsZic7IG9iamVjdC1zcmMgJ3NlbGYnO1wiLCAvLyBkZWZhdWx0IENTUCBmb3IgTVYyXG4gICk7XG5cbiAgaWYgKGNvbmZpZy5zZXJ2ZXIpIGNzcC5hZGQoJ3NjcmlwdC1zcmMnLCBhbGxvd2VkQ3NwKTtcblxuICBpZiAobWFuaWZlc3QubWFuaWZlc3RfdmVyc2lvbiA9PT0gMykge1xuICAgIG1hbmlmZXN0LmNvbnRlbnRfc2VjdXJpdHlfcG9saWN5ID8/PSB7fTtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yOiBleHRlbnNpb25fcGFnZXMgaXMgbm90IHR5cGVkXG4gICAgbWFuaWZlc3QuY29udGVudF9zZWN1cml0eV9wb2xpY3kuZXh0ZW5zaW9uX3BhZ2VzID0gY3NwLnRvU3RyaW5nKCk7XG4gIH0gZWxzZSB7XG4gICAgbWFuaWZlc3QuY29udGVudF9zZWN1cml0eV9wb2xpY3kgPSBjc3AudG9TdHJpbmcoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhZGREZXZNb2RlUGVybWlzc2lvbnMoXG4gIG1hbmlmZXN0OiBNYW5pZmVzdC5XZWJFeHRlbnNpb25NYW5pZmVzdCxcbiAgY29uZmlnOiBJbnRlcm5hbENvbmZpZyxcbikge1xuICAvLyBGb3IgcmVsb2FkaW5nIHRoZSBwYWdlXG4gIGFkZFBlcm1pc3Npb24obWFuaWZlc3QsICd0YWJzJyk7XG5cbiAgLy8gRm9yIHJlZ2lzdGVyaW5nIGNvbnRlbnQgc2NyaXB0c1xuICBpZiAoY29uZmlnLm1hbmlmZXN0VmVyc2lvbiA9PT0gMykgYWRkUGVybWlzc2lvbihtYW5pZmVzdCwgJ3NjcmlwdGluZycpO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGJ1bmRsZSBwYXRocyB0byBDU1MgZmlsZXMgYXNzb2NpYXRlZCB3aXRoIGEgbGlzdCBvZiBjb250ZW50IHNjcmlwdHMsIG9yIHVuZGVmaW5lZCBpZlxuICogdGhlcmUgaXMgbm8gYXNzb2NpYXRlZCBDU1MuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb250ZW50U2NyaXB0Q3NzRmlsZXMoXG4gIGNvbnRlbnRTY3JpcHRzOiBDb250ZW50U2NyaXB0RW50cnlwb2ludFtdLFxuICBidWlsZE91dHB1dDogT21pdDxCdWlsZE91dHB1dCwgJ21hbmlmZXN0Jz4sXG4pOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGNzczogc3RyaW5nW10gPSBbXTtcblxuICBjb25zdCBhbGxDaHVua3MgPSBidWlsZE91dHB1dC5zdGVwcy5mbGF0TWFwKChzdGVwKSA9PiBzdGVwLmNodW5rcyk7XG5cbiAgY29udGVudFNjcmlwdHMuZm9yRWFjaCgoc2NyaXB0KSA9PiB7XG4gICAgLy8gVE9ETzogb3B0aW1pemUgYW5kIHJlbW92ZSBsb29wIHdpdGggYSBtYXBcbiAgICBjb25zdCByZWxhdGVkQ3NzID0gYWxsQ2h1bmtzLmZpbmQoXG4gICAgICAoY2h1bmspID0+IGNodW5rLmZpbGVOYW1lID09PSBgYXNzZXRzLyR7c2NyaXB0Lm5hbWV9LmNzc2AsXG4gICAgKTtcbiAgICBpZiAocmVsYXRlZENzcykgY3NzLnB1c2gocmVsYXRlZENzcy5maWxlTmFtZSk7XG4gIH0pO1xuXG4gIGlmIChjc3MubGVuZ3RoID4gMCkgcmV0dXJuIGNzcztcbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gYWRkUGVybWlzc2lvbihcbiAgbWFuaWZlc3Q6IE1hbmlmZXN0LldlYkV4dGVuc2lvbk1hbmlmZXN0LFxuICBwZXJtaXNzaW9uOiBzdHJpbmcsXG4pOiB2b2lkIHtcbiAgbWFuaWZlc3QucGVybWlzc2lvbnMgPz89IFtdO1xuICBpZiAobWFuaWZlc3QucGVybWlzc2lvbnMuaW5jbHVkZXMocGVybWlzc2lvbikpIHJldHVybjtcbiAgbWFuaWZlc3QucGVybWlzc2lvbnMucHVzaChwZXJtaXNzaW9uKTtcbn1cblxuZnVuY3Rpb24gYWRkSG9zdFBlcm1pc3Npb24oXG4gIG1hbmlmZXN0OiBNYW5pZmVzdC5XZWJFeHRlbnNpb25NYW5pZmVzdCxcbiAgaG9zdFBlcm1pc3Npb246IHN0cmluZyxcbik6IHZvaWQge1xuICBtYW5pZmVzdC5ob3N0X3Blcm1pc3Npb25zID8/PSBbXTtcbiAgaWYgKG1hbmlmZXN0Lmhvc3RfcGVybWlzc2lvbnMuaW5jbHVkZXMoaG9zdFBlcm1pc3Npb24pKSByZXR1cm47XG4gIG1hbmlmZXN0Lmhvc3RfcGVybWlzc2lvbnMucHVzaChob3N0UGVybWlzc2lvbik7XG59XG4iLCAiLyoqXG4gKiBEaXJlY3RpdmUgbmFtZXMgdGhhdCBtYWtlIHVwIENTUHMuIFRoZXJlIGFyZSBtb3JlLCB0aGlzIGlzIGFsbCBJIG5lZWQgZm9yIHRoZSBwbHVnaW4uXG4gKi9cbmV4cG9ydCB0eXBlIENzcERpcmVjdGl2ZSA9ICdkZWZhdWx0LXNyYycgfCAnc2NyaXB0LXNyYycgfCAnb2JqZWN0LXNyYyc7XG5cbmV4cG9ydCBjbGFzcyBDb250ZW50U2VjdXJpdHlQb2xpY3kge1xuICBwcml2YXRlIHN0YXRpYyBESVJFQ1RJVkVfT1JERVI6IFJlY29yZDxzdHJpbmcsIG51bWJlciB8IHVuZGVmaW5lZD4gPSB7XG4gICAgJ2RlZmF1bHQtc3JjJzogMCxcbiAgICAnc2NyaXB0LXNyYyc6IDEsXG4gICAgJ29iamVjdC1zcmMnOiAyLFxuICB9O1xuXG4gIGRhdGE6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPjtcblxuICBjb25zdHJ1Y3Rvcihjc3A/OiBzdHJpbmcpIHtcbiAgICBpZiAoY3NwKSB7XG4gICAgICBjb25zdCBzZWN0aW9ucyA9IGNzcC5zcGxpdCgnOycpLm1hcCgoc2VjdGlvbikgPT4gc2VjdGlvbi50cmltKCkpO1xuICAgICAgdGhpcy5kYXRhID0gc2VjdGlvbnMucmVkdWNlPFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPj4oKGRhdGEsIHNlY3Rpb24pID0+IHtcbiAgICAgICAgY29uc3QgW2tleSwgLi4udmFsdWVzXSA9IHNlY3Rpb24uc3BsaXQoJyAnKS5tYXAoKGl0ZW0pID0+IGl0ZW0udHJpbSgpKTtcbiAgICAgICAgaWYgKGtleSkgZGF0YVtrZXldID0gdmFsdWVzO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgIH0sIHt9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kYXRhID0ge307XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEVuc3VyZSBhIHNldCBvZiB2YWx1ZXMgYXJlIGxpc3RlZCB1bmRlciBhIGRpcmVjdGl2ZS5cbiAgICovXG4gIGFkZChkaXJlY3RpdmU6IENzcERpcmVjdGl2ZSwgLi4ubmV3VmFsdWVzOiBzdHJpbmdbXSk6IENvbnRlbnRTZWN1cml0eVBvbGljeSB7XG4gICAgY29uc3QgdmFsdWVzID0gdGhpcy5kYXRhW2RpcmVjdGl2ZV0gPz8gW107XG4gICAgbmV3VmFsdWVzLmZvckVhY2goKG5ld1ZhbHVlKSA9PiB7XG4gICAgICBpZiAoIXZhbHVlcy5pbmNsdWRlcyhuZXdWYWx1ZSkpIHZhbHVlcy5wdXNoKG5ld1ZhbHVlKTtcbiAgICB9KTtcbiAgICB0aGlzLmRhdGFbZGlyZWN0aXZlXSA9IHZhbHVlcztcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgY29uc3QgZGlyZWN0aXZlcyA9IE9iamVjdC5lbnRyaWVzKHRoaXMuZGF0YSkuc29ydCgoW2xdLCBbcl0pID0+IHtcbiAgICAgIGNvbnN0IGxvID0gQ29udGVudFNlY3VyaXR5UG9saWN5LkRJUkVDVElWRV9PUkRFUltsXSA/PyAyO1xuICAgICAgY29uc3Qgcm8gPSBDb250ZW50U2VjdXJpdHlQb2xpY3kuRElSRUNUSVZFX09SREVSW3JdID8/IDI7XG4gICAgICByZXR1cm4gbG8gLSBybztcbiAgICB9KTtcbiAgICByZXR1cm4gZGlyZWN0aXZlcy5tYXAoKGVudHJ5KSA9PiBlbnRyeS5mbGF0KCkuam9pbignICcpKS5qb2luKCc7ICcpICsgJzsnO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgTWFuaWZlc3QgfSBmcm9tICd3ZWJleHRlbnNpb24tcG9seWZpbGwnO1xuaW1wb3J0IHsgQ29udGVudFNjcmlwdEVudHJ5cG9pbnQgfSBmcm9tICcuLi90eXBlcyc7XG5cbi8qKlxuICogUmV0dXJucyBhIHVuaXF1ZSBhbmQgY29uc2lzdGVudCBzdHJpbmcgaGFzaCBiYXNlZCBvbiBhIGNvbnRlbnQgc2NyaXB0cyBvcHRpb25zLlxuICpcbiAqIEl0IGlzIGFibGUgdG8gcmVjb2duaXplIGRlZmF1bHQgdmFsdWVzLFxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFzaENvbnRlbnRTY3JpcHRPcHRpb25zKFxuICBvcHRpb25zOiBDb250ZW50U2NyaXB0RW50cnlwb2ludFsnb3B0aW9ucyddLFxuKTogc3RyaW5nIHtcbiAgY29uc3Qgd2l0aERlZmF1bHRzOiBDb250ZW50U2NyaXB0RW50cnlwb2ludFsnb3B0aW9ucyddID0ge1xuICAgIGV4Y2x1ZGVHbG9iczogW10sXG4gICAgZXhjbHVkZU1hdGNoZXM6IFtdLFxuICAgIGluY2x1ZGVHbG9iczogW10sXG4gICAgbWF0Y2hBYm91dEJsYW5rOiBmYWxzZSxcbiAgICBtYXRjaE9yaWdpbkFzRmFsbGJhY2s6IGZhbHNlLFxuICAgIHJ1bkF0OiAnZG9jdW1lbnRfaWRsZScsXG4gICAgYWxsRnJhbWVzOiBmYWxzZSxcbiAgICB3b3JsZDogJ0lTT0xBVEVEJyxcbiAgICAvLyBUT0RPOiBzdHJpcCB1bmRlZmluZWQgZmllbGRzIGZyb20gb3B0aW9ucyBvYmplY3QgdG8gaW1wcm92ZSBjb250ZW50IHNjcmlwdCBncm91cGluZy5cbiAgICAuLi5vcHRpb25zLFxuICB9O1xuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoXG4gICAgT2JqZWN0LmVudHJpZXMod2l0aERlZmF1bHRzKVxuICAgICAgLy8gU29ydCBhbnkgYXJyYXlzIHNvIHRoZWlyIHZhbHVlcyBhcmUgY29uc2lzdGVudFxuICAgICAgLm1hcDxbc3RyaW5nLCB1bmtub3duXT4oKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHJldHVybiBba2V5LCB2YWx1ZS5zb3J0KCldO1xuICAgICAgICBlbHNlIHJldHVybiBba2V5LCB2YWx1ZV07XG4gICAgICB9KVxuICAgICAgLy8gU29ydCBhbGwgdGhlIGZpZWxkcyBhbHBoYWJldGljYWxseVxuICAgICAgLnNvcnQoKGwsIHIpID0+IGxbMF0ubG9jYWxlQ29tcGFyZShyWzBdKSksXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXBXeHRPcHRpb25zVG9Db250ZW50U2NyaXB0KFxuICBvcHRpb25zOiBDb250ZW50U2NyaXB0RW50cnlwb2ludFsnb3B0aW9ucyddLFxuKTogT21pdDxNYW5pZmVzdC5Db250ZW50U2NyaXB0LCAnanMnIHwgJ2Nzcyc+IHtcbiAgcmV0dXJuIHtcbiAgICBtYXRjaGVzOiBvcHRpb25zLm1hdGNoZXMsXG4gICAgYWxsX2ZyYW1lczogb3B0aW9ucy5hbGxGcmFtZXMsXG4gICAgbWF0Y2hfYWJvdXRfYmxhbms6IG9wdGlvbnMubWF0Y2hBYm91dEJsYW5rLFxuICAgIGV4Y2x1ZGVfZ2xvYnM6IG9wdGlvbnMuZXhjbHVkZUdsb2JzLFxuICAgIGV4Y2x1ZGVfbWF0Y2hlczogb3B0aW9ucy5leGNsdWRlTWF0Y2hlcyxcbiAgICBpbmNsdWRlX2dsb2JzOiBvcHRpb25zLmluY2x1ZGVHbG9icyxcbiAgICBydW5fYXQ6IG9wdGlvbnMucnVuQXQsXG5cbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yOiB1bnR5cGVkIGNocm9tZSBvcHRpb25zXG4gICAgbWF0Y2hfb3JpZ2luX2FzX2ZhbGxiYWNrOiBvcHRpb25zLm1hdGNoT3JpZ2luQXNGYWxsYmFjayxcbiAgICB3b3JsZDogb3B0aW9ucy53b3JsZCxcbiAgfTtcbn1cbiIsICJpbXBvcnQgeyByZXNvbHZlIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IEludGVybmFsQ29uZmlnIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJztcblxuLyoqXG4gKiBSZWFkIHRoZSBwcm9qZWN0J3MgcGFja2FnZS5qc29uLlxuICpcbiAqIFRPRE86IGxvb2sgaW4gcm9vdCBhbmQgdXAgZGlyZWN0b3JpZXMgdW50aWwgaXQncyBmb3VuZFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0UGFja2FnZUpzb24oXG4gIGNvbmZpZzogSW50ZXJuYWxDb25maWcsXG4pOiBQcm9taXNlPFBhcnRpYWw8UmVjb3JkPHN0cmluZywgYW55Pj4gfCB1bmRlZmluZWQ+IHtcbiAgY29uc3QgZmlsZSA9IHJlc29sdmUoY29uZmlnLnJvb3QsICdwYWNrYWdlLmpzb24nKTtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgZnMucmVhZEpzb24oZmlsZSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbmZpZy5sb2dnZXIuZGVidWcoXG4gICAgICBgRmFpbGVkIHRvIHJlYWQgcGFja2FnZS5qc29uIGF0OiAke2ZpbGV9LiBSZXR1cm5pbmcgdW5kZWZpbmVkLmAsXG4gICAgKTtcbiAgICByZXR1cm4ge307XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBNYW5pZmVzdCB9IGZyb20gJ3dlYmV4dGVuc2lvbi1wb2x5ZmlsbCc7XG5pbXBvcnQgeyBCdWlsZE91dHB1dCB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgYnVpbGRFbnRyeXBvaW50cyB9IGZyb20gJy4vYnVpbGQvYnVpbGRFbnRyeXBvaW50cyc7XG5pbXBvcnQgeyBmaW5kRW50cnlwb2ludHMgfSBmcm9tICcuL2J1aWxkL2ZpbmRFbnRyeXBvaW50cyc7XG5pbXBvcnQgeyBnZW5lcmF0ZVR5cGVzRGlyIH0gZnJvbSAnLi9idWlsZC9nZW5lcmF0ZVR5cGVzRGlyJztcbmltcG9ydCB7IEludGVybmFsQ29uZmlnLCBFbnRyeXBvaW50R3JvdXAgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IGdlbmVyYXRlTWFpbmZlc3QsIHdyaXRlTWFuaWZlc3QgfSBmcm9tICcuL3V0aWxzL21hbmlmZXN0JztcbmltcG9ydCBwYyBmcm9tICdwaWNvY29sb3JzJztcbmltcG9ydCAqIGFzIHZpdGUgZnJvbSAndml0ZSc7XG5pbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnO1xuaW1wb3J0IHsgZ3JvdXBFbnRyeXBvaW50cyB9IGZyb20gJy4vdXRpbHMvZ3JvdXBFbnRyeXBvaW50cyc7XG5pbXBvcnQgeyBmb3JtYXREdXJhdGlvbiB9IGZyb20gJy4vdXRpbHMvZm9ybWF0RHVyYXRpb24nO1xuaW1wb3J0IHsgcHJpbnRCdWlsZFN1bW1hcnkgfSBmcm9tICcuL2xvZy9wcmludEJ1aWxkU3VtbWFyeSc7XG5cbi8qKlxuICogQnVpbGRzIHRoZSBleHRlbnNpb24gYmFzZWQgb24gYW4gaW50ZXJuYWwgY29uZmlnLlxuICpcbiAqIFRoaXMgZnVuY3Rpb246XG4gKiAxLiBDbGVhbnMgdGhlIG91dHB1dCBkaXJlY3RvcnlcbiAqIDIuIEV4ZWN1dGVzIHRoZSByZWJ1aWxkIGZ1bmN0aW9uIHdpdGggYSBibGFuayBwcmV2aW91cyBvdXRwdXQgc28gZXZlcnl0aGluZyBpcyBidWlsdCAoc2VlXG4gKiAgICBgcmVidWlsZGAgZm9yIG1vcmUgZGV0YWlscylcbiAqIDMuIFByaW50cyB0aGUgc3VtbWFyeVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGRJbnRlcm5hbChcbiAgY29uZmlnOiBJbnRlcm5hbENvbmZpZyxcbik6IFByb21pc2U8QnVpbGRPdXRwdXQ+IHtcbiAgY29uc3QgdmVyYiA9IGNvbmZpZy5jb21tYW5kID09PSAnc2VydmUnID8gJ1ByZS1yZW5kZXJpbmcnIDogJ0J1aWxkaW5nJztcbiAgY29uc3QgdGFyZ2V0ID0gYCR7Y29uZmlnLmJyb3dzZXJ9LW12JHtjb25maWcubWFuaWZlc3RWZXJzaW9ufWA7XG4gIGNvbmZpZy5sb2dnZXIuaW5mbyhcbiAgICBgJHt2ZXJifSAke3BjLmN5YW4odGFyZ2V0KX0gZm9yICR7cGMuY3lhbihjb25maWcubW9kZSl9IHdpdGggJHtwYy5ncmVlbihcbiAgICAgIGBWaXRlICR7dml0ZS52ZXJzaW9ufWAsXG4gICAgKX1gLFxuICApO1xuICBjb25zdCBzdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuXG4gIC8vIENsZWFudXBcbiAgYXdhaXQgZnMucm0oY29uZmlnLm91dERpciwgeyByZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlIH0pO1xuICBhd2FpdCBmcy5lbnN1cmVEaXIoY29uZmlnLm91dERpcik7XG5cbiAgY29uc3QgZW50cnlwb2ludHMgPSBhd2FpdCBmaW5kRW50cnlwb2ludHMoY29uZmlnKTtcbiAgY29uZmlnLmxvZ2dlci5kZWJ1ZygnRGV0ZWN0ZWQgZW50cnlwb2ludHM6JywgZW50cnlwb2ludHMpO1xuICBjb25zdCBncm91cHMgPSBncm91cEVudHJ5cG9pbnRzKGVudHJ5cG9pbnRzKTtcbiAgY29uc3QgeyBvdXRwdXQgfSA9IGF3YWl0IHJlYnVpbGQoY29uZmlnLCBncm91cHMsIHVuZGVmaW5lZCk7XG5cbiAgLy8gUG9zdC1idWlsZFxuICBhd2FpdCBwcmludEJ1aWxkU3VtbWFyeShcbiAgICBjb25maWcubG9nZ2VyLnN1Y2Nlc3MsXG4gICAgYEJ1aWx0IGV4dGVuc2lvbiBpbiAke2Zvcm1hdER1cmF0aW9uKERhdGUubm93KCkgLSBzdGFydFRpbWUpfWAsXG4gICAgb3V0cHV0LFxuICAgIGNvbmZpZyxcbiAgKTtcblxuICByZXR1cm4gb3V0cHV0O1xufVxuXG4vKipcbiAqIEdpdmVuIGEgY29uZmlndXJhdGlvbiwgbGlzdCBvZiBlbnRyeXBvaW50cywgYW5kIGFuIGV4aXN0aW5nLCBwYXJ0aWFsIG91dHB1dCwgYnVpbGQgdGhlXG4gKiBlbnRyeXBvaW50cyBhbmQgbWVyZ2UgdGhlIG5ldyBvdXRwdXQgd2l0aCB0aGUgZXhpc3Rpbmcgb3V0cHV0LlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gd2lsbDpcbiAqIDEuIEdlbmVyYXRlIHRoZSAud3h0IGRpcmVjdG9yeSdzIHR5cGVzXG4gKiAyLiBCdWlsZCB0aGUgYGVudHJ5cG9pbnRHcm91cHNgIChhbmQgY29waWVzIHB1YmxpYyBmaWxlcylcbiAqIDMuIEdlbmVyYXRlIHRoZSBsYXRlc3QgbWFuaWZlc3QgZm9yIGFsbCBlbnRyeXBvaW50c1xuICogNC4gV3JpdGUgdGhlIG5ldyBtYW5pZmVzdCB0byB0aGUgZmlsZSBzeXN0ZW1cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYnVpbGQoXG4gIGNvbmZpZzogSW50ZXJuYWxDb25maWcsXG4gIGVudHJ5cG9pbnRHcm91cHM6IEVudHJ5cG9pbnRHcm91cFtdLFxuICBleGlzdGluZ091dHB1dDogT21pdDxCdWlsZE91dHB1dCwgJ21hbmlmZXN0Jz4gPSB7XG4gICAgc3RlcHM6IFtdLFxuICAgIHB1YmxpY0Fzc2V0czogW10sXG4gIH0sXG4pOiBQcm9taXNlPHsgb3V0cHV0OiBCdWlsZE91dHB1dDsgbWFuaWZlc3Q6IE1hbmlmZXN0LldlYkV4dGVuc2lvbk1hbmlmZXN0IH0+IHtcbiAgLy8gVXBkYXRlIHR5cGVzIGRpcmVjdG9yeSB3aXRoIG5ldyBmaWxlcyBhbmQgdHlwZXNcbiAgY29uc3QgYWxsRW50cnlwb2ludHMgPSBhd2FpdCBmaW5kRW50cnlwb2ludHMoY29uZmlnKTtcbiAgYXdhaXQgZ2VuZXJhdGVUeXBlc0RpcihhbGxFbnRyeXBvaW50cywgY29uZmlnKS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgY29uZmlnLmxvZ2dlci53YXJuKCdGYWlsZWQgdG8gdXBkYXRlIC53eHQgZGlyZWN0b3J5OicsIGVycik7XG4gICAgLy8gVGhyb3cgdGhlIGVycm9yIGlmIGRvaW5nIGEgcmVndWxhciBidWlsZCwgZG9uJ3QgZm9yIGRldiBtb2RlLlxuICAgIGlmIChjb25maWcuY29tbWFuZCA9PT0gJ2J1aWxkJykgdGhyb3cgZXJyO1xuICB9KTtcblxuICAvLyBCdWlsZCBhbmQgbWVyZ2UgdGhlIG91dHB1dHNcbiAgY29uc3QgbmV3T3V0cHV0ID0gYXdhaXQgYnVpbGRFbnRyeXBvaW50cyhlbnRyeXBvaW50R3JvdXBzLCBjb25maWcpO1xuICBjb25zdCBtZXJnZWRPdXRwdXQ6IE9taXQ8QnVpbGRPdXRwdXQsICdtYW5pZmVzdCc+ID0ge1xuICAgIHN0ZXBzOiBbLi4uZXhpc3RpbmdPdXRwdXQuc3RlcHMsIC4uLm5ld091dHB1dC5zdGVwc10sXG4gICAgcHVibGljQXNzZXRzOiBbLi4uZXhpc3RpbmdPdXRwdXQucHVibGljQXNzZXRzLCAuLi5uZXdPdXRwdXQucHVibGljQXNzZXRzXSxcbiAgfTtcblxuICBjb25zdCBuZXdNYW5pZmVzdCA9IGF3YWl0IGdlbmVyYXRlTWFpbmZlc3QoXG4gICAgYWxsRW50cnlwb2ludHMsXG4gICAgbWVyZ2VkT3V0cHV0LFxuICAgIGNvbmZpZyxcbiAgKTtcbiAgY29uc3QgZmluYWxPdXRwdXQ6IEJ1aWxkT3V0cHV0ID0ge1xuICAgIG1hbmlmZXN0OiBuZXdNYW5pZmVzdCxcbiAgICAuLi5uZXdPdXRwdXQsXG4gIH07XG5cbiAgLy8gV3JpdGUgbWFuaWZlc3RcbiAgYXdhaXQgd3JpdGVNYW5pZmVzdChuZXdNYW5pZmVzdCwgZmluYWxPdXRwdXQsIGNvbmZpZyk7XG5cbiAgcmV0dXJuIHtcbiAgICBvdXRwdXQ6IHtcbiAgICAgIG1hbmlmZXN0OiBuZXdNYW5pZmVzdCxcbiAgICAgIHN0ZXBzOiBbLi4uZXhpc3RpbmdPdXRwdXQuc3RlcHMsIC4uLmZpbmFsT3V0cHV0LnN0ZXBzXSxcbiAgICAgIHB1YmxpY0Fzc2V0czogW1xuICAgICAgICAuLi5leGlzdGluZ091dHB1dC5wdWJsaWNBc3NldHMsXG4gICAgICAgIC4uLmZpbmFsT3V0cHV0LnB1YmxpY0Fzc2V0cyxcbiAgICAgIF0sXG4gICAgfSxcbiAgICBtYW5pZmVzdDogbmV3TWFuaWZlc3QsXG4gIH07XG59XG4iLCAiaW1wb3J0IHsgRW50cnlwb2ludCB9IGZyb20gJy4uLy4uJztcbmltcG9ydCB7IEVudHJ5cG9pbnRHcm91cCB9IGZyb20gJy4uL3R5cGVzJztcblxuLyoqXG4gKiBFbnRyeXBvaW50cyBjYW4gYmUgYnVpbGQgaW4gZ3JvdXBzLiBIVE1MIHBhZ2VzIGNhbiBhbGwgYmUgYnVpbHQgdG9nZXRoZXIgaW4gYSBzaW5nbGUgc3RlcCwgd2hpbGVcbiAqIGNvbnRlbnQgc2NyaXB0cyBtdXN0IGJlIGJ1aWxkIGluZGl2aWR1YWxseS5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGVudHJ5cG9pbnRzIHB1dCBpbnRvIHRoZXNlIHR5cGVzIG9mIGdyb3Vwcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyb3VwRW50cnlwb2ludHMoZW50cnlwb2ludHM6IEVudHJ5cG9pbnRbXSk6IEVudHJ5cG9pbnRHcm91cFtdIHtcbiAgY29uc3QgZ3JvdXBJbmRleE1hcDogUGFydGlhbDxSZWNvcmQ8R3JvdXAsIG51bWJlcj4+ID0ge307XG4gIGNvbnN0IGdyb3VwczogRW50cnlwb2ludEdyb3VwW10gPSBbXTtcblxuICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJ5cG9pbnRzKSB7XG4gICAgY29uc3QgZ3JvdXAgPSBFTlRSWV9UWVBFX1RPX0dST1VQX01BUFtlbnRyeS50eXBlXTtcbiAgICBpZiAoZ3JvdXAgPT09ICduby1ncm91cCcpIHtcbiAgICAgIGdyb3Vwcy5wdXNoKGVudHJ5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IGdyb3VwSW5kZXggPSBncm91cEluZGV4TWFwW2dyb3VwXTtcbiAgICAgIGlmIChncm91cEluZGV4ID09IG51bGwpIHtcbiAgICAgICAgZ3JvdXBJbmRleCA9IGdyb3Vwcy5wdXNoKFtdKSAtIDE7XG4gICAgICAgIGdyb3VwSW5kZXhNYXBbZ3JvdXBdID0gZ3JvdXBJbmRleDtcbiAgICAgIH1cbiAgICAgIChncm91cHNbZ3JvdXBJbmRleF0gYXMgRW50cnlwb2ludFtdKS5wdXNoKGVudHJ5KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZ3JvdXBzO1xufVxuXG5jb25zdCBFTlRSWV9UWVBFX1RPX0dST1VQX01BUDogUmVjb3JkPEVudHJ5cG9pbnRbJ3R5cGUnXSwgR3JvdXA+ID0ge1xuICBzYW5kYm94OiAnc2FuZGJveC1wYWdlJyxcblxuICBwb3B1cDogJ2V4dGVuc2lvbi1wYWdlJyxcbiAgbmV3dGFiOiAnZXh0ZW5zaW9uLXBhZ2UnLFxuICBoaXN0b3J5OiAnZXh0ZW5zaW9uLXBhZ2UnLFxuICBvcHRpb25zOiAnZXh0ZW5zaW9uLXBhZ2UnLFxuICBkZXZ0b29sczogJ2V4dGVuc2lvbi1wYWdlJyxcbiAgYm9va21hcmtzOiAnZXh0ZW5zaW9uLXBhZ2UnLFxuICBzaWRlcGFuZWw6ICdleHRlbnNpb24tcGFnZScsXG4gICd1bmxpc3RlZC1wYWdlJzogJ2V4dGVuc2lvbi1wYWdlJyxcblxuICBiYWNrZ3JvdW5kOiAnbm8tZ3JvdXAnLFxuICAnY29udGVudC1zY3JpcHQnOiAnbm8tZ3JvdXAnLFxuICAndW5saXN0ZWQtc2NyaXB0JzogJ25vLWdyb3VwJyxcbiAgJ3VubGlzdGVkLXN0eWxlJzogJ25vLWdyb3VwJyxcbiAgJ2NvbnRlbnQtc2NyaXB0LXN0eWxlJzogJ25vLWdyb3VwJyxcbn07XG5cbnR5cGUgR3JvdXAgPSAnZXh0ZW5zaW9uLXBhZ2UnIHwgJ3NhbmRib3gtcGFnZScgfCAnbm8tZ3JvdXAnO1xuIiwgImV4cG9ydCBmdW5jdGlvbiBmb3JtYXREdXJhdGlvbihkdXJhdGlvbjogbnVtYmVyKTogc3RyaW5nIHtcbiAgaWYgKGR1cmF0aW9uIDwgMWUzKSByZXR1cm4gYCR7ZHVyYXRpb259IG1zYDtcbiAgaWYgKGR1cmF0aW9uIDwgMTBlMykgcmV0dXJuIGAkeyhkdXJhdGlvbiAvIDFlMykudG9GaXhlZCgzKX0gc2A7XG4gIGlmIChkdXJhdGlvbiA8IDYwZTMpIHJldHVybiBgJHsoZHVyYXRpb24gLyAxZTMpLnRvRml4ZWQoMSl9IHNgO1xuICByZXR1cm4gYCR7KGR1cmF0aW9uIC8gMWUzKS50b0ZpeGVkKDApfSBzYDtcbn1cbiIsICJpbXBvcnQgeyByZXNvbHZlIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBCdWlsZE91dHB1dCwgSW50ZXJuYWxDb25maWcgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBwcmludEZpbGVMaXN0IH0gZnJvbSAnLi9wcmludEZpbGVMaXN0JztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByaW50QnVpbGRTdW1tYXJ5KFxuICBsb2c6ICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZCxcbiAgaGVhZGVyOiBzdHJpbmcsXG4gIG91dHB1dDogQnVpbGRPdXRwdXQsXG4gIGNvbmZpZzogSW50ZXJuYWxDb25maWcsXG4pIHtcbiAgY29uc3QgY2h1bmtzID0gW1xuICAgIC4uLm91dHB1dC5zdGVwcy5mbGF0TWFwKChzdGVwKSA9PiBzdGVwLmNodW5rcyksXG4gICAgLi4ub3V0cHV0LnB1YmxpY0Fzc2V0cyxcbiAgXS5zb3J0KChsLCByKSA9PiB7XG4gICAgY29uc3QgbFdlaWdodCA9IGdldENodW5rU29ydFdlaWdodChsLmZpbGVOYW1lKTtcbiAgICBjb25zdCByV2VpZ2h0ID0gZ2V0Q2h1bmtTb3J0V2VpZ2h0KHIuZmlsZU5hbWUpO1xuICAgIGNvbnN0IGRpZmYgPSBsV2VpZ2h0IC0gcldlaWdodDtcbiAgICBpZiAoZGlmZiAhPT0gMCkgcmV0dXJuIGRpZmY7XG4gICAgcmV0dXJuIGwuZmlsZU5hbWUubG9jYWxlQ29tcGFyZShyLmZpbGVOYW1lKTtcbiAgfSk7XG5cbiAgY29uc3QgZmlsZXMgPSBjaHVua3MubWFwKChjaHVuaykgPT4gcmVzb2x2ZShjb25maWcub3V0RGlyLCBjaHVuay5maWxlTmFtZSkpO1xuICBhd2FpdCBwcmludEZpbGVMaXN0KGxvZywgaGVhZGVyLCBjb25maWcub3V0RGlyLCBmaWxlcyk7XG59XG5cbmNvbnN0IERFRkFVTFRfU09SVF9XRUlHSFQgPSAxMDA7XG5jb25zdCBDSFVOS19TT1JUX1dFSUdIVFM6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4gPSB7XG4gICdtYW5pZmVzdC5qc29uJzogMCxcbiAgJy5odG1sJzogMSxcbiAgJy5qcy5tYXAnOiAyLFxuICAnLmpzJzogMixcbiAgJy5jc3MnOiAzLFxufTtcbmZ1bmN0aW9uIGdldENodW5rU29ydFdlaWdodChmaWxlbmFtZTogc3RyaW5nKSB7XG4gIHJldHVybiAoXG4gICAgT2JqZWN0LmVudHJpZXMoQ0hVTktfU09SVF9XRUlHSFRTKS5maW5kKChba2V5XSkgPT5cbiAgICAgIGZpbGVuYW1lLmVuZHNXaXRoKGtleSksXG4gICAgKT8uWzFdID8/IERFRkFVTFRfU09SVF9XRUlHSFRcbiAgKTtcbn1cbiIsICJpbXBvcnQgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHBjIGZyb20gJ3BpY29jb2xvcnMnO1xuaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCB7IGZpbGVzaXplIH0gZnJvbSAnZmlsZXNpemUnO1xuaW1wb3J0IHsgcHJpbnRUYWJsZSB9IGZyb20gJy4vcHJpbnRUYWJsZSc7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcmludEZpbGVMaXN0KFxuICBsb2c6IChtZXNzYWdlOiBzdHJpbmcpID0+IHZvaWQsXG4gIGhlYWRlcjogc3RyaW5nLFxuICBiYXNlRGlyOiBzdHJpbmcsXG4gIGZpbGVzOiBzdHJpbmdbXSxcbik6IFByb21pc2U8dm9pZD4ge1xuICBsZXQgdG90YWxTaXplID0gMDtcblxuICBjb25zdCBmaWxlUm93czogc3RyaW5nW11bXSA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgIGZpbGVzLm1hcChhc3luYyAoZmlsZSwgaSkgPT4ge1xuICAgICAgY29uc3QgcGFydHMgPSBbXG4gICAgICAgIHBhdGgucmVsYXRpdmUocHJvY2Vzcy5jd2QoKSwgYmFzZURpcikgKyBwYXRoLnNlcCxcbiAgICAgICAgcGF0aC5yZWxhdGl2ZShiYXNlRGlyLCBmaWxlKSxcbiAgICAgIF07XG4gICAgICBjb25zdCBwcmVmaXggPSBpID09PSBmaWxlcy5sZW5ndGggLSAxID8gJyAgXHUyNTE0XHUyNTAwJyA6ICcgIFx1MjUxQ1x1MjUwMCc7XG4gICAgICBjb25zdCBjb2xvciA9IGdldENodW5rQ29sb3IoZmlsZSk7XG4gICAgICBjb25zdCBzdGF0cyA9IGF3YWl0IGZzLmxzdGF0KGZpbGUpO1xuICAgICAgdG90YWxTaXplICs9IHN0YXRzLnNpemU7XG4gICAgICBjb25zdCBzaXplID0gU3RyaW5nKGZpbGVzaXplKHN0YXRzLnNpemUpKTtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIGAke3BjLmdyYXkocHJlZml4KX0gJHtwYy5kaW0ocGFydHNbMF0pfSR7Y29sb3IocGFydHNbMV0pfWAsXG4gICAgICAgIHBjLmRpbShzaXplKSxcbiAgICAgIF07XG4gICAgfSksXG4gICk7XG5cbiAgZmlsZVJvd3MucHVzaChbYCR7cGMuY3lhbignXHUwM0EzIFRvdGFsIHNpemU6Jyl9ICR7U3RyaW5nKGZpbGVzaXplKHRvdGFsU2l6ZSkpfWBdKTtcblxuICBwcmludFRhYmxlKGxvZywgaGVhZGVyLCBmaWxlUm93cyk7XG59XG5cbmNvbnN0IERFRkFVTFRfQ09MT1IgPSBwYy5ibHVlO1xuY29uc3QgQ0hVTktfQ09MT1JTOiBSZWNvcmQ8c3RyaW5nLCAodGV4dDogc3RyaW5nKSA9PiBzdHJpbmc+ID0ge1xuICAnLmpzLm1hcCc6IHBjLmdyYXksXG4gICcuaHRtbCc6IHBjLmdyZWVuLFxuICAnLmNzcyc6IHBjLm1hZ2VudGEsXG4gICcuanMnOiBwYy5jeWFuLFxuICAnLnppcCc6IHBjLnllbGxvdyxcbn07XG5mdW5jdGlvbiBnZXRDaHVua0NvbG9yKGZpbGVuYW1lOiBzdHJpbmcpIHtcbiAgcmV0dXJuIChcbiAgICBPYmplY3QuZW50cmllcyhDSFVOS19DT0xPUlMpLmZpbmQoKFtrZXldKSA9PiBmaWxlbmFtZS5lbmRzV2l0aChrZXkpKT8uWzFdID8/XG4gICAgREVGQVVMVF9DT0xPUlxuICApO1xufVxuIiwgImV4cG9ydCBmdW5jdGlvbiBwcmludFRhYmxlKFxuICBsb2c6IChtZXNzYWdlOiBzdHJpbmcpID0+IHZvaWQsXG4gIGhlYWRlcjogc3RyaW5nLFxuICByb3dzOiBzdHJpbmdbXVtdLFxuICBnYXAgPSAyLFxuKTogdm9pZCB7XG4gIGlmIChyb3dzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG4gIGNvbnN0IGNvbHVtbldpZHRocyA9IHJvd3MucmVkdWNlKFxuICAgICh3aWR0aHMsIHJvdykgPT4ge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBNYXRoLm1heCh3aWR0aHMubGVuZ3RoLCByb3cubGVuZ3RoKTsgaSsrKSB7XG4gICAgICAgIHdpZHRoc1tpXSA9IE1hdGgubWF4KHJvd1tpXT8ubGVuZ3RoID8/IDAsIHdpZHRoc1tpXSA/PyAwKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB3aWR0aHM7XG4gICAgfSxcbiAgICByb3dzWzBdLm1hcCgoY29sdW1uKSA9PiBjb2x1bW4ubGVuZ3RoKSxcbiAgKTtcblxuICBsZXQgc3RyID0gJyc7XG4gIHJvd3MuZm9yRWFjaCgocm93LCBpKSA9PiB7XG4gICAgcm93LmZvckVhY2goKGNvbCwgaikgPT4ge1xuICAgICAgc3RyICs9IGNvbC5wYWRFbmQoY29sdW1uV2lkdGhzW2pdLCAnICcpO1xuICAgICAgaWYgKGogIT09IHJvdy5sZW5ndGggLSAxKSBzdHIgKz0gJycucGFkRW5kKGdhcCwgJyAnKTtcbiAgICB9KTtcbiAgICBpZiAoaSAhPT0gcm93cy5sZW5ndGggLSAxKSBzdHIgKz0gJ1xcbic7XG4gIH0pO1xuXG4gIGxvZyhgJHtoZWFkZXJ9XFxuJHtzdHJ9YCk7XG59XG4iLCAiaW1wb3J0IHtcbiAgQnVpbGRTdGVwT3V0cHV0LFxuICBFbnRyeXBvaW50R3JvdXAsXG4gIEludGVybmFsQ29uZmlnLFxuICBXeHREZXZTZXJ2ZXIsXG59IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0ICogYXMgdml0ZSBmcm9tICd2aXRlJztcbmltcG9ydCB7IFNjcmlwdGluZyB9IGZyb20gJ3dlYmV4dGVuc2lvbi1wb2x5ZmlsbCc7XG5pbXBvcnQgeyBnZXRFbnRyeXBvaW50QnVuZGxlUGF0aCB9IGZyb20gJy4vdXRpbHMvZW50cnlwb2ludHMnO1xuaW1wb3J0IHsgZ2V0Q29udGVudFNjcmlwdENzc0ZpbGVzIH0gZnJvbSAnLi91dGlscy9tYW5pZmVzdCc7XG5pbXBvcnQgeyBjcmVhdGVXZWJFeHRSdW5uZXIgfSBmcm9tICcuL3J1bm5lcnMvY3JlYXRlV2ViRXh0UnVubmVyJztcbmltcG9ydCB7IGJ1aWxkSW50ZXJuYWwgfSBmcm9tICcuL2J1aWxkJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFNlcnZlckluZm8oKTogUHJvbWlzZTxTZXJ2ZXJJbmZvPiB7XG4gIGNvbnN0IHsgZGVmYXVsdDogZ2V0UG9ydCwgcG9ydE51bWJlcnMgfSA9IGF3YWl0IGltcG9ydCgnZ2V0LXBvcnQnKTtcbiAgY29uc3QgcG9ydCA9IGF3YWl0IGdldFBvcnQoeyBwb3J0OiBwb3J0TnVtYmVycygzMDAwLCAzMDEwKSB9KTtcbiAgY29uc3QgaG9zdG5hbWUgPSAnbG9jYWxob3N0JztcbiAgY29uc3Qgb3JpZ2luID0gYGh0dHA6Ly8ke2hvc3RuYW1lfToke3BvcnR9YDtcbiAgY29uc3Qgc2VydmVyQ29uZmlnOiB2aXRlLklubGluZUNvbmZpZyA9IHtcbiAgICBzZXJ2ZXI6IHtcbiAgICAgIG9yaWdpbixcbiAgICB9LFxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgcG9ydCxcbiAgICBob3N0bmFtZSxcbiAgICBvcmlnaW4sXG4gICAgdml0ZVNlcnZlckNvbmZpZzogc2VydmVyQ29uZmlnLFxuICB9O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2V0dXBTZXJ2ZXIoXG4gIHNlcnZlckluZm86IFNlcnZlckluZm8sXG4gIGNvbmZpZzogSW50ZXJuYWxDb25maWcsXG4pOiBQcm9taXNlPFd4dERldlNlcnZlcj4ge1xuICBjb25zdCBydW5uZXIgPSBjcmVhdGVXZWJFeHRSdW5uZXIoKTtcblxuICBjb25zdCB2aXRlU2VydmVyID0gYXdhaXQgdml0ZS5jcmVhdGVTZXJ2ZXIoXG4gICAgdml0ZS5tZXJnZUNvbmZpZyhzZXJ2ZXJJbmZvLCBjb25maWcudml0ZSksXG4gICk7XG5cbiAgY29uc3Qgc3RhcnQgPSBhc3luYyAoKSA9PiB7XG4gICAgYXdhaXQgdml0ZVNlcnZlci5saXN0ZW4oc2VydmVyLnBvcnQpO1xuICAgIGNvbmZpZy5sb2dnZXIuc3VjY2VzcyhgU3RhcnRlZCBkZXYgc2VydmVyIEAgJHtzZXJ2ZXJJbmZvLm9yaWdpbn1gKTtcblxuICAgIHNlcnZlci5jdXJyZW50T3V0cHV0ID0gYXdhaXQgYnVpbGRJbnRlcm5hbChjb25maWcpO1xuICAgIGNvbmZpZy5sb2dnZXIuaW5mbygnT3BlbmluZyBicm93c2VyLi4uJyk7XG4gICAgYXdhaXQgcnVubmVyLm9wZW5Ccm93c2VyKGNvbmZpZyk7XG4gICAgY29uZmlnLmxvZ2dlci5zdWNjZXNzKCdPcGVuZWQhJyk7XG4gIH07XG5cbiAgY29uc3QgcmVsb2FkRXh0ZW5zaW9uID0gKCkgPT4ge1xuICAgIHZpdGVTZXJ2ZXIud3Muc2VuZCgnd3h0OnJlbG9hZC1leHRlbnNpb24nKTtcbiAgfTtcbiAgY29uc3QgcmVsb2FkUGFnZSA9IChwYXRoOiBzdHJpbmcpID0+IHtcbiAgICAvLyBDYW4ndCB1c2UgVml0ZSdzIGJ1aWx0LWluIFwiZnVsbC1yZWxvYWRcIiBldmVudCBiZWNhdXNlIGl0IGRvZXNuJ3QgbGlrZSBvdXIgcGF0aHMsIGl0IGV4cGVjdHNcbiAgICAvLyBwYXRocyBlbmRpbmcgaW4gXCIvaW5kZXguaHRtbFwiXG4gICAgdml0ZVNlcnZlci53cy5zZW5kKCd3eHQ6cmVsb2FkLXBhZ2UnLCBwYXRoKTtcbiAgfTtcbiAgY29uc3QgcmVsb2FkQ29udGVudFNjcmlwdCA9IChcbiAgICBjb250ZW50U2NyaXB0OiBPbWl0PFNjcmlwdGluZy5SZWdpc3RlcmVkQ29udGVudFNjcmlwdCwgJ2lkJz4sXG4gICkgPT4ge1xuICAgIHZpdGVTZXJ2ZXIud3Muc2VuZCgnd3h0OnJlbG9hZC1jb250ZW50LXNjcmlwdCcsIGNvbnRlbnRTY3JpcHQpO1xuICB9O1xuXG4gIGNvbnN0IHNlcnZlcjogV3h0RGV2U2VydmVyID0ge1xuICAgIC4uLnZpdGVTZXJ2ZXIsXG4gICAgc3RhcnQsXG4gICAgY3VycmVudE91dHB1dDoge1xuICAgICAgbWFuaWZlc3Q6IHtcbiAgICAgICAgbWFuaWZlc3RfdmVyc2lvbjogMyxcbiAgICAgICAgbmFtZTogJycsXG4gICAgICAgIHZlcnNpb246ICcnLFxuICAgICAgfSxcbiAgICAgIHB1YmxpY0Fzc2V0czogW10sXG4gICAgICBzdGVwczogW10sXG4gICAgfSxcbiAgICBwb3J0OiBzZXJ2ZXJJbmZvLnBvcnQsXG4gICAgaG9zdG5hbWU6IHNlcnZlckluZm8uaG9zdG5hbWUsXG4gICAgb3JpZ2luOiBzZXJ2ZXJJbmZvLm9yaWdpbixcbiAgICByZWxvYWRFeHRlbnNpb24sXG4gICAgcmVsb2FkUGFnZSxcbiAgICByZWxvYWRDb250ZW50U2NyaXB0LFxuICB9O1xuXG4gIHJldHVybiBzZXJ2ZXI7XG59XG5cbi8qKlxuICogRnJvbSB0aGUgc2VydmVyLCB0ZWxsIHRoZSBjbGllbnQgdG8gcmVsb2FkIGNvbnRlbnQgc2NyaXB0cyBmcm9tIHRoZSBwcm92aWRlZCBidWlsZCBzdGVwIG91dHB1dHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWxvYWRDb250ZW50U2NyaXB0cyhcbiAgc3RlcHM6IEJ1aWxkU3RlcE91dHB1dFtdLFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuICBzZXJ2ZXI6IFd4dERldlNlcnZlcixcbikge1xuICBpZiAoY29uZmlnLm1hbmlmZXN0VmVyc2lvbiA9PT0gMykge1xuICAgIHN0ZXBzLmZvckVhY2goKHN0ZXApID0+IHtcbiAgICAgIGNvbnN0IGVudHJ5ID0gc3RlcC5lbnRyeXBvaW50cztcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGVudHJ5KSB8fCBlbnRyeS50eXBlICE9PSAnY29udGVudC1zY3JpcHQnKSByZXR1cm47XG5cbiAgICAgIGNvbnN0IGpzID0gW2dldEVudHJ5cG9pbnRCdW5kbGVQYXRoKGVudHJ5LCBjb25maWcub3V0RGlyLCAnLmpzJyldO1xuICAgICAgY29uc3QgY3NzID0gZ2V0Q29udGVudFNjcmlwdENzc0ZpbGVzKFtlbnRyeV0sIHNlcnZlci5jdXJyZW50T3V0cHV0KTtcblxuICAgICAgc2VydmVyLnJlbG9hZENvbnRlbnRTY3JpcHQoe1xuICAgICAgICAuLi5lbnRyeS5vcHRpb25zLFxuICAgICAgICBqcyxcbiAgICAgICAgY3NzLFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgc2VydmVyLnJlbG9hZEV4dGVuc2lvbigpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWxvYWRIdG1sUGFnZXMoXG4gIGdyb3VwczogRW50cnlwb2ludEdyb3VwW10sXG4gIHNlcnZlcjogV3h0RGV2U2VydmVyLFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuKSB7XG4gIGdyb3Vwcy5mbGF0KCkuZm9yRWFjaCgoZW50cnkpID0+IHtcbiAgICBjb25zdCBwYXRoID0gZ2V0RW50cnlwb2ludEJ1bmRsZVBhdGgoZW50cnksIGNvbmZpZy5vdXREaXIsICcuaHRtbCcpO1xuICAgIHNlcnZlci5yZWxvYWRQYWdlKHBhdGgpO1xuICB9KTtcbn1cblxuaW50ZXJmYWNlIFNlcnZlckluZm8ge1xuICBwb3J0OiBudW1iZXI7XG4gIGhvc3RuYW1lOiBzdHJpbmc7XG4gIG9yaWdpbjogc3RyaW5nO1xuICB2aXRlU2VydmVyQ29uZmlnOiB2aXRlLklubGluZUNvbmZpZztcbn1cbiIsICJpbXBvcnQgdHlwZSB7IFdlYkV4dFJ1bkluc3RhbmNlIH0gZnJvbSAnd2ViLWV4dC1ydW4nO1xuaW1wb3J0IHsgRXh0ZW5zaW9uUnVubmVyIH0gZnJvbSAnLi9FeHRlbnNpb25SdW5uZXInO1xuXG4vKipcbiAqIENyZWF0ZSBhbiBgRXh0ZW5zaW9uUnVubmVyYCBiYWNrZWQgYnkgYHdlYi1leHRgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlV2ViRXh0UnVubmVyKCk6IEV4dGVuc2lvblJ1bm5lciB7XG4gIGxldCBydW5uZXI6IFdlYkV4dFJ1bkluc3RhbmNlIHwgdW5kZWZpbmVkO1xuXG4gIHJldHVybiB7XG4gICAgYXN5bmMgb3BlbkJyb3dzZXIoY29uZmlnKSB7XG4gICAgICBpZiAoY29uZmlnLmJyb3dzZXIgPT09ICdzYWZhcmknKSB7XG4gICAgICAgIGNvbmZpZy5sb2dnZXIud2FybignQ2Fubm90IG9wZW4gc2FmYXJpIGF1dG9tYXRpY2FsbHkuJyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gVXNlIHRoZSBwbHVnaW4ncyBsb2dnZXIgaW5zdGVhZCBvZiB3ZWItZXh0J3MgYnVpbHQtaW4gb25lLlxuICAgICAgY29uc3Qgd2ViRXh0TG9nZ2VyID0gYXdhaXQgaW1wb3J0KCd3ZWItZXh0LXJ1bi91dGlsL2xvZ2dlcicpO1xuICAgICAgd2ViRXh0TG9nZ2VyLmNvbnNvbGVTdHJlYW0ud3JpdGUgPSAoeyBsZXZlbCwgbXNnLCBuYW1lIH0pID0+IHtcbiAgICAgICAgaWYgKGxldmVsID49IEVSUk9SX0xPR19MRVZFTCkgY29uZmlnLmxvZ2dlci5lcnJvcihuYW1lLCBtc2cpO1xuICAgICAgICBpZiAobGV2ZWwgPj0gV0FSTl9MT0dfTEVWRUwpIGNvbmZpZy5sb2dnZXIud2Fybihtc2cpO1xuICAgICAgfTtcblxuICAgICAgY29uc3Qgd3h0VXNlckNvbmZpZyA9IGNvbmZpZy5ydW5uZXJDb25maWcuY29uZmlnO1xuICAgICAgY29uc3QgdXNlckNvbmZpZyA9IHtcbiAgICAgICAgY29uc29sZTogd3h0VXNlckNvbmZpZz8ub3BlbkNvbnNvbGUsXG4gICAgICAgIGRldnRvb2xzOiB3eHRVc2VyQ29uZmlnPy5vcGVuRGV2dG9vbHMsXG4gICAgICAgIHN0YXJ0VXJsOiB3eHRVc2VyQ29uZmlnPy5zdGFydFVybHMsXG4gICAgICAgIC4uLihjb25maWcuYnJvd3NlciA9PT0gJ2ZpcmVmb3gnXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIGZpcmVmb3g6IHd4dFVzZXJDb25maWc/LmJpbmFyaWVzPy5maXJlZm94LFxuICAgICAgICAgICAgICBmaXJlZm94UHJvZmlsZTogd3h0VXNlckNvbmZpZz8uZmlyZWZveFByb2ZpbGUsXG4gICAgICAgICAgICAgIHByZWZzOiB3eHRVc2VyQ29uZmlnPy5maXJlZm94UHJlZnMsXG4gICAgICAgICAgICAgIGFyZ3M6IHd4dFVzZXJDb25maWc/LmZpcmVmb3hBcmdzLFxuICAgICAgICAgICAgfVxuICAgICAgICAgIDoge1xuICAgICAgICAgICAgICBjaHJvbWl1bUJpbmFyeTogd3h0VXNlckNvbmZpZz8uYmluYXJpZXM/Lltjb25maWcuYnJvd3Nlcl0sXG4gICAgICAgICAgICAgIGNocm9taXVtUHJvZmlsZTogd3h0VXNlckNvbmZpZz8uY2hyb21pdW1Qcm9maWxlLFxuICAgICAgICAgICAgICBhcmdzOiB3eHRVc2VyQ29uZmlnPy5jaHJvbWl1bUFyZ3MsXG4gICAgICAgICAgICB9KSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGZpbmFsQ29uZmlnID0ge1xuICAgICAgICAuLi51c2VyQ29uZmlnLFxuICAgICAgICB0YXJnZXQ6IGNvbmZpZy5icm93c2VyID09PSAnZmlyZWZveCcgPyAnZmlyZWZveC1kZXNrdG9wJyA6ICdjaHJvbWl1bScsXG4gICAgICAgIHNvdXJjZURpcjogY29uZmlnLm91dERpcixcbiAgICAgICAgLy8gV1hUIGhhbmRsZXMgcmVsb2Fkcywgc28gZGlzYWJsZSBhdXRvLXJlbG9hZCBiZWhhdmlvcnMgaW4gd2ViLWV4dFxuICAgICAgICBub1JlbG9hZDogdHJ1ZSxcbiAgICAgICAgbm9JbnB1dDogdHJ1ZSxcbiAgICAgIH07XG4gICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAvLyBEb24ndCBjYWxsIGBwcm9jZXNzLmV4aXQoMClgIGFmdGVyIHN0YXJ0aW5nIHdlYi1leHRcbiAgICAgICAgc2hvdWxkRXhpdFByb2dyYW06IGZhbHNlLFxuICAgICAgfTtcbiAgICAgIGNvbmZpZy5sb2dnZXIuZGVidWcoJ3dlYi1leHQgY29uZmlnOicsIGZpbmFsQ29uZmlnKTtcbiAgICAgIGNvbmZpZy5sb2dnZXIuZGVidWcoJ3dlYi1leHQgb3B0aW9uczonLCBvcHRpb25zKTtcblxuICAgICAgY29uc3Qgd2ViRXh0ID0gYXdhaXQgaW1wb3J0KCd3ZWItZXh0LXJ1bicpO1xuICAgICAgcnVubmVyID0gYXdhaXQgd2ViRXh0LmRlZmF1bHQuY21kLnJ1bihmaW5hbENvbmZpZywgb3B0aW9ucyk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNsb3NlQnJvd3NlcigpIHtcbiAgICAgIHJldHVybiBhd2FpdCBydW5uZXI/LmV4aXQoKTtcbiAgICB9LFxuICB9O1xufVxuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS93ZWItZXh0L2Jsb2IvZTM3ZTYwYTI3Mzg0NzhmNTEyZjEyNTVjNTM3MTMzMzIxZjMwMTc3MS9zcmMvdXRpbC9sb2dnZXIuanMjTDEyXG5jb25zdCBXQVJOX0xPR19MRVZFTCA9IDQwO1xuY29uc3QgRVJST1JfTE9HX0xFVkVMID0gNTA7XG4iLCAiaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCBnbG9iIGZyb20gJ2Zhc3QtZ2xvYic7XG5pbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnO1xuaW1wb3J0IHsgY29uc29sYSB9IGZyb20gJ2NvbnNvbGEnO1xuaW1wb3J0IHBjIGZyb20gJ3BpY29jb2xvcnMnO1xuXG4vKipcbiAqIFJlbW92ZSBnZW5lcmF0ZWQvdGVtcCBmaWxlcyBmcm9tIHRoZSBkaXJlY3RvcnkuXG4gKlxuICogQHBhcmFtIHJvb3QgVGhlIGRpcmVjdG9yeSB0byBsb29rIGZvciBnZW5lcmF0ZWQvdGVtcCBmaWxlcyBpbi4gRGVmYXVsdHMgdG8gYHByb2Nlc3MuY3dkKClgLiBDYW4gYmUgcmVsYXRpdmUgdG8gYHByb2Nlc3MuY3dkKClgIG9yIGFic29sdXRlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2xlYW4ocm9vdCA9IHByb2Nlc3MuY3dkKCkpIHtcbiAgY29uc29sYS5pbmZvKCdDbGVhbmluZyBQcm9qZWN0Jyk7XG5cbiAgY29uc3QgdGVtcERpcnMgPSBbXG4gICAgJ25vZGVfbW9kdWxlcy8udml0ZScsXG4gICAgJ25vZGVfbW9kdWxlcy8uY2FjaGUnLFxuICAgICcqKi8ud3h0JyxcbiAgICAnLm91dHB1dC8qJyxcbiAgXTtcbiAgY29uc29sYS5kZWJ1ZygnTG9va2luZyBmb3I6JywgdGVtcERpcnMubWFwKHBjLmN5YW4pLmpvaW4oJywgJykpO1xuICBjb25zdCBkaXJlY3RvcmllcyA9IGF3YWl0IGdsb2IodGVtcERpcnMsIHtcbiAgICBjd2Q6IHBhdGgucmVzb2x2ZShyb290KSxcbiAgICBhYnNvbHV0ZTogdHJ1ZSxcbiAgICBvbmx5RGlyZWN0b3JpZXM6IHRydWUsXG4gICAgZGVlcDogMixcbiAgfSk7XG4gIGlmIChkaXJlY3Rvcmllcy5sZW5ndGggPT09IDApIHtcbiAgICBjb25zb2xhLmRlYnVnKCdObyBnZW5lcmF0ZWQgZmlsZXMgZm91bmQuJyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc29sYS5kZWJ1ZyhcbiAgICAnRm91bmQ6JyxcbiAgICBkaXJlY3Rvcmllcy5tYXAoKGRpcikgPT4gcGMuY3lhbihwYXRoLnJlbGF0aXZlKHJvb3QsIGRpcikpKS5qb2luKCcsICcpLFxuICApO1xuICBmb3IgKGNvbnN0IGRpcmVjdG9yeSBvZiBkaXJlY3Rvcmllcykge1xuICAgIGF3YWl0IGZzLnJtKGRpcmVjdG9yeSwgeyBmb3JjZTogdHJ1ZSwgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIGNvbnNvbGEuZGVidWcoJ0RlbGV0ZWQgJyArIHBjLmN5YW4ocGF0aC5yZWxhdGl2ZShyb290LCBkaXJlY3RvcnkpKSk7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBMb2dMZXZlbHMsIGNvbnNvbGEgfSBmcm9tICdjb25zb2xhJztcbmltcG9ydCB7IHByaW50SGVhZGVyIH0gZnJvbSAnLi4vLi4vY29yZS9sb2cvcHJpbnRIZWFkZXInO1xuaW1wb3J0IHsgZm9ybWF0RHVyYXRpb24gfSBmcm9tICcuLi8uLi9jb3JlL3V0aWxzL2Zvcm1hdER1cmF0aW9uJztcblxuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZUNvbW1hbmQ8VEFyZ3MgZXh0ZW5kcyBhbnlbXT4oXG4gIGNiOiAoLi4uYXJnczogVEFyZ3MpID0+IHZvaWQgfCBib29sZWFuIHwgUHJvbWlzZTx2b2lkIHwgYm9vbGVhbj4sXG4gIG9wdGlvbnM/OiB7XG4gICAgZGlzYWJsZUZpbmlzaGVkTG9nPzogYm9vbGVhbjtcbiAgfSxcbikge1xuICByZXR1cm4gYXN5bmMgKC4uLmFyZ3M6IFRBcmdzKSA9PiB7XG4gICAgLy8gRW5hYmxlIGNvbnNvbGEncyBkZWJ1ZyBtb2RlIGdsb2JhbGx5IGF0IHRoZSBzdGFydCBvZiBhbGwgY29tbWFuZHMgd2hlbiB0aGUgYC0tZGVidWdgIGZsYWcgaXNcbiAgICAvLyBwYXNzZWRcbiAgICBjb25zdCBpc0RlYnVnID0gISFhcmdzLmZpbmQoKGFyZykgPT4gYXJnPy5kZWJ1Zyk7XG4gICAgaWYgKGlzRGVidWcpIHtcbiAgICAgIGNvbnNvbGEubGV2ZWwgPSBMb2dMZXZlbHMuZGVidWc7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICB0cnkge1xuICAgICAgcHJpbnRIZWFkZXIoKTtcblxuICAgICAgY29uc3Qgb25nb2luZyA9IGF3YWl0IGNiKC4uLmFyZ3MpO1xuXG4gICAgICBpZiAoIW9uZ29pbmcgJiYgIW9wdGlvbnM/LmRpc2FibGVGaW5pc2hlZExvZylcbiAgICAgICAgY29uc29sYS5zdWNjZXNzKFxuICAgICAgICAgIGBGaW5pc2hlZCBpbiAke2Zvcm1hdER1cmF0aW9uKERhdGUubm93KCkgLSBzdGFydFRpbWUpfWAsXG4gICAgICAgICk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xhLmZhaWwoXG4gICAgICAgIGBDb21tYW5kIGZhaWxlZCBhZnRlciAke2Zvcm1hdER1cmF0aW9uKERhdGUubm93KCkgLSBzdGFydFRpbWUpfWAsXG4gICAgICApO1xuICAgICAgY29uc29sYS5lcnJvcihlcnIpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgfTtcbn1cbiIsICJpbXBvcnQgcGMgZnJvbSAncGljb2NvbG9ycyc7XG5pbXBvcnQgeyB2ZXJzaW9uIH0gZnJvbSAnLi4vLi4nO1xuaW1wb3J0IHsgY29uc29sYSB9IGZyb20gJ2NvbnNvbGEnO1xuXG5leHBvcnQgZnVuY3Rpb24gcHJpbnRIZWFkZXIoKSB7XG4gIGNvbnNvbGUubG9nKCk7XG4gIGNvbnNvbGEubG9nKGAke3BjLmdyYXkoJ1dYVCcpfSAke3BjLmdyYXkocGMuYm9sZCh2ZXJzaW9uKSl9YCk7XG59XG4iLCAiaW1wb3J0ICogYXMgd3h0IGZyb20gJy4uLy4uJztcbmltcG9ydCB7IGRlZmluZUNvbW1hbmQgfSBmcm9tICcuLi91dGlscy9kZWZpbmVDb21tYW5kJztcblxuZXhwb3J0IGNvbnN0IGJ1aWxkID0gZGVmaW5lQ29tbWFuZDxcbiAgW1xuICAgIHJvb3Q6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICBmbGFnczoge1xuICAgICAgbW9kZT86IHN0cmluZztcbiAgICAgIGNvbmZpZz86IHN0cmluZztcbiAgICAgIGJyb3dzZXI/OiB3eHQuVGFyZ2V0QnJvd3NlcjtcbiAgICAgIG12Mz86IGJvb2xlYW47XG4gICAgICBtdjI/OiBib29sZWFuO1xuICAgICAgZGVidWc/OiBib29sZWFuO1xuICAgIH0sXG4gIF1cbj4oYXN5bmMgKHJvb3QsIGZsYWdzKSA9PiB7XG4gIGNvbnN0IGNsaUNvbmZpZzogd3h0LklubGluZUNvbmZpZyA9IHtcbiAgICByb290LFxuICAgIG1vZGU6IGZsYWdzLm1vZGUsXG4gICAgYnJvd3NlcjogZmxhZ3MuYnJvd3NlcixcbiAgICBtYW5pZmVzdFZlcnNpb246IGZsYWdzLm12MyA/IDMgOiBmbGFncy5tdjIgPyAyIDogdW5kZWZpbmVkLFxuICAgIGNvbmZpZ0ZpbGU6IGZsYWdzLmNvbmZpZyxcbiAgICBkZWJ1ZzogZmxhZ3MuZGVidWcsXG4gIH07XG5cbiAgYXdhaXQgd3h0LmJ1aWxkKGNsaUNvbmZpZyk7XG59KTtcbiIsICJpbXBvcnQgKiBhcyB3eHQgZnJvbSAnLi4vLi4nO1xuaW1wb3J0IHsgZGVmaW5lQ29tbWFuZCB9IGZyb20gJy4uL3V0aWxzL2RlZmluZUNvbW1hbmQnO1xuXG5leHBvcnQgY29uc3QgZGV2ID0gZGVmaW5lQ29tbWFuZDxcbiAgW1xuICAgIHJvb3Q6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICBmbGFnczoge1xuICAgICAgbW9kZT86IHN0cmluZztcbiAgICAgIGNvbmZpZz86IHN0cmluZztcbiAgICAgIGJyb3dzZXI/OiB3eHQuVGFyZ2V0QnJvd3NlcjtcbiAgICAgIG12Mz86IGJvb2xlYW47XG4gICAgICBtdjI/OiBib29sZWFuO1xuICAgICAgZGVidWc/OiBib29sZWFuO1xuICAgIH0sXG4gIF1cbj4oYXN5bmMgKHJvb3QsIGZsYWdzKSA9PiB7XG4gIGNvbnN0IGNsaUNvbmZpZzogd3h0LklubGluZUNvbmZpZyA9IHtcbiAgICByb290LFxuICAgIG1vZGU6IGZsYWdzLm1vZGUsXG4gICAgYnJvd3NlcjogZmxhZ3MuYnJvd3NlcixcbiAgICBtYW5pZmVzdFZlcnNpb246IGZsYWdzLm12MyA/IDMgOiBmbGFncy5tdjIgPyAyIDogdW5kZWZpbmVkLFxuICAgIGNvbmZpZ0ZpbGU6IGZsYWdzLmNvbmZpZyxcbiAgICBkZWJ1ZzogZmxhZ3MuZGVidWcsXG4gIH07XG5cbiAgY29uc3Qgc2VydmVyID0gYXdhaXQgd3h0LmNyZWF0ZVNlcnZlcihjbGlDb25maWcpO1xuICBhd2FpdCBzZXJ2ZXIuc3RhcnQoKTtcblxuICByZXR1cm4gdHJ1ZTtcbn0pO1xuIiwgImltcG9ydCB7IGRlZmluZUNvbW1hbmQgfSBmcm9tICcuLi91dGlscy9kZWZpbmVDb21tYW5kJztcbmltcG9ydCBwcm9tcHRzIGZyb20gJ3Byb21wdHMnO1xuaW1wb3J0IG9yYSBmcm9tICdvcmEnO1xuaW1wb3J0IHsgY29uc29sYSB9IGZyb20gJ2NvbnNvbGEnO1xuaW1wb3J0IHsgZG93bmxvYWRUZW1wbGF0ZSB9IGZyb20gJ2dpZ2V0JztcbmltcG9ydCBmcyBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHBjIGZyb20gJ3BpY29jb2xvcnMnO1xuaW1wb3J0IHsgRm9ybWF0dGVyIH0gZnJvbSAncGljb2NvbG9ycy90eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBpbml0ID0gZGVmaW5lQ29tbWFuZDxcbiAgW1xuICAgIGRpcmVjdG9yeTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgIG9wdGlvbnM6IHsgdGVtcGxhdGU/OiBzdHJpbmc7IHBtPzogc3RyaW5nOyBkZWJ1Zz86IGJvb2xlYW4gfSxcbiAgXVxuPihcbiAgYXN5bmMgKHVzZXJEaXJlY3RvcnksIGZsYWdzKSA9PiB7XG4gICAgY29uc29sYS5pbmZvKCdJbml0YWxpemluZyBuZXcgcHJvamVjdCcpO1xuXG4gICAgY29uc3QgdGVtcGxhdGVzID0gYXdhaXQgbGlzdFRlbXBsYXRlcygpO1xuICAgIGNvbnN0IGRlZmF1bHRUZW1wbGF0ZSA9IHRlbXBsYXRlcy5maW5kKFxuICAgICAgKHRlbXBsYXRlKSA9PiB0ZW1wbGF0ZS5uYW1lID09PSBmbGFncy50ZW1wbGF0ZT8udG9Mb3dlckNhc2UoKS50cmltKCksXG4gICAgKTtcblxuICAgIGNvbnN0IGlucHV0ID0gYXdhaXQgcHJvbXB0cyhcbiAgICAgIFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdkaXJlY3RvcnknLFxuICAgICAgICAgIHR5cGU6ICgpID0+ICh1c2VyRGlyZWN0b3J5ID09IG51bGwgPyAndGV4dCcgOiB1bmRlZmluZWQpLFxuICAgICAgICAgIG1lc3NhZ2U6ICdQcm9qZWN0IERpcmVjdG9yeScsXG4gICAgICAgICAgaW5pdGlhbDogdXNlckRpcmVjdG9yeSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICd0ZW1wbGF0ZScsXG4gICAgICAgICAgdHlwZTogKCkgPT4gKGRlZmF1bHRUZW1wbGF0ZSA9PSBudWxsID8gJ3NlbGVjdCcgOiB1bmRlZmluZWQpLFxuICAgICAgICAgIG1lc3NhZ2U6ICdDaG9vc2UgYSB0ZW1wbGF0ZScsXG4gICAgICAgICAgY2hvaWNlczogdGVtcGxhdGVzLm1hcCgodGVtcGxhdGUpID0+ICh7XG4gICAgICAgICAgICB0aXRsZTpcbiAgICAgICAgICAgICAgVEVNUExBVEVfQ09MT1JTW3RlbXBsYXRlLm5hbWVdPy4odGVtcGxhdGUubmFtZSkgPz8gdGVtcGxhdGUubmFtZSxcbiAgICAgICAgICAgIHZhbHVlOiB0ZW1wbGF0ZSxcbiAgICAgICAgICB9KSksXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAncGFja2FnZU1hbmFnZXInLFxuICAgICAgICAgIHR5cGU6ICgpID0+IChmbGFncy5wbSA9PSBudWxsID8gJ3NlbGVjdCcgOiB1bmRlZmluZWQpLFxuICAgICAgICAgIG1lc3NhZ2U6ICdQYWNrYWdlIE1hbmFnZXInLFxuICAgICAgICAgIGNob2ljZXM6IFtcbiAgICAgICAgICAgIHsgdGl0bGU6ICducG0nLCB2YWx1ZTogJ25wbScgfSxcbiAgICAgICAgICAgIHsgdGl0bGU6ICdwbnBtJywgdmFsdWU6ICdwbnBtJyB9LFxuICAgICAgICAgICAgeyB0aXRsZTogJ3lhcm4nLCB2YWx1ZTogJ3lhcm4nIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICB7XG4gICAgICAgIG9uQ2FuY2VsOiAoKSA9PiBwcm9jZXNzLmV4aXQoMSksXG4gICAgICB9LFxuICAgICk7XG4gICAgaW5wdXQuZGlyZWN0b3J5ID8/PSB1c2VyRGlyZWN0b3J5O1xuICAgIGlucHV0LnRlbXBsYXRlID8/PSBkZWZhdWx0VGVtcGxhdGU7XG4gICAgaW5wdXQucGFja2FnZU1hbmFnZXIgPz89IGZsYWdzLnBtO1xuXG4gICAgYXdhaXQgY2xvbmVQcm9qZWN0KGlucHV0KTtcblxuICAgIGNvbnN0IGNkUGF0aCA9IHBhdGgucmVsYXRpdmUocHJvY2Vzcy5jd2QoKSwgcGF0aC5yZXNvbHZlKGlucHV0LmRpcmVjdG9yeSkpO1xuICAgIGNvbnNvbGUubG9nKCk7XG4gICAgY29uc29sYS5sb2coXG4gICAgICBgXHUyNzI4IFdYVCBwcm9qZWN0IGNyZWF0ZWQgd2l0aCB0aGUgJHtcbiAgICAgICAgVEVNUExBVEVfQ09MT1JTW2lucHV0LnRlbXBsYXRlLm5hbWVdPy4oaW5wdXQudGVtcGxhdGUubmFtZSkgPz9cbiAgICAgICAgaW5wdXQudGVtcGxhdGUubmFtZVxuICAgICAgfSB0ZW1wbGF0ZS5gLFxuICAgICk7XG4gICAgY29uc29sZS5sb2coKTtcbiAgICBjb25zb2xhLmxvZygnTmV4dCBzdGVwczonKTtcbiAgICBsZXQgc3RlcCA9IDA7XG4gICAgaWYgKGNkUGF0aCAhPT0gJycpIGNvbnNvbGEubG9nKGAgICR7KytzdGVwfS5gLCBwYy5jeWFuKGBjZCAke2NkUGF0aH1gKSk7XG4gICAgY29uc29sYS5sb2coYCAgJHsrK3N0ZXB9LmAsIHBjLmN5YW4oYCR7aW5wdXQucGFja2FnZU1hbmFnZXJ9IGluc3RhbGxgKSk7XG4gICAgY29uc29sZS5sb2coKTtcbiAgfSxcbiAgeyBkaXNhYmxlRmluaXNoZWRMb2c6IHRydWUgfSxcbik7XG5cbmludGVyZmFjZSBUZW1wbGF0ZSB7XG4gIC8qKlxuICAgKiBUZW1wbGF0ZSdzIG5hbWUuXG4gICAqL1xuICBuYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBQYXRoIHRvIHRlbXBsYXRlIGRpcmVjdG9yeSBpbiBnaXRodWIgcmVwby5cbiAgICovXG4gIHBhdGg6IHN0cmluZztcbn1cblxuYXN5bmMgZnVuY3Rpb24gbGlzdFRlbXBsYXRlcygpOiBQcm9taXNlPFRlbXBsYXRlW10+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaChcbiAgICAgICdodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL3d4dC1kZXYvd3h0L2NvbnRlbnRzL3RlbXBsYXRlcycsXG4gICAgICB7XG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBBY2NlcHQ6ICdhcHBsaWNhdGlvbi92bmQuZ2l0aHViK2pzb24nLFxuICAgICAgICAgICdYLUdpdEh1Yi1BcGktVmVyc2lvbic6ICcyMDIyLTExLTI4JyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgKTtcbiAgICBpZiAocmVzLnN0YXR1cyA+PSAzMDApXG4gICAgICB0aHJvdyBFcnJvcihgUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgJHtyZXMuc3RhdHVzfSAke3Jlcy5zdGF0dXNUZXh0fWApO1xuXG4gICAgY29uc3QgZGF0YSA9IChhd2FpdCByZXMuanNvbigpKSBhcyBBcnJheTx7XG4gICAgICB0eXBlOiAnZmlsZScgfCAnZGlyJztcbiAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgIHBhdGg6IHN0cmluZztcbiAgICB9PjtcbiAgICByZXR1cm4gZGF0YVxuICAgICAgLmZpbHRlcigoaXRlbTogYW55KSA9PiBpdGVtLnR5cGUgPT09ICdkaXInKVxuICAgICAgLm1hcCgoaXRlbSkgPT4gKHsgbmFtZTogaXRlbS5uYW1lLCBwYXRoOiBpdGVtLnBhdGggfSkpXG4gICAgICAuc29ydCgobCwgcikgPT4ge1xuICAgICAgICBjb25zdCBsV2VpZ2h0ID0gVEVNUExBVEVfU09SVF9XRUlHSFRbbC5uYW1lXSA/PyBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUjtcbiAgICAgICAgY29uc3QgcldlaWdodCA9IFRFTVBMQVRFX1NPUlRfV0VJR0hUW3IubmFtZV0gPz8gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVI7XG4gICAgICAgIGNvbnN0IGRpZmYgPSBsV2VpZ2h0IC0gcldlaWdodDtcbiAgICAgICAgaWYgKGRpZmYgIT09IDApIHJldHVybiBkaWZmO1xuICAgICAgICByZXR1cm4gbC5uYW1lLmxvY2FsZUNvbXBhcmUoci5uYW1lKTtcbiAgICAgIH0pO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aHJvdyBFcnJvcihgQ2Fubm90IGxvYWQgdGVtcGxhdGVzOiAke0pTT04uc3RyaW5naWZ5KGVyciwgbnVsbCwgMil9YCk7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gY2xvbmVQcm9qZWN0KHtcbiAgZGlyZWN0b3J5LFxuICB0ZW1wbGF0ZSxcbiAgcGFja2FnZU1hbmFnZXIsXG59OiB7XG4gIGRpcmVjdG9yeTogc3RyaW5nO1xuICB0ZW1wbGF0ZTogVGVtcGxhdGU7XG4gIHBhY2thZ2VNYW5hZ2VyOiBzdHJpbmc7XG59KSB7XG4gIGNvbnN0IHNwaW5uZXIgPSBvcmEoJ0Rvd25sb2FkaW5nIHRlbXBsYXRlJykuc3RhcnQoKTtcbiAgdHJ5IHtcbiAgICAvLyAxLiBDbG9uZSByZXBvXG4gICAgYXdhaXQgZG93bmxvYWRUZW1wbGF0ZShgZ2g6d3h0LWRldi93eHQvJHt0ZW1wbGF0ZS5wYXRofWAsIHtcbiAgICAgIGRpcjogZGlyZWN0b3J5LFxuICAgICAgZm9yY2U6IHRydWUsXG4gICAgfSk7XG5cbiAgICAvLyAyLiBNb3ZlIF9naXRpZ25vcmUgLT4gLmdpdGlnbm9yZVxuICAgIGF3YWl0IGZzXG4gICAgICAubW92ZShcbiAgICAgICAgcGF0aC5qb2luKGRpcmVjdG9yeSwgJ19naXRpZ25vcmUnKSxcbiAgICAgICAgcGF0aC5qb2luKGRpcmVjdG9yeSwgJy5naXRpZ25vcmUnKSxcbiAgICAgIClcbiAgICAgIC5jYXRjaCgoZXJyKSA9PlxuICAgICAgICBjb25zb2xhLndhcm4oJ0ZhaWxlZCB0byBtb3ZlIF9naXRpZ25vcmUgdG8gLmdpdGlnbm9yZTonLCBlcnIpLFxuICAgICAgKTtcblxuICAgIC8vIDMuIEFkZCAubnBtcmMgZm9yIHBucG1cbiAgICBpZiAocGFja2FnZU1hbmFnZXIgPT09ICdwbnBtJykge1xuICAgICAgYXdhaXQgZnMud3JpdGVGaWxlKFxuICAgICAgICBwYXRoLmpvaW4oZGlyZWN0b3J5LCAnLm5wbXJjJyksXG4gICAgICAgICdzaGFtZWZ1bGx5LWhvaXN0PXRydWVcXG4nLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBzcGlubmVyLnN1Y2NlZWQoKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgc3Bpbm5lci5mYWlsKCk7XG4gICAgdGhyb3cgRXJyb3IoYEZhaWxlZCB0byBzZXR1cCBuZXcgcHJvamVjdDogJHtKU09OLnN0cmluZ2lmeShlcnIsIG51bGwsIDIpfWApO1xuICB9XG59XG5cbmNvbnN0IFRFTVBMQVRFX0NPTE9SUzogUmVjb3JkPHN0cmluZywgRm9ybWF0dGVyPiA9IHtcbiAgdmFuaWxsYTogcGMuYmx1ZSxcbiAgdnVlOiBwYy5ncmVlbixcbiAgcmVhY3Q6IHBjLmN5YW4sXG4gIHN2ZWx0ZTogcGMucmVkLFxuICBzb2xpZDogcGMuYmx1ZSxcbn07XG5cbmNvbnN0IFRFTVBMQVRFX1NPUlRfV0VJR0hUOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+ID0ge1xuICB2YW5pbGxhOiAwLFxuICB2dWU6IDEsXG4gIHJlYWN0OiAyLFxufTtcbiIsICJpbXBvcnQgcHJvY2VzcyBmcm9tICdub2RlOnByb2Nlc3MnO1xuaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJztcbmltcG9ydCBjbGlDdXJzb3IgZnJvbSAnY2xpLWN1cnNvcic7XG5pbXBvcnQgY2xpU3Bpbm5lcnMgZnJvbSAnY2xpLXNwaW5uZXJzJztcbmltcG9ydCBsb2dTeW1ib2xzIGZyb20gJ2xvZy1zeW1ib2xzJztcbmltcG9ydCBzdHJpcEFuc2kgZnJvbSAnc3RyaXAtYW5zaSc7XG5pbXBvcnQgc3RyaW5nV2lkdGggZnJvbSAnc3RyaW5nLXdpZHRoJztcbmltcG9ydCBpc0ludGVyYWN0aXZlIGZyb20gJ2lzLWludGVyYWN0aXZlJztcbmltcG9ydCBpc1VuaWNvZGVTdXBwb3J0ZWQgZnJvbSAnaXMtdW5pY29kZS1zdXBwb3J0ZWQnO1xuaW1wb3J0IHN0ZGluRGlzY2FyZGVyIGZyb20gJ3N0ZGluLWRpc2NhcmRlcic7XG5cbmNsYXNzIE9yYSB7XG5cdCNsaW5lc1RvQ2xlYXIgPSAwO1xuXHQjaXNEaXNjYXJkaW5nU3RkaW4gPSBmYWxzZTtcblx0I2xpbmVDb3VudCA9IDA7XG5cdCNmcmFtZUluZGV4ID0gMDtcblx0I29wdGlvbnM7XG5cdCNzcGlubmVyO1xuXHQjc3RyZWFtO1xuXHQjaWQ7XG5cdCNpbml0aWFsSW50ZXJ2YWw7XG5cdCNpc0VuYWJsZWQ7XG5cdCNpc1NpbGVudDtcblx0I2luZGVudDtcblx0I3RleHQ7XG5cdCNwcmVmaXhUZXh0O1xuXHQjc3VmZml4VGV4dDtcblxuXHRjb2xvcjtcblxuXHRjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG5cdFx0aWYgKHR5cGVvZiBvcHRpb25zID09PSAnc3RyaW5nJykge1xuXHRcdFx0b3B0aW9ucyA9IHtcblx0XHRcdFx0dGV4dDogb3B0aW9ucyxcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0dGhpcy4jb3B0aW9ucyA9IHtcblx0XHRcdGNvbG9yOiAnY3lhbicsXG5cdFx0XHRzdHJlYW06IHByb2Nlc3Muc3RkZXJyLFxuXHRcdFx0ZGlzY2FyZFN0ZGluOiB0cnVlLFxuXHRcdFx0aGlkZUN1cnNvcjogdHJ1ZSxcblx0XHRcdC4uLm9wdGlvbnMsXG5cdFx0fTtcblxuXHRcdC8vIFB1YmxpY1xuXHRcdHRoaXMuY29sb3IgPSB0aGlzLiNvcHRpb25zLmNvbG9yO1xuXG5cdFx0Ly8gSXQncyBpbXBvcnRhbnQgdGhhdCB0aGVzZSB1c2UgdGhlIHB1YmxpYyBzZXR0ZXJzLlxuXHRcdHRoaXMuc3Bpbm5lciA9IHRoaXMuI29wdGlvbnMuc3Bpbm5lcjtcblxuXHRcdHRoaXMuI2luaXRpYWxJbnRlcnZhbCA9IHRoaXMuI29wdGlvbnMuaW50ZXJ2YWw7XG5cdFx0dGhpcy4jc3RyZWFtID0gdGhpcy4jb3B0aW9ucy5zdHJlYW07XG5cdFx0dGhpcy4jaXNFbmFibGVkID0gdHlwZW9mIHRoaXMuI29wdGlvbnMuaXNFbmFibGVkID09PSAnYm9vbGVhbicgPyB0aGlzLiNvcHRpb25zLmlzRW5hYmxlZCA6IGlzSW50ZXJhY3RpdmUoe3N0cmVhbTogdGhpcy4jc3RyZWFtfSk7XG5cdFx0dGhpcy4jaXNTaWxlbnQgPSB0eXBlb2YgdGhpcy4jb3B0aW9ucy5pc1NpbGVudCA9PT0gJ2Jvb2xlYW4nID8gdGhpcy4jb3B0aW9ucy5pc1NpbGVudCA6IGZhbHNlO1xuXG5cdFx0Ly8gU2V0ICphZnRlciogYHRoaXMuI3N0cmVhbWAuXG5cdFx0Ly8gSXQncyBpbXBvcnRhbnQgdGhhdCB0aGVzZSB1c2UgdGhlIHB1YmxpYyBzZXR0ZXJzLlxuXHRcdHRoaXMudGV4dCA9IHRoaXMuI29wdGlvbnMudGV4dDtcblx0XHR0aGlzLnByZWZpeFRleHQgPSB0aGlzLiNvcHRpb25zLnByZWZpeFRleHQ7XG5cdFx0dGhpcy5zdWZmaXhUZXh0ID0gdGhpcy4jb3B0aW9ucy5zdWZmaXhUZXh0O1xuXHRcdHRoaXMuaW5kZW50ID0gdGhpcy4jb3B0aW9ucy5pbmRlbnQ7XG5cblx0XHRpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICd0ZXN0Jykge1xuXHRcdFx0dGhpcy5fc3RyZWFtID0gdGhpcy4jc3RyZWFtO1xuXHRcdFx0dGhpcy5faXNFbmFibGVkID0gdGhpcy4jaXNFbmFibGVkO1xuXG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ19saW5lc1RvQ2xlYXInLCB7XG5cdFx0XHRcdGdldCgpIHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy4jbGluZXNUb0NsZWFyO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRzZXQobmV3VmFsdWUpIHtcblx0XHRcdFx0XHR0aGlzLiNsaW5lc1RvQ2xlYXIgPSBuZXdWYWx1ZTtcblx0XHRcdFx0fSxcblx0XHRcdH0pO1xuXG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ19mcmFtZUluZGV4Jywge1xuXHRcdFx0XHRnZXQoKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuI2ZyYW1lSW5kZXg7XG5cdFx0XHRcdH0sXG5cdFx0XHR9KTtcblxuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdfbGluZUNvdW50Jywge1xuXHRcdFx0XHRnZXQoKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuI2xpbmVDb3VudDtcblx0XHRcdFx0fSxcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdGdldCBpbmRlbnQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuI2luZGVudDtcblx0fVxuXG5cdHNldCBpbmRlbnQoaW5kZW50ID0gMCkge1xuXHRcdGlmICghKGluZGVudCA+PSAwICYmIE51bWJlci5pc0ludGVnZXIoaW5kZW50KSkpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcignVGhlIGBpbmRlbnRgIG9wdGlvbiBtdXN0IGJlIGFuIGludGVnZXIgZnJvbSAwIGFuZCB1cCcpO1xuXHRcdH1cblxuXHRcdHRoaXMuI2luZGVudCA9IGluZGVudDtcblx0XHR0aGlzLiN1cGRhdGVMaW5lQ291bnQoKTtcblx0fVxuXG5cdGdldCBpbnRlcnZhbCgpIHtcblx0XHRyZXR1cm4gdGhpcy4jaW5pdGlhbEludGVydmFsID8/IHRoaXMuI3NwaW5uZXIuaW50ZXJ2YWwgPz8gMTAwO1xuXHR9XG5cblx0Z2V0IHNwaW5uZXIoKSB7XG5cdFx0cmV0dXJuIHRoaXMuI3NwaW5uZXI7XG5cdH1cblxuXHRzZXQgc3Bpbm5lcihzcGlubmVyKSB7XG5cdFx0dGhpcy4jZnJhbWVJbmRleCA9IDA7XG5cdFx0dGhpcy4jaW5pdGlhbEludGVydmFsID0gdW5kZWZpbmVkO1xuXG5cdFx0aWYgKHR5cGVvZiBzcGlubmVyID09PSAnb2JqZWN0Jykge1xuXHRcdFx0aWYgKHNwaW5uZXIuZnJhbWVzID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCdUaGUgZ2l2ZW4gc3Bpbm5lciBtdXN0IGhhdmUgYSBgZnJhbWVzYCBwcm9wZXJ0eScpO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLiNzcGlubmVyID0gc3Bpbm5lcjtcblx0XHR9IGVsc2UgaWYgKCFpc1VuaWNvZGVTdXBwb3J0ZWQoKSkge1xuXHRcdFx0dGhpcy4jc3Bpbm5lciA9IGNsaVNwaW5uZXJzLmxpbmU7XG5cdFx0fSBlbHNlIGlmIChzcGlubmVyID09PSB1bmRlZmluZWQpIHtcblx0XHRcdC8vIFNldCBkZWZhdWx0IHNwaW5uZXJcblx0XHRcdHRoaXMuI3NwaW5uZXIgPSBjbGlTcGlubmVycy5kb3RzO1xuXHRcdH0gZWxzZSBpZiAoc3Bpbm5lciAhPT0gJ2RlZmF1bHQnICYmIGNsaVNwaW5uZXJzW3NwaW5uZXJdKSB7XG5cdFx0XHR0aGlzLiNzcGlubmVyID0gY2xpU3Bpbm5lcnNbc3Bpbm5lcl07XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihgVGhlcmUgaXMgbm8gYnVpbHQtaW4gc3Bpbm5lciBuYW1lZCAnJHtzcGlubmVyfScuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vc2luZHJlc29yaHVzL2NsaS1zcGlubmVycy9ibG9iL21haW4vc3Bpbm5lcnMuanNvbiBmb3IgYSBmdWxsIGxpc3QuYCk7XG5cdFx0fVxuXHR9XG5cblx0Z2V0IHRleHQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuI3RleHQ7XG5cdH1cblxuXHRzZXQgdGV4dCh2YWx1ZSA9ICcnKSB7XG5cdFx0dGhpcy4jdGV4dCA9IHZhbHVlO1xuXHRcdHRoaXMuI3VwZGF0ZUxpbmVDb3VudCgpO1xuXHR9XG5cblx0Z2V0IHByZWZpeFRleHQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuI3ByZWZpeFRleHQ7XG5cdH1cblxuXHRzZXQgcHJlZml4VGV4dCh2YWx1ZSA9ICcnKSB7XG5cdFx0dGhpcy4jcHJlZml4VGV4dCA9IHZhbHVlO1xuXHRcdHRoaXMuI3VwZGF0ZUxpbmVDb3VudCgpO1xuXHR9XG5cblx0Z2V0IHN1ZmZpeFRleHQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuI3N1ZmZpeFRleHQ7XG5cdH1cblxuXHRzZXQgc3VmZml4VGV4dCh2YWx1ZSA9ICcnKSB7XG5cdFx0dGhpcy4jc3VmZml4VGV4dCA9IHZhbHVlO1xuXHRcdHRoaXMuI3VwZGF0ZUxpbmVDb3VudCgpO1xuXHR9XG5cblx0Z2V0IGlzU3Bpbm5pbmcoKSB7XG5cdFx0cmV0dXJuIHRoaXMuI2lkICE9PSB1bmRlZmluZWQ7XG5cdH1cblxuXHQjZ2V0RnVsbFByZWZpeFRleHQocHJlZml4VGV4dCA9IHRoaXMuI3ByZWZpeFRleHQsIHBvc3RmaXggPSAnICcpIHtcblx0XHRpZiAodHlwZW9mIHByZWZpeFRleHQgPT09ICdzdHJpbmcnICYmIHByZWZpeFRleHQgIT09ICcnKSB7XG5cdFx0XHRyZXR1cm4gcHJlZml4VGV4dCArIHBvc3RmaXg7XG5cdFx0fVxuXG5cdFx0aWYgKHR5cGVvZiBwcmVmaXhUZXh0ID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRyZXR1cm4gcHJlZml4VGV4dCgpICsgcG9zdGZpeDtcblx0XHR9XG5cblx0XHRyZXR1cm4gJyc7XG5cdH1cblxuXHQjZ2V0RnVsbFN1ZmZpeFRleHQoc3VmZml4VGV4dCA9IHRoaXMuI3N1ZmZpeFRleHQsIHByZWZpeCA9ICcgJykge1xuXHRcdGlmICh0eXBlb2Ygc3VmZml4VGV4dCA9PT0gJ3N0cmluZycgJiYgc3VmZml4VGV4dCAhPT0gJycpIHtcblx0XHRcdHJldHVybiBwcmVmaXggKyBzdWZmaXhUZXh0O1xuXHRcdH1cblxuXHRcdGlmICh0eXBlb2Ygc3VmZml4VGV4dCA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0cmV0dXJuIHByZWZpeCArIHN1ZmZpeFRleHQoKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gJyc7XG5cdH1cblxuXHQjdXBkYXRlTGluZUNvdW50KCkge1xuXHRcdGNvbnN0IGNvbHVtbnMgPSB0aGlzLiNzdHJlYW0uY29sdW1ucyA/PyA4MDtcblx0XHRjb25zdCBmdWxsUHJlZml4VGV4dCA9IHRoaXMuI2dldEZ1bGxQcmVmaXhUZXh0KHRoaXMuI3ByZWZpeFRleHQsICctJyk7XG5cdFx0Y29uc3QgZnVsbFN1ZmZpeFRleHQgPSB0aGlzLiNnZXRGdWxsU3VmZml4VGV4dCh0aGlzLiNzdWZmaXhUZXh0LCAnLScpO1xuXHRcdGNvbnN0IGZ1bGxUZXh0ID0gJyAnLnJlcGVhdCh0aGlzLiNpbmRlbnQpICsgZnVsbFByZWZpeFRleHQgKyAnLS0nICsgdGhpcy4jdGV4dCArICctLScgKyBmdWxsU3VmZml4VGV4dDtcblxuXHRcdHRoaXMuI2xpbmVDb3VudCA9IDA7XG5cdFx0Zm9yIChjb25zdCBsaW5lIG9mIHN0cmlwQW5zaShmdWxsVGV4dCkuc3BsaXQoJ1xcbicpKSB7XG5cdFx0XHR0aGlzLiNsaW5lQ291bnQgKz0gTWF0aC5tYXgoMSwgTWF0aC5jZWlsKHN0cmluZ1dpZHRoKGxpbmUsIHtjb3VudEFuc2lFc2NhcGVDb2RlczogdHJ1ZX0pIC8gY29sdW1ucykpO1xuXHRcdH1cblx0fVxuXG5cdGdldCBpc0VuYWJsZWQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuI2lzRW5hYmxlZCAmJiAhdGhpcy4jaXNTaWxlbnQ7XG5cdH1cblxuXHRzZXQgaXNFbmFibGVkKHZhbHVlKSB7XG5cdFx0aWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ2Jvb2xlYW4nKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgYGlzRW5hYmxlZGAgb3B0aW9uIG11c3QgYmUgYSBib29sZWFuJyk7XG5cdFx0fVxuXG5cdFx0dGhpcy4jaXNFbmFibGVkID0gdmFsdWU7XG5cdH1cblxuXHRnZXQgaXNTaWxlbnQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuI2lzU2lsZW50O1xuXHR9XG5cblx0c2V0IGlzU2lsZW50KHZhbHVlKSB7XG5cdFx0aWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ2Jvb2xlYW4nKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgYGlzU2lsZW50YCBvcHRpb24gbXVzdCBiZSBhIGJvb2xlYW4nKTtcblx0XHR9XG5cblx0XHR0aGlzLiNpc1NpbGVudCA9IHZhbHVlO1xuXHR9XG5cblx0ZnJhbWUoKSB7XG5cdFx0Y29uc3Qge2ZyYW1lc30gPSB0aGlzLiNzcGlubmVyO1xuXHRcdGxldCBmcmFtZSA9IGZyYW1lc1t0aGlzLiNmcmFtZUluZGV4XTtcblxuXHRcdGlmICh0aGlzLmNvbG9yKSB7XG5cdFx0XHRmcmFtZSA9IGNoYWxrW3RoaXMuY29sb3JdKGZyYW1lKTtcblx0XHR9XG5cblx0XHR0aGlzLiNmcmFtZUluZGV4ID0gKyt0aGlzLiNmcmFtZUluZGV4ICUgZnJhbWVzLmxlbmd0aDtcblx0XHRjb25zdCBmdWxsUHJlZml4VGV4dCA9ICh0eXBlb2YgdGhpcy4jcHJlZml4VGV4dCA9PT0gJ3N0cmluZycgJiYgdGhpcy4jcHJlZml4VGV4dCAhPT0gJycpID8gdGhpcy4jcHJlZml4VGV4dCArICcgJyA6ICcnO1xuXHRcdGNvbnN0IGZ1bGxUZXh0ID0gdHlwZW9mIHRoaXMudGV4dCA9PT0gJ3N0cmluZycgPyAnICcgKyB0aGlzLnRleHQgOiAnJztcblx0XHRjb25zdCBmdWxsU3VmZml4VGV4dCA9ICh0eXBlb2YgdGhpcy4jc3VmZml4VGV4dCA9PT0gJ3N0cmluZycgJiYgdGhpcy4jc3VmZml4VGV4dCAhPT0gJycpID8gJyAnICsgdGhpcy4jc3VmZml4VGV4dCA6ICcnO1xuXG5cdFx0cmV0dXJuIGZ1bGxQcmVmaXhUZXh0ICsgZnJhbWUgKyBmdWxsVGV4dCArIGZ1bGxTdWZmaXhUZXh0O1xuXHR9XG5cblx0Y2xlYXIoKSB7XG5cdFx0aWYgKCF0aGlzLiNpc0VuYWJsZWQgfHwgIXRoaXMuI3N0cmVhbS5pc1RUWSkge1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0dGhpcy4jc3RyZWFtLmN1cnNvclRvKDApO1xuXG5cdFx0Zm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMuI2xpbmVzVG9DbGVhcjsgaW5kZXgrKykge1xuXHRcdFx0aWYgKGluZGV4ID4gMCkge1xuXHRcdFx0XHR0aGlzLiNzdHJlYW0ubW92ZUN1cnNvcigwLCAtMSk7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuI3N0cmVhbS5jbGVhckxpbmUoMSk7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuI2luZGVudCB8fCB0aGlzLmxhc3RJbmRlbnQgIT09IHRoaXMuI2luZGVudCkge1xuXHRcdFx0dGhpcy4jc3RyZWFtLmN1cnNvclRvKHRoaXMuI2luZGVudCk7XG5cdFx0fVxuXG5cdFx0dGhpcy5sYXN0SW5kZW50ID0gdGhpcy4jaW5kZW50O1xuXHRcdHRoaXMuI2xpbmVzVG9DbGVhciA9IDA7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHJlbmRlcigpIHtcblx0XHRpZiAodGhpcy4jaXNTaWxlbnQpIHtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdHRoaXMuY2xlYXIoKTtcblx0XHR0aGlzLiNzdHJlYW0ud3JpdGUodGhpcy5mcmFtZSgpKTtcblx0XHR0aGlzLiNsaW5lc1RvQ2xlYXIgPSB0aGlzLiNsaW5lQ291bnQ7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHN0YXJ0KHRleHQpIHtcblx0XHRpZiAodGV4dCkge1xuXHRcdFx0dGhpcy50ZXh0ID0gdGV4dDtcblx0XHR9XG5cblx0XHRpZiAodGhpcy4jaXNTaWxlbnQpIHtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdGlmICghdGhpcy4jaXNFbmFibGVkKSB7XG5cdFx0XHRpZiAodGhpcy50ZXh0KSB7XG5cdFx0XHRcdHRoaXMuI3N0cmVhbS53cml0ZShgLSAke3RoaXMudGV4dH1cXG5gKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuaXNTcGlubmluZykge1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuI29wdGlvbnMuaGlkZUN1cnNvcikge1xuXHRcdFx0Y2xpQ3Vyc29yLmhpZGUodGhpcy4jc3RyZWFtKTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy4jb3B0aW9ucy5kaXNjYXJkU3RkaW4gJiYgcHJvY2Vzcy5zdGRpbi5pc1RUWSkge1xuXHRcdFx0dGhpcy4jaXNEaXNjYXJkaW5nU3RkaW4gPSB0cnVlO1xuXHRcdFx0c3RkaW5EaXNjYXJkZXIuc3RhcnQoKTtcblx0XHR9XG5cblx0XHR0aGlzLnJlbmRlcigpO1xuXHRcdHRoaXMuI2lkID0gc2V0SW50ZXJ2YWwodGhpcy5yZW5kZXIuYmluZCh0aGlzKSwgdGhpcy5pbnRlcnZhbCk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHN0b3AoKSB7XG5cdFx0aWYgKCF0aGlzLiNpc0VuYWJsZWQpIHtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdGNsZWFySW50ZXJ2YWwodGhpcy4jaWQpO1xuXHRcdHRoaXMuI2lkID0gdW5kZWZpbmVkO1xuXHRcdHRoaXMuI2ZyYW1lSW5kZXggPSAwO1xuXHRcdHRoaXMuY2xlYXIoKTtcblx0XHRpZiAodGhpcy4jb3B0aW9ucy5oaWRlQ3Vyc29yKSB7XG5cdFx0XHRjbGlDdXJzb3Iuc2hvdyh0aGlzLiNzdHJlYW0pO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLiNvcHRpb25zLmRpc2NhcmRTdGRpbiAmJiBwcm9jZXNzLnN0ZGluLmlzVFRZICYmIHRoaXMuI2lzRGlzY2FyZGluZ1N0ZGluKSB7XG5cdFx0XHRzdGRpbkRpc2NhcmRlci5zdG9wKCk7XG5cdFx0XHR0aGlzLiNpc0Rpc2NhcmRpbmdTdGRpbiA9IGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0c3VjY2VlZCh0ZXh0KSB7XG5cdFx0cmV0dXJuIHRoaXMuc3RvcEFuZFBlcnNpc3Qoe3N5bWJvbDogbG9nU3ltYm9scy5zdWNjZXNzLCB0ZXh0fSk7XG5cdH1cblxuXHRmYWlsKHRleHQpIHtcblx0XHRyZXR1cm4gdGhpcy5zdG9wQW5kUGVyc2lzdCh7c3ltYm9sOiBsb2dTeW1ib2xzLmVycm9yLCB0ZXh0fSk7XG5cdH1cblxuXHR3YXJuKHRleHQpIHtcblx0XHRyZXR1cm4gdGhpcy5zdG9wQW5kUGVyc2lzdCh7c3ltYm9sOiBsb2dTeW1ib2xzLndhcm5pbmcsIHRleHR9KTtcblx0fVxuXG5cdGluZm8odGV4dCkge1xuXHRcdHJldHVybiB0aGlzLnN0b3BBbmRQZXJzaXN0KHtzeW1ib2w6IGxvZ1N5bWJvbHMuaW5mbywgdGV4dH0pO1xuXHR9XG5cblx0c3RvcEFuZFBlcnNpc3Qob3B0aW9ucyA9IHt9KSB7XG5cdFx0aWYgKHRoaXMuI2lzU2lsZW50KSB7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHRjb25zdCBwcmVmaXhUZXh0ID0gb3B0aW9ucy5wcmVmaXhUZXh0ID8/IHRoaXMuI3ByZWZpeFRleHQ7XG5cdFx0Y29uc3QgZnVsbFByZWZpeFRleHQgPSB0aGlzLiNnZXRGdWxsUHJlZml4VGV4dChwcmVmaXhUZXh0LCAnICcpO1xuXG5cdFx0Y29uc3Qgc3ltYm9sVGV4dCA9IG9wdGlvbnMuc3ltYm9sID8/ICcgJztcblxuXHRcdGNvbnN0IHRleHQgPSBvcHRpb25zLnRleHQgPz8gdGhpcy50ZXh0O1xuXHRcdGNvbnN0IGZ1bGxUZXh0ID0gKHR5cGVvZiB0ZXh0ID09PSAnc3RyaW5nJykgPyAnICcgKyB0ZXh0IDogJyc7XG5cblx0XHRjb25zdCBzdWZmaXhUZXh0ID0gb3B0aW9ucy5zdWZmaXhUZXh0ID8/IHRoaXMuI3N1ZmZpeFRleHQ7XG5cdFx0Y29uc3QgZnVsbFN1ZmZpeFRleHQgPSB0aGlzLiNnZXRGdWxsU3VmZml4VGV4dChzdWZmaXhUZXh0LCAnICcpO1xuXG5cdFx0Y29uc3QgdGV4dFRvV3JpdGUgPSBmdWxsUHJlZml4VGV4dCArIHN5bWJvbFRleHQgKyBmdWxsVGV4dCArIGZ1bGxTdWZmaXhUZXh0ICsgJ1xcbic7XG5cblx0XHR0aGlzLnN0b3AoKTtcblx0XHR0aGlzLiNzdHJlYW0ud3JpdGUodGV4dFRvV3JpdGUpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gb3JhKG9wdGlvbnMpIHtcblx0cmV0dXJuIG5ldyBPcmEob3B0aW9ucyk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBvcmFQcm9taXNlKGFjdGlvbiwgb3B0aW9ucykge1xuXHRjb25zdCBhY3Rpb25Jc0Z1bmN0aW9uID0gdHlwZW9mIGFjdGlvbiA9PT0gJ2Z1bmN0aW9uJztcblx0Y29uc3QgYWN0aW9uSXNQcm9taXNlID0gdHlwZW9mIGFjdGlvbi50aGVuID09PSAnZnVuY3Rpb24nO1xuXG5cdGlmICghYWN0aW9uSXNGdW5jdGlvbiAmJiAhYWN0aW9uSXNQcm9taXNlKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignUGFyYW1ldGVyIGBhY3Rpb25gIG11c3QgYmUgYSBGdW5jdGlvbiBvciBhIFByb21pc2UnKTtcblx0fVxuXG5cdGNvbnN0IHtzdWNjZXNzVGV4dCwgZmFpbFRleHR9ID0gdHlwZW9mIG9wdGlvbnMgPT09ICdvYmplY3QnXG5cdFx0PyBvcHRpb25zXG5cdFx0OiB7c3VjY2Vzc1RleHQ6IHVuZGVmaW5lZCwgZmFpbFRleHQ6IHVuZGVmaW5lZH07XG5cblx0Y29uc3Qgc3Bpbm5lciA9IG9yYShvcHRpb25zKS5zdGFydCgpO1xuXG5cdHRyeSB7XG5cdFx0Y29uc3QgcHJvbWlzZSA9IGFjdGlvbklzRnVuY3Rpb24gPyBhY3Rpb24oc3Bpbm5lcikgOiBhY3Rpb247XG5cdFx0Y29uc3QgcmVzdWx0ID0gYXdhaXQgcHJvbWlzZTtcblxuXHRcdHNwaW5uZXIuc3VjY2VlZChcblx0XHRcdHN1Y2Nlc3NUZXh0ID09PSB1bmRlZmluZWRcblx0XHRcdFx0PyB1bmRlZmluZWRcblx0XHRcdFx0OiAodHlwZW9mIHN1Y2Nlc3NUZXh0ID09PSAnc3RyaW5nJyA/IHN1Y2Nlc3NUZXh0IDogc3VjY2Vzc1RleHQocmVzdWx0KSksXG5cdFx0KTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0c3Bpbm5lci5mYWlsKFxuXHRcdFx0ZmFpbFRleHQgPT09IHVuZGVmaW5lZFxuXHRcdFx0XHQ/IHVuZGVmaW5lZFxuXHRcdFx0XHQ6ICh0eXBlb2YgZmFpbFRleHQgPT09ICdzdHJpbmcnID8gZmFpbFRleHQgOiBmYWlsVGV4dChlcnJvcikpLFxuXHRcdCk7XG5cblx0XHR0aHJvdyBlcnJvcjtcblx0fVxufVxuXG5leHBvcnQge2RlZmF1bHQgYXMgc3Bpbm5lcnN9IGZyb20gJ2NsaS1zcGlubmVycyc7XG4iLCAiY29uc3QgQU5TSV9CQUNLR1JPVU5EX09GRlNFVCA9IDEwO1xuXG5jb25zdCB3cmFwQW5zaTE2ID0gKG9mZnNldCA9IDApID0+IGNvZGUgPT4gYFxcdTAwMUJbJHtjb2RlICsgb2Zmc2V0fW1gO1xuXG5jb25zdCB3cmFwQW5zaTI1NiA9IChvZmZzZXQgPSAwKSA9PiBjb2RlID0+IGBcXHUwMDFCWyR7MzggKyBvZmZzZXR9OzU7JHtjb2RlfW1gO1xuXG5jb25zdCB3cmFwQW5zaTE2bSA9IChvZmZzZXQgPSAwKSA9PiAocmVkLCBncmVlbiwgYmx1ZSkgPT4gYFxcdTAwMUJbJHszOCArIG9mZnNldH07Mjske3JlZH07JHtncmVlbn07JHtibHVlfW1gO1xuXG5jb25zdCBzdHlsZXMgPSB7XG5cdG1vZGlmaWVyOiB7XG5cdFx0cmVzZXQ6IFswLCAwXSxcblx0XHQvLyAyMSBpc24ndCB3aWRlbHkgc3VwcG9ydGVkIGFuZCAyMiBkb2VzIHRoZSBzYW1lIHRoaW5nXG5cdFx0Ym9sZDogWzEsIDIyXSxcblx0XHRkaW06IFsyLCAyMl0sXG5cdFx0aXRhbGljOiBbMywgMjNdLFxuXHRcdHVuZGVybGluZTogWzQsIDI0XSxcblx0XHRvdmVybGluZTogWzUzLCA1NV0sXG5cdFx0aW52ZXJzZTogWzcsIDI3XSxcblx0XHRoaWRkZW46IFs4LCAyOF0sXG5cdFx0c3RyaWtldGhyb3VnaDogWzksIDI5XSxcblx0fSxcblx0Y29sb3I6IHtcblx0XHRibGFjazogWzMwLCAzOV0sXG5cdFx0cmVkOiBbMzEsIDM5XSxcblx0XHRncmVlbjogWzMyLCAzOV0sXG5cdFx0eWVsbG93OiBbMzMsIDM5XSxcblx0XHRibHVlOiBbMzQsIDM5XSxcblx0XHRtYWdlbnRhOiBbMzUsIDM5XSxcblx0XHRjeWFuOiBbMzYsIDM5XSxcblx0XHR3aGl0ZTogWzM3LCAzOV0sXG5cblx0XHQvLyBCcmlnaHQgY29sb3Jcblx0XHRibGFja0JyaWdodDogWzkwLCAzOV0sXG5cdFx0Z3JheTogWzkwLCAzOV0sIC8vIEFsaWFzIG9mIGBibGFja0JyaWdodGBcblx0XHRncmV5OiBbOTAsIDM5XSwgLy8gQWxpYXMgb2YgYGJsYWNrQnJpZ2h0YFxuXHRcdHJlZEJyaWdodDogWzkxLCAzOV0sXG5cdFx0Z3JlZW5CcmlnaHQ6IFs5MiwgMzldLFxuXHRcdHllbGxvd0JyaWdodDogWzkzLCAzOV0sXG5cdFx0Ymx1ZUJyaWdodDogWzk0LCAzOV0sXG5cdFx0bWFnZW50YUJyaWdodDogWzk1LCAzOV0sXG5cdFx0Y3lhbkJyaWdodDogWzk2LCAzOV0sXG5cdFx0d2hpdGVCcmlnaHQ6IFs5NywgMzldLFxuXHR9LFxuXHRiZ0NvbG9yOiB7XG5cdFx0YmdCbGFjazogWzQwLCA0OV0sXG5cdFx0YmdSZWQ6IFs0MSwgNDldLFxuXHRcdGJnR3JlZW46IFs0MiwgNDldLFxuXHRcdGJnWWVsbG93OiBbNDMsIDQ5XSxcblx0XHRiZ0JsdWU6IFs0NCwgNDldLFxuXHRcdGJnTWFnZW50YTogWzQ1LCA0OV0sXG5cdFx0YmdDeWFuOiBbNDYsIDQ5XSxcblx0XHRiZ1doaXRlOiBbNDcsIDQ5XSxcblxuXHRcdC8vIEJyaWdodCBjb2xvclxuXHRcdGJnQmxhY2tCcmlnaHQ6IFsxMDAsIDQ5XSxcblx0XHRiZ0dyYXk6IFsxMDAsIDQ5XSwgLy8gQWxpYXMgb2YgYGJnQmxhY2tCcmlnaHRgXG5cdFx0YmdHcmV5OiBbMTAwLCA0OV0sIC8vIEFsaWFzIG9mIGBiZ0JsYWNrQnJpZ2h0YFxuXHRcdGJnUmVkQnJpZ2h0OiBbMTAxLCA0OV0sXG5cdFx0YmdHcmVlbkJyaWdodDogWzEwMiwgNDldLFxuXHRcdGJnWWVsbG93QnJpZ2h0OiBbMTAzLCA0OV0sXG5cdFx0YmdCbHVlQnJpZ2h0OiBbMTA0LCA0OV0sXG5cdFx0YmdNYWdlbnRhQnJpZ2h0OiBbMTA1LCA0OV0sXG5cdFx0YmdDeWFuQnJpZ2h0OiBbMTA2LCA0OV0sXG5cdFx0YmdXaGl0ZUJyaWdodDogWzEwNywgNDldLFxuXHR9LFxufTtcblxuZXhwb3J0IGNvbnN0IG1vZGlmaWVyTmFtZXMgPSBPYmplY3Qua2V5cyhzdHlsZXMubW9kaWZpZXIpO1xuZXhwb3J0IGNvbnN0IGZvcmVncm91bmRDb2xvck5hbWVzID0gT2JqZWN0LmtleXMoc3R5bGVzLmNvbG9yKTtcbmV4cG9ydCBjb25zdCBiYWNrZ3JvdW5kQ29sb3JOYW1lcyA9IE9iamVjdC5rZXlzKHN0eWxlcy5iZ0NvbG9yKTtcbmV4cG9ydCBjb25zdCBjb2xvck5hbWVzID0gWy4uLmZvcmVncm91bmRDb2xvck5hbWVzLCAuLi5iYWNrZ3JvdW5kQ29sb3JOYW1lc107XG5cbmZ1bmN0aW9uIGFzc2VtYmxlU3R5bGVzKCkge1xuXHRjb25zdCBjb2RlcyA9IG5ldyBNYXAoKTtcblxuXHRmb3IgKGNvbnN0IFtncm91cE5hbWUsIGdyb3VwXSBvZiBPYmplY3QuZW50cmllcyhzdHlsZXMpKSB7XG5cdFx0Zm9yIChjb25zdCBbc3R5bGVOYW1lLCBzdHlsZV0gb2YgT2JqZWN0LmVudHJpZXMoZ3JvdXApKSB7XG5cdFx0XHRzdHlsZXNbc3R5bGVOYW1lXSA9IHtcblx0XHRcdFx0b3BlbjogYFxcdTAwMUJbJHtzdHlsZVswXX1tYCxcblx0XHRcdFx0Y2xvc2U6IGBcXHUwMDFCWyR7c3R5bGVbMV19bWAsXG5cdFx0XHR9O1xuXG5cdFx0XHRncm91cFtzdHlsZU5hbWVdID0gc3R5bGVzW3N0eWxlTmFtZV07XG5cblx0XHRcdGNvZGVzLnNldChzdHlsZVswXSwgc3R5bGVbMV0pO1xuXHRcdH1cblxuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzdHlsZXMsIGdyb3VwTmFtZSwge1xuXHRcdFx0dmFsdWU6IGdyb3VwLFxuXHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0fSk7XG5cdH1cblxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoc3R5bGVzLCAnY29kZXMnLCB7XG5cdFx0dmFsdWU6IGNvZGVzLFxuXHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHR9KTtcblxuXHRzdHlsZXMuY29sb3IuY2xvc2UgPSAnXFx1MDAxQlszOW0nO1xuXHRzdHlsZXMuYmdDb2xvci5jbG9zZSA9ICdcXHUwMDFCWzQ5bSc7XG5cblx0c3R5bGVzLmNvbG9yLmFuc2kgPSB3cmFwQW5zaTE2KCk7XG5cdHN0eWxlcy5jb2xvci5hbnNpMjU2ID0gd3JhcEFuc2kyNTYoKTtcblx0c3R5bGVzLmNvbG9yLmFuc2kxNm0gPSB3cmFwQW5zaTE2bSgpO1xuXHRzdHlsZXMuYmdDb2xvci5hbnNpID0gd3JhcEFuc2kxNihBTlNJX0JBQ0tHUk9VTkRfT0ZGU0VUKTtcblx0c3R5bGVzLmJnQ29sb3IuYW5zaTI1NiA9IHdyYXBBbnNpMjU2KEFOU0lfQkFDS0dST1VORF9PRkZTRVQpO1xuXHRzdHlsZXMuYmdDb2xvci5hbnNpMTZtID0gd3JhcEFuc2kxNm0oQU5TSV9CQUNLR1JPVU5EX09GRlNFVCk7XG5cblx0Ly8gRnJvbSBodHRwczovL2dpdGh1Yi5jb20vUWl4LS9jb2xvci1jb252ZXJ0L2Jsb2IvM2YwZTBkNGU5MmUyMzU3OTZjY2IxN2Y2ZTg1YzcyMDk0YTY1MWY0OS9jb252ZXJzaW9ucy5qc1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydGllcyhzdHlsZXMsIHtcblx0XHRyZ2JUb0Fuc2kyNTY6IHtcblx0XHRcdHZhbHVlKHJlZCwgZ3JlZW4sIGJsdWUpIHtcblx0XHRcdFx0Ly8gV2UgdXNlIHRoZSBleHRlbmRlZCBncmV5c2NhbGUgcGFsZXR0ZSBoZXJlLCB3aXRoIHRoZSBleGNlcHRpb24gb2Zcblx0XHRcdFx0Ly8gYmxhY2sgYW5kIHdoaXRlLiBub3JtYWwgcGFsZXR0ZSBvbmx5IGhhcyA0IGdyZXlzY2FsZSBzaGFkZXMuXG5cdFx0XHRcdGlmIChyZWQgPT09IGdyZWVuICYmIGdyZWVuID09PSBibHVlKSB7XG5cdFx0XHRcdFx0aWYgKHJlZCA8IDgpIHtcblx0XHRcdFx0XHRcdHJldHVybiAxNjtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAocmVkID4gMjQ4KSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gMjMxO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJldHVybiBNYXRoLnJvdW5kKCgocmVkIC0gOCkgLyAyNDcpICogMjQpICsgMjMyO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIDE2XG5cdFx0XHRcdFx0KyAoMzYgKiBNYXRoLnJvdW5kKHJlZCAvIDI1NSAqIDUpKVxuXHRcdFx0XHRcdCsgKDYgKiBNYXRoLnJvdW5kKGdyZWVuIC8gMjU1ICogNSkpXG5cdFx0XHRcdFx0KyBNYXRoLnJvdW5kKGJsdWUgLyAyNTUgKiA1KTtcblx0XHRcdH0sXG5cdFx0XHRlbnVtZXJhYmxlOiBmYWxzZSxcblx0XHR9LFxuXHRcdGhleFRvUmdiOiB7XG5cdFx0XHR2YWx1ZShoZXgpIHtcblx0XHRcdFx0Y29uc3QgbWF0Y2hlcyA9IC9bYS1mXFxkXXs2fXxbYS1mXFxkXXszfS9pLmV4ZWMoaGV4LnRvU3RyaW5nKDE2KSk7XG5cdFx0XHRcdGlmICghbWF0Y2hlcykge1xuXHRcdFx0XHRcdHJldHVybiBbMCwgMCwgMF07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRsZXQgW2NvbG9yU3RyaW5nXSA9IG1hdGNoZXM7XG5cblx0XHRcdFx0aWYgKGNvbG9yU3RyaW5nLmxlbmd0aCA9PT0gMykge1xuXHRcdFx0XHRcdGNvbG9yU3RyaW5nID0gWy4uLmNvbG9yU3RyaW5nXS5tYXAoY2hhcmFjdGVyID0+IGNoYXJhY3RlciArIGNoYXJhY3Rlcikuam9pbignJyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCBpbnRlZ2VyID0gTnVtYmVyLnBhcnNlSW50KGNvbG9yU3RyaW5nLCAxNik7XG5cblx0XHRcdFx0cmV0dXJuIFtcblx0XHRcdFx0XHQvKiBlc2xpbnQtZGlzYWJsZSBuby1iaXR3aXNlICovXG5cdFx0XHRcdFx0KGludGVnZXIgPj4gMTYpICYgMHhGRixcblx0XHRcdFx0XHQoaW50ZWdlciA+PiA4KSAmIDB4RkYsXG5cdFx0XHRcdFx0aW50ZWdlciAmIDB4RkYsXG5cdFx0XHRcdFx0LyogZXNsaW50LWVuYWJsZSBuby1iaXR3aXNlICovXG5cdFx0XHRcdF07XG5cdFx0XHR9LFxuXHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0fSxcblx0XHRoZXhUb0Fuc2kyNTY6IHtcblx0XHRcdHZhbHVlOiBoZXggPT4gc3R5bGVzLnJnYlRvQW5zaTI1NiguLi5zdHlsZXMuaGV4VG9SZ2IoaGV4KSksXG5cdFx0XHRlbnVtZXJhYmxlOiBmYWxzZSxcblx0XHR9LFxuXHRcdGFuc2kyNTZUb0Fuc2k6IHtcblx0XHRcdHZhbHVlKGNvZGUpIHtcblx0XHRcdFx0aWYgKGNvZGUgPCA4KSB7XG5cdFx0XHRcdFx0cmV0dXJuIDMwICsgY29kZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChjb2RlIDwgMTYpIHtcblx0XHRcdFx0XHRyZXR1cm4gOTAgKyAoY29kZSAtIDgpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0bGV0IHJlZDtcblx0XHRcdFx0bGV0IGdyZWVuO1xuXHRcdFx0XHRsZXQgYmx1ZTtcblxuXHRcdFx0XHRpZiAoY29kZSA+PSAyMzIpIHtcblx0XHRcdFx0XHRyZWQgPSAoKChjb2RlIC0gMjMyKSAqIDEwKSArIDgpIC8gMjU1O1xuXHRcdFx0XHRcdGdyZWVuID0gcmVkO1xuXHRcdFx0XHRcdGJsdWUgPSByZWQ7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29kZSAtPSAxNjtcblxuXHRcdFx0XHRcdGNvbnN0IHJlbWFpbmRlciA9IGNvZGUgJSAzNjtcblxuXHRcdFx0XHRcdHJlZCA9IE1hdGguZmxvb3IoY29kZSAvIDM2KSAvIDU7XG5cdFx0XHRcdFx0Z3JlZW4gPSBNYXRoLmZsb29yKHJlbWFpbmRlciAvIDYpIC8gNTtcblx0XHRcdFx0XHRibHVlID0gKHJlbWFpbmRlciAlIDYpIC8gNTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbnN0IHZhbHVlID0gTWF0aC5tYXgocmVkLCBncmVlbiwgYmx1ZSkgKiAyO1xuXG5cdFx0XHRcdGlmICh2YWx1ZSA9PT0gMCkge1xuXHRcdFx0XHRcdHJldHVybiAzMDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1iaXR3aXNlXG5cdFx0XHRcdGxldCByZXN1bHQgPSAzMCArICgoTWF0aC5yb3VuZChibHVlKSA8PCAyKSB8IChNYXRoLnJvdW5kKGdyZWVuKSA8PCAxKSB8IE1hdGgucm91bmQocmVkKSk7XG5cblx0XHRcdFx0aWYgKHZhbHVlID09PSAyKSB7XG5cdFx0XHRcdFx0cmVzdWx0ICs9IDYwO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHRcdH0sXG5cdFx0XHRlbnVtZXJhYmxlOiBmYWxzZSxcblx0XHR9LFxuXHRcdHJnYlRvQW5zaToge1xuXHRcdFx0dmFsdWU6IChyZWQsIGdyZWVuLCBibHVlKSA9PiBzdHlsZXMuYW5zaTI1NlRvQW5zaShzdHlsZXMucmdiVG9BbnNpMjU2KHJlZCwgZ3JlZW4sIGJsdWUpKSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdH0sXG5cdFx0aGV4VG9BbnNpOiB7XG5cdFx0XHR2YWx1ZTogaGV4ID0+IHN0eWxlcy5hbnNpMjU2VG9BbnNpKHN0eWxlcy5oZXhUb0Fuc2kyNTYoaGV4KSksXG5cdFx0XHRlbnVtZXJhYmxlOiBmYWxzZSxcblx0XHR9LFxuXHR9KTtcblxuXHRyZXR1cm4gc3R5bGVzO1xufVxuXG5jb25zdCBhbnNpU3R5bGVzID0gYXNzZW1ibGVTdHlsZXMoKTtcblxuZXhwb3J0IGRlZmF1bHQgYW5zaVN0eWxlcztcbiIsICJpbXBvcnQgcHJvY2VzcyBmcm9tICdub2RlOnByb2Nlc3MnO1xuaW1wb3J0IG9zIGZyb20gJ25vZGU6b3MnO1xuaW1wb3J0IHR0eSBmcm9tICdub2RlOnR0eSc7XG5cbi8vIEZyb206IGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5kcmVzb3JodXMvaGFzLWZsYWcvYmxvYi9tYWluL2luZGV4LmpzXG4vLy8gZnVuY3Rpb24gaGFzRmxhZyhmbGFnLCBhcmd2ID0gZ2xvYmFsVGhpcy5EZW5vPy5hcmdzID8/IHByb2Nlc3MuYXJndikge1xuZnVuY3Rpb24gaGFzRmxhZyhmbGFnLCBhcmd2ID0gZ2xvYmFsVGhpcy5EZW5vID8gZ2xvYmFsVGhpcy5EZW5vLmFyZ3MgOiBwcm9jZXNzLmFyZ3YpIHtcblx0Y29uc3QgcHJlZml4ID0gZmxhZy5zdGFydHNXaXRoKCctJykgPyAnJyA6IChmbGFnLmxlbmd0aCA9PT0gMSA/ICctJyA6ICctLScpO1xuXHRjb25zdCBwb3NpdGlvbiA9IGFyZ3YuaW5kZXhPZihwcmVmaXggKyBmbGFnKTtcblx0Y29uc3QgdGVybWluYXRvclBvc2l0aW9uID0gYXJndi5pbmRleE9mKCctLScpO1xuXHRyZXR1cm4gcG9zaXRpb24gIT09IC0xICYmICh0ZXJtaW5hdG9yUG9zaXRpb24gPT09IC0xIHx8IHBvc2l0aW9uIDwgdGVybWluYXRvclBvc2l0aW9uKTtcbn1cblxuY29uc3Qge2Vudn0gPSBwcm9jZXNzO1xuXG5sZXQgZmxhZ0ZvcmNlQ29sb3I7XG5pZiAoXG5cdGhhc0ZsYWcoJ25vLWNvbG9yJylcblx0fHwgaGFzRmxhZygnbm8tY29sb3JzJylcblx0fHwgaGFzRmxhZygnY29sb3I9ZmFsc2UnKVxuXHR8fCBoYXNGbGFnKCdjb2xvcj1uZXZlcicpXG4pIHtcblx0ZmxhZ0ZvcmNlQ29sb3IgPSAwO1xufSBlbHNlIGlmIChcblx0aGFzRmxhZygnY29sb3InKVxuXHR8fCBoYXNGbGFnKCdjb2xvcnMnKVxuXHR8fCBoYXNGbGFnKCdjb2xvcj10cnVlJylcblx0fHwgaGFzRmxhZygnY29sb3I9YWx3YXlzJylcbikge1xuXHRmbGFnRm9yY2VDb2xvciA9IDE7XG59XG5cbmZ1bmN0aW9uIGVudkZvcmNlQ29sb3IoKSB7XG5cdGlmICgnRk9SQ0VfQ09MT1InIGluIGVudikge1xuXHRcdGlmIChlbnYuRk9SQ0VfQ09MT1IgPT09ICd0cnVlJykge1xuXHRcdFx0cmV0dXJuIDE7XG5cdFx0fVxuXG5cdFx0aWYgKGVudi5GT1JDRV9DT0xPUiA9PT0gJ2ZhbHNlJykge1xuXHRcdFx0cmV0dXJuIDA7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGVudi5GT1JDRV9DT0xPUi5sZW5ndGggPT09IDAgPyAxIDogTWF0aC5taW4oTnVtYmVyLnBhcnNlSW50KGVudi5GT1JDRV9DT0xPUiwgMTApLCAzKTtcblx0fVxufVxuXG5mdW5jdGlvbiB0cmFuc2xhdGVMZXZlbChsZXZlbCkge1xuXHRpZiAobGV2ZWwgPT09IDApIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdGxldmVsLFxuXHRcdGhhc0Jhc2ljOiB0cnVlLFxuXHRcdGhhczI1NjogbGV2ZWwgPj0gMixcblx0XHRoYXMxNm06IGxldmVsID49IDMsXG5cdH07XG59XG5cbmZ1bmN0aW9uIF9zdXBwb3J0c0NvbG9yKGhhdmVTdHJlYW0sIHtzdHJlYW1Jc1RUWSwgc25pZmZGbGFncyA9IHRydWV9ID0ge30pIHtcblx0Y29uc3Qgbm9GbGFnRm9yY2VDb2xvciA9IGVudkZvcmNlQ29sb3IoKTtcblx0aWYgKG5vRmxhZ0ZvcmNlQ29sb3IgIT09IHVuZGVmaW5lZCkge1xuXHRcdGZsYWdGb3JjZUNvbG9yID0gbm9GbGFnRm9yY2VDb2xvcjtcblx0fVxuXG5cdGNvbnN0IGZvcmNlQ29sb3IgPSBzbmlmZkZsYWdzID8gZmxhZ0ZvcmNlQ29sb3IgOiBub0ZsYWdGb3JjZUNvbG9yO1xuXG5cdGlmIChmb3JjZUNvbG9yID09PSAwKSB7XG5cdFx0cmV0dXJuIDA7XG5cdH1cblxuXHRpZiAoc25pZmZGbGFncykge1xuXHRcdGlmIChoYXNGbGFnKCdjb2xvcj0xNm0nKVxuXHRcdFx0fHwgaGFzRmxhZygnY29sb3I9ZnVsbCcpXG5cdFx0XHR8fCBoYXNGbGFnKCdjb2xvcj10cnVlY29sb3InKSkge1xuXHRcdFx0cmV0dXJuIDM7XG5cdFx0fVxuXG5cdFx0aWYgKGhhc0ZsYWcoJ2NvbG9yPTI1NicpKSB7XG5cdFx0XHRyZXR1cm4gMjtcblx0XHR9XG5cdH1cblxuXHQvLyBDaGVjayBmb3IgQXp1cmUgRGV2T3BzIHBpcGVsaW5lcy5cblx0Ly8gSGFzIHRvIGJlIGFib3ZlIHRoZSBgIXN0cmVhbUlzVFRZYCBjaGVjay5cblx0aWYgKCdURl9CVUlMRCcgaW4gZW52ICYmICdBR0VOVF9OQU1FJyBpbiBlbnYpIHtcblx0XHRyZXR1cm4gMTtcblx0fVxuXG5cdGlmIChoYXZlU3RyZWFtICYmICFzdHJlYW1Jc1RUWSAmJiBmb3JjZUNvbG9yID09PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gMDtcblx0fVxuXG5cdGNvbnN0IG1pbiA9IGZvcmNlQ29sb3IgfHwgMDtcblxuXHRpZiAoZW52LlRFUk0gPT09ICdkdW1iJykge1xuXHRcdHJldHVybiBtaW47XG5cdH1cblxuXHRpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xuXHRcdC8vIFdpbmRvd3MgMTAgYnVpbGQgMTA1ODYgaXMgdGhlIGZpcnN0IFdpbmRvd3MgcmVsZWFzZSB0aGF0IHN1cHBvcnRzIDI1NiBjb2xvcnMuXG5cdFx0Ly8gV2luZG93cyAxMCBidWlsZCAxNDkzMSBpcyB0aGUgZmlyc3QgcmVsZWFzZSB0aGF0IHN1cHBvcnRzIDE2bS9UcnVlQ29sb3IuXG5cdFx0Y29uc3Qgb3NSZWxlYXNlID0gb3MucmVsZWFzZSgpLnNwbGl0KCcuJyk7XG5cdFx0aWYgKFxuXHRcdFx0TnVtYmVyKG9zUmVsZWFzZVswXSkgPj0gMTBcblx0XHRcdCYmIE51bWJlcihvc1JlbGVhc2VbMl0pID49IDEwXzU4NlxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIE51bWJlcihvc1JlbGVhc2VbMl0pID49IDE0XzkzMSA/IDMgOiAyO1xuXHRcdH1cblxuXHRcdHJldHVybiAxO1xuXHR9XG5cblx0aWYgKCdDSScgaW4gZW52KSB7XG5cdFx0aWYgKCdHSVRIVUJfQUNUSU9OUycgaW4gZW52IHx8ICdHSVRFQV9BQ1RJT05TJyBpbiBlbnYpIHtcblx0XHRcdHJldHVybiAzO1xuXHRcdH1cblxuXHRcdGlmIChbJ1RSQVZJUycsICdDSVJDTEVDSScsICdBUFBWRVlPUicsICdHSVRMQUJfQ0knLCAnQlVJTERLSVRFJywgJ0RST05FJ10uc29tZShzaWduID0+IHNpZ24gaW4gZW52KSB8fCBlbnYuQ0lfTkFNRSA9PT0gJ2NvZGVzaGlwJykge1xuXHRcdFx0cmV0dXJuIDE7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG1pbjtcblx0fVxuXG5cdGlmICgnVEVBTUNJVFlfVkVSU0lPTicgaW4gZW52KSB7XG5cdFx0cmV0dXJuIC9eKDlcXC4oMCpbMS05XVxcZCopXFwufFxcZHsyLH1cXC4pLy50ZXN0KGVudi5URUFNQ0lUWV9WRVJTSU9OKSA/IDEgOiAwO1xuXHR9XG5cblx0aWYgKGVudi5DT0xPUlRFUk0gPT09ICd0cnVlY29sb3InKSB7XG5cdFx0cmV0dXJuIDM7XG5cdH1cblxuXHRpZiAoZW52LlRFUk0gPT09ICd4dGVybS1raXR0eScpIHtcblx0XHRyZXR1cm4gMztcblx0fVxuXG5cdGlmICgnVEVSTV9QUk9HUkFNJyBpbiBlbnYpIHtcblx0XHRjb25zdCB2ZXJzaW9uID0gTnVtYmVyLnBhcnNlSW50KChlbnYuVEVSTV9QUk9HUkFNX1ZFUlNJT04gfHwgJycpLnNwbGl0KCcuJylbMF0sIDEwKTtcblxuXHRcdHN3aXRjaCAoZW52LlRFUk1fUFJPR1JBTSkge1xuXHRcdFx0Y2FzZSAnaVRlcm0uYXBwJzoge1xuXHRcdFx0XHRyZXR1cm4gdmVyc2lvbiA+PSAzID8gMyA6IDI7XG5cdFx0XHR9XG5cblx0XHRcdGNhc2UgJ0FwcGxlX1Rlcm1pbmFsJzoge1xuXHRcdFx0XHRyZXR1cm4gMjtcblx0XHRcdH1cblx0XHRcdC8vIE5vIGRlZmF1bHRcblx0XHR9XG5cdH1cblxuXHRpZiAoLy0yNTYoY29sb3IpPyQvaS50ZXN0KGVudi5URVJNKSkge1xuXHRcdHJldHVybiAyO1xuXHR9XG5cblx0aWYgKC9ec2NyZWVufF54dGVybXxednQxMDB8XnZ0MjIwfF5yeHZ0fGNvbG9yfGFuc2l8Y3lnd2lufGxpbnV4L2kudGVzdChlbnYuVEVSTSkpIHtcblx0XHRyZXR1cm4gMTtcblx0fVxuXG5cdGlmICgnQ09MT1JURVJNJyBpbiBlbnYpIHtcblx0XHRyZXR1cm4gMTtcblx0fVxuXG5cdHJldHVybiBtaW47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTdXBwb3J0c0NvbG9yKHN0cmVhbSwgb3B0aW9ucyA9IHt9KSB7XG5cdGNvbnN0IGxldmVsID0gX3N1cHBvcnRzQ29sb3Ioc3RyZWFtLCB7XG5cdFx0c3RyZWFtSXNUVFk6IHN0cmVhbSAmJiBzdHJlYW0uaXNUVFksXG5cdFx0Li4ub3B0aW9ucyxcblx0fSk7XG5cblx0cmV0dXJuIHRyYW5zbGF0ZUxldmVsKGxldmVsKTtcbn1cblxuY29uc3Qgc3VwcG9ydHNDb2xvciA9IHtcblx0c3Rkb3V0OiBjcmVhdGVTdXBwb3J0c0NvbG9yKHtpc1RUWTogdHR5LmlzYXR0eSgxKX0pLFxuXHRzdGRlcnI6IGNyZWF0ZVN1cHBvcnRzQ29sb3Ioe2lzVFRZOiB0dHkuaXNhdHR5KDIpfSksXG59O1xuXG5leHBvcnQgZGVmYXVsdCBzdXBwb3J0c0NvbG9yO1xuIiwgIi8vIFRPRE86IFdoZW4gdGFyZ2V0aW5nIE5vZGUuanMgMTYsIHVzZSBgU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlQWxsYC5cbmV4cG9ydCBmdW5jdGlvbiBzdHJpbmdSZXBsYWNlQWxsKHN0cmluZywgc3Vic3RyaW5nLCByZXBsYWNlcikge1xuXHRsZXQgaW5kZXggPSBzdHJpbmcuaW5kZXhPZihzdWJzdHJpbmcpO1xuXHRpZiAoaW5kZXggPT09IC0xKSB7XG5cdFx0cmV0dXJuIHN0cmluZztcblx0fVxuXG5cdGNvbnN0IHN1YnN0cmluZ0xlbmd0aCA9IHN1YnN0cmluZy5sZW5ndGg7XG5cdGxldCBlbmRJbmRleCA9IDA7XG5cdGxldCByZXR1cm5WYWx1ZSA9ICcnO1xuXHRkbyB7XG5cdFx0cmV0dXJuVmFsdWUgKz0gc3RyaW5nLnNsaWNlKGVuZEluZGV4LCBpbmRleCkgKyBzdWJzdHJpbmcgKyByZXBsYWNlcjtcblx0XHRlbmRJbmRleCA9IGluZGV4ICsgc3Vic3RyaW5nTGVuZ3RoO1xuXHRcdGluZGV4ID0gc3RyaW5nLmluZGV4T2Yoc3Vic3RyaW5nLCBlbmRJbmRleCk7XG5cdH0gd2hpbGUgKGluZGV4ICE9PSAtMSk7XG5cblx0cmV0dXJuVmFsdWUgKz0gc3RyaW5nLnNsaWNlKGVuZEluZGV4KTtcblx0cmV0dXJuIHJldHVyblZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RyaW5nRW5jYXNlQ1JMRldpdGhGaXJzdEluZGV4KHN0cmluZywgcHJlZml4LCBwb3N0Zml4LCBpbmRleCkge1xuXHRsZXQgZW5kSW5kZXggPSAwO1xuXHRsZXQgcmV0dXJuVmFsdWUgPSAnJztcblx0ZG8ge1xuXHRcdGNvbnN0IGdvdENSID0gc3RyaW5nW2luZGV4IC0gMV0gPT09ICdcXHInO1xuXHRcdHJldHVyblZhbHVlICs9IHN0cmluZy5zbGljZShlbmRJbmRleCwgKGdvdENSID8gaW5kZXggLSAxIDogaW5kZXgpKSArIHByZWZpeCArIChnb3RDUiA/ICdcXHJcXG4nIDogJ1xcbicpICsgcG9zdGZpeDtcblx0XHRlbmRJbmRleCA9IGluZGV4ICsgMTtcblx0XHRpbmRleCA9IHN0cmluZy5pbmRleE9mKCdcXG4nLCBlbmRJbmRleCk7XG5cdH0gd2hpbGUgKGluZGV4ICE9PSAtMSk7XG5cblx0cmV0dXJuVmFsdWUgKz0gc3RyaW5nLnNsaWNlKGVuZEluZGV4KTtcblx0cmV0dXJuIHJldHVyblZhbHVlO1xufVxuIiwgImltcG9ydCBhbnNpU3R5bGVzIGZyb20gJyNhbnNpLXN0eWxlcyc7XG5pbXBvcnQgc3VwcG9ydHNDb2xvciBmcm9tICcjc3VwcG9ydHMtY29sb3InO1xuaW1wb3J0IHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBpbXBvcnQvb3JkZXJcblx0c3RyaW5nUmVwbGFjZUFsbCxcblx0c3RyaW5nRW5jYXNlQ1JMRldpdGhGaXJzdEluZGV4LFxufSBmcm9tICcuL3V0aWxpdGllcy5qcyc7XG5cbmNvbnN0IHtzdGRvdXQ6IHN0ZG91dENvbG9yLCBzdGRlcnI6IHN0ZGVyckNvbG9yfSA9IHN1cHBvcnRzQ29sb3I7XG5cbmNvbnN0IEdFTkVSQVRPUiA9IFN5bWJvbCgnR0VORVJBVE9SJyk7XG5jb25zdCBTVFlMRVIgPSBTeW1ib2woJ1NUWUxFUicpO1xuY29uc3QgSVNfRU1QVFkgPSBTeW1ib2woJ0lTX0VNUFRZJyk7XG5cbi8vIGBzdXBwb3J0c0NvbG9yLmxldmVsYCBcdTIxOTIgYGFuc2lTdHlsZXMuY29sb3JbbmFtZV1gIG1hcHBpbmdcbmNvbnN0IGxldmVsTWFwcGluZyA9IFtcblx0J2Fuc2knLFxuXHQnYW5zaScsXG5cdCdhbnNpMjU2Jyxcblx0J2Fuc2kxNm0nLFxuXTtcblxuY29uc3Qgc3R5bGVzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuY29uc3QgYXBwbHlPcHRpb25zID0gKG9iamVjdCwgb3B0aW9ucyA9IHt9KSA9PiB7XG5cdGlmIChvcHRpb25zLmxldmVsICYmICEoTnVtYmVyLmlzSW50ZWdlcihvcHRpb25zLmxldmVsKSAmJiBvcHRpb25zLmxldmVsID49IDAgJiYgb3B0aW9ucy5sZXZlbCA8PSAzKSkge1xuXHRcdHRocm93IG5ldyBFcnJvcignVGhlIGBsZXZlbGAgb3B0aW9uIHNob3VsZCBiZSBhbiBpbnRlZ2VyIGZyb20gMCB0byAzJyk7XG5cdH1cblxuXHQvLyBEZXRlY3QgbGV2ZWwgaWYgbm90IHNldCBtYW51YWxseVxuXHRjb25zdCBjb2xvckxldmVsID0gc3Rkb3V0Q29sb3IgPyBzdGRvdXRDb2xvci5sZXZlbCA6IDA7XG5cdG9iamVjdC5sZXZlbCA9IG9wdGlvbnMubGV2ZWwgPT09IHVuZGVmaW5lZCA/IGNvbG9yTGV2ZWwgOiBvcHRpb25zLmxldmVsO1xufTtcblxuZXhwb3J0IGNsYXNzIENoYWxrIHtcblx0Y29uc3RydWN0b3Iob3B0aW9ucykge1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zdHJ1Y3Rvci1yZXR1cm5cblx0XHRyZXR1cm4gY2hhbGtGYWN0b3J5KG9wdGlvbnMpO1xuXHR9XG59XG5cbmNvbnN0IGNoYWxrRmFjdG9yeSA9IG9wdGlvbnMgPT4ge1xuXHRjb25zdCBjaGFsayA9ICguLi5zdHJpbmdzKSA9PiBzdHJpbmdzLmpvaW4oJyAnKTtcblx0YXBwbHlPcHRpb25zKGNoYWxrLCBvcHRpb25zKTtcblxuXHRPYmplY3Quc2V0UHJvdG90eXBlT2YoY2hhbGssIGNyZWF0ZUNoYWxrLnByb3RvdHlwZSk7XG5cblx0cmV0dXJuIGNoYWxrO1xufTtcblxuZnVuY3Rpb24gY3JlYXRlQ2hhbGsob3B0aW9ucykge1xuXHRyZXR1cm4gY2hhbGtGYWN0b3J5KG9wdGlvbnMpO1xufVxuXG5PYmplY3Quc2V0UHJvdG90eXBlT2YoY3JlYXRlQ2hhbGsucHJvdG90eXBlLCBGdW5jdGlvbi5wcm90b3R5cGUpO1xuXG5mb3IgKGNvbnN0IFtzdHlsZU5hbWUsIHN0eWxlXSBvZiBPYmplY3QuZW50cmllcyhhbnNpU3R5bGVzKSkge1xuXHRzdHlsZXNbc3R5bGVOYW1lXSA9IHtcblx0XHRnZXQoKSB7XG5cdFx0XHRjb25zdCBidWlsZGVyID0gY3JlYXRlQnVpbGRlcih0aGlzLCBjcmVhdGVTdHlsZXIoc3R5bGUub3Blbiwgc3R5bGUuY2xvc2UsIHRoaXNbU1RZTEVSXSksIHRoaXNbSVNfRU1QVFldKTtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBzdHlsZU5hbWUsIHt2YWx1ZTogYnVpbGRlcn0pO1xuXHRcdFx0cmV0dXJuIGJ1aWxkZXI7XG5cdFx0fSxcblx0fTtcbn1cblxuc3R5bGVzLnZpc2libGUgPSB7XG5cdGdldCgpIHtcblx0XHRjb25zdCBidWlsZGVyID0gY3JlYXRlQnVpbGRlcih0aGlzLCB0aGlzW1NUWUxFUl0sIHRydWUpO1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAndmlzaWJsZScsIHt2YWx1ZTogYnVpbGRlcn0pO1xuXHRcdHJldHVybiBidWlsZGVyO1xuXHR9LFxufTtcblxuY29uc3QgZ2V0TW9kZWxBbnNpID0gKG1vZGVsLCBsZXZlbCwgdHlwZSwgLi4uYXJndW1lbnRzXykgPT4ge1xuXHRpZiAobW9kZWwgPT09ICdyZ2InKSB7XG5cdFx0aWYgKGxldmVsID09PSAnYW5zaTE2bScpIHtcblx0XHRcdHJldHVybiBhbnNpU3R5bGVzW3R5cGVdLmFuc2kxNm0oLi4uYXJndW1lbnRzXyk7XG5cdFx0fVxuXG5cdFx0aWYgKGxldmVsID09PSAnYW5zaTI1NicpIHtcblx0XHRcdHJldHVybiBhbnNpU3R5bGVzW3R5cGVdLmFuc2kyNTYoYW5zaVN0eWxlcy5yZ2JUb0Fuc2kyNTYoLi4uYXJndW1lbnRzXykpO1xuXHRcdH1cblxuXHRcdHJldHVybiBhbnNpU3R5bGVzW3R5cGVdLmFuc2koYW5zaVN0eWxlcy5yZ2JUb0Fuc2koLi4uYXJndW1lbnRzXykpO1xuXHR9XG5cblx0aWYgKG1vZGVsID09PSAnaGV4Jykge1xuXHRcdHJldHVybiBnZXRNb2RlbEFuc2koJ3JnYicsIGxldmVsLCB0eXBlLCAuLi5hbnNpU3R5bGVzLmhleFRvUmdiKC4uLmFyZ3VtZW50c18pKTtcblx0fVxuXG5cdHJldHVybiBhbnNpU3R5bGVzW3R5cGVdW21vZGVsXSguLi5hcmd1bWVudHNfKTtcbn07XG5cbmNvbnN0IHVzZWRNb2RlbHMgPSBbJ3JnYicsICdoZXgnLCAnYW5zaTI1NiddO1xuXG5mb3IgKGNvbnN0IG1vZGVsIG9mIHVzZWRNb2RlbHMpIHtcblx0c3R5bGVzW21vZGVsXSA9IHtcblx0XHRnZXQoKSB7XG5cdFx0XHRjb25zdCB7bGV2ZWx9ID0gdGhpcztcblx0XHRcdHJldHVybiBmdW5jdGlvbiAoLi4uYXJndW1lbnRzXykge1xuXHRcdFx0XHRjb25zdCBzdHlsZXIgPSBjcmVhdGVTdHlsZXIoZ2V0TW9kZWxBbnNpKG1vZGVsLCBsZXZlbE1hcHBpbmdbbGV2ZWxdLCAnY29sb3InLCAuLi5hcmd1bWVudHNfKSwgYW5zaVN0eWxlcy5jb2xvci5jbG9zZSwgdGhpc1tTVFlMRVJdKTtcblx0XHRcdFx0cmV0dXJuIGNyZWF0ZUJ1aWxkZXIodGhpcywgc3R5bGVyLCB0aGlzW0lTX0VNUFRZXSk7XG5cdFx0XHR9O1xuXHRcdH0sXG5cdH07XG5cblx0Y29uc3QgYmdNb2RlbCA9ICdiZycgKyBtb2RlbFswXS50b1VwcGVyQ2FzZSgpICsgbW9kZWwuc2xpY2UoMSk7XG5cdHN0eWxlc1tiZ01vZGVsXSA9IHtcblx0XHRnZXQoKSB7XG5cdFx0XHRjb25zdCB7bGV2ZWx9ID0gdGhpcztcblx0XHRcdHJldHVybiBmdW5jdGlvbiAoLi4uYXJndW1lbnRzXykge1xuXHRcdFx0XHRjb25zdCBzdHlsZXIgPSBjcmVhdGVTdHlsZXIoZ2V0TW9kZWxBbnNpKG1vZGVsLCBsZXZlbE1hcHBpbmdbbGV2ZWxdLCAnYmdDb2xvcicsIC4uLmFyZ3VtZW50c18pLCBhbnNpU3R5bGVzLmJnQ29sb3IuY2xvc2UsIHRoaXNbU1RZTEVSXSk7XG5cdFx0XHRcdHJldHVybiBjcmVhdGVCdWlsZGVyKHRoaXMsIHN0eWxlciwgdGhpc1tJU19FTVBUWV0pO1xuXHRcdFx0fTtcblx0XHR9LFxuXHR9O1xufVxuXG5jb25zdCBwcm90byA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKCgpID0+IHt9LCB7XG5cdC4uLnN0eWxlcyxcblx0bGV2ZWw6IHtcblx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdGdldCgpIHtcblx0XHRcdHJldHVybiB0aGlzW0dFTkVSQVRPUl0ubGV2ZWw7XG5cdFx0fSxcblx0XHRzZXQobGV2ZWwpIHtcblx0XHRcdHRoaXNbR0VORVJBVE9SXS5sZXZlbCA9IGxldmVsO1xuXHRcdH0sXG5cdH0sXG59KTtcblxuY29uc3QgY3JlYXRlU3R5bGVyID0gKG9wZW4sIGNsb3NlLCBwYXJlbnQpID0+IHtcblx0bGV0IG9wZW5BbGw7XG5cdGxldCBjbG9zZUFsbDtcblx0aWYgKHBhcmVudCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0b3BlbkFsbCA9IG9wZW47XG5cdFx0Y2xvc2VBbGwgPSBjbG9zZTtcblx0fSBlbHNlIHtcblx0XHRvcGVuQWxsID0gcGFyZW50Lm9wZW5BbGwgKyBvcGVuO1xuXHRcdGNsb3NlQWxsID0gY2xvc2UgKyBwYXJlbnQuY2xvc2VBbGw7XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdG9wZW4sXG5cdFx0Y2xvc2UsXG5cdFx0b3BlbkFsbCxcblx0XHRjbG9zZUFsbCxcblx0XHRwYXJlbnQsXG5cdH07XG59O1xuXG5jb25zdCBjcmVhdGVCdWlsZGVyID0gKHNlbGYsIF9zdHlsZXIsIF9pc0VtcHR5KSA9PiB7XG5cdC8vIFNpbmdsZSBhcmd1bWVudCBpcyBob3QgcGF0aCwgaW1wbGljaXQgY29lcmNpb24gaXMgZmFzdGVyIHRoYW4gYW55dGhpbmdcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWltcGxpY2l0LWNvZXJjaW9uXG5cdGNvbnN0IGJ1aWxkZXIgPSAoLi4uYXJndW1lbnRzXykgPT4gYXBwbHlTdHlsZShidWlsZGVyLCAoYXJndW1lbnRzXy5sZW5ndGggPT09IDEpID8gKCcnICsgYXJndW1lbnRzX1swXSkgOiBhcmd1bWVudHNfLmpvaW4oJyAnKSk7XG5cblx0Ly8gV2UgYWx0ZXIgdGhlIHByb3RvdHlwZSBiZWNhdXNlIHdlIG11c3QgcmV0dXJuIGEgZnVuY3Rpb24sIGJ1dCB0aGVyZSBpc1xuXHQvLyBubyB3YXkgdG8gY3JlYXRlIGEgZnVuY3Rpb24gd2l0aCBhIGRpZmZlcmVudCBwcm90b3R5cGVcblx0T2JqZWN0LnNldFByb3RvdHlwZU9mKGJ1aWxkZXIsIHByb3RvKTtcblxuXHRidWlsZGVyW0dFTkVSQVRPUl0gPSBzZWxmO1xuXHRidWlsZGVyW1NUWUxFUl0gPSBfc3R5bGVyO1xuXHRidWlsZGVyW0lTX0VNUFRZXSA9IF9pc0VtcHR5O1xuXG5cdHJldHVybiBidWlsZGVyO1xufTtcblxuY29uc3QgYXBwbHlTdHlsZSA9IChzZWxmLCBzdHJpbmcpID0+IHtcblx0aWYgKHNlbGYubGV2ZWwgPD0gMCB8fCAhc3RyaW5nKSB7XG5cdFx0cmV0dXJuIHNlbGZbSVNfRU1QVFldID8gJycgOiBzdHJpbmc7XG5cdH1cblxuXHRsZXQgc3R5bGVyID0gc2VsZltTVFlMRVJdO1xuXG5cdGlmIChzdHlsZXIgPT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBzdHJpbmc7XG5cdH1cblxuXHRjb25zdCB7b3BlbkFsbCwgY2xvc2VBbGx9ID0gc3R5bGVyO1xuXHRpZiAoc3RyaW5nLmluY2x1ZGVzKCdcXHUwMDFCJykpIHtcblx0XHR3aGlsZSAoc3R5bGVyICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdC8vIFJlcGxhY2UgYW55IGluc3RhbmNlcyBhbHJlYWR5IHByZXNlbnQgd2l0aCBhIHJlLW9wZW5pbmcgY29kZVxuXHRcdFx0Ly8gb3RoZXJ3aXNlIG9ubHkgdGhlIHBhcnQgb2YgdGhlIHN0cmluZyB1bnRpbCBzYWlkIGNsb3NpbmcgY29kZVxuXHRcdFx0Ly8gd2lsbCBiZSBjb2xvcmVkLCBhbmQgdGhlIHJlc3Qgd2lsbCBzaW1wbHkgYmUgJ3BsYWluJy5cblx0XHRcdHN0cmluZyA9IHN0cmluZ1JlcGxhY2VBbGwoc3RyaW5nLCBzdHlsZXIuY2xvc2UsIHN0eWxlci5vcGVuKTtcblxuXHRcdFx0c3R5bGVyID0gc3R5bGVyLnBhcmVudDtcblx0XHR9XG5cdH1cblxuXHQvLyBXZSBjYW4gbW92ZSBib3RoIG5leHQgYWN0aW9ucyBvdXQgb2YgbG9vcCwgYmVjYXVzZSByZW1haW5pbmcgYWN0aW9ucyBpbiBsb29wIHdvbid0IGhhdmVcblx0Ly8gYW55L3Zpc2libGUgZWZmZWN0IG9uIHBhcnRzIHdlIGFkZCBoZXJlLiBDbG9zZSB0aGUgc3R5bGluZyBiZWZvcmUgYSBsaW5lYnJlYWsgYW5kIHJlb3BlblxuXHQvLyBhZnRlciBuZXh0IGxpbmUgdG8gZml4IGEgYmxlZWQgaXNzdWUgb24gbWFjT1M6IGh0dHBzOi8vZ2l0aHViLmNvbS9jaGFsay9jaGFsay9wdWxsLzkyXG5cdGNvbnN0IGxmSW5kZXggPSBzdHJpbmcuaW5kZXhPZignXFxuJyk7XG5cdGlmIChsZkluZGV4ICE9PSAtMSkge1xuXHRcdHN0cmluZyA9IHN0cmluZ0VuY2FzZUNSTEZXaXRoRmlyc3RJbmRleChzdHJpbmcsIGNsb3NlQWxsLCBvcGVuQWxsLCBsZkluZGV4KTtcblx0fVxuXG5cdHJldHVybiBvcGVuQWxsICsgc3RyaW5nICsgY2xvc2VBbGw7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhjcmVhdGVDaGFsay5wcm90b3R5cGUsIHN0eWxlcyk7XG5cbmNvbnN0IGNoYWxrID0gY3JlYXRlQ2hhbGsoKTtcbmV4cG9ydCBjb25zdCBjaGFsa1N0ZGVyciA9IGNyZWF0ZUNoYWxrKHtsZXZlbDogc3RkZXJyQ29sb3IgPyBzdGRlcnJDb2xvci5sZXZlbCA6IDB9KTtcblxuZXhwb3J0IHtcblx0bW9kaWZpZXJOYW1lcyxcblx0Zm9yZWdyb3VuZENvbG9yTmFtZXMsXG5cdGJhY2tncm91bmRDb2xvck5hbWVzLFxuXHRjb2xvck5hbWVzLFxuXG5cdC8vIFRPRE86IFJlbW92ZSB0aGVzZSBhbGlhc2VzIGluIHRoZSBuZXh0IG1ham9yIHZlcnNpb25cblx0bW9kaWZpZXJOYW1lcyBhcyBtb2RpZmllcnMsXG5cdGZvcmVncm91bmRDb2xvck5hbWVzIGFzIGZvcmVncm91bmRDb2xvcnMsXG5cdGJhY2tncm91bmRDb2xvck5hbWVzIGFzIGJhY2tncm91bmRDb2xvcnMsXG5cdGNvbG9yTmFtZXMgYXMgY29sb3JzLFxufSBmcm9tICcuL3ZlbmRvci9hbnNpLXN0eWxlcy9pbmRleC5qcyc7XG5cbmV4cG9ydCB7XG5cdHN0ZG91dENvbG9yIGFzIHN1cHBvcnRzQ29sb3IsXG5cdHN0ZGVyckNvbG9yIGFzIHN1cHBvcnRzQ29sb3JTdGRlcnIsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBjaGFsaztcbiIsICJpbXBvcnQgcHJvY2VzcyBmcm9tICdub2RlOnByb2Nlc3MnO1xuaW1wb3J0IHJlc3RvcmVDdXJzb3IgZnJvbSAncmVzdG9yZS1jdXJzb3InO1xuXG5sZXQgaXNIaWRkZW4gPSBmYWxzZTtcblxuY29uc3QgY2xpQ3Vyc29yID0ge307XG5cbmNsaUN1cnNvci5zaG93ID0gKHdyaXRhYmxlU3RyZWFtID0gcHJvY2Vzcy5zdGRlcnIpID0+IHtcblx0aWYgKCF3cml0YWJsZVN0cmVhbS5pc1RUWSkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGlzSGlkZGVuID0gZmFsc2U7XG5cdHdyaXRhYmxlU3RyZWFtLndyaXRlKCdcXHUwMDFCWz8yNWgnKTtcbn07XG5cbmNsaUN1cnNvci5oaWRlID0gKHdyaXRhYmxlU3RyZWFtID0gcHJvY2Vzcy5zdGRlcnIpID0+IHtcblx0aWYgKCF3cml0YWJsZVN0cmVhbS5pc1RUWSkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHJlc3RvcmVDdXJzb3IoKTtcblx0aXNIaWRkZW4gPSB0cnVlO1xuXHR3cml0YWJsZVN0cmVhbS53cml0ZSgnXFx1MDAxQls/MjVsJyk7XG59O1xuXG5jbGlDdXJzb3IudG9nZ2xlID0gKGZvcmNlLCB3cml0YWJsZVN0cmVhbSkgPT4ge1xuXHRpZiAoZm9yY2UgIT09IHVuZGVmaW5lZCkge1xuXHRcdGlzSGlkZGVuID0gZm9yY2U7XG5cdH1cblxuXHRpZiAoaXNIaWRkZW4pIHtcblx0XHRjbGlDdXJzb3Iuc2hvdyh3cml0YWJsZVN0cmVhbSk7XG5cdH0gZWxzZSB7XG5cdFx0Y2xpQ3Vyc29yLmhpZGUod3JpdGFibGVTdHJlYW0pO1xuXHR9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGlDdXJzb3I7XG4iLCAiaW1wb3J0IHByb2Nlc3MgZnJvbSAnbm9kZTpwcm9jZXNzJztcbmltcG9ydCBvbmV0aW1lIGZyb20gJ29uZXRpbWUnO1xuaW1wb3J0IHNpZ25hbEV4aXQgZnJvbSAnc2lnbmFsLWV4aXQnO1xuXG5jb25zdCByZXN0b3JlQ3Vyc29yID0gb25ldGltZSgoKSA9PiB7XG5cdHNpZ25hbEV4aXQoKCkgPT4ge1xuXHRcdHByb2Nlc3Muc3RkZXJyLndyaXRlKCdcXHUwMDFCWz8yNWgnKTtcblx0fSwge2Fsd2F5c0xhc3Q6IHRydWV9KTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCByZXN0b3JlQ3Vyc29yO1xuIiwgImltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzVW5pY29kZVN1cHBvcnRlZCgpIHtcblx0aWYgKHByb2Nlc3MucGxhdGZvcm0gIT09ICd3aW4zMicpIHtcblx0XHRyZXR1cm4gcHJvY2Vzcy5lbnYuVEVSTSAhPT0gJ2xpbnV4JzsgLy8gTGludXggY29uc29sZSAoa2VybmVsKVxuXHR9XG5cblx0cmV0dXJuIEJvb2xlYW4ocHJvY2Vzcy5lbnYuQ0kpXG5cdFx0fHwgQm9vbGVhbihwcm9jZXNzLmVudi5XVF9TRVNTSU9OKSAvLyBXaW5kb3dzIFRlcm1pbmFsXG5cdFx0fHwgQm9vbGVhbihwcm9jZXNzLmVudi5URVJNSU5VU19TVUJMSU1FKSAvLyBUZXJtaW51cyAoPDAuMi4yNylcblx0XHR8fCBwcm9jZXNzLmVudi5Db25FbXVUYXNrID09PSAne2NtZDo6Q21kZXJ9JyAvLyBDb25FbXUgYW5kIGNtZGVyXG5cdFx0fHwgcHJvY2Vzcy5lbnYuVEVSTV9QUk9HUkFNID09PSAnVGVybWludXMtU3VibGltZSdcblx0XHR8fCBwcm9jZXNzLmVudi5URVJNX1BST0dSQU0gPT09ICd2c2NvZGUnXG5cdFx0fHwgcHJvY2Vzcy5lbnYuVEVSTSA9PT0gJ3h0ZXJtLTI1NmNvbG9yJ1xuXHRcdHx8IHByb2Nlc3MuZW52LlRFUk0gPT09ICdhbGFjcml0dHknXG5cdFx0fHwgcHJvY2Vzcy5lbnYuVEVSTUlOQUxfRU1VTEFUT1IgPT09ICdKZXRCcmFpbnMtSmVkaVRlcm0nO1xufVxuIiwgImltcG9ydCBjaGFsayBmcm9tICdjaGFsayc7XG5pbXBvcnQgaXNVbmljb2RlU3VwcG9ydGVkIGZyb20gJ2lzLXVuaWNvZGUtc3VwcG9ydGVkJztcblxuY29uc3QgbWFpbiA9IHtcblx0aW5mbzogY2hhbGsuYmx1ZSgnXHUyMTM5JyksXG5cdHN1Y2Nlc3M6IGNoYWxrLmdyZWVuKCdcdTI3MTQnKSxcblx0d2FybmluZzogY2hhbGsueWVsbG93KCdcdTI2QTAnKSxcblx0ZXJyb3I6IGNoYWxrLnJlZCgnXHUyNzE2JyksXG59O1xuXG5jb25zdCBmYWxsYmFjayA9IHtcblx0aW5mbzogY2hhbGsuYmx1ZSgnaScpLFxuXHRzdWNjZXNzOiBjaGFsay5ncmVlbignXHUyMjFBJyksXG5cdHdhcm5pbmc6IGNoYWxrLnllbGxvdygnXHUyMDNDJyksXG5cdGVycm9yOiBjaGFsay5yZWQoJ1x1MDBENycpLFxufTtcblxuY29uc3QgbG9nU3ltYm9scyA9IGlzVW5pY29kZVN1cHBvcnRlZCgpID8gbWFpbiA6IGZhbGxiYWNrO1xuXG5leHBvcnQgZGVmYXVsdCBsb2dTeW1ib2xzO1xuIiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGFuc2lSZWdleCh7b25seUZpcnN0ID0gZmFsc2V9ID0ge30pIHtcblx0Y29uc3QgcGF0dGVybiA9IFtcblx0ICAgICdbXFxcXHUwMDFCXFxcXHUwMDlCXVtbXFxcXF0oKSM7P10qKD86KD86KD86KD86O1stYS16QS1aXFxcXGRcXFxcLyMmLjo9PyVAfl9dKykqfFthLXpBLVpcXFxcZF0rKD86O1stYS16QS1aXFxcXGRcXFxcLyMmLjo9PyVAfl9dKikqKT9cXFxcdTAwMDcpJyxcblx0XHQnKD86KD86XFxcXGR7MSw0fSg/OjtcXFxcZHswLDR9KSopP1tcXFxcZEEtUFItVFpjZi1udHFyeT0+PH5dKSknXG5cdF0uam9pbignfCcpO1xuXG5cdHJldHVybiBuZXcgUmVnRXhwKHBhdHRlcm4sIG9ubHlGaXJzdCA/IHVuZGVmaW5lZCA6ICdnJyk7XG59XG4iLCAiaW1wb3J0IGFuc2lSZWdleCBmcm9tICdhbnNpLXJlZ2V4JztcblxuY29uc3QgcmVnZXggPSBhbnNpUmVnZXgoKTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc3RyaXBBbnNpKHN0cmluZykge1xuXHRpZiAodHlwZW9mIHN0cmluZyAhPT0gJ3N0cmluZycpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCBhIFxcYHN0cmluZ1xcYCwgZ290IFxcYCR7dHlwZW9mIHN0cmluZ31cXGBgKTtcblx0fVxuXG5cdC8vIEV2ZW4gdGhvdWdoIHRoZSByZWdleCBpcyBnbG9iYWwsIHdlIGRvbid0IG5lZWQgdG8gcmVzZXQgdGhlIGAubGFzdEluZGV4YFxuXHQvLyBiZWNhdXNlIHVubGlrZSBgLmV4ZWMoKWAgYW5kIGAudGVzdCgpYCwgYC5yZXBsYWNlKClgIGRvZXMgaXQgYXV0b21hdGljYWxseVxuXHQvLyBhbmQgZG9pbmcgaXQgbWFudWFsbHkgaGFzIGEgcGVyZm9ybWFuY2UgcGVuYWx0eS5cblx0cmV0dXJuIHN0cmluZy5yZXBsYWNlKHJlZ2V4LCAnJyk7XG59XG4iLCAiaW1wb3J0IHN0cmlwQW5zaSBmcm9tICdzdHJpcC1hbnNpJztcbmltcG9ydCBlYXN0QXNpYW5XaWR0aCBmcm9tICdlYXN0YXNpYW53aWR0aCc7XG5pbXBvcnQgZW1vamlSZWdleCBmcm9tICdlbW9qaS1yZWdleCc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0cmluZ1dpZHRoKHN0cmluZywgb3B0aW9ucykge1xuXHRpZiAodHlwZW9mIHN0cmluZyAhPT0gJ3N0cmluZycgfHwgc3RyaW5nLmxlbmd0aCA9PT0gMCkge1xuXHRcdHJldHVybiAwO1xuXHR9XG5cblx0b3B0aW9ucyA9IHtcblx0XHRhbWJpZ3VvdXNJc05hcnJvdzogdHJ1ZSxcblx0XHRjb3VudEFuc2lFc2NhcGVDb2RlczogZmFsc2UsXG5cdFx0Li4ub3B0aW9ucyxcblx0fTtcblxuXHRpZiAoIW9wdGlvbnMuY291bnRBbnNpRXNjYXBlQ29kZXMpIHtcblx0XHRzdHJpbmcgPSBzdHJpcEFuc2koc3RyaW5nKTtcblx0fVxuXG5cdGlmIChzdHJpbmcubGVuZ3RoID09PSAwKSB7XG5cdFx0cmV0dXJuIDA7XG5cdH1cblxuXHRjb25zdCBhbWJpZ3VvdXNDaGFyYWN0ZXJXaWR0aCA9IG9wdGlvbnMuYW1iaWd1b3VzSXNOYXJyb3cgPyAxIDogMjtcblx0bGV0IHdpZHRoID0gMDtcblxuXHRmb3IgKGNvbnN0IHtzZWdtZW50OiBjaGFyYWN0ZXJ9IG9mIG5ldyBJbnRsLlNlZ21lbnRlcigpLnNlZ21lbnQoc3RyaW5nKSkge1xuXHRcdGNvbnN0IGNvZGVQb2ludCA9IGNoYXJhY3Rlci5jb2RlUG9pbnRBdCgwKTtcblxuXHRcdC8vIElnbm9yZSBjb250cm9sIGNoYXJhY3RlcnNcblx0XHRpZiAoY29kZVBvaW50IDw9IDB4MUYgfHwgKGNvZGVQb2ludCA+PSAweDdGICYmIGNvZGVQb2ludCA8PSAweDlGKSkge1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0Ly8gSWdub3JlIGNvbWJpbmluZyBjaGFyYWN0ZXJzXG5cdFx0aWYgKGNvZGVQb2ludCA+PSAweDNfMDAgJiYgY29kZVBvaW50IDw9IDB4M182Rikge1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0aWYgKGVtb2ppUmVnZXgoKS50ZXN0KGNoYXJhY3RlcikpIHtcblx0XHRcdHdpZHRoICs9IDI7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRjb25zdCBjb2RlID0gZWFzdEFzaWFuV2lkdGguZWFzdEFzaWFuV2lkdGgoY2hhcmFjdGVyKTtcblx0XHRzd2l0Y2ggKGNvZGUpIHtcblx0XHRcdGNhc2UgJ0YnOlxuXHRcdFx0Y2FzZSAnVyc6IHtcblx0XHRcdFx0d2lkdGggKz0gMjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cblx0XHRcdGNhc2UgJ0EnOiB7XG5cdFx0XHRcdHdpZHRoICs9IGFtYmlndW91c0NoYXJhY3RlcldpZHRoO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblxuXHRcdFx0ZGVmYXVsdDoge1xuXHRcdFx0XHR3aWR0aCArPSAxO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB3aWR0aDtcbn1cbiIsICJleHBvcnQgZGVmYXVsdCAoKSA9PiB7XG5cdC8vIGh0dHBzOi8vbXRocy5iZS9lbW9qaVxuXHRyZXR1cm4gL1sjKjAtOV1cXHVGRTBGP1xcdTIwRTN8W1xceEE5XFx4QUVcXHUyMDNDXFx1MjA0OVxcdTIxMjJcXHUyMTM5XFx1MjE5NC1cXHUyMTk5XFx1MjFBOVxcdTIxQUFcXHUyMzFBXFx1MjMxQlxcdTIzMjhcXHUyM0NGXFx1MjNFRC1cXHUyM0VGXFx1MjNGMVxcdTIzRjJcXHUyM0Y4LVxcdTIzRkFcXHUyNEMyXFx1MjVBQVxcdTI1QUJcXHUyNUI2XFx1MjVDMFxcdTI1RkJcXHUyNUZDXFx1MjVGRVxcdTI2MDAtXFx1MjYwNFxcdTI2MEVcXHUyNjExXFx1MjYxNFxcdTI2MTVcXHUyNjE4XFx1MjYyMFxcdTI2MjJcXHUyNjIzXFx1MjYyNlxcdTI2MkFcXHUyNjJFXFx1MjYyRlxcdTI2MzgtXFx1MjYzQVxcdTI2NDBcXHUyNjQyXFx1MjY0OC1cXHUyNjUzXFx1MjY1RlxcdTI2NjBcXHUyNjYzXFx1MjY2NVxcdTI2NjZcXHUyNjY4XFx1MjY3QlxcdTI2N0VcXHUyNjdGXFx1MjY5MlxcdTI2OTQtXFx1MjY5N1xcdTI2OTlcXHUyNjlCXFx1MjY5Q1xcdTI2QTBcXHUyNkE3XFx1MjZBQVxcdTI2QjBcXHUyNkIxXFx1MjZCRFxcdTI2QkVcXHUyNkM0XFx1MjZDOFxcdTI2Q0ZcXHUyNkQxXFx1MjZEM1xcdTI2RTlcXHUyNkYwLVxcdTI2RjVcXHUyNkY3XFx1MjZGOFxcdTI2RkFcXHUyNzAyXFx1MjcwOFxcdTI3MDlcXHUyNzBGXFx1MjcxMlxcdTI3MTRcXHUyNzE2XFx1MjcxRFxcdTI3MjFcXHUyNzMzXFx1MjczNFxcdTI3NDRcXHUyNzQ3XFx1Mjc1N1xcdTI3NjNcXHUyN0ExXFx1MjkzNFxcdTI5MzVcXHUyQjA1LVxcdTJCMDdcXHUyQjFCXFx1MkIxQ1xcdTJCNTVcXHUzMDMwXFx1MzAzRFxcdTMyOTdcXHUzMjk5XVxcdUZFMEY/fFtcXHUyNjFEXFx1MjcwQ1xcdTI3MERdKD86XFx1RkUwRnxcXHVEODNDW1xcdURGRkItXFx1REZGRl0pP3xbXFx1MjcwQVxcdTI3MEJdKD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKT98W1xcdTIzRTktXFx1MjNFQ1xcdTIzRjBcXHUyM0YzXFx1MjVGRFxcdTI2OTNcXHUyNkExXFx1MjZBQlxcdTI2QzVcXHUyNkNFXFx1MjZENFxcdTI2RUFcXHUyNkZEXFx1MjcwNVxcdTI3MjhcXHUyNzRDXFx1Mjc0RVxcdTI3NTMtXFx1Mjc1NVxcdTI3OTUtXFx1Mjc5N1xcdTI3QjBcXHUyN0JGXFx1MkI1MF18XFx1MjZGOSg/OlxcdUZFMEZ8XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKT8oPzpcXHUyMDBEW1xcdTI2NDBcXHUyNjQyXVxcdUZFMEY/KT98XFx1Mjc2NFxcdUZFMEY/KD86XFx1MjAwRCg/OlxcdUQ4M0RcXHVERDI1fFxcdUQ4M0VcXHVERTc5KSk/fFxcdUQ4M0MoPzpbXFx1REMwNFxcdURENzBcXHVERDcxXFx1REQ3RVxcdUREN0ZcXHVERTAyXFx1REUzN1xcdURGMjFcXHVERjI0LVxcdURGMkNcXHVERjM2XFx1REY3RFxcdURGOTZcXHVERjk3XFx1REY5OS1cXHVERjlCXFx1REY5RVxcdURGOUZcXHVERkNEXFx1REZDRVxcdURGRDQtXFx1REZERlxcdURGRjVcXHVERkY3XVxcdUZFMEY/fFtcXHVERjg1XFx1REZDMlxcdURGQzddKD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKT98W1xcdURGQzNcXHVERkM0XFx1REZDQV0oPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl0pPyg/OlxcdTIwMERbXFx1MjY0MFxcdTI2NDJdXFx1RkUwRj8pP3xbXFx1REZDQlxcdURGQ0NdKD86XFx1RkUwRnxcXHVEODNDW1xcdURGRkItXFx1REZGRl0pPyg/OlxcdTIwMERbXFx1MjY0MFxcdTI2NDJdXFx1RkUwRj8pP3xbXFx1RENDRlxcdUREOEVcXHVERDkxLVxcdUREOUFcXHVERTAxXFx1REUxQVxcdURFMkZcXHVERTMyLVxcdURFMzZcXHVERTM4LVxcdURFM0FcXHVERTUwXFx1REU1MVxcdURGMDAtXFx1REYyMFxcdURGMkQtXFx1REYzNVxcdURGMzctXFx1REY3Q1xcdURGN0UtXFx1REY4NFxcdURGODYtXFx1REY5M1xcdURGQTAtXFx1REZDMVxcdURGQzVcXHVERkM2XFx1REZDOFxcdURGQzlcXHVERkNGLVxcdURGRDNcXHVERkUwLVxcdURGRjBcXHVERkY4LVxcdURGRkZdfFxcdURERTZcXHVEODNDW1xcdURERTgtXFx1RERFQ1xcdURERUVcXHVEREYxXFx1RERGMlxcdURERjRcXHVEREY2LVxcdURERkFcXHVEREZDXFx1RERGRFxcdURERkZdfFxcdURERTdcXHVEODNDW1xcdURERTZcXHVEREU3XFx1RERFOS1cXHVEREVGXFx1RERGMS1cXHVEREY0XFx1RERGNi1cXHVEREY5XFx1RERGQlxcdURERkNcXHVEREZFXFx1RERGRl18XFx1RERFOFxcdUQ4M0NbXFx1RERFNlxcdURERThcXHVEREU5XFx1RERFQi1cXHVEREVFXFx1RERGMC1cXHVEREY1XFx1RERGN1xcdURERkEtXFx1RERGRl18XFx1RERFOVxcdUQ4M0NbXFx1RERFQVxcdURERUNcXHVEREVGXFx1RERGMFxcdURERjJcXHVEREY0XFx1RERGRl18XFx1RERFQVxcdUQ4M0NbXFx1RERFNlxcdURERThcXHVEREVBXFx1RERFQ1xcdURERURcXHVEREY3LVxcdURERkFdfFxcdURERUJcXHVEODNDW1xcdURERUUtXFx1RERGMFxcdURERjJcXHVEREY0XFx1RERGN118XFx1RERFQ1xcdUQ4M0NbXFx1RERFNlxcdURERTdcXHVEREU5LVxcdURERUVcXHVEREYxLVxcdURERjNcXHVEREY1LVxcdURERkFcXHVEREZDXFx1RERGRV18XFx1RERFRFxcdUQ4M0NbXFx1RERGMFxcdURERjJcXHVEREYzXFx1RERGN1xcdURERjlcXHVEREZBXXxcXHVEREVFXFx1RDgzQ1tcXHVEREU4LVxcdURERUFcXHVEREYxLVxcdURERjRcXHVEREY2LVxcdURERjldfFxcdURERUZcXHVEODNDW1xcdURERUFcXHVEREYyXFx1RERGNFxcdURERjVdfFxcdURERjBcXHVEODNDW1xcdURERUFcXHVEREVDLVxcdURERUVcXHVEREYyXFx1RERGM1xcdURERjVcXHVEREY3XFx1RERGQ1xcdURERkVcXHVEREZGXXxcXHVEREYxXFx1RDgzQ1tcXHVEREU2LVxcdURERThcXHVEREVFXFx1RERGMFxcdURERjctXFx1RERGQlxcdURERkVdfFxcdURERjJcXHVEODNDW1xcdURERTZcXHVEREU4LVxcdURERURcXHVEREYwLVxcdURERkZdfFxcdURERjNcXHVEODNDW1xcdURERTZcXHVEREU4XFx1RERFQS1cXHVEREVDXFx1RERFRVxcdURERjFcXHVEREY0XFx1RERGNVxcdURERjdcXHVEREZBXFx1RERGRl18XFx1RERGNFxcdUQ4M0NcXHVEREYyfFxcdURERjVcXHVEODNDW1xcdURERTZcXHVEREVBLVxcdURERURcXHVEREYwLVxcdURERjNcXHVEREY3LVxcdURERjlcXHVEREZDXFx1RERGRV18XFx1RERGNlxcdUQ4M0NcXHVEREU2fFxcdURERjdcXHVEODNDW1xcdURERUFcXHVEREY0XFx1RERGOFxcdURERkFcXHVEREZDXXxcXHVEREY4XFx1RDgzQ1tcXHVEREU2LVxcdURERUFcXHVEREVDLVxcdURERjRcXHVEREY3LVxcdURERjlcXHVEREZCXFx1RERGRC1cXHVEREZGXXxcXHVEREY5XFx1RDgzQ1tcXHVEREU2XFx1RERFOFxcdURERTlcXHVEREVCLVxcdURERURcXHVEREVGLVxcdURERjRcXHVEREY3XFx1RERGOVxcdURERkJcXHVEREZDXFx1RERGRl18XFx1RERGQVxcdUQ4M0NbXFx1RERFNlxcdURERUNcXHVEREYyXFx1RERGM1xcdURERjhcXHVEREZFXFx1RERGRl18XFx1RERGQlxcdUQ4M0NbXFx1RERFNlxcdURERThcXHVEREVBXFx1RERFQ1xcdURERUVcXHVEREYzXFx1RERGQV18XFx1RERGQ1xcdUQ4M0NbXFx1RERFQlxcdURERjhdfFxcdURERkRcXHVEODNDXFx1RERGMHxcXHVEREZFXFx1RDgzQ1tcXHVEREVBXFx1RERGOV18XFx1RERGRlxcdUQ4M0NbXFx1RERFNlxcdURERjJcXHVEREZDXXxcXHVERkYzXFx1RkUwRj8oPzpcXHUyMDBEKD86XFx1MjZBN1xcdUZFMEY/fFxcdUQ4M0NcXHVERjA4KSk/fFxcdURGRjQoPzpcXHUyMDBEXFx1MjYyMFxcdUZFMEY/fFxcdURCNDBcXHVEQzY3XFx1REI0MFxcdURDNjJcXHVEQjQwKD86XFx1REM2NVxcdURCNDBcXHVEQzZFXFx1REI0MFxcdURDNjd8XFx1REM3M1xcdURCNDBcXHVEQzYzXFx1REI0MFxcdURDNzR8XFx1REM3N1xcdURCNDBcXHVEQzZDXFx1REI0MFxcdURDNzMpXFx1REI0MFxcdURDN0YpPyl8XFx1RDgzRCg/OltcXHVEQzA4XFx1REMyNl0oPzpcXHUyMDBEXFx1MkIxQik/fFtcXHVEQzNGXFx1RENGRFxcdURENDlcXHVERDRBXFx1REQ2RlxcdURENzBcXHVERDczXFx1REQ3Ni1cXHVERDc5XFx1REQ4N1xcdUREOEEtXFx1REQ4RFxcdUREQTVcXHVEREE4XFx1RERCMVxcdUREQjJcXHVEREJDXFx1RERDMi1cXHVEREM0XFx1REREMS1cXHVEREQzXFx1REREQy1cXHVERERFXFx1RERFMVxcdURERTNcXHVEREU4XFx1RERFRlxcdURERjNcXHVEREZBXFx1REVDQlxcdURFQ0QtXFx1REVDRlxcdURFRTAtXFx1REVFNVxcdURFRTlcXHVERUYwXFx1REVGM11cXHVGRTBGP3xbXFx1REM0MlxcdURDNDNcXHVEQzQ2LVxcdURDNTBcXHVEQzY2XFx1REM2N1xcdURDNkItXFx1REM2RFxcdURDNzJcXHVEQzc0LVxcdURDNzZcXHVEQzc4XFx1REM3Q1xcdURDODNcXHVEQzg1XFx1REM4RlxcdURDOTFcXHVEQ0FBXFx1REQ3QVxcdUREOTVcXHVERDk2XFx1REU0Q1xcdURFNEZcXHVERUMwXFx1REVDQ10oPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl0pP3xbXFx1REM2RVxcdURDNzBcXHVEQzcxXFx1REM3M1xcdURDNzdcXHVEQzgxXFx1REM4MlxcdURDODZcXHVEQzg3XFx1REU0NS1cXHVERTQ3XFx1REU0QlxcdURFNERcXHVERTRFXFx1REVBM1xcdURFQjQtXFx1REVCNl0oPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl0pPyg/OlxcdTIwMERbXFx1MjY0MFxcdTI2NDJdXFx1RkUwRj8pP3xbXFx1REQ3NFxcdUREOTBdKD86XFx1RkUwRnxcXHVEODNDW1xcdURGRkItXFx1REZGRl0pP3xbXFx1REMwMC1cXHVEQzA3XFx1REMwOS1cXHVEQzE0XFx1REMxNi1cXHVEQzI1XFx1REMyNy1cXHVEQzNBXFx1REMzQy1cXHVEQzNFXFx1REM0MFxcdURDNDRcXHVEQzQ1XFx1REM1MS1cXHVEQzY1XFx1REM2QVxcdURDNzktXFx1REM3QlxcdURDN0QtXFx1REM4MFxcdURDODRcXHVEQzg4LVxcdURDOEVcXHVEQzkwXFx1REM5Mi1cXHVEQ0E5XFx1RENBQi1cXHVEQ0ZDXFx1RENGRi1cXHVERDNEXFx1REQ0Qi1cXHVERDRFXFx1REQ1MC1cXHVERDY3XFx1RERBNFxcdURERkItXFx1REUyRFxcdURFMkYtXFx1REUzNFxcdURFMzctXFx1REU0NFxcdURFNDgtXFx1REU0QVxcdURFODAtXFx1REVBMlxcdURFQTQtXFx1REVCM1xcdURFQjctXFx1REVCRlxcdURFQzEtXFx1REVDNVxcdURFRDAtXFx1REVEMlxcdURFRDUtXFx1REVEN1xcdURFREMtXFx1REVERlxcdURFRUJcXHVERUVDXFx1REVGNC1cXHVERUZDXFx1REZFMC1cXHVERkVCXFx1REZGMF18XFx1REMxNSg/OlxcdTIwMERcXHVEODNFXFx1RERCQSk/fFxcdURDM0IoPzpcXHUyMDBEXFx1Mjc0NFxcdUZFMEY/KT98XFx1REM0MVxcdUZFMEY/KD86XFx1MjAwRFxcdUQ4M0RcXHVEREU4XFx1RkUwRj8pP3xcXHVEQzY4KD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRFxcdUQ4M0QoPzpcXHVEQzhCXFx1MjAwRFxcdUQ4M0QpP1xcdURDNjh8XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRCg/OltcXHVEQzY4XFx1REM2OV1cXHUyMDBEXFx1RDgzRCg/OlxcdURDNjYoPzpcXHUyMDBEXFx1RDgzRFxcdURDNjYpP3xcXHVEQzY3KD86XFx1MjAwRFxcdUQ4M0RbXFx1REM2NlxcdURDNjddKT8pfFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdURDNjYoPzpcXHUyMDBEXFx1RDgzRFxcdURDNjYpP3xcXHVEQzY3KD86XFx1MjAwRFxcdUQ4M0RbXFx1REM2NlxcdURDNjddKT8pfFxcdUQ4M0VbXFx1RERBRi1cXHVEREIzXFx1RERCQ1xcdUREQkRdKXxcXHVEODNDKD86XFx1REZGQig/OlxcdTIwMEQoPzpbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XVxcdUZFMEY/fFxcdTI3NjRcXHVGRTBGP1xcdTIwMERcXHVEODNEKD86XFx1REM4QlxcdTIwMERcXHVEODNEKT9cXHVEQzY4XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFKD86W1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXXxcXHVERDFEXFx1MjAwRFxcdUQ4M0RcXHVEQzY4XFx1RDgzQ1tcXHVERkZDLVxcdURGRkZdKSkpP3xcXHVERkZDKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRFxcdUQ4M0QoPzpcXHVEQzhCXFx1MjAwRFxcdUQ4M0QpP1xcdURDNjhcXHVEODNDW1xcdURGRkItXFx1REZGRl18XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0UoPzpbXFx1RERBRi1cXHVEREIzXFx1RERCQ1xcdUREQkRdfFxcdUREMURcXHUyMDBEXFx1RDgzRFxcdURDNjhcXHVEODNDW1xcdURGRkJcXHVERkZELVxcdURGRkZdKSkpP3xcXHVERkZEKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRFxcdUQ4M0QoPzpcXHVEQzhCXFx1MjAwRFxcdUQ4M0QpP1xcdURDNjhcXHVEODNDW1xcdURGRkItXFx1REZGRl18XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0UoPzpbXFx1RERBRi1cXHVEREIzXFx1RERCQ1xcdUREQkRdfFxcdUREMURcXHUyMDBEXFx1RDgzRFxcdURDNjhcXHVEODNDW1xcdURGRkJcXHVERkZDXFx1REZGRVxcdURGRkZdKSkpP3xcXHVERkZFKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRFxcdUQ4M0QoPzpcXHVEQzhCXFx1MjAwRFxcdUQ4M0QpP1xcdURDNjhcXHVEODNDW1xcdURGRkItXFx1REZGRl18XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0UoPzpbXFx1RERBRi1cXHVEREIzXFx1RERCQ1xcdUREQkRdfFxcdUREMURcXHUyMDBEXFx1RDgzRFxcdURDNjhcXHVEODNDW1xcdURGRkItXFx1REZGRFxcdURGRkZdKSkpP3xcXHVERkZGKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRFxcdUQ4M0QoPzpcXHVEQzhCXFx1MjAwRFxcdUQ4M0QpP1xcdURDNjhcXHVEODNDW1xcdURGRkItXFx1REZGRl18XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0UoPzpbXFx1RERBRi1cXHVEREIzXFx1RERCQ1xcdUREQkRdfFxcdUREMURcXHUyMDBEXFx1RDgzRFxcdURDNjhcXHVEODNDW1xcdURGRkItXFx1REZGRV0pKSk/KSk/fFxcdURDNjkoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHUyNzY0XFx1RkUwRj9cXHUyMDBEXFx1RDgzRCg/OlxcdURDOEJcXHUyMDBEXFx1RDgzRCk/W1xcdURDNjhcXHVEQzY5XXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEKD86W1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1REM2Nig/OlxcdTIwMERcXHVEODNEXFx1REM2Nik/fFxcdURDNjcoPzpcXHUyMDBEXFx1RDgzRFtcXHVEQzY2XFx1REM2N10pP3xcXHVEQzY5XFx1MjAwRFxcdUQ4M0QoPzpcXHVEQzY2KD86XFx1MjAwRFxcdUQ4M0RcXHVEQzY2KT98XFx1REM2Nyg/OlxcdTIwMERcXHVEODNEW1xcdURDNjZcXHVEQzY3XSk/KSl8XFx1RDgzRVtcXHVEREFGLVxcdUREQjNcXHVEREJDXFx1RERCRF0pfFxcdUQ4M0MoPzpcXHVERkZCKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRFxcdUQ4M0QoPzpbXFx1REM2OFxcdURDNjldfFxcdURDOEJcXHUyMDBEXFx1RDgzRFtcXHVEQzY4XFx1REM2OV0pXFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFKD86W1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXXxcXHVERDFEXFx1MjAwRFxcdUQ4M0RbXFx1REM2OFxcdURDNjldXFx1RDgzQ1tcXHVERkZDLVxcdURGRkZdKSkpP3xcXHVERkZDKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRFxcdUQ4M0QoPzpbXFx1REM2OFxcdURDNjldfFxcdURDOEJcXHUyMDBEXFx1RDgzRFtcXHVEQzY4XFx1REM2OV0pXFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFKD86W1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXXxcXHVERDFEXFx1MjAwRFxcdUQ4M0RbXFx1REM2OFxcdURDNjldXFx1RDgzQ1tcXHVERkZCXFx1REZGRC1cXHVERkZGXSkpKT98XFx1REZGRCg/OlxcdTIwMEQoPzpbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XVxcdUZFMEY/fFxcdTI3NjRcXHVGRTBGP1xcdTIwMERcXHVEODNEKD86W1xcdURDNjhcXHVEQzY5XXxcXHVEQzhCXFx1MjAwRFxcdUQ4M0RbXFx1REM2OFxcdURDNjldKVxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRSg/OltcXHVEREFGLVxcdUREQjNcXHVEREJDXFx1RERCRF18XFx1REQxRFxcdTIwMERcXHVEODNEW1xcdURDNjhcXHVEQzY5XVxcdUQ4M0NbXFx1REZGQlxcdURGRkNcXHVERkZFXFx1REZGRl0pKSk/fFxcdURGRkUoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHUyNzY0XFx1RkUwRj9cXHUyMDBEXFx1RDgzRCg/OltcXHVEQzY4XFx1REM2OV18XFx1REM4QlxcdTIwMERcXHVEODNEW1xcdURDNjhcXHVEQzY5XSlcXHVEODNDW1xcdURGRkItXFx1REZGRl18XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0UoPzpbXFx1RERBRi1cXHVEREIzXFx1RERCQ1xcdUREQkRdfFxcdUREMURcXHUyMDBEXFx1RDgzRFtcXHVEQzY4XFx1REM2OV1cXHVEODNDW1xcdURGRkItXFx1REZGRFxcdURGRkZdKSkpP3xcXHVERkZGKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRFxcdUQ4M0QoPzpbXFx1REM2OFxcdURDNjldfFxcdURDOEJcXHUyMDBEXFx1RDgzRFtcXHVEQzY4XFx1REM2OV0pXFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFKD86W1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXXxcXHVERDFEXFx1MjAwRFxcdUQ4M0RbXFx1REM2OFxcdURDNjldXFx1RDgzQ1tcXHVERkZCLVxcdURGRkVdKSkpPykpP3xcXHVEQzZGKD86XFx1MjAwRFtcXHUyNjQwXFx1MjY0Ml1cXHVGRTBGPyk/fFxcdURENzUoPzpcXHVGRTBGfFxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSk/KD86XFx1MjAwRFtcXHUyNjQwXFx1MjY0Ml1cXHVGRTBGPyk/fFxcdURFMkUoPzpcXHUyMDBEXFx1RDgzRFxcdURDQTgpP3xcXHVERTM1KD86XFx1MjAwRFxcdUQ4M0RcXHVEQ0FCKT98XFx1REUzNig/OlxcdTIwMERcXHVEODNDXFx1REYyQlxcdUZFMEY/KT8pfFxcdUQ4M0UoPzpbXFx1REQwQ1xcdUREMEZcXHVERDE4LVxcdUREMUZcXHVERDMwLVxcdUREMzRcXHVERDM2XFx1REQ3N1xcdUREQjVcXHVEREI2XFx1RERCQlxcdURERDJcXHVEREQzXFx1RERENVxcdURFQzMtXFx1REVDNVxcdURFRjBcXHVERUYyLVxcdURFRjhdKD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKT98W1xcdUREMjZcXHVERDM1XFx1REQzNy1cXHVERDM5XFx1REQzRFxcdUREM0VcXHVEREI4XFx1RERCOVxcdUREQ0QtXFx1RERDRlxcdURERDRcXHVEREQ2LVxcdURERERdKD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKT8oPzpcXHUyMDBEW1xcdTI2NDBcXHUyNjQyXVxcdUZFMEY/KT98W1xcdUREREVcXHVERERGXSg/OlxcdTIwMERbXFx1MjY0MFxcdTI2NDJdXFx1RkUwRj8pP3xbXFx1REQwRFxcdUREMEVcXHVERDEwLVxcdUREMTdcXHVERDIwLVxcdUREMjVcXHVERDI3LVxcdUREMkZcXHVERDNBXFx1REQzRi1cXHVERDQ1XFx1REQ0Ny1cXHVERDc2XFx1REQ3OC1cXHVEREI0XFx1RERCN1xcdUREQkFcXHVEREJDLVxcdUREQ0NcXHVEREQwXFx1RERFMC1cXHVEREZGXFx1REU3MC1cXHVERTdDXFx1REU4MC1cXHVERTg4XFx1REU5MC1cXHVERUJEXFx1REVCRi1cXHVERUMyXFx1REVDRS1cXHVERURCXFx1REVFMC1cXHVERUU4XXxcXHVERDNDKD86XFx1MjAwRFtcXHUyNjQwXFx1MjY0Ml1cXHVGRTBGP3xcXHVEODNDW1xcdURGRkItXFx1REZGRl0pP3xcXHVEREQxKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjg0XFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFKD86W1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXXxcXHVERDFEXFx1MjAwRFxcdUQ4M0VcXHVEREQxKSl8XFx1RDgzQyg/OlxcdURGRkIoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHUyNzY0XFx1RkUwRj9cXHUyMDBEKD86XFx1RDgzRFxcdURDOEJcXHUyMDBEKT9cXHVEODNFXFx1REREMVxcdUQ4M0NbXFx1REZGQy1cXHVERkZGXXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGODRcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0UoPzpbXFx1RERBRi1cXHVEREIzXFx1RERCQ1xcdUREQkRdfFxcdUREMURcXHUyMDBEXFx1RDgzRVxcdURERDFcXHVEODNDW1xcdURGRkItXFx1REZGRl0pKSk/fFxcdURGRkMoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHUyNzY0XFx1RkUwRj9cXHUyMDBEKD86XFx1RDgzRFxcdURDOEJcXHUyMDBEKT9cXHVEODNFXFx1REREMVxcdUQ4M0NbXFx1REZGQlxcdURGRkQtXFx1REZGRl18XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjg0XFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFKD86W1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXXxcXHVERDFEXFx1MjAwRFxcdUQ4M0VcXHVEREQxXFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKSkpP3xcXHVERkZEKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRCg/OlxcdUQ4M0RcXHVEQzhCXFx1MjAwRCk/XFx1RDgzRVxcdURERDFcXHVEODNDW1xcdURGRkJcXHVERkZDXFx1REZGRVxcdURGRkZdfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY4NFxcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRSg/OltcXHVEREFGLVxcdUREQjNcXHVEREJDXFx1RERCRF18XFx1REQxRFxcdTIwMERcXHVEODNFXFx1REREMVxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSkpKT98XFx1REZGRSg/OlxcdTIwMEQoPzpbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XVxcdUZFMEY/fFxcdTI3NjRcXHVGRTBGP1xcdTIwMEQoPzpcXHVEODNEXFx1REM4QlxcdTIwMEQpP1xcdUQ4M0VcXHVEREQxXFx1RDgzQ1tcXHVERkZCLVxcdURGRkRcXHVERkZGXXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGODRcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0UoPzpbXFx1RERBRi1cXHVEREIzXFx1RERCQ1xcdUREQkRdfFxcdUREMURcXHUyMDBEXFx1RDgzRVxcdURERDFcXHVEODNDW1xcdURGRkItXFx1REZGRl0pKSk/fFxcdURGRkYoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHUyNzY0XFx1RkUwRj9cXHUyMDBEKD86XFx1RDgzRFxcdURDOEJcXHUyMDBEKT9cXHVEODNFXFx1REREMVxcdUQ4M0NbXFx1REZGQi1cXHVERkZFXXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGODRcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0UoPzpbXFx1RERBRi1cXHVEREIzXFx1RERCQ1xcdUREQkRdfFxcdUREMURcXHUyMDBEXFx1RDgzRVxcdURERDFcXHVEODNDW1xcdURGRkItXFx1REZGRl0pKSk/KSk/fFxcdURFRjEoPzpcXHVEODNDKD86XFx1REZGQig/OlxcdTIwMERcXHVEODNFXFx1REVGMlxcdUQ4M0NbXFx1REZGQy1cXHVERkZGXSk/fFxcdURGRkMoPzpcXHUyMDBEXFx1RDgzRVxcdURFRjJcXHVEODNDW1xcdURGRkJcXHVERkZELVxcdURGRkZdKT98XFx1REZGRCg/OlxcdTIwMERcXHVEODNFXFx1REVGMlxcdUQ4M0NbXFx1REZGQlxcdURGRkNcXHVERkZFXFx1REZGRl0pP3xcXHVERkZFKD86XFx1MjAwRFxcdUQ4M0VcXHVERUYyXFx1RDgzQ1tcXHVERkZCLVxcdURGRkRcXHVERkZGXSk/fFxcdURGRkYoPzpcXHUyMDBEXFx1RDgzRVxcdURFRjJcXHVEODNDW1xcdURGRkItXFx1REZGRV0pPykpPykvZztcbn07XG4iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNJbnRlcmFjdGl2ZSh7c3RyZWFtID0gcHJvY2Vzcy5zdGRvdXR9ID0ge30pIHtcblx0cmV0dXJuIEJvb2xlYW4oXG5cdFx0c3RyZWFtICYmIHN0cmVhbS5pc1RUWSAmJlxuXHRcdHByb2Nlc3MuZW52LlRFUk0gIT09ICdkdW1iJyAmJlxuXHRcdCEoJ0NJJyBpbiBwcm9jZXNzLmVudilcblx0KTtcbn1cbiIsICJpbXBvcnQgcHJvY2VzcyBmcm9tICdub2RlOnByb2Nlc3MnO1xuaW1wb3J0IHJlYWRsaW5lIGZyb20gJ25vZGU6cmVhZGxpbmUnO1xuaW1wb3J0IHtCdWZmZXJMaXN0U3RyZWFtfSBmcm9tICdibCc7XG5cbmNvbnN0IEFTQ0lJX0VUWF9DT0RFID0gMHgwMzsgLy8gQ3RybCtDIGVtaXRzIHRoaXMgY29kZVxuXG5jbGFzcyBTdGRpbkRpc2NhcmRlciB7XG5cdCNyZXF1ZXN0cyA9IDA7XG5cdCNtdXRlZFN0cmVhbSA9IG5ldyBCdWZmZXJMaXN0U3RyZWFtKCk7XG5cdCNvdXJFbWl0O1xuXHQjcmw7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy4jbXV0ZWRTdHJlYW0ucGlwZShwcm9jZXNzLnN0ZG91dCk7XG5cblx0XHRjb25zdCBzZWxmID0gdGhpczsgLy8gZXNsaW50LWRpc2FibGUtbGluZSB1bmljb3JuL25vLXRoaXMtYXNzaWdubWVudFxuXHRcdHRoaXMuI291ckVtaXQgPSBmdW5jdGlvbiAoZXZlbnQsIGRhdGEsIC4uLmFyZ3VtZW50c18pIHtcblx0XHRcdGNvbnN0IHtzdGRpbn0gPSBwcm9jZXNzO1xuXHRcdFx0aWYgKHNlbGYuI3JlcXVlc3RzID4gMCB8fCBzdGRpbi5lbWl0ID09PSBzZWxmLiNvdXJFbWl0KSB7XG5cdFx0XHRcdGlmIChldmVudCA9PT0gJ2tleXByZXNzJykgeyAvLyBGaXhlcyByZWFkbGluZSBiZWhhdmlvclxuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChldmVudCA9PT0gJ2RhdGEnICYmIGRhdGEuaW5jbHVkZXMoQVNDSUlfRVRYX0NPREUpKSB7XG5cdFx0XHRcdFx0cHJvY2Vzcy5lbWl0KCdTSUdJTlQnKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdFJlZmxlY3QuYXBwbHkoc2VsZi4jb3VyRW1pdCwgdGhpcywgW2V2ZW50LCBkYXRhLCAuLi5hcmd1bWVudHNfXSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRSZWZsZWN0LmFwcGx5KHByb2Nlc3Muc3RkaW4uZW1pdCwgdGhpcywgW2V2ZW50LCBkYXRhLCAuLi5hcmd1bWVudHNfXSk7XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXG5cdHN0YXJ0KCkge1xuXHRcdHRoaXMuI3JlcXVlc3RzKys7XG5cblx0XHRpZiAodGhpcy4jcmVxdWVzdHMgPT09IDEpIHtcblx0XHRcdHRoaXMuX3JlYWxTdGFydCgpO1xuXHRcdH1cblx0fVxuXG5cdHN0b3AoKSB7XG5cdFx0aWYgKHRoaXMuI3JlcXVlc3RzIDw9IDApIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcignYHN0b3BgIGNhbGxlZCBtb3JlIHRpbWVzIHRoYW4gYHN0YXJ0YCcpO1xuXHRcdH1cblxuXHRcdHRoaXMuI3JlcXVlc3RzLS07XG5cblx0XHRpZiAodGhpcy4jcmVxdWVzdHMgPT09IDApIHtcblx0XHRcdHRoaXMuX3JlYWxTdG9wKCk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gVE9ETzogVXNlIHByaXZhdGUgbWV0aG9kcyB3aGVuIHRhcmdldGluZyBOb2RlLmpzIDE0LlxuXHRfcmVhbFN0YXJ0KCkge1xuXHRcdC8vIE5vIGtub3duIHdheSB0byBtYWtlIGl0IHdvcmsgcmVsaWFibHkgb24gV2luZG93c1xuXHRcdGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dGhpcy4jcmwgPSByZWFkbGluZS5jcmVhdGVJbnRlcmZhY2Uoe1xuXHRcdFx0aW5wdXQ6IHByb2Nlc3Muc3RkaW4sXG5cdFx0XHRvdXRwdXQ6IHRoaXMuI211dGVkU3RyZWFtLFxuXHRcdH0pO1xuXG5cdFx0dGhpcy4jcmwub24oJ1NJR0lOVCcsICgpID0+IHtcblx0XHRcdGlmIChwcm9jZXNzLmxpc3RlbmVyQ291bnQoJ1NJR0lOVCcpID09PSAwKSB7XG5cdFx0XHRcdHByb2Nlc3MuZW1pdCgnU0lHSU5UJyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLiNybC5jbG9zZSgpO1xuXHRcdFx0XHRwcm9jZXNzLmtpbGwocHJvY2Vzcy5waWQsICdTSUdJTlQnKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdF9yZWFsU3RvcCgpIHtcblx0XHRpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoaXMuI3JsLmNsb3NlKCk7XG5cdFx0dGhpcy4jcmwgPSB1bmRlZmluZWQ7XG5cdH1cbn1cblxuY29uc3Qgc3RkaW5EaXNjYXJkZXIgPSBuZXcgU3RkaW5EaXNjYXJkZXIoKTtcblxuZXhwb3J0IGRlZmF1bHQgc3RkaW5EaXNjYXJkZXI7XG4iLCAiaW1wb3J0IHsgZ2V0SW50ZXJuYWxDb25maWcgfSBmcm9tICcuLi8uLi9jb3JlL3V0aWxzL2dldEludGVybmFsQ29uZmlnJztcbmltcG9ydCB7IGZpbmRFbnRyeXBvaW50cyB9IGZyb20gJy4uLy4uL2NvcmUvYnVpbGQvZmluZEVudHJ5cG9pbnRzJztcbmltcG9ydCB7IGdlbmVyYXRlVHlwZXNEaXIgfSBmcm9tICcuLi8uLi9jb3JlL2J1aWxkL2dlbmVyYXRlVHlwZXNEaXInO1xuaW1wb3J0IHsgZGVmaW5lQ29tbWFuZCB9IGZyb20gJy4uL3V0aWxzL2RlZmluZUNvbW1hbmQnO1xuaW1wb3J0ICogYXMgd3h0IGZyb20gJy4uLy4uJztcblxuZXhwb3J0IGNvbnN0IHByZXBhcmUgPSBkZWZpbmVDb21tYW5kPFxuICBbXG4gICAgcm9vdDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgIGZsYWdzOiB7XG4gICAgICBjb25maWc/OiBzdHJpbmc7XG4gICAgICBkZWJ1Zz86IGJvb2xlYW47XG4gICAgfSxcbiAgXVxuPihhc3luYyAocm9vdCwgZmxhZ3MpID0+IHtcbiAgY29uc3QgY2xpQ29uZmlnOiB3eHQuSW5saW5lQ29uZmlnID0ge1xuICAgIHJvb3QsXG4gICAgY29uZmlnRmlsZTogZmxhZ3MuY29uZmlnLFxuICAgIGRlYnVnOiBmbGFncy5kZWJ1ZyxcbiAgfTtcbiAgY29uc3QgY29uZmlnID0gYXdhaXQgZ2V0SW50ZXJuYWxDb25maWcoY2xpQ29uZmlnLCAnYnVpbGQnKTtcblxuICBjb25maWcubG9nZ2VyLmluZm8oJ0dlbmVyYXRpbmcgdHlwZXMuLi4nKTtcblxuICBjb25zdCBlbnRyeXBvaW50cyA9IGF3YWl0IGZpbmRFbnRyeXBvaW50cyhjb25maWcpO1xuICBhd2FpdCBnZW5lcmF0ZVR5cGVzRGlyKGVudHJ5cG9pbnRzLCBjb25maWcpO1xufSk7XG4iLCAiaW1wb3J0IHsgY29uc29sYSB9IGZyb20gJ2NvbnNvbGEnO1xuaW1wb3J0IHsgZGVmaW5lQ29tbWFuZCB9IGZyb20gJy4uL3V0aWxzL2RlZmluZUNvbW1hbmQnO1xuXG5leHBvcnQgY29uc3QgcHVibGlzaCA9IGRlZmluZUNvbW1hbmQoXG4gIGFzeW5jIChcbiAgICByb290OiBhbnksXG4gICAgeyBjb25maWc6IGNvbmZpZ0ZpbGUsIGRlYnVnIH06IHsgY29uZmlnPzogc3RyaW5nOyBkZWJ1Zz86IHN0cmluZyB9LFxuICApID0+IHtcbiAgICBjb25zb2xhLndhcm4oJ3d4dCBwdWJsaXNoOiBOb3QgaW1wbGVtZW50ZWQnKTtcbiAgfSxcbik7XG4iLCAiaW1wb3J0IHsgQnVpbGRPdXRwdXQsIEludGVybmFsQ29uZmlnIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgemlwZGlyIGZyb20gJ3ppcC1kaXInO1xuaW1wb3J0IHsgZGlybmFtZSwgcmVsYXRpdmUsIHJlc29sdmUgfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCB7IGtlYmFiQ2FzZUFscGhhbnVtZXJpYyB9IGZyb20gJy4vdXRpbHMvc3RyaW5ncyc7XG5pbXBvcnQgeyBnZXRQYWNrYWdlSnNvbiB9IGZyb20gJy4vdXRpbHMvcGFja2FnZSc7XG5pbXBvcnQgeyBtaW5pbWF0Y2ggfSBmcm9tICdtaW5pbWF0Y2gnO1xuaW1wb3J0IHsgZm9ybWF0RHVyYXRpb24gfSBmcm9tICcuL3V0aWxzL2Zvcm1hdER1cmF0aW9uJztcbmltcG9ydCB7IHByaW50RmlsZUxpc3QgfSBmcm9tICcuL2xvZy9wcmludEZpbGVMaXN0JztcblxuLyoqXG4gKiBaaXAgdGhlIGV4dGVuc2lvbiBmb3IgZGlzdHJpYnV0aW9uLiBEb2VzIG5vdCBidWlsZCwganVzdCB6aXBzIHRoZSBvdXRwdXQgdGhhdCBzaG91bGQgZXhpc3QgZm9yXG4gKiB0aGUgZ2l2ZW4gY29uZmlnLlxuICpcbiAqIFJldHVybnMgYSBsaXN0IG9mIFpJUCBmaWxlcyB0aGF0IHdlcmUgY3JlYXRlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHppcEV4dGVuc2lvbihcbiAgY29uZmlnOiBJbnRlcm5hbENvbmZpZyxcbiAgYnVpbGRPdXRwdXQ6IEJ1aWxkT3V0cHV0LFxuKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gIGNvbmZpZy5sb2dnZXIuaW5mbygnWmlwcGluZyBleHRlbnNpb24uLi4nKTtcbiAgY29uc3QgemlwRmlsZXM6IHN0cmluZ1tdID0gW107XG5cbiAgY29uc3QgcHJvamVjdE5hbWUgPVxuICAgIGNvbmZpZy56aXAubmFtZSA/P1xuICAgIGtlYmFiQ2FzZUFscGhhbnVtZXJpYyhcbiAgICAgIChhd2FpdCBnZXRQYWNrYWdlSnNvbihjb25maWcpKT8ubmFtZSB8fCBkaXJuYW1lKHByb2Nlc3MuY3dkKCkpLFxuICAgICk7XG4gIGNvbnN0IGFwcGx5VGVtcGxhdGUgPSAodGVtcGxhdGU6IHN0cmluZyk6IHN0cmluZyA9PlxuICAgIHRlbXBsYXRlXG4gICAgICAucmVwbGFjZUFsbCgne3tuYW1lfX0nLCBwcm9qZWN0TmFtZSlcbiAgICAgIC5yZXBsYWNlQWxsKCd7e2Jyb3dzZXJ9fScsIGNvbmZpZy5icm93c2VyKVxuICAgICAgLnJlcGxhY2VBbGwoXG4gICAgICAgICd7e3ZlcnNpb259fScsXG4gICAgICAgIGJ1aWxkT3V0cHV0Lm1hbmlmZXN0LnZlcnNpb25fbmFtZSA/PyBidWlsZE91dHB1dC5tYW5pZmVzdC52ZXJzaW9uLFxuICAgICAgKVxuICAgICAgLnJlcGxhY2VBbGwoJ3t7bWFuaWZlc3RWZXJzaW9ufX0nLCBgbXYke2NvbmZpZy5tYW5pZmVzdFZlcnNpb259YCk7XG5cbiAgYXdhaXQgZnMuZW5zdXJlRGlyKGNvbmZpZy5vdXRCYXNlRGlyKTtcblxuICAvLyBaSVAgb3V0cHV0IGRpcmVjdG9yeVxuXG4gIGNvbnN0IG91dFppcEZpbGVuYW1lID0gYXBwbHlUZW1wbGF0ZShjb25maWcuemlwLmFydGlmYWN0VGVtcGxhdGUpO1xuICBjb25zdCBvdXRaaXBQYXRoID0gcmVzb2x2ZShjb25maWcub3V0QmFzZURpciwgb3V0WmlwRmlsZW5hbWUpO1xuICBhd2FpdCB6aXBkaXIoY29uZmlnLm91dERpciwge1xuICAgIHNhdmVUbzogb3V0WmlwUGF0aCxcbiAgfSk7XG4gIHppcEZpbGVzLnB1c2gob3V0WmlwUGF0aCk7XG5cbiAgLy8gWklQIHNvdXJjZXMgZm9yIEZpcmVmb3hcblxuICBpZiAoY29uZmlnLmJyb3dzZXIgPT09ICdmaXJlZm94Jykge1xuICAgIGNvbnN0IHNvdXJjZXNaaXBGaWxlbmFtZSA9IGFwcGx5VGVtcGxhdGUoY29uZmlnLnppcC5zb3VyY2VzVGVtcGxhdGUpO1xuICAgIGNvbnN0IHNvdXJjZXNaaXBQYXRoID0gcmVzb2x2ZShjb25maWcub3V0QmFzZURpciwgc291cmNlc1ppcEZpbGVuYW1lKTtcbiAgICBhd2FpdCB6aXBkaXIoY29uZmlnLnppcC5zb3VyY2VzUm9vdCwge1xuICAgICAgc2F2ZVRvOiBzb3VyY2VzWmlwUGF0aCxcbiAgICAgIGZpbHRlcihwYXRoKSB7XG4gICAgICAgIGNvbnN0IHJlbGF0aXZlUGF0aCA9IHJlbGF0aXZlKGNvbmZpZy56aXAuc291cmNlc1Jvb3QsIHBhdGgpO1xuICAgICAgICBjb25zdCBtYXRjaGVkUGF0dGVybiA9IGNvbmZpZy56aXAuaWdub3JlZFNvdXJjZXMuZmluZCgocGF0dGVybikgPT5cbiAgICAgICAgICBtaW5pbWF0Y2gocmVsYXRpdmVQYXRoLCBwYXR0ZXJuKSxcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIG1hdGNoZWRQYXR0ZXJuID09IG51bGw7XG4gICAgICB9LFxuICAgIH0pO1xuICAgIHppcEZpbGVzLnB1c2goc291cmNlc1ppcFBhdGgpO1xuICB9XG5cbiAgYXdhaXQgcHJpbnRGaWxlTGlzdChcbiAgICBjb25maWcubG9nZ2VyLnN1Y2Nlc3MsXG4gICAgYFppcHBlZCBleHRlbnNpb24gaW4gJHtmb3JtYXREdXJhdGlvbihEYXRlLm5vdygpIC0gc3RhcnQpfWAsXG4gICAgY29uZmlnLm91dEJhc2VEaXIsXG4gICAgemlwRmlsZXMsXG4gICk7XG5cbiAgcmV0dXJuIHppcEZpbGVzO1xufVxuIiwgImltcG9ydCAqIGFzIHd4dCBmcm9tICcuLi8uLic7XG5pbXBvcnQgeyBidWlsZEludGVybmFsIH0gZnJvbSAnLi4vLi4vY29yZS9idWlsZCc7XG5pbXBvcnQgeyBnZXRJbnRlcm5hbENvbmZpZyB9IGZyb20gJy4uLy4uL2NvcmUvdXRpbHMvZ2V0SW50ZXJuYWxDb25maWcnO1xuaW1wb3J0IHsgemlwRXh0ZW5zaW9uIH0gZnJvbSAnLi4vLi4vY29yZS96aXAnO1xuaW1wb3J0IHsgZGVmaW5lQ29tbWFuZCB9IGZyb20gJy4uL3V0aWxzL2RlZmluZUNvbW1hbmQnO1xuXG5leHBvcnQgY29uc3QgemlwID0gZGVmaW5lQ29tbWFuZDxcbiAgW1xuICAgIHJvb3Q6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICBmbGFnczoge1xuICAgICAgbW9kZT86IHN0cmluZztcbiAgICAgIGNvbmZpZz86IHN0cmluZztcbiAgICAgIGJyb3dzZXI/OiB3eHQuVGFyZ2V0QnJvd3NlcjtcbiAgICAgIG12Mz86IGJvb2xlYW47XG4gICAgICBtdjI/OiBib29sZWFuO1xuICAgICAgZGVidWc/OiBib29sZWFuO1xuICAgIH0sXG4gIF1cbj4oYXN5bmMgKHJvb3QsIGZsYWdzKSA9PiB7XG4gIGNvbnN0IGNsaUNvbmZpZzogd3h0LklubGluZUNvbmZpZyA9IHtcbiAgICByb290LFxuICAgIG1vZGU6IGZsYWdzLm1vZGUsXG4gICAgYnJvd3NlcjogZmxhZ3MuYnJvd3NlcixcbiAgICBtYW5pZmVzdFZlcnNpb246IGZsYWdzLm12MyA/IDMgOiBmbGFncy5tdjIgPyAyIDogdW5kZWZpbmVkLFxuICAgIGNvbmZpZ0ZpbGU6IGZsYWdzLmNvbmZpZyxcbiAgICBkZWJ1ZzogZmxhZ3MuZGVidWcsXG4gIH07XG5cbiAgY29uc3QgY29uZmlnID0gYXdhaXQgZ2V0SW50ZXJuYWxDb25maWcoY2xpQ29uZmlnLCAnYnVpbGQnKTtcbiAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgYnVpbGRJbnRlcm5hbChjb25maWcpO1xuICBhd2FpdCB6aXBFeHRlbnNpb24oY29uZmlnLCBvdXRwdXQpO1xufSk7XG4iLCAiaW1wb3J0IHsgZGVmaW5lQ29tbWFuZCB9IGZyb20gJy4uL3V0aWxzL2RlZmluZUNvbW1hbmQnO1xuaW1wb3J0ICogYXMgd3h0IGZyb20gJy4uLy4uJztcblxuZXhwb3J0IGNvbnN0IGNsZWFuID0gZGVmaW5lQ29tbWFuZDxcbiAgW1xuICAgIHJvb3Q6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICBmbGFnczoge1xuICAgICAgZGVidWc/OiBib29sZWFuO1xuICAgIH0sXG4gIF1cbj4od3h0LmNsZWFuKTtcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7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QUFBO0FBQUE7OztBQ3hMTjtBQUFBLDJGQUFBTSxTQUFBO0FBQUEsSUFBQUEsUUFBQTtBQUFBLE1BQ0MsTUFBUTtBQUFBLFFBQ1AsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsT0FBUztBQUFBLFFBQ1IsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLE9BQVM7QUFBQSxRQUNSLFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLE9BQVM7QUFBQSxRQUNSLFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxPQUFTO0FBQUEsUUFDUixVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsT0FBUztBQUFBLFFBQ1IsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxPQUFTO0FBQUEsUUFDUixVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLE9BQVM7QUFBQSxRQUNSLFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxPQUFTO0FBQUEsUUFDUixVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsUUFBVTtBQUFBLFFBQ1QsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsUUFBVTtBQUFBLFFBQ1QsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLFFBQVU7QUFBQSxRQUNULFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxRQUFVO0FBQUEsUUFDVCxVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsVUFBWTtBQUFBLFFBQ1gsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsTUFBUTtBQUFBLFFBQ1AsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLE1BQVE7QUFBQSxRQUNQLFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLE9BQVM7QUFBQSxRQUNSLFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsTUFBUTtBQUFBLFFBQ1AsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLFlBQWM7QUFBQSxRQUNiLFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLHFCQUF1QjtBQUFBLFFBQ3RCLFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsTUFBUTtBQUFBLFFBQ1AsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxPQUFTO0FBQUEsUUFDUixVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLE1BQVE7QUFBQSxRQUNQLFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsV0FBYTtBQUFBLFFBQ1osVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxjQUFnQjtBQUFBLFFBQ2YsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsZ0JBQWtCO0FBQUEsUUFDakIsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxTQUFXO0FBQUEsUUFDVixVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxVQUFZO0FBQUEsUUFDWCxVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxPQUFTO0FBQUEsUUFDUixVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLFFBQVU7QUFBQSxRQUNULFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLFdBQWE7QUFBQSxRQUNaLFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLFlBQWM7QUFBQSxRQUNiLFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLFVBQVk7QUFBQSxRQUNYLFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLFFBQVU7QUFBQSxRQUNULFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDUztBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLEtBQU87QUFBQSxRQUNOLFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsUUFBVTtBQUFBLFFBQ1QsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxlQUFpQjtBQUFBLFFBQ2hCLFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLGdCQUFrQjtBQUFBLFFBQ2pCLFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLGNBQWdCO0FBQUEsUUFDZixVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxRQUFVO0FBQUEsUUFDVCxVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsUUFBVTtBQUFBLFFBQ1QsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLFNBQVc7QUFBQSxRQUNWLFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxTQUFXO0FBQUEsUUFDVixVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsU0FBVztBQUFBLFFBQ1YsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsU0FBVztBQUFBLFFBQ1YsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLFNBQVc7QUFBQSxRQUNWLFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxTQUFXO0FBQUEsUUFDVixVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsU0FBVztBQUFBLFFBQ1YsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLFNBQVc7QUFBQSxRQUNWLFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxVQUFZO0FBQUEsUUFDWCxVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLFVBQVk7QUFBQSxRQUNYLFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxVQUFZO0FBQUEsUUFDWCxVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsVUFBWTtBQUFBLFFBQ1gsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxPQUFTO0FBQUEsUUFDUixVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsUUFBVTtBQUFBLFFBQ1QsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLFFBQVU7QUFBQSxRQUNULFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsYUFBZTtBQUFBLFFBQ2QsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxjQUFnQjtBQUFBLFFBQ2YsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsUUFBVTtBQUFBLFFBQ1QsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLFFBQVU7QUFBQSxRQUNULFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLFFBQVU7QUFBQSxRQUNULFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxPQUFTO0FBQUEsUUFDUixVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLE9BQVM7QUFBQSxRQUNSLFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsVUFBWTtBQUFBLFFBQ1gsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLE1BQVE7QUFBQSxRQUNQLFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxRQUFVO0FBQUEsUUFDVCxVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsTUFBUTtBQUFBLFFBQ1AsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxPQUFTO0FBQUEsUUFDUixVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsTUFBUTtBQUFBLFFBQ1AsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsU0FBVztBQUFBLFFBQ1YsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLFdBQWE7QUFBQSxRQUNaLFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxTQUFXO0FBQUEsUUFDVixVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsT0FBUztBQUFBLFFBQ1IsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLE9BQVM7QUFBQSxRQUNSLFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsVUFBWTtBQUFBLFFBQ1gsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsYUFBZTtBQUFBLFFBQ2QsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxVQUFZO0FBQUEsUUFDWCxVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxjQUFnQjtBQUFBLFFBQ2YsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxXQUFhO0FBQUEsUUFDWixVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsU0FBVztBQUFBLFFBQ1YsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLE1BQ0EsYUFBZTtBQUFBLFFBQ2QsVUFBWTtBQUFBLFFBQ1osUUFBVTtBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLFdBQWE7QUFBQSxRQUNaLFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxpQkFBbUI7QUFBQSxRQUNsQixVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxZQUFjO0FBQUEsUUFDYixVQUFZO0FBQUEsUUFDWixRQUFVO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLFdBQWE7QUFBQSxRQUNaLFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsTUFDQSxlQUFpQjtBQUFBLFFBQ2hCLFVBQVk7QUFBQSxRQUNaLFFBQVU7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7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QWEsU0FDcEMsU0FBVSxhQUFhLGFBQWEsU0FDcEMsU0FBVSxhQUFhLGFBQWEsU0FDcEMsU0FBVSxhQUFhLGFBQWEsU0FDcEMsU0FBVSxhQUFhLGFBQWEsU0FDcEMsU0FBVSxhQUFhLGFBQWEsU0FDcEMsU0FBVSxhQUFhLGFBQWEsU0FDcEMsU0FBVSxhQUFhLGFBQWEsU0FDcEMsU0FBVSxhQUFhLGFBQWEsU0FDcEMsU0FBVSxhQUFhLGFBQWEsU0FDcEMsU0FBVSxhQUFhLGFBQWEsU0FDcEMsU0FBVSxhQUFhLGFBQWEsU0FDcEMsVUFBVyxhQUFhLGFBQWEsVUFDckMsVUFBVyxhQUFhLGFBQWEsVUFDckMsVUFBVyxhQUFhLGFBQWEsVUFDckMsVUFBVyxhQUFhLGFBQWEsVUFDckMsVUFBVyxhQUFhLGFBQWEsVUFDckMsVUFBVyxhQUFhLGFBQWEsVUFDckMsVUFBVyxhQUFhLGFBQWEsVUFDckMsVUFBVyxhQUFhLGFBQWEsUUFBVTtBQUNsRCxlQUFPO0FBQUEsTUFDVDtBQUNBLFVBQUssTUFBVSxhQUFhLGFBQWEsT0FDcEMsT0FBVSxhQUFhLGFBQWEsT0FDcEMsT0FBVSxhQUFhLGFBQWEsT0FDcEMsT0FBVSxhQUNWLE9BQVUsYUFDVixTQUFVLGFBQWEsYUFBYSxTQUNwQyxTQUFVLGFBQWEsYUFBYSxPQUFTO0FBQ2hELGVBQU87QUFBQSxNQUNUO0FBQ0EsVUFBSyxPQUFVLGFBQ1YsT0FBVSxhQUNWLE9BQVUsYUFBYSxhQUFhLE9BQ3BDLE9BQVUsYUFDVixPQUFVLGFBQWEsYUFBYSxPQUNwQyxPQUFVLGFBQWEsYUFBYSxPQUNwQyxPQUFVLGFBQWEsYUFBYSxPQUNwQyxPQUFVLGFBQWEsYUFBYSxPQUNwQyxPQUFVLGFBQ1YsT0FBVSxhQUNWLE9BQVUsYUFBYSxhQUFhLE9BQ3BDLE9BQVUsYUFBYSxhQUFhLE9BQ3BDLE9BQVUsYUFDVixPQUFVLGFBQWEsYUFBYSxPQUNwQyxPQUFVLGFBQWEsYUFBYSxPQUNwQyxPQUFVLGFBQ1YsT0FBVSxhQUFhLGFBQWEsT0FDcEMsT0FBVSxhQUFhLGFBQWEsT0FDcEMsT0FBVSxhQUNWLE9BQVUsYUFDVixPQUFVLGFBQ1YsT0FBVSxhQUNWLE9BQVUsYUFDVixPQUFVLGFBQ1YsT0FBVSxhQUFhLGFBQWEsT0FDcEMsT0FBVSxhQUNWLE9BQVUsYUFBYSxhQUFhLE9BQ3BDLE9BQVUsYUFDVixPQUFVLGFBQWEsYUFBYSxPQUNwQyxPQUFVLGFBQ1YsT0FBVSxhQUFhLGFBQWEsT0FDcEMsT0FBVSxhQUNWLE9BQVUsYUFBYSxhQUFhLE9BQ3BDLE9BQVUsYUFBYSxhQUFhLE9BQ3BDLE9BQVUsYUFDVixPQUFVLGFBQ1YsT0FBVSxhQUNWLE9BQVUsYUFDVixPQUFVLGFBQ1YsT0FBVSxhQUNWLE9BQVUsYUFDVixPQUFVLGFBQ1YsT0FBVSxhQUNWLE9BQVUsYUFDVixPQUFVLGFBQ1YsT0FBVSxhQUNWLE9BQVUsYUFDVixPQUFVLGFBQWEsYUFBYSxPQUNwQyxPQUFVLGFBQ1YsT0FBVSxhQUNWLE9BQVUsYUFBYSxhQUFhLE9BQ3BDLE9BQVUsYUFDVixPQUFVLGFBQ1YsT0FBVSxhQUFhLGFBQWEsT0FDcEMsT0FBVSxhQUFhLGFBQWEsT0FDcEMsT0FBVSxhQUFhLGFBQWEsT0FDcEMsT0FBVSxhQUFhLGFBQWEsT0FDcEMsT0FBVSxhQUFhLGFBQWEsT0FDcEMsUUFBVSxhQUNWLFFBQVUsYUFBYSxhQUFhLFFBQ3BDLFFBQVUsYUFDVixRQUFVLGFBQ1YsUUFBVSxhQUFhLGFBQWEsUUFDcEMsUUFBVSxhQUFhLGFBQWEsUUFDcEMsUUFBVSxhQUFhLGFBQWEsUUFDcEMsUUFBVSxhQUFhLGFBQWEsUUFDcEMsUUFBVSxhQUFhLGFBQWEsUUFDcEMsUUFBVSxhQUNWLFFBQVUsYUFBYSxhQUFhLFFBQ3BDLFFBQVUsYUFDVixRQUFVLGFBQ1YsUUFBVSxhQUNWLFFBQVUsYUFDVixRQUFVLGFBQ1YsUUFBVSxhQUFhLGFBQWEsUUFDcEMsUUFBVSxhQUNWLFFBQVUsYUFDVixRQUFVLGFBQ1YsUUFBVSxhQUNWLFFBQVUsYUFDVixRQUFVLGFBQ1YsUUFBVSxhQUFhLGFBQWEsUUFDcEMsUUFBVSxhQUNWLFFBQVUsYUFDVixRQUFVLGFBQWEsYUFBYSxRQUNwQyxRQUFVLGFBQWEsYUFBYSxRQUNwQyxRQUFVLGFBQWEsYUFBYSxRQUNwQyxRQUFVLGFBQWEsYUFBYSxRQUNwQyxRQUFVLGFBQ1YsUUFBVSxhQUFhLGFBQWEsUUFDcEMsUUFBVSxhQUFhLGFBQWEsUUFDcEMsUUFBVSxhQUNWLFFBQVUsYUFDVixRQUFVLGFBQ1YsUUFBVSxhQUNWLFFBQVUsYUFBYSxhQUFhLFFBQ3BDLFFBQVUsYUFBYSxhQUFhLFFBQ3BDLFFBQVUsYUFDVixRQUFVLGFBQ1YsUUFBVSxhQUNWLFFBQVUsYUFDVixRQUFVLGFBQ1YsUUFBVSxhQUFhLGFBQWEsUUFDcEMsUUFBVSxhQUNWLFFBQVUsYUFDVixRQUFVLGFBQWEsYUFBYSxRQUNwQyxRQUFVLGFBQ1YsUUFBVSxhQUFhLGFBQWEsUUFDcEMsUUFBVSxhQUFhLGFBQWEsUUFDcEMsUUFBVSxhQUNWLFFBQVUsYUFDVixRQUFVLGFBQ1YsUUFBVSxhQUFhLGFBQWEsUUFDcEMsUUFBVSxhQUFhLGFBQWEsUUFDcEMsUUFBVSxhQUFhLGFBQWEsUUFDcEMsUUFBVSxhQUFhLGFBQWEsUUFDcEMsUUFBVSxhQUFhLGFBQWEsUUFDcEMsUUFBVSxhQUFhLGFBQWEsUUFDcEMsUUFBVSxhQUNWLFFBQVUsYUFDVixRQUFVLGFBQ1YsUUFBVSxhQUNWLFFBQVUsYUFDVixRQUFVLGFBQWEsYUFBYSxRQUNwQyxRQUFVLGFBQWEsYUFBYSxRQUNwQyxRQUFVLGFBQWEsYUFBYSxRQUNwQyxRQUFVLGFBQWEsYUFBYSxRQUNwQyxRQUFVLGFBQWEsYUFBYSxRQUNwQyxRQUFVLGFBQWEsYUFBYSxRQUNwQyxRQUFVLGFBQWEsYUFBYSxRQUNwQyxRQUFVLGFBQWEsYUFBYSxRQUNwQyxRQUFVLGFBQWEsYUFBYSxRQUNwQyxRQUFVLGFBQWEsYUFBYSxRQUNwQyxRQUFVLGFBQWEsYUFBYSxRQUNwQyxRQUFVLGFBQWEsYUFBYSxRQUNwQyxRQUFVLGFBQ1YsUUFBVSxhQUFhLGFBQWEsUUFDcEMsUUFBVSxhQUFhLGFBQWEsUUFDcEMsUUFBVSxhQUNWLFFB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QiwyQkFBMkIsRUFDekQsT0FBTyxxQkFBcUIsY0FBYyxFQUMxQyxPQUFPLDJCQUEyQixtQkFBbUIsRUFDckQsT0FBTyxTQUFTLG9CQUFvQixFQUNwQyxPQUFPLFNBQVMsb0JBQW9CLEVBQ3BDLE9BQWdCLEdBQUc7QUFHdEIsSUFDRyxRQUFRLGtCQUFrQiw0QkFBNEIsRUFDdEQsT0FBTyx1QkFBdUIsMkJBQTJCLEVBQ3pELE9BQWdCLE9BQU87QUFHMUIsSUFDRyxRQUFRLGdCQUFnQixrQ0FBa0MsRUFDMUQsTUFBTSxTQUFTLEVBQ2YsT0FBZ0JDLE1BQUs7QUFHeEIsSUFBSSxRQUFRLGtCQUFrQixtQkFBbUIsRUFBRSxPQUFnQixPQUFPO0FBRzFFLElBQ0csUUFBUSxvQkFBb0IsMEJBQTBCLEVBQ3RELE9BQU8sNkJBQTZCLGlCQUFpQixFQUNyRCxPQUFPLHlCQUF5Qiw4QkFBOEIsRUFDOUQsT0FBZ0IsSUFBSTtBQUV2QixJQUFJLE1BQU07IiwKICAibmFtZXMiOiBbIm1vZHVsZSIsICJtb2R1bGUiLCAib25ldGltZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgInByb2Nlc3MiLCAidW5sb2FkIiwgImVtaXQiLCAibG9hZCIsICJwcm9jZXNzUmVhbGx5RXhpdCIsICJwcm9jZXNzRW1pdCIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIkJ1ZmZlciIsICJtb2R1bGUiLCAiZXJyIiwgInNlbGYiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiQnVmZmVyIiwgInJlYWxIYXNJbnN0YW5jZSIsICJtb2R1bGUiLCAia2V5cyIsICJzZWxmIiwgIm1vZHVsZSIsICJCdWZmZXIiLCAiQnVmZmVyIiwgInNlbGYiLCAibW9kdWxlIiwgIm9ubGVnYWN5ZmluaXNoIiwgIm9uZmluaXNoIiwgIm9uZW5kIiwgIm9uZXJyb3IiLCAib25jbG9zZSIsICJvbnJlcXVlc3QiLCAibW9kdWxlIiwgInJlc29sdmUiLCAiY3JlYXRlUmVhZGFibGVTdHJlYW1Bc3luY0l0ZXJhdG9yIiwgIm1vZHVsZSIsICJyZXNvbHZlIiwgInNlbGYiLCAibW9kdWxlIiwgIkVFbGlzdGVuZXJDb3VudCIsICJCdWZmZXIiLCAiZGVidWciLCAic2VsZiIsICJuIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiQnVmZmVyIiwgImNvcHkiLCAibSIsICJtb2R1bGUiLCAiQnVmZmVyTGlzdFN0cmVhbSIsICJwaXBlciIsICJpbXBvcnRfbm9kZV9wYXRoIiwgInZpdGUiLCAiaW1wb3J0X2ZzX2V4dHJhIiwgImZzIiwgInBhdGgiLCAiZnMiLCAiaW1wb3J0X25vZGVfcGF0aCIsICJub3JtYWxpemVQYXRoIiwgInBhdGgiLCAibm9kZVBhdGgiLCAicGF0aCIsICJub3JtYWxpemVQYXRoIiwgImltcG9ydF9wYXRoIiwgImlzT2ZmbGluZSIsICJkbnMiLCAiaW1wb3J0X25vZGVfcGF0aCIsICJpbXBvcnRfZnNfZXh0cmEiLCAibm9ybWFsaXplUGF0aCIsICJmcyIsICJpbXBvcnRfcGF0aCIsICJ1bmltcG9ydCIsICJpbXBvcnRfZnNfZXh0cmEiLCAiaW1wb3J0X3BhdGgiLCAibm9ybWFsaXplUGF0aCIsICJmcyIsICJjb25zb2xhIiwgImVudiIsICJwYXRoIiwgInppcCIsICJ2aXRlIiwgImdsb2JhbCIsICJpbXBvcnRfcGljb2NvbG9ycyIsICJub3JtYWxpemVQYXRoIiwgImltcG9ydF9jb25zb2xhIiwgImltcG9ydF9ub2RlX3BhdGgiLCAidml0ZSIsICJpbXBvcnRfZnNfZXh0cmEiLCAiaW1wb3J0X3BhdGgiLCAiZnMiLCAicGF0aCIsICJpbXBvcnRfZnNfZXh0cmEiLCAiaW1wb3J0X3BhdGgiLCAiaW1wb3J0X2ZzX2V4dHJhIiwgImZzIiwgImdsb2IiLCAiZ2xvYmFsIiwgImZzIiwgImltcG9ydF9wYXRoIiwgImltcG9ydF9mc19leHRyYSIsICJpbXBvcnRfbGlua2Vkb20iLCAiaW1wb3J0X3VuaW1wb3J0IiwgImltcG9ydF9mc19leHRyYSIsICJpbXBvcnRfcGF0aCIsICJwYXRoIiwgIm5vcm1hbGl6ZVBhdGgiLCAidW5pbXBvcnQiLCAiZnMiLCAiY3JlYXRlSklUSSIsICJ0cmFuc2Zvcm0iLCAiaW1wb3J0X2Zhc3RfZ2xvYiIsICJnbG9iIiwgInBhdGgiLCAiSlNPTjUiLCAiZnMiLCAiaW1wb3J0X3VuaW1wb3J0IiwgImltcG9ydF9mc19leHRyYSIsICJpbXBvcnRfcGF0aCIsICJpbXBvcnRfbm9kZV9wYXRoIiwgImZzIiwgInVuaW1wb3J0IiwgIm5vcm1hbGl6ZVBhdGgiLCAicGF0aCIsICJnbG9iYWwiLCAiaW1wb3J0X2ZzX2V4dHJhIiwgImltcG9ydF9wYXRoIiwgImltcG9ydF9ub2RlX3BhdGgiLCAiaW1wb3J0X2ZzX2V4dHJhIiwgImZzIiwgImZzIiwgInZlcnNpb24iLCAib3B0aW9ucyIsICJyZWdleCIsICJub3JtYWxpemVQYXRoIiwgImltcG9ydF9waWNvY29sb3JzIiwgInZpdGUiLCAiaW1wb3J0X2ZzX2V4dHJhIiwgImltcG9ydF9wYXRoIiwgImltcG9ydF9ub2RlX3BhdGgiLCAiaW1wb3J0X2ZzX2V4dHJhIiwgInBhdGgiLCAiZnMiLCAicGMiLCAicGMiLCAiZnMiLCAidml0ZSIsICJwYXRoIiwgImltcG9ydF9ub2RlX3BhdGgiLCAiaW1wb3J0X2Zhc3RfZ2xvYiIsICJpbXBvcnRfZnNfZXh0cmEiLCAiaW1wb3J0X2NvbnNvbGEiLCAiaW1wb3J0X3BpY29jb2xvcnMiLCAicGMiLCAiZ2xvYiIsICJwYXRoIiwgImZzIiwgImJ1aWxkIiwgImNyZWF0ZVNlcnZlciIsICJwYXRoIiwgInBjIiwgImltcG9ydF9jb25zb2xhIiwgImltcG9ydF9waWNvY29sb3JzIiwgImltcG9ydF9jb25zb2xhIiwgInBjIiwgImJ1aWxkIiwgImNyZWF0ZVNlcnZlciIsICJpbXBvcnRfbm9kZV9wcm9jZXNzIiwgInByb2Nlc3MiLCAib3MiLCAidmVyc2lvbiIsICJ0dHkiLCAic3R5bGVzIiwgImNoYWxrIiwgInN0eWxlcyIsICJzZWxmIiwgImltcG9ydF9ub2RlX3Byb2Nlc3MiLCAiaW1wb3J0X25vZGVfcHJvY2VzcyIsICJvbmV0aW1lIiwgInNpZ25hbEV4aXQiLCAicHJvY2VzcyIsICJwcm9jZXNzIiwgImltcG9ydF9ub2RlX3Byb2Nlc3MiLCAicHJvY2VzcyIsICJlYXN0QXNpYW5XaWR0aCIsICJpbXBvcnRfbm9kZV9wcm9jZXNzIiwgInByb2Nlc3MiLCAic2VsZiIsICJyZWFkbGluZSIsICJpbXBvcnRfY2xpX3NwaW5uZXJzIiwgInByb2Nlc3MiLCAiY2xpU3Bpbm5lcnMiLCAiaW1wb3J0X2NvbnNvbGEiLCAiaW1wb3J0X2ZzX2V4dHJhIiwgImltcG9ydF9ub2RlX3BhdGgiLCAiaW1wb3J0X3BpY29jb2xvcnMiLCAicHJvbXB0cyIsICJwYXRoIiwgInBjIiwgImZzIiwgImltcG9ydF9jb25zb2xhIiwgImltcG9ydF9ub2RlX3BhdGgiLCAiaW1wb3J0X2ZzX2V4dHJhIiwgImltcG9ydF9taW5pbWF0Y2giLCAiZnMiLCAiemlwZGlyIiwgInBhdGgiLCAiY2xlYW4iLCAiY2FjIiwgImJ1aWxkIiwgImNsZWFuIl0KfQo=