experimental-agent 0.8.0-alpha.2 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunk-5N2UOGXY.mjs +123 -0
- package/dist/chunk-HPBAZJLN.mjs +242 -0
- package/dist/{chunk-EH4L2CPW.mjs → chunk-HVZTAMAX.mjs} +2 -10
- package/dist/{client-DIanpEQ_.d.ts → client-BY6gceox.d.ts} +0 -6
- package/dist/{client-PuttJd6O.d.mts → client-BaItaOx5.d.mts} +0 -6
- package/dist/{framework-DH4Z1NLV.d.ts → framework-DSe3sdP_.d.ts} +5 -0
- package/dist/{framework-c9fvEy0o.d.mts → framework-VPUsYNMf.d.mts} +5 -0
- package/dist/framework-runtime.d.mts +3 -3
- package/dist/framework-runtime.d.ts +3 -3
- package/dist/framework-runtime.js +33 -15
- package/dist/framework-runtime.mjs +33 -7
- package/dist/framework.d.mts +4 -4
- package/dist/framework.d.ts +4 -4
- package/dist/framework.js +45 -2
- package/dist/framework.mjs +1 -1
- package/dist/index.d.mts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +2 -10
- package/dist/index.mjs +1 -1
- package/dist/next/agents.d.mts +1 -1
- package/dist/next/agents.d.ts +1 -1
- package/dist/next/agents.js +45 -2
- package/dist/next/agents.mjs +2 -2
- package/dist/next/loader.js +2 -2
- package/dist/next/loader.mjs +1 -1
- package/dist/next.js +5 -3
- package/dist/next.mjs +5 -3
- package/dist/react.d.mts +1 -1
- package/dist/react.d.ts +1 -1
- package/dist/{resolve-BZ26gcyj.d.ts → resolve-DCys_2es.d.ts} +17 -4
- package/dist/{resolve-Cma6YFgx.d.mts → resolve-YlI7Dugf.d.mts} +17 -4
- package/package.json +13 -13
- package/dist/chunk-DO4HKPHR.mjs +0 -199
- package/dist/chunk-LMYEJDMD.mjs +0 -123
|
@@ -5260,7 +5260,7 @@ function getSandboxContexts(agent2) {
|
|
|
5260
5260
|
}
|
|
5261
5261
|
return map;
|
|
5262
5262
|
}
|
|
5263
|
-
var Agent = class
|
|
5263
|
+
var Agent = class {
|
|
5264
5264
|
name;
|
|
5265
5265
|
options;
|
|
5266
5266
|
constructor(name, options) {
|
|
@@ -5314,14 +5314,6 @@ var Agent = class _Agent {
|
|
|
5314
5314
|
}
|
|
5315
5315
|
session;
|
|
5316
5316
|
sandbox;
|
|
5317
|
-
/**
|
|
5318
|
-
* Create a derived agent with merged options. The returned agent is NOT
|
|
5319
|
-
* registered in the workflow registry – it's a one-off instance used by
|
|
5320
|
-
* the framework to layer fs-scanned config onto an agent.ts definition.
|
|
5321
|
-
*/
|
|
5322
|
-
extend(fn) {
|
|
5323
|
-
return new _Agent(this.name, fn(this.options));
|
|
5324
|
-
}
|
|
5325
5317
|
};
|
|
5326
5318
|
function agent(name, options) {
|
|
5327
5319
|
const instance = new Agent(name, options);
|
|
@@ -5363,6 +5355,9 @@ function mergeFrameworkOptions(base, overlay) {
|
|
|
5363
5355
|
merged.skills = [...base.skills, ...overlay.skills];
|
|
5364
5356
|
}
|
|
5365
5357
|
}
|
|
5358
|
+
if (overlay.tools !== void 0) {
|
|
5359
|
+
merged.tools = { ...base.tools, ...overlay.tools };
|
|
5360
|
+
}
|
|
5366
5361
|
return merged;
|
|
5367
5362
|
}
|
|
5368
5363
|
|
|
@@ -5383,8 +5378,33 @@ async function resolveFrameworkAgent(opts) {
|
|
|
5383
5378
|
resolvedAgentCache.set(cacheKey, instance);
|
|
5384
5379
|
return instance;
|
|
5385
5380
|
}
|
|
5381
|
+
async function resolveToolImports(loaders) {
|
|
5382
|
+
const resolved = await Promise.all(
|
|
5383
|
+
Object.entries(loaders).map(async ([toolName, load]) => {
|
|
5384
|
+
const mod = await load();
|
|
5385
|
+
if (!mod.default) {
|
|
5386
|
+
throw new Error(
|
|
5387
|
+
`Tool "${toolName}" module does not have a default export.
|
|
5388
|
+
|
|
5389
|
+
hint: tools/${toolName}.ts (or tools/${toolName}/index.ts) must export a default tool.
|
|
5390
|
+
|
|
5391
|
+
import { tool } from "ai";
|
|
5392
|
+
export default tool({ ... });
|
|
5393
|
+
`
|
|
5394
|
+
);
|
|
5395
|
+
}
|
|
5396
|
+
return [toolName, mod.default];
|
|
5397
|
+
})
|
|
5398
|
+
);
|
|
5399
|
+
return Object.fromEntries(resolved);
|
|
5400
|
+
}
|
|
5386
5401
|
async function resolveEntry(opts) {
|
|
5387
5402
|
const { name, entry } = opts;
|
|
5403
|
+
const config = { ...entry.config };
|
|
5404
|
+
const toolLoaders = entry.imports?.tools;
|
|
5405
|
+
if (toolLoaders && Object.keys(toolLoaders).length > 0) {
|
|
5406
|
+
config.tools = await resolveToolImports(toolLoaders);
|
|
5407
|
+
}
|
|
5388
5408
|
if (typeof entry.import === "function") {
|
|
5389
5409
|
const mod = await entry.import();
|
|
5390
5410
|
if (!mod.default) {
|
|
@@ -5399,14 +5419,12 @@ hint: agents/${name}/agent.ts must export a default agent instance.
|
|
|
5399
5419
|
);
|
|
5400
5420
|
}
|
|
5401
5421
|
const imported = mod.default;
|
|
5402
|
-
if (hasConfig(
|
|
5403
|
-
return imported.
|
|
5404
|
-
(base) => mergeFrameworkOptions(base, entry.config)
|
|
5405
|
-
);
|
|
5422
|
+
if (hasConfig(config)) {
|
|
5423
|
+
return agent(name, mergeFrameworkOptions(imported.options, config));
|
|
5406
5424
|
}
|
|
5407
5425
|
return imported;
|
|
5408
5426
|
}
|
|
5409
|
-
return agent(name,
|
|
5427
|
+
return agent(name, config);
|
|
5410
5428
|
}
|
|
5411
5429
|
function hasConfig(config) {
|
|
5412
5430
|
return Object.keys(config).length > 0;
|
|
@@ -5428,4 +5446,4 @@ var runtime = {
|
|
|
5428
5446
|
0 && (module.exports = {
|
|
5429
5447
|
runtime
|
|
5430
5448
|
});
|
|
5431
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL3V0aWxzL2xvZ2dlci50cyIsICIuLi9zcmMvc2FuZGJveC9iaW5kaW5ncy92ZXJjZWwtbGlmZWN5Y2xlL3N0ZXBzLnRzIiwgIi4uL3NyYy9zYW5kYm94L2JpbmRpbmdzL3ZlcmNlbC1saWZlY3ljbGUvd29ya2Zsb3cudHMiLCAiLi4vc3JjL3NhbmRib3gvYmluZGluZ3MvdmVyY2VsLnRzIiwgIi4uL3NyYy9zYW5kYm94L2JpbmRpbmdzL2RvY2tlci50cyIsICIuLi9zcmMvc2FuZGJveC9iaW5kaW5ncy9sb2NhbC50cyIsICIuLi9zcmMvc2FuZGJveC9wcm9jZXNzLW1hbmFnZXIudHMiLCAiLi4vc3JjL2ZyYW1ld29yay1ydW50aW1lL2luZGV4LnRzIiwgIi4uL3NyYy9hZ2VudC9jbGllbnQudHMiLCAiLi4vc3JjL3NhbmRib3gvaGFuZGxlLnRzIiwgIi4uL3NyYy9hZ2VudC9pcy12ZXJjZWwudHMiLCAiLi4vc3JjL2Vycm9ycy50cyIsICIuLi9zcmMvc2FuZGJveC9zZXR1cC50cyIsICIuLi9zcmMvc2FuZGJveC9leGVjLnRzIiwgIi4uL3NyYy9zYW5kYm94L2dldC1kb21haW4udHMiLCAiLi4vc3JjL3NhbmRib3gvZ2V0LXN0YXR1cy50cyIsICIuLi9zcmMvc2FuZGJveC9raWxsLnRzIiwgIi4uL3NyYy9zYW5kYm94L3JlYWQtZmlsZS50cyIsICIuLi9zcmMvc2FuZGJveC9zbmFwc2hvdC50cyIsICIuLi9zcmMvc2FuZGJveC9zdGFydC50cyIsICIuLi9zcmMvc2FuZGJveC9zdG9wLnRzIiwgIi4uL3NyYy9zYW5kYm94L3VwZGF0ZS1uZXR3b3JrLXBvbGljeS50cyIsICIuLi9zcmMvc2FuZGJveC93cml0ZS1maWxlcy50cyIsICIuLi9zcmMvc2Vzc2lvbi9oYW5kbGUudHMiLCAiLi4vc3JjL3V0aWxzL3VpLnRzIiwgIi4uL3NyYy91dGlscy91c2FnZS50cyIsICIuLi9zcmMvc2Vzc2lvbi9oaXN0b3J5LnRzIiwgIi4uL3NyYy9zZXNzaW9uL2ludGVycnVwdC50cyIsICIuLi9zcmMvc2Vzc2lvbi9zZW5kLnRzIiwgIi4uL3NyYy9zZXNzaW9uL2FpLWxvb3Avc3RyZWFtLXRleHQudHMiLCAiLi4vc3JjL3NraWxscy9kaXNjb3Zlci50cyIsICIuLi9zcmMvc2tpbGxzL3BhcnNlci50cyIsICIuLi9zcmMvc2tpbGxzL3Jlc29sdmUudHMiLCAiLi4vc3JjL3NraWxscy9yZXNvbHZlLWhvc3QudHMiLCAiLi4vc3JjL3NraWxscy9yZXNvbHZlLWlubGluZS50cyIsICIuLi9zcmMvc2tpbGxzL3Jlc29sdmUtcmVtb3RlLnRzIiwgIi4uL3NyYy90b29scy9pbmRleC50cyIsICIuLi9zcmMvdG9vbHMvamF2YXNjcmlwdC50cyIsICIuLi9zcmMvdG9vbHMvbmVlZHMtYXBwcm92YWwudHMiLCAiLi4vc3JjL3Rvb2xzL3Rvb2wudHMiLCAiLi4vc3JjL3V0aWxzL3Byb21wdC1jYWNoZS50cyIsICIuLi9zcmMvc2Vzc2lvbi9zdHJlYW0udHMiLCAiLi4vc3JjL3Nlc3Npb24vdXBkYXRlLnRzIiwgIi4uL3NyYy9zZXNzaW9uL3VzYWdlLnRzIiwgIi4uL3NyYy9zdG9yYWdlL2FkYXB0ZXIudHMiLCAiLi4vc3JjL3N0b3JhZ2UvYmluZGluZ3Mva3Ytb3B0aW1pc3RpYy11cGRhdGUudHMiLCAiLi4vc3JjL3N0b3JhZ2UvYmluZGluZ3Mva3YudHMiLCAiLi4vc3JjL3N0b3JhZ2UvYmluZGluZ3MvbG9jYWwudHMiLCAiLi4vc3JjL3N0b3JhZ2Uvc2hvdWxkLWZhbGxiYWNrLWt2Mi50cyIsICIuLi9zcmMvYWdlbnQvcmVnaXN0cnkudHMiLCAiLi4vc3JjL2ZyYW1ld29yay1ydW50aW1lL21lcmdlLW9wdGlvbnMudHMiLCAiLi4vc3JjL2ZyYW1ld29yay1ydW50aW1lL3Jlc29sdmUudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImV4cG9ydCB0eXBlIExvZ0xldmVsID0gXCJpbmZvXCIgfCBcIndhcm5cIiB8IFwiZXJyb3JcIiB8IFwic2lsZW50XCI7XG5cbmNvbnN0IExPR19MRVZFTF9QUklPUklUWTogUmVjb3JkPExvZ0xldmVsLCBudW1iZXI+ID0ge1xuICBpbmZvOiAwLFxuICB3YXJuOiAxLFxuICBlcnJvcjogMixcbiAgc2lsZW50OiAzLFxufTtcblxuZXhwb3J0IHR5cGUgTG9nQ29udGV4dCA9IHtcbiAgc2Vzc2lvbklkPzogc3RyaW5nO1xuICBtZXNzYWdlSWQ/OiBzdHJpbmc7XG4gIHNhbmRib3hJZD86IHN0cmluZztcbiAgW2tleTogc3RyaW5nXTogdW5rbm93bjtcbn07XG5cbmV4cG9ydCB0eXBlIExvZ2dpbmdDb25maWcgPSB7XG4gIGxldmVsPzogTG9nTGV2ZWw7XG4gIC8qKlxuICAgKiBUb3AtbGV2ZWwgbGFiZWwgZm9yIGFsbCBsb2cgbGluZXMuXG4gICAqIEBkZWZhdWx0IFwiYWdlbnRcIlxuICAgKiBAZXhhbXBsZSBcIm15LWFwcFwiIFx1MjE5MiBbbXktYXBwOmRlZmF1bHQ6d29ya2Zsb3ddXG4gICAqL1xuICBwcmVmaXg/OiBzdHJpbmc7XG4gIG5hbWU/OiBzdHJpbmc7XG59O1xuXG5mdW5jdGlvbiBnZXRMZXZlbChjb25maWc6IExvZ2dpbmdDb25maWcpOiBMb2dMZXZlbCB7XG4gIHJldHVybiBjb25maWcubGV2ZWwgPz8gXCJ3YXJuXCI7XG59XG5cbmZ1bmN0aW9uIGdldFByZWZpeChjb25maWc6IExvZ2dpbmdDb25maWcpOiBzdHJpbmcge1xuICByZXR1cm4gY29uZmlnLnByZWZpeCA/PyBcImFnZW50XCI7XG59XG5cbmZ1bmN0aW9uIHNob3VsZExvZyhjb25maWc6IExvZ2dpbmdDb25maWcsIGxldmVsOiBMb2dMZXZlbCk6IGJvb2xlYW4ge1xuICByZXR1cm4gTE9HX0xFVkVMX1BSSU9SSVRZW2xldmVsXSA+PSBMT0dfTEVWRUxfUFJJT1JJVFlbZ2V0TGV2ZWwoY29uZmlnKV07XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFRhZyhjb25maWc6IExvZ2dpbmdDb25maWcsIHN1YnN5c3RlbTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGBbJHtnZXRQcmVmaXgoY29uZmlnKX06JHtjb25maWcubmFtZX06JHtzdWJzeXN0ZW19XWA7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdERhdGEoXG4gIGNvbnRleHQ6IExvZ0NvbnRleHQsXG4gIGV4dHJhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgbWVyZ2VkID0geyAuLi5jb250ZXh0LCAuLi5leHRyYSB9O1xuICBjb25zdCBlbnRyaWVzID0gT2JqZWN0LmVudHJpZXMobWVyZ2VkKS5maWx0ZXIoXG4gICAgKFssIHZdKSA9PiB2ICE9PSB1bmRlZmluZWQgJiYgdiAhPT0gbnVsbFxuICApO1xuICBpZiAoZW50cmllcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoZW50cmllcyk7XG59XG5cbmV4cG9ydCBjbGFzcyBMb2dnZXIge1xuICByZWFkb25seSBzdWJzeXN0ZW06IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBjb25maWc6IExvZ2dpbmdDb25maWc7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29udGV4dDogTG9nQ29udGV4dDtcblxuICBjb25zdHJ1Y3Rvcih7XG4gICAgc3Vic3lzdGVtLFxuICAgIGNvbmZpZyxcbiAgICBjb250ZXh0LFxuICB9OiB7XG4gICAgc3Vic3lzdGVtOiBzdHJpbmc7XG4gICAgY29uZmlnOiBMb2dnaW5nQ29uZmlnO1xuICAgIGNvbnRleHQ/OiBMb2dDb250ZXh0O1xuICB9KSB7XG4gICAgdGhpcy5zdWJzeXN0ZW0gPSBzdWJzeXN0ZW07XG4gICAgdGhpcy5jb25maWcgPSBjb25maWc7XG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dCA/PyB7fTtcbiAgfVxuXG4gIGNoaWxkKHtcbiAgICBzdWJzeXN0ZW0sXG4gICAgY29udGV4dCxcbiAgfToge1xuICAgIHN1YnN5c3RlbT86IHN0cmluZztcbiAgICBjb250ZXh0PzogTG9nQ29udGV4dDtcbiAgfSk6IExvZ2dlciB7XG4gICAgcmV0dXJuIG5ldyBMb2dnZXIoe1xuICAgICAgY29uZmlnOiB0aGlzLmNvbmZpZyxcbiAgICAgIHN1YnN5c3RlbTogc3Vic3lzdGVtID8gYCR7dGhpcy5zdWJzeXN0ZW19OiR7c3Vic3lzdGVtfWAgOiB0aGlzLnN1YnN5c3RlbSxcbiAgICAgIGNvbnRleHQ6IHsgLi4udGhpcy5jb250ZXh0LCAuLi5jb250ZXh0IH0sXG4gICAgfSk7XG4gIH1cblxuICB3aXRoQ29udGV4dChjb250ZXh0OiBMb2dDb250ZXh0KTogTG9nZ2VyIHtcbiAgICByZXR1cm4gbmV3IExvZ2dlcih7XG4gICAgICBjb25maWc6IHRoaXMuY29uZmlnLFxuICAgICAgc3Vic3lzdGVtOiB0aGlzLnN1YnN5c3RlbSxcbiAgICAgIGNvbnRleHQ6IHsgLi4udGhpcy5jb250ZXh0LCAuLi5jb250ZXh0IH0sXG4gICAgfSk7XG4gIH1cblxuICBpbmZvKG1lc3NhZ2U6IHN0cmluZywgZGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogdm9pZCB7XG4gICAgaWYgKCFzaG91bGRMb2codGhpcy5jb25maWcsIFwiaW5mb1wiKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBkID0gZm9ybWF0RGF0YSh0aGlzLmNvbnRleHQsIGRhdGEpO1xuICAgIGlmIChkKSB7XG4gICAgICBjb25zb2xlLmluZm8oZm9ybWF0VGFnKHRoaXMuY29uZmlnLCB0aGlzLnN1YnN5c3RlbSksIG1lc3NhZ2UsIGQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmluZm8oZm9ybWF0VGFnKHRoaXMuY29uZmlnLCB0aGlzLnN1YnN5c3RlbSksIG1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuXG4gIHdhcm4obWVzc2FnZTogc3RyaW5nLCBkYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiB2b2lkIHtcbiAgICBpZiAoIXNob3VsZExvZyh0aGlzLmNvbmZpZywgXCJ3YXJuXCIpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGQgPSBmb3JtYXREYXRhKHRoaXMuY29udGV4dCwgZGF0YSk7XG4gICAgaWYgKGQpIHtcbiAgICAgIGNvbnNvbGUud2Fybihmb3JtYXRUYWcodGhpcy5jb25maWcsIHRoaXMuc3Vic3lzdGVtKSwgbWVzc2FnZSwgZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUud2Fybihmb3JtYXRUYWcodGhpcy5jb25maWcsIHRoaXMuc3Vic3lzdGVtKSwgbWVzc2FnZSk7XG4gICAgfVxuICB9XG5cbiAgZXJyb3IobWVzc2FnZTogc3RyaW5nLCBkYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiB2b2lkIHtcbiAgICBpZiAoIXNob3VsZExvZyh0aGlzLmNvbmZpZywgXCJlcnJvclwiKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBkID0gZm9ybWF0RGF0YSh0aGlzLmNvbnRleHQsIGRhdGEpO1xuICAgIGlmIChkKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGZvcm1hdFRhZyh0aGlzLmNvbmZpZywgdGhpcy5zdWJzeXN0ZW0pLCBtZXNzYWdlLCBkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5lcnJvcihmb3JtYXRUYWcodGhpcy5jb25maWcsIHRoaXMuc3Vic3lzdGVtKSwgbWVzc2FnZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0LCB3aGVuIGNhbGxlZCwgbG9ncyB0aGUgZWxhcHNlZCB0aW1lIGF0IGluZm8gbGV2ZWwuXG4gICAqIFBhc3MgYGxvZ09uU3RhcnQ6IHRydWVgIHRvIGFsc28gbG9nIHdoZW4gdGhlIHRpbWVyIGJlZ2lucy5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogY29uc3QgZG9uZSA9IGxvZy50aW1lKFwic2FuZGJveCBzZXR1cFwiLCB7IHNhbmRib3hJZCB9LCB7IGxvZ09uU3RhcnQ6IHRydWUgfSk7XG4gICAqIGF3YWl0IHNldHVwKCk7XG4gICAqIGRvbmUoKTsgLy8gc3RhcnQ6IFthZ2VudDpkZWZhdWx0OnNhbmRib3hdIHNhbmRib3ggc2V0dXAgeyBzYW5kYm94SWQ6ICcuLi4nIH1cbiAgICogICAgICAgICAvLyBlbmQ6ICAgW2FnZW50OmRlZmF1bHQ6c2FuZGJveF0gc2FuZGJveCBzZXR1cCB7IHNhbmRib3hJZDogJy4uLicsIGR1cmF0aW9uTXM6IDEyMyB9XG4gICAqL1xuICB0aW1lKFxuICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICBkYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgb3B0cz86IHsgbG9nT25TdGFydD86IGJvb2xlYW4gfVxuICApOiAoZW5kRGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiB2b2lkIHtcbiAgICBpZiAob3B0cz8ubG9nT25TdGFydCkge1xuICAgICAgdGhpcy5pbmZvKGBbc3RhcnRdICR7bWVzc2FnZX1gLCBkYXRhKTtcbiAgICB9XG4gICAgY29uc3QgdDAgPSBEYXRlLm5vdygpO1xuICAgIHJldHVybiAoZW5kRGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiB7XG4gICAgICB0aGlzLmluZm8ob3B0cz8ubG9nT25TdGFydCA/IGBbZW5kXSAke21lc3NhZ2V9YCA6IG1lc3NhZ2UsIHtcbiAgICAgICAgLi4uZGF0YSxcbiAgICAgICAgLi4uZW5kRGF0YSxcbiAgICAgICAgZHVyYXRpb25NczogRGF0ZS5ub3coKSAtIHQwLFxuICAgICAgfSk7XG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTG9nZ2VyKHtcbiAgY29uZmlnLFxuICBzdWJzeXN0ZW0sXG4gIGNvbnRleHQsXG59OiB7XG4gIGNvbmZpZzogTG9nZ2luZ0NvbmZpZztcbiAgc3Vic3lzdGVtOiBzdHJpbmc7XG4gIGNvbnRleHQ/OiBMb2dDb250ZXh0O1xufSk6IExvZ2dlciB7XG4gIHJldHVybiBuZXcgTG9nZ2VyKHsgY29uZmlnLCBzdWJzeXN0ZW0sIGNvbnRleHQgfSk7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBTYW5kYm94IGFzIFZlcmNlbFNhbmRib3hTREsgfSBmcm9tIFwiQHZlcmNlbC9zYW5kYm94XCI7XG5pbXBvcnQgeyBjcmVhdGVMb2dnZXIgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvbG9nZ2VyXCI7XG5pbXBvcnQgdHlwZSB7IFNhbmRib3hBZ2VudFJlZiB9IGZyb20gXCIuLi8uLi9hZGFwdGVyXCI7XG5pbXBvcnQgdHlwZSB7IFZlcmNlbEJpbmRpbmdNZXRhZGF0YSB9IGZyb20gXCIuLi92ZXJjZWxcIjtcblxuYXN5bmMgZnVuY3Rpb24gbG9hZFNhbmRib3hTREsoKTogUHJvbWlzZTx0eXBlb2YgVmVyY2VsU2FuZGJveFNESz4ge1xuICByZXR1cm4gKGF3YWl0IGltcG9ydChcIkB2ZXJjZWwvc2FuZGJveFwiKSkuU2FuZGJveDtcbn1cblxuY29uc3QgREVGQVVMVF9QT0xMX0lOVEVSVkFMX01TID0gMiAqIDYwICogMTAwMDtcbmNvbnN0IERFRkFVTFRfSURMRV9USU1FT1VUX01TID0gNSAqIDYwICogMTAwMDtcbmNvbnN0IFNOQVBTSE9UX0JFRk9SRV9USU1FT1VUX01TID0gMTAgKiA2MCAqIDEwMDA7XG5cbmNvbnN0IGdldFRlc3RDcmVkZW50aWFscyA9ICgpID0+XG4gIHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInRlc3RcIlxuICAgID8ge1xuICAgICAgICB0b2tlbjogcHJvY2Vzcy5lbnYuVEVTVF9WRVJDRUxfVE9LRU4sXG4gICAgICAgIHRlYW1JZDogcHJvY2Vzcy5lbnYuVEVTVF9WRVJDRUxfVEVBTV9JRCxcbiAgICAgICAgcHJvamVjdElkOiBwcm9jZXNzLmVudi5URVNUX1ZFUkNFTF9QUk9KRUNUX0lELFxuICAgICAgfVxuICAgIDoge307XG5cbmV4cG9ydCB0eXBlIExpZmVjeWNsZVN0ZXBSZXN1bHQgPVxuICB8IHsgYWN0aW9uOiBcImNvbnRpbnVlXCI7IG5leHRQb2xsTXM6IG51bWJlciB9XG4gIHwge1xuICAgICAgYWN0aW9uOiBcImV4aXRcIjtcbiAgICAgIHJlYXNvbjogXCJzYW5kYm94SWRfY2hhbmdlZFwiIHwgXCJpZGxlXCIgfCBcInRpbWVvdXRcIiB8IFwibm90X2ZvdW5kXCI7XG4gICAgfTtcblxuZXhwb3J0IHR5cGUgTGlmZWN5Y2xlQ29uZmlnID0ge1xuICBwb2xsSW50ZXJ2YWxNcz86IG51bWJlcjtcbiAgc3RvcEFmdGVySW5hY3RpdmVNcz86IG51bWJlcjtcbiAgc25hcHNob3RCZWZvcmVUaW1lb3V0TXM/OiBudW1iZXI7XG59O1xuXG5leHBvcnQgdHlwZSBMaWZlY3ljbGVJbnB1dCA9IHtcbiAgYWdlbnQ6IFNhbmRib3hBZ2VudFJlZjtcbiAgc2FuZGJveElkOiBzdHJpbmc7XG4gIHZlcmNlbFNhbmRib3hJZDogc3RyaW5nO1xuICBjb25maWc/OiBMaWZlY3ljbGVDb25maWc7XG59O1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2hlY2tBbmRTbmFwc2hvdFN0ZXAoXG4gIGlucHV0OiBMaWZlY3ljbGVJbnB1dFxuKTogUHJvbWlzZTxFcnJvciB8IExpZmVjeWNsZVN0ZXBSZXN1bHQ+IHtcbiAgXCJ1c2Ugc3RlcFwiO1xuXG4gIGNvbnN0IHN0b3JhZ2UgPSBpbnB1dC5hZ2VudC5zdG9yYWdlO1xuICBjb25zdCBsb2cgPSBjcmVhdGVMb2dnZXIoe1xuICAgIGNvbmZpZzogeyAuLi5pbnB1dC5hZ2VudC5vcHRpb25zLmxvZ2dpbmcsIG5hbWU6IGlucHV0LmFnZW50Lm5hbWUgfSxcbiAgICBzdWJzeXN0ZW06IFwic2FuZGJveDpsaWZlY3ljbGVcIixcbiAgICBjb250ZXh0OiB7IHNhbmRib3hJZDogaW5wdXQuc2FuZGJveElkIH0sXG4gIH0pO1xuXG4gIGxvZy5pbmZvKFwibGlmZWN5Y2xlIGNoZWNrIHN0YXJ0ZWRcIiwge1xuICAgIHZlcmNlbFNhbmRib3hJZDogaW5wdXQudmVyY2VsU2FuZGJveElkLFxuICB9KTtcblxuICBjb25zdCByZWNvcmQgPSBhd2FpdCBzdG9yYWdlLnNhbmRib3guZ2V0KGlucHV0LnNhbmRib3hJZCk7XG4gIGlmICghcmVjb3JkKSB7XG4gICAgbG9nLndhcm4oXCJzYW5kYm94IHJlY29yZCBub3QgZm91bmQsIGV4aXRpbmcgbGlmZWN5Y2xlXCIpO1xuICAgIHJldHVybiB7IGFjdGlvbjogXCJleGl0XCIsIHJlYXNvbjogXCJub3RfZm91bmRcIiB9O1xuICB9XG5cbiAgY29uc3QgbWV0YWRhdGEgPSByZWNvcmQuc2V0dXA/Lm1ldGFkYXRhIGFzIFZlcmNlbEJpbmRpbmdNZXRhZGF0YSB8IG51bGw7XG4gIGNvbnN0IGN1cnJlbnRTYW5kYm94SWQgPSBtZXRhZGF0YT8uc2FuZGJveElkID8/IG51bGw7XG5cbiAgaWYgKGN1cnJlbnRTYW5kYm94SWQgIT09IGlucHV0LnZlcmNlbFNhbmRib3hJZCkge1xuICAgIGxvZy5pbmZvKFwic2FuZGJveCBJRCBjaGFuZ2VkLCBleGl0aW5nIGxpZmVjeWNsZVwiLCB7XG4gICAgICBleHBlY3RlZDogaW5wdXQudmVyY2VsU2FuZGJveElkLFxuICAgICAgYWN0dWFsOiBjdXJyZW50U2FuZGJveElkLFxuICAgIH0pO1xuICAgIHJldHVybiB7IGFjdGlvbjogXCJleGl0XCIsIHJlYXNvbjogXCJzYW5kYm94SWRfY2hhbmdlZFwiIH07XG4gIH1cblxuICBpZiAoIWN1cnJlbnRTYW5kYm94SWQpIHtcbiAgICBsb2cud2FybihcIm5vIGN1cnJlbnQgc2FuZGJveCBJRCBpbiBtZXRhZGF0YSwgZXhpdGluZyBsaWZlY3ljbGVcIik7XG4gICAgcmV0dXJuIHsgYWN0aW9uOiBcImV4aXRcIiwgcmVhc29uOiBcIm5vdF9mb3VuZFwiIH07XG4gIH1cblxuICBjb25zdCBwb2xsSW50ZXJ2YWxNcyA9XG4gICAgaW5wdXQuY29uZmlnPy5wb2xsSW50ZXJ2YWxNcyA/PyBERUZBVUxUX1BPTExfSU5URVJWQUxfTVM7XG4gIGNvbnN0IGlkbGVUaW1lb3V0TXMgPVxuICAgIGlucHV0LmNvbmZpZz8uc3RvcEFmdGVySW5hY3RpdmVNcyA/PyBERUZBVUxUX0lETEVfVElNRU9VVF9NUztcbiAgY29uc3Qgc25hcHNob3RCZWZvcmVUaW1lb3V0TXMgPVxuICAgIGlucHV0LmNvbmZpZz8uc25hcHNob3RCZWZvcmVUaW1lb3V0TXMgPz8gU05BUFNIT1RfQkVGT1JFX1RJTUVPVVRfTVM7XG5cbiAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgY29uc3QgbGFzdEFjdGl2aXR5ID0gcmVjb3JkLmxhc3RBY3RpdmVBdCA/PyByZWNvcmQuY3JlYXRlZEF0ID8/IG5vdztcbiAgY29uc3QgaWRsZUR1cmF0aW9uID0gbm93IC0gbGFzdEFjdGl2aXR5O1xuICBjb25zdCBzaG91bGRTbmFwc2hvdER1ZVRvSWRsZSA9IGlkbGVEdXJhdGlvbiA+IGlkbGVUaW1lb3V0TXM7XG5cbiAgbGV0IHNob3VsZFNuYXBzaG90RHVlVG9UaW1lb3V0ID0gZmFsc2U7XG4gIHRyeSB7XG4gICAgY29uc3QgU2FuZGJveFNESyA9IGF3YWl0IGxvYWRTYW5kYm94U0RLKCk7XG4gICAgY29uc3Qgc2FuZGJveCA9IGF3YWl0IFNhbmRib3hTREsuZ2V0KHtcbiAgICAgIHNhbmRib3hJZDogY3VycmVudFNhbmRib3hJZCxcbiAgICAgIC4uLmdldFRlc3RDcmVkZW50aWFscygpLFxuICAgIH0pO1xuICAgIGlmIChzYW5kYm94LnRpbWVvdXQgPCBzbmFwc2hvdEJlZm9yZVRpbWVvdXRNcykge1xuICAgICAgc2hvdWxkU25hcHNob3REdWVUb1RpbWVvdXQgPSB0cnVlO1xuICAgIH1cbiAgfSBjYXRjaCB7XG4gICAgbG9nLndhcm4oXCJmYWlsZWQgdG8gZ2V0IHNhbmRib3ggZnJvbSBTREssIGV4aXRpbmcgbGlmZWN5Y2xlXCIsIHtcbiAgICAgIHZlcmNlbFNhbmRib3hJZDogY3VycmVudFNhbmRib3hJZCxcbiAgICB9KTtcbiAgICByZXR1cm4geyBhY3Rpb246IFwiZXhpdFwiLCByZWFzb246IFwibm90X2ZvdW5kXCIgfTtcbiAgfVxuXG4gIGlmIChzaG91bGRTbmFwc2hvdER1ZVRvSWRsZSB8fCBzaG91bGRTbmFwc2hvdER1ZVRvVGltZW91dCkge1xuICAgIGNvbnN0IHJlYXNvbiA9IHNob3VsZFNuYXBzaG90RHVlVG9JZGxlID8gXCJpZGxlXCIgOiBcInRpbWVvdXRcIjtcbiAgICBsb2cuaW5mbyhcInNuYXBzaG90dGluZyBzYW5kYm94IGJlZm9yZSBleGl0XCIsIHtcbiAgICAgIHJlYXNvbixcbiAgICAgIGlkbGVEdXJhdGlvbk1zOiBpZGxlRHVyYXRpb24sXG4gICAgICB2ZXJjZWxTYW5kYm94SWQ6IGN1cnJlbnRTYW5kYm94SWQsXG4gICAgfSk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgU2FuZGJveFNESyA9IGF3YWl0IGxvYWRTYW5kYm94U0RLKCk7XG4gICAgICBjb25zdCBzYW5kYm94ID0gYXdhaXQgU2FuZGJveFNESy5nZXQoe1xuICAgICAgICBzYW5kYm94SWQ6IGN1cnJlbnRTYW5kYm94SWQsXG4gICAgICAgIC4uLmdldFRlc3RDcmVkZW50aWFscygpLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBzbmFwc2hvdCA9IGF3YWl0IHNhbmRib3guc25hcHNob3QoKTtcbiAgICAgIGxvZy5pbmZvKFwic25hcHNob3QgY3JlYXRlZFwiLCB7IHNuYXBzaG90SWQ6IHNuYXBzaG90LnNuYXBzaG90SWQgfSk7XG5cbiAgICAgIGF3YWl0IHN0b3JhZ2Uuc2FuZGJveC51cGRhdGUoaW5wdXQuc2FuZGJveElkLCB7XG4gICAgICAgIHNldHVwOiB7XG4gICAgICAgICAgLi4ucmVjb3JkLnNldHVwLFxuICAgICAgICAgIG1ldGFkYXRhOiB7IHNhbmRib3hJZDogbnVsbCwgc25hcHNob3RJZDogc25hcHNob3Quc25hcHNob3RJZCB9LFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICBsb2cuaW5mbyhcInNhbmRib3ggcmVjb3JkIHVwZGF0ZWQgd2l0aCBzbmFwc2hvdFwiKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2cuZXJyb3IoXCJmYWlsZWQgdG8gc25hcHNob3Qgc2FuZGJveFwiLCB7IGNhdXNlOiBlIH0pO1xuICAgICAgcmV0dXJuIGUgaW5zdGFuY2VvZiBFcnJvciA/IGUgOiBuZXcgRXJyb3IoU3RyaW5nKGUpKTtcbiAgICB9XG4gICAgcmV0dXJuIHsgYWN0aW9uOiBcImV4aXRcIiwgcmVhc29uIH07XG4gIH1cblxuICBsb2cuaW5mbyhcInNhbmRib3ggc3RpbGwgYWN0aXZlLCBjb250aW51aW5nIGxpZmVjeWNsZVwiLCB7XG4gICAgaWRsZUR1cmF0aW9uTXM6IGlkbGVEdXJhdGlvbixcbiAgICBuZXh0UG9sbE1zOiBwb2xsSW50ZXJ2YWxNcyxcbiAgfSk7XG4gIHJldHVybiB7IGFjdGlvbjogXCJjb250aW51ZVwiLCBuZXh0UG9sbE1zOiBwb2xsSW50ZXJ2YWxNcyB9O1xufVxuIiwgImltcG9ydCB7IHNsZWVwIH0gZnJvbSBcIndvcmtmbG93XCI7XG5pbXBvcnQgeyBjcmVhdGVMb2dnZXIgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvbG9nZ2VyXCI7XG5pbXBvcnQgeyBjaGVja0FuZFNuYXBzaG90U3RlcCwgdHlwZSBMaWZlY3ljbGVJbnB1dCB9IGZyb20gXCIuL3N0ZXBzXCI7XG5cbmV4cG9ydCB0eXBlIHsgTGlmZWN5Y2xlSW5wdXQgfTtcblxuY29uc3QgREVGQVVMVF9QT0xMX01TID0gMiAqIDYwICogMTAwMDtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNhbmRib3hMaWZlY3ljbGVXb3JrZmxvdyh7XG4gIGlucHV0LFxufToge1xuICBpbnB1dDogTGlmZWN5Y2xlSW5wdXQ7XG59KSB7XG4gIFwidXNlIHdvcmtmbG93XCI7XG5cbiAgbGV0IG5leHRQb2xsTXMgPSBpbnB1dC5jb25maWc/LnBvbGxJbnRlcnZhbE1zID8/IERFRkFVTFRfUE9MTF9NUztcbiAgY29uc3QgbG9nID0gY3JlYXRlTG9nZ2VyKHtcbiAgICBjb25maWc6IHsgLi4uaW5wdXQuYWdlbnQub3B0aW9ucy5sb2dnaW5nLCBuYW1lOiBpbnB1dC5hZ2VudC5uYW1lIH0sXG4gICAgc3Vic3lzdGVtOiBcInNhbmRib3g6bGlmZWN5Y2xlXCIsXG4gICAgY29udGV4dDogeyBzYW5kYm94SWQ6IGlucHV0LnNhbmRib3hJZCB9LFxuICB9KTtcblxuICBsb2cuaW5mbyhcImxpZmVjeWNsZSB3b3JrZmxvdyBzdGFydGVkXCIsIHtcbiAgICBzYW5kYm94SWQ6IGlucHV0LnNhbmRib3hJZCxcbiAgICB2ZXJjZWxTYW5kYm94SWQ6IGlucHV0LnZlcmNlbFNhbmRib3hJZCxcbiAgICBwb2xsTXM6IG5leHRQb2xsTXMsXG4gIH0pO1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgYXdhaXQgc2xlZXAobmV4dFBvbGxNcyk7XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjaGVja0FuZFNuYXBzaG90U3RlcChpbnB1dCk7XG5cbiAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIGxvZy5lcnJvcihcImxpZmVjeWNsZSBzdGVwIGZhaWxlZFwiLCB7XG4gICAgICAgIHNhbmRib3hJZDogaW5wdXQuc2FuZGJveElkLFxuICAgICAgICBlcnJvcjogcmVzdWx0Lm1lc3NhZ2UsXG4gICAgICB9KTtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGlmIChyZXN1bHQuYWN0aW9uID09PSBcImV4aXRcIikge1xuICAgICAgbG9nLmluZm8oXCJsaWZlY3ljbGUgd29ya2Zsb3cgZXhpdGluZ1wiLCB7XG4gICAgICAgIHNhbmRib3hJZDogaW5wdXQuc2FuZGJveElkLFxuICAgICAgICByZWFzb246IHJlc3VsdC5yZWFzb24sXG4gICAgICB9KTtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIG5leHRQb2xsTXMgPSByZXN1bHQubmV4dFBvbGxNcztcbiAgfVxufVxuIiwgImltcG9ydCB7IHN0YXJ0IGFzIHN0YXJ0V29ya2Zsb3cgfSBmcm9tIFwid29ya2Zsb3cvYXBpXCI7XG5pbXBvcnQgdHlwZSB7IFN0b3JhZ2UgfSBmcm9tIFwiLi4vLi4vc3RvcmFnZVwiO1xuaW1wb3J0IHR5cGUgeyBMb2dnZXIgfSBmcm9tIFwiLi4vLi4vdXRpbHMvbG9nZ2VyXCI7XG5pbXBvcnQgdHlwZSB7IEV4ZWNSZXN1bHQsIFNhbmRib3hCaW5kaW5nLCBTYW5kYm94SW5zdGFuY2UgfSBmcm9tIFwiLi4vYWRhcHRlclwiO1xuaW1wb3J0IHR5cGUgeyBMaWZlY3ljbGVDb25maWcgfSBmcm9tIFwiLi92ZXJjZWwtbGlmZWN5Y2xlL3N0ZXBzXCI7XG5pbXBvcnQgeyBzYW5kYm94TGlmZWN5Y2xlV29ya2Zsb3cgfSBmcm9tIFwiLi92ZXJjZWwtbGlmZWN5Y2xlL3dvcmtmbG93XCI7XG5cbmFzeW5jIGZ1bmN0aW9uIGxvYWRTYW5kYm94U0RLKCkge1xuICByZXR1cm4gKGF3YWl0IGltcG9ydChcIkB2ZXJjZWwvc2FuZGJveFwiKSkuU2FuZGJveDtcbn1cblxuY29uc3QgTUFYX1RJTUVPVVRfTVMgPSA1ICogNjAgKiA2MCAqIDEwMDA7IC8vIDUgaG91cnNcbmNvbnN0IEhPTUVfRElSID0gXCIvaG9tZS92ZXJjZWwtc2FuZGJveFwiO1xuY29uc3QgREVGQVVMVF9WQ1BVUyA9IDI7XG5cbmV4cG9ydCB0eXBlIFZlcmNlbEJpbmRpbmdDb25maWcgPSB7XG4gIGN3ZD86IHN0cmluZztcbiAgcmVzb3VyY2VzPzogeyB2Y3B1czogbnVtYmVyIH07XG4gIHBvcnRzPzogbnVtYmVyW107XG4gIG5ldHdvcmtQb2xpY3k/OiBpbXBvcnQoXCJAdmVyY2VsL3NhbmRib3hcIikuTmV0d29ya1BvbGljeTtcbiAgc25hcHNob3RJZD86IHN0cmluZztcbiAgbGlmZWN5Y2xlPzogTGlmZWN5Y2xlQ29uZmlnO1xufTtcblxuZXhwb3J0IHR5cGUgVmVyY2VsQmluZGluZ01ldGFkYXRhID0ge1xuICBzYW5kYm94SWQ6IHN0cmluZztcbn07XG5cbnR5cGUgQ3JlYXRlU2FuZGJveE9wdHMgPSB7XG4gIHJlc291cmNlczogeyB2Y3B1czogbnVtYmVyIH07XG4gIHBvcnRzPzogbnVtYmVyW107XG4gIG5ldHdvcmtQb2xpY3k/OiBpbXBvcnQoXCJAdmVyY2VsL3NhbmRib3hcIikuTmV0d29ya1BvbGljeTtcbiAgc25hcHNob3RJZD86IHN0cmluZztcbn07XG5cbmZ1bmN0aW9uIGlzU2FuZGJveEdvbmVFcnJvcihlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIGlmICghKGUgaW5zdGFuY2VvZiBFcnJvcikpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBzdGF0dXMgPVxuICAgIChlIGFzIHsgcmVzcG9uc2U/OiB7IHN0YXR1cz86IG51bWJlciB9IH0pLnJlc3BvbnNlPy5zdGF0dXMgPz9cbiAgICAoZSBhcyB7IGNhdXNlPzogeyByZXNwb25zZT86IHsgc3RhdHVzPzogbnVtYmVyIH0gfSB9KS5jYXVzZT8ucmVzcG9uc2VcbiAgICAgID8uc3RhdHVzO1xuXG4gIGlmIChzdGF0dXMgPT09IDQxMCB8fCBzdGF0dXMgPT09IDQyMikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgY29uc3QgbXNnID0gZS5tZXNzYWdlIHx8IFN0cmluZyhlKTtcbiAgcmV0dXJuIChcbiAgICBtc2cuaW5jbHVkZXMoXCJFeHBlY3RlZCBhIHN0cmVhbSBvZiBjb21tYW5kIGRhdGFcIikgfHxcbiAgICBtc2cuaW5jbHVkZXMoXCJFeHBlY3RlZCBhIHN0cmVhbSBvZiBsb2dzXCIpXG4gICk7XG59XG5cbmNvbnN0IGdldFRlc3RDcmVkZW50aWFscyA9ICgpID0+XG4gIHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInRlc3RcIlxuICAgID8ge1xuICAgICAgICB0b2tlbjogcHJvY2Vzcy5lbnYuVEVTVF9WRVJDRUxfVE9LRU4sXG4gICAgICAgIHRlYW1JZDogcHJvY2Vzcy5lbnYuVEVTVF9WRVJDRUxfVEVBTV9JRCxcbiAgICAgICAgcHJvamVjdElkOiBwcm9jZXNzLmVudi5URVNUX1ZFUkNFTF9QUk9KRUNUX0lELFxuICAgICAgfVxuICAgIDoge307XG5cbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVNkayh7XG4gIHJlc291cmNlcyxcbiAgcG9ydHMsXG4gIG5ldHdvcmtQb2xpY3ksXG4gIHNuYXBzaG90SWQsXG59OiBDcmVhdGVTYW5kYm94T3B0cykge1xuICBjb25zdCBTYW5kYm94U0RLID0gYXdhaXQgbG9hZFNhbmRib3hTREsoKTtcbiAgY29uc3QgYmFzZSA9IHtcbiAgICByZXNvdXJjZXMsXG4gICAgdGltZW91dDogTUFYX1RJTUVPVVRfTVMsXG4gICAgLi4uKHBvcnRzID8geyBwb3J0cyB9IDoge30pLFxuICAgIC4uLihuZXR3b3JrUG9saWN5ID8geyBuZXR3b3JrUG9saWN5IH0gOiB7fSksXG4gICAgLi4uZ2V0VGVzdENyZWRlbnRpYWxzKCksXG4gIH07XG5cbiAgaWYgKHNuYXBzaG90SWQpIHtcbiAgICByZXR1cm4gU2FuZGJveFNESy5jcmVhdGUoe1xuICAgICAgLi4uYmFzZSxcbiAgICAgIHNvdXJjZTogeyB0eXBlOiBcInNuYXBzaG90XCIgYXMgY29uc3QsIHNuYXBzaG90SWQgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBTYW5kYm94U0RLLmNyZWF0ZShiYXNlKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gY3JlYXRlU2V0dXBTbmFwc2hvdCh7XG4gIHNhbmRib3hPcHRzLFxuICBydW4sXG4gIHN0b3JhZ2UsXG4gIHNuYXBzaG90VmVyc2lvbixcbiAgbG9nLFxufToge1xuICBzYW5kYm94T3B0czogQ3JlYXRlU2FuZGJveE9wdHM7XG4gIHJ1bjogKHNhbmRib3g6IFNhbmRib3hJbnN0YW5jZSkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgc3RvcmFnZTogU3RvcmFnZTtcbiAgc25hcHNob3RWZXJzaW9uOiBzdHJpbmc7XG4gIGxvZzogTG9nZ2VyO1xufSk6IFByb21pc2U8dm9pZD4ge1xuICBsZXQgdGVtcFNkazogQXdhaXRlZDxSZXR1cm5UeXBlPHR5cGVvZiBjcmVhdGVTZGs+PiB8IG51bGwgPSBudWxsO1xuICB0cnkge1xuICAgIHRlbXBTZGsgPSBhd2FpdCBjcmVhdGVTZGsoc2FuZGJveE9wdHMpO1xuICAgIGNvbnN0IHRlbXBJbnN0YW5jZSA9IG5ldyBWZXJjZWxTYW5kYm94SW5zdGFuY2UodGVtcFNkayk7XG4gICAgYXdhaXQgcnVuKHRlbXBJbnN0YW5jZSk7XG4gICAgY29uc3Qgc25hcHNob3QgPSBhd2FpdCB0ZW1wU2RrLnNuYXBzaG90KCk7XG4gICAgYXdhaXQgc3RvcmFnZS5zZXR1cC5zZXQoc25hcHNob3RWZXJzaW9uLCB7XG4gICAgICB2ZXJzaW9uOiBzbmFwc2hvdFZlcnNpb24sXG4gICAgICBzbmFwc2hvdElkOiBzbmFwc2hvdC5zbmFwc2hvdElkLFxuICAgICAgY3JlYXRlZEF0OiBEYXRlLm5vdygpLFxuICAgICAgbGFzdFVzZWRBdDogbnVsbCxcbiAgICB9KTtcbiAgICBhd2FpdCB0ZW1wU2RrLnN0b3AoKS5jYXRjaCgoKSA9PiB1bmRlZmluZWQpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGxvZy5lcnJvcihcImZhaWxlZCB0byBjcmVhdGUgc2V0dXAgc25hcHNob3RcIiwge1xuICAgICAgc25hcHNob3RWZXJzaW9uLFxuICAgICAgY2F1c2U6IGVycm9yLFxuICAgIH0pO1xuICAgIGlmICh0ZW1wU2RrKSB7XG4gICAgICBhd2FpdCB0ZW1wU2RrLnN0b3AoKS5jYXRjaCgoKSA9PiB1bmRlZmluZWQpO1xuICAgIH1cbiAgfVxufVxuXG5jbGFzcyBWZXJjZWxTYW5kYm94SW5zdGFuY2UgaW1wbGVtZW50cyBTYW5kYm94SW5zdGFuY2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IHNkazogaW1wb3J0KFwiQHZlcmNlbC9zYW5kYm94XCIpLlNhbmRib3g7XG4gIHJlYWRvbmx5IGN3ZDogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHNkazogaW1wb3J0KFwiQHZlcmNlbC9zYW5kYm94XCIpLlNhbmRib3gsIGN3ZD86IHN0cmluZykge1xuICAgIHRoaXMuc2RrID0gc2RrO1xuICAgIHRoaXMuY3dkID0gY3dkID8/IEhPTUVfRElSO1xuICB9XG5cbiAgYXN5bmMgZXhlYyh7XG4gICAgY29tbWFuZCxcbiAgICBhcmdzLFxuICAgIGN3ZCxcbiAgICBlbnYsXG4gICAgc3VkbyxcbiAgICBzaWduYWwsXG4gIH06IHtcbiAgICBjb21tYW5kOiBzdHJpbmc7XG4gICAgYXJncz86IHN0cmluZ1tdO1xuICAgIGN3ZD86IHN0cmluZztcbiAgICBlbnY/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgIHN1ZG8/OiBib29sZWFuO1xuICAgIHNpZ25hbD86IEFib3J0U2lnbmFsO1xuICB9KTogUHJvbWlzZTxFeGVjUmVzdWx0PiB7XG4gICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgdGhpcy5zZGsucnVuQ29tbWFuZCh7XG4gICAgICBjbWQ6IGNvbW1hbmQsXG4gICAgICBhcmdzLFxuICAgICAgY3dkOiBjd2QgPz8gdGhpcy5jd2QsXG4gICAgICBlbnYsXG4gICAgICBzdWRvLFxuICAgICAgc2lnbmFsLFxuICAgICAgZGV0YWNoZWQ6IHRydWUsXG4gICAgfSk7XG5cbiAgICBsZXQgc3Rkb3V0ID0gXCJcIjtcbiAgICBsZXQgc3RkZXJyID0gXCJcIjtcbiAgICBjb25zdCBsb2dCdWZmZXI6IHsgc3RyZWFtOiBcInN0ZG91dFwiIHwgXCJzdGRlcnJcIjsgZGF0YTogc3RyaW5nIH1bXSA9IFtdO1xuICAgIGNvbnN0IHN0YXRlID0ge1xuICAgICAgcmVzb2x2ZTogbnVsbCBhcyAoKCkgPT4gdm9pZCkgfCBudWxsLFxuICAgICAgY29uc3VtZWQ6IGZhbHNlLFxuICAgIH07XG5cbiAgICBjb25zdCBjb25zdW1lTG9ncyA9IChhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBmb3IgYXdhaXQgKGNvbnN0IGVudHJ5IG9mIG91dHB1dC5sb2dzKCkpIHtcbiAgICAgICAgICBpZiAoZW50cnkuc3RyZWFtID09PSBcInN0ZG91dFwiKSB7XG4gICAgICAgICAgICBzdGRvdXQgKz0gZW50cnkuZGF0YTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3RkZXJyICs9IGVudHJ5LmRhdGE7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbG9nQnVmZmVyLnB1c2goZW50cnkpO1xuICAgICAgICAgIHN0YXRlLnJlc29sdmU/LigpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gU2FuZGJveCBtYXkgaGF2ZSBiZWVuIHN0b3BwZWQgXHUyMDE0IGxvZ3MgZW5kcG9pbnQgcmV0dXJucyA0MjJcbiAgICAgIH1cbiAgICAgIHN0YXRlLmNvbnN1bWVkID0gdHJ1ZTtcbiAgICAgIHN0YXRlLnJlc29sdmU/LigpO1xuICAgIH0pKCk7XG5cbiAgICBhc3luYyBmdW5jdGlvbiogbG9ncygpOiBBc3luY0l0ZXJhYmxlPHtcbiAgICAgIHN0cmVhbTogXCJzdGRvdXRcIiB8IFwic3RkZXJyXCI7XG4gICAgICBkYXRhOiBzdHJpbmc7XG4gICAgfT4ge1xuICAgICAgbGV0IGluZGV4ID0gMDtcbiAgICAgIHdoaWxlICghc3RhdGUuY29uc3VtZWQgfHwgaW5kZXggPCBsb2dCdWZmZXIubGVuZ3RoKSB7XG4gICAgICAgIGlmIChpbmRleCA8IGxvZ0J1ZmZlci5sZW5ndGgpIHtcbiAgICAgICAgICB5aWVsZCBsb2dCdWZmZXJbaW5kZXgrK107XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHIpID0+IHtcbiAgICAgICAgICAgIHN0YXRlLnJlc29sdmUgPSByO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHN0YXRlLnJlc29sdmUgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gY29uc3VtZUxvZ3MudGhlbihhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBmaW5pc2hlZCA9IGF3YWl0IG91dHB1dC53YWl0KCk7XG4gICAgICAgIHJldHVybiB7IHN0ZG91dCwgc3RkZXJyLCBleGl0Q29kZTogZmluaXNoZWQuZXhpdENvZGUgfTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKGlzU2FuZGJveEdvbmVFcnJvcihlKSkge1xuICAgICAgICAgIHJldHVybiB7IHN0ZG91dCwgc3RkZXJyLCBleGl0Q29kZTogMSB9O1xuICAgICAgICB9XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4geyBjb21tYW5kSWQ6IG91dHB1dC5jbWRJZCwgbG9ncywgcmVzdWx0IH07XG4gIH1cblxuICBhc3luYyByZWFkRmlsZSh7XG4gICAgcGF0aDogZmlsZVBhdGgsXG4gIH06IHtcbiAgICBwYXRoOiBzdHJpbmc7XG4gICAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG4gIH0pOiBQcm9taXNlPEJ1ZmZlciB8IG51bGw+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuc2RrLnJlYWRGaWxlVG9CdWZmZXIoeyBwYXRoOiBmaWxlUGF0aCwgY3dkOiB0aGlzLmN3ZCB9KTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHdyaXRlRmlsZXMoe1xuICAgIGZpbGVzLFxuICAgIGRlc3RQYXRoLFxuICB9OiB7XG4gICAgZmlsZXM6IHsgcGF0aDogc3RyaW5nOyBjb250ZW50OiBzdHJpbmcgfCBCdWZmZXIgfVtdO1xuICAgIGRlc3RQYXRoOiBzdHJpbmc7XG4gICAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG4gIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoZmlsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcGF0aCA9IGF3YWl0IGltcG9ydChcIm5vZGU6cGF0aFwiKTtcbiAgICBjb25zdCBuYXRpdmVGaWxlcyA9IGZpbGVzLm1hcCgoZmlsZSkgPT4ge1xuICAgICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLnBvc2l4LmpvaW4oZGVzdFBhdGgsIGZpbGUucGF0aCk7XG4gICAgICBjb25zdCBhYnNvbHV0ZVBhdGggPSBwYXRoLnBvc2l4LmlzQWJzb2x1dGUoZmlsZVBhdGgpXG4gICAgICAgID8gZmlsZVBhdGhcbiAgICAgICAgOiBwYXRoLnBvc2l4LmpvaW4odGhpcy5jd2QsIGZpbGVQYXRoKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHBhdGg6IGFic29sdXRlUGF0aCxcbiAgICAgICAgY29udGVudDpcbiAgICAgICAgICB0eXBlb2YgZmlsZS5jb250ZW50ID09PSBcInN0cmluZ1wiXG4gICAgICAgICAgICA/IEJ1ZmZlci5mcm9tKGZpbGUuY29udGVudClcbiAgICAgICAgICAgIDogZmlsZS5jb250ZW50LFxuICAgICAgfTtcbiAgICB9KTtcblxuICAgIGF3YWl0IHRoaXMuc2RrLndyaXRlRmlsZXMobmF0aXZlRmlsZXMpO1xuXG4gICAgY29uc3Qgc2hlbGxTY3JpcHRzID0gbmF0aXZlRmlsZXMuZmlsdGVyKChmKSA9PiBmLnBhdGguZW5kc1dpdGgoXCIuc2hcIikpO1xuICAgIGlmIChzaGVsbFNjcmlwdHMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5leGVjKHtcbiAgICAgICAgY29tbWFuZDogXCJjaG1vZFwiLFxuICAgICAgICBhcmdzOiBbXCIreFwiLCAuLi5zaGVsbFNjcmlwdHMubWFwKChmKSA9PiBmLnBhdGgpXSxcbiAgICAgIH0pO1xuICAgICAgYXdhaXQgcmVzdWx0LnJlc3VsdDtcbiAgICB9XG4gIH1cblxuICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL3VzZUF3YWl0OiBzeW5jaHJvbm91cyBTREsgY2FsbFxuICBhc3luYyBnZXREb21haW4oe1xuICAgIHBvcnQsXG4gIH06IHtcbiAgICBwb3J0OiBudW1iZXI7XG4gICAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG4gIH0pOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLnNkay5kb21haW4ocG9ydCk7XG4gIH1cblxuICBhc3luYyBraWxsKHtcbiAgICBjb21tYW5kSWQsXG4gIH06IHtcbiAgICBjb21tYW5kSWQ6IHN0cmluZztcbiAgICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbiAgfSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGNtZCA9IGF3YWl0IHRoaXMuc2RrLmdldENvbW1hbmQoY29tbWFuZElkKTtcbiAgICBhd2FpdCBjbWQua2lsbCgpO1xuICB9XG5cbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy91c2VBd2FpdDogc3luY2hyb25vdXMgU0RLIGdldHRlclxuICBhc3luYyBnZXRTdGF0dXMoKTogUHJvbWlzZTxcbiAgICBcInBlbmRpbmdcIiB8IFwicnVubmluZ1wiIHwgXCJzdG9wcGluZ1wiIHwgXCJzdG9wcGVkXCIgfCBcImZhaWxlZFwiXG4gID4ge1xuICAgIGNvbnN0IHN0YXR1cyA9IHRoaXMuc2RrLnN0YXR1cztcbiAgICAvLyBNYXAgU0RLLW9ubHkgc3RhdHVzZXMgdG8gb3VyIGludGVyZmFjZSdzIHVuaW9uXG4gICAgaWYgKHN0YXR1cyA9PT0gXCJzbmFwc2hvdHRpbmdcIikge1xuICAgICAgcmV0dXJuIFwic3RvcHBpbmdcIjtcbiAgICB9XG4gICAgaWYgKHN0YXR1cyA9PT0gXCJhYm9ydGVkXCIpIHtcbiAgICAgIHJldHVybiBcImZhaWxlZFwiO1xuICAgIH1cbiAgICByZXR1cm4gc3RhdHVzO1xuICB9XG5cbiAgYXN5bmMgc3RhcnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gVGhlIFZlcmNlbCBTREsgZG9lc24ndCBoYXZlIGEgcmVzdW1lIG1ldGhvZC5cbiAgICAvLyBSdW4gYSBuby1vcCBjb21tYW5kIHRvIHZlcmlmeSB0aGUgc2FuZGJveCBpcyByZWFjaGFibGUuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5leGVjKHsgY29tbWFuZDogXCJ0cnVlXCIgfSk7XG4gICAgYXdhaXQgcmVzdWx0LnJlc3VsdDtcbiAgfVxuXG4gIGFzeW5jIHN0b3AoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5zZGsuc3RvcCgpO1xuICB9XG5cbiAgYXN5bmMgc25hcHNob3QoKTogUHJvbWlzZTx7IHNuYXBzaG90SWQ6IHN0cmluZyB9PiB7XG4gICAgY29uc3Qgc25hcCA9IGF3YWl0IHRoaXMuc2RrLnNuYXBzaG90KCk7XG4gICAgcmV0dXJuIHsgc25hcHNob3RJZDogc25hcC5zbmFwc2hvdElkIH07XG4gIH1cblxuICBhc3luYyB1cGRhdGVOZXR3b3JrUG9saWN5KHtcbiAgICBwb2xpY3ksXG4gIH06IHtcbiAgICBwb2xpY3k6IGltcG9ydChcIkB2ZXJjZWwvc2FuZGJveFwiKS5OZXR3b3JrUG9saWN5O1xuICAgIHNpZ25hbD86IEFib3J0U2lnbmFsO1xuICB9KTogUHJvbWlzZTxpbXBvcnQoXCJAdmVyY2VsL3NhbmRib3hcIikuTmV0d29ya1BvbGljeT4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLnNkay51cGRhdGVOZXR3b3JrUG9saWN5KHBvbGljeSk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZlcmNlbFNhbmRib3goXG4gIGRlZmF1bHRzPzogUGFydGlhbDxpbXBvcnQoXCIuLi9hZGFwdGVyXCIpLlNhbmRib3hTZXR1cEZpZWxkcz4gJiB7XG4gICAgcnVuPzogKHNhbmRib3g6IFNhbmRib3hJbnN0YW5jZSkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgICBjb25maWc/OiBWZXJjZWxCaW5kaW5nQ29uZmlnO1xuICB9XG4pOiBTYW5kYm94QmluZGluZzxcInZlcmNlbFwiLCBWZXJjZWxCaW5kaW5nQ29uZmlnLCBWZXJjZWxCaW5kaW5nTWV0YWRhdGE+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBcInZlcmNlbFwiLFxuICAgIGRlZmF1bHRzLFxuICAgIGFzeW5jIGNyZWF0ZSh7IGN3ZDogY3JlYXRlQ3dkLCBhZ2VudCwgc2V0dXAsIHJlY29yZCwgc2lnbmFsOiBfc2lnbmFsLCBsb2cgfSkge1xuICAgICAgY29uc3Qgc3RvcmFnZSA9IGFnZW50LnN0b3JhZ2U7XG4gICAgICBjb25zdCBjb25maWcgPSBzZXR1cC5jb25maWcgPz8ge307XG4gICAgICBjb25zdCBjd2QgPSBjb25maWcuY3dkID8/IGNyZWF0ZUN3ZCA/PyB1bmRlZmluZWQ7XG4gICAgICBjb25zdCByZXNvdXJjZXMgPSBjb25maWcucmVzb3VyY2VzID8/IHsgdmNwdXM6IERFRkFVTFRfVkNQVVMgfTtcbiAgICAgIGNvbnN0IHBvcnRzID0gY29uZmlnLnBvcnRzO1xuICAgICAgY29uc3QgbmV0d29ya1BvbGljeSA9XG4gICAgICAgIGNvbmZpZy5uZXR3b3JrUG9saWN5ID8/IHNldHVwLm5ldHdvcmtQb2xpY3kgPz8gdW5kZWZpbmVkO1xuXG4gICAgICBjb25zdCBzYW5kYm94T3B0czogQ3JlYXRlU2FuZGJveE9wdHMgPSB7XG4gICAgICAgIHJlc291cmNlcyxcbiAgICAgICAgcG9ydHMsXG4gICAgICAgIG5ldHdvcmtQb2xpY3ksXG4gICAgICAgIHNuYXBzaG90SWQ6IGNvbmZpZy5zbmFwc2hvdElkLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgX3N0YXJ0TGlmZWN5Y2xlID0gKHZlcmNlbFNhbmRib3hJZDogc3RyaW5nKSA9PiB7XG4gICAgICAgIGlmICghcmVjb3JkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHN0YXJ0V29ya2Zsb3coc2FuZGJveExpZmVjeWNsZVdvcmtmbG93LCBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgaW5wdXQ6IHtcbiAgICAgICAgICAgICAgYWdlbnQsXG4gICAgICAgICAgICAgIHNhbmRib3hJZDogcmVjb3JkLmlkLFxuICAgICAgICAgICAgICB2ZXJjZWxTYW5kYm94SWQsXG4gICAgICAgICAgICAgIGNvbmZpZzogY29uZmlnLmxpZmVjeWNsZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgXSkuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICBsb2cuZXJyb3IoXCJmYWlsZWQgdG8gc3RhcnQgbGlmZWN5Y2xlIHdvcmtmbG93XCIsIHsgY2F1c2U6IGUgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgICAgaWYgKHNldHVwLnZlcnNpb24pIHtcbiAgICAgICAgY29uc3QgZXhpc3RpbmcgPSBhd2FpdCBzdG9yYWdlLnNldHVwLmdldChzZXR1cC52ZXJzaW9uKTtcbiAgICAgICAgaWYgKGV4aXN0aW5nPy5zbmFwc2hvdElkKSB7XG4gICAgICAgICAgY29uc3Qgc2RrID0gYXdhaXQgY3JlYXRlU2RrKHtcbiAgICAgICAgICAgIC4uLnNhbmRib3hPcHRzLFxuICAgICAgICAgICAgc25hcHNob3RJZDogZXhpc3Rpbmcuc25hcHNob3RJZCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBWZXJjZWxTYW5kYm94SW5zdGFuY2Uoc2RrLCBjd2QpO1xuXG4gICAgICAgICAgc3RvcmFnZS5zZXR1cFxuICAgICAgICAgICAgLnNldChzZXR1cC52ZXJzaW9uLCB7XG4gICAgICAgICAgICAgIC4uLmV4aXN0aW5nLFxuICAgICAgICAgICAgICB2ZXJzaW9uOiBzZXR1cC52ZXJzaW9uLFxuICAgICAgICAgICAgICBsYXN0VXNlZEF0OiBEYXRlLm5vdygpLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5jYXRjaCgoKSA9PiB1bmRlZmluZWQpO1xuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGluc3RhbmNlLFxuICAgICAgICAgICAgbWV0YWRhdGE6IHsgc2FuZGJveElkOiBzZGsuc2FuZGJveElkIH0sXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoc2V0dXAucnVuKSB7XG4gICAgICAgIGlmICghc2V0dXAudmVyc2lvbikge1xuICAgICAgICAgIGxvZy5lcnJvcihcInNldHVwLnJ1biBwcm92aWRlZCB3aXRob3V0IHNldHVwLnZlcnNpb25cIiwgeyBzZXR1cCB9KTtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJzZXR1cC5ydW4gcHJvdmlkZWQgd2l0aG91dCBzZXR1cC52ZXJzaW9uXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNyZWF0ZVNldHVwU25hcHNob3Qoe1xuICAgICAgICAgIHNhbmRib3hPcHRzLFxuICAgICAgICAgIHJ1bjogc2V0dXAucnVuLFxuICAgICAgICAgIHN0b3JhZ2UsXG4gICAgICAgICAgc25hcHNob3RWZXJzaW9uOiBzZXR1cC52ZXJzaW9uLFxuICAgICAgICAgIGxvZyxcbiAgICAgICAgfSkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgbG9nLmVycm9yKFwiYmFja2dyb3VuZCBzZXR1cCBzbmFwc2hvdCBmYWlsZWRcIiwgeyBjYXVzZTogZXJyb3IgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHNkayA9IGF3YWl0IGNyZWF0ZVNkayhzYW5kYm94T3B0cyk7XG4gICAgICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFZlcmNlbFNhbmRib3hJbnN0YW5jZShzZGssIGN3ZCk7XG4gICAgICAgIGF3YWl0IHNldHVwLnJ1bihpbnN0YW5jZSk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBpbnN0YW5jZSxcbiAgICAgICAgICBtZXRhZGF0YTogeyBzYW5kYm94SWQ6IHNkay5zYW5kYm94SWQgfSxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2RrID0gYXdhaXQgY3JlYXRlU2RrKHNhbmRib3hPcHRzKTtcbiAgICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFZlcmNlbFNhbmRib3hJbnN0YW5jZShzZGssIGN3ZCk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGluc3RhbmNlLFxuICAgICAgICBtZXRhZGF0YTogeyBzYW5kYm94SWQ6IHNkay5zYW5kYm94SWQgfSxcbiAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGNvbm5lY3QoeyBtZXRhZGF0YSwgY3dkIH0pIHtcbiAgICAgIGNvbnN0IFNhbmRib3hTREsgPSBhd2FpdCBsb2FkU2FuZGJveFNESygpO1xuICAgICAgY29uc3Qgc2RrID0gYXdhaXQgU2FuZGJveFNESy5nZXQoe1xuICAgICAgICBzYW5kYm94SWQ6IG1ldGFkYXRhLnNhbmRib3hJZCxcbiAgICAgICAgLi4uZ2V0VGVzdENyZWRlbnRpYWxzKCksXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBuZXcgVmVyY2VsU2FuZGJveEluc3RhbmNlKHNkaywgY3dkID8/IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgfTtcbn1cbiIsICJpbXBvcnQgeyB1bGlkIH0gZnJvbSBcInVsaWRcIjtcbmltcG9ydCB0eXBlIHsgRXhlY1Jlc3VsdCwgU2FuZGJveEJpbmRpbmcsIFNhbmRib3hJbnN0YW5jZSB9IGZyb20gXCIuLi9hZGFwdGVyXCI7XG5cbmV4cG9ydCB0eXBlIERvY2tlckJpbmRpbmdDb25maWcgPSB7XG4gIGN3ZD86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIERvY2tlckJpbmRpbmdNZXRhZGF0YSA9IHtcbiAgc2FuZGJveE5hbWU6IHN0cmluZztcbn07XG5cbi8qKlxuICogUnVuIGEgYGRvY2tlciBzYW5kYm94YCBDTEkgY29tbWFuZCBhbmQgcmV0dXJuIGl0cyBvdXRwdXQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGV4ZWNEb2NrZXIoXG4gIGFyZ3M6IHN0cmluZ1tdLFxuICBvcHRzPzogeyB0aW1lb3V0TXM/OiBudW1iZXI7IHNpZ25hbD86IEFib3J0U2lnbmFsIH1cbik6IFByb21pc2U8eyBzdGRvdXQ6IHN0cmluZzsgc3RkZXJyOiBzdHJpbmc7IGV4aXRDb2RlOiBudW1iZXIgfT4ge1xuICBjb25zdCB7IHNwYXduIH0gPSBhd2FpdCBpbXBvcnQoXCJub2RlOmNoaWxkX3Byb2Nlc3NcIik7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgY2hpbGQgPSBzcGF3bihcImRvY2tlclwiLCBbXCJzYW5kYm94XCIsIC4uLmFyZ3NdLCB7XG4gICAgICBzaWduYWw6IG9wdHM/LnNpZ25hbCxcbiAgICB9KTtcblxuICAgIGxldCBzdGRvdXQgPSBcIlwiO1xuICAgIGxldCBzdGRlcnIgPSBcIlwiO1xuXG4gICAgY2hpbGQuc3Rkb3V0Lm9uKFwiZGF0YVwiLCAoZGF0YTogQnVmZmVyKSA9PiB7XG4gICAgICBzdGRvdXQgKz0gZGF0YS50b1N0cmluZygpO1xuICAgIH0pO1xuICAgIGNoaWxkLnN0ZGVyci5vbihcImRhdGFcIiwgKGRhdGE6IEJ1ZmZlcikgPT4ge1xuICAgICAgc3RkZXJyICs9IGRhdGEudG9TdHJpbmcoKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHRpbWVvdXRJZCA9IG9wdHM/LnRpbWVvdXRNc1xuICAgICAgPyBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBjaGlsZC5raWxsKFwiU0lHVEVSTVwiKTtcbiAgICAgICAgICByZWplY3QobmV3IEVycm9yKGBkb2NrZXIgc2FuZGJveCAke2FyZ3NbMF19IHRpbWVkIG91dGApKTtcbiAgICAgICAgfSwgb3B0cy50aW1lb3V0TXMpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGNoaWxkLm9uKFwiZXJyb3JcIiwgKGVycikgPT4ge1xuICAgICAgaWYgKHRpbWVvdXRJZCkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgIH1cbiAgICAgIHJlamVjdChlcnIpO1xuICAgIH0pO1xuXG4gICAgY2hpbGQub24oXCJjbG9zZVwiLCAoY29kZSkgPT4ge1xuICAgICAgaWYgKHRpbWVvdXRJZCkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgIH1cbiAgICAgIHJlc29sdmUoeyBzdGRvdXQsIHN0ZGVyciwgZXhpdENvZGU6IGNvZGUgPz8gMCB9KTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbi8qKlxuICogVHJhY2sgd2hpY2ggc2FuZGJveGVzIGhhdmUgYmVlbiB2ZXJpZmllZCB0byBleGlzdCBpbiB0aGlzIHByb2Nlc3MuXG4gKiBNYXBzIHNhbmRib3ggbmFtZSAtPiBQcm9taXNlIHNvIGNvbmN1cnJlbnQgY2FsbGVycyB3YWl0IG9uIHRoZSBzYW1lIGNoZWNrLlxuICovXG5jb25zdCBlbnN1cmVQcm9taXNlcyA9IG5ldyBNYXA8c3RyaW5nLCBQcm9taXNlPHZvaWQ+PigpO1xuXG4vKipcbiAqIFNhbmRib3hlcyB0aGF0IHRoaXMgcHJvY2VzcyBoYXMgdXNlZC4gU3RvcHBlZCBvbiBwcm9jZXNzIGV4aXQuXG4gKi9cbmNvbnN0IGFjdGl2ZVNhbmRib3hlcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG5sZXQgY2xlYW51cFJlZ2lzdGVyZWQgPSBmYWxzZTtcbmxldCBfZXhlY1N5bmM6IHR5cGVvZiBpbXBvcnQoXCJub2RlOmNoaWxkX3Byb2Nlc3NcIikuZXhlY1N5bmMgfCBudWxsID0gbnVsbDtcblxuYXN5bmMgZnVuY3Rpb24gcmVnaXN0ZXJDbGVhbnVwKCkge1xuICBpZiAoY2xlYW51cFJlZ2lzdGVyZWQpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY2xlYW51cFJlZ2lzdGVyZWQgPSB0cnVlO1xuXG4gIC8vIFByZS1sb2FkIGV4ZWNTeW5jIHNvIHRoZSBzeW5jaHJvbm91cyBleGl0IGhhbmRsZXIgY2FuIHVzZSBpdC5cbiAgY29uc3QgY3AgPSBhd2FpdCBpbXBvcnQoXCJub2RlOmNoaWxkX3Byb2Nlc3NcIik7XG4gIF9leGVjU3luYyA9IGNwLmV4ZWNTeW5jO1xuXG4gIGNvbnN0IGNsZWFudXAgPSAoKSA9PiB7XG4gICAgaWYgKCFfZXhlY1N5bmMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZm9yIChjb25zdCBuYW1lIG9mIEFycmF5LmZyb20oYWN0aXZlU2FuZGJveGVzKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgX2V4ZWNTeW5jKGBkb2NrZXIgc2FuZGJveCBzdG9wICR7bmFtZX1gLCB7XG4gICAgICAgICAgdGltZW91dDogMTBfMDAwLFxuICAgICAgICAgIHN0ZGlvOiBcInBpcGVcIixcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gQmVzdC1lZmZvcnQgXHUyMDE0IHNhbmRib3ggbWF5IGFscmVhZHkgYmUgc3RvcHBlZFxuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBwcm9jZXNzLm9uKFwiZXhpdFwiLCBjbGVhbnVwKTtcbiAgcHJvY2Vzcy5vbihcIlNJR0lOVFwiLCAoKSA9PiB7XG4gICAgY2xlYW51cCgpO1xuICAgIHByb2Nlc3MuZXhpdCgxMzApO1xuICB9KTtcbiAgcHJvY2Vzcy5vbihcIlNJR1RFUk1cIiwgKCkgPT4ge1xuICAgIGNsZWFudXAoKTtcbiAgICBwcm9jZXNzLmV4aXQoMTQzKTtcbiAgfSk7XG59XG5cbi8qKlxuICogRW5zdXJlIGEgRG9ja2VyIHNhbmRib3ggZXhpc3RzIGZvciB0aGUgZ2l2ZW4gbmFtZS5cbiAqIElmIGl0IGFscmVhZHkgZXhpc3RzIChmcm9tIGEgcHJldmlvdXMgcHJvY2VzcyksIHJldXNlcyBpdC5cbiAqIElmIGl0IGRvZXNuJ3QgZXhpc3QsIGNyZWF0ZXMgaXQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGVuc3VyZVNhbmRib3goc2FuZGJveE5hbWU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBleGlzdGluZyA9IGVuc3VyZVByb21pc2VzLmdldChzYW5kYm94TmFtZSk7XG4gIGlmIChleGlzdGluZykge1xuICAgIHJldHVybiBleGlzdGluZztcbiAgfVxuXG4gIGNvbnN0IHByb21pc2UgPSAoYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGxzID0gYXdhaXQgZXhlY0RvY2tlcihbXCJsc1wiLCBcIi1xXCJdLCB7IHRpbWVvdXRNczogMTBfMDAwIH0pO1xuICAgIGNvbnN0IGV4aXN0aW5nTmFtZXMgPVxuICAgICAgbHMuZXhpdENvZGUgPT09IDBcbiAgICAgICAgPyBscy5zdGRvdXRcbiAgICAgICAgICAgIC5zcGxpdChcIlxcblwiKVxuICAgICAgICAgICAgLm1hcCgocykgPT4gcy50cmltKCkpXG4gICAgICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgIDogW107XG5cbiAgICBpZiAoZXhpc3RpbmdOYW1lcy5pbmNsdWRlcyhzYW5kYm94TmFtZSkpIHtcbiAgICAgIGFjdGl2ZVNhbmRib3hlcy5hZGQoc2FuZGJveE5hbWUpO1xuICAgICAgcmVnaXN0ZXJDbGVhbnVwKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcGF0aCA9IGF3YWl0IGltcG9ydChcIm5vZGU6cGF0aFwiKTtcbiAgICBjb25zdCBvcyA9IGF3YWl0IGltcG9ydChcIm5vZGU6b3NcIik7XG4gICAgY29uc3QgZnMgPSBhd2FpdCBpbXBvcnQoXCJub2RlOmZzL3Byb21pc2VzXCIpO1xuXG4gICAgY29uc3Qgd29ya3NwYWNlRGlyID0gcGF0aC5qb2luKFxuICAgICAgb3MudG1wZGlyKCksXG4gICAgICBcImFnZW50LWRvY2tlci1zYW5kYm94XCIsXG4gICAgICBzYW5kYm94TmFtZVxuICAgICk7XG4gICAgYXdhaXQgZnMubWtkaXIod29ya3NwYWNlRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuICAgIGNvbnN0IGNyZWF0ZSA9IGF3YWl0IGV4ZWNEb2NrZXIoXG4gICAgICBbXCJjcmVhdGVcIiwgXCItLW5hbWVcIiwgc2FuZGJveE5hbWUsIFwic2hlbGxcIiwgd29ya3NwYWNlRGlyXSxcbiAgICAgIHsgdGltZW91dE1zOiA2MF8wMDAgfVxuICAgICk7XG5cbiAgICBpZiAoY3JlYXRlLmV4aXRDb2RlICE9PSAwKSB7XG4gICAgICBpZiAoY3JlYXRlLnN0ZGVyci5pbmNsdWRlcyhcImFscmVhZHkgZXhpc3RzXCIpKSB7XG4gICAgICAgIGFjdGl2ZVNhbmRib3hlcy5hZGQoc2FuZGJveE5hbWUpO1xuICAgICAgICByZWdpc3RlckNsZWFudXAoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgRmFpbGVkIHRvIGNyZWF0ZSBkb2NrZXIgc2FuZGJveCBcIiR7c2FuZGJveE5hbWV9XCI6ICR7Y3JlYXRlLnN0ZGVycn1gXG4gICAgICApO1xuICAgIH1cblxuICAgIGFjdGl2ZVNhbmRib3hlcy5hZGQoc2FuZGJveE5hbWUpO1xuICAgIHJlZ2lzdGVyQ2xlYW51cCgpO1xuICB9KSgpO1xuXG4gIGVuc3VyZVByb21pc2VzLnNldChzYW5kYm94TmFtZSwgcHJvbWlzZSk7XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBwcm9taXNlO1xuICB9IGNhdGNoIChlKSB7XG4gICAgZW5zdXJlUHJvbWlzZXMuZGVsZXRlKHNhbmRib3hOYW1lKTtcbiAgICB0aHJvdyBlO1xuICB9XG59XG5cbmNvbnN0IERFRkFVTFRfRE9DS0VSX0NXRCA9IFwiL2hvbWUvYWdlbnQvd29ya3NwYWNlXCI7XG5cbmNsYXNzIERvY2tlclNhbmRib3hJbnN0YW5jZSBpbXBsZW1lbnRzIFNhbmRib3hJbnN0YW5jZSB7XG4gIHJlYWRvbmx5IGN3ZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IHNhbmRib3hOYW1lOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgcHJvY2Vzc2VzID0gbmV3IE1hcDxcbiAgICBzdHJpbmcsXG4gICAgaW1wb3J0KFwibm9kZTpjaGlsZF9wcm9jZXNzXCIpLkNoaWxkUHJvY2Vzc1xuICA+KCk7XG5cbiAgY29uc3RydWN0b3Ioc2FuZGJveE5hbWU6IHN0cmluZywgY3dkPzogc3RyaW5nKSB7XG4gICAgdGhpcy5zYW5kYm94TmFtZSA9IHNhbmRib3hOYW1lO1xuICAgIHRoaXMuY3dkID0gY3dkID8/IERFRkFVTFRfRE9DS0VSX0NXRDtcbiAgfVxuXG4gIGFzeW5jIGV4ZWMob3B0czoge1xuICAgIGNvbW1hbmQ6IHN0cmluZztcbiAgICBhcmdzPzogc3RyaW5nW107XG4gICAgY3dkPzogc3RyaW5nO1xuICAgIGVudj86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgc3Vkbz86IGJvb2xlYW47XG4gICAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG4gIH0pOiBQcm9taXNlPEV4ZWNSZXN1bHQ+IHtcbiAgICBhd2FpdCBlbnN1cmVTYW5kYm94KHRoaXMuc2FuZGJveE5hbWUpO1xuXG4gICAgY29uc3QgeyBzcGF3biB9ID0gYXdhaXQgaW1wb3J0KFwibm9kZTpjaGlsZF9wcm9jZXNzXCIpO1xuICAgIGNvbnN0IGNvbW1hbmRJZCA9IGBjb21tYW5kXyR7dWxpZCgpfWA7XG4gICAgY29uc3QgZW52RmxhZ3MgPSBvcHRzLmVudlxuICAgICAgPyBPYmplY3QuZW50cmllcyhvcHRzLmVudikuZmxhdE1hcCgoW2ssIHZdKSA9PiBbXCItZVwiLCBgJHtrfT0ke3Z9YF0pXG4gICAgICA6IFtdO1xuICAgIGNvbnN0IGN3ZEZsYWdzID0gb3B0cy5jd2QgPyBbXCItd1wiLCBvcHRzLmN3ZF0gOiBbXTtcbiAgICBsZXQgYmFzZUNtZDogc3RyaW5nW107XG4gICAgaWYgKG9wdHMuc3Vkbykge1xuICAgICAgYmFzZUNtZCA9IFtcInN1ZG9cIiwgb3B0cy5jb21tYW5kLCAuLi4ob3B0cy5hcmdzID8/IFtdKV07XG4gICAgfSBlbHNlIGlmIChvcHRzLmFyZ3MpIHtcbiAgICAgIGJhc2VDbWQgPSBbb3B0cy5jb21tYW5kLCAuLi5vcHRzLmFyZ3NdO1xuICAgIH0gZWxzZSB7XG4gICAgICBiYXNlQ21kID0gW29wdHMuY29tbWFuZF07XG4gICAgfVxuICAgIGNvbnN0IGZ1bGxDbWQgPSBiYXNlQ21kO1xuXG4gICAgY29uc3QgY2hpbGQgPSBzcGF3bihcbiAgICAgIFwiZG9ja2VyXCIsXG4gICAgICBbXG4gICAgICAgIFwic2FuZGJveFwiLFxuICAgICAgICBcImV4ZWNcIixcbiAgICAgICAgLi4uZW52RmxhZ3MsXG4gICAgICAgIC4uLmN3ZEZsYWdzLFxuICAgICAgICB0aGlzLnNhbmRib3hOYW1lLFxuICAgICAgICAuLi5mdWxsQ21kLFxuICAgICAgXSxcbiAgICAgIHsgc2lnbmFsOiBvcHRzLnNpZ25hbCB9XG4gICAgKTtcblxuICAgIHRoaXMucHJvY2Vzc2VzLnNldChjb21tYW5kSWQsIGNoaWxkKTtcblxuICAgIGxldCBzdGRvdXQgPSBcIlwiO1xuICAgIGxldCBzdGRlcnIgPSBcIlwiO1xuICAgIGNvbnN0IGxvZ1F1ZXVlOiB7IHN0cmVhbTogXCJzdGRvdXRcIiB8IFwic3RkZXJyXCI7IGRhdGE6IHN0cmluZyB9W10gPSBbXTtcbiAgICBsZXQgbG9nUmVzb2x2ZTogKCgpID0+IHZvaWQpIHwgbnVsbCA9IG51bGw7XG4gICAgbGV0IGNsb3NlZCA9IGZhbHNlO1xuXG4gICAgY2hpbGQuc3Rkb3V0Lm9uKFwiZGF0YVwiLCAoZGF0YTogc3RyaW5nIHwgQnVmZmVyKSA9PiB7XG4gICAgICBjb25zdCBzdHIgPSBTdHJpbmcoZGF0YSk7XG4gICAgICBzdGRvdXQgKz0gc3RyO1xuICAgICAgbG9nUXVldWUucHVzaCh7IHN0cmVhbTogXCJzdGRvdXRcIiwgZGF0YTogc3RyIH0pO1xuICAgICAgbG9nUmVzb2x2ZT8uKCk7XG4gICAgfSk7XG5cbiAgICBjaGlsZC5zdGRlcnIub24oXCJkYXRhXCIsIChkYXRhOiBzdHJpbmcgfCBCdWZmZXIpID0+IHtcbiAgICAgIGNvbnN0IHN0ciA9IFN0cmluZyhkYXRhKTtcbiAgICAgIHN0ZGVyciArPSBzdHI7XG4gICAgICBsb2dRdWV1ZS5wdXNoKHsgc3RyZWFtOiBcInN0ZGVyclwiLCBkYXRhOiBzdHIgfSk7XG4gICAgICBsb2dSZXNvbHZlPy4oKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBQcm9taXNlPHtcbiAgICAgIHN0ZG91dDogc3RyaW5nO1xuICAgICAgc3RkZXJyOiBzdHJpbmc7XG4gICAgICBleGl0Q29kZTogbnVtYmVyO1xuICAgIH0+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNoaWxkLm9uKFwiZXJyb3JcIiwgKGVycikgPT4ge1xuICAgICAgICB0aGlzLnByb2Nlc3Nlcy5kZWxldGUoY29tbWFuZElkKTtcbiAgICAgICAgY2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgbG9nUmVzb2x2ZT8uKCk7XG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgfSk7XG5cbiAgICAgIGNoaWxkLm9uKFwiY2xvc2VcIiwgKGNvZGU6IG51bWJlciB8IG51bGwpID0+IHtcbiAgICAgICAgdGhpcy5wcm9jZXNzZXMuZGVsZXRlKGNvbW1hbmRJZCk7XG4gICAgICAgIGNsb3NlZCA9IHRydWU7XG4gICAgICAgIGxvZ1Jlc29sdmU/LigpO1xuICAgICAgICByZXNvbHZlKHsgc3Rkb3V0LCBzdGRlcnIsIGV4aXRDb2RlOiBjb2RlID8/IDAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGFzeW5jIGZ1bmN0aW9uKiBsb2dzKCk6IEFzeW5jSXRlcmFibGU8e1xuICAgICAgc3RyZWFtOiBcInN0ZG91dFwiIHwgXCJzdGRlcnJcIjtcbiAgICAgIGRhdGE6IHN0cmluZztcbiAgICB9PiB7XG4gICAgICB3aGlsZSAoIWNsb3NlZCB8fCBsb2dRdWV1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IGVudHJ5ID0gbG9nUXVldWUuc2hpZnQoKTtcbiAgICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgICAgeWllbGQgZW50cnk7XG4gICAgICAgIH0gZWxzZSBpZiAoIWNsb3NlZCkge1xuICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlPHZvaWQ+KChyKSA9PiB7XG4gICAgICAgICAgICBsb2dSZXNvbHZlID0gcjtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBsb2dSZXNvbHZlID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7IGNvbW1hbmRJZCwgbG9ncywgcmVzdWx0IH07XG4gIH1cblxuICBhc3luYyByZWFkRmlsZShvcHRzOiB7XG4gICAgcGF0aDogc3RyaW5nO1xuICAgIHNpZ25hbD86IEFib3J0U2lnbmFsO1xuICB9KTogUHJvbWlzZTxCdWZmZXIgfCBudWxsPiB7XG4gICAgYXdhaXQgZW5zdXJlU2FuZGJveCh0aGlzLnNhbmRib3hOYW1lKTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGV4ZWNEb2NrZXIoXG4gICAgICBbXG4gICAgICAgIFwiZXhlY1wiLFxuICAgICAgICB0aGlzLnNhbmRib3hOYW1lLFxuICAgICAgICBcImJhc2hcIixcbiAgICAgICAgXCItY1wiLFxuICAgICAgICBgYmFzZTY0ICcke29wdHMucGF0aC5yZXBsYWNlKC8nL2csIFwiJ1xcXFwnJ1wiKX0nYCxcbiAgICAgIF0sXG4gICAgICB7IHRpbWVvdXRNczogMzBfMDAwLCBzaWduYWw6IG9wdHMuc2lnbmFsIH1cbiAgICApO1xuXG4gICAgaWYgKHJlc3VsdC5leGl0Q29kZSAhPT0gMCkge1xuICAgICAgaWYgKFxuICAgICAgICByZXN1bHQuc3RkZXJyLmluY2x1ZGVzKFwiTm8gc3VjaCBmaWxlXCIpIHx8XG4gICAgICAgIHJlc3VsdC5zdGRlcnIuaW5jbHVkZXMoXCJFTk9FTlRcIilcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcihgcmVhZEZpbGUgZmFpbGVkOiAke3Jlc3VsdC5zdGRlcnJ9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHJlc3VsdC5zdGRvdXQudHJpbSgpLCBcImJhc2U2NFwiKTtcbiAgfVxuXG4gIGFzeW5jIHdyaXRlRmlsZXMob3B0czoge1xuICAgIGZpbGVzOiB7IHBhdGg6IHN0cmluZzsgY29udGVudDogc3RyaW5nIHwgQnVmZmVyIH1bXTtcbiAgICBkZXN0UGF0aDogc3RyaW5nO1xuICAgIHNpZ25hbD86IEFib3J0U2lnbmFsO1xuICB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgZW5zdXJlU2FuZGJveCh0aGlzLnNhbmRib3hOYW1lKTtcblxuICAgIGZvciAoY29uc3QgZmlsZSBvZiBvcHRzLmZpbGVzKSB7XG4gICAgICBjb25zdCBmdWxsUGF0aCA9IG9wdHMuZGVzdFBhdGhcbiAgICAgICAgPyBgJHtvcHRzLmRlc3RQYXRofS8ke2ZpbGUucGF0aH1gXG4gICAgICAgIDogZmlsZS5wYXRoO1xuXG4gICAgICAvLyBFbnN1cmUgcGFyZW50IGRpcmVjdG9yeSBleGlzdHNcbiAgICAgIGNvbnN0IHBhcmVudERpciA9IGZ1bGxQYXRoLnN1YnN0cmluZygwLCBmdWxsUGF0aC5sYXN0SW5kZXhPZihcIi9cIikpO1xuICAgICAgaWYgKHBhcmVudERpcikge1xuICAgICAgICBhd2FpdCBleGVjRG9ja2VyKFtcImV4ZWNcIiwgdGhpcy5zYW5kYm94TmFtZSwgXCJta2RpclwiLCBcIi1wXCIsIHBhcmVudERpcl0sIHtcbiAgICAgICAgICBzaWduYWw6IG9wdHMuc2lnbmFsLFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgLy8gV3JpdGUgdmlhIGJhc2U2NCB0byBoYW5kbGUgYm90aCB0ZXh0IGFuZCBiaW5hcnkgY29udGVudFxuICAgICAgY29uc3QgYjY0ID1cbiAgICAgICAgdHlwZW9mIGZpbGUuY29udGVudCA9PT0gXCJzdHJpbmdcIlxuICAgICAgICAgID8gQnVmZmVyLmZyb20oZmlsZS5jb250ZW50KS50b1N0cmluZyhcImJhc2U2NFwiKVxuICAgICAgICAgIDogZmlsZS5jb250ZW50LnRvU3RyaW5nKFwiYmFzZTY0XCIpO1xuXG4gICAgICBhd2FpdCBleGVjRG9ja2VyKFxuICAgICAgICBbXG4gICAgICAgICAgXCJleGVjXCIsXG4gICAgICAgICAgdGhpcy5zYW5kYm94TmFtZSxcbiAgICAgICAgICBcImJhc2hcIixcbiAgICAgICAgICBcIi1jXCIsXG4gICAgICAgICAgYGVjaG8gJyR7YjY0fScgfCBiYXNlNjQgLWQgPiAnJHtmdWxsUGF0aC5yZXBsYWNlKC8nL2csIFwiJ1xcXFwnJ1wiKX0nYCxcbiAgICAgICAgXSxcbiAgICAgICAgeyBzaWduYWw6IG9wdHMuc2lnbmFsIH1cbiAgICAgICk7XG5cbiAgICAgIGlmIChmaWxlLnBhdGguZW5kc1dpdGgoXCIuc2hcIikpIHtcbiAgICAgICAgYXdhaXQgZXhlY0RvY2tlcihbXCJleGVjXCIsIHRoaXMuc2FuZGJveE5hbWUsIFwiY2htb2RcIiwgXCIreFwiLCBmdWxsUGF0aF0sIHtcbiAgICAgICAgICBzaWduYWw6IG9wdHMuc2lnbmFsLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL3VzZUF3YWl0OiAuXG4gIGFzeW5jIGdldERvbWFpbihvcHRzOiB7XG4gICAgcG9ydDogbnVtYmVyO1xuICAgIHNpZ25hbD86IEFib3J0U2lnbmFsO1xuICB9KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gYGh0dHA6Ly9sb2NhbGhvc3Q6JHtvcHRzLnBvcnR9YDtcbiAgfVxuXG4gIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvdXNlQXdhaXQ6IC5cbiAgYXN5bmMga2lsbChvcHRzOiB7IGNvbW1hbmRJZDogc3RyaW5nOyBzaWduYWw/OiBBYm9ydFNpZ25hbCB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgY2hpbGQgPSB0aGlzLnByb2Nlc3Nlcy5nZXQob3B0cy5jb21tYW5kSWQpO1xuICAgIGlmIChjaGlsZCkge1xuICAgICAgY2hpbGQua2lsbChcIlNJR1RFUk1cIik7XG4gICAgICB0aGlzLnByb2Nlc3Nlcy5kZWxldGUob3B0cy5jb21tYW5kSWQpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvdXNlQXdhaXQ6IC5cbiAgYXN5bmMgZ2V0U3RhdHVzKCk6IFByb21pc2U8XG4gICAgXCJwZW5kaW5nXCIgfCBcInJ1bm5pbmdcIiB8IFwic3RvcHBpbmdcIiB8IFwic3RvcHBlZFwiIHwgXCJmYWlsZWRcIlxuICA+IHtcbiAgICAvLyBkb2NrZXIgc2FuZGJveCBDTEkgZG9lc24ndCBleHBvc2Ugc3RhdHVzIFx1MjAxNCBhc3N1bWUgcnVubmluZyBpZiBlbnN1cmVkXG4gICAgcmV0dXJuIFwicnVubmluZ1wiO1xuICB9XG5cbiAgYXN5bmMgc3RhcnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgZW5zdXJlU2FuZGJveCh0aGlzLnNhbmRib3hOYW1lKTtcbiAgfVxuXG4gIGFzeW5jIHN0b3AoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgZXhlY0RvY2tlcihbXCJzdG9wXCIsIHRoaXMuc2FuZGJveE5hbWVdLCB7IHRpbWVvdXRNczogMzBfMDAwIH0pO1xuICAgIGFjdGl2ZVNhbmRib3hlcy5kZWxldGUodGhpcy5zYW5kYm94TmFtZSk7XG4gICAgZW5zdXJlUHJvbWlzZXMuZGVsZXRlKHRoaXMuc2FuZGJveE5hbWUpO1xuICB9XG5cbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy91c2VBd2FpdDogLlxuICBhc3luYyBzbmFwc2hvdCgpOiBQcm9taXNlPHsgc25hcHNob3RJZDogc3RyaW5nIH0+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJzbmFwc2hvdCBpcyBub3Qgc3VwcG9ydGVkIGZvciBkb2NrZXIgc2FuZGJveGVzXCIpO1xuICB9XG5cbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy91c2VBd2FpdDogLlxuICBhc3luYyB1cGRhdGVOZXR3b3JrUG9saWN5KCk6IFByb21pc2U8bmV2ZXI+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBcInVwZGF0ZU5ldHdvcmtQb2xpY3kgaXMgbm90IHN1cHBvcnRlZCBmb3IgZG9ja2VyIHNhbmRib3hlc1wiXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZG9ja2VyU2FuZGJveChcbiAgZGVmYXVsdHM/OiBQYXJ0aWFsPGltcG9ydChcIi4uL2FkYXB0ZXJcIikuU2FuZGJveFNldHVwRmllbGRzPiAmIHtcbiAgICBydW4/OiAoc2FuZGJveDogU2FuZGJveEluc3RhbmNlKSA9PiBQcm9taXNlPHZvaWQ+O1xuICAgIGNvbmZpZz86IERvY2tlckJpbmRpbmdDb25maWc7XG4gIH1cbik6IFNhbmRib3hCaW5kaW5nPFwiZG9ja2VyXCIsIERvY2tlckJpbmRpbmdDb25maWcsIERvY2tlckJpbmRpbmdNZXRhZGF0YT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IFwiZG9ja2VyXCIsXG4gICAgZGVmYXVsdHMsXG4gICAgYXN5bmMgY3JlYXRlKG9wdHMpIHtcbiAgICAgIGNvbnN0IHNhbmRib3hOYW1lID0gYGFnZW50LSR7dWxpZCgpfWA7XG4gICAgICBjb25zdCBjd2QgPSBvcHRzLnNldHVwPy5jb25maWc/LmN3ZDtcblxuICAgICAgYXdhaXQgZW5zdXJlU2FuZGJveChzYW5kYm94TmFtZSk7XG5cbiAgICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IERvY2tlclNhbmRib3hJbnN0YW5jZShzYW5kYm94TmFtZSwgY3dkKTtcblxuICAgICAgaWYgKG9wdHMuc2V0dXA/LnJ1bikge1xuICAgICAgICBhd2FpdCBvcHRzLnNldHVwLnJ1bihpbnN0YW5jZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGluc3RhbmNlLFxuICAgICAgICBtZXRhZGF0YTogeyBzYW5kYm94TmFtZSB9LFxuICAgICAgfTtcbiAgICB9LFxuXG4gICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy91c2VBd2FpdDogLlxuICAgIGFzeW5jIGNvbm5lY3Qob3B0cykge1xuICAgICAgcmV0dXJuIG5ldyBEb2NrZXJTYW5kYm94SW5zdGFuY2Uob3B0cy5tZXRhZGF0YS5zYW5kYm94TmFtZSk7XG4gICAgfSxcbiAgfTtcbn1cbiIsICJpbXBvcnQgeyB1bGlkIH0gZnJvbSBcInVsaWRcIjtcbmltcG9ydCB0eXBlIHsgRXhlY1Jlc3VsdCwgU2FuZGJveEJpbmRpbmcsIFNhbmRib3hJbnN0YW5jZSB9IGZyb20gXCIuLi9hZGFwdGVyXCI7XG5cbmV4cG9ydCB0eXBlIExvY2FsQmluZGluZ0NvbmZpZyA9IHtcbiAgY3dkPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgTG9jYWxCaW5kaW5nTWV0YWRhdGEgPSB7XG4gIGJhc2VQYXRoOiBzdHJpbmc7XG4gIHBpZDogbnVtYmVyO1xufTtcblxuY2xhc3MgTG9jYWxTYW5kYm94SW5zdGFuY2UgaW1wbGVtZW50cyBTYW5kYm94SW5zdGFuY2Uge1xuICByZWFkb25seSBjd2Q6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBiYXNlUGF0aDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IHByb2Nlc3NlcyA9IG5ldyBNYXA8XG4gICAgc3RyaW5nLFxuICAgIGltcG9ydChcIm5vZGU6Y2hpbGRfcHJvY2Vzc1wiKS5DaGlsZFByb2Nlc3NcbiAgPigpO1xuXG4gIGNvbnN0cnVjdG9yKGJhc2VQYXRoOiBzdHJpbmcpIHtcbiAgICB0aGlzLmJhc2VQYXRoID0gYmFzZVBhdGg7XG4gICAgdGhpcy5jd2QgPSBiYXNlUGF0aDtcbiAgfVxuXG4gIGFzeW5jIGV4ZWMob3B0czoge1xuICAgIGNvbW1hbmQ6IHN0cmluZztcbiAgICBhcmdzPzogc3RyaW5nW107XG4gICAgY3dkPzogc3RyaW5nO1xuICAgIGVudj86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgc3Vkbz86IGJvb2xlYW47XG4gICAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG4gIH0pOiBQcm9taXNlPEV4ZWNSZXN1bHQ+IHtcbiAgICBjb25zdCB7IHNwYXduIH0gPSBhd2FpdCBpbXBvcnQoXCJub2RlOmNoaWxkX3Byb2Nlc3NcIik7XG4gICAgY29uc3QgcGF0aCA9IGF3YWl0IGltcG9ydChcIm5vZGU6cGF0aFwiKTtcbiAgICBjb25zdCBjb21tYW5kSWQgPSBgY29tbWFuZF8ke3VsaWQoKX1gO1xuXG4gICAgY29uc3QgZmluYWxDbWQgPSBvcHRzLnN1ZG8gPyBcInN1ZG9cIiA6IG9wdHMuY29tbWFuZDtcbiAgICBjb25zdCBmaW5hbEFyZ3MgPSBvcHRzLnN1ZG9cbiAgICAgID8gW29wdHMuY29tbWFuZCwgLi4uKG9wdHMuYXJncyA/PyBbXSldXG4gICAgICA6IChvcHRzLmFyZ3MgPz8gW10pO1xuXG4gICAgY29uc3QgY2hpbGQgPSBzcGF3bihmaW5hbENtZCwgZmluYWxBcmdzLCB7XG4gICAgICBjd2Q6IG9wdHMuY3dkID8gcGF0aC5yZXNvbHZlKHRoaXMuYmFzZVBhdGgsIG9wdHMuY3dkKSA6IHRoaXMuYmFzZVBhdGgsXG4gICAgICBlbnY6IG9wdHMuZW52ID8geyAuLi5wcm9jZXNzLmVudiwgLi4ub3B0cy5lbnYgfSA6IHVuZGVmaW5lZCxcbiAgICAgIHNpZ25hbDogb3B0cy5zaWduYWwsXG4gICAgfSk7XG5cbiAgICB0aGlzLnByb2Nlc3Nlcy5zZXQoY29tbWFuZElkLCBjaGlsZCk7XG5cbiAgICBsZXQgc3Rkb3V0ID0gXCJcIjtcbiAgICBsZXQgc3RkZXJyID0gXCJcIjtcbiAgICBjb25zdCBsb2dRdWV1ZTogeyBzdHJlYW06IFwic3Rkb3V0XCIgfCBcInN0ZGVyclwiOyBkYXRhOiBzdHJpbmcgfVtdID0gW107XG4gICAgbGV0IGxvZ1Jlc29sdmU6ICgoKSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xuICAgIGxldCBjbG9zZWQgPSBmYWxzZTtcblxuICAgIGNoaWxkLnN0ZG91dC5vbihcImRhdGFcIiwgKGRhdGE6IHN0cmluZyB8IEJ1ZmZlcikgPT4ge1xuICAgICAgY29uc3Qgc3RyID0gU3RyaW5nKGRhdGEpO1xuICAgICAgc3Rkb3V0ICs9IHN0cjtcbiAgICAgIGxvZ1F1ZXVlLnB1c2goeyBzdHJlYW06IFwic3Rkb3V0XCIsIGRhdGE6IHN0ciB9KTtcbiAgICAgIGxvZ1Jlc29sdmU/LigpO1xuICAgIH0pO1xuXG4gICAgY2hpbGQuc3RkZXJyLm9uKFwiZGF0YVwiLCAoZGF0YTogc3RyaW5nIHwgQnVmZmVyKSA9PiB7XG4gICAgICBjb25zdCBzdHIgPSBTdHJpbmcoZGF0YSk7XG4gICAgICBzdGRlcnIgKz0gc3RyO1xuICAgICAgbG9nUXVldWUucHVzaCh7IHN0cmVhbTogXCJzdGRlcnJcIiwgZGF0YTogc3RyIH0pO1xuICAgICAgbG9nUmVzb2x2ZT8uKCk7XG4gICAgfSk7XG5cbiAgICBjb25zdCByZXN1bHQgPSBuZXcgUHJvbWlzZTx7XG4gICAgICBzdGRvdXQ6IHN0cmluZztcbiAgICAgIHN0ZGVycjogc3RyaW5nO1xuICAgICAgZXhpdENvZGU6IG51bWJlcjtcbiAgICB9PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjaGlsZC5vbihcImVycm9yXCIsIChlcnIpID0+IHtcbiAgICAgICAgdGhpcy5wcm9jZXNzZXMuZGVsZXRlKGNvbW1hbmRJZCk7XG4gICAgICAgIGNsb3NlZCA9IHRydWU7XG4gICAgICAgIGxvZ1Jlc29sdmU/LigpO1xuICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgIH0pO1xuXG4gICAgICBjaGlsZC5vbihcImNsb3NlXCIsIChjb2RlOiBudW1iZXIgfCBudWxsKSA9PiB7XG4gICAgICAgIHRoaXMucHJvY2Vzc2VzLmRlbGV0ZShjb21tYW5kSWQpO1xuICAgICAgICBjbG9zZWQgPSB0cnVlO1xuICAgICAgICBsb2dSZXNvbHZlPy4oKTtcbiAgICAgICAgcmVzb2x2ZSh7IHN0ZG91dCwgc3RkZXJyLCBleGl0Q29kZTogY29kZSA/PyAwIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBhc3luYyBmdW5jdGlvbiogbG9ncygpOiBBc3luY0l0ZXJhYmxlPHtcbiAgICAgIHN0cmVhbTogXCJzdGRvdXRcIiB8IFwic3RkZXJyXCI7XG4gICAgICBkYXRhOiBzdHJpbmc7XG4gICAgfT4ge1xuICAgICAgd2hpbGUgKCFjbG9zZWQgfHwgbG9nUXVldWUubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCBlbnRyeSA9IGxvZ1F1ZXVlLnNoaWZ0KCk7XG4gICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgIHlpZWxkIGVudHJ5O1xuICAgICAgICB9IGVsc2UgaWYgKCFjbG9zZWQpIHtcbiAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPigocikgPT4ge1xuICAgICAgICAgICAgbG9nUmVzb2x2ZSA9IHI7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgbG9nUmVzb2x2ZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4geyBjb21tYW5kSWQsIGxvZ3MsIHJlc3VsdCB9O1xuICB9XG5cbiAgYXN5bmMgcmVhZEZpbGUob3B0czoge1xuICAgIHBhdGg6IHN0cmluZztcbiAgICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbiAgfSk6IFByb21pc2U8QnVmZmVyIHwgbnVsbD4ge1xuICAgIGNvbnN0IGZzID0gYXdhaXQgaW1wb3J0KFwibm9kZTpmcy9wcm9taXNlc1wiKTtcbiAgICBjb25zdCBwYXRoID0gYXdhaXQgaW1wb3J0KFwibm9kZTpwYXRoXCIpO1xuICAgIGNvbnN0IGZ1bGxQYXRoID0gcGF0aC5yZXNvbHZlKHRoaXMuYmFzZVBhdGgsIG9wdHMucGF0aCk7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBmcy5yZWFkRmlsZShmdWxsUGF0aCk7XG4gICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgaWYgKFxuICAgICAgICBlIGluc3RhbmNlb2YgRXJyb3IgJiZcbiAgICAgICAgXCJjb2RlXCIgaW4gZSAmJlxuICAgICAgICAoZSBhcyBOb2RlSlMuRXJybm9FeGNlcHRpb24pLmNvZGUgPT09IFwiRU5PRU5UXCJcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgd3JpdGVGaWxlcyhvcHRzOiB7XG4gICAgZmlsZXM6IHsgcGF0aDogc3RyaW5nOyBjb250ZW50OiBzdHJpbmcgfCBCdWZmZXIgfVtdO1xuICAgIGRlc3RQYXRoOiBzdHJpbmc7XG4gICAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG4gIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBmcyA9IGF3YWl0IGltcG9ydChcIm5vZGU6ZnMvcHJvbWlzZXNcIik7XG4gICAgY29uc3QgcGF0aE1vZCA9IGF3YWl0IGltcG9ydChcIm5vZGU6cGF0aFwiKTtcbiAgICBmb3IgKGNvbnN0IGZpbGUgb2Ygb3B0cy5maWxlcykge1xuICAgICAgY29uc3QgZnVsbFBhdGggPSBwYXRoTW9kLnJlc29sdmUodGhpcy5iYXNlUGF0aCwgb3B0cy5kZXN0UGF0aCwgZmlsZS5wYXRoKTtcbiAgICAgIGF3YWl0IGZzLm1rZGlyKHBhdGhNb2QuZGlybmFtZShmdWxsUGF0aCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgYXdhaXQgZnMud3JpdGVGaWxlKGZ1bGxQYXRoLCBmaWxlLmNvbnRlbnQpO1xuICAgICAgaWYgKGZpbGUucGF0aC5lbmRzV2l0aChcIi5zaFwiKSkge1xuICAgICAgICBhd2FpdCBmcy5jaG1vZChmdWxsUGF0aCwgMG83NTUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvdXNlQXdhaXQ6IC5cbiAgYXN5bmMgZ2V0RG9tYWluKG9wdHM6IHtcbiAgICBwb3J0OiBudW1iZXI7XG4gICAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG4gIH0pOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiBgaHR0cDovL2xvY2FsaG9zdDoke29wdHMucG9ydH1gO1xuICB9XG5cbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy91c2VBd2FpdDogLlxuICBhc3luYyBraWxsKG9wdHM6IHsgY29tbWFuZElkOiBzdHJpbmc7IHNpZ25hbD86IEFib3J0U2lnbmFsIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBjaGlsZCA9IHRoaXMucHJvY2Vzc2VzLmdldChvcHRzLmNvbW1hbmRJZCk7XG4gICAgaWYgKGNoaWxkKSB7XG4gICAgICBjaGlsZC5raWxsKFwiU0lHVEVSTVwiKTtcbiAgICAgIHRoaXMucHJvY2Vzc2VzLmRlbGV0ZShvcHRzLmNvbW1hbmRJZCk7XG4gICAgfVxuICB9XG5cbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy91c2VBd2FpdDogLlxuICBhc3luYyBnZXRTdGF0dXMoKTogUHJvbWlzZTxcInJ1bm5pbmdcIj4ge1xuICAgIHJldHVybiBcInJ1bm5pbmdcIjtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIG5vLW9wOiBsb2NhbCBzYW5kYm94IGlzIGFsd2F5cyBzdGFydGVkXG4gIH1cblxuICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL3VzZUF3YWl0OiAuXG4gIGFzeW5jIHN0b3AoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwic3RvcCBpcyBub3Qgc3VwcG9ydGVkIGZvciBsb2NhbCBzYW5kYm94ZXNcIik7XG4gIH1cblxuICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL3VzZUF3YWl0OiAuXG4gIGFzeW5jIHNuYXBzaG90KCk6IFByb21pc2U8eyBzbmFwc2hvdElkOiBzdHJpbmcgfT4ge1xuICAgIHRocm93IG5ldyBFcnJvcihcInNuYXBzaG90IGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGxvY2FsIHNhbmRib3hlc1wiKTtcbiAgfVxuXG4gIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvdXNlQXdhaXQ6IC5cbiAgYXN5bmMgdXBkYXRlTmV0d29ya1BvbGljeSgpOiBQcm9taXNlPG5ldmVyPiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwidXBkYXRlTmV0d29ya1BvbGljeSBpcyBub3Qgc3VwcG9ydGVkIGZvciBsb2NhbCBzYW5kYm94ZXNcIik7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvY2FsU2FuZGJveChcbiAgZGVmYXVsdHM/OiBQYXJ0aWFsPGltcG9ydChcIi4uL2FkYXB0ZXJcIikuU2FuZGJveFNldHVwRmllbGRzPiAmIHtcbiAgICBydW4/OiAoc2FuZGJveDogU2FuZGJveEluc3RhbmNlKSA9PiBQcm9taXNlPHZvaWQ+O1xuICAgIGNvbmZpZz86IExvY2FsQmluZGluZ0NvbmZpZztcbiAgfVxuKTogU2FuZGJveEJpbmRpbmc8XCJsb2NhbFwiLCBMb2NhbEJpbmRpbmdDb25maWcsIExvY2FsQmluZGluZ01ldGFkYXRhPiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogXCJsb2NhbFwiLFxuICAgIGRlZmF1bHRzLFxuICAgIGFzeW5jIGNyZWF0ZShvcHRzKSB7XG4gICAgICBjb25zdCBiYXNlUGF0aCA9IG9wdHMuc2V0dXAuY29uZmlnPy5jd2QgPz8gcHJvY2Vzcy5jd2QoKTtcbiAgICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IExvY2FsU2FuZGJveEluc3RhbmNlKGJhc2VQYXRoKTtcblxuICAgICAgaWYgKG9wdHMuc2V0dXA/LnJ1bikge1xuICAgICAgICBhd2FpdCBvcHRzLnNldHVwLnJ1bihpbnN0YW5jZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGluc3RhbmNlLFxuICAgICAgICBtZXRhZGF0YTogeyBiYXNlUGF0aCwgcGlkOiBwcm9jZXNzLnBpZCB9LFxuICAgICAgfTtcbiAgICB9LFxuXG4gICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy91c2VBd2FpdDogLlxuICAgIGFzeW5jIGNvbm5lY3Qob3B0cykge1xuICAgICAgY29uc3QgYmFzZVBhdGggPSBvcHRzLm1ldGFkYXRhLmJhc2VQYXRoO1xuICAgICAgcmV0dXJuIG5ldyBMb2NhbFNhbmRib3hJbnN0YW5jZShiYXNlUGF0aCk7XG4gICAgfSxcbiAgfTtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEV4ZWNSZXN1bHQgfSBmcm9tIFwiLi9hZGFwdGVyXCI7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX1dBSVRfVU5USUwgPSAyMDAwO1xuXG50eXBlIFNhbmRib3hIYW5kbGUgPSB7XG4gIGV4ZWM6IChvcHRzOiB7IGNvbW1hbmQ6IHN0cmluZzsgYXJncz86IHN0cmluZ1tdIH0pID0+IFByb21pc2U8RXhlY1Jlc3VsdD47XG4gIHdyaXRlRmlsZXM6IChvcHRzOiB7XG4gICAgZmlsZXM6IHsgcGF0aDogc3RyaW5nOyBjb250ZW50OiBzdHJpbmcgfVtdO1xuICAgIGRlc3RQYXRoOiBzdHJpbmc7XG4gIH0pID0+IFByb21pc2U8dm9pZD47XG59O1xuXG50eXBlIEJhc2hSZXN1bHQgPSB7XG4gIGNvbW1hbmRJZDogc3RyaW5nO1xuICBzdGRvdXQ6IHN0cmluZztcbiAgc3RkZXJyOiBzdHJpbmc7XG4gIGV4aXRDb2RlOiBudW1iZXI7XG4gIHN0YXR1czogXCJydW5uaW5nXCIgfCBcImNvbXBsZXRlZFwiIHwgXCJmYWlsZWRcIjtcbiAgb3V0cHV0RGlyOiBzdHJpbmc7XG59O1xuXG50eXBlIFJ1bk9wdGlvbnMgPSB7XG4gIGNvbW1hbmQ6IHN0cmluZztcbiAgd2FpdFVudGlsPzogbnVtYmVyO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVByb2Nlc3NNYW5hZ2VyID0gKG9wdHM6IHsgc2FuZGJveDogU2FuZGJveEhhbmRsZSB9KSA9PiB7XG4gIGNvbnN0IHsgc2FuZGJveCB9ID0gb3B0cztcblxuICBjb25zdCBydW4gPSBhc3luYyAocnVuT3B0czogUnVuT3B0aW9ucyk6IFByb21pc2U8QmFzaFJlc3VsdD4gPT4ge1xuICAgIGNvbnN0IHsgY29tbWFuZCwgd2FpdFVudGlsID0gREVGQVVMVF9XQUlUX1VOVElMIH0gPSBydW5PcHRzO1xuXG4gICAgY29uc3QgZXhlY1Jlc3VsdCA9IGF3YWl0IHNhbmRib3guZXhlYyh7XG4gICAgICBjb21tYW5kOiBcInNoXCIsXG4gICAgICBhcmdzOiBbXCItY1wiLCBjb21tYW5kXSxcbiAgICB9KTtcblxuICAgIGlmICh3YWl0VW50aWwgPT09IDApIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbW1hbmRJZDogZXhlY1Jlc3VsdC5jb21tYW5kSWQsXG4gICAgICAgIHN0ZG91dDogXCJcIixcbiAgICAgICAgc3RkZXJyOiBcIlwiLFxuICAgICAgICBleGl0Q29kZTogLTEsXG4gICAgICAgIHN0YXR1czogXCJydW5uaW5nXCIsXG4gICAgICAgIG91dHB1dERpcjogXCJcIixcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3QgY29tcGxldGVkID0gYXdhaXQgcmFjZVRpbWVvdXQoZXhlY1Jlc3VsdCwgd2FpdFVudGlsKTtcblxuICAgIGlmICghY29tcGxldGVkKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb21tYW5kSWQ6IGV4ZWNSZXN1bHQuY29tbWFuZElkLFxuICAgICAgICBzdGRvdXQ6IFwiXCIsXG4gICAgICAgIHN0ZGVycjogXCJcIixcbiAgICAgICAgZXhpdENvZGU6IC0xLFxuICAgICAgICBzdGF0dXM6IFwicnVubmluZ1wiLFxuICAgICAgICBvdXRwdXREaXI6IFwiXCIsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IG91dHB1dERpciA9IGAuYWdlbnQvYmFzaC8ke0RhdGUubm93KCl9LSR7ZXhlY1Jlc3VsdC5jb21tYW5kSWR9YDtcbiAgICB3cml0ZU91dHB1dERpcihzYW5kYm94LCBvdXRwdXREaXIsIGNvbXBsZXRlZCwgY29tbWFuZCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgY29tbWFuZElkOiBleGVjUmVzdWx0LmNvbW1hbmRJZCxcbiAgICAgIHN0ZG91dDogY29tcGxldGVkLnN0ZG91dCxcbiAgICAgIHN0ZGVycjogY29tcGxldGVkLnN0ZGVycixcbiAgICAgIGV4aXRDb2RlOiBjb21wbGV0ZWQuZXhpdENvZGUsXG4gICAgICBzdGF0dXM6IGNvbXBsZXRlZC5leGl0Q29kZSA9PT0gMCA/IFwiY29tcGxldGVkXCIgOiBcImZhaWxlZFwiLFxuICAgICAgb3V0cHV0RGlyLFxuICAgIH07XG4gIH07XG5cbiAgcmV0dXJuIHsgcnVuIH07XG59O1xuXG5hc3luYyBmdW5jdGlvbiByYWNlVGltZW91dChcbiAgZXhlY1Jlc3VsdDogRXhlY1Jlc3VsdCxcbiAgdGltZW91dE1zOiBudW1iZXJcbik6IFByb21pc2U8eyBzdGRvdXQ6IHN0cmluZzsgc3RkZXJyOiBzdHJpbmc7IGV4aXRDb2RlOiBudW1iZXIgfSB8IG51bGw+IHtcbiAgY29uc3QgVElNRURfT1VUID0gU3ltYm9sKFwidGltZW91dFwiKTtcbiAgY29uc3QgdGltZXIgPSBuZXcgUHJvbWlzZTx0eXBlb2YgVElNRURfT1VUPigocmVzb2x2ZSkgPT5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHJlc29sdmUoVElNRURfT1VUKSwgdGltZW91dE1zKVxuICApO1xuICBjb25zdCB3aW5uZXIgPSBhd2FpdCBQcm9taXNlLnJhY2UoW2V4ZWNSZXN1bHQucmVzdWx0LCB0aW1lcl0pO1xuICByZXR1cm4gd2lubmVyID09PSBUSU1FRF9PVVQgPyBudWxsIDogd2lubmVyO1xufVxuXG5mdW5jdGlvbiB3cml0ZU91dHB1dERpcihcbiAgc2FuZGJveDogU2FuZGJveEhhbmRsZSxcbiAgZGlyOiBzdHJpbmcsXG4gIHJlc3VsdDogeyBzdGRvdXQ6IHN0cmluZzsgc3RkZXJyOiBzdHJpbmc7IGV4aXRDb2RlOiBudW1iZXIgfSxcbiAgY29tbWFuZDogc3RyaW5nXG4pOiB2b2lkIHtcbiAgY29uc3QgZmlsZXM6IHsgcGF0aDogc3RyaW5nOyBjb250ZW50OiBzdHJpbmcgfVtdID0gW1xuICAgIHsgcGF0aDogXCJzdGRvdXQudHh0XCIsIGNvbnRlbnQ6IHJlc3VsdC5zdGRvdXQgfSxcbiAgICB7XG4gICAgICBwYXRoOiBcIm1ldGFkYXRhLmpzb25cIixcbiAgICAgIGNvbnRlbnQ6IEpTT04uc3RyaW5naWZ5KHsgZXhpdENvZGU6IHJlc3VsdC5leGl0Q29kZSwgY29tbWFuZCB9LCBudWxsLCAyKSxcbiAgICB9LFxuICBdO1xuICBpZiAocmVzdWx0LnN0ZGVycikge1xuICAgIGZpbGVzLnB1c2goeyBwYXRoOiBcInN0ZGVyci50eHRcIiwgY29udGVudDogcmVzdWx0LnN0ZGVyciB9KTtcbiAgfVxuXG4gIHNhbmRib3gud3JpdGVGaWxlcyh7IGZpbGVzLCBkZXN0UGF0aDogZGlyIH0pLmNhdGNoKCgpID0+IHtcbiAgICAvLyBpbnRlbnRpb25hbCBuby1vcCBcdTIwMTQgb3V0cHV0IGZpbGUgd3JpdGUgaXMgYmVzdC1lZmZvcnRcbiAgfSk7XG59XG4iLCAiaW1wb3J0IHsgcmVzb2x2ZUZyYW1ld29ya0FnZW50IH0gZnJvbSBcIi4vcmVzb2x2ZVwiO1xuXG4vKipcbiAqIFJlcXVlc3QtdGltZSB1dGlsaXRpZXMgZm9yIHRoZSBmcmFtZXdvcmsgcm91dGVyLlxuICpcbiAqIFVzZWQgaW5zaWRlIGdlbmVyYXRlZCByb3V0ZSBoYW5kbGVycyB0byByZXNvbHZlIGFuIGFnZW50IGJ5IG5hbWVcbiAqIGZyb20gYSByZWdpc3RyeSBwcm9kdWNlZCBhdCBidWlsZCB0aW1lLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgcnVudGltZSB9IGZyb20gXCJleHBlcmltZW50YWwtYWdlbnQvZnJhbWV3b3JrLXJ1bnRpbWVcIjtcbiAqXG4gKiBjb25zdCBhZ2VudCA9IGF3YWl0IHJ1bnRpbWUucmVzb2x2ZUFnZW50KHsgbmFtZSwgYWdlbnRzIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBjb25zdCBydW50aW1lID0ge1xuICAvKipcbiAgICogTG9vayB1cCBhbiBhZ2VudCBieSBuYW1lIGZyb20gYSBnZW5lcmF0ZWQgcmVnaXN0cnksIG1lcmdpbmcgYW55XG4gICAqIGZpbGVzeXN0ZW0tc2Nhbm5lZCBjb25maWcgKHN5c3RlbSBwcm9tcHRzLCBza2lsbHMpIG9uIHRvcCBvZiB0aGVcbiAgICogYWdlbnQncyBvd24gb3B0aW9ucy4gUmVzdWx0cyBhcmUgY2FjaGVkIGZvciB0aGUgbGlmZXRpbWUgb2YgdGhlXG4gICAqIHByb2Nlc3MuXG4gICAqXG4gICAqIFJldHVybnMgYG51bGxgIHdoZW4gdGhlIG5hbWUgZG9lc24ndCBtYXRjaCBhbnkgcmVnaXN0cnkgZW50cnkuXG4gICAqL1xuICByZXNvbHZlQWdlbnQ6IHJlc29sdmVGcmFtZXdvcmtBZ2VudCxcbn07XG4iLCAiaW1wb3J0IHsgV09SS0ZMT1dfREVTRVJJQUxJWkUsIFdPUktGTE9XX1NFUklBTElaRSB9IGZyb20gXCJAd29ya2Zsb3cvc2VyZGVcIjtcbmltcG9ydCB0eXBlIHsgR2F0ZXdheU1vZGVsSWQsIEluZmVyVUlUb29scywgVG9vbFNldCwgVUlNZXNzYWdlIH0gZnJvbSBcImFpXCI7XG5pbXBvcnQgdHlwZSB7IHogfSBmcm9tIFwiem9kXCI7XG5pbXBvcnQgdHlwZSB7IFNhbmRib3hCaW5kaW5nLCBTYW5kYm94SW5zdGFuY2UgfSBmcm9tIFwiLi4vc2FuZGJveC9hZGFwdGVyXCI7XG5pbXBvcnQgdHlwZSB7IFNhbmRib3hDb250ZXh0IH0gZnJvbSBcIi4uL3NhbmRib3gvaGFuZGxlXCI7XG5pbXBvcnQgeyBzYW5kYm94SGFuZGxlIH0gZnJvbSBcIi4uL3NhbmRib3gvaGFuZGxlXCI7XG5pbXBvcnQgeyB0eXBlIFNlc3Npb25Db250ZXh0LCBzZXNzaW9uSGFuZGxlIH0gZnJvbSBcIi4uL3Nlc3Npb24vaGFuZGxlXCI7XG5pbXBvcnQgdHlwZSB7IFNraWxsSW5wdXQgfSBmcm9tIFwiLi4vc2tpbGxzL3R5cGVzXCI7XG5pbXBvcnQgeyB0eXBlIFN0b3JhZ2UsIHR5cGUgU3RvcmFnZUlucHV0LCB0b1N0b3JhZ2UgfSBmcm9tIFwiLi4vc3RvcmFnZS9hZGFwdGVyXCI7XG5pbXBvcnQgeyBrdlN0b3JhZ2VGYWxsYmFjayB9IGZyb20gXCIuLi9zdG9yYWdlL2JpbmRpbmdzL2t2XCI7XG5pbXBvcnQgeyBsb2NhbFN0b3JhZ2UgfSBmcm9tIFwiLi4vc3RvcmFnZS9lbnRyeVwiO1xuaW1wb3J0IHsgc2hvdWxkRmFsbGJhY2tUb0tWMiB9IGZyb20gXCIuLi9zdG9yYWdlL3Nob3VsZC1mYWxsYmFjay1rdjJcIjtcbmltcG9ydCB0eXBlIHsgR2VuZXJhdGlvbk9wdGlvbnMgfSBmcm9tIFwiLi4vc3RvcmFnZS90eXBlc1wiO1xuaW1wb3J0IHsgdHlwZSBCdWlsdEluVG9vbE5hbWUsIGJ1aWx0SW5Ub29scyB9IGZyb20gXCIuLi90b29sc1wiO1xuaW1wb3J0IHR5cGUgeyBMb2dnaW5nQ29uZmlnIH0gZnJvbSBcIi4uL3V0aWxzL2xvZ2dlclwiO1xuaW1wb3J0IHsgY3JlYXRlTG9nZ2VyIH0gZnJvbSBcIi4uL3V0aWxzL2xvZ2dlclwiO1xuaW1wb3J0IHtcbiAgdHlwZSBBZ2VudERhdGFUeXBlcyxcbiAgdHlwZSBBZ2VudEhvb2tzLFxuICBnZXRBZ2VudCxcbiAgdHlwZSBOZWVkc0FwcHJvdmFsTWFwLFxuICByZWdpc3RlckFnZW50LFxufSBmcm9tIFwiLi9yZWdpc3RyeVwiO1xuXG4vLyBcdTI1MDBcdTI1MDBcdTI1MDAgUmVzb2x2YWJsZSBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuZXhwb3J0IHR5cGUgUmVzb2x2YWJsZUFyZ3M8XG4gIFRDb250ZXh0ID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIFRvb2xzIGV4dGVuZHMgVG9vbFNldCA9IFRvb2xTZXQsXG4gIFRTdGF0ZSA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuPiA9IHtcbiAgY29udGV4dDogVENvbnRleHQ7XG4gIHNlc3Npb25JZDogc3RyaW5nO1xuICBzYW5kYm94OiBTYW5kYm94SW5zdGFuY2U7XG4gIG1lc3NhZ2VzOiBVSU1lc3NhZ2U8dW5rbm93biwgQWdlbnREYXRhVHlwZXMsIEluZmVyVUlUb29sczxUb29scz4+W107XG4gIHN0YXRlOiBSZWFkb25seTxUU3RhdGU+O1xufTtcblxuZXhwb3J0IHR5cGUgUmVzb2x2YWJsZTxcbiAgVCxcbiAgVENvbnRleHQgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgVG9vbHMgZXh0ZW5kcyBUb29sU2V0ID0gVG9vbFNldCxcbiAgVFN0YXRlID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4+ID0gVCB8ICgoYXJnczogUmVzb2x2YWJsZUFyZ3M8VENvbnRleHQsIFRvb2xzLCBUU3RhdGU+KSA9PiBUIHwgUHJvbWlzZTxUPik7XG5cbi8vIFx1MjUwMFx1MjUwMFx1MjUwMCBTZXNzaW9uIERlZmF1bHRzIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG5leHBvcnQgdHlwZSBTZXNzaW9uRGVmYXVsdHM8XG4gIFRvb2xzIGV4dGVuZHMgVG9vbFNldCA9IFRvb2xTZXQsXG4gIFRDb250ZXh0IGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgVFN0YXRlIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbj4gPSB7XG4gIG1vZGVsPzogUmVzb2x2YWJsZTxHYXRld2F5TW9kZWxJZCB8IHVuZGVmaW5lZCwgVENvbnRleHQsIFRvb2xzLCBUU3RhdGU+O1xuICBzeXN0ZW0/OiBSZXNvbHZhYmxlPHN0cmluZyB8IHN0cmluZ1tdIHwgdW5kZWZpbmVkLCBUQ29udGV4dCwgVG9vbHMsIFRTdGF0ZT47XG4gIGdlbmVyYXRpb24/OiBSZXNvbHZhYmxlPFxuICAgIEdlbmVyYXRpb25PcHRpb25zIHwgdW5kZWZpbmVkLFxuICAgIFRDb250ZXh0LFxuICAgIFRvb2xzLFxuICAgIFRTdGF0ZVxuICA+O1xuICBhY3RpdmVUb29scz86IFJlc29sdmFibGU8XG4gICAgcmVhZG9ubHkgKEV4dHJhY3Q8a2V5b2YgVG9vbHMsIHN0cmluZz4gfCBCdWlsdEluVG9vbE5hbWUpW10gfCB1bmRlZmluZWQsXG4gICAgVENvbnRleHQsXG4gICAgVG9vbHMsXG4gICAgVFN0YXRlXG4gID47XG4gIHNraWxscz86IFJlc29sdmFibGU8U2tpbGxJbnB1dFtdIHwgdW5kZWZpbmVkLCBUQ29udGV4dCwgVG9vbHMsIFRTdGF0ZT47XG59O1xuXG4vLyBcdTI1MDBcdTI1MDBcdTI1MDAgQWdlbnQgT3B0aW9ucyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuZXhwb3J0IHR5cGUgQWdlbnRPcHRpb25zPFxuICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRXhwbGljaXRBbnk6IGRlZmF1bHQgYWxsb3dzIHR5cGUtZXJhc2VkIHVzYWdlXG4gIFRvb2xzIGV4dGVuZHMgVG9vbFNldCA9IGFueSxcbiAgVFNhbmRib3hCaW5kaW5ncyBleHRlbmRzIFNhbmRib3hCaW5kaW5nIHwgU2FuZGJveEJpbmRpbmdbXSA9IFNhbmRib3hCaW5kaW5nLFxuICBUQ29udGV4dCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0gUmVjb3JkPHN0cmluZywgbmV2ZXI+LFxuICBUU3RhdGUgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBUTWVzc2FnZU1ldGFkYXRhID0gdW5rbm93bixcbj4gPSBTZXNzaW9uRGVmYXVsdHM8VG9vbHMsIFRDb250ZXh0LCBUU3RhdGU+ICYge1xuICBzdG9yYWdlPzogU3RvcmFnZUlucHV0O1xuICBzYW5kYm94PzogVFNhbmRib3hCaW5kaW5ncztcbiAgdG9vbHM/OiBUb29scztcbiAgaG9va3M/OiBBZ2VudEhvb2tzO1xuICBuZWVkc0FwcHJvdmFsPzogTmVlZHNBcHByb3ZhbE1hcDxUb29scz47XG4gIGNvbnRleHRTY2hlbWE/OiB6LlpvZFR5cGU8VENvbnRleHQ+O1xuICBzdGF0ZVNjaGVtYT86IHouWm9kVHlwZTxUU3RhdGU+O1xuICBtZXNzYWdlTWV0YWRhdGFTY2hlbWE/OiB6LlpvZFR5cGU8VE1lc3NhZ2VNZXRhZGF0YT47XG4gIGxvZ2dpbmc/OiBPbWl0PExvZ2dpbmdDb25maWcsIFwibmFtZVwiPjtcbn07XG5cbi8vIFx1MjUwMFx1MjUwMFx1MjUwMCBJbnRlcm5hbCBjb250ZXh0IGNhY2hlcyAoaGlkZGVuIGZyb20gcHVibGljIEFQSSkgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmNvbnN0IHNlc3Npb25Db250ZXh0c01hcCA9IG5ldyBXZWFrTWFwPG9iamVjdCwgTWFwPHN0cmluZywgU2Vzc2lvbkNvbnRleHQ+PigpO1xuY29uc3Qgc2FuZGJveENvbnRleHRzTWFwID0gbmV3IFdlYWtNYXA8b2JqZWN0LCBNYXA8c3RyaW5nLCBTYW5kYm94Q29udGV4dD4+KCk7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZXNzaW9uQ29udGV4dHMoXG4gIGFnZW50OiBBbnlBZ2VudFxuKTogTWFwPHN0cmluZywgU2Vzc2lvbkNvbnRleHQ+IHtcbiAgbGV0IG1hcCA9IHNlc3Npb25Db250ZXh0c01hcC5nZXQoYWdlbnQpO1xuICBpZiAoIW1hcCkge1xuICAgIG1hcCA9IG5ldyBNYXAoKTtcbiAgICBzZXNzaW9uQ29udGV4dHNNYXAuc2V0KGFnZW50LCBtYXApO1xuICB9XG4gIHJldHVybiBtYXA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTYW5kYm94Q29udGV4dHMoXG4gIGFnZW50OiBBbnlBZ2VudFxuKTogTWFwPHN0cmluZywgU2FuZGJveENvbnRleHQ+IHtcbiAgbGV0IG1hcCA9IHNhbmRib3hDb250ZXh0c01hcC5nZXQoYWdlbnQpO1xuICBpZiAoIW1hcCkge1xuICAgIG1hcCA9IG5ldyBNYXAoKTtcbiAgICBzYW5kYm94Q29udGV4dHNNYXAuc2V0KGFnZW50LCBtYXApO1xuICB9XG4gIHJldHVybiBtYXA7XG59XG5cbi8vIFx1MjUwMFx1MjUwMFx1MjUwMCBBZ2VudCBDbGFzcyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0V4cGxpY2l0QW55OiBpbnRlbnRpb25hbGx5IGVyYXNlZCBcdTIwMTMgdXNpbmcgYGFueWAgYXZvaWRzIGNvbnRyYXZhcmlhbmNlIGlzc3VlcyB3aXRoIHRvb2wtdHlwZWQgbWV0aG9kcyBsaWtlIGBzZW5kYFxuZXhwb3J0IHR5cGUgQW55QWdlbnQgPSBBZ2VudDxhbnksIGFueSwgYW55LCBhbnksIGFueT47XG5cbmV4cG9ydCB0eXBlIEluZmVyU2Vzc2lvbjxBZ2VudCBleHRlbmRzIEFueUFnZW50ID0gQW55QWdlbnQ+ID0gUmV0dXJuVHlwZTxcbiAgQWdlbnRbXCJzZXNzaW9uXCJdXG4+O1xuZXhwb3J0IHR5cGUgU2Vzc2lvblNlbmRBcmdzPFxuICBBZ2VudCBleHRlbmRzIEFueUFnZW50LFxuICBTZXNzaW9uIGV4dGVuZHMgSW5mZXJTZXNzaW9uPEFnZW50PiA9IEluZmVyU2Vzc2lvbjxBZ2VudD4sXG4+ID0gUGFyYW1ldGVyczxTZXNzaW9uW1wic2VuZFwiXT47XG5cbmV4cG9ydCBjbGFzcyBBZ2VudDxcbiAgVE1lc3NhZ2VNZXRhZGF0YSA9IHVua25vd24sXG4gIFRvb2xzIGV4dGVuZHMgVG9vbFNldCA9IFRvb2xTZXQsXG4gIFRTYW5kYm94QmluZGluZ3MgZXh0ZW5kcyBTYW5kYm94QmluZGluZyB8IFNhbmRib3hCaW5kaW5nW10gPSBTYW5kYm94QmluZGluZyxcbiAgVENvbnRleHQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IFJlY29yZDxzdHJpbmcsIG5ldmVyPixcbiAgVFN0YXRlIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbj4ge1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIG9wdGlvbnM6IEFnZW50T3B0aW9uczxcbiAgICBUb29scyxcbiAgICBUU2FuZGJveEJpbmRpbmdzLFxuICAgIFRDb250ZXh0LFxuICAgIFRTdGF0ZSxcbiAgICBUTWVzc2FnZU1ldGFkYXRhXG4gID47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiBBZ2VudE9wdGlvbnM8XG4gICAgICBUb29scyxcbiAgICAgIFRTYW5kYm94QmluZGluZ3MsXG4gICAgICBUQ29udGV4dCxcbiAgICAgIFRTdGF0ZSxcbiAgICAgIFRNZXNzYWdlTWV0YWRhdGFcbiAgICA+XG4gICkge1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucyA/PyB7fTtcbiAgICB0aGlzLnNlc3Npb24gPSAoc2Vzc2lvbkhhbmRsZTxcbiAgICAgIFRvb2xzLFxuICAgICAgVENvbnRleHQsXG4gICAgICBUU2FuZGJveEJpbmRpbmdzLFxuICAgICAgVE1lc3NhZ2VNZXRhZGF0YSxcbiAgICAgIFRTdGF0ZVxuICAgID4pLmJpbmQobnVsbCwgdGhpcyBhcyB1bmtub3duIGFzIEFueUFnZW50KTtcbiAgICB0aGlzLnNhbmRib3ggPSAoc2FuZGJveEhhbmRsZTxUU2FuZGJveEJpbmRpbmdzPikuYmluZChcbiAgICAgIG51bGwsXG4gICAgICB0aGlzIGFzIHVua25vd24gYXMgQW55QWdlbnRcbiAgICApO1xuICB9XG5cbiAgc3RhdGljIFtXT1JLRkxPV19TRVJJQUxJWkVdKGluc3RhbmNlOiBBbnlBZ2VudCkge1xuICAgIHJldHVybiB7IG5hbWU6IGluc3RhbmNlLm5hbWUgfTtcbiAgfVxuXG4gIHN0YXRpYyBbV09SS0ZMT1dfREVTRVJJQUxJWkVdKGRhdGE6IHsgbmFtZTogc3RyaW5nIH0pIHtcbiAgICByZXR1cm4gZ2V0QWdlbnQoZGF0YS5uYW1lLCB0cnVlKTtcbiAgfVxuXG4gIHByaXZhdGUgX3Jlc29sdmVkU3RvcmFnZTogU3RvcmFnZSB8IHVuZGVmaW5lZDtcblxuICBnZXQgc3RvcmFnZSgpOiBTdG9yYWdlIHtcbiAgICBpZiAodGhpcy5fcmVzb2x2ZWRTdG9yYWdlKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcmVzb2x2ZWRTdG9yYWdlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMuc3RvcmFnZSkge1xuICAgICAgdGhpcy5fcmVzb2x2ZWRTdG9yYWdlID0gdG9TdG9yYWdlKHRoaXMub3B0aW9ucy5zdG9yYWdlKTtcbiAgICAgIHJldHVybiB0aGlzLl9yZXNvbHZlZFN0b3JhZ2U7XG4gICAgfVxuXG4gICAgY29uc3QgbG9nID0gY3JlYXRlTG9nZ2VyKHtcbiAgICAgIGNvbmZpZzogeyAuLi50aGlzLm9wdGlvbnMubG9nZ2luZywgbmFtZTogdGhpcy5uYW1lIH0sXG4gICAgICBzdWJzeXN0ZW06IFwic3RvcmFnZVwiLFxuICAgIH0pO1xuXG4gICAgaWYgKHNob3VsZEZhbGxiYWNrVG9LVjIoKSkge1xuICAgICAgbG9nLmluZm8oXG4gICAgICAgIGBObyBzdG9yYWdlIGFkYXB0ZXIgY29uZmlndXJlZCBcdTIwMTQgdXNpbmcgS1YyIChuYW1lc3BhY2U6IFwiJHt0aGlzLm5hbWV9XCIpLmBcbiAgICAgICk7XG4gICAgICB0aGlzLl9yZXNvbHZlZFN0b3JhZ2UgPSB0b1N0b3JhZ2UoXG4gICAgICAgIGt2U3RvcmFnZUZhbGxiYWNrKHsgcHJlZml4OiB0aGlzLm5hbWUgfSlcbiAgICAgICk7XG4gICAgICByZXR1cm4gdGhpcy5fcmVzb2x2ZWRTdG9yYWdlO1xuICAgIH1cblxuICAgIGxvZy53YXJuKFxuICAgICAgXCJObyBzdG9yYWdlIGFkYXB0ZXIgY29uZmlndXJlZCBcdTIwMTQgdXNpbmcgbG9jYWxTdG9yYWdlKCkuIERhdGEgd2lsbCBub3QgcGVyc2lzdCBhY3Jvc3MgcmVzdGFydHMuXCJcbiAgICApO1xuICAgIHRoaXMuX3Jlc29sdmVkU3RvcmFnZSA9IHRvU3RvcmFnZShsb2NhbFN0b3JhZ2UoKSk7XG4gICAgcmV0dXJuIHRoaXMuX3Jlc29sdmVkU3RvcmFnZTtcbiAgfVxuXG4gIGdldCB0b29scygpIHtcbiAgICByZXR1cm4geyAuLi5idWlsdEluVG9vbHMsIC4uLnRoaXMub3B0aW9ucy50b29scyB9IGFzIHR5cGVvZiBidWlsdEluVG9vbHMgJlxuICAgICAgVG9vbHM7XG4gIH1cblxuICBnZXQgaG9va3MoKTogQWdlbnRIb29rcyB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5ob29rcyA/PyB7fTtcbiAgfVxuXG4gIHJlYWRvbmx5IHNlc3Npb247XG5cbiAgcmVhZG9ubHkgc2FuZGJveDtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgZGVyaXZlZCBhZ2VudCB3aXRoIG1lcmdlZCBvcHRpb25zLiBUaGUgcmV0dXJuZWQgYWdlbnQgaXMgTk9UXG4gICAqIHJlZ2lzdGVyZWQgaW4gdGhlIHdvcmtmbG93IHJlZ2lzdHJ5IFx1MjAxMyBpdCdzIGEgb25lLW9mZiBpbnN0YW5jZSB1c2VkIGJ5XG4gICAqIHRoZSBmcmFtZXdvcmsgdG8gbGF5ZXIgZnMtc2Nhbm5lZCBjb25maWcgb250byBhbiBhZ2VudC50cyBkZWZpbml0aW9uLlxuICAgKi9cbiAgZXh0ZW5kKFxuICAgIGZuOiAob3B0aW9uczogQWdlbnRPcHRpb25zPFRvb2xzLCBUU2FuZGJveEJpbmRpbmdzLCBUQ29udGV4dCwgVFN0YXRlLCBUTWVzc2FnZU1ldGFkYXRhPikgPT4gQWdlbnRPcHRpb25zPFRvb2xzLCBUU2FuZGJveEJpbmRpbmdzLCBUQ29udGV4dCwgVFN0YXRlLCBUTWVzc2FnZU1ldGFkYXRhPlxuICApOiBBZ2VudDxUTWVzc2FnZU1ldGFkYXRhLCBUb29scywgVFNhbmRib3hCaW5kaW5ncywgVENvbnRleHQsIFRTdGF0ZT4ge1xuICAgIHJldHVybiBuZXcgQWdlbnQodGhpcy5uYW1lLCBmbih0aGlzLm9wdGlvbnMpKTtcbiAgfVxuXG4gIC8qKiBQaGFudG9tIHByb3BlcnR5IGZvciB0eXBlIGluZmVyZW5jZS4gVXNlIGB0eXBlb2YgbXlBZ2VudC4kVUlNZXNzYWdlYCB0byBnZXQgdGhlIHR5cGVkIFVJTWVzc2FnZS4gKi9cbiAgZGVjbGFyZSByZWFkb25seSAkVUlNZXNzYWdlOiBVSU1lc3NhZ2U8XG4gICAgVE1lc3NhZ2VNZXRhZGF0YSxcbiAgICBBZ2VudERhdGFUeXBlcyxcbiAgICBJbmZlclVJVG9vbHM8dHlwZW9mIGJ1aWx0SW5Ub29scyAmIFRvb2xzPlxuICA+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWdlbnQ8XG4gIFRvb2xzIGV4dGVuZHMgVG9vbFNldCA9IFRvb2xTZXQsXG4gIFRTYW5kYm94QmluZGluZ3MgZXh0ZW5kcyBTYW5kYm94QmluZGluZyB8IFNhbmRib3hCaW5kaW5nW10gPSBTYW5kYm94QmluZGluZyxcbiAgVENvbnRleHQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IFJlY29yZDxzdHJpbmcsIG5ldmVyPixcbiAgVFN0YXRlIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgVE1lc3NhZ2VNZXRhZGF0YSA9IHVua25vd24sXG4+KFxuICBuYW1lOiBzdHJpbmcsXG4gIG9wdGlvbnM/OiBBZ2VudE9wdGlvbnM8XG4gICAgVG9vbHMsXG4gICAgVFNhbmRib3hCaW5kaW5ncyxcbiAgICBUQ29udGV4dCxcbiAgICBUU3RhdGUsXG4gICAgVE1lc3NhZ2VNZXRhZGF0YVxuICA+XG4pIHtcbiAgY29uc3QgaW5zdGFuY2UgPSBuZXcgQWdlbnQ8XG4gICAgVE1lc3NhZ2VNZXRhZGF0YSxcbiAgICBUb29scyxcbiAgICBUU2FuZGJveEJpbmRpbmdzLFxuICAgIFRDb250ZXh0LFxuICAgIFRTdGF0ZVxuICA+KG5hbWUsIG9wdGlvbnMpO1xuICByZWdpc3RlckFnZW50KG5hbWUsIGluc3RhbmNlKTtcbiAgcmV0dXJuIGluc3RhbmNlO1xufVxuXG4vLyBSZS1leHBvcnQgZXZlcnl0aGluZyBmcm9tIHJlZ2lzdHJ5IHNvIGV4aXN0aW5nIGltcG9ydHMgZnJvbSBcIi4vYWdlbnQvY2xpZW50XCIga2VlcCB3b3JraW5nLlxuZXhwb3J0IHtcbiAgdHlwZSBBZ2VudERhdGFUeXBlcyxcbiAgdHlwZSBBZ2VudEhvb2tzLFxuICBBZ2VudFN0YXR1cyxcbiAgZ2V0QWdlbnQsXG4gIHR5cGUgSW5mZXJVSU1lc3NhZ2UsXG4gIHR5cGUgTmVlZHNBcHByb3ZhbE1hcCxcbiAgcmVnaXN0ZXJBZ2VudCxcbiAgdHlwZSBUeXBlZFVJTWVzc2FnZSxcbn0gZnJvbSBcIi4vcmVnaXN0cnlcIjtcbiIsICJpbXBvcnQgeyB1bGlkIH0gZnJvbSBcInVsaWRcIjtcbmltcG9ydCB0eXBlIHsgQW55QWdlbnQgfSBmcm9tIFwiLi4vYWdlbnQvY2xpZW50XCI7XG5pbXBvcnQgeyBnZXRTYW5kYm94Q29udGV4dHMgfSBmcm9tIFwiLi4vYWdlbnQvY2xpZW50XCI7XG5pbXBvcnQgdHlwZSB7IFNhbmRib3hCaW5kaW5nLCBTYW5kYm94SW5zdGFuY2UgfSBmcm9tIFwiLi9hZGFwdGVyXCI7XG5pbXBvcnQgeyBleGVjIH0gZnJvbSBcIi4vZXhlY1wiO1xuaW1wb3J0IHsgZ2V0RG9tYWluIH0gZnJvbSBcIi4vZ2V0LWRvbWFpblwiO1xuaW1wb3J0IHsgZ2V0U3RhdHVzIH0gZnJvbSBcIi4vZ2V0LXN0YXR1c1wiO1xuaW1wb3J0IHsga2lsbCB9IGZyb20gXCIuL2tpbGxcIjtcbmltcG9ydCB7IHJlYWRGaWxlIH0gZnJvbSBcIi4vcmVhZC1maWxlXCI7XG5pbXBvcnQgeyBzZXR1cCB9IGZyb20gXCIuL3NldHVwXCI7XG5pbXBvcnQgeyBzbmFwc2hvdCB9IGZyb20gXCIuL3NuYXBzaG90XCI7XG5pbXBvcnQgeyBzdGFydCB9IGZyb20gXCIuL3N0YXJ0XCI7XG5pbXBvcnQgeyBzdG9wIH0gZnJvbSBcIi4vc3RvcFwiO1xuaW1wb3J0IHsgdXBkYXRlTmV0d29ya1BvbGljeSB9IGZyb20gXCIuL3VwZGF0ZS1uZXR3b3JrLXBvbGljeVwiO1xuaW1wb3J0IHsgd3JpdGVGaWxlcyB9IGZyb20gXCIuL3dyaXRlLWZpbGVzXCI7XG5cbmV4cG9ydCB0eXBlIFNhbmRib3hDb250ZXh0ID0ge1xuICBhZ2VudDogQW55QWdlbnQ7XG4gIHNhbmRib3hJZDogc3RyaW5nIHwgbnVsbDtcbiAgX3BlbmRpbmdTZXR1cD86IFByb21pc2U8U2FuZGJveEluc3RhbmNlPjtcbiAgX2N3ZD86IHN0cmluZztcbiAgX3Nlc3Npb25JZD86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIFNhbmRib3hPcHRpb25zID0ge1xuICBpZD86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIFNhbmRib3hIYW5kbGU8XG4gIFRTYW5kYm94QmluZGluZ3MgZXh0ZW5kcyBTYW5kYm94QmluZGluZyB8IFNhbmRib3hCaW5kaW5nW10gPSBTYW5kYm94QmluZGluZyxcbj4gPSBSZXR1cm5UeXBlPHR5cGVvZiBzYW5kYm94SGFuZGxlPFRTYW5kYm94QmluZGluZ3M+PjtcblxuZXhwb3J0IGZ1bmN0aW9uIHNhbmRib3hIYW5kbGU8XG4gIFRTYW5kYm94QmluZGluZ3MgZXh0ZW5kcyBTYW5kYm94QmluZGluZyB8IFNhbmRib3hCaW5kaW5nW10sXG4+KGFnZW50OiBBbnlBZ2VudCwgaWQ/OiBzdHJpbmcgfCBTYW5kYm94T3B0aW9ucykge1xuICBjb25zdCBzYW5kYm94SWQgPVxuICAgIHR5cGVvZiBpZCA9PT0gXCJzdHJpbmdcIiA/IGlkIDogKGlkPy5pZCA/PyBgc2FuZGJveF8ke3VsaWQoKX1gKTtcblxuICBjb25zdCBjb250ZXh0cyA9IGdldFNhbmRib3hDb250ZXh0cyhhZ2VudCk7XG4gIGxldCBzYW5kYm94Q29udGV4dCA9IGNvbnRleHRzLmdldChzYW5kYm94SWQpO1xuICBpZiAoIXNhbmRib3hDb250ZXh0KSB7XG4gICAgc2FuZGJveENvbnRleHQgPSB7IGFnZW50LCBzYW5kYm94SWQgfTtcbiAgICBjb250ZXh0cy5zZXQoc2FuZGJveElkLCBzYW5kYm94Q29udGV4dCk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGlkOiBzYW5kYm94SWQsXG4gICAgZ2V0IGN3ZCgpIHtcbiAgICAgIHJldHVybiBzYW5kYm94Q29udGV4dCEuX2N3ZCA/PyBcIi5cIjtcbiAgICB9LFxuICAgIHNldHVwOiAoc2V0dXA8VFNhbmRib3hCaW5kaW5ncz4pLmJpbmQobnVsbCwgc2FuZGJveENvbnRleHQpLFxuICAgIGV4ZWM6IGV4ZWMuYmluZChudWxsLCBzYW5kYm94Q29udGV4dCksXG4gICAgcmVhZEZpbGU6IHJlYWRGaWxlLmJpbmQobnVsbCwgc2FuZGJveENvbnRleHQpLFxuICAgIHdyaXRlRmlsZXM6IHdyaXRlRmlsZXMuYmluZChudWxsLCBzYW5kYm94Q29udGV4dCksXG4gICAgZ2V0RG9tYWluOiBnZXREb21haW4uYmluZChudWxsLCBzYW5kYm94Q29udGV4dCksXG4gICAgdXBkYXRlTmV0d29ya1BvbGljeTogdXBkYXRlTmV0d29ya1BvbGljeS5iaW5kKG51bGwsIHNhbmRib3hDb250ZXh0KSxcbiAgICBzdGFydDogc3RhcnQuYmluZChudWxsLCBzYW5kYm94Q29udGV4dCksXG4gICAgc3RvcDogc3RvcC5iaW5kKG51bGwsIHNhbmRib3hDb250ZXh0KSxcbiAgICBraWxsOiBraWxsLmJpbmQobnVsbCwgc2FuZGJveENvbnRleHQpLFxuICAgIHNuYXBzaG90OiBzbmFwc2hvdC5iaW5kKG51bGwsIHNhbmRib3hDb250ZXh0KSxcbiAgICBnZXRTdGF0dXM6IGdldFN0YXR1cy5iaW5kKG51bGwsIHNhbmRib3hDb250ZXh0KSxcbiAgfTtcbn1cblxudHlwZSBTYW5kYm94TWV0aG9kczxcbiAgVFNhbmRib3hCaW5kaW5ncyBleHRlbmRzIFNhbmRib3hCaW5kaW5nIHwgU2FuZGJveEJpbmRpbmdbXSxcbj4gPSBPbWl0PFNhbmRib3hIYW5kbGU8VFNhbmRib3hCaW5kaW5ncz4sIFwiaWRcIiB8IFwiY3dkXCI+O1xuXG5leHBvcnQgZnVuY3Rpb24gbGF6eVNhbmRib3hIYW5kbGU8XG4gIFRTYW5kYm94QmluZGluZ3MgZXh0ZW5kcyBTYW5kYm94QmluZGluZyB8IFNhbmRib3hCaW5kaW5nW10sXG4+KFxuICBhZ2VudDogQW55QWdlbnQsXG4gIHNlc3Npb25JZDogc3RyaW5nXG4pOiBTYW5kYm94TWV0aG9kczxUU2FuZGJveEJpbmRpbmdzPiB7XG4gIGNvbnN0IHNhbmRib3hDb250ZXh0OiBTYW5kYm94Q29udGV4dCA9IHtcbiAgICBhZ2VudCxcbiAgICBzYW5kYm94SWQ6IG51bGwsXG4gICAgX3Nlc3Npb25JZDogc2Vzc2lvbklkLFxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgc2V0dXA6IChzZXR1cDxUU2FuZGJveEJpbmRpbmdzPikuYmluZChudWxsLCBzYW5kYm94Q29udGV4dCksXG4gICAgZXhlYzogZXhlYy5iaW5kKG51bGwsIHNhbmRib3hDb250ZXh0KSxcbiAgICByZWFkRmlsZTogcmVhZEZpbGUuYmluZChudWxsLCBzYW5kYm94Q29udGV4dCksXG4gICAgd3JpdGVGaWxlczogd3JpdGVGaWxlcy5iaW5kKG51bGwsIHNhbmRib3hDb250ZXh0KSxcbiAgICBnZXREb21haW46IGdldERvbWFpbi5iaW5kKG51bGwsIHNhbmRib3hDb250ZXh0KSxcbiAgICB1cGRhdGVOZXR3b3JrUG9saWN5OiB1cGRhdGVOZXR3b3JrUG9saWN5LmJpbmQobnVsbCwgc2FuZGJveENvbnRleHQpLFxuICAgIHN0YXJ0OiBzdGFydC5iaW5kKG51bGwsIHNhbmRib3hDb250ZXh0KSxcbiAgICBzdG9wOiBzdG9wLmJpbmQobnVsbCwgc2FuZGJveENvbnRleHQpLFxuICAgIGtpbGw6IGtpbGwuYmluZChudWxsLCBzYW5kYm94Q29udGV4dCksXG4gICAgc25hcHNob3Q6IHNuYXBzaG90LmJpbmQobnVsbCwgc2FuZGJveENvbnRleHQpLFxuICAgIGdldFN0YXR1czogZ2V0U3RhdHVzLmJpbmQobnVsbCwgc2FuZGJveENvbnRleHQpLFxuICB9O1xufVxuIiwgImV4cG9ydCBjb25zdCBpc1ZlcmNlbCA9IGFzeW5jICgpID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCB7IGdldFZlcmNlbE9pZGNUb2tlbiB9ID0gYXdhaXQgaW1wb3J0KFwiQHZlcmNlbC9vaWRjXCIpO1xuICAgIHJldHVybiBCb29sZWFuKGF3YWl0IGdldFZlcmNlbE9pZGNUb2tlbigpKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuIiwgImltcG9ydCAqIGFzIGVycm9yZSBmcm9tIFwiZXJyb3JlXCI7XG5cbmV4cG9ydCBjbGFzcyBTZXNzaW9uTm90Rm91bmRFcnJvciBleHRlbmRzIGVycm9yZS5jcmVhdGVUYWdnZWRFcnJvcih7XG4gIG5hbWU6IFwiU2Vzc2lvbk5vdEZvdW5kRXJyb3JcIixcbiAgbWVzc2FnZTogXCJTZXNzaW9uICRpZCBub3QgZm91bmRcIixcbn0pIHt9XG5cbmV4cG9ydCBjbGFzcyBTZXNzaW9uRXJyb3IgZXh0ZW5kcyBlcnJvcmUuY3JlYXRlVGFnZ2VkRXJyb3Ioe1xuICBuYW1lOiBcIlNlc3Npb25FcnJvclwiLFxuICBtZXNzYWdlOiBcIlNlc3Npb24gJGlkIGZhaWxlZDogJHJlYXNvblwiLFxufSkge31cblxuZXhwb3J0IGNsYXNzIFNhbmRib3hOb3RGb3VuZEVycm9yIGV4dGVuZHMgZXJyb3JlLmNyZWF0ZVRhZ2dlZEVycm9yKHtcbiAgbmFtZTogXCJTYW5kYm94Tm90Rm91bmRFcnJvclwiLFxuICBtZXNzYWdlOiBcIlNhbmRib3ggJGlkIG5vdCBmb3VuZFwiLFxufSkge31cblxuZXhwb3J0IGNsYXNzIFN0b3JhZ2VFcnJvciBleHRlbmRzIGVycm9yZS5jcmVhdGVUYWdnZWRFcnJvcih7XG4gIG5hbWU6IFwiU3RvcmFnZUVycm9yXCIsXG4gIG1lc3NhZ2U6IFwiJHJlYXNvblwiLFxufSkge31cblxuZXhwb3J0IGNsYXNzIFN0b3JhZ2VDb25mbGljdEVycm9yIGV4dGVuZHMgZXJyb3JlLmNyZWF0ZVRhZ2dlZEVycm9yKHtcbiAgbmFtZTogXCJTdG9yYWdlQ29uZmxpY3RFcnJvclwiLFxuICBtZXNzYWdlOiBcIiRyZWFzb25cIixcbn0pIHt9XG5cbmV4cG9ydCBjbGFzcyBTYW5kYm94RXJyb3IgZXh0ZW5kcyBlcnJvcmUuY3JlYXRlVGFnZ2VkRXJyb3Ioe1xuICBuYW1lOiBcIlNhbmRib3hFcnJvclwiLFxuICBtZXNzYWdlOiBcIiRyZWFzb25cIixcbn0pIHt9XG5cbmV4cG9ydCBjbGFzcyBNZXNzYWdlTm90Rm91bmRFcnJvciBleHRlbmRzIGVycm9yZS5jcmVhdGVUYWdnZWRFcnJvcih7XG4gIG5hbWU6IFwiTWVzc2FnZU5vdEZvdW5kRXJyb3JcIixcbiAgbWVzc2FnZTogXCJNZXNzYWdlICRpZCBub3QgZm91bmRcIixcbn0pIHt9XG4iLCAiaW1wb3J0IHsgaXNWZXJjZWwgfSBmcm9tIFwiLi4vYWdlbnQvaXMtdmVyY2VsXCI7XG5pbXBvcnQgeyBTYW5kYm94RXJyb3IsIFNhbmRib3hOb3RGb3VuZEVycm9yIH0gZnJvbSBcIi4uL2Vycm9yc1wiO1xuaW1wb3J0IHR5cGUgeyBTYW5kYm94IH0gZnJvbSBcIi4uL3N0b3JhZ2UvdHlwZXNcIjtcbmltcG9ydCB7IGNyZWF0ZUxvZ2dlciB9IGZyb20gXCIuLi91dGlscy9sb2dnZXJcIjtcbmltcG9ydCB0eXBlIHtcbiAgU2FuZGJveEJpbmRpbmcsXG4gIFNhbmRib3hJbnN0YW5jZSxcbiAgU2FuZGJveFNldHVwRmllbGRzLFxuICBXaXRoQ29uZmlnLFxufSBmcm9tIFwiLi9hZGFwdGVyXCI7XG5pbXBvcnQgdHlwZSB7IEJ1aWx0SW5CaW5kaW5ncyB9IGZyb20gXCIuL2JpbmRpbmdzXCI7XG5pbXBvcnQgdHlwZSB7IFNhbmRib3hDb250ZXh0IH0gZnJvbSBcIi4vaGFuZGxlXCI7XG5cbmNvbnN0IFBPTExfSU5URVJWQUxfTVMgPSA1MDtcbmNvbnN0IFBPTExfVElNRU9VVF9NUyA9IDUgKiA2MCAqIDEwMDA7XG5cbnR5cGUgU2V0dXBDb21tb25GaWVsZHMgPSBQYXJ0aWFsPFNhbmRib3hTZXR1cEZpZWxkcz4gJiB7XG4gIGN3ZD86IHN0cmluZztcbiAgcnVuPzogKHNhbmRib3g6IFNhbmRib3hJbnN0YW5jZSkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG59O1xuXG50eXBlIFRvQmluZGluZ1VuaW9uPFQgZXh0ZW5kcyBTYW5kYm94QmluZGluZyB8IFNhbmRib3hCaW5kaW5nW10+ID1cbiAgVCBleHRlbmRzIFNhbmRib3hCaW5kaW5nW10gPyBUW251bWJlcl0gOiBUO1xuXG50eXBlIFNldHVwT3B0c0ZvckJpbmRpbmc8QiBleHRlbmRzIFNhbmRib3hCaW5kaW5nPiA9XG4gIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9FeHBsaWNpdEFueTogLlxuICBCIGV4dGVuZHMgU2FuZGJveEJpbmRpbmc8aW5mZXIgVCwgaW5mZXIgQywgYW55PlxuICAgID8geyB0eXBlOiBUIH0gJiBTZXR1cENvbW1vbkZpZWxkcyAmIFdpdGhDb25maWc8Qz5cbiAgICA6IG5ldmVyO1xuXG50eXBlIElzRGVmYXVsdDxUIGV4dGVuZHMgU2FuZGJveEJpbmRpbmcgfCBTYW5kYm94QmluZGluZ1tdPiA9XG4gIFNhbmRib3hCaW5kaW5nIGV4dGVuZHMgVCA/IHRydWUgOiBmYWxzZTtcblxuZXhwb3J0IHR5cGUgU2V0dXBPcHRzPFxuICBUU2FuZGJveEJpbmRpbmdzIGV4dGVuZHMgU2FuZGJveEJpbmRpbmcgfCBTYW5kYm94QmluZGluZ1tdLFxuPiA9XG4gIHwgU2V0dXBPcHRzRm9yQmluZGluZzxcbiAgICAgIElzRGVmYXVsdDxUU2FuZGJveEJpbmRpbmdzPiBleHRlbmRzIHRydWVcbiAgICAgICAgPyBCdWlsdEluQmluZGluZ3NcbiAgICAgICAgOiBUb0JpbmRpbmdVbmlvbjxUU2FuZGJveEJpbmRpbmdzPlxuICAgID5cbiAgfCAoU2V0dXBDb21tb25GaWVsZHMgJiB7IHR5cGU/OiBuZXZlciB9KTtcblxuZXhwb3J0IHR5cGUgU2V0dXBSZXN1bHQgPSB7XG4gIGRvbmU6IFByb21pc2U8U2FuZGJveEluc3RhbmNlPjtcbn07XG5cbmZ1bmN0aW9uIGlzU2luZ2xlQmluZGluZyhcbiAgc2FuZGJveDogU2FuZGJveEJpbmRpbmcgfCBTYW5kYm94QmluZGluZ1tdXG4pOiBzYW5kYm94IGlzIFNhbmRib3hCaW5kaW5nIHtcbiAgcmV0dXJuICFBcnJheS5pc0FycmF5KHNhbmRib3gpO1xufVxuXG4vKiogQXV0by1kZXRlY3QgdGhlIGRlZmF1bHQgYmluZGluZzogdmVyY2VsIFx1MjE5MiBkb2NrZXIgXHUyMTkyIGxvY2FsIGNhc2NhZGUuICovXG5hc3luYyBmdW5jdGlvbiBnZXREZWZhdWx0QmluZGluZygpOiBQcm9taXNlPFNhbmRib3hCaW5kaW5nPiB7XG4gIGlmIChhd2FpdCBpc1ZlcmNlbCgpKSB7XG4gICAgY29uc3QgeyB2ZXJjZWxTYW5kYm94IH0gPSBhd2FpdCBpbXBvcnQoXCIuL2JpbmRpbmdzL3ZlcmNlbFwiKTtcbiAgICByZXR1cm4gdmVyY2VsU2FuZGJveCgpO1xuICB9XG5cbiAgaWYgKGF3YWl0IGlzRG9ja2VyQXZhaWxhYmxlKCkpIHtcbiAgICBjb25zdCB7IGRvY2tlclNhbmRib3ggfSA9IGF3YWl0IGltcG9ydChcIi4vYmluZGluZ3MvZG9ja2VyXCIpO1xuICAgIHJldHVybiBkb2NrZXJTYW5kYm94KCk7XG4gIH1cblxuICBjb25zdCB7IGxvY2FsU2FuZGJveCB9ID0gYXdhaXQgaW1wb3J0KFwiLi9iaW5kaW5ncy9sb2NhbFwiKTtcbiAgcmV0dXJuIGxvY2FsU2FuZGJveCgpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBpc0RvY2tlckF2YWlsYWJsZSgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCB7IGV4ZWNTeW5jIH0gPSBhd2FpdCBpbXBvcnQoXCJub2RlOmNoaWxkX3Byb2Nlc3NcIik7XG4gICAgZXhlY1N5bmMoXCJkb2NrZXIgc2FuZGJveCAtLWhlbHBcIiwgeyBzdGRpbzogXCJpZ25vcmVcIiwgdGltZW91dDogNTAwMCB9KTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVCaW5kaW5nKFxuICBzYW5kYm94OiBTYW5kYm94QmluZGluZyB8IFNhbmRib3hCaW5kaW5nW10gfCB1bmRlZmluZWQsXG4gIHR5cGU/OiBzdHJpbmdcbik6IFByb21pc2U8eyBiaW5kaW5nOiBTYW5kYm94QmluZGluZzsgYmluZGluZ05hbWU6IHN0cmluZyB9PiB7XG4gIGlmICghc2FuZGJveCkge1xuICAgIGNvbnN0IGJpbmRpbmcgPSBhd2FpdCBnZXREZWZhdWx0QmluZGluZygpO1xuICAgIHJldHVybiB7IGJpbmRpbmcsIGJpbmRpbmdOYW1lOiBiaW5kaW5nLnR5cGUgfTtcbiAgfVxuICBpZiAoaXNTaW5nbGVCaW5kaW5nKHNhbmRib3gpKSB7XG4gICAgcmV0dXJuIHsgYmluZGluZzogc2FuZGJveCwgYmluZGluZ05hbWU6IHNhbmRib3gudHlwZSB9O1xuICB9XG4gIGlmICh0eXBlKSB7XG4gICAgY29uc3QgbWF0Y2ggPSBzYW5kYm94LmZpbmQoKGIpID0+IGIudHlwZSA9PT0gdHlwZSk7XG4gICAgaWYgKCFtYXRjaCkge1xuICAgICAgdGhyb3cgbmV3IFNhbmRib3hFcnJvcih7XG4gICAgICAgIHJlYXNvbjogYFVua25vd24gYmluZGluZyB0eXBlOiBcIiR7dHlwZX1cIi4gQXZhaWxhYmxlOiAke3NhbmRib3gubWFwKChiKSA9PiBiLnR5cGUpLmpvaW4oXCIsIFwiKX1gLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB7IGJpbmRpbmc6IG1hdGNoLCBiaW5kaW5nTmFtZTogbWF0Y2gudHlwZSB9O1xuICB9XG4gIGlmIChzYW5kYm94Lmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBTYW5kYm94RXJyb3IoeyByZWFzb246IFwiTm8gc2FuZGJveCBiaW5kaW5ncyBjb25maWd1cmVkXCIgfSk7XG4gIH1cbiAgcmV0dXJuIHsgYmluZGluZzogc2FuZGJveFswXSwgYmluZGluZ05hbWU6IHNhbmRib3hbMF0udHlwZSB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiByZXNvbHZlU2FuZGJveElkKGN0eDogU2FuZGJveENvbnRleHQpOiBQcm9taXNlPHN0cmluZz4ge1xuICBpZiAoY3R4LnNhbmRib3hJZCkge1xuICAgIHJldHVybiBjdHguc2FuZGJveElkO1xuICB9XG4gIGlmICghY3R4Ll9zZXNzaW9uSWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBcIlNhbmRib3hDb250ZXh0IGhhcyBubyBzYW5kYm94SWQgYW5kIG5vIHNlc3Npb25JZCB0byByZXNvbHZlIGZyb21cIlxuICAgICk7XG4gIH1cbiAgY29uc3QgcmVjb3JkID0gYXdhaXQgY3R4LmFnZW50LnN0b3JhZ2Uuc2Vzc2lvbi5nZXQoY3R4Ll9zZXNzaW9uSWQpO1xuICBjdHguc2FuZGJveElkID0gcmVjb3JkPy5zYW5kYm94SWQgPz8gY3R4Ll9zZXNzaW9uSWQ7XG4gIHJldHVybiBjdHguc2FuZGJveElkO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2V0dXA8XG4gIFRTYW5kYm94QmluZGluZ3MgZXh0ZW5kcyBTYW5kYm94QmluZGluZyB8IFNhbmRib3hCaW5kaW5nW10sXG4+KFxuICBjdHg6IFNhbmRib3hDb250ZXh0LFxuICBvcHRzPzogU2V0dXBPcHRzPFRTYW5kYm94QmluZGluZ3M+XG4pOiBQcm9taXNlPFNldHVwUmVzdWx0PiB7XG4gIFwidXNlIHN0ZXBcIjtcbiAgY29uc3Qgc2FuZGJveElkID0gYXdhaXQgcmVzb2x2ZVNhbmRib3hJZChjdHgpO1xuICBpZiAoY3R4Ll9wZW5kaW5nU2V0dXApIHtcbiAgICByZXR1cm4geyBkb25lOiBjdHguX3BlbmRpbmdTZXR1cCB9O1xuICB9XG5cbiAgY29uc3QgYWdlbnQgPSBjdHguYWdlbnQ7XG4gIGNvbnN0IGxvZyA9IGNyZWF0ZUxvZ2dlcih7XG4gICAgY29uZmlnOiB7IC4uLmFnZW50Lm9wdGlvbnMubG9nZ2luZywgbmFtZTogYWdlbnQubmFtZSB9LFxuICAgIHN1YnN5c3RlbTogXCJzYW5kYm94OnNldHVwXCIsXG4gICAgY29udGV4dDogeyBzYW5kYm94SWQgfSxcbiAgfSk7XG5cbiAgY29uc3QgZG9uZVJlc29sdmVCaW5kaW5nID0gbG9nLnRpbWUoXCJyZXNvbHZlIGJpbmRpbmdcIiwge1xuICAgIHJlcXVlc3RlZFR5cGU6IG9wdHM/LnR5cGUsXG4gIH0pO1xuICBjb25zdCB7IGJpbmRpbmcsIGJpbmRpbmdOYW1lIH0gPSBhd2FpdCByZXNvbHZlQmluZGluZyhcbiAgICBhZ2VudC5vcHRpb25zLnNhbmRib3gsXG4gICAgb3B0cz8udHlwZVxuICApO1xuICBkb25lUmVzb2x2ZUJpbmRpbmcoKTtcblxuICBpZiAob3B0cz8uY3dkKSB7XG4gICAgY3R4Ll9jd2QgPSBvcHRzLmN3ZDtcbiAgfVxuXG4gIGNvbnN0IHNldHVwTG9nID0gbG9nLndpdGhDb250ZXh0KHtcbiAgICBiaW5kaW5nOiBiaW5kaW5nTmFtZSxcbiAgICB2ZXJzaW9uOiBvcHRzPy52ZXJzaW9uID8/IGJpbmRpbmcuZGVmYXVsdHM/LnZlcnNpb24sXG4gIH0pO1xuXG4gIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9Db25mdXNpbmdWb2lkVHlwZTogLlxuICBsZXQgcmVzb2x2ZUJsb2NraW5nUHJvbWlzZSA9ICh2YWx1ZTogdm9pZCkgPT4gdmFsdWU7XG4gIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9FeHBsaWNpdEFueTogLlxuICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRW1wdHlCbG9ja1N0YXRlbWVudHM6IC5cbiAgbGV0IHJlamVjdEJsb2NraW5nUHJvbWlzZSA9IChfcmVhc29uPzogYW55KSA9PiB7fTtcbiAgY29uc3QgYmxvY2tpbmdQcm9taXNlID0gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIHJlc29sdmVCbG9ja2luZ1Byb21pc2UgPSByZXNvbHZlO1xuICAgIHJlamVjdEJsb2NraW5nUHJvbWlzZSA9IHJlamVjdDtcbiAgfSk7XG5cbiAgY3R4Ll9wZW5kaW5nU2V0dXAgPSAoYXN5bmMgKCkgPT4ge1xuICAgIGxldCBzbGVlcE9sZEluc3RhbmNlOiBQcm9taXNlPHZvaWQ+IHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IGRvbmVQZW5kaW5nU2V0dXAgPSBzZXR1cExvZy50aW1lKFwicGVuZGluZyBzZXR1cFwiKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBkb25lU3RvcmFnZUdldCA9IHNldHVwTG9nLnRpbWUoXCJzdG9yYWdlLnNhbmRib3guZ2V0XCIpO1xuICAgICAgY29uc3QgcmVjb3JkID0gYXdhaXQgYWdlbnQuc3RvcmFnZS5zYW5kYm94LmdldChzYW5kYm94SWQpO1xuICAgICAgZG9uZVN0b3JhZ2VHZXQoKTtcblxuICAgICAgY29uc3QgYmluZGluZ0RlZmF1bHRzID0gYmluZGluZy5kZWZhdWx0cyA/PyB7fTtcbiAgICAgIGNvbnN0IGVmZmVjdGl2ZVZlcnNpb24gPSBvcHRzPy52ZXJzaW9uID8/IGJpbmRpbmdEZWZhdWx0cy52ZXJzaW9uID8/IG51bGw7XG4gICAgICBjb25zdCBlZmZlY3RpdmVSdW4gPSBvcHRzPy5ydW4gPz8gYmluZGluZ0RlZmF1bHRzLnJ1bjtcbiAgICAgIGNvbnN0IGVmZmVjdGl2ZU5ldHdvcmtQb2xpY3kgPVxuICAgICAgICBvcHRzPy5uZXR3b3JrUG9saWN5ID8/IGJpbmRpbmdEZWZhdWx0cy5uZXR3b3JrUG9saWN5ID8/IG51bGw7XG4gICAgICBjb25zdCBlZmZlY3RpdmVDd2QgPVxuICAgICAgICBjdHguX2N3ZCB8fCBvcHRzPy5jd2QgfHwgYmluZGluZ0RlZmF1bHRzLmN3ZCB8fCBudWxsO1xuICAgICAgaWYgKGVmZmVjdGl2ZUN3ZCkge1xuICAgICAgICBjdHguX2N3ZCA9IGVmZmVjdGl2ZUN3ZDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGVmZmVjdGl2ZUNvbmZpZyA9IHtcbiAgICAgICAgLi4uYmluZGluZ0RlZmF1bHRzLmNvbmZpZyxcbiAgICAgICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0V4cGxpY2l0QW55OiBvcHRzIGlzIGEgdW5pb247IGNvbmZpZyBleGlzdHMgb24gYmluZGluZy1zcGVjaWZpYyBicmFuY2hlc1xuICAgICAgICAuLi4ob3B0cyBhcyBhbnkpPy5jb25maWcsXG4gICAgICB9O1xuXG4gICAgICBpZiAocmVjb3JkKSB7XG4gICAgICAgIGNvbnN0IHZlcnNpb25NYXRjaGVzID1cbiAgICAgICAgICAhZWZmZWN0aXZlVmVyc2lvbiB8fCByZWNvcmQuc2V0dXA/LnZlcnNpb24gPT09IGVmZmVjdGl2ZVZlcnNpb247XG5cbiAgICAgICAgaWYgKHZlcnNpb25NYXRjaGVzICYmIHJlY29yZC5zZXR1cD8uY29tcGxldGVkQXQpIHtcbiAgICAgICAgICByZXNvbHZlQmxvY2tpbmdQcm9taXNlKCk7XG4gICAgICAgICAgY29uc3QgZG9uZUNvbm5lY3RFeGlzdGluZyA9IHNldHVwTG9nLnRpbWUoXG4gICAgICAgICAgICBcImNvbm5lY3QgZXhpc3Rpbmcgc2FuZGJveFwiLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBzZXR1cFN0YXRlOiBcImNvbXBsZXRlZFwiLFxuICAgICAgICAgICAgfVxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgaW5zdGFuY2UgPSBhd2FpdCBiaW5kaW5nLmNvbm5lY3Qoe1xuICAgICAgICAgICAgYWdlbnQsXG4gICAgICAgICAgICBtZXRhZGF0YTogcmVjb3JkLnNldHVwLm1ldGFkYXRhLFxuICAgICAgICAgICAgY3dkOiByZWNvcmQuc2V0dXAuY3dkLFxuICAgICAgICAgICAgc2lnbmFsOiBvcHRzPy5zaWduYWwsXG4gICAgICAgICAgICBsb2c6IHNldHVwTG9nLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGRvbmVDb25uZWN0RXhpc3RpbmcoKTtcbiAgICAgICAgICBjdHguX2N3ZCA9IGluc3RhbmNlLmN3ZDtcbiAgICAgICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmVyc2lvbk1hdGNoZXMgJiYgIXJlY29yZC5zZXR1cD8uY29tcGxldGVkQXQpIHtcbiAgICAgICAgICByZXNvbHZlQmxvY2tpbmdQcm9taXNlKCk7XG4gICAgICAgICAgY29uc3QgZG9uZVBvbGxVbnRpbFJlYWR5ID0gc2V0dXBMb2cudGltZShcInBvbGwgdW50aWwgcmVhZHlcIik7XG4gICAgICAgICAgYXdhaXQgcG9sbFVudGlsUmVhZHkoY3R4LCBvcHRzPy5zaWduYWwpO1xuICAgICAgICAgIGRvbmVQb2xsVW50aWxSZWFkeSgpO1xuXG4gICAgICAgICAgY29uc3QgZG9uZVN0b3JhZ2VHZXRQb3N0UG9sbCA9IHNldHVwTG9nLnRpbWUoXG4gICAgICAgICAgICBcInN0b3JhZ2Uuc2FuZGJveC5nZXQgKHBvc3QtcG9sbClcIlxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgcmVhZHkgPSBhd2FpdCBhZ2VudC5zdG9yYWdlLnNhbmRib3guZ2V0KHNhbmRib3hJZCk7XG4gICAgICAgICAgZG9uZVN0b3JhZ2VHZXRQb3N0UG9sbCgpO1xuXG4gICAgICAgICAgaWYgKCFyZWFkeSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFNhbmRib3hOb3RGb3VuZEVycm9yKHsgaWQ6IHNhbmRib3hJZCB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgZG9uZUNvbm5lY3RFeGlzdGluZyA9IHNldHVwTG9nLnRpbWUoXG4gICAgICAgICAgICBcImNvbm5lY3QgZXhpc3Rpbmcgc2FuZGJveFwiLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBzZXR1cFN0YXRlOiBcInBvc3QtcG9sbFwiLFxuICAgICAgICAgICAgfVxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgaW5zdGFuY2UgPSBhd2FpdCBiaW5kaW5nLmNvbm5lY3Qoe1xuICAgICAgICAgICAgYWdlbnQsXG4gICAgICAgICAgICBtZXRhZGF0YTogcmVhZHkuc2V0dXAubWV0YWRhdGEsXG4gICAgICAgICAgICBjd2Q6IHJlYWR5LnNldHVwLmN3ZCxcbiAgICAgICAgICAgIHNpZ25hbDogb3B0cz8uc2lnbmFsLFxuICAgICAgICAgICAgbG9nOiBzZXR1cExvZyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBkb25lQ29ubmVjdEV4aXN0aW5nKCk7XG4gICAgICAgICAgY3R4Ll9jd2QgPSBpbnN0YW5jZS5jd2Q7XG4gICAgICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlY29yZC5zZXR1cC5tZXRhZGF0YSkge1xuICAgICAgICAgIGNvbnN0IG9sZEluc3RhbmNlTWV0YWRhdGEgPSByZWNvcmQuc2V0dXAubWV0YWRhdGE7XG4gICAgICAgICAgc2xlZXBPbGRJbnN0YW5jZSA9IChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkb25lU3RvcE9sZEluc3RhbmNlID0gc2V0dXBMb2cudGltZShcbiAgICAgICAgICAgICAgXCJzdG9wIG9sZCBzYW5kYm94IGluc3RhbmNlXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBjb25zdCBvbGQgPSBhd2FpdCBiaW5kaW5nLmNvbm5lY3Qoe1xuICAgICAgICAgICAgICAgIGFnZW50LFxuICAgICAgICAgICAgICAgIG1ldGFkYXRhOiBvbGRJbnN0YW5jZU1ldGFkYXRhLFxuICAgICAgICAgICAgICAgIGxvZzogc2V0dXBMb2csXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBhd2FpdCBvbGQuc3RvcCgpO1xuICAgICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAgIGRvbmVTdG9wT2xkSW5zdGFuY2UoKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZG9uZVN0b3BPbGRJbnN0YW5jZSgpO1xuICAgICAgICAgIH0pKCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgIGNvbnN0IHNldHVwXzogU2FuZGJveFtcInNldHVwXCJdID0ge1xuICAgICAgICBiaW5kaW5nOiBiaW5kaW5nTmFtZSxcbiAgICAgICAgdmVyc2lvbjogZWZmZWN0aXZlVmVyc2lvbiA/PyByZWNvcmQ/LnNldHVwPy52ZXJzaW9uID8/IG51bGwsXG4gICAgICAgIG5ldHdvcmtQb2xpY3k6XG4gICAgICAgICAgZWZmZWN0aXZlTmV0d29ya1BvbGljeSA/PyByZWNvcmQ/LnNldHVwPy5uZXR3b3JrUG9saWN5ID8/IG51bGwsXG4gICAgICAgIGNvbXBsZXRlZEF0OiBudWxsLFxuICAgICAgICBtZXRhZGF0YTogbnVsbCxcbiAgICAgICAgY3dkOiBudWxsLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgbmV3UmVjb3JkOiBTYW5kYm94ID0ge1xuICAgICAgICBpZDogc2FuZGJveElkLFxuICAgICAgICBzZXR1cDogc2V0dXBfLFxuICAgICAgICBjcmVhdGVkQXQ6IHJlY29yZD8uY3JlYXRlZEF0ID8/IG5vdyxcbiAgICAgICAgbGFzdEFjdGl2ZUF0OiBub3csXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBkb25lU3RvcmFnZVNldFBlbmRpbmcgPSBzZXR1cExvZy50aW1lKFxuICAgICAgICBcInN0b3JhZ2Uuc2FuZGJveC5zZXQgKHNldHVwIHBlbmRpbmcpXCJcbiAgICAgICk7XG4gICAgICBhd2FpdCBhZ2VudC5zdG9yYWdlLnNhbmRib3guc2V0KHNhbmRib3hJZCwgbmV3UmVjb3JkKTtcbiAgICAgIGRvbmVTdG9yYWdlU2V0UGVuZGluZygpO1xuXG4gICAgICByZXNvbHZlQmxvY2tpbmdQcm9taXNlKCk7XG5cbiAgICAgIGNvbnN0IGRvbmVCaW5kaW5nQ3JlYXRlID0gc2V0dXBMb2cudGltZShcImJpbmRpbmcuY3JlYXRlXCIpO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYmluZGluZy5jcmVhdGUoe1xuICAgICAgICBjd2Q6IGN0eC5fY3dkID8/IFwiLlwiLFxuICAgICAgICBhZ2VudCxcbiAgICAgICAgc2V0dXA6IHtcbiAgICAgICAgICAuLi5zZXR1cF8sXG4gICAgICAgICAgcnVuOiBlZmZlY3RpdmVSdW4sXG4gICAgICAgICAgY29uZmlnOiBlZmZlY3RpdmVDb25maWcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlY29yZDogbmV3UmVjb3JkLFxuICAgICAgICBzaWduYWw6IG9wdHM/LnNpZ25hbCxcbiAgICAgICAgbG9nOiBzZXR1cExvZyxcbiAgICAgIH0pO1xuICAgICAgZG9uZUJpbmRpbmdDcmVhdGUoKTtcblxuICAgICAgc2V0dXBfLmNvbXBsZXRlZEF0ID0gRGF0ZS5ub3coKTtcbiAgICAgIHNldHVwXy5tZXRhZGF0YSA9IHJlc3VsdC5tZXRhZGF0YTtcbiAgICAgIHNldHVwXy5jd2QgPSByZXN1bHQuaW5zdGFuY2UuY3dkO1xuXG4gICAgICBjb25zdCBkb25lU3RvcmFnZVVwZGF0ZUNvbXBsZXRlID0gc2V0dXBMb2cudGltZShcbiAgICAgICAgXCJzdG9yYWdlLnNhbmRib3gudXBkYXRlIChzZXR1cCBjb21wbGV0ZSlcIlxuICAgICAgKTtcbiAgICAgIGF3YWl0IGFnZW50LnN0b3JhZ2Uuc2FuZGJveC51cGRhdGUoc2FuZGJveElkLCB7XG4gICAgICAgIHNldHVwOiBzZXR1cF8sXG4gICAgICAgIGxhc3RBY3RpdmVBdDogRGF0ZS5ub3coKSxcbiAgICAgIH0pO1xuICAgICAgZG9uZVN0b3JhZ2VVcGRhdGVDb21wbGV0ZSgpO1xuXG4gICAgICBjdHguX2N3ZCA9IHJlc3VsdC5pbnN0YW5jZS5jd2Q7XG4gICAgICByZXR1cm4gcmVzdWx0Lmluc3RhbmNlO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY3R4Ll9wZW5kaW5nU2V0dXAgPSB1bmRlZmluZWQ7XG4gICAgICByZWplY3RCbG9ja2luZ1Byb21pc2UoZXJyKTtcbiAgICAgIHRocm93IGVycjtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgY29uc3QgZG9uZUZpbmFsaXplID0gc2V0dXBMb2cudGltZShcImZpbmFsaXplIHNldHVwXCIpO1xuICAgICAgYXdhaXQgc2xlZXBPbGRJbnN0YW5jZTtcbiAgICAgIGRvbmVGaW5hbGl6ZSgpO1xuICAgICAgZG9uZVBlbmRpbmdTZXR1cCgpO1xuICAgIH1cbiAgfSkoKTtcblxuICBjb25zdCBkb25lV2FpdEZvclVuYmxvY2sgPSBzZXR1cExvZy50aW1lKFwid2FpdCBmb3Igc2V0dXAgdW5ibG9ja1wiKTtcbiAgYXdhaXQgYmxvY2tpbmdQcm9taXNlO1xuICBkb25lV2FpdEZvclVuYmxvY2soKTtcbiAgcmV0dXJuIHsgZG9uZTogY3R4Ll9wZW5kaW5nU2V0dXAgfTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmUoXG4gIGN0eDogU2FuZGJveENvbnRleHQsXG4gIHNpZ25hbD86IEFib3J0U2lnbmFsXG4pOiBQcm9taXNlPFNhbmRib3hJbnN0YW5jZT4ge1xuICBjb25zdCBzYW5kYm94SWQgPSBhd2FpdCByZXNvbHZlU2FuZGJveElkKGN0eCk7XG4gIGNvbnN0IGFnZW50ID0gY3R4LmFnZW50O1xuICBjb25zdCBsb2cgPSBjcmVhdGVMb2dnZXIoe1xuICAgIGNvbmZpZzogeyAuLi5hZ2VudC5vcHRpb25zLmxvZ2dpbmcsIG5hbWU6IGFnZW50Lm5hbWUgfSxcbiAgICBzdWJzeXN0ZW06IFwic2FuZGJveDpyZXNvbHZlXCIsXG4gICAgY29udGV4dDogeyBzYW5kYm94SWQgfSxcbiAgfSk7XG5cbiAgaWYgKGN0eC5fcGVuZGluZ1NldHVwKSB7XG4gICAgcmV0dXJuIGF3YWl0IGN0eC5fcGVuZGluZ1NldHVwO1xuICB9XG5cbiAgbGV0IHJlY29yZCA9IGF3YWl0IGFnZW50LnN0b3JhZ2Uuc2FuZGJveC5nZXQoc2FuZGJveElkKTtcblxuICBpZiAoIXJlY29yZCkge1xuICAgIGNvbnN0IHsgZG9uZSB9ID0gYXdhaXQgc2V0dXAoY3R4LCB7IHNpZ25hbCB9KTtcbiAgICByZXR1cm4gYXdhaXQgZG9uZTtcbiAgfVxuXG4gIGlmICghcmVjb3JkLnNldHVwPy5jb21wbGV0ZWRBdCkge1xuICAgIGF3YWl0IHBvbGxVbnRpbFJlYWR5KGN0eCwgc2lnbmFsKTtcbiAgICByZWNvcmQgPSBhd2FpdCBhZ2VudC5zdG9yYWdlLnNhbmRib3guZ2V0KHNhbmRib3hJZCk7XG4gIH1cblxuICBpZiAoIXJlY29yZCkge1xuICAgIHRocm93IG5ldyBTYW5kYm94Tm90Rm91bmRFcnJvcih7IGlkOiBzYW5kYm94SWQgfSk7XG4gIH1cblxuICBjb25zdCB7IGJpbmRpbmcgfSA9IGF3YWl0IHJlc29sdmVCaW5kaW5nKFxuICAgIGN0eC5hZ2VudC5vcHRpb25zLnNhbmRib3gsXG4gICAgcmVjb3JkLnNldHVwLmJpbmRpbmdcbiAgKTtcblxuICBhZ2VudC5zdG9yYWdlLnNhbmRib3hcbiAgICAudXBkYXRlKHNhbmRib3hJZCwgeyBsYXN0QWN0aXZlQXQ6IERhdGUubm93KCkgfSlcbiAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICBsb2cuZXJyb3IoXCJGYWlsZWQgdG8gdXBkYXRlIHNhbmRib3ggbGFzdEFjdGl2ZUF0XCIsIHsgZXJyb3IgfSk7XG4gICAgfSk7XG5cbiAgY29uc3QgaW5zdGFuY2UgPSBhd2FpdCBiaW5kaW5nLmNvbm5lY3Qoe1xuICAgIGFnZW50LFxuICAgIG1ldGFkYXRhOiByZWNvcmQuc2V0dXAubWV0YWRhdGEsXG4gICAgY3dkOiByZWNvcmQuc2V0dXAuY3dkLFxuICAgIHNpZ25hbCxcbiAgICBsb2csXG4gIH0pO1xuICBjdHguX2N3ZCA9IGluc3RhbmNlLmN3ZDtcbiAgcmV0dXJuIGluc3RhbmNlO1xufVxuXG5hc3luYyBmdW5jdGlvbiBwb2xsVW50aWxSZWFkeShcbiAgY3R4OiBTYW5kYm94Q29udGV4dCxcbiAgc2lnbmFsPzogQWJvcnRTaWduYWxcbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBpZCA9IGN0eC5zYW5kYm94SWQhO1xuICBjb25zdCBkZWFkbGluZSA9IERhdGUubm93KCkgKyBQT0xMX1RJTUVPVVRfTVM7XG5cbiAgd2hpbGUgKERhdGUubm93KCkgPCBkZWFkbGluZSkge1xuICAgIHNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtcblxuICAgIGNvbnN0IHJlY29yZCA9IGF3YWl0IGN0eC5hZ2VudC5zdG9yYWdlLnNhbmRib3guZ2V0KGlkKTtcbiAgICBpZiAocmVjb3JkPy5zZXR1cD8uY29tcGxldGVkQXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBhd2FpdCBuZXcgUHJvbWlzZSgocikgPT4gc2V0VGltZW91dChyLCBQT0xMX0lOVEVSVkFMX01TKSk7XG4gIH1cblxuICB0aHJvdyBuZXcgU2FuZGJveEVycm9yKHtcbiAgICByZWFzb246IGBUaW1lZCBvdXQgd2FpdGluZyBmb3Igc2FuZGJveCBcIiR7aWR9XCIgc2V0dXAgdG8gY29tcGxldGVgLFxuICB9KTtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IFNhbmRib3hJbnN0YW5jZSB9IGZyb20gXCIuL2FkYXB0ZXJcIjtcbmltcG9ydCB0eXBlIHsgU2FuZGJveENvbnRleHQgfSBmcm9tIFwiLi9oYW5kbGVcIjtcbmltcG9ydCB7IHJlc29sdmUgfSBmcm9tIFwiLi9zZXR1cFwiO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZXhlYyhcbiAgc2FuZGJveENvbnRleHQ6IFNhbmRib3hDb250ZXh0LFxuICAuLi5vcHRzOiBQYXJhbWV0ZXJzPFNhbmRib3hJbnN0YW5jZVtcImV4ZWNcIl0+XG4pIHtcbiAgLy8gbm90ZTogLmV4ZWMgY2FuJ3QgYmUgYSBzdGVwIGJlY2F1c2UgaXQgcmV0dXJucyBsb2dzIGFuZCBhIHJlc3VsdCBwcm9taXNlIHdoaWNoIGNhbid0IGJlIHNlcmlhbGl6ZWRcbiAgY29uc3Qgc2J4ID0gYXdhaXQgcmVzb2x2ZShzYW5kYm94Q29udGV4dCk7XG4gIHJldHVybiBhd2FpdCBzYnguZXhlYyguLi5vcHRzKTtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IFNhbmRib3hJbnN0YW5jZSB9IGZyb20gXCIuL2FkYXB0ZXJcIjtcbmltcG9ydCB0eXBlIHsgU2FuZGJveENvbnRleHQgfSBmcm9tIFwiLi9oYW5kbGVcIjtcbmltcG9ydCB7IHJlc29sdmUgfSBmcm9tIFwiLi9zZXR1cFwiO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0RG9tYWluKFxuICBzYW5kYm94Q29udGV4dDogU2FuZGJveENvbnRleHQsXG4gIC4uLm9wdHM6IFBhcmFtZXRlcnM8U2FuZGJveEluc3RhbmNlW1wiZ2V0RG9tYWluXCJdPlxuKSB7XG4gIFwidXNlIHN0ZXBcIjtcbiAgY29uc3Qgc2J4ID0gYXdhaXQgcmVzb2x2ZShzYW5kYm94Q29udGV4dCk7XG4gIHJldHVybiBhd2FpdCBzYnguZ2V0RG9tYWluKC4uLm9wdHMpO1xufVxuIiwgImltcG9ydCB0eXBlIHsgU2FuZGJveEluc3RhbmNlIH0gZnJvbSBcIi4vYWRhcHRlclwiO1xuaW1wb3J0IHR5cGUgeyBTYW5kYm94Q29udGV4dCB9IGZyb20gXCIuL2hhbmRsZVwiO1xuaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gXCIuL3NldHVwXCI7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRTdGF0dXMoXG4gIHNhbmRib3hDb250ZXh0OiBTYW5kYm94Q29udGV4dCxcbiAgLi4ub3B0czogUGFyYW1ldGVyczxTYW5kYm94SW5zdGFuY2VbXCJnZXRTdGF0dXNcIl0+XG4pIHtcbiAgXCJ1c2Ugc3RlcFwiO1xuICBjb25zdCBzYnggPSBhd2FpdCByZXNvbHZlKHNhbmRib3hDb250ZXh0KTtcbiAgcmV0dXJuIGF3YWl0IHNieC5nZXRTdGF0dXMoLi4ub3B0cyk7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBTYW5kYm94SW5zdGFuY2UgfSBmcm9tIFwiLi9hZGFwdGVyXCI7XG5pbXBvcnQgdHlwZSB7IFNhbmRib3hDb250ZXh0IH0gZnJvbSBcIi4vaGFuZGxlXCI7XG5pbXBvcnQgeyByZXNvbHZlIH0gZnJvbSBcIi4vc2V0dXBcIjtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGtpbGwoXG4gIHNhbmRib3hDb250ZXh0OiBTYW5kYm94Q29udGV4dCxcbiAgLi4ub3B0czogUGFyYW1ldGVyczxTYW5kYm94SW5zdGFuY2VbXCJraWxsXCJdPlxuKSB7XG4gIFwidXNlIHN0ZXBcIjtcbiAgY29uc3Qgc2J4ID0gYXdhaXQgcmVzb2x2ZShzYW5kYm94Q29udGV4dCk7XG4gIHJldHVybiBhd2FpdCBzYngua2lsbCguLi5vcHRzKTtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IFNhbmRib3hJbnN0YW5jZSB9IGZyb20gXCIuL2FkYXB0ZXJcIjtcbmltcG9ydCB0eXBlIHsgU2FuZGJveENvbnRleHQgfSBmcm9tIFwiLi9oYW5kbGVcIjtcbmltcG9ydCB7IHJlc29sdmUgfSBmcm9tIFwiLi9zZXR1cFwiO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZEZpbGUoXG4gIHNhbmRib3hDb250ZXh0OiBTYW5kYm94Q29udGV4dCxcbiAgLi4ub3B0czogUGFyYW1ldGVyczxTYW5kYm94SW5zdGFuY2VbXCJyZWFkRmlsZVwiXT5cbikge1xuICBcInVzZSBzdGVwXCI7XG4gIGNvbnN0IHNieCA9IGF3YWl0IHJlc29sdmUoc2FuZGJveENvbnRleHQpO1xuICByZXR1cm4gYXdhaXQgc2J4LnJlYWRGaWxlKC4uLm9wdHMpO1xufVxuIiwgImltcG9ydCB0eXBlIHsgU2FuZGJveEluc3RhbmNlIH0gZnJvbSBcIi4vYWRhcHRlclwiO1xuaW1wb3J0IHR5cGUgeyBTYW5kYm94Q29udGV4dCB9IGZyb20gXCIuL2hhbmRsZVwiO1xuaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gXCIuL3NldHVwXCI7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzbmFwc2hvdChcbiAgc2FuZGJveENvbnRleHQ6IFNhbmRib3hDb250ZXh0LFxuICAuLi5vcHRzOiBQYXJhbWV0ZXJzPFNhbmRib3hJbnN0YW5jZVtcInNuYXBzaG90XCJdPlxuKSB7XG4gIFwidXNlIHN0ZXBcIjtcbiAgY29uc3Qgc2J4ID0gYXdhaXQgcmVzb2x2ZShzYW5kYm94Q29udGV4dCk7XG4gIHJldHVybiBhd2FpdCBzYnguc25hcHNob3QoLi4ub3B0cyk7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBTYW5kYm94SW5zdGFuY2UgfSBmcm9tIFwiLi9hZGFwdGVyXCI7XG5pbXBvcnQgdHlwZSB7IFNhbmRib3hDb250ZXh0IH0gZnJvbSBcIi4vaGFuZGxlXCI7XG5pbXBvcnQgeyByZXNvbHZlIH0gZnJvbSBcIi4vc2V0dXBcIjtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHN0YXJ0KFxuICBzYW5kYm94Q29udGV4dDogU2FuZGJveENvbnRleHQsXG4gIC4uLm9wdHM6IFBhcmFtZXRlcnM8U2FuZGJveEluc3RhbmNlW1wic3RhcnRcIl0+XG4pIHtcbiAgXCJ1c2Ugc3RlcFwiO1xuICBjb25zdCBzYnggPSBhd2FpdCByZXNvbHZlKHNhbmRib3hDb250ZXh0KTtcbiAgcmV0dXJuIGF3YWl0IHNieC5zdGFydCguLi5vcHRzKTtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IFNhbmRib3hJbnN0YW5jZSB9IGZyb20gXCIuL2FkYXB0ZXJcIjtcbmltcG9ydCB0eXBlIHsgU2FuZGJveENvbnRleHQgfSBmcm9tIFwiLi9oYW5kbGVcIjtcbmltcG9ydCB7IHJlc29sdmUgfSBmcm9tIFwiLi9zZXR1cFwiO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc3RvcChcbiAgc2FuZGJveENvbnRleHQ6IFNhbmRib3hDb250ZXh0LFxuICAuLi5vcHRzOiBQYXJhbWV0ZXJzPFNhbmRib3hJbnN0YW5jZVtcInN0b3BcIl0+XG4pIHtcbiAgXCJ1c2Ugc3RlcFwiO1xuICBjb25zdCBzYnggPSBhd2FpdCByZXNvbHZlKHNhbmRib3hDb250ZXh0KTtcbiAgcmV0dXJuIGF3YWl0IHNieC5zdG9wKC4uLm9wdHMpO1xufVxuIiwgImltcG9ydCB0eXBlIHsgU2FuZGJveEluc3RhbmNlIH0gZnJvbSBcIi4vYWRhcHRlclwiO1xuaW1wb3J0IHR5cGUgeyBTYW5kYm94Q29udGV4dCB9IGZyb20gXCIuL2hhbmRsZVwiO1xuaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gXCIuL3NldHVwXCI7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB1cGRhdGVOZXR3b3JrUG9saWN5KFxuICBzYW5kYm94Q29udGV4dDogU2FuZGJveENvbnRleHQsXG4gIC4uLm9wdHM6IFBhcmFtZXRlcnM8U2FuZGJveEluc3RhbmNlW1widXBkYXRlTmV0d29ya1BvbGljeVwiXT5cbikge1xuICBcInVzZSBzdGVwXCI7XG4gIGNvbnN0IHNieCA9IGF3YWl0IHJlc29sdmUoc2FuZGJveENvbnRleHQpO1xuICByZXR1cm4gYXdhaXQgc2J4LnVwZGF0ZU5ldHdvcmtQb2xpY3koLi4ub3B0cyk7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBTYW5kYm94SW5zdGFuY2UgfSBmcm9tIFwiLi9hZGFwdGVyXCI7XG5pbXBvcnQgdHlwZSB7IFNhbmRib3hDb250ZXh0IH0gZnJvbSBcIi4vaGFuZGxlXCI7XG5pbXBvcnQgeyByZXNvbHZlIH0gZnJvbSBcIi4vc2V0dXBcIjtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdyaXRlRmlsZXMoXG4gIHNhbmRib3hDb250ZXh0OiBTYW5kYm94Q29udGV4dCxcbiAgLi4ub3B0czogUGFyYW1ldGVyczxTYW5kYm94SW5zdGFuY2VbXCJ3cml0ZUZpbGVzXCJdPlxuKSB7XG4gIFwidXNlIHN0ZXBcIjtcbiAgY29uc3Qgc2J4ID0gYXdhaXQgcmVzb2x2ZShzYW5kYm94Q29udGV4dCk7XG4gIHJldHVybiBhd2FpdCBzYngud3JpdGVGaWxlcyguLi5vcHRzKTtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IFRvb2xTZXQgfSBmcm9tIFwiYWlcIjtcbmltcG9ydCB7IHVsaWQgfSBmcm9tIFwidWxpZFwiO1xuaW1wb3J0IHR5cGUgeyBBbnlBZ2VudCB9IGZyb20gXCIuLi9hZ2VudC9jbGllbnRcIjtcbmltcG9ydCB7IGdldFNlc3Npb25Db250ZXh0cyB9IGZyb20gXCIuLi9hZ2VudC9jbGllbnRcIjtcbmltcG9ydCB0eXBlIHsgU2FuZGJveEJpbmRpbmcgfSBmcm9tIFwiLi4vc2FuZGJveC9hZGFwdGVyXCI7XG5pbXBvcnQgeyBsYXp5U2FuZGJveEhhbmRsZSB9IGZyb20gXCIuLi9zYW5kYm94L2hhbmRsZVwiO1xuaW1wb3J0IHsgaGlzdG9yeSB9IGZyb20gXCIuL2hpc3RvcnlcIjtcbmltcG9ydCB7IGludGVycnVwdCB9IGZyb20gXCIuL2ludGVycnVwdFwiO1xuaW1wb3J0IHsgc2VuZCB9IGZyb20gXCIuL3NlbmRcIjtcbmltcG9ydCB7IHN0cmVhbSB9IGZyb20gXCIuL3N0cmVhbVwiO1xuaW1wb3J0IHsgdXBkYXRlIH0gZnJvbSBcIi4vdXBkYXRlXCI7XG5pbXBvcnQgeyB1c2FnZSB9IGZyb20gXCIuL3VzYWdlXCI7XG5cbnR5cGUgU2Vzc2lvbk9wdGlvbnMgPSB7XG4gIGlkPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgU2Vzc2lvbkNvbnRleHQgPSB7XG4gIGFnZW50OiBBbnlBZ2VudDtcbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gc2Vzc2lvbkhhbmRsZTxcbiAgVG9vbHMgZXh0ZW5kcyBUb29sU2V0LFxuICBUQ29udGV4dCxcbiAgVFNhbmRib3hCaW5kaW5ncyBleHRlbmRzIFNhbmRib3hCaW5kaW5nIHwgU2FuZGJveEJpbmRpbmdbXSA9IFNhbmRib3hCaW5kaW5nLFxuICBUTWVzc2FnZU1ldGFkYXRhID0gdW5rbm93bixcbiAgVFN0YXRlIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbj4oYWdlbnQ6IEFueUFnZW50LCBpZD86IHN0cmluZyB8IFNlc3Npb25PcHRpb25zKSB7XG4gIGNvbnN0IHNlc3Npb25JZCA9XG4gICAgdHlwZW9mIGlkID09PSBcInN0cmluZ1wiID8gaWQgOiAoaWQ/LmlkID8/IGBzZXNzaW9uXyR7dWxpZCgpfWApO1xuXG4gIGNvbnN0IGNvbnRleHRzID0gZ2V0U2Vzc2lvbkNvbnRleHRzKGFnZW50KTtcbiAgbGV0IHNlc3Npb25Db250ZXh0ID0gY29udGV4dHMuZ2V0KHNlc3Npb25JZCk7XG4gIGlmICghc2Vzc2lvbkNvbnRleHQpIHtcbiAgICBzZXNzaW9uQ29udGV4dCA9IHsgYWdlbnQsIHNlc3Npb25JZCB9O1xuICAgIGNvbnRleHRzLnNldChzZXNzaW9uSWQsIHNlc3Npb25Db250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgaWQ6IHNlc3Npb25JZCxcbiAgICBzZW5kOiAoc2VuZDxUb29scywgVENvbnRleHQsIFRNZXNzYWdlTWV0YWRhdGEsIFRTdGF0ZT4pLmJpbmQoXG4gICAgICBudWxsLFxuICAgICAgc2Vzc2lvbkNvbnRleHRcbiAgICApLFxuICAgIHN0cmVhbTogc3RyZWFtLmJpbmQobnVsbCwgc2Vzc2lvbkNvbnRleHQpLFxuICAgIGhpc3Rvcnk6IChoaXN0b3J5PFRvb2xzPikuYmluZChudWxsLCBzZXNzaW9uQ29udGV4dCksXG4gICAgaW50ZXJydXB0OiBpbnRlcnJ1cHQuYmluZChudWxsLCBzZXNzaW9uQ29udGV4dCksXG4gICAgdXNhZ2U6IHVzYWdlLmJpbmQobnVsbCwgc2Vzc2lvbkNvbnRleHQpLFxuICAgIHVwZGF0ZTogKHVwZGF0ZTxUU3RhdGU+KS5iaW5kKG51bGwsIHNlc3Npb25Db250ZXh0KSxcbiAgICBzYW5kYm94OiBsYXp5U2FuZGJveEhhbmRsZTxUU2FuZGJveEJpbmRpbmdzPihhZ2VudCwgc2Vzc2lvbklkKSxcbiAgfTtcbn1cbiIsICJpbXBvcnQgdHlwZSB7XG4gIEluZmVyVUlUb29scyxcbiAgUmVhc29uaW5nVUlQYXJ0LFxuICBUZXh0VUlQYXJ0LFxuICBUb29sU2V0LFxuICBVSU1lc3NhZ2UsXG59IGZyb20gXCJhaVwiO1xuaW1wb3J0IHR5cGUgeyBBZ2VudERhdGFUeXBlcyB9IGZyb20gXCIuLi9hZ2VudC9yZWdpc3RyeVwiO1xuaW1wb3J0IHR5cGUgeyBNZXNzYWdlLCBQYXJ0IH0gZnJvbSBcIi4uL3N0b3JhZ2VcIjtcblxuLyoqIFN1Yi10b29sIHBhcnRzIChmcm9tIEphdmFTY3JpcHQgbWV0YS10b29sKSB1c2UgdGhpcyB0b29sQ2FsbElkIHByZWZpeC4gKi9cbmZ1bmN0aW9uIGlzU3ViVG9vbFBhcnQocGFydDogUGFydCk6IGJvb2xlYW4ge1xuICBjb25zdCBwID0gcGFydC5wYXJ0IGFzIHsgdG9vbENhbGxJZD86IHN0cmluZyB9O1xuICByZXR1cm4gdHlwZW9mIHA/LnRvb2xDYWxsSWQgPT09IFwic3RyaW5nXCIgJiYgcC50b29sQ2FsbElkLnN0YXJ0c1dpdGgoXCJqc190Y19cIik7XG59XG5cbmZ1bmN0aW9uIGlzU3RyZWFtaW5nQ29udGVudChcbiAgcGFydDogdW5rbm93blxuKTogcGFydCBpcyBUZXh0VUlQYXJ0IHwgUmVhc29uaW5nVUlQYXJ0IHtcbiAgcmV0dXJuIChcbiAgICB0eXBlb2YgcGFydCA9PT0gXCJvYmplY3RcIiAmJlxuICAgIHBhcnQgIT09IG51bGwgJiZcbiAgICBcInR5cGVcIiBpbiBwYXJ0ICYmXG4gICAgKHBhcnQudHlwZSA9PT0gXCJ0ZXh0XCIgfHwgcGFydC50eXBlID09PSBcInJlYXNvbmluZ1wiKVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlJbnRlcnJ1cHRDdXRvZmYoe1xuICBwYXJ0cyxcbiAgbGFzdFBhcnQsXG59OiB7XG4gIHBhcnRzOiBQYXJ0W107XG4gIGxhc3RQYXJ0OiB7IGluZGV4OiBudW1iZXI7IHBhcnQ6IHVua25vd24gfTtcbn0pOiBQYXJ0W10ge1xuICByZXR1cm4gcGFydHNcbiAgICAuZmlsdGVyKChwKSA9PiBwLmluZGV4IDw9IGxhc3RQYXJ0LmluZGV4KVxuICAgIC5tYXAoKHApID0+IHtcbiAgICAgIGlmIChwLmluZGV4ICE9PSBsYXN0UGFydC5pbmRleCkge1xuICAgICAgICByZXR1cm4gcDtcbiAgICAgIH1cbiAgICAgIC8qKlxuICAgICAgICogT25seSByZXBsYWNlIGNvbnRlbnQgZm9yIHN0cmVhbWluZyBwYXJ0cyAodGV4dCwgcmVhc29uaW5nKSB3aGVyZSB0aGVcbiAgICAgICAqIGNsaWVudCdzIHRydW5jYXRlZCB2ZXJzaW9uIGlzIG1vcmUgYWNjdXJhdGUgdGhhbiB0aGUgc2VydmVyJ3MgZnVsbFxuICAgICAgICogdmVyc2lvbi4gRm9yIHN0YXRlZnVsIHBhcnRzICh0b29scyksIHRoZSBzZXJ2ZXIncyB2ZXJzaW9uIGlzXG4gICAgICAgKiBhdXRob3JpdGF0aXZlIFx1MjAxNCBpdCBtYXkgaGF2ZSBldm9sdmVkIChlLmcuIGFwcHJvdmFsLXJlcXVlc3RlZCBcdTIxOTJcbiAgICAgICAqIG91dHB1dC1kZW5pZWQpIGFmdGVyIHRoZSBjbGllbnQgc25hcHNob3Qgd2FzIHRha2VuLlxuICAgICAgICovXG4gICAgICBpZiAoaXNTdHJlYW1pbmdDb250ZW50KGxhc3RQYXJ0LnBhcnQpKSB7XG4gICAgICAgIHJldHVybiB7IC4uLnAsIHBhcnQ6IGxhc3RQYXJ0LnBhcnQgfSBhcyBQYXJ0O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHA7XG4gICAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3NlbWJsZVVJTWVzc2FnZXM8VG9vbHMgZXh0ZW5kcyBUb29sU2V0PihvcHRzOiB7XG4gIG1lc3NhZ2VzOiBNZXNzYWdlW107XG4gIHBhcnRzOiBQYXJ0W107XG4gIHVudGlsPzogbnVtYmVyO1xuICBpbmNsdWRlUXVldWVkPzogYm9vbGVhbjtcbiAgLyoqIFdoZW4gdHJ1ZSwgZmlsdGVycyBvdXQgc3ViLXRvb2wgcGFydHMgc28gdGhlIExMTSBkb2Vzbid0IHNlZSB0aGVtLiAqL1xuICBleGNsdWRlU3ViVG9vbFBhcnRzPzogYm9vbGVhbjtcbn0pIHtcbiAgdHlwZSBUeXBlZFVJTWVzc2FnZSA9IFVJTWVzc2FnZTx1bmtub3duLCBBZ2VudERhdGFUeXBlcywgSW5mZXJVSVRvb2xzPFRvb2xzPj47XG5cbiAgbGV0IGZpbHRlcmVkID0gb3B0cy5tZXNzYWdlcztcblxuICBpZiAob3B0cy51bnRpbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgdW50aWwgPSBvcHRzLnVudGlsO1xuICAgIGZpbHRlcmVkID0gZmlsdGVyZWQuZmlsdGVyKChtKSA9PiBtLmNyZWF0ZWRBdCA8PSB1bnRpbCk7XG4gIH1cblxuICBpZiAoIW9wdHMuaW5jbHVkZVF1ZXVlZCkge1xuICAgIGZpbHRlcmVkID0gZmlsdGVyZWQuZmlsdGVyKChtKSA9PiBtLnN0YXJ0ZWRBdCAhPT0gbnVsbCk7XG4gIH1cblxuICAvLyBTb3J0IGJ5IGNyZWF0ZWRBdCBzbyBtZXNzYWdlcyBhcmUgaW4gY2hyb25vbG9naWNhbCBvcmRlciByZWdhcmRsZXNzIG9mXG4gIC8vIGhvdyB0aGUgc3RvcmFnZSBsYXllciByZXR1cm5zIHRoZW0gKGUuZy4gbG9jYWwgRlMgcmVhZHMgaW4gcmVhZGRpciBvcmRlcikuXG4gIGZpbHRlcmVkID0gWy4uLmZpbHRlcmVkXS5zb3J0KChhLCBiKSA9PiBhLmNyZWF0ZWRBdCAtIGIuY3JlYXRlZEF0KTtcblxuICBjb25zdCBwYXJ0cyA9IG9wdHMuZXhjbHVkZVN1YlRvb2xQYXJ0c1xuICAgID8gb3B0cy5wYXJ0cy5maWx0ZXIoKHApID0+ICFpc1N1YlRvb2xQYXJ0KHApKVxuICAgIDogb3B0cy5wYXJ0cztcblxuICBjb25zdCBwYXJ0c0J5TWVzc2FnZSA9IG5ldyBNYXA8c3RyaW5nLCBQYXJ0W10+KCk7XG4gIGZvciAoY29uc3QgcGFydCBvZiBwYXJ0cykge1xuICAgIGNvbnN0IG1lc3NhZ2VJZCA9IFN0cmluZyhwYXJ0Lm1lc3NhZ2VJZCk7XG4gICAgY29uc3QgZXhpc3RpbmcgPSBwYXJ0c0J5TWVzc2FnZS5nZXQobWVzc2FnZUlkKSA/PyBbXTtcbiAgICBleGlzdGluZy5wdXNoKHBhcnQpO1xuICAgIHBhcnRzQnlNZXNzYWdlLnNldChtZXNzYWdlSWQsIGV4aXN0aW5nKTtcbiAgfVxuXG4gIHJldHVybiBmaWx0ZXJlZFxuICAgIC5tYXAoKG0pID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2VJZCA9IFN0cmluZyhtLmlkKTtcbiAgICAgIGxldCBtZXNzYWdlUGFydHMgPSBwYXJ0c0J5TWVzc2FnZS5nZXQobWVzc2FnZUlkKSA/PyBbXTtcbiAgICAgIG1lc3NhZ2VQYXJ0cy5zb3J0KChhLCBiKSA9PiBhLmluZGV4IC0gYi5pbmRleCk7XG5cbiAgICAgIGlmIChtLmludGVycnVwdGVkTGFzdFBhcnQgIT0gbnVsbCkge1xuICAgICAgICBtZXNzYWdlUGFydHMgPSBhcHBseUludGVycnVwdEN1dG9mZih7XG4gICAgICAgICAgcGFydHM6IG1lc3NhZ2VQYXJ0cyxcbiAgICAgICAgICBsYXN0UGFydDogbS5pbnRlcnJ1cHRlZExhc3RQYXJ0LFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWQ6IG1lc3NhZ2VJZCxcbiAgICAgICAgcm9sZTogbS5yb2xlLFxuICAgICAgICBwYXJ0czogbWVzc2FnZVBhcnRzLm1hcCgocCkgPT4gcC5wYXJ0KSxcbiAgICAgICAgLi4uKG0ubWV0YWRhdGEgIT0gbnVsbCA/IHsgbWV0YWRhdGE6IG0ubWV0YWRhdGEgfSA6IHt9KSxcbiAgICAgIH0gYXMgVHlwZWRVSU1lc3NhZ2U7XG4gICAgfSlcbiAgICAuZmlsdGVyKChtKSA9PiBtLnBhcnRzLmxlbmd0aCA+IDApO1xufVxuIiwgImV4cG9ydCB0eXBlIFN0ZXBVc2FnZSA9IHtcbiAgc3RlcEluZGV4OiBudW1iZXI7XG4gIG1vZGVsOiBzdHJpbmc7XG4gIGlucHV0VG9rZW5zOiBudW1iZXI7XG4gIG91dHB1dFRva2VuczogbnVtYmVyO1xuICB0b3RhbFRva2VuczogbnVtYmVyO1xuICBjYWNoZVJlYWRUb2tlbnM6IG51bWJlcjtcbiAgY2FjaGVXcml0ZVRva2VuczogbnVtYmVyO1xuICByZWFzb25pbmdUb2tlbnM6IG51bWJlcjtcbn07XG5cbmV4cG9ydCB0eXBlIFVzYWdlU3VtbWFyeSA9IHtcbiAgbW9kZWw6IHN0cmluZztcbiAgaW5wdXRUb2tlbnM6IG51bWJlcjtcbiAgb3V0cHV0VG9rZW5zOiBudW1iZXI7XG4gIHRvdGFsVG9rZW5zOiBudW1iZXI7XG4gIGNhY2hlUmVhZFRva2VuczogbnVtYmVyO1xuICBjYWNoZVdyaXRlVG9rZW5zOiBudW1iZXI7XG4gIHJlYXNvbmluZ1Rva2VuczogbnVtYmVyO1xuICBzdGVwQ291bnQ6IG51bWJlcjtcbn07XG5cbmV4cG9ydCB0eXBlIFNlc3Npb25Vc2FnZSA9IHtcbiAgdG90YWw6IFVzYWdlU3VtbWFyeSAmIHsgbWVzc2FnZUNvdW50OiBudW1iZXIgfTtcbiAgYnlNZXNzYWdlSWQ6IFJlY29yZDxzdHJpbmcsIFVzYWdlU3VtbWFyeSB8IG51bGw+O1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVTZXNzaW9uVXNhZ2UoXG4gIG1lc3NhZ2VzOiBBcnJheTx7XG4gICAgaWQ6IHN0cmluZztcbiAgICB1c2FnZTogeyBzdGVwczogU3RlcFVzYWdlW107IHN1bW1hcnk6IFVzYWdlU3VtbWFyeSB9IHwgbnVsbDtcbiAgfT5cbik6IFNlc3Npb25Vc2FnZSB7XG4gIGNvbnN0IGJ5TWVzc2FnZUlkOiBSZWNvcmQ8c3RyaW5nLCBVc2FnZVN1bW1hcnkgfCBudWxsPiA9IHt9O1xuICBmb3IgKGNvbnN0IG0gb2YgbWVzc2FnZXMpIHtcbiAgICBieU1lc3NhZ2VJZFttLmlkXSA9IG0udXNhZ2U/LnN1bW1hcnkgPz8gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IHN1bW1hcmllcyA9IG1lc3NhZ2VzXG4gICAgLm1hcCgobSkgPT4gbS51c2FnZT8uc3VtbWFyeSlcbiAgICAuZmlsdGVyKChzKTogcyBpcyBVc2FnZVN1bW1hcnkgPT4gcyAhPT0gdW5kZWZpbmVkKTtcblxuICBjb25zdCB0b3RhbCA9IHtcbiAgICBtb2RlbDogc3VtbWFyaWVzWzBdPy5tb2RlbCA/PyBcInVua25vd25cIixcbiAgICBpbnB1dFRva2Vuczogc3VtbWFyaWVzLnJlZHVjZSgoYWNjLCBzKSA9PiBhY2MgKyBzLmlucHV0VG9rZW5zLCAwKSxcbiAgICBvdXRwdXRUb2tlbnM6IHN1bW1hcmllcy5yZWR1Y2UoKGFjYywgcykgPT4gYWNjICsgcy5vdXRwdXRUb2tlbnMsIDApLFxuICAgIHRvdGFsVG9rZW5zOiBzdW1tYXJpZXMucmVkdWNlKChhY2MsIHMpID0+IGFjYyArIHMudG90YWxUb2tlbnMsIDApLFxuICAgIGNhY2hlUmVhZFRva2Vuczogc3VtbWFyaWVzLnJlZHVjZSgoYWNjLCBzKSA9PiBhY2MgKyBzLmNhY2hlUmVhZFRva2VucywgMCksXG4gICAgY2FjaGVXcml0ZVRva2Vuczogc3VtbWFyaWVzLnJlZHVjZSgoYWNjLCBzKSA9PiBhY2MgKyBzLmNhY2hlV3JpdGVUb2tlbnMsIDApLFxuICAgIHJlYXNvbmluZ1Rva2Vuczogc3VtbWFyaWVzLnJlZHVjZSgoYWNjLCBzKSA9PiBhY2MgKyBzLnJlYXNvbmluZ1Rva2VucywgMCksXG4gICAgc3RlcENvdW50OiBzdW1tYXJpZXMucmVkdWNlKChhY2MsIHMpID0+IGFjYyArIHMuc3RlcENvdW50LCAwKSxcbiAgICBtZXNzYWdlQ291bnQ6IHN1bW1hcmllcy5sZW5ndGgsXG4gIH07XG5cbiAgcmV0dXJuIHsgdG90YWwsIGJ5TWVzc2FnZUlkIH07XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBUb29sU2V0IH0gZnJvbSBcImFpXCI7XG5pbXBvcnQgeyBhc3NlbWJsZVVJTWVzc2FnZXMgfSBmcm9tIFwiLi4vdXRpbHMvdWlcIjtcbmltcG9ydCB7IGNvbXB1dGVTZXNzaW9uVXNhZ2UsIHR5cGUgU2Vzc2lvblVzYWdlIH0gZnJvbSBcIi4uL3V0aWxzL3VzYWdlXCI7XG5pbXBvcnQgdHlwZSB7IFNlc3Npb25Db250ZXh0IH0gZnJvbSBcIi4vaGFuZGxlXCI7XG5cbmV4cG9ydCB0eXBlIEhpc3RvcnlSZXN1bHQgPSB7XG4gIG1lc3NhZ2VzOiBSZXR1cm5UeXBlPHR5cGVvZiBhc3NlbWJsZVVJTWVzc2FnZXM+O1xuICBzdHJlYW1pbmdNZXNzYWdlSWQ6IHN0cmluZyB8IG51bGw7XG4gIHVzYWdlOiBTZXNzaW9uVXNhZ2U7XG59O1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaGlzdG9yeTxUb29scyBleHRlbmRzIFRvb2xTZXQ+KFxuICBzZXNzaW9uQ29udGV4dDogU2Vzc2lvbkNvbnRleHRcbikge1xuICBcInVzZSBzdGVwXCI7XG4gIGNvbnN0IFtzZXNzaW9uLCBtZXNzYWdlcywgcGFydHNdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgIHNlc3Npb25Db250ZXh0LmFnZW50LnN0b3JhZ2Uuc2Vzc2lvbi5nZXQoc2Vzc2lvbkNvbnRleHQuc2Vzc2lvbklkKSxcbiAgICBzZXNzaW9uQ29udGV4dC5hZ2VudC5zdG9yYWdlLm1lc3NhZ2UubGlzdEJ5U2Vzc2lvbihcbiAgICAgIHNlc3Npb25Db250ZXh0LnNlc3Npb25JZFxuICAgICksXG4gICAgc2Vzc2lvbkNvbnRleHQuYWdlbnQuc3RvcmFnZS5wYXJ0Lmxpc3RCeVNlc3Npb24oc2Vzc2lvbkNvbnRleHQuc2Vzc2lvbklkKSxcbiAgXSk7XG5cbiAgY29uc3QgbGFzdEFzc2lzdGFudCA9XG4gICAgbWVzc2FnZXMuZmluZChcbiAgICAgIChtKSA9PiBtLmlkID09PSBzZXNzaW9uPy5sYXN0TWVzc2FnZUlkICYmIG0ucm9sZSA9PT0gXCJhc3Npc3RhbnRcIlxuICAgICkgPz8gbWVzc2FnZXMuZmlsdGVyKChtKSA9PiBtLnJvbGUgPT09IFwiYXNzaXN0YW50XCIpLmF0KC0xKTtcblxuICBjb25zdCBpc1N0cmVhbWluZyA9XG4gICAgbGFzdEFzc2lzdGFudD8uY29tcGxldGVkQXQgPT09IG51bGwgJiZcbiAgICBsYXN0QXNzaXN0YW50Py5pbnRlcnJ1cHRlZEF0ID09PSBudWxsO1xuICBjb25zdCBzdHJlYW1pbmdNZXNzYWdlSWQgPSBpc1N0cmVhbWluZyA/IGxhc3RBc3Npc3RhbnQuaWQgOiBudWxsO1xuICBjb25zdCB2aXNpYmxlVW50aWwgPSBsYXN0QXNzaXN0YW50Py5jcmVhdGVkQXQ7XG5cbiAgY29uc3QgYXNzZW1ibGVkID0gYXNzZW1ibGVVSU1lc3NhZ2VzPFRvb2xzPih7XG4gICAgbWVzc2FnZXMsXG4gICAgcGFydHMsXG4gICAgaW5jbHVkZVF1ZXVlZDogdmlzaWJsZVVudGlsICE9PSB1bmRlZmluZWQsXG4gICAgdW50aWw6IHZpc2libGVVbnRpbCxcbiAgfSk7XG5cbiAgY29uc3QgdXNhZ2UgPSBjb21wdXRlU2Vzc2lvblVzYWdlKG1lc3NhZ2VzKTtcblxuICByZXR1cm4geyBtZXNzYWdlczogYXNzZW1ibGVkLCBzdHJlYW1pbmdNZXNzYWdlSWQsIHVzYWdlIH07XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBVSU1lc3NhZ2UgfSBmcm9tIFwiYWlcIjtcbmltcG9ydCB0eXBlIHsgU2Vzc2lvbkNvbnRleHQgfSBmcm9tIFwiLi9oYW5kbGVcIjtcblxuZXhwb3J0IHR5cGUgSW50ZXJydXB0T3B0aW9ucyA9IHtcbiAgbGFzdFBhcnQ/OiB7XG4gICAgaW5kZXg6IG51bWJlcjtcbiAgICBwYXJ0OiB1bmtub3duO1xuICB9O1xufTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGludGVycnVwdChcbiAgc2Vzc2lvbkNvbnRleHQ6IFNlc3Npb25Db250ZXh0LFxuICBvcHRzPzogSW50ZXJydXB0T3B0aW9uc1xuKSB7XG4gIFwidXNlIHN0ZXBcIjtcbiAgY29uc3QgbWVzc2FnZXMgPSBhd2FpdCBzZXNzaW9uQ29udGV4dC5hZ2VudC5zdG9yYWdlLm1lc3NhZ2UubGlzdEJ5U2Vzc2lvbihcbiAgICBzZXNzaW9uQ29udGV4dC5zZXNzaW9uSWRcbiAgKTtcblxuICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICBsZXQgcGVuZGluZ0Fzc2lzdGFudE1lc3NhZ2VzID0gbWVzc2FnZXMuZmlsdGVyKFxuICAgIChtKSA9PlxuICAgICAgbS5yb2xlID09PSBcImFzc2lzdGFudFwiICYmXG4gICAgICBtLmNvbXBsZXRlZEF0ID09PSBudWxsICYmXG4gICAgICBtLmludGVycnVwdGVkQXQgPT09IG51bGxcbiAgKTtcblxuICBpZiAocGVuZGluZ0Fzc2lzdGFudE1lc3NhZ2VzLmxlbmd0aCA9PT0gMCkge1xuICAgIGNvbnN0IE1BWF9SRVRST0FDVElWRV9NUyA9IDVfMDAwO1xuICAgIGNvbnN0IGxhdGVzdCA9IG1lc3NhZ2VzXG4gICAgICAuZmlsdGVyKFxuICAgICAgICAobSkgPT5cbiAgICAgICAgICBtLnJvbGUgPT09IFwiYXNzaXN0YW50XCIgJiZcbiAgICAgICAgICBtLmludGVycnVwdGVkQXQgPT09IG51bGwgJiZcbiAgICAgICAgICBtLmNvbXBsZXRlZEF0ICE9PSBudWxsICYmXG4gICAgICAgICAgbm93IC0gbS5jb21wbGV0ZWRBdCA8IE1BWF9SRVRST0FDVElWRV9NU1xuICAgICAgKVxuICAgICAgLnNvcnQoKGEsIGIpID0+IGIuY3JlYXRlZEF0IC0gYS5jcmVhdGVkQXQpXG4gICAgICAuYXQoMCk7XG4gICAgaWYgKGxhdGVzdCkge1xuICAgICAgcGVuZGluZ0Fzc2lzdGFudE1lc3NhZ2VzID0gW2xhdGVzdF07XG4gICAgfVxuICB9XG5cbiAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgcGVuZGluZ0Fzc2lzdGFudE1lc3NhZ2VzLm1hcCgobSkgPT5cbiAgICAgIHNlc3Npb25Db250ZXh0LmFnZW50LnN0b3JhZ2UubWVzc2FnZS5zZXQobS5pZCwge1xuICAgICAgICAuLi5tLFxuICAgICAgICBpbnRlcnJ1cHRlZEF0OiBub3csXG4gICAgICAgIGludGVycnVwdGVkTGFzdFBhcnQ6IG9wdHM/Lmxhc3RQYXJ0ID8/IG51bGwsXG4gICAgICB9KVxuICAgIClcbiAgKTtcblxuICBjb25zdCBtZXNzYWdlSWRzID0gbmV3IFNldChwZW5kaW5nQXNzaXN0YW50TWVzc2FnZXMubWFwKChtKSA9PiBtLmlkKSk7XG4gIGlmIChtZXNzYWdlSWRzLnNpemUgPT09IDApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBhbGxQYXJ0cyA9IGF3YWl0IHNlc3Npb25Db250ZXh0LmFnZW50LnN0b3JhZ2UucGFydC5saXN0QnlTZXNzaW9uKFxuICAgIHNlc3Npb25Db250ZXh0LnNlc3Npb25JZFxuICApO1xuXG4gIGZvciAoY29uc3QgcCBvZiBhbGxQYXJ0cykge1xuICAgIGlmICghbWVzc2FnZUlkcy5oYXMocC5tZXNzYWdlSWQpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgcC5wYXJ0ICYmXG4gICAgICBcInN0YXRlXCIgaW4gcC5wYXJ0ICYmXG4gICAgICAocC5wYXJ0IGFzIHsgc3RhdGU6IHN0cmluZyB9KS5zdGF0ZSA9PT0gXCJhcHByb3ZhbC1yZXF1ZXN0ZWRcIiAmJlxuICAgICAgXCJhcHByb3ZhbFwiIGluIHAucGFydFxuICAgICkge1xuICAgICAgY29uc3QgYXBwcm92YWwgPSAocC5wYXJ0IGFzIHsgYXBwcm92YWw/OiB7IGlkOiBzdHJpbmcgfSB9KS5hcHByb3ZhbDtcbiAgICAgIGlmIChhcHByb3ZhbD8uaWQpIHtcbiAgICAgICAgYXdhaXQgc2Vzc2lvbkNvbnRleHQuYWdlbnQuc3RvcmFnZS5wYXJ0LnNldChwLmlkLCB7XG4gICAgICAgICAgLi4ucCxcbiAgICAgICAgICBwYXJ0OiB7XG4gICAgICAgICAgICAuLi5wLnBhcnQsXG4gICAgICAgICAgICBzdGF0ZTogXCJvdXRwdXQtZGVuaWVkXCIsXG4gICAgICAgICAgICBhcHByb3ZhbDoge1xuICAgICAgICAgICAgICAuLi5hcHByb3ZhbCxcbiAgICAgICAgICAgICAgYXBwcm92ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICByZWFzb246IFwiaW50ZXJydXB0ZWRcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSBhcyBVSU1lc3NhZ2VbXCJwYXJ0c1wiXVtudW1iZXJdLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsICJpbXBvcnQgdHlwZSB7IEZpbmlzaFJlYXNvbiwgVG9vbFNldCwgVUlNZXNzYWdlLCBVSU1lc3NhZ2VDaHVuayB9IGZyb20gXCJhaVwiO1xuaW1wb3J0IHsgYWxsIH0gZnJvbSBcImJldHRlci1hbGxcIjtcbmltcG9ydCAqIGFzIGVycm9yZSBmcm9tIFwiZXJyb3JlXCI7XG5pbXBvcnQgeyB1bGlkIH0gZnJvbSBcInVsaWRcIjtcbmltcG9ydCB0eXBlIHsgVHlwZWRVSU1lc3NhZ2UgfSBmcm9tIFwiLi4vYWdlbnQvcmVnaXN0cnlcIjtcbmltcG9ydCB0eXBlIHsgU2tpbGxTdW1tYXJ5IH0gZnJvbSBcIi4uL3NraWxscy90eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBNZXNzYWdlLCBQYXJ0IH0gZnJvbSBcIi4uL3N0b3JhZ2UvdHlwZXNcIjtcbmltcG9ydCB7IGNyZWF0ZUxvZ2dlciB9IGZyb20gXCIuLi91dGlscy9sb2dnZXJcIjtcbmltcG9ydCB0eXBlIHsgU3RlcFVzYWdlIH0gZnJvbSBcIi4uL3V0aWxzL3VzYWdlXCI7XG5pbXBvcnQge1xuICB0eXBlIFN0cmVhbVRleHRSZXN1bHQsXG4gIHN0cmVhbVRleHQsXG4gIHN0cmVhbVRleHRTdGVwLFxufSBmcm9tIFwiLi9haS1sb29wL3N0cmVhbS10ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IFNlc3Npb25Db250ZXh0IH0gZnJvbSBcIi4vaGFuZGxlXCI7XG5pbXBvcnQgeyBpbnRlcnJ1cHQgfSBmcm9tIFwiLi9pbnRlcnJ1cHRcIjtcblxuY29uc3QgREVGQVVMVF9TVEVQX1RIUk9VR0hQVVQgPSAxMDA7XG5cbmV4cG9ydCB0eXBlIEFwcHJvdmFsRGF0YSA9IHtcbiAgYXBwcm92YWxJZDogc3RyaW5nO1xuICBhcHByb3ZlZDogYm9vbGVhbjtcbiAgcmVhc29uPzogc3RyaW5nO1xufTtcblxudHlwZSBNZXNzYWdlRGF0YTxUb29scyBleHRlbmRzIFRvb2xTZXQsIFRNZXNzYWdlTWV0YWRhdGEgPSB1bmtub3duPiA9XG4gIHwgVUlNZXNzYWdlPFRNZXNzYWdlTWV0YWRhdGE+XG4gIHwge1xuICAgICAgcm9sZT86IFR5cGVkVUlNZXNzYWdlPHVua25vd24sIFRvb2xzPltcInJvbGVcIl07XG4gICAgICBwYXJ0czogVHlwZWRVSU1lc3NhZ2U8dW5rbm93biwgVG9vbHM+W1wicGFydHNcIl07XG4gICAgICBtZXRhZGF0YT86IFRNZXNzYWdlTWV0YWRhdGEgfCBudWxsO1xuICAgICAgaWQ/OiBzdHJpbmc7XG4gICAgfTtcblxuZXhwb3J0IHR5cGUgU2VuZElucHV0PFRvb2xzIGV4dGVuZHMgVG9vbFNldCwgVE1lc3NhZ2VNZXRhZGF0YSA9IHVua25vd24+ID1cbiAgfCBzdHJpbmdcbiAgfCBNZXNzYWdlRGF0YTxUb29scywgVE1lc3NhZ2VNZXRhZGF0YT5cbiAgfCB7IHR5cGU6IFwibWVzc2FnZVwiOyBtZXNzYWdlOiBNZXNzYWdlRGF0YTxUb29scywgVE1lc3NhZ2VNZXRhZGF0YT4gfVxuICB8IHsgdHlwZTogXCJhcHByb3ZhbFwiOyBhcHByb3ZhbDogQXBwcm92YWxEYXRhIH07XG5cbmV4cG9ydCB0eXBlIFNlbmRPcHRpb25zPFRDb250ZXh0LCBUU3RhdGUgPSB1bmtub3duPiA9IHtcbiAgaW50ZXJydXB0SWZTdHJlYW1pbmc/OlxuICAgIHwgYm9vbGVhblxuICAgIHwgeyBsYXN0UGFydDogeyBpbmRleDogbnVtYmVyOyBwYXJ0OiB1bmtub3duIH0gfTtcbiAgY29udGV4dD86IFRDb250ZXh0O1xuICBpbml0aWFsU3RhdGU/OiBUU3RhdGU7XG4gIGFib3J0U2lnbmFsPzogQWJvcnRTaWduYWw7XG4gIHNhbmRib3hJZD86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIFNlbmRSZXN1bHQgPSB7XG4gIGFzc2lzdGFudE1lc3NhZ2VJZDogc3RyaW5nO1xuICBkb25lOiB0cnVlIHwgUHJvbWlzZTx0cnVlPjtcbn07XG5cbmV4cG9ydCB0eXBlIEFjdGl2ZVJ1biA9IHtcbiAgY2h1bmtzOiBVSU1lc3NhZ2VDaHVua1tdO1xuICB3cml0YWJsZTogV3JpdGFibGVTdHJlYW08VUlNZXNzYWdlQ2h1bms+O1xuICBkb25lOiBQcm9taXNlPHZvaWQ+O1xuICAvKiogUmVzb2x2ZXMgd2hlbiBhIG5ldyBjaHVuayBpcyBhdmFpbGFibGUuIFJlcGxhY2VkIGFmdGVyIGVhY2ggbm90aWZpY2F0aW9uLiAqL1xuICBvbkNodW5rOiBQcm9taXNlPHZvaWQ+O1xufTtcblxuY29uc3QgQUNUSVZFX1JVTlNfS0VZID0gU3ltYm9sLmZvcihcImV4cGVyaW1lbnRhbC1hZ2VudDphY3RpdmVSdW5zXCIpO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWN0aXZlUnVucygpOiBNYXA8c3RyaW5nLCBBY3RpdmVSdW4+IHtcbiAgY29uc3QgZyA9IGdsb2JhbFRoaXMgYXMgUmVjb3JkPHN5bWJvbCwgTWFwPHN0cmluZywgQWN0aXZlUnVuPiB8IHVuZGVmaW5lZD47XG4gIGlmICghZ1tBQ1RJVkVfUlVOU19LRVldKSB7XG4gICAgZ1tBQ1RJVkVfUlVOU19LRVldID0gbmV3IE1hcCgpO1xuICB9XG4gIHJldHVybiBnW0FDVElWRV9SVU5TX0tFWV07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZW5kPFxuICBUb29scyBleHRlbmRzIFRvb2xTZXQsXG4gIFRDb250ZXh0LFxuICBUTWVzc2FnZU1ldGFkYXRhID0gdW5rbm93bixcbiAgVFN0YXRlID0gdW5rbm93bixcbj4oXG4gIHNlc3Npb25Db250ZXh0OiBTZXNzaW9uQ29udGV4dCxcbiAgaW5wdXQ6XG4gICAgfCBTZW5kSW5wdXQ8VG9vbHMsIFRNZXNzYWdlTWV0YWRhdGE+XG4gICAgfCBTZW5kSW5wdXQ8VG9vbHMsIFRNZXNzYWdlTWV0YWRhdGE+W10sXG4gIG9wdHM/OiBTZW5kT3B0aW9uczxUQ29udGV4dCwgVFN0YXRlPlxuKTogUHJvbWlzZTxTZW5kUmVzdWx0PiB7XG4gIGlmIChvcHRzPy5pbnRlcnJ1cHRJZlN0cmVhbWluZykge1xuICAgIGNvbnN0IGxhc3RQYXJ0ID1cbiAgICAgIHR5cGVvZiBvcHRzLmludGVycnVwdElmU3RyZWFtaW5nID09PSBcIm9iamVjdFwiXG4gICAgICAgID8gb3B0cy5pbnRlcnJ1cHRJZlN0cmVhbWluZy5sYXN0UGFydFxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICBhd2FpdCBpbnRlcnJ1cHQoc2Vzc2lvbkNvbnRleHQsIHsgbGFzdFBhcnQgfSk7XG4gIH1cblxuICBjb25zdCB7XG4gICAgd29ya2Zsb3dSdW5JZCxcbiAgICB3b3JrZmxvd1dyaXRhYmxlLFxuICAgIGV4aXN0aW5nUGFydENvdW50LFxuICAgIGFzc2lzdGFudE1lc3NhZ2VJZCxcbiAgICBhc3Npc3RhbnRNZXNzYWdlQ3JlYXRlZEF0LFxuICAgIHN0YXRlLFxuICB9ID0gYXdhaXQgZXJyb3JlLnRyeUFzeW5jKHtcbiAgICB0cnk6ICgpID0+XG4gICAgICBpbml0U2Vzc2lvblN0ZXA8VG9vbHM+KHtcbiAgICAgICAgc2Vzc2lvbkNvbnRleHQsXG4gICAgICAgIHNlc3Npb25JZDogc2Vzc2lvbkNvbnRleHQuc2Vzc2lvbklkLFxuICAgICAgICBzYW5kYm94SWQ6IG9wdHM/LnNhbmRib3hJZCxcbiAgICAgICAgaW5pdGlhbFN0YXRlOiBvcHRzPy5pbml0aWFsU3RhdGUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQsXG4gICAgICAgIGlucHV0LFxuICAgICAgfSksXG4gICAgY2F0Y2g6IChlKSA9PiB7XG4gICAgICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgU2VuZEVycm9yKHtcbiAgICAgICAgaWQ6IHNlc3Npb25Db250ZXh0LnNlc3Npb25JZCxcbiAgICAgICAgcmVhc29uOiBTdHJpbmcoZSksXG4gICAgICAgIGNhdXNlOiBlLFxuICAgICAgfSk7XG4gICAgfSxcbiAgfSk7XG5cbiAgY29uc3QgbG9vcE9wdHMgPSB7XG4gICAgc2Vzc2lvbkNvbnRleHQsXG4gICAgYXNzaXN0YW50TWVzc2FnZUlkLFxuICAgIGNyZWF0ZWRBdDogYXNzaXN0YW50TWVzc2FnZUNyZWF0ZWRBdCxcbiAgICBjb250ZXh0OiAob3B0cz8uY29udGV4dCA/PyB7fSkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgc3RhdGUsXG4gICAgbGFzdFBhcnRJbmRleDogZXhpc3RpbmdQYXJ0Q291bnQsXG4gICAgd29ya2Zsb3dSdW5JZCxcbiAgfTtcblxuICBpZiAod29ya2Zsb3dXcml0YWJsZSkge1xuICAgIGF3YWl0IHJ1bkxvb3A8VG9vbHM+KHsgLi4ubG9vcE9wdHMsIHdyaXRhYmxlOiB3b3JrZmxvd1dyaXRhYmxlIH0pO1xuICAgIHJldHVybiB7IGFzc2lzdGFudE1lc3NhZ2VJZCwgZG9uZTogdHJ1ZSB9O1xuICB9XG5cbiAgY29uc3QgY2h1bmtzOiBVSU1lc3NhZ2VDaHVua1tdID0gW107XG4gIGxldCBub3RpZnlDaHVuazogKCkgPT4gdm9pZDtcbiAgbGV0IG9uQ2h1bmsgPSBuZXcgUHJvbWlzZTx2b2lkPigocikgPT4ge1xuICAgIG5vdGlmeUNodW5rID0gcjtcbiAgfSk7XG5cbiAgY29uc3Qgd3JpdGFibGUgPSBuZXcgV3JpdGFibGVTdHJlYW08VUlNZXNzYWdlQ2h1bms+KHtcbiAgICB3cml0ZShjaHVuaykge1xuICAgICAgY2h1bmtzLnB1c2goY2h1bmspO1xuICAgICAgY29uc3QgcHJldiA9IG5vdGlmeUNodW5rO1xuICAgICAgb25DaHVuayA9IG5ldyBQcm9taXNlPHZvaWQ+KChyKSA9PiB7XG4gICAgICAgIG5vdGlmeUNodW5rID0gcjtcbiAgICAgIH0pO1xuICAgICAgcHJldigpO1xuICAgIH0sXG4gIH0pO1xuXG4gIGNvbnN0IGRvbmUgPSBydW5Mb29wPFRvb2xzPih7IC4uLmxvb3BPcHRzLCB3cml0YWJsZSB9KTtcblxuICBjb25zdCBhY3RpdmVSdW46IEFjdGl2ZVJ1biA9IHtcbiAgICBjaHVua3MsXG4gICAgd3JpdGFibGUsXG4gICAgZG9uZSxcbiAgICBnZXQgb25DaHVuaygpIHtcbiAgICAgIHJldHVybiBvbkNodW5rO1xuICAgIH0sXG4gIH07XG4gIGNvbnN0IGFjdGl2ZVJ1bnMgPSBnZXRBY3RpdmVSdW5zKCk7XG4gIGFjdGl2ZVJ1bnMuc2V0KGFzc2lzdGFudE1lc3NhZ2VJZCwgYWN0aXZlUnVuKTtcbiAgZG9uZS5maW5hbGx5KCgpID0+IGFjdGl2ZVJ1bnMuZGVsZXRlKGFzc2lzdGFudE1lc3NhZ2VJZCkpO1xuXG4gIHJldHVybiB7IGFzc2lzdGFudE1lc3NhZ2VJZCwgZG9uZTogZG9uZS50aGVuKCgpID0+IHRydWUpIH07XG59XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEFJIExvb3BcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuYXN5bmMgZnVuY3Rpb24gcnVuTG9vcDxUb29scyBleHRlbmRzIFRvb2xTZXQ+KHtcbiAgd29ya2Zsb3dSdW5JZCxcbiAgc2Vzc2lvbkNvbnRleHQsXG4gIGFzc2lzdGFudE1lc3NhZ2VJZCxcbiAgY3JlYXRlZEF0LFxuICBjb250ZXh0OiBpbml0aWFsQ29udGV4dCxcbiAgc3RhdGUsXG4gIHdyaXRhYmxlLFxuICBsYXN0UGFydEluZGV4OiBpbml0aWFsUGFydEluZGV4LFxufToge1xuICB3b3JrZmxvd1J1bklkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHNlc3Npb25Db250ZXh0OiBTZXNzaW9uQ29udGV4dDtcbiAgYXNzaXN0YW50TWVzc2FnZUlkOiBzdHJpbmc7XG4gIGNyZWF0ZWRBdDogbnVtYmVyO1xuICBjb250ZXh0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgc3RhdGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICB3cml0YWJsZTogV3JpdGFibGVTdHJlYW07XG4gIGxhc3RQYXJ0SW5kZXg6IG51bWJlcjtcbn0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgYWdlbnQgPSBzZXNzaW9uQ29udGV4dC5hZ2VudDtcblxuICBjb25zdCBsb2cgPSBjcmVhdGVMb2dnZXIoe1xuICAgIGNvbmZpZzogeyAuLi5hZ2VudC5vcHRpb25zLmxvZ2dpbmcsIG5hbWU6IGFnZW50Lm5hbWUgfSxcbiAgICBzdWJzeXN0ZW06IFwiYWktbG9vcFwiLFxuICB9KTtcbiAgY29uc3QgbXNnTG9nID0gbG9nLndpdGhDb250ZXh0KHtcbiAgICBzZXNzaW9uSWQ6IHNlc3Npb25Db250ZXh0LnNlc3Npb25JZCxcbiAgICBtZXNzYWdlSWQ6IGFzc2lzdGFudE1lc3NhZ2VJZCxcbiAgfSk7XG4gIGNvbnN0IGRvbmVNZXNzYWdlID0gbXNnTG9nLnRpbWUoXCJvbk1lc3NhZ2VcIik7XG5cbiAgbGV0IGZpbmlzaFJlYXNvbjogRmluaXNoUmVhc29uIHwgdW5kZWZpbmVkO1xuICBsZXQgbGFzdFBhcnRJbmRleCA9IGluaXRpYWxQYXJ0SW5kZXg7XG4gIGNvbnN0IHVzYWdlU3RlcHM6IFN0ZXBVc2FnZVtdID0gW107XG4gIGxldCBkaXNjb3ZlcmVkU2tpbGxzOiBTa2lsbFN1bW1hcnlbXSB8IG51bGwgPSBudWxsO1xuICBsZXQgY29udGV4dCA9IGluaXRpYWxDb250ZXh0O1xuXG4gIHRyeSB7XG4gICAgd2hpbGUgKGZpbmlzaFJlYXNvbiAhPT0gXCJzdG9wXCIpIHtcbiAgICAgIGNvbnN0IHN0cmVhbVRleHRGbiA9IHdvcmtmbG93UnVuSWRcbiAgICAgICAgPyBzdHJlYW1UZXh0U3RlcDxUb29scz5cbiAgICAgICAgOiBzdHJlYW1UZXh0PFRvb2xzPjtcbiAgICAgIGNvbnN0IHRocm91Z2hwdXQgPSB3b3JrZmxvd1J1bklkID8gNSA6IERFRkFVTFRfU1RFUF9USFJPVUdIUFVUO1xuXG4gICAgICBjb25zdCByZXN1bHQ6IFN0cmVhbVRleHRSZXN1bHQgPSBhd2FpdCBzdHJlYW1UZXh0Rm4oe1xuICAgICAgICBzdGVwVGhyb3VnaHB1dDogdGhyb3VnaHB1dCxcbiAgICAgICAgYXNzaXN0YW50TWVzc2FnZUlkLFxuICAgICAgICBhZ2VudCxcbiAgICAgICAgc2Vzc2lvbklkOiBzZXNzaW9uQ29udGV4dC5zZXNzaW9uSWQsXG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIHN0YXRlLFxuICAgICAgICBjcmVhdGVkQXQsXG4gICAgICAgIHdyaXRhYmxlLFxuICAgICAgICBsYXN0UGFydEluZGV4LFxuICAgICAgICBzdGVwSW5kZXhPZmZzZXQ6IHVzYWdlU3RlcHMubGVuZ3RoLFxuICAgICAgICBkaXNjb3ZlcmVkU2tpbGxzLFxuICAgICAgfSk7XG5cbiAgICAgIGZpbmlzaFJlYXNvbiA9IHJlc3VsdC5maW5pc2hSZWFzb247XG4gICAgICBsYXN0UGFydEluZGV4ID0gcmVzdWx0Lmxhc3RQYXJ0SW5kZXg7XG4gICAgICB1c2FnZVN0ZXBzLnB1c2goLi4ucmVzdWx0LnVzYWdlU3RlcHMpO1xuICAgICAgZGlzY292ZXJlZFNraWxscyA9IHJlc3VsdC5kaXNjb3ZlcmVkU2tpbGxzO1xuICAgICAgY29udGV4dCA9IHJlc3VsdC5jb250ZXh0O1xuXG4gICAgICBpZiAocmVzdWx0Lm1heFN0ZXBzICE9IG51bGwgJiYgdXNhZ2VTdGVwcy5sZW5ndGggPj0gcmVzdWx0Lm1heFN0ZXBzKSB7XG4gICAgICAgIG1zZ0xvZy5pbmZvKFwicmVhY2hlZCBtYXhTdGVwcyBsaW1pdFwiLCB7IG1heFN0ZXBzOiByZXN1bHQubWF4U3RlcHMgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVzdWx0LnBlbmRpbmdBcHByb3ZhbHMubGVuZ3RoID4gMCkge1xuICAgICAgICBtc2dMb2cuaW5mbyhcInBlbmRpbmcgYXBwcm92YWxzLCBzdG9wcGluZyBsb29wXCIsIHtcbiAgICAgICAgICBjb3VudDogcmVzdWx0LnBlbmRpbmdBcHByb3ZhbHMubGVuZ3RoLFxuICAgICAgICAgIHRvb2xzOiByZXN1bHQucGVuZGluZ0FwcHJvdmFscy5tYXAoKHApID0+IHAudG9vbE5hbWUpLFxuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZG9uZU1lc3NhZ2UoeyB0b3RhbFN0ZXBzOiB1c2FnZVN0ZXBzLmxlbmd0aCB9KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbXNnTG9nLmVycm9yKFwiQUkgbG9vcCBmYWlsZWRcIiwge1xuICAgICAgZXJyb3I6IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKSxcbiAgICB9KTtcbiAgICB0aHJvdyBlcnI7XG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgY29tcGxldGVNZXNzYWdlU3RlcCh7XG4gICAgICBhc3Npc3RhbnRNZXNzYWdlSWQsXG4gICAgICBzZXNzaW9uQ29udGV4dCxcbiAgICAgIHdyaXRhYmxlLFxuICAgICAgdXNhZ2VTdGVwcyxcbiAgICB9KTtcbiAgfVxufVxuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBTdGVwc1xuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5hc3luYyBmdW5jdGlvbiBpbml0U2Vzc2lvblN0ZXA8VG9vbHMgZXh0ZW5kcyBUb29sU2V0Pih7XG4gIHNlc3Npb25Db250ZXh0LFxuICBzZXNzaW9uSWQsXG4gIHNhbmRib3hJZCxcbiAgaW5pdGlhbFN0YXRlLFxuICBpbnB1dCxcbn06IHtcbiAgc2Vzc2lvbkNvbnRleHQ6IFNlc3Npb25Db250ZXh0O1xuICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgc2FuZGJveElkPzogc3RyaW5nO1xuICBpbml0aWFsU3RhdGU/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgaW5wdXQ6IFNlbmRJbnB1dDxUb29scz4gfCBTZW5kSW5wdXQ8VG9vbHM+W107XG59KSB7XG4gIFwidXNlIHN0ZXBcIjtcblxuICBsZXQgd29ya2Zsb3dSdW5JZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBsZXQgd29ya2Zsb3dXcml0YWJsZTogV3JpdGFibGVTdHJlYW0gfCB1bmRlZmluZWQ7XG4gIHRyeSB7XG4gICAgY29uc3QgeyBnZXRXb3JrZmxvd01ldGFkYXRhLCBnZXRXcml0YWJsZSB9ID0gYXdhaXQgaW1wb3J0KFwid29ya2Zsb3dcIik7XG4gICAgd29ya2Zsb3dSdW5JZCA9IGdldFdvcmtmbG93TWV0YWRhdGEoKS53b3JrZmxvd1J1bklkO1xuICAgIHdvcmtmbG93V3JpdGFibGUgPSBnZXRXcml0YWJsZSgpO1xuICB9IGNhdGNoIHtcbiAgICAvLyB3b3JrZmxvdyBub3QgaW5zdGFsbGVkXG4gIH1cblxuICBjb25zdCBuZXdNZXNzYWdlczogTWVzc2FnZVtdID0gW107XG4gIGNvbnN0IG5ld1BhcnRzOiBQYXJ0W10gPSBbXTtcbiAgY29uc3QgbmV3QXBwcm92YWxzOiBBcHByb3ZhbERhdGFbXSA9IFtdO1xuICBpZiAoQXJyYXkuaXNBcnJheShpbnB1dCkpIHtcbiAgICBmb3IgKGNvbnN0IGkgb2YgaW5wdXQpIHtcbiAgICAgIGNvbnN0IHsgbWVzc2FnZSwgcGFydHMsIGFwcHJvdmFscyB9ID0gdG9NZXNzYWdlQW5kUGFydHMoe1xuICAgICAgICBzZXNzaW9uSWQ6IHNlc3Npb25Db250ZXh0LnNlc3Npb25JZCxcbiAgICAgICAgaW5wdXQ6IGksXG4gICAgICAgIGRlZmF1bHRSb2xlOiBcInVzZXJcIixcbiAgICAgIH0pO1xuICAgICAgaWYgKG1lc3NhZ2UpIHtcbiAgICAgICAgbmV3TWVzc2FnZXMucHVzaChtZXNzYWdlKTtcbiAgICAgIH1cbiAgICAgIG5ld1BhcnRzLnB1c2goLi4ucGFydHMpO1xuICAgICAgbmV3QXBwcm92YWxzLnB1c2goLi4uYXBwcm92YWxzKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgeyBtZXNzYWdlLCBwYXJ0cywgYXBwcm92YWxzIH0gPSB0b01lc3NhZ2VBbmRQYXJ0cyh7XG4gICAgICBpbnB1dCxcbiAgICAgIHNlc3Npb25JZDogc2Vzc2lvbkNvbnRleHQuc2Vzc2lvbklkLFxuICAgICAgZGVmYXVsdFJvbGU6IFwidXNlclwiLFxuICAgIH0pO1xuICAgIGlmIChtZXNzYWdlKSB7XG4gICAgICBuZXdNZXNzYWdlcy5wdXNoKG1lc3NhZ2UpO1xuICAgIH1cbiAgICBuZXdQYXJ0cy5wdXNoKC4uLnBhcnRzKTtcbiAgICBuZXdBcHByb3ZhbHMucHVzaCguLi5hcHByb3ZhbHMpO1xuICB9XG5cbiAgY29uc3QgbGFzdE5ld01lc3NhZ2UgPSBuZXdNZXNzYWdlcy5hdCgtMSk7XG4gIGNvbnN0IHJldXNlQXNzaXN0YW50ID0gbGFzdE5ld01lc3NhZ2U/LnJvbGUgPT09IFwiYXNzaXN0YW50XCI7XG5cbiAgY29uc3QgYXNzaXN0YW50TWVzc2FnZUlkID0gcmV1c2VBc3Npc3RhbnRcbiAgICA/IGxhc3ROZXdNZXNzYWdlLmlkXG4gICAgOiBgbWVzc2FnZV8ke3VsaWQoKX1gO1xuICBjb25zdCBiYXNlVGltZSA9IERhdGUubm93KCk7XG4gIGNvbnN0IGFzc2lzdGFudE1lc3NhZ2VDcmVhdGVkQXQgPSBiYXNlVGltZSArIG5ld01lc3NhZ2VzLmxlbmd0aDtcblxuICBpZiAoIXJldXNlQXNzaXN0YW50KSB7XG4gICAgbmV3TWVzc2FnZXMucHVzaCh7XG4gICAgICBpZDogYXNzaXN0YW50TWVzc2FnZUlkLFxuICAgICAgc2Vzc2lvbklkOiBzZXNzaW9uQ29udGV4dC5zZXNzaW9uSWQsXG4gICAgICByb2xlOiBcImFzc2lzdGFudFwiLFxuICAgICAgY3JlYXRlZEF0OiBhc3Npc3RhbnRNZXNzYWdlQ3JlYXRlZEF0LFxuICAgICAgc3RhcnRlZEF0OiBudWxsLFxuICAgICAgY29tcGxldGVkQXQ6IG51bGwsXG4gICAgICBpbnRlcnJ1cHRlZEF0OiBudWxsLFxuICAgICAgaW50ZXJydXB0ZWRMYXN0UGFydDogbnVsbCxcbiAgICAgIHVzYWdlOiBudWxsLFxuICAgICAgd29ya2Zsb3dSdW5JZDogbnVsbCxcbiAgICAgIG1ldGFkYXRhOiBudWxsLFxuICAgIH0pO1xuICB9XG5cbiAgY29uc3QgZXhpc3RpbmdQYXJ0Q291bnQgPSByZXVzZUFzc2lzdGFudFxuICAgID8gbmV3UGFydHMuZmlsdGVyKChwKSA9PiBwLm1lc3NhZ2VJZCA9PT0gYXNzaXN0YW50TWVzc2FnZUlkKS5sZW5ndGhcbiAgICA6IDA7XG5cbiAgbGV0IHNlc3Npb24gPSBhd2FpdCBzZXNzaW9uQ29udGV4dC5hZ2VudC5zdG9yYWdlLnNlc3Npb24uZ2V0KHNlc3Npb25JZCk7XG4gIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gIGlmICghc2Vzc2lvbikge1xuICAgIHNlc3Npb24gPSB7XG4gICAgICBpZDogc2Vzc2lvbklkLFxuICAgICAgc2FuZGJveElkOiBzYW5kYm94SWQgPz8gbnVsbCxcbiAgICAgIGxhc3RNZXNzYWdlSWQ6IG51bGwsXG4gICAgICBjcmVhdGVkQXQ6IG5vdyxcbiAgICAgIHVwZGF0ZWRBdDogbm93LFxuICAgIH07XG4gICAgYXdhaXQgc2Vzc2lvbkNvbnRleHQuYWdlbnQuc3RvcmFnZS5zZXNzaW9uLnNldChzZXNzaW9uLmlkLCBzZXNzaW9uKTtcbiAgfSBlbHNlIGlmIChzYW5kYm94SWQgJiYgc2FuZGJveElkICE9PSBzZXNzaW9uLnNhbmRib3hJZCkge1xuICAgIHNlc3Npb24gPSB7IC4uLnNlc3Npb24sIHNhbmRib3hJZCwgdXBkYXRlZEF0OiBub3cgfTtcbiAgICBhd2FpdCBzZXNzaW9uQ29udGV4dC5hZ2VudC5zdG9yYWdlLnNlc3Npb24udXBkYXRlKHNlc3Npb24uaWQsIHtcbiAgICAgIHNhbmRib3hJZCxcbiAgICB9KTtcbiAgfVxuXG4gIGF3YWl0IGFsbCh7XG4gICAgYXN5bmMgc2F2ZU1lc3NhZ2VzKCkge1xuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIG5ld01lc3NhZ2VzLm1hcChhc3luYyAobSwgaSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGV4aXN0aW5nID0gYXdhaXQgc2Vzc2lvbkNvbnRleHQuYWdlbnQuc3RvcmFnZS5tZXNzYWdlLmdldChtLmlkKTtcbiAgICAgICAgICBpZiAoZXhpc3RpbmcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgYXdhaXQgc2Vzc2lvbkNvbnRleHQuYWdlbnQuc3RvcmFnZS5tZXNzYWdlLnNldChtLmlkLCB7XG4gICAgICAgICAgICAuLi5tLFxuICAgICAgICAgICAgY3JlYXRlZEF0OiBiYXNlVGltZSArIGksXG4gICAgICAgICAgICB3b3JrZmxvd1J1bklkOlxuICAgICAgICAgICAgICBtLmlkID09PSBhc3Npc3RhbnRNZXNzYWdlSWRcbiAgICAgICAgICAgICAgICA/ICh3b3JrZmxvd1J1bklkID8/IG51bGwpXG4gICAgICAgICAgICAgICAgOiBtLndvcmtmbG93UnVuSWQsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH0sXG4gICAgYXN5bmMgc2F2ZVBhcnRzKCkge1xuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIG5ld1BhcnRzLm1hcChhc3luYyAocCkgPT5cbiAgICAgICAgICBzZXNzaW9uQ29udGV4dC5hZ2VudC5zdG9yYWdlLnBhcnQuc2V0KHAuaWQsIHApXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfSxcbiAgICBhc3luYyByZXNvbHZlQXBwcm92YWxzKCkge1xuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIG5ld0FwcHJvdmFscy5tYXAoYXN5bmMgKGEpID0+IHtcbiAgICAgICAgICBjb25zdCBwYXJ0SWQgPSBhcHByb3ZhbFBhcnRJZChhLmFwcHJvdmFsSWQpO1xuICAgICAgICAgIGNvbnN0IHBhcnQgPSBhd2FpdCBzZXNzaW9uQ29udGV4dC5hZ2VudC5zdG9yYWdlLnBhcnQuZ2V0KHBhcnRJZCk7XG4gICAgICAgICAgaWYgKCFwYXJ0KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQXBwcm92YWxOb3RGb3VuZEVycm9yKHtcbiAgICAgICAgICAgICAgaWQ6IHNlc3Npb25Db250ZXh0LnNlc3Npb25JZCxcbiAgICAgICAgICAgICAgYXBwcm92YWxJZDogYS5hcHByb3ZhbElkLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGF3YWl0IHNlc3Npb25Db250ZXh0LmFnZW50LnN0b3JhZ2UucGFydC5zZXQocGFydElkLCB7XG4gICAgICAgICAgICAuLi5wYXJ0LFxuICAgICAgICAgICAgcGFydDoge1xuICAgICAgICAgICAgICAuLi5wYXJ0LnBhcnQsXG4gICAgICAgICAgICAgIHN0YXRlOiBhLmFwcHJvdmVkID8gXCJhcHByb3ZhbC1yZXNwb25kZWRcIiA6IFwib3V0cHV0LWRlbmllZFwiLFxuICAgICAgICAgICAgICBhcHByb3ZhbDoge1xuICAgICAgICAgICAgICAgIGlkOiBhLmFwcHJvdmFsSWQsXG4gICAgICAgICAgICAgICAgYXBwcm92ZWQ6IGEuYXBwcm92ZWQsXG4gICAgICAgICAgICAgICAgcmVhc29uOiBhLnJlYXNvbixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0gYXMgdHlwZW9mIHBhcnQucGFydCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfSxcbiAgICBhc3luYyB1cGRhdGVTZXNzaW9uKCkge1xuICAgICAgYXdhaXQgc2Vzc2lvbkNvbnRleHQuYWdlbnQuc3RvcmFnZS5zZXNzaW9uLnNldChzZXNzaW9uLmlkLCB7XG4gICAgICAgIC4uLnNlc3Npb24sXG4gICAgICAgIGxhc3RNZXNzYWdlSWQ6IGFzc2lzdGFudE1lc3NhZ2VJZCxcbiAgICAgICAgdXBkYXRlZEF0OiBEYXRlLm5vdygpLFxuICAgICAgfSk7XG4gICAgfSxcbiAgfSk7XG5cbiAgY29uc3Qgc3RhdGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0gc2Vzc2lvbi5zdGF0ZVxuICAgID8geyAuLi5zZXNzaW9uLnN0YXRlIH1cbiAgICA6IHsgLi4uKGluaXRpYWxTdGF0ZSA/PyB7fSkgfTtcblxuICByZXR1cm4ge1xuICAgIHdvcmtmbG93UnVuSWQsXG4gICAgd29ya2Zsb3dXcml0YWJsZSxcbiAgICBleGlzdGluZ1BhcnRDb3VudCxcbiAgICBhc3Npc3RhbnRNZXNzYWdlSWQsXG4gICAgYXNzaXN0YW50TWVzc2FnZUNyZWF0ZWRBdCxcbiAgICBzdGF0ZSxcbiAgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gY29tcGxldGVNZXNzYWdlU3RlcCh7XG4gIGFzc2lzdGFudE1lc3NhZ2VJZCxcbiAgc2Vzc2lvbkNvbnRleHQsXG4gIHdyaXRhYmxlLFxuICB1c2FnZVN0ZXBzLFxufToge1xuICBhc3Npc3RhbnRNZXNzYWdlSWQ6IHN0cmluZztcbiAgc2Vzc2lvbkNvbnRleHQ6IFNlc3Npb25Db250ZXh0O1xuICB3cml0YWJsZTogV3JpdGFibGVTdHJlYW07XG4gIHVzYWdlU3RlcHM6IFN0ZXBVc2FnZVtdO1xufSkge1xuICBcInVzZSBzdGVwXCI7XG5cbiAgY29uc3QgbG9nID0gY3JlYXRlTG9nZ2VyKHtcbiAgICBjb25maWc6IHtcbiAgICAgIC4uLnNlc3Npb25Db250ZXh0LmFnZW50Lm9wdGlvbnMubG9nZ2luZyxcbiAgICAgIG5hbWU6IHNlc3Npb25Db250ZXh0LmFnZW50Lm5hbWUsXG4gICAgfSxcbiAgICBzdWJzeXN0ZW06IFwiYWktbG9vcFwiLFxuICB9KTtcbiAgY29uc3QgbXNnTG9nID0gbG9nLndpdGhDb250ZXh0KHtcbiAgICBzZXNzaW9uSWQ6IHNlc3Npb25Db250ZXh0LnNlc3Npb25JZCxcbiAgICBtZXNzYWdlSWQ6IGFzc2lzdGFudE1lc3NhZ2VJZCxcbiAgfSk7XG5cbiAgY29uc3QgdXNhZ2UgPVxuICAgIHVzYWdlU3RlcHMubGVuZ3RoID4gMFxuICAgICAgPyB7XG4gICAgICAgICAgc3RlcHM6IHVzYWdlU3RlcHMsXG4gICAgICAgICAgc3VtbWFyeToge1xuICAgICAgICAgICAgbW9kZWw6IHVzYWdlU3RlcHNbMF0/Lm1vZGVsID8/IFwidW5rbm93blwiLFxuICAgICAgICAgICAgaW5wdXRUb2tlbnM6IHVzYWdlU3RlcHMucmVkdWNlKChhLCBzKSA9PiBhICsgcy5pbnB1dFRva2VucywgMCksXG4gICAgICAgICAgICBvdXRwdXRUb2tlbnM6IHVzYWdlU3RlcHMucmVkdWNlKChhLCBzKSA9PiBhICsgcy5vdXRwdXRUb2tlbnMsIDApLFxuICAgICAgICAgICAgdG90YWxUb2tlbnM6IHVzYWdlU3RlcHMucmVkdWNlKChhLCBzKSA9PiBhICsgcy50b3RhbFRva2VucywgMCksXG4gICAgICAgICAgICBjYWNoZVJlYWRUb2tlbnM6IHVzYWdlU3RlcHMucmVkdWNlKFxuICAgICAgICAgICAgICAoYSwgcykgPT4gYSArIHMuY2FjaGVSZWFkVG9rZW5zLFxuICAgICAgICAgICAgICAwXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgY2FjaGVXcml0ZVRva2VuczogdXNhZ2VTdGVwcy5yZWR1Y2UoXG4gICAgICAgICAgICAgIChhLCBzKSA9PiBhICsgcy5jYWNoZVdyaXRlVG9rZW5zLFxuICAgICAgICAgICAgICAwXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgcmVhc29uaW5nVG9rZW5zOiB1c2FnZVN0ZXBzLnJlZHVjZShcbiAgICAgICAgICAgICAgKGEsIHMpID0+IGEgKyBzLnJlYXNvbmluZ1Rva2VucyxcbiAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHN0ZXBDb3VudDogdXNhZ2VTdGVwcy5sZW5ndGgsXG4gICAgICAgICAgfSxcbiAgICAgICAgfVxuICAgICAgOiBudWxsO1xuXG4gIGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICBzZXNzaW9uQ29udGV4dC5hZ2VudC5zdG9yYWdlLm1lc3NhZ2UudXBkYXRlKGFzc2lzdGFudE1lc3NhZ2VJZCwge1xuICAgICAgY29tcGxldGVkQXQ6IERhdGUubm93KCksXG4gICAgICB1c2FnZSxcbiAgICB9KSxcbiAgICB3cml0YWJsZS5jbG9zZSgpLmNhdGNoKCgpID0+IHVuZGVmaW5lZCksXG4gIF0pO1xuXG4gIG1zZ0xvZy5pbmZvKFwibWVzc2FnZSBjb21wbGV0ZWRcIiwge1xuICAgIHN0ZXBzOiB1c2FnZVN0ZXBzLmxlbmd0aCxcbiAgICB0b3RhbFRva2VuczogdXNhZ2U/LnN1bW1hcnkudG90YWxUb2tlbnMsXG4gIH0pO1xufVxuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBVdGlsc1xuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5leHBvcnQgZnVuY3Rpb24gYXBwcm92YWxQYXJ0SWQoYXBwcm92YWxJZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGBwYXJ0XyR7YXBwcm92YWxJZH1gO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwbGF5QWN0aXZlUnVuKFxuICBhY3RpdmU6IEFjdGl2ZVJ1bixcbiAgc3RhcnRJbmRleCA9IDBcbik6IFJlYWRhYmxlU3RyZWFtPFVJTWVzc2FnZUNodW5rPiB7XG4gIGxldCBjdXJzb3IgPSBzdGFydEluZGV4O1xuICBsZXQgY2FuY2VsbGVkID0gZmFsc2U7XG5cbiAgcmV0dXJuIG5ldyBSZWFkYWJsZVN0cmVhbTxVSU1lc3NhZ2VDaHVuaz4oe1xuICAgIGFzeW5jIHB1bGwoY29udHJvbGxlcikge1xuICAgICAgLy8gRHJhaW4gYW55IGJ1ZmZlcmVkIGNodW5rc1xuICAgICAgd2hpbGUgKGN1cnNvciA8IGFjdGl2ZS5jaHVua3MubGVuZ3RoKSB7XG4gICAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZShhY3RpdmUuY2h1bmtzW2N1cnNvcisrXSk7XG4gICAgICB9XG5cbiAgICAgIC8vIFdhaXQgZm9yIGVpdGhlciBhIG5ldyBjaHVuayBvciBjb21wbGV0aW9uXG4gICAgICB3aGlsZSAoIWNhbmNlbGxlZCAmJiBjdXJzb3IgPj0gYWN0aXZlLmNodW5rcy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgICBhY3RpdmUub25DaHVuay50aGVuKCgpID0+IFwiY2h1bmtcIiBhcyBjb25zdCksXG4gICAgICAgICAgYWN0aXZlLmRvbmUudGhlbigoKSA9PiBcImRvbmVcIiBhcyBjb25zdCksXG4gICAgICAgIF0pO1xuXG4gICAgICAgIC8vIERyYWluIG5ldyBjaHVua3NcbiAgICAgICAgd2hpbGUgKGN1cnNvciA8IGFjdGl2ZS5jaHVua3MubGVuZ3RoKSB7XG4gICAgICAgICAgY29udHJvbGxlci5lbnF1ZXVlKGFjdGl2ZS5jaHVua3NbY3Vyc29yKytdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZXN1bHQgPT09IFwiZG9uZVwiKSB7XG4gICAgICAgICAgY29udHJvbGxlci5jbG9zZSgpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgY2FuY2VsKCkge1xuICAgICAgY2FuY2VsbGVkID0gdHJ1ZTtcbiAgICB9LFxuICB9KTtcbn1cblxuZnVuY3Rpb24gdG9NZXNzYWdlQW5kUGFydHM8VG9vbHMgZXh0ZW5kcyBUb29sU2V0Pih7XG4gIHNlc3Npb25JZCxcbiAgaWQsXG4gIGlucHV0LFxuICBkZWZhdWx0Um9sZSxcbn06IHtcbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIGlkPzogc3RyaW5nO1xuICBpbnB1dDogU2VuZElucHV0PFRvb2xzPjtcbiAgZGVmYXVsdFJvbGU6IFVJTWVzc2FnZVtcInJvbGVcIl07XG59KToge1xuICBtZXNzYWdlOiBNZXNzYWdlIHwgdW5kZWZpbmVkO1xuICBwYXJ0czogUGFydFtdO1xuICBhcHByb3ZhbHM6IEFwcHJvdmFsRGF0YVtdO1xufSB7XG4gIGxldCBtZXNzYWdlSWQgPSBpZCA/PyBgbWVzc2FnZV8ke3VsaWQoKX1gO1xuICBpZiAodHlwZW9mIGlucHV0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICByZXR1cm4ge1xuICAgICAgYXBwcm92YWxzOiBbXSxcbiAgICAgIG1lc3NhZ2U6IHtcbiAgICAgICAgaWQ6IG1lc3NhZ2VJZCxcbiAgICAgICAgc2Vzc2lvbklkLFxuICAgICAgICByb2xlOiBkZWZhdWx0Um9sZSxcbiAgICAgICAgY3JlYXRlZEF0OiBub3csXG4gICAgICAgIHN0YXJ0ZWRBdDogbnVsbCxcbiAgICAgICAgY29tcGxldGVkQXQ6IG51bGwsXG4gICAgICAgIGludGVycnVwdGVkQXQ6IG51bGwsXG4gICAgICAgIGludGVycnVwdGVkTGFzdFBhcnQ6IG51bGwsXG4gICAgICAgIHVzYWdlOiBudWxsLFxuICAgICAgICB3b3JrZmxvd1J1bklkOiBudWxsLFxuICAgICAgICBtZXRhZGF0YTogbnVsbCxcbiAgICAgIH0sXG4gICAgICBwYXJ0czogW1xuICAgICAgICB7XG4gICAgICAgICAgc2Vzc2lvbklkLFxuICAgICAgICAgIG1lc3NhZ2VJZCxcbiAgICAgICAgICBpZDogYHBhcnRfJHttZXNzYWdlSWR9XzBgLFxuICAgICAgICAgIGluZGV4OiAwLFxuICAgICAgICAgIHBhcnQ6IHsgdHlwZTogXCJ0ZXh0XCIsIHRleHQ6IGlucHV0IH0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH07XG4gIH1cbiAgaWYgKFwidHlwZVwiIGluIGlucHV0ICYmIGlucHV0LnR5cGUgPT09IFwiYXBwcm92YWxcIikge1xuICAgIHJldHVybiB7XG4gICAgICBtZXNzYWdlOiB1bmRlZmluZWQsXG4gICAgICBwYXJ0czogW10sXG4gICAgICBhcHByb3ZhbHM6IFtpbnB1dC5hcHByb3ZhbF0sXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IG1zZyA9XG4gICAgXCJ0eXBlXCIgaW4gaW5wdXQgJiYgaW5wdXQudHlwZSA9PT0gXCJtZXNzYWdlXCIgPyBpbnB1dC5tZXNzYWdlIDogaW5wdXQ7XG4gIGlmIChcImlkXCIgaW4gbXNnICYmIG1zZy5pZCkge1xuICAgIG1lc3NhZ2VJZCA9IG1zZy5pZDtcbiAgfVxuXG4gIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gIGNvbnN0IG1ldGFkYXRhID1cbiAgICBcIm1ldGFkYXRhXCIgaW4gbXNnICYmIG1zZy5tZXRhZGF0YSAhPSBudWxsXG4gICAgICA/IChtc2cubWV0YWRhdGEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pXG4gICAgICA6IG51bGw7XG4gIHJldHVybiB7XG4gICAgYXBwcm92YWxzOiBbXSxcbiAgICBtZXNzYWdlOiB7XG4gICAgICBzZXNzaW9uSWQsXG4gICAgICBpZDogbWVzc2FnZUlkLFxuICAgICAgY3JlYXRlZEF0OiBub3csXG4gICAgICBzdGFydGVkQXQ6IG51bGwsXG4gICAgICBjb21wbGV0ZWRBdDogbnVsbCxcbiAgICAgIGludGVycnVwdGVkQXQ6IG51bGwsXG4gICAgICBpbnRlcnJ1cHRlZExhc3RQYXJ0OiBudWxsLFxuICAgICAgdXNhZ2U6IG51bGwsXG4gICAgICB3b3JrZmxvd1J1bklkOiBudWxsLFxuICAgICAgcm9sZTogbXNnLnJvbGUgPz8gZGVmYXVsdFJvbGUsXG4gICAgICBtZXRhZGF0YSxcbiAgICB9LFxuICAgIHBhcnRzOiBtc2cucGFydHMubWFwKChwYXJ0LCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgYXAgPSBwYXJ0IGFzIHsgYXBwcm92YWw/OiB7IGlkOiBzdHJpbmcgfSB9O1xuICAgICAgY29uc3QgaWQgPSBhcC5hcHByb3ZhbD8uaWRcbiAgICAgICAgPyBhcHByb3ZhbFBhcnRJZChhcC5hcHByb3ZhbC5pZClcbiAgICAgICAgOiBgcGFydF8ke21lc3NhZ2VJZH1fJHtpbmRleH1gO1xuICAgICAgcmV0dXJuIHsgc2Vzc2lvbklkLCBtZXNzYWdlSWQsIGlkLCBpbmRleCwgcGFydCB9O1xuICAgIH0pLFxuICB9O1xufVxuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBFcnJvcnNcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuZXhwb3J0IGNsYXNzIFNlbmRFcnJvciBleHRlbmRzIGVycm9yZS5jcmVhdGVUYWdnZWRFcnJvcih7XG4gIG5hbWU6IFwiU2VuZEVycm9yXCIsXG4gIG1lc3NhZ2U6IFwiU2VuZCBmYWlsZWQgZm9yIHNlc3Npb24gJGlkOiAkcmVhc29uXCIsXG59KSB7fVxuXG5leHBvcnQgY2xhc3MgQXBwcm92YWxOb3RGb3VuZEVycm9yIGV4dGVuZHMgZXJyb3JlLmNyZWF0ZVRhZ2dlZEVycm9yKHtcbiAgbmFtZTogXCJBcHByb3ZhbE5vdEZvdW5kRXJyb3JcIixcbiAgbWVzc2FnZTogXCJBcHByb3ZhbCAkYXBwcm92YWxJZCBub3QgZm91bmQgaW4gc2Vzc2lvbiAkaWRcIixcbn0pIHt9XG4iLCAiaW1wb3J0IHR5cGUge1xuICBGaW5pc2hSZWFzb24sXG4gIFRvb2xTZXQsXG4gIFVJTWVzc2FnZSxcbiAgVUlNZXNzYWdlU3RyZWFtV3JpdGVyLFxufSBmcm9tIFwiYWlcIjtcbmltcG9ydCB7XG4gIGNvbnZlcnRUb01vZGVsTWVzc2FnZXMsXG4gIGNyZWF0ZVVJTWVzc2FnZVN0cmVhbSxcbiAgc3RlcENvdW50SXMsXG4gIHN0cmVhbVRleHQgYXMgc3RyZWFtVGV4dEFpLFxufSBmcm9tIFwiYWlcIjtcbmltcG9ydCB0eXBlIHtcbiAgQWdlbnRTdGF0dXMsXG4gIEFueUFnZW50LFxuICBSZXNvbHZhYmxlLFxuICBSZXNvbHZhYmxlQXJncyxcbiAgVHlwZWRVSU1lc3NhZ2UsXG59IGZyb20gXCIuLi8uLi9hZ2VudC9jbGllbnRcIjtcbmltcG9ydCB7IFNlc3Npb25Ob3RGb3VuZEVycm9yIH0gZnJvbSBcIi4uLy4uL2Vycm9yc1wiO1xuaW1wb3J0IHsgZGlzY292ZXJTa2lsbHNJblNhbmRib3ggfSBmcm9tIFwiLi4vLi4vc2tpbGxzL2Rpc2NvdmVyXCI7XG5pbXBvcnQgeyByZXNvbHZlU2tpbGxJbnB1dHNUb1NhbmRib3hEaXJzIH0gZnJvbSBcIi4uLy4uL3NraWxscy9yZXNvbHZlXCI7XG5pbXBvcnQgdHlwZSB7IFNraWxsU3VtbWFyeSB9IGZyb20gXCIuLi8uLi9za2lsbHMvdHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgUGFydCB9IGZyb20gXCIuLi8uLi9zdG9yYWdlL3R5cGVzXCI7XG5pbXBvcnQgeyB0eXBlIEJ1aWx0SW5Ub29sTmFtZSwgZ2V0VG9vbHMsIHR5cGUgVG9vbENvbnRleHQgfSBmcm9tIFwiLi4vLi4vdG9vbHNcIjtcbmltcG9ydCB7IGNyZWF0ZUxvZ2dlciwgdHlwZSBMb2dnZXIgfSBmcm9tIFwiLi4vLi4vdXRpbHMvbG9nZ2VyXCI7XG5pbXBvcnQge1xuICBhcHBseVByb21wdENhY2hpbmdUb01vZGVsUmVxdWVzdCxcbiAgbWVyZ2VQcm92aWRlck9wdGlvbnMsXG59IGZyb20gXCIuLi8uLi91dGlscy9wcm9tcHQtY2FjaGVcIjtcbmltcG9ydCB7IGFzc2VtYmxlVUlNZXNzYWdlcyB9IGZyb20gXCIuLi8uLi91dGlscy91aVwiO1xuaW1wb3J0IHR5cGUgeyBTdGVwVXNhZ2UgfSBmcm9tIFwiLi4vLi4vdXRpbHMvdXNhZ2VcIjtcbmltcG9ydCB7IGFwcHJvdmFsUGFydElkIH0gZnJvbSBcIi4uL3NlbmRcIjtcblxuY29uc3QgSU5URVJSVVBUX1BPTExfSU5URVJWQUxfTVMgPSAyNTA7XG5cbmZ1bmN0aW9uIHBvbGxGb3JJbnRlcnJ1cHQoe1xuICBhZ2VudCxcbiAgbWVzc2FnZUlkLFxuICBzaWduYWwsXG4gIGFib3J0Q29udHJvbGxlcixcbn06IHtcbiAgYWdlbnQ6IEFueUFnZW50O1xuICBtZXNzYWdlSWQ6IHN0cmluZztcbiAgc2lnbmFsOiBBYm9ydFNpZ25hbDtcbiAgYWJvcnRDb250cm9sbGVyOiBBYm9ydENvbnRyb2xsZXI7XG59KToge1xuICBmaXJzdENoZWNrOiBQcm9taXNlPHZvaWQ+O1xuICBpbnRlcnJ1cHRlZExhc3RQYXJ0UmVmOiB7IGN1cnJlbnQ6IHsgaW5kZXg6IG51bWJlcjsgcGFydDogdW5rbm93biB9IHwgbnVsbCB9O1xufSB7XG4gIGxldCByZXNvbHZlRmlyc3RDaGVjazogKCkgPT4gdm9pZDtcbiAgY29uc3QgZmlyc3RDaGVjayA9IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG4gICAgcmVzb2x2ZUZpcnN0Q2hlY2sgPSByZXNvbHZlO1xuICB9KTtcbiAgY29uc3QgaW50ZXJydXB0ZWRMYXN0UGFydFJlZiA9IHtcbiAgICBjdXJyZW50OiBudWxsIGFzIHsgaW5kZXg6IG51bWJlcjsgcGFydDogdW5rbm93biB9IHwgbnVsbCxcbiAgfTtcblxuICBjb25zdCBsb2cgPSBjcmVhdGVMb2dnZXIoe1xuICAgIGNvbmZpZzogeyAuLi5hZ2VudC5vcHRpb25zLmxvZ2dpbmcsIG5hbWU6IGFnZW50Lm5hbWUgfSxcbiAgICBzdWJzeXN0ZW06IFwiYWktbG9vcFwiLFxuICB9KTtcblxuICBjb25zdCBwb2xsID0gYXN5bmMgKCkgPT4ge1xuICAgIGxldCBpc0ZpcnN0ID0gdHJ1ZTtcbiAgICB3aGlsZSAoIXNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gYXdhaXQgYWdlbnQuc3RvcmFnZS5tZXNzYWdlLmdldChtZXNzYWdlSWQpO1xuICAgICAgaWYgKCFtZXNzYWdlKSB7XG4gICAgICAgIGlmIChpc0ZpcnN0KSB7XG4gICAgICAgICAgcmVzb2x2ZUZpcnN0Q2hlY2soKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBNZXNzYWdlICR7bWVzc2FnZUlkfSBub3QgZm91bmRgKTtcbiAgICAgIH1cbiAgICAgIGlmIChtZXNzYWdlLmludGVycnVwdGVkQXQgIT09IG51bGwpIHtcbiAgICAgICAgbG9nLmluZm8oXCJpbnRlcnJ1cHQgZGV0ZWN0ZWRcIiwgeyBtZXNzYWdlSWQgfSk7XG4gICAgICAgIGludGVycnVwdGVkTGFzdFBhcnRSZWYuY3VycmVudCA9IG1lc3NhZ2UuaW50ZXJydXB0ZWRMYXN0UGFydDtcbiAgICAgICAgYWJvcnRDb250cm9sbGVyLmFib3J0KCk7XG4gICAgICAgIGlmIChpc0ZpcnN0KSB7XG4gICAgICAgICAgcmVzb2x2ZUZpcnN0Q2hlY2soKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoaXNGaXJzdCkge1xuICAgICAgICBpc0ZpcnN0ID0gZmFsc2U7XG4gICAgICAgIHJlc29sdmVGaXJzdENoZWNrKCk7XG4gICAgICB9XG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT5cbiAgICAgICAgc2V0VGltZW91dChyZXNvbHZlLCBJTlRFUlJVUFRfUE9MTF9JTlRFUlZBTF9NUylcbiAgICAgICk7XG4gICAgfVxuICB9O1xuXG4gIHBvbGwoKTtcbiAgcmV0dXJuIHsgZmlyc3RDaGVjaywgaW50ZXJydXB0ZWRMYXN0UGFydFJlZiB9O1xufVxuXG50eXBlIFN0cmVhbVRleHRPcHRpb25zID0ge1xuICBzdGVwVGhyb3VnaHB1dDogbnVtYmVyO1xuICBhc3Npc3RhbnRNZXNzYWdlSWQ6IHN0cmluZztcbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIGFnZW50OiBBbnlBZ2VudDtcbiAgY3JlYXRlZEF0OiBudW1iZXI7XG4gIGNvbnRleHQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBzdGF0ZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIHdyaXRhYmxlOiBXcml0YWJsZVN0cmVhbTtcbiAgbGFzdFBhcnRJbmRleDogbnVtYmVyO1xuICBzdGVwSW5kZXhPZmZzZXQ6IG51bWJlcjtcbiAgZGlzY292ZXJlZFNraWxsczogU2tpbGxTdW1tYXJ5W10gfCBudWxsO1xufTtcblxuZXhwb3J0IHR5cGUgU3RyZWFtVGV4dFJlc3VsdCA9IHtcbiAgZmluaXNoUmVhc29uOiBGaW5pc2hSZWFzb247XG4gIGxhc3RQYXJ0SW5kZXg6IG51bWJlcjtcbiAgdXNhZ2VTdGVwczogU3RlcFVzYWdlW107XG4gIHBlbmRpbmdBcHByb3ZhbHM6IHsgYXBwcm92YWxJZDogc3RyaW5nOyB0b29sTmFtZTogc3RyaW5nIH1bXTtcbiAgbWF4U3RlcHM6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgZGlzY292ZXJlZFNraWxsczogU2tpbGxTdW1tYXJ5W10gfCBudWxsO1xuICBjb250ZXh0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn07XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzdHJlYW1UZXh0PFRvb2xzIGV4dGVuZHMgVG9vbFNldD4oe1xuICBzdGVwVGhyb3VnaHB1dCxcbiAgYXNzaXN0YW50TWVzc2FnZUlkLFxuICBhZ2VudCxcbiAgc2Vzc2lvbklkLFxuICBjb250ZXh0LFxuICBzdGF0ZSxcbiAgY3JlYXRlZEF0LFxuICB3cml0YWJsZSxcbiAgbGFzdFBhcnRJbmRleCxcbiAgc3RlcEluZGV4T2Zmc2V0LFxuICBkaXNjb3ZlcmVkU2tpbGxzLFxufTogU3RyZWFtVGV4dE9wdGlvbnMpOiBQcm9taXNlPFN0cmVhbVRleHRSZXN1bHQ+IHtcbiAgY29uc3QgbG9nID0gY3JlYXRlTG9nZ2VyKHtcbiAgICBjb25maWc6IHsgLi4uYWdlbnQub3B0aW9ucy5sb2dnaW5nLCBuYW1lOiBhZ2VudC5uYW1lIH0sXG4gICAgc3Vic3lzdGVtOiBcImFpLWxvb3BcIixcbiAgfSk7XG5cbiAgY29uc3Qgc3RlcExvZyA9IGxvZy53aXRoQ29udGV4dCh7XG4gICAgc2Vzc2lvbklkLFxuICAgIG1lc3NhZ2VJZDogYXNzaXN0YW50TWVzc2FnZUlkLFxuICB9KTtcbiAgY29uc3QgZG9uZVN0ZXAgPSBzdGVwTG9nLnRpbWUoXCJzdHJlYW1UZXh0XCIpO1xuXG4gIGNvbnN0IHRocm90dGxlZEVtaXRTdGF0dXMgPSBjcmVhdGVUaHJvdHRsZWRFbWl0U3RhdHVzKGFnZW50KTtcblxuICBjb25zdCBhYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gIGNvbnN0IHBvbGxDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuXG4gIGNvbnN0IHsgZmlyc3RDaGVjaywgaW50ZXJydXB0ZWRMYXN0UGFydFJlZiB9ID0gcG9sbEZvckludGVycnVwdCh7XG4gICAgYWdlbnQsXG4gICAgbWVzc2FnZUlkOiBhc3Npc3RhbnRNZXNzYWdlSWQsXG4gICAgc2lnbmFsOiBwb2xsQ29udHJvbGxlci5zaWduYWwsXG4gICAgYWJvcnRDb250cm9sbGVyLFxuICB9KTtcblxuICBjb25zdCBkb25lTG9hZCA9IHN0ZXBMb2cudGltZShcImxvYWQgc2Vzc2lvbiArIG1lc3NhZ2VzICsgcGFydHMgKyBzYW5kYm94XCIpO1xuICBjb25zdCBbLCBtZXNzYWdlc1Jlc3VsdCwgcGFydHNSZXN1bHQsIHsgc2FuZGJveCwgc2FuZGJveFJlY29yZCB9XSA9XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgZmlyc3RDaGVjayxcbiAgICAgIGFnZW50LnN0b3JhZ2UubWVzc2FnZS5saXN0QnlTZXNzaW9uKHNlc3Npb25JZCksXG4gICAgICBhZ2VudC5zdG9yYWdlLnBhcnQubGlzdEJ5U2Vzc2lvbihzZXNzaW9uSWQpLFxuICAgICAgYWdlbnQuc3RvcmFnZS5zZXNzaW9uLmdldChzZXNzaW9uSWQpLnRoZW4oYXN5bmMgKHNlc3Npb24pID0+IHtcbiAgICAgICAgaWYgKCFzZXNzaW9uKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFNlc3Npb25Ob3RGb3VuZEVycm9yKHsgaWQ6IHNlc3Npb25JZCB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNhbmRib3hJZCA9IHNlc3Npb24uc2FuZGJveElkID8/IHNlc3Npb24uaWQ7XG4gICAgICAgIGNvbnN0IHNhbmRib3ggPSBhZ2VudC5zYW5kYm94KHNhbmRib3hJZCk7XG4gICAgICAgIGNvbnN0IHNhbmRib3hSZWNvcmQgPSBhd2FpdCBhZ2VudC5zdG9yYWdlLnNhbmRib3guZ2V0KHNhbmRib3hJZCk7XG5cbiAgICAgICAgcmV0dXJuIHsgc2FuZGJveCwgc2FuZGJveFJlY29yZCB9O1xuICAgICAgfSksXG4gICAgXSk7XG5cbiAgZG9uZUxvYWQoKTtcblxuICBpZiAoYWJvcnRDb250cm9sbGVyLnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgcG9sbENvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICByZXR1cm4ge1xuICAgICAgZmluaXNoUmVhc29uOiBcInN0b3BcIiBhcyBGaW5pc2hSZWFzb24sXG4gICAgICBsYXN0UGFydEluZGV4LFxuICAgICAgdXNhZ2VTdGVwczogW10sXG4gICAgICBwZW5kaW5nQXBwcm92YWxzOiBbXSxcbiAgICAgIG1heFN0ZXBzOiB1bmRlZmluZWQsXG4gICAgICBkaXNjb3ZlcmVkU2tpbGxzLFxuICAgICAgY29udGV4dCxcbiAgICB9O1xuICB9XG5cbiAgY29uc3Qgc2V0U3RhcnRlZFByb21pc2UgPVxuICAgIGxhc3RQYXJ0SW5kZXggPT09IDBcbiAgICAgID8gKGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgICAgICAgIGNvbnN0IHBlbmRpbmdNZXNzYWdlcyA9IG1lc3NhZ2VzUmVzdWx0LmZpbHRlcihcbiAgICAgICAgICAgIChtKSA9PiBtLmNyZWF0ZWRBdCA8PSBjcmVhdGVkQXQgJiYgbS5zdGFydGVkQXQgPT09IG51bGxcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChwZW5kaW5nTWVzc2FnZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgICAgICBwZW5kaW5nTWVzc2FnZXMubWFwKChtKSA9PlxuICAgICAgICAgICAgICAgIGFnZW50LnN0b3JhZ2UubWVzc2FnZS51cGRhdGUobS5pZCwge1xuICAgICAgICAgICAgICAgICAgc3RhcnRlZEF0OiBub3csXG4gICAgICAgICAgICAgICAgICBjb21wbGV0ZWRBdDogbS5yb2xlID09PSBcImFzc2lzdGFudFwiID8gbnVsbCA6IG5vdyxcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSkoKVxuICAgICAgOiBudWxsO1xuXG4gIGNvbnN0IGFsbFBhcnRzID0gWy4uLnBhcnRzUmVzdWx0XTtcbiAgY29uc3QgbmV4dFBhcnRJbmRleFJlZiA9IHtcbiAgICBjdXJyZW50OiBNYXRoLm1heChcbiAgICAgIGxhc3RQYXJ0SW5kZXgsXG4gICAgICAuLi5hbGxQYXJ0c1xuICAgICAgICAuZmlsdGVyKChwKSA9PiBwLm1lc3NhZ2VJZCA9PT0gYXNzaXN0YW50TWVzc2FnZUlkKVxuICAgICAgICAubWFwKChwKSA9PiBwLmluZGV4ICsgMSksXG4gICAgICAwXG4gICAgKSxcbiAgfTtcblxuICBjb25zdCBza2lsbHNSZWY6IHsgY3VycmVudDogU2tpbGxTdW1tYXJ5W10gfSA9IHtcbiAgICBjdXJyZW50OiBkaXNjb3ZlcmVkU2tpbGxzID8/IFtdLFxuICB9O1xuXG4gIC8vIEJ1aWxkIHVpTWVzc2FnZXMgZnJvbSBjdXJyZW50IHBhcnRzIChyZWJ1aWx0IGJldHdlZW4gaXRlcmF0aW9ucylcbiAgbGV0IHVpTWVzc2FnZXMgPSBhc3NlbWJsZVVJTWVzc2FnZXMoe1xuICAgIG1lc3NhZ2VzOiBtZXNzYWdlc1Jlc3VsdCxcbiAgICBwYXJ0czogYWxsUGFydHMsXG4gICAgdW50aWw6IGNyZWF0ZWRBdCxcbiAgICBpbmNsdWRlUXVldWVkOiB0cnVlLFxuICAgIGV4Y2x1ZGVTdWJUb29sUGFydHM6IHRydWUsXG4gIH0pO1xuXG4gIC8vIEJ1aWxkIHJlc29sdmFibGUgYXJncyBmb3IgcmVzb2x2aW5nIGFnZW50IG9wdGlvbnNcbiAgY29uc3QgcmVzb2x2YWJsZUFyZ3M6IFJlc29sdmFibGVBcmdzID0ge1xuICAgIGNvbnRleHQsXG4gICAgc3RhdGUsXG4gICAgc2Vzc2lvbklkLFxuICAgIHNhbmRib3gsXG4gICAgZ2V0IG1lc3NhZ2VzKCkge1xuICAgICAgcmV0dXJuIHVpTWVzc2FnZXM7XG4gICAgfSxcbiAgfTtcblxuICAvLyBza2lsbHMgZGlzY292ZXJ5IFx1MjAxNCBmaXJzdCBpdGVyYXRpb24gb25seVxuICBpZiAobGFzdFBhcnRJbmRleCA9PT0gMCAmJiAhZGlzY292ZXJlZFNraWxscykge1xuICAgIGNvbnN0IHJlc29sdmVkU2tpbGxzID0gYXdhaXQgcmVzb2x2ZU9wdGlvbihcbiAgICAgIGFnZW50Lm9wdGlvbnMuc2tpbGxzLFxuICAgICAgcmVzb2x2YWJsZUFyZ3NcbiAgICApO1xuICAgIGNvbnN0IHNraWxsc0RpcnMgPSByZXNvbHZlZFNraWxscz8ubGVuZ3RoXG4gICAgICA/IGF3YWl0IHJlc29sdmVTa2lsbElucHV0c1RvU2FuZGJveERpcnMoe1xuICAgICAgICAgIGFnZW50LFxuICAgICAgICAgIHNhbmRib3gsXG4gICAgICAgICAgc2tpbGxzOiByZXNvbHZlZFNraWxscyxcbiAgICAgICAgICBzZXNzaW9uSWQsXG4gICAgICAgIH0pXG4gICAgICA6IFtdO1xuICAgIGlmIChza2lsbHNEaXJzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGRvbmVTa2lsbHMgPSBzdGVwTG9nLnRpbWUoXCJkaXNjb3ZlciBza2lsbHNcIiwgeyBza2lsbHNEaXJzIH0pO1xuICAgICAgc2tpbGxzUmVmLmN1cnJlbnQgPSBhd2FpdCBkaXNjb3ZlclNraWxsc0luU2FuZGJveCh7XG4gICAgICAgIGFnZW50LFxuICAgICAgICBzYW5kYm94LFxuICAgICAgICBza2lsbHNEaXJzLFxuICAgICAgICBzZXNzaW9uSWQsXG4gICAgICB9KTtcbiAgICAgIGRvbmVTa2lsbHMoeyBjb3VudDogc2tpbGxzUmVmLmN1cnJlbnQubGVuZ3RoIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbm5lciBsb29wOiBydW4gdXAgdG8gYHN0ZXBUaHJvdWdocHV0YCBzZXF1ZW50aWFsIExMTSBjYWxscy5cbiAgICogUGFydHMgYXJlIHBlcnNpc3RlZCBhZnRlciBlYWNoIGNhbGwgc28gcHJvZ3Jlc3MgaXNuJ3QgbG9zdC5cbiAgICogU2Vzc2lvbiBpcyByZS1mZXRjaGVkIGJldHdlZW4gaXRlcmF0aW9ucyAoY29uZmlnIG1heSBjaGFuZ2UpLFxuICAgKiBwYXJhbGxlbGl6ZWQgd2l0aCBwYXJ0IHBlcnNpc3RlbmNlIG9uIG5vbi1maW5hbCBpdGVyYXRpb25zLlxuICAgKi9cbiAgY29uc3QgdXNhZ2VTdGVwczogU3RlcFVzYWdlW10gPSBbXTtcbiAgbGV0IGludGVybmFsU3RlcEluZGV4ID0gMDtcbiAgbGV0IGxvb3BGaW5pc2hSZWFzb246IEZpbmlzaFJlYXNvbiA9IFwidW5rbm93blwiIGFzIEZpbmlzaFJlYXNvbjtcbiAgbGV0IHdhc0Fib3J0ZWQgPSBmYWxzZTtcbiAgY29uc3QgYWxsUGVuZGluZ0FwcHJvdmFsczogeyBhcHByb3ZhbElkOiBzdHJpbmc7IHRvb2xOYW1lOiBzdHJpbmcgfVtdID0gW107XG4gIGxldCBjdXJyZW50TWF4U3RlcHM6IG51bWJlciB8IHVuZGVmaW5lZDtcblxuICB0cnkge1xuICAgIGZvciAobGV0IGl0ZXJhdGlvbiA9IDA7IGl0ZXJhdGlvbiA8IHN0ZXBUaHJvdWdocHV0OyBpdGVyYXRpb24rKykge1xuICAgICAgLy8gUmVzb2x2ZSBhZ2VudCBvcHRpb25zIGZyZXNoIGVhY2ggaXRlcmF0aW9uXG4gICAgICBjb25zdCByZXNvbHZlZE1vZGVsID0gYXdhaXQgcmVzb2x2ZU9wdGlvbihcbiAgICAgICAgYWdlbnQub3B0aW9ucy5tb2RlbCxcbiAgICAgICAgcmVzb2x2YWJsZUFyZ3NcbiAgICAgICk7XG4gICAgICBjb25zdCByZXNvbHZlZEdlbmVyYXRpb24gPSBhd2FpdCByZXNvbHZlT3B0aW9uKFxuICAgICAgICBhZ2VudC5vcHRpb25zLmdlbmVyYXRpb24sXG4gICAgICAgIHJlc29sdmFibGVBcmdzXG4gICAgICApO1xuICAgICAgY29uc3QgcmVzb2x2ZWRBY3RpdmVUb29scyA9IChhd2FpdCByZXNvbHZlT3B0aW9uKFxuICAgICAgICBhZ2VudC5vcHRpb25zLmFjdGl2ZVRvb2xzLFxuICAgICAgICByZXNvbHZhYmxlQXJnc1xuICAgICAgKSkgYXMgc3RyaW5nW10gfCB1bmRlZmluZWQ7XG5cbiAgICAgIGN1cnJlbnRNYXhTdGVwcyA9IHJlc29sdmVkR2VuZXJhdGlvbj8ubWF4U3RlcHM7XG5cbiAgICAgIGlmICghcmVzb2x2ZWRNb2RlbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBZ2VudCBtb2RlbCBpcyBub3Qgc2V0XCIpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzdGVwUGFydHM6IFVJTWVzc2FnZVtcInBhcnRzXCJdID0gW107XG4gICAgICBsZXQgc3RyZWFtVGV4dEZpbmlzaFJlYXNvbjogRmluaXNoUmVhc29uIHwgdW5kZWZpbmVkO1xuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBzdHJlYW0gPSBjcmVhdGVVSU1lc3NhZ2VTdHJlYW0oe1xuICAgICAgICAgIGV4ZWN1dGU6IGFzeW5jICh7IHdyaXRlciB9KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IHJhd1Rvb2xzLCB0b29sc1dpdGhOZWVkc0FwcHJvdmFsLCB0b29sQ29udGV4dCB9ID0gZ2V0VG9vbHMoe1xuICAgICAgICAgICAgICBhZ2VudCxcbiAgICAgICAgICAgICAgc2FuZGJveCxcbiAgICAgICAgICAgICAgc2tpbGxzUmVmLFxuICAgICAgICAgICAgICB3cml0ZXIsXG4gICAgICAgICAgICAgIGFib3J0Q29udHJvbGxlcixcbiAgICAgICAgICAgICAgbmV4dFBhcnRJbmRleFJlZixcbiAgICAgICAgICAgICAgYXNzaXN0YW50TWVzc2FnZUlkLFxuICAgICAgICAgICAgICBzZXNzaW9uSWQsXG4gICAgICAgICAgICAgIHN0ZXBMb2csXG4gICAgICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgICAgICBtZXNzYWdlczogdWlNZXNzYWdlcyxcbiAgICAgICAgICAgICAgYWN0aXZlVG9vbHM6IHJlc29sdmVkQWN0aXZlVG9vbHMsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgLy8gcHJvY2VzcyBhcHByb3ZhbHMgb25jZSAoZmlyc3QgaXRlcmF0aW9uIG9ubHkpXG4gICAgICAgICAgICBpZiAoaXRlcmF0aW9uID09PSAwKSB7XG4gICAgICAgICAgICAgIGF3YWl0IHByb2Nlc3NBcHByb3ZhbHMoe1xuICAgICAgICAgICAgICAgIGFsbFBhcnRzLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2VzUmVzdWx0LFxuICAgICAgICAgICAgICAgIGNyZWF0ZWRBdCxcbiAgICAgICAgICAgICAgICByYXdUb29scyxcbiAgICAgICAgICAgICAgICBhYm9ydENvbnRyb2xsZXIsXG4gICAgICAgICAgICAgICAgdG9vbENvbnRleHQsXG4gICAgICAgICAgICAgICAgYWdlbnQsXG4gICAgICAgICAgICAgICAgc3RlcExvZyxcbiAgICAgICAgICAgICAgICB0aHJvdHRsZWRFbWl0U3RhdHVzLFxuICAgICAgICAgICAgICAgIHdyaXRlcixcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRocm90dGxlZEVtaXRTdGF0dXMoe1xuICAgICAgICAgICAgICB3cml0ZXIsXG4gICAgICAgICAgICAgIHN0YXR1czogeyB0eXBlOiBcInRoaW5raW5nXCIgfSxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBjb25zdCBpdGVyUmVzdWx0ID0gc3RyZWFtVGV4dEFpKHtcbiAgICAgICAgICAgICAgbWVzc2FnZXM6IFt7IHJvbGU6IFwidXNlclwiIGFzIGNvbnN0LCBjb250ZW50OiBcIi5cIiB9XSxcbiAgICAgICAgICAgICAgdG9vbHM6IHRvb2xzV2l0aE5lZWRzQXBwcm92YWwsXG4gICAgICAgICAgICAgIG1vZGVsOiByZXNvbHZlZE1vZGVsLFxuICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogYWJvcnRDb250cm9sbGVyLnNpZ25hbCxcbiAgICAgICAgICAgICAgc3RvcFdoZW46IHN0ZXBDb3VudElzKDEpLFxuICAgICAgICAgICAgICB0ZW1wZXJhdHVyZTogcmVzb2x2ZWRHZW5lcmF0aW9uPy50ZW1wZXJhdHVyZSxcbiAgICAgICAgICAgICAgdG9wSzogcmVzb2x2ZWRHZW5lcmF0aW9uPy50b3BLLFxuICAgICAgICAgICAgICB0b3BQOiByZXNvbHZlZEdlbmVyYXRpb24/LnRvcFAsXG4gICAgICAgICAgICAgIGZyZXF1ZW5jeVBlbmFsdHk6IHJlc29sdmVkR2VuZXJhdGlvbj8uZnJlcXVlbmN5UGVuYWx0eSxcbiAgICAgICAgICAgICAgcHJlc2VuY2VQZW5hbHR5OiByZXNvbHZlZEdlbmVyYXRpb24/LnByZXNlbmNlUGVuYWx0eSxcbiAgICAgICAgICAgICAgbWF4T3V0cHV0VG9rZW5zOiByZXNvbHZlZEdlbmVyYXRpb24/Lm1heE91dHB1dFRva2VucyxcbiAgICAgICAgICAgICAgaGVhZGVyczogcmVzb2x2ZWRHZW5lcmF0aW9uPy5oZWFkZXJzLFxuICAgICAgICAgICAgICBleHBlcmltZW50YWxfY29udGV4dDoge1xuICAgICAgICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgICAgICAgc3RhdGUsXG4gICAgICAgICAgICAgICAgc2Vzc2lvbklkLFxuICAgICAgICAgICAgICAgIHNhbmRib3gsXG4gICAgICAgICAgICAgICAgbWVzc2FnZXM6IHVpTWVzc2FnZXMsXG4gICAgICAgICAgICAgIH0gc2F0aXNmaWVzIFRvb2xDb250ZXh0LFxuICAgICAgICAgICAgICBwcmVwYXJlU3RlcDogYXN5bmMgKHsgbW9kZWwgfSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNraWxsc0NvbnRleHQgPSBidWlsZFNraWxsc0NvbnRleHQoc2tpbGxzUmVmLmN1cnJlbnQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGN3ZFByb21wdCA9IHNhbmRib3hSZWNvcmQ/LnNldHVwPy5jd2RcbiAgICAgICAgICAgICAgICAgID8gYFlvdXIgd29ya2luZyBkaXJlY3RvcnkgaXMgJHtzYW5kYm94UmVjb3JkLnNldHVwLmN3ZH0uIEFsbCBmaWxlIHBhdGhzIHNob3VsZCBiZSBhYnNvbHV0ZS5gXG4gICAgICAgICAgICAgICAgICA6IFwiQWxsIGZpbGUgcGF0aHMgbXVzdCBiZSBhYnNvbHV0ZS5cIjtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc29sdmVkU3lzdGVtID0gYXdhaXQgcmVzb2x2ZVN5c3RlbShcbiAgICAgICAgICAgICAgICAgIGFnZW50Lm9wdGlvbnMuc3lzdGVtLFxuICAgICAgICAgICAgICAgICAgcmVzb2x2YWJsZUFyZ3NcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgY29uc3Qgc3lzdGVtSGVhZGVyID0gam9pblByb21wdFNlY3Rpb25zKFxuICAgICAgICAgICAgICAgICAgQkFTRV9TWVNURU1fUFJPTVBULFxuICAgICAgICAgICAgICAgICAgY3dkUHJvbXB0LFxuICAgICAgICAgICAgICAgICAgcmVzb2x2ZWRTeXN0ZW1cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGNvbnN0IHN5c3RlbUNvbnRleHQgPSBqb2luUHJvbXB0U2VjdGlvbnMoXG4gICAgICAgICAgICAgICAgICBza2lsbHNDb250ZXh0LFxuICAgICAgICAgICAgICAgICAgY3dkUHJvbXB0XG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnZlcnRlZE1lc3NhZ2VzID0gYXdhaXQgY29udmVydFRvTW9kZWxNZXNzYWdlcyhcbiAgICAgICAgICAgICAgICAgIHVpTWVzc2FnZXMsXG4gICAgICAgICAgICAgICAgICB7IGlnbm9yZUluY29tcGxldGVUb29sQ2FsbHM6IHRydWUgfVxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBtb2RlbE1lc3NhZ2VzID0gW1xuICAgICAgICAgICAgICAgICAgLi4uKHN5c3RlbUhlYWRlci50cmltKClcbiAgICAgICAgICAgICAgICAgICAgPyBbeyByb2xlOiBcInN5c3RlbVwiIGFzIGNvbnN0LCBjb250ZW50OiBzeXN0ZW1IZWFkZXIgfV1cbiAgICAgICAgICAgICAgICAgICAgOiBbXSksXG4gICAgICAgICAgICAgICAgICAuLi4oc3lzdGVtQ29udGV4dC50cmltKClcbiAgICAgICAgICAgICAgICAgICAgPyBbeyByb2xlOiBcInN5c3RlbVwiIGFzIGNvbnN0LCBjb250ZW50OiBzeXN0ZW1Db250ZXh0IH1dXG4gICAgICAgICAgICAgICAgICAgIDogW10pLFxuICAgICAgICAgICAgICAgICAgLi4uY29udmVydGVkTWVzc2FnZXMsXG4gICAgICAgICAgICAgICAgXTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHByb21wdENhY2hpbmcgPSBhcHBseVByb21wdENhY2hpbmdUb01vZGVsUmVxdWVzdCh7XG4gICAgICAgICAgICAgICAgICBtb2RlbDogdHlwZW9mIG1vZGVsID09PSBcInN0cmluZ1wiID8gbW9kZWwgOiBtb2RlbC5tb2RlbElkLFxuICAgICAgICAgICAgICAgICAgc2Vzc2lvbklkLFxuICAgICAgICAgICAgICAgICAgbWVzc2FnZXM6IG1vZGVsTWVzc2FnZXMsXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBsZXQgYWN0aXZlVG9vbHMgPSByZXNvbHZlZEFjdGl2ZVRvb2xzID8/IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBpZiAoc2tpbGxzUmVmLmN1cnJlbnQubGVuZ3RoID09PSAwICYmIGFjdGl2ZVRvb2xzKSB7XG4gICAgICAgICAgICAgICAgICBhY3RpdmVUb29scyA9IGFjdGl2ZVRvb2xzLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgKHQpID0+IHQgIT09IChcIlNraWxsXCIgc2F0aXNmaWVzIEJ1aWx0SW5Ub29sTmFtZSlcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2VzOiBwcm9tcHRDYWNoaW5nLm1lc3NhZ2VzLFxuICAgICAgICAgICAgICAgICAgcHJvdmlkZXJPcHRpb25zOiBtZXJnZVByb3ZpZGVyT3B0aW9ucyh7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnQ6IHJlc29sdmVkR2VuZXJhdGlvbj8ucHJvdmlkZXJPcHRpb25zLFxuICAgICAgICAgICAgICAgICAgICBwYXRjaDogcHJvbXB0Q2FjaGluZy5wcm92aWRlck9wdGlvbnMsXG4gICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgIGFjdGl2ZVRvb2xzLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIG9uU3RlcEZpbmlzaDogKHsgdXNhZ2UgfSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh1c2FnZSkge1xuICAgICAgICAgICAgICAgICAgdXNhZ2VTdGVwcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgc3RlcEluZGV4OiBzdGVwSW5kZXhPZmZzZXQgKyBpbnRlcm5hbFN0ZXBJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgbW9kZWw6IHJlc29sdmVkTW9kZWwgPz8gXCJ1bmtub3duXCIsXG4gICAgICAgICAgICAgICAgICAgIGlucHV0VG9rZW5zOiB1c2FnZS5pbnB1dFRva2VucyA/PyAwLFxuICAgICAgICAgICAgICAgICAgICBvdXRwdXRUb2tlbnM6IHVzYWdlLm91dHB1dFRva2VucyA/PyAwLFxuICAgICAgICAgICAgICAgICAgICB0b3RhbFRva2VuczogdXNhZ2UudG90YWxUb2tlbnMgPz8gMCxcbiAgICAgICAgICAgICAgICAgICAgY2FjaGVSZWFkVG9rZW5zOlxuICAgICAgICAgICAgICAgICAgICAgIHVzYWdlLmlucHV0VG9rZW5EZXRhaWxzPy5jYWNoZVJlYWRUb2tlbnMgPz8gMCxcbiAgICAgICAgICAgICAgICAgICAgY2FjaGVXcml0ZVRva2VuczpcbiAgICAgICAgICAgICAgICAgICAgICB1c2FnZS5pbnB1dFRva2VuRGV0YWlscz8uY2FjaGVXcml0ZVRva2VucyA/PyAwLFxuICAgICAgICAgICAgICAgICAgICByZWFzb25pbmdUb2tlbnM6XG4gICAgICAgICAgICAgICAgICAgICAgdXNhZ2Uub3V0cHV0VG9rZW5EZXRhaWxzPy5yZWFzb25pbmdUb2tlbnMgPz8gMCxcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpbnRlcm5hbFN0ZXBJbmRleCsrO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHdyaXRlci5tZXJnZShcbiAgICAgICAgICAgICAgaXRlclJlc3VsdC50b1VJTWVzc2FnZVN0cmVhbSh7XG4gICAgICAgICAgICAgICAgZ2VuZXJhdGVNZXNzYWdlSWQ6ICgpID0+IGFzc2lzdGFudE1lc3NhZ2VJZCxcbiAgICAgICAgICAgICAgICBvbkZpbmlzaDogKHsgbWVzc2FnZXMgfSkgPT4ge1xuICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBtIG9mIG1lc3NhZ2VzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtLnJvbGUgPT09IFwiYXNzaXN0YW50XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICBzdGVwUGFydHMucHVzaCguLi5tLnBhcnRzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBzdHJlYW1UZXh0RmluaXNoUmVhc29uID0gYXdhaXQgaXRlclJlc3VsdC5maW5pc2hSZWFzb247XG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgYXdhaXQgc3RyZWFtLnBpcGVUbyh3cml0YWJsZSwge1xuICAgICAgICAgIHByZXZlbnRDbG9zZTogdHJ1ZSxcbiAgICAgICAgICBwcmV2ZW50QWJvcnQ6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmIChhYm9ydENvbnRyb2xsZXIuc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgICAgICB3YXNBYm9ydGVkID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGFib3J0Q29udHJvbGxlci5zaWduYWwuYWJvcnRlZCkge1xuICAgICAgICB3YXNBYm9ydGVkID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgLy8gTWFyayBpbnRlcnJ1cHRlZCB0b29sIHBhcnRzXG4gICAgICBpZiAod2FzQWJvcnRlZCkge1xuICAgICAgICBjb25zdCB0ZXJtaW5hbFN0YXRlcyA9IG5ldyBTZXQoW1xuICAgICAgICAgIFwib3V0cHV0LWF2YWlsYWJsZVwiLFxuICAgICAgICAgIFwib3V0cHV0LWVycm9yXCIsXG4gICAgICAgICAgXCJvdXRwdXQtZGVuaWVkXCIsXG4gICAgICAgICAgXCJkb25lXCIsXG4gICAgICAgIF0pO1xuICAgICAgICBmb3IgKGNvbnN0IHBhcnQgb2Ygc3RlcFBhcnRzKSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgXCJ0eXBlXCIgaW4gcGFydCAmJlxuICAgICAgICAgICAgdHlwZW9mIHBhcnQudHlwZSA9PT0gXCJzdHJpbmdcIiAmJlxuICAgICAgICAgICAgcGFydC50eXBlLnN0YXJ0c1dpdGgoXCJ0b29sLVwiKSAmJlxuICAgICAgICAgICAgXCJzdGF0ZVwiIGluIHBhcnQgJiZcbiAgICAgICAgICAgICF0ZXJtaW5hbFN0YXRlcy5oYXMocGFydC5zdGF0ZSBhcyBzdHJpbmcpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAocGFydCBhcyB7IHN0YXRlOiBzdHJpbmcgfSkuc3RhdGUgPSBcIm91dHB1dC1lcnJvclwiO1xuICAgICAgICAgICAgKHBhcnQgYXMgeyBlcnJvclRleHQ/OiBzdHJpbmcgfSkuZXJyb3JUZXh0ID0gXCJpbnRlcnJ1cHRlZFwiO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBIYW5kbGUgaW50ZXJydXB0ZWQgbGFzdFBhcnQgdHJ1bmNhdGlvblxuICAgICAgY29uc3QgbGFzdFBhcnQgPSBpbnRlcnJ1cHRlZExhc3RQYXJ0UmVmLmN1cnJlbnQ7XG5cbiAgICAgIGNvbnN0IG5ld1BhcnRSZWNvcmRzID0gc3RlcFBhcnRzXG4gICAgICAgIC5tYXAoKHVpUGFydCwgaSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGluZGV4ID0gbmV4dFBhcnRJbmRleFJlZi5jdXJyZW50ICsgaTtcbiAgICAgICAgICBpZiAobGFzdFBhcnQgIT0gbnVsbCAmJiBpbmRleCA+IGxhc3RQYXJ0LmluZGV4KSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgdXNlQ2xpZW50UGFydCA9IGxhc3RQYXJ0ICE9IG51bGwgJiYgaW5kZXggPT09IGxhc3RQYXJ0LmluZGV4O1xuICAgICAgICAgIGNvbnN0IGNvbnRlbnQgPSAoXG4gICAgICAgICAgICB1c2VDbGllbnRQYXJ0ID8gbGFzdFBhcnQucGFydCA6IHVpUGFydFxuICAgICAgICAgICkgYXMgVHlwZWRVSU1lc3NhZ2U8VG9vbHM+W1wicGFydHNcIl1bbnVtYmVyXTtcbiAgICAgICAgICBjb25zdCBwYXJ0SWQgPVxuICAgICAgICAgICAgXCJhcHByb3ZhbFwiIGluIGNvbnRlbnQgJiYgY29udGVudC5hcHByb3ZhbD8uaWRcbiAgICAgICAgICAgICAgPyBhcHByb3ZhbFBhcnRJZChjb250ZW50LmFwcHJvdmFsLmlkKVxuICAgICAgICAgICAgICA6IGBwYXJ0XyR7YXNzaXN0YW50TWVzc2FnZUlkfV8ke2luZGV4fWA7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlkOiBwYXJ0SWQsXG4gICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgIG1lc3NhZ2VJZDogYXNzaXN0YW50TWVzc2FnZUlkLFxuICAgICAgICAgICAgc2Vzc2lvbklkLFxuICAgICAgICAgICAgcGFydDogY29udGVudCxcbiAgICAgICAgICB9O1xuICAgICAgICB9KVxuICAgICAgICAuZmlsdGVyKChyKTogciBpcyBOb25OdWxsYWJsZTx0eXBlb2Ygcj4gPT4gciAhPT0gbnVsbCk7XG5cbiAgICAgIGNvbnN0IHBlcnNpc3RQcm9taXNlID0gUHJvbWlzZS5hbGwoW1xuICAgICAgICAuLi5uZXdQYXJ0UmVjb3Jkcy5tYXAoKHJlY29yZCkgPT5cbiAgICAgICAgICBhZ2VudC5zdG9yYWdlLnBhcnQuc2V0KHJlY29yZC5pZCwgcmVjb3JkKVxuICAgICAgICApLFxuICAgICAgICBhZ2VudC5zdG9yYWdlLnNlc3Npb24udXBkYXRlKHNlc3Npb25JZCwgeyBzdGF0ZSB9KSxcbiAgICAgIF0pO1xuXG4gICAgICBuZXh0UGFydEluZGV4UmVmLmN1cnJlbnQgPVxuICAgICAgICBsYXN0UGFydCAhPSBudWxsXG4gICAgICAgICAgPyBNYXRoLm1pbihcbiAgICAgICAgICAgICAgbmV4dFBhcnRJbmRleFJlZi5jdXJyZW50ICsgc3RlcFBhcnRzLmxlbmd0aCxcbiAgICAgICAgICAgICAgbGFzdFBhcnQuaW5kZXggKyAxXG4gICAgICAgICAgICApXG4gICAgICAgICAgOiBuZXh0UGFydEluZGV4UmVmLmN1cnJlbnQgKyBzdGVwUGFydHMubGVuZ3RoO1xuXG4gICAgICBjb25zdCBpdGVyUGVuZGluZ0FwcHJvdmFscyA9IHN0ZXBQYXJ0c1xuICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgIChwKTogcCBpcyB0eXBlb2YgcCAmIHsgYXBwcm92YWw6IHsgaWQ6IHN0cmluZyB9IH0gPT5cbiAgICAgICAgICAgIFwic3RhdGVcIiBpbiBwICYmXG4gICAgICAgICAgICBwLnN0YXRlID09PSBcImFwcHJvdmFsLXJlcXVlc3RlZFwiICYmXG4gICAgICAgICAgICBcImFwcHJvdmFsXCIgaW4gcCAmJlxuICAgICAgICAgICAgISEocCBhcyB7IGFwcHJvdmFsPzogeyBpZDogc3RyaW5nIH0gfSkuYXBwcm92YWw/LmlkXG4gICAgICAgIClcbiAgICAgICAgLm1hcCgocCkgPT4gKHtcbiAgICAgICAgICBhcHByb3ZhbElkOiBwLmFwcHJvdmFsLmlkLFxuICAgICAgICAgIHRvb2xOYW1lOlxuICAgICAgICAgICAgXCJ0eXBlXCIgaW4gcCA/IFN0cmluZyhwLnR5cGUpLnJlcGxhY2UoXCJ0b29sLVwiLCBcIlwiKSA6IFwidW5rbm93blwiLFxuICAgICAgICB9KSk7XG5cbiAgICAgIGxvb3BGaW5pc2hSZWFzb24gPSB3YXNBYm9ydGVkXG4gICAgICAgID8gKFwic3RvcFwiIGFzIEZpbmlzaFJlYXNvbilcbiAgICAgICAgOiAoc3RyZWFtVGV4dEZpbmlzaFJlYXNvbiA/PyAoXCJ1bmtub3duXCIgYXMgRmluaXNoUmVhc29uKSk7XG5cbiAgICAgIC8vIERlY2lkZSB3aGV0aGVyIHRvIGJyZWFrIG9yIGNvbnRpbnVlXG4gICAgICBjb25zdCBzaG91bGRCcmVhayA9XG4gICAgICAgIGl0ZXJQZW5kaW5nQXBwcm92YWxzLmxlbmd0aCA+IDAgfHxcbiAgICAgICAgbG9vcEZpbmlzaFJlYXNvbiA9PT0gXCJzdG9wXCIgfHxcbiAgICAgICAgd2FzQWJvcnRlZCB8fFxuICAgICAgICBsYXN0UGFydCAhPSBudWxsIHx8XG4gICAgICAgIChjdXJyZW50TWF4U3RlcHMgIT0gbnVsbCAmJlxuICAgICAgICAgIHN0ZXBJbmRleE9mZnNldCArIHVzYWdlU3RlcHMubGVuZ3RoID49IGN1cnJlbnRNYXhTdGVwcykgfHxcbiAgICAgICAgaXRlcmF0aW9uID49IHN0ZXBUaHJvdWdocHV0IC0gMTtcblxuICAgICAgaWYgKHNob3VsZEJyZWFrKSB7XG4gICAgICAgIGF3YWl0IHBlcnNpc3RQcm9taXNlO1xuICAgICAgICBhbGxQYXJ0cy5wdXNoKC4uLm5ld1BhcnRSZWNvcmRzKTtcbiAgICAgICAgYWxsUGVuZGluZ0FwcHJvdmFscy5wdXNoKC4uLml0ZXJQZW5kaW5nQXBwcm92YWxzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIC8vIE5vbi1maW5hbCBpdGVyYXRpb246IHBlcnNpc3QgcGFydHMgYW5kIHJlYnVpbGQgbWVzc2FnZXNcbiAgICAgIGF3YWl0IHBlcnNpc3RQcm9taXNlO1xuICAgICAgYWxsUGFydHMucHVzaCguLi5uZXdQYXJ0UmVjb3Jkcyk7XG4gICAgICB1aU1lc3NhZ2VzID0gYXNzZW1ibGVVSU1lc3NhZ2VzKHtcbiAgICAgICAgbWVzc2FnZXM6IG1lc3NhZ2VzUmVzdWx0LFxuICAgICAgICBwYXJ0czogYWxsUGFydHMsXG4gICAgICAgIHVudGlsOiBjcmVhdGVkQXQsXG4gICAgICAgIGluY2x1ZGVRdWV1ZWQ6IHRydWUsXG4gICAgICAgIGV4Y2x1ZGVTdWJUb29sUGFydHM6IHRydWUsXG4gICAgICB9KTtcbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgcG9sbENvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICB0aHJvdHRsZWRFbWl0U3RhdHVzLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIGlmIChzZXRTdGFydGVkUHJvbWlzZSkge1xuICAgIGF3YWl0IHNldFN0YXJ0ZWRQcm9taXNlO1xuICB9XG5cbiAgZG9uZVN0ZXAoe1xuICAgIGZpbmlzaFJlYXNvbjogbG9vcEZpbmlzaFJlYXNvbixcbiAgICB3YXNBYm9ydGVkLFxuICAgIGl0ZXJhdGlvbnM6IGludGVybmFsU3RlcEluZGV4LFxuICAgIHBlbmRpbmdBcHByb3ZhbHM6IGFsbFBlbmRpbmdBcHByb3ZhbHMubGVuZ3RoLFxuICB9KTtcblxuICByZXR1cm4ge1xuICAgIGZpbmlzaFJlYXNvbjogbG9vcEZpbmlzaFJlYXNvbixcbiAgICBsYXN0UGFydEluZGV4OiBuZXh0UGFydEluZGV4UmVmLmN1cnJlbnQsXG4gICAgdXNhZ2VTdGVwcyxcbiAgICBwZW5kaW5nQXBwcm92YWxzOiBhbGxQZW5kaW5nQXBwcm92YWxzLFxuICAgIG1heFN0ZXBzOiBjdXJyZW50TWF4U3RlcHMsXG4gICAgZGlzY292ZXJlZFNraWxsczogc2tpbGxzUmVmLmN1cnJlbnQsXG4gICAgY29udGV4dCxcbiAgfTtcbn1cblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogU3RlcHNcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHN0cmVhbVRleHRTdGVwPFRvb2xzIGV4dGVuZHMgVG9vbFNldD4oXG4gIC4uLmFyZ3M6IFBhcmFtZXRlcnM8dHlwZW9mIHN0cmVhbVRleHQ8VG9vbHM+PlxuKSB7XG4gIFwidXNlIHN0ZXBcIjtcbiAgcmV0dXJuIGF3YWl0IHN0cmVhbVRleHQoLi4uYXJncyk7XG59XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIFV0aWxzXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbmFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NBcHByb3ZhbHMoe1xuICBhbGxQYXJ0cyxcbiAgbWVzc2FnZXNSZXN1bHQsXG4gIGNyZWF0ZWRBdCxcbiAgcmF3VG9vbHMsXG4gIGFib3J0Q29udHJvbGxlcixcbiAgdG9vbENvbnRleHQsXG4gIGFnZW50LFxuICBzdGVwTG9nLFxuICB0aHJvdHRsZWRFbWl0U3RhdHVzLFxuICB3cml0ZXIsXG59OiB7XG4gIGFsbFBhcnRzOiBQYXJ0W107XG4gIG1lc3NhZ2VzUmVzdWx0OiBQYXJhbWV0ZXJzPHR5cGVvZiBhc3NlbWJsZVVJTWVzc2FnZXM+WzBdW1wibWVzc2FnZXNcIl07XG4gIGNyZWF0ZWRBdDogbnVtYmVyO1xuICByYXdUb29sczogVG9vbFNldDtcbiAgYWJvcnRDb250cm9sbGVyOiBBYm9ydENvbnRyb2xsZXI7XG4gIHRvb2xDb250ZXh0OiBUb29sQ29udGV4dDtcbiAgYWdlbnQ6IEFueUFnZW50O1xuICBzdGVwTG9nOiBMb2dnZXI7XG4gIHRocm90dGxlZEVtaXRTdGF0dXM6IFJldHVyblR5cGU8dHlwZW9mIGNyZWF0ZVRocm90dGxlZEVtaXRTdGF0dXM+O1xuICB3cml0ZXI6IFN0cmVhbVdyaXRlcjtcbn0pIHtcbiAgLy8gRXhlY3V0ZSBhcHByb3ZlZCB0b29scyBzbyB0aGUgbW9kZWwgc2VlcyBjb21wbGV0ZSB0b29sIGNhbGwgKyByZXN1bHQgcGFpcnNcbiAgY29uc3QgYXBwcm92ZWRQYXJ0cyA9IGFsbFBhcnRzLmZpbHRlcihcbiAgICAocCkgPT5cbiAgICAgIHAucGFydCAmJlxuICAgICAgXCJzdGF0ZVwiIGluIHAucGFydCAmJlxuICAgICAgKHAucGFydCBhcyB7IHN0YXRlOiBzdHJpbmcgfSkuc3RhdGUgPT09IFwiYXBwcm92YWwtcmVzcG9uZGVkXCIgJiZcbiAgICAgIFwiYXBwcm92YWxcIiBpbiBwLnBhcnQgJiZcbiAgICAgIChwLnBhcnQgYXMgeyBhcHByb3ZhbD86IHsgYXBwcm92ZWQ6IGJvb2xlYW4gfSB9KS5hcHByb3ZhbD8uYXBwcm92ZWQgPT09XG4gICAgICAgIHRydWVcbiAgKTtcblxuICBpZiAoYXBwcm92ZWRQYXJ0cy5sZW5ndGggPiAwKSB7XG4gICAgc3RlcExvZy5pbmZvKFwiZXhlY3V0aW5nIGFwcHJvdmVkIHRvb2xzXCIsIHtcbiAgICAgIGNvdW50OiBhcHByb3ZlZFBhcnRzLmxlbmd0aCxcbiAgICB9KTtcbiAgICB0aHJvdHRsZWRFbWl0U3RhdHVzKHtcbiAgICAgIHdyaXRlcixcbiAgICAgIHN0YXR1czogeyB0eXBlOiBcInByb2Nlc3NpbmctYXBwcm92YWxzXCIgfSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHByZUV4ZWNNZXNzYWdlcyA9IGF3YWl0IGNvbnZlcnRUb01vZGVsTWVzc2FnZXMoXG4gICAgICBhc3NlbWJsZVVJTWVzc2FnZXMoe1xuICAgICAgICBtZXNzYWdlczogbWVzc2FnZXNSZXN1bHQsXG4gICAgICAgIHBhcnRzOiBhbGxQYXJ0cyxcbiAgICAgICAgdW50aWw6IGNyZWF0ZWRBdCxcbiAgICAgICAgaW5jbHVkZVF1ZXVlZDogdHJ1ZSxcbiAgICAgICAgZXhjbHVkZVN1YlRvb2xQYXJ0czogdHJ1ZSxcbiAgICAgIH0pLFxuICAgICAgeyBpZ25vcmVJbmNvbXBsZXRlVG9vbENhbGxzOiB0cnVlIH1cbiAgICApO1xuXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBhcHByb3ZlZFBhcnRzLm1hcChhc3luYyAoYXApID0+IHtcbiAgICAgICAgaWYgKCFhcC5wYXJ0LnR5cGUuc3RhcnRzV2l0aChcInRvb2wtXCIpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhcnQgPSBhcC5wYXJ0IGFzIEV4dHJhY3Q8XG4gICAgICAgICAgVUlNZXNzYWdlW1wicGFydHNcIl1bbnVtYmVyXSxcbiAgICAgICAgICB7IHR5cGU6IGB0b29sLSR7c3RyaW5nfWAgfVxuICAgICAgICA+O1xuICAgICAgICBjb25zdCB0b29sTmFtZSA9IHBhcnQudHlwZS5yZXBsYWNlKFwidG9vbC1cIiwgXCJcIik7XG4gICAgICAgIGNvbnN0IHRvb2xEZWYgPSByYXdUb29sc1t0b29sTmFtZV07XG5cbiAgICAgICAgaWYgKHRvb2xEZWY/LmV4ZWN1dGUgJiYgcGFydC5pbnB1dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHRvb2xPdXRwdXQgPSBhd2FpdCB0b29sRGVmLmV4ZWN1dGUocGFydC5pbnB1dCwge1xuICAgICAgICAgICAgICB0b29sQ2FsbElkOiBwYXJ0LnRvb2xDYWxsSWQsXG4gICAgICAgICAgICAgIG1lc3NhZ2VzOiBwcmVFeGVjTWVzc2FnZXMsXG4gICAgICAgICAgICAgIGFib3J0U2lnbmFsOiBhYm9ydENvbnRyb2xsZXIuc2lnbmFsLFxuICAgICAgICAgICAgICBleHBlcmltZW50YWxfY29udGV4dDogdG9vbENvbnRleHQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHBhcnQuc3RhdGUgPSBcIm91dHB1dC1hdmFpbGFibGVcIjtcbiAgICAgICAgICAgIHBhcnQub3V0cHV0ID0gdG9vbE91dHB1dDtcbiAgICAgICAgICAgIHdyaXRlci53cml0ZSh7XG4gICAgICAgICAgICAgIHR5cGU6IFwidG9vbC1vdXRwdXQtYXZhaWxhYmxlXCIsXG4gICAgICAgICAgICAgIHRvb2xDYWxsSWQ6IHBhcnQudG9vbENhbGxJZCxcbiAgICAgICAgICAgICAgb3V0cHV0OiB0b29sT3V0cHV0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBwYXJ0LnN0YXRlID0gXCJvdXRwdXQtZXJyb3JcIjtcbiAgICAgICAgICAgIHBhcnQuZXJyb3JUZXh0ID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpO1xuICAgICAgICAgICAgd3JpdGVyLndyaXRlKHtcbiAgICAgICAgICAgICAgdHlwZTogXCJ0b29sLW91dHB1dC1lcnJvclwiLFxuICAgICAgICAgICAgICB0b29sQ2FsbElkOiBwYXJ0LnRvb2xDYWxsSWQsXG4gICAgICAgICAgICAgIGVycm9yVGV4dDogcGFydC5lcnJvclRleHQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYXdhaXQgYWdlbnQuc3RvcmFnZS5wYXJ0LnNldChhcC5pZCwgeyAuLi5hcCwgcGFydCB9KTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgLy8gQXV0by1kZW55IGFueSByZW1haW5pbmcgYXBwcm92YWwtcmVxdWVzdGVkIHBhcnRzIHNvIHRoZSBtb2RlbFxuICAvLyBzZWVzIGNvbXBsZXRlIHRvb2wgY2FsbCArIGRlbmllZCByZXN1bHQgcGFpcnMgKG5vdCBtaXNzaW5nIHJlc3VsdHMpLlxuICBjb25zdCBwZW5kaW5nQXBwcm92YWxQYXJ0cyA9IGFsbFBhcnRzLmZpbHRlcihcbiAgICAocCkgPT4gKHAucGFydCBhcyB7IHN0YXRlPzogc3RyaW5nIH0pLnN0YXRlID09PSBcImFwcHJvdmFsLXJlcXVlc3RlZFwiXG4gICk7XG4gIGlmIChwZW5kaW5nQXBwcm92YWxQYXJ0cy5sZW5ndGggPiAwKSB7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBwZW5kaW5nQXBwcm92YWxQYXJ0cy5tYXAoYXN5bmMgKHApID0+IHtcbiAgICAgICAgY29uc3QgZGVuaWVkID0ge1xuICAgICAgICAgIC4uLnAsXG4gICAgICAgICAgcGFydDoge1xuICAgICAgICAgICAgLi4ucC5wYXJ0LFxuICAgICAgICAgICAgc3RhdGU6IFwib3V0cHV0LWRlbmllZFwiLFxuICAgICAgICAgICAgYXBwcm92YWw6IHtcbiAgICAgICAgICAgICAgLi4uKChwLnBhcnQgYXMgeyBhcHByb3ZhbD86IG9iamVjdCB9KS5hcHByb3ZhbCA/PyB7fSksXG4gICAgICAgICAgICAgIGFwcHJvdmVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgcmVhc29uOiBcImF1dG8tZGVuaWVkOiBuZXcgbWVzc2FnZSBzZW50XCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0gYXMgdHlwZW9mIHAucGFydCxcbiAgICAgICAgfTtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihwLCBkZW5pZWQpO1xuICAgICAgICBhd2FpdCBhZ2VudC5zdG9yYWdlLnBhcnQuc2V0KHAuaWQsIGRlbmllZCk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cbn1cblxudHlwZSBTdHJlYW1Xcml0ZXIgPSBVSU1lc3NhZ2VTdHJlYW1Xcml0ZXI7XG5cbmZ1bmN0aW9uIGVtaXRTdGF0dXMoe1xuICB3cml0ZXIsXG4gIHN0YXR1cyxcbiAgYWdlbnQsXG59OiB7XG4gIHdyaXRlcjogU3RyZWFtV3JpdGVyO1xuICBzdGF0dXM6IEFnZW50U3RhdHVzO1xuICBhZ2VudDogQW55QWdlbnQ7XG59KSB7XG4gIHdyaXRlci53cml0ZSh7IHR5cGU6IFwiZGF0YS1zdGF0dXNcIiwgZGF0YTogc3RhdHVzLCB0cmFuc2llbnQ6IHRydWUgfSk7XG4gIGFnZW50Lmhvb2tzPy5zdGF0dXM/LihzdGF0dXMpO1xufVxuXG5jb25zdCBTVEFUVVNfVEhST1RUTEVfTVMgPSA1MDA7XG5cbmZ1bmN0aW9uIGNyZWF0ZVRocm90dGxlZEVtaXRTdGF0dXMoYWdlbnQ6IEFueUFnZW50KSB7XG4gIGxldCB0aW1lcjogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCBudWxsID0gbnVsbDtcbiAgbGV0IHBlbmRpbmc6IHtcbiAgICB3cml0ZXI6IFN0cmVhbVdyaXRlcjtcbiAgICBzdGF0dXM6IEFnZW50U3RhdHVzO1xuICB9IHwgbnVsbCA9IG51bGw7XG5cbiAgZnVuY3Rpb24gdGhyb3R0bGVkKHtcbiAgICB3cml0ZXIsXG4gICAgc3RhdHVzLFxuICB9OiB7XG4gICAgd3JpdGVyOiBTdHJlYW1Xcml0ZXI7XG4gICAgc3RhdHVzOiBBZ2VudFN0YXR1cztcbiAgfSkge1xuICAgIHBlbmRpbmcgPSB7IHdyaXRlciwgc3RhdHVzIH07XG4gICAgaWYgKHRpbWVyICE9PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGZsdXNoKCk7XG4gICAgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRpbWVyID0gbnVsbDtcbiAgICAgIGlmIChwZW5kaW5nKSB7XG4gICAgICAgIGZsdXNoKCk7XG4gICAgICB9XG4gICAgfSwgU1RBVFVTX1RIUk9UVExFX01TKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZsdXNoKCkge1xuICAgIGlmICghcGVuZGluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB7IHdyaXRlciwgc3RhdHVzIH0gPSBwZW5kaW5nO1xuICAgIHBlbmRpbmcgPSBudWxsO1xuICAgIGVtaXRTdGF0dXMoeyB3cml0ZXIsIHN0YXR1cywgYWdlbnQgfSk7XG4gIH1cblxuICB0aHJvdHRsZWQuZGlzcG9zZSA9ICgpID0+IHtcbiAgICBpZiAodGltZXIgIT09IG51bGwpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICB0aW1lciA9IG51bGw7XG4gICAgfVxuICAgIGZsdXNoKCk7XG4gIH07XG5cbiAgcmV0dXJuIHRocm90dGxlZDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZU9wdGlvbjxUPihcbiAgdmFsdWU6IFJlc29sdmFibGU8VD4gfCB1bmRlZmluZWQsXG4gIGFyZ3M6IFJlc29sdmFibGVBcmdzXG4pOiBQcm9taXNlPFQgfCB1bmRlZmluZWQ+IHtcbiAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIHJldHVybiBhd2FpdCAodmFsdWUgYXMgKGFyZ3M6IFJlc29sdmFibGVBcmdzKSA9PiBUIHwgUHJvbWlzZTxUPikoYXJncyk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5hc3luYyBmdW5jdGlvbiByZXNvbHZlU3lzdGVtKFxuICBpbnB1dDogUmVzb2x2YWJsZTxzdHJpbmcgfCBzdHJpbmdbXSB8IHVuZGVmaW5lZD4gfCB1bmRlZmluZWQsXG4gIGFyZ3M6IFJlc29sdmFibGVBcmdzXG4pOiBQcm9taXNlPHN0cmluZyB8IG51bGw+IHtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVzb2x2ZU9wdGlvbihpbnB1dCwgYXJncyk7XG4gIGlmICghcmVzdWx0KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkocmVzdWx0KSA/IHJlc3VsdC5maWx0ZXIoQm9vbGVhbikuam9pbihcIlxcblwiKSA6IHJlc3VsdDtcbn1cblxuY29uc3QgQkFTRV9TWVNURU1fUFJPTVBUID1cbiAgXCJZb3UgYXJlIGFuIEFJIGFzc2lzdGFudCB3aXRoIGJhc2ljIHRvb2xzIHRvIGludGVyYWN0IHdpdGggeW91ciBlbnZpcm9ubWVudC4gRXhwbG9yZSBhbmQgd29yayBmcmVlbHkuXCI7XG5cbmZ1bmN0aW9uIGpvaW5Qcm9tcHRTZWN0aW9ucyhcbiAgLi4uc2VjdGlvbnM6IChzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsKVtdXG4pOiBzdHJpbmcge1xuICByZXR1cm4gc2VjdGlvbnMuZmlsdGVyKChzKSA9PiBzPy50cmltKCkpLmpvaW4oXCJcXG5cXG5cIik7XG59XG5cbmNvbnN0IGJhY2tncm91bmRQcm9jZXNzUHJvbXB0ID0gYCMjIEJhY2tncm91bmQgUHJvY2Vzc2VzXG5UaGVzZSBiYWNrZ3JvdW5kIHByb2Nlc3MgaW5zdHJ1Y3Rpb25zIGFyZSBmb3IgeW91IHRvIG1hbmlwdWxhdGUgdGhlIHByb2Nlc3NlcywgZG8gbm90IGJlIHRvIHZlcmJvc2UgdG8gdGhlIHVzZXIgYWJvdXQgdGhlIHJlc3BvbnNlIGRldGFpbHMgbGlrZSBcImhvdyB0byBkZWJ1ZyB0aGUgcHJvY2VzcyBvdXRwdXRcIiB0aGUgdXNlciB3aWxsIGhhdmUgYW4gVUkuXG5cblVzZSBcXGB3YWl0VW50aWw6IDBcXGAgZm9yIGRldiBzZXJ2ZXJzIHRoYXQgc2hvdWxkIHJ1biBpbmRlZmluaXRlbHkuXG5JdCBpcyBhIGdvb2QgcHJhY3RpY2UgdG8gY2hlY2sgdGhlIG91dHB1dCBsb2cgYWZ0ZXIgcnVubmluZyBwcm9jZXNzZXMgbGlrZSBkZXYgc2VydmVycyB0byBtYWtlIHN1cmUgdGhleSBzdGFydGVkIGNvcnJlY3RseS5cblxuVG8gcnVuIGEgYmFja2dyb3VuZCBwcm9jZXNzOlxuQmFzaCh7IGNvbW1hbmQ6IFwibnBtIHJ1biBkZXZcIiwgd2FpdFVudGlsOiAwIH0pXG5SZXR1cm5zIGltbWVkaWF0ZWx5IHdpdGggXFxgY29tbWFuZElkXFxgLiBUaGUgcHJvY2VzcyBrZWVwcyBydW5uaW5nIGluIHRoZSBzYW5kYm94LlxuXG5UbyBraWxsIGEgcHJvY2VzczpcbkJhc2goeyBjb21tYW5kOiBcInBzIGF1eCB8IGdyZXAgbm9kZVwiIH0pICAgLy8gRmluZCB0aGUgUElEXG5CYXNoKHsgY29tbWFuZDogXCJraWxsIHtwaWR9XCIgfSkgICAgICAgICAgICAvLyBHcmFjZWZ1bFxuQmFzaCh7IGNvbW1hbmQ6IFwia2lsbCAtOSB7cGlkfVwiIH0pICAgICAgICAgLy8gRm9yY2VcbmA7XG5cbmZ1bmN0aW9uIGJ1aWxkU2tpbGxzQ29udGV4dChza2lsbHM6IFNraWxsU3VtbWFyeVtdKTogc3RyaW5nIHtcbiAgaWYgKHNraWxscy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuXG4gIGNvbnN0IHNraWxsTGluZXMgPSBza2lsbHNcbiAgICAubWFwKChzKSA9PiBgLSAke3MubmFtZX06ICR7cy5kZXNjcmlwdGlvbn1gKVxuICAgIC5qb2luKFwiXFxuXCIpO1xuXG4gIHJldHVybiBgIyMgQXZhaWxhYmxlIFNraWxsc1xuJHtza2lsbExpbmVzfVxuXG4ke2JhY2tncm91bmRQcm9jZXNzUHJvbXB0fVxuXG5Vc2UgdGhlIFNraWxsIHRvb2wgdG8gbG9hZCBhIHNraWxsJ3MgZnVsbCBpbnN0cnVjdGlvbnMgYmVmb3JlIGZvbGxvd2luZyBpdC5gO1xufVxuIiwgImltcG9ydCB0eXBlIHsgQW55QWdlbnQgfSBmcm9tIFwiLi4vYWdlbnQvY2xpZW50XCI7XG5pbXBvcnQgdHlwZSB7IFNhbmRib3hJbnN0YW5jZSB9IGZyb20gXCIuLi9zYW5kYm94L2FkYXB0ZXJcIjtcbmltcG9ydCB7IGNyZWF0ZUxvZ2dlciwgdHlwZSBMb2dnZXIgfSBmcm9tIFwiLi4vdXRpbHMvbG9nZ2VyXCI7XG5pbXBvcnQgeyBwYXJzZVNraWxsRnJvbnRtYXR0ZXIgfSBmcm9tIFwiLi9wYXJzZXJcIjtcbmltcG9ydCB0eXBlIHsgU2tpbGxTdW1tYXJ5IH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuLyoqXG4gKiBEaXNjb3ZlcnMgc2tpbGxzIGZyb20gZGlyZWN0b3JpZXMgaW5zaWRlIHRoZSBzYW5kYm94IGJ5IGZpbmRpbmcgYW5kIHBhcnNpbmcgU0tJTEwubWQgZmlsZXMuXG4gKiBTY2FucyBlYWNoIGRpcmVjdG9yeSBmb3Igc3ViZGlyZWN0b3JpZXMgY29udGFpbmluZyBTS0lMTC5tZCwgZXh0cmFjdHMgZnJvbnRtYXR0ZXIgbWV0YWRhdGEsXG4gKiBhbmQgcmV0dXJucyBzdW1tYXJpZXMgZm9yIHVzZSBpbiB0aGUgc3lzdGVtIHByb21wdC5cbiAqXG4gKiBAcmV0dXJucyBBcnJheSBvZiBza2lsbCBzdW1tYXJpZXMgKGRlZHVwbGljYXRlZCBieSBuYW1lLCBmaXJzdCBvY2N1cnJlbmNlIHdpbnMpXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkaXNjb3ZlclNraWxsc0luU2FuZGJveChvcHRzOiB7XG4gIGFnZW50OiBBbnlBZ2VudDtcbiAgc2FuZGJveDogU2FuZGJveEluc3RhbmNlO1xuICBza2lsbHNEaXJzOiBzdHJpbmdbXTtcbiAgc2Vzc2lvbklkPzogc3RyaW5nO1xufSk6IFByb21pc2U8U2tpbGxTdW1tYXJ5W10+IHtcbiAgY29uc3QgeyBhZ2VudCwgc2FuZGJveCwgc2tpbGxzRGlycywgc2Vzc2lvbklkIH0gPSBvcHRzO1xuICBjb25zdCBiYXNlTG9nID0gY3JlYXRlTG9nZ2VyKHtcbiAgICBjb25maWc6IHsgLi4uYWdlbnQub3B0aW9ucy5sb2dnaW5nLCBuYW1lOiBhZ2VudC5uYW1lIH0sXG4gICAgc3Vic3lzdGVtOiBcInNraWxsc1wiLFxuICB9KTtcbiAgY29uc3QgbG9nID0gc2Vzc2lvbklkID8gYmFzZUxvZy53aXRoQ29udGV4dCh7IHNlc3Npb25JZCB9KSA6IGJhc2VMb2c7XG4gIGNvbnN0IGRvbmUgPSBsb2cudGltZShcImRpc2NvdmVyU2tpbGxzSW5TYW5kYm94XCIpO1xuXG4gIGNvbnN0IHN1bW1hcmllczogU2tpbGxTdW1tYXJ5W10gPSBbXTtcbiAgY29uc3Qgc2Vlbk5hbWVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgZm9yIChjb25zdCBza2lsbHNEaXIgb2Ygc2tpbGxzRGlycykge1xuICAgIGNvbnN0IGRpckRvbmUgPSBsb2cudGltZShcInNjYW4gZGlyZWN0b3J5XCIsIHsgZGlyOiBza2lsbHNEaXIgfSk7XG4gICAgY29uc3QgZGlyU3VtbWFyaWVzID0gYXdhaXQgZGlzY292ZXJTa2lsbHNJbkRpcmVjdG9yeSh7XG4gICAgICBzYW5kYm94LFxuICAgICAgc2tpbGxzRGlyLFxuICAgICAgbG9nLFxuICAgIH0pO1xuICAgIGRpckRvbmUoeyBjb3VudDogZGlyU3VtbWFyaWVzLmxlbmd0aCB9KTtcblxuICAgIGZvciAoY29uc3Qgc3VtbWFyeSBvZiBkaXJTdW1tYXJpZXMpIHtcbiAgICAgIGlmICghc2Vlbk5hbWVzLmhhcyhzdW1tYXJ5Lm5hbWUpKSB7XG4gICAgICAgIHNlZW5OYW1lcy5hZGQoc3VtbWFyeS5uYW1lKTtcbiAgICAgICAgc3VtbWFyaWVzLnB1c2goc3VtbWFyeSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZG9uZSh7IHRvdGFsU2tpbGxzOiBzdW1tYXJpZXMubGVuZ3RoIH0pO1xuXG4gIHJldHVybiBzdW1tYXJpZXM7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGRpc2NvdmVyU2tpbGxzSW5EaXJlY3Rvcnkob3B0czoge1xuICBzYW5kYm94OiBTYW5kYm94SW5zdGFuY2U7XG4gIHNraWxsc0Rpcjogc3RyaW5nO1xuICBsb2c6IExvZ2dlcjtcbn0pOiBQcm9taXNlPFNraWxsU3VtbWFyeVtdPiB7XG4gIGNvbnN0IHsgc2FuZGJveCwgc2tpbGxzRGlyLCBsb2cgfSA9IG9wdHM7XG4gIGNvbnN0IHNraWxsUGF0aHMgPSBhd2FpdCBmaW5kU2tpbGxGaWxlcyh7IHNhbmRib3gsIHNraWxsc0RpciwgbG9nIH0pO1xuXG4gIGlmIChza2lsbFBhdGhzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGNvbnN0IHN1bW1hcmllczogU2tpbGxTdW1tYXJ5W10gPSBbXTtcblxuICBmb3IgKGNvbnN0IHNraWxsTWRQYXRoIG9mIHNraWxsUGF0aHMpIHtcbiAgICBjb25zdCBzdW1tYXJ5ID0gYXdhaXQgcGFyc2VTa2lsbEZpbGUoeyBzYW5kYm94LCBza2lsbE1kUGF0aCwgbG9nIH0pO1xuICAgIGlmIChzdW1tYXJ5KSB7XG4gICAgICBzdW1tYXJpZXMucHVzaChzdW1tYXJ5KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3VtbWFyaWVzO1xufVxuXG5hc3luYyBmdW5jdGlvbiBmaW5kU2tpbGxGaWxlcyhvcHRzOiB7XG4gIHNhbmRib3g6IFNhbmRib3hJbnN0YW5jZTtcbiAgc2tpbGxzRGlyOiBzdHJpbmc7XG4gIGxvZzogTG9nZ2VyO1xufSk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgY29uc3QgeyBzYW5kYm94LCBza2lsbHNEaXIsIGxvZyB9ID0gb3B0cztcblxuICBjb25zdCBleGVjUmVzdWx0ID0gYXdhaXQgc2FuZGJveC5leGVjKHtcbiAgICBjb21tYW5kOiBcImZpbmRcIixcbiAgICBhcmdzOiBbc2tpbGxzRGlyLCBcIi1uYW1lXCIsIFwiU0tJTEwubWRcIiwgXCItdHlwZVwiLCBcImZcIl0sXG4gIH0pO1xuXG4gIGlmIChleGVjUmVzdWx0IGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICBsb2cud2FybihcImZhaWxlZCB0byBzY2FuIHNraWxscyBkaXJlY3RvcnlcIiwge1xuICAgICAgZGlyOiBza2lsbHNEaXIsXG4gICAgICBlcnJvcjogZXhlY1Jlc3VsdC5tZXNzYWdlLFxuICAgIH0pO1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGNvbnN0IHsgc3Rkb3V0LCBleGl0Q29kZSB9ID0gYXdhaXQgZXhlY1Jlc3VsdC5yZXN1bHQ7XG5cbiAgaWYgKGV4aXRDb2RlICE9PSAwKSB7XG4gICAgbG9nLndhcm4oXCJza2lsbHMgZGlyZWN0b3J5IG5vdCBmb3VuZCBvciBpbmFjY2Vzc2libGVcIiwgeyBkaXI6IHNraWxsc0RpciB9KTtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICByZXR1cm4gc3Rkb3V0XG4gICAgLnRyaW0oKVxuICAgIC5zcGxpdChcIlxcblwiKVxuICAgIC5maWx0ZXIoKHApID0+IHAubGVuZ3RoID4gMCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHBhcnNlU2tpbGxGaWxlKG9wdHM6IHtcbiAgc2FuZGJveDogU2FuZGJveEluc3RhbmNlO1xuICBza2lsbE1kUGF0aDogc3RyaW5nO1xuICBsb2c6IExvZ2dlcjtcbn0pOiBQcm9taXNlPFNraWxsU3VtbWFyeSB8IG51bGw+IHtcbiAgY29uc3QgeyBzYW5kYm94LCBza2lsbE1kUGF0aCwgbG9nIH0gPSBvcHRzO1xuICBjb25zdCBleGVjUmVzdWx0ID0gYXdhaXQgc2FuZGJveC5leGVjKHtcbiAgICBjb21tYW5kOiBcImNhdFwiLFxuICAgIGFyZ3M6IFtza2lsbE1kUGF0aF0sXG4gIH0pO1xuXG4gIGlmIChleGVjUmVzdWx0IGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICBsb2cud2FybihcImZhaWxlZCB0byByZWFkIHNraWxsIGZpbGVcIiwge1xuICAgICAgcGF0aDogc2tpbGxNZFBhdGgsXG4gICAgICBlcnJvcjogZXhlY1Jlc3VsdC5tZXNzYWdlLFxuICAgIH0pO1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgeyBzdGRvdXQsIGV4aXRDb2RlIH0gPSBhd2FpdCBleGVjUmVzdWx0LnJlc3VsdDtcblxuICBpZiAoZXhpdENvZGUgIT09IDApIHtcbiAgICBsb2cud2FybihcImNvdWxkIG5vdCByZWFkIHNraWxsIGZpbGVcIiwgeyBwYXRoOiBza2lsbE1kUGF0aCB9KTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IHBhcnNlZCA9IHBhcnNlU2tpbGxGcm9udG1hdHRlcihzdGRvdXQpO1xuXG4gIGlmICghcGFyc2VkKSB7XG4gICAgbG9nLndhcm4oXCJpbnZhbGlkIG9yIG1pc3NpbmcgZnJvbnRtYXR0ZXJcIiwgeyBwYXRoOiBza2lsbE1kUGF0aCB9KTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbmFtZTogcGFyc2VkLm5hbWUsXG4gICAgZGVzY3JpcHRpb246IHBhcnNlZC5kZXNjcmlwdGlvbixcbiAgICBza2lsbE1kUGF0aCxcbiAgfTtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IFNraWxsRW50cnksIFNraWxsSW5wdXQgfSBmcm9tIFwiLi90eXBlc1wiO1xuXG4vKipcbiAqIFBhcnNlZCBmcm9udG1hdHRlciBmcm9tIGEgU0tJTEwubWQgZmlsZS5cbiAqL1xuZXhwb3J0IHR5cGUgU2tpbGxGcm9udG1hdHRlciA9IHtcbiAgbmFtZTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xufTtcblxuLyoqXG4gKiBQYXJzZXMgWUFNTCBmcm9udG1hdHRlciBmcm9tIGEgU0tJTEwubWQgZmlsZSBjb250ZW50LlxuICogRnJvbnRtYXR0ZXIgbXVzdCBiZSBhdCB0aGUgc3RhcnQgb2YgdGhlIGZpbGUsIGRlbGltaXRlZCBieSBgLS0tYCBtYXJrZXJzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBtYXJrZG93blxuICogLS0tXG4gKiBuYW1lOiBjc3ZcbiAqIGRlc2NyaXB0aW9uOiBBbmFseXplIENTViBkYXRhXG4gKiAtLS1cbiAqICMgQ1NWIFNraWxsXG4gKiAuLi5cbiAqIGBgYFxuICpcbiAqIEByZXR1cm5zIFBhcnNlZCBuYW1lIGFuZCBkZXNjcmlwdGlvbiwgb3IgbnVsbCBpZiBmcm9udG1hdHRlciBpcyBtaXNzaW5nL2ludmFsaWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlU2tpbGxGcm9udG1hdHRlcihcbiAgY29udGVudDogc3RyaW5nXG4pOiBTa2lsbEZyb250bWF0dGVyIHwgbnVsbCB7XG4gIGNvbnN0IHRyaW1tZWQgPSBjb250ZW50LnRyaW0oKTtcblxuICBpZiAoIXRyaW1tZWQuc3RhcnRzV2l0aChcIi0tLVwiKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgZW5kTWFya2VySW5kZXggPSB0cmltbWVkLmluZGV4T2YoXCItLS1cIiwgMyk7XG4gIGlmIChlbmRNYXJrZXJJbmRleCA9PT0gLTEpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IGZyb250bWF0dGVyQmxvY2sgPSB0cmltbWVkLnNsaWNlKDMsIGVuZE1hcmtlckluZGV4KS50cmltKCk7XG4gIGNvbnN0IHBhcnNlZCA9IHBhcnNlU2ltcGxlWWFtbChmcm9udG1hdHRlckJsb2NrKTtcblxuICBpZiAoIShwYXJzZWQubmFtZSAmJiBwYXJzZWQuZGVzY3JpcHRpb24pKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG5hbWU6IFN0cmluZyhwYXJzZWQubmFtZSksXG4gICAgZGVzY3JpcHRpb246IFN0cmluZyhwYXJzZWQuZGVzY3JpcHRpb24pLFxuICB9O1xufVxuXG4vKipcbiAqIFBhcnNlcyBzaW1wbGUgWUFNTCBrZXktdmFsdWUgcGFpcnMgKHNpbmdsZS1saW5lIHZhbHVlcyBvbmx5KS5cbiAqIFRoaXMgYXZvaWRzIGFkZGluZyBhIGZ1bGwgWUFNTCBwYXJzZXIgZGVwZW5kZW5jeSBmb3IgYmFzaWMgZnJvbnRtYXR0ZXIuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlU2ltcGxlWWFtbCh5YW1sOiBzdHJpbmcpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5cbiAgZm9yIChjb25zdCBsaW5lIG9mIHlhbWwuc3BsaXQoXCJcXG5cIikpIHtcbiAgICBjb25zdCB0cmltbWVkTGluZSA9IGxpbmUudHJpbSgpO1xuICAgIGlmICghdHJpbW1lZExpbmUgfHwgdHJpbW1lZExpbmUuc3RhcnRzV2l0aChcIiNcIikpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbG9uSW5kZXggPSB0cmltbWVkTGluZS5pbmRleE9mKFwiOlwiKTtcbiAgICBpZiAoY29sb25JbmRleCA9PT0gLTEpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGtleSA9IHRyaW1tZWRMaW5lLnNsaWNlKDAsIGNvbG9uSW5kZXgpLnRyaW0oKTtcbiAgICBsZXQgdmFsdWUgPSB0cmltbWVkTGluZS5zbGljZShjb2xvbkluZGV4ICsgMSkudHJpbSgpO1xuXG4gICAgLy8gUmVtb3ZlIHN1cnJvdW5kaW5nIHF1b3RlcyBpZiBwcmVzZW50XG4gICAgaWYgKFxuICAgICAgKHZhbHVlLnN0YXJ0c1dpdGgoJ1wiJykgJiYgdmFsdWUuZW5kc1dpdGgoJ1wiJykpIHx8XG4gICAgICAodmFsdWUuc3RhcnRzV2l0aChcIidcIikgJiYgdmFsdWUuZW5kc1dpdGgoXCInXCIpKVxuICAgICkge1xuICAgICAgdmFsdWUgPSB2YWx1ZS5zbGljZSgxLCAtMSk7XG4gICAgfVxuXG4gICAgaWYgKGtleSkge1xuICAgICAgcmVzdWx0W2tleV0gPSB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplU2tpbGxzKFxuICBza2lsbHM6IFNraWxsSW5wdXRbXSB8IG51bGwgfCB1bmRlZmluZWRcbik6IFNraWxsRW50cnlbXSB7XG4gIGlmICghc2tpbGxzIHx8IHNraWxscy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICByZXR1cm4gc2tpbGxzLm1hcCgoc2tpbGwpID0+IHtcbiAgICBpZiAodHlwZW9mIHNraWxsICE9PSBcIm9iamVjdFwiIHx8IHNraWxsID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiSW52YWxpZCBza2lsbHMgZW50cnk6IGV4cGVjdGVkIGFuIG9iamVjdCB3aXRoIGEgYHR5cGVgIGZpZWxkLlwiXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoXCJ0eXBlXCIgaW4gc2tpbGwgJiYgc2tpbGwudHlwZSkge1xuICAgICAgcmV0dXJuIHNraWxsIGFzIFNraWxsRW50cnk7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc2tpbGxzIGVudHJ5OiBleHBlY3RlZCBgdHlwZWAuXCIpO1xuICB9KTtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEFueUFnZW50IH0gZnJvbSBcIi4uL2FnZW50L2NsaWVudFwiO1xuaW1wb3J0IHR5cGUgeyBTYW5kYm94SW5zdGFuY2UgfSBmcm9tIFwiLi4vc2FuZGJveC9hZGFwdGVyXCI7XG5pbXBvcnQgeyBjcmVhdGVMb2dnZXIgfSBmcm9tIFwiLi4vdXRpbHMvbG9nZ2VyXCI7XG5pbXBvcnQgeyBub3JtYWxpemVTa2lsbHMgfSBmcm9tIFwiLi9wYXJzZXJcIjtcbmltcG9ydCB7IHJlc29sdmVIb3N0U2tpbGwgfSBmcm9tIFwiLi9yZXNvbHZlLWhvc3RcIjtcbmltcG9ydCB7IHJlc29sdmVJbmxpbmVTa2lsbCB9IGZyb20gXCIuL3Jlc29sdmUtaW5saW5lXCI7XG5pbXBvcnQgeyByZXNvbHZlUmVtb3RlU2tpbGwgfSBmcm9tIFwiLi9yZXNvbHZlLXJlbW90ZVwiO1xuaW1wb3J0IHR5cGUgeyBTa2lsbElucHV0IH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVTa2lsbElucHV0c1RvU2FuZGJveERpcnMob3B0czoge1xuICBhZ2VudDogQW55QWdlbnQ7XG4gIHNhbmRib3g6IFNhbmRib3hJbnN0YW5jZTtcbiAgc2tpbGxzOiBTa2lsbElucHV0W107XG4gIHNlc3Npb25JZD86IHN0cmluZztcbn0pOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gIGNvbnN0IGJhc2VMb2cgPSBjcmVhdGVMb2dnZXIoe1xuICAgIGNvbmZpZzogeyAuLi5vcHRzLmFnZW50Lm9wdGlvbnMubG9nZ2luZywgbmFtZTogb3B0cy5hZ2VudC5uYW1lIH0sXG4gICAgc3Vic3lzdGVtOiBcInNraWxsc1wiLFxuICB9KTtcbiAgY29uc3QgbG9nID0gb3B0cy5zZXNzaW9uSWRcbiAgICA/IGJhc2VMb2cud2l0aENvbnRleHQoeyBzZXNzaW9uSWQ6IG9wdHMuc2Vzc2lvbklkIH0pXG4gICAgOiBiYXNlTG9nO1xuICBjb25zdCBlbnRyaWVzID0gbm9ybWFsaXplU2tpbGxzKG9wdHMuc2tpbGxzKTtcbiAgY29uc3QgcmVzb2x2ZWQ6IHN0cmluZ1tdID0gW107XG5cbiAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgaWYgKGVudHJ5LnR5cGUgPT09IFwic2FuZGJveFwiKSB7XG4gICAgICByZXNvbHZlZC5wdXNoKGVudHJ5LnBhdGgpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChlbnRyeS50eXBlID09PSBcImhvc3RcIikge1xuICAgICAgcmVzb2x2ZWQucHVzaChcbiAgICAgICAgYXdhaXQgcmVzb2x2ZUhvc3RTa2lsbCh7XG4gICAgICAgICAgc2FuZGJveDogb3B0cy5zYW5kYm94LFxuICAgICAgICAgIHNraWxsOiBlbnRyeSxcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKGVudHJ5LnR5cGUgPT09IFwiZ2l0XCIpIHtcbiAgICAgIHJlc29sdmVkLnB1c2goXG4gICAgICAgIGF3YWl0IHJlc29sdmVSZW1vdGVTa2lsbCh7XG4gICAgICAgICAgc2FuZGJveDogb3B0cy5zYW5kYm94LFxuICAgICAgICAgIHNraWxsOiBlbnRyeSxcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKGVudHJ5LnR5cGUgPT09IFwiaW5saW5lXCIpIHtcbiAgICAgIHJlc29sdmVkLnB1c2goXG4gICAgICAgIGF3YWl0IHJlc29sdmVJbmxpbmVTa2lsbCh7XG4gICAgICAgICAgc2FuZGJveDogb3B0cy5zYW5kYm94LFxuICAgICAgICAgIHNraWxsOiBlbnRyeSxcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgbG9nLndhcm4oXCJ1bmtub3duIHNraWxsIHNvdXJjZSBlbnRyeSBlbmNvdW50ZXJlZFwiLCB7IGVudHJ5IH0pO1xuICB9XG5cbiAgcmV0dXJuIHJlc29sdmVkO1xufVxuIiwgImltcG9ydCB0eXBlIHsgU2FuZGJveEluc3RhbmNlIH0gZnJvbSBcIi4uL3NhbmRib3gvYWRhcHRlclwiO1xuaW1wb3J0IHR5cGUgeyBIb3N0U2tpbGxJbnB1dCB9IGZyb20gXCIuL3R5cGVzXCI7XG5cbmFzeW5jIGZ1bmN0aW9uIGNvbGxlY3RGaWxlcyhvcHRzOiB7XG4gIGFic29sdXRlUGF0aDogc3RyaW5nO1xuICByZWxhdGl2ZVByZWZpeD86IHN0cmluZztcbn0pOiBQcm9taXNlPHsgcGF0aDogc3RyaW5nOyBjb250ZW50OiBCdWZmZXIgfVtdPiB7XG4gIGNvbnN0IHsgcmVhZGRpciwgcmVhZEZpbGUsIHN0YXQgfSA9IGF3YWl0IGltcG9ydChcIm5vZGU6ZnMvcHJvbWlzZXNcIik7XG4gIGNvbnN0IHsgcmVzb2x2ZSwgcG9zaXg6IHBhdGhQb3NpeCB9ID0gYXdhaXQgaW1wb3J0KFwibm9kZTpwYXRoXCIpO1xuXG4gIGNvbnN0IGZpbGVTdGF0ID0gYXdhaXQgc3RhdChvcHRzLmFic29sdXRlUGF0aCk7XG4gIGlmIChmaWxlU3RhdC5pc0ZpbGUoKSkge1xuICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCByZWFkRmlsZShvcHRzLmFic29sdXRlUGF0aCk7XG4gICAgcmV0dXJuIFt7IHBhdGg6IG9wdHMucmVsYXRpdmVQcmVmaXggPz8gXCJTS0lMTC5tZFwiLCBjb250ZW50IH1dO1xuICB9XG5cbiAgaWYgKCFmaWxlU3RhdC5pc0RpcmVjdG9yeSgpKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgY29uc3QgZW50cmllcyA9IGF3YWl0IHJlYWRkaXIob3B0cy5hYnNvbHV0ZVBhdGgsIHsgd2l0aEZpbGVUeXBlczogdHJ1ZSB9KTtcbiAgY29uc3QgZmlsZXM6IHsgcGF0aDogc3RyaW5nOyBjb250ZW50OiBCdWZmZXIgfVtdID0gW107XG5cbiAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgY29uc3QgbmV4dEFicyA9IHJlc29sdmUob3B0cy5hYnNvbHV0ZVBhdGgsIGVudHJ5Lm5hbWUpO1xuICAgIGNvbnN0IG5leHRSZWwgPSBvcHRzLnJlbGF0aXZlUHJlZml4XG4gICAgICA/IHBhdGhQb3NpeC5qb2luKG9wdHMucmVsYXRpdmVQcmVmaXgsIGVudHJ5Lm5hbWUpXG4gICAgICA6IGVudHJ5Lm5hbWU7XG5cbiAgICBpZiAoZW50cnkuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgZmlsZXMucHVzaChcbiAgICAgICAgLi4uKGF3YWl0IGNvbGxlY3RGaWxlcyh7XG4gICAgICAgICAgYWJzb2x1dGVQYXRoOiBuZXh0QWJzLFxuICAgICAgICAgIHJlbGF0aXZlUHJlZml4OiBuZXh0UmVsLFxuICAgICAgICB9KSlcbiAgICAgICk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoZW50cnkuaXNGaWxlKCkpIHtcbiAgICAgIGZpbGVzLnB1c2goe1xuICAgICAgICBwYXRoOiBuZXh0UmVsLFxuICAgICAgICBjb250ZW50OiBhd2FpdCByZWFkRmlsZShuZXh0QWJzKSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmaWxlcztcbn1cblxuYXN5bmMgZnVuY3Rpb24gc3RhYmxlRGlyTmFtZShpbnB1dFBhdGg6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHsgY3JlYXRlSGFzaCB9ID0gYXdhaXQgaW1wb3J0KFwibm9kZTpjcnlwdG9cIik7XG4gIGNvbnN0IGhhc2ggPSBjcmVhdGVIYXNoKFwic2hhMVwiKS51cGRhdGUoaW5wdXRQYXRoKS5kaWdlc3QoXCJoZXhcIikuc2xpY2UoMCwgMTApO1xuICByZXR1cm4gYGhvc3QtJHtoYXNofWA7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlSG9zdFNraWxsKG9wdHM6IHtcbiAgc2FuZGJveDogU2FuZGJveEluc3RhbmNlO1xuICBza2lsbDogSG9zdFNraWxsSW5wdXQ7XG59KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgeyByZXNvbHZlLCBwb3NpeDogcGF0aFBvc2l4IH0gPSBhd2FpdCBpbXBvcnQoXCJub2RlOnBhdGhcIik7XG5cbiAgY29uc3QgaG9zdFBhdGggPSByZXNvbHZlKHByb2Nlc3MuY3dkKCksIG9wdHMuc2tpbGwucGF0aCk7XG4gIGNvbnN0IGZpbGVzID0gYXdhaXQgY29sbGVjdEZpbGVzKHsgYWJzb2x1dGVQYXRoOiBob3N0UGF0aCB9KTtcbiAgY29uc3QgZGlyTmFtZSA9IGF3YWl0IHN0YWJsZURpck5hbWUoaG9zdFBhdGgpO1xuICBjb25zdCBkZXN0UGF0aCA9IHBhdGhQb3NpeC5qb2luKFwiLmFnZW50XCIsIFwic2tpbGxzXCIsIFwiLm1hdGVyaWFsaXplZFwiLCBkaXJOYW1lKTtcblxuICBpZiAoZmlsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGRlc3RQYXRoO1xuICB9XG5cbiAgYXdhaXQgb3B0cy5zYW5kYm94LndyaXRlRmlsZXMoe1xuICAgIGZpbGVzLFxuICAgIGRlc3RQYXRoLFxuICB9KTtcblxuICByZXR1cm4gZGVzdFBhdGg7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBTYW5kYm94SW5zdGFuY2UgfSBmcm9tIFwiLi4vc2FuZGJveC9hZGFwdGVyXCI7XG5pbXBvcnQgdHlwZSB7IElubGluZVNraWxsSW5wdXQgfSBmcm9tIFwiLi90eXBlc1wiO1xuXG5mdW5jdGlvbiBzbHVnaWZ5KHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gdmFsdWVcbiAgICAudG9Mb3dlckNhc2UoKVxuICAgIC5yZXBsYWNlKC9bXmEtejAtOV0rL2csIFwiLVwiKVxuICAgIC5yZXBsYWNlKC8oXi18LSQpL2csIFwiXCIpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzdGFibGVJbmxpbmVEaXJOYW1lKG5hbWU6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHsgY3JlYXRlSGFzaCB9ID0gYXdhaXQgaW1wb3J0KFwibm9kZTpjcnlwdG9cIik7XG4gIGNvbnN0IHNsdWcgPSBzbHVnaWZ5KG5hbWUpIHx8IFwiaW5saW5lLXNraWxsXCI7XG4gIGNvbnN0IGhhc2ggPSBjcmVhdGVIYXNoKFwic2hhMVwiKS51cGRhdGUobmFtZSkuZGlnZXN0KFwiaGV4XCIpLnNsaWNlKDAsIDgpO1xuICByZXR1cm4gYCR7c2x1Z30tJHtoYXNofWA7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkU2tpbGxNYXJrZG93bihza2lsbDogSW5saW5lU2tpbGxJbnB1dCk6IHN0cmluZyB7XG4gIHJldHVybiBgLS0tXG5uYW1lOiAke3NraWxsLm5hbWV9XG5kZXNjcmlwdGlvbjogJHtza2lsbC5kZXNjcmlwdGlvbn1cbi0tLVxuXG4ke3NraWxsLmluc3RydWN0aW9ucy50cmltKCl9XG5gO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZUlubGluZVNraWxsKG9wdHM6IHtcbiAgc2FuZGJveDogU2FuZGJveEluc3RhbmNlO1xuICBza2lsbDogSW5saW5lU2tpbGxJbnB1dDtcbn0pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCB7IHBvc2l4OiBwYXRoUG9zaXggfSA9IGF3YWl0IGltcG9ydChcIm5vZGU6cGF0aFwiKTtcblxuICBjb25zdCBkaXJOYW1lID0gYXdhaXQgc3RhYmxlSW5saW5lRGlyTmFtZShvcHRzLnNraWxsLm5hbWUpO1xuICBjb25zdCBkZXN0UGF0aCA9IHBhdGhQb3NpeC5qb2luKFwiLmFnZW50XCIsIFwic2tpbGxzXCIsIFwiLm1hdGVyaWFsaXplZFwiLCBkaXJOYW1lKTtcblxuICBhd2FpdCBvcHRzLnNhbmRib3gud3JpdGVGaWxlcyh7XG4gICAgZGVzdFBhdGgsXG4gICAgZmlsZXM6IFtcbiAgICAgIHtcbiAgICAgICAgcGF0aDogXCJTS0lMTC5tZFwiLFxuICAgICAgICBjb250ZW50OiBidWlsZFNraWxsTWFya2Rvd24ob3B0cy5za2lsbCksXG4gICAgICB9LFxuICAgIF0sXG4gIH0pO1xuXG4gIHJldHVybiBkZXN0UGF0aDtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IFNhbmRib3hJbnN0YW5jZSB9IGZyb20gXCIuLi9zYW5kYm94L2FkYXB0ZXJcIjtcbmltcG9ydCB0eXBlIHsgR2l0U2tpbGxJbnB1dCB9IGZyb20gXCIuL3R5cGVzXCI7XG5cbmZ1bmN0aW9uIHNoZWxsUXVvdGUodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgJyR7dmFsdWUucmVwbGFjZSgvJy9nLCBgJ1xcXFwnJ2ApfSdgO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzdGFibGVSZXBvRGlyTmFtZShza2lsbDogR2l0U2tpbGxJbnB1dCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHsgY3JlYXRlSGFzaCB9ID0gYXdhaXQgaW1wb3J0KFwibm9kZTpjcnlwdG9cIik7XG4gIGNvbnN0IGhhc2hJbnB1dCA9IGAke3NraWxsLnJlcG99Ojoke3NraWxsLnJlZiA/PyBcIkhFQURcIn1gO1xuICBjb25zdCBoYXNoID0gY3JlYXRlSGFzaChcInNoYTFcIikudXBkYXRlKGhhc2hJbnB1dCkuZGlnZXN0KFwiaGV4XCIpLnNsaWNlKDAsIDEyKTtcbiAgcmV0dXJuIGBnaXQtJHtoYXNofWA7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlUmVtb3RlU2tpbGwob3B0czoge1xuICBzYW5kYm94OiBTYW5kYm94SW5zdGFuY2U7XG4gIHNraWxsOiBHaXRTa2lsbElucHV0O1xufSk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHsgcG9zaXg6IHBhdGhQb3NpeCB9ID0gYXdhaXQgaW1wb3J0KFwibm9kZTpwYXRoXCIpO1xuXG4gIGNvbnN0IGRpck5hbWUgPSBhd2FpdCBzdGFibGVSZXBvRGlyTmFtZShvcHRzLnNraWxsKTtcbiAgY29uc3QgY2xvbmVEaXIgPSBwYXRoUG9zaXguam9pbihcIi5hZ2VudFwiLCBcInNraWxsc1wiLCBcIi5tYXRlcmlhbGl6ZWRcIiwgZGlyTmFtZSk7XG4gIGNvbnN0IHF1b3RlZERpciA9IHNoZWxsUXVvdGUoY2xvbmVEaXIpO1xuICBjb25zdCBxdW90ZWRSZXBvID0gc2hlbGxRdW90ZShvcHRzLnNraWxsLnJlcG8pO1xuICBjb25zdCBxdW90ZWRSZWYgPSBzaGVsbFF1b3RlKG9wdHMuc2tpbGwucmVmID8/IFwiSEVBRFwiKTtcblxuICBjb25zdCBzeW5jQ29tbWFuZCA9IFtcbiAgICBcInNldCAtZXVvIHBpcGVmYWlsXCIsXG4gICAgYGlmIFsgISAtZCAke3F1b3RlZERpcn0vLmdpdCBdOyB0aGVuYCxcbiAgICBgICBybSAtcmYgJHtxdW90ZWREaXJ9YCxcbiAgICBgICBta2RpciAtcCAke3F1b3RlZERpcn1gLFxuICAgIGAgIGdpdCBjbG9uZSAtLWRlcHRoIDEgJHtxdW90ZWRSZXBvfSAke3F1b3RlZERpcn1gLFxuICAgIFwiZmlcIixcbiAgICBgaWYgWyAke3F1b3RlZFJlZn0gIT0gJ0hFQUQnIF07IHRoZW5gLFxuICAgIGAgIGdpdCAtQyAke3F1b3RlZERpcn0gZmV0Y2ggLS1kZXB0aCAxIG9yaWdpbiAke3F1b3RlZFJlZn1gLFxuICAgIGAgIGdpdCAtQyAke3F1b3RlZERpcn0gY2hlY2tvdXQgRkVUQ0hfSEVBRGAsXG4gICAgXCJmaVwiLFxuICBdLmpvaW4oXCJcXG5cIik7XG5cbiAgY29uc3QgZXhlY1Jlc3VsdCA9IGF3YWl0IG9wdHMuc2FuZGJveC5leGVjKHtcbiAgICBjb21tYW5kOiBcImJhc2hcIixcbiAgICBhcmdzOiBbXCItbGNcIiwgc3luY0NvbW1hbmRdLFxuICB9KTtcbiAgY29uc3QgeyBleGl0Q29kZSwgc3RkZXJyIH0gPSBhd2FpdCBleGVjUmVzdWx0LnJlc3VsdDtcbiAgaWYgKGV4aXRDb2RlICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEZhaWxlZCB0byBtYXRlcmlhbGl6ZSBnaXQgc2tpbGwgZnJvbSAke29wdHMuc2tpbGwucmVwb306ICR7c3RkZXJyIHx8IFwidW5rbm93biBlcnJvclwifWBcbiAgICApO1xuICB9XG5cbiAgbGV0IHJlc29sdmVkRGlyID0gY2xvbmVEaXI7XG4gIGlmIChvcHRzLnNraWxsLnBhdGgpIHtcbiAgICByZXNvbHZlZERpciA9IHBhdGhQb3NpeC5qb2luKHJlc29sdmVkRGlyLCBvcHRzLnNraWxsLnBhdGgpO1xuICB9XG4gIGlmIChvcHRzLnNraWxsLm5hbWUpIHtcbiAgICByZXNvbHZlZERpciA9IHBhdGhQb3NpeC5qb2luKHJlc29sdmVkRGlyLCBvcHRzLnNraWxsLm5hbWUpO1xuICB9XG4gIHJldHVybiByZXNvbHZlZERpcjtcbn1cbiIsICJpbXBvcnQge1xuICB0eXBlIFRvb2xTZXQsXG4gIHRvb2wsXG4gIHR5cGUgVUlNZXNzYWdlLFxuICB0eXBlIFVJTWVzc2FnZVN0cmVhbVdyaXRlcixcbn0gZnJvbSBcImFpXCI7XG5pbXBvcnQgeyB1bGlkIH0gZnJvbSBcInVsaWRcIjtcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5pbXBvcnQgdHlwZSB7IEFueUFnZW50IH0gZnJvbSBcIi4uL2FnZW50L2NsaWVudFwiO1xuaW1wb3J0IHR5cGUgeyBTYW5kYm94SW5zdGFuY2UgfSBmcm9tIFwiLi4vc2FuZGJveC9hZGFwdGVyXCI7XG5pbXBvcnQgeyBERUZBVUxUX1dBSVRfVU5USUwgfSBmcm9tIFwiLi4vc2FuZGJveC9wcm9jZXNzLW1hbmFnZXJcIjtcbmltcG9ydCB7IGFwcHJvdmFsUGFydElkIH0gZnJvbSBcIi4uL3Nlc3Npb24vc2VuZFwiO1xuaW1wb3J0IHR5cGUgeyBTa2lsbFN1bW1hcnkgfSBmcm9tIFwiLi4vc2tpbGxzL3R5cGVzXCI7XG5pbXBvcnQgeyBjcmVhdGVMb2dnZXIsIHR5cGUgTG9nZ2VyIH0gZnJvbSBcIi4uL3V0aWxzL2xvZ2dlclwiO1xuaW1wb3J0IHsgY3JlYXRlSmF2YVNjcmlwdFRvb2wsIHR5cGUgT25TdWJUb29sQ2FsbCB9IGZyb20gXCIuL2phdmFzY3JpcHRcIjtcbmltcG9ydCB7IGNoZWNrTmVlZHNBcHByb3ZhbCB9IGZyb20gXCIuL25lZWRzLWFwcHJvdmFsXCI7XG5cbmV4cG9ydCB7IHRvb2wgYXMgYWdlbnRUb29sIH0gZnJvbSBcIi4vdG9vbFwiO1xuXG5jb25zdCBsb2cgPSBjcmVhdGVMb2dnZXIoeyBjb25maWc6IHsgbmFtZTogXCJ0b29sc1wiIH0sIHN1YnN5c3RlbTogXCJ0b29sc1wiIH0pO1xuXG5mdW5jdGlvbiBmb3JtYXRGaWxlU2l6ZShieXRlczogbnVtYmVyKTogc3RyaW5nIHtcbiAgaWYgKGJ5dGVzIDwgMTAyNCkge1xuICAgIHJldHVybiBgJHtieXRlc31gO1xuICB9XG4gIGlmIChieXRlcyA8IDEwMjQgKiAxMDI0KSB7XG4gICAgcmV0dXJuIGAkeyhieXRlcyAvIDEwMjQpLnRvRml4ZWQoMSl9S2A7XG4gIH1cbiAgaWYgKGJ5dGVzIDwgMTAyNCAqIDEwMjQgKiAxMDI0KSB7XG4gICAgcmV0dXJuIGAkeyhieXRlcyAvICgxMDI0ICogMTAyNCkpLnRvRml4ZWQoMSl9TWA7XG4gIH1cbiAgcmV0dXJuIGAkeyhieXRlcyAvICgxMDI0ICogMTAyNCAqIDEwMjQpKS50b0ZpeGVkKDEpfUdgO1xufVxuXG50eXBlIFN0cmVhbVdyaXRlciA9IFVJTWVzc2FnZVN0cmVhbVdyaXRlcjtcblxuZXhwb3J0IHR5cGUgVG9vbENvbnRleHQ8XG4gIFRDb250ZXh0ID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIFRTdGF0ZSA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuPiA9IHtcbiAgY29udGV4dDogVENvbnRleHQ7XG4gIHN0YXRlOiBUU3RhdGU7XG4gIHNlc3Npb25JZDogc3RyaW5nO1xuICBzYW5kYm94OiBTYW5kYm94SW5zdGFuY2U7XG4gIG1lc3NhZ2VzOiBVSU1lc3NhZ2VbXTtcbn07XG5cbmZ1bmN0aW9uIGlzUmdOb3RGb3VuZEVycm9yKGVycjogRXJyb3IpOiBib29sZWFuIHtcbiAgY29uc3QgcGFydHMgPSBbZXJyLm1lc3NhZ2VdO1xuXG4gIGNvbnN0IGFueUVyciA9IGVyciBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBpZiAodHlwZW9mIGFueUVyci5yZWFzb24gPT09IFwic3RyaW5nXCIpIHtcbiAgICBwYXJ0cy5wdXNoKGFueUVyci5yZWFzb24pO1xuICB9XG4gIGlmIChhbnlFcnIuY2F1c2UgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgIHBhcnRzLnB1c2goYW55RXJyLmNhdXNlLm1lc3NhZ2UpO1xuICAgIGNvbnN0IGFueUNhdXNlID0gYW55RXJyLmNhdXNlIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgaWYgKHR5cGVvZiBhbnlDYXVzZS50ZXh0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBwYXJ0cy5wdXNoKGFueUNhdXNlLnRleHQpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG1zZyA9IHBhcnRzLmpvaW4oXCIgXCIpLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiAoXG4gICAgbXNnLmluY2x1ZGVzKFwiZXhlY3V0YWJsZSBmaWxlIG5vdCBmb3VuZFwiKSB8fFxuICAgIG1zZy5pbmNsdWRlcyhcImV4ZWN1dGFibGVfbm90X2ZvdW5kXCIpIHx8XG4gICAgKG1zZy5pbmNsdWRlcyhcImVub2VudFwiKSAmJiBtc2cuaW5jbHVkZXMoXCJyZ1wiKSlcbiAgKTtcbn1cblxuZXhwb3J0IGNvbnN0IGJ1aWx0SW5Ub29scyA9IHtcbiAgUmVhZDogdG9vbCh7XG4gICAgZGVzY3JpcHRpb246XG4gICAgICBcIlJlYWRzIGEgZmlsZSBhbmQgcmV0dXJucyBpdHMgY29udGVudHMgd2l0aCBtZXRhZGF0YS4gRm9yIGZpbGVzIG92ZXIgMjAwIGxpbmVzLCBhdXRvbWF0aWNhbGx5IHNob3dzIGZpcnN0IDEwMCBsaW5lcyB1bmxlc3MgYSBzcGVjaWZpYyBsaW5lIHJhbmdlIGlzIHByb3ZpZGVkLiBVc2Ugc3RhcnRMaW5lIGFuZCBlbmRMaW5lIHBhcmFtZXRlcnMgdG8gcmVhZCBzcGVjaWZpYyBwb3J0aW9ucyBvZiBsYXJnZSBmaWxlcy5cIixcbiAgICBpbnB1dFNjaGVtYTogei5vYmplY3Qoe1xuICAgICAgbGFiZWw6IHpcbiAgICAgICAgLnN0cmluZygpXG4gICAgICAgIC5kZXNjcmliZShcIkEgbGFiZWwgdGhhdCBkZXNjcmliZXMgdGhlIGFjdGlvbiBiZWluZyBwZXJmb3JtZWRcIiksXG4gICAgICBwYXRoOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiQWJzb2x1dGUgcGF0aCB0byB0aGUgZmlsZVwiKSxcbiAgICAgIHN0YXJ0TGluZTogelxuICAgICAgICAubnVtYmVyKClcbiAgICAgICAgLm9wdGlvbmFsKClcbiAgICAgICAgLmRlc2NyaWJlKFxuICAgICAgICAgIFwiU3RhcnRpbmcgbGluZSBudW1iZXIgKDEtaW5kZXhlZCkuIElmIHByb3ZpZGVkIHdpdGggZW5kTGluZSwgcmVhZHMgZXhhY3QgcmFuZ2UgcmVnYXJkbGVzcyBvZiBmaWxlIHNpemUuXCJcbiAgICAgICAgKSxcbiAgICAgIGVuZExpbmU6IHpcbiAgICAgICAgLm51bWJlcigpXG4gICAgICAgIC5vcHRpb25hbCgpXG4gICAgICAgIC5kZXNjcmliZShcbiAgICAgICAgICBcIkVuZGluZyBsaW5lIG51bWJlciAoMS1pbmRleGVkLCBpbmNsdXNpdmUpLiBJZiBwcm92aWRlZCB3aXRoIHN0YXJ0TGluZSwgcmVhZHMgZXhhY3QgcmFuZ2UgcmVnYXJkbGVzcyBvZiBmaWxlIHNpemUuXCJcbiAgICAgICAgKSxcbiAgICB9KSxcbiAgICBvdXRwdXRTY2hlbWE6IHoub2JqZWN0KHtcbiAgICAgIGNvbnRlbnQ6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJGaWxlIGNvbnRlbnRcIiksXG4gICAgICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgICAgICB0b3RhbExpbmVzOiB6Lm51bWJlcigpLmRlc2NyaWJlKFwiVG90YWwgbnVtYmVyIG9mIGxpbmVzIGluIHRoZSBmaWxlXCIpLFxuICAgICAgICBsaW5lc1Nob3duOiB6XG4gICAgICAgICAgLm51bWJlcigpXG4gICAgICAgICAgLmRlc2NyaWJlKFwiTnVtYmVyIG9mIGxpbmVzIGluY2x1ZGVkIGluIHRoaXMgcmVzcG9uc2VcIiksXG4gICAgICAgIHN0YXJ0TGluZTogei5udW1iZXIoKS5kZXNjcmliZShcIkZpcnN0IGxpbmUgbnVtYmVyIHNob3duICgxLWluZGV4ZWQpXCIpLFxuICAgICAgICBlbmRMaW5lOiB6Lm51bWJlcigpLmRlc2NyaWJlKFwiTGFzdCBsaW5lIG51bWJlciBzaG93biAoMS1pbmRleGVkKVwiKSxcbiAgICAgICAgaXNQYWdpbmF0ZWQ6IHpcbiAgICAgICAgICAuYm9vbGVhbigpXG4gICAgICAgICAgLmRlc2NyaWJlKFwiV2hldGhlciB0aGlzIGlzIGEgcGFydGlhbCB2aWV3IG9mIHRoZSBmaWxlXCIpLFxuICAgICAgICBmaWxlU2l6ZTogelxuICAgICAgICAgIC5zdHJpbmcoKVxuICAgICAgICAgIC5kZXNjcmliZShcIkh1bWFuLXJlYWRhYmxlIGZpbGUgc2l6ZSAoZS5nLiwgJzIuNUsnLCAnMS4yTScpXCIpLFxuICAgICAgICBwYXRoOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiQWJzb2x1dGUgcGF0aCB0byB0aGUgZmlsZVwiKSxcbiAgICAgIH0pLFxuICAgIH0pLFxuICB9KSxcbiAgR3JlcDogdG9vbCh7XG4gICAgZGVzY3JpcHRpb246XG4gICAgICBcIlNlYXJjaCBmb3IgcGF0dGVybnMgaW4gZmlsZXMgdXNpbmcgcmlwZ3JlcC4gVXNlIHRoaXMgdG8gZmluZCBjb2RlIHBhdHRlcm5zLCBmdW5jdGlvbiBkZWZpbml0aW9ucywgaW1wb3J0cywgZXRjLlwiLFxuICAgIGlucHV0U2NoZW1hOiB6Lm9iamVjdCh7XG4gICAgICBsYWJlbDogelxuICAgICAgICAuc3RyaW5nKClcbiAgICAgICAgLmRlc2NyaWJlKFwiQSBsYWJlbCB0aGF0IGRlc2NyaWJlcyB0aGUgYWN0aW9uIGJlaW5nIHBlcmZvcm1lZFwiKSxcbiAgICAgIHBhdHRlcm46IHpcbiAgICAgICAgLnN0cmluZygpXG4gICAgICAgIC5kZXNjcmliZShcIlJlZ2V4IHBhdHRlcm4gdG8gc2VhcmNoIGZvciAocmlwZ3JlcCBzeW50YXgpXCIpLFxuICAgICAgcGF0aDogelxuICAgICAgICAuc3RyaW5nKClcbiAgICAgICAgLm9wdGlvbmFsKClcbiAgICAgICAgLmRlc2NyaWJlKFxuICAgICAgICAgIFwiQWJzb2x1dGUgcGF0aCB0byBzZWFyY2ggaW4gKGRlZmF1bHRzIHRvIHdvcmtpbmcgZGlyZWN0b3J5KS4gQ2FuIGJlIGEgZmlsZSBvciBkaXJlY3RvcnkuXCJcbiAgICAgICAgKSxcbiAgICAgIGZpbGVUeXBlOiB6XG4gICAgICAgIC5zdHJpbmcoKVxuICAgICAgICAub3B0aW9uYWwoKVxuICAgICAgICAuZGVzY3JpYmUoXG4gICAgICAgICAgXCJGaWxlIHR5cGUgdG8gZmlsdGVyIGJ5IChlLmcuLCAndHMnLCAnanMnLCAncHknLCAnbWQnKS4gVXNlcyByaXBncmVwJ3MgYnVpbHQtaW4gdHlwZSBmaWx0ZXJzLlwiXG4gICAgICAgICksXG4gICAgICBnbG9iOiB6XG4gICAgICAgIC5zdHJpbmcoKVxuICAgICAgICAub3B0aW9uYWwoKVxuICAgICAgICAuZGVzY3JpYmUoXG4gICAgICAgICAgXCJHbG9iIHBhdHRlcm4gdG8gZmlsdGVyIGZpbGVzIChlLmcuLCAnKi50c3gnLCAnc3JjLyoqLyoudHMnKVwiXG4gICAgICAgICksXG4gICAgICBjYXNlU2Vuc2l0aXZlOiB6XG4gICAgICAgIC5ib29sZWFuKClcbiAgICAgICAgLm9wdGlvbmFsKClcbiAgICAgICAgLmRlZmF1bHQodHJ1ZSlcbiAgICAgICAgLmRlc2NyaWJlKFwiV2hldGhlciBzZWFyY2ggaXMgY2FzZS1zZW5zaXRpdmUgKGRlZmF1bHQ6IHRydWUpXCIpLFxuICAgICAgY29udGV4dExpbmVzOiB6XG4gICAgICAgIC5udW1iZXIoKVxuICAgICAgICAub3B0aW9uYWwoKVxuICAgICAgICAuZGVzY3JpYmUoXG4gICAgICAgICAgXCJOdW1iZXIgb2YgY29udGV4dCBsaW5lcyB0byBzaG93IGJlZm9yZSBhbmQgYWZ0ZXIgZWFjaCBtYXRjaFwiXG4gICAgICAgICksXG4gICAgICBtYXhDb3VudDogelxuICAgICAgICAubnVtYmVyKClcbiAgICAgICAgLm9wdGlvbmFsKClcbiAgICAgICAgLmRlc2NyaWJlKFxuICAgICAgICAgIFwiTWF4aW11bSBudW1iZXIgb2YgbWF0Y2hlcyBwZXIgZmlsZSAodXNlZnVsIGZvciBsaW1pdGluZyBvdXRwdXQpXCJcbiAgICAgICAgKSxcbiAgICAgIGZpbGVzV2l0aE1hdGNoZXM6IHpcbiAgICAgICAgLmJvb2xlYW4oKVxuICAgICAgICAub3B0aW9uYWwoKVxuICAgICAgICAuZGVmYXVsdChmYWxzZSlcbiAgICAgICAgLmRlc2NyaWJlKFxuICAgICAgICAgIFwiT25seSBzaG93IGZpbGUgcGF0aHMgdGhhdCBjb250YWluIG1hdGNoZXMsIG5vdCB0aGUgbWF0Y2hpbmcgbGluZXMgdGhlbXNlbHZlc1wiXG4gICAgICAgICksXG4gICAgfSksXG4gICAgb3V0cHV0U2NoZW1hOiB6Lm9iamVjdCh7XG4gICAgICBtYXRjaGVzOiB6XG4gICAgICAgIC5zdHJpbmcoKVxuICAgICAgICAuZGVzY3JpYmUoXG4gICAgICAgICAgXCJTZWFyY2ggcmVzdWx0cyB3aXRoIGZpbGUgcGF0aHMsIGxpbmUgbnVtYmVycywgYW5kIG1hdGNoaW5nIGNvbnRlbnRcIlxuICAgICAgICApLFxuICAgICAgc3VtbWFyeTogei5vYmplY3Qoe1xuICAgICAgICBtYXRjaENvdW50OiB6Lm51bWJlcigpLmRlc2NyaWJlKFwiTnVtYmVyIG9mIG1hdGNoZXMgZm91bmRcIiksXG4gICAgICAgIGZpbGVDb3VudDogei5udW1iZXIoKS5kZXNjcmliZShcIk51bWJlciBvZiBmaWxlcyBjb250YWluaW5nIG1hdGNoZXNcIiksXG4gICAgICAgIHNlYXJjaFBhdGg6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJQYXRoIHRoYXQgd2FzIHNlYXJjaGVkXCIpLFxuICAgICAgICBwYXR0ZXJuOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiUGF0dGVybiB0aGF0IHdhcyBzZWFyY2hlZCBmb3JcIiksXG4gICAgICB9KSxcbiAgICB9KSxcbiAgfSksXG4gIExpc3Q6IHRvb2woe1xuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgXCJSZWN1cnNpdmVseSBsaXN0IGRpcmVjdG9yeSBjb250ZW50cy4gVXNlIHRoaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29kZWJhc2Ugc3RydWN0dXJlLCBmaW5kIGZpbGVzLCBvciBleHBsb3JlIGRpcmVjdG9yaWVzLiBDb250cm9sIGRlcHRoIHRvIGJhbGFuY2UgZGV0YWlsIHZzLiBvdmVydmlldy4gRGVwdGggMSBzaG93cyBpbW1lZGlhdGUgY2hpbGRyZW4sIGRlcHRoIDIgaW5jbHVkZXMgc3ViZGlyZWN0b3JpZXMsIGV0Yy5cIixcbiAgICBpbnB1dFNjaGVtYTogei5vYmplY3Qoe1xuICAgICAgbGFiZWw6IHpcbiAgICAgICAgLnN0cmluZygpXG4gICAgICAgIC5kZXNjcmliZShcIkEgbGFiZWwgdGhhdCBkZXNjcmliZXMgdGhlIGFjdGlvbiBiZWluZyBwZXJmb3JtZWRcIiksXG4gICAgICBwYXRoOiB6XG4gICAgICAgIC5zdHJpbmcoKVxuICAgICAgICAub3B0aW9uYWwoKVxuICAgICAgICAuZGVzY3JpYmUoXCJBYnNvbHV0ZSBwYXRoIHRvIGxpc3QgKGRlZmF1bHRzIHRvIHdvcmtpbmcgZGlyZWN0b3J5KVwiKSxcbiAgICAgIGRlcHRoOiB6XG4gICAgICAgIC5udW1iZXIoKVxuICAgICAgICAub3B0aW9uYWwoKVxuICAgICAgICAuZGVzY3JpYmUoXG4gICAgICAgICAgXCJNYXhpbXVtIGRlcHRoIHRvIHRyYXZlcnNlLiBDaG9vc2UgYmFzZWQgb24gY29udGV4dDogMS0yIGZvciBxdWljayBvdmVydmlldywgMy00IGZvciBkZXRhaWxlZCBleHBsb3JhdGlvbiwgNSsgZm9yIGNvbXByZWhlbnNpdmUgbWFwcGluZ1wiXG4gICAgICAgICksXG4gICAgICBpbmNsdWRlSGlkZGVuOiB6XG4gICAgICAgIC5ib29sZWFuKClcbiAgICAgICAgLm9wdGlvbmFsKClcbiAgICAgICAgLmRlZmF1bHQoZmFsc2UpXG4gICAgICAgIC5kZXNjcmliZShcbiAgICAgICAgICBcIkluY2x1ZGUgaGlkZGVuIGZpbGVzIGFuZCBkaXJlY3RvcmllcyAodGhvc2Ugc3RhcnRpbmcgd2l0aCAnLicpXCJcbiAgICAgICAgKSxcbiAgICAgIGZpbGVzT25seTogelxuICAgICAgICAuYm9vbGVhbigpXG4gICAgICAgIC5vcHRpb25hbCgpXG4gICAgICAgIC5kZWZhdWx0KGZhbHNlKVxuICAgICAgICAuZGVzY3JpYmUoXCJPbmx5IHNob3cgZmlsZXMsIG5vdCBkaXJlY3Rvcmllc1wiKSxcbiAgICAgIHBhdHRlcm46IHpcbiAgICAgICAgLnN0cmluZygpXG4gICAgICAgIC5vcHRpb25hbCgpXG4gICAgICAgIC5kZXNjcmliZShcIkdsb2IgcGF0dGVybiB0byBmaWx0ZXIgcmVzdWx0cyAoZS5nLiwgJyoudHMnLCAnKnRlc3QqJylcIiksXG4gICAgfSksXG4gICAgb3V0cHV0U2NoZW1hOiB6Lm9iamVjdCh7XG4gICAgICBsaXN0aW5nOiB6XG4gICAgICAgIC5zdHJpbmcoKVxuICAgICAgICAuZGVzY3JpYmUoXG4gICAgICAgICAgXCJEaXJlY3RvcnkgdHJlZSBsaXN0aW5nIHNob3dpbmcgcGF0aHMgcmVsYXRpdmUgdG8gc2VhcmNoIHJvb3RcIlxuICAgICAgICApLFxuICAgICAgc3VtbWFyeTogei5vYmplY3Qoe1xuICAgICAgICB0b3RhbEl0ZW1zOiB6Lm51bWJlcigpLmRlc2NyaWJlKFwiVG90YWwgbnVtYmVyIG9mIGl0ZW1zIGZvdW5kXCIpLFxuICAgICAgICB0b3RhbEZpbGVzOiB6Lm51bWJlcigpLmRlc2NyaWJlKFwiVG90YWwgbnVtYmVyIG9mIGZpbGVzIGZvdW5kXCIpLFxuICAgICAgICB0b3RhbERpcnM6IHoubnVtYmVyKCkuZGVzY3JpYmUoXCJUb3RhbCBudW1iZXIgb2YgZGlyZWN0b3JpZXMgZm91bmRcIiksXG4gICAgICAgIHNlYXJjaFBhdGg6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJQYXRoIHRoYXQgd2FzIGxpc3RlZFwiKSxcbiAgICAgICAgZGVwdGg6IHpcbiAgICAgICAgICAubnVtYmVyKClcbiAgICAgICAgICAub3B0aW9uYWwoKVxuICAgICAgICAgIC5kZXNjcmliZShcIk1heGltdW0gZGVwdGggdXNlZCAoaWYgc3BlY2lmaWVkKVwiKSxcbiAgICAgIH0pLFxuICAgIH0pLFxuICB9KSxcbiAgV3JpdGU6IHRvb2woe1xuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgXCJXcml0ZSBjb250ZW50IHRvIGEgZmlsZS4gQ3JlYXRlcyBwYXJlbnQgZGlyZWN0b3JpZXMgYXV0b21hdGljYWxseS4gT3ZlcndyaXRlcyBleGlzdGluZyBmaWxlcy5cIixcbiAgICBpbnB1dFNjaGVtYTogei5vYmplY3Qoe1xuICAgICAgbGFiZWw6IHpcbiAgICAgICAgLnN0cmluZygpXG4gICAgICAgIC5kZXNjcmliZShcIkEgbGFiZWwgdGhhdCBkZXNjcmliZXMgdGhlIGFjdGlvbiBiZWluZyBwZXJmb3JtZWRcIiksXG4gICAgICBwYXRoOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiQWJzb2x1dGUgcGF0aCB0byB0aGUgZmlsZVwiKSxcbiAgICAgIGNvbnRlbnQ6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJDb250ZW50IHRvIHdyaXRlIHRvIHRoZSBmaWxlXCIpLFxuICAgIH0pLFxuICAgIG91dHB1dFNjaGVtYTogei5vYmplY3Qoe1xuICAgICAgc3VjY2Vzczogei5ib29sZWFuKCkuZGVzY3JpYmUoXCJXaGV0aGVyIHRoZSB3cml0ZSBzdWNjZWVkZWRcIiksXG4gICAgICBwYXRoOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiUGF0aCB0byB0aGUgd3JpdHRlbiBmaWxlXCIpLFxuICAgICAgYnl0ZXNXcml0dGVuOiB6Lm51bWJlcigpLmRlc2NyaWJlKFwiTnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW5cIiksXG4gICAgICBlcnJvcjogei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiRXJyb3IgbWVzc2FnZSBpZiB3cml0ZSBmYWlsZWRcIiksXG4gICAgfSksXG4gIH0pLFxuICBFZGl0OiB0b29sKHtcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgIFwiRWRpdCBhIGZpbGUgYnkgcmVwbGFjaW5nIGFuIGV4YWN0IHN0cmluZy4gRmFpbHMgaWYgb2xkX3N0cmluZyBpcyBub3QgZm91bmQgb3IgYXBwZWFycyBtdWx0aXBsZSB0aW1lcyAobm90IHVuaXF1ZSkuIEZvciBtdWx0aXBsZSByZXBsYWNlbWVudHMsIGNhbGwgdGhpcyB0b29sIG11bHRpcGxlIHRpbWVzIHdpdGggdW5pcXVlIGNvbnRleHQuXCIsXG4gICAgaW5wdXRTY2hlbWE6IHoub2JqZWN0KHtcbiAgICAgIGxhYmVsOiB6XG4gICAgICAgIC5zdHJpbmcoKVxuICAgICAgICAuZGVzY3JpYmUoXCJBIGxhYmVsIHRoYXQgZGVzY3JpYmVzIHRoZSBhY3Rpb24gYmVpbmcgcGVyZm9ybWVkXCIpLFxuICAgICAgcGF0aDogei5zdHJpbmcoKS5kZXNjcmliZShcIkFic29sdXRlIHBhdGggdG8gdGhlIGZpbGVcIiksXG4gICAgICBvbGRfc3RyaW5nOiB6XG4gICAgICAgIC5zdHJpbmcoKVxuICAgICAgICAuZGVzY3JpYmUoXCJFeGFjdCBzdHJpbmcgdG8gZmluZCBhbmQgcmVwbGFjZSAobXVzdCBiZSB1bmlxdWUgaW4gZmlsZSlcIiksXG4gICAgICBuZXdfc3RyaW5nOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiU3RyaW5nIHRvIHJlcGxhY2Ugb2xkX3N0cmluZyB3aXRoXCIpLFxuICAgIH0pLFxuICAgIG91dHB1dFNjaGVtYTogei5vYmplY3Qoe1xuICAgICAgc3VjY2Vzczogei5ib29sZWFuKCkuZGVzY3JpYmUoXCJXaGV0aGVyIHRoZSBlZGl0IHN1Y2NlZWRlZFwiKSxcbiAgICAgIHBhdGg6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJQYXRoIHRvIHRoZSBlZGl0ZWQgZmlsZVwiKSxcbiAgICAgIGVycm9yOiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJFcnJvciBtZXNzYWdlIGlmIGVkaXQgZmFpbGVkXCIpLFxuICAgIH0pLFxuICB9KSxcbiAgQmFzaDogdG9vbCh7XG4gICAgZGVzY3JpcHRpb246XG4gICAgICBcIkV4ZWN1dGVzIGEgYmFzaCBjb21tYW5kLiBSZXR1cm5zIHN0ZG91dCBhbmQgc3RkZXJyIHNlcGFyYXRlbHkuIFVzZSB3YWl0VW50aWwgdG8gY29udHJvbCBob3cgbG9uZyB0byB3YWl0ICgwID0gcmV0dXJuIGltbWVkaWF0ZWx5LCBwcm9jZXNzIGtlZXBzIHJ1bm5pbmcpLiBMYXJnZSBvdXRwdXRzIGFyZSB0YWlsLXRydW5jYXRlZDsgZnVsbCBvdXRwdXQgaW4gb3V0cHV0RGlyLlwiLFxuICAgIGlucHV0U2NoZW1hOiB6Lm9iamVjdCh7XG4gICAgICBsYWJlbDogelxuICAgICAgICAuc3RyaW5nKClcbiAgICAgICAgLmRlc2NyaWJlKFwiQSBsYWJlbCB0aGF0IGRlc2NyaWJlcyB0aGUgYWN0aW9uIGJlaW5nIHBlcmZvcm1lZFwiKSxcbiAgICAgIGNvbW1hbmQ6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJUaGUgc2hlbGwgY29tbWFuZCB0byBleGVjdXRlXCIpLFxuICAgICAgd2FpdFVudGlsOiB6XG4gICAgICAgIC5udW1iZXIoKVxuICAgICAgICAub3B0aW9uYWwoKVxuICAgICAgICAuZGVzY3JpYmUoXG4gICAgICAgICAgYE1heCBtcyB0byB3YWl0IGZvciBjb21wbGV0aW9uIChkZWZhdWx0OiAke0RFRkFVTFRfV0FJVF9VTlRJTH0pLiBVc2UgMCB0byByZXR1cm4gaW1tZWRpYXRlbHkgd2hpbGUgdGhlIHByb2Nlc3Mga2VlcHMgcnVubmluZy5gXG4gICAgICAgICksXG4gICAgfSksXG4gICAgb3V0cHV0U2NoZW1hOiB6Lm9iamVjdCh7XG4gICAgICBjb21tYW5kSWQ6IHpcbiAgICAgICAgLnN0cmluZygpXG4gICAgICAgIC5kZXNjcmliZShcIkNvbW1hbmQgSUQuIFVzZSB0byByZWZlcmVuY2Ugb3Iga2lsbCBydW5uaW5nIHByb2Nlc3Nlcy5cIiksXG4gICAgICBzdGRvdXQ6IHpcbiAgICAgICAgLnN0cmluZygpXG4gICAgICAgIC5kZXNjcmliZShcbiAgICAgICAgICBcIkNvbW1hbmQgc3Rkb3V0LiBUYWlsLXRydW5jYXRlZCBpZiBsYXJnZTsgZnVsbCBjb250ZW50IGluIG91dHB1dERpci9zdGRvdXQudHh0LlwiXG4gICAgICAgICksXG4gICAgICBzdGRlcnI6IHpcbiAgICAgICAgLnN0cmluZygpXG4gICAgICAgIC5kZXNjcmliZShcbiAgICAgICAgICBcIkNvbW1hbmQgc3RkZXJyLiBUYWlsLXRydW5jYXRlZCBpZiBsYXJnZTsgZnVsbCBjb250ZW50IGluIG91dHB1dERpci9zdGRlcnIudHh0LlwiXG4gICAgICAgICksXG4gICAgICBleGl0Q29kZTogei5udW1iZXIoKS5kZXNjcmliZShcIkV4aXQgY29kZSAoLTEgaWYgc3RpbGwgcnVubmluZylcIiksXG4gICAgICBzdGF0dXM6IHpcbiAgICAgICAgLmVudW0oW1wicnVubmluZ1wiLCBcImNvbXBsZXRlZFwiLCBcImZhaWxlZFwiXSlcbiAgICAgICAgLmRlc2NyaWJlKFwiUHJvY2VzcyBzdGF0dXNcIiksXG4gICAgICBvdXRwdXREaXI6IHpcbiAgICAgICAgLnN0cmluZygpXG4gICAgICAgIC5kZXNjcmliZShcbiAgICAgICAgICBcIlBhdGggdG8gb3V0cHV0IGRpcmVjdG9yeSBjb250YWluaW5nIHN0ZG91dC50eHQsIHN0ZGVyci50eHQsIGFuZCBtZXRhZGF0YS5qc29uLiBFbXB0eSBpZiBzdGlsbCBydW5uaW5nLlwiXG4gICAgICAgICksXG4gICAgfSksXG4gIH0pLFxuICBTa2lsbDogdG9vbCh7XG4gICAgZGVzY3JpcHRpb246XG4gICAgICBcIkxvYWQgYSBza2lsbCdzIGZ1bGwgaW5zdHJ1Y3Rpb25zIGJ5IG5hbWUuIENhbGwgdGhpcyBiZWZvcmUgZm9sbG93aW5nIGEgc2tpbGwuXCIsXG4gICAgaW5wdXRTY2hlbWE6IHoub2JqZWN0KHtcbiAgICAgIGxhYmVsOiB6XG4gICAgICAgIC5zdHJpbmcoKVxuICAgICAgICAuZGVzY3JpYmUoXCJBIGxhYmVsIHRoYXQgZGVzY3JpYmVzIHRoZSBhY3Rpb24gYmVpbmcgcGVyZm9ybWVkXCIpLFxuICAgICAgbmFtZTogei5zdHJpbmcoKS5kZXNjcmliZShcIlNraWxsIG5hbWUgZnJvbSB0aGUgQXZhaWxhYmxlIFNraWxscyBsaXN0XCIpLFxuICAgIH0pLFxuICAgIG91dHB1dFNjaGVtYTogei5vYmplY3Qoe1xuICAgICAgbmFtZTogei5zdHJpbmcoKSxcbiAgICAgIGRlc2NyaXB0aW9uOiB6LnN0cmluZygpLFxuICAgICAgY29udGVudDogei5zdHJpbmcoKS5kZXNjcmliZShcIkZ1bGwgU0tJTEwubWQgY29udGVudFwiKSxcbiAgICAgIHBhdGg6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJQYXRoIHRvIHRoZSBza2lsbCBkaXJlY3RvcnkgaW4gdGhlIHNhbmRib3hcIiksXG4gICAgfSksXG4gIH0pLFxuICBKYXZhU2NyaXB0OiB0b29sKHtcbiAgICBpbnB1dFNjaGVtYTogei5vYmplY3Qoe1xuICAgICAgbGFiZWw6IHpcbiAgICAgICAgLnN0cmluZygpXG4gICAgICAgIC5kZXNjcmliZShcIkEgbGFiZWwgdGhhdCBkZXNjcmliZXMgdGhlIGFjdGlvbiBiZWluZyBwZXJmb3JtZWRcIiksXG4gICAgICBjb2RlOiB6XG4gICAgICAgIC5zdHJpbmcoKVxuICAgICAgICAuZGVzY3JpYmUoXG4gICAgICAgICAgXCJKYXZhU2NyaXB0IGFzeW5jIGZ1bmN0aW9uIGJvZHkuIGBjdHhgIGlzIGluIHNjb3BlLiBNdXN0IHVzZSBgcmV0dXJuYCB0byBwcm9kdWNlIG91dHB1dC5cIlxuICAgICAgICApLFxuICAgIH0pLFxuICB9KSxcbn0gc2F0aXNmaWVzIFRvb2xTZXQ7XG5cbmV4cG9ydCB0eXBlIEJ1aWx0SW5Ub29sTmFtZSA9IGtleW9mIHR5cGVvZiBidWlsdEluVG9vbHM7XG5leHBvcnQgY29uc3QgYnVpbHRpblRvb2xOYW1lcyA9IE9iamVjdC5mcm9tRW50cmllcyhcbiAgT2JqZWN0LmVudHJpZXMoYnVpbHRJblRvb2xzKS5tYXAoKFtuYW1lXSkgPT4gW25hbWUsIG5hbWVdKVxuKSBhcyB7IFtLIGluIEJ1aWx0SW5Ub29sTmFtZV06IEsgfTtcblxuY29uc3QgU0tJTExfTURfU1VGRklYID0gL1xcLz9TS0lMTFxcLm1kJC87XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUb29scyh7XG4gIGFnZW50LFxuICBzYW5kYm94LFxuICBza2lsbHNSZWYsXG4gIHdyaXRlcixcbiAgYWJvcnRDb250cm9sbGVyLFxuICBuZXh0UGFydEluZGV4UmVmLFxuICBhc3Npc3RhbnRNZXNzYWdlSWQsXG4gIHNlc3Npb25JZCxcbiAgc3RlcExvZyxcbiAgY29udGV4dCxcbiAgc3RhdGUsXG4gIG1lc3NhZ2VzLFxuICBhY3RpdmVUb29scyxcbn06IHtcbiAgYWdlbnQ6IEFueUFnZW50O1xuICBzYW5kYm94OiBTYW5kYm94SW5zdGFuY2U7XG4gIHNraWxsc1JlZjogeyBjdXJyZW50OiBTa2lsbFN1bW1hcnlbXSB9O1xuICB3cml0ZXI6IFN0cmVhbVdyaXRlcjtcbiAgYWJvcnRDb250cm9sbGVyOiBBYm9ydENvbnRyb2xsZXI7XG4gIG5leHRQYXJ0SW5kZXhSZWY6IHsgY3VycmVudDogbnVtYmVyIH07XG4gIGFzc2lzdGFudE1lc3NhZ2VJZDogc3RyaW5nO1xuICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgc3RlcExvZzogTG9nZ2VyO1xuICBjb250ZXh0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgc3RhdGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBtZXNzYWdlczogVUlNZXNzYWdlW107XG4gIGFjdGl2ZVRvb2xzPzogc3RyaW5nW107XG59KToge1xuICByYXdUb29sczogVG9vbFNldDtcbiAgdG9vbHNXaXRoTmVlZHNBcHByb3ZhbDogVG9vbFNldDtcbiAgdG9vbENvbnRleHQ6IFRvb2xDb250ZXh0O1xufSB7XG4gIGNvbnN0IHJhd1Rvb2xzOiBUb29sU2V0ID0ge1xuICAgIFtidWlsdGluVG9vbE5hbWVzLlJlYWRdOiB0b29sKHtcbiAgICAgIC4uLmJ1aWx0SW5Ub29scy5SZWFkLFxuICAgICAgZXhlY3V0ZTogYXN5bmMgKHsgcGF0aCwgc3RhcnRMaW5lLCBlbmRMaW5lIH0pID0+IHtcbiAgICAgICAgY29uc3QgZmlsZVBhdGggPSBwYXRoO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNhbmRib3gucmVhZEZpbGUoeyBwYXRoOiBmaWxlUGF0aCB9KTtcblxuICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICBsb2cuZXJyb3IoXCJSZWFkIGZhaWxlZFwiLCB7IGVycm9yOiByZXN1bHQubWVzc2FnZSB9KTtcbiAgICAgICAgICB0aHJvdyByZXN1bHQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IGBFcnJvcjogRmlsZSBub3QgZm91bmQgLSAke2ZpbGVQYXRofWAsXG4gICAgICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgICAgICB0b3RhbExpbmVzOiAwLFxuICAgICAgICAgICAgICBsaW5lc1Nob3duOiAwLFxuICAgICAgICAgICAgICBzdGFydExpbmU6IDAsXG4gICAgICAgICAgICAgIGVuZExpbmU6IDAsXG4gICAgICAgICAgICAgIGlzUGFnaW5hdGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgZmlsZVNpemU6IFwiMFwiLFxuICAgICAgICAgICAgICBwYXRoOiBmaWxlUGF0aCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZ1bGxDb250ZW50ID0gcmVzdWx0LnRvU3RyaW5nKFwidXRmLThcIik7XG4gICAgICAgIGNvbnN0IGxpbmVzID0gZnVsbENvbnRlbnQuc3BsaXQoXCJcXG5cIik7XG4gICAgICAgIC8vIEEgdHJhaWxpbmcgbmV3bGluZSBwcm9kdWNlcyBhbiBlbXB0eSBsYXN0IGVsZW1lbnQgXHUyMDE0IHJlbW92ZSBpdFxuICAgICAgICAvLyBzbyBsaW5lIGNvdW50IG1hdGNoZXMgYHdjIC1sYCAvIGBhd2sgJ0VORHtwcmludCBOUn0nYCBiZWhhdmlvci5cbiAgICAgICAgaWYgKGxpbmVzLmxlbmd0aCA+IDAgJiYgbGluZXMuYXQoLTEpID09PSBcIlwiKSB7XG4gICAgICAgICAgbGluZXMucG9wKCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdG90YWxMaW5lcyA9IGxpbmVzLmxlbmd0aDtcbiAgICAgICAgY29uc3QgZmlsZUJ5dGVzID0gQnVmZmVyLmJ5dGVMZW5ndGgoZnVsbENvbnRlbnQpO1xuICAgICAgICBjb25zdCBmaWxlU2l6ZSA9IGZvcm1hdEZpbGVTaXplKGZpbGVCeXRlcyk7XG5cbiAgICAgICAgLy8gRGV0ZXJtaW5lIHJhbmdlXG4gICAgICAgIGNvbnN0IFBBR0VfU0laRSA9IDEwMDtcbiAgICAgICAgbGV0IGFjdHVhbFN0YXJ0OiBudW1iZXI7XG4gICAgICAgIGxldCBhY3R1YWxFbmQ6IG51bWJlcjtcblxuICAgICAgICBpZiAoc3RhcnRMaW5lICE9PSB1bmRlZmluZWQgJiYgZW5kTGluZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgYWN0dWFsU3RhcnQgPSBzdGFydExpbmU7XG4gICAgICAgICAgYWN0dWFsRW5kID0gZW5kTGluZTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGFydExpbmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGFjdHVhbFN0YXJ0ID0gc3RhcnRMaW5lO1xuICAgICAgICAgIGFjdHVhbEVuZCA9IE1hdGgubWluKHN0YXJ0TGluZSArIFBBR0VfU0laRSAtIDEsIHRvdGFsTGluZXMpO1xuICAgICAgICB9IGVsc2UgaWYgKGVuZExpbmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGFjdHVhbFN0YXJ0ID0gMTtcbiAgICAgICAgICBhY3R1YWxFbmQgPSBlbmRMaW5lO1xuICAgICAgICB9IGVsc2UgaWYgKHRvdGFsTGluZXMgPiAyMDApIHtcbiAgICAgICAgICBhY3R1YWxTdGFydCA9IDE7XG4gICAgICAgICAgYWN0dWFsRW5kID0gUEFHRV9TSVpFO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFjdHVhbFN0YXJ0ID0gMTtcbiAgICAgICAgICBhY3R1YWxFbmQgPSB0b3RhbExpbmVzO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRXh0cmFjdCB0aGUgbGluZSByYW5nZSAoMS1pbmRleGVkKVxuICAgICAgICBjb25zdCBzbGljZWRMaW5lcyA9IGxpbmVzLnNsaWNlKGFjdHVhbFN0YXJ0IC0gMSwgYWN0dWFsRW5kKTtcbiAgICAgICAgY29uc3QgY29udGVudCA9IHNsaWNlZExpbmVzLmpvaW4oXCJcXG5cIik7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgICAgdG90YWxMaW5lcyxcbiAgICAgICAgICAgIGxpbmVzU2hvd246IE1hdGgubWF4KDAsIGFjdHVhbEVuZCAtIGFjdHVhbFN0YXJ0ICsgMSksXG4gICAgICAgICAgICBzdGFydExpbmU6IGFjdHVhbFN0YXJ0LFxuICAgICAgICAgICAgZW5kTGluZTogYWN0dWFsRW5kLFxuICAgICAgICAgICAgaXNQYWdpbmF0ZWQ6IGFjdHVhbEVuZCA8IHRvdGFsTGluZXMsXG4gICAgICAgICAgICBmaWxlU2l6ZSxcbiAgICAgICAgICAgIHBhdGg6IGZpbGVQYXRoLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgY29udGVudCxcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgfSksXG4gICAgW2J1aWx0aW5Ub29sTmFtZXMuR3JlcF06IHRvb2woe1xuICAgICAgLi4uYnVpbHRJblRvb2xzLkdyZXAsXG4gICAgICBleGVjdXRlOiBhc3luYyAoe1xuICAgICAgICBwYXR0ZXJuLFxuICAgICAgICBwYXRoLFxuICAgICAgICBmaWxlVHlwZSxcbiAgICAgICAgZ2xvYixcbiAgICAgICAgY2FzZVNlbnNpdGl2ZSxcbiAgICAgICAgY29udGV4dExpbmVzLFxuICAgICAgICBtYXhDb3VudCxcbiAgICAgICAgZmlsZXNXaXRoTWF0Y2hlcyxcbiAgICAgIH0pID0+IHtcbiAgICAgICAgY29uc3Qgc2VhcmNoUGF0aCA9IHBhdGggPz8gXCIuXCI7XG5cbiAgICAgICAgY29uc3QgYXJnczogc3RyaW5nW10gPSBbXTtcblxuICAgICAgICBhcmdzLnB1c2goXCItLWxpbmUtbnVtYmVyXCIpO1xuICAgICAgICBhcmdzLnB1c2goXCItLWhlYWRpbmdcIik7XG4gICAgICAgIGFyZ3MucHVzaChcIi0tY29sb3JcIiwgXCJuZXZlclwiKTtcblxuICAgICAgICBpZiAoIWNhc2VTZW5zaXRpdmUpIHtcbiAgICAgICAgICBhcmdzLnB1c2goXCItaVwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmaWxlVHlwZSkge1xuICAgICAgICAgIGFyZ3MucHVzaChcIi0tdHlwZVwiLCBmaWxlVHlwZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZ2xvYikge1xuICAgICAgICAgIGFyZ3MucHVzaChcIi0tZ2xvYlwiLCBnbG9iKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb250ZXh0TGluZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGFyZ3MucHVzaChcIi1DXCIsIFN0cmluZyhjb250ZXh0TGluZXMpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtYXhDb3VudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgYXJncy5wdXNoKFwiLS1tYXgtY291bnRcIiwgU3RyaW5nKG1heENvdW50KSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmlsZXNXaXRoTWF0Y2hlcykge1xuICAgICAgICAgIGFyZ3MucHVzaChcIi0tZmlsZXMtd2l0aC1tYXRjaGVzXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXJncy5wdXNoKFwiLS1cIiwgcGF0dGVybiwgc2VhcmNoUGF0aCk7XG5cbiAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IHNhbmRib3guZXhlYyh7IGNvbW1hbmQ6IFwicmdcIiwgYXJncyB9KTtcblxuICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgRXJyb3IgJiYgaXNSZ05vdEZvdW5kRXJyb3IocmVzdWx0KSkge1xuICAgICAgICAgIGxvZy53YXJuKFwicmcgbm90IGZvdW5kLCBpbnN0YWxsaW5nIHJpcGdyZXBcIik7XG4gICAgICAgICAgY29uc3QgaW5zdGFsbFJlc3VsdCA9IGF3YWl0IHNhbmRib3guZXhlYyh7XG4gICAgICAgICAgICBjb21tYW5kOiBcImJhc2hcIixcbiAgICAgICAgICAgIGFyZ3M6IFtcbiAgICAgICAgICAgICAgXCItY1wiLFxuICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCJjb21tYW5kIC12IHJnID4vZGV2L251bGwgMj4mMSAmJiBleGl0IDBcIixcbiAgICAgICAgICAgICAgICBcImRuZiBpbnN0YWxsIC15IHJpcGdyZXAgMj4vZGV2L251bGwgJiYgZXhpdCAwXCIsXG4gICAgICAgICAgICAgICAgXCIoYXB0LWdldCB1cGRhdGUgLXFxICYmIGFwdC1nZXQgaW5zdGFsbCAteSAtcXEgcmlwZ3JlcCkgMj4vZGV2L251bGwgJiYgZXhpdCAwXCIsXG4gICAgICAgICAgICAgICAgXCJhcGsgYWRkIC0tbm8tY2FjaGUgcmlwZ3JlcCAyPi9kZXYvbnVsbCAmJiBleGl0IDBcIixcbiAgICAgICAgICAgICAgICBcImN1cmwgLXNMIGh0dHBzOi8vZ2l0aHViLmNvbS9CdXJudFN1c2hpL3JpcGdyZXAvcmVsZWFzZXMvZG93bmxvYWQvMTQuMS4xL3JpcGdyZXAtMTQuMS4xLXg4Nl82NC11bmtub3duLWxpbnV4LW11c2wudGFyLmd6IHwgdGFyIHh6IC1DIC90bXAgJiYgaW5zdGFsbCAvdG1wL3JpcGdyZXAtMTQuMS4xLXg4Nl82NC11bmtub3duLWxpbnV4LW11c2wvcmcgL3Vzci9sb2NhbC9iaW4vcmcgJiYgcm0gLXJmIC90bXAvcmlwZ3JlcC0xNC4xLjEteDg2XzY0LXVua25vd24tbGludXgtbXVzbFwiLFxuICAgICAgICAgICAgICBdLmpvaW4oXCJcXG5cIiksXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgc3VkbzogdHJ1ZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAoIShpbnN0YWxsUmVzdWx0IGluc3RhbmNlb2YgRXJyb3IpKSB7XG4gICAgICAgICAgICBjb25zdCBpbnN0YWxsT3V0cHV0ID0gYXdhaXQgaW5zdGFsbFJlc3VsdC5yZXN1bHQ7XG4gICAgICAgICAgICBpZiAoaW5zdGFsbE91dHB1dC5leGl0Q29kZSAhPT0gMCkge1xuICAgICAgICAgICAgICBsb2cud2FybihcInJpcGdyZXAgaW5zdGFsbCBmYWlsZWRcIiwge1xuICAgICAgICAgICAgICAgIHN0ZGVycjogaW5zdGFsbE91dHB1dC5zdGRlcnIsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXN1bHQgPSBhd2FpdCBzYW5kYm94LmV4ZWMoeyBjb21tYW5kOiBcInJnXCIsIGFyZ3MgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgRXJyb3IgJiYgaXNSZ05vdEZvdW5kRXJyb3IocmVzdWx0KSkge1xuICAgICAgICAgIGxvZy53YXJuKFwicmcgdW5hdmFpbGFibGUsIGZhbGxpbmcgYmFjayB0byBncmVwXCIpO1xuICAgICAgICAgIGNvbnN0IGdyZXBBcmdzID0gW1wiLXJuXCIsIFwiLS1jb2xvcj1uZXZlclwiXTtcbiAgICAgICAgICBpZiAoIWNhc2VTZW5zaXRpdmUpIHtcbiAgICAgICAgICAgIGdyZXBBcmdzLnB1c2goXCItaVwiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGNvbnRleHRMaW5lcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBncmVwQXJncy5wdXNoKFwiLUNcIiwgU3RyaW5nKGNvbnRleHRMaW5lcykpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobWF4Q291bnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZ3JlcEFyZ3MucHVzaChcIi1tXCIsIFN0cmluZyhtYXhDb3VudCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZmlsZXNXaXRoTWF0Y2hlcykge1xuICAgICAgICAgICAgZ3JlcEFyZ3MucHVzaChcIi1sXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZ2xvYikge1xuICAgICAgICAgICAgZ3JlcEFyZ3MucHVzaChgLS1pbmNsdWRlPSR7Z2xvYn1gKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGZpbGVUeXBlKSB7XG4gICAgICAgICAgICBjb25zdCBpbmNsdWRlTWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4gPSB7XG4gICAgICAgICAgICAgIHRzOiBbXCIqLnRzXCIsIFwiKi50c3hcIiwgXCIqLm10c1wiLCBcIiouY3RzXCJdLFxuICAgICAgICAgICAgICBqczogW1wiKi5qc1wiLCBcIiouanN4XCIsIFwiKi5tanNcIiwgXCIqLmNqc1wiXSxcbiAgICAgICAgICAgICAgcHk6IFtcIioucHlcIl0sXG4gICAgICAgICAgICAgIHJ1c3Q6IFtcIioucnNcIl0sXG4gICAgICAgICAgICAgIGdvOiBbXCIqLmdvXCJdLFxuICAgICAgICAgICAgICBqYXZhOiBbXCIqLmphdmFcIl0sXG4gICAgICAgICAgICAgIG1kOiBbXCIqLm1kXCJdLFxuICAgICAgICAgICAgICBqc29uOiBbXCIqLmpzb25cIl0sXG4gICAgICAgICAgICAgIGNzczogW1wiKi5jc3NcIl0sXG4gICAgICAgICAgICAgIGh0bWw6IFtcIiouaHRtbFwiXSxcbiAgICAgICAgICAgICAgeWFtbDogW1wiKi55bWxcIiwgXCIqLnlhbWxcIl0sXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZm9yIChjb25zdCBleHQgb2YgaW5jbHVkZU1hcFtmaWxlVHlwZV0gPz8gW2AqLiR7ZmlsZVR5cGV9YF0pIHtcbiAgICAgICAgICAgICAgZ3JlcEFyZ3MucHVzaChgLS1pbmNsdWRlPSR7ZXh0fWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBncmVwQXJncy5wdXNoKFwiLS1cIiwgcGF0dGVybiwgc2VhcmNoUGF0aCk7XG4gICAgICAgICAgcmVzdWx0ID0gYXdhaXQgc2FuZGJveC5leGVjKHtcbiAgICAgICAgICAgIGNvbW1hbmQ6IFwiZ3JlcFwiLFxuICAgICAgICAgICAgYXJnczogZ3JlcEFyZ3MsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICBsb2cuZXJyb3IoXCJHcmVwIGZhaWxlZFwiLCB7IGVycm9yOiByZXN1bHQubWVzc2FnZSB9KTtcbiAgICAgICAgICB0aHJvdyByZXN1bHQ7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7IHN0ZG91dCwgc3RkZXJyIH0gPSBhd2FpdCByZXN1bHQucmVzdWx0O1xuXG4gICAgICAgIGlmIChzdGRlcnIgJiYgIXN0ZGVyci50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKFwibm8gbWF0Y2hlc1wiKSkge1xuICAgICAgICAgIGxvZy53YXJuKFwiR3JlcCBzdGRlcnJcIiwgeyBzdGRlcnIgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUcnVuY2F0ZSBvdXRwdXQgdG8gcHJldmVudCBcImlucHV0IHRvbyBsb25nXCIgZXJyb3JzICg1MGsgY2hhcnMgXHUyMjQ4IDEyLjVrIHRva2VucylcbiAgICAgICAgY29uc3QgTUFYX0dSRVBfT1VUUFVUX0NIQVJTID0gNTBfMDAwO1xuICAgICAgICBsZXQgZmluYWxPdXRwdXQgPSBzdGRvdXQ7XG4gICAgICAgIGxldCB3YXNUcnVuY2F0ZWQgPSBmYWxzZTtcbiAgICAgICAgaWYgKGZpbmFsT3V0cHV0Lmxlbmd0aCA+IE1BWF9HUkVQX09VVFBVVF9DSEFSUykge1xuICAgICAgICAgIGZpbmFsT3V0cHV0ID1cbiAgICAgICAgICAgIGZpbmFsT3V0cHV0LnNsaWNlKDAsIE1BWF9HUkVQX09VVFBVVF9DSEFSUykgK1xuICAgICAgICAgICAgXCJcXG5cXG5bT3V0cHV0IHRydW5jYXRlZCAtIHVzZSBtb3JlIHNwZWNpZmljIHBhdHRlcm4gb3IgcGF0aF1cIjtcbiAgICAgICAgICB3YXNUcnVuY2F0ZWQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbGluZXMgPSBmaW5hbE91dHB1dFxuICAgICAgICAgIC50cmltKClcbiAgICAgICAgICAuc3BsaXQoXCJcXG5cIilcbiAgICAgICAgICAuZmlsdGVyKChsKSA9PiBsLmxlbmd0aCA+IDApO1xuICAgICAgICBjb25zdCBmaWxlQ291bnQgPSBmaWxlc1dpdGhNYXRjaGVzXG4gICAgICAgICAgPyBsaW5lcy5sZW5ndGhcbiAgICAgICAgICA6IG5ldyBTZXQoXG4gICAgICAgICAgICAgIGxpbmVzXG4gICAgICAgICAgICAgICAgLmZpbHRlcigobCkgPT4gIWwuc3RhcnRzV2l0aChcIiBcIikgJiYgbC5pbmNsdWRlcyhcIjpcIikpXG4gICAgICAgICAgICAgICAgLm1hcCgobCkgPT4gbC5zcGxpdChcIjpcIilbMF0pXG4gICAgICAgICAgICApLnNpemU7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzdW1tYXJ5OiB7XG4gICAgICAgICAgICBtYXRjaENvdW50OiBmaWxlc1dpdGhNYXRjaGVzXG4gICAgICAgICAgICAgID8gMFxuICAgICAgICAgICAgICA6IGxpbmVzLmZpbHRlcigobCkgPT4gbC5pbmNsdWRlcyhcIjpcIikpLmxlbmd0aCxcbiAgICAgICAgICAgIGZpbGVDb3VudCxcbiAgICAgICAgICAgIHNlYXJjaFBhdGgsXG4gICAgICAgICAgICBwYXR0ZXJuLFxuICAgICAgICAgICAgd2FzVHJ1bmNhdGVkLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbWF0Y2hlczogZmluYWxPdXRwdXQgfHwgXCIobm8gbWF0Y2hlcyBmb3VuZClcIixcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgfSksXG4gICAgW2J1aWx0aW5Ub29sTmFtZXMuTGlzdF06IHRvb2woe1xuICAgICAgLi4uYnVpbHRJblRvb2xzLkxpc3QsXG4gICAgICBleGVjdXRlOiBhc3luYyAoeyBwYXRoLCBkZXB0aCwgaW5jbHVkZUhpZGRlbiwgZmlsZXNPbmx5LCBwYXR0ZXJuIH0pID0+IHtcbiAgICAgICAgY29uc3Qgc2VhcmNoUGF0aCA9IHBhdGggPz8gXCIuXCI7XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc2FuZGJveC5leGVjKHtcbiAgICAgICAgICBjb21tYW5kOiBcImJhc2hcIixcbiAgICAgICAgICBhcmdzOiBbXG4gICAgICAgICAgICBcIi1jXCIsXG4gICAgICAgICAgICBgXG4gICAgICAgICAgICBzZXQgLWVcbiAgICAgICAgICAgIFNFQVJDSF9QQVRIPVwiJDFcIlxuICAgICAgICAgICAgREVQVEg9XCIkMlwiXG4gICAgICAgICAgICBJTkNMVURFX0hJRERFTj1cIiQzXCJcbiAgICAgICAgICAgIEZJTEVTX09OTFk9XCIkNFwiXG4gICAgICAgICAgICBQQVRURVJOPVwiJDVcIlxuXG4gICAgICAgICAgICAjIEJ1aWxkIGZpbmQgY29tbWFuZCBhcmd1bWVudHNcbiAgICAgICAgICAgIEZJTkRfQVJHUz1cIlwiXG4gICAgICAgICAgICBbIC1uIFwiJERFUFRIXCIgXSAmJiBGSU5EX0FSR1M9XCIkRklORF9BUkdTIC1tYXhkZXB0aCAkREVQVEhcIlxuICAgICAgICAgICAgWyBcIiRJTkNMVURFX0hJRERFTlwiICE9IFwidHJ1ZVwiIF0gJiYgRklORF9BUkdTPVwiJEZJTkRfQVJHUyAhIC1wYXRoICcqLy4qJ1wiXG4gICAgICAgICAgICBbIFwiJEZJTEVTX09OTFlcIiA9IFwidHJ1ZVwiIF0gJiYgRklORF9BUkdTPVwiJEZJTkRfQVJHUyAtdHlwZSBmXCJcbiAgICAgICAgICAgIFsgLW4gXCIkUEFUVEVSTlwiIF0gJiYgRklORF9BUkdTPVwiJEZJTkRfQVJHUyAtbmFtZSAnJFBBVFRFUk4nXCJcblxuICAgICAgICAgICAgIyBHZXQgbGlzdGluZ1xuICAgICAgICAgICAgTElTVElORz0kKGV2YWwgXCJmaW5kICckU0VBUkNIX1BBVEgnICRGSU5EX0FSR1NcIiAyPi9kZXYvbnVsbCB8IHNvcnQpXG5cbiAgICAgICAgICAgICMgR2V0IGNvdW50c1xuICAgICAgICAgICAgQ09VTlRfQVJHUz1cIlwiXG4gICAgICAgICAgICBbIC1uIFwiJERFUFRIXCIgXSAmJiBDT1VOVF9BUkdTPVwiJENPVU5UX0FSR1MgLW1heGRlcHRoICRERVBUSFwiXG4gICAgICAgICAgICBbIFwiJElOQ0xVREVfSElEREVOXCIgIT0gXCJ0cnVlXCIgXSAmJiBDT1VOVF9BUkdTPVwiJENPVU5UX0FSR1MgISAtcGF0aCAnKi8uKidcIlxuXG4gICAgICAgICAgICBGSUxFX0NPVU5UPSQoZXZhbCBcImZpbmQgJyRTRUFSQ0hfUEFUSCcgJENPVU5UX0FSR1MgLXR5cGUgZlwiIDI+L2Rldi9udWxsIHwgd2MgLWwpXG4gICAgICAgICAgICBESVJfQ09VTlQ9JChldmFsIFwiZmluZCAnJFNFQVJDSF9QQVRIJyAkQ09VTlRfQVJHUyAtdHlwZSBkXCIgMj4vZGV2L251bGwgfCB3YyAtbClcblxuICAgICAgICAgICAgIyBPdXRwdXQ6IGNvdW50cyBmaXJzdCwgdGhlbiBsaXN0aW5nXG4gICAgICAgICAgICBlY2hvIFwiJEZJTEVfQ09VTlR8JERJUl9DT1VOVFwiXG4gICAgICAgICAgICBlY2hvIFwifHx8TElTVElOR3x8fFwiXG4gICAgICAgICAgICBlY2hvIFwiJExJU1RJTkdcIiB8IHNlZCBcInN8XiRTRUFSQ0hfUEFUSHwufFwiXG4gICAgICAgICAgYCxcbiAgICAgICAgICAgIFwiLS1cIixcbiAgICAgICAgICAgIHNlYXJjaFBhdGgsXG4gICAgICAgICAgICBkZXB0aD8udG9TdHJpbmcoKSB8fCBcIlwiLFxuICAgICAgICAgICAgaW5jbHVkZUhpZGRlbiA/IFwidHJ1ZVwiIDogXCJmYWxzZVwiLFxuICAgICAgICAgICAgZmlsZXNPbmx5ID8gXCJ0cnVlXCIgOiBcImZhbHNlXCIsXG4gICAgICAgICAgICBwYXR0ZXJuIHx8IFwiXCIsXG4gICAgICAgICAgXSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgbG9nLmVycm9yKFwiTGlzdCBmYWlsZWRcIiwgeyBlcnJvcjogcmVzdWx0Lm1lc3NhZ2UgfSk7XG4gICAgICAgICAgdGhyb3cgcmVzdWx0O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgeyBzdGRvdXQsIHN0ZGVyciB9ID0gYXdhaXQgcmVzdWx0LnJlc3VsdDtcblxuICAgICAgICBpZiAoc3RkZXJyKSB7XG4gICAgICAgICAgbG9nLndhcm4oXCJMaXN0IHN0ZGVyclwiLCB7IHN0ZGVyciB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IFtjb3VudHNMaW5lLCAuLi5yZXN0XSA9IHN0ZG91dC5zcGxpdChcInx8fExJU1RJTkd8fHxcIik7XG4gICAgICAgIGNvbnN0IGxpc3RpbmcgPSByZXN0LmpvaW4oXCJ8fHxMSVNUSU5HfHx8XCIpLnRyaW0oKTtcbiAgICAgICAgY29uc3QgW2ZpbGVDb3VudFN0ciwgZGlyQ291bnRTdHJdID0gY291bnRzTGluZS50cmltKCkuc3BsaXQoXCJ8XCIpO1xuXG4gICAgICAgIGNvbnN0IHRvdGFsRmlsZXMgPSBOdW1iZXIucGFyc2VJbnQoZmlsZUNvdW50U3RyLCAxMCkgfHwgMDtcbiAgICAgICAgY29uc3QgdG90YWxEaXJzID0gTnVtYmVyLnBhcnNlSW50KGRpckNvdW50U3RyLCAxMCkgfHwgMDtcbiAgICAgICAgY29uc3QgbGluZXMgPSBsaXN0aW5nLnNwbGl0KFwiXFxuXCIpLmZpbHRlcigobCkgPT4gbC5sZW5ndGggPiAwKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHN1bW1hcnk6IHtcbiAgICAgICAgICAgIHRvdGFsSXRlbXM6IGxpbmVzLmxlbmd0aCxcbiAgICAgICAgICAgIHRvdGFsRmlsZXMsXG4gICAgICAgICAgICB0b3RhbERpcnMsXG4gICAgICAgICAgICBzZWFyY2hQYXRoLFxuICAgICAgICAgICAgZGVwdGgsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBsaXN0aW5nLFxuICAgICAgICB9O1xuICAgICAgfSxcbiAgICB9KSxcbiAgICBbYnVpbHRpblRvb2xOYW1lcy5Xcml0ZV06IHRvb2woe1xuICAgICAgLi4uYnVpbHRJblRvb2xzLldyaXRlLFxuICAgICAgZXhlY3V0ZTogYXN5bmMgKHsgcGF0aCwgY29udGVudCB9KSA9PiB7XG4gICAgICAgIGNvbnN0IGZpbGVQYXRoID0gcGF0aDtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IHNhbmRib3gud3JpdGVGaWxlcyh7XG4gICAgICAgICAgICBmaWxlczogW3sgcGF0aDogZmlsZVBhdGgsIGNvbnRlbnQgfV0sXG4gICAgICAgICAgICBkZXN0UGF0aDogXCIuXCIsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgICAgICAgIHBhdGg6IGZpbGVQYXRoLFxuICAgICAgICAgICAgYnl0ZXNXcml0dGVuOiBCdWZmZXIuYnl0ZUxlbmd0aChjb250ZW50LCBcInV0ZjhcIiksXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgY29uc3QgZXJyb3JNc2cgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycik7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgcGF0aDogZmlsZVBhdGgsXG4gICAgICAgICAgICBieXRlc1dyaXR0ZW46IDAsXG4gICAgICAgICAgICBlcnJvcjogZXJyb3JNc2csXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9KSxcbiAgICBbYnVpbHRpblRvb2xOYW1lcy5FZGl0XTogdG9vbCh7XG4gICAgICAuLi5idWlsdEluVG9vbHMuRWRpdCxcbiAgICAgIGV4ZWN1dGU6IGFzeW5jICh7IHBhdGgsIG9sZF9zdHJpbmcsIG5ld19zdHJpbmcgfSkgPT4ge1xuICAgICAgICBjb25zdCBmaWxlUGF0aCA9IHBhdGg7XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc2FuZGJveC5yZWFkRmlsZSh7IHBhdGg6IGZpbGVQYXRoIH0pO1xuXG4gICAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgIHJldHVybiB7IHN1Y2Nlc3M6IGZhbHNlLCBwYXRoOiBmaWxlUGF0aCwgZXJyb3I6IHJlc3VsdC5tZXNzYWdlIH07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgcGF0aDogZmlsZVBhdGgsXG4gICAgICAgICAgICBlcnJvcjogYEZpbGUgbm90IGZvdW5kOiAke2ZpbGVQYXRofWAsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSByZXN1bHQudG9TdHJpbmcoXCJ1dGYtOFwiKTtcbiAgICAgICAgY29uc3Qgb2NjdXJyZW5jZXMgPSBjb250ZW50LnNwbGl0KG9sZF9zdHJpbmcpLmxlbmd0aCAtIDE7XG5cbiAgICAgICAgaWYgKG9jY3VycmVuY2VzID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgcGF0aDogZmlsZVBhdGgsXG4gICAgICAgICAgICBlcnJvcjogXCJvbGRfc3RyaW5nIG5vdCBmb3VuZCBpbiBmaWxlXCIsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvY2N1cnJlbmNlcyA+IDEpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICBwYXRoOiBmaWxlUGF0aCxcbiAgICAgICAgICAgIGVycm9yOiBgb2xkX3N0cmluZyBhcHBlYXJzICR7b2NjdXJyZW5jZXN9IHRpbWVzIGluIGZpbGUgKG11c3QgYmUgdW5pcXVlKS4gSW5jbHVkZSBtb3JlIHN1cnJvdW5kaW5nIGNvbnRleHQgdG8gbWFrZSB0aGUgbWF0Y2ggdW5pcXVlLmAsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5ld0NvbnRlbnQgPSBjb250ZW50LnJlcGxhY2Uob2xkX3N0cmluZywgbmV3X3N0cmluZyk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBzYW5kYm94LndyaXRlRmlsZXMoe1xuICAgICAgICAgICAgZmlsZXM6IFt7IHBhdGg6IGZpbGVQYXRoLCBjb250ZW50OiBuZXdDb250ZW50IH1dLFxuICAgICAgICAgICAgZGVzdFBhdGg6IFwiLlwiLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgcmV0dXJuIHsgc3VjY2VzczogdHJ1ZSwgcGF0aDogZmlsZVBhdGggfTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgY29uc3QgZXJyb3JNc2cgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycik7XG4gICAgICAgICAgcmV0dXJuIHsgc3VjY2VzczogZmFsc2UsIHBhdGg6IGZpbGVQYXRoLCBlcnJvcjogZXJyb3JNc2cgfTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9KSxcbiAgICBbYnVpbHRpblRvb2xOYW1lcy5CYXNoXTogdG9vbCh7XG4gICAgICAuLi5idWlsdEluVG9vbHMuQmFzaCxcbiAgICAgIGV4ZWN1dGU6IGFzeW5jICh7IGNvbW1hbmQsIHdhaXRVbnRpbCB9KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgY3JlYXRlUHJvY2Vzc01hbmFnZXIgfSA9IGF3YWl0IGltcG9ydChcbiAgICAgICAgICBcIi4uL3NhbmRib3gvcHJvY2Vzcy1tYW5hZ2VyXCJcbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCBwcm9jZXNzTWFuYWdlciA9IGNyZWF0ZVByb2Nlc3NNYW5hZ2VyKHsgc2FuZGJveCB9KTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwcm9jZXNzTWFuYWdlci5ydW4oeyBjb21tYW5kLCB3YWl0VW50aWwgfSk7XG5cbiAgICAgICAgY29uc3QgTUFYX1NURE9VVCA9IDUwXzAwMDtcbiAgICAgICAgY29uc3QgTUFYX1NUREVSUiA9IDEwXzAwMDtcblxuICAgICAgICBsZXQgeyBzdGRvdXQsIHN0ZGVyciB9ID0gcmVzdWx0O1xuICAgICAgICBpZiAoc3Rkb3V0Lmxlbmd0aCA+IE1BWF9TVERPVVQpIHtcbiAgICAgICAgICBzdGRvdXQgPVxuICAgICAgICAgICAgYFt0cnVuY2F0ZWQgXHUyMDE0IHNob3dpbmcgbGFzdCAke01BWF9TVERPVVR9IGNoYXJzLiBGdWxsOiAke3Jlc3VsdC5vdXRwdXREaXJ9L3N0ZG91dC50eHRdXFxuXFxuYCArXG4gICAgICAgICAgICBzdGRvdXQuc2xpY2UoLU1BWF9TVERPVVQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGRlcnIubGVuZ3RoID4gTUFYX1NUREVSUikge1xuICAgICAgICAgIHN0ZGVyciA9XG4gICAgICAgICAgICBgW3RydW5jYXRlZCBcdTIwMTQgc2hvd2luZyBsYXN0ICR7TUFYX1NUREVSUn0gY2hhcnMuIEZ1bGw6ICR7cmVzdWx0Lm91dHB1dERpcn0vc3RkZXJyLnR4dF1cXG5cXG5gICtcbiAgICAgICAgICAgIHN0ZGVyci5zbGljZSgtTUFYX1NUREVSUik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4geyAuLi5yZXN1bHQsIHN0ZG91dCwgc3RkZXJyIH07XG4gICAgICB9LFxuICAgIH0pLFxuICB9O1xuXG4gIC8vIEFkZCB1c2VyLWRlZmluZWQgdG9vbHNcbiAgZm9yIChjb25zdCBbbmFtZSwgdF0gb2YgT2JqZWN0LmVudHJpZXMoYWdlbnQub3B0aW9ucy50b29scyA/PyB7fSkpIHtcbiAgICByYXdUb29sc1tuYW1lXSA9IHQgYXMgVG9vbFNldFtzdHJpbmddO1xuICB9XG5cbiAgaWYgKHNraWxsc1JlZi5jdXJyZW50Lmxlbmd0aCA+IDApIHtcbiAgICByYXdUb29sc1tidWlsdGluVG9vbE5hbWVzLlNraWxsXSA9IHRvb2woe1xuICAgICAgLi4uYnVpbHRJblRvb2xzLlNraWxsLFxuICAgICAgZXhlY3V0ZTogYXN5bmMgKHsgbmFtZSB9KSA9PiB7XG4gICAgICAgIGNvbnN0IHNraWxscyA9IHNraWxsc1JlZi5jdXJyZW50O1xuICAgICAgICBjb25zdCBza2lsbCA9IHNraWxscy5maW5kKFxuICAgICAgICAgIChzKSA9PiBzLm5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbmFtZS50b0xvd2VyQ2FzZSgpXG4gICAgICAgICk7XG4gICAgICAgIGlmICghc2tpbGwpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgU2tpbGwgbm90IGZvdW5kOiBcIiR7bmFtZX1cIi4gQXZhaWxhYmxlOiAke3NraWxscy5tYXAoKHMpID0+IHMubmFtZSkuam9pbihcIiwgXCIpfWBcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNhbmRib3gucmVhZEZpbGUoe1xuICAgICAgICAgIHBhdGg6IHNraWxsLnNraWxsTWRQYXRoLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgdGhyb3cgcmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFNraWxsIGZpbGUgbm90IGZvdW5kOiAke3NraWxsLnNraWxsTWRQYXRofWApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJhdyA9XG4gICAgICAgICAgdHlwZW9mIHJlc3VsdCA9PT0gXCJzdHJpbmdcIiA/IHJlc3VsdCA6IHJlc3VsdC50b1N0cmluZyhcInV0Zi04XCIpO1xuICAgICAgICBjb25zdCBlbmRNYXJrZXIgPSByYXcuaW5kZXhPZihcIi0tLVwiLCAzKTtcbiAgICAgICAgY29uc3QgY29udGVudCA9XG4gICAgICAgICAgZW5kTWFya2VyID09PSAtMSA/IHJhdyA6IHJhdy5zbGljZShlbmRNYXJrZXIgKyAzKS50cmltKCk7XG4gICAgICAgIGNvbnN0IHNraWxsRGlyID0gc2tpbGwuc2tpbGxNZFBhdGgucmVwbGFjZShTS0lMTF9NRF9TVUZGSVgsIFwiXCIpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5hbWU6IHNraWxsLm5hbWUsXG4gICAgICAgICAgZGVzY3JpcHRpb246IHNraWxsLmRlc2NyaXB0aW9uLFxuICAgICAgICAgIGNvbnRlbnQsXG4gICAgICAgICAgcGF0aDogc2tpbGxEaXIsXG4gICAgICAgIH07XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgY29uc3Qgb25TdWJUb29sQ2FsbDogT25TdWJUb29sQ2FsbCA9IGFzeW5jICh0b29sTmFtZSwgdG9vbElucHV0LCBleGVjdXRlKSA9PiB7XG4gICAgY29uc3QgbmVlZHNBcHByb3ZhbCA9IGF3YWl0IGNoZWNrTmVlZHNBcHByb3ZhbCh7XG4gICAgICBhZ2VudCxcbiAgICAgIHRvb2xOYW1lLFxuICAgICAgaW5wdXQ6IHRvb2xJbnB1dCxcbiAgICAgIHRvb2xDYWxsSWQ6IGBqc18ke3Rvb2xOYW1lfV8ke0RhdGUubm93KCl9YCxcbiAgICAgIG1lc3NhZ2VzOiBbXSxcbiAgICB9KTtcblxuICAgIGlmICghbmVlZHNBcHByb3ZhbCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZXhlY3V0ZSgpO1xuICAgICAgICByZXR1cm4geyByZXN1bHQgfTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGVycm9yOiBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVyciksXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgYXBwcm92YWxJZCA9IGBqc19hcHByb3ZhbF8ke3VsaWQoKX1gO1xuICAgIGNvbnN0IHRvb2xDYWxsSWQgPSBganNfdGNfJHt1bGlkKCl9YDtcbiAgICBjb25zdCBwYXJ0SWQgPSBhcHByb3ZhbFBhcnRJZChhcHByb3ZhbElkKTtcblxuICAgIGF3YWl0IGFnZW50LnN0b3JhZ2UucGFydC5zZXQocGFydElkLCB7XG4gICAgICBpZDogcGFydElkLFxuICAgICAgaW5kZXg6IG5leHRQYXJ0SW5kZXhSZWYuY3VycmVudCsrLFxuICAgICAgbWVzc2FnZUlkOiBhc3Npc3RhbnRNZXNzYWdlSWQsXG4gICAgICBzZXNzaW9uSWQsXG4gICAgICBwYXJ0OiB7XG4gICAgICAgIHR5cGU6IGB0b29sLSR7dG9vbE5hbWV9YCxcbiAgICAgICAgdG9vbENhbGxJZCxcbiAgICAgICAgc3RhdGU6IFwiYXBwcm92YWwtcmVxdWVzdGVkXCIsXG4gICAgICAgIGlucHV0OiB0b29sSW5wdXQsXG4gICAgICAgIGFwcHJvdmFsOiB7IGlkOiBhcHByb3ZhbElkIH0sXG4gICAgICB9IGFzIHVua25vd24gYXMgVUlNZXNzYWdlW1wicGFydHNcIl1bbnVtYmVyXSxcbiAgICB9KTtcblxuICAgIHdyaXRlci53cml0ZSh7XG4gICAgICB0eXBlOiBcInRvb2wtaW5wdXQtc3RhcnRcIixcbiAgICAgIHRvb2xDYWxsSWQsXG4gICAgICB0b29sTmFtZSxcbiAgICB9KTtcbiAgICB3cml0ZXIud3JpdGUoe1xuICAgICAgdHlwZTogXCJ0b29sLWlucHV0LWF2YWlsYWJsZVwiLFxuICAgICAgdG9vbENhbGxJZCxcbiAgICAgIHRvb2xOYW1lLFxuICAgICAgaW5wdXQ6IHRvb2xJbnB1dCxcbiAgICB9KTtcbiAgICB3cml0ZXIud3JpdGUoe1xuICAgICAgdHlwZTogXCJ0b29sLWFwcHJvdmFsLXJlcXVlc3RcIixcbiAgICAgIGFwcHJvdmFsSWQsXG4gICAgICB0b29sQ2FsbElkLFxuICAgIH0pO1xuXG4gICAgY29uc3QgUE9MTF9NUyA9IDUwMDtcbiAgICBjb25zdCBUSU1FT1VUX01TID0gNSAqIDYwICogMTAwMDtcbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG5cbiAgICB3aGlsZSAoRGF0ZS5ub3coKSAtIHN0YXJ0IDwgVElNRU9VVF9NUyAmJiAhYWJvcnRDb250cm9sbGVyLnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICBjb25zdCB1cGRhdGVkID0gYXdhaXQgYWdlbnQuc3RvcmFnZS5wYXJ0LmdldChwYXJ0SWQpO1xuICAgICAgaWYgKFxuICAgICAgICB1cGRhdGVkICYmXG4gICAgICAgIFwic3RhdGVcIiBpbiB1cGRhdGVkLnBhcnQgJiZcbiAgICAgICAgKCh1cGRhdGVkLnBhcnQgYXMgeyBzdGF0ZTogc3RyaW5nIH0pLnN0YXRlID09PSBcImFwcHJvdmFsLXJlc3BvbmRlZFwiIHx8XG4gICAgICAgICAgKHVwZGF0ZWQucGFydCBhcyB7IHN0YXRlOiBzdHJpbmcgfSkuc3RhdGUgPT09IFwib3V0cHV0LWRlbmllZFwiKVxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IHN0YXRlID0gKHVwZGF0ZWQucGFydCBhcyB7IHN0YXRlOiBzdHJpbmcgfSkuc3RhdGU7XG5cbiAgICAgICAgaWYgKHN0YXRlID09PSBcIm91dHB1dC1kZW5pZWRcIikge1xuICAgICAgICAgIGNvbnN0IHJlYXNvbiA9ICh1cGRhdGVkLnBhcnQgYXMgeyBhcHByb3ZhbD86IHsgcmVhc29uPzogc3RyaW5nIH0gfSlcbiAgICAgICAgICAgIC5hcHByb3ZhbD8ucmVhc29uO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBlcnJvcjogYFRvb2wgXCIke3Rvb2xOYW1lfVwiIGRlbmllZDogJHtyZWFzb24gfHwgXCJ1c2VyIGRlbmllZFwifWAsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFwcHJvdmFsID0gKFxuICAgICAgICAgIHVwZGF0ZWQucGFydCBhcyB7XG4gICAgICAgICAgICBhcHByb3ZhbD86IHsgYXBwcm92ZWQ6IGJvb2xlYW47IHJlYXNvbj86IHN0cmluZyB9O1xuICAgICAgICAgIH1cbiAgICAgICAgKS5hcHByb3ZhbDtcbiAgICAgICAgaWYgKGFwcHJvdmFsPy5hcHByb3ZlZCkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBleGVjdXRlKCk7XG4gICAgICAgICAgICB3cml0ZXIud3JpdGUoe1xuICAgICAgICAgICAgICB0eXBlOiBcInRvb2wtb3V0cHV0LWF2YWlsYWJsZVwiLFxuICAgICAgICAgICAgICB0b29sQ2FsbElkLFxuICAgICAgICAgICAgICBvdXRwdXQ6IHJlc3VsdCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHsgcmVzdWx0IH07XG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBjb25zdCBlcnJvciA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKTtcbiAgICAgICAgICAgIHdyaXRlci53cml0ZSh7XG4gICAgICAgICAgICAgIHR5cGU6IFwidG9vbC1vdXRwdXQtZXJyb3JcIixcbiAgICAgICAgICAgICAgdG9vbENhbGxJZCxcbiAgICAgICAgICAgICAgZXJyb3JUZXh0OiBlcnJvcixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHsgZXJyb3IgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgd3JpdGVyLndyaXRlKHtcbiAgICAgICAgICB0eXBlOiBcInRvb2wtb3V0cHV0LWRlbmllZFwiLFxuICAgICAgICAgIHRvb2xDYWxsSWQsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGVycm9yOiBgVG9vbCBcIiR7dG9vbE5hbWV9XCIgZGVuaWVkOiAke2FwcHJvdmFsPy5yZWFzb24gfHwgXCJ1c2VyIGRlbmllZFwifWAsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocikgPT4gc2V0VGltZW91dChyLCBQT0xMX01TKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGVycm9yOiBhYm9ydENvbnRyb2xsZXIuc2lnbmFsLmFib3J0ZWRcbiAgICAgICAgPyBcImludGVycnVwdGVkXCJcbiAgICAgICAgOiBcIkFwcHJvdmFsIHRpbWVkIG91dFwiLFxuICAgIH07XG4gIH07XG5cbiAgY29uc3QgdG9vbENvbnRleHQ6IFRvb2xDb250ZXh0ID0ge1xuICAgIGNvbnRleHQsXG4gICAgc3RhdGUsXG4gICAgc2Vzc2lvbklkLFxuICAgIHNhbmRib3gsXG4gICAgbWVzc2FnZXM6IG1lc3NhZ2VzIGFzIFRvb2xDb250ZXh0W1wibWVzc2FnZXNcIl0sXG4gIH07XG5cbiAgcmF3VG9vbHNbYnVpbHRpblRvb2xOYW1lcy5KYXZhU2NyaXB0XSA9IGNyZWF0ZUphdmFTY3JpcHRUb29sKHtcbiAgICB0b29sczogcmF3VG9vbHMsXG4gICAgc2FuZGJveCxcbiAgICBhY3RpdmVUb29scyxcbiAgICBvblN1YlRvb2xDYWxsLFxuICAgIHRvb2xDb250ZXh0LFxuICB9KTtcblxuICBjb25zdCB0b29sc1dpdGhOZWVkc0FwcHJvdmFsID0gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgIE9iamVjdC5lbnRyaWVzKHJhd1Rvb2xzKS5tYXAoKFtuYW1lLCB0XSkgPT4ge1xuICAgICAgY29uc3Qgb3JpZ2luYWxFeGVjdXRlID0gdC5leGVjdXRlO1xuICAgICAgY29uc3Qgd3JhcHBlZEV4ZWN1dGUgPSBvcmlnaW5hbEV4ZWN1dGVcbiAgICAgICAgPyBhc3luYyAoLi4uYXJnczogUGFyYW1ldGVyczx0eXBlb2Ygb3JpZ2luYWxFeGVjdXRlPikgPT4ge1xuICAgICAgICAgICAgY29uc3QgZG9uZSA9IHN0ZXBMb2cudGltZShgdG9vbDoke25hbWV9YCk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBsZXQgdG9vbElucHV0ID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgaWYgKGFnZW50Lmhvb2tzW1widG9vbC5iZWZvcmVcIl0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBiZWZvcmVSZXN1bHQgPSBhd2FpdCBhZ2VudC5ob29rc1tcInRvb2wuYmVmb3JlXCJdKHtcbiAgICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgICAgICBpbnB1dDogdG9vbElucHV0LFxuICAgICAgICAgICAgICAgICAgY29udGV4dDogdG9vbENvbnRleHQsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKGJlZm9yZVJlc3VsdD8uaW5wdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgdG9vbElucHV0ID0gYmVmb3JlUmVzdWx0LmlucHV0O1xuICAgICAgICAgICAgICAgICAgYXJnc1swXSA9IHRvb2xJbnB1dCBhcyAodHlwZW9mIGFyZ3MpWzBdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCBvcmlnaW5hbEV4ZWN1dGUoLi4uYXJncyk7XG5cbiAgICAgICAgICAgICAgaWYgKGFnZW50Lmhvb2tzW1widG9vbC5hZnRlclwiXSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFmdGVyUmVzdWx0ID0gYXdhaXQgYWdlbnQuaG9va3NbXCJ0b29sLmFmdGVyXCJdKHtcbiAgICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgICAgICBpbnB1dDogdG9vbElucHV0LFxuICAgICAgICAgICAgICAgICAgcmVzdWx0LFxuICAgICAgICAgICAgICAgICAgY29udGV4dDogdG9vbENvbnRleHQsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKGFmdGVyUmVzdWx0Py5yZXN1bHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gYWZ0ZXJSZXN1bHQucmVzdWx0IGFzIHR5cGVvZiByZXN1bHQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICBkb25lKHtcbiAgICAgICAgICAgICAgICBlcnJvcjogZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgbmFtZSxcbiAgICAgICAge1xuICAgICAgICAgIC4uLnQsXG4gICAgICAgICAgLi4uKHdyYXBwZWRFeGVjdXRlID8geyBleGVjdXRlOiB3cmFwcGVkRXhlY3V0ZSB9IDoge30pLFxuICAgICAgICAgIG5lZWRzQXBwcm92YWw6IGFzeW5jIChcbiAgICAgICAgICAgIHRvb2xJbnB1dDogdW5rbm93bixcbiAgICAgICAgICAgIG9wdHM6IHsgdG9vbENhbGxJZDogc3RyaW5nOyBtZXNzYWdlczogdW5rbm93bltdIH1cbiAgICAgICAgICApID0+IHtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCBjaGVja05lZWRzQXBwcm92YWwoe1xuICAgICAgICAgICAgICBhZ2VudCxcbiAgICAgICAgICAgICAgdG9vbE5hbWU6IG5hbWUsXG4gICAgICAgICAgICAgIGlucHV0OiB0b29sSW5wdXQsXG4gICAgICAgICAgICAgIHRvb2xDYWxsSWQ6IG9wdHMudG9vbENhbGxJZCxcbiAgICAgICAgICAgICAgbWVzc2FnZXM6IG9wdHMubWVzc2FnZXMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgXTtcbiAgICB9KVxuICApO1xuXG4gIHJldHVybiB7IHJhd1Rvb2xzLCB0b29sc1dpdGhOZWVkc0FwcHJvdmFsLCB0b29sQ29udGV4dCB9O1xufVxuIiwgImltcG9ydCB7IHR5cGUgVG9vbFNldCwgdG9vbCB9IGZyb20gXCJhaVwiO1xuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcbmltcG9ydCB0eXBlIHsgU2FuZGJveEluc3RhbmNlIH0gZnJvbSBcIi4uL3NhbmRib3gvYWRhcHRlclwiO1xuaW1wb3J0IHsgYnVpbHRJblRvb2xzIH0gZnJvbSBcIi5cIjtcblxuZXhwb3J0IGNvbnN0IEpBVkFTQ1JJUFRfVE9PTF9OQU1FID0gXCJKYXZhU2NyaXB0XCI7XG5cbmV4cG9ydCB0eXBlIFN1YlRvb2xDYWxsUmVzdWx0ID0geyByZXN1bHQ/OiB1bmtub3duOyBlcnJvcj86IHN0cmluZyB9O1xuZXhwb3J0IHR5cGUgT25TdWJUb29sQ2FsbCA9IChcbiAgdG9vbE5hbWU6IHN0cmluZyxcbiAgaW5wdXQ6IHVua25vd24sXG4gIGV4ZWN1dGU6ICgpID0+IFByb21pc2U8dW5rbm93bj5cbikgPT4gUHJvbWlzZTxTdWJUb29sQ2FsbFJlc3VsdD47XG5cbmNvbnN0IFJFUVVFU1RfTUFSS0VSX1NUQVJUID0gXCJfX1RPT0xfUkVRVUVTVF9fXCI7XG5jb25zdCBSRVFVRVNUX01BUktFUl9FTkQgPSBcIl9fVE9PTF9SRVFVRVNUX0VORF9fXCI7XG5jb25zdCBFWEVDVVRJT05fVElNRU9VVF9NUyA9IDUgKiA2MCAqIDEwMDA7XG5cbi8qKlxuICogVGhlIHJ1bm5lciBzY3JpcHQgaXMgd3JpdHRlbiB0byB0aGUgc2FuZGJveCBhbmQgZXhlY3V0ZWQgdmlhIE5vZGUuanMuXG4gKiBJdCByZWFkcyB0aGUgbW9kZWwncyBjb2RlIGZyb20gY29kZS5qcywgc2V0cyB1cCBjdHgudG9vbHMgYXMgUlBDIHByb3hpZXNcbiAqIChyZXF1ZXN0cyBzZW50IHZpYSBzdGRlcnIgbWFya2VycywgcmVzcG9uc2VzIHBvbGxlZCBmcm9tIGZpbGVzKSwgZXhlY3V0ZXNcbiAqIHRoZSBjb2RlLCBhbmQgd3JpdGVzIHRoZSByZXN1bHQgdG8gc3Rkb3V0IGFzIEpTT04uXG4gKi9cbmNvbnN0IFJVTk5FUl9TQ1JJUFQgPSBgXG5pbXBvcnQgeyByZWFkRmlsZVN5bmMsIGV4aXN0c1N5bmMsIHVubGlua1N5bmMsIG1rZGlyU3luYyB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgam9pbiwgZGlybmFtZSB9IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgeyBmaWxlVVJMVG9QYXRoIH0gZnJvbSAnbm9kZTp1cmwnO1xuXG5jb25zdCBTQ1JJUFRfRElSID0gZGlybmFtZShmaWxlVVJMVG9QYXRoKGltcG9ydC5tZXRhLnVybCkpO1xuY29uc3QgVE9PTF9DQUxMX1RJTUVPVVRfTVMgPSAzMDBfMDAwO1xuXG5sZXQgcmVxQ291bnRlciA9IDA7XG5cbmFzeW5jIGZ1bmN0aW9uIGNhbGxUb29sKG5hbWUsIGlucHV0KSB7XG4gIGNvbnN0IGlkID0gJ3JlcV8nICsgKCsrcmVxQ291bnRlcikgKyAnXycgKyBEYXRlLm5vdygpO1xuICBjb25zdCByZXNwb25zZUZpbGUgPSBqb2luKFNDUklQVF9ESVIsIGlkICsgJy5yZXNwb25zZS5qc29uJyk7XG5cbiAgY29uc3QgcmVxdWVzdCA9IEpTT04uc3RyaW5naWZ5KHsgaWQsIHRvb2w6IG5hbWUsIGlucHV0IH0pO1xuICBwcm9jZXNzLnN0ZGVyci53cml0ZSgnJHtSRVFVRVNUX01BUktFUl9TVEFSVH0nICsgcmVxdWVzdCArICcke1JFUVVFU1RfTUFSS0VSX0VORH0nICsgJ1xcXFxuJyk7XG5cbiAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICB3aGlsZSAoIWV4aXN0c1N5bmMocmVzcG9uc2VGaWxlKSkge1xuICAgIGlmIChEYXRlLm5vdygpIC0gc3RhcnQgPiBUT09MX0NBTExfVElNRU9VVF9NUykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUb29sIGNhbGwgJyArIG5hbWUgKyAnIHRpbWVkIG91dCB3YWl0aW5nIGZvciByZXNwb25zZScpO1xuICAgIH1cbiAgICBhd2FpdCBuZXcgUHJvbWlzZShyID0+IHNldFRpbWVvdXQociwgMzApKTtcbiAgfVxuXG4gIGxldCByYXc7XG4gIHRyeSB7XG4gICAgcmF3ID0gcmVhZEZpbGVTeW5jKHJlc3BvbnNlRmlsZSwgJ3V0ZjgnKTtcbiAgfSBjYXRjaCB7XG4gICAgYXdhaXQgbmV3IFByb21pc2UociA9PiBzZXRUaW1lb3V0KHIsIDUwKSk7XG4gICAgcmF3ID0gcmVhZEZpbGVTeW5jKHJlc3BvbnNlRmlsZSwgJ3V0ZjgnKTtcbiAgfVxuXG4gIGNvbnN0IHJlc3BvbnNlID0gSlNPTi5wYXJzZShyYXcpO1xuICB0cnkgeyB1bmxpbmtTeW5jKHJlc3BvbnNlRmlsZSk7IH0gY2F0Y2gge31cblxuICBpZiAocmVzcG9uc2UuZXJyb3IpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IocmVzcG9uc2UuZXJyb3IpO1xuICB9XG4gIHJldHVybiByZXNwb25zZS5yZXN1bHQ7XG59XG5cbmNvbnN0IGNvZGUgPSByZWFkRmlsZVN5bmMoam9pbihTQ1JJUFRfRElSLCAnY29kZS5qcycpLCAndXRmOCcpO1xuY29uc3QgdG9vbE5hbWVzID0gSlNPTi5wYXJzZShyZWFkRmlsZVN5bmMoam9pbihTQ1JJUFRfRElSLCAndG9vbHMuanNvbicpLCAndXRmOCcpKTtcblxuY29uc3QgY3R4ID0geyB0b29sczoge30gfTtcbmZvciAoY29uc3QgbmFtZSBvZiB0b29sTmFtZXMpIHtcbiAgY3R4LnRvb2xzW25hbWVdID0gKGlucHV0KSA9PiBjYWxsVG9vbChuYW1lLCBpbnB1dCk7XG59XG5cbmNvbnN0IGxvZ3MgPSBbXTtcbmNvbnN0IGN1c3RvbUNvbnNvbGUgPSB7XG4gIGxvZzogKC4uLmFyZ3MpID0+IGxvZ3MucHVzaChhcmdzLm1hcChhID0+IHR5cGVvZiBhID09PSAnc3RyaW5nJyA/IGEgOiBKU09OLnN0cmluZ2lmeShhKSkuam9pbignICcpKSxcbiAgZXJyb3I6ICguLi5hcmdzKSA9PiBsb2dzLnB1c2goJ1tlcnJvcl0gJyArIGFyZ3MubWFwKGEgPT4gdHlwZW9mIGEgPT09ICdzdHJpbmcnID8gYSA6IEpTT04uc3RyaW5naWZ5KGEpKS5qb2luKCcgJykpLFxuICB3YXJuOiAoLi4uYXJncykgPT4gbG9ncy5wdXNoKCdbd2Fybl0gJyArIGFyZ3MubWFwKGEgPT4gdHlwZW9mIGEgPT09ICdzdHJpbmcnID8gYSA6IEpTT04uc3RyaW5naWZ5KGEpKS5qb2luKCcgJykpLFxufTtcblxudHJ5IHtcbiAgY29uc3QgQXN5bmNGdW5jdGlvbiA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihhc3luYyBmdW5jdGlvbigpIHt9KS5jb25zdHJ1Y3RvcjtcbiAgY29uc3QgZm4gPSBuZXcgQXN5bmNGdW5jdGlvbignY3R4JywgJ2NvbnNvbGUnLCBjb2RlKTtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZm4oY3R4LCBjdXN0b21Db25zb2xlKTtcblxuICBjb25zdCBvdXRwdXQgPSB7IHN1Y2Nlc3M6IHRydWUsIHJlc3VsdDogcmVzdWx0ICE9PSB1bmRlZmluZWQgPyByZXN1bHQgOiBudWxsIH07XG4gIGlmIChsb2dzLmxlbmd0aCA+IDApIG91dHB1dC5sb2dzID0gbG9ncztcbiAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoSlNPTi5zdHJpbmdpZnkob3V0cHV0KSk7XG59IGNhdGNoIChlcnIpIHtcbiAgY29uc3Qgb3V0cHV0ID0ge1xuICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgIGVycm9yOiBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVyciksXG4gIH07XG4gIGlmIChsb2dzLmxlbmd0aCA+IDApIG91dHB1dC5sb2dzID0gbG9ncztcbiAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoSlNPTi5zdHJpbmdpZnkob3V0cHV0KSk7XG59XG5gO1xuXG4vKipcbiAqIEV4dHJhY3RzIGEgcGxhaW4gSlNPTiBTY2hlbWEgZnJvbSB3aGF0ZXZlciBmb3JtYXQgdGhlIEFJIFNESyB0b29sIHVzZXNcbiAqIChab2Qgc2NoZW1hLCBBSSBTREsgd3JhcHBlZCBzY2hlbWEsIG9yIHJhdyBKU09OIFNjaGVtYSkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0SnNvblNjaGVtYShcbiAgc2NoZW1hOiB1bmtub3duXG4pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IG51bGwge1xuICBpZiAoIXNjaGVtYSB8fCB0eXBlb2Ygc2NoZW1hICE9PSBcIm9iamVjdFwiKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAoXG4gICAgXCJfZGVmXCIgaW4gc2NoZW1hICYmXG4gICAgdHlwZW9mIChzY2hlbWEgYXMgeyBfZGVmOiB1bmtub3duIH0pLl9kZWYgPT09IFwib2JqZWN0XCJcbiAgKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB6LnRvSlNPTlNjaGVtYShzY2hlbWEgYXMgei5ab2RUeXBlKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHMgPSBzY2hlbWEgYXMgUmVjb3JkPHN0cmluZyB8IHN5bWJvbCwgdW5rbm93bj47XG4gIGlmIChTeW1ib2wuZm9yKFwidmVyY2VsLmFpLnNjaGVtYVwiKSBpbiBzICYmIFwianNvblNjaGVtYVwiIGluIHMpIHtcbiAgICByZXR1cm4gcy5qc29uU2NoZW1hIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICB9XG5cbiAgaWYgKFwidHlwZVwiIGluIHMgfHwgXCJwcm9wZXJ0aWVzXCIgaW4gcykge1xuICAgIHJldHVybiBzIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBqc29uU2NoZW1hVG9UcyhcbiAgc2NoZW1hOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgaW5kZW50ID0gMFxuKTogc3RyaW5nIHtcbiAgaWYgKCFzY2hlbWEpIHtcbiAgICByZXR1cm4gXCJ1bmtub3duXCI7XG4gIH1cblxuICBpZiAoc2NoZW1hLmVudW0gJiYgQXJyYXkuaXNBcnJheShzY2hlbWEuZW51bSkpIHtcbiAgICByZXR1cm4gc2NoZW1hLmVudW0ubWFwKCh2KSA9PiBKU09OLnN0cmluZ2lmeSh2KSkuam9pbihcIiB8IFwiKTtcbiAgfVxuXG4gIGlmIChzY2hlbWEuYW55T2YgJiYgQXJyYXkuaXNBcnJheShzY2hlbWEuYW55T2YpKSB7XG4gICAgcmV0dXJuIHNjaGVtYS5hbnlPZlxuICAgICAgLm1hcCgoczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+IGpzb25TY2hlbWFUb1RzKHMsIGluZGVudCkpXG4gICAgICAuam9pbihcIiB8IFwiKTtcbiAgfVxuICBpZiAoc2NoZW1hLm9uZU9mICYmIEFycmF5LmlzQXJyYXkoc2NoZW1hLm9uZU9mKSkge1xuICAgIHJldHVybiBzY2hlbWEub25lT2ZcbiAgICAgIC5tYXAoKHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiBqc29uU2NoZW1hVG9UcyhzLCBpbmRlbnQpKVxuICAgICAgLmpvaW4oXCIgfCBcIik7XG4gIH1cblxuICBjb25zdCB0eXBlID0gc2NoZW1hLnR5cGUgYXMgc3RyaW5nO1xuXG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgIHJldHVybiBcInN0cmluZ1wiO1xuICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICBjYXNlIFwiaW50ZWdlclwiOlxuICAgICAgcmV0dXJuIFwibnVtYmVyXCI7XG4gICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICAgIHJldHVybiBcImJvb2xlYW5cIjtcbiAgICBjYXNlIFwibnVsbFwiOlxuICAgICAgcmV0dXJuIFwibnVsbFwiO1xuICAgIGNhc2UgXCJhcnJheVwiOiB7XG4gICAgICBjb25zdCBpdGVtcyA9IHNjaGVtYS5pdGVtc1xuICAgICAgICA/IGpzb25TY2hlbWFUb1RzKHNjaGVtYS5pdGVtcyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgaW5kZW50KVxuICAgICAgICA6IFwidW5rbm93blwiO1xuICAgICAgcmV0dXJuIGBBcnJheTwke2l0ZW1zfT5gO1xuICAgIH1cbiAgICBjYXNlIFwib2JqZWN0XCI6IHtcbiAgICAgIGNvbnN0IHByb3BlcnRpZXMgPSBzY2hlbWEucHJvcGVydGllcyBhc1xuICAgICAgICB8IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHVua25vd24+PlxuICAgICAgICB8IHVuZGVmaW5lZDtcbiAgICAgIGlmICghcHJvcGVydGllcykge1xuICAgICAgICByZXR1cm4gXCJSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlwiO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVxdWlyZWQgPSBuZXcgU2V0KChzY2hlbWEucmVxdWlyZWQgYXMgc3RyaW5nW10pIHx8IFtdKTtcbiAgICAgIGNvbnN0IHBhZCA9IFwiICBcIi5yZXBlYXQoaW5kZW50ICsgMSk7XG4gICAgICBjb25zdCBjbG9zZVBhZCA9IFwiICBcIi5yZXBlYXQoaW5kZW50KTtcbiAgICAgIGNvbnN0IHByb3BzID0gT2JqZWN0LmVudHJpZXMocHJvcGVydGllcykubWFwKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgY29uc3Qgb3B0ID0gcmVxdWlyZWQuaGFzKGtleSkgPyBcIlwiIDogXCI/XCI7XG4gICAgICAgIHJldHVybiBgJHtwYWR9JHtrZXl9JHtvcHR9OiAke2pzb25TY2hlbWFUb1RzKHZhbHVlLCBpbmRlbnQgKyAxKX1gO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gYHtcXG4ke3Byb3BzLmpvaW4oXCI7XFxuXCIpfTtcXG4ke2Nsb3NlUGFkfX1gO1xuICAgIH1cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIFwidW5rbm93blwiO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZUNvbnRleHRUeXBlU3RyaW5nKHRvb2xzOiBUb29sU2V0KTogc3RyaW5nIHtcbiAgY29uc3Qgc2lnczogc3RyaW5nW10gPSBbXTtcblxuICBmb3IgKGNvbnN0IFtuYW1lLCB0XSBvZiBPYmplY3QuZW50cmllcyh0b29scykpIHtcbiAgICBjb25zdCByYXcgPSB0IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGNvbnN0IGlucHV0U2NoZW1hID0gZXh0cmFjdEpzb25TY2hlbWEocmF3LmlucHV0U2NoZW1hID8/IHJhdy5wYXJhbWV0ZXJzKTtcbiAgICBjb25zdCBvdXRwdXRTY2hlbWEgPSBleHRyYWN0SnNvblNjaGVtYShyYXcub3V0cHV0U2NoZW1hKTtcblxuICAgIGNvbnN0IGlucHV0VHlwZSA9IGlucHV0U2NoZW1hID8ganNvblNjaGVtYVRvVHMoaW5wdXRTY2hlbWEsIDIpIDogXCJ7fVwiO1xuICAgIGNvbnN0IG91dHB1dFR5cGUgPSBvdXRwdXRTY2hlbWFcbiAgICAgID8ganNvblNjaGVtYVRvVHMob3V0cHV0U2NoZW1hLCAyKVxuICAgICAgOiBcInVua25vd25cIjtcblxuICAgIHNpZ3MucHVzaChgICAgICR7bmFtZX0oaW5wdXQ6ICR7aW5wdXRUeXBlfSk6IFByb21pc2U8JHtvdXRwdXRUeXBlfT5gKTtcbiAgfVxuXG4gIHJldHVybiBgdHlwZSBDb250ZXh0ID0ge1xcbiAgdG9vbHM6IHtcXG4ke3NpZ3Muam9pbihcIjtcXG5cIil9O1xcbiAgfVxcbn1gO1xufVxuXG5hc3luYyBmdW5jdGlvbiBleGVjdXRlSW5TYW5kYm94KHtcbiAgY29kZSxcbiAgcnBjRGlyLFxuICBhYm9ydENvbnRyb2xsZXIsXG4gIHNhbmRib3gsXG4gIGF2YWlsYWJsZVRvb2xzLFxuICBvblN1YlRvb2xDYWxsLFxuICB0b29sQ29udGV4dCxcbn06IHtcbiAgY29kZTogc3RyaW5nO1xuICBycGNEaXI6IHN0cmluZztcbiAgYWJvcnRDb250cm9sbGVyOiBBYm9ydENvbnRyb2xsZXI7XG4gIHNhbmRib3g6IFNhbmRib3hJbnN0YW5jZTtcbiAgYXZhaWxhYmxlVG9vbHM6IFRvb2xTZXQ7XG4gIG9uU3ViVG9vbENhbGw/OiBPblN1YlRvb2xDYWxsO1xuICB0b29sQ29udGV4dD86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufSk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+IHtcbiAgY29uc3QgbWtkaXJSZXN1bHQgPSBhd2FpdCBzYW5kYm94LmV4ZWMoe1xuICAgIGNvbW1hbmQ6IFwibWtkaXJcIixcbiAgICBhcmdzOiBbXCItcFwiLCBycGNEaXJdLFxuICB9KTtcbiAgaWYgKG1rZGlyUmVzdWx0IGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICByZXR1cm4geyBzdWNjZXNzOiBmYWxzZSwgZXJyb3I6IG1rZGlyUmVzdWx0Lm1lc3NhZ2UgfTtcbiAgfVxuICBhd2FpdCBta2RpclJlc3VsdC5yZXN1bHQ7XG5cbiAgYXdhaXQgc2FuZGJveC53cml0ZUZpbGVzKHtcbiAgICBmaWxlczogW1xuICAgICAgeyBwYXRoOiBcInJ1bm5lci5tanNcIiwgY29udGVudDogUlVOTkVSX1NDUklQVCB9LFxuICAgICAgeyBwYXRoOiBcImNvZGUuanNcIiwgY29udGVudDogY29kZSB9LFxuICAgICAge1xuICAgICAgICBwYXRoOiBcInRvb2xzLmpzb25cIixcbiAgICAgICAgY29udGVudDogSlNPTi5zdHJpbmdpZnkoT2JqZWN0LmtleXMoYXZhaWxhYmxlVG9vbHMpKSxcbiAgICAgIH0sXG4gICAgXSxcbiAgICBkZXN0UGF0aDogcnBjRGlyLFxuICB9KTtcblxuICBjb25zdCBub2RlTWFqb3IgPSBOdW1iZXIucGFyc2VJbnQocHJvY2Vzcy52ZXJzaW9ucy5ub2RlLnNwbGl0KFwiLlwiKVswXSwgMTApO1xuICBjb25zdCBwZXJtaXNzaW9uRmxhZyA9XG4gICAgbm9kZU1ham9yID49IDIyID8gXCItLXBlcm1pc3Npb25cIiA6IFwiLS1leHBlcmltZW50YWwtcGVybWlzc2lvblwiO1xuXG4gIGNvbnN0IGV4ZWNSZXN1bHQgPSBhd2FpdCBzYW5kYm94LmV4ZWMoe1xuICAgIGNvbW1hbmQ6IFwibm9kZVwiLFxuICAgIGFyZ3M6IFtcbiAgICAgIHBlcm1pc3Npb25GbGFnLFxuICAgICAgYC0tYWxsb3ctZnMtcmVhZD0ke3JwY0Rpcn1gLFxuICAgICAgYC0tYWxsb3ctZnMtd3JpdGU9JHtycGNEaXJ9YCxcbiAgICAgIGAke3JwY0Rpcn0vcnVubmVyLm1qc2AsXG4gICAgXSxcbiAgICBzaWduYWw6IGFib3J0Q29udHJvbGxlci5zaWduYWwsXG4gIH0pO1xuXG4gIGlmIChleGVjUmVzdWx0IGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICByZXR1cm4geyBzdWNjZXNzOiBmYWxzZSwgZXJyb3I6IGV4ZWNSZXN1bHQubWVzc2FnZSB9O1xuICB9XG5cbiAgY29uc3QgZmF0YWw6IHsgZXJyb3I6IEVycm9yIHwgbnVsbCB9ID0geyBlcnJvcjogbnVsbCB9O1xuXG4gIGNvbnN0IGFib3J0ID0gKGVycm9yOiBFcnJvcikgPT4ge1xuICAgIGlmICghZmF0YWwuZXJyb3IpIHtcbiAgICAgIGZhdGFsLmVycm9yID0gZXJyb3I7XG4gICAgICBhYm9ydENvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlVG9vbFJlcXVlc3QgPSBhc3luYyAocmVxdWVzdEpzb246IHN0cmluZykgPT4ge1xuICAgIGxldCBwYXJzZWQ6IHsgaWQ6IHN0cmluZzsgdG9vbDogc3RyaW5nOyBpbnB1dDogdW5rbm93biB9O1xuICAgIHRyeSB7XG4gICAgICBwYXJzZWQgPSBKU09OLnBhcnNlKHJlcXVlc3RKc29uKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB7IGlkLCB0b29sOiB0b29sTmFtZSwgaW5wdXQgfSA9IHBhcnNlZDtcblxuICAgIGxldCByZXNwb25zZTogeyByZXN1bHQ/OiB1bmtub3duOyBlcnJvcj86IHN0cmluZyB9O1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB0ID0gYXZhaWxhYmxlVG9vbHNbdG9vbE5hbWVdO1xuICAgICAgaWYgKCF0Py5leGVjdXRlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgVG9vbCAke3Rvb2xOYW1lfSBub3QgZm91bmQgb3IgaGFzIG5vIGV4ZWN1dGUgZnVuY3Rpb25gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBjb25zdCBleGVjID0gdC5leGVjdXRlLmJpbmQodCk7XG4gICAgICBjb25zdCBleGVjT3B0aW9ucyA9IHtcbiAgICAgICAgdG9vbENhbGxJZDogYGpzXyR7dG9vbE5hbWV9XyR7RGF0ZS5ub3coKX1gLFxuICAgICAgICBtZXNzYWdlczogW10sXG4gICAgICAgIGV4cGVyaW1lbnRhbF9jb250ZXh0OiB0b29sQ29udGV4dCxcbiAgICAgIH07XG4gICAgICBpZiAob25TdWJUb29sQ2FsbCkge1xuICAgICAgICByZXNwb25zZSA9IGF3YWl0IG9uU3ViVG9vbENhbGwodG9vbE5hbWUsIGlucHV0LCAoKSA9PlxuICAgICAgICAgIGV4ZWMoaW5wdXQsIGV4ZWNPcHRpb25zKVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZXhlYyhpbnB1dCwgZXhlY09wdGlvbnMpO1xuICAgICAgICByZXNwb25zZSA9IHsgcmVzdWx0IH07XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zdCBtc2cgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycik7XG4gICAgICByZXNwb25zZSA9IHsgZXJyb3I6IG1zZyB9O1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBzYW5kYm94LndyaXRlRmlsZXMoe1xuICAgICAgICBmaWxlczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHBhdGg6IGAke2lkfS5yZXNwb25zZS5qc29uYCxcbiAgICAgICAgICAgIGNvbnRlbnQ6IEpTT04uc3RyaW5naWZ5KHJlc3BvbnNlKSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBkZXN0UGF0aDogcnBjRGlyLFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAvKipcbiAgICAgICAqIElmIHdyaXRpbmcgdGhlIHJlc3BvbnNlIGZpbGUgZmFpbHMsIHRoZSBydW5uZXIgd2lsbCBwb2xsIGZvcmV2ZXJcbiAgICAgICAqIHdhaXRpbmcgZm9yIGl0LiBBYm9ydCB0aGUgcnVubmVyIHByb2Nlc3Mgc28gd2UgZG9uJ3QgZGVhZGxvY2suXG4gICAgICAgKi9cbiAgICAgIGNvbnN0IG1zZyA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKTtcbiAgICAgIGFib3J0KG5ldyBFcnJvcihgRmFpbGVkIHRvIHdyaXRlIFJQQyByZXNwb25zZSBmb3IgJHt0b29sTmFtZX06ICR7bXNnfWApKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgdG9vbENhbGxQcm9taXNlczogUHJvbWlzZTx2b2lkPltdID0gW107XG4gIGxldCBzdGRlcnJCdWZmZXIgPSBcIlwiO1xuICBsZXQgbm9uTWFya2VyU3RkZXJyID0gXCJcIjtcblxuICBjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgYWJvcnQoXG4gICAgICBuZXcgRXJyb3IoXG4gICAgICAgIGBKYXZhU2NyaXB0IGV4ZWN1dGlvbiB0aW1lZCBvdXQgYWZ0ZXIgJHtFWEVDVVRJT05fVElNRU9VVF9NUyAvIDEwMDB9c2BcbiAgICAgIClcbiAgICApO1xuICB9LCBFWEVDVVRJT05fVElNRU9VVF9NUyk7XG5cbiAgdHJ5IHtcbiAgICBmb3IgYXdhaXQgKGNvbnN0IGVudHJ5IG9mIGV4ZWNSZXN1bHQubG9ncygpKSB7XG4gICAgICBpZiAoZmF0YWwuZXJyb3IpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmIChlbnRyeS5zdHJlYW0gPT09IFwic3RkZXJyXCIpIHtcbiAgICAgICAgc3RkZXJyQnVmZmVyICs9IGVudHJ5LmRhdGE7XG5cbiAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICBjb25zdCBzdGFydElkeCA9IHN0ZGVyckJ1ZmZlci5pbmRleE9mKFJFUVVFU1RfTUFSS0VSX1NUQVJUKTtcbiAgICAgICAgICBpZiAoc3RhcnRJZHggPT09IC0xKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBiZWZvcmVNYXJrZXIgPSBzdGRlcnJCdWZmZXIuc2xpY2UoMCwgc3RhcnRJZHgpO1xuICAgICAgICAgIGlmIChiZWZvcmVNYXJrZXIudHJpbSgpKSB7XG4gICAgICAgICAgICBub25NYXJrZXJTdGRlcnIgKz0gYmVmb3JlTWFya2VyO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGNvbnRlbnRTdGFydCA9IHN0YXJ0SWR4ICsgUkVRVUVTVF9NQVJLRVJfU1RBUlQubGVuZ3RoO1xuICAgICAgICAgIGNvbnN0IGVuZElkeCA9IHN0ZGVyckJ1ZmZlci5pbmRleE9mKFJFUVVFU1RfTUFSS0VSX0VORCwgY29udGVudFN0YXJ0KTtcbiAgICAgICAgICBpZiAoZW5kSWR4ID09PSAtMSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgcmVxdWVzdEpzb24gPSBzdGRlcnJCdWZmZXIuc2xpY2UoY29udGVudFN0YXJ0LCBlbmRJZHgpO1xuICAgICAgICAgIHN0ZGVyckJ1ZmZlciA9IHN0ZGVyckJ1ZmZlci5zbGljZShlbmRJZHggKyBSRVFVRVNUX01BUktFUl9FTkQubGVuZ3RoKTtcblxuICAgICAgICAgIHRvb2xDYWxsUHJvbWlzZXMucHVzaChoYW5kbGVUb29sUmVxdWVzdChyZXF1ZXN0SnNvbikpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgfVxuXG4gIGlmIChzdGRlcnJCdWZmZXIudHJpbSgpKSB7XG4gICAgbm9uTWFya2VyU3RkZXJyICs9IHN0ZGVyckJ1ZmZlcjtcbiAgfVxuXG4gIGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZCh0b29sQ2FsbFByb21pc2VzKTtcblxuICBpZiAoZmF0YWwuZXJyb3IpIHtcbiAgICBleGVjUmVzdWx0LnJlc3VsdC5jYXRjaCgoKSA9PiB1bmRlZmluZWQpO1xuICAgIHJldHVybiB7XG4gICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgIGVycm9yOiBmYXRhbC5lcnJvci5tZXNzYWdlLFxuICAgICAgLi4uKG5vbk1hcmtlclN0ZGVyciA/IHsgc3RkZXJyOiBub25NYXJrZXJTdGRlcnIuc2xpY2UoMCwgMjAwMCkgfSA6IHt9KSxcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgeyBzdGRvdXQsIHN0ZGVyciwgZXhpdENvZGUgfSA9IGF3YWl0IGV4ZWNSZXN1bHQucmVzdWx0O1xuXG4gIHRyeSB7XG4gICAgcmV0dXJuIEpTT04ucGFyc2Uoc3Rkb3V0KTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgZXJyb3I6IGBSdW5uZXIgZmFpbGVkIChleGl0ICR7ZXhpdENvZGV9KS5gLFxuICAgICAgc3RkZXJyOiAobm9uTWFya2VyU3RkZXJyICsgc3RkZXJyKS5zbGljZSgwLCAyMDAwKSxcbiAgICAgIHN0ZG91dDogc3Rkb3V0LnNsaWNlKDAsIDEwMDApLFxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUphdmFTY3JpcHRUb29sKG9wdHM6IHtcbiAgdG9vbHM6IFRvb2xTZXQ7XG4gIHNhbmRib3g6IFNhbmRib3hJbnN0YW5jZTtcbiAgYWN0aXZlVG9vbHM/OiBzdHJpbmdbXTtcbiAgb25TdWJUb29sQ2FsbD86IE9uU3ViVG9vbENhbGw7XG4gIHRvb2xDb250ZXh0PzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59KSB7XG4gIGNvbnN0IHsgc2FuZGJveCwgb25TdWJUb29sQ2FsbCB9ID0gb3B0cztcbiAgY29uc3QgYWN0aXZlU2V0ID0gb3B0cy5hY3RpdmVUb29scyA/IG5ldyBTZXQob3B0cy5hY3RpdmVUb29scykgOiBudWxsO1xuICBjb25zdCBhdmFpbGFibGVUb29sczogVG9vbFNldCA9IHt9O1xuICBmb3IgKGNvbnN0IFtuYW1lLCB0XSBvZiBPYmplY3QuZW50cmllcyhvcHRzLnRvb2xzKSkge1xuICAgIGlmICghYWN0aXZlU2V0IHx8IGFjdGl2ZVNldC5oYXMobmFtZSkpIHtcbiAgICAgIGF2YWlsYWJsZVRvb2xzW25hbWVdID0gdDtcbiAgICB9XG4gIH1cbiAgY29uc3QgY29udGV4dFR5cGUgPSBnZW5lcmF0ZUNvbnRleHRUeXBlU3RyaW5nKGF2YWlsYWJsZVRvb2xzKTtcblxuICByZXR1cm4gdG9vbCh7XG4gICAgLi4uYnVpbHRJblRvb2xzLkphdmFTY3JpcHQsXG4gICAgZGVzY3JpcHRpb246IGBFeGVjdXRlIEphdmFTY3JpcHQgdG8gb3JjaGVzdHJhdGUgbXVsdGlwbGUgdG9vbCBjYWxscyBpbiBhIHNpbmdsZSBzdGVwLiBVc2UgdGhpcyB3aGVuIHlvdSBuZWVkIHRvIHJ1biBzZXZlcmFsIHRvb2xzIGluIHNlcXVlbmNlLCB0cmFuc2Zvcm0gaW50ZXJtZWRpYXRlIHJlc3VsdHMsIG9yIHBhcmFsbGVsaXplIGluZGVwZW5kZW50IG9wZXJhdGlvbnMgd2l0aCBQcm9taXNlLmFsbC5cblxuVGhlIGNvZGUgcnVucyBhcyBhbiBhc3luYyBmdW5jdGlvbiBib2R5IHdpdGggXFxgY3R4XFxgIGluIHNjb3BlOlxuXG5cXGBcXGBcXGB0eXBlc2NyaXB0XG4ke2NvbnRleHRUeXBlfVxuXFxgXFxgXFxgXG5cbkV4YW1wbGVzOlxuLSBTZXF1ZW50aWFsOiBcXGBjb25zdCBmaWxlID0gYXdhaXQgY3R4LnRvb2xzLlJlYWQoeyBwYXRoOiBcInBhY2thZ2UuanNvblwiIH0pOyByZXR1cm4gSlNPTi5wYXJzZShmaWxlLmNvbnRlbnQpO1xcYFxuLSBQYXJhbGxlbDogXFxgY29uc3QgW2EsIGJdID0gYXdhaXQgUHJvbWlzZS5hbGwoW2N0eC50b29scy5SZWFkKHsgcGF0aDogXCJhLnRzXCIgfSksIGN0eC50b29scy5SZWFkKHsgcGF0aDogXCJiLnRzXCIgfSldKTsgcmV0dXJuIHsgYTogYS5jb250ZW50LCBiOiBiLmNvbnRlbnQgfTtcXGBcbi0gVHJhbnNmb3JtOiBcXGBjb25zdCBncmVwID0gYXdhaXQgY3R4LnRvb2xzLkdyZXAoeyBwYXR0ZXJuOiBcIlRPRE9cIiB9KTsgcmV0dXJuIGdyZXAubWF0Y2hlcy5zcGxpdChcIlxcXFxuXCIpLmxlbmd0aDtcXGBcbi0gQmFzaDogXFxgY29uc3QgciA9IGF3YWl0IGN0eC50b29scy5CYXNoKHsgY29tbWFuZDogXCJub2RlIC1lIFxcXFxcImNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHt2OjF9KSlcXFxcXCJcIiB9KTsgcmV0dXJuIEpTT04ucGFyc2Uoci5zdGRvdXQpO1xcYFxuXG5SZXR1cm4gYSB2YWx1ZSB0byBwYXNzIHJlc3VsdHMgYmFjay4gVXNlIGNvbnNvbGUubG9nKCkgZm9yIGRlYnVnIG91dHB1dC5cbkltcG9ydGFudDogRWFjaCB0b29sIHJldHVybnMgYSBzdHJ1Y3R1cmVkIG9iamVjdCBtYXRjaGluZyBpdHMgb3V0cHV0IHNjaGVtYSBcdTIwMTQgbm90IGEgcmF3IHN0cmluZy4gQWNjZXNzIHRoZSBzcGVjaWZpYyBmaWVsZCB5b3UgbmVlZCAoZS5nLiBCYXNoJ3MgcmVzdWx0LnN0ZG91dCwgUmVhZCdzIHJlc3VsdC5jb250ZW50KSByYXRoZXIgdGhhbiB0cnlpbmcgdG8gcGFyc2UgdGhlIGVudGlyZSByZXN1bHQuYCxcbiAgICBleGVjdXRlOiAoeyBjb2RlIH0pID0+IHtcbiAgICAgIGNvbnN0IHJ1bklkID0gYHJ1bl8ke0RhdGUubm93KCl9XyR7TWF0aC5yYW5kb20oKVxuICAgICAgICAudG9TdHJpbmcoMzYpXG4gICAgICAgIC5zbGljZSgyLCA4KX1gO1xuICAgICAgY29uc3QgcnBjRGlyID0gYC5hZ2VudC9qcy1ycGMvJHtydW5JZH1gO1xuICAgICAgY29uc3QgYWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuXG4gICAgICByZXR1cm4gZXhlY3V0ZUluU2FuZGJveCh7XG4gICAgICAgIGNvZGUsXG4gICAgICAgIHJwY0RpcixcbiAgICAgICAgYWJvcnRDb250cm9sbGVyLFxuICAgICAgICBzYW5kYm94LFxuICAgICAgICBhdmFpbGFibGVUb29scyxcbiAgICAgICAgb25TdWJUb29sQ2FsbCxcbiAgICAgICAgdG9vbENvbnRleHQ6IG9wdHMudG9vbENvbnRleHQsXG4gICAgICB9KTtcbiAgICB9LFxuICB9KTtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IFRvb2wgfSBmcm9tIFwiYWlcIjtcbmltcG9ydCB0eXBlIHsgQW55QWdlbnQgfSBmcm9tIFwiLi4vYWdlbnQvY2xpZW50XCI7XG5pbXBvcnQgdHlwZSB7IEJ1aWx0SW5Ub29sTmFtZSB9IGZyb20gXCIuL2luZGV4XCI7XG5cbi8qKiBCdWlsdC1pbiBkZWZhdWx0cyBmb3IgbmVlZHNBcHByb3ZhbCAodXNlciBjYW4gb3ZlcnJpZGUgdmlhIGFnZW50IGNvbmZpZykuICovXG5jb25zdCBidWlsdGluTmVlZHNBcHByb3ZhbDogUGFydGlhbDxSZWNvcmQ8QnVpbHRJblRvb2xOYW1lLCBib29sZWFuPj4gPSB7fTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNoZWNrTmVlZHNBcHByb3ZhbCh7XG4gIGFnZW50LFxuICB0b29sTmFtZSxcbiAgaW5wdXQsXG4gIHRvb2xDYWxsSWQsXG4gIG1lc3NhZ2VzLFxufToge1xuICBhZ2VudDogQW55QWdlbnQ7XG4gIHRvb2xOYW1lOiBzdHJpbmc7XG4gIGlucHV0OiB1bmtub3duO1xuICB0b29sQ2FsbElkOiBzdHJpbmc7XG4gIG1lc3NhZ2VzOiB1bmtub3duW107XG59KTogUHJvbWlzZTxib29sZWFuPiB7XG4gIC8vIDEuIFBlci10b29sIG5lZWRzQXBwcm92YWwgb24gdGhlIFRvb2wgZGVmaW5pdGlvbiB0YWtlcyBwcmlvcml0eVxuICBjb25zdCB0b29sRGVmID0gYWdlbnQub3B0aW9ucy50b29scz8uW3Rvb2xOYW1lXSBhcyBUb29sIHwgdW5kZWZpbmVkO1xuICBpZiAodG9vbERlZj8ubmVlZHNBcHByb3ZhbCAhPSBudWxsKSB7XG4gICAgaWYgKHR5cGVvZiB0b29sRGVmLm5lZWRzQXBwcm92YWwgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICByZXR1cm4gdG9vbERlZi5uZWVkc0FwcHJvdmFsO1xuICAgIH1cbiAgICByZXR1cm4gYXdhaXQgdG9vbERlZi5uZWVkc0FwcHJvdmFsKGlucHV0LCB7XG4gICAgICB0b29sQ2FsbElkLFxuICAgICAgbWVzc2FnZXM6IG1lc3NhZ2VzIGFzIG5ldmVyW10sXG4gICAgICBleHBlcmltZW50YWxfY29udGV4dDogdW5kZWZpbmVkLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gMi4gQWdlbnQtbGV2ZWwgbmVlZHNBcHByb3ZhbCBtYXBcbiAgY29uc3QgYWdlbnRFbnRyeSA9IChcbiAgICBhZ2VudC5vcHRpb25zLm5lZWRzQXBwcm92YWwgYXNcbiAgICAgIHwgUmVjb3JkPFxuICAgICAgICAgIHN0cmluZyxcbiAgICAgICAgICBib29sZWFuIHwgKCguLi5hcmdzOiB1bmtub3duW10pID0+IGJvb2xlYW4gfCBQcm9taXNlPGJvb2xlYW4+KVxuICAgICAgICA+XG4gICAgICB8IHVuZGVmaW5lZFxuICApPy5bdG9vbE5hbWVdO1xuXG4gIGlmIChhZ2VudEVudHJ5ICE9IG51bGwpIHtcbiAgICBpZiAodHlwZW9mIGFnZW50RW50cnkgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICByZXR1cm4gYWdlbnRFbnRyeTtcbiAgICB9XG4gICAgcmV0dXJuIGF3YWl0IGFnZW50RW50cnkoaW5wdXQsIHtcbiAgICAgIHRvb2xDYWxsSWQsXG4gICAgICBtZXNzYWdlcyxcbiAgICAgIGV4cGVyaW1lbnRhbF9jb250ZXh0OiB1bmRlZmluZWQsXG4gICAgfSk7XG4gIH1cblxuICAvLyAzLiBCdWlsdC1pbiBkZWZhdWx0c1xuICByZXR1cm4gYnVpbHRpbk5lZWRzQXBwcm92YWxbdG9vbE5hbWUgYXMgQnVpbHRJblRvb2xOYW1lXSA/PyBmYWxzZTtcbn1cbiIsICJpbXBvcnQge1xuICB0b29sIGFzIGFpVG9vbCxcbiAgdHlwZSBUb29sLFxuICB0eXBlIFRvb2xFeGVjdXRpb25PcHRpb25zLFxuICB0eXBlIFVJTWVzc2FnZSxcbn0gZnJvbSBcImFpXCI7XG5pbXBvcnQgdHlwZSB7IHogfSBmcm9tIFwiem9kXCI7XG5pbXBvcnQgdHlwZSB7IFNhbmRib3hJbnN0YW5jZSB9IGZyb20gXCIuLi9zYW5kYm94L2FkYXB0ZXJcIjtcbmltcG9ydCB0eXBlIHsgVG9vbENvbnRleHQgfSBmcm9tIFwiLi9pbmRleFwiO1xuXG4vKipcbiAqIERlZmluZSBhbiBhZ2VudCB0b29sIHdpdGggdHlwZWQgY29udGV4dCBhbmQgc3RhdGUuXG4gKlxuICogUGFzcyB0aGUgc2FtZSBgY29udGV4dFNjaGVtYWAgYW5kL29yIGBzdGF0ZVNjaGVtYWAgKFpvZCBvYmplY3RzKSB1c2VkIGluXG4gKiB5b3VyIGFnZW50IGRlZmluaXRpb24gdG8gZ2V0IHR5cGVkIGBjb250ZXh0YCBhbmQgYHN0YXRlYCBpbnNpZGUgYGV4ZWN1dGVgLlxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyB0b29sIH0gZnJvbSBcImV4cGVyaW1lbnRhbC1hZ2VudFwiO1xuICogaW1wb3J0IHsgY29udGV4dFNjaGVtYSwgc3RhdGVTY2hlbWEgfSBmcm9tIFwiLi9jb250ZXh0XCI7XG4gKlxuICogZXhwb3J0IGNvbnN0IE15VG9vbCA9IHRvb2woe1xuICogICBjb250ZXh0U2NoZW1hLFxuICogICBzdGF0ZVNjaGVtYSxcbiAqICAgaW5wdXRTY2hlbWE6IHoub2JqZWN0KHsgcXVlcnk6IHouc3RyaW5nKCkgfSksXG4gKiAgIGV4ZWN1dGU6IGFzeW5jICh7IHF1ZXJ5IH0sIHsgY29udGV4dCwgc3RhdGUsIHNhbmRib3ggfSkgPT4ge1xuICogICAgIGNvbnRleHQuY2hhbm5lbElkIC8vIFx1MjcxMyB0eXBlZCBmcm9tIGNvbnRleHRTY2hlbWFcbiAqICAgICBzdGF0ZS5jb3VudGVyKysgICAvLyBcdTI3MTMgdHlwZWQgZnJvbSBzdGF0ZVNjaGVtYSwgbXV0YWJsZVxuICogICB9LFxuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvb2w8XG4gIFRJbnB1dFNjaGVtYSBleHRlbmRzIHouWm9kVHlwZSxcbiAgVENvbnRleHRTY2hlbWEgZXh0ZW5kcyB6LlpvZFR5cGUgPSB6LlpvZFR5cGU8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+LFxuICBUU3RhdGVTY2hlbWEgZXh0ZW5kcyB6LlpvZFR5cGUgPSB6LlpvZFR5cGU8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+LFxuICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRXhwbGljaXRBbnk6IGRlZmF1bHQgZXJhc2VkXG4gIFRPdXRwdXRTY2hlbWEgZXh0ZW5kcyB6LlpvZFR5cGUgPSB6LlpvZFR5cGU8YW55Pixcbj4oZGVmOiB7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBpbnB1dFNjaGVtYTogVElucHV0U2NoZW1hO1xuICBvdXRwdXRTY2hlbWE/OiBUT3V0cHV0U2NoZW1hO1xuICBjb250ZXh0U2NoZW1hPzogVENvbnRleHRTY2hlbWE7XG4gIHN0YXRlU2NoZW1hPzogVFN0YXRlU2NoZW1hO1xuICBleGVjdXRlPzogKFxuICAgIGlucHV0OiB6LmluZmVyPFRJbnB1dFNjaGVtYT4sXG4gICAgb3B0aW9uczogVG9vbENvbnRleHQ8ei5pbmZlcjxUQ29udGV4dFNjaGVtYT4sIHouaW5mZXI8VFN0YXRlU2NoZW1hPj4gJiB7XG4gICAgICB0b29sQ2FsbElkOiBzdHJpbmc7XG4gICAgICBhYm9ydFNpZ25hbDogQWJvcnRTaWduYWw7XG4gICAgfVxuICAgIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9FeHBsaWNpdEFueTogZXhlY3V0ZSBjYW4gcmV0dXJuIGFueXRoaW5nXG4gICkgPT4gYW55O1xuICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRXhwbGljaXRBbnk6IGVyYXNlZCB0b29sIGdlbmVyaWNzXG59KTogVG9vbDxhbnksIGFueT4ge1xuICBjb25zdCB7IGV4ZWN1dGUsIGNvbnRleHRTY2hlbWEsIHN0YXRlU2NoZW1hLCAuLi5yZXN0IH0gPSBkZWY7XG5cbiAgY29uc3Qgd3JhcHBlZEV4ZWN1dGUgPSBleGVjdXRlXG4gICAgPyAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRXhwbGljaXRBbnk6IGlucHV0IHR5cGUgZXJhc2VkIGF0IHJ1bnRpbWVcbiAgICAgIChpbnB1dDogYW55LCBvcHRpb25zOiBUb29sRXhlY3V0aW9uT3B0aW9ucykgPT4ge1xuICAgICAgICBjb25zdCBjdHggPSBvcHRpb25zLmV4cGVyaW1lbnRhbF9jb250ZXh0IGFzIHtcbiAgICAgICAgICBjb250ZXh0OiB1bmtub3duO1xuICAgICAgICAgIHN0YXRlOiB1bmtub3duO1xuICAgICAgICAgIHNlc3Npb25JZDogc3RyaW5nO1xuICAgICAgICAgIG1lc3NhZ2VzOiBVSU1lc3NhZ2VbXTtcbiAgICAgICAgICBzYW5kYm94OiBTYW5kYm94SW5zdGFuY2U7XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgY29udGV4dCA9IChcbiAgICAgICAgICBjb250ZXh0U2NoZW1hID8gY29udGV4dFNjaGVtYS5wYXJzZShjdHguY29udGV4dCkgOiBjdHguY29udGV4dFxuICAgICAgICApIGFzIHouaW5mZXI8VENvbnRleHRTY2hlbWE+O1xuXG4gICAgICAgIGlmIChzdGF0ZVNjaGVtYSkge1xuICAgICAgICAgIHN0YXRlU2NoZW1hLnBhcnNlKGN0eC5zdGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3RhdGUgPSBjdHguc3RhdGUgYXMgei5pbmZlcjxUU3RhdGVTY2hlbWE+O1xuXG4gICAgICAgIHJldHVybiBleGVjdXRlKGlucHV0LCB7XG4gICAgICAgICAgdG9vbENhbGxJZDogb3B0aW9ucy50b29sQ2FsbElkLFxuICAgICAgICAgIGFib3J0U2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsISxcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgIHNlc3Npb25JZDogY3R4LnNlc3Npb25JZCxcbiAgICAgICAgICBtZXNzYWdlczogY3R4Lm1lc3NhZ2VzLFxuICAgICAgICAgIHNhbmRib3g6IGN0eC5zYW5kYm94LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICA6IHVuZGVmaW5lZDtcblxuICByZXR1cm4gd3JhcHBlZEV4ZWN1dGVcbiAgICA/IGFpVG9vbCh7IC4uLnJlc3QsIGV4ZWN1dGU6IHdyYXBwZWRFeGVjdXRlIH0pXG4gICAgOiAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRXhwbGljaXRBbnk6IG5vLWV4ZWN1dGUgcGF0aCBuZWVkcyBjYXN0XG4gICAgICBhaVRvb2wocmVzdCBhcyBhbnkpO1xufVxuIiwgImltcG9ydCB0eXBlIHsgSlNPTlZhbHVlLCBNb2RlbE1lc3NhZ2UgfSBmcm9tIFwiYWlcIjtcblxudHlwZSBQcm92aWRlck9wdGlvbnMgPSBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBKU09OVmFsdWU+PjtcblxuY29uc3QgQU5USFJPUElDX01BWF9DQUNIRV9CUkVBS1BPSU5UU19QRVJfUkVRVUVTVCA9IDQ7XG5cbmNvbnN0IENMQVVERV9MSUtFX01PREVMX01BVENIRVJTID0gW1wiY2xhdWRlXCIsIFwiYW50aHJvcGljXCJdO1xuXG5jb25zdCBDTEFVREVfUFJPTVBUX0NBQ0hJTkdfUFJPVklERVJfT1BUSU9OUzogUHJvdmlkZXJPcHRpb25zID0ge1xuICBhbnRocm9waWM6IHtcbiAgICBjYWNoZUNvbnRyb2w6IHsgdHlwZTogXCJlcGhlbWVyYWxcIiB9LFxuICB9LFxuICBvcGVucm91dGVyOiB7XG4gICAgY2FjaGVDb250cm9sOiB7IHR5cGU6IFwiZXBoZW1lcmFsXCIgfSxcbiAgfSxcbiAgYmVkcm9jazoge1xuICAgIGNhY2hlUG9pbnQ6IHsgdHlwZTogXCJkZWZhdWx0XCIgfSxcbiAgfSxcbiAgb3BlbmFpQ29tcGF0aWJsZToge1xuICAgIGNhY2hlX2NvbnRyb2w6IHsgdHlwZTogXCJlcGhlbWVyYWxcIiB9LFxuICB9LFxuICBjb3BpbG90OiB7XG4gICAgY29waWxvdF9jYWNoZV9jb250cm9sOiB7IHR5cGU6IFwiZXBoZW1lcmFsXCIgfSxcbiAgfSxcbn07XG5cbmZ1bmN0aW9uIGdldEdhdGV3YXlQcm92aWRlcihtb2RlbDogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG4gIGNvbnN0IHNsYXNoSW5kZXggPSBtb2RlbC5pbmRleE9mKFwiL1wiKTtcbiAgaWYgKHNsYXNoSW5kZXggPT09IC0xKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIG1vZGVsLnNsaWNlKDAsIHNsYXNoSW5kZXgpO1xufVxuXG5mdW5jdGlvbiBjb3VudEFudGhyb3BpY0NhY2hlQnJlYWtwb2ludHMobWVzc2FnZXM6IE1vZGVsTWVzc2FnZVtdKTogbnVtYmVyIHtcbiAgbGV0IGNvdW50ID0gMDtcbiAgZm9yIChjb25zdCBtZXNzYWdlIG9mIG1lc3NhZ2VzKSB7XG4gICAgY29uc3QgcHJvdmlkZXJPcHRpb25zID0gKG1lc3NhZ2UgYXMgeyBwcm92aWRlck9wdGlvbnM/OiBQcm92aWRlck9wdGlvbnMgfSlcbiAgICAgIC5wcm92aWRlck9wdGlvbnM7XG4gICAgaWYgKHByb3ZpZGVyT3B0aW9ucz8uYW50aHJvcGljPy5jYWNoZUNvbnRyb2wpIHtcbiAgICAgIGNvdW50ICs9IDE7XG4gICAgfVxuICAgIGlmIChBcnJheS5pc0FycmF5KG1lc3NhZ2UuY29udGVudCkpIHtcbiAgICAgIGZvciAoY29uc3QgcGFydCBvZiBtZXNzYWdlLmNvbnRlbnQpIHtcbiAgICAgICAgY29uc3QgcGFydFByb3ZpZGVyT3B0aW9ucyA9IChcbiAgICAgICAgICBwYXJ0IGFzIHsgcHJvdmlkZXJPcHRpb25zPzogUHJvdmlkZXJPcHRpb25zIH1cbiAgICAgICAgKS5wcm92aWRlck9wdGlvbnM7XG4gICAgICAgIGlmIChwYXJ0UHJvdmlkZXJPcHRpb25zPy5hbnRocm9waWM/LmNhY2hlQ29udHJvbCkge1xuICAgICAgICAgIGNvdW50ICs9IDE7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNvdW50O1xufVxuXG5mdW5jdGlvbiBpc0NsYXVkZUxpa2VNb2RlbChtb2RlbDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGNvbnN0IGxvd2VyID0gbW9kZWwudG9Mb3dlckNhc2UoKTtcbiAgcmV0dXJuIENMQVVERV9MSUtFX01PREVMX01BVENIRVJTLnNvbWUoKG0pID0+IGxvd2VyLmluY2x1ZGVzKG0pKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlUHJvdmlkZXJPcHRpb25zKG9wdHM6IHtcbiAgY3VycmVudDogUHJvdmlkZXJPcHRpb25zIHwgdW5kZWZpbmVkO1xuICBwYXRjaDogUHJvdmlkZXJPcHRpb25zO1xufSk6IFByb3ZpZGVyT3B0aW9ucyB7XG4gIGNvbnN0IG5leHQ6IFByb3ZpZGVyT3B0aW9ucyA9IHsgLi4uKG9wdHMuY3VycmVudCA/PyB7fSkgfTtcbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMob3B0cy5wYXRjaCkpIHtcbiAgICBuZXh0W2tleV0gPSB7IC4uLihuZXh0W2tleV0gPz8ge30pLCAuLi52YWx1ZSB9O1xuICB9XG4gIHJldHVybiBuZXh0O1xufVxuXG5mdW5jdGlvbiBpc0NhY2hlYWJsZUNsYXVkZVBhcnQocGFydDogdW5rbm93bik6IGJvb2xlYW4ge1xuICBpZiAoIXBhcnQgfHwgdHlwZW9mIHBhcnQgIT09IFwib2JqZWN0XCIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoXCJ0eXBlXCIgaW4gcGFydCAmJiAocGFydCBhcyB7IHR5cGU/OiB1bmtub3duIH0pLnR5cGUgPT09IFwidGV4dFwiKSB7XG4gICAgY29uc3QgdGV4dCA9IChwYXJ0IGFzIHsgdGV4dD86IHVua25vd24gfSkudGV4dDtcbiAgICBpZiAodHlwZW9mIHRleHQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHJldHVybiB0ZXh0LnRyaW0oKS5sZW5ndGggPiAwO1xuICAgIH1cbiAgfVxuXG4gIGlmIChcInR5cGVcIiBpbiBwYXJ0KSB7XG4gICAgY29uc3QgdHlwZSA9IChwYXJ0IGFzIHsgdHlwZT86IHVua25vd24gfSkudHlwZTtcbiAgICBpZiAodHlwZSA9PT0gXCJ0aGlua2luZ1wiIHx8IHR5cGUgPT09IFwicmVhc29uaW5nXCIpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gaGFzQ2FjaGVhYmxlQ29udGVudChtZXNzYWdlOiBNb2RlbE1lc3NhZ2UpOiBib29sZWFuIHtcbiAgaWYgKHR5cGVvZiBtZXNzYWdlLmNvbnRlbnQgPT09IFwic3RyaW5nXCIpIHtcbiAgICByZXR1cm4gbWVzc2FnZS5jb250ZW50LnRyaW0oKS5sZW5ndGggPiAwO1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkobWVzc2FnZS5jb250ZW50KSkge1xuICAgIHJldHVybiBtZXNzYWdlLmNvbnRlbnQuc29tZSgocGFydCkgPT4gaXNDYWNoZWFibGVDbGF1ZGVQYXJ0KHBhcnQpKTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gZmluZExhc3RDYWNoZWFibGVQYXJ0SW5kZXgoY29udGVudDogdW5rbm93bltdKTogbnVtYmVyIHwgbnVsbCB7XG4gIGZvciAobGV0IGkgPSBjb250ZW50Lmxlbmd0aCAtIDE7IGkgPj0gMDsgaSAtPSAxKSB7XG4gICAgaWYgKGlzQ2FjaGVhYmxlQ2xhdWRlUGFydChjb250ZW50W2ldKSkge1xuICAgICAgcmV0dXJuIGk7XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBzZWxlY3RDbGF1ZGVDYWNoaW5nVGFyZ2V0cyhtZXNzYWdlczogTW9kZWxNZXNzYWdlW10pOiBudW1iZXJbXSB7XG4gIGNvbnN0IHN5c3RlbUluZGljZXM6IG51bWJlcltdID0gW107XG4gIGNvbnN0IGZpbmFsSW5kaWNlczogbnVtYmVyW10gPSBbXTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IG1lc3NhZ2VzLmxlbmd0aCAmJiBzeXN0ZW1JbmRpY2VzLmxlbmd0aCA8IDI7IGkgKz0gMSkge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBtZXNzYWdlc1tpXTtcbiAgICBpZiAobWVzc2FnZS5yb2xlID09PSBcInN5c3RlbVwiICYmIGhhc0NhY2hlYWJsZUNvbnRlbnQobWVzc2FnZSkpIHtcbiAgICAgIHN5c3RlbUluZGljZXMucHVzaChpKTtcbiAgICB9XG4gIH1cblxuICBmb3IgKGxldCBpID0gbWVzc2FnZXMubGVuZ3RoIC0gMTsgaSA+PSAwICYmIGZpbmFsSW5kaWNlcy5sZW5ndGggPCAyOyBpIC09IDEpIHtcbiAgICBjb25zdCBtZXNzYWdlID0gbWVzc2FnZXNbaV07XG4gICAgaWYgKG1lc3NhZ2Uucm9sZSAhPT0gXCJzeXN0ZW1cIiAmJiBoYXNDYWNoZWFibGVDb250ZW50KG1lc3NhZ2UpKSB7XG4gICAgICBmaW5hbEluZGljZXMucHVzaChpKTtcbiAgICB9XG4gIH1cblxuICBmaW5hbEluZGljZXMucmV2ZXJzZSgpO1xuXG4gIHJldHVybiBbLi4uc3lzdGVtSW5kaWNlcywgLi4uZmluYWxJbmRpY2VzXTtcbn1cblxuZnVuY3Rpb24gYXBwbHlDbGF1ZGVQcm9tcHRDYWNoaW5nKG9wdHM6IHtcbiAgbWVzc2FnZXM6IE1vZGVsTWVzc2FnZVtdO1xuICBwcm92aWRlcklkOiBzdHJpbmcgfCBudWxsO1xuICBtYXhCcmVha3BvaW50c1BlclJlcXVlc3Q6IG51bWJlcjtcbn0pOiBNb2RlbE1lc3NhZ2VbXSB7XG4gIGNvbnN0IGV4aXN0aW5nQnJlYWtwb2ludHMgPSBjb3VudEFudGhyb3BpY0NhY2hlQnJlYWtwb2ludHMob3B0cy5tZXNzYWdlcyk7XG4gIGNvbnN0IHJlbWFpbmluZ0J1ZGdldCA9IE1hdGgubWF4KFxuICAgIDAsXG4gICAgb3B0cy5tYXhCcmVha3BvaW50c1BlclJlcXVlc3QgLSBleGlzdGluZ0JyZWFrcG9pbnRzXG4gICk7XG5cbiAgaWYgKHJlbWFpbmluZ0J1ZGdldCA9PT0gMCkge1xuICAgIHJldHVybiBvcHRzLm1lc3NhZ2VzO1xuICB9XG5cbiAgY29uc3QgdGFyZ2V0SW5kaWNlcyA9IHNlbGVjdENsYXVkZUNhY2hpbmdUYXJnZXRzKG9wdHMubWVzc2FnZXMpLnNsaWNlKFxuICAgIDAsXG4gICAgcmVtYWluaW5nQnVkZ2V0XG4gICk7XG4gIGlmICh0YXJnZXRJbmRpY2VzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBvcHRzLm1lc3NhZ2VzO1xuICB9XG5cbiAgY29uc3QgdXNlTWVzc2FnZUxldmVsT3B0aW9ucyA9XG4gICAgb3B0cy5wcm92aWRlcklkID09PSBcImFudGhyb3BpY1wiIHx8XG4gICAgQm9vbGVhbihvcHRzLnByb3ZpZGVySWQ/LmluY2x1ZGVzKFwiYmVkcm9ja1wiKSk7XG5cbiAgY29uc3QgbmV4dE1lc3NhZ2VzID0gb3B0cy5tZXNzYWdlcy5zbGljZSgpO1xuXG4gIGZvciAoY29uc3QgbWVzc2FnZUluZGV4IG9mIHRhcmdldEluZGljZXMpIHtcbiAgICBjb25zdCBtZXNzYWdlID0gbmV4dE1lc3NhZ2VzW21lc3NhZ2VJbmRleF07XG5cbiAgICBjb25zdCBzaG91bGRVc2VDb250ZW50T3B0aW9ucyA9XG4gICAgICAhdXNlTWVzc2FnZUxldmVsT3B0aW9ucyAmJlxuICAgICAgQXJyYXkuaXNBcnJheShtZXNzYWdlLmNvbnRlbnQpICYmXG4gICAgICBtZXNzYWdlLmNvbnRlbnQubGVuZ3RoID4gMDtcblxuICAgIGlmIChzaG91bGRVc2VDb250ZW50T3B0aW9ucyAmJiBBcnJheS5pc0FycmF5KG1lc3NhZ2UuY29udGVudCkpIHtcbiAgICAgIGNvbnN0IHBhcnRJbmRleCA9IGZpbmRMYXN0Q2FjaGVhYmxlUGFydEluZGV4KG1lc3NhZ2UuY29udGVudCk7XG4gICAgICBpZiAocGFydEluZGV4ICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHBhcnQgPSBtZXNzYWdlLmNvbnRlbnRbcGFydEluZGV4XTtcbiAgICAgICAgaWYgKHBhcnQgJiYgdHlwZW9mIHBhcnQgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICBjb25zdCBwYXJ0UHJvdmlkZXJPcHRpb25zID0gKFxuICAgICAgICAgICAgcGFydCBhcyB7IHByb3ZpZGVyT3B0aW9ucz86IFByb3ZpZGVyT3B0aW9ucyB9XG4gICAgICAgICAgKS5wcm92aWRlck9wdGlvbnM7XG5cbiAgICAgICAgICBjb25zdCBuZXh0Q29udGVudCA9IG1lc3NhZ2UuY29udGVudC5zbGljZSgpO1xuICAgICAgICAgIG5leHRDb250ZW50W3BhcnRJbmRleF0gPSB7XG4gICAgICAgICAgICAuLi4ocGFydCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiksXG4gICAgICAgICAgICBwcm92aWRlck9wdGlvbnM6IG1lcmdlUHJvdmlkZXJPcHRpb25zKHtcbiAgICAgICAgICAgICAgY3VycmVudDogcGFydFByb3ZpZGVyT3B0aW9ucyxcbiAgICAgICAgICAgICAgcGF0Y2g6IENMQVVERV9QUk9NUFRfQ0FDSElOR19QUk9WSURFUl9PUFRJT05TLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgfSBhcyAodHlwZW9mIG1lc3NhZ2UuY29udGVudClbbnVtYmVyXTtcblxuICAgICAgICAgIG5leHRNZXNzYWdlc1ttZXNzYWdlSW5kZXhdID0ge1xuICAgICAgICAgICAgLi4ubWVzc2FnZSxcbiAgICAgICAgICAgIGNvbnRlbnQ6IG5leHRDb250ZW50LFxuICAgICAgICAgIH0gYXMgTW9kZWxNZXNzYWdlO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgbWVzc2FnZVByb3ZpZGVyT3B0aW9ucyA9IChcbiAgICAgIG1lc3NhZ2UgYXMgeyBwcm92aWRlck9wdGlvbnM/OiBQcm92aWRlck9wdGlvbnMgfVxuICAgICkucHJvdmlkZXJPcHRpb25zO1xuXG4gICAgbmV4dE1lc3NhZ2VzW21lc3NhZ2VJbmRleF0gPSB7XG4gICAgICAuLi5tZXNzYWdlLFxuICAgICAgcHJvdmlkZXJPcHRpb25zOiBtZXJnZVByb3ZpZGVyT3B0aW9ucyh7XG4gICAgICAgIGN1cnJlbnQ6IG1lc3NhZ2VQcm92aWRlck9wdGlvbnMsXG4gICAgICAgIHBhdGNoOiBDTEFVREVfUFJPTVBUX0NBQ0hJTkdfUFJPVklERVJfT1BUSU9OUyxcbiAgICAgIH0pLFxuICAgIH07XG4gIH1cblxuICByZXR1cm4gbmV4dE1lc3NhZ2VzO1xufVxuXG5leHBvcnQgdHlwZSBQcm9tcHRDYWNoaW5nUmVzdWx0ID0ge1xuICBtZXNzYWdlczogTW9kZWxNZXNzYWdlW107XG4gIHByb3ZpZGVyT3B0aW9uczogUHJvdmlkZXJPcHRpb25zO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5UHJvbXB0Q2FjaGluZ1RvTW9kZWxSZXF1ZXN0KG9wdHM6IHtcbiAgbW9kZWw6IHN0cmluZztcbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIG1lc3NhZ2VzOiBNb2RlbE1lc3NhZ2VbXTtcbiAgYW50aHJvcGljPzogeyBtYXhCcmVha3BvaW50c1BlclJlcXVlc3Q/OiBudW1iZXIgfTtcbiAgb3BlbmFpPzogeyBzZXRQcm9tcHRDYWNoZUtleT86IGJvb2xlYW4gfTtcbn0pOiBQcm9tcHRDYWNoaW5nUmVzdWx0IHtcbiAgY29uc3QgcHJvdmlkZXIgPSBnZXRHYXRld2F5UHJvdmlkZXIob3B0cy5tb2RlbCk7XG5cbiAgY29uc3QgcHJvdmlkZXJPcHRpb25zOiBQcm92aWRlck9wdGlvbnMgPSB7fTtcblxuICBpZiAoXG4gICAgKHByb3ZpZGVyID09PSBcIm9wZW5haVwiIHx8IHByb3ZpZGVyID09PSBcImF6dXJlXCIpICYmXG4gICAgb3B0cy5vcGVuYWk/LnNldFByb21wdENhY2hlS2V5ICE9PSBmYWxzZVxuICApIHtcbiAgICBwcm92aWRlck9wdGlvbnMub3BlbmFpID0geyBwcm9tcHRDYWNoZUtleTogb3B0cy5zZXNzaW9uSWQgfTtcbiAgfVxuXG4gIGNvbnN0IG1heEJyZWFrcG9pbnRzUGVyUmVxdWVzdCA9XG4gICAgb3B0cy5hbnRocm9waWM/Lm1heEJyZWFrcG9pbnRzUGVyUmVxdWVzdCA/P1xuICAgIEFOVEhST1BJQ19NQVhfQ0FDSEVfQlJFQUtQT0lOVFNfUEVSX1JFUVVFU1Q7XG5cbiAgY29uc3QgY2FjaGVkTWVzc2FnZXMgPSBpc0NsYXVkZUxpa2VNb2RlbChvcHRzLm1vZGVsKVxuICAgID8gYXBwbHlDbGF1ZGVQcm9tcHRDYWNoaW5nKHtcbiAgICAgICAgbWVzc2FnZXM6IG9wdHMubWVzc2FnZXMsXG4gICAgICAgIHByb3ZpZGVySWQ6IHByb3ZpZGVyLFxuICAgICAgICBtYXhCcmVha3BvaW50c1BlclJlcXVlc3QsXG4gICAgICB9KVxuICAgIDogb3B0cy5tZXNzYWdlcztcblxuICByZXR1cm4ge1xuICAgIG1lc3NhZ2VzOiBjYWNoZWRNZXNzYWdlcyxcbiAgICBwcm92aWRlck9wdGlvbnMsXG4gIH07XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBVSU1lc3NhZ2VDaHVuayB9IGZyb20gXCJhaVwiO1xuaW1wb3J0ICogYXMgZXJyb3JlIGZyb20gXCJlcnJvcmVcIjtcbmltcG9ydCB7IFNlc3Npb25Ob3RGb3VuZEVycm9yIH0gZnJvbSBcIi4uL2Vycm9yc1wiO1xuaW1wb3J0IHR5cGUgeyBTZXNzaW9uQ29udGV4dCB9IGZyb20gXCIuL2hhbmRsZVwiO1xuaW1wb3J0IHsgZ2V0QWN0aXZlUnVucywgcmVwbGF5QWN0aXZlUnVuIH0gZnJvbSBcIi4vc2VuZFwiO1xuXG5leHBvcnQgdHlwZSBTdHJlYW1PcHRpb25zID0ge1xuICBtZXNzYWdlSWQ/OiBzdHJpbmc7XG4gIHN0YXJ0SW5kZXg/OiBudW1iZXI7XG59O1xuXG5leHBvcnQgdHlwZSBXb3JrZmxvd1J1bkxpa2UgPSB7XG4gIGdldFJlYWRhYmxlKG9wdGlvbnM/OiB7IHN0YXJ0SW5kZXg/OiBudW1iZXIgfSk6IFJlYWRhYmxlU3RyZWFtO1xufTtcblxuZnVuY3Rpb24gaXNXb3JrZmxvd1J1bihhcmc6IHVua25vd24pOiBhcmcgaXMgV29ya2Zsb3dSdW5MaWtlIHtcbiAgcmV0dXJuIChcbiAgICB0eXBlb2YgYXJnID09PSBcIm9iamVjdFwiICYmXG4gICAgYXJnICE9PSBudWxsICYmXG4gICAgXCJnZXRSZWFkYWJsZVwiIGluIGFyZyAmJlxuICAgIHR5cGVvZiAoYXJnIGFzIFdvcmtmbG93UnVuTGlrZSkuZ2V0UmVhZGFibGUgPT09IFwiZnVuY3Rpb25cIlxuICApO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc3RyZWFtKFxuICBzZXNzaW9uQ29udGV4dDogU2Vzc2lvbkNvbnRleHQsXG4gIHJ1bk9yT3B0cz86IFdvcmtmbG93UnVuTGlrZSB8IFN0cmVhbU9wdGlvbnNcbik6IFByb21pc2U8UmVhZGFibGVTdHJlYW08VUlNZXNzYWdlQ2h1bms+PiB7XG4gIGlmIChpc1dvcmtmbG93UnVuKHJ1bk9yT3B0cykpIHtcbiAgICBjb25zdCByZWFkZXIgPSBydW5Pck9wdHMuZ2V0UmVhZGFibGUoKS5nZXRSZWFkZXIoKTtcbiAgICAvLyBhd2FpdCBmb3IgdGhlIGZpcnN0IGNodW5rIHRvIGJlIHJlYWR5IGJlZm9yZSBmaW5pc2hpbmcgdGhlIHdvcmtmbG93IHRvIGF2b2lkIHJhY2UgY29uZGl0aW9uc1xuICAgIGF3YWl0IHJlYWRlci5yZWFkKCkuY2F0Y2goKCkgPT4ge1xuICAgICAgdGhyb3cgbmV3IFN0cmVhbUVycm9yKHtcbiAgICAgICAgaWQ6IHNlc3Npb25Db250ZXh0LnNlc3Npb25JZCxcbiAgICAgICAgcmVhc29uOiBcInN0cmVhbSgpIGZhaWxlZCB0byByZWFkIGZpcnN0IGNodW5rIGZyb20gd29ya2Zsb3cgcnVuXCIsXG4gICAgICB9KTtcbiAgICB9KTtcbiAgICByZWFkZXIuY2FuY2VsKCk7XG5cbiAgICByZXR1cm4gcnVuT3JPcHRzLmdldFJlYWRhYmxlKCk7XG4gIH1cblxuICBjb25zdCBvcHRzID0gcnVuT3JPcHRzO1xuICBjb25zdCBzZXNzaW9uID0gYXdhaXQgc2Vzc2lvbkNvbnRleHQuYWdlbnQuc3RvcmFnZS5zZXNzaW9uLmdldChcbiAgICBzZXNzaW9uQ29udGV4dC5zZXNzaW9uSWRcbiAgKTtcbiAgaWYgKCFzZXNzaW9uKSB7XG4gICAgdGhyb3cgbmV3IFNlc3Npb25Ob3RGb3VuZEVycm9yKHsgaWQ6IHNlc3Npb25Db250ZXh0LnNlc3Npb25JZCB9KTtcbiAgfVxuICBjb25zdCBtZXNzYWdlSWQgPSBvcHRzPy5tZXNzYWdlSWQgPz8gc2Vzc2lvbi5sYXN0TWVzc2FnZUlkO1xuICBpZiAoIW1lc3NhZ2VJZCkge1xuICAgIHRocm93IG5ldyBTdHJlYW1FcnJvcih7XG4gICAgICBpZDogc2Vzc2lvbkNvbnRleHQuc2Vzc2lvbklkLFxuICAgICAgcmVhc29uOiBcIk5vIG1lc3NhZ2UgdG8gc3RyZWFtXCIsXG4gICAgfSk7XG4gIH1cblxuICBjb25zdCBhY3RpdmVSdW5zID0gZ2V0QWN0aXZlUnVucygpO1xuICBjb25zdCBhY3RpdmUgPSBhY3RpdmVSdW5zLmdldChtZXNzYWdlSWQpO1xuICBpZiAoIWFjdGl2ZSkge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBhd2FpdCBzZXNzaW9uQ29udGV4dC5hZ2VudC5zdG9yYWdlLm1lc3NhZ2UuZ2V0KG1lc3NhZ2VJZCk7XG4gICAgaWYgKG1lc3NhZ2U/LndvcmtmbG93UnVuSWQpIHtcbiAgICAgIGNvbnN0IHJlYWRhYmxlID0gYXdhaXQgaW1wb3J0KFwid29ya2Zsb3cvYXBpXCIpXG4gICAgICAgIC50aGVuKCh7IGdldFJ1biB9KSA9PiBnZXRSdW4obWVzc2FnZS53b3JrZmxvd1J1bklkISkuZ2V0UmVhZGFibGUoKSlcbiAgICAgICAgLmNhdGNoKCgpID0+IHVuZGVmaW5lZCk7XG4gICAgICBpZiAocmVhZGFibGUpIHtcbiAgICAgICAgcmV0dXJuIHJlYWRhYmxlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRocm93IG5ldyBTdHJlYW1FcnJvcih7XG4gICAgICBpZDogc2Vzc2lvbkNvbnRleHQuc2Vzc2lvbklkLFxuICAgICAgcmVhc29uOiBgTm8gYWN0aXZlIHJ1biBmb3IgbWVzc2FnZSAke21lc3NhZ2VJZH1gLFxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHJlcGxheUFjdGl2ZVJ1bihhY3RpdmUsIG9wdHM/LnN0YXJ0SW5kZXgpO1xufVxuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBFcnJvcnNcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuZXhwb3J0IGNsYXNzIFN0cmVhbUVycm9yIGV4dGVuZHMgZXJyb3JlLmNyZWF0ZVRhZ2dlZEVycm9yKHtcbiAgbmFtZTogXCJTdHJlYW1FcnJvclwiLFxuICBtZXNzYWdlOiBcIlN0cmVhbSBmYWlsZWQgZm9yIHNlc3Npb24gJGlkOiAkcmVhc29uXCIsXG59KSB7fVxuIiwgImltcG9ydCB0eXBlIHsgU2Vzc2lvbiB9IGZyb20gXCIuLi9zdG9yYWdlL3R5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IFNlc3Npb25Db250ZXh0IH0gZnJvbSBcIi4vaGFuZGxlXCI7XG5cbmV4cG9ydCB0eXBlIFVwZGF0ZU9wdGlvbnM8XG4gIFRTdGF0ZSBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4+ID0gUGFydGlhbDxPbWl0PFNlc3Npb24sIFwiaWRcIiB8IFwiY3JlYXRlZEF0XCIgfCBcInVwZGF0ZWRBdFwiIHwgXCJzdGF0ZVwiPj4gJiB7XG4gIHN0YXRlPzogVFN0YXRlO1xufTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHVwZGF0ZTxcbiAgVFN0YXRlIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbj4oXG4gIHNlc3Npb25Db250ZXh0OiBTZXNzaW9uQ29udGV4dCxcbiAgb3B0czogVXBkYXRlT3B0aW9uczxUU3RhdGU+XG4pIHtcbiAgXCJ1c2Ugc3RlcFwiO1xuICBjb25zdCB1cGRhdGVzID0gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgIE9iamVjdC5lbnRyaWVzKG9wdHMpLmZpbHRlcigoWywgdmFsdWVdKSA9PiB2YWx1ZSAhPT0gdW5kZWZpbmVkKVxuICApO1xuXG4gIGlmIChPYmplY3Qua2V5cyh1cGRhdGVzKS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBhd2FpdCBzZXNzaW9uQ29udGV4dC5hZ2VudC5zdG9yYWdlLnNlc3Npb24udXBkYXRlKHNlc3Npb25Db250ZXh0LnNlc3Npb25JZCwge1xuICAgIC4uLnVwZGF0ZXMsXG4gICAgdXBkYXRlZEF0OiBEYXRlLm5vdygpLFxuICB9KTtcbn1cbiIsICJpbXBvcnQgeyBjb21wdXRlU2Vzc2lvblVzYWdlLCB0eXBlIFNlc3Npb25Vc2FnZSB9IGZyb20gXCIuLi91dGlscy91c2FnZVwiO1xuaW1wb3J0IHR5cGUgeyBTZXNzaW9uQ29udGV4dCB9IGZyb20gXCIuL2hhbmRsZVwiO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdXNhZ2UoXG4gIHNlc3Npb25Db250ZXh0OiBTZXNzaW9uQ29udGV4dFxuKTogUHJvbWlzZTxTZXNzaW9uVXNhZ2U+IHtcbiAgXCJ1c2Ugc3RlcFwiO1xuICBjb25zdCBtZXNzYWdlcyA9IGF3YWl0IHNlc3Npb25Db250ZXh0LmFnZW50LnN0b3JhZ2UubWVzc2FnZS5saXN0QnlTZXNzaW9uKFxuICAgIHNlc3Npb25Db250ZXh0LnNlc3Npb25JZFxuICApO1xuICByZXR1cm4gY29tcHV0ZVNlc3Npb25Vc2FnZShtZXNzYWdlcyk7XG59XG4iLCAiaW1wb3J0IHsgV09SS0ZMT1dfREVTRVJJQUxJWkUsIFdPUktGTE9XX1NFUklBTElaRSB9IGZyb20gXCJAd29ya2Zsb3cvc2VyZGVcIjtcbmltcG9ydCB0eXBlIHsgTWVzc2FnZSwgUGFydCwgU2FuZGJveCwgU2Vzc2lvbiwgU2V0dXAgfSBmcm9tIFwiLi90eXBlc1wiO1xuXG4vLyBcdTI1MDBcdTI1MDBcdTI1MDAgU3RvcmFnZUhhbmRsZXJzIChwdWJsaWMsIGZsYXQpIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG5leHBvcnQgdHlwZSBTdG9yYWdlSGFuZGxlcnMgPSB7XG4gIFwic2Vzc2lvbi5nZXRcIihwOiB7IGlkOiBzdHJpbmcgfSk6IFByb21pc2U8U2Vzc2lvbiB8IG51bGw+O1xuICBcInNlc3Npb24uc2V0XCIocDogeyBpZDogc3RyaW5nOyB2YWx1ZTogU2Vzc2lvbiB9KTogUHJvbWlzZTx2b2lkPjtcbiAgXCJzZXNzaW9uLnVwZGF0ZVwiKHA6IHtcbiAgICBpZDogc3RyaW5nO1xuICAgIHVwZGF0ZXM6IFBhcnRpYWw8U2Vzc2lvbj47XG4gIH0pOiBQcm9taXNlPFNlc3Npb24+O1xuXG4gIFwibWVzc2FnZS5nZXRcIihwOiB7IGlkOiBzdHJpbmcgfSk6IFByb21pc2U8TWVzc2FnZSB8IG51bGw+O1xuICBcIm1lc3NhZ2Uuc2V0XCIocDogeyBpZDogc3RyaW5nOyB2YWx1ZTogTWVzc2FnZSB9KTogUHJvbWlzZTx2b2lkPjtcbiAgXCJtZXNzYWdlLnVwZGF0ZVwiKHA6IHtcbiAgICBpZDogc3RyaW5nO1xuICAgIHVwZGF0ZXM6IFBhcnRpYWw8TWVzc2FnZT47XG4gIH0pOiBQcm9taXNlPE1lc3NhZ2U+O1xuICBcIm1lc3NhZ2UubGlzdEJ5U2Vzc2lvblwiKHA6IHsgc2Vzc2lvbklkOiBzdHJpbmcgfSk6IFByb21pc2U8TWVzc2FnZVtdPjtcblxuICBcInBhcnQuZ2V0XCIocDogeyBpZDogc3RyaW5nIH0pOiBQcm9taXNlPFBhcnQgfCBudWxsPjtcbiAgXCJwYXJ0LnNldFwiKHA6IHsgaWQ6IHN0cmluZzsgdmFsdWU6IFBhcnQgfSk6IFByb21pc2U8dm9pZD47XG4gIFwicGFydC5saXN0QnlTZXNzaW9uXCIocDogeyBzZXNzaW9uSWQ6IHN0cmluZyB9KTogUHJvbWlzZTxQYXJ0W10+O1xuXG4gIFwic2FuZGJveC5nZXRcIihwOiB7IGlkOiBzdHJpbmcgfSk6IFByb21pc2U8U2FuZGJveCB8IG51bGw+O1xuICBcInNhbmRib3guc2V0XCIocDogeyBpZDogc3RyaW5nOyB2YWx1ZTogU2FuZGJveCB9KTogUHJvbWlzZTx2b2lkPjtcbiAgXCJzYW5kYm94LnVwZGF0ZVwiKHA6IHtcbiAgICBpZDogc3RyaW5nO1xuICAgIHVwZGF0ZXM6IFBhcnRpYWw8U2FuZGJveD47XG4gIH0pOiBQcm9taXNlPFNhbmRib3g+O1xuXG4gIFwic2V0dXAuZ2V0XCIocDogeyBpZDogc3RyaW5nIH0pOiBQcm9taXNlPFNldHVwIHwgbnVsbD47XG4gIFwic2V0dXAuc2V0XCIocDogeyBpZDogc3RyaW5nOyB2YWx1ZTogU2V0dXAgfSk6IFByb21pc2U8dm9pZD47XG59O1xuXG4vLyBcdTI1MDBcdTI1MDBcdTI1MDAgU3RvcmFnZUNhbGwgKGRlcml2ZWQgZnJvbSBTdG9yYWdlSGFuZGxlcnMpIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG5leHBvcnQgdHlwZSBTdG9yYWdlQ2FsbCA9IHtcbiAgW0sgaW4ga2V5b2YgU3RvcmFnZUhhbmRsZXJzXTogeyBtZXRob2Q6IEsgfSAmIFBhcmFtZXRlcnM8XG4gICAgU3RvcmFnZUhhbmRsZXJzW0tdXG4gID5bMF07XG59W2tleW9mIFN0b3JhZ2VIYW5kbGVyc107XG5cbi8vIFx1MjUwMFx1MjUwMFx1MjUwMCBTdG9yYWdlU3RlcCAoc2VyaWFsaXphYmxlIGFjcm9zcyB3b3JrZmxvdyBib3VuZGFyeSkgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmV4cG9ydCBjbGFzcyBTdG9yYWdlU3RlcCB7XG4gIGV2ZW50OiBTdG9yYWdlQ2FsbDtcblxuICBjb25zdHJ1Y3RvcihldmVudDogU3RvcmFnZUNhbGwpIHtcbiAgICB0aGlzLmV2ZW50ID0gZXZlbnQ7XG4gIH1cblxuICBzdGF0aWMgW1dPUktGTE9XX1NFUklBTElaRV0oaW5zdGFuY2U6IFN0b3JhZ2VTdGVwKSB7XG4gICAgcmV0dXJuIHsgZXZlbnQ6IGluc3RhbmNlLmV2ZW50IH07XG4gIH1cblxuICBzdGF0aWMgW1dPUktGTE9XX0RFU0VSSUFMSVpFXShkYXRhOiB7IGV2ZW50OiBTdG9yYWdlQ2FsbCB9KSB7XG4gICAgcmV0dXJuIG5ldyBTdG9yYWdlU3RlcChkYXRhLmV2ZW50KTtcbiAgfVxuXG4gIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9FeHBsaWNpdEFueTogc2FmZSBkaXNwYXRjaCBcdTIwMTQgZXZlbnQubWV0aG9kIHNlbGVjdHMgdGhlIG1hdGNoaW5nIGhhbmRsZXJcbiAgb24oaGFuZGxlcnM6IFN0b3JhZ2VIYW5kbGVycyk6IFByb21pc2U8YW55PiB7XG4gICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0V4cGxpY2l0QW55OiBzZWUgYWJvdmVcbiAgICByZXR1cm4gKGhhbmRsZXJzW3RoaXMuZXZlbnQubWV0aG9kXSBhcyBhbnkpKHRoaXMuZXZlbnQpO1xuICB9XG59XG5cbi8qKlxuICogQSBzaW5nbGUgZnVuY3Rpb24gdGhhdCBoYW5kbGVzIGFsbCBzdG9yYWdlIG9wZXJhdGlvbnMuIEludGVuZGVkIHRvIGJlXG4gKiBtYXJrZWQgd2l0aCBgXCJ1c2Ugc3RlcFwiYCBzbyB0aGF0IGl0cyBib2R5IChhbmQgTm9kZS5qcy1kZXBlbmRlbnRcbiAqIGltcG9ydHMgbGlrZSBkYXRhYmFzZSBjbGllbnRzKSBpcyBleHRyYWN0ZWQgYnkgdGhlIHdvcmtmbG93IGJ1bmRsZXJcbiAqIGFuZCBydW5zIHNlcnZlci1zaWRlLlxuICpcbiAqIFRoZSBzdGVwIHJlY2VpdmVzIGEgYFN0b3JhZ2VTdGVwYCBpbnN0YW5jZSAoc2VyaWFsaXphYmxlIHZpYVxuICogYEB3b3JrZmxvdy9zZXJkZWApIGFuZCBzaG91bGQgY2FsbCBgc3RlcC5oYW5kbGUoeyAuLi4gfSlgIHdpdGggYVxuICogYFN0b3JhZ2VIYW5kbGVyc2AgbWFwLlxuICovXG4vLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRXhwbGljaXRBbnk6IHN0ZXAgZnVuY3Rpb24gaXMgYSBkaXNwYXRjaGVyOyB0eXBlIHNhZmV0eSBpcyBhdCB0aGUgaGFuZGxlcnMgbGV2ZWxcbmV4cG9ydCB0eXBlIFN0b3JhZ2VTdGVwRnVuY3Rpb24gPSAoc3RvcmU6IFN0b3JhZ2VTdGVwKSA9PiBQcm9taXNlPGFueT47XG5cbi8vIFx1MjUwMFx1MjUwMFx1MjUwMCBTdG9yYWdlIChpbnRlcm5hbCwgbmVzdGVkKSBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuZXhwb3J0IGludGVyZmFjZSBTdG9yYWdlIHtcbiAgc2Vzc2lvbjoge1xuICAgIGdldChrZXk6IHN0cmluZyk6IFByb21pc2U8U2Vzc2lvbiB8IG51bGw+O1xuICAgIHNldChrZXk6IHN0cmluZywgdmFsdWU6IFNlc3Npb24pOiBQcm9taXNlPHZvaWQ+O1xuICAgIHVwZGF0ZShrZXk6IHN0cmluZywgdXBkYXRlczogUGFydGlhbDxTZXNzaW9uPik6IFByb21pc2U8U2Vzc2lvbj47XG4gIH07XG4gIG1lc3NhZ2U6IHtcbiAgICBnZXQoa2V5OiBzdHJpbmcpOiBQcm9taXNlPE1lc3NhZ2UgfCBudWxsPjtcbiAgICBzZXQoa2V5OiBzdHJpbmcsIHZhbHVlOiBNZXNzYWdlKTogUHJvbWlzZTx2b2lkPjtcbiAgICB1cGRhdGUoa2V5OiBzdHJpbmcsIHVwZGF0ZXM6IFBhcnRpYWw8TWVzc2FnZT4pOiBQcm9taXNlPE1lc3NhZ2U+O1xuICAgIGxpc3RCeVNlc3Npb24oc2Vzc2lvbklkOiBzdHJpbmcpOiBQcm9taXNlPE1lc3NhZ2VbXT47XG4gIH07XG4gIHBhcnQ6IHtcbiAgICBnZXQoa2V5OiBzdHJpbmcpOiBQcm9taXNlPFBhcnQgfCBudWxsPjtcbiAgICBzZXQoa2V5OiBzdHJpbmcsIHZhbHVlOiBQYXJ0KTogUHJvbWlzZTx2b2lkPjtcbiAgICBsaXN0QnlTZXNzaW9uKHNlc3Npb25JZDogc3RyaW5nKTogUHJvbWlzZTxQYXJ0W10+O1xuICB9O1xuICBzYW5kYm94OiB7XG4gICAgZ2V0KGtleTogc3RyaW5nKTogUHJvbWlzZTxTYW5kYm94IHwgbnVsbD47XG4gICAgc2V0KGtleTogc3RyaW5nLCB2YWx1ZTogU2FuZGJveCk6IFByb21pc2U8dm9pZD47XG4gICAgdXBkYXRlKGtleTogc3RyaW5nLCB1cGRhdGVzOiBQYXJ0aWFsPFNhbmRib3g+KTogUHJvbWlzZTxTYW5kYm94PjtcbiAgfTtcbiAgc2V0dXA6IHtcbiAgICBnZXQoa2V5OiBzdHJpbmcpOiBQcm9taXNlPFNldHVwIHwgbnVsbD47XG4gICAgc2V0KGtleTogc3RyaW5nLCB2YWx1ZTogU2V0dXApOiBQcm9taXNlPHZvaWQ+O1xuICB9O1xufVxuXG5leHBvcnQgdHlwZSBTdG9yYWdlSW5wdXQgPSBTdG9yYWdlSGFuZGxlcnMgfCBTdG9yYWdlU3RlcEZ1bmN0aW9uO1xuXG5mdW5jdGlvbiBpc1N0ZXBGdW5jdGlvbihoOiBTdG9yYWdlSW5wdXQpOiBoIGlzIFN0b3JhZ2VTdGVwRnVuY3Rpb24ge1xuICByZXR1cm4gdHlwZW9mIGggPT09IFwiZnVuY3Rpb25cIjtcbn1cblxuZnVuY3Rpb24gZnJvbVN0ZXBGdW5jdGlvbihmbjogU3RvcmFnZVN0ZXBGdW5jdGlvbik6IFN0b3JhZ2Uge1xuICByZXR1cm4ge1xuICAgIHNlc3Npb246IHtcbiAgICAgIGdldDogKGlkKSA9PiBmbihuZXcgU3RvcmFnZVN0ZXAoeyBtZXRob2Q6IFwic2Vzc2lvbi5nZXRcIiwgaWQgfSkpLFxuICAgICAgc2V0OiAoaWQsIHZhbHVlKSA9PlxuICAgICAgICBmbihuZXcgU3RvcmFnZVN0ZXAoeyBtZXRob2Q6IFwic2Vzc2lvbi5zZXRcIiwgaWQsIHZhbHVlIH0pKSxcbiAgICAgIHVwZGF0ZTogKGlkLCB1cGRhdGVzKSA9PlxuICAgICAgICBmbihuZXcgU3RvcmFnZVN0ZXAoeyBtZXRob2Q6IFwic2Vzc2lvbi51cGRhdGVcIiwgaWQsIHVwZGF0ZXMgfSkpLFxuICAgIH0sXG4gICAgbWVzc2FnZToge1xuICAgICAgZ2V0OiAoaWQpID0+IGZuKG5ldyBTdG9yYWdlU3RlcCh7IG1ldGhvZDogXCJtZXNzYWdlLmdldFwiLCBpZCB9KSksXG4gICAgICBzZXQ6IChpZCwgdmFsdWUpID0+XG4gICAgICAgIGZuKG5ldyBTdG9yYWdlU3RlcCh7IG1ldGhvZDogXCJtZXNzYWdlLnNldFwiLCBpZCwgdmFsdWUgfSkpLFxuICAgICAgdXBkYXRlOiAoaWQsIHVwZGF0ZXMpID0+XG4gICAgICAgIGZuKG5ldyBTdG9yYWdlU3RlcCh7IG1ldGhvZDogXCJtZXNzYWdlLnVwZGF0ZVwiLCBpZCwgdXBkYXRlcyB9KSksXG4gICAgICBsaXN0QnlTZXNzaW9uOiAoc2Vzc2lvbklkKSA9PlxuICAgICAgICBmbihuZXcgU3RvcmFnZVN0ZXAoeyBtZXRob2Q6IFwibWVzc2FnZS5saXN0QnlTZXNzaW9uXCIsIHNlc3Npb25JZCB9KSksXG4gICAgfSxcbiAgICBwYXJ0OiB7XG4gICAgICBnZXQ6IChpZCkgPT4gZm4obmV3IFN0b3JhZ2VTdGVwKHsgbWV0aG9kOiBcInBhcnQuZ2V0XCIsIGlkIH0pKSxcbiAgICAgIHNldDogKGlkLCB2YWx1ZSkgPT5cbiAgICAgICAgZm4obmV3IFN0b3JhZ2VTdGVwKHsgbWV0aG9kOiBcInBhcnQuc2V0XCIsIGlkLCB2YWx1ZSB9KSksXG4gICAgICBsaXN0QnlTZXNzaW9uOiAoc2Vzc2lvbklkKSA9PlxuICAgICAgICBmbihuZXcgU3RvcmFnZVN0ZXAoeyBtZXRob2Q6IFwicGFydC5saXN0QnlTZXNzaW9uXCIsIHNlc3Npb25JZCB9KSksXG4gICAgfSxcbiAgICBzYW5kYm94OiB7XG4gICAgICBnZXQ6IChpZCkgPT4gZm4obmV3IFN0b3JhZ2VTdGVwKHsgbWV0aG9kOiBcInNhbmRib3guZ2V0XCIsIGlkIH0pKSxcbiAgICAgIHNldDogKGlkLCB2YWx1ZSkgPT5cbiAgICAgICAgZm4obmV3IFN0b3JhZ2VTdGVwKHsgbWV0aG9kOiBcInNhbmRib3guc2V0XCIsIGlkLCB2YWx1ZSB9KSksXG4gICAgICB1cGRhdGU6IChpZCwgdXBkYXRlcykgPT5cbiAgICAgICAgZm4obmV3IFN0b3JhZ2VTdGVwKHsgbWV0aG9kOiBcInNhbmRib3gudXBkYXRlXCIsIGlkLCB1cGRhdGVzIH0pKSxcbiAgICB9LFxuICAgIHNldHVwOiB7XG4gICAgICBnZXQ6IChpZCkgPT4gZm4obmV3IFN0b3JhZ2VTdGVwKHsgbWV0aG9kOiBcInNldHVwLmdldFwiLCBpZCB9KSksXG4gICAgICBzZXQ6IChpZCwgdmFsdWUpID0+XG4gICAgICAgIGZuKG5ldyBTdG9yYWdlU3RlcCh7IG1ldGhvZDogXCJzZXR1cC5zZXRcIiwgaWQsIHZhbHVlIH0pKSxcbiAgICB9LFxuICB9O1xufVxuXG5mdW5jdGlvbiBmcm9tSGFuZGxlcnMoaDogU3RvcmFnZUhhbmRsZXJzKTogU3RvcmFnZSB7XG4gIHJldHVybiB7XG4gICAgc2Vzc2lvbjoge1xuICAgICAgZ2V0OiAoaWQpID0+IGhbXCJzZXNzaW9uLmdldFwiXSh7IGlkIH0pLFxuICAgICAgc2V0OiAoaWQsIHZhbHVlKSA9PiBoW1wic2Vzc2lvbi5zZXRcIl0oeyBpZCwgdmFsdWUgfSksXG4gICAgICB1cGRhdGU6IChpZCwgdXBkYXRlcykgPT4gaFtcInNlc3Npb24udXBkYXRlXCJdKHsgaWQsIHVwZGF0ZXMgfSksXG4gICAgfSxcbiAgICBtZXNzYWdlOiB7XG4gICAgICBnZXQ6IChpZCkgPT4gaFtcIm1lc3NhZ2UuZ2V0XCJdKHsgaWQgfSksXG4gICAgICBzZXQ6IChpZCwgdmFsdWUpID0+IGhbXCJtZXNzYWdlLnNldFwiXSh7IGlkLCB2YWx1ZSB9KSxcbiAgICAgIHVwZGF0ZTogKGlkLCB1cGRhdGVzKSA9PiBoW1wibWVzc2FnZS51cGRhdGVcIl0oeyBpZCwgdXBkYXRlcyB9KSxcbiAgICAgIGxpc3RCeVNlc3Npb246IChzZXNzaW9uSWQpID0+IGhbXCJtZXNzYWdlLmxpc3RCeVNlc3Npb25cIl0oeyBzZXNzaW9uSWQgfSksXG4gICAgfSxcbiAgICBwYXJ0OiB7XG4gICAgICBnZXQ6IChpZCkgPT4gaFtcInBhcnQuZ2V0XCJdKHsgaWQgfSksXG4gICAgICBzZXQ6IChpZCwgdmFsdWUpID0+IGhbXCJwYXJ0LnNldFwiXSh7IGlkLCB2YWx1ZSB9KSxcbiAgICAgIGxpc3RCeVNlc3Npb246IChzZXNzaW9uSWQpID0+IGhbXCJwYXJ0Lmxpc3RCeVNlc3Npb25cIl0oeyBzZXNzaW9uSWQgfSksXG4gICAgfSxcbiAgICBzYW5kYm94OiB7XG4gICAgICBnZXQ6IChpZCkgPT4gaFtcInNhbmRib3guZ2V0XCJdKHsgaWQgfSksXG4gICAgICBzZXQ6IChpZCwgdmFsdWUpID0+IGhbXCJzYW5kYm94LnNldFwiXSh7IGlkLCB2YWx1ZSB9KSxcbiAgICAgIHVwZGF0ZTogKGlkLCB1cGRhdGVzKSA9PiBoW1wic2FuZGJveC51cGRhdGVcIl0oeyBpZCwgdXBkYXRlcyB9KSxcbiAgICB9LFxuICAgIHNldHVwOiB7XG4gICAgICBnZXQ6IChpZCkgPT4gaFtcInNldHVwLmdldFwiXSh7IGlkIH0pLFxuICAgICAgc2V0OiAoaWQsIHZhbHVlKSA9PiBoW1wic2V0dXAuc2V0XCJdKHsgaWQsIHZhbHVlIH0pLFxuICAgIH0sXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b1N0b3JhZ2UoaDogU3RvcmFnZUlucHV0KTogU3RvcmFnZSB7XG4gIHJldHVybiBpc1N0ZXBGdW5jdGlvbihoKSA/IGZyb21TdGVwRnVuY3Rpb24oaCkgOiBmcm9tSGFuZGxlcnMoaCk7XG59XG4iLCAiY29uc3QgREVGQVVMVF9NQVhfUkVUUklFUyA9IDM7XG5cbi8qKlxuICogV2UgaW50ZW50aW9uYWxseSBtaXJyb3IgdGhlIG1pbmltYWwgYGdldCgpYCByZXR1cm4gc2hhcGUgd2UgdXNlIGhlcmVcbiAqIGluc3RlYWQgb2YgaW1wb3J0aW5nIEtWMiB0eXBlcy4gVGhlIHdvcmtmbG93IGJ1bmRsZXIgYW5hbHl6ZXMgdHlwZS1vbmx5XG4gKiBpbXBvcnRzIGFuZCBmbGFncyBgQHZlcmNlbC9rdjJgIGFzIGEgTm9kZSBtb2R1bGUgaW4gd29ya2Zsb3cgY29kZSBwYXRocy5cbiAqIEtlZXBpbmcgdGhpcyBsb2NhbCBhdm9pZHMgdGhhdCBmYWxzZS1wb3NpdGl2ZSB3aGlsZSBwcmVzZXJ2aW5nIHJ1bnRpbWUgYmVoYXZpb3IuXG4gKi9cbnR5cGUgS1ZPcHRpbWlzdGljR2V0UmVzdWx0PFQ+ID1cbiAgfCB7XG4gICAgICBleGlzdHM6IGZhbHNlO1xuICAgIH1cbiAgfCB7XG4gICAgICBleGlzdHM6IHRydWU7XG4gICAgICB2YWx1ZTogUHJvbWlzZTxUPjtcbiAgICAgIHVwZGF0ZSh2YWx1ZTogVCk6IFByb21pc2U8dW5rbm93bj47XG4gICAgfTtcblxudHlwZSBLVk9wdGltaXN0aWNTdG9yZTxUPiA9IHtcbiAgZ2V0KGtleU9yRmlsdGVyOiBzdHJpbmcpOiBQcm9taXNlPEtWT3B0aW1pc3RpY0dldFJlc3VsdDxUPj47XG59O1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbWVyZ2VXaXRoS1ZPcHRpbWlzdGljVXBkYXRlPFQ+KG9wdHM6IHtcbiAgaWQ6IHN0cmluZztcbiAgdXBkYXRlczogUGFydGlhbDxUPjtcbiAgc3RvcmU6IEtWT3B0aW1pc3RpY1N0b3JlPFQ+O1xuICBub3RGb3VuZEVycm9yTWVzc2FnZTogc3RyaW5nO1xuICBjb25mbGljdEVycm9yTWVzc2FnZTogc3RyaW5nO1xuICBtYXhSZXRyaWVzPzogbnVtYmVyO1xufSk6IFByb21pc2U8VD4ge1xuICBjb25zdCBtYXhSZXRyaWVzID0gb3B0cy5tYXhSZXRyaWVzID8/IERFRkFVTFRfTUFYX1JFVFJJRVM7XG4gIGNvbnN0IHsgS1ZWZXJzaW9uQ29uZmxpY3RFcnJvciB9ID0gYXdhaXQgaW1wb3J0KFwiQHZlcmNlbC9rdjJcIik7XG5cbiAgZm9yIChsZXQgYXR0ZW1wdCA9IDA7IGF0dGVtcHQgPCBtYXhSZXRyaWVzOyBhdHRlbXB0KyspIHtcbiAgICBjb25zdCBlbnRyeSA9IGF3YWl0IG9wdHMuc3RvcmUuZ2V0KG9wdHMuaWQpO1xuICAgIGlmICghZW50cnkuZXhpc3RzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3Iob3B0cy5ub3RGb3VuZEVycm9yTWVzc2FnZSk7XG4gICAgfVxuXG4gICAgY29uc3QgZXhpc3RpbmcgPSBhd2FpdCBlbnRyeS52YWx1ZTtcbiAgICBjb25zdCB1cGRhdGVkID0geyAuLi5leGlzdGluZywgLi4ub3B0cy51cGRhdGVzIH07XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgZW50cnkudXBkYXRlKHVwZGF0ZWQpO1xuICAgICAgcmV0dXJuIHVwZGF0ZWQ7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChcbiAgICAgICAgIShlcnJvciBpbnN0YW5jZW9mIEtWVmVyc2lvbkNvbmZsaWN0RXJyb3IpICYmXG4gICAgICAgICghKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHx8IGVycm9yLm5hbWUgIT09IFwiS1ZWZXJzaW9uQ29uZmxpY3RFcnJvclwiKVxuICAgICAgKSB7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuXG4gICAgICBpZiAoYXR0ZW1wdCA9PT0gbWF4UmV0cmllcyAtIDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKG9wdHMuY29uZmxpY3RFcnJvck1lc3NhZ2UsIHsgY2F1c2U6IGVycm9yIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcihvcHRzLmNvbmZsaWN0RXJyb3JNZXNzYWdlKTtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IFN0b3JhZ2VIYW5kbGVycyB9IGZyb20gXCIuLi9hZGFwdGVyXCI7XG5pbXBvcnQgdHlwZSB7IE1lc3NhZ2UsIFBhcnQsIFNhbmRib3gsIFNlc3Npb24sIFNldHVwIH0gZnJvbSBcIi4uL3R5cGVzXCI7XG5pbXBvcnQgeyBtZXJnZVdpdGhLVk9wdGltaXN0aWNVcGRhdGUgfSBmcm9tIFwiLi9rdi1vcHRpbWlzdGljLXVwZGF0ZVwiO1xuXG50eXBlIEt2U3RvcmVzID0gQXdhaXRlZDxSZXR1cm5UeXBlPHR5cGVvZiBpbml0S3ZTdG9yZXM+PjtcblxuYXN5bmMgZnVuY3Rpb24gaW5pdEt2U3RvcmVzKHByZWZpeDogc3RyaW5nKSB7XG4gIGNvbnN0IHsgY3JlYXRlS1YgfSA9IGF3YWl0IGltcG9ydChcIkB2ZXJjZWwva3YyXCIpO1xuICBjb25zdCBrdiA9IGNyZWF0ZUtWKHsgcHJlZml4IH0pLmdldFN0b3JlKFwiYWdlbnQvXCIpO1xuXG4gIHJldHVybiB7XG4gICAgc2Vzc2lvbnM6IGt2LmdldFN0b3JlPFNlc3Npb24+KFwic2Vzc2lvbi9cIiksXG4gICAgbWVzc2FnZXM6IGt2LmdldFN0b3JlPE1lc3NhZ2U+KFwibWVzc2FnZS9cIikud2l0aEluZGV4ZXMoe1xuICAgICAgYnlTZXNzaW9uSWQ6IHsga2V5OiAobTogTWVzc2FnZSkgPT4gbS5zZXNzaW9uSWQgfSxcbiAgICB9KSxcbiAgICBwYXJ0czoga3YuZ2V0U3RvcmU8UGFydD4oXCJwYXJ0L1wiKS53aXRoSW5kZXhlcyh7XG4gICAgICBieVNlc3Npb25JZDogeyBrZXk6IChwOiBQYXJ0KSA9PiBwLnNlc3Npb25JZCB9LFxuICAgIH0pLFxuICAgIHNhbmRib3hlczoga3YuZ2V0U3RvcmU8U2FuZGJveD4oXCJzYW5kYm94L1wiKSxcbiAgICBzZXR1cHM6IGt2LmdldFN0b3JlPFNldHVwPihcInNldHVwL1wiKSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGt2U3RvcmFnZUZhbGxiYWNrKG9wdHM6IHsgcHJlZml4OiBzdHJpbmcgfSk6IFN0b3JhZ2VIYW5kbGVycyB7XG4gIGxldCBzdG9yZXNQcm9taXNlOiBQcm9taXNlPEt2U3RvcmVzPiB8IHVuZGVmaW5lZDtcblxuICBmdW5jdGlvbiBnZXRTdG9yZXMoKSB7XG4gICAgaWYgKCFzdG9yZXNQcm9taXNlKSB7XG4gICAgICBzdG9yZXNQcm9taXNlID0gaW5pdEt2U3RvcmVzKG9wdHMucHJlZml4KTtcbiAgICB9XG4gICAgcmV0dXJuIHN0b3Jlc1Byb21pc2U7XG4gIH1cblxuICBjb25zdCB0YWcgPSBgW2FnZW50LiR7b3B0cy5wcmVmaXh9XVtrdjJdYDtcblxuICByZXR1cm4ge1xuICAgIFwic2Vzc2lvbi5nZXRcIjogYXN5bmMgKHsgaWQgfSkgPT4ge1xuICAgICAgY29uc3QgeyBzZXNzaW9ucyB9ID0gYXdhaXQgZ2V0U3RvcmVzKCk7XG4gICAgICByZXR1cm4gKGF3YWl0IHNlc3Npb25zLmdldFZhbHVlKGlkKSkgPz8gbnVsbDtcbiAgICB9LFxuXG4gICAgXCJzZXNzaW9uLnNldFwiOiBhc3luYyAoeyBpZCwgdmFsdWUgfSkgPT4ge1xuICAgICAgY29uc3QgeyBzZXNzaW9ucyB9ID0gYXdhaXQgZ2V0U3RvcmVzKCk7XG4gICAgICBhd2FpdCBzZXNzaW9ucy5zZXQoaWQsIHZhbHVlKTtcbiAgICB9LFxuXG4gICAgXCJzZXNzaW9uLnVwZGF0ZVwiOiBhc3luYyAoeyBpZCwgdXBkYXRlcyB9KSA9PiB7XG4gICAgICBjb25zdCB7IHNlc3Npb25zIH0gPSBhd2FpdCBnZXRTdG9yZXMoKTtcbiAgICAgIHJldHVybiBtZXJnZVdpdGhLVk9wdGltaXN0aWNVcGRhdGU8U2Vzc2lvbj4oe1xuICAgICAgICBpZCxcbiAgICAgICAgdXBkYXRlcyxcbiAgICAgICAgc3RvcmU6IHNlc3Npb25zLFxuICAgICAgICBub3RGb3VuZEVycm9yTWVzc2FnZTogYCR7dGFnfVtzZXNzaW9uLnVwZGF0ZV0gbm8gc2Vzc2lvbiBmb3VuZCB3aXRoIGlkIFwiJHtpZH1cImAsXG4gICAgICAgIGNvbmZsaWN0RXJyb3JNZXNzYWdlOiBgJHt0YWd9W3Nlc3Npb24udXBkYXRlXSBvcHRpbWlzdGljIHVwZGF0ZSBmYWlsZWQgYWZ0ZXIgcmV0cmllcyBmb3IgaWQgXCIke2lkfVwiYCxcbiAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBcIm1lc3NhZ2UuZ2V0XCI6IGFzeW5jICh7IGlkIH0pID0+IHtcbiAgICAgIGNvbnN0IHsgbWVzc2FnZXMgfSA9IGF3YWl0IGdldFN0b3JlcygpO1xuICAgICAgcmV0dXJuIChhd2FpdCBtZXNzYWdlcy5nZXRWYWx1ZShpZCkpID8/IG51bGw7XG4gICAgfSxcblxuICAgIFwibWVzc2FnZS5zZXRcIjogYXN5bmMgKHsgaWQsIHZhbHVlIH0pID0+IHtcbiAgICAgIGNvbnN0IHsgbWVzc2FnZXMgfSA9IGF3YWl0IGdldFN0b3JlcygpO1xuICAgICAgYXdhaXQgbWVzc2FnZXMuc2V0KGlkLCB2YWx1ZSk7XG4gICAgfSxcblxuICAgIFwibWVzc2FnZS51cGRhdGVcIjogYXN5bmMgKHsgaWQsIHVwZGF0ZXMgfSkgPT4ge1xuICAgICAgY29uc3QgeyBtZXNzYWdlcyB9ID0gYXdhaXQgZ2V0U3RvcmVzKCk7XG4gICAgICByZXR1cm4gbWVyZ2VXaXRoS1ZPcHRpbWlzdGljVXBkYXRlPE1lc3NhZ2U+KHtcbiAgICAgICAgaWQsXG4gICAgICAgIHVwZGF0ZXMsXG4gICAgICAgIHN0b3JlOiBtZXNzYWdlcyxcbiAgICAgICAgbm90Rm91bmRFcnJvck1lc3NhZ2U6IGAke3RhZ31bbWVzc2FnZS51cGRhdGVdIG5vIG1lc3NhZ2UgZm91bmQgd2l0aCBpZCBcIiR7aWR9XCJgLFxuICAgICAgICBjb25mbGljdEVycm9yTWVzc2FnZTogYCR7dGFnfVttZXNzYWdlLnVwZGF0ZV0gb3B0aW1pc3RpYyB1cGRhdGUgZmFpbGVkIGFmdGVyIHJldHJpZXMgZm9yIGlkIFwiJHtpZH1cImAsXG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgXCJtZXNzYWdlLmxpc3RCeVNlc3Npb25cIjogYXN5bmMgKHsgc2Vzc2lvbklkIH0pID0+IHtcbiAgICAgIGNvbnN0IHsgbWVzc2FnZXMgfSA9IGF3YWl0IGdldFN0b3JlcygpO1xuICAgICAgY29uc3QgcmVzdWx0OiBNZXNzYWdlW10gPSBbXTtcbiAgICAgIGZvciBhd2FpdCAoY29uc3QgWywgZW50cnldIG9mIG1lc3NhZ2VzLmVudHJpZXMoe1xuICAgICAgICBieVNlc3Npb25JZDogc2Vzc2lvbklkLFxuICAgICAgfSkpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goYXdhaXQgZW50cnkudmFsdWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgXCJwYXJ0LmdldFwiOiBhc3luYyAoeyBpZCB9KSA9PiB7XG4gICAgICBjb25zdCB7IHBhcnRzIH0gPSBhd2FpdCBnZXRTdG9yZXMoKTtcbiAgICAgIHJldHVybiAoYXdhaXQgcGFydHMuZ2V0VmFsdWUoaWQpKSA/PyBudWxsO1xuICAgIH0sXG5cbiAgICBcInBhcnQuc2V0XCI6IGFzeW5jICh7IGlkLCB2YWx1ZSB9KSA9PiB7XG4gICAgICBjb25zdCB7IHBhcnRzIH0gPSBhd2FpdCBnZXRTdG9yZXMoKTtcbiAgICAgIGF3YWl0IHBhcnRzLnNldChpZCwgdmFsdWUpO1xuICAgIH0sXG5cbiAgICBcInBhcnQubGlzdEJ5U2Vzc2lvblwiOiBhc3luYyAoeyBzZXNzaW9uSWQgfSkgPT4ge1xuICAgICAgY29uc3QgeyBwYXJ0cyB9ID0gYXdhaXQgZ2V0U3RvcmVzKCk7XG4gICAgICBjb25zdCByZXN1bHQ6IFBhcnRbXSA9IFtdO1xuICAgICAgZm9yIGF3YWl0IChjb25zdCBbLCBlbnRyeV0gb2YgcGFydHMuZW50cmllcyh7XG4gICAgICAgIGJ5U2Vzc2lvbklkOiBzZXNzaW9uSWQsXG4gICAgICB9KSkge1xuICAgICAgICByZXN1bHQucHVzaChhd2FpdCBlbnRyeS52YWx1ZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBcInNhbmRib3guZ2V0XCI6IGFzeW5jICh7IGlkIH0pID0+IHtcbiAgICAgIGNvbnN0IHsgc2FuZGJveGVzIH0gPSBhd2FpdCBnZXRTdG9yZXMoKTtcbiAgICAgIHJldHVybiAoYXdhaXQgc2FuZGJveGVzLmdldFZhbHVlKGlkKSkgPz8gbnVsbDtcbiAgICB9LFxuXG4gICAgXCJzYW5kYm94LnNldFwiOiBhc3luYyAoeyBpZCwgdmFsdWUgfSkgPT4ge1xuICAgICAgY29uc3QgeyBzYW5kYm94ZXMgfSA9IGF3YWl0IGdldFN0b3JlcygpO1xuICAgICAgYXdhaXQgc2FuZGJveGVzLnNldChpZCwgdmFsdWUpO1xuICAgIH0sXG5cbiAgICBcInNhbmRib3gudXBkYXRlXCI6IGFzeW5jICh7IGlkLCB1cGRhdGVzIH0pID0+IHtcbiAgICAgIGNvbnN0IHsgc2FuZGJveGVzIH0gPSBhd2FpdCBnZXRTdG9yZXMoKTtcbiAgICAgIHJldHVybiBtZXJnZVdpdGhLVk9wdGltaXN0aWNVcGRhdGU8U2FuZGJveD4oe1xuICAgICAgICBpZCxcbiAgICAgICAgdXBkYXRlcyxcbiAgICAgICAgc3RvcmU6IHNhbmRib3hlcyxcbiAgICAgICAgbm90Rm91bmRFcnJvck1lc3NhZ2U6IGAke3RhZ31bc2FuZGJveC51cGRhdGVdIG5vIHNhbmRib3ggZm91bmQgd2l0aCBpZCBcIiR7aWR9XCJgLFxuICAgICAgICBjb25mbGljdEVycm9yTWVzc2FnZTogYCR7dGFnfVtzYW5kYm94LnVwZGF0ZV0gb3B0aW1pc3RpYyB1cGRhdGUgZmFpbGVkIGFmdGVyIHJldHJpZXMgZm9yIGlkIFwiJHtpZH1cImAsXG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgXCJzZXR1cC5nZXRcIjogYXN5bmMgKHsgaWQgfSkgPT4ge1xuICAgICAgY29uc3QgeyBzZXR1cHMgfSA9IGF3YWl0IGdldFN0b3JlcygpO1xuICAgICAgcmV0dXJuIChhd2FpdCBzZXR1cHMuZ2V0VmFsdWUoaWQpKSA/PyBudWxsO1xuICAgIH0sXG5cbiAgICBcInNldHVwLnNldFwiOiBhc3luYyAoeyBpZCwgdmFsdWUgfSkgPT4ge1xuICAgICAgY29uc3QgeyBzZXR1cHMgfSA9IGF3YWl0IGdldFN0b3JlcygpO1xuICAgICAgYXdhaXQgc2V0dXBzLnNldChpZCwgdmFsdWUpO1xuICAgIH0sXG4gIH07XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBTdG9yYWdlSGFuZGxlcnMgfSBmcm9tIFwiLi4vYWRhcHRlclwiO1xuaW1wb3J0IHR5cGUgeyBNZXNzYWdlLCBQYXJ0LCBTYW5kYm94LCBTZXNzaW9uLCBTZXR1cCB9IGZyb20gXCIuLi90eXBlc1wiO1xuXG5sZXQgX2ZzOiB0eXBlb2YgaW1wb3J0KFwibm9kZTpmcy9wcm9taXNlc1wiKSB8IHVuZGVmaW5lZDtcbmxldCBfcGF0aDogdHlwZW9mIGltcG9ydChcIm5vZGU6cGF0aFwiKSB8IHVuZGVmaW5lZDtcblxuYXN5bmMgZnVuY3Rpb24gZnMoKSB7XG4gIGlmICghX2ZzKSB7XG4gICAgX2ZzID0gYXdhaXQgaW1wb3J0KFwibm9kZTpmcy9wcm9taXNlc1wiKTtcbiAgfVxuICByZXR1cm4gX2ZzO1xufVxuYXN5bmMgZnVuY3Rpb24gcGF0aCgpIHtcbiAgaWYgKCFfcGF0aCkge1xuICAgIF9wYXRoID0gYXdhaXQgaW1wb3J0KFwibm9kZTpwYXRoXCIpO1xuICB9XG4gIHJldHVybiBfcGF0aDtcbn1cblxudHlwZSBXcml0ZUxvY2tTdGF0ZSA9IHtcbiAgbG9ja2VkOiBib29sZWFuO1xuICB3YWl0ZXJzOiBBcnJheTwoKSA9PiB2b2lkPjtcbn07XG5cbmZ1bmN0aW9uIGNyZWF0ZVdyaXRlTG9jaygpIHtcbiAgY29uc3QgbG9ja3MgPSBuZXcgTWFwPHN0cmluZywgV3JpdGVMb2NrU3RhdGU+KCk7XG5cbiAgcmV0dXJuIGFzeW5jIGZ1bmN0aW9uIHdpdGhXcml0ZUxvY2s8VD4ob3B0czoge1xuICAgIGtleTogc3RyaW5nO1xuICAgIGZuOiAoKSA9PiBQcm9taXNlPFQ+O1xuICB9KTogUHJvbWlzZTxUPiB7XG4gICAgbGV0IHN0YXRlID0gbG9ja3MuZ2V0KG9wdHMua2V5KTtcbiAgICBpZiAoIXN0YXRlKSB7XG4gICAgICBzdGF0ZSA9IHsgbG9ja2VkOiBmYWxzZSwgd2FpdGVyczogW10gfTtcbiAgICAgIGxvY2tzLnNldChvcHRzLmtleSwgc3RhdGUpO1xuICAgIH1cblxuICAgIGlmIChzdGF0ZS5sb2NrZWQpIHtcbiAgICAgIGF3YWl0IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG4gICAgICAgIHN0YXRlLndhaXRlcnMucHVzaChyZXNvbHZlKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHN0YXRlLmxvY2tlZCA9IHRydWU7XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IG9wdHMuZm4oKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgY29uc3QgbmV4dCA9IHN0YXRlLndhaXRlcnMuc2hpZnQoKTtcbiAgICAgIGlmIChuZXh0KSB7XG4gICAgICAgIG5leHQoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXRlLmxvY2tlZCA9IGZhbHNlO1xuICAgICAgICBsb2Nrcy5kZWxldGUob3B0cy5rZXkpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlU3RvcmU8VD4oZGlyOiBzdHJpbmcpIHtcbiAgY29uc3QgZmlsZVBhdGggPSBhc3luYyAoa2V5OiBzdHJpbmcpID0+XG4gICAgKGF3YWl0IHBhdGgoKSkuam9pbihkaXIsIGAke2tleX0uanNvbmApO1xuICBjb25zdCB3aXRoV3JpdGVMb2NrID0gY3JlYXRlV3JpdGVMb2NrKCk7XG5cbiAgcmV0dXJuIHtcbiAgICBhc3luYyBnZXQoa2V5OiBzdHJpbmcpOiBQcm9taXNlPFQgfCBudWxsPiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgKGF3YWl0IGZzKCkpLnJlYWRGaWxlKGF3YWl0IGZpbGVQYXRoKGtleSksIFwidXRmLThcIik7XG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKGRhdGEpIGFzIFQ7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfSxcbiAgICBhc3luYyBzZXQoa2V5OiBzdHJpbmcsIHZhbHVlOiBUKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICBhd2FpdCB3aXRoV3JpdGVMb2NrKHtcbiAgICAgICAga2V5LFxuICAgICAgICBmbjogYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHAgPSBhd2FpdCBmaWxlUGF0aChrZXkpO1xuICAgICAgICAgIGNvbnN0IHsgbWtkaXIsIHdyaXRlRmlsZSB9ID0gYXdhaXQgZnMoKTtcbiAgICAgICAgICBjb25zdCB7IGRpcm5hbWUgfSA9IGF3YWl0IHBhdGgoKTtcbiAgICAgICAgICBhd2FpdCBta2RpcihkaXJuYW1lKHApLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgICAgICBhd2FpdCB3cml0ZUZpbGUocCwgSlNPTi5zdHJpbmdpZnkodmFsdWUsIG51bGwsIDIpKTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgdXBkYXRlKGtleTogc3RyaW5nLCB1cGRhdGVzOiBQYXJ0aWFsPFQ+KTogUHJvbWlzZTxUPiB7XG4gICAgICByZXR1cm4gd2l0aFdyaXRlTG9jayh7XG4gICAgICAgIGtleSxcbiAgICAgICAgZm46IGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCBwID0gYXdhaXQgZmlsZVBhdGgoa2V5KTtcbiAgICAgICAgICBjb25zdCB7IHJlYWRGaWxlLCBta2Rpciwgd3JpdGVGaWxlIH0gPSBhd2FpdCBmcygpO1xuICAgICAgICAgIGNvbnN0IHsgZGlybmFtZSB9ID0gYXdhaXQgcGF0aCgpO1xuICAgICAgICAgIGxldCBleGlzdGluZzogVDtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlYWRGaWxlKHAsIFwidXRmLThcIik7XG4gICAgICAgICAgICBleGlzdGluZyA9IEpTT04ucGFyc2UoZGF0YSkgYXMgVDtcbiAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm90IGZvdW5kOiAke2tleX1gKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgdXBkYXRlZCA9IHsgLi4uZXhpc3RpbmcsIC4uLnVwZGF0ZXMgfTtcbiAgICAgICAgICBhd2FpdCBta2RpcihkaXJuYW1lKHApLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgICAgICBhd2FpdCB3cml0ZUZpbGUocCwgSlNPTi5zdHJpbmdpZnkodXBkYXRlZCwgbnVsbCwgMikpO1xuICAgICAgICAgIHJldHVybiB1cGRhdGVkO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSxcbiAgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVhZEFsbEZyb21EaXI8VD4oZGlyOiBzdHJpbmcpOiBQcm9taXNlPFRbXT4ge1xuICBjb25zdCB7IHJlYWRkaXIsIHJlYWRGaWxlIH0gPSBhd2FpdCBmcygpO1xuICBjb25zdCB7IGpvaW4gfSA9IGF3YWl0IHBhdGgoKTtcbiAgbGV0IGZpbGVzOiBzdHJpbmdbXTtcbiAgdHJ5IHtcbiAgICBmaWxlcyA9IGF3YWl0IHJlYWRkaXIoZGlyKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIGNvbnN0IHJlc3VsdDogVFtdID0gW107XG4gIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xuICAgIGlmICghZmlsZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZWFkRmlsZShqb2luKGRpciwgZmlsZSksIFwidXRmLThcIik7XG4gICAgICByZXN1bHQucHVzaChKU09OLnBhcnNlKGRhdGEpIGFzIFQpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gc2tpcCBjb3JydXB0IGZpbGVzXG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGVuc3VyZUdpdGlnbm9yZShkaXI6IHN0cmluZykge1xuICBjb25zdCB7IG1rZGlyLCB3cml0ZUZpbGUsIHJlYWRGaWxlIH0gPSBhd2FpdCBmcygpO1xuICBjb25zdCB7IGpvaW4gfSA9IGF3YWl0IHBhdGgoKTtcbiAgY29uc3QgZ2l0aWdub3JlUGF0aCA9IGpvaW4oZGlyLCBcIi5naXRpZ25vcmVcIik7XG4gIHRyeSB7XG4gICAgYXdhaXQgcmVhZEZpbGUoZ2l0aWdub3JlUGF0aCwgXCJ1dGYtOFwiKTtcbiAgfSBjYXRjaCB7XG4gICAgYXdhaXQgbWtkaXIoZGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICBhd2FpdCB3cml0ZUZpbGUoZ2l0aWdub3JlUGF0aCwgXCIqXFxuXCIpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2NhbFN0b3JhZ2Uob3B0cz86IHsgZGlyPzogc3RyaW5nIH0pOiBTdG9yYWdlSGFuZGxlcnMge1xuICBjb25zdCBkaXIgPSBvcHRzPy5kaXIgPz8gXCIuYWdlbnRcIjtcbiAgbGV0IGdpdGlnbm9yZVByb21pc2U6IFByb21pc2U8dm9pZD4gfCBudWxsID0gbnVsbDtcblxuICBjb25zdCBzZXNzaW9uU3RvcmUgPSBjcmVhdGVTdG9yZTxTZXNzaW9uPihgJHtkaXJ9L3Nlc3Npb25gKTtcbiAgY29uc3QgbWVzc2FnZVN0b3JlID0gY3JlYXRlU3RvcmU8TWVzc2FnZT4oYCR7ZGlyfS9tZXNzYWdlYCk7XG4gIGNvbnN0IHBhcnRTdG9yZSA9IGNyZWF0ZVN0b3JlPFBhcnQ+KGAke2Rpcn0vcGFydGApO1xuICBjb25zdCBzYW5kYm94U3RvcmUgPSBjcmVhdGVTdG9yZTxTYW5kYm94PihgJHtkaXJ9L3NhbmRib3hgKTtcbiAgY29uc3Qgc2V0dXBTdG9yZSA9IGNyZWF0ZVN0b3JlPFNldHVwPihgJHtkaXJ9L3NldHVwYCk7XG4gIGNvbnN0IG1lc3NhZ2VEaXIgPSBgJHtkaXJ9L21lc3NhZ2VgO1xuICBjb25zdCBwYXJ0RGlyID0gYCR7ZGlyfS9wYXJ0YDtcblxuICBmdW5jdGlvbiBvbldyaXRlPFQ+KGZuOiAoKSA9PiBQcm9taXNlPFQ+KTogUHJvbWlzZTxUPiB7XG4gICAgaWYgKCFnaXRpZ25vcmVQcm9taXNlKSB7XG4gICAgICBnaXRpZ25vcmVQcm9taXNlID0gZW5zdXJlR2l0aWdub3JlKGRpcik7XG4gICAgfVxuICAgIHJldHVybiBnaXRpZ25vcmVQcm9taXNlLnRoZW4oZm4pO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBcInNlc3Npb24uZ2V0XCI6ICh7IGlkIH0pID0+IHNlc3Npb25TdG9yZS5nZXQoaWQpLFxuICAgIFwic2Vzc2lvbi5zZXRcIjogKHsgaWQsIHZhbHVlIH0pID0+XG4gICAgICBvbldyaXRlKCgpID0+IHNlc3Npb25TdG9yZS5zZXQoaWQsIHZhbHVlKSksXG4gICAgXCJzZXNzaW9uLnVwZGF0ZVwiOiAoeyBpZCwgdXBkYXRlcyB9KSA9PlxuICAgICAgb25Xcml0ZSgoKSA9PiBzZXNzaW9uU3RvcmUudXBkYXRlKGlkLCB1cGRhdGVzKSksXG5cbiAgICBcIm1lc3NhZ2UuZ2V0XCI6ICh7IGlkIH0pID0+IG1lc3NhZ2VTdG9yZS5nZXQoaWQpLFxuICAgIFwibWVzc2FnZS5zZXRcIjogKHsgaWQsIHZhbHVlIH0pID0+XG4gICAgICBvbldyaXRlKCgpID0+IG1lc3NhZ2VTdG9yZS5zZXQoaWQsIHZhbHVlKSksXG4gICAgXCJtZXNzYWdlLnVwZGF0ZVwiOiAoeyBpZCwgdXBkYXRlcyB9KSA9PlxuICAgICAgb25Xcml0ZSgoKSA9PiBtZXNzYWdlU3RvcmUudXBkYXRlKGlkLCB1cGRhdGVzKSksXG4gICAgXCJtZXNzYWdlLmxpc3RCeVNlc3Npb25cIjogYXN5bmMgKHsgc2Vzc2lvbklkIH0pID0+IHtcbiAgICAgIGNvbnN0IGFsbCA9IGF3YWl0IHJlYWRBbGxGcm9tRGlyPE1lc3NhZ2U+KG1lc3NhZ2VEaXIpO1xuICAgICAgcmV0dXJuIGFsbC5maWx0ZXIoKG0pID0+IG0uc2Vzc2lvbklkID09PSBzZXNzaW9uSWQpO1xuICAgIH0sXG5cbiAgICBcInBhcnQuZ2V0XCI6ICh7IGlkIH0pID0+IHBhcnRTdG9yZS5nZXQoaWQpLFxuICAgIFwicGFydC5zZXRcIjogKHsgaWQsIHZhbHVlIH0pID0+IG9uV3JpdGUoKCkgPT4gcGFydFN0b3JlLnNldChpZCwgdmFsdWUpKSxcbiAgICBcInBhcnQubGlzdEJ5U2Vzc2lvblwiOiBhc3luYyAoeyBzZXNzaW9uSWQgfSkgPT4ge1xuICAgICAgY29uc3QgYWxsID0gYXdhaXQgcmVhZEFsbEZyb21EaXI8UGFydD4ocGFydERpcik7XG4gICAgICByZXR1cm4gYWxsLmZpbHRlcigocCkgPT4gcC5zZXNzaW9uSWQgPT09IHNlc3Npb25JZCk7XG4gICAgfSxcblxuICAgIFwic2FuZGJveC5nZXRcIjogKHsgaWQgfSkgPT4gc2FuZGJveFN0b3JlLmdldChpZCksXG4gICAgXCJzYW5kYm94LnNldFwiOiAoeyBpZCwgdmFsdWUgfSkgPT5cbiAgICAgIG9uV3JpdGUoKCkgPT4gc2FuZGJveFN0b3JlLnNldChpZCwgdmFsdWUpKSxcbiAgICBcInNhbmRib3gudXBkYXRlXCI6ICh7IGlkLCB1cGRhdGVzIH0pID0+XG4gICAgICBvbldyaXRlKCgpID0+IHNhbmRib3hTdG9yZS51cGRhdGUoaWQsIHVwZGF0ZXMpKSxcblxuICAgIFwic2V0dXAuZ2V0XCI6ICh7IGlkIH0pID0+IHNldHVwU3RvcmUuZ2V0KGlkKSxcbiAgICBcInNldHVwLnNldFwiOiAoeyBpZCwgdmFsdWUgfSkgPT4gb25Xcml0ZSgoKSA9PiBzZXR1cFN0b3JlLnNldChpZCwgdmFsdWUpKSxcbiAgfTtcbn1cbiIsICJleHBvcnQgZnVuY3Rpb24gc2hvdWxkRmFsbGJhY2tUb0tWMigpOiBib29sZWFuIHtcbiAgcmV0dXJuICEhcHJvY2Vzcy5lbnYuQkxPQl9SRUFEX1dSSVRFX1RPS0VOO1xufVxuIiwgImltcG9ydCB0eXBlIHtcbiAgSW5mZXJUb29sSW5wdXQsXG4gIEluZmVyVUlUb29scyxcbiAgTW9kZWxNZXNzYWdlLFxuICBUb29sU2V0LFxuICBVSU1lc3NhZ2UsXG59IGZyb20gXCJhaVwiO1xuaW1wb3J0ICogYXMgZXJyb3JlIGZyb20gXCJlcnJvcmVcIjtcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5pbXBvcnQgdHlwZSB7IEJ1aWx0SW5Ub29sTmFtZSwgYnVpbHRJblRvb2xzLCBUb29sQ29udGV4dCB9IGZyb20gXCIuLi90b29sc1wiO1xuaW1wb3J0IHR5cGUgeyBBbnlBZ2VudCB9IGZyb20gXCIuL2NsaWVudFwiO1xuXG4vLyBcdTI1MDBcdTI1MDBcdTI1MDAgQWdlbnQgU3RhdHVzIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG4vKipcbiAqIFRyYW5zaWVudCBzdGF0dXMgaW5kaWNhdG9ycyBlbWl0dGVkIG92ZXIgdGhlIHN0cmVhbSBkdXJpbmcgbG9uZy1ydW5uaW5nIHBoYXNlcy5cbiAqIERlbGl2ZXJlZCB0byB0aGUgY2xpZW50IGFzIGBkYXRhLXN0YXR1c2AgY2h1bmtzIHdpdGggYHRyYW5zaWVudDogdHJ1ZWAgXHUyMDE0IG5vdCBwZXJzaXN0ZWQuXG4gKi9cbmV4cG9ydCBjb25zdCBBZ2VudFN0YXR1cyA9IHouZGlzY3JpbWluYXRlZFVuaW9uKFwidHlwZVwiLCBbXG4gIHoub2JqZWN0KHsgdHlwZTogei5saXRlcmFsKFwic2FuZGJveC1zZXR1cFwiKSB9KSxcbiAgei5vYmplY3QoeyB0eXBlOiB6LmxpdGVyYWwoXCJzYW5kYm94LXNldHVwLWNvbGRcIikgfSksXG4gIHoub2JqZWN0KHsgdHlwZTogei5saXRlcmFsKFwibG9hZGluZy1za2lsbHNcIikgfSksXG4gIHoub2JqZWN0KHsgdHlwZTogei5saXRlcmFsKFwicHJvY2Vzc2luZy1hcHByb3ZhbHNcIikgfSksXG4gIHoub2JqZWN0KHsgdHlwZTogei5saXRlcmFsKFwibmVlZHMtYXBwcm92YWxcIikgfSksXG4gIHoub2JqZWN0KHsgdHlwZTogei5saXRlcmFsKFwidGhpbmtpbmdcIikgfSksXG4gIHoub2JqZWN0KHsgdHlwZTogei5saXRlcmFsKFwiY3VzdG9tXCIpLCBzdGF0dXM6IHouc3RyaW5nKCkgfSksXG5dKTtcblxuZXhwb3J0IHR5cGUgQWdlbnRTdGF0dXMgPSB6LmluZmVyPHR5cGVvZiBBZ2VudFN0YXR1cz47XG5cbmV4cG9ydCB0eXBlIEFnZW50RGF0YVR5cGVzID0geyBzdGF0dXM6IEFnZW50U3RhdHVzIH07XG5cbi8vIFx1MjUwMFx1MjUwMFx1MjUwMCBIb29rcyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuZXhwb3J0IHR5cGUgQWdlbnRIb29rcyA9IHtcbiAgXCJ0b29sLmJlZm9yZVwiPzogKG9wdHM6IHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgaW5wdXQ6IHVua25vd247XG4gICAgY29udGV4dDogVG9vbENvbnRleHQ7XG4gIH0pID0+IFByb21pc2U8dW5kZWZpbmVkIHwgeyBpbnB1dDogdW5rbm93biB9PjtcbiAgXCJ0b29sLmFmdGVyXCI/OiAob3B0czoge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBpbnB1dDogdW5rbm93bjtcbiAgICByZXN1bHQ6IHVua25vd247XG4gICAgY29udGV4dDogVG9vbENvbnRleHQ7XG4gIH0pID0+IFByb21pc2U8dW5kZWZpbmVkIHwgeyByZXN1bHQ6IHVua25vd24gfT47XG4gIHN0YXR1cz86IChzdGF0dXM6IEFnZW50U3RhdHVzKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPjtcbn07XG5cbi8vIFx1MjUwMFx1MjUwMFx1MjUwMCBOZWVkcyBBcHByb3ZhbCBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxudHlwZSBUb29sTmFtZTxUb29scz4gPSBFeHRyYWN0PGtleW9mIFRvb2xzLCBzdHJpbmc+IHwgQnVpbHRJblRvb2xOYW1lO1xuXG50eXBlIFRvb2xJbnB1dDxUb29scywgSz4gPSBLIGV4dGVuZHMgQnVpbHRJblRvb2xOYW1lXG4gID8gSW5mZXJUb29sSW5wdXQ8KHR5cGVvZiBidWlsdEluVG9vbHMpW0tdPlxuICA6IEsgZXh0ZW5kcyBrZXlvZiBUb29sc1xuICAgID8gVG9vbHNbS10gZXh0ZW5kcyBpbXBvcnQoXCJhaVwiKS5Ub29sXG4gICAgICA/IEluZmVyVG9vbElucHV0PFRvb2xzW0tdPlxuICAgICAgOiB1bmtub3duXG4gICAgOiB1bmtub3duO1xuXG5leHBvcnQgdHlwZSBOZWVkc0FwcHJvdmFsTWFwPFRvb2xzPiA9IHtcbiAgW0sgaW4gVG9vbE5hbWU8VG9vbHM+XT86XG4gICAgfCBib29sZWFuXG4gICAgfCAoKFxuICAgICAgICBpbnB1dDogVG9vbElucHV0PFRvb2xzLCBLPixcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIHRvb2xDYWxsSWQ6IHN0cmluZztcbiAgICAgICAgICBtZXNzYWdlczogTW9kZWxNZXNzYWdlW107XG4gICAgICAgICAgZXhwZXJpbWVudGFsX2NvbnRleHQ6IHVua25vd247XG4gICAgICAgIH1cbiAgICAgICkgPT4gYm9vbGVhbiB8IFByb21pc2U8Ym9vbGVhbj4pO1xufTtcblxuLy8gXHUyNTAwXHUyNTAwXHUyNTAwIEluZmVyIFVJIE1lc3NhZ2UgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmV4cG9ydCB0eXBlIEluZmVyVUlNZXNzYWdlPEE+ID0gQSBleHRlbmRzIHtcbiAgdG9vbHM6IGluZmVyIFQgZXh0ZW5kcyBUb29sU2V0O1xuICAkVUlNZXNzYWdlOiBVSU1lc3NhZ2U8aW5mZXIgTT47XG59XG4gID8gVUlNZXNzYWdlPE0sIEFnZW50RGF0YVR5cGVzLCBJbmZlclVJVG9vbHM8VD4+XG4gIDogQSBleHRlbmRzIHsgdG9vbHM6IGluZmVyIFQgZXh0ZW5kcyBUb29sU2V0IH1cbiAgICA/IFVJTWVzc2FnZTx1bmtub3duLCBBZ2VudERhdGFUeXBlcywgSW5mZXJVSVRvb2xzPFQ+PlxuICAgIDogVUlNZXNzYWdlPHVua25vd24sIEFnZW50RGF0YVR5cGVzPjtcblxuZXhwb3J0IHR5cGUgVHlwZWRVSU1lc3NhZ2U8XG4gIFRNZXNzYWdlTWV0YWRhdGEgPSB1bmtub3duLFxuICBUb29scyBleHRlbmRzIFRvb2xTZXQgPSBUb29sU2V0LFxuPiA9IFVJTWVzc2FnZTxUTWVzc2FnZU1ldGFkYXRhLCBBZ2VudERhdGFUeXBlcywgSW5mZXJVSVRvb2xzPFRvb2xzPj47XG5cbi8vIFx1MjUwMFx1MjUwMFx1MjUwMCBSZWdpc3RyeSBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuY2xhc3MgQWdlbnROb3RGb3VuZEVycm9yIGV4dGVuZHMgZXJyb3JlLmNyZWF0ZVRhZ2dlZEVycm9yKHtcbiAgbmFtZTogXCJBZ2VudE5vdEZvdW5kRXJyb3JcIixcbiAgbWVzc2FnZTogYEFnZW50IFwiJGFnZW50TmFtZVwiIG5vdCBmb3VuZCBpbiByZWdpc3RyeS5cblxuaGludDogYWdlbnQoKSBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgd29ya2Zsb3cgc3RlcHMgZXhlY3V0ZS5cbiAgICAgIFZhbGlkIGxvY2F0aW9uczogbW9kdWxlIHNjb3BlLCBvciBpbnNpZGUgYSBcInVzZSB3b3JrZmxvd1wiIGJvZHkuXG5cbiAgLy8gTW9kdWxlIHNjb3BlIChzdGF0aWMgYWdlbnRzKVxuICBleHBvcnQgY29uc3QgbXlBZ2VudCA9IGFnZW50KFwiJGFnZW50TmFtZVwiLCB7IC4uLiB9KTtcblxuICAvLyBXb3JrZmxvdyBib2R5IChkeW5hbWljIGFnZW50cylcbiAgYXN5bmMgZnVuY3Rpb24gbXlXb3JrZmxvdyh7IGlucHV0IH0pIHtcbiAgICBcInVzZSB3b3JrZmxvd1wiO1xuICAgIGNvbnN0IG15QWdlbnQgPSBhZ2VudChcIiRhZ2VudE5hbWVcIiwgeyAuLi4gfSk7XG4gICAgLi4uXG4gIH1gLFxufSkge31cblxuY29uc3QgQUdFTlRfUkVHSVNUUllfS0VZID0gU3ltYm9sLmZvcihcImV4cGVyaW1lbnRhbC1hZ2VudC1yZWdpc3RyeVwiKTtcblxuZnVuY3Rpb24gZ2V0QWdlbnRSZWdpc3RyeSgpOiBNYXA8c3RyaW5nLCBBbnlBZ2VudD4ge1xuICBjb25zdCBnID0gZ2xvYmFsVGhpcyBhcyBSZWNvcmQ8c3ltYm9sLCB1bmtub3duPjtcbiAgbGV0IHJlZ2lzdHJ5ID0gZ1tBR0VOVF9SRUdJU1RSWV9LRVldIGFzIE1hcDxzdHJpbmcsIEFueUFnZW50PiB8IHVuZGVmaW5lZDtcbiAgaWYgKCFyZWdpc3RyeSkge1xuICAgIHJlZ2lzdHJ5ID0gbmV3IE1hcCgpO1xuICAgIGdbQUdFTlRfUkVHSVNUUllfS0VZXSA9IHJlZ2lzdHJ5O1xuICB9XG4gIHJldHVybiByZWdpc3RyeTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyQWdlbnQobmFtZTogc3RyaW5nLCBhZ2VudDogQW55QWdlbnQpIHtcbiAgZ2V0QWdlbnRSZWdpc3RyeSgpLnNldChuYW1lLCBhZ2VudCk7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0QWdlbnQ8UmVxdWlyZWQgZXh0ZW5kcyBib29sZWFuPihcbiAgbmFtZTogc3RyaW5nLFxuICByZXF1aXJlZD86IFJlcXVpcmVkXG4pOiBSZXF1aXJlZCBleHRlbmRzIHRydWUgPyBBbnlBZ2VudCA6IEFueUFnZW50IHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgYWdlbnQgPSBnZXRBZ2VudFJlZ2lzdHJ5KCkuZ2V0KG5hbWUpO1xuICBpZiAocmVxdWlyZWQgJiYgIWFnZW50KSB7XG4gICAgdGhyb3cgbmV3IEFnZW50Tm90Rm91bmRFcnJvcih7IGFnZW50TmFtZTogbmFtZSB9KTtcbiAgfVxuICByZXR1cm4gYWdlbnQgYXMgUmVxdWlyZWQgZXh0ZW5kcyB0cnVlID8gQW55QWdlbnQgOiBBbnlBZ2VudCB8IHVuZGVmaW5lZDtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEFnZW50T3B0aW9ucyB9IGZyb20gXCIuLi9hZ2VudC9jbGllbnRcIjtcbmltcG9ydCB0eXBlIHsgRnNBZ2VudENvbmZpZyB9IGZyb20gXCIuLi9mcmFtZXdvcmstcnVudGltZS9yZXNvbHZlXCI7XG5cbi8qKlxuICogTWVyZ2UgZnMtc2Nhbm5lZCBjb25maWcgb24gdG9wIG9mIHRoZSBhZ2VudC50cyBiYXNlIGNvbmZpZy5cbiAqIFNraWxscyBhcmUgYXBwZW5kZWQuIFN5c3RlbSBwcm9tcHRzIGFyZSBjb25jYXRlbmF0ZWQgKGFycmF5cykuXG4gKiBUaGUgYmFzZSBvcHRpb25zIG1heSBjb250YWluIFJlc29sdmFibGUgdmFsdWVzIChmdW5jdGlvbnMpOyB3aGVuXG4gKiB0aGUgb3ZlcmxheSBoYXMgYSBzdGF0aWMgdmFsdWUgd2Ugd3JhcCB0aGUgYmFzZSByZXNvbHZhYmxlIHNvIHRoZVxuICogZnMgdmFsdWVzIGdldCBhcHBlbmRlZCBhdCByZXNvbHZlIHRpbWUuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlRnJhbWV3b3JrT3B0aW9ucyhcbiAgYmFzZTogQWdlbnRPcHRpb25zLFxuICBvdmVybGF5OiBGc0FnZW50Q29uZmlnXG4pOiBBZ2VudE9wdGlvbnMge1xuICBjb25zdCBtZXJnZWQ6IEFnZW50T3B0aW9ucyA9IHsgLi4uYmFzZSB9O1xuXG4gIGlmIChvdmVybGF5LnN5c3RlbSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKGJhc2Uuc3lzdGVtID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG1lcmdlZC5zeXN0ZW0gPSBvdmVybGF5LnN5c3RlbTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBiYXNlLnN5c3RlbSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICBjb25zdCBiYXNlRm4gPSBiYXNlLnN5c3RlbTtcbiAgICAgIG1lcmdlZC5zeXN0ZW0gPSBhc3luYyAoYXJncykgPT4ge1xuICAgICAgICBjb25zdCByZXNvbHZlZCA9IGF3YWl0IGJhc2VGbihhcmdzKTtcbiAgICAgICAgaWYgKHJlc29sdmVkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXR1cm4gb3ZlcmxheS5zeXN0ZW07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYmFzZUFyciA9IEFycmF5LmlzQXJyYXkocmVzb2x2ZWQpID8gcmVzb2x2ZWQgOiBbcmVzb2x2ZWRdO1xuICAgICAgICByZXR1cm4gWy4uLmJhc2VBcnIsIG92ZXJsYXkuc3lzdGVtIV07XG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBiYXNlQXJyID0gQXJyYXkuaXNBcnJheShiYXNlLnN5c3RlbSkgPyBiYXNlLnN5c3RlbSA6IFtiYXNlLnN5c3RlbV07XG4gICAgICBtZXJnZWQuc3lzdGVtID0gWy4uLmJhc2VBcnIsIG92ZXJsYXkuc3lzdGVtXTtcbiAgICB9XG4gIH1cblxuICBpZiAob3ZlcmxheS5za2lsbHMgIT09IHVuZGVmaW5lZCkge1xuICAgIGlmIChiYXNlLnNraWxscyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBtZXJnZWQuc2tpbGxzID0gb3ZlcmxheS5za2lsbHM7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgYmFzZS5za2lsbHMgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgY29uc3QgYmFzZUZuID0gYmFzZS5za2lsbHM7XG4gICAgICBtZXJnZWQuc2tpbGxzID0gYXN5bmMgKGFyZ3MpID0+IHtcbiAgICAgICAgY29uc3QgcmVzb2x2ZWQgPSBhd2FpdCBiYXNlRm4oYXJncyk7XG4gICAgICAgIHJldHVybiBbLi4uKHJlc29sdmVkID8/IFtdKSwgLi4ub3ZlcmxheS5za2lsbHMhXTtcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIG1lcmdlZC5za2lsbHMgPSBbLi4uYmFzZS5za2lsbHMsIC4uLm92ZXJsYXkuc2tpbGxzXTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbWVyZ2VkO1xufVxuIiwgImltcG9ydCB7IHR5cGUgQW55QWdlbnQsIGFnZW50IGFzIGNyZWF0ZUFnZW50IH0gZnJvbSBcIi4uL2FnZW50L2NsaWVudFwiO1xuaW1wb3J0IHR5cGUgeyBTa2lsbElucHV0IH0gZnJvbSBcIi4uL3NraWxscy90eXBlc1wiO1xuaW1wb3J0IHsgbWVyZ2VGcmFtZXdvcmtPcHRpb25zIH0gZnJvbSBcIi4vbWVyZ2Utb3B0aW9uc1wiO1xuXG4vKipcbiAqIFRoZSBzdWJzZXQgb2YgQWdlbnRPcHRpb25zIHRoYXQgY2FuIGNvbWUgZnJvbSB0aGUgZmlsZXN5c3RlbSBzY2FubmVyLlxuICogQWx3YXlzIHBsYWluIHZhbHVlcyBcdTIwMTQgbmV2ZXIgUmVzb2x2YWJsZSBmdW5jdGlvbnMuXG4gKi9cbmV4cG9ydCB0eXBlIEZzQWdlbnRDb25maWcgPSB7XG4gIHN5c3RlbT86IHN0cmluZztcbiAgc2tpbGxzPzogU2tpbGxJbnB1dFtdO1xufTtcblxuLyoqXG4gKiBBIHNpbmdsZSBlbnRyeSBpbiB0aGUgZ2VuZXJhdGVkIGFnZW50IHJlZ2lzdHJ5LlxuICogQ29udGFpbnMgdGhlIGZpbGVzeXN0ZW0tc2Nhbm5lZCBjb25maWcgYW5kIGFuIG9wdGlvbmFsIGR5bmFtaWMgaW1wb3J0XG4gKiBmb3IgYWdlbnRzIHRoYXQgaGF2ZSBhbiBgYWdlbnQudHNgIG1vZHVsZS5cbiAqL1xuZXhwb3J0IHR5cGUgQWdlbnRSZWdpc3RyeUVudHJ5ID0ge1xuICBjb25maWc6IEZzQWdlbnRDb25maWc7XG4gIGltcG9ydD86ICgpID0+IFByb21pc2U8eyBkZWZhdWx0PzogdW5rbm93biB9Pjtcbn07XG5cbi8qKlxuICogTWFwIG9mIGFnZW50IG5hbWUgdG8gcmVnaXN0cnkgZW50cnksIHByb2R1Y2VkIGJ5IHRoZSBnZW5lcmF0ZWRcbiAqIGBfcmVnaXN0cnkudHNgIGZpbGUgYW5kIGNvbnN1bWVkIGJ5IHtAbGluayBydW50aW1lLnJlc29sdmVBZ2VudH1cbiAqIGF0IHJlcXVlc3QgdGltZS5cbiAqL1xuZXhwb3J0IHR5cGUgQWdlbnRSZWdpc3RyeSA9IFJlY29yZDxzdHJpbmcsIEFnZW50UmVnaXN0cnlFbnRyeT47XG5cbmNvbnN0IHJlc29sdmVkQWdlbnRDYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBBbnlBZ2VudD4oKTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVGcmFtZXdvcmtBZ2VudChvcHRzOiB7XG4gIG5hbWU6IHN0cmluZztcbiAgYWdlbnRzOiBBZ2VudFJlZ2lzdHJ5O1xufSk6IFByb21pc2U8QW55QWdlbnQgfCBudWxsPiB7XG4gIGNvbnN0IHsgbmFtZSwgYWdlbnRzIH0gPSBvcHRzO1xuXG4gIGlmICghT2JqZWN0Lmhhc093bihhZ2VudHMsIG5hbWUpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBlbnRyeSA9IGFnZW50c1tuYW1lXTtcbiAgY29uc3QgY2FjaGVLZXkgPSBuYW1lICsgSlNPTi5zdHJpbmdpZnkoZW50cnkuY29uZmlnKTtcbiAgY29uc3QgY2FjaGVkID0gcmVzb2x2ZWRBZ2VudENhY2hlLmdldChjYWNoZUtleSk7XG4gIGlmIChjYWNoZWQpIHtcbiAgICByZXR1cm4gY2FjaGVkO1xuICB9XG5cbiAgY29uc3QgaW5zdGFuY2UgPSBhd2FpdCByZXNvbHZlRW50cnkoeyBuYW1lLCBlbnRyeSB9KTtcbiAgcmVzb2x2ZWRBZ2VudENhY2hlLnNldChjYWNoZUtleSwgaW5zdGFuY2UpO1xuICByZXR1cm4gaW5zdGFuY2U7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVFbnRyeShvcHRzOiB7XG4gIG5hbWU6IHN0cmluZztcbiAgZW50cnk6IEFnZW50UmVnaXN0cnlFbnRyeTtcbn0pOiBQcm9taXNlPEFueUFnZW50PiB7XG4gIGNvbnN0IHsgbmFtZSwgZW50cnkgfSA9IG9wdHM7XG5cbiAgaWYgKHR5cGVvZiBlbnRyeS5pbXBvcnQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIGNvbnN0IG1vZCA9IGF3YWl0IGVudHJ5LmltcG9ydCgpO1xuICAgIGlmICghbW9kLmRlZmF1bHQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEFnZW50IFwiJHtuYW1lfVwiIG1vZHVsZSBkb2VzIG5vdCBoYXZlIGEgZGVmYXVsdCBleHBvcnQuXFxuXFxuYCArXG4gICAgICAgICAgYGhpbnQ6IGFnZW50cy8ke25hbWV9L2FnZW50LnRzIG11c3QgZXhwb3J0IGEgZGVmYXVsdCBhZ2VudCBpbnN0YW5jZS5cXG5cXG5gICtcbiAgICAgICAgICBgICBpbXBvcnQgeyBhZ2VudCB9IGZyb20gXCJleHBlcmltZW50YWwtYWdlbnRcIjtcXG5gICtcbiAgICAgICAgICBgICBleHBvcnQgZGVmYXVsdCBhZ2VudChcIiR7bmFtZX1cIiwgeyAuLi4gfSk7XFxuYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBpbXBvcnRlZCA9IG1vZC5kZWZhdWx0IGFzIEFueUFnZW50O1xuXG4gICAgaWYgKGhhc0NvbmZpZyhlbnRyeS5jb25maWcpKSB7XG4gICAgICByZXR1cm4gaW1wb3J0ZWQuZXh0ZW5kKChiYXNlKSA9PlxuICAgICAgICBtZXJnZUZyYW1ld29ya09wdGlvbnMoYmFzZSwgZW50cnkuY29uZmlnKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaW1wb3J0ZWQ7XG4gIH1cblxuICByZXR1cm4gY3JlYXRlQWdlbnQobmFtZSwgZW50cnkuY29uZmlnKTtcbn1cblxuZnVuY3Rpb24gaGFzQ29uZmlnKGNvbmZpZzogRnNBZ2VudENvbmZpZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gT2JqZWN0LmtleXMoY29uZmlnKS5sZW5ndGggPiAwO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBMkJBLFNBQVMsU0FBUyxRQUFpQztBQUNqRCxTQUFPLE9BQU8sU0FBUztBQUN6QjtBQUVBLFNBQVMsVUFBVSxRQUErQjtBQUNoRCxTQUFPLE9BQU8sVUFBVTtBQUMxQjtBQUVBLFNBQVMsVUFBVSxRQUF1QixPQUEwQjtBQUNsRSxTQUFPLG1CQUFtQixLQUFLLEtBQUssbUJBQW1CLFNBQVMsTUFBTSxDQUFDO0FBQ3pFO0FBRUEsU0FBUyxVQUFVLFFBQXVCLFdBQTJCO0FBQ25FLFNBQU8sSUFBSSxVQUFVLE1BQU0sQ0FBQyxJQUFJLE9BQU8sSUFBSSxJQUFJLFNBQVM7QUFDMUQ7QUFFQSxTQUFTLFdBQ1AsU0FDQSxPQUNxQztBQUNyQyxRQUFNLFNBQVMsRUFBRSxHQUFHLFNBQVMsR0FBRyxNQUFNO0FBQ3RDLFFBQU0sVUFBVSxPQUFPLFFBQVEsTUFBTSxFQUFFO0FBQUEsSUFDckMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLE1BQU0sVUFBYSxNQUFNO0FBQUEsRUFDdEM7QUFDQSxNQUFJLFFBQVEsV0FBVyxHQUFHO0FBQ3hCLFdBQU87QUFBQSxFQUNUO0FBQ0EsU0FBTyxPQUFPLFlBQVksT0FBTztBQUNuQztBQTRHTyxTQUFTLGFBQWE7QUFBQSxFQUMzQjtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQ0YsR0FJVztBQUNULFNBQU8sSUFBSSxPQUFPLEVBQUUsUUFBUSxXQUFXLFFBQVEsQ0FBQztBQUNsRDtBQTdLQSxJQUVNLG9CQXVETztBQXpEYjtBQUFBO0FBQUE7QUFFQSxJQUFNLHFCQUErQztBQUFBLE1BQ25ELE1BQU07QUFBQSxNQUNOLE1BQU07QUFBQSxNQUNOLE9BQU87QUFBQSxNQUNQLFFBQVE7QUFBQSxJQUNWO0FBa0RPLElBQU0sU0FBTixNQUFNLFFBQU87QUFBQSxNQUNUO0FBQUEsTUFDUTtBQUFBLE1BQ0E7QUFBQSxNQUVqQixZQUFZO0FBQUEsUUFDVjtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsTUFDRixHQUlHO0FBQ0QsYUFBSyxZQUFZO0FBQ2pCLGFBQUssU0FBUztBQUNkLGFBQUssVUFBVSxXQUFXLENBQUM7QUFBQSxNQUM3QjtBQUFBLE1BRUEsTUFBTTtBQUFBLFFBQ0o7QUFBQSxRQUNBO0FBQUEsTUFDRixHQUdXO0FBQ1QsZUFBTyxJQUFJLFFBQU87QUFBQSxVQUNoQixRQUFRLEtBQUs7QUFBQSxVQUNiLFdBQVcsWUFBWSxHQUFHLEtBQUssU0FBUyxJQUFJLFNBQVMsS0FBSyxLQUFLO0FBQUEsVUFDL0QsU0FBUyxFQUFFLEdBQUcsS0FBSyxTQUFTLEdBQUcsUUFBUTtBQUFBLFFBQ3pDLENBQUM7QUFBQSxNQUNIO0FBQUEsTUFFQSxZQUFZLFNBQTZCO0FBQ3ZDLGVBQU8sSUFBSSxRQUFPO0FBQUEsVUFDaEIsUUFBUSxLQUFLO0FBQUEsVUFDYixXQUFXLEtBQUs7QUFBQSxVQUNoQixTQUFTLEVBQUUsR0FBRyxLQUFLLFNBQVMsR0FBRyxRQUFRO0FBQUEsUUFDekMsQ0FBQztBQUFBLE1BQ0g7QUFBQSxNQUVBLEtBQUssU0FBaUIsTUFBc0M7QUFDMUQsWUFBSSxDQUFDLFVBQVUsS0FBSyxRQUFRLE1BQU0sR0FBRztBQUNuQztBQUFBLFFBQ0Y7QUFDQSxjQUFNLElBQUksV0FBVyxLQUFLLFNBQVMsSUFBSTtBQUN2QyxZQUFJLEdBQUc7QUFDTCxrQkFBUSxLQUFLLFVBQVUsS0FBSyxRQUFRLEtBQUssU0FBUyxHQUFHLFNBQVMsQ0FBQztBQUFBLFFBQ2pFLE9BQU87QUFDTCxrQkFBUSxLQUFLLFVBQVUsS0FBSyxRQUFRLEtBQUssU0FBUyxHQUFHLE9BQU87QUFBQSxRQUM5RDtBQUFBLE1BQ0Y7QUFBQSxNQUVBLEtBQUssU0FBaUIsTUFBc0M7QUFDMUQsWUFBSSxDQUFDLFVBQVUsS0FBSyxRQUFRLE1BQU0sR0FBRztBQUNuQztBQUFBLFFBQ0Y7QUFDQSxjQUFNLElBQUksV0FBVyxLQUFLLFNBQVMsSUFBSTtBQUN2QyxZQUFJLEdBQUc7QUFDTCxrQkFBUSxLQUFLLFVBQVUsS0FBSyxRQUFRLEtBQUssU0FBUyxHQUFHLFNBQVMsQ0FBQztBQUFBLFFBQ2pFLE9BQU87QUFDTCxrQkFBUSxLQUFLLFVBQVUsS0FBSyxRQUFRLEtBQUssU0FBUyxHQUFHLE9BQU87QUFBQSxRQUM5RDtBQUFBLE1BQ0Y7QUFBQSxNQUVBLE1BQU0sU0FBaUIsTUFBc0M7QUFDM0QsWUFBSSxDQUFDLFVBQVUsS0FBSyxRQUFRLE9BQU8sR0FBRztBQUNwQztBQUFBLFFBQ0Y7QUFDQSxjQUFNLElBQUksV0FBVyxLQUFLLFNBQVMsSUFBSTtBQUN2QyxZQUFJLEdBQUc7QUFDTCxrQkFBUSxNQUFNLFVBQVUsS0FBSyxRQUFRLEtBQUssU0FBUyxHQUFHLFNBQVMsQ0FBQztBQUFBLFFBQ2xFLE9BQU87QUFDTCxrQkFBUSxNQUFNLFVBQVUsS0FBSyxRQUFRLEtBQUssU0FBUyxHQUFHLE9BQU87QUFBQSxRQUMvRDtBQUFBLE1BQ0Y7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLE1BWUEsS0FDRSxTQUNBLE1BQ0EsTUFDNkM7QUFDN0MsWUFBSSxNQUFNLFlBQVk7QUFDcEIsZUFBSyxLQUFLLFdBQVcsT0FBTyxJQUFJLElBQUk7QUFBQSxRQUN0QztBQUNBLGNBQU0sS0FBSyxLQUFLLElBQUk7QUFDcEIsZUFBTyxDQUFDLFlBQXNDO0FBQzVDLGVBQUssS0FBSyxNQUFNLGFBQWEsU0FBUyxPQUFPLEtBQUssU0FBUztBQUFBLFlBQ3pELEdBQUc7QUFBQSxZQUNILEdBQUc7QUFBQSxZQUNILFlBQVksS0FBSyxJQUFJLElBQUk7QUFBQSxVQUMzQixDQUFDO0FBQUEsUUFDSDtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQUE7QUFBQTs7O0FDNUpBLGVBQWUsaUJBQW1EO0FBQ2hFLFVBQVEsTUFBTSxPQUFPLGlCQUFpQixHQUFHO0FBQzNDO0FBbUNBLGVBQXNCLHFCQUNwQixPQUNzQztBQUN0QztBQUVBLFFBQU0sVUFBVSxNQUFNLE1BQU07QUFDNUIsUUFBTUEsT0FBTSxhQUFhO0FBQUEsSUFDdkIsUUFBUSxFQUFFLEdBQUcsTUFBTSxNQUFNLFFBQVEsU0FBUyxNQUFNLE1BQU0sTUFBTSxLQUFLO0FBQUEsSUFDakUsV0FBVztBQUFBLElBQ1gsU0FBUyxFQUFFLFdBQVcsTUFBTSxVQUFVO0FBQUEsRUFDeEMsQ0FBQztBQUVELEVBQUFBLEtBQUksS0FBSywyQkFBMkI7QUFBQSxJQUNsQyxpQkFBaUIsTUFBTTtBQUFBLEVBQ3pCLENBQUM7QUFFRCxRQUFNLFNBQVMsTUFBTSxRQUFRLFFBQVEsSUFBSSxNQUFNLFNBQVM7QUFDeEQsTUFBSSxDQUFDLFFBQVE7QUFDWCxJQUFBQSxLQUFJLEtBQUssNkNBQTZDO0FBQ3RELFdBQU8sRUFBRSxRQUFRLFFBQVEsUUFBUSxZQUFZO0FBQUEsRUFDL0M7QUFFQSxRQUFNLFdBQVcsT0FBTyxPQUFPO0FBQy9CLFFBQU0sbUJBQW1CLFVBQVUsYUFBYTtBQUVoRCxNQUFJLHFCQUFxQixNQUFNLGlCQUFpQjtBQUM5QyxJQUFBQSxLQUFJLEtBQUsseUNBQXlDO0FBQUEsTUFDaEQsVUFBVSxNQUFNO0FBQUEsTUFDaEIsUUFBUTtBQUFBLElBQ1YsQ0FBQztBQUNELFdBQU8sRUFBRSxRQUFRLFFBQVEsUUFBUSxvQkFBb0I7QUFBQSxFQUN2RDtBQUVBLE1BQUksQ0FBQyxrQkFBa0I7QUFDckIsSUFBQUEsS0FBSSxLQUFLLHNEQUFzRDtBQUMvRCxXQUFPLEVBQUUsUUFBUSxRQUFRLFFBQVEsWUFBWTtBQUFBLEVBQy9DO0FBRUEsUUFBTSxpQkFDSixNQUFNLFFBQVEsa0JBQWtCO0FBQ2xDLFFBQU0sZ0JBQ0osTUFBTSxRQUFRLHVCQUF1QjtBQUN2QyxRQUFNLDBCQUNKLE1BQU0sUUFBUSwyQkFBMkI7QUFFM0MsUUFBTSxNQUFNLEtBQUssSUFBSTtBQUNyQixRQUFNLGVBQWUsT0FBTyxnQkFBZ0IsT0FBTyxhQUFhO0FBQ2hFLFFBQU0sZUFBZSxNQUFNO0FBQzNCLFFBQU0sMEJBQTBCLGVBQWU7QUFFL0MsTUFBSSw2QkFBNkI7QUFDakMsTUFBSTtBQUNGLFVBQU0sYUFBYSxNQUFNLGVBQWU7QUFDeEMsVUFBTSxVQUFVLE1BQU0sV0FBVyxJQUFJO0FBQUEsTUFDbkMsV0FBVztBQUFBLE1BQ1gsR0FBRyxtQkFBbUI7QUFBQSxJQUN4QixDQUFDO0FBQ0QsUUFBSSxRQUFRLFVBQVUseUJBQXlCO0FBQzdDLG1DQUE2QjtBQUFBLElBQy9CO0FBQUEsRUFDRixRQUFRO0FBQ04sSUFBQUEsS0FBSSxLQUFLLHFEQUFxRDtBQUFBLE1BQzVELGlCQUFpQjtBQUFBLElBQ25CLENBQUM7QUFDRCxXQUFPLEVBQUUsUUFBUSxRQUFRLFFBQVEsWUFBWTtBQUFBLEVBQy9DO0FBRUEsTUFBSSwyQkFBMkIsNEJBQTRCO0FBQ3pELFVBQU0sU0FBUywwQkFBMEIsU0FBUztBQUNsRCxJQUFBQSxLQUFJLEtBQUssb0NBQW9DO0FBQUEsTUFDM0M7QUFBQSxNQUNBLGdCQUFnQjtBQUFBLE1BQ2hCLGlCQUFpQjtBQUFBLElBQ25CLENBQUM7QUFFRCxRQUFJO0FBQ0YsWUFBTSxhQUFhLE1BQU0sZUFBZTtBQUN4QyxZQUFNLFVBQVUsTUFBTSxXQUFXLElBQUk7QUFBQSxRQUNuQyxXQUFXO0FBQUEsUUFDWCxHQUFHLG1CQUFtQjtBQUFBLE1BQ3hCLENBQUM7QUFDRCxZQUFNQyxZQUFXLE1BQU0sUUFBUSxTQUFTO0FBQ3hDLE1BQUFELEtBQUksS0FBSyxvQkFBb0IsRUFBRSxZQUFZQyxVQUFTLFdBQVcsQ0FBQztBQUVoRSxZQUFNLFFBQVEsUUFBUSxPQUFPLE1BQU0sV0FBVztBQUFBLFFBQzVDLE9BQU87QUFBQSxVQUNMLEdBQUcsT0FBTztBQUFBLFVBQ1YsVUFBVSxFQUFFLFdBQVcsTUFBTSxZQUFZQSxVQUFTLFdBQVc7QUFBQSxRQUMvRDtBQUFBLE1BQ0YsQ0FBQztBQUNELE1BQUFELEtBQUksS0FBSyxzQ0FBc0M7QUFBQSxJQUNqRCxTQUFTLEdBQUc7QUFDVixNQUFBQSxLQUFJLE1BQU0sOEJBQThCLEVBQUUsT0FBTyxFQUFFLENBQUM7QUFDcEQsYUFBTyxhQUFhLFFBQVEsSUFBSSxJQUFJLE1BQU0sT0FBTyxDQUFDLENBQUM7QUFBQSxJQUNyRDtBQUNBLFdBQU8sRUFBRSxRQUFRLFFBQVEsT0FBTztBQUFBLEVBQ2xDO0FBRUEsRUFBQUEsS0FBSSxLQUFLLDhDQUE4QztBQUFBLElBQ3JELGdCQUFnQjtBQUFBLElBQ2hCLFlBQVk7QUFBQSxFQUNkLENBQUM7QUFDRCxTQUFPLEVBQUUsUUFBUSxZQUFZLFlBQVksZUFBZTtBQUMxRDtBQWpKQSxJQVNNLDBCQUNBLHlCQUNBLDRCQUVBO0FBYk47QUFBQTtBQUFBO0FBQ0E7QUFRQSxJQUFNLDJCQUEyQixJQUFJLEtBQUs7QUFDMUMsSUFBTSwwQkFBMEIsSUFBSSxLQUFLO0FBQ3pDLElBQU0sNkJBQTZCLEtBQUssS0FBSztBQUU3QyxJQUFNLHFCQUFxQixNQUN6QixRQUFRLElBQUksYUFBYSxTQUNyQjtBQUFBLE1BQ0UsT0FBTyxRQUFRLElBQUk7QUFBQSxNQUNuQixRQUFRLFFBQVEsSUFBSTtBQUFBLE1BQ3BCLFdBQVcsUUFBUSxJQUFJO0FBQUEsSUFDekIsSUFDQSxDQUFDO0FBQUE7QUFBQTs7O0FDWlAsZUFBc0IseUJBQXlCO0FBQUEsRUFDN0M7QUFDRixHQUVHO0FBQ0Q7QUFFQSxNQUFJLGFBQWEsTUFBTSxRQUFRLGtCQUFrQjtBQUNqRCxRQUFNRSxPQUFNLGFBQWE7QUFBQSxJQUN2QixRQUFRLEVBQUUsR0FBRyxNQUFNLE1BQU0sUUFBUSxTQUFTLE1BQU0sTUFBTSxNQUFNLEtBQUs7QUFBQSxJQUNqRSxXQUFXO0FBQUEsSUFDWCxTQUFTLEVBQUUsV0FBVyxNQUFNLFVBQVU7QUFBQSxFQUN4QyxDQUFDO0FBRUQsRUFBQUEsS0FBSSxLQUFLLDhCQUE4QjtBQUFBLElBQ3JDLFdBQVcsTUFBTTtBQUFBLElBQ2pCLGlCQUFpQixNQUFNO0FBQUEsSUFDdkIsUUFBUTtBQUFBLEVBQ1YsQ0FBQztBQUVELFNBQU8sTUFBTTtBQUNYLGNBQU0sdUJBQU0sVUFBVTtBQUV0QixVQUFNLFNBQVMsTUFBTSxxQkFBcUIsS0FBSztBQUUvQyxRQUFJLGtCQUFrQixPQUFPO0FBQzNCLE1BQUFBLEtBQUksTUFBTSx5QkFBeUI7QUFBQSxRQUNqQyxXQUFXLE1BQU07QUFBQSxRQUNqQixPQUFPLE9BQU87QUFBQSxNQUNoQixDQUFDO0FBQ0Q7QUFBQSxJQUNGO0FBRUEsUUFBSSxPQUFPLFdBQVcsUUFBUTtBQUM1QixNQUFBQSxLQUFJLEtBQUssOEJBQThCO0FBQUEsUUFDckMsV0FBVyxNQUFNO0FBQUEsUUFDakIsUUFBUSxPQUFPO0FBQUEsTUFDakIsQ0FBQztBQUNEO0FBQUEsSUFDRjtBQUVBLGlCQUFhLE9BQU87QUFBQSxFQUN0QjtBQUNGO0FBbkRBLHFCQU1NO0FBTk47QUFBQTtBQUFBO0FBQUEsc0JBQXNCO0FBQ3RCO0FBQ0E7QUFJQSxJQUFNLGtCQUFrQixJQUFJLEtBQUs7QUFBQTtBQUFBOzs7QUNOakM7QUFBQTtBQUFBO0FBQUE7QUFPQSxlQUFlQyxrQkFBaUI7QUFDOUIsVUFBUSxNQUFNLE9BQU8saUJBQWlCLEdBQUc7QUFDM0M7QUEwQkEsU0FBUyxtQkFBbUIsR0FBcUI7QUFDL0MsTUFBSSxFQUFFLGFBQWEsUUFBUTtBQUN6QixXQUFPO0FBQUEsRUFDVDtBQUVBLFFBQU0sU0FDSCxFQUF5QyxVQUFVLFVBQ25ELEVBQXFELE9BQU8sVUFDekQ7QUFFTixNQUFJLFdBQVcsT0FBTyxXQUFXLEtBQUs7QUFDcEMsV0FBTztBQUFBLEVBQ1Q7QUFFQSxRQUFNLE1BQU0sRUFBRSxXQUFXLE9BQU8sQ0FBQztBQUNqQyxTQUNFLElBQUksU0FBUyxtQ0FBbUMsS0FDaEQsSUFBSSxTQUFTLDJCQUEyQjtBQUU1QztBQVdBLGVBQWUsVUFBVTtBQUFBLEVBQ3ZCO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQ0YsR0FBc0I7QUFDcEIsUUFBTSxhQUFhLE1BQU1BLGdCQUFlO0FBQ3hDLFFBQU0sT0FBTztBQUFBLElBQ1g7QUFBQSxJQUNBLFNBQVM7QUFBQSxJQUNULEdBQUksUUFBUSxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQUEsSUFDekIsR0FBSSxnQkFBZ0IsRUFBRSxjQUFjLElBQUksQ0FBQztBQUFBLElBQ3pDLEdBQUdDLG9CQUFtQjtBQUFBLEVBQ3hCO0FBRUEsTUFBSSxZQUFZO0FBQ2QsV0FBTyxXQUFXLE9BQU87QUFBQSxNQUN2QixHQUFHO0FBQUEsTUFDSCxRQUFRLEVBQUUsTUFBTSxZQUFxQixXQUFXO0FBQUEsSUFDbEQsQ0FBQztBQUFBLEVBQ0g7QUFFQSxTQUFPLFdBQVcsT0FBTyxJQUFJO0FBQy9CO0FBRUEsZUFBZSxvQkFBb0I7QUFBQSxFQUNqQztBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0EsS0FBQUM7QUFDRixHQU1rQjtBQUNoQixNQUFJLFVBQXdEO0FBQzVELE1BQUk7QUFDRixjQUFVLE1BQU0sVUFBVSxXQUFXO0FBQ3JDLFVBQU0sZUFBZSxJQUFJLHNCQUFzQixPQUFPO0FBQ3RELFVBQU0sSUFBSSxZQUFZO0FBQ3RCLFVBQU1DLFlBQVcsTUFBTSxRQUFRLFNBQVM7QUFDeEMsVUFBTSxRQUFRLE1BQU0sSUFBSSxpQkFBaUI7QUFBQSxNQUN2QyxTQUFTO0FBQUEsTUFDVCxZQUFZQSxVQUFTO0FBQUEsTUFDckIsV0FBVyxLQUFLLElBQUk7QUFBQSxNQUNwQixZQUFZO0FBQUEsSUFDZCxDQUFDO0FBQ0QsVUFBTSxRQUFRLEtBQUssRUFBRSxNQUFNLE1BQU0sTUFBUztBQUFBLEVBQzVDLFNBQVMsT0FBTztBQUNkLElBQUFELEtBQUksTUFBTSxtQ0FBbUM7QUFBQSxNQUMzQztBQUFBLE1BQ0EsT0FBTztBQUFBLElBQ1QsQ0FBQztBQUNELFFBQUksU0FBUztBQUNYLFlBQU0sUUFBUSxLQUFLLEVBQUUsTUFBTSxNQUFNLE1BQVM7QUFBQSxJQUM1QztBQUFBLEVBQ0Y7QUFDRjtBQWdOTyxTQUFTLGNBQ2QsVUFJc0U7QUFDdEUsU0FBTztBQUFBLElBQ0wsTUFBTTtBQUFBLElBQ047QUFBQSxJQUNBLE1BQU0sT0FBTyxFQUFFLEtBQUssV0FBVyxPQUFBRSxRQUFPLE9BQUFDLFFBQU8sUUFBUSxRQUFRLFNBQVMsS0FBQUgsS0FBSSxHQUFHO0FBQzNFLFlBQU0sVUFBVUUsT0FBTTtBQUN0QixZQUFNLFNBQVNDLE9BQU0sVUFBVSxDQUFDO0FBQ2hDLFlBQU0sTUFBTSxPQUFPLE9BQU8sYUFBYTtBQUN2QyxZQUFNLFlBQVksT0FBTyxhQUFhLEVBQUUsT0FBTyxjQUFjO0FBQzdELFlBQU0sUUFBUSxPQUFPO0FBQ3JCLFlBQU0sZ0JBQ0osT0FBTyxpQkFBaUJBLE9BQU0saUJBQWlCO0FBRWpELFlBQU0sY0FBaUM7QUFBQSxRQUNyQztBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQSxZQUFZLE9BQU87QUFBQSxNQUNyQjtBQUVBLFlBQU0sa0JBQWtCLENBQUMsb0JBQTRCO0FBQ25ELFlBQUksQ0FBQyxRQUFRO0FBQ1g7QUFBQSxRQUNGO0FBQ0EsdUJBQUFDLE9BQWMsMEJBQTBCO0FBQUEsVUFDdEM7QUFBQSxZQUNFLE9BQU87QUFBQSxjQUNMLE9BQUFGO0FBQUEsY0FDQSxXQUFXLE9BQU87QUFBQSxjQUNsQjtBQUFBLGNBQ0EsUUFBUSxPQUFPO0FBQUEsWUFDakI7QUFBQSxVQUNGO0FBQUEsUUFDRixDQUFDLEVBQUUsTUFBTSxDQUFDLE1BQU07QUFDZCxVQUFBRixLQUFJLE1BQU0sc0NBQXNDLEVBQUUsT0FBTyxFQUFFLENBQUM7QUFBQSxRQUM5RCxDQUFDO0FBQUEsTUFDSDtBQUVBLFVBQUlHLE9BQU0sU0FBUztBQUNqQixjQUFNLFdBQVcsTUFBTSxRQUFRLE1BQU0sSUFBSUEsT0FBTSxPQUFPO0FBQ3RELFlBQUksVUFBVSxZQUFZO0FBQ3hCLGdCQUFNRSxPQUFNLE1BQU0sVUFBVTtBQUFBLFlBQzFCLEdBQUc7QUFBQSxZQUNILFlBQVksU0FBUztBQUFBLFVBQ3ZCLENBQUM7QUFDRCxnQkFBTUMsWUFBVyxJQUFJLHNCQUFzQkQsTUFBSyxHQUFHO0FBRW5ELGtCQUFRLE1BQ0wsSUFBSUYsT0FBTSxTQUFTO0FBQUEsWUFDbEIsR0FBRztBQUFBLFlBQ0gsU0FBU0EsT0FBTTtBQUFBLFlBQ2YsWUFBWSxLQUFLLElBQUk7QUFBQSxVQUN2QixDQUFDLEVBQ0EsTUFBTSxNQUFNLE1BQVM7QUFFeEIsaUJBQU87QUFBQSxZQUNMLFVBQUFHO0FBQUEsWUFDQSxVQUFVLEVBQUUsV0FBV0QsS0FBSSxVQUFVO0FBQUEsVUFDdkM7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUVBLFVBQUlGLE9BQU0sS0FBSztBQUNiLFlBQUksQ0FBQ0EsT0FBTSxTQUFTO0FBQ2xCLFVBQUFILEtBQUksTUFBTSw0Q0FBNEMsRUFBRSxPQUFBRyxPQUFNLENBQUM7QUFDL0QsZ0JBQU0sSUFBSSxNQUFNLDBDQUEwQztBQUFBLFFBQzVEO0FBQ0EsNEJBQW9CO0FBQUEsVUFDbEI7QUFBQSxVQUNBLEtBQUtBLE9BQU07QUFBQSxVQUNYO0FBQUEsVUFDQSxpQkFBaUJBLE9BQU07QUFBQSxVQUN2QixLQUFBSDtBQUFBLFFBQ0YsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxVQUFVO0FBQ2xCLFVBQUFBLEtBQUksTUFBTSxvQ0FBb0MsRUFBRSxPQUFPLE1BQU0sQ0FBQztBQUFBLFFBQ2hFLENBQUM7QUFFRCxjQUFNSyxPQUFNLE1BQU0sVUFBVSxXQUFXO0FBQ3ZDLGNBQU1DLFlBQVcsSUFBSSxzQkFBc0JELE1BQUssR0FBRztBQUNuRCxjQUFNRixPQUFNLElBQUlHLFNBQVE7QUFFeEIsZUFBTztBQUFBLFVBQ0wsVUFBQUE7QUFBQSxVQUNBLFVBQVUsRUFBRSxXQUFXRCxLQUFJLFVBQVU7QUFBQSxRQUN2QztBQUFBLE1BQ0Y7QUFFQSxZQUFNLE1BQU0sTUFBTSxVQUFVLFdBQVc7QUFDdkMsWUFBTSxXQUFXLElBQUksc0JBQXNCLEtBQUssR0FBRztBQUVuRCxhQUFPO0FBQUEsUUFDTDtBQUFBLFFBQ0EsVUFBVSxFQUFFLFdBQVcsSUFBSSxVQUFVO0FBQUEsTUFDdkM7QUFBQSxJQUNGO0FBQUEsSUFFQSxNQUFNLFFBQVEsRUFBRSxVQUFVLElBQUksR0FBRztBQUMvQixZQUFNLGFBQWEsTUFBTVAsZ0JBQWU7QUFDeEMsWUFBTSxNQUFNLE1BQU0sV0FBVyxJQUFJO0FBQUEsUUFDL0IsV0FBVyxTQUFTO0FBQUEsUUFDcEIsR0FBR0Msb0JBQW1CO0FBQUEsTUFDeEIsQ0FBQztBQUNELGFBQU8sSUFBSSxzQkFBc0IsS0FBSyxPQUFPLE1BQVM7QUFBQSxJQUN4RDtBQUFBLEVBQ0Y7QUFDRjtBQTNiQSxnQkFXTSxnQkFDQSxVQUNBLGVBMkNBQSxxQkF1RUE7QUEvSE47QUFBQTtBQUFBO0FBQUEsaUJBQXVDO0FBS3ZDO0FBTUEsSUFBTSxpQkFBaUIsSUFBSSxLQUFLLEtBQUs7QUFDckMsSUFBTSxXQUFXO0FBQ2pCLElBQU0sZ0JBQWdCO0FBMkN0QixJQUFNQSxzQkFBcUIsTUFDekIsUUFBUSxJQUFJLGFBQWEsU0FDckI7QUFBQSxNQUNFLE9BQU8sUUFBUSxJQUFJO0FBQUEsTUFDbkIsUUFBUSxRQUFRLElBQUk7QUFBQSxNQUNwQixXQUFXLFFBQVEsSUFBSTtBQUFBLElBQ3pCLElBQ0EsQ0FBQztBQWdFUCxJQUFNLHdCQUFOLE1BQXVEO0FBQUEsTUFDcEM7QUFBQSxNQUNSO0FBQUEsTUFFVCxZQUFZLEtBQXdDLEtBQWM7QUFDaEUsYUFBSyxNQUFNO0FBQ1gsYUFBSyxNQUFNLE9BQU87QUFBQSxNQUNwQjtBQUFBLE1BRUEsTUFBTSxLQUFLO0FBQUEsUUFDVDtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsTUFDRixHQU93QjtBQUN0QixjQUFNLFNBQVMsTUFBTSxLQUFLLElBQUksV0FBVztBQUFBLFVBQ3ZDLEtBQUs7QUFBQSxVQUNMO0FBQUEsVUFDQSxLQUFLLE9BQU8sS0FBSztBQUFBLFVBQ2pCO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBLFVBQVU7QUFBQSxRQUNaLENBQUM7QUFFRCxZQUFJLFNBQVM7QUFDYixZQUFJLFNBQVM7QUFDYixjQUFNLFlBQTZELENBQUM7QUFDcEUsY0FBTSxRQUFRO0FBQUEsVUFDWixTQUFTO0FBQUEsVUFDVCxVQUFVO0FBQUEsUUFDWjtBQUVBLGNBQU0sZUFBZSxZQUFZO0FBQy9CLGNBQUk7QUFDRiw2QkFBaUIsU0FBUyxPQUFPLEtBQUssR0FBRztBQUN2QyxrQkFBSSxNQUFNLFdBQVcsVUFBVTtBQUM3QiwwQkFBVSxNQUFNO0FBQUEsY0FDbEIsT0FBTztBQUNMLDBCQUFVLE1BQU07QUFBQSxjQUNsQjtBQUVBLHdCQUFVLEtBQUssS0FBSztBQUNwQixvQkFBTSxVQUFVO0FBQUEsWUFDbEI7QUFBQSxVQUNGLFFBQVE7QUFBQSxVQUVSO0FBQ0EsZ0JBQU0sV0FBVztBQUNqQixnQkFBTSxVQUFVO0FBQUEsUUFDbEIsR0FBRztBQUVILHdCQUFnQixPQUdiO0FBQ0QsY0FBSSxRQUFRO0FBQ1osaUJBQU8sQ0FBQyxNQUFNLFlBQVksUUFBUSxVQUFVLFFBQVE7QUFDbEQsZ0JBQUksUUFBUSxVQUFVLFFBQVE7QUFDNUIsb0JBQU0sVUFBVSxPQUFPO0FBQUEsWUFDekIsT0FBTztBQUNMLG9CQUFNLElBQUksUUFBYyxDQUFDLE1BQU07QUFDN0Isc0JBQU0sVUFBVTtBQUFBLGNBQ2xCLENBQUM7QUFDRCxvQkFBTSxVQUFVO0FBQUEsWUFDbEI7QUFBQSxVQUNGO0FBQUEsUUFDRjtBQUVBLGNBQU0sU0FBUyxZQUFZLEtBQUssWUFBWTtBQUMxQyxjQUFJO0FBQ0Ysa0JBQU0sV0FBVyxNQUFNLE9BQU8sS0FBSztBQUNuQyxtQkFBTyxFQUFFLFFBQVEsUUFBUSxVQUFVLFNBQVMsU0FBUztBQUFBLFVBQ3ZELFNBQVMsR0FBRztBQUNWLGdCQUFJLG1CQUFtQixDQUFDLEdBQUc7QUFDekIscUJBQU8sRUFBRSxRQUFRLFFBQVEsVUFBVSxFQUFFO0FBQUEsWUFDdkM7QUFDQSxrQkFBTTtBQUFBLFVBQ1I7QUFBQSxRQUNGLENBQUM7QUFFRCxlQUFPLEVBQUUsV0FBVyxPQUFPLE9BQU8sTUFBTSxPQUFPO0FBQUEsTUFDakQ7QUFBQSxNQUVBLE1BQU0sU0FBUztBQUFBLFFBQ2IsTUFBTTtBQUFBLE1BQ1IsR0FHMkI7QUFDekIsWUFBSTtBQUNGLGlCQUFPLE1BQU0sS0FBSyxJQUFJLGlCQUFpQixFQUFFLE1BQU0sVUFBVSxLQUFLLEtBQUssSUFBSSxDQUFDO0FBQUEsUUFDMUUsUUFBUTtBQUNOLGlCQUFPO0FBQUEsUUFDVDtBQUFBLE1BQ0Y7QUFBQSxNQUVBLE1BQU0sV0FBVztBQUFBLFFBQ2Y7QUFBQSxRQUNBO0FBQUEsTUFDRixHQUlrQjtBQUNoQixZQUFJLE1BQU0sV0FBVyxHQUFHO0FBQ3RCO0FBQUEsUUFDRjtBQUVBLGNBQU1RLFFBQU8sTUFBTSxPQUFPLE1BQVc7QUFDckMsY0FBTSxjQUFjLE1BQU0sSUFBSSxDQUFDLFNBQVM7QUFDdEMsZ0JBQU0sV0FBV0EsTUFBSyxNQUFNLEtBQUssVUFBVSxLQUFLLElBQUk7QUFDcEQsZ0JBQU0sZUFBZUEsTUFBSyxNQUFNLFdBQVcsUUFBUSxJQUMvQyxXQUNBQSxNQUFLLE1BQU0sS0FBSyxLQUFLLEtBQUssUUFBUTtBQUN0QyxpQkFBTztBQUFBLFlBQ0wsTUFBTTtBQUFBLFlBQ04sU0FDRSxPQUFPLEtBQUssWUFBWSxXQUNwQixPQUFPLEtBQUssS0FBSyxPQUFPLElBQ3hCLEtBQUs7QUFBQSxVQUNiO0FBQUEsUUFDRixDQUFDO0FBRUQsY0FBTSxLQUFLLElBQUksV0FBVyxXQUFXO0FBRXJDLGNBQU0sZUFBZSxZQUFZLE9BQU8sQ0FBQyxNQUFNLEVBQUUsS0FBSyxTQUFTLEtBQUssQ0FBQztBQUNyRSxZQUFJLGFBQWEsU0FBUyxHQUFHO0FBQzNCLGdCQUFNLFNBQVMsTUFBTSxLQUFLLEtBQUs7QUFBQSxZQUM3QixTQUFTO0FBQUEsWUFDVCxNQUFNLENBQUMsTUFBTSxHQUFHLGFBQWEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUM7QUFBQSxVQUNqRCxDQUFDO0FBQ0QsZ0JBQU0sT0FBTztBQUFBLFFBQ2Y7QUFBQSxNQUNGO0FBQUE7QUFBQSxNQUdBLE1BQU0sVUFBVTtBQUFBLFFBQ2Q7QUFBQSxNQUNGLEdBR29CO0FBQ2xCLGVBQU8sS0FBSyxJQUFJLE9BQU8sSUFBSTtBQUFBLE1BQzdCO0FBQUEsTUFFQSxNQUFNLEtBQUs7QUFBQSxRQUNUO0FBQUEsTUFDRixHQUdrQjtBQUNoQixjQUFNLE1BQU0sTUFBTSxLQUFLLElBQUksV0FBVyxTQUFTO0FBQy9DLGNBQU0sSUFBSSxLQUFLO0FBQUEsTUFDakI7QUFBQTtBQUFBLE1BR0EsTUFBTSxZQUVKO0FBQ0EsY0FBTSxTQUFTLEtBQUssSUFBSTtBQUV4QixZQUFJLFdBQVcsZ0JBQWdCO0FBQzdCLGlCQUFPO0FBQUEsUUFDVDtBQUNBLFlBQUksV0FBVyxXQUFXO0FBQ3hCLGlCQUFPO0FBQUEsUUFDVDtBQUNBLGVBQU87QUFBQSxNQUNUO0FBQUEsTUFFQSxNQUFNLFFBQXVCO0FBRzNCLGNBQU0sU0FBUyxNQUFNLEtBQUssS0FBSyxFQUFFLFNBQVMsT0FBTyxDQUFDO0FBQ2xELGNBQU0sT0FBTztBQUFBLE1BQ2Y7QUFBQSxNQUVBLE1BQU0sT0FBc0I7QUFDMUIsY0FBTSxLQUFLLElBQUksS0FBSztBQUFBLE1BQ3RCO0FBQUEsTUFFQSxNQUFNLFdBQTRDO0FBQ2hELGNBQU0sT0FBTyxNQUFNLEtBQUssSUFBSSxTQUFTO0FBQ3JDLGVBQU8sRUFBRSxZQUFZLEtBQUssV0FBVztBQUFBLE1BQ3ZDO0FBQUEsTUFFQSxNQUFNLG9CQUFvQjtBQUFBLFFBQ3hCO0FBQUEsTUFDRixHQUdxRDtBQUNuRCxlQUFPLE1BQU0sS0FBSyxJQUFJLG9CQUFvQixNQUFNO0FBQUEsTUFDbEQ7QUFBQSxJQUNGO0FBQUE7QUFBQTs7O0FDM1VBO0FBQUE7QUFBQTtBQUFBO0FBY0EsZUFBZSxXQUNiLE1BQ0EsTUFDK0Q7QUFDL0QsUUFBTSxFQUFFLE1BQU0sSUFBSSxNQUFNLE9BQU8sZUFBb0I7QUFDbkQsU0FBTyxJQUFJLFFBQVEsQ0FBQ0MsVUFBUyxXQUFXO0FBQ3RDLFVBQU0sUUFBUSxNQUFNLFVBQVUsQ0FBQyxXQUFXLEdBQUcsSUFBSSxHQUFHO0FBQUEsTUFDbEQsUUFBUSxNQUFNO0FBQUEsSUFDaEIsQ0FBQztBQUVELFFBQUksU0FBUztBQUNiLFFBQUksU0FBUztBQUViLFVBQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxTQUFpQjtBQUN4QyxnQkFBVSxLQUFLLFNBQVM7QUFBQSxJQUMxQixDQUFDO0FBQ0QsVUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLFNBQWlCO0FBQ3hDLGdCQUFVLEtBQUssU0FBUztBQUFBLElBQzFCLENBQUM7QUFFRCxVQUFNLFlBQVksTUFBTSxZQUNwQixXQUFXLE1BQU07QUFDZixZQUFNLEtBQUssU0FBUztBQUNwQixhQUFPLElBQUksTUFBTSxrQkFBa0IsS0FBSyxDQUFDLENBQUMsWUFBWSxDQUFDO0FBQUEsSUFDekQsR0FBRyxLQUFLLFNBQVMsSUFDakI7QUFFSixVQUFNLEdBQUcsU0FBUyxDQUFDLFFBQVE7QUFDekIsVUFBSSxXQUFXO0FBQ2IscUJBQWEsU0FBUztBQUFBLE1BQ3hCO0FBQ0EsYUFBTyxHQUFHO0FBQUEsSUFDWixDQUFDO0FBRUQsVUFBTSxHQUFHLFNBQVMsQ0FBQyxTQUFTO0FBQzFCLFVBQUksV0FBVztBQUNiLHFCQUFhLFNBQVM7QUFBQSxNQUN4QjtBQUNBLE1BQUFBLFNBQVEsRUFBRSxRQUFRLFFBQVEsVUFBVSxRQUFRLEVBQUUsQ0FBQztBQUFBLElBQ2pELENBQUM7QUFBQSxFQUNILENBQUM7QUFDSDtBQWdCQSxlQUFlLGtCQUFrQjtBQUMvQixNQUFJLG1CQUFtQjtBQUNyQjtBQUFBLEVBQ0Y7QUFDQSxzQkFBb0I7QUFHcEIsUUFBTSxLQUFLLE1BQU0sT0FBTyxlQUFvQjtBQUM1QyxjQUFZLEdBQUc7QUFFZixRQUFNLFVBQVUsTUFBTTtBQUNwQixRQUFJLENBQUMsV0FBVztBQUNkO0FBQUEsSUFDRjtBQUNBLGVBQVcsUUFBUSxNQUFNLEtBQUssZUFBZSxHQUFHO0FBQzlDLFVBQUk7QUFDRixrQkFBVSx1QkFBdUIsSUFBSSxJQUFJO0FBQUEsVUFDdkMsU0FBUztBQUFBLFVBQ1QsT0FBTztBQUFBLFFBQ1QsQ0FBQztBQUFBLE1BQ0gsUUFBUTtBQUFBLE1BRVI7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUVBLFVBQVEsR0FBRyxRQUFRLE9BQU87QUFDMUIsVUFBUSxHQUFHLFVBQVUsTUFBTTtBQUN6QixZQUFRO0FBQ1IsWUFBUSxLQUFLLEdBQUc7QUFBQSxFQUNsQixDQUFDO0FBQ0QsVUFBUSxHQUFHLFdBQVcsTUFBTTtBQUMxQixZQUFRO0FBQ1IsWUFBUSxLQUFLLEdBQUc7QUFBQSxFQUNsQixDQUFDO0FBQ0g7QUFPQSxlQUFlLGNBQWMsYUFBb0M7QUFDL0QsUUFBTSxXQUFXLGVBQWUsSUFBSSxXQUFXO0FBQy9DLE1BQUksVUFBVTtBQUNaLFdBQU87QUFBQSxFQUNUO0FBRUEsUUFBTSxXQUFXLFlBQVk7QUFDM0IsVUFBTSxLQUFLLE1BQU0sV0FBVyxDQUFDLE1BQU0sSUFBSSxHQUFHLEVBQUUsV0FBVyxJQUFPLENBQUM7QUFDL0QsVUFBTSxnQkFDSixHQUFHLGFBQWEsSUFDWixHQUFHLE9BQ0EsTUFBTSxJQUFJLEVBQ1YsSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsRUFDbkIsT0FBTyxPQUFPLElBQ2pCLENBQUM7QUFFUCxRQUFJLGNBQWMsU0FBUyxXQUFXLEdBQUc7QUFDdkMsc0JBQWdCLElBQUksV0FBVztBQUMvQixzQkFBZ0I7QUFDaEI7QUFBQSxJQUNGO0FBRUEsVUFBTUMsUUFBTyxNQUFNLE9BQU8sTUFBVztBQUNyQyxVQUFNLEtBQUssTUFBTSxPQUFPLElBQVM7QUFDakMsVUFBTUMsTUFBSyxNQUFNLE9BQU8sYUFBa0I7QUFFMUMsVUFBTSxlQUFlRCxNQUFLO0FBQUEsTUFDeEIsR0FBRyxPQUFPO0FBQUEsTUFDVjtBQUFBLE1BQ0E7QUFBQSxJQUNGO0FBQ0EsVUFBTUMsSUFBRyxNQUFNLGNBQWMsRUFBRSxXQUFXLEtBQUssQ0FBQztBQUVoRCxVQUFNLFNBQVMsTUFBTTtBQUFBLE1BQ25CLENBQUMsVUFBVSxVQUFVLGFBQWEsU0FBUyxZQUFZO0FBQUEsTUFDdkQsRUFBRSxXQUFXLElBQU87QUFBQSxJQUN0QjtBQUVBLFFBQUksT0FBTyxhQUFhLEdBQUc7QUFDekIsVUFBSSxPQUFPLE9BQU8sU0FBUyxnQkFBZ0IsR0FBRztBQUM1Qyx3QkFBZ0IsSUFBSSxXQUFXO0FBQy9CLHdCQUFnQjtBQUNoQjtBQUFBLE1BQ0Y7QUFDQSxZQUFNLElBQUk7QUFBQSxRQUNSLG9DQUFvQyxXQUFXLE1BQU0sT0FBTyxNQUFNO0FBQUEsTUFDcEU7QUFBQSxJQUNGO0FBRUEsb0JBQWdCLElBQUksV0FBVztBQUMvQixvQkFBZ0I7QUFBQSxFQUNsQixHQUFHO0FBRUgsaUJBQWUsSUFBSSxhQUFhLE9BQU87QUFFdkMsTUFBSTtBQUNGLFVBQU07QUFBQSxFQUNSLFNBQVMsR0FBRztBQUNWLG1CQUFlLE9BQU8sV0FBVztBQUNqQyxVQUFNO0FBQUEsRUFDUjtBQUNGO0FBaVBPLFNBQVMsY0FDZCxVQUlzRTtBQUN0RSxTQUFPO0FBQUEsSUFDTCxNQUFNO0FBQUEsSUFDTjtBQUFBLElBQ0EsTUFBTSxPQUFPLE1BQU07QUFDakIsWUFBTSxjQUFjLGFBQVMsa0JBQUssQ0FBQztBQUNuQyxZQUFNLE1BQU0sS0FBSyxPQUFPLFFBQVE7QUFFaEMsWUFBTSxjQUFjLFdBQVc7QUFFL0IsWUFBTSxXQUFXLElBQUksc0JBQXNCLGFBQWEsR0FBRztBQUUzRCxVQUFJLEtBQUssT0FBTyxLQUFLO0FBQ25CLGNBQU0sS0FBSyxNQUFNLElBQUksUUFBUTtBQUFBLE1BQy9CO0FBRUEsYUFBTztBQUFBLFFBQ0w7QUFBQSxRQUNBLFVBQVUsRUFBRSxZQUFZO0FBQUEsTUFDMUI7QUFBQSxJQUNGO0FBQUE7QUFBQSxJQUdBLE1BQU0sUUFBUSxNQUFNO0FBQ2xCLGFBQU8sSUFBSSxzQkFBc0IsS0FBSyxTQUFTLFdBQVc7QUFBQSxJQUM1RDtBQUFBLEVBQ0Y7QUFDRjtBQS9iQSxpQkE2RE0sZ0JBS0EsaUJBRUYsbUJBQ0EsV0EyR0Usb0JBRUE7QUFsTE47QUFBQTtBQUFBO0FBQUEsa0JBQXFCO0FBNkRyQixJQUFNLGlCQUFpQixvQkFBSSxJQUEyQjtBQUt0RCxJQUFNLGtCQUFrQixvQkFBSSxJQUFZO0FBRXhDLElBQUksb0JBQW9CO0FBQ3hCLElBQUksWUFBaUU7QUEyR3JFLElBQU0scUJBQXFCO0FBRTNCLElBQU0sd0JBQU4sTUFBdUQ7QUFBQSxNQUM1QztBQUFBLE1BQ1E7QUFBQSxNQUNBLFlBQVksb0JBQUksSUFHL0I7QUFBQSxNQUVGLFlBQVksYUFBcUIsS0FBYztBQUM3QyxhQUFLLGNBQWM7QUFDbkIsYUFBSyxNQUFNLE9BQU87QUFBQSxNQUNwQjtBQUFBLE1BRUEsTUFBTSxLQUFLLE1BT2E7QUFDdEIsY0FBTSxjQUFjLEtBQUssV0FBVztBQUVwQyxjQUFNLEVBQUUsTUFBTSxJQUFJLE1BQU0sT0FBTyxlQUFvQjtBQUNuRCxjQUFNLFlBQVksZUFBVyxrQkFBSyxDQUFDO0FBQ25DLGNBQU0sV0FBVyxLQUFLLE1BQ2xCLE9BQU8sUUFBUSxLQUFLLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFDaEUsQ0FBQztBQUNMLGNBQU0sV0FBVyxLQUFLLE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDaEQsWUFBSTtBQUNKLFlBQUksS0FBSyxNQUFNO0FBQ2Isb0JBQVUsQ0FBQyxRQUFRLEtBQUssU0FBUyxHQUFJLEtBQUssUUFBUSxDQUFDLENBQUU7QUFBQSxRQUN2RCxXQUFXLEtBQUssTUFBTTtBQUNwQixvQkFBVSxDQUFDLEtBQUssU0FBUyxHQUFHLEtBQUssSUFBSTtBQUFBLFFBQ3ZDLE9BQU87QUFDTCxvQkFBVSxDQUFDLEtBQUssT0FBTztBQUFBLFFBQ3pCO0FBQ0EsY0FBTSxVQUFVO0FBRWhCLGNBQU0sUUFBUTtBQUFBLFVBQ1o7QUFBQSxVQUNBO0FBQUEsWUFDRTtBQUFBLFlBQ0E7QUFBQSxZQUNBLEdBQUc7QUFBQSxZQUNILEdBQUc7QUFBQSxZQUNILEtBQUs7QUFBQSxZQUNMLEdBQUc7QUFBQSxVQUNMO0FBQUEsVUFDQSxFQUFFLFFBQVEsS0FBSyxPQUFPO0FBQUEsUUFDeEI7QUFFQSxhQUFLLFVBQVUsSUFBSSxXQUFXLEtBQUs7QUFFbkMsWUFBSSxTQUFTO0FBQ2IsWUFBSSxTQUFTO0FBQ2IsY0FBTSxXQUE0RCxDQUFDO0FBQ25FLFlBQUksYUFBa0M7QUFDdEMsWUFBSSxTQUFTO0FBRWIsY0FBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLFNBQTBCO0FBQ2pELGdCQUFNLE1BQU0sT0FBTyxJQUFJO0FBQ3ZCLG9CQUFVO0FBQ1YsbUJBQVMsS0FBSyxFQUFFLFFBQVEsVUFBVSxNQUFNLElBQUksQ0FBQztBQUM3Qyx1QkFBYTtBQUFBLFFBQ2YsQ0FBQztBQUVELGNBQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxTQUEwQjtBQUNqRCxnQkFBTSxNQUFNLE9BQU8sSUFBSTtBQUN2QixvQkFBVTtBQUNWLG1CQUFTLEtBQUssRUFBRSxRQUFRLFVBQVUsTUFBTSxJQUFJLENBQUM7QUFDN0MsdUJBQWE7QUFBQSxRQUNmLENBQUM7QUFFRCxjQUFNLFNBQVMsSUFBSSxRQUloQixDQUFDRixVQUFTLFdBQVc7QUFDdEIsZ0JBQU0sR0FBRyxTQUFTLENBQUMsUUFBUTtBQUN6QixpQkFBSyxVQUFVLE9BQU8sU0FBUztBQUMvQixxQkFBUztBQUNULHlCQUFhO0FBQ2IsbUJBQU8sR0FBRztBQUFBLFVBQ1osQ0FBQztBQUVELGdCQUFNLEdBQUcsU0FBUyxDQUFDLFNBQXdCO0FBQ3pDLGlCQUFLLFVBQVUsT0FBTyxTQUFTO0FBQy9CLHFCQUFTO0FBQ1QseUJBQWE7QUFDYixZQUFBQSxTQUFRLEVBQUUsUUFBUSxRQUFRLFVBQVUsUUFBUSxFQUFFLENBQUM7QUFBQSxVQUNqRCxDQUFDO0FBQUEsUUFDSCxDQUFDO0FBRUQsd0JBQWdCLE9BR2I7QUFDRCxpQkFBTyxDQUFDLFVBQVUsU0FBUyxTQUFTLEdBQUc7QUFDckMsa0JBQU0sUUFBUSxTQUFTLE1BQU07QUFDN0IsZ0JBQUksT0FBTztBQUNULG9CQUFNO0FBQUEsWUFDUixXQUFXLENBQUMsUUFBUTtBQUNsQixvQkFBTSxJQUFJLFFBQWMsQ0FBQyxNQUFNO0FBQzdCLDZCQUFhO0FBQUEsY0FDZixDQUFDO0FBQ0QsMkJBQWE7QUFBQSxZQUNmO0FBQUEsVUFDRjtBQUFBLFFBQ0Y7QUFFQSxlQUFPLEVBQUUsV0FBVyxNQUFNLE9BQU87QUFBQSxNQUNuQztBQUFBLE1BRUEsTUFBTSxTQUFTLE1BR1k7QUFDekIsY0FBTSxjQUFjLEtBQUssV0FBVztBQUVwQyxjQUFNLFNBQVMsTUFBTTtBQUFBLFVBQ25CO0FBQUEsWUFDRTtBQUFBLFlBQ0EsS0FBSztBQUFBLFlBQ0w7QUFBQSxZQUNBO0FBQUEsWUFDQSxXQUFXLEtBQUssS0FBSyxRQUFRLE1BQU0sT0FBTyxDQUFDO0FBQUEsVUFDN0M7QUFBQSxVQUNBLEVBQUUsV0FBVyxLQUFRLFFBQVEsS0FBSyxPQUFPO0FBQUEsUUFDM0M7QUFFQSxZQUFJLE9BQU8sYUFBYSxHQUFHO0FBQ3pCLGNBQ0UsT0FBTyxPQUFPLFNBQVMsY0FBYyxLQUNyQyxPQUFPLE9BQU8sU0FBUyxRQUFRLEdBQy9CO0FBQ0EsbUJBQU87QUFBQSxVQUNUO0FBQ0EsZ0JBQU0sSUFBSSxNQUFNLG9CQUFvQixPQUFPLE1BQU0sRUFBRTtBQUFBLFFBQ3JEO0FBRUEsZUFBTyxPQUFPLEtBQUssT0FBTyxPQUFPLEtBQUssR0FBRyxRQUFRO0FBQUEsTUFDbkQ7QUFBQSxNQUVBLE1BQU0sV0FBVyxNQUlDO0FBQ2hCLGNBQU0sY0FBYyxLQUFLLFdBQVc7QUFFcEMsbUJBQVcsUUFBUSxLQUFLLE9BQU87QUFDN0IsZ0JBQU0sV0FBVyxLQUFLLFdBQ2xCLEdBQUcsS0FBSyxRQUFRLElBQUksS0FBSyxJQUFJLEtBQzdCLEtBQUs7QUFHVCxnQkFBTSxZQUFZLFNBQVMsVUFBVSxHQUFHLFNBQVMsWUFBWSxHQUFHLENBQUM7QUFDakUsY0FBSSxXQUFXO0FBQ2Isa0JBQU0sV0FBVyxDQUFDLFFBQVEsS0FBSyxhQUFhLFNBQVMsTUFBTSxTQUFTLEdBQUc7QUFBQSxjQUNyRSxRQUFRLEtBQUs7QUFBQSxZQUNmLENBQUM7QUFBQSxVQUNIO0FBR0EsZ0JBQU0sTUFDSixPQUFPLEtBQUssWUFBWSxXQUNwQixPQUFPLEtBQUssS0FBSyxPQUFPLEVBQUUsU0FBUyxRQUFRLElBQzNDLEtBQUssUUFBUSxTQUFTLFFBQVE7QUFFcEMsZ0JBQU07QUFBQSxZQUNKO0FBQUEsY0FDRTtBQUFBLGNBQ0EsS0FBSztBQUFBLGNBQ0w7QUFBQSxjQUNBO0FBQUEsY0FDQSxTQUFTLEdBQUcsb0JBQW9CLFNBQVMsUUFBUSxNQUFNLE9BQU8sQ0FBQztBQUFBLFlBQ2pFO0FBQUEsWUFDQSxFQUFFLFFBQVEsS0FBSyxPQUFPO0FBQUEsVUFDeEI7QUFFQSxjQUFJLEtBQUssS0FBSyxTQUFTLEtBQUssR0FBRztBQUM3QixrQkFBTSxXQUFXLENBQUMsUUFBUSxLQUFLLGFBQWEsU0FBUyxNQUFNLFFBQVEsR0FBRztBQUFBLGNBQ3BFLFFBQVEsS0FBSztBQUFBLFlBQ2YsQ0FBQztBQUFBLFVBQ0g7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUFBO0FBQUEsTUFHQSxNQUFNLFVBQVUsTUFHSTtBQUNsQixlQUFPLG9CQUFvQixLQUFLLElBQUk7QUFBQSxNQUN0QztBQUFBO0FBQUEsTUFHQSxNQUFNLEtBQUssTUFBa0U7QUFDM0UsY0FBTSxRQUFRLEtBQUssVUFBVSxJQUFJLEtBQUssU0FBUztBQUMvQyxZQUFJLE9BQU87QUFDVCxnQkFBTSxLQUFLLFNBQVM7QUFDcEIsZUFBSyxVQUFVLE9BQU8sS0FBSyxTQUFTO0FBQUEsUUFDdEM7QUFBQSxNQUNGO0FBQUE7QUFBQSxNQUdBLE1BQU0sWUFFSjtBQUVBLGVBQU87QUFBQSxNQUNUO0FBQUEsTUFFQSxNQUFNLFFBQXVCO0FBQzNCLGNBQU0sY0FBYyxLQUFLLFdBQVc7QUFBQSxNQUN0QztBQUFBLE1BRUEsTUFBTSxPQUFzQjtBQUMxQixjQUFNLFdBQVcsQ0FBQyxRQUFRLEtBQUssV0FBVyxHQUFHLEVBQUUsV0FBVyxJQUFPLENBQUM7QUFDbEUsd0JBQWdCLE9BQU8sS0FBSyxXQUFXO0FBQ3ZDLHVCQUFlLE9BQU8sS0FBSyxXQUFXO0FBQUEsTUFDeEM7QUFBQTtBQUFBLE1BR0EsTUFBTSxXQUE0QztBQUNoRCxjQUFNLElBQUksTUFBTSxnREFBZ0Q7QUFBQSxNQUNsRTtBQUFBO0FBQUEsTUFHQSxNQUFNLHNCQUFzQztBQUMxQyxjQUFNLElBQUk7QUFBQSxVQUNSO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQUE7QUFBQTs7O0FDN1pBO0FBQUE7QUFBQTtBQUFBO0FBOExPLFNBQVMsYUFDZCxVQUltRTtBQUNuRSxTQUFPO0FBQUEsSUFDTCxNQUFNO0FBQUEsSUFDTjtBQUFBLElBQ0EsTUFBTSxPQUFPLE1BQU07QUFDakIsWUFBTSxXQUFXLEtBQUssTUFBTSxRQUFRLE9BQU8sUUFBUSxJQUFJO0FBQ3ZELFlBQU0sV0FBVyxJQUFJLHFCQUFxQixRQUFRO0FBRWxELFVBQUksS0FBSyxPQUFPLEtBQUs7QUFDbkIsY0FBTSxLQUFLLE1BQU0sSUFBSSxRQUFRO0FBQUEsTUFDL0I7QUFFQSxhQUFPO0FBQUEsUUFDTDtBQUFBLFFBQ0EsVUFBVSxFQUFFLFVBQVUsS0FBSyxRQUFRLElBQUk7QUFBQSxNQUN6QztBQUFBLElBQ0Y7QUFBQTtBQUFBLElBR0EsTUFBTSxRQUFRLE1BQU07QUFDbEIsWUFBTSxXQUFXLEtBQUssU0FBUztBQUMvQixhQUFPLElBQUkscUJBQXFCLFFBQVE7QUFBQSxJQUMxQztBQUFBLEVBQ0Y7QUFDRjtBQTNOQSxJQUFBRyxjQVlNO0FBWk47QUFBQTtBQUFBO0FBQUEsSUFBQUEsZUFBcUI7QUFZckIsSUFBTSx1QkFBTixNQUFzRDtBQUFBLE1BQzNDO0FBQUEsTUFDUTtBQUFBLE1BQ0EsWUFBWSxvQkFBSSxJQUcvQjtBQUFBLE1BRUYsWUFBWSxVQUFrQjtBQUM1QixhQUFLLFdBQVc7QUFDaEIsYUFBSyxNQUFNO0FBQUEsTUFDYjtBQUFBLE1BRUEsTUFBTSxLQUFLLE1BT2E7QUFDdEIsY0FBTSxFQUFFLE1BQU0sSUFBSSxNQUFNLE9BQU8sZUFBb0I7QUFDbkQsY0FBTUMsUUFBTyxNQUFNLE9BQU8sTUFBVztBQUNyQyxjQUFNLFlBQVksZUFBVyxtQkFBSyxDQUFDO0FBRW5DLGNBQU0sV0FBVyxLQUFLLE9BQU8sU0FBUyxLQUFLO0FBQzNDLGNBQU0sWUFBWSxLQUFLLE9BQ25CLENBQUMsS0FBSyxTQUFTLEdBQUksS0FBSyxRQUFRLENBQUMsQ0FBRSxJQUNsQyxLQUFLLFFBQVEsQ0FBQztBQUVuQixjQUFNLFFBQVEsTUFBTSxVQUFVLFdBQVc7QUFBQSxVQUN2QyxLQUFLLEtBQUssTUFBTUEsTUFBSyxRQUFRLEtBQUssVUFBVSxLQUFLLEdBQUcsSUFBSSxLQUFLO0FBQUEsVUFDN0QsS0FBSyxLQUFLLE1BQU0sRUFBRSxHQUFHLFFBQVEsS0FBSyxHQUFHLEtBQUssSUFBSSxJQUFJO0FBQUEsVUFDbEQsUUFBUSxLQUFLO0FBQUEsUUFDZixDQUFDO0FBRUQsYUFBSyxVQUFVLElBQUksV0FBVyxLQUFLO0FBRW5DLFlBQUksU0FBUztBQUNiLFlBQUksU0FBUztBQUNiLGNBQU0sV0FBNEQsQ0FBQztBQUNuRSxZQUFJLGFBQWtDO0FBQ3RDLFlBQUksU0FBUztBQUViLGNBQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxTQUEwQjtBQUNqRCxnQkFBTSxNQUFNLE9BQU8sSUFBSTtBQUN2QixvQkFBVTtBQUNWLG1CQUFTLEtBQUssRUFBRSxRQUFRLFVBQVUsTUFBTSxJQUFJLENBQUM7QUFDN0MsdUJBQWE7QUFBQSxRQUNmLENBQUM7QUFFRCxjQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsU0FBMEI7QUFDakQsZ0JBQU0sTUFBTSxPQUFPLElBQUk7QUFDdkIsb0JBQVU7QUFDVixtQkFBUyxLQUFLLEVBQUUsUUFBUSxVQUFVLE1BQU0sSUFBSSxDQUFDO0FBQzdDLHVCQUFhO0FBQUEsUUFDZixDQUFDO0FBRUQsY0FBTSxTQUFTLElBQUksUUFJaEIsQ0FBQ0MsVUFBUyxXQUFXO0FBQ3RCLGdCQUFNLEdBQUcsU0FBUyxDQUFDLFFBQVE7QUFDekIsaUJBQUssVUFBVSxPQUFPLFNBQVM7QUFDL0IscUJBQVM7QUFDVCx5QkFBYTtBQUNiLG1CQUFPLEdBQUc7QUFBQSxVQUNaLENBQUM7QUFFRCxnQkFBTSxHQUFHLFNBQVMsQ0FBQyxTQUF3QjtBQUN6QyxpQkFBSyxVQUFVLE9BQU8sU0FBUztBQUMvQixxQkFBUztBQUNULHlCQUFhO0FBQ2IsWUFBQUEsU0FBUSxFQUFFLFFBQVEsUUFBUSxVQUFVLFFBQVEsRUFBRSxDQUFDO0FBQUEsVUFDakQsQ0FBQztBQUFBLFFBQ0gsQ0FBQztBQUVELHdCQUFnQixPQUdiO0FBQ0QsaUJBQU8sQ0FBQyxVQUFVLFNBQVMsU0FBUyxHQUFHO0FBQ3JDLGtCQUFNLFFBQVEsU0FBUyxNQUFNO0FBQzdCLGdCQUFJLE9BQU87QUFDVCxvQkFBTTtBQUFBLFlBQ1IsV0FBVyxDQUFDLFFBQVE7QUFDbEIsb0JBQU0sSUFBSSxRQUFjLENBQUMsTUFBTTtBQUM3Qiw2QkFBYTtBQUFBLGNBQ2YsQ0FBQztBQUNELDJCQUFhO0FBQUEsWUFDZjtBQUFBLFVBQ0Y7QUFBQSxRQUNGO0FBRUEsZUFBTyxFQUFFLFdBQVcsTUFBTSxPQUFPO0FBQUEsTUFDbkM7QUFBQSxNQUVBLE1BQU0sU0FBUyxNQUdZO0FBQ3pCLGNBQU1DLE1BQUssTUFBTSxPQUFPLGFBQWtCO0FBQzFDLGNBQU1GLFFBQU8sTUFBTSxPQUFPLE1BQVc7QUFDckMsY0FBTSxXQUFXQSxNQUFLLFFBQVEsS0FBSyxVQUFVLEtBQUssSUFBSTtBQUN0RCxZQUFJO0FBQ0YsaUJBQU8sTUFBTUUsSUFBRyxTQUFTLFFBQVE7QUFBQSxRQUNuQyxTQUFTLEdBQVk7QUFDbkIsY0FDRSxhQUFhLFNBQ2IsVUFBVSxLQUNULEVBQTRCLFNBQVMsVUFDdEM7QUFDQSxtQkFBTztBQUFBLFVBQ1Q7QUFDQSxnQkFBTTtBQUFBLFFBQ1I7QUFBQSxNQUNGO0FBQUEsTUFFQSxNQUFNLFdBQVcsTUFJQztBQUNoQixjQUFNQSxNQUFLLE1BQU0sT0FBTyxhQUFrQjtBQUMxQyxjQUFNLFVBQVUsTUFBTSxPQUFPLE1BQVc7QUFDeEMsbUJBQVcsUUFBUSxLQUFLLE9BQU87QUFDN0IsZ0JBQU0sV0FBVyxRQUFRLFFBQVEsS0FBSyxVQUFVLEtBQUssVUFBVSxLQUFLLElBQUk7QUFDeEUsZ0JBQU1BLElBQUcsTUFBTSxRQUFRLFFBQVEsUUFBUSxHQUFHLEVBQUUsV0FBVyxLQUFLLENBQUM7QUFDN0QsZ0JBQU1BLElBQUcsVUFBVSxVQUFVLEtBQUssT0FBTztBQUN6QyxjQUFJLEtBQUssS0FBSyxTQUFTLEtBQUssR0FBRztBQUM3QixrQkFBTUEsSUFBRyxNQUFNLFVBQVUsR0FBSztBQUFBLFVBQ2hDO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFBQTtBQUFBLE1BR0EsTUFBTSxVQUFVLE1BR0k7QUFDbEIsZUFBTyxvQkFBb0IsS0FBSyxJQUFJO0FBQUEsTUFDdEM7QUFBQTtBQUFBLE1BR0EsTUFBTSxLQUFLLE1BQWtFO0FBQzNFLGNBQU0sUUFBUSxLQUFLLFVBQVUsSUFBSSxLQUFLLFNBQVM7QUFDL0MsWUFBSSxPQUFPO0FBQ1QsZ0JBQU0sS0FBSyxTQUFTO0FBQ3BCLGVBQUssVUFBVSxPQUFPLEtBQUssU0FBUztBQUFBLFFBQ3RDO0FBQUEsTUFDRjtBQUFBO0FBQUEsTUFHQSxNQUFNLFlBQWdDO0FBQ3BDLGVBQU87QUFBQSxNQUNUO0FBQUEsTUFFQSxNQUFNLFFBQXVCO0FBQUEsTUFFN0I7QUFBQTtBQUFBLE1BR0EsTUFBTSxPQUFzQjtBQUMxQixjQUFNLElBQUksTUFBTSwyQ0FBMkM7QUFBQSxNQUM3RDtBQUFBO0FBQUEsTUFHQSxNQUFNLFdBQTRDO0FBQ2hELGNBQU0sSUFBSSxNQUFNLCtDQUErQztBQUFBLE1BQ2pFO0FBQUE7QUFBQSxNQUdBLE1BQU0sc0JBQXNDO0FBQzFDLGNBQU0sSUFBSSxNQUFNLDBEQUEwRDtBQUFBLE1BQzVFO0FBQUEsSUFDRjtBQUFBO0FBQUE7OztBQzVMQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBNkVBLGVBQWUsWUFDYixZQUNBLFdBQ3NFO0FBQ3RFLFFBQU0sWUFBWSx1QkFBTyxTQUFTO0FBQ2xDLFFBQU0sUUFBUSxJQUFJO0FBQUEsSUFBMEIsQ0FBQ0MsYUFDM0MsV0FBVyxNQUFNQSxTQUFRLFNBQVMsR0FBRyxTQUFTO0FBQUEsRUFDaEQ7QUFDQSxRQUFNLFNBQVMsTUFBTSxRQUFRLEtBQUssQ0FBQyxXQUFXLFFBQVEsS0FBSyxDQUFDO0FBQzVELFNBQU8sV0FBVyxZQUFZLE9BQU87QUFDdkM7QUFFQSxTQUFTLGVBQ1AsU0FDQSxLQUNBLFFBQ0EsU0FDTTtBQUNOLFFBQU0sUUFBNkM7QUFBQSxJQUNqRCxFQUFFLE1BQU0sY0FBYyxTQUFTLE9BQU8sT0FBTztBQUFBLElBQzdDO0FBQUEsTUFDRSxNQUFNO0FBQUEsTUFDTixTQUFTLEtBQUssVUFBVSxFQUFFLFVBQVUsT0FBTyxVQUFVLFFBQVEsR0FBRyxNQUFNLENBQUM7QUFBQSxJQUN6RTtBQUFBLEVBQ0Y7QUFDQSxNQUFJLE9BQU8sUUFBUTtBQUNqQixVQUFNLEtBQUssRUFBRSxNQUFNLGNBQWMsU0FBUyxPQUFPLE9BQU8sQ0FBQztBQUFBLEVBQzNEO0FBRUEsVUFBUSxXQUFXLEVBQUUsT0FBTyxVQUFVLElBQUksQ0FBQyxFQUFFLE1BQU0sTUFBTTtBQUFBLEVBRXpELENBQUM7QUFDSDtBQTdHQSxJQUVhLG9CQXdCQTtBQTFCYjtBQUFBO0FBQUE7QUFFTyxJQUFNLHFCQUFxQjtBQXdCM0IsSUFBTSx1QkFBdUIsQ0FBQyxTQUFxQztBQUN4RSxZQUFNLEVBQUUsUUFBUSxJQUFJO0FBRXBCLFlBQU0sTUFBTSxPQUFPLFlBQTZDO0FBQzlELGNBQU0sRUFBRSxTQUFTLFlBQVksbUJBQW1CLElBQUk7QUFFcEQsY0FBTSxhQUFhLE1BQU0sUUFBUSxLQUFLO0FBQUEsVUFDcEMsU0FBUztBQUFBLFVBQ1QsTUFBTSxDQUFDLE1BQU0sT0FBTztBQUFBLFFBQ3RCLENBQUM7QUFFRCxZQUFJLGNBQWMsR0FBRztBQUNuQixpQkFBTztBQUFBLFlBQ0wsV0FBVyxXQUFXO0FBQUEsWUFDdEIsUUFBUTtBQUFBLFlBQ1IsUUFBUTtBQUFBLFlBQ1IsVUFBVTtBQUFBLFlBQ1YsUUFBUTtBQUFBLFlBQ1IsV0FBVztBQUFBLFVBQ2I7QUFBQSxRQUNGO0FBRUEsY0FBTSxZQUFZLE1BQU0sWUFBWSxZQUFZLFNBQVM7QUFFekQsWUFBSSxDQUFDLFdBQVc7QUFDZCxpQkFBTztBQUFBLFlBQ0wsV0FBVyxXQUFXO0FBQUEsWUFDdEIsUUFBUTtBQUFBLFlBQ1IsUUFBUTtBQUFBLFlBQ1IsVUFBVTtBQUFBLFlBQ1YsUUFBUTtBQUFBLFlBQ1IsV0FBVztBQUFBLFVBQ2I7QUFBQSxRQUNGO0FBRUEsY0FBTSxZQUFZLGVBQWUsS0FBSyxJQUFJLENBQUMsSUFBSSxXQUFXLFNBQVM7QUFDbkUsdUJBQWUsU0FBUyxXQUFXLFdBQVcsT0FBTztBQUVyRCxlQUFPO0FBQUEsVUFDTCxXQUFXLFdBQVc7QUFBQSxVQUN0QixRQUFRLFVBQVU7QUFBQSxVQUNsQixRQUFRLFVBQVU7QUFBQSxVQUNsQixVQUFVLFVBQVU7QUFBQSxVQUNwQixRQUFRLFVBQVUsYUFBYSxJQUFJLGNBQWM7QUFBQSxVQUNqRDtBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBRUEsYUFBTyxFQUFFLElBQUk7QUFBQSxJQUNmO0FBQUE7QUFBQTs7O0FDM0VBO0FBQUE7QUFBQTtBQUFBO0FBQUE7OztBQ0FBLElBQUFDLGdCQUF5RDs7O0FDQXpELElBQUFDLGVBQXFCOzs7QUNBZCxJQUFNLFdBQVcsWUFBWTtBQUNsQyxNQUFJO0FBQ0YsVUFBTSxFQUFFLG1CQUFtQixJQUFJLE1BQU0sT0FBTyxjQUFjO0FBQzFELFdBQU8sUUFBUSxNQUFNLG1CQUFtQixDQUFDO0FBQUEsRUFDM0MsUUFBUTtBQUNOLFdBQU87QUFBQSxFQUNUO0FBQ0Y7OztBQ1BBLGFBQXdCO0FBRWpCLElBQU0sdUJBQU4sY0FBMEMseUJBQWtCO0FBQUEsRUFDakUsTUFBTTtBQUFBLEVBQ04sU0FBUztBQUNYLENBQUMsRUFBRTtBQUFDO0FBRUcsSUFBTSxlQUFOLGNBQWtDLHlCQUFrQjtBQUFBLEVBQ3pELE1BQU07QUFBQSxFQUNOLFNBQVM7QUFDWCxDQUFDLEVBQUU7QUFBQztBQUVHLElBQU0sdUJBQU4sY0FBMEMseUJBQWtCO0FBQUEsRUFDakUsTUFBTTtBQUFBLEVBQ04sU0FBUztBQUNYLENBQUMsRUFBRTtBQUFDO0FBRUcsSUFBTSxlQUFOLGNBQWtDLHlCQUFrQjtBQUFBLEVBQ3pELE1BQU07QUFBQSxFQUNOLFNBQVM7QUFDWCxDQUFDLEVBQUU7QUFBQztBQUVHLElBQU0sdUJBQU4sY0FBMEMseUJBQWtCO0FBQUEsRUFDakUsTUFBTTtBQUFBLEVBQ04sU0FBUztBQUNYLENBQUMsRUFBRTtBQUFDO0FBRUcsSUFBTSxlQUFOLGNBQWtDLHlCQUFrQjtBQUFBLEVBQ3pELE1BQU07QUFBQSxFQUNOLFNBQVM7QUFDWCxDQUFDLEVBQUU7QUFBQztBQUVHLElBQU0sdUJBQU4sY0FBMEMseUJBQWtCO0FBQUEsRUFDakUsTUFBTTtBQUFBLEVBQ04sU0FBUztBQUNYLENBQUMsRUFBRTtBQUFDOzs7QUNoQ0o7QUFVQSxJQUFNLG1CQUFtQjtBQUN6QixJQUFNLGtCQUFrQixJQUFJLEtBQUs7QUFrQ2pDLFNBQVMsZ0JBQ1AsU0FDMkI7QUFDM0IsU0FBTyxDQUFDLE1BQU0sUUFBUSxPQUFPO0FBQy9CO0FBR0EsZUFBZSxvQkFBNkM7QUFDMUQsTUFBSSxNQUFNLFNBQVMsR0FBRztBQUNwQixVQUFNLEVBQUUsZUFBQUMsZUFBYyxJQUFJLE1BQU07QUFDaEMsV0FBT0EsZUFBYztBQUFBLEVBQ3ZCO0FBRUEsTUFBSSxNQUFNLGtCQUFrQixHQUFHO0FBQzdCLFVBQU0sRUFBRSxlQUFBQyxlQUFjLElBQUksTUFBTTtBQUNoQyxXQUFPQSxlQUFjO0FBQUEsRUFDdkI7QUFFQSxRQUFNLEVBQUUsY0FBQUMsY0FBYSxJQUFJLE1BQU07QUFDL0IsU0FBT0EsY0FBYTtBQUN0QjtBQUVBLGVBQWUsb0JBQXNDO0FBQ25ELE1BQUk7QUFDRixVQUFNLEVBQUUsU0FBUyxJQUFJLE1BQU0sT0FBTyxlQUFvQjtBQUN0RCxhQUFTLHlCQUF5QixFQUFFLE9BQU8sVUFBVSxTQUFTLElBQUssQ0FBQztBQUNwRSxXQUFPO0FBQUEsRUFDVCxRQUFRO0FBQ04sV0FBTztBQUFBLEVBQ1Q7QUFDRjtBQUVBLGVBQWUsZUFDYixTQUNBLE1BQzJEO0FBQzNELE1BQUksQ0FBQyxTQUFTO0FBQ1osVUFBTSxVQUFVLE1BQU0sa0JBQWtCO0FBQ3hDLFdBQU8sRUFBRSxTQUFTLGFBQWEsUUFBUSxLQUFLO0FBQUEsRUFDOUM7QUFDQSxNQUFJLGdCQUFnQixPQUFPLEdBQUc7QUFDNUIsV0FBTyxFQUFFLFNBQVMsU0FBUyxhQUFhLFFBQVEsS0FBSztBQUFBLEVBQ3ZEO0FBQ0EsTUFBSSxNQUFNO0FBQ1IsVUFBTSxRQUFRLFFBQVEsS0FBSyxDQUFDLE1BQU0sRUFBRSxTQUFTLElBQUk7QUFDakQsUUFBSSxDQUFDLE9BQU87QUFDVixZQUFNLElBQUksYUFBYTtBQUFBLFFBQ3JCLFFBQVEsMEJBQTBCLElBQUksaUJBQWlCLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxJQUFJLENBQUM7QUFBQSxNQUM5RixDQUFDO0FBQUEsSUFDSDtBQUNBLFdBQU8sRUFBRSxTQUFTLE9BQU8sYUFBYSxNQUFNLEtBQUs7QUFBQSxFQUNuRDtBQUNBLE1BQUksUUFBUSxXQUFXLEdBQUc7QUFDeEIsVUFBTSxJQUFJLGFBQWEsRUFBRSxRQUFRLGlDQUFpQyxDQUFDO0FBQUEsRUFDckU7QUFDQSxTQUFPLEVBQUUsU0FBUyxRQUFRLENBQUMsR0FBRyxhQUFhLFFBQVEsQ0FBQyxFQUFFLEtBQUs7QUFDN0Q7QUFFQSxlQUFlLGlCQUFpQixLQUFzQztBQUNwRSxNQUFJLElBQUksV0FBVztBQUNqQixXQUFPLElBQUk7QUFBQSxFQUNiO0FBQ0EsTUFBSSxDQUFDLElBQUksWUFBWTtBQUNuQixVQUFNLElBQUk7QUFBQSxNQUNSO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFDQSxRQUFNLFNBQVMsTUFBTSxJQUFJLE1BQU0sUUFBUSxRQUFRLElBQUksSUFBSSxVQUFVO0FBQ2pFLE1BQUksWUFBWSxRQUFRLGFBQWEsSUFBSTtBQUN6QyxTQUFPLElBQUk7QUFDYjtBQUVBLGVBQXNCLE1BR3BCLEtBQ0EsTUFDc0I7QUFDdEI7QUFDQSxRQUFNLFlBQVksTUFBTSxpQkFBaUIsR0FBRztBQUM1QyxNQUFJLElBQUksZUFBZTtBQUNyQixXQUFPLEVBQUUsTUFBTSxJQUFJLGNBQWM7QUFBQSxFQUNuQztBQUVBLFFBQU1DLFNBQVEsSUFBSTtBQUNsQixRQUFNQyxPQUFNLGFBQWE7QUFBQSxJQUN2QixRQUFRLEVBQUUsR0FBR0QsT0FBTSxRQUFRLFNBQVMsTUFBTUEsT0FBTSxLQUFLO0FBQUEsSUFDckQsV0FBVztBQUFBLElBQ1gsU0FBUyxFQUFFLFVBQVU7QUFBQSxFQUN2QixDQUFDO0FBRUQsUUFBTSxxQkFBcUJDLEtBQUksS0FBSyxtQkFBbUI7QUFBQSxJQUNyRCxlQUFlLE1BQU07QUFBQSxFQUN2QixDQUFDO0FBQ0QsUUFBTSxFQUFFLFNBQVMsWUFBWSxJQUFJLE1BQU07QUFBQSxJQUNyQ0QsT0FBTSxRQUFRO0FBQUEsSUFDZCxNQUFNO0FBQUEsRUFDUjtBQUNBLHFCQUFtQjtBQUVuQixNQUFJLE1BQU0sS0FBSztBQUNiLFFBQUksT0FBTyxLQUFLO0FBQUEsRUFDbEI7QUFFQSxRQUFNLFdBQVdDLEtBQUksWUFBWTtBQUFBLElBQy9CLFNBQVM7QUFBQSxJQUNULFNBQVMsTUFBTSxXQUFXLFFBQVEsVUFBVTtBQUFBLEVBQzlDLENBQUM7QUFHRCxNQUFJLHlCQUF5QixDQUFDLFVBQWdCO0FBRzlDLE1BQUksd0JBQXdCLENBQUMsWUFBa0I7QUFBQSxFQUFDO0FBQ2hELFFBQU0sa0JBQWtCLElBQUksUUFBYyxDQUFDQyxVQUFTLFdBQVc7QUFDN0QsNkJBQXlCQTtBQUN6Qiw0QkFBd0I7QUFBQSxFQUMxQixDQUFDO0FBRUQsTUFBSSxpQkFBaUIsWUFBWTtBQUMvQixRQUFJO0FBQ0osVUFBTSxtQkFBbUIsU0FBUyxLQUFLLGVBQWU7QUFFdEQsUUFBSTtBQUNGLFlBQU0saUJBQWlCLFNBQVMsS0FBSyxxQkFBcUI7QUFDMUQsWUFBTSxTQUFTLE1BQU1GLE9BQU0sUUFBUSxRQUFRLElBQUksU0FBUztBQUN4RCxxQkFBZTtBQUVmLFlBQU0sa0JBQWtCLFFBQVEsWUFBWSxDQUFDO0FBQzdDLFlBQU0sbUJBQW1CLE1BQU0sV0FBVyxnQkFBZ0IsV0FBVztBQUNyRSxZQUFNLGVBQWUsTUFBTSxPQUFPLGdCQUFnQjtBQUNsRCxZQUFNLHlCQUNKLE1BQU0saUJBQWlCLGdCQUFnQixpQkFBaUI7QUFDMUQsWUFBTSxlQUNKLElBQUksUUFBUSxNQUFNLE9BQU8sZ0JBQWdCLE9BQU87QUFDbEQsVUFBSSxjQUFjO0FBQ2hCLFlBQUksT0FBTztBQUFBLE1BQ2I7QUFDQSxZQUFNLGtCQUFrQjtBQUFBLFFBQ3RCLEdBQUcsZ0JBQWdCO0FBQUE7QUFBQSxRQUVuQixHQUFJLE1BQWM7QUFBQSxNQUNwQjtBQUVBLFVBQUksUUFBUTtBQUNWLGNBQU0saUJBQ0osQ0FBQyxvQkFBb0IsT0FBTyxPQUFPLFlBQVk7QUFFakQsWUFBSSxrQkFBa0IsT0FBTyxPQUFPLGFBQWE7QUFDL0MsaUNBQXVCO0FBQ3ZCLGdCQUFNLHNCQUFzQixTQUFTO0FBQUEsWUFDbkM7QUFBQSxZQUNBO0FBQUEsY0FDRSxZQUFZO0FBQUEsWUFDZDtBQUFBLFVBQ0Y7QUFDQSxnQkFBTSxXQUFXLE1BQU0sUUFBUSxRQUFRO0FBQUEsWUFDckMsT0FBQUE7QUFBQSxZQUNBLFVBQVUsT0FBTyxNQUFNO0FBQUEsWUFDdkIsS0FBSyxPQUFPLE1BQU07QUFBQSxZQUNsQixRQUFRLE1BQU07QUFBQSxZQUNkLEtBQUs7QUFBQSxVQUNQLENBQUM7QUFDRCw4QkFBb0I7QUFDcEIsY0FBSSxPQUFPLFNBQVM7QUFDcEIsaUJBQU87QUFBQSxRQUNUO0FBRUEsWUFBSSxrQkFBa0IsQ0FBQyxPQUFPLE9BQU8sYUFBYTtBQUNoRCxpQ0FBdUI7QUFDdkIsZ0JBQU0scUJBQXFCLFNBQVMsS0FBSyxrQkFBa0I7QUFDM0QsZ0JBQU0sZUFBZSxLQUFLLE1BQU0sTUFBTTtBQUN0Qyw2QkFBbUI7QUFFbkIsZ0JBQU0seUJBQXlCLFNBQVM7QUFBQSxZQUN0QztBQUFBLFVBQ0Y7QUFDQSxnQkFBTSxRQUFRLE1BQU1BLE9BQU0sUUFBUSxRQUFRLElBQUksU0FBUztBQUN2RCxpQ0FBdUI7QUFFdkIsY0FBSSxDQUFDLE9BQU87QUFDVixrQkFBTSxJQUFJLHFCQUFxQixFQUFFLElBQUksVUFBVSxDQUFDO0FBQUEsVUFDbEQ7QUFDQSxnQkFBTSxzQkFBc0IsU0FBUztBQUFBLFlBQ25DO0FBQUEsWUFDQTtBQUFBLGNBQ0UsWUFBWTtBQUFBLFlBQ2Q7QUFBQSxVQUNGO0FBQ0EsZ0JBQU0sV0FBVyxNQUFNLFFBQVEsUUFBUTtBQUFBLFlBQ3JDLE9BQUFBO0FBQUEsWUFDQSxVQUFVLE1BQU0sTUFBTTtBQUFBLFlBQ3RCLEtBQUssTUFBTSxNQUFNO0FBQUEsWUFDakIsUUFBUSxNQUFNO0FBQUEsWUFDZCxLQUFLO0FBQUEsVUFDUCxDQUFDO0FBQ0QsOEJBQW9CO0FBQ3BCLGNBQUksT0FBTyxTQUFTO0FBQ3BCLGlCQUFPO0FBQUEsUUFDVDtBQUVBLFlBQUksT0FBTyxNQUFNLFVBQVU7QUFDekIsZ0JBQU0sc0JBQXNCLE9BQU8sTUFBTTtBQUN6Qyw4QkFBb0IsWUFBWTtBQUM5QixrQkFBTSxzQkFBc0IsU0FBUztBQUFBLGNBQ25DO0FBQUEsWUFDRjtBQUNBLGdCQUFJO0FBQ0Ysb0JBQU0sTUFBTSxNQUFNLFFBQVEsUUFBUTtBQUFBLGdCQUNoQyxPQUFBQTtBQUFBLGdCQUNBLFVBQVU7QUFBQSxnQkFDVixLQUFLO0FBQUEsY0FDUCxDQUFDO0FBQ0Qsb0JBQU0sSUFBSSxLQUFLO0FBQUEsWUFDakIsUUFBUTtBQUNOLGtDQUFvQjtBQUNwQjtBQUFBLFlBQ0Y7QUFDQSxnQ0FBb0I7QUFBQSxVQUN0QixHQUFHO0FBQUEsUUFDTDtBQUFBLE1BQ0Y7QUFFQSxZQUFNLE1BQU0sS0FBSyxJQUFJO0FBQ3JCLFlBQU0sU0FBMkI7QUFBQSxRQUMvQixTQUFTO0FBQUEsUUFDVCxTQUFTLG9CQUFvQixRQUFRLE9BQU8sV0FBVztBQUFBLFFBQ3ZELGVBQ0UsMEJBQTBCLFFBQVEsT0FBTyxpQkFBaUI7QUFBQSxRQUM1RCxhQUFhO0FBQUEsUUFDYixVQUFVO0FBQUEsUUFDVixLQUFLO0FBQUEsTUFDUDtBQUVBLFlBQU0sWUFBcUI7QUFBQSxRQUN6QixJQUFJO0FBQUEsUUFDSixPQUFPO0FBQUEsUUFDUCxXQUFXLFFBQVEsYUFBYTtBQUFBLFFBQ2hDLGNBQWM7QUFBQSxNQUNoQjtBQUVBLFlBQU0sd0JBQXdCLFNBQVM7QUFBQSxRQUNyQztBQUFBLE1BQ0Y7QUFDQSxZQUFNQSxPQUFNLFFBQVEsUUFBUSxJQUFJLFdBQVcsU0FBUztBQUNwRCw0QkFBc0I7QUFFdEIsNkJBQXVCO0FBRXZCLFlBQU0sb0JBQW9CLFNBQVMsS0FBSyxnQkFBZ0I7QUFDeEQsWUFBTSxTQUFTLE1BQU0sUUFBUSxPQUFPO0FBQUEsUUFDbEMsS0FBSyxJQUFJLFFBQVE7QUFBQSxRQUNqQixPQUFBQTtBQUFBLFFBQ0EsT0FBTztBQUFBLFVBQ0wsR0FBRztBQUFBLFVBQ0gsS0FBSztBQUFBLFVBQ0wsUUFBUTtBQUFBLFFBQ1Y7QUFBQSxRQUNBLFFBQVE7QUFBQSxRQUNSLFFBQVEsTUFBTTtBQUFBLFFBQ2QsS0FBSztBQUFBLE1BQ1AsQ0FBQztBQUNELHdCQUFrQjtBQUVsQixhQUFPLGNBQWMsS0FBSyxJQUFJO0FBQzlCLGFBQU8sV0FBVyxPQUFPO0FBQ3pCLGFBQU8sTUFBTSxPQUFPLFNBQVM7QUFFN0IsWUFBTSw0QkFBNEIsU0FBUztBQUFBLFFBQ3pDO0FBQUEsTUFDRjtBQUNBLFlBQU1BLE9BQU0sUUFBUSxRQUFRLE9BQU8sV0FBVztBQUFBLFFBQzVDLE9BQU87QUFBQSxRQUNQLGNBQWMsS0FBSyxJQUFJO0FBQUEsTUFDekIsQ0FBQztBQUNELGdDQUEwQjtBQUUxQixVQUFJLE9BQU8sT0FBTyxTQUFTO0FBQzNCLGFBQU8sT0FBTztBQUFBLElBQ2hCLFNBQVMsS0FBSztBQUNaLFVBQUksZ0JBQWdCO0FBQ3BCLDRCQUFzQixHQUFHO0FBQ3pCLFlBQU07QUFBQSxJQUNSLFVBQUU7QUFDQSxZQUFNLGVBQWUsU0FBUyxLQUFLLGdCQUFnQjtBQUNuRCxZQUFNO0FBQ04sbUJBQWE7QUFDYix1QkFBaUI7QUFBQSxJQUNuQjtBQUFBLEVBQ0YsR0FBRztBQUVILFFBQU0scUJBQXFCLFNBQVMsS0FBSyx3QkFBd0I7QUFDakUsUUFBTTtBQUNOLHFCQUFtQjtBQUNuQixTQUFPLEVBQUUsTUFBTSxJQUFJLGNBQWM7QUFDbkM7QUFFQSxlQUFzQixRQUNwQixLQUNBLFFBQzBCO0FBQzFCLFFBQU0sWUFBWSxNQUFNLGlCQUFpQixHQUFHO0FBQzVDLFFBQU1BLFNBQVEsSUFBSTtBQUNsQixRQUFNQyxPQUFNLGFBQWE7QUFBQSxJQUN2QixRQUFRLEVBQUUsR0FBR0QsT0FBTSxRQUFRLFNBQVMsTUFBTUEsT0FBTSxLQUFLO0FBQUEsSUFDckQsV0FBVztBQUFBLElBQ1gsU0FBUyxFQUFFLFVBQVU7QUFBQSxFQUN2QixDQUFDO0FBRUQsTUFBSSxJQUFJLGVBQWU7QUFDckIsV0FBTyxNQUFNLElBQUk7QUFBQSxFQUNuQjtBQUVBLE1BQUksU0FBUyxNQUFNQSxPQUFNLFFBQVEsUUFBUSxJQUFJLFNBQVM7QUFFdEQsTUFBSSxDQUFDLFFBQVE7QUFDWCxVQUFNLEVBQUUsS0FBSyxJQUFJLE1BQU0sTUFBTSxLQUFLLEVBQUUsT0FBTyxDQUFDO0FBQzVDLFdBQU8sTUFBTTtBQUFBLEVBQ2Y7QUFFQSxNQUFJLENBQUMsT0FBTyxPQUFPLGFBQWE7QUFDOUIsVUFBTSxlQUFlLEtBQUssTUFBTTtBQUNoQyxhQUFTLE1BQU1BLE9BQU0sUUFBUSxRQUFRLElBQUksU0FBUztBQUFBLEVBQ3BEO0FBRUEsTUFBSSxDQUFDLFFBQVE7QUFDWCxVQUFNLElBQUkscUJBQXFCLEVBQUUsSUFBSSxVQUFVLENBQUM7QUFBQSxFQUNsRDtBQUVBLFFBQU0sRUFBRSxRQUFRLElBQUksTUFBTTtBQUFBLElBQ3hCLElBQUksTUFBTSxRQUFRO0FBQUEsSUFDbEIsT0FBTyxNQUFNO0FBQUEsRUFDZjtBQUVBLEVBQUFBLE9BQU0sUUFBUSxRQUNYLE9BQU8sV0FBVyxFQUFFLGNBQWMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxFQUM5QyxNQUFNLENBQUMsVUFBVTtBQUNoQixJQUFBQyxLQUFJLE1BQU0seUNBQXlDLEVBQUUsTUFBTSxDQUFDO0FBQUEsRUFDOUQsQ0FBQztBQUVILFFBQU0sV0FBVyxNQUFNLFFBQVEsUUFBUTtBQUFBLElBQ3JDLE9BQUFEO0FBQUEsSUFDQSxVQUFVLE9BQU8sTUFBTTtBQUFBLElBQ3ZCLEtBQUssT0FBTyxNQUFNO0FBQUEsSUFDbEI7QUFBQSxJQUNBLEtBQUFDO0FBQUEsRUFDRixDQUFDO0FBQ0QsTUFBSSxPQUFPLFNBQVM7QUFDcEIsU0FBTztBQUNUO0FBRUEsZUFBZSxlQUNiLEtBQ0EsUUFDZTtBQUNmLFFBQU0sS0FBSyxJQUFJO0FBQ2YsUUFBTSxXQUFXLEtBQUssSUFBSSxJQUFJO0FBRTlCLFNBQU8sS0FBSyxJQUFJLElBQUksVUFBVTtBQUM1QixZQUFRLGVBQWU7QUFFdkIsVUFBTSxTQUFTLE1BQU0sSUFBSSxNQUFNLFFBQVEsUUFBUSxJQUFJLEVBQUU7QUFDckQsUUFBSSxRQUFRLE9BQU8sYUFBYTtBQUM5QjtBQUFBLElBQ0Y7QUFFQSxVQUFNLElBQUksUUFBUSxDQUFDLE1BQU0sV0FBVyxHQUFHLGdCQUFnQixDQUFDO0FBQUEsRUFDMUQ7QUFFQSxRQUFNLElBQUksYUFBYTtBQUFBLElBQ3JCLFFBQVEsa0NBQWtDLEVBQUU7QUFBQSxFQUM5QyxDQUFDO0FBQ0g7OztBQ2hhQSxlQUFzQixLQUNwQixtQkFDRyxNQUNIO0FBRUEsUUFBTSxNQUFNLE1BQU0sUUFBUSxjQUFjO0FBQ3hDLFNBQU8sTUFBTSxJQUFJLEtBQUssR0FBRyxJQUFJO0FBQy9COzs7QUNQQSxlQUFzQixVQUNwQixtQkFDRyxNQUNIO0FBQ0E7QUFDQSxRQUFNLE1BQU0sTUFBTSxRQUFRLGNBQWM7QUFDeEMsU0FBTyxNQUFNLElBQUksVUFBVSxHQUFHLElBQUk7QUFDcEM7OztBQ1BBLGVBQXNCLFVBQ3BCLG1CQUNHLE1BQ0g7QUFDQTtBQUNBLFFBQU0sTUFBTSxNQUFNLFFBQVEsY0FBYztBQUN4QyxTQUFPLE1BQU0sSUFBSSxVQUFVLEdBQUcsSUFBSTtBQUNwQzs7O0FDUEEsZUFBc0IsS0FDcEIsbUJBQ0csTUFDSDtBQUNBO0FBQ0EsUUFBTSxNQUFNLE1BQU0sUUFBUSxjQUFjO0FBQ3hDLFNBQU8sTUFBTSxJQUFJLEtBQUssR0FBRyxJQUFJO0FBQy9COzs7QUNQQSxlQUFzQixTQUNwQixtQkFDRyxNQUNIO0FBQ0E7QUFDQSxRQUFNLE1BQU0sTUFBTSxRQUFRLGNBQWM7QUFDeEMsU0FBTyxNQUFNLElBQUksU0FBUyxHQUFHLElBQUk7QUFDbkM7OztBQ1BBLGVBQXNCLFNBQ3BCLG1CQUNHLE1BQ0g7QUFDQTtBQUNBLFFBQU0sTUFBTSxNQUFNLFFBQVEsY0FBYztBQUN4QyxTQUFPLE1BQU0sSUFBSSxTQUFTLEdBQUcsSUFBSTtBQUNuQzs7O0FDUEEsZUFBc0IsTUFDcEIsbUJBQ0csTUFDSDtBQUNBO0FBQ0EsUUFBTSxNQUFNLE1BQU0sUUFBUSxjQUFjO0FBQ3hDLFNBQU8sTUFBTSxJQUFJLE1BQU0sR0FBRyxJQUFJO0FBQ2hDOzs7QUNQQSxlQUFzQixLQUNwQixtQkFDRyxNQUNIO0FBQ0E7QUFDQSxRQUFNLE1BQU0sTUFBTSxRQUFRLGNBQWM7QUFDeEMsU0FBTyxNQUFNLElBQUksS0FBSyxHQUFHLElBQUk7QUFDL0I7OztBQ1BBLGVBQXNCLG9CQUNwQixtQkFDRyxNQUNIO0FBQ0E7QUFDQSxRQUFNLE1BQU0sTUFBTSxRQUFRLGNBQWM7QUFDeEMsU0FBTyxNQUFNLElBQUksb0JBQW9CLEdBQUcsSUFBSTtBQUM5Qzs7O0FDUEEsZUFBc0IsV0FDcEIsbUJBQ0csTUFDSDtBQUNBO0FBQ0EsUUFBTSxNQUFNLE1BQU0sUUFBUSxjQUFjO0FBQ3hDLFNBQU8sTUFBTSxJQUFJLFdBQVcsR0FBRyxJQUFJO0FBQ3JDOzs7QWJxQk8sU0FBUyxjQUVkRSxRQUFpQixJQUE4QjtBQUMvQyxRQUFNLFlBQ0osT0FBTyxPQUFPLFdBQVcsS0FBTSxJQUFJLE1BQU0sZUFBVyxtQkFBSyxDQUFDO0FBRTVELFFBQU0sV0FBVyxtQkFBbUJBLE1BQUs7QUFDekMsTUFBSSxpQkFBaUIsU0FBUyxJQUFJLFNBQVM7QUFDM0MsTUFBSSxDQUFDLGdCQUFnQjtBQUNuQixxQkFBaUIsRUFBRSxPQUFBQSxRQUFPLFVBQVU7QUFDcEMsYUFBUyxJQUFJLFdBQVcsY0FBYztBQUFBLEVBQ3hDO0FBRUEsU0FBTztBQUFBLElBQ0wsSUFBSTtBQUFBLElBQ0osSUFBSSxNQUFNO0FBQ1IsYUFBTyxlQUFnQixRQUFRO0FBQUEsSUFDakM7QUFBQSxJQUNBLE9BQVEsTUFBeUIsS0FBSyxNQUFNLGNBQWM7QUFBQSxJQUMxRCxNQUFNLEtBQUssS0FBSyxNQUFNLGNBQWM7QUFBQSxJQUNwQyxVQUFVLFNBQVMsS0FBSyxNQUFNLGNBQWM7QUFBQSxJQUM1QyxZQUFZLFdBQVcsS0FBSyxNQUFNLGNBQWM7QUFBQSxJQUNoRCxXQUFXLFVBQVUsS0FBSyxNQUFNLGNBQWM7QUFBQSxJQUM5QyxxQkFBcUIsb0JBQW9CLEtBQUssTUFBTSxjQUFjO0FBQUEsSUFDbEUsT0FBTyxNQUFNLEtBQUssTUFBTSxjQUFjO0FBQUEsSUFDdEMsTUFBTSxLQUFLLEtBQUssTUFBTSxjQUFjO0FBQUEsSUFDcEMsTUFBTSxLQUFLLEtBQUssTUFBTSxjQUFjO0FBQUEsSUFDcEMsVUFBVSxTQUFTLEtBQUssTUFBTSxjQUFjO0FBQUEsSUFDNUMsV0FBVyxVQUFVLEtBQUssTUFBTSxjQUFjO0FBQUEsRUFDaEQ7QUFDRjtBQU1PLFNBQVMsa0JBR2RBLFFBQ0EsV0FDa0M7QUFDbEMsUUFBTSxpQkFBaUM7QUFBQSxJQUNyQyxPQUFBQTtBQUFBLElBQ0EsV0FBVztBQUFBLElBQ1gsWUFBWTtBQUFBLEVBQ2Q7QUFFQSxTQUFPO0FBQUEsSUFDTCxPQUFRLE1BQXlCLEtBQUssTUFBTSxjQUFjO0FBQUEsSUFDMUQsTUFBTSxLQUFLLEtBQUssTUFBTSxjQUFjO0FBQUEsSUFDcEMsVUFBVSxTQUFTLEtBQUssTUFBTSxjQUFjO0FBQUEsSUFDNUMsWUFBWSxXQUFXLEtBQUssTUFBTSxjQUFjO0FBQUEsSUFDaEQsV0FBVyxVQUFVLEtBQUssTUFBTSxjQUFjO0FBQUEsSUFDOUMscUJBQXFCLG9CQUFvQixLQUFLLE1BQU0sY0FBYztBQUFBLElBQ2xFLE9BQU8sTUFBTSxLQUFLLE1BQU0sY0FBYztBQUFBLElBQ3RDLE1BQU0sS0FBSyxLQUFLLE1BQU0sY0FBYztBQUFBLElBQ3BDLE1BQU0sS0FBSyxLQUFLLE1BQU0sY0FBYztBQUFBLElBQ3BDLFVBQVUsU0FBUyxLQUFLLE1BQU0sY0FBYztBQUFBLElBQzVDLFdBQVcsVUFBVSxLQUFLLE1BQU0sY0FBYztBQUFBLEVBQ2hEO0FBQ0Y7OztBYzVGQSxJQUFBQyxlQUFxQjs7O0FDVXJCLFNBQVMsY0FBYyxNQUFxQjtBQUMxQyxRQUFNLElBQUksS0FBSztBQUNmLFNBQU8sT0FBTyxHQUFHLGVBQWUsWUFBWSxFQUFFLFdBQVcsV0FBVyxRQUFRO0FBQzlFO0FBRUEsU0FBUyxtQkFDUCxNQUNzQztBQUN0QyxTQUNFLE9BQU8sU0FBUyxZQUNoQixTQUFTLFFBQ1QsVUFBVSxTQUNULEtBQUssU0FBUyxVQUFVLEtBQUssU0FBUztBQUUzQztBQUVPLFNBQVMscUJBQXFCO0FBQUEsRUFDbkM7QUFBQSxFQUNBO0FBQ0YsR0FHVztBQUNULFNBQU8sTUFDSixPQUFPLENBQUMsTUFBTSxFQUFFLFNBQVMsU0FBUyxLQUFLLEVBQ3ZDLElBQUksQ0FBQyxNQUFNO0FBQ1YsUUFBSSxFQUFFLFVBQVUsU0FBUyxPQUFPO0FBQzlCLGFBQU87QUFBQSxJQUNUO0FBUUEsUUFBSSxtQkFBbUIsU0FBUyxJQUFJLEdBQUc7QUFDckMsYUFBTyxFQUFFLEdBQUcsR0FBRyxNQUFNLFNBQVMsS0FBSztBQUFBLElBQ3JDO0FBQ0EsV0FBTztBQUFBLEVBQ1QsQ0FBQztBQUNMO0FBRU8sU0FBUyxtQkFBMEMsTUFPdkQ7QUFHRCxNQUFJLFdBQVcsS0FBSztBQUVwQixNQUFJLEtBQUssVUFBVSxRQUFXO0FBQzVCLFVBQU0sUUFBUSxLQUFLO0FBQ25CLGVBQVcsU0FBUyxPQUFPLENBQUMsTUFBTSxFQUFFLGFBQWEsS0FBSztBQUFBLEVBQ3hEO0FBRUEsTUFBSSxDQUFDLEtBQUssZUFBZTtBQUN2QixlQUFXLFNBQVMsT0FBTyxDQUFDLE1BQU0sRUFBRSxjQUFjLElBQUk7QUFBQSxFQUN4RDtBQUlBLGFBQVcsQ0FBQyxHQUFHLFFBQVEsRUFBRSxLQUFLLENBQUMsR0FBRyxNQUFNLEVBQUUsWUFBWSxFQUFFLFNBQVM7QUFFakUsUUFBTSxRQUFRLEtBQUssc0JBQ2YsS0FBSyxNQUFNLE9BQU8sQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsSUFDMUMsS0FBSztBQUVULFFBQU0saUJBQWlCLG9CQUFJLElBQW9CO0FBQy9DLGFBQVcsUUFBUSxPQUFPO0FBQ3hCLFVBQU0sWUFBWSxPQUFPLEtBQUssU0FBUztBQUN2QyxVQUFNLFdBQVcsZUFBZSxJQUFJLFNBQVMsS0FBSyxDQUFDO0FBQ25ELGFBQVMsS0FBSyxJQUFJO0FBQ2xCLG1CQUFlLElBQUksV0FBVyxRQUFRO0FBQUEsRUFDeEM7QUFFQSxTQUFPLFNBQ0osSUFBSSxDQUFDLE1BQU07QUFDVixVQUFNLFlBQVksT0FBTyxFQUFFLEVBQUU7QUFDN0IsUUFBSSxlQUFlLGVBQWUsSUFBSSxTQUFTLEtBQUssQ0FBQztBQUNyRCxpQkFBYSxLQUFLLENBQUMsR0FBRyxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUs7QUFFN0MsUUFBSSxFQUFFLHVCQUF1QixNQUFNO0FBQ2pDLHFCQUFlLHFCQUFxQjtBQUFBLFFBQ2xDLE9BQU87QUFBQSxRQUNQLFVBQVUsRUFBRTtBQUFBLE1BQ2QsQ0FBQztBQUFBLElBQ0g7QUFFQSxXQUFPO0FBQUEsTUFDTCxJQUFJO0FBQUEsTUFDSixNQUFNLEVBQUU7QUFBQSxNQUNSLE9BQU8sYUFBYSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUk7QUFBQSxNQUNyQyxHQUFJLEVBQUUsWUFBWSxPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsSUFBSSxDQUFDO0FBQUEsSUFDdkQ7QUFBQSxFQUNGLENBQUMsRUFDQSxPQUFPLENBQUMsTUFBTSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3JDOzs7QUNyRk8sU0FBUyxvQkFDZCxVQUljO0FBQ2QsUUFBTSxjQUFtRCxDQUFDO0FBQzFELGFBQVcsS0FBSyxVQUFVO0FBQ3hCLGdCQUFZLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxXQUFXO0FBQUEsRUFDMUM7QUFFQSxRQUFNLFlBQVksU0FDZixJQUFJLENBQUMsTUFBTSxFQUFFLE9BQU8sT0FBTyxFQUMzQixPQUFPLENBQUMsTUFBeUIsTUFBTSxNQUFTO0FBRW5ELFFBQU0sUUFBUTtBQUFBLElBQ1osT0FBTyxVQUFVLENBQUMsR0FBRyxTQUFTO0FBQUEsSUFDOUIsYUFBYSxVQUFVLE9BQU8sQ0FBQyxLQUFLLE1BQU0sTUFBTSxFQUFFLGFBQWEsQ0FBQztBQUFBLElBQ2hFLGNBQWMsVUFBVSxPQUFPLENBQUMsS0FBSyxNQUFNLE1BQU0sRUFBRSxjQUFjLENBQUM7QUFBQSxJQUNsRSxhQUFhLFVBQVUsT0FBTyxDQUFDLEtBQUssTUFBTSxNQUFNLEVBQUUsYUFBYSxDQUFDO0FBQUEsSUFDaEUsaUJBQWlCLFVBQVUsT0FBTyxDQUFDLEtBQUssTUFBTSxNQUFNLEVBQUUsaUJBQWlCLENBQUM7QUFBQSxJQUN4RSxrQkFBa0IsVUFBVSxPQUFPLENBQUMsS0FBSyxNQUFNLE1BQU0sRUFBRSxrQkFBa0IsQ0FBQztBQUFBLElBQzFFLGlCQUFpQixVQUFVLE9BQU8sQ0FBQyxLQUFLLE1BQU0sTUFBTSxFQUFFLGlCQUFpQixDQUFDO0FBQUEsSUFDeEUsV0FBVyxVQUFVLE9BQU8sQ0FBQyxLQUFLLE1BQU0sTUFBTSxFQUFFLFdBQVcsQ0FBQztBQUFBLElBQzVELGNBQWMsVUFBVTtBQUFBLEVBQzFCO0FBRUEsU0FBTyxFQUFFLE9BQU8sWUFBWTtBQUM5Qjs7O0FDNUNBLGVBQXNCLFFBQ3BCLGdCQUNBO0FBQ0E7QUFDQSxRQUFNLENBQUMsU0FBUyxVQUFVLEtBQUssSUFBSSxNQUFNLFFBQVEsSUFBSTtBQUFBLElBQ25ELGVBQWUsTUFBTSxRQUFRLFFBQVEsSUFBSSxlQUFlLFNBQVM7QUFBQSxJQUNqRSxlQUFlLE1BQU0sUUFBUSxRQUFRO0FBQUEsTUFDbkMsZUFBZTtBQUFBLElBQ2pCO0FBQUEsSUFDQSxlQUFlLE1BQU0sUUFBUSxLQUFLLGNBQWMsZUFBZSxTQUFTO0FBQUEsRUFDMUUsQ0FBQztBQUVELFFBQU0sZ0JBQ0osU0FBUztBQUFBLElBQ1AsQ0FBQyxNQUFNLEVBQUUsT0FBTyxTQUFTLGlCQUFpQixFQUFFLFNBQVM7QUFBQSxFQUN2RCxLQUFLLFNBQVMsT0FBTyxDQUFDLE1BQU0sRUFBRSxTQUFTLFdBQVcsRUFBRSxHQUFHLEVBQUU7QUFFM0QsUUFBTSxjQUNKLGVBQWUsZ0JBQWdCLFFBQy9CLGVBQWUsa0JBQWtCO0FBQ25DLFFBQU0scUJBQXFCLGNBQWMsY0FBYyxLQUFLO0FBQzVELFFBQU0sZUFBZSxlQUFlO0FBRXBDLFFBQU0sWUFBWSxtQkFBMEI7QUFBQSxJQUMxQztBQUFBLElBQ0E7QUFBQSxJQUNBLGVBQWUsaUJBQWlCO0FBQUEsSUFDaEMsT0FBTztBQUFBLEVBQ1QsQ0FBQztBQUVELFFBQU1DLFNBQVEsb0JBQW9CLFFBQVE7QUFFMUMsU0FBTyxFQUFFLFVBQVUsV0FBVyxvQkFBb0IsT0FBQUEsT0FBTTtBQUMxRDs7O0FDbENBLGVBQXNCLFVBQ3BCLGdCQUNBLE1BQ0E7QUFDQTtBQUNBLFFBQU0sV0FBVyxNQUFNLGVBQWUsTUFBTSxRQUFRLFFBQVE7QUFBQSxJQUMxRCxlQUFlO0FBQUEsRUFDakI7QUFFQSxRQUFNLE1BQU0sS0FBSyxJQUFJO0FBQ3JCLE1BQUksMkJBQTJCLFNBQVM7QUFBQSxJQUN0QyxDQUFDLE1BQ0MsRUFBRSxTQUFTLGVBQ1gsRUFBRSxnQkFBZ0IsUUFDbEIsRUFBRSxrQkFBa0I7QUFBQSxFQUN4QjtBQUVBLE1BQUkseUJBQXlCLFdBQVcsR0FBRztBQUN6QyxVQUFNLHFCQUFxQjtBQUMzQixVQUFNLFNBQVMsU0FDWjtBQUFBLE1BQ0MsQ0FBQyxNQUNDLEVBQUUsU0FBUyxlQUNYLEVBQUUsa0JBQWtCLFFBQ3BCLEVBQUUsZ0JBQWdCLFFBQ2xCLE1BQU0sRUFBRSxjQUFjO0FBQUEsSUFDMUIsRUFDQyxLQUFLLENBQUMsR0FBRyxNQUFNLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFDeEMsR0FBRyxDQUFDO0FBQ1AsUUFBSSxRQUFRO0FBQ1YsaUNBQTJCLENBQUMsTUFBTTtBQUFBLElBQ3BDO0FBQUEsRUFDRjtBQUVBLFFBQU0sUUFBUTtBQUFBLElBQ1oseUJBQXlCO0FBQUEsTUFBSSxDQUFDLE1BQzVCLGVBQWUsTUFBTSxRQUFRLFFBQVEsSUFBSSxFQUFFLElBQUk7QUFBQSxRQUM3QyxHQUFHO0FBQUEsUUFDSCxlQUFlO0FBQUEsUUFDZixxQkFBcUIsTUFBTSxZQUFZO0FBQUEsTUFDekMsQ0FBQztBQUFBLElBQ0g7QUFBQSxFQUNGO0FBRUEsUUFBTSxhQUFhLElBQUksSUFBSSx5QkFBeUIsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7QUFDcEUsTUFBSSxXQUFXLFNBQVMsR0FBRztBQUN6QjtBQUFBLEVBQ0Y7QUFFQSxRQUFNLFdBQVcsTUFBTSxlQUFlLE1BQU0sUUFBUSxLQUFLO0FBQUEsSUFDdkQsZUFBZTtBQUFBLEVBQ2pCO0FBRUEsYUFBVyxLQUFLLFVBQVU7QUFDeEIsUUFBSSxDQUFDLFdBQVcsSUFBSSxFQUFFLFNBQVMsR0FBRztBQUNoQztBQUFBLElBQ0Y7QUFDQSxRQUNFLEVBQUUsUUFDRixXQUFXLEVBQUUsUUFDWixFQUFFLEtBQTJCLFVBQVUsd0JBQ3hDLGNBQWMsRUFBRSxNQUNoQjtBQUNBLFlBQU0sV0FBWSxFQUFFLEtBQXVDO0FBQzNELFVBQUksVUFBVSxJQUFJO0FBQ2hCLGNBQU0sZUFBZSxNQUFNLFFBQVEsS0FBSyxJQUFJLEVBQUUsSUFBSTtBQUFBLFVBQ2hELEdBQUc7QUFBQSxVQUNILE1BQU07QUFBQSxZQUNKLEdBQUcsRUFBRTtBQUFBLFlBQ0wsT0FBTztBQUFBLFlBQ1AsVUFBVTtBQUFBLGNBQ1IsR0FBRztBQUFBLGNBQ0gsVUFBVTtBQUFBLGNBQ1YsUUFBUTtBQUFBLFlBQ1Y7QUFBQSxVQUNGO0FBQUEsUUFDRixDQUFDO0FBQUEsTUFDSDtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQ0Y7OztBQ3pGQSx3QkFBb0I7QUFDcEIsSUFBQUMsVUFBd0I7QUFDeEIsSUFBQUMsZUFBcUI7QUFJckI7OztBQ0RBLElBQUFDLGFBS087OztBQ1RQOzs7QUN3Qk8sU0FBUyxzQkFDZCxTQUN5QjtBQUN6QixRQUFNLFVBQVUsUUFBUSxLQUFLO0FBRTdCLE1BQUksQ0FBQyxRQUFRLFdBQVcsS0FBSyxHQUFHO0FBQzlCLFdBQU87QUFBQSxFQUNUO0FBRUEsUUFBTSxpQkFBaUIsUUFBUSxRQUFRLE9BQU8sQ0FBQztBQUMvQyxNQUFJLG1CQUFtQixJQUFJO0FBQ3pCLFdBQU87QUFBQSxFQUNUO0FBRUEsUUFBTSxtQkFBbUIsUUFBUSxNQUFNLEdBQUcsY0FBYyxFQUFFLEtBQUs7QUFDL0QsUUFBTSxTQUFTLGdCQUFnQixnQkFBZ0I7QUFFL0MsTUFBSSxFQUFFLE9BQU8sUUFBUSxPQUFPLGNBQWM7QUFDeEMsV0FBTztBQUFBLEVBQ1Q7QUFFQSxTQUFPO0FBQUEsSUFDTCxNQUFNLE9BQU8sT0FBTyxJQUFJO0FBQUEsSUFDeEIsYUFBYSxPQUFPLE9BQU8sV0FBVztBQUFBLEVBQ3hDO0FBQ0Y7QUFNQSxTQUFTLGdCQUFnQixNQUFzQztBQUM3RCxRQUFNLFNBQWlDLENBQUM7QUFFeEMsYUFBVyxRQUFRLEtBQUssTUFBTSxJQUFJLEdBQUc7QUFDbkMsVUFBTSxjQUFjLEtBQUssS0FBSztBQUM5QixRQUFJLENBQUMsZUFBZSxZQUFZLFdBQVcsR0FBRyxHQUFHO0FBQy9DO0FBQUEsSUFDRjtBQUVBLFVBQU0sYUFBYSxZQUFZLFFBQVEsR0FBRztBQUMxQyxRQUFJLGVBQWUsSUFBSTtBQUNyQjtBQUFBLElBQ0Y7QUFFQSxVQUFNLE1BQU0sWUFBWSxNQUFNLEdBQUcsVUFBVSxFQUFFLEtBQUs7QUFDbEQsUUFBSSxRQUFRLFlBQVksTUFBTSxhQUFhLENBQUMsRUFBRSxLQUFLO0FBR25ELFFBQ0csTUFBTSxXQUFXLEdBQUcsS0FBSyxNQUFNLFNBQVMsR0FBRyxLQUMzQyxNQUFNLFdBQVcsR0FBRyxLQUFLLE1BQU0sU0FBUyxHQUFHLEdBQzVDO0FBQ0EsY0FBUSxNQUFNLE1BQU0sR0FBRyxFQUFFO0FBQUEsSUFDM0I7QUFFQSxRQUFJLEtBQUs7QUFDUCxhQUFPLEdBQUcsSUFBSTtBQUFBLElBQ2hCO0FBQUEsRUFDRjtBQUVBLFNBQU87QUFDVDtBQUVPLFNBQVMsZ0JBQ2QsUUFDYztBQUNkLE1BQUksQ0FBQyxVQUFVLE9BQU8sV0FBVyxHQUFHO0FBQ2xDLFdBQU8sQ0FBQztBQUFBLEVBQ1Y7QUFFQSxTQUFPLE9BQU8sSUFBSSxDQUFDLFVBQVU7QUFDM0IsUUFBSSxPQUFPLFVBQVUsWUFBWSxVQUFVLE1BQU07QUFDL0MsWUFBTSxJQUFJO0FBQUEsUUFDUjtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQ0EsUUFBSSxVQUFVLFNBQVMsTUFBTSxNQUFNO0FBQ2pDLGFBQU87QUFBQSxJQUNUO0FBQ0EsVUFBTSxJQUFJLE1BQU0sd0NBQXdDO0FBQUEsRUFDMUQsQ0FBQztBQUNIOzs7QUQvRkEsZUFBc0Isd0JBQXdCLE1BS2xCO0FBQzFCLFFBQU0sRUFBRSxPQUFBQyxRQUFPLFNBQVMsWUFBWSxVQUFVLElBQUk7QUFDbEQsUUFBTSxVQUFVLGFBQWE7QUFBQSxJQUMzQixRQUFRLEVBQUUsR0FBR0EsT0FBTSxRQUFRLFNBQVMsTUFBTUEsT0FBTSxLQUFLO0FBQUEsSUFDckQsV0FBVztBQUFBLEVBQ2IsQ0FBQztBQUNELFFBQU1DLE9BQU0sWUFBWSxRQUFRLFlBQVksRUFBRSxVQUFVLENBQUMsSUFBSTtBQUM3RCxRQUFNLE9BQU9BLEtBQUksS0FBSyx5QkFBeUI7QUFFL0MsUUFBTSxZQUE0QixDQUFDO0FBQ25DLFFBQU0sWUFBWSxvQkFBSSxJQUFZO0FBRWxDLGFBQVcsYUFBYSxZQUFZO0FBQ2xDLFVBQU0sVUFBVUEsS0FBSSxLQUFLLGtCQUFrQixFQUFFLEtBQUssVUFBVSxDQUFDO0FBQzdELFVBQU0sZUFBZSxNQUFNLDBCQUEwQjtBQUFBLE1BQ25EO0FBQUEsTUFDQTtBQUFBLE1BQ0EsS0FBQUE7QUFBQSxJQUNGLENBQUM7QUFDRCxZQUFRLEVBQUUsT0FBTyxhQUFhLE9BQU8sQ0FBQztBQUV0QyxlQUFXLFdBQVcsY0FBYztBQUNsQyxVQUFJLENBQUMsVUFBVSxJQUFJLFFBQVEsSUFBSSxHQUFHO0FBQ2hDLGtCQUFVLElBQUksUUFBUSxJQUFJO0FBQzFCLGtCQUFVLEtBQUssT0FBTztBQUFBLE1BQ3hCO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFFQSxPQUFLLEVBQUUsYUFBYSxVQUFVLE9BQU8sQ0FBQztBQUV0QyxTQUFPO0FBQ1Q7QUFFQSxlQUFlLDBCQUEwQixNQUliO0FBQzFCLFFBQU0sRUFBRSxTQUFTLFdBQVcsS0FBQUEsS0FBSSxJQUFJO0FBQ3BDLFFBQU0sYUFBYSxNQUFNLGVBQWUsRUFBRSxTQUFTLFdBQVcsS0FBQUEsS0FBSSxDQUFDO0FBRW5FLE1BQUksV0FBVyxXQUFXLEdBQUc7QUFDM0IsV0FBTyxDQUFDO0FBQUEsRUFDVjtBQUVBLFFBQU0sWUFBNEIsQ0FBQztBQUVuQyxhQUFXLGVBQWUsWUFBWTtBQUNwQyxVQUFNLFVBQVUsTUFBTSxlQUFlLEVBQUUsU0FBUyxhQUFhLEtBQUFBLEtBQUksQ0FBQztBQUNsRSxRQUFJLFNBQVM7QUFDWCxnQkFBVSxLQUFLLE9BQU87QUFBQSxJQUN4QjtBQUFBLEVBQ0Y7QUFFQSxTQUFPO0FBQ1Q7QUFFQSxlQUFlLGVBQWUsTUFJUjtBQUNwQixRQUFNLEVBQUUsU0FBUyxXQUFXLEtBQUFBLEtBQUksSUFBSTtBQUVwQyxRQUFNLGFBQWEsTUFBTSxRQUFRLEtBQUs7QUFBQSxJQUNwQyxTQUFTO0FBQUEsSUFDVCxNQUFNLENBQUMsV0FBVyxTQUFTLFlBQVksU0FBUyxHQUFHO0FBQUEsRUFDckQsQ0FBQztBQUVELE1BQUksc0JBQXNCLE9BQU87QUFDL0IsSUFBQUEsS0FBSSxLQUFLLG1DQUFtQztBQUFBLE1BQzFDLEtBQUs7QUFBQSxNQUNMLE9BQU8sV0FBVztBQUFBLElBQ3BCLENBQUM7QUFDRCxXQUFPLENBQUM7QUFBQSxFQUNWO0FBRUEsUUFBTSxFQUFFLFFBQVEsU0FBUyxJQUFJLE1BQU0sV0FBVztBQUU5QyxNQUFJLGFBQWEsR0FBRztBQUNsQixJQUFBQSxLQUFJLEtBQUssOENBQThDLEVBQUUsS0FBSyxVQUFVLENBQUM7QUFDekUsV0FBTyxDQUFDO0FBQUEsRUFDVjtBQUVBLFNBQU8sT0FDSixLQUFLLEVBQ0wsTUFBTSxJQUFJLEVBQ1YsT0FBTyxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUM7QUFDL0I7QUFFQSxlQUFlLGVBQWUsTUFJRztBQUMvQixRQUFNLEVBQUUsU0FBUyxhQUFhLEtBQUFBLEtBQUksSUFBSTtBQUN0QyxRQUFNLGFBQWEsTUFBTSxRQUFRLEtBQUs7QUFBQSxJQUNwQyxTQUFTO0FBQUEsSUFDVCxNQUFNLENBQUMsV0FBVztBQUFBLEVBQ3BCLENBQUM7QUFFRCxNQUFJLHNCQUFzQixPQUFPO0FBQy9CLElBQUFBLEtBQUksS0FBSyw2QkFBNkI7QUFBQSxNQUNwQyxNQUFNO0FBQUEsTUFDTixPQUFPLFdBQVc7QUFBQSxJQUNwQixDQUFDO0FBQ0QsV0FBTztBQUFBLEVBQ1Q7QUFFQSxRQUFNLEVBQUUsUUFBUSxTQUFTLElBQUksTUFBTSxXQUFXO0FBRTlDLE1BQUksYUFBYSxHQUFHO0FBQ2xCLElBQUFBLEtBQUksS0FBSyw2QkFBNkIsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUMzRCxXQUFPO0FBQUEsRUFDVDtBQUVBLFFBQU0sU0FBUyxzQkFBc0IsTUFBTTtBQUUzQyxNQUFJLENBQUMsUUFBUTtBQUNYLElBQUFBLEtBQUksS0FBSyxrQ0FBa0MsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNoRSxXQUFPO0FBQUEsRUFDVDtBQUVBLFNBQU87QUFBQSxJQUNMLE1BQU0sT0FBTztBQUFBLElBQ2IsYUFBYSxPQUFPO0FBQUEsSUFDcEI7QUFBQSxFQUNGO0FBQ0Y7OztBRWpKQTs7O0FDQ0EsZUFBZSxhQUFhLE1BR3FCO0FBQy9DLFFBQU0sRUFBRSxTQUFTLFVBQUFDLFdBQVUsS0FBSyxJQUFJLE1BQU0sT0FBTyxhQUFrQjtBQUNuRSxRQUFNLEVBQUUsU0FBQUMsVUFBUyxPQUFPLFVBQVUsSUFBSSxNQUFNLE9BQU8sTUFBVztBQUU5RCxRQUFNLFdBQVcsTUFBTSxLQUFLLEtBQUssWUFBWTtBQUM3QyxNQUFJLFNBQVMsT0FBTyxHQUFHO0FBQ3JCLFVBQU0sVUFBVSxNQUFNRCxVQUFTLEtBQUssWUFBWTtBQUNoRCxXQUFPLENBQUMsRUFBRSxNQUFNLEtBQUssa0JBQWtCLFlBQVksUUFBUSxDQUFDO0FBQUEsRUFDOUQ7QUFFQSxNQUFJLENBQUMsU0FBUyxZQUFZLEdBQUc7QUFDM0IsV0FBTyxDQUFDO0FBQUEsRUFDVjtBQUVBLFFBQU0sVUFBVSxNQUFNLFFBQVEsS0FBSyxjQUFjLEVBQUUsZUFBZSxLQUFLLENBQUM7QUFDeEUsUUFBTSxRQUE2QyxDQUFDO0FBRXBELGFBQVcsU0FBUyxTQUFTO0FBQzNCLFVBQU0sVUFBVUMsU0FBUSxLQUFLLGNBQWMsTUFBTSxJQUFJO0FBQ3JELFVBQU0sVUFBVSxLQUFLLGlCQUNqQixVQUFVLEtBQUssS0FBSyxnQkFBZ0IsTUFBTSxJQUFJLElBQzlDLE1BQU07QUFFVixRQUFJLE1BQU0sWUFBWSxHQUFHO0FBQ3ZCLFlBQU07QUFBQSxRQUNKLEdBQUksTUFBTSxhQUFhO0FBQUEsVUFDckIsY0FBYztBQUFBLFVBQ2QsZ0JBQWdCO0FBQUEsUUFDbEIsQ0FBQztBQUFBLE1BQ0g7QUFDQTtBQUFBLElBQ0Y7QUFFQSxRQUFJLE1BQU0sT0FBTyxHQUFHO0FBQ2xCLFlBQU0sS0FBSztBQUFBLFFBQ1QsTUFBTTtBQUFBLFFBQ04sU0FBUyxNQUFNRCxVQUFTLE9BQU87QUFBQSxNQUNqQyxDQUFDO0FBQUEsSUFDSDtBQUFBLEVBQ0Y7QUFFQSxTQUFPO0FBQ1Q7QUFFQSxlQUFlLGNBQWMsV0FBb0M7QUFDL0QsUUFBTSxFQUFFLFdBQVcsSUFBSSxNQUFNLE9BQU8sUUFBYTtBQUNqRCxRQUFNLE9BQU8sV0FBVyxNQUFNLEVBQUUsT0FBTyxTQUFTLEVBQUUsT0FBTyxLQUFLLEVBQUUsTUFBTSxHQUFHLEVBQUU7QUFDM0UsU0FBTyxRQUFRLElBQUk7QUFDckI7QUFFQSxlQUFzQixpQkFBaUIsTUFHbkI7QUFDbEIsUUFBTSxFQUFFLFNBQUFDLFVBQVMsT0FBTyxVQUFVLElBQUksTUFBTSxPQUFPLE1BQVc7QUFFOUQsUUFBTSxXQUFXQSxTQUFRLFFBQVEsSUFBSSxHQUFHLEtBQUssTUFBTSxJQUFJO0FBQ3ZELFFBQU0sUUFBUSxNQUFNLGFBQWEsRUFBRSxjQUFjLFNBQVMsQ0FBQztBQUMzRCxRQUFNLFVBQVUsTUFBTSxjQUFjLFFBQVE7QUFDNUMsUUFBTSxXQUFXLFVBQVUsS0FBSyxVQUFVLFVBQVUsaUJBQWlCLE9BQU87QUFFNUUsTUFBSSxNQUFNLFdBQVcsR0FBRztBQUN0QixXQUFPO0FBQUEsRUFDVDtBQUVBLFFBQU0sS0FBSyxRQUFRLFdBQVc7QUFBQSxJQUM1QjtBQUFBLElBQ0E7QUFBQSxFQUNGLENBQUM7QUFFRCxTQUFPO0FBQ1Q7OztBQzFFQSxTQUFTLFFBQVEsT0FBdUI7QUFDdEMsU0FBTyxNQUNKLFlBQVksRUFDWixRQUFRLGVBQWUsR0FBRyxFQUMxQixRQUFRLFlBQVksRUFBRTtBQUMzQjtBQUVBLGVBQWUsb0JBQW9CLE1BQStCO0FBQ2hFLFFBQU0sRUFBRSxXQUFXLElBQUksTUFBTSxPQUFPLFFBQWE7QUFDakQsUUFBTSxPQUFPLFFBQVEsSUFBSSxLQUFLO0FBQzlCLFFBQU0sT0FBTyxXQUFXLE1BQU0sRUFBRSxPQUFPLElBQUksRUFBRSxPQUFPLEtBQUssRUFBRSxNQUFNLEdBQUcsQ0FBQztBQUNyRSxTQUFPLEdBQUcsSUFBSSxJQUFJLElBQUk7QUFDeEI7QUFFQSxTQUFTLG1CQUFtQixPQUFpQztBQUMzRCxTQUFPO0FBQUEsUUFDRCxNQUFNLElBQUk7QUFBQSxlQUNILE1BQU0sV0FBVztBQUFBO0FBQUE7QUFBQSxFQUc5QixNQUFNLGFBQWEsS0FBSyxDQUFDO0FBQUE7QUFFM0I7QUFFQSxlQUFzQixtQkFBbUIsTUFHckI7QUFDbEIsUUFBTSxFQUFFLE9BQU8sVUFBVSxJQUFJLE1BQU0sT0FBTyxNQUFXO0FBRXJELFFBQU0sVUFBVSxNQUFNLG9CQUFvQixLQUFLLE1BQU0sSUFBSTtBQUN6RCxRQUFNLFdBQVcsVUFBVSxLQUFLLFVBQVUsVUFBVSxpQkFBaUIsT0FBTztBQUU1RSxRQUFNLEtBQUssUUFBUSxXQUFXO0FBQUEsSUFDNUI7QUFBQSxJQUNBLE9BQU87QUFBQSxNQUNMO0FBQUEsUUFDRSxNQUFNO0FBQUEsUUFDTixTQUFTLG1CQUFtQixLQUFLLEtBQUs7QUFBQSxNQUN4QztBQUFBLElBQ0Y7QUFBQSxFQUNGLENBQUM7QUFFRCxTQUFPO0FBQ1Q7OztBQzVDQSxTQUFTLFdBQVcsT0FBdUI7QUFDekMsU0FBTyxJQUFJLE1BQU0sUUFBUSxNQUFNLE9BQU8sQ0FBQztBQUN6QztBQUVBLGVBQWUsa0JBQWtCLE9BQXVDO0FBQ3RFLFFBQU0sRUFBRSxXQUFXLElBQUksTUFBTSxPQUFPLFFBQWE7QUFDakQsUUFBTSxZQUFZLEdBQUcsTUFBTSxJQUFJLEtBQUssTUFBTSxPQUFPLE1BQU07QUFDdkQsUUFBTSxPQUFPLFdBQVcsTUFBTSxFQUFFLE9BQU8sU0FBUyxFQUFFLE9BQU8sS0FBSyxFQUFFLE1BQU0sR0FBRyxFQUFFO0FBQzNFLFNBQU8sT0FBTyxJQUFJO0FBQ3BCO0FBRUEsZUFBc0IsbUJBQW1CLE1BR3JCO0FBQ2xCLFFBQU0sRUFBRSxPQUFPLFVBQVUsSUFBSSxNQUFNLE9BQU8sTUFBVztBQUVyRCxRQUFNLFVBQVUsTUFBTSxrQkFBa0IsS0FBSyxLQUFLO0FBQ2xELFFBQU0sV0FBVyxVQUFVLEtBQUssVUFBVSxVQUFVLGlCQUFpQixPQUFPO0FBQzVFLFFBQU0sWUFBWSxXQUFXLFFBQVE7QUFDckMsUUFBTSxhQUFhLFdBQVcsS0FBSyxNQUFNLElBQUk7QUFDN0MsUUFBTSxZQUFZLFdBQVcsS0FBSyxNQUFNLE9BQU8sTUFBTTtBQUVyRCxRQUFNLGNBQWM7QUFBQSxJQUNsQjtBQUFBLElBQ0EsYUFBYSxTQUFTO0FBQUEsSUFDdEIsWUFBWSxTQUFTO0FBQUEsSUFDckIsY0FBYyxTQUFTO0FBQUEsSUFDdkIseUJBQXlCLFVBQVUsSUFBSSxTQUFTO0FBQUEsSUFDaEQ7QUFBQSxJQUNBLFFBQVEsU0FBUztBQUFBLElBQ2pCLFlBQVksU0FBUywyQkFBMkIsU0FBUztBQUFBLElBQ3pELFlBQVksU0FBUztBQUFBLElBQ3JCO0FBQUEsRUFDRixFQUFFLEtBQUssSUFBSTtBQUVYLFFBQU0sYUFBYSxNQUFNLEtBQUssUUFBUSxLQUFLO0FBQUEsSUFDekMsU0FBUztBQUFBLElBQ1QsTUFBTSxDQUFDLE9BQU8sV0FBVztBQUFBLEVBQzNCLENBQUM7QUFDRCxRQUFNLEVBQUUsVUFBVSxPQUFPLElBQUksTUFBTSxXQUFXO0FBQzlDLE1BQUksYUFBYSxHQUFHO0FBQ2xCLFVBQU0sSUFBSTtBQUFBLE1BQ1Isd0NBQXdDLEtBQUssTUFBTSxJQUFJLEtBQUssVUFBVSxlQUFlO0FBQUEsSUFDdkY7QUFBQSxFQUNGO0FBRUEsTUFBSSxjQUFjO0FBQ2xCLE1BQUksS0FBSyxNQUFNLE1BQU07QUFDbkIsa0JBQWMsVUFBVSxLQUFLLGFBQWEsS0FBSyxNQUFNLElBQUk7QUFBQSxFQUMzRDtBQUNBLE1BQUksS0FBSyxNQUFNLE1BQU07QUFDbkIsa0JBQWMsVUFBVSxLQUFLLGFBQWEsS0FBSyxNQUFNLElBQUk7QUFBQSxFQUMzRDtBQUNBLFNBQU87QUFDVDs7O0FIakRBLGVBQXNCLGdDQUFnQyxNQUtoQztBQUNwQixRQUFNLFVBQVUsYUFBYTtBQUFBLElBQzNCLFFBQVEsRUFBRSxHQUFHLEtBQUssTUFBTSxRQUFRLFNBQVMsTUFBTSxLQUFLLE1BQU0sS0FBSztBQUFBLElBQy9ELFdBQVc7QUFBQSxFQUNiLENBQUM7QUFDRCxRQUFNQyxPQUFNLEtBQUssWUFDYixRQUFRLFlBQVksRUFBRSxXQUFXLEtBQUssVUFBVSxDQUFDLElBQ2pEO0FBQ0osUUFBTSxVQUFVLGdCQUFnQixLQUFLLE1BQU07QUFDM0MsUUFBTSxXQUFxQixDQUFDO0FBRTVCLGFBQVcsU0FBUyxTQUFTO0FBQzNCLFFBQUksTUFBTSxTQUFTLFdBQVc7QUFDNUIsZUFBUyxLQUFLLE1BQU0sSUFBSTtBQUN4QjtBQUFBLElBQ0Y7QUFDQSxRQUFJLE1BQU0sU0FBUyxRQUFRO0FBQ3pCLGVBQVM7QUFBQSxRQUNQLE1BQU0saUJBQWlCO0FBQUEsVUFDckIsU0FBUyxLQUFLO0FBQUEsVUFDZCxPQUFPO0FBQUEsUUFDVCxDQUFDO0FBQUEsTUFDSDtBQUNBO0FBQUEsSUFDRjtBQUNBLFFBQUksTUFBTSxTQUFTLE9BQU87QUFDeEIsZUFBUztBQUFBLFFBQ1AsTUFBTSxtQkFBbUI7QUFBQSxVQUN2QixTQUFTLEtBQUs7QUFBQSxVQUNkLE9BQU87QUFBQSxRQUNULENBQUM7QUFBQSxNQUNIO0FBQ0E7QUFBQSxJQUNGO0FBQ0EsUUFBSSxNQUFNLFNBQVMsVUFBVTtBQUMzQixlQUFTO0FBQUEsUUFDUCxNQUFNLG1CQUFtQjtBQUFBLFVBQ3ZCLFNBQVMsS0FBSztBQUFBLFVBQ2QsT0FBTztBQUFBLFFBQ1QsQ0FBQztBQUFBLE1BQ0g7QUFDQTtBQUFBLElBQ0Y7QUFDQSxJQUFBQSxLQUFJLEtBQUssMENBQTBDLEVBQUUsTUFBTSxDQUFDO0FBQUEsRUFDOUQ7QUFFQSxTQUFPO0FBQ1Q7OztBSTdEQSxJQUFBQyxhQUtPO0FBQ1AsSUFBQUMsZUFBcUI7QUFDckIsSUFBQUMsY0FBa0I7QUFHbEI7QUFHQTs7O0FDYkEsZ0JBQW1DO0FBQ25DLGlCQUFrQjtBQWFsQixJQUFNLHVCQUF1QjtBQUM3QixJQUFNLHFCQUFxQjtBQUMzQixJQUFNLHVCQUF1QixJQUFJLEtBQUs7QUFRdEMsSUFBTSxnQkFBZ0I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsMEJBZUksb0JBQW9CLGtCQUFrQixrQkFBa0I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWdFM0UsU0FBUyxrQkFDZCxRQUNnQztBQUNoQyxNQUFJLENBQUMsVUFBVSxPQUFPLFdBQVcsVUFBVTtBQUN6QyxXQUFPO0FBQUEsRUFDVDtBQUVBLE1BQ0UsVUFBVSxVQUNWLE9BQVEsT0FBNkIsU0FBUyxVQUM5QztBQUNBLFFBQUk7QUFDRixhQUFPLGFBQUUsYUFBYSxNQUFtQjtBQUFBLElBQzNDLFFBQVE7QUFDTixhQUFPO0FBQUEsSUFDVDtBQUFBLEVBQ0Y7QUFFQSxRQUFNLElBQUk7QUFDVixNQUFJLHVCQUFPLElBQUksa0JBQWtCLEtBQUssS0FBSyxnQkFBZ0IsR0FBRztBQUM1RCxXQUFPLEVBQUU7QUFBQSxFQUNYO0FBRUEsTUFBSSxVQUFVLEtBQUssZ0JBQWdCLEdBQUc7QUFDcEMsV0FBTztBQUFBLEVBQ1Q7QUFFQSxTQUFPO0FBQ1Q7QUFFTyxTQUFTLGVBQ2QsUUFDQSxTQUFTLEdBQ0Q7QUFDUixNQUFJLENBQUMsUUFBUTtBQUNYLFdBQU87QUFBQSxFQUNUO0FBRUEsTUFBSSxPQUFPLFFBQVEsTUFBTSxRQUFRLE9BQU8sSUFBSSxHQUFHO0FBQzdDLFdBQU8sT0FBTyxLQUFLLElBQUksQ0FBQyxNQUFNLEtBQUssVUFBVSxDQUFDLENBQUMsRUFBRSxLQUFLLEtBQUs7QUFBQSxFQUM3RDtBQUVBLE1BQUksT0FBTyxTQUFTLE1BQU0sUUFBUSxPQUFPLEtBQUssR0FBRztBQUMvQyxXQUFPLE9BQU8sTUFDWCxJQUFJLENBQUMsTUFBK0IsZUFBZSxHQUFHLE1BQU0sQ0FBQyxFQUM3RCxLQUFLLEtBQUs7QUFBQSxFQUNmO0FBQ0EsTUFBSSxPQUFPLFNBQVMsTUFBTSxRQUFRLE9BQU8sS0FBSyxHQUFHO0FBQy9DLFdBQU8sT0FBTyxNQUNYLElBQUksQ0FBQyxNQUErQixlQUFlLEdBQUcsTUFBTSxDQUFDLEVBQzdELEtBQUssS0FBSztBQUFBLEVBQ2Y7QUFFQSxRQUFNLE9BQU8sT0FBTztBQUVwQixVQUFRLE1BQU07QUFBQSxJQUNaLEtBQUs7QUFDSCxhQUFPO0FBQUEsSUFDVCxLQUFLO0FBQUEsSUFDTCxLQUFLO0FBQ0gsYUFBTztBQUFBLElBQ1QsS0FBSztBQUNILGFBQU87QUFBQSxJQUNULEtBQUs7QUFDSCxhQUFPO0FBQUEsSUFDVCxLQUFLLFNBQVM7QUFDWixZQUFNLFFBQVEsT0FBTyxRQUNqQixlQUFlLE9BQU8sT0FBa0MsTUFBTSxJQUM5RDtBQUNKLGFBQU8sU0FBUyxLQUFLO0FBQUEsSUFDdkI7QUFBQSxJQUNBLEtBQUssVUFBVTtBQUNiLFlBQU0sYUFBYSxPQUFPO0FBRzFCLFVBQUksQ0FBQyxZQUFZO0FBQ2YsZUFBTztBQUFBLE1BQ1Q7QUFDQSxZQUFNLFdBQVcsSUFBSSxJQUFLLE9BQU8sWUFBeUIsQ0FBQyxDQUFDO0FBQzVELFlBQU0sTUFBTSxLQUFLLE9BQU8sU0FBUyxDQUFDO0FBQ2xDLFlBQU0sV0FBVyxLQUFLLE9BQU8sTUFBTTtBQUNuQyxZQUFNLFFBQVEsT0FBTyxRQUFRLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQyxLQUFLLEtBQUssTUFBTTtBQUM3RCxjQUFNLE1BQU0sU0FBUyxJQUFJLEdBQUcsSUFBSSxLQUFLO0FBQ3JDLGVBQU8sR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsS0FBSyxlQUFlLE9BQU8sU0FBUyxDQUFDLENBQUM7QUFBQSxNQUNqRSxDQUFDO0FBQ0QsYUFBTztBQUFBLEVBQU0sTUFBTSxLQUFLLEtBQUssQ0FBQztBQUFBLEVBQU0sUUFBUTtBQUFBLElBQzlDO0FBQUEsSUFDQTtBQUNFLGFBQU87QUFBQSxFQUNYO0FBQ0Y7QUFFTyxTQUFTLDBCQUEwQixPQUF3QjtBQUNoRSxRQUFNLE9BQWlCLENBQUM7QUFFeEIsYUFBVyxDQUFDLE1BQU0sQ0FBQyxLQUFLLE9BQU8sUUFBUSxLQUFLLEdBQUc7QUFDN0MsVUFBTSxNQUFNO0FBQ1osVUFBTSxjQUFjLGtCQUFrQixJQUFJLGVBQWUsSUFBSSxVQUFVO0FBQ3ZFLFVBQU0sZUFBZSxrQkFBa0IsSUFBSSxZQUFZO0FBRXZELFVBQU0sWUFBWSxjQUFjLGVBQWUsYUFBYSxDQUFDLElBQUk7QUFDakUsVUFBTSxhQUFhLGVBQ2YsZUFBZSxjQUFjLENBQUMsSUFDOUI7QUFFSixTQUFLLEtBQUssT0FBTyxJQUFJLFdBQVcsU0FBUyxjQUFjLFVBQVUsR0FBRztBQUFBLEVBQ3RFO0FBRUEsU0FBTztBQUFBO0FBQUEsRUFBaUMsS0FBSyxLQUFLLEtBQUssQ0FBQztBQUFBO0FBQUE7QUFDMUQ7QUFFQSxlQUFlLGlCQUFpQjtBQUFBLEVBQzlCO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQ0YsR0FRcUM7QUFDbkMsUUFBTSxjQUFjLE1BQU0sUUFBUSxLQUFLO0FBQUEsSUFDckMsU0FBUztBQUFBLElBQ1QsTUFBTSxDQUFDLE1BQU0sTUFBTTtBQUFBLEVBQ3JCLENBQUM7QUFDRCxNQUFJLHVCQUF1QixPQUFPO0FBQ2hDLFdBQU8sRUFBRSxTQUFTLE9BQU8sT0FBTyxZQUFZLFFBQVE7QUFBQSxFQUN0RDtBQUNBLFFBQU0sWUFBWTtBQUVsQixRQUFNLFFBQVEsV0FBVztBQUFBLElBQ3ZCLE9BQU87QUFBQSxNQUNMLEVBQUUsTUFBTSxjQUFjLFNBQVMsY0FBYztBQUFBLE1BQzdDLEVBQUUsTUFBTSxXQUFXLFNBQVMsS0FBSztBQUFBLE1BQ2pDO0FBQUEsUUFDRSxNQUFNO0FBQUEsUUFDTixTQUFTLEtBQUssVUFBVSxPQUFPLEtBQUssY0FBYyxDQUFDO0FBQUEsTUFDckQ7QUFBQSxJQUNGO0FBQUEsSUFDQSxVQUFVO0FBQUEsRUFDWixDQUFDO0FBRUQsUUFBTSxZQUFZLE9BQU8sU0FBUyxRQUFRLFNBQVMsS0FBSyxNQUFNLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRTtBQUN6RSxRQUFNLGlCQUNKLGFBQWEsS0FBSyxpQkFBaUI7QUFFckMsUUFBTSxhQUFhLE1BQU0sUUFBUSxLQUFLO0FBQUEsSUFDcEMsU0FBUztBQUFBLElBQ1QsTUFBTTtBQUFBLE1BQ0o7QUFBQSxNQUNBLG1CQUFtQixNQUFNO0FBQUEsTUFDekIsb0JBQW9CLE1BQU07QUFBQSxNQUMxQixHQUFHLE1BQU07QUFBQSxJQUNYO0FBQUEsSUFDQSxRQUFRLGdCQUFnQjtBQUFBLEVBQzFCLENBQUM7QUFFRCxNQUFJLHNCQUFzQixPQUFPO0FBQy9CLFdBQU8sRUFBRSxTQUFTLE9BQU8sT0FBTyxXQUFXLFFBQVE7QUFBQSxFQUNyRDtBQUVBLFFBQU0sUUFBaUMsRUFBRSxPQUFPLEtBQUs7QUFFckQsUUFBTSxRQUFRLENBQUMsVUFBaUI7QUFDOUIsUUFBSSxDQUFDLE1BQU0sT0FBTztBQUNoQixZQUFNLFFBQVE7QUFDZCxzQkFBZ0IsTUFBTTtBQUFBLElBQ3hCO0FBQUEsRUFDRjtBQUVBLFFBQU0sb0JBQW9CLE9BQU8sZ0JBQXdCO0FBQ3ZELFFBQUk7QUFDSixRQUFJO0FBQ0YsZUFBUyxLQUFLLE1BQU0sV0FBVztBQUFBLElBQ2pDLFFBQVE7QUFDTjtBQUFBLElBQ0Y7QUFFQSxVQUFNLEVBQUUsSUFBSSxNQUFNLFVBQVUsTUFBTSxJQUFJO0FBRXRDLFFBQUk7QUFDSixRQUFJO0FBQ0YsWUFBTSxJQUFJLGVBQWUsUUFBUTtBQUNqQyxVQUFJLENBQUMsR0FBRyxTQUFTO0FBQ2YsY0FBTSxJQUFJO0FBQUEsVUFDUixRQUFRLFFBQVE7QUFBQSxRQUNsQjtBQUFBLE1BQ0Y7QUFDQSxZQUFNQyxRQUFPLEVBQUUsUUFBUSxLQUFLLENBQUM7QUFDN0IsWUFBTSxjQUFjO0FBQUEsUUFDbEIsWUFBWSxNQUFNLFFBQVEsSUFBSSxLQUFLLElBQUksQ0FBQztBQUFBLFFBQ3hDLFVBQVUsQ0FBQztBQUFBLFFBQ1gsc0JBQXNCO0FBQUEsTUFDeEI7QUFDQSxVQUFJLGVBQWU7QUFDakIsbUJBQVcsTUFBTTtBQUFBLFVBQWM7QUFBQSxVQUFVO0FBQUEsVUFBTyxNQUM5Q0EsTUFBSyxPQUFPLFdBQVc7QUFBQSxRQUN6QjtBQUFBLE1BQ0YsT0FBTztBQUNMLGNBQU0sU0FBUyxNQUFNQSxNQUFLLE9BQU8sV0FBVztBQUM1QyxtQkFBVyxFQUFFLE9BQU87QUFBQSxNQUN0QjtBQUFBLElBQ0YsU0FBUyxLQUFLO0FBQ1osWUFBTSxNQUFNLGVBQWUsUUFBUSxJQUFJLFVBQVUsT0FBTyxHQUFHO0FBQzNELGlCQUFXLEVBQUUsT0FBTyxJQUFJO0FBQUEsSUFDMUI7QUFFQSxRQUFJO0FBQ0YsWUFBTSxRQUFRLFdBQVc7QUFBQSxRQUN2QixPQUFPO0FBQUEsVUFDTDtBQUFBLFlBQ0UsTUFBTSxHQUFHLEVBQUU7QUFBQSxZQUNYLFNBQVMsS0FBSyxVQUFVLFFBQVE7QUFBQSxVQUNsQztBQUFBLFFBQ0Y7QUFBQSxRQUNBLFVBQVU7QUFBQSxNQUNaLENBQUM7QUFBQSxJQUNILFNBQVMsS0FBSztBQUtaLFlBQU0sTUFBTSxlQUFlLFFBQVEsSUFBSSxVQUFVLE9BQU8sR0FBRztBQUMzRCxZQUFNLElBQUksTUFBTSxvQ0FBb0MsUUFBUSxLQUFLLEdBQUcsRUFBRSxDQUFDO0FBQUEsSUFDekU7QUFBQSxFQUNGO0FBRUEsUUFBTSxtQkFBb0MsQ0FBQztBQUMzQyxNQUFJLGVBQWU7QUFDbkIsTUFBSSxrQkFBa0I7QUFFdEIsUUFBTSxVQUFVLFdBQVcsTUFBTTtBQUMvQjtBQUFBLE1BQ0UsSUFBSTtBQUFBLFFBQ0Ysd0NBQXdDLHVCQUF1QixHQUFJO0FBQUEsTUFDckU7QUFBQSxJQUNGO0FBQUEsRUFDRixHQUFHLG9CQUFvQjtBQUV2QixNQUFJO0FBQ0YscUJBQWlCLFNBQVMsV0FBVyxLQUFLLEdBQUc7QUFDM0MsVUFBSSxNQUFNLE9BQU87QUFDZjtBQUFBLE1BQ0Y7QUFFQSxVQUFJLE1BQU0sV0FBVyxVQUFVO0FBQzdCLHdCQUFnQixNQUFNO0FBRXRCLGVBQU8sTUFBTTtBQUNYLGdCQUFNLFdBQVcsYUFBYSxRQUFRLG9CQUFvQjtBQUMxRCxjQUFJLGFBQWEsSUFBSTtBQUNuQjtBQUFBLFVBQ0Y7QUFFQSxnQkFBTSxlQUFlLGFBQWEsTUFBTSxHQUFHLFFBQVE7QUFDbkQsY0FBSSxhQUFhLEtBQUssR0FBRztBQUN2QiwrQkFBbUI7QUFBQSxVQUNyQjtBQUVBLGdCQUFNLGVBQWUsV0FBVyxxQkFBcUI7QUFDckQsZ0JBQU0sU0FBUyxhQUFhLFFBQVEsb0JBQW9CLFlBQVk7QUFDcEUsY0FBSSxXQUFXLElBQUk7QUFDakI7QUFBQSxVQUNGO0FBRUEsZ0JBQU0sY0FBYyxhQUFhLE1BQU0sY0FBYyxNQUFNO0FBQzNELHlCQUFlLGFBQWEsTUFBTSxTQUFTLG1CQUFtQixNQUFNO0FBRXBFLDJCQUFpQixLQUFLLGtCQUFrQixXQUFXLENBQUM7QUFBQSxRQUN0RDtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQUEsRUFDRixVQUFFO0FBQ0EsaUJBQWEsT0FBTztBQUFBLEVBQ3RCO0FBRUEsTUFBSSxhQUFhLEtBQUssR0FBRztBQUN2Qix1QkFBbUI7QUFBQSxFQUNyQjtBQUVBLFFBQU0sUUFBUSxXQUFXLGdCQUFnQjtBQUV6QyxNQUFJLE1BQU0sT0FBTztBQUNmLGVBQVcsT0FBTyxNQUFNLE1BQU0sTUFBUztBQUN2QyxXQUFPO0FBQUEsTUFDTCxTQUFTO0FBQUEsTUFDVCxPQUFPLE1BQU0sTUFBTTtBQUFBLE1BQ25CLEdBQUksa0JBQWtCLEVBQUUsUUFBUSxnQkFBZ0IsTUFBTSxHQUFHLEdBQUksRUFBRSxJQUFJLENBQUM7QUFBQSxJQUN0RTtBQUFBLEVBQ0Y7QUFFQSxRQUFNLEVBQUUsUUFBUSxRQUFRLFNBQVMsSUFBSSxNQUFNLFdBQVc7QUFFdEQsTUFBSTtBQUNGLFdBQU8sS0FBSyxNQUFNLE1BQU07QUFBQSxFQUMxQixRQUFRO0FBQ04sV0FBTztBQUFBLE1BQ0wsU0FBUztBQUFBLE1BQ1QsT0FBTyx1QkFBdUIsUUFBUTtBQUFBLE1BQ3RDLFNBQVMsa0JBQWtCLFFBQVEsTUFBTSxHQUFHLEdBQUk7QUFBQSxNQUNoRCxRQUFRLE9BQU8sTUFBTSxHQUFHLEdBQUk7QUFBQSxJQUM5QjtBQUFBLEVBQ0Y7QUFDRjtBQUVPLFNBQVMscUJBQXFCLE1BTWxDO0FBQ0QsUUFBTSxFQUFFLFNBQVMsY0FBYyxJQUFJO0FBQ25DLFFBQU0sWUFBWSxLQUFLLGNBQWMsSUFBSSxJQUFJLEtBQUssV0FBVyxJQUFJO0FBQ2pFLFFBQU0saUJBQTBCLENBQUM7QUFDakMsYUFBVyxDQUFDLE1BQU0sQ0FBQyxLQUFLLE9BQU8sUUFBUSxLQUFLLEtBQUssR0FBRztBQUNsRCxRQUFJLENBQUMsYUFBYSxVQUFVLElBQUksSUFBSSxHQUFHO0FBQ3JDLHFCQUFlLElBQUksSUFBSTtBQUFBLElBQ3pCO0FBQUEsRUFDRjtBQUNBLFFBQU0sY0FBYywwQkFBMEIsY0FBYztBQUU1RCxhQUFPLGdCQUFLO0FBQUEsSUFDVixHQUFHLGFBQWE7QUFBQSxJQUNoQixhQUFhO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUtmLFdBQVc7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBV1QsU0FBUyxDQUFDLEVBQUUsS0FBSyxNQUFNO0FBQ3JCLFlBQU0sUUFBUSxPQUFPLEtBQUssSUFBSSxDQUFDLElBQUksS0FBSyxPQUFPLEVBQzVDLFNBQVMsRUFBRSxFQUNYLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDZCxZQUFNLFNBQVMsaUJBQWlCLEtBQUs7QUFDckMsWUFBTSxrQkFBa0IsSUFBSSxnQkFBZ0I7QUFFNUMsYUFBTyxpQkFBaUI7QUFBQSxRQUN0QjtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQSxhQUFhLEtBQUs7QUFBQSxNQUNwQixDQUFDO0FBQUEsSUFDSDtBQUFBLEVBQ0YsQ0FBQztBQUNIOzs7QUMvY0EsSUFBTSx1QkFBa0UsQ0FBQztBQUV6RSxlQUFzQixtQkFBbUI7QUFBQSxFQUN2QyxPQUFBQztBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFDRixHQU1xQjtBQUVuQixRQUFNLFVBQVVBLE9BQU0sUUFBUSxRQUFRLFFBQVE7QUFDOUMsTUFBSSxTQUFTLGlCQUFpQixNQUFNO0FBQ2xDLFFBQUksT0FBTyxRQUFRLGtCQUFrQixXQUFXO0FBQzlDLGFBQU8sUUFBUTtBQUFBLElBQ2pCO0FBQ0EsV0FBTyxNQUFNLFFBQVEsY0FBYyxPQUFPO0FBQUEsTUFDeEM7QUFBQSxNQUNBO0FBQUEsTUFDQSxzQkFBc0I7QUFBQSxJQUN4QixDQUFDO0FBQUEsRUFDSDtBQUdBLFFBQU0sYUFDSkEsT0FBTSxRQUFRLGdCQU1aLFFBQVE7QUFFWixNQUFJLGNBQWMsTUFBTTtBQUN0QixRQUFJLE9BQU8sZUFBZSxXQUFXO0FBQ25DLGFBQU87QUFBQSxJQUNUO0FBQ0EsV0FBTyxNQUFNLFdBQVcsT0FBTztBQUFBLE1BQzdCO0FBQUEsTUFDQTtBQUFBLE1BQ0Esc0JBQXNCO0FBQUEsSUFDeEIsQ0FBQztBQUFBLEVBQ0g7QUFHQSxTQUFPLHFCQUFxQixRQUEyQixLQUFLO0FBQzlEOzs7QUN4REEsSUFBQUMsYUFLTzs7O0FIY1AsSUFBTSxNQUFNLGFBQWEsRUFBRSxRQUFRLEVBQUUsTUFBTSxRQUFRLEdBQUcsV0FBVyxRQUFRLENBQUM7QUFFMUUsU0FBUyxlQUFlLE9BQXVCO0FBQzdDLE1BQUksUUFBUSxNQUFNO0FBQ2hCLFdBQU8sR0FBRyxLQUFLO0FBQUEsRUFDakI7QUFDQSxNQUFJLFFBQVEsT0FBTyxNQUFNO0FBQ3ZCLFdBQU8sSUFBSSxRQUFRLE1BQU0sUUFBUSxDQUFDLENBQUM7QUFBQSxFQUNyQztBQUNBLE1BQUksUUFBUSxPQUFPLE9BQU8sTUFBTTtBQUM5QixXQUFPLElBQUksU0FBUyxPQUFPLE9BQU8sUUFBUSxDQUFDLENBQUM7QUFBQSxFQUM5QztBQUNBLFNBQU8sSUFBSSxTQUFTLE9BQU8sT0FBTyxPQUFPLFFBQVEsQ0FBQyxDQUFDO0FBQ3JEO0FBZUEsU0FBUyxrQkFBa0IsS0FBcUI7QUFDOUMsUUFBTSxRQUFRLENBQUMsSUFBSSxPQUFPO0FBRTFCLFFBQU0sU0FBUztBQUNmLE1BQUksT0FBTyxPQUFPLFdBQVcsVUFBVTtBQUNyQyxVQUFNLEtBQUssT0FBTyxNQUFNO0FBQUEsRUFDMUI7QUFDQSxNQUFJLE9BQU8saUJBQWlCLE9BQU87QUFDakMsVUFBTSxLQUFLLE9BQU8sTUFBTSxPQUFPO0FBQy9CLFVBQU0sV0FBVyxPQUFPO0FBQ3hCLFFBQUksT0FBTyxTQUFTLFNBQVMsVUFBVTtBQUNyQyxZQUFNLEtBQUssU0FBUyxJQUFJO0FBQUEsSUFDMUI7QUFBQSxFQUNGO0FBRUEsUUFBTSxNQUFNLE1BQU0sS0FBSyxHQUFHLEVBQUUsWUFBWTtBQUN4QyxTQUNFLElBQUksU0FBUywyQkFBMkIsS0FDeEMsSUFBSSxTQUFTLHNCQUFzQixLQUNsQyxJQUFJLFNBQVMsUUFBUSxLQUFLLElBQUksU0FBUyxJQUFJO0FBRWhEO0FBRU8sSUFBTSxlQUFlO0FBQUEsRUFDMUIsVUFBTSxpQkFBSztBQUFBLElBQ1QsYUFDRTtBQUFBLElBQ0YsYUFBYSxjQUFFLE9BQU87QUFBQSxNQUNwQixPQUFPLGNBQ0osT0FBTyxFQUNQLFNBQVMsbURBQW1EO0FBQUEsTUFDL0QsTUFBTSxjQUFFLE9BQU8sRUFBRSxTQUFTLDJCQUEyQjtBQUFBLE1BQ3JELFdBQVcsY0FDUixPQUFPLEVBQ1AsU0FBUyxFQUNUO0FBQUEsUUFDQztBQUFBLE1BQ0Y7QUFBQSxNQUNGLFNBQVMsY0FDTixPQUFPLEVBQ1AsU0FBUyxFQUNUO0FBQUEsUUFDQztBQUFBLE1BQ0Y7QUFBQSxJQUNKLENBQUM7QUFBQSxJQUNELGNBQWMsY0FBRSxPQUFPO0FBQUEsTUFDckIsU0FBUyxjQUFFLE9BQU8sRUFBRSxTQUFTLGNBQWM7QUFBQSxNQUMzQyxVQUFVLGNBQUUsT0FBTztBQUFBLFFBQ2pCLFlBQVksY0FBRSxPQUFPLEVBQUUsU0FBUyxtQ0FBbUM7QUFBQSxRQUNuRSxZQUFZLGNBQ1QsT0FBTyxFQUNQLFNBQVMsMkNBQTJDO0FBQUEsUUFDdkQsV0FBVyxjQUFFLE9BQU8sRUFBRSxTQUFTLHFDQUFxQztBQUFBLFFBQ3BFLFNBQVMsY0FBRSxPQUFPLEVBQUUsU0FBUyxvQ0FBb0M7QUFBQSxRQUNqRSxhQUFhLGNBQ1YsUUFBUSxFQUNSLFNBQVMsNENBQTRDO0FBQUEsUUFDeEQsVUFBVSxjQUNQLE9BQU8sRUFDUCxTQUFTLGlEQUFpRDtBQUFBLFFBQzdELE1BQU0sY0FBRSxPQUFPLEVBQUUsU0FBUywyQkFBMkI7QUFBQSxNQUN2RCxDQUFDO0FBQUEsSUFDSCxDQUFDO0FBQUEsRUFDSCxDQUFDO0FBQUEsRUFDRCxVQUFNLGlCQUFLO0FBQUEsSUFDVCxhQUNFO0FBQUEsSUFDRixhQUFhLGNBQUUsT0FBTztBQUFBLE1BQ3BCLE9BQU8sY0FDSixPQUFPLEVBQ1AsU0FBUyxtREFBbUQ7QUFBQSxNQUMvRCxTQUFTLGNBQ04sT0FBTyxFQUNQLFNBQVMsOENBQThDO0FBQUEsTUFDMUQsTUFBTSxjQUNILE9BQU8sRUFDUCxTQUFTLEVBQ1Q7QUFBQSxRQUNDO0FBQUEsTUFDRjtBQUFBLE1BQ0YsVUFBVSxjQUNQLE9BQU8sRUFDUCxTQUFTLEVBQ1Q7QUFBQSxRQUNDO0FBQUEsTUFDRjtBQUFBLE1BQ0YsTUFBTSxjQUNILE9BQU8sRUFDUCxTQUFTLEVBQ1Q7QUFBQSxRQUNDO0FBQUEsTUFDRjtBQUFBLE1BQ0YsZUFBZSxjQUNaLFFBQVEsRUFDUixTQUFTLEVBQ1QsUUFBUSxJQUFJLEVBQ1osU0FBUyxrREFBa0Q7QUFBQSxNQUM5RCxjQUFjLGNBQ1gsT0FBTyxFQUNQLFNBQVMsRUFDVDtBQUFBLFFBQ0M7QUFBQSxNQUNGO0FBQUEsTUFDRixVQUFVLGNBQ1AsT0FBTyxFQUNQLFNBQVMsRUFDVDtBQUFBLFFBQ0M7QUFBQSxNQUNGO0FBQUEsTUFDRixrQkFBa0IsY0FDZixRQUFRLEVBQ1IsU0FBUyxFQUNULFFBQVEsS0FBSyxFQUNiO0FBQUEsUUFDQztBQUFBLE1BQ0Y7QUFBQSxJQUNKLENBQUM7QUFBQSxJQUNELGNBQWMsY0FBRSxPQUFPO0FBQUEsTUFDckIsU0FBUyxjQUNOLE9BQU8sRUFDUDtBQUFBLFFBQ0M7QUFBQSxNQUNGO0FBQUEsTUFDRixTQUFTLGNBQUUsT0FBTztBQUFBLFFBQ2hCLFlBQVksY0FBRSxPQUFPLEVBQUUsU0FBUyx5QkFBeUI7QUFBQSxRQUN6RCxXQUFXLGNBQUUsT0FBTyxFQUFFLFNBQVMsb0NBQW9DO0FBQUEsUUFDbkUsWUFBWSxjQUFFLE9BQU8sRUFBRSxTQUFTLHdCQUF3QjtBQUFBLFFBQ3hELFNBQVMsY0FBRSxPQUFPLEVBQUUsU0FBUywrQkFBK0I7QUFBQSxNQUM5RCxDQUFDO0FBQUEsSUFDSCxDQUFDO0FBQUEsRUFDSCxDQUFDO0FBQUEsRUFDRCxVQUFNLGlCQUFLO0FBQUEsSUFDVCxhQUNFO0FBQUEsSUFDRixhQUFhLGNBQUUsT0FBTztBQUFBLE1BQ3BCLE9BQU8sY0FDSixPQUFPLEVBQ1AsU0FBUyxtREFBbUQ7QUFBQSxNQUMvRCxNQUFNLGNBQ0gsT0FBTyxFQUNQLFNBQVMsRUFDVCxTQUFTLHVEQUF1RDtBQUFBLE1BQ25FLE9BQU8sY0FDSixPQUFPLEVBQ1AsU0FBUyxFQUNUO0FBQUEsUUFDQztBQUFBLE1BQ0Y7QUFBQSxNQUNGLGVBQWUsY0FDWixRQUFRLEVBQ1IsU0FBUyxFQUNULFFBQVEsS0FBSyxFQUNiO0FBQUEsUUFDQztBQUFBLE1BQ0Y7QUFBQSxNQUNGLFdBQVcsY0FDUixRQUFRLEVBQ1IsU0FBUyxFQUNULFFBQVEsS0FBSyxFQUNiLFNBQVMsa0NBQWtDO0FBQUEsTUFDOUMsU0FBUyxjQUNOLE9BQU8sRUFDUCxTQUFTLEVBQ1QsU0FBUyx5REFBeUQ7QUFBQSxJQUN2RSxDQUFDO0FBQUEsSUFDRCxjQUFjLGNBQUUsT0FBTztBQUFBLE1BQ3JCLFNBQVMsY0FDTixPQUFPLEVBQ1A7QUFBQSxRQUNDO0FBQUEsTUFDRjtBQUFBLE1BQ0YsU0FBUyxjQUFFLE9BQU87QUFBQSxRQUNoQixZQUFZLGNBQUUsT0FBTyxFQUFFLFNBQVMsNkJBQTZCO0FBQUEsUUFDN0QsWUFBWSxjQUFFLE9BQU8sRUFBRSxTQUFTLDZCQUE2QjtBQUFBLFFBQzdELFdBQVcsY0FBRSxPQUFPLEVBQUUsU0FBUyxtQ0FBbUM7QUFBQSxRQUNsRSxZQUFZLGNBQUUsT0FBTyxFQUFFLFNBQVMsc0JBQXNCO0FBQUEsUUFDdEQsT0FBTyxjQUNKLE9BQU8sRUFDUCxTQUFTLEVBQ1QsU0FBUyxtQ0FBbUM7QUFBQSxNQUNqRCxDQUFDO0FBQUEsSUFDSCxDQUFDO0FBQUEsRUFDSCxDQUFDO0FBQUEsRUFDRCxXQUFPLGlCQUFLO0FBQUEsSUFDVixhQUNFO0FBQUEsSUFDRixhQUFhLGNBQUUsT0FBTztBQUFBLE1BQ3BCLE9BQU8sY0FDSixPQUFPLEVBQ1AsU0FBUyxtREFBbUQ7QUFBQSxNQUMvRCxNQUFNLGNBQUUsT0FBTyxFQUFFLFNBQVMsMkJBQTJCO0FBQUEsTUFDckQsU0FBUyxjQUFFLE9BQU8sRUFBRSxTQUFTLDhCQUE4QjtBQUFBLElBQzdELENBQUM7QUFBQSxJQUNELGNBQWMsY0FBRSxPQUFPO0FBQUEsTUFDckIsU0FBUyxjQUFFLFFBQVEsRUFBRSxTQUFTLDZCQUE2QjtBQUFBLE1BQzNELE1BQU0sY0FBRSxPQUFPLEVBQUUsU0FBUywwQkFBMEI7QUFBQSxNQUNwRCxjQUFjLGNBQUUsT0FBTyxFQUFFLFNBQVMseUJBQXlCO0FBQUEsTUFDM0QsT0FBTyxjQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUywrQkFBK0I7QUFBQSxJQUN2RSxDQUFDO0FBQUEsRUFDSCxDQUFDO0FBQUEsRUFDRCxVQUFNLGlCQUFLO0FBQUEsSUFDVCxhQUNFO0FBQUEsSUFDRixhQUFhLGNBQUUsT0FBTztBQUFBLE1BQ3BCLE9BQU8sY0FDSixPQUFPLEVBQ1AsU0FBUyxtREFBbUQ7QUFBQSxNQUMvRCxNQUFNLGNBQUUsT0FBTyxFQUFFLFNBQVMsMkJBQTJCO0FBQUEsTUFDckQsWUFBWSxjQUNULE9BQU8sRUFDUCxTQUFTLDJEQUEyRDtBQUFBLE1BQ3ZFLFlBQVksY0FBRSxPQUFPLEVBQUUsU0FBUyxtQ0FBbUM7QUFBQSxJQUNyRSxDQUFDO0FBQUEsSUFDRCxjQUFjLGNBQUUsT0FBTztBQUFBLE1BQ3JCLFNBQVMsY0FBRSxRQUFRLEVBQUUsU0FBUyw0QkFBNEI7QUFBQSxNQUMxRCxNQUFNLGNBQUUsT0FBTyxFQUFFLFNBQVMseUJBQXlCO0FBQUEsTUFDbkQsT0FBTyxjQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyw4QkFBOEI7QUFBQSxJQUN0RSxDQUFDO0FBQUEsRUFDSCxDQUFDO0FBQUEsRUFDRCxVQUFNLGlCQUFLO0FBQUEsSUFDVCxhQUNFO0FBQUEsSUFDRixhQUFhLGNBQUUsT0FBTztBQUFBLE1BQ3BCLE9BQU8sY0FDSixPQUFPLEVBQ1AsU0FBUyxtREFBbUQ7QUFBQSxNQUMvRCxTQUFTLGNBQUUsT0FBTyxFQUFFLFNBQVMsOEJBQThCO0FBQUEsTUFDM0QsV0FBVyxjQUNSLE9BQU8sRUFDUCxTQUFTLEVBQ1Q7QUFBQSxRQUNDLDJDQUEyQyxrQkFBa0I7QUFBQSxNQUMvRDtBQUFBLElBQ0osQ0FBQztBQUFBLElBQ0QsY0FBYyxjQUFFLE9BQU87QUFBQSxNQUNyQixXQUFXLGNBQ1IsT0FBTyxFQUNQLFNBQVMseURBQXlEO0FBQUEsTUFDckUsUUFBUSxjQUNMLE9BQU8sRUFDUDtBQUFBLFFBQ0M7QUFBQSxNQUNGO0FBQUEsTUFDRixRQUFRLGNBQ0wsT0FBTyxFQUNQO0FBQUEsUUFDQztBQUFBLE1BQ0Y7QUFBQSxNQUNGLFVBQVUsY0FBRSxPQUFPLEVBQUUsU0FBUyxpQ0FBaUM7QUFBQSxNQUMvRCxRQUFRLGNBQ0wsS0FBSyxDQUFDLFdBQVcsYUFBYSxRQUFRLENBQUMsRUFDdkMsU0FBUyxnQkFBZ0I7QUFBQSxNQUM1QixXQUFXLGNBQ1IsT0FBTyxFQUNQO0FBQUEsUUFDQztBQUFBLE1BQ0Y7QUFBQSxJQUNKLENBQUM7QUFBQSxFQUNILENBQUM7QUFBQSxFQUNELFdBQU8saUJBQUs7QUFBQSxJQUNWLGFBQ0U7QUFBQSxJQUNGLGFBQWEsY0FBRSxPQUFPO0FBQUEsTUFDcEIsT0FBTyxjQUNKLE9BQU8sRUFDUCxTQUFTLG1EQUFtRDtBQUFBLE1BQy9ELE1BQU0sY0FBRSxPQUFPLEVBQUUsU0FBUywyQ0FBMkM7QUFBQSxJQUN2RSxDQUFDO0FBQUEsSUFDRCxjQUFjLGNBQUUsT0FBTztBQUFBLE1BQ3JCLE1BQU0sY0FBRSxPQUFPO0FBQUEsTUFDZixhQUFhLGNBQUUsT0FBTztBQUFBLE1BQ3RCLFNBQVMsY0FBRSxPQUFPLEVBQUUsU0FBUyx1QkFBdUI7QUFBQSxNQUNwRCxNQUFNLGNBQUUsT0FBTyxFQUFFLFNBQVMsNENBQTRDO0FBQUEsSUFDeEUsQ0FBQztBQUFBLEVBQ0gsQ0FBQztBQUFBLEVBQ0QsZ0JBQVksaUJBQUs7QUFBQSxJQUNmLGFBQWEsY0FBRSxPQUFPO0FBQUEsTUFDcEIsT0FBTyxjQUNKLE9BQU8sRUFDUCxTQUFTLG1EQUFtRDtBQUFBLE1BQy9ELE1BQU0sY0FDSCxPQUFPLEVBQ1A7QUFBQSxRQUNDO0FBQUEsTUFDRjtBQUFBLElBQ0osQ0FBQztBQUFBLEVBQ0gsQ0FBQztBQUNIO0FBR08sSUFBTSxtQkFBbUIsT0FBTztBQUFBLEVBQ3JDLE9BQU8sUUFBUSxZQUFZLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsTUFBTSxJQUFJLENBQUM7QUFDM0Q7QUFFQSxJQUFNLGtCQUFrQjtBQUVqQixTQUFTLFNBQVM7QUFBQSxFQUN2QixPQUFBQztBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUNGLEdBa0JFO0FBQ0EsUUFBTSxXQUFvQjtBQUFBLElBQ3hCLENBQUMsaUJBQWlCLElBQUksT0FBRyxpQkFBSztBQUFBLE1BQzVCLEdBQUcsYUFBYTtBQUFBLE1BQ2hCLFNBQVMsT0FBTyxFQUFFLE1BQUFDLE9BQU0sV0FBVyxRQUFRLE1BQU07QUFDL0MsY0FBTSxXQUFXQTtBQUVqQixjQUFNLFNBQVMsTUFBTSxRQUFRLFNBQVMsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUV4RCxZQUFJLGtCQUFrQixPQUFPO0FBQzNCLGNBQUksTUFBTSxlQUFlLEVBQUUsT0FBTyxPQUFPLFFBQVEsQ0FBQztBQUNsRCxnQkFBTTtBQUFBLFFBQ1I7QUFFQSxZQUFJLFdBQVcsTUFBTTtBQUNuQixpQkFBTztBQUFBLFlBQ0wsU0FBUywyQkFBMkIsUUFBUTtBQUFBLFlBQzVDLFVBQVU7QUFBQSxjQUNSLFlBQVk7QUFBQSxjQUNaLFlBQVk7QUFBQSxjQUNaLFdBQVc7QUFBQSxjQUNYLFNBQVM7QUFBQSxjQUNULGFBQWE7QUFBQSxjQUNiLFVBQVU7QUFBQSxjQUNWLE1BQU07QUFBQSxZQUNSO0FBQUEsVUFDRjtBQUFBLFFBQ0Y7QUFFQSxjQUFNLGNBQWMsT0FBTyxTQUFTLE9BQU87QUFDM0MsY0FBTSxRQUFRLFlBQVksTUFBTSxJQUFJO0FBR3BDLFlBQUksTUFBTSxTQUFTLEtBQUssTUFBTSxHQUFHLEVBQUUsTUFBTSxJQUFJO0FBQzNDLGdCQUFNLElBQUk7QUFBQSxRQUNaO0FBQ0EsY0FBTSxhQUFhLE1BQU07QUFDekIsY0FBTSxZQUFZLE9BQU8sV0FBVyxXQUFXO0FBQy9DLGNBQU0sV0FBVyxlQUFlLFNBQVM7QUFHekMsY0FBTSxZQUFZO0FBQ2xCLFlBQUk7QUFDSixZQUFJO0FBRUosWUFBSSxjQUFjLFVBQWEsWUFBWSxRQUFXO0FBQ3BELHdCQUFjO0FBQ2Qsc0JBQVk7QUFBQSxRQUNkLFdBQVcsY0FBYyxRQUFXO0FBQ2xDLHdCQUFjO0FBQ2Qsc0JBQVksS0FBSyxJQUFJLFlBQVksWUFBWSxHQUFHLFVBQVU7QUFBQSxRQUM1RCxXQUFXLFlBQVksUUFBVztBQUNoQyx3QkFBYztBQUNkLHNCQUFZO0FBQUEsUUFDZCxXQUFXLGFBQWEsS0FBSztBQUMzQix3QkFBYztBQUNkLHNCQUFZO0FBQUEsUUFDZCxPQUFPO0FBQ0wsd0JBQWM7QUFDZCxzQkFBWTtBQUFBLFFBQ2Q7QUFHQSxjQUFNLGNBQWMsTUFBTSxNQUFNLGNBQWMsR0FBRyxTQUFTO0FBQzFELGNBQU0sVUFBVSxZQUFZLEtBQUssSUFBSTtBQUVyQyxlQUFPO0FBQUEsVUFDTCxVQUFVO0FBQUEsWUFDUjtBQUFBLFlBQ0EsWUFBWSxLQUFLLElBQUksR0FBRyxZQUFZLGNBQWMsQ0FBQztBQUFBLFlBQ25ELFdBQVc7QUFBQSxZQUNYLFNBQVM7QUFBQSxZQUNULGFBQWEsWUFBWTtBQUFBLFlBQ3pCO0FBQUEsWUFDQSxNQUFNO0FBQUEsVUFDUjtBQUFBLFVBQ0E7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUFBLElBQ0YsQ0FBQztBQUFBLElBQ0QsQ0FBQyxpQkFBaUIsSUFBSSxPQUFHLGlCQUFLO0FBQUEsTUFDNUIsR0FBRyxhQUFhO0FBQUEsTUFDaEIsU0FBUyxPQUFPO0FBQUEsUUFDZDtBQUFBLFFBQ0EsTUFBQUE7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxNQUNGLE1BQU07QUFDSixjQUFNLGFBQWFBLFNBQVE7QUFFM0IsY0FBTSxPQUFpQixDQUFDO0FBRXhCLGFBQUssS0FBSyxlQUFlO0FBQ3pCLGFBQUssS0FBSyxXQUFXO0FBQ3JCLGFBQUssS0FBSyxXQUFXLE9BQU87QUFFNUIsWUFBSSxDQUFDLGVBQWU7QUFDbEIsZUFBSyxLQUFLLElBQUk7QUFBQSxRQUNoQjtBQUVBLFlBQUksVUFBVTtBQUNaLGVBQUssS0FBSyxVQUFVLFFBQVE7QUFBQSxRQUM5QjtBQUVBLFlBQUksTUFBTTtBQUNSLGVBQUssS0FBSyxVQUFVLElBQUk7QUFBQSxRQUMxQjtBQUVBLFlBQUksaUJBQWlCLFFBQVc7QUFDOUIsZUFBSyxLQUFLLE1BQU0sT0FBTyxZQUFZLENBQUM7QUFBQSxRQUN0QztBQUVBLFlBQUksYUFBYSxRQUFXO0FBQzFCLGVBQUssS0FBSyxlQUFlLE9BQU8sUUFBUSxDQUFDO0FBQUEsUUFDM0M7QUFFQSxZQUFJLGtCQUFrQjtBQUNwQixlQUFLLEtBQUssc0JBQXNCO0FBQUEsUUFDbEM7QUFFQSxhQUFLLEtBQUssTUFBTSxTQUFTLFVBQVU7QUFFbkMsWUFBSSxTQUFTLE1BQU0sUUFBUSxLQUFLLEVBQUUsU0FBUyxNQUFNLEtBQUssQ0FBQztBQUV2RCxZQUFJLGtCQUFrQixTQUFTLGtCQUFrQixNQUFNLEdBQUc7QUFDeEQsY0FBSSxLQUFLLGtDQUFrQztBQUMzQyxnQkFBTSxnQkFBZ0IsTUFBTSxRQUFRLEtBQUs7QUFBQSxZQUN2QyxTQUFTO0FBQUEsWUFDVCxNQUFNO0FBQUEsY0FDSjtBQUFBLGNBQ0E7QUFBQSxnQkFDRTtBQUFBLGdCQUNBO0FBQUEsZ0JBQ0E7QUFBQSxnQkFDQTtBQUFBLGdCQUNBO0FBQUEsY0FDRixFQUFFLEtBQUssSUFBSTtBQUFBLFlBQ2I7QUFBQSxZQUNBLE1BQU07QUFBQSxVQUNSLENBQUM7QUFDRCxjQUFJLEVBQUUseUJBQXlCLFFBQVE7QUFDckMsa0JBQU0sZ0JBQWdCLE1BQU0sY0FBYztBQUMxQyxnQkFBSSxjQUFjLGFBQWEsR0FBRztBQUNoQyxrQkFBSSxLQUFLLDBCQUEwQjtBQUFBLGdCQUNqQyxRQUFRLGNBQWM7QUFBQSxjQUN4QixDQUFDO0FBQUEsWUFDSDtBQUFBLFVBQ0Y7QUFDQSxtQkFBUyxNQUFNLFFBQVEsS0FBSyxFQUFFLFNBQVMsTUFBTSxLQUFLLENBQUM7QUFBQSxRQUNyRDtBQUVBLFlBQUksa0JBQWtCLFNBQVMsa0JBQWtCLE1BQU0sR0FBRztBQUN4RCxjQUFJLEtBQUssc0NBQXNDO0FBQy9DLGdCQUFNLFdBQVcsQ0FBQyxPQUFPLGVBQWU7QUFDeEMsY0FBSSxDQUFDLGVBQWU7QUFDbEIscUJBQVMsS0FBSyxJQUFJO0FBQUEsVUFDcEI7QUFDQSxjQUFJLGlCQUFpQixRQUFXO0FBQzlCLHFCQUFTLEtBQUssTUFBTSxPQUFPLFlBQVksQ0FBQztBQUFBLFVBQzFDO0FBQ0EsY0FBSSxhQUFhLFFBQVc7QUFDMUIscUJBQVMsS0FBSyxNQUFNLE9BQU8sUUFBUSxDQUFDO0FBQUEsVUFDdEM7QUFDQSxjQUFJLGtCQUFrQjtBQUNwQixxQkFBUyxLQUFLLElBQUk7QUFBQSxVQUNwQjtBQUNBLGNBQUksTUFBTTtBQUNSLHFCQUFTLEtBQUssYUFBYSxJQUFJLEVBQUU7QUFBQSxVQUNuQztBQUNBLGNBQUksVUFBVTtBQUNaLGtCQUFNLGFBQXVDO0FBQUEsY0FDM0MsSUFBSSxDQUFDLFFBQVEsU0FBUyxTQUFTLE9BQU87QUFBQSxjQUN0QyxJQUFJLENBQUMsUUFBUSxTQUFTLFNBQVMsT0FBTztBQUFBLGNBQ3RDLElBQUksQ0FBQyxNQUFNO0FBQUEsY0FDWCxNQUFNLENBQUMsTUFBTTtBQUFBLGNBQ2IsSUFBSSxDQUFDLE1BQU07QUFBQSxjQUNYLE1BQU0sQ0FBQyxRQUFRO0FBQUEsY0FDZixJQUFJLENBQUMsTUFBTTtBQUFBLGNBQ1gsTUFBTSxDQUFDLFFBQVE7QUFBQSxjQUNmLEtBQUssQ0FBQyxPQUFPO0FBQUEsY0FDYixNQUFNLENBQUMsUUFBUTtBQUFBLGNBQ2YsTUFBTSxDQUFDLFNBQVMsUUFBUTtBQUFBLFlBQzFCO0FBQ0EsdUJBQVcsT0FBTyxXQUFXLFFBQVEsS0FBSyxDQUFDLEtBQUssUUFBUSxFQUFFLEdBQUc7QUFDM0QsdUJBQVMsS0FBSyxhQUFhLEdBQUcsRUFBRTtBQUFBLFlBQ2xDO0FBQUEsVUFDRjtBQUNBLG1CQUFTLEtBQUssTUFBTSxTQUFTLFVBQVU7QUFDdkMsbUJBQVMsTUFBTSxRQUFRLEtBQUs7QUFBQSxZQUMxQixTQUFTO0FBQUEsWUFDVCxNQUFNO0FBQUEsVUFDUixDQUFDO0FBQUEsUUFDSDtBQUVBLFlBQUksa0JBQWtCLE9BQU87QUFDM0IsY0FBSSxNQUFNLGVBQWUsRUFBRSxPQUFPLE9BQU8sUUFBUSxDQUFDO0FBQ2xELGdCQUFNO0FBQUEsUUFDUjtBQUVBLGNBQU0sRUFBRSxRQUFRLE9BQU8sSUFBSSxNQUFNLE9BQU87QUFFeEMsWUFBSSxVQUFVLENBQUMsT0FBTyxZQUFZLEVBQUUsU0FBUyxZQUFZLEdBQUc7QUFDMUQsY0FBSSxLQUFLLGVBQWUsRUFBRSxPQUFPLENBQUM7QUFBQSxRQUNwQztBQUdBLGNBQU0sd0JBQXdCO0FBQzlCLFlBQUksY0FBYztBQUNsQixZQUFJLGVBQWU7QUFDbkIsWUFBSSxZQUFZLFNBQVMsdUJBQXVCO0FBQzlDLHdCQUNFLFlBQVksTUFBTSxHQUFHLHFCQUFxQixJQUMxQztBQUNGLHlCQUFlO0FBQUEsUUFDakI7QUFFQSxjQUFNLFFBQVEsWUFDWCxLQUFLLEVBQ0wsTUFBTSxJQUFJLEVBQ1YsT0FBTyxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUM7QUFDN0IsY0FBTSxZQUFZLG1CQUNkLE1BQU0sU0FDTixJQUFJO0FBQUEsVUFDRixNQUNHLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxXQUFXLEdBQUcsS0FBSyxFQUFFLFNBQVMsR0FBRyxDQUFDLEVBQ25ELElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQUEsUUFDL0IsRUFBRTtBQUVOLGVBQU87QUFBQSxVQUNMLFNBQVM7QUFBQSxZQUNQLFlBQVksbUJBQ1IsSUFDQSxNQUFNLE9BQU8sQ0FBQyxNQUFNLEVBQUUsU0FBUyxHQUFHLENBQUMsRUFBRTtBQUFBLFlBQ3pDO0FBQUEsWUFDQTtBQUFBLFlBQ0E7QUFBQSxZQUNBO0FBQUEsVUFDRjtBQUFBLFVBQ0EsU0FBUyxlQUFlO0FBQUEsUUFDMUI7QUFBQSxNQUNGO0FBQUEsSUFDRixDQUFDO0FBQUEsSUFDRCxDQUFDLGlCQUFpQixJQUFJLE9BQUcsaUJBQUs7QUFBQSxNQUM1QixHQUFHLGFBQWE7QUFBQSxNQUNoQixTQUFTLE9BQU8sRUFBRSxNQUFBQSxPQUFNLE9BQU8sZUFBZSxXQUFXLFFBQVEsTUFBTTtBQUNyRSxjQUFNLGFBQWFBLFNBQVE7QUFFM0IsY0FBTSxTQUFTLE1BQU0sUUFBUSxLQUFLO0FBQUEsVUFDaEMsU0FBUztBQUFBLFVBQ1QsTUFBTTtBQUFBLFlBQ0o7QUFBQSxZQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUErQkE7QUFBQSxZQUNBO0FBQUEsWUFDQSxPQUFPLFNBQVMsS0FBSztBQUFBLFlBQ3JCLGdCQUFnQixTQUFTO0FBQUEsWUFDekIsWUFBWSxTQUFTO0FBQUEsWUFDckIsV0FBVztBQUFBLFVBQ2I7QUFBQSxRQUNGLENBQUM7QUFFRCxZQUFJLGtCQUFrQixPQUFPO0FBQzNCLGNBQUksTUFBTSxlQUFlLEVBQUUsT0FBTyxPQUFPLFFBQVEsQ0FBQztBQUNsRCxnQkFBTTtBQUFBLFFBQ1I7QUFFQSxjQUFNLEVBQUUsUUFBUSxPQUFPLElBQUksTUFBTSxPQUFPO0FBRXhDLFlBQUksUUFBUTtBQUNWLGNBQUksS0FBSyxlQUFlLEVBQUUsT0FBTyxDQUFDO0FBQUEsUUFDcEM7QUFFQSxjQUFNLENBQUMsWUFBWSxHQUFHLElBQUksSUFBSSxPQUFPLE1BQU0sZUFBZTtBQUMxRCxjQUFNLFVBQVUsS0FBSyxLQUFLLGVBQWUsRUFBRSxLQUFLO0FBQ2hELGNBQU0sQ0FBQyxjQUFjLFdBQVcsSUFBSSxXQUFXLEtBQUssRUFBRSxNQUFNLEdBQUc7QUFFL0QsY0FBTSxhQUFhLE9BQU8sU0FBUyxjQUFjLEVBQUUsS0FBSztBQUN4RCxjQUFNLFlBQVksT0FBTyxTQUFTLGFBQWEsRUFBRSxLQUFLO0FBQ3RELGNBQU0sUUFBUSxRQUFRLE1BQU0sSUFBSSxFQUFFLE9BQU8sQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDO0FBRTVELGVBQU87QUFBQSxVQUNMLFNBQVM7QUFBQSxZQUNQLFlBQVksTUFBTTtBQUFBLFlBQ2xCO0FBQUEsWUFDQTtBQUFBLFlBQ0E7QUFBQSxZQUNBO0FBQUEsVUFDRjtBQUFBLFVBQ0E7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUFBLElBQ0YsQ0FBQztBQUFBLElBQ0QsQ0FBQyxpQkFBaUIsS0FBSyxPQUFHLGlCQUFLO0FBQUEsTUFDN0IsR0FBRyxhQUFhO0FBQUEsTUFDaEIsU0FBUyxPQUFPLEVBQUUsTUFBQUEsT0FBTSxRQUFRLE1BQU07QUFDcEMsY0FBTSxXQUFXQTtBQUVqQixZQUFJO0FBQ0YsZ0JBQU0sUUFBUSxXQUFXO0FBQUEsWUFDdkIsT0FBTyxDQUFDLEVBQUUsTUFBTSxVQUFVLFFBQVEsQ0FBQztBQUFBLFlBQ25DLFVBQVU7QUFBQSxVQUNaLENBQUM7QUFFRCxpQkFBTztBQUFBLFlBQ0wsU0FBUztBQUFBLFlBQ1QsTUFBTTtBQUFBLFlBQ04sY0FBYyxPQUFPLFdBQVcsU0FBUyxNQUFNO0FBQUEsVUFDakQ7QUFBQSxRQUNGLFNBQVMsS0FBSztBQUNaLGdCQUFNLFdBQVcsZUFBZSxRQUFRLElBQUksVUFBVSxPQUFPLEdBQUc7QUFDaEUsaUJBQU87QUFBQSxZQUNMLFNBQVM7QUFBQSxZQUNULE1BQU07QUFBQSxZQUNOLGNBQWM7QUFBQSxZQUNkLE9BQU87QUFBQSxVQUNUO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFBQSxJQUNGLENBQUM7QUFBQSxJQUNELENBQUMsaUJBQWlCLElBQUksT0FBRyxpQkFBSztBQUFBLE1BQzVCLEdBQUcsYUFBYTtBQUFBLE1BQ2hCLFNBQVMsT0FBTyxFQUFFLE1BQUFBLE9BQU0sWUFBWSxXQUFXLE1BQU07QUFDbkQsY0FBTSxXQUFXQTtBQUVqQixjQUFNLFNBQVMsTUFBTSxRQUFRLFNBQVMsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUV4RCxZQUFJLGtCQUFrQixPQUFPO0FBQzNCLGlCQUFPLEVBQUUsU0FBUyxPQUFPLE1BQU0sVUFBVSxPQUFPLE9BQU8sUUFBUTtBQUFBLFFBQ2pFO0FBRUEsWUFBSSxXQUFXLE1BQU07QUFDbkIsaUJBQU87QUFBQSxZQUNMLFNBQVM7QUFBQSxZQUNULE1BQU07QUFBQSxZQUNOLE9BQU8sbUJBQW1CLFFBQVE7QUFBQSxVQUNwQztBQUFBLFFBQ0Y7QUFFQSxjQUFNLFVBQVUsT0FBTyxTQUFTLE9BQU87QUFDdkMsY0FBTSxjQUFjLFFBQVEsTUFBTSxVQUFVLEVBQUUsU0FBUztBQUV2RCxZQUFJLGdCQUFnQixHQUFHO0FBQ3JCLGlCQUFPO0FBQUEsWUFDTCxTQUFTO0FBQUEsWUFDVCxNQUFNO0FBQUEsWUFDTixPQUFPO0FBQUEsVUFDVDtBQUFBLFFBQ0Y7QUFFQSxZQUFJLGNBQWMsR0FBRztBQUNuQixpQkFBTztBQUFBLFlBQ0wsU0FBUztBQUFBLFlBQ1QsTUFBTTtBQUFBLFlBQ04sT0FBTyxzQkFBc0IsV0FBVztBQUFBLFVBQzFDO0FBQUEsUUFDRjtBQUVBLGNBQU0sYUFBYSxRQUFRLFFBQVEsWUFBWSxVQUFVO0FBRXpELFlBQUk7QUFDRixnQkFBTSxRQUFRLFdBQVc7QUFBQSxZQUN2QixPQUFPLENBQUMsRUFBRSxNQUFNLFVBQVUsU0FBUyxXQUFXLENBQUM7QUFBQSxZQUMvQyxVQUFVO0FBQUEsVUFDWixDQUFDO0FBRUQsaUJBQU8sRUFBRSxTQUFTLE1BQU0sTUFBTSxTQUFTO0FBQUEsUUFDekMsU0FBUyxLQUFLO0FBQ1osZ0JBQU0sV0FBVyxlQUFlLFFBQVEsSUFBSSxVQUFVLE9BQU8sR0FBRztBQUNoRSxpQkFBTyxFQUFFLFNBQVMsT0FBTyxNQUFNLFVBQVUsT0FBTyxTQUFTO0FBQUEsUUFDM0Q7QUFBQSxNQUNGO0FBQUEsSUFDRixDQUFDO0FBQUEsSUFDRCxDQUFDLGlCQUFpQixJQUFJLE9BQUcsaUJBQUs7QUFBQSxNQUM1QixHQUFHLGFBQWE7QUFBQSxNQUNoQixTQUFTLE9BQU8sRUFBRSxTQUFTLFVBQVUsTUFBTTtBQUN6QyxjQUFNLEVBQUUsc0JBQUFDLHNCQUFxQixJQUFJLE1BQU07QUFJdkMsY0FBTSxpQkFBaUJBLHNCQUFxQixFQUFFLFFBQVEsQ0FBQztBQUV2RCxjQUFNLFNBQVMsTUFBTSxlQUFlLElBQUksRUFBRSxTQUFTLFVBQVUsQ0FBQztBQUU5RCxjQUFNLGFBQWE7QUFDbkIsY0FBTSxhQUFhO0FBRW5CLFlBQUksRUFBRSxRQUFRLE9BQU8sSUFBSTtBQUN6QixZQUFJLE9BQU8sU0FBUyxZQUFZO0FBQzlCLG1CQUNFLGtDQUE2QixVQUFVLGlCQUFpQixPQUFPLFNBQVM7QUFBQTtBQUFBLElBQ3hFLE9BQU8sTUFBTSxDQUFDLFVBQVU7QUFBQSxRQUM1QjtBQUNBLFlBQUksT0FBTyxTQUFTLFlBQVk7QUFDOUIsbUJBQ0Usa0NBQTZCLFVBQVUsaUJBQWlCLE9BQU8sU0FBUztBQUFBO0FBQUEsSUFDeEUsT0FBTyxNQUFNLENBQUMsVUFBVTtBQUFBLFFBQzVCO0FBRUEsZUFBTyxFQUFFLEdBQUcsUUFBUSxRQUFRLE9BQU87QUFBQSxNQUNyQztBQUFBLElBQ0YsQ0FBQztBQUFBLEVBQ0g7QUFHQSxhQUFXLENBQUMsTUFBTSxDQUFDLEtBQUssT0FBTyxRQUFRRixPQUFNLFFBQVEsU0FBUyxDQUFDLENBQUMsR0FBRztBQUNqRSxhQUFTLElBQUksSUFBSTtBQUFBLEVBQ25CO0FBRUEsTUFBSSxVQUFVLFFBQVEsU0FBUyxHQUFHO0FBQ2hDLGFBQVMsaUJBQWlCLEtBQUssUUFBSSxpQkFBSztBQUFBLE1BQ3RDLEdBQUcsYUFBYTtBQUFBLE1BQ2hCLFNBQVMsT0FBTyxFQUFFLEtBQUssTUFBTTtBQUMzQixjQUFNLFNBQVMsVUFBVTtBQUN6QixjQUFNLFFBQVEsT0FBTztBQUFBLFVBQ25CLENBQUMsTUFBTSxFQUFFLEtBQUssWUFBWSxNQUFNLEtBQUssWUFBWTtBQUFBLFFBQ25EO0FBQ0EsWUFBSSxDQUFDLE9BQU87QUFDVixnQkFBTSxJQUFJO0FBQUEsWUFDUixxQkFBcUIsSUFBSSxpQkFBaUIsT0FBTyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLElBQUksQ0FBQztBQUFBLFVBQ2hGO0FBQUEsUUFDRjtBQUNBLGNBQU0sU0FBUyxNQUFNLFFBQVEsU0FBUztBQUFBLFVBQ3BDLE1BQU0sTUFBTTtBQUFBLFFBQ2QsQ0FBQztBQUNELFlBQUksa0JBQWtCLE9BQU87QUFDM0IsZ0JBQU07QUFBQSxRQUNSO0FBQ0EsWUFBSSxXQUFXLE1BQU07QUFDbkIsZ0JBQU0sSUFBSSxNQUFNLHlCQUF5QixNQUFNLFdBQVcsRUFBRTtBQUFBLFFBQzlEO0FBQ0EsY0FBTSxNQUNKLE9BQU8sV0FBVyxXQUFXLFNBQVMsT0FBTyxTQUFTLE9BQU87QUFDL0QsY0FBTSxZQUFZLElBQUksUUFBUSxPQUFPLENBQUM7QUFDdEMsY0FBTSxVQUNKLGNBQWMsS0FBSyxNQUFNLElBQUksTUFBTSxZQUFZLENBQUMsRUFBRSxLQUFLO0FBQ3pELGNBQU0sV0FBVyxNQUFNLFlBQVksUUFBUSxpQkFBaUIsRUFBRTtBQUM5RCxlQUFPO0FBQUEsVUFDTCxNQUFNLE1BQU07QUFBQSxVQUNaLGFBQWEsTUFBTTtBQUFBLFVBQ25CO0FBQUEsVUFDQSxNQUFNO0FBQUEsUUFDUjtBQUFBLE1BQ0Y7QUFBQSxJQUNGLENBQUM7QUFBQSxFQUNIO0FBRUEsUUFBTSxnQkFBK0IsT0FBTyxVQUFVLFdBQVcsWUFBWTtBQUMzRSxVQUFNLGdCQUFnQixNQUFNLG1CQUFtQjtBQUFBLE1BQzdDLE9BQUFBO0FBQUEsTUFDQTtBQUFBLE1BQ0EsT0FBTztBQUFBLE1BQ1AsWUFBWSxNQUFNLFFBQVEsSUFBSSxLQUFLLElBQUksQ0FBQztBQUFBLE1BQ3hDLFVBQVUsQ0FBQztBQUFBLElBQ2IsQ0FBQztBQUVELFFBQUksQ0FBQyxlQUFlO0FBQ2xCLFVBQUk7QUFDRixjQUFNLFNBQVMsTUFBTSxRQUFRO0FBQzdCLGVBQU8sRUFBRSxPQUFPO0FBQUEsTUFDbEIsU0FBUyxLQUFLO0FBQ1osZUFBTztBQUFBLFVBQ0wsT0FBTyxlQUFlLFFBQVEsSUFBSSxVQUFVLE9BQU8sR0FBRztBQUFBLFFBQ3hEO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFFQSxVQUFNLGFBQWEsbUJBQWUsbUJBQUssQ0FBQztBQUN4QyxVQUFNLGFBQWEsYUFBUyxtQkFBSyxDQUFDO0FBQ2xDLFVBQU0sU0FBUyxlQUFlLFVBQVU7QUFFeEMsVUFBTUEsT0FBTSxRQUFRLEtBQUssSUFBSSxRQUFRO0FBQUEsTUFDbkMsSUFBSTtBQUFBLE1BQ0osT0FBTyxpQkFBaUI7QUFBQSxNQUN4QixXQUFXO0FBQUEsTUFDWDtBQUFBLE1BQ0EsTUFBTTtBQUFBLFFBQ0osTUFBTSxRQUFRLFFBQVE7QUFBQSxRQUN0QjtBQUFBLFFBQ0EsT0FBTztBQUFBLFFBQ1AsT0FBTztBQUFBLFFBQ1AsVUFBVSxFQUFFLElBQUksV0FBVztBQUFBLE1BQzdCO0FBQUEsSUFDRixDQUFDO0FBRUQsV0FBTyxNQUFNO0FBQUEsTUFDWCxNQUFNO0FBQUEsTUFDTjtBQUFBLE1BQ0E7QUFBQSxJQUNGLENBQUM7QUFDRCxXQUFPLE1BQU07QUFBQSxNQUNYLE1BQU07QUFBQSxNQUNOO0FBQUEsTUFDQTtBQUFBLE1BQ0EsT0FBTztBQUFBLElBQ1QsQ0FBQztBQUNELFdBQU8sTUFBTTtBQUFBLE1BQ1gsTUFBTTtBQUFBLE1BQ047QUFBQSxNQUNBO0FBQUEsSUFDRixDQUFDO0FBRUQsVUFBTSxVQUFVO0FBQ2hCLFVBQU0sYUFBYSxJQUFJLEtBQUs7QUFDNUIsVUFBTUcsU0FBUSxLQUFLLElBQUk7QUFFdkIsV0FBTyxLQUFLLElBQUksSUFBSUEsU0FBUSxjQUFjLENBQUMsZ0JBQWdCLE9BQU8sU0FBUztBQUN6RSxZQUFNLFVBQVUsTUFBTUgsT0FBTSxRQUFRLEtBQUssSUFBSSxNQUFNO0FBQ25ELFVBQ0UsV0FDQSxXQUFXLFFBQVEsU0FDakIsUUFBUSxLQUEyQixVQUFVLHdCQUM1QyxRQUFRLEtBQTJCLFVBQVUsa0JBQ2hEO0FBQ0EsY0FBTUksU0FBUyxRQUFRLEtBQTJCO0FBRWxELFlBQUlBLFdBQVUsaUJBQWlCO0FBQzdCLGdCQUFNLFNBQVUsUUFBUSxLQUNyQixVQUFVO0FBQ2IsaUJBQU87QUFBQSxZQUNMLE9BQU8sU0FBUyxRQUFRLGFBQWEsVUFBVSxhQUFhO0FBQUEsVUFDOUQ7QUFBQSxRQUNGO0FBRUEsY0FBTSxXQUNKLFFBQVEsS0FHUjtBQUNGLFlBQUksVUFBVSxVQUFVO0FBQ3RCLGNBQUk7QUFDRixrQkFBTSxTQUFTLE1BQU0sUUFBUTtBQUM3QixtQkFBTyxNQUFNO0FBQUEsY0FDWCxNQUFNO0FBQUEsY0FDTjtBQUFBLGNBQ0EsUUFBUTtBQUFBLFlBQ1YsQ0FBQztBQUNELG1CQUFPLEVBQUUsT0FBTztBQUFBLFVBQ2xCLFNBQVMsS0FBSztBQUNaLGtCQUFNLFFBQVEsZUFBZSxRQUFRLElBQUksVUFBVSxPQUFPLEdBQUc7QUFDN0QsbUJBQU8sTUFBTTtBQUFBLGNBQ1gsTUFBTTtBQUFBLGNBQ047QUFBQSxjQUNBLFdBQVc7QUFBQSxZQUNiLENBQUM7QUFDRCxtQkFBTyxFQUFFLE1BQU07QUFBQSxVQUNqQjtBQUFBLFFBQ0Y7QUFDQSxlQUFPLE1BQU07QUFBQSxVQUNYLE1BQU07QUFBQSxVQUNOO0FBQUEsUUFDRixDQUFDO0FBQ0QsZUFBTztBQUFBLFVBQ0wsT0FBTyxTQUFTLFFBQVEsYUFBYSxVQUFVLFVBQVUsYUFBYTtBQUFBLFFBQ3hFO0FBQUEsTUFDRjtBQUNBLFlBQU0sSUFBSSxRQUFRLENBQUMsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDO0FBQUEsSUFDakQ7QUFFQSxXQUFPO0FBQUEsTUFDTCxPQUFPLGdCQUFnQixPQUFPLFVBQzFCLGdCQUNBO0FBQUEsSUFDTjtBQUFBLEVBQ0Y7QUFFQSxRQUFNLGNBQTJCO0FBQUEsSUFDL0I7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsRUFDRjtBQUVBLFdBQVMsaUJBQWlCLFVBQVUsSUFBSSxxQkFBcUI7QUFBQSxJQUMzRCxPQUFPO0FBQUEsSUFDUDtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLEVBQ0YsQ0FBQztBQUVELFFBQU0seUJBQXlCLE9BQU87QUFBQSxJQUNwQyxPQUFPLFFBQVEsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNO0FBQzFDLFlBQU0sa0JBQWtCLEVBQUU7QUFDMUIsWUFBTSxpQkFBaUIsa0JBQ25CLFVBQVUsU0FBNkM7QUFDckQsY0FBTSxPQUFPLFFBQVEsS0FBSyxRQUFRLElBQUksRUFBRTtBQUN4QyxZQUFJO0FBQ0YsY0FBSSxZQUFZLEtBQUssQ0FBQztBQUN0QixjQUFJSixPQUFNLE1BQU0sYUFBYSxHQUFHO0FBQzlCLGtCQUFNLGVBQWUsTUFBTUEsT0FBTSxNQUFNLGFBQWEsRUFBRTtBQUFBLGNBQ3BEO0FBQUEsY0FDQSxPQUFPO0FBQUEsY0FDUCxTQUFTO0FBQUEsWUFDWCxDQUFDO0FBQ0QsZ0JBQUksY0FBYyxVQUFVLFFBQVc7QUFDckMsMEJBQVksYUFBYTtBQUN6QixtQkFBSyxDQUFDLElBQUk7QUFBQSxZQUNaO0FBQUEsVUFDRjtBQUVBLGNBQUksU0FBUyxNQUFNLGdCQUFnQixHQUFHLElBQUk7QUFFMUMsY0FBSUEsT0FBTSxNQUFNLFlBQVksR0FBRztBQUM3QixrQkFBTSxjQUFjLE1BQU1BLE9BQU0sTUFBTSxZQUFZLEVBQUU7QUFBQSxjQUNsRDtBQUFBLGNBQ0EsT0FBTztBQUFBLGNBQ1A7QUFBQSxjQUNBLFNBQVM7QUFBQSxZQUNYLENBQUM7QUFDRCxnQkFBSSxhQUFhLFdBQVcsUUFBVztBQUNyQyx1QkFBUyxZQUFZO0FBQUEsWUFDdkI7QUFBQSxVQUNGO0FBRUEsZUFBSztBQUNMLGlCQUFPO0FBQUEsUUFDVCxTQUFTLEdBQUc7QUFDVixlQUFLO0FBQUEsWUFDSCxPQUFPLGFBQWEsUUFBUSxFQUFFLFVBQVUsT0FBTyxDQUFDO0FBQUEsVUFDbEQsQ0FBQztBQUNELGdCQUFNO0FBQUEsUUFDUjtBQUFBLE1BQ0YsSUFDQTtBQUNKLGFBQU87QUFBQSxRQUNMO0FBQUEsUUFDQTtBQUFBLFVBQ0UsR0FBRztBQUFBLFVBQ0gsR0FBSSxpQkFBaUIsRUFBRSxTQUFTLGVBQWUsSUFBSSxDQUFDO0FBQUEsVUFDcEQsZUFBZSxPQUNiLFdBQ0EsU0FDRztBQUNILG1CQUFPLE1BQU0sbUJBQW1CO0FBQUEsY0FDOUIsT0FBQUE7QUFBQSxjQUNBLFVBQVU7QUFBQSxjQUNWLE9BQU87QUFBQSxjQUNQLFlBQVksS0FBSztBQUFBLGNBQ2pCLFVBQVUsS0FBSztBQUFBLFlBQ2pCLENBQUM7QUFBQSxVQUNIO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFBQSxJQUNGLENBQUM7QUFBQSxFQUNIO0FBRUEsU0FBTyxFQUFFLFVBQVUsd0JBQXdCLFlBQVk7QUFDekQ7OztBUHhnQ0E7OztBV3JCQSxJQUFNLDhDQUE4QztBQUVwRCxJQUFNLDZCQUE2QixDQUFDLFVBQVUsV0FBVztBQUV6RCxJQUFNLHlDQUEwRDtBQUFBLEVBQzlELFdBQVc7QUFBQSxJQUNULGNBQWMsRUFBRSxNQUFNLFlBQVk7QUFBQSxFQUNwQztBQUFBLEVBQ0EsWUFBWTtBQUFBLElBQ1YsY0FBYyxFQUFFLE1BQU0sWUFBWTtBQUFBLEVBQ3BDO0FBQUEsRUFDQSxTQUFTO0FBQUEsSUFDUCxZQUFZLEVBQUUsTUFBTSxVQUFVO0FBQUEsRUFDaEM7QUFBQSxFQUNBLGtCQUFrQjtBQUFBLElBQ2hCLGVBQWUsRUFBRSxNQUFNLFlBQVk7QUFBQSxFQUNyQztBQUFBLEVBQ0EsU0FBUztBQUFBLElBQ1AsdUJBQXVCLEVBQUUsTUFBTSxZQUFZO0FBQUEsRUFDN0M7QUFDRjtBQUVBLFNBQVMsbUJBQW1CLE9BQThCO0FBQ3hELFFBQU0sYUFBYSxNQUFNLFFBQVEsR0FBRztBQUNwQyxNQUFJLGVBQWUsSUFBSTtBQUNyQixXQUFPO0FBQUEsRUFDVDtBQUNBLFNBQU8sTUFBTSxNQUFNLEdBQUcsVUFBVTtBQUNsQztBQUVBLFNBQVMsK0JBQStCLFVBQWtDO0FBQ3hFLE1BQUksUUFBUTtBQUNaLGFBQVcsV0FBVyxVQUFVO0FBQzlCLFVBQU0sa0JBQW1CLFFBQ3RCO0FBQ0gsUUFBSSxpQkFBaUIsV0FBVyxjQUFjO0FBQzVDLGVBQVM7QUFBQSxJQUNYO0FBQ0EsUUFBSSxNQUFNLFFBQVEsUUFBUSxPQUFPLEdBQUc7QUFDbEMsaUJBQVcsUUFBUSxRQUFRLFNBQVM7QUFDbEMsY0FBTSxzQkFDSixLQUNBO0FBQ0YsWUFBSSxxQkFBcUIsV0FBVyxjQUFjO0FBQ2hELG1CQUFTO0FBQUEsUUFDWDtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUNBLFNBQU87QUFDVDtBQUVBLFNBQVMsa0JBQWtCLE9BQXdCO0FBQ2pELFFBQU0sUUFBUSxNQUFNLFlBQVk7QUFDaEMsU0FBTywyQkFBMkIsS0FBSyxDQUFDLE1BQU0sTUFBTSxTQUFTLENBQUMsQ0FBQztBQUNqRTtBQUVPLFNBQVMscUJBQXFCLE1BR2pCO0FBQ2xCLFFBQU0sT0FBd0IsRUFBRSxHQUFJLEtBQUssV0FBVyxDQUFDLEVBQUc7QUFDeEQsYUFBVyxDQUFDLEtBQUssS0FBSyxLQUFLLE9BQU8sUUFBUSxLQUFLLEtBQUssR0FBRztBQUNyRCxTQUFLLEdBQUcsSUFBSSxFQUFFLEdBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxHQUFJLEdBQUcsTUFBTTtBQUFBLEVBQy9DO0FBQ0EsU0FBTztBQUNUO0FBRUEsU0FBUyxzQkFBc0IsTUFBd0I7QUFDckQsTUFBSSxDQUFDLFFBQVEsT0FBTyxTQUFTLFVBQVU7QUFDckMsV0FBTztBQUFBLEVBQ1Q7QUFFQSxNQUFJLFVBQVUsUUFBUyxLQUE0QixTQUFTLFFBQVE7QUFDbEUsVUFBTSxPQUFRLEtBQTRCO0FBQzFDLFFBQUksT0FBTyxTQUFTLFVBQVU7QUFDNUIsYUFBTyxLQUFLLEtBQUssRUFBRSxTQUFTO0FBQUEsSUFDOUI7QUFBQSxFQUNGO0FBRUEsTUFBSSxVQUFVLE1BQU07QUFDbEIsVUFBTSxPQUFRLEtBQTRCO0FBQzFDLFFBQUksU0FBUyxjQUFjLFNBQVMsYUFBYTtBQUMvQyxhQUFPO0FBQUEsSUFDVDtBQUFBLEVBQ0Y7QUFFQSxTQUFPO0FBQ1Q7QUFFQSxTQUFTLG9CQUFvQixTQUFnQztBQUMzRCxNQUFJLE9BQU8sUUFBUSxZQUFZLFVBQVU7QUFDdkMsV0FBTyxRQUFRLFFBQVEsS0FBSyxFQUFFLFNBQVM7QUFBQSxFQUN6QztBQUVBLE1BQUksTUFBTSxRQUFRLFFBQVEsT0FBTyxHQUFHO0FBQ2xDLFdBQU8sUUFBUSxRQUFRLEtBQUssQ0FBQyxTQUFTLHNCQUFzQixJQUFJLENBQUM7QUFBQSxFQUNuRTtBQUVBLFNBQU87QUFDVDtBQUVBLFNBQVMsMkJBQTJCLFNBQW1DO0FBQ3JFLFdBQVMsSUFBSSxRQUFRLFNBQVMsR0FBRyxLQUFLLEdBQUcsS0FBSyxHQUFHO0FBQy9DLFFBQUksc0JBQXNCLFFBQVEsQ0FBQyxDQUFDLEdBQUc7QUFDckMsYUFBTztBQUFBLElBQ1Q7QUFBQSxFQUNGO0FBQ0EsU0FBTztBQUNUO0FBRUEsU0FBUywyQkFBMkIsVUFBb0M7QUFDdEUsUUFBTSxnQkFBMEIsQ0FBQztBQUNqQyxRQUFNLGVBQXlCLENBQUM7QUFFaEMsV0FBUyxJQUFJLEdBQUcsSUFBSSxTQUFTLFVBQVUsY0FBYyxTQUFTLEdBQUcsS0FBSyxHQUFHO0FBQ3ZFLFVBQU0sVUFBVSxTQUFTLENBQUM7QUFDMUIsUUFBSSxRQUFRLFNBQVMsWUFBWSxvQkFBb0IsT0FBTyxHQUFHO0FBQzdELG9CQUFjLEtBQUssQ0FBQztBQUFBLElBQ3RCO0FBQUEsRUFDRjtBQUVBLFdBQVMsSUFBSSxTQUFTLFNBQVMsR0FBRyxLQUFLLEtBQUssYUFBYSxTQUFTLEdBQUcsS0FBSyxHQUFHO0FBQzNFLFVBQU0sVUFBVSxTQUFTLENBQUM7QUFDMUIsUUFBSSxRQUFRLFNBQVMsWUFBWSxvQkFBb0IsT0FBTyxHQUFHO0FBQzdELG1CQUFhLEtBQUssQ0FBQztBQUFBLElBQ3JCO0FBQUEsRUFDRjtBQUVBLGVBQWEsUUFBUTtBQUVyQixTQUFPLENBQUMsR0FBRyxlQUFlLEdBQUcsWUFBWTtBQUMzQztBQUVBLFNBQVMseUJBQXlCLE1BSWY7QUFDakIsUUFBTSxzQkFBc0IsK0JBQStCLEtBQUssUUFBUTtBQUN4RSxRQUFNLGtCQUFrQixLQUFLO0FBQUEsSUFDM0I7QUFBQSxJQUNBLEtBQUssMkJBQTJCO0FBQUEsRUFDbEM7QUFFQSxNQUFJLG9CQUFvQixHQUFHO0FBQ3pCLFdBQU8sS0FBSztBQUFBLEVBQ2Q7QUFFQSxRQUFNLGdCQUFnQiwyQkFBMkIsS0FBSyxRQUFRLEVBQUU7QUFBQSxJQUM5RDtBQUFBLElBQ0E7QUFBQSxFQUNGO0FBQ0EsTUFBSSxjQUFjLFdBQVcsR0FBRztBQUM5QixXQUFPLEtBQUs7QUFBQSxFQUNkO0FBRUEsUUFBTSx5QkFDSixLQUFLLGVBQWUsZUFDcEIsUUFBUSxLQUFLLFlBQVksU0FBUyxTQUFTLENBQUM7QUFFOUMsUUFBTSxlQUFlLEtBQUssU0FBUyxNQUFNO0FBRXpDLGFBQVcsZ0JBQWdCLGVBQWU7QUFDeEMsVUFBTSxVQUFVLGFBQWEsWUFBWTtBQUV6QyxVQUFNLDBCQUNKLENBQUMsMEJBQ0QsTUFBTSxRQUFRLFFBQVEsT0FBTyxLQUM3QixRQUFRLFFBQVEsU0FBUztBQUUzQixRQUFJLDJCQUEyQixNQUFNLFFBQVEsUUFBUSxPQUFPLEdBQUc7QUFDN0QsWUFBTSxZQUFZLDJCQUEyQixRQUFRLE9BQU87QUFDNUQsVUFBSSxjQUFjLE1BQU07QUFDdEIsY0FBTSxPQUFPLFFBQVEsUUFBUSxTQUFTO0FBQ3RDLFlBQUksUUFBUSxPQUFPLFNBQVMsVUFBVTtBQUNwQyxnQkFBTSxzQkFDSixLQUNBO0FBRUYsZ0JBQU0sY0FBYyxRQUFRLFFBQVEsTUFBTTtBQUMxQyxzQkFBWSxTQUFTLElBQUk7QUFBQSxZQUN2QixHQUFJO0FBQUEsWUFDSixpQkFBaUIscUJBQXFCO0FBQUEsY0FDcEMsU0FBUztBQUFBLGNBQ1QsT0FBTztBQUFBLFlBQ1QsQ0FBQztBQUFBLFVBQ0g7QUFFQSx1QkFBYSxZQUFZLElBQUk7QUFBQSxZQUMzQixHQUFHO0FBQUEsWUFDSCxTQUFTO0FBQUEsVUFDWDtBQUNBO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBRUEsVUFBTSx5QkFDSixRQUNBO0FBRUYsaUJBQWEsWUFBWSxJQUFJO0FBQUEsTUFDM0IsR0FBRztBQUFBLE1BQ0gsaUJBQWlCLHFCQUFxQjtBQUFBLFFBQ3BDLFNBQVM7QUFBQSxRQUNULE9BQU87QUFBQSxNQUNULENBQUM7QUFBQSxJQUNIO0FBQUEsRUFDRjtBQUVBLFNBQU87QUFDVDtBQU9PLFNBQVMsaUNBQWlDLE1BTXpCO0FBQ3RCLFFBQU0sV0FBVyxtQkFBbUIsS0FBSyxLQUFLO0FBRTlDLFFBQU0sa0JBQW1DLENBQUM7QUFFMUMsT0FDRyxhQUFhLFlBQVksYUFBYSxZQUN2QyxLQUFLLFFBQVEsc0JBQXNCLE9BQ25DO0FBQ0Esb0JBQWdCLFNBQVMsRUFBRSxnQkFBZ0IsS0FBSyxVQUFVO0FBQUEsRUFDNUQ7QUFFQSxRQUFNLDJCQUNKLEtBQUssV0FBVyw0QkFDaEI7QUFFRixRQUFNLGlCQUFpQixrQkFBa0IsS0FBSyxLQUFLLElBQy9DLHlCQUF5QjtBQUFBLElBQ3ZCLFVBQVUsS0FBSztBQUFBLElBQ2YsWUFBWTtBQUFBLElBQ1o7QUFBQSxFQUNGLENBQUMsSUFDRCxLQUFLO0FBRVQsU0FBTztBQUFBLElBQ0wsVUFBVTtBQUFBLElBQ1Y7QUFBQSxFQUNGO0FBQ0Y7OztBWC9OQSxJQUFNLDZCQUE2QjtBQUVuQyxTQUFTLGlCQUFpQjtBQUFBLEVBQ3hCLE9BQUFLO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQ0YsR0FRRTtBQUNBLE1BQUk7QUFDSixRQUFNLGFBQWEsSUFBSSxRQUFjLENBQUNDLGFBQVk7QUFDaEQsd0JBQW9CQTtBQUFBLEVBQ3RCLENBQUM7QUFDRCxRQUFNLHlCQUF5QjtBQUFBLElBQzdCLFNBQVM7QUFBQSxFQUNYO0FBRUEsUUFBTUMsT0FBTSxhQUFhO0FBQUEsSUFDdkIsUUFBUSxFQUFFLEdBQUdGLE9BQU0sUUFBUSxTQUFTLE1BQU1BLE9BQU0sS0FBSztBQUFBLElBQ3JELFdBQVc7QUFBQSxFQUNiLENBQUM7QUFFRCxRQUFNLE9BQU8sWUFBWTtBQUN2QixRQUFJLFVBQVU7QUFDZCxXQUFPLENBQUMsT0FBTyxTQUFTO0FBQ3RCLFlBQU0sVUFBVSxNQUFNQSxPQUFNLFFBQVEsUUFBUSxJQUFJLFNBQVM7QUFDekQsVUFBSSxDQUFDLFNBQVM7QUFDWixZQUFJLFNBQVM7QUFDWCw0QkFBa0I7QUFDbEI7QUFBQSxRQUNGO0FBQ0EsY0FBTSxJQUFJLE1BQU0sV0FBVyxTQUFTLFlBQVk7QUFBQSxNQUNsRDtBQUNBLFVBQUksUUFBUSxrQkFBa0IsTUFBTTtBQUNsQyxRQUFBRSxLQUFJLEtBQUssc0JBQXNCLEVBQUUsVUFBVSxDQUFDO0FBQzVDLCtCQUF1QixVQUFVLFFBQVE7QUFDekMsd0JBQWdCLE1BQU07QUFDdEIsWUFBSSxTQUFTO0FBQ1gsNEJBQWtCO0FBQUEsUUFDcEI7QUFDQTtBQUFBLE1BQ0Y7QUFDQSxVQUFJLFNBQVM7QUFDWCxrQkFBVTtBQUNWLDBCQUFrQjtBQUFBLE1BQ3BCO0FBQ0EsWUFBTSxJQUFJO0FBQUEsUUFBUSxDQUFDRCxhQUNqQixXQUFXQSxVQUFTLDBCQUEwQjtBQUFBLE1BQ2hEO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFFQSxPQUFLO0FBQ0wsU0FBTyxFQUFFLFlBQVksdUJBQXVCO0FBQzlDO0FBMEJBLGVBQXNCLFdBQWtDO0FBQUEsRUFDdEQ7QUFBQSxFQUNBO0FBQUEsRUFDQSxPQUFBRDtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQ0YsR0FBaUQ7QUFDL0MsUUFBTUUsT0FBTSxhQUFhO0FBQUEsSUFDdkIsUUFBUSxFQUFFLEdBQUdGLE9BQU0sUUFBUSxTQUFTLE1BQU1BLE9BQU0sS0FBSztBQUFBLElBQ3JELFdBQVc7QUFBQSxFQUNiLENBQUM7QUFFRCxRQUFNLFVBQVVFLEtBQUksWUFBWTtBQUFBLElBQzlCO0FBQUEsSUFDQSxXQUFXO0FBQUEsRUFDYixDQUFDO0FBQ0QsUUFBTSxXQUFXLFFBQVEsS0FBSyxZQUFZO0FBRTFDLFFBQU0sc0JBQXNCLDBCQUEwQkYsTUFBSztBQUUzRCxRQUFNLGtCQUFrQixJQUFJLGdCQUFnQjtBQUM1QyxRQUFNLGlCQUFpQixJQUFJLGdCQUFnQjtBQUUzQyxRQUFNLEVBQUUsWUFBWSx1QkFBdUIsSUFBSSxpQkFBaUI7QUFBQSxJQUM5RCxPQUFBQTtBQUFBLElBQ0EsV0FBVztBQUFBLElBQ1gsUUFBUSxlQUFlO0FBQUEsSUFDdkI7QUFBQSxFQUNGLENBQUM7QUFFRCxRQUFNLFdBQVcsUUFBUSxLQUFLLDJDQUEyQztBQUN6RSxRQUFNLENBQUMsRUFBRSxnQkFBZ0IsYUFBYSxFQUFFLFNBQVMsY0FBYyxDQUFDLElBQzlELE1BQU0sUUFBUSxJQUFJO0FBQUEsSUFDaEI7QUFBQSxJQUNBQSxPQUFNLFFBQVEsUUFBUSxjQUFjLFNBQVM7QUFBQSxJQUM3Q0EsT0FBTSxRQUFRLEtBQUssY0FBYyxTQUFTO0FBQUEsSUFDMUNBLE9BQU0sUUFBUSxRQUFRLElBQUksU0FBUyxFQUFFLEtBQUssT0FBTyxZQUFZO0FBQzNELFVBQUksQ0FBQyxTQUFTO0FBQ1osY0FBTSxJQUFJLHFCQUFxQixFQUFFLElBQUksVUFBVSxDQUFDO0FBQUEsTUFDbEQ7QUFFQSxZQUFNLFlBQVksUUFBUSxhQUFhLFFBQVE7QUFDL0MsWUFBTUcsV0FBVUgsT0FBTSxRQUFRLFNBQVM7QUFDdkMsWUFBTUksaUJBQWdCLE1BQU1KLE9BQU0sUUFBUSxRQUFRLElBQUksU0FBUztBQUUvRCxhQUFPLEVBQUUsU0FBQUcsVUFBUyxlQUFBQyxlQUFjO0FBQUEsSUFDbEMsQ0FBQztBQUFBLEVBQ0gsQ0FBQztBQUVILFdBQVM7QUFFVCxNQUFJLGdCQUFnQixPQUFPLFNBQVM7QUFDbEMsbUJBQWUsTUFBTTtBQUNyQixXQUFPO0FBQUEsTUFDTCxjQUFjO0FBQUEsTUFDZDtBQUFBLE1BQ0EsWUFBWSxDQUFDO0FBQUEsTUFDYixrQkFBa0IsQ0FBQztBQUFBLE1BQ25CLFVBQVU7QUFBQSxNQUNWO0FBQUEsTUFDQTtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBRUEsUUFBTSxvQkFDSixrQkFBa0IsS0FDYixZQUFZO0FBQ1gsVUFBTSxNQUFNLEtBQUssSUFBSTtBQUNyQixVQUFNLGtCQUFrQixlQUFlO0FBQUEsTUFDckMsQ0FBQyxNQUFNLEVBQUUsYUFBYSxhQUFhLEVBQUUsY0FBYztBQUFBLElBQ3JEO0FBQ0EsUUFBSSxnQkFBZ0IsU0FBUyxHQUFHO0FBQzlCLGFBQU8sTUFBTSxRQUFRO0FBQUEsUUFDbkIsZ0JBQWdCO0FBQUEsVUFBSSxDQUFDLE1BQ25CSixPQUFNLFFBQVEsUUFBUSxPQUFPLEVBQUUsSUFBSTtBQUFBLFlBQ2pDLFdBQVc7QUFBQSxZQUNYLGFBQWEsRUFBRSxTQUFTLGNBQWMsT0FBTztBQUFBLFVBQy9DLENBQUM7QUFBQSxRQUNIO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxFQUNGLEdBQUcsSUFDSDtBQUVOLFFBQU0sV0FBVyxDQUFDLEdBQUcsV0FBVztBQUNoQyxRQUFNLG1CQUFtQjtBQUFBLElBQ3ZCLFNBQVMsS0FBSztBQUFBLE1BQ1o7QUFBQSxNQUNBLEdBQUcsU0FDQSxPQUFPLENBQUMsTUFBTSxFQUFFLGNBQWMsa0JBQWtCLEVBQ2hELElBQUksQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDO0FBQUEsTUFDekI7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUVBLFFBQU0sWUFBeUM7QUFBQSxJQUM3QyxTQUFTLG9CQUFvQixDQUFDO0FBQUEsRUFDaEM7QUFHQSxNQUFJLGFBQWEsbUJBQW1CO0FBQUEsSUFDbEMsVUFBVTtBQUFBLElBQ1YsT0FBTztBQUFBLElBQ1AsT0FBTztBQUFBLElBQ1AsZUFBZTtBQUFBLElBQ2YscUJBQXFCO0FBQUEsRUFDdkIsQ0FBQztBQUdELFFBQU0saUJBQWlDO0FBQUEsSUFDckM7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBLElBQUksV0FBVztBQUNiLGFBQU87QUFBQSxJQUNUO0FBQUEsRUFDRjtBQUdBLE1BQUksa0JBQWtCLEtBQUssQ0FBQyxrQkFBa0I7QUFDNUMsVUFBTSxpQkFBaUIsTUFBTTtBQUFBLE1BQzNCQSxPQUFNLFFBQVE7QUFBQSxNQUNkO0FBQUEsSUFDRjtBQUNBLFVBQU0sYUFBYSxnQkFBZ0IsU0FDL0IsTUFBTSxnQ0FBZ0M7QUFBQSxNQUNwQyxPQUFBQTtBQUFBLE1BQ0E7QUFBQSxNQUNBLFFBQVE7QUFBQSxNQUNSO0FBQUEsSUFDRixDQUFDLElBQ0QsQ0FBQztBQUNMLFFBQUksV0FBVyxTQUFTLEdBQUc7QUFDekIsWUFBTSxhQUFhLFFBQVEsS0FBSyxtQkFBbUIsRUFBRSxXQUFXLENBQUM7QUFDakUsZ0JBQVUsVUFBVSxNQUFNLHdCQUF3QjtBQUFBLFFBQ2hELE9BQUFBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsTUFDRixDQUFDO0FBQ0QsaUJBQVcsRUFBRSxPQUFPLFVBQVUsUUFBUSxPQUFPLENBQUM7QUFBQSxJQUNoRDtBQUFBLEVBQ0Y7QUFRQSxRQUFNLGFBQTBCLENBQUM7QUFDakMsTUFBSSxvQkFBb0I7QUFDeEIsTUFBSSxtQkFBaUM7QUFDckMsTUFBSSxhQUFhO0FBQ2pCLFFBQU0sc0JBQWtFLENBQUM7QUFDekUsTUFBSTtBQUVKLE1BQUk7QUFDRixhQUFTLFlBQVksR0FBRyxZQUFZLGdCQUFnQixhQUFhO0FBRS9ELFlBQU0sZ0JBQWdCLE1BQU07QUFBQSxRQUMxQkEsT0FBTSxRQUFRO0FBQUEsUUFDZDtBQUFBLE1BQ0Y7QUFDQSxZQUFNLHFCQUFxQixNQUFNO0FBQUEsUUFDL0JBLE9BQU0sUUFBUTtBQUFBLFFBQ2Q7QUFBQSxNQUNGO0FBQ0EsWUFBTSxzQkFBdUIsTUFBTTtBQUFBLFFBQ2pDQSxPQUFNLFFBQVE7QUFBQSxRQUNkO0FBQUEsTUFDRjtBQUVBLHdCQUFrQixvQkFBb0I7QUFFdEMsVUFBSSxDQUFDLGVBQWU7QUFDbEIsY0FBTSxJQUFJLE1BQU0sd0JBQXdCO0FBQUEsTUFDMUM7QUFFQSxZQUFNLFlBQWdDLENBQUM7QUFDdkMsVUFBSTtBQUVKLFVBQUk7QUFDRixjQUFNSyxjQUFTLGtDQUFzQjtBQUFBLFVBQ25DLFNBQVMsT0FBTyxFQUFFLE9BQU8sTUFBTTtBQUM3QixrQkFBTSxFQUFFLFVBQVUsd0JBQXdCLFlBQVksSUFBSSxTQUFTO0FBQUEsY0FDakUsT0FBQUw7QUFBQSxjQUNBO0FBQUEsY0FDQTtBQUFBLGNBQ0E7QUFBQSxjQUNBO0FBQUEsY0FDQTtBQUFBLGNBQ0E7QUFBQSxjQUNBO0FBQUEsY0FDQTtBQUFBLGNBQ0E7QUFBQSxjQUNBO0FBQUEsY0FDQSxVQUFVO0FBQUEsY0FDVixhQUFhO0FBQUEsWUFDZixDQUFDO0FBR0QsZ0JBQUksY0FBYyxHQUFHO0FBQ25CLG9CQUFNLGlCQUFpQjtBQUFBLGdCQUNyQjtBQUFBLGdCQUNBO0FBQUEsZ0JBQ0E7QUFBQSxnQkFDQTtBQUFBLGdCQUNBO0FBQUEsZ0JBQ0E7QUFBQSxnQkFDQSxPQUFBQTtBQUFBLGdCQUNBO0FBQUEsZ0JBQ0E7QUFBQSxnQkFDQTtBQUFBLGNBQ0YsQ0FBQztBQUFBLFlBQ0g7QUFFQSxnQ0FBb0I7QUFBQSxjQUNsQjtBQUFBLGNBQ0EsUUFBUSxFQUFFLE1BQU0sV0FBVztBQUFBLFlBQzdCLENBQUM7QUFFRCxrQkFBTSxpQkFBYSxXQUFBTSxZQUFhO0FBQUEsY0FDOUIsVUFBVSxDQUFDLEVBQUUsTUFBTSxRQUFpQixTQUFTLElBQUksQ0FBQztBQUFBLGNBQ2xELE9BQU87QUFBQSxjQUNQLE9BQU87QUFBQSxjQUNQLGFBQWEsZ0JBQWdCO0FBQUEsY0FDN0IsY0FBVSx3QkFBWSxDQUFDO0FBQUEsY0FDdkIsYUFBYSxvQkFBb0I7QUFBQSxjQUNqQyxNQUFNLG9CQUFvQjtBQUFBLGNBQzFCLE1BQU0sb0JBQW9CO0FBQUEsY0FDMUIsa0JBQWtCLG9CQUFvQjtBQUFBLGNBQ3RDLGlCQUFpQixvQkFBb0I7QUFBQSxjQUNyQyxpQkFBaUIsb0JBQW9CO0FBQUEsY0FDckMsU0FBUyxvQkFBb0I7QUFBQSxjQUM3QixzQkFBc0I7QUFBQSxnQkFDcEI7QUFBQSxnQkFDQTtBQUFBLGdCQUNBO0FBQUEsZ0JBQ0E7QUFBQSxnQkFDQSxVQUFVO0FBQUEsY0FDWjtBQUFBLGNBQ0EsYUFBYSxPQUFPLEVBQUUsTUFBTSxNQUFNO0FBQ2hDLHNCQUFNLGdCQUFnQixtQkFBbUIsVUFBVSxPQUFPO0FBQzFELHNCQUFNLFlBQVksZUFBZSxPQUFPLE1BQ3BDLDZCQUE2QixjQUFjLE1BQU0sR0FBRyx5Q0FDcEQ7QUFFSixzQkFBTSxpQkFBaUIsTUFBTTtBQUFBLGtCQUMzQk4sT0FBTSxRQUFRO0FBQUEsa0JBQ2Q7QUFBQSxnQkFDRjtBQUVBLHNCQUFNLGVBQWU7QUFBQSxrQkFDbkI7QUFBQSxrQkFDQTtBQUFBLGtCQUNBO0FBQUEsZ0JBQ0Y7QUFDQSxzQkFBTSxnQkFBZ0I7QUFBQSxrQkFDcEI7QUFBQSxrQkFDQTtBQUFBLGdCQUNGO0FBRUEsc0JBQU0sb0JBQW9CLFVBQU07QUFBQSxrQkFDOUI7QUFBQSxrQkFDQSxFQUFFLDJCQUEyQixLQUFLO0FBQUEsZ0JBQ3BDO0FBRUEsc0JBQU0sZ0JBQWdCO0FBQUEsa0JBQ3BCLEdBQUksYUFBYSxLQUFLLElBQ2xCLENBQUMsRUFBRSxNQUFNLFVBQW1CLFNBQVMsYUFBYSxDQUFDLElBQ25ELENBQUM7QUFBQSxrQkFDTCxHQUFJLGNBQWMsS0FBSyxJQUNuQixDQUFDLEVBQUUsTUFBTSxVQUFtQixTQUFTLGNBQWMsQ0FBQyxJQUNwRCxDQUFDO0FBQUEsa0JBQ0wsR0FBRztBQUFBLGdCQUNMO0FBRUEsc0JBQU0sZ0JBQWdCLGlDQUFpQztBQUFBLGtCQUNyRCxPQUFPLE9BQU8sVUFBVSxXQUFXLFFBQVEsTUFBTTtBQUFBLGtCQUNqRDtBQUFBLGtCQUNBLFVBQVU7QUFBQSxnQkFDWixDQUFDO0FBRUQsb0JBQUksY0FBYyx1QkFBdUI7QUFDekMsb0JBQUksVUFBVSxRQUFRLFdBQVcsS0FBSyxhQUFhO0FBQ2pELGdDQUFjLFlBQVk7QUFBQSxvQkFDeEIsQ0FBQyxNQUFNLE1BQU87QUFBQSxrQkFDaEI7QUFBQSxnQkFDRjtBQUVBLHVCQUFPO0FBQUEsa0JBQ0wsVUFBVSxjQUFjO0FBQUEsa0JBQ3hCLGlCQUFpQixxQkFBcUI7QUFBQSxvQkFDcEMsU0FBUyxvQkFBb0I7QUFBQSxvQkFDN0IsT0FBTyxjQUFjO0FBQUEsa0JBQ3ZCLENBQUM7QUFBQSxrQkFDRDtBQUFBLGdCQUNGO0FBQUEsY0FDRjtBQUFBLGNBQ0EsY0FBYyxDQUFDLEVBQUUsT0FBQU8sT0FBTSxNQUFNO0FBQzNCLG9CQUFJQSxRQUFPO0FBQ1QsNkJBQVcsS0FBSztBQUFBLG9CQUNkLFdBQVcsa0JBQWtCO0FBQUEsb0JBQzdCLE9BQU8saUJBQWlCO0FBQUEsb0JBQ3hCLGFBQWFBLE9BQU0sZUFBZTtBQUFBLG9CQUNsQyxjQUFjQSxPQUFNLGdCQUFnQjtBQUFBLG9CQUNwQyxhQUFhQSxPQUFNLGVBQWU7QUFBQSxvQkFDbEMsaUJBQ0VBLE9BQU0sbUJBQW1CLG1CQUFtQjtBQUFBLG9CQUM5QyxrQkFDRUEsT0FBTSxtQkFBbUIsb0JBQW9CO0FBQUEsb0JBQy9DLGlCQUNFQSxPQUFNLG9CQUFvQixtQkFBbUI7QUFBQSxrQkFDakQsQ0FBQztBQUFBLGdCQUNIO0FBQ0E7QUFBQSxjQUNGO0FBQUEsWUFDRixDQUFDO0FBRUQsbUJBQU87QUFBQSxjQUNMLFdBQVcsa0JBQWtCO0FBQUEsZ0JBQzNCLG1CQUFtQixNQUFNO0FBQUEsZ0JBQ3pCLFVBQVUsQ0FBQyxFQUFFLFNBQVMsTUFBTTtBQUMxQiw2QkFBVyxLQUFLLFVBQVU7QUFDeEIsd0JBQUksRUFBRSxTQUFTLGFBQWE7QUFDMUIsZ0NBQVUsS0FBSyxHQUFHLEVBQUUsS0FBSztBQUFBLG9CQUMzQjtBQUFBLGtCQUNGO0FBQUEsZ0JBQ0Y7QUFBQSxjQUNGLENBQUM7QUFBQSxZQUNIO0FBRUEscUNBQXlCLE1BQU0sV0FBVztBQUFBLFVBQzVDO0FBQUEsUUFDRixDQUFDO0FBRUQsY0FBTUYsUUFBTyxPQUFPLFVBQVU7QUFBQSxVQUM1QixjQUFjO0FBQUEsVUFDZCxjQUFjO0FBQUEsUUFDaEIsQ0FBQztBQUFBLE1BQ0gsU0FBUyxLQUFLO0FBQ1osWUFBSSxnQkFBZ0IsT0FBTyxTQUFTO0FBQ2xDLHVCQUFhO0FBQUEsUUFDZixPQUFPO0FBQ0wsZ0JBQU07QUFBQSxRQUNSO0FBQUEsTUFDRjtBQUVBLFVBQUksZ0JBQWdCLE9BQU8sU0FBUztBQUNsQyxxQkFBYTtBQUFBLE1BQ2Y7QUFHQSxVQUFJLFlBQVk7QUFDZCxjQUFNLGlCQUFpQixvQkFBSSxJQUFJO0FBQUEsVUFDN0I7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNGLENBQUM7QUFDRCxtQkFBVyxRQUFRLFdBQVc7QUFDNUIsY0FDRSxVQUFVLFFBQ1YsT0FBTyxLQUFLLFNBQVMsWUFDckIsS0FBSyxLQUFLLFdBQVcsT0FBTyxLQUM1QixXQUFXLFFBQ1gsQ0FBQyxlQUFlLElBQUksS0FBSyxLQUFlLEdBQ3hDO0FBQ0EsWUFBQyxLQUEyQixRQUFRO0FBQ3BDLFlBQUMsS0FBZ0MsWUFBWTtBQUFBLFVBQy9DO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFHQSxZQUFNLFdBQVcsdUJBQXVCO0FBRXhDLFlBQU0saUJBQWlCLFVBQ3BCLElBQUksQ0FBQyxRQUFRLE1BQU07QUFDbEIsY0FBTSxRQUFRLGlCQUFpQixVQUFVO0FBQ3pDLFlBQUksWUFBWSxRQUFRLFFBQVEsU0FBUyxPQUFPO0FBQzlDLGlCQUFPO0FBQUEsUUFDVDtBQUNBLGNBQU0sZ0JBQWdCLFlBQVksUUFBUSxVQUFVLFNBQVM7QUFDN0QsY0FBTSxVQUNKLGdCQUFnQixTQUFTLE9BQU87QUFFbEMsY0FBTSxTQUNKLGNBQWMsV0FBVyxRQUFRLFVBQVUsS0FDdkMsZUFBZSxRQUFRLFNBQVMsRUFBRSxJQUNsQyxRQUFRLGtCQUFrQixJQUFJLEtBQUs7QUFDekMsZUFBTztBQUFBLFVBQ0wsSUFBSTtBQUFBLFVBQ0o7QUFBQSxVQUNBLFdBQVc7QUFBQSxVQUNYO0FBQUEsVUFDQSxNQUFNO0FBQUEsUUFDUjtBQUFBLE1BQ0YsQ0FBQyxFQUNBLE9BQU8sQ0FBQyxNQUFrQyxNQUFNLElBQUk7QUFFdkQsWUFBTSxpQkFBaUIsUUFBUSxJQUFJO0FBQUEsUUFDakMsR0FBRyxlQUFlO0FBQUEsVUFBSSxDQUFDLFdBQ3JCTCxPQUFNLFFBQVEsS0FBSyxJQUFJLE9BQU8sSUFBSSxNQUFNO0FBQUEsUUFDMUM7QUFBQSxRQUNBQSxPQUFNLFFBQVEsUUFBUSxPQUFPLFdBQVcsRUFBRSxNQUFNLENBQUM7QUFBQSxNQUNuRCxDQUFDO0FBRUQsdUJBQWlCLFVBQ2YsWUFBWSxPQUNSLEtBQUs7QUFBQSxRQUNILGlCQUFpQixVQUFVLFVBQVU7QUFBQSxRQUNyQyxTQUFTLFFBQVE7QUFBQSxNQUNuQixJQUNBLGlCQUFpQixVQUFVLFVBQVU7QUFFM0MsWUFBTSx1QkFBdUIsVUFDMUI7QUFBQSxRQUNDLENBQUMsTUFDQyxXQUFXLEtBQ1gsRUFBRSxVQUFVLHdCQUNaLGNBQWMsS0FDZCxDQUFDLENBQUUsRUFBb0MsVUFBVTtBQUFBLE1BQ3JELEVBQ0MsSUFBSSxDQUFDLE9BQU87QUFBQSxRQUNYLFlBQVksRUFBRSxTQUFTO0FBQUEsUUFDdkIsVUFDRSxVQUFVLElBQUksT0FBTyxFQUFFLElBQUksRUFBRSxRQUFRLFNBQVMsRUFBRSxJQUFJO0FBQUEsTUFDeEQsRUFBRTtBQUVKLHlCQUFtQixhQUNkLFNBQ0EsMEJBQTJCO0FBR2hDLFlBQU0sY0FDSixxQkFBcUIsU0FBUyxLQUM5QixxQkFBcUIsVUFDckIsY0FDQSxZQUFZLFFBQ1gsbUJBQW1CLFFBQ2xCLGtCQUFrQixXQUFXLFVBQVUsbUJBQ3pDLGFBQWEsaUJBQWlCO0FBRWhDLFVBQUksYUFBYTtBQUNmLGNBQU07QUFDTixpQkFBUyxLQUFLLEdBQUcsY0FBYztBQUMvQiw0QkFBb0IsS0FBSyxHQUFHLG9CQUFvQjtBQUNoRDtBQUFBLE1BQ0Y7QUFHQSxZQUFNO0FBQ04sZUFBUyxLQUFLLEdBQUcsY0FBYztBQUMvQixtQkFBYSxtQkFBbUI7QUFBQSxRQUM5QixVQUFVO0FBQUEsUUFDVixPQUFPO0FBQUEsUUFDUCxPQUFPO0FBQUEsUUFDUCxlQUFlO0FBQUEsUUFDZixxQkFBcUI7QUFBQSxNQUN2QixDQUFDO0FBQUEsSUFDSDtBQUFBLEVBQ0YsVUFBRTtBQUNBLG1CQUFlLE1BQU07QUFDckIsd0JBQW9CLFFBQVE7QUFBQSxFQUM5QjtBQUVBLE1BQUksbUJBQW1CO0FBQ3JCLFVBQU07QUFBQSxFQUNSO0FBRUEsV0FBUztBQUFBLElBQ1AsY0FBYztBQUFBLElBQ2Q7QUFBQSxJQUNBLFlBQVk7QUFBQSxJQUNaLGtCQUFrQixvQkFBb0I7QUFBQSxFQUN4QyxDQUFDO0FBRUQsU0FBTztBQUFBLElBQ0wsY0FBYztBQUFBLElBQ2QsZUFBZSxpQkFBaUI7QUFBQSxJQUNoQztBQUFBLElBQ0Esa0JBQWtCO0FBQUEsSUFDbEIsVUFBVTtBQUFBLElBQ1Ysa0JBQWtCLFVBQVU7QUFBQSxJQUM1QjtBQUFBLEVBQ0Y7QUFDRjtBQU1BLGVBQXNCLGtCQUNqQixNQUNIO0FBQ0E7QUFDQSxTQUFPLE1BQU0sV0FBVyxHQUFHLElBQUk7QUFDakM7QUFNQSxlQUFlLGlCQUFpQjtBQUFBLEVBQzlCO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBLE9BQUFBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQ0YsR0FXRztBQUVELFFBQU0sZ0JBQWdCLFNBQVM7QUFBQSxJQUM3QixDQUFDLE1BQ0MsRUFBRSxRQUNGLFdBQVcsRUFBRSxRQUNaLEVBQUUsS0FBMkIsVUFBVSx3QkFDeEMsY0FBYyxFQUFFLFFBQ2YsRUFBRSxLQUE4QyxVQUFVLGFBQ3pEO0FBQUEsRUFDTjtBQUVBLE1BQUksY0FBYyxTQUFTLEdBQUc7QUFDNUIsWUFBUSxLQUFLLDRCQUE0QjtBQUFBLE1BQ3ZDLE9BQU8sY0FBYztBQUFBLElBQ3ZCLENBQUM7QUFDRCx3QkFBb0I7QUFBQSxNQUNsQjtBQUFBLE1BQ0EsUUFBUSxFQUFFLE1BQU0sdUJBQXVCO0FBQUEsSUFDekMsQ0FBQztBQUVELFVBQU0sa0JBQWtCLFVBQU07QUFBQSxNQUM1QixtQkFBbUI7QUFBQSxRQUNqQixVQUFVO0FBQUEsUUFDVixPQUFPO0FBQUEsUUFDUCxPQUFPO0FBQUEsUUFDUCxlQUFlO0FBQUEsUUFDZixxQkFBcUI7QUFBQSxNQUN2QixDQUFDO0FBQUEsTUFDRCxFQUFFLDJCQUEyQixLQUFLO0FBQUEsSUFDcEM7QUFFQSxVQUFNLFFBQVE7QUFBQSxNQUNaLGNBQWMsSUFBSSxPQUFPLE9BQU87QUFDOUIsWUFBSSxDQUFDLEdBQUcsS0FBSyxLQUFLLFdBQVcsT0FBTyxHQUFHO0FBQ3JDO0FBQUEsUUFDRjtBQUNBLGNBQU0sT0FBTyxHQUFHO0FBSWhCLGNBQU0sV0FBVyxLQUFLLEtBQUssUUFBUSxTQUFTLEVBQUU7QUFDOUMsY0FBTSxVQUFVLFNBQVMsUUFBUTtBQUVqQyxZQUFJLFNBQVMsV0FBVyxLQUFLLFVBQVUsUUFBVztBQUNoRCxjQUFJO0FBQ0Ysa0JBQU0sYUFBYSxNQUFNLFFBQVEsUUFBUSxLQUFLLE9BQU87QUFBQSxjQUNuRCxZQUFZLEtBQUs7QUFBQSxjQUNqQixVQUFVO0FBQUEsY0FDVixhQUFhLGdCQUFnQjtBQUFBLGNBQzdCLHNCQUFzQjtBQUFBLFlBQ3hCLENBQUM7QUFDRCxpQkFBSyxRQUFRO0FBQ2IsaUJBQUssU0FBUztBQUNkLG1CQUFPLE1BQU07QUFBQSxjQUNYLE1BQU07QUFBQSxjQUNOLFlBQVksS0FBSztBQUFBLGNBQ2pCLFFBQVE7QUFBQSxZQUNWLENBQUM7QUFBQSxVQUNILFNBQVMsS0FBSztBQUNaLGlCQUFLLFFBQVE7QUFDYixpQkFBSyxZQUFZLGVBQWUsUUFBUSxJQUFJLFVBQVUsT0FBTyxHQUFHO0FBQ2hFLG1CQUFPLE1BQU07QUFBQSxjQUNYLE1BQU07QUFBQSxjQUNOLFlBQVksS0FBSztBQUFBLGNBQ2pCLFdBQVcsS0FBSztBQUFBLFlBQ2xCLENBQUM7QUFBQSxVQUNIO0FBQ0EsZ0JBQU1BLE9BQU0sUUFBUSxLQUFLLElBQUksR0FBRyxJQUFJLEVBQUUsR0FBRyxJQUFJLEtBQUssQ0FBQztBQUFBLFFBQ3JEO0FBQUEsTUFDRixDQUFDO0FBQUEsSUFDSDtBQUFBLEVBQ0Y7QUFJQSxRQUFNLHVCQUF1QixTQUFTO0FBQUEsSUFDcEMsQ0FBQyxNQUFPLEVBQUUsS0FBNEIsVUFBVTtBQUFBLEVBQ2xEO0FBQ0EsTUFBSSxxQkFBcUIsU0FBUyxHQUFHO0FBQ25DLFVBQU0sUUFBUTtBQUFBLE1BQ1oscUJBQXFCLElBQUksT0FBTyxNQUFNO0FBQ3BDLGNBQU0sU0FBUztBQUFBLFVBQ2IsR0FBRztBQUFBLFVBQ0gsTUFBTTtBQUFBLFlBQ0osR0FBRyxFQUFFO0FBQUEsWUFDTCxPQUFPO0FBQUEsWUFDUCxVQUFVO0FBQUEsY0FDUixHQUFLLEVBQUUsS0FBK0IsWUFBWSxDQUFDO0FBQUEsY0FDbkQsVUFBVTtBQUFBLGNBQ1YsUUFBUTtBQUFBLFlBQ1Y7QUFBQSxVQUNGO0FBQUEsUUFDRjtBQUNBLGVBQU8sT0FBTyxHQUFHLE1BQU07QUFDdkIsY0FBTUEsT0FBTSxRQUFRLEtBQUssSUFBSSxFQUFFLElBQUksTUFBTTtBQUFBLE1BQzNDLENBQUM7QUFBQSxJQUNIO0FBQUEsRUFDRjtBQUNGO0FBSUEsU0FBUyxXQUFXO0FBQUEsRUFDbEI7QUFBQSxFQUNBO0FBQUEsRUFDQSxPQUFBQTtBQUNGLEdBSUc7QUFDRCxTQUFPLE1BQU0sRUFBRSxNQUFNLGVBQWUsTUFBTSxRQUFRLFdBQVcsS0FBSyxDQUFDO0FBQ25FLEVBQUFBLE9BQU0sT0FBTyxTQUFTLE1BQU07QUFDOUI7QUFFQSxJQUFNLHFCQUFxQjtBQUUzQixTQUFTLDBCQUEwQkEsUUFBaUI7QUFDbEQsTUFBSSxRQUE4QztBQUNsRCxNQUFJLFVBR087QUFFWCxXQUFTLFVBQVU7QUFBQSxJQUNqQjtBQUFBLElBQ0E7QUFBQSxFQUNGLEdBR0c7QUFDRCxjQUFVLEVBQUUsUUFBUSxPQUFPO0FBQzNCLFFBQUksVUFBVSxNQUFNO0FBQ2xCO0FBQUEsSUFDRjtBQUNBLFVBQU07QUFDTixZQUFRLFdBQVcsTUFBTTtBQUN2QixjQUFRO0FBQ1IsVUFBSSxTQUFTO0FBQ1gsY0FBTTtBQUFBLE1BQ1I7QUFBQSxJQUNGLEdBQUcsa0JBQWtCO0FBQUEsRUFDdkI7QUFFQSxXQUFTLFFBQVE7QUFDZixRQUFJLENBQUMsU0FBUztBQUNaO0FBQUEsSUFDRjtBQUNBLFVBQU0sRUFBRSxRQUFRLE9BQU8sSUFBSTtBQUMzQixjQUFVO0FBQ1YsZUFBVyxFQUFFLFFBQVEsUUFBUSxPQUFBQSxPQUFNLENBQUM7QUFBQSxFQUN0QztBQUVBLFlBQVUsVUFBVSxNQUFNO0FBQ3hCLFFBQUksVUFBVSxNQUFNO0FBQ2xCLG1CQUFhLEtBQUs7QUFDbEIsY0FBUTtBQUFBLElBQ1Y7QUFDQSxVQUFNO0FBQUEsRUFDUjtBQUVBLFNBQU87QUFDVDtBQUVBLGVBQWUsY0FDYixPQUNBLE1BQ3dCO0FBQ3hCLE1BQUksVUFBVSxRQUFXO0FBQ3ZCLFdBQU87QUFBQSxFQUNUO0FBQ0EsTUFBSSxPQUFPLFVBQVUsWUFBWTtBQUMvQixXQUFPLE1BQU8sTUFBbUQsSUFBSTtBQUFBLEVBQ3ZFO0FBQ0EsU0FBTztBQUNUO0FBRUEsZUFBZSxjQUNiLE9BQ0EsTUFDd0I7QUFDeEIsUUFBTSxTQUFTLE1BQU0sY0FBYyxPQUFPLElBQUk7QUFDOUMsTUFBSSxDQUFDLFFBQVE7QUFDWCxXQUFPO0FBQUEsRUFDVDtBQUNBLFNBQU8sTUFBTSxRQUFRLE1BQU0sSUFBSSxPQUFPLE9BQU8sT0FBTyxFQUFFLEtBQUssSUFBSSxJQUFJO0FBQ3JFO0FBRUEsSUFBTSxxQkFDSjtBQUVGLFNBQVMsc0JBQ0osVUFDSztBQUNSLFNBQU8sU0FBUyxPQUFPLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxFQUFFLEtBQUssTUFBTTtBQUN0RDtBQUVBLElBQU0sMEJBQTBCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWdCaEMsU0FBUyxtQkFBbUIsUUFBZ0M7QUFDMUQsTUFBSSxPQUFPLFdBQVcsR0FBRztBQUN2QixXQUFPO0FBQUEsRUFDVDtBQUVBLFFBQU0sYUFBYSxPQUNoQixJQUFJLENBQUMsTUFBTSxLQUFLLEVBQUUsSUFBSSxLQUFLLEVBQUUsV0FBVyxFQUFFLEVBQzFDLEtBQUssSUFBSTtBQUVaLFNBQU87QUFBQSxFQUNQLFVBQVU7QUFBQTtBQUFBLEVBRVYsdUJBQXVCO0FBQUE7QUFBQTtBQUd6Qjs7O0FEbjJCQSxJQUFNLDBCQUEwQjtBQThDaEMsSUFBTSxrQkFBa0IsdUJBQU8sSUFBSSwrQkFBK0I7QUFFM0QsU0FBUyxnQkFBd0M7QUFDdEQsUUFBTSxJQUFJO0FBQ1YsTUFBSSxDQUFDLEVBQUUsZUFBZSxHQUFHO0FBQ3ZCLE1BQUUsZUFBZSxJQUFJLG9CQUFJLElBQUk7QUFBQSxFQUMvQjtBQUNBLFNBQU8sRUFBRSxlQUFlO0FBQzFCO0FBRUEsZUFBc0IsS0FNcEIsZ0JBQ0EsT0FHQSxNQUNxQjtBQUNyQixNQUFJLE1BQU0sc0JBQXNCO0FBQzlCLFVBQU0sV0FDSixPQUFPLEtBQUsseUJBQXlCLFdBQ2pDLEtBQUsscUJBQXFCLFdBQzFCO0FBQ04sVUFBTSxVQUFVLGdCQUFnQixFQUFFLFNBQVMsQ0FBQztBQUFBLEVBQzlDO0FBRUEsUUFBTTtBQUFBLElBQ0o7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLEVBQ0YsSUFBSSxNQUFhLGlCQUFTO0FBQUEsSUFDeEIsS0FBSyxNQUNILGdCQUF1QjtBQUFBLE1BQ3JCO0FBQUEsTUFDQSxXQUFXLGVBQWU7QUFBQSxNQUMxQixXQUFXLE1BQU07QUFBQSxNQUNqQixjQUFjLE1BQU07QUFBQSxNQUNwQjtBQUFBLElBQ0YsQ0FBQztBQUFBLElBQ0gsT0FBTyxDQUFDLE1BQU07QUFDWixVQUFJLGFBQWEsT0FBTztBQUN0QixjQUFNO0FBQUEsTUFDUjtBQUNBLFlBQU0sSUFBSSxVQUFVO0FBQUEsUUFDbEIsSUFBSSxlQUFlO0FBQUEsUUFDbkIsUUFBUSxPQUFPLENBQUM7QUFBQSxRQUNoQixPQUFPO0FBQUEsTUFDVCxDQUFDO0FBQUEsSUFDSDtBQUFBLEVBQ0YsQ0FBQztBQUVELFFBQU0sV0FBVztBQUFBLElBQ2Y7QUFBQSxJQUNBO0FBQUEsSUFDQSxXQUFXO0FBQUEsSUFDWCxTQUFVLE1BQU0sV0FBVyxDQUFDO0FBQUEsSUFDNUI7QUFBQSxJQUNBLGVBQWU7QUFBQSxJQUNmO0FBQUEsRUFDRjtBQUVBLE1BQUksa0JBQWtCO0FBQ3BCLFVBQU0sUUFBZSxFQUFFLEdBQUcsVUFBVSxVQUFVLGlCQUFpQixDQUFDO0FBQ2hFLFdBQU8sRUFBRSxvQkFBb0IsTUFBTSxLQUFLO0FBQUEsRUFDMUM7QUFFQSxRQUFNLFNBQTJCLENBQUM7QUFDbEMsTUFBSTtBQUNKLE1BQUksVUFBVSxJQUFJLFFBQWMsQ0FBQyxNQUFNO0FBQ3JDLGtCQUFjO0FBQUEsRUFDaEIsQ0FBQztBQUVELFFBQU0sV0FBVyxJQUFJLGVBQStCO0FBQUEsSUFDbEQsTUFBTSxPQUFPO0FBQ1gsYUFBTyxLQUFLLEtBQUs7QUFDakIsWUFBTSxPQUFPO0FBQ2IsZ0JBQVUsSUFBSSxRQUFjLENBQUMsTUFBTTtBQUNqQyxzQkFBYztBQUFBLE1BQ2hCLENBQUM7QUFDRCxXQUFLO0FBQUEsSUFDUDtBQUFBLEVBQ0YsQ0FBQztBQUVELFFBQU0sT0FBTyxRQUFlLEVBQUUsR0FBRyxVQUFVLFNBQVMsQ0FBQztBQUVyRCxRQUFNLFlBQXVCO0FBQUEsSUFDM0I7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0EsSUFBSSxVQUFVO0FBQ1osYUFBTztBQUFBLElBQ1Q7QUFBQSxFQUNGO0FBQ0EsUUFBTSxhQUFhLGNBQWM7QUFDakMsYUFBVyxJQUFJLG9CQUFvQixTQUFTO0FBQzVDLE9BQUssUUFBUSxNQUFNLFdBQVcsT0FBTyxrQkFBa0IsQ0FBQztBQUV4RCxTQUFPLEVBQUUsb0JBQW9CLE1BQU0sS0FBSyxLQUFLLE1BQU0sSUFBSSxFQUFFO0FBQzNEO0FBTUEsZUFBZSxRQUErQjtBQUFBLEVBQzVDO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQSxTQUFTO0FBQUEsRUFDVDtBQUFBLEVBQ0E7QUFBQSxFQUNBLGVBQWU7QUFDakIsR0FTa0I7QUFDaEIsUUFBTVEsU0FBUSxlQUFlO0FBRTdCLFFBQU1DLE9BQU0sYUFBYTtBQUFBLElBQ3ZCLFFBQVEsRUFBRSxHQUFHRCxPQUFNLFFBQVEsU0FBUyxNQUFNQSxPQUFNLEtBQUs7QUFBQSxJQUNyRCxXQUFXO0FBQUEsRUFDYixDQUFDO0FBQ0QsUUFBTSxTQUFTQyxLQUFJLFlBQVk7QUFBQSxJQUM3QixXQUFXLGVBQWU7QUFBQSxJQUMxQixXQUFXO0FBQUEsRUFDYixDQUFDO0FBQ0QsUUFBTSxjQUFjLE9BQU8sS0FBSyxXQUFXO0FBRTNDLE1BQUk7QUFDSixNQUFJLGdCQUFnQjtBQUNwQixRQUFNLGFBQTBCLENBQUM7QUFDakMsTUFBSSxtQkFBMEM7QUFDOUMsTUFBSSxVQUFVO0FBRWQsTUFBSTtBQUNGLFdBQU8saUJBQWlCLFFBQVE7QUFDOUIsWUFBTSxlQUFlLGdCQUNqQixpQkFDQTtBQUNKLFlBQU0sYUFBYSxnQkFBZ0IsSUFBSTtBQUV2QyxZQUFNLFNBQTJCLE1BQU0sYUFBYTtBQUFBLFFBQ2xELGdCQUFnQjtBQUFBLFFBQ2hCO0FBQUEsUUFDQSxPQUFBRDtBQUFBLFFBQ0EsV0FBVyxlQUFlO0FBQUEsUUFDMUI7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQSxpQkFBaUIsV0FBVztBQUFBLFFBQzVCO0FBQUEsTUFDRixDQUFDO0FBRUQscUJBQWUsT0FBTztBQUN0QixzQkFBZ0IsT0FBTztBQUN2QixpQkFBVyxLQUFLLEdBQUcsT0FBTyxVQUFVO0FBQ3BDLHlCQUFtQixPQUFPO0FBQzFCLGdCQUFVLE9BQU87QUFFakIsVUFBSSxPQUFPLFlBQVksUUFBUSxXQUFXLFVBQVUsT0FBTyxVQUFVO0FBQ25FLGVBQU8sS0FBSywwQkFBMEIsRUFBRSxVQUFVLE9BQU8sU0FBUyxDQUFDO0FBQ25FO0FBQUEsTUFDRjtBQUVBLFVBQUksT0FBTyxpQkFBaUIsU0FBUyxHQUFHO0FBQ3RDLGVBQU8sS0FBSyxvQ0FBb0M7QUFBQSxVQUM5QyxPQUFPLE9BQU8saUJBQWlCO0FBQUEsVUFDL0IsT0FBTyxPQUFPLGlCQUFpQixJQUFJLENBQUMsTUFBTSxFQUFFLFFBQVE7QUFBQSxRQUN0RCxDQUFDO0FBQ0Q7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUVBLGdCQUFZLEVBQUUsWUFBWSxXQUFXLE9BQU8sQ0FBQztBQUFBLEVBQy9DLFNBQVMsS0FBSztBQUNaLFdBQU8sTUFBTSxrQkFBa0I7QUFBQSxNQUM3QixPQUFPLGVBQWUsUUFBUSxJQUFJLFVBQVUsT0FBTyxHQUFHO0FBQUEsSUFDeEQsQ0FBQztBQUNELFVBQU07QUFBQSxFQUNSLFVBQUU7QUFDQSxVQUFNLG9CQUFvQjtBQUFBLE1BQ3hCO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsSUFDRixDQUFDO0FBQUEsRUFDSDtBQUNGO0FBTUEsZUFBZSxnQkFBdUM7QUFBQSxFQUNwRDtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFDRixHQU1HO0FBQ0Q7QUFFQSxNQUFJO0FBQ0osTUFBSTtBQUNKLE1BQUk7QUFDRixVQUFNLEVBQUUscUJBQXFCLFlBQVksSUFBSSxNQUFNLE9BQU8sVUFBVTtBQUNwRSxvQkFBZ0Isb0JBQW9CLEVBQUU7QUFDdEMsdUJBQW1CLFlBQVk7QUFBQSxFQUNqQyxRQUFRO0FBQUEsRUFFUjtBQUVBLFFBQU0sY0FBeUIsQ0FBQztBQUNoQyxRQUFNLFdBQW1CLENBQUM7QUFDMUIsUUFBTSxlQUErQixDQUFDO0FBQ3RDLE1BQUksTUFBTSxRQUFRLEtBQUssR0FBRztBQUN4QixlQUFXLEtBQUssT0FBTztBQUNyQixZQUFNLEVBQUUsU0FBUyxPQUFPLFVBQVUsSUFBSSxrQkFBa0I7QUFBQSxRQUN0RCxXQUFXLGVBQWU7QUFBQSxRQUMxQixPQUFPO0FBQUEsUUFDUCxhQUFhO0FBQUEsTUFDZixDQUFDO0FBQ0QsVUFBSSxTQUFTO0FBQ1gsb0JBQVksS0FBSyxPQUFPO0FBQUEsTUFDMUI7QUFDQSxlQUFTLEtBQUssR0FBRyxLQUFLO0FBQ3RCLG1CQUFhLEtBQUssR0FBRyxTQUFTO0FBQUEsSUFDaEM7QUFBQSxFQUNGLE9BQU87QUFDTCxVQUFNLEVBQUUsU0FBUyxPQUFPLFVBQVUsSUFBSSxrQkFBa0I7QUFBQSxNQUN0RDtBQUFBLE1BQ0EsV0FBVyxlQUFlO0FBQUEsTUFDMUIsYUFBYTtBQUFBLElBQ2YsQ0FBQztBQUNELFFBQUksU0FBUztBQUNYLGtCQUFZLEtBQUssT0FBTztBQUFBLElBQzFCO0FBQ0EsYUFBUyxLQUFLLEdBQUcsS0FBSztBQUN0QixpQkFBYSxLQUFLLEdBQUcsU0FBUztBQUFBLEVBQ2hDO0FBRUEsUUFBTSxpQkFBaUIsWUFBWSxHQUFHLEVBQUU7QUFDeEMsUUFBTSxpQkFBaUIsZ0JBQWdCLFNBQVM7QUFFaEQsUUFBTSxxQkFBcUIsaUJBQ3ZCLGVBQWUsS0FDZixlQUFXLG1CQUFLLENBQUM7QUFDckIsUUFBTSxXQUFXLEtBQUssSUFBSTtBQUMxQixRQUFNLDRCQUE0QixXQUFXLFlBQVk7QUFFekQsTUFBSSxDQUFDLGdCQUFnQjtBQUNuQixnQkFBWSxLQUFLO0FBQUEsTUFDZixJQUFJO0FBQUEsTUFDSixXQUFXLGVBQWU7QUFBQSxNQUMxQixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWCxXQUFXO0FBQUEsTUFDWCxhQUFhO0FBQUEsTUFDYixlQUFlO0FBQUEsTUFDZixxQkFBcUI7QUFBQSxNQUNyQixPQUFPO0FBQUEsTUFDUCxlQUFlO0FBQUEsTUFDZixVQUFVO0FBQUEsSUFDWixDQUFDO0FBQUEsRUFDSDtBQUVBLFFBQU0sb0JBQW9CLGlCQUN0QixTQUFTLE9BQU8sQ0FBQyxNQUFNLEVBQUUsY0FBYyxrQkFBa0IsRUFBRSxTQUMzRDtBQUVKLE1BQUksVUFBVSxNQUFNLGVBQWUsTUFBTSxRQUFRLFFBQVEsSUFBSSxTQUFTO0FBQ3RFLFFBQU0sTUFBTSxLQUFLLElBQUk7QUFDckIsTUFBSSxDQUFDLFNBQVM7QUFDWixjQUFVO0FBQUEsTUFDUixJQUFJO0FBQUEsTUFDSixXQUFXLGFBQWE7QUFBQSxNQUN4QixlQUFlO0FBQUEsTUFDZixXQUFXO0FBQUEsTUFDWCxXQUFXO0FBQUEsSUFDYjtBQUNBLFVBQU0sZUFBZSxNQUFNLFFBQVEsUUFBUSxJQUFJLFFBQVEsSUFBSSxPQUFPO0FBQUEsRUFDcEUsV0FBVyxhQUFhLGNBQWMsUUFBUSxXQUFXO0FBQ3ZELGNBQVUsRUFBRSxHQUFHLFNBQVMsV0FBVyxXQUFXLElBQUk7QUFDbEQsVUFBTSxlQUFlLE1BQU0sUUFBUSxRQUFRLE9BQU8sUUFBUSxJQUFJO0FBQUEsTUFDNUQ7QUFBQSxJQUNGLENBQUM7QUFBQSxFQUNIO0FBRUEsWUFBTSx1QkFBSTtBQUFBLElBQ1IsTUFBTSxlQUFlO0FBQ25CLFlBQU0sUUFBUTtBQUFBLFFBQ1osWUFBWSxJQUFJLE9BQU8sR0FBRyxNQUFNO0FBQzlCLGdCQUFNLFdBQVcsTUFBTSxlQUFlLE1BQU0sUUFBUSxRQUFRLElBQUksRUFBRSxFQUFFO0FBQ3BFLGNBQUksVUFBVTtBQUNaO0FBQUEsVUFDRjtBQUNBLGdCQUFNLGVBQWUsTUFBTSxRQUFRLFFBQVEsSUFBSSxFQUFFLElBQUk7QUFBQSxZQUNuRCxHQUFHO0FBQUEsWUFDSCxXQUFXLFdBQVc7QUFBQSxZQUN0QixlQUNFLEVBQUUsT0FBTyxxQkFDSixpQkFBaUIsT0FDbEIsRUFBRTtBQUFBLFVBQ1YsQ0FBQztBQUFBLFFBQ0gsQ0FBQztBQUFBLE1BQ0g7QUFBQSxJQUNGO0FBQUEsSUFDQSxNQUFNLFlBQVk7QUFDaEIsWUFBTSxRQUFRO0FBQUEsUUFDWixTQUFTO0FBQUEsVUFBSSxPQUFPLE1BQ2xCLGVBQWUsTUFBTSxRQUFRLEtBQUssSUFBSSxFQUFFLElBQUksQ0FBQztBQUFBLFFBQy9DO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxJQUNBLE1BQU0sbUJBQW1CO0FBQ3ZCLFlBQU0sUUFBUTtBQUFBLFFBQ1osYUFBYSxJQUFJLE9BQU8sTUFBTTtBQUM1QixnQkFBTSxTQUFTLGVBQWUsRUFBRSxVQUFVO0FBQzFDLGdCQUFNLE9BQU8sTUFBTSxlQUFlLE1BQU0sUUFBUSxLQUFLLElBQUksTUFBTTtBQUMvRCxjQUFJLENBQUMsTUFBTTtBQUNULGtCQUFNLElBQUksc0JBQXNCO0FBQUEsY0FDOUIsSUFBSSxlQUFlO0FBQUEsY0FDbkIsWUFBWSxFQUFFO0FBQUEsWUFDaEIsQ0FBQztBQUFBLFVBQ0g7QUFDQSxnQkFBTSxlQUFlLE1BQU0sUUFBUSxLQUFLLElBQUksUUFBUTtBQUFBLFlBQ2xELEdBQUc7QUFBQSxZQUNILE1BQU07QUFBQSxjQUNKLEdBQUcsS0FBSztBQUFBLGNBQ1IsT0FBTyxFQUFFLFdBQVcsdUJBQXVCO0FBQUEsY0FDM0MsVUFBVTtBQUFBLGdCQUNSLElBQUksRUFBRTtBQUFBLGdCQUNOLFVBQVUsRUFBRTtBQUFBLGdCQUNaLFFBQVEsRUFBRTtBQUFBLGNBQ1o7QUFBQSxZQUNGO0FBQUEsVUFDRixDQUFDO0FBQUEsUUFDSCxDQUFDO0FBQUEsTUFDSDtBQUFBLElBQ0Y7QUFBQSxJQUNBLE1BQU0sZ0JBQWdCO0FBQ3BCLFlBQU0sZUFBZSxNQUFNLFFBQVEsUUFBUSxJQUFJLFFBQVEsSUFBSTtBQUFBLFFBQ3pELEdBQUc7QUFBQSxRQUNILGVBQWU7QUFBQSxRQUNmLFdBQVcsS0FBSyxJQUFJO0FBQUEsTUFDdEIsQ0FBQztBQUFBLElBQ0g7QUFBQSxFQUNGLENBQUM7QUFFRCxRQUFNLFFBQWlDLFFBQVEsUUFDM0MsRUFBRSxHQUFHLFFBQVEsTUFBTSxJQUNuQixFQUFFLEdBQUksZ0JBQWdCLENBQUMsRUFBRztBQUU5QixTQUFPO0FBQUEsSUFDTDtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsRUFDRjtBQUNGO0FBRUEsZUFBZSxvQkFBb0I7QUFBQSxFQUNqQztBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUNGLEdBS0c7QUFDRDtBQUVBLFFBQU1DLE9BQU0sYUFBYTtBQUFBLElBQ3ZCLFFBQVE7QUFBQSxNQUNOLEdBQUcsZUFBZSxNQUFNLFFBQVE7QUFBQSxNQUNoQyxNQUFNLGVBQWUsTUFBTTtBQUFBLElBQzdCO0FBQUEsSUFDQSxXQUFXO0FBQUEsRUFDYixDQUFDO0FBQ0QsUUFBTSxTQUFTQSxLQUFJLFlBQVk7QUFBQSxJQUM3QixXQUFXLGVBQWU7QUFBQSxJQUMxQixXQUFXO0FBQUEsRUFDYixDQUFDO0FBRUQsUUFBTUMsU0FDSixXQUFXLFNBQVMsSUFDaEI7QUFBQSxJQUNFLE9BQU87QUFBQSxJQUNQLFNBQVM7QUFBQSxNQUNQLE9BQU8sV0FBVyxDQUFDLEdBQUcsU0FBUztBQUFBLE1BQy9CLGFBQWEsV0FBVyxPQUFPLENBQUMsR0FBRyxNQUFNLElBQUksRUFBRSxhQUFhLENBQUM7QUFBQSxNQUM3RCxjQUFjLFdBQVcsT0FBTyxDQUFDLEdBQUcsTUFBTSxJQUFJLEVBQUUsY0FBYyxDQUFDO0FBQUEsTUFDL0QsYUFBYSxXQUFXLE9BQU8sQ0FBQyxHQUFHLE1BQU0sSUFBSSxFQUFFLGFBQWEsQ0FBQztBQUFBLE1BQzdELGlCQUFpQixXQUFXO0FBQUEsUUFDMUIsQ0FBQyxHQUFHLE1BQU0sSUFBSSxFQUFFO0FBQUEsUUFDaEI7QUFBQSxNQUNGO0FBQUEsTUFDQSxrQkFBa0IsV0FBVztBQUFBLFFBQzNCLENBQUMsR0FBRyxNQUFNLElBQUksRUFBRTtBQUFBLFFBQ2hCO0FBQUEsTUFDRjtBQUFBLE1BQ0EsaUJBQWlCLFdBQVc7QUFBQSxRQUMxQixDQUFDLEdBQUcsTUFBTSxJQUFJLEVBQUU7QUFBQSxRQUNoQjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLFdBQVcsV0FBVztBQUFBLElBQ3hCO0FBQUEsRUFDRixJQUNBO0FBRU4sUUFBTSxRQUFRLElBQUk7QUFBQSxJQUNoQixlQUFlLE1BQU0sUUFBUSxRQUFRLE9BQU8sb0JBQW9CO0FBQUEsTUFDOUQsYUFBYSxLQUFLLElBQUk7QUFBQSxNQUN0QixPQUFBQTtBQUFBLElBQ0YsQ0FBQztBQUFBLElBQ0QsU0FBUyxNQUFNLEVBQUUsTUFBTSxNQUFNLE1BQVM7QUFBQSxFQUN4QyxDQUFDO0FBRUQsU0FBTyxLQUFLLHFCQUFxQjtBQUFBLElBQy9CLE9BQU8sV0FBVztBQUFBLElBQ2xCLGFBQWFBLFFBQU8sUUFBUTtBQUFBLEVBQzlCLENBQUM7QUFDSDtBQU1PLFNBQVMsZUFBZSxZQUE0QjtBQUN6RCxTQUFPLFFBQVEsVUFBVTtBQUMzQjtBQUVPLFNBQVMsZ0JBQ2QsUUFDQSxhQUFhLEdBQ21CO0FBQ2hDLE1BQUksU0FBUztBQUNiLE1BQUksWUFBWTtBQUVoQixTQUFPLElBQUksZUFBK0I7QUFBQSxJQUN4QyxNQUFNLEtBQUssWUFBWTtBQUVyQixhQUFPLFNBQVMsT0FBTyxPQUFPLFFBQVE7QUFDcEMsbUJBQVcsUUFBUSxPQUFPLE9BQU8sUUFBUSxDQUFDO0FBQUEsTUFDNUM7QUFHQSxhQUFPLENBQUMsYUFBYSxVQUFVLE9BQU8sT0FBTyxRQUFRO0FBQ25ELGNBQU0sU0FBUyxNQUFNLFFBQVEsS0FBSztBQUFBLFVBQ2hDLE9BQU8sUUFBUSxLQUFLLE1BQU0sT0FBZ0I7QUFBQSxVQUMxQyxPQUFPLEtBQUssS0FBSyxNQUFNLE1BQWU7QUFBQSxRQUN4QyxDQUFDO0FBR0QsZUFBTyxTQUFTLE9BQU8sT0FBTyxRQUFRO0FBQ3BDLHFCQUFXLFFBQVEsT0FBTyxPQUFPLFFBQVEsQ0FBQztBQUFBLFFBQzVDO0FBRUEsWUFBSSxXQUFXLFFBQVE7QUFDckIscUJBQVcsTUFBTTtBQUNqQjtBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUFBLElBQ0EsU0FBUztBQUNQLGtCQUFZO0FBQUEsSUFDZDtBQUFBLEVBQ0YsQ0FBQztBQUNIO0FBRUEsU0FBUyxrQkFBeUM7QUFBQSxFQUNoRDtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUNGLEdBU0U7QUFDQSxNQUFJLFlBQVksTUFBTSxlQUFXLG1CQUFLLENBQUM7QUFDdkMsTUFBSSxPQUFPLFVBQVUsVUFBVTtBQUM3QixVQUFNQyxPQUFNLEtBQUssSUFBSTtBQUNyQixXQUFPO0FBQUEsTUFDTCxXQUFXLENBQUM7QUFBQSxNQUNaLFNBQVM7QUFBQSxRQUNQLElBQUk7QUFBQSxRQUNKO0FBQUEsUUFDQSxNQUFNO0FBQUEsUUFDTixXQUFXQTtBQUFBLFFBQ1gsV0FBVztBQUFBLFFBQ1gsYUFBYTtBQUFBLFFBQ2IsZUFBZTtBQUFBLFFBQ2YscUJBQXFCO0FBQUEsUUFDckIsT0FBTztBQUFBLFFBQ1AsZUFBZTtBQUFBLFFBQ2YsVUFBVTtBQUFBLE1BQ1o7QUFBQSxNQUNBLE9BQU87QUFBQSxRQUNMO0FBQUEsVUFDRTtBQUFBLFVBQ0E7QUFBQSxVQUNBLElBQUksUUFBUSxTQUFTO0FBQUEsVUFDckIsT0FBTztBQUFBLFVBQ1AsTUFBTSxFQUFFLE1BQU0sUUFBUSxNQUFNLE1BQU07QUFBQSxRQUNwQztBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUNBLE1BQUksVUFBVSxTQUFTLE1BQU0sU0FBUyxZQUFZO0FBQ2hELFdBQU87QUFBQSxNQUNMLFNBQVM7QUFBQSxNQUNULE9BQU8sQ0FBQztBQUFBLE1BQ1IsV0FBVyxDQUFDLE1BQU0sUUFBUTtBQUFBLElBQzVCO0FBQUEsRUFDRjtBQUVBLFFBQU0sTUFDSixVQUFVLFNBQVMsTUFBTSxTQUFTLFlBQVksTUFBTSxVQUFVO0FBQ2hFLE1BQUksUUFBUSxPQUFPLElBQUksSUFBSTtBQUN6QixnQkFBWSxJQUFJO0FBQUEsRUFDbEI7QUFFQSxRQUFNLE1BQU0sS0FBSyxJQUFJO0FBQ3JCLFFBQU0sV0FDSixjQUFjLE9BQU8sSUFBSSxZQUFZLE9BQ2hDLElBQUksV0FDTDtBQUNOLFNBQU87QUFBQSxJQUNMLFdBQVcsQ0FBQztBQUFBLElBQ1osU0FBUztBQUFBLE1BQ1A7QUFBQSxNQUNBLElBQUk7QUFBQSxNQUNKLFdBQVc7QUFBQSxNQUNYLFdBQVc7QUFBQSxNQUNYLGFBQWE7QUFBQSxNQUNiLGVBQWU7QUFBQSxNQUNmLHFCQUFxQjtBQUFBLE1BQ3JCLE9BQU87QUFBQSxNQUNQLGVBQWU7QUFBQSxNQUNmLE1BQU0sSUFBSSxRQUFRO0FBQUEsTUFDbEI7QUFBQSxJQUNGO0FBQUEsSUFDQSxPQUFPLElBQUksTUFBTSxJQUFJLENBQUMsTUFBTSxVQUFVO0FBQ3BDLFlBQU0sS0FBSztBQUNYLFlBQU1DLE1BQUssR0FBRyxVQUFVLEtBQ3BCLGVBQWUsR0FBRyxTQUFTLEVBQUUsSUFDN0IsUUFBUSxTQUFTLElBQUksS0FBSztBQUM5QixhQUFPLEVBQUUsV0FBVyxXQUFXLElBQUFBLEtBQUksT0FBTyxLQUFLO0FBQUEsSUFDakQsQ0FBQztBQUFBLEVBQ0g7QUFDRjtBQU1PLElBQU0sWUFBTixjQUErQiwwQkFBa0I7QUFBQSxFQUN0RCxNQUFNO0FBQUEsRUFDTixTQUFTO0FBQ1gsQ0FBQyxFQUFFO0FBQUM7QUFFRyxJQUFNLHdCQUFOLGNBQTJDLDBCQUFrQjtBQUFBLEVBQ2xFLE1BQU07QUFBQSxFQUNOLFNBQVM7QUFDWCxDQUFDLEVBQUU7QUFBQzs7O0FhbHBCSixJQUFBQyxVQUF3QjtBQWN4QixTQUFTLGNBQWMsS0FBc0M7QUFDM0QsU0FDRSxPQUFPLFFBQVEsWUFDZixRQUFRLFFBQ1IsaUJBQWlCLE9BQ2pCLE9BQVEsSUFBd0IsZ0JBQWdCO0FBRXBEO0FBRUEsZUFBc0IsT0FDcEIsZ0JBQ0EsV0FDeUM7QUFDekMsTUFBSSxjQUFjLFNBQVMsR0FBRztBQUM1QixVQUFNLFNBQVMsVUFBVSxZQUFZLEVBQUUsVUFBVTtBQUVqRCxVQUFNLE9BQU8sS0FBSyxFQUFFLE1BQU0sTUFBTTtBQUM5QixZQUFNLElBQUksWUFBWTtBQUFBLFFBQ3BCLElBQUksZUFBZTtBQUFBLFFBQ25CLFFBQVE7QUFBQSxNQUNWLENBQUM7QUFBQSxJQUNILENBQUM7QUFDRCxXQUFPLE9BQU87QUFFZCxXQUFPLFVBQVUsWUFBWTtBQUFBLEVBQy9CO0FBRUEsUUFBTSxPQUFPO0FBQ2IsUUFBTSxVQUFVLE1BQU0sZUFBZSxNQUFNLFFBQVEsUUFBUTtBQUFBLElBQ3pELGVBQWU7QUFBQSxFQUNqQjtBQUNBLE1BQUksQ0FBQyxTQUFTO0FBQ1osVUFBTSxJQUFJLHFCQUFxQixFQUFFLElBQUksZUFBZSxVQUFVLENBQUM7QUFBQSxFQUNqRTtBQUNBLFFBQU0sWUFBWSxNQUFNLGFBQWEsUUFBUTtBQUM3QyxNQUFJLENBQUMsV0FBVztBQUNkLFVBQU0sSUFBSSxZQUFZO0FBQUEsTUFDcEIsSUFBSSxlQUFlO0FBQUEsTUFDbkIsUUFBUTtBQUFBLElBQ1YsQ0FBQztBQUFBLEVBQ0g7QUFFQSxRQUFNLGFBQWEsY0FBYztBQUNqQyxRQUFNLFNBQVMsV0FBVyxJQUFJLFNBQVM7QUFDdkMsTUFBSSxDQUFDLFFBQVE7QUFDWCxVQUFNLFVBQVUsTUFBTSxlQUFlLE1BQU0sUUFBUSxRQUFRLElBQUksU0FBUztBQUN4RSxRQUFJLFNBQVMsZUFBZTtBQUMxQixZQUFNLFdBQVcsTUFBTSxPQUFPLGNBQWMsRUFDekMsS0FBSyxDQUFDLEVBQUUsT0FBTyxNQUFNLE9BQU8sUUFBUSxhQUFjLEVBQUUsWUFBWSxDQUFDLEVBQ2pFLE1BQU0sTUFBTSxNQUFTO0FBQ3hCLFVBQUksVUFBVTtBQUNaLGVBQU87QUFBQSxNQUNUO0FBQUEsSUFDRjtBQUVBLFVBQU0sSUFBSSxZQUFZO0FBQUEsTUFDcEIsSUFBSSxlQUFlO0FBQUEsTUFDbkIsUUFBUSw2QkFBNkIsU0FBUztBQUFBLElBQ2hELENBQUM7QUFBQSxFQUNIO0FBRUEsU0FBTyxnQkFBZ0IsUUFBUSxNQUFNLFVBQVU7QUFDakQ7QUFNTyxJQUFNLGNBQU4sY0FBaUMsMEJBQWtCO0FBQUEsRUFDeEQsTUFBTTtBQUFBLEVBQ04sU0FBUztBQUNYLENBQUMsRUFBRTtBQUFDOzs7QUM3RUosZUFBc0IsT0FHcEIsZ0JBQ0EsTUFDQTtBQUNBO0FBQ0EsUUFBTSxVQUFVLE9BQU87QUFBQSxJQUNyQixPQUFPLFFBQVEsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDLEVBQUUsS0FBSyxNQUFNLFVBQVUsTUFBUztBQUFBLEVBQ2hFO0FBRUEsTUFBSSxPQUFPLEtBQUssT0FBTyxFQUFFLFdBQVcsR0FBRztBQUNyQztBQUFBLEVBQ0Y7QUFFQSxRQUFNLGVBQWUsTUFBTSxRQUFRLFFBQVEsT0FBTyxlQUFlLFdBQVc7QUFBQSxJQUMxRSxHQUFHO0FBQUEsSUFDSCxXQUFXLEtBQUssSUFBSTtBQUFBLEVBQ3RCLENBQUM7QUFDSDs7O0FDekJBLGVBQXNCLE1BQ3BCLGdCQUN1QjtBQUN2QjtBQUNBLFFBQU0sV0FBVyxNQUFNLGVBQWUsTUFBTSxRQUFRLFFBQVE7QUFBQSxJQUMxRCxlQUFlO0FBQUEsRUFDakI7QUFDQSxTQUFPLG9CQUFvQixRQUFRO0FBQ3JDOzs7QXBCV08sU0FBUyxjQU1kQyxRQUFpQixJQUE4QjtBQUMvQyxRQUFNLFlBQ0osT0FBTyxPQUFPLFdBQVcsS0FBTSxJQUFJLE1BQU0sZUFBVyxtQkFBSyxDQUFDO0FBRTVELFFBQU0sV0FBVyxtQkFBbUJBLE1BQUs7QUFDekMsTUFBSSxpQkFBaUIsU0FBUyxJQUFJLFNBQVM7QUFDM0MsTUFBSSxDQUFDLGdCQUFnQjtBQUNuQixxQkFBaUIsRUFBRSxPQUFBQSxRQUFPLFVBQVU7QUFDcEMsYUFBUyxJQUFJLFdBQVcsY0FBYztBQUFBLEVBQ3hDO0FBRUEsU0FBTztBQUFBLElBQ0wsSUFBSTtBQUFBLElBQ0osTUFBTyxLQUFpRDtBQUFBLE1BQ3REO0FBQUEsTUFDQTtBQUFBLElBQ0Y7QUFBQSxJQUNBLFFBQVEsT0FBTyxLQUFLLE1BQU0sY0FBYztBQUFBLElBQ3hDLFNBQVUsUUFBZ0IsS0FBSyxNQUFNLGNBQWM7QUFBQSxJQUNuRCxXQUFXLFVBQVUsS0FBSyxNQUFNLGNBQWM7QUFBQSxJQUM5QyxPQUFPLE1BQU0sS0FBSyxNQUFNLGNBQWM7QUFBQSxJQUN0QyxRQUFTLE9BQWdCLEtBQUssTUFBTSxjQUFjO0FBQUEsSUFDbEQsU0FBUyxrQkFBb0NBLFFBQU8sU0FBUztBQUFBLEVBQy9EO0FBQ0Y7OztBcUJwREEsbUJBQXlEO0FBOENsRCxJQUFNLGNBQU4sTUFBTSxhQUFZO0FBQUEsRUFDdkI7QUFBQSxFQUVBLFlBQVksT0FBb0I7QUFDOUIsU0FBSyxRQUFRO0FBQUEsRUFDZjtBQUFBLEVBRUEsUUFBUSwrQkFBa0IsRUFBRSxVQUF1QjtBQUNqRCxXQUFPLEVBQUUsT0FBTyxTQUFTLE1BQU07QUFBQSxFQUNqQztBQUFBLEVBRUEsUUFBUSxpQ0FBb0IsRUFBRSxNQUE4QjtBQUMxRCxXQUFPLElBQUksYUFBWSxLQUFLLEtBQUs7QUFBQSxFQUNuQztBQUFBO0FBQUEsRUFHQSxHQUFHLFVBQXlDO0FBRTFDLFdBQVEsU0FBUyxLQUFLLE1BQU0sTUFBTSxFQUFVLEtBQUssS0FBSztBQUFBLEVBQ3hEO0FBQ0Y7QUErQ0EsU0FBUyxlQUFlLEdBQTJDO0FBQ2pFLFNBQU8sT0FBTyxNQUFNO0FBQ3RCO0FBRUEsU0FBUyxpQkFBaUIsSUFBa0M7QUFDMUQsU0FBTztBQUFBLElBQ0wsU0FBUztBQUFBLE1BQ1AsS0FBSyxDQUFDLE9BQU8sR0FBRyxJQUFJLFlBQVksRUFBRSxRQUFRLGVBQWUsR0FBRyxDQUFDLENBQUM7QUFBQSxNQUM5RCxLQUFLLENBQUMsSUFBSSxVQUNSLEdBQUcsSUFBSSxZQUFZLEVBQUUsUUFBUSxlQUFlLElBQUksTUFBTSxDQUFDLENBQUM7QUFBQSxNQUMxRCxRQUFRLENBQUMsSUFBSSxZQUNYLEdBQUcsSUFBSSxZQUFZLEVBQUUsUUFBUSxrQkFBa0IsSUFBSSxRQUFRLENBQUMsQ0FBQztBQUFBLElBQ2pFO0FBQUEsSUFDQSxTQUFTO0FBQUEsTUFDUCxLQUFLLENBQUMsT0FBTyxHQUFHLElBQUksWUFBWSxFQUFFLFFBQVEsZUFBZSxHQUFHLENBQUMsQ0FBQztBQUFBLE1BQzlELEtBQUssQ0FBQyxJQUFJLFVBQ1IsR0FBRyxJQUFJLFlBQVksRUFBRSxRQUFRLGVBQWUsSUFBSSxNQUFNLENBQUMsQ0FBQztBQUFBLE1BQzFELFFBQVEsQ0FBQyxJQUFJLFlBQ1gsR0FBRyxJQUFJLFlBQVksRUFBRSxRQUFRLGtCQUFrQixJQUFJLFFBQVEsQ0FBQyxDQUFDO0FBQUEsTUFDL0QsZUFBZSxDQUFDLGNBQ2QsR0FBRyxJQUFJLFlBQVksRUFBRSxRQUFRLHlCQUF5QixVQUFVLENBQUMsQ0FBQztBQUFBLElBQ3RFO0FBQUEsSUFDQSxNQUFNO0FBQUEsTUFDSixLQUFLLENBQUMsT0FBTyxHQUFHLElBQUksWUFBWSxFQUFFLFFBQVEsWUFBWSxHQUFHLENBQUMsQ0FBQztBQUFBLE1BQzNELEtBQUssQ0FBQyxJQUFJLFVBQ1IsR0FBRyxJQUFJLFlBQVksRUFBRSxRQUFRLFlBQVksSUFBSSxNQUFNLENBQUMsQ0FBQztBQUFBLE1BQ3ZELGVBQWUsQ0FBQyxjQUNkLEdBQUcsSUFBSSxZQUFZLEVBQUUsUUFBUSxzQkFBc0IsVUFBVSxDQUFDLENBQUM7QUFBQSxJQUNuRTtBQUFBLElBQ0EsU0FBUztBQUFBLE1BQ1AsS0FBSyxDQUFDLE9BQU8sR0FBRyxJQUFJLFlBQVksRUFBRSxRQUFRLGVBQWUsR0FBRyxDQUFDLENBQUM7QUFBQSxNQUM5RCxLQUFLLENBQUMsSUFBSSxVQUNSLEdBQUcsSUFBSSxZQUFZLEVBQUUsUUFBUSxlQUFlLElBQUksTUFBTSxDQUFDLENBQUM7QUFBQSxNQUMxRCxRQUFRLENBQUMsSUFBSSxZQUNYLEdBQUcsSUFBSSxZQUFZLEVBQUUsUUFBUSxrQkFBa0IsSUFBSSxRQUFRLENBQUMsQ0FBQztBQUFBLElBQ2pFO0FBQUEsSUFDQSxPQUFPO0FBQUEsTUFDTCxLQUFLLENBQUMsT0FBTyxHQUFHLElBQUksWUFBWSxFQUFFLFFBQVEsYUFBYSxHQUFHLENBQUMsQ0FBQztBQUFBLE1BQzVELEtBQUssQ0FBQyxJQUFJLFVBQ1IsR0FBRyxJQUFJLFlBQVksRUFBRSxRQUFRLGFBQWEsSUFBSSxNQUFNLENBQUMsQ0FBQztBQUFBLElBQzFEO0FBQUEsRUFDRjtBQUNGO0FBRUEsU0FBUyxhQUFhLEdBQTZCO0FBQ2pELFNBQU87QUFBQSxJQUNMLFNBQVM7QUFBQSxNQUNQLEtBQUssQ0FBQyxPQUFPLEVBQUUsYUFBYSxFQUFFLEVBQUUsR0FBRyxDQUFDO0FBQUEsTUFDcEMsS0FBSyxDQUFDLElBQUksVUFBVSxFQUFFLGFBQWEsRUFBRSxFQUFFLElBQUksTUFBTSxDQUFDO0FBQUEsTUFDbEQsUUFBUSxDQUFDLElBQUksWUFBWSxFQUFFLGdCQUFnQixFQUFFLEVBQUUsSUFBSSxRQUFRLENBQUM7QUFBQSxJQUM5RDtBQUFBLElBQ0EsU0FBUztBQUFBLE1BQ1AsS0FBSyxDQUFDLE9BQU8sRUFBRSxhQUFhLEVBQUUsRUFBRSxHQUFHLENBQUM7QUFBQSxNQUNwQyxLQUFLLENBQUMsSUFBSSxVQUFVLEVBQUUsYUFBYSxFQUFFLEVBQUUsSUFBSSxNQUFNLENBQUM7QUFBQSxNQUNsRCxRQUFRLENBQUMsSUFBSSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxJQUFJLFFBQVEsQ0FBQztBQUFBLE1BQzVELGVBQWUsQ0FBQyxjQUFjLEVBQUUsdUJBQXVCLEVBQUUsRUFBRSxVQUFVLENBQUM7QUFBQSxJQUN4RTtBQUFBLElBQ0EsTUFBTTtBQUFBLE1BQ0osS0FBSyxDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsRUFBRSxHQUFHLENBQUM7QUFBQSxNQUNqQyxLQUFLLENBQUMsSUFBSSxVQUFVLEVBQUUsVUFBVSxFQUFFLEVBQUUsSUFBSSxNQUFNLENBQUM7QUFBQSxNQUMvQyxlQUFlLENBQUMsY0FBYyxFQUFFLG9CQUFvQixFQUFFLEVBQUUsVUFBVSxDQUFDO0FBQUEsSUFDckU7QUFBQSxJQUNBLFNBQVM7QUFBQSxNQUNQLEtBQUssQ0FBQyxPQUFPLEVBQUUsYUFBYSxFQUFFLEVBQUUsR0FBRyxDQUFDO0FBQUEsTUFDcEMsS0FBSyxDQUFDLElBQUksVUFBVSxFQUFFLGFBQWEsRUFBRSxFQUFFLElBQUksTUFBTSxDQUFDO0FBQUEsTUFDbEQsUUFBUSxDQUFDLElBQUksWUFBWSxFQUFFLGdCQUFnQixFQUFFLEVBQUUsSUFBSSxRQUFRLENBQUM7QUFBQSxJQUM5RDtBQUFBLElBQ0EsT0FBTztBQUFBLE1BQ0wsS0FBSyxDQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsRUFBRSxHQUFHLENBQUM7QUFBQSxNQUNsQyxLQUFLLENBQUMsSUFBSSxVQUFVLEVBQUUsV0FBVyxFQUFFLEVBQUUsSUFBSSxNQUFNLENBQUM7QUFBQSxJQUNsRDtBQUFBLEVBQ0Y7QUFDRjtBQUVPLFNBQVMsVUFBVSxHQUEwQjtBQUNsRCxTQUFPLGVBQWUsQ0FBQyxJQUFJLGlCQUFpQixDQUFDLElBQUksYUFBYSxDQUFDO0FBQ2pFOzs7QUM3TEEsSUFBTSxzQkFBc0I7QUFzQjVCLGVBQXNCLDRCQUErQixNQU90QztBQUNiLFFBQU0sYUFBYSxLQUFLLGNBQWM7QUFDdEMsUUFBTSxFQUFFLHVCQUF1QixJQUFJLE1BQU0sT0FBTyxhQUFhO0FBRTdELFdBQVMsVUFBVSxHQUFHLFVBQVUsWUFBWSxXQUFXO0FBQ3JELFVBQU0sUUFBUSxNQUFNLEtBQUssTUFBTSxJQUFJLEtBQUssRUFBRTtBQUMxQyxRQUFJLENBQUMsTUFBTSxRQUFRO0FBQ2pCLFlBQU0sSUFBSSxNQUFNLEtBQUssb0JBQW9CO0FBQUEsSUFDM0M7QUFFQSxVQUFNLFdBQVcsTUFBTSxNQUFNO0FBQzdCLFVBQU0sVUFBVSxFQUFFLEdBQUcsVUFBVSxHQUFHLEtBQUssUUFBUTtBQUUvQyxRQUFJO0FBQ0YsWUFBTSxNQUFNLE9BQU8sT0FBTztBQUMxQixhQUFPO0FBQUEsSUFDVCxTQUFTLE9BQU87QUFDZCxVQUNFLEVBQUUsaUJBQWlCLDRCQUNsQixFQUFFLGlCQUFpQixVQUFVLE1BQU0sU0FBUywyQkFDN0M7QUFDQSxjQUFNO0FBQUEsTUFDUjtBQUVBLFVBQUksWUFBWSxhQUFhLEdBQUc7QUFDOUIsY0FBTSxJQUFJLE1BQU0sS0FBSyxzQkFBc0IsRUFBRSxPQUFPLE1BQU0sQ0FBQztBQUFBLE1BQzdEO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFFQSxRQUFNLElBQUksTUFBTSxLQUFLLG9CQUFvQjtBQUMzQzs7O0FDdERBLGVBQWUsYUFBYSxRQUFnQjtBQUMxQyxRQUFNLEVBQUUsU0FBUyxJQUFJLE1BQU0sT0FBTyxhQUFhO0FBQy9DLFFBQU0sS0FBSyxTQUFTLEVBQUUsT0FBTyxDQUFDLEVBQUUsU0FBUyxRQUFRO0FBRWpELFNBQU87QUFBQSxJQUNMLFVBQVUsR0FBRyxTQUFrQixVQUFVO0FBQUEsSUFDekMsVUFBVSxHQUFHLFNBQWtCLFVBQVUsRUFBRSxZQUFZO0FBQUEsTUFDckQsYUFBYSxFQUFFLEtBQUssQ0FBQyxNQUFlLEVBQUUsVUFBVTtBQUFBLElBQ2xELENBQUM7QUFBQSxJQUNELE9BQU8sR0FBRyxTQUFlLE9BQU8sRUFBRSxZQUFZO0FBQUEsTUFDNUMsYUFBYSxFQUFFLEtBQUssQ0FBQyxNQUFZLEVBQUUsVUFBVTtBQUFBLElBQy9DLENBQUM7QUFBQSxJQUNELFdBQVcsR0FBRyxTQUFrQixVQUFVO0FBQUEsSUFDMUMsUUFBUSxHQUFHLFNBQWdCLFFBQVE7QUFBQSxFQUNyQztBQUNGO0FBRU8sU0FBUyxrQkFBa0IsTUFBMkM7QUFDM0UsTUFBSTtBQUVKLFdBQVMsWUFBWTtBQUNuQixRQUFJLENBQUMsZUFBZTtBQUNsQixzQkFBZ0IsYUFBYSxLQUFLLE1BQU07QUFBQSxJQUMxQztBQUNBLFdBQU87QUFBQSxFQUNUO0FBRUEsUUFBTSxNQUFNLFVBQVUsS0FBSyxNQUFNO0FBRWpDLFNBQU87QUFBQSxJQUNMLGVBQWUsT0FBTyxFQUFFLEdBQUcsTUFBTTtBQUMvQixZQUFNLEVBQUUsU0FBUyxJQUFJLE1BQU0sVUFBVTtBQUNyQyxhQUFRLE1BQU0sU0FBUyxTQUFTLEVBQUUsS0FBTTtBQUFBLElBQzFDO0FBQUEsSUFFQSxlQUFlLE9BQU8sRUFBRSxJQUFJLE1BQU0sTUFBTTtBQUN0QyxZQUFNLEVBQUUsU0FBUyxJQUFJLE1BQU0sVUFBVTtBQUNyQyxZQUFNLFNBQVMsSUFBSSxJQUFJLEtBQUs7QUFBQSxJQUM5QjtBQUFBLElBRUEsa0JBQWtCLE9BQU8sRUFBRSxJQUFJLFFBQVEsTUFBTTtBQUMzQyxZQUFNLEVBQUUsU0FBUyxJQUFJLE1BQU0sVUFBVTtBQUNyQyxhQUFPLDRCQUFxQztBQUFBLFFBQzFDO0FBQUEsUUFDQTtBQUFBLFFBQ0EsT0FBTztBQUFBLFFBQ1Asc0JBQXNCLEdBQUcsR0FBRyw4Q0FBOEMsRUFBRTtBQUFBLFFBQzVFLHNCQUFzQixHQUFHLEdBQUcsbUVBQW1FLEVBQUU7QUFBQSxNQUNuRyxDQUFDO0FBQUEsSUFDSDtBQUFBLElBRUEsZUFBZSxPQUFPLEVBQUUsR0FBRyxNQUFNO0FBQy9CLFlBQU0sRUFBRSxTQUFTLElBQUksTUFBTSxVQUFVO0FBQ3JDLGFBQVEsTUFBTSxTQUFTLFNBQVMsRUFBRSxLQUFNO0FBQUEsSUFDMUM7QUFBQSxJQUVBLGVBQWUsT0FBTyxFQUFFLElBQUksTUFBTSxNQUFNO0FBQ3RDLFlBQU0sRUFBRSxTQUFTLElBQUksTUFBTSxVQUFVO0FBQ3JDLFlBQU0sU0FBUyxJQUFJLElBQUksS0FBSztBQUFBLElBQzlCO0FBQUEsSUFFQSxrQkFBa0IsT0FBTyxFQUFFLElBQUksUUFBUSxNQUFNO0FBQzNDLFlBQU0sRUFBRSxTQUFTLElBQUksTUFBTSxVQUFVO0FBQ3JDLGFBQU8sNEJBQXFDO0FBQUEsUUFDMUM7QUFBQSxRQUNBO0FBQUEsUUFDQSxPQUFPO0FBQUEsUUFDUCxzQkFBc0IsR0FBRyxHQUFHLDhDQUE4QyxFQUFFO0FBQUEsUUFDNUUsc0JBQXNCLEdBQUcsR0FBRyxtRUFBbUUsRUFBRTtBQUFBLE1BQ25HLENBQUM7QUFBQSxJQUNIO0FBQUEsSUFFQSx5QkFBeUIsT0FBTyxFQUFFLFVBQVUsTUFBTTtBQUNoRCxZQUFNLEVBQUUsU0FBUyxJQUFJLE1BQU0sVUFBVTtBQUNyQyxZQUFNLFNBQW9CLENBQUM7QUFDM0IsdUJBQWlCLENBQUMsRUFBRSxLQUFLLEtBQUssU0FBUyxRQUFRO0FBQUEsUUFDN0MsYUFBYTtBQUFBLE1BQ2YsQ0FBQyxHQUFHO0FBQ0YsZUFBTyxLQUFLLE1BQU0sTUFBTSxLQUFLO0FBQUEsTUFDL0I7QUFDQSxhQUFPO0FBQUEsSUFDVDtBQUFBLElBRUEsWUFBWSxPQUFPLEVBQUUsR0FBRyxNQUFNO0FBQzVCLFlBQU0sRUFBRSxNQUFNLElBQUksTUFBTSxVQUFVO0FBQ2xDLGFBQVEsTUFBTSxNQUFNLFNBQVMsRUFBRSxLQUFNO0FBQUEsSUFDdkM7QUFBQSxJQUVBLFlBQVksT0FBTyxFQUFFLElBQUksTUFBTSxNQUFNO0FBQ25DLFlBQU0sRUFBRSxNQUFNLElBQUksTUFBTSxVQUFVO0FBQ2xDLFlBQU0sTUFBTSxJQUFJLElBQUksS0FBSztBQUFBLElBQzNCO0FBQUEsSUFFQSxzQkFBc0IsT0FBTyxFQUFFLFVBQVUsTUFBTTtBQUM3QyxZQUFNLEVBQUUsTUFBTSxJQUFJLE1BQU0sVUFBVTtBQUNsQyxZQUFNLFNBQWlCLENBQUM7QUFDeEIsdUJBQWlCLENBQUMsRUFBRSxLQUFLLEtBQUssTUFBTSxRQUFRO0FBQUEsUUFDMUMsYUFBYTtBQUFBLE1BQ2YsQ0FBQyxHQUFHO0FBQ0YsZUFBTyxLQUFLLE1BQU0sTUFBTSxLQUFLO0FBQUEsTUFDL0I7QUFDQSxhQUFPO0FBQUEsSUFDVDtBQUFBLElBRUEsZUFBZSxPQUFPLEVBQUUsR0FBRyxNQUFNO0FBQy9CLFlBQU0sRUFBRSxVQUFVLElBQUksTUFBTSxVQUFVO0FBQ3RDLGFBQVEsTUFBTSxVQUFVLFNBQVMsRUFBRSxLQUFNO0FBQUEsSUFDM0M7QUFBQSxJQUVBLGVBQWUsT0FBTyxFQUFFLElBQUksTUFBTSxNQUFNO0FBQ3RDLFlBQU0sRUFBRSxVQUFVLElBQUksTUFBTSxVQUFVO0FBQ3RDLFlBQU0sVUFBVSxJQUFJLElBQUksS0FBSztBQUFBLElBQy9CO0FBQUEsSUFFQSxrQkFBa0IsT0FBTyxFQUFFLElBQUksUUFBUSxNQUFNO0FBQzNDLFlBQU0sRUFBRSxVQUFVLElBQUksTUFBTSxVQUFVO0FBQ3RDLGFBQU8sNEJBQXFDO0FBQUEsUUFDMUM7QUFBQSxRQUNBO0FBQUEsUUFDQSxPQUFPO0FBQUEsUUFDUCxzQkFBc0IsR0FBRyxHQUFHLDhDQUE4QyxFQUFFO0FBQUEsUUFDNUUsc0JBQXNCLEdBQUcsR0FBRyxtRUFBbUUsRUFBRTtBQUFBLE1BQ25HLENBQUM7QUFBQSxJQUNIO0FBQUEsSUFFQSxhQUFhLE9BQU8sRUFBRSxHQUFHLE1BQU07QUFDN0IsWUFBTSxFQUFFLE9BQU8sSUFBSSxNQUFNLFVBQVU7QUFDbkMsYUFBUSxNQUFNLE9BQU8sU0FBUyxFQUFFLEtBQU07QUFBQSxJQUN4QztBQUFBLElBRUEsYUFBYSxPQUFPLEVBQUUsSUFBSSxNQUFNLE1BQU07QUFDcEMsWUFBTSxFQUFFLE9BQU8sSUFBSSxNQUFNLFVBQVU7QUFDbkMsWUFBTSxPQUFPLElBQUksSUFBSSxLQUFLO0FBQUEsSUFDNUI7QUFBQSxFQUNGO0FBQ0Y7OztBQzFJQSxJQUFJO0FBQ0osSUFBSTtBQUVKLGVBQWUsS0FBSztBQUNsQixNQUFJLENBQUMsS0FBSztBQUNSLFVBQU0sTUFBTSxPQUFPLGFBQWtCO0FBQUEsRUFDdkM7QUFDQSxTQUFPO0FBQ1Q7QUFDQSxlQUFlLE9BQU87QUFDcEIsTUFBSSxDQUFDLE9BQU87QUFDVixZQUFRLE1BQU0sT0FBTyxNQUFXO0FBQUEsRUFDbEM7QUFDQSxTQUFPO0FBQ1Q7QUFPQSxTQUFTLGtCQUFrQjtBQUN6QixRQUFNLFFBQVEsb0JBQUksSUFBNEI7QUFFOUMsU0FBTyxlQUFlLGNBQWlCLE1BR3hCO0FBQ2IsUUFBSSxRQUFRLE1BQU0sSUFBSSxLQUFLLEdBQUc7QUFDOUIsUUFBSSxDQUFDLE9BQU87QUFDVixjQUFRLEVBQUUsUUFBUSxPQUFPLFNBQVMsQ0FBQyxFQUFFO0FBQ3JDLFlBQU0sSUFBSSxLQUFLLEtBQUssS0FBSztBQUFBLElBQzNCO0FBRUEsUUFBSSxNQUFNLFFBQVE7QUFDaEIsWUFBTSxJQUFJLFFBQWMsQ0FBQ0MsYUFBWTtBQUNuQyxjQUFNLFFBQVEsS0FBS0EsUUFBTztBQUFBLE1BQzVCLENBQUM7QUFBQSxJQUNIO0FBRUEsVUFBTSxTQUFTO0FBRWYsUUFBSTtBQUNGLGFBQU8sTUFBTSxLQUFLLEdBQUc7QUFBQSxJQUN2QixVQUFFO0FBQ0EsWUFBTSxPQUFPLE1BQU0sUUFBUSxNQUFNO0FBQ2pDLFVBQUksTUFBTTtBQUNSLGFBQUs7QUFBQSxNQUNQLE9BQU87QUFDTCxjQUFNLFNBQVM7QUFDZixjQUFNLE9BQU8sS0FBSyxHQUFHO0FBQUEsTUFDdkI7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUNGO0FBRUEsU0FBUyxZQUFlLEtBQWE7QUFDbkMsUUFBTSxXQUFXLE9BQU8sU0FDckIsTUFBTSxLQUFLLEdBQUcsS0FBSyxLQUFLLEdBQUcsR0FBRyxPQUFPO0FBQ3hDLFFBQU0sZ0JBQWdCLGdCQUFnQjtBQUV0QyxTQUFPO0FBQUEsSUFDTCxNQUFNLElBQUksS0FBZ0M7QUFDeEMsVUFBSTtBQUNGLGNBQU0sT0FBTyxPQUFPLE1BQU0sR0FBRyxHQUFHLFNBQVMsTUFBTSxTQUFTLEdBQUcsR0FBRyxPQUFPO0FBQ3JFLGVBQU8sS0FBSyxNQUFNLElBQUk7QUFBQSxNQUN4QixRQUFRO0FBQ04sZUFBTztBQUFBLE1BQ1Q7QUFBQSxJQUNGO0FBQUEsSUFDQSxNQUFNLElBQUksS0FBYSxPQUF5QjtBQUM5QyxZQUFNLGNBQWM7QUFBQSxRQUNsQjtBQUFBLFFBQ0EsSUFBSSxZQUFZO0FBQ2QsZ0JBQU0sSUFBSSxNQUFNLFNBQVMsR0FBRztBQUM1QixnQkFBTSxFQUFFLE9BQU8sVUFBVSxJQUFJLE1BQU0sR0FBRztBQUN0QyxnQkFBTSxFQUFFLFFBQVEsSUFBSSxNQUFNLEtBQUs7QUFDL0IsZ0JBQU0sTUFBTSxRQUFRLENBQUMsR0FBRyxFQUFFLFdBQVcsS0FBSyxDQUFDO0FBQzNDLGdCQUFNLFVBQVUsR0FBRyxLQUFLLFVBQVUsT0FBTyxNQUFNLENBQUMsQ0FBQztBQUFBLFFBQ25EO0FBQUEsTUFDRixDQUFDO0FBQUEsSUFDSDtBQUFBLElBQ0EsT0FBTyxLQUFhLFNBQWlDO0FBQ25ELGFBQU8sY0FBYztBQUFBLFFBQ25CO0FBQUEsUUFDQSxJQUFJLFlBQVk7QUFDZCxnQkFBTSxJQUFJLE1BQU0sU0FBUyxHQUFHO0FBQzVCLGdCQUFNLEVBQUUsVUFBQUMsV0FBVSxPQUFPLFVBQVUsSUFBSSxNQUFNLEdBQUc7QUFDaEQsZ0JBQU0sRUFBRSxRQUFRLElBQUksTUFBTSxLQUFLO0FBQy9CLGNBQUk7QUFDSixjQUFJO0FBQ0Ysa0JBQU0sT0FBTyxNQUFNQSxVQUFTLEdBQUcsT0FBTztBQUN0Qyx1QkFBVyxLQUFLLE1BQU0sSUFBSTtBQUFBLFVBQzVCLFFBQVE7QUFDTixrQkFBTSxJQUFJLE1BQU0sY0FBYyxHQUFHLEVBQUU7QUFBQSxVQUNyQztBQUNBLGdCQUFNLFVBQVUsRUFBRSxHQUFHLFVBQVUsR0FBRyxRQUFRO0FBQzFDLGdCQUFNLE1BQU0sUUFBUSxDQUFDLEdBQUcsRUFBRSxXQUFXLEtBQUssQ0FBQztBQUMzQyxnQkFBTSxVQUFVLEdBQUcsS0FBSyxVQUFVLFNBQVMsTUFBTSxDQUFDLENBQUM7QUFDbkQsaUJBQU87QUFBQSxRQUNUO0FBQUEsTUFDRixDQUFDO0FBQUEsSUFDSDtBQUFBLEVBQ0Y7QUFDRjtBQUVBLGVBQWUsZUFBa0IsS0FBMkI7QUFDMUQsUUFBTSxFQUFFLFNBQVMsVUFBQUEsVUFBUyxJQUFJLE1BQU0sR0FBRztBQUN2QyxRQUFNLEVBQUUsS0FBSyxJQUFJLE1BQU0sS0FBSztBQUM1QixNQUFJO0FBQ0osTUFBSTtBQUNGLFlBQVEsTUFBTSxRQUFRLEdBQUc7QUFBQSxFQUMzQixRQUFRO0FBQ04sV0FBTyxDQUFDO0FBQUEsRUFDVjtBQUNBLFFBQU0sU0FBYyxDQUFDO0FBQ3JCLGFBQVcsUUFBUSxPQUFPO0FBQ3hCLFFBQUksQ0FBQyxLQUFLLFNBQVMsT0FBTyxHQUFHO0FBQzNCO0FBQUEsSUFDRjtBQUNBLFFBQUk7QUFDRixZQUFNLE9BQU8sTUFBTUEsVUFBUyxLQUFLLEtBQUssSUFBSSxHQUFHLE9BQU87QUFDcEQsYUFBTyxLQUFLLEtBQUssTUFBTSxJQUFJLENBQU07QUFBQSxJQUNuQyxRQUFRO0FBQUEsSUFFUjtBQUFBLEVBQ0Y7QUFDQSxTQUFPO0FBQ1Q7QUFFQSxlQUFlLGdCQUFnQixLQUFhO0FBQzFDLFFBQU0sRUFBRSxPQUFPLFdBQVcsVUFBQUEsVUFBUyxJQUFJLE1BQU0sR0FBRztBQUNoRCxRQUFNLEVBQUUsS0FBSyxJQUFJLE1BQU0sS0FBSztBQUM1QixRQUFNLGdCQUFnQixLQUFLLEtBQUssWUFBWTtBQUM1QyxNQUFJO0FBQ0YsVUFBTUEsVUFBUyxlQUFlLE9BQU87QUFBQSxFQUN2QyxRQUFRO0FBQ04sVUFBTSxNQUFNLEtBQUssRUFBRSxXQUFXLEtBQUssQ0FBQztBQUNwQyxVQUFNLFVBQVUsZUFBZSxLQUFLO0FBQUEsRUFDdEM7QUFDRjtBQUVPLFNBQVMsYUFBYSxNQUEwQztBQUNyRSxRQUFNLE1BQU0sTUFBTSxPQUFPO0FBQ3pCLE1BQUksbUJBQXlDO0FBRTdDLFFBQU0sZUFBZSxZQUFxQixHQUFHLEdBQUcsVUFBVTtBQUMxRCxRQUFNLGVBQWUsWUFBcUIsR0FBRyxHQUFHLFVBQVU7QUFDMUQsUUFBTSxZQUFZLFlBQWtCLEdBQUcsR0FBRyxPQUFPO0FBQ2pELFFBQU0sZUFBZSxZQUFxQixHQUFHLEdBQUcsVUFBVTtBQUMxRCxRQUFNLGFBQWEsWUFBbUIsR0FBRyxHQUFHLFFBQVE7QUFDcEQsUUFBTSxhQUFhLEdBQUcsR0FBRztBQUN6QixRQUFNLFVBQVUsR0FBRyxHQUFHO0FBRXRCLFdBQVMsUUFBVyxJQUFrQztBQUNwRCxRQUFJLENBQUMsa0JBQWtCO0FBQ3JCLHlCQUFtQixnQkFBZ0IsR0FBRztBQUFBLElBQ3hDO0FBQ0EsV0FBTyxpQkFBaUIsS0FBSyxFQUFFO0FBQUEsRUFDakM7QUFFQSxTQUFPO0FBQUEsSUFDTCxlQUFlLENBQUMsRUFBRSxHQUFHLE1BQU0sYUFBYSxJQUFJLEVBQUU7QUFBQSxJQUM5QyxlQUFlLENBQUMsRUFBRSxJQUFJLE1BQU0sTUFDMUIsUUFBUSxNQUFNLGFBQWEsSUFBSSxJQUFJLEtBQUssQ0FBQztBQUFBLElBQzNDLGtCQUFrQixDQUFDLEVBQUUsSUFBSSxRQUFRLE1BQy9CLFFBQVEsTUFBTSxhQUFhLE9BQU8sSUFBSSxPQUFPLENBQUM7QUFBQSxJQUVoRCxlQUFlLENBQUMsRUFBRSxHQUFHLE1BQU0sYUFBYSxJQUFJLEVBQUU7QUFBQSxJQUM5QyxlQUFlLENBQUMsRUFBRSxJQUFJLE1BQU0sTUFDMUIsUUFBUSxNQUFNLGFBQWEsSUFBSSxJQUFJLEtBQUssQ0FBQztBQUFBLElBQzNDLGtCQUFrQixDQUFDLEVBQUUsSUFBSSxRQUFRLE1BQy9CLFFBQVEsTUFBTSxhQUFhLE9BQU8sSUFBSSxPQUFPLENBQUM7QUFBQSxJQUNoRCx5QkFBeUIsT0FBTyxFQUFFLFVBQVUsTUFBTTtBQUNoRCxZQUFNQyxPQUFNLE1BQU0sZUFBd0IsVUFBVTtBQUNwRCxhQUFPQSxLQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUUsY0FBYyxTQUFTO0FBQUEsSUFDcEQ7QUFBQSxJQUVBLFlBQVksQ0FBQyxFQUFFLEdBQUcsTUFBTSxVQUFVLElBQUksRUFBRTtBQUFBLElBQ3hDLFlBQVksQ0FBQyxFQUFFLElBQUksTUFBTSxNQUFNLFFBQVEsTUFBTSxVQUFVLElBQUksSUFBSSxLQUFLLENBQUM7QUFBQSxJQUNyRSxzQkFBc0IsT0FBTyxFQUFFLFVBQVUsTUFBTTtBQUM3QyxZQUFNQSxPQUFNLE1BQU0sZUFBcUIsT0FBTztBQUM5QyxhQUFPQSxLQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUUsY0FBYyxTQUFTO0FBQUEsSUFDcEQ7QUFBQSxJQUVBLGVBQWUsQ0FBQyxFQUFFLEdBQUcsTUFBTSxhQUFhLElBQUksRUFBRTtBQUFBLElBQzlDLGVBQWUsQ0FBQyxFQUFFLElBQUksTUFBTSxNQUMxQixRQUFRLE1BQU0sYUFBYSxJQUFJLElBQUksS0FBSyxDQUFDO0FBQUEsSUFDM0Msa0JBQWtCLENBQUMsRUFBRSxJQUFJLFFBQVEsTUFDL0IsUUFBUSxNQUFNLGFBQWEsT0FBTyxJQUFJLE9BQU8sQ0FBQztBQUFBLElBRWhELGFBQWEsQ0FBQyxFQUFFLEdBQUcsTUFBTSxXQUFXLElBQUksRUFBRTtBQUFBLElBQzFDLGFBQWEsQ0FBQyxFQUFFLElBQUksTUFBTSxNQUFNLFFBQVEsTUFBTSxXQUFXLElBQUksSUFBSSxLQUFLLENBQUM7QUFBQSxFQUN6RTtBQUNGOzs7QUNyTU8sU0FBUyxzQkFBK0I7QUFDN0MsU0FBTyxDQUFDLENBQUMsUUFBUSxJQUFJO0FBQ3ZCOzs7QXhDYUE7OztBeUNSQSxJQUFBQyxVQUF3QjtBQUN4QixJQUFBQyxjQUFrQjtBQVVYLElBQU0sY0FBYyxjQUFFLG1CQUFtQixRQUFRO0FBQUEsRUFDdEQsY0FBRSxPQUFPLEVBQUUsTUFBTSxjQUFFLFFBQVEsZUFBZSxFQUFFLENBQUM7QUFBQSxFQUM3QyxjQUFFLE9BQU8sRUFBRSxNQUFNLGNBQUUsUUFBUSxvQkFBb0IsRUFBRSxDQUFDO0FBQUEsRUFDbEQsY0FBRSxPQUFPLEVBQUUsTUFBTSxjQUFFLFFBQVEsZ0JBQWdCLEVBQUUsQ0FBQztBQUFBLEVBQzlDLGNBQUUsT0FBTyxFQUFFLE1BQU0sY0FBRSxRQUFRLHNCQUFzQixFQUFFLENBQUM7QUFBQSxFQUNwRCxjQUFFLE9BQU8sRUFBRSxNQUFNLGNBQUUsUUFBUSxnQkFBZ0IsRUFBRSxDQUFDO0FBQUEsRUFDOUMsY0FBRSxPQUFPLEVBQUUsTUFBTSxjQUFFLFFBQVEsVUFBVSxFQUFFLENBQUM7QUFBQSxFQUN4QyxjQUFFLE9BQU8sRUFBRSxNQUFNLGNBQUUsUUFBUSxRQUFRLEdBQUcsUUFBUSxjQUFFLE9BQU8sRUFBRSxDQUFDO0FBQzVELENBQUM7QUFrRUQsSUFBTSxxQkFBTixjQUF3QywwQkFBa0I7QUFBQSxFQUN4RCxNQUFNO0FBQUEsRUFDTixTQUFTO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFjWCxDQUFDLEVBQUU7QUFBQztBQUVKLElBQU0scUJBQXFCLHVCQUFPLElBQUksNkJBQTZCO0FBRW5FLFNBQVMsbUJBQTBDO0FBQ2pELFFBQU0sSUFBSTtBQUNWLE1BQUksV0FBVyxFQUFFLGtCQUFrQjtBQUNuQyxNQUFJLENBQUMsVUFBVTtBQUNiLGVBQVcsb0JBQUksSUFBSTtBQUNuQixNQUFFLGtCQUFrQixJQUFJO0FBQUEsRUFDMUI7QUFDQSxTQUFPO0FBQ1Q7QUFFTyxTQUFTLGNBQWMsTUFBY0MsUUFBaUI7QUFDM0QsbUJBQWlCLEVBQUUsSUFBSSxNQUFNQSxNQUFLO0FBQ3BDO0FBQ08sU0FBUyxTQUNkLE1BQ0EsVUFDeUQ7QUFDekQsUUFBTUEsU0FBUSxpQkFBaUIsRUFBRSxJQUFJLElBQUk7QUFDekMsTUFBSSxZQUFZLENBQUNBLFFBQU87QUFDdEIsVUFBTSxJQUFJLG1CQUFtQixFQUFFLFdBQVcsS0FBSyxDQUFDO0FBQUEsRUFDbEQ7QUFDQSxTQUFPQTtBQUNUOzs7QXpDMUNBLElBQU0scUJBQXFCLG9CQUFJLFFBQTZDO0FBQzVFLElBQU0scUJBQXFCLG9CQUFJLFFBQTZDO0FBRXJFLFNBQVMsbUJBQ2RDLFFBQzZCO0FBQzdCLE1BQUksTUFBTSxtQkFBbUIsSUFBSUEsTUFBSztBQUN0QyxNQUFJLENBQUMsS0FBSztBQUNSLFVBQU0sb0JBQUksSUFBSTtBQUNkLHVCQUFtQixJQUFJQSxRQUFPLEdBQUc7QUFBQSxFQUNuQztBQUNBLFNBQU87QUFDVDtBQUVPLFNBQVMsbUJBQ2RBLFFBQzZCO0FBQzdCLE1BQUksTUFBTSxtQkFBbUIsSUFBSUEsTUFBSztBQUN0QyxNQUFJLENBQUMsS0FBSztBQUNSLFVBQU0sb0JBQUksSUFBSTtBQUNkLHVCQUFtQixJQUFJQSxRQUFPLEdBQUc7QUFBQSxFQUNuQztBQUNBLFNBQU87QUFDVDtBQWVPLElBQU0sUUFBTixNQUFNLE9BTVg7QUFBQSxFQUNTO0FBQUEsRUFDVDtBQUFBLEVBUUEsWUFDRSxNQUNBLFNBT0E7QUFDQSxTQUFLLE9BQU87QUFDWixTQUFLLFVBQVUsV0FBVyxDQUFDO0FBQzNCLFNBQUssVUFBVyxjQU1iLEtBQUssTUFBTSxJQUEyQjtBQUN6QyxTQUFLLFVBQVcsY0FBaUM7QUFBQSxNQUMvQztBQUFBLE1BQ0E7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUFBLEVBRUEsUUFBUSxnQ0FBa0IsRUFBRSxVQUFvQjtBQUM5QyxXQUFPLEVBQUUsTUFBTSxTQUFTLEtBQUs7QUFBQSxFQUMvQjtBQUFBLEVBRUEsUUFBUSxrQ0FBb0IsRUFBRSxNQUF3QjtBQUNwRCxXQUFPLFNBQVMsS0FBSyxNQUFNLElBQUk7QUFBQSxFQUNqQztBQUFBLEVBRVE7QUFBQSxFQUVSLElBQUksVUFBbUI7QUFDckIsUUFBSSxLQUFLLGtCQUFrQjtBQUN6QixhQUFPLEtBQUs7QUFBQSxJQUNkO0FBRUEsUUFBSSxLQUFLLFFBQVEsU0FBUztBQUN4QixXQUFLLG1CQUFtQixVQUFVLEtBQUssUUFBUSxPQUFPO0FBQ3RELGFBQU8sS0FBSztBQUFBLElBQ2Q7QUFFQSxVQUFNQyxPQUFNLGFBQWE7QUFBQSxNQUN2QixRQUFRLEVBQUUsR0FBRyxLQUFLLFFBQVEsU0FBUyxNQUFNLEtBQUssS0FBSztBQUFBLE1BQ25ELFdBQVc7QUFBQSxJQUNiLENBQUM7QUFFRCxRQUFJLG9CQUFvQixHQUFHO0FBQ3pCLE1BQUFBLEtBQUk7QUFBQSxRQUNGLCtEQUEwRCxLQUFLLElBQUk7QUFBQSxNQUNyRTtBQUNBLFdBQUssbUJBQW1CO0FBQUEsUUFDdEIsa0JBQWtCLEVBQUUsUUFBUSxLQUFLLEtBQUssQ0FBQztBQUFBLE1BQ3pDO0FBQ0EsYUFBTyxLQUFLO0FBQUEsSUFDZDtBQUVBLElBQUFBLEtBQUk7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUNBLFNBQUssbUJBQW1CLFVBQVUsYUFBYSxDQUFDO0FBQ2hELFdBQU8sS0FBSztBQUFBLEVBQ2Q7QUFBQSxFQUVBLElBQUksUUFBUTtBQUNWLFdBQU8sRUFBRSxHQUFHLGNBQWMsR0FBRyxLQUFLLFFBQVEsTUFBTTtBQUFBLEVBRWxEO0FBQUEsRUFFQSxJQUFJLFFBQW9CO0FBQ3RCLFdBQU8sS0FBSyxRQUFRLFNBQVMsQ0FBQztBQUFBLEVBQ2hDO0FBQUEsRUFFUztBQUFBLEVBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPVCxPQUNFLElBQ29FO0FBQ3BFLFdBQU8sSUFBSSxPQUFNLEtBQUssTUFBTSxHQUFHLEtBQUssT0FBTyxDQUFDO0FBQUEsRUFDOUM7QUFRRjtBQUVPLFNBQVMsTUFPZCxNQUNBLFNBT0E7QUFDQSxRQUFNLFdBQVcsSUFBSSxNQU1uQixNQUFNLE9BQU87QUFDZixnQkFBYyxNQUFNLFFBQVE7QUFDNUIsU0FBTztBQUNUOzs7QTBDblFPLFNBQVMsc0JBQ2QsTUFDQSxTQUNjO0FBQ2QsUUFBTSxTQUF1QixFQUFFLEdBQUcsS0FBSztBQUV2QyxNQUFJLFFBQVEsV0FBVyxRQUFXO0FBQ2hDLFFBQUksS0FBSyxXQUFXLFFBQVc7QUFDN0IsYUFBTyxTQUFTLFFBQVE7QUFBQSxJQUMxQixXQUFXLE9BQU8sS0FBSyxXQUFXLFlBQVk7QUFDNUMsWUFBTSxTQUFTLEtBQUs7QUFDcEIsYUFBTyxTQUFTLE9BQU8sU0FBUztBQUM5QixjQUFNLFdBQVcsTUFBTSxPQUFPLElBQUk7QUFDbEMsWUFBSSxhQUFhLFFBQVc7QUFDMUIsaUJBQU8sUUFBUTtBQUFBLFFBQ2pCO0FBQ0EsY0FBTSxVQUFVLE1BQU0sUUFBUSxRQUFRLElBQUksV0FBVyxDQUFDLFFBQVE7QUFDOUQsZUFBTyxDQUFDLEdBQUcsU0FBUyxRQUFRLE1BQU87QUFBQSxNQUNyQztBQUFBLElBQ0YsT0FBTztBQUNMLFlBQU0sVUFBVSxNQUFNLFFBQVEsS0FBSyxNQUFNLElBQUksS0FBSyxTQUFTLENBQUMsS0FBSyxNQUFNO0FBQ3ZFLGFBQU8sU0FBUyxDQUFDLEdBQUcsU0FBUyxRQUFRLE1BQU07QUFBQSxJQUM3QztBQUFBLEVBQ0Y7QUFFQSxNQUFJLFFBQVEsV0FBVyxRQUFXO0FBQ2hDLFFBQUksS0FBSyxXQUFXLFFBQVc7QUFDN0IsYUFBTyxTQUFTLFFBQVE7QUFBQSxJQUMxQixXQUFXLE9BQU8sS0FBSyxXQUFXLFlBQVk7QUFDNUMsWUFBTSxTQUFTLEtBQUs7QUFDcEIsYUFBTyxTQUFTLE9BQU8sU0FBUztBQUM5QixjQUFNLFdBQVcsTUFBTSxPQUFPLElBQUk7QUFDbEMsZUFBTyxDQUFDLEdBQUksWUFBWSxDQUFDLEdBQUksR0FBRyxRQUFRLE1BQU87QUFBQSxNQUNqRDtBQUFBLElBQ0YsT0FBTztBQUNMLGFBQU8sU0FBUyxDQUFDLEdBQUcsS0FBSyxRQUFRLEdBQUcsUUFBUSxNQUFNO0FBQUEsSUFDcEQ7QUFBQSxFQUNGO0FBRUEsU0FBTztBQUNUOzs7QUNyQkEsSUFBTSxxQkFBcUIsb0JBQUksSUFBc0I7QUFFckQsZUFBc0Isc0JBQXNCLE1BR2Y7QUFDM0IsUUFBTSxFQUFFLE1BQU0sT0FBTyxJQUFJO0FBRXpCLE1BQUksQ0FBQyxPQUFPLE9BQU8sUUFBUSxJQUFJLEdBQUc7QUFDaEMsV0FBTztBQUFBLEVBQ1Q7QUFFQSxRQUFNLFFBQVEsT0FBTyxJQUFJO0FBQ3pCLFFBQU0sV0FBVyxPQUFPLEtBQUssVUFBVSxNQUFNLE1BQU07QUFDbkQsUUFBTSxTQUFTLG1CQUFtQixJQUFJLFFBQVE7QUFDOUMsTUFBSSxRQUFRO0FBQ1YsV0FBTztBQUFBLEVBQ1Q7QUFFQSxRQUFNLFdBQVcsTUFBTSxhQUFhLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbkQscUJBQW1CLElBQUksVUFBVSxRQUFRO0FBQ3pDLFNBQU87QUFDVDtBQUVBLGVBQWUsYUFBYSxNQUdOO0FBQ3BCLFFBQU0sRUFBRSxNQUFNLE1BQU0sSUFBSTtBQUV4QixNQUFJLE9BQU8sTUFBTSxXQUFXLFlBQVk7QUFDdEMsVUFBTSxNQUFNLE1BQU0sTUFBTSxPQUFPO0FBQy9CLFFBQUksQ0FBQyxJQUFJLFNBQVM7QUFDaEIsWUFBTSxJQUFJO0FBQUEsUUFDUixVQUFVLElBQUk7QUFBQTtBQUFBLGVBQ0ksSUFBSTtBQUFBO0FBQUE7QUFBQSwwQkFFTyxJQUFJO0FBQUE7QUFBQSxNQUNuQztBQUFBLElBQ0Y7QUFFQSxVQUFNLFdBQVcsSUFBSTtBQUVyQixRQUFJLFVBQVUsTUFBTSxNQUFNLEdBQUc7QUFDM0IsYUFBTyxTQUFTO0FBQUEsUUFBTyxDQUFDLFNBQ3RCLHNCQUFzQixNQUFNLE1BQU0sTUFBTTtBQUFBLE1BQzFDO0FBQUEsSUFDRjtBQUVBLFdBQU87QUFBQSxFQUNUO0FBRUEsU0FBTyxNQUFZLE1BQU0sTUFBTSxNQUFNO0FBQ3ZDO0FBRUEsU0FBUyxVQUFVLFFBQWdDO0FBQ2pELFNBQU8sT0FBTyxLQUFLLE1BQU0sRUFBRSxTQUFTO0FBQ3RDOzs7QTVDeEVPLElBQU0sVUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVNyQixjQUFjO0FBQ2hCOyIsCiAgIm5hbWVzIjogWyJsb2ciLCAic25hcHNob3QiLCAibG9nIiwgImxvYWRTYW5kYm94U0RLIiwgImdldFRlc3RDcmVkZW50aWFscyIsICJsb2ciLCAic25hcHNob3QiLCAiYWdlbnQiLCAic2V0dXAiLCAic3RhcnRXb3JrZmxvdyIsICJzZGsiLCAiaW5zdGFuY2UiLCAicGF0aCIsICJyZXNvbHZlIiwgInBhdGgiLCAiZnMiLCAiaW1wb3J0X3VsaWQiLCAicGF0aCIsICJyZXNvbHZlIiwgImZzIiwgInJlc29sdmUiLCAiaW1wb3J0X3NlcmRlIiwgImltcG9ydF91bGlkIiwgInZlcmNlbFNhbmRib3giLCAiZG9ja2VyU2FuZGJveCIsICJsb2NhbFNhbmRib3giLCAiYWdlbnQiLCAibG9nIiwgInJlc29sdmUiLCAiYWdlbnQiLCAiaW1wb3J0X3VsaWQiLCAidXNhZ2UiLCAiZXJyb3JlIiwgImltcG9ydF91bGlkIiwgImltcG9ydF9haSIsICJhZ2VudCIsICJsb2ciLCAicmVhZEZpbGUiLCAicmVzb2x2ZSIsICJsb2ciLCAiaW1wb3J0X2FpIiwgImltcG9ydF91bGlkIiwgImltcG9ydF96b2QiLCAiZXhlYyIsICJhZ2VudCIsICJpbXBvcnRfYWkiLCAiYWdlbnQiLCAicGF0aCIsICJjcmVhdGVQcm9jZXNzTWFuYWdlciIsICJzdGFydCIsICJzdGF0ZSIsICJhZ2VudCIsICJyZXNvbHZlIiwgImxvZyIsICJzYW5kYm94IiwgInNhbmRib3hSZWNvcmQiLCAic3RyZWFtIiwgInN0cmVhbVRleHRBaSIsICJ1c2FnZSIsICJhZ2VudCIsICJsb2ciLCAidXNhZ2UiLCAibm93IiwgImlkIiwgImVycm9yZSIsICJhZ2VudCIsICJyZXNvbHZlIiwgInJlYWRGaWxlIiwgImFsbCIsICJlcnJvcmUiLCAiaW1wb3J0X3pvZCIsICJhZ2VudCIsICJhZ2VudCIsICJsb2ciXQp9Cg==
|
|
5449
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL3V0aWxzL2xvZ2dlci50cyIsICIuLi9zcmMvc2FuZGJveC9iaW5kaW5ncy92ZXJjZWwtbGlmZWN5Y2xlL3N0ZXBzLnRzIiwgIi4uL3NyYy9zYW5kYm94L2JpbmRpbmdzL3ZlcmNlbC1saWZlY3ljbGUvd29ya2Zsb3cudHMiLCAiLi4vc3JjL3NhbmRib3gvYmluZGluZ3MvdmVyY2VsLnRzIiwgIi4uL3NyYy9zYW5kYm94L2JpbmRpbmdzL2RvY2tlci50cyIsICIuLi9zcmMvc2FuZGJveC9iaW5kaW5ncy9sb2NhbC50cyIsICIuLi9zcmMvc2FuZGJveC9wcm9jZXNzLW1hbmFnZXIudHMiLCAiLi4vc3JjL2ZyYW1ld29yay1ydW50aW1lL2luZGV4LnRzIiwgIi4uL3NyYy9hZ2VudC9jbGllbnQudHMiLCAiLi4vc3JjL3NhbmRib3gvaGFuZGxlLnRzIiwgIi4uL3NyYy9hZ2VudC9pcy12ZXJjZWwudHMiLCAiLi4vc3JjL2Vycm9ycy50cyIsICIuLi9zcmMvc2FuZGJveC9zZXR1cC50cyIsICIuLi9zcmMvc2FuZGJveC9leGVjLnRzIiwgIi4uL3NyYy9zYW5kYm94L2dldC1kb21haW4udHMiLCAiLi4vc3JjL3NhbmRib3gvZ2V0LXN0YXR1cy50cyIsICIuLi9zcmMvc2FuZGJveC9raWxsLnRzIiwgIi4uL3NyYy9zYW5kYm94L3JlYWQtZmlsZS50cyIsICIuLi9zcmMvc2FuZGJveC9zbmFwc2hvdC50cyIsICIuLi9zcmMvc2FuZGJveC9zdGFydC50cyIsICIuLi9zcmMvc2FuZGJveC9zdG9wLnRzIiwgIi4uL3NyYy9zYW5kYm94L3VwZGF0ZS1uZXR3b3JrLXBvbGljeS50cyIsICIuLi9zcmMvc2FuZGJveC93cml0ZS1maWxlcy50cyIsICIuLi9zcmMvc2Vzc2lvbi9oYW5kbGUudHMiLCAiLi4vc3JjL3V0aWxzL3VpLnRzIiwgIi4uL3NyYy91dGlscy91c2FnZS50cyIsICIuLi9zcmMvc2Vzc2lvbi9oaXN0b3J5LnRzIiwgIi4uL3NyYy9zZXNzaW9uL2ludGVycnVwdC50cyIsICIuLi9zcmMvc2Vzc2lvbi9zZW5kLnRzIiwgIi4uL3NyYy9zZXNzaW9uL2FpLWxvb3Avc3RyZWFtLXRleHQudHMiLCAiLi4vc3JjL3NraWxscy9kaXNjb3Zlci50cyIsICIuLi9zcmMvc2tpbGxzL3BhcnNlci50cyIsICIuLi9zcmMvc2tpbGxzL3Jlc29sdmUudHMiLCAiLi4vc3JjL3NraWxscy9yZXNvbHZlLWhvc3QudHMiLCAiLi4vc3JjL3NraWxscy9yZXNvbHZlLWlubGluZS50cyIsICIuLi9zcmMvc2tpbGxzL3Jlc29sdmUtcmVtb3RlLnRzIiwgIi4uL3NyYy90b29scy9pbmRleC50cyIsICIuLi9zcmMvdG9vbHMvamF2YXNjcmlwdC50cyIsICIuLi9zcmMvdG9vbHMvbmVlZHMtYXBwcm92YWwudHMiLCAiLi4vc3JjL3Rvb2xzL3Rvb2wudHMiLCAiLi4vc3JjL3V0aWxzL3Byb21wdC1jYWNoZS50cyIsICIuLi9zcmMvc2Vzc2lvbi9zdHJlYW0udHMiLCAiLi4vc3JjL3Nlc3Npb24vdXBkYXRlLnRzIiwgIi4uL3NyYy9zZXNzaW9uL3VzYWdlLnRzIiwgIi4uL3NyYy9zdG9yYWdlL2FkYXB0ZXIudHMiLCAiLi4vc3JjL3N0b3JhZ2UvYmluZGluZ3Mva3Ytb3B0aW1pc3RpYy11cGRhdGUudHMiLCAiLi4vc3JjL3N0b3JhZ2UvYmluZGluZ3Mva3YudHMiLCAiLi4vc3JjL3N0b3JhZ2UvYmluZGluZ3MvbG9jYWwudHMiLCAiLi4vc3JjL3N0b3JhZ2Uvc2hvdWxkLWZhbGxiYWNrLWt2Mi50cyIsICIuLi9zcmMvYWdlbnQvcmVnaXN0cnkudHMiLCAiLi4vc3JjL2ZyYW1ld29yay1ydW50aW1lL21lcmdlLW9wdGlvbnMudHMiLCAiLi4vc3JjL2ZyYW1ld29yay1ydW50aW1lL3Jlc29sdmUudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImV4cG9ydCB0eXBlIExvZ0xldmVsID0gXCJpbmZvXCIgfCBcIndhcm5cIiB8IFwiZXJyb3JcIiB8IFwic2lsZW50XCI7XG5cbmNvbnN0IExPR19MRVZFTF9QUklPUklUWTogUmVjb3JkPExvZ0xldmVsLCBudW1iZXI+ID0ge1xuICBpbmZvOiAwLFxuICB3YXJuOiAxLFxuICBlcnJvcjogMixcbiAgc2lsZW50OiAzLFxufTtcblxuZXhwb3J0IHR5cGUgTG9nQ29udGV4dCA9IHtcbiAgc2Vzc2lvbklkPzogc3RyaW5nO1xuICBtZXNzYWdlSWQ/OiBzdHJpbmc7XG4gIHNhbmRib3hJZD86IHN0cmluZztcbiAgW2tleTogc3RyaW5nXTogdW5rbm93bjtcbn07XG5cbmV4cG9ydCB0eXBlIExvZ2dpbmdDb25maWcgPSB7XG4gIGxldmVsPzogTG9nTGV2ZWw7XG4gIC8qKlxuICAgKiBUb3AtbGV2ZWwgbGFiZWwgZm9yIGFsbCBsb2cgbGluZXMuXG4gICAqIEBkZWZhdWx0IFwiYWdlbnRcIlxuICAgKiBAZXhhbXBsZSBcIm15LWFwcFwiIFx1MjE5MiBbbXktYXBwOmRlZmF1bHQ6d29ya2Zsb3ddXG4gICAqL1xuICBwcmVmaXg/OiBzdHJpbmc7XG4gIG5hbWU/OiBzdHJpbmc7XG59O1xuXG5mdW5jdGlvbiBnZXRMZXZlbChjb25maWc6IExvZ2dpbmdDb25maWcpOiBMb2dMZXZlbCB7XG4gIHJldHVybiBjb25maWcubGV2ZWwgPz8gXCJ3YXJuXCI7XG59XG5cbmZ1bmN0aW9uIGdldFByZWZpeChjb25maWc6IExvZ2dpbmdDb25maWcpOiBzdHJpbmcge1xuICByZXR1cm4gY29uZmlnLnByZWZpeCA/PyBcImFnZW50XCI7XG59XG5cbmZ1bmN0aW9uIHNob3VsZExvZyhjb25maWc6IExvZ2dpbmdDb25maWcsIGxldmVsOiBMb2dMZXZlbCk6IGJvb2xlYW4ge1xuICByZXR1cm4gTE9HX0xFVkVMX1BSSU9SSVRZW2xldmVsXSA+PSBMT0dfTEVWRUxfUFJJT1JJVFlbZ2V0TGV2ZWwoY29uZmlnKV07XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFRhZyhjb25maWc6IExvZ2dpbmdDb25maWcsIHN1YnN5c3RlbTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGBbJHtnZXRQcmVmaXgoY29uZmlnKX06JHtjb25maWcubmFtZX06JHtzdWJzeXN0ZW19XWA7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdERhdGEoXG4gIGNvbnRleHQ6IExvZ0NvbnRleHQsXG4gIGV4dHJhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgbWVyZ2VkID0geyAuLi5jb250ZXh0LCAuLi5leHRyYSB9O1xuICBjb25zdCBlbnRyaWVzID0gT2JqZWN0LmVudHJpZXMobWVyZ2VkKS5maWx0ZXIoXG4gICAgKFssIHZdKSA9PiB2ICE9PSB1bmRlZmluZWQgJiYgdiAhPT0gbnVsbFxuICApO1xuICBpZiAoZW50cmllcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoZW50cmllcyk7XG59XG5cbmV4cG9ydCBjbGFzcyBMb2dnZXIge1xuICByZWFkb25seSBzdWJzeXN0ZW06IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBjb25maWc6IExvZ2dpbmdDb25maWc7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29udGV4dDogTG9nQ29udGV4dDtcblxuICBjb25zdHJ1Y3Rvcih7XG4gICAgc3Vic3lzdGVtLFxuICAgIGNvbmZpZyxcbiAgICBjb250ZXh0LFxuICB9OiB7XG4gICAgc3Vic3lzdGVtOiBzdHJpbmc7XG4gICAgY29uZmlnOiBMb2dnaW5nQ29uZmlnO1xuICAgIGNvbnRleHQ/OiBMb2dDb250ZXh0O1xuICB9KSB7XG4gICAgdGhpcy5zdWJzeXN0ZW0gPSBzdWJzeXN0ZW07XG4gICAgdGhpcy5jb25maWcgPSBjb25maWc7XG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dCA/PyB7fTtcbiAgfVxuXG4gIGNoaWxkKHtcbiAgICBzdWJzeXN0ZW0sXG4gICAgY29udGV4dCxcbiAgfToge1xuICAgIHN1YnN5c3RlbT86IHN0cmluZztcbiAgICBjb250ZXh0PzogTG9nQ29udGV4dDtcbiAgfSk6IExvZ2dlciB7XG4gICAgcmV0dXJuIG5ldyBMb2dnZXIoe1xuICAgICAgY29uZmlnOiB0aGlzLmNvbmZpZyxcbiAgICAgIHN1YnN5c3RlbTogc3Vic3lzdGVtID8gYCR7dGhpcy5zdWJzeXN0ZW19OiR7c3Vic3lzdGVtfWAgOiB0aGlzLnN1YnN5c3RlbSxcbiAgICAgIGNvbnRleHQ6IHsgLi4udGhpcy5jb250ZXh0LCAuLi5jb250ZXh0IH0sXG4gICAgfSk7XG4gIH1cblxuICB3aXRoQ29udGV4dChjb250ZXh0OiBMb2dDb250ZXh0KTogTG9nZ2VyIHtcbiAgICByZXR1cm4gbmV3IExvZ2dlcih7XG4gICAgICBjb25maWc6IHRoaXMuY29uZmlnLFxuICAgICAgc3Vic3lzdGVtOiB0aGlzLnN1YnN5c3RlbSxcbiAgICAgIGNvbnRleHQ6IHsgLi4udGhpcy5jb250ZXh0LCAuLi5jb250ZXh0IH0sXG4gICAgfSk7XG4gIH1cblxuICBpbmZvKG1lc3NhZ2U6IHN0cmluZywgZGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogdm9pZCB7XG4gICAgaWYgKCFzaG91bGRMb2codGhpcy5jb25maWcsIFwiaW5mb1wiKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBkID0gZm9ybWF0RGF0YSh0aGlzLmNvbnRleHQsIGRhdGEpO1xuICAgIGlmIChkKSB7XG4gICAgICBjb25zb2xlLmluZm8oZm9ybWF0VGFnKHRoaXMuY29uZmlnLCB0aGlzLnN1YnN5c3RlbSksIG1lc3NhZ2UsIGQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmluZm8oZm9ybWF0VGFnKHRoaXMuY29uZmlnLCB0aGlzLnN1YnN5c3RlbSksIG1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuXG4gIHdhcm4obWVzc2FnZTogc3RyaW5nLCBkYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiB2b2lkIHtcbiAgICBpZiAoIXNob3VsZExvZyh0aGlzLmNvbmZpZywgXCJ3YXJuXCIpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGQgPSBmb3JtYXREYXRhKHRoaXMuY29udGV4dCwgZGF0YSk7XG4gICAgaWYgKGQpIHtcbiAgICAgIGNvbnNvbGUud2Fybihmb3JtYXRUYWcodGhpcy5jb25maWcsIHRoaXMuc3Vic3lzdGVtKSwgbWVzc2FnZSwgZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUud2Fybihmb3JtYXRUYWcodGhpcy5jb25maWcsIHRoaXMuc3Vic3lzdGVtKSwgbWVzc2FnZSk7XG4gICAgfVxuICB9XG5cbiAgZXJyb3IobWVzc2FnZTogc3RyaW5nLCBkYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiB2b2lkIHtcbiAgICBpZiAoIXNob3VsZExvZyh0aGlzLmNvbmZpZywgXCJlcnJvclwiKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBkID0gZm9ybWF0RGF0YSh0aGlzLmNvbnRleHQsIGRhdGEpO1xuICAgIGlmIChkKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGZvcm1hdFRhZyh0aGlzLmNvbmZpZywgdGhpcy5zdWJzeXN0ZW0pLCBtZXNzYWdlLCBkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5lcnJvcihmb3JtYXRUYWcodGhpcy5jb25maWcsIHRoaXMuc3Vic3lzdGVtKSwgbWVzc2FnZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0LCB3aGVuIGNhbGxlZCwgbG9ncyB0aGUgZWxhcHNlZCB0aW1lIGF0IGluZm8gbGV2ZWwuXG4gICAqIFBhc3MgYGxvZ09uU3RhcnQ6IHRydWVgIHRvIGFsc28gbG9nIHdoZW4gdGhlIHRpbWVyIGJlZ2lucy5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogY29uc3QgZG9uZSA9IGxvZy50aW1lKFwic2FuZGJveCBzZXR1cFwiLCB7IHNhbmRib3hJZCB9LCB7IGxvZ09uU3RhcnQ6IHRydWUgfSk7XG4gICAqIGF3YWl0IHNldHVwKCk7XG4gICAqIGRvbmUoKTsgLy8gc3RhcnQ6IFthZ2VudDpkZWZhdWx0OnNhbmRib3hdIHNhbmRib3ggc2V0dXAgeyBzYW5kYm94SWQ6ICcuLi4nIH1cbiAgICogICAgICAgICAvLyBlbmQ6ICAgW2FnZW50OmRlZmF1bHQ6c2FuZGJveF0gc2FuZGJveCBzZXR1cCB7IHNhbmRib3hJZDogJy4uLicsIGR1cmF0aW9uTXM6IDEyMyB9XG4gICAqL1xuICB0aW1lKFxuICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICBkYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgb3B0cz86IHsgbG9nT25TdGFydD86IGJvb2xlYW4gfVxuICApOiAoZW5kRGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiB2b2lkIHtcbiAgICBpZiAob3B0cz8ubG9nT25TdGFydCkge1xuICAgICAgdGhpcy5pbmZvKGBbc3RhcnRdICR7bWVzc2FnZX1gLCBkYXRhKTtcbiAgICB9XG4gICAgY29uc3QgdDAgPSBEYXRlLm5vdygpO1xuICAgIHJldHVybiAoZW5kRGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiB7XG4gICAgICB0aGlzLmluZm8ob3B0cz8ubG9nT25TdGFydCA/IGBbZW5kXSAke21lc3NhZ2V9YCA6IG1lc3NhZ2UsIHtcbiAgICAgICAgLi4uZGF0YSxcbiAgICAgICAgLi4uZW5kRGF0YSxcbiAgICAgICAgZHVyYXRpb25NczogRGF0ZS5ub3coKSAtIHQwLFxuICAgICAgfSk7XG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTG9nZ2VyKHtcbiAgY29uZmlnLFxuICBzdWJzeXN0ZW0sXG4gIGNvbnRleHQsXG59OiB7XG4gIGNvbmZpZzogTG9nZ2luZ0NvbmZpZztcbiAgc3Vic3lzdGVtOiBzdHJpbmc7XG4gIGNvbnRleHQ/OiBMb2dDb250ZXh0O1xufSk6IExvZ2dlciB7XG4gIHJldHVybiBuZXcgTG9nZ2VyKHsgY29uZmlnLCBzdWJzeXN0ZW0sIGNvbnRleHQgfSk7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBTYW5kYm94IGFzIFZlcmNlbFNhbmRib3hTREsgfSBmcm9tIFwiQHZlcmNlbC9zYW5kYm94XCI7XG5pbXBvcnQgeyBjcmVhdGVMb2dnZXIgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvbG9nZ2VyXCI7XG5pbXBvcnQgdHlwZSB7IFNhbmRib3hBZ2VudFJlZiB9IGZyb20gXCIuLi8uLi9hZGFwdGVyXCI7XG5pbXBvcnQgdHlwZSB7IFZlcmNlbEJpbmRpbmdNZXRhZGF0YSB9IGZyb20gXCIuLi92ZXJjZWxcIjtcblxuYXN5bmMgZnVuY3Rpb24gbG9hZFNhbmRib3hTREsoKTogUHJvbWlzZTx0eXBlb2YgVmVyY2VsU2FuZGJveFNESz4ge1xuICByZXR1cm4gKGF3YWl0IGltcG9ydChcIkB2ZXJjZWwvc2FuZGJveFwiKSkuU2FuZGJveDtcbn1cblxuY29uc3QgREVGQVVMVF9QT0xMX0lOVEVSVkFMX01TID0gMiAqIDYwICogMTAwMDtcbmNvbnN0IERFRkFVTFRfSURMRV9USU1FT1VUX01TID0gNSAqIDYwICogMTAwMDtcbmNvbnN0IFNOQVBTSE9UX0JFRk9SRV9USU1FT1VUX01TID0gMTAgKiA2MCAqIDEwMDA7XG5cbmNvbnN0IGdldFRlc3RDcmVkZW50aWFscyA9ICgpID0+XG4gIHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInRlc3RcIlxuICAgID8ge1xuICAgICAgICB0b2tlbjogcHJvY2Vzcy5lbnYuVEVTVF9WRVJDRUxfVE9LRU4sXG4gICAgICAgIHRlYW1JZDogcHJvY2Vzcy5lbnYuVEVTVF9WRVJDRUxfVEVBTV9JRCxcbiAgICAgICAgcHJvamVjdElkOiBwcm9jZXNzLmVudi5URVNUX1ZFUkNFTF9QUk9KRUNUX0lELFxuICAgICAgfVxuICAgIDoge307XG5cbmV4cG9ydCB0eXBlIExpZmVjeWNsZVN0ZXBSZXN1bHQgPVxuICB8IHsgYWN0aW9uOiBcImNvbnRpbnVlXCI7IG5leHRQb2xsTXM6IG51bWJlciB9XG4gIHwge1xuICAgICAgYWN0aW9uOiBcImV4aXRcIjtcbiAgICAgIHJlYXNvbjogXCJzYW5kYm94SWRfY2hhbmdlZFwiIHwgXCJpZGxlXCIgfCBcInRpbWVvdXRcIiB8IFwibm90X2ZvdW5kXCI7XG4gICAgfTtcblxuZXhwb3J0IHR5cGUgTGlmZWN5Y2xlQ29uZmlnID0ge1xuICBwb2xsSW50ZXJ2YWxNcz86IG51bWJlcjtcbiAgc3RvcEFmdGVySW5hY3RpdmVNcz86IG51bWJlcjtcbiAgc25hcHNob3RCZWZvcmVUaW1lb3V0TXM/OiBudW1iZXI7XG59O1xuXG5leHBvcnQgdHlwZSBMaWZlY3ljbGVJbnB1dCA9IHtcbiAgYWdlbnQ6IFNhbmRib3hBZ2VudFJlZjtcbiAgc2FuZGJveElkOiBzdHJpbmc7XG4gIHZlcmNlbFNhbmRib3hJZDogc3RyaW5nO1xuICBjb25maWc/OiBMaWZlY3ljbGVDb25maWc7XG59O1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2hlY2tBbmRTbmFwc2hvdFN0ZXAoXG4gIGlucHV0OiBMaWZlY3ljbGVJbnB1dFxuKTogUHJvbWlzZTxFcnJvciB8IExpZmVjeWNsZVN0ZXBSZXN1bHQ+IHtcbiAgXCJ1c2Ugc3RlcFwiO1xuXG4gIGNvbnN0IHN0b3JhZ2UgPSBpbnB1dC5hZ2VudC5zdG9yYWdlO1xuICBjb25zdCBsb2cgPSBjcmVhdGVMb2dnZXIoe1xuICAgIGNvbmZpZzogeyAuLi5pbnB1dC5hZ2VudC5vcHRpb25zLmxvZ2dpbmcsIG5hbWU6IGlucHV0LmFnZW50Lm5hbWUgfSxcbiAgICBzdWJzeXN0ZW06IFwic2FuZGJveDpsaWZlY3ljbGVcIixcbiAgICBjb250ZXh0OiB7IHNhbmRib3hJZDogaW5wdXQuc2FuZGJveElkIH0sXG4gIH0pO1xuXG4gIGxvZy5pbmZvKFwibGlmZWN5Y2xlIGNoZWNrIHN0YXJ0ZWRcIiwge1xuICAgIHZlcmNlbFNhbmRib3hJZDogaW5wdXQudmVyY2VsU2FuZGJveElkLFxuICB9KTtcblxuICBjb25zdCByZWNvcmQgPSBhd2FpdCBzdG9yYWdlLnNhbmRib3guZ2V0KGlucHV0LnNhbmRib3hJZCk7XG4gIGlmICghcmVjb3JkKSB7XG4gICAgbG9nLndhcm4oXCJzYW5kYm94IHJlY29yZCBub3QgZm91bmQsIGV4aXRpbmcgbGlmZWN5Y2xlXCIpO1xuICAgIHJldHVybiB7IGFjdGlvbjogXCJleGl0XCIsIHJlYXNvbjogXCJub3RfZm91bmRcIiB9O1xuICB9XG5cbiAgY29uc3QgbWV0YWRhdGEgPSByZWNvcmQuc2V0dXA/Lm1ldGFkYXRhIGFzIFZlcmNlbEJpbmRpbmdNZXRhZGF0YSB8IG51bGw7XG4gIGNvbnN0IGN1cnJlbnRTYW5kYm94SWQgPSBtZXRhZGF0YT8uc2FuZGJveElkID8/IG51bGw7XG5cbiAgaWYgKGN1cnJlbnRTYW5kYm94SWQgIT09IGlucHV0LnZlcmNlbFNhbmRib3hJZCkge1xuICAgIGxvZy5pbmZvKFwic2FuZGJveCBJRCBjaGFuZ2VkLCBleGl0aW5nIGxpZmVjeWNsZVwiLCB7XG4gICAgICBleHBlY3RlZDogaW5wdXQudmVyY2VsU2FuZGJveElkLFxuICAgICAgYWN0dWFsOiBjdXJyZW50U2FuZGJveElkLFxuICAgIH0pO1xuICAgIHJldHVybiB7IGFjdGlvbjogXCJleGl0XCIsIHJlYXNvbjogXCJzYW5kYm94SWRfY2hhbmdlZFwiIH07XG4gIH1cblxuICBpZiAoIWN1cnJlbnRTYW5kYm94SWQpIHtcbiAgICBsb2cud2FybihcIm5vIGN1cnJlbnQgc2FuZGJveCBJRCBpbiBtZXRhZGF0YSwgZXhpdGluZyBsaWZlY3ljbGVcIik7XG4gICAgcmV0dXJuIHsgYWN0aW9uOiBcImV4aXRcIiwgcmVhc29uOiBcIm5vdF9mb3VuZFwiIH07XG4gIH1cblxuICBjb25zdCBwb2xsSW50ZXJ2YWxNcyA9XG4gICAgaW5wdXQuY29uZmlnPy5wb2xsSW50ZXJ2YWxNcyA/PyBERUZBVUxUX1BPTExfSU5URVJWQUxfTVM7XG4gIGNvbnN0IGlkbGVUaW1lb3V0TXMgPVxuICAgIGlucHV0LmNvbmZpZz8uc3RvcEFmdGVySW5hY3RpdmVNcyA/PyBERUZBVUxUX0lETEVfVElNRU9VVF9NUztcbiAgY29uc3Qgc25hcHNob3RCZWZvcmVUaW1lb3V0TXMgPVxuICAgIGlucHV0LmNvbmZpZz8uc25hcHNob3RCZWZvcmVUaW1lb3V0TXMgPz8gU05BUFNIT1RfQkVGT1JFX1RJTUVPVVRfTVM7XG5cbiAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgY29uc3QgbGFzdEFjdGl2aXR5ID0gcmVjb3JkLmxhc3RBY3RpdmVBdCA/PyByZWNvcmQuY3JlYXRlZEF0ID8/IG5vdztcbiAgY29uc3QgaWRsZUR1cmF0aW9uID0gbm93IC0gbGFzdEFjdGl2aXR5O1xuICBjb25zdCBzaG91bGRTbmFwc2hvdER1ZVRvSWRsZSA9IGlkbGVEdXJhdGlvbiA+IGlkbGVUaW1lb3V0TXM7XG5cbiAgbGV0IHNob3VsZFNuYXBzaG90RHVlVG9UaW1lb3V0ID0gZmFsc2U7XG4gIHRyeSB7XG4gICAgY29uc3QgU2FuZGJveFNESyA9IGF3YWl0IGxvYWRTYW5kYm94U0RLKCk7XG4gICAgY29uc3Qgc2FuZGJveCA9IGF3YWl0IFNhbmRib3hTREsuZ2V0KHtcbiAgICAgIHNhbmRib3hJZDogY3VycmVudFNhbmRib3hJZCxcbiAgICAgIC4uLmdldFRlc3RDcmVkZW50aWFscygpLFxuICAgIH0pO1xuICAgIGlmIChzYW5kYm94LnRpbWVvdXQgPCBzbmFwc2hvdEJlZm9yZVRpbWVvdXRNcykge1xuICAgICAgc2hvdWxkU25hcHNob3REdWVUb1RpbWVvdXQgPSB0cnVlO1xuICAgIH1cbiAgfSBjYXRjaCB7XG4gICAgbG9nLndhcm4oXCJmYWlsZWQgdG8gZ2V0IHNhbmRib3ggZnJvbSBTREssIGV4aXRpbmcgbGlmZWN5Y2xlXCIsIHtcbiAgICAgIHZlcmNlbFNhbmRib3hJZDogY3VycmVudFNhbmRib3hJZCxcbiAgICB9KTtcbiAgICByZXR1cm4geyBhY3Rpb246IFwiZXhpdFwiLCByZWFzb246IFwibm90X2ZvdW5kXCIgfTtcbiAgfVxuXG4gIGlmIChzaG91bGRTbmFwc2hvdER1ZVRvSWRsZSB8fCBzaG91bGRTbmFwc2hvdER1ZVRvVGltZW91dCkge1xuICAgIGNvbnN0IHJlYXNvbiA9IHNob3VsZFNuYXBzaG90RHVlVG9JZGxlID8gXCJpZGxlXCIgOiBcInRpbWVvdXRcIjtcbiAgICBsb2cuaW5mbyhcInNuYXBzaG90dGluZyBzYW5kYm94IGJlZm9yZSBleGl0XCIsIHtcbiAgICAgIHJlYXNvbixcbiAgICAgIGlkbGVEdXJhdGlvbk1zOiBpZGxlRHVyYXRpb24sXG4gICAgICB2ZXJjZWxTYW5kYm94SWQ6IGN1cnJlbnRTYW5kYm94SWQsXG4gICAgfSk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgU2FuZGJveFNESyA9IGF3YWl0IGxvYWRTYW5kYm94U0RLKCk7XG4gICAgICBjb25zdCBzYW5kYm94ID0gYXdhaXQgU2FuZGJveFNESy5nZXQoe1xuICAgICAgICBzYW5kYm94SWQ6IGN1cnJlbnRTYW5kYm94SWQsXG4gICAgICAgIC4uLmdldFRlc3RDcmVkZW50aWFscygpLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBzbmFwc2hvdCA9IGF3YWl0IHNhbmRib3guc25hcHNob3QoKTtcbiAgICAgIGxvZy5pbmZvKFwic25hcHNob3QgY3JlYXRlZFwiLCB7IHNuYXBzaG90SWQ6IHNuYXBzaG90LnNuYXBzaG90SWQgfSk7XG5cbiAgICAgIGF3YWl0IHN0b3JhZ2Uuc2FuZGJveC51cGRhdGUoaW5wdXQuc2FuZGJveElkLCB7XG4gICAgICAgIHNldHVwOiB7XG4gICAgICAgICAgLi4ucmVjb3JkLnNldHVwLFxuICAgICAgICAgIG1ldGFkYXRhOiB7IHNhbmRib3hJZDogbnVsbCwgc25hcHNob3RJZDogc25hcHNob3Quc25hcHNob3RJZCB9LFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICBsb2cuaW5mbyhcInNhbmRib3ggcmVjb3JkIHVwZGF0ZWQgd2l0aCBzbmFwc2hvdFwiKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2cuZXJyb3IoXCJmYWlsZWQgdG8gc25hcHNob3Qgc2FuZGJveFwiLCB7IGNhdXNlOiBlIH0pO1xuICAgICAgcmV0dXJuIGUgaW5zdGFuY2VvZiBFcnJvciA/IGUgOiBuZXcgRXJyb3IoU3RyaW5nKGUpKTtcbiAgICB9XG4gICAgcmV0dXJuIHsgYWN0aW9uOiBcImV4aXRcIiwgcmVhc29uIH07XG4gIH1cblxuICBsb2cuaW5mbyhcInNhbmRib3ggc3RpbGwgYWN0aXZlLCBjb250aW51aW5nIGxpZmVjeWNsZVwiLCB7XG4gICAgaWRsZUR1cmF0aW9uTXM6IGlkbGVEdXJhdGlvbixcbiAgICBuZXh0UG9sbE1zOiBwb2xsSW50ZXJ2YWxNcyxcbiAgfSk7XG4gIHJldHVybiB7IGFjdGlvbjogXCJjb250aW51ZVwiLCBuZXh0UG9sbE1zOiBwb2xsSW50ZXJ2YWxNcyB9O1xufVxuIiwgImltcG9ydCB7IHNsZWVwIH0gZnJvbSBcIndvcmtmbG93XCI7XG5pbXBvcnQgeyBjcmVhdGVMb2dnZXIgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvbG9nZ2VyXCI7XG5pbXBvcnQgeyBjaGVja0FuZFNuYXBzaG90U3RlcCwgdHlwZSBMaWZlY3ljbGVJbnB1dCB9IGZyb20gXCIuL3N0ZXBzXCI7XG5cbmV4cG9ydCB0eXBlIHsgTGlmZWN5Y2xlSW5wdXQgfTtcblxuY29uc3QgREVGQVVMVF9QT0xMX01TID0gMiAqIDYwICogMTAwMDtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNhbmRib3hMaWZlY3ljbGVXb3JrZmxvdyh7XG4gIGlucHV0LFxufToge1xuICBpbnB1dDogTGlmZWN5Y2xlSW5wdXQ7XG59KSB7XG4gIFwidXNlIHdvcmtmbG93XCI7XG5cbiAgbGV0IG5leHRQb2xsTXMgPSBpbnB1dC5jb25maWc/LnBvbGxJbnRlcnZhbE1zID8/IERFRkFVTFRfUE9MTF9NUztcbiAgY29uc3QgbG9nID0gY3JlYXRlTG9nZ2VyKHtcbiAgICBjb25maWc6IHsgLi4uaW5wdXQuYWdlbnQub3B0aW9ucy5sb2dnaW5nLCBuYW1lOiBpbnB1dC5hZ2VudC5uYW1lIH0sXG4gICAgc3Vic3lzdGVtOiBcInNhbmRib3g6bGlmZWN5Y2xlXCIsXG4gICAgY29udGV4dDogeyBzYW5kYm94SWQ6IGlucHV0LnNhbmRib3hJZCB9LFxuICB9KTtcblxuICBsb2cuaW5mbyhcImxpZmVjeWNsZSB3b3JrZmxvdyBzdGFydGVkXCIsIHtcbiAgICBzYW5kYm94SWQ6IGlucHV0LnNhbmRib3hJZCxcbiAgICB2ZXJjZWxTYW5kYm94SWQ6IGlucHV0LnZlcmNlbFNhbmRib3hJZCxcbiAgICBwb2xsTXM6IG5leHRQb2xsTXMsXG4gIH0pO1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgYXdhaXQgc2xlZXAobmV4dFBvbGxNcyk7XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjaGVja0FuZFNuYXBzaG90U3RlcChpbnB1dCk7XG5cbiAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIGxvZy5lcnJvcihcImxpZmVjeWNsZSBzdGVwIGZhaWxlZFwiLCB7XG4gICAgICAgIHNhbmRib3hJZDogaW5wdXQuc2FuZGJveElkLFxuICAgICAgICBlcnJvcjogcmVzdWx0Lm1lc3NhZ2UsXG4gICAgICB9KTtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGlmIChyZXN1bHQuYWN0aW9uID09PSBcImV4aXRcIikge1xuICAgICAgbG9nLmluZm8oXCJsaWZlY3ljbGUgd29ya2Zsb3cgZXhpdGluZ1wiLCB7XG4gICAgICAgIHNhbmRib3hJZDogaW5wdXQuc2FuZGJveElkLFxuICAgICAgICByZWFzb246IHJlc3VsdC5yZWFzb24sXG4gICAgICB9KTtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIG5leHRQb2xsTXMgPSByZXN1bHQubmV4dFBvbGxNcztcbiAgfVxufVxuIiwgImltcG9ydCB7IHN0YXJ0IGFzIHN0YXJ0V29ya2Zsb3cgfSBmcm9tIFwid29ya2Zsb3cvYXBpXCI7XG5pbXBvcnQgdHlwZSB7IFN0b3JhZ2UgfSBmcm9tIFwiLi4vLi4vc3RvcmFnZVwiO1xuaW1wb3J0IHR5cGUgeyBMb2dnZXIgfSBmcm9tIFwiLi4vLi4vdXRpbHMvbG9nZ2VyXCI7XG5pbXBvcnQgdHlwZSB7IEV4ZWNSZXN1bHQsIFNhbmRib3hCaW5kaW5nLCBTYW5kYm94SW5zdGFuY2UgfSBmcm9tIFwiLi4vYWRhcHRlclwiO1xuaW1wb3J0IHR5cGUgeyBMaWZlY3ljbGVDb25maWcgfSBmcm9tIFwiLi92ZXJjZWwtbGlmZWN5Y2xlL3N0ZXBzXCI7XG5pbXBvcnQgeyBzYW5kYm94TGlmZWN5Y2xlV29ya2Zsb3cgfSBmcm9tIFwiLi92ZXJjZWwtbGlmZWN5Y2xlL3dvcmtmbG93XCI7XG5cbmFzeW5jIGZ1bmN0aW9uIGxvYWRTYW5kYm94U0RLKCkge1xuICByZXR1cm4gKGF3YWl0IGltcG9ydChcIkB2ZXJjZWwvc2FuZGJveFwiKSkuU2FuZGJveDtcbn1cblxuY29uc3QgTUFYX1RJTUVPVVRfTVMgPSA1ICogNjAgKiA2MCAqIDEwMDA7IC8vIDUgaG91cnNcbmNvbnN0IEhPTUVfRElSID0gXCIvaG9tZS92ZXJjZWwtc2FuZGJveFwiO1xuY29uc3QgREVGQVVMVF9WQ1BVUyA9IDI7XG5cbmV4cG9ydCB0eXBlIFZlcmNlbEJpbmRpbmdDb25maWcgPSB7XG4gIGN3ZD86IHN0cmluZztcbiAgcmVzb3VyY2VzPzogeyB2Y3B1czogbnVtYmVyIH07XG4gIHBvcnRzPzogbnVtYmVyW107XG4gIG5ldHdvcmtQb2xpY3k/OiBpbXBvcnQoXCJAdmVyY2VsL3NhbmRib3hcIikuTmV0d29ya1BvbGljeTtcbiAgc25hcHNob3RJZD86IHN0cmluZztcbiAgbGlmZWN5Y2xlPzogTGlmZWN5Y2xlQ29uZmlnO1xufTtcblxuZXhwb3J0IHR5cGUgVmVyY2VsQmluZGluZ01ldGFkYXRhID0ge1xuICBzYW5kYm94SWQ6IHN0cmluZztcbn07XG5cbnR5cGUgQ3JlYXRlU2FuZGJveE9wdHMgPSB7XG4gIHJlc291cmNlczogeyB2Y3B1czogbnVtYmVyIH07XG4gIHBvcnRzPzogbnVtYmVyW107XG4gIG5ldHdvcmtQb2xpY3k/OiBpbXBvcnQoXCJAdmVyY2VsL3NhbmRib3hcIikuTmV0d29ya1BvbGljeTtcbiAgc25hcHNob3RJZD86IHN0cmluZztcbn07XG5cbmZ1bmN0aW9uIGlzU2FuZGJveEdvbmVFcnJvcihlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIGlmICghKGUgaW5zdGFuY2VvZiBFcnJvcikpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBzdGF0dXMgPVxuICAgIChlIGFzIHsgcmVzcG9uc2U/OiB7IHN0YXR1cz86IG51bWJlciB9IH0pLnJlc3BvbnNlPy5zdGF0dXMgPz9cbiAgICAoZSBhcyB7IGNhdXNlPzogeyByZXNwb25zZT86IHsgc3RhdHVzPzogbnVtYmVyIH0gfSB9KS5jYXVzZT8ucmVzcG9uc2VcbiAgICAgID8uc3RhdHVzO1xuXG4gIGlmIChzdGF0dXMgPT09IDQxMCB8fCBzdGF0dXMgPT09IDQyMikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgY29uc3QgbXNnID0gZS5tZXNzYWdlIHx8IFN0cmluZyhlKTtcbiAgcmV0dXJuIChcbiAgICBtc2cuaW5jbHVkZXMoXCJFeHBlY3RlZCBhIHN0cmVhbSBvZiBjb21tYW5kIGRhdGFcIikgfHxcbiAgICBtc2cuaW5jbHVkZXMoXCJFeHBlY3RlZCBhIHN0cmVhbSBvZiBsb2dzXCIpXG4gICk7XG59XG5cbmNvbnN0IGdldFRlc3RDcmVkZW50aWFscyA9ICgpID0+XG4gIHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInRlc3RcIlxuICAgID8ge1xuICAgICAgICB0b2tlbjogcHJvY2Vzcy5lbnYuVEVTVF9WRVJDRUxfVE9LRU4sXG4gICAgICAgIHRlYW1JZDogcHJvY2Vzcy5lbnYuVEVTVF9WRVJDRUxfVEVBTV9JRCxcbiAgICAgICAgcHJvamVjdElkOiBwcm9jZXNzLmVudi5URVNUX1ZFUkNFTF9QUk9KRUNUX0lELFxuICAgICAgfVxuICAgIDoge307XG5cbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVNkayh7XG4gIHJlc291cmNlcyxcbiAgcG9ydHMsXG4gIG5ldHdvcmtQb2xpY3ksXG4gIHNuYXBzaG90SWQsXG59OiBDcmVhdGVTYW5kYm94T3B0cykge1xuICBjb25zdCBTYW5kYm94U0RLID0gYXdhaXQgbG9hZFNhbmRib3hTREsoKTtcbiAgY29uc3QgYmFzZSA9IHtcbiAgICByZXNvdXJjZXMsXG4gICAgdGltZW91dDogTUFYX1RJTUVPVVRfTVMsXG4gICAgLi4uKHBvcnRzID8geyBwb3J0cyB9IDoge30pLFxuICAgIC4uLihuZXR3b3JrUG9saWN5ID8geyBuZXR3b3JrUG9saWN5IH0gOiB7fSksXG4gICAgLi4uZ2V0VGVzdENyZWRlbnRpYWxzKCksXG4gIH07XG5cbiAgaWYgKHNuYXBzaG90SWQpIHtcbiAgICByZXR1cm4gU2FuZGJveFNESy5jcmVhdGUoe1xuICAgICAgLi4uYmFzZSxcbiAgICAgIHNvdXJjZTogeyB0eXBlOiBcInNuYXBzaG90XCIgYXMgY29uc3QsIHNuYXBzaG90SWQgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBTYW5kYm94U0RLLmNyZWF0ZShiYXNlKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gY3JlYXRlU2V0dXBTbmFwc2hvdCh7XG4gIHNhbmRib3hPcHRzLFxuICBydW4sXG4gIHN0b3JhZ2UsXG4gIHNuYXBzaG90VmVyc2lvbixcbiAgbG9nLFxufToge1xuICBzYW5kYm94T3B0czogQ3JlYXRlU2FuZGJveE9wdHM7XG4gIHJ1bjogKHNhbmRib3g6IFNhbmRib3hJbnN0YW5jZSkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgc3RvcmFnZTogU3RvcmFnZTtcbiAgc25hcHNob3RWZXJzaW9uOiBzdHJpbmc7XG4gIGxvZzogTG9nZ2VyO1xufSk6IFByb21pc2U8dm9pZD4ge1xuICBsZXQgdGVtcFNkazogQXdhaXRlZDxSZXR1cm5UeXBlPHR5cGVvZiBjcmVhdGVTZGs+PiB8IG51bGwgPSBudWxsO1xuICB0cnkge1xuICAgIHRlbXBTZGsgPSBhd2FpdCBjcmVhdGVTZGsoc2FuZGJveE9wdHMpO1xuICAgIGNvbnN0IHRlbXBJbnN0YW5jZSA9IG5ldyBWZXJjZWxTYW5kYm94SW5zdGFuY2UodGVtcFNkayk7XG4gICAgYXdhaXQgcnVuKHRlbXBJbnN0YW5jZSk7XG4gICAgY29uc3Qgc25hcHNob3QgPSBhd2FpdCB0ZW1wU2RrLnNuYXBzaG90KCk7XG4gICAgYXdhaXQgc3RvcmFnZS5zZXR1cC5zZXQoc25hcHNob3RWZXJzaW9uLCB7XG4gICAgICB2ZXJzaW9uOiBzbmFwc2hvdFZlcnNpb24sXG4gICAgICBzbmFwc2hvdElkOiBzbmFwc2hvdC5zbmFwc2hvdElkLFxuICAgICAgY3JlYXRlZEF0OiBEYXRlLm5vdygpLFxuICAgICAgbGFzdFVzZWRBdDogbnVsbCxcbiAgICB9KTtcbiAgICBhd2FpdCB0ZW1wU2RrLnN0b3AoKS5jYXRjaCgoKSA9PiB1bmRlZmluZWQpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGxvZy5lcnJvcihcImZhaWxlZCB0byBjcmVhdGUgc2V0dXAgc25hcHNob3RcIiwge1xuICAgICAgc25hcHNob3RWZXJzaW9uLFxuICAgICAgY2F1c2U6IGVycm9yLFxuICAgIH0pO1xuICAgIGlmICh0ZW1wU2RrKSB7XG4gICAgICBhd2FpdCB0ZW1wU2RrLnN0b3AoKS5jYXRjaCgoKSA9PiB1bmRlZmluZWQpO1xuICAgIH1cbiAgfVxufVxuXG5jbGFzcyBWZXJjZWxTYW5kYm94SW5zdGFuY2UgaW1wbGVtZW50cyBTYW5kYm94SW5zdGFuY2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IHNkazogaW1wb3J0KFwiQHZlcmNlbC9zYW5kYm94XCIpLlNhbmRib3g7XG4gIHJlYWRvbmx5IGN3ZDogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHNkazogaW1wb3J0KFwiQHZlcmNlbC9zYW5kYm94XCIpLlNhbmRib3gsIGN3ZD86IHN0cmluZykge1xuICAgIHRoaXMuc2RrID0gc2RrO1xuICAgIHRoaXMuY3dkID0gY3dkID8/IEhPTUVfRElSO1xuICB9XG5cbiAgYXN5bmMgZXhlYyh7XG4gICAgY29tbWFuZCxcbiAgICBhcmdzLFxuICAgIGN3ZCxcbiAgICBlbnYsXG4gICAgc3VkbyxcbiAgICBzaWduYWwsXG4gIH06IHtcbiAgICBjb21tYW5kOiBzdHJpbmc7XG4gICAgYXJncz86IHN0cmluZ1tdO1xuICAgIGN3ZD86IHN0cmluZztcbiAgICBlbnY/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgIHN1ZG8/OiBib29sZWFuO1xuICAgIHNpZ25hbD86IEFib3J0U2lnbmFsO1xuICB9KTogUHJvbWlzZTxFeGVjUmVzdWx0PiB7XG4gICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgdGhpcy5zZGsucnVuQ29tbWFuZCh7XG4gICAgICBjbWQ6IGNvbW1hbmQsXG4gICAgICBhcmdzLFxuICAgICAgY3dkOiBjd2QgPz8gdGhpcy5jd2QsXG4gICAgICBlbnYsXG4gICAgICBzdWRvLFxuICAgICAgc2lnbmFsLFxuICAgICAgZGV0YWNoZWQ6IHRydWUsXG4gICAgfSk7XG5cbiAgICBsZXQgc3Rkb3V0ID0gXCJcIjtcbiAgICBsZXQgc3RkZXJyID0gXCJcIjtcbiAgICBjb25zdCBsb2dCdWZmZXI6IHsgc3RyZWFtOiBcInN0ZG91dFwiIHwgXCJzdGRlcnJcIjsgZGF0YTogc3RyaW5nIH1bXSA9IFtdO1xuICAgIGNvbnN0IHN0YXRlID0ge1xuICAgICAgcmVzb2x2ZTogbnVsbCBhcyAoKCkgPT4gdm9pZCkgfCBudWxsLFxuICAgICAgY29uc3VtZWQ6IGZhbHNlLFxuICAgIH07XG5cbiAgICBjb25zdCBjb25zdW1lTG9ncyA9IChhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBmb3IgYXdhaXQgKGNvbnN0IGVudHJ5IG9mIG91dHB1dC5sb2dzKCkpIHtcbiAgICAgICAgICBpZiAoZW50cnkuc3RyZWFtID09PSBcInN0ZG91dFwiKSB7XG4gICAgICAgICAgICBzdGRvdXQgKz0gZW50cnkuZGF0YTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3RkZXJyICs9IGVudHJ5LmRhdGE7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbG9nQnVmZmVyLnB1c2goZW50cnkpO1xuICAgICAgICAgIHN0YXRlLnJlc29sdmU/LigpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gU2FuZGJveCBtYXkgaGF2ZSBiZWVuIHN0b3BwZWQgXHUyMDE0IGxvZ3MgZW5kcG9pbnQgcmV0dXJucyA0MjJcbiAgICAgIH1cbiAgICAgIHN0YXRlLmNvbnN1bWVkID0gdHJ1ZTtcbiAgICAgIHN0YXRlLnJlc29sdmU/LigpO1xuICAgIH0pKCk7XG5cbiAgICBhc3luYyBmdW5jdGlvbiogbG9ncygpOiBBc3luY0l0ZXJhYmxlPHtcbiAgICAgIHN0cmVhbTogXCJzdGRvdXRcIiB8IFwic3RkZXJyXCI7XG4gICAgICBkYXRhOiBzdHJpbmc7XG4gICAgfT4ge1xuICAgICAgbGV0IGluZGV4ID0gMDtcbiAgICAgIHdoaWxlICghc3RhdGUuY29uc3VtZWQgfHwgaW5kZXggPCBsb2dCdWZmZXIubGVuZ3RoKSB7XG4gICAgICAgIGlmIChpbmRleCA8IGxvZ0J1ZmZlci5sZW5ndGgpIHtcbiAgICAgICAgICB5aWVsZCBsb2dCdWZmZXJbaW5kZXgrK107XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHIpID0+IHtcbiAgICAgICAgICAgIHN0YXRlLnJlc29sdmUgPSByO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHN0YXRlLnJlc29sdmUgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gY29uc3VtZUxvZ3MudGhlbihhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBmaW5pc2hlZCA9IGF3YWl0IG91dHB1dC53YWl0KCk7XG4gICAgICAgIHJldHVybiB7IHN0ZG91dCwgc3RkZXJyLCBleGl0Q29kZTogZmluaXNoZWQuZXhpdENvZGUgfTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKGlzU2FuZGJveEdvbmVFcnJvcihlKSkge1xuICAgICAgICAgIHJldHVybiB7IHN0ZG91dCwgc3RkZXJyLCBleGl0Q29kZTogMSB9O1xuICAgICAgICB9XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4geyBjb21tYW5kSWQ6IG91dHB1dC5jbWRJZCwgbG9ncywgcmVzdWx0IH07XG4gIH1cblxuICBhc3luYyByZWFkRmlsZSh7XG4gICAgcGF0aDogZmlsZVBhdGgsXG4gIH06IHtcbiAgICBwYXRoOiBzdHJpbmc7XG4gICAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG4gIH0pOiBQcm9taXNlPEJ1ZmZlciB8IG51bGw+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuc2RrLnJlYWRGaWxlVG9CdWZmZXIoeyBwYXRoOiBmaWxlUGF0aCwgY3dkOiB0aGlzLmN3ZCB9KTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHdyaXRlRmlsZXMoe1xuICAgIGZpbGVzLFxuICAgIGRlc3RQYXRoLFxuICB9OiB7XG4gICAgZmlsZXM6IHsgcGF0aDogc3RyaW5nOyBjb250ZW50OiBzdHJpbmcgfCBCdWZmZXIgfVtdO1xuICAgIGRlc3RQYXRoOiBzdHJpbmc7XG4gICAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG4gIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoZmlsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcGF0aCA9IGF3YWl0IGltcG9ydChcIm5vZGU6cGF0aFwiKTtcbiAgICBjb25zdCBuYXRpdmVGaWxlcyA9IGZpbGVzLm1hcCgoZmlsZSkgPT4ge1xuICAgICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLnBvc2l4LmpvaW4oZGVzdFBhdGgsIGZpbGUucGF0aCk7XG4gICAgICBjb25zdCBhYnNvbHV0ZVBhdGggPSBwYXRoLnBvc2l4LmlzQWJzb2x1dGUoZmlsZVBhdGgpXG4gICAgICAgID8gZmlsZVBhdGhcbiAgICAgICAgOiBwYXRoLnBvc2l4LmpvaW4odGhpcy5jd2QsIGZpbGVQYXRoKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHBhdGg6IGFic29sdXRlUGF0aCxcbiAgICAgICAgY29udGVudDpcbiAgICAgICAgICB0eXBlb2YgZmlsZS5jb250ZW50ID09PSBcInN0cmluZ1wiXG4gICAgICAgICAgICA/IEJ1ZmZlci5mcm9tKGZpbGUuY29udGVudClcbiAgICAgICAgICAgIDogZmlsZS5jb250ZW50LFxuICAgICAgfTtcbiAgICB9KTtcblxuICAgIGF3YWl0IHRoaXMuc2RrLndyaXRlRmlsZXMobmF0aXZlRmlsZXMpO1xuXG4gICAgY29uc3Qgc2hlbGxTY3JpcHRzID0gbmF0aXZlRmlsZXMuZmlsdGVyKChmKSA9PiBmLnBhdGguZW5kc1dpdGgoXCIuc2hcIikpO1xuICAgIGlmIChzaGVsbFNjcmlwdHMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5leGVjKHtcbiAgICAgICAgY29tbWFuZDogXCJjaG1vZFwiLFxuICAgICAgICBhcmdzOiBbXCIreFwiLCAuLi5zaGVsbFNjcmlwdHMubWFwKChmKSA9PiBmLnBhdGgpXSxcbiAgICAgIH0pO1xuICAgICAgYXdhaXQgcmVzdWx0LnJlc3VsdDtcbiAgICB9XG4gIH1cblxuICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL3VzZUF3YWl0OiBzeW5jaHJvbm91cyBTREsgY2FsbFxuICBhc3luYyBnZXREb21haW4oe1xuICAgIHBvcnQsXG4gIH06IHtcbiAgICBwb3J0OiBudW1iZXI7XG4gICAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG4gIH0pOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLnNkay5kb21haW4ocG9ydCk7XG4gIH1cblxuICBhc3luYyBraWxsKHtcbiAgICBjb21tYW5kSWQsXG4gIH06IHtcbiAgICBjb21tYW5kSWQ6IHN0cmluZztcbiAgICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbiAgfSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGNtZCA9IGF3YWl0IHRoaXMuc2RrLmdldENvbW1hbmQoY29tbWFuZElkKTtcbiAgICBhd2FpdCBjbWQua2lsbCgpO1xuICB9XG5cbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy91c2VBd2FpdDogc3luY2hyb25vdXMgU0RLIGdldHRlclxuICBhc3luYyBnZXRTdGF0dXMoKTogUHJvbWlzZTxcbiAgICBcInBlbmRpbmdcIiB8IFwicnVubmluZ1wiIHwgXCJzdG9wcGluZ1wiIHwgXCJzdG9wcGVkXCIgfCBcImZhaWxlZFwiXG4gID4ge1xuICAgIGNvbnN0IHN0YXR1cyA9IHRoaXMuc2RrLnN0YXR1cztcbiAgICAvLyBNYXAgU0RLLW9ubHkgc3RhdHVzZXMgdG8gb3VyIGludGVyZmFjZSdzIHVuaW9uXG4gICAgaWYgKHN0YXR1cyA9PT0gXCJzbmFwc2hvdHRpbmdcIikge1xuICAgICAgcmV0dXJuIFwic3RvcHBpbmdcIjtcbiAgICB9XG4gICAgaWYgKHN0YXR1cyA9PT0gXCJhYm9ydGVkXCIpIHtcbiAgICAgIHJldHVybiBcImZhaWxlZFwiO1xuICAgIH1cbiAgICByZXR1cm4gc3RhdHVzO1xuICB9XG5cbiAgYXN5bmMgc3RhcnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gVGhlIFZlcmNlbCBTREsgZG9lc24ndCBoYXZlIGEgcmVzdW1lIG1ldGhvZC5cbiAgICAvLyBSdW4gYSBuby1vcCBjb21tYW5kIHRvIHZlcmlmeSB0aGUgc2FuZGJveCBpcyByZWFjaGFibGUuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5leGVjKHsgY29tbWFuZDogXCJ0cnVlXCIgfSk7XG4gICAgYXdhaXQgcmVzdWx0LnJlc3VsdDtcbiAgfVxuXG4gIGFzeW5jIHN0b3AoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5zZGsuc3RvcCgpO1xuICB9XG5cbiAgYXN5bmMgc25hcHNob3QoKTogUHJvbWlzZTx7IHNuYXBzaG90SWQ6IHN0cmluZyB9PiB7XG4gICAgY29uc3Qgc25hcCA9IGF3YWl0IHRoaXMuc2RrLnNuYXBzaG90KCk7XG4gICAgcmV0dXJuIHsgc25hcHNob3RJZDogc25hcC5zbmFwc2hvdElkIH07XG4gIH1cblxuICBhc3luYyB1cGRhdGVOZXR3b3JrUG9saWN5KHtcbiAgICBwb2xpY3ksXG4gIH06IHtcbiAgICBwb2xpY3k6IGltcG9ydChcIkB2ZXJjZWwvc2FuZGJveFwiKS5OZXR3b3JrUG9saWN5O1xuICAgIHNpZ25hbD86IEFib3J0U2lnbmFsO1xuICB9KTogUHJvbWlzZTxpbXBvcnQoXCJAdmVyY2VsL3NhbmRib3hcIikuTmV0d29ya1BvbGljeT4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLnNkay51cGRhdGVOZXR3b3JrUG9saWN5KHBvbGljeSk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZlcmNlbFNhbmRib3goXG4gIGRlZmF1bHRzPzogUGFydGlhbDxpbXBvcnQoXCIuLi9hZGFwdGVyXCIpLlNhbmRib3hTZXR1cEZpZWxkcz4gJiB7XG4gICAgcnVuPzogKHNhbmRib3g6IFNhbmRib3hJbnN0YW5jZSkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgICBjb25maWc/OiBWZXJjZWxCaW5kaW5nQ29uZmlnO1xuICB9XG4pOiBTYW5kYm94QmluZGluZzxcInZlcmNlbFwiLCBWZXJjZWxCaW5kaW5nQ29uZmlnLCBWZXJjZWxCaW5kaW5nTWV0YWRhdGE+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBcInZlcmNlbFwiLFxuICAgIGRlZmF1bHRzLFxuICAgIGFzeW5jIGNyZWF0ZSh7IGN3ZDogY3JlYXRlQ3dkLCBhZ2VudCwgc2V0dXAsIHJlY29yZCwgc2lnbmFsOiBfc2lnbmFsLCBsb2cgfSkge1xuICAgICAgY29uc3Qgc3RvcmFnZSA9IGFnZW50LnN0b3JhZ2U7XG4gICAgICBjb25zdCBjb25maWcgPSBzZXR1cC5jb25maWcgPz8ge307XG4gICAgICBjb25zdCBjd2QgPSBjb25maWcuY3dkID8/IGNyZWF0ZUN3ZCA/PyB1bmRlZmluZWQ7XG4gICAgICBjb25zdCByZXNvdXJjZXMgPSBjb25maWcucmVzb3VyY2VzID8/IHsgdmNwdXM6IERFRkFVTFRfVkNQVVMgfTtcbiAgICAgIGNvbnN0IHBvcnRzID0gY29uZmlnLnBvcnRzO1xuICAgICAgY29uc3QgbmV0d29ya1BvbGljeSA9XG4gICAgICAgIGNvbmZpZy5uZXR3b3JrUG9saWN5ID8/IHNldHVwLm5ldHdvcmtQb2xpY3kgPz8gdW5kZWZpbmVkO1xuXG4gICAgICBjb25zdCBzYW5kYm94T3B0czogQ3JlYXRlU2FuZGJveE9wdHMgPSB7XG4gICAgICAgIHJlc291cmNlcyxcbiAgICAgICAgcG9ydHMsXG4gICAgICAgIG5ldHdvcmtQb2xpY3ksXG4gICAgICAgIHNuYXBzaG90SWQ6IGNvbmZpZy5zbmFwc2hvdElkLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgX3N0YXJ0TGlmZWN5Y2xlID0gKHZlcmNlbFNhbmRib3hJZDogc3RyaW5nKSA9PiB7XG4gICAgICAgIGlmICghcmVjb3JkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHN0YXJ0V29ya2Zsb3coc2FuZGJveExpZmVjeWNsZVdvcmtmbG93LCBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgaW5wdXQ6IHtcbiAgICAgICAgICAgICAgYWdlbnQsXG4gICAgICAgICAgICAgIHNhbmRib3hJZDogcmVjb3JkLmlkLFxuICAgICAgICAgICAgICB2ZXJjZWxTYW5kYm94SWQsXG4gICAgICAgICAgICAgIGNvbmZpZzogY29uZmlnLmxpZmVjeWNsZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgXSkuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICBsb2cuZXJyb3IoXCJmYWlsZWQgdG8gc3RhcnQgbGlmZWN5Y2xlIHdvcmtmbG93XCIsIHsgY2F1c2U6IGUgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgICAgaWYgKHNldHVwLnZlcnNpb24pIHtcbiAgICAgICAgY29uc3QgZXhpc3RpbmcgPSBhd2FpdCBzdG9yYWdlLnNldHVwLmdldChzZXR1cC52ZXJzaW9uKTtcbiAgICAgICAgaWYgKGV4aXN0aW5nPy5zbmFwc2hvdElkKSB7XG4gICAgICAgICAgY29uc3Qgc2RrID0gYXdhaXQgY3JlYXRlU2RrKHtcbiAgICAgICAgICAgIC4uLnNhbmRib3hPcHRzLFxuICAgICAgICAgICAgc25hcHNob3RJZDogZXhpc3Rpbmcuc25hcHNob3RJZCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBWZXJjZWxTYW5kYm94SW5zdGFuY2Uoc2RrLCBjd2QpO1xuXG4gICAgICAgICAgc3RvcmFnZS5zZXR1cFxuICAgICAgICAgICAgLnNldChzZXR1cC52ZXJzaW9uLCB7XG4gICAgICAgICAgICAgIC4uLmV4aXN0aW5nLFxuICAgICAgICAgICAgICB2ZXJzaW9uOiBzZXR1cC52ZXJzaW9uLFxuICAgICAgICAgICAgICBsYXN0VXNlZEF0OiBEYXRlLm5vdygpLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5jYXRjaCgoKSA9PiB1bmRlZmluZWQpO1xuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGluc3RhbmNlLFxuICAgICAgICAgICAgbWV0YWRhdGE6IHsgc2FuZGJveElkOiBzZGsuc2FuZGJveElkIH0sXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoc2V0dXAucnVuKSB7XG4gICAgICAgIGlmICghc2V0dXAudmVyc2lvbikge1xuICAgICAgICAgIGxvZy5lcnJvcihcInNldHVwLnJ1biBwcm92aWRlZCB3aXRob3V0IHNldHVwLnZlcnNpb25cIiwgeyBzZXR1cCB9KTtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJzZXR1cC5ydW4gcHJvdmlkZWQgd2l0aG91dCBzZXR1cC52ZXJzaW9uXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNyZWF0ZVNldHVwU25hcHNob3Qoe1xuICAgICAgICAgIHNhbmRib3hPcHRzLFxuICAgICAgICAgIHJ1bjogc2V0dXAucnVuLFxuICAgICAgICAgIHN0b3JhZ2UsXG4gICAgICAgICAgc25hcHNob3RWZXJzaW9uOiBzZXR1cC52ZXJzaW9uLFxuICAgICAgICAgIGxvZyxcbiAgICAgICAgfSkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgbG9nLmVycm9yKFwiYmFja2dyb3VuZCBzZXR1cCBzbmFwc2hvdCBmYWlsZWRcIiwgeyBjYXVzZTogZXJyb3IgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHNkayA9IGF3YWl0IGNyZWF0ZVNkayhzYW5kYm94T3B0cyk7XG4gICAgICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFZlcmNlbFNhbmRib3hJbnN0YW5jZShzZGssIGN3ZCk7XG4gICAgICAgIGF3YWl0IHNldHVwLnJ1bihpbnN0YW5jZSk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBpbnN0YW5jZSxcbiAgICAgICAgICBtZXRhZGF0YTogeyBzYW5kYm94SWQ6IHNkay5zYW5kYm94SWQgfSxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2RrID0gYXdhaXQgY3JlYXRlU2RrKHNhbmRib3hPcHRzKTtcbiAgICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFZlcmNlbFNhbmRib3hJbnN0YW5jZShzZGssIGN3ZCk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGluc3RhbmNlLFxuICAgICAgICBtZXRhZGF0YTogeyBzYW5kYm94SWQ6IHNkay5zYW5kYm94SWQgfSxcbiAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGNvbm5lY3QoeyBtZXRhZGF0YSwgY3dkIH0pIHtcbiAgICAgIGNvbnN0IFNhbmRib3hTREsgPSBhd2FpdCBsb2FkU2FuZGJveFNESygpO1xuICAgICAgY29uc3Qgc2RrID0gYXdhaXQgU2FuZGJveFNESy5nZXQoe1xuICAgICAgICBzYW5kYm94SWQ6IG1ldGFkYXRhLnNhbmRib3hJZCxcbiAgICAgICAgLi4uZ2V0VGVzdENyZWRlbnRpYWxzKCksXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBuZXcgVmVyY2VsU2FuZGJveEluc3RhbmNlKHNkaywgY3dkID8/IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgfTtcbn1cbiIsICJpbXBvcnQgeyB1bGlkIH0gZnJvbSBcInVsaWRcIjtcbmltcG9ydCB0eXBlIHsgRXhlY1Jlc3VsdCwgU2FuZGJveEJpbmRpbmcsIFNhbmRib3hJbnN0YW5jZSB9IGZyb20gXCIuLi9hZGFwdGVyXCI7XG5cbmV4cG9ydCB0eXBlIERvY2tlckJpbmRpbmdDb25maWcgPSB7XG4gIGN3ZD86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIERvY2tlckJpbmRpbmdNZXRhZGF0YSA9IHtcbiAgc2FuZGJveE5hbWU6IHN0cmluZztcbn07XG5cbi8qKlxuICogUnVuIGEgYGRvY2tlciBzYW5kYm94YCBDTEkgY29tbWFuZCBhbmQgcmV0dXJuIGl0cyBvdXRwdXQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGV4ZWNEb2NrZXIoXG4gIGFyZ3M6IHN0cmluZ1tdLFxuICBvcHRzPzogeyB0aW1lb3V0TXM/OiBudW1iZXI7IHNpZ25hbD86IEFib3J0U2lnbmFsIH1cbik6IFByb21pc2U8eyBzdGRvdXQ6IHN0cmluZzsgc3RkZXJyOiBzdHJpbmc7IGV4aXRDb2RlOiBudW1iZXIgfT4ge1xuICBjb25zdCB7IHNwYXduIH0gPSBhd2FpdCBpbXBvcnQoXCJub2RlOmNoaWxkX3Byb2Nlc3NcIik7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgY2hpbGQgPSBzcGF3bihcImRvY2tlclwiLCBbXCJzYW5kYm94XCIsIC4uLmFyZ3NdLCB7XG4gICAgICBzaWduYWw6IG9wdHM/LnNpZ25hbCxcbiAgICB9KTtcblxuICAgIGxldCBzdGRvdXQgPSBcIlwiO1xuICAgIGxldCBzdGRlcnIgPSBcIlwiO1xuXG4gICAgY2hpbGQuc3Rkb3V0Lm9uKFwiZGF0YVwiLCAoZGF0YTogQnVmZmVyKSA9PiB7XG4gICAgICBzdGRvdXQgKz0gZGF0YS50b1N0cmluZygpO1xuICAgIH0pO1xuICAgIGNoaWxkLnN0ZGVyci5vbihcImRhdGFcIiwgKGRhdGE6IEJ1ZmZlcikgPT4ge1xuICAgICAgc3RkZXJyICs9IGRhdGEudG9TdHJpbmcoKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHRpbWVvdXRJZCA9IG9wdHM/LnRpbWVvdXRNc1xuICAgICAgPyBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBjaGlsZC5raWxsKFwiU0lHVEVSTVwiKTtcbiAgICAgICAgICByZWplY3QobmV3IEVycm9yKGBkb2NrZXIgc2FuZGJveCAke2FyZ3NbMF19IHRpbWVkIG91dGApKTtcbiAgICAgICAgfSwgb3B0cy50aW1lb3V0TXMpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGNoaWxkLm9uKFwiZXJyb3JcIiwgKGVycikgPT4ge1xuICAgICAgaWYgKHRpbWVvdXRJZCkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgIH1cbiAgICAgIHJlamVjdChlcnIpO1xuICAgIH0pO1xuXG4gICAgY2hpbGQub24oXCJjbG9zZVwiLCAoY29kZSkgPT4ge1xuICAgICAgaWYgKHRpbWVvdXRJZCkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgIH1cbiAgICAgIHJlc29sdmUoeyBzdGRvdXQsIHN0ZGVyciwgZXhpdENvZGU6IGNvZGUgPz8gMCB9KTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbi8qKlxuICogVHJhY2sgd2hpY2ggc2FuZGJveGVzIGhhdmUgYmVlbiB2ZXJpZmllZCB0byBleGlzdCBpbiB0aGlzIHByb2Nlc3MuXG4gKiBNYXBzIHNhbmRib3ggbmFtZSAtPiBQcm9taXNlIHNvIGNvbmN1cnJlbnQgY2FsbGVycyB3YWl0IG9uIHRoZSBzYW1lIGNoZWNrLlxuICovXG5jb25zdCBlbnN1cmVQcm9taXNlcyA9IG5ldyBNYXA8c3RyaW5nLCBQcm9taXNlPHZvaWQ+PigpO1xuXG4vKipcbiAqIFNhbmRib3hlcyB0aGF0IHRoaXMgcHJvY2VzcyBoYXMgdXNlZC4gU3RvcHBlZCBvbiBwcm9jZXNzIGV4aXQuXG4gKi9cbmNvbnN0IGFjdGl2ZVNhbmRib3hlcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG5sZXQgY2xlYW51cFJlZ2lzdGVyZWQgPSBmYWxzZTtcbmxldCBfZXhlY1N5bmM6IHR5cGVvZiBpbXBvcnQoXCJub2RlOmNoaWxkX3Byb2Nlc3NcIikuZXhlY1N5bmMgfCBudWxsID0gbnVsbDtcblxuYXN5bmMgZnVuY3Rpb24gcmVnaXN0ZXJDbGVhbnVwKCkge1xuICBpZiAoY2xlYW51cFJlZ2lzdGVyZWQpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY2xlYW51cFJlZ2lzdGVyZWQgPSB0cnVlO1xuXG4gIC8vIFByZS1sb2FkIGV4ZWNTeW5jIHNvIHRoZSBzeW5jaHJvbm91cyBleGl0IGhhbmRsZXIgY2FuIHVzZSBpdC5cbiAgY29uc3QgY3AgPSBhd2FpdCBpbXBvcnQoXCJub2RlOmNoaWxkX3Byb2Nlc3NcIik7XG4gIF9leGVjU3luYyA9IGNwLmV4ZWNTeW5jO1xuXG4gIGNvbnN0IGNsZWFudXAgPSAoKSA9PiB7XG4gICAgaWYgKCFfZXhlY1N5bmMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZm9yIChjb25zdCBuYW1lIG9mIEFycmF5LmZyb20oYWN0aXZlU2FuZGJveGVzKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgX2V4ZWNTeW5jKGBkb2NrZXIgc2FuZGJveCBzdG9wICR7bmFtZX1gLCB7XG4gICAgICAgICAgdGltZW91dDogMTBfMDAwLFxuICAgICAgICAgIHN0ZGlvOiBcInBpcGVcIixcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gQmVzdC1lZmZvcnQgXHUyMDE0IHNhbmRib3ggbWF5IGFscmVhZHkgYmUgc3RvcHBlZFxuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBwcm9jZXNzLm9uKFwiZXhpdFwiLCBjbGVhbnVwKTtcbiAgcHJvY2Vzcy5vbihcIlNJR0lOVFwiLCAoKSA9PiB7XG4gICAgY2xlYW51cCgpO1xuICAgIHByb2Nlc3MuZXhpdCgxMzApO1xuICB9KTtcbiAgcHJvY2Vzcy5vbihcIlNJR1RFUk1cIiwgKCkgPT4ge1xuICAgIGNsZWFudXAoKTtcbiAgICBwcm9jZXNzLmV4aXQoMTQzKTtcbiAgfSk7XG59XG5cbi8qKlxuICogRW5zdXJlIGEgRG9ja2VyIHNhbmRib3ggZXhpc3RzIGZvciB0aGUgZ2l2ZW4gbmFtZS5cbiAqIElmIGl0IGFscmVhZHkgZXhpc3RzIChmcm9tIGEgcHJldmlvdXMgcHJvY2VzcyksIHJldXNlcyBpdC5cbiAqIElmIGl0IGRvZXNuJ3QgZXhpc3QsIGNyZWF0ZXMgaXQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGVuc3VyZVNhbmRib3goc2FuZGJveE5hbWU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBleGlzdGluZyA9IGVuc3VyZVByb21pc2VzLmdldChzYW5kYm94TmFtZSk7XG4gIGlmIChleGlzdGluZykge1xuICAgIHJldHVybiBleGlzdGluZztcbiAgfVxuXG4gIGNvbnN0IHByb21pc2UgPSAoYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGxzID0gYXdhaXQgZXhlY0RvY2tlcihbXCJsc1wiLCBcIi1xXCJdLCB7IHRpbWVvdXRNczogMTBfMDAwIH0pO1xuICAgIGNvbnN0IGV4aXN0aW5nTmFtZXMgPVxuICAgICAgbHMuZXhpdENvZGUgPT09IDBcbiAgICAgICAgPyBscy5zdGRvdXRcbiAgICAgICAgICAgIC5zcGxpdChcIlxcblwiKVxuICAgICAgICAgICAgLm1hcCgocykgPT4gcy50cmltKCkpXG4gICAgICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgIDogW107XG5cbiAgICBpZiAoZXhpc3RpbmdOYW1lcy5pbmNsdWRlcyhzYW5kYm94TmFtZSkpIHtcbiAgICAgIGFjdGl2ZVNhbmRib3hlcy5hZGQoc2FuZGJveE5hbWUpO1xuICAgICAgcmVnaXN0ZXJDbGVhbnVwKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcGF0aCA9IGF3YWl0IGltcG9ydChcIm5vZGU6cGF0aFwiKTtcbiAgICBjb25zdCBvcyA9IGF3YWl0IGltcG9ydChcIm5vZGU6b3NcIik7XG4gICAgY29uc3QgZnMgPSBhd2FpdCBpbXBvcnQoXCJub2RlOmZzL3Byb21pc2VzXCIpO1xuXG4gICAgY29uc3Qgd29ya3NwYWNlRGlyID0gcGF0aC5qb2luKFxuICAgICAgb3MudG1wZGlyKCksXG4gICAgICBcImFnZW50LWRvY2tlci1zYW5kYm94XCIsXG4gICAgICBzYW5kYm94TmFtZVxuICAgICk7XG4gICAgYXdhaXQgZnMubWtkaXIod29ya3NwYWNlRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuICAgIGNvbnN0IGNyZWF0ZSA9IGF3YWl0IGV4ZWNEb2NrZXIoXG4gICAgICBbXCJjcmVhdGVcIiwgXCItLW5hbWVcIiwgc2FuZGJveE5hbWUsIFwic2hlbGxcIiwgd29ya3NwYWNlRGlyXSxcbiAgICAgIHsgdGltZW91dE1zOiA2MF8wMDAgfVxuICAgICk7XG5cbiAgICBpZiAoY3JlYXRlLmV4aXRDb2RlICE9PSAwKSB7XG4gICAgICBpZiAoY3JlYXRlLnN0ZGVyci5pbmNsdWRlcyhcImFscmVhZHkgZXhpc3RzXCIpKSB7XG4gICAgICAgIGFjdGl2ZVNhbmRib3hlcy5hZGQoc2FuZGJveE5hbWUpO1xuICAgICAgICByZWdpc3RlckNsZWFudXAoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgRmFpbGVkIHRvIGNyZWF0ZSBkb2NrZXIgc2FuZGJveCBcIiR7c2FuZGJveE5hbWV9XCI6ICR7Y3JlYXRlLnN0ZGVycn1gXG4gICAgICApO1xuICAgIH1cblxuICAgIGFjdGl2ZVNhbmRib3hlcy5hZGQoc2FuZGJveE5hbWUpO1xuICAgIHJlZ2lzdGVyQ2xlYW51cCgpO1xuICB9KSgpO1xuXG4gIGVuc3VyZVByb21pc2VzLnNldChzYW5kYm94TmFtZSwgcHJvbWlzZSk7XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBwcm9taXNlO1xuICB9IGNhdGNoIChlKSB7XG4gICAgZW5zdXJlUHJvbWlzZXMuZGVsZXRlKHNhbmRib3hOYW1lKTtcbiAgICB0aHJvdyBlO1xuICB9XG59XG5cbmNvbnN0IERFRkFVTFRfRE9DS0VSX0NXRCA9IFwiL2hvbWUvYWdlbnQvd29ya3NwYWNlXCI7XG5cbmNsYXNzIERvY2tlclNhbmRib3hJbnN0YW5jZSBpbXBsZW1lbnRzIFNhbmRib3hJbnN0YW5jZSB7XG4gIHJlYWRvbmx5IGN3ZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IHNhbmRib3hOYW1lOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgcHJvY2Vzc2VzID0gbmV3IE1hcDxcbiAgICBzdHJpbmcsXG4gICAgaW1wb3J0KFwibm9kZTpjaGlsZF9wcm9jZXNzXCIpLkNoaWxkUHJvY2Vzc1xuICA+KCk7XG5cbiAgY29uc3RydWN0b3Ioc2FuZGJveE5hbWU6IHN0cmluZywgY3dkPzogc3RyaW5nKSB7XG4gICAgdGhpcy5zYW5kYm94TmFtZSA9IHNhbmRib3hOYW1lO1xuICAgIHRoaXMuY3dkID0gY3dkID8/IERFRkFVTFRfRE9DS0VSX0NXRDtcbiAgfVxuXG4gIGFzeW5jIGV4ZWMob3B0czoge1xuICAgIGNvbW1hbmQ6IHN0cmluZztcbiAgICBhcmdzPzogc3RyaW5nW107XG4gICAgY3dkPzogc3RyaW5nO1xuICAgIGVudj86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgc3Vkbz86IGJvb2xlYW47XG4gICAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG4gIH0pOiBQcm9taXNlPEV4ZWNSZXN1bHQ+IHtcbiAgICBhd2FpdCBlbnN1cmVTYW5kYm94KHRoaXMuc2FuZGJveE5hbWUpO1xuXG4gICAgY29uc3QgeyBzcGF3biB9ID0gYXdhaXQgaW1wb3J0KFwibm9kZTpjaGlsZF9wcm9jZXNzXCIpO1xuICAgIGNvbnN0IGNvbW1hbmRJZCA9IGBjb21tYW5kXyR7dWxpZCgpfWA7XG4gICAgY29uc3QgZW52RmxhZ3MgPSBvcHRzLmVudlxuICAgICAgPyBPYmplY3QuZW50cmllcyhvcHRzLmVudikuZmxhdE1hcCgoW2ssIHZdKSA9PiBbXCItZVwiLCBgJHtrfT0ke3Z9YF0pXG4gICAgICA6IFtdO1xuICAgIGNvbnN0IGN3ZEZsYWdzID0gb3B0cy5jd2QgPyBbXCItd1wiLCBvcHRzLmN3ZF0gOiBbXTtcbiAgICBsZXQgYmFzZUNtZDogc3RyaW5nW107XG4gICAgaWYgKG9wdHMuc3Vkbykge1xuICAgICAgYmFzZUNtZCA9IFtcInN1ZG9cIiwgb3B0cy5jb21tYW5kLCAuLi4ob3B0cy5hcmdzID8/IFtdKV07XG4gICAgfSBlbHNlIGlmIChvcHRzLmFyZ3MpIHtcbiAgICAgIGJhc2VDbWQgPSBbb3B0cy5jb21tYW5kLCAuLi5vcHRzLmFyZ3NdO1xuICAgIH0gZWxzZSB7XG4gICAgICBiYXNlQ21kID0gW29wdHMuY29tbWFuZF07XG4gICAgfVxuICAgIGNvbnN0IGZ1bGxDbWQgPSBiYXNlQ21kO1xuXG4gICAgY29uc3QgY2hpbGQgPSBzcGF3bihcbiAgICAgIFwiZG9ja2VyXCIsXG4gICAgICBbXG4gICAgICAgIFwic2FuZGJveFwiLFxuICAgICAgICBcImV4ZWNcIixcbiAgICAgICAgLi4uZW52RmxhZ3MsXG4gICAgICAgIC4uLmN3ZEZsYWdzLFxuICAgICAgICB0aGlzLnNhbmRib3hOYW1lLFxuICAgICAgICAuLi5mdWxsQ21kLFxuICAgICAgXSxcbiAgICAgIHsgc2lnbmFsOiBvcHRzLnNpZ25hbCB9XG4gICAgKTtcblxuICAgIHRoaXMucHJvY2Vzc2VzLnNldChjb21tYW5kSWQsIGNoaWxkKTtcblxuICAgIGxldCBzdGRvdXQgPSBcIlwiO1xuICAgIGxldCBzdGRlcnIgPSBcIlwiO1xuICAgIGNvbnN0IGxvZ1F1ZXVlOiB7IHN0cmVhbTogXCJzdGRvdXRcIiB8IFwic3RkZXJyXCI7IGRhdGE6IHN0cmluZyB9W10gPSBbXTtcbiAgICBsZXQgbG9nUmVzb2x2ZTogKCgpID0+IHZvaWQpIHwgbnVsbCA9IG51bGw7XG4gICAgbGV0IGNsb3NlZCA9IGZhbHNlO1xuXG4gICAgY2hpbGQuc3Rkb3V0Lm9uKFwiZGF0YVwiLCAoZGF0YTogc3RyaW5nIHwgQnVmZmVyKSA9PiB7XG4gICAgICBjb25zdCBzdHIgPSBTdHJpbmcoZGF0YSk7XG4gICAgICBzdGRvdXQgKz0gc3RyO1xuICAgICAgbG9nUXVldWUucHVzaCh7IHN0cmVhbTogXCJzdGRvdXRcIiwgZGF0YTogc3RyIH0pO1xuICAgICAgbG9nUmVzb2x2ZT8uKCk7XG4gICAgfSk7XG5cbiAgICBjaGlsZC5zdGRlcnIub24oXCJkYXRhXCIsIChkYXRhOiBzdHJpbmcgfCBCdWZmZXIpID0+IHtcbiAgICAgIGNvbnN0IHN0ciA9IFN0cmluZyhkYXRhKTtcbiAgICAgIHN0ZGVyciArPSBzdHI7XG4gICAgICBsb2dRdWV1ZS5wdXNoKHsgc3RyZWFtOiBcInN0ZGVyclwiLCBkYXRhOiBzdHIgfSk7XG4gICAgICBsb2dSZXNvbHZlPy4oKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBQcm9taXNlPHtcbiAgICAgIHN0ZG91dDogc3RyaW5nO1xuICAgICAgc3RkZXJyOiBzdHJpbmc7XG4gICAgICBleGl0Q29kZTogbnVtYmVyO1xuICAgIH0+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNoaWxkLm9uKFwiZXJyb3JcIiwgKGVycikgPT4ge1xuICAgICAgICB0aGlzLnByb2Nlc3Nlcy5kZWxldGUoY29tbWFuZElkKTtcbiAgICAgICAgY2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgbG9nUmVzb2x2ZT8uKCk7XG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgfSk7XG5cbiAgICAgIGNoaWxkLm9uKFwiY2xvc2VcIiwgKGNvZGU6IG51bWJlciB8IG51bGwpID0+IHtcbiAgICAgICAgdGhpcy5wcm9jZXNzZXMuZGVsZXRlKGNvbW1hbmRJZCk7XG4gICAgICAgIGNsb3NlZCA9IHRydWU7XG4gICAgICAgIGxvZ1Jlc29sdmU/LigpO1xuICAgICAgICByZXNvbHZlKHsgc3Rkb3V0LCBzdGRlcnIsIGV4aXRDb2RlOiBjb2RlID8/IDAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGFzeW5jIGZ1bmN0aW9uKiBsb2dzKCk6IEFzeW5jSXRlcmFibGU8e1xuICAgICAgc3RyZWFtOiBcInN0ZG91dFwiIHwgXCJzdGRlcnJcIjtcbiAgICAgIGRhdGE6IHN0cmluZztcbiAgICB9PiB7XG4gICAgICB3aGlsZSAoIWNsb3NlZCB8fCBsb2dRdWV1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IGVudHJ5ID0gbG9nUXVldWUuc2hpZnQoKTtcbiAgICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgICAgeWllbGQgZW50cnk7XG4gICAgICAgIH0gZWxzZSBpZiAoIWNsb3NlZCkge1xuICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlPHZvaWQ+KChyKSA9PiB7XG4gICAgICAgICAgICBsb2dSZXNvbHZlID0gcjtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBsb2dSZXNvbHZlID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7IGNvbW1hbmRJZCwgbG9ncywgcmVzdWx0IH07XG4gIH1cblxuICBhc3luYyByZWFkRmlsZShvcHRzOiB7XG4gICAgcGF0aDogc3RyaW5nO1xuICAgIHNpZ25hbD86IEFib3J0U2lnbmFsO1xuICB9KTogUHJvbWlzZTxCdWZmZXIgfCBudWxsPiB7XG4gICAgYXdhaXQgZW5zdXJlU2FuZGJveCh0aGlzLnNhbmRib3hOYW1lKTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGV4ZWNEb2NrZXIoXG4gICAgICBbXG4gICAgICAgIFwiZXhlY1wiLFxuICAgICAgICB0aGlzLnNhbmRib3hOYW1lLFxuICAgICAgICBcImJhc2hcIixcbiAgICAgICAgXCItY1wiLFxuICAgICAgICBgYmFzZTY0ICcke29wdHMucGF0aC5yZXBsYWNlKC8nL2csIFwiJ1xcXFwnJ1wiKX0nYCxcbiAgICAgIF0sXG4gICAgICB7IHRpbWVvdXRNczogMzBfMDAwLCBzaWduYWw6IG9wdHMuc2lnbmFsIH1cbiAgICApO1xuXG4gICAgaWYgKHJlc3VsdC5leGl0Q29kZSAhPT0gMCkge1xuICAgICAgaWYgKFxuICAgICAgICByZXN1bHQuc3RkZXJyLmluY2x1ZGVzKFwiTm8gc3VjaCBmaWxlXCIpIHx8XG4gICAgICAgIHJlc3VsdC5zdGRlcnIuaW5jbHVkZXMoXCJFTk9FTlRcIilcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcihgcmVhZEZpbGUgZmFpbGVkOiAke3Jlc3VsdC5zdGRlcnJ9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHJlc3VsdC5zdGRvdXQudHJpbSgpLCBcImJhc2U2NFwiKTtcbiAgfVxuXG4gIGFzeW5jIHdyaXRlRmlsZXMob3B0czoge1xuICAgIGZpbGVzOiB7IHBhdGg6IHN0cmluZzsgY29udGVudDogc3RyaW5nIHwgQnVmZmVyIH1bXTtcbiAgICBkZXN0UGF0aDogc3RyaW5nO1xuICAgIHNpZ25hbD86IEFib3J0U2lnbmFsO1xuICB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgZW5zdXJlU2FuZGJveCh0aGlzLnNhbmRib3hOYW1lKTtcblxuICAgIGZvciAoY29uc3QgZmlsZSBvZiBvcHRzLmZpbGVzKSB7XG4gICAgICBjb25zdCBmdWxsUGF0aCA9IG9wdHMuZGVzdFBhdGhcbiAgICAgICAgPyBgJHtvcHRzLmRlc3RQYXRofS8ke2ZpbGUucGF0aH1gXG4gICAgICAgIDogZmlsZS5wYXRoO1xuXG4gICAgICAvLyBFbnN1cmUgcGFyZW50IGRpcmVjdG9yeSBleGlzdHNcbiAgICAgIGNvbnN0IHBhcmVudERpciA9IGZ1bGxQYXRoLnN1YnN0cmluZygwLCBmdWxsUGF0aC5sYXN0SW5kZXhPZihcIi9cIikpO1xuICAgICAgaWYgKHBhcmVudERpcikge1xuICAgICAgICBhd2FpdCBleGVjRG9ja2VyKFtcImV4ZWNcIiwgdGhpcy5zYW5kYm94TmFtZSwgXCJta2RpclwiLCBcIi1wXCIsIHBhcmVudERpcl0sIHtcbiAgICAgICAgICBzaWduYWw6IG9wdHMuc2lnbmFsLFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgLy8gV3JpdGUgdmlhIGJhc2U2NCB0byBoYW5kbGUgYm90aCB0ZXh0IGFuZCBiaW5hcnkgY29udGVudFxuICAgICAgY29uc3QgYjY0ID1cbiAgICAgICAgdHlwZW9mIGZpbGUuY29udGVudCA9PT0gXCJzdHJpbmdcIlxuICAgICAgICAgID8gQnVmZmVyLmZyb20oZmlsZS5jb250ZW50KS50b1N0cmluZyhcImJhc2U2NFwiKVxuICAgICAgICAgIDogZmlsZS5jb250ZW50LnRvU3RyaW5nKFwiYmFzZTY0XCIpO1xuXG4gICAgICBhd2FpdCBleGVjRG9ja2VyKFxuICAgICAgICBbXG4gICAgICAgICAgXCJleGVjXCIsXG4gICAgICAgICAgdGhpcy5zYW5kYm94TmFtZSxcbiAgICAgICAgICBcImJhc2hcIixcbiAgICAgICAgICBcIi1jXCIsXG4gICAgICAgICAgYGVjaG8gJyR7YjY0fScgfCBiYXNlNjQgLWQgPiAnJHtmdWxsUGF0aC5yZXBsYWNlKC8nL2csIFwiJ1xcXFwnJ1wiKX0nYCxcbiAgICAgICAgXSxcbiAgICAgICAgeyBzaWduYWw6IG9wdHMuc2lnbmFsIH1cbiAgICAgICk7XG5cbiAgICAgIGlmIChmaWxlLnBhdGguZW5kc1dpdGgoXCIuc2hcIikpIHtcbiAgICAgICAgYXdhaXQgZXhlY0RvY2tlcihbXCJleGVjXCIsIHRoaXMuc2FuZGJveE5hbWUsIFwiY2htb2RcIiwgXCIreFwiLCBmdWxsUGF0aF0sIHtcbiAgICAgICAgICBzaWduYWw6IG9wdHMuc2lnbmFsLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL3VzZUF3YWl0OiAuXG4gIGFzeW5jIGdldERvbWFpbihvcHRzOiB7XG4gICAgcG9ydDogbnVtYmVyO1xuICAgIHNpZ25hbD86IEFib3J0U2lnbmFsO1xuICB9KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gYGh0dHA6Ly9sb2NhbGhvc3Q6JHtvcHRzLnBvcnR9YDtcbiAgfVxuXG4gIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvdXNlQXdhaXQ6IC5cbiAgYXN5bmMga2lsbChvcHRzOiB7IGNvbW1hbmRJZDogc3RyaW5nOyBzaWduYWw/OiBBYm9ydFNpZ25hbCB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgY2hpbGQgPSB0aGlzLnByb2Nlc3Nlcy5nZXQob3B0cy5jb21tYW5kSWQpO1xuICAgIGlmIChjaGlsZCkge1xuICAgICAgY2hpbGQua2lsbChcIlNJR1RFUk1cIik7XG4gICAgICB0aGlzLnByb2Nlc3Nlcy5kZWxldGUob3B0cy5jb21tYW5kSWQpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvdXNlQXdhaXQ6IC5cbiAgYXN5bmMgZ2V0U3RhdHVzKCk6IFByb21pc2U8XG4gICAgXCJwZW5kaW5nXCIgfCBcInJ1bm5pbmdcIiB8IFwic3RvcHBpbmdcIiB8IFwic3RvcHBlZFwiIHwgXCJmYWlsZWRcIlxuICA+IHtcbiAgICAvLyBkb2NrZXIgc2FuZGJveCBDTEkgZG9lc24ndCBleHBvc2Ugc3RhdHVzIFx1MjAxNCBhc3N1bWUgcnVubmluZyBpZiBlbnN1cmVkXG4gICAgcmV0dXJuIFwicnVubmluZ1wiO1xuICB9XG5cbiAgYXN5bmMgc3RhcnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgZW5zdXJlU2FuZGJveCh0aGlzLnNhbmRib3hOYW1lKTtcbiAgfVxuXG4gIGFzeW5jIHN0b3AoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgZXhlY0RvY2tlcihbXCJzdG9wXCIsIHRoaXMuc2FuZGJveE5hbWVdLCB7IHRpbWVvdXRNczogMzBfMDAwIH0pO1xuICAgIGFjdGl2ZVNhbmRib3hlcy5kZWxldGUodGhpcy5zYW5kYm94TmFtZSk7XG4gICAgZW5zdXJlUHJvbWlzZXMuZGVsZXRlKHRoaXMuc2FuZGJveE5hbWUpO1xuICB9XG5cbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy91c2VBd2FpdDogLlxuICBhc3luYyBzbmFwc2hvdCgpOiBQcm9taXNlPHsgc25hcHNob3RJZDogc3RyaW5nIH0+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJzbmFwc2hvdCBpcyBub3Qgc3VwcG9ydGVkIGZvciBkb2NrZXIgc2FuZGJveGVzXCIpO1xuICB9XG5cbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy91c2VBd2FpdDogLlxuICBhc3luYyB1cGRhdGVOZXR3b3JrUG9saWN5KCk6IFByb21pc2U8bmV2ZXI+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBcInVwZGF0ZU5ldHdvcmtQb2xpY3kgaXMgbm90IHN1cHBvcnRlZCBmb3IgZG9ja2VyIHNhbmRib3hlc1wiXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZG9ja2VyU2FuZGJveChcbiAgZGVmYXVsdHM/OiBQYXJ0aWFsPGltcG9ydChcIi4uL2FkYXB0ZXJcIikuU2FuZGJveFNldHVwRmllbGRzPiAmIHtcbiAgICBydW4/OiAoc2FuZGJveDogU2FuZGJveEluc3RhbmNlKSA9PiBQcm9taXNlPHZvaWQ+O1xuICAgIGNvbmZpZz86IERvY2tlckJpbmRpbmdDb25maWc7XG4gIH1cbik6IFNhbmRib3hCaW5kaW5nPFwiZG9ja2VyXCIsIERvY2tlckJpbmRpbmdDb25maWcsIERvY2tlckJpbmRpbmdNZXRhZGF0YT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IFwiZG9ja2VyXCIsXG4gICAgZGVmYXVsdHMsXG4gICAgYXN5bmMgY3JlYXRlKG9wdHMpIHtcbiAgICAgIGNvbnN0IHNhbmRib3hOYW1lID0gYGFnZW50LSR7dWxpZCgpfWA7XG4gICAgICBjb25zdCBjd2QgPSBvcHRzLnNldHVwPy5jb25maWc/LmN3ZDtcblxuICAgICAgYXdhaXQgZW5zdXJlU2FuZGJveChzYW5kYm94TmFtZSk7XG5cbiAgICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IERvY2tlclNhbmRib3hJbnN0YW5jZShzYW5kYm94TmFtZSwgY3dkKTtcblxuICAgICAgaWYgKG9wdHMuc2V0dXA/LnJ1bikge1xuICAgICAgICBhd2FpdCBvcHRzLnNldHVwLnJ1bihpbnN0YW5jZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGluc3RhbmNlLFxuICAgICAgICBtZXRhZGF0YTogeyBzYW5kYm94TmFtZSB9LFxuICAgICAgfTtcbiAgICB9LFxuXG4gICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy91c2VBd2FpdDogLlxuICAgIGFzeW5jIGNvbm5lY3Qob3B0cykge1xuICAgICAgcmV0dXJuIG5ldyBEb2NrZXJTYW5kYm94SW5zdGFuY2Uob3B0cy5tZXRhZGF0YS5zYW5kYm94TmFtZSk7XG4gICAgfSxcbiAgfTtcbn1cbiIsICJpbXBvcnQgeyB1bGlkIH0gZnJvbSBcInVsaWRcIjtcbmltcG9ydCB0eXBlIHsgRXhlY1Jlc3VsdCwgU2FuZGJveEJpbmRpbmcsIFNhbmRib3hJbnN0YW5jZSB9IGZyb20gXCIuLi9hZGFwdGVyXCI7XG5cbmV4cG9ydCB0eXBlIExvY2FsQmluZGluZ0NvbmZpZyA9IHtcbiAgY3dkPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgTG9jYWxCaW5kaW5nTWV0YWRhdGEgPSB7XG4gIGJhc2VQYXRoOiBzdHJpbmc7XG4gIHBpZDogbnVtYmVyO1xufTtcblxuY2xhc3MgTG9jYWxTYW5kYm94SW5zdGFuY2UgaW1wbGVtZW50cyBTYW5kYm94SW5zdGFuY2Uge1xuICByZWFkb25seSBjd2Q6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBiYXNlUGF0aDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IHByb2Nlc3NlcyA9IG5ldyBNYXA8XG4gICAgc3RyaW5nLFxuICAgIGltcG9ydChcIm5vZGU6Y2hpbGRfcHJvY2Vzc1wiKS5DaGlsZFByb2Nlc3NcbiAgPigpO1xuXG4gIGNvbnN0cnVjdG9yKGJhc2VQYXRoOiBzdHJpbmcpIHtcbiAgICB0aGlzLmJhc2VQYXRoID0gYmFzZVBhdGg7XG4gICAgdGhpcy5jd2QgPSBiYXNlUGF0aDtcbiAgfVxuXG4gIGFzeW5jIGV4ZWMob3B0czoge1xuICAgIGNvbW1hbmQ6IHN0cmluZztcbiAgICBhcmdzPzogc3RyaW5nW107XG4gICAgY3dkPzogc3RyaW5nO1xuICAgIGVudj86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgc3Vkbz86IGJvb2xlYW47XG4gICAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG4gIH0pOiBQcm9taXNlPEV4ZWNSZXN1bHQ+IHtcbiAgICBjb25zdCB7IHNwYXduIH0gPSBhd2FpdCBpbXBvcnQoXCJub2RlOmNoaWxkX3Byb2Nlc3NcIik7XG4gICAgY29uc3QgcGF0aCA9IGF3YWl0IGltcG9ydChcIm5vZGU6cGF0aFwiKTtcbiAgICBjb25zdCBjb21tYW5kSWQgPSBgY29tbWFuZF8ke3VsaWQoKX1gO1xuXG4gICAgY29uc3QgZmluYWxDbWQgPSBvcHRzLnN1ZG8gPyBcInN1ZG9cIiA6IG9wdHMuY29tbWFuZDtcbiAgICBjb25zdCBmaW5hbEFyZ3MgPSBvcHRzLnN1ZG9cbiAgICAgID8gW29wdHMuY29tbWFuZCwgLi4uKG9wdHMuYXJncyA/PyBbXSldXG4gICAgICA6IChvcHRzLmFyZ3MgPz8gW10pO1xuXG4gICAgY29uc3QgY2hpbGQgPSBzcGF3bihmaW5hbENtZCwgZmluYWxBcmdzLCB7XG4gICAgICBjd2Q6IG9wdHMuY3dkID8gcGF0aC5yZXNvbHZlKHRoaXMuYmFzZVBhdGgsIG9wdHMuY3dkKSA6IHRoaXMuYmFzZVBhdGgsXG4gICAgICBlbnY6IG9wdHMuZW52ID8geyAuLi5wcm9jZXNzLmVudiwgLi4ub3B0cy5lbnYgfSA6IHVuZGVmaW5lZCxcbiAgICAgIHNpZ25hbDogb3B0cy5zaWduYWwsXG4gICAgfSk7XG5cbiAgICB0aGlzLnByb2Nlc3Nlcy5zZXQoY29tbWFuZElkLCBjaGlsZCk7XG5cbiAgICBsZXQgc3Rkb3V0ID0gXCJcIjtcbiAgICBsZXQgc3RkZXJyID0gXCJcIjtcbiAgICBjb25zdCBsb2dRdWV1ZTogeyBzdHJlYW06IFwic3Rkb3V0XCIgfCBcInN0ZGVyclwiOyBkYXRhOiBzdHJpbmcgfVtdID0gW107XG4gICAgbGV0IGxvZ1Jlc29sdmU6ICgoKSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xuICAgIGxldCBjbG9zZWQgPSBmYWxzZTtcblxuICAgIGNoaWxkLnN0ZG91dC5vbihcImRhdGFcIiwgKGRhdGE6IHN0cmluZyB8IEJ1ZmZlcikgPT4ge1xuICAgICAgY29uc3Qgc3RyID0gU3RyaW5nKGRhdGEpO1xuICAgICAgc3Rkb3V0ICs9IHN0cjtcbiAgICAgIGxvZ1F1ZXVlLnB1c2goeyBzdHJlYW06IFwic3Rkb3V0XCIsIGRhdGE6IHN0ciB9KTtcbiAgICAgIGxvZ1Jlc29sdmU/LigpO1xuICAgIH0pO1xuXG4gICAgY2hpbGQuc3RkZXJyLm9uKFwiZGF0YVwiLCAoZGF0YTogc3RyaW5nIHwgQnVmZmVyKSA9PiB7XG4gICAgICBjb25zdCBzdHIgPSBTdHJpbmcoZGF0YSk7XG4gICAgICBzdGRlcnIgKz0gc3RyO1xuICAgICAgbG9nUXVldWUucHVzaCh7IHN0cmVhbTogXCJzdGRlcnJcIiwgZGF0YTogc3RyIH0pO1xuICAgICAgbG9nUmVzb2x2ZT8uKCk7XG4gICAgfSk7XG5cbiAgICBjb25zdCByZXN1bHQgPSBuZXcgUHJvbWlzZTx7XG4gICAgICBzdGRvdXQ6IHN0cmluZztcbiAgICAgIHN0ZGVycjogc3RyaW5nO1xuICAgICAgZXhpdENvZGU6IG51bWJlcjtcbiAgICB9PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjaGlsZC5vbihcImVycm9yXCIsIChlcnIpID0+IHtcbiAgICAgICAgdGhpcy5wcm9jZXNzZXMuZGVsZXRlKGNvbW1hbmRJZCk7XG4gICAgICAgIGNsb3NlZCA9IHRydWU7XG4gICAgICAgIGxvZ1Jlc29sdmU/LigpO1xuICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgIH0pO1xuXG4gICAgICBjaGlsZC5vbihcImNsb3NlXCIsIChjb2RlOiBudW1iZXIgfCBudWxsKSA9PiB7XG4gICAgICAgIHRoaXMucHJvY2Vzc2VzLmRlbGV0ZShjb21tYW5kSWQpO1xuICAgICAgICBjbG9zZWQgPSB0cnVlO1xuICAgICAgICBsb2dSZXNvbHZlPy4oKTtcbiAgICAgICAgcmVzb2x2ZSh7IHN0ZG91dCwgc3RkZXJyLCBleGl0Q29kZTogY29kZSA/PyAwIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBhc3luYyBmdW5jdGlvbiogbG9ncygpOiBBc3luY0l0ZXJhYmxlPHtcbiAgICAgIHN0cmVhbTogXCJzdGRvdXRcIiB8IFwic3RkZXJyXCI7XG4gICAgICBkYXRhOiBzdHJpbmc7XG4gICAgfT4ge1xuICAgICAgd2hpbGUgKCFjbG9zZWQgfHwgbG9nUXVldWUubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCBlbnRyeSA9IGxvZ1F1ZXVlLnNoaWZ0KCk7XG4gICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgIHlpZWxkIGVudHJ5O1xuICAgICAgICB9IGVsc2UgaWYgKCFjbG9zZWQpIHtcbiAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPigocikgPT4ge1xuICAgICAgICAgICAgbG9nUmVzb2x2ZSA9IHI7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgbG9nUmVzb2x2ZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4geyBjb21tYW5kSWQsIGxvZ3MsIHJlc3VsdCB9O1xuICB9XG5cbiAgYXN5bmMgcmVhZEZpbGUob3B0czoge1xuICAgIHBhdGg6IHN0cmluZztcbiAgICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbiAgfSk6IFByb21pc2U8QnVmZmVyIHwgbnVsbD4ge1xuICAgIGNvbnN0IGZzID0gYXdhaXQgaW1wb3J0KFwibm9kZTpmcy9wcm9taXNlc1wiKTtcbiAgICBjb25zdCBwYXRoID0gYXdhaXQgaW1wb3J0KFwibm9kZTpwYXRoXCIpO1xuICAgIGNvbnN0IGZ1bGxQYXRoID0gcGF0aC5yZXNvbHZlKHRoaXMuYmFzZVBhdGgsIG9wdHMucGF0aCk7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBmcy5yZWFkRmlsZShmdWxsUGF0aCk7XG4gICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgaWYgKFxuICAgICAgICBlIGluc3RhbmNlb2YgRXJyb3IgJiZcbiAgICAgICAgXCJjb2RlXCIgaW4gZSAmJlxuICAgICAgICAoZSBhcyBOb2RlSlMuRXJybm9FeGNlcHRpb24pLmNvZGUgPT09IFwiRU5PRU5UXCJcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgd3JpdGVGaWxlcyhvcHRzOiB7XG4gICAgZmlsZXM6IHsgcGF0aDogc3RyaW5nOyBjb250ZW50OiBzdHJpbmcgfCBCdWZmZXIgfVtdO1xuICAgIGRlc3RQYXRoOiBzdHJpbmc7XG4gICAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG4gIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBmcyA9IGF3YWl0IGltcG9ydChcIm5vZGU6ZnMvcHJvbWlzZXNcIik7XG4gICAgY29uc3QgcGF0aE1vZCA9IGF3YWl0IGltcG9ydChcIm5vZGU6cGF0aFwiKTtcbiAgICBmb3IgKGNvbnN0IGZpbGUgb2Ygb3B0cy5maWxlcykge1xuICAgICAgY29uc3QgZnVsbFBhdGggPSBwYXRoTW9kLnJlc29sdmUodGhpcy5iYXNlUGF0aCwgb3B0cy5kZXN0UGF0aCwgZmlsZS5wYXRoKTtcbiAgICAgIGF3YWl0IGZzLm1rZGlyKHBhdGhNb2QuZGlybmFtZShmdWxsUGF0aCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgYXdhaXQgZnMud3JpdGVGaWxlKGZ1bGxQYXRoLCBmaWxlLmNvbnRlbnQpO1xuICAgICAgaWYgKGZpbGUucGF0aC5lbmRzV2l0aChcIi5zaFwiKSkge1xuICAgICAgICBhd2FpdCBmcy5jaG1vZChmdWxsUGF0aCwgMG83NTUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvdXNlQXdhaXQ6IC5cbiAgYXN5bmMgZ2V0RG9tYWluKG9wdHM6IHtcbiAgICBwb3J0OiBudW1iZXI7XG4gICAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG4gIH0pOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiBgaHR0cDovL2xvY2FsaG9zdDoke29wdHMucG9ydH1gO1xuICB9XG5cbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy91c2VBd2FpdDogLlxuICBhc3luYyBraWxsKG9wdHM6IHsgY29tbWFuZElkOiBzdHJpbmc7IHNpZ25hbD86IEFib3J0U2lnbmFsIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBjaGlsZCA9IHRoaXMucHJvY2Vzc2VzLmdldChvcHRzLmNvbW1hbmRJZCk7XG4gICAgaWYgKGNoaWxkKSB7XG4gICAgICBjaGlsZC5raWxsKFwiU0lHVEVSTVwiKTtcbiAgICAgIHRoaXMucHJvY2Vzc2VzLmRlbGV0ZShvcHRzLmNvbW1hbmRJZCk7XG4gICAgfVxuICB9XG5cbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy91c2VBd2FpdDogLlxuICBhc3luYyBnZXRTdGF0dXMoKTogUHJvbWlzZTxcInJ1bm5pbmdcIj4ge1xuICAgIHJldHVybiBcInJ1bm5pbmdcIjtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIG5vLW9wOiBsb2NhbCBzYW5kYm94IGlzIGFsd2F5cyBzdGFydGVkXG4gIH1cblxuICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL3VzZUF3YWl0OiAuXG4gIGFzeW5jIHN0b3AoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwic3RvcCBpcyBub3Qgc3VwcG9ydGVkIGZvciBsb2NhbCBzYW5kYm94ZXNcIik7XG4gIH1cblxuICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL3VzZUF3YWl0OiAuXG4gIGFzeW5jIHNuYXBzaG90KCk6IFByb21pc2U8eyBzbmFwc2hvdElkOiBzdHJpbmcgfT4ge1xuICAgIHRocm93IG5ldyBFcnJvcihcInNuYXBzaG90IGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGxvY2FsIHNhbmRib3hlc1wiKTtcbiAgfVxuXG4gIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvdXNlQXdhaXQ6IC5cbiAgYXN5bmMgdXBkYXRlTmV0d29ya1BvbGljeSgpOiBQcm9taXNlPG5ldmVyPiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwidXBkYXRlTmV0d29ya1BvbGljeSBpcyBub3Qgc3VwcG9ydGVkIGZvciBsb2NhbCBzYW5kYm94ZXNcIik7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvY2FsU2FuZGJveChcbiAgZGVmYXVsdHM/OiBQYXJ0aWFsPGltcG9ydChcIi4uL2FkYXB0ZXJcIikuU2FuZGJveFNldHVwRmllbGRzPiAmIHtcbiAgICBydW4/OiAoc2FuZGJveDogU2FuZGJveEluc3RhbmNlKSA9PiBQcm9taXNlPHZvaWQ+O1xuICAgIGNvbmZpZz86IExvY2FsQmluZGluZ0NvbmZpZztcbiAgfVxuKTogU2FuZGJveEJpbmRpbmc8XCJsb2NhbFwiLCBMb2NhbEJpbmRpbmdDb25maWcsIExvY2FsQmluZGluZ01ldGFkYXRhPiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogXCJsb2NhbFwiLFxuICAgIGRlZmF1bHRzLFxuICAgIGFzeW5jIGNyZWF0ZShvcHRzKSB7XG4gICAgICBjb25zdCBiYXNlUGF0aCA9IG9wdHMuc2V0dXAuY29uZmlnPy5jd2QgPz8gcHJvY2Vzcy5jd2QoKTtcbiAgICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IExvY2FsU2FuZGJveEluc3RhbmNlKGJhc2VQYXRoKTtcblxuICAgICAgaWYgKG9wdHMuc2V0dXA/LnJ1bikge1xuICAgICAgICBhd2FpdCBvcHRzLnNldHVwLnJ1bihpbnN0YW5jZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGluc3RhbmNlLFxuICAgICAgICBtZXRhZGF0YTogeyBiYXNlUGF0aCwgcGlkOiBwcm9jZXNzLnBpZCB9LFxuICAgICAgfTtcbiAgICB9LFxuXG4gICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy91c2VBd2FpdDogLlxuICAgIGFzeW5jIGNvbm5lY3Qob3B0cykge1xuICAgICAgY29uc3QgYmFzZVBhdGggPSBvcHRzLm1ldGFkYXRhLmJhc2VQYXRoO1xuICAgICAgcmV0dXJuIG5ldyBMb2NhbFNhbmRib3hJbnN0YW5jZShiYXNlUGF0aCk7XG4gICAgfSxcbiAgfTtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEV4ZWNSZXN1bHQgfSBmcm9tIFwiLi9hZGFwdGVyXCI7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX1dBSVRfVU5USUwgPSAyMDAwO1xuXG50eXBlIFNhbmRib3hIYW5kbGUgPSB7XG4gIGV4ZWM6IChvcHRzOiB7IGNvbW1hbmQ6IHN0cmluZzsgYXJncz86IHN0cmluZ1tdIH0pID0+IFByb21pc2U8RXhlY1Jlc3VsdD47XG4gIHdyaXRlRmlsZXM6IChvcHRzOiB7XG4gICAgZmlsZXM6IHsgcGF0aDogc3RyaW5nOyBjb250ZW50OiBzdHJpbmcgfVtdO1xuICAgIGRlc3RQYXRoOiBzdHJpbmc7XG4gIH0pID0+IFByb21pc2U8dm9pZD47XG59O1xuXG50eXBlIEJhc2hSZXN1bHQgPSB7XG4gIGNvbW1hbmRJZDogc3RyaW5nO1xuICBzdGRvdXQ6IHN0cmluZztcbiAgc3RkZXJyOiBzdHJpbmc7XG4gIGV4aXRDb2RlOiBudW1iZXI7XG4gIHN0YXR1czogXCJydW5uaW5nXCIgfCBcImNvbXBsZXRlZFwiIHwgXCJmYWlsZWRcIjtcbiAgb3V0cHV0RGlyOiBzdHJpbmc7XG59O1xuXG50eXBlIFJ1bk9wdGlvbnMgPSB7XG4gIGNvbW1hbmQ6IHN0cmluZztcbiAgd2FpdFVudGlsPzogbnVtYmVyO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVByb2Nlc3NNYW5hZ2VyID0gKG9wdHM6IHsgc2FuZGJveDogU2FuZGJveEhhbmRsZSB9KSA9PiB7XG4gIGNvbnN0IHsgc2FuZGJveCB9ID0gb3B0cztcblxuICBjb25zdCBydW4gPSBhc3luYyAocnVuT3B0czogUnVuT3B0aW9ucyk6IFByb21pc2U8QmFzaFJlc3VsdD4gPT4ge1xuICAgIGNvbnN0IHsgY29tbWFuZCwgd2FpdFVudGlsID0gREVGQVVMVF9XQUlUX1VOVElMIH0gPSBydW5PcHRzO1xuXG4gICAgY29uc3QgZXhlY1Jlc3VsdCA9IGF3YWl0IHNhbmRib3guZXhlYyh7XG4gICAgICBjb21tYW5kOiBcInNoXCIsXG4gICAgICBhcmdzOiBbXCItY1wiLCBjb21tYW5kXSxcbiAgICB9KTtcblxuICAgIGlmICh3YWl0VW50aWwgPT09IDApIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbW1hbmRJZDogZXhlY1Jlc3VsdC5jb21tYW5kSWQsXG4gICAgICAgIHN0ZG91dDogXCJcIixcbiAgICAgICAgc3RkZXJyOiBcIlwiLFxuICAgICAgICBleGl0Q29kZTogLTEsXG4gICAgICAgIHN0YXR1czogXCJydW5uaW5nXCIsXG4gICAgICAgIG91dHB1dERpcjogXCJcIixcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3QgY29tcGxldGVkID0gYXdhaXQgcmFjZVRpbWVvdXQoZXhlY1Jlc3VsdCwgd2FpdFVudGlsKTtcblxuICAgIGlmICghY29tcGxldGVkKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb21tYW5kSWQ6IGV4ZWNSZXN1bHQuY29tbWFuZElkLFxuICAgICAgICBzdGRvdXQ6IFwiXCIsXG4gICAgICAgIHN0ZGVycjogXCJcIixcbiAgICAgICAgZXhpdENvZGU6IC0xLFxuICAgICAgICBzdGF0dXM6IFwicnVubmluZ1wiLFxuICAgICAgICBvdXRwdXREaXI6IFwiXCIsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IG91dHB1dERpciA9IGAuYWdlbnQvYmFzaC8ke0RhdGUubm93KCl9LSR7ZXhlY1Jlc3VsdC5jb21tYW5kSWR9YDtcbiAgICB3cml0ZU91dHB1dERpcihzYW5kYm94LCBvdXRwdXREaXIsIGNvbXBsZXRlZCwgY29tbWFuZCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgY29tbWFuZElkOiBleGVjUmVzdWx0LmNvbW1hbmRJZCxcbiAgICAgIHN0ZG91dDogY29tcGxldGVkLnN0ZG91dCxcbiAgICAgIHN0ZGVycjogY29tcGxldGVkLnN0ZGVycixcbiAgICAgIGV4aXRDb2RlOiBjb21wbGV0ZWQuZXhpdENvZGUsXG4gICAgICBzdGF0dXM6IGNvbXBsZXRlZC5leGl0Q29kZSA9PT0gMCA/IFwiY29tcGxldGVkXCIgOiBcImZhaWxlZFwiLFxuICAgICAgb3V0cHV0RGlyLFxuICAgIH07XG4gIH07XG5cbiAgcmV0dXJuIHsgcnVuIH07XG59O1xuXG5hc3luYyBmdW5jdGlvbiByYWNlVGltZW91dChcbiAgZXhlY1Jlc3VsdDogRXhlY1Jlc3VsdCxcbiAgdGltZW91dE1zOiBudW1iZXJcbik6IFByb21pc2U8eyBzdGRvdXQ6IHN0cmluZzsgc3RkZXJyOiBzdHJpbmc7IGV4aXRDb2RlOiBudW1iZXIgfSB8IG51bGw+IHtcbiAgY29uc3QgVElNRURfT1VUID0gU3ltYm9sKFwidGltZW91dFwiKTtcbiAgY29uc3QgdGltZXIgPSBuZXcgUHJvbWlzZTx0eXBlb2YgVElNRURfT1VUPigocmVzb2x2ZSkgPT5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHJlc29sdmUoVElNRURfT1VUKSwgdGltZW91dE1zKVxuICApO1xuICBjb25zdCB3aW5uZXIgPSBhd2FpdCBQcm9taXNlLnJhY2UoW2V4ZWNSZXN1bHQucmVzdWx0LCB0aW1lcl0pO1xuICByZXR1cm4gd2lubmVyID09PSBUSU1FRF9PVVQgPyBudWxsIDogd2lubmVyO1xufVxuXG5mdW5jdGlvbiB3cml0ZU91dHB1dERpcihcbiAgc2FuZGJveDogU2FuZGJveEhhbmRsZSxcbiAgZGlyOiBzdHJpbmcsXG4gIHJlc3VsdDogeyBzdGRvdXQ6IHN0cmluZzsgc3RkZXJyOiBzdHJpbmc7IGV4aXRDb2RlOiBudW1iZXIgfSxcbiAgY29tbWFuZDogc3RyaW5nXG4pOiB2b2lkIHtcbiAgY29uc3QgZmlsZXM6IHsgcGF0aDogc3RyaW5nOyBjb250ZW50OiBzdHJpbmcgfVtdID0gW1xuICAgIHsgcGF0aDogXCJzdGRvdXQudHh0XCIsIGNvbnRlbnQ6IHJlc3VsdC5zdGRvdXQgfSxcbiAgICB7XG4gICAgICBwYXRoOiBcIm1ldGFkYXRhLmpzb25cIixcbiAgICAgIGNvbnRlbnQ6IEpTT04uc3RyaW5naWZ5KHsgZXhpdENvZGU6IHJlc3VsdC5leGl0Q29kZSwgY29tbWFuZCB9LCBudWxsLCAyKSxcbiAgICB9LFxuICBdO1xuICBpZiAocmVzdWx0LnN0ZGVycikge1xuICAgIGZpbGVzLnB1c2goeyBwYXRoOiBcInN0ZGVyci50eHRcIiwgY29udGVudDogcmVzdWx0LnN0ZGVyciB9KTtcbiAgfVxuXG4gIHNhbmRib3gud3JpdGVGaWxlcyh7IGZpbGVzLCBkZXN0UGF0aDogZGlyIH0pLmNhdGNoKCgpID0+IHtcbiAgICAvLyBpbnRlbnRpb25hbCBuby1vcCBcdTIwMTQgb3V0cHV0IGZpbGUgd3JpdGUgaXMgYmVzdC1lZmZvcnRcbiAgfSk7XG59XG4iLCAiaW1wb3J0IHsgcmVzb2x2ZUZyYW1ld29ya0FnZW50IH0gZnJvbSBcIi4vcmVzb2x2ZVwiO1xuXG4vKipcbiAqIFJlcXVlc3QtdGltZSB1dGlsaXRpZXMgZm9yIHRoZSBmcmFtZXdvcmsgcm91dGVyLlxuICpcbiAqIFVzZWQgaW5zaWRlIGdlbmVyYXRlZCByb3V0ZSBoYW5kbGVycyB0byByZXNvbHZlIGFuIGFnZW50IGJ5IG5hbWVcbiAqIGZyb20gYSByZWdpc3RyeSBwcm9kdWNlZCBhdCBidWlsZCB0aW1lLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgcnVudGltZSB9IGZyb20gXCJleHBlcmltZW50YWwtYWdlbnQvZnJhbWV3b3JrLXJ1bnRpbWVcIjtcbiAqXG4gKiBjb25zdCBhZ2VudCA9IGF3YWl0IHJ1bnRpbWUucmVzb2x2ZUFnZW50KHsgbmFtZSwgYWdlbnRzIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBjb25zdCBydW50aW1lID0ge1xuICAvKipcbiAgICogTG9vayB1cCBhbiBhZ2VudCBieSBuYW1lIGZyb20gYSBnZW5lcmF0ZWQgcmVnaXN0cnksIG1lcmdpbmcgYW55XG4gICAqIGZpbGVzeXN0ZW0tc2Nhbm5lZCBjb25maWcgKHN5c3RlbSBwcm9tcHRzLCBza2lsbHMpIG9uIHRvcCBvZiB0aGVcbiAgICogYWdlbnQncyBvd24gb3B0aW9ucy4gUmVzdWx0cyBhcmUgY2FjaGVkIGZvciB0aGUgbGlmZXRpbWUgb2YgdGhlXG4gICAqIHByb2Nlc3MuXG4gICAqXG4gICAqIFJldHVybnMgYG51bGxgIHdoZW4gdGhlIG5hbWUgZG9lc24ndCBtYXRjaCBhbnkgcmVnaXN0cnkgZW50cnkuXG4gICAqL1xuICByZXNvbHZlQWdlbnQ6IHJlc29sdmVGcmFtZXdvcmtBZ2VudCxcbn07XG4iLCAiaW1wb3J0IHsgV09SS0ZMT1dfREVTRVJJQUxJWkUsIFdPUktGTE9XX1NFUklBTElaRSB9IGZyb20gXCJAd29ya2Zsb3cvc2VyZGVcIjtcbmltcG9ydCB0eXBlIHsgR2F0ZXdheU1vZGVsSWQsIEluZmVyVUlUb29scywgVG9vbFNldCwgVUlNZXNzYWdlIH0gZnJvbSBcImFpXCI7XG5pbXBvcnQgdHlwZSB7IHogfSBmcm9tIFwiem9kXCI7XG5pbXBvcnQgdHlwZSB7IFNhbmRib3hCaW5kaW5nLCBTYW5kYm94SW5zdGFuY2UgfSBmcm9tIFwiLi4vc2FuZGJveC9hZGFwdGVyXCI7XG5pbXBvcnQgdHlwZSB7IFNhbmRib3hDb250ZXh0IH0gZnJvbSBcIi4uL3NhbmRib3gvaGFuZGxlXCI7XG5pbXBvcnQgeyBzYW5kYm94SGFuZGxlIH0gZnJvbSBcIi4uL3NhbmRib3gvaGFuZGxlXCI7XG5pbXBvcnQgeyB0eXBlIFNlc3Npb25Db250ZXh0LCBzZXNzaW9uSGFuZGxlIH0gZnJvbSBcIi4uL3Nlc3Npb24vaGFuZGxlXCI7XG5pbXBvcnQgdHlwZSB7IFNraWxsSW5wdXQgfSBmcm9tIFwiLi4vc2tpbGxzL3R5cGVzXCI7XG5pbXBvcnQgeyB0eXBlIFN0b3JhZ2UsIHR5cGUgU3RvcmFnZUlucHV0LCB0b1N0b3JhZ2UgfSBmcm9tIFwiLi4vc3RvcmFnZS9hZGFwdGVyXCI7XG5pbXBvcnQgeyBrdlN0b3JhZ2VGYWxsYmFjayB9IGZyb20gXCIuLi9zdG9yYWdlL2JpbmRpbmdzL2t2XCI7XG5pbXBvcnQgeyBsb2NhbFN0b3JhZ2UgfSBmcm9tIFwiLi4vc3RvcmFnZS9lbnRyeVwiO1xuaW1wb3J0IHsgc2hvdWxkRmFsbGJhY2tUb0tWMiB9IGZyb20gXCIuLi9zdG9yYWdlL3Nob3VsZC1mYWxsYmFjay1rdjJcIjtcbmltcG9ydCB0eXBlIHsgR2VuZXJhdGlvbk9wdGlvbnMgfSBmcm9tIFwiLi4vc3RvcmFnZS90eXBlc1wiO1xuaW1wb3J0IHsgdHlwZSBCdWlsdEluVG9vbE5hbWUsIGJ1aWx0SW5Ub29scyB9IGZyb20gXCIuLi90b29sc1wiO1xuaW1wb3J0IHR5cGUgeyBMb2dnaW5nQ29uZmlnIH0gZnJvbSBcIi4uL3V0aWxzL2xvZ2dlclwiO1xuaW1wb3J0IHsgY3JlYXRlTG9nZ2VyIH0gZnJvbSBcIi4uL3V0aWxzL2xvZ2dlclwiO1xuaW1wb3J0IHtcbiAgdHlwZSBBZ2VudERhdGFUeXBlcyxcbiAgdHlwZSBBZ2VudEhvb2tzLFxuICBnZXRBZ2VudCxcbiAgdHlwZSBOZWVkc0FwcHJvdmFsTWFwLFxuICByZWdpc3RlckFnZW50LFxufSBmcm9tIFwiLi9yZWdpc3RyeVwiO1xuXG4vLyBcdTI1MDBcdTI1MDBcdTI1MDAgUmVzb2x2YWJsZSBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuZXhwb3J0IHR5cGUgUmVzb2x2YWJsZUFyZ3M8XG4gIFRDb250ZXh0ID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIFRvb2xzIGV4dGVuZHMgVG9vbFNldCA9IFRvb2xTZXQsXG4gIFRTdGF0ZSA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuPiA9IHtcbiAgY29udGV4dDogVENvbnRleHQ7XG4gIHNlc3Npb25JZDogc3RyaW5nO1xuICBzYW5kYm94OiBTYW5kYm94SW5zdGFuY2U7XG4gIG1lc3NhZ2VzOiBVSU1lc3NhZ2U8dW5rbm93biwgQWdlbnREYXRhVHlwZXMsIEluZmVyVUlUb29sczxUb29scz4+W107XG4gIHN0YXRlOiBSZWFkb25seTxUU3RhdGU+O1xufTtcblxuZXhwb3J0IHR5cGUgUmVzb2x2YWJsZTxcbiAgVCxcbiAgVENvbnRleHQgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgVG9vbHMgZXh0ZW5kcyBUb29sU2V0ID0gVG9vbFNldCxcbiAgVFN0YXRlID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4+ID0gVCB8ICgoYXJnczogUmVzb2x2YWJsZUFyZ3M8VENvbnRleHQsIFRvb2xzLCBUU3RhdGU+KSA9PiBUIHwgUHJvbWlzZTxUPik7XG5cbi8vIFx1MjUwMFx1MjUwMFx1MjUwMCBTZXNzaW9uIERlZmF1bHRzIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG5leHBvcnQgdHlwZSBTZXNzaW9uRGVmYXVsdHM8XG4gIFRvb2xzIGV4dGVuZHMgVG9vbFNldCA9IFRvb2xTZXQsXG4gIFRDb250ZXh0IGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgVFN0YXRlIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbj4gPSB7XG4gIG1vZGVsPzogUmVzb2x2YWJsZTxHYXRld2F5TW9kZWxJZCB8IHVuZGVmaW5lZCwgVENvbnRleHQsIFRvb2xzLCBUU3RhdGU+O1xuICBzeXN0ZW0/OiBSZXNvbHZhYmxlPHN0cmluZyB8IHN0cmluZ1tdIHwgdW5kZWZpbmVkLCBUQ29udGV4dCwgVG9vbHMsIFRTdGF0ZT47XG4gIGdlbmVyYXRpb24/OiBSZXNvbHZhYmxlPFxuICAgIEdlbmVyYXRpb25PcHRpb25zIHwgdW5kZWZpbmVkLFxuICAgIFRDb250ZXh0LFxuICAgIFRvb2xzLFxuICAgIFRTdGF0ZVxuICA+O1xuICBhY3RpdmVUb29scz86IFJlc29sdmFibGU8XG4gICAgcmVhZG9ubHkgKEV4dHJhY3Q8a2V5b2YgVG9vbHMsIHN0cmluZz4gfCBCdWlsdEluVG9vbE5hbWUpW10gfCB1bmRlZmluZWQsXG4gICAgVENvbnRleHQsXG4gICAgVG9vbHMsXG4gICAgVFN0YXRlXG4gID47XG4gIHNraWxscz86IFJlc29sdmFibGU8U2tpbGxJbnB1dFtdIHwgdW5kZWZpbmVkLCBUQ29udGV4dCwgVG9vbHMsIFRTdGF0ZT47XG59O1xuXG4vLyBcdTI1MDBcdTI1MDBcdTI1MDAgQWdlbnQgT3B0aW9ucyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuZXhwb3J0IHR5cGUgQWdlbnRPcHRpb25zPFxuICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRXhwbGljaXRBbnk6IGRlZmF1bHQgYWxsb3dzIHR5cGUtZXJhc2VkIHVzYWdlXG4gIFRvb2xzIGV4dGVuZHMgVG9vbFNldCA9IGFueSxcbiAgVFNhbmRib3hCaW5kaW5ncyBleHRlbmRzIFNhbmRib3hCaW5kaW5nIHwgU2FuZGJveEJpbmRpbmdbXSA9IFNhbmRib3hCaW5kaW5nLFxuICBUQ29udGV4dCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0gUmVjb3JkPHN0cmluZywgbmV2ZXI+LFxuICBUU3RhdGUgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBUTWVzc2FnZU1ldGFkYXRhID0gdW5rbm93bixcbj4gPSBTZXNzaW9uRGVmYXVsdHM8VG9vbHMsIFRDb250ZXh0LCBUU3RhdGU+ICYge1xuICBzdG9yYWdlPzogU3RvcmFnZUlucHV0O1xuICBzYW5kYm94PzogVFNhbmRib3hCaW5kaW5ncztcbiAgdG9vbHM/OiBUb29scztcbiAgaG9va3M/OiBBZ2VudEhvb2tzO1xuICBuZWVkc0FwcHJvdmFsPzogTmVlZHNBcHByb3ZhbE1hcDxUb29scz47XG4gIGNvbnRleHRTY2hlbWE/OiB6LlpvZFR5cGU8VENvbnRleHQ+O1xuICBzdGF0ZVNjaGVtYT86IHouWm9kVHlwZTxUU3RhdGU+O1xuICBtZXNzYWdlTWV0YWRhdGFTY2hlbWE/OiB6LlpvZFR5cGU8VE1lc3NhZ2VNZXRhZGF0YT47XG4gIGxvZ2dpbmc/OiBPbWl0PExvZ2dpbmdDb25maWcsIFwibmFtZVwiPjtcbn07XG5cbi8vIFx1MjUwMFx1MjUwMFx1MjUwMCBJbnRlcm5hbCBjb250ZXh0IGNhY2hlcyAoaGlkZGVuIGZyb20gcHVibGljIEFQSSkgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmNvbnN0IHNlc3Npb25Db250ZXh0c01hcCA9IG5ldyBXZWFrTWFwPG9iamVjdCwgTWFwPHN0cmluZywgU2Vzc2lvbkNvbnRleHQ+PigpO1xuY29uc3Qgc2FuZGJveENvbnRleHRzTWFwID0gbmV3IFdlYWtNYXA8b2JqZWN0LCBNYXA8c3RyaW5nLCBTYW5kYm94Q29udGV4dD4+KCk7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZXNzaW9uQ29udGV4dHMoXG4gIGFnZW50OiBBbnlBZ2VudFxuKTogTWFwPHN0cmluZywgU2Vzc2lvbkNvbnRleHQ+IHtcbiAgbGV0IG1hcCA9IHNlc3Npb25Db250ZXh0c01hcC5nZXQoYWdlbnQpO1xuICBpZiAoIW1hcCkge1xuICAgIG1hcCA9IG5ldyBNYXAoKTtcbiAgICBzZXNzaW9uQ29udGV4dHNNYXAuc2V0KGFnZW50LCBtYXApO1xuICB9XG4gIHJldHVybiBtYXA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTYW5kYm94Q29udGV4dHMoXG4gIGFnZW50OiBBbnlBZ2VudFxuKTogTWFwPHN0cmluZywgU2FuZGJveENvbnRleHQ+IHtcbiAgbGV0IG1hcCA9IHNhbmRib3hDb250ZXh0c01hcC5nZXQoYWdlbnQpO1xuICBpZiAoIW1hcCkge1xuICAgIG1hcCA9IG5ldyBNYXAoKTtcbiAgICBzYW5kYm94Q29udGV4dHNNYXAuc2V0KGFnZW50LCBtYXApO1xuICB9XG4gIHJldHVybiBtYXA7XG59XG5cbi8vIFx1MjUwMFx1MjUwMFx1MjUwMCBBZ2VudCBDbGFzcyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0V4cGxpY2l0QW55OiBpbnRlbnRpb25hbGx5IGVyYXNlZCBcdTIwMTMgdXNpbmcgYGFueWAgYXZvaWRzIGNvbnRyYXZhcmlhbmNlIGlzc3VlcyB3aXRoIHRvb2wtdHlwZWQgbWV0aG9kcyBsaWtlIGBzZW5kYFxuZXhwb3J0IHR5cGUgQW55QWdlbnQgPSBBZ2VudDxhbnksIGFueSwgYW55LCBhbnksIGFueT47XG5cbmV4cG9ydCB0eXBlIEluZmVyU2Vzc2lvbjxBZ2VudCBleHRlbmRzIEFueUFnZW50ID0gQW55QWdlbnQ+ID0gUmV0dXJuVHlwZTxcbiAgQWdlbnRbXCJzZXNzaW9uXCJdXG4+O1xuZXhwb3J0IHR5cGUgU2Vzc2lvblNlbmRBcmdzPFxuICBBZ2VudCBleHRlbmRzIEFueUFnZW50LFxuICBTZXNzaW9uIGV4dGVuZHMgSW5mZXJTZXNzaW9uPEFnZW50PiA9IEluZmVyU2Vzc2lvbjxBZ2VudD4sXG4+ID0gUGFyYW1ldGVyczxTZXNzaW9uW1wic2VuZFwiXT47XG5cbmV4cG9ydCBjbGFzcyBBZ2VudDxcbiAgVE1lc3NhZ2VNZXRhZGF0YSA9IHVua25vd24sXG4gIFRvb2xzIGV4dGVuZHMgVG9vbFNldCA9IFRvb2xTZXQsXG4gIFRTYW5kYm94QmluZGluZ3MgZXh0ZW5kcyBTYW5kYm94QmluZGluZyB8IFNhbmRib3hCaW5kaW5nW10gPSBTYW5kYm94QmluZGluZyxcbiAgVENvbnRleHQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IFJlY29yZDxzdHJpbmcsIG5ldmVyPixcbiAgVFN0YXRlIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbj4ge1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIG9wdGlvbnM6IEFnZW50T3B0aW9uczxcbiAgICBUb29scyxcbiAgICBUU2FuZGJveEJpbmRpbmdzLFxuICAgIFRDb250ZXh0LFxuICAgIFRTdGF0ZSxcbiAgICBUTWVzc2FnZU1ldGFkYXRhXG4gID47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiBBZ2VudE9wdGlvbnM8XG4gICAgICBUb29scyxcbiAgICAgIFRTYW5kYm94QmluZGluZ3MsXG4gICAgICBUQ29udGV4dCxcbiAgICAgIFRTdGF0ZSxcbiAgICAgIFRNZXNzYWdlTWV0YWRhdGFcbiAgICA+XG4gICkge1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucyA/PyB7fTtcbiAgICB0aGlzLnNlc3Npb24gPSAoc2Vzc2lvbkhhbmRsZTxcbiAgICAgIFRvb2xzLFxuICAgICAgVENvbnRleHQsXG4gICAgICBUU2FuZGJveEJpbmRpbmdzLFxuICAgICAgVE1lc3NhZ2VNZXRhZGF0YSxcbiAgICAgIFRTdGF0ZVxuICAgID4pLmJpbmQobnVsbCwgdGhpcyBhcyB1bmtub3duIGFzIEFueUFnZW50KTtcbiAgICB0aGlzLnNhbmRib3ggPSAoc2FuZGJveEhhbmRsZTxUU2FuZGJveEJpbmRpbmdzPikuYmluZChcbiAgICAgIG51bGwsXG4gICAgICB0aGlzIGFzIHVua25vd24gYXMgQW55QWdlbnRcbiAgICApO1xuICB9XG5cbiAgc3RhdGljIFtXT1JLRkxPV19TRVJJQUxJWkVdKGluc3RhbmNlOiBBbnlBZ2VudCkge1xuICAgIHJldHVybiB7IG5hbWU6IGluc3RhbmNlLm5hbWUgfTtcbiAgfVxuXG4gIHN0YXRpYyBbV09SS0ZMT1dfREVTRVJJQUxJWkVdKGRhdGE6IHsgbmFtZTogc3RyaW5nIH0pIHtcbiAgICByZXR1cm4gZ2V0QWdlbnQoZGF0YS5uYW1lLCB0cnVlKTtcbiAgfVxuXG4gIHByaXZhdGUgX3Jlc29sdmVkU3RvcmFnZTogU3RvcmFnZSB8IHVuZGVmaW5lZDtcblxuICBnZXQgc3RvcmFnZSgpOiBTdG9yYWdlIHtcbiAgICBpZiAodGhpcy5fcmVzb2x2ZWRTdG9yYWdlKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcmVzb2x2ZWRTdG9yYWdlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMuc3RvcmFnZSkge1xuICAgICAgdGhpcy5fcmVzb2x2ZWRTdG9yYWdlID0gdG9TdG9yYWdlKHRoaXMub3B0aW9ucy5zdG9yYWdlKTtcbiAgICAgIHJldHVybiB0aGlzLl9yZXNvbHZlZFN0b3JhZ2U7XG4gICAgfVxuXG4gICAgY29uc3QgbG9nID0gY3JlYXRlTG9nZ2VyKHtcbiAgICAgIGNvbmZpZzogeyAuLi50aGlzLm9wdGlvbnMubG9nZ2luZywgbmFtZTogdGhpcy5uYW1lIH0sXG4gICAgICBzdWJzeXN0ZW06IFwic3RvcmFnZVwiLFxuICAgIH0pO1xuXG4gICAgaWYgKHNob3VsZEZhbGxiYWNrVG9LVjIoKSkge1xuICAgICAgbG9nLmluZm8oXG4gICAgICAgIGBObyBzdG9yYWdlIGFkYXB0ZXIgY29uZmlndXJlZCBcdTIwMTQgdXNpbmcgS1YyIChuYW1lc3BhY2U6IFwiJHt0aGlzLm5hbWV9XCIpLmBcbiAgICAgICk7XG4gICAgICB0aGlzLl9yZXNvbHZlZFN0b3JhZ2UgPSB0b1N0b3JhZ2UoXG4gICAgICAgIGt2U3RvcmFnZUZhbGxiYWNrKHsgcHJlZml4OiB0aGlzLm5hbWUgfSlcbiAgICAgICk7XG4gICAgICByZXR1cm4gdGhpcy5fcmVzb2x2ZWRTdG9yYWdlO1xuICAgIH1cblxuICAgIGxvZy53YXJuKFxuICAgICAgXCJObyBzdG9yYWdlIGFkYXB0ZXIgY29uZmlndXJlZCBcdTIwMTQgdXNpbmcgbG9jYWxTdG9yYWdlKCkuIERhdGEgd2lsbCBub3QgcGVyc2lzdCBhY3Jvc3MgcmVzdGFydHMuXCJcbiAgICApO1xuICAgIHRoaXMuX3Jlc29sdmVkU3RvcmFnZSA9IHRvU3RvcmFnZShsb2NhbFN0b3JhZ2UoKSk7XG4gICAgcmV0dXJuIHRoaXMuX3Jlc29sdmVkU3RvcmFnZTtcbiAgfVxuXG4gIGdldCB0b29scygpIHtcbiAgICByZXR1cm4geyAuLi5idWlsdEluVG9vbHMsIC4uLnRoaXMub3B0aW9ucy50b29scyB9IGFzIHR5cGVvZiBidWlsdEluVG9vbHMgJlxuICAgICAgVG9vbHM7XG4gIH1cblxuICBnZXQgaG9va3MoKTogQWdlbnRIb29rcyB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5ob29rcyA/PyB7fTtcbiAgfVxuXG4gIHJlYWRvbmx5IHNlc3Npb247XG5cbiAgcmVhZG9ubHkgc2FuZGJveDtcblxuICAvKiogUGhhbnRvbSBwcm9wZXJ0eSBmb3IgdHlwZSBpbmZlcmVuY2UuIFVzZSBgdHlwZW9mIG15QWdlbnQuJFVJTWVzc2FnZWAgdG8gZ2V0IHRoZSB0eXBlZCBVSU1lc3NhZ2UuICovXG4gIGRlY2xhcmUgcmVhZG9ubHkgJFVJTWVzc2FnZTogVUlNZXNzYWdlPFxuICAgIFRNZXNzYWdlTWV0YWRhdGEsXG4gICAgQWdlbnREYXRhVHlwZXMsXG4gICAgSW5mZXJVSVRvb2xzPHR5cGVvZiBidWlsdEluVG9vbHMgJiBUb29scz5cbiAgPjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFnZW50PFxuICBUb29scyBleHRlbmRzIFRvb2xTZXQgPSBUb29sU2V0LFxuICBUU2FuZGJveEJpbmRpbmdzIGV4dGVuZHMgU2FuZGJveEJpbmRpbmcgfCBTYW5kYm94QmluZGluZ1tdID0gU2FuZGJveEJpbmRpbmcsXG4gIFRDb250ZXh0IGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSBSZWNvcmQ8c3RyaW5nLCBuZXZlcj4sXG4gIFRTdGF0ZSBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIFRNZXNzYWdlTWV0YWRhdGEgPSB1bmtub3duLFxuPihcbiAgbmFtZTogc3RyaW5nLFxuICBvcHRpb25zPzogQWdlbnRPcHRpb25zPFxuICAgIFRvb2xzLFxuICAgIFRTYW5kYm94QmluZGluZ3MsXG4gICAgVENvbnRleHQsXG4gICAgVFN0YXRlLFxuICAgIFRNZXNzYWdlTWV0YWRhdGFcbiAgPlxuKSB7XG4gIGNvbnN0IGluc3RhbmNlID0gbmV3IEFnZW50PFxuICAgIFRNZXNzYWdlTWV0YWRhdGEsXG4gICAgVG9vbHMsXG4gICAgVFNhbmRib3hCaW5kaW5ncyxcbiAgICBUQ29udGV4dCxcbiAgICBUU3RhdGVcbiAgPihuYW1lLCBvcHRpb25zKTtcbiAgcmVnaXN0ZXJBZ2VudChuYW1lLCBpbnN0YW5jZSk7XG4gIHJldHVybiBpbnN0YW5jZTtcbn1cblxuLy8gUmUtZXhwb3J0IGV2ZXJ5dGhpbmcgZnJvbSByZWdpc3RyeSBzbyBleGlzdGluZyBpbXBvcnRzIGZyb20gXCIuL2FnZW50L2NsaWVudFwiIGtlZXAgd29ya2luZy5cbmV4cG9ydCB7XG4gIHR5cGUgQWdlbnREYXRhVHlwZXMsXG4gIHR5cGUgQWdlbnRIb29rcyxcbiAgQWdlbnRTdGF0dXMsXG4gIGdldEFnZW50LFxuICB0eXBlIEluZmVyVUlNZXNzYWdlLFxuICB0eXBlIE5lZWRzQXBwcm92YWxNYXAsXG4gIHJlZ2lzdGVyQWdlbnQsXG4gIHR5cGUgVHlwZWRVSU1lc3NhZ2UsXG59IGZyb20gXCIuL3JlZ2lzdHJ5XCI7XG4iLCAiaW1wb3J0IHsgdWxpZCB9IGZyb20gXCJ1bGlkXCI7XG5pbXBvcnQgdHlwZSB7IEFueUFnZW50IH0gZnJvbSBcIi4uL2FnZW50L2NsaWVudFwiO1xuaW1wb3J0IHsgZ2V0U2FuZGJveENvbnRleHRzIH0gZnJvbSBcIi4uL2FnZW50L2NsaWVudFwiO1xuaW1wb3J0IHR5cGUgeyBTYW5kYm94QmluZGluZywgU2FuZGJveEluc3RhbmNlIH0gZnJvbSBcIi4vYWRhcHRlclwiO1xuaW1wb3J0IHsgZXhlYyB9IGZyb20gXCIuL2V4ZWNcIjtcbmltcG9ydCB7IGdldERvbWFpbiB9IGZyb20gXCIuL2dldC1kb21haW5cIjtcbmltcG9ydCB7IGdldFN0YXR1cyB9IGZyb20gXCIuL2dldC1zdGF0dXNcIjtcbmltcG9ydCB7IGtpbGwgfSBmcm9tIFwiLi9raWxsXCI7XG5pbXBvcnQgeyByZWFkRmlsZSB9IGZyb20gXCIuL3JlYWQtZmlsZVwiO1xuaW1wb3J0IHsgc2V0dXAgfSBmcm9tIFwiLi9zZXR1cFwiO1xuaW1wb3J0IHsgc25hcHNob3QgfSBmcm9tIFwiLi9zbmFwc2hvdFwiO1xuaW1wb3J0IHsgc3RhcnQgfSBmcm9tIFwiLi9zdGFydFwiO1xuaW1wb3J0IHsgc3RvcCB9IGZyb20gXCIuL3N0b3BcIjtcbmltcG9ydCB7IHVwZGF0ZU5ldHdvcmtQb2xpY3kgfSBmcm9tIFwiLi91cGRhdGUtbmV0d29yay1wb2xpY3lcIjtcbmltcG9ydCB7IHdyaXRlRmlsZXMgfSBmcm9tIFwiLi93cml0ZS1maWxlc1wiO1xuXG5leHBvcnQgdHlwZSBTYW5kYm94Q29udGV4dCA9IHtcbiAgYWdlbnQ6IEFueUFnZW50O1xuICBzYW5kYm94SWQ6IHN0cmluZyB8IG51bGw7XG4gIF9wZW5kaW5nU2V0dXA/OiBQcm9taXNlPFNhbmRib3hJbnN0YW5jZT47XG4gIF9jd2Q/OiBzdHJpbmc7XG4gIF9zZXNzaW9uSWQ/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBTYW5kYm94T3B0aW9ucyA9IHtcbiAgaWQ/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBTYW5kYm94SGFuZGxlPFxuICBUU2FuZGJveEJpbmRpbmdzIGV4dGVuZHMgU2FuZGJveEJpbmRpbmcgfCBTYW5kYm94QmluZGluZ1tdID0gU2FuZGJveEJpbmRpbmcsXG4+ID0gUmV0dXJuVHlwZTx0eXBlb2Ygc2FuZGJveEhhbmRsZTxUU2FuZGJveEJpbmRpbmdzPj47XG5cbmV4cG9ydCBmdW5jdGlvbiBzYW5kYm94SGFuZGxlPFxuICBUU2FuZGJveEJpbmRpbmdzIGV4dGVuZHMgU2FuZGJveEJpbmRpbmcgfCBTYW5kYm94QmluZGluZ1tdLFxuPihhZ2VudDogQW55QWdlbnQsIGlkPzogc3RyaW5nIHwgU2FuZGJveE9wdGlvbnMpIHtcbiAgY29uc3Qgc2FuZGJveElkID1cbiAgICB0eXBlb2YgaWQgPT09IFwic3RyaW5nXCIgPyBpZCA6IChpZD8uaWQgPz8gYHNhbmRib3hfJHt1bGlkKCl9YCk7XG5cbiAgY29uc3QgY29udGV4dHMgPSBnZXRTYW5kYm94Q29udGV4dHMoYWdlbnQpO1xuICBsZXQgc2FuZGJveENvbnRleHQgPSBjb250ZXh0cy5nZXQoc2FuZGJveElkKTtcbiAgaWYgKCFzYW5kYm94Q29udGV4dCkge1xuICAgIHNhbmRib3hDb250ZXh0ID0geyBhZ2VudCwgc2FuZGJveElkIH07XG4gICAgY29udGV4dHMuc2V0KHNhbmRib3hJZCwgc2FuZGJveENvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBpZDogc2FuZGJveElkLFxuICAgIGdldCBjd2QoKSB7XG4gICAgICByZXR1cm4gc2FuZGJveENvbnRleHQhLl9jd2QgPz8gXCIuXCI7XG4gICAgfSxcbiAgICBzZXR1cDogKHNldHVwPFRTYW5kYm94QmluZGluZ3M+KS5iaW5kKG51bGwsIHNhbmRib3hDb250ZXh0KSxcbiAgICBleGVjOiBleGVjLmJpbmQobnVsbCwgc2FuZGJveENvbnRleHQpLFxuICAgIHJlYWRGaWxlOiByZWFkRmlsZS5iaW5kKG51bGwsIHNhbmRib3hDb250ZXh0KSxcbiAgICB3cml0ZUZpbGVzOiB3cml0ZUZpbGVzLmJpbmQobnVsbCwgc2FuZGJveENvbnRleHQpLFxuICAgIGdldERvbWFpbjogZ2V0RG9tYWluLmJpbmQobnVsbCwgc2FuZGJveENvbnRleHQpLFxuICAgIHVwZGF0ZU5ldHdvcmtQb2xpY3k6IHVwZGF0ZU5ldHdvcmtQb2xpY3kuYmluZChudWxsLCBzYW5kYm94Q29udGV4dCksXG4gICAgc3RhcnQ6IHN0YXJ0LmJpbmQobnVsbCwgc2FuZGJveENvbnRleHQpLFxuICAgIHN0b3A6IHN0b3AuYmluZChudWxsLCBzYW5kYm94Q29udGV4dCksXG4gICAga2lsbDoga2lsbC5iaW5kKG51bGwsIHNhbmRib3hDb250ZXh0KSxcbiAgICBzbmFwc2hvdDogc25hcHNob3QuYmluZChudWxsLCBzYW5kYm94Q29udGV4dCksXG4gICAgZ2V0U3RhdHVzOiBnZXRTdGF0dXMuYmluZChudWxsLCBzYW5kYm94Q29udGV4dCksXG4gIH07XG59XG5cbnR5cGUgU2FuZGJveE1ldGhvZHM8XG4gIFRTYW5kYm94QmluZGluZ3MgZXh0ZW5kcyBTYW5kYm94QmluZGluZyB8IFNhbmRib3hCaW5kaW5nW10sXG4+ID0gT21pdDxTYW5kYm94SGFuZGxlPFRTYW5kYm94QmluZGluZ3M+LCBcImlkXCIgfCBcImN3ZFwiPjtcblxuZXhwb3J0IGZ1bmN0aW9uIGxhenlTYW5kYm94SGFuZGxlPFxuICBUU2FuZGJveEJpbmRpbmdzIGV4dGVuZHMgU2FuZGJveEJpbmRpbmcgfCBTYW5kYm94QmluZGluZ1tdLFxuPihcbiAgYWdlbnQ6IEFueUFnZW50LFxuICBzZXNzaW9uSWQ6IHN0cmluZ1xuKTogU2FuZGJveE1ldGhvZHM8VFNhbmRib3hCaW5kaW5ncz4ge1xuICBjb25zdCBzYW5kYm94Q29udGV4dDogU2FuZGJveENvbnRleHQgPSB7XG4gICAgYWdlbnQsXG4gICAgc2FuZGJveElkOiBudWxsLFxuICAgIF9zZXNzaW9uSWQ6IHNlc3Npb25JZCxcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIHNldHVwOiAoc2V0dXA8VFNhbmRib3hCaW5kaW5ncz4pLmJpbmQobnVsbCwgc2FuZGJveENvbnRleHQpLFxuICAgIGV4ZWM6IGV4ZWMuYmluZChudWxsLCBzYW5kYm94Q29udGV4dCksXG4gICAgcmVhZEZpbGU6IHJlYWRGaWxlLmJpbmQobnVsbCwgc2FuZGJveENvbnRleHQpLFxuICAgIHdyaXRlRmlsZXM6IHdyaXRlRmlsZXMuYmluZChudWxsLCBzYW5kYm94Q29udGV4dCksXG4gICAgZ2V0RG9tYWluOiBnZXREb21haW4uYmluZChudWxsLCBzYW5kYm94Q29udGV4dCksXG4gICAgdXBkYXRlTmV0d29ya1BvbGljeTogdXBkYXRlTmV0d29ya1BvbGljeS5iaW5kKG51bGwsIHNhbmRib3hDb250ZXh0KSxcbiAgICBzdGFydDogc3RhcnQuYmluZChudWxsLCBzYW5kYm94Q29udGV4dCksXG4gICAgc3RvcDogc3RvcC5iaW5kKG51bGwsIHNhbmRib3hDb250ZXh0KSxcbiAgICBraWxsOiBraWxsLmJpbmQobnVsbCwgc2FuZGJveENvbnRleHQpLFxuICAgIHNuYXBzaG90OiBzbmFwc2hvdC5iaW5kKG51bGwsIHNhbmRib3hDb250ZXh0KSxcbiAgICBnZXRTdGF0dXM6IGdldFN0YXR1cy5iaW5kKG51bGwsIHNhbmRib3hDb250ZXh0KSxcbiAgfTtcbn1cbiIsICJleHBvcnQgY29uc3QgaXNWZXJjZWwgPSBhc3luYyAoKSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgeyBnZXRWZXJjZWxPaWRjVG9rZW4gfSA9IGF3YWl0IGltcG9ydChcIkB2ZXJjZWwvb2lkY1wiKTtcbiAgICByZXR1cm4gQm9vbGVhbihhd2FpdCBnZXRWZXJjZWxPaWRjVG9rZW4oKSk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcbiIsICJpbXBvcnQgKiBhcyBlcnJvcmUgZnJvbSBcImVycm9yZVwiO1xuXG5leHBvcnQgY2xhc3MgU2Vzc2lvbk5vdEZvdW5kRXJyb3IgZXh0ZW5kcyBlcnJvcmUuY3JlYXRlVGFnZ2VkRXJyb3Ioe1xuICBuYW1lOiBcIlNlc3Npb25Ob3RGb3VuZEVycm9yXCIsXG4gIG1lc3NhZ2U6IFwiU2Vzc2lvbiAkaWQgbm90IGZvdW5kXCIsXG59KSB7fVxuXG5leHBvcnQgY2xhc3MgU2Vzc2lvbkVycm9yIGV4dGVuZHMgZXJyb3JlLmNyZWF0ZVRhZ2dlZEVycm9yKHtcbiAgbmFtZTogXCJTZXNzaW9uRXJyb3JcIixcbiAgbWVzc2FnZTogXCJTZXNzaW9uICRpZCBmYWlsZWQ6ICRyZWFzb25cIixcbn0pIHt9XG5cbmV4cG9ydCBjbGFzcyBTYW5kYm94Tm90Rm91bmRFcnJvciBleHRlbmRzIGVycm9yZS5jcmVhdGVUYWdnZWRFcnJvcih7XG4gIG5hbWU6IFwiU2FuZGJveE5vdEZvdW5kRXJyb3JcIixcbiAgbWVzc2FnZTogXCJTYW5kYm94ICRpZCBub3QgZm91bmRcIixcbn0pIHt9XG5cbmV4cG9ydCBjbGFzcyBTdG9yYWdlRXJyb3IgZXh0ZW5kcyBlcnJvcmUuY3JlYXRlVGFnZ2VkRXJyb3Ioe1xuICBuYW1lOiBcIlN0b3JhZ2VFcnJvclwiLFxuICBtZXNzYWdlOiBcIiRyZWFzb25cIixcbn0pIHt9XG5cbmV4cG9ydCBjbGFzcyBTdG9yYWdlQ29uZmxpY3RFcnJvciBleHRlbmRzIGVycm9yZS5jcmVhdGVUYWdnZWRFcnJvcih7XG4gIG5hbWU6IFwiU3RvcmFnZUNvbmZsaWN0RXJyb3JcIixcbiAgbWVzc2FnZTogXCIkcmVhc29uXCIsXG59KSB7fVxuXG5leHBvcnQgY2xhc3MgU2FuZGJveEVycm9yIGV4dGVuZHMgZXJyb3JlLmNyZWF0ZVRhZ2dlZEVycm9yKHtcbiAgbmFtZTogXCJTYW5kYm94RXJyb3JcIixcbiAgbWVzc2FnZTogXCIkcmVhc29uXCIsXG59KSB7fVxuXG5leHBvcnQgY2xhc3MgTWVzc2FnZU5vdEZvdW5kRXJyb3IgZXh0ZW5kcyBlcnJvcmUuY3JlYXRlVGFnZ2VkRXJyb3Ioe1xuICBuYW1lOiBcIk1lc3NhZ2VOb3RGb3VuZEVycm9yXCIsXG4gIG1lc3NhZ2U6IFwiTWVzc2FnZSAkaWQgbm90IGZvdW5kXCIsXG59KSB7fVxuIiwgImltcG9ydCB7IGlzVmVyY2VsIH0gZnJvbSBcIi4uL2FnZW50L2lzLXZlcmNlbFwiO1xuaW1wb3J0IHsgU2FuZGJveEVycm9yLCBTYW5kYm94Tm90Rm91bmRFcnJvciB9IGZyb20gXCIuLi9lcnJvcnNcIjtcbmltcG9ydCB0eXBlIHsgU2FuZGJveCB9IGZyb20gXCIuLi9zdG9yYWdlL3R5cGVzXCI7XG5pbXBvcnQgeyBjcmVhdGVMb2dnZXIgfSBmcm9tIFwiLi4vdXRpbHMvbG9nZ2VyXCI7XG5pbXBvcnQgdHlwZSB7XG4gIFNhbmRib3hCaW5kaW5nLFxuICBTYW5kYm94SW5zdGFuY2UsXG4gIFNhbmRib3hTZXR1cEZpZWxkcyxcbiAgV2l0aENvbmZpZyxcbn0gZnJvbSBcIi4vYWRhcHRlclwiO1xuaW1wb3J0IHR5cGUgeyBCdWlsdEluQmluZGluZ3MgfSBmcm9tIFwiLi9iaW5kaW5nc1wiO1xuaW1wb3J0IHR5cGUgeyBTYW5kYm94Q29udGV4dCB9IGZyb20gXCIuL2hhbmRsZVwiO1xuXG5jb25zdCBQT0xMX0lOVEVSVkFMX01TID0gNTA7XG5jb25zdCBQT0xMX1RJTUVPVVRfTVMgPSA1ICogNjAgKiAxMDAwO1xuXG50eXBlIFNldHVwQ29tbW9uRmllbGRzID0gUGFydGlhbDxTYW5kYm94U2V0dXBGaWVsZHM+ICYge1xuICBjd2Q/OiBzdHJpbmc7XG4gIHJ1bj86IChzYW5kYm94OiBTYW5kYm94SW5zdGFuY2UpID0+IFByb21pc2U8dm9pZD47XG4gIHNpZ25hbD86IEFib3J0U2lnbmFsO1xufTtcblxudHlwZSBUb0JpbmRpbmdVbmlvbjxUIGV4dGVuZHMgU2FuZGJveEJpbmRpbmcgfCBTYW5kYm94QmluZGluZ1tdPiA9XG4gIFQgZXh0ZW5kcyBTYW5kYm94QmluZGluZ1tdID8gVFtudW1iZXJdIDogVDtcblxudHlwZSBTZXR1cE9wdHNGb3JCaW5kaW5nPEIgZXh0ZW5kcyBTYW5kYm94QmluZGluZz4gPVxuICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRXhwbGljaXRBbnk6IC5cbiAgQiBleHRlbmRzIFNhbmRib3hCaW5kaW5nPGluZmVyIFQsIGluZmVyIEMsIGFueT5cbiAgICA/IHsgdHlwZTogVCB9ICYgU2V0dXBDb21tb25GaWVsZHMgJiBXaXRoQ29uZmlnPEM+XG4gICAgOiBuZXZlcjtcblxudHlwZSBJc0RlZmF1bHQ8VCBleHRlbmRzIFNhbmRib3hCaW5kaW5nIHwgU2FuZGJveEJpbmRpbmdbXT4gPVxuICBTYW5kYm94QmluZGluZyBleHRlbmRzIFQgPyB0cnVlIDogZmFsc2U7XG5cbmV4cG9ydCB0eXBlIFNldHVwT3B0czxcbiAgVFNhbmRib3hCaW5kaW5ncyBleHRlbmRzIFNhbmRib3hCaW5kaW5nIHwgU2FuZGJveEJpbmRpbmdbXSxcbj4gPVxuICB8IFNldHVwT3B0c0ZvckJpbmRpbmc8XG4gICAgICBJc0RlZmF1bHQ8VFNhbmRib3hCaW5kaW5ncz4gZXh0ZW5kcyB0cnVlXG4gICAgICAgID8gQnVpbHRJbkJpbmRpbmdzXG4gICAgICAgIDogVG9CaW5kaW5nVW5pb248VFNhbmRib3hCaW5kaW5ncz5cbiAgICA+XG4gIHwgKFNldHVwQ29tbW9uRmllbGRzICYgeyB0eXBlPzogbmV2ZXIgfSk7XG5cbmV4cG9ydCB0eXBlIFNldHVwUmVzdWx0ID0ge1xuICBkb25lOiBQcm9taXNlPFNhbmRib3hJbnN0YW5jZT47XG59O1xuXG5mdW5jdGlvbiBpc1NpbmdsZUJpbmRpbmcoXG4gIHNhbmRib3g6IFNhbmRib3hCaW5kaW5nIHwgU2FuZGJveEJpbmRpbmdbXVxuKTogc2FuZGJveCBpcyBTYW5kYm94QmluZGluZyB7XG4gIHJldHVybiAhQXJyYXkuaXNBcnJheShzYW5kYm94KTtcbn1cblxuLyoqIEF1dG8tZGV0ZWN0IHRoZSBkZWZhdWx0IGJpbmRpbmc6IHZlcmNlbCBcdTIxOTIgZG9ja2VyIFx1MjE5MiBsb2NhbCBjYXNjYWRlLiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0RGVmYXVsdEJpbmRpbmcoKTogUHJvbWlzZTxTYW5kYm94QmluZGluZz4ge1xuICBpZiAoYXdhaXQgaXNWZXJjZWwoKSkge1xuICAgIGNvbnN0IHsgdmVyY2VsU2FuZGJveCB9ID0gYXdhaXQgaW1wb3J0KFwiLi9iaW5kaW5ncy92ZXJjZWxcIik7XG4gICAgcmV0dXJuIHZlcmNlbFNhbmRib3goKTtcbiAgfVxuXG4gIGlmIChhd2FpdCBpc0RvY2tlckF2YWlsYWJsZSgpKSB7XG4gICAgY29uc3QgeyBkb2NrZXJTYW5kYm94IH0gPSBhd2FpdCBpbXBvcnQoXCIuL2JpbmRpbmdzL2RvY2tlclwiKTtcbiAgICByZXR1cm4gZG9ja2VyU2FuZGJveCgpO1xuICB9XG5cbiAgY29uc3QgeyBsb2NhbFNhbmRib3ggfSA9IGF3YWl0IGltcG9ydChcIi4vYmluZGluZ3MvbG9jYWxcIik7XG4gIHJldHVybiBsb2NhbFNhbmRib3goKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gaXNEb2NrZXJBdmFpbGFibGUoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIHRyeSB7XG4gICAgY29uc3QgeyBleGVjU3luYyB9ID0gYXdhaXQgaW1wb3J0KFwibm9kZTpjaGlsZF9wcm9jZXNzXCIpO1xuICAgIGV4ZWNTeW5jKFwiZG9ja2VyIHNhbmRib3ggLS1oZWxwXCIsIHsgc3RkaW86IFwiaWdub3JlXCIsIHRpbWVvdXQ6IDUwMDAgfSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiByZXNvbHZlQmluZGluZyhcbiAgc2FuZGJveDogU2FuZGJveEJpbmRpbmcgfCBTYW5kYm94QmluZGluZ1tdIHwgdW5kZWZpbmVkLFxuICB0eXBlPzogc3RyaW5nXG4pOiBQcm9taXNlPHsgYmluZGluZzogU2FuZGJveEJpbmRpbmc7IGJpbmRpbmdOYW1lOiBzdHJpbmcgfT4ge1xuICBpZiAoIXNhbmRib3gpIHtcbiAgICBjb25zdCBiaW5kaW5nID0gYXdhaXQgZ2V0RGVmYXVsdEJpbmRpbmcoKTtcbiAgICByZXR1cm4geyBiaW5kaW5nLCBiaW5kaW5nTmFtZTogYmluZGluZy50eXBlIH07XG4gIH1cbiAgaWYgKGlzU2luZ2xlQmluZGluZyhzYW5kYm94KSkge1xuICAgIHJldHVybiB7IGJpbmRpbmc6IHNhbmRib3gsIGJpbmRpbmdOYW1lOiBzYW5kYm94LnR5cGUgfTtcbiAgfVxuICBpZiAodHlwZSkge1xuICAgIGNvbnN0IG1hdGNoID0gc2FuZGJveC5maW5kKChiKSA9PiBiLnR5cGUgPT09IHR5cGUpO1xuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgIHRocm93IG5ldyBTYW5kYm94RXJyb3Ioe1xuICAgICAgICByZWFzb246IGBVbmtub3duIGJpbmRpbmcgdHlwZTogXCIke3R5cGV9XCIuIEF2YWlsYWJsZTogJHtzYW5kYm94Lm1hcCgoYikgPT4gYi50eXBlKS5qb2luKFwiLCBcIil9YCxcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4geyBiaW5kaW5nOiBtYXRjaCwgYmluZGluZ05hbWU6IG1hdGNoLnR5cGUgfTtcbiAgfVxuICBpZiAoc2FuZGJveC5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgU2FuZGJveEVycm9yKHsgcmVhc29uOiBcIk5vIHNhbmRib3ggYmluZGluZ3MgY29uZmlndXJlZFwiIH0pO1xuICB9XG4gIHJldHVybiB7IGJpbmRpbmc6IHNhbmRib3hbMF0sIGJpbmRpbmdOYW1lOiBzYW5kYm94WzBdLnR5cGUgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVNhbmRib3hJZChjdHg6IFNhbmRib3hDb250ZXh0KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgaWYgKGN0eC5zYW5kYm94SWQpIHtcbiAgICByZXR1cm4gY3R4LnNhbmRib3hJZDtcbiAgfVxuICBpZiAoIWN0eC5fc2Vzc2lvbklkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgXCJTYW5kYm94Q29udGV4dCBoYXMgbm8gc2FuZGJveElkIGFuZCBubyBzZXNzaW9uSWQgdG8gcmVzb2x2ZSBmcm9tXCJcbiAgICApO1xuICB9XG4gIGNvbnN0IHJlY29yZCA9IGF3YWl0IGN0eC5hZ2VudC5zdG9yYWdlLnNlc3Npb24uZ2V0KGN0eC5fc2Vzc2lvbklkKTtcbiAgY3R4LnNhbmRib3hJZCA9IHJlY29yZD8uc2FuZGJveElkID8/IGN0eC5fc2Vzc2lvbklkO1xuICByZXR1cm4gY3R4LnNhbmRib3hJZDtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNldHVwPFxuICBUU2FuZGJveEJpbmRpbmdzIGV4dGVuZHMgU2FuZGJveEJpbmRpbmcgfCBTYW5kYm94QmluZGluZ1tdLFxuPihcbiAgY3R4OiBTYW5kYm94Q29udGV4dCxcbiAgb3B0cz86IFNldHVwT3B0czxUU2FuZGJveEJpbmRpbmdzPlxuKTogUHJvbWlzZTxTZXR1cFJlc3VsdD4ge1xuICBcInVzZSBzdGVwXCI7XG4gIGNvbnN0IHNhbmRib3hJZCA9IGF3YWl0IHJlc29sdmVTYW5kYm94SWQoY3R4KTtcbiAgaWYgKGN0eC5fcGVuZGluZ1NldHVwKSB7XG4gICAgcmV0dXJuIHsgZG9uZTogY3R4Ll9wZW5kaW5nU2V0dXAgfTtcbiAgfVxuXG4gIGNvbnN0IGFnZW50ID0gY3R4LmFnZW50O1xuICBjb25zdCBsb2cgPSBjcmVhdGVMb2dnZXIoe1xuICAgIGNvbmZpZzogeyAuLi5hZ2VudC5vcHRpb25zLmxvZ2dpbmcsIG5hbWU6IGFnZW50Lm5hbWUgfSxcbiAgICBzdWJzeXN0ZW06IFwic2FuZGJveDpzZXR1cFwiLFxuICAgIGNvbnRleHQ6IHsgc2FuZGJveElkIH0sXG4gIH0pO1xuXG4gIGNvbnN0IGRvbmVSZXNvbHZlQmluZGluZyA9IGxvZy50aW1lKFwicmVzb2x2ZSBiaW5kaW5nXCIsIHtcbiAgICByZXF1ZXN0ZWRUeXBlOiBvcHRzPy50eXBlLFxuICB9KTtcbiAgY29uc3QgeyBiaW5kaW5nLCBiaW5kaW5nTmFtZSB9ID0gYXdhaXQgcmVzb2x2ZUJpbmRpbmcoXG4gICAgYWdlbnQub3B0aW9ucy5zYW5kYm94LFxuICAgIG9wdHM/LnR5cGVcbiAgKTtcbiAgZG9uZVJlc29sdmVCaW5kaW5nKCk7XG5cbiAgaWYgKG9wdHM/LmN3ZCkge1xuICAgIGN0eC5fY3dkID0gb3B0cy5jd2Q7XG4gIH1cblxuICBjb25zdCBzZXR1cExvZyA9IGxvZy53aXRoQ29udGV4dCh7XG4gICAgYmluZGluZzogYmluZGluZ05hbWUsXG4gICAgdmVyc2lvbjogb3B0cz8udmVyc2lvbiA/PyBiaW5kaW5nLmRlZmF1bHRzPy52ZXJzaW9uLFxuICB9KTtcblxuICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vQ29uZnVzaW5nVm9pZFR5cGU6IC5cbiAgbGV0IHJlc29sdmVCbG9ja2luZ1Byb21pc2UgPSAodmFsdWU6IHZvaWQpID0+IHZhbHVlO1xuICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRXhwbGljaXRBbnk6IC5cbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0VtcHR5QmxvY2tTdGF0ZW1lbnRzOiAuXG4gIGxldCByZWplY3RCbG9ja2luZ1Byb21pc2UgPSAoX3JlYXNvbj86IGFueSkgPT4ge307XG4gIGNvbnN0IGJsb2NraW5nUHJvbWlzZSA9IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICByZXNvbHZlQmxvY2tpbmdQcm9taXNlID0gcmVzb2x2ZTtcbiAgICByZWplY3RCbG9ja2luZ1Byb21pc2UgPSByZWplY3Q7XG4gIH0pO1xuXG4gIGN0eC5fcGVuZGluZ1NldHVwID0gKGFzeW5jICgpID0+IHtcbiAgICBsZXQgc2xlZXBPbGRJbnN0YW5jZTogUHJvbWlzZTx2b2lkPiB8IHVuZGVmaW5lZDtcbiAgICBjb25zdCBkb25lUGVuZGluZ1NldHVwID0gc2V0dXBMb2cudGltZShcInBlbmRpbmcgc2V0dXBcIik7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgZG9uZVN0b3JhZ2VHZXQgPSBzZXR1cExvZy50aW1lKFwic3RvcmFnZS5zYW5kYm94LmdldFwiKTtcbiAgICAgIGNvbnN0IHJlY29yZCA9IGF3YWl0IGFnZW50LnN0b3JhZ2Uuc2FuZGJveC5nZXQoc2FuZGJveElkKTtcbiAgICAgIGRvbmVTdG9yYWdlR2V0KCk7XG5cbiAgICAgIGNvbnN0IGJpbmRpbmdEZWZhdWx0cyA9IGJpbmRpbmcuZGVmYXVsdHMgPz8ge307XG4gICAgICBjb25zdCBlZmZlY3RpdmVWZXJzaW9uID0gb3B0cz8udmVyc2lvbiA/PyBiaW5kaW5nRGVmYXVsdHMudmVyc2lvbiA/PyBudWxsO1xuICAgICAgY29uc3QgZWZmZWN0aXZlUnVuID0gb3B0cz8ucnVuID8/IGJpbmRpbmdEZWZhdWx0cy5ydW47XG4gICAgICBjb25zdCBlZmZlY3RpdmVOZXR3b3JrUG9saWN5ID1cbiAgICAgICAgb3B0cz8ubmV0d29ya1BvbGljeSA/PyBiaW5kaW5nRGVmYXVsdHMubmV0d29ya1BvbGljeSA/PyBudWxsO1xuICAgICAgY29uc3QgZWZmZWN0aXZlQ3dkID1cbiAgICAgICAgY3R4Ll9jd2QgfHwgb3B0cz8uY3dkIHx8IGJpbmRpbmdEZWZhdWx0cy5jd2QgfHwgbnVsbDtcbiAgICAgIGlmIChlZmZlY3RpdmVDd2QpIHtcbiAgICAgICAgY3R4Ll9jd2QgPSBlZmZlY3RpdmVDd2Q7XG4gICAgICB9XG4gICAgICBjb25zdCBlZmZlY3RpdmVDb25maWcgPSB7XG4gICAgICAgIC4uLmJpbmRpbmdEZWZhdWx0cy5jb25maWcsXG4gICAgICAgIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9FeHBsaWNpdEFueTogb3B0cyBpcyBhIHVuaW9uOyBjb25maWcgZXhpc3RzIG9uIGJpbmRpbmctc3BlY2lmaWMgYnJhbmNoZXNcbiAgICAgICAgLi4uKG9wdHMgYXMgYW55KT8uY29uZmlnLFxuICAgICAgfTtcblxuICAgICAgaWYgKHJlY29yZCkge1xuICAgICAgICBjb25zdCB2ZXJzaW9uTWF0Y2hlcyA9XG4gICAgICAgICAgIWVmZmVjdGl2ZVZlcnNpb24gfHwgcmVjb3JkLnNldHVwPy52ZXJzaW9uID09PSBlZmZlY3RpdmVWZXJzaW9uO1xuXG4gICAgICAgIGlmICh2ZXJzaW9uTWF0Y2hlcyAmJiByZWNvcmQuc2V0dXA/LmNvbXBsZXRlZEF0KSB7XG4gICAgICAgICAgcmVzb2x2ZUJsb2NraW5nUHJvbWlzZSgpO1xuICAgICAgICAgIGNvbnN0IGRvbmVDb25uZWN0RXhpc3RpbmcgPSBzZXR1cExvZy50aW1lKFxuICAgICAgICAgICAgXCJjb25uZWN0IGV4aXN0aW5nIHNhbmRib3hcIixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgc2V0dXBTdGF0ZTogXCJjb21wbGV0ZWRcIixcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IGluc3RhbmNlID0gYXdhaXQgYmluZGluZy5jb25uZWN0KHtcbiAgICAgICAgICAgIGFnZW50LFxuICAgICAgICAgICAgbWV0YWRhdGE6IHJlY29yZC5zZXR1cC5tZXRhZGF0YSxcbiAgICAgICAgICAgIGN3ZDogcmVjb3JkLnNldHVwLmN3ZCxcbiAgICAgICAgICAgIHNpZ25hbDogb3B0cz8uc2lnbmFsLFxuICAgICAgICAgICAgbG9nOiBzZXR1cExvZyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBkb25lQ29ubmVjdEV4aXN0aW5nKCk7XG4gICAgICAgICAgY3R4Ll9jd2QgPSBpbnN0YW5jZS5jd2Q7XG4gICAgICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZlcnNpb25NYXRjaGVzICYmICFyZWNvcmQuc2V0dXA/LmNvbXBsZXRlZEF0KSB7XG4gICAgICAgICAgcmVzb2x2ZUJsb2NraW5nUHJvbWlzZSgpO1xuICAgICAgICAgIGNvbnN0IGRvbmVQb2xsVW50aWxSZWFkeSA9IHNldHVwTG9nLnRpbWUoXCJwb2xsIHVudGlsIHJlYWR5XCIpO1xuICAgICAgICAgIGF3YWl0IHBvbGxVbnRpbFJlYWR5KGN0eCwgb3B0cz8uc2lnbmFsKTtcbiAgICAgICAgICBkb25lUG9sbFVudGlsUmVhZHkoKTtcblxuICAgICAgICAgIGNvbnN0IGRvbmVTdG9yYWdlR2V0UG9zdFBvbGwgPSBzZXR1cExvZy50aW1lKFxuICAgICAgICAgICAgXCJzdG9yYWdlLnNhbmRib3guZ2V0IChwb3N0LXBvbGwpXCJcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IHJlYWR5ID0gYXdhaXQgYWdlbnQuc3RvcmFnZS5zYW5kYm94LmdldChzYW5kYm94SWQpO1xuICAgICAgICAgIGRvbmVTdG9yYWdlR2V0UG9zdFBvbGwoKTtcblxuICAgICAgICAgIGlmICghcmVhZHkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBTYW5kYm94Tm90Rm91bmRFcnJvcih7IGlkOiBzYW5kYm94SWQgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGRvbmVDb25uZWN0RXhpc3RpbmcgPSBzZXR1cExvZy50aW1lKFxuICAgICAgICAgICAgXCJjb25uZWN0IGV4aXN0aW5nIHNhbmRib3hcIixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgc2V0dXBTdGF0ZTogXCJwb3N0LXBvbGxcIixcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IGluc3RhbmNlID0gYXdhaXQgYmluZGluZy5jb25uZWN0KHtcbiAgICAgICAgICAgIGFnZW50LFxuICAgICAgICAgICAgbWV0YWRhdGE6IHJlYWR5LnNldHVwLm1ldGFkYXRhLFxuICAgICAgICAgICAgY3dkOiByZWFkeS5zZXR1cC5jd2QsXG4gICAgICAgICAgICBzaWduYWw6IG9wdHM/LnNpZ25hbCxcbiAgICAgICAgICAgIGxvZzogc2V0dXBMb2csXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgZG9uZUNvbm5lY3RFeGlzdGluZygpO1xuICAgICAgICAgIGN0eC5fY3dkID0gaW5zdGFuY2UuY3dkO1xuICAgICAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZWNvcmQuc2V0dXAubWV0YWRhdGEpIHtcbiAgICAgICAgICBjb25zdCBvbGRJbnN0YW5jZU1ldGFkYXRhID0gcmVjb3JkLnNldHVwLm1ldGFkYXRhO1xuICAgICAgICAgIHNsZWVwT2xkSW5zdGFuY2UgPSAoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZG9uZVN0b3BPbGRJbnN0YW5jZSA9IHNldHVwTG9nLnRpbWUoXG4gICAgICAgICAgICAgIFwic3RvcCBvbGQgc2FuZGJveCBpbnN0YW5jZVwiXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgY29uc3Qgb2xkID0gYXdhaXQgYmluZGluZy5jb25uZWN0KHtcbiAgICAgICAgICAgICAgICBhZ2VudCxcbiAgICAgICAgICAgICAgICBtZXRhZGF0YTogb2xkSW5zdGFuY2VNZXRhZGF0YSxcbiAgICAgICAgICAgICAgICBsb2c6IHNldHVwTG9nLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgYXdhaXQgb2xkLnN0b3AoKTtcbiAgICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgICBkb25lU3RvcE9sZEluc3RhbmNlKCk7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRvbmVTdG9wT2xkSW5zdGFuY2UoKTtcbiAgICAgICAgICB9KSgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgICBjb25zdCBzZXR1cF86IFNhbmRib3hbXCJzZXR1cFwiXSA9IHtcbiAgICAgICAgYmluZGluZzogYmluZGluZ05hbWUsXG4gICAgICAgIHZlcnNpb246IGVmZmVjdGl2ZVZlcnNpb24gPz8gcmVjb3JkPy5zZXR1cD8udmVyc2lvbiA/PyBudWxsLFxuICAgICAgICBuZXR3b3JrUG9saWN5OlxuICAgICAgICAgIGVmZmVjdGl2ZU5ldHdvcmtQb2xpY3kgPz8gcmVjb3JkPy5zZXR1cD8ubmV0d29ya1BvbGljeSA/PyBudWxsLFxuICAgICAgICBjb21wbGV0ZWRBdDogbnVsbCxcbiAgICAgICAgbWV0YWRhdGE6IG51bGwsXG4gICAgICAgIGN3ZDogbnVsbCxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IG5ld1JlY29yZDogU2FuZGJveCA9IHtcbiAgICAgICAgaWQ6IHNhbmRib3hJZCxcbiAgICAgICAgc2V0dXA6IHNldHVwXyxcbiAgICAgICAgY3JlYXRlZEF0OiByZWNvcmQ/LmNyZWF0ZWRBdCA/PyBub3csXG4gICAgICAgIGxhc3RBY3RpdmVBdDogbm93LFxuICAgICAgfTtcblxuICAgICAgY29uc3QgZG9uZVN0b3JhZ2VTZXRQZW5kaW5nID0gc2V0dXBMb2cudGltZShcbiAgICAgICAgXCJzdG9yYWdlLnNhbmRib3guc2V0IChzZXR1cCBwZW5kaW5nKVwiXG4gICAgICApO1xuICAgICAgYXdhaXQgYWdlbnQuc3RvcmFnZS5zYW5kYm94LnNldChzYW5kYm94SWQsIG5ld1JlY29yZCk7XG4gICAgICBkb25lU3RvcmFnZVNldFBlbmRpbmcoKTtcblxuICAgICAgcmVzb2x2ZUJsb2NraW5nUHJvbWlzZSgpO1xuXG4gICAgICBjb25zdCBkb25lQmluZGluZ0NyZWF0ZSA9IHNldHVwTG9nLnRpbWUoXCJiaW5kaW5nLmNyZWF0ZVwiKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGJpbmRpbmcuY3JlYXRlKHtcbiAgICAgICAgY3dkOiBjdHguX2N3ZCA/PyBcIi5cIixcbiAgICAgICAgYWdlbnQsXG4gICAgICAgIHNldHVwOiB7XG4gICAgICAgICAgLi4uc2V0dXBfLFxuICAgICAgICAgIHJ1bjogZWZmZWN0aXZlUnVuLFxuICAgICAgICAgIGNvbmZpZzogZWZmZWN0aXZlQ29uZmlnLFxuICAgICAgICB9LFxuICAgICAgICByZWNvcmQ6IG5ld1JlY29yZCxcbiAgICAgICAgc2lnbmFsOiBvcHRzPy5zaWduYWwsXG4gICAgICAgIGxvZzogc2V0dXBMb2csXG4gICAgICB9KTtcbiAgICAgIGRvbmVCaW5kaW5nQ3JlYXRlKCk7XG5cbiAgICAgIHNldHVwXy5jb21wbGV0ZWRBdCA9IERhdGUubm93KCk7XG4gICAgICBzZXR1cF8ubWV0YWRhdGEgPSByZXN1bHQubWV0YWRhdGE7XG4gICAgICBzZXR1cF8uY3dkID0gcmVzdWx0Lmluc3RhbmNlLmN3ZDtcblxuICAgICAgY29uc3QgZG9uZVN0b3JhZ2VVcGRhdGVDb21wbGV0ZSA9IHNldHVwTG9nLnRpbWUoXG4gICAgICAgIFwic3RvcmFnZS5zYW5kYm94LnVwZGF0ZSAoc2V0dXAgY29tcGxldGUpXCJcbiAgICAgICk7XG4gICAgICBhd2FpdCBhZ2VudC5zdG9yYWdlLnNhbmRib3gudXBkYXRlKHNhbmRib3hJZCwge1xuICAgICAgICBzZXR1cDogc2V0dXBfLFxuICAgICAgICBsYXN0QWN0aXZlQXQ6IERhdGUubm93KCksXG4gICAgICB9KTtcbiAgICAgIGRvbmVTdG9yYWdlVXBkYXRlQ29tcGxldGUoKTtcblxuICAgICAgY3R4Ll9jd2QgPSByZXN1bHQuaW5zdGFuY2UuY3dkO1xuICAgICAgcmV0dXJuIHJlc3VsdC5pbnN0YW5jZTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGN0eC5fcGVuZGluZ1NldHVwID0gdW5kZWZpbmVkO1xuICAgICAgcmVqZWN0QmxvY2tpbmdQcm9taXNlKGVycik7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGNvbnN0IGRvbmVGaW5hbGl6ZSA9IHNldHVwTG9nLnRpbWUoXCJmaW5hbGl6ZSBzZXR1cFwiKTtcbiAgICAgIGF3YWl0IHNsZWVwT2xkSW5zdGFuY2U7XG4gICAgICBkb25lRmluYWxpemUoKTtcbiAgICAgIGRvbmVQZW5kaW5nU2V0dXAoKTtcbiAgICB9XG4gIH0pKCk7XG5cbiAgY29uc3QgZG9uZVdhaXRGb3JVbmJsb2NrID0gc2V0dXBMb2cudGltZShcIndhaXQgZm9yIHNldHVwIHVuYmxvY2tcIik7XG4gIGF3YWl0IGJsb2NraW5nUHJvbWlzZTtcbiAgZG9uZVdhaXRGb3JVbmJsb2NrKCk7XG4gIHJldHVybiB7IGRvbmU6IGN0eC5fcGVuZGluZ1NldHVwIH07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlKFxuICBjdHg6IFNhbmRib3hDb250ZXh0LFxuICBzaWduYWw/OiBBYm9ydFNpZ25hbFxuKTogUHJvbWlzZTxTYW5kYm94SW5zdGFuY2U+IHtcbiAgY29uc3Qgc2FuZGJveElkID0gYXdhaXQgcmVzb2x2ZVNhbmRib3hJZChjdHgpO1xuICBjb25zdCBhZ2VudCA9IGN0eC5hZ2VudDtcbiAgY29uc3QgbG9nID0gY3JlYXRlTG9nZ2VyKHtcbiAgICBjb25maWc6IHsgLi4uYWdlbnQub3B0aW9ucy5sb2dnaW5nLCBuYW1lOiBhZ2VudC5uYW1lIH0sXG4gICAgc3Vic3lzdGVtOiBcInNhbmRib3g6cmVzb2x2ZVwiLFxuICAgIGNvbnRleHQ6IHsgc2FuZGJveElkIH0sXG4gIH0pO1xuXG4gIGlmIChjdHguX3BlbmRpbmdTZXR1cCkge1xuICAgIHJldHVybiBhd2FpdCBjdHguX3BlbmRpbmdTZXR1cDtcbiAgfVxuXG4gIGxldCByZWNvcmQgPSBhd2FpdCBhZ2VudC5zdG9yYWdlLnNhbmRib3guZ2V0KHNhbmRib3hJZCk7XG5cbiAgaWYgKCFyZWNvcmQpIHtcbiAgICBjb25zdCB7IGRvbmUgfSA9IGF3YWl0IHNldHVwKGN0eCwgeyBzaWduYWwgfSk7XG4gICAgcmV0dXJuIGF3YWl0IGRvbmU7XG4gIH1cblxuICBpZiAoIXJlY29yZC5zZXR1cD8uY29tcGxldGVkQXQpIHtcbiAgICBhd2FpdCBwb2xsVW50aWxSZWFkeShjdHgsIHNpZ25hbCk7XG4gICAgcmVjb3JkID0gYXdhaXQgYWdlbnQuc3RvcmFnZS5zYW5kYm94LmdldChzYW5kYm94SWQpO1xuICB9XG5cbiAgaWYgKCFyZWNvcmQpIHtcbiAgICB0aHJvdyBuZXcgU2FuZGJveE5vdEZvdW5kRXJyb3IoeyBpZDogc2FuZGJveElkIH0pO1xuICB9XG5cbiAgY29uc3QgeyBiaW5kaW5nIH0gPSBhd2FpdCByZXNvbHZlQmluZGluZyhcbiAgICBjdHguYWdlbnQub3B0aW9ucy5zYW5kYm94LFxuICAgIHJlY29yZC5zZXR1cC5iaW5kaW5nXG4gICk7XG5cbiAgYWdlbnQuc3RvcmFnZS5zYW5kYm94XG4gICAgLnVwZGF0ZShzYW5kYm94SWQsIHsgbGFzdEFjdGl2ZUF0OiBEYXRlLm5vdygpIH0pXG4gICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgbG9nLmVycm9yKFwiRmFpbGVkIHRvIHVwZGF0ZSBzYW5kYm94IGxhc3RBY3RpdmVBdFwiLCB7IGVycm9yIH0pO1xuICAgIH0pO1xuXG4gIGNvbnN0IGluc3RhbmNlID0gYXdhaXQgYmluZGluZy5jb25uZWN0KHtcbiAgICBhZ2VudCxcbiAgICBtZXRhZGF0YTogcmVjb3JkLnNldHVwLm1ldGFkYXRhLFxuICAgIGN3ZDogcmVjb3JkLnNldHVwLmN3ZCxcbiAgICBzaWduYWwsXG4gICAgbG9nLFxuICB9KTtcbiAgY3R4Ll9jd2QgPSBpbnN0YW5jZS5jd2Q7XG4gIHJldHVybiBpbnN0YW5jZTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcG9sbFVudGlsUmVhZHkoXG4gIGN0eDogU2FuZGJveENvbnRleHQsXG4gIHNpZ25hbD86IEFib3J0U2lnbmFsXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgaWQgPSBjdHguc2FuZGJveElkITtcbiAgY29uc3QgZGVhZGxpbmUgPSBEYXRlLm5vdygpICsgUE9MTF9USU1FT1VUX01TO1xuXG4gIHdoaWxlIChEYXRlLm5vdygpIDwgZGVhZGxpbmUpIHtcbiAgICBzaWduYWw/LnRocm93SWZBYm9ydGVkKCk7XG5cbiAgICBjb25zdCByZWNvcmQgPSBhd2FpdCBjdHguYWdlbnQuc3RvcmFnZS5zYW5kYm94LmdldChpZCk7XG4gICAgaWYgKHJlY29yZD8uc2V0dXA/LmNvbXBsZXRlZEF0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgYXdhaXQgbmV3IFByb21pc2UoKHIpID0+IHNldFRpbWVvdXQociwgUE9MTF9JTlRFUlZBTF9NUykpO1xuICB9XG5cbiAgdGhyb3cgbmV3IFNhbmRib3hFcnJvcih7XG4gICAgcmVhc29uOiBgVGltZWQgb3V0IHdhaXRpbmcgZm9yIHNhbmRib3ggXCIke2lkfVwiIHNldHVwIHRvIGNvbXBsZXRlYCxcbiAgfSk7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBTYW5kYm94SW5zdGFuY2UgfSBmcm9tIFwiLi9hZGFwdGVyXCI7XG5pbXBvcnQgdHlwZSB7IFNhbmRib3hDb250ZXh0IH0gZnJvbSBcIi4vaGFuZGxlXCI7XG5pbXBvcnQgeyByZXNvbHZlIH0gZnJvbSBcIi4vc2V0dXBcIjtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGV4ZWMoXG4gIHNhbmRib3hDb250ZXh0OiBTYW5kYm94Q29udGV4dCxcbiAgLi4ub3B0czogUGFyYW1ldGVyczxTYW5kYm94SW5zdGFuY2VbXCJleGVjXCJdPlxuKSB7XG4gIC8vIG5vdGU6IC5leGVjIGNhbid0IGJlIGEgc3RlcCBiZWNhdXNlIGl0IHJldHVybnMgbG9ncyBhbmQgYSByZXN1bHQgcHJvbWlzZSB3aGljaCBjYW4ndCBiZSBzZXJpYWxpemVkXG4gIGNvbnN0IHNieCA9IGF3YWl0IHJlc29sdmUoc2FuZGJveENvbnRleHQpO1xuICByZXR1cm4gYXdhaXQgc2J4LmV4ZWMoLi4ub3B0cyk7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBTYW5kYm94SW5zdGFuY2UgfSBmcm9tIFwiLi9hZGFwdGVyXCI7XG5pbXBvcnQgdHlwZSB7IFNhbmRib3hDb250ZXh0IH0gZnJvbSBcIi4vaGFuZGxlXCI7XG5pbXBvcnQgeyByZXNvbHZlIH0gZnJvbSBcIi4vc2V0dXBcIjtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldERvbWFpbihcbiAgc2FuZGJveENvbnRleHQ6IFNhbmRib3hDb250ZXh0LFxuICAuLi5vcHRzOiBQYXJhbWV0ZXJzPFNhbmRib3hJbnN0YW5jZVtcImdldERvbWFpblwiXT5cbikge1xuICBcInVzZSBzdGVwXCI7XG4gIGNvbnN0IHNieCA9IGF3YWl0IHJlc29sdmUoc2FuZGJveENvbnRleHQpO1xuICByZXR1cm4gYXdhaXQgc2J4LmdldERvbWFpbiguLi5vcHRzKTtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IFNhbmRib3hJbnN0YW5jZSB9IGZyb20gXCIuL2FkYXB0ZXJcIjtcbmltcG9ydCB0eXBlIHsgU2FuZGJveENvbnRleHQgfSBmcm9tIFwiLi9oYW5kbGVcIjtcbmltcG9ydCB7IHJlc29sdmUgfSBmcm9tIFwiLi9zZXR1cFwiO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0U3RhdHVzKFxuICBzYW5kYm94Q29udGV4dDogU2FuZGJveENvbnRleHQsXG4gIC4uLm9wdHM6IFBhcmFtZXRlcnM8U2FuZGJveEluc3RhbmNlW1wiZ2V0U3RhdHVzXCJdPlxuKSB7XG4gIFwidXNlIHN0ZXBcIjtcbiAgY29uc3Qgc2J4ID0gYXdhaXQgcmVzb2x2ZShzYW5kYm94Q29udGV4dCk7XG4gIHJldHVybiBhd2FpdCBzYnguZ2V0U3RhdHVzKC4uLm9wdHMpO1xufVxuIiwgImltcG9ydCB0eXBlIHsgU2FuZGJveEluc3RhbmNlIH0gZnJvbSBcIi4vYWRhcHRlclwiO1xuaW1wb3J0IHR5cGUgeyBTYW5kYm94Q29udGV4dCB9IGZyb20gXCIuL2hhbmRsZVwiO1xuaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gXCIuL3NldHVwXCI7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBraWxsKFxuICBzYW5kYm94Q29udGV4dDogU2FuZGJveENvbnRleHQsXG4gIC4uLm9wdHM6IFBhcmFtZXRlcnM8U2FuZGJveEluc3RhbmNlW1wia2lsbFwiXT5cbikge1xuICBcInVzZSBzdGVwXCI7XG4gIGNvbnN0IHNieCA9IGF3YWl0IHJlc29sdmUoc2FuZGJveENvbnRleHQpO1xuICByZXR1cm4gYXdhaXQgc2J4LmtpbGwoLi4ub3B0cyk7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBTYW5kYm94SW5zdGFuY2UgfSBmcm9tIFwiLi9hZGFwdGVyXCI7XG5pbXBvcnQgdHlwZSB7IFNhbmRib3hDb250ZXh0IH0gZnJvbSBcIi4vaGFuZGxlXCI7XG5pbXBvcnQgeyByZXNvbHZlIH0gZnJvbSBcIi4vc2V0dXBcIjtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRGaWxlKFxuICBzYW5kYm94Q29udGV4dDogU2FuZGJveENvbnRleHQsXG4gIC4uLm9wdHM6IFBhcmFtZXRlcnM8U2FuZGJveEluc3RhbmNlW1wicmVhZEZpbGVcIl0+XG4pIHtcbiAgXCJ1c2Ugc3RlcFwiO1xuICBjb25zdCBzYnggPSBhd2FpdCByZXNvbHZlKHNhbmRib3hDb250ZXh0KTtcbiAgcmV0dXJuIGF3YWl0IHNieC5yZWFkRmlsZSguLi5vcHRzKTtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IFNhbmRib3hJbnN0YW5jZSB9IGZyb20gXCIuL2FkYXB0ZXJcIjtcbmltcG9ydCB0eXBlIHsgU2FuZGJveENvbnRleHQgfSBmcm9tIFwiLi9oYW5kbGVcIjtcbmltcG9ydCB7IHJlc29sdmUgfSBmcm9tIFwiLi9zZXR1cFwiO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc25hcHNob3QoXG4gIHNhbmRib3hDb250ZXh0OiBTYW5kYm94Q29udGV4dCxcbiAgLi4ub3B0czogUGFyYW1ldGVyczxTYW5kYm94SW5zdGFuY2VbXCJzbmFwc2hvdFwiXT5cbikge1xuICBcInVzZSBzdGVwXCI7XG4gIGNvbnN0IHNieCA9IGF3YWl0IHJlc29sdmUoc2FuZGJveENvbnRleHQpO1xuICByZXR1cm4gYXdhaXQgc2J4LnNuYXBzaG90KC4uLm9wdHMpO1xufVxuIiwgImltcG9ydCB0eXBlIHsgU2FuZGJveEluc3RhbmNlIH0gZnJvbSBcIi4vYWRhcHRlclwiO1xuaW1wb3J0IHR5cGUgeyBTYW5kYm94Q29udGV4dCB9IGZyb20gXCIuL2hhbmRsZVwiO1xuaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gXCIuL3NldHVwXCI7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzdGFydChcbiAgc2FuZGJveENvbnRleHQ6IFNhbmRib3hDb250ZXh0LFxuICAuLi5vcHRzOiBQYXJhbWV0ZXJzPFNhbmRib3hJbnN0YW5jZVtcInN0YXJ0XCJdPlxuKSB7XG4gIFwidXNlIHN0ZXBcIjtcbiAgY29uc3Qgc2J4ID0gYXdhaXQgcmVzb2x2ZShzYW5kYm94Q29udGV4dCk7XG4gIHJldHVybiBhd2FpdCBzYnguc3RhcnQoLi4ub3B0cyk7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBTYW5kYm94SW5zdGFuY2UgfSBmcm9tIFwiLi9hZGFwdGVyXCI7XG5pbXBvcnQgdHlwZSB7IFNhbmRib3hDb250ZXh0IH0gZnJvbSBcIi4vaGFuZGxlXCI7XG5pbXBvcnQgeyByZXNvbHZlIH0gZnJvbSBcIi4vc2V0dXBcIjtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHN0b3AoXG4gIHNhbmRib3hDb250ZXh0OiBTYW5kYm94Q29udGV4dCxcbiAgLi4ub3B0czogUGFyYW1ldGVyczxTYW5kYm94SW5zdGFuY2VbXCJzdG9wXCJdPlxuKSB7XG4gIFwidXNlIHN0ZXBcIjtcbiAgY29uc3Qgc2J4ID0gYXdhaXQgcmVzb2x2ZShzYW5kYm94Q29udGV4dCk7XG4gIHJldHVybiBhd2FpdCBzYnguc3RvcCguLi5vcHRzKTtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IFNhbmRib3hJbnN0YW5jZSB9IGZyb20gXCIuL2FkYXB0ZXJcIjtcbmltcG9ydCB0eXBlIHsgU2FuZGJveENvbnRleHQgfSBmcm9tIFwiLi9oYW5kbGVcIjtcbmltcG9ydCB7IHJlc29sdmUgfSBmcm9tIFwiLi9zZXR1cFwiO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdXBkYXRlTmV0d29ya1BvbGljeShcbiAgc2FuZGJveENvbnRleHQ6IFNhbmRib3hDb250ZXh0LFxuICAuLi5vcHRzOiBQYXJhbWV0ZXJzPFNhbmRib3hJbnN0YW5jZVtcInVwZGF0ZU5ldHdvcmtQb2xpY3lcIl0+XG4pIHtcbiAgXCJ1c2Ugc3RlcFwiO1xuICBjb25zdCBzYnggPSBhd2FpdCByZXNvbHZlKHNhbmRib3hDb250ZXh0KTtcbiAgcmV0dXJuIGF3YWl0IHNieC51cGRhdGVOZXR3b3JrUG9saWN5KC4uLm9wdHMpO1xufVxuIiwgImltcG9ydCB0eXBlIHsgU2FuZGJveEluc3RhbmNlIH0gZnJvbSBcIi4vYWRhcHRlclwiO1xuaW1wb3J0IHR5cGUgeyBTYW5kYm94Q29udGV4dCB9IGZyb20gXCIuL2hhbmRsZVwiO1xuaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gXCIuL3NldHVwXCI7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3cml0ZUZpbGVzKFxuICBzYW5kYm94Q29udGV4dDogU2FuZGJveENvbnRleHQsXG4gIC4uLm9wdHM6IFBhcmFtZXRlcnM8U2FuZGJveEluc3RhbmNlW1wid3JpdGVGaWxlc1wiXT5cbikge1xuICBcInVzZSBzdGVwXCI7XG4gIGNvbnN0IHNieCA9IGF3YWl0IHJlc29sdmUoc2FuZGJveENvbnRleHQpO1xuICByZXR1cm4gYXdhaXQgc2J4LndyaXRlRmlsZXMoLi4ub3B0cyk7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBUb29sU2V0IH0gZnJvbSBcImFpXCI7XG5pbXBvcnQgeyB1bGlkIH0gZnJvbSBcInVsaWRcIjtcbmltcG9ydCB0eXBlIHsgQW55QWdlbnQgfSBmcm9tIFwiLi4vYWdlbnQvY2xpZW50XCI7XG5pbXBvcnQgeyBnZXRTZXNzaW9uQ29udGV4dHMgfSBmcm9tIFwiLi4vYWdlbnQvY2xpZW50XCI7XG5pbXBvcnQgdHlwZSB7IFNhbmRib3hCaW5kaW5nIH0gZnJvbSBcIi4uL3NhbmRib3gvYWRhcHRlclwiO1xuaW1wb3J0IHsgbGF6eVNhbmRib3hIYW5kbGUgfSBmcm9tIFwiLi4vc2FuZGJveC9oYW5kbGVcIjtcbmltcG9ydCB7IGhpc3RvcnkgfSBmcm9tIFwiLi9oaXN0b3J5XCI7XG5pbXBvcnQgeyBpbnRlcnJ1cHQgfSBmcm9tIFwiLi9pbnRlcnJ1cHRcIjtcbmltcG9ydCB7IHNlbmQgfSBmcm9tIFwiLi9zZW5kXCI7XG5pbXBvcnQgeyBzdHJlYW0gfSBmcm9tIFwiLi9zdHJlYW1cIjtcbmltcG9ydCB7IHVwZGF0ZSB9IGZyb20gXCIuL3VwZGF0ZVwiO1xuaW1wb3J0IHsgdXNhZ2UgfSBmcm9tIFwiLi91c2FnZVwiO1xuXG50eXBlIFNlc3Npb25PcHRpb25zID0ge1xuICBpZD86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIFNlc3Npb25Db250ZXh0ID0ge1xuICBhZ2VudDogQW55QWdlbnQ7XG4gIHNlc3Npb25JZDogc3RyaW5nO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHNlc3Npb25IYW5kbGU8XG4gIFRvb2xzIGV4dGVuZHMgVG9vbFNldCxcbiAgVENvbnRleHQsXG4gIFRTYW5kYm94QmluZGluZ3MgZXh0ZW5kcyBTYW5kYm94QmluZGluZyB8IFNhbmRib3hCaW5kaW5nW10gPSBTYW5kYm94QmluZGluZyxcbiAgVE1lc3NhZ2VNZXRhZGF0YSA9IHVua25vd24sXG4gIFRTdGF0ZSBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4+KGFnZW50OiBBbnlBZ2VudCwgaWQ/OiBzdHJpbmcgfCBTZXNzaW9uT3B0aW9ucykge1xuICBjb25zdCBzZXNzaW9uSWQgPVxuICAgIHR5cGVvZiBpZCA9PT0gXCJzdHJpbmdcIiA/IGlkIDogKGlkPy5pZCA/PyBgc2Vzc2lvbl8ke3VsaWQoKX1gKTtcblxuICBjb25zdCBjb250ZXh0cyA9IGdldFNlc3Npb25Db250ZXh0cyhhZ2VudCk7XG4gIGxldCBzZXNzaW9uQ29udGV4dCA9IGNvbnRleHRzLmdldChzZXNzaW9uSWQpO1xuICBpZiAoIXNlc3Npb25Db250ZXh0KSB7XG4gICAgc2Vzc2lvbkNvbnRleHQgPSB7IGFnZW50LCBzZXNzaW9uSWQgfTtcbiAgICBjb250ZXh0cy5zZXQoc2Vzc2lvbklkLCBzZXNzaW9uQ29udGV4dCk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGlkOiBzZXNzaW9uSWQsXG4gICAgc2VuZDogKHNlbmQ8VG9vbHMsIFRDb250ZXh0LCBUTWVzc2FnZU1ldGFkYXRhLCBUU3RhdGU+KS5iaW5kKFxuICAgICAgbnVsbCxcbiAgICAgIHNlc3Npb25Db250ZXh0XG4gICAgKSxcbiAgICBzdHJlYW06IHN0cmVhbS5iaW5kKG51bGwsIHNlc3Npb25Db250ZXh0KSxcbiAgICBoaXN0b3J5OiAoaGlzdG9yeTxUb29scz4pLmJpbmQobnVsbCwgc2Vzc2lvbkNvbnRleHQpLFxuICAgIGludGVycnVwdDogaW50ZXJydXB0LmJpbmQobnVsbCwgc2Vzc2lvbkNvbnRleHQpLFxuICAgIHVzYWdlOiB1c2FnZS5iaW5kKG51bGwsIHNlc3Npb25Db250ZXh0KSxcbiAgICB1cGRhdGU6ICh1cGRhdGU8VFN0YXRlPikuYmluZChudWxsLCBzZXNzaW9uQ29udGV4dCksXG4gICAgc2FuZGJveDogbGF6eVNhbmRib3hIYW5kbGU8VFNhbmRib3hCaW5kaW5ncz4oYWdlbnQsIHNlc3Npb25JZCksXG4gIH07XG59XG4iLCAiaW1wb3J0IHR5cGUge1xuICBJbmZlclVJVG9vbHMsXG4gIFJlYXNvbmluZ1VJUGFydCxcbiAgVGV4dFVJUGFydCxcbiAgVG9vbFNldCxcbiAgVUlNZXNzYWdlLFxufSBmcm9tIFwiYWlcIjtcbmltcG9ydCB0eXBlIHsgQWdlbnREYXRhVHlwZXMgfSBmcm9tIFwiLi4vYWdlbnQvcmVnaXN0cnlcIjtcbmltcG9ydCB0eXBlIHsgTWVzc2FnZSwgUGFydCB9IGZyb20gXCIuLi9zdG9yYWdlXCI7XG5cbi8qKiBTdWItdG9vbCBwYXJ0cyAoZnJvbSBKYXZhU2NyaXB0IG1ldGEtdG9vbCkgdXNlIHRoaXMgdG9vbENhbGxJZCBwcmVmaXguICovXG5mdW5jdGlvbiBpc1N1YlRvb2xQYXJ0KHBhcnQ6IFBhcnQpOiBib29sZWFuIHtcbiAgY29uc3QgcCA9IHBhcnQucGFydCBhcyB7IHRvb2xDYWxsSWQ/OiBzdHJpbmcgfTtcbiAgcmV0dXJuIHR5cGVvZiBwPy50b29sQ2FsbElkID09PSBcInN0cmluZ1wiICYmIHAudG9vbENhbGxJZC5zdGFydHNXaXRoKFwianNfdGNfXCIpO1xufVxuXG5mdW5jdGlvbiBpc1N0cmVhbWluZ0NvbnRlbnQoXG4gIHBhcnQ6IHVua25vd25cbik6IHBhcnQgaXMgVGV4dFVJUGFydCB8IFJlYXNvbmluZ1VJUGFydCB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIHBhcnQgPT09IFwib2JqZWN0XCIgJiZcbiAgICBwYXJ0ICE9PSBudWxsICYmXG4gICAgXCJ0eXBlXCIgaW4gcGFydCAmJlxuICAgIChwYXJ0LnR5cGUgPT09IFwidGV4dFwiIHx8IHBhcnQudHlwZSA9PT0gXCJyZWFzb25pbmdcIilcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5SW50ZXJydXB0Q3V0b2ZmKHtcbiAgcGFydHMsXG4gIGxhc3RQYXJ0LFxufToge1xuICBwYXJ0czogUGFydFtdO1xuICBsYXN0UGFydDogeyBpbmRleDogbnVtYmVyOyBwYXJ0OiB1bmtub3duIH07XG59KTogUGFydFtdIHtcbiAgcmV0dXJuIHBhcnRzXG4gICAgLmZpbHRlcigocCkgPT4gcC5pbmRleCA8PSBsYXN0UGFydC5pbmRleClcbiAgICAubWFwKChwKSA9PiB7XG4gICAgICBpZiAocC5pbmRleCAhPT0gbGFzdFBhcnQuaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIHA7XG4gICAgICB9XG4gICAgICAvKipcbiAgICAgICAqIE9ubHkgcmVwbGFjZSBjb250ZW50IGZvciBzdHJlYW1pbmcgcGFydHMgKHRleHQsIHJlYXNvbmluZykgd2hlcmUgdGhlXG4gICAgICAgKiBjbGllbnQncyB0cnVuY2F0ZWQgdmVyc2lvbiBpcyBtb3JlIGFjY3VyYXRlIHRoYW4gdGhlIHNlcnZlcidzIGZ1bGxcbiAgICAgICAqIHZlcnNpb24uIEZvciBzdGF0ZWZ1bCBwYXJ0cyAodG9vbHMpLCB0aGUgc2VydmVyJ3MgdmVyc2lvbiBpc1xuICAgICAgICogYXV0aG9yaXRhdGl2ZSBcdTIwMTQgaXQgbWF5IGhhdmUgZXZvbHZlZCAoZS5nLiBhcHByb3ZhbC1yZXF1ZXN0ZWQgXHUyMTkyXG4gICAgICAgKiBvdXRwdXQtZGVuaWVkKSBhZnRlciB0aGUgY2xpZW50IHNuYXBzaG90IHdhcyB0YWtlbi5cbiAgICAgICAqL1xuICAgICAgaWYgKGlzU3RyZWFtaW5nQ29udGVudChsYXN0UGFydC5wYXJ0KSkge1xuICAgICAgICByZXR1cm4geyAuLi5wLCBwYXJ0OiBsYXN0UGFydC5wYXJ0IH0gYXMgUGFydDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwO1xuICAgIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzZW1ibGVVSU1lc3NhZ2VzPFRvb2xzIGV4dGVuZHMgVG9vbFNldD4ob3B0czoge1xuICBtZXNzYWdlczogTWVzc2FnZVtdO1xuICBwYXJ0czogUGFydFtdO1xuICB1bnRpbD86IG51bWJlcjtcbiAgaW5jbHVkZVF1ZXVlZD86IGJvb2xlYW47XG4gIC8qKiBXaGVuIHRydWUsIGZpbHRlcnMgb3V0IHN1Yi10b29sIHBhcnRzIHNvIHRoZSBMTE0gZG9lc24ndCBzZWUgdGhlbS4gKi9cbiAgZXhjbHVkZVN1YlRvb2xQYXJ0cz86IGJvb2xlYW47XG59KSB7XG4gIHR5cGUgVHlwZWRVSU1lc3NhZ2UgPSBVSU1lc3NhZ2U8dW5rbm93biwgQWdlbnREYXRhVHlwZXMsIEluZmVyVUlUb29sczxUb29scz4+O1xuXG4gIGxldCBmaWx0ZXJlZCA9IG9wdHMubWVzc2FnZXM7XG5cbiAgaWYgKG9wdHMudW50aWwgIT09IHVuZGVmaW5lZCkge1xuICAgIGNvbnN0IHVudGlsID0gb3B0cy51bnRpbDtcbiAgICBmaWx0ZXJlZCA9IGZpbHRlcmVkLmZpbHRlcigobSkgPT4gbS5jcmVhdGVkQXQgPD0gdW50aWwpO1xuICB9XG5cbiAgaWYgKCFvcHRzLmluY2x1ZGVRdWV1ZWQpIHtcbiAgICBmaWx0ZXJlZCA9IGZpbHRlcmVkLmZpbHRlcigobSkgPT4gbS5zdGFydGVkQXQgIT09IG51bGwpO1xuICB9XG5cbiAgLy8gU29ydCBieSBjcmVhdGVkQXQgc28gbWVzc2FnZXMgYXJlIGluIGNocm9ub2xvZ2ljYWwgb3JkZXIgcmVnYXJkbGVzcyBvZlxuICAvLyBob3cgdGhlIHN0b3JhZ2UgbGF5ZXIgcmV0dXJucyB0aGVtIChlLmcuIGxvY2FsIEZTIHJlYWRzIGluIHJlYWRkaXIgb3JkZXIpLlxuICBmaWx0ZXJlZCA9IFsuLi5maWx0ZXJlZF0uc29ydCgoYSwgYikgPT4gYS5jcmVhdGVkQXQgLSBiLmNyZWF0ZWRBdCk7XG5cbiAgY29uc3QgcGFydHMgPSBvcHRzLmV4Y2x1ZGVTdWJUb29sUGFydHNcbiAgICA/IG9wdHMucGFydHMuZmlsdGVyKChwKSA9PiAhaXNTdWJUb29sUGFydChwKSlcbiAgICA6IG9wdHMucGFydHM7XG5cbiAgY29uc3QgcGFydHNCeU1lc3NhZ2UgPSBuZXcgTWFwPHN0cmluZywgUGFydFtdPigpO1xuICBmb3IgKGNvbnN0IHBhcnQgb2YgcGFydHMpIHtcbiAgICBjb25zdCBtZXNzYWdlSWQgPSBTdHJpbmcocGFydC5tZXNzYWdlSWQpO1xuICAgIGNvbnN0IGV4aXN0aW5nID0gcGFydHNCeU1lc3NhZ2UuZ2V0KG1lc3NhZ2VJZCkgPz8gW107XG4gICAgZXhpc3RpbmcucHVzaChwYXJ0KTtcbiAgICBwYXJ0c0J5TWVzc2FnZS5zZXQobWVzc2FnZUlkLCBleGlzdGluZyk7XG4gIH1cblxuICByZXR1cm4gZmlsdGVyZWRcbiAgICAubWFwKChtKSA9PiB7XG4gICAgICBjb25zdCBtZXNzYWdlSWQgPSBTdHJpbmcobS5pZCk7XG4gICAgICBsZXQgbWVzc2FnZVBhcnRzID0gcGFydHNCeU1lc3NhZ2UuZ2V0KG1lc3NhZ2VJZCkgPz8gW107XG4gICAgICBtZXNzYWdlUGFydHMuc29ydCgoYSwgYikgPT4gYS5pbmRleCAtIGIuaW5kZXgpO1xuXG4gICAgICBpZiAobS5pbnRlcnJ1cHRlZExhc3RQYXJ0ICE9IG51bGwpIHtcbiAgICAgICAgbWVzc2FnZVBhcnRzID0gYXBwbHlJbnRlcnJ1cHRDdXRvZmYoe1xuICAgICAgICAgIHBhcnRzOiBtZXNzYWdlUGFydHMsXG4gICAgICAgICAgbGFzdFBhcnQ6IG0uaW50ZXJydXB0ZWRMYXN0UGFydCxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlkOiBtZXNzYWdlSWQsXG4gICAgICAgIHJvbGU6IG0ucm9sZSxcbiAgICAgICAgcGFydHM6IG1lc3NhZ2VQYXJ0cy5tYXAoKHApID0+IHAucGFydCksXG4gICAgICAgIC4uLihtLm1ldGFkYXRhICE9IG51bGwgPyB7IG1ldGFkYXRhOiBtLm1ldGFkYXRhIH0gOiB7fSksXG4gICAgICB9IGFzIFR5cGVkVUlNZXNzYWdlO1xuICAgIH0pXG4gICAgLmZpbHRlcigobSkgPT4gbS5wYXJ0cy5sZW5ndGggPiAwKTtcbn1cbiIsICJleHBvcnQgdHlwZSBTdGVwVXNhZ2UgPSB7XG4gIHN0ZXBJbmRleDogbnVtYmVyO1xuICBtb2RlbDogc3RyaW5nO1xuICBpbnB1dFRva2VuczogbnVtYmVyO1xuICBvdXRwdXRUb2tlbnM6IG51bWJlcjtcbiAgdG90YWxUb2tlbnM6IG51bWJlcjtcbiAgY2FjaGVSZWFkVG9rZW5zOiBudW1iZXI7XG4gIGNhY2hlV3JpdGVUb2tlbnM6IG51bWJlcjtcbiAgcmVhc29uaW5nVG9rZW5zOiBudW1iZXI7XG59O1xuXG5leHBvcnQgdHlwZSBVc2FnZVN1bW1hcnkgPSB7XG4gIG1vZGVsOiBzdHJpbmc7XG4gIGlucHV0VG9rZW5zOiBudW1iZXI7XG4gIG91dHB1dFRva2VuczogbnVtYmVyO1xuICB0b3RhbFRva2VuczogbnVtYmVyO1xuICBjYWNoZVJlYWRUb2tlbnM6IG51bWJlcjtcbiAgY2FjaGVXcml0ZVRva2VuczogbnVtYmVyO1xuICByZWFzb25pbmdUb2tlbnM6IG51bWJlcjtcbiAgc3RlcENvdW50OiBudW1iZXI7XG59O1xuXG5leHBvcnQgdHlwZSBTZXNzaW9uVXNhZ2UgPSB7XG4gIHRvdGFsOiBVc2FnZVN1bW1hcnkgJiB7IG1lc3NhZ2VDb3VudDogbnVtYmVyIH07XG4gIGJ5TWVzc2FnZUlkOiBSZWNvcmQ8c3RyaW5nLCBVc2FnZVN1bW1hcnkgfCBudWxsPjtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlU2Vzc2lvblVzYWdlKFxuICBtZXNzYWdlczogQXJyYXk8e1xuICAgIGlkOiBzdHJpbmc7XG4gICAgdXNhZ2U6IHsgc3RlcHM6IFN0ZXBVc2FnZVtdOyBzdW1tYXJ5OiBVc2FnZVN1bW1hcnkgfSB8IG51bGw7XG4gIH0+XG4pOiBTZXNzaW9uVXNhZ2Uge1xuICBjb25zdCBieU1lc3NhZ2VJZDogUmVjb3JkPHN0cmluZywgVXNhZ2VTdW1tYXJ5IHwgbnVsbD4gPSB7fTtcbiAgZm9yIChjb25zdCBtIG9mIG1lc3NhZ2VzKSB7XG4gICAgYnlNZXNzYWdlSWRbbS5pZF0gPSBtLnVzYWdlPy5zdW1tYXJ5ID8/IG51bGw7XG4gIH1cblxuICBjb25zdCBzdW1tYXJpZXMgPSBtZXNzYWdlc1xuICAgIC5tYXAoKG0pID0+IG0udXNhZ2U/LnN1bW1hcnkpXG4gICAgLmZpbHRlcigocyk6IHMgaXMgVXNhZ2VTdW1tYXJ5ID0+IHMgIT09IHVuZGVmaW5lZCk7XG5cbiAgY29uc3QgdG90YWwgPSB7XG4gICAgbW9kZWw6IHN1bW1hcmllc1swXT8ubW9kZWwgPz8gXCJ1bmtub3duXCIsXG4gICAgaW5wdXRUb2tlbnM6IHN1bW1hcmllcy5yZWR1Y2UoKGFjYywgcykgPT4gYWNjICsgcy5pbnB1dFRva2VucywgMCksXG4gICAgb3V0cHV0VG9rZW5zOiBzdW1tYXJpZXMucmVkdWNlKChhY2MsIHMpID0+IGFjYyArIHMub3V0cHV0VG9rZW5zLCAwKSxcbiAgICB0b3RhbFRva2Vuczogc3VtbWFyaWVzLnJlZHVjZSgoYWNjLCBzKSA9PiBhY2MgKyBzLnRvdGFsVG9rZW5zLCAwKSxcbiAgICBjYWNoZVJlYWRUb2tlbnM6IHN1bW1hcmllcy5yZWR1Y2UoKGFjYywgcykgPT4gYWNjICsgcy5jYWNoZVJlYWRUb2tlbnMsIDApLFxuICAgIGNhY2hlV3JpdGVUb2tlbnM6IHN1bW1hcmllcy5yZWR1Y2UoKGFjYywgcykgPT4gYWNjICsgcy5jYWNoZVdyaXRlVG9rZW5zLCAwKSxcbiAgICByZWFzb25pbmdUb2tlbnM6IHN1bW1hcmllcy5yZWR1Y2UoKGFjYywgcykgPT4gYWNjICsgcy5yZWFzb25pbmdUb2tlbnMsIDApLFxuICAgIHN0ZXBDb3VudDogc3VtbWFyaWVzLnJlZHVjZSgoYWNjLCBzKSA9PiBhY2MgKyBzLnN0ZXBDb3VudCwgMCksXG4gICAgbWVzc2FnZUNvdW50OiBzdW1tYXJpZXMubGVuZ3RoLFxuICB9O1xuXG4gIHJldHVybiB7IHRvdGFsLCBieU1lc3NhZ2VJZCB9O1xufVxuIiwgImltcG9ydCB0eXBlIHsgVG9vbFNldCB9IGZyb20gXCJhaVwiO1xuaW1wb3J0IHsgYXNzZW1ibGVVSU1lc3NhZ2VzIH0gZnJvbSBcIi4uL3V0aWxzL3VpXCI7XG5pbXBvcnQgeyBjb21wdXRlU2Vzc2lvblVzYWdlLCB0eXBlIFNlc3Npb25Vc2FnZSB9IGZyb20gXCIuLi91dGlscy91c2FnZVwiO1xuaW1wb3J0IHR5cGUgeyBTZXNzaW9uQ29udGV4dCB9IGZyb20gXCIuL2hhbmRsZVwiO1xuXG5leHBvcnQgdHlwZSBIaXN0b3J5UmVzdWx0ID0ge1xuICBtZXNzYWdlczogUmV0dXJuVHlwZTx0eXBlb2YgYXNzZW1ibGVVSU1lc3NhZ2VzPjtcbiAgc3RyZWFtaW5nTWVzc2FnZUlkOiBzdHJpbmcgfCBudWxsO1xuICB1c2FnZTogU2Vzc2lvblVzYWdlO1xufTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGhpc3Rvcnk8VG9vbHMgZXh0ZW5kcyBUb29sU2V0PihcbiAgc2Vzc2lvbkNvbnRleHQ6IFNlc3Npb25Db250ZXh0XG4pIHtcbiAgXCJ1c2Ugc3RlcFwiO1xuICBjb25zdCBbc2Vzc2lvbiwgbWVzc2FnZXMsIHBhcnRzXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICBzZXNzaW9uQ29udGV4dC5hZ2VudC5zdG9yYWdlLnNlc3Npb24uZ2V0KHNlc3Npb25Db250ZXh0LnNlc3Npb25JZCksXG4gICAgc2Vzc2lvbkNvbnRleHQuYWdlbnQuc3RvcmFnZS5tZXNzYWdlLmxpc3RCeVNlc3Npb24oXG4gICAgICBzZXNzaW9uQ29udGV4dC5zZXNzaW9uSWRcbiAgICApLFxuICAgIHNlc3Npb25Db250ZXh0LmFnZW50LnN0b3JhZ2UucGFydC5saXN0QnlTZXNzaW9uKHNlc3Npb25Db250ZXh0LnNlc3Npb25JZCksXG4gIF0pO1xuXG4gIGNvbnN0IGxhc3RBc3Npc3RhbnQgPVxuICAgIG1lc3NhZ2VzLmZpbmQoXG4gICAgICAobSkgPT4gbS5pZCA9PT0gc2Vzc2lvbj8ubGFzdE1lc3NhZ2VJZCAmJiBtLnJvbGUgPT09IFwiYXNzaXN0YW50XCJcbiAgICApID8/IG1lc3NhZ2VzLmZpbHRlcigobSkgPT4gbS5yb2xlID09PSBcImFzc2lzdGFudFwiKS5hdCgtMSk7XG5cbiAgY29uc3QgaXNTdHJlYW1pbmcgPVxuICAgIGxhc3RBc3Npc3RhbnQ/LmNvbXBsZXRlZEF0ID09PSBudWxsICYmXG4gICAgbGFzdEFzc2lzdGFudD8uaW50ZXJydXB0ZWRBdCA9PT0gbnVsbDtcbiAgY29uc3Qgc3RyZWFtaW5nTWVzc2FnZUlkID0gaXNTdHJlYW1pbmcgPyBsYXN0QXNzaXN0YW50LmlkIDogbnVsbDtcbiAgY29uc3QgdmlzaWJsZVVudGlsID0gbGFzdEFzc2lzdGFudD8uY3JlYXRlZEF0O1xuXG4gIGNvbnN0IGFzc2VtYmxlZCA9IGFzc2VtYmxlVUlNZXNzYWdlczxUb29scz4oe1xuICAgIG1lc3NhZ2VzLFxuICAgIHBhcnRzLFxuICAgIGluY2x1ZGVRdWV1ZWQ6IHZpc2libGVVbnRpbCAhPT0gdW5kZWZpbmVkLFxuICAgIHVudGlsOiB2aXNpYmxlVW50aWwsXG4gIH0pO1xuXG4gIGNvbnN0IHVzYWdlID0gY29tcHV0ZVNlc3Npb25Vc2FnZShtZXNzYWdlcyk7XG5cbiAgcmV0dXJuIHsgbWVzc2FnZXM6IGFzc2VtYmxlZCwgc3RyZWFtaW5nTWVzc2FnZUlkLCB1c2FnZSB9O1xufVxuIiwgImltcG9ydCB0eXBlIHsgVUlNZXNzYWdlIH0gZnJvbSBcImFpXCI7XG5pbXBvcnQgdHlwZSB7IFNlc3Npb25Db250ZXh0IH0gZnJvbSBcIi4vaGFuZGxlXCI7XG5cbmV4cG9ydCB0eXBlIEludGVycnVwdE9wdGlvbnMgPSB7XG4gIGxhc3RQYXJ0Pzoge1xuICAgIGluZGV4OiBudW1iZXI7XG4gICAgcGFydDogdW5rbm93bjtcbiAgfTtcbn07XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpbnRlcnJ1cHQoXG4gIHNlc3Npb25Db250ZXh0OiBTZXNzaW9uQ29udGV4dCxcbiAgb3B0cz86IEludGVycnVwdE9wdGlvbnNcbikge1xuICBcInVzZSBzdGVwXCI7XG4gIGNvbnN0IG1lc3NhZ2VzID0gYXdhaXQgc2Vzc2lvbkNvbnRleHQuYWdlbnQuc3RvcmFnZS5tZXNzYWdlLmxpc3RCeVNlc3Npb24oXG4gICAgc2Vzc2lvbkNvbnRleHQuc2Vzc2lvbklkXG4gICk7XG5cbiAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgbGV0IHBlbmRpbmdBc3Npc3RhbnRNZXNzYWdlcyA9IG1lc3NhZ2VzLmZpbHRlcihcbiAgICAobSkgPT5cbiAgICAgIG0ucm9sZSA9PT0gXCJhc3Npc3RhbnRcIiAmJlxuICAgICAgbS5jb21wbGV0ZWRBdCA9PT0gbnVsbCAmJlxuICAgICAgbS5pbnRlcnJ1cHRlZEF0ID09PSBudWxsXG4gICk7XG5cbiAgaWYgKHBlbmRpbmdBc3Npc3RhbnRNZXNzYWdlcy5sZW5ndGggPT09IDApIHtcbiAgICBjb25zdCBNQVhfUkVUUk9BQ1RJVkVfTVMgPSA1XzAwMDtcbiAgICBjb25zdCBsYXRlc3QgPSBtZXNzYWdlc1xuICAgICAgLmZpbHRlcihcbiAgICAgICAgKG0pID0+XG4gICAgICAgICAgbS5yb2xlID09PSBcImFzc2lzdGFudFwiICYmXG4gICAgICAgICAgbS5pbnRlcnJ1cHRlZEF0ID09PSBudWxsICYmXG4gICAgICAgICAgbS5jb21wbGV0ZWRBdCAhPT0gbnVsbCAmJlxuICAgICAgICAgIG5vdyAtIG0uY29tcGxldGVkQXQgPCBNQVhfUkVUUk9BQ1RJVkVfTVNcbiAgICAgIClcbiAgICAgIC5zb3J0KChhLCBiKSA9PiBiLmNyZWF0ZWRBdCAtIGEuY3JlYXRlZEF0KVxuICAgICAgLmF0KDApO1xuICAgIGlmIChsYXRlc3QpIHtcbiAgICAgIHBlbmRpbmdBc3Npc3RhbnRNZXNzYWdlcyA9IFtsYXRlc3RdO1xuICAgIH1cbiAgfVxuXG4gIGF3YWl0IFByb21pc2UuYWxsKFxuICAgIHBlbmRpbmdBc3Npc3RhbnRNZXNzYWdlcy5tYXAoKG0pID0+XG4gICAgICBzZXNzaW9uQ29udGV4dC5hZ2VudC5zdG9yYWdlLm1lc3NhZ2Uuc2V0KG0uaWQsIHtcbiAgICAgICAgLi4ubSxcbiAgICAgICAgaW50ZXJydXB0ZWRBdDogbm93LFxuICAgICAgICBpbnRlcnJ1cHRlZExhc3RQYXJ0OiBvcHRzPy5sYXN0UGFydCA/PyBudWxsLFxuICAgICAgfSlcbiAgICApXG4gICk7XG5cbiAgY29uc3QgbWVzc2FnZUlkcyA9IG5ldyBTZXQocGVuZGluZ0Fzc2lzdGFudE1lc3NhZ2VzLm1hcCgobSkgPT4gbS5pZCkpO1xuICBpZiAobWVzc2FnZUlkcy5zaXplID09PSAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgYWxsUGFydHMgPSBhd2FpdCBzZXNzaW9uQ29udGV4dC5hZ2VudC5zdG9yYWdlLnBhcnQubGlzdEJ5U2Vzc2lvbihcbiAgICBzZXNzaW9uQ29udGV4dC5zZXNzaW9uSWRcbiAgKTtcblxuICBmb3IgKGNvbnN0IHAgb2YgYWxsUGFydHMpIHtcbiAgICBpZiAoIW1lc3NhZ2VJZHMuaGFzKHAubWVzc2FnZUlkKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIHAucGFydCAmJlxuICAgICAgXCJzdGF0ZVwiIGluIHAucGFydCAmJlxuICAgICAgKHAucGFydCBhcyB7IHN0YXRlOiBzdHJpbmcgfSkuc3RhdGUgPT09IFwiYXBwcm92YWwtcmVxdWVzdGVkXCIgJiZcbiAgICAgIFwiYXBwcm92YWxcIiBpbiBwLnBhcnRcbiAgICApIHtcbiAgICAgIGNvbnN0IGFwcHJvdmFsID0gKHAucGFydCBhcyB7IGFwcHJvdmFsPzogeyBpZDogc3RyaW5nIH0gfSkuYXBwcm92YWw7XG4gICAgICBpZiAoYXBwcm92YWw/LmlkKSB7XG4gICAgICAgIGF3YWl0IHNlc3Npb25Db250ZXh0LmFnZW50LnN0b3JhZ2UucGFydC5zZXQocC5pZCwge1xuICAgICAgICAgIC4uLnAsXG4gICAgICAgICAgcGFydDoge1xuICAgICAgICAgICAgLi4ucC5wYXJ0LFxuICAgICAgICAgICAgc3RhdGU6IFwib3V0cHV0LWRlbmllZFwiLFxuICAgICAgICAgICAgYXBwcm92YWw6IHtcbiAgICAgICAgICAgICAgLi4uYXBwcm92YWwsXG4gICAgICAgICAgICAgIGFwcHJvdmVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgcmVhc29uOiBcImludGVycnVwdGVkXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0gYXMgVUlNZXNzYWdlW1wicGFydHNcIl1bbnVtYmVyXSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBGaW5pc2hSZWFzb24sIFRvb2xTZXQsIFVJTWVzc2FnZSwgVUlNZXNzYWdlQ2h1bmsgfSBmcm9tIFwiYWlcIjtcbmltcG9ydCB7IGFsbCB9IGZyb20gXCJiZXR0ZXItYWxsXCI7XG5pbXBvcnQgKiBhcyBlcnJvcmUgZnJvbSBcImVycm9yZVwiO1xuaW1wb3J0IHsgdWxpZCB9IGZyb20gXCJ1bGlkXCI7XG5pbXBvcnQgdHlwZSB7IFR5cGVkVUlNZXNzYWdlIH0gZnJvbSBcIi4uL2FnZW50L3JlZ2lzdHJ5XCI7XG5pbXBvcnQgdHlwZSB7IFNraWxsU3VtbWFyeSB9IGZyb20gXCIuLi9za2lsbHMvdHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgTWVzc2FnZSwgUGFydCB9IGZyb20gXCIuLi9zdG9yYWdlL3R5cGVzXCI7XG5pbXBvcnQgeyBjcmVhdGVMb2dnZXIgfSBmcm9tIFwiLi4vdXRpbHMvbG9nZ2VyXCI7XG5pbXBvcnQgdHlwZSB7IFN0ZXBVc2FnZSB9IGZyb20gXCIuLi91dGlscy91c2FnZVwiO1xuaW1wb3J0IHtcbiAgdHlwZSBTdHJlYW1UZXh0UmVzdWx0LFxuICBzdHJlYW1UZXh0LFxuICBzdHJlYW1UZXh0U3RlcCxcbn0gZnJvbSBcIi4vYWktbG9vcC9zdHJlYW0tdGV4dFwiO1xuaW1wb3J0IHR5cGUgeyBTZXNzaW9uQ29udGV4dCB9IGZyb20gXCIuL2hhbmRsZVwiO1xuaW1wb3J0IHsgaW50ZXJydXB0IH0gZnJvbSBcIi4vaW50ZXJydXB0XCI7XG5cbmNvbnN0IERFRkFVTFRfU1RFUF9USFJPVUdIUFVUID0gMTAwO1xuXG5leHBvcnQgdHlwZSBBcHByb3ZhbERhdGEgPSB7XG4gIGFwcHJvdmFsSWQ6IHN0cmluZztcbiAgYXBwcm92ZWQ6IGJvb2xlYW47XG4gIHJlYXNvbj86IHN0cmluZztcbn07XG5cbnR5cGUgTWVzc2FnZURhdGE8VG9vbHMgZXh0ZW5kcyBUb29sU2V0LCBUTWVzc2FnZU1ldGFkYXRhID0gdW5rbm93bj4gPVxuICB8IFVJTWVzc2FnZTxUTWVzc2FnZU1ldGFkYXRhPlxuICB8IHtcbiAgICAgIHJvbGU/OiBUeXBlZFVJTWVzc2FnZTx1bmtub3duLCBUb29scz5bXCJyb2xlXCJdO1xuICAgICAgcGFydHM6IFR5cGVkVUlNZXNzYWdlPHVua25vd24sIFRvb2xzPltcInBhcnRzXCJdO1xuICAgICAgbWV0YWRhdGE/OiBUTWVzc2FnZU1ldGFkYXRhIHwgbnVsbDtcbiAgICAgIGlkPzogc3RyaW5nO1xuICAgIH07XG5cbmV4cG9ydCB0eXBlIFNlbmRJbnB1dDxUb29scyBleHRlbmRzIFRvb2xTZXQsIFRNZXNzYWdlTWV0YWRhdGEgPSB1bmtub3duPiA9XG4gIHwgc3RyaW5nXG4gIHwgTWVzc2FnZURhdGE8VG9vbHMsIFRNZXNzYWdlTWV0YWRhdGE+XG4gIHwgeyB0eXBlOiBcIm1lc3NhZ2VcIjsgbWVzc2FnZTogTWVzc2FnZURhdGE8VG9vbHMsIFRNZXNzYWdlTWV0YWRhdGE+IH1cbiAgfCB7IHR5cGU6IFwiYXBwcm92YWxcIjsgYXBwcm92YWw6IEFwcHJvdmFsRGF0YSB9O1xuXG5leHBvcnQgdHlwZSBTZW5kT3B0aW9uczxUQ29udGV4dCwgVFN0YXRlID0gdW5rbm93bj4gPSB7XG4gIGludGVycnVwdElmU3RyZWFtaW5nPzpcbiAgICB8IGJvb2xlYW5cbiAgICB8IHsgbGFzdFBhcnQ6IHsgaW5kZXg6IG51bWJlcjsgcGFydDogdW5rbm93biB9IH07XG4gIGNvbnRleHQ/OiBUQ29udGV4dDtcbiAgaW5pdGlhbFN0YXRlPzogVFN0YXRlO1xuICBhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsO1xuICBzYW5kYm94SWQ/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBTZW5kUmVzdWx0ID0ge1xuICBhc3Npc3RhbnRNZXNzYWdlSWQ6IHN0cmluZztcbiAgZG9uZTogdHJ1ZSB8IFByb21pc2U8dHJ1ZT47XG59O1xuXG5leHBvcnQgdHlwZSBBY3RpdmVSdW4gPSB7XG4gIGNodW5rczogVUlNZXNzYWdlQ2h1bmtbXTtcbiAgd3JpdGFibGU6IFdyaXRhYmxlU3RyZWFtPFVJTWVzc2FnZUNodW5rPjtcbiAgZG9uZTogUHJvbWlzZTx2b2lkPjtcbiAgLyoqIFJlc29sdmVzIHdoZW4gYSBuZXcgY2h1bmsgaXMgYXZhaWxhYmxlLiBSZXBsYWNlZCBhZnRlciBlYWNoIG5vdGlmaWNhdGlvbi4gKi9cbiAgb25DaHVuazogUHJvbWlzZTx2b2lkPjtcbn07XG5cbmNvbnN0IEFDVElWRV9SVU5TX0tFWSA9IFN5bWJvbC5mb3IoXCJleHBlcmltZW50YWwtYWdlbnQ6YWN0aXZlUnVuc1wiKTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldEFjdGl2ZVJ1bnMoKTogTWFwPHN0cmluZywgQWN0aXZlUnVuPiB7XG4gIGNvbnN0IGcgPSBnbG9iYWxUaGlzIGFzIFJlY29yZDxzeW1ib2wsIE1hcDxzdHJpbmcsIEFjdGl2ZVJ1bj4gfCB1bmRlZmluZWQ+O1xuICBpZiAoIWdbQUNUSVZFX1JVTlNfS0VZXSkge1xuICAgIGdbQUNUSVZFX1JVTlNfS0VZXSA9IG5ldyBNYXAoKTtcbiAgfVxuICByZXR1cm4gZ1tBQ1RJVkVfUlVOU19LRVldO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2VuZDxcbiAgVG9vbHMgZXh0ZW5kcyBUb29sU2V0LFxuICBUQ29udGV4dCxcbiAgVE1lc3NhZ2VNZXRhZGF0YSA9IHVua25vd24sXG4gIFRTdGF0ZSA9IHVua25vd24sXG4+KFxuICBzZXNzaW9uQ29udGV4dDogU2Vzc2lvbkNvbnRleHQsXG4gIGlucHV0OlxuICAgIHwgU2VuZElucHV0PFRvb2xzLCBUTWVzc2FnZU1ldGFkYXRhPlxuICAgIHwgU2VuZElucHV0PFRvb2xzLCBUTWVzc2FnZU1ldGFkYXRhPltdLFxuICBvcHRzPzogU2VuZE9wdGlvbnM8VENvbnRleHQsIFRTdGF0ZT5cbik6IFByb21pc2U8U2VuZFJlc3VsdD4ge1xuICBpZiAob3B0cz8uaW50ZXJydXB0SWZTdHJlYW1pbmcpIHtcbiAgICBjb25zdCBsYXN0UGFydCA9XG4gICAgICB0eXBlb2Ygb3B0cy5pbnRlcnJ1cHRJZlN0cmVhbWluZyA9PT0gXCJvYmplY3RcIlxuICAgICAgICA/IG9wdHMuaW50ZXJydXB0SWZTdHJlYW1pbmcubGFzdFBhcnRcbiAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgYXdhaXQgaW50ZXJydXB0KHNlc3Npb25Db250ZXh0LCB7IGxhc3RQYXJ0IH0pO1xuICB9XG5cbiAgY29uc3Qge1xuICAgIHdvcmtmbG93UnVuSWQsXG4gICAgd29ya2Zsb3dXcml0YWJsZSxcbiAgICBleGlzdGluZ1BhcnRDb3VudCxcbiAgICBhc3Npc3RhbnRNZXNzYWdlSWQsXG4gICAgYXNzaXN0YW50TWVzc2FnZUNyZWF0ZWRBdCxcbiAgICBzdGF0ZSxcbiAgfSA9IGF3YWl0IGVycm9yZS50cnlBc3luYyh7XG4gICAgdHJ5OiAoKSA9PlxuICAgICAgaW5pdFNlc3Npb25TdGVwPFRvb2xzPih7XG4gICAgICAgIHNlc3Npb25Db250ZXh0LFxuICAgICAgICBzZXNzaW9uSWQ6IHNlc3Npb25Db250ZXh0LnNlc3Npb25JZCxcbiAgICAgICAgc2FuZGJveElkOiBvcHRzPy5zYW5kYm94SWQsXG4gICAgICAgIGluaXRpYWxTdGF0ZTogb3B0cz8uaW5pdGlhbFN0YXRlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkLFxuICAgICAgICBpbnB1dCxcbiAgICAgIH0pLFxuICAgIGNhdGNoOiAoZSkgPT4ge1xuICAgICAgaWYgKGUgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IFNlbmRFcnJvcih7XG4gICAgICAgIGlkOiBzZXNzaW9uQ29udGV4dC5zZXNzaW9uSWQsXG4gICAgICAgIHJlYXNvbjogU3RyaW5nKGUpLFxuICAgICAgICBjYXVzZTogZSxcbiAgICAgIH0pO1xuICAgIH0sXG4gIH0pO1xuXG4gIGNvbnN0IGxvb3BPcHRzID0ge1xuICAgIHNlc3Npb25Db250ZXh0LFxuICAgIGFzc2lzdGFudE1lc3NhZ2VJZCxcbiAgICBjcmVhdGVkQXQ6IGFzc2lzdGFudE1lc3NhZ2VDcmVhdGVkQXQsXG4gICAgY29udGV4dDogKG9wdHM/LmNvbnRleHQgPz8ge30pIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgIHN0YXRlLFxuICAgIGxhc3RQYXJ0SW5kZXg6IGV4aXN0aW5nUGFydENvdW50LFxuICAgIHdvcmtmbG93UnVuSWQsXG4gIH07XG5cbiAgaWYgKHdvcmtmbG93V3JpdGFibGUpIHtcbiAgICBhd2FpdCBydW5Mb29wPFRvb2xzPih7IC4uLmxvb3BPcHRzLCB3cml0YWJsZTogd29ya2Zsb3dXcml0YWJsZSB9KTtcbiAgICByZXR1cm4geyBhc3Npc3RhbnRNZXNzYWdlSWQsIGRvbmU6IHRydWUgfTtcbiAgfVxuXG4gIGNvbnN0IGNodW5rczogVUlNZXNzYWdlQ2h1bmtbXSA9IFtdO1xuICBsZXQgbm90aWZ5Q2h1bms6ICgpID0+IHZvaWQ7XG4gIGxldCBvbkNodW5rID0gbmV3IFByb21pc2U8dm9pZD4oKHIpID0+IHtcbiAgICBub3RpZnlDaHVuayA9IHI7XG4gIH0pO1xuXG4gIGNvbnN0IHdyaXRhYmxlID0gbmV3IFdyaXRhYmxlU3RyZWFtPFVJTWVzc2FnZUNodW5rPih7XG4gICAgd3JpdGUoY2h1bmspIHtcbiAgICAgIGNodW5rcy5wdXNoKGNodW5rKTtcbiAgICAgIGNvbnN0IHByZXYgPSBub3RpZnlDaHVuaztcbiAgICAgIG9uQ2h1bmsgPSBuZXcgUHJvbWlzZTx2b2lkPigocikgPT4ge1xuICAgICAgICBub3RpZnlDaHVuayA9IHI7XG4gICAgICB9KTtcbiAgICAgIHByZXYoKTtcbiAgICB9LFxuICB9KTtcblxuICBjb25zdCBkb25lID0gcnVuTG9vcDxUb29scz4oeyAuLi5sb29wT3B0cywgd3JpdGFibGUgfSk7XG5cbiAgY29uc3QgYWN0aXZlUnVuOiBBY3RpdmVSdW4gPSB7XG4gICAgY2h1bmtzLFxuICAgIHdyaXRhYmxlLFxuICAgIGRvbmUsXG4gICAgZ2V0IG9uQ2h1bmsoKSB7XG4gICAgICByZXR1cm4gb25DaHVuaztcbiAgICB9LFxuICB9O1xuICBjb25zdCBhY3RpdmVSdW5zID0gZ2V0QWN0aXZlUnVucygpO1xuICBhY3RpdmVSdW5zLnNldChhc3Npc3RhbnRNZXNzYWdlSWQsIGFjdGl2ZVJ1bik7XG4gIGRvbmUuZmluYWxseSgoKSA9PiBhY3RpdmVSdW5zLmRlbGV0ZShhc3Npc3RhbnRNZXNzYWdlSWQpKTtcblxuICByZXR1cm4geyBhc3Npc3RhbnRNZXNzYWdlSWQsIGRvbmU6IGRvbmUudGhlbigoKSA9PiB0cnVlKSB9O1xufVxuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBBSSBMb29wXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbmFzeW5jIGZ1bmN0aW9uIHJ1bkxvb3A8VG9vbHMgZXh0ZW5kcyBUb29sU2V0Pih7XG4gIHdvcmtmbG93UnVuSWQsXG4gIHNlc3Npb25Db250ZXh0LFxuICBhc3Npc3RhbnRNZXNzYWdlSWQsXG4gIGNyZWF0ZWRBdCxcbiAgY29udGV4dDogaW5pdGlhbENvbnRleHQsXG4gIHN0YXRlLFxuICB3cml0YWJsZSxcbiAgbGFzdFBhcnRJbmRleDogaW5pdGlhbFBhcnRJbmRleCxcbn06IHtcbiAgd29ya2Zsb3dSdW5JZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBzZXNzaW9uQ29udGV4dDogU2Vzc2lvbkNvbnRleHQ7XG4gIGFzc2lzdGFudE1lc3NhZ2VJZDogc3RyaW5nO1xuICBjcmVhdGVkQXQ6IG51bWJlcjtcbiAgY29udGV4dDogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIHN0YXRlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgd3JpdGFibGU6IFdyaXRhYmxlU3RyZWFtO1xuICBsYXN0UGFydEluZGV4OiBudW1iZXI7XG59KTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGFnZW50ID0gc2Vzc2lvbkNvbnRleHQuYWdlbnQ7XG5cbiAgY29uc3QgbG9nID0gY3JlYXRlTG9nZ2VyKHtcbiAgICBjb25maWc6IHsgLi4uYWdlbnQub3B0aW9ucy5sb2dnaW5nLCBuYW1lOiBhZ2VudC5uYW1lIH0sXG4gICAgc3Vic3lzdGVtOiBcImFpLWxvb3BcIixcbiAgfSk7XG4gIGNvbnN0IG1zZ0xvZyA9IGxvZy53aXRoQ29udGV4dCh7XG4gICAgc2Vzc2lvbklkOiBzZXNzaW9uQ29udGV4dC5zZXNzaW9uSWQsXG4gICAgbWVzc2FnZUlkOiBhc3Npc3RhbnRNZXNzYWdlSWQsXG4gIH0pO1xuICBjb25zdCBkb25lTWVzc2FnZSA9IG1zZ0xvZy50aW1lKFwib25NZXNzYWdlXCIpO1xuXG4gIGxldCBmaW5pc2hSZWFzb246IEZpbmlzaFJlYXNvbiB8IHVuZGVmaW5lZDtcbiAgbGV0IGxhc3RQYXJ0SW5kZXggPSBpbml0aWFsUGFydEluZGV4O1xuICBjb25zdCB1c2FnZVN0ZXBzOiBTdGVwVXNhZ2VbXSA9IFtdO1xuICBsZXQgZGlzY292ZXJlZFNraWxsczogU2tpbGxTdW1tYXJ5W10gfCBudWxsID0gbnVsbDtcbiAgbGV0IGNvbnRleHQgPSBpbml0aWFsQ29udGV4dDtcblxuICB0cnkge1xuICAgIHdoaWxlIChmaW5pc2hSZWFzb24gIT09IFwic3RvcFwiKSB7XG4gICAgICBjb25zdCBzdHJlYW1UZXh0Rm4gPSB3b3JrZmxvd1J1bklkXG4gICAgICAgID8gc3RyZWFtVGV4dFN0ZXA8VG9vbHM+XG4gICAgICAgIDogc3RyZWFtVGV4dDxUb29scz47XG4gICAgICBjb25zdCB0aHJvdWdocHV0ID0gd29ya2Zsb3dSdW5JZCA/IDUgOiBERUZBVUxUX1NURVBfVEhST1VHSFBVVDtcblxuICAgICAgY29uc3QgcmVzdWx0OiBTdHJlYW1UZXh0UmVzdWx0ID0gYXdhaXQgc3RyZWFtVGV4dEZuKHtcbiAgICAgICAgc3RlcFRocm91Z2hwdXQ6IHRocm91Z2hwdXQsXG4gICAgICAgIGFzc2lzdGFudE1lc3NhZ2VJZCxcbiAgICAgICAgYWdlbnQsXG4gICAgICAgIHNlc3Npb25JZDogc2Vzc2lvbkNvbnRleHQuc2Vzc2lvbklkLFxuICAgICAgICBjb250ZXh0LFxuICAgICAgICBzdGF0ZSxcbiAgICAgICAgY3JlYXRlZEF0LFxuICAgICAgICB3cml0YWJsZSxcbiAgICAgICAgbGFzdFBhcnRJbmRleCxcbiAgICAgICAgc3RlcEluZGV4T2Zmc2V0OiB1c2FnZVN0ZXBzLmxlbmd0aCxcbiAgICAgICAgZGlzY292ZXJlZFNraWxscyxcbiAgICAgIH0pO1xuXG4gICAgICBmaW5pc2hSZWFzb24gPSByZXN1bHQuZmluaXNoUmVhc29uO1xuICAgICAgbGFzdFBhcnRJbmRleCA9IHJlc3VsdC5sYXN0UGFydEluZGV4O1xuICAgICAgdXNhZ2VTdGVwcy5wdXNoKC4uLnJlc3VsdC51c2FnZVN0ZXBzKTtcbiAgICAgIGRpc2NvdmVyZWRTa2lsbHMgPSByZXN1bHQuZGlzY292ZXJlZFNraWxscztcbiAgICAgIGNvbnRleHQgPSByZXN1bHQuY29udGV4dDtcblxuICAgICAgaWYgKHJlc3VsdC5tYXhTdGVwcyAhPSBudWxsICYmIHVzYWdlU3RlcHMubGVuZ3RoID49IHJlc3VsdC5tYXhTdGVwcykge1xuICAgICAgICBtc2dMb2cuaW5mbyhcInJlYWNoZWQgbWF4U3RlcHMgbGltaXRcIiwgeyBtYXhTdGVwczogcmVzdWx0Lm1heFN0ZXBzIH0pO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgaWYgKHJlc3VsdC5wZW5kaW5nQXBwcm92YWxzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgbXNnTG9nLmluZm8oXCJwZW5kaW5nIGFwcHJvdmFscywgc3RvcHBpbmcgbG9vcFwiLCB7XG4gICAgICAgICAgY291bnQ6IHJlc3VsdC5wZW5kaW5nQXBwcm92YWxzLmxlbmd0aCxcbiAgICAgICAgICB0b29sczogcmVzdWx0LnBlbmRpbmdBcHByb3ZhbHMubWFwKChwKSA9PiBwLnRvb2xOYW1lKSxcbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGRvbmVNZXNzYWdlKHsgdG90YWxTdGVwczogdXNhZ2VTdGVwcy5sZW5ndGggfSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIG1zZ0xvZy5lcnJvcihcIkFJIGxvb3AgZmFpbGVkXCIsIHtcbiAgICAgIGVycm9yOiBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVyciksXG4gICAgfSk7XG4gICAgdGhyb3cgZXJyO1xuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IGNvbXBsZXRlTWVzc2FnZVN0ZXAoe1xuICAgICAgYXNzaXN0YW50TWVzc2FnZUlkLFxuICAgICAgc2Vzc2lvbkNvbnRleHQsXG4gICAgICB3cml0YWJsZSxcbiAgICAgIHVzYWdlU3RlcHMsXG4gICAgfSk7XG4gIH1cbn1cblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogU3RlcHNcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuYXN5bmMgZnVuY3Rpb24gaW5pdFNlc3Npb25TdGVwPFRvb2xzIGV4dGVuZHMgVG9vbFNldD4oe1xuICBzZXNzaW9uQ29udGV4dCxcbiAgc2Vzc2lvbklkLFxuICBzYW5kYm94SWQsXG4gIGluaXRpYWxTdGF0ZSxcbiAgaW5wdXQsXG59OiB7XG4gIHNlc3Npb25Db250ZXh0OiBTZXNzaW9uQ29udGV4dDtcbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHNhbmRib3hJZD86IHN0cmluZztcbiAgaW5pdGlhbFN0YXRlPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGlucHV0OiBTZW5kSW5wdXQ8VG9vbHM+IHwgU2VuZElucHV0PFRvb2xzPltdO1xufSkge1xuICBcInVzZSBzdGVwXCI7XG5cbiAgbGV0IHdvcmtmbG93UnVuSWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgbGV0IHdvcmtmbG93V3JpdGFibGU6IFdyaXRhYmxlU3RyZWFtIHwgdW5kZWZpbmVkO1xuICB0cnkge1xuICAgIGNvbnN0IHsgZ2V0V29ya2Zsb3dNZXRhZGF0YSwgZ2V0V3JpdGFibGUgfSA9IGF3YWl0IGltcG9ydChcIndvcmtmbG93XCIpO1xuICAgIHdvcmtmbG93UnVuSWQgPSBnZXRXb3JrZmxvd01ldGFkYXRhKCkud29ya2Zsb3dSdW5JZDtcbiAgICB3b3JrZmxvd1dyaXRhYmxlID0gZ2V0V3JpdGFibGUoKTtcbiAgfSBjYXRjaCB7XG4gICAgLy8gd29ya2Zsb3cgbm90IGluc3RhbGxlZFxuICB9XG5cbiAgY29uc3QgbmV3TWVzc2FnZXM6IE1lc3NhZ2VbXSA9IFtdO1xuICBjb25zdCBuZXdQYXJ0czogUGFydFtdID0gW107XG4gIGNvbnN0IG5ld0FwcHJvdmFsczogQXBwcm92YWxEYXRhW10gPSBbXTtcbiAgaWYgKEFycmF5LmlzQXJyYXkoaW5wdXQpKSB7XG4gICAgZm9yIChjb25zdCBpIG9mIGlucHV0KSB7XG4gICAgICBjb25zdCB7IG1lc3NhZ2UsIHBhcnRzLCBhcHByb3ZhbHMgfSA9IHRvTWVzc2FnZUFuZFBhcnRzKHtcbiAgICAgICAgc2Vzc2lvbklkOiBzZXNzaW9uQ29udGV4dC5zZXNzaW9uSWQsXG4gICAgICAgIGlucHV0OiBpLFxuICAgICAgICBkZWZhdWx0Um9sZTogXCJ1c2VyXCIsXG4gICAgICB9KTtcbiAgICAgIGlmIChtZXNzYWdlKSB7XG4gICAgICAgIG5ld01lc3NhZ2VzLnB1c2gobWVzc2FnZSk7XG4gICAgICB9XG4gICAgICBuZXdQYXJ0cy5wdXNoKC4uLnBhcnRzKTtcbiAgICAgIG5ld0FwcHJvdmFscy5wdXNoKC4uLmFwcHJvdmFscyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGNvbnN0IHsgbWVzc2FnZSwgcGFydHMsIGFwcHJvdmFscyB9ID0gdG9NZXNzYWdlQW5kUGFydHMoe1xuICAgICAgaW5wdXQsXG4gICAgICBzZXNzaW9uSWQ6IHNlc3Npb25Db250ZXh0LnNlc3Npb25JZCxcbiAgICAgIGRlZmF1bHRSb2xlOiBcInVzZXJcIixcbiAgICB9KTtcbiAgICBpZiAobWVzc2FnZSkge1xuICAgICAgbmV3TWVzc2FnZXMucHVzaChtZXNzYWdlKTtcbiAgICB9XG4gICAgbmV3UGFydHMucHVzaCguLi5wYXJ0cyk7XG4gICAgbmV3QXBwcm92YWxzLnB1c2goLi4uYXBwcm92YWxzKTtcbiAgfVxuXG4gIGNvbnN0IGxhc3ROZXdNZXNzYWdlID0gbmV3TWVzc2FnZXMuYXQoLTEpO1xuICBjb25zdCByZXVzZUFzc2lzdGFudCA9IGxhc3ROZXdNZXNzYWdlPy5yb2xlID09PSBcImFzc2lzdGFudFwiO1xuXG4gIGNvbnN0IGFzc2lzdGFudE1lc3NhZ2VJZCA9IHJldXNlQXNzaXN0YW50XG4gICAgPyBsYXN0TmV3TWVzc2FnZS5pZFxuICAgIDogYG1lc3NhZ2VfJHt1bGlkKCl9YDtcbiAgY29uc3QgYmFzZVRpbWUgPSBEYXRlLm5vdygpO1xuICBjb25zdCBhc3Npc3RhbnRNZXNzYWdlQ3JlYXRlZEF0ID0gYmFzZVRpbWUgKyBuZXdNZXNzYWdlcy5sZW5ndGg7XG5cbiAgaWYgKCFyZXVzZUFzc2lzdGFudCkge1xuICAgIG5ld01lc3NhZ2VzLnB1c2goe1xuICAgICAgaWQ6IGFzc2lzdGFudE1lc3NhZ2VJZCxcbiAgICAgIHNlc3Npb25JZDogc2Vzc2lvbkNvbnRleHQuc2Vzc2lvbklkLFxuICAgICAgcm9sZTogXCJhc3Npc3RhbnRcIixcbiAgICAgIGNyZWF0ZWRBdDogYXNzaXN0YW50TWVzc2FnZUNyZWF0ZWRBdCxcbiAgICAgIHN0YXJ0ZWRBdDogbnVsbCxcbiAgICAgIGNvbXBsZXRlZEF0OiBudWxsLFxuICAgICAgaW50ZXJydXB0ZWRBdDogbnVsbCxcbiAgICAgIGludGVycnVwdGVkTGFzdFBhcnQ6IG51bGwsXG4gICAgICB1c2FnZTogbnVsbCxcbiAgICAgIHdvcmtmbG93UnVuSWQ6IG51bGwsXG4gICAgICBtZXRhZGF0YTogbnVsbCxcbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IGV4aXN0aW5nUGFydENvdW50ID0gcmV1c2VBc3Npc3RhbnRcbiAgICA/IG5ld1BhcnRzLmZpbHRlcigocCkgPT4gcC5tZXNzYWdlSWQgPT09IGFzc2lzdGFudE1lc3NhZ2VJZCkubGVuZ3RoXG4gICAgOiAwO1xuXG4gIGxldCBzZXNzaW9uID0gYXdhaXQgc2Vzc2lvbkNvbnRleHQuYWdlbnQuc3RvcmFnZS5zZXNzaW9uLmdldChzZXNzaW9uSWQpO1xuICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICBpZiAoIXNlc3Npb24pIHtcbiAgICBzZXNzaW9uID0ge1xuICAgICAgaWQ6IHNlc3Npb25JZCxcbiAgICAgIHNhbmRib3hJZDogc2FuZGJveElkID8/IG51bGwsXG4gICAgICBsYXN0TWVzc2FnZUlkOiBudWxsLFxuICAgICAgY3JlYXRlZEF0OiBub3csXG4gICAgICB1cGRhdGVkQXQ6IG5vdyxcbiAgICB9O1xuICAgIGF3YWl0IHNlc3Npb25Db250ZXh0LmFnZW50LnN0b3JhZ2Uuc2Vzc2lvbi5zZXQoc2Vzc2lvbi5pZCwgc2Vzc2lvbik7XG4gIH0gZWxzZSBpZiAoc2FuZGJveElkICYmIHNhbmRib3hJZCAhPT0gc2Vzc2lvbi5zYW5kYm94SWQpIHtcbiAgICBzZXNzaW9uID0geyAuLi5zZXNzaW9uLCBzYW5kYm94SWQsIHVwZGF0ZWRBdDogbm93IH07XG4gICAgYXdhaXQgc2Vzc2lvbkNvbnRleHQuYWdlbnQuc3RvcmFnZS5zZXNzaW9uLnVwZGF0ZShzZXNzaW9uLmlkLCB7XG4gICAgICBzYW5kYm94SWQsXG4gICAgfSk7XG4gIH1cblxuICBhd2FpdCBhbGwoe1xuICAgIGFzeW5jIHNhdmVNZXNzYWdlcygpIHtcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICBuZXdNZXNzYWdlcy5tYXAoYXN5bmMgKG0sIGkpID0+IHtcbiAgICAgICAgICBjb25zdCBleGlzdGluZyA9IGF3YWl0IHNlc3Npb25Db250ZXh0LmFnZW50LnN0b3JhZ2UubWVzc2FnZS5nZXQobS5pZCk7XG4gICAgICAgICAgaWYgKGV4aXN0aW5nKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGF3YWl0IHNlc3Npb25Db250ZXh0LmFnZW50LnN0b3JhZ2UubWVzc2FnZS5zZXQobS5pZCwge1xuICAgICAgICAgICAgLi4ubSxcbiAgICAgICAgICAgIGNyZWF0ZWRBdDogYmFzZVRpbWUgKyBpLFxuICAgICAgICAgICAgd29ya2Zsb3dSdW5JZDpcbiAgICAgICAgICAgICAgbS5pZCA9PT0gYXNzaXN0YW50TWVzc2FnZUlkXG4gICAgICAgICAgICAgICAgPyAod29ya2Zsb3dSdW5JZCA/PyBudWxsKVxuICAgICAgICAgICAgICAgIDogbS53b3JrZmxvd1J1bklkLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9LFxuICAgIGFzeW5jIHNhdmVQYXJ0cygpIHtcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICBuZXdQYXJ0cy5tYXAoYXN5bmMgKHApID0+XG4gICAgICAgICAgc2Vzc2lvbkNvbnRleHQuYWdlbnQuc3RvcmFnZS5wYXJ0LnNldChwLmlkLCBwKVxuICAgICAgICApXG4gICAgICApO1xuICAgIH0sXG4gICAgYXN5bmMgcmVzb2x2ZUFwcHJvdmFscygpIHtcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICBuZXdBcHByb3ZhbHMubWFwKGFzeW5jIChhKSA9PiB7XG4gICAgICAgICAgY29uc3QgcGFydElkID0gYXBwcm92YWxQYXJ0SWQoYS5hcHByb3ZhbElkKTtcbiAgICAgICAgICBjb25zdCBwYXJ0ID0gYXdhaXQgc2Vzc2lvbkNvbnRleHQuYWdlbnQuc3RvcmFnZS5wYXJ0LmdldChwYXJ0SWQpO1xuICAgICAgICAgIGlmICghcGFydCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEFwcHJvdmFsTm90Rm91bmRFcnJvcih7XG4gICAgICAgICAgICAgIGlkOiBzZXNzaW9uQ29udGV4dC5zZXNzaW9uSWQsXG4gICAgICAgICAgICAgIGFwcHJvdmFsSWQ6IGEuYXBwcm92YWxJZCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhd2FpdCBzZXNzaW9uQ29udGV4dC5hZ2VudC5zdG9yYWdlLnBhcnQuc2V0KHBhcnRJZCwge1xuICAgICAgICAgICAgLi4ucGFydCxcbiAgICAgICAgICAgIHBhcnQ6IHtcbiAgICAgICAgICAgICAgLi4ucGFydC5wYXJ0LFxuICAgICAgICAgICAgICBzdGF0ZTogYS5hcHByb3ZlZCA/IFwiYXBwcm92YWwtcmVzcG9uZGVkXCIgOiBcIm91dHB1dC1kZW5pZWRcIixcbiAgICAgICAgICAgICAgYXBwcm92YWw6IHtcbiAgICAgICAgICAgICAgICBpZDogYS5hcHByb3ZhbElkLFxuICAgICAgICAgICAgICAgIGFwcHJvdmVkOiBhLmFwcHJvdmVkLFxuICAgICAgICAgICAgICAgIHJlYXNvbjogYS5yZWFzb24sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9IGFzIHR5cGVvZiBwYXJ0LnBhcnQsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH0sXG4gICAgYXN5bmMgdXBkYXRlU2Vzc2lvbigpIHtcbiAgICAgIGF3YWl0IHNlc3Npb25Db250ZXh0LmFnZW50LnN0b3JhZ2Uuc2Vzc2lvbi5zZXQoc2Vzc2lvbi5pZCwge1xuICAgICAgICAuLi5zZXNzaW9uLFxuICAgICAgICBsYXN0TWVzc2FnZUlkOiBhc3Npc3RhbnRNZXNzYWdlSWQsXG4gICAgICAgIHVwZGF0ZWRBdDogRGF0ZS5ub3coKSxcbiAgICAgIH0pO1xuICAgIH0sXG4gIH0pO1xuXG4gIGNvbnN0IHN0YXRlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHNlc3Npb24uc3RhdGVcbiAgICA/IHsgLi4uc2Vzc2lvbi5zdGF0ZSB9XG4gICAgOiB7IC4uLihpbml0aWFsU3RhdGUgPz8ge30pIH07XG5cbiAgcmV0dXJuIHtcbiAgICB3b3JrZmxvd1J1bklkLFxuICAgIHdvcmtmbG93V3JpdGFibGUsXG4gICAgZXhpc3RpbmdQYXJ0Q291bnQsXG4gICAgYXNzaXN0YW50TWVzc2FnZUlkLFxuICAgIGFzc2lzdGFudE1lc3NhZ2VDcmVhdGVkQXQsXG4gICAgc3RhdGUsXG4gIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNvbXBsZXRlTWVzc2FnZVN0ZXAoe1xuICBhc3Npc3RhbnRNZXNzYWdlSWQsXG4gIHNlc3Npb25Db250ZXh0LFxuICB3cml0YWJsZSxcbiAgdXNhZ2VTdGVwcyxcbn06IHtcbiAgYXNzaXN0YW50TWVzc2FnZUlkOiBzdHJpbmc7XG4gIHNlc3Npb25Db250ZXh0OiBTZXNzaW9uQ29udGV4dDtcbiAgd3JpdGFibGU6IFdyaXRhYmxlU3RyZWFtO1xuICB1c2FnZVN0ZXBzOiBTdGVwVXNhZ2VbXTtcbn0pIHtcbiAgXCJ1c2Ugc3RlcFwiO1xuXG4gIGNvbnN0IGxvZyA9IGNyZWF0ZUxvZ2dlcih7XG4gICAgY29uZmlnOiB7XG4gICAgICAuLi5zZXNzaW9uQ29udGV4dC5hZ2VudC5vcHRpb25zLmxvZ2dpbmcsXG4gICAgICBuYW1lOiBzZXNzaW9uQ29udGV4dC5hZ2VudC5uYW1lLFxuICAgIH0sXG4gICAgc3Vic3lzdGVtOiBcImFpLWxvb3BcIixcbiAgfSk7XG4gIGNvbnN0IG1zZ0xvZyA9IGxvZy53aXRoQ29udGV4dCh7XG4gICAgc2Vzc2lvbklkOiBzZXNzaW9uQ29udGV4dC5zZXNzaW9uSWQsXG4gICAgbWVzc2FnZUlkOiBhc3Npc3RhbnRNZXNzYWdlSWQsXG4gIH0pO1xuXG4gIGNvbnN0IHVzYWdlID1cbiAgICB1c2FnZVN0ZXBzLmxlbmd0aCA+IDBcbiAgICAgID8ge1xuICAgICAgICAgIHN0ZXBzOiB1c2FnZVN0ZXBzLFxuICAgICAgICAgIHN1bW1hcnk6IHtcbiAgICAgICAgICAgIG1vZGVsOiB1c2FnZVN0ZXBzWzBdPy5tb2RlbCA/PyBcInVua25vd25cIixcbiAgICAgICAgICAgIGlucHV0VG9rZW5zOiB1c2FnZVN0ZXBzLnJlZHVjZSgoYSwgcykgPT4gYSArIHMuaW5wdXRUb2tlbnMsIDApLFxuICAgICAgICAgICAgb3V0cHV0VG9rZW5zOiB1c2FnZVN0ZXBzLnJlZHVjZSgoYSwgcykgPT4gYSArIHMub3V0cHV0VG9rZW5zLCAwKSxcbiAgICAgICAgICAgIHRvdGFsVG9rZW5zOiB1c2FnZVN0ZXBzLnJlZHVjZSgoYSwgcykgPT4gYSArIHMudG90YWxUb2tlbnMsIDApLFxuICAgICAgICAgICAgY2FjaGVSZWFkVG9rZW5zOiB1c2FnZVN0ZXBzLnJlZHVjZShcbiAgICAgICAgICAgICAgKGEsIHMpID0+IGEgKyBzLmNhY2hlUmVhZFRva2VucyxcbiAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGNhY2hlV3JpdGVUb2tlbnM6IHVzYWdlU3RlcHMucmVkdWNlKFxuICAgICAgICAgICAgICAoYSwgcykgPT4gYSArIHMuY2FjaGVXcml0ZVRva2VucyxcbiAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHJlYXNvbmluZ1Rva2VuczogdXNhZ2VTdGVwcy5yZWR1Y2UoXG4gICAgICAgICAgICAgIChhLCBzKSA9PiBhICsgcy5yZWFzb25pbmdUb2tlbnMsXG4gICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBzdGVwQ291bnQ6IHVzYWdlU3RlcHMubGVuZ3RoLFxuICAgICAgICAgIH0sXG4gICAgICAgIH1cbiAgICAgIDogbnVsbDtcblxuICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgc2Vzc2lvbkNvbnRleHQuYWdlbnQuc3RvcmFnZS5tZXNzYWdlLnVwZGF0ZShhc3Npc3RhbnRNZXNzYWdlSWQsIHtcbiAgICAgIGNvbXBsZXRlZEF0OiBEYXRlLm5vdygpLFxuICAgICAgdXNhZ2UsXG4gICAgfSksXG4gICAgd3JpdGFibGUuY2xvc2UoKS5jYXRjaCgoKSA9PiB1bmRlZmluZWQpLFxuICBdKTtcblxuICBtc2dMb2cuaW5mbyhcIm1lc3NhZ2UgY29tcGxldGVkXCIsIHtcbiAgICBzdGVwczogdXNhZ2VTdGVwcy5sZW5ndGgsXG4gICAgdG90YWxUb2tlbnM6IHVzYWdlPy5zdW1tYXJ5LnRvdGFsVG9rZW5zLFxuICB9KTtcbn1cblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogVXRpbHNcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGFwcHJvdmFsUGFydElkKGFwcHJvdmFsSWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgcGFydF8ke2FwcHJvdmFsSWR9YDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxheUFjdGl2ZVJ1bihcbiAgYWN0aXZlOiBBY3RpdmVSdW4sXG4gIHN0YXJ0SW5kZXggPSAwXG4pOiBSZWFkYWJsZVN0cmVhbTxVSU1lc3NhZ2VDaHVuaz4ge1xuICBsZXQgY3Vyc29yID0gc3RhcnRJbmRleDtcbiAgbGV0IGNhbmNlbGxlZCA9IGZhbHNlO1xuXG4gIHJldHVybiBuZXcgUmVhZGFibGVTdHJlYW08VUlNZXNzYWdlQ2h1bms+KHtcbiAgICBhc3luYyBwdWxsKGNvbnRyb2xsZXIpIHtcbiAgICAgIC8vIERyYWluIGFueSBidWZmZXJlZCBjaHVua3NcbiAgICAgIHdoaWxlIChjdXJzb3IgPCBhY3RpdmUuY2h1bmtzLmxlbmd0aCkge1xuICAgICAgICBjb250cm9sbGVyLmVucXVldWUoYWN0aXZlLmNodW5rc1tjdXJzb3IrK10pO1xuICAgICAgfVxuXG4gICAgICAvLyBXYWl0IGZvciBlaXRoZXIgYSBuZXcgY2h1bmsgb3IgY29tcGxldGlvblxuICAgICAgd2hpbGUgKCFjYW5jZWxsZWQgJiYgY3Vyc29yID49IGFjdGl2ZS5jaHVua3MubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgICAgYWN0aXZlLm9uQ2h1bmsudGhlbigoKSA9PiBcImNodW5rXCIgYXMgY29uc3QpLFxuICAgICAgICAgIGFjdGl2ZS5kb25lLnRoZW4oKCkgPT4gXCJkb25lXCIgYXMgY29uc3QpLFxuICAgICAgICBdKTtcblxuICAgICAgICAvLyBEcmFpbiBuZXcgY2h1bmtzXG4gICAgICAgIHdoaWxlIChjdXJzb3IgPCBhY3RpdmUuY2h1bmtzLmxlbmd0aCkge1xuICAgICAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZShhY3RpdmUuY2h1bmtzW2N1cnNvcisrXSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVzdWx0ID09PSBcImRvbmVcIikge1xuICAgICAgICAgIGNvbnRyb2xsZXIuY2xvc2UoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGNhbmNlbCgpIHtcbiAgICAgIGNhbmNlbGxlZCA9IHRydWU7XG4gICAgfSxcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHRvTWVzc2FnZUFuZFBhcnRzPFRvb2xzIGV4dGVuZHMgVG9vbFNldD4oe1xuICBzZXNzaW9uSWQsXG4gIGlkLFxuICBpbnB1dCxcbiAgZGVmYXVsdFJvbGUsXG59OiB7XG4gIHNlc3Npb25JZDogc3RyaW5nO1xuICBpZD86IHN0cmluZztcbiAgaW5wdXQ6IFNlbmRJbnB1dDxUb29scz47XG4gIGRlZmF1bHRSb2xlOiBVSU1lc3NhZ2VbXCJyb2xlXCJdO1xufSk6IHtcbiAgbWVzc2FnZTogTWVzc2FnZSB8IHVuZGVmaW5lZDtcbiAgcGFydHM6IFBhcnRbXTtcbiAgYXBwcm92YWxzOiBBcHByb3ZhbERhdGFbXTtcbn0ge1xuICBsZXQgbWVzc2FnZUlkID0gaWQgPz8gYG1lc3NhZ2VfJHt1bGlkKCl9YDtcbiAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gXCJzdHJpbmdcIikge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFwcHJvdmFsczogW10sXG4gICAgICBtZXNzYWdlOiB7XG4gICAgICAgIGlkOiBtZXNzYWdlSWQsXG4gICAgICAgIHNlc3Npb25JZCxcbiAgICAgICAgcm9sZTogZGVmYXVsdFJvbGUsXG4gICAgICAgIGNyZWF0ZWRBdDogbm93LFxuICAgICAgICBzdGFydGVkQXQ6IG51bGwsXG4gICAgICAgIGNvbXBsZXRlZEF0OiBudWxsLFxuICAgICAgICBpbnRlcnJ1cHRlZEF0OiBudWxsLFxuICAgICAgICBpbnRlcnJ1cHRlZExhc3RQYXJ0OiBudWxsLFxuICAgICAgICB1c2FnZTogbnVsbCxcbiAgICAgICAgd29ya2Zsb3dSdW5JZDogbnVsbCxcbiAgICAgICAgbWV0YWRhdGE6IG51bGwsXG4gICAgICB9LFxuICAgICAgcGFydHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHNlc3Npb25JZCxcbiAgICAgICAgICBtZXNzYWdlSWQsXG4gICAgICAgICAgaWQ6IGBwYXJ0XyR7bWVzc2FnZUlkfV8wYCxcbiAgICAgICAgICBpbmRleDogMCxcbiAgICAgICAgICBwYXJ0OiB7IHR5cGU6IFwidGV4dFwiLCB0ZXh0OiBpbnB1dCB9LFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9O1xuICB9XG4gIGlmIChcInR5cGVcIiBpbiBpbnB1dCAmJiBpbnB1dC50eXBlID09PSBcImFwcHJvdmFsXCIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWVzc2FnZTogdW5kZWZpbmVkLFxuICAgICAgcGFydHM6IFtdLFxuICAgICAgYXBwcm92YWxzOiBbaW5wdXQuYXBwcm92YWxdLFxuICAgIH07XG4gIH1cblxuICBjb25zdCBtc2cgPVxuICAgIFwidHlwZVwiIGluIGlucHV0ICYmIGlucHV0LnR5cGUgPT09IFwibWVzc2FnZVwiID8gaW5wdXQubWVzc2FnZSA6IGlucHV0O1xuICBpZiAoXCJpZFwiIGluIG1zZyAmJiBtc2cuaWQpIHtcbiAgICBtZXNzYWdlSWQgPSBtc2cuaWQ7XG4gIH1cblxuICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICBjb25zdCBtZXRhZGF0YSA9XG4gICAgXCJtZXRhZGF0YVwiIGluIG1zZyAmJiBtc2cubWV0YWRhdGEgIT0gbnVsbFxuICAgICAgPyAobXNnLm1ldGFkYXRhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVxuICAgICAgOiBudWxsO1xuICByZXR1cm4ge1xuICAgIGFwcHJvdmFsczogW10sXG4gICAgbWVzc2FnZToge1xuICAgICAgc2Vzc2lvbklkLFxuICAgICAgaWQ6IG1lc3NhZ2VJZCxcbiAgICAgIGNyZWF0ZWRBdDogbm93LFxuICAgICAgc3RhcnRlZEF0OiBudWxsLFxuICAgICAgY29tcGxldGVkQXQ6IG51bGwsXG4gICAgICBpbnRlcnJ1cHRlZEF0OiBudWxsLFxuICAgICAgaW50ZXJydXB0ZWRMYXN0UGFydDogbnVsbCxcbiAgICAgIHVzYWdlOiBudWxsLFxuICAgICAgd29ya2Zsb3dSdW5JZDogbnVsbCxcbiAgICAgIHJvbGU6IG1zZy5yb2xlID8/IGRlZmF1bHRSb2xlLFxuICAgICAgbWV0YWRhdGEsXG4gICAgfSxcbiAgICBwYXJ0czogbXNnLnBhcnRzLm1hcCgocGFydCwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IGFwID0gcGFydCBhcyB7IGFwcHJvdmFsPzogeyBpZDogc3RyaW5nIH0gfTtcbiAgICAgIGNvbnN0IGlkID0gYXAuYXBwcm92YWw/LmlkXG4gICAgICAgID8gYXBwcm92YWxQYXJ0SWQoYXAuYXBwcm92YWwuaWQpXG4gICAgICAgIDogYHBhcnRfJHttZXNzYWdlSWR9XyR7aW5kZXh9YDtcbiAgICAgIHJldHVybiB7IHNlc3Npb25JZCwgbWVzc2FnZUlkLCBpZCwgaW5kZXgsIHBhcnQgfTtcbiAgICB9KSxcbiAgfTtcbn1cblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogRXJyb3JzXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbmV4cG9ydCBjbGFzcyBTZW5kRXJyb3IgZXh0ZW5kcyBlcnJvcmUuY3JlYXRlVGFnZ2VkRXJyb3Ioe1xuICBuYW1lOiBcIlNlbmRFcnJvclwiLFxuICBtZXNzYWdlOiBcIlNlbmQgZmFpbGVkIGZvciBzZXNzaW9uICRpZDogJHJlYXNvblwiLFxufSkge31cblxuZXhwb3J0IGNsYXNzIEFwcHJvdmFsTm90Rm91bmRFcnJvciBleHRlbmRzIGVycm9yZS5jcmVhdGVUYWdnZWRFcnJvcih7XG4gIG5hbWU6IFwiQXBwcm92YWxOb3RGb3VuZEVycm9yXCIsXG4gIG1lc3NhZ2U6IFwiQXBwcm92YWwgJGFwcHJvdmFsSWQgbm90IGZvdW5kIGluIHNlc3Npb24gJGlkXCIsXG59KSB7fVxuIiwgImltcG9ydCB0eXBlIHtcbiAgRmluaXNoUmVhc29uLFxuICBUb29sU2V0LFxuICBVSU1lc3NhZ2UsXG4gIFVJTWVzc2FnZVN0cmVhbVdyaXRlcixcbn0gZnJvbSBcImFpXCI7XG5pbXBvcnQge1xuICBjb252ZXJ0VG9Nb2RlbE1lc3NhZ2VzLFxuICBjcmVhdGVVSU1lc3NhZ2VTdHJlYW0sXG4gIHN0ZXBDb3VudElzLFxuICBzdHJlYW1UZXh0IGFzIHN0cmVhbVRleHRBaSxcbn0gZnJvbSBcImFpXCI7XG5pbXBvcnQgdHlwZSB7XG4gIEFnZW50U3RhdHVzLFxuICBBbnlBZ2VudCxcbiAgUmVzb2x2YWJsZSxcbiAgUmVzb2x2YWJsZUFyZ3MsXG4gIFR5cGVkVUlNZXNzYWdlLFxufSBmcm9tIFwiLi4vLi4vYWdlbnQvY2xpZW50XCI7XG5pbXBvcnQgeyBTZXNzaW9uTm90Rm91bmRFcnJvciB9IGZyb20gXCIuLi8uLi9lcnJvcnNcIjtcbmltcG9ydCB7IGRpc2NvdmVyU2tpbGxzSW5TYW5kYm94IH0gZnJvbSBcIi4uLy4uL3NraWxscy9kaXNjb3ZlclwiO1xuaW1wb3J0IHsgcmVzb2x2ZVNraWxsSW5wdXRzVG9TYW5kYm94RGlycyB9IGZyb20gXCIuLi8uLi9za2lsbHMvcmVzb2x2ZVwiO1xuaW1wb3J0IHR5cGUgeyBTa2lsbFN1bW1hcnkgfSBmcm9tIFwiLi4vLi4vc2tpbGxzL3R5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IFBhcnQgfSBmcm9tIFwiLi4vLi4vc3RvcmFnZS90eXBlc1wiO1xuaW1wb3J0IHsgdHlwZSBCdWlsdEluVG9vbE5hbWUsIGdldFRvb2xzLCB0eXBlIFRvb2xDb250ZXh0IH0gZnJvbSBcIi4uLy4uL3Rvb2xzXCI7XG5pbXBvcnQgeyBjcmVhdGVMb2dnZXIsIHR5cGUgTG9nZ2VyIH0gZnJvbSBcIi4uLy4uL3V0aWxzL2xvZ2dlclwiO1xuaW1wb3J0IHtcbiAgYXBwbHlQcm9tcHRDYWNoaW5nVG9Nb2RlbFJlcXVlc3QsXG4gIG1lcmdlUHJvdmlkZXJPcHRpb25zLFxufSBmcm9tIFwiLi4vLi4vdXRpbHMvcHJvbXB0LWNhY2hlXCI7XG5pbXBvcnQgeyBhc3NlbWJsZVVJTWVzc2FnZXMgfSBmcm9tIFwiLi4vLi4vdXRpbHMvdWlcIjtcbmltcG9ydCB0eXBlIHsgU3RlcFVzYWdlIH0gZnJvbSBcIi4uLy4uL3V0aWxzL3VzYWdlXCI7XG5pbXBvcnQgeyBhcHByb3ZhbFBhcnRJZCB9IGZyb20gXCIuLi9zZW5kXCI7XG5cbmNvbnN0IElOVEVSUlVQVF9QT0xMX0lOVEVSVkFMX01TID0gMjUwO1xuXG5mdW5jdGlvbiBwb2xsRm9ySW50ZXJydXB0KHtcbiAgYWdlbnQsXG4gIG1lc3NhZ2VJZCxcbiAgc2lnbmFsLFxuICBhYm9ydENvbnRyb2xsZXIsXG59OiB7XG4gIGFnZW50OiBBbnlBZ2VudDtcbiAgbWVzc2FnZUlkOiBzdHJpbmc7XG4gIHNpZ25hbDogQWJvcnRTaWduYWw7XG4gIGFib3J0Q29udHJvbGxlcjogQWJvcnRDb250cm9sbGVyO1xufSk6IHtcbiAgZmlyc3RDaGVjazogUHJvbWlzZTx2b2lkPjtcbiAgaW50ZXJydXB0ZWRMYXN0UGFydFJlZjogeyBjdXJyZW50OiB7IGluZGV4OiBudW1iZXI7IHBhcnQ6IHVua25vd24gfSB8IG51bGwgfTtcbn0ge1xuICBsZXQgcmVzb2x2ZUZpcnN0Q2hlY2s6ICgpID0+IHZvaWQ7XG4gIGNvbnN0IGZpcnN0Q2hlY2sgPSBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuICAgIHJlc29sdmVGaXJzdENoZWNrID0gcmVzb2x2ZTtcbiAgfSk7XG4gIGNvbnN0IGludGVycnVwdGVkTGFzdFBhcnRSZWYgPSB7XG4gICAgY3VycmVudDogbnVsbCBhcyB7IGluZGV4OiBudW1iZXI7IHBhcnQ6IHVua25vd24gfSB8IG51bGwsXG4gIH07XG5cbiAgY29uc3QgbG9nID0gY3JlYXRlTG9nZ2VyKHtcbiAgICBjb25maWc6IHsgLi4uYWdlbnQub3B0aW9ucy5sb2dnaW5nLCBuYW1lOiBhZ2VudC5uYW1lIH0sXG4gICAgc3Vic3lzdGVtOiBcImFpLWxvb3BcIixcbiAgfSk7XG5cbiAgY29uc3QgcG9sbCA9IGFzeW5jICgpID0+IHtcbiAgICBsZXQgaXNGaXJzdCA9IHRydWU7XG4gICAgd2hpbGUgKCFzaWduYWwuYWJvcnRlZCkge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IGF3YWl0IGFnZW50LnN0b3JhZ2UubWVzc2FnZS5nZXQobWVzc2FnZUlkKTtcbiAgICAgIGlmICghbWVzc2FnZSkge1xuICAgICAgICBpZiAoaXNGaXJzdCkge1xuICAgICAgICAgIHJlc29sdmVGaXJzdENoZWNrKCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTWVzc2FnZSAke21lc3NhZ2VJZH0gbm90IGZvdW5kYCk7XG4gICAgICB9XG4gICAgICBpZiAobWVzc2FnZS5pbnRlcnJ1cHRlZEF0ICE9PSBudWxsKSB7XG4gICAgICAgIGxvZy5pbmZvKFwiaW50ZXJydXB0IGRldGVjdGVkXCIsIHsgbWVzc2FnZUlkIH0pO1xuICAgICAgICBpbnRlcnJ1cHRlZExhc3RQYXJ0UmVmLmN1cnJlbnQgPSBtZXNzYWdlLmludGVycnVwdGVkTGFzdFBhcnQ7XG4gICAgICAgIGFib3J0Q29udHJvbGxlci5hYm9ydCgpO1xuICAgICAgICBpZiAoaXNGaXJzdCkge1xuICAgICAgICAgIHJlc29sdmVGaXJzdENoZWNrKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGlzRmlyc3QpIHtcbiAgICAgICAgaXNGaXJzdCA9IGZhbHNlO1xuICAgICAgICByZXNvbHZlRmlyc3RDaGVjaygpO1xuICAgICAgfVxuICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+XG4gICAgICAgIHNldFRpbWVvdXQocmVzb2x2ZSwgSU5URVJSVVBUX1BPTExfSU5URVJWQUxfTVMpXG4gICAgICApO1xuICAgIH1cbiAgfTtcblxuICBwb2xsKCk7XG4gIHJldHVybiB7IGZpcnN0Q2hlY2ssIGludGVycnVwdGVkTGFzdFBhcnRSZWYgfTtcbn1cblxudHlwZSBTdHJlYW1UZXh0T3B0aW9ucyA9IHtcbiAgc3RlcFRocm91Z2hwdXQ6IG51bWJlcjtcbiAgYXNzaXN0YW50TWVzc2FnZUlkOiBzdHJpbmc7XG4gIHNlc3Npb25JZDogc3RyaW5nO1xuICBhZ2VudDogQW55QWdlbnQ7XG4gIGNyZWF0ZWRBdDogbnVtYmVyO1xuICBjb250ZXh0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgc3RhdGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICB3cml0YWJsZTogV3JpdGFibGVTdHJlYW07XG4gIGxhc3RQYXJ0SW5kZXg6IG51bWJlcjtcbiAgc3RlcEluZGV4T2Zmc2V0OiBudW1iZXI7XG4gIGRpc2NvdmVyZWRTa2lsbHM6IFNraWxsU3VtbWFyeVtdIHwgbnVsbDtcbn07XG5cbmV4cG9ydCB0eXBlIFN0cmVhbVRleHRSZXN1bHQgPSB7XG4gIGZpbmlzaFJlYXNvbjogRmluaXNoUmVhc29uO1xuICBsYXN0UGFydEluZGV4OiBudW1iZXI7XG4gIHVzYWdlU3RlcHM6IFN0ZXBVc2FnZVtdO1xuICBwZW5kaW5nQXBwcm92YWxzOiB7IGFwcHJvdmFsSWQ6IHN0cmluZzsgdG9vbE5hbWU6IHN0cmluZyB9W107XG4gIG1heFN0ZXBzOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gIGRpc2NvdmVyZWRTa2lsbHM6IFNraWxsU3VtbWFyeVtdIHwgbnVsbDtcbiAgY29udGV4dDogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59O1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc3RyZWFtVGV4dDxUb29scyBleHRlbmRzIFRvb2xTZXQ+KHtcbiAgc3RlcFRocm91Z2hwdXQsXG4gIGFzc2lzdGFudE1lc3NhZ2VJZCxcbiAgYWdlbnQsXG4gIHNlc3Npb25JZCxcbiAgY29udGV4dCxcbiAgc3RhdGUsXG4gIGNyZWF0ZWRBdCxcbiAgd3JpdGFibGUsXG4gIGxhc3RQYXJ0SW5kZXgsXG4gIHN0ZXBJbmRleE9mZnNldCxcbiAgZGlzY292ZXJlZFNraWxscyxcbn06IFN0cmVhbVRleHRPcHRpb25zKTogUHJvbWlzZTxTdHJlYW1UZXh0UmVzdWx0PiB7XG4gIGNvbnN0IGxvZyA9IGNyZWF0ZUxvZ2dlcih7XG4gICAgY29uZmlnOiB7IC4uLmFnZW50Lm9wdGlvbnMubG9nZ2luZywgbmFtZTogYWdlbnQubmFtZSB9LFxuICAgIHN1YnN5c3RlbTogXCJhaS1sb29wXCIsXG4gIH0pO1xuXG4gIGNvbnN0IHN0ZXBMb2cgPSBsb2cud2l0aENvbnRleHQoe1xuICAgIHNlc3Npb25JZCxcbiAgICBtZXNzYWdlSWQ6IGFzc2lzdGFudE1lc3NhZ2VJZCxcbiAgfSk7XG4gIGNvbnN0IGRvbmVTdGVwID0gc3RlcExvZy50aW1lKFwic3RyZWFtVGV4dFwiKTtcblxuICBjb25zdCB0aHJvdHRsZWRFbWl0U3RhdHVzID0gY3JlYXRlVGhyb3R0bGVkRW1pdFN0YXR1cyhhZ2VudCk7XG5cbiAgY29uc3QgYWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICBjb25zdCBwb2xsQ29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcblxuICBjb25zdCB7IGZpcnN0Q2hlY2ssIGludGVycnVwdGVkTGFzdFBhcnRSZWYgfSA9IHBvbGxGb3JJbnRlcnJ1cHQoe1xuICAgIGFnZW50LFxuICAgIG1lc3NhZ2VJZDogYXNzaXN0YW50TWVzc2FnZUlkLFxuICAgIHNpZ25hbDogcG9sbENvbnRyb2xsZXIuc2lnbmFsLFxuICAgIGFib3J0Q29udHJvbGxlcixcbiAgfSk7XG5cbiAgY29uc3QgZG9uZUxvYWQgPSBzdGVwTG9nLnRpbWUoXCJsb2FkIHNlc3Npb24gKyBtZXNzYWdlcyArIHBhcnRzICsgc2FuZGJveFwiKTtcbiAgY29uc3QgWywgbWVzc2FnZXNSZXN1bHQsIHBhcnRzUmVzdWx0LCB7IHNhbmRib3gsIHNhbmRib3hSZWNvcmQgfV0gPVxuICAgIGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgIGZpcnN0Q2hlY2ssXG4gICAgICBhZ2VudC5zdG9yYWdlLm1lc3NhZ2UubGlzdEJ5U2Vzc2lvbihzZXNzaW9uSWQpLFxuICAgICAgYWdlbnQuc3RvcmFnZS5wYXJ0Lmxpc3RCeVNlc3Npb24oc2Vzc2lvbklkKSxcbiAgICAgIGFnZW50LnN0b3JhZ2Uuc2Vzc2lvbi5nZXQoc2Vzc2lvbklkKS50aGVuKGFzeW5jIChzZXNzaW9uKSA9PiB7XG4gICAgICAgIGlmICghc2Vzc2lvbikge1xuICAgICAgICAgIHRocm93IG5ldyBTZXNzaW9uTm90Rm91bmRFcnJvcih7IGlkOiBzZXNzaW9uSWQgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzYW5kYm94SWQgPSBzZXNzaW9uLnNhbmRib3hJZCA/PyBzZXNzaW9uLmlkO1xuICAgICAgICBjb25zdCBzYW5kYm94ID0gYWdlbnQuc2FuZGJveChzYW5kYm94SWQpO1xuICAgICAgICBjb25zdCBzYW5kYm94UmVjb3JkID0gYXdhaXQgYWdlbnQuc3RvcmFnZS5zYW5kYm94LmdldChzYW5kYm94SWQpO1xuXG4gICAgICAgIHJldHVybiB7IHNhbmRib3gsIHNhbmRib3hSZWNvcmQgfTtcbiAgICAgIH0pLFxuICAgIF0pO1xuXG4gIGRvbmVMb2FkKCk7XG5cbiAgaWYgKGFib3J0Q29udHJvbGxlci5zaWduYWwuYWJvcnRlZCkge1xuICAgIHBvbGxDb250cm9sbGVyLmFib3J0KCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGZpbmlzaFJlYXNvbjogXCJzdG9wXCIgYXMgRmluaXNoUmVhc29uLFxuICAgICAgbGFzdFBhcnRJbmRleCxcbiAgICAgIHVzYWdlU3RlcHM6IFtdLFxuICAgICAgcGVuZGluZ0FwcHJvdmFsczogW10sXG4gICAgICBtYXhTdGVwczogdW5kZWZpbmVkLFxuICAgICAgZGlzY292ZXJlZFNraWxscyxcbiAgICAgIGNvbnRleHQsXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IHNldFN0YXJ0ZWRQcm9taXNlID1cbiAgICBsYXN0UGFydEluZGV4ID09PSAwXG4gICAgICA/IChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICBjb25zdCBwZW5kaW5nTWVzc2FnZXMgPSBtZXNzYWdlc1Jlc3VsdC5maWx0ZXIoXG4gICAgICAgICAgICAobSkgPT4gbS5jcmVhdGVkQXQgPD0gY3JlYXRlZEF0ICYmIG0uc3RhcnRlZEF0ID09PSBudWxsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAocGVuZGluZ01lc3NhZ2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICAgICAgcGVuZGluZ01lc3NhZ2VzLm1hcCgobSkgPT5cbiAgICAgICAgICAgICAgICBhZ2VudC5zdG9yYWdlLm1lc3NhZ2UudXBkYXRlKG0uaWQsIHtcbiAgICAgICAgICAgICAgICAgIHN0YXJ0ZWRBdDogbm93LFxuICAgICAgICAgICAgICAgICAgY29tcGxldGVkQXQ6IG0ucm9sZSA9PT0gXCJhc3Npc3RhbnRcIiA/IG51bGwgOiBub3csXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pKClcbiAgICAgIDogbnVsbDtcblxuICBjb25zdCBhbGxQYXJ0cyA9IFsuLi5wYXJ0c1Jlc3VsdF07XG4gIGNvbnN0IG5leHRQYXJ0SW5kZXhSZWYgPSB7XG4gICAgY3VycmVudDogTWF0aC5tYXgoXG4gICAgICBsYXN0UGFydEluZGV4LFxuICAgICAgLi4uYWxsUGFydHNcbiAgICAgICAgLmZpbHRlcigocCkgPT4gcC5tZXNzYWdlSWQgPT09IGFzc2lzdGFudE1lc3NhZ2VJZClcbiAgICAgICAgLm1hcCgocCkgPT4gcC5pbmRleCArIDEpLFxuICAgICAgMFxuICAgICksXG4gIH07XG5cbiAgY29uc3Qgc2tpbGxzUmVmOiB7IGN1cnJlbnQ6IFNraWxsU3VtbWFyeVtdIH0gPSB7XG4gICAgY3VycmVudDogZGlzY292ZXJlZFNraWxscyA/PyBbXSxcbiAgfTtcblxuICAvLyBCdWlsZCB1aU1lc3NhZ2VzIGZyb20gY3VycmVudCBwYXJ0cyAocmVidWlsdCBiZXR3ZWVuIGl0ZXJhdGlvbnMpXG4gIGxldCB1aU1lc3NhZ2VzID0gYXNzZW1ibGVVSU1lc3NhZ2VzKHtcbiAgICBtZXNzYWdlczogbWVzc2FnZXNSZXN1bHQsXG4gICAgcGFydHM6IGFsbFBhcnRzLFxuICAgIHVudGlsOiBjcmVhdGVkQXQsXG4gICAgaW5jbHVkZVF1ZXVlZDogdHJ1ZSxcbiAgICBleGNsdWRlU3ViVG9vbFBhcnRzOiB0cnVlLFxuICB9KTtcblxuICAvLyBCdWlsZCByZXNvbHZhYmxlIGFyZ3MgZm9yIHJlc29sdmluZyBhZ2VudCBvcHRpb25zXG4gIGNvbnN0IHJlc29sdmFibGVBcmdzOiBSZXNvbHZhYmxlQXJncyA9IHtcbiAgICBjb250ZXh0LFxuICAgIHN0YXRlLFxuICAgIHNlc3Npb25JZCxcbiAgICBzYW5kYm94LFxuICAgIGdldCBtZXNzYWdlcygpIHtcbiAgICAgIHJldHVybiB1aU1lc3NhZ2VzO1xuICAgIH0sXG4gIH07XG5cbiAgLy8gc2tpbGxzIGRpc2NvdmVyeSBcdTIwMTQgZmlyc3QgaXRlcmF0aW9uIG9ubHlcbiAgaWYgKGxhc3RQYXJ0SW5kZXggPT09IDAgJiYgIWRpc2NvdmVyZWRTa2lsbHMpIHtcbiAgICBjb25zdCByZXNvbHZlZFNraWxscyA9IGF3YWl0IHJlc29sdmVPcHRpb24oXG4gICAgICBhZ2VudC5vcHRpb25zLnNraWxscyxcbiAgICAgIHJlc29sdmFibGVBcmdzXG4gICAgKTtcbiAgICBjb25zdCBza2lsbHNEaXJzID0gcmVzb2x2ZWRTa2lsbHM/Lmxlbmd0aFxuICAgICAgPyBhd2FpdCByZXNvbHZlU2tpbGxJbnB1dHNUb1NhbmRib3hEaXJzKHtcbiAgICAgICAgICBhZ2VudCxcbiAgICAgICAgICBzYW5kYm94LFxuICAgICAgICAgIHNraWxsczogcmVzb2x2ZWRTa2lsbHMsXG4gICAgICAgICAgc2Vzc2lvbklkLFxuICAgICAgICB9KVxuICAgICAgOiBbXTtcbiAgICBpZiAoc2tpbGxzRGlycy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBkb25lU2tpbGxzID0gc3RlcExvZy50aW1lKFwiZGlzY292ZXIgc2tpbGxzXCIsIHsgc2tpbGxzRGlycyB9KTtcbiAgICAgIHNraWxsc1JlZi5jdXJyZW50ID0gYXdhaXQgZGlzY292ZXJTa2lsbHNJblNhbmRib3goe1xuICAgICAgICBhZ2VudCxcbiAgICAgICAgc2FuZGJveCxcbiAgICAgICAgc2tpbGxzRGlycyxcbiAgICAgICAgc2Vzc2lvbklkLFxuICAgICAgfSk7XG4gICAgICBkb25lU2tpbGxzKHsgY291bnQ6IHNraWxsc1JlZi5jdXJyZW50Lmxlbmd0aCB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSW5uZXIgbG9vcDogcnVuIHVwIHRvIGBzdGVwVGhyb3VnaHB1dGAgc2VxdWVudGlhbCBMTE0gY2FsbHMuXG4gICAqIFBhcnRzIGFyZSBwZXJzaXN0ZWQgYWZ0ZXIgZWFjaCBjYWxsIHNvIHByb2dyZXNzIGlzbid0IGxvc3QuXG4gICAqIFNlc3Npb24gaXMgcmUtZmV0Y2hlZCBiZXR3ZWVuIGl0ZXJhdGlvbnMgKGNvbmZpZyBtYXkgY2hhbmdlKSxcbiAgICogcGFyYWxsZWxpemVkIHdpdGggcGFydCBwZXJzaXN0ZW5jZSBvbiBub24tZmluYWwgaXRlcmF0aW9ucy5cbiAgICovXG4gIGNvbnN0IHVzYWdlU3RlcHM6IFN0ZXBVc2FnZVtdID0gW107XG4gIGxldCBpbnRlcm5hbFN0ZXBJbmRleCA9IDA7XG4gIGxldCBsb29wRmluaXNoUmVhc29uOiBGaW5pc2hSZWFzb24gPSBcInVua25vd25cIiBhcyBGaW5pc2hSZWFzb247XG4gIGxldCB3YXNBYm9ydGVkID0gZmFsc2U7XG4gIGNvbnN0IGFsbFBlbmRpbmdBcHByb3ZhbHM6IHsgYXBwcm92YWxJZDogc3RyaW5nOyB0b29sTmFtZTogc3RyaW5nIH1bXSA9IFtdO1xuICBsZXQgY3VycmVudE1heFN0ZXBzOiBudW1iZXIgfCB1bmRlZmluZWQ7XG5cbiAgdHJ5IHtcbiAgICBmb3IgKGxldCBpdGVyYXRpb24gPSAwOyBpdGVyYXRpb24gPCBzdGVwVGhyb3VnaHB1dDsgaXRlcmF0aW9uKyspIHtcbiAgICAgIC8vIFJlc29sdmUgYWdlbnQgb3B0aW9ucyBmcmVzaCBlYWNoIGl0ZXJhdGlvblxuICAgICAgY29uc3QgcmVzb2x2ZWRNb2RlbCA9IGF3YWl0IHJlc29sdmVPcHRpb24oXG4gICAgICAgIGFnZW50Lm9wdGlvbnMubW9kZWwsXG4gICAgICAgIHJlc29sdmFibGVBcmdzXG4gICAgICApO1xuICAgICAgY29uc3QgcmVzb2x2ZWRHZW5lcmF0aW9uID0gYXdhaXQgcmVzb2x2ZU9wdGlvbihcbiAgICAgICAgYWdlbnQub3B0aW9ucy5nZW5lcmF0aW9uLFxuICAgICAgICByZXNvbHZhYmxlQXJnc1xuICAgICAgKTtcbiAgICAgIGNvbnN0IHJlc29sdmVkQWN0aXZlVG9vbHMgPSAoYXdhaXQgcmVzb2x2ZU9wdGlvbihcbiAgICAgICAgYWdlbnQub3B0aW9ucy5hY3RpdmVUb29scyxcbiAgICAgICAgcmVzb2x2YWJsZUFyZ3NcbiAgICAgICkpIGFzIHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xuXG4gICAgICBjdXJyZW50TWF4U3RlcHMgPSByZXNvbHZlZEdlbmVyYXRpb24/Lm1heFN0ZXBzO1xuXG4gICAgICBpZiAoIXJlc29sdmVkTW9kZWwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQWdlbnQgbW9kZWwgaXMgbm90IHNldFwiKTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc3RlcFBhcnRzOiBVSU1lc3NhZ2VbXCJwYXJ0c1wiXSA9IFtdO1xuICAgICAgbGV0IHN0cmVhbVRleHRGaW5pc2hSZWFzb246IEZpbmlzaFJlYXNvbiB8IHVuZGVmaW5lZDtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3Qgc3RyZWFtID0gY3JlYXRlVUlNZXNzYWdlU3RyZWFtKHtcbiAgICAgICAgICBleGVjdXRlOiBhc3luYyAoeyB3cml0ZXIgfSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyByYXdUb29scywgdG9vbHNXaXRoTmVlZHNBcHByb3ZhbCwgdG9vbENvbnRleHQgfSA9IGdldFRvb2xzKHtcbiAgICAgICAgICAgICAgYWdlbnQsXG4gICAgICAgICAgICAgIHNhbmRib3gsXG4gICAgICAgICAgICAgIHNraWxsc1JlZixcbiAgICAgICAgICAgICAgd3JpdGVyLFxuICAgICAgICAgICAgICBhYm9ydENvbnRyb2xsZXIsXG4gICAgICAgICAgICAgIG5leHRQYXJ0SW5kZXhSZWYsXG4gICAgICAgICAgICAgIGFzc2lzdGFudE1lc3NhZ2VJZCxcbiAgICAgICAgICAgICAgc2Vzc2lvbklkLFxuICAgICAgICAgICAgICBzdGVwTG9nLFxuICAgICAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICAgICAgbWVzc2FnZXM6IHVpTWVzc2FnZXMsXG4gICAgICAgICAgICAgIGFjdGl2ZVRvb2xzOiByZXNvbHZlZEFjdGl2ZVRvb2xzLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8vIHByb2Nlc3MgYXBwcm92YWxzIG9uY2UgKGZpcnN0IGl0ZXJhdGlvbiBvbmx5KVxuICAgICAgICAgICAgaWYgKGl0ZXJhdGlvbiA9PT0gMCkge1xuICAgICAgICAgICAgICBhd2FpdCBwcm9jZXNzQXBwcm92YWxzKHtcbiAgICAgICAgICAgICAgICBhbGxQYXJ0cyxcbiAgICAgICAgICAgICAgICBtZXNzYWdlc1Jlc3VsdCxcbiAgICAgICAgICAgICAgICBjcmVhdGVkQXQsXG4gICAgICAgICAgICAgICAgcmF3VG9vbHMsXG4gICAgICAgICAgICAgICAgYWJvcnRDb250cm9sbGVyLFxuICAgICAgICAgICAgICAgIHRvb2xDb250ZXh0LFxuICAgICAgICAgICAgICAgIGFnZW50LFxuICAgICAgICAgICAgICAgIHN0ZXBMb2csXG4gICAgICAgICAgICAgICAgdGhyb3R0bGVkRW1pdFN0YXR1cyxcbiAgICAgICAgICAgICAgICB3cml0ZXIsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aHJvdHRsZWRFbWl0U3RhdHVzKHtcbiAgICAgICAgICAgICAgd3JpdGVyLFxuICAgICAgICAgICAgICBzdGF0dXM6IHsgdHlwZTogXCJ0aGlua2luZ1wiIH0sXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgY29uc3QgaXRlclJlc3VsdCA9IHN0cmVhbVRleHRBaSh7XG4gICAgICAgICAgICAgIG1lc3NhZ2VzOiBbeyByb2xlOiBcInVzZXJcIiBhcyBjb25zdCwgY29udGVudDogXCIuXCIgfV0sXG4gICAgICAgICAgICAgIHRvb2xzOiB0b29sc1dpdGhOZWVkc0FwcHJvdmFsLFxuICAgICAgICAgICAgICBtb2RlbDogcmVzb2x2ZWRNb2RlbCxcbiAgICAgICAgICAgICAgYWJvcnRTaWduYWw6IGFib3J0Q29udHJvbGxlci5zaWduYWwsXG4gICAgICAgICAgICAgIHN0b3BXaGVuOiBzdGVwQ291bnRJcygxKSxcbiAgICAgICAgICAgICAgdGVtcGVyYXR1cmU6IHJlc29sdmVkR2VuZXJhdGlvbj8udGVtcGVyYXR1cmUsXG4gICAgICAgICAgICAgIHRvcEs6IHJlc29sdmVkR2VuZXJhdGlvbj8udG9wSyxcbiAgICAgICAgICAgICAgdG9wUDogcmVzb2x2ZWRHZW5lcmF0aW9uPy50b3BQLFxuICAgICAgICAgICAgICBmcmVxdWVuY3lQZW5hbHR5OiByZXNvbHZlZEdlbmVyYXRpb24/LmZyZXF1ZW5jeVBlbmFsdHksXG4gICAgICAgICAgICAgIHByZXNlbmNlUGVuYWx0eTogcmVzb2x2ZWRHZW5lcmF0aW9uPy5wcmVzZW5jZVBlbmFsdHksXG4gICAgICAgICAgICAgIG1heE91dHB1dFRva2VuczogcmVzb2x2ZWRHZW5lcmF0aW9uPy5tYXhPdXRwdXRUb2tlbnMsXG4gICAgICAgICAgICAgIGhlYWRlcnM6IHJlc29sdmVkR2VuZXJhdGlvbj8uaGVhZGVycyxcbiAgICAgICAgICAgICAgZXhwZXJpbWVudGFsX2NvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgICAgICAgIHNlc3Npb25JZCxcbiAgICAgICAgICAgICAgICBzYW5kYm94LFxuICAgICAgICAgICAgICAgIG1lc3NhZ2VzOiB1aU1lc3NhZ2VzLFxuICAgICAgICAgICAgICB9IHNhdGlzZmllcyBUb29sQ29udGV4dCxcbiAgICAgICAgICAgICAgcHJlcGFyZVN0ZXA6IGFzeW5jICh7IG1vZGVsIH0pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBza2lsbHNDb250ZXh0ID0gYnVpbGRTa2lsbHNDb250ZXh0KHNraWxsc1JlZi5jdXJyZW50KTtcbiAgICAgICAgICAgICAgICBjb25zdCBjd2RQcm9tcHQgPSBzYW5kYm94UmVjb3JkPy5zZXR1cD8uY3dkXG4gICAgICAgICAgICAgICAgICA/IGBZb3VyIHdvcmtpbmcgZGlyZWN0b3J5IGlzICR7c2FuZGJveFJlY29yZC5zZXR1cC5jd2R9LiBBbGwgZmlsZSBwYXRocyBzaG91bGQgYmUgYWJzb2x1dGUuYFxuICAgICAgICAgICAgICAgICAgOiBcIkFsbCBmaWxlIHBhdGhzIG11c3QgYmUgYWJzb2x1dGUuXCI7XG5cbiAgICAgICAgICAgICAgICBjb25zdCByZXNvbHZlZFN5c3RlbSA9IGF3YWl0IHJlc29sdmVTeXN0ZW0oXG4gICAgICAgICAgICAgICAgICBhZ2VudC5vcHRpb25zLnN5c3RlbSxcbiAgICAgICAgICAgICAgICAgIHJlc29sdmFibGVBcmdzXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHN5c3RlbUhlYWRlciA9IGpvaW5Qcm9tcHRTZWN0aW9ucyhcbiAgICAgICAgICAgICAgICAgIEJBU0VfU1lTVEVNX1BST01QVCxcbiAgICAgICAgICAgICAgICAgIGN3ZFByb21wdCxcbiAgICAgICAgICAgICAgICAgIHJlc29sdmVkU3lzdGVtXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzeXN0ZW1Db250ZXh0ID0gam9pblByb21wdFNlY3Rpb25zKFxuICAgICAgICAgICAgICAgICAgc2tpbGxzQ29udGV4dCxcbiAgICAgICAgICAgICAgICAgIGN3ZFByb21wdFxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBjb252ZXJ0ZWRNZXNzYWdlcyA9IGF3YWl0IGNvbnZlcnRUb01vZGVsTWVzc2FnZXMoXG4gICAgICAgICAgICAgICAgICB1aU1lc3NhZ2VzLFxuICAgICAgICAgICAgICAgICAgeyBpZ25vcmVJbmNvbXBsZXRlVG9vbENhbGxzOiB0cnVlIH1cbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgbW9kZWxNZXNzYWdlcyA9IFtcbiAgICAgICAgICAgICAgICAgIC4uLihzeXN0ZW1IZWFkZXIudHJpbSgpXG4gICAgICAgICAgICAgICAgICAgID8gW3sgcm9sZTogXCJzeXN0ZW1cIiBhcyBjb25zdCwgY29udGVudDogc3lzdGVtSGVhZGVyIH1dXG4gICAgICAgICAgICAgICAgICAgIDogW10pLFxuICAgICAgICAgICAgICAgICAgLi4uKHN5c3RlbUNvbnRleHQudHJpbSgpXG4gICAgICAgICAgICAgICAgICAgID8gW3sgcm9sZTogXCJzeXN0ZW1cIiBhcyBjb25zdCwgY29udGVudDogc3lzdGVtQ29udGV4dCB9XVxuICAgICAgICAgICAgICAgICAgICA6IFtdKSxcbiAgICAgICAgICAgICAgICAgIC4uLmNvbnZlcnRlZE1lc3NhZ2VzLFxuICAgICAgICAgICAgICAgIF07XG5cbiAgICAgICAgICAgICAgICBjb25zdCBwcm9tcHRDYWNoaW5nID0gYXBwbHlQcm9tcHRDYWNoaW5nVG9Nb2RlbFJlcXVlc3Qoe1xuICAgICAgICAgICAgICAgICAgbW9kZWw6IHR5cGVvZiBtb2RlbCA9PT0gXCJzdHJpbmdcIiA/IG1vZGVsIDogbW9kZWwubW9kZWxJZCxcbiAgICAgICAgICAgICAgICAgIHNlc3Npb25JZCxcbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2VzOiBtb2RlbE1lc3NhZ2VzLFxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgbGV0IGFjdGl2ZVRvb2xzID0gcmVzb2x2ZWRBY3RpdmVUb29scyA/PyB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgaWYgKHNraWxsc1JlZi5jdXJyZW50Lmxlbmd0aCA9PT0gMCAmJiBhY3RpdmVUb29scykge1xuICAgICAgICAgICAgICAgICAgYWN0aXZlVG9vbHMgPSBhY3RpdmVUb29scy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICAgICh0KSA9PiB0ICE9PSAoXCJTa2lsbFwiIHNhdGlzZmllcyBCdWlsdEluVG9vbE5hbWUpXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICBtZXNzYWdlczogcHJvbXB0Q2FjaGluZy5tZXNzYWdlcyxcbiAgICAgICAgICAgICAgICAgIHByb3ZpZGVyT3B0aW9uczogbWVyZ2VQcm92aWRlck9wdGlvbnMoe1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50OiByZXNvbHZlZEdlbmVyYXRpb24/LnByb3ZpZGVyT3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgcGF0Y2g6IHByb21wdENhY2hpbmcucHJvdmlkZXJPcHRpb25zLFxuICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICBhY3RpdmVUb29scyxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBvblN0ZXBGaW5pc2g6ICh7IHVzYWdlIH0pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodXNhZ2UpIHtcbiAgICAgICAgICAgICAgICAgIHVzYWdlU3RlcHMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIHN0ZXBJbmRleDogc3RlcEluZGV4T2Zmc2V0ICsgaW50ZXJuYWxTdGVwSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgIG1vZGVsOiByZXNvbHZlZE1vZGVsID8/IFwidW5rbm93blwiLFxuICAgICAgICAgICAgICAgICAgICBpbnB1dFRva2VuczogdXNhZ2UuaW5wdXRUb2tlbnMgPz8gMCxcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0VG9rZW5zOiB1c2FnZS5vdXRwdXRUb2tlbnMgPz8gMCxcbiAgICAgICAgICAgICAgICAgICAgdG90YWxUb2tlbnM6IHVzYWdlLnRvdGFsVG9rZW5zID8/IDAsXG4gICAgICAgICAgICAgICAgICAgIGNhY2hlUmVhZFRva2VuczpcbiAgICAgICAgICAgICAgICAgICAgICB1c2FnZS5pbnB1dFRva2VuRGV0YWlscz8uY2FjaGVSZWFkVG9rZW5zID8/IDAsXG4gICAgICAgICAgICAgICAgICAgIGNhY2hlV3JpdGVUb2tlbnM6XG4gICAgICAgICAgICAgICAgICAgICAgdXNhZ2UuaW5wdXRUb2tlbkRldGFpbHM/LmNhY2hlV3JpdGVUb2tlbnMgPz8gMCxcbiAgICAgICAgICAgICAgICAgICAgcmVhc29uaW5nVG9rZW5zOlxuICAgICAgICAgICAgICAgICAgICAgIHVzYWdlLm91dHB1dFRva2VuRGV0YWlscz8ucmVhc29uaW5nVG9rZW5zID8/IDAsXG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaW50ZXJuYWxTdGVwSW5kZXgrKztcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB3cml0ZXIubWVyZ2UoXG4gICAgICAgICAgICAgIGl0ZXJSZXN1bHQudG9VSU1lc3NhZ2VTdHJlYW0oe1xuICAgICAgICAgICAgICAgIGdlbmVyYXRlTWVzc2FnZUlkOiAoKSA9PiBhc3Npc3RhbnRNZXNzYWdlSWQsXG4gICAgICAgICAgICAgICAgb25GaW5pc2g6ICh7IG1lc3NhZ2VzIH0pID0+IHtcbiAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgbSBvZiBtZXNzYWdlcykge1xuICAgICAgICAgICAgICAgICAgICBpZiAobS5yb2xlID09PSBcImFzc2lzdGFudFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgc3RlcFBhcnRzLnB1c2goLi4ubS5wYXJ0cyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgc3RyZWFtVGV4dEZpbmlzaFJlYXNvbiA9IGF3YWl0IGl0ZXJSZXN1bHQuZmluaXNoUmVhc29uO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGF3YWl0IHN0cmVhbS5waXBlVG8od3JpdGFibGUsIHtcbiAgICAgICAgICBwcmV2ZW50Q2xvc2U6IHRydWUsXG4gICAgICAgICAgcHJldmVudEFib3J0OiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBpZiAoYWJvcnRDb250cm9sbGVyLnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICAgICAgd2FzQWJvcnRlZCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChhYm9ydENvbnRyb2xsZXIuc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgICAgd2FzQWJvcnRlZCA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIC8vIE1hcmsgaW50ZXJydXB0ZWQgdG9vbCBwYXJ0c1xuICAgICAgaWYgKHdhc0Fib3J0ZWQpIHtcbiAgICAgICAgY29uc3QgdGVybWluYWxTdGF0ZXMgPSBuZXcgU2V0KFtcbiAgICAgICAgICBcIm91dHB1dC1hdmFpbGFibGVcIixcbiAgICAgICAgICBcIm91dHB1dC1lcnJvclwiLFxuICAgICAgICAgIFwib3V0cHV0LWRlbmllZFwiLFxuICAgICAgICAgIFwiZG9uZVwiLFxuICAgICAgICBdKTtcbiAgICAgICAgZm9yIChjb25zdCBwYXJ0IG9mIHN0ZXBQYXJ0cykge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIFwidHlwZVwiIGluIHBhcnQgJiZcbiAgICAgICAgICAgIHR5cGVvZiBwYXJ0LnR5cGUgPT09IFwic3RyaW5nXCIgJiZcbiAgICAgICAgICAgIHBhcnQudHlwZS5zdGFydHNXaXRoKFwidG9vbC1cIikgJiZcbiAgICAgICAgICAgIFwic3RhdGVcIiBpbiBwYXJ0ICYmXG4gICAgICAgICAgICAhdGVybWluYWxTdGF0ZXMuaGFzKHBhcnQuc3RhdGUgYXMgc3RyaW5nKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgKHBhcnQgYXMgeyBzdGF0ZTogc3RyaW5nIH0pLnN0YXRlID0gXCJvdXRwdXQtZXJyb3JcIjtcbiAgICAgICAgICAgIChwYXJ0IGFzIHsgZXJyb3JUZXh0Pzogc3RyaW5nIH0pLmVycm9yVGV4dCA9IFwiaW50ZXJydXB0ZWRcIjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gSGFuZGxlIGludGVycnVwdGVkIGxhc3RQYXJ0IHRydW5jYXRpb25cbiAgICAgIGNvbnN0IGxhc3RQYXJ0ID0gaW50ZXJydXB0ZWRMYXN0UGFydFJlZi5jdXJyZW50O1xuXG4gICAgICBjb25zdCBuZXdQYXJ0UmVjb3JkcyA9IHN0ZXBQYXJ0c1xuICAgICAgICAubWFwKCh1aVBhcnQsIGkpID0+IHtcbiAgICAgICAgICBjb25zdCBpbmRleCA9IG5leHRQYXJ0SW5kZXhSZWYuY3VycmVudCArIGk7XG4gICAgICAgICAgaWYgKGxhc3RQYXJ0ICE9IG51bGwgJiYgaW5kZXggPiBsYXN0UGFydC5pbmRleCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHVzZUNsaWVudFBhcnQgPSBsYXN0UGFydCAhPSBudWxsICYmIGluZGV4ID09PSBsYXN0UGFydC5pbmRleDtcbiAgICAgICAgICBjb25zdCBjb250ZW50ID0gKFxuICAgICAgICAgICAgdXNlQ2xpZW50UGFydCA/IGxhc3RQYXJ0LnBhcnQgOiB1aVBhcnRcbiAgICAgICAgICApIGFzIFR5cGVkVUlNZXNzYWdlPFRvb2xzPltcInBhcnRzXCJdW251bWJlcl07XG4gICAgICAgICAgY29uc3QgcGFydElkID1cbiAgICAgICAgICAgIFwiYXBwcm92YWxcIiBpbiBjb250ZW50ICYmIGNvbnRlbnQuYXBwcm92YWw/LmlkXG4gICAgICAgICAgICAgID8gYXBwcm92YWxQYXJ0SWQoY29udGVudC5hcHByb3ZhbC5pZClcbiAgICAgICAgICAgICAgOiBgcGFydF8ke2Fzc2lzdGFudE1lc3NhZ2VJZH1fJHtpbmRleH1gO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpZDogcGFydElkLFxuICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICBtZXNzYWdlSWQ6IGFzc2lzdGFudE1lc3NhZ2VJZCxcbiAgICAgICAgICAgIHNlc3Npb25JZCxcbiAgICAgICAgICAgIHBhcnQ6IGNvbnRlbnQsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSlcbiAgICAgICAgLmZpbHRlcigocik6IHIgaXMgTm9uTnVsbGFibGU8dHlwZW9mIHI+ID0+IHIgIT09IG51bGwpO1xuXG4gICAgICBjb25zdCBwZXJzaXN0UHJvbWlzZSA9IFByb21pc2UuYWxsKFtcbiAgICAgICAgLi4ubmV3UGFydFJlY29yZHMubWFwKChyZWNvcmQpID0+XG4gICAgICAgICAgYWdlbnQuc3RvcmFnZS5wYXJ0LnNldChyZWNvcmQuaWQsIHJlY29yZClcbiAgICAgICAgKSxcbiAgICAgICAgYWdlbnQuc3RvcmFnZS5zZXNzaW9uLnVwZGF0ZShzZXNzaW9uSWQsIHsgc3RhdGUgfSksXG4gICAgICBdKTtcblxuICAgICAgbmV4dFBhcnRJbmRleFJlZi5jdXJyZW50ID1cbiAgICAgICAgbGFzdFBhcnQgIT0gbnVsbFxuICAgICAgICAgID8gTWF0aC5taW4oXG4gICAgICAgICAgICAgIG5leHRQYXJ0SW5kZXhSZWYuY3VycmVudCArIHN0ZXBQYXJ0cy5sZW5ndGgsXG4gICAgICAgICAgICAgIGxhc3RQYXJ0LmluZGV4ICsgMVxuICAgICAgICAgICAgKVxuICAgICAgICAgIDogbmV4dFBhcnRJbmRleFJlZi5jdXJyZW50ICsgc3RlcFBhcnRzLmxlbmd0aDtcblxuICAgICAgY29uc3QgaXRlclBlbmRpbmdBcHByb3ZhbHMgPSBzdGVwUGFydHNcbiAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAocCk6IHAgaXMgdHlwZW9mIHAgJiB7IGFwcHJvdmFsOiB7IGlkOiBzdHJpbmcgfSB9ID0+XG4gICAgICAgICAgICBcInN0YXRlXCIgaW4gcCAmJlxuICAgICAgICAgICAgcC5zdGF0ZSA9PT0gXCJhcHByb3ZhbC1yZXF1ZXN0ZWRcIiAmJlxuICAgICAgICAgICAgXCJhcHByb3ZhbFwiIGluIHAgJiZcbiAgICAgICAgICAgICEhKHAgYXMgeyBhcHByb3ZhbD86IHsgaWQ6IHN0cmluZyB9IH0pLmFwcHJvdmFsPy5pZFxuICAgICAgICApXG4gICAgICAgIC5tYXAoKHApID0+ICh7XG4gICAgICAgICAgYXBwcm92YWxJZDogcC5hcHByb3ZhbC5pZCxcbiAgICAgICAgICB0b29sTmFtZTpcbiAgICAgICAgICAgIFwidHlwZVwiIGluIHAgPyBTdHJpbmcocC50eXBlKS5yZXBsYWNlKFwidG9vbC1cIiwgXCJcIikgOiBcInVua25vd25cIixcbiAgICAgICAgfSkpO1xuXG4gICAgICBsb29wRmluaXNoUmVhc29uID0gd2FzQWJvcnRlZFxuICAgICAgICA/IChcInN0b3BcIiBhcyBGaW5pc2hSZWFzb24pXG4gICAgICAgIDogKHN0cmVhbVRleHRGaW5pc2hSZWFzb24gPz8gKFwidW5rbm93blwiIGFzIEZpbmlzaFJlYXNvbikpO1xuXG4gICAgICAvLyBEZWNpZGUgd2hldGhlciB0byBicmVhayBvciBjb250aW51ZVxuICAgICAgY29uc3Qgc2hvdWxkQnJlYWsgPVxuICAgICAgICBpdGVyUGVuZGluZ0FwcHJvdmFscy5sZW5ndGggPiAwIHx8XG4gICAgICAgIGxvb3BGaW5pc2hSZWFzb24gPT09IFwic3RvcFwiIHx8XG4gICAgICAgIHdhc0Fib3J0ZWQgfHxcbiAgICAgICAgbGFzdFBhcnQgIT0gbnVsbCB8fFxuICAgICAgICAoY3VycmVudE1heFN0ZXBzICE9IG51bGwgJiZcbiAgICAgICAgICBzdGVwSW5kZXhPZmZzZXQgKyB1c2FnZVN0ZXBzLmxlbmd0aCA+PSBjdXJyZW50TWF4U3RlcHMpIHx8XG4gICAgICAgIGl0ZXJhdGlvbiA+PSBzdGVwVGhyb3VnaHB1dCAtIDE7XG5cbiAgICAgIGlmIChzaG91bGRCcmVhaykge1xuICAgICAgICBhd2FpdCBwZXJzaXN0UHJvbWlzZTtcbiAgICAgICAgYWxsUGFydHMucHVzaCguLi5uZXdQYXJ0UmVjb3Jkcyk7XG4gICAgICAgIGFsbFBlbmRpbmdBcHByb3ZhbHMucHVzaCguLi5pdGVyUGVuZGluZ0FwcHJvdmFscyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICAvLyBOb24tZmluYWwgaXRlcmF0aW9uOiBwZXJzaXN0IHBhcnRzIGFuZCByZWJ1aWxkIG1lc3NhZ2VzXG4gICAgICBhd2FpdCBwZXJzaXN0UHJvbWlzZTtcbiAgICAgIGFsbFBhcnRzLnB1c2goLi4ubmV3UGFydFJlY29yZHMpO1xuICAgICAgdWlNZXNzYWdlcyA9IGFzc2VtYmxlVUlNZXNzYWdlcyh7XG4gICAgICAgIG1lc3NhZ2VzOiBtZXNzYWdlc1Jlc3VsdCxcbiAgICAgICAgcGFydHM6IGFsbFBhcnRzLFxuICAgICAgICB1bnRpbDogY3JlYXRlZEF0LFxuICAgICAgICBpbmNsdWRlUXVldWVkOiB0cnVlLFxuICAgICAgICBleGNsdWRlU3ViVG9vbFBhcnRzOiB0cnVlLFxuICAgICAgfSk7XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIHBvbGxDb250cm9sbGVyLmFib3J0KCk7XG4gICAgdGhyb3R0bGVkRW1pdFN0YXR1cy5kaXNwb3NlKCk7XG4gIH1cblxuICBpZiAoc2V0U3RhcnRlZFByb21pc2UpIHtcbiAgICBhd2FpdCBzZXRTdGFydGVkUHJvbWlzZTtcbiAgfVxuXG4gIGRvbmVTdGVwKHtcbiAgICBmaW5pc2hSZWFzb246IGxvb3BGaW5pc2hSZWFzb24sXG4gICAgd2FzQWJvcnRlZCxcbiAgICBpdGVyYXRpb25zOiBpbnRlcm5hbFN0ZXBJbmRleCxcbiAgICBwZW5kaW5nQXBwcm92YWxzOiBhbGxQZW5kaW5nQXBwcm92YWxzLmxlbmd0aCxcbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICBmaW5pc2hSZWFzb246IGxvb3BGaW5pc2hSZWFzb24sXG4gICAgbGFzdFBhcnRJbmRleDogbmV4dFBhcnRJbmRleFJlZi5jdXJyZW50LFxuICAgIHVzYWdlU3RlcHMsXG4gICAgcGVuZGluZ0FwcHJvdmFsczogYWxsUGVuZGluZ0FwcHJvdmFscyxcbiAgICBtYXhTdGVwczogY3VycmVudE1heFN0ZXBzLFxuICAgIGRpc2NvdmVyZWRTa2lsbHM6IHNraWxsc1JlZi5jdXJyZW50LFxuICAgIGNvbnRleHQsXG4gIH07XG59XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIFN0ZXBzXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzdHJlYW1UZXh0U3RlcDxUb29scyBleHRlbmRzIFRvb2xTZXQ+KFxuICAuLi5hcmdzOiBQYXJhbWV0ZXJzPHR5cGVvZiBzdHJlYW1UZXh0PFRvb2xzPj5cbikge1xuICBcInVzZSBzdGVwXCI7XG4gIHJldHVybiBhd2FpdCBzdHJlYW1UZXh0KC4uLmFyZ3MpO1xufVxuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBVdGlsc1xuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5hc3luYyBmdW5jdGlvbiBwcm9jZXNzQXBwcm92YWxzKHtcbiAgYWxsUGFydHMsXG4gIG1lc3NhZ2VzUmVzdWx0LFxuICBjcmVhdGVkQXQsXG4gIHJhd1Rvb2xzLFxuICBhYm9ydENvbnRyb2xsZXIsXG4gIHRvb2xDb250ZXh0LFxuICBhZ2VudCxcbiAgc3RlcExvZyxcbiAgdGhyb3R0bGVkRW1pdFN0YXR1cyxcbiAgd3JpdGVyLFxufToge1xuICBhbGxQYXJ0czogUGFydFtdO1xuICBtZXNzYWdlc1Jlc3VsdDogUGFyYW1ldGVyczx0eXBlb2YgYXNzZW1ibGVVSU1lc3NhZ2VzPlswXVtcIm1lc3NhZ2VzXCJdO1xuICBjcmVhdGVkQXQ6IG51bWJlcjtcbiAgcmF3VG9vbHM6IFRvb2xTZXQ7XG4gIGFib3J0Q29udHJvbGxlcjogQWJvcnRDb250cm9sbGVyO1xuICB0b29sQ29udGV4dDogVG9vbENvbnRleHQ7XG4gIGFnZW50OiBBbnlBZ2VudDtcbiAgc3RlcExvZzogTG9nZ2VyO1xuICB0aHJvdHRsZWRFbWl0U3RhdHVzOiBSZXR1cm5UeXBlPHR5cGVvZiBjcmVhdGVUaHJvdHRsZWRFbWl0U3RhdHVzPjtcbiAgd3JpdGVyOiBTdHJlYW1Xcml0ZXI7XG59KSB7XG4gIC8vIEV4ZWN1dGUgYXBwcm92ZWQgdG9vbHMgc28gdGhlIG1vZGVsIHNlZXMgY29tcGxldGUgdG9vbCBjYWxsICsgcmVzdWx0IHBhaXJzXG4gIGNvbnN0IGFwcHJvdmVkUGFydHMgPSBhbGxQYXJ0cy5maWx0ZXIoXG4gICAgKHApID0+XG4gICAgICBwLnBhcnQgJiZcbiAgICAgIFwic3RhdGVcIiBpbiBwLnBhcnQgJiZcbiAgICAgIChwLnBhcnQgYXMgeyBzdGF0ZTogc3RyaW5nIH0pLnN0YXRlID09PSBcImFwcHJvdmFsLXJlc3BvbmRlZFwiICYmXG4gICAgICBcImFwcHJvdmFsXCIgaW4gcC5wYXJ0ICYmXG4gICAgICAocC5wYXJ0IGFzIHsgYXBwcm92YWw/OiB7IGFwcHJvdmVkOiBib29sZWFuIH0gfSkuYXBwcm92YWw/LmFwcHJvdmVkID09PVxuICAgICAgICB0cnVlXG4gICk7XG5cbiAgaWYgKGFwcHJvdmVkUGFydHMubGVuZ3RoID4gMCkge1xuICAgIHN0ZXBMb2cuaW5mbyhcImV4ZWN1dGluZyBhcHByb3ZlZCB0b29sc1wiLCB7XG4gICAgICBjb3VudDogYXBwcm92ZWRQYXJ0cy5sZW5ndGgsXG4gICAgfSk7XG4gICAgdGhyb3R0bGVkRW1pdFN0YXR1cyh7XG4gICAgICB3cml0ZXIsXG4gICAgICBzdGF0dXM6IHsgdHlwZTogXCJwcm9jZXNzaW5nLWFwcHJvdmFsc1wiIH0sXG4gICAgfSk7XG5cbiAgICBjb25zdCBwcmVFeGVjTWVzc2FnZXMgPSBhd2FpdCBjb252ZXJ0VG9Nb2RlbE1lc3NhZ2VzKFxuICAgICAgYXNzZW1ibGVVSU1lc3NhZ2VzKHtcbiAgICAgICAgbWVzc2FnZXM6IG1lc3NhZ2VzUmVzdWx0LFxuICAgICAgICBwYXJ0czogYWxsUGFydHMsXG4gICAgICAgIHVudGlsOiBjcmVhdGVkQXQsXG4gICAgICAgIGluY2x1ZGVRdWV1ZWQ6IHRydWUsXG4gICAgICAgIGV4Y2x1ZGVTdWJUb29sUGFydHM6IHRydWUsXG4gICAgICB9KSxcbiAgICAgIHsgaWdub3JlSW5jb21wbGV0ZVRvb2xDYWxsczogdHJ1ZSB9XG4gICAgKTtcblxuICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgYXBwcm92ZWRQYXJ0cy5tYXAoYXN5bmMgKGFwKSA9PiB7XG4gICAgICAgIGlmICghYXAucGFydC50eXBlLnN0YXJ0c1dpdGgoXCJ0b29sLVwiKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXJ0ID0gYXAucGFydCBhcyBFeHRyYWN0PFxuICAgICAgICAgIFVJTWVzc2FnZVtcInBhcnRzXCJdW251bWJlcl0sXG4gICAgICAgICAgeyB0eXBlOiBgdG9vbC0ke3N0cmluZ31gIH1cbiAgICAgICAgPjtcbiAgICAgICAgY29uc3QgdG9vbE5hbWUgPSBwYXJ0LnR5cGUucmVwbGFjZShcInRvb2wtXCIsIFwiXCIpO1xuICAgICAgICBjb25zdCB0b29sRGVmID0gcmF3VG9vbHNbdG9vbE5hbWVdO1xuXG4gICAgICAgIGlmICh0b29sRGVmPy5leGVjdXRlICYmIHBhcnQuaW5wdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCB0b29sT3V0cHV0ID0gYXdhaXQgdG9vbERlZi5leGVjdXRlKHBhcnQuaW5wdXQsIHtcbiAgICAgICAgICAgICAgdG9vbENhbGxJZDogcGFydC50b29sQ2FsbElkLFxuICAgICAgICAgICAgICBtZXNzYWdlczogcHJlRXhlY01lc3NhZ2VzLFxuICAgICAgICAgICAgICBhYm9ydFNpZ25hbDogYWJvcnRDb250cm9sbGVyLnNpZ25hbCxcbiAgICAgICAgICAgICAgZXhwZXJpbWVudGFsX2NvbnRleHQ6IHRvb2xDb250ZXh0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBwYXJ0LnN0YXRlID0gXCJvdXRwdXQtYXZhaWxhYmxlXCI7XG4gICAgICAgICAgICBwYXJ0Lm91dHB1dCA9IHRvb2xPdXRwdXQ7XG4gICAgICAgICAgICB3cml0ZXIud3JpdGUoe1xuICAgICAgICAgICAgICB0eXBlOiBcInRvb2wtb3V0cHV0LWF2YWlsYWJsZVwiLFxuICAgICAgICAgICAgICB0b29sQ2FsbElkOiBwYXJ0LnRvb2xDYWxsSWQsXG4gICAgICAgICAgICAgIG91dHB1dDogdG9vbE91dHB1dCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgcGFydC5zdGF0ZSA9IFwib3V0cHV0LWVycm9yXCI7XG4gICAgICAgICAgICBwYXJ0LmVycm9yVGV4dCA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKTtcbiAgICAgICAgICAgIHdyaXRlci53cml0ZSh7XG4gICAgICAgICAgICAgIHR5cGU6IFwidG9vbC1vdXRwdXQtZXJyb3JcIixcbiAgICAgICAgICAgICAgdG9vbENhbGxJZDogcGFydC50b29sQ2FsbElkLFxuICAgICAgICAgICAgICBlcnJvclRleHQ6IHBhcnQuZXJyb3JUZXh0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGF3YWl0IGFnZW50LnN0b3JhZ2UucGFydC5zZXQoYXAuaWQsIHsgLi4uYXAsIHBhcnQgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8vIEF1dG8tZGVueSBhbnkgcmVtYWluaW5nIGFwcHJvdmFsLXJlcXVlc3RlZCBwYXJ0cyBzbyB0aGUgbW9kZWxcbiAgLy8gc2VlcyBjb21wbGV0ZSB0b29sIGNhbGwgKyBkZW5pZWQgcmVzdWx0IHBhaXJzIChub3QgbWlzc2luZyByZXN1bHRzKS5cbiAgY29uc3QgcGVuZGluZ0FwcHJvdmFsUGFydHMgPSBhbGxQYXJ0cy5maWx0ZXIoXG4gICAgKHApID0+IChwLnBhcnQgYXMgeyBzdGF0ZT86IHN0cmluZyB9KS5zdGF0ZSA9PT0gXCJhcHByb3ZhbC1yZXF1ZXN0ZWRcIlxuICApO1xuICBpZiAocGVuZGluZ0FwcHJvdmFsUGFydHMubGVuZ3RoID4gMCkge1xuICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgcGVuZGluZ0FwcHJvdmFsUGFydHMubWFwKGFzeW5jIChwKSA9PiB7XG4gICAgICAgIGNvbnN0IGRlbmllZCA9IHtcbiAgICAgICAgICAuLi5wLFxuICAgICAgICAgIHBhcnQ6IHtcbiAgICAgICAgICAgIC4uLnAucGFydCxcbiAgICAgICAgICAgIHN0YXRlOiBcIm91dHB1dC1kZW5pZWRcIixcbiAgICAgICAgICAgIGFwcHJvdmFsOiB7XG4gICAgICAgICAgICAgIC4uLigocC5wYXJ0IGFzIHsgYXBwcm92YWw/OiBvYmplY3QgfSkuYXBwcm92YWwgPz8ge30pLFxuICAgICAgICAgICAgICBhcHByb3ZlZDogZmFsc2UsXG4gICAgICAgICAgICAgIHJlYXNvbjogXCJhdXRvLWRlbmllZDogbmV3IG1lc3NhZ2Ugc2VudFwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9IGFzIHR5cGVvZiBwLnBhcnQsXG4gICAgICAgIH07XG4gICAgICAgIE9iamVjdC5hc3NpZ24ocCwgZGVuaWVkKTtcbiAgICAgICAgYXdhaXQgYWdlbnQuc3RvcmFnZS5wYXJ0LnNldChwLmlkLCBkZW5pZWQpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG59XG5cbnR5cGUgU3RyZWFtV3JpdGVyID0gVUlNZXNzYWdlU3RyZWFtV3JpdGVyO1xuXG5mdW5jdGlvbiBlbWl0U3RhdHVzKHtcbiAgd3JpdGVyLFxuICBzdGF0dXMsXG4gIGFnZW50LFxufToge1xuICB3cml0ZXI6IFN0cmVhbVdyaXRlcjtcbiAgc3RhdHVzOiBBZ2VudFN0YXR1cztcbiAgYWdlbnQ6IEFueUFnZW50O1xufSkge1xuICB3cml0ZXIud3JpdGUoeyB0eXBlOiBcImRhdGEtc3RhdHVzXCIsIGRhdGE6IHN0YXR1cywgdHJhbnNpZW50OiB0cnVlIH0pO1xuICBhZ2VudC5ob29rcz8uc3RhdHVzPy4oc3RhdHVzKTtcbn1cblxuY29uc3QgU1RBVFVTX1RIUk9UVExFX01TID0gNTAwO1xuXG5mdW5jdGlvbiBjcmVhdGVUaHJvdHRsZWRFbWl0U3RhdHVzKGFnZW50OiBBbnlBZ2VudCkge1xuICBsZXQgdGltZXI6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgbnVsbCA9IG51bGw7XG4gIGxldCBwZW5kaW5nOiB7XG4gICAgd3JpdGVyOiBTdHJlYW1Xcml0ZXI7XG4gICAgc3RhdHVzOiBBZ2VudFN0YXR1cztcbiAgfSB8IG51bGwgPSBudWxsO1xuXG4gIGZ1bmN0aW9uIHRocm90dGxlZCh7XG4gICAgd3JpdGVyLFxuICAgIHN0YXR1cyxcbiAgfToge1xuICAgIHdyaXRlcjogU3RyZWFtV3JpdGVyO1xuICAgIHN0YXR1czogQWdlbnRTdGF0dXM7XG4gIH0pIHtcbiAgICBwZW5kaW5nID0geyB3cml0ZXIsIHN0YXR1cyB9O1xuICAgIGlmICh0aW1lciAhPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmbHVzaCgpO1xuICAgIHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aW1lciA9IG51bGw7XG4gICAgICBpZiAocGVuZGluZykge1xuICAgICAgICBmbHVzaCgpO1xuICAgICAgfVxuICAgIH0sIFNUQVRVU19USFJPVFRMRV9NUyk7XG4gIH1cblxuICBmdW5jdGlvbiBmbHVzaCgpIHtcbiAgICBpZiAoIXBlbmRpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgeyB3cml0ZXIsIHN0YXR1cyB9ID0gcGVuZGluZztcbiAgICBwZW5kaW5nID0gbnVsbDtcbiAgICBlbWl0U3RhdHVzKHsgd3JpdGVyLCBzdGF0dXMsIGFnZW50IH0pO1xuICB9XG5cbiAgdGhyb3R0bGVkLmRpc3Bvc2UgPSAoKSA9PiB7XG4gICAgaWYgKHRpbWVyICE9PSBudWxsKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgdGltZXIgPSBudWxsO1xuICAgIH1cbiAgICBmbHVzaCgpO1xuICB9O1xuXG4gIHJldHVybiB0aHJvdHRsZWQ7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVPcHRpb248VD4oXG4gIHZhbHVlOiBSZXNvbHZhYmxlPFQ+IHwgdW5kZWZpbmVkLFxuICBhcmdzOiBSZXNvbHZhYmxlQXJnc1xuKTogUHJvbWlzZTxUIHwgdW5kZWZpbmVkPiB7XG4gIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICByZXR1cm4gYXdhaXQgKHZhbHVlIGFzIChhcmdzOiBSZXNvbHZhYmxlQXJncykgPT4gVCB8IFByb21pc2U8VD4pKGFyZ3MpO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVN5c3RlbShcbiAgaW5wdXQ6IFJlc29sdmFibGU8c3RyaW5nIHwgc3RyaW5nW10gfCB1bmRlZmluZWQ+IHwgdW5kZWZpbmVkLFxuICBhcmdzOiBSZXNvbHZhYmxlQXJnc1xuKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlc29sdmVPcHRpb24oaW5wdXQsIGFyZ3MpO1xuICBpZiAoIXJlc3VsdCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiBBcnJheS5pc0FycmF5KHJlc3VsdCkgPyByZXN1bHQuZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCJcXG5cIikgOiByZXN1bHQ7XG59XG5cbmNvbnN0IEJBU0VfU1lTVEVNX1BST01QVCA9XG4gIFwiWW91IGFyZSBhbiBBSSBhc3Npc3RhbnQgd2l0aCBiYXNpYyB0b29scyB0byBpbnRlcmFjdCB3aXRoIHlvdXIgZW52aXJvbm1lbnQuIEV4cGxvcmUgYW5kIHdvcmsgZnJlZWx5LlwiO1xuXG5mdW5jdGlvbiBqb2luUHJvbXB0U2VjdGlvbnMoXG4gIC4uLnNlY3Rpb25zOiAoc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbClbXVxuKTogc3RyaW5nIHtcbiAgcmV0dXJuIHNlY3Rpb25zLmZpbHRlcigocykgPT4gcz8udHJpbSgpKS5qb2luKFwiXFxuXFxuXCIpO1xufVxuXG5jb25zdCBiYWNrZ3JvdW5kUHJvY2Vzc1Byb21wdCA9IGAjIyBCYWNrZ3JvdW5kIFByb2Nlc3Nlc1xuVGhlc2UgYmFja2dyb3VuZCBwcm9jZXNzIGluc3RydWN0aW9ucyBhcmUgZm9yIHlvdSB0byBtYW5pcHVsYXRlIHRoZSBwcm9jZXNzZXMsIGRvIG5vdCBiZSB0byB2ZXJib3NlIHRvIHRoZSB1c2VyIGFib3V0IHRoZSByZXNwb25zZSBkZXRhaWxzIGxpa2UgXCJob3cgdG8gZGVidWcgdGhlIHByb2Nlc3Mgb3V0cHV0XCIgdGhlIHVzZXIgd2lsbCBoYXZlIGFuIFVJLlxuXG5Vc2UgXFxgd2FpdFVudGlsOiAwXFxgIGZvciBkZXYgc2VydmVycyB0aGF0IHNob3VsZCBydW4gaW5kZWZpbml0ZWx5LlxuSXQgaXMgYSBnb29kIHByYWN0aWNlIHRvIGNoZWNrIHRoZSBvdXRwdXQgbG9nIGFmdGVyIHJ1bm5pbmcgcHJvY2Vzc2VzIGxpa2UgZGV2IHNlcnZlcnMgdG8gbWFrZSBzdXJlIHRoZXkgc3RhcnRlZCBjb3JyZWN0bHkuXG5cblRvIHJ1biBhIGJhY2tncm91bmQgcHJvY2VzczpcbkJhc2goeyBjb21tYW5kOiBcIm5wbSBydW4gZGV2XCIsIHdhaXRVbnRpbDogMCB9KVxuUmV0dXJucyBpbW1lZGlhdGVseSB3aXRoIFxcYGNvbW1hbmRJZFxcYC4gVGhlIHByb2Nlc3Mga2VlcHMgcnVubmluZyBpbiB0aGUgc2FuZGJveC5cblxuVG8ga2lsbCBhIHByb2Nlc3M6XG5CYXNoKHsgY29tbWFuZDogXCJwcyBhdXggfCBncmVwIG5vZGVcIiB9KSAgIC8vIEZpbmQgdGhlIFBJRFxuQmFzaCh7IGNvbW1hbmQ6IFwia2lsbCB7cGlkfVwiIH0pICAgICAgICAgICAgLy8gR3JhY2VmdWxcbkJhc2goeyBjb21tYW5kOiBcImtpbGwgLTkge3BpZH1cIiB9KSAgICAgICAgIC8vIEZvcmNlXG5gO1xuXG5mdW5jdGlvbiBidWlsZFNraWxsc0NvbnRleHQoc2tpbGxzOiBTa2lsbFN1bW1hcnlbXSk6IHN0cmluZyB7XG4gIGlmIChza2lsbHMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cblxuICBjb25zdCBza2lsbExpbmVzID0gc2tpbGxzXG4gICAgLm1hcCgocykgPT4gYC0gJHtzLm5hbWV9OiAke3MuZGVzY3JpcHRpb259YClcbiAgICAuam9pbihcIlxcblwiKTtcblxuICByZXR1cm4gYCMjIEF2YWlsYWJsZSBTa2lsbHNcbiR7c2tpbGxMaW5lc31cblxuJHtiYWNrZ3JvdW5kUHJvY2Vzc1Byb21wdH1cblxuVXNlIHRoZSBTa2lsbCB0b29sIHRvIGxvYWQgYSBza2lsbCdzIGZ1bGwgaW5zdHJ1Y3Rpb25zIGJlZm9yZSBmb2xsb3dpbmcgaXQuYDtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEFueUFnZW50IH0gZnJvbSBcIi4uL2FnZW50L2NsaWVudFwiO1xuaW1wb3J0IHR5cGUgeyBTYW5kYm94SW5zdGFuY2UgfSBmcm9tIFwiLi4vc2FuZGJveC9hZGFwdGVyXCI7XG5pbXBvcnQgeyBjcmVhdGVMb2dnZXIsIHR5cGUgTG9nZ2VyIH0gZnJvbSBcIi4uL3V0aWxzL2xvZ2dlclwiO1xuaW1wb3J0IHsgcGFyc2VTa2lsbEZyb250bWF0dGVyIH0gZnJvbSBcIi4vcGFyc2VyXCI7XG5pbXBvcnQgdHlwZSB7IFNraWxsU3VtbWFyeSB9IGZyb20gXCIuL3R5cGVzXCI7XG5cbi8qKlxuICogRGlzY292ZXJzIHNraWxscyBmcm9tIGRpcmVjdG9yaWVzIGluc2lkZSB0aGUgc2FuZGJveCBieSBmaW5kaW5nIGFuZCBwYXJzaW5nIFNLSUxMLm1kIGZpbGVzLlxuICogU2NhbnMgZWFjaCBkaXJlY3RvcnkgZm9yIHN1YmRpcmVjdG9yaWVzIGNvbnRhaW5pbmcgU0tJTEwubWQsIGV4dHJhY3RzIGZyb250bWF0dGVyIG1ldGFkYXRhLFxuICogYW5kIHJldHVybnMgc3VtbWFyaWVzIGZvciB1c2UgaW4gdGhlIHN5c3RlbSBwcm9tcHQuXG4gKlxuICogQHJldHVybnMgQXJyYXkgb2Ygc2tpbGwgc3VtbWFyaWVzIChkZWR1cGxpY2F0ZWQgYnkgbmFtZSwgZmlyc3Qgb2NjdXJyZW5jZSB3aW5zKVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZGlzY292ZXJTa2lsbHNJblNhbmRib3gob3B0czoge1xuICBhZ2VudDogQW55QWdlbnQ7XG4gIHNhbmRib3g6IFNhbmRib3hJbnN0YW5jZTtcbiAgc2tpbGxzRGlyczogc3RyaW5nW107XG4gIHNlc3Npb25JZD86IHN0cmluZztcbn0pOiBQcm9taXNlPFNraWxsU3VtbWFyeVtdPiB7XG4gIGNvbnN0IHsgYWdlbnQsIHNhbmRib3gsIHNraWxsc0RpcnMsIHNlc3Npb25JZCB9ID0gb3B0cztcbiAgY29uc3QgYmFzZUxvZyA9IGNyZWF0ZUxvZ2dlcih7XG4gICAgY29uZmlnOiB7IC4uLmFnZW50Lm9wdGlvbnMubG9nZ2luZywgbmFtZTogYWdlbnQubmFtZSB9LFxuICAgIHN1YnN5c3RlbTogXCJza2lsbHNcIixcbiAgfSk7XG4gIGNvbnN0IGxvZyA9IHNlc3Npb25JZCA/IGJhc2VMb2cud2l0aENvbnRleHQoeyBzZXNzaW9uSWQgfSkgOiBiYXNlTG9nO1xuICBjb25zdCBkb25lID0gbG9nLnRpbWUoXCJkaXNjb3ZlclNraWxsc0luU2FuZGJveFwiKTtcblxuICBjb25zdCBzdW1tYXJpZXM6IFNraWxsU3VtbWFyeVtdID0gW107XG4gIGNvbnN0IHNlZW5OYW1lcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gIGZvciAoY29uc3Qgc2tpbGxzRGlyIG9mIHNraWxsc0RpcnMpIHtcbiAgICBjb25zdCBkaXJEb25lID0gbG9nLnRpbWUoXCJzY2FuIGRpcmVjdG9yeVwiLCB7IGRpcjogc2tpbGxzRGlyIH0pO1xuICAgIGNvbnN0IGRpclN1bW1hcmllcyA9IGF3YWl0IGRpc2NvdmVyU2tpbGxzSW5EaXJlY3Rvcnkoe1xuICAgICAgc2FuZGJveCxcbiAgICAgIHNraWxsc0RpcixcbiAgICAgIGxvZyxcbiAgICB9KTtcbiAgICBkaXJEb25lKHsgY291bnQ6IGRpclN1bW1hcmllcy5sZW5ndGggfSk7XG5cbiAgICBmb3IgKGNvbnN0IHN1bW1hcnkgb2YgZGlyU3VtbWFyaWVzKSB7XG4gICAgICBpZiAoIXNlZW5OYW1lcy5oYXMoc3VtbWFyeS5uYW1lKSkge1xuICAgICAgICBzZWVuTmFtZXMuYWRkKHN1bW1hcnkubmFtZSk7XG4gICAgICAgIHN1bW1hcmllcy5wdXNoKHN1bW1hcnkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGRvbmUoeyB0b3RhbFNraWxsczogc3VtbWFyaWVzLmxlbmd0aCB9KTtcblxuICByZXR1cm4gc3VtbWFyaWVzO1xufVxuXG5hc3luYyBmdW5jdGlvbiBkaXNjb3ZlclNraWxsc0luRGlyZWN0b3J5KG9wdHM6IHtcbiAgc2FuZGJveDogU2FuZGJveEluc3RhbmNlO1xuICBza2lsbHNEaXI6IHN0cmluZztcbiAgbG9nOiBMb2dnZXI7XG59KTogUHJvbWlzZTxTa2lsbFN1bW1hcnlbXT4ge1xuICBjb25zdCB7IHNhbmRib3gsIHNraWxsc0RpciwgbG9nIH0gPSBvcHRzO1xuICBjb25zdCBza2lsbFBhdGhzID0gYXdhaXQgZmluZFNraWxsRmlsZXMoeyBzYW5kYm94LCBza2lsbHNEaXIsIGxvZyB9KTtcblxuICBpZiAoc2tpbGxQYXRocy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBjb25zdCBzdW1tYXJpZXM6IFNraWxsU3VtbWFyeVtdID0gW107XG5cbiAgZm9yIChjb25zdCBza2lsbE1kUGF0aCBvZiBza2lsbFBhdGhzKSB7XG4gICAgY29uc3Qgc3VtbWFyeSA9IGF3YWl0IHBhcnNlU2tpbGxGaWxlKHsgc2FuZGJveCwgc2tpbGxNZFBhdGgsIGxvZyB9KTtcbiAgICBpZiAoc3VtbWFyeSkge1xuICAgICAgc3VtbWFyaWVzLnB1c2goc3VtbWFyeSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN1bW1hcmllcztcbn1cblxuYXN5bmMgZnVuY3Rpb24gZmluZFNraWxsRmlsZXMob3B0czoge1xuICBzYW5kYm94OiBTYW5kYm94SW5zdGFuY2U7XG4gIHNraWxsc0Rpcjogc3RyaW5nO1xuICBsb2c6IExvZ2dlcjtcbn0pOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gIGNvbnN0IHsgc2FuZGJveCwgc2tpbGxzRGlyLCBsb2cgfSA9IG9wdHM7XG5cbiAgY29uc3QgZXhlY1Jlc3VsdCA9IGF3YWl0IHNhbmRib3guZXhlYyh7XG4gICAgY29tbWFuZDogXCJmaW5kXCIsXG4gICAgYXJnczogW3NraWxsc0RpciwgXCItbmFtZVwiLCBcIlNLSUxMLm1kXCIsIFwiLXR5cGVcIiwgXCJmXCJdLFxuICB9KTtcblxuICBpZiAoZXhlY1Jlc3VsdCBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgbG9nLndhcm4oXCJmYWlsZWQgdG8gc2NhbiBza2lsbHMgZGlyZWN0b3J5XCIsIHtcbiAgICAgIGRpcjogc2tpbGxzRGlyLFxuICAgICAgZXJyb3I6IGV4ZWNSZXN1bHQubWVzc2FnZSxcbiAgICB9KTtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBjb25zdCB7IHN0ZG91dCwgZXhpdENvZGUgfSA9IGF3YWl0IGV4ZWNSZXN1bHQucmVzdWx0O1xuXG4gIGlmIChleGl0Q29kZSAhPT0gMCkge1xuICAgIGxvZy53YXJuKFwic2tpbGxzIGRpcmVjdG9yeSBub3QgZm91bmQgb3IgaW5hY2Nlc3NpYmxlXCIsIHsgZGlyOiBza2lsbHNEaXIgfSk7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgcmV0dXJuIHN0ZG91dFxuICAgIC50cmltKClcbiAgICAuc3BsaXQoXCJcXG5cIilcbiAgICAuZmlsdGVyKChwKSA9PiBwLmxlbmd0aCA+IDApO1xufVxuXG5hc3luYyBmdW5jdGlvbiBwYXJzZVNraWxsRmlsZShvcHRzOiB7XG4gIHNhbmRib3g6IFNhbmRib3hJbnN0YW5jZTtcbiAgc2tpbGxNZFBhdGg6IHN0cmluZztcbiAgbG9nOiBMb2dnZXI7XG59KTogUHJvbWlzZTxTa2lsbFN1bW1hcnkgfCBudWxsPiB7XG4gIGNvbnN0IHsgc2FuZGJveCwgc2tpbGxNZFBhdGgsIGxvZyB9ID0gb3B0cztcbiAgY29uc3QgZXhlY1Jlc3VsdCA9IGF3YWl0IHNhbmRib3guZXhlYyh7XG4gICAgY29tbWFuZDogXCJjYXRcIixcbiAgICBhcmdzOiBbc2tpbGxNZFBhdGhdLFxuICB9KTtcblxuICBpZiAoZXhlY1Jlc3VsdCBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgbG9nLndhcm4oXCJmYWlsZWQgdG8gcmVhZCBza2lsbCBmaWxlXCIsIHtcbiAgICAgIHBhdGg6IHNraWxsTWRQYXRoLFxuICAgICAgZXJyb3I6IGV4ZWNSZXN1bHQubWVzc2FnZSxcbiAgICB9KTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IHsgc3Rkb3V0LCBleGl0Q29kZSB9ID0gYXdhaXQgZXhlY1Jlc3VsdC5yZXN1bHQ7XG5cbiAgaWYgKGV4aXRDb2RlICE9PSAwKSB7XG4gICAgbG9nLndhcm4oXCJjb3VsZCBub3QgcmVhZCBza2lsbCBmaWxlXCIsIHsgcGF0aDogc2tpbGxNZFBhdGggfSk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBwYXJzZWQgPSBwYXJzZVNraWxsRnJvbnRtYXR0ZXIoc3Rkb3V0KTtcblxuICBpZiAoIXBhcnNlZCkge1xuICAgIGxvZy53YXJuKFwiaW52YWxpZCBvciBtaXNzaW5nIGZyb250bWF0dGVyXCIsIHsgcGF0aDogc2tpbGxNZFBhdGggfSk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG5hbWU6IHBhcnNlZC5uYW1lLFxuICAgIGRlc2NyaXB0aW9uOiBwYXJzZWQuZGVzY3JpcHRpb24sXG4gICAgc2tpbGxNZFBhdGgsXG4gIH07XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBTa2lsbEVudHJ5LCBTa2lsbElucHV0IH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuLyoqXG4gKiBQYXJzZWQgZnJvbnRtYXR0ZXIgZnJvbSBhIFNLSUxMLm1kIGZpbGUuXG4gKi9cbmV4cG9ydCB0eXBlIFNraWxsRnJvbnRtYXR0ZXIgPSB7XG4gIG5hbWU6IHN0cmluZztcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbn07XG5cbi8qKlxuICogUGFyc2VzIFlBTUwgZnJvbnRtYXR0ZXIgZnJvbSBhIFNLSUxMLm1kIGZpbGUgY29udGVudC5cbiAqIEZyb250bWF0dGVyIG11c3QgYmUgYXQgdGhlIHN0YXJ0IG9mIHRoZSBmaWxlLCBkZWxpbWl0ZWQgYnkgYC0tLWAgbWFya2Vycy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgbWFya2Rvd25cbiAqIC0tLVxuICogbmFtZTogY3N2XG4gKiBkZXNjcmlwdGlvbjogQW5hbHl6ZSBDU1YgZGF0YVxuICogLS0tXG4gKiAjIENTViBTa2lsbFxuICogLi4uXG4gKiBgYGBcbiAqXG4gKiBAcmV0dXJucyBQYXJzZWQgbmFtZSBhbmQgZGVzY3JpcHRpb24sIG9yIG51bGwgaWYgZnJvbnRtYXR0ZXIgaXMgbWlzc2luZy9pbnZhbGlkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVNraWxsRnJvbnRtYXR0ZXIoXG4gIGNvbnRlbnQ6IHN0cmluZ1xuKTogU2tpbGxGcm9udG1hdHRlciB8IG51bGwge1xuICBjb25zdCB0cmltbWVkID0gY29udGVudC50cmltKCk7XG5cbiAgaWYgKCF0cmltbWVkLnN0YXJ0c1dpdGgoXCItLS1cIikpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IGVuZE1hcmtlckluZGV4ID0gdHJpbW1lZC5pbmRleE9mKFwiLS0tXCIsIDMpO1xuICBpZiAoZW5kTWFya2VySW5kZXggPT09IC0xKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBmcm9udG1hdHRlckJsb2NrID0gdHJpbW1lZC5zbGljZSgzLCBlbmRNYXJrZXJJbmRleCkudHJpbSgpO1xuICBjb25zdCBwYXJzZWQgPSBwYXJzZVNpbXBsZVlhbWwoZnJvbnRtYXR0ZXJCbG9jayk7XG5cbiAgaWYgKCEocGFyc2VkLm5hbWUgJiYgcGFyc2VkLmRlc2NyaXB0aW9uKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBTdHJpbmcocGFyc2VkLm5hbWUpLFxuICAgIGRlc2NyaXB0aW9uOiBTdHJpbmcocGFyc2VkLmRlc2NyaXB0aW9uKSxcbiAgfTtcbn1cblxuLyoqXG4gKiBQYXJzZXMgc2ltcGxlIFlBTUwga2V5LXZhbHVlIHBhaXJzIChzaW5nbGUtbGluZSB2YWx1ZXMgb25seSkuXG4gKiBUaGlzIGF2b2lkcyBhZGRpbmcgYSBmdWxsIFlBTUwgcGFyc2VyIGRlcGVuZGVuY3kgZm9yIGJhc2ljIGZyb250bWF0dGVyLlxuICovXG5mdW5jdGlvbiBwYXJzZVNpbXBsZVlhbWwoeWFtbDogc3RyaW5nKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gIGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuXG4gIGZvciAoY29uc3QgbGluZSBvZiB5YW1sLnNwbGl0KFwiXFxuXCIpKSB7XG4gICAgY29uc3QgdHJpbW1lZExpbmUgPSBsaW5lLnRyaW0oKTtcbiAgICBpZiAoIXRyaW1tZWRMaW5lIHx8IHRyaW1tZWRMaW5lLnN0YXJ0c1dpdGgoXCIjXCIpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBjb2xvbkluZGV4ID0gdHJpbW1lZExpbmUuaW5kZXhPZihcIjpcIik7XG4gICAgaWYgKGNvbG9uSW5kZXggPT09IC0xKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBrZXkgPSB0cmltbWVkTGluZS5zbGljZSgwLCBjb2xvbkluZGV4KS50cmltKCk7XG4gICAgbGV0IHZhbHVlID0gdHJpbW1lZExpbmUuc2xpY2UoY29sb25JbmRleCArIDEpLnRyaW0oKTtcblxuICAgIC8vIFJlbW92ZSBzdXJyb3VuZGluZyBxdW90ZXMgaWYgcHJlc2VudFxuICAgIGlmIChcbiAgICAgICh2YWx1ZS5zdGFydHNXaXRoKCdcIicpICYmIHZhbHVlLmVuZHNXaXRoKCdcIicpKSB8fFxuICAgICAgKHZhbHVlLnN0YXJ0c1dpdGgoXCInXCIpICYmIHZhbHVlLmVuZHNXaXRoKFwiJ1wiKSlcbiAgICApIHtcbiAgICAgIHZhbHVlID0gdmFsdWUuc2xpY2UoMSwgLTEpO1xuICAgIH1cblxuICAgIGlmIChrZXkpIHtcbiAgICAgIHJlc3VsdFtrZXldID0gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZVNraWxscyhcbiAgc2tpbGxzOiBTa2lsbElucHV0W10gfCBudWxsIHwgdW5kZWZpbmVkXG4pOiBTa2lsbEVudHJ5W10ge1xuICBpZiAoIXNraWxscyB8fCBza2lsbHMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgcmV0dXJuIHNraWxscy5tYXAoKHNraWxsKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBza2lsbCAhPT0gXCJvYmplY3RcIiB8fCBza2lsbCA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIkludmFsaWQgc2tpbGxzIGVudHJ5OiBleHBlY3RlZCBhbiBvYmplY3Qgd2l0aCBhIGB0eXBlYCBmaWVsZC5cIlxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKFwidHlwZVwiIGluIHNraWxsICYmIHNraWxsLnR5cGUpIHtcbiAgICAgIHJldHVybiBza2lsbCBhcyBTa2lsbEVudHJ5O1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHNraWxscyBlbnRyeTogZXhwZWN0ZWQgYHR5cGVgLlwiKTtcbiAgfSk7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBbnlBZ2VudCB9IGZyb20gXCIuLi9hZ2VudC9jbGllbnRcIjtcbmltcG9ydCB0eXBlIHsgU2FuZGJveEluc3RhbmNlIH0gZnJvbSBcIi4uL3NhbmRib3gvYWRhcHRlclwiO1xuaW1wb3J0IHsgY3JlYXRlTG9nZ2VyIH0gZnJvbSBcIi4uL3V0aWxzL2xvZ2dlclwiO1xuaW1wb3J0IHsgbm9ybWFsaXplU2tpbGxzIH0gZnJvbSBcIi4vcGFyc2VyXCI7XG5pbXBvcnQgeyByZXNvbHZlSG9zdFNraWxsIH0gZnJvbSBcIi4vcmVzb2x2ZS1ob3N0XCI7XG5pbXBvcnQgeyByZXNvbHZlSW5saW5lU2tpbGwgfSBmcm9tIFwiLi9yZXNvbHZlLWlubGluZVwiO1xuaW1wb3J0IHsgcmVzb2x2ZVJlbW90ZVNraWxsIH0gZnJvbSBcIi4vcmVzb2x2ZS1yZW1vdGVcIjtcbmltcG9ydCB0eXBlIHsgU2tpbGxJbnB1dCB9IGZyb20gXCIuL3R5cGVzXCI7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlU2tpbGxJbnB1dHNUb1NhbmRib3hEaXJzKG9wdHM6IHtcbiAgYWdlbnQ6IEFueUFnZW50O1xuICBzYW5kYm94OiBTYW5kYm94SW5zdGFuY2U7XG4gIHNraWxsczogU2tpbGxJbnB1dFtdO1xuICBzZXNzaW9uSWQ/OiBzdHJpbmc7XG59KTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICBjb25zdCBiYXNlTG9nID0gY3JlYXRlTG9nZ2VyKHtcbiAgICBjb25maWc6IHsgLi4ub3B0cy5hZ2VudC5vcHRpb25zLmxvZ2dpbmcsIG5hbWU6IG9wdHMuYWdlbnQubmFtZSB9LFxuICAgIHN1YnN5c3RlbTogXCJza2lsbHNcIixcbiAgfSk7XG4gIGNvbnN0IGxvZyA9IG9wdHMuc2Vzc2lvbklkXG4gICAgPyBiYXNlTG9nLndpdGhDb250ZXh0KHsgc2Vzc2lvbklkOiBvcHRzLnNlc3Npb25JZCB9KVxuICAgIDogYmFzZUxvZztcbiAgY29uc3QgZW50cmllcyA9IG5vcm1hbGl6ZVNraWxscyhvcHRzLnNraWxscyk7XG4gIGNvbnN0IHJlc29sdmVkOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuICAgIGlmIChlbnRyeS50eXBlID09PSBcInNhbmRib3hcIikge1xuICAgICAgcmVzb2x2ZWQucHVzaChlbnRyeS5wYXRoKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoZW50cnkudHlwZSA9PT0gXCJob3N0XCIpIHtcbiAgICAgIHJlc29sdmVkLnB1c2goXG4gICAgICAgIGF3YWl0IHJlc29sdmVIb3N0U2tpbGwoe1xuICAgICAgICAgIHNhbmRib3g6IG9wdHMuc2FuZGJveCxcbiAgICAgICAgICBza2lsbDogZW50cnksXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChlbnRyeS50eXBlID09PSBcImdpdFwiKSB7XG4gICAgICByZXNvbHZlZC5wdXNoKFxuICAgICAgICBhd2FpdCByZXNvbHZlUmVtb3RlU2tpbGwoe1xuICAgICAgICAgIHNhbmRib3g6IG9wdHMuc2FuZGJveCxcbiAgICAgICAgICBza2lsbDogZW50cnksXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChlbnRyeS50eXBlID09PSBcImlubGluZVwiKSB7XG4gICAgICByZXNvbHZlZC5wdXNoKFxuICAgICAgICBhd2FpdCByZXNvbHZlSW5saW5lU2tpbGwoe1xuICAgICAgICAgIHNhbmRib3g6IG9wdHMuc2FuZGJveCxcbiAgICAgICAgICBza2lsbDogZW50cnksXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGxvZy53YXJuKFwidW5rbm93biBza2lsbCBzb3VyY2UgZW50cnkgZW5jb3VudGVyZWRcIiwgeyBlbnRyeSB9KTtcbiAgfVxuXG4gIHJldHVybiByZXNvbHZlZDtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IFNhbmRib3hJbnN0YW5jZSB9IGZyb20gXCIuLi9zYW5kYm94L2FkYXB0ZXJcIjtcbmltcG9ydCB0eXBlIHsgSG9zdFNraWxsSW5wdXQgfSBmcm9tIFwiLi90eXBlc1wiO1xuXG5hc3luYyBmdW5jdGlvbiBjb2xsZWN0RmlsZXMob3B0czoge1xuICBhYnNvbHV0ZVBhdGg6IHN0cmluZztcbiAgcmVsYXRpdmVQcmVmaXg/OiBzdHJpbmc7XG59KTogUHJvbWlzZTx7IHBhdGg6IHN0cmluZzsgY29udGVudDogQnVmZmVyIH1bXT4ge1xuICBjb25zdCB7IHJlYWRkaXIsIHJlYWRGaWxlLCBzdGF0IH0gPSBhd2FpdCBpbXBvcnQoXCJub2RlOmZzL3Byb21pc2VzXCIpO1xuICBjb25zdCB7IHJlc29sdmUsIHBvc2l4OiBwYXRoUG9zaXggfSA9IGF3YWl0IGltcG9ydChcIm5vZGU6cGF0aFwiKTtcblxuICBjb25zdCBmaWxlU3RhdCA9IGF3YWl0IHN0YXQob3B0cy5hYnNvbHV0ZVBhdGgpO1xuICBpZiAoZmlsZVN0YXQuaXNGaWxlKCkpIHtcbiAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgcmVhZEZpbGUob3B0cy5hYnNvbHV0ZVBhdGgpO1xuICAgIHJldHVybiBbeyBwYXRoOiBvcHRzLnJlbGF0aXZlUHJlZml4ID8/IFwiU0tJTEwubWRcIiwgY29udGVudCB9XTtcbiAgfVxuXG4gIGlmICghZmlsZVN0YXQuaXNEaXJlY3RvcnkoKSkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGNvbnN0IGVudHJpZXMgPSBhd2FpdCByZWFkZGlyKG9wdHMuYWJzb2x1dGVQYXRoLCB7IHdpdGhGaWxlVHlwZXM6IHRydWUgfSk7XG4gIGNvbnN0IGZpbGVzOiB7IHBhdGg6IHN0cmluZzsgY29udGVudDogQnVmZmVyIH1bXSA9IFtdO1xuXG4gIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuICAgIGNvbnN0IG5leHRBYnMgPSByZXNvbHZlKG9wdHMuYWJzb2x1dGVQYXRoLCBlbnRyeS5uYW1lKTtcbiAgICBjb25zdCBuZXh0UmVsID0gb3B0cy5yZWxhdGl2ZVByZWZpeFxuICAgICAgPyBwYXRoUG9zaXguam9pbihvcHRzLnJlbGF0aXZlUHJlZml4LCBlbnRyeS5uYW1lKVxuICAgICAgOiBlbnRyeS5uYW1lO1xuXG4gICAgaWYgKGVudHJ5LmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgIGZpbGVzLnB1c2goXG4gICAgICAgIC4uLihhd2FpdCBjb2xsZWN0RmlsZXMoe1xuICAgICAgICAgIGFic29sdXRlUGF0aDogbmV4dEFicyxcbiAgICAgICAgICByZWxhdGl2ZVByZWZpeDogbmV4dFJlbCxcbiAgICAgICAgfSkpXG4gICAgICApO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKGVudHJ5LmlzRmlsZSgpKSB7XG4gICAgICBmaWxlcy5wdXNoKHtcbiAgICAgICAgcGF0aDogbmV4dFJlbCxcbiAgICAgICAgY29udGVudDogYXdhaXQgcmVhZEZpbGUobmV4dEFicyksXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmlsZXM7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHN0YWJsZURpck5hbWUoaW5wdXRQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCB7IGNyZWF0ZUhhc2ggfSA9IGF3YWl0IGltcG9ydChcIm5vZGU6Y3J5cHRvXCIpO1xuICBjb25zdCBoYXNoID0gY3JlYXRlSGFzaChcInNoYTFcIikudXBkYXRlKGlucHV0UGF0aCkuZGlnZXN0KFwiaGV4XCIpLnNsaWNlKDAsIDEwKTtcbiAgcmV0dXJuIGBob3N0LSR7aGFzaH1gO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZUhvc3RTa2lsbChvcHRzOiB7XG4gIHNhbmRib3g6IFNhbmRib3hJbnN0YW5jZTtcbiAgc2tpbGw6IEhvc3RTa2lsbElucHV0O1xufSk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHsgcmVzb2x2ZSwgcG9zaXg6IHBhdGhQb3NpeCB9ID0gYXdhaXQgaW1wb3J0KFwibm9kZTpwYXRoXCIpO1xuXG4gIGNvbnN0IGhvc3RQYXRoID0gcmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCBvcHRzLnNraWxsLnBhdGgpO1xuICBjb25zdCBmaWxlcyA9IGF3YWl0IGNvbGxlY3RGaWxlcyh7IGFic29sdXRlUGF0aDogaG9zdFBhdGggfSk7XG4gIGNvbnN0IGRpck5hbWUgPSBhd2FpdCBzdGFibGVEaXJOYW1lKGhvc3RQYXRoKTtcbiAgY29uc3QgZGVzdFBhdGggPSBwYXRoUG9zaXguam9pbihcIi5hZ2VudFwiLCBcInNraWxsc1wiLCBcIi5tYXRlcmlhbGl6ZWRcIiwgZGlyTmFtZSk7XG5cbiAgaWYgKGZpbGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBkZXN0UGF0aDtcbiAgfVxuXG4gIGF3YWl0IG9wdHMuc2FuZGJveC53cml0ZUZpbGVzKHtcbiAgICBmaWxlcyxcbiAgICBkZXN0UGF0aCxcbiAgfSk7XG5cbiAgcmV0dXJuIGRlc3RQYXRoO1xufVxuIiwgImltcG9ydCB0eXBlIHsgU2FuZGJveEluc3RhbmNlIH0gZnJvbSBcIi4uL3NhbmRib3gvYWRhcHRlclwiO1xuaW1wb3J0IHR5cGUgeyBJbmxpbmVTa2lsbElucHV0IH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuZnVuY3Rpb24gc2x1Z2lmeSh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHZhbHVlXG4gICAgLnRvTG93ZXJDYXNlKClcbiAgICAucmVwbGFjZSgvW15hLXowLTldKy9nLCBcIi1cIilcbiAgICAucmVwbGFjZSgvKF4tfC0kKS9nLCBcIlwiKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc3RhYmxlSW5saW5lRGlyTmFtZShuYW1lOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCB7IGNyZWF0ZUhhc2ggfSA9IGF3YWl0IGltcG9ydChcIm5vZGU6Y3J5cHRvXCIpO1xuICBjb25zdCBzbHVnID0gc2x1Z2lmeShuYW1lKSB8fCBcImlubGluZS1za2lsbFwiO1xuICBjb25zdCBoYXNoID0gY3JlYXRlSGFzaChcInNoYTFcIikudXBkYXRlKG5hbWUpLmRpZ2VzdChcImhleFwiKS5zbGljZSgwLCA4KTtcbiAgcmV0dXJuIGAke3NsdWd9LSR7aGFzaH1gO1xufVxuXG5mdW5jdGlvbiBidWlsZFNraWxsTWFya2Rvd24oc2tpbGw6IElubGluZVNraWxsSW5wdXQpOiBzdHJpbmcge1xuICByZXR1cm4gYC0tLVxubmFtZTogJHtza2lsbC5uYW1lfVxuZGVzY3JpcHRpb246ICR7c2tpbGwuZGVzY3JpcHRpb259XG4tLS1cblxuJHtza2lsbC5pbnN0cnVjdGlvbnMudHJpbSgpfVxuYDtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVJbmxpbmVTa2lsbChvcHRzOiB7XG4gIHNhbmRib3g6IFNhbmRib3hJbnN0YW5jZTtcbiAgc2tpbGw6IElubGluZVNraWxsSW5wdXQ7XG59KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgeyBwb3NpeDogcGF0aFBvc2l4IH0gPSBhd2FpdCBpbXBvcnQoXCJub2RlOnBhdGhcIik7XG5cbiAgY29uc3QgZGlyTmFtZSA9IGF3YWl0IHN0YWJsZUlubGluZURpck5hbWUob3B0cy5za2lsbC5uYW1lKTtcbiAgY29uc3QgZGVzdFBhdGggPSBwYXRoUG9zaXguam9pbihcIi5hZ2VudFwiLCBcInNraWxsc1wiLCBcIi5tYXRlcmlhbGl6ZWRcIiwgZGlyTmFtZSk7XG5cbiAgYXdhaXQgb3B0cy5zYW5kYm94LndyaXRlRmlsZXMoe1xuICAgIGRlc3RQYXRoLFxuICAgIGZpbGVzOiBbXG4gICAgICB7XG4gICAgICAgIHBhdGg6IFwiU0tJTEwubWRcIixcbiAgICAgICAgY29udGVudDogYnVpbGRTa2lsbE1hcmtkb3duKG9wdHMuc2tpbGwpLFxuICAgICAgfSxcbiAgICBdLFxuICB9KTtcblxuICByZXR1cm4gZGVzdFBhdGg7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBTYW5kYm94SW5zdGFuY2UgfSBmcm9tIFwiLi4vc2FuZGJveC9hZGFwdGVyXCI7XG5pbXBvcnQgdHlwZSB7IEdpdFNraWxsSW5wdXQgfSBmcm9tIFwiLi90eXBlc1wiO1xuXG5mdW5jdGlvbiBzaGVsbFF1b3RlKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYCcke3ZhbHVlLnJlcGxhY2UoLycvZywgYCdcXFxcJydgKX0nYDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc3RhYmxlUmVwb0Rpck5hbWUoc2tpbGw6IEdpdFNraWxsSW5wdXQpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCB7IGNyZWF0ZUhhc2ggfSA9IGF3YWl0IGltcG9ydChcIm5vZGU6Y3J5cHRvXCIpO1xuICBjb25zdCBoYXNoSW5wdXQgPSBgJHtza2lsbC5yZXBvfTo6JHtza2lsbC5yZWYgPz8gXCJIRUFEXCJ9YDtcbiAgY29uc3QgaGFzaCA9IGNyZWF0ZUhhc2goXCJzaGExXCIpLnVwZGF0ZShoYXNoSW5wdXQpLmRpZ2VzdChcImhleFwiKS5zbGljZSgwLCAxMik7XG4gIHJldHVybiBgZ2l0LSR7aGFzaH1gO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVJlbW90ZVNraWxsKG9wdHM6IHtcbiAgc2FuZGJveDogU2FuZGJveEluc3RhbmNlO1xuICBza2lsbDogR2l0U2tpbGxJbnB1dDtcbn0pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCB7IHBvc2l4OiBwYXRoUG9zaXggfSA9IGF3YWl0IGltcG9ydChcIm5vZGU6cGF0aFwiKTtcblxuICBjb25zdCBkaXJOYW1lID0gYXdhaXQgc3RhYmxlUmVwb0Rpck5hbWUob3B0cy5za2lsbCk7XG4gIGNvbnN0IGNsb25lRGlyID0gcGF0aFBvc2l4LmpvaW4oXCIuYWdlbnRcIiwgXCJza2lsbHNcIiwgXCIubWF0ZXJpYWxpemVkXCIsIGRpck5hbWUpO1xuICBjb25zdCBxdW90ZWREaXIgPSBzaGVsbFF1b3RlKGNsb25lRGlyKTtcbiAgY29uc3QgcXVvdGVkUmVwbyA9IHNoZWxsUXVvdGUob3B0cy5za2lsbC5yZXBvKTtcbiAgY29uc3QgcXVvdGVkUmVmID0gc2hlbGxRdW90ZShvcHRzLnNraWxsLnJlZiA/PyBcIkhFQURcIik7XG5cbiAgY29uc3Qgc3luY0NvbW1hbmQgPSBbXG4gICAgXCJzZXQgLWV1byBwaXBlZmFpbFwiLFxuICAgIGBpZiBbICEgLWQgJHtxdW90ZWREaXJ9Ly5naXQgXTsgdGhlbmAsXG4gICAgYCAgcm0gLXJmICR7cXVvdGVkRGlyfWAsXG4gICAgYCAgbWtkaXIgLXAgJHtxdW90ZWREaXJ9YCxcbiAgICBgICBnaXQgY2xvbmUgLS1kZXB0aCAxICR7cXVvdGVkUmVwb30gJHtxdW90ZWREaXJ9YCxcbiAgICBcImZpXCIsXG4gICAgYGlmIFsgJHtxdW90ZWRSZWZ9ICE9ICdIRUFEJyBdOyB0aGVuYCxcbiAgICBgICBnaXQgLUMgJHtxdW90ZWREaXJ9IGZldGNoIC0tZGVwdGggMSBvcmlnaW4gJHtxdW90ZWRSZWZ9YCxcbiAgICBgICBnaXQgLUMgJHtxdW90ZWREaXJ9IGNoZWNrb3V0IEZFVENIX0hFQURgLFxuICAgIFwiZmlcIixcbiAgXS5qb2luKFwiXFxuXCIpO1xuXG4gIGNvbnN0IGV4ZWNSZXN1bHQgPSBhd2FpdCBvcHRzLnNhbmRib3guZXhlYyh7XG4gICAgY29tbWFuZDogXCJiYXNoXCIsXG4gICAgYXJnczogW1wiLWxjXCIsIHN5bmNDb21tYW5kXSxcbiAgfSk7XG4gIGNvbnN0IHsgZXhpdENvZGUsIHN0ZGVyciB9ID0gYXdhaXQgZXhlY1Jlc3VsdC5yZXN1bHQ7XG4gIGlmIChleGl0Q29kZSAhPT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBGYWlsZWQgdG8gbWF0ZXJpYWxpemUgZ2l0IHNraWxsIGZyb20gJHtvcHRzLnNraWxsLnJlcG99OiAke3N0ZGVyciB8fCBcInVua25vd24gZXJyb3JcIn1gXG4gICAgKTtcbiAgfVxuXG4gIGxldCByZXNvbHZlZERpciA9IGNsb25lRGlyO1xuICBpZiAob3B0cy5za2lsbC5wYXRoKSB7XG4gICAgcmVzb2x2ZWREaXIgPSBwYXRoUG9zaXguam9pbihyZXNvbHZlZERpciwgb3B0cy5za2lsbC5wYXRoKTtcbiAgfVxuICBpZiAob3B0cy5za2lsbC5uYW1lKSB7XG4gICAgcmVzb2x2ZWREaXIgPSBwYXRoUG9zaXguam9pbihyZXNvbHZlZERpciwgb3B0cy5za2lsbC5uYW1lKTtcbiAgfVxuICByZXR1cm4gcmVzb2x2ZWREaXI7XG59XG4iLCAiaW1wb3J0IHtcbiAgdHlwZSBUb29sU2V0LFxuICB0b29sLFxuICB0eXBlIFVJTWVzc2FnZSxcbiAgdHlwZSBVSU1lc3NhZ2VTdHJlYW1Xcml0ZXIsXG59IGZyb20gXCJhaVwiO1xuaW1wb3J0IHsgdWxpZCB9IGZyb20gXCJ1bGlkXCI7XG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiO1xuaW1wb3J0IHR5cGUgeyBBbnlBZ2VudCB9IGZyb20gXCIuLi9hZ2VudC9jbGllbnRcIjtcbmltcG9ydCB0eXBlIHsgU2FuZGJveEluc3RhbmNlIH0gZnJvbSBcIi4uL3NhbmRib3gvYWRhcHRlclwiO1xuaW1wb3J0IHsgREVGQVVMVF9XQUlUX1VOVElMIH0gZnJvbSBcIi4uL3NhbmRib3gvcHJvY2Vzcy1tYW5hZ2VyXCI7XG5pbXBvcnQgeyBhcHByb3ZhbFBhcnRJZCB9IGZyb20gXCIuLi9zZXNzaW9uL3NlbmRcIjtcbmltcG9ydCB0eXBlIHsgU2tpbGxTdW1tYXJ5IH0gZnJvbSBcIi4uL3NraWxscy90eXBlc1wiO1xuaW1wb3J0IHsgY3JlYXRlTG9nZ2VyLCB0eXBlIExvZ2dlciB9IGZyb20gXCIuLi91dGlscy9sb2dnZXJcIjtcbmltcG9ydCB7IGNyZWF0ZUphdmFTY3JpcHRUb29sLCB0eXBlIE9uU3ViVG9vbENhbGwgfSBmcm9tIFwiLi9qYXZhc2NyaXB0XCI7XG5pbXBvcnQgeyBjaGVja05lZWRzQXBwcm92YWwgfSBmcm9tIFwiLi9uZWVkcy1hcHByb3ZhbFwiO1xuXG5leHBvcnQgeyB0b29sIGFzIGFnZW50VG9vbCB9IGZyb20gXCIuL3Rvb2xcIjtcblxuY29uc3QgbG9nID0gY3JlYXRlTG9nZ2VyKHsgY29uZmlnOiB7IG5hbWU6IFwidG9vbHNcIiB9LCBzdWJzeXN0ZW06IFwidG9vbHNcIiB9KTtcblxuZnVuY3Rpb24gZm9ybWF0RmlsZVNpemUoYnl0ZXM6IG51bWJlcik6IHN0cmluZyB7XG4gIGlmIChieXRlcyA8IDEwMjQpIHtcbiAgICByZXR1cm4gYCR7Ynl0ZXN9YDtcbiAgfVxuICBpZiAoYnl0ZXMgPCAxMDI0ICogMTAyNCkge1xuICAgIHJldHVybiBgJHsoYnl0ZXMgLyAxMDI0KS50b0ZpeGVkKDEpfUtgO1xuICB9XG4gIGlmIChieXRlcyA8IDEwMjQgKiAxMDI0ICogMTAyNCkge1xuICAgIHJldHVybiBgJHsoYnl0ZXMgLyAoMTAyNCAqIDEwMjQpKS50b0ZpeGVkKDEpfU1gO1xuICB9XG4gIHJldHVybiBgJHsoYnl0ZXMgLyAoMTAyNCAqIDEwMjQgKiAxMDI0KSkudG9GaXhlZCgxKX1HYDtcbn1cblxudHlwZSBTdHJlYW1Xcml0ZXIgPSBVSU1lc3NhZ2VTdHJlYW1Xcml0ZXI7XG5cbmV4cG9ydCB0eXBlIFRvb2xDb250ZXh0PFxuICBUQ29udGV4dCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBUU3RhdGUgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbj4gPSB7XG4gIGNvbnRleHQ6IFRDb250ZXh0O1xuICBzdGF0ZTogVFN0YXRlO1xuICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgc2FuZGJveDogU2FuZGJveEluc3RhbmNlO1xuICBtZXNzYWdlczogVUlNZXNzYWdlW107XG59O1xuXG5mdW5jdGlvbiBpc1JnTm90Rm91bmRFcnJvcihlcnI6IEVycm9yKTogYm9vbGVhbiB7XG4gIGNvbnN0IHBhcnRzID0gW2Vyci5tZXNzYWdlXTtcblxuICBjb25zdCBhbnlFcnIgPSBlcnIgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgaWYgKHR5cGVvZiBhbnlFcnIucmVhc29uID09PSBcInN0cmluZ1wiKSB7XG4gICAgcGFydHMucHVzaChhbnlFcnIucmVhc29uKTtcbiAgfVxuICBpZiAoYW55RXJyLmNhdXNlIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICBwYXJ0cy5wdXNoKGFueUVyci5jYXVzZS5tZXNzYWdlKTtcbiAgICBjb25zdCBhbnlDYXVzZSA9IGFueUVyci5jYXVzZSBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGlmICh0eXBlb2YgYW55Q2F1c2UudGV4dCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgcGFydHMucHVzaChhbnlDYXVzZS50ZXh0KTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBtc2cgPSBwYXJ0cy5qb2luKFwiIFwiKS50b0xvd2VyQ2FzZSgpO1xuICByZXR1cm4gKFxuICAgIG1zZy5pbmNsdWRlcyhcImV4ZWN1dGFibGUgZmlsZSBub3QgZm91bmRcIikgfHxcbiAgICBtc2cuaW5jbHVkZXMoXCJleGVjdXRhYmxlX25vdF9mb3VuZFwiKSB8fFxuICAgIChtc2cuaW5jbHVkZXMoXCJlbm9lbnRcIikgJiYgbXNnLmluY2x1ZGVzKFwicmdcIikpXG4gICk7XG59XG5cbmV4cG9ydCBjb25zdCBidWlsdEluVG9vbHMgPSB7XG4gIFJlYWQ6IHRvb2woe1xuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgXCJSZWFkcyBhIGZpbGUgYW5kIHJldHVybnMgaXRzIGNvbnRlbnRzIHdpdGggbWV0YWRhdGEuIEZvciBmaWxlcyBvdmVyIDIwMCBsaW5lcywgYXV0b21hdGljYWxseSBzaG93cyBmaXJzdCAxMDAgbGluZXMgdW5sZXNzIGEgc3BlY2lmaWMgbGluZSByYW5nZSBpcyBwcm92aWRlZC4gVXNlIHN0YXJ0TGluZSBhbmQgZW5kTGluZSBwYXJhbWV0ZXJzIHRvIHJlYWQgc3BlY2lmaWMgcG9ydGlvbnMgb2YgbGFyZ2UgZmlsZXMuXCIsXG4gICAgaW5wdXRTY2hlbWE6IHoub2JqZWN0KHtcbiAgICAgIGxhYmVsOiB6XG4gICAgICAgIC5zdHJpbmcoKVxuICAgICAgICAuZGVzY3JpYmUoXCJBIGxhYmVsIHRoYXQgZGVzY3JpYmVzIHRoZSBhY3Rpb24gYmVpbmcgcGVyZm9ybWVkXCIpLFxuICAgICAgcGF0aDogei5zdHJpbmcoKS5kZXNjcmliZShcIkFic29sdXRlIHBhdGggdG8gdGhlIGZpbGVcIiksXG4gICAgICBzdGFydExpbmU6IHpcbiAgICAgICAgLm51bWJlcigpXG4gICAgICAgIC5vcHRpb25hbCgpXG4gICAgICAgIC5kZXNjcmliZShcbiAgICAgICAgICBcIlN0YXJ0aW5nIGxpbmUgbnVtYmVyICgxLWluZGV4ZWQpLiBJZiBwcm92aWRlZCB3aXRoIGVuZExpbmUsIHJlYWRzIGV4YWN0IHJhbmdlIHJlZ2FyZGxlc3Mgb2YgZmlsZSBzaXplLlwiXG4gICAgICAgICksXG4gICAgICBlbmRMaW5lOiB6XG4gICAgICAgIC5udW1iZXIoKVxuICAgICAgICAub3B0aW9uYWwoKVxuICAgICAgICAuZGVzY3JpYmUoXG4gICAgICAgICAgXCJFbmRpbmcgbGluZSBudW1iZXIgKDEtaW5kZXhlZCwgaW5jbHVzaXZlKS4gSWYgcHJvdmlkZWQgd2l0aCBzdGFydExpbmUsIHJlYWRzIGV4YWN0IHJhbmdlIHJlZ2FyZGxlc3Mgb2YgZmlsZSBzaXplLlwiXG4gICAgICAgICksXG4gICAgfSksXG4gICAgb3V0cHV0U2NoZW1hOiB6Lm9iamVjdCh7XG4gICAgICBjb250ZW50OiB6LnN0cmluZygpLmRlc2NyaWJlKFwiRmlsZSBjb250ZW50XCIpLFxuICAgICAgbWV0YWRhdGE6IHoub2JqZWN0KHtcbiAgICAgICAgdG90YWxMaW5lczogei5udW1iZXIoKS5kZXNjcmliZShcIlRvdGFsIG51bWJlciBvZiBsaW5lcyBpbiB0aGUgZmlsZVwiKSxcbiAgICAgICAgbGluZXNTaG93bjogelxuICAgICAgICAgIC5udW1iZXIoKVxuICAgICAgICAgIC5kZXNjcmliZShcIk51bWJlciBvZiBsaW5lcyBpbmNsdWRlZCBpbiB0aGlzIHJlc3BvbnNlXCIpLFxuICAgICAgICBzdGFydExpbmU6IHoubnVtYmVyKCkuZGVzY3JpYmUoXCJGaXJzdCBsaW5lIG51bWJlciBzaG93biAoMS1pbmRleGVkKVwiKSxcbiAgICAgICAgZW5kTGluZTogei5udW1iZXIoKS5kZXNjcmliZShcIkxhc3QgbGluZSBudW1iZXIgc2hvd24gKDEtaW5kZXhlZClcIiksXG4gICAgICAgIGlzUGFnaW5hdGVkOiB6XG4gICAgICAgICAgLmJvb2xlYW4oKVxuICAgICAgICAgIC5kZXNjcmliZShcIldoZXRoZXIgdGhpcyBpcyBhIHBhcnRpYWwgdmlldyBvZiB0aGUgZmlsZVwiKSxcbiAgICAgICAgZmlsZVNpemU6IHpcbiAgICAgICAgICAuc3RyaW5nKClcbiAgICAgICAgICAuZGVzY3JpYmUoXCJIdW1hbi1yZWFkYWJsZSBmaWxlIHNpemUgKGUuZy4sICcyLjVLJywgJzEuMk0nKVwiKSxcbiAgICAgICAgcGF0aDogei5zdHJpbmcoKS5kZXNjcmliZShcIkFic29sdXRlIHBhdGggdG8gdGhlIGZpbGVcIiksXG4gICAgICB9KSxcbiAgICB9KSxcbiAgfSksXG4gIEdyZXA6IHRvb2woe1xuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgXCJTZWFyY2ggZm9yIHBhdHRlcm5zIGluIGZpbGVzIHVzaW5nIHJpcGdyZXAuIFVzZSB0aGlzIHRvIGZpbmQgY29kZSBwYXR0ZXJucywgZnVuY3Rpb24gZGVmaW5pdGlvbnMsIGltcG9ydHMsIGV0Yy5cIixcbiAgICBpbnB1dFNjaGVtYTogei5vYmplY3Qoe1xuICAgICAgbGFiZWw6IHpcbiAgICAgICAgLnN0cmluZygpXG4gICAgICAgIC5kZXNjcmliZShcIkEgbGFiZWwgdGhhdCBkZXNjcmliZXMgdGhlIGFjdGlvbiBiZWluZyBwZXJmb3JtZWRcIiksXG4gICAgICBwYXR0ZXJuOiB6XG4gICAgICAgIC5zdHJpbmcoKVxuICAgICAgICAuZGVzY3JpYmUoXCJSZWdleCBwYXR0ZXJuIHRvIHNlYXJjaCBmb3IgKHJpcGdyZXAgc3ludGF4KVwiKSxcbiAgICAgIHBhdGg6IHpcbiAgICAgICAgLnN0cmluZygpXG4gICAgICAgIC5vcHRpb25hbCgpXG4gICAgICAgIC5kZXNjcmliZShcbiAgICAgICAgICBcIkFic29sdXRlIHBhdGggdG8gc2VhcmNoIGluIChkZWZhdWx0cyB0byB3b3JraW5nIGRpcmVjdG9yeSkuIENhbiBiZSBhIGZpbGUgb3IgZGlyZWN0b3J5LlwiXG4gICAgICAgICksXG4gICAgICBmaWxlVHlwZTogelxuICAgICAgICAuc3RyaW5nKClcbiAgICAgICAgLm9wdGlvbmFsKClcbiAgICAgICAgLmRlc2NyaWJlKFxuICAgICAgICAgIFwiRmlsZSB0eXBlIHRvIGZpbHRlciBieSAoZS5nLiwgJ3RzJywgJ2pzJywgJ3B5JywgJ21kJykuIFVzZXMgcmlwZ3JlcCdzIGJ1aWx0LWluIHR5cGUgZmlsdGVycy5cIlxuICAgICAgICApLFxuICAgICAgZ2xvYjogelxuICAgICAgICAuc3RyaW5nKClcbiAgICAgICAgLm9wdGlvbmFsKClcbiAgICAgICAgLmRlc2NyaWJlKFxuICAgICAgICAgIFwiR2xvYiBwYXR0ZXJuIHRvIGZpbHRlciBmaWxlcyAoZS5nLiwgJyoudHN4JywgJ3NyYy8qKi8qLnRzJylcIlxuICAgICAgICApLFxuICAgICAgY2FzZVNlbnNpdGl2ZTogelxuICAgICAgICAuYm9vbGVhbigpXG4gICAgICAgIC5vcHRpb25hbCgpXG4gICAgICAgIC5kZWZhdWx0KHRydWUpXG4gICAgICAgIC5kZXNjcmliZShcIldoZXRoZXIgc2VhcmNoIGlzIGNhc2Utc2Vuc2l0aXZlIChkZWZhdWx0OiB0cnVlKVwiKSxcbiAgICAgIGNvbnRleHRMaW5lczogelxuICAgICAgICAubnVtYmVyKClcbiAgICAgICAgLm9wdGlvbmFsKClcbiAgICAgICAgLmRlc2NyaWJlKFxuICAgICAgICAgIFwiTnVtYmVyIG9mIGNvbnRleHQgbGluZXMgdG8gc2hvdyBiZWZvcmUgYW5kIGFmdGVyIGVhY2ggbWF0Y2hcIlxuICAgICAgICApLFxuICAgICAgbWF4Q291bnQ6IHpcbiAgICAgICAgLm51bWJlcigpXG4gICAgICAgIC5vcHRpb25hbCgpXG4gICAgICAgIC5kZXNjcmliZShcbiAgICAgICAgICBcIk1heGltdW0gbnVtYmVyIG9mIG1hdGNoZXMgcGVyIGZpbGUgKHVzZWZ1bCBmb3IgbGltaXRpbmcgb3V0cHV0KVwiXG4gICAgICAgICksXG4gICAgICBmaWxlc1dpdGhNYXRjaGVzOiB6XG4gICAgICAgIC5ib29sZWFuKClcbiAgICAgICAgLm9wdGlvbmFsKClcbiAgICAgICAgLmRlZmF1bHQoZmFsc2UpXG4gICAgICAgIC5kZXNjcmliZShcbiAgICAgICAgICBcIk9ubHkgc2hvdyBmaWxlIHBhdGhzIHRoYXQgY29udGFpbiBtYXRjaGVzLCBub3QgdGhlIG1hdGNoaW5nIGxpbmVzIHRoZW1zZWx2ZXNcIlxuICAgICAgICApLFxuICAgIH0pLFxuICAgIG91dHB1dFNjaGVtYTogei5vYmplY3Qoe1xuICAgICAgbWF0Y2hlczogelxuICAgICAgICAuc3RyaW5nKClcbiAgICAgICAgLmRlc2NyaWJlKFxuICAgICAgICAgIFwiU2VhcmNoIHJlc3VsdHMgd2l0aCBmaWxlIHBhdGhzLCBsaW5lIG51bWJlcnMsIGFuZCBtYXRjaGluZyBjb250ZW50XCJcbiAgICAgICAgKSxcbiAgICAgIHN1bW1hcnk6IHoub2JqZWN0KHtcbiAgICAgICAgbWF0Y2hDb3VudDogei5udW1iZXIoKS5kZXNjcmliZShcIk51bWJlciBvZiBtYXRjaGVzIGZvdW5kXCIpLFxuICAgICAgICBmaWxlQ291bnQ6IHoubnVtYmVyKCkuZGVzY3JpYmUoXCJOdW1iZXIgb2YgZmlsZXMgY29udGFpbmluZyBtYXRjaGVzXCIpLFxuICAgICAgICBzZWFyY2hQYXRoOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiUGF0aCB0aGF0IHdhcyBzZWFyY2hlZFwiKSxcbiAgICAgICAgcGF0dGVybjogei5zdHJpbmcoKS5kZXNjcmliZShcIlBhdHRlcm4gdGhhdCB3YXMgc2VhcmNoZWQgZm9yXCIpLFxuICAgICAgfSksXG4gICAgfSksXG4gIH0pLFxuICBMaXN0OiB0b29sKHtcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgIFwiUmVjdXJzaXZlbHkgbGlzdCBkaXJlY3RvcnkgY29udGVudHMuIFVzZSB0aGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvZGViYXNlIHN0cnVjdHVyZSwgZmluZCBmaWxlcywgb3IgZXhwbG9yZSBkaXJlY3Rvcmllcy4gQ29udHJvbCBkZXB0aCB0byBiYWxhbmNlIGRldGFpbCB2cy4gb3ZlcnZpZXcuIERlcHRoIDEgc2hvd3MgaW1tZWRpYXRlIGNoaWxkcmVuLCBkZXB0aCAyIGluY2x1ZGVzIHN1YmRpcmVjdG9yaWVzLCBldGMuXCIsXG4gICAgaW5wdXRTY2hlbWE6IHoub2JqZWN0KHtcbiAgICAgIGxhYmVsOiB6XG4gICAgICAgIC5zdHJpbmcoKVxuICAgICAgICAuZGVzY3JpYmUoXCJBIGxhYmVsIHRoYXQgZGVzY3JpYmVzIHRoZSBhY3Rpb24gYmVpbmcgcGVyZm9ybWVkXCIpLFxuICAgICAgcGF0aDogelxuICAgICAgICAuc3RyaW5nKClcbiAgICAgICAgLm9wdGlvbmFsKClcbiAgICAgICAgLmRlc2NyaWJlKFwiQWJzb2x1dGUgcGF0aCB0byBsaXN0IChkZWZhdWx0cyB0byB3b3JraW5nIGRpcmVjdG9yeSlcIiksXG4gICAgICBkZXB0aDogelxuICAgICAgICAubnVtYmVyKClcbiAgICAgICAgLm9wdGlvbmFsKClcbiAgICAgICAgLmRlc2NyaWJlKFxuICAgICAgICAgIFwiTWF4aW11bSBkZXB0aCB0byB0cmF2ZXJzZS4gQ2hvb3NlIGJhc2VkIG9uIGNvbnRleHQ6IDEtMiBmb3IgcXVpY2sgb3ZlcnZpZXcsIDMtNCBmb3IgZGV0YWlsZWQgZXhwbG9yYXRpb24sIDUrIGZvciBjb21wcmVoZW5zaXZlIG1hcHBpbmdcIlxuICAgICAgICApLFxuICAgICAgaW5jbHVkZUhpZGRlbjogelxuICAgICAgICAuYm9vbGVhbigpXG4gICAgICAgIC5vcHRpb25hbCgpXG4gICAgICAgIC5kZWZhdWx0KGZhbHNlKVxuICAgICAgICAuZGVzY3JpYmUoXG4gICAgICAgICAgXCJJbmNsdWRlIGhpZGRlbiBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgKHRob3NlIHN0YXJ0aW5nIHdpdGggJy4nKVwiXG4gICAgICAgICksXG4gICAgICBmaWxlc09ubHk6IHpcbiAgICAgICAgLmJvb2xlYW4oKVxuICAgICAgICAub3B0aW9uYWwoKVxuICAgICAgICAuZGVmYXVsdChmYWxzZSlcbiAgICAgICAgLmRlc2NyaWJlKFwiT25seSBzaG93IGZpbGVzLCBub3QgZGlyZWN0b3JpZXNcIiksXG4gICAgICBwYXR0ZXJuOiB6XG4gICAgICAgIC5zdHJpbmcoKVxuICAgICAgICAub3B0aW9uYWwoKVxuICAgICAgICAuZGVzY3JpYmUoXCJHbG9iIHBhdHRlcm4gdG8gZmlsdGVyIHJlc3VsdHMgKGUuZy4sICcqLnRzJywgJyp0ZXN0KicpXCIpLFxuICAgIH0pLFxuICAgIG91dHB1dFNjaGVtYTogei5vYmplY3Qoe1xuICAgICAgbGlzdGluZzogelxuICAgICAgICAuc3RyaW5nKClcbiAgICAgICAgLmRlc2NyaWJlKFxuICAgICAgICAgIFwiRGlyZWN0b3J5IHRyZWUgbGlzdGluZyBzaG93aW5nIHBhdGhzIHJlbGF0aXZlIHRvIHNlYXJjaCByb290XCJcbiAgICAgICAgKSxcbiAgICAgIHN1bW1hcnk6IHoub2JqZWN0KHtcbiAgICAgICAgdG90YWxJdGVtczogei5udW1iZXIoKS5kZXNjcmliZShcIlRvdGFsIG51bWJlciBvZiBpdGVtcyBmb3VuZFwiKSxcbiAgICAgICAgdG90YWxGaWxlczogei5udW1iZXIoKS5kZXNjcmliZShcIlRvdGFsIG51bWJlciBvZiBmaWxlcyBmb3VuZFwiKSxcbiAgICAgICAgdG90YWxEaXJzOiB6Lm51bWJlcigpLmRlc2NyaWJlKFwiVG90YWwgbnVtYmVyIG9mIGRpcmVjdG9yaWVzIGZvdW5kXCIpLFxuICAgICAgICBzZWFyY2hQYXRoOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiUGF0aCB0aGF0IHdhcyBsaXN0ZWRcIiksXG4gICAgICAgIGRlcHRoOiB6XG4gICAgICAgICAgLm51bWJlcigpXG4gICAgICAgICAgLm9wdGlvbmFsKClcbiAgICAgICAgICAuZGVzY3JpYmUoXCJNYXhpbXVtIGRlcHRoIHVzZWQgKGlmIHNwZWNpZmllZClcIiksXG4gICAgICB9KSxcbiAgICB9KSxcbiAgfSksXG4gIFdyaXRlOiB0b29sKHtcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgIFwiV3JpdGUgY29udGVudCB0byBhIGZpbGUuIENyZWF0ZXMgcGFyZW50IGRpcmVjdG9yaWVzIGF1dG9tYXRpY2FsbHkuIE92ZXJ3cml0ZXMgZXhpc3RpbmcgZmlsZXMuXCIsXG4gICAgaW5wdXRTY2hlbWE6IHoub2JqZWN0KHtcbiAgICAgIGxhYmVsOiB6XG4gICAgICAgIC5zdHJpbmcoKVxuICAgICAgICAuZGVzY3JpYmUoXCJBIGxhYmVsIHRoYXQgZGVzY3JpYmVzIHRoZSBhY3Rpb24gYmVpbmcgcGVyZm9ybWVkXCIpLFxuICAgICAgcGF0aDogei5zdHJpbmcoKS5kZXNjcmliZShcIkFic29sdXRlIHBhdGggdG8gdGhlIGZpbGVcIiksXG4gICAgICBjb250ZW50OiB6LnN0cmluZygpLmRlc2NyaWJlKFwiQ29udGVudCB0byB3cml0ZSB0byB0aGUgZmlsZVwiKSxcbiAgICB9KSxcbiAgICBvdXRwdXRTY2hlbWE6IHoub2JqZWN0KHtcbiAgICAgIHN1Y2Nlc3M6IHouYm9vbGVhbigpLmRlc2NyaWJlKFwiV2hldGhlciB0aGUgd3JpdGUgc3VjY2VlZGVkXCIpLFxuICAgICAgcGF0aDogei5zdHJpbmcoKS5kZXNjcmliZShcIlBhdGggdG8gdGhlIHdyaXR0ZW4gZmlsZVwiKSxcbiAgICAgIGJ5dGVzV3JpdHRlbjogei5udW1iZXIoKS5kZXNjcmliZShcIk51bWJlciBvZiBieXRlcyB3cml0dGVuXCIpLFxuICAgICAgZXJyb3I6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIkVycm9yIG1lc3NhZ2UgaWYgd3JpdGUgZmFpbGVkXCIpLFxuICAgIH0pLFxuICB9KSxcbiAgRWRpdDogdG9vbCh7XG4gICAgZGVzY3JpcHRpb246XG4gICAgICBcIkVkaXQgYSBmaWxlIGJ5IHJlcGxhY2luZyBhbiBleGFjdCBzdHJpbmcuIEZhaWxzIGlmIG9sZF9zdHJpbmcgaXMgbm90IGZvdW5kIG9yIGFwcGVhcnMgbXVsdGlwbGUgdGltZXMgKG5vdCB1bmlxdWUpLiBGb3IgbXVsdGlwbGUgcmVwbGFjZW1lbnRzLCBjYWxsIHRoaXMgdG9vbCBtdWx0aXBsZSB0aW1lcyB3aXRoIHVuaXF1ZSBjb250ZXh0LlwiLFxuICAgIGlucHV0U2NoZW1hOiB6Lm9iamVjdCh7XG4gICAgICBsYWJlbDogelxuICAgICAgICAuc3RyaW5nKClcbiAgICAgICAgLmRlc2NyaWJlKFwiQSBsYWJlbCB0aGF0IGRlc2NyaWJlcyB0aGUgYWN0aW9uIGJlaW5nIHBlcmZvcm1lZFwiKSxcbiAgICAgIHBhdGg6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJBYnNvbHV0ZSBwYXRoIHRvIHRoZSBmaWxlXCIpLFxuICAgICAgb2xkX3N0cmluZzogelxuICAgICAgICAuc3RyaW5nKClcbiAgICAgICAgLmRlc2NyaWJlKFwiRXhhY3Qgc3RyaW5nIHRvIGZpbmQgYW5kIHJlcGxhY2UgKG11c3QgYmUgdW5pcXVlIGluIGZpbGUpXCIpLFxuICAgICAgbmV3X3N0cmluZzogei5zdHJpbmcoKS5kZXNjcmliZShcIlN0cmluZyB0byByZXBsYWNlIG9sZF9zdHJpbmcgd2l0aFwiKSxcbiAgICB9KSxcbiAgICBvdXRwdXRTY2hlbWE6IHoub2JqZWN0KHtcbiAgICAgIHN1Y2Nlc3M6IHouYm9vbGVhbigpLmRlc2NyaWJlKFwiV2hldGhlciB0aGUgZWRpdCBzdWNjZWVkZWRcIiksXG4gICAgICBwYXRoOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiUGF0aCB0byB0aGUgZWRpdGVkIGZpbGVcIiksXG4gICAgICBlcnJvcjogei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiRXJyb3IgbWVzc2FnZSBpZiBlZGl0IGZhaWxlZFwiKSxcbiAgICB9KSxcbiAgfSksXG4gIEJhc2g6IHRvb2woe1xuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgXCJFeGVjdXRlcyBhIGJhc2ggY29tbWFuZC4gUmV0dXJucyBzdGRvdXQgYW5kIHN0ZGVyciBzZXBhcmF0ZWx5LiBVc2Ugd2FpdFVudGlsIHRvIGNvbnRyb2wgaG93IGxvbmcgdG8gd2FpdCAoMCA9IHJldHVybiBpbW1lZGlhdGVseSwgcHJvY2VzcyBrZWVwcyBydW5uaW5nKS4gTGFyZ2Ugb3V0cHV0cyBhcmUgdGFpbC10cnVuY2F0ZWQ7IGZ1bGwgb3V0cHV0IGluIG91dHB1dERpci5cIixcbiAgICBpbnB1dFNjaGVtYTogei5vYmplY3Qoe1xuICAgICAgbGFiZWw6IHpcbiAgICAgICAgLnN0cmluZygpXG4gICAgICAgIC5kZXNjcmliZShcIkEgbGFiZWwgdGhhdCBkZXNjcmliZXMgdGhlIGFjdGlvbiBiZWluZyBwZXJmb3JtZWRcIiksXG4gICAgICBjb21tYW5kOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiVGhlIHNoZWxsIGNvbW1hbmQgdG8gZXhlY3V0ZVwiKSxcbiAgICAgIHdhaXRVbnRpbDogelxuICAgICAgICAubnVtYmVyKClcbiAgICAgICAgLm9wdGlvbmFsKClcbiAgICAgICAgLmRlc2NyaWJlKFxuICAgICAgICAgIGBNYXggbXMgdG8gd2FpdCBmb3IgY29tcGxldGlvbiAoZGVmYXVsdDogJHtERUZBVUxUX1dBSVRfVU5USUx9KS4gVXNlIDAgdG8gcmV0dXJuIGltbWVkaWF0ZWx5IHdoaWxlIHRoZSBwcm9jZXNzIGtlZXBzIHJ1bm5pbmcuYFxuICAgICAgICApLFxuICAgIH0pLFxuICAgIG91dHB1dFNjaGVtYTogei5vYmplY3Qoe1xuICAgICAgY29tbWFuZElkOiB6XG4gICAgICAgIC5zdHJpbmcoKVxuICAgICAgICAuZGVzY3JpYmUoXCJDb21tYW5kIElELiBVc2UgdG8gcmVmZXJlbmNlIG9yIGtpbGwgcnVubmluZyBwcm9jZXNzZXMuXCIpLFxuICAgICAgc3Rkb3V0OiB6XG4gICAgICAgIC5zdHJpbmcoKVxuICAgICAgICAuZGVzY3JpYmUoXG4gICAgICAgICAgXCJDb21tYW5kIHN0ZG91dC4gVGFpbC10cnVuY2F0ZWQgaWYgbGFyZ2U7IGZ1bGwgY29udGVudCBpbiBvdXRwdXREaXIvc3Rkb3V0LnR4dC5cIlxuICAgICAgICApLFxuICAgICAgc3RkZXJyOiB6XG4gICAgICAgIC5zdHJpbmcoKVxuICAgICAgICAuZGVzY3JpYmUoXG4gICAgICAgICAgXCJDb21tYW5kIHN0ZGVyci4gVGFpbC10cnVuY2F0ZWQgaWYgbGFyZ2U7IGZ1bGwgY29udGVudCBpbiBvdXRwdXREaXIvc3RkZXJyLnR4dC5cIlxuICAgICAgICApLFxuICAgICAgZXhpdENvZGU6IHoubnVtYmVyKCkuZGVzY3JpYmUoXCJFeGl0IGNvZGUgKC0xIGlmIHN0aWxsIHJ1bm5pbmcpXCIpLFxuICAgICAgc3RhdHVzOiB6XG4gICAgICAgIC5lbnVtKFtcInJ1bm5pbmdcIiwgXCJjb21wbGV0ZWRcIiwgXCJmYWlsZWRcIl0pXG4gICAgICAgIC5kZXNjcmliZShcIlByb2Nlc3Mgc3RhdHVzXCIpLFxuICAgICAgb3V0cHV0RGlyOiB6XG4gICAgICAgIC5zdHJpbmcoKVxuICAgICAgICAuZGVzY3JpYmUoXG4gICAgICAgICAgXCJQYXRoIHRvIG91dHB1dCBkaXJlY3RvcnkgY29udGFpbmluZyBzdGRvdXQudHh0LCBzdGRlcnIudHh0LCBhbmQgbWV0YWRhdGEuanNvbi4gRW1wdHkgaWYgc3RpbGwgcnVubmluZy5cIlxuICAgICAgICApLFxuICAgIH0pLFxuICB9KSxcbiAgU2tpbGw6IHRvb2woe1xuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgXCJMb2FkIGEgc2tpbGwncyBmdWxsIGluc3RydWN0aW9ucyBieSBuYW1lLiBDYWxsIHRoaXMgYmVmb3JlIGZvbGxvd2luZyBhIHNraWxsLlwiLFxuICAgIGlucHV0U2NoZW1hOiB6Lm9iamVjdCh7XG4gICAgICBsYWJlbDogelxuICAgICAgICAuc3RyaW5nKClcbiAgICAgICAgLmRlc2NyaWJlKFwiQSBsYWJlbCB0aGF0IGRlc2NyaWJlcyB0aGUgYWN0aW9uIGJlaW5nIHBlcmZvcm1lZFwiKSxcbiAgICAgIG5hbWU6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJTa2lsbCBuYW1lIGZyb20gdGhlIEF2YWlsYWJsZSBTa2lsbHMgbGlzdFwiKSxcbiAgICB9KSxcbiAgICBvdXRwdXRTY2hlbWE6IHoub2JqZWN0KHtcbiAgICAgIG5hbWU6IHouc3RyaW5nKCksXG4gICAgICBkZXNjcmlwdGlvbjogei5zdHJpbmcoKSxcbiAgICAgIGNvbnRlbnQ6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJGdWxsIFNLSUxMLm1kIGNvbnRlbnRcIiksXG4gICAgICBwYXRoOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiUGF0aCB0byB0aGUgc2tpbGwgZGlyZWN0b3J5IGluIHRoZSBzYW5kYm94XCIpLFxuICAgIH0pLFxuICB9KSxcbiAgSmF2YVNjcmlwdDogdG9vbCh7XG4gICAgaW5wdXRTY2hlbWE6IHoub2JqZWN0KHtcbiAgICAgIGxhYmVsOiB6XG4gICAgICAgIC5zdHJpbmcoKVxuICAgICAgICAuZGVzY3JpYmUoXCJBIGxhYmVsIHRoYXQgZGVzY3JpYmVzIHRoZSBhY3Rpb24gYmVpbmcgcGVyZm9ybWVkXCIpLFxuICAgICAgY29kZTogelxuICAgICAgICAuc3RyaW5nKClcbiAgICAgICAgLmRlc2NyaWJlKFxuICAgICAgICAgIFwiSmF2YVNjcmlwdCBhc3luYyBmdW5jdGlvbiBib2R5LiBgY3R4YCBpcyBpbiBzY29wZS4gTXVzdCB1c2UgYHJldHVybmAgdG8gcHJvZHVjZSBvdXRwdXQuXCJcbiAgICAgICAgKSxcbiAgICB9KSxcbiAgfSksXG59IHNhdGlzZmllcyBUb29sU2V0O1xuXG5leHBvcnQgdHlwZSBCdWlsdEluVG9vbE5hbWUgPSBrZXlvZiB0eXBlb2YgYnVpbHRJblRvb2xzO1xuZXhwb3J0IGNvbnN0IGJ1aWx0aW5Ub29sTmFtZXMgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gIE9iamVjdC5lbnRyaWVzKGJ1aWx0SW5Ub29scykubWFwKChbbmFtZV0pID0+IFtuYW1lLCBuYW1lXSlcbikgYXMgeyBbSyBpbiBCdWlsdEluVG9vbE5hbWVdOiBLIH07XG5cbmNvbnN0IFNLSUxMX01EX1NVRkZJWCA9IC9cXC8/U0tJTExcXC5tZCQvO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VG9vbHMoe1xuICBhZ2VudCxcbiAgc2FuZGJveCxcbiAgc2tpbGxzUmVmLFxuICB3cml0ZXIsXG4gIGFib3J0Q29udHJvbGxlcixcbiAgbmV4dFBhcnRJbmRleFJlZixcbiAgYXNzaXN0YW50TWVzc2FnZUlkLFxuICBzZXNzaW9uSWQsXG4gIHN0ZXBMb2csXG4gIGNvbnRleHQsXG4gIHN0YXRlLFxuICBtZXNzYWdlcyxcbiAgYWN0aXZlVG9vbHMsXG59OiB7XG4gIGFnZW50OiBBbnlBZ2VudDtcbiAgc2FuZGJveDogU2FuZGJveEluc3RhbmNlO1xuICBza2lsbHNSZWY6IHsgY3VycmVudDogU2tpbGxTdW1tYXJ5W10gfTtcbiAgd3JpdGVyOiBTdHJlYW1Xcml0ZXI7XG4gIGFib3J0Q29udHJvbGxlcjogQWJvcnRDb250cm9sbGVyO1xuICBuZXh0UGFydEluZGV4UmVmOiB7IGN1cnJlbnQ6IG51bWJlciB9O1xuICBhc3Npc3RhbnRNZXNzYWdlSWQ6IHN0cmluZztcbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHN0ZXBMb2c6IExvZ2dlcjtcbiAgY29udGV4dDogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIHN0YXRlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgbWVzc2FnZXM6IFVJTWVzc2FnZVtdO1xuICBhY3RpdmVUb29scz86IHN0cmluZ1tdO1xufSk6IHtcbiAgcmF3VG9vbHM6IFRvb2xTZXQ7XG4gIHRvb2xzV2l0aE5lZWRzQXBwcm92YWw6IFRvb2xTZXQ7XG4gIHRvb2xDb250ZXh0OiBUb29sQ29udGV4dDtcbn0ge1xuICBjb25zdCByYXdUb29sczogVG9vbFNldCA9IHtcbiAgICBbYnVpbHRpblRvb2xOYW1lcy5SZWFkXTogdG9vbCh7XG4gICAgICAuLi5idWlsdEluVG9vbHMuUmVhZCxcbiAgICAgIGV4ZWN1dGU6IGFzeW5jICh7IHBhdGgsIHN0YXJ0TGluZSwgZW5kTGluZSB9KSA9PiB7XG4gICAgICAgIGNvbnN0IGZpbGVQYXRoID0gcGF0aDtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzYW5kYm94LnJlYWRGaWxlKHsgcGF0aDogZmlsZVBhdGggfSk7XG5cbiAgICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgbG9nLmVycm9yKFwiUmVhZCBmYWlsZWRcIiwgeyBlcnJvcjogcmVzdWx0Lm1lc3NhZ2UgfSk7XG4gICAgICAgICAgdGhyb3cgcmVzdWx0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBgRXJyb3I6IEZpbGUgbm90IGZvdW5kIC0gJHtmaWxlUGF0aH1gLFxuICAgICAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICAgICAgdG90YWxMaW5lczogMCxcbiAgICAgICAgICAgICAgbGluZXNTaG93bjogMCxcbiAgICAgICAgICAgICAgc3RhcnRMaW5lOiAwLFxuICAgICAgICAgICAgICBlbmRMaW5lOiAwLFxuICAgICAgICAgICAgICBpc1BhZ2luYXRlZDogZmFsc2UsXG4gICAgICAgICAgICAgIGZpbGVTaXplOiBcIjBcIixcbiAgICAgICAgICAgICAgcGF0aDogZmlsZVBhdGgsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmdWxsQ29udGVudCA9IHJlc3VsdC50b1N0cmluZyhcInV0Zi04XCIpO1xuICAgICAgICBjb25zdCBsaW5lcyA9IGZ1bGxDb250ZW50LnNwbGl0KFwiXFxuXCIpO1xuICAgICAgICAvLyBBIHRyYWlsaW5nIG5ld2xpbmUgcHJvZHVjZXMgYW4gZW1wdHkgbGFzdCBlbGVtZW50IFx1MjAxNCByZW1vdmUgaXRcbiAgICAgICAgLy8gc28gbGluZSBjb3VudCBtYXRjaGVzIGB3YyAtbGAgLyBgYXdrICdFTkR7cHJpbnQgTlJ9J2AgYmVoYXZpb3IuXG4gICAgICAgIGlmIChsaW5lcy5sZW5ndGggPiAwICYmIGxpbmVzLmF0KC0xKSA9PT0gXCJcIikge1xuICAgICAgICAgIGxpbmVzLnBvcCgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRvdGFsTGluZXMgPSBsaW5lcy5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGZpbGVCeXRlcyA9IEJ1ZmZlci5ieXRlTGVuZ3RoKGZ1bGxDb250ZW50KTtcbiAgICAgICAgY29uc3QgZmlsZVNpemUgPSBmb3JtYXRGaWxlU2l6ZShmaWxlQnl0ZXMpO1xuXG4gICAgICAgIC8vIERldGVybWluZSByYW5nZVxuICAgICAgICBjb25zdCBQQUdFX1NJWkUgPSAxMDA7XG4gICAgICAgIGxldCBhY3R1YWxTdGFydDogbnVtYmVyO1xuICAgICAgICBsZXQgYWN0dWFsRW5kOiBudW1iZXI7XG5cbiAgICAgICAgaWYgKHN0YXJ0TGluZSAhPT0gdW5kZWZpbmVkICYmIGVuZExpbmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGFjdHVhbFN0YXJ0ID0gc3RhcnRMaW5lO1xuICAgICAgICAgIGFjdHVhbEVuZCA9IGVuZExpbmU7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhcnRMaW5lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBhY3R1YWxTdGFydCA9IHN0YXJ0TGluZTtcbiAgICAgICAgICBhY3R1YWxFbmQgPSBNYXRoLm1pbihzdGFydExpbmUgKyBQQUdFX1NJWkUgLSAxLCB0b3RhbExpbmVzKTtcbiAgICAgICAgfSBlbHNlIGlmIChlbmRMaW5lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBhY3R1YWxTdGFydCA9IDE7XG4gICAgICAgICAgYWN0dWFsRW5kID0gZW5kTGluZTtcbiAgICAgICAgfSBlbHNlIGlmICh0b3RhbExpbmVzID4gMjAwKSB7XG4gICAgICAgICAgYWN0dWFsU3RhcnQgPSAxO1xuICAgICAgICAgIGFjdHVhbEVuZCA9IFBBR0VfU0laRTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhY3R1YWxTdGFydCA9IDE7XG4gICAgICAgICAgYWN0dWFsRW5kID0gdG90YWxMaW5lcztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEV4dHJhY3QgdGhlIGxpbmUgcmFuZ2UgKDEtaW5kZXhlZClcbiAgICAgICAgY29uc3Qgc2xpY2VkTGluZXMgPSBsaW5lcy5zbGljZShhY3R1YWxTdGFydCAtIDEsIGFjdHVhbEVuZCk7XG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSBzbGljZWRMaW5lcy5qb2luKFwiXFxuXCIpO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICAgIHRvdGFsTGluZXMsXG4gICAgICAgICAgICBsaW5lc1Nob3duOiBNYXRoLm1heCgwLCBhY3R1YWxFbmQgLSBhY3R1YWxTdGFydCArIDEpLFxuICAgICAgICAgICAgc3RhcnRMaW5lOiBhY3R1YWxTdGFydCxcbiAgICAgICAgICAgIGVuZExpbmU6IGFjdHVhbEVuZCxcbiAgICAgICAgICAgIGlzUGFnaW5hdGVkOiBhY3R1YWxFbmQgPCB0b3RhbExpbmVzLFxuICAgICAgICAgICAgZmlsZVNpemUsXG4gICAgICAgICAgICBwYXRoOiBmaWxlUGF0aCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNvbnRlbnQsXG4gICAgICAgIH07XG4gICAgICB9LFxuICAgIH0pLFxuICAgIFtidWlsdGluVG9vbE5hbWVzLkdyZXBdOiB0b29sKHtcbiAgICAgIC4uLmJ1aWx0SW5Ub29scy5HcmVwLFxuICAgICAgZXhlY3V0ZTogYXN5bmMgKHtcbiAgICAgICAgcGF0dGVybixcbiAgICAgICAgcGF0aCxcbiAgICAgICAgZmlsZVR5cGUsXG4gICAgICAgIGdsb2IsXG4gICAgICAgIGNhc2VTZW5zaXRpdmUsXG4gICAgICAgIGNvbnRleHRMaW5lcyxcbiAgICAgICAgbWF4Q291bnQsXG4gICAgICAgIGZpbGVzV2l0aE1hdGNoZXMsXG4gICAgICB9KSA9PiB7XG4gICAgICAgIGNvbnN0IHNlYXJjaFBhdGggPSBwYXRoID8/IFwiLlwiO1xuXG4gICAgICAgIGNvbnN0IGFyZ3M6IHN0cmluZ1tdID0gW107XG5cbiAgICAgICAgYXJncy5wdXNoKFwiLS1saW5lLW51bWJlclwiKTtcbiAgICAgICAgYXJncy5wdXNoKFwiLS1oZWFkaW5nXCIpO1xuICAgICAgICBhcmdzLnB1c2goXCItLWNvbG9yXCIsIFwibmV2ZXJcIik7XG5cbiAgICAgICAgaWYgKCFjYXNlU2Vuc2l0aXZlKSB7XG4gICAgICAgICAgYXJncy5wdXNoKFwiLWlcIik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmlsZVR5cGUpIHtcbiAgICAgICAgICBhcmdzLnB1c2goXCItLXR5cGVcIiwgZmlsZVR5cGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGdsb2IpIHtcbiAgICAgICAgICBhcmdzLnB1c2goXCItLWdsb2JcIiwgZ2xvYik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29udGV4dExpbmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBhcmdzLnB1c2goXCItQ1wiLCBTdHJpbmcoY29udGV4dExpbmVzKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobWF4Q291bnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGFyZ3MucHVzaChcIi0tbWF4LWNvdW50XCIsIFN0cmluZyhtYXhDb3VudCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpbGVzV2l0aE1hdGNoZXMpIHtcbiAgICAgICAgICBhcmdzLnB1c2goXCItLWZpbGVzLXdpdGgtbWF0Y2hlc1wiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFyZ3MucHVzaChcIi0tXCIsIHBhdHRlcm4sIHNlYXJjaFBhdGgpO1xuXG4gICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCBzYW5kYm94LmV4ZWMoeyBjb21tYW5kOiBcInJnXCIsIGFyZ3MgfSk7XG5cbiAgICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIEVycm9yICYmIGlzUmdOb3RGb3VuZEVycm9yKHJlc3VsdCkpIHtcbiAgICAgICAgICBsb2cud2FybihcInJnIG5vdCBmb3VuZCwgaW5zdGFsbGluZyByaXBncmVwXCIpO1xuICAgICAgICAgIGNvbnN0IGluc3RhbGxSZXN1bHQgPSBhd2FpdCBzYW5kYm94LmV4ZWMoe1xuICAgICAgICAgICAgY29tbWFuZDogXCJiYXNoXCIsXG4gICAgICAgICAgICBhcmdzOiBbXG4gICAgICAgICAgICAgIFwiLWNcIixcbiAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiY29tbWFuZCAtdiByZyA+L2Rldi9udWxsIDI+JjEgJiYgZXhpdCAwXCIsXG4gICAgICAgICAgICAgICAgXCJkbmYgaW5zdGFsbCAteSByaXBncmVwIDI+L2Rldi9udWxsICYmIGV4aXQgMFwiLFxuICAgICAgICAgICAgICAgIFwiKGFwdC1nZXQgdXBkYXRlIC1xcSAmJiBhcHQtZ2V0IGluc3RhbGwgLXkgLXFxIHJpcGdyZXApIDI+L2Rldi9udWxsICYmIGV4aXQgMFwiLFxuICAgICAgICAgICAgICAgIFwiYXBrIGFkZCAtLW5vLWNhY2hlIHJpcGdyZXAgMj4vZGV2L251bGwgJiYgZXhpdCAwXCIsXG4gICAgICAgICAgICAgICAgXCJjdXJsIC1zTCBodHRwczovL2dpdGh1Yi5jb20vQnVybnRTdXNoaS9yaXBncmVwL3JlbGVhc2VzL2Rvd25sb2FkLzE0LjEuMS9yaXBncmVwLTE0LjEuMS14ODZfNjQtdW5rbm93bi1saW51eC1tdXNsLnRhci5neiB8IHRhciB4eiAtQyAvdG1wICYmIGluc3RhbGwgL3RtcC9yaXBncmVwLTE0LjEuMS14ODZfNjQtdW5rbm93bi1saW51eC1tdXNsL3JnIC91c3IvbG9jYWwvYmluL3JnICYmIHJtIC1yZiAvdG1wL3JpcGdyZXAtMTQuMS4xLXg4Nl82NC11bmtub3duLWxpbnV4LW11c2xcIixcbiAgICAgICAgICAgICAgXS5qb2luKFwiXFxuXCIpLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIHN1ZG86IHRydWUsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKCEoaW5zdGFsbFJlc3VsdCBpbnN0YW5jZW9mIEVycm9yKSkge1xuICAgICAgICAgICAgY29uc3QgaW5zdGFsbE91dHB1dCA9IGF3YWl0IGluc3RhbGxSZXN1bHQucmVzdWx0O1xuICAgICAgICAgICAgaWYgKGluc3RhbGxPdXRwdXQuZXhpdENvZGUgIT09IDApIHtcbiAgICAgICAgICAgICAgbG9nLndhcm4oXCJyaXBncmVwIGluc3RhbGwgZmFpbGVkXCIsIHtcbiAgICAgICAgICAgICAgICBzdGRlcnI6IGluc3RhbGxPdXRwdXQuc3RkZXJyLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmVzdWx0ID0gYXdhaXQgc2FuZGJveC5leGVjKHsgY29tbWFuZDogXCJyZ1wiLCBhcmdzIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIEVycm9yICYmIGlzUmdOb3RGb3VuZEVycm9yKHJlc3VsdCkpIHtcbiAgICAgICAgICBsb2cud2FybihcInJnIHVuYXZhaWxhYmxlLCBmYWxsaW5nIGJhY2sgdG8gZ3JlcFwiKTtcbiAgICAgICAgICBjb25zdCBncmVwQXJncyA9IFtcIi1yblwiLCBcIi0tY29sb3I9bmV2ZXJcIl07XG4gICAgICAgICAgaWYgKCFjYXNlU2Vuc2l0aXZlKSB7XG4gICAgICAgICAgICBncmVwQXJncy5wdXNoKFwiLWlcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChjb250ZXh0TGluZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZ3JlcEFyZ3MucHVzaChcIi1DXCIsIFN0cmluZyhjb250ZXh0TGluZXMpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG1heENvdW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGdyZXBBcmdzLnB1c2goXCItbVwiLCBTdHJpbmcobWF4Q291bnQpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGZpbGVzV2l0aE1hdGNoZXMpIHtcbiAgICAgICAgICAgIGdyZXBBcmdzLnB1c2goXCItbFwiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGdsb2IpIHtcbiAgICAgICAgICAgIGdyZXBBcmdzLnB1c2goYC0taW5jbHVkZT0ke2dsb2J9YCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChmaWxlVHlwZSkge1xuICAgICAgICAgICAgY29uc3QgaW5jbHVkZU1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+ID0ge1xuICAgICAgICAgICAgICB0czogW1wiKi50c1wiLCBcIioudHN4XCIsIFwiKi5tdHNcIiwgXCIqLmN0c1wiXSxcbiAgICAgICAgICAgICAganM6IFtcIiouanNcIiwgXCIqLmpzeFwiLCBcIioubWpzXCIsIFwiKi5janNcIl0sXG4gICAgICAgICAgICAgIHB5OiBbXCIqLnB5XCJdLFxuICAgICAgICAgICAgICBydXN0OiBbXCIqLnJzXCJdLFxuICAgICAgICAgICAgICBnbzogW1wiKi5nb1wiXSxcbiAgICAgICAgICAgICAgamF2YTogW1wiKi5qYXZhXCJdLFxuICAgICAgICAgICAgICBtZDogW1wiKi5tZFwiXSxcbiAgICAgICAgICAgICAganNvbjogW1wiKi5qc29uXCJdLFxuICAgICAgICAgICAgICBjc3M6IFtcIiouY3NzXCJdLFxuICAgICAgICAgICAgICBodG1sOiBbXCIqLmh0bWxcIl0sXG4gICAgICAgICAgICAgIHlhbWw6IFtcIioueW1sXCIsIFwiKi55YW1sXCJdLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZXh0IG9mIGluY2x1ZGVNYXBbZmlsZVR5cGVdID8/IFtgKi4ke2ZpbGVUeXBlfWBdKSB7XG4gICAgICAgICAgICAgIGdyZXBBcmdzLnB1c2goYC0taW5jbHVkZT0ke2V4dH1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZ3JlcEFyZ3MucHVzaChcIi0tXCIsIHBhdHRlcm4sIHNlYXJjaFBhdGgpO1xuICAgICAgICAgIHJlc3VsdCA9IGF3YWl0IHNhbmRib3guZXhlYyh7XG4gICAgICAgICAgICBjb21tYW5kOiBcImdyZXBcIixcbiAgICAgICAgICAgIGFyZ3M6IGdyZXBBcmdzLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgbG9nLmVycm9yKFwiR3JlcCBmYWlsZWRcIiwgeyBlcnJvcjogcmVzdWx0Lm1lc3NhZ2UgfSk7XG4gICAgICAgICAgdGhyb3cgcmVzdWx0O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgeyBzdGRvdXQsIHN0ZGVyciB9ID0gYXdhaXQgcmVzdWx0LnJlc3VsdDtcblxuICAgICAgICBpZiAoc3RkZXJyICYmICFzdGRlcnIudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhcIm5vIG1hdGNoZXNcIikpIHtcbiAgICAgICAgICBsb2cud2FybihcIkdyZXAgc3RkZXJyXCIsIHsgc3RkZXJyIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVHJ1bmNhdGUgb3V0cHV0IHRvIHByZXZlbnQgXCJpbnB1dCB0b28gbG9uZ1wiIGVycm9ycyAoNTBrIGNoYXJzIFx1MjI0OCAxMi41ayB0b2tlbnMpXG4gICAgICAgIGNvbnN0IE1BWF9HUkVQX09VVFBVVF9DSEFSUyA9IDUwXzAwMDtcbiAgICAgICAgbGV0IGZpbmFsT3V0cHV0ID0gc3Rkb3V0O1xuICAgICAgICBsZXQgd2FzVHJ1bmNhdGVkID0gZmFsc2U7XG4gICAgICAgIGlmIChmaW5hbE91dHB1dC5sZW5ndGggPiBNQVhfR1JFUF9PVVRQVVRfQ0hBUlMpIHtcbiAgICAgICAgICBmaW5hbE91dHB1dCA9XG4gICAgICAgICAgICBmaW5hbE91dHB1dC5zbGljZSgwLCBNQVhfR1JFUF9PVVRQVVRfQ0hBUlMpICtcbiAgICAgICAgICAgIFwiXFxuXFxuW091dHB1dCB0cnVuY2F0ZWQgLSB1c2UgbW9yZSBzcGVjaWZpYyBwYXR0ZXJuIG9yIHBhdGhdXCI7XG4gICAgICAgICAgd2FzVHJ1bmNhdGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGxpbmVzID0gZmluYWxPdXRwdXRcbiAgICAgICAgICAudHJpbSgpXG4gICAgICAgICAgLnNwbGl0KFwiXFxuXCIpXG4gICAgICAgICAgLmZpbHRlcigobCkgPT4gbC5sZW5ndGggPiAwKTtcbiAgICAgICAgY29uc3QgZmlsZUNvdW50ID0gZmlsZXNXaXRoTWF0Y2hlc1xuICAgICAgICAgID8gbGluZXMubGVuZ3RoXG4gICAgICAgICAgOiBuZXcgU2V0KFxuICAgICAgICAgICAgICBsaW5lc1xuICAgICAgICAgICAgICAgIC5maWx0ZXIoKGwpID0+ICFsLnN0YXJ0c1dpdGgoXCIgXCIpICYmIGwuaW5jbHVkZXMoXCI6XCIpKVxuICAgICAgICAgICAgICAgIC5tYXAoKGwpID0+IGwuc3BsaXQoXCI6XCIpWzBdKVxuICAgICAgICAgICAgKS5zaXplO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc3VtbWFyeToge1xuICAgICAgICAgICAgbWF0Y2hDb3VudDogZmlsZXNXaXRoTWF0Y2hlc1xuICAgICAgICAgICAgICA/IDBcbiAgICAgICAgICAgICAgOiBsaW5lcy5maWx0ZXIoKGwpID0+IGwuaW5jbHVkZXMoXCI6XCIpKS5sZW5ndGgsXG4gICAgICAgICAgICBmaWxlQ291bnQsXG4gICAgICAgICAgICBzZWFyY2hQYXRoLFxuICAgICAgICAgICAgcGF0dGVybixcbiAgICAgICAgICAgIHdhc1RydW5jYXRlZCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIG1hdGNoZXM6IGZpbmFsT3V0cHV0IHx8IFwiKG5vIG1hdGNoZXMgZm91bmQpXCIsXG4gICAgICAgIH07XG4gICAgICB9LFxuICAgIH0pLFxuICAgIFtidWlsdGluVG9vbE5hbWVzLkxpc3RdOiB0b29sKHtcbiAgICAgIC4uLmJ1aWx0SW5Ub29scy5MaXN0LFxuICAgICAgZXhlY3V0ZTogYXN5bmMgKHsgcGF0aCwgZGVwdGgsIGluY2x1ZGVIaWRkZW4sIGZpbGVzT25seSwgcGF0dGVybiB9KSA9PiB7XG4gICAgICAgIGNvbnN0IHNlYXJjaFBhdGggPSBwYXRoID8/IFwiLlwiO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNhbmRib3guZXhlYyh7XG4gICAgICAgICAgY29tbWFuZDogXCJiYXNoXCIsXG4gICAgICAgICAgYXJnczogW1xuICAgICAgICAgICAgXCItY1wiLFxuICAgICAgICAgICAgYFxuICAgICAgICAgICAgc2V0IC1lXG4gICAgICAgICAgICBTRUFSQ0hfUEFUSD1cIiQxXCJcbiAgICAgICAgICAgIERFUFRIPVwiJDJcIlxuICAgICAgICAgICAgSU5DTFVERV9ISURERU49XCIkM1wiXG4gICAgICAgICAgICBGSUxFU19PTkxZPVwiJDRcIlxuICAgICAgICAgICAgUEFUVEVSTj1cIiQ1XCJcblxuICAgICAgICAgICAgIyBCdWlsZCBmaW5kIGNvbW1hbmQgYXJndW1lbnRzXG4gICAgICAgICAgICBGSU5EX0FSR1M9XCJcIlxuICAgICAgICAgICAgWyAtbiBcIiRERVBUSFwiIF0gJiYgRklORF9BUkdTPVwiJEZJTkRfQVJHUyAtbWF4ZGVwdGggJERFUFRIXCJcbiAgICAgICAgICAgIFsgXCIkSU5DTFVERV9ISURERU5cIiAhPSBcInRydWVcIiBdICYmIEZJTkRfQVJHUz1cIiRGSU5EX0FSR1MgISAtcGF0aCAnKi8uKidcIlxuICAgICAgICAgICAgWyBcIiRGSUxFU19PTkxZXCIgPSBcInRydWVcIiBdICYmIEZJTkRfQVJHUz1cIiRGSU5EX0FSR1MgLXR5cGUgZlwiXG4gICAgICAgICAgICBbIC1uIFwiJFBBVFRFUk5cIiBdICYmIEZJTkRfQVJHUz1cIiRGSU5EX0FSR1MgLW5hbWUgJyRQQVRURVJOJ1wiXG5cbiAgICAgICAgICAgICMgR2V0IGxpc3RpbmdcbiAgICAgICAgICAgIExJU1RJTkc9JChldmFsIFwiZmluZCAnJFNFQVJDSF9QQVRIJyAkRklORF9BUkdTXCIgMj4vZGV2L251bGwgfCBzb3J0KVxuXG4gICAgICAgICAgICAjIEdldCBjb3VudHNcbiAgICAgICAgICAgIENPVU5UX0FSR1M9XCJcIlxuICAgICAgICAgICAgWyAtbiBcIiRERVBUSFwiIF0gJiYgQ09VTlRfQVJHUz1cIiRDT1VOVF9BUkdTIC1tYXhkZXB0aCAkREVQVEhcIlxuICAgICAgICAgICAgWyBcIiRJTkNMVURFX0hJRERFTlwiICE9IFwidHJ1ZVwiIF0gJiYgQ09VTlRfQVJHUz1cIiRDT1VOVF9BUkdTICEgLXBhdGggJyovLionXCJcblxuICAgICAgICAgICAgRklMRV9DT1VOVD0kKGV2YWwgXCJmaW5kICckU0VBUkNIX1BBVEgnICRDT1VOVF9BUkdTIC10eXBlIGZcIiAyPi9kZXYvbnVsbCB8IHdjIC1sKVxuICAgICAgICAgICAgRElSX0NPVU5UPSQoZXZhbCBcImZpbmQgJyRTRUFSQ0hfUEFUSCcgJENPVU5UX0FSR1MgLXR5cGUgZFwiIDI+L2Rldi9udWxsIHwgd2MgLWwpXG5cbiAgICAgICAgICAgICMgT3V0cHV0OiBjb3VudHMgZmlyc3QsIHRoZW4gbGlzdGluZ1xuICAgICAgICAgICAgZWNobyBcIiRGSUxFX0NPVU5UfCRESVJfQ09VTlRcIlxuICAgICAgICAgICAgZWNobyBcInx8fExJU1RJTkd8fHxcIlxuICAgICAgICAgICAgZWNobyBcIiRMSVNUSU5HXCIgfCBzZWQgXCJzfF4kU0VBUkNIX1BBVEh8LnxcIlxuICAgICAgICAgIGAsXG4gICAgICAgICAgICBcIi0tXCIsXG4gICAgICAgICAgICBzZWFyY2hQYXRoLFxuICAgICAgICAgICAgZGVwdGg/LnRvU3RyaW5nKCkgfHwgXCJcIixcbiAgICAgICAgICAgIGluY2x1ZGVIaWRkZW4gPyBcInRydWVcIiA6IFwiZmFsc2VcIixcbiAgICAgICAgICAgIGZpbGVzT25seSA/IFwidHJ1ZVwiIDogXCJmYWxzZVwiLFxuICAgICAgICAgICAgcGF0dGVybiB8fCBcIlwiLFxuICAgICAgICAgIF0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgIGxvZy5lcnJvcihcIkxpc3QgZmFpbGVkXCIsIHsgZXJyb3I6IHJlc3VsdC5tZXNzYWdlIH0pO1xuICAgICAgICAgIHRocm93IHJlc3VsdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHsgc3Rkb3V0LCBzdGRlcnIgfSA9IGF3YWl0IHJlc3VsdC5yZXN1bHQ7XG5cbiAgICAgICAgaWYgKHN0ZGVycikge1xuICAgICAgICAgIGxvZy53YXJuKFwiTGlzdCBzdGRlcnJcIiwgeyBzdGRlcnIgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBbY291bnRzTGluZSwgLi4ucmVzdF0gPSBzdGRvdXQuc3BsaXQoXCJ8fHxMSVNUSU5HfHx8XCIpO1xuICAgICAgICBjb25zdCBsaXN0aW5nID0gcmVzdC5qb2luKFwifHx8TElTVElOR3x8fFwiKS50cmltKCk7XG4gICAgICAgIGNvbnN0IFtmaWxlQ291bnRTdHIsIGRpckNvdW50U3RyXSA9IGNvdW50c0xpbmUudHJpbSgpLnNwbGl0KFwifFwiKTtcblxuICAgICAgICBjb25zdCB0b3RhbEZpbGVzID0gTnVtYmVyLnBhcnNlSW50KGZpbGVDb3VudFN0ciwgMTApIHx8IDA7XG4gICAgICAgIGNvbnN0IHRvdGFsRGlycyA9IE51bWJlci5wYXJzZUludChkaXJDb3VudFN0ciwgMTApIHx8IDA7XG4gICAgICAgIGNvbnN0IGxpbmVzID0gbGlzdGluZy5zcGxpdChcIlxcblwiKS5maWx0ZXIoKGwpID0+IGwubGVuZ3RoID4gMCk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzdW1tYXJ5OiB7XG4gICAgICAgICAgICB0b3RhbEl0ZW1zOiBsaW5lcy5sZW5ndGgsXG4gICAgICAgICAgICB0b3RhbEZpbGVzLFxuICAgICAgICAgICAgdG90YWxEaXJzLFxuICAgICAgICAgICAgc2VhcmNoUGF0aCxcbiAgICAgICAgICAgIGRlcHRoLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbGlzdGluZyxcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgfSksXG4gICAgW2J1aWx0aW5Ub29sTmFtZXMuV3JpdGVdOiB0b29sKHtcbiAgICAgIC4uLmJ1aWx0SW5Ub29scy5Xcml0ZSxcbiAgICAgIGV4ZWN1dGU6IGFzeW5jICh7IHBhdGgsIGNvbnRlbnQgfSkgPT4ge1xuICAgICAgICBjb25zdCBmaWxlUGF0aCA9IHBhdGg7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBzYW5kYm94LndyaXRlRmlsZXMoe1xuICAgICAgICAgICAgZmlsZXM6IFt7IHBhdGg6IGZpbGVQYXRoLCBjb250ZW50IH1dLFxuICAgICAgICAgICAgZGVzdFBhdGg6IFwiLlwiLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgICAgICBwYXRoOiBmaWxlUGF0aCxcbiAgICAgICAgICAgIGJ5dGVzV3JpdHRlbjogQnVmZmVyLmJ5dGVMZW5ndGgoY29udGVudCwgXCJ1dGY4XCIpLFxuICAgICAgICAgIH07XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGNvbnN0IGVycm9yTXNnID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgIHBhdGg6IGZpbGVQYXRoLFxuICAgICAgICAgICAgYnl0ZXNXcml0dGVuOiAwLFxuICAgICAgICAgICAgZXJyb3I6IGVycm9yTXNnLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfSksXG4gICAgW2J1aWx0aW5Ub29sTmFtZXMuRWRpdF06IHRvb2woe1xuICAgICAgLi4uYnVpbHRJblRvb2xzLkVkaXQsXG4gICAgICBleGVjdXRlOiBhc3luYyAoeyBwYXRoLCBvbGRfc3RyaW5nLCBuZXdfc3RyaW5nIH0pID0+IHtcbiAgICAgICAgY29uc3QgZmlsZVBhdGggPSBwYXRoO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNhbmRib3gucmVhZEZpbGUoeyBwYXRoOiBmaWxlUGF0aCB9KTtcblxuICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4geyBzdWNjZXNzOiBmYWxzZSwgcGF0aDogZmlsZVBhdGgsIGVycm9yOiByZXN1bHQubWVzc2FnZSB9O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgIHBhdGg6IGZpbGVQYXRoLFxuICAgICAgICAgICAgZXJyb3I6IGBGaWxlIG5vdCBmb3VuZDogJHtmaWxlUGF0aH1gLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjb250ZW50ID0gcmVzdWx0LnRvU3RyaW5nKFwidXRmLThcIik7XG4gICAgICAgIGNvbnN0IG9jY3VycmVuY2VzID0gY29udGVudC5zcGxpdChvbGRfc3RyaW5nKS5sZW5ndGggLSAxO1xuXG4gICAgICAgIGlmIChvY2N1cnJlbmNlcyA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgIHBhdGg6IGZpbGVQYXRoLFxuICAgICAgICAgICAgZXJyb3I6IFwib2xkX3N0cmluZyBub3QgZm91bmQgaW4gZmlsZVwiLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob2NjdXJyZW5jZXMgPiAxKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgcGF0aDogZmlsZVBhdGgsXG4gICAgICAgICAgICBlcnJvcjogYG9sZF9zdHJpbmcgYXBwZWFycyAke29jY3VycmVuY2VzfSB0aW1lcyBpbiBmaWxlIChtdXN0IGJlIHVuaXF1ZSkuIEluY2x1ZGUgbW9yZSBzdXJyb3VuZGluZyBjb250ZXh0IHRvIG1ha2UgdGhlIG1hdGNoIHVuaXF1ZS5gLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBuZXdDb250ZW50ID0gY29udGVudC5yZXBsYWNlKG9sZF9zdHJpbmcsIG5ld19zdHJpbmcpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgc2FuZGJveC53cml0ZUZpbGVzKHtcbiAgICAgICAgICAgIGZpbGVzOiBbeyBwYXRoOiBmaWxlUGF0aCwgY29udGVudDogbmV3Q29udGVudCB9XSxcbiAgICAgICAgICAgIGRlc3RQYXRoOiBcIi5cIixcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHJldHVybiB7IHN1Y2Nlc3M6IHRydWUsIHBhdGg6IGZpbGVQYXRoIH07XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGNvbnN0IGVycm9yTXNnID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpO1xuICAgICAgICAgIHJldHVybiB7IHN1Y2Nlc3M6IGZhbHNlLCBwYXRoOiBmaWxlUGF0aCwgZXJyb3I6IGVycm9yTXNnIH07XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfSksXG4gICAgW2J1aWx0aW5Ub29sTmFtZXMuQmFzaF06IHRvb2woe1xuICAgICAgLi4uYnVpbHRJblRvb2xzLkJhc2gsXG4gICAgICBleGVjdXRlOiBhc3luYyAoeyBjb21tYW5kLCB3YWl0VW50aWwgfSkgPT4ge1xuICAgICAgICBjb25zdCB7IGNyZWF0ZVByb2Nlc3NNYW5hZ2VyIH0gPSBhd2FpdCBpbXBvcnQoXG4gICAgICAgICAgXCIuLi9zYW5kYm94L3Byb2Nlc3MtbWFuYWdlclwiXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgcHJvY2Vzc01hbmFnZXIgPSBjcmVhdGVQcm9jZXNzTWFuYWdlcih7IHNhbmRib3ggfSk7XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcHJvY2Vzc01hbmFnZXIucnVuKHsgY29tbWFuZCwgd2FpdFVudGlsIH0pO1xuXG4gICAgICAgIGNvbnN0IE1BWF9TVERPVVQgPSA1MF8wMDA7XG4gICAgICAgIGNvbnN0IE1BWF9TVERFUlIgPSAxMF8wMDA7XG5cbiAgICAgICAgbGV0IHsgc3Rkb3V0LCBzdGRlcnIgfSA9IHJlc3VsdDtcbiAgICAgICAgaWYgKHN0ZG91dC5sZW5ndGggPiBNQVhfU1RET1VUKSB7XG4gICAgICAgICAgc3Rkb3V0ID1cbiAgICAgICAgICAgIGBbdHJ1bmNhdGVkIFx1MjAxNCBzaG93aW5nIGxhc3QgJHtNQVhfU1RET1VUfSBjaGFycy4gRnVsbDogJHtyZXN1bHQub3V0cHV0RGlyfS9zdGRvdXQudHh0XVxcblxcbmAgK1xuICAgICAgICAgICAgc3Rkb3V0LnNsaWNlKC1NQVhfU1RET1VUKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RkZXJyLmxlbmd0aCA+IE1BWF9TVERFUlIpIHtcbiAgICAgICAgICBzdGRlcnIgPVxuICAgICAgICAgICAgYFt0cnVuY2F0ZWQgXHUyMDE0IHNob3dpbmcgbGFzdCAke01BWF9TVERFUlJ9IGNoYXJzLiBGdWxsOiAke3Jlc3VsdC5vdXRwdXREaXJ9L3N0ZGVyci50eHRdXFxuXFxuYCArXG4gICAgICAgICAgICBzdGRlcnIuc2xpY2UoLU1BWF9TVERFUlIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHsgLi4ucmVzdWx0LCBzdGRvdXQsIHN0ZGVyciB9O1xuICAgICAgfSxcbiAgICB9KSxcbiAgfTtcblxuICAvLyBBZGQgdXNlci1kZWZpbmVkIHRvb2xzXG4gIGZvciAoY29uc3QgW25hbWUsIHRdIG9mIE9iamVjdC5lbnRyaWVzKGFnZW50Lm9wdGlvbnMudG9vbHMgPz8ge30pKSB7XG4gICAgcmF3VG9vbHNbbmFtZV0gPSB0IGFzIFRvb2xTZXRbc3RyaW5nXTtcbiAgfVxuXG4gIGlmIChza2lsbHNSZWYuY3VycmVudC5sZW5ndGggPiAwKSB7XG4gICAgcmF3VG9vbHNbYnVpbHRpblRvb2xOYW1lcy5Ta2lsbF0gPSB0b29sKHtcbiAgICAgIC4uLmJ1aWx0SW5Ub29scy5Ta2lsbCxcbiAgICAgIGV4ZWN1dGU6IGFzeW5jICh7IG5hbWUgfSkgPT4ge1xuICAgICAgICBjb25zdCBza2lsbHMgPSBza2lsbHNSZWYuY3VycmVudDtcbiAgICAgICAgY29uc3Qgc2tpbGwgPSBza2lsbHMuZmluZChcbiAgICAgICAgICAocykgPT4gcy5uYW1lLnRvTG93ZXJDYXNlKCkgPT09IG5hbWUudG9Mb3dlckNhc2UoKVxuICAgICAgICApO1xuICAgICAgICBpZiAoIXNraWxsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYFNraWxsIG5vdCBmb3VuZDogXCIke25hbWV9XCIuIEF2YWlsYWJsZTogJHtza2lsbHMubWFwKChzKSA9PiBzLm5hbWUpLmpvaW4oXCIsIFwiKX1gXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzYW5kYm94LnJlYWRGaWxlKHtcbiAgICAgICAgICBwYXRoOiBza2lsbC5za2lsbE1kUGF0aCxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgIHRocm93IHJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTa2lsbCBmaWxlIG5vdCBmb3VuZDogJHtza2lsbC5za2lsbE1kUGF0aH1gKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByYXcgPVxuICAgICAgICAgIHR5cGVvZiByZXN1bHQgPT09IFwic3RyaW5nXCIgPyByZXN1bHQgOiByZXN1bHQudG9TdHJpbmcoXCJ1dGYtOFwiKTtcbiAgICAgICAgY29uc3QgZW5kTWFya2VyID0gcmF3LmluZGV4T2YoXCItLS1cIiwgMyk7XG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPVxuICAgICAgICAgIGVuZE1hcmtlciA9PT0gLTEgPyByYXcgOiByYXcuc2xpY2UoZW5kTWFya2VyICsgMykudHJpbSgpO1xuICAgICAgICBjb25zdCBza2lsbERpciA9IHNraWxsLnNraWxsTWRQYXRoLnJlcGxhY2UoU0tJTExfTURfU1VGRklYLCBcIlwiKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBuYW1lOiBza2lsbC5uYW1lLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiBza2lsbC5kZXNjcmlwdGlvbixcbiAgICAgICAgICBjb250ZW50LFxuICAgICAgICAgIHBhdGg6IHNraWxsRGlyLFxuICAgICAgICB9O1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IG9uU3ViVG9vbENhbGw6IE9uU3ViVG9vbENhbGwgPSBhc3luYyAodG9vbE5hbWUsIHRvb2xJbnB1dCwgZXhlY3V0ZSkgPT4ge1xuICAgIGNvbnN0IG5lZWRzQXBwcm92YWwgPSBhd2FpdCBjaGVja05lZWRzQXBwcm92YWwoe1xuICAgICAgYWdlbnQsXG4gICAgICB0b29sTmFtZSxcbiAgICAgIGlucHV0OiB0b29sSW5wdXQsXG4gICAgICB0b29sQ2FsbElkOiBganNfJHt0b29sTmFtZX1fJHtEYXRlLm5vdygpfWAsXG4gICAgICBtZXNzYWdlczogW10sXG4gICAgfSk7XG5cbiAgICBpZiAoIW5lZWRzQXBwcm92YWwpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGV4ZWN1dGUoKTtcbiAgICAgICAgcmV0dXJuIHsgcmVzdWx0IH07XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBlcnJvcjogZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGFwcHJvdmFsSWQgPSBganNfYXBwcm92YWxfJHt1bGlkKCl9YDtcbiAgICBjb25zdCB0b29sQ2FsbElkID0gYGpzX3RjXyR7dWxpZCgpfWA7XG4gICAgY29uc3QgcGFydElkID0gYXBwcm92YWxQYXJ0SWQoYXBwcm92YWxJZCk7XG5cbiAgICBhd2FpdCBhZ2VudC5zdG9yYWdlLnBhcnQuc2V0KHBhcnRJZCwge1xuICAgICAgaWQ6IHBhcnRJZCxcbiAgICAgIGluZGV4OiBuZXh0UGFydEluZGV4UmVmLmN1cnJlbnQrKyxcbiAgICAgIG1lc3NhZ2VJZDogYXNzaXN0YW50TWVzc2FnZUlkLFxuICAgICAgc2Vzc2lvbklkLFxuICAgICAgcGFydDoge1xuICAgICAgICB0eXBlOiBgdG9vbC0ke3Rvb2xOYW1lfWAsXG4gICAgICAgIHRvb2xDYWxsSWQsXG4gICAgICAgIHN0YXRlOiBcImFwcHJvdmFsLXJlcXVlc3RlZFwiLFxuICAgICAgICBpbnB1dDogdG9vbElucHV0LFxuICAgICAgICBhcHByb3ZhbDogeyBpZDogYXBwcm92YWxJZCB9LFxuICAgICAgfSBhcyB1bmtub3duIGFzIFVJTWVzc2FnZVtcInBhcnRzXCJdW251bWJlcl0sXG4gICAgfSk7XG5cbiAgICB3cml0ZXIud3JpdGUoe1xuICAgICAgdHlwZTogXCJ0b29sLWlucHV0LXN0YXJ0XCIsXG4gICAgICB0b29sQ2FsbElkLFxuICAgICAgdG9vbE5hbWUsXG4gICAgfSk7XG4gICAgd3JpdGVyLndyaXRlKHtcbiAgICAgIHR5cGU6IFwidG9vbC1pbnB1dC1hdmFpbGFibGVcIixcbiAgICAgIHRvb2xDYWxsSWQsXG4gICAgICB0b29sTmFtZSxcbiAgICAgIGlucHV0OiB0b29sSW5wdXQsXG4gICAgfSk7XG4gICAgd3JpdGVyLndyaXRlKHtcbiAgICAgIHR5cGU6IFwidG9vbC1hcHByb3ZhbC1yZXF1ZXN0XCIsXG4gICAgICBhcHByb3ZhbElkLFxuICAgICAgdG9vbENhbGxJZCxcbiAgICB9KTtcblxuICAgIGNvbnN0IFBPTExfTVMgPSA1MDA7XG4gICAgY29uc3QgVElNRU9VVF9NUyA9IDUgKiA2MCAqIDEwMDA7XG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuXG4gICAgd2hpbGUgKERhdGUubm93KCkgLSBzdGFydCA8IFRJTUVPVVRfTVMgJiYgIWFib3J0Q29udHJvbGxlci5zaWduYWwuYWJvcnRlZCkge1xuICAgICAgY29uc3QgdXBkYXRlZCA9IGF3YWl0IGFnZW50LnN0b3JhZ2UucGFydC5nZXQocGFydElkKTtcbiAgICAgIGlmIChcbiAgICAgICAgdXBkYXRlZCAmJlxuICAgICAgICBcInN0YXRlXCIgaW4gdXBkYXRlZC5wYXJ0ICYmXG4gICAgICAgICgodXBkYXRlZC5wYXJ0IGFzIHsgc3RhdGU6IHN0cmluZyB9KS5zdGF0ZSA9PT0gXCJhcHByb3ZhbC1yZXNwb25kZWRcIiB8fFxuICAgICAgICAgICh1cGRhdGVkLnBhcnQgYXMgeyBzdGF0ZTogc3RyaW5nIH0pLnN0YXRlID09PSBcIm91dHB1dC1kZW5pZWRcIilcbiAgICAgICkge1xuICAgICAgICBjb25zdCBzdGF0ZSA9ICh1cGRhdGVkLnBhcnQgYXMgeyBzdGF0ZTogc3RyaW5nIH0pLnN0YXRlO1xuXG4gICAgICAgIGlmIChzdGF0ZSA9PT0gXCJvdXRwdXQtZGVuaWVkXCIpIHtcbiAgICAgICAgICBjb25zdCByZWFzb24gPSAodXBkYXRlZC5wYXJ0IGFzIHsgYXBwcm92YWw/OiB7IHJlYXNvbj86IHN0cmluZyB9IH0pXG4gICAgICAgICAgICAuYXBwcm92YWw/LnJlYXNvbjtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZXJyb3I6IGBUb29sIFwiJHt0b29sTmFtZX1cIiBkZW5pZWQ6ICR7cmVhc29uIHx8IFwidXNlciBkZW5pZWRcIn1gLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhcHByb3ZhbCA9IChcbiAgICAgICAgICB1cGRhdGVkLnBhcnQgYXMge1xuICAgICAgICAgICAgYXBwcm92YWw/OiB7IGFwcHJvdmVkOiBib29sZWFuOyByZWFzb24/OiBzdHJpbmcgfTtcbiAgICAgICAgICB9XG4gICAgICAgICkuYXBwcm92YWw7XG4gICAgICAgIGlmIChhcHByb3ZhbD8uYXBwcm92ZWQpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZXhlY3V0ZSgpO1xuICAgICAgICAgICAgd3JpdGVyLndyaXRlKHtcbiAgICAgICAgICAgICAgdHlwZTogXCJ0b29sLW91dHB1dC1hdmFpbGFibGVcIixcbiAgICAgICAgICAgICAgdG9vbENhbGxJZCxcbiAgICAgICAgICAgICAgb3V0cHV0OiByZXN1bHQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiB7IHJlc3VsdCB9O1xuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycik7XG4gICAgICAgICAgICB3cml0ZXIud3JpdGUoe1xuICAgICAgICAgICAgICB0eXBlOiBcInRvb2wtb3V0cHV0LWVycm9yXCIsXG4gICAgICAgICAgICAgIHRvb2xDYWxsSWQsXG4gICAgICAgICAgICAgIGVycm9yVGV4dDogZXJyb3IsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiB7IGVycm9yIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHdyaXRlci53cml0ZSh7XG4gICAgICAgICAgdHlwZTogXCJ0b29sLW91dHB1dC1kZW5pZWRcIixcbiAgICAgICAgICB0b29sQ2FsbElkLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBlcnJvcjogYFRvb2wgXCIke3Rvb2xOYW1lfVwiIGRlbmllZDogJHthcHByb3ZhbD8ucmVhc29uIHx8IFwidXNlciBkZW5pZWRcIn1gLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHIpID0+IHNldFRpbWVvdXQociwgUE9MTF9NUykpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBlcnJvcjogYWJvcnRDb250cm9sbGVyLnNpZ25hbC5hYm9ydGVkXG4gICAgICAgID8gXCJpbnRlcnJ1cHRlZFwiXG4gICAgICAgIDogXCJBcHByb3ZhbCB0aW1lZCBvdXRcIixcbiAgICB9O1xuICB9O1xuXG4gIGNvbnN0IHRvb2xDb250ZXh0OiBUb29sQ29udGV4dCA9IHtcbiAgICBjb250ZXh0LFxuICAgIHN0YXRlLFxuICAgIHNlc3Npb25JZCxcbiAgICBzYW5kYm94LFxuICAgIG1lc3NhZ2VzOiBtZXNzYWdlcyBhcyBUb29sQ29udGV4dFtcIm1lc3NhZ2VzXCJdLFxuICB9O1xuXG4gIHJhd1Rvb2xzW2J1aWx0aW5Ub29sTmFtZXMuSmF2YVNjcmlwdF0gPSBjcmVhdGVKYXZhU2NyaXB0VG9vbCh7XG4gICAgdG9vbHM6IHJhd1Rvb2xzLFxuICAgIHNhbmRib3gsXG4gICAgYWN0aXZlVG9vbHMsXG4gICAgb25TdWJUb29sQ2FsbCxcbiAgICB0b29sQ29udGV4dCxcbiAgfSk7XG5cbiAgY29uc3QgdG9vbHNXaXRoTmVlZHNBcHByb3ZhbCA9IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBPYmplY3QuZW50cmllcyhyYXdUb29scykubWFwKChbbmFtZSwgdF0pID0+IHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsRXhlY3V0ZSA9IHQuZXhlY3V0ZTtcbiAgICAgIGNvbnN0IHdyYXBwZWRFeGVjdXRlID0gb3JpZ2luYWxFeGVjdXRlXG4gICAgICAgID8gYXN5bmMgKC4uLmFyZ3M6IFBhcmFtZXRlcnM8dHlwZW9mIG9yaWdpbmFsRXhlY3V0ZT4pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRvbmUgPSBzdGVwTG9nLnRpbWUoYHRvb2w6JHtuYW1lfWApO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgbGV0IHRvb2xJbnB1dCA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgIGlmIChhZ2VudC5ob29rc1tcInRvb2wuYmVmb3JlXCJdKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYmVmb3JlUmVzdWx0ID0gYXdhaXQgYWdlbnQuaG9va3NbXCJ0b29sLmJlZm9yZVwiXSh7XG4gICAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgICAgaW5wdXQ6IHRvb2xJbnB1dCxcbiAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHRvb2xDb250ZXh0LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChiZWZvcmVSZXN1bHQ/LmlucHV0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgIHRvb2xJbnB1dCA9IGJlZm9yZVJlc3VsdC5pbnB1dDtcbiAgICAgICAgICAgICAgICAgIGFyZ3NbMF0gPSB0b29sSW5wdXQgYXMgKHR5cGVvZiBhcmdzKVswXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgb3JpZ2luYWxFeGVjdXRlKC4uLmFyZ3MpO1xuXG4gICAgICAgICAgICAgIGlmIChhZ2VudC5ob29rc1tcInRvb2wuYWZ0ZXJcIl0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhZnRlclJlc3VsdCA9IGF3YWl0IGFnZW50Lmhvb2tzW1widG9vbC5hZnRlclwiXSh7XG4gICAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgICAgaW5wdXQ6IHRvb2xJbnB1dCxcbiAgICAgICAgICAgICAgICAgIHJlc3VsdCxcbiAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHRvb2xDb250ZXh0LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChhZnRlclJlc3VsdD8ucmVzdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGFmdGVyUmVzdWx0LnJlc3VsdCBhcyB0eXBlb2YgcmVzdWx0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgZG9uZSh7XG4gICAgICAgICAgICAgICAgZXJyb3I6IGUgaW5zdGFuY2VvZiBFcnJvciA/IGUubWVzc2FnZSA6IFN0cmluZyhlKSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIG5hbWUsXG4gICAgICAgIHtcbiAgICAgICAgICAuLi50LFxuICAgICAgICAgIC4uLih3cmFwcGVkRXhlY3V0ZSA/IHsgZXhlY3V0ZTogd3JhcHBlZEV4ZWN1dGUgfSA6IHt9KSxcbiAgICAgICAgICBuZWVkc0FwcHJvdmFsOiBhc3luYyAoXG4gICAgICAgICAgICB0b29sSW5wdXQ6IHVua25vd24sXG4gICAgICAgICAgICBvcHRzOiB7IHRvb2xDYWxsSWQ6IHN0cmluZzsgbWVzc2FnZXM6IHVua25vd25bXSB9XG4gICAgICAgICAgKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgY2hlY2tOZWVkc0FwcHJvdmFsKHtcbiAgICAgICAgICAgICAgYWdlbnQsXG4gICAgICAgICAgICAgIHRvb2xOYW1lOiBuYW1lLFxuICAgICAgICAgICAgICBpbnB1dDogdG9vbElucHV0LFxuICAgICAgICAgICAgICB0b29sQ2FsbElkOiBvcHRzLnRvb2xDYWxsSWQsXG4gICAgICAgICAgICAgIG1lc3NhZ2VzOiBvcHRzLm1lc3NhZ2VzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIF07XG4gICAgfSlcbiAgKTtcblxuICByZXR1cm4geyByYXdUb29scywgdG9vbHNXaXRoTmVlZHNBcHByb3ZhbCwgdG9vbENvbnRleHQgfTtcbn1cbiIsICJpbXBvcnQgeyB0eXBlIFRvb2xTZXQsIHRvb2wgfSBmcm9tIFwiYWlcIjtcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5pbXBvcnQgdHlwZSB7IFNhbmRib3hJbnN0YW5jZSB9IGZyb20gXCIuLi9zYW5kYm94L2FkYXB0ZXJcIjtcbmltcG9ydCB7IGJ1aWx0SW5Ub29scyB9IGZyb20gXCIuXCI7XG5cbmV4cG9ydCBjb25zdCBKQVZBU0NSSVBUX1RPT0xfTkFNRSA9IFwiSmF2YVNjcmlwdFwiO1xuXG5leHBvcnQgdHlwZSBTdWJUb29sQ2FsbFJlc3VsdCA9IHsgcmVzdWx0PzogdW5rbm93bjsgZXJyb3I/OiBzdHJpbmcgfTtcbmV4cG9ydCB0eXBlIE9uU3ViVG9vbENhbGwgPSAoXG4gIHRvb2xOYW1lOiBzdHJpbmcsXG4gIGlucHV0OiB1bmtub3duLFxuICBleGVjdXRlOiAoKSA9PiBQcm9taXNlPHVua25vd24+XG4pID0+IFByb21pc2U8U3ViVG9vbENhbGxSZXN1bHQ+O1xuXG5jb25zdCBSRVFVRVNUX01BUktFUl9TVEFSVCA9IFwiX19UT09MX1JFUVVFU1RfX1wiO1xuY29uc3QgUkVRVUVTVF9NQVJLRVJfRU5EID0gXCJfX1RPT0xfUkVRVUVTVF9FTkRfX1wiO1xuY29uc3QgRVhFQ1VUSU9OX1RJTUVPVVRfTVMgPSA1ICogNjAgKiAxMDAwO1xuXG4vKipcbiAqIFRoZSBydW5uZXIgc2NyaXB0IGlzIHdyaXR0ZW4gdG8gdGhlIHNhbmRib3ggYW5kIGV4ZWN1dGVkIHZpYSBOb2RlLmpzLlxuICogSXQgcmVhZHMgdGhlIG1vZGVsJ3MgY29kZSBmcm9tIGNvZGUuanMsIHNldHMgdXAgY3R4LnRvb2xzIGFzIFJQQyBwcm94aWVzXG4gKiAocmVxdWVzdHMgc2VudCB2aWEgc3RkZXJyIG1hcmtlcnMsIHJlc3BvbnNlcyBwb2xsZWQgZnJvbSBmaWxlcyksIGV4ZWN1dGVzXG4gKiB0aGUgY29kZSwgYW5kIHdyaXRlcyB0aGUgcmVzdWx0IHRvIHN0ZG91dCBhcyBKU09OLlxuICovXG5jb25zdCBSVU5ORVJfU0NSSVBUID0gYFxuaW1wb3J0IHsgcmVhZEZpbGVTeW5jLCBleGlzdHNTeW5jLCB1bmxpbmtTeW5jLCBta2RpclN5bmMgfSBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7IGpvaW4sIGRpcm5hbWUgfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgZmlsZVVSTFRvUGF0aCB9IGZyb20gJ25vZGU6dXJsJztcblxuY29uc3QgU0NSSVBUX0RJUiA9IGRpcm5hbWUoZmlsZVVSTFRvUGF0aChpbXBvcnQubWV0YS51cmwpKTtcbmNvbnN0IFRPT0xfQ0FMTF9USU1FT1VUX01TID0gMzAwXzAwMDtcblxubGV0IHJlcUNvdW50ZXIgPSAwO1xuXG5hc3luYyBmdW5jdGlvbiBjYWxsVG9vbChuYW1lLCBpbnB1dCkge1xuICBjb25zdCBpZCA9ICdyZXFfJyArICgrK3JlcUNvdW50ZXIpICsgJ18nICsgRGF0ZS5ub3coKTtcbiAgY29uc3QgcmVzcG9uc2VGaWxlID0gam9pbihTQ1JJUFRfRElSLCBpZCArICcucmVzcG9uc2UuanNvbicpO1xuXG4gIGNvbnN0IHJlcXVlc3QgPSBKU09OLnN0cmluZ2lmeSh7IGlkLCB0b29sOiBuYW1lLCBpbnB1dCB9KTtcbiAgcHJvY2Vzcy5zdGRlcnIud3JpdGUoJyR7UkVRVUVTVF9NQVJLRVJfU1RBUlR9JyArIHJlcXVlc3QgKyAnJHtSRVFVRVNUX01BUktFUl9FTkR9JyArICdcXFxcbicpO1xuXG4gIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgd2hpbGUgKCFleGlzdHNTeW5jKHJlc3BvbnNlRmlsZSkpIHtcbiAgICBpZiAoRGF0ZS5ub3coKSAtIHN0YXJ0ID4gVE9PTF9DQUxMX1RJTUVPVVRfTVMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVG9vbCBjYWxsICcgKyBuYW1lICsgJyB0aW1lZCBvdXQgd2FpdGluZyBmb3IgcmVzcG9uc2UnKTtcbiAgICB9XG4gICAgYXdhaXQgbmV3IFByb21pc2UociA9PiBzZXRUaW1lb3V0KHIsIDMwKSk7XG4gIH1cblxuICBsZXQgcmF3O1xuICB0cnkge1xuICAgIHJhdyA9IHJlYWRGaWxlU3luYyhyZXNwb25zZUZpbGUsICd1dGY4Jyk7XG4gIH0gY2F0Y2gge1xuICAgIGF3YWl0IG5ldyBQcm9taXNlKHIgPT4gc2V0VGltZW91dChyLCA1MCkpO1xuICAgIHJhdyA9IHJlYWRGaWxlU3luYyhyZXNwb25zZUZpbGUsICd1dGY4Jyk7XG4gIH1cblxuICBjb25zdCByZXNwb25zZSA9IEpTT04ucGFyc2UocmF3KTtcbiAgdHJ5IHsgdW5saW5rU3luYyhyZXNwb25zZUZpbGUpOyB9IGNhdGNoIHt9XG5cbiAgaWYgKHJlc3BvbnNlLmVycm9yKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKHJlc3BvbnNlLmVycm9yKTtcbiAgfVxuICByZXR1cm4gcmVzcG9uc2UucmVzdWx0O1xufVxuXG5jb25zdCBjb2RlID0gcmVhZEZpbGVTeW5jKGpvaW4oU0NSSVBUX0RJUiwgJ2NvZGUuanMnKSwgJ3V0ZjgnKTtcbmNvbnN0IHRvb2xOYW1lcyA9IEpTT04ucGFyc2UocmVhZEZpbGVTeW5jKGpvaW4oU0NSSVBUX0RJUiwgJ3Rvb2xzLmpzb24nKSwgJ3V0ZjgnKSk7XG5cbmNvbnN0IGN0eCA9IHsgdG9vbHM6IHt9IH07XG5mb3IgKGNvbnN0IG5hbWUgb2YgdG9vbE5hbWVzKSB7XG4gIGN0eC50b29sc1tuYW1lXSA9IChpbnB1dCkgPT4gY2FsbFRvb2wobmFtZSwgaW5wdXQpO1xufVxuXG5jb25zdCBsb2dzID0gW107XG5jb25zdCBjdXN0b21Db25zb2xlID0ge1xuICBsb2c6ICguLi5hcmdzKSA9PiBsb2dzLnB1c2goYXJncy5tYXAoYSA9PiB0eXBlb2YgYSA9PT0gJ3N0cmluZycgPyBhIDogSlNPTi5zdHJpbmdpZnkoYSkpLmpvaW4oJyAnKSksXG4gIGVycm9yOiAoLi4uYXJncykgPT4gbG9ncy5wdXNoKCdbZXJyb3JdICcgKyBhcmdzLm1hcChhID0+IHR5cGVvZiBhID09PSAnc3RyaW5nJyA/IGEgOiBKU09OLnN0cmluZ2lmeShhKSkuam9pbignICcpKSxcbiAgd2FybjogKC4uLmFyZ3MpID0+IGxvZ3MucHVzaCgnW3dhcm5dICcgKyBhcmdzLm1hcChhID0+IHR5cGVvZiBhID09PSAnc3RyaW5nJyA/IGEgOiBKU09OLnN0cmluZ2lmeShhKSkuam9pbignICcpKSxcbn07XG5cbnRyeSB7XG4gIGNvbnN0IEFzeW5jRnVuY3Rpb24gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoYXN5bmMgZnVuY3Rpb24oKSB7fSkuY29uc3RydWN0b3I7XG4gIGNvbnN0IGZuID0gbmV3IEFzeW5jRnVuY3Rpb24oJ2N0eCcsICdjb25zb2xlJywgY29kZSk7XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGZuKGN0eCwgY3VzdG9tQ29uc29sZSk7XG5cbiAgY29uc3Qgb3V0cHV0ID0geyBzdWNjZXNzOiB0cnVlLCByZXN1bHQ6IHJlc3VsdCAhPT0gdW5kZWZpbmVkID8gcmVzdWx0IDogbnVsbCB9O1xuICBpZiAobG9ncy5sZW5ndGggPiAwKSBvdXRwdXQubG9ncyA9IGxvZ3M7XG4gIHByb2Nlc3Muc3Rkb3V0LndyaXRlKEpTT04uc3RyaW5naWZ5KG91dHB1dCkpO1xufSBjYXRjaCAoZXJyKSB7XG4gIGNvbnN0IG91dHB1dCA9IHtcbiAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICBlcnJvcjogZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpLFxuICB9O1xuICBpZiAobG9ncy5sZW5ndGggPiAwKSBvdXRwdXQubG9ncyA9IGxvZ3M7XG4gIHByb2Nlc3Muc3Rkb3V0LndyaXRlKEpTT04uc3RyaW5naWZ5KG91dHB1dCkpO1xufVxuYDtcblxuLyoqXG4gKiBFeHRyYWN0cyBhIHBsYWluIEpTT04gU2NoZW1hIGZyb20gd2hhdGV2ZXIgZm9ybWF0IHRoZSBBSSBTREsgdG9vbCB1c2VzXG4gKiAoWm9kIHNjaGVtYSwgQUkgU0RLIHdyYXBwZWQgc2NoZW1hLCBvciByYXcgSlNPTiBTY2hlbWEpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdEpzb25TY2hlbWEoXG4gIHNjaGVtYTogdW5rbm93blxuKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBudWxsIHtcbiAgaWYgKCFzY2hlbWEgfHwgdHlwZW9mIHNjaGVtYSAhPT0gXCJvYmplY3RcIikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKFxuICAgIFwiX2RlZlwiIGluIHNjaGVtYSAmJlxuICAgIHR5cGVvZiAoc2NoZW1hIGFzIHsgX2RlZjogdW5rbm93biB9KS5fZGVmID09PSBcIm9iamVjdFwiXG4gICkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gei50b0pTT05TY2hlbWEoc2NoZW1hIGFzIHouWm9kVHlwZSkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBjb25zdCBzID0gc2NoZW1hIGFzIFJlY29yZDxzdHJpbmcgfCBzeW1ib2wsIHVua25vd24+O1xuICBpZiAoU3ltYm9sLmZvcihcInZlcmNlbC5haS5zY2hlbWFcIikgaW4gcyAmJiBcImpzb25TY2hlbWFcIiBpbiBzKSB7XG4gICAgcmV0dXJuIHMuanNvblNjaGVtYSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgfVxuXG4gIGlmIChcInR5cGVcIiBpbiBzIHx8IFwicHJvcGVydGllc1wiIGluIHMpIHtcbiAgICByZXR1cm4gcyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24ganNvblNjaGVtYVRvVHMoXG4gIHNjaGVtYTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIGluZGVudCA9IDBcbik6IHN0cmluZyB7XG4gIGlmICghc2NoZW1hKSB7XG4gICAgcmV0dXJuIFwidW5rbm93blwiO1xuICB9XG5cbiAgaWYgKHNjaGVtYS5lbnVtICYmIEFycmF5LmlzQXJyYXkoc2NoZW1hLmVudW0pKSB7XG4gICAgcmV0dXJuIHNjaGVtYS5lbnVtLm1hcCgodikgPT4gSlNPTi5zdHJpbmdpZnkodikpLmpvaW4oXCIgfCBcIik7XG4gIH1cblxuICBpZiAoc2NoZW1hLmFueU9mICYmIEFycmF5LmlzQXJyYXkoc2NoZW1hLmFueU9mKSkge1xuICAgIHJldHVybiBzY2hlbWEuYW55T2ZcbiAgICAgIC5tYXAoKHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiBqc29uU2NoZW1hVG9UcyhzLCBpbmRlbnQpKVxuICAgICAgLmpvaW4oXCIgfCBcIik7XG4gIH1cbiAgaWYgKHNjaGVtYS5vbmVPZiAmJiBBcnJheS5pc0FycmF5KHNjaGVtYS5vbmVPZikpIHtcbiAgICByZXR1cm4gc2NoZW1hLm9uZU9mXG4gICAgICAubWFwKChzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4ganNvblNjaGVtYVRvVHMocywgaW5kZW50KSlcbiAgICAgIC5qb2luKFwiIHwgXCIpO1xuICB9XG5cbiAgY29uc3QgdHlwZSA9IHNjaGVtYS50eXBlIGFzIHN0cmluZztcblxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICByZXR1cm4gXCJzdHJpbmdcIjtcbiAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgY2FzZSBcImludGVnZXJcIjpcbiAgICAgIHJldHVybiBcIm51bWJlclwiO1xuICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICByZXR1cm4gXCJib29sZWFuXCI7XG4gICAgY2FzZSBcIm51bGxcIjpcbiAgICAgIHJldHVybiBcIm51bGxcIjtcbiAgICBjYXNlIFwiYXJyYXlcIjoge1xuICAgICAgY29uc3QgaXRlbXMgPSBzY2hlbWEuaXRlbXNcbiAgICAgICAgPyBqc29uU2NoZW1hVG9UcyhzY2hlbWEuaXRlbXMgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIGluZGVudClcbiAgICAgICAgOiBcInVua25vd25cIjtcbiAgICAgIHJldHVybiBgQXJyYXk8JHtpdGVtc30+YDtcbiAgICB9XG4gICAgY2FzZSBcIm9iamVjdFwiOiB7XG4gICAgICBjb25zdCBwcm9wZXJ0aWVzID0gc2NoZW1hLnByb3BlcnRpZXMgYXNcbiAgICAgICAgfCBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj5cbiAgICAgICAgfCB1bmRlZmluZWQ7XG4gICAgICBpZiAoIXByb3BlcnRpZXMpIHtcbiAgICAgICAgcmV0dXJuIFwiUmVjb3JkPHN0cmluZywgdW5rbm93bj5cIjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlcXVpcmVkID0gbmV3IFNldCgoc2NoZW1hLnJlcXVpcmVkIGFzIHN0cmluZ1tdKSB8fCBbXSk7XG4gICAgICBjb25zdCBwYWQgPSBcIiAgXCIucmVwZWF0KGluZGVudCArIDEpO1xuICAgICAgY29uc3QgY2xvc2VQYWQgPSBcIiAgXCIucmVwZWF0KGluZGVudCk7XG4gICAgICBjb25zdCBwcm9wcyA9IE9iamVjdC5lbnRyaWVzKHByb3BlcnRpZXMpLm1hcCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgIGNvbnN0IG9wdCA9IHJlcXVpcmVkLmhhcyhrZXkpID8gXCJcIiA6IFwiP1wiO1xuICAgICAgICByZXR1cm4gYCR7cGFkfSR7a2V5fSR7b3B0fTogJHtqc29uU2NoZW1hVG9Ucyh2YWx1ZSwgaW5kZW50ICsgMSl9YDtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGB7XFxuJHtwcm9wcy5qb2luKFwiO1xcblwiKX07XFxuJHtjbG9zZVBhZH19YDtcbiAgICB9XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBcInVua25vd25cIjtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVDb250ZXh0VHlwZVN0cmluZyh0b29sczogVG9vbFNldCk6IHN0cmluZyB7XG4gIGNvbnN0IHNpZ3M6IHN0cmluZ1tdID0gW107XG5cbiAgZm9yIChjb25zdCBbbmFtZSwgdF0gb2YgT2JqZWN0LmVudHJpZXModG9vbHMpKSB7XG4gICAgY29uc3QgcmF3ID0gdCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBjb25zdCBpbnB1dFNjaGVtYSA9IGV4dHJhY3RKc29uU2NoZW1hKHJhdy5pbnB1dFNjaGVtYSA/PyByYXcucGFyYW1ldGVycyk7XG4gICAgY29uc3Qgb3V0cHV0U2NoZW1hID0gZXh0cmFjdEpzb25TY2hlbWEocmF3Lm91dHB1dFNjaGVtYSk7XG5cbiAgICBjb25zdCBpbnB1dFR5cGUgPSBpbnB1dFNjaGVtYSA/IGpzb25TY2hlbWFUb1RzKGlucHV0U2NoZW1hLCAyKSA6IFwie31cIjtcbiAgICBjb25zdCBvdXRwdXRUeXBlID0gb3V0cHV0U2NoZW1hXG4gICAgICA/IGpzb25TY2hlbWFUb1RzKG91dHB1dFNjaGVtYSwgMilcbiAgICAgIDogXCJ1bmtub3duXCI7XG5cbiAgICBzaWdzLnB1c2goYCAgICAke25hbWV9KGlucHV0OiAke2lucHV0VHlwZX0pOiBQcm9taXNlPCR7b3V0cHV0VHlwZX0+YCk7XG4gIH1cblxuICByZXR1cm4gYHR5cGUgQ29udGV4dCA9IHtcXG4gIHRvb2xzOiB7XFxuJHtzaWdzLmpvaW4oXCI7XFxuXCIpfTtcXG4gIH1cXG59YDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZXhlY3V0ZUluU2FuZGJveCh7XG4gIGNvZGUsXG4gIHJwY0RpcixcbiAgYWJvcnRDb250cm9sbGVyLFxuICBzYW5kYm94LFxuICBhdmFpbGFibGVUb29scyxcbiAgb25TdWJUb29sQ2FsbCxcbiAgdG9vbENvbnRleHQsXG59OiB7XG4gIGNvZGU6IHN0cmluZztcbiAgcnBjRGlyOiBzdHJpbmc7XG4gIGFib3J0Q29udHJvbGxlcjogQWJvcnRDb250cm9sbGVyO1xuICBzYW5kYm94OiBTYW5kYm94SW5zdGFuY2U7XG4gIGF2YWlsYWJsZVRvb2xzOiBUb29sU2V0O1xuICBvblN1YlRvb2xDYWxsPzogT25TdWJUb29sQ2FsbDtcbiAgdG9vbENvbnRleHQ/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn0pOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHVua25vd24+PiB7XG4gIGNvbnN0IG1rZGlyUmVzdWx0ID0gYXdhaXQgc2FuZGJveC5leGVjKHtcbiAgICBjb21tYW5kOiBcIm1rZGlyXCIsXG4gICAgYXJnczogW1wiLXBcIiwgcnBjRGlyXSxcbiAgfSk7XG4gIGlmIChta2RpclJlc3VsdCBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgcmV0dXJuIHsgc3VjY2VzczogZmFsc2UsIGVycm9yOiBta2RpclJlc3VsdC5tZXNzYWdlIH07XG4gIH1cbiAgYXdhaXQgbWtkaXJSZXN1bHQucmVzdWx0O1xuXG4gIGF3YWl0IHNhbmRib3gud3JpdGVGaWxlcyh7XG4gICAgZmlsZXM6IFtcbiAgICAgIHsgcGF0aDogXCJydW5uZXIubWpzXCIsIGNvbnRlbnQ6IFJVTk5FUl9TQ1JJUFQgfSxcbiAgICAgIHsgcGF0aDogXCJjb2RlLmpzXCIsIGNvbnRlbnQ6IGNvZGUgfSxcbiAgICAgIHtcbiAgICAgICAgcGF0aDogXCJ0b29scy5qc29uXCIsXG4gICAgICAgIGNvbnRlbnQ6IEpTT04uc3RyaW5naWZ5KE9iamVjdC5rZXlzKGF2YWlsYWJsZVRvb2xzKSksXG4gICAgICB9LFxuICAgIF0sXG4gICAgZGVzdFBhdGg6IHJwY0RpcixcbiAgfSk7XG5cbiAgY29uc3Qgbm9kZU1ham9yID0gTnVtYmVyLnBhcnNlSW50KHByb2Nlc3MudmVyc2lvbnMubm9kZS5zcGxpdChcIi5cIilbMF0sIDEwKTtcbiAgY29uc3QgcGVybWlzc2lvbkZsYWcgPVxuICAgIG5vZGVNYWpvciA+PSAyMiA/IFwiLS1wZXJtaXNzaW9uXCIgOiBcIi0tZXhwZXJpbWVudGFsLXBlcm1pc3Npb25cIjtcblxuICBjb25zdCBleGVjUmVzdWx0ID0gYXdhaXQgc2FuZGJveC5leGVjKHtcbiAgICBjb21tYW5kOiBcIm5vZGVcIixcbiAgICBhcmdzOiBbXG4gICAgICBwZXJtaXNzaW9uRmxhZyxcbiAgICAgIGAtLWFsbG93LWZzLXJlYWQ9JHtycGNEaXJ9YCxcbiAgICAgIGAtLWFsbG93LWZzLXdyaXRlPSR7cnBjRGlyfWAsXG4gICAgICBgJHtycGNEaXJ9L3J1bm5lci5tanNgLFxuICAgIF0sXG4gICAgc2lnbmFsOiBhYm9ydENvbnRyb2xsZXIuc2lnbmFsLFxuICB9KTtcblxuICBpZiAoZXhlY1Jlc3VsdCBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgcmV0dXJuIHsgc3VjY2VzczogZmFsc2UsIGVycm9yOiBleGVjUmVzdWx0Lm1lc3NhZ2UgfTtcbiAgfVxuXG4gIGNvbnN0IGZhdGFsOiB7IGVycm9yOiBFcnJvciB8IG51bGwgfSA9IHsgZXJyb3I6IG51bGwgfTtcblxuICBjb25zdCBhYm9ydCA9IChlcnJvcjogRXJyb3IpID0+IHtcbiAgICBpZiAoIWZhdGFsLmVycm9yKSB7XG4gICAgICBmYXRhbC5lcnJvciA9IGVycm9yO1xuICAgICAgYWJvcnRDb250cm9sbGVyLmFib3J0KCk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZVRvb2xSZXF1ZXN0ID0gYXN5bmMgKHJlcXVlc3RKc29uOiBzdHJpbmcpID0+IHtcbiAgICBsZXQgcGFyc2VkOiB7IGlkOiBzdHJpbmc7IHRvb2w6IHN0cmluZzsgaW5wdXQ6IHVua25vd24gfTtcbiAgICB0cnkge1xuICAgICAgcGFyc2VkID0gSlNPTi5wYXJzZShyZXF1ZXN0SnNvbik7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgeyBpZCwgdG9vbDogdG9vbE5hbWUsIGlucHV0IH0gPSBwYXJzZWQ7XG5cbiAgICBsZXQgcmVzcG9uc2U6IHsgcmVzdWx0PzogdW5rbm93bjsgZXJyb3I/OiBzdHJpbmcgfTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdCA9IGF2YWlsYWJsZVRvb2xzW3Rvb2xOYW1lXTtcbiAgICAgIGlmICghdD8uZXhlY3V0ZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYFRvb2wgJHt0b29sTmFtZX0gbm90IGZvdW5kIG9yIGhhcyBubyBleGVjdXRlIGZ1bmN0aW9uYFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgY29uc3QgZXhlYyA9IHQuZXhlY3V0ZS5iaW5kKHQpO1xuICAgICAgY29uc3QgZXhlY09wdGlvbnMgPSB7XG4gICAgICAgIHRvb2xDYWxsSWQ6IGBqc18ke3Rvb2xOYW1lfV8ke0RhdGUubm93KCl9YCxcbiAgICAgICAgbWVzc2FnZXM6IFtdLFxuICAgICAgICBleHBlcmltZW50YWxfY29udGV4dDogdG9vbENvbnRleHQsXG4gICAgICB9O1xuICAgICAgaWYgKG9uU3ViVG9vbENhbGwpIHtcbiAgICAgICAgcmVzcG9uc2UgPSBhd2FpdCBvblN1YlRvb2xDYWxsKHRvb2xOYW1lLCBpbnB1dCwgKCkgPT5cbiAgICAgICAgICBleGVjKGlucHV0LCBleGVjT3B0aW9ucylcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGV4ZWMoaW5wdXQsIGV4ZWNPcHRpb25zKTtcbiAgICAgICAgcmVzcG9uc2UgPSB7IHJlc3VsdCB9O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc3QgbXNnID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpO1xuICAgICAgcmVzcG9uc2UgPSB7IGVycm9yOiBtc2cgfTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgc2FuZGJveC53cml0ZUZpbGVzKHtcbiAgICAgICAgZmlsZXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwYXRoOiBgJHtpZH0ucmVzcG9uc2UuanNvbmAsXG4gICAgICAgICAgICBjb250ZW50OiBKU09OLnN0cmluZ2lmeShyZXNwb25zZSksXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgZGVzdFBhdGg6IHJwY0RpcixcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLyoqXG4gICAgICAgKiBJZiB3cml0aW5nIHRoZSByZXNwb25zZSBmaWxlIGZhaWxzLCB0aGUgcnVubmVyIHdpbGwgcG9sbCBmb3JldmVyXG4gICAgICAgKiB3YWl0aW5nIGZvciBpdC4gQWJvcnQgdGhlIHJ1bm5lciBwcm9jZXNzIHNvIHdlIGRvbid0IGRlYWRsb2NrLlxuICAgICAgICovXG4gICAgICBjb25zdCBtc2cgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycik7XG4gICAgICBhYm9ydChuZXcgRXJyb3IoYEZhaWxlZCB0byB3cml0ZSBSUEMgcmVzcG9uc2UgZm9yICR7dG9vbE5hbWV9OiAke21zZ31gKSk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IHRvb2xDYWxsUHJvbWlzZXM6IFByb21pc2U8dm9pZD5bXSA9IFtdO1xuICBsZXQgc3RkZXJyQnVmZmVyID0gXCJcIjtcbiAgbGV0IG5vbk1hcmtlclN0ZGVyciA9IFwiXCI7XG5cbiAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIGFib3J0KFxuICAgICAgbmV3IEVycm9yKFxuICAgICAgICBgSmF2YVNjcmlwdCBleGVjdXRpb24gdGltZWQgb3V0IGFmdGVyICR7RVhFQ1VUSU9OX1RJTUVPVVRfTVMgLyAxMDAwfXNgXG4gICAgICApXG4gICAgKTtcbiAgfSwgRVhFQ1VUSU9OX1RJTUVPVVRfTVMpO1xuXG4gIHRyeSB7XG4gICAgZm9yIGF3YWl0IChjb25zdCBlbnRyeSBvZiBleGVjUmVzdWx0LmxvZ3MoKSkge1xuICAgICAgaWYgKGZhdGFsLmVycm9yKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAoZW50cnkuc3RyZWFtID09PSBcInN0ZGVyclwiKSB7XG4gICAgICAgIHN0ZGVyckJ1ZmZlciArPSBlbnRyeS5kYXRhO1xuXG4gICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgY29uc3Qgc3RhcnRJZHggPSBzdGRlcnJCdWZmZXIuaW5kZXhPZihSRVFVRVNUX01BUktFUl9TVEFSVCk7XG4gICAgICAgICAgaWYgKHN0YXJ0SWR4ID09PSAtMSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgYmVmb3JlTWFya2VyID0gc3RkZXJyQnVmZmVyLnNsaWNlKDAsIHN0YXJ0SWR4KTtcbiAgICAgICAgICBpZiAoYmVmb3JlTWFya2VyLnRyaW0oKSkge1xuICAgICAgICAgICAgbm9uTWFya2VyU3RkZXJyICs9IGJlZm9yZU1hcmtlcjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBjb250ZW50U3RhcnQgPSBzdGFydElkeCArIFJFUVVFU1RfTUFSS0VSX1NUQVJULmxlbmd0aDtcbiAgICAgICAgICBjb25zdCBlbmRJZHggPSBzdGRlcnJCdWZmZXIuaW5kZXhPZihSRVFVRVNUX01BUktFUl9FTkQsIGNvbnRlbnRTdGFydCk7XG4gICAgICAgICAgaWYgKGVuZElkeCA9PT0gLTEpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHJlcXVlc3RKc29uID0gc3RkZXJyQnVmZmVyLnNsaWNlKGNvbnRlbnRTdGFydCwgZW5kSWR4KTtcbiAgICAgICAgICBzdGRlcnJCdWZmZXIgPSBzdGRlcnJCdWZmZXIuc2xpY2UoZW5kSWR4ICsgUkVRVUVTVF9NQVJLRVJfRU5ELmxlbmd0aCk7XG5cbiAgICAgICAgICB0b29sQ2FsbFByb21pc2VzLnB1c2goaGFuZGxlVG9vbFJlcXVlc3QocmVxdWVzdEpzb24pKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gIH1cblxuICBpZiAoc3RkZXJyQnVmZmVyLnRyaW0oKSkge1xuICAgIG5vbk1hcmtlclN0ZGVyciArPSBzdGRlcnJCdWZmZXI7XG4gIH1cblxuICBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQodG9vbENhbGxQcm9taXNlcyk7XG5cbiAgaWYgKGZhdGFsLmVycm9yKSB7XG4gICAgZXhlY1Jlc3VsdC5yZXN1bHQuY2F0Y2goKCkgPT4gdW5kZWZpbmVkKTtcbiAgICByZXR1cm4ge1xuICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICBlcnJvcjogZmF0YWwuZXJyb3IubWVzc2FnZSxcbiAgICAgIC4uLihub25NYXJrZXJTdGRlcnIgPyB7IHN0ZGVycjogbm9uTWFya2VyU3RkZXJyLnNsaWNlKDAsIDIwMDApIH0gOiB7fSksXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IHsgc3Rkb3V0LCBzdGRlcnIsIGV4aXRDb2RlIH0gPSBhd2FpdCBleGVjUmVzdWx0LnJlc3VsdDtcblxuICB0cnkge1xuICAgIHJldHVybiBKU09OLnBhcnNlKHN0ZG91dCk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB7XG4gICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgIGVycm9yOiBgUnVubmVyIGZhaWxlZCAoZXhpdCAke2V4aXRDb2RlfSkuYCxcbiAgICAgIHN0ZGVycjogKG5vbk1hcmtlclN0ZGVyciArIHN0ZGVycikuc2xpY2UoMCwgMjAwMCksXG4gICAgICBzdGRvdXQ6IHN0ZG91dC5zbGljZSgwLCAxMDAwKSxcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVKYXZhU2NyaXB0VG9vbChvcHRzOiB7XG4gIHRvb2xzOiBUb29sU2V0O1xuICBzYW5kYm94OiBTYW5kYm94SW5zdGFuY2U7XG4gIGFjdGl2ZVRvb2xzPzogc3RyaW5nW107XG4gIG9uU3ViVG9vbENhbGw/OiBPblN1YlRvb2xDYWxsO1xuICB0b29sQ29udGV4dD86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufSkge1xuICBjb25zdCB7IHNhbmRib3gsIG9uU3ViVG9vbENhbGwgfSA9IG9wdHM7XG4gIGNvbnN0IGFjdGl2ZVNldCA9IG9wdHMuYWN0aXZlVG9vbHMgPyBuZXcgU2V0KG9wdHMuYWN0aXZlVG9vbHMpIDogbnVsbDtcbiAgY29uc3QgYXZhaWxhYmxlVG9vbHM6IFRvb2xTZXQgPSB7fTtcbiAgZm9yIChjb25zdCBbbmFtZSwgdF0gb2YgT2JqZWN0LmVudHJpZXMob3B0cy50b29scykpIHtcbiAgICBpZiAoIWFjdGl2ZVNldCB8fCBhY3RpdmVTZXQuaGFzKG5hbWUpKSB7XG4gICAgICBhdmFpbGFibGVUb29sc1tuYW1lXSA9IHQ7XG4gICAgfVxuICB9XG4gIGNvbnN0IGNvbnRleHRUeXBlID0gZ2VuZXJhdGVDb250ZXh0VHlwZVN0cmluZyhhdmFpbGFibGVUb29scyk7XG5cbiAgcmV0dXJuIHRvb2woe1xuICAgIC4uLmJ1aWx0SW5Ub29scy5KYXZhU2NyaXB0LFxuICAgIGRlc2NyaXB0aW9uOiBgRXhlY3V0ZSBKYXZhU2NyaXB0IHRvIG9yY2hlc3RyYXRlIG11bHRpcGxlIHRvb2wgY2FsbHMgaW4gYSBzaW5nbGUgc3RlcC4gVXNlIHRoaXMgd2hlbiB5b3UgbmVlZCB0byBydW4gc2V2ZXJhbCB0b29scyBpbiBzZXF1ZW5jZSwgdHJhbnNmb3JtIGludGVybWVkaWF0ZSByZXN1bHRzLCBvciBwYXJhbGxlbGl6ZSBpbmRlcGVuZGVudCBvcGVyYXRpb25zIHdpdGggUHJvbWlzZS5hbGwuXG5cblRoZSBjb2RlIHJ1bnMgYXMgYW4gYXN5bmMgZnVuY3Rpb24gYm9keSB3aXRoIFxcYGN0eFxcYCBpbiBzY29wZTpcblxuXFxgXFxgXFxgdHlwZXNjcmlwdFxuJHtjb250ZXh0VHlwZX1cblxcYFxcYFxcYFxuXG5FeGFtcGxlczpcbi0gU2VxdWVudGlhbDogXFxgY29uc3QgZmlsZSA9IGF3YWl0IGN0eC50b29scy5SZWFkKHsgcGF0aDogXCJwYWNrYWdlLmpzb25cIiB9KTsgcmV0dXJuIEpTT04ucGFyc2UoZmlsZS5jb250ZW50KTtcXGBcbi0gUGFyYWxsZWw6IFxcYGNvbnN0IFthLCBiXSA9IGF3YWl0IFByb21pc2UuYWxsKFtjdHgudG9vbHMuUmVhZCh7IHBhdGg6IFwiYS50c1wiIH0pLCBjdHgudG9vbHMuUmVhZCh7IHBhdGg6IFwiYi50c1wiIH0pXSk7IHJldHVybiB7IGE6IGEuY29udGVudCwgYjogYi5jb250ZW50IH07XFxgXG4tIFRyYW5zZm9ybTogXFxgY29uc3QgZ3JlcCA9IGF3YWl0IGN0eC50b29scy5HcmVwKHsgcGF0dGVybjogXCJUT0RPXCIgfSk7IHJldHVybiBncmVwLm1hdGNoZXMuc3BsaXQoXCJcXFxcblwiKS5sZW5ndGg7XFxgXG4tIEJhc2g6IFxcYGNvbnN0IHIgPSBhd2FpdCBjdHgudG9vbHMuQmFzaCh7IGNvbW1hbmQ6IFwibm9kZSAtZSBcXFxcXCJjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeSh7djoxfSkpXFxcXFwiXCIgfSk7IHJldHVybiBKU09OLnBhcnNlKHIuc3Rkb3V0KTtcXGBcblxuUmV0dXJuIGEgdmFsdWUgdG8gcGFzcyByZXN1bHRzIGJhY2suIFVzZSBjb25zb2xlLmxvZygpIGZvciBkZWJ1ZyBvdXRwdXQuXG5JbXBvcnRhbnQ6IEVhY2ggdG9vbCByZXR1cm5zIGEgc3RydWN0dXJlZCBvYmplY3QgbWF0Y2hpbmcgaXRzIG91dHB1dCBzY2hlbWEgXHUyMDE0IG5vdCBhIHJhdyBzdHJpbmcuIEFjY2VzcyB0aGUgc3BlY2lmaWMgZmllbGQgeW91IG5lZWQgKGUuZy4gQmFzaCdzIHJlc3VsdC5zdGRvdXQsIFJlYWQncyByZXN1bHQuY29udGVudCkgcmF0aGVyIHRoYW4gdHJ5aW5nIHRvIHBhcnNlIHRoZSBlbnRpcmUgcmVzdWx0LmAsXG4gICAgZXhlY3V0ZTogKHsgY29kZSB9KSA9PiB7XG4gICAgICBjb25zdCBydW5JZCA9IGBydW5fJHtEYXRlLm5vdygpfV8ke01hdGgucmFuZG9tKClcbiAgICAgICAgLnRvU3RyaW5nKDM2KVxuICAgICAgICAuc2xpY2UoMiwgOCl9YDtcbiAgICAgIGNvbnN0IHJwY0RpciA9IGAuYWdlbnQvanMtcnBjLyR7cnVuSWR9YDtcbiAgICAgIGNvbnN0IGFib3J0Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcblxuICAgICAgcmV0dXJuIGV4ZWN1dGVJblNhbmRib3goe1xuICAgICAgICBjb2RlLFxuICAgICAgICBycGNEaXIsXG4gICAgICAgIGFib3J0Q29udHJvbGxlcixcbiAgICAgICAgc2FuZGJveCxcbiAgICAgICAgYXZhaWxhYmxlVG9vbHMsXG4gICAgICAgIG9uU3ViVG9vbENhbGwsXG4gICAgICAgIHRvb2xDb250ZXh0OiBvcHRzLnRvb2xDb250ZXh0LFxuICAgICAgfSk7XG4gICAgfSxcbiAgfSk7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBUb29sIH0gZnJvbSBcImFpXCI7XG5pbXBvcnQgdHlwZSB7IEFueUFnZW50IH0gZnJvbSBcIi4uL2FnZW50L2NsaWVudFwiO1xuaW1wb3J0IHR5cGUgeyBCdWlsdEluVG9vbE5hbWUgfSBmcm9tIFwiLi9pbmRleFwiO1xuXG4vKiogQnVpbHQtaW4gZGVmYXVsdHMgZm9yIG5lZWRzQXBwcm92YWwgKHVzZXIgY2FuIG92ZXJyaWRlIHZpYSBhZ2VudCBjb25maWcpLiAqL1xuY29uc3QgYnVpbHRpbk5lZWRzQXBwcm92YWw6IFBhcnRpYWw8UmVjb3JkPEJ1aWx0SW5Ub29sTmFtZSwgYm9vbGVhbj4+ID0ge307XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjaGVja05lZWRzQXBwcm92YWwoe1xuICBhZ2VudCxcbiAgdG9vbE5hbWUsXG4gIGlucHV0LFxuICB0b29sQ2FsbElkLFxuICBtZXNzYWdlcyxcbn06IHtcbiAgYWdlbnQ6IEFueUFnZW50O1xuICB0b29sTmFtZTogc3RyaW5nO1xuICBpbnB1dDogdW5rbm93bjtcbiAgdG9vbENhbGxJZDogc3RyaW5nO1xuICBtZXNzYWdlczogdW5rbm93bltdO1xufSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAvLyAxLiBQZXItdG9vbCBuZWVkc0FwcHJvdmFsIG9uIHRoZSBUb29sIGRlZmluaXRpb24gdGFrZXMgcHJpb3JpdHlcbiAgY29uc3QgdG9vbERlZiA9IGFnZW50Lm9wdGlvbnMudG9vbHM/Llt0b29sTmFtZV0gYXMgVG9vbCB8IHVuZGVmaW5lZDtcbiAgaWYgKHRvb2xEZWY/Lm5lZWRzQXBwcm92YWwgIT0gbnVsbCkge1xuICAgIGlmICh0eXBlb2YgdG9vbERlZi5uZWVkc0FwcHJvdmFsID09PSBcImJvb2xlYW5cIikge1xuICAgICAgcmV0dXJuIHRvb2xEZWYubmVlZHNBcHByb3ZhbDtcbiAgICB9XG4gICAgcmV0dXJuIGF3YWl0IHRvb2xEZWYubmVlZHNBcHByb3ZhbChpbnB1dCwge1xuICAgICAgdG9vbENhbGxJZCxcbiAgICAgIG1lc3NhZ2VzOiBtZXNzYWdlcyBhcyBuZXZlcltdLFxuICAgICAgZXhwZXJpbWVudGFsX2NvbnRleHQ6IHVuZGVmaW5lZCxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIDIuIEFnZW50LWxldmVsIG5lZWRzQXBwcm92YWwgbWFwXG4gIGNvbnN0IGFnZW50RW50cnkgPSAoXG4gICAgYWdlbnQub3B0aW9ucy5uZWVkc0FwcHJvdmFsIGFzXG4gICAgICB8IFJlY29yZDxcbiAgICAgICAgICBzdHJpbmcsXG4gICAgICAgICAgYm9vbGVhbiB8ICgoLi4uYXJnczogdW5rbm93bltdKSA9PiBib29sZWFuIHwgUHJvbWlzZTxib29sZWFuPilcbiAgICAgICAgPlxuICAgICAgfCB1bmRlZmluZWRcbiAgKT8uW3Rvb2xOYW1lXTtcblxuICBpZiAoYWdlbnRFbnRyeSAhPSBudWxsKSB7XG4gICAgaWYgKHR5cGVvZiBhZ2VudEVudHJ5ID09PSBcImJvb2xlYW5cIikge1xuICAgICAgcmV0dXJuIGFnZW50RW50cnk7XG4gICAgfVxuICAgIHJldHVybiBhd2FpdCBhZ2VudEVudHJ5KGlucHV0LCB7XG4gICAgICB0b29sQ2FsbElkLFxuICAgICAgbWVzc2FnZXMsXG4gICAgICBleHBlcmltZW50YWxfY29udGV4dDogdW5kZWZpbmVkLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gMy4gQnVpbHQtaW4gZGVmYXVsdHNcbiAgcmV0dXJuIGJ1aWx0aW5OZWVkc0FwcHJvdmFsW3Rvb2xOYW1lIGFzIEJ1aWx0SW5Ub29sTmFtZV0gPz8gZmFsc2U7XG59XG4iLCAiaW1wb3J0IHtcbiAgdG9vbCBhcyBhaVRvb2wsXG4gIHR5cGUgVG9vbCxcbiAgdHlwZSBUb29sRXhlY3V0aW9uT3B0aW9ucyxcbiAgdHlwZSBVSU1lc3NhZ2UsXG59IGZyb20gXCJhaVwiO1xuaW1wb3J0IHR5cGUgeyB6IH0gZnJvbSBcInpvZFwiO1xuaW1wb3J0IHR5cGUgeyBTYW5kYm94SW5zdGFuY2UgfSBmcm9tIFwiLi4vc2FuZGJveC9hZGFwdGVyXCI7XG5pbXBvcnQgdHlwZSB7IFRvb2xDb250ZXh0IH0gZnJvbSBcIi4vaW5kZXhcIjtcblxuLyoqXG4gKiBEZWZpbmUgYW4gYWdlbnQgdG9vbCB3aXRoIHR5cGVkIGNvbnRleHQgYW5kIHN0YXRlLlxuICpcbiAqIFBhc3MgdGhlIHNhbWUgYGNvbnRleHRTY2hlbWFgIGFuZC9vciBgc3RhdGVTY2hlbWFgIChab2Qgb2JqZWN0cykgdXNlZCBpblxuICogeW91ciBhZ2VudCBkZWZpbml0aW9uIHRvIGdldCB0eXBlZCBgY29udGV4dGAgYW5kIGBzdGF0ZWAgaW5zaWRlIGBleGVjdXRlYC5cbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgdG9vbCB9IGZyb20gXCJleHBlcmltZW50YWwtYWdlbnRcIjtcbiAqIGltcG9ydCB7IGNvbnRleHRTY2hlbWEsIHN0YXRlU2NoZW1hIH0gZnJvbSBcIi4vY29udGV4dFwiO1xuICpcbiAqIGV4cG9ydCBjb25zdCBNeVRvb2wgPSB0b29sKHtcbiAqICAgY29udGV4dFNjaGVtYSxcbiAqICAgc3RhdGVTY2hlbWEsXG4gKiAgIGlucHV0U2NoZW1hOiB6Lm9iamVjdCh7IHF1ZXJ5OiB6LnN0cmluZygpIH0pLFxuICogICBleGVjdXRlOiBhc3luYyAoeyBxdWVyeSB9LCB7IGNvbnRleHQsIHN0YXRlLCBzYW5kYm94IH0pID0+IHtcbiAqICAgICBjb250ZXh0LmNoYW5uZWxJZCAvLyBcdTI3MTMgdHlwZWQgZnJvbSBjb250ZXh0U2NoZW1hXG4gKiAgICAgc3RhdGUuY291bnRlcisrICAgLy8gXHUyNzEzIHR5cGVkIGZyb20gc3RhdGVTY2hlbWEsIG11dGFibGVcbiAqICAgfSxcbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b29sPFxuICBUSW5wdXRTY2hlbWEgZXh0ZW5kcyB6LlpvZFR5cGUsXG4gIFRDb250ZXh0U2NoZW1hIGV4dGVuZHMgei5ab2RUeXBlID0gei5ab2RUeXBlPFJlY29yZDxzdHJpbmcsIHVua25vd24+PixcbiAgVFN0YXRlU2NoZW1hIGV4dGVuZHMgei5ab2RUeXBlID0gei5ab2RUeXBlPFJlY29yZDxzdHJpbmcsIHVua25vd24+PixcbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0V4cGxpY2l0QW55OiBkZWZhdWx0IGVyYXNlZFxuICBUT3V0cHV0U2NoZW1hIGV4dGVuZHMgei5ab2RUeXBlID0gei5ab2RUeXBlPGFueT4sXG4+KGRlZjoge1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgaW5wdXRTY2hlbWE6IFRJbnB1dFNjaGVtYTtcbiAgb3V0cHV0U2NoZW1hPzogVE91dHB1dFNjaGVtYTtcbiAgY29udGV4dFNjaGVtYT86IFRDb250ZXh0U2NoZW1hO1xuICBzdGF0ZVNjaGVtYT86IFRTdGF0ZVNjaGVtYTtcbiAgZXhlY3V0ZT86IChcbiAgICBpbnB1dDogei5pbmZlcjxUSW5wdXRTY2hlbWE+LFxuICAgIG9wdGlvbnM6IFRvb2xDb250ZXh0PHouaW5mZXI8VENvbnRleHRTY2hlbWE+LCB6LmluZmVyPFRTdGF0ZVNjaGVtYT4+ICYge1xuICAgICAgdG9vbENhbGxJZDogc3RyaW5nO1xuICAgICAgYWJvcnRTaWduYWw6IEFib3J0U2lnbmFsO1xuICAgIH1cbiAgICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRXhwbGljaXRBbnk6IGV4ZWN1dGUgY2FuIHJldHVybiBhbnl0aGluZ1xuICApID0+IGFueTtcbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0V4cGxpY2l0QW55OiBlcmFzZWQgdG9vbCBnZW5lcmljc1xufSk6IFRvb2w8YW55LCBhbnk+IHtcbiAgY29uc3QgeyBleGVjdXRlLCBjb250ZXh0U2NoZW1hLCBzdGF0ZVNjaGVtYSwgLi4ucmVzdCB9ID0gZGVmO1xuXG4gIGNvbnN0IHdyYXBwZWRFeGVjdXRlID0gZXhlY3V0ZVxuICAgID8gLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0V4cGxpY2l0QW55OiBpbnB1dCB0eXBlIGVyYXNlZCBhdCBydW50aW1lXG4gICAgICAoaW5wdXQ6IGFueSwgb3B0aW9uczogVG9vbEV4ZWN1dGlvbk9wdGlvbnMpID0+IHtcbiAgICAgICAgY29uc3QgY3R4ID0gb3B0aW9ucy5leHBlcmltZW50YWxfY29udGV4dCBhcyB7XG4gICAgICAgICAgY29udGV4dDogdW5rbm93bjtcbiAgICAgICAgICBzdGF0ZTogdW5rbm93bjtcbiAgICAgICAgICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgICAgICAgICBtZXNzYWdlczogVUlNZXNzYWdlW107XG4gICAgICAgICAgc2FuZGJveDogU2FuZGJveEluc3RhbmNlO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSAoXG4gICAgICAgICAgY29udGV4dFNjaGVtYSA/IGNvbnRleHRTY2hlbWEucGFyc2UoY3R4LmNvbnRleHQpIDogY3R4LmNvbnRleHRcbiAgICAgICAgKSBhcyB6LmluZmVyPFRDb250ZXh0U2NoZW1hPjtcblxuICAgICAgICBpZiAoc3RhdGVTY2hlbWEpIHtcbiAgICAgICAgICBzdGF0ZVNjaGVtYS5wYXJzZShjdHguc3RhdGUpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0YXRlID0gY3R4LnN0YXRlIGFzIHouaW5mZXI8VFN0YXRlU2NoZW1hPjtcblxuICAgICAgICByZXR1cm4gZXhlY3V0ZShpbnB1dCwge1xuICAgICAgICAgIHRvb2xDYWxsSWQ6IG9wdGlvbnMudG9vbENhbGxJZCxcbiAgICAgICAgICBhYm9ydFNpZ25hbDogb3B0aW9ucy5hYm9ydFNpZ25hbCEsXG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICBzZXNzaW9uSWQ6IGN0eC5zZXNzaW9uSWQsXG4gICAgICAgICAgbWVzc2FnZXM6IGN0eC5tZXNzYWdlcyxcbiAgICAgICAgICBzYW5kYm94OiBjdHguc2FuZGJveCxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgOiB1bmRlZmluZWQ7XG5cbiAgcmV0dXJuIHdyYXBwZWRFeGVjdXRlXG4gICAgPyBhaVRvb2woeyAuLi5yZXN0LCBleGVjdXRlOiB3cmFwcGVkRXhlY3V0ZSB9KVxuICAgIDogLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0V4cGxpY2l0QW55OiBuby1leGVjdXRlIHBhdGggbmVlZHMgY2FzdFxuICAgICAgYWlUb29sKHJlc3QgYXMgYW55KTtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEpTT05WYWx1ZSwgTW9kZWxNZXNzYWdlIH0gZnJvbSBcImFpXCI7XG5cbnR5cGUgUHJvdmlkZXJPcHRpb25zID0gUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgSlNPTlZhbHVlPj47XG5cbmNvbnN0IEFOVEhST1BJQ19NQVhfQ0FDSEVfQlJFQUtQT0lOVFNfUEVSX1JFUVVFU1QgPSA0O1xuXG5jb25zdCBDTEFVREVfTElLRV9NT0RFTF9NQVRDSEVSUyA9IFtcImNsYXVkZVwiLCBcImFudGhyb3BpY1wiXTtcblxuY29uc3QgQ0xBVURFX1BST01QVF9DQUNISU5HX1BST1ZJREVSX09QVElPTlM6IFByb3ZpZGVyT3B0aW9ucyA9IHtcbiAgYW50aHJvcGljOiB7XG4gICAgY2FjaGVDb250cm9sOiB7IHR5cGU6IFwiZXBoZW1lcmFsXCIgfSxcbiAgfSxcbiAgb3BlbnJvdXRlcjoge1xuICAgIGNhY2hlQ29udHJvbDogeyB0eXBlOiBcImVwaGVtZXJhbFwiIH0sXG4gIH0sXG4gIGJlZHJvY2s6IHtcbiAgICBjYWNoZVBvaW50OiB7IHR5cGU6IFwiZGVmYXVsdFwiIH0sXG4gIH0sXG4gIG9wZW5haUNvbXBhdGlibGU6IHtcbiAgICBjYWNoZV9jb250cm9sOiB7IHR5cGU6IFwiZXBoZW1lcmFsXCIgfSxcbiAgfSxcbiAgY29waWxvdDoge1xuICAgIGNvcGlsb3RfY2FjaGVfY29udHJvbDogeyB0eXBlOiBcImVwaGVtZXJhbFwiIH0sXG4gIH0sXG59O1xuXG5mdW5jdGlvbiBnZXRHYXRld2F5UHJvdmlkZXIobW9kZWw6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICBjb25zdCBzbGFzaEluZGV4ID0gbW9kZWwuaW5kZXhPZihcIi9cIik7XG4gIGlmIChzbGFzaEluZGV4ID09PSAtMSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiBtb2RlbC5zbGljZSgwLCBzbGFzaEluZGV4KTtcbn1cblxuZnVuY3Rpb24gY291bnRBbnRocm9waWNDYWNoZUJyZWFrcG9pbnRzKG1lc3NhZ2VzOiBNb2RlbE1lc3NhZ2VbXSk6IG51bWJlciB7XG4gIGxldCBjb3VudCA9IDA7XG4gIGZvciAoY29uc3QgbWVzc2FnZSBvZiBtZXNzYWdlcykge1xuICAgIGNvbnN0IHByb3ZpZGVyT3B0aW9ucyA9IChtZXNzYWdlIGFzIHsgcHJvdmlkZXJPcHRpb25zPzogUHJvdmlkZXJPcHRpb25zIH0pXG4gICAgICAucHJvdmlkZXJPcHRpb25zO1xuICAgIGlmIChwcm92aWRlck9wdGlvbnM/LmFudGhyb3BpYz8uY2FjaGVDb250cm9sKSB7XG4gICAgICBjb3VudCArPSAxO1xuICAgIH1cbiAgICBpZiAoQXJyYXkuaXNBcnJheShtZXNzYWdlLmNvbnRlbnQpKSB7XG4gICAgICBmb3IgKGNvbnN0IHBhcnQgb2YgbWVzc2FnZS5jb250ZW50KSB7XG4gICAgICAgIGNvbnN0IHBhcnRQcm92aWRlck9wdGlvbnMgPSAoXG4gICAgICAgICAgcGFydCBhcyB7IHByb3ZpZGVyT3B0aW9ucz86IFByb3ZpZGVyT3B0aW9ucyB9XG4gICAgICAgICkucHJvdmlkZXJPcHRpb25zO1xuICAgICAgICBpZiAocGFydFByb3ZpZGVyT3B0aW9ucz8uYW50aHJvcGljPy5jYWNoZUNvbnRyb2wpIHtcbiAgICAgICAgICBjb3VudCArPSAxO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBjb3VudDtcbn1cblxuZnVuY3Rpb24gaXNDbGF1ZGVMaWtlTW9kZWwobW9kZWw6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBjb25zdCBsb3dlciA9IG1vZGVsLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiBDTEFVREVfTElLRV9NT0RFTF9NQVRDSEVSUy5zb21lKChtKSA9PiBsb3dlci5pbmNsdWRlcyhtKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZVByb3ZpZGVyT3B0aW9ucyhvcHRzOiB7XG4gIGN1cnJlbnQ6IFByb3ZpZGVyT3B0aW9ucyB8IHVuZGVmaW5lZDtcbiAgcGF0Y2g6IFByb3ZpZGVyT3B0aW9ucztcbn0pOiBQcm92aWRlck9wdGlvbnMge1xuICBjb25zdCBuZXh0OiBQcm92aWRlck9wdGlvbnMgPSB7IC4uLihvcHRzLmN1cnJlbnQgPz8ge30pIH07XG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKG9wdHMucGF0Y2gpKSB7XG4gICAgbmV4dFtrZXldID0geyAuLi4obmV4dFtrZXldID8/IHt9KSwgLi4udmFsdWUgfTtcbiAgfVxuICByZXR1cm4gbmV4dDtcbn1cblxuZnVuY3Rpb24gaXNDYWNoZWFibGVDbGF1ZGVQYXJ0KHBhcnQ6IHVua25vd24pOiBib29sZWFuIHtcbiAgaWYgKCFwYXJ0IHx8IHR5cGVvZiBwYXJ0ICE9PSBcIm9iamVjdFwiKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKFwidHlwZVwiIGluIHBhcnQgJiYgKHBhcnQgYXMgeyB0eXBlPzogdW5rbm93biB9KS50eXBlID09PSBcInRleHRcIikge1xuICAgIGNvbnN0IHRleHQgPSAocGFydCBhcyB7IHRleHQ/OiB1bmtub3duIH0pLnRleHQ7XG4gICAgaWYgKHR5cGVvZiB0ZXh0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICByZXR1cm4gdGV4dC50cmltKCkubGVuZ3RoID4gMDtcbiAgICB9XG4gIH1cblxuICBpZiAoXCJ0eXBlXCIgaW4gcGFydCkge1xuICAgIGNvbnN0IHR5cGUgPSAocGFydCBhcyB7IHR5cGU/OiB1bmtub3duIH0pLnR5cGU7XG4gICAgaWYgKHR5cGUgPT09IFwidGhpbmtpbmdcIiB8fCB0eXBlID09PSBcInJlYXNvbmluZ1wiKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGhhc0NhY2hlYWJsZUNvbnRlbnQobWVzc2FnZTogTW9kZWxNZXNzYWdlKTogYm9vbGVhbiB7XG4gIGlmICh0eXBlb2YgbWVzc2FnZS5jb250ZW50ID09PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIG1lc3NhZ2UuY29udGVudC50cmltKCkubGVuZ3RoID4gMDtcbiAgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KG1lc3NhZ2UuY29udGVudCkpIHtcbiAgICByZXR1cm4gbWVzc2FnZS5jb250ZW50LnNvbWUoKHBhcnQpID0+IGlzQ2FjaGVhYmxlQ2xhdWRlUGFydChwYXJ0KSk7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGZpbmRMYXN0Q2FjaGVhYmxlUGFydEluZGV4KGNvbnRlbnQ6IHVua25vd25bXSk6IG51bWJlciB8IG51bGwge1xuICBmb3IgKGxldCBpID0gY29udGVudC5sZW5ndGggLSAxOyBpID49IDA7IGkgLT0gMSkge1xuICAgIGlmIChpc0NhY2hlYWJsZUNsYXVkZVBhcnQoY29udGVudFtpXSkpIHtcbiAgICAgIHJldHVybiBpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gc2VsZWN0Q2xhdWRlQ2FjaGluZ1RhcmdldHMobWVzc2FnZXM6IE1vZGVsTWVzc2FnZVtdKTogbnVtYmVyW10ge1xuICBjb25zdCBzeXN0ZW1JbmRpY2VzOiBudW1iZXJbXSA9IFtdO1xuICBjb25zdCBmaW5hbEluZGljZXM6IG51bWJlcltdID0gW107XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBtZXNzYWdlcy5sZW5ndGggJiYgc3lzdGVtSW5kaWNlcy5sZW5ndGggPCAyOyBpICs9IDEpIHtcbiAgICBjb25zdCBtZXNzYWdlID0gbWVzc2FnZXNbaV07XG4gICAgaWYgKG1lc3NhZ2Uucm9sZSA9PT0gXCJzeXN0ZW1cIiAmJiBoYXNDYWNoZWFibGVDb250ZW50KG1lc3NhZ2UpKSB7XG4gICAgICBzeXN0ZW1JbmRpY2VzLnB1c2goaSk7XG4gICAgfVxuICB9XG5cbiAgZm9yIChsZXQgaSA9IG1lc3NhZ2VzLmxlbmd0aCAtIDE7IGkgPj0gMCAmJiBmaW5hbEluZGljZXMubGVuZ3RoIDwgMjsgaSAtPSAxKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IG1lc3NhZ2VzW2ldO1xuICAgIGlmIChtZXNzYWdlLnJvbGUgIT09IFwic3lzdGVtXCIgJiYgaGFzQ2FjaGVhYmxlQ29udGVudChtZXNzYWdlKSkge1xuICAgICAgZmluYWxJbmRpY2VzLnB1c2goaSk7XG4gICAgfVxuICB9XG5cbiAgZmluYWxJbmRpY2VzLnJldmVyc2UoKTtcblxuICByZXR1cm4gWy4uLnN5c3RlbUluZGljZXMsIC4uLmZpbmFsSW5kaWNlc107XG59XG5cbmZ1bmN0aW9uIGFwcGx5Q2xhdWRlUHJvbXB0Q2FjaGluZyhvcHRzOiB7XG4gIG1lc3NhZ2VzOiBNb2RlbE1lc3NhZ2VbXTtcbiAgcHJvdmlkZXJJZDogc3RyaW5nIHwgbnVsbDtcbiAgbWF4QnJlYWtwb2ludHNQZXJSZXF1ZXN0OiBudW1iZXI7XG59KTogTW9kZWxNZXNzYWdlW10ge1xuICBjb25zdCBleGlzdGluZ0JyZWFrcG9pbnRzID0gY291bnRBbnRocm9waWNDYWNoZUJyZWFrcG9pbnRzKG9wdHMubWVzc2FnZXMpO1xuICBjb25zdCByZW1haW5pbmdCdWRnZXQgPSBNYXRoLm1heChcbiAgICAwLFxuICAgIG9wdHMubWF4QnJlYWtwb2ludHNQZXJSZXF1ZXN0IC0gZXhpc3RpbmdCcmVha3BvaW50c1xuICApO1xuXG4gIGlmIChyZW1haW5pbmdCdWRnZXQgPT09IDApIHtcbiAgICByZXR1cm4gb3B0cy5tZXNzYWdlcztcbiAgfVxuXG4gIGNvbnN0IHRhcmdldEluZGljZXMgPSBzZWxlY3RDbGF1ZGVDYWNoaW5nVGFyZ2V0cyhvcHRzLm1lc3NhZ2VzKS5zbGljZShcbiAgICAwLFxuICAgIHJlbWFpbmluZ0J1ZGdldFxuICApO1xuICBpZiAodGFyZ2V0SW5kaWNlcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gb3B0cy5tZXNzYWdlcztcbiAgfVxuXG4gIGNvbnN0IHVzZU1lc3NhZ2VMZXZlbE9wdGlvbnMgPVxuICAgIG9wdHMucHJvdmlkZXJJZCA9PT0gXCJhbnRocm9waWNcIiB8fFxuICAgIEJvb2xlYW4ob3B0cy5wcm92aWRlcklkPy5pbmNsdWRlcyhcImJlZHJvY2tcIikpO1xuXG4gIGNvbnN0IG5leHRNZXNzYWdlcyA9IG9wdHMubWVzc2FnZXMuc2xpY2UoKTtcblxuICBmb3IgKGNvbnN0IG1lc3NhZ2VJbmRleCBvZiB0YXJnZXRJbmRpY2VzKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IG5leHRNZXNzYWdlc1ttZXNzYWdlSW5kZXhdO1xuXG4gICAgY29uc3Qgc2hvdWxkVXNlQ29udGVudE9wdGlvbnMgPVxuICAgICAgIXVzZU1lc3NhZ2VMZXZlbE9wdGlvbnMgJiZcbiAgICAgIEFycmF5LmlzQXJyYXkobWVzc2FnZS5jb250ZW50KSAmJlxuICAgICAgbWVzc2FnZS5jb250ZW50Lmxlbmd0aCA+IDA7XG5cbiAgICBpZiAoc2hvdWxkVXNlQ29udGVudE9wdGlvbnMgJiYgQXJyYXkuaXNBcnJheShtZXNzYWdlLmNvbnRlbnQpKSB7XG4gICAgICBjb25zdCBwYXJ0SW5kZXggPSBmaW5kTGFzdENhY2hlYWJsZVBhcnRJbmRleChtZXNzYWdlLmNvbnRlbnQpO1xuICAgICAgaWYgKHBhcnRJbmRleCAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBwYXJ0ID0gbWVzc2FnZS5jb250ZW50W3BhcnRJbmRleF07XG4gICAgICAgIGlmIChwYXJ0ICYmIHR5cGVvZiBwYXJ0ID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgY29uc3QgcGFydFByb3ZpZGVyT3B0aW9ucyA9IChcbiAgICAgICAgICAgIHBhcnQgYXMgeyBwcm92aWRlck9wdGlvbnM/OiBQcm92aWRlck9wdGlvbnMgfVxuICAgICAgICAgICkucHJvdmlkZXJPcHRpb25zO1xuXG4gICAgICAgICAgY29uc3QgbmV4dENvbnRlbnQgPSBtZXNzYWdlLmNvbnRlbnQuc2xpY2UoKTtcbiAgICAgICAgICBuZXh0Q29udGVudFtwYXJ0SW5kZXhdID0ge1xuICAgICAgICAgICAgLi4uKHBhcnQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pLFxuICAgICAgICAgICAgcHJvdmlkZXJPcHRpb25zOiBtZXJnZVByb3ZpZGVyT3B0aW9ucyh7XG4gICAgICAgICAgICAgIGN1cnJlbnQ6IHBhcnRQcm92aWRlck9wdGlvbnMsXG4gICAgICAgICAgICAgIHBhdGNoOiBDTEFVREVfUFJPTVBUX0NBQ0hJTkdfUFJPVklERVJfT1BUSU9OUyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIH0gYXMgKHR5cGVvZiBtZXNzYWdlLmNvbnRlbnQpW251bWJlcl07XG5cbiAgICAgICAgICBuZXh0TWVzc2FnZXNbbWVzc2FnZUluZGV4XSA9IHtcbiAgICAgICAgICAgIC4uLm1lc3NhZ2UsXG4gICAgICAgICAgICBjb250ZW50OiBuZXh0Q29udGVudCxcbiAgICAgICAgICB9IGFzIE1vZGVsTWVzc2FnZTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG1lc3NhZ2VQcm92aWRlck9wdGlvbnMgPSAoXG4gICAgICBtZXNzYWdlIGFzIHsgcHJvdmlkZXJPcHRpb25zPzogUHJvdmlkZXJPcHRpb25zIH1cbiAgICApLnByb3ZpZGVyT3B0aW9ucztcblxuICAgIG5leHRNZXNzYWdlc1ttZXNzYWdlSW5kZXhdID0ge1xuICAgICAgLi4ubWVzc2FnZSxcbiAgICAgIHByb3ZpZGVyT3B0aW9uczogbWVyZ2VQcm92aWRlck9wdGlvbnMoe1xuICAgICAgICBjdXJyZW50OiBtZXNzYWdlUHJvdmlkZXJPcHRpb25zLFxuICAgICAgICBwYXRjaDogQ0xBVURFX1BST01QVF9DQUNISU5HX1BST1ZJREVSX09QVElPTlMsXG4gICAgICB9KSxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIG5leHRNZXNzYWdlcztcbn1cblxuZXhwb3J0IHR5cGUgUHJvbXB0Q2FjaGluZ1Jlc3VsdCA9IHtcbiAgbWVzc2FnZXM6IE1vZGVsTWVzc2FnZVtdO1xuICBwcm92aWRlck9wdGlvbnM6IFByb3ZpZGVyT3B0aW9ucztcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBseVByb21wdENhY2hpbmdUb01vZGVsUmVxdWVzdChvcHRzOiB7XG4gIG1vZGVsOiBzdHJpbmc7XG4gIHNlc3Npb25JZDogc3RyaW5nO1xuICBtZXNzYWdlczogTW9kZWxNZXNzYWdlW107XG4gIGFudGhyb3BpYz86IHsgbWF4QnJlYWtwb2ludHNQZXJSZXF1ZXN0PzogbnVtYmVyIH07XG4gIG9wZW5haT86IHsgc2V0UHJvbXB0Q2FjaGVLZXk/OiBib29sZWFuIH07XG59KTogUHJvbXB0Q2FjaGluZ1Jlc3VsdCB7XG4gIGNvbnN0IHByb3ZpZGVyID0gZ2V0R2F0ZXdheVByb3ZpZGVyKG9wdHMubW9kZWwpO1xuXG4gIGNvbnN0IHByb3ZpZGVyT3B0aW9uczogUHJvdmlkZXJPcHRpb25zID0ge307XG5cbiAgaWYgKFxuICAgIChwcm92aWRlciA9PT0gXCJvcGVuYWlcIiB8fCBwcm92aWRlciA9PT0gXCJhenVyZVwiKSAmJlxuICAgIG9wdHMub3BlbmFpPy5zZXRQcm9tcHRDYWNoZUtleSAhPT0gZmFsc2VcbiAgKSB7XG4gICAgcHJvdmlkZXJPcHRpb25zLm9wZW5haSA9IHsgcHJvbXB0Q2FjaGVLZXk6IG9wdHMuc2Vzc2lvbklkIH07XG4gIH1cblxuICBjb25zdCBtYXhCcmVha3BvaW50c1BlclJlcXVlc3QgPVxuICAgIG9wdHMuYW50aHJvcGljPy5tYXhCcmVha3BvaW50c1BlclJlcXVlc3QgPz9cbiAgICBBTlRIUk9QSUNfTUFYX0NBQ0hFX0JSRUFLUE9JTlRTX1BFUl9SRVFVRVNUO1xuXG4gIGNvbnN0IGNhY2hlZE1lc3NhZ2VzID0gaXNDbGF1ZGVMaWtlTW9kZWwob3B0cy5tb2RlbClcbiAgICA/IGFwcGx5Q2xhdWRlUHJvbXB0Q2FjaGluZyh7XG4gICAgICAgIG1lc3NhZ2VzOiBvcHRzLm1lc3NhZ2VzLFxuICAgICAgICBwcm92aWRlcklkOiBwcm92aWRlcixcbiAgICAgICAgbWF4QnJlYWtwb2ludHNQZXJSZXF1ZXN0LFxuICAgICAgfSlcbiAgICA6IG9wdHMubWVzc2FnZXM7XG5cbiAgcmV0dXJuIHtcbiAgICBtZXNzYWdlczogY2FjaGVkTWVzc2FnZXMsXG4gICAgcHJvdmlkZXJPcHRpb25zLFxuICB9O1xufVxuIiwgImltcG9ydCB0eXBlIHsgVUlNZXNzYWdlQ2h1bmsgfSBmcm9tIFwiYWlcIjtcbmltcG9ydCAqIGFzIGVycm9yZSBmcm9tIFwiZXJyb3JlXCI7XG5pbXBvcnQgeyBTZXNzaW9uTm90Rm91bmRFcnJvciB9IGZyb20gXCIuLi9lcnJvcnNcIjtcbmltcG9ydCB0eXBlIHsgU2Vzc2lvbkNvbnRleHQgfSBmcm9tIFwiLi9oYW5kbGVcIjtcbmltcG9ydCB7IGdldEFjdGl2ZVJ1bnMsIHJlcGxheUFjdGl2ZVJ1biB9IGZyb20gXCIuL3NlbmRcIjtcblxuZXhwb3J0IHR5cGUgU3RyZWFtT3B0aW9ucyA9IHtcbiAgbWVzc2FnZUlkPzogc3RyaW5nO1xuICBzdGFydEluZGV4PzogbnVtYmVyO1xufTtcblxuZXhwb3J0IHR5cGUgV29ya2Zsb3dSdW5MaWtlID0ge1xuICBnZXRSZWFkYWJsZShvcHRpb25zPzogeyBzdGFydEluZGV4PzogbnVtYmVyIH0pOiBSZWFkYWJsZVN0cmVhbTtcbn07XG5cbmZ1bmN0aW9uIGlzV29ya2Zsb3dSdW4oYXJnOiB1bmtub3duKTogYXJnIGlzIFdvcmtmbG93UnVuTGlrZSB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIGFyZyA9PT0gXCJvYmplY3RcIiAmJlxuICAgIGFyZyAhPT0gbnVsbCAmJlxuICAgIFwiZ2V0UmVhZGFibGVcIiBpbiBhcmcgJiZcbiAgICB0eXBlb2YgKGFyZyBhcyBXb3JrZmxvd1J1bkxpa2UpLmdldFJlYWRhYmxlID09PSBcImZ1bmN0aW9uXCJcbiAgKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHN0cmVhbShcbiAgc2Vzc2lvbkNvbnRleHQ6IFNlc3Npb25Db250ZXh0LFxuICBydW5Pck9wdHM/OiBXb3JrZmxvd1J1bkxpa2UgfCBTdHJlYW1PcHRpb25zXG4pOiBQcm9taXNlPFJlYWRhYmxlU3RyZWFtPFVJTWVzc2FnZUNodW5rPj4ge1xuICBpZiAoaXNXb3JrZmxvd1J1bihydW5Pck9wdHMpKSB7XG4gICAgY29uc3QgcmVhZGVyID0gcnVuT3JPcHRzLmdldFJlYWRhYmxlKCkuZ2V0UmVhZGVyKCk7XG4gICAgLy8gYXdhaXQgZm9yIHRoZSBmaXJzdCBjaHVuayB0byBiZSByZWFkeSBiZWZvcmUgZmluaXNoaW5nIHRoZSB3b3JrZmxvdyB0byBhdm9pZCByYWNlIGNvbmRpdGlvbnNcbiAgICBhd2FpdCByZWFkZXIucmVhZCgpLmNhdGNoKCgpID0+IHtcbiAgICAgIHRocm93IG5ldyBTdHJlYW1FcnJvcih7XG4gICAgICAgIGlkOiBzZXNzaW9uQ29udGV4dC5zZXNzaW9uSWQsXG4gICAgICAgIHJlYXNvbjogXCJzdHJlYW0oKSBmYWlsZWQgdG8gcmVhZCBmaXJzdCBjaHVuayBmcm9tIHdvcmtmbG93IHJ1blwiLFxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmVhZGVyLmNhbmNlbCgpO1xuXG4gICAgcmV0dXJuIHJ1bk9yT3B0cy5nZXRSZWFkYWJsZSgpO1xuICB9XG5cbiAgY29uc3Qgb3B0cyA9IHJ1bk9yT3B0cztcbiAgY29uc3Qgc2Vzc2lvbiA9IGF3YWl0IHNlc3Npb25Db250ZXh0LmFnZW50LnN0b3JhZ2Uuc2Vzc2lvbi5nZXQoXG4gICAgc2Vzc2lvbkNvbnRleHQuc2Vzc2lvbklkXG4gICk7XG4gIGlmICghc2Vzc2lvbikge1xuICAgIHRocm93IG5ldyBTZXNzaW9uTm90Rm91bmRFcnJvcih7IGlkOiBzZXNzaW9uQ29udGV4dC5zZXNzaW9uSWQgfSk7XG4gIH1cbiAgY29uc3QgbWVzc2FnZUlkID0gb3B0cz8ubWVzc2FnZUlkID8/IHNlc3Npb24ubGFzdE1lc3NhZ2VJZDtcbiAgaWYgKCFtZXNzYWdlSWQpIHtcbiAgICB0aHJvdyBuZXcgU3RyZWFtRXJyb3Ioe1xuICAgICAgaWQ6IHNlc3Npb25Db250ZXh0LnNlc3Npb25JZCxcbiAgICAgIHJlYXNvbjogXCJObyBtZXNzYWdlIHRvIHN0cmVhbVwiLFxuICAgIH0pO1xuICB9XG5cbiAgY29uc3QgYWN0aXZlUnVucyA9IGdldEFjdGl2ZVJ1bnMoKTtcbiAgY29uc3QgYWN0aXZlID0gYWN0aXZlUnVucy5nZXQobWVzc2FnZUlkKTtcbiAgaWYgKCFhY3RpdmUpIHtcbiAgICBjb25zdCBtZXNzYWdlID0gYXdhaXQgc2Vzc2lvbkNvbnRleHQuYWdlbnQuc3RvcmFnZS5tZXNzYWdlLmdldChtZXNzYWdlSWQpO1xuICAgIGlmIChtZXNzYWdlPy53b3JrZmxvd1J1bklkKSB7XG4gICAgICBjb25zdCByZWFkYWJsZSA9IGF3YWl0IGltcG9ydChcIndvcmtmbG93L2FwaVwiKVxuICAgICAgICAudGhlbigoeyBnZXRSdW4gfSkgPT4gZ2V0UnVuKG1lc3NhZ2Uud29ya2Zsb3dSdW5JZCEpLmdldFJlYWRhYmxlKCkpXG4gICAgICAgIC5jYXRjaCgoKSA9PiB1bmRlZmluZWQpO1xuICAgICAgaWYgKHJlYWRhYmxlKSB7XG4gICAgICAgIHJldHVybiByZWFkYWJsZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgU3RyZWFtRXJyb3Ioe1xuICAgICAgaWQ6IHNlc3Npb25Db250ZXh0LnNlc3Npb25JZCxcbiAgICAgIHJlYXNvbjogYE5vIGFjdGl2ZSBydW4gZm9yIG1lc3NhZ2UgJHttZXNzYWdlSWR9YCxcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiByZXBsYXlBY3RpdmVSdW4oYWN0aXZlLCBvcHRzPy5zdGFydEluZGV4KTtcbn1cblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogRXJyb3JzXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbmV4cG9ydCBjbGFzcyBTdHJlYW1FcnJvciBleHRlbmRzIGVycm9yZS5jcmVhdGVUYWdnZWRFcnJvcih7XG4gIG5hbWU6IFwiU3RyZWFtRXJyb3JcIixcbiAgbWVzc2FnZTogXCJTdHJlYW0gZmFpbGVkIGZvciBzZXNzaW9uICRpZDogJHJlYXNvblwiLFxufSkge31cbiIsICJpbXBvcnQgdHlwZSB7IFNlc3Npb24gfSBmcm9tIFwiLi4vc3RvcmFnZS90eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBTZXNzaW9uQ29udGV4dCB9IGZyb20gXCIuL2hhbmRsZVwiO1xuXG5leHBvcnQgdHlwZSBVcGRhdGVPcHRpb25zPFxuICBUU3RhdGUgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuPiA9IFBhcnRpYWw8T21pdDxTZXNzaW9uLCBcImlkXCIgfCBcImNyZWF0ZWRBdFwiIHwgXCJ1cGRhdGVkQXRcIiB8IFwic3RhdGVcIj4+ICYge1xuICBzdGF0ZT86IFRTdGF0ZTtcbn07XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB1cGRhdGU8XG4gIFRTdGF0ZSBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4+KFxuICBzZXNzaW9uQ29udGV4dDogU2Vzc2lvbkNvbnRleHQsXG4gIG9wdHM6IFVwZGF0ZU9wdGlvbnM8VFN0YXRlPlxuKSB7XG4gIFwidXNlIHN0ZXBcIjtcbiAgY29uc3QgdXBkYXRlcyA9IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBPYmplY3QuZW50cmllcyhvcHRzKS5maWx0ZXIoKFssIHZhbHVlXSkgPT4gdmFsdWUgIT09IHVuZGVmaW5lZClcbiAgKTtcblxuICBpZiAoT2JqZWN0LmtleXModXBkYXRlcykubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgYXdhaXQgc2Vzc2lvbkNvbnRleHQuYWdlbnQuc3RvcmFnZS5zZXNzaW9uLnVwZGF0ZShzZXNzaW9uQ29udGV4dC5zZXNzaW9uSWQsIHtcbiAgICAuLi51cGRhdGVzLFxuICAgIHVwZGF0ZWRBdDogRGF0ZS5ub3coKSxcbiAgfSk7XG59XG4iLCAiaW1wb3J0IHsgY29tcHV0ZVNlc3Npb25Vc2FnZSwgdHlwZSBTZXNzaW9uVXNhZ2UgfSBmcm9tIFwiLi4vdXRpbHMvdXNhZ2VcIjtcbmltcG9ydCB0eXBlIHsgU2Vzc2lvbkNvbnRleHQgfSBmcm9tIFwiLi9oYW5kbGVcIjtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHVzYWdlKFxuICBzZXNzaW9uQ29udGV4dDogU2Vzc2lvbkNvbnRleHRcbik6IFByb21pc2U8U2Vzc2lvblVzYWdlPiB7XG4gIFwidXNlIHN0ZXBcIjtcbiAgY29uc3QgbWVzc2FnZXMgPSBhd2FpdCBzZXNzaW9uQ29udGV4dC5hZ2VudC5zdG9yYWdlLm1lc3NhZ2UubGlzdEJ5U2Vzc2lvbihcbiAgICBzZXNzaW9uQ29udGV4dC5zZXNzaW9uSWRcbiAgKTtcbiAgcmV0dXJuIGNvbXB1dGVTZXNzaW9uVXNhZ2UobWVzc2FnZXMpO1xufVxuIiwgImltcG9ydCB7IFdPUktGTE9XX0RFU0VSSUFMSVpFLCBXT1JLRkxPV19TRVJJQUxJWkUgfSBmcm9tIFwiQHdvcmtmbG93L3NlcmRlXCI7XG5pbXBvcnQgdHlwZSB7IE1lc3NhZ2UsIFBhcnQsIFNhbmRib3gsIFNlc3Npb24sIFNldHVwIH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuLy8gXHUyNTAwXHUyNTAwXHUyNTAwIFN0b3JhZ2VIYW5kbGVycyAocHVibGljLCBmbGF0KSBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuZXhwb3J0IHR5cGUgU3RvcmFnZUhhbmRsZXJzID0ge1xuICBcInNlc3Npb24uZ2V0XCIocDogeyBpZDogc3RyaW5nIH0pOiBQcm9taXNlPFNlc3Npb24gfCBudWxsPjtcbiAgXCJzZXNzaW9uLnNldFwiKHA6IHsgaWQ6IHN0cmluZzsgdmFsdWU6IFNlc3Npb24gfSk6IFByb21pc2U8dm9pZD47XG4gIFwic2Vzc2lvbi51cGRhdGVcIihwOiB7XG4gICAgaWQ6IHN0cmluZztcbiAgICB1cGRhdGVzOiBQYXJ0aWFsPFNlc3Npb24+O1xuICB9KTogUHJvbWlzZTxTZXNzaW9uPjtcblxuICBcIm1lc3NhZ2UuZ2V0XCIocDogeyBpZDogc3RyaW5nIH0pOiBQcm9taXNlPE1lc3NhZ2UgfCBudWxsPjtcbiAgXCJtZXNzYWdlLnNldFwiKHA6IHsgaWQ6IHN0cmluZzsgdmFsdWU6IE1lc3NhZ2UgfSk6IFByb21pc2U8dm9pZD47XG4gIFwibWVzc2FnZS51cGRhdGVcIihwOiB7XG4gICAgaWQ6IHN0cmluZztcbiAgICB1cGRhdGVzOiBQYXJ0aWFsPE1lc3NhZ2U+O1xuICB9KTogUHJvbWlzZTxNZXNzYWdlPjtcbiAgXCJtZXNzYWdlLmxpc3RCeVNlc3Npb25cIihwOiB7IHNlc3Npb25JZDogc3RyaW5nIH0pOiBQcm9taXNlPE1lc3NhZ2VbXT47XG5cbiAgXCJwYXJ0LmdldFwiKHA6IHsgaWQ6IHN0cmluZyB9KTogUHJvbWlzZTxQYXJ0IHwgbnVsbD47XG4gIFwicGFydC5zZXRcIihwOiB7IGlkOiBzdHJpbmc7IHZhbHVlOiBQYXJ0IH0pOiBQcm9taXNlPHZvaWQ+O1xuICBcInBhcnQubGlzdEJ5U2Vzc2lvblwiKHA6IHsgc2Vzc2lvbklkOiBzdHJpbmcgfSk6IFByb21pc2U8UGFydFtdPjtcblxuICBcInNhbmRib3guZ2V0XCIocDogeyBpZDogc3RyaW5nIH0pOiBQcm9taXNlPFNhbmRib3ggfCBudWxsPjtcbiAgXCJzYW5kYm94LnNldFwiKHA6IHsgaWQ6IHN0cmluZzsgdmFsdWU6IFNhbmRib3ggfSk6IFByb21pc2U8dm9pZD47XG4gIFwic2FuZGJveC51cGRhdGVcIihwOiB7XG4gICAgaWQ6IHN0cmluZztcbiAgICB1cGRhdGVzOiBQYXJ0aWFsPFNhbmRib3g+O1xuICB9KTogUHJvbWlzZTxTYW5kYm94PjtcblxuICBcInNldHVwLmdldFwiKHA6IHsgaWQ6IHN0cmluZyB9KTogUHJvbWlzZTxTZXR1cCB8IG51bGw+O1xuICBcInNldHVwLnNldFwiKHA6IHsgaWQ6IHN0cmluZzsgdmFsdWU6IFNldHVwIH0pOiBQcm9taXNlPHZvaWQ+O1xufTtcblxuLy8gXHUyNTAwXHUyNTAwXHUyNTAwIFN0b3JhZ2VDYWxsIChkZXJpdmVkIGZyb20gU3RvcmFnZUhhbmRsZXJzKSBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuZXhwb3J0IHR5cGUgU3RvcmFnZUNhbGwgPSB7XG4gIFtLIGluIGtleW9mIFN0b3JhZ2VIYW5kbGVyc106IHsgbWV0aG9kOiBLIH0gJiBQYXJhbWV0ZXJzPFxuICAgIFN0b3JhZ2VIYW5kbGVyc1tLXVxuICA+WzBdO1xufVtrZXlvZiBTdG9yYWdlSGFuZGxlcnNdO1xuXG4vLyBcdTI1MDBcdTI1MDBcdTI1MDAgU3RvcmFnZVN0ZXAgKHNlcmlhbGl6YWJsZSBhY3Jvc3Mgd29ya2Zsb3cgYm91bmRhcnkpIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG5leHBvcnQgY2xhc3MgU3RvcmFnZVN0ZXAge1xuICBldmVudDogU3RvcmFnZUNhbGw7XG5cbiAgY29uc3RydWN0b3IoZXZlbnQ6IFN0b3JhZ2VDYWxsKSB7XG4gICAgdGhpcy5ldmVudCA9IGV2ZW50O1xuICB9XG5cbiAgc3RhdGljIFtXT1JLRkxPV19TRVJJQUxJWkVdKGluc3RhbmNlOiBTdG9yYWdlU3RlcCkge1xuICAgIHJldHVybiB7IGV2ZW50OiBpbnN0YW5jZS5ldmVudCB9O1xuICB9XG5cbiAgc3RhdGljIFtXT1JLRkxPV19ERVNFUklBTElaRV0oZGF0YTogeyBldmVudDogU3RvcmFnZUNhbGwgfSkge1xuICAgIHJldHVybiBuZXcgU3RvcmFnZVN0ZXAoZGF0YS5ldmVudCk7XG4gIH1cblxuICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRXhwbGljaXRBbnk6IHNhZmUgZGlzcGF0Y2ggXHUyMDE0IGV2ZW50Lm1ldGhvZCBzZWxlY3RzIHRoZSBtYXRjaGluZyBoYW5kbGVyXG4gIG9uKGhhbmRsZXJzOiBTdG9yYWdlSGFuZGxlcnMpOiBQcm9taXNlPGFueT4ge1xuICAgIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9FeHBsaWNpdEFueTogc2VlIGFib3ZlXG4gICAgcmV0dXJuIChoYW5kbGVyc1t0aGlzLmV2ZW50Lm1ldGhvZF0gYXMgYW55KSh0aGlzLmV2ZW50KTtcbiAgfVxufVxuXG4vKipcbiAqIEEgc2luZ2xlIGZ1bmN0aW9uIHRoYXQgaGFuZGxlcyBhbGwgc3RvcmFnZSBvcGVyYXRpb25zLiBJbnRlbmRlZCB0byBiZVxuICogbWFya2VkIHdpdGggYFwidXNlIHN0ZXBcImAgc28gdGhhdCBpdHMgYm9keSAoYW5kIE5vZGUuanMtZGVwZW5kZW50XG4gKiBpbXBvcnRzIGxpa2UgZGF0YWJhc2UgY2xpZW50cykgaXMgZXh0cmFjdGVkIGJ5IHRoZSB3b3JrZmxvdyBidW5kbGVyXG4gKiBhbmQgcnVucyBzZXJ2ZXItc2lkZS5cbiAqXG4gKiBUaGUgc3RlcCByZWNlaXZlcyBhIGBTdG9yYWdlU3RlcGAgaW5zdGFuY2UgKHNlcmlhbGl6YWJsZSB2aWFcbiAqIGBAd29ya2Zsb3cvc2VyZGVgKSBhbmQgc2hvdWxkIGNhbGwgYHN0ZXAuaGFuZGxlKHsgLi4uIH0pYCB3aXRoIGFcbiAqIGBTdG9yYWdlSGFuZGxlcnNgIG1hcC5cbiAqL1xuLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0V4cGxpY2l0QW55OiBzdGVwIGZ1bmN0aW9uIGlzIGEgZGlzcGF0Y2hlcjsgdHlwZSBzYWZldHkgaXMgYXQgdGhlIGhhbmRsZXJzIGxldmVsXG5leHBvcnQgdHlwZSBTdG9yYWdlU3RlcEZ1bmN0aW9uID0gKHN0b3JlOiBTdG9yYWdlU3RlcCkgPT4gUHJvbWlzZTxhbnk+O1xuXG4vLyBcdTI1MDBcdTI1MDBcdTI1MDAgU3RvcmFnZSAoaW50ZXJuYWwsIG5lc3RlZCkgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RvcmFnZSB7XG4gIHNlc3Npb246IHtcbiAgICBnZXQoa2V5OiBzdHJpbmcpOiBQcm9taXNlPFNlc3Npb24gfCBudWxsPjtcbiAgICBzZXQoa2V5OiBzdHJpbmcsIHZhbHVlOiBTZXNzaW9uKTogUHJvbWlzZTx2b2lkPjtcbiAgICB1cGRhdGUoa2V5OiBzdHJpbmcsIHVwZGF0ZXM6IFBhcnRpYWw8U2Vzc2lvbj4pOiBQcm9taXNlPFNlc3Npb24+O1xuICB9O1xuICBtZXNzYWdlOiB7XG4gICAgZ2V0KGtleTogc3RyaW5nKTogUHJvbWlzZTxNZXNzYWdlIHwgbnVsbD47XG4gICAgc2V0KGtleTogc3RyaW5nLCB2YWx1ZTogTWVzc2FnZSk6IFByb21pc2U8dm9pZD47XG4gICAgdXBkYXRlKGtleTogc3RyaW5nLCB1cGRhdGVzOiBQYXJ0aWFsPE1lc3NhZ2U+KTogUHJvbWlzZTxNZXNzYWdlPjtcbiAgICBsaXN0QnlTZXNzaW9uKHNlc3Npb25JZDogc3RyaW5nKTogUHJvbWlzZTxNZXNzYWdlW10+O1xuICB9O1xuICBwYXJ0OiB7XG4gICAgZ2V0KGtleTogc3RyaW5nKTogUHJvbWlzZTxQYXJ0IHwgbnVsbD47XG4gICAgc2V0KGtleTogc3RyaW5nLCB2YWx1ZTogUGFydCk6IFByb21pc2U8dm9pZD47XG4gICAgbGlzdEJ5U2Vzc2lvbihzZXNzaW9uSWQ6IHN0cmluZyk6IFByb21pc2U8UGFydFtdPjtcbiAgfTtcbiAgc2FuZGJveDoge1xuICAgIGdldChrZXk6IHN0cmluZyk6IFByb21pc2U8U2FuZGJveCB8IG51bGw+O1xuICAgIHNldChrZXk6IHN0cmluZywgdmFsdWU6IFNhbmRib3gpOiBQcm9taXNlPHZvaWQ+O1xuICAgIHVwZGF0ZShrZXk6IHN0cmluZywgdXBkYXRlczogUGFydGlhbDxTYW5kYm94Pik6IFByb21pc2U8U2FuZGJveD47XG4gIH07XG4gIHNldHVwOiB7XG4gICAgZ2V0KGtleTogc3RyaW5nKTogUHJvbWlzZTxTZXR1cCB8IG51bGw+O1xuICAgIHNldChrZXk6IHN0cmluZywgdmFsdWU6IFNldHVwKTogUHJvbWlzZTx2b2lkPjtcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgU3RvcmFnZUlucHV0ID0gU3RvcmFnZUhhbmRsZXJzIHwgU3RvcmFnZVN0ZXBGdW5jdGlvbjtcblxuZnVuY3Rpb24gaXNTdGVwRnVuY3Rpb24oaDogU3RvcmFnZUlucHV0KTogaCBpcyBTdG9yYWdlU3RlcEZ1bmN0aW9uIHtcbiAgcmV0dXJuIHR5cGVvZiBoID09PSBcImZ1bmN0aW9uXCI7XG59XG5cbmZ1bmN0aW9uIGZyb21TdGVwRnVuY3Rpb24oZm46IFN0b3JhZ2VTdGVwRnVuY3Rpb24pOiBTdG9yYWdlIHtcbiAgcmV0dXJuIHtcbiAgICBzZXNzaW9uOiB7XG4gICAgICBnZXQ6IChpZCkgPT4gZm4obmV3IFN0b3JhZ2VTdGVwKHsgbWV0aG9kOiBcInNlc3Npb24uZ2V0XCIsIGlkIH0pKSxcbiAgICAgIHNldDogKGlkLCB2YWx1ZSkgPT5cbiAgICAgICAgZm4obmV3IFN0b3JhZ2VTdGVwKHsgbWV0aG9kOiBcInNlc3Npb24uc2V0XCIsIGlkLCB2YWx1ZSB9KSksXG4gICAgICB1cGRhdGU6IChpZCwgdXBkYXRlcykgPT5cbiAgICAgICAgZm4obmV3IFN0b3JhZ2VTdGVwKHsgbWV0aG9kOiBcInNlc3Npb24udXBkYXRlXCIsIGlkLCB1cGRhdGVzIH0pKSxcbiAgICB9LFxuICAgIG1lc3NhZ2U6IHtcbiAgICAgIGdldDogKGlkKSA9PiBmbihuZXcgU3RvcmFnZVN0ZXAoeyBtZXRob2Q6IFwibWVzc2FnZS5nZXRcIiwgaWQgfSkpLFxuICAgICAgc2V0OiAoaWQsIHZhbHVlKSA9PlxuICAgICAgICBmbihuZXcgU3RvcmFnZVN0ZXAoeyBtZXRob2Q6IFwibWVzc2FnZS5zZXRcIiwgaWQsIHZhbHVlIH0pKSxcbiAgICAgIHVwZGF0ZTogKGlkLCB1cGRhdGVzKSA9PlxuICAgICAgICBmbihuZXcgU3RvcmFnZVN0ZXAoeyBtZXRob2Q6IFwibWVzc2FnZS51cGRhdGVcIiwgaWQsIHVwZGF0ZXMgfSkpLFxuICAgICAgbGlzdEJ5U2Vzc2lvbjogKHNlc3Npb25JZCkgPT5cbiAgICAgICAgZm4obmV3IFN0b3JhZ2VTdGVwKHsgbWV0aG9kOiBcIm1lc3NhZ2UubGlzdEJ5U2Vzc2lvblwiLCBzZXNzaW9uSWQgfSkpLFxuICAgIH0sXG4gICAgcGFydDoge1xuICAgICAgZ2V0OiAoaWQpID0+IGZuKG5ldyBTdG9yYWdlU3RlcCh7IG1ldGhvZDogXCJwYXJ0LmdldFwiLCBpZCB9KSksXG4gICAgICBzZXQ6IChpZCwgdmFsdWUpID0+XG4gICAgICAgIGZuKG5ldyBTdG9yYWdlU3RlcCh7IG1ldGhvZDogXCJwYXJ0LnNldFwiLCBpZCwgdmFsdWUgfSkpLFxuICAgICAgbGlzdEJ5U2Vzc2lvbjogKHNlc3Npb25JZCkgPT5cbiAgICAgICAgZm4obmV3IFN0b3JhZ2VTdGVwKHsgbWV0aG9kOiBcInBhcnQubGlzdEJ5U2Vzc2lvblwiLCBzZXNzaW9uSWQgfSkpLFxuICAgIH0sXG4gICAgc2FuZGJveDoge1xuICAgICAgZ2V0OiAoaWQpID0+IGZuKG5ldyBTdG9yYWdlU3RlcCh7IG1ldGhvZDogXCJzYW5kYm94LmdldFwiLCBpZCB9KSksXG4gICAgICBzZXQ6IChpZCwgdmFsdWUpID0+XG4gICAgICAgIGZuKG5ldyBTdG9yYWdlU3RlcCh7IG1ldGhvZDogXCJzYW5kYm94LnNldFwiLCBpZCwgdmFsdWUgfSkpLFxuICAgICAgdXBkYXRlOiAoaWQsIHVwZGF0ZXMpID0+XG4gICAgICAgIGZuKG5ldyBTdG9yYWdlU3RlcCh7IG1ldGhvZDogXCJzYW5kYm94LnVwZGF0ZVwiLCBpZCwgdXBkYXRlcyB9KSksXG4gICAgfSxcbiAgICBzZXR1cDoge1xuICAgICAgZ2V0OiAoaWQpID0+IGZuKG5ldyBTdG9yYWdlU3RlcCh7IG1ldGhvZDogXCJzZXR1cC5nZXRcIiwgaWQgfSkpLFxuICAgICAgc2V0OiAoaWQsIHZhbHVlKSA9PlxuICAgICAgICBmbihuZXcgU3RvcmFnZVN0ZXAoeyBtZXRob2Q6IFwic2V0dXAuc2V0XCIsIGlkLCB2YWx1ZSB9KSksXG4gICAgfSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZnJvbUhhbmRsZXJzKGg6IFN0b3JhZ2VIYW5kbGVycyk6IFN0b3JhZ2Uge1xuICByZXR1cm4ge1xuICAgIHNlc3Npb246IHtcbiAgICAgIGdldDogKGlkKSA9PiBoW1wic2Vzc2lvbi5nZXRcIl0oeyBpZCB9KSxcbiAgICAgIHNldDogKGlkLCB2YWx1ZSkgPT4gaFtcInNlc3Npb24uc2V0XCJdKHsgaWQsIHZhbHVlIH0pLFxuICAgICAgdXBkYXRlOiAoaWQsIHVwZGF0ZXMpID0+IGhbXCJzZXNzaW9uLnVwZGF0ZVwiXSh7IGlkLCB1cGRhdGVzIH0pLFxuICAgIH0sXG4gICAgbWVzc2FnZToge1xuICAgICAgZ2V0OiAoaWQpID0+IGhbXCJtZXNzYWdlLmdldFwiXSh7IGlkIH0pLFxuICAgICAgc2V0OiAoaWQsIHZhbHVlKSA9PiBoW1wibWVzc2FnZS5zZXRcIl0oeyBpZCwgdmFsdWUgfSksXG4gICAgICB1cGRhdGU6IChpZCwgdXBkYXRlcykgPT4gaFtcIm1lc3NhZ2UudXBkYXRlXCJdKHsgaWQsIHVwZGF0ZXMgfSksXG4gICAgICBsaXN0QnlTZXNzaW9uOiAoc2Vzc2lvbklkKSA9PiBoW1wibWVzc2FnZS5saXN0QnlTZXNzaW9uXCJdKHsgc2Vzc2lvbklkIH0pLFxuICAgIH0sXG4gICAgcGFydDoge1xuICAgICAgZ2V0OiAoaWQpID0+IGhbXCJwYXJ0LmdldFwiXSh7IGlkIH0pLFxuICAgICAgc2V0OiAoaWQsIHZhbHVlKSA9PiBoW1wicGFydC5zZXRcIl0oeyBpZCwgdmFsdWUgfSksXG4gICAgICBsaXN0QnlTZXNzaW9uOiAoc2Vzc2lvbklkKSA9PiBoW1wicGFydC5saXN0QnlTZXNzaW9uXCJdKHsgc2Vzc2lvbklkIH0pLFxuICAgIH0sXG4gICAgc2FuZGJveDoge1xuICAgICAgZ2V0OiAoaWQpID0+IGhbXCJzYW5kYm94LmdldFwiXSh7IGlkIH0pLFxuICAgICAgc2V0OiAoaWQsIHZhbHVlKSA9PiBoW1wic2FuZGJveC5zZXRcIl0oeyBpZCwgdmFsdWUgfSksXG4gICAgICB1cGRhdGU6IChpZCwgdXBkYXRlcykgPT4gaFtcInNhbmRib3gudXBkYXRlXCJdKHsgaWQsIHVwZGF0ZXMgfSksXG4gICAgfSxcbiAgICBzZXR1cDoge1xuICAgICAgZ2V0OiAoaWQpID0+IGhbXCJzZXR1cC5nZXRcIl0oeyBpZCB9KSxcbiAgICAgIHNldDogKGlkLCB2YWx1ZSkgPT4gaFtcInNldHVwLnNldFwiXSh7IGlkLCB2YWx1ZSB9KSxcbiAgICB9LFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9TdG9yYWdlKGg6IFN0b3JhZ2VJbnB1dCk6IFN0b3JhZ2Uge1xuICByZXR1cm4gaXNTdGVwRnVuY3Rpb24oaCkgPyBmcm9tU3RlcEZ1bmN0aW9uKGgpIDogZnJvbUhhbmRsZXJzKGgpO1xufVxuIiwgImNvbnN0IERFRkFVTFRfTUFYX1JFVFJJRVMgPSAzO1xuXG4vKipcbiAqIFdlIGludGVudGlvbmFsbHkgbWlycm9yIHRoZSBtaW5pbWFsIGBnZXQoKWAgcmV0dXJuIHNoYXBlIHdlIHVzZSBoZXJlXG4gKiBpbnN0ZWFkIG9mIGltcG9ydGluZyBLVjIgdHlwZXMuIFRoZSB3b3JrZmxvdyBidW5kbGVyIGFuYWx5emVzIHR5cGUtb25seVxuICogaW1wb3J0cyBhbmQgZmxhZ3MgYEB2ZXJjZWwva3YyYCBhcyBhIE5vZGUgbW9kdWxlIGluIHdvcmtmbG93IGNvZGUgcGF0aHMuXG4gKiBLZWVwaW5nIHRoaXMgbG9jYWwgYXZvaWRzIHRoYXQgZmFsc2UtcG9zaXRpdmUgd2hpbGUgcHJlc2VydmluZyBydW50aW1lIGJlaGF2aW9yLlxuICovXG50eXBlIEtWT3B0aW1pc3RpY0dldFJlc3VsdDxUPiA9XG4gIHwge1xuICAgICAgZXhpc3RzOiBmYWxzZTtcbiAgICB9XG4gIHwge1xuICAgICAgZXhpc3RzOiB0cnVlO1xuICAgICAgdmFsdWU6IFByb21pc2U8VD47XG4gICAgICB1cGRhdGUodmFsdWU6IFQpOiBQcm9taXNlPHVua25vd24+O1xuICAgIH07XG5cbnR5cGUgS1ZPcHRpbWlzdGljU3RvcmU8VD4gPSB7XG4gIGdldChrZXlPckZpbHRlcjogc3RyaW5nKTogUHJvbWlzZTxLVk9wdGltaXN0aWNHZXRSZXN1bHQ8VD4+O1xufTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG1lcmdlV2l0aEtWT3B0aW1pc3RpY1VwZGF0ZTxUPihvcHRzOiB7XG4gIGlkOiBzdHJpbmc7XG4gIHVwZGF0ZXM6IFBhcnRpYWw8VD47XG4gIHN0b3JlOiBLVk9wdGltaXN0aWNTdG9yZTxUPjtcbiAgbm90Rm91bmRFcnJvck1lc3NhZ2U6IHN0cmluZztcbiAgY29uZmxpY3RFcnJvck1lc3NhZ2U6IHN0cmluZztcbiAgbWF4UmV0cmllcz86IG51bWJlcjtcbn0pOiBQcm9taXNlPFQ+IHtcbiAgY29uc3QgbWF4UmV0cmllcyA9IG9wdHMubWF4UmV0cmllcyA/PyBERUZBVUxUX01BWF9SRVRSSUVTO1xuICBjb25zdCB7IEtWVmVyc2lvbkNvbmZsaWN0RXJyb3IgfSA9IGF3YWl0IGltcG9ydChcIkB2ZXJjZWwva3YyXCIpO1xuXG4gIGZvciAobGV0IGF0dGVtcHQgPSAwOyBhdHRlbXB0IDwgbWF4UmV0cmllczsgYXR0ZW1wdCsrKSB7XG4gICAgY29uc3QgZW50cnkgPSBhd2FpdCBvcHRzLnN0b3JlLmdldChvcHRzLmlkKTtcbiAgICBpZiAoIWVudHJ5LmV4aXN0cykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKG9wdHMubm90Rm91bmRFcnJvck1lc3NhZ2UpO1xuICAgIH1cblxuICAgIGNvbnN0IGV4aXN0aW5nID0gYXdhaXQgZW50cnkudmFsdWU7XG4gICAgY29uc3QgdXBkYXRlZCA9IHsgLi4uZXhpc3RpbmcsIC4uLm9wdHMudXBkYXRlcyB9O1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGVudHJ5LnVwZGF0ZSh1cGRhdGVkKTtcbiAgICAgIHJldHVybiB1cGRhdGVkO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoXG4gICAgICAgICEoZXJyb3IgaW5zdGFuY2VvZiBLVlZlcnNpb25Db25mbGljdEVycm9yKSAmJlxuICAgICAgICAoIShlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB8fCBlcnJvci5uYW1lICE9PSBcIktWVmVyc2lvbkNvbmZsaWN0RXJyb3JcIilcbiAgICAgICkge1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cblxuICAgICAgaWYgKGF0dGVtcHQgPT09IG1heFJldHJpZXMgLSAxKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihvcHRzLmNvbmZsaWN0RXJyb3JNZXNzYWdlLCB7IGNhdXNlOiBlcnJvciB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3Iob3B0cy5jb25mbGljdEVycm9yTWVzc2FnZSk7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBTdG9yYWdlSGFuZGxlcnMgfSBmcm9tIFwiLi4vYWRhcHRlclwiO1xuaW1wb3J0IHR5cGUgeyBNZXNzYWdlLCBQYXJ0LCBTYW5kYm94LCBTZXNzaW9uLCBTZXR1cCB9IGZyb20gXCIuLi90eXBlc1wiO1xuaW1wb3J0IHsgbWVyZ2VXaXRoS1ZPcHRpbWlzdGljVXBkYXRlIH0gZnJvbSBcIi4va3Ytb3B0aW1pc3RpYy11cGRhdGVcIjtcblxudHlwZSBLdlN0b3JlcyA9IEF3YWl0ZWQ8UmV0dXJuVHlwZTx0eXBlb2YgaW5pdEt2U3RvcmVzPj47XG5cbmFzeW5jIGZ1bmN0aW9uIGluaXRLdlN0b3JlcyhwcmVmaXg6IHN0cmluZykge1xuICBjb25zdCB7IGNyZWF0ZUtWIH0gPSBhd2FpdCBpbXBvcnQoXCJAdmVyY2VsL2t2MlwiKTtcbiAgY29uc3Qga3YgPSBjcmVhdGVLVih7IHByZWZpeCB9KS5nZXRTdG9yZShcImFnZW50L1wiKTtcblxuICByZXR1cm4ge1xuICAgIHNlc3Npb25zOiBrdi5nZXRTdG9yZTxTZXNzaW9uPihcInNlc3Npb24vXCIpLFxuICAgIG1lc3NhZ2VzOiBrdi5nZXRTdG9yZTxNZXNzYWdlPihcIm1lc3NhZ2UvXCIpLndpdGhJbmRleGVzKHtcbiAgICAgIGJ5U2Vzc2lvbklkOiB7IGtleTogKG06IE1lc3NhZ2UpID0+IG0uc2Vzc2lvbklkIH0sXG4gICAgfSksXG4gICAgcGFydHM6IGt2LmdldFN0b3JlPFBhcnQ+KFwicGFydC9cIikud2l0aEluZGV4ZXMoe1xuICAgICAgYnlTZXNzaW9uSWQ6IHsga2V5OiAocDogUGFydCkgPT4gcC5zZXNzaW9uSWQgfSxcbiAgICB9KSxcbiAgICBzYW5kYm94ZXM6IGt2LmdldFN0b3JlPFNhbmRib3g+KFwic2FuZGJveC9cIiksXG4gICAgc2V0dXBzOiBrdi5nZXRTdG9yZTxTZXR1cD4oXCJzZXR1cC9cIiksXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBrdlN0b3JhZ2VGYWxsYmFjayhvcHRzOiB7IHByZWZpeDogc3RyaW5nIH0pOiBTdG9yYWdlSGFuZGxlcnMge1xuICBsZXQgc3RvcmVzUHJvbWlzZTogUHJvbWlzZTxLdlN0b3Jlcz4gfCB1bmRlZmluZWQ7XG5cbiAgZnVuY3Rpb24gZ2V0U3RvcmVzKCkge1xuICAgIGlmICghc3RvcmVzUHJvbWlzZSkge1xuICAgICAgc3RvcmVzUHJvbWlzZSA9IGluaXRLdlN0b3JlcyhvcHRzLnByZWZpeCk7XG4gICAgfVxuICAgIHJldHVybiBzdG9yZXNQcm9taXNlO1xuICB9XG5cbiAgY29uc3QgdGFnID0gYFthZ2VudC4ke29wdHMucHJlZml4fV1ba3YyXWA7XG5cbiAgcmV0dXJuIHtcbiAgICBcInNlc3Npb24uZ2V0XCI6IGFzeW5jICh7IGlkIH0pID0+IHtcbiAgICAgIGNvbnN0IHsgc2Vzc2lvbnMgfSA9IGF3YWl0IGdldFN0b3JlcygpO1xuICAgICAgcmV0dXJuIChhd2FpdCBzZXNzaW9ucy5nZXRWYWx1ZShpZCkpID8/IG51bGw7XG4gICAgfSxcblxuICAgIFwic2Vzc2lvbi5zZXRcIjogYXN5bmMgKHsgaWQsIHZhbHVlIH0pID0+IHtcbiAgICAgIGNvbnN0IHsgc2Vzc2lvbnMgfSA9IGF3YWl0IGdldFN0b3JlcygpO1xuICAgICAgYXdhaXQgc2Vzc2lvbnMuc2V0KGlkLCB2YWx1ZSk7XG4gICAgfSxcblxuICAgIFwic2Vzc2lvbi51cGRhdGVcIjogYXN5bmMgKHsgaWQsIHVwZGF0ZXMgfSkgPT4ge1xuICAgICAgY29uc3QgeyBzZXNzaW9ucyB9ID0gYXdhaXQgZ2V0U3RvcmVzKCk7XG4gICAgICByZXR1cm4gbWVyZ2VXaXRoS1ZPcHRpbWlzdGljVXBkYXRlPFNlc3Npb24+KHtcbiAgICAgICAgaWQsXG4gICAgICAgIHVwZGF0ZXMsXG4gICAgICAgIHN0b3JlOiBzZXNzaW9ucyxcbiAgICAgICAgbm90Rm91bmRFcnJvck1lc3NhZ2U6IGAke3RhZ31bc2Vzc2lvbi51cGRhdGVdIG5vIHNlc3Npb24gZm91bmQgd2l0aCBpZCBcIiR7aWR9XCJgLFxuICAgICAgICBjb25mbGljdEVycm9yTWVzc2FnZTogYCR7dGFnfVtzZXNzaW9uLnVwZGF0ZV0gb3B0aW1pc3RpYyB1cGRhdGUgZmFpbGVkIGFmdGVyIHJldHJpZXMgZm9yIGlkIFwiJHtpZH1cImAsXG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgXCJtZXNzYWdlLmdldFwiOiBhc3luYyAoeyBpZCB9KSA9PiB7XG4gICAgICBjb25zdCB7IG1lc3NhZ2VzIH0gPSBhd2FpdCBnZXRTdG9yZXMoKTtcbiAgICAgIHJldHVybiAoYXdhaXQgbWVzc2FnZXMuZ2V0VmFsdWUoaWQpKSA/PyBudWxsO1xuICAgIH0sXG5cbiAgICBcIm1lc3NhZ2Uuc2V0XCI6IGFzeW5jICh7IGlkLCB2YWx1ZSB9KSA9PiB7XG4gICAgICBjb25zdCB7IG1lc3NhZ2VzIH0gPSBhd2FpdCBnZXRTdG9yZXMoKTtcbiAgICAgIGF3YWl0IG1lc3NhZ2VzLnNldChpZCwgdmFsdWUpO1xuICAgIH0sXG5cbiAgICBcIm1lc3NhZ2UudXBkYXRlXCI6IGFzeW5jICh7IGlkLCB1cGRhdGVzIH0pID0+IHtcbiAgICAgIGNvbnN0IHsgbWVzc2FnZXMgfSA9IGF3YWl0IGdldFN0b3JlcygpO1xuICAgICAgcmV0dXJuIG1lcmdlV2l0aEtWT3B0aW1pc3RpY1VwZGF0ZTxNZXNzYWdlPih7XG4gICAgICAgIGlkLFxuICAgICAgICB1cGRhdGVzLFxuICAgICAgICBzdG9yZTogbWVzc2FnZXMsXG4gICAgICAgIG5vdEZvdW5kRXJyb3JNZXNzYWdlOiBgJHt0YWd9W21lc3NhZ2UudXBkYXRlXSBubyBtZXNzYWdlIGZvdW5kIHdpdGggaWQgXCIke2lkfVwiYCxcbiAgICAgICAgY29uZmxpY3RFcnJvck1lc3NhZ2U6IGAke3RhZ31bbWVzc2FnZS51cGRhdGVdIG9wdGltaXN0aWMgdXBkYXRlIGZhaWxlZCBhZnRlciByZXRyaWVzIGZvciBpZCBcIiR7aWR9XCJgLFxuICAgICAgfSk7XG4gICAgfSxcblxuICAgIFwibWVzc2FnZS5saXN0QnlTZXNzaW9uXCI6IGFzeW5jICh7IHNlc3Npb25JZCB9KSA9PiB7XG4gICAgICBjb25zdCB7IG1lc3NhZ2VzIH0gPSBhd2FpdCBnZXRTdG9yZXMoKTtcbiAgICAgIGNvbnN0IHJlc3VsdDogTWVzc2FnZVtdID0gW107XG4gICAgICBmb3IgYXdhaXQgKGNvbnN0IFssIGVudHJ5XSBvZiBtZXNzYWdlcy5lbnRyaWVzKHtcbiAgICAgICAgYnlTZXNzaW9uSWQ6IHNlc3Npb25JZCxcbiAgICAgIH0pKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKGF3YWl0IGVudHJ5LnZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIFwicGFydC5nZXRcIjogYXN5bmMgKHsgaWQgfSkgPT4ge1xuICAgICAgY29uc3QgeyBwYXJ0cyB9ID0gYXdhaXQgZ2V0U3RvcmVzKCk7XG4gICAgICByZXR1cm4gKGF3YWl0IHBhcnRzLmdldFZhbHVlKGlkKSkgPz8gbnVsbDtcbiAgICB9LFxuXG4gICAgXCJwYXJ0LnNldFwiOiBhc3luYyAoeyBpZCwgdmFsdWUgfSkgPT4ge1xuICAgICAgY29uc3QgeyBwYXJ0cyB9ID0gYXdhaXQgZ2V0U3RvcmVzKCk7XG4gICAgICBhd2FpdCBwYXJ0cy5zZXQoaWQsIHZhbHVlKTtcbiAgICB9LFxuXG4gICAgXCJwYXJ0Lmxpc3RCeVNlc3Npb25cIjogYXN5bmMgKHsgc2Vzc2lvbklkIH0pID0+IHtcbiAgICAgIGNvbnN0IHsgcGFydHMgfSA9IGF3YWl0IGdldFN0b3JlcygpO1xuICAgICAgY29uc3QgcmVzdWx0OiBQYXJ0W10gPSBbXTtcbiAgICAgIGZvciBhd2FpdCAoY29uc3QgWywgZW50cnldIG9mIHBhcnRzLmVudHJpZXMoe1xuICAgICAgICBieVNlc3Npb25JZDogc2Vzc2lvbklkLFxuICAgICAgfSkpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goYXdhaXQgZW50cnkudmFsdWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgXCJzYW5kYm94LmdldFwiOiBhc3luYyAoeyBpZCB9KSA9PiB7XG4gICAgICBjb25zdCB7IHNhbmRib3hlcyB9ID0gYXdhaXQgZ2V0U3RvcmVzKCk7XG4gICAgICByZXR1cm4gKGF3YWl0IHNhbmRib3hlcy5nZXRWYWx1ZShpZCkpID8/IG51bGw7XG4gICAgfSxcblxuICAgIFwic2FuZGJveC5zZXRcIjogYXN5bmMgKHsgaWQsIHZhbHVlIH0pID0+IHtcbiAgICAgIGNvbnN0IHsgc2FuZGJveGVzIH0gPSBhd2FpdCBnZXRTdG9yZXMoKTtcbiAgICAgIGF3YWl0IHNhbmRib3hlcy5zZXQoaWQsIHZhbHVlKTtcbiAgICB9LFxuXG4gICAgXCJzYW5kYm94LnVwZGF0ZVwiOiBhc3luYyAoeyBpZCwgdXBkYXRlcyB9KSA9PiB7XG4gICAgICBjb25zdCB7IHNhbmRib3hlcyB9ID0gYXdhaXQgZ2V0U3RvcmVzKCk7XG4gICAgICByZXR1cm4gbWVyZ2VXaXRoS1ZPcHRpbWlzdGljVXBkYXRlPFNhbmRib3g+KHtcbiAgICAgICAgaWQsXG4gICAgICAgIHVwZGF0ZXMsXG4gICAgICAgIHN0b3JlOiBzYW5kYm94ZXMsXG4gICAgICAgIG5vdEZvdW5kRXJyb3JNZXNzYWdlOiBgJHt0YWd9W3NhbmRib3gudXBkYXRlXSBubyBzYW5kYm94IGZvdW5kIHdpdGggaWQgXCIke2lkfVwiYCxcbiAgICAgICAgY29uZmxpY3RFcnJvck1lc3NhZ2U6IGAke3RhZ31bc2FuZGJveC51cGRhdGVdIG9wdGltaXN0aWMgdXBkYXRlIGZhaWxlZCBhZnRlciByZXRyaWVzIGZvciBpZCBcIiR7aWR9XCJgLFxuICAgICAgfSk7XG4gICAgfSxcblxuICAgIFwic2V0dXAuZ2V0XCI6IGFzeW5jICh7IGlkIH0pID0+IHtcbiAgICAgIGNvbnN0IHsgc2V0dXBzIH0gPSBhd2FpdCBnZXRTdG9yZXMoKTtcbiAgICAgIHJldHVybiAoYXdhaXQgc2V0dXBzLmdldFZhbHVlKGlkKSkgPz8gbnVsbDtcbiAgICB9LFxuXG4gICAgXCJzZXR1cC5zZXRcIjogYXN5bmMgKHsgaWQsIHZhbHVlIH0pID0+IHtcbiAgICAgIGNvbnN0IHsgc2V0dXBzIH0gPSBhd2FpdCBnZXRTdG9yZXMoKTtcbiAgICAgIGF3YWl0IHNldHVwcy5zZXQoaWQsIHZhbHVlKTtcbiAgICB9LFxuICB9O1xufVxuIiwgImltcG9ydCB0eXBlIHsgU3RvcmFnZUhhbmRsZXJzIH0gZnJvbSBcIi4uL2FkYXB0ZXJcIjtcbmltcG9ydCB0eXBlIHsgTWVzc2FnZSwgUGFydCwgU2FuZGJveCwgU2Vzc2lvbiwgU2V0dXAgfSBmcm9tIFwiLi4vdHlwZXNcIjtcblxubGV0IF9mczogdHlwZW9mIGltcG9ydChcIm5vZGU6ZnMvcHJvbWlzZXNcIikgfCB1bmRlZmluZWQ7XG5sZXQgX3BhdGg6IHR5cGVvZiBpbXBvcnQoXCJub2RlOnBhdGhcIikgfCB1bmRlZmluZWQ7XG5cbmFzeW5jIGZ1bmN0aW9uIGZzKCkge1xuICBpZiAoIV9mcykge1xuICAgIF9mcyA9IGF3YWl0IGltcG9ydChcIm5vZGU6ZnMvcHJvbWlzZXNcIik7XG4gIH1cbiAgcmV0dXJuIF9mcztcbn1cbmFzeW5jIGZ1bmN0aW9uIHBhdGgoKSB7XG4gIGlmICghX3BhdGgpIHtcbiAgICBfcGF0aCA9IGF3YWl0IGltcG9ydChcIm5vZGU6cGF0aFwiKTtcbiAgfVxuICByZXR1cm4gX3BhdGg7XG59XG5cbnR5cGUgV3JpdGVMb2NrU3RhdGUgPSB7XG4gIGxvY2tlZDogYm9vbGVhbjtcbiAgd2FpdGVyczogQXJyYXk8KCkgPT4gdm9pZD47XG59O1xuXG5mdW5jdGlvbiBjcmVhdGVXcml0ZUxvY2soKSB7XG4gIGNvbnN0IGxvY2tzID0gbmV3IE1hcDxzdHJpbmcsIFdyaXRlTG9ja1N0YXRlPigpO1xuXG4gIHJldHVybiBhc3luYyBmdW5jdGlvbiB3aXRoV3JpdGVMb2NrPFQ+KG9wdHM6IHtcbiAgICBrZXk6IHN0cmluZztcbiAgICBmbjogKCkgPT4gUHJvbWlzZTxUPjtcbiAgfSk6IFByb21pc2U8VD4ge1xuICAgIGxldCBzdGF0ZSA9IGxvY2tzLmdldChvcHRzLmtleSk7XG4gICAgaWYgKCFzdGF0ZSkge1xuICAgICAgc3RhdGUgPSB7IGxvY2tlZDogZmFsc2UsIHdhaXRlcnM6IFtdIH07XG4gICAgICBsb2Nrcy5zZXQob3B0cy5rZXksIHN0YXRlKTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGUubG9ja2VkKSB7XG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuICAgICAgICBzdGF0ZS53YWl0ZXJzLnB1c2gocmVzb2x2ZSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBzdGF0ZS5sb2NrZWQgPSB0cnVlO1xuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBvcHRzLmZuKCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGNvbnN0IG5leHQgPSBzdGF0ZS53YWl0ZXJzLnNoaWZ0KCk7XG4gICAgICBpZiAobmV4dCkge1xuICAgICAgICBuZXh0KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGF0ZS5sb2NrZWQgPSBmYWxzZTtcbiAgICAgICAgbG9ja3MuZGVsZXRlKG9wdHMua2V5KTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVN0b3JlPFQ+KGRpcjogc3RyaW5nKSB7XG4gIGNvbnN0IGZpbGVQYXRoID0gYXN5bmMgKGtleTogc3RyaW5nKSA9PlxuICAgIChhd2FpdCBwYXRoKCkpLmpvaW4oZGlyLCBgJHtrZXl9Lmpzb25gKTtcbiAgY29uc3Qgd2l0aFdyaXRlTG9jayA9IGNyZWF0ZVdyaXRlTG9jaygpO1xuXG4gIHJldHVybiB7XG4gICAgYXN5bmMgZ2V0KGtleTogc3RyaW5nKTogUHJvbWlzZTxUIHwgbnVsbD4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IChhd2FpdCBmcygpKS5yZWFkRmlsZShhd2FpdCBmaWxlUGF0aChrZXkpLCBcInV0Zi04XCIpO1xuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShkYXRhKSBhcyBUO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH0sXG4gICAgYXN5bmMgc2V0KGtleTogc3RyaW5nLCB2YWx1ZTogVCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgYXdhaXQgd2l0aFdyaXRlTG9jayh7XG4gICAgICAgIGtleSxcbiAgICAgICAgZm46IGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCBwID0gYXdhaXQgZmlsZVBhdGgoa2V5KTtcbiAgICAgICAgICBjb25zdCB7IG1rZGlyLCB3cml0ZUZpbGUgfSA9IGF3YWl0IGZzKCk7XG4gICAgICAgICAgY29uc3QgeyBkaXJuYW1lIH0gPSBhd2FpdCBwYXRoKCk7XG4gICAgICAgICAgYXdhaXQgbWtkaXIoZGlybmFtZShwKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICAgICAgYXdhaXQgd3JpdGVGaWxlKHAsIEpTT04uc3RyaW5naWZ5KHZhbHVlLCBudWxsLCAyKSk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9LFxuICAgIHVwZGF0ZShrZXk6IHN0cmluZywgdXBkYXRlczogUGFydGlhbDxUPik6IFByb21pc2U8VD4ge1xuICAgICAgcmV0dXJuIHdpdGhXcml0ZUxvY2soe1xuICAgICAgICBrZXksXG4gICAgICAgIGZuOiBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgcCA9IGF3YWl0IGZpbGVQYXRoKGtleSk7XG4gICAgICAgICAgY29uc3QgeyByZWFkRmlsZSwgbWtkaXIsIHdyaXRlRmlsZSB9ID0gYXdhaXQgZnMoKTtcbiAgICAgICAgICBjb25zdCB7IGRpcm5hbWUgfSA9IGF3YWl0IHBhdGgoKTtcbiAgICAgICAgICBsZXQgZXhpc3Rpbmc6IFQ7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZWFkRmlsZShwLCBcInV0Zi04XCIpO1xuICAgICAgICAgICAgZXhpc3RpbmcgPSBKU09OLnBhcnNlKGRhdGEpIGFzIFQ7XG4gICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vdCBmb3VuZDogJHtrZXl9YCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHVwZGF0ZWQgPSB7IC4uLmV4aXN0aW5nLCAuLi51cGRhdGVzIH07XG4gICAgICAgICAgYXdhaXQgbWtkaXIoZGlybmFtZShwKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICAgICAgYXdhaXQgd3JpdGVGaWxlKHAsIEpTT04uc3RyaW5naWZ5KHVwZGF0ZWQsIG51bGwsIDIpKTtcbiAgICAgICAgICByZXR1cm4gdXBkYXRlZDtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH0sXG4gIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlYWRBbGxGcm9tRGlyPFQ+KGRpcjogc3RyaW5nKTogUHJvbWlzZTxUW10+IHtcbiAgY29uc3QgeyByZWFkZGlyLCByZWFkRmlsZSB9ID0gYXdhaXQgZnMoKTtcbiAgY29uc3QgeyBqb2luIH0gPSBhd2FpdCBwYXRoKCk7XG4gIGxldCBmaWxlczogc3RyaW5nW107XG4gIHRyeSB7XG4gICAgZmlsZXMgPSBhd2FpdCByZWFkZGlyKGRpcik7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBjb25zdCByZXN1bHQ6IFRbXSA9IFtdO1xuICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcbiAgICBpZiAoIWZpbGUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVhZEZpbGUoam9pbihkaXIsIGZpbGUpLCBcInV0Zi04XCIpO1xuICAgICAgcmVzdWx0LnB1c2goSlNPTi5wYXJzZShkYXRhKSBhcyBUKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIHNraXAgY29ycnVwdCBmaWxlc1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5hc3luYyBmdW5jdGlvbiBlbnN1cmVHaXRpZ25vcmUoZGlyOiBzdHJpbmcpIHtcbiAgY29uc3QgeyBta2Rpciwgd3JpdGVGaWxlLCByZWFkRmlsZSB9ID0gYXdhaXQgZnMoKTtcbiAgY29uc3QgeyBqb2luIH0gPSBhd2FpdCBwYXRoKCk7XG4gIGNvbnN0IGdpdGlnbm9yZVBhdGggPSBqb2luKGRpciwgXCIuZ2l0aWdub3JlXCIpO1xuICB0cnkge1xuICAgIGF3YWl0IHJlYWRGaWxlKGdpdGlnbm9yZVBhdGgsIFwidXRmLThcIik7XG4gIH0gY2F0Y2gge1xuICAgIGF3YWl0IG1rZGlyKGRpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgYXdhaXQgd3JpdGVGaWxlKGdpdGlnbm9yZVBhdGgsIFwiKlxcblwiKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbG9jYWxTdG9yYWdlKG9wdHM/OiB7IGRpcj86IHN0cmluZyB9KTogU3RvcmFnZUhhbmRsZXJzIHtcbiAgY29uc3QgZGlyID0gb3B0cz8uZGlyID8/IFwiLmFnZW50XCI7XG4gIGxldCBnaXRpZ25vcmVQcm9taXNlOiBQcm9taXNlPHZvaWQ+IHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3Qgc2Vzc2lvblN0b3JlID0gY3JlYXRlU3RvcmU8U2Vzc2lvbj4oYCR7ZGlyfS9zZXNzaW9uYCk7XG4gIGNvbnN0IG1lc3NhZ2VTdG9yZSA9IGNyZWF0ZVN0b3JlPE1lc3NhZ2U+KGAke2Rpcn0vbWVzc2FnZWApO1xuICBjb25zdCBwYXJ0U3RvcmUgPSBjcmVhdGVTdG9yZTxQYXJ0PihgJHtkaXJ9L3BhcnRgKTtcbiAgY29uc3Qgc2FuZGJveFN0b3JlID0gY3JlYXRlU3RvcmU8U2FuZGJveD4oYCR7ZGlyfS9zYW5kYm94YCk7XG4gIGNvbnN0IHNldHVwU3RvcmUgPSBjcmVhdGVTdG9yZTxTZXR1cD4oYCR7ZGlyfS9zZXR1cGApO1xuICBjb25zdCBtZXNzYWdlRGlyID0gYCR7ZGlyfS9tZXNzYWdlYDtcbiAgY29uc3QgcGFydERpciA9IGAke2Rpcn0vcGFydGA7XG5cbiAgZnVuY3Rpb24gb25Xcml0ZTxUPihmbjogKCkgPT4gUHJvbWlzZTxUPik6IFByb21pc2U8VD4ge1xuICAgIGlmICghZ2l0aWdub3JlUHJvbWlzZSkge1xuICAgICAgZ2l0aWdub3JlUHJvbWlzZSA9IGVuc3VyZUdpdGlnbm9yZShkaXIpO1xuICAgIH1cbiAgICByZXR1cm4gZ2l0aWdub3JlUHJvbWlzZS50aGVuKGZuKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgXCJzZXNzaW9uLmdldFwiOiAoeyBpZCB9KSA9PiBzZXNzaW9uU3RvcmUuZ2V0KGlkKSxcbiAgICBcInNlc3Npb24uc2V0XCI6ICh7IGlkLCB2YWx1ZSB9KSA9PlxuICAgICAgb25Xcml0ZSgoKSA9PiBzZXNzaW9uU3RvcmUuc2V0KGlkLCB2YWx1ZSkpLFxuICAgIFwic2Vzc2lvbi51cGRhdGVcIjogKHsgaWQsIHVwZGF0ZXMgfSkgPT5cbiAgICAgIG9uV3JpdGUoKCkgPT4gc2Vzc2lvblN0b3JlLnVwZGF0ZShpZCwgdXBkYXRlcykpLFxuXG4gICAgXCJtZXNzYWdlLmdldFwiOiAoeyBpZCB9KSA9PiBtZXNzYWdlU3RvcmUuZ2V0KGlkKSxcbiAgICBcIm1lc3NhZ2Uuc2V0XCI6ICh7IGlkLCB2YWx1ZSB9KSA9PlxuICAgICAgb25Xcml0ZSgoKSA9PiBtZXNzYWdlU3RvcmUuc2V0KGlkLCB2YWx1ZSkpLFxuICAgIFwibWVzc2FnZS51cGRhdGVcIjogKHsgaWQsIHVwZGF0ZXMgfSkgPT5cbiAgICAgIG9uV3JpdGUoKCkgPT4gbWVzc2FnZVN0b3JlLnVwZGF0ZShpZCwgdXBkYXRlcykpLFxuICAgIFwibWVzc2FnZS5saXN0QnlTZXNzaW9uXCI6IGFzeW5jICh7IHNlc3Npb25JZCB9KSA9PiB7XG4gICAgICBjb25zdCBhbGwgPSBhd2FpdCByZWFkQWxsRnJvbURpcjxNZXNzYWdlPihtZXNzYWdlRGlyKTtcbiAgICAgIHJldHVybiBhbGwuZmlsdGVyKChtKSA9PiBtLnNlc3Npb25JZCA9PT0gc2Vzc2lvbklkKTtcbiAgICB9LFxuXG4gICAgXCJwYXJ0LmdldFwiOiAoeyBpZCB9KSA9PiBwYXJ0U3RvcmUuZ2V0KGlkKSxcbiAgICBcInBhcnQuc2V0XCI6ICh7IGlkLCB2YWx1ZSB9KSA9PiBvbldyaXRlKCgpID0+IHBhcnRTdG9yZS5zZXQoaWQsIHZhbHVlKSksXG4gICAgXCJwYXJ0Lmxpc3RCeVNlc3Npb25cIjogYXN5bmMgKHsgc2Vzc2lvbklkIH0pID0+IHtcbiAgICAgIGNvbnN0IGFsbCA9IGF3YWl0IHJlYWRBbGxGcm9tRGlyPFBhcnQ+KHBhcnREaXIpO1xuICAgICAgcmV0dXJuIGFsbC5maWx0ZXIoKHApID0+IHAuc2Vzc2lvbklkID09PSBzZXNzaW9uSWQpO1xuICAgIH0sXG5cbiAgICBcInNhbmRib3guZ2V0XCI6ICh7IGlkIH0pID0+IHNhbmRib3hTdG9yZS5nZXQoaWQpLFxuICAgIFwic2FuZGJveC5zZXRcIjogKHsgaWQsIHZhbHVlIH0pID0+XG4gICAgICBvbldyaXRlKCgpID0+IHNhbmRib3hTdG9yZS5zZXQoaWQsIHZhbHVlKSksXG4gICAgXCJzYW5kYm94LnVwZGF0ZVwiOiAoeyBpZCwgdXBkYXRlcyB9KSA9PlxuICAgICAgb25Xcml0ZSgoKSA9PiBzYW5kYm94U3RvcmUudXBkYXRlKGlkLCB1cGRhdGVzKSksXG5cbiAgICBcInNldHVwLmdldFwiOiAoeyBpZCB9KSA9PiBzZXR1cFN0b3JlLmdldChpZCksXG4gICAgXCJzZXR1cC5zZXRcIjogKHsgaWQsIHZhbHVlIH0pID0+IG9uV3JpdGUoKCkgPT4gc2V0dXBTdG9yZS5zZXQoaWQsIHZhbHVlKSksXG4gIH07XG59XG4iLCAiZXhwb3J0IGZ1bmN0aW9uIHNob3VsZEZhbGxiYWNrVG9LVjIoKTogYm9vbGVhbiB7XG4gIHJldHVybiAhIXByb2Nlc3MuZW52LkJMT0JfUkVBRF9XUklURV9UT0tFTjtcbn1cbiIsICJpbXBvcnQgdHlwZSB7XG4gIEluZmVyVG9vbElucHV0LFxuICBJbmZlclVJVG9vbHMsXG4gIE1vZGVsTWVzc2FnZSxcbiAgVG9vbFNldCxcbiAgVUlNZXNzYWdlLFxufSBmcm9tIFwiYWlcIjtcbmltcG9ydCAqIGFzIGVycm9yZSBmcm9tIFwiZXJyb3JlXCI7XG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiO1xuaW1wb3J0IHR5cGUgeyBCdWlsdEluVG9vbE5hbWUsIGJ1aWx0SW5Ub29scywgVG9vbENvbnRleHQgfSBmcm9tIFwiLi4vdG9vbHNcIjtcbmltcG9ydCB0eXBlIHsgQW55QWdlbnQgfSBmcm9tIFwiLi9jbGllbnRcIjtcblxuLy8gXHUyNTAwXHUyNTAwXHUyNTAwIEFnZW50IFN0YXR1cyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuLyoqXG4gKiBUcmFuc2llbnQgc3RhdHVzIGluZGljYXRvcnMgZW1pdHRlZCBvdmVyIHRoZSBzdHJlYW0gZHVyaW5nIGxvbmctcnVubmluZyBwaGFzZXMuXG4gKiBEZWxpdmVyZWQgdG8gdGhlIGNsaWVudCBhcyBgZGF0YS1zdGF0dXNgIGNodW5rcyB3aXRoIGB0cmFuc2llbnQ6IHRydWVgIFx1MjAxNCBub3QgcGVyc2lzdGVkLlxuICovXG5leHBvcnQgY29uc3QgQWdlbnRTdGF0dXMgPSB6LmRpc2NyaW1pbmF0ZWRVbmlvbihcInR5cGVcIiwgW1xuICB6Lm9iamVjdCh7IHR5cGU6IHoubGl0ZXJhbChcInNhbmRib3gtc2V0dXBcIikgfSksXG4gIHoub2JqZWN0KHsgdHlwZTogei5saXRlcmFsKFwic2FuZGJveC1zZXR1cC1jb2xkXCIpIH0pLFxuICB6Lm9iamVjdCh7IHR5cGU6IHoubGl0ZXJhbChcImxvYWRpbmctc2tpbGxzXCIpIH0pLFxuICB6Lm9iamVjdCh7IHR5cGU6IHoubGl0ZXJhbChcInByb2Nlc3NpbmctYXBwcm92YWxzXCIpIH0pLFxuICB6Lm9iamVjdCh7IHR5cGU6IHoubGl0ZXJhbChcIm5lZWRzLWFwcHJvdmFsXCIpIH0pLFxuICB6Lm9iamVjdCh7IHR5cGU6IHoubGl0ZXJhbChcInRoaW5raW5nXCIpIH0pLFxuICB6Lm9iamVjdCh7IHR5cGU6IHoubGl0ZXJhbChcImN1c3RvbVwiKSwgc3RhdHVzOiB6LnN0cmluZygpIH0pLFxuXSk7XG5cbmV4cG9ydCB0eXBlIEFnZW50U3RhdHVzID0gei5pbmZlcjx0eXBlb2YgQWdlbnRTdGF0dXM+O1xuXG5leHBvcnQgdHlwZSBBZ2VudERhdGFUeXBlcyA9IHsgc3RhdHVzOiBBZ2VudFN0YXR1cyB9O1xuXG4vLyBcdTI1MDBcdTI1MDBcdTI1MDAgSG9va3MgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmV4cG9ydCB0eXBlIEFnZW50SG9va3MgPSB7XG4gIFwidG9vbC5iZWZvcmVcIj86IChvcHRzOiB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGlucHV0OiB1bmtub3duO1xuICAgIGNvbnRleHQ6IFRvb2xDb250ZXh0O1xuICB9KSA9PiBQcm9taXNlPHVuZGVmaW5lZCB8IHsgaW5wdXQ6IHVua25vd24gfT47XG4gIFwidG9vbC5hZnRlclwiPzogKG9wdHM6IHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgaW5wdXQ6IHVua25vd247XG4gICAgcmVzdWx0OiB1bmtub3duO1xuICAgIGNvbnRleHQ6IFRvb2xDb250ZXh0O1xuICB9KSA9PiBQcm9taXNlPHVuZGVmaW5lZCB8IHsgcmVzdWx0OiB1bmtub3duIH0+O1xuICBzdGF0dXM/OiAoc3RhdHVzOiBBZ2VudFN0YXR1cykgPT4gdm9pZCB8IFByb21pc2U8dm9pZD47XG59O1xuXG4vLyBcdTI1MDBcdTI1MDBcdTI1MDAgTmVlZHMgQXBwcm92YWwgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbnR5cGUgVG9vbE5hbWU8VG9vbHM+ID0gRXh0cmFjdDxrZXlvZiBUb29scywgc3RyaW5nPiB8IEJ1aWx0SW5Ub29sTmFtZTtcblxudHlwZSBUb29sSW5wdXQ8VG9vbHMsIEs+ID0gSyBleHRlbmRzIEJ1aWx0SW5Ub29sTmFtZVxuICA/IEluZmVyVG9vbElucHV0PCh0eXBlb2YgYnVpbHRJblRvb2xzKVtLXT5cbiAgOiBLIGV4dGVuZHMga2V5b2YgVG9vbHNcbiAgICA/IFRvb2xzW0tdIGV4dGVuZHMgaW1wb3J0KFwiYWlcIikuVG9vbFxuICAgICAgPyBJbmZlclRvb2xJbnB1dDxUb29sc1tLXT5cbiAgICAgIDogdW5rbm93blxuICAgIDogdW5rbm93bjtcblxuZXhwb3J0IHR5cGUgTmVlZHNBcHByb3ZhbE1hcDxUb29scz4gPSB7XG4gIFtLIGluIFRvb2xOYW1lPFRvb2xzPl0/OlxuICAgIHwgYm9vbGVhblxuICAgIHwgKChcbiAgICAgICAgaW5wdXQ6IFRvb2xJbnB1dDxUb29scywgSz4sXG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICB0b29sQ2FsbElkOiBzdHJpbmc7XG4gICAgICAgICAgbWVzc2FnZXM6IE1vZGVsTWVzc2FnZVtdO1xuICAgICAgICAgIGV4cGVyaW1lbnRhbF9jb250ZXh0OiB1bmtub3duO1xuICAgICAgICB9XG4gICAgICApID0+IGJvb2xlYW4gfCBQcm9taXNlPGJvb2xlYW4+KTtcbn07XG5cbi8vIFx1MjUwMFx1MjUwMFx1MjUwMCBJbmZlciBVSSBNZXNzYWdlIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG5leHBvcnQgdHlwZSBJbmZlclVJTWVzc2FnZTxBPiA9IEEgZXh0ZW5kcyB7XG4gIHRvb2xzOiBpbmZlciBUIGV4dGVuZHMgVG9vbFNldDtcbiAgJFVJTWVzc2FnZTogVUlNZXNzYWdlPGluZmVyIE0+O1xufVxuICA/IFVJTWVzc2FnZTxNLCBBZ2VudERhdGFUeXBlcywgSW5mZXJVSVRvb2xzPFQ+PlxuICA6IEEgZXh0ZW5kcyB7IHRvb2xzOiBpbmZlciBUIGV4dGVuZHMgVG9vbFNldCB9XG4gICAgPyBVSU1lc3NhZ2U8dW5rbm93biwgQWdlbnREYXRhVHlwZXMsIEluZmVyVUlUb29sczxUPj5cbiAgICA6IFVJTWVzc2FnZTx1bmtub3duLCBBZ2VudERhdGFUeXBlcz47XG5cbmV4cG9ydCB0eXBlIFR5cGVkVUlNZXNzYWdlPFxuICBUTWVzc2FnZU1ldGFkYXRhID0gdW5rbm93bixcbiAgVG9vbHMgZXh0ZW5kcyBUb29sU2V0ID0gVG9vbFNldCxcbj4gPSBVSU1lc3NhZ2U8VE1lc3NhZ2VNZXRhZGF0YSwgQWdlbnREYXRhVHlwZXMsIEluZmVyVUlUb29sczxUb29scz4+O1xuXG4vLyBcdTI1MDBcdTI1MDBcdTI1MDAgUmVnaXN0cnkgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmNsYXNzIEFnZW50Tm90Rm91bmRFcnJvciBleHRlbmRzIGVycm9yZS5jcmVhdGVUYWdnZWRFcnJvcih7XG4gIG5hbWU6IFwiQWdlbnROb3RGb3VuZEVycm9yXCIsXG4gIG1lc3NhZ2U6IGBBZ2VudCBcIiRhZ2VudE5hbWVcIiBub3QgZm91bmQgaW4gcmVnaXN0cnkuXG5cbmhpbnQ6IGFnZW50KCkgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIHdvcmtmbG93IHN0ZXBzIGV4ZWN1dGUuXG4gICAgICBWYWxpZCBsb2NhdGlvbnM6IG1vZHVsZSBzY29wZSwgb3IgaW5zaWRlIGEgXCJ1c2Ugd29ya2Zsb3dcIiBib2R5LlxuXG4gIC8vIE1vZHVsZSBzY29wZSAoc3RhdGljIGFnZW50cylcbiAgZXhwb3J0IGNvbnN0IG15QWdlbnQgPSBhZ2VudChcIiRhZ2VudE5hbWVcIiwgeyAuLi4gfSk7XG5cbiAgLy8gV29ya2Zsb3cgYm9keSAoZHluYW1pYyBhZ2VudHMpXG4gIGFzeW5jIGZ1bmN0aW9uIG15V29ya2Zsb3coeyBpbnB1dCB9KSB7XG4gICAgXCJ1c2Ugd29ya2Zsb3dcIjtcbiAgICBjb25zdCBteUFnZW50ID0gYWdlbnQoXCIkYWdlbnROYW1lXCIsIHsgLi4uIH0pO1xuICAgIC4uLlxuICB9YCxcbn0pIHt9XG5cbmNvbnN0IEFHRU5UX1JFR0lTVFJZX0tFWSA9IFN5bWJvbC5mb3IoXCJleHBlcmltZW50YWwtYWdlbnQtcmVnaXN0cnlcIik7XG5cbmZ1bmN0aW9uIGdldEFnZW50UmVnaXN0cnkoKTogTWFwPHN0cmluZywgQW55QWdlbnQ+IHtcbiAgY29uc3QgZyA9IGdsb2JhbFRoaXMgYXMgUmVjb3JkPHN5bWJvbCwgdW5rbm93bj47XG4gIGxldCByZWdpc3RyeSA9IGdbQUdFTlRfUkVHSVNUUllfS0VZXSBhcyBNYXA8c3RyaW5nLCBBbnlBZ2VudD4gfCB1bmRlZmluZWQ7XG4gIGlmICghcmVnaXN0cnkpIHtcbiAgICByZWdpc3RyeSA9IG5ldyBNYXAoKTtcbiAgICBnW0FHRU5UX1JFR0lTVFJZX0tFWV0gPSByZWdpc3RyeTtcbiAgfVxuICByZXR1cm4gcmVnaXN0cnk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlckFnZW50KG5hbWU6IHN0cmluZywgYWdlbnQ6IEFueUFnZW50KSB7XG4gIGdldEFnZW50UmVnaXN0cnkoKS5zZXQobmFtZSwgYWdlbnQpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldEFnZW50PFJlcXVpcmVkIGV4dGVuZHMgYm9vbGVhbj4oXG4gIG5hbWU6IHN0cmluZyxcbiAgcmVxdWlyZWQ/OiBSZXF1aXJlZFxuKTogUmVxdWlyZWQgZXh0ZW5kcyB0cnVlID8gQW55QWdlbnQgOiBBbnlBZ2VudCB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGFnZW50ID0gZ2V0QWdlbnRSZWdpc3RyeSgpLmdldChuYW1lKTtcbiAgaWYgKHJlcXVpcmVkICYmICFhZ2VudCkge1xuICAgIHRocm93IG5ldyBBZ2VudE5vdEZvdW5kRXJyb3IoeyBhZ2VudE5hbWU6IG5hbWUgfSk7XG4gIH1cbiAgcmV0dXJuIGFnZW50IGFzIFJlcXVpcmVkIGV4dGVuZHMgdHJ1ZSA/IEFueUFnZW50IDogQW55QWdlbnQgfCB1bmRlZmluZWQ7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBZ2VudE9wdGlvbnMgfSBmcm9tIFwiLi4vYWdlbnQvY2xpZW50XCI7XG5pbXBvcnQgdHlwZSB7IEZzQWdlbnRDb25maWcgfSBmcm9tIFwiLi4vZnJhbWV3b3JrLXJ1bnRpbWUvcmVzb2x2ZVwiO1xuXG4vKipcbiAqIE1lcmdlIGZzLXNjYW5uZWQgY29uZmlnIG9uIHRvcCBvZiB0aGUgYWdlbnQudHMgYmFzZSBjb25maWcuXG4gKiBTa2lsbHMgYXJlIGFwcGVuZGVkLiBTeXN0ZW0gcHJvbXB0cyBhcmUgY29uY2F0ZW5hdGVkIChhcnJheXMpLlxuICogVGhlIGJhc2Ugb3B0aW9ucyBtYXkgY29udGFpbiBSZXNvbHZhYmxlIHZhbHVlcyAoZnVuY3Rpb25zKTsgd2hlblxuICogdGhlIG92ZXJsYXkgaGFzIGEgc3RhdGljIHZhbHVlIHdlIHdyYXAgdGhlIGJhc2UgcmVzb2x2YWJsZSBzbyB0aGVcbiAqIGZzIHZhbHVlcyBnZXQgYXBwZW5kZWQgYXQgcmVzb2x2ZSB0aW1lLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUZyYW1ld29ya09wdGlvbnMoXG4gIGJhc2U6IEFnZW50T3B0aW9ucyxcbiAgb3ZlcmxheTogRnNBZ2VudENvbmZpZ1xuKTogQWdlbnRPcHRpb25zIHtcbiAgY29uc3QgbWVyZ2VkOiBBZ2VudE9wdGlvbnMgPSB7IC4uLmJhc2UgfTtcblxuICBpZiAob3ZlcmxheS5zeXN0ZW0gIT09IHVuZGVmaW5lZCkge1xuICAgIGlmIChiYXNlLnN5c3RlbSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBtZXJnZWQuc3lzdGVtID0gb3ZlcmxheS5zeXN0ZW07XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgYmFzZS5zeXN0ZW0gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgY29uc3QgYmFzZUZuID0gYmFzZS5zeXN0ZW07XG4gICAgICBtZXJnZWQuc3lzdGVtID0gYXN5bmMgKGFyZ3MpID0+IHtcbiAgICAgICAgY29uc3QgcmVzb2x2ZWQgPSBhd2FpdCBiYXNlRm4oYXJncyk7XG4gICAgICAgIGlmIChyZXNvbHZlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV0dXJuIG92ZXJsYXkuc3lzdGVtO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGJhc2VBcnIgPSBBcnJheS5pc0FycmF5KHJlc29sdmVkKSA/IHJlc29sdmVkIDogW3Jlc29sdmVkXTtcbiAgICAgICAgcmV0dXJuIFsuLi5iYXNlQXJyLCBvdmVybGF5LnN5c3RlbSFdO1xuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgYmFzZUFyciA9IEFycmF5LmlzQXJyYXkoYmFzZS5zeXN0ZW0pID8gYmFzZS5zeXN0ZW0gOiBbYmFzZS5zeXN0ZW1dO1xuICAgICAgbWVyZ2VkLnN5c3RlbSA9IFsuLi5iYXNlQXJyLCBvdmVybGF5LnN5c3RlbV07XG4gICAgfVxuICB9XG5cbiAgaWYgKG92ZXJsYXkuc2tpbGxzICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAoYmFzZS5za2lsbHMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgbWVyZ2VkLnNraWxscyA9IG92ZXJsYXkuc2tpbGxzO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGJhc2Uuc2tpbGxzID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIGNvbnN0IGJhc2VGbiA9IGJhc2Uuc2tpbGxzO1xuICAgICAgbWVyZ2VkLnNraWxscyA9IGFzeW5jIChhcmdzKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc29sdmVkID0gYXdhaXQgYmFzZUZuKGFyZ3MpO1xuICAgICAgICByZXR1cm4gWy4uLihyZXNvbHZlZCA/PyBbXSksIC4uLm92ZXJsYXkuc2tpbGxzIV07XG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBtZXJnZWQuc2tpbGxzID0gWy4uLmJhc2Uuc2tpbGxzLCAuLi5vdmVybGF5LnNraWxsc107XG4gICAgfVxuICB9XG5cbiAgaWYgKG92ZXJsYXkudG9vbHMgIT09IHVuZGVmaW5lZCkge1xuICAgIG1lcmdlZC50b29scyA9IHsgLi4uYmFzZS50b29scywgLi4ub3ZlcmxheS50b29scyB9O1xuICB9XG5cbiAgcmV0dXJuIG1lcmdlZDtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IFRvb2xTZXQgfSBmcm9tIFwiYWlcIjtcbmltcG9ydCB7IHR5cGUgQW55QWdlbnQsIGFnZW50IGFzIGNyZWF0ZUFnZW50IH0gZnJvbSBcIi4uL2FnZW50L2NsaWVudFwiO1xuaW1wb3J0IHR5cGUgeyBTa2lsbElucHV0IH0gZnJvbSBcIi4uL3NraWxscy90eXBlc1wiO1xuaW1wb3J0IHsgbWVyZ2VGcmFtZXdvcmtPcHRpb25zIH0gZnJvbSBcIi4vbWVyZ2Utb3B0aW9uc1wiO1xuXG4vKipcbiAqIFRoZSBzdWJzZXQgb2YgQWdlbnRPcHRpb25zIHRoYXQgY2FuIGNvbWUgZnJvbSB0aGUgZmlsZXN5c3RlbSBzY2FubmVyLlxuICogQWx3YXlzIHBsYWluIHZhbHVlcyBcdTIwMTQgbmV2ZXIgUmVzb2x2YWJsZSBmdW5jdGlvbnMuXG4gKi9cbmV4cG9ydCB0eXBlIEZzQWdlbnRDb25maWcgPSB7XG4gIHN5c3RlbT86IHN0cmluZztcbiAgc2tpbGxzPzogU2tpbGxJbnB1dFtdO1xuICB0b29scz86IFRvb2xTZXQ7XG59O1xuXG50eXBlIE1vZHVsZUxvYWRlciA9ICgpID0+IFByb21pc2U8eyBkZWZhdWx0PzogdW5rbm93biB9PjtcblxuLyoqXG4gKiBEeW5hbWljIGltcG9ydCBsb2FkZXJzIGZvciBmaWxlc3lzdGVtIG1vZHVsZXMgdGhhdCBjYW4ndCBiZVxuICogc2VyaWFsaXplZCBpbnRvIGBjb25maWdgLiBLZXllZCBieSBjYXRlZ29yeSwgdGhlbiBieSBuYW1lLlxuICogQ3VycmVudGx5IG9ubHkgYHRvb2xzYCBpcyBwb3B1bGF0ZWQ7IGBza2lsbHNgIGFuZCBgc3lzdGVtYFxuICogd2lsbCBmb2xsb3cgdGhlIHNhbWUgcGF0dGVybiBmb3IgYC50c2AgbW9kdWxlcy5cbiAqL1xuZXhwb3J0IHR5cGUgUmVnaXN0cnlJbXBvcnRzID0ge1xuICB0b29scz86IFJlY29yZDxzdHJpbmcsIE1vZHVsZUxvYWRlcj47XG59O1xuXG4vKipcbiAqIEEgc2luZ2xlIGVudHJ5IGluIHRoZSBnZW5lcmF0ZWQgYWdlbnQgcmVnaXN0cnkuXG4gKiBDb250YWlucyB0aGUgZmlsZXN5c3RlbS1zY2FubmVkIGNvbmZpZyBhbmQgYW4gb3B0aW9uYWwgZHluYW1pYyBpbXBvcnRcbiAqIGZvciBhZ2VudHMgdGhhdCBoYXZlIGFuIGBhZ2VudC50c2AgbW9kdWxlLlxuICovXG5leHBvcnQgdHlwZSBBZ2VudFJlZ2lzdHJ5RW50cnkgPSB7XG4gIGNvbmZpZzogRnNBZ2VudENvbmZpZztcbiAgaW1wb3J0PzogTW9kdWxlTG9hZGVyO1xuICBpbXBvcnRzPzogUmVnaXN0cnlJbXBvcnRzO1xufTtcblxuLyoqXG4gKiBNYXAgb2YgYWdlbnQgbmFtZSB0byByZWdpc3RyeSBlbnRyeSwgcHJvZHVjZWQgYnkgdGhlIGdlbmVyYXRlZFxuICogYF9yZWdpc3RyeS50c2AgZmlsZSBhbmQgY29uc3VtZWQgYnkge0BsaW5rIHJ1bnRpbWUucmVzb2x2ZUFnZW50fVxuICogYXQgcmVxdWVzdCB0aW1lLlxuICovXG5leHBvcnQgdHlwZSBBZ2VudFJlZ2lzdHJ5ID0gUmVjb3JkPHN0cmluZywgQWdlbnRSZWdpc3RyeUVudHJ5PjtcblxuY29uc3QgcmVzb2x2ZWRBZ2VudENhY2hlID0gbmV3IE1hcDxzdHJpbmcsIEFueUFnZW50PigpO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZUZyYW1ld29ya0FnZW50KG9wdHM6IHtcbiAgbmFtZTogc3RyaW5nO1xuICBhZ2VudHM6IEFnZW50UmVnaXN0cnk7XG59KTogUHJvbWlzZTxBbnlBZ2VudCB8IG51bGw+IHtcbiAgY29uc3QgeyBuYW1lLCBhZ2VudHMgfSA9IG9wdHM7XG5cbiAgaWYgKCFPYmplY3QuaGFzT3duKGFnZW50cywgbmFtZSkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IGVudHJ5ID0gYWdlbnRzW25hbWVdO1xuICBjb25zdCBjYWNoZUtleSA9IG5hbWUgKyBKU09OLnN0cmluZ2lmeShlbnRyeS5jb25maWcpO1xuICBjb25zdCBjYWNoZWQgPSByZXNvbHZlZEFnZW50Q2FjaGUuZ2V0KGNhY2hlS2V5KTtcbiAgaWYgKGNhY2hlZCkge1xuICAgIHJldHVybiBjYWNoZWQ7XG4gIH1cblxuICBjb25zdCBpbnN0YW5jZSA9IGF3YWl0IHJlc29sdmVFbnRyeSh7IG5hbWUsIGVudHJ5IH0pO1xuICByZXNvbHZlZEFnZW50Q2FjaGUuc2V0KGNhY2hlS2V5LCBpbnN0YW5jZSk7XG4gIHJldHVybiBpbnN0YW5jZTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVRvb2xJbXBvcnRzKFxuICBsb2FkZXJzOiBSZWNvcmQ8c3RyaW5nLCBNb2R1bGVMb2FkZXI+XG4pOiBQcm9taXNlPFRvb2xTZXQ+IHtcbiAgY29uc3QgcmVzb2x2ZWQgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICBPYmplY3QuZW50cmllcyhsb2FkZXJzKS5tYXAoYXN5bmMgKFt0b29sTmFtZSwgbG9hZF0pID0+IHtcbiAgICAgIGNvbnN0IG1vZCA9IGF3YWl0IGxvYWQoKTtcbiAgICAgIGlmICghbW9kLmRlZmF1bHQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBUb29sIFwiJHt0b29sTmFtZX1cIiBtb2R1bGUgZG9lcyBub3QgaGF2ZSBhIGRlZmF1bHQgZXhwb3J0LlxcblxcbmAgK1xuICAgICAgICAgICAgYGhpbnQ6IHRvb2xzLyR7dG9vbE5hbWV9LnRzIChvciB0b29scy8ke3Rvb2xOYW1lfS9pbmRleC50cykgbXVzdCBleHBvcnQgYSBkZWZhdWx0IHRvb2wuXFxuXFxuYCArXG4gICAgICAgICAgICBgICBpbXBvcnQgeyB0b29sIH0gZnJvbSBcImFpXCI7XFxuYCArXG4gICAgICAgICAgICBcIiAgZXhwb3J0IGRlZmF1bHQgdG9vbCh7IC4uLiB9KTtcXG5cIlxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFt0b29sTmFtZSwgbW9kLmRlZmF1bHRdIGFzIGNvbnN0O1xuICAgIH0pXG4gICk7XG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMocmVzb2x2ZWQpIGFzIFRvb2xTZXQ7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVFbnRyeShvcHRzOiB7XG4gIG5hbWU6IHN0cmluZztcbiAgZW50cnk6IEFnZW50UmVnaXN0cnlFbnRyeTtcbn0pOiBQcm9taXNlPEFueUFnZW50PiB7XG4gIGNvbnN0IHsgbmFtZSwgZW50cnkgfSA9IG9wdHM7XG5cbiAgY29uc3QgY29uZmlnID0geyAuLi5lbnRyeS5jb25maWcgfTtcbiAgY29uc3QgdG9vbExvYWRlcnMgPSBlbnRyeS5pbXBvcnRzPy50b29scztcbiAgaWYgKHRvb2xMb2FkZXJzICYmIE9iamVjdC5rZXlzKHRvb2xMb2FkZXJzKS5sZW5ndGggPiAwKSB7XG4gICAgY29uZmlnLnRvb2xzID0gYXdhaXQgcmVzb2x2ZVRvb2xJbXBvcnRzKHRvb2xMb2FkZXJzKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgZW50cnkuaW1wb3J0ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBjb25zdCBtb2QgPSBhd2FpdCBlbnRyeS5pbXBvcnQoKTtcbiAgICBpZiAoIW1vZC5kZWZhdWx0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBBZ2VudCBcIiR7bmFtZX1cIiBtb2R1bGUgZG9lcyBub3QgaGF2ZSBhIGRlZmF1bHQgZXhwb3J0LlxcblxcbmAgK1xuICAgICAgICAgIGBoaW50OiBhZ2VudHMvJHtuYW1lfS9hZ2VudC50cyBtdXN0IGV4cG9ydCBhIGRlZmF1bHQgYWdlbnQgaW5zdGFuY2UuXFxuXFxuYCArXG4gICAgICAgICAgYCAgaW1wb3J0IHsgYWdlbnQgfSBmcm9tIFwiZXhwZXJpbWVudGFsLWFnZW50XCI7XFxuYCArXG4gICAgICAgICAgYCAgZXhwb3J0IGRlZmF1bHQgYWdlbnQoXCIke25hbWV9XCIsIHsgLi4uIH0pO1xcbmBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgaW1wb3J0ZWQgPSBtb2QuZGVmYXVsdCBhcyBBbnlBZ2VudDtcblxuICAgIGlmIChoYXNDb25maWcoY29uZmlnKSkge1xuICAgICAgcmV0dXJuIGNyZWF0ZUFnZW50KG5hbWUsIG1lcmdlRnJhbWV3b3JrT3B0aW9ucyhpbXBvcnRlZC5vcHRpb25zLCBjb25maWcpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaW1wb3J0ZWQ7XG4gIH1cblxuICByZXR1cm4gY3JlYXRlQWdlbnQobmFtZSwgY29uZmlnKTtcbn1cblxuZnVuY3Rpb24gaGFzQ29uZmlnKGNvbmZpZzogRnNBZ2VudENvbmZpZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gT2JqZWN0LmtleXMoY29uZmlnKS5sZW5ndGggPiAwO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBMkJBLFNBQVMsU0FBUyxRQUFpQztBQUNqRCxTQUFPLE9BQU8sU0FBUztBQUN6QjtBQUVBLFNBQVMsVUFBVSxRQUErQjtBQUNoRCxTQUFPLE9BQU8sVUFBVTtBQUMxQjtBQUVBLFNBQVMsVUFBVSxRQUF1QixPQUEwQjtBQUNsRSxTQUFPLG1CQUFtQixLQUFLLEtBQUssbUJBQW1CLFNBQVMsTUFBTSxDQUFDO0FBQ3pFO0FBRUEsU0FBUyxVQUFVLFFBQXVCLFdBQTJCO0FBQ25FLFNBQU8sSUFBSSxVQUFVLE1BQU0sQ0FBQyxJQUFJLE9BQU8sSUFBSSxJQUFJLFNBQVM7QUFDMUQ7QUFFQSxTQUFTLFdBQ1AsU0FDQSxPQUNxQztBQUNyQyxRQUFNLFNBQVMsRUFBRSxHQUFHLFNBQVMsR0FBRyxNQUFNO0FBQ3RDLFFBQU0sVUFBVSxPQUFPLFFBQVEsTUFBTSxFQUFFO0FBQUEsSUFDckMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLE1BQU0sVUFBYSxNQUFNO0FBQUEsRUFDdEM7QUFDQSxNQUFJLFFBQVEsV0FBVyxHQUFHO0FBQ3hCLFdBQU87QUFBQSxFQUNUO0FBQ0EsU0FBTyxPQUFPLFlBQVksT0FBTztBQUNuQztBQTRHTyxTQUFTLGFBQWE7QUFBQSxFQUMzQjtBQUFBLEVBQ0E7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LEVBQ3JEO0FBRUEsTUFBSSxPQUFPLE1BQU0sV0FBVyxZQUFZO0FBQ3RDLFVBQU0sTUFBTSxNQUFNLE1BQU0sT0FBTztBQUMvQixRQUFJLENBQUMsSUFBSSxTQUFTO0FBQ2hCLFlBQU0sSUFBSTtBQUFBLFFBQ1IsVUFBVSxJQUFJO0FBQUE7QUFBQSxlQUNJLElBQUk7QUFBQTtBQUFBO0FBQUEsMEJBRU8sSUFBSTtBQUFBO0FBQUEsTUFDbkM7QUFBQSxJQUNGO0FBRUEsVUFBTSxXQUFXLElBQUk7QUFFckIsUUFBSSxVQUFVLE1BQU0sR0FBRztBQUNyQixhQUFPLE1BQVksTUFBTSxzQkFBc0IsU0FBUyxTQUFTLE1BQU0sQ0FBQztBQUFBLElBQzFFO0FBRUEsV0FBTztBQUFBLEVBQ1Q7QUFFQSxTQUFPLE1BQVksTUFBTSxNQUFNO0FBQ2pDO0FBRUEsU0FBUyxVQUFVLFFBQWdDO0FBQ2pELFNBQU8sT0FBTyxLQUFLLE1BQU0sRUFBRSxTQUFTO0FBQ3RDOzs7QTVDL0dPLElBQU0sVUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVNyQixjQUFjO0FBQ2hCOyIsCiAgIm5hbWVzIjogWyJsb2ciLCAic25hcHNob3QiLCAibG9nIiwgImxvYWRTYW5kYm94U0RLIiwgImdldFRlc3RDcmVkZW50aWFscyIsICJsb2ciLCAic25hcHNob3QiLCAiYWdlbnQiLCAic2V0dXAiLCAic3RhcnRXb3JrZmxvdyIsICJzZGsiLCAiaW5zdGFuY2UiLCAicGF0aCIsICJyZXNvbHZlIiwgInBhdGgiLCAiZnMiLCAiaW1wb3J0X3VsaWQiLCAicGF0aCIsICJyZXNvbHZlIiwgImZzIiwgInJlc29sdmUiLCAiaW1wb3J0X3NlcmRlIiwgImltcG9ydF91bGlkIiwgInZlcmNlbFNhbmRib3giLCAiZG9ja2VyU2FuZGJveCIsICJsb2NhbFNhbmRib3giLCAiYWdlbnQiLCAibG9nIiwgInJlc29sdmUiLCAiYWdlbnQiLCAiaW1wb3J0X3VsaWQiLCAidXNhZ2UiLCAiZXJyb3JlIiwgImltcG9ydF91bGlkIiwgImltcG9ydF9haSIsICJhZ2VudCIsICJsb2ciLCAicmVhZEZpbGUiLCAicmVzb2x2ZSIsICJsb2ciLCAiaW1wb3J0X2FpIiwgImltcG9ydF91bGlkIiwgImltcG9ydF96b2QiLCAiZXhlYyIsICJhZ2VudCIsICJpbXBvcnRfYWkiLCAiYWdlbnQiLCAicGF0aCIsICJjcmVhdGVQcm9jZXNzTWFuYWdlciIsICJzdGFydCIsICJzdGF0ZSIsICJhZ2VudCIsICJyZXNvbHZlIiwgImxvZyIsICJzYW5kYm94IiwgInNhbmRib3hSZWNvcmQiLCAic3RyZWFtIiwgInN0cmVhbVRleHRBaSIsICJ1c2FnZSIsICJhZ2VudCIsICJsb2ciLCAidXNhZ2UiLCAibm93IiwgImlkIiwgImVycm9yZSIsICJhZ2VudCIsICJyZXNvbHZlIiwgInJlYWRGaWxlIiwgImFsbCIsICJlcnJvcmUiLCAiaW1wb3J0X3pvZCIsICJhZ2VudCIsICJhZ2VudCIsICJsb2ciXQp9Cg==
|